Merge "mediawiki.page.watch.ajax: Fail early if updateWatchLink is called wrong"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 20 Mar 2014 18:20:10 +0000 (18:20 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 20 Mar 2014 18:20:10 +0000 (18:20 +0000)
1323 files changed:
.jshintignore
.travis.yml
RELEASE-NOTES-1.23
api.php
composer-example.json
docs/hooks.txt
docs/magicword.txt
img_auth.php
includes/Action.php [deleted file]
includes/AjaxResponse.php
includes/Article.php
includes/AuthPlugin.php
includes/AutoLoader.php
includes/CacheHelper.php
includes/Category.php
includes/ChangesFeed.php
includes/DefaultSettings.php
includes/EditPage.php
includes/Exception.php [deleted file]
includes/Export.php
includes/Feed.php
includes/FormOptions.php
includes/GitInfo.php
includes/GlobalFunctions.php
includes/HistoryBlob.php
includes/Html.php
includes/Import.php
includes/MediaWikiVersionFetcher.php [new file with mode: 0644]
includes/Message.php
includes/MimeMagic.php
includes/OutputPage.php
includes/PHPVersionError.php
includes/Pager.php
includes/PathRouter.php
includes/PoolCounter.php
includes/Preferences.php
includes/ProtectionForm.php
includes/QueryPage.php
includes/Sanitizer.php
includes/Setup.php
includes/SiteStats.php
includes/Skin.php
includes/SkinTemplate.php
includes/Status.php
includes/Title.php
includes/User.php
includes/UserMailer.php
includes/WatchedItem.php
includes/WebRequest.php
includes/WebStart.php
includes/Wiki.php
includes/WikiMap.php
includes/WikiPage.php
includes/actions/Action.php [new file with mode: 0644]
includes/actions/FormAction.php [new file with mode: 0644]
includes/actions/FormlessAction.php [new file with mode: 0644]
includes/actions/InfoAction.php
includes/api/ApiBlock.php
includes/api/ApiComparePages.php
includes/api/ApiCreateAccount.php
includes/api/ApiDelete.php
includes/api/ApiDisabled.php
includes/api/ApiExpandTemplates.php
includes/api/ApiFeedContributions.php
includes/api/ApiFeedRecentChanges.php [new file with mode: 0644]
includes/api/ApiFeedWatchlist.php
includes/api/ApiFileRevert.php
includes/api/ApiFormatBase.php
includes/api/ApiHelp.php
includes/api/ApiImageRotate.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/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiPatrol.php
includes/api/ApiProtect.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/ApiQueryBlocks.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryCategoryInfo.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryContributors.php
includes/api/ApiQueryDeletedrevs.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/ApiQueryLangLinks.php
includes/api/ApiQueryLinks.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryPagePropNames.php
includes/api/ApiQueryPageProps.php
includes/api/ApiQueryPagesWithProp.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryQueryPage.php
includes/api/ApiQueryRandom.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRedirects.php [new file with mode: 0644]
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/ApiRevisionDelete.php
includes/api/ApiRollback.php
includes/api/ApiRsd.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/LocalisationCache.php
includes/cache/MessageCache.php
includes/cache/ProcessCacheLRU.php [deleted file]
includes/changes/ChangesList.php
includes/changes/EnhancedChangesList.php
includes/changes/OldChangesList.php
includes/changes/RCCacheEntryFactory.php [new file with mode: 0644]
includes/changes/RecentChange.php
includes/clientpool/RedisConnectionPool.php
includes/composer/ComposerHookHandler.php [new file with mode: 0644]
includes/composer/ComposerPackageModifier.php [new file with mode: 0644]
includes/composer/ComposerVersionNormalizer.php [new file with mode: 0644]
includes/content/AbstractContent.php
includes/content/Content.php
includes/content/ContentHandler.php
includes/content/CssContent.php
includes/content/CssContentHandler.php
includes/content/JavaScriptContent.php
includes/content/JavaScriptContentHandler.php
includes/content/MessageContent.php
includes/content/TextContent.php
includes/content/TextContentHandler.php
includes/content/WikitextContent.php
includes/content/WikitextContentHandler.php
includes/db/CloneDatabase.php
includes/db/Database.php
includes/db/DatabaseError.php
includes/db/DatabaseMssql.php
includes/db/DatabaseMysqli.php
includes/db/DatabaseOracle.php
includes/db/DatabasePostgres.php
includes/db/DatabaseSqlite.php
includes/db/DatabaseUtility.php
includes/db/LoadBalancer.php
includes/db/LoadMonitor.php
includes/diff/ArrayDiffFormatter.php
includes/diff/DairikiDiff.php
includes/diff/DiffFormatter.php
includes/diff/DifferenceEngine.php
includes/diff/TableDiffFormatter.php
includes/diff/UnifiedDiffFormatter.php
includes/diff/WikiDiff3.php
includes/exception/BadTitleError.php [new file with mode: 0644]
includes/exception/ErrorPageError.php [new file with mode: 0644]
includes/exception/FatalError.php [new file with mode: 0644]
includes/exception/HttpError.php [new file with mode: 0644]
includes/exception/MWException.php [new file with mode: 0644]
includes/exception/MWExceptionHandler.php [new file with mode: 0644]
includes/exception/PermissionsError.php [new file with mode: 0644]
includes/exception/ReadOnlyError.php [new file with mode: 0644]
includes/exception/ThrottledError.php [new file with mode: 0644]
includes/exception/UserBlockedError.php [new file with mode: 0644]
includes/exception/UserNotLoggedIn.php [new file with mode: 0644]
includes/externalstore/ExternalStoreMwstore.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendMultiWrite.php
includes/filebackend/FileBackendStore.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/lockmanager/RedisLockManager.php
includes/filerepo/ForeignDBViaLBRepo.php
includes/filerepo/file/LocalFile.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/HTMLMultiSelectField.php
includes/htmlform/HTMLRadioField.php
includes/htmlform/HTMLSelectAndOtherField.php
includes/htmlform/HTMLSelectField.php
includes/htmlform/HTMLSelectOrOtherField.php
includes/htmlform/HTMLTextField.php
includes/installer/InstallDocFormatter.php
includes/installer/Installer.i18n.php [deleted file]
includes/installer/Installer.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MssqlInstaller.php [new file with mode: 0644]
includes/installer/MssqlUpdater.php [new file with mode: 0644]
includes/installer/MysqlUpdater.php
includes/installer/OracleUpdater.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstallerOutput.php
includes/installer/WebInstallerPage.php
includes/installer/i18n/af.json [new file with mode: 0644]
includes/installer/i18n/aln.json [new file with mode: 0644]
includes/installer/i18n/am.json [new file with mode: 0644]
includes/installer/i18n/an.json [new file with mode: 0644]
includes/installer/i18n/ang.json [new file with mode: 0644]
includes/installer/i18n/ar.json [new file with mode: 0644]
includes/installer/i18n/arc.json [new file with mode: 0644]
includes/installer/i18n/ary.json [new file with mode: 0644]
includes/installer/i18n/arz.json [new file with mode: 0644]
includes/installer/i18n/as.json [new file with mode: 0644]
includes/installer/i18n/ast.json [new file with mode: 0644]
includes/installer/i18n/avk.json [new file with mode: 0644]
includes/installer/i18n/az.json [new file with mode: 0644]
includes/installer/i18n/ba.json [new file with mode: 0644]
includes/installer/i18n/bar.json [new file with mode: 0644]
includes/installer/i18n/bcc.json [new file with mode: 0644]
includes/installer/i18n/bcl.json [new file with mode: 0644]
includes/installer/i18n/be-tarask.json [new file with mode: 0644]
includes/installer/i18n/be.json [new file with mode: 0644]
includes/installer/i18n/bg.json [new file with mode: 0644]
includes/installer/i18n/bjn.json [new file with mode: 0644]
includes/installer/i18n/bn.json [new file with mode: 0644]
includes/installer/i18n/bpy.json [new file with mode: 0644]
includes/installer/i18n/br.json [new file with mode: 0644]
includes/installer/i18n/bs.json [new file with mode: 0644]
includes/installer/i18n/ca.json [new file with mode: 0644]
includes/installer/i18n/ce.json [new file with mode: 0644]
includes/installer/i18n/ceb.json [new file with mode: 0644]
includes/installer/i18n/ckb.json [new file with mode: 0644]
includes/installer/i18n/cps.json [new file with mode: 0644]
includes/installer/i18n/crh-cyrl.json [new file with mode: 0644]
includes/installer/i18n/crh-latn.json [new file with mode: 0644]
includes/installer/i18n/cs.json [new file with mode: 0644]
includes/installer/i18n/csb.json [new file with mode: 0644]
includes/installer/i18n/cu.json [new file with mode: 0644]
includes/installer/i18n/cv.json [new file with mode: 0644]
includes/installer/i18n/cy.json [new file with mode: 0644]
includes/installer/i18n/da.json [new file with mode: 0644]
includes/installer/i18n/de-formal.json [new file with mode: 0644]
includes/installer/i18n/de.json [new file with mode: 0644]
includes/installer/i18n/diq.json [new file with mode: 0644]
includes/installer/i18n/dsb.json [new file with mode: 0644]
includes/installer/i18n/dtp.json [new file with mode: 0644]
includes/installer/i18n/el.json [new file with mode: 0644]
includes/installer/i18n/en-gb.json [new file with mode: 0644]
includes/installer/i18n/en.json [new file with mode: 0644]
includes/installer/i18n/eo.json [new file with mode: 0644]
includes/installer/i18n/es-formal.json [new file with mode: 0644]
includes/installer/i18n/es.json [new file with mode: 0644]
includes/installer/i18n/et.json [new file with mode: 0644]
includes/installer/i18n/eu.json [new file with mode: 0644]
includes/installer/i18n/ext.json [new file with mode: 0644]
includes/installer/i18n/fa.json [new file with mode: 0644]
includes/installer/i18n/fi.json [new file with mode: 0644]
includes/installer/i18n/fo.json [new file with mode: 0644]
includes/installer/i18n/fr.json [new file with mode: 0644]
includes/installer/i18n/frc.json [new file with mode: 0644]
includes/installer/i18n/frp.json [new file with mode: 0644]
includes/installer/i18n/frr.json [new file with mode: 0644]
includes/installer/i18n/fur.json [new file with mode: 0644]
includes/installer/i18n/fy.json [new file with mode: 0644]
includes/installer/i18n/ga.json [new file with mode: 0644]
includes/installer/i18n/gag.json [new file with mode: 0644]
includes/installer/i18n/gan-hans.json [new file with mode: 0644]
includes/installer/i18n/gan-hant.json [new file with mode: 0644]
includes/installer/i18n/gd.json [new file with mode: 0644]
includes/installer/i18n/gl.json [new file with mode: 0644]
includes/installer/i18n/gom-latn.json [new file with mode: 0644]
includes/installer/i18n/grc.json [new file with mode: 0644]
includes/installer/i18n/gsw.json [new file with mode: 0644]
includes/installer/i18n/gu.json [new file with mode: 0644]
includes/installer/i18n/gv.json [new file with mode: 0644]
includes/installer/i18n/hak.json [new file with mode: 0644]
includes/installer/i18n/haw.json [new file with mode: 0644]
includes/installer/i18n/he.json [new file with mode: 0644]
includes/installer/i18n/hi.json [new file with mode: 0644]
includes/installer/i18n/hif-latn.json [new file with mode: 0644]
includes/installer/i18n/hil.json [new file with mode: 0644]
includes/installer/i18n/hr.json [new file with mode: 0644]
includes/installer/i18n/hsb.json [new file with mode: 0644]
includes/installer/i18n/ht.json [new file with mode: 0644]
includes/installer/i18n/hu-formal.json [new file with mode: 0644]
includes/installer/i18n/hu.json [new file with mode: 0644]
includes/installer/i18n/hy.json [new file with mode: 0644]
includes/installer/i18n/ia.json [new file with mode: 0644]
includes/installer/i18n/id.json [new file with mode: 0644]
includes/installer/i18n/ie.json [new file with mode: 0644]
includes/installer/i18n/ig.json [new file with mode: 0644]
includes/installer/i18n/ilo.json [new file with mode: 0644]
includes/installer/i18n/io.json [new file with mode: 0644]
includes/installer/i18n/is.json [new file with mode: 0644]
includes/installer/i18n/it.json [new file with mode: 0644]
includes/installer/i18n/ja.json [new file with mode: 0644]
includes/installer/i18n/jam.json [new file with mode: 0644]
includes/installer/i18n/jut.json [new file with mode: 0644]
includes/installer/i18n/jv.json [new file with mode: 0644]
includes/installer/i18n/ka.json [new file with mode: 0644]
includes/installer/i18n/kaa.json [new file with mode: 0644]
includes/installer/i18n/kbd-cyrl.json [new file with mode: 0644]
includes/installer/i18n/khw.json [new file with mode: 0644]
includes/installer/i18n/kiu.json [new file with mode: 0644]
includes/installer/i18n/kk-arab.json [new file with mode: 0644]
includes/installer/i18n/kk-cyrl.json [new file with mode: 0644]
includes/installer/i18n/kk-latn.json [new file with mode: 0644]
includes/installer/i18n/km.json [new file with mode: 0644]
includes/installer/i18n/kn.json [new file with mode: 0644]
includes/installer/i18n/ko.json [new file with mode: 0644]
includes/installer/i18n/krc.json [new file with mode: 0644]
includes/installer/i18n/ksh.json [new file with mode: 0644]
includes/installer/i18n/ku-latn.json [new file with mode: 0644]
includes/installer/i18n/lad.json [new file with mode: 0644]
includes/installer/i18n/lb.json [new file with mode: 0644]
includes/installer/i18n/lfn.json [new file with mode: 0644]
includes/installer/i18n/lg.json [new file with mode: 0644]
includes/installer/i18n/li.json [new file with mode: 0644]
includes/installer/i18n/lo.json [new file with mode: 0644]
includes/installer/i18n/lt.json [new file with mode: 0644]
includes/installer/i18n/lv.json [new file with mode: 0644]
includes/installer/i18n/lzh.json [new file with mode: 0644]
includes/installer/i18n/lzz.json [new file with mode: 0644]
includes/installer/i18n/mai.json [new file with mode: 0644]
includes/installer/i18n/mdf.json [new file with mode: 0644]
includes/installer/i18n/mg.json [new file with mode: 0644]
includes/installer/i18n/mhr.json [new file with mode: 0644]
includes/installer/i18n/min.json [new file with mode: 0644]
includes/installer/i18n/mk.json [new file with mode: 0644]
includes/installer/i18n/ml.json [new file with mode: 0644]
includes/installer/i18n/mn.json [new file with mode: 0644]
includes/installer/i18n/mr.json [new file with mode: 0644]
includes/installer/i18n/ms.json [new file with mode: 0644]
includes/installer/i18n/mt.json [new file with mode: 0644]
includes/installer/i18n/my.json [new file with mode: 0644]
includes/installer/i18n/myv.json [new file with mode: 0644]
includes/installer/i18n/mzn.json [new file with mode: 0644]
includes/installer/i18n/nah.json [new file with mode: 0644]
includes/installer/i18n/nan.json [new file with mode: 0644]
includes/installer/i18n/nb.json [new file with mode: 0644]
includes/installer/i18n/nds-nl.json [new file with mode: 0644]
includes/installer/i18n/nds.json [new file with mode: 0644]
includes/installer/i18n/ne.json [new file with mode: 0644]
includes/installer/i18n/nl-informal.json [new file with mode: 0644]
includes/installer/i18n/nl.json [new file with mode: 0644]
includes/installer/i18n/nn.json [new file with mode: 0644]
includes/installer/i18n/no.json [new file with mode: 0644]
includes/installer/i18n/oc.json [new file with mode: 0644]
includes/installer/i18n/or.json [new file with mode: 0644]
includes/installer/i18n/os.json [new file with mode: 0644]
includes/installer/i18n/pa.json [new file with mode: 0644]
includes/installer/i18n/pam.json [new file with mode: 0644]
includes/installer/i18n/pcd.json [new file with mode: 0644]
includes/installer/i18n/pdc.json [new file with mode: 0644]
includes/installer/i18n/pl.json [new file with mode: 0644]
includes/installer/i18n/pms.json [new file with mode: 0644]
includes/installer/i18n/pnt.json [new file with mode: 0644]
includes/installer/i18n/prg.json [new file with mode: 0644]
includes/installer/i18n/ps.json [new file with mode: 0644]
includes/installer/i18n/pt-br.json [new file with mode: 0644]
includes/installer/i18n/pt.json [new file with mode: 0644]
includes/installer/i18n/qqq.json [new file with mode: 0644]
includes/installer/i18n/qu.json [new file with mode: 0644]
includes/installer/i18n/rgn.json [new file with mode: 0644]
includes/installer/i18n/rm.json [new file with mode: 0644]
includes/installer/i18n/ro.json [new file with mode: 0644]
includes/installer/i18n/roa-tara.json [new file with mode: 0644]
includes/installer/i18n/ru.json [new file with mode: 0644]
includes/installer/i18n/rue.json [new file with mode: 0644]
includes/installer/i18n/sa.json [new file with mode: 0644]
includes/installer/i18n/sah.json [new file with mode: 0644]
includes/installer/i18n/sc.json [new file with mode: 0644]
includes/installer/i18n/scn.json [new file with mode: 0644]
includes/installer/i18n/sco.json [new file with mode: 0644]
includes/installer/i18n/sdc.json [new file with mode: 0644]
includes/installer/i18n/sei.json [new file with mode: 0644]
includes/installer/i18n/sh.json [new file with mode: 0644]
includes/installer/i18n/shi.json [new file with mode: 0644]
includes/installer/i18n/si.json [new file with mode: 0644]
includes/installer/i18n/sk.json [new file with mode: 0644]
includes/installer/i18n/sl.json [new file with mode: 0644]
includes/installer/i18n/sli.json [new file with mode: 0644]
includes/installer/i18n/so.json [new file with mode: 0644]
includes/installer/i18n/sq.json [new file with mode: 0644]
includes/installer/i18n/sr-ec.json [new file with mode: 0644]
includes/installer/i18n/sr-el.json [new file with mode: 0644]
includes/installer/i18n/srn.json [new file with mode: 0644]
includes/installer/i18n/ss.json [new file with mode: 0644]
includes/installer/i18n/stq.json [new file with mode: 0644]
includes/installer/i18n/su.json [new file with mode: 0644]
includes/installer/i18n/sv.json [new file with mode: 0644]
includes/installer/i18n/sw.json [new file with mode: 0644]
includes/installer/i18n/szl.json [new file with mode: 0644]
includes/installer/i18n/ta.json [new file with mode: 0644]
includes/installer/i18n/tcy.json [new file with mode: 0644]
includes/installer/i18n/te.json [new file with mode: 0644]
includes/installer/i18n/tet.json [new file with mode: 0644]
includes/installer/i18n/tg-cyrl.json [new file with mode: 0644]
includes/installer/i18n/tg-latn.json [new file with mode: 0644]
includes/installer/i18n/th.json [new file with mode: 0644]
includes/installer/i18n/tk.json [new file with mode: 0644]
includes/installer/i18n/tl.json [new file with mode: 0644]
includes/installer/i18n/tly.json [new file with mode: 0644]
includes/installer/i18n/tr.json [new file with mode: 0644]
includes/installer/i18n/tt-cyrl.json [new file with mode: 0644]
includes/installer/i18n/tt-latn.json [new file with mode: 0644]
includes/installer/i18n/udm.json [new file with mode: 0644]
includes/installer/i18n/ug-arab.json [new file with mode: 0644]
includes/installer/i18n/uk.json [new file with mode: 0644]
includes/installer/i18n/ur.json [new file with mode: 0644]
includes/installer/i18n/uz.json [new file with mode: 0644]
includes/installer/i18n/vec.json [new file with mode: 0644]
includes/installer/i18n/vep.json [new file with mode: 0644]
includes/installer/i18n/vi.json [new file with mode: 0644]
includes/installer/i18n/vo.json [new file with mode: 0644]
includes/installer/i18n/vro.json [new file with mode: 0644]
includes/installer/i18n/wa.json [new file with mode: 0644]
includes/installer/i18n/war.json [new file with mode: 0644]
includes/installer/i18n/wo.json [new file with mode: 0644]
includes/installer/i18n/wuu.json [new file with mode: 0644]
includes/installer/i18n/xal.json [new file with mode: 0644]
includes/installer/i18n/yi.json [new file with mode: 0644]
includes/installer/i18n/yo.json [new file with mode: 0644]
includes/installer/i18n/yue.json [new file with mode: 0644]
includes/installer/i18n/zea.json [new file with mode: 0644]
includes/installer/i18n/zh-hans.json [new file with mode: 0644]
includes/installer/i18n/zh-hant.json [new file with mode: 0644]
includes/installer/i18n/zh-hk.json [new file with mode: 0644]
includes/installer/i18n/zh-tw.json [new file with mode: 0644]
includes/job/Job.php [deleted file]
includes/job/JobQueue.php [deleted file]
includes/job/JobQueueDB.php [deleted file]
includes/job/JobQueueFederated.php [deleted file]
includes/job/JobQueueGroup.php [deleted file]
includes/job/JobQueueRedis.php [deleted file]
includes/job/JobSpecification.php [deleted file]
includes/job/README [deleted file]
includes/job/aggregator/JobQueueAggregator.php [deleted file]
includes/job/aggregator/JobQueueAggregatorMemc.php [deleted file]
includes/job/aggregator/JobQueueAggregatorRedis.php [deleted file]
includes/job/jobs/AssembleUploadChunksJob.php [deleted file]
includes/job/jobs/DoubleRedirectJob.php [deleted file]
includes/job/jobs/DuplicateJob.php [deleted file]
includes/job/jobs/EmaillingJob.php [deleted file]
includes/job/jobs/EnotifNotifyJob.php [deleted file]
includes/job/jobs/HTMLCacheUpdateJob.php [deleted file]
includes/job/jobs/NullJob.php [deleted file]
includes/job/jobs/PublishStashedFileJob.php [deleted file]
includes/job/jobs/RefreshLinksJob.php [deleted file]
includes/job/jobs/RefreshLinksJob2.php [deleted file]
includes/job/jobs/UploadFromUrlJob.php [deleted file]
includes/job/utils/BacklinkJobUtils.php [deleted file]
includes/jobqueue/Job.php [new file with mode: 0644]
includes/jobqueue/JobQueue.php [new file with mode: 0644]
includes/jobqueue/JobQueueDB.php [new file with mode: 0644]
includes/jobqueue/JobQueueFederated.php [new file with mode: 0644]
includes/jobqueue/JobQueueGroup.php [new file with mode: 0644]
includes/jobqueue/JobQueueRedis.php [new file with mode: 0644]
includes/jobqueue/JobSpecification.php [new file with mode: 0644]
includes/jobqueue/README [new file with mode: 0644]
includes/jobqueue/aggregator/JobQueueAggregator.php [new file with mode: 0644]
includes/jobqueue/aggregator/JobQueueAggregatorMemc.php [new file with mode: 0644]
includes/jobqueue/aggregator/JobQueueAggregatorRedis.php [new file with mode: 0644]
includes/jobqueue/jobs/AssembleUploadChunksJob.php [new file with mode: 0644]
includes/jobqueue/jobs/DoubleRedirectJob.php [new file with mode: 0644]
includes/jobqueue/jobs/DuplicateJob.php [new file with mode: 0644]
includes/jobqueue/jobs/EmaillingJob.php [new file with mode: 0644]
includes/jobqueue/jobs/EnotifNotifyJob.php [new file with mode: 0644]
includes/jobqueue/jobs/HTMLCacheUpdateJob.php [new file with mode: 0644]
includes/jobqueue/jobs/NullJob.php [new file with mode: 0644]
includes/jobqueue/jobs/PublishStashedFileJob.php [new file with mode: 0644]
includes/jobqueue/jobs/RefreshLinksJob.php [new file with mode: 0644]
includes/jobqueue/jobs/RefreshLinksJob2.php [new file with mode: 0644]
includes/jobqueue/jobs/UploadFromUrlJob.php [new file with mode: 0644]
includes/jobqueue/utils/BacklinkJobUtils.php [new file with mode: 0644]
includes/libs/CSSJanus.php
includes/libs/CSSMin.php
includes/libs/MultiHttpClient.php
includes/libs/ProcessCacheLRU.php [new file with mode: 0644]
includes/libs/lessc.inc.php
includes/logging/LogEventsList.php
includes/logging/LogPage.php
includes/logging/LogPager.php
includes/media/Bitmap.php
includes/media/DjVuImage.php
includes/media/Jpeg.php
includes/normal/RandomTest.php
includes/normal/Utf8Test.php
includes/normal/UtfNormal.php
includes/normal/UtfNormalBench.php
includes/normal/UtfNormalGenerate.php
includes/normal/UtfNormalMemStress.php
includes/normal/UtfNormalTest.php
includes/normal/UtfNormalUtil.php
includes/objectcache/BagOStuff.php
includes/objectcache/MemcachedBagOStuff.php
includes/objectcache/MemcachedPeclBagOStuff.php
includes/objectcache/RedisBagOStuff.php
includes/parser/CoreTagHooks.php
includes/parser/Parser.php
includes/parser/ParserCache.php
includes/parser/ParserOutput.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/profiler/Profiler.php
includes/profiler/ProfilerMwprof.php
includes/profiler/ProfilerSimple.php
includes/rcfeed/IRCColourfulRCFeedFormatter.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderContext.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/revisiondelete/RevisionDelete.php
includes/search/SearchEngine.php
includes/search/SearchHighlighter.php [new file with mode: 0644]
includes/search/SearchMySQL.php
includes/search/SearchOracle.php
includes/search/SearchPostgres.php
includes/search/SearchResult.php [new file with mode: 0644]
includes/search/SearchResultSet.php [new file with mode: 0644]
includes/site/SiteList.php
includes/specialpage/ChangesListSpecialPage.php
includes/specialpage/SpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialContributions.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialDiff.php
includes/specials/SpecialEmailuser.php
includes/specials/SpecialImport.php
includes/specials/SpecialPrefixindex.php
includes/specials/SpecialProtectedpages.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialRunJobs.php [new file with mode: 0644]
includes/specials/SpecialSearch.php
includes/specials/SpecialStatistics.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWhatlinkshere.php
includes/templates/NoLocalSettings.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/upload/UploadBase.php
includes/upload/UploadStash.php
languages/Language.php
languages/LanguageConverter.php
languages/classes/LanguageUz.php
languages/messages/MessagesAb.php
languages/messages/MessagesAce.php
languages/messages/MessagesAeb.php
languages/messages/MessagesAf.php
languages/messages/MessagesAk.php
languages/messages/MessagesAln.php
languages/messages/MessagesAn.php
languages/messages/MessagesAng.php
languages/messages/MessagesAnp.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesAry.php
languages/messages/MessagesArz.php
languages/messages/MessagesAs.php
languages/messages/MessagesAst.php
languages/messages/MessagesAy.php
languages/messages/MessagesAz.php
languages/messages/MessagesAzb.php
languages/messages/MessagesBa.php
languages/messages/MessagesBar.php
languages/messages/MessagesBbc_latn.php
languages/messages/MessagesBcc.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBho.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBn.php
languages/messages/MessagesBo.php
languages/messages/MessagesBpy.php
languages/messages/MessagesBqi.php
languages/messages/MessagesBr.php
languages/messages/MessagesBrh.php
languages/messages/MessagesBs.php
languages/messages/MessagesBxr.php
languages/messages/MessagesCa.php
languages/messages/MessagesCdo.php
languages/messages/MessagesCe.php
languages/messages/MessagesCeb.php
languages/messages/MessagesCh.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCo.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/MessagesDe_ch.php
languages/messages/MessagesDe_formal.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesDtp.php
languages/messages/MessagesDz.php
languages/messages/MessagesEe.php
languages/messages/MessagesEgl.php
languages/messages/MessagesEl.php
languages/messages/MessagesEml.php
languages/messages/MessagesEn.php
languages/messages/MessagesEn_ca.php
languages/messages/MessagesEn_gb.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/MessagesFf.php
languages/messages/MessagesFi.php
languages/messages/MessagesFit.php
languages/messages/MessagesFo.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrc.php
languages/messages/MessagesFrp.php
languages/messages/MessagesFrr.php
languages/messages/MessagesFur.php
languages/messages/MessagesFy.php
languages/messages/MessagesGag.php
languages/messages/MessagesGan.php
languages/messages/MessagesGan_hans.php
languages/messages/MessagesGan_hant.php
languages/messages/MessagesGd.php
languages/messages/MessagesGl.php
languages/messages/MessagesGn.php
languages/messages/MessagesGot.php
languages/messages/MessagesGrc.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.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/MessagesIke_cans.php
languages/messages/MessagesIke_latn.php
languages/messages/MessagesIlo.php
languages/messages/MessagesInh.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesJam.php
languages/messages/MessagesJbo.php
languages/messages/MessagesJut.php
languages/messages/MessagesJv.php
languages/messages/MessagesKa.php
languages/messages/MessagesKab.php
languages/messages/MessagesKbd_cyrl.php
languages/messages/MessagesKiu.php
languages/messages/MessagesKk.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/MessagesKri.php
languages/messages/MessagesKrj.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_arab.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesKv.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/MessagesLiv.php
languages/messages/MessagesLn.php
languages/messages/MessagesLo.php
languages/messages/MessagesLoz.php
languages/messages/MessagesLrc.php
languages/messages/MessagesLt.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/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMn.php
languages/messages/MessagesMr.php
languages/messages/MessagesMrj.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/MessagesNan.php
languages/messages/MessagesNap.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNe.php
languages/messages/MessagesNew.php
languages/messages/MessagesNl.php
languages/messages/MessagesNl_informal.php
languages/messages/MessagesNn.php
languages/messages/MessagesNov.php
languages/messages/MessagesNv.php
languages/messages/MessagesOc.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPag.php
languages/messages/MessagesPam.php
languages/messages/MessagesPcd.php
languages/messages/MessagesPdc.php
languages/messages/MessagesPdt.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPnb.php
languages/messages/MessagesPnt.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/MessagesRif.php
languages/messages/MessagesRm.php
languages/messages/MessagesRmy.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesRup.php
languages/messages/MessagesRuq_cyrl.php
languages/messages/MessagesRuq_latn.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/MessagesSei.php
languages/messages/MessagesSg.php
languages/messages/MessagesSgs.php
languages/messages/MessagesSh.php
languages/messages/MessagesShi.php
languages/messages/MessagesSi.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSma.php
languages/messages/MessagesSo.php
languages/messages/MessagesSq.php
languages/messages/MessagesSr.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/MessagesTg_cyrl.php
languages/messages/MessagesTh.php
languages/messages/MessagesTk.php
languages/messages/MessagesTl.php
languages/messages/MessagesTo.php
languages/messages/MessagesTpi.php
languages/messages/MessagesTr.php
languages/messages/MessagesTt.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesTt_latn.php
languages/messages/MessagesUdm.php
languages/messages/MessagesUg_arab.php
languages/messages/MessagesUk.php
languages/messages/MessagesUz.php
languages/messages/MessagesVec.php
languages/messages/MessagesVep.php
languages/messages/MessagesVi.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/MessagesYi.php
languages/messages/MessagesYo.php
languages/messages/MessagesYue.php
languages/messages/MessagesZea.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
languages/utils/CLDRPluralRuleEvaluator.php
maintenance/7zip.inc
maintenance/Maintenance.php
maintenance/archives/patch-user_password_expire.sql [new file with mode: 0644]
maintenance/attachLatest.php
maintenance/backup.inc
maintenance/backupPrefetch.inc
maintenance/backupTextPass.inc
maintenance/benchmarks/bench_strtr_str_replace.php
maintenance/cleanupCaps.php
maintenance/cleanupImages.php
maintenance/cleanupSpam.php
maintenance/cleanupTitles.php
maintenance/cleanupWatchlist.php
maintenance/compareParsers.php
maintenance/doMaintenance.php
maintenance/dumpBackup.php
maintenance/dumpIterator.php
maintenance/dumpLinks.php
maintenance/dumpSisterSites.php
maintenance/dumpTextPass.php
maintenance/fixDoubleRedirects.php
maintenance/generateJsonI18n.php
maintenance/importDump.php
maintenance/importTextFile.php
maintenance/install.php
maintenance/jsduck/categories.json
maintenance/jsduck/config.json
maintenance/language/generateUtf8Case.php
maintenance/language/messageTypes.inc
maintenance/language/messages.inc
maintenance/language/transstat.php
maintenance/mssql/tables.sql
maintenance/namespaceDupes.php
maintenance/oracle/archives/patch-user_password_expire.sql [new file with mode: 0644]
maintenance/oracle/tables.sql
maintenance/orphans.php
maintenance/postgres/tables.sql
maintenance/preprocessDump.php
maintenance/purgeList.php
maintenance/rebuildFileCache.php
maintenance/rebuildImages.php
maintenance/rebuildtextindex.php
maintenance/refreshImageMetadata.php
maintenance/renderDump.php
maintenance/runJobs.php
maintenance/showCacheStats.php
maintenance/syncFileBackend.php
maintenance/tables.sql
maintenance/update.php
maintenance/updateSpecialPages.php
maintenance/userDupes.inc
resources/Resources.php
resources/jquery.tipsy/jquery.tipsy.js
resources/jquery/jquery.ba-throttle-debounce.js [new file with mode: 0644]
resources/jquery/jquery.client.js
resources/jquery/jquery.color.js
resources/jquery/jquery.delayedBind.js
resources/jquery/jquery.expandableField.js
resources/jquery/jquery.hidpi.js
resources/jquery/jquery.localize.js
resources/jquery/jquery.mwExtension.js
resources/jquery/jquery.suggestions.js
resources/jquery/jquery.tablesorter.js
resources/mediawiki.action/mediawiki.action.edit.preview.js
resources/mediawiki.api/mediawiki.api.category.js
resources/mediawiki.api/mediawiki.api.edit.js
resources/mediawiki.api/mediawiki.api.js
resources/mediawiki.api/mediawiki.api.parse.js
resources/mediawiki.api/mediawiki.api.watch.js
resources/mediawiki.less/mediawiki.mixins.animation.less [new file with mode: 0644]
resources/mediawiki.less/mediawiki.mixins.less
resources/mediawiki.less/mediawiki.mixins.rotation.less [new file with mode: 0644]
resources/mediawiki.libs/CLDRPluralRuleParser.js
resources/mediawiki.page/mediawiki.page.patrol.ajax.js
resources/mediawiki.page/mediawiki.page.watch.ajax.js
resources/mediawiki.special/mediawiki.special.css
resources/mediawiki.special/mediawiki.special.preferences.js
resources/mediawiki.special/mediawiki.special.userlogin.signup.js
resources/mediawiki.ui/components/default/forms.less
resources/mediawiki.ui/mixins/forms.less
resources/mediawiki/mediawiki.debug.css [deleted file]
resources/mediawiki/mediawiki.debug.js
resources/mediawiki/mediawiki.debug.less [new file with mode: 0644]
resources/mediawiki/mediawiki.feedback.js
resources/mediawiki/mediawiki.hlist.css
resources/mediawiki/mediawiki.hlist.js
resources/mediawiki/mediawiki.inspect.js
resources/mediawiki/mediawiki.jqueryMsg.js
resources/mediawiki/mediawiki.jqueryMsg.peg
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.log.js
resources/mediawiki/mediawiki.notification.css
resources/mediawiki/mediawiki.notification.hideForPrint.css [new file with mode: 0644]
resources/mediawiki/mediawiki.notification.js
resources/mediawiki/mediawiki.searchSuggest.js
resources/mediawiki/mediawiki.toc.js
resources/mediawiki/mediawiki.user.js
resources/moment/LICENSE [new file with mode: 0644]
resources/moment/lang/ar-ma.js [new file with mode: 0644]
resources/moment/lang/ar.js [new file with mode: 0644]
resources/moment/lang/bg.js [new file with mode: 0644]
resources/moment/lang/br.js [new file with mode: 0644]
resources/moment/lang/bs.js [new file with mode: 0644]
resources/moment/lang/ca.js [new file with mode: 0644]
resources/moment/lang/cs.js [new file with mode: 0644]
resources/moment/lang/cv.js [new file with mode: 0644]
resources/moment/lang/cy.js [new file with mode: 0644]
resources/moment/lang/da.js [new file with mode: 0644]
resources/moment/lang/de.js [new file with mode: 0644]
resources/moment/lang/el.js [new file with mode: 0644]
resources/moment/lang/en-au.js [new file with mode: 0644]
resources/moment/lang/en-ca.js [new file with mode: 0644]
resources/moment/lang/en-gb.js [new file with mode: 0644]
resources/moment/lang/eo.js [new file with mode: 0644]
resources/moment/lang/es.js [new file with mode: 0644]
resources/moment/lang/et.js [new file with mode: 0644]
resources/moment/lang/eu.js [new file with mode: 0644]
resources/moment/lang/fa.js [new file with mode: 0644]
resources/moment/lang/fi.js [new file with mode: 0644]
resources/moment/lang/fo.js [new file with mode: 0644]
resources/moment/lang/fr-ca.js [new file with mode: 0644]
resources/moment/lang/fr.js [new file with mode: 0644]
resources/moment/lang/gl.js [new file with mode: 0644]
resources/moment/lang/he.js [new file with mode: 0644]
resources/moment/lang/hi.js [new file with mode: 0644]
resources/moment/lang/hr.js [new file with mode: 0644]
resources/moment/lang/hu.js [new file with mode: 0644]
resources/moment/lang/hy-am.js [new file with mode: 0644]
resources/moment/lang/id.js [new file with mode: 0644]
resources/moment/lang/is.js [new file with mode: 0644]
resources/moment/lang/it.js [new file with mode: 0644]
resources/moment/lang/ja.js [new file with mode: 0644]
resources/moment/lang/ka.js [new file with mode: 0644]
resources/moment/lang/ko.js [new file with mode: 0644]
resources/moment/lang/lb.js [new file with mode: 0644]
resources/moment/lang/lt.js [new file with mode: 0644]
resources/moment/lang/lv.js [new file with mode: 0644]
resources/moment/lang/mk.js [new file with mode: 0644]
resources/moment/lang/ml.js [new file with mode: 0644]
resources/moment/lang/mr.js [new file with mode: 0644]
resources/moment/lang/ms-my.js [new file with mode: 0644]
resources/moment/lang/nb.js [new file with mode: 0644]
resources/moment/lang/ne.js [new file with mode: 0644]
resources/moment/lang/nl.js [new file with mode: 0644]
resources/moment/lang/nn.js [new file with mode: 0644]
resources/moment/lang/pl.js [new file with mode: 0644]
resources/moment/lang/pt-br.js [new file with mode: 0644]
resources/moment/lang/pt.js [new file with mode: 0644]
resources/moment/lang/ro.js [new file with mode: 0644]
resources/moment/lang/rs.js [new file with mode: 0644]
resources/moment/lang/ru.js [new file with mode: 0644]
resources/moment/lang/sk.js [new file with mode: 0644]
resources/moment/lang/sl.js [new file with mode: 0644]
resources/moment/lang/sq.js [new file with mode: 0644]
resources/moment/lang/sv.js [new file with mode: 0644]
resources/moment/lang/ta.js [new file with mode: 0644]
resources/moment/lang/th.js [new file with mode: 0644]
resources/moment/lang/tl-ph.js [new file with mode: 0644]
resources/moment/lang/tr.js [new file with mode: 0644]
resources/moment/lang/tzm-la.js [new file with mode: 0644]
resources/moment/lang/tzm.js [new file with mode: 0644]
resources/moment/lang/uk.js [new file with mode: 0644]
resources/moment/lang/uz.js [new file with mode: 0644]
resources/moment/lang/vn.js [new file with mode: 0644]
resources/moment/lang/zh-cn.js [new file with mode: 0644]
resources/moment/lang/zh-tw.js [new file with mode: 0644]
resources/moment/moment.js [new file with mode: 0644]
resources/oojs-ui/i18n/ace.json [new file with mode: 0644]
resources/oojs-ui/i18n/af.json [new file with mode: 0644]
resources/oojs-ui/i18n/am.json [new file with mode: 0644]
resources/oojs-ui/i18n/ar.json [new file with mode: 0644]
resources/oojs-ui/i18n/arc.json [new file with mode: 0644]
resources/oojs-ui/i18n/ast.json [new file with mode: 0644]
resources/oojs-ui/i18n/az.json [new file with mode: 0644]
resources/oojs-ui/i18n/ba.json [new file with mode: 0644]
resources/oojs-ui/i18n/bcl.json [new file with mode: 0644]
resources/oojs-ui/i18n/be-tarask.json [new file with mode: 0644]
resources/oojs-ui/i18n/be.json [new file with mode: 0644]
resources/oojs-ui/i18n/bg.json [new file with mode: 0644]
resources/oojs-ui/i18n/bn.json [new file with mode: 0644]
resources/oojs-ui/i18n/br.json [new file with mode: 0644]
resources/oojs-ui/i18n/bs.json [new file with mode: 0644]
resources/oojs-ui/i18n/ca.json [new file with mode: 0644]
resources/oojs-ui/i18n/ce.json [new file with mode: 0644]
resources/oojs-ui/i18n/ckb.json [new file with mode: 0644]
resources/oojs-ui/i18n/co.json [new file with mode: 0644]
resources/oojs-ui/i18n/cs.json [new file with mode: 0644]
resources/oojs-ui/i18n/cu.json [new file with mode: 0644]
resources/oojs-ui/i18n/cy.json [new file with mode: 0644]
resources/oojs-ui/i18n/da.json [new file with mode: 0644]
resources/oojs-ui/i18n/de.json [new file with mode: 0644]
resources/oojs-ui/i18n/diq.json [new file with mode: 0644]
resources/oojs-ui/i18n/dsb.json [new file with mode: 0644]
resources/oojs-ui/i18n/el.json [new file with mode: 0644]
resources/oojs-ui/i18n/eml.json [new file with mode: 0644]
resources/oojs-ui/i18n/en.json [new file with mode: 0644]
resources/oojs-ui/i18n/eo.json [new file with mode: 0644]
resources/oojs-ui/i18n/es.json [new file with mode: 0644]
resources/oojs-ui/i18n/et.json [new file with mode: 0644]
resources/oojs-ui/i18n/eu.json [new file with mode: 0644]
resources/oojs-ui/i18n/fa.json [new file with mode: 0644]
resources/oojs-ui/i18n/fi.json [new file with mode: 0644]
resources/oojs-ui/i18n/fo.json [new file with mode: 0644]
resources/oojs-ui/i18n/fr.json [new file with mode: 0644]
resources/oojs-ui/i18n/frr.json [new file with mode: 0644]
resources/oojs-ui/i18n/fur.json [new file with mode: 0644]
resources/oojs-ui/i18n/gl.json [new file with mode: 0644]
resources/oojs-ui/i18n/gu.json [new file with mode: 0644]
resources/oojs-ui/i18n/he.json [new file with mode: 0644]
resources/oojs-ui/i18n/hi.json [new file with mode: 0644]
resources/oojs-ui/i18n/hr.json [new file with mode: 0644]
resources/oojs-ui/i18n/hsb.json [new file with mode: 0644]
resources/oojs-ui/i18n/hu.json [new file with mode: 0644]
resources/oojs-ui/i18n/hy.json [new file with mode: 0644]
resources/oojs-ui/i18n/ia.json [new file with mode: 0644]
resources/oojs-ui/i18n/id.json [new file with mode: 0644]
resources/oojs-ui/i18n/ie.json [new file with mode: 0644]
resources/oojs-ui/i18n/ilo.json [new file with mode: 0644]
resources/oojs-ui/i18n/is.json [new file with mode: 0644]
resources/oojs-ui/i18n/it.json [new file with mode: 0644]
resources/oojs-ui/i18n/ja.json [new file with mode: 0644]
resources/oojs-ui/i18n/jv.json [new file with mode: 0644]
resources/oojs-ui/i18n/ka.json [new file with mode: 0644]
resources/oojs-ui/i18n/kk-cyrl.json [new file with mode: 0644]
resources/oojs-ui/i18n/km.json [new file with mode: 0644]
resources/oojs-ui/i18n/kn.json [new file with mode: 0644]
resources/oojs-ui/i18n/ko.json [new file with mode: 0644]
resources/oojs-ui/i18n/krc.json [new file with mode: 0644]
resources/oojs-ui/i18n/kw.json [new file with mode: 0644]
resources/oojs-ui/i18n/ky.json [new file with mode: 0644]
resources/oojs-ui/i18n/lb.json [new file with mode: 0644]
resources/oojs-ui/i18n/lmo.json [new file with mode: 0644]
resources/oojs-ui/i18n/lt.json [new file with mode: 0644]
resources/oojs-ui/i18n/lv.json [new file with mode: 0644]
resources/oojs-ui/i18n/mg.json [new file with mode: 0644]
resources/oojs-ui/i18n/min.json [new file with mode: 0644]
resources/oojs-ui/i18n/mk.json [new file with mode: 0644]
resources/oojs-ui/i18n/ml.json [new file with mode: 0644]
resources/oojs-ui/i18n/mr.json [new file with mode: 0644]
resources/oojs-ui/i18n/ms.json [new file with mode: 0644]
resources/oojs-ui/i18n/nap.json [new file with mode: 0644]
resources/oojs-ui/i18n/nb.json [new file with mode: 0644]
resources/oojs-ui/i18n/nds-nl.json [new file with mode: 0644]
resources/oojs-ui/i18n/nds.json [new file with mode: 0644]
resources/oojs-ui/i18n/ne.json [new file with mode: 0644]
resources/oojs-ui/i18n/nl.json [new file with mode: 0644]
resources/oojs-ui/i18n/nn.json [new file with mode: 0644]
resources/oojs-ui/i18n/om.json [new file with mode: 0644]
resources/oojs-ui/i18n/or.json [new file with mode: 0644]
resources/oojs-ui/i18n/pa.json [new file with mode: 0644]
resources/oojs-ui/i18n/pfl.json [new file with mode: 0644]
resources/oojs-ui/i18n/pl.json [new file with mode: 0644]
resources/oojs-ui/i18n/pms.json [new file with mode: 0644]
resources/oojs-ui/i18n/ps.json [new file with mode: 0644]
resources/oojs-ui/i18n/pt-br.json [new file with mode: 0644]
resources/oojs-ui/i18n/pt.json [new file with mode: 0644]
resources/oojs-ui/i18n/qqq.json [new file with mode: 0644]
resources/oojs-ui/i18n/qu.json [new file with mode: 0644]
resources/oojs-ui/i18n/ro.json [new file with mode: 0644]
resources/oojs-ui/i18n/roa-tara.json [new file with mode: 0644]
resources/oojs-ui/i18n/ru.json [new file with mode: 0644]
resources/oojs-ui/i18n/sah.json [new file with mode: 0644]
resources/oojs-ui/i18n/scn.json [new file with mode: 0644]
resources/oojs-ui/i18n/sco.json [new file with mode: 0644]
resources/oojs-ui/i18n/sh.json [new file with mode: 0644]
resources/oojs-ui/i18n/si.json [new file with mode: 0644]
resources/oojs-ui/i18n/sk.json [new file with mode: 0644]
resources/oojs-ui/i18n/sl.json [new file with mode: 0644]
resources/oojs-ui/i18n/sq.json [new file with mode: 0644]
resources/oojs-ui/i18n/sr-ec.json [new file with mode: 0644]
resources/oojs-ui/i18n/sv.json [new file with mode: 0644]
resources/oojs-ui/i18n/sw.json [new file with mode: 0644]
resources/oojs-ui/i18n/ta.json [new file with mode: 0644]
resources/oojs-ui/i18n/te.json [new file with mode: 0644]
resources/oojs-ui/i18n/th.json [new file with mode: 0644]
resources/oojs-ui/i18n/tl.json [new file with mode: 0644]
resources/oojs-ui/i18n/tr.json [new file with mode: 0644]
resources/oojs-ui/i18n/tt-cyrl.json [new file with mode: 0644]
resources/oojs-ui/i18n/ug-arab.json [new file with mode: 0644]
resources/oojs-ui/i18n/uk.json [new file with mode: 0644]
resources/oojs-ui/i18n/uz.json [new file with mode: 0644]
resources/oojs-ui/i18n/vec.json [new file with mode: 0644]
resources/oojs-ui/i18n/vi.json [new file with mode: 0644]
resources/oojs-ui/i18n/vo.json [new file with mode: 0644]
resources/oojs-ui/i18n/wuu.json [new file with mode: 0644]
resources/oojs-ui/i18n/yi.json [new file with mode: 0644]
resources/oojs-ui/i18n/yo.json [new file with mode: 0644]
resources/oojs-ui/i18n/zh-hans.json [new file with mode: 0644]
resources/oojs-ui/i18n/zh-hant.json [new file with mode: 0644]
resources/oojs-ui/i18n/zh-hk.json [new file with mode: 0644]
resources/oojs-ui/i18n/zh-tw.json [new file with mode: 0644]
resources/oojs-ui/images/fade-down.png [new file with mode: 0644]
resources/oojs-ui/images/fade-up.png [new file with mode: 0644]
resources/oojs-ui/images/icons/accept.png [new file with mode: 0644]
resources/oojs-ui/images/icons/accept.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/add-item.png [new file with mode: 0644]
resources/oojs-ui/images/icons/add-item.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/advanced.png [new file with mode: 0644]
resources/oojs-ui/images/icons/advanced.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/alert.png [new file with mode: 0644]
resources/oojs-ui/images/icons/alert.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/arched-arrow-ltr.png [new file with mode: 0644]
resources/oojs-ui/images/icons/arched-arrow-ltr.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/arched-arrow-rtl.png [new file with mode: 0644]
resources/oojs-ui/images/icons/arched-arrow-rtl.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/check.png [new file with mode: 0644]
resources/oojs-ui/images/icons/check.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/clear.png [new file with mode: 0644]
resources/oojs-ui/images/icons/clear.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/close.png [new file with mode: 0644]
resources/oojs-ui/images/icons/close.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/code.png [new file with mode: 0644]
resources/oojs-ui/images/icons/code.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/collapse.png [new file with mode: 0644]
resources/oojs-ui/images/icons/collapse.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/comment.png [new file with mode: 0644]
resources/oojs-ui/images/icons/comment.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/expand.png [new file with mode: 0644]
resources/oojs-ui/images/icons/expand.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/help.png [new file with mode: 0644]
resources/oojs-ui/images/icons/help.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/history.png [new file with mode: 0644]
resources/oojs-ui/images/icons/history.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/link.png [new file with mode: 0644]
resources/oojs-ui/images/icons/link.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/menu.png [new file with mode: 0644]
resources/oojs-ui/images/icons/menu.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/move-ltr.png [new file with mode: 0644]
resources/oojs-ui/images/icons/move-ltr.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/move-rtl.png [new file with mode: 0644]
resources/oojs-ui/images/icons/move-rtl.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/picture.png [new file with mode: 0644]
resources/oojs-ui/images/icons/picture.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/remove-item.png [new file with mode: 0644]
resources/oojs-ui/images/icons/remove-item.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/remove.png [new file with mode: 0644]
resources/oojs-ui/images/icons/remove.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/search.png [new file with mode: 0644]
resources/oojs-ui/images/icons/search.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/settings.png [new file with mode: 0644]
resources/oojs-ui/images/icons/settings.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/tag.png [new file with mode: 0644]
resources/oojs-ui/images/icons/tag.svg [new file with mode: 0644]
resources/oojs-ui/images/icons/window.png [new file with mode: 0644]
resources/oojs-ui/images/icons/window.svg [new file with mode: 0644]
resources/oojs-ui/images/indicators/down.png [new file with mode: 0644]
resources/oojs-ui/images/indicators/down.svg [new file with mode: 0644]
resources/oojs-ui/images/indicators/required.png [new file with mode: 0644]
resources/oojs-ui/images/indicators/required.svg [new file with mode: 0644]
resources/oojs-ui/images/indicators/up.png [new file with mode: 0644]
resources/oojs-ui/images/indicators/up.svg [new file with mode: 0644]
resources/oojs-ui/images/tail.svg [new file with mode: 0644]
resources/oojs-ui/images/textures/pending.gif [new file with mode: 0644]
resources/oojs-ui/images/textures/transparency.png [new file with mode: 0644]
resources/oojs-ui/images/toolbar-shadow.png [new file with mode: 0644]
resources/oojs-ui/oojs-ui-apex.css [new file with mode: 0644]
resources/oojs-ui/oojs-ui.js [new file with mode: 0644]
resources/oojs-ui/oojs-ui.svg.css [new file with mode: 0644]
resources/oojs-ui/update-oojs-ui.sh [new file with mode: 0755]
resources/oojs/oojs.js
resources/oojs/update-oojs.sh [new file with mode: 0755]
resources/sinonjs/sinon-1.9.0.js [new file with mode: 0644]
resources/sinonjs/sinon-ie-1.9.0.js [new file with mode: 0644]
skins/CologneBlue.php
skins/MonoBook.php
skins/Vector.php
skins/cologneblue/screen.css
skins/common/shared.css
skins/monobook/main.css
skins/vector/collapsibleTabs.js
skins/vector/components/animations.less [new file with mode: 0644]
skins/vector/components/common.less
skins/vector/components/navigation.less
skins/vector/components/search.less
skins/vector/components/tabs.less
skins/vector/components/watchstar.less
skins/vector/images/arrow-collapsed-ltr.svg
skins/vector/images/arrow-collapsed-rtl.svg
skins/vector/images/arrow-down-focus-icon.svg
skins/vector/images/arrow-down-icon.svg
skins/vector/images/arrow-expanded.svg
skins/vector/images/audio-icon.svg
skins/vector/images/document-icon.svg
skins/vector/images/edit-icon.png [deleted file]
skins/vector/images/external-link-ltr-icon.svg
skins/vector/images/external-link-rtl-icon.svg
skins/vector/images/file-icon.svg
skins/vector/images/lock-icon.svg
skins/vector/images/mail-icon.svg
skins/vector/images/news-icon.svg
skins/vector/images/page-fade.png [new file with mode: 0644]
skins/vector/images/talk-icon.svg
skins/vector/images/unwatch-icon-hl.svg
skins/vector/images/unwatch-icon.svg
skins/vector/images/user-icon.svg
skins/vector/images/video-icon.svg
skins/vector/images/watch-icon-hl.svg
skins/vector/images/watch-icon-loading.svg
skins/vector/images/watch-icon.svg
skins/vector/styles.less
skins/vector/variables.less
skins/vector/vector.js
tests/TestsAutoLoader.php
tests/parser/ParserTestResult.php
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/parserTests.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/ResourceLoaderTestCase.php [new file with mode: 0644]
tests/phpunit/docs/ExportDemoTest.php
tests/phpunit/includes/ArticleTablesTest.php
tests/phpunit/includes/ExceptionTest.php [deleted file]
tests/phpunit/includes/ExtraParserTest.php
tests/phpunit/includes/LinksUpdateTest.php
tests/phpunit/includes/MWExceptionHandlerTest.php [deleted file]
tests/phpunit/includes/MediaWikiVersionFetcherTest.php [new file with mode: 0644]
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/ResourceLoaderModuleTest.php [deleted file]
tests/phpunit/includes/ResourceLoaderTest.php [deleted file]
tests/phpunit/includes/RevisionStorageTest.php
tests/phpunit/includes/SampleTest.php
tests/phpunit/includes/SiteConfigurationTest.php
tests/phpunit/includes/SkinTemplateTest.php [new file with mode: 0644]
tests/phpunit/includes/StatusTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/UserTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/XmlTest.php
tests/phpunit/includes/api/ApiCreateAccountTest.php
tests/phpunit/includes/api/ApiEditPageTest.php
tests/phpunit/includes/api/ApiQueryAllPagesTest.php
tests/phpunit/includes/cache/ProcessCacheLRUTest.php [deleted file]
tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php [new file with mode: 0644]
tests/phpunit/includes/changes/RecentChangeTest.php
tests/phpunit/includes/composer/ComposerVersionNormalizerTest.php [new file with mode: 0644]
tests/phpunit/includes/diff/ArrayDiffFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/diff/DiffOpTest.php [new file with mode: 0644]
tests/phpunit/includes/diff/DiffTest.php [new file with mode: 0644]
tests/phpunit/includes/diff/DifferenceEngineTest.php
tests/phpunit/includes/diff/FakeDiffOp.php [new file with mode: 0644]
tests/phpunit/includes/exception/BadTitleErrorTest.php [new file with mode: 0644]
tests/phpunit/includes/exception/ErrorPageErrorTest.php [new file with mode: 0644]
tests/phpunit/includes/exception/MWExceptionHandlerTest.php [new file with mode: 0644]
tests/phpunit/includes/exception/MWExceptionTest.php [new file with mode: 0644]
tests/phpunit/includes/exception/ReadOnlyErrorTest.php [new file with mode: 0644]
tests/phpunit/includes/exception/ThrottledErrorTest.php [new file with mode: 0644]
tests/phpunit/includes/exception/UserNotLoggedInTest.php [new file with mode: 0644]
tests/phpunit/includes/installer/InstallDocFormatterTest.php
tests/phpunit/includes/libs/CSSJanusTest.php
tests/phpunit/includes/libs/JavaScriptMinifierTest.php
tests/phpunit/includes/libs/ProcessCacheLRUTest.php [new file with mode: 0644]
tests/phpunit/includes/libs/RunningStatTest.php
tests/phpunit/includes/normal/CleanUpTest.php
tests/phpunit/includes/objectcache/BagOStuffTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php [new file with mode: 0644]
tests/phpunit/includes/resourceloader/ResourceLoaderStartupModuleTest.php [new file with mode: 0644]
tests/phpunit/includes/resourceloader/ResourceLoaderTest.php [new file with mode: 0644]
tests/phpunit/includes/search/SearchUpdateTest.php
tests/phpunit/includes/site/SiteListTest.php
tests/phpunit/includes/specials/QueryAllSpecialPagesTest.php
tests/phpunit/includes/specials/SpecialPreferencesTest.php
tests/phpunit/includes/upload/UploadFromUrlTest.php
tests/phpunit/includes/upload/UploadStashTest.php
tests/phpunit/includes/utils/UIDGeneratorTest.php
tests/phpunit/languages/LanguageTest.php
tests/phpunit/languages/SpecialPageAliasTest.php [new file with mode: 0644]
tests/phpunit/phpunit.php
tests/phpunit/structure/StructureTest.php
tests/phpunit/suites/ExtensionsTestSuite.php
tests/phpunit/tests/MediaWikiTestCaseTest.php [new file with mode: 0644]
tests/qunit/QUnitTestResources.php
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.client.test.js
tests/qunit/suites/resources/jquery/jquery.color.test.js [new file with mode: 0644]
tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js [deleted file]
tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js
tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.watch.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/testHelpers.inc
thumb.php

index db4ac44..a44a4d4 100644 (file)
@@ -11,10 +11,12 @@ extensions/
 node_modules/
 resources/jquery/jquery.appear.js
 resources/jquery/jquery.async.js
-resources/jquery/jquery.cycle.all.js
+resources/jquery/jquery.ba-throttle-debounce.js
 resources/jquery/jquery.cookie.js
+resources/jquery/jquery.cycle.all.js
 resources/jquery/jquery.farbtastic.js
 resources/jquery/jquery.form.js
+resources/jquery/jquery.fullscreen.js
 resources/jquery/jquery.hoverIntent.js
 resources/jquery/jquery.js
 resources/jquery/jquery.json.js
@@ -23,12 +25,15 @@ resources/jquery/jquery.mockjax.js
 resources/jquery/jquery.qunit.js
 resources/jquery/jquery.validate.js
 resources/jquery/jquery.xmldom.js
+resources/jquery.chosen/chosen.jquery.js
 resources/jquery.effects/
 resources/jquery.tipsy/
 resources/jquery.ui/
 resources/mediawiki.libs/
-resources/jquery.chosen/chosen.jquery.js
 resources/oojs/
+resources/oojs-ui/
+resources/sinonjs/
+resources/moment/
 
 # github.com/jshint/jshint/issues/729
 tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js
index 84fa456..eb05fe2 100644 (file)
@@ -4,12 +4,21 @@
 # The Wikimedia Foundation uses a self-hosted Jenkins instance to run unit
 # tests, but it tests code against the version of PHP that is deployed on
 # Wikimedia's production cluster. This Travis CI configuration is designed to
-# complement that setup by testing MediaWiki against HHVM.
+# complement that setup by testing MediaWiki on travis
 #
 language: php
 
 php:
   - hhvm
+  - 5.3
+  - 5.4
+  - 5.5
+
+matrix:
+  allow_failures:
+    - php: 5.3
+    - php: 5.4
+    - php: 5.5
 
 services:
   - mysql
@@ -29,7 +38,7 @@ before_script:
   # Travis CI's HHVM environment provides PHPUnit as a phar file, but
   # MediaWiki's test suite only works if individual PHPUnit files are
   # actual files on disk (bug 58881).
-  - composer require 'phpunit/phpunit=3.7.*'
+  - composer require 'phpunit/phpunit=3.7.*' --prefer-source
   - >
       php maintenance/install.php testwiki admin
       --pass travis
@@ -40,7 +49,13 @@ before_script:
 
 script:
   - >
-      hhvm --php
-      -d include_path=".$(printf ':%s' vendor/phpunit/*)"
-      -d date.timezone="Etc/UTC"
-      tests/phpunit/phpunit.php
+      if [ "$TRAVIS_PHP_VERSION" = "hhvm" ];
+      then
+        hhvm --php \
+        -d include_path=".$(printf ':%s' vendor/phpunit/*)" \
+        -d date.timezone="Etc/UTC" \
+        tests/phpunit/phpunit.php
+      else
+        php tests/phpunit/phpunit.php \
+        --with-phpunitdir ./vendor/phpunit/phpunit
+      fi
index 59118bd..340aa50 100644 (file)
@@ -9,6 +9,9 @@ MediaWiki 1.23 is an alpha-quality branch and is not recommended for use in
 production.
 
 === Configuration changes in 1.23 ===
+* When $wgJobRunRate is higher that zero, jobs are now executed via an
+  asynchronous HTTP request to a MediaWiki entry point. This may require
+  increasing the number of server worker threads.
 * $wgDebugLogGroups values may be set to an associative array with a
   'destination' key specifying the log destination. The array may also contain
   a 'sample' key with a positive integer value N indicating that the log group
@@ -28,12 +31,25 @@ production.
   and talk pages are now watched by them by default.
 * $wgLBFactoryConf: Class names have had underscores removed. The configuration
   should be updated if LBFactory_Simple or LBFactory_Multi is configured.
-* $wgPasswordSenderName has been deprecated. To set a custom mailer name,
-  the system message 'emailsender' should be modified (default: "{{SITENAME}}").
+* $wgPasswordSenderName has been removed and is no longer functional. To set a
+  custom mailer name, the system message 'emailsender' should be modified
+  (default: "{{SITENAME}}").
 * $wgDBAhandler was removed as the only class using it was also removed
 * The 'max threads' setting was removed from $wgDBservers.
 * Support for AdminSettings.php has been completely removed. All configuration
   belongs in LocalSettings.php.
+* $wgSkipSkin, which has been replaceable by $wgSkipSkins since 2005 (r9249), is
+  now formally deprecated.
+* Removed deprecated $wgDisabledActions as it is hardly used anywhere.
+* $wgRateLimitLog has been deprecated and replaced by
+  $wgDebugLogGroup['ratelimit'].
+* $wgLocalInterwikis is an array containing multiple local interwiki prefixes
+  (interwiki prefixes that point back to the current wiki). This effectively
+  allows more than one value of $wgLocalInterwiki to be specified and
+  understood by the parser. The value of $wgLocalInterwiki is automatically
+  prepended to the start of this array.
+* $wgQueryPages has been removed. Query Pages should be added to by using the
+  wgQueryPages hook.
 
 === New features in 1.23 ===
 * ResourceLoader can utilize the Web Storage API to cache modules client-side.
@@ -84,6 +100,36 @@ production.
   revision comparison pages using syntax such as [[Special:Diff/12345]],
   [[Special:Diff/12345/prev]] or [[Special:Diff/12345/98765]].
 * New user accounts' personal and talk pages are now watched by them by default.
+* Added SkinTemplateGetLanguageLink hook to allow changing the html of language
+  links.
+* Added MessageCache::get hook as a new way to customize messages across
+  multiple sites.
+* Added jquery.throttle-debounce ResourceLoader module to limit the number of
+  callbacks for frequently occurring events.
+* Special:ProtectedPages shows now a table. The timestamp, the reason and
+  the protecting user is also shown.
+* Added experimental support for using Microsoft SQL Server as the database
+  backend.
+** Added new Microsoft SQL Server-specific configuration variable
+   $wgDBWindowsAuthentication, which makes the web server authenticate against
+   the database server using Integrated Windows Authentication instead of
+   $wgDBuser/$wgDBpassword.
+* HTMLForm 'select', 'selectandother', 'selectorother', 'multiselect', and
+  'radio' fields can now use message keys as labels via the 'options-messages'
+  parameter, which overrides the 'options' parameter.
+* Admins can expire users users passwords manually, or on a schedule using the
+  $wgPasswordExpirationDays configuration setting.
+* Add new hook SendWatchlistEmailNotification, this will be used to determine
+  whether to send a watchlist email notification.
+* (bug 42026) Special:Contributions now includes an option to filter page
+  creations, similar to the topOnly option.
+* Add mediawiki.ui.button styling to all pages so wiki content can use styled
+  buttons.
+* Special:UserLogin/signup now does AJAX checks for invalid and taken usernames,
+  displaying the error live.
+* Added BaseTemplateAfterPortlet hook to allow injecting html after portlets in skins.
+* Support has been added for a JSON based localisation file format. The
+  installer has been updated to use it.
 
 === Bug fixes in 1.23 ===
 * (bug 41759) The "updated since last visit" markers (on history pages, recent
@@ -119,6 +165,13 @@ production.
 * (bug 60543) Special:PrefixIndex forgot stripprefix=1 for "Next page" link
 * (bug 29762) Undoing an already-undone edit will now display an appropriate
   message instead of leading the user to make a null edit.
+* (bug 52659) mediawiki.notification: Notification area remained visible when
+  empty and thus was stealing pointer events from links on the page.
+* (bug 26811) When a DBUnexpectedError occurs, DB server hostnames are now
+  hidden unless $wgShowExceptionDetails is true, and $wgShowDBErrorBacktrace
+  no longer applies in such cases.
+* (bug 60960) Avoid doing file_exist() checks on data: URIs, as they cause
+  warnings to be printed on Windows due to large path length.
 
 === Web API changes in 1.23 ===
 * (bug 54884) action=parse&prop=categories now indicates hidden and missing
@@ -158,6 +211,17 @@ production.
 * (bug 32151) ApiWatch now has pageset capabilities (titles/pageids/generators).
   Title parameter is now deprecated.
 * (bug 23005) Added action=revisiondelete.
+* Added siprop=restrictions to API action=query&meta=siteinfo for querying
+  possible page restriction (protection) levels and types.
+* Added prop 'limitreportdata' and 'limitreporthtml' to action=parse.
+* (bug 58627) Provide language names on action=parse&prop=langlinks.
+* Deprecated llurl= in favour of llprop=url for action=query&prop=langlinks.
+* Added llprop=langname and llprop=autonym for action=query&prop=langlinks.
+* prop=redirects is added, to return redirects to the pages in the query.
+* list=allredirects is added, to list all redirects pointing to a namespace.
+* (bug 42026) Added ucshow={new,!new,top,!top} to list=usercontribs.
+  Also added newonly to action=feedcontributions.
+* (bug 42026) Deprecated uctoponly in favor of ucshow=top.
 
 === Languages updated in 1.23 ===
 
@@ -210,6 +274,35 @@ changes to languages because of Bugzilla reports.
   3 headings)" was removed.
 * (bug 52810) Preference "Justify paragraphs" was removed.
 * OutputPage::showErrorPage raises a notice if arguments are incoherent.
+* Thumbnails that keep failing to render in thumb.php will be rate-limited
+  againt further render attempts for 1 hour. $wgAttemptFailureEpoch can be
+  altered to reset all rate-limited thumbnails at once.
+* (bug 56572) Builds of the OOjs and OOjs UI libraries are now available.
+* mw.loader.go and mw.loader.version have been removed.
+* (bug 52815) Preference "Enable simplified search bar (Vector skin only)"
+  was removed.
+* A user_password_expires column has been added to the user table. The User
+  object expects this column to exist. Use update.php to create this new field.
+* The jquery.delayedBind ResourceLoader module was deprecated in favor of the
+  jquery.throttle-debounce module. It will be removed in MediaWiki 1.24.
+* mw.user.bucket has been deprecated.
+* On Special:PrefixIndex, a table#mw-prefixindex-list-table was changed to
+  table.mw-prefixindex-list-table to avoid duplicate ids when the special page
+  is transcluded.
+* (bug 62198) window.$j has been deprecated.
+* Preference "Disable link title conversion" was removed.
+* SpecialRecentChanges no longer includes any functionality for generating feeds
+  - it has been factored out to ApiFeedRecentChanges. Old URLs redirect to new
+  ones.
+* RecentChange::mExtra['lang'] is no longer set and should no longer be used.
+  Extensions should read from other configuration variables, including
+  $wgLocalInterwikis, to identify the current wiki.
+* Sections in the parser test framework have been renamed and the old
+  section names are deprecated.  Please use "!!wikitext" and "!!html"
+  (or "!!html/php") instead of "!!input" and "!!result".  This allows
+  us to extend parser tests to accommodate additional input/output
+  pairs, such as "!!html/parsoid" (for the output of the Parsoid
+  parser, where it differs from the PHP parser).
 
 ==== Removed classes ====
 * FakeMemCachedClient (deprecated in 1.18)
@@ -330,7 +423,7 @@ MediaWiki 1.23 requires PHP 5.3.2 or later.
 
 MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
 support for them is somewhat less mature. There is experimental support for
-Oracle.
+Oracle and Microsoft SQL Server.
 
 The supported versions are:
 
@@ -338,6 +431,7 @@ The supported versions are:
 * PostgreSQL 8.3 or later
 * SQLite 3.3.7 or later
 * Oracle 9.0.1 or later
+* Microsoft SQL Server 2005 (9.00.1399)
 
 == Upgrading ==
 
diff --git a/api.php b/api.php
index 0d2312a..554c272 100644 (file)
--- a/api.php
+++ b/api.php
@@ -70,10 +70,21 @@ $wgTitle = Title::makeTitle( NS_MAIN, 'API' );
 $processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI );
 
 // Last chance hook before executing the API
-wfRunHooks( 'ApiBeforeMain', array( &$processor ) );
+try {
+       wfRunHooks( 'ApiBeforeMain', array( &$processor ) );
+       if ( !$processor instanceof ApiMain ) {
+               throw new MWException( 'ApiBeforMain hook set $processor to a non-ApiMain class' );
+       }
+} catch ( Exception $e ) {
+       // Crap. Try to report the exception in API format to be friendly to clients.
+       ApiMain::handleApiBeforeMainException( $e );
+       $processor = false;
+}
 
 // Process data & print results
-$processor->execute();
+if ( $processor ) {
+       $processor->execute();
+}
 
 if ( function_exists( 'fastcgi_finish_request' ) ) {
        fastcgi_finish_request();
@@ -97,11 +108,15 @@ if ( $wgAPIRequestLog ) {
                $_SERVER['HTTP_USER_AGENT']
        );
        $items[] = $wgRequest->wasPosted() ? 'POST' : 'GET';
-       $module = $processor->getModule();
-       if ( $module->mustBePosted() ) {
-               $items[] = "action=" . $wgRequest->getVal( 'action' );
+       if ( $processor ) {
+               $module = $processor->getModule();
+               if ( $module->mustBePosted() ) {
+                       $items[] = "action=" . $wgRequest->getVal( 'action' );
+               } else {
+                       $items[] = wfArrayToCgi( $wgRequest->getValues() );
+               }
        } else {
-               $items[] = wfArrayToCgi( $wgRequest->getValues() );
+               $items[] = "failed in ApiBeforeMain";
        }
        wfErrorLog( implode( ',', $items ) . "\n", $wgAPIRequestLog );
        wfDebug( "Logged API request to $wgAPIRequestLog\n" );
index cf63678..85304c1 100644 (file)
@@ -7,5 +7,14 @@
                "ext-mbstring": "Faster unicode handling",
                "ext-wikidiff2": "Faster diff generation",
                "ext-apc": "Speed up MediaWiki with opcode caching (before PHP 5.5)"
+       },
+       "autoload": {
+               "psr-0": {
+                       "ComposerHookHandler": "includes/composer"
+               }
+       },
+       "scripts": {
+               "pre-update-cmd": "ComposerHookHandler::onPreUpdate",
+               "pre-install-cmd": "ComposerHookHandler::onPreInstall"
        }
 }
index a638703..e4037e6 100644 (file)
@@ -277,6 +277,11 @@ $user: the User object about to be created (read-only, incomplete)
 $targetUser: the user whom to send talk page email notification
 $title: the page title
 
+'SendWatchlistEmailNotification': Return true to send watchlist email notification
+$targetUser: the user whom to send watchlist email notification
+$title: the page title
+$this: EmailNotification object
+
 'AbortChangePassword': Return false to cancel password change.
 $user: the User object to which the password change is occuring
 $mOldpass: the old password provided by the user
@@ -704,6 +709,12 @@ pages or galleries in category pages.
 $name: Image name being checked
 &$bad: Whether or not the image is "bad"
 
+'BaseTemplateAfterPortlet': After output of portlets, allow injecting
+custom HTML after the section. Any uses of the hook need to handle escaping.
+$template BaseTemplate
+$portlet: string portlet name
+&$html: string
+
 'BeforeDisplayNoArticleText': Before displaying message key "noarticletext" or
 "noarticletext-nopermission" at Article::showMissingArticle().
 $article: article object
@@ -1606,6 +1617,11 @@ $password: the password being submitted and found wanting
 $retval: a LoginForm class constant with authenticateUserData() return
   value (SUCCESS, WRONG_PASS, etc.).
 
+'LoginPasswordResetMessage': User is being requested to reset their password on login.
+Use this hook to change the Message that will be output on Special:ChangePassword.
+&$msg: Message object that will be shown to the user
+$username: Username of the user who's password was expired.
+
 '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.
@@ -1667,6 +1683,12 @@ $mediaWiki: The $mediawiki object
 $title: title of the message (string)
 $message: value (string), change it to the message you want to define
 
+'MessageCache::get': When fetching a message. Can be used to override the key
+for customisations. Given and returned message key must be in special format:
+1) first letter must be in lower case according to the content language.
+2) spaces must be replaced with underscores
+&$key: message key (string)
+
 'MessageCacheReplace': When a message page is changed. Useful for updating
 caches.
 $title: name of the page changed.
@@ -1802,7 +1824,7 @@ $isMinor: Whether or not the edit was marked as minor
 $isWatch: (No longer used)
 $section: (No longer used)
 $flags: Flags passed to WikiPage::doEditContent()
-$revision: New Revision of the article
+$revision: New Revision of the article (can be null for edits that change nothing)
 $status: Status object about to be returned by doEditContent()
 $baseRevId: the rev ID (or false) this edit was based on
 
@@ -2025,6 +2047,10 @@ 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.
 
+'ResetPasswordExpiration': Allow extensions to set a default password expiration
+$user: The user having their password expiration reset
+&$newExpire: The new expiration date
+
 'ResetSessionID': Called from wfResetSessionID
 $oldSessionID: old session id
 $newSessionID: new session id
@@ -2193,6 +2219,13 @@ link" tab.
 $sktemplate: SkinTemplate object
 $nav_urls: array of tabs
 
+'SkinTemplateGetLanguageLink': After building the data for a language link from
+which the actual html is constructed.
+&$languageLink: array containing data about the link. The following keys can be
+  modified: href, text, title, class, lang, hreflang. Each of them is a string.
+$languageLinkTitle: Title object belonging to the external language link
+$title: Title object of the page the link belongs to
+
 To alter the structured navigation links in SkinTemplates, there are three
 hooks called in different spots:
 
@@ -2236,6 +2269,11 @@ $dummy: Called when SkinTemplateToolboxEnd is used from a BaseTemplate skin,
   dummy parameter with "$dummy=false" in their code and return without echoing
   any HTML to avoid creating duplicate toolbox items.
 
+'SkinVectorStyleModules': Called when defining the list of module styles to be
+loaded by the Vector skin.
+$skin: SkinVector object
+&$styles: Array of module names whose style will be loaded for the skin
+
 'SoftwareInfo': Called by Special:Version for returning information about the
 software.
 $software: The array of software in format 'name' => 'version'. See
@@ -2521,6 +2559,7 @@ $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
+$reason: reason for the move
 
 '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
@@ -2877,9 +2916,9 @@ run a MediaWiki cli script.
 &$options: Associative array of options, may contain the 'php' and 'wrapper'
   keys
 
-'wgQueryPages': Called when initialising $wgQueryPages, use this to add new
-query pages to be updated with maintenance/updateSpecialPages.php.
-$query: $wgQueryPages itself
+'wgQueryPages': Called when initialising list of QueryPage subclasses, use this
+to add new query pages to be updated with maintenance/updateSpecialPages.php.
+$qp: The list of QueryPages
 
 'XmlDumpWriterOpenPage': Called at the end of XmlDumpWriter::openPage, to allow
 extra metadata to be added.
index 46fcecc..6b4d37e 100644 (file)
@@ -86,10 +86,10 @@ function wfGetCustomMagicWordValue( &$parser, $var1, $var2 ){
        return "custom: var1 is $var1, var2 is $var2";
 }
 
-Note: the 'ParserFirstCallInit' hook is only aviable since 1.12. To work with
+Note: the 'ParserFirstCallInit' hook is only available since 1.12. To work with
 an older version, you'll need to use an extension function.
 
 Online documentation (contains more informations):
 Magic words: https://www.mediawiki.org/wiki/Manual:Magic_words
 Variables: https://www.mediawiki.org/wiki/Manual:Variable
-Parser functions: https://www.mediawiki.org/wiki/Manual:Parser_functions
\ No newline at end of file
+Parser functions: https://www.mediawiki.org/wiki/Manual:Parser_functions
index 72a7dab..391fb29 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * Image authorisation script
  *
- * To use this, see http://www.mediawiki.org/wiki/Manual:Image_Authorization
+ * To use this, see https://www.mediawiki.org/wiki/Manual:Image_Authorization
  *
  * - Set $wgUploadDirectory to a non-public directory (not web accessible)
  * - Set $wgUploadPath to point to this file
@@ -92,11 +92,11 @@ function wfImageAuthMain() {
                if ( strpos( $path, $prefix ) === 0 ) {
                        $be = FileBackendGroup::singleton()->backendFromPath( $storageDir );
                        $filename = $storageDir . substr( $path, strlen( $prefix ) ); // strip prefix
-                       // Check basic user authorization
-                       if ( !RequestContext::getMain()->getUser()->isAllowed( 'read' ) ) {
-                               wfForbidden( 'img-auth-accessdenied', 'img-auth-noread', $path );
-                               return;
-                       }
+                       // Check basic user authorization
+                       if ( !RequestContext::getMain()->getUser()->isAllowed( 'read' ) ) {
+                               wfForbidden( 'img-auth-accessdenied', 'img-auth-noread', $path );
+                               return;
+                       }
                        if ( $be->fileExists( array( 'src' => $filename ) ) ) {
                                wfDebugLog( 'img_auth', "Streaming `" . $filename . "`." );
                                $be->streamFile( array( 'src' => $filename ),
diff --git a/includes/Action.php b/includes/Action.php
deleted file mode 100644 (file)
index 72be46f..0000000
+++ /dev/null
@@ -1,600 +0,0 @@
-<?php
-/**
- * Base classes for actions done on pages.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * 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
- *
- * @file
- */
-
-/**
- * @defgroup Actions Action done on pages
- */
-
-/**
- * Actions are things which can be done to pages (edit, delete, rollback, etc).  They
- * are distinct from Special Pages because an action must apply to exactly one page.
- *
- * To add an action in an extension, create a subclass of Action, and add the key to
- * $wgActions.  There is also the deprecated UnknownAction hook
- *
- * Actions generally fall into two groups: the show-a-form-then-do-something-with-the-input
- * format (protect, delete, move, etc), and the just-do-something format (watch, rollback,
- * patrol, etc). The FormAction and FormlessAction classes represent these two groups.
- */
-abstract class Action {
-
-       /**
-        * Page on which we're performing the action
-        * @var WikiPage|Article|ImagePage|CategoryPage|Page $page
-        */
-       protected $page;
-
-       /**
-        * IContextSource if specified; otherwise we'll use the Context from the Page
-        * @var IContextSource $context
-        */
-       protected $context;
-
-       /**
-        * The fields used to create the HTMLForm
-        * @var Array $fields
-        */
-       protected $fields;
-
-       /**
-        * Get the Action subclass which should be used to handle this action, false if
-        * the action is disabled, or null if it's not recognised
-        * @param $action String
-        * @param $overrides Array
-        * @return bool|null|string|callable
-        */
-       final private static function getClass( $action, array $overrides ) {
-               global $wgActions;
-               $action = strtolower( $action );
-
-               if ( !isset( $wgActions[$action] ) ) {
-                       return null;
-               }
-
-               if ( $wgActions[$action] === false ) {
-                       return false;
-               } elseif ( $wgActions[$action] === true && isset( $overrides[$action] ) ) {
-                       return $overrides[$action];
-               } elseif ( $wgActions[$action] === true ) {
-                       return ucfirst( $action ) . 'Action';
-               } else {
-                       return $wgActions[$action];
-               }
-       }
-
-       /**
-        * Get an appropriate Action subclass for the given action
-        * @param $action String
-        * @param $page Page
-        * @param $context IContextSource
-        * @return Action|bool|null false if the action is disabled, null
-        *     if it is not recognised
-        */
-       final public static function factory( $action, Page $page, IContextSource $context = null ) {
-               $classOrCallable = self::getClass( $action, $page->getActionOverrides() );
-
-               if ( is_string( $classOrCallable ) ) {
-                       $obj = new $classOrCallable( $page, $context );
-                       return $obj;
-               }
-
-               if ( is_callable( $classOrCallable ) ) {
-                       return call_user_func_array( $classOrCallable, array( $page, $context ) );
-               }
-
-               return $classOrCallable;
-       }
-
-       /**
-        * Get the action that will be executed, not necessarily the one passed
-        * passed through the "action" request parameter. Actions disabled in
-        * $wgActions will be replaced by "nosuchaction".
-        *
-        * @since 1.19
-        * @param $context IContextSource
-        * @return string: action name
-        */
-       final public static function getActionName( IContextSource $context ) {
-               global $wgActions;
-
-               $request = $context->getRequest();
-               $actionName = $request->getVal( 'action', 'view' );
-
-               // Check for disabled actions
-               if ( isset( $wgActions[$actionName] ) && $wgActions[$actionName] === false ) {
-                       $actionName = 'nosuchaction';
-               }
-
-               // Workaround for bug #20966: inability of IE to provide an action dependent
-               // on which submit button is clicked.
-               if ( $actionName === 'historysubmit' ) {
-                       if ( $request->getBool( 'revisiondelete' ) ) {
-                               $actionName = 'revisiondelete';
-                       } else {
-                               $actionName = 'view';
-                       }
-               } elseif ( $actionName == 'editredlink' ) {
-                       $actionName = 'edit';
-               }
-
-               // Trying to get a WikiPage for NS_SPECIAL etc. will result
-               // in WikiPage::factory throwing "Invalid or virtual namespace -1 given."
-               // For SpecialPages et al, default to action=view.
-               if ( !$context->canUseWikiPage() ) {
-                       return 'view';
-               }
-
-               $action = Action::factory( $actionName, $context->getWikiPage(), $context );
-               if ( $action instanceof Action ) {
-                       return $action->getName();
-               }
-
-               return 'nosuchaction';
-       }
-
-       /**
-        * Check if a given action is recognised, even if it's disabled
-        *
-        * @param string $name name of an action
-        * @return Bool
-        */
-       final public static function exists( $name ) {
-               return self::getClass( $name, array() ) !== null;
-       }
-
-       /**
-        * Get the IContextSource in use here
-        * @return IContextSource
-        */
-       final public function getContext() {
-               if ( $this->context instanceof IContextSource ) {
-                       return $this->context;
-               } elseif ( $this->page instanceof Article ) {
-                       // NOTE: $this->page can be a WikiPage, which does not have a context.
-                       wfDebug( __METHOD__ . ': no context known, falling back to Article\'s context.' );
-                       return $this->page->getContext();
-               }
-
-               wfWarn( __METHOD__ . ': no context known, falling back to RequestContext::getMain().' );
-               return RequestContext::getMain();
-       }
-
-       /**
-        * Get the WebRequest being used for this instance
-        *
-        * @return WebRequest
-        */
-       final public function getRequest() {
-               return $this->getContext()->getRequest();
-       }
-
-       /**
-        * Get the OutputPage being used for this instance
-        *
-        * @return OutputPage
-        */
-       final public function getOutput() {
-               return $this->getContext()->getOutput();
-       }
-
-       /**
-        * Shortcut to get the User being used for this instance
-        *
-        * @return User
-        */
-       final public function getUser() {
-               return $this->getContext()->getUser();
-       }
-
-       /**
-        * Shortcut to get the Skin being used for this instance
-        *
-        * @return Skin
-        */
-       final public function getSkin() {
-               return $this->getContext()->getSkin();
-       }
-
-       /**
-        * Shortcut to get the user Language being used for this instance
-        *
-        * @return Language
-        */
-       final public function getLanguage() {
-               return $this->getContext()->getLanguage();
-       }
-
-       /**
-        * Shortcut to get the user Language being used for this instance
-        *
-        * @deprecated since 1.19 Use getLanguage instead
-        * @return Language
-        */
-       final public function getLang() {
-               wfDeprecated( __METHOD__, '1.19' );
-               return $this->getLanguage();
-       }
-
-       /**
-        * Shortcut to get the Title object from the page
-        * @return Title
-        */
-       final public function getTitle() {
-               return $this->page->getTitle();
-       }
-
-       /**
-        * Get a Message object with context set
-        * Parameters are the same as wfMessage()
-        *
-        * @return Message object
-        */
-       final public function msg() {
-               $params = func_get_args();
-               return call_user_func_array( array( $this->getContext(), 'msg' ), $params );
-       }
-
-       /**
-        * Constructor.
-        *
-        * Only public since 1.21
-        *
-        * @param $page Page
-        * @param $context IContextSource
-        */
-       public function __construct( Page $page, IContextSource $context = null ) {
-               if ( $context === null ) {
-                       wfWarn( __METHOD__ . ' called without providing a Context object.' );
-                       // NOTE: We could try to initialize $context using $page->getContext(),
-                       //      if $page is an Article. That however seems to not work seamlessly.
-               }
-
-               $this->page = $page;
-               $this->context = $context;
-       }
-
-       /**
-        * Return the name of the action this object responds to
-        * @return String lowercase
-        */
-       abstract public function getName();
-
-       /**
-        * Get the permission required to perform this action.  Often, but not always,
-        * the same as the action name
-        * @return String|null
-        */
-       public function getRestriction() {
-               return null;
-       }
-
-       /**
-        * Checks if the given user (identified by an object) can perform this action.  Can be
-        * overridden by sub-classes with more complicated permissions schemes.  Failures here
-        * must throw subclasses of ErrorPageError
-        *
-        * @param $user User: the user to check, or null to use the context user
-        * @throws UserBlockedError|ReadOnlyError|PermissionsError
-        * @return bool True on success
-        */
-       protected function checkCanExecute( User $user ) {
-               $right = $this->getRestriction();
-               if ( $right !== null ) {
-                       $errors = $this->getTitle()->getUserPermissionsErrors( $right, $user );
-                       if ( count( $errors ) ) {
-                               throw new PermissionsError( $right, $errors );
-                       }
-               }
-
-               if ( $this->requiresUnblock() && $user->isBlocked() ) {
-                       $block = $user->getBlock();
-                       throw new UserBlockedError( $block );
-               }
-
-               // This should be checked at the end so that the user won't think the
-               // error is only temporary when he also don't have the rights to execute
-               // this action
-               if ( $this->requiresWrite() && wfReadOnly() ) {
-                       throw new ReadOnlyError();
-               }
-               return true;
-       }
-
-       /**
-        * Whether this action requires the wiki not to be locked
-        * @return Bool
-        */
-       public function requiresWrite() {
-               return true;
-       }
-
-       /**
-        * Whether this action can still be executed by a blocked user
-        * @return Bool
-        */
-       public function requiresUnblock() {
-               return true;
-       }
-
-       /**
-        * Set output headers for noindexing etc.  This function will not be called through
-        * the execute() entry point, so only put UI-related stuff in here.
-        */
-       protected function setHeaders() {
-               $out = $this->getOutput();
-               $out->setRobotPolicy( "noindex,nofollow" );
-               $out->setPageTitle( $this->getPageTitle() );
-               $this->getOutput()->setSubtitle( $this->getDescription() );
-               $out->setArticleRelated( true );
-       }
-
-       /**
-        * Returns the name that goes in the \<h1\> page title
-        *
-        * @return String
-        */
-       protected function getPageTitle() {
-               return $this->getTitle()->getPrefixedText();
-       }
-
-       /**
-        * Returns the description that goes below the \<h1\> tag
-        *
-        * @return String
-        */
-       protected function getDescription() {
-               return $this->msg( strtolower( $this->getName() ) )->escaped();
-       }
-
-       /**
-        * The main action entry point.  Do all output for display and send it to the context
-        * output.  Do not use globals $wgOut, $wgRequest, etc, in implementations; use
-        * $this->getOutput(), etc.
-        * @throws ErrorPageError
-        */
-       abstract public function show();
-
-       /**
-        * Execute the action in a silent fashion: do not display anything or release any errors.
-        * @return Bool whether execution was successful
-        */
-       abstract public function execute();
-}
-
-/**
- * An action which shows a form and does something based on the input from the form
- */
-abstract class FormAction extends Action {
-
-       /**
-        * Get an HTMLForm descriptor array
-        * @return Array
-        */
-       abstract protected function getFormFields();
-
-       /**
-        * Add pre- or post-text to the form
-        * @return String HTML which will be sent to $form->addPreText()
-        */
-       protected function preText() {
-               return '';
-       }
-
-       /**
-        * @return string
-        */
-       protected function postText() {
-               return '';
-       }
-
-       /**
-        * Play with the HTMLForm if you need to more substantially
-        * @param $form HTMLForm
-        */
-       protected function alterForm( HTMLForm $form ) {
-       }
-
-       /**
-        * Get the HTMLForm to control behavior
-        * @return HTMLForm|null
-        */
-       protected function getForm() {
-               $this->fields = $this->getFormFields();
-
-               // Give hooks a chance to alter the form, adding extra fields or text etc
-               wfRunHooks( 'ActionModifyFormFields', array( $this->getName(), &$this->fields, $this->page ) );
-
-               $form = new HTMLForm( $this->fields, $this->getContext(), $this->getName() );
-               $form->setSubmitCallback( array( $this, 'onSubmit' ) );
-
-               // Retain query parameters (uselang etc)
-               $form->addHiddenField( 'action', $this->getName() ); // Might not be the same as the query string
-               $params = array_diff_key(
-                       $this->getRequest()->getQueryValues(),
-                       array( 'action' => null, 'title' => null )
-               );
-               $form->addHiddenField( 'redirectparams', wfArrayToCgi( $params ) );
-
-               $form->addPreText( $this->preText() );
-               $form->addPostText( $this->postText() );
-               $this->alterForm( $form );
-
-               // Give hooks a chance to alter the form, adding extra fields or text etc
-               wfRunHooks( 'ActionBeforeFormDisplay', array( $this->getName(), &$form, $this->page ) );
-
-               return $form;
-       }
-
-       /**
-        * Process the form on POST submission.  If you return false from getFormFields(),
-        * this will obviously never be reached.  If you don't want to do anything with the
-        * form, just return false here
-        * @param  $data Array
-        * @return Bool|Array true for success, false for didn't-try, array of errors on failure
-        */
-       abstract public function onSubmit( $data );
-
-       /**
-        * Do something exciting on successful processing of the form.  This might be to show
-        * a confirmation message (watch, rollback, etc) or to redirect somewhere else (edit,
-        * protect, etc).
-        */
-       abstract public function onSuccess();
-
-       /**
-        * The basic pattern for actions is to display some sort of HTMLForm UI, maybe with
-        * some stuff underneath (history etc); to do some processing on submission of that
-        * form (delete, protect, etc) and to do something exciting on 'success', be that
-        * display something new or redirect to somewhere.  Some actions have more exotic
-        * behavior, but that's what subclassing is for :D
-        */
-       public function show() {
-               $this->setHeaders();
-
-               // This will throw exceptions if there's a problem
-               $this->checkCanExecute( $this->getUser() );
-
-               $form = $this->getForm();
-               if ( $form->show() ) {
-                       $this->onSuccess();
-               }
-       }
-
-       /**
-        * @see Action::execute()
-        *
-        * @param $data array|null
-        * @param $captureErrors bool
-        * @throws ErrorPageError|Exception
-        * @return bool
-        */
-       public function execute( array $data = null, $captureErrors = true ) {
-               try {
-                       // Set a new context so output doesn't leak.
-                       $this->context = clone $this->getContext();
-
-                       // This will throw exceptions if there's a problem
-                       $this->checkCanExecute( $this->getUser() );
-
-                       $fields = array();
-                       foreach ( $this->fields as $key => $params ) {
-                               if ( isset( $data[$key] ) ) {
-                                       $fields[$key] = $data[$key];
-                               } elseif ( isset( $params['default'] ) ) {
-                                       $fields[$key] = $params['default'];
-                               } else {
-                                       $fields[$key] = null;
-                               }
-                       }
-                       $status = $this->onSubmit( $fields );
-                       if ( $status === true ) {
-                               // This might do permanent stuff
-                               $this->onSuccess();
-                               return true;
-                       } else {
-                               return false;
-                       }
-               }
-               catch ( ErrorPageError $e ) {
-                       if ( $captureErrors ) {
-                               return false;
-                       } else {
-                               throw $e;
-                       }
-               }
-       }
-}
-
-/**
- * An action which just does something, without showing a form first.
- */
-abstract class FormlessAction extends Action {
-
-       /**
-        * Show something on GET request.
-        * @return String|null will be added to the HTMLForm if present, or just added to the
-        *     output if not.  Return null to not add anything
-        */
-       abstract public function onView();
-
-       /**
-        * We don't want an HTMLForm
-        * @return bool
-        */
-       protected function getFormFields() {
-               return false;
-       }
-
-       /**
-        * @param $data Array
-        * @return bool
-        */
-       public function onSubmit( $data ) {
-               return false;
-       }
-
-       /**
-        * @return bool
-        */
-       public function onSuccess() {
-               return false;
-       }
-
-       public function show() {
-               $this->setHeaders();
-
-               // This will throw exceptions if there's a problem
-               $this->checkCanExecute( $this->getUser() );
-
-               $this->getOutput()->addHTML( $this->onView() );
-       }
-
-       /**
-        * Execute the action silently, not giving any output.  Since these actions don't have
-        * forms, they probably won't have any data, but some (eg rollback) may do
-        * @param array $data values that would normally be in the GET request
-        * @param bool $captureErrors whether to catch exceptions and just return false
-        * @throws ErrorPageError|Exception
-        * @return Bool whether execution was successful
-        */
-       public function execute( array $data = null, $captureErrors = true ) {
-               try {
-                       // Set a new context so output doesn't leak.
-                       $this->context = clone $this->getContext();
-                       if ( is_array( $data ) ) {
-                               $this->context->setRequest( new FauxRequest( $data, false ) );
-                       }
-
-                       // This will throw exceptions if there's a problem
-                       $this->checkCanExecute( $this->getUser() );
-
-                       $this->onView();
-                       return true;
-               }
-               catch ( ErrorPageError $e ) {
-                       if ( $captureErrors ) {
-                               return false;
-                       } else {
-                               throw $e;
-                       }
-               }
-       }
-}
index ac8a9f0..334cee3 100644 (file)
@@ -215,7 +215,7 @@ class AjaxResponse {
                $fname = 'AjaxResponse::checkLastModified';
 
                if ( !$timestamp || $timestamp == '19700101000000' ) {
-                       wfDebug( "$fname: CACHE DISABLED, NO TIMESTAMP\n" );
+                       wfDebug( "$fname: CACHE DISABLED, NO TIMESTAMP\n", 'log' );
                        return false;
                }
 
index a5d4d5b..b132ca9 100644 (file)
@@ -611,6 +611,7 @@ class Article implements Page {
                                        if ( !$this->mPage->exists() ) {
                                                wfDebug( __METHOD__ . ": showing missing article\n" );
                                                $this->showMissingArticle();
+                                               $this->mPage->doViewUpdates( $user );
                                                wfProfileOut( __METHOD__ );
                                                return;
                                        }
index c7b0c97..217744e 100644 (file)
@@ -3,7 +3,7 @@
  * Authentication plugin interface
  *
  * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 61e0941..9d764e1 100644 (file)
@@ -29,7 +29,6 @@ global $wgAutoloadLocalClasses;
 
 $wgAutoloadLocalClasses = array(
        # Includes
-       'Action' => 'includes/Action.php',
        'AjaxDispatcher' => 'includes/AjaxDispatcher.php',
        'AjaxResponse' => 'includes/AjaxResponse.php',
        'AlphabeticPager' => 'includes/Pager.php',
@@ -38,7 +37,6 @@ $wgAutoloadLocalClasses = array(
        'AuthPlugin' => 'includes/AuthPlugin.php',
        'AuthPluginUser' => 'includes/AuthPlugin.php',
        'Autopromote' => 'includes/Autopromote.php',
-       'BadTitleError' => 'includes/Exception.php',
        'BaseTemplate' => 'includes/SkinTemplate.php',
        'Block' => 'includes/Block.php',
        'CacheHelper' => 'includes/CacheHelper.php',
@@ -73,18 +71,14 @@ $wgAutoloadLocalClasses = array(
        'DumpPipeOutput' => 'includes/Export.php',
        'EditPage' => 'includes/EditPage.php',
        'EmailNotification' => 'includes/UserMailer.php',
-       'ErrorPageError' => 'includes/Exception.php',
        'FakeTitle' => 'includes/FakeTitle.php',
        'Fallback' => 'includes/Fallback.php',
-       'FatalError' => 'includes/Exception.php',
        'FauxRequest' => 'includes/WebRequest.php',
        'FauxResponse' => 'includes/WebResponse.php',
        'FeedItem' => 'includes/Feed.php',
        'FeedUtils' => 'includes/FeedUtils.php',
        'FileDeleteForm' => 'includes/FileDeleteForm.php',
        'ForkController' => 'includes/ForkController.php',
-       'FormlessAction' => 'includes/Action.php',
-       'FormAction' => 'includes/Action.php',
        'FormOptions' => 'includes/FormOptions.php',
        'FormSpecialPage' => 'includes/specialpage/FormSpecialPage.php',
        'GitInfo' => 'includes/GitInfo.php',
@@ -102,7 +96,8 @@ $wgAutoloadLocalClasses = array(
        'HTMLFloatField' => 'includes/htmlform/HTMLFloatField.php',
        'HTMLForm' => 'includes/htmlform/HTMLForm.php',
        'HTMLFormField' => 'includes/htmlform/HTMLFormField.php',
-       'HTMLFormFieldRequiredOptionsException' => 'includes/htmlform/HTMLFormFieldRequiredOptionsException.php',
+       'HTMLFormFieldRequiredOptionsException' =>
+               'includes/htmlform/HTMLFormFieldRequiredOptionsException.php',
        'HTMLHiddenField' => 'includes/htmlform/HTMLHiddenField.php',
        'HTMLInfoField' => 'includes/htmlform/HTMLInfoField.php',
        'HTMLIntField' => 'includes/htmlform/HTMLIntField.php',
@@ -116,7 +111,6 @@ $wgAutoloadLocalClasses = array(
        'HTMLTextAreaField' => 'includes/htmlform/HTMLTextAreaField.php',
        'HTMLTextField' => 'includes/htmlform/HTMLTextField.php',
        'Http' => 'includes/HttpFunctions.php',
-       'HttpError' => 'includes/Exception.php',
        'ICacheHelper' => 'includes/CacheHelper.php',
        'IcuCollation' => 'includes/Collation.php',
        'IdentityCollation' => 'includes/Collation.php',
@@ -145,11 +139,10 @@ $wgAutoloadLocalClasses = array(
        'MailAddress' => 'includes/UserMailer.php',
        'MediaWiki' => 'includes/Wiki.php',
        'MediaWiki_I18N' => 'includes/SkinTemplate.php',
+       'MediaWikiVersionFetcher' => 'includes/MediaWikiVersionFetcher.php',
        'Message' => 'includes/Message.php',
        'MessageBlobStore' => 'includes/MessageBlobStore.php',
        'MimeMagic' => 'includes/MimeMagic.php',
-       'MWException' => 'includes/Exception.php',
-       'MWExceptionHandler' => 'includes/Exception.php',
        'MWHookException' => 'includes/Hooks.php',
        'MWHttpRequest' => 'includes/HttpFunctions.php',
        'MWInit' => 'includes/Init.php',
@@ -161,7 +154,6 @@ $wgAutoloadLocalClasses = array(
        'PasswordError' => 'includes/User.php',
        'PathRouter' => 'includes/PathRouter.php',
        'PathRouterPatternReplacer' => 'includes/PathRouter.php',
-       'PermissionsError' => 'includes/Exception.php',
        'PhpHttpRequest' => 'includes/HttpFunctions.php',
        'PoolCounter' => 'includes/PoolCounter.php',
        'PoolCounter_Stub' => 'includes/PoolCounter.php',
@@ -175,7 +167,6 @@ $wgAutoloadLocalClasses = array(
        'QueryPage' => 'includes/QueryPage.php',
        'QuickTemplate' => 'includes/SkinTemplate.php',
        'RawMessage' => 'includes/Message.php',
-       'ReadOnlyError' => 'includes/Exception.php',
        'RedirectSpecialArticle' => 'includes/specialpage/RedirectSpecialPage.php',
        'RedirectSpecialPage' => 'includes/specialpage/RedirectSpecialPage.php',
        'ReverseChronologicalPager' => 'includes/Pager.php',
@@ -216,15 +207,12 @@ $wgAutoloadLocalClasses = array(
        'Title' => 'includes/Title.php',
        'TitleArray' => 'includes/TitleArray.php',
        'TitleArrayFromResult' => 'includes/TitleArrayFromResult.php',
-       'ThrottledError' => 'includes/Exception.php',
        'UnlistedSpecialPage' => 'includes/specialpage/UnlistedSpecialPage.php',
        'UploadSourceAdapter' => 'includes/Import.php',
        'UppercaseCollation' => 'includes/Collation.php',
        'User' => 'includes/User.php',
        'UserArray' => 'includes/UserArray.php',
        'UserArrayFromResult' => 'includes/UserArrayFromResult.php',
-       'UserBlockedError' => 'includes/Exception.php',
-       'UserNotLoggedIn' => 'includes/Exception.php',
        'UserCache' => 'includes/cache/UserCache.php',
        'UserMailer' => 'includes/UserMailer.php',
        'UserRightsProxy' => 'includes/UserRightsProxy.php',
@@ -248,10 +236,13 @@ $wgAutoloadLocalClasses = array(
        'XmlSelect' => 'includes/Xml.php',
 
        # includes/actions
+       'Action' => 'includes/actions/Action.php',
        'CachedAction' => 'includes/actions/CachedAction.php',
        'CreditsAction' => 'includes/actions/CreditsAction.php',
        'DeleteAction' => 'includes/actions/DeleteAction.php',
        'EditAction' => 'includes/actions/EditAction.php',
+       'FormlessAction' => 'includes/actions/FormlessAction.php',
+       'FormAction' => 'includes/actions/FormAction.php',
        'HistoryAction' => 'includes/actions/HistoryAction.php',
        'HistoryPage' => 'includes/actions/HistoryAction.php',
        'HistoryPager' => 'includes/actions/HistoryAction.php',
@@ -283,6 +274,7 @@ $wgAutoloadLocalClasses = array(
        'ApiEmailUser' => 'includes/api/ApiEmailUser.php',
        'ApiExpandTemplates' => 'includes/api/ApiExpandTemplates.php',
        'ApiFeedContributions' => 'includes/api/ApiFeedContributions.php',
+       'ApiFeedRecentChanges' => 'includes/api/ApiFeedRecentChanges.php',
        'ApiFeedWatchlist' => 'includes/api/ApiFeedWatchlist.php',
        'ApiFileRevert' => 'includes/api/ApiFileRevert.php',
        'ApiFormatBase' => 'includes/api/ApiFormatBase.php',
@@ -355,6 +347,7 @@ $wgAutoloadLocalClasses = array(
        'ApiQueryRandom' => 'includes/api/ApiQueryRandom.php',
        'ApiQueryRecentChanges' => 'includes/api/ApiQueryRecentChanges.php',
        'ApiQueryFileRepoInfo' => 'includes/api/ApiQueryFileRepoInfo.php',
+       'ApiQueryRedirects' => 'includes/api/ApiQueryRedirects.php',
        'ApiQueryRevisions' => 'includes/api/ApiQueryRevisions.php',
        'ApiQuerySearch' => 'includes/api/ApiQuerySearch.php',
        'ApiQuerySiteinfo' => 'includes/api/ApiQuerySiteinfo.php',
@@ -392,7 +385,6 @@ $wgAutoloadLocalClasses = array(
        'MapCacheLRU' => 'includes/cache/MapCacheLRU.php',
        'MessageCache' => 'includes/cache/MessageCache.php',
        'ObjectFileCache' => 'includes/cache/ObjectFileCache.php',
-       'ProcessCacheLRU' => 'includes/cache/ProcessCacheLRU.php',
        'ResourceFileCache' => 'includes/cache/ResourceFileCache.php',
 
        # includes/changes
@@ -400,12 +392,17 @@ $wgAutoloadLocalClasses = array(
        'EnhancedChangesList' => 'includes/changes/EnhancedChangesList.php',
        'OldChangesList' => 'includes/changes/OldChangesList.php',
        'RCCacheEntry' => 'includes/changes/RCCacheEntry.php',
+       'RCCacheEntryFactory' => 'includes/changes/RCCacheEntryFactory.php',
        'RecentChange' => 'includes/changes/RecentChange.php',
 
        # includes/clientpool
        'RedisConnectionPool' => 'includes/clientpool/RedisConnectionPool.php',
        'RedisConnRef' => 'includes/clientpool/RedisConnectionPool.php',
 
+       # includes/composer
+       'ComposerPackageModifier' => 'includes/composer/ComposerPackageModifier.php',
+       'ComposerVersionNormalizer' => 'includes/composer/ComposerVersionNormalizer.php',
+
        # includes/config
        'Config' => 'includes/config/Config.php',
        'GlobalConfig' => 'includes/config/GlobalConfig.php',
@@ -453,6 +450,7 @@ $wgAutoloadLocalClasses = array(
        'DBConnectionError' => 'includes/db/DatabaseError.php',
        'DBConnRef' => 'includes/db/LoadBalancer.php',
        'DBError' => 'includes/db/DatabaseError.php',
+       'DBExpectedError' => 'includes/db/DatabaseError.php',
        'DBObject' => 'includes/db/DatabaseUtility.php',
        'IDatabase'  => 'includes/db/Database.php',
        'IORMRow' => 'includes/db/IORMRow.php',
@@ -474,7 +472,8 @@ $wgAutoloadLocalClasses = array(
        'LoadMonitorMySQL' => 'includes/db/LoadMonitor.php',
        'LoadMonitorNull' => 'includes/db/LoadMonitor.php',
        'MssqlField' => 'includes/db/DatabaseMssql.php',
-       'MssqlResult' => 'includes/db/DatabaseMssql.php',
+       'MssqlBlob' => 'includes/db/DatabaseMssql.php',
+       'MssqlResultWrapper' => 'includes/db/DatabaseMssql.php',
        'MySQLField' => 'includes/db/DatabaseMysqlBase.php',
        'MySQLMasterPos' => 'includes/db/DatabaseMysqlBase.php',
        'ORAField' => 'includes/db/DatabaseOracle.php',
@@ -525,6 +524,19 @@ $wgAutoloadLocalClasses = array(
        'WikiDiff3' => 'includes/diff/WikiDiff3.php',
        'WordLevelDiff' => 'includes/diff/DairikiDiff.php',
 
+       # includes/exception
+       'UserBlockedError' => 'includes/exception/UserBlockedError.php',
+       'UserNotLoggedIn' => 'includes/exception/UserNotLoggedIn.php',
+       'ThrottledError' => 'includes/exception/ThrottledError.php',
+       'ReadOnlyError' => 'includes/exception/ReadOnlyError.php',
+       'PermissionsError' => 'includes/exception/PermissionsError.php',
+       'MWException' => 'includes/exception/MWException.php',
+       'MWExceptionHandler' => 'includes/exception/MWExceptionHandler.php',
+       'HttpError' => 'includes/exception/HttpError.php',
+       'BadTitleError' => 'includes/exception/BadTitleError.php',
+       'ErrorPageError' => 'includes/exception/ErrorPageError.php',
+       'FatalError' => 'includes/exception/FatalError.php',
+
        # includes/externalstore
        'ExternalStore' => 'includes/externalstore/ExternalStore.php',
        'ExternalStoreDB' => 'includes/externalstore/ExternalStoreDB.php',
@@ -611,6 +623,8 @@ $wgAutoloadLocalClasses = array(
        'InstallDocFormatter' => 'includes/installer/InstallDocFormatter.php',
        'Installer' => 'includes/installer/Installer.php',
        'LocalSettingsGenerator' => 'includes/installer/LocalSettingsGenerator.php',
+       'MssqlInstaller' => 'includes/installer/MssqlInstaller.php',
+       'MssqlUpdater' => 'includes/installer/MssqlUpdater.php',
        'MysqlInstaller' => 'includes/installer/MysqlInstaller.php',
        'MysqlUpdater' => 'includes/installer/MysqlUpdater.php',
        'OracleInstaller' => 'includes/installer/OracleInstaller.php',
@@ -641,35 +655,35 @@ $wgAutoloadLocalClasses = array(
        'WebInstallerPage' => 'includes/installer/WebInstallerPage.php',
 
        # includes/job
-       'IJobSpecification' => 'includes/job/JobSpecification.php',
-       'Job' => 'includes/job/Job.php',
-       'JobQueue' => 'includes/job/JobQueue.php',
-       'JobQueueAggregator' => 'includes/job/aggregator/JobQueueAggregator.php',
-       'JobQueueAggregatorMemc' => 'includes/job/aggregator/JobQueueAggregatorMemc.php',
-       'JobQueueAggregatorRedis' => 'includes/job/aggregator/JobQueueAggregatorRedis.php',
-       'JobQueueDB' => 'includes/job/JobQueueDB.php',
-       'JobQueueConnectionError' => 'includes/job/JobQueue.php',
-       'JobQueueError' => 'includes/job/JobQueue.php',
-       'JobQueueGroup' => 'includes/job/JobQueueGroup.php',
-       'JobQueueFederated' => 'includes/job/JobQueueFederated.php',
-       'JobQueueRedis' => 'includes/job/JobQueueRedis.php',
-       'JobSpecification' => 'includes/job/JobSpecification.php',
-
-       # includes/job/jobs
-       'DoubleRedirectJob' => 'includes/job/jobs/DoubleRedirectJob.php',
-       'DuplicateJob' => 'includes/job/jobs/DuplicateJob.php',
-       'EmaillingJob' => 'includes/job/jobs/EmaillingJob.php',
-       'EnotifNotifyJob' => 'includes/job/jobs/EnotifNotifyJob.php',
-       'HTMLCacheUpdateJob' => 'includes/job/jobs/HTMLCacheUpdateJob.php',
-       'NullJob' => 'includes/job/jobs/NullJob.php',
-       'RefreshLinksJob' => 'includes/job/jobs/RefreshLinksJob.php',
-       'RefreshLinksJob2' => 'includes/job/jobs/RefreshLinksJob2.php',
-       'UploadFromUrlJob' => 'includes/job/jobs/UploadFromUrlJob.php',
-       'AssembleUploadChunksJob' => 'includes/job/jobs/AssembleUploadChunksJob.php',
-       'PublishStashedFileJob' => 'includes/job/jobs/PublishStashedFileJob.php',
-
-       # includes/job/utils
-       'BacklinkJobUtils' => 'includes/job/utils/BacklinkJobUtils.php',
+       'IJobSpecification' => 'includes/jobqueue/JobSpecification.php',
+       'Job' => 'includes/jobqueue/Job.php',
+       'JobQueue' => 'includes/jobqueue/JobQueue.php',
+       'JobQueueAggregator' => 'includes/jobqueue/aggregator/JobQueueAggregator.php',
+       'JobQueueAggregatorMemc' => 'includes/jobqueue/aggregator/JobQueueAggregatorMemc.php',
+       'JobQueueAggregatorRedis' => 'includes/jobqueue/aggregator/JobQueueAggregatorRedis.php',
+       'JobQueueDB' => 'includes/jobqueue/JobQueueDB.php',
+       'JobQueueConnectionError' => 'includes/jobqueue/JobQueue.php',
+       'JobQueueError' => 'includes/jobqueue/JobQueue.php',
+       'JobQueueGroup' => 'includes/jobqueue/JobQueueGroup.php',
+       'JobQueueFederated' => 'includes/jobqueue/JobQueueFederated.php',
+       'JobQueueRedis' => 'includes/jobqueue/JobQueueRedis.php',
+       'JobSpecification' => 'includes/jobqueue/JobSpecification.php',
+
+       # includes/jobqueue/jobs
+       'DoubleRedirectJob' => 'includes/jobqueue/jobs/DoubleRedirectJob.php',
+       'DuplicateJob' => 'includes/jobqueue/jobs/DuplicateJob.php',
+       'EmaillingJob' => 'includes/jobqueue/jobs/EmaillingJob.php',
+       'EnotifNotifyJob' => 'includes/jobqueue/jobs/EnotifNotifyJob.php',
+       'HTMLCacheUpdateJob' => 'includes/jobqueue/jobs/HTMLCacheUpdateJob.php',
+       'NullJob' => 'includes/jobqueue/jobs/NullJob.php',
+       'RefreshLinksJob' => 'includes/jobqueue/jobs/RefreshLinksJob.php',
+       'RefreshLinksJob2' => 'includes/jobqueue/jobs/RefreshLinksJob2.php',
+       'UploadFromUrlJob' => 'includes/jobqueue/jobs/UploadFromUrlJob.php',
+       'AssembleUploadChunksJob' => 'includes/jobqueue/jobs/AssembleUploadChunksJob.php',
+       'PublishStashedFileJob' => 'includes/jobqueue/jobs/PublishStashedFileJob.php',
+
+       # includes/jobqueue/utils
+       'BacklinkJobUtils' => 'includes/jobqueue/utils/BacklinkJobUtils.php',
 
        # includes/json
        'FormatJson' => 'includes/json/FormatJson.php',
@@ -693,6 +707,7 @@ $wgAutoloadLocalClasses = array(
        'JSTokenizer' => 'includes/libs/jsminplus.php',
        'MultiHttpClient' => 'includes/libs/MultiHttpClient.php',
        'MWMessagePack' => 'includes/libs/MWMessagePack.php',
+       'ProcessCacheLRU' => 'includes/libs/ProcessCacheLRU.php',
        'RunningStat' => 'includes/libs/RunningStat.php',
        'ScopedCallback' => 'includes/libs/ScopedCallback.php',
        'ScopedPHPTimeout' => 'includes/libs/ScopedPHPTimeout.php',
@@ -891,18 +906,18 @@ $wgAutoloadLocalClasses = array(
        'SearchDatabase' => 'includes/search/SearchDatabase.php',
        'SearchEngine' => 'includes/search/SearchEngine.php',
        'SearchEngineDummy' => 'includes/search/SearchEngine.php',
-       'SearchHighlighter' => 'includes/search/SearchEngine.php',
+       'SearchHighlighter' => 'includes/search/SearchHighlighter.php',
        'SearchMssql' => 'includes/search/SearchMssql.php',
        'SearchMySQL' => 'includes/search/SearchMySQL.php',
-       'SearchNearMatchResultSet' => 'includes/search/SearchEngine.php',
+       'SearchNearMatchResultSet' => 'includes/search/SearchResultSet.php',
        'SearchOracle' => 'includes/search/SearchOracle.php',
        'SearchPostgres' => 'includes/search/SearchPostgres.php',
-       'SearchResult' => 'includes/search/SearchEngine.php',
-       'SearchResultSet' => 'includes/search/SearchEngine.php',
+       'SearchResult' => 'includes/search/SearchResult.php',
+       'SearchResultSet' => 'includes/search/SearchResultSet.php',
        'SearchResultTooMany' => 'includes/search/SearchEngine.php',
        'SearchSqlite' => 'includes/search/SearchSqlite.php',
        'SqliteSearchResultSet' => 'includes/search/SearchSqlite.php',
-       'SqlSearchResultSet' => 'includes/search/SearchEngine.php',
+       'SqlSearchResultSet' => 'includes/search/SearchResultSet.php',
 
        # includes/site
        'MediaWikiSite' => 'includes/site/MediaWikiSite.php',
@@ -1002,6 +1017,7 @@ $wgAutoloadLocalClasses = array(
        'SpecialRedirect' => 'includes/specials/SpecialRedirect.php',
        'SpecialResetTokens' => 'includes/specials/SpecialResetTokens.php',
        'SpecialRevisionDelete' => 'includes/specials/SpecialRevisiondelete.php',
+       'SpecialRunJobs' => 'includes/specials/SpecialRunJobs.php',
        'SpecialSearch' => 'includes/specials/SpecialSearch.php',
        'SpecialSpecialpages' => 'includes/specials/SpecialSpecialpages.php',
        'SpecialStatistics' => 'includes/specials/SpecialStatistics.php',
@@ -1197,17 +1213,17 @@ class AutoLoader {
                        }
 
                        if ( isset( self::$autoloadLocalClassesLower[$lowerClass] ) ) {
-                               if ( function_exists( 'wfDebug' ) ) {
-                                       wfDebug( "Class {$className} was loaded using incorrect case.\n" );
+                               if ( function_exists( 'wfDebugLog' ) ) {
+                                       wfDebugLog( 'autoloader', "Class {$className} was loaded using incorrect case" );
                                }
                                $filename = self::$autoloadLocalClassesLower[$lowerClass];
                        }
                }
 
                if ( !$filename ) {
-                       if ( function_exists( 'wfDebug' ) ) {
+                       if ( function_exists( 'wfDebugLog' ) ) {
                                # FIXME: This is not very polite.  Assume we do not manage the class.
-                               wfDebug( "Class {$className} not found; skipped loading\n" );
+                               wfDebugLog( 'autoloader', "Class {$className} not found; skipped loading" );
                        }
 
                        # Give up
index f0ae5a3..f6cd3a6 100644 (file)
@@ -205,8 +205,7 @@ class CacheHelper implements ICacheHelper {
                                'cachedspecial-viewing-cached-ttl',
                                $context->getLanguage()->formatDuration( $this->cacheExpiry )
                        )->escaped();
-               }
-               else {
+               } else {
                        $message = $context->msg(
                                'cachedspecial-viewing-cached-ts'
                        )->escaped();
@@ -277,25 +276,20 @@ class CacheHelper implements ICacheHelper {
 
                                if ( !is_integer( $itemKey ) ) {
                                        wfWarn( "Attempted to get item with non-numeric key while the next item in the queue has a key ($itemKey) in " . __METHOD__ );
-                               }
-                               elseif ( is_null( $itemKey ) ) {
+                               } elseif ( is_null( $itemKey ) ) {
                                        wfWarn( "Attempted to get an item while the queue is empty in " . __METHOD__ );
-                               }
-                               else {
+                               } else {
                                        $value = array_shift( $this->cachedChunks );
                                }
-                       }
-                       else {
+                       } else {
                                if ( array_key_exists( $key, $this->cachedChunks ) ) {
                                        $value = $this->cachedChunks[$key];
                                        unset( $this->cachedChunks[$key] );
-                               }
-                               else {
+                               } else {
                                        wfWarn( "There is no item with key '$key' in this->cachedChunks in " . __METHOD__ );
                                }
                        }
-               }
-               else {
+               } else {
                        if ( !is_array( $args ) ) {
                                $args = array( $args );
                        }
@@ -305,8 +299,7 @@ class CacheHelper implements ICacheHelper {
                        if ( $this->cacheEnabled ) {
                                if ( is_null( $key ) ) {
                                        $this->cachedChunks[] = $value;
-                               }
-                               else {
+                               } else {
                                        $this->cachedChunks[$key] = $value;
                                }
                        }
index 126b8fe..df5ad7d 100644 (file)
@@ -195,27 +195,37 @@ class Category {
                return $cat;
        }
 
-       /** @return mixed DB key name, or false on failure */
+       /**
+        * @return mixed DB key name, or false on failure
+        */
        public function getName() {
                return $this->getX( 'mName' );
        }
 
-       /** @return mixed Category ID, or false on failure */
+       /**
+        * @return mixed Category ID, or false on failure
+        */
        public function getID() {
                return $this->getX( 'mID' );
        }
 
-       /** @return mixed Total number of member pages, or false on failure */
+       /**
+        * @return mixed Total number of member pages, or false on failure
+        */
        public function getPageCount() {
                return $this->getX( 'mPages' );
        }
 
-       /** @return mixed Number of subcategories, or false on failure */
+       /**
+        * @return mixed Number of subcategories, or false on failure
+        */
        public function getSubcatCount() {
                return $this->getX( 'mSubcats' );
        }
 
-       /** @return mixed Number of member files, or false on failure */
+       /**
+        * @return mixed Number of member files, or false on failure
+        */
        public function getFileCount() {
                return $this->getX( 'mFiles' );
        }
index 0736c50..a5e5364 100644 (file)
@@ -67,10 +67,12 @@ class ChangesFeed {
        /**
         * Generates feed's content
         *
-        * @param $feed ChannelFeed subclass object (generally the one returned by getFeedObject())
-        * @param $rows ResultWrapper object with rows in recentchanges table
-        * @param $lastmod Integer: timestamp of the last item in the recentchanges table (only used for the cache key)
-        * @param $opts FormOptions as in SpecialRecentChanges::getDefaultOptions()
+        * @param ChannelFeed $feed ChannelFeed subclass object (generally the one returned
+        *   by getFeedObject())
+        * @param ResultWrapper $rows ResultWrapper object with rows in recentchanges table
+        * @param int $lastmod Timestamp of the last item in the recentchanges table (only
+        *   used for the cache key)
+        * @param FormOptions $opts As in SpecialRecentChanges::getDefaultOptions()
         * @return null|bool True or null
         */
        public function execute( $feed, $rows, $lastmod, $opts ) {
@@ -160,14 +162,28 @@ class ChangesFeed {
        }
 
        /**
-        * Generate the feed items given a row from the database.
+        * Generate the feed items given a row from the database, printing the feed.
         * @param $rows DatabaseBase resource with recentchanges rows
         * @param $feed Feed object
         */
        public static function generateFeed( $rows, &$feed ) {
                wfProfileIn( __METHOD__ );
-
+               $items = self::buildItems( $rows );
                $feed->outHeader();
+               foreach ( $items as $item ) {
+                       $feed->outItem( $item );
+               }
+               $feed->outFooter();
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * Generate the feed items given a row from the database.
+        * @param $rows DatabaseBase resource with recentchanges rows
+        */
+       public static function buildItems( $rows ) {
+               wfProfileIn( __METHOD__ );
+               $items = array();
 
                # Merge adjacent edits by one user
                $sorted = array();
@@ -187,7 +203,10 @@ class ChangesFeed {
 
                foreach ( $sorted as $obj ) {
                        $title = Title::makeTitle( $obj->rc_namespace, $obj->rc_title );
-                       $talkpage = MWNamespace::canTalk( $obj->rc_namespace ) ? $title->getTalkPage()->getFullURL() : '';
+                       $talkpage = MWNamespace::canTalk( $obj->rc_namespace )
+                               ? $title->getTalkPage()->getFullURL()
+                               : '';
+
                        // Skip items with deleted content (avoids partially complete/inconsistent output)
                        if ( $obj->rc_deleted ) {
                                continue;
@@ -203,7 +222,7 @@ class ChangesFeed {
                                $url = $title->getFullURL();
                        }
 
-                       $item = new FeedItem(
+                       $items[] = new FeedItem(
                                $title->getPrefixedText(),
                                FeedUtils::formatDiff( $obj ),
                                $url,
@@ -212,10 +231,9 @@ class ChangesFeed {
                                        ? wfMessage( 'rev-deleted-user' )->escaped() : $obj->rc_user_text,
                                $talkpage
                        );
-                       $feed->outItem( $item );
                }
-               $feed->outFooter();
+
                wfProfileOut( __METHOD__ );
+               return $items;
        }
-
 }
index d0ceafc..c6ebb35 100644 (file)
@@ -15,7 +15,7 @@
  * performed in LocalSettings.php.
  *
  * Documentation is in the source and on:
- * http://www.mediawiki.org/wiki/Manual:Configuration_settings
+ * https://www.mediawiki.org/wiki/Manual:Configuration_settings
  *
  * @warning  Note: this (and other things) will break if the autoloader is not
  * enabled. Please include includes/AutoLoader.php before including this file.
@@ -868,6 +868,13 @@ $wgContentHandlers = array(
        CONTENT_MODEL_TEXT => 'TextContentHandler',
 );
 
+/**
+ * Whether to enable server-side image thumbnailing. If false, images will
+ * always be sent to the client in full resolution, with appropriate width= and
+ * height= attributes on the <img> tag for the client to do its own scaling.
+ */
+$wgUseImageResize = true;
+
 /**
  * Resizing can be done using PHP's internal image libraries or using
  * ImageMagick or another third-party converter, e.g. GraphicMagick.
@@ -883,11 +890,6 @@ $wgUseImageMagick = false;
  */
 $wgImageMagickConvertCommand = '/usr/bin/convert';
 
-/**
- * The identify command shipped with ImageMagick
- */
-$wgImageMagickIdentifyCommand = '/usr/bin/identify';
-
 /**
  * Sharpening parameter to ImageMagick
  */
@@ -1031,6 +1033,14 @@ $wgTiffThumbnailType = false;
  */
 $wgThumbnailEpoch = '20030516000000';
 
+/**
+ * Certain operations are avoided if there were too many recent failures,
+ * for example, thumbnail generation. Bump this value to invalidate all
+ * memory of failed operations and thus allow further attempts to resume.
+ * This is useful when a cause for the failures has been found and fixed.
+ */
+$wgAttemptFailureEpoch = 1;
+
 /**
  * If set, inline scaled images will still produce "<img>" tags ready for
  * output instead of showing an error message.
@@ -1058,11 +1068,6 @@ $wgGenerateThumbnailOnParse = true;
  */
 $wgShowArchiveThumbnails = true;
 
-/**
- * Obsolete, always true, kept for compatibility with extensions
- */
-$wgUseImageResize = true;
-
 /**
  * If set to true, images that contain certain the exif orientation tag will
  * be rotated accordingly. If set to null, try to auto-detect whether a scaler
@@ -1377,6 +1382,18 @@ $wgNewPasswordExpiry = 3600 * 24 * 7;
  */
 $wgUserEmailConfirmationTokenExpiry = 7 * 24 * 60 * 60;
 
+/**
+ * The number of days that a user's password is good for. After this number of days, the
+ * user will be asked to reset their password. Set to false to disable password expiration.
+ */
+$wgPasswordExpirationDays = false;
+
+/**
+ * If a user's password is expired, the number of seconds when they can still login,
+ * and cancel their password change, but are sent to the password change form on each login.
+ */
+$wgPasswordExpireGrace = 3600 * 24 * 7; // 7 days
+
 /**
  * SMTP Mode.
  *
@@ -1577,7 +1594,7 @@ $wgSQLMode = '';
 /**
  * Mediawiki schema
  */
-$wgDBmwschema = 'mediawiki';
+$wgDBmwschema = null;
 
 /**
  * To override default SQLite data directory ($docroot/../data)
@@ -1797,6 +1814,11 @@ $wgSlaveLagWarning = 10;
  */
 $wgSlaveLagCritical = 30;
 
+/**
+ * Use Windows Authentication instead of $wgDBuser / $wgDBpassword for MS SQL Server
+ */
+$wgDBWindowsAuthentication = false;
+
 /**@}*/ # End of DB settings }
 
 /************************************************************************//**
@@ -2234,7 +2256,7 @@ $wgInvalidateCacheOnLocalSettingsChange = true;
  * although they are referred to as Squid settings for historical reasons.
  *
  * Achieving a high hit ratio with an HTTP proxy requires special
- * configuration. See http://www.mediawiki.org/wiki/Manual:Squid_caching for
+ * configuration. See https://www.mediawiki.org/wiki/Manual:Squid_caching for
  * more details.
  *
  * @{
@@ -2242,7 +2264,7 @@ $wgInvalidateCacheOnLocalSettingsChange = true;
 
 /**
  * Enable/disable Squid.
- * See http://www.mediawiki.org/wiki/Manual:Squid_caching
+ * See https://www.mediawiki.org/wiki/Manual:Squid_caching
  */
 $wgUseSquid = false;
 
@@ -2900,6 +2922,8 @@ $wgDefaultSkin = 'vector';
  * Specify the name of a skin that should not be presented in the list of
  * available skins.  Use for blacklisting a skin which you do not want to
  * remove from the .../skins/ directory
+ *
+ * @deprecated since 1.23; use $wgSkipSkins instead
  */
 $wgSkipSkin = '';
 
@@ -3142,14 +3166,23 @@ $wgResourceBasePath = null;
 
 /**
  * Maximum time in seconds to cache resources served by the resource loader.
+ * Used to set last modified headers (max-age/s-maxage).
+ *
+ * Following options to distinguish:
+ * - versioned: Used for modules with a version, because changing version
+ *   numbers causes cache misses. This normally has a long expiry time.
+ * - unversioned: Used for modules without a version to propagate changes
+ *   quickly to clients. Also used for modules with errors to recover quickly.
+ *   This normally has a short expiry time.
  *
- * @todo Document array structure
+ * Expiry time for the options to distinguish:
+ * - server: Squid/Varnish but also any other public proxy cache between the
+ *   client and MediaWiki.
+ * - client: On the client side (e.g. in the browser cache).
  */
 $wgResourceLoaderMaxage = array(
        'versioned' => array(
-               // Squid/Varnish but also any other public proxy cache between the client and MediaWiki
                'server' => 30 * 24 * 60 * 60, // 30 days
-               // On the client side (e.g. in the browser cache).
                'client' => 30 * 24 * 60 * 60, // 30 days
        ),
        'unversioned' => array(
@@ -3458,9 +3491,21 @@ $wgLegalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF+";
 
 /**
  * The interwiki prefix of the current wiki, or false if it doesn't have one.
+ *
+ * @deprecated since 1.23; use $wgLocalInterwikis instead
  */
 $wgLocalInterwiki = false;
 
+/**
+ * Array for multiple $wgLocalInterwiki values, in case there are several
+ * interwiki prefixes that point to the current wiki. If $wgLocalInterwiki is
+ * set, its value is prepended to this array, for backwards compatibility.
+ *
+ * Note, recent changes feeds use only the first entry in this array (or
+ * $wgLocalInterwiki, if it is set). See $wgRCFeeds
+ */
+$wgLocalInterwikis = array();
+
 /**
  * Expiry time for cache of interwiki table
  */
@@ -3882,7 +3927,7 @@ $wgTranscludeCacheExpiry = 3600;
  *         if $wgUseCommaCount is false, it will be 'link', if it is true
  *         it will be 'comma'
  *
- * See also See http://www.mediawiki.org/wiki/Manual:Article_count
+ * See also See https://www.mediawiki.org/wiki/Manual:Article_count
  *
  * Retroactively changing this variable will not affect the existing count,
  * to update it, you will need to run the maintenance/updateArticleCount.php
@@ -3932,6 +3977,13 @@ $wgPasswordSalt = true;
  */
 $wgMinimalPasswordLength = 1;
 
+/**
+ * Specifies if users should be sent to a password-reset form on login, if their
+ * password doesn't meet the requirements of User::isValidPassword().
+ * @since 1.23
+ */
+$wgInvalidPasswordReset = true;
+
 /**
  * Whether to allow password resets ("enter some identifying data, and we'll send an email
  * with a temporary password you can use to get back into the account") identified by
@@ -3999,7 +4051,6 @@ $wgDefaultUserOptions = array(
        'minordefault' => 0,
        'newpageshidepatrolled' => 0,
        'nickname' => '',
-       'noconvertlink' => 0,
        'norollbackdiff' => 0,
        'numberheadings' => 0,
        'previewonfirst' => 0,
@@ -4017,7 +4068,6 @@ $wgDefaultUserOptions = array(
        'underline' => 2,
        'uselivepreview' => 0,
        'usenewrc' => 0,
-       'vector-simplesearch' => 1,
        'watchcreations' => 1,
        'watchdefault' => 1,
        'watchdeletion' => 0,
@@ -4130,7 +4180,7 @@ $wgBlockDisablesLogin = false;
  *
  * @note Also that this will only protect _pages in the wiki_. Uploaded files
  * will remain readable. You can use img_auth.php to protect uploaded files,
- * see http://www.mediawiki.org/wiki/Manual:Image_Authorization
+ * see https://www.mediawiki.org/wiki/Manual:Image_Authorization
  */
 $wgWhitelistRead = false;
 
@@ -4707,6 +4757,8 @@ $wgRateLimits = array(
 
 /**
  * Set to a filename to log rate limiter hits.
+ *
+ * @deprecated since 1.23, use $wgDebugLogGroups['ratelimit'] instead
  */
 $wgRateLimitLog = null;
 
@@ -4865,7 +4917,7 @@ $wgUseTeX = false;
  */
 
 /**
- * Filename for debug logging. See http://www.mediawiki.org/wiki/How_to_debug
+ * Filename for debug logging. See https://www.mediawiki.org/wiki/How_to_debug
  * The debug log file should be not be publicly accessible if it is used, as it
  * may contain private data.
  */
@@ -4919,10 +4971,12 @@ $wgDebugDumpSql = false;
  * of the regular $wgDebugLogFile. Useful for enabling selective logging
  * in production.
  *
- * Log destinations may be string values specifying a filename or URI, or they
- * may be filename or an associative array mapping 'destination' to the desired
- * filename. The associative array may also contain a 'sample' key with an
- * integer value, specifying a sampling factor.
+ * Log destinations may be one of the following:
+ * - false to completely remove from the output, including from $wgDebugLogFile.
+ * - string values specifying a filename or URI.
+ * - associative array mapping 'destination' key to the desired filename or URI.
+ *   The associative array may also contain a 'sample' key with an integer value,
+ *   specifying a sampling factor.
  *
  * @par Example:
  * @code
@@ -4979,6 +5033,11 @@ $wgShowExceptionDetails = false;
 
 /**
  * If true, show a backtrace for database errors
+ *
+ * @note This setting only applies when connection errors and query errors are
+ * reported in the normal manner. $wgShowExceptionDetails applies in other cases,
+ * including those in which an uncaught exception is thrown from within the
+ * exception handler.
  */
 $wgShowDBErrorBacktrace = false;
 
@@ -5070,11 +5129,6 @@ $wgUDPProfilerPort = '3811';
  */
 $wgUDPProfilerFormatString = "%s - %d %f %f %f %f %s\n";
 
-/**
- * Detects non-matching wfProfileIn/wfProfileOut calls
- */
-$wgDebugProfiling = false;
-
 /**
  * Output debug message on every wfProfileIn/wfProfileOut
  */
@@ -5150,7 +5204,7 @@ $wgParserTestFiles = array(
  *
  * Something like this:
  * $wgParserTestRemote = array(
- *     'api-url' => 'http://www.mediawiki.org/w/api.php',
+ *     'api-url' => 'https://www.mediawiki.org/w/api.php',
  *     'repo'    => 'MediaWiki',
  *     'suite'   => 'ParserTests',
  *     'path'    => '/trunk/phase3', // not used client-side; for reference
@@ -5429,13 +5483,6 @@ if ( !isset( $wgCommandLineMode ) ) {
  */
 $wgCommandLineDarkBg = false;
 
-/**
- * Array for extensions to register their maintenance scripts with the
- * system. The key is the name of the class and the value is the full
- * path to the file
- */
-$wgMaintenanceScripts = array();
-
 /**
  * Set this to a string to put the wiki into read-only mode. The text will be
  * used as an explanation to users.
@@ -5550,8 +5597,9 @@ $wgRC2UDPPort = false;
 $wgRC2UDPPrefix = '';
 
 /**
- * If this is set to true, $wgLocalInterwiki will be prepended to links in the
- * IRC feed. If this is set to a string, that string will be used as the prefix.
+ * If this is set to true, the first entry in the $wgLocalInterwikis array (or
+ * the value of $wgLocalInterwiki, if set) will be prepended to links in the IRC
+ * feed. If this is set to a string, that string will be used as the prefix.
  *
  * @deprecated since 1.22, use $wgRCFeeds
  */
@@ -5579,11 +5627,12 @@ $wgRC2UDPOmitBots = false;
  *   * 'omit_bots' -- whether the bot edits should be in the feed
  *  The IRC-specific options are:
  *   * 'add_interwiki_prefix' -- whether the titles should be prefixed with
- *     $wgLocalInterwiki.
+ *     the first entry in the $wgLocalInterwikis array (or the value of
+ *     $wgLocalInterwiki, if set)
  *  The JSON-specific options are:
  *   * 'channel' -- if set, the 'channel' parameter is also set in JSON values.
  *
- *  To ensure backwards-compatability, whenever $wgRC2UDPAddress is set, a
+ *  To ensure backwards-compatibility, whenever $wgRC2UDPAddress is set, a
  *  'default' feed will be created reusing the deprecated $wgRC2UDP* variables.
  *
  * @example $wgRCFeeds['example'] = array(
@@ -5957,21 +6006,22 @@ $wgExtensionMessagesFiles = array();
  *
  * @par Simple example:
  * @code
- *    $wgMessagesDirs['ConfirmEdit'] = __DIR__ . '/i18n';
+ *    $wgMessagesDirs['Example'] = __DIR__ . '/i18n';
  * @endcode
  *
  * @par Complex example:
  * @code
- *    $wgMessagesDirs['VisualEditor'] = array(
+ *    $wgMessagesDirs['Example'] = array(
+ *        __DIR__ . '/lib/ve/i18n',
+ *        __DIR__ . '/lib/oojs-ui/i18n',
  *        __DIR__ . '/i18n',
- *        __DIR__ . '/modules/ve-core/i18n',
- *        __DIR__ . '/modules/qunit/localisation',
- *        __DIR__ . '/modules/oojs-ui/messages',
  *    )
  * @endcode
  * @since 1.23
  */
-$wgMessagesDirs = array();
+$wgMessagesDirs = array(
+       "$IP/resources/oojs-ui/i18n",
+);
 
 /**
  * Array of files with list(s) of extension entry points to be used in
@@ -6477,12 +6527,6 @@ $wgActions = array(
        'watch' => true,
 );
 
-/**
- * Array of disabled article actions, e.g. view, edit, delete, etc.
- * @deprecated since 1.18; just set $wgActions['action'] = false instead
- */
-$wgDisabledActions = array();
-
 /** @} */ # end actions }
 
 /*************************************************************************//**
@@ -6568,7 +6612,7 @@ $wgExemptFromUserRobotsControl = null;
  * Enable the MediaWiki API for convenient access to
  * machine-readable data via api.php
  *
- * See http://www.mediawiki.org/wiki/API
+ * See https://www.mediawiki.org/wiki/API
  */
 $wgEnableAPI = true;
 
index 9a27d23..5f5cb53 100644 (file)
@@ -772,8 +772,7 @@ class EditPage {
                                $this->sectiontitle = $request->getVal( 'preloadtitle' );
                                // Once wpSummary isn't being use for setting section titles, we should delete this.
                                $this->summary = $request->getVal( 'preloadtitle' );
-                       }
-                       elseif ( $this->section != 'new' && $request->getVal( 'summary' ) ) {
+                       } elseif ( $this->section != 'new' && $request->getVal( 'summary' ) ) {
                                $this->summary = $request->getText( 'summary' );
                                if ( $this->summary !== '' ) {
                                        $this->hasPresetSummary = true;
diff --git a/includes/Exception.php b/includes/Exception.php
deleted file mode 100644 (file)
index 45b314d..0000000
+++ /dev/null
@@ -1,917 +0,0 @@
-<?php
-/**
- * Exception class and handler.
- *
- * 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
- */
-
-/**
- * @defgroup Exception Exception
- */
-
-/**
- * MediaWiki exception
- *
- * @ingroup Exception
- */
-class MWException extends Exception {
-       /**
-        * Should the exception use $wgOut to output the error?
-        *
-        * @return bool
-        */
-       function useOutputPage() {
-               return $this->useMessageCache() &&
-                       !empty( $GLOBALS['wgFullyInitialised'] ) &&
-                       !empty( $GLOBALS['wgOut'] );
-       }
-
-       /**
-        * Whether to log this exception in the exception debug log.
-        *
-        * @since 1.23
-        * @return boolean
-        */
-       function isLoggable() {
-               return true;
-       }
-
-       /**
-        * Can the extension use the Message class/wfMessage to get i18n-ed messages?
-        *
-        * @return bool
-        */
-       function useMessageCache() {
-               global $wgLang;
-
-               foreach ( $this->getTrace() as $frame ) {
-                       if ( isset( $frame['class'] ) && $frame['class'] === 'LocalisationCache' ) {
-                               return false;
-                       }
-               }
-
-               return $wgLang instanceof Language;
-       }
-
-       /**
-        * Run hook to allow extensions to modify the text of the exception
-        *
-        * @param string $name class name of the exception
-        * @param array $args arguments to pass to the callback functions
-        * @return string|null string to output or null if any hook has been called
-        */
-       function runHooks( $name, $args = array() ) {
-               global $wgExceptionHooks;
-
-               if ( !isset( $wgExceptionHooks ) || !is_array( $wgExceptionHooks ) ) {
-                       return null; // Just silently ignore
-               }
-
-               if ( !array_key_exists( $name, $wgExceptionHooks ) ||
-                       !is_array( $wgExceptionHooks[$name] )
-               ) {
-                       return null;
-               }
-
-               $hooks = $wgExceptionHooks[$name];
-               $callargs = array_merge( array( $this ), $args );
-
-               foreach ( $hooks as $hook ) {
-                       if (
-                               is_string( $hook ) ||
-                               ( is_array( $hook ) && count( $hook ) >= 2 && is_string( $hook[0] ) )
-                       ) {
-                               // 'function' or array( 'class', hook' )
-                               $result = call_user_func_array( $hook, $callargs );
-                       } else {
-                               $result = null;
-                       }
-
-                       if ( is_string( $result ) ) {
-                               return $result;
-                       }
-               }
-               return null;
-       }
-
-       /**
-        * Get a message from i18n
-        *
-        * @param string $key message name
-        * @param string $fallback default message if the message cache can't be
-        *                  called by the exception
-        * The function also has other parameters that are arguments for the message
-        * @return string message with arguments replaced
-        */
-       function msg( $key, $fallback /*[, params...] */ ) {
-               $args = array_slice( func_get_args(), 2 );
-
-               if ( $this->useMessageCache() ) {
-                       return wfMessage( $key, $args )->plain();
-               } else {
-                       return wfMsgReplaceArgs( $fallback, $args );
-               }
-       }
-
-       /**
-        * If $wgShowExceptionDetails is true, return a HTML message with a
-        * backtrace to the error, otherwise show a message to ask to set it to true
-        * to show that information.
-        *
-        * @return string html to output
-        */
-       function getHTML() {
-               global $wgShowExceptionDetails;
-
-               if ( $wgShowExceptionDetails ) {
-                       return '<p>' . nl2br( htmlspecialchars( MWExceptionHandler::getLogMessage( $this ) ) ) .
-                               '</p><p>Backtrace:</p><p>' . nl2br( htmlspecialchars( MWExceptionHandler::getRedactedTraceAsString( $this ) ) ) .
-                               "</p>\n";
-               } else {
-                       return "<div class=\"errorbox\">" .
-                               '[' . MWExceptionHandler::getLogId( $this ) . '] ' .
-                               gmdate( 'Y-m-d H:i:s' ) .
-                               ": Fatal exception of type " . get_class( $this ) . "</div>\n" .
-                               "<!-- Set \$wgShowExceptionDetails = true; " .
-                               "at the bottom of LocalSettings.php to show detailed " .
-                               "debugging information. -->";
-               }
-       }
-
-       /**
-        * Get the text to display when reporting the error on the command line.
-        * If $wgShowExceptionDetails is true, return a text message with a
-        * backtrace to the error.
-        *
-        * @return string
-        */
-       function getText() {
-               global $wgShowExceptionDetails;
-
-               if ( $wgShowExceptionDetails ) {
-                       return MWExceptionHandler::getLogMessage( $this ) .
-                               "\nBacktrace:\n" . MWExceptionHandler::getRedactedTraceAsString( $this ) . "\n";
-               } else {
-                       return "Set \$wgShowExceptionDetails = true; " .
-                               "in LocalSettings.php to show detailed debugging information.\n";
-               }
-       }
-
-       /**
-        * Return the title of the page when reporting this error in a HTTP response.
-        *
-        * @return string
-        */
-       function getPageTitle() {
-               global $wgSitename;
-               return $this->msg( 'pagetitle', "$1 - $wgSitename", $this->msg( 'internalerror', 'Internal error' ) );
-       }
-
-       /**
-        * Get a the ID for this error.
-        *
-        * @since 1.20
-        * @deprecated since 1.22 Use MWExceptionHandler::getLogId instead.
-        * @return string
-        */
-       function getLogId() {
-               wfDeprecated( __METHOD__, '1.22' );
-               return MWExceptionHandler::getLogId( $this );
-       }
-
-       /**
-        * Return the requested URL and point to file and line number from which the
-        * exception occurred
-        *
-        * @since 1.8
-        * @deprecated since 1.22 Use MWExceptionHandler::getLogMessage instead.
-        * @return string
-        */
-       function getLogMessage() {
-               wfDeprecated( __METHOD__, '1.22' );
-               return MWExceptionHandler::getLogMessage( $this );
-       }
-
-       /**
-        * Output the exception report using HTML.
-        */
-       function reportHTML() {
-               global $wgOut;
-               if ( $this->useOutputPage() ) {
-                       $wgOut->prepareErrorPage( $this->getPageTitle() );
-
-                       $hookResult = $this->runHooks( get_class( $this ) );
-                       if ( $hookResult ) {
-                               $wgOut->addHTML( $hookResult );
-                       } else {
-                               $wgOut->addHTML( $this->getHTML() );
-                       }
-
-                       $wgOut->output();
-               } else {
-                       header( 'Content-Type: text/html; charset=utf-8' );
-                       echo "<!DOCTYPE html>\n" .
-                               '<html><head>' .
-                               '<title>' . htmlspecialchars( $this->getPageTitle() ) . '</title>' .
-                               '<style>body { font-family: sans-serif; margin: 0; padding: 0.5em 2em; }</style>' .
-                               "</head><body>\n";
-
-                       $hookResult = $this->runHooks( get_class( $this ) . 'Raw' );
-                       if ( $hookResult ) {
-                               echo $hookResult;
-                       } else {
-                               echo $this->getHTML();
-                       }
-
-                       echo "</body></html>\n";
-               }
-       }
-
-       /**
-        * Output a report about the exception and takes care of formatting.
-        * It will be either HTML or plain text based on isCommandLine().
-        */
-       function report() {
-               global $wgMimeType;
-
-               MWExceptionHandler::logException( $this );
-
-               if ( defined( 'MW_API' ) ) {
-                       // Unhandled API exception, we can't be sure that format printer is alive
-                       header( 'MediaWiki-API-Error: internal_api_error_' . get_class( $this ) );
-                       wfHttpError( 500, 'Internal Server Error', $this->getText() );
-               } elseif ( self::isCommandLine() ) {
-                       MWExceptionHandler::printError( $this->getText() );
-               } else {
-                       header( 'HTTP/1.1 500 MediaWiki exception' );
-                       header( 'Status: 500 MediaWiki exception', true );
-                       header( "Content-Type: $wgMimeType; charset=utf-8", true );
-
-                       $this->reportHTML();
-               }
-       }
-
-       /**
-        * Check whether we are in command line mode or not to report the exception
-        * in the correct format.
-        *
-        * @return bool
-        */
-       static function isCommandLine() {
-               return !empty( $GLOBALS['wgCommandLineMode'] );
-       }
-}
-
-/**
- * Exception class which takes an HTML error message, and does not
- * produce a backtrace. Replacement for OutputPage::fatalError().
- *
- * @since 1.7
- * @ingroup Exception
- */
-class FatalError extends MWException {
-
-       /**
-        * @return string
-        */
-       function getHTML() {
-               return $this->getMessage();
-       }
-
-       /**
-        * @return string
-        */
-       function getText() {
-               return $this->getMessage();
-       }
-}
-
-/**
- * An error page which can definitely be safely rendered using the OutputPage.
- *
- * @since 1.7
- * @ingroup Exception
- */
-class ErrorPageError extends MWException {
-       public $title, $msg, $params;
-
-       /**
-        * Note: these arguments are keys into wfMessage(), not text!
-        *
-        * @param string|Message $title Message key (string) for page title, or a Message object
-        * @param string|Message $msg Message key (string) for error text, or a Message object
-        * @param array $params with parameters to wfMessage()
-        */
-       function __construct( $title, $msg, $params = array() ) {
-               $this->title = $title;
-               $this->msg = $msg;
-               $this->params = $params;
-
-               // Bug 44111: Messages in the log files should be in English and not
-               // customized by the local wiki. So get the default English version for
-               // passing to the parent constructor. Our overridden report() below
-               // makes sure that the page shown to the user is not forced to English.
-               if ( $msg instanceof Message ) {
-                       $enMsg = clone( $msg );
-               } else {
-                       $enMsg = wfMessage( $msg, $params );
-               }
-               $enMsg->inLanguage( 'en' )->useDatabase( false );
-               parent::__construct( $enMsg->text() );
-       }
-
-       function report() {
-               global $wgOut;
-
-               $wgOut->showErrorPage( $this->title, $this->msg, $this->params );
-               $wgOut->output();
-       }
-}
-
-/**
- * Show an error page on a badtitle.
- * Similar to ErrorPage, but emit a 400 HTTP error code to let mobile
- * browser it is not really a valid content.
- *
- * @since 1.19
- * @ingroup Exception
- */
-class BadTitleError extends ErrorPageError {
-       /**
-        * @param string|Message $msg A message key (default: 'badtitletext')
-        * @param array $params parameter to wfMessage()
-        */
-       function __construct( $msg = 'badtitletext', $params = array() ) {
-               parent::__construct( 'badtitle', $msg, $params );
-       }
-
-       /**
-        * Just like ErrorPageError::report() but additionally set
-        * a 400 HTTP status code (bug 33646).
-        */
-       function report() {
-               global $wgOut;
-
-               // bug 33646: a badtitle error page need to return an error code
-               // to let mobile browser now that it is not a normal page.
-               $wgOut->setStatusCode( 400 );
-               parent::report();
-       }
-
-}
-
-/**
- * Show an error when a user tries to do something they do not have the necessary
- * permissions for.
- *
- * @since 1.18
- * @ingroup Exception
- */
-class PermissionsError extends ErrorPageError {
-       public $permission, $errors;
-
-       function __construct( $permission, $errors = array() ) {
-               global $wgLang;
-
-               $this->permission = $permission;
-
-               if ( !count( $errors ) ) {
-                       $groups = array_map(
-                               array( 'User', 'makeGroupLinkWiki' ),
-                               User::getGroupsWithPermission( $this->permission )
-                       );
-
-                       if ( $groups ) {
-                               $errors[] = array( 'badaccess-groups', $wgLang->commaList( $groups ), count( $groups ) );
-                       } else {
-                               $errors[] = array( 'badaccess-group0' );
-                       }
-               }
-
-               $this->errors = $errors;
-       }
-
-       function report() {
-               global $wgOut;
-
-               $wgOut->showPermissionsErrorPage( $this->errors, $this->permission );
-               $wgOut->output();
-       }
-}
-
-/**
- * Show an error when the wiki is locked/read-only and the user tries to do
- * something that requires write access.
- *
- * @since 1.18
- * @ingroup Exception
- */
-class ReadOnlyError extends ErrorPageError {
-       public function __construct() {
-               parent::__construct(
-                       'readonly',
-                       'readonlytext',
-                       wfReadOnlyReason() ?: array()
-               );
-       }
-}
-
-/**
- * Show an error when the user hits a rate limit.
- *
- * @since 1.18
- * @ingroup Exception
- */
-class ThrottledError extends ErrorPageError {
-       public function __construct() {
-               parent::__construct(
-                       'actionthrottled',
-                       'actionthrottledtext'
-               );
-       }
-
-       public function report() {
-               global $wgOut;
-               $wgOut->setStatusCode( 503 );
-               parent::report();
-       }
-}
-
-/**
- * Show an error when the user tries to do something whilst blocked.
- *
- * @since 1.18
- * @ingroup Exception
- */
-class UserBlockedError extends ErrorPageError {
-       public function __construct( Block $block ) {
-               // @todo FIXME: Implement a more proper way to get context here.
-               $params = $block->getPermissionsError( RequestContext::getMain() );
-               parent::__construct( 'blockedtitle', array_shift( $params ), $params );
-       }
-}
-
-/**
- * Shows a generic "user is not logged in" error page.
- *
- * This is essentially an ErrorPageError exception which by default uses the
- * 'exception-nologin' as a title and 'exception-nologin-text' for the message.
- * @see bug 37627
- * @since 1.20
- *
- * @par Example:
- * @code
- * if( $user->isAnon() ) {
- *     throw new UserNotLoggedIn();
- * }
- * @endcode
- *
- * Note the parameter order differs from ErrorPageError, this allows you to
- * simply specify a reason without overriding the default title.
- *
- * @par Example:
- * @code
- * if( $user->isAnon() ) {
- *     throw new UserNotLoggedIn( 'action-require-loggedin' );
- * }
- * @endcode
- *
- * @ingroup Exception
- */
-class UserNotLoggedIn extends ErrorPageError {
-
-       /**
-        * @param string $reasonMsg A message key containing the reason for the error.
-        *        Optional, default: 'exception-nologin-text'
-        * @param string $titleMsg A message key to set the page title.
-        *        Optional, default: 'exception-nologin'
-        * @param array $params Parameters to wfMessage().
-        *        Optional, default: array()
-        */
-       public function __construct(
-               $reasonMsg = 'exception-nologin-text',
-               $titleMsg = 'exception-nologin',
-               $params = array()
-       ) {
-               parent::__construct( $titleMsg, $reasonMsg, $params );
-       }
-}
-
-/**
- * Show an error that looks like an HTTP server error.
- * Replacement for wfHttpError().
- *
- * @since 1.19
- * @ingroup Exception
- */
-class HttpError extends MWException {
-       private $httpCode, $header, $content;
-
-       /**
-        * Constructor
-        *
-        * @param $httpCode Integer: HTTP status code to send to the client
-        * @param string|Message $content content of the message
-        * @param string|Message $header content of the header (\<title\> and \<h1\>)
-        */
-       public function __construct( $httpCode, $content, $header = null ) {
-               parent::__construct( $content );
-               $this->httpCode = (int)$httpCode;
-               $this->header = $header;
-               $this->content = $content;
-       }
-
-       /**
-        * Returns the HTTP status code supplied to the constructor.
-        *
-        * @return int
-        */
-       public function getStatusCode() {
-               return $this->httpCode;
-       }
-
-       /**
-        * Report the HTTP error.
-        * Sends the appropriate HTTP status code and outputs an
-        * HTML page with an error message.
-        */
-       public function report() {
-               $httpMessage = HttpStatus::getMessage( $this->httpCode );
-
-               header( "Status: {$this->httpCode} {$httpMessage}", true, $this->httpCode );
-               header( 'Content-type: text/html; charset=utf-8' );
-
-               print $this->getHTML();
-       }
-
-       /**
-        * Returns HTML for reporting the HTTP error.
-        * This will be a minimal but complete HTML document.
-        *
-        * @return string HTML
-        */
-       public function getHTML() {
-               if ( $this->header === null ) {
-                       $header = HttpStatus::getMessage( $this->httpCode );
-               } elseif ( $this->header instanceof Message ) {
-                       $header = $this->header->escaped();
-               } else {
-                       $header = htmlspecialchars( $this->header );
-               }
-
-               if ( $this->content instanceof Message ) {
-                       $content = $this->content->escaped();
-               } else {
-                       $content = htmlspecialchars( $this->content );
-               }
-
-               return "<!DOCTYPE html>\n" .
-                       "<html><head><title>$header</title></head>\n" .
-                       "<body><h1>$header</h1><p>$content</p></body></html>\n";
-       }
-}
-
-/**
- * Handler class for MWExceptions
- * @ingroup Exception
- */
-class MWExceptionHandler {
-       /**
-        * Install an exception handler for MediaWiki exception types.
-        */
-       public static function installHandler() {
-               set_exception_handler( array( 'MWExceptionHandler', 'handle' ) );
-       }
-
-       /**
-        * Report an exception to the user
-        */
-       protected static function report( Exception $e ) {
-               global $wgShowExceptionDetails;
-
-               $cmdLine = MWException::isCommandLine();
-
-               if ( $e instanceof MWException ) {
-                       try {
-                               // Try and show the exception prettily, with the normal skin infrastructure
-                               $e->report();
-                       } catch ( Exception $e2 ) {
-                               // Exception occurred from within exception handler
-                               // Show a simpler error message for the original exception,
-                               // don't try to invoke report()
-                               $message = "MediaWiki internal error.\n\n";
-
-                               if ( $wgShowExceptionDetails ) {
-                                       $message .= 'Original exception: ' . self::getLogMessage( $e ) .
-                                               "\nBacktrace:\n" . self::getRedactedTraceAsString( $e ) .
-                                               "\n\nException caught inside exception handler: " . self::getLogMessage( $e2 ) .
-                                               "\nBacktrace:\n" . self::getRedactedTraceAsString( $e2 );
-                               } else {
-                                       $message .= "Exception caught inside exception handler.\n\n" .
-                                               "Set \$wgShowExceptionDetails = true; at the bottom of LocalSettings.php " .
-                                               "to show detailed debugging information.";
-                               }
-
-                               $message .= "\n";
-
-                               if ( $cmdLine ) {
-                                       self::printError( $message );
-                               } else {
-                                       echo nl2br( htmlspecialchars( $message ) ) . "\n";
-                               }
-                       }
-               } else {
-                       $message = "Unexpected non-MediaWiki exception encountered, of type \"" .
-                               get_class( $e ) . "\"";
-
-                       if ( $wgShowExceptionDetails ) {
-                               $message .= "\n" . MWExceptionHandler::getLogMessage( $e ) . "\nBacktrace:\n" .
-                                       self::getRedactedTraceAsString( $e ) . "\n";
-                       }
-
-                       if ( $cmdLine ) {
-                               self::printError( $message );
-                       } else {
-                               echo nl2br( htmlspecialchars( $message ) ) . "\n";
-                       }
-               }
-       }
-
-       /**
-        * Print a message, if possible to STDERR.
-        * Use this in command line mode only (see isCommandLine)
-        *
-        * @param string $message Failure text
-        */
-       public static function printError( $message ) {
-               # NOTE: STDERR may not be available, especially if php-cgi is used from the
-               # command line (bug #15602). Try to produce meaningful output anyway. Using
-               # echo may corrupt output to STDOUT though.
-               if ( defined( 'STDERR' ) ) {
-                       fwrite( STDERR, $message );
-               } else {
-                       echo $message;
-               }
-       }
-
-       /**
-        * Exception handler which simulates the appropriate catch() handling:
-        *
-        *   try {
-        *       ...
-        *   } catch ( MWException $e ) {
-        *       $e->report();
-        *   } catch ( Exception $e ) {
-        *       echo $e->__toString();
-        *   }
-        */
-       public static function handle( $e ) {
-               global $wgFullyInitialised;
-
-               self::report( $e );
-
-               // Final cleanup
-               if ( $wgFullyInitialised ) {
-                       try {
-                               // uses $wgRequest, hence the $wgFullyInitialised condition
-                               wfLogProfilingData();
-                       } catch ( Exception $e ) {
-                       }
-               }
-
-               // Exit value should be nonzero for the benefit of shell jobs
-               exit( 1 );
-       }
-
-       /**
-        * Generate a string representation of an exception's stack trace
-        *
-        * Like Exception::getTraceAsString, but replaces argument values with
-        * argument type or class name.
-        *
-        * @param Exception $e
-        * @return string
-        */
-       public static function getRedactedTraceAsString( Exception $e ) {
-               $text = '';
-
-               foreach ( self::getRedactedTrace( $e ) as $level => $frame ) {
-                       if ( isset( $frame['file'] ) && isset( $frame['line'] ) ) {
-                               $text .= "#{$level} {$frame['file']}({$frame['line']}): ";
-                       } else {
-                               // 'file' and 'line' are unset for calls via call_user_func (bug 55634)
-                               // This matches behaviour of Exception::getTraceAsString to instead
-                               // display "[internal function]".
-                               $text .= "#{$level} [internal function]: ";
-                       }
-
-                       if ( isset( $frame['class'] ) ) {
-                               $text .= $frame['class'] . $frame['type'] . $frame['function'];
-                       } else {
-                               $text .= $frame['function'];
-                       }
-
-                       if ( isset( $frame['args'] ) ) {
-                               $text .= '(' . implode( ', ', $frame['args'] ) . ")\n";
-                       } else {
-                               $text .= "()\n";
-                       }
-               }
-
-               $level = $level + 1;
-               $text .= "#{$level} {main}";
-
-               return $text;
-       }
-
-       /**
-        * Return a copy of an exception's backtrace as an array.
-        *
-        * Like Exception::getTrace, but replaces each element in each frame's
-        * argument array with the name of its class (if the element is an object)
-        * or its type (if the element is a PHP primitive).
-        *
-        * @since 1.22
-        * @param Exception $e
-        * @return array
-        */
-       public static function getRedactedTrace( Exception $e ) {
-               return array_map( function ( $frame ) {
-                       if ( isset( $frame['args'] ) ) {
-                               $frame['args'] = array_map( function ( $arg ) {
-                                       return is_object( $arg ) ? get_class( $arg ) : gettype( $arg );
-                               }, $frame['args'] );
-                       }
-                       return $frame;
-               }, $e->getTrace() );
-       }
-
-       /**
-        * Get the ID for this error.
-        *
-        * The ID is saved so that one can match the one output to the user (when
-        * $wgShowExceptionDetails is set to false), to the entry in the debug log.
-        *
-        * @since 1.22
-        * @param Exception $e
-        * @return string
-        */
-       public static function getLogId( Exception $e ) {
-               if ( !isset( $e->_mwLogId ) ) {
-                       $e->_mwLogId = wfRandomString( 8 );
-               }
-               return $e->_mwLogId;
-       }
-
-       /**
-        * If the exception occurred in the course of responding to a request,
-        * returns the requested URL. Otherwise, returns false.
-        *
-        * @since 1.23
-        * @return string|bool
-        */
-       public static function getURL() {
-               global $wgRequest;
-               if ( !isset( $wgRequest ) || $wgRequest instanceof FauxRequest ) {
-                       return false;
-               }
-               return $wgRequest->getRequestURL();
-       }
-
-       /**
-        * Return the requested URL and point to file and line number from which the
-        * exception occurred.
-        *
-        * @since 1.22
-        * @param Exception $e
-        * @return string
-        */
-       public static function getLogMessage( Exception $e ) {
-               $id = self::getLogId( $e );
-               $file = $e->getFile();
-               $line = $e->getLine();
-               $message = $e->getMessage();
-               $url = self::getURL() ?: '[no req]';
-
-               return "[$id] $url   Exception from line $line of $file: $message";
-       }
-
-       /**
-        * Serialize an Exception object to JSON.
-        *
-        * The JSON object will have keys 'id', 'file', 'line', 'message', and
-        * 'url'. These keys map to string values, with the exception of 'line',
-        * which is a number, and 'url', which may be either a string URL or or
-        * null if the exception did not occur in the context of serving a web
-        * request.
-        *
-        * If $wgLogExceptionBacktrace is true, it will also have a 'backtrace'
-        * key, mapped to the array return value of Exception::getTrace, but with
-        * each element in each frame's "args" array (if set) replaced with the
-        * argument's class name (if the argument is an object) or type name (if
-        * the argument is a PHP primitive).
-        *
-        * @par Sample JSON record ($wgLogExceptionBacktrace = false):
-        * @code
-        *  {
-        *    "id": "c41fb419",
-        *    "file": "/var/www/mediawiki/includes/cache/MessageCache.php",
-        *    "line": 704,
-        *    "message": "Non-string key given",
-        *    "url": "/wiki/Main_Page"
-        *  }
-        * @endcode
-        *
-        * @par Sample JSON record ($wgLogExceptionBacktrace = true):
-        * @code
-        *  {
-        *    "id": "dc457938",
-        *    "file": "/vagrant/mediawiki/includes/cache/MessageCache.php",
-        *    "line": 704,
-        *    "message": "Non-string key given",
-        *    "url": "/wiki/Main_Page",
-        *    "backtrace": [{
-        *      "file": "/vagrant/mediawiki/extensions/VisualEditor/VisualEditor.hooks.php",
-        *      "line": 80,
-        *      "function": "get",
-        *      "class": "MessageCache",
-        *      "type": "->",
-        *      "args": ["array"]
-        *    }]
-        *  }
-        * @endcode
-        *
-        * @since 1.23
-        * @param Exception $e
-        * @param bool $pretty Add non-significant whitespace to improve readability (default: false).
-        * @param int $escaping Bitfield consisting of FormatJson::.*_OK class constants.
-        * @return string|bool: JSON string if successful; false upon failure
-        */
-       public static function jsonSerializeException( Exception $e, $pretty = false, $escaping = 0 ) {
-               global $wgLogExceptionBacktrace;
-
-               $exceptionData = array(
-                       'id' => self::getLogId( $e ),
-                       'file' => $e->getFile(),
-                       'line' => $e->getLine(),
-                       'message' => $e->getMessage(),
-               );
-
-               // Because MediaWiki is first and foremost a web application, we set a
-               // 'url' key unconditionally, but set it to null if the exception does
-               // not occur in the context of a web request, as a way of making that
-               // fact visible and explicit.
-               $exceptionData['url'] = self::getURL() ?: null;
-
-               if ( $wgLogExceptionBacktrace ) {
-                       // Argument values may not be serializable, so redact them.
-                       $exceptionData['backtrace'] = self::getRedactedTrace( $e );
-               }
-
-               return FormatJson::encode( $exceptionData, $pretty, $escaping );
-       }
-
-       /**
-        * Log an exception to the exception log (if enabled).
-        *
-        * This method must not assume the exception is an MWException,
-        * it is also used to handle PHP errors or errors from other libraries.
-        *
-        * @since 1.22
-        * @param Exception $e
-        */
-       public static function logException( Exception $e ) {
-               global $wgLogExceptionBacktrace;
-
-               if ( !( $e instanceof MWException ) || $e->isLoggable() ) {
-                       $log = self::getLogMessage( $e );
-                       if ( $wgLogExceptionBacktrace ) {
-                               wfDebugLog( 'exception', $log . "\n" . $e->getTraceAsString() );
-                       } else {
-                               wfDebugLog( 'exception', $log );
-                       }
-
-                       $json = self::jsonSerializeException( $e, false, FormatJson::ALL_OK );
-                       if ( $json !== false ) {
-                               wfDebugLog( 'exception-json', $json, 'private' );
-                       }
-               }
-
-       }
-
-}
index 639ba28..56fe452 100644 (file)
@@ -3,7 +3,7 @@
  * Base classes for dumps and export
  *
  * Copyright © 2003, 2005, 2006 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 635b04e..d5a9553 100644 (file)
@@ -6,7 +6,7 @@
  * Available feeds are defined in Defines.php
  *
  * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index cd6e207..a8da67e 100644 (file)
@@ -373,22 +373,32 @@ class FormOptions implements ArrayAccess {
         * @see http://php.net/manual/en/class.arrayaccess.php
         */
        /* @{ */
-       /** Whether the option exists. */
+       /**
+        * Whether the option exists.
+        * @return bool
+        */
        public function offsetExists( $name ) {
                return isset( $this->options[$name] );
        }
 
-       /** Retrieve an option value. */
+       /**
+        * Retrieve an option value.
+        * @return mixed
+        */
        public function offsetGet( $name ) {
                return $this->getValue( $name );
        }
 
-       /** Set an option to given value. */
+       /**
+        * Set an option to given value.
+        */
        public function offsetSet( $name, $value ) {
                $this->setValue( $name, $value );
        }
 
-       /** Delete the option. */
+       /**
+        * Delete the option.
+        */
        public function offsetUnset( $name ) {
                $this->delete( $name );
        }
index e0bd5cd..6b092d9 100644 (file)
@@ -44,13 +44,13 @@ class GitInfo {
         * @param string $dir The root directory of the repo where the .git dir can be found
         */
        public function __construct( $dir ) {
-               $this->basedir = "{$dir}/.git";
+               $this->basedir = $dir . DIRECTORY_SEPARATOR . '.git';
                if ( is_readable( $this->basedir ) && !is_dir( $this->basedir ) ) {
                        $GITfile = file_get_contents( $this->basedir );
                        if ( strlen( $GITfile ) > 8 && substr( $GITfile, 0, 8 ) === 'gitdir: ' ) {
                                $path = rtrim( substr( $GITfile, 8 ), "\r\n" );
                                $isAbsolute = $path[0] === '/' || substr( $path, 1, 1 ) === ':';
-                               $this->basedir = $isAbsolute ? $path : "{$dir}/{$path}";
+                               $this->basedir = $isAbsolute ? $path : $dir . DIRECTORY_SEPARATOR . $path;
                        }
                }
        }
@@ -82,18 +82,18 @@ class GitInfo {
         * @return string The HEAD
         */
        public function getHead() {
-               $HEADfile = "{$this->basedir}/HEAD";
+               $headFile = "{$this->basedir}/HEAD";
 
-               if ( !is_readable( $HEADfile ) ) {
+               if ( !is_readable( $headFile ) ) {
                        return false;
                }
 
-               $HEAD = file_get_contents( $HEADfile );
+               $head = file_get_contents( $headFile );
 
-               if ( preg_match( "/ref: (.*)/", $HEAD, $m ) ) {
+               if ( preg_match( "/ref: (.*)/", $head, $m ) ) {
                        return rtrim( $m[1] );
                } else {
-                       return rtrim( $HEAD );
+                       return rtrim( $head );
                }
        }
 
@@ -102,20 +102,20 @@ class GitInfo {
         * @return string A SHA1 or false
         */
        public function getHeadSHA1() {
-               $HEAD = $this->getHead();
+               $head = $this->getHead();
 
                // If detached HEAD may be a SHA1
-               if ( self::isSHA1( $HEAD ) ) {
-                       return $HEAD;
+               if ( self::isSHA1( $head ) ) {
+                       return $head;
                }
 
                // If not a SHA1 it may be a ref:
-               $REFfile = "{$this->basedir}/{$HEAD}";
-               if ( !is_readable( $REFfile ) ) {
+               $refFile = "{$this->basedir}/{$head}";
+               if ( !is_readable( $refFile ) ) {
                        return false;
                }
 
-               $sha1 = rtrim( file_get_contents( $REFfile ) );
+               $sha1 = rtrim( file_get_contents( $refFile ) );
 
                return $sha1;
        }
@@ -150,11 +150,11 @@ class GitInfo {
         * @return string The branch name, HEAD, or false
         */
        public function getCurrentBranch() {
-               $HEAD = $this->getHead();
-               if ( $HEAD && preg_match( "#^refs/heads/(.*)$#", $HEAD, $m ) ) {
+               $head = $this->getHead();
+               if ( $head && preg_match( "#^refs/heads/(.*)$#", $head, $m ) ) {
                        return $m[1];
                } else {
-                       return $HEAD;
+                       return $head;
                }
        }
 
@@ -169,13 +169,15 @@ class GitInfo {
                        return false;
                }
 
+               wfSuppressWarnings();
                $configArray = parse_ini_file( $config, true );
+               wfRestoreWarnings();
                $remote = false;
 
                // Use the "origin" remote repo if available or any other repo if not.
                if ( isset( $configArray['remote origin'] ) ) {
                        $remote = $configArray['remote origin'];
-               } else {
+               } elseif ( is_array( $configArray ) ) {
                        foreach ( $configArray as $sectionName => $sectionConf ) {
                                if ( substr( $sectionName, 0, 6 ) == 'remote' ) {
                                        $remote = $sectionConf;
index 6785d0c..a6f936f 100644 (file)
@@ -1064,6 +1064,9 @@ function wfDebugLog( $logGroup, $text, $dest = 'all' ) {
        }
 
        $logConfig = $wgDebugLogGroups[$logGroup];
+       if ( $logConfig === false ) {
+               return;
+       }
        if ( is_array( $logConfig ) ) {
                if ( isset( $logConfig['sample'] ) && mt_rand( 1, $logConfig['sample'] ) !== 1 ) {
                        return;
index 9c50895..a3ed700 100644 (file)
@@ -78,7 +78,9 @@ class ConcatenatedGzipHistoryBlob implements HistoryBlob
        public $mMaxSize = 10000000;
        public $mMaxCount = 100;
 
-       /** Constructor */
+       /**
+        * Constructor
+        */
        public function __construct() {
                if ( !function_exists( 'gzdeflate' ) ) {
                        throw new MWException( "Need zlib support to read or write this kind of history object (ConcatenatedGzipHistoryBlob)\n" );
index 0eb6474..c4fc29a 100644 (file)
@@ -689,6 +689,7 @@ class Html {
                }
                return self::element( 'textarea', $attribs, $spacedValue );
        }
+
        /**
         * Build a drop-down box for selecting a namespace
         *
index e447e47..b18e257 100644 (file)
@@ -3,7 +3,7 @@
  * MediaWiki page data importer.
  *
  * Copyright © 2003,2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * 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
diff --git a/includes/MediaWikiVersionFetcher.php b/includes/MediaWikiVersionFetcher.php
new file mode 100644 (file)
index 0000000..1d59ec3
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * Provides access to MediaWiki's version without requiring MediaWiki (or anything else)
+ * being loaded first.
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class MediaWikiVersionFetcher {
+
+       /**
+        * Returns the MediaWiki version, in the format used by MediaWiki's wgVersion global.
+        *
+        * @return string
+        * @throws RuntimeException
+        */
+       public function fetchVersion() {
+               $defaultSettings = file_get_contents( __DIR__ . '/DefaultSettings.php' );
+
+               $matches = array();
+               preg_match( "/wgVersion = '([0-9a-zA-Z\.]+)';/", $defaultSettings, $matches );
+
+               if ( count( $matches ) !== 2 ) {
+                       throw new RuntimeException( 'Could not extract the MediaWiki version from DefaultSettings.php' );
+               }
+
+               return $matches[1];
+       }
+
+}
\ No newline at end of file
index dd22844..7c9b095 100644 (file)
  * @since 1.17
  */
 class Message {
+
        /**
         * In which language to get this message. True, which is the default,
         * means the current interface language, false content language.
+        *
+        * @var bool
         */
        protected $interface = true;
 
@@ -172,12 +175,12 @@ class Message {
        protected $language = null;
 
        /**
-        * The message key.
+        * @var string|string[] The message key or array of keys.
         */
        protected $key;
 
        /**
-        * List of parameters which will be substituted into the message.
+        * @var array List of parameters which will be substituted into the message.
         */
        protected $parameters = array();
 
@@ -189,21 +192,23 @@ class Message {
         * * block-parse
         * * parse (default)
         * * plain
+        *
+        * @var string
         */
        protected $format = 'parse';
 
        /**
-        * Whether database can be used.
+        * @var bool Whether database can be used.
         */
        protected $useDatabase = true;
 
        /**
-        * Title object to use as context
+        * @var Title Title object to use as context.
         */
        protected $title = null;
 
        /**
-        * Content object representing the message
+        * @var Content Content object representing the message.
         */
        protected $content = null;
 
@@ -213,11 +218,11 @@ class Message {
        protected $message;
 
        /**
-        * Constructor.
         * @since 1.17
-        * @param $key: message key, or array of message keys to try and use the first non-empty message for
-        * @param array $params message parameters
-        * @return Message: $this
+        *
+        * @param string|string[] $key Message key or array of message keys to try and use the first
+        * non-empty message for.
+        * @param array $params Message parameters.
         */
        public function __construct( $key, $params = array() ) {
                global $wgLang;
@@ -227,7 +232,7 @@ class Message {
        }
 
        /**
-        * Returns the message key
+        * Returns the message key or the first from an array of message keys.
         *
         * @since 1.21
         *
@@ -244,18 +249,18 @@ class Message {
        }
 
        /**
-        * Returns the message parameters
+        * Returns the message parameters.
         *
         * @since 1.21
         *
-        * @return string[]
+        * @return array
         */
        public function getParams() {
                return $this->parameters;
        }
 
        /**
-        * Returns the message format
+        * Returns the message format.
         *
         * @since 1.21
         *
@@ -269,10 +274,13 @@ class Message {
         * Factory function that is just wrapper for the real constructor. It is
         * intended to be used instead of the real constructor, because it allows
         * chaining method calls, while new objects don't.
+        *
         * @since 1.17
-        * @param string $key message key
-        * @param Varargs: parameters as Strings
-        * @return Message: $this
+        *
+        * @param string|string[] $key Message key or array of keys.
+        * @param mixed [$param,...] Parameters as strings.
+        *
+        * @return Message
         */
        public static function newFromKey( $key /*...*/ ) {
                $params = func_get_args();
@@ -284,9 +292,13 @@ class Message {
         * Factory function accepting multiple message keys and returning a message instance
         * for the first message which is non-empty. If all messages are empty then an
         * instance of the first message key is returned.
+        *
         * @since 1.18
-        * @param Varargs: message keys (or first arg as an array of all the message keys)
-        * @return Message: $this
+        *
+        * @param string|string[] [$keys,...] Message keys, or first argument as an array of all the
+        * message keys.
+        *
+        * @return Message
         */
        public static function newFallbackSequence( /*...*/ ) {
                $keys = func_get_args();
@@ -304,9 +316,13 @@ class Message {
 
        /**
         * Adds parameters to the parameter list of this message.
+        *
         * @since 1.17
-        * @param Varargs: parameters as Strings, or a single argument that is an array of Strings
-        * @return Message: $this
+        *
+        * @param mixed [$params,...] Parameters as strings, or a single argument that is
+        * an array of strings.
+        *
+        * @return Message $this
         */
        public function params( /*...*/ ) {
                $args = func_get_args();
@@ -323,9 +339,13 @@ class Message {
         * In other words the parsing process cannot access the contents
         * of this type of parameter, and you need to make sure it is
         * sanitized beforehand.  The parser will see "$n", instead.
+        *
         * @since 1.17
-        * @param Varargs: raw parameters as Strings (or single argument that is an array of raw parameters)
-        * @return Message: $this
+        *
+        * @param mixed [$params,...] Raw parameters as strings, or a single argument that is
+        * an array of raw parameters.
+        *
+        * @return Message $this
         */
        public function rawParams( /*...*/ ) {
                $params = func_get_args();
@@ -341,9 +361,13 @@ class Message {
        /**
         * Add parameters that are numeric and will be passed through
         * Language::formatNum before substitution
+        *
         * @since 1.18
-        * @param Varargs: numeric parameters (or single argument that is array of numeric parameters)
-        * @return Message: $this
+        *
+        * @param mixed [$param,...] Numeric parameters, or a single argument that is
+        * an array of numeric parameters.
+        *
+        * @return Message $this
         */
        public function numParams( /*...*/ ) {
                $params = func_get_args();
@@ -359,9 +383,13 @@ class Message {
        /**
         * Add parameters that are durations of time and will be passed through
         * Language::formatDuration before substitution
+        *
         * @since 1.22
-        * @param Varargs: numeric parameters (or single argument that is array of numeric parameters)
-        * @return Message: $this
+        *
+        * @param int|int[] [$param,...] Duration parameters, or a single argument that is
+        * an array of duration parameters.
+        *
+        * @return Message $this
         */
        public function durationParams( /*...*/ ) {
                $params = func_get_args();
@@ -377,9 +405,13 @@ class Message {
        /**
         * Add parameters that are expiration times and will be passed through
         * Language::formatExpiry before substitution
+        *
         * @since 1.22
-        * @param Varargs: numeric parameters (or single argument that is array of numeric parameters)
-        * @return Message: $this
+        *
+        * @param string|string[] [$param,...] Expiry parameters, or a single argument that is
+        * an array of expiry parameters.
+        *
+        * @return Message $this
         */
        public function expiryParams( /*...*/ ) {
                $params = func_get_args();
@@ -395,9 +427,13 @@ class Message {
        /**
         * Add parameters that are time periods and will be passed through
         * Language::formatTimePeriod before substitution
+        *
         * @since 1.22
-        * @param Varargs: numeric parameters (or single argument that is array of numeric parameters)
-        * @return Message: $this
+        *
+        * @param number|number[] [$param,...] Time period parameters, or a single argument that is
+        * an array of time period parameters.
+        *
+        * @return Message $this
         */
        public function timeperiodParams( /*...*/ ) {
                $params = func_get_args();
@@ -413,9 +449,13 @@ class Message {
        /**
         * Add parameters that are file sizes and will be passed through
         * Language::formatSize before substitution
+        *
         * @since 1.22
-        * @param Varargs: numeric parameters (or single argument that is array of numeric parameters)
-        * @return Message: $this
+        *
+        * @param int|int[] [$param,...] Size parameters, or a single argument that is
+        * an array of size parameters.
+        *
+        * @return Message $this
         */
        public function sizeParams( /*...*/ ) {
                $params = func_get_args();
@@ -431,9 +471,13 @@ class Message {
        /**
         * Add parameters that are bitrates and will be passed through
         * Language::formatBitrate before substitution
+        *
         * @since 1.22
-        * @param Varargs: numeric parameters (or single argument that is array of numeric parameters)
-        * @return Message: $this
+        *
+        * @param int|int[] [$param,...] Bit rate parameters, or a single argument that is
+        * an array of bit rate parameters.
+        *
+        * @return Message $this
         */
        public function bitrateParams( /*...*/ ) {
                $params = func_get_args();
@@ -448,9 +492,12 @@ class Message {
 
        /**
         * Set the language and the title from a context object
+        *
         * @since 1.19
+        *
         * @param $context IContextSource
-        * @return Message: $this
+        *
+        * @return Message $this
         */
        public function setContext( IContextSource $context ) {
                $this->inLanguage( $context->getLanguage() );
@@ -464,10 +511,13 @@ class Message {
         * Request the message in any language that is supported.
         * As a side effect interface message status is unconditionally
         * turned off.
+        *
         * @since 1.17
-        * @param $lang Mixed: language code or Language object.
+        *
+        * @param Language|string $lang Language code or Language object.
+        *
+        * @return Message $this
         * @throws MWException
-        * @return Message: $this
         */
        public function inLanguage( $lang ) {
                if ( $lang instanceof Language || $lang instanceof StubUserLang ) {
@@ -489,9 +539,11 @@ class Message {
        /**
         * Request the message in the wiki's content language,
         * unless it is disabled for this message.
+        *
         * @since 1.17
         * @see $wgForceUIMsgAsContentMsg
-        * @return Message: $this
+        *
+        * @return Message $this
         */
        public function inContentLanguage() {
                global $wgForceUIMsgAsContentMsg;
@@ -508,31 +560,40 @@ class Message {
        /**
         * Allows manipulating the interface message flag directly.
         * Can be used to restore the flag after setting a language.
-        * @param $value bool
-        * @return Message: $this
+        *
         * @since 1.20
+        *
+        * @param bool $interface
+        *
+        * @return Message $this
         */
-       public function setInterfaceMessageFlag( $value ) {
-               $this->interface = (bool)$value;
+       public function setInterfaceMessageFlag( $interface ) {
+               $this->interface = (bool)$interface;
                return $this;
        }
 
        /**
         * Enable or disable database use.
+        *
         * @since 1.17
-        * @param $value Boolean
-        * @return Message: $this
+        *
+        * @param bool $useDatabase
+        *
+        * @return Message $this
         */
-       public function useDatabase( $value ) {
-               $this->useDatabase = (bool)$value;
+       public function useDatabase( $useDatabase ) {
+               $this->useDatabase = (bool)$useDatabase;
                return $this;
        }
 
        /**
         * Set the Title object to use as context when transforming the message
+        *
         * @since 1.18
+        *
         * @param $title Title object
-        * @return Message: $this
+        *
+        * @return Message $this
         */
        public function title( $title ) {
                $this->title = $title;
@@ -541,6 +602,7 @@ class Message {
 
        /**
         * Returns the message as a Content object.
+        *
         * @return Content
         */
        public function content() {
@@ -553,8 +615,10 @@ class Message {
 
        /**
         * Returns the message parsed from wikitext to HTML.
+        *
         * @since 1.17
-        * @return String: HTML
+        *
+        * @return string HTML
         */
        public function toString() {
                $string = $this->fetchMessage();
@@ -605,8 +669,10 @@ class Message {
         * Magic method implementation of the above (for PHP >= 5.2.0), so we can do, eg:
         *     $foo = Message::get( $key );
         *     $string = "<abbr>$foo</abbr>";
+        *
         * @since 1.18
-        * @return String
+        *
+        * @return string
         */
        public function __toString() {
                // PHP doesn't allow __toString to throw exceptions and will
@@ -630,9 +696,11 @@ class Message {
        }
 
        /**
-        * Fully parse the text from wikitext to HTML
+        * Fully parse the text from wikitext to HTML.
+        *
         * @since 1.17
-        * @return String parsed HTML
+        *
+        * @return string Parsed HTML.
         */
        public function parse() {
                $this->format = 'parse';
@@ -641,8 +709,10 @@ class Message {
 
        /**
         * Returns the message text. {{-transformation is done.
+        *
         * @since 1.17
-        * @return String: Unescaped message text.
+        *
+        * @return string Unescaped message text.
         */
        public function text() {
                $this->format = 'text';
@@ -651,8 +721,10 @@ class Message {
 
        /**
         * Returns the message text as-is, only parameters are substituted.
+        *
         * @since 1.17
-        * @return String: Unescaped untransformed message text.
+        *
+        * @return string Unescaped untransformed message text.
         */
        public function plain() {
                $this->format = 'plain';
@@ -661,8 +733,10 @@ class Message {
 
        /**
         * Returns the parsed message text which is always surrounded by a block element.
+        *
         * @since 1.17
-        * @return String: HTML
+        *
+        * @return string HTML
         */
        public function parseAsBlock() {
                $this->format = 'block-parse';
@@ -672,8 +746,10 @@ class Message {
        /**
         * Returns the message text. {{-transformation is done and the result
         * is escaped excluding any raw parameters.
+        *
         * @since 1.17
-        * @return String: Escaped message text.
+        *
+        * @return string Escaped message text.
         */
        public function escaped() {
                $this->format = 'escaped';
@@ -682,8 +758,10 @@ class Message {
 
        /**
         * Check whether a message key has been defined currently.
+        *
         * @since 1.17
-        * @return Bool: true if it is and false if not.
+        *
+        * @return bool
         */
        public function exists() {
                return $this->fetchMessage() !== false;
@@ -691,9 +769,11 @@ class Message {
 
        /**
         * Check whether a message does not exist, or is an empty string
+        *
         * @since 1.18
-        * @return Bool: true if is is and false if not
         * @todo FIXME: Merge with isDisabled()?
+        *
+        * @return bool
         */
        public function isBlank() {
                $message = $this->fetchMessage();
@@ -701,9 +781,11 @@ class Message {
        }
 
        /**
-        * Check whether a message does not exist, is an empty string, or is "-"
+        * Check whether a message does not exist, is an empty string, or is "-".
+        *
         * @since 1.18
-        * @return Bool: true if it is and false if not
+        *
+        * @return bool
         */
        public function isDisabled() {
                $message = $this->fetchMessage();
@@ -712,72 +794,89 @@ class Message {
 
        /**
         * @since 1.17
-        * @param $value
-        * @return array
+        *
+        * @param mixed $raw
+        *
+        * @return array Array with a single "raw" key.
         */
-       public static function rawParam( $value ) {
-               return array( 'raw' => $value );
+       public static function rawParam( $raw ) {
+               return array( 'raw' => $raw );
        }
 
        /**
         * @since 1.18
-        * @param $value
-        * @return array
+        *
+        * @param mixed $num
+        *
+        * @return array Array with a single "num" key.
         */
-       public static function numParam( $value ) {
-               return array( 'num' => $value );
+       public static function numParam( $num ) {
+               return array( 'num' => $num );
        }
 
        /**
         * @since 1.22
-        * @param $value
-        * @return array
+        *
+        * @param int $duration
+        *
+        * @return int[] Array with a single "duration" key.
         */
-       public static function durationParam( $value ) {
-               return array( 'duration' => $value );
+       public static function durationParam( $duration ) {
+               return array( 'duration' => $duration );
        }
 
        /**
         * @since 1.22
-        * @param $value
-        * @return array
+        *
+        * @param string $expiry
+        *
+        * @return string[] Array with a single "expiry" key.
         */
-       public static function expiryParam( $value ) {
-               return array( 'expiry' => $value );
+       public static function expiryParam( $expiry ) {
+               return array( 'expiry' => $expiry );
        }
 
        /**
         * @since 1.22
-        * @param $value
-        * @return array
+        *
+        * @param number $period
+        *
+        * @return number[] Array with a single "period" key.
         */
-       public static function timeperiodParam( $value ) {
-               return array( 'period' => $value );
+       public static function timeperiodParam( $period ) {
+               return array( 'period' => $period );
        }
 
        /**
         * @since 1.22
-        * @param $value
-        * @return array
+        *
+        * @param int $size
+        *
+        * @return int[] Array with a single "size" key.
         */
-       public static function sizeParam( $value ) {
-               return array( 'size' => $value );
+       public static function sizeParam( $size ) {
+               return array( 'size' => $size );
        }
 
        /**
         * @since 1.22
-        * @param $value
-        * @return array
+        *
+        * @param int $bitrate
+        *
+        * @return int[] Array with a single "bitrate" key.
         */
-       public static function bitrateParam( $value ) {
-               return array( 'bitrate' => $value );
+       public static function bitrateParam( $bitrate ) {
+               return array( 'bitrate' => $bitrate );
        }
 
        /**
         * Substitutes any parameters into the message text.
+        *
         * @since 1.17
-        * @param string $message the message text
-        * @param string $type either before or after
+        *
+        * @param string $message The message text.
+        * @param string $type Either "before" or "after".
+        *
         * @return String
         */
        protected function replaceParameters( $message, $type = 'before' ) {
@@ -794,9 +893,12 @@ class Message {
 
        /**
         * Extracts the parameter type and preprocessed the value if needed.
+        *
         * @since 1.18
-        * @param string|array $param Parameter as defined in this class.
-        * @return Tuple(type, value)
+        *
+        * @param mixed $param Parameter as defined in this class.
+        *
+        * @return array Array with the parameter type (either "before" or "after") and the value.
         */
        protected function extractParam( $param ) {
                if ( is_array( $param ) ) {
@@ -837,9 +939,12 @@ class Message {
 
        /**
         * Wrapper for what ever method we use to parse wikitext.
+        *
         * @since 1.17
-        * @param string $string Wikitext message contents
-        * @return string Wikitext parsed into HTML
+        *
+        * @param string $string Wikitext message contents.
+        *
+        * @return string Wikitext parsed into HTML.
         */
        protected function parseText( $string ) {
                $out = MessageCache::singleton()->parse( $string, $this->title, /*linestart*/true, $this->interface, $this->language );
@@ -848,8 +953,11 @@ class Message {
 
        /**
         * Wrapper for what ever method we use to {{-transform wikitext.
+        *
         * @since 1.17
-        * @param string $string Wikitext message contents
+        *
+        * @param string $string Wikitext message contents.
+        *
         * @return string Wikitext with {{-constructs replaced with their values.
         */
        protected function transformText( $string ) {
@@ -857,10 +965,12 @@ class Message {
        }
 
        /**
-        * Wrapper for what ever method we use to get message contents
+        * Wrapper for what ever method we use to get message contents.
+        *
         * @since 1.17
-        * @throws MWException
+        *
         * @return string
+        * @throws MWException If message key array is empty.
         */
        protected function fetchMessage() {
                if ( !isset( $this->message ) ) {
@@ -899,13 +1009,15 @@ class Message {
  * @since 1.21
  */
 class RawMessage extends Message {
+
        /**
         * Call the parent constructor, then store the key as
         * the message.
         *
-        * @param string $key Message to use
-        * @param array $params Parameters for the message
         * @see Message::__construct
+        *
+        * @param string|string[] $key Message to use.
+        * @param array $params Parameters for the message.
         */
        public function __construct( $key, $params = array() ) {
                parent::__construct( $key, $params );
@@ -925,4 +1037,5 @@ class RawMessage extends Message {
                }
                return $this->message;
        }
+
 }
index f5c28ab..e3b8577 100644 (file)
@@ -508,8 +508,7 @@ class MimeMagic {
                                // trust the file extension
                                $mime = $this->guessTypesForExtension( $ext );
                        }
-               }
-               elseif ( $mime === 'application/x-opc+zip' ) {
+               } elseif ( $mime === 'application/x-opc+zip' ) {
                        if ( $this->isMatchingExtension( $ext, $mime ) ) {
                                // A known file extension for an OPC file,
                                // find the proper mime type for that file extension
index aff4b16..9cba0cc 100644 (file)
@@ -685,7 +685,7 @@ class OutputPage extends ContextSource {
                        return false;
                }
                if ( !$wgCachePages ) {
-                       wfDebug( __METHOD__ . ": CACHE DISABLED\n", 'log' );
+                       wfDebug( __METHOD__ . ": CACHE DISABLED\n" );
                        return false;
                }
 
@@ -1574,6 +1574,7 @@ class OutputPage extends ContextSource {
                $this->addModuleScripts( $parserOutput->getModuleScripts() );
                $this->addModuleStyles( $parserOutput->getModuleStyles() );
                $this->addModuleMessages( $parserOutput->getModuleMessages() );
+               $this->addJsConfigVars( $parserOutput->getJsConfigVars() );
 
                // Template versioning...
                foreach ( (array)$parserOutput->getTemplateIds() as $ns => $dbks ) {
@@ -2510,14 +2511,14 @@ $templates
                        // Our XML declaration is output by Html::htmlHeader.
                        // http://www.whatwg.org/html/semantics.html#attr-meta-http-equiv-content-type
                        // http://www.whatwg.org/html/semantics.html#charset
-                       $ret .= Html::element( 'meta', array( 'charset' => 'UTF-8' ) );
+                       $ret .= Html::element( 'meta', array( 'charset' => 'UTF-8' ) ) . "\n";
                }
 
                $ret .= Html::element( 'title', null, $this->getHTMLTitle() ) . "\n";
 
                // Avoid Internet Explorer "compatibility view", so that
                // jQuery can work correctly.
-               $ret .= Html::element( 'meta', array( 'http-equiv' => 'X-UA-Compatible', 'content' => 'IE=EDGE' ) );
+               $ret .= Html::element( 'meta', array( 'http-equiv' => 'X-UA-Compatible', 'content' => 'IE=EDGE' ) ) . "\n";
 
                $ret .= implode( "\n", array(
                        $this->getHeadLinks(),
@@ -2945,6 +2946,16 @@ $templates
                return $html;
        }
 
+       /**
+        * Get the javascript config vars to include on this page
+        *
+        * @return Array of javascript config vars
+        * @since 1.23
+        */
+       public function getJsConfigVars() {
+               return $this->mJsConfigVars;
+       }
+
        /**
         * Add one or more variables to be set in mw.config in JavaScript.
         *
@@ -3077,7 +3088,7 @@ $templates
                wfRunHooks( 'MakeGlobalVariablesScript', array( &$vars, $this ) );
 
                // Merge in variables from addJsConfigVars last
-               return array_merge( $vars, $this->mJsConfigVars );
+               return array_merge( $vars, $this->getJsConfigVars() );
        }
 
        /**
index e6d6ebf..60aa33c 100644 (file)
@@ -97,9 +97,9 @@ function wfPHPVersionError( $type ) {
                </p>
                <p>
                        If for some reason you are unable to upgrade your PHP version, you will need to
-                       <a href="http://www.mediawiki.org/wiki/Download">download</a> an older version
+                       <a href="https://www.mediawiki.org/wiki/Download">download</a> an older version
                        of MediaWiki from our website.  See our
-                       <a href="http://www.mediawiki.org/wiki/Compatibility#PHP">compatibility page</a>
+                       <a href="https://www.mediawiki.org/wiki/Compatibility#PHP">compatibility page</a>
                        for details of which versions are compatible with prior versions of PHP.
                </p>
                </div>
index 6a10e88..747d2c1 100644 (file)
@@ -249,6 +249,7 @@ abstract class IndexPager extends ContextSource implements Pager {
        function setOffset( $offset ) {
                $this->mOffset = $offset;
        }
+
        /**
         * Set the limit from an other source than the request
         *
index 435e09e..d367e4d 100644 (file)
@@ -27,7 +27,7 @@
  *
  * $router->add( "/wiki/$1" );
  *   - Matches /wiki/Foo style urls and extracts the title
- * $router->add( array( 'edit' => "/edit/$1" ), array( 'action' => '$key' ) );
+ * $router->add( array( 'edit' => "/edit/$key" ), array( 'action' => '$key' ) );
  *   - Matches /edit/Foo style urls and sets action=edit
  * $router->add( '/$2/$1',
  *   array( 'variant' => '$2' ),
index 2dac938..85c4c79 100644 (file)
@@ -91,6 +91,13 @@ abstract class PoolCounter {
                return new $class( $conf, $type, $key );
        }
 
+       /**
+        * @return string
+        */
+       public function getKey() {
+               return $this->key;
+       }
+
        /**
         * I want to do this task and I need to do it myself.
         *
@@ -175,7 +182,7 @@ abstract class PoolCounterWork {
         * Do something with the error, like showing it to the user.
         * @return bool
         */
-       function error( $status ) {
+       public function error( $status ) {
                return false;
        }
 
@@ -185,8 +192,11 @@ abstract class PoolCounterWork {
         * @param $status Status
         * @return void
         */
-       function logError( $status ) {
-               wfDebugLog( 'poolcounter', $status->getWikiText() );
+       public function logError( $status ) {
+               $key = $this->poolCounter->getKey();
+
+               wfDebugLog( 'poolcounter', "Pool key '$key': "
+                       . $status->getMessage()->inLanguage( 'en' )->useDatabase( false )->text() );
        }
 
        /**
@@ -313,14 +323,14 @@ class PoolCounterWorkViaCallback extends PoolCounterWork {
                return false;
        }
 
-       function fallback() {
+       public function fallback() {
                if ( $this->fallback ) {
                        return call_user_func_array( $this->fallback, array() );
                }
                return false;
        }
 
-       function error( $status ) {
+       public function error( $status ) {
                if ( $this->error ) {
                        return call_user_func_array( $this->error, array( $status ) );
                }
index ba1aae8..2d1529d 100644 (file)
@@ -193,7 +193,7 @@ class Preferences {
         */
        static function profilePreferences( $user, IContextSource $context, &$defaultPreferences ) {
                global $wgAuth, $wgContLang, $wgParser, $wgCookieExpiration, $wgLanguageCode,
-                       $wgDisableTitleConversion, $wgDisableLangConversion, $wgMaxSigChars,
+                       $wgDisableLangConversion, $wgMaxSigChars,
                        $wgEnableEmail, $wgEmailConfirmToEdit, $wgEnableUserEmail, $wgEmailAuthentication,
                        $wgEnotifWatchlist, $wgEnotifUserTalk, $wgEnotifRevealEditorAddress,
                        $wgSecureLogin;
@@ -381,14 +381,6 @@ class Preferences {
                                                'section' => 'personal/i18n',
                                                'help-message' => 'prefs-help-variant',
                                        );
-
-                                       if ( !$wgDisableTitleConversion ) {
-                                               $defaultPreferences['noconvertlink'] = array(
-                                                       'type' => 'toggle',
-                                                       'section' => 'personal/i18n',
-                                                       'label-message' => 'tog-noconvertlink',
-                                               );
-                                       }
                                } else {
                                        $defaultPreferences["variant-$langCode"] = array(
                                                'type' => 'api',
@@ -1030,15 +1022,7 @@ class Preferences {
         * @param $defaultPreferences Array
         */
        static function searchPreferences( $user, IContextSource $context, &$defaultPreferences ) {
-               global $wgContLang, $wgVectorUseSimpleSearch;
-
-               if ( $wgVectorUseSimpleSearch ) {
-                       $defaultPreferences['vector-simplesearch'] = array(
-                               'type' => 'toggle',
-                               'label-message' => 'vector-simplesearch-preference',
-                               'section' => 'searchoptions/displaysearchoptions',
-                       );
-               }
+               global $wgContLang;
 
                $defaultPreferences['searcheverything'] = array(
                        'type' => 'toggle',
@@ -1404,10 +1388,9 @@ class Preferences {
         *
         * @param $formData
         * @param $form PreferencesForm
-        * @param $entryPoint string
         * @return bool|Status|string
         */
-       static function tryFormSubmit( $formData, $form, $entryPoint = 'internal' ) {
+       static function tryFormSubmit( $formData, $form ) {
                global $wgHiddenPrefs, $wgAuth;
 
                $user = $form->getModifiedUser();
@@ -1427,7 +1410,7 @@ class Preferences {
 
                // Fortunately, the realname field is MUCH simpler
                // (not really "private", but still shouldn't be edited without permission)
-               if ( !in_array( 'realname', $wgHiddenPrefs ) && $user->isAllowed( 'editmyprivateinfo' ) ) {
+               if ( !in_array( 'realname', $wgHiddenPrefs ) && $user->isAllowed( 'editmyprivateinfo' ) && array_key_exists( 'realname', $formData ) ) {
                        $realName = $formData['realname'];
                        $user->setRealName( $realName );
                }
@@ -1468,7 +1451,7 @@ class Preferences {
         * @return Status
         */
        public static function tryUISubmit( $formData, $form ) {
-               $res = self::tryFormSubmit( $formData, $form, 'ui' );
+               $res = self::tryFormSubmit( $formData, $form );
 
                if ( $res ) {
                        $urlOptions = array( 'success' => 1 );
index d6cc8a3..bcb88e9 100644 (file)
@@ -3,7 +3,7 @@
  * Page protection
  *
  * Copyright © 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index bb6a0c3..b808408 100644 (file)
  * @ingroup SpecialPage
  */
 
-/**
- * List of query page classes and their associated special pages,
- * for periodic updates.
- *
- * DO NOT CHANGE THIS LIST without testing that
- * maintenance/updateSpecialPages.php still works.
- */
-global $wgQueryPages; // not redundant
-$wgQueryPages = array(
-//         QueryPage subclass, Special page name, Limit (false for none, none for the default)
-// ----------------------------------------------------------------------------
-       array( 'AncientPagesPage', 'Ancientpages' ),
-       array( 'BrokenRedirectsPage', 'BrokenRedirects' ),
-       array( 'DeadendPagesPage', 'Deadendpages' ),
-       array( 'DoubleRedirectsPage', 'DoubleRedirects' ),
-       array( 'FileDuplicateSearchPage', 'FileDuplicateSearch' ),
-       array( 'LinkSearchPage', 'LinkSearch' ),
-       array( 'ListredirectsPage', 'Listredirects' ),
-       array( 'LonelyPagesPage', 'Lonelypages' ),
-       array( 'LongPagesPage', 'Longpages' ),
-       array( 'MIMEsearchPage', 'MIMEsearch' ),
-       array( 'MostcategoriesPage', 'Mostcategories' ),
-       array( 'MostimagesPage', 'Mostimages' ),
-       array( 'MostinterwikisPage', 'Mostinterwikis' ),
-       array( 'MostlinkedCategoriesPage', 'Mostlinkedcategories' ),
-       array( 'MostlinkedtemplatesPage', 'Mostlinkedtemplates' ),
-       array( 'MostlinkedPage', 'Mostlinked' ),
-       array( 'MostrevisionsPage', 'Mostrevisions' ),
-       array( 'FewestrevisionsPage', 'Fewestrevisions' ),
-       array( 'ShortPagesPage', 'Shortpages' ),
-       array( 'UncategorizedCategoriesPage', 'Uncategorizedcategories' ),
-       array( 'UncategorizedPagesPage', 'Uncategorizedpages' ),
-       array( 'UncategorizedImagesPage', 'Uncategorizedimages' ),
-       array( 'UncategorizedTemplatesPage', 'Uncategorizedtemplates' ),
-       array( 'UnusedCategoriesPage', 'Unusedcategories' ),
-       array( 'UnusedimagesPage', 'Unusedimages' ),
-       array( 'WantedCategoriesPage', 'Wantedcategories' ),
-       array( 'WantedFilesPage', 'Wantedfiles' ),
-       array( 'WantedPagesPage', 'Wantedpages' ),
-       array( 'WantedTemplatesPage', 'Wantedtemplates' ),
-       array( 'UnwatchedPagesPage', 'Unwatchedpages' ),
-       array( 'UnusedtemplatesPage', 'Unusedtemplates' ),
-       array( 'WithoutInterwikiPage', 'Withoutinterwiki' ),
-);
-wfRunHooks( 'wgQueryPages', array( &$wgQueryPages ) );
-
-global $wgDisableCounters;
-if ( !$wgDisableCounters ) {
-       $wgQueryPages[] = array( 'PopularPagesPage', 'Popularpages' );
-}
-
 /**
  * This is a class for doing query pages; since they're almost all the same,
  * we factor out some of the functionality into a superclass, and let
@@ -108,6 +57,64 @@ abstract class QueryPage extends SpecialPage {
         */
        protected $shownavigation = true;
 
+       /**
+        * Get a list of query page classes and their associated special pages,
+        * for periodic updates.
+        *
+        * DO NOT CHANGE THIS LIST without testing that
+        * maintenance/updateSpecialPages.php still works.
+        * @return array
+        */
+       public static function getPages() {
+               global $wgDisableCounters;
+               static $qp = null;
+
+               if ( $qp === null ) {
+                       // QueryPage subclass, Special page name
+                       $qp = array(
+                               array( 'AncientPagesPage', 'Ancientpages' ),
+                               array( 'BrokenRedirectsPage', 'BrokenRedirects' ),
+                               array( 'DeadendPagesPage', 'Deadendpages' ),
+                               array( 'DoubleRedirectsPage', 'DoubleRedirects' ),
+                               array( 'FileDuplicateSearchPage', 'FileDuplicateSearch' ),
+                               array( 'LinkSearchPage', 'LinkSearch' ),
+                               array( 'ListredirectsPage', 'Listredirects' ),
+                               array( 'LonelyPagesPage', 'Lonelypages' ),
+                               array( 'LongPagesPage', 'Longpages' ),
+                               array( 'MIMEsearchPage', 'MIMEsearch' ),
+                               array( 'MostcategoriesPage', 'Mostcategories' ),
+                               array( 'MostimagesPage', 'Mostimages' ),
+                               array( 'MostinterwikisPage', 'Mostinterwikis' ),
+                               array( 'MostlinkedCategoriesPage', 'Mostlinkedcategories' ),
+                               array( 'MostlinkedtemplatesPage', 'Mostlinkedtemplates' ),
+                               array( 'MostlinkedPage', 'Mostlinked' ),
+                               array( 'MostrevisionsPage', 'Mostrevisions' ),
+                               array( 'FewestrevisionsPage', 'Fewestrevisions' ),
+                               array( 'ShortPagesPage', 'Shortpages' ),
+                               array( 'UncategorizedCategoriesPage', 'Uncategorizedcategories' ),
+                               array( 'UncategorizedPagesPage', 'Uncategorizedpages' ),
+                               array( 'UncategorizedImagesPage', 'Uncategorizedimages' ),
+                               array( 'UncategorizedTemplatesPage', 'Uncategorizedtemplates' ),
+                               array( 'UnusedCategoriesPage', 'Unusedcategories' ),
+                               array( 'UnusedimagesPage', 'Unusedimages' ),
+                               array( 'WantedCategoriesPage', 'Wantedcategories' ),
+                               array( 'WantedFilesPage', 'Wantedfiles' ),
+                               array( 'WantedPagesPage', 'Wantedpages' ),
+                               array( 'WantedTemplatesPage', 'Wantedtemplates' ),
+                               array( 'UnwatchedPagesPage', 'Unwatchedpages' ),
+                               array( 'UnusedtemplatesPage', 'Unusedtemplates' ),
+                               array( 'WithoutInterwikiPage', 'Withoutinterwiki' ),
+                       );
+                       wfRunHooks( 'wgQueryPages', array( &$qp ) );
+
+                       if ( !$wgDisableCounters ) {
+                               $qp[] = array( 'PopularPagesPage', 'Popularpages' );
+                       }
+               }
+
+               return $qp;
+       }
+
        /**
         * A mutator for $this->listoutput;
         *
index 0de8cda..245714d 100644 (file)
@@ -3,7 +3,7 @@
  * HTML sanitizer for %MediaWiki.
  *
  * Copyright © 2002-2005 Brion Vibber <brion@pobox.com> et al
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * 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
@@ -631,8 +631,7 @@ class Sanitizer {
                                # Remove the comment, leading and trailing
                                # spaces, and leave only one newline.
                                $text = substr_replace( $text, "\n", $spaceStart, $spaceLen + 1 );
-                       }
-                       else {
+                       } else {
                                # Remove just the comment.
                                $text = substr_replace( $text, '', $start, $end - $start );
                        }
@@ -1303,6 +1302,7 @@ class Sanitizer {
                        array( 'Sanitizer', 'normalizeCharReferencesCallback' ),
                        $text );
        }
+
        /**
         * @param string $matches
         * @return string
@@ -1839,7 +1839,7 @@ class Sanitizer {
                $rfc5322_atext = "a-z0-9!#$%&'*+\\-\/=?^_`{|}~";
                $rfc1034_ldh_str = "a-z0-9\\-";
 
-               $HTML5_email_regexp = "/
+               $html5_email_regexp = "/
                ^                      # start of string
                [$rfc5322_atext\\.]+    # user part which is liberal :p
                @                      # 'apostrophe'
@@ -1848,6 +1848,6 @@ class Sanitizer {
                $                      # End of string
                /ix"; // case Insensitive, eXtended
 
-               return (bool)preg_match( $HTML5_email_regexp, $addr );
+               return (bool)preg_match( $html5_email_regexp, $addr );
        }
 }
index 531d1a4..777ca37 100644 (file)
@@ -265,6 +265,10 @@ if ( $wgSkipSkin ) {
        $wgSkipSkins[] = $wgSkipSkin;
 }
 
+if ( $wgLocalInterwiki ) {
+       array_unshift( $wgLocalInterwikis, $wgLocalInterwiki );
+}
+
 # Set default shared prefix
 if ( $wgSharedPrefix === false ) {
        $wgSharedPrefix = $wgDBprefix;
@@ -341,11 +345,6 @@ if ( !$wgEnotifMinorEdits ) {
        $wgHiddenPrefs[] = 'enotifminoredits';
 }
 
-# $wgDisabledActions is deprecated as of 1.18
-foreach ( $wgDisabledActions as $action ) {
-       $wgActions[$action] = false;
-}
-
 # We always output HTML5 since 1.22, overriding these is no longer supported
 # we set them here for extensions that depend on its value.
 $wgHtml5 = true;
@@ -457,6 +456,11 @@ if ( !$wgHTCPRouting && $wgHTCPMulticastAddress ) {
        );
 }
 
+// Back compatibility for $wgRateLimitLog deprecated with 1.23
+if ( $wgRateLimitLog && ! array_key_exists( 'ratelimit', $wgDebugLogGroups ) ) {
+       $wgDebugLogGroups['ratelimit'] = $wgRateLimitLog;
+}
+
 wfProfileOut( $fname . '-defaults2' );
 wfProfileIn( $fname . '-misc1' );
 
@@ -508,9 +512,9 @@ $messageMemc = wfGetMessageCacheStorage();
 $parserMemc = wfGetParserCacheStorage();
 $wgLangConvMemc = wfGetLangConverterCacheStorage();
 
-wfDebug( 'CACHES: ' . get_class( $wgMemc ) . '[main] ' .
+wfDebugLog( 'caches', get_class( $wgMemc ) . '[main] ' .
        get_class( $messageMemc ) . '[message] ' .
-       get_class( $parserMemc ) . "[parser]\n" );
+       get_class( $parserMemc ) . '[parser]' );
 
 wfProfileOut( $fname . '-memcached' );
 
@@ -560,7 +564,7 @@ $wgOut = RequestContext::getMain()->getOutput(); # BackCompat
 $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], array( $wgParserConf ) );
 
 if ( !is_object( $wgAuth ) ) {
-       $wgAuth = new StubObject( 'wgAuth', 'AuthPlugin' );
+       $wgAuth = new AuthPlugin;
        wfRunHooks( 'AuthPluginSetup', array( &$wgAuth ) );
 }
 
index 0df6d90..7169b2e 100644 (file)
@@ -221,6 +221,8 @@ class SiteStats {
        /**
         * Is the provided row of site stats sane, or should it be regenerated?
         *
+        * Checks only fields which are filled by SiteStatsInit::refresh.
+        *
         * @param $row
         *
         * @return bool
@@ -229,7 +231,6 @@ class SiteStats {
                if ( $row === false
                        || $row->ss_total_pages < $row->ss_good_articles
                        || $row->ss_total_edits < $row->ss_total_pages
-                       || $row->ss_users < $row->ss_active_users
                ) {
                        return false;
                }
@@ -240,7 +241,6 @@ class SiteStats {
                        'ss_good_articles',
                        'ss_total_pages',
                        'ss_users',
-                       'ss_active_users',
                        'ss_images',
                ) as $member ) {
                        if ( $row->$member > 2000000000 || $row->$member < 0 ) {
@@ -360,7 +360,6 @@ class SiteStatsInit {
         * - Boolean: whether to use the master DB
         * - DatabaseBase: database connection to use
         * @param array $options of options, may contain the following values
-        * - update Boolean: whether to update the current stats (true) or write fresh (false) (default: false)
         * - views Boolean: when true, do not update the number of page views (default: true)
         * - activeUsers Boolean: whether to update the number of active users (default: false)
         */
@@ -381,12 +380,7 @@ class SiteStatsInit {
                        $counter->views();
                }
 
-               // Update/refresh
-               if ( $options['update'] ) {
-                       $counter->update();
-               } else {
-                       $counter->refresh();
-               }
+               $counter->refresh();
 
                // Count active users if need be
                if ( $options['activeUsers'] ) {
@@ -395,39 +389,21 @@ class SiteStatsInit {
        }
 
        /**
-        * Update the current row with the selected values
-        */
-       public function update() {
-               list( $values, $conds ) = $this->getDbParams();
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->update( 'site_stats', $values, $conds, __METHOD__ );
-       }
-
-       /**
-        * Refresh site_stats. Erase the current record and save all
-        * the new values.
+        * Refresh site_stats.
         */
-       public function refresh() {
-               list( $values, $conds, $views ) = $this->getDbParams();
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete( 'site_stats', $conds, __METHOD__ );
-               $dbw->insert( 'site_stats', array_merge( $values, $conds, $views ), __METHOD__ );
-       }
-
-       /**
-        * Return three arrays of params for the db queries
-        * @return Array
-        */
-       private function getDbParams() {
+       protected function refresh() {
                $values = array(
+                       'ss_row_id' => 1,
                        'ss_total_edits' => $this->mEdits,
                        'ss_good_articles' => $this->mArticles,
                        'ss_total_pages' => $this->mPages,
                        'ss_users' => $this->mUsers,
-                       'ss_images' => $this->mFiles
+                       'ss_images' => $this->mFiles,
+               ) + (
+                       $this->mViews ? array( 'ss_total_views' => $this->mViews ) : array()
                );
-               $conds = array( 'ss_row_id' => 1 );
-               $views = array( 'ss_total_views' => $this->mViews );
-               return array( $values, $conds, $views );
+
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->upsert( 'site_stats', $values, array( 'ss_row_id' ), $values, __METHOD__ );
        }
 }
index 6722cca..9312a0d 100644 (file)
@@ -182,7 +182,9 @@ abstract class Skin extends ContextSource {
                return $skin;
        }
 
-       /** @return string skin name */
+       /**
+        * @return string skin name
+        */
        public function getSkinName() {
                return $this->skinname;
        }
@@ -1247,6 +1249,7 @@ abstract class Skin extends ContextSource {
                wfProfileOut( __METHOD__ );
                return $bar;
        }
+
        /**
         * Add content from a sidebar system message
         * Currently only used for MediaWiki:Sidebar (but may be used by Extensions)
index 35183ce..32f0ed3 100644 (file)
@@ -104,7 +104,11 @@ class SkinTemplate extends Skin {
         * @param $out OutputPage
         */
        function setupSkinUserCss( OutputPage $out ) {
-               $out->addModuleStyles( array( 'mediawiki.legacy.shared', 'mediawiki.legacy.commonPrint' ) );
+               $out->addModuleStyles( array(
+                       'mediawiki.legacy.shared',
+                       'mediawiki.legacy.commonPrint',
+                       'mediawiki.ui.button'
+               ) );
        }
 
        /**
@@ -175,7 +179,7 @@ class SkinTemplate extends Skin {
                                }
 
                                $ilInterwikiCodeBCP47 = wfBCP47( $ilInterwikiCode );
-                               $languageLinks[] = array(
+                               $languageLink = array(
                                        'href' => $languageLinkTitle->getFullURL(),
                                        'text' => $ilLangName,
                                        'title' => $ilTitle,
@@ -183,6 +187,8 @@ class SkinTemplate extends Skin {
                                        'lang' => $ilInterwikiCodeBCP47,
                                        'hreflang' => $ilInterwikiCodeBCP47,
                                );
+                               wfRunHooks( 'SkinTemplateGetLanguageLink', array( &$languageLink, $languageLinkTitle, $this->getTitle() ) );
+                               $languageLinks[] = $languageLink;
                        }
                }
 
@@ -396,6 +402,8 @@ class SkinTemplate extends Skin {
                // that interface elements are in a different language.
                $tpl->set( 'userlangattributes', '' );
                $tpl->set( 'specialpageattributes', '' ); # obsolete
+               // Used by VectorBeta to insert HTML before content but after the heading for the page title. Defaults to empty string.
+               $tpl->set( 'prebodyhtml', '' );
 
                if ( $userLangCode !== $wgContLang->getHtmlCode() || $userLangDir !== $wgContLang->getDir() ) {
                        $escUserlang = htmlspecialchars( $userLangCode );
@@ -707,7 +715,7 @@ class SkinTemplate extends Skin {
                                'active' => $active
                        );
                        $personal_urls['logout'] = array(
-                               'text' => $this->msg( 'userlogout' )->text(),
+                               'text' => $this->msg( 'pt-userlogout' )->text(),
                                'href' => self::makeSpecialUrl( 'Userlogout',
                                        // userlogout link must always contain an & character, otherwise we might not be able
                                        // to detect a buggy precaching proxy (bug 17790)
@@ -719,7 +727,7 @@ class SkinTemplate extends Skin {
                        $useCombinedLoginLink = $this->useCombinedLoginLink();
                        $loginlink = $this->getUser()->isAllowed( 'createaccount' ) && $useCombinedLoginLink
                                ? 'nav-login-createaccount'
-                               : 'login';
+                               : 'pt-login';
                        $is_signup = $request->getText( 'type' ) == 'signup';
 
                        $login_url = array(
@@ -728,7 +736,7 @@ class SkinTemplate extends Skin {
                                'active' => $title->isSpecial( 'Userlogin' ) && ( $loginlink == 'nav-login-createaccount' || !$is_signup ),
                        );
                        $createaccount_url = array(
-                               'text' => $this->msg( 'createaccount' )->text(),
+                               'text' => $this->msg( 'pt-createaccount' )->text(),
                                'href' => self::makeSpecialUrl( 'Userlogin', "$returnto&type=signup" ),
                                'active' => $title->isSpecial( 'Userlogin' ) && $is_signup,
                        );
@@ -1594,7 +1602,7 @@ abstract class BaseTemplate extends QuickTemplate {
                        if ( isset( $plink['active'] ) ) {
                                $ptool['active'] = $plink['active'];
                        }
-                       foreach ( array( 'href', 'class', 'text' ) as $k ) {
+                       foreach ( array( 'href', 'class', 'text', 'dir' ) as $k ) {
                                if ( isset( $plink[$k] ) ) {
                                        $ptool['links'][0][$k] = $plink[$k];
                                }
@@ -1732,6 +1740,19 @@ abstract class BaseTemplate extends QuickTemplate {
                return $boxes;
        }
 
+       /**
+        * @param string $name
+        */
+       protected function renderAfterPortlet( $name ) {
+               $content = '';
+               wfRunHooks( 'BaseTemplateAfterPortlet', array( $this, $name, &$content ) );
+
+               if ( $content !== '' ) {
+                       echo "<div class='after-portlet after-portlet-$name'>$content</div>";
+               }
+
+       }
+
        /**
         * Makes a link, usually used by makeListItem to generate a link for an item
         * in a list used in navigation lists, portlets, portals, sidebars, etc...
@@ -1838,7 +1859,7 @@ abstract class BaseTemplate extends QuickTemplate {
         *
         * @param $key string, usually a key from the list you are generating this link from.
         * @param $item array, of list item data containing some of a specific set of keys.
-        * The "id" and "class" keys will be used as attributes for the list item,
+        * The "id", "class" and "itemtitle" keys will be used as attributes for the list item,
         * if "active" contains a value of true a "active" class will also be appended to class.
         *
         * @param $options array
@@ -1855,7 +1876,8 @@ abstract class BaseTemplate extends QuickTemplate {
         * list item directly so they will not be passed to makeLink
         * (however the link will still support a tooltip and accesskey from it)
         * If you need an id or class on a single link you should include a "links"
-        * array with just one link item inside of it.
+        * array with just one link item inside of it. If you want to add a title
+        * to the list item itself, you can set "itemtitle" to the value.
         * $options is also passed on to makeLink calls
         *
         * @return string
@@ -1869,7 +1891,7 @@ abstract class BaseTemplate extends QuickTemplate {
                } else {
                        $link = $item;
                        // These keys are used by makeListItem and shouldn't be passed on to the link
-                       foreach ( array( 'id', 'class', 'active', 'tag' ) as $k ) {
+                       foreach ( array( 'id', 'class', 'active', 'tag', 'itemtitle' ) as $k ) {
                                unset( $link[$k] );
                        }
                        if ( isset( $item['id'] ) && !isset( $item['single-id'] ) ) {
@@ -1894,6 +1916,9 @@ abstract class BaseTemplate extends QuickTemplate {
                        $attrs['class'] .= ' active';
                        $attrs['class'] = trim( $attrs['class'] );
                }
+               if ( isset( $item['itemtitle'] ) ) {
+                       $attrs['title'] = $item['itemtitle'];
+               }
                return Html::rawElement( isset( $options['tag'] ) ? $options['tag'] : 'li', $attrs, $html );
        }
 
index e11ba03..795fd45 100644 (file)
@@ -224,9 +224,11 @@ class Status {
        /**
         * Get the error list as a Message object
         *
-        * @param string $shortContext a short enclosing context message name, to
-        *        be used when there is a single error
-        * @param string $longContext a long enclosing context message name, for a list
+        * @param string|string[] $shortContext A short enclosing context message name (or an array of
+        * message names), to be used when there is a single error.
+        * @param string|string[] $longContext A long enclosing context message name (or an array of
+        * message names), for a list.
+        *
         * @return Message
         */
        public function getMessage( $shortContext = false, $longContext = false ) {
@@ -256,13 +258,13 @@ class Status {
                                $msgCount++;
                        }
 
-                       $wrapper = new RawMessage( '* $' . implode( "\n* \$", range( 1, $msgCount ) ) );
-                       $s = $wrapper->params( $msgs )->parse();
+                       $s = new RawMessage( '* $' . implode( "\n* \$", range( 1, $msgCount ) ) );
+                       $s->params( $msgs )->parse();
 
                        if ( $longContext ) {
-                               $s = wfMessage( $longContext, $wrapper );
+                               $s = wfMessage( $longContext, $s );
                        } elseif ( $shortContext ) {
-                               $wrapper = new RawMessage( "\n\$1\n", $wrapper );
+                               $wrapper = new RawMessage( "\n\$1\n", $s );
                                $wrapper->parse();
                                $s = wfMessage( $shortContext, $wrapper );
                        }
index 64e6566..c85a006 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Representation a title within %MediaWiki.
+ * Representation of a title within %MediaWiki.
  *
  * See title.txt
  *
@@ -1500,9 +1500,7 @@ class Title {
         * Get a real URL referring to this title, with interwiki link and
         * fragment
         *
-        * See getLocalURL for the arguments.
-        *
-        * @see self::getLocalURL
+        * @see self::getLocalURL for the arguments.
         * @see wfExpandUrl
         * @param $query
         * @param $query2 bool
@@ -1528,8 +1526,12 @@ class Title {
        }
 
        /**
-        * Get a URL with no fragment or server name.  If this page is generated
-        * with action=render, $wgServer is prepended.
+        * Get a URL with no fragment or server name (relative URL) from a Title object.
+        * If this page is generated with action=render, however,
+        * $wgServer is prepended to make an absolute URL.
+        *
+        * @see self::getFullURL to always get an absolute URL.
+        * @see self::newFromText to produce a Title object.
         *
         * @param string|array $query an optional query string,
         *   not used for interwiki links. Can be specified as an associative array as well,
@@ -1542,7 +1544,7 @@ class Title {
         *   The second parameter is deprecated since 1.19. Pass it as a key,value
         *   pair in the first parameter array instead.
         *
-        * @return String the URL
+        * @return String of the URL.
         */
        public function getLocalURL( $query = '', $query2 = false ) {
                global $wgArticlePath, $wgScript, $wgServer, $wgRequest;
@@ -1630,12 +1632,10 @@ class Title {
         * The result obviously should not be URL-escaped, but does need to be
         * HTML-escaped if it's being output in HTML.
         *
-        * See getLocalURL for the arguments.
-        *
         * @param $query
         * @param $query2 bool
         * @param $proto Protocol to use; setting this will cause a full URL to be used
-        * @see self::getLocalURL
+        * @see self::getLocalURL for the arguments.
         * @return String the URL
         */
        public function getLinkURL( $query = '', $query2 = false, $proto = PROTO_RELATIVE ) {
@@ -1655,9 +1655,7 @@ class Title {
         * Get an HTML-escaped version of the URL form, suitable for
         * using in a link, without a server name or fragment
         *
-        * See getLocalURL for the arguments.
-        *
-        * @see self::getLocalURL
+        * @see self::getLocalURL for the arguments.
         * @param $query string
         * @param $query2 bool|string
         * @return String the URL
@@ -1672,9 +1670,7 @@ class Title {
         * Get an HTML-escaped version of the URL form, suitable for
         * using in a link, including the server name and fragment
         *
-        * See getLocalURL for the arguments.
-        *
-        * @see self::getLocalURL
+        * @see self::getLocalURL for the arguments.
         * @return String the URL
         * @deprecated since 1.19
         */
@@ -1692,9 +1688,7 @@ class Title {
         * if $wgInternalServer is not set. If the server variable used is
         * protocol-relative, the URL will be expanded to http://
         *
-        * See getLocalURL for the arguments.
-        *
-        * @see self::getLocalURL
+        * @see self::getLocalURL for the arguments.
         * @return String the URL
         */
        public function getInternalURL( $query = '', $query2 = false ) {
@@ -1713,9 +1707,7 @@ class Title {
         *
         * NOTE: Unlike getInternalURL(), the canonical URL includes the fragment
         *
-        * See getLocalURL for the arguments.
-        *
-        * @see self::getLocalURL
+        * @see self::getLocalURL for the arguments.
         * @return string The URL
         * @since 1.18
         */
@@ -1729,9 +1721,7 @@ class Title {
        /**
         * HTML-escaped version of getCanonicalURL()
         *
-        * See getLocalURL for the arguments.
-        *
-        * @see self::getLocalURL
+        * @see self::getLocalURL for the arguments.
         * @since 1.18
         * @return string
         * @deprecated since 1.19
@@ -1780,7 +1770,6 @@ class Title {
         *
         * @deprecated in 1.19; use userCan(), quickUserCan() or getUserPermissionsErrors() instead
         * @return Bool
-        * @todo fold these checks into userCan()
         */
        public function userCanRead() {
                wfDeprecated( __METHOD__, '1.19' );
@@ -3211,7 +3200,7 @@ class Title {
         * @return Bool true on success
         */
        private function secureAndSplit() {
-               global $wgContLang, $wgLocalInterwiki;
+               global $wgContLang, $wgLocalInterwikis;
 
                # Initialisation
                $this->mInterwiki = '';
@@ -3284,17 +3273,17 @@ class Title {
                                        $this->mInterwiki = $wgContLang->lc( $p );
 
                                        # Redundant interwiki prefix to the local wiki
-                                       if ( $wgLocalInterwiki !== false
-                                               && 0 == strcasecmp( $this->mInterwiki, $wgLocalInterwiki )
-                                       ) {
-                                               if ( $dbkey == '' ) {
-                                                       # Can't have an empty self-link
-                                                       return false;
+                                       foreach ( $wgLocalInterwikis as $localIW ) {
+                                               if ( 0 == strcasecmp( $this->mInterwiki, $localIW ) ) {
+                                                       if ( $dbkey == '' ) {
+                                                               # Can't have an empty self-link
+                                                               return false;
+                                                       }
+                                                       $this->mInterwiki = '';
+                                                       $firstPass = false;
+                                                       # Do another namespace split...
+                                                       continue 2;
                                                }
-                                               $this->mInterwiki = '';
-                                               $firstPass = false;
-                                               # Do another namespace split...
-                                               continue;
                                        }
 
                                        # If there's an initial colon after the interwiki, that also
@@ -3877,7 +3866,20 @@ class Title {
                                $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
                        }
                        // @todo FIXME: $params?
-                       $log->addEntry( 'move_prot', $nt, $comment, array( $this->getPrefixedText() ), $wgUser );
+                       $logId = $log->addEntry( 'move_prot', $nt, $comment, array( $this->getPrefixedText() ), $wgUser );
+
+                       // reread inserted pr_ids for log relation
+                       $insertedPrIds = $dbw->select(
+                               'page_restrictions',
+                               'pr_id',
+                               array( 'pr_page' => $redirid ),
+                               __METHOD__
+                       );
+                       $logRelationsValues = array();
+                       foreach ( $insertedPrIds as $prid ) {
+                               $logRelationsValues[] = $prid->pr_id;
+                       }
+                       $log->addRelations( 'pr_id', $logRelationsValues, $logId );
                }
 
                # Update watchlists
@@ -3892,7 +3894,7 @@ class Title {
 
                $dbw->commit( __METHOD__ );
 
-               wfRunHooks( 'TitleMoveComplete', array( &$this, &$nt, &$wgUser, $pageid, $redirid ) );
+               wfRunHooks( 'TitleMoveComplete', array( &$this, &$nt, &$wgUser, $pageid, $redirid, $reason ) );
                return true;
        }
 
index d863a06..dd8717f 100644 (file)
@@ -30,7 +30,7 @@ define( 'USER_TOKEN_LENGTH', 32 );
  * Int Serialized record version.
  * @ingroup Constants
  */
-define( 'MW_USER_VERSION', 8 );
+define( 'MW_USER_VERSION', 9 );
 
 /**
  * String Some punctuation to prevent editing from broken text-mangling proxies.
@@ -90,6 +90,7 @@ class User {
                'mEmailAuthenticated',
                'mEmailToken',
                'mEmailTokenExpires',
+               'mPasswordExpires',
                'mRegistration',
                'mEditCount',
                // user_groups table
@@ -185,6 +186,8 @@ class User {
                $mEmail, $mTouched, $mToken, $mEmailAuthenticated,
                $mEmailToken, $mEmailTokenExpires, $mRegistration, $mEditCount,
                $mGroups, $mOptionOverrides;
+
+       protected $mPasswordExpires;
        //@}
 
        /**
@@ -254,14 +257,14 @@ class User {
         * @see newFromSession()
         * @see newFromRow()
         */
-       function __construct() {
+       public function __construct() {
                $this->clearInstanceCache( 'defaults' );
        }
 
        /**
         * @return string
         */
-       function __toString() {
+       public function __toString() {
                return $this->getName();
        }
 
@@ -694,6 +697,7 @@ class User {
                return $this->getPasswordValidity( $password ) === true;
        }
 
+
        /**
         * Given unvalidated password input, return error message on failure.
         *
@@ -701,6 +705,33 @@ class User {
         * @return mixed: true on success, string or array of error message on failure
         */
        public function getPasswordValidity( $password ) {
+               $result = $this->checkPasswordValidity( $password );
+               if ( $result->isGood() ) {
+                       return true;
+               } else {
+                       $messages = array();
+                       foreach ( $result->getErrorsByType( 'error' ) as $error ) {
+                               $messages[] = $error['message'];
+                       }
+                       foreach ( $result->getErrorsByType( 'warning' ) as $warning ) {
+                               $messages[] = $warning['message'];
+                       }
+                       if ( count( $messages ) === 1 ) {
+                               return $messages[0];
+                       }
+                       return $messages;
+               }
+       }
+
+       /**
+        * Check if this is a valid password for this user. Status will be good if
+        * the password is valid, or have an array of error messages if not.
+        *
+        * @param string $password Desired password
+        * @return Status
+        * @since 1.23
+        */
+       public function checkPasswordValidity( $password ) {
                global $wgMinimalPasswordLength, $wgContLang;
 
                static $blockedLogins = array(
@@ -708,31 +739,105 @@ class User {
                        'Apitestsysop' => 'testpass', 'Apitestuser' => 'testpass' # r75605
                );
 
+               $status = Status::newGood();
+
                $result = false; //init $result to false for the internal checks
 
                if ( !wfRunHooks( 'isValidPassword', array( $password, &$result, $this ) ) ) {
-                       return $result;
+                       $status->error( $result );
+                       return $status;
                }
 
                if ( $result === false ) {
                        if ( strlen( $password ) < $wgMinimalPasswordLength ) {
-                               return 'passwordtooshort';
+                               $status->error( 'passwordtooshort', $wgMinimalPasswordLength );
+                               return $status;
                        } elseif ( $wgContLang->lc( $password ) == $wgContLang->lc( $this->mName ) ) {
-                               return 'password-name-match';
+                               $status->error( 'password-name-match' );
+                               return $status;
                        } elseif ( isset( $blockedLogins[$this->getName()] ) && $password == $blockedLogins[$this->getName()] ) {
-                               return 'password-login-forbidden';
+                               $status->error( 'password-login-forbidden' );
+                               return $status;
                        } else {
-                               //it seems weird returning true here, but this is because of the
+                               //it seems weird returning a Good status here, but this is because of the
                                //initialization of $result to false above. If the hook is never run or it
                                //doesn't modify $result, then we will likely get down into this if with
                                //a valid password.
-                               return true;
+                               return $status;
                        }
                } elseif ( $result === true ) {
-                       return true;
+                       return $status;
                } else {
-                       return $result; //the isValidPassword hook set a string $result and returned true
+                       $status->error( $result );
+                       return $status; //the isValidPassword hook set a string $result and returned true
+               }
+       }
+
+       /**
+        * Expire a user's password
+        * @since 1.23
+        * @param $ts Mixed: optional timestamp to convert, default 0 for the current time
+        */
+       public function expirePassword( $ts = 0 ) {
+               $this->load();
+               $timestamp = wfTimestamp( TS_MW, $ts );
+               $this->mPasswordExpires = $timestamp;
+               $this->saveSettings();
+       }
+
+       /**
+        * Clear the password expiration for a user
+        * @since 1.23
+        * @param bool $load ensure user object is loaded first
+        */
+       public function resetPasswordExpiration( $load = true ) {
+               global $wgPasswordExpirationDays;
+               if ( $load ) {
+                       $this->load();
+               }
+               $newExpire = null;
+               if ( $wgPasswordExpirationDays ) {
+                       $newExpire = wfTimestamp(
+                               TS_MW,
+                               time() + ( $wgPasswordExpirationDays * 24 * 3600 )
+                       );
                }
+               // Give extensions a chance to force an expiration
+               wfRunHooks( 'ResetPasswordExpiration', array( $this, &$newExpire ) );
+               $this->mPasswordExpires = $newExpire;
+       }
+
+       /**
+        * Check if the user's password is expired.
+        * TODO: Put this and password length into a PasswordPolicy object
+        * @since 1.23
+        * @return string|bool The expiration type, or false if not expired
+        *      hard: A password change is required to login
+        *      soft: Allow login, but encourage password change
+        *      false: Password is not expired
+        */
+       public function getPasswordExpired() {
+               global $wgPasswordExpireGrace;
+               $expired = false;
+               $now = wfTimestamp();
+               $expiration = $this->getPasswordExpireDate();
+               $expUnix = wfTimestamp( TS_UNIX, $expiration );
+               if ( $expiration !== null && $expUnix < $now ) {
+                       $expired = ( $expUnix + $wgPasswordExpireGrace < $now ) ? 'hard' : 'soft';
+               }
+               return $expired;
+       }
+
+       /**
+        * Get this user's password expiration date. Since this may be using
+        * the cached User object, we assume that whatever mechanism is setting
+        * the expiration date is also expiring the User cache.
+        * @since 1.23
+        * @return string|false the datestamp of the expiration, or null if not set
+        */
+       public function getPasswordExpireDate() {
+               $this->load();
+               return $this->mPasswordExpires;
        }
 
        /**
@@ -890,6 +995,8 @@ class User {
                $this->mEmailAuthenticated = null;
                $this->mEmailToken = '';
                $this->mEmailTokenExpires = null;
+               $this->mPasswordExpires = null;
+               $this->resetPasswordExpiration( false );
                $this->mRegistration = wfTimestamp( TS_MW );
                $this->mGroups = array();
 
@@ -984,7 +1091,8 @@ class User {
                        # Get the token from DB/cache and clean it up to remove garbage padding.
                        # This deals with historical problems with bugs and the default column value.
                        $token = rtrim( $proposedUser->getToken( false ) ); // correct token
-                       $passwordCorrect = ( strlen( $token ) && $token === $request->getCookie( 'Token' ) );
+                       // Make comparison in constant time (bug 61346)
+                       $passwordCorrect = strlen( $token ) && $this->compareSecrets( $token, $request->getCookie( 'Token' ) );
                        $from = 'cookie';
                } else {
                        // No session or persistent login cookie
@@ -1003,6 +1111,25 @@ class User {
                }
        }
 
+       /**
+        * A comparison of two strings, not vulnerable to timing attacks
+        * @param string $answer the secret string that you are comparing against.
+        * @param string $test compare this string to the $answer.
+        * @return bool True if the strings are the same, false otherwise
+        */
+       protected function compareSecrets( $answer, $test ) {
+               if ( strlen( $answer ) !== strlen( $test ) ) {
+                       $passwordCorrect = false;
+               } else {
+                       $result = 0;
+                       for ( $i = 0; $i < strlen( $answer ); $i++ ) {
+                               $result |= ord( $answer[$i] ) ^ ord( $test[$i] );
+                       }
+                       $passwordCorrect = ( $result == 0 );
+               }
+               return $passwordCorrect;
+       }
+
        /**
         * Load user and user_group data from the database.
         * $this->mId must be set, this is how the user is identified.
@@ -1097,6 +1224,7 @@ class User {
                        $this->mEmailAuthenticated = wfTimestampOrNull( TS_MW, $row->user_email_authenticated );
                        $this->mEmailToken = $row->user_email_token;
                        $this->mEmailTokenExpires = wfTimestampOrNull( TS_MW, $row->user_email_token_expires );
+                       $this->mPasswordExpires = wfTimestampOrNull( TS_MW, $row->user_password_expires );
                        $this->mRegistration = wfTimestampOrNull( TS_MW, $row->user_registration );
                } else {
                        $all = false;
@@ -1509,7 +1637,7 @@ class User {
                        return false;
                }
 
-               global $wgMemc, $wgRateLimitLog;
+               global $wgMemc;
                wfProfileIn( __METHOD__ );
 
                $limits = $wgRateLimits[$action];
@@ -1572,12 +1700,7 @@ class User {
                        // Already pinged?
                        if ( $count ) {
                                if ( $count >= $max ) {
-                                       wfDebug( __METHOD__ . ": tripped! $key at $count $summary\n" );
-                                       if ( $wgRateLimitLog ) {
-                                               wfSuppressWarnings();
-                                               file_put_contents( $wgRateLimitLog, wfTimestamp( TS_MW ) . ' ' . wfWikiID() . ': ' . $this->getName() . " tripped $key at $count $summary\n", FILE_APPEND );
-                                               wfRestoreWarnings();
-                                       }
+                                       wfDebugLog( 'ratelimit', $this->getName() . " tripped! $key at $count $summary");
                                        $triggered = true;
                                } else {
                                        wfDebug( __METHOD__ . ": ok. $key at $count $summary\n" );
@@ -1625,7 +1748,7 @@ class User {
         * @param bool $bFromSlave whether to check the slave database instead of the master
         * @return bool
         */
-       function isBlockedFrom( $title, $bFromSlave = false ) {
+       public function isBlockedFrom( $title, $bFromSlave = false ) {
                global $wgBlockAllowsUTEdit;
                wfProfileIn( __METHOD__ );
 
@@ -3324,6 +3447,7 @@ class User {
                                'user_token' => strval( $this->mToken ),
                                'user_email_token' => $this->mEmailToken,
                                'user_email_token_expires' => $dbw->timestampOrNull( $this->mEmailTokenExpires ),
+                               'user_password_expires' => $dbw->timestampOrNull( $this->mPasswordExpires ),
                        ), array( /* WHERE */
                                'user_id' => $this->mId
                        ), __METHOD__
@@ -3557,7 +3681,7 @@ class User {
         * Get whether the user is allowed to create an account.
         * @return bool
         */
-       function isAllowedToCreateAccount() {
+       public function isAllowedToCreateAccount() {
                return $this->isAllowed( 'createaccount' ) && !$this->isBlockedFromCreateAccount();
        }
 
@@ -3598,14 +3722,9 @@ class User {
                global $wgAuth, $wgLegacyEncoding;
                $this->load();
 
-               // Even though we stop people from creating passwords that
-               // are shorter than this, doesn't mean people wont be able
-               // to. Certain authentication plugins do NOT want to save
+               // Certain authentication plugins do NOT want to save
                // domain passwords in a mysql database, so we should
                // check this (in case $wgAuth->strict() is false).
-               if ( !$this->isValidPassword( $password ) ) {
-                       return false;
-               }
 
                if ( $wgAuth->authenticate( $this->getName(), $password ) ) {
                        return true;
@@ -3885,7 +4004,7 @@ class User {
         * @note Call saveSettings() after calling this function to commit the change.
         * @return bool Returns true
         */
-       function invalidateEmail() {
+       public function invalidateEmail() {
                $this->load();
                $this->mEmailToken = null;
                $this->mEmailTokenExpires = null;
@@ -3898,7 +4017,7 @@ class User {
         * Set the e-mail authentication timestamp.
         * @param string $timestamp TS_MW timestamp
         */
-       function setEmailAuthenticationTimestamp( $timestamp ) {
+       public function setEmailAuthenticationTimestamp( $timestamp ) {
                $this->load();
                $this->mEmailAuthenticated = $timestamp;
                wfRunHooks( 'UserSetEmailAuthenticationTimestamp', array( $this, &$this->mEmailAuthenticated ) );
@@ -4647,28 +4766,35 @@ class User {
                        // Don't bother storing default values
                        $defaultOption = self::getDefaultOption( $key );
                        if ( ( is_null( $defaultOption ) &&
-                                       !( $value === false || is_null( $value ) ) ) ||
-                                       $value != $defaultOption ) {
+                               !( $value === false || is_null( $value ) ) ) ||
+                               $value != $defaultOption
+                       ) {
                                $insert_rows[] = array(
-                                               'up_user' => $userId,
-                                               'up_property' => $key,
-                                               'up_value' => $value,
-                                       );
+                                       'up_user' => $userId,
+                                       'up_property' => $key,
+                                       'up_value' => $value,
+                               );
                        }
                }
 
                $dbw = wfGetDB( DB_MASTER );
-               $hasRows = $dbw->selectField( 'user_properties', '1',
-                       array( 'up_user' => $userId ), __METHOD__ );
-
-               if ( $hasRows ) {
-                       // Only do this delete if there is something there. A very large portion of
+               // Find and delete any prior preference rows...
+               $res = $dbw->select( 'user_properties',
+                       array( 'up_property' ), array( 'up_user' => $userId ), __METHOD__ );
+               $priorKeys = array();
+               foreach ( $res as $row ) {
+                       $priorKeys[] = $row->up_property;
+               }
+               if ( count( $priorKeys ) ) {
+                       // Do the DELETE by PRIMARY KEY for prior rows. A very large portion of
                        // calls to this function are for setting 'rememberpassword' for new accounts.
-                       // Doing this delete for new accounts with no rows in the table rougly causes
-                       // gap locks on [max user ID,+infinity) which causes high contention since many
-                       // updates will pile up on each other since they are for higher (newer) user IDs.
-                       $dbw->delete( 'user_properties', array( 'up_user' => $userId ), __METHOD__ );
+                       // Doing a blanket per-user DELETE for new accounts with no rows in the table
+                       // causes gap locks on [max user ID,+infinity) which causes high contention since
+                       // updates will pile up on each other as they are for higher (newer) user IDs.
+                       $dbw->delete( 'user_properties',
+                               array( 'up_user' => $userId, 'up_property' => $priorKeys ), __METHOD__ );
                }
+               // Insert the new preference rows
                $dbw->insert( 'user_properties', $insert_rows, __METHOD__, array( 'IGNORE' ) );
        }
 
@@ -4749,6 +4875,7 @@ class User {
                        'user_email_authenticated',
                        'user_email_token',
                        'user_email_token_expires',
+                       'user_password_expires',
                        'user_registration',
                        'user_editcount',
                );
index e1d00d3..de4457d 100644 (file)
@@ -262,8 +262,7 @@ class UserMailer {
                                wfDebug( "PEAR Mail_Mime package is not installed. Falling back to text email.\n" );
                                // remove the html body for text email fall back
                                $body = $body['text'];
-                       }
-                       else {
+                       } else {
                                require_once 'Mail/mime.php';
                                if ( wfIsWindows() ) {
                                        $body['text'] = str_replace( "\n", "\r\n", $body['text'] );
@@ -276,7 +275,7 @@ class UserMailer {
                                $headers = $mime->headers( $headers );
                        }
                }
-               if ( !isset( $mime ) ) {
+               if ( $mime === null ) {
                        // sending text only, either deliberately or as a fallback
                        if ( wfIsWindows() ) {
                                $body = str_replace( "\n", "\r\n", $body );
@@ -649,7 +648,9 @@ class EmailNotification {
                                                && $watchingUser->isEmailConfirmed()
                                                && $watchingUser->getID() != $userTalkId
                                        ) {
-                                               $this->compose( $watchingUser );
+                                               if ( wfRunHooks( 'SendWatchlistEmailNotification', array( $watchingUser, $title, $this ) ) ) {
+                                                       $this->compose( $watchingUser );
+                                               }
                                        }
                                }
                        }
index fe97843..a6e7516 100644 (file)
@@ -70,16 +70,26 @@ class WatchedItem {
                return $this->mTitle;
        }
 
-       /** Helper to retrieve the title namespace */
+       /**
+        * Helper to retrieve the title namespace
+        * @return int
+        */
        protected function getTitleNs() {
                return $this->getTitle()->getNamespace();
        }
 
-       /** Helper to retrieve the title DBkey */
+       /**
+        * Helper to retrieve the title DBkey
+        * @return string
+        */
        protected function getTitleDBkey() {
                return $this->getTitle()->getDBkey();
        }
-       /** Helper to retrieve the user id */
+
+       /**
+        * Helper to retrieve the user id
+        * @return int
+        */
        protected function getUserId() {
                return $this->mUser->getId();
        }
index a52894d..01366f4 100644 (file)
@@ -3,7 +3,7 @@
  * Deal with importing all those nasty globals and things
  *
  * Copyright © 2003 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * 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
@@ -795,12 +795,11 @@ class WebRequest {
         * defaults if not given. The limit must be positive and is capped at 5000.
         * Offset must be positive but is not capped.
         *
-        * @param int $deflimit limit to use if no input and the user hasn't set the option.
+        * @param $deflimit Integer: limit to use if no input and the user hasn't set the option.
         * @param string $optionname to specify an option other than rclimit to pull from.
-        * @param int $hardlimit the maximum upper limit to allow, usually 5000
         * @return array first element is limit, second is offset
         */
-       public function getLimitOffset( $deflimit = 50, $optionname = 'rclimit', $hardlimit = 5000 ) {
+       public function getLimitOffset( $deflimit = 50, $optionname = 'rclimit' ) {
                global $wgUser;
 
                $limit = $this->getInt( 'limit', 0 );
@@ -813,8 +812,8 @@ class WebRequest {
                if ( $limit <= 0 ) {
                        $limit = $deflimit;
                }
-               if ( $limit > $hardlimit ) {
-                       $limit = $hardlimit; # We have *some* limits...
+               if ( $limit > 5000 ) {
+                       $limit = 5000; # We have *some* limits...
                }
 
                $offset = $this->getInt( 'offset', 0 );
index 58c953a..eb79134 100644 (file)
@@ -126,8 +126,8 @@ if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
 
        # LocalSettings.php is the per site customization file. If it does not exist
        # the wiki installer needs to be launched or the generated file uploaded to
-       # the root wiki directory
-       if ( !file_exists( MW_CONFIG_FILE ) ) {
+       # the root wiki directory. Give a hint, if it is not readable by the server.
+       if ( !is_readable( MW_CONFIG_FILE ) ) {
                require_once "$IP/includes/templates/NoLocalSettings.php";
                die();
        }
index 56d23b1..4bf8fd3 100644 (file)
@@ -448,6 +448,7 @@ class MediaWiki {
                        if ( function_exists( 'fastcgi_finish_request' ) ) {
                                fastcgi_finish_request();
                        }
+                       $this->triggerJobs();
                        $this->restInPeace();
                } catch ( Exception $e ) {
                        MWExceptionHandler::handle( $e );
@@ -583,8 +584,12 @@ class MediaWiki {
                        wfProfileOut( 'main-try-filecache' );
                }
 
+               // Actually do the work of the request and build up any output
                $this->performRequest();
 
+               // Either all DB and deferred updates should happen or none.
+               // The later should not be cancelled due to client disconnect.
+               ignore_user_abort( true );
                // Now commit any transactions, so that unreported errors after
                // output() don't roll back the whole DB transaction
                wfGetLBFactory()->commitMasterChanges();
@@ -602,9 +607,6 @@ class MediaWiki {
                // Do any deferred jobs
                DeferredUpdates::doUpdates( 'commit' );
 
-               // Execute a job from the queue
-               $this->doJobs();
-
                // Log profiling data, e.g. in the database or UDP
                wfLogProfilingData();
 
@@ -617,15 +619,21 @@ class MediaWiki {
        }
 
        /**
-        * Do a job from the job queue
+        * Potentially open a socket and sent an HTTP request back to the server
+        * to run a specified number of jobs. This registers a callback to cleanup
+        * the socket once it's done.
         */
-       private function doJobs() {
-               global $wgJobRunRate, $wgPhpCli, $IP;
+       protected function triggerJobs() {
+               global $wgJobRunRate, $wgServer;
 
                if ( $wgJobRunRate <= 0 || wfReadOnly() ) {
                        return;
+               } elseif ( $this->getTitle()->isSpecial( 'RunJobs' ) ) {
+                       return; // recursion guard
                }
 
+               $section = new ProfileSection( __METHOD__ );
+
                if ( $wgJobRunRate < 1 ) {
                        $max = mt_getrandmax();
                        if ( mt_rand( 0, $max ) > $max * $wgJobRunRate ) {
@@ -636,50 +644,45 @@ class MediaWiki {
                        $n = intval( $wgJobRunRate );
                }
 
-               if ( !wfShellExecDisabled() && is_executable( $wgPhpCli ) ) {
-                       // Start a background process to run some of the jobs
-                       wfProfileIn( __METHOD__ . '-exec' );
-                       $retVal = 1;
-                       $cmd = wfShellWikiCmd( "$IP/maintenance/runJobs.php", array( '--maxjobs', $n ) );
-                       $cmd .= " >" . wfGetNull() . " 2>&1"; // don't hang PHP on pipes
-                       if ( wfIsWindows() ) {
-                               // Using START makes this async and also works around a bug where using
-                               // wfShellExec() with a quoted script name causes a filename syntax error.
-                               $cmd = "START /B \"bg\" $cmd";
-                       } else {
-                               $cmd = "$cmd &";
-                       }
-                       wfShellExec( $cmd, $retVal );
-                       wfProfileOut( __METHOD__ . '-exec' );
+               $query = array( 'title' => 'Special:RunJobs',
+                       'tasks' => 'jobs', 'maxjobs' => $n, 'sigexpiry' => time() + 5 );
+               $query['signature'] = SpecialRunJobs::getQuerySignature( $query );
+
+               $errno = $errstr = null;
+               $info = wfParseUrl( $wgServer );
+               wfSuppressWarnings();
+               $sock = fsockopen(
+                       $info['host'],
+                       isset( $info['port'] ) ? $info['port'] : 80,
+                       $errno,
+                       $errstr
+               );
+               wfRestoreWarnings();
+               if ( !$sock ) {
+                       wfDebugLog( 'runJobs', "Failed to start cron API (socket error $errno): $errstr\n" );
+                       // Fall back to running the job here while the user waits
+                       SpecialRunJobs::executeJobs( $n );
+                       return;
+               }
+
+               $url = wfAppendQuery( wfScript( 'index' ), $query );
+               $req = "POST $url HTTP/1.1\r\nHost: {$info['host']}\r\nConnection: Close\r\n\r\n";
+
+               wfDebugLog( 'runJobs', "Running $n job(s) via '$url'\n" );
+               // Send a cron API request to be performed in the background.
+               // Give up if this takes too long to send (which should be rare).
+               stream_set_timeout( $sock, 1 );
+               $bytes = fwrite( $sock, $req );
+               if ( $bytes !== strlen( $req ) ) {
+                       wfDebugLog( 'runJobs', "Failed to start cron API (socket write error)\n" );
                } else {
-                       try {
-                               // Fallback to running the jobs here while the user waits
-                               $group = JobQueueGroup::singleton();
-                               do {
-                                       $job = $group->pop( JobQueueGroup::USE_CACHE ); // job from any queue
-                                       if ( $job ) {
-                                               $output = $job->toString() . "\n";
-                                               $t = - microtime( true );
-                                               wfProfileIn( __METHOD__ . '-' . get_class( $job ) );
-                                               $success = $job->run();
-                                               wfProfileOut( __METHOD__ . '-' . get_class( $job ) );
-                                               $group->ack( $job ); // done
-                                               $t += microtime( true );
-                                               $t = round( $t * 1000 );
-                                               if ( $success === false ) {
-                                                       $output .= "Error: " . $job->getLastError() . ", Time: $t ms\n";
-                                               } else {
-                                                       $output .= "Success, Time: $t ms\n";
-                                               }
-                                               wfDebugLog( 'jobqueue', $output );
-                                       }
-                               } while ( --$n && $job );
-                       } catch ( MWException $e ) {
-                               // We don't want exceptions thrown during job execution to
-                               // be reported to the user since the output is already sent.
-                               // Instead we just log them.
-                               MWExceptionHandler::logException( $e );
+                       // Do not wait for the response (the script should handle client aborts).
+                       // Make sure that we don't close before that script reaches ignore_user_abort().
+                       $status = fgets( $sock );
+                       if ( !preg_match( '#^HTTP/\d\.\d 202 #', $status ) ) {
+                               wfDebugLog( 'runJobs', "Failed to start cron API: received '$status'\n" );
                        }
                }
+               fclose( $sock );
        }
 }
index da4416d..4739753 100644 (file)
@@ -127,7 +127,7 @@ class WikiMap {
 class WikiReference {
        private $mMinor; ///< 'en', 'meta', 'mediawiki', etc
        private $mMajor; ///< 'wiki', 'wiktionary', etc
-       private $mCanonicalServer; ///< canonical server URL, e.g. 'http://www.mediawiki.org'
+       private $mCanonicalServer; ///< canonical server URL, e.g. 'https://www.mediawiki.org'
        private $mServer; ///< server URL, may be protocol-relative, e.g. '//www.mediawiki.org'
        private $mPath;   ///< path, '/wiki/$1'
 
index a191983..b4aa303 100644 (file)
@@ -142,6 +142,11 @@ class WikiPage implements Page, IDBAccessObject {
         * @return WikiPage|null
         */
        public static function newFromID( $id, $from = 'fromdb' ) {
+               // page id's are never 0 or negative, see bug 61166
+               if ( $id < 1 ) {
+                       return null;
+               }
+
                $from = self::convertSelectType( $from );
                $db = wfGetDB( $from === self::READ_LATEST ? DB_MASTER : DB_SLAVE );
                $row = $db->selectRow( 'page', self::selectFields(), array( 'page_id' => $id ), __METHOD__ );
@@ -1168,7 +1173,7 @@ class WikiPage implements Page, IDBAccessObject {
        }
 
        /**
-        * Do standard deferred updates after page view
+        * Do standard deferred updates after page view (existing or missing page)
         * @param User $user The relevant user
         * @param int $oldid The revision id being viewed. If not given or 0, latest revision is assumed.
         */
@@ -1563,7 +1568,7 @@ class WikiPage implements Page, IDBAccessObject {
         * @param $flags Int
         * @return Int updated $flags
         */
-       function checkFlags( $flags ) {
+       public function checkFlags( $flags ) {
                if ( !( $flags & EDIT_NEW ) && !( $flags & EDIT_UPDATE ) ) {
                        if ( $this->exists() ) {
                                $flags |= EDIT_UPDATE;
@@ -2350,6 +2355,9 @@ class WikiPage implements Page, IDBAccessObject {
                // Truncate for whole multibyte characters
                $reason = $wgContLang->truncate( $reason, 255 );
 
+               $logRelationsValues = array();
+               $logRelationsField = null;
+
                if ( $id ) { // Protection of existing page
                        if ( !wfRunHooks( 'ArticleProtect', array( &$this, &$user, $limit, $reason ) ) ) {
                                return Status::newGood();
@@ -2384,11 +2392,24 @@ class WikiPage implements Page, IDBAccessObject {
                                return Status::newFatal( 'no-null-revision', $this->mTitle->getPrefixedText() );
                        }
 
+                       $logRelationsField = 'pr_id';
+
                        // Update restrictions table
                        foreach ( $limit as $action => $restrictions ) {
+                               $dbw->delete(
+                                       'page_restrictions',
+                                       array(
+                                               'pr_page' => $id,
+                                               'pr_type' => $action
+                                       ),
+                                       __METHOD__
+                               );
                                if ( $restrictions != '' ) {
-                                       $dbw->replace( 'page_restrictions', array( array( 'pr_page', 'pr_type' ) ),
-                                               array( 'pr_page' => $id,
+                                       $dbw->insert(
+                                               'page_restrictions',
+                                               array(
+                                                       'pr_id' => $dbw->nextSequenceValue( 'page_restrictions_pr_id_seq' ),
+                                                       'pr_page' => $id,
                                                        'pr_type' => $action,
                                                        'pr_level' => $restrictions,
                                                        'pr_cascade' => ( $cascade && $action == 'edit' ) ? 1 : 0,
@@ -2396,9 +2417,7 @@ class WikiPage implements Page, IDBAccessObject {
                                                ),
                                                __METHOD__
                                        );
-                               } else {
-                                       $dbw->delete( 'page_restrictions', array( 'pr_page' => $id,
-                                               'pr_type' => $action ), __METHOD__ );
+                                       $logRelationsValues[] = $dbw->insertId();
                                }
                        }
 
@@ -2451,7 +2470,10 @@ class WikiPage implements Page, IDBAccessObject {
 
                // Update the protection log
                $log = new LogPage( 'protect' );
-               $log->addEntry( $logAction, $this->mTitle, $reason, $params, $user );
+               $logId = $log->addEntry( $logAction, $this->mTitle, $reason, $params, $user );
+               if ( $logRelationsField !== null && count( $logRelationsValues ) ) {
+                       $log->addRelations( $logRelationsField, $logRelationsValues, $logId );
+               }
 
                return Status::newGood();
        }
@@ -2923,6 +2945,29 @@ class WikiPage implements Page, IDBAccessObject {
                        return array( array( 'notvisiblerev' ) );
                }
 
+               // Set patrolling and bot flag on the edits, which gets rollbacked.
+               // This is done before the rollback edit to have patrolling also on failure (bug 62157).
+               $set = array();
+               if ( $bot && $guser->isAllowed( 'markbotedits' ) ) {
+                       // Mark all reverted edits as bot
+                       $set['rc_bot'] = 1;
+               }
+
+               if ( $wgUseRCPatrol ) {
+                       // Mark all reverted edits as patrolled
+                       $set['rc_patrolled'] = 1;
+               }
+
+               if ( count( $set ) ) {
+                       $dbw->update( 'recentchanges', $set,
+                               array( /* WHERE */
+                                       'rc_cur_id' => $current->getPage(),
+                                       'rc_user_text' => $current->getUserText(),
+                                       'rc_timestamp > ' . $dbw->addQuotes( $s->rev_timestamp ),
+                               ), __METHOD__
+                       );
+               }
+
                // Generate the edit summary if necessary
                $target = Revision::newFromId( $s->rev_id );
                if ( empty( $summary ) ) {
@@ -2969,32 +3014,17 @@ class WikiPage implements Page, IDBAccessObject {
                        return $status->getErrorsArray();
                }
 
-               $set = array();
-               if ( $bot && $guser->isAllowed( 'markbotedits' ) ) {
-                       // Mark all reverted edits as bot
-                       $set['rc_bot'] = 1;
-               }
-
-               if ( $wgUseRCPatrol ) {
-                       // Mark all reverted edits as patrolled
-                       $set['rc_patrolled'] = 1;
-               }
-
-               if ( count( $set ) ) {
-                       $dbw->update( 'recentchanges', $set,
-                               array( /* WHERE */
-                                       'rc_cur_id' => $current->getPage(),
-                                       'rc_user_text' => $current->getUserText(),
-                                       'rc_timestamp > ' . $dbw->addQuotes( $s->rev_timestamp ),
-                               ), __METHOD__
-                       );
+               // raise error, when the edit is an edit without a new version
+               if ( empty( $status->value['revision'] ) ) {
+                       $resultDetails = array( 'current' => $current );
+                       return array( array( 'alreadyrolled',
+                                       htmlspecialchars( $this->mTitle->getPrefixedText() ),
+                                       htmlspecialchars( $fromP ),
+                                       htmlspecialchars( $current->getUserText() )
+                       ) );
                }
 
-               if ( !empty( $status->value['revision'] ) ) {
-                       $revId = $status->value['revision']->getId();
-               } else {
-                       $revId = false;
-               }
+               $revId = $status->value['revision']->getId();
 
                wfRunHooks( 'ArticleRollbackComplete', array( $this, $guser, $target, $current ) );
 
@@ -3480,7 +3510,7 @@ class PoolWorkArticleView extends PoolCounterWork {
         * @param $parserOptions parserOptions to use for the parse operation
         * @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 ) {
+       public function __construct( Page $page, ParserOptions $parserOptions, $revid, $useParserCache, $content = null ) {
                if ( is_string( $content ) ) { // BC: old style call
                        $modelId = $page->getRevision()->getContentModel();
                        $format = $page->getRevision()->getContentFormat();
@@ -3526,7 +3556,7 @@ class PoolWorkArticleView extends PoolCounterWork {
        /**
         * @return bool
         */
-       function doWork() {
+       public function doWork() {
                global $wgUseFileCache;
 
                // @todo several of the methods called on $this->page are not declared in Page, but present
@@ -3589,7 +3619,7 @@ class PoolWorkArticleView extends PoolCounterWork {
        /**
         * @return bool
         */
-       function getCachedWork() {
+       public function getCachedWork() {
                $this->parserOutput = ParserCache::singleton()->get( $this->page, $this->parserOptions );
 
                if ( $this->parserOutput === false ) {
@@ -3604,7 +3634,7 @@ class PoolWorkArticleView extends PoolCounterWork {
        /**
         * @return bool
         */
-       function fallback() {
+       public function fallback() {
                $this->parserOutput = ParserCache::singleton()->getDirty( $this->page, $this->parserOptions );
 
                if ( $this->parserOutput === false ) {
@@ -3623,7 +3653,7 @@ class PoolWorkArticleView extends PoolCounterWork {
         * @param $status Status
         * @return bool
         */
-       function error( $status ) {
+       public function error( $status ) {
                $this->error = $status;
                return false;
        }
diff --git a/includes/actions/Action.php b/includes/actions/Action.php
new file mode 100644 (file)
index 0000000..1180c5e
--- /dev/null
@@ -0,0 +1,380 @@
+<?php
+/**
+ * Base classes for actions done on pages.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * 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
+ *
+ * @file
+ */
+
+/**
+ * @defgroup Actions Action done on pages
+ */
+
+/**
+ * Actions are things which can be done to pages (edit, delete, rollback, etc).  They
+ * are distinct from Special Pages because an action must apply to exactly one page.
+ *
+ * To add an action in an extension, create a subclass of Action, and add the key to
+ * $wgActions.  There is also the deprecated UnknownAction hook
+ *
+ * Actions generally fall into two groups: the show-a-form-then-do-something-with-the-input
+ * format (protect, delete, move, etc), and the just-do-something format (watch, rollback,
+ * patrol, etc). The FormAction and FormlessAction classes represent these two groups.
+ */
+abstract class Action {
+
+       /**
+        * Page on which we're performing the action
+        * @var WikiPage|Article|ImagePage|CategoryPage|Page $page
+        */
+       protected $page;
+
+       /**
+        * IContextSource if specified; otherwise we'll use the Context from the Page
+        * @var IContextSource $context
+        */
+       protected $context;
+
+       /**
+        * The fields used to create the HTMLForm
+        * @var Array $fields
+        */
+       protected $fields;
+
+       /**
+        * Get the Action subclass which should be used to handle this action, false if
+        * the action is disabled, or null if it's not recognised
+        * @param $action String
+        * @param $overrides Array
+        * @return bool|null|string|callable
+        */
+       final private static function getClass( $action, array $overrides ) {
+               global $wgActions;
+               $action = strtolower( $action );
+
+               if ( !isset( $wgActions[$action] ) ) {
+                       return null;
+               }
+
+               if ( $wgActions[$action] === false ) {
+                       return false;
+               } elseif ( $wgActions[$action] === true && isset( $overrides[$action] ) ) {
+                       return $overrides[$action];
+               } elseif ( $wgActions[$action] === true ) {
+                       return ucfirst( $action ) . 'Action';
+               } else {
+                       return $wgActions[$action];
+               }
+       }
+
+       /**
+        * Get an appropriate Action subclass for the given action
+        * @param $action String
+        * @param $page Page
+        * @param $context IContextSource
+        * @return Action|bool|null false if the action is disabled, null
+        *     if it is not recognised
+        */
+       final public static function factory( $action, Page $page, IContextSource $context = null ) {
+               $classOrCallable = self::getClass( $action, $page->getActionOverrides() );
+
+               if ( is_string( $classOrCallable ) ) {
+                       $obj = new $classOrCallable( $page, $context );
+                       return $obj;
+               }
+
+               if ( is_callable( $classOrCallable ) ) {
+                       return call_user_func_array( $classOrCallable, array( $page, $context ) );
+               }
+
+               return $classOrCallable;
+       }
+
+       /**
+        * Get the action that will be executed, not necessarily the one passed
+        * passed through the "action" request parameter. Actions disabled in
+        * $wgActions will be replaced by "nosuchaction".
+        *
+        * @since 1.19
+        * @param $context IContextSource
+        * @return string: action name
+        */
+       final public static function getActionName( IContextSource $context ) {
+               global $wgActions;
+
+               $request = $context->getRequest();
+               $actionName = $request->getVal( 'action', 'view' );
+
+               // Check for disabled actions
+               if ( isset( $wgActions[$actionName] ) && $wgActions[$actionName] === false ) {
+                       $actionName = 'nosuchaction';
+               }
+
+               // Workaround for bug #20966: inability of IE to provide an action dependent
+               // on which submit button is clicked.
+               if ( $actionName === 'historysubmit' ) {
+                       if ( $request->getBool( 'revisiondelete' ) ) {
+                               $actionName = 'revisiondelete';
+                       } else {
+                               $actionName = 'view';
+                       }
+               } elseif ( $actionName == 'editredlink' ) {
+                       $actionName = 'edit';
+               }
+
+               // Trying to get a WikiPage for NS_SPECIAL etc. will result
+               // in WikiPage::factory throwing "Invalid or virtual namespace -1 given."
+               // For SpecialPages et al, default to action=view.
+               if ( !$context->canUseWikiPage() ) {
+                       return 'view';
+               }
+
+               $action = Action::factory( $actionName, $context->getWikiPage(), $context );
+               if ( $action instanceof Action ) {
+                       return $action->getName();
+               }
+
+               return 'nosuchaction';
+       }
+
+       /**
+        * Check if a given action is recognised, even if it's disabled
+        *
+        * @param string $name name of an action
+        * @return Bool
+        */
+       final public static function exists( $name ) {
+               return self::getClass( $name, array() ) !== null;
+       }
+
+       /**
+        * Get the IContextSource in use here
+        * @return IContextSource
+        */
+       final public function getContext() {
+               if ( $this->context instanceof IContextSource ) {
+                       return $this->context;
+               } elseif ( $this->page instanceof Article ) {
+                       // NOTE: $this->page can be a WikiPage, which does not have a context.
+                       wfDebug( __METHOD__ . ': no context known, falling back to Article\'s context.' );
+                       return $this->page->getContext();
+               }
+
+               wfWarn( __METHOD__ . ': no context known, falling back to RequestContext::getMain().' );
+               return RequestContext::getMain();
+       }
+
+       /**
+        * Get the WebRequest being used for this instance
+        *
+        * @return WebRequest
+        */
+       final public function getRequest() {
+               return $this->getContext()->getRequest();
+       }
+
+       /**
+        * Get the OutputPage being used for this instance
+        *
+        * @return OutputPage
+        */
+       final public function getOutput() {
+               return $this->getContext()->getOutput();
+       }
+
+       /**
+        * Shortcut to get the User being used for this instance
+        *
+        * @return User
+        */
+       final public function getUser() {
+               return $this->getContext()->getUser();
+       }
+
+       /**
+        * Shortcut to get the Skin being used for this instance
+        *
+        * @return Skin
+        */
+       final public function getSkin() {
+               return $this->getContext()->getSkin();
+       }
+
+       /**
+        * Shortcut to get the user Language being used for this instance
+        *
+        * @return Language
+        */
+       final public function getLanguage() {
+               return $this->getContext()->getLanguage();
+       }
+
+       /**
+        * Shortcut to get the user Language being used for this instance
+        *
+        * @deprecated since 1.19 Use getLanguage instead
+        * @return Language
+        */
+       final public function getLang() {
+               wfDeprecated( __METHOD__, '1.19' );
+               return $this->getLanguage();
+       }
+
+       /**
+        * Shortcut to get the Title object from the page
+        * @return Title
+        */
+       final public function getTitle() {
+               return $this->page->getTitle();
+       }
+
+       /**
+        * Get a Message object with context set
+        * Parameters are the same as wfMessage()
+        *
+        * @return Message object
+        */
+       final public function msg() {
+               $params = func_get_args();
+               return call_user_func_array( array( $this->getContext(), 'msg' ), $params );
+       }
+
+       /**
+        * Constructor.
+        *
+        * Only public since 1.21
+        *
+        * @param $page Page
+        * @param $context IContextSource
+        */
+       public function __construct( Page $page, IContextSource $context = null ) {
+               if ( $context === null ) {
+                       wfWarn( __METHOD__ . ' called without providing a Context object.' );
+                       // NOTE: We could try to initialize $context using $page->getContext(),
+                       //      if $page is an Article. That however seems to not work seamlessly.
+               }
+
+               $this->page = $page;
+               $this->context = $context;
+       }
+
+       /**
+        * Return the name of the action this object responds to
+        * @return String lowercase
+        */
+       abstract public function getName();
+
+       /**
+        * Get the permission required to perform this action.  Often, but not always,
+        * the same as the action name
+        * @return String|null
+        */
+       public function getRestriction() {
+               return null;
+       }
+
+       /**
+        * Checks if the given user (identified by an object) can perform this action.  Can be
+        * overridden by sub-classes with more complicated permissions schemes.  Failures here
+        * must throw subclasses of ErrorPageError
+        *
+        * @param $user User: the user to check, or null to use the context user
+        * @throws UserBlockedError|ReadOnlyError|PermissionsError
+        * @return bool True on success
+        */
+       protected function checkCanExecute( User $user ) {
+               $right = $this->getRestriction();
+               if ( $right !== null ) {
+                       $errors = $this->getTitle()->getUserPermissionsErrors( $right, $user );
+                       if ( count( $errors ) ) {
+                               throw new PermissionsError( $right, $errors );
+                       }
+               }
+
+               if ( $this->requiresUnblock() && $user->isBlocked() ) {
+                       $block = $user->getBlock();
+                       throw new UserBlockedError( $block );
+               }
+
+               // This should be checked at the end so that the user won't think the
+               // error is only temporary when he also don't have the rights to execute
+               // this action
+               if ( $this->requiresWrite() && wfReadOnly() ) {
+                       throw new ReadOnlyError();
+               }
+               return true;
+       }
+
+       /**
+        * Whether this action requires the wiki not to be locked
+        * @return Bool
+        */
+       public function requiresWrite() {
+               return true;
+       }
+
+       /**
+        * Whether this action can still be executed by a blocked user
+        * @return Bool
+        */
+       public function requiresUnblock() {
+               return true;
+       }
+
+       /**
+        * Set output headers for noindexing etc.  This function will not be called through
+        * the execute() entry point, so only put UI-related stuff in here.
+        */
+       protected function setHeaders() {
+               $out = $this->getOutput();
+               $out->setRobotPolicy( "noindex,nofollow" );
+               $out->setPageTitle( $this->getPageTitle() );
+               $this->getOutput()->setSubtitle( $this->getDescription() );
+               $out->setArticleRelated( true );
+       }
+
+       /**
+        * Returns the name that goes in the \<h1\> page title
+        *
+        * @return String
+        */
+       protected function getPageTitle() {
+               return $this->getTitle()->getPrefixedText();
+       }
+
+       /**
+        * Returns the description that goes below the \<h1\> tag
+        *
+        * @return String
+        */
+       protected function getDescription() {
+               return $this->msg( strtolower( $this->getName() ) )->escaped();
+       }
+
+       /**
+        * The main action entry point.  Do all output for display and send it to the context
+        * output.  Do not use globals $wgOut, $wgRequest, etc, in implementations; use
+        * $this->getOutput(), etc.
+        * @throws ErrorPageError
+        */
+       abstract public function show();
+
+       /**
+        * Execute the action in a silent fashion: do not display anything or release any errors.
+        * @return Bool whether execution was successful
+        */
+       abstract public function execute();
+}
diff --git a/includes/actions/FormAction.php b/includes/actions/FormAction.php
new file mode 100644 (file)
index 0000000..974ee94
--- /dev/null
@@ -0,0 +1,168 @@
+<?php
+/**
+ * Base classes for actions done on pages.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * 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
+ *
+ * @file
+ */
+
+/**
+ * @defgroup Actions Action done on pages
+ */
+
+/**
+ * An action which shows a form and does something based on the input from the form
+ */
+abstract class FormAction extends Action {
+
+       /**
+        * Get an HTMLForm descriptor array
+        * @return Array
+        */
+       abstract protected function getFormFields();
+
+       /**
+        * Add pre- or post-text to the form
+        * @return String HTML which will be sent to $form->addPreText()
+        */
+       protected function preText() {
+               return '';
+       }
+
+       /**
+        * @return string
+        */
+       protected function postText() {
+               return '';
+       }
+
+       /**
+        * Play with the HTMLForm if you need to more substantially
+        * @param $form HTMLForm
+        */
+       protected function alterForm( HTMLForm $form ) {
+       }
+
+       /**
+        * Get the HTMLForm to control behavior
+        * @return HTMLForm|null
+        */
+       protected function getForm() {
+               $this->fields = $this->getFormFields();
+
+               // Give hooks a chance to alter the form, adding extra fields or text etc
+               wfRunHooks( 'ActionModifyFormFields', array( $this->getName(), &$this->fields, $this->page ) );
+
+               $form = new HTMLForm( $this->fields, $this->getContext(), $this->getName() );
+               $form->setSubmitCallback( array( $this, 'onSubmit' ) );
+
+               // Retain query parameters (uselang etc)
+               $form->addHiddenField( 'action', $this->getName() ); // Might not be the same as the query string
+               $params = array_diff_key(
+                       $this->getRequest()->getQueryValues(),
+                       array( 'action' => null, 'title' => null )
+               );
+               $form->addHiddenField( 'redirectparams', wfArrayToCgi( $params ) );
+
+               $form->addPreText( $this->preText() );
+               $form->addPostText( $this->postText() );
+               $this->alterForm( $form );
+
+               // Give hooks a chance to alter the form, adding extra fields or text etc
+               wfRunHooks( 'ActionBeforeFormDisplay', array( $this->getName(), &$form, $this->page ) );
+
+               return $form;
+       }
+
+       /**
+        * Process the form on POST submission.  If you return false from getFormFields(),
+        * this will obviously never be reached.  If you don't want to do anything with the
+        * form, just return false here
+        * @param  $data Array
+        * @return Bool|Array true for success, false for didn't-try, array of errors on failure
+        */
+       abstract public function onSubmit( $data );
+
+       /**
+        * Do something exciting on successful processing of the form.  This might be to show
+        * a confirmation message (watch, rollback, etc) or to redirect somewhere else (edit,
+        * protect, etc).
+        */
+       abstract public function onSuccess();
+
+       /**
+        * The basic pattern for actions is to display some sort of HTMLForm UI, maybe with
+        * some stuff underneath (history etc); to do some processing on submission of that
+        * form (delete, protect, etc) and to do something exciting on 'success', be that
+        * display something new or redirect to somewhere.  Some actions have more exotic
+        * behavior, but that's what subclassing is for :D
+        */
+       public function show() {
+               $this->setHeaders();
+
+               // This will throw exceptions if there's a problem
+               $this->checkCanExecute( $this->getUser() );
+
+               $form = $this->getForm();
+               if ( $form->show() ) {
+                       $this->onSuccess();
+               }
+       }
+
+       /**
+        * @see Action::execute()
+        *
+        * @param $data array|null
+        * @param $captureErrors bool
+        * @throws ErrorPageError|Exception
+        * @return bool
+        */
+       public function execute( array $data = null, $captureErrors = true ) {
+               try {
+                       // Set a new context so output doesn't leak.
+                       $this->context = clone $this->getContext();
+
+                       // This will throw exceptions if there's a problem
+                       $this->checkCanExecute( $this->getUser() );
+
+                       $fields = array();
+                       foreach ( $this->fields as $key => $params ) {
+                               if ( isset( $data[$key] ) ) {
+                                       $fields[$key] = $data[$key];
+                               } elseif ( isset( $params['default'] ) ) {
+                                       $fields[$key] = $params['default'];
+                               } else {
+                                       $fields[$key] = null;
+                               }
+                       }
+                       $status = $this->onSubmit( $fields );
+                       if ( $status === true ) {
+                               // This might do permanent stuff
+                               $this->onSuccess();
+                               return true;
+                       } else {
+                               return false;
+                       }
+               }
+               catch ( ErrorPageError $e ) {
+                       if ( $captureErrors ) {
+                               return false;
+                       } else {
+                               throw $e;
+                       }
+               }
+       }
+}
diff --git a/includes/actions/FormlessAction.php b/includes/actions/FormlessAction.php
new file mode 100644 (file)
index 0000000..6cab4d1
--- /dev/null
@@ -0,0 +1,100 @@
+<?php
+/**
+ * Base classes for actions done on pages.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * 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
+ *
+ * @file
+ */
+
+/**
+ * @defgroup Actions Action done on pages
+ */
+
+/**
+ * An action which just does something, without showing a form first.
+ */
+abstract class FormlessAction extends Action {
+
+       /**
+        * Show something on GET request.
+        * @return String|null will be added to the HTMLForm if present, or just added to the
+        *     output if not.  Return null to not add anything
+        */
+       abstract public function onView();
+
+       /**
+        * We don't want an HTMLForm
+        * @return bool
+        */
+       protected function getFormFields() {
+               return false;
+       }
+
+       /**
+        * @param $data Array
+        * @return bool
+        */
+       public function onSubmit( $data ) {
+               return false;
+       }
+
+       /**
+        * @return bool
+        */
+       public function onSuccess() {
+               return false;
+       }
+
+       public function show() {
+               $this->setHeaders();
+
+               // This will throw exceptions if there's a problem
+               $this->checkCanExecute( $this->getUser() );
+
+               $this->getOutput()->addHTML( $this->onView() );
+       }
+
+       /**
+        * Execute the action silently, not giving any output.  Since these actions don't have
+        * forms, they probably won't have any data, but some (eg rollback) may do
+        * @param array $data values that would normally be in the GET request
+        * @param bool $captureErrors whether to catch exceptions and just return false
+        * @throws ErrorPageError|Exception
+        * @return Bool whether execution was successful
+        */
+       public function execute( array $data = null, $captureErrors = true ) {
+               try {
+                       // Set a new context so output doesn't leak.
+                       $this->context = clone $this->getContext();
+                       if ( is_array( $data ) ) {
+                               $this->context->setRequest( new FauxRequest( $data, false ) );
+                       }
+
+                       // This will throw exceptions if there's a problem
+                       $this->checkCanExecute( $this->getUser() );
+
+                       $this->onView();
+                       return true;
+               }
+               catch ( ErrorPageError $e ) {
+                       if ( $captureErrors ) {
+                               return false;
+                       } else {
+                               throw $e;
+                       }
+               }
+       }
+}
index 918fc9e..63f3151 100644 (file)
@@ -289,6 +289,9 @@ class InfoAction extends FormlessAction {
                if ( isset( $pageProperties['noindex'] ) ) {
                        $pOutput->setIndexPolicy( 'noindex' );
                }
+               if ( isset( $pageProperties['index'] ) ) {
+                       $pOutput->setIndexPolicy( 'index' );
+               }
 
                // Use robot policy logic
                $policy = $this->page->getRobotPolicy( 'view', $pOutput );
index 332fa9e..364300e 100644 (file)
@@ -222,7 +222,7 @@ class ApiBlock extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Block a user';
+               return 'Block a user.';
        }
 
        public function getPossibleErrors() {
index 237e8c8..c1bbea7 100644 (file)
@@ -157,8 +157,8 @@ class ApiComparePages extends ApiBase {
 
        public function getDescription() {
                return array(
-                       'Get the difference between 2 pages',
-                       'You must pass a revision number or a page title or a page ID id for each part (1 and 2)'
+                       'Get the difference between 2 pages.',
+                       'You must pass a revision number or a page title or a page ID id for each part (1 and 2).'
                );
        }
 
index 7727b28..be8286c 100644 (file)
@@ -138,13 +138,13 @@ class ApiCreateAccount extends ApiBase {
                        // since not having the correct token is part of the normal
                        // flow of events.
                        $result['token'] = LoginForm::getCreateaccountToken();
-                       $result['result'] = 'needtoken';
+                       $result['result'] = 'NeedToken';
                } elseif ( !$status->isOK() ) {
                        // There was an error. Die now.
                        $this->dieStatus( $status );
                } elseif ( !$status->isGood() ) {
                        // Status is not good, but OK. This means warnings.
-                       $result['result'] = 'warning';
+                       $result['result'] = 'Warning';
 
                        // Add any warnings to the result
                        $warnings = $status->getErrorsByType( 'warning' );
@@ -157,7 +157,7 @@ class ApiCreateAccount extends ApiBase {
                        }
                } else {
                        // Everything was fine.
-                       $result['result'] = 'success';
+                       $result['result'] = 'Success';
                }
 
                // Give extensions a chance to modify the API result data
@@ -229,9 +229,9 @@ class ApiCreateAccount extends ApiBase {
                        'createaccount' => array(
                                'result' => array(
                                        ApiBase::PROP_TYPE => array(
-                                               'success',
-                                               'warning',
-                                               'needtoken'
+                                               'Success',
+                                               'Warning',
+                                               'NeedToken'
                                        )
                                ),
                                'username' => array(
index c09cad3..acc2eb8 100644 (file)
@@ -240,7 +240,7 @@ class ApiDelete extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Delete a page';
+               return 'Delete a page.';
        }
 
        public function getPossibleErrors() {
index e5ef3b7..6ea5d20 100644 (file)
@@ -53,7 +53,7 @@ class ApiDisabled extends ApiBase {
        }
 
        public function getDescription() {
-               return 'This module has been disabled';
+               return 'This module has been disabled.';
        }
 
        public function getExamples() {
index d5c789c..28ed5e4 100644 (file)
@@ -108,7 +108,7 @@ class ApiExpandTemplates extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Expands all templates in wikitext';
+               return 'Expands all templates in wikitext.';
        }
 
        public function getPossibleErrors() {
index f90ba98..4173402 100644 (file)
@@ -78,6 +78,7 @@ class ApiFeedContributions extends ApiBase {
                        'tagFilter' => $params['tagfilter'],
                        'deletedOnly' => $params['deletedonly'],
                        'topOnly' => $params['toponly'],
+                       'newOnly' => $params['newonly'],
                        'showSizeDiff' => $params['showsizediff'],
                ) );
 
@@ -186,6 +187,7 @@ class ApiFeedContributions extends ApiBase {
                        ),
                        'deletedonly' => false,
                        'toponly' => false,
+                       'newonly' => false,
                        'showsizediff' => false,
                );
        }
@@ -200,12 +202,13 @@ class ApiFeedContributions extends ApiBase {
                        'tagfilter' => 'Filter contributions that have these tags',
                        'deletedonly' => 'Show only deleted contributions',
                        'toponly' => 'Only show edits that are latest revisions',
+                       'newonly' => 'Only show edits that are page creations',
                        'showsizediff' => 'Show the size difference between revisions. Disabled in Miser Mode',
                );
        }
 
        public function getDescription() {
-               return 'Returns a user contributions feed';
+               return 'Returns a user contributions feed.';
        }
 
        public function getPossibleErrors() {
diff --git a/includes/api/ApiFeedRecentChanges.php b/includes/api/ApiFeedRecentChanges.php
new file mode 100644 (file)
index 0000000..f1c1bf3
--- /dev/null
@@ -0,0 +1,203 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.23
+ */
+
+/**
+ * Recent changes feed.
+ *
+ * @ingroup API
+ */
+class ApiFeedRecentChanges extends ApiBase {
+
+       /**
+        * This module uses a custom feed wrapper printer.
+        *
+        * @return ApiFormatFeedWrapper
+        */
+       public function getCustomPrinter() {
+               return new ApiFormatFeedWrapper( $this->getMain() );
+       }
+
+       /**
+        * Format the rows (generated by SpecialRecentchanges or SpecialRecentchangeslinked)
+        * as an RSS/Atom feed.
+        */
+       public function execute() {
+               global $wgFeed, $wgFeedClasses;
+
+               $this->params = $this->extractRequestParams();
+
+               if ( !$wgFeed ) {
+                       $this->dieUsage( 'Syndication feeds are not available', 'feed-unavailable' );
+               }
+
+               if ( !isset( $wgFeedClasses[$this->params['feedformat']] ) ) {
+                       $this->dieUsage( 'Invalid subscription feed type', 'feed-invalid' );
+               }
+
+               $feedFormat = $this->params['feedformat'];
+               $specialClass = $this->params['target'] !== null
+                       ? 'SpecialRecentchangeslinked'
+                       : 'SpecialRecentchanges';
+
+               $formatter = $this->getFeedObject( $feedFormat, $specialClass );
+
+               // Everything is passed implicitly via $wgRequest… :(
+               // The row-getting functionality should maybe be factored out of ChangesListSpecialPage too…
+               $rc = new $specialClass();
+               $rows = $rc->getRows();
+
+               $feedItems = $rows ? ChangesFeed::buildItems( $rows ) : array();
+
+               ApiFormatFeedWrapper::setResult( $this->getResult(), $formatter, $feedItems );
+       }
+
+       /**
+        * Return a ChannelFeed object.
+        *
+        * @param string $feedFormat Feed's format (either 'rss' or 'atom')
+        * @param string $specialClass Relevant special page name (either 'SpecialRecentchanges' or
+        *     'SpecialRecentchangeslinked')
+        * @return ChannelFeed
+        */
+       public function getFeedObject( $feedFormat, $specialClass ) {
+               if ( $specialClass === 'SpecialRecentchangeslinked' ) {
+                       $title = Title::newFromText( $this->params['target'] );
+                       $feed = new ChangesFeed( $feedFormat, false );
+                       $feedObj = $feed->getFeedObject(
+                               $this->msg( 'recentchangeslinked-title', $title->getPrefixedText() )
+                                       ->inContentLanguage()->text(),
+                               $this->msg( 'recentchangeslinked-feed' )->inContentLanguage()->text(),
+                               SpecialPage::getTitleFor( 'Recentchangeslinked' )->getFullURL()
+                       );
+               } else {
+                       $feed = new ChangesFeed( $feedFormat, 'rcfeed' );
+                       $feedObj = $feed->getFeedObject(
+                               $this->msg( 'recentchanges' )->inContentLanguage()->text(),
+                               $this->msg( 'recentchanges-feed-description' )->inContentLanguage()->text(),
+                               SpecialPage::getTitleFor( 'Recentchanges' )->getFullURL()
+                       );
+               }
+
+               return $feedObj;
+       }
+
+       public function getAllowedParams() {
+               global $wgFeedClasses, $wgAllowCategorizedRecentChanges, $wgFeedLimit;
+               $feedFormatNames = array_keys( $wgFeedClasses );
+
+               $ret = array(
+                       'feedformat' => array(
+                               ApiBase::PARAM_DFLT => 'rss',
+                               ApiBase::PARAM_TYPE => $feedFormatNames,
+                       ),
+
+                       'namespace' => array(
+                               ApiBase::PARAM_TYPE => 'namespace',
+                       ),
+                       'invert' => false,
+                       'associated' => false,
+
+                       'days' => array(
+                               ApiBase::PARAM_DFLT => 7,
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_TYPE => 'integer',
+                       ),
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 50,
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => $wgFeedLimit,
+                               ApiBase::PARAM_TYPE => 'integer',
+                       ),
+                       'from' => array(
+                               ApiBase::PARAM_TYPE => 'timestamp',
+                       ),
+
+                       'hideminor' => false,
+                       'hidebots' => false,
+                       'hideanons' => false,
+                       'hideliu' => false,
+                       'hidepatrolled' => false,
+                       'hidemyself' => false,
+
+                       'tagfilter' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                       ),
+
+                       'target' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                       ),
+                       'showlinkedto' => false,
+               );
+
+               if ( $wgAllowCategorizedRecentChanges ) {
+                       $ret += array(
+                               'categories' => array(
+                                       ApiBase::PARAM_TYPE => 'string',
+                                       ApiBase::PARAM_ISMULTI => true,
+                               ),
+                               'categories_any' => false,
+                       );
+               }
+
+               return $ret;
+       }
+
+       public function getParamDescription() {
+               return array(
+                       'feedformat' => 'The format of the feed',
+                       'namespace' => 'Namespace to limit the results to',
+                       'invert' => 'All namespaces but the selected one',
+                       'associated' => 'Include associated (talk or main) namespace',
+                       'days' => 'Days to limit the results to',
+                       'limit' => 'Maximum number of results to return',
+                       'from' => 'Show changes since then',
+                       'hideminor' => 'Hide minor changes',
+                       'hidebots' => 'Hide changes made by bots',
+                       'hideanons' => 'Hide changes made by anonymous users',
+                       'hideliu' => 'Hide changes made by registered users',
+                       'hidepatrolled' => 'Hide patrolled changes',
+                       'hidemyself' => 'Hide changes made by yourself',
+                       'tagfilter' => 'Filter by tag',
+                       'target' => 'Show only changes on pages linked from this page',
+                       'showlinkedto' => 'Show changes on pages linked to the selected page instead',
+                       'categories' => 'Show only changes on pages in all of these categories',
+                       'categories_any' => 'Show only changes on pages in any of the categories instead',
+               );
+       }
+
+       public function getDescription() {
+               return 'Returns a recent changes feed';
+       }
+
+       public function getPossibleErrors() {
+               return array_merge( parent::getPossibleErrors(), array(
+                       array( 'code' => 'feed-unavailable', 'info' => 'Syndication feeds are not available' ),
+                       array( 'code' => 'feed-invalid', 'info' => 'Invalid subscription feed type' ),
+               ) );
+       }
+
+       public function getExamples() {
+               return array(
+                       'api.php?action=feedrecentchanges',
+                       'api.php?action=feedrecentchanges&days=30'
+               );
+       }
+}
index 84c1fae..4770365 100644 (file)
@@ -266,7 +266,7 @@ class ApiFeedWatchlist extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Returns a watchlist feed';
+               return 'Returns a watchlist feed.';
        }
 
        public function getPossibleErrors() {
index a3fa5f9..1941fbd 100644 (file)
@@ -167,7 +167,7 @@ class ApiFileRevert extends ApiBase {
 
        public function getDescription() {
                return array(
-                       'Revert a file to an old version'
+                       'Revert a file to an old version.'
                );
        }
 
index 63a5502..3c924bc 100644 (file)
@@ -271,12 +271,22 @@ See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>,
                // encode all comments or tags as safe blue strings
                $text = str_replace( '&lt;', '<span style="color:blue;">&lt;', $text );
                $text = str_replace( '&gt;', '&gt;</span>', $text );
+
                // identify requests to api.php
-               $text = preg_replace( "#api\\.php\\?[^ <\n\t]+#", '<a href="\\0">\\0</a>', $text );
+               $text = preg_replace( '#^(\s*)(api\.php\?[^ <\n\t]+)$#m', '\1<a href="\2">\2</a>', $text );
                if ( $this->mHelp ) {
-                       // make strings inside * bold
-                       $text = preg_replace( "#\\*[^<>\n]+\\*#", '<b>\\0</b>', $text );
+                       // make lines inside * bold
+                       $text = preg_replace( '#^(\s*)(\*[^<>\n]+\*)(\s*)$#m', '$1<b>$2</b>$3', $text );
                }
+
+               // Armor links (bug 61362)
+               $masked = array();
+               $text = preg_replace_callback( '#<a .*?</a>#', function ( $matches ) use ( &$masked ) {
+                       $sha = sha1( $matches[0] );
+                       $masked[$sha] = $matches[0];
+                       return "<$sha>";
+               }, $text );
+
                // identify URLs
                $protos = wfUrlProtocolsWithoutProtRel();
                // This regex hacks around bug 13218 (&quot; included in the URL)
@@ -286,6 +296,12 @@ See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>,
                        $text
                );
 
+               // Unarmor links
+               $text = preg_replace_callback( '#<([0-9a-f]{40})>#', function ( $matches ) use ( &$masked ) {
+                       $sha = $matches[1];
+                       return isset( $masked[$sha] ) ? $masked[$sha] : $matches[0];
+               }, $text );
+
                /**
                 * Temporary fix for bad links in help messages. As a special case,
                 * XML-escaped metachars are de-escaped one level in the help message
index 5b1f29c..e584d0d 100644 (file)
@@ -152,7 +152,7 @@ class ApiHelp extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Display this help screen. Or the help screen for the specified module';
+               return 'Display this help screen. Or the help screen for the specified module.';
        }
 
        public function getExamples() {
index 5d2ee6f..b8e16ab 100644 (file)
@@ -203,7 +203,7 @@ class ApiImageRotate extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Rotate one or more images';
+               return 'Rotate one or more images.';
        }
 
        public function needsToken() {
index fe3143e..cba2134 100644 (file)
@@ -261,7 +261,7 @@ class ApiLogin extends ApiBase {
                        'In the event of a successful log-in, a cookie will be attached to your session.',
                        'In the event of a failed log-in, you will not be able to attempt another log-in',
                        'through this method for 5 seconds. This is to prevent password guessing by',
-                       'automated password crackers'
+                       'automated password crackers.'
                );
        }
 
index 2ba92a6..c8b3882 100644 (file)
@@ -59,7 +59,7 @@ class ApiLogout extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Log out and clear session data';
+               return 'Log out and clear session data.';
        }
 
        public function getExamples() {
index 2684f51..e1c0874 100644 (file)
@@ -56,6 +56,7 @@ class ApiMain extends ApiBase {
                'parse' => 'ApiParse',
                'opensearch' => 'ApiOpenSearch',
                'feedcontributions' => 'ApiFeedContributions',
+               'feedrecentchanges' => 'ApiFeedRecentChanges',
                'feedwatchlist' => 'ApiFeedWatchlist',
                'help' => 'ApiHelp',
                'paraminfo' => 'ApiParamInfo',
@@ -361,37 +362,7 @@ class ApiMain extends ApiBase {
                try {
                        $this->executeAction();
                } catch ( Exception $e ) {
-                       // Allow extra cleanup and logging
-                       wfRunHooks( 'ApiMain::onException', array( $this, $e ) );
-
-                       // Log it
-                       if ( !( $e instanceof UsageException ) ) {
-                               MWExceptionHandler::logException( $e );
-                       }
-
-                       // 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.
-
-                       $errCode = $this->substituteResultWithError( $e );
-
-                       // Error results should not be cached
-                       $this->setCacheMode( 'private' );
-
-                       $response = $this->getRequest()->response();
-                       $headerStr = 'MediaWiki-API-Error: ' . $errCode;
-                       if ( $e->getCode() === 0 ) {
-                               $response->header( $headerStr );
-                       } else {
-                               $response->header( $headerStr, true, $e->getCode() );
-                       }
-
-                       // Reset and print just the error message
-                       ob_clean();
-
-                       // If the error occurred during printing, do a printer->profileOut()
-                       $this->mPrinter->safeProfileOut();
-                       $this->printResult( true );
+                       $this->handleException( $e );
                }
 
                // Log the request whether or not there was an error
@@ -408,6 +379,73 @@ class ApiMain extends ApiBase {
                ob_end_flush();
        }
 
+       /**
+        * Handle an exception as an API response
+        *
+        * @since 1.23
+        * @param Exception $e
+        */
+       protected function handleException( Exception $e ) {
+               // Allow extra cleanup and logging
+               wfRunHooks( 'ApiMain::onException', array( $this, $e ) );
+
+               // Log it
+               if ( !( $e instanceof UsageException ) ) {
+                       MWExceptionHandler::logException( $e );
+               }
+
+               // 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.
+
+               $errCode = $this->substituteResultWithError( $e );
+
+               // Error results should not be cached
+               $this->setCacheMode( 'private' );
+
+               $response = $this->getRequest()->response();
+               $headerStr = 'MediaWiki-API-Error: ' . $errCode;
+               if ( $e->getCode() === 0 ) {
+                       $response->header( $headerStr );
+               } else {
+                       $response->header( $headerStr, true, $e->getCode() );
+               }
+
+               // Reset and print just the error message
+               ob_clean();
+
+               // If the error occurred during printing, do a printer->profileOut()
+               $this->mPrinter->safeProfileOut();
+               $this->printResult( true );
+       }
+
+       /**
+        * Handle an exception from the ApiBeforeMain hook.
+        *
+        * This tries to print the exception as an API response, to be more
+        * friendly to clients. If it fails, it will rethrow the exception.
+        *
+        * @since 1.23
+        * @param Exception $e
+        */
+       public static function handleApiBeforeMainException( Exception $e ) {
+               ob_start();
+
+               try {
+                       $main = new self( RequestContext::getMain(), false );
+                       $main->handleException( $e );
+               } catch ( Exception $e2 ) {
+                       // Nope, even that didn't work. Punt.
+                       throw $e;
+               }
+
+               // Log the request and reset cache headers
+               $main->logRequest( 0 );
+               $main->sendCacheHeaders();
+
+               ob_end_flush();
+       }
+
        /**
         * Check the &origin= query parameter against the Origin: HTTP header and respond appropriately.
         *
@@ -1110,14 +1148,14 @@ class ApiMain extends ApiBase {
                        '',
                        'Status:                All features shown on this page should be working, but the API',
                        '                       is still in active development, and may change at any time.',
-                       '                       Make sure to monitor our mailing list for any updates',
+                       '                       Make sure to monitor our mailing list for any updates.',
                        '',
                        'Erroneous requests:    When erroneous requests are sent to the API, a HTTP header will be sent',
                        '                       with the key "MediaWiki-API-Error" and then both the value of the',
-                       '                       header and the error code sent back will be set to the same value',
+                       '                       header and the error code sent back will be set to the same value.',
                        '',
                        '                       In the case of an invalid action being passed, these will have a value',
-                       '                       of "unknown_action"',
+                       '                       of "unknown_action".',
                        '',
                        '                       For more information see https://www.mediawiki.org' .
                                '/wiki/API:Errors_and_warnings',
@@ -1161,12 +1199,11 @@ class ApiMain extends ApiBase {
        protected function getCredits() {
                return array(
                        'API developers:',
-                       '    Roan Kattouw - roan . kattouw @ gmail . com (lead developer Sep 2007-2009)',
-                       '    Victor Vasiliev - vasilvv @ gmail . com',
-                       '    Bryan Tong Minh - bryan . tongminh @ gmail . com',
-                       '    Sam Reed - sam @ reedyboy . net',
-                       '    Yuri Astrakhan - yuri . astrakhan @ gmail . com (creator, lead ' .
-                               'developer Sep 2006-Sep 2007, 2012-present)',
+                       '    Roan Kattouw (lead developer Sep 2007-2009)',
+                       '    Victor Vasiliev',
+                       '    Bryan Tong Minh',
+                       '    Sam Reed',
+                       '    Yuri Astrakhan (creator, lead developer Sep 2006-Sep 2007, 2012-present)',
                        '',
                        'Please send your comments, suggestions and questions to mediawiki-api@lists.wikimedia.org',
                        'or file a bug report at https://bugzilla.wikimedia.org/'
index 20ac48a..10b655f 100644 (file)
@@ -272,7 +272,7 @@ class ApiMove extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Move a page';
+               return 'Move a page.';
        }
 
        public function getPossibleErrors() {
index 4b8578b..f2bf754 100644 (file)
@@ -125,7 +125,7 @@ class ApiOpenSearch extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Search the wiki using the OpenSearch protocol';
+               return 'Search the wiki using the OpenSearch protocol.';
        }
 
        public function getExamples() {
index fb441a3..86d051a 100644 (file)
@@ -174,10 +174,11 @@ class ApiOptions extends ApiBase {
                        'token' => 'An options token previously obtained through the action=tokens',
                        '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 ' .
+                       'change' => array( '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',
+                               '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',
@@ -186,7 +187,7 @@ class ApiOptions extends ApiBase {
 
        public function getDescription() {
                return array(
-                       'Change preferences of the current user',
+                       '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.'
index 2b4710a..5092af0 100644 (file)
@@ -349,7 +349,7 @@ class ApiParamInfo extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Obtain information about certain API parameters and errors';
+               return 'Obtain information about certain API parameters and errors.';
        }
 
        public function getExamples() {
index 464fde6..ce52565 100644 (file)
@@ -186,8 +186,9 @@ class ApiParse extends ApiBase {
                        }
 
                        $popts = $this->makeParserOptions( $pageObj, $params );
+                       $textProvided = !is_null( $text );
 
-                       if ( is_null( $text ) ) {
+                       if ( !$textProvided ) {
                                if ( $titleProvided && ( $prop || $params['generatexml'] ) ) {
                                        $this->setWarning(
                                                "'title' used without 'text', and parsed page properties were requested " .
@@ -200,7 +201,7 @@ class ApiParse extends ApiBase {
 
                        // If we are parsing text, do not use the content model of the default
                        // API title, but default to wikitext to keep BC.
-                       if ( !$titleProvided && is_null( $model ) ) {
+                       if ( $textProvided && !$titleProvided && is_null( $model ) ) {
                                $model = CONTENT_MODEL_WIKITEXT;
                                $this->setWarning( "No 'title' or 'contentmodel' was given, assuming $model." );
                        }
@@ -361,6 +362,15 @@ class ApiParse extends ApiBase {
                        $result_array['properties'] = $this->formatProperties( $p_result->getProperties() );
                }
 
+               if ( isset( $prop['limitreportdata'] ) ) {
+                       $result_array['limitreportdata'] = $this->formatLimitReportData( $p_result->getLimitReportData() );
+               }
+               if ( isset( $prop['limitreporthtml'] ) ) {
+                       $limitreportHtml = EditPage::getPreviewLimitReport( $p_result );
+                       $result_array['limitreporthtml'] = array();
+                       ApiResult::setContent( $result_array['limitreporthtml'], $limitreportHtml );
+               }
+
                if ( $params['generatexml'] ) {
                        if ( $this->content->getModel() != CONTENT_MODEL_WIKITEXT ) {
                                $this->dieUsage( "generatexml is only supported for wikitext content", "notwikitext" );
@@ -389,6 +399,7 @@ class ApiParse extends ApiBase {
                        'sections' => 's',
                        'headitems' => 'hi',
                        'properties' => 'pp',
+                       'limitreportdata' => 'lr',
                );
                $this->setIndexedTagNames( $result_array, $result_mapping );
                $result->addValue( null, $this->getModuleName(), $result_array );
@@ -476,6 +487,10 @@ class ApiParse extends ApiBase {
                        $entry['lang'] = $bits[0];
                        if ( $title ) {
                                $entry['url'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
+                               // localised language name in user language (maybe set by uselang=)
+                               $entry['langname'] = Language::fetchLanguageName( $title->getInterwiki(), $this->getLanguage()->getCode() );
+                               // native language name
+                               $entry['autonym'] = Language::fetchLanguageName( $title->getInterwiki() );
                        }
                        ApiResult::setContent( $entry, $bits[1] );
                        $result[] = $entry;
@@ -644,6 +659,25 @@ class ApiParse extends ApiBase {
                return $result;
        }
 
+       private function formatLimitReportData( $limitReportData ) {
+               $result = array();
+               $apiResult = $this->getResult();
+
+               foreach ( $limitReportData as $name => $value ) {
+                       $entry = array();
+                       $entry['name'] = $name;
+                       if ( !is_array( $value ) ) {
+                               $value = array( $value );
+                       }
+                       $apiResult->setIndexedTagName( $value, 'param' );
+                       $apiResult->setIndexedTagName_recursive( $value, 'param' );
+                       $entry = array_merge( $entry, $value );
+                       $result[] = $entry;
+               }
+
+               return $result;
+       }
+
        private function setIndexedTagNames( &$array, $mapping ) {
                foreach ( $mapping as $key => $name ) {
                        if ( isset( $array[$key] ) ) {
@@ -687,6 +721,8 @@ class ApiParse extends ApiBase {
                                        'iwlinks',
                                        'wikitext',
                                        'properties',
+                                       'limitreportdata',
+                                       'limitreporthtml',
                                )
                        ),
                        'pst' => false,
@@ -717,7 +753,7 @@ class ApiParse extends ApiBase {
                        'summary' => 'Summary to parse',
                        'redirects' => "If the {$p}page or the {$p}pageid parameter is set to a redirect, resolve it",
                        'title' => "Title of page the text belongs to. " .
-                               "If omitted, \"API\" is used as the title with content model $wikitext",
+                               "If omitted, {$p}contentmodel must be specified, and \"API\" will be used as the title",
                        'page' => "Parse the content of this page. Cannot be used together with {$p}text and {$p}title",
                        'pageid' => "Parse the content of this page. Overrides {$p}page",
                        'oldid' => "Parse the content of this revision. Overrides {$p}page and {$p}pageid",
@@ -741,6 +777,10 @@ class ApiParse extends ApiBase {
                                ' iwlinks        - Gives interwiki links in the parsed wikitext',
                                ' wikitext       - Gives the original wikitext that was parsed',
                                ' properties     - Gives various properties defined in the parsed wikitext',
+                               ' limitreportdata - Gives the limit report in a structured way.',
+                               "                   Gives no data, when {$p}disablepp is set.",
+                               ' limitreporthtml - Gives the HTML version of the limit report.',
+                               "                   Gives no data, when {$p}disablepp is set.",
                        ),
                        'effectivelanglinks' => array(
                                'Includes language links supplied by extensions',
@@ -767,8 +807,8 @@ class ApiParse extends ApiBase {
                                "Only valid when used with {$p}text",
                        ),
                        'contentmodel' => array(
-                               "Content model of the input text. Default is the model of the " .
-                               "specified ${p}title, or $wikitext if ${p}title is not specified",
+                               "Content model of the input text. If omitted, ${p}title must be specified, " .
+                                       "and default will be the model of the specified ${p}title",
                                "Only valid when used with {$p}text",
                        ),
                );
@@ -778,9 +818,9 @@ class ApiParse extends ApiBase {
                $p = $this->getModulePrefix();
 
                return array(
-                       'Parses content and returns parser output',
+                       'Parses content and returns parser output.',
                        'See the various prop-Modules of action=query to get information from the current' .
-                               'version of a page',
+                               'version of a page.',
                        'There are several ways to specify the text to parse:',
                        "1) Specify a page or revision, using {$p}page, {$p}pageid, or {$p}oldid.",
                        "2) Specify content explicitly, using {$p}text, {$p}title, and {$p}contentmodel.",
@@ -814,7 +854,7 @@ class ApiParse extends ApiBase {
        public function getExamples() {
                return array(
                        'api.php?action=parse&page=Project:Sandbox' => 'Parse a page',
-                       'api.php?action=parse&text={{Project:Sandbox}}' => 'Parse wikitext',
+                       'api.php?action=parse&text={{Project:Sandbox}}&contentmodel=wikitext' => 'Parse wikitext',
                        'api.php?action=parse&text={{PAGENAME}}&title=Test'
                                => 'Parse wikitext, specifying the page title',
                        'api.php?action=parse&summary=Some+[[link]]&prop=' => 'Parse a summary',
index 46bd94e..00297ec 100644 (file)
@@ -109,7 +109,7 @@ class ApiPatrol extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Patrol a page or revision';
+               return 'Patrol a page or revision.';
        }
 
        public function getPossibleErrors() {
index 644e97e..27f0f1e 100644 (file)
@@ -212,7 +212,7 @@ class ApiProtect extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Change the protection level of a page';
+               return 'Change the protection level of a page.';
        }
 
        public function getPossibleErrors() {
index c054bc1..c6ae611 100644 (file)
@@ -54,6 +54,7 @@ class ApiQuery extends ApiBase {
                'iwlinks' => 'ApiQueryIWLinks',
                'langlinks' => 'ApiQueryLangLinks',
                'pageprops' => 'ApiQueryPageProps',
+               'redirects' => 'ApiQueryRedirects',
                'revisions' => 'ApiQueryRevisions',
                'stashimageinfo' => 'ApiQueryStashImageInfo',
                'templates' => 'ApiQueryLinks',
@@ -69,6 +70,7 @@ class ApiQuery extends ApiBase {
                'allimages' => 'ApiQueryAllImages',
                'alllinks' => 'ApiQueryAllLinks',
                'allpages' => 'ApiQueryAllPages',
+               'allredirects' => 'ApiQueryAllLinks',
                'alltransclusions' => 'ApiQueryAllLinks',
                'allusers' => 'ApiQueryAllUsers',
                'backlinks' => 'ApiQueryBacklinks',
@@ -734,7 +736,7 @@ class ApiQuery extends ApiBase {
                                'from the MediaWiki databases,',
                        'and is loosely based on the old query.php interface.',
                        'All data modifications will first have to use query to acquire a ' .
-                               'token to prevent abuse from malicious sites'
+                               'token to prevent abuse from malicious sites.'
                );
        }
 
index 44bf0cb..8a1810b 100644 (file)
@@ -225,7 +225,7 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'Enumerate all categories';
+               return 'Enumerate all categories.';
        }
 
        public function getExamples() {
index 4095bd8..0591fa9 100644 (file)
@@ -394,7 +394,7 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'Enumerate all images sequentially';
+               return 'Enumerate all images sequentially.';
        }
 
        public function getPossibleErrors() {
index 13f766e..7b5123d 100644 (file)
  */
 class ApiQueryAllLinks extends ApiQueryGeneratorBase {
 
+       private $table, $tablePrefix, $indexTag,
+               $description, $descriptionWhat, $descriptionTargets, $descriptionLinking;
+       private $fieldTitle = 'title';
+       private $dfltNamespace = NS_MAIN;
+       private $hasNamespace = true;
+       private $useIndex = null;
+       private $props = array(), $propHelp = array();
+
        public function __construct( $query, $moduleName ) {
                switch ( $moduleName ) {
                        case 'alllinks':
                                $prefix = 'al';
                                $this->table = 'pagelinks';
                                $this->tablePrefix = 'pl_';
-                               $this->fieldTitle = 'title';
-                               $this->dfltNamespace = NS_MAIN;
-                               $this->hasNamespace = true;
+                               $this->useIndex = 'pl_namespace';
                                $this->indexTag = 'l';
                                $this->description = 'Enumerate all links that point to a given namespace';
                                $this->descriptionWhat = 'link';
@@ -50,9 +56,8 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                $prefix = 'at';
                                $this->table = 'templatelinks';
                                $this->tablePrefix = 'tl_';
-                               $this->fieldTitle = 'title';
                                $this->dfltNamespace = NS_TEMPLATE;
-                               $this->hasNamespace = true;
+                               $this->useIndex = 'tl_namespace';
                                $this->indexTag = 't';
                                $this->description =
                                        'List all transclusions (pages embedded using {{x}}), including non-existing';
@@ -73,6 +78,24 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                $this->descriptionTargets = 'file titles';
                                $this->descriptionLinking = 'using';
                                break;
+                       case 'allredirects':
+                               $prefix = 'ar';
+                               $this->table = 'redirect';
+                               $this->tablePrefix = 'rd_';
+                               $this->indexTag = 'r';
+                               $this->description = 'List all redirects to a namespace';
+                               $this->descriptionWhat = 'redirect';
+                               $this->descriptionTargets = 'target pages';
+                               $this->descriptionLinking = 'redirecting';
+                               $this->props = array(
+                                       'fragment' => 'rd_fragment',
+                                       'interwiki' => 'rd_interwiki',
+                               );
+                               $this->propHelp = array(
+                                       ' fragment - Adds the fragment from the redirect, if any',
+                                       ' interwiki - Adds the interwiki prefix from the redirect, if any',
+                               );
+                               break;
                        default:
                                ApiBase::dieDebug( __METHOD__, 'Unknown module name' );
                }
@@ -112,10 +135,11 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                }
 
                if ( $params['unique'] ) {
-                       if ( $fld_ids ) {
+                       $matches = array_intersect_key( $prop, $this->props + array( 'ids' => 1 ) );
+                       if ( $matches ) {
+                               $p = $this->getModulePrefix();
                                $this->dieUsage(
-                                       "{$this->getModuleName()} cannot return corresponding page " .
-                                               "ids in unique {$this->descriptionWhat}s mode",
+                                       "Cannot use {$p}prop=" . join( '|', array_keys( $matches ) ) . " with {$p}unique",
                                        'params'
                                );
                        }
@@ -149,21 +173,24 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
 
                // 'continue' always overrides 'from'
                $from = ( $continue || $params['from'] === null ? null :
-                       $this->titlePartToKey( $params['from'], $params['namespace'] ) );
+                       $this->titlePartToKey( $params['from'], $namespace ) );
                $to = ( $params['to'] === null ? null :
-                       $this->titlePartToKey( $params['to'], $params['namespace'] ) );
+                       $this->titlePartToKey( $params['to'], $namespace ) );
                $this->addWhereRange( $pfx . $fieldTitle, 'newer', $from, $to );
 
                if ( isset( $params['prefix'] ) ) {
                        $this->addWhere( $pfx . $fieldTitle . $db->buildLike( $this->titlePartToKey(
-                               $params['prefix'], $params['namespace'] ), $db->anyString() ) );
+                               $params['prefix'], $namespace ), $db->anyString() ) );
                }
 
                $this->addFields( array( 'pl_title' => $pfx . $fieldTitle ) );
                $this->addFieldsIf( array( 'pl_from' => $pfx . 'from' ), !$params['unique'] );
+               foreach ( $this->props as $name => $field ) {
+                       $this->addFieldsIf( $field, isset( $prop[$name] ) );
+               }
 
-               if ( $this->hasNamespace ) {
-                       $this->addOption( 'USE INDEX', $pfx . 'namespace' );
+               if ( $this->useIndex ) {
+                       $this->addOption( 'USE INDEX', $this->useIndex );
                }
                $limit = $params['limit'];
                $this->addOption( 'LIMIT', $limit + 1 );
@@ -203,6 +230,11 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                        $title = Title::makeTitle( $namespace, $row->pl_title );
                                        ApiQueryBase::addTitleInfo( $vals, $title );
                                }
+                               foreach ( $this->props as $name => $field ) {
+                                       if ( isset( $prop[$name] ) && $row->$field !== null && $row->$field !== '' ) {
+                                               $vals[$name] = $row->$field;
+                                       }
+                               }
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
                                if ( !$fit ) {
                                        if ( $params['unique'] ) {
@@ -238,10 +270,9 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_DFLT => 'title',
-                               ApiBase::PARAM_TYPE => array(
-                                       'ids',
-                                       'title'
-                               )
+                               ApiBase::PARAM_TYPE => array_merge(
+                                       array( 'ids', 'title' ), array_keys( $this->props )
+                               ),
                        ),
                        'namespace' => array(
                                ApiBase::PARAM_DFLT => $this->dfltNamespace,
@@ -279,19 +310,23 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                        'to' => "The title of the $what to stop enumerating at",
                        'prefix' => "Search for all $targets that begin with this value",
                        'unique' => array(
-                               "Only show distinct $targets. Cannot be used with {$p}prop=ids.",
+                               "Only show distinct $targets. Cannot be used with {$p}prop=" .
+                                       join( '|', array_keys( array( 'ids' => 1 ) + $this->props ) ) . '.',
                                'When used as a generator, yields target pages instead of source pages.',
                        ),
                        'prop' => array(
                                'What pieces of information to include',
-                               " ids    - Adds the pageid of the $linking page (Cannot be used with {$p}unique)",
-                               " title  - Adds the title of the $what",
+                               " ids      - Adds the pageid of the $linking page (Cannot be used with {$p}unique)",
+                               " title    - Adds the title of the $what",
                        ),
                        'namespace' => 'The namespace to enumerate',
                        'limit' => 'How many total items to return',
                        'continue' => 'When more results are available, use this to continue',
                        'dir' => 'The direction in which to list',
                );
+               foreach ( $this->propHelp as $help ) {
+                       $paramDescription['prop'][] = "$help (Cannot be used with {$p}unique)";
+               }
                if ( !$this->hasNamespace ) {
                        unset( $paramDescription['namespace'] );
                }
index 6b1d5a2..09f40fd 100644 (file)
@@ -285,7 +285,7 @@ class ApiQueryAllMessages extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Return messages from this site';
+               return 'Return messages from this site.';
        }
 
        public function getExamples() {
index 501154a..8ae8f3e 100644 (file)
@@ -341,7 +341,7 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'Enumerate all pages sequentially in a given namespace';
+               return 'Enumerate all pages sequentially in a given namespace.';
        }
 
        public function getPossibleErrors() {
index 748dbaf..7915118 100644 (file)
@@ -438,7 +438,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Enumerate all registered users';
+               return 'Enumerate all registered users.';
        }
 
        public function getPossibleErrors() {
index bda1e03..9502d11 100644 (file)
@@ -534,13 +534,13 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
        public function getDescription() {
                switch ( $this->getModuleName() ) {
                        case 'backlinks':
-                               return 'Find all pages that link to the given page';
+                               return 'Find all pages that link to the given page.';
                        case 'embeddedin':
-                               return 'Find all pages that embed (transclude) the given title';
+                               return 'Find all pages that embed (transclude) the given title.';
                        case 'imageusage':
                                return 'Find all pages that use the given image title.';
                        default:
-                               ApiBase::dieDebug( __METHOD__, 'Unknown module name' );
+                               ApiBase::dieDebug( __METHOD__, 'Unknown module name.' );
                }
        }
 
index 57f76bc..6cc0183 100644 (file)
@@ -408,14 +408,14 @@ class ApiQueryBlocks extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'List all blocked users and IP addresses';
+               return 'List all blocked users and IP addresses.';
        }
 
        public function getPossibleErrors() {
                global $wgBlockCIDRLimit;
 
                return array_merge( parent::getPossibleErrors(),
-                       $this->getRequireOnlyOneParameterErrorMessages( array( 'users', 'ip' ) ),
+                       $this->getRequireMaxOneParameterErrorMessages( array( 'users', 'ip' ) ),
                        array(
                                array(
                                        'code' => 'cidrtoobroad',
index c5b12b3..30d7449 100644 (file)
@@ -254,7 +254,7 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'List all categories the page(s) belong to';
+               return 'List all categories the page(s) belong to.';
        }
 
        public function getPossibleErrors() {
index 574ef6e..d0e3a36 100644 (file)
@@ -143,7 +143,7 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Returns information about the given categories';
+               return 'Returns information about the given categories.';
        }
 
        public function getExamples() {
index f7bd59a..4e942d6 100644 (file)
@@ -401,7 +401,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'List all pages in a given category';
+               return 'List all pages in a given category.';
        }
 
        public function getPossibleErrors() {
index 37fb489..912ac02 100644 (file)
@@ -275,7 +275,7 @@ class ApiQueryContributors extends ApiQueryBase {
 
        public function getDescription() {
                return 'Get the list of logged-in contributors and ' .
-                       'the count of anonymous contributors to a page';
+                       'the count of anonymous contributors to a page.';
        }
 
        public function getExamples() {
index 365fe3f..f738c50 100644 (file)
@@ -492,12 +492,12 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                return array(
                        'List deleted revisions.',
                        'Operates in three modes:',
-                       ' 1) List deleted revisions for the given title(s), sorted by timestamp',
-                       ' 2) List deleted contributions for the given user, sorted by timestamp (no titles specified)',
+                       ' 1) List deleted revisions for the given title(s), sorted by timestamp.',
+                       ' 2) List deleted contributions for the given user, sorted by timestamp (no titles specified).',
                        " 3) List all deleted revisions in the given namespace, sorted by title and timestamp',
-                       '    (no titles specified, {$p}user not set)",
+                       '    (no titles specified, {$p}user not set).",
                        'Certain parameters only apply to some modes and are ignored in others.',
-                       'For instance, a parameter marked (1) only applies to mode 1 and is ignored in modes 2 and 3',
+                       'For instance, a parameter marked (1) only applies to mode 1 and is ignored in modes 2 and 3.',
                );
        }
 
index 1854694..3105f91 100644 (file)
@@ -200,7 +200,7 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'List all files that are duplicates of the given file(s) based on hash values';
+               return 'List all files that are duplicates of the given file(s) based on hash values.';
        }
 
        public function getExamples() {
index d220817..f09fbd5 100644 (file)
@@ -257,7 +257,7 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'Enumerate pages that contain a given URL';
+               return 'Enumerate pages that contain a given URL.';
        }
 
        public function getPossibleErrors() {
index 5803ea7..f7a0958 100644 (file)
@@ -150,7 +150,7 @@ class ApiQueryExternalLinks extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Returns all external URLs (not interwikis) from the given page(s)';
+               return 'Returns all external URLs (not interwikis) from the given page(s).';
        }
 
        public function getPossibleErrors() {
index bcbc642..e12d927 100644 (file)
@@ -367,7 +367,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Enumerate all deleted files sequentially';
+               return 'Enumerate all deleted files sequentially.';
        }
 
        public function getPossibleErrors() {
index 03a72a6..e4cecd5 100644 (file)
@@ -231,7 +231,7 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                return array( 'Find all pages that link to the given interwiki link.',
                        'Can be used to find all links with a prefix, or',
                        'all links to a title (with a given prefix).',
-                       'Using neither parameter is effectively "All IW Links"',
+                       'Using neither parameter is effectively "All IW Links".',
                );
        }
 
index be64d36..a7b69a0 100644 (file)
@@ -185,7 +185,7 @@ class ApiQueryIWLinks extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Returns all interwiki links from the given page(s)';
+               return 'Returns all interwiki links from the given page(s).';
        }
 
        public function getPossibleErrors() {
index 95c1420..369d4c9 100644 (file)
@@ -873,7 +873,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Returns image information and upload history';
+               return 'Returns image information and upload history.';
        }
 
        public function getPossibleErrors() {
index a32fb9e..a66ad40 100644 (file)
@@ -180,7 +180,7 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'Returns all images contained on the given page(s)';
+               return 'Returns all images contained on the given page(s).';
        }
 
        public function getExamples() {
index a20b855..8e155f2 100644 (file)
@@ -41,11 +41,18 @@ class ApiQueryLangLinks extends ApiQueryBase {
                }
 
                $params = $this->extractRequestParams();
+               $prop = array_flip( (array)$params['prop'] );
 
                if ( isset( $params['title'] ) && !isset( $params['lang'] ) ) {
                        $this->dieUsageMsg( array( 'missingparam', 'lang' ) );
                }
 
+               // Handle deprecated param
+               $this->requireMaxOneParameter( $params, 'url', 'prop' );
+               if ( $params['url'] ) {
+                       $prop = array( 'url' => 1 );
+               }
+
                $this->addFields( array(
                        'll_from',
                        'll_lang',
@@ -104,12 +111,18 @@ class ApiQueryLangLinks extends ApiQueryBase {
                                break;
                        }
                        $entry = array( 'lang' => $row->ll_lang );
-                       if ( $params['url'] ) {
+                       if ( isset( $prop['url'] ) ) {
                                $title = Title::newFromText( "{$row->ll_lang}:{$row->ll_title}" );
                                if ( $title ) {
                                        $entry['url'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
                                }
                        }
+                       if ( isset( $prop['langname'] ) ) {
+                               $entry['langname'] = Language::fetchLanguageName( $row->ll_lang, $params['inlanguagecode'] );
+                       }
+                       if ( isset( $prop['autonym'] ) ) {
+                               $entry['autonym'] = Language::fetchLanguageName( $row->ll_lang );
+                       }
                        ApiResult::setContent( $entry, $row->ll_title );
                        $fit = $this->addPageSubItem( $row->ll_from, $entry );
                        if ( !$fit ) {
@@ -124,6 +137,7 @@ class ApiQueryLangLinks extends ApiQueryBase {
        }
 
        public function getAllowedParams() {
+               global $wgContLang;
                return array(
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
@@ -133,7 +147,18 @@ class ApiQueryLangLinks extends ApiQueryBase {
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
                        'continue' => null,
-                       'url' => false,
+                       'url' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
+                       ),
+                       'prop' => array(
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_TYPE => array(
+                                       'url',
+                                       'langname',
+                                       'autonym',
+                               )
+                       ),
                        'lang' => null,
                        'title' => null,
                        'dir' => array(
@@ -143,6 +168,7 @@ class ApiQueryLangLinks extends ApiQueryBase {
                                        'descending'
                                )
                        ),
+                       'inlanguagecode' => $wgContLang->getCode(),
                );
        }
 
@@ -150,10 +176,18 @@ class ApiQueryLangLinks extends ApiQueryBase {
                return array(
                        'limit' => 'How many langlinks to return',
                        'continue' => 'When more results are available, use this to continue',
-                       'url' => 'Whether to get the full URL',
+                       'url' => "Whether to get the full URL (Cannot be used with {$this->getModulePrefix()}prop)",
+                       'prop' => array(
+                               'Which additional properties to get for each interlanguage link',
+                               ' url      - Adds the full URL',
+                               ' langname - Adds the localised language name (best effort, use CLDR extension)',
+                               "            Use {$this->getModulePrefix()}inlanguagecode to control the language",
+                               ' autonym  - Adds the native language name',
+                       ),
                        'lang' => 'Language code',
                        'title' => "Link to search for. Must be used with {$this->getModulePrefix()}lang",
                        'dir' => 'The direction in which to list',
+                       'inlanguagecode' => 'Language code for localised language names',
                );
        }
 
@@ -165,19 +199,32 @@ class ApiQueryLangLinks extends ApiQueryBase {
                                        ApiBase::PROP_TYPE => 'string',
                                        ApiBase::PROP_NULLABLE => true
                                ),
+                               'langname' => array(
+                                       ApiBase::PROP_TYPE => 'string',
+                                       ApiBase::PROP_NULLABLE => true
+                               ),
+                               'autonym' => array(
+                                       ApiBase::PROP_TYPE => 'string',
+                                       ApiBase::PROP_NULLABLE => true
+                               ),
                                '*' => 'string'
                        )
                );
        }
 
        public function getDescription() {
-               return 'Returns all interlanguage links from the given page(s)';
+               return 'Returns all interlanguage links from the given page(s).';
        }
 
        public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'missingparam', 'lang' ),
-               ) );
+               return array_merge( parent::getPossibleErrors(),
+                       $this->getRequireMaxOneParameterErrorMessages(
+                               array( 'url', 'prop' )
+                       ),
+                       array(
+                               array( 'missingparam', 'lang' ),
+                       )
+               );
        }
 
        public function getExamples() {
index 1eecbe2..dd816cf 100644 (file)
@@ -233,7 +233,7 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return "Returns all {$this->description}s from the given page(s)";
+               return "Returns all {$this->description}s from the given page(s).";
        }
 
        public function getExamples() {
index 1578775..b607ca5 100644 (file)
@@ -65,7 +65,6 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
                // Order is significant here
                $this->addTables( array( 'logging', 'user', 'page' ) );
-               $this->addOption( 'STRAIGHT_JOIN' );
                $this->addJoinConds( array(
                        'user' => array( 'LEFT JOIN',
                                'user_id=log_user' ),
@@ -104,7 +103,26 @@ class ApiQueryLogEvents extends ApiQueryBase {
                }
 
                if ( !is_null( $params['action'] ) ) {
-                       list( $type, $action ) = explode( '/', $params['action'] );
+                       // Do validation of action param, list of allowed actions can contains wildcards
+                       // Allow the param, when the actions is in the list or a wildcard version is listed.
+                       $logAction = $params['action'];
+                       if ( strpos( $logAction, '/' ) === false ) {
+                               // all items in the list have a slash
+                               $valid = false;
+                       } else {
+                               $logActions = array_flip( $this->getAllowedLogActions() );
+                               list( $type, $action ) = explode( '/', $logAction, 2 );
+                               $valid = isset( $logActions[$logAction] ) || isset( $logActions[$type . '/*'] );
+                       }
+
+                       if ( !$valid ) {
+                               $valueName = $this->encodeParamName( 'action' );
+                               $this->dieUsage(
+                                       "Unrecognized value for parameter '$valueName': {$logAction}",
+                                       "unknown_$valueName"
+                               );
+                       }
+
                        $this->addWhereFld( 'log_type', $type );
                        $this->addWhereFld( 'log_action', $action );
                } elseif ( !is_null( $params['type'] ) ) {
@@ -405,6 +423,12 @@ class ApiQueryLogEvents extends ApiQueryBase {
                return $vals;
        }
 
+       private function getAllowedLogActions() {
+               global $wgLogActions, $wgLogActionsHandlers;
+
+               return array_keys( array_merge( $wgLogActions, $wgLogActionsHandlers ) );
+       }
+
        public function getCacheMode( $params ) {
                if ( $this->userCanSeeRevDel() ) {
                        return 'private';
@@ -421,8 +445,8 @@ class ApiQueryLogEvents extends ApiQueryBase {
                }
        }
 
-       public function getAllowedParams() {
-               global $wgLogTypes, $wgLogActions, $wgLogActionsHandlers;
+       public function getAllowedParams( $flags = 0 ) {
+               global $wgLogTypes;
 
                return array(
                        'prop' => array(
@@ -445,7 +469,10 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => $wgLogTypes
                        ),
                        'action' => array(
-                               ApiBase::PARAM_TYPE => array_keys( array_merge( $wgLogActions, $wgLogActionsHandlers ) )
+                               // validation on request is done in execute()
+                               ApiBase::PARAM_TYPE => ( $flags & ApiBase::GET_VALUES_FOR_HELP )
+                                       ? $this->getAllowedLogActions()
+                                       : null
                        ),
                        'start' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
@@ -492,7 +519,10 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                ' tags           - Lists tags for the event',
                        ),
                        'type' => 'Filter log entries to only this type',
-                       'action' => "Filter log actions to only this type. Overrides {$p}type",
+                       'action' => array(
+                               "Filter log actions to only this action. Overrides {$p}type",
+                               "Wildcard actions like 'action/*' allows to specify any string for the asterisk"
+                       ),
                        'start' => 'The timestamp to start enumerating from',
                        'end' => 'The timestamp to end enumerating',
                        'dir' => $this->getDirectionDescription( $p ),
@@ -562,7 +592,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Get events from logs';
+               return 'Get events from logs.';
        }
 
        public function getPossibleErrors() {
index 5438175..c387475 100644 (file)
@@ -102,7 +102,7 @@ class ApiQueryPagePropNames extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'List all page prop names in use on the wiki';
+               return 'List all page prop names in use on the wiki.';
        }
 
        public function getExamples() {
index e51c7ab..52be5ca 100644 (file)
@@ -141,7 +141,7 @@ class ApiQueryPageProps extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Get various properties defined in the page content';
+               return 'Get various properties defined in the page content.';
        }
 
        public function getExamples() {
index e68eb56..df07249 100644 (file)
@@ -174,7 +174,7 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'List all pages using a given page prop';
+               return 'List all pages using a given page prop.';
        }
 
        public function getExamples() {
index ea350ad..9cdd6b9 100644 (file)
@@ -258,7 +258,7 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'List all titles protected from creation';
+               return 'List all titles protected from creation.';
        }
 
        public function getExamples() {
index 88af62b..b13f797 100644 (file)
@@ -34,15 +34,10 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
 
        public function __construct( $query, $moduleName ) {
                parent::__construct( $query, $moduleName, 'qp' );
-               // We need to do this to make sure $wgQueryPages is set up
-               // This SUCKS
-               global $IP;
-               require_once "$IP/includes/QueryPage.php";
-
                // Build mapping from special page names to QueryPage classes
-               global $wgQueryPages, $wgAPIUselessQueryPages;
+               global $wgAPIUselessQueryPages;
                $this->qpMap = array();
-               foreach ( $wgQueryPages as $page ) {
+               foreach ( QueryPage::getPages() as $page ) {
                        if ( !in_array( $page[1], $wgAPIUselessQueryPages ) ) {
                                $this->qpMap[$page[1]] = $page[0];
                        }
@@ -203,7 +198,7 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'Get a list provided by a QueryPage-based special page';
+               return 'Get a list provided by a QueryPage-based special page.';
        }
 
        public function getPossibleErrors() {
index 0d54ffe..5f85e0e 100644 (file)
@@ -185,13 +185,13 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
 
        public function getDescription() {
                return array(
-                       'Get a set of random pages',
+                       'Get a set of random pages.',
                        'NOTE: Pages are listed in a fixed sequence, only the starting point is random.',
                        '      This means that if, for example, "Main Page" is the first random page on',
                        '      your list, "List of fictional monkeys" will *always* be second, "List of',
-                       '      people on stamps of Vanuatu" third, etc',
+                       '      people on stamps of Vanuatu" third, etc.',
                        'NOTE: If the number of pages in the namespace is lower than rnlimit, you will',
-                       '      get fewer pages. You will not get the same page twice'
+                       '      get fewer pages. You will not get the same page twice.'
                );
        }
 
index 6ccc288..0284916 100644 (file)
@@ -281,8 +281,8 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        /* Add fields to our query if they are specified as a needed parameter. */
                        $this->addFieldsIf( array( 'rc_this_oldid', 'rc_last_oldid' ), $this->fld_ids );
                        $this->addFieldsIf( 'rc_comment', $this->fld_comment || $this->fld_parsedcomment );
-                       $this->addFieldsIf( 'rc_user', $this->fld_user );
-                       $this->addFieldsIf( 'rc_user_text', $this->fld_user || $this->fld_userid );
+                       $this->addFieldsIf( 'rc_user', $this->fld_user || $this->fld_userid );
+                       $this->addFieldsIf( 'rc_user_text', $this->fld_user );
                        $this->addFieldsIf( array( 'rc_minor', 'rc_type', 'rc_bot' ), $this->fld_flags );
                        $this->addFieldsIf( array( 'rc_old_len', 'rc_new_len' ), $this->fld_sizes );
                        $this->addFieldsIf( 'rc_patrolled', $this->fld_patrolled );
@@ -892,7 +892,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'Enumerate recent changes';
+               return 'Enumerate recent changes.';
        }
 
        public function getPossibleErrors() {
diff --git a/includes/api/ApiQueryRedirects.php b/includes/api/ApiQueryRedirects.php
new file mode 100644 (file)
index 0000000..1deb1f8
--- /dev/null
@@ -0,0 +1,267 @@
+<?php
+/**
+ * API module to return redirects to a page
+ *
+ * Created on Dec 30, 2013
+ *
+ * Copyright © 2013 Brad Jorsch <bjorsch@wikimedia.org>
+ *
+ * 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.23
+ */
+
+/**
+ * This query lists redirects to the given pages.
+ *
+ * @ingroup API
+ */
+class ApiQueryRedirects extends ApiQueryGeneratorBase {
+
+       public function __construct( $query, $moduleName ) {
+               parent::__construct( $query, $moduleName, 'rd' );
+       }
+
+       public function execute() {
+               $this->run();
+       }
+
+       public function executeGenerator( $resultPageSet ) {
+               $this->run( $resultPageSet );
+       }
+
+       /**
+        * @param $resultPageSet ApiPageSet
+        */
+       private function run( ApiPageSet $resultPageSet = null ) {
+               $db = $this->getDB();
+               $params = $this->extractRequestParams();
+               $emptyString = $db->addQuotes( '' );
+
+               $pageSet = $this->getPageSet();
+               $titles = $pageSet->getGoodTitles() + $pageSet->getMissingTitles();
+
+               if ( !is_null( $params['continue'] ) ) {
+                       $cont = explode( '|', $params['continue'] );
+                       $this->dieContinueUsageIf( count( $cont ) != 3 );
+                       $rd_namespace = (int)$cont[0];
+                       $this->dieContinueUsageIf( $rd_namespace != $cont[0] );
+                       $rd_title = $db->addQuotes( $cont[1] );
+                       $rd_from = (int)$cont[2];
+                       $this->dieContinueUsageIf( $rd_from != $cont[2] );
+                       $this->addWhere(
+                               "rd_namespace > $rd_namespace OR " .
+                               "(rd_namespace = $rd_namespace AND " .
+                               "(rd_title > $rd_title OR " .
+                               "(rd_title = $rd_title AND " .
+                               "rd_from >= $rd_from)))"
+                       );
+
+                       // Remove titles that we're past already
+                       $titles = array_filter( $titles, function ( $t ) use ( $rd_namespace, $rd_title ) {
+                               $ns = $t->getNamespace();
+                               return ( $ns > $rd_namespace ||
+                                       $ns == $rd_namespace && $t->getDBKey() >= $rd_title
+                               );
+                       } );
+               }
+
+               if ( !$titles ) {
+                       return; // nothing to do
+               }
+
+               $this->addTables( array( 'redirect', 'page' ) );
+               $this->addFields( array(
+                       'rd_from',
+                       'rd_namespace',
+                       'rd_title',
+               ) );
+
+               if ( is_null( $resultPageSet ) ) {
+                       $prop = array_flip( $params['prop'] );
+                       $fld_pageid = isset( $prop['pageid'] );
+                       $fld_title = isset( $prop['title'] );
+                       $fld_fragment = isset( $prop['fragment'] );
+
+                       $this->addFieldsIf( 'rd_fragment', $fld_fragment );
+                       $this->addFieldsIf( array( 'page_namespace', 'page_title' ), $fld_title );
+               } else {
+                       $this->addFields( array( 'page_namespace', 'page_title' ) );
+               }
+
+               $lb = new LinkBatch( $titles );
+               $this->addWhere( array(
+                       'rd_from = page_id',
+                       "rd_interwiki = $emptyString OR rd_interwiki IS NULL",
+                       $lb->constructSet( 'rd', $db ),
+               ) );
+
+               if ( $params['show'] !== null ) {
+                       $show = array_flip( $params['show'] );
+                       if ( isset( $show['fragment'] ) && isset( $show['!fragment'] ) ) {
+                               $this->dieUsageMsg( 'show' );
+                       }
+                       $this->addWhereIf( "rd_fragment != $emptyString", isset( $show['fragment'] ) );
+                       $this->addWhereIf( "rd_fragment = $emptyString OR rd_fragment IS NULL", isset( $show['!fragment'] ) );
+               }
+
+               $map = $pageSet->getAllTitlesByNamespace();
+
+               // Why, MySQL? Why do you do this to us?
+               $sortby = array();
+               if ( count( $map ) > 1 ) {
+                       $sortby[] = 'rd_namespace';
+               }
+               $theTitle = null;
+               foreach ( $map as $nsTitles ) {
+                       reset( $nsTitles );
+                       $key = key( $nsTitles );
+                       if ( $theTitle === null ) {
+                               $theTitle = $key;
+                       }
+                       if ( count( $nsTitles ) > 1 || $key !== $theTitle ) {
+                               $sortby[] = 'rd_title';
+                               break;
+                       }
+               }
+               $sortby[] = 'rd_from';
+               $this->addOption( 'ORDER BY', $sortby );
+
+               $this->addOption( 'LIMIT', $params['limit'] + 1 );
+
+               $res = $this->select( __METHOD__ );
+
+               if ( is_null( $resultPageSet ) ) {
+                       $count = 0;
+                       foreach ( $res as $row ) {
+                               if ( ++$count > $params['limit'] ) {
+                                       // We've reached the one extra which shows that
+                                       // there are additional pages to be had. Stop here...
+                                       $this->setContinueEnumParameter( 'continue',
+                                               "$row->rd_namespace|$row->rd_title|$row->rd_from"
+                                       );
+                                       break;
+                               }
+
+                               # Get the ID of the current page
+                               $id = $map[$row->rd_namespace][$row->rd_title];
+
+                               $vals = array();
+                               if ( $fld_pageid ) {
+                                       $vals['pageid'] = $row->rd_from;
+                               }
+                               if ( $fld_title ) {
+                                       ApiQueryBase::addTitleInfo( $vals,
+                                               Title::makeTitle( $row->page_namespace, $row->page_title )
+                                       );
+                               }
+                               if ( $fld_fragment && $row->rd_fragment !== null && $row->rd_fragment !== '' ) {
+                                       $vals['fragment'] = $row->rd_fragment;
+                               }
+                               $fit = $this->addPageSubItem( $id, $vals );
+                               if ( !$fit ) {
+                                       $this->setContinueEnumParameter( 'continue',
+                                               "$row->rd_namespace|$row->rd_title|$row->rd_from"
+                                       );
+                                       break;
+                               }
+                       }
+               } else {
+                       $titles = array();
+                       $count = 0;
+                       foreach ( $res as $row ) {
+                               if ( ++$count > $params['limit'] ) {
+                                       // We've reached the one extra which shows that
+                                       // there are additional pages to be had. Stop here...
+                                       $this->setContinueEnumParameter( 'continue',
+                                               "$row->rd_namespace|$row->rd_title|$row->rd_from"
+                                       );
+                                       break;
+                               }
+                               $titles[] = Title::makeTitle( $row->page_namespace, $row->page_title );
+                       }
+                       $resultPageSet->populateFromTitles( $titles );
+               }
+       }
+
+       public function getCacheMode( $params ) {
+               return 'public';
+       }
+
+       public function getAllowedParams() {
+               return array(
+                       'prop' => array(
+                               ApiBase::PARAM_TYPE => array(
+                                       'pageid',
+                                       'title',
+                                       'fragment',
+                               ),
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_DFLT => 'pageid|title',
+                       ),
+                       'show' => array(
+                               ApiBase::PARAM_TYPE => array(
+                                       'fragment', '!fragment',
+                               ),
+                               ApiBase::PARAM_ISMULTI => true,
+                       ),
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => null,
+               );
+       }
+
+       public function getParamDescription() {
+               return array(
+                       'prop' => array(
+                               'Which properties to get:',
+                               ' pageid   - Page id of each redirect',
+                               ' title    - Title of each redirect',
+                               ' fragment - Fragment of each redirect, if any',
+                       ),
+                       'show' => array(
+                               'Show only items that meet this criteria.',
+                               ' fragment  - Only show redirects with a fragment',
+                               ' !fragment - Only show redirects without a fragment',
+                       ),
+                       'limit' => 'How many redirects to return',
+                       'continue' => 'When more results are available, use this to continue',
+               );
+       }
+
+       public function getDescription() {
+               return 'Returns all redirects to the given page(s).';
+       }
+
+       public function getExamples() {
+               return array(
+                       'api.php?action=query&prop=redirects&titles=Main%20Page'
+                               => 'Get a list of redirects to the [[Main Page]]',
+                       'api.php?action=query&generator=redirects&titles=Main%20Page&prop=info'
+                               => 'Get information about all redirects to the [[Main Page]]',
+               );
+       }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:Properties#redirects_.2F_rd';
+       }
+}
index 65cb16d..033976f 100644 (file)
@@ -874,12 +874,12 @@ class ApiQueryRevisions extends ApiQueryBase {
 
        public function getDescription() {
                return array(
-                       'Get revision information',
+                       'Get revision information.',
                        'May be used in several ways:',
-                       ' 1) Get data about a set of pages (last revision), by setting titles or pageids parameter',
-                       ' 2) Get revisions for one given page, by using titles/pageids with start/end/limit params',
-                       ' 3) Get data about a set of revisions by setting their IDs with revids parameter',
-                       'All parameters marked as (enum) may only be used with a single page (#2)'
+                       ' 1) Get data about a set of pages (last revision), by setting titles or pageids parameter.',
+                       ' 2) Get revisions for one given page, by using titles/pageids with start/end/limit params.',
+                       ' 3) Get data about a set of revisions by setting their IDs with revids parameter.',
+                       'All parameters marked as (enum) may only be used with a single page (#2).'
                );
        }
 
index 4fedebc..fcaaf10 100644 (file)
@@ -63,6 +63,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                $limit = $params['limit'];
                $query = $params['search'];
                $what = $params['what'];
+               $interwiki = $params['interwiki'];
                $searchInfo = array_flip( $params['info'] );
                $prop = array_flip( $params['prop'] );
 
@@ -197,10 +198,52 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                        $result = $matches->next();
                }
 
+               $hasInterwikiResults = false;
+               if ( $interwiki && $resultPageSet === null && $matches->hasInterwikiResults() ) {
+                       $matches = $matches->getInterwikiResults();
+                       $iwprefixes = array();
+                       $hasInterwikiResults = true;
+
+                       // Include number of results if requested
+                       if ( isset( $searchInfo['totalhits'] ) ) {
+                               $totalhits = $matches->getTotalHits();
+                               if ( $totalhits !== null ) {
+                                       $apiResult->addValue( array( 'query', 'interwikisearchinfo' ),
+                                               'totalhits', $totalhits );
+                               }
+                       }
+
+                       $result = $matches->next();
+                       while ( $result ) {
+                               $title = $result->getTitle();
+                               $vals = array(
+                                       'namespace' => $result->getInterwikiNamespaceText(),
+                                       'title' => $title->getText(),
+                                       'url' => $title->getFullUrl(),
+                               );
+
+                               // Add item to results and see whether it fits
+                               $fit = $apiResult->addValue( array( 'query', 'interwiki' . $this->getModuleName(), $result->getInterwikiPrefix()  ),
+                                       null, $vals );
+                               if ( !$fit ) {
+                                       // We hit the limit. We can't really provide any meaningful
+                                       // pagination info so just bail out
+                                       break;
+                               }
+
+                               $result = $matches->next();
+                       }
+               }
+
                if ( is_null( $resultPageSet ) ) {
                        $apiResult->setIndexedTagName_internal( array(
                                'query', $this->getModuleName()
                        ), 'p' );
+                       if ( $hasInterwikiResults ) {
+                               $apiResult->setIndexedTagName_internal( array(
+                                       'query', 'interwiki' . $this->getModuleName()
+                               ), 'p' );
+                       }
                } else {
                        $resultPageSet->populateFromTitles( $titles );
                }
@@ -264,7 +307,8 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MIN => 1,
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_SML1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_SML2
-                       )
+                       ),
+                       'interwiki' => false,
                );
 
                $alternatives = SearchEngine::getSearchTypes();
@@ -303,7 +347,8 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                        ),
                        'redirects' => 'Include redirect pages in the search',
                        'offset' => 'Use this value to continue paging (return by query)',
-                       'limit' => 'How many total pages to return'
+                       'limit' => 'How many total pages to return',
+                       'interwiki' => 'Include interwiki results in the search, if available'
                );
 
                if ( count( SearchEngine::getSearchTypes() ) > 1 ) {
@@ -371,7 +416,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'Perform a full text search';
+               return 'Perform a full text search.';
        }
 
        public function getPossibleErrors() {
index 9cf3afd..1cd8d98 100644 (file)
@@ -78,6 +78,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                case 'rightsinfo':
                                        $fit = $this->appendRightsInfo( $p );
                                        break;
+                               case 'restrictions':
+                                       $fit = $this->appendRestrictions( $p );
+                                       break;
                                case 'languages':
                                        $fit = $this->appendLanguages( $p );
                                        break;
@@ -615,6 +618,25 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                return $this->getResult()->addValue( 'query', $property, $data );
        }
 
+       protected function appendRestrictions( $property ) {
+               global $wgRestrictionTypes, $wgRestrictionLevels,
+                       $wgCascadingRestrictionLevels, $wgSemiprotectedRestrictionLevels;
+
+               $data = array(
+                       'types' => $wgRestrictionTypes,
+                       'levels' => $wgRestrictionLevels,
+                       'cascadinglevels' => $wgCascadingRestrictionLevels,
+                       'semiprotectedlevels' => $wgSemiprotectedRestrictionLevels,
+               );
+
+               $this->getResult()->setIndexedTagName( $data['types'], 'type' );
+               $this->getResult()->setIndexedTagName( $data['levels'], 'level' );
+               $this->getResult()->setIndexedTagName( $data['cascadinglevels'], 'level' );
+               $this->getResult()->setIndexedTagName( $data['semiprotectedlevels'], 'level' );
+
+               return $this->getResult()->addValue( 'query', $property, $data );
+       }
+
        public function appendLanguages( $property ) {
                $params = $this->extractRequestParams();
                $langCode = isset( $params['inlanguagecode'] ) ? $params['inlanguagecode'] : '';
@@ -737,6 +759,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                        'extensions',
                                        'fileextensions',
                                        'rightsinfo',
+                                       'restrictions',
                                        'languages',
                                        'skins',
                                        'extensiontags',
@@ -778,6 +801,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                ' extensions            - Returns extensions installed on the wiki',
                                ' fileextensions        - Returns list of file extensions allowed to be uploaded',
                                ' rightsinfo            - Returns wiki rights (license) information if available',
+                               ' restrictions          - Returns information on available restriction (protection) types',
                                ' languages             - Returns a list of languages MediaWiki supports' .
                                        "(optionally localised by using {$p}inlanguagecode)",
                                ' skins                 - Returns a list of all enabled skins',
@@ -797,7 +821,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Return general information about the site';
+               return 'Return general information about the site.';
        }
 
        public function getPossibleErrors() {
index 248b3d8..3595cf9 100644 (file)
@@ -129,7 +129,7 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
        }
 
        public function getDescription() {
-               return 'Returns image information for stashed images';
+               return 'Returns image information for stashed images.';
        }
 
        public function getExamples() {
index 33116ce..9e2559f 100644 (file)
@@ -188,7 +188,7 @@ class ApiQueryTags extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'List change tags';
+               return 'List change tags.';
        }
 
        public function getExamples() {
index b492d9a..b58a951 100644 (file)
@@ -56,6 +56,11 @@ class ApiQueryContributions extends ApiQueryBase {
                $this->fld_patrolled = isset( $prop['patrolled'] );
                $this->fld_tags = isset( $prop['tags'] );
 
+               // Most of this code will use the 'contributions' group DB, which can map to slaves
+               // with extra user based indexes or partioning by user. The additional metadata
+               // queries should use a regular slave since the lookup pattern is not all by user.
+               $dbSecondary = $this->getDB(); // any random slave
+
                // TODO: if the query is going only against the revision table, should this be done?
                $this->selectNamedDB( 'contributions', DB_SLAVE, 'contributions' );
 
@@ -90,7 +95,7 @@ class ApiQueryContributions extends ApiQueryBase {
                                        $revIds[] = $row->rev_parent_id;
                                }
                        }
-                       $this->parentLens = Revision::getParentLengths( $this->getDB(), $revIds );
+                       $this->parentLens = Revision::getParentLengths( $dbSecondary, $revIds );
                        $res->rewind(); // reset
                }
 
@@ -207,10 +212,16 @@ class ApiQueryContributions extends ApiQueryBase {
                $this->addWhereFld( 'page_namespace', $this->params['namespace'] );
 
                $show = $this->params['show'];
+               if ( $this->params['toponly'] ) { // deprecated/old param
+                       $show[] = 'top';
+               }
                if ( !is_null( $show ) ) {
                        $show = array_flip( $show );
+
                        if ( ( isset( $show['minor'] ) && isset( $show['!minor'] ) )
                                || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) )
+                               || ( isset( $show['top'] ) && isset( $show['!top'] ) )
+                               || ( isset( $show['new'] ) && isset( $show['!new'] ) )
                        ) {
                                $this->dieUsageMsg( 'show' );
                        }
@@ -219,6 +230,10 @@ class ApiQueryContributions extends ApiQueryBase {
                        $this->addWhereIf( 'rev_minor_edit != 0', isset( $show['minor'] ) );
                        $this->addWhereIf( 'rc_patrolled = 0', isset( $show['!patrolled'] ) );
                        $this->addWhereIf( 'rc_patrolled != 0', isset( $show['patrolled'] ) );
+                       $this->addWhereIf( 'rev_id != page_latest', isset( $show['!top'] ) );
+                       $this->addWhereIf( 'rev_id = page_latest', isset( $show['top'] ) );
+                       $this->addWhereIf( 'rev_parent_id != 0', isset( $show['!new'] ) );
+                       $this->addWhereIf( 'rev_parent_id = 0', isset( $show['new'] ) );
                }
                $this->addOption( 'LIMIT', $this->params['limit'] + 1 );
                $index = array( 'revision' => 'usertext_timestamp' );
@@ -294,10 +309,6 @@ class ApiQueryContributions extends ApiQueryBase {
                        $this->addWhereFld( 'ct_tag', $this->params['tag'] );
                }
 
-               if ( $this->params['toponly'] ) {
-                       $this->addWhere( 'rev_id = page_latest' );
-               }
-
                $this->addOption( 'USE INDEX', $index );
        }
 
@@ -477,10 +488,17 @@ class ApiQueryContributions extends ApiQueryBase {
                                        '!minor',
                                        'patrolled',
                                        '!patrolled',
+                                       'top',
+                                       '!top',
+                                       'new',
+                                       '!new',
                                )
                        ),
                        'tag' => null,
-                       'toponly' => false,
+                       'toponly' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
+                       ),
                );
        }
 
@@ -583,7 +601,7 @@ class ApiQueryContributions extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Get all edits by a user';
+               return 'Get all edits by a user.';
        }
 
        public function getPossibleErrors() {
index 37cf483..200b03b 100644 (file)
@@ -299,7 +299,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Get information about the current user';
+               return 'Get information about the current user.';
        }
 
        public function getExamples() {
index cd4a8fc..d98cc39 100644 (file)
@@ -387,7 +387,7 @@ class ApiQueryUsers extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Get information about a list of users';
+               return 'Get information about a list of users.';
        }
 
        public function getExamples() {
index b7dc865..6baa87d 100644 (file)
@@ -674,7 +674,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return "Get all recent changes to pages in the logged in user's watchlist";
+               return "Get all recent changes to pages in the logged in user's watchlist.";
        }
 
        public function getPossibleErrors() {
index b53bea1..f45d0e4 100644 (file)
@@ -205,7 +205,7 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return "Get all pages on the logged in user's watchlist";
+               return "Get all pages on the logged in user's watchlist.";
        }
 
        public function getPossibleErrors() {
index 05457b3..1400b0d 100644 (file)
@@ -217,7 +217,7 @@ class ApiRevisionDelete extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Delete/undelete revisions';
+               return 'Delete/undelete revisions.';
        }
 
        public function getPossibleErrors() {
index 2a372e4..70a2fec 100644 (file)
@@ -141,7 +141,7 @@ class ApiRollback extends ApiBase {
        public function getDescription() {
                return array(
                        'Undo the last edit to the page. If the last user who edited the page made',
-                       'multiple edits in a row, they will all be rolled back'
+                       'multiple edits in a row, they will all be rolled back.'
                );
        }
 
index e01f0fa..285177c 100644 (file)
@@ -60,7 +60,7 @@ class ApiRsd extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Export an RSD (Really Simple Discovery) schema';
+               return 'Export an RSD (Really Simple Discovery) schema.';
        }
 
        public function getExamples() {
index 6862668..5e197db 100644 (file)
@@ -98,7 +98,7 @@ class ApiTokens extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Gets tokens for data-modifying actions';
+               return 'Gets tokens for data-modifying actions.';
        }
 
        protected function getExamples() {
index 46e2f6e..f34d4df 100644 (file)
@@ -131,7 +131,7 @@ class ApiUnblock extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Unblock a user';
+               return 'Unblock a user.';
        }
 
        public function getPossibleErrors() {
index 93cefef..332ed51 100644 (file)
@@ -143,7 +143,7 @@ class ApiUndelete extends ApiBase {
        public function getDescription() {
                return array(
                        'Restore certain revisions of a deleted page. A list of deleted revisions ',
-                       '(including timestamps) can be retrieved through list=deletedrevs'
+                       '(including timestamps) can be retrieved through list=deletedrevs.'
                );
        }
 
index 7d0d78e..c54e8ba 100644 (file)
@@ -819,7 +819,7 @@ class ApiUpload extends ApiBase {
                        ' * Have the MediaWiki server fetch a file from a URL, using the "url" parameter',
                        ' * Complete an earlier upload that failed due to warnings, using the "filekey" parameter',
                        'Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when',
-                       'sending the "file". Also you must get and send an edit token before doing any upload stuff'
+                       'sending the "file". Also you must get and send an edit token before doing any upload stuff.'
                );
        }
 
index 2bd7321..0bed859 100644 (file)
@@ -123,7 +123,7 @@ class ApiUserrights extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Add/remove a user to/from groups';
+               return 'Add/remove a user to/from groups.';
        }
 
        public function needsToken() {
index 100ee96..6dfb1b4 100644 (file)
@@ -211,7 +211,7 @@ class ApiWatch extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Add or remove pages from/to the current user\'s watchlist';
+               return 'Add or remove pages from/to the current user\'s watchlist.';
        }
 
        public function getPossibleErrors() {
index 409160c..c56111f 100644 (file)
@@ -541,18 +541,27 @@ class LocalisationCache {
         */
        protected function readJSONFile( $fileName ) {
                wfProfileIn( __METHOD__ );
+
                if ( !is_readable( $fileName ) ) {
+                       wfProfileOut( __METHOD__ );
+
                        return array();
                }
 
                $json = file_get_contents( $fileName );
                if ( $json === false ) {
+                       wfProfileOut( __METHOD__ );
+
                        return array();
                }
+
                $data = FormatJson::decode( $json, true );
                if ( $data === null ) {
+                       wfProfileOut( __METHOD__ );
+
                        throw new MWException( __METHOD__ . ": Invalid JSON file: $fileName" );
                }
+
                // Remove keys starting with '@', they're reserved for metadata and non-message data
                foreach ( $data as $key => $unused ) {
                        if ( $key === '' || $key[0] === '@' ) {
@@ -560,6 +569,8 @@ class LocalisationCache {
                        }
                }
 
+               wfProfileOut( __METHOD__ );
+
                // The JSON format only supports messages, none of the other variables, so wrap the data
                return array( 'messages' => $data );
        }
index 3dee806..daaa915 100644 (file)
@@ -728,11 +728,17 @@ class MessageCache {
 
                // Normalise title-case input (with some inlining)
                $lckey = strtr( $key, ' ', '_' );
-               if ( ord( $key ) < 128 ) {
+               if ( ord( $lckey ) < 128 ) {
                        $lckey[0] = strtolower( $lckey[0] );
-                       $uckey = ucfirst( $lckey );
                } else {
                        $lckey = $wgContLang->lcfirst( $lckey );
+               }
+
+               wfRunHooks( 'MessageCache::get', array( &$lckey ) );
+
+               if ( ord( $lckey ) < 128 ) {
+                       $uckey = ucfirst( $lckey );
+               } else {
                        $uckey = $wgContLang->ucfirst( $lckey );
                }
 
diff --git a/includes/cache/ProcessCacheLRU.php b/includes/cache/ProcessCacheLRU.php
deleted file mode 100644 (file)
index 786d74a..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-/**
- * Per-process memory cache for storing items.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Cache
- */
-
-/**
- * Handles per process caching of items
- * @ingroup Cache
- */
-class ProcessCacheLRU {
-       /** @var Array */
-       protected $cache = array(); // (key => prop => value)
-       /** @var Array */
-       protected $cacheTimes = array(); // (key => prop => UNIX timestamp)
-
-       protected $maxCacheKeys; // integer; max entries
-
-       /**
-        * @param $maxKeys integer Maximum number of entries allowed (min 1).
-        * @throws MWException When $maxCacheKeys is not an int or =< 0.
-        */
-       public function __construct( $maxKeys ) {
-               if ( !is_int( $maxKeys ) || $maxKeys < 1 ) {
-                       throw new MWException( __METHOD__ . " must be given an integer and >= 1" );
-               }
-               $this->maxCacheKeys = $maxKeys;
-       }
-
-       /**
-        * Set a property field for a cache entry.
-        * This will prune the cache if it gets too large based on LRU.
-        * If the item is already set, it will be pushed to the top of the cache.
-        *
-        * @param $key string
-        * @param $prop string
-        * @param $value mixed
-        * @return void
-        */
-       public function set( $key, $prop, $value ) {
-               if ( isset( $this->cache[$key] ) ) {
-                       $this->ping( $key ); // push to top
-               } elseif ( count( $this->cache ) >= $this->maxCacheKeys ) {
-                       reset( $this->cache );
-                       $evictKey = key( $this->cache );
-                       unset( $this->cache[$evictKey] );
-                       unset( $this->cacheTimes[$evictKey] );
-               }
-               $this->cache[$key][$prop] = $value;
-               $this->cacheTimes[$key][$prop] = time();
-       }
-
-       /**
-        * Check if a property field exists for a cache entry.
-        *
-        * @param $key string
-        * @param $prop string
-        * @param $maxAge integer Ignore items older than this many seconds (since 1.21)
-        * @return bool
-        */
-       public function has( $key, $prop, $maxAge = 0 ) {
-               if ( isset( $this->cache[$key][$prop] ) ) {
-                       return ( $maxAge <= 0 || ( time() - $this->cacheTimes[$key][$prop] ) <= $maxAge );
-               }
-
-               return false;
-       }
-
-       /**
-        * Get a property field for a cache entry.
-        * This returns null if the property is not set.
-        * If the item is already set, it will be pushed to the top of the cache.
-        *
-        * @param $key string
-        * @param $prop string
-        * @return mixed
-        */
-       public function get( $key, $prop ) {
-               if ( isset( $this->cache[$key][$prop] ) ) {
-                       $this->ping( $key ); // push to top
-                       return $this->cache[$key][$prop];
-               } else {
-                       return null;
-               }
-       }
-
-       /**
-        * Clear one or several cache entries, or all cache entries
-        *
-        * @param $keys string|Array
-        * @return void
-        */
-       public function clear( $keys = null ) {
-               if ( $keys === null ) {
-                       $this->cache = array();
-                       $this->cacheTimes = array();
-               } else {
-                       foreach ( (array)$keys as $key ) {
-                               unset( $this->cache[$key] );
-                               unset( $this->cacheTimes[$key] );
-                       }
-               }
-       }
-
-       /**
-        * Push an entry to the top of the cache
-        *
-        * @param $key string
-        */
-       protected function ping( $key ) {
-               $item = $this->cache[$key];
-               unset( $this->cache[$key] );
-               $this->cache[$key] = $item;
-       }
-}
index b996894..ca9efc3 100644 (file)
@@ -80,6 +80,14 @@ class ChangesList extends ContextSource {
                $this->watchlist = $value;
        }
 
+       /**
+        * @return bool true when setWatchlistDivs has been called
+        * @since 1.23
+        */
+       public function isWatchlist() {
+               return (bool)$this->watchlist;
+       }
+
        /**
         * As we use the same small set of messages in various methods and that
         * they are called often, we call them once and save them in $this->message
index df60f02..feb6d7b 100644 (file)
  */
 
 class EnhancedChangesList extends ChangesList {
-       /** @var array Array of array of RCCacheEntry */
+
+       /**
+        * @var RCCacheEntryFactory
+        */
+       protected $cacheEntryFactory;
+
+       /**
+        * @var array Array of array of RCCacheEntry
+        */
        protected $rc_cache;
 
+       /**
+        * @param IContextSource|Skin $obj
+        */
+       public function __construct( $obj ) {
+               if ( $obj instanceof Skin ) {
+                       // @todo: deprecate constructing with Skin
+                       $context = $obj->getContext();
+               } else {
+                       if ( ! $obj instanceof IContextSource ) {
+                               throw new MWException( 'EnhancedChangesList must be constructed with a '
+                                       . 'context source or skin.' );
+                       }
+
+                       $context = $obj;
+               }
+
+               parent::__construct( $context );
+
+               // message is set by the parent ChangesList class
+               $this->cacheEntryFactory = new RCCacheEntryFactory(
+                       $context,
+                       $this->message
+               );
+       }
+
        /**
         * Add the JavaScript file for enhanced changeslist
         * @return string
@@ -73,127 +106,25 @@ class EnhancedChangesList extends ChangesList {
                        $this->lastdate = $date;
                }
 
-               # Create a specialised object
-               $cacheEntry = RCCacheEntry::newFromParent( $baseRC );
-
-               $curIdEq = array( 'curid' => $cacheEntry->mAttribs['rc_cur_id'] );
-
-               # Should patrol-related stuff be shown?
-               $cacheEntry->unpatrolled = $this->showAsUnpatrolled( $cacheEntry );
-
-               $showdifflinks = true;
-
-               # Make article link
-               $type = $cacheEntry->mAttribs['rc_type'];
-               $logType = $cacheEntry->mAttribs['rc_log_type'];
-
-               // Page moves, very old style, not supported anymore
-               if ( $type == RC_MOVE || $type == RC_MOVE_OVER_REDIRECT ) {
-                       $clink = '';
-               // New unpatrolled pages
-               } elseif ( $cacheEntry->unpatrolled && $type == RC_NEW ) {
-                       $clink = Linker::linkKnown( $cacheEntry->getTitle() );
-               // Log entries
-               } elseif ( $type == RC_LOG ) {
-                       if ( $logType ) {
-                               $logtitle = SpecialPage::getTitleFor( 'Log', $logType );
-                               $logpage = new LogPage( $logType );
-                               $logname = $logpage->getName()->escaped();
-                               $clink = $this->msg( 'parentheses' )
-                                       ->rawParams( Linker::linkKnown( $logtitle, $logname ) )->escaped();
-                       } else {
-                               $clink = Linker::link( $cacheEntry->getTitle() );
-                       }
-                       $watched = false;
-               // Log entries (old format) and special pages
-               } elseif ( $cacheEntry->mAttribs['rc_namespace'] == NS_SPECIAL ) {
-                       wfDebug( "Unexpected special page in recentchanges\n" );
-                       $clink = '';
-               // Edits
-               } else {
-                       $clink = Linker::linkKnown( $cacheEntry->getTitle() );
-               }
-
-               # Don't show unusable diff links
-               if ( !ChangesList::userCan( $cacheEntry, Revision::DELETED_TEXT, $this->getUser() ) ) {
-                       $showdifflinks = false;
-               }
-
-               $time = $this->getLanguage()->userTime( $cacheEntry->mAttribs['rc_timestamp'], $this->getUser() );
-
-               $cacheEntry->watched = $watched;
-               $cacheEntry->link = $clink;
-               $cacheEntry->timestamp = $time;
-               $cacheEntry->numberofWatchingusers = $baseRC->numberofWatchingusers;
-
-               # Make "cur" and "diff" links.  Do not use link(), it is too slow if
-               # called too many times (50% of CPU time on RecentChanges!).
-               $thisOldid = $cacheEntry->mAttribs['rc_this_oldid'];
-               $lastOldid = $cacheEntry->mAttribs['rc_last_oldid'];
-
-               $querycur = $curIdEq + array( 'diff' => '0', 'oldid' => $thisOldid );
-               $querydiff = $curIdEq + array( 'diff' => $thisOldid, 'oldid' => $lastOldid );
-
-               if ( !$showdifflinks ) {
-                       $curLink = $this->message['cur'];
-                       $diffLink = $this->message['diff'];
-               } elseif ( in_array( $type, array( RC_NEW, RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT ) ) ) {
-                       if ( $type != RC_NEW ) {
-                               $curLink = $this->message['cur'];
-                       } else {
-                               $curUrl = htmlspecialchars( $cacheEntry->getTitle()->getLinkURL( $querycur ) );
-                               $curLink = "<a href=\"$curUrl\" tabindex=\"{$baseRC->counter}\">{$this->message['cur']}</a>";
-                       }
-                       $diffLink = $this->message['diff'];
-               } else {
-                       $diffUrl = htmlspecialchars( $cacheEntry->getTitle()->getLinkURL( $querydiff ) );
-                       $curUrl = htmlspecialchars( $cacheEntry->getTitle()->getLinkURL( $querycur ) );
-                       $diffLink = "<a href=\"$diffUrl\" tabindex=\"{$baseRC->counter}\">{$this->message['diff']}</a>";
-                       $curLink = "<a href=\"$curUrl\" tabindex=\"{$baseRC->counter}\">{$this->message['cur']}</a>";
-               }
-
-               # Make "last" link
-               if ( !$showdifflinks || !$lastOldid ) {
-                       $lastLink = $this->message['last'];
-               } elseif ( in_array( $type, array( RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT ) ) ) {
-                       $lastLink = $this->message['last'];
-               } else {
-                       $lastLink = Linker::linkKnown( $cacheEntry->getTitle(), $this->message['last'],
-                               array(), $curIdEq + array( 'diff' => $thisOldid, 'oldid' => $lastOldid ) );
-               }
-
-               # Make user links
-               if ( $this->isDeleted( $cacheEntry, Revision::DELETED_USER ) ) {
-                       $cacheEntry->userlink = ' <span class="history-deleted">' .
-                               $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
-               } else {
-                       $cacheEntry->userlink = Linker::userLink(
-                               $cacheEntry->mAttribs['rc_user'],
-                               $cacheEntry->mAttribs['rc_user_text']
-                       );
-
-                       $cacheEntry->usertalklink = Linker::userToolLinks(
-                               $cacheEntry->mAttribs['rc_user'],
-                               $cacheEntry->mAttribs['rc_user_text']
-                       );
-               }
-
-               $cacheEntry->lastlink = $lastLink;
-               $cacheEntry->curlink = $curLink;
-               $cacheEntry->difflink = $diffLink;
+               $cacheEntry = $this->cacheEntryFactory->newFromRecentChange( $baseRC, $watched );
 
                # Put accumulated information into the cache, for later display
                # Page moves go on their own line
                $title = $cacheEntry->getTitle();
                $secureName = $title->getPrefixedDBkey();
 
+               $type = $cacheEntry->mAttribs['rc_type'];
+
                if ( $type == RC_MOVE || $type == RC_MOVE_OVER_REDIRECT ) {
                        # Use an @ character to prevent collision with page names
                        $this->rc_cache['@@' . ( $this->rcMoveIndex++ )] = array( $cacheEntry );
                } else {
                        # Logs are grouped by type
                        if ( $type == RC_LOG ) {
-                               $secureName = SpecialPage::getTitleFor( 'Log', $logType )->getPrefixedDBkey();
+                               $secureName = SpecialPage::getTitleFor(
+                                       'Log',
+                                       $cacheEntry->mAttribs['rc_log_type']
+                               )->getPrefixedDBkey();
                        }
                        if ( !isset( $this->rc_cache[$secureName] ) ) {
                                $this->rc_cache[$secureName] = array();
index 9cb1146..458f21a 100644 (file)
@@ -37,9 +37,6 @@ class OldChangesList extends ChangesList {
                # Should patrol-related stuff be shown?
                $unpatrolled = $this->showAsUnpatrolled( $rc );
 
-               $dateheader = ''; // $s now contains only <li>...</li>, for hooks' convenience.
-               $this->insertDateHeader( $dateheader, $rc->mAttribs['rc_timestamp'] );
-
                $s = '';
                $classes = array();
                // use mw-line-even/mw-line-odd class only if linenumber is given (feature from bug 14468)
@@ -128,6 +125,9 @@ class OldChangesList extends ChangesList {
 
                wfProfileOut( __METHOD__ );
 
+               $dateheader = ''; // $s now contains only <li>...</li>, for hooks' convenience.
+               $this->insertDateHeader( $dateheader, $rc->mAttribs['rc_timestamp'] );
+
                return "$dateheader<li class=\"" . implode( ' ', $classes ) . "\">" . $s . "</li>\n";
        }
 }
diff --git a/includes/changes/RCCacheEntryFactory.php b/includes/changes/RCCacheEntryFactory.php
new file mode 100644 (file)
index 0000000..3e289cf
--- /dev/null
@@ -0,0 +1,278 @@
+<?php
+/**
+ * Creates a RCCacheEntry from a RecentChange to use in EnhancedChangesList
+ *
+ * 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 RCCacheEntryFactory {
+
+       /* @var IContextSource */
+       private $context;
+
+       /* @var string[] */
+       private $messages;
+
+       /**
+        * @param IContextSource $context
+        * @param string[] $messages
+        */
+       public function __construct( IContextSource $context, $messages ) {
+               $this->context = $context;
+               $this->messages = $messages;
+       }
+
+       /**
+        * @param RecentChange $baseRC
+        * @param boolean $watched
+        *
+        * @return RCCacheEntry
+        */
+       public function newFromRecentChange( RecentChange $baseRC, $watched ) {
+               $user = $this->context->getUser();
+               $counter = $baseRC->counter;
+
+               $cacheEntry = RCCacheEntry::newFromParent( $baseRC );
+
+               // Should patrol-related stuff be shown?
+               $cacheEntry->unpatrolled = ChangesList::isUnpatrolled( $baseRC, $user );
+
+               $cacheEntry->watched = $cacheEntry->mAttribs['rc_type'] == RC_LOG ? false : $watched;
+               $cacheEntry->numberofWatchingusers = $baseRC->numberofWatchingusers;
+
+               $cacheEntry->link = $this->buildCLink( $cacheEntry );
+               $cacheEntry->timestamp = $this->buildTimestamp( $cacheEntry );
+
+               // Make "cur" and "diff" links.  Do not use link(), it is too slow if
+               // called too many times (50% of CPU time on RecentChanges!).
+               $showDiffLinks = $this->showDiffLinks( $cacheEntry, $user );
+
+               $cacheEntry->difflink = $this->buildDiffLink( $cacheEntry, $showDiffLinks, $counter );
+               $cacheEntry->curlink = $this->buildCurLink( $cacheEntry, $showDiffLinks, $counter );
+               $cacheEntry->lastlink = $this->buildLastLink( $cacheEntry, $showDiffLinks );
+
+               // Make user links
+               $cacheEntry->userlink = $this->getUserLink( $cacheEntry );
+
+               if ( !ChangesList::isDeleted( $cacheEntry, Revision::DELETED_USER ) ) {
+                       $cacheEntry->usertalklink = Linker::userToolLinks(
+                               $cacheEntry->mAttribs['rc_user'],
+                               $cacheEntry->mAttribs['rc_user_text']
+                       );
+               }
+
+               return $cacheEntry;
+       }
+
+       /**
+        * @param RecentChange $cacheEntry
+        * @param User $user
+        *
+        * @return boolean
+        */
+       private function showDiffLinks( RecentChange $cacheEntry, User $user ) {
+               return ChangesList::userCan( $cacheEntry, Revision::DELETED_TEXT, $user );
+       }
+
+       /**
+        * @param RecentChange $cacheEntry
+        *
+        * @return string
+        */
+       private function buildCLink( RecentChange $cacheEntry ) {
+               $type = $cacheEntry->mAttribs['rc_type'];
+
+               // Page moves, very old style, not supported anymore
+               if ( $type == RC_MOVE || $type == RC_MOVE_OVER_REDIRECT ) {
+                       $clink = '';
+               // New unpatrolled pages
+               } elseif ( $cacheEntry->unpatrolled && $type == RC_NEW ) {
+                       $clink = Linker::linkKnown( $cacheEntry->getTitle() );
+               // Log entries
+               } elseif ( $type == RC_LOG ) {
+                       $logType = $cacheEntry->mAttribs['rc_log_type'];
+
+                       if ( $logType ) {
+                               $clink = $this->getLogLink( $logType );
+                       } else {
+                               wfDebugLog( 'recentchanges', 'Unexpected log entry with no log type in recent changes' );
+                               $clink = Linker::link( $cacheEntry->getTitle() );
+                       }
+               // Log entries (old format) and special pages
+               } elseif ( $cacheEntry->mAttribs['rc_namespace'] == NS_SPECIAL ) {
+                       wfDebugLog( 'recentchanges', 'Unexpected special page in recentchanges' );
+                       $clink = '';
+               // Edits
+               } else {
+                       $clink = Linker::linkKnown( $cacheEntry->getTitle() );
+               }
+
+               return $clink;
+       }
+
+       private function getLogLink( $logType ) {
+               $logtitle = SpecialPage::getTitleFor( 'Log', $logType );
+               $logpage = new LogPage( $logType );
+               $logname = $logpage->getName()->escaped();
+
+               $logLink = $this->context->msg( 'parentheses' )
+                       ->rawParams( Linker::linkKnown( $logtitle, $logname ) )->escaped();
+
+               return $logLink;
+       }
+
+       /**
+        * @param RecentChange $cacheEntry
+        *
+        * @return string
+        */
+       private function buildTimestamp( RecentChange $cacheEntry ) {
+               return $this->context->getLanguage()->userTime(
+                       $cacheEntry->mAttribs['rc_timestamp'],
+                       $this->context->getUser()
+               );
+       }
+
+       /**
+        * @param RecentChange $recentChange
+        *
+        * @return array
+        */
+       private function buildCurQueryParams( RecentChange $recentChange ) {
+               return array(
+                       'curid' => $recentChange->mAttribs['rc_cur_id'],
+                       'diff' => 0,
+                       'oldid' => $recentChange->mAttribs['rc_this_oldid']
+               );
+       }
+
+       /**
+        * @param RecentChange $cacheEntry
+        * @param boolean $showDiffLinks
+        * @param int $counter
+        *
+        * @return string
+        */
+       private function buildCurLink( RecentChange $cacheEntry, $showDiffLinks, $counter ) {
+               $queryParams = $this->buildCurQueryParams( $cacheEntry );
+               $curMessage = $this->getMessage( 'cur' );
+               $logTypes = array( RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT );
+
+               if ( !$showDiffLinks || in_array( $cacheEntry->mAttribs['rc_type'], $logTypes ) ) {
+                       $curLink = $curMessage;
+               } else {
+                       $curUrl = htmlspecialchars( $cacheEntry->getTitle()->getLinkURL( $queryParams ) );
+                       $curLink = "<a href=\"$curUrl\" tabindex=\"$counter\">$curMessage</a>";
+               }
+
+               return $curLink;
+       }
+
+       /**
+        * @param RecentChange $recentChange
+        *
+        * @return array
+        */
+       private function buildDiffQueryParams( RecentChange $recentChange ) {
+               return array(
+                       'curid' => $recentChange->mAttribs['rc_cur_id'],
+                       'diff' => $recentChange->mAttribs['rc_this_oldid'],
+                       'oldid' => $recentChange->mAttribs['rc_last_oldid']
+               );
+       }
+
+       /**
+        * @param RecentChange $cacheEntry
+        * @param boolean $showDiffLinks
+        * @param int $counter
+        *
+        * @return string
+        */
+       private function buildDiffLink( RecentChange $cacheEntry, $showDiffLinks, $counter ) {
+               $queryParams = $this->buildDiffQueryParams( $cacheEntry );
+               $diffMessage = $this->getMessage( 'diff' );
+               $logTypes = array( RC_NEW, RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT );
+
+               if ( !$showDiffLinks ) {
+                       $diffLink = $diffMessage;
+               } elseif ( in_array( $cacheEntry->mAttribs['rc_type'], $logTypes ) ) {
+                       $diffLink = $diffMessage;
+               } else {
+                       $diffUrl = htmlspecialchars( $cacheEntry->getTitle()->getLinkURL( $queryParams ) );
+                       $diffLink = "<a href=\"$diffUrl\" tabindex=\"$counter\">$diffMessage</a>";
+               }
+
+               return $diffLink;
+       }
+
+       /**
+        * @param RecentChange $cacheEntry
+        * @param boolean $showDiffLinks
+        *
+        * @return string
+        */
+       private function buildLastLink( RecentChange $cacheEntry, $showDiffLinks ) {
+               $lastOldid = $cacheEntry->mAttribs['rc_last_oldid'];
+               $lastMessage = $this->getMessage( 'last' );
+               $type = $cacheEntry->mAttribs['rc_type'];
+               $logTypes = array( RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT );
+
+               // Make "last" link
+               if ( !$showDiffLinks || !$lastOldid || in_array( $type, $logTypes ) ) {
+                       $lastLink = $lastMessage;
+               } else {
+                       $lastLink = Linker::linkKnown(
+                               $cacheEntry->getTitle(),
+                               $lastMessage,
+                               array(),
+                               $this->buildDiffQueryParams( $cacheEntry )
+                       );
+               }
+
+               return $lastLink;
+       }
+
+       /**
+        * @param RecentChange $cacheEntry
+        *
+        * @return string
+        */
+       private function getUserLink( RecentChange $cacheEntry ) {
+               if ( ChangesList::isDeleted( $cacheEntry, Revision::DELETED_USER ) ) {
+                       $userLink = ' <span class="history-deleted">' .
+                               $this->context->msg( 'rev-deleted-user' )->escaped() . '</span>';
+               } else {
+                       $userLink = Linker::userLink(
+                               $cacheEntry->mAttribs['rc_user'],
+                               $cacheEntry->mAttribs['rc_user_text']
+                       );
+               }
+
+               return $userLink;
+       }
+
+       /**
+        * @param string $key
+        *
+        * @return string
+        */
+       private function getMessage( $key ) {
+               return $this->messages[$key];
+       }
+
+}
index 01ad724..072aa12 100644 (file)
@@ -52,7 +52,6 @@
  * mExtra:
  *  prefixedDBkey   prefixed db key, used by external app via msg queue
  *  lastTimestamp   timestamp of previous entry, used in WHERE clause during update
- *  lang            the interwiki prefix, automatically set in save()
  *  oldSize         text size before the change
  *  newSize         text size after the change
  *  pageStatus      status of the page: created, deleted, moved, restored, changed
@@ -231,13 +230,12 @@ class RecentChange {
         * @param $noudp bool
         */
        public function save( $noudp = false ) {
-               global $wgLocalInterwiki, $wgPutIPinRC, $wgUseEnotif, $wgShowUpdatedMarker, $wgContLang;
+               global $wgPutIPinRC, $wgUseEnotif, $wgShowUpdatedMarker, $wgContLang;
 
                $dbw = wfGetDB( DB_MASTER );
                if ( !is_array( $this->mExtra ) ) {
                        $this->mExtra = array();
                }
-               $this->mExtra['lang'] = $wgLocalInterwiki;
 
                if ( !$wgPutIPinRC ) {
                        $this->mAttribs['rc_ip'] = '';
index 983d90a..9e702e3 100644 (file)
@@ -277,9 +277,24 @@ class RedisConnectionPool {
         * @param string $server
         * @param RedisConnRef $cref
         * @param RedisException $e
+        * @deprecated 1.23
         */
        public function handleException( $server, RedisConnRef $cref, RedisException $e ) {
-               wfDebugLog( 'redis', "Redis exception on server $server: " . $e->getMessage() );
+               return $this->handleError( $cref, $e );
+       }
+
+       /**
+        * The redis extension throws an exception in response to various read, write
+        * and protocol errors. Sometimes it also closes the connection, sometimes
+        * not. The safest response for us is to explicitly destroy the connection
+        * object and let it be reopened during the next request.
+        *
+        * @param RedisConnRef $cref
+        * @param RedisException $e
+        */
+       public function handleError( RedisConnRef $cref, RedisException $e ) {
+               $server = $cref->getServer();
+               wfDebugLog( 'redis', "Redis exception on server $server: " . $e->getMessage() . "\n" );
                foreach ( $this->connections[$server] as $key => $connection ) {
                        if ( $cref->isConnIdentical( $connection['conn'] ) ) {
                                $this->idlePoolSize -= $connection['free'] ? 1 : 0;
diff --git a/includes/composer/ComposerHookHandler.php b/includes/composer/ComposerHookHandler.php
new file mode 100644 (file)
index 0000000..6c310fd
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+
+use Composer\Package\Package;
+use Composer\Script\Event;
+
+$GLOBALS['IP'] = __DIR__ . '/../';
+require_once '../AutoLoader.php';
+
+/**
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class ComposerHookHandler {
+
+       public static function onPreUpdate( Event $event ) {
+               self::handleChangeEvent( $event );
+       }
+
+       public static function onPreInstall( Event $event ) {
+               self::handleChangeEvent( $event );
+       }
+
+       private static function handleChangeEvent( Event $event ) {
+               $package = $event->getComposer()->getPackage();
+
+               if ( $package instanceof Package ) {
+                       $packageModifier = new ComposerPackageModifier(
+                               $package,
+                               new ComposerVersionNormalizer(),
+                               new MediaWikiVersionFetcher()
+                       );
+
+                       $packageModifier->setProvidesMediaWiki();
+               }
+       }
+
+}
diff --git a/includes/composer/ComposerPackageModifier.php b/includes/composer/ComposerPackageModifier.php
new file mode 100644 (file)
index 0000000..ae8baf2
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+
+use Composer\Package\Link;
+use Composer\Package\LinkConstraint\VersionConstraint;
+use Composer\Package\Package;
+
+/**
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class ComposerPackageModifier {
+
+       const MEDIAWIKI_PACKAGE_NAME = 'mediawiki/mediawiki';
+
+       protected $package;
+       protected $versionNormalizer;
+       protected $versionFetcher;
+
+       public function __construct( Package $package, ComposerVersionNormalizer $versionNormalizer, MediaWikiVersionFetcher $versionFetcher ) {
+               $this->package = $package;
+               $this->versionNormalizer = $versionNormalizer;
+               $this->versionFetcher = $versionFetcher;
+       }
+
+       public function setProvidesMediaWiki() {
+               $this->setLinkAsProvides( $this->newMediaWikiLink() );
+       }
+
+       private function setLinkAsProvides( Link $link ) {
+               $this->package->setProvides( array( $link ) );
+       }
+
+       private function newMediaWikiLink() {
+               $version = $this->getMediaWikiVersionConstraint();
+
+               $link = new Link(
+                       '__root__',
+                       self::MEDIAWIKI_PACKAGE_NAME,
+                       $version,
+                       'provides',
+                       $version->getPrettyString()
+               );
+
+               return $link;
+       }
+
+       private function getMediaWikiVersionConstraint() {
+               $mvVersion = $this->versionFetcher->fetchVersion();
+               $mvVersion = $this->versionNormalizer->normalizeSuffix( $mvVersion );
+
+               $version = new VersionConstraint( '==', $this->versionNormalizer->normalizeLevelCount( $mvVersion ) );
+               $version->setPrettyString( $mvVersion );
+
+               return $version;
+       }
+
+}
diff --git a/includes/composer/ComposerVersionNormalizer.php b/includes/composer/ComposerVersionNormalizer.php
new file mode 100644 (file)
index 0000000..727e142
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class ComposerVersionNormalizer {
+
+       /**
+        * Ensures there is a dash in between the version and the stability suffix.
+        *
+        * Examples:
+        * - 1.23RC => 1.23-RC
+        * - 1.23alpha => 1.23-alpha
+        * - 1.23alpha3 => 1.23-alpha3
+        * - 1.23-beta => 1.23-beta
+        *
+        * @param string $version
+        *
+        * @return string
+        * @throws InvalidArgumentException
+        */
+       public function normalizeSuffix( $version ) {
+               if ( !is_string( $version ) ) {
+                       throw new InvalidArgumentException( '$version must be a string' );
+               }
+
+               return preg_replace( '/^(\d[\d\.]*)([a-zA-Z]+)(\d*)$/', '$1-$2$3', $version, 1 );
+       }
+
+       /**
+        * Ensures the version has four levels.
+        * Version suffixes are supported, as long as they start with a dash.
+        *
+        * Examples:
+        * - 1.19 => 1.19.0.0
+        * - 1.19.2.3 => 1.19.2.3
+        * - 1.19-alpha => 1.19.0.0-alpha
+        * - 1337 => 1337.0.0.0
+        *
+        * @param string $version
+        *
+        * @return string
+        * @throws InvalidArgumentException
+        */
+       public function normalizeLevelCount( $version ) {
+               if ( !is_string( $version ) ) {
+                       throw new InvalidArgumentException( '$version must be a string' );
+               }
+
+               $dashPosition = strpos( $version, '-' );
+
+               if ( $dashPosition !== false ) {
+                       $suffix = substr( $version, $dashPosition );
+                       $version = substr( $version, 0, $dashPosition );
+               }
+
+               $version = implode( '.', array_pad( explode( '.', $version ), 4, '0' ) );
+
+               if ( $dashPosition !== false ) {
+                       $version .= $suffix;
+               }
+
+               return $version;
+       }
+
+}
\ No newline at end of file
index e1b1f01..f2f0c9d 100644 (file)
@@ -43,7 +43,7 @@ abstract class AbstractContent implements Content {
        protected $model_id;
 
        /**
-        * @param string|null $modelId
+        * @param string $modelId
         *
         * @since 1.21
         */
@@ -52,23 +52,21 @@ abstract class AbstractContent implements Content {
        }
 
        /**
-        * @see Content::getModel
-        *
         * @since 1.21
+        *
+        * @see Content::getModel
         */
        public function getModel() {
                return $this->model_id;
        }
 
        /**
-        * Throws an MWException if $model_id is not the id of the content model
-        * supported by this Content object.
-        *
         * @since 1.21
         *
         * @param string $modelId The model to check
         *
-        * @throws MWException
+        * @throws MWException If the provided ID is not the ID of the content model supported by this
+        * Content object.
         */
        protected function checkModelID( $modelId ) {
                if ( $modelId !== $this->model_id ) {
@@ -81,40 +79,40 @@ abstract class AbstractContent implements Content {
        }
 
        /**
-        * @see Content::getContentHandler
-        *
         * @since 1.21
+        *
+        * @see Content::getContentHandler
         */
        public function getContentHandler() {
                return ContentHandler::getForContent( $this );
        }
 
        /**
-        * @see Content::getDefaultFormat
-        *
         * @since 1.21
+        *
+        * @see Content::getDefaultFormat
         */
        public function getDefaultFormat() {
                return $this->getContentHandler()->getDefaultFormat();
        }
 
        /**
-        * @see Content::getSupportedFormats
-        *
         * @since 1.21
+        *
+        * @see Content::getSupportedFormats
         */
        public function getSupportedFormats() {
                return $this->getContentHandler()->getSupportedFormats();
        }
 
        /**
-        * @see Content::isSupportedFormat
+        * @since 1.21
         *
         * @param string $format
         *
-        * @since 1.21
+        * @return bool
         *
-        * @return boolean
+        * @see Content::isSupportedFormat
         */
        public function isSupportedFormat( $format ) {
                if ( !$format ) {
@@ -125,13 +123,11 @@ abstract class AbstractContent implements Content {
        }
 
        /**
-        * Throws an MWException if $this->isSupportedFormat( $format ) does not
-        * return true.
-        *
         * @since 1.21
         *
-        * @param string $format
-        * @throws MWException
+        * @param string $format The serialization format to check.
+        *
+        * @throws MWException If the format is not supported by this content handler.
         */
        protected function checkFormat( $format ) {
                if ( !$this->isSupportedFormat( $format ) ) {
@@ -143,48 +139,50 @@ abstract class AbstractContent implements Content {
        }
 
        /**
-        * @see Content::serialize
-        *
-        * @param string|null $format
-        *
         * @since 1.21
         *
+        * @param string $format
+        *
         * @return string
+        *
+        * @see Content::serialize
         */
        public function serialize( $format = null ) {
                return $this->getContentHandler()->serializeContent( $this, $format );
        }
 
        /**
-        * @see Content::isEmpty
-        *
         * @since 1.21
         *
-        * @return boolean
+        * @return bool
+        *
+        * @see Content::isEmpty
         */
        public function isEmpty() {
                return $this->getSize() === 0;
        }
 
        /**
-        * @see Content::isValid
+        * Subclasses may override this to implement (light weight) validation.
         *
         * @since 1.21
         *
-        * @return boolean
+        * @return bool Always true.
+        *
+        * @see Content::isValid
         */
        public function isValid() {
                return true;
        }
 
        /**
-        * @see Content::equals
-        *
         * @since 1.21
         *
-        * @param Content|null $that
+        * @param Content $that
         *
-        * @return boolean
+        * @return bool
+        *
+        * @see Content::equals
         */
        public function equals( Content $that = null ) {
                if ( is_null( $that ) ) {
@@ -214,26 +212,19 @@ abstract class AbstractContent implements Content {
         * Subclasses may override this to determine the secondary data updates more
         * efficiently, preferably without the need to generate a parser output object.
         *
-        * @see Content::getSecondaryDataUpdates()
+        * @since 1.21
         *
-        * @param $title Title The context for determining the necessary updates
-        * @param $old Content|null An optional Content object representing the
-        *    previous content, i.e. the content being replaced by this Content
-        *    object.
-        * @param $recursive boolean Whether to include recursive updates (default:
-        *    false).
-        * @param $parserOutput ParserOutput|null Optional ParserOutput object.
-        *    Provide if you have one handy, to avoid re-parsing of the content.
+        * @param Title $title
+        * @param Content $old
+        * @param bool $recursive
+        * @param ParserOutput $parserOutput
         *
-        * @return Array. A list of DataUpdate objects for putting information
-        *    about this content object somewhere.
+        * @return DataUpdate[]
         *
-        * @since 1.21
+        * @see Content::getSecondaryDataUpdates()
         */
-       public function getSecondaryDataUpdates( Title $title,
-               Content $old = null,
-               $recursive = true, ParserOutput $parserOutput = null
-       ) {
+       public function getSecondaryDataUpdates( Title $title, Content $old = null,
+               $recursive = true, ParserOutput $parserOutput = null ) {
                if ( $parserOutput === null ) {
                        $parserOutput = $this->getParserOutput( $title, null, null, false );
                }
@@ -242,9 +233,11 @@ abstract class AbstractContent implements Content {
        }
 
        /**
-        * @see Content::getRedirectChain
-        *
         * @since 1.21
+        *
+        * @return Title[]|null
+        *
+        * @see Content::getRedirectChain
         */
        public function getRedirectChain() {
                global $wgMaxRedirects;
@@ -277,19 +270,26 @@ abstract class AbstractContent implements Content {
        }
 
        /**
-        * @see Content::getRedirectTarget
+        * Subclasses that implement redirects should override this.
         *
         * @since 1.21
+        *
+        * @return null
+        *
+        * @see Content::getRedirectTarget
         */
        public function getRedirectTarget() {
                return null;
        }
 
        /**
-        * @see Content::getUltimateRedirectTarget
-        * @note: migrated here from Title::newFromRedirectRecurse
+        * @note Migrated here from Title::newFromRedirectRecurse.
         *
         * @since 1.21
+        *
+        * @return Title|null
+        *
+        * @see Content::getUltimateRedirectTarget
         */
        public function getUltimateRedirectTarget() {
                $titles = $this->getRedirectChain();
@@ -298,80 +298,93 @@ abstract class AbstractContent implements Content {
        }
 
        /**
-        * @see Content::isRedirect
-        *
         * @since 1.21
         *
         * @return bool
+        *
+        * @see Content::isRedirect
         */
        public function isRedirect() {
                return $this->getRedirectTarget() !== null;
        }
 
        /**
-        * @see Content::updateRedirect
-        *
         * This default implementation always returns $this.
-        *
-        * @param Title $target
+        * Subclasses that implement redirects should override this.
         *
         * @since 1.21
         *
+        * @param Title $target
+        *
         * @return Content $this
+        *
+        * @see Content::updateRedirect
         */
        public function updateRedirect( Title $target ) {
                return $this;
        }
 
        /**
-        * @see Content::getSection
-        *
         * @since 1.21
+        *
+        * @return null
+        *
+        * @see Content::getSection
         */
        public function getSection( $sectionId ) {
                return null;
        }
 
        /**
-        * @see Content::replaceSection
-        *
         * @since 1.21
+        *
+        * @return null
+        *
+        * @see Content::replaceSection
         */
        public function replaceSection( $section, Content $with, $sectionTitle = '' ) {
                return null;
        }
 
        /**
-        * @see Content::preSaveTransform
-        *
         * @since 1.21
+        *
+        * @return Content $this
+        *
+        * @see Content::preSaveTransform
         */
        public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
                return $this;
        }
 
        /**
-        * @see Content::addSectionHeader
-        *
         * @since 1.21
+        *
+        * @return Content $this
+        *
+        * @see Content::addSectionHeader
         */
        public function addSectionHeader( $header ) {
                return $this;
        }
 
        /**
-        * @see Content::preloadTransform
-        *
         * @since 1.21
+        *
+        * @return Content $this
+        *
+        * @see Content::preloadTransform
         */
        public function preloadTransform( Title $title, ParserOptions $popts ) {
                return $this;
        }
 
        /**
-        * @see Content::prepareSave
-        *
         * @since 1.21
+        *
+        * @return Status
+        *
+        * @see Content::prepareSave
         */
        public function prepareSave( WikiPage $page, $flags, $baseRevId, User $user ) {
                if ( $this->isValid() ) {
@@ -382,21 +395,16 @@ abstract class AbstractContent implements Content {
        }
 
        /**
-        * @see Content::getDeletionUpdates
-        *
         * @since 1.21
         *
-        * @param $page WikiPage the deleted page
-        * @param $parserOutput null|ParserOutput optional parser output object
-        *    for efficient access to meta-information about the content object.
-        *    Provide if you have one handy.
+        * @param WikiPage $page
+        * @param ParserOutput $parserOutput
         *
-        * @return array A list of DataUpdate instances that will clean up the
-        *    database after deletion.
+        * @return LinksDeletionUpdate[]
+        *
+        * @see Content::getDeletionUpdates
         */
-       public function getDeletionUpdates( WikiPage $page,
-               ParserOutput $parserOutput = null
-       ) {
+       public function getDeletionUpdates( WikiPage $page, ParserOutput $parserOutput = null ) {
                return array(
                        new LinksDeletionUpdate( $page ),
                );
@@ -406,30 +414,28 @@ abstract class AbstractContent implements Content {
         * This default implementation always returns false. Subclasses may override
         * this to supply matching logic.
         *
-        * @see Content::matchMagicWord
-        *
         * @since 1.21
         *
         * @param MagicWord $word
         *
-        * @return bool
+        * @return bool Always false.
+        *
+        * @see Content::matchMagicWord
         */
        public function matchMagicWord( MagicWord $word ) {
                return false;
        }
 
        /**
-        * @see Content::convert()
-        *
         * This base implementation calls the hook ConvertContent to enable custom conversions.
         * Subclasses may override this to implement conversion for "their" content model.
         *
-        * @param string $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
-        * @param string $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
-        * not allowed, full round-trip conversion is expected to work without losing information.
+        * @param string $toModel
+        * @param string $lossy
+        *
+        * @return Content|bool
         *
-        * @return Content|bool A content object with the content model $toModel, or false if
-        * that conversion is not supported.
+        * @see Content::convert()
         */
        public function convert( $toModel, $lossy = '' ) {
                if ( $this->getModel() === $toModel ) {
index da49ced..075635d 100644 (file)
@@ -32,6 +32,7 @@
  * @ingroup Content
  */
 interface Content {
+
        /**
         * @since 1.21
         *
@@ -64,8 +65,9 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param int $maxLength Maximum length of the summary text
-        * @return string The summary text
+        * @param int $maxLength Maximum length of the summary text.
+        *
+        * @return string The summary text.
         */
        public function getTextForSummary( $maxLength = 250 );
 
@@ -132,7 +134,7 @@ interface Content {
         *
         * @since 1.21
         *
-        * @return Array of supported serialization formats
+        * @return string[] List of supported serialization formats
         */
        public function getSupportedFormats();
 
@@ -147,7 +149,8 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param string $format The format to check
+        * @param string $format The serialization format to check.
+        *
         * @return bool Whether the format is supported
         */
        public function isSupportedFormat( $format );
@@ -159,9 +162,9 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param $format null|string The desired serialization format (or null for
-        *    the default format).
-        * @return string Serialized form of this Content object
+        * @param string $format The desired serialization format, or null for the default format.
+        *
+        * @return string Serialized form of this Content object.
         */
        public function serialize( $format = null );
 
@@ -184,7 +187,7 @@ interface Content {
         *
         * @since 1.21
         *
-        * @return boolean
+        * @return bool
         */
        public function isValid();
 
@@ -207,7 +210,8 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param $that Content The Content object to compare to
+        * @param Content $that The Content object to compare to.
+        *
         * @return bool True if this Content object is equal to $that, false otherwise.
         */
        public function equals( Content $that = null );
@@ -242,7 +246,8 @@ interface Content {
         * @param bool $hasLinks If it is known whether this content contains
         *    links, provide this information here, to avoid redundant parsing to
         *    find out.
-        * @return boolean
+        *
+        * @return bool
         */
        public function isCountable( $hasLinks = null );
 
@@ -252,10 +257,14 @@ interface Content {
         * is needed, $generateHtml can be set to false; in that case,
         * $result->getText() may return null.
         *
-        * @param $title Title The page title to use as a context for rendering
-        * @param $revId null|int The revision being rendered (optional)
-        * @param $options null|ParserOptions Any parser options
-        * @param $generateHtml Boolean Whether to generate HTML (default: true). If false,
+        * @note To control which options are used in the cache key for the
+        *       generated parser output, implementations of this method
+        *       may call ParserOutput::recordOption() on the output object.
+        *
+        * @param Title $title The page title to use as a context for rendering.
+        * @param int $revId Optional revision ID being rendered.
+        * @param ParserOptions $options Any parser options.
+        * @param bool $generateHtml Whether to generate HTML (default: true). If false,
         *        the result of calling getText() on the ParserOutput object returned by
         *        this method is undefined.
         *
@@ -263,8 +272,7 @@ interface Content {
         *
         * @return ParserOutput
         */
-       public function getParserOutput( Title $title,
-               $revId = null,
+       public function getParserOutput( Title $title, $revId = null,
                ParserOptions $options = null, $generateHtml = true );
 
        // TODO: make RenderOutput and RenderOptions base classes
@@ -284,24 +292,22 @@ interface Content {
         * Subclasses may implement this to determine the necessary updates more
         * efficiently, or make use of information about the old content.
         *
-        * @param $title Title The context for determining the necessary updates
-        * @param $old Content|null An optional Content object representing the
+        * @param Title $title The context for determining the necessary updates
+        * @param Content $old An optional Content object representing the
         *    previous content, i.e. the content being replaced by this Content
         *    object.
-        * @param $recursive boolean Whether to include recursive updates (default:
+        * @param bool $recursive Whether to include recursive updates (default:
         *    false).
-        * @param $parserOutput ParserOutput|null Optional ParserOutput object.
+        * @param ParserOutput $parserOutput Optional ParserOutput object.
         *    Provide if you have one handy, to avoid re-parsing of the content.
         *
-        * @return Array. A list of DataUpdate objects for putting information
+        * @return DataUpdate[] A list of DataUpdate objects for putting information
         *    about this content object somewhere.
         *
         * @since 1.21
         */
-       public function getSecondaryDataUpdates( Title $title,
-               Content $old = null,
-               $recursive = true, ParserOutput $parserOutput = null
-       );
+       public function getSecondaryDataUpdates( Title $title, Content $old = null,
+               $recursive = true, ParserOutput $parserOutput = null );
 
        /**
         * Construct the redirect destination from this content and return an
@@ -311,7 +317,7 @@ interface Content {
         *
         * @since 1.21
         *
-        * @return Array of Titles, with the destination last
+        * @return Title[]|null List of Titles, with the destination last.
         */
        public function getRedirectChain();
 
@@ -323,7 +329,7 @@ interface Content {
         *
         * @since 1.21
         *
-        * @return Title: The corresponding Title
+        * @return Title|null The corresponding Title.
         */
        public function getRedirectTarget();
 
@@ -340,7 +346,7 @@ interface Content {
         *
         * @since 1.21
         *
-        * @return Title
+        * @return Title|null
         */
        public function getUltimateRedirectTarget();
 
@@ -360,9 +366,9 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param Title $target the new redirect target
+        * @param Title $target The new redirect target
         *
-        * @return Content a new Content object with the updated redirect (or $this
+        * @return Content A new Content object with the updated redirect (or $this
         *   if this Content object isn't a redirect)
         */
        public function updateRedirect( Title $target );
@@ -376,7 +382,8 @@ interface Content {
         *    The ID "0" retrieves the section before the first heading, "1" the
         *    text between the first heading (included) and the second heading
         *    (excluded), etc.
-        * @return Content|Boolean|null The section, or false if no such section
+        *
+        * @return Content|bool|null The section, or false if no such section
         *    exist, or null if sections are not supported.
         */
        public function getSection( $sectionId );
@@ -387,10 +394,11 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param $section null/false or a section number (0, 1, 2, T1, T2...), or "new"
-        * @param $with Content: new content of the section
-        * @param string $sectionTitle new section's subject, only if $section is 'new'
-        * @return string Complete article text, or null if error
+        * @param mixed $section Null/false or a section number (0, 1, 2, T1, T2...), or "new"
+        * @param Content $with New content of the section
+        * @param string $sectionTitle New section's subject, only if $section is 'new'
+        *
+        * @return string|null Complete article text, or null if error
         */
        public function replaceSection( $section, Content $with, $sectionTitle = '' );
 
@@ -400,9 +408,10 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param $title Title
-        * @param $user User
-        * @param $parserOptions null|ParserOptions
+        * @param Title $title
+        * @param User $user
+        * @param ParserOptions $parserOptions
+        *
         * @return Content
         */
        public function preSaveTransform( Title $title, User $user, ParserOptions $parserOptions );
@@ -414,7 +423,8 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param $header string
+        * @param string $header
+        *
         * @return Content
         */
        public function addSectionHeader( $header );
@@ -425,8 +435,9 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param $title Title
-        * @param $parserOptions null|ParserOptions
+        * @param Title $title
+        * @param ParserOptions $parserOptions
+        *
         * @return Content
         */
        public function preloadTransform( Title $title, ParserOptions $parserOptions );
@@ -447,15 +458,15 @@ interface Content {
         * @since 1.21
         *
         * @param WikiPage $page The page to be saved.
-        * @param int $flags bitfield for use with EDIT_XXX constants, see WikiPage::doEditContent()
-        * @param int $baseRevId the ID of the current revision
+        * @param int $flags Bitfield for use with EDIT_XXX constants, see WikiPage::doEditContent()
+        * @param int $baseRevId The ID of the current revision
         * @param User $user
         *
         * @return Status A status object indicating whether the content was
         *   successfully prepared for saving. If the returned status indicates
         *   an error, a rollback will be performed and the transaction aborted.
         *
-        * @see see WikiPage::doEditContent()
+        * @see WikiPage::doEditContent()
         */
        public function prepareSave( WikiPage $page, $flags, $baseRevId, User $user );
 
@@ -466,12 +477,12 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param $page WikiPage the deleted page
-        * @param $parserOutput null|ParserOutput optional parser output object
+        * @param WikiPage $page The deleted page
+        * @param ParserOutput $parserOutput Optional parser output object
         *    for efficient access to meta-information about the content object.
         *    Provide if you have one handy.
         *
-        * @return array A list of DataUpdate instances that will clean up the
+        * @return DataUpdate[] A list of DataUpdate instances that will clean up the
         *    database after deletion.
         */
        public function getDeletionUpdates( WikiPage $page,
@@ -482,9 +493,9 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param MagicWord $word the magic word to match
+        * @param MagicWord $word The magic word to match
         *
-        * @return bool whether this Content object matches the given magic word.
+        * @return bool Whether this Content object matches the given magic word.
         */
        public function matchMagicWord( MagicWord $word );
 
@@ -492,9 +503,10 @@ interface Content {
         * Converts this content object into another content object with the given content model,
         * if that is possible.
         *
-        * @param string $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
-        * @param string $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
-        * not allowed, full round-trip conversion is expected to work without losing information.
+        * @param string $toModel The desired content model, use the CONTENT_MODEL_XXX flags.
+        * @param string $lossy Optional flag, set to "lossy" to allow lossy conversion. If lossy
+        * conversion is not allowed, full round-trip conversion is expected to work without losing
+        * information.
         *
         * @return Content|bool A content object with the content model $toModel, or false if
         * that conversion is not supported.
@@ -505,4 +517,5 @@ interface Content {
        //   [11:59] <vvv> Hooks are ugly; make CodeHighlighter interface and a
        //   config to set the class which handles syntax highlighting
        //   [12:00] <vvv> And default it to a DummyHighlighter
+
 }
index 7c51345..defa7da 100644 (file)
@@ -85,10 +85,11 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param $content Content|null
-        * @return null|string the textual form of $content, if available
-        * @throws MWException if $content is not an instance of TextContent and
-        *   $wgContentHandlerTextFallback was set to 'fail'.
+        * @param Content $content
+        *
+        * @throws MWException If the content is not an instance of TextContent and
+        * wgContentHandlerTextFallback was set to 'fail'.
+        * @return string|null Textual form of the content, if available.
         */
        public static function getContentText( Content $content = null ) {
                global $wgContentHandlerTextFallback;
@@ -127,24 +128,21 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param string $text the textual representation, will be
+        * @param string $text The textual representation, will be
         *    unserialized to create the Content object
-        * @param $title null|Title the title of the page this text belongs to.
+        * @param Title $title The title of the page this text belongs to.
         *    Required if $modelId is not provided.
-        * @param $modelId null|string the model to deserialize to. If not provided,
+        * @param string $modelId The model to deserialize to. If not provided,
         *    $title->getContentModel() is used.
-        * @param $format null|string the format to use for deserialization. If not
+        * @param string $format The format to use for deserialization. If not
         *    given, the model's default format is used.
         *
-        * @throws MWException
-        * @return Content a Content object representing $text
-        *
-        * @throws MWException if $model or $format is not supported or if $text can
-        *    not be unserialized using $format.
+        * @throws MWException If model ID or format is not supported or if the text can not be
+        * unserialized using the format.
+        * @return Content A Content object representing the text.
         */
        public static function makeContent( $text, Title $title = null,
-               $modelId = null, $format = null
-       ) {
+               $modelId = null, $format = null ) {
                if ( is_null( $modelId ) ) {
                        if ( is_null( $title ) ) {
                                throw new MWException( "Must provide a Title object or a content model ID." );
@@ -188,8 +186,9 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param $title Title
-        * @return null|string default model name for the page given by $title
+        * @param Title $title
+        *
+        * @return string Default model name for the page given by $title
         */
        public static function getDefaultModelFor( Title $title ) {
                // NOTE: this method must not rely on $title->getContentModel() directly or indirectly,
@@ -253,7 +252,8 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param $title Title
+        * @param Title $title
+        *
         * @return ContentHandler
         */
        public static function getForTitle( Title $title ) {
@@ -268,7 +268,8 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param $content Content
+        * @param Content $content
+        *
         * @return ContentHandler
         */
        public static function getForContent( Content $content ) {
@@ -303,9 +304,9 @@ abstract class ContentHandler {
         *
         * @param string $modelId The ID of the content model for which to get a
         *    handler. Use CONTENT_MODEL_XXX constants.
-        * @return ContentHandler The ContentHandler singleton for handling the
-        *    model given by $modelId
-        * @throws MWException if no handler is known for $modelId.
+        *
+        * @throws MWException If no handler is known for the model ID.
+        * @return ContentHandler The ContentHandler singleton for handling the model given by the ID.
         */
        public static function getForModelID( $modelId ) {
                global $wgContentHandlers;
@@ -353,8 +354,8 @@ abstract class ContentHandler {
         * @param string $name The content model ID, as given by a CONTENT_MODEL_XXX
         *    constant or returned by Revision::getContentModel().
         *
+        * @throws MWException If the model ID isn't known.
         * @return string The content model's localized name.
-        * @throws MWException if the model id isn't known.
         */
        public static function getLocalizedName( $name ) {
                // Messages: content-model-wikitext, content-model-text,
@@ -389,7 +390,14 @@ abstract class ContentHandler {
 
        // ------------------------------------------------------------------------
 
+       /**
+        * @var string
+        */
        protected $mModelID;
+
+       /**
+        * @var string[]
+        */
        protected $mSupportedFormats;
 
        /**
@@ -398,7 +406,7 @@ abstract class ContentHandler {
         * provided as literals by subclass's constructors.
         *
         * @param string $modelId (use CONTENT_MODEL_XXX constants).
-        * @param array $formats List for supported serialization formats
+        * @param string[] $formats List for supported serialization formats
         *    (typically as MIME types)
         */
        public function __construct( $modelId, $formats ) {
@@ -415,8 +423,9 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param $content Content The Content object to serialize
-        * @param $format null|String The desired serialization format
+        * @param Content $content The Content object to serialize
+        * @param string $format The desired serialization format
+        *
         * @return string Serialized form of the content
         */
        abstract public function serializeContent( Content $content, $format = null );
@@ -426,9 +435,10 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param string $blob serialized form of the content
-        * @param $format null|String the format used for serialization
-        * @return Content the Content object created by deserializing $blob
+        * @param string $blob Serialized form of the content
+        * @param string $format The format used for serialization
+        *
+        * @return Content The Content object created by deserializing $blob
         */
        abstract public function unserializeContent( $blob, $format = null );
 
@@ -454,10 +464,10 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param Title $destination the page to redirect to.
-        * @param string $text text to include in the redirect, if possible.
+        * @param Title $destination The page to redirect to.
+        * @param string $text Text to include in the redirect, if possible.
         *
-        * @return Content
+        * @return Content Always null.
         */
        public function makeRedirectContent( Title $destination, $text = '' ) {
                return null;
@@ -469,21 +479,19 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @return String The model ID
+        * @return string The model ID
         */
        public function getModelID() {
                return $this->mModelID;
        }
 
        /**
-        * Throws an MWException if $model_id is not the ID of the content model
-        * supported by this ContentHandler.
-        *
         * @since 1.21
         *
         * @param string $model_id The model to check
         *
-        * @throws MWException
+        * @throws MWException If the model ID is not the ID of the content model supported by this
+        * ContentHandler.
         */
        protected function checkModelID( $model_id ) {
                if ( $model_id !== $this->mModelID ) {
@@ -500,7 +508,7 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @return array of serialization formats as MIME type like strings
+        * @return string[] List of serialization formats as MIME type like strings
         */
        public function getSupportedFormats() {
                return $this->mSupportedFormats;
@@ -515,7 +523,7 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @return string the name of the default serialization format as a MIME type
+        * @return string The name of the default serialization format as a MIME type
         */
        public function getDefaultFormat() {
                return $this->mSupportedFormats[0];
@@ -530,11 +538,11 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param string $format the serialization format to check
+        * @param string $format The serialization format to check
+        *
         * @return bool
         */
        public function isSupportedFormat( $format ) {
-
                if ( !$format ) {
                        return true; // this means "use the default"
                }
@@ -543,13 +551,11 @@ abstract class ContentHandler {
        }
 
        /**
-        * Throws an MWException if isSupportedFormat( $format ) is not true.
-        * Convenient for checking whether a format provided as a parameter is
-        * actually supported.
+        * Convenient for checking whether a format provided as a parameter is actually supported.
         *
-        * @param string $format the serialization format to check
+        * @param string $format The serialization format to check
         *
-        * @throws MWException
+        * @throws MWException If the format is not supported by this content handler.
         */
        protected function checkFormat( $format ) {
                if ( !$this->isSupportedFormat( $format ) ) {
@@ -568,7 +574,7 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @return Array
+        * @return array Always an empty array.
         */
        public function getActionOverrides() {
                return array();
@@ -579,21 +585,18 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param $context IContextSource context to use, anything else will be
-        *    ignored
-        * @param $old Integer Old ID we want to show and diff with.
-        * @param int|string $new String either 'prev' or 'next'.
-        * @param $rcid Integer ??? FIXME (default 0)
-        * @param $refreshCache boolean If set, refreshes the diff cache
-        * @param $unhide boolean If set, allow viewing deleted revs
+        * @param IContextSource $context Context to use, anything else will be ignored.
+        * @param int $old Revision ID we want to show and diff with.
+        * @param int|string $new Either a revision ID or one of the strings 'cur', 'prev' or 'next'.
+        * @param int $rcid FIXME: Deprecated, no longer used. Defaults to 0.
+        * @param bool $refreshCache If set, refreshes the diff cache. Defaults to false.
+        * @param bool $unhide If set, allow viewing deleted revs. Defaults to false.
         *
         * @return DifferenceEngine
         */
-       public function createDifferenceEngine( IContextSource $context,
-               $old = 0, $new = 0,
-               $rcid = 0, # FIXME: use everywhere!
-               $refreshCache = false, $unhide = false
-       ) {
+       public function createDifferenceEngine( IContextSource $context, $old = 0, $new = 0,
+               $rcid = 0, //FIXME: Deprecated, no longer used
+               $refreshCache = false, $unhide = false ) {
                $diffEngineClass = $this->getDiffEngineClass();
 
                return new $diffEngineClass( $context, $old, $new, $rcid, $refreshCache, $unhide );
@@ -613,10 +616,10 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param Title $title the page to determine the language for.
-        * @param Content|null $content the page's content, if you have it handy, to avoid reloading it.
+        * @param Title $title The page to determine the language for.
+        * @param Content $content The page's content, if you have it handy, to avoid reloading it.
         *
-        * @return Language the page's language
+        * @return Language The page's language
         */
        public function getPageLanguage( Title $title, Content $content = null ) {
                global $wgContLang, $wgLang;
@@ -648,10 +651,10 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param Title $title the page to determine the language for.
-        * @param Content|null $content the page's content, if you have it handy, to avoid reloading it.
+        * @param Title $title The page to determine the language for.
+        * @param Content $content The page's content, if you have it handy, to avoid reloading it.
         *
-        * @return Language the page's language for viewing
+        * @return Language The page's language for viewing
         */
        public function getPageViewLanguage( Title $title, Content $content = null ) {
                $pageLang = $this->getPageLanguage( $title, $content );
@@ -680,9 +683,9 @@ abstract class ContentHandler {
         * @note: this calls the ContentHandlerCanBeUsedOn hook which may be used to override which
         * content model can be used where.
         *
-        * @param Title $title the page's title.
+        * @param Title $title The page's title.
         *
-        * @return bool true if content of this kind can be used on the given page, false otherwise.
+        * @return bool True if content of this kind can be used on the given page, false otherwise.
         */
        public function canBeUsedOn( Title $title ) {
                $ok = true;
@@ -704,19 +707,18 @@ abstract class ContentHandler {
        }
 
        /**
-        * Attempts to merge differences between three versions.
-        * Returns a new Content object for a clean merge and false for failure or
-        * a conflict.
+        * Attempts to merge differences between three versions. Returns a new
+        * Content object for a clean merge and false for failure or a conflict.
         *
         * This default implementation always returns false.
         *
         * @since 1.21
         *
-        * @param $oldContent Content|string  String
-        * @param $myContent Content|string   String
-        * @param $yourContent Content|string String
+        * @param Content|string $oldContent The page's previous content.
+        * @param Content|string $myContent One of the page's conflicting contents.
+        * @param Content|string $yourContent One of the page's conflicting contents.
         *
-        * @return Content|Bool
+        * @return Content|bool Always false.
         */
        public function merge3( Content $oldContent, Content $myContent, Content $yourContent ) {
                return false;
@@ -727,13 +729,14 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param $oldContent Content|null: the previous text of the page.
-        * @param $newContent Content|null: The submitted text of the page.
+        * @param Content $oldContent The previous text of the page.
+        * @param Content $newContent The submitted text of the page.
         * @param int $flags Bit mask: a bit mask of flags submitted for the edit.
         *
         * @return string An appropriate auto-summary, or an empty string.
         */
-       public function getAutosummary( Content $oldContent = null, Content $newContent = null, $flags ) {
+       public function getAutosummary( Content $oldContent = null, Content $newContent = null,
+               $flags ) {
                // Decide what kind of auto-summary is needed.
 
                // Redirect auto-summaries
@@ -799,8 +802,9 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param $title Title: the page's title
-        * @param &$hasHistory Boolean: whether the page has a history
+        * @param Title $title The page's title
+        * @param bool &$hasHistory Whether the page has a history
+        *
         * @return mixed String containing deletion reason or empty string, or
         *    boolean false if no revision occurred
         *
@@ -907,9 +911,9 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param $current Revision The current text
-        * @param $undo Revision The revision to undo
-        * @param $undoafter Revision Must be an earlier revision than $undo
+        * @param Revision $current The current text
+        * @param Revision $undo The revision to undo
+        * @param Revision $undoafter Must be an earlier revision than $undo
         *
         * @return mixed String on success, false on failure
         */
@@ -980,7 +984,7 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @return bool
+        * @return bool Always false.
         */
        public function isParserCacheSupported() {
                return false;
@@ -993,7 +997,7 @@ abstract class ContentHandler {
         * Content models that return true here should also implement
         * Content::getSection, Content::replaceSection, etc. to handle sections..
         *
-        * @return boolean whether sections are supported.
+        * @return bool Always false.
         */
        public function supportsSections() {
                return false;
@@ -1006,7 +1010,7 @@ abstract class ContentHandler {
         * Content models that return true here should also implement
         * ContentHandler::makeRedirectContent to return a Content object.
         *
-        * @return boolean whether redirects are supported.
+        * @return bool Always false.
         */
        public function supportsRedirects() {
                return false;
@@ -1038,13 +1042,13 @@ abstract class ContentHandler {
         * hook function, a new Content object is constructed from the new
         * text.
         *
-        * @param string $event event name
-        * @param array $args parameters passed to hook functions
-        * @param bool $warn whether to log a warning.
+        * @param string $event Event name
+        * @param array $args Parameters passed to hook functions
+        * @param bool $warn Whether to log a warning.
         *                    Default to self::$enableDeprecationWarnings.
         *                    May be set to false for testing.
         *
-        * @return Boolean True if no handler aborted the hook
+        * @return bool True if no handler aborted the hook
         *
         * @see ContentHandler::$enableDeprecationWarnings
         */
index 03cc2d0..5fc2c9f 100644 (file)
  * @ingroup Content
  */
 class CssContent extends TextContent {
+
+       /**
+        * @param string $text CSS code.
+        */
        public function __construct( $text ) {
                parent::__construct( $text, CONTENT_MODEL_CSS );
        }
@@ -39,10 +43,13 @@ class CssContent extends TextContent {
         * Returns a Content object with pre-save transformations applied using
         * Parser::preSaveTransform().
         *
-        * @param $title Title
-        * @param $user User
-        * @param $popts ParserOptions
-        * @return Content
+        * @param Title $title
+        * @param User $user
+        * @param ParserOptions $popts
+        *
+        * @return CssContent
+        *
+        * @see TextContent::preSaveTransform
         */
        public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
                global $wgParser;
@@ -54,6 +61,9 @@ class CssContent extends TextContent {
                return new CssContent( $pst );
        }
 
+       /**
+        * @return string CSS wrapped in a <pre> tag.
+        */
        protected function getHtml() {
                $html = "";
                $html .= "<pre class=\"mw-code mw-css\" dir=\"ltr\">\n";
@@ -62,4 +72,5 @@ class CssContent extends TextContent {
 
                return $html;
        }
+
 }
index 7becabb..85059a8 100644 (file)
  * @ingroup Content
  */
 class CssContentHandler extends TextContentHandler {
+
+       /**
+        * @param string $modelId
+        */
        public function __construct( $modelId = CONTENT_MODEL_CSS ) {
                parent::__construct( $modelId, array( CONTENT_FORMAT_CSS ) );
        }
 
+       /**
+        * @param string $text
+        * @param string $format
+        *
+        * @return CssContent
+        *
+        * @see ContentHandler::unserializeContent()
+        */
        public function unserializeContent( $text, $format = null ) {
                $this->checkFormat( $format );
 
                return new CssContent( $text );
        }
 
+       /**
+        * @return CssContent A new CssContent object with empty text.
+        *
+        * @see ContentHandler::makeEmptyContent()
+        */
        public function makeEmptyContent() {
                return new CssContent( '' );
        }
@@ -47,6 +64,7 @@ class CssContentHandler extends TextContentHandler {
         *
         * @param Title $title
         * @param Content $content
+        *
         * @return Language wfGetLangObj( 'en' )
         *
         * @see ContentHandler::getPageLanguage()
@@ -60,6 +78,7 @@ class CssContentHandler extends TextContentHandler {
         *
         * @param Title $title
         * @param Content $content
+        *
         * @return Language wfGetLangObj( 'en' )
         *
         * @see ContentHandler::getPageViewLanguage()
@@ -67,4 +86,5 @@ class CssContentHandler extends TextContentHandler {
        public function getPageViewLanguage( Title $title, Content $content = null ) {
                return wfGetLangObj( 'en' );
        }
+
 }
index 2ae572b..11a470e 100644 (file)
  * @ingroup Content
  */
 class JavaScriptContent extends TextContent {
+
+       /**
+        * @param string $text JavaScript code.
+        */
        public function __construct( $text ) {
                parent::__construct( $text, CONTENT_MODEL_JAVASCRIPT );
        }
@@ -42,7 +46,8 @@ class JavaScriptContent extends TextContent {
         * @param Title $title
         * @param User $user
         * @param ParserOptions $popts
-        * @return Content
+        *
+        * @return JavaScriptContent
         */
        public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
                global $wgParser;
@@ -55,6 +60,9 @@ class JavaScriptContent extends TextContent {
                return new JavaScriptContent( $pst );
        }
 
+       /**
+        * @return string JavaScript wrapped in a <pre> tag.
+        */
        protected function getHtml() {
                $html = "";
                $html .= "<pre class=\"mw-code mw-js\" dir=\"ltr\">\n";
@@ -63,4 +71,5 @@ class JavaScriptContent extends TextContent {
 
                return $html;
        }
+
 }
index 064c422..2e98976 100644 (file)
  * @todo make ScriptContentHandler base class, do highlighting stuff there?
  */
 class JavaScriptContentHandler extends TextContentHandler {
+
+       /**
+        * @param string $modelId
+        */
        public function __construct( $modelId = CONTENT_MODEL_JAVASCRIPT ) {
                parent::__construct( $modelId, array( CONTENT_FORMAT_JAVASCRIPT ) );
        }
 
+       /**
+        * @param string $text
+        * @param string $format
+        *
+        * @return JavaScriptContent
+        *
+        * @see ContentHandler::unserializeContent()
+        */
        public function unserializeContent( $text, $format = null ) {
                $this->checkFormat( $format );
 
                return new JavaScriptContent( $text );
        }
 
+       /**
+        * @return JavaScriptContent A new JavaScriptContent object with empty text.
+        *
+        * @see ContentHandler::makeEmptyContent()
+        */
        public function makeEmptyContent() {
                return new JavaScriptContent( '' );
        }
@@ -47,6 +64,7 @@ class JavaScriptContentHandler extends TextContentHandler {
         *
         * @param Title $title
         * @param Content $content
+        *
         * @return Language wfGetLangObj( 'en' )
         *
         * @see ContentHandler::getPageLanguage()
@@ -60,6 +78,7 @@ class JavaScriptContentHandler extends TextContentHandler {
         *
         * @param Title $title
         * @param Content $content
+        *
         * @return Language wfGetLangObj( 'en' )
         *
         * @see ContentHandler::getPageViewLanguage()
@@ -67,4 +86,5 @@ class JavaScriptContentHandler extends TextContentHandler {
        public function getPageViewLanguage( Title $title, Content $content = null ) {
                return wfGetLangObj( 'en' );
        }
+
 }
index e780846..b601344 100644 (file)
  * @ingroup Content
  */
 class MessageContent extends AbstractContent {
+
        /**
         * @var Message
         */
        protected $mMessage;
 
        /**
-        * @param Message|String $msg A Message object, or a message key
-        * @param array|null $params An optional array of message parameters
+        * @param Message|string $msg A Message object, or a message key.
+        * @param string[] $params An optional array of message parameters.
         */
        public function __construct( $msg, $params = null ) {
                # XXX: messages may be wikitext, html or plain text! and maybe even something else entirely.
@@ -59,18 +60,18 @@ class MessageContent extends AbstractContent {
        }
 
        /**
-        * Returns the message as rendered HTML
+        * Fully parse the text from wikitext to HTML.
         *
-        * @return string The message text, parsed into html
+        * @return string Parsed HTML.
         */
        public function getHtml() {
                return $this->mMessage->parse();
        }
 
        /**
-        * Returns the message as rendered HTML
+        * Returns the message text. {{-transformation is done.
         *
-        * @return string The message text, parsed into html
+        * @return string Unescaped message text.
         */
        public function getWikitext() {
                return $this->mMessage->text();
@@ -87,6 +88,8 @@ class MessageContent extends AbstractContent {
        }
 
        /**
+        * @return string
+        *
         * @see Content::getTextForSearchIndex
         */
        public function getTextForSearchIndex() {
@@ -94,6 +97,8 @@ class MessageContent extends AbstractContent {
        }
 
        /**
+        * @return string
+        *
         * @see Content::getWikitextForTransclusion
         */
        public function getWikitextForTransclusion() {
@@ -101,6 +106,10 @@ class MessageContent extends AbstractContent {
        }
 
        /**
+        * @param int $maxLength Maximum length of the summary text, defaults to 250.
+        *
+        * @return string The summary text.
+        *
         * @see Content::getTextForSummary
         */
        public function getTextForSummary( $maxlength = 250 ) {
@@ -108,18 +117,18 @@ class MessageContent extends AbstractContent {
        }
 
        /**
-        * @see Content::getSize
-        *
         * @return int
+        *
+        * @see Content::getSize
         */
        public function getSize() {
                return strlen( $this->mMessage->plain() );
        }
 
        /**
-        * @see Content::copy
-        *
         * @return Content. A copy of this object
+        *
+        * @see Content::copy
         */
        public function copy() {
                // MessageContent is immutable (because getNativeData() returns a clone of the Message object)
@@ -127,29 +136,28 @@ class MessageContent extends AbstractContent {
        }
 
        /**
-        * @see Content::isCountable
-        *
         * @param bool $hasLinks
-        * @return bool false
+        *
+        * @return bool Always false.
+        *
+        * @see Content::isCountable
         */
        public function isCountable( $hasLinks = null ) {
                return false;
        }
 
        /**
-        * @see Content::getParserOutput
+        * @param Title $title Unused.
+        * @param int $revId Unused.
+        * @param ParserOptions $options Unused.
+        * @param bool $generateHtml Whether to generate HTML (default: true).
         *
-        * @param Title $title
-        * @param int $revId Optional revision ID
-        * @param ParserOptions $options
-        * @param bool $generateHtml Wether to generate HTML
         * @return ParserOutput
+        *
+        * @see Content::getParserOutput
         */
-       public function getParserOutput(
-               Title $title, $revId = null,
-               ParserOptions $options = null, $generateHtml = true
-       ) {
-
+       public function getParserOutput( Title $title, $revId = null,
+               ParserOptions $options = null, $generateHtml = true ) {
                if ( $generateHtml ) {
                        $html = $this->getHtml();
                } else {
@@ -160,4 +168,5 @@ class MessageContent extends AbstractContent {
 
                return $po;
        }
+
 }
index 068b150..b0da62d 100644 (file)
  * @ingroup Content
  */
 class TextContent extends AbstractContent {
+
+       /**
+        * @param string $text
+        * @param string $model_id
+        */
        public function __construct( $text, $model_id = CONTENT_MODEL_TEXT ) {
                parent::__construct( $model_id );
 
@@ -50,6 +55,11 @@ class TextContent extends AbstractContent {
                $this->mText = $text;
        }
 
+       /**
+        * @note Mutable subclasses MUST override this to return a copy!
+        *
+        * @return Content $this
+        */
        public function copy() {
                return $this; # NOTE: this is ok since TextContent are immutable.
        }
@@ -81,10 +91,10 @@ class TextContent extends AbstractContent {
         * Returns true if this content is not a redirect, and $wgArticleCountMethod
         * is "any".
         *
-        * @param bool $hasLinks if it is known whether this content contains links,
+        * @param bool $hasLinks If it is known whether this content contains links,
         * provide this information here, to avoid redundant parsing to find out.
         *
-        * @return bool True if the content is countable
+        * @return bool
         */
        public function isCountable( $hasLinks = null ) {
                global $wgArticleCountMethod;
@@ -103,7 +113,7 @@ class TextContent extends AbstractContent {
        /**
         * Returns the text represented by this Content object, as a string.
         *
-        * @return string: the raw text
+        * @return string The raw text.
         */
        public function getNativeData() {
                $text = $this->mText;
@@ -114,7 +124,7 @@ class TextContent extends AbstractContent {
        /**
         * Returns the text represented by this Content object, as a string.
         *
-        * @return string: the raw text
+        * @return string The raw text.
         */
        public function getTextForSearchIndex() {
                return $this->getNativeData();
@@ -126,7 +136,7 @@ class TextContent extends AbstractContent {
         *
         * @note: this allows any text-based content to be transcluded as if it was wikitext.
         *
-        * @return string|false: the raw text, or null if the conversion failed
+        * @return string|false The raw text, or false if the conversion failed.
         */
        public function getWikitextForTransclusion() {
                $wikitext = $this->convert( CONTENT_MODEL_WIKITEXT, 'lossy' );
@@ -142,9 +152,10 @@ class TextContent extends AbstractContent {
         * Returns a Content object with pre-save transformations applied.
         * This implementation just trims trailing whitespace.
         *
-        * @param $title Title
-        * @param $user User
-        * @param $popts ParserOptions
+        * @param Title $title
+        * @param User $user
+        * @param ParserOptions $popts
+        *
         * @return Content
         */
        public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
@@ -159,9 +170,9 @@ class TextContent extends AbstractContent {
         *
         * @since 1.21
         *
-        * @param $that Content: The other content object to compare this content
+        * @param Content $that The other content object to compare this content
         * object to.
-        * @param $lang Language: The language object to use for text segmentation.
+        * @param Language $lang The language object to use for text segmentation.
         *    If not given, $wgContentLang is used.
         *
         * @return Diff A diff representing the changes that would have to be
@@ -194,17 +205,15 @@ class TextContent extends AbstractContent {
         * Returns a generic ParserOutput object, wrapping the HTML returned by
         * getHtml().
         *
-        * @param $title Title Context title for parsing
-        * @param int|null $revId Revision ID (for {{REVISIONID}})
-        * @param $options ParserOptions|null Parser options
+        * @param Title $title Context title for parsing
+        * @param int $revId Revision ID (for {{REVISIONID}})
+        * @param ParserOptions $options Parser options
         * @param bool $generateHtml Whether or not to generate HTML
         *
-        * @return ParserOutput representing the HTML form of the text
+        * @return ParserOutput Representing the HTML form of the text.
         */
-       public function getParserOutput( Title $title,
-               $revId = null,
-               ParserOptions $options = null, $generateHtml = true
-       ) {
+       public function getParserOutput( Title $title, $revId = null,
+               ParserOptions $options = null, $generateHtml = true ) {
                global $wgParser, $wgTextModelsToParse;
 
                if ( !$options ) {
@@ -249,7 +258,7 @@ class TextContent extends AbstractContent {
         * Generates a syntax-highlighted version of the content, as HTML.
         * Used by the default implementation of getHtml().
         *
-        * @return string an HTML representation of the content's markup
+        * @return string A HTML representation of the content's markup
         */
        protected function getHighlightHtml() {
                # TODO: make Highlighter interface, use highlighter here, if available
@@ -257,17 +266,15 @@ class TextContent extends AbstractContent {
        }
 
        /**
-        * @see Content::convert()
-        *
         * This implementation provides lossless conversion between content models based
         * on TextContent.
         *
-        * @param string $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
-        * @param string $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
-        * not allowed, full round-trip conversion is expected to work without losing information.
+        * @param string $toModel
+        * @param string $lossy
         *
-        * @return Content|bool A content object with the content model $toModel, or false if
-        * that conversion is not supported.
+        * @return Content|bool
+        *
+        * @see Content::convert()
         */
        public function convert( $toModel, $lossy = '' ) {
                $converted = parent::convert( $toModel, $lossy );
@@ -286,4 +293,5 @@ class TextContent extends AbstractContent {
 
                return $converted;
        }
+
 }
index 94b5c57..b728d31 100644 (file)
  * @ingroup Content
  */
 class TextContentHandler extends ContentHandler {
+
        // @codingStandardsIgnoreStart bug 57585
        public function __construct( $modelId = CONTENT_MODEL_TEXT,
-               $formats = array( CONTENT_FORMAT_TEXT )
-       ) {
+               $formats = array( CONTENT_FORMAT_TEXT ) ) {
                parent::__construct( $modelId, $formats );
        }
        // @codingStandardsIgnoreEnd
@@ -40,8 +40,9 @@ class TextContentHandler extends ContentHandler {
        /**
         * Returns the content's text as-is.
         *
-        * @param $content Content
-        * @param $format string|null
+        * @param Content $content
+        * @param string $format The serialization format to check
+        *
         * @return mixed
         */
        public function serializeContent( Content $content, $format = null ) {
@@ -59,11 +60,11 @@ class TextContentHandler extends ContentHandler {
         *
         * This text-based implementation uses wfMerge().
         *
-        * @param $oldContent Content|string  String
-        * @param $myContent Content|string   String
-        * @param $yourContent Content|string String
+        * @param Content|string $oldContent The page's previous content.
+        * @param Content|string $myContent One of the page's conflicting contents.
+        * @param Content|string $yourContent One of the page's conflicting contents.
         *
-        * @return Content|Bool
+        * @return Content|bool
         */
        public function merge3( Content $oldContent, Content $myContent, Content $yourContent ) {
                $this->checkModelID( $oldContent->getModel() );
@@ -96,10 +97,10 @@ class TextContentHandler extends ContentHandler {
         *
         * @since 1.21
         *
-        * @param $text   string serialized form of the content
-        * @param $format null|String the format used for serialization
+        * @param string $text Serialized form of the content
+        * @param string $format The format used for serialization
         *
-        * @return Content the TextContent object wrapping $text
+        * @return Content The TextContent object wrapping $text
         */
        public function unserializeContent( $text, $format = null ) {
                $this->checkFormat( $format );
@@ -112,9 +113,10 @@ class TextContentHandler extends ContentHandler {
         *
         * @since 1.21
         *
-        * @return Content
+        * @return Content A new TextContent object with empty text.
         */
        public function makeEmptyContent() {
                return new TextContent( '' );
        }
+
 }
index f495c56..605222e 100644 (file)
  * @ingroup Content
  */
 class WikitextContent extends TextContent {
+
        public function __construct( $text ) {
                parent::__construct( $text, CONTENT_MODEL_WIKITEXT );
        }
 
        /**
+        * @param string $section
+        *
+        * @return Content|bool|null
+        *
         * @see Content::getSection()
         */
        public function getSection( $section ) {
@@ -52,6 +57,13 @@ class WikitextContent extends TextContent {
        }
 
        /**
+        * @param string $section
+        * @param Content $with
+        * @param string $sectionTitle
+        *
+        * @throws MWException
+        * @return Content
+        *
         * @see Content::replaceSection()
         */
        public function replaceSection( $section, Content $with, $sectionTitle = '' ) {
@@ -103,7 +115,8 @@ class WikitextContent extends TextContent {
         * Returns a new WikitextContent object with the given section heading
         * prepended.
         *
-        * @param $header string
+        * @param string $header
+        *
         * @return Content
         */
        public function addSectionHeader( $header ) {
@@ -119,9 +132,10 @@ class WikitextContent extends TextContent {
         * Returns a Content object with pre-save transformations applied using
         * Parser::preSaveTransform().
         *
-        * @param $title Title
-        * @param $user User
-        * @param $popts ParserOptions
+        * @param Title $title
+        * @param User $user
+        * @param ParserOptions $popts
+        *
         * @return Content
         */
        public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
@@ -138,8 +152,9 @@ class WikitextContent extends TextContent {
         * Returns a Content object with preload transformations applied (or this
         * object if no transformations apply).
         *
-        * @param $title Title
-        * @param $popts ParserOptions
+        * @param Title $title
+        * @param ParserOptions $popts
+        *
         * @return Content
         */
        public function preloadTransform( Title $title, ParserOptions $popts ) {
@@ -157,7 +172,8 @@ class WikitextContent extends TextContent {
         * @note: migrated here from Title::newFromRedirectInternal()
         *
         * @since 1.23
-        * @return array 2 elements: Title|null and string
+        *
+        * @return array List of two elements: Title|null and string.
         */
        protected function getRedirectTargetAndText() {
                global $wgMaxRedirects;
@@ -195,10 +211,9 @@ class WikitextContent extends TextContent {
        /**
         * Implement redirect extraction for wikitext.
         *
-        * @return null|Title
+        * @return Title|null
         *
         * @see Content::getRedirectTarget
-        * @see AbstractContent::getRedirectTarget
         */
        public function getRedirectTarget() {
                list( $title, ) = $this->getRedirectTargetAndText();
@@ -207,8 +222,6 @@ class WikitextContent extends TextContent {
        }
 
        /**
-        * @see Content::updateRedirect()
-        *
         * This implementation replaces the first link on the page with the given new target
         * if this Content object is a redirect. Otherwise, this method returns $this.
         *
@@ -216,8 +229,9 @@ class WikitextContent extends TextContent {
         *
         * @param Title $target
         *
-        * @return Content a new Content object with the updated redirect (or $this
-        *   if this Content object isn't a redirect)
+        * @return Content
+        *
+        * @see Content::updateRedirect()
         */
        public function updateRedirect( Title $target ) {
                if ( !$this->isRedirect() ) {
@@ -238,14 +252,14 @@ class WikitextContent extends TextContent {
         * Returns true if this content is not a redirect, and this content's text
         * is countable according to the criteria defined by $wgArticleCountMethod.
         *
-        * @param bool $hasLinks if it is known whether this content contains
+        * @param bool $hasLinks If it is known whether this content contains
         *    links, provide this information here, to avoid redundant parsing to
         *    find out (default: null).
-        * @param $title Title: (default: null)
+        * @param Title $title Optional title, defaults to the title from the current main request.
         *
         * @internal param \IContextSource $context context for parsing if necessary
         *
-        * @return bool True if the content is countable
+        * @return bool
         */
        public function isCountable( $hasLinks = null, Title $title = null ) {
                global $wgArticleCountMethod;
@@ -279,6 +293,10 @@ class WikitextContent extends TextContent {
                return false;
        }
 
+       /**
+        * @param int $maxlength
+        * @return string
+        */
        public function getTextForSummary( $maxlength = 250 ) {
                $truncatedtext = parent::getTextForSummary( $maxlength );
 
@@ -294,20 +312,17 @@ class WikitextContent extends TextContent {
         * Returns a ParserOutput object resulting from parsing the content's text
         * using $wgParser.
         *
-        * @since    1.21
+        * @since 1.21
         *
-        * @param $title Title
-        * @param int $revId Revision to pass to the parser (default: null)
-        * @param $options ParserOptions (default: null)
+        * @param Title $title * @param int $revId Revision to pass to the parser (default: null)
+        * @param ParserOptions $options (default: null)
         * @param bool $generateHtml (default: false)
-        *
         * @internal param \IContextSource|null $context
-        * @return ParserOutput representing the HTML form of the text
+        *
+        * @return ParserOutput Representing the HTML form of the text
         */
-       public function getParserOutput( Title $title,
-               $revId = null,
-               ParserOptions $options = null, $generateHtml = true
-       ) {
+       public function getParserOutput( Title $title, $revId = null,
+               ParserOptions $options = null, $generateHtml = true ) {
                global $wgParser;
 
                if ( !$options ) {
@@ -334,6 +349,9 @@ class WikitextContent extends TextContent {
                return $po;
        }
 
+       /**
+        * @throws MWException
+        */
        protected function getHtml() {
                throw new MWException(
                        "getHtml() not implemented for wikitext. "
@@ -342,15 +360,16 @@ class WikitextContent extends TextContent {
        }
 
        /**
-        * @see  Content::matchMagicWord()
-        *
         * This implementation calls $word->match() on the this TextContent object's text.
         *
         * @param MagicWord $word
         *
-        * @return bool whether this Content object matches the given magic word.
+        * @return bool
+        *
+        * @see Content::matchMagicWord()
         */
        public function matchMagicWord( MagicWord $word ) {
                return $word->match( $this->getNativeData() );
        }
+
 }
index 1e8fd05..5ae3e25 100644 (file)
@@ -29,6 +29,7 @@
  * @ingroup Content
  */
 class WikitextContentHandler extends TextContentHandler {
+
        public function __construct( $modelId = CONTENT_MODEL_WIKITEXT ) {
                parent::__construct( $modelId, array( CONTENT_FORMAT_WIKITEXT ) );
        }
@@ -40,9 +41,9 @@ class WikitextContentHandler extends TextContentHandler {
        }
 
        /**
-        * @see ContentHandler::makeEmptyContent
+        * @return Content A new WikitextContent object with empty text.
         *
-        * @return Content
+        * @see ContentHandler::makeEmptyContent
         */
        public function makeEmptyContent() {
                return new WikitextContent( '' );
@@ -51,12 +52,12 @@ class WikitextContentHandler extends TextContentHandler {
        /**
         * Returns a WikitextContent object representing a redirect to the given destination page.
         *
-        * @see ContentHandler::makeRedirectContent
-        *
-        * @param Title $destination the page to redirect to.
-        * @param string $text text to include in the redirect, if possible.
+        * @param Title $destination The page to redirect to.
+        * @param string $text Text to include in the redirect, if possible.
         *
         * @return Content
+        *
+        * @see ContentHandler::makeRedirectContent
         */
        public function makeRedirectContent( Title $destination, $text = '' ) {
                $optionalColon = '';
@@ -84,9 +85,9 @@ class WikitextContentHandler extends TextContentHandler {
        /**
         * Returns true because wikitext supports redirects.
         *
-        * @see ContentHandler::supportsRedirects
+        * @return bool Always true.
         *
-        * @return boolean whether redirects are supported.
+        * @see ContentHandler::supportsRedirects
         */
        public function supportsRedirects() {
                return true;
@@ -95,7 +96,9 @@ class WikitextContentHandler extends TextContentHandler {
        /**
         * Returns true because wikitext supports sections.
         *
-        * @return boolean whether sections are supported.
+        * @return bool Always true.
+        *
+        * @see ContentHandler::supportsSections
         */
        public function supportsSections() {
                return true;
@@ -106,9 +109,13 @@ class WikitextContentHandler extends TextContentHandler {
         * ParserCache mechanism.
         *
         * @since 1.21
-        * @return bool
+        *
+        * @return bool Always true.
+        *
+        * @see ContentHandler::isParserCacheSupported
         */
        public function isParserCacheSupported() {
                return true;
        }
+
 }
index c5dc882..08e1885 100644 (file)
@@ -3,7 +3,7 @@
  * Helper class for making a copy of the database, mostly for unit testing.
  *
  * Copyright © 2010 Chad Horohoe <chad@anyonecanedit.org>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index c6f2611..91ab0ca 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @defgroup Database Database
  *
@@ -245,6 +246,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
        protected $mTrxPreCommitCallbacks = array();
 
        protected $mTablePrefix;
+       protected $mSchema;
        protected $mFlags;
        protected $mForeign;
        protected $mErrorCount = 0;
@@ -428,6 +430,15 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                return wfSetVar( $this->mTablePrefix, $prefix );
        }
 
+       /**
+        * Get/set the db schema.
+        * @param string $schema The database schema to set, or omitted to leave it unchanged.
+        * @return string The previous db schema.
+        */
+       public function dbSchema( $schema = null ) {
+               return wfSetVar( $this->mSchema, $schema );
+       }
+
        /**
         * Set the filehandle to copy write statements to.
         *
@@ -711,7 +722,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @param array $params Parameters passed from DatabaseBase::factory()
         */
        function __construct( $params = null ) {
-               global $wgDBprefix, $wgCommandLineMode, $wgDebugDBTransactions;
+               global $wgDBprefix, $wgDBmwschema, $wgCommandLineMode, $wgDebugDBTransactions;
 
                $this->mTrxAtomicLevels = new SplStack;
 
@@ -722,6 +733,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        $dbName = $params['dbname'];
                        $flags = $params['flags'];
                        $tablePrefix = $params['tablePrefix'];
+                       $schema = $params['schema'];
                        $foreign = $params['foreign'];
                } else { // legacy calling pattern
                        wfDeprecated( __METHOD__ . " method called without parameter array.", "1.23" );
@@ -732,6 +744,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        $dbName = isset( $args[3] ) ? $args[3] : false;
                        $flags = isset( $args[4] ) ? $args[4] : 0;
                        $tablePrefix = isset( $args[5] ) ? $args[5] : 'get from global';
+                       $schema = 'get from global';
                        $foreign = isset( $args[6] ) ? $args[6] : false;
                }
 
@@ -757,6 +770,13 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        $this->mTablePrefix = $tablePrefix;
                }
 
+               /** Get the database schema*/
+               if ( $schema == 'get from global' ) {
+                       $this->mSchema = $wgDBmwschema;
+               } else {
+                       $this->mSchema = $schema;
+               }
+
                $this->mForeign = $foreign;
 
                if ( $user ) {
@@ -792,7 +812,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         *
         * @param string $dbType A possible DB type
         * @param array $p An array of options to pass to the constructor.
-        *    Valid options are: host, user, password, dbname, flags, tablePrefix, driver
+        *    Valid options are: host, user, password, dbname, flags, tablePrefix, schema, driver
         * @throws MWException If the database driver or extension cannot be found
         * @return DatabaseBase|null DatabaseBase subclass or null
         */
@@ -832,6 +852,18 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                                " no viable database extension found for type '$dbType'" );
                }
 
+               // Determine schema defaults. Currently Microsoft SQL Server uses $wgDBmwschema,
+               // and everything else doesn't use a schema (e.g. null)
+               // Although postgres and oracle support schemas, we don't use them (yet)
+               // to maintain backwards compatibility
+               $defaultSchemas = array(
+                       'mysql' => null,
+                       'postgres' => null,
+                       'sqlite' => null,
+                       'oracle' => null,
+                       'mssql' => 'get from global',
+               );
+
                $class = 'Database' . ucfirst( $driver );
                if ( class_exists( $class ) && is_subclass_of( $class, 'DatabaseBase' ) ) {
                        $params = array(
@@ -841,6 +873,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                                'dbname' => isset( $p['dbname'] ) ? $p['dbname'] : false,
                                'flags' => isset( $p['flags'] ) ? $p['flags'] : 0,
                                'tablePrefix' => isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global',
+                               'schema' => isset( $p['schema'] ) ? $p['schema'] : $defaultSchemas[$dbType],
                                'foreign' => isset( $p['foreign'] ) ? $p['foreign'] : false
                        );
 
@@ -1889,12 +1922,12 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
        }
 
        /**
-        * Make UPDATE options for the DatabaseBase::update function
+        * Make UPDATE options array for DatabaseBase::makeUpdateOptions
         *
-        * @param array $options The options passed to DatabaseBase::update
-        * @return string
+        * @param array $options
+        * @return array
         */
-       protected function makeUpdateOptions( $options ) {
+       protected function makeUpdateOptionsArray( $options ) {
                if ( !is_array( $options ) ) {
                        $options = array( $options );
                }
@@ -1909,6 +1942,18 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        $opts[] = 'IGNORE';
                }
 
+               return $opts;
+       }
+
+       /**
+        * Make UPDATE options for the DatabaseBase::update function
+        *
+        * @param array $options The options passed to DatabaseBase::update
+        * @return string
+        */
+       protected function makeUpdateOptions( $options ) {
+               $opts = $this->makeUpdateOptionsArray( $options );
+
                return implode( ' ', $opts );
        }
 
@@ -2162,7 +2207,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @return string Full database name
         */
        public function tableName( $name, $format = 'quoted' ) {
-               global $wgSharedDB, $wgSharedPrefix, $wgSharedTables;
+               global $wgSharedDB, $wgSharedPrefix, $wgSharedTables, $wgSharedSchema;
                # Skip the entire process when we have a string quoted on both ends.
                # Note that we check the end so that we will still quote any use of
                # use of `database`.table. But won't break things if someone wants
@@ -2186,10 +2231,17 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                # We reverse the explode so that database.table and table both output
                # the correct table.
                $dbDetails = explode( '.', $name, 2 );
-               if ( count( $dbDetails ) == 2 ) {
+               if ( count( $dbDetails ) == 3 ) {
+                       list( $database, $schema, $table ) = $dbDetails;
+                       # We don't want any prefix added in this case
+                       $prefix = '';
+               } elseif ( count( $dbDetails ) == 2 ) {
                        list( $database, $table ) = $dbDetails;
                        # We don't want any prefix added in this case
+                       # In dbs that support it, $database may actually be the schema
+                       # but that doesn't affect any of the functionality here
                        $prefix = '';
+                       $schema = null;
                } else {
                        list( $table ) = $dbDetails;
                        if ( $wgSharedDB !== null # We have a shared database
@@ -2198,19 +2250,30 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                                && in_array( $table, $wgSharedTables ) # A shared table is selected
                        ) {
                                $database = $wgSharedDB;
+                               $schema = $wgSharedSchema === null ? $this->mSchema : $wgSharedSchema;
                                $prefix = $wgSharedPrefix === null ? $this->mTablePrefix : $wgSharedPrefix;
                        } else {
                                $database = null;
+                               $schema = $this->mSchema; # Default schema
                                $prefix = $this->mTablePrefix; # Default prefix
                        }
                }
 
                # Quote $table and apply the prefix if not quoted.
+               # $tableName might be empty if this is called from Database::replaceVars()
                $tableName = "{$prefix}{$table}";
-               if ( $format == 'quoted' && !$this->isQuotedIdentifier( $tableName ) ) {
+               if ( $format == 'quoted' && !$this->isQuotedIdentifier( $tableName ) && $tableName !== '' ) {
                        $tableName = $this->addIdentifierQuotes( $tableName );
                }
 
+               # Quote $schema and merge it with the table name if needed
+               if ( $schema !== null ) {
+                       if ( $format == 'quoted' && !$this->isQuotedIdentifier( $schema ) ) {
+                               $schema = $this->addIdentifierQuotes( $schema );
+                       }
+                       $tableName = $schema . '.' . $tableName;
+               }
+
                # Quote $database and merge it with the table name if needed
                if ( $database !== null ) {
                        if ( $format == 'quoted' && !$this->isQuotedIdentifier( $database ) ) {
@@ -2373,11 +2436,12 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                                }
 
                                $retJOIN[] = $tableClause;
-                       // Is there an INDEX clause for this table?
                        } elseif ( isset( $use_index[$alias] ) ) {
+                               // Is there an INDEX clause for this table?
                                $tableClause = $this->tableNameWithAlias( $table, $alias );
                                $tableClause .= ' ' . $this->useIndexClause(
-                                       implode( ',', (array)$use_index[$alias] ) );
+                                       implode( ',', (array)$use_index[$alias] )
+                               );
 
                                $ret[] = $tableClause;
                        } else {
index b4c7365..377aca1 100644 (file)
@@ -38,7 +38,16 @@ class DBError extends MWException {
                $this->db = $db;
                parent::__construct( $error );
        }
+}
 
+/**
+ * Base class for the more common types of database errors. These are known to occur
+ * frequently, so we try to give friendly error messages for them.
+ *
+ * @ingroup Database
+ * @since 1.23
+ */
+class DBExpectedError extends DBError {
        /**
         * @return string
         */
@@ -80,14 +89,14 @@ class DBError extends MWException {
         * @return string
         */
        protected function getHTMLContent() {
-               return '<p>' . nl2br( htmlspecialchars( $this->getMessage() ) ) . '</p>';
+               return '<p>' . nl2br( htmlspecialchars( $this->getTextContent() ) ) . '</p>';
        }
 }
 
 /**
  * @ingroup Database
  */
-class DBConnectionError extends DBError {
+class DBConnectionError extends DBExpectedError {
        /** @var string Error text */
        public $error;
 
@@ -313,7 +322,7 @@ EOT;
 /**
  * @ingroup Database
  */
-class DBQueryError extends DBError {
+class DBQueryError extends DBExpectedError {
        public $error, $errno, $sql, $fname;
 
        /**
index 8826683..e304a34 100644 (file)
  * @author Joel Penner <a-joelpe at microsoft dot com>
  * @author Chris Pucci <a-cpucci at microsoft dot com>
  * @author Ryan Biesemeyer <v-ryanbi at microsoft dot com>
+ * @author Ryan Schmidt <skizzerz at gmail dot com>
  */
 
 /**
  * @ingroup Database
  */
 class DatabaseMssql extends DatabaseBase {
-       /** @var resource */
+       protected $mInsertId = null;
        protected $mLastResult = null;
-
-       /** @var int The number of rows affected as an integer */
        protected $mAffectedRows = null;
+       protected $mSubqueryId = 0;
+       protected $mScrollableCursor = true;
+       protected $mPrepareStatements = true;
+       protected $mBinaryColumnCache = null;
+       protected $mBitColumnCache = null;
+       protected $mIgnoreDupKeyErrors = false;
 
-       /**
-        * @var int Post number for database
-        * @todo Unused and can be removed?
-        */
        protected $mPort;
 
-       /** @var int */
-       private $mInsertId = null;
-
-       function cascadingDeletes() {
+       public function cascadingDeletes() {
                return true;
        }
 
-       function cleanupTriggers() {
-               return true;
+       public function cleanupTriggers() {
+               return false;
        }
 
-       function strictIPs() {
-               return true;
+       public function strictIPs() {
+               return false;
        }
 
-       function realTimestamps() {
-               return true;
+       public function realTimestamps() {
+               return false;
        }
 
-       function implicitGroupby() {
+       public function implicitGroupby() {
                return false;
        }
 
-       function implicitOrderby() {
+       public function implicitOrderby() {
                return false;
        }
 
-       function functionalIndexes() {
+       public function functionalIndexes() {
                return true;
        }
 
-       function unionSupportsOrderAndLimit() {
+       public function unionSupportsOrderAndLimit() {
                return false;
        }
 
@@ -84,16 +82,17 @@ class DatabaseMssql extends DatabaseBase {
         * @throws DBConnectionError
         * @return bool|DatabaseBase|null
         */
-       function open( $server, $user, $password, $dbName ) {
+       public function open( $server, $user, $password, $dbName ) {
                # Test for driver support, to avoid suppressed fatal error
                if ( !function_exists( 'sqlsrv_connect' ) ) {
                        throw new DBConnectionError(
                                $this,
-                               "MS Sql Server Native (sqlsrv) functions missing. You can download " .
-                                       "the driver from: http://go.microsoft.com/fwlink/?LinkId=123470\n" );
+                               "Microsoft SQL Server Native (sqlsrv) functions missing.
+                               You can download the driver from: http://go.microsoft.com/fwlink/?LinkId=123470\n"
+                       );
                }
 
-               global $wgDBport;
+               global $wgDBport, $wgDBWindowsAuthentication;
 
                # e.g. the class is being loaded
                if ( !strlen( $user ) ) {
@@ -113,36 +112,19 @@ class DatabaseMssql extends DatabaseBase {
                        $connectionInfo['Database'] = $dbName;
                }
 
-               // Start NT Auth Hack
-               // Quick and dirty work around to provide NT Auth designation support.
-               // Current solution requires installer to know to input 'ntauth' for
-               // both username and password to trigger connection via NT Auth. Ugly,
-               // ugly, ugly!
-               // @todo Make this better and add NT Auth choice to MW installer when
-               // SQL Server option is chosen.
-               $ntAuthUserTest = strtolower( $user );
-               $ntAuthPassTest = strtolower( $password );
-
                // Decide which auth scenerio to use
-               if ( $ntAuthPassTest == 'ntauth' && $ntAuthUserTest == 'ntauth' ) {
-                       // Don't add credentials to $connectionInfo
-               } else {
+               // if we are using Windows auth, don't add credentials to $connectionInfo
+               if ( !$wgDBWindowsAuthentication ) {
                        $connectionInfo['UID'] = $user;
                        $connectionInfo['PWD'] = $password;
                }
-               // End NT Auth Hack
 
                wfSuppressWarnings();
                $this->mConn = sqlsrv_connect( $server, $connectionInfo );
                wfRestoreWarnings();
 
                if ( $this->mConn === false ) {
-                       wfDebug( "DB connection error\n" );
-                       wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " .
-                               substr( $password, 0, 3 ) . "...\n" );
-                       wfDebug( $this->lastError() . "\n" );
-
-                       return false;
+                       throw new DBConnectionError( $this, $this->lastError() );
                }
 
                $this->mOpened = true;
@@ -159,13 +141,34 @@ class DatabaseMssql extends DatabaseBase {
                return sqlsrv_close( $this->mConn );
        }
 
+       /**
+        * @param bool|MssqlResultWrapper|resource $result
+        * @return bool|MssqlResultWrapper
+        */
+       public function resultObject( $result ) {
+               if ( empty( $result ) ) {
+                       return false;
+               } elseif ( $result instanceof MssqlResultWrapper ) {
+                       return $result;
+               } elseif ( $result === true ) {
+                       // Successful write query
+                       return $result;
+               } else {
+                       return new MssqlResultWrapper( $this, $result );
+               }
+       }
+
        /**
         * @param string $sql
         * @return bool|MssqlResult
         * @throws DBUnexpectedError
         */
        protected function doQuery( $sql ) {
-               wfDebug( "SQL: [$sql]\n" );
+               global $wgDebugDumpSql;
+               if ( $wgDebugDumpSql ) {
+                       wfDebug( "SQL: [$sql]\n" );
+               }
+               $this->offset = 0;
 
                // several extensions seem to think that all databases support limits
                // via LIMIT N after the WHERE clause well, MSSQL uses SELECT TOP N,
@@ -184,161 +187,180 @@ class DatabaseMssql extends DatabaseBase {
                }
 
                // perform query
-               $stmt = sqlsrv_query( $this->mConn, $sql );
-               if ( $stmt == false ) {
-                       $message = "A database error has occurred. Did you forget " .
-                               "to run maintenance/update.php after upgrading?  See: " .
-                               "http://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
-                               "Query: " . htmlentities( $sql ) . "\n" .
-                               "Function: " . __METHOD__ . "\n";
-                       // process each error (our driver will give us an array of errors unlike other providers)
-                       foreach ( sqlsrv_errors() as $error ) {
-                               $message .= $message . "ERROR[" . $error['code'] . "] " . $error['message'] . "\n";
-                       }
 
-                       throw new DBUnexpectedError( $this, $message );
+               // SQLSRV_CURSOR_STATIC is slower than SQLSRV_CURSOR_CLIENT_BUFFERED (one of the two is
+               // needed if we want to be able to seek around the result set), however CLIENT_BUFFERED
+               // has a bug in the sqlsrv driver where wchar_t types (such as nvarchar) that are empty
+               // strings make php throw a fatal error "Severe error translating Unicode"
+               if ( $this->mScrollableCursor ) {
+                       $scrollArr = array( 'Scrollable' => SQLSRV_CURSOR_STATIC );
+               } else {
+                       $scrollArr = array();
                }
-               // remember number of rows affected
-               $this->mAffectedRows = sqlsrv_rows_affected( $stmt );
 
-               // if it is a SELECT statement, or an insert with a request to output
-               // something we want to return a row.
-               if ( ( preg_match( '#\bSELECT\s#i', $sql ) ) ||
-                       ( preg_match( '#\bINSERT\s#i', $sql ) && preg_match( '#\bOUTPUT\s+INSERTED\b#i', $sql ) )
-               ) {
-                       // this is essentially a rowset, but Mediawiki calls these 'result'
-                       // the rowset owns freeing the statement
-                       $res = new MssqlResult( $stmt );
+               if ( $this->mPrepareStatements ) {
+                       // we do prepare + execute so we can get its field metadata for later usage if desired
+                       $stmt = sqlsrv_prepare( $this->mConn, $sql, array(), $scrollArr );
+                       $success = sqlsrv_execute( $stmt );
                } else {
-                       // otherwise we simply return it was successful, failure throws an exception
-                       $res = true;
+                       $stmt = sqlsrv_query( $this->mConn, $sql, array(), $scrollArr );
+                       $success = (bool)$stmt;
                }
 
-               return $res;
-       }
+               if ( $this->mIgnoreDupKeyErrors ) {
+                       // ignore duplicate key errors, but nothing else
+                       // this emulates INSERT IGNORE in MySQL
+                       if ( $success === false ) {
+                               $errors = sqlsrv_errors( SQLSRV_ERR_ERRORS );
+                               $success = true;
+
+                               foreach ( $errors as $err ) {
+                                       if ( $err['SQLSTATE'] == '23000' && $err['code'] == '2601' ) {
+                                               continue; // duplicate key error
+                                       } elseif ( $err['SQLSTATE'] == '01000' && $err['code'] == '3621' ) {
+                                               continue; // generic "the statement has been terminated" error
+                                       }
 
-       /**
-        * @param mixed|ResultWrapper $res
-        */
-       function freeResult( $res ) {
-               if ( $res instanceof ResultWrapper ) {
-                       $res = $res->result;
+                                       $success = false; // getting here means we got an error we weren't expecting
+                                       break;
+                               }
+
+                               if ( $success ) {
+                                       $this->mAffectedRows = 0;
+                                       return true;
+                               }
+                       }
+               }
+
+               if ( $success === false ) {
+                       return false;
                }
-               $res->free();
+               // remember number of rows affected
+               $this->mAffectedRows = sqlsrv_rows_affected( $stmt );
+
+               return $stmt;
        }
 
-       /**
-        * @param ResultWrapper|stdClass $res
-        * @return stdClass
-        */
-       function fetchObject( $res ) {
+       public function freeResult( $res ) {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
-               $row = $res->fetch( 'OBJECT' );
 
-               return $row;
+               sqlsrv_free_stmt( $res );
        }
 
        /**
-        * @return string
+        * @param MssqlResultWrapper $res
+        * @return stdClass
         */
-       function getErrors() {
-               $strRet = '';
-               $retErrors = sqlsrv_errors( SQLSRV_ERR_ALL );
-               if ( $retErrors != null ) {
-                       foreach ( $retErrors as $arrError ) {
-                               $strRet .= "SQLState: " . $arrError['SQLSTATE'] . "\n";
-                               $strRet .= "Error Code: " . $arrError['code'] . "\n";
-                               $strRet .= "Message: " . $arrError['message'] . "\n";
-                       }
-               } else {
-                       $strRet = "No errors found";
-               }
-
-               return $strRet;
+       public function fetchObject( $res ) {
+               // $res is expected to be an instance of MssqlResultWrapper here
+               return $res->fetchObject();
        }
 
        /**
-        * @param resource $res
-        * @return Blob
+        * @param MssqlResultWrapper $res
+        * @return array
         */
-       function fetchRow( $res ) {
-               if ( $res instanceof ResultWrapper ) {
-                       $res = $res->result;
-               }
-               $row = $res->fetch( SQLSRV_FETCH_BOTH );
-
-               return $row;
+       public function fetchRow( $res ) {
+               return $res->fetchRow();
        }
 
        /**
         * @param mixed $res
         * @return int
         */
-       function numRows( $res ) {
+       public function numRows( $res ) {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
 
-               return ( $res ) ? $res->numrows() : 0;
+               return sqlsrv_num_rows( $res );
        }
 
-       function numFields( $res ) {
+       /**
+        * @param mixed $res
+        * @return int
+        */
+       public function numFields( $res ) {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
 
-               return ( $res ) ? $res->numfields() : 0;
+               return sqlsrv_num_fields( $res );
        }
 
-       function fieldName( $res, $n ) {
+       /**
+        * @param mixed $res
+        * @param int $n
+        * @return int
+        */
+       public function fieldName( $res, $n ) {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
 
-               return ( $res ) ? $res->fieldname( $n ) : 0;
+               $metadata = sqlsrv_field_metadata( $res );
+               return $metadata[$n]['Name'];
        }
 
        /**
         * This must be called after nextSequenceVal
         * @return int|null
         */
-       function insertId() {
+       public function insertId() {
                return $this->mInsertId;
        }
 
        /**
-        * @param mixed $res
+        * @param MssqlResultWrapper $res
         * @param int $row
         * @return bool
         */
-       function dataSeek( $res, $row ) {
-               if ( $res instanceof ResultWrapper ) {
-                       $res = $res->result;
-               }
-
-               return ( $res ) ? $res->seek( $row ) : false;
+       public function dataSeek( $res, $row ) {
+               return $res->seek( $row );
        }
 
-       function lastError() {
-               if ( $this->mConn ) {
-                       return $this->getErrors();
+       /**
+        * @return string
+        */
+       public function lastError() {
+               $strRet = '';
+               $retErrors = sqlsrv_errors( SQLSRV_ERR_ALL );
+               if ( $retErrors != null ) {
+                       foreach ( $retErrors as $arrError ) {
+                               $strRet .= $this->formatError( $arrError ) . "\n";
+                       }
                } else {
-                       return "No database connection";
+                       $strRet = "No errors found";
                }
+
+               return $strRet;
+       }
+
+       /**
+        * @return string
+        */
+       private function formatError( $err ) {
+               return '[SQLSTATE ' . $err['SQLSTATE'] . '][Error Code ' . $err['code'] . ']' . $err['message'];
        }
 
-       function lastErrno() {
+       /**
+        * @return string
+        */
+       public function lastErrno() {
                $err = sqlsrv_errors( SQLSRV_ERR_ALL );
-               if ( $err[0] ) {
+               if ( $err !== null && isset( $err[0] ) ) {
                        return $err[0]['code'];
                } else {
                        return 0;
                }
        }
 
-       function affectedRows() {
+       /**
+        * @return int
+        */
+       public function affectedRows() {
                return $this->mAffectedRows;
        }
 
@@ -357,14 +379,40 @@ class DatabaseMssql extends DatabaseBase {
         * @return mixed Database result resource (feed to Database::fetchObject
         *   or whatever), or false on failure
         */
-       function select( $table, $vars, $conds = '', $fname = __METHOD__,
+       public function select( $table, $vars, $conds = '', $fname = __METHOD__,
                $options = array(), $join_conds = array()
        ) {
                $sql = $this->selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
                if ( isset( $options['EXPLAIN'] ) ) {
-                       sqlsrv_query( $this->mConn, "SET SHOWPLAN_ALL ON;" );
-                       $ret = $this->query( $sql, $fname );
-                       sqlsrv_query( $this->mConn, "SET SHOWPLAN_ALL OFF;" );
+                       try {
+                               $this->mScrollableCursor = false;
+                               $this->mPrepareStatements = false;
+                               $this->query( "SET SHOWPLAN_ALL ON" );
+                               $ret = $this->query( $sql, $fname );
+                               $this->query( "SET SHOWPLAN_ALL OFF" );
+                       } catch ( DBQueryError $dqe ) {
+                               if ( isset( $options['FOR COUNT'] ) ) {
+                                       // likely don't have privs for SHOWPLAN, so run a select count instead
+                                       $this->query( "SET SHOWPLAN_ALL OFF" );
+                                       unset( $options['EXPLAIN'] );
+                                       $ret = $this->select(
+                                               $table,
+                                               'COUNT(*) AS EstimateRows',
+                                               $conds,
+                                               $fname,
+                                               $options,
+                                               $join_conds
+                                       );
+                               } else {
+                                       // someone actually wanted the query plan instead of an est row count
+                                       // let them know of the error
+                                       $this->mScrollableCursor = true;
+                                       $this->mPrepareStatements = true;
+                                       throw $dqe;
+                               }
+                       }
+                       $this->mScrollableCursor = true;
+                       $this->mPrepareStatements = true;
 
                        return $ret;
                }
@@ -385,14 +433,60 @@ class DatabaseMssql extends DatabaseBase {
         *    (e.g. array( 'page' => array('LEFT JOIN','page_latest=rev_id') )
         * @return string The SQL text
         */
-       function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__,
+       public function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__,
                $options = array(), $join_conds = array()
        ) {
                if ( isset( $options['EXPLAIN'] ) ) {
                        unset( $options['EXPLAIN'] );
                }
 
-               return parent::selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
+               $sql = parent::selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
+
+               // try to rewrite aggregations of bit columns (currently MAX and MIN)
+               if ( strpos( $sql, 'MAX(' ) !== false || strpos( $sql, 'MIN(' ) !== false ) {
+                       $bitColumns = array();
+                       if ( is_array( $table ) ) {
+                               foreach ( $table as $t ) {
+                                       $bitColumns += $this->getBitColumns( $this->tableName( $t ) );
+                               }
+                       } else {
+                               $bitColumns = $this->getBitColumns( $this->tableName( $table ) );
+                       }
+
+                       foreach ( $bitColumns as $col => $info ) {
+                               $replace = array(
+                                       "MAX({$col})" => "MAX(CAST({$col} AS tinyint))",
+                                       "MIN({$col})" => "MIN(CAST({$col} AS tinyint))",
+                               );
+                               $sql = str_replace( array_keys( $replace ), array_values( $replace ), $sql );
+                       }
+               }
+
+               return $sql;
+       }
+
+       public function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds,
+               $fname = __METHOD__
+       ) {
+               $this->mScrollableCursor = false;
+               try {
+                       parent::deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds, $fname );
+               } catch( Exception $e ) {
+                       $this->mScrollableCursor = true;
+                       throw $e;
+               }
+               $this->mScrollableCursor = true;
+       }
+
+       public function delete( $table, $conds, $fname = __METHOD__ ) {
+               $this->mScrollableCursor = false;
+               try {
+                       parent::delete( $table, $conds, $fname );
+               } catch( Exception $e ) {
+                       $this->mScrollableCursor = true;
+                       throw $e;
+               }
+               $this->mScrollableCursor = true;
        }
 
        /**
@@ -408,16 +502,18 @@ class DatabaseMssql extends DatabaseBase {
         * @param array $options
         * @return int
         */
-       function estimateRowCount( $table, $vars = '*', $conds = '',
+       public function estimateRowCount( $table, $vars = '*', $conds = '',
                $fname = __METHOD__, $options = array()
        ) {
                // http://msdn2.microsoft.com/en-us/library/aa259203.aspx
                $options['EXPLAIN'] = true;
+               $options['FOR COUNT'] = true;
                $res = $this->select( $table, $vars, $conds, $fname, $options );
 
                $rows = -1;
                if ( $res ) {
                        $row = $this->fetchRow( $res );
+
                        if ( isset( $row['EstimateRows'] ) ) {
                                $rows = $row['EstimateRows'];
                        }
@@ -434,7 +530,7 @@ class DatabaseMssql extends DatabaseBase {
         * @param string $fname
         * @return array|bool|null
         */
-       function indexInfo( $table, $index, $fname = __METHOD__ ) {
+       public function indexInfo( $table, $index, $fname = __METHOD__ ) {
                # This does not return the same info as MYSQL would, but that's OK
                # because MediaWiki never uses the returned value except to check for
                # the existance of indexes.
@@ -481,7 +577,7 @@ class DatabaseMssql extends DatabaseBase {
         * @throws DBQueryError
         * @return bool
         */
-       function insert( $table, $arrToInsert, $fname = __METHOD__, $options = array() ) {
+       public function insert( $table, $arrToInsert, $fname = __METHOD__, $options = array() ) {
                # No rows to insert, easy just return now
                if ( !count( $arrToInsert ) ) {
                        return true;
@@ -497,21 +593,24 @@ class DatabaseMssql extends DatabaseBase {
                        $arrToInsert = array( 0 => $arrToInsert ); // make everything multi row compatible
                }
 
-               $allOk = true;
-
                // We know the table we're inserting into, get its identity column
                $identity = null;
-               // strip matching square brackets from table name
-               $tableRaw = preg_replace( '#\[([^\]]*)\]#', '$1', $table );
+               // strip matching square brackets and the db/schema from table name
+               $tableRawArr = explode( '.', preg_replace( '#\[([^\]]*)\]#', '$1', $table ) );
+               $tableRaw = array_pop( $tableRawArr );
                $res = $this->doQuery(
                        "SELECT NAME AS idColumn FROM SYS.IDENTITY_COLUMNS " .
                                "WHERE OBJECT_NAME(OBJECT_ID)='{$tableRaw}'"
                );
-               if ( $res && $res->numrows() ) {
+               if ( $res && sqlsrv_has_rows( $res ) ) {
                        // There is an identity for this table.
-                       $identity = array_pop( $res->fetch( SQLSRV_FETCH_ASSOC ) );
+                       $identityArr = sqlsrv_fetch_array( $res, SQLSRV_FETCH_ASSOC );
+                       $identity = array_pop( $identityArr );
                }
-               unset( $res );
+               sqlsrv_free_stmt( $res );
+
+               // Determine binary/varbinary fields so we can encode data as a hex string like 0xABCDEF
+               $binaryColumns = $this->getBinaryColumns( $table );
 
                foreach ( $arrToInsert as $a ) {
                        // start out with empty identity column, this is so we can return
@@ -526,11 +625,13 @@ class DatabaseMssql extends DatabaseBase {
                                foreach ( $a as $k => $v ) {
                                        if ( $k == $identity ) {
                                                if ( !is_null( $v ) ) {
-                                                       // there is a value being passed to us, we need to turn on and off inserted identity
+                                                       // there is a value being passed to us,
+                                                       // we need to turn on and off inserted identity
                                                        $sqlPre = "SET IDENTITY_INSERT $table ON;";
                                                        $sqlPost = ";SET IDENTITY_INSERT $table OFF;";
                                                } else {
-                                                       // we can't insert NULL into an identity column, so remove the column from the insert.
+                                                       // we can't insert NULL into an identity column,
+                                                       // so remove the column from the insert.
                                                        unset( $a[$k] );
                                                }
                                        }
@@ -545,21 +646,9 @@ class DatabaseMssql extends DatabaseBase {
                        // INSERT IGNORE is not supported by SQL Server
                        // remove IGNORE from options list and set ignore flag to true
                        $ignoreClause = false;
-                       foreach ( $options as $k => $v ) {
-                               if ( strtoupper( $v ) == "IGNORE" ) {
-                                       unset( $options[$k] );
-                                       $ignoreClause = true;
-                               }
-                       }
-
-                       // translate MySQL INSERT IGNORE to something SQL Server can use
-                       // example:
-                       // MySQL: INSERT IGNORE INTO user_groups (ug_user,ug_group) VALUES ('1','sysop')
-                       // MSSQL: IF NOT EXISTS (SELECT * FROM user_groups WHERE ug_user = '1')
-                       //        INSERT INTO user_groups (ug_user,ug_group) VALUES ('1','sysop')
-                       if ( $ignoreClause ) {
-                               $prival = $a[$keys[0]];
-                               $sqlPre .= "IF NOT EXISTS (SELECT * FROM $table WHERE $keys[0] = '$prival')";
+                       if ( in_array( 'IGNORE', $options ) ) {
+                               $options = array_diff( $options, array( 'IGNORE' ) );
+                               $this->mIgnoreDupKeyErrors = true;
                        }
 
                        // Build the actual query
@@ -567,48 +656,49 @@ class DatabaseMssql extends DatabaseBase {
                                " INTO $table (" . implode( ',', $keys ) . ") $identityClause VALUES (";
 
                        $first = true;
-                       foreach ( $a as $value ) {
+                       foreach ( $a as $key => $value ) {
+                               if ( isset( $binaryColumns[$key] ) ) {
+                                       $value = new MssqlBlob( $value );
+                               }
                                if ( $first ) {
                                        $first = false;
                                } else {
                                        $sql .= ',';
                                }
-                               if ( is_string( $value ) ) {
-                                       $sql .= $this->addQuotes( $value );
-                               } elseif ( is_null( $value ) ) {
+                               if ( is_null( $value ) ) {
                                        $sql .= 'null';
                                } elseif ( is_array( $value ) || is_object( $value ) ) {
-                                       if ( is_object( $value ) && strtolower( get_class( $value ) ) == 'blob' ) {
+                                       if ( is_object( $value ) && $value instanceof Blob ) {
                                                $sql .= $this->addQuotes( $value );
                                        } else {
                                                $sql .= $this->addQuotes( serialize( $value ) );
                                        }
                                } else {
-                                       $sql .= $value;
+                                       $sql .= $this->addQuotes( $value );
                                }
                        }
                        $sql .= ')' . $sqlPost;
 
                        // Run the query
-                       $ret = sqlsrv_query( $this->mConn, $sql );
-
-                       if ( $ret === false ) {
-                               throw new DBQueryError( $this, $this->getErrors(), $this->lastErrno(), $sql, $fname );
-                       } elseif ( $ret != null ) {
-                               // remember number of rows affected
-                               $this->mAffectedRows = sqlsrv_rows_affected( $ret );
-                               if ( !is_null( $identity ) ) {
-                                       // then we want to get the identity column value we were assigned and save it off
-                                       $row = sqlsrv_fetch_object( $ret );
-                                       $this->mInsertId = $row->$identity;
-                               }
-                               sqlsrv_free_stmt( $ret );
-                               continue;
+                       $this->mScrollableCursor = false;
+                       try {
+                               $ret = $this->query( $sql );
+                       } catch ( Exception $e ) {
+                               $this->mScrollableCursor = true;
+                               $this->mIgnoreDupKeyErrors = false;
+                               throw $e;
+                       }
+                       $this->mScrollableCursor = true;
+                       $this->mIgnoreDupKeyErrors = false;
+
+                       if ( !is_null( $identity ) ) {
+                               // then we want to get the identity column value we were assigned and save it off
+                               $row = $ret->fetchObject();
+                               $this->mInsertId = $row->$identity;
                        }
-                       $allOk = false;
                }
 
-               return $allOk;
+               return $ret;
        }
 
        /**
@@ -626,69 +716,154 @@ class DatabaseMssql extends DatabaseBase {
         * @throws DBQueryError
         * @return null|ResultWrapper
         */
-       function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
-               $insertOptions = array(), $selectOptions = array() ) {
-               $ret = parent::insertSelect(
-                       $destTable,
-                       $srcTable,
-                       $varMap,
-                       $conds,
-                       $fname,
-                       $insertOptions,
-                       $selectOptions
-               );
-
-               if ( $ret === false ) {
-                       throw new DBQueryError( $this, $this->getErrors(), $this->lastErrno(), /*$sql*/ '', $fname );
-               } elseif ( $ret != null ) {
-                       // remember number of rows affected
-                       // @todo FIXME: $ret type does not appear to be a resource
-                       $this->mAffectedRows = sqlsrv_rows_affected( $ret );
-
-                       return $ret;
+       public function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
+               $insertOptions = array(), $selectOptions = array()
+       ) {
+               $this->mScrollableCursor = false;
+               try {
+                       $ret = parent::insertSelect(
+                               $destTable,
+                               $srcTable,
+                               $varMap,
+                               $conds,
+                               $fname,
+                               $insertOptions,
+                               $selectOptions
+                       );
+               } catch( Exception $e ) {
+                       $this->mScrollableCursor = true;
+                       throw $e;
                }
+               $this->mScrollableCursor = true;
 
-               return null;
+               return $ret;
        }
 
        /**
-        * Return the next in a sequence, save the value for retrieval via insertId()
-        * @param string $seqName
-        * @return int|null
+        * UPDATE wrapper. Takes a condition array and a SET array.
+        *
+        * @param string $table name of the table to UPDATE. This will be passed through
+        *                DatabaseBase::tableName().
+        *
+        * @param array $values An array of values to SET. For each array element,
+        *                the key gives the field name, and the value gives the data
+        *                to set that field to. The data will be quoted by
+        *                DatabaseBase::addQuotes().
+        *
+        * @param array $conds An array of conditions (WHERE). See
+        *                DatabaseBase::select() for the details of the format of
+        *                condition arrays. Use '*' to update all rows.
+        *
+        * @param string $fname The function name of the caller (from __METHOD__),
+        *                for logging and profiling.
+        *
+        * @param array $options An array of UPDATE options, can be:
+        *                   - IGNORE: Ignore unique key conflicts
+        *                   - LOW_PRIORITY: MySQL-specific, see MySQL manual.
+        * @return bool
         */
-       function nextSequenceValue( $seqName ) {
-               if ( !$this->tableExists( 'sequence_' . $seqName ) ) {
-                       sqlsrv_query(
-                               $this->mConn,
-                               "CREATE TABLE [sequence_$seqName] (id INT NOT NULL IDENTITY PRIMARY KEY, junk varchar(10) NULL)"
-                       );
-               }
-               sqlsrv_query( $this->mConn, "INSERT INTO [sequence_$seqName] (junk) VALUES ('')" );
-               $ret = sqlsrv_query( $this->mConn, "SELECT TOP 1 id FROM [sequence_$seqName] ORDER BY id DESC" );
-               // KEEP ASSOC THERE, weird weird bug dealing with the return value if you don't
-               $row = sqlsrv_fetch_array( $ret, SQLSRV_FETCH_ASSOC );
+       function update( $table, $values, $conds, $fname = __METHOD__, $options = array() ) {
+               $table = $this->tableName( $table );
+               $binaryColumns = $this->getBinaryColumns( $table );
 
-               sqlsrv_free_stmt( $ret );
-               $this->mInsertId = $row['id'];
+               $opts = $this->makeUpdateOptions( $options );
+               $sql = "UPDATE $opts $table SET " . $this->makeList( $values, LIST_SET, $binaryColumns );
 
-               return $row['id'];
+               if ( $conds !== array() && $conds !== '*' ) {
+                       $sql .= " WHERE " . $this->makeList( $conds, LIST_AND, $binaryColumns );
+               }
+
+               $this->mScrollableCursor = false;
+               try {
+                       $ret = $this->query( $sql );
+               } catch ( Exception $e ) {
+                       $this->mScrollableCursor = true;
+                       throw $e;
+               }
+               $this->mScrollableCursor = true;
+               return true;
        }
 
        /**
-        * Return the current value of a sequence. Assumes it has ben nextval'ed in this session.
-        * @param string $seqName
-        * @return int|null
+        * Makes an encoded list of strings from an array
+        * @param array $a containing the data
+        * @param int $mode Constant
+        *      - LIST_COMMA:          comma separated, no field names
+        *      - LIST_AND:            ANDed WHERE clause (without the WHERE). See
+        *        the documentation for $conds in DatabaseBase::select().
+        *      - LIST_OR:             ORed WHERE clause (without the WHERE)
+        *      - LIST_SET:            comma separated with field names, like a SET clause
+        *      - LIST_NAMES:          comma separated field names
+        * @param array $binaryColumns Contains a list of column names that are binary types
+        *      This is a custom parameter only present for MS SQL.
+        *
+        * @throws MWException|DBUnexpectedError
+        * @return string
         */
-       function currentSequenceValue( $seqName ) {
-               $ret = sqlsrv_query( $this->mConn, "SELECT TOP 1 id FROM [sequence_$seqName] ORDER BY id DESC" );
-               if ( $ret !== false ) {
-                       $row = sqlsrv_fetch_array( $ret );
-                       sqlsrv_free_stmt( $ret );
+       public function makeList( $a, $mode = LIST_COMMA, $binaryColumns = array() ) {
+               if ( !is_array( $a ) ) {
+                       throw new DBUnexpectedError( $this,
+                               'DatabaseBase::makeList called with incorrect parameters' );
+               }
 
-                       return $row['id'];
-               } else {
-                       return $this->nextSequenceValue( $seqName );
+               $first = true;
+               $list = '';
+
+               foreach ( $a as $field => $value ) {
+                       if ( $mode != LIST_NAMES && isset( $binaryColumns[$field] ) ) {
+                               if ( is_array( $value ) ) {
+                                       foreach ( $value as &$v ) {
+                                               $v = new MssqlBlob( $v );
+                                       }
+                               } else {
+                                       $value = new MssqlBlob( $value );
+                               }
+                       }
+
+                       if ( !$first ) {
+                               if ( $mode == LIST_AND ) {
+                                       $list .= ' AND ';
+                               } elseif ( $mode == LIST_OR ) {
+                                       $list .= ' OR ';
+                               } else {
+                                       $list .= ',';
+                               }
+                       } else {
+                               $first = false;
+                       }
+
+                       if ( ( $mode == LIST_AND || $mode == LIST_OR ) && is_numeric( $field ) ) {
+                               $list .= "($value)";
+                       } elseif ( ( $mode == LIST_SET ) && is_numeric( $field ) ) {
+                               $list .= "$value";
+                       } elseif ( ( $mode == LIST_AND || $mode == LIST_OR ) && is_array( $value ) ) {
+                               if ( count( $value ) == 0 ) {
+                                       throw new MWException( __METHOD__ . ": empty input for field $field" );
+                               } elseif ( count( $value ) == 1 ) {
+                                       // Special-case single values, as IN isn't terribly efficient
+                                       // Don't necessarily assume the single key is 0; we don't
+                                       // enforce linear numeric ordering on other arrays here.
+                                       $value = array_values( $value );
+                                       $list .= $field . " = " . $this->addQuotes( $value[0] );
+                               } else {
+                                       $list .= $field . " IN (" . $this->makeList( $value ) . ") ";
+                               }
+                       } elseif ( $value === null ) {
+                               if ( $mode == LIST_AND || $mode == LIST_OR ) {
+                                       $list .= "$field IS ";
+                               } elseif ( $mode == LIST_SET ) {
+                                       $list .= "$field = ";
+                               }
+                               $list .= 'NULL';
+                       } else {
+                               if ( $mode == LIST_AND || $mode == LIST_OR || $mode == LIST_SET ) {
+                                       $list .= "$field = ";
+                               }
+                               $list .= $mode == LIST_NAMES ? $value : $this->addQuotes( $value );
+                       }
                }
+
+               return $list;
        }
 
        /**
@@ -696,7 +871,7 @@ class DatabaseMssql extends DatabaseBase {
         * @param string $field
         * @return int Returns the size of a text field, or -1 for "unlimited"
         */
-       function textFieldSize( $table, $field ) {
+       public function textFieldSize( $table, $field ) {
                $table = $this->tableName( $table );
                $sql = "SELECT CHARACTER_MAXIMUM_LENGTH,DATA_TYPE FROM INFORMATION_SCHEMA.Columns
                        WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$field'";
@@ -719,21 +894,46 @@ class DatabaseMssql extends DatabaseBase {
         * @param bool|int $offset The SQL offset (default false)
         * @return array|string
         */
-       function limitResult( $sql, $limit, $offset = false ) {
+       public function limitResult( $sql, $limit, $offset = false ) {
                if ( $offset === false || $offset == 0 ) {
                        if ( strpos( $sql, "SELECT" ) === false ) {
                                return "TOP {$limit} " . $sql;
                        } else {
-                               return preg_replace( '/\bSELECT(\s*DISTINCT)?\b/Dsi', 'SELECT$1 TOP ' . $limit, $sql, 1 );
+                               return preg_replace( '/\bSELECT(\s+DISTINCT)?\b/Dsi',
+                                       'SELECT$1 TOP ' . $limit, $sql, 1 );
                        }
                } else {
-                       $sql = '
-                               SELECT * FROM (
-                                       SELECT sub2.*, ROW_NUMBER() OVER(ORDER BY sub2.line2) AS line3 FROM (
-                                               SELECT 1 AS line2, sub1.* FROM (' . $sql . ') AS sub1
-                                       ) as sub2
-                               ) AS sub3
-                               WHERE line3 BETWEEN ' . ( $offset + 1 ) . ' AND ' . ( $offset + $limit );
+                       // This one is fun, we need to pull out the select list as well as any ORDER BY clause
+                       $select = $orderby = array();
+                       $s1 = preg_match( '#SELECT\s+(.+?)\s+FROM#Dis', $sql, $select );
+                       $s2 = preg_match( '#(ORDER BY\s+.+?)(\s*FOR XML .*)?$#Dis', $sql, $orderby );
+                       $overOrder = $postOrder = '';
+                       $first = $offset + 1;
+                       $last = $offset + $limit;
+                       $sub1 = 'sub_' . $this->mSubqueryId;
+                       $sub2 = 'sub_' . ($this->mSubqueryId + 1);
+                       $this->mSubqueryId += 2;
+                       if ( !$s1 ) {
+                               // wat
+                               throw new DBUnexpectedError( $this, "Attempting to LIMIT a non-SELECT query\n" );
+                       }
+                       if ( !$s2 ) {
+                               // no ORDER BY
+                               $overOrder = 'ORDER BY 1';
+                       } else {
+                               if ( !isset( $orderby[2] ) || !$orderby[2] ) {
+                                       // don't need to strip it out if we're using a FOR XML clause
+                                       $sql = str_replace( $orderby[1], '', $sql );
+                               }
+                               $overOrder = $orderby[1];
+                               $postOrder = ' ' . $overOrder;
+                       }
+                       $sql = "SELECT {$select[1]}
+                                       FROM (
+                                               SELECT ROW_NUMBER() OVER({$overOrder}) AS rowNumber, *
+                                               FROM ({$sql}) {$sub1}
+                                       ) {$sub2}
+                                       WHERE rowNumber BETWEEN {$first} AND {$last}{$postOrder}";
 
                        return $sql;
                }
@@ -749,7 +949,7 @@ class DatabaseMssql extends DatabaseBase {
         * @param string $sql
         * @return array|mixed|string
         */
-       function LimitToTopN( $sql ) {
+       public function LimitToTopN( $sql ) {
                // Matches: LIMIT {[offset,] row_count | row_count OFFSET offset}
                $pattern = '/\bLIMIT\s+((([0-9]+)\s*,\s*)?([0-9]+)(\s+OFFSET\s+([0-9]+))?)/i';
                if ( preg_match( $pattern, $sql, $matches ) ) {
@@ -769,16 +969,6 @@ class DatabaseMssql extends DatabaseBase {
                return $sql;
        }
 
-       /**
-        * Timestamp in ISO 8601 format with no timezone: 1986-02-09T20:00:00Z
-        *
-        * @param int $ts Timestamp
-        * @return bool|string The same date in ISO 8601 format with no timezone or false
-        */
-       function timestamp( $ts = 0 ) {
-               return wfTimestamp( TS_ISO_8601, $ts );
-       }
-
        /**
         * @return string Wikitext of a link to the server software's web site
         */
@@ -789,7 +979,7 @@ class DatabaseMssql extends DatabaseBase {
        /**
         * @return string Version information from the database
         */
-       function getServerVersion() {
+       public function getServerVersion() {
                $server_info = sqlsrv_server_info( $this->mConn );
                $version = 'Error';
                if ( isset( $server_info['SQLServerVersion'] ) ) {
@@ -805,11 +995,11 @@ class DatabaseMssql extends DatabaseBase {
         * @param bool $schema
         * @return bool
         */
-       function tableExists( $table, $fname = __METHOD__, $schema = false ) {
+       public function tableExists( $table, $fname = __METHOD__, $schema = false ) {
                $res = sqlsrv_query( $this->mConn, "SELECT * FROM information_schema.tables
                        WHERE table_type='BASE TABLE' AND table_name = '$table'" );
                if ( $res === false ) {
-                       print "Error in tableExists query: " . $this->getErrors();
+                       print "Error in tableExists query: " . $this->lastError();
 
                        return false;
                }
@@ -827,12 +1017,12 @@ class DatabaseMssql extends DatabaseBase {
         * @param string $fname
         * @return bool
         */
-       function fieldExists( $table, $field, $fname = __METHOD__ ) {
+       public function fieldExists( $table, $field, $fname = __METHOD__ ) {
                $table = $this->tableName( $table );
                $res = sqlsrv_query( $this->mConn, "SELECT DATA_TYPE FROM INFORMATION_SCHEMA.Columns
                        WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" );
                if ( $res === false ) {
-                       print "Error in fieldExists query: " . $this->getErrors();
+                       print "Error in fieldExists query: " . $this->lastError();
 
                        return false;
                }
@@ -843,12 +1033,12 @@ class DatabaseMssql extends DatabaseBase {
                }
        }
 
-       function fieldInfo( $table, $field ) {
+       public function fieldInfo( $table, $field ) {
                $table = $this->tableName( $table );
                $res = sqlsrv_query( $this->mConn, "SELECT * FROM INFORMATION_SCHEMA.Columns
                        WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" );
                if ( $res === false ) {
-                       print "Error in fieldInfo query: " . $this->getErrors();
+                       print "Error in fieldInfo query: " . $this->lastError();
 
                        return false;
                }
@@ -900,150 +1090,74 @@ class DatabaseMssql extends DatabaseBase {
                if ( strlen( $identifier ) > 128 ) {
                        throw new MWException( "The identifier '$identifier' is too long (max. 128)" );
                }
-               if ( ( strpos( $identifier, '[' ) !== false ) || ( strpos( $identifier, ']' ) !== false ) ) {
+               if ( ( strpos( $identifier, '[' ) !== false )
+                       || ( strpos( $identifier, ']' ) !== false )
+               ) {
                        // It may be allowed if you quoted with double quotation marks, but
                        // that would break if QUOTED_IDENTIFIER is OFF
-                       throw new MWException( "You can't use square brackers in the identifier '$identifier'" );
+                       throw new MWException( "Square brackets are not allowed in '$identifier'" );
                }
 
                return "[$identifier]";
        }
 
        /**
-        * Initial setup.
-        * Precondition: This object is connected as the superuser.
-        * Creates the database, schema, user and login.
+        * @param string $s
+        * @return string
         */
-       function initial_setup( $dbName, $newUser, $loginPassword ) {
-               $dbName = $this->escapeIdentifier( $dbName );
-
-               // It is not clear what can be used as a login,
-               // From http://msdn.microsoft.com/en-us/library/ms173463.aspx
-               // a sysname may be the same as an identifier.
-               $newUser = $this->escapeIdentifier( $newUser );
-               $loginPassword = $this->addQuotes( $loginPassword );
-
-               $this->doQuery( "CREATE DATABASE $dbName;" );
-               $this->doQuery( "USE $dbName;" );
-               $this->doQuery( "CREATE SCHEMA $dbName;" );
-               $this->doQuery( "
-                                               CREATE
-                                                       LOGIN $newUser
-                                               WITH
-                                                       PASSWORD=$loginPassword
-                                               ;
-                                       " );
-               $this->doQuery( "
-                                               CREATE
-                                                       USER $newUser
-                                               FOR
-                                                       LOGIN $newUser
-                                               WITH
-                                                       DEFAULT_SCHEMA=$dbName
-                                               ;
-                                       " );
-               $this->doQuery( "
-                                               GRANT
-                                                       BACKUP DATABASE,
-                                                       BACKUP LOG,
-                                                       CREATE DEFAULT,
-                                                       CREATE FUNCTION,
-                                                       CREATE PROCEDURE,
-                                                       CREATE RULE,
-                                                       CREATE TABLE,
-                                                       CREATE VIEW,
-                                                       CREATE FULLTEXT CATALOG
-                                               ON
-                                                       DATABASE::$dbName
-                                               TO $newUser
-                                               ;
-                                       " );
-               $this->doQuery( "
-                                               GRANT
-                                                       CONTROL
-                                               ON
-                                                       SCHEMA::$dbName
-                                               TO $newUser
-                                               ;
-                                       " );
-       }
-
-       function encodeBlob( $b ) {
-               // we can't have zero's and such, this is a simple encoding to make sure we don't barf
-               return base64_encode( $b );
-       }
-
-       function decodeBlob( $b ) {
-               // we can't have zero's and such, this is a simple encoding to make sure we don't barf
-               return base64_decode( $b );
+       public function strencode( $s ) { # Should not be called by us
+               return str_replace( "'", "''", $s );
        }
 
        /**
-        * @param array $tables
-        * @param array $use_index
-        * @param array $join_conds
+        * @param string $s
         * @return string
         */
-       protected function tableNamesWithUseIndexOrJOIN( $tables, $use_index = array(),
-               $join_conds = array()
-       ) {
-               $ret = array();
-               $retJOIN = array();
-               $use_index_safe = is_array( $use_index ) ? $use_index : array();
-               $join_conds_safe = is_array( $join_conds ) ? $join_conds : array();
-               foreach ( $tables as $table ) {
-                       // Is there a JOIN and INDEX clause for this table?
-                       if ( isset( $join_conds_safe[$table] ) && isset( $use_index_safe[$table] ) ) {
-                               $tableClause = $join_conds_safe[$table][0] . ' ' . $this->tableName( $table );
-                               $tableClause .= ' ' . $this->useIndexClause( implode( ',', (array)$use_index_safe[$table] ) );
-                               $tableClause .= ' ON (' . $this->makeList( (array)$join_conds_safe[$table][1], LIST_AND ) . ')';
-                               $retJOIN[] = $tableClause;
-                       // Is there an INDEX clause?
-                       } elseif ( isset( $use_index_safe[$table] ) ) {
-                               $tableClause = $this->tableName( $table );
-                               $tableClause .= ' ' . $this->useIndexClause( implode( ',', (array)$use_index_safe[$table] ) );
-                               $ret[] = $tableClause;
-                       // Is there a JOIN clause?
-                       } elseif ( isset( $join_conds_safe[$table] ) ) {
-                               $tableClause = $join_conds_safe[$table][0] . ' ' . $this->tableName( $table );
-                               $tableClause .= ' ON (' . $this->makeList( (array)$join_conds_safe[$table][1], LIST_AND ) . ')';
-                               $retJOIN[] = $tableClause;
-                       } else {
-                               $tableClause = $this->tableName( $table );
-                               $ret[] = $tableClause;
-                       }
-               }
-               // We can't separate explicit JOIN clauses with ',', use ' ' for those
-               $straightJoins = !empty( $ret ) ? implode( ',', $ret ) : "";
-               $otherJoins = !empty( $retJOIN ) ? implode( ' ', $retJOIN ) : "";
-
-               // Compile our final table clause
-               return implode( ' ', array( $straightJoins, $otherJoins ) );
-       }
-
-       function strencode( $s ) { # Should not be called by us
-               return str_replace( "'", "''", $s );
-       }
-
-       function addQuotes( $s ) {
-               if ( $s instanceof Blob ) {
-                       return "'" . $s->fetch( $s ) . "'";
+       public function addQuotes( $s ) {
+               if ( $s instanceof MssqlBlob ) {
+                       return $s->fetch();
+               } elseif ( $s instanceof Blob ) {
+                       // this shouldn't really ever be called, but it's here if needed
+                       // (and will quite possibly make the SQL error out)
+                       $blob = new MssqlBlob( $s->fetch() );
+                       return $blob->fetch();
                } else {
+                       if ( is_bool( $s ) ) {
+                               $s = $s ? 1 : 0;
+                       }
                        return parent::addQuotes( $s );
                }
        }
 
+       /**
+        * @param string $s
+        * @return string
+        */
        public function addIdentifierQuotes( $s ) {
                // http://msdn.microsoft.com/en-us/library/aa223962.aspx
                return '[' . $s . ']';
        }
 
+       /**
+        * @param string $name
+        * @return bool
+        */
        public function isQuotedIdentifier( $name ) {
-               return $name[0] == '[' && substr( $name, -1, 1 ) == ']';
+               return strlen( $name ) && $name[0] == '[' && substr( $name, -1, 1 ) == ']';
        }
 
-       function selectDB( $db ) {
-               return ( $this->query( "SET DATABASE $db" ) !== false );
+       /**
+        * @param string $db
+        * @return bool
+        */
+       public function selectDB( $db ) {
+               try {
+                       $this->mDBname = $db;
+                       $this->query( "USE $db" );
+                       return true;
+               } catch ( Exception $e ) {
+                       return false;
+               }
        }
 
        /**
@@ -1051,7 +1165,7 @@ class DatabaseMssql extends DatabaseBase {
         *   an SQL query, valid keys are listed in the function.
         * @return array
         */
-       function makeSelectOptions( $options ) {
+       public function makeSelectOptions( $options ) {
                $tailOpts = '';
                $startOpts = '';
 
@@ -1066,10 +1180,15 @@ class DatabaseMssql extends DatabaseBase {
 
                $tailOpts .= $this->makeOrderBy( $options );
 
-               if ( isset( $noKeyOptions['DISTINCT'] ) && isset( $noKeyOptions['DISTINCTROW'] ) ) {
+               if ( isset( $noKeyOptions['DISTINCT'] ) || isset( $noKeyOptions['DISTINCTROW'] ) ) {
                        $startOpts .= 'DISTINCT';
                }
 
+               if ( isset( $noKeyOptions['FOR XML'] ) ) {
+                       // used in group concat field emulation
+                       $tailOpts .= " FOR XML PATH('')";
+               }
+
                // we want this to be compatible with the output of parent::makeSelectOptions()
                return array( $startOpts, '', $tailOpts, '' );
        }
@@ -1078,25 +1197,158 @@ class DatabaseMssql extends DatabaseBase {
         * Get the type of the DBMS, as it appears in $wgDBtype.
         * @return string
         */
-       function getType() {
+       public function getType() {
                return 'mssql';
        }
 
-       function buildConcat( $stringList ) {
+       /**
+        * @param array $stringList
+        * @return string
+        */
+       public function buildConcat( $stringList ) {
                return implode( ' + ', $stringList );
        }
 
+       /**
+        * Build a GROUP_CONCAT or equivalent statement for a query.
+        * MS SQL doesn't have GROUP_CONCAT so we emulate it with other stuff (and boy is it nasty)
+        *
+        * This is useful for combining a field for several rows into a single string.
+        * NULL values will not appear in the output, duplicated values will appear,
+        * and the resulting delimiter-separated values have no defined sort order.
+        * Code using the results may need to use the PHP unique() or sort() methods.
+        *
+        * @param string $delim Glue to bind the results together
+        * @param string|array $table Table name
+        * @param string $field Field name
+        * @param string|array $conds Conditions
+        * @param string|array $join_conds Join conditions
+        * @return String SQL text
+        * @since 1.23
+        */
+       public function buildGroupConcatField( $delim, $table, $field, $conds = '',
+               $join_conds = array()
+       ) {
+               $gcsq = 'gcsq_' . $this->mSubqueryId;
+               $this->mSubqueryId++;
+
+               $delimLen = strlen( $delim );
+               $fld = "{$field} + {$this->addQuotes( $delim )}";
+               $sql = "(SELECT LEFT({$field}, LEN({$field}) - {$delimLen}) FROM ("
+                       . $this->selectSQLText( $table, $fld, $conds, null, array( 'FOR XML' ), $join_conds )
+                       . ") {$gcsq} ({$field}))";
+
+               return $sql;
+       }
+
+       /**
+        * @return string
+        */
        public function getSearchEngine() {
                return "SearchMssql";
        }
 
        /**
-        * Since MSSQL doesn't recognize the infinity keyword, set date manually.
-        * @todo Remove magic date
+        * Returns an associative array for fields that are of type varbinary, binary, or image
+        * $table can be either a raw table name or passed through tableName() first
+        * @param string $table
+        * @return array
+        */
+       private function getBinaryColumns( $table ) {
+               $tableRawArr = explode( '.', preg_replace( '#\[([^\]]*)\]#', '$1', $table ) );
+               $tableRaw = array_pop( $tableRawArr );
+
+               if ( $this->mBinaryColumnCache === null ) {
+                       $this->populateColumnCaches();
+               }
+
+               return isset( $this->mBinaryColumnCache[$tableRaw] )
+                       ? $this->mBinaryColumnCache[$tableRaw]
+                       : array();
+       }
+
+       /**
+        * @param string $table
+        * @return array
+        */
+       private function getBitColumns( $table ) {
+               $tableRawArr = explode( '.', preg_replace( '#\[([^\]]*)\]#', '$1', $table ) );
+               $tableRaw = array_pop( $tableRawArr );
+
+               if ( $this->mBitColumnCache === null ) {
+                       $this->populateColumnCaches();
+               }
+
+               return isset( $this->mBitColumnCache[$tableRaw] )
+                       ? $this->mBitColumnCache[$tableRaw]
+                       : array();
+       }
+
+       /**
+        * @void
+        */
+       private function populateColumnCaches() {
+               $res = $this->select( 'INFORMATION_SCHEMA.COLUMNS', '*',
+                       array(
+                               'TABLE_CATALOG' => $this->mDBname,
+                               'TABLE_SCHEMA' => $this->mSchema,
+                               'DATA_TYPE' => array( 'varbinary', 'binary', 'image', 'bit' )
+                       ) );
+
+               $this->mBinaryColumnCache = array();
+               $this->mBitColumnCache = array();
+               foreach ( $res as $row ) {
+                       if ( $row->DATA_TYPE == 'bit' ) {
+                               $this->mBitColumnCache[$row->TABLE_NAME][$row->COLUMN_NAME] = $row;
+                       } else {
+                               $this->mBinaryColumnCache[$row->TABLE_NAME][$row->COLUMN_NAME] = $row;
+                       }
+               }
+       }
+
+       /**
+        * @param string $name
+        * @param string $format
         * @return string
         */
-       public function getInfinity() {
-               return '3000-01-31 00:00:00.000';
+       function tableName( $name, $format = 'quoted' ) {
+               # Replace reserved words with better ones
+               switch ( $name ) {
+                       case 'user':
+                               return $this->realTableName( 'mwuser', $format );
+                       default:
+                               return $this->realTableName( $name, $format );
+               }
+       }
+
+       /**
+        * call this instead of tableName() in the updater when renaming tables
+        * @param string $name
+        * @param string $format
+        * @return string
+        */
+       function realTableName( $name, $format = 'quoted' ) {
+               return parent::tableName( $name, $format );
+       }
+
+       /**
+        * Called in the installer and updater.
+        * Probably doesn't need to be called anywhere else in the codebase.
+        * @param bool|null $value
+        * @return bool|null
+        */
+       public function prepareStatements( $value = null ) {
+               return wfSetVar( $this->mPrepareStatements, $value );
+       }
+
+       /**
+        * Called in the installer and updater.
+        * Probably doesn't need to be called anywhere else in the codebase.
+        * @param bool|null $value
+        * @return bool|null
+        */
+       public function scrollableCursor( $value = null ) {
+               return wfSetVar( $this->mScrollableCursor, $value );
        }
 } // end DatabaseMssql class
 
@@ -1142,232 +1394,105 @@ class MssqlField implements Field {
        }
 }
 
-/**
- * The MSSQL PHP driver doesn't support sqlsrv_num_rows, so we recall all rows
- * into an array and maintain our own cursor index into that array... This is
- * similar to the way the Oracle driver handles this same issue
- *
- * @ingroup Database
- */
-class MssqlResult {
-       /** @var int */
-       private $mCursor;
-
-       /** @var array */
-       private $mRows;
-
-       /** @var bool|int */
-       private $mNumFields;
-
-       /** @var array|bool */
-       private $mFieldMeta;
+class MssqlBlob extends Blob {
+       public function __construct( $data ) {
+               if ( $data instanceof MssqlBlob ) {
+                       return $data;
+               } elseif ( $data instanceof Blob ) {
+                       $this->mData = $data->fetch();
+               } elseif ( is_array( $data ) && is_object( $data ) ) {
+                       $this->mData = serialize( $data );
+               } else {
+                       $this->mData = $data;
+               }
+       }
 
        /**
-        * @param bool|resource $queryresult
+        * Returns an unquoted hex representation of a binary string
+        * for insertion into varbinary-type fields
+        * @return string
         */
-       public function __construct( $queryresult = false ) {
-               $this->mCursor = 0;
-               $this->mRows = array();
-               $this->mNumFields = sqlsrv_num_fields( $queryresult );
-               $this->mFieldMeta = sqlsrv_field_metadata( $queryresult );
-
-               $rows = sqlsrv_fetch_array( $queryresult, SQLSRV_FETCH_ASSOC );
-
-               foreach ( $rows as $row ) {
-                       if ( $row !== null ) {
-                               foreach ( $row as $k => $v ) {
-                                       if ( is_object( $v ) && method_exists( $v, 'format' ) ) { // DateTime Object
-                                               $row[$k] = $v->format( "Y-m-d\TH:i:s\Z" );
-                                       }
-                               }
-                               $this->mRows[] = $row; // read results into memory, cursors are not supported
-                       }
+       public function fetch() {
+               if ( $this->mData === null ) {
+                       return 'null';
                }
-               $this->mRowCount = count( $this->mRows );
-               sqlsrv_free_stmt( $queryresult );
+
+               $ret = '0x';
+               $dataLength = strlen( $this->mData );
+               for ( $i = 0; $i < $dataLength; $i++ ) {
+                       $ret .= bin2hex( pack( 'C', ord( $this->mData[$i] ) ) );
+               }
+
+               return $ret;
        }
+}
+
+class MssqlResultWrapper extends ResultWrapper {
+       private $mSeekTo = null;
 
        /**
-        * @param array $array
-        * @param stdClass $obj
-        * @return stdClass
+        * @return stdClass|bool
         */
-       private function array_to_obj( $array, &$obj ) {
-               foreach ( $array as $key => $value ) {
-                       if ( is_array( $value ) ) {
-                               $obj->$key = new stdClass();
-                               $this->array_to_obj( $value, $obj->$key );
-                       } else {
-                               if ( !empty( $key ) ) {
-                                       $obj->$key = $value;
-                               }
-                       }
-               }
+       public function fetchObject() {
+               $res = $this->result;
 
-               return $obj;
-       }
+               if ( $this->mSeekTo !== null ) {
+                       $result = sqlsrv_fetch_object( $res, 'stdClass', array(),
+                               SQLSRV_SCROLL_ABSOLUTE, $this->mSeekTo );
+                       $this->mSeekTo = null;
+               } else {
+                       $result = sqlsrv_fetch_object( $res );
+               }
 
-       public function fetch( $mode = SQLSRV_FETCH_BOTH, $object_class = 'stdClass' ) {
-               if ( $this->mCursor >= $this->mRowCount || $this->mRowCount == 0 ) {
+               // MediaWiki expects us to return boolean false when there are no more rows instead of null
+               if ( $result === null ) {
                        return false;
                }
-               $arrNum = array();
-               if ( $mode == SQLSRV_FETCH_NUMERIC || $mode == SQLSRV_FETCH_BOTH ) {
-                       foreach ( $this->mRows[$this->mCursor] as $value ) {
-                               $arrNum[] = $value;
-                       }
-               }
-               switch ( $mode ) {
-                       case SQLSRV_FETCH_ASSOC:
-                               $ret = $this->mRows[$this->mCursor];
-                               break;
-                       case SQLSRV_FETCH_NUMERIC:
-                               $ret = $arrNum;
-                               break;
-                       case 'OBJECT':
-                               $o = new $object_class;
-                               $ret = $this->array_to_obj( $this->mRows[$this->mCursor], $o );
-                               break;
-                       case SQLSRV_FETCH_BOTH:
-                       default:
-                               $ret = $this->mRows[$this->mCursor] + $arrNum;
-                               break;
-               }
-
-               $this->mCursor++;
 
-               return $ret;
+               return $result;
        }
 
-       public function get( $pos, $fld ) {
-               return $this->mRows[$pos][$fld];
-       }
+       /**
+        * @return array|bool
+        */
+       public function fetchRow() {
+               $res = $this->result;
 
-       public function numrows() {
-               return $this->mRowCount;
-       }
+               if ( $this->mSeekTo !== null ) {
+                       $result = sqlsrv_fetch_array( $res, SQLSRV_FETCH_BOTH,
+                               SQLSRV_SCROLL_ABSOLUTE, $this->mSeekTo );
+                       $this->mSeekTo = null;
+               } else {
+                       $result = sqlsrv_fetch_array( $res );
+               }
 
-       public function seek( $iRow ) {
-               $this->mCursor = min( $iRow, $this->mRowCount );
-       }
+               // MediaWiki expects us to return boolean false when there are no more rows instead of null
+               if ( $result === null ) {
+                       return false;
+               }
 
-       public function numfields() {
-               return $this->mNumFields;
+               return $result;
        }
 
-       public function fieldname( $nr ) {
-               $arrKeys = array_keys( $this->mRows[0] );
+       /**
+        * @param int $row
+        * @return bool
+        */
+       public function seek( $row ) {
+               $res = $this->result;
 
-               return $arrKeys[$nr];
-       }
+               // check bounds
+               $numRows = $this->db->numRows( $res );
+               $row = intval( $row );
 
-       public function fieldtype( $nr ) {
-               $i = 0;
-               $intType = -1;
-               foreach ( $this->mFieldMeta as $meta ) {
-                       if ( $nr == $i ) {
-                               $intType = $meta['Type'];
-                               break;
-                       }
-                       $i++;
-               }
-               // http://msdn.microsoft.com/en-us/library/cc296183.aspx contains type table
-               switch ( $intType ) {
-                       case SQLSRV_SQLTYPE_BIGINT:
-                               $strType = 'bigint';
-                               break;
-                       case SQLSRV_SQLTYPE_BINARY:
-                               $strType = 'binary';
-                               break;
-                       case SQLSRV_SQLTYPE_BIT:
-                               $strType = 'bit';
-                               break;
-                       case SQLSRV_SQLTYPE_CHAR:
-                               $strType = 'char';
-                               break;
-                       case SQLSRV_SQLTYPE_DATETIME:
-                               $strType = 'datetime';
-                               break;
-                       case SQLSRV_SQLTYPE_DECIMAL: // ($precision, $scale)
-                               $strType = 'decimal';
-                               break;
-                       case SQLSRV_SQLTYPE_FLOAT:
-                               $strType = 'float';
-                               break;
-                       case SQLSRV_SQLTYPE_IMAGE:
-                               $strType = 'image';
-                               break;
-                       case SQLSRV_SQLTYPE_INT:
-                               $strType = 'int';
-                               break;
-                       case SQLSRV_SQLTYPE_MONEY:
-                               $strType = 'money';
-                               break;
-                       case SQLSRV_SQLTYPE_NCHAR: // ($charCount):
-                               $strType = 'nchar';
-                               break;
-                       case SQLSRV_SQLTYPE_NUMERIC: // ($precision, $scale):
-                               $strType = 'numeric';
-                               break;
-                       case SQLSRV_SQLTYPE_NVARCHAR: // ($charCount)
-                               $strType = 'nvarchar';
-                               break;
-                       // case SQLSRV_SQLTYPE_NVARCHAR('max'):
-                       //       $strType = 'nvarchar(MAX)';
-                       //       break;
-                       case SQLSRV_SQLTYPE_NTEXT:
-                               $strType = 'ntext';
-                               break;
-                       case SQLSRV_SQLTYPE_REAL:
-                               $strType = 'real';
-                               break;
-                       case SQLSRV_SQLTYPE_SMALLDATETIME:
-                               $strType = 'smalldatetime';
-                               break;
-                       case SQLSRV_SQLTYPE_SMALLINT:
-                               $strType = 'smallint';
-                               break;
-                       case SQLSRV_SQLTYPE_SMALLMONEY:
-                               $strType = 'smallmoney';
-                               break;
-                       case SQLSRV_SQLTYPE_TEXT:
-                               $strType = 'text';
-                               break;
-                       case SQLSRV_SQLTYPE_TIMESTAMP:
-                               $strType = 'timestamp';
-                               break;
-                       case SQLSRV_SQLTYPE_TINYINT:
-                               $strType = 'tinyint';
-                               break;
-                       case SQLSRV_SQLTYPE_UNIQUEIDENTIFIER:
-                               $strType = 'uniqueidentifier';
-                               break;
-                       case SQLSRV_SQLTYPE_UDT:
-                               $strType = 'UDT';
-                               break;
-                       case SQLSRV_SQLTYPE_VARBINARY: // ($byteCount)
-                               $strType = 'varbinary';
-                               break;
-                       // case SQLSRV_SQLTYPE_VARBINARY('max'):
-                       //       $strType = 'varbinary(MAX)';
-                       //       break;
-                       case SQLSRV_SQLTYPE_VARCHAR: // ($charCount)
-                               $strType = 'varchar';
-                               break;
-                       // case SQLSRV_SQLTYPE_VARCHAR('max'):
-                       //       $strType = 'varchar(MAX)';
-                       //       break;
-                       case SQLSRV_SQLTYPE_XML:
-                               $strType = 'xml';
-                               break;
-                       default:
-                               $strType = $intType;
+               if ( $numRows === 0 ) {
+                       return false;
+               } elseif ( $row < 0 || $row > $numRows - 1 ) {
+                       return false;
                }
 
-               return $strType;
-       }
-
-       public function free() {
-               unset( $this->mRows );
+               // Unlike MySQL, the seek actually happens on the next access
+               $this->mSeekTo = $row;
+               return true;
        }
 }
index e202f8a..b371ae0 100644 (file)
@@ -57,6 +57,17 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                                . " have you compiled PHP with the --with-mysqli option?\n" );
                }
 
+               // Other than mysql_connect, mysqli_real_connect expects an explicit port
+               // parameter. So we need to parse the port out of $realServer
+               $port = null;
+               $hostAndPort = IP::splitHostAndPort( $realServer );
+               if ( $hostAndPort ) {
+                       $realServer = $hostAndPort[0];
+                       if ( $hostAndPort[1] ) {
+                               $port = $hostAndPort[1];
+                       }
+               }
+               
                $connFlags = 0;
                if ( $this->mFlags & DBO_SSL ) {
                        $connFlags |= MYSQLI_CLIENT_SSL;
@@ -83,7 +94,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                                usleep( 1000 );
                        }
                        if ( $mysqli->real_connect( $realServer, $this->mUser,
-                               $this->mPassword, $this->mDBname, null, null, $connFlags )
+                               $this->mPassword, $this->mDBname, $port, null, $connFlags )
                        ) {
                                return $mysqli;
                        }
@@ -281,4 +292,18 @@ class DatabaseMysqli extends DatabaseMysqlBase {
        protected function mysqlPing() {
                return $this->mConn->ping();
        }
+
+       /**
+        * Give an id for the connection
+        *
+        * mysql driver used resource id, but mysqli objects cannot be cast to string.
+        */
+       public function __toString() {
+               if ( $this->mConn instanceof Mysqli ) {
+                       return (string)$this->mConn->thread_id;
+               } else {
+                       // mConn might be false or something.
+                       return (string)$this->mConn;
+               }
+       }
 }
index d304444..6e0490d 100644 (file)
@@ -220,6 +220,7 @@ class DatabaseOracle extends DatabaseBase {
                                'dbname' => isset( $args[3] ) ? $args[3] : false,
                                'flags' => isset( $args[4] ) ? $args[4] : 0,
                                'tablePrefix' => isset( $args[5] ) ? $args[5] : 'get from global',
+                               'schema' => 'get from global',
                                'foreign' => isset( $args[6] ) ? $args[6] : false
                        );
                }
@@ -641,8 +642,12 @@ class DatabaseOracle extends DatabaseBase {
                        } else {
                                $first = false;
                        }
-
-                       $sql .= $this->fieldBindStatement( $table, $col, $val );
+                       if ( $this->isQuotedIdentifier( $val ) ) {
+                               $sql .= $this->removeIdentifierQuotes( $val );
+                               unset( $row[$col] );
+                       } else {
+                               $sql .= $this->fieldBindStatement( $table, $col, $val );
+                       }
                }
                $sql .= ')';
 
@@ -773,6 +778,32 @@ class DatabaseOracle extends DatabaseBase {
                return $retval;
        }
 
+       public function upsert( $table, array $rows, array $uniqueIndexes, array $set,
+               $fname = __METHOD__
+       ) {
+               if ( !count( $rows ) ) {
+                       return true; // nothing to do
+               }
+
+               if ( !is_array( reset( $rows ) ) ) {
+                       $rows = array( $rows );
+               }
+
+               $sequenceData = $this->getSequenceData( $table );
+               if ( $sequenceData !== false ) {
+                       // add sequence column to each list of columns, when not set
+                       foreach ( $rows as &$row ) {
+                               if ( !isset( $row[$sequenceData['column']] ) ) {
+                                       $row[$sequenceData['column']] =
+                                               $this->addIdentifierQuotes( 'GET_SEQUENCE_VALUE(\'' .
+                                                       $sequenceData['sequence'] . '\')' );
+                               }
+                       }
+               }
+
+               return parent::upsert( $table, $rows, $uniqueIndexes, $set, $fname );
+       }
+
        function tableName( $name, $format = 'quoted' ) {
                /*
                Replace reserved words with better ones
@@ -1003,8 +1034,8 @@ class DatabaseOracle extends DatabaseBase {
                $table = strtoupper( $this->removeIdentifierQuotes( $table ) );
                $index = strtoupper( $index );
                $owner = strtoupper( $this->mDBname );
-               $SQL = "SELECT 1 FROM all_indexes WHERE owner='$owner' AND index_name='{$table}_{$index}'";
-               $res = $this->doQuery( $SQL );
+               $sql = "SELECT 1 FROM all_indexes WHERE owner='$owner' AND index_name='{$table}_{$index}'";
+               $res = $this->doQuery( $sql );
                if ( $res ) {
                        $count = $res->numRows();
                        $res->free();
@@ -1025,8 +1056,8 @@ class DatabaseOracle extends DatabaseBase {
                $table = $this->tableName( $table );
                $table = $this->addQuotes( strtoupper( $this->removeIdentifierQuotes( $table ) ) );
                $owner = $this->addQuotes( strtoupper( $this->mDBname ) );
-               $SQL = "SELECT 1 FROM all_tables WHERE owner=$owner AND table_name=$table";
-               $res = $this->doQuery( $SQL );
+               $sql = "SELECT 1 FROM all_tables WHERE owner=$owner AND table_name=$table";
+               $res = $this->doQuery( $sql );
                if ( $res && $res->numRows() > 0 ) {
                        $exists = true;
                } else {
index c8830d3..6aee528 100644 (file)
@@ -349,11 +349,11 @@ class DatabasePostgres extends DatabaseBase {
        }
 
        function hasConstraint( $name ) {
-               $SQL = "SELECT 1 FROM pg_catalog.pg_constraint c, pg_catalog.pg_namespace n " .
+               $sql = "SELECT 1 FROM pg_catalog.pg_constraint c, pg_catalog.pg_namespace n " .
                        "WHERE c.connamespace = n.oid AND conname = '" .
                        pg_escape_string( $this->mConn, $name ) . "' AND n.nspname = '" .
                        pg_escape_string( $this->mConn, $this->getCoreSchema() ) . "'";
-               $res = $this->doQuery( $SQL );
+               $res = $this->doQuery( $sql );
 
                return $this->numRows( $res );
        }
@@ -1360,10 +1360,10 @@ __INDEXATTR__;
                $table = $this->realTableName( $table, 'raw' );
                $etable = $this->addQuotes( $table );
                $eschema = $this->addQuotes( $schema );
-               $SQL = "SELECT 1 FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n "
+               $sql = "SELECT 1 FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n "
                        . "WHERE c.relnamespace = n.oid AND c.relname = $etable AND n.nspname = $eschema "
                        . "AND c.relkind IN ('" . implode( "','", $types ) . "')";
-               $res = $this->query( $SQL );
+               $res = $this->query( $sql );
                $count = $res ? $res->numRows() : 0;
 
                return (bool)$count;
@@ -1421,13 +1421,13 @@ SQL;
        }
 
        function constraintExists( $table, $constraint ) {
-               $SQL = sprintf( "SELECT 1 FROM information_schema.table_constraints " .
+               $sql = sprintf( "SELECT 1 FROM information_schema.table_constraints " .
                        "WHERE constraint_schema = %s AND table_name = %s AND constraint_name = %s",
                        $this->addQuotes( $this->getCoreSchema() ),
                        $this->addQuotes( $table ),
                        $this->addQuotes( $constraint )
                );
-               $res = $this->query( $SQL );
+               $res = $this->query( $sql );
                if ( !$res ) {
                        return null;
                }
index fa827d1..3313d25 100644 (file)
@@ -41,8 +41,11 @@ class DatabaseSqlite extends DatabaseBase {
        /** @var PDO */
        protected $mConn;
 
+       /** @var FSLockManager (hopefully on the same server as the DB) */
+       protected $lockMgr;
+
        function __construct( $p = null ) {
-               global $wgSharedDB;
+               global $wgSharedDB, $wgSQLiteDataDir;
 
                if ( !is_array( $p ) ) { // legacy calling pattern
                        wfDeprecated( __METHOD__ . " method called without parameter array.", "1.22" );
@@ -54,6 +57,7 @@ class DatabaseSqlite extends DatabaseBase {
                                'dbname' => isset( $args[3] ) ? $args[3] : false,
                                'flags' => isset( $args[4] ) ? $args[4] : 0,
                                'tablePrefix' => isset( $args[5] ) ? $args[5] : 'get from global',
+                               'schema' => 'get from global',
                                'foreign' => isset( $args[6] ) ? $args[6] : false
                        );
                }
@@ -67,6 +71,8 @@ class DatabaseSqlite extends DatabaseBase {
                                }
                        }
                }
+
+               $this->lockMgr = new FSLockManager( array( 'lockDirectory' => "$wgSQLiteDataDir/locks" ) );
        }
 
        /**
@@ -516,10 +522,11 @@ class DatabaseSqlite extends DatabaseBase {
         * @param array $options
         * @return string
         */
-       protected function makeUpdateOptions( $options ) {
+       protected function makeUpdateOptionsArray( $options ) {
+               $options = parent::makeUpdateOptionsArray( $options );
                $options = self::fixIgnore( $options );
 
-               return parent::makeUpdateOptions( $options );
+               return $options;
        }
 
        /**
@@ -866,6 +873,22 @@ class DatabaseSqlite extends DatabaseBase {
                return $s;
        }
 
+       public function lock( $lockName, $method, $timeout = 5 ) {
+               global $wgSQLiteDataDir;
+
+               if ( !is_dir( "$wgSQLiteDataDir/locks" ) ) { // create dir as needed
+                       if ( !is_writable( $wgSQLiteDataDir ) || !mkdir( "$wgSQLiteDataDir/locks" ) ) {
+                               throw new DBError( "Cannot create directory \"$wgSQLiteDataDir/locks\"." );
+                       }
+               }
+
+               return $this->lockMgr->lock( array( $lockName ), LockManager::LOCK_EX, $timeout )->isOK();
+       }
+
+       public function unlock( $lockName, $method ) {
+               return $this->lockMgr->unlock( array( $lockName ), LockManager::LOCK_EX )->isOK();
+       }
+
        /**
         * Build a concatenation list to feed into a SQL query
         *
index 87687db..36d218a 100644 (file)
@@ -52,7 +52,7 @@ class DBObject {
  */
 class Blob {
        /** @var string */
-       private $mData;
+       protected $mData;
 
        function __construct( $data ) {
                $this->mData = $data;
index e35c4c4..de4c2f5 100644 (file)
@@ -265,6 +265,7 @@ class LoadBalancer {
                                wfDebugLog( 'connect', __METHOD__ . ": Failed connecting to $i/$wiki" );
                                unset( $nonErrorLoads[$i] );
                                unset( $currentLoads[$i] );
+                               $i = false;
                                continue;
                        }
 
@@ -492,13 +493,6 @@ class LoadBalancer {
        public function reuseConnection( $conn ) {
                $serverIndex = $conn->getLBInfo( 'serverIndex' );
                $refCount = $conn->getLBInfo( 'foreignPoolRefCount' );
-               $dbName = $conn->getDBname();
-               $prefix = $conn->tablePrefix();
-               if ( strval( $prefix ) !== '' ) {
-                       $wiki = "$dbName-$prefix";
-               } else {
-                       $wiki = $dbName;
-               }
                if ( $serverIndex === null || $refCount === null ) {
                        wfDebug( __METHOD__ . ": this connection was not opened as a foreign connection\n" );
 
@@ -515,6 +509,14 @@ class LoadBalancer {
 
                        return;
                }
+
+               $dbName = $conn->getDBname();
+               $prefix = $conn->tablePrefix();
+               if ( strval( $prefix ) !== '' ) {
+                       $wiki = "$dbName-$prefix";
+               } else {
+                       $wiki = $dbName;
+               }
                if ( $this->mConns['foreignUsed'][$serverIndex][$wiki] !== $conn ) {
                        throw new MWException( __METHOD__ . ": connection not found, has " .
                                "the connection been freed already?" );
index b6ba4f2..fa2dd99 100644 (file)
@@ -32,7 +32,7 @@ interface LoadMonitor {
         *
         * @param LoadBalancer $parent
         */
-       function __construct( $parent );
+       public function __construct( $parent );
 
        /**
         * Perform pre-connection load ratio adjustment.
@@ -40,7 +40,7 @@ interface LoadMonitor {
         * @param string|bool $group The selected query group. Default: false
         * @param string|bool $wiki Default: false
         */
-       function scaleLoads( &$loads, $group = false, $wiki = false );
+       public function scaleLoads( &$loads, $group = false, $wiki = false );
 
        /**
         * Return an estimate of replication lag for each server
@@ -50,22 +50,17 @@ interface LoadMonitor {
         *
         * @return array
         */
-       function getLagTimes( $serverIndexes, $wiki );
+       public function getLagTimes( $serverIndexes, $wiki );
 }
 
 class LoadMonitorNull implements LoadMonitor {
-       function __construct( $parent ) {
+       public function __construct( $parent ) {
        }
 
-       function scaleLoads( &$loads, $group = false, $wiki = false ) {
+       public function scaleLoads( &$loads, $group = false, $wiki = false ) {
        }
 
-       /**
-        * @param array $serverIndexes
-        * @param string $wiki
-        * @return array
-        */
-       function getLagTimes( $serverIndexes, $wiki ) {
+       public function getLagTimes( $serverIndexes, $wiki ) {
                return array_fill_keys( $serverIndexes, 0 );
        }
 }
@@ -80,33 +75,21 @@ class LoadMonitorMySQL implements LoadMonitor {
        /** @var LoadBalancer */
        public $parent;
 
-       /**
-        * @param LoadBalancer $parent
-        */
-       function __construct( $parent ) {
+       public function __construct( $parent ) {
                $this->parent = $parent;
        }
 
-       /**
-        * @param array $loads
-        * @param bool $group
-        * @param bool $wiki
-        */
-       function scaleLoads( &$loads, $group = false, $wiki = false ) {
+       public function scaleLoads( &$loads, $group = false, $wiki = false ) {
        }
 
-       /**
-        * @param array $serverIndexes
-        * @param string $wiki
-        * @return array
-        */
-       function getLagTimes( $serverIndexes, $wiki ) {
+       public function getLagTimes( $serverIndexes, $wiki ) {
                if ( count( $serverIndexes ) == 1 && reset( $serverIndexes ) == 0 ) {
                        // Single server only, just return zero without caching
                        return array( 0 => 0 );
                }
 
-               wfProfileIn( __METHOD__ );
+               $section = new ProfileSection( __METHOD__ );
+
                $expiry = 5;
                $requestRate = 10;
 
@@ -124,7 +107,6 @@ class LoadMonitorMySQL implements LoadMonitor {
                        $chance = max( 0, ( $expiry - $elapsed ) * $requestRate );
                        if ( mt_rand( 0, $chance ) != 0 ) {
                                unset( $times['timestamp'] ); // hide from caller
-                               wfProfileOut( __METHOD__ );
 
                                return $times;
                        }
@@ -142,7 +124,6 @@ class LoadMonitorMySQL implements LoadMonitor {
                } elseif ( is_array( $times ) ) {
                        # Could not acquire lock but an old cache exists, so use it
                        unset( $times['timestamp'] ); // hide from caller
-                       wfProfileOut( __METHOD__ );
 
                        return $times;
                }
@@ -163,8 +144,6 @@ class LoadMonitorMySQL implements LoadMonitor {
                $wgMemc->set( $memcKey, $times, $expiry + 10 );
                unset( $times['timestamp'] ); // hide from caller
 
-               wfProfileOut( __METHOD__ );
-
                return $times;
        }
 }
index 331ce7d..c12b76a 100644 (file)
  * @ingroup DifferenceEngine
  */
 class ArrayDiffFormatter extends DiffFormatter {
+
        /**
-        * @param $diff
-        * @return array
+        * @param Diff $diff A Diff object.
+        *
+        * @return array[] List of associative arrays, each describing a difference.
         */
        public function format( $diff ) {
                $oldline = 1;
                $newline = 1;
                $retval = array();
-               foreach ( $diff->edits as $edit ) {
-                       switch ( $edit->type ) {
+               foreach ( $diff->getEdits() as $edit ) {
+                       switch ( $edit->getType() ) {
                                case 'add':
-                                       foreach ( $edit->closing as $l ) {
+                                       foreach ( $edit->getClosing() as $line ) {
                                                $retval[] = array(
                                                        'action' => 'add',
-                                                       'new' => $l,
+                                                       'new' => $line,
                                                        'newline' => $newline++
                                                );
                                        }
                                        break;
                                case 'delete':
-                                       foreach ( $edit->orig as $l ) {
+                                       foreach ( $edit->getOrig() as $line ) {
                                                $retval[] = array(
                                                        'action' => 'delete',
-                                                       'old' => $l,
+                                                       'old' => $line,
                                                        'oldline' => $oldline++,
                                                );
                                        }
                                        break;
                                case 'change':
-                                       foreach ( $edit->orig as $i => $l ) {
+                                       foreach ( $edit->getOrig() as $key => $line ) {
                                                $retval[] = array(
                                                        'action' => 'change',
-                                                       'old' => $l,
-                                                       'new' => isset( $edit->closing[$i] ) ? $edit->closing[$i] : null,
+                                                       'old' => $line,
+                                                       'new' => $edit->getClosing( $key ),
                                                        'oldline' => $oldline++,
                                                        'newline' => $newline++,
                                                );
                                        }
                                        break;
                                case 'copy':
-                                       $oldline += count( $edit->orig );
-                                       $newline += count( $edit->orig );
+                                       $oldline += count( $edit->getOrig() );
+                                       $newline += count( $edit->getOrig() );
                        }
                }
 
                return $retval;
        }
+
 }
index c47eced..61edc1e 100644 (file)
  * @ingroup DifferenceEngine
  */
 abstract class DiffOp {
+
+       /**
+        * @var string
+        */
        public $type;
+
+       /**
+        * @var string[]
+        */
        public $orig;
+
+       /**
+        * @var string[]
+        */
        public $closing;
 
+       /**
+        * @return string
+        */
+       public function getType() {
+               return $this->type;
+       }
+
+       /**
+        * @return string[]
+        */
+       public function getOrig() {
+               return $this->orig;
+       }
+
+       /**
+        * @param int $i
+        * @return string|null
+        */
+       public function getClosing( $i = null ) {
+               if( $i === null ) {
+                       return $this->closing;
+               }
+               if( array_key_exists( $i, $this->closing ) ) {
+                       return $this->closing[$i];
+               }
+               return null;
+       }
+
        abstract public function reverse();
 
        /**
         * @return int
         */
-       function norig() {
+       public function norig() {
                return $this->orig ? count( $this->orig ) : 0;
        }
 
        /**
         * @return int
         */
-       function nclosing() {
+       public function nclosing() {
                return $this->closing ? count( $this->closing ) : 0;
        }
 }
@@ -60,7 +100,7 @@ abstract class DiffOp {
 class DiffOpCopy extends DiffOp {
        public $type = 'copy';
 
-       function __construct( $orig, $closing = false ) {
+       public function __construct( $orig, $closing = false ) {
                if ( !is_array( $closing ) ) {
                        $closing = $orig;
                }
@@ -71,7 +111,7 @@ class DiffOpCopy extends DiffOp {
        /**
         * @return DiffOpCopy
         */
-       function reverse() {
+       public function reverse() {
                return new DiffOpCopy( $this->closing, $this->orig );
        }
 }
@@ -84,7 +124,7 @@ class DiffOpCopy extends DiffOp {
 class DiffOpDelete extends DiffOp {
        public $type = 'delete';
 
-       function __construct( $lines ) {
+       public function __construct( $lines ) {
                $this->orig = $lines;
                $this->closing = false;
        }
@@ -92,7 +132,7 @@ class DiffOpDelete extends DiffOp {
        /**
         * @return DiffOpAdd
         */
-       function reverse() {
+       public function reverse() {
                return new DiffOpAdd( $this->orig );
        }
 }
@@ -105,7 +145,7 @@ class DiffOpDelete extends DiffOp {
 class DiffOpAdd extends DiffOp {
        public $type = 'add';
 
-       function __construct( $lines ) {
+       public function __construct( $lines ) {
                $this->closing = $lines;
                $this->orig = false;
        }
@@ -113,7 +153,7 @@ class DiffOpAdd extends DiffOp {
        /**
         * @return DiffOpDelete
         */
-       function reverse() {
+       public function reverse() {
                return new DiffOpDelete( $this->closing );
        }
 }
@@ -126,7 +166,7 @@ class DiffOpAdd extends DiffOp {
 class DiffOpChange extends DiffOp {
        public $type = 'change';
 
-       function __construct( $orig, $closing ) {
+       public function __construct( $orig, $closing ) {
                $this->orig = $orig;
                $this->closing = $closing;
        }
@@ -134,7 +174,7 @@ class DiffOpChange extends DiffOp {
        /**
         * @return DiffOpChange
         */
-       function reverse() {
+       public function reverse() {
                return new DiffOpChange( $this->closing, $this->orig );
        }
 }
@@ -176,11 +216,12 @@ class DiffEngine {
        protected $lcs = 0;
 
        /**
-        * @param $from_lines
-        * @param $to_lines
-        * @return array
+        * @param string[] $from_lines
+        * @param string[] $to_lines
+        *
+        * @return DiffOp[]
         */
-       function diff( $from_lines, $to_lines ) {
+       public function diff( $from_lines, $to_lines ) {
                wfProfileIn( __METHOD__ );
 
                // Diff and store locally
@@ -237,8 +278,8 @@ class DiffEngine {
        }
 
        /**
-        * @param $from_lines
-        * @param $to_lines
+        * @param string[] $from_lines
+        * @param string[] $to_lines
         */
        private function diffLocal( $from_lines, $to_lines ) {
                global $wgExternalDiffEngine;
@@ -310,7 +351,9 @@ class DiffEngine {
 
        /**
         * Returns the whole line if it's small enough, or the MD5 hash otherwise
-        * @param $line string
+        *
+        * @param string $line
+        *
         * @return string
         */
        private function lineHash( $line ) {
@@ -337,12 +380,14 @@ class DiffEngine {
         * of the two files do not match, and likewise that the last lines do not
         * match.  The caller must trim matching lines from the beginning and end
         * of the portions it is going to specify.
-        * @param $xoff
-        * @param $xlim
-        * @param $yoff
-        * @param $ylim
-        * @param $nchunks
-        * @return array
+        *
+        * @param int $xoff
+        * @param int $xlim
+        * @param int $yoff
+        * @param int $ylim
+        * @param int $nchunks
+        *
+        * @return array List of two elements, integer and array[].
         */
        private function diag( $xoff, $xlim, $yoff, $ylim, $nchunks ) {
                $flip = false;
@@ -379,7 +424,7 @@ class DiffEngine {
                        }
 
                        $x1 = $xoff + (int)( ( $numer + ( $xlim - $xoff ) * $chunk ) / $nchunks );
-                       for ( ; $x < $x1; $x++ ) {
+                       for (; $x < $x1; $x++ ) {
                                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                                if ( empty( $ymatches[$line] ) ) {
                                        continue;
@@ -427,7 +472,8 @@ class DiffEngine {
        }
 
        /**
-        * @param $ypos
+        * @param int $ypos
+        *
         * @return int
         */
        private function lcsPos( $ypos ) {
@@ -469,10 +515,11 @@ class DiffEngine {
         *
         * Note that XLIM, YLIM are exclusive bounds.
         * All line numbers are origin-0 and discarded lines are not counted.
-        * @param $xoff
-        * @param $xlim
-        * @param $yoff
-        * @param $ylim
+        *
+        * @param int $xoff
+        * @param int $xlim
+        * @param int $yoff
+        * @param int $ylim
         */
        private function compareSeq( $xoff, $xlim, $yoff, $ylim ) {
                // Slide down the bottom initial diagonal.
@@ -659,21 +706,32 @@ class DiffEngine {
  * @ingroup DifferenceEngine
  */
 class Diff {
+
+       /**
+        * @var DiffOp[]
+        */
        public $edits;
 
        /**
         * Constructor.
         * Computes diff between sequences of strings.
         *
-        * @param $from_lines array An array of strings.
+        * @param string[] $from_lines An array of strings.
         *   Typically these are lines from a file.
-        * @param $to_lines array An array of strings.
+        * @param string[] $to_lines An array of strings.
         */
-       function __construct( $from_lines, $to_lines ) {
+       public function __construct( $from_lines, $to_lines ) {
                $eng = new DiffEngine;
                $this->edits = $eng->diff( $from_lines, $to_lines );
        }
 
+       /**
+        * @return DiffOp[]
+        */
+       public function getEdits() {
+               return $this->edits;
+       }
+
        /**
         * Compute reversed Diff.
         *
@@ -681,10 +739,11 @@ class Diff {
         *
         *    $diff = new Diff($lines1, $lines2);
         *    $rev = $diff->reverse();
+        *
         * @return Object A Diff object representing the inverse of the
         *   original diff.
         */
-       function reverse() {
+       public function reverse() {
                $rev = $this;
                $rev->edits = array();
                /** @var DiffOp $edit */
@@ -700,7 +759,7 @@ class Diff {
         *
         * @return bool True if two sequences were identical.
         */
-       function isEmpty() {
+       public function isEmpty() {
                foreach ( $this->edits as $edit ) {
                        if ( $edit->type != 'copy' ) {
                                return false;
@@ -717,7 +776,7 @@ class Diff {
         *
         * @return int The length of the LCS.
         */
-       function lcs() {
+       public function lcs() {
                $lcs = 0;
                foreach ( $this->edits as $edit ) {
                        if ( $edit->type == 'copy' ) {
@@ -734,9 +793,9 @@ class Diff {
         * This reconstructs the $from_lines parameter passed to the
         * constructor.
         *
-        * @return array The original sequence of strings.
+        * @return string[] The original sequence of strings.
         */
-       function orig() {
+       public function orig() {
                $lines = array();
 
                foreach ( $this->edits as $edit ) {
@@ -754,9 +813,9 @@ class Diff {
         * This reconstructs the $to_lines parameter passed to the
         * constructor.
         *
-        * @return array The sequence of strings.
+        * @return string[] The sequence of strings.
         */
-       function closing() {
+       public function closing() {
                $lines = array();
 
                foreach ( $this->edits as $edit ) {
@@ -784,21 +843,18 @@ class MappedDiff extends Diff {
         * case-insensitve diffs, or diffs which ignore
         * changes in white-space.
         *
-        * @param $from_lines array An array of strings.
+        * @param string[] $from_lines An array of strings.
         *   Typically these are lines from a file.
-        *
-        * @param $to_lines array An array of strings.
-        *
-        * @param $mapped_from_lines array This array should
+        * @param string[] $to_lines An array of strings.
+        * @param string[] $mapped_from_lines This array should
         *   have the same size number of elements as $from_lines.
         *   The elements in $mapped_from_lines and
         *   $mapped_to_lines are what is actually compared
         *   when computing the diff.
-        *
-        * @param $mapped_to_lines array This array should
+        * @param string[] $mapped_to_lines This array should
         *   have the same number of elements as $to_lines.
         */
-       function __construct( $from_lines, $to_lines,
+       public function __construct( $from_lines, $to_lines,
                $mapped_from_lines, $mapped_to_lines ) {
                wfProfileIn( __METHOD__ );
 
@@ -845,7 +901,7 @@ class HWLDFWordAccumulator {
        private $tag = '';
 
        /**
-        * @param $new_tag
+        * @param string $new_tag
         */
        private function flushGroup( $new_tag ) {
                if ( $this->group !== '' ) {
@@ -864,7 +920,7 @@ class HWLDFWordAccumulator {
        }
 
        /**
-        * @param $new_tag
+        * @param string $new_tag
         */
        private function flushLine( $new_tag ) {
                $this->flushGroup( $new_tag );
@@ -878,8 +934,8 @@ class HWLDFWordAccumulator {
        }
 
        /**
-        * @param $words
-        * @param $tag string
+        * @param string[] $words
+        * @param string $tag
         */
        public function addWords( $words, $tag = '' ) {
                if ( $tag != $this->tag ) {
@@ -901,7 +957,7 @@ class HWLDFWordAccumulator {
        }
 
        /**
-        * @return array
+        * @return string[]
         */
        public function getLines() {
                $this->flushLine( '~done' );
@@ -919,10 +975,10 @@ class WordLevelDiff extends MappedDiff {
        const MAX_LINE_LENGTH = 10000;
 
        /**
-        * @param $orig_lines
-        * @param $closing_lines
+        * @param string[] $orig_lines
+        * @param string[] $closing_lines
         */
-       function __construct( $orig_lines, $closing_lines ) {
+       public function __construct( $orig_lines, $closing_lines ) {
                wfProfileIn( __METHOD__ );
 
                list( $orig_words, $orig_stripped ) = $this->split( $orig_lines );
@@ -934,8 +990,9 @@ class WordLevelDiff extends MappedDiff {
        }
 
        /**
-        * @param $lines
-        * @return array
+        * @param string[] $lines
+        *
+        * @return array[]
         */
        private function split( $lines ) {
                wfProfileIn( __METHOD__ );
@@ -975,7 +1032,7 @@ class WordLevelDiff extends MappedDiff {
        }
 
        /**
-        * @return array
+        * @return string[]
         */
        public function orig() {
                wfProfileIn( __METHOD__ );
@@ -995,7 +1052,7 @@ class WordLevelDiff extends MappedDiff {
        }
 
        /**
-        * @return array
+        * @return string[]
         */
        public function closing() {
                wfProfileIn( __METHOD__ );
@@ -1013,4 +1070,5 @@ class WordLevelDiff extends MappedDiff {
 
                return $lines;
        }
+
 }
index d9e1c95..d8a9ba3 100644 (file)
@@ -34,6 +34,7 @@
  * @ingroup DifferenceEngine
  */
 abstract class DiffFormatter {
+
        /** @var int Number of leading context "lines" to preserve.
         *
         * This should be left at zero for this class, but subclasses
@@ -51,7 +52,8 @@ abstract class DiffFormatter {
        /**
         * Format a diff.
         *
-        * @param $diff Diff A Diff object.
+        * @param Diff $diff A Diff object.
+        *
         * @return string The formatted output.
         */
        public function format( $diff ) {
@@ -124,7 +126,8 @@ abstract class DiffFormatter {
         * @param int $ybeg
         * @param int $ylen
         * @param $edits
-        * @throws MWException
+        *
+        * @throws MWException If the edit type is not known.
         */
        protected function block( $xbeg, $xlen, $ybeg, $ylen, &$edits ) {
                wfProfileIn( __METHOD__ );
@@ -161,10 +164,11 @@ abstract class DiffFormatter {
        }
 
        /**
-        * @param $xbeg
-        * @param $xlen
-        * @param $ybeg
-        * @param $ylen
+        * @param int $xbeg
+        * @param int $xlen
+        * @param int $ybeg
+        * @param int $ylen
+        *
         * @return string
         */
        protected function blockHeader( $xbeg, $xlen, $ybeg, $ylen ) {
@@ -178,16 +182,28 @@ abstract class DiffFormatter {
                return $xbeg . ( $xlen ? ( $ylen ? 'c' : 'd' ) : 'a' ) . $ybeg;
        }
 
+       /**
+        * Called at the start of a block of connected edits.
+        * This default implementation writes the header and a newline to the output buffer.
+        *
+        * @param string $header
+        */
        protected function startBlock( $header ) {
                echo $header . "\n";
        }
 
+       /**
+        * Called at the end of a block of connected edits.
+        * This default implementation does nothing.
+        */
        protected function endBlock() {
        }
 
        /**
-        * @param $lines
-        * @param $prefix string
+        * Writes all (optionally prefixed) lines to the output buffer, separated by newlines.
+        *
+        * @param string[] $lines
+        * @param string $prefix
         */
        protected function lines( $lines, $prefix = ' ' ) {
                foreach ( $lines as $line ) {
@@ -196,33 +212,36 @@ abstract class DiffFormatter {
        }
 
        /**
-        * @param $lines
+        * @param string[] $lines
         */
        protected function context( $lines ) {
                $this->lines( $lines );
        }
 
        /**
-        * @param $lines
+        * @param string[] $lines
         */
        protected function added( $lines ) {
                $this->lines( $lines, '>' );
        }
 
        /**
-        * @param $lines
+        * @param string[] $lines
         */
        protected function deleted( $lines ) {
                $this->lines( $lines, '<' );
        }
 
        /**
-        * @param $orig
-        * @param $closing
+        * Writes the two sets of lines to the output buffer, separated by "---" and a newline.
+        *
+        * @param string[] $orig
+        * @param string[] $closing
         */
        protected function changed( $orig, $closing ) {
                $this->deleted( $orig );
                echo "---\n";
                $this->added( $closing );
        }
+
 }
index d6cf694..414b9f8 100644 (file)
@@ -34,6 +34,7 @@ define( 'MW_DIFF_VERSION', '1.11a' );
  * @ingroup DifferenceEngine
  */
 class DifferenceEngine extends ContextSource {
+
        /** @var int */
        public $mOldid;
 
@@ -97,14 +98,14 @@ class DifferenceEngine extends ContextSource {
 
        /**
         * Constructor
-        * @param $context IContextSource context to use, anything else will be ignored
-        * @param $old Integer old ID we want to show and diff with.
-        * @param $new String|int either revision ID or 'prev' or 'next'. Default: 0.
-        * @param $rcid Integer Deprecated, no longer used!
-        * @param $refreshCache boolean If set, refreshes the diff cache
-        * @param $unhide boolean If set, allow viewing deleted revs
+        * @param IContextSource $context context to use, anything else will be ignored
+        * @param int $old old ID we want to show and diff with.
+        * @param string|int $new either revision ID or 'prev' or 'next'. Default: 0.
+        * @param int $rcid Deprecated, no longer used!
+        * @param bool $refreshCache If set, refreshes the diff cache
+        * @param bool $unhide If set, allow viewing deleted revs
         */
-       function __construct( $context = null, $old = 0, $new = 0, $rcid = 0,
+       public function __construct( $context = null, $old = 0, $new = 0, $rcid = 0,
                $refreshCache = false, $unhide = false
        ) {
                if ( $context instanceof IContextSource ) {
@@ -120,16 +121,16 @@ class DifferenceEngine extends ContextSource {
        }
 
        /**
-        * @param $value bool
+        * @param bool $value
         */
-       function setReducedLineNumbers( $value = true ) {
+       public function setReducedLineNumbers( $value = true ) {
                $this->mReducedLineNumbers = $value;
        }
 
        /**
         * @return Language
         */
-       function getDiffLang() {
+       public function getDiffLang() {
                if ( $this->mDiffLang === null ) {
                        # Default language in which the diff text is written.
                        $this->mDiffLang = $this->getTitle()->getPageLanguage();
@@ -141,23 +142,23 @@ class DifferenceEngine extends ContextSource {
        /**
         * @return bool
         */
-       function wasCacheHit() {
+       public function wasCacheHit() {
                return $this->mCacheHit;
        }
 
        /**
         * @return int
         */
-       function getOldid() {
+       public function getOldid() {
                $this->loadRevisionIds();
 
                return $this->mOldid;
        }
 
        /**
-        * @return Bool|int
+        * @return bool|int
         */
-       function getNewid() {
+       public function getNewid() {
                $this->loadRevisionIds();
 
                return $this->mNewid;
@@ -167,10 +168,11 @@ class DifferenceEngine extends ContextSource {
         * Look up a special:Undelete link to the given deleted revision id,
         * as a workaround for being unable to load deleted diffs in currently.
         *
-        * @param int $id revision ID
+        * @param int $id Revision ID
+        *
         * @return mixed URL or false
         */
-       function deletedLink( $id ) {
+       public function deletedLink( $id ) {
                if ( $this->getUser()->isAllowed( 'deletedhistory' ) ) {
                        $dbr = wfGetDB( DB_SLAVE );
                        $row = $dbr->selectRow( 'archive', '*',
@@ -193,10 +195,11 @@ class DifferenceEngine extends ContextSource {
        /**
         * Build a wikitext link toward a deleted revision, if viewable.
         *
-        * @param int $id revision ID
-        * @return string wikitext fragment
+        * @param int $id Revision ID
+        *
+        * @return string Wikitext fragment
         */
-       function deletedIdMarker( $id ) {
+       public function deletedIdMarker( $id ) {
                $link = $this->deletedLink( $id );
                if ( $link ) {
                        return "[$link $id]";
@@ -225,7 +228,7 @@ class DifferenceEngine extends ContextSource {
                        $this->getLanguage()->listToText( $missing ), count( $missing ) );
        }
 
-       function showDiffPage( $diffOnly = false ) {
+       public function showDiffPage( $diffOnly = false ) {
                wfProfileIn( __METHOD__ );
 
                # Allow frames except in certain special cases
@@ -451,7 +454,7 @@ class DifferenceEngine extends ContextSource {
         * Side effect: When the patrol link is build, this method will call
         * OutputPage::preventClickjacking() and load mediawiki.page.patrol.ajax.
         *
-        * @return String
+        * @return string
         */
        protected function markPatrolledLink() {
                global $wgUseRCPatrol, $wgEnableAPI, $wgEnableWriteAPI;
@@ -518,8 +521,9 @@ class DifferenceEngine extends ContextSource {
        }
 
        /**
-        * @param $rev Revision
-        * @return String
+        * @param Revision $rev
+        *
+        * @return string
         */
        protected function revisionDeleteLink( $rev ) {
                $link = Linker::getRevDeleteLink( $this->getUser(), $rev, $rev->getTitle() );
@@ -533,7 +537,7 @@ class DifferenceEngine extends ContextSource {
        /**
         * Show the new revision of the page.
         */
-       function renderNewRevision() {
+       public function renderNewRevision() {
                wfProfileIn( __METHOD__ );
                $out = $this->getOutput();
                $revHeader = $this->getRevisionHeader( $this->mNewRev );
@@ -616,7 +620,7 @@ class DifferenceEngine extends ContextSource {
         *
         * @return bool
         */
-       function showDiff( $otitle, $ntitle, $notice = '' ) {
+       public function showDiff( $otitle, $ntitle, $notice = '' ) {
                $diff = $this->getDiff( $otitle, $ntitle, $notice );
                if ( $diff === false ) {
                        $this->showMissingRevision();
@@ -633,7 +637,7 @@ class DifferenceEngine extends ContextSource {
        /**
         * Add style sheets and supporting JS for diff display.
         */
-       function showDiffStyle() {
+       public function showDiffStyle() {
                $this->getOutput()->addModuleStyles( 'mediawiki.action.history.diff' );
        }
 
@@ -643,9 +647,10 @@ class DifferenceEngine extends ContextSource {
         * @param string|bool $otitle Header for old text or false
         * @param string|bool $ntitle Header for new text or false
         * @param string $notice HTML between diff header and body
+        *
         * @return mixed
         */
-       function getDiff( $otitle, $ntitle, $notice = '' ) {
+       public function getDiff( $otitle, $ntitle, $notice = '' ) {
                $body = $this->getDiffBody();
                if ( $body === false ) {
                        return false;
@@ -747,9 +752,10 @@ class DifferenceEngine extends ContextSource {
        /**
         * Returns the cache key for diff body text or content.
         *
-        * @return string
         * @since 1.23
+        *
         * @throws MWException
+        * @return string
         */
        protected function getDiffBodyCacheKey() {
                if ( !$this->mOldid || !$this->mNewid ) {
@@ -771,14 +777,15 @@ class DifferenceEngine extends ContextSource {
         * perhaps taking advantage of the content's native form. This is required for all content
         * models that are not text based.
         *
-        * @param $old Content: old content
-        * @param $new Content: new content
+        * @since 1.21
+        *
+        * @param Content $old Old content
+        * @param Content $new New content
         *
+        * @throws MWException If old or new content is not an instance of TextContent.
         * @return bool|string
-        * @since 1.21
-        * @throws MWException if $old or $new are not instances of TextContent.
         */
-       function generateContentDiffBody( Content $old, Content $new ) {
+       public function generateContentDiffBody( Content $old, Content $new ) {
                if ( !( $old instanceof TextContent ) ) {
                        throw new MWException( "Diff not implemented for " . get_class( $old ) . "; " .
                                "override generateContentDiffBody to fix this." );
@@ -798,12 +805,13 @@ class DifferenceEngine extends ContextSource {
        /**
         * Generate a diff, no caching
         *
-        * @param string $otext old text, must be already segmented
-        * @param string $ntext new text, must be already segmented
+        * @param string $otext Old text, must be already segmented
+        * @param string $ntext New text, must be already segmented
+        *
         * @return bool|string
         * @deprecated since 1.21, use generateContentDiffBody() instead!
         */
-       function generateDiffBody( $otext, $ntext ) {
+       public function generateDiffBody( $otext, $ntext ) {
                ContentHandler::deprecated( __METHOD__, "1.21" );
 
                return $this->generateTextDiffBody( $otext, $ntext );
@@ -816,9 +824,10 @@ class DifferenceEngine extends ContextSource {
         *
         * @param string $otext old text, must be already segmented
         * @param string $ntext new text, must be already segmented
+        *
         * @return bool|string
         */
-       function generateTextDiffBody( $otext, $ntext ) {
+       public function generateTextDiffBody( $otext, $ntext ) {
                global $wgExternalDiffEngine, $wgContLang;
 
                wfProfileIn( __METHOD__ );
@@ -897,7 +906,7 @@ class DifferenceEngine extends ContextSource {
         * Generate a debug comment indicating diff generating time,
         * server node, and generator backend.
         *
-        * @param String $generator : What diff engine was used
+        * @param string $generator : What diff engine was used
         *
         * @return string
         */
@@ -920,11 +929,11 @@ class DifferenceEngine extends ContextSource {
        /**
         * Replace line numbers with the text in the user's language
         *
-        * @param String $text
+        * @param string $text
         *
         * @return mixed
         */
-       function localiseLineNumbers( $text ) {
+       public function localiseLineNumbers( $text ) {
                return preg_replace_callback(
                        '/<!--LINE (\d+)-->/',
                        array( &$this, 'localiseLineNumbersCb' ),
@@ -932,7 +941,7 @@ class DifferenceEngine extends ContextSource {
                );
        }
 
-       function localiseLineNumbersCb( $matches ) {
+       public function localiseLineNumbersCb( $matches ) {
                if ( $matches[1] === '1' && $this->mReducedLineNumbers ) {
                        return '';
                }
@@ -942,9 +951,10 @@ class DifferenceEngine extends ContextSource {
 
        /**
         * If there are revisions between the ones being compared, return a note saying so.
+        *
         * @return string
         */
-       function getMultiNotice() {
+       public function getMultiNotice() {
                if ( !is_object( $this->mOldRev ) || !is_object( $this->mNewRev ) ) {
                        return '';
                } elseif ( !$this->mOldPage->equals( $this->mNewPage ) ) {
@@ -978,9 +988,11 @@ class DifferenceEngine extends ContextSource {
 
        /**
         * Get a notice about how many intermediate edits and users there are
-        * @param $numEdits int
-        * @param $numUsers int
-        * @param $limit int
+        *
+        * @param int $numEdits
+        * @param int $numUsers
+        * @param int $limit
+        *
         * @return string
         */
        public static function intermediateEditsMsg( $numEdits, $numUsers, $limit ) {
@@ -999,10 +1011,11 @@ class DifferenceEngine extends ContextSource {
        /**
         * Get a header for a specified revision.
         *
-        * @param $rev Revision
+        * @param Revision $rev
         * @param string $complete 'complete' to get the header wrapped depending
         *        the visibility of the revision and a link to edit the page.
-        * @return String HTML fragment
+        *
+        * @return string HTML fragment
         */
        protected function getRevisionHeader( Revision $rev, $complete = '' ) {
                $lang = $this->getLanguage();
@@ -1064,7 +1077,7 @@ class DifferenceEngine extends ContextSource {
         *
         * @return string
         */
-       function addHeader( $diff, $otitle, $ntitle, $multi = '', $notice = '' ) {
+       public function addHeader( $diff, $otitle, $ntitle, $multi = '', $notice = '' ) {
                // shared.css sets diff in interface language/dir, but the actual content
                // is often in a different language, mostly the page content language/dir
                $tableClass = 'diff diff-contentalign-' . htmlspecialchars( $this->getDiffLang()->alignStart() );
@@ -1113,7 +1126,7 @@ class DifferenceEngine extends ContextSource {
         * Use specified text instead of loading from the database
         * @deprecated since 1.21, use setContent() instead.
         */
-       function setText( $oldText, $newText ) {
+       public function setText( $oldText, $newText ) {
                ContentHandler::deprecated( __METHOD__, "1.21" );
 
                $oldContent = ContentHandler::makeContent( $oldText, $this->getTitle() );
@@ -1126,7 +1139,7 @@ class DifferenceEngine extends ContextSource {
         * Use specified text instead of loading from the database
         * @since 1.21
         */
-       function setContent( Content $oldContent, Content $newContent ) {
+       public function setContent( Content $oldContent, Content $newContent ) {
                $this->mOldContent = $oldContent;
                $this->mNewContent = $newContent;
 
@@ -1139,7 +1152,7 @@ class DifferenceEngine extends ContextSource {
         * (Defaults to page content language).
         * @since 1.19
         */
-       function setTextLanguage( $lang ) {
+       public function setTextLanguage( $lang ) {
                $this->mDiffLang = wfGetLangObj( $lang );
        }
 
@@ -1149,7 +1162,8 @@ class DifferenceEngine extends ContextSource {
         *
         * @param int $old Revision id, e.g. from URL parameter 'oldid'
         * @param int|string $new Revision id or strings 'next' or 'prev', e.g. from URL parameter 'diff'
-        * @return array Array of two revision ids, older first, later second.
+        *
+        * @return int[] List of two revision ids, older first, later second.
         *     Zero signifies invalid argument passed.
         *     false signifies that there is no previous/next revision ($old is the oldest/newest one).
         */
@@ -1208,7 +1222,7 @@ class DifferenceEngine extends ContextSource {
         *
         * @return bool
         */
-       function loadRevisionData() {
+       public function loadRevisionData() {
                if ( $this->mRevisionsLoaded ) {
                        return true;
                }
@@ -1288,7 +1302,7 @@ class DifferenceEngine extends ContextSource {
         *
         * @return bool
         */
-       function loadText() {
+       public function loadText() {
                if ( $this->mTextLoaded == 2 ) {
                        return true;
                }
@@ -1322,7 +1336,7 @@ class DifferenceEngine extends ContextSource {
         *
         * @return bool
         */
-       function loadNewText() {
+       public function loadNewText() {
                if ( $this->mTextLoaded >= 1 ) {
                        return true;
                }
@@ -1337,4 +1351,5 @@ class DifferenceEngine extends ContextSource {
 
                return true;
        }
+
 }
index 5f28627..ac8f758 100644 (file)
@@ -31,6 +31,7 @@
  * @ingroup DifferenceEngine
  */
 class TableDiffFormatter extends DiffFormatter {
+
        function __construct() {
                $this->leadingContextLines = 2;
                $this->trailingContextLines = 2;
@@ -38,7 +39,8 @@ class TableDiffFormatter extends DiffFormatter {
 
        /**
         * @static
-        * @param $msg
+        * @param string $msg
+        *
         * @return mixed
         */
        public static function escapeWhiteSpace( $msg ) {
@@ -50,10 +52,11 @@ class TableDiffFormatter extends DiffFormatter {
        }
 
        /**
-        * @param $xbeg
-        * @param $xlen
-        * @param $ybeg
-        * @param $ylen
+        * @param int $xbeg
+        * @param int $xlen
+        * @param int $ybeg
+        * @param int $ylen
+        *
         * @return string
         */
        protected function blockHeader( $xbeg, $xlen, $ybeg, $ylen ) {
@@ -64,7 +67,9 @@ class TableDiffFormatter extends DiffFormatter {
        }
 
        /**
-        * @param $header
+        * Writes the header to the output buffer.
+        *
+        * @param string $header
         */
        protected function startBlock( $header ) {
                echo $header;
@@ -73,12 +78,19 @@ class TableDiffFormatter extends DiffFormatter {
        protected function endBlock() {
        }
 
+       /**
+        * @param string[] $lines
+        * @param string $prefix
+        * @param string $color
+        */
        protected function lines( $lines, $prefix = ' ', $color = 'white' ) {
        }
 
        /**
         * HTML-escape parameter before calling this
-        * @param $line
+        *
+        * @param string $line
+        *
         * @return string
         */
        protected function addedLine( $line ) {
@@ -87,7 +99,9 @@ class TableDiffFormatter extends DiffFormatter {
 
        /**
         * HTML-escape parameter before calling this
-        * @param $line
+        *
+        * @param string $line
+        *
         * @return string
         */
        protected function deletedLine( $line ) {
@@ -96,7 +110,9 @@ class TableDiffFormatter extends DiffFormatter {
 
        /**
         * HTML-escape parameter before calling this
-        * @param $line
+        *
+        * @param string $line
+        *
         * @return string
         */
        protected function contextLine( $line ) {
@@ -104,9 +120,10 @@ class TableDiffFormatter extends DiffFormatter {
        }
 
        /**
-        * @param $marker
-        * @param $class
-        * @param $line
+        * @param string $marker
+        * @param string $class Unused
+        * @param string $line
+        *
         * @return string
         */
        protected function wrapLine( $marker, $class, $line ) {
@@ -126,7 +143,9 @@ class TableDiffFormatter extends DiffFormatter {
        }
 
        /**
-        * @param $lines array
+        * Writes all lines to the output buffer, each enclosed in <tr>.
+        *
+        * @param string[] $lines
         */
        protected function added( $lines ) {
                foreach ( $lines as $line ) {
@@ -137,7 +156,9 @@ class TableDiffFormatter extends DiffFormatter {
        }
 
        /**
-        * @param $lines
+        * Writes all lines to the output buffer, each enclosed in <tr>.
+        *
+        * @param string[] $lines
         */
        protected function deleted( $lines ) {
                foreach ( $lines as $line ) {
@@ -148,7 +169,9 @@ class TableDiffFormatter extends DiffFormatter {
        }
 
        /**
-        * @param $lines
+        * Writes all lines to the output buffer, each enclosed in <tr>.
+        *
+        * @param string[] $lines
         */
        protected function context( $lines ) {
                foreach ( $lines as $line ) {
@@ -159,8 +182,10 @@ class TableDiffFormatter extends DiffFormatter {
        }
 
        /**
-        * @param $orig
-        * @param $closing
+        * Writes the two sets of lines to the output buffer, each enclosed in <tr>.
+        *
+        * @param string[] $orig
+        * @param string[] $closing
         */
        protected function changed( $orig, $closing ) {
                wfProfileIn( __METHOD__ );
@@ -183,4 +208,5 @@ class TableDiffFormatter extends DiffFormatter {
                }
                wfProfileOut( __METHOD__ );
        }
+
 }
index 0a86ccc..32a7605 100644 (file)
@@ -29,6 +29,7 @@
  * @ingroup DifferenceEngine
  */
 class UnifiedDiffFormatter extends DiffFormatter {
+
        /** @var int */
        protected $leadingContextLines = 2;
 
@@ -36,22 +37,22 @@ class UnifiedDiffFormatter extends DiffFormatter {
        protected $trailingContextLines = 2;
 
        /**
-        * @param $lines
+        * @param string[] $lines
         */
        protected function added( $lines ) {
                $this->lines( $lines, '+' );
        }
 
        /**
-        * @param $lines
+        * @param string[] $lines
         */
        protected function deleted( $lines ) {
                $this->lines( $lines, '-' );
        }
 
        /**
-        * @param $orig
-        * @param $closing
+        * @param string[] $orig
+        * @param string[] $closing
         */
        protected function changed( $orig, $closing ) {
                $this->deleted( $orig );
@@ -59,13 +60,15 @@ class UnifiedDiffFormatter extends DiffFormatter {
        }
 
        /**
-        * @param $xbeg
-        * @param $xlen
-        * @param $ybeg
-        * @param $ylen
+        * @param int $xbeg
+        * @param int $xlen
+        * @param int $ybeg
+        * @param int $ylen
+        *
         * @return string
         */
        protected function blockHeader( $xbeg, $xlen, $ybeg, $ylen ) {
                return "@@ -$xbeg,$xlen +$ybeg,$ylen @@";
        }
+
 }
index 7c019b0..7a0f740 100644 (file)
@@ -580,6 +580,7 @@ class WikiDiff3 {
 
                return $this->length;
        }
+
 }
 
 /**
@@ -589,6 +590,7 @@ class WikiDiff3 {
  * @ingroup DifferenceEngine
  */
 class RangeDifference {
+
        /** @var int */
        public $leftstart;
 
@@ -615,4 +617,5 @@ class RangeDifference {
                $this->rightend = $rightend;
                $this->rightlength = $rightend - $rightstart;
        }
+
 }
diff --git a/includes/exception/BadTitleError.php b/includes/exception/BadTitleError.php
new file mode 100644 (file)
index 0000000..2da3775
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Show an error page on a badtitle.
+ * Similar to ErrorPage, but emit a 400 HTTP error code to let mobile
+ * browser it is not really a valid content.
+ *
+ * @since 1.19
+ * @ingroup Exception
+ */
+class BadTitleError extends ErrorPageError {
+       /**
+        * @param string|Message $msg A message key (default: 'badtitletext')
+        * @param array $params parameter to wfMessage()
+        */
+       public function __construct( $msg = 'badtitletext', $params = array() ) {
+               parent::__construct( 'badtitle', $msg, $params );
+       }
+
+       /**
+        * Just like ErrorPageError::report() but additionally set
+        * a 400 HTTP status code (bug 33646).
+        */
+       public function report() {
+               global $wgOut;
+
+               // bug 33646: a badtitle error page need to return an error code
+               // to let mobile browser now that it is not a normal page.
+               $wgOut->setStatusCode( 400 );
+               parent::report();
+       }
+
+}
diff --git a/includes/exception/ErrorPageError.php b/includes/exception/ErrorPageError.php
new file mode 100644 (file)
index 0000000..7cd198b
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * An error page which can definitely be safely rendered using the OutputPage.
+ *
+ * @since 1.7
+ * @ingroup Exception
+ */
+class ErrorPageError extends MWException {
+       public $title, $msg, $params;
+
+       /**
+        * Note: these arguments are keys into wfMessage(), not text!
+        *
+        * @param string|Message $title Message key (string) for page title, or a Message object
+        * @param string|Message $msg Message key (string) for error text, or a Message object
+        * @param array $params with parameters to wfMessage()
+        */
+       public function __construct( $title, $msg, $params = array() ) {
+               $this->title = $title;
+               $this->msg = $msg;
+               $this->params = $params;
+
+               // Bug 44111: Messages in the log files should be in English and not
+               // customized by the local wiki. So get the default English version for
+               // passing to the parent constructor. Our overridden report() below
+               // makes sure that the page shown to the user is not forced to English.
+               if ( $msg instanceof Message ) {
+                       $enMsg = clone( $msg );
+               } else {
+                       $enMsg = wfMessage( $msg, $params );
+               }
+               $enMsg->inLanguage( 'en' )->useDatabase( false );
+               parent::__construct( $enMsg->text() );
+       }
+
+       public function report() {
+               global $wgOut;
+
+               $wgOut->showErrorPage( $this->title, $this->msg, $this->params );
+               $wgOut->output();
+       }
+}
diff --git a/includes/exception/FatalError.php b/includes/exception/FatalError.php
new file mode 100644 (file)
index 0000000..a7d672f
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Exception class which takes an HTML error message, and does not
+ * produce a backtrace. Replacement for OutputPage::fatalError().
+ *
+ * @since 1.7
+ * @ingroup Exception
+ */
+class FatalError extends MWException {
+
+       /**
+        * @return string
+        */
+       public function getHTML() {
+               return $this->getMessage();
+       }
+
+       /**
+        * @return string
+        */
+       public function getText() {
+               return $this->getMessage();
+       }
+}
diff --git a/includes/exception/HttpError.php b/includes/exception/HttpError.php
new file mode 100644 (file)
index 0000000..f955f06
--- /dev/null
@@ -0,0 +1,93 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Show an error that looks like an HTTP server error.
+ * Replacement for wfHttpError().
+ *
+ * @since 1.19
+ * @ingroup Exception
+ */
+class HttpError extends MWException {
+       private $httpCode, $header, $content;
+
+       /**
+        * Constructor
+        *
+        * @param $httpCode Integer: HTTP status code to send to the client
+        * @param string|Message $content content of the message
+        * @param string|Message $header content of the header (\<title\> and \<h1\>)
+        */
+       public function __construct( $httpCode, $content, $header = null ) {
+               parent::__construct( $content );
+               $this->httpCode = (int)$httpCode;
+               $this->header = $header;
+               $this->content = $content;
+       }
+
+       /**
+        * Returns the HTTP status code supplied to the constructor.
+        *
+        * @return int
+        */
+       public function getStatusCode() {
+               return $this->httpCode;
+       }
+
+       /**
+        * Report the HTTP error.
+        * Sends the appropriate HTTP status code and outputs an
+        * HTML page with an error message.
+        */
+       public function report() {
+               $httpMessage = HttpStatus::getMessage( $this->httpCode );
+
+               header( "Status: {$this->httpCode} {$httpMessage}", true, $this->httpCode );
+               header( 'Content-type: text/html; charset=utf-8' );
+
+               print $this->getHTML();
+       }
+
+       /**
+        * Returns HTML for reporting the HTTP error.
+        * This will be a minimal but complete HTML document.
+        *
+        * @return string HTML
+        */
+       public function getHTML() {
+               if ( $this->header === null ) {
+                       $header = HttpStatus::getMessage( $this->httpCode );
+               } elseif ( $this->header instanceof Message ) {
+                       $header = $this->header->escaped();
+               } else {
+                       $header = htmlspecialchars( $this->header );
+               }
+
+               if ( $this->content instanceof Message ) {
+                       $content = $this->content->escaped();
+               } else {
+                       $content = htmlspecialchars( $this->content );
+               }
+
+               return "<!DOCTYPE html>\n" .
+               "<html><head><title>$header</title></head>\n" .
+               "<body><h1>$header</h1><p>$content</p></body></html>\n";
+       }
+}
diff --git a/includes/exception/MWException.php b/includes/exception/MWException.php
new file mode 100644 (file)
index 0000000..f344938
--- /dev/null
@@ -0,0 +1,273 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * MediaWiki exception
+ *
+ * @ingroup Exception
+ */
+class MWException extends Exception {
+       /**
+        * Should the exception use $wgOut to output the error?
+        *
+        * @return bool
+        */
+       public function useOutputPage() {
+               return $this->useMessageCache() &&
+               !empty( $GLOBALS['wgFullyInitialised'] ) &&
+               !empty( $GLOBALS['wgOut'] ) &&
+               !defined( 'MEDIAWIKI_INSTALL' );
+       }
+
+       /**
+        * Whether to log this exception in the exception debug log.
+        *
+        * @since 1.23
+        * @return boolean
+        */
+       public function isLoggable() {
+               return true;
+       }
+
+       /**
+        * Can the extension use the Message class/wfMessage to get i18n-ed messages?
+        *
+        * @return bool
+        */
+       public function useMessageCache() {
+               global $wgLang;
+
+               foreach ( $this->getTrace() as $frame ) {
+                       if ( isset( $frame['class'] ) && $frame['class'] === 'LocalisationCache' ) {
+                               return false;
+                       }
+               }
+
+               return $wgLang instanceof Language;
+       }
+
+       /**
+        * Run hook to allow extensions to modify the text of the exception
+        *
+        * @param string $name class name of the exception
+        * @param array $args arguments to pass to the callback functions
+        * @return string|null string to output or null if any hook has been called
+        */
+       public function runHooks( $name, $args = array() ) {
+               global $wgExceptionHooks;
+
+               if ( !isset( $wgExceptionHooks ) || !is_array( $wgExceptionHooks ) ) {
+                       return null; // Just silently ignore
+               }
+
+               if ( !array_key_exists( $name, $wgExceptionHooks ) ||
+                       !is_array( $wgExceptionHooks[$name] )
+               ) {
+                       return null;
+               }
+
+               $hooks = $wgExceptionHooks[$name];
+               $callargs = array_merge( array( $this ), $args );
+
+               foreach ( $hooks as $hook ) {
+                       if (
+                               is_string( $hook ) ||
+                               ( is_array( $hook ) && count( $hook ) >= 2 && is_string( $hook[0] ) )
+                       ) {
+                               // 'function' or array( 'class', hook' )
+                               $result = call_user_func_array( $hook, $callargs );
+                       } else {
+                               $result = null;
+                       }
+
+                       if ( is_string( $result ) ) {
+                               return $result;
+                       }
+               }
+               return null;
+       }
+
+       /**
+        * Get a message from i18n
+        *
+        * @param string $key message name
+        * @param string $fallback default message if the message cache can't be
+        *                  called by the exception
+        * The function also has other parameters that are arguments for the message
+        * @return string message with arguments replaced
+        */
+       public function msg( $key, $fallback /*[, params...] */ ) {
+               $args = array_slice( func_get_args(), 2 );
+
+               if ( $this->useMessageCache() ) {
+                       return wfMessage( $key, $args )->plain();
+               } else {
+                       return wfMsgReplaceArgs( $fallback, $args );
+               }
+       }
+
+       /**
+        * If $wgShowExceptionDetails is true, return a HTML message with a
+        * backtrace to the error, otherwise show a message to ask to set it to true
+        * to show that information.
+        *
+        * @return string html to output
+        */
+       public function getHTML() {
+               global $wgShowExceptionDetails;
+
+               if ( $wgShowExceptionDetails ) {
+                       return '<p>' . nl2br( htmlspecialchars( MWExceptionHandler::getLogMessage( $this ) ) ) .
+                       '</p><p>Backtrace:</p><p>' . nl2br( htmlspecialchars( MWExceptionHandler::getRedactedTraceAsString( $this ) ) ) .
+                       "</p>\n";
+               } else {
+                       return "<div class=\"errorbox\">" .
+                       '[' . MWExceptionHandler::getLogId( $this ) . '] ' .
+                       gmdate( 'Y-m-d H:i:s' ) .
+                       ": Fatal exception of type " . get_class( $this ) . "</div>\n" .
+                       "<!-- Set \$wgShowExceptionDetails = true; " .
+                       "at the bottom of LocalSettings.php to show detailed " .
+                       "debugging information. -->";
+               }
+       }
+
+       /**
+        * Get the text to display when reporting the error on the command line.
+        * If $wgShowExceptionDetails is true, return a text message with a
+        * backtrace to the error.
+        *
+        * @return string
+        */
+       public function getText() {
+               global $wgShowExceptionDetails;
+
+               if ( $wgShowExceptionDetails ) {
+                       return MWExceptionHandler::getLogMessage( $this ) .
+                       "\nBacktrace:\n" . MWExceptionHandler::getRedactedTraceAsString( $this ) . "\n";
+               } else {
+                       return "Set \$wgShowExceptionDetails = true; " .
+                       "in LocalSettings.php to show detailed debugging information.\n";
+               }
+       }
+
+       /**
+        * Return the title of the page when reporting this error in a HTTP response.
+        *
+        * @return string
+        */
+       public function getPageTitle() {
+               global $wgSitename;
+               return $this->msg( 'pagetitle', "$1 - $wgSitename", $this->msg( 'internalerror', 'Internal error' ) );
+       }
+
+       /**
+        * Get a the ID for this error.
+        *
+        * @since 1.20
+        * @deprecated since 1.22 Use MWExceptionHandler::getLogId instead.
+        * @return string
+        */
+       public function getLogId() {
+               wfDeprecated( __METHOD__, '1.22' );
+               return MWExceptionHandler::getLogId( $this );
+       }
+
+       /**
+        * Return the requested URL and point to file and line number from which the
+        * exception occurred
+        *
+        * @since 1.8
+        * @deprecated since 1.22 Use MWExceptionHandler::getLogMessage instead.
+        * @return string
+        */
+       public function getLogMessage() {
+               wfDeprecated( __METHOD__, '1.22' );
+               return MWExceptionHandler::getLogMessage( $this );
+       }
+
+       /**
+        * Output the exception report using HTML.
+        */
+       public function reportHTML() {
+               global $wgOut;
+               if ( $this->useOutputPage() ) {
+                       $wgOut->prepareErrorPage( $this->getPageTitle() );
+
+                       $hookResult = $this->runHooks( get_class( $this ) );
+                       if ( $hookResult ) {
+                               $wgOut->addHTML( $hookResult );
+                       } else {
+                               $wgOut->addHTML( $this->getHTML() );
+                       }
+
+                       $wgOut->output();
+               } else {
+                       header( 'Content-Type: text/html; charset=utf-8' );
+                       echo "<!DOCTYPE html>\n" .
+                               '<html><head>' .
+                               '<title>' . htmlspecialchars( $this->getPageTitle() ) . '</title>' .
+                               '<style>body { font-family: sans-serif; margin: 0; padding: 0.5em 2em; }</style>' .
+                               "</head><body>\n";
+
+                       $hookResult = $this->runHooks( get_class( $this ) . 'Raw' );
+                       if ( $hookResult ) {
+                               echo $hookResult;
+                       } else {
+                               echo $this->getHTML();
+                       }
+
+                       echo "</body></html>\n";
+               }
+       }
+
+       /**
+        * Output a report about the exception and takes care of formatting.
+        * It will be either HTML or plain text based on isCommandLine().
+        */
+       public function report() {
+               global $wgMimeType;
+
+               MWExceptionHandler::logException( $this );
+
+               if ( defined( 'MW_API' ) ) {
+                       // Unhandled API exception, we can't be sure that format printer is alive
+                       header( 'MediaWiki-API-Error: internal_api_error_' . get_class( $this ) );
+                       wfHttpError( 500, 'Internal Server Error', $this->getText() );
+               } elseif ( self::isCommandLine() ) {
+                       MWExceptionHandler::printError( $this->getText() );
+               } else {
+                       header( 'HTTP/1.1 500 MediaWiki exception' );
+                       header( 'Status: 500 MediaWiki exception', true );
+                       header( "Content-Type: $wgMimeType; charset=utf-8", true );
+
+                       $this->reportHTML();
+               }
+       }
+
+       /**
+        * Check whether we are in command line mode or not to report the exception
+        * in the correct format.
+        *
+        * @return bool
+        */
+       public static function isCommandLine() {
+               return !empty( $GLOBALS['wgCommandLineMode'] );
+       }
+}
diff --git a/includes/exception/MWExceptionHandler.php b/includes/exception/MWExceptionHandler.php
new file mode 100644 (file)
index 0000000..64e8999
--- /dev/null
@@ -0,0 +1,349 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Handler class for MWExceptions
+ * @ingroup Exception
+ */
+class MWExceptionHandler {
+       /**
+        * Install an exception handler for MediaWiki exception types.
+        */
+       public static function installHandler() {
+               set_exception_handler( array( 'MWExceptionHandler', 'handle' ) );
+       }
+
+       /**
+        * Report an exception to the user
+        */
+       protected static function report( Exception $e ) {
+               global $wgShowExceptionDetails;
+
+               $cmdLine = MWException::isCommandLine();
+
+               if ( $e instanceof MWException ) {
+                       try {
+                               // Try and show the exception prettily, with the normal skin infrastructure
+                               $e->report();
+                       } catch ( Exception $e2 ) {
+                               // Exception occurred from within exception handler
+                               // Show a simpler error message for the original exception,
+                               // don't try to invoke report()
+                               $message = "MediaWiki internal error.\n\n";
+
+                               if ( $wgShowExceptionDetails ) {
+                                       $message .= 'Original exception: ' . self::getLogMessage( $e ) .
+                                               "\nBacktrace:\n" . self::getRedactedTraceAsString( $e ) .
+                                               "\n\nException caught inside exception handler: " . self::getLogMessage( $e2 ) .
+                                               "\nBacktrace:\n" . self::getRedactedTraceAsString( $e2 );
+                               } else {
+                                       $message .= "Exception caught inside exception handler.\n\n" .
+                                               "Set \$wgShowExceptionDetails = true; at the bottom of LocalSettings.php " .
+                                               "to show detailed debugging information.";
+                               }
+
+                               $message .= "\n";
+
+                               if ( $cmdLine ) {
+                                       self::printError( $message );
+                               } else {
+                                       echo nl2br( htmlspecialchars( $message ) ) . "\n";
+                               }
+                       }
+               } else {
+                       $message = "Unexpected non-MediaWiki exception encountered, of type \"" .
+                               get_class( $e ) . "\"";
+
+                       if ( $wgShowExceptionDetails ) {
+                               $message .= "\n" . MWExceptionHandler::getLogMessage( $e ) . "\nBacktrace:\n" .
+                                       self::getRedactedTraceAsString( $e ) . "\n";
+                       }
+
+                       if ( $cmdLine ) {
+                               self::printError( $message );
+                       } else {
+                               echo nl2br( htmlspecialchars( $message ) ) . "\n";
+                       }
+               }
+       }
+
+       /**
+        * Print a message, if possible to STDERR.
+        * Use this in command line mode only (see isCommandLine)
+        *
+        * @param string $message Failure text
+        */
+       public static function printError( $message ) {
+               # NOTE: STDERR may not be available, especially if php-cgi is used from the
+               # command line (bug #15602). Try to produce meaningful output anyway. Using
+               # echo may corrupt output to STDOUT though.
+               if ( defined( 'STDERR' ) ) {
+                       fwrite( STDERR, $message );
+               } else {
+                       echo $message;
+               }
+       }
+
+       /**
+        * Exception handler which simulates the appropriate catch() handling:
+        *
+        *   try {
+        *       ...
+        *   } catch ( MWException $e ) {
+        *       $e->report();
+        *   } catch ( Exception $e ) {
+        *       echo $e->__toString();
+        *   }
+        */
+       public static function handle( $e ) {
+               global $wgFullyInitialised;
+
+               self::report( $e );
+
+               // Final cleanup
+               if ( $wgFullyInitialised ) {
+                       try {
+                               // uses $wgRequest, hence the $wgFullyInitialised condition
+                               wfLogProfilingData();
+                       } catch ( Exception $e ) {
+                       }
+               }
+
+               // Exit value should be nonzero for the benefit of shell jobs
+               exit( 1 );
+       }
+
+       /**
+        * Generate a string representation of an exception's stack trace
+        *
+        * Like Exception::getTraceAsString, but replaces argument values with
+        * argument type or class name.
+        *
+        * @param Exception $e
+        * @return string
+        */
+       public static function getRedactedTraceAsString( Exception $e ) {
+               $text = '';
+
+               foreach ( self::getRedactedTrace( $e ) as $level => $frame ) {
+                       if ( isset( $frame['file'] ) && isset( $frame['line'] ) ) {
+                               $text .= "#{$level} {$frame['file']}({$frame['line']}): ";
+                       } else {
+                               // 'file' and 'line' are unset for calls via call_user_func (bug 55634)
+                               // This matches behaviour of Exception::getTraceAsString to instead
+                               // display "[internal function]".
+                               $text .= "#{$level} [internal function]: ";
+                       }
+
+                       if ( isset( $frame['class'] ) ) {
+                               $text .= $frame['class'] . $frame['type'] . $frame['function'];
+                       } else {
+                               $text .= $frame['function'];
+                       }
+
+                       if ( isset( $frame['args'] ) ) {
+                               $text .= '(' . implode( ', ', $frame['args'] ) . ")\n";
+                       } else {
+                               $text .= "()\n";
+                       }
+               }
+
+               $level = $level + 1;
+               $text .= "#{$level} {main}";
+
+               return $text;
+       }
+
+       /**
+        * Return a copy of an exception's backtrace as an array.
+        *
+        * Like Exception::getTrace, but replaces each element in each frame's
+        * argument array with the name of its class (if the element is an object)
+        * or its type (if the element is a PHP primitive).
+        *
+        * @since 1.22
+        * @param Exception $e
+        * @return array
+        */
+       public static function getRedactedTrace( Exception $e ) {
+               return array_map( function ( $frame ) {
+                       if ( isset( $frame['args'] ) ) {
+                               $frame['args'] = array_map( function ( $arg ) {
+                                       return is_object( $arg ) ? get_class( $arg ) : gettype( $arg );
+                               }, $frame['args'] );
+                       }
+                       return $frame;
+               }, $e->getTrace() );
+       }
+
+       /**
+        * Get the ID for this error.
+        *
+        * The ID is saved so that one can match the one output to the user (when
+        * $wgShowExceptionDetails is set to false), to the entry in the debug log.
+        *
+        * @since 1.22
+        * @param Exception $e
+        * @return string
+        */
+       public static function getLogId( Exception $e ) {
+               if ( !isset( $e->_mwLogId ) ) {
+                       $e->_mwLogId = wfRandomString( 8 );
+               }
+               return $e->_mwLogId;
+       }
+
+       /**
+        * If the exception occurred in the course of responding to a request,
+        * returns the requested URL. Otherwise, returns false.
+        *
+        * @since 1.23
+        * @return string|bool
+        */
+       public static function getURL() {
+               global $wgRequest;
+               if ( !isset( $wgRequest ) || $wgRequest instanceof FauxRequest ) {
+                       return false;
+               }
+               return $wgRequest->getRequestURL();
+       }
+
+       /**
+        * Return the requested URL and point to file and line number from which the
+        * exception occurred.
+        *
+        * @since 1.22
+        * @param Exception $e
+        * @return string
+        */
+       public static function getLogMessage( Exception $e ) {
+               $id = self::getLogId( $e );
+               $file = $e->getFile();
+               $line = $e->getLine();
+               $message = $e->getMessage();
+               $url = self::getURL() ?: '[no req]';
+
+               return "[$id] $url   Exception from line $line of $file: $message";
+       }
+
+       /**
+        * Serialize an Exception object to JSON.
+        *
+        * The JSON object will have keys 'id', 'file', 'line', 'message', and
+        * 'url'. These keys map to string values, with the exception of 'line',
+        * which is a number, and 'url', which may be either a string URL or or
+        * null if the exception did not occur in the context of serving a web
+        * request.
+        *
+        * If $wgLogExceptionBacktrace is true, it will also have a 'backtrace'
+        * key, mapped to the array return value of Exception::getTrace, but with
+        * each element in each frame's "args" array (if set) replaced with the
+        * argument's class name (if the argument is an object) or type name (if
+        * the argument is a PHP primitive).
+        *
+        * @par Sample JSON record ($wgLogExceptionBacktrace = false):
+        * @code
+        *  {
+        *    "id": "c41fb419",
+        *    "file": "/var/www/mediawiki/includes/cache/MessageCache.php",
+        *    "line": 704,
+        *    "message": "Non-string key given",
+        *    "url": "/wiki/Main_Page"
+        *  }
+        * @endcode
+        *
+        * @par Sample JSON record ($wgLogExceptionBacktrace = true):
+        * @code
+        *  {
+        *    "id": "dc457938",
+        *    "file": "/vagrant/mediawiki/includes/cache/MessageCache.php",
+        *    "line": 704,
+        *    "message": "Non-string key given",
+        *    "url": "/wiki/Main_Page",
+        *    "backtrace": [{
+        *      "file": "/vagrant/mediawiki/extensions/VisualEditor/VisualEditor.hooks.php",
+        *      "line": 80,
+        *      "function": "get",
+        *      "class": "MessageCache",
+        *      "type": "->",
+        *      "args": ["array"]
+        *    }]
+        *  }
+        * @endcode
+        *
+        * @since 1.23
+        * @param Exception $e
+        * @param bool $pretty Add non-significant whitespace to improve readability (default: false).
+        * @param int $escaping Bitfield consisting of FormatJson::.*_OK class constants.
+        * @return string|bool: JSON string if successful; false upon failure
+        */
+       public static function jsonSerializeException( Exception $e, $pretty = false, $escaping = 0 ) {
+               global $wgLogExceptionBacktrace;
+
+               $exceptionData = array(
+                       'id' => self::getLogId( $e ),
+                       'file' => $e->getFile(),
+                       'line' => $e->getLine(),
+                       'message' => $e->getMessage(),
+               );
+
+               // Because MediaWiki is first and foremost a web application, we set a
+               // 'url' key unconditionally, but set it to null if the exception does
+               // not occur in the context of a web request, as a way of making that
+               // fact visible and explicit.
+               $exceptionData['url'] = self::getURL() ?: null;
+
+               if ( $wgLogExceptionBacktrace ) {
+                       // Argument values may not be serializable, so redact them.
+                       $exceptionData['backtrace'] = self::getRedactedTrace( $e );
+               }
+
+               return FormatJson::encode( $exceptionData, $pretty, $escaping );
+       }
+
+       /**
+        * Log an exception to the exception log (if enabled).
+        *
+        * This method must not assume the exception is an MWException,
+        * it is also used to handle PHP errors or errors from other libraries.
+        *
+        * @since 1.22
+        * @param Exception $e
+        */
+       public static function logException( Exception $e ) {
+               global $wgLogExceptionBacktrace;
+
+               if ( !( $e instanceof MWException ) || $e->isLoggable() ) {
+                       $log = self::getLogMessage( $e );
+                       if ( $wgLogExceptionBacktrace ) {
+                               wfDebugLog( 'exception', $log . "\n" . $e->getTraceAsString() );
+                       } else {
+                               wfDebugLog( 'exception', $log );
+                       }
+
+                       $json = self::jsonSerializeException( $e, false, FormatJson::ALL_OK );
+                       if ( $json !== false ) {
+                               wfDebugLog( 'exception-json', $json, 'private' );
+                       }
+               }
+
+       }
+
+}
diff --git a/includes/exception/PermissionsError.php b/includes/exception/PermissionsError.php
new file mode 100644 (file)
index 0000000..bfba7b2
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Show an error when a user tries to do something they do not have the necessary
+ * permissions for.
+ *
+ * @since 1.18
+ * @ingroup Exception
+ */
+class PermissionsError extends ErrorPageError {
+       public $permission, $errors;
+
+       public function __construct( $permission, $errors = array() ) {
+               global $wgLang;
+
+               $this->permission = $permission;
+
+               if ( !count( $errors ) ) {
+                       $groups = array_map(
+                               array( 'User', 'makeGroupLinkWiki' ),
+                               User::getGroupsWithPermission( $this->permission )
+                       );
+
+                       if ( $groups ) {
+                               $errors[] = array( 'badaccess-groups', $wgLang->commaList( $groups ), count( $groups ) );
+                       } else {
+                               $errors[] = array( 'badaccess-group0' );
+                       }
+               }
+
+               $this->errors = $errors;
+       }
+
+       public function report() {
+               global $wgOut;
+
+               $wgOut->showPermissionsErrorPage( $this->errors, $this->permission );
+               $wgOut->output();
+       }
+}
diff --git a/includes/exception/ReadOnlyError.php b/includes/exception/ReadOnlyError.php
new file mode 100644 (file)
index 0000000..cebeb1c
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Show an error when the wiki is locked/read-only and the user tries to do
+ * something that requires write access.
+ *
+ * @since 1.18
+ * @ingroup Exception
+ */
+class ReadOnlyError extends ErrorPageError {
+       public function __construct() {
+               parent::__construct(
+                       'readonly',
+                       'readonlytext',
+                       wfReadOnlyReason() ?: array()
+               );
+       }
+}
diff --git a/includes/exception/ThrottledError.php b/includes/exception/ThrottledError.php
new file mode 100644 (file)
index 0000000..ce5d52e
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Show an error when the user hits a rate limit.
+ *
+ * @since 1.18
+ * @ingroup Exception
+ */
+class ThrottledError extends ErrorPageError {
+       public function __construct() {
+               parent::__construct(
+                       'actionthrottled',
+                       'actionthrottledtext'
+               );
+       }
+
+       public function report() {
+               global $wgOut;
+               $wgOut->setStatusCode( 503 );
+               parent::report();
+       }
+}
diff --git a/includes/exception/UserBlockedError.php b/includes/exception/UserBlockedError.php
new file mode 100644 (file)
index 0000000..9d19f8b
--- /dev/null
@@ -0,0 +1,33 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Show an error when the user tries to do something whilst blocked.
+ *
+ * @since 1.18
+ * @ingroup Exception
+ */
+class UserBlockedError extends ErrorPageError {
+       public function __construct( Block $block ) {
+               // @todo FIXME: Implement a more proper way to get context here.
+               $params = $block->getPermissionsError( RequestContext::getMain() );
+               parent::__construct( 'blockedtitle', array_shift( $params ), $params );
+       }
+}
diff --git a/includes/exception/UserNotLoggedIn.php b/includes/exception/UserNotLoggedIn.php
new file mode 100644 (file)
index 0000000..9d89009
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Shows a generic "user is not logged in" error page.
+ *
+ * This is essentially an ErrorPageError exception which by default uses the
+ * 'exception-nologin' as a title and 'exception-nologin-text' for the message.
+ * @see bug 37627
+ * @since 1.20
+ *
+ * @par Example:
+ * @code
+ * if( $user->isAnon() ) {
+ *     throw new UserNotLoggedIn();
+ * }
+ * @endcode
+ *
+ * Note the parameter order differs from ErrorPageError, this allows you to
+ * simply specify a reason without overriding the default title.
+ *
+ * @par Example:
+ * @code
+ * if( $user->isAnon() ) {
+ *     throw new UserNotLoggedIn( 'action-require-loggedin' );
+ * }
+ * @endcode
+ *
+ * @ingroup Exception
+ */
+class UserNotLoggedIn extends ErrorPageError {
+
+       /**
+        * @param string $reasonMsg A message key containing the reason for the error.
+        *        Optional, default: 'exception-nologin-text'
+        * @param string $titleMsg A message key to set the page title.
+        *        Optional, default: 'exception-nologin'
+        * @param array $params Parameters to wfMessage().
+        *        Optional, default: array()
+        */
+       public function __construct(
+               $reasonMsg = 'exception-nologin-text',
+               $titleMsg = 'exception-nologin',
+               $params = array()
+       ) {
+               parent::__construct( $titleMsg, $reasonMsg, $params );
+       }
+}
index f329b73..89ac734 100644 (file)
@@ -84,8 +84,10 @@ class ExternalStoreMwstore extends ExternalStoreMedium {
                        // Segregate items by wiki ID for the sake of bookkeeping
                        $wiki = isset( $this->params['wiki'] ) ? $this->params['wiki'] : wfWikiID();
 
-                       $url = $be->getContainerStoragePath( 'data' ) . '/' .
-                               rawurlencode( $wiki ) . "/{$rand[0]}/{$rand[1]}/{$rand[2]}/{$id}";
+                       $url = $be->getContainerStoragePath( 'data' ) . '/' . rawurlencode( $wiki );
+                       $url .= ( $be instanceof FSFileBackend )
+                               ? "/{$rand[0]}/{$rand[1]}/{$rand[2]}/{$id}" // keep directories small
+                               : "/{$rand[0]}/{$rand[1]}/{$id}"; // container sharding is only 2-levels
 
                        $be->prepare( array( 'dir' => dirname( $url ), 'noAccess' => 1, 'noListing' => 1 ) );
                        if ( $be->create( array( 'dst' => $url, 'content' => $data ) )->isOK() ) {
index 00a4d5e..716ab6e 100644 (file)
@@ -1189,9 +1189,11 @@ abstract class FileBackend {
        }
 
        /**
-        * Preload persistent file stat and property cache into in-process cache.
+        * Preload persistent file stat cache and property cache into in-process cache.
         * This should be used when stat calls will be made on a known list of a many files.
         *
+        * @see FileBackend::getFileStat()
+        *
         * @param array $paths Storage paths
         */
        public function preloadCache( array $paths ) {
@@ -1201,11 +1203,27 @@ abstract class FileBackend {
         * Invalidate any in-process file stat and property cache.
         * If $paths is given, then only the cache for those files will be cleared.
         *
+        * @see FileBackend::getFileStat()
+        *
         * @param array $paths Storage paths (optional)
         */
        public function clearCache( array $paths = null ) {
        }
 
+       /**
+        * Preload file stat information (concurrently if possible) into in-process cache.
+        * This should be used when stat calls will be made on a known list of a many files.
+        *
+        * @see FileBackend::getFileStat()
+        *
+        * @param array $params Parameters include:
+        *   - srcs        : list of source storage paths
+        *   - latest      : use the latest available data
+        * @since 1.23
+        */
+       public function preloadFileStat( array $params ) {
+       }
+
        /**
         * Lock the files at the given storage paths in the backend.
         * This will either lock all the files or none (on failure).
index 81d088e..f00ef65 100644 (file)
@@ -662,6 +662,10 @@ class FileBackendMultiWrite extends FileBackend {
                }
        }
 
+       public function preloadFileStat( array $params ) {
+               $this->backends[$this->masterIndex]->preloadFileStat( $params );
+       }
+
        public function getScopedLocksForOps( array $ops, Status $status ) {
                $realOps = $this->substOpBatchPaths( $ops, $this->backends[$this->masterIndex] );
                $fileOps = $this->backends[$this->masterIndex]->getOperationsInternal( $realOps );
index 50371f8..2d8214e 100644 (file)
@@ -648,7 +648,8 @@ abstract class FileBackendStore extends FileBackend {
                $stat = $this->doGetFileStat( $params );
                wfProfileOut( __METHOD__ . '-miss-' . $this->name );
                if ( is_array( $stat ) ) { // file exists
-                       $stat['latest'] = $latest;
+                       // Strongly consistent backends can automatically set "latest"
+                       $stat['latest'] = isset( $stat['latest'] ) ? $stat['latest'] : $latest;
                        $this->cheapCache->set( $path, 'stat', $stat );
                        $this->setFileCache( $path, $stat ); // update persistent cache
                        if ( isset( $stat['sha1'] ) ) { // some backends store SHA-1 as metadata
@@ -1095,9 +1096,16 @@ abstract class FileBackendStore extends FileBackend {
                        $this->clearCache();
                }
 
-               // Load from the persistent file and container caches
-               $this->primeFileCache( $performOps );
-               $this->primeContainerCache( $performOps );
+               // Build the list of paths involved
+               $paths = array();
+               foreach ( $performOps as $op ) {
+                       $paths = array_merge( $paths, $op->storagePathsRead() );
+                       $paths = array_merge( $paths, $op->storagePathsChanged() );
+               }
+               // Load from the persistent container caches
+               $this->primeContainerCache( $paths );
+               // Get the latest stat info for all the files (having locked them)
+               $this->preloadFileStat( array( 'srcs' => $paths, 'latest' => true ) );
 
                // Actually attempt the operation batch...
                $opts = $this->setConcurrencyFlags( $opts );
@@ -1272,6 +1280,64 @@ abstract class FileBackendStore extends FileBackend {
        protected function doClearCache( array $paths = null ) {
        }
 
+       final public function preloadFileStat( array $params ) {
+               $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+
+               $params['concurrency'] = ( $this->parallelize !== 'off' ) ? $this->concurrency : 1;
+               $stats = $this->doGetFileStatMulti( $params );
+               if ( $stats === null ) {
+                       return; // not supported
+               }
+
+               $latest = !empty( $params['latest'] ); // use latest data?
+               foreach ( $stats as $path => $stat ) {
+                       $path = FileBackend::normalizeStoragePath( $path );
+                       if ( $path === null ) {
+                               continue; // this shouldn't happen
+                       }
+                       if ( is_array( $stat ) ) { // file exists
+                               // Strongly consistent backends can automatically set "latest"
+                               $stat['latest'] = isset( $stat['latest'] ) ? $stat['latest'] : $latest;
+                               $this->cheapCache->set( $path, 'stat', $stat );
+                               $this->setFileCache( $path, $stat ); // update persistent cache
+                               if ( isset( $stat['sha1'] ) ) { // some backends store SHA-1 as metadata
+                                       $this->cheapCache->set( $path, 'sha1',
+                                               array( 'hash' => $stat['sha1'], 'latest' => $latest ) );
+                               }
+                               if ( isset( $stat['xattr'] ) ) { // some backends store headers/metadata
+                                       $stat['xattr'] = self::normalizeXAttributes( $stat['xattr'] );
+                                       $this->cheapCache->set( $path, 'xattr',
+                                               array( 'map' => $stat['xattr'], 'latest' => $latest ) );
+                               }
+                       } elseif ( $stat === false ) { // file does not exist
+                               $this->cheapCache->set( $path, 'stat',
+                                       $latest ? 'NOT_EXIST_LATEST' : 'NOT_EXIST' );
+                               $this->cheapCache->set( $path, 'xattr',
+                                       array( 'map' => false, 'latest' => $latest ) );
+                               $this->cheapCache->set( $path, 'sha1',
+                                       array( 'hash' => false, 'latest' => $latest ) );
+                               wfDebug( __METHOD__ . ": File $path does not exist.\n" );
+                       } else { // an error occurred
+                               wfDebug( __METHOD__ . ": Could not stat file $path.\n" );
+                       }
+               }
+       }
+
+       /**
+        * Get file stat information (concurrently if possible) for several files
+        *
+        * @see FileBackend::getFileStat()
+        *
+        * @param array $params Parameters include:
+        *   - srcs        : list of source storage paths
+        *   - latest      : use the latest available data
+        * @return array|null Map of storage paths to array|bool|null (returns null if not supported)
+        * @since 1.23
+        */
+       protected function doGetFileStatMulti( array $params ) {
+               return null; // not supported
+       }
+
        /**
         * Is this a key/value store where directories are just virtual?
         * Virtual directories exists in so much as files exists that are
@@ -1501,7 +1567,7 @@ abstract class FileBackendStore extends FileBackend {
         * @return string
         */
        private function containerCacheKey( $container ) {
-               return wfMemcKey( 'backend', $this->getName(), 'container', $container );
+               return "filebackend:{$this->name}:{$this->wikiId}:container:{$container}";
        }
 
        /**
@@ -1528,7 +1594,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * Do a batch lookup from cache for container stats for all containers
-        * used in a list of container names, storage paths, or FileOp objects.
+        * used in a list of container names or storage paths objects.
         * This loads the persistent cache values into the process cache.
         *
         * @param array $items
@@ -1540,10 +1606,7 @@ abstract class FileBackendStore extends FileBackend {
                $contNames = array(); // (cache key => resolved container name)
                // Get all the paths/containers from the items...
                foreach ( $items as $item ) {
-                       if ( $item instanceof FileOp ) {
-                               $paths = array_merge( $paths, $item->storagePathsRead() );
-                               $paths = array_merge( $paths, $item->storagePathsChanged() );
-                       } elseif ( self::isStoragePath( $item ) ) {
+                       if ( self::isStoragePath( $item ) ) {
                                $paths[] = $item;
                        } elseif ( is_string( $item ) ) { // full container name
                                $contNames[$this->containerCacheKey( $item )] = $item;
@@ -1585,7 +1648,7 @@ abstract class FileBackendStore extends FileBackend {
         * @return string
         */
        private function fileCacheKey( $path ) {
-               return wfMemcKey( 'backend', $this->getName(), 'file', sha1( $path ) );
+               return "filebackend:{$this->name}:{$this->wikiId}:file:" . sha1( $path );
        }
 
        /**
@@ -1629,7 +1692,7 @@ abstract class FileBackendStore extends FileBackend {
         * used in a list of storage paths or FileOp objects.
         * This loads the persistent cache values into the process cache.
         *
-        * @param array $items List of storage paths or FileOps
+        * @param array $items List of storage paths
         */
        final protected function primeFileCache( array $items ) {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
@@ -1638,10 +1701,7 @@ abstract class FileBackendStore extends FileBackend {
                $pathNames = array(); // (cache key => storage path)
                // Get all the paths/containers from the items...
                foreach ( $items as $item ) {
-                       if ( $item instanceof FileOp ) {
-                               $paths = array_merge( $paths, $item->storagePathsRead() );
-                               $paths = array_merge( $paths, $item->storagePathsChanged() );
-                       } elseif ( self::isStoragePath( $item ) ) {
+                       if ( self::isStoragePath( $item ) ) {
                                $paths[] = FileBackend::normalizeStoragePath( $item );
                        }
                }
index d524cc2..7050226 100644 (file)
@@ -72,6 +72,9 @@ class SwiftFileBackend extends FileBackendStore {
        /** @var int UNIX timestamp */
        protected $authErrorTimestamp = null;
 
+       /** @var bool Whether the server is an Ceph RGW */
+       protected $isRGW = false;
+
        /**
         * @see FileBackendStore::__construct()
         * Additional $config params include:
@@ -617,59 +620,11 @@ class SwiftFileBackend extends FileBackendStore {
        }
 
        protected function doGetFileStat( array $params ) {
-               list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
-               if ( $srcRel === null ) {
-                       return false; // invalid storage path
-               }
-
-               $auth = $this->getAuthentication();
-               if ( !$auth ) {
-                       return null;
-               }
-
-               // (a) Check the container
-               $cstat = $this->getContainerStat( $srcCont, true );
-               if ( $cstat === false ) {
-                       return false; // ok, nothing to do
-               } elseif ( !is_array( $cstat ) ) {
-                       return null;
-               }
+               $params = array( 'srcs' => array( $params['src'] ), 'concurrency' => 1 ) + $params;
+               unset( $params['src'] );
+               $stats = $this->doGetFileStatMulti( $params );
 
-               // (b) Check the file
-               list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $this->http->run( array(
-                       'method' => 'HEAD',
-                       'url' => $this->storageUrl( $auth, $srcCont, $srcRel ),
-                       'headers' => $this->authTokenHeaders( $auth ) + $this->headersFromParams( $params )
-               ) );
-               if ( $rcode === 200 || $rcode === 204 ) {
-                       // Update the object if it is missing some headers
-                       $rhdrs = $this->addMissingMetadata( $rhdrs, $params['src'] );
-                       // Fetch all of the custom metadata headers
-                       $metadata = array();
-                       foreach ( $rhdrs as $name => $value ) {
-                               if ( strpos( $name, 'x-object-meta-' ) === 0 ) {
-                                       $metadata[substr( $name, strlen( 'x-object-meta-' ) )] = $value;
-                               }
-                       }
-                       // Fetch all of the custom raw HTTP headers
-                       $headers = $this->sanitizeHdrs( array( 'headers' => $rhdrs ) );
-                       $stat = array(
-                               // Convert various random Swift dates to TS_MW
-                               'mtime' => $this->convertSwiftDate( $rhdrs['last-modified'], TS_MW ),
-                               // Empty objects actually return no content-length header in Ceph
-                               'size' => isset( $rhdrs['content-length'] ) ? (int)$rhdrs['content-length'] : 0,
-                               'sha1' => $rhdrs['x-object-meta-sha1base36'],
-                               'md5' => ctype_xdigit( $rhdrs['etag'] ) ? $rhdrs['etag'] : null,
-                               'xattr' => array( 'metadata' => $metadata, 'headers' => $headers )
-                       );
-               } elseif ( $rcode === 404 ) {
-                       $stat = false;
-               } else {
-                       $stat = null;
-                       $this->onError( null, __METHOD__, $params, $rerr, $rcode, $rdesc );
-               }
-
-               return $stat;
+               return reset( $stats );
        }
 
        /**
@@ -704,7 +659,7 @@ class SwiftFileBackend extends FileBackendStore {
                        return $objHdrs; // nothing to do
                }
 
-               $section = new ProfileSection( __METHOD__ );
+               $section = new ProfileSection( __METHOD__ . '-' . $this->name );
                trigger_error( "$path was not stored with SHA-1 metadata.", E_USER_WARNING );
 
                $auth = $this->getAuthentication();
@@ -748,46 +703,42 @@ class SwiftFileBackend extends FileBackendStore {
                $ep = array_diff_key( $params, array( 'srcs' => 1 ) ); // for error logging
                // Blindly create tmp files and stream to them, catching any exception if the file does
                // not exist. Doing stats here is useless and will loop infinitely in addMissingMetadata().
-               foreach ( array_chunk( $params['srcs'], $params['concurrency'] ) as $pathBatch ) {
-                       $reqs = array(); // (path => op)
-
-                       foreach ( $pathBatch as $path ) { // each path in this concurrent batch
-                               list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $path );
-                               if ( $srcRel === null || !$auth ) {
-                                       $contents[$path] = false;
-                                       continue;
-                               }
-                               $data = false;
-                               // Create a new temporary memory file...
-                               $handle = fopen( 'php://temp', 'wb' );
-                               if ( $handle ) {
-                                       $reqs[$path] = array(
-                                               'method' => 'GET',
-                                               'url' => $this->storageUrl( $auth, $srcCont, $srcRel ),
-                                               'headers' => $this->authTokenHeaders( $auth )
-                                                       + $this->headersFromParams( $params ),
-                                               'stream' => $handle,
-                                       );
-                               } else {
-                                       $data = false;
-                               }
-                               $contents[$path] = $data;
+               $reqs = array(); // (path => op)
+
+               foreach ( $params['srcs'] as $path ) { // each path in this concurrent batch
+                       list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $path );
+                       if ( $srcRel === null || !$auth ) {
+                               $contents[$path] = false;
+                               continue;
                        }
+                       // Create a new temporary memory file...
+                       $handle = fopen( 'php://temp', 'wb' );
+                       if ( $handle ) {
+                               $reqs[$path] = array(
+                                       'method'  => 'GET',
+                                       'url'     => $this->storageUrl( $auth, $srcCont, $srcRel ),
+                                       'headers' => $this->authTokenHeaders( $auth )
+                                               + $this->headersFromParams( $params ),
+                                       'stream'  => $handle,
+                               );
+                       }
+                       $contents[$path] = false;
+               }
 
-                       $reqs = $this->http->runMulti( $reqs );
-                       foreach ( $reqs as $path => $op ) {
-                               list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $op['response'];
-                               if ( $rcode >= 200 && $rcode <= 299 ) {
-                                       rewind( $op['stream'] ); // start from the beginning
-                                       $contents[$path] = stream_get_contents( $op['stream'] );
-                               } elseif ( $rcode === 404 ) {
-                                       $contents[$path] = false;
-                               } else {
-                                       $this->onError( null, __METHOD__,
-                                               array( 'src' => $path ) + $ep, $rerr, $rcode, $rdesc );
-                               }
-                               fclose( $op['stream'] ); // close open handle
+               $opts = array( 'maxConnsPerHost' => $params['concurrency'] );
+               $reqs = $this->http->runMulti( $reqs, $opts );
+               foreach ( $reqs as $path => $op ) {
+                       list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $op['response'];
+                       if ( $rcode >= 200 && $rcode <= 299 ) {
+                               rewind( $op['stream'] ); // start from the beginning
+                               $contents[$path] = stream_get_contents( $op['stream'] );
+                       } elseif ( $rcode === 404 ) {
+                               $contents[$path] = false;
+                       } else {
+                               $this->onError( null, __METHOD__,
+                                       array( 'src' => $path ) + $ep, $rerr, $rcode, $rdesc );
                        }
+                       fclose( $op['stream'] ); // close open handle
                }
 
                return $contents;
@@ -797,7 +748,7 @@ class SwiftFileBackend extends FileBackendStore {
                $prefix = ( $dir == '' ) ? null : "{$dir}/";
                $status = $this->objectListing( $fullCont, 'names', 1, null, $prefix );
                if ( $status->isOk() ) {
-                       return ( count( $status->value ) );
+                       return ( count( $status->value ) ) > 0;
                }
 
                return null; // error
@@ -979,9 +930,10 @@ class SwiftFileBackend extends FileBackendStore {
                                }
                                $stat = array(
                                        // Convert various random Swift dates to TS_MW
-                                       'mtime' => $this->convertSwiftDate( $object->last_modified, TS_MW ),
-                                       'size' => (int)$object->bytes,
-                                       'md5' => ctype_xdigit( $object->hash ) ? $object->hash : null,
+                                       'mtime'  => $this->convertSwiftDate( $object->last_modified, TS_MW ),
+                                       'size'   => (int)$object->bytes,
+                                       // Note: manifiest ETags are not an MD5 of the file
+                                       'md5'    => ctype_xdigit( $object->hash ) ? $object->hash : null,
                                        'latest' => false // eventually consistent
                                );
                                $names[] = array( $object->name, $stat );
@@ -1078,54 +1030,52 @@ class SwiftFileBackend extends FileBackendStore {
                $ep = array_diff_key( $params, array( 'srcs' => 1 ) ); // for error logging
                // Blindly create tmp files and stream to them, catching any exception if the file does
                // not exist. Doing a stat here is useless causes infinite loops in addMissingMetadata().
-               foreach ( array_chunk( $params['srcs'], $params['concurrency'] ) as $pathBatch ) {
-                       $reqs = array(); // (path => op)
-
-                       foreach ( $pathBatch as $path ) { // each path in this concurrent batch
-                               list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $path );
-                               if ( $srcRel === null || !$auth ) {
-                                       $tmpFiles[$path] = null;
-                                       continue;
-                               }
-                               $tmpFile = null;
-                               // Get source file extension
-                               $ext = FileBackend::extensionFromPath( $path );
-                               // Create a new temporary file...
-                               $tmpFile = TempFSFile::factory( 'localcopy_', $ext );
-                               if ( $tmpFile ) {
-                                       $handle = fopen( $tmpFile->getPath(), 'wb' );
-                                       if ( $handle ) {
-                                               $reqs[$path] = array(
-                                                       'method' => 'GET',
-                                                       'url' => $this->storageUrl( $auth, $srcCont, $srcRel ),
-                                                       'headers' => $this->authTokenHeaders( $auth )
-                                                               + $this->headersFromParams( $params ),
-                                                       'stream' => $handle,
-                                               );
-                                       } else {
-                                               $tmpFile = null;
-                                       }
-                               }
-                               $tmpFiles[$path] = $tmpFile;
-                       }
+               $reqs = array(); // (path => op)
 
-                       $reqs = $this->http->runMulti( $reqs );
-                       foreach ( $reqs as $path => $op ) {
-                               list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $op['response'];
-                               fclose( $op['stream'] ); // close open handle
-                               if ( $rcode >= 200 && $rcode <= 299
-                                       // double check that the disk is not full/broken
-                                       && $tmpFiles[$path]->getSize() == $rhdrs['content-length']
-                               ) {
-                                       // good
-                               } elseif ( $rcode === 404 ) {
-                                       $tmpFiles[$path] = false;
+               foreach ( $params['srcs'] as $path ) { // each path in this concurrent batch
+                       list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $path );
+                       if ( $srcRel === null || !$auth ) {
+                               $tmpFiles[$path] = null;
+                               continue;
+                       }
+                       // Get source file extension
+                       $ext = FileBackend::extensionFromPath( $path );
+                       // Create a new temporary file...
+                       $tmpFile = TempFSFile::factory( 'localcopy_', $ext );
+                       if ( $tmpFile ) {
+                               $handle = fopen( $tmpFile->getPath(), 'wb' );
+                               if ( $handle ) {
+                                       $reqs[$path] = array(
+                                               'method'  => 'GET',
+                                               'url'     => $this->storageUrl( $auth, $srcCont, $srcRel ),
+                                               'headers' => $this->authTokenHeaders( $auth )
+                                                       + $this->headersFromParams( $params ),
+                                               'stream'  => $handle,
+                                       );
                                } else {
-                                       $tmpFiles[$path] = null;
-                                       $this->onError( null, __METHOD__,
-                                               array( 'src' => $path ) + $ep, $rerr, $rcode, $rdesc );
+                                       $tmpFile = null;
                                }
                        }
+                       $tmpFiles[$path] = $tmpFile;
+               }
+
+               $opts = array( 'maxConnsPerHost' => $params['concurrency'] );
+               $reqs = $this->http->runMulti( $reqs, $opts );
+               foreach ( $reqs as $path => $op ) {
+                       list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $op['response'];
+                       fclose( $op['stream'] ); // close open handle
+                       if ( $rcode >= 200 && $rcode <= 299
+                               // double check that the disk is not full/broken
+                               && $tmpFiles[$path]->getSize() == $rhdrs['content-length']
+                       ) {
+                               // good
+                       } elseif ( $rcode === 404 ) {
+                               $tmpFiles[$path] = false;
+                       } else {
+                               $tmpFiles[$path] = null;
+                               $this->onError( null, __METHOD__,
+                                       array( 'src' => $path ) + $ep, $rerr, $rcode, $rdesc );
+                       }
                }
 
                return $tmpFiles;
@@ -1312,6 +1262,8 @@ class SwiftFileBackend extends FileBackendStore {
         * @return array|bool|null False on 404, null on failure
         */
        protected function getContainerStat( $container, $bypassCache = false ) {
+               $section = new ProfileSection( __METHOD__ . '-' . $this->name );
+
                if ( $bypassCache ) { // purge cache
                        $this->containerStatCache->clear( $container );
                } elseif ( !$this->containerStatCache->has( $container, 'stat' ) ) {
@@ -1323,11 +1275,13 @@ class SwiftFileBackend extends FileBackendStore {
                                return null;
                        }
 
+                       wfProfileIn( __METHOD__. "-{$this->name}-miss" );
                        list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $this->http->run( array(
                                'method' => 'HEAD',
                                'url' => $this->storageUrl( $auth, $container ),
                                'headers' => $this->authTokenHeaders( $auth )
                        ) );
+                       wfProfileOut( __METHOD__ . "-{$this->name}-miss" );
 
                        if ( $rcode === 204 ) {
                                $stat = array(
@@ -1338,6 +1292,7 @@ class SwiftFileBackend extends FileBackendStore {
                                        return $stat;
                                } else {
                                        $this->containerStatCache->set( $container, 'stat', $stat ); // cache it
+                                       $this->setContainerCache( $container, $stat ); // update persistent cache
                                }
                        } elseif ( $rcode === 404 ) {
                                return false;
@@ -1502,6 +1457,85 @@ class SwiftFileBackend extends FileBackendStore {
                }
        }
 
+       protected function doGetFileStatMulti( array $params ) {
+               $stats = array();
+
+               $auth = $this->getAuthentication();
+
+               $reqs = array();
+               foreach ( $params['srcs'] as $path ) {
+                       list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $path );
+                       if ( $srcRel === null ) {
+                               $stats[$path] = false;
+                               continue; // invalid storage path
+                       } elseif ( !$auth ) {
+                               $stats[$path] = null;
+                               continue;
+                       }
+
+                       // (a) Check the container
+                       $cstat = $this->getContainerStat( $srcCont );
+                       if ( $cstat === false ) {
+                               $stats[$path] = false;
+                               continue; // ok, nothing to do
+                       } elseif ( !is_array( $cstat ) ) {
+                               $stats[$path] = null;
+                               continue;
+                       }
+
+                       $reqs[$path] = array(
+                               'method'  => 'HEAD',
+                               'url'     => $this->storageUrl( $auth, $srcCont, $srcRel ),
+                               'headers' => $this->authTokenHeaders( $auth ) + $this->headersFromParams( $params )
+                       );
+               }
+
+               $opts = array( 'maxConnsPerHost' => $params['concurrency'] );
+               $reqs = $this->http->runMulti( $reqs, $opts );
+
+               foreach ( $params['srcs'] as $path ) {
+                       if ( array_key_exists( $path, $stats ) ) {
+                               continue; // some sort of failure above
+                       }
+                       // (b) Check the file
+                       list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $reqs[$path]['response'];
+                       if ( $rcode === 200 || $rcode === 204 ) {
+                               // Update the object if it is missing some headers
+                               $rhdrs = $this->addMissingMetadata( $rhdrs, $path );
+                               // Fetch all of the custom metadata headers
+                               $metadata = array();
+                               foreach ( $rhdrs as $name => $value ) {
+                                       if ( strpos( $name, 'x-object-meta-' ) === 0 ) {
+                                               $metadata[substr( $name, strlen( 'x-object-meta-' ) )] = $value;
+                                       }
+                               }
+                               // Fetch all of the custom raw HTTP headers
+                               $headers = $this->sanitizeHdrs( array( 'headers' => $rhdrs ) );
+                               $stat = array(
+                                       // Convert various random Swift dates to TS_MW
+                                       'mtime' => $this->convertSwiftDate( $rhdrs['last-modified'], TS_MW ),
+                                       // Empty objects actually return no content-length header in Ceph
+                                       'size'  => isset( $rhdrs['content-length'] ) ? (int)$rhdrs['content-length'] : 0,
+                                       'sha1'  => $rhdrs[ 'x-object-meta-sha1base36'],
+                                       // Note: manifiest ETags are not an MD5 of the file
+                                       'md5'   => ctype_xdigit( $rhdrs['etag'] ) ? $rhdrs['etag'] : null,
+                                       'xattr' => array( 'metadata' => $metadata, 'headers' => $headers )
+                               );
+                               if ( $this->isRGW ) {
+                                       $stat['latest'] = true; // strong consistency
+                               }
+                       } elseif ( $rcode === 404 ) {
+                               $stat = false;
+                       } else {
+                               $stat = null;
+                               $this->onError( null, __METHOD__, $params, $rerr, $rcode, $rdesc );
+                       }
+                       $stats[$path] = $stat;
+               }
+
+               return $stats;
+       }
+
        /**
         * @return array|null Credential map
         */
@@ -1540,6 +1574,7 @@ class SwiftFileBackend extends FileBackendStore {
                                                'auth_token' => $rhdrs['x-auth-token'],
                                                'storage_url' => $rhdrs['x-storage-url']
                                        );
+                                       $this->srvCache->set( $cacheKey, $this->authCreds, ceil( $this->authTTL / 2 ) );
                                        $this->authSessionTimestamp = time();
                                } elseif ( $rcode === 401 ) {
                                        $this->onError( null, __METHOD__, array(), "Authentication failed.", $rcode );
@@ -1553,6 +1588,10 @@ class SwiftFileBackend extends FileBackendStore {
                                        return null;
                                }
                        }
+                       // Ceph RGW does not use <account> in URLs (OpenStack Swift uses "/v1/<account>")
+                       if ( substr( $this->authCreds['storage_url'], -3 ) === '/v1' ) {
+                               $this->isRGW = true; // take advantage of strong consistency
+                       }
                }
 
                return $this->authCreds;
@@ -1591,7 +1630,7 @@ class SwiftFileBackend extends FileBackendStore {
         * @return string
         */
        private function getCredsCacheKey( $username ) {
-               return wfMemcKey( 'backend', $this->getName(), 'usercreds', $username );
+               return 'swiftcredentials:' . md5( $username . ':' . $this->swiftAuthUrl );
        }
 
        /**
index e37e567..ff4cba5 100644 (file)
@@ -153,7 +153,7 @@ LUA;
                        );
                } catch ( RedisException $e ) {
                        $res = false;
-                       $this->redisPool->handleException( $server, $conn, $e );
+                       $this->redisPool->handleError( $conn, $e );
                }
 
                if ( $res === false ) {
@@ -221,7 +221,7 @@ LUA;
                        );
                } catch ( RedisException $e ) {
                        $res = false;
-                       $this->redisPool->handleException( $server, $conn, $e );
+                       $this->redisPool->handleError( $conn, $e );
                }
 
                if ( $res === false ) {
index 18f8d5d..8153ffb 100644 (file)
@@ -90,4 +90,8 @@ class ForeignDBViaLBRepo extends LocalRepo {
        protected function assertWritableRepo() {
                throw new MWException( get_class( $this ) . ': write operations are not supported.' );
        }
+
+       public function getInfo() {
+               return FileRepo::getInfo();
+       }
 }
index c7b257a..cfa26b0 100644 (file)
@@ -903,12 +903,13 @@ class LocalFile extends File {
 
                // Get a list of old thumbnails and URLs
                $files = $this->getThumbnails( $archiveName );
-               $dir = array_shift( $files );
-               $this->purgeThumbList( $dir, $files );
 
                // Purge any custom thumbnail caches
                wfRunHooks( 'LocalFilePurgeThumbnails', array( $this, $archiveName ) );
 
+               $dir = array_shift( $files );
+               $this->purgeThumbList( $dir, $files );
+
                // Purge the squid
                if ( $wgUseSquid ) {
                        $urls = array();
@@ -947,12 +948,12 @@ class LocalFile extends File {
                        }
                }
 
-               $dir = array_shift( $files );
-               $this->purgeThumbList( $dir, $files );
-
                // Purge any custom thumbnail caches
                wfRunHooks( 'LocalFilePurgeThumbnails', array( $this, false ) );
 
+               $dir = array_shift( $files );
+               $this->purgeThumbList( $dir, $files );
+
                // Purge the squid
                if ( $wgUseSquid ) {
                        SquidUpdate::purge( $urls );
index f3b7ce7..21505a8 100644 (file)
@@ -36,8 +36,8 @@
  * the HTML for the input field to be placed in the table.
  *
  * You can find extensive documentation on the www.mediawiki.org wiki:
- *  - http://www.mediawiki.org/wiki/HTMLForm
- *  - http://www.mediawiki.org/wiki/HTMLForm/tutorial
+ *  - https://www.mediawiki.org/wiki/HTMLForm
+ *  - https://www.mediawiki.org/wiki/HTMLForm/tutorial
  *
  * The constructor input is an associative array of $fieldname => $info,
  * where $info is an Associative Array with any of the following:
  *    'default'             -- default value when the form is displayed
  *    'id'                  -- HTML id attribute
  *    'cssclass'            -- CSS class
- *    'options'             -- varies according to the specific object.
+ *    'options'             -- associative array mapping labels to values.
+ *                             Some field types support multi-level arrays.
+ *    'options-messages'    -- associative array mapping message keys to values.
+ *                             Some field types support multi-level arrays.
+ *    'options-message'     -- message key to be parsed to extract the list of
+ *                             options (like 'ipbreason-dropdown').
  *    'label-message'       -- message key for a message to use as the label.
  *                             can be an array of msg key and then parameters to
  *                             the message.
@@ -113,10 +118,11 @@ class HTMLForm extends ContextSource {
                'edittools' => 'HTMLEditTools',
                'checkmatrix' => 'HTMLCheckMatrix',
                // HTMLTextField will output the correct type="" attribute automagically.
-               // There are about four zillion other HTML5 input types, like url, but
+               // There are about four zillion other HTML5 input types, like range, but
                // we don't use those at the moment, so no point in adding all of them.
                'email' => 'HTMLTextField',
                'password' => 'HTMLTextField',
+               'url' => 'HTMLTextField',
        );
 
        public $mFieldData;
@@ -306,15 +312,22 @@ class HTMLForm extends ContextSource {
        }
 
        /**
-        * Initialise a new Object for the field
+        * Get the HTMLFormField subclass for this descriptor.
+        *
+        * The descriptor can be passed either 'class' which is the name of
+        * a HTMLFormField subclass, or a shorter 'type' which is an alias.
+        * This makes sure the 'class' is always set, and also is returned by
+        * this function for ease.
+        *
+        * @since 1.23
         *
-        * @param $fieldname string
-        * @param string $descriptor input Descriptor, as described above
+        * @param string $fieldname Name of the field
+        * @param array $descriptor Input Descriptor, as described above
         *
         * @throws MWException
-        * @return HTMLFormField subclass
+        * @return string Name of a HTMLFormField subclass
         */
-       static function loadInputFromParameters( $fieldname, $descriptor ) {
+       public static function getClassFromDescriptor( $fieldname, &$descriptor ) {
                if ( isset( $descriptor['class'] ) ) {
                        $class = $descriptor['class'];
                } elseif ( isset( $descriptor['type'] ) ) {
@@ -325,8 +338,22 @@ class HTMLForm extends ContextSource {
                }
 
                if ( !$class ) {
-                       throw new MWException( "Descriptor with no class: " . print_r( $descriptor, true ) );
+                       throw new MWException( "Descriptor with no class for $fieldname: " . print_r( $descriptor, true ) );
                }
+               return $class;
+       }
+
+       /**
+        * Initialise a new Object for the field
+        *
+        * @param string $fieldname Name of the field
+        * @param array $descriptor Input Descriptor, as described above
+        *
+        * @throws MWException
+        * @return HTMLFormField subclass
+        */
+       public static function loadInputFromParameters( $fieldname, $descriptor ) {
+               $class = self::getClassFromDescriptor( $fieldname, $descriptor );
 
                $descriptor['fieldname'] = $fieldname;
 
@@ -790,7 +817,7 @@ class HTMLForm extends ContextSource {
         * @return String HTML.
         */
        function getButtons() {
-               $html = '<span class="mw-htmlform-submit-buttons">';
+               $buttons = '';
 
                if ( $this->mShowSubmit ) {
                        $attribs = array();
@@ -822,24 +849,17 @@ class HTMLForm extends ContextSource {
                                );
                        }
 
-                       $html .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n";
-
-                       // Buttons are top-level form elements in table and div layouts,
-                       // but vform wants all elements inside divs to get spaced-out block
-                       // styling.
-                       if ( $this->isVForm() ) {
-                               $html = Html::rawElement( 'div', null, "\n$html\n" );
-                       }
+                       $buttons .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n";
                }
 
                if ( $this->mShowReset ) {
-                       $html .= Html::element(
-                                       'input',
-                                       array(
-                                               'type' => 'reset',
-                                               'value' => $this->msg( 'htmlform-reset' )->text()
-                                       )
-                               ) . "\n";
+                       $buttons .= Html::element(
+                               'input',
+                               array(
+                                       'type' => 'reset',
+                                       'value' => $this->msg( 'htmlform-reset' )->text()
+                               )
+                       ) . "\n";
                }
 
                foreach ( $this->mButtons as $button ) {
@@ -857,10 +877,18 @@ class HTMLForm extends ContextSource {
                                $attrs['id'] = $button['id'];
                        }
 
-                       $html .= Html::element( 'input', $attrs );
+                       $buttons .= Html::element( 'input', $attrs ) . "\n";
                }
 
-               $html .= '</span>';
+               $html = Html::rawElement( 'span',
+                       array( 'class' => 'mw-htmlform-submit-buttons' ), "\n$buttons" ) . "\n";
+
+               // Buttons are top-level form elements in table and div layouts,
+               // but vform wants all elements inside divs to get spaced-out block
+               // styling.
+               if ( $this->mShowSubmit && $this->isVForm() ) {
+                       $html = Html::rawElement( 'div', null, "\n$html" ) . "\n";
+               }
 
                return $html;
        }
index dcdba1e..e6d316c 100644 (file)
@@ -14,6 +14,8 @@ abstract class HTMLFormField {
        protected $mID;
        protected $mClass = '';
        protected $mDefault;
+       protected $mOptions = false;
+       protected $mOptionsLabelsNotFromMessage = false;
 
        /**
         * @var bool If true will generate an empty div element with no label
@@ -508,6 +510,88 @@ abstract class HTMLFormField {
                return $ret;
        }
 
+       /**
+        * Given an array of msg-key => value mappings, returns an array with keys
+        * being the message texts. It also forces values to strings.
+        *
+        * @param array $options
+        * @return array
+        */
+       private function lookupOptionsKeys( $options ) {
+               $ret = array();
+               foreach ( $options as $key => $value ) {
+                       $key = $this->msg( $key )->plain();
+                       $ret[$key] = is_array( $value )
+                               ? $this->lookupOptionsKeys( $value )
+                               : strval( $value );
+               }
+               return $ret;
+       }
+
+       /**
+        * Recursively forces values in an array to strings, because issues arise
+        * with integer 0 as a value.
+        *
+        * @param array $array
+        * @return array
+        */
+       static function forceToStringRecursive( $array ) {
+               if ( is_array( $array ) ) {
+                       return array_map( array( __CLASS__, 'forceToStringRecursive' ), $array );
+               } else {
+                       return strval( $array );
+               }
+       }
+
+       /**
+        * Fetch the array of options from the field's parameters. In order, this
+        * checks 'options-messages', 'options', then 'options-message'.
+        *
+        * @return array|null Options array
+        */
+       public function getOptions() {
+               if ( $this->mOptions === false ) {
+                       if ( array_key_exists( 'options-messages', $this->mParams ) ) {
+                               $this->mOptions = $this->lookupOptionsKeys( $this->mParams['options-messages'] );
+                       } elseif ( array_key_exists( 'options', $this->mParams ) ) {
+                               $this->mOptionsLabelsNotFromMessage = true;
+                               $this->mOptions = self::forceToStringRecursive( $this->mParams['options'] );
+                       } elseif ( array_key_exists( 'options-message', $this->mParams ) ) {
+                               /** @todo This is copied from Xml::listDropDown(), deprecate/avoid duplication? */
+                               $message = $this->msg( $this->mParams['options-message'] )->inContentLanguage()->plain();
+
+                               $optgroup = false;
+                               $this->mOptions = array();
+                               foreach ( explode( "\n", $message ) as $option ) {
+                                       $value = trim( $option );
+                                       if ( $value == '' ) {
+                                               continue;
+                                       } elseif ( substr( $value, 0, 1 ) == '*' && substr( $value, 1, 1 ) != '*' ) {
+                                               # A new group is starting...
+                                               $value = trim( substr( $value, 1 ) );
+                                               $optgroup = $value;
+                                       } elseif ( substr( $value, 0, 2 ) == '**' ) {
+                                               # groupmember
+                                               $opt = trim( substr( $value, 2 ) );
+                                               if ( $optgroup === false ) {
+                                                       $this->mOptions[$opt] = $opt;
+                                               } else {
+                                                       $this->mOptions[$optgroup][$opt] = $opt;
+                                               }
+                                       } else {
+                                               # groupless reason list
+                                               $optgroup = false;
+                                               $this->mOptions[$option] = $option;
+                                       }
+                               }
+                       } else {
+                               $this->mOptions = null;
+                       }
+               }
+
+               return $this->mOptions;
+       }
+
        /**
         * flatten an array of options to a single array, for instance,
         * a set of "<options>" inside "<optgroups>".
index 09576d4..3cf3188 100644 (file)
@@ -17,7 +17,7 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
 
                # If all options are valid, array_intersect of the valid options
                # and the provided options will return the provided options.
-               $validOptions = HTMLFormField::flattenOptions( $this->mParams['options'] );
+               $validOptions = HTMLFormField::flattenOptions( $this->getOptions() );
 
                $validValues = array_intersect( $value, $validOptions );
                if ( count( $validValues ) == count( $value ) ) {
@@ -28,7 +28,8 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
        }
 
        function getInputHTML( $value ) {
-               $html = $this->formatOptions( $this->mParams['options'], $value );
+               $value = HTMLFormField::forceToStringRecursive( $value );
+               $html = $this->formatOptions( $this->getOptions(), $value );
 
                return $html;
        }
@@ -37,6 +38,7 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
                $html = '';
 
                $attribs = $this->getAttributes( array( 'disabled', 'tabindex' ) );
+               $elementFunc = array( 'Html', $this->mOptionsLabelsNotFromMessage ? 'rawElement' : 'element' );
 
                foreach ( $options as $label => $info ) {
                        if ( is_array( $info ) ) {
@@ -50,7 +52,7 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
                                        in_array( $info, $value, true ),
                                        $attribs + $thisAttribs
                                );
-                               $checkbox .= '&#160;' . Html::rawElement(
+                               $checkbox .= '&#160;' . call_user_func( $elementFunc,
                                        'label',
                                        array( 'for' => "{$this->mID}-$info" ),
                                        $label
@@ -102,11 +104,12 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
        }
 
        function filterDataForSubmit( $data ) {
-               $options = HTMLFormField::flattenOptions( $this->mParams['options'] );
+               $data = HTMLFormField::forceToStringRecursive( $data );
+               $options = HTMLFormField::flattenOptions( $this->getOptions() );
 
                $res = array();
                foreach ( $options as $opt ) {
-                       $res["$opt"] = in_array( $opt, $data );
+                       $res["$opt"] = in_array( $opt, $data, true );
                }
 
                return $res;
index f206ed6..c52f0a8 100644 (file)
@@ -15,9 +15,9 @@ class HTMLRadioField extends HTMLFormField {
                        return false;
                }
 
-               $validOptions = HTMLFormField::flattenOptions( $this->mParams['options'] );
+               $validOptions = HTMLFormField::flattenOptions( $this->getOptions() );
 
-               if ( in_array( $value, $validOptions ) ) {
+               if ( in_array( strval( $value ), $validOptions, true ) ) {
                        return true;
                } else {
                        return $this->msg( 'htmlform-select-badoption' )->parse();
@@ -33,7 +33,7 @@ class HTMLRadioField extends HTMLFormField {
         * @return String
         */
        function getInputHTML( $value ) {
-               $html = $this->formatOptions( $this->mParams['options'], $value );
+               $html = $this->formatOptions( $this->getOptions(), strval( $value ) );
 
                return $html;
        }
@@ -42,6 +42,7 @@ class HTMLRadioField extends HTMLFormField {
                $html = '';
 
                $attribs = $this->getAttributes( array( 'disabled', 'tabindex' ) );
+               $elementFunc = array( 'Html', $this->mOptionsLabelsNotFromMessage ? 'rawElement' : 'element' );
 
                # @todo Should this produce an unordered list perhaps?
                foreach ( $options as $label => $info ) {
@@ -50,8 +51,8 @@ class HTMLRadioField extends HTMLFormField {
                                $html .= $this->formatOptions( $info, $value );
                        } else {
                                $id = Sanitizer::escapeId( $this->mID . "-$info" );
-                               $radio = Xml::radio( $this->mName, $info, $info == $value, $attribs + array( 'id' => $id ) );
-                               $radio .= '&#160;' . Html::rawElement( 'label', array( 'for' => $id ), $label );
+                               $radio = Xml::radio( $this->mName, $info, $info === $value, $attribs + array( 'id' => $id ) );
+                               $radio .= '&#160;' . call_user_func( $elementFunc, 'label', array( 'for' => $id ), $label );
 
                                $html .= ' ' . Html::rawElement(
                                        'div',
index 044670d..564927f 100644 (file)
@@ -19,63 +19,17 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
                        $params['other'] = null;
                }
 
-               if ( array_key_exists( 'options', $params ) ) {
-                       # Options array already specified
-               } elseif ( array_key_exists( 'options-message', $params ) ) {
-                       # Generate options array from a system message
-                       $params['options'] =
-                               self::parseMessage( wfMessage( $params['options-message'] )->inContentLanguage()->plain(),
-                                       $params['other'] );
-               } else {
-                       # Sulk
-                       throw new MWException( 'HTMLSelectAndOtherField called without any options' );
-               }
-               $this->mFlatOptions = self::flattenOptions( $params['options'] );
-
                parent::__construct( $params );
-       }
 
-       /**
-        * Build a drop-down box from a textual list.
-        *
-        * @param string $string message text
-        * @param string $otherName name of "other reason" option
-        *
-        * @return Array
-        * @todo This is copied from Xml::listDropDown(), deprecate/avoid duplication?
-        */
-       public static function parseMessage( $string, $otherName = null ) {
-               if ( $otherName === null ) {
-                       $otherName = wfMessage( 'htmlform-selectorother-other' )->plain();
+               if ( $this->getOptions() === null ) {
+                       # Sulk
+                       throw new MWException( 'HTMLSelectAndOtherField called without any options' );
                }
-
-               $optgroup = false;
-               $options = array( $otherName => 'other' );
-
-               foreach ( explode( "\n", $string ) as $option ) {
-                       $value = trim( $option );
-                       if ( $value == '' ) {
-                               continue;
-                       } elseif ( substr( $value, 0, 1 ) == '*' && substr( $value, 1, 1 ) != '*' ) {
-                               # A new group is starting...
-                               $value = trim( substr( $value, 1 ) );
-                               $optgroup = $value;
-                       } elseif ( substr( $value, 0, 2 ) == '**' ) {
-                               # groupmember
-                               $opt = trim( substr( $value, 2 ) );
-                               if ( $optgroup === false ) {
-                                       $options[$opt] = $opt;
-                               } else {
-                                       $options[$optgroup][$opt] = $opt;
-                               }
-                       } else {
-                               # groupless reason list
-                               $optgroup = false;
-                               $options[$option] = $option;
-                       }
+               if ( !in_array( 'other', $this->mOptions, true ) ) {
+                       $this->mOptions[$params['other']] = 'other';
                }
+               $this->mFlatOptions = self::flattenOptions( $this->getOptions() );
 
-               return $options;
        }
 
        function getInputHTML( $value ) {
@@ -118,7 +72,7 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
 
                        if ( $list == 'other' ) {
                                $final = $text;
-                       } elseif ( !in_array( $list, $this->mFlatOptions ) ) {
+                       } elseif ( !in_array( $list, $this->mFlatOptions, true ) ) {
                                # User has spoofed the select form to give an option which wasn't
                                # in the original offer.  Sulk...
                                $final = $text;
index 9d719f6..c32b445 100644 (file)
@@ -11,9 +11,9 @@ class HTMLSelectField extends HTMLFormField {
                        return $p;
                }
 
-               $validOptions = HTMLFormField::flattenOptions( $this->mParams['options'] );
+               $validOptions = HTMLFormField::flattenOptions( $this->getOptions() );
 
-               if ( in_array( $value, $validOptions ) ) {
+               if ( in_array( strval( $value ), $validOptions, true ) ) {
                        return true;
                } else {
                        return $this->msg( 'htmlform-select-badoption' )->parse();
@@ -23,16 +23,6 @@ class HTMLSelectField extends HTMLFormField {
        function getInputHTML( $value ) {
                $select = new XmlSelect( $this->mName, $this->mID, strval( $value ) );
 
-               # If one of the options' 'name' is int(0), it is automatically selected.
-               # because PHP sucks and thinks int(0) == 'some string'.
-               # Working around this by forcing all of them to strings.
-               foreach ( $this->mParams['options'] as &$opt ) {
-                       if ( is_int( $opt ) ) {
-                               $opt = strval( $opt );
-                       }
-               }
-               unset( $opt ); # PHP keeps $opt around as a reference, which is a bit scary
-
                if ( !empty( $this->mParams['disabled'] ) ) {
                        $select->setAttribute( 'disabled', 'disabled' );
                }
@@ -45,7 +35,7 @@ class HTMLSelectField extends HTMLFormField {
                        $select->setAttribute( 'class', $this->mClass );
                }
 
-               $select->addOptions( $this->mParams['options'] );
+               $select->addOptions( $this->getOptions() );
 
                return $select->getHTML();
        }
index 08be435..e8bcb5b 100644 (file)
@@ -5,38 +5,32 @@
  */
 class HTMLSelectOrOtherField extends HTMLTextField {
        function __construct( $params ) {
-               if ( !in_array( 'other', $params['options'], true ) ) {
+               parent::__construct( $params );
+               $this->getOptions();
+               if ( !in_array( 'other', $this->mOptions, true ) ) {
                        $msg =
                                isset( $params['other'] )
                                        ? $params['other']
                                        : wfMessage( 'htmlform-selectorother-other' )->text();
-                       $params['options'][$msg] = 'other';
+                       $this->mOptions[$msg] = 'other';
                }
 
-               parent::__construct( $params );
-       }
-
-       static function forceToStringRecursive( $array ) {
-               if ( is_array( $array ) ) {
-                       return array_map( array( __CLASS__, 'forceToStringRecursive' ), $array );
-               } else {
-                       return strval( $array );
-               }
        }
 
        function getInputHTML( $value ) {
                $valInSelect = false;
 
                if ( $value !== false ) {
-                       $valInSelect = in_array( $value, HTMLFormField::flattenOptions( $this->mParams['options'] ) );
+                       $value = strval( $value );
+                       $valInSelect = in_array(
+                               $value, HTMLFormField::flattenOptions( $this->getOptions() ), true
+                       );
                }
 
                $selected = $valInSelect ? $value : 'other';
 
-               $opts = self::forceToStringRecursive( $this->mParams['options'] );
-
                $select = new XmlSelect( $this->mName, $this->mID, $selected );
-               $select->addOptions( $opts );
+               $select->addOptions( $this->getOptions() );
 
                $select->setAttribute( 'class', 'mw-htmlform-select-or-other' );
 
@@ -76,7 +70,7 @@ class HTMLSelectOrOtherField extends HTMLTextField {
                if ( $request->getCheck( $this->mName ) ) {
                        $val = $request->getText( $this->mName );
 
-                       if ( $val == 'other' ) {
+                       if ( $val === 'other' ) {
                                $val = $request->getText( $this->mName . '-other' );
                        }
 
index 57f0a72..e584d88 100644 (file)
@@ -43,9 +43,6 @@ class HTMLTextField extends HTMLFormField {
                # is essentially just a clone of this one.
                if ( isset( $this->mParams['type'] ) ) {
                        switch ( $this->mParams['type'] ) {
-                               case 'email':
-                                       $attribs['type'] = 'email';
-                                       break;
                                case 'int':
                                        $attribs['type'] = 'number';
                                        break;
@@ -54,8 +51,10 @@ class HTMLTextField extends HTMLFormField {
                                        $attribs['step'] = 'any';
                                        break;
                                # Pass through
+                               case 'email':
                                case 'password':
                                case 'file':
+                               case 'url':
                                        $attribs['type'] = $this->mParams['type'];
                                        break;
                        }
index 6d3819c..3250ff8 100644 (file)
@@ -62,7 +62,7 @@ class InstallDocFormatter {
        }
 
        protected function replaceConfigLinks( $matches ) {
-               return '<span class="config-plainlink">[http://www.mediawiki.org/wiki/Manual:' .
+               return '<span class="config-plainlink">[https://www.mediawiki.org/wiki/Manual:' .
                        $matches[1] . ' ' . $matches[1] . ']</span>';
        }
 }
diff --git a/includes/installer/Installer.i18n.php b/includes/installer/Installer.i18n.php
deleted file mode 100644 (file)
index 892fb2a..0000000
+++ /dev/null
@@ -1,21548 +0,0 @@
-<?php
-/**
- * Internationalization file for the install/upgrade process. None of the
- * messages used here are loaded during normal operations, only during
- * install and upgrade. So you should not put normal messages here.
- *
- * @file
- * @ingroup Deployment
- */
-
-$messages = array();
-
-/** English */
-$messages['en'] = array(
-       'config-desc'                     => 'The installer for MediaWiki',
-       'config-title'                    => 'MediaWiki $1 installation',
-       'config-information'              => 'Information',
-       'config-localsettings-upgrade'    => "A <code>LocalSettings.php</code> file has been detected.
-To upgrade this installation, please enter the value of <code>\$wgUpgradeKey</code> in the box below.
-You will find it in <code>LocalSettings.php</code>.",
-       'config-localsettings-cli-upgrade'    => 'A <code>LocalSettings.php</code> file has been detected.
-To upgrade this installation, please run <code>update.php</code> instead',
-       'config-localsettings-key'        => 'Upgrade key:',
-       'config-localsettings-badkey'     => 'The key you provided is incorrect.',
-       'config-upgrade-key-missing'      => 'An existing installation of MediaWiki has been detected.
-To upgrade this installation, please put the following line at the bottom of your <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => 'The existing <code>LocalSettings.php</code> appears to be incomplete.
-The $1 variable is not set.
-Please change <code>LocalSettings.php</code> so that this variable is set, and click "{{int:Config-continue}}".',
-       'config-localsettings-connection-error' => 'An error was encountered when connecting to the database using the settings specified in <code>LocalSettings.php</code> or <code>AdminSettings.php</code>. Please fix these settings and try again.
-
-$1',
-       'config-session-error'            => 'Error starting session: $1',
-       'config-session-expired'          => 'Your session data seems to have expired.
-Sessions are configured for a lifetime of $1.
-You can increase this by setting <code>session.gc_maxlifetime</code> in php.ini.
-Restart the installation process.',
-       'config-no-session'               => 'Your session data was lost!
-Check your php.ini and make sure <code>session.save_path</code> is set to an appropriate directory.',
-       'config-your-language'            => 'Your language:',
-       'config-your-language-help'       => 'Select a language to use during the installation process.',
-       'config-wiki-language'            => 'Wiki language:',
-       'config-wiki-language-help'       => 'Select the language that the wiki will predominantly be written in.',
-       'config-back'                     => '← Back',
-       'config-continue'                 => 'Continue →',
-       'config-page-language'            => 'Language',
-       'config-page-welcome'             => 'Welcome to MediaWiki!',
-       'config-page-dbconnect'           => 'Connect to database',
-       'config-page-upgrade'             => 'Upgrade existing installation',
-       'config-page-dbsettings'          => 'Database settings',
-       'config-page-name'                => 'Name',
-       'config-page-options'             => 'Options',
-       'config-page-install'             => 'Install',
-       'config-page-complete'            => 'Complete!',
-       'config-page-restart'             => 'Restart installation',
-       'config-page-readme'              => 'Read me',
-       'config-page-releasenotes'        => 'Release notes',
-       'config-page-copying'             => 'Copying',
-       'config-page-upgradedoc'          => 'Upgrading',
-       'config-page-existingwiki'        => 'Existing wiki',
-       'config-help-restart'             => 'Do you want to clear all saved data that you have entered and restart the installation process?',
-       'config-restart'                  => 'Yes, restart it',
-       'config-welcome'                  => "=== Environmental checks ===
-Basic checks will now be performed to see if this environment is suitable for MediaWiki installation.
-Remember to include this information if you seek support on how to complete the installation.",
-       'config-copyright'                => "=== Copyright and Terms ===
-
-$1
-
-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 <strong>without any warranty</strong>; without even the implied warranty of <strong>merchantability</strong> or <strong>fitness for a particular purpose</strong>.
-See the GNU General Public License for more details.
-
-You should have received <doclink href=Copying>a copy of the GNU General Public License</doclink> along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, or [http://www.gnu.org/copyleft/gpl.html read it online].",
-       'config-sidebar'                  => "* [//www.mediawiki.org MediaWiki home]
-* [//www.mediawiki.org/wiki/Help:Contents User's Guide]
-* [//www.mediawiki.org/wiki/Manual:Contents Administrator's Guide]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]
-----
-* <doclink href=Readme>Read me</doclink>
-* <doclink href=ReleaseNotes>Release notes</doclink>
-* <doclink href=Copying>Copying</doclink>
-* <doclink href=UpgradeDoc>Upgrading</doclink>",
-       'config-env-good'                 => 'The environment has been checked.
-You can install MediaWiki.',
-       'config-env-bad'                  => 'The environment has been checked.
-You cannot install MediaWiki.',
-       'config-env-php'                  => 'PHP $1 is installed.',
-       'config-env-php-toolow'           => 'PHP $1 is installed.
-However, MediaWiki requires PHP $2 or higher.',
-       'config-unicode-using-utf8'       => 'Using Brion Vibber\'s utf8_normalize.so for Unicode normalization.',
-       'config-unicode-using-intl'       => 'Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalization.',
-       'config-unicode-pure-php-warning' => "<strong>Warning:</strong> The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalization, falling back to slow pure-PHP implementation.
-If you run a high-traffic site, you should read a little on [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode normalization].",
-       'config-unicode-update-warning'   => "<strong>Warning:</strong> The installed version of the Unicode normalization wrapper uses an older version of [http://site.icu-project.org/ the ICU project's] library.
-You should [//www.mediawiki.org/wiki/Unicode_normalization_considerations upgrade] if you are at all concerned about using Unicode.",
-       'config-no-db'                    => 'Could not find a suitable database driver! You need to install a database driver for PHP.
-The following database types are supported: $1.
-
-If you compiled PHP yourself, reconfigure it with a database client enabled, for example, using <code>./configure --with-mysqli</code>.
-If you installed PHP from a Debian or Ubuntu package, then you also need to install, for example, the <code>php5-mysql</code> package.',
-       'config-outdated-sqlite'          => "<strong>Warning:</strong> you have SQLite $1, which is lower than minimum required version $2. SQLite will be unavailable.",
-       'config-no-fts3'                  => "<strong>Warning:</strong> SQLite is compiled without the [//sqlite.org/fts3.html FTS3 module], search features will be unavailable on this backend.",
-       'config-register-globals'         => "<strong>Warning: PHP's <code>[http://php.net/register_globals register_globals]</code> option is enabled.
-Disable it if you can.</strong>
-MediaWiki will work, but your server is exposed to potential security vulnerabilities.",
-       'config-magic-quotes-runtime'     => "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is active!'</strong>
-This option corrupts data input unpredictably.
-You cannot install or use MediaWiki unless this option is disabled.",
-       'config-magic-quotes-sybase'      => "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] is active!</strong>
-This option corrupts data input unpredictably.
-You cannot install or use MediaWiki unless this option is disabled.",
-       'config-mbstring'                 => "<strong>Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is active!</strong>
-This option causes errors and may corrupt data unpredictably.
-You cannot install or use MediaWiki unless this option is disabled.",
-       'config-safe-mode'                => "<strong>Warning:</strong> PHP's [http://www.php.net/features.safe-mode safe mode] is active.
-It may cause problems, particularly if using file uploads and <code>math</code> support.",
-       'config-xml-bad'                  => "PHP's XML module is missing.
-MediaWiki requires functions in this module and will not work in this configuration.
-If you're running Mandrake, install the php-xml package.",
-       'config-pcre-old'                 => "<strong>Fatal:</strong> PCRE $1 or later is required.
-Your PHP binary is linked with PCRE $2.
-[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE More information].",
-       'config-pcre-no-utf8'             => "<strong>Fatal:</strong> PHP's PCRE module seems to be compiled without PCRE_UTF8 support.
-MediaWiki requires UTF-8 support to function correctly.",
-       'config-memory-raised'            => "PHP's <code>memory_limit</code> is $1, raised to $2.",
-       'config-memory-bad'               => "<strong>Warning:</strong> PHP's <code>memory_limit</code> is $1.
-This is probably too low.
-The installation may fail!",
-       'config-ctype'                    => "<strong>Fatal:</strong> PHP must be compiled with support for the [http://www.php.net/manual/en/ctype.installation.php Ctype extension].",
-       'config-json'                     => "<strong>Fatal:</strong> PHP was compiled without JSON support.
-You must install either the PHP JSON extension or the [http://pecl.php.net/package/jsonc PECL jsonc] extension before installing MediaWiki.
-* The PHP extension is included in Red Hat Enterprise Linux (CentOS) 5 and 6, though must be enabled in <code>/etc/php.ini</code> or <code>/etc/php.d/json.ini</code>.
-* Some Linux distributions released after May 2013 omit the PHP extension, instead packaging the PECL extension as <code>php5-json</code> or <code>php-pecl-jsonc</code>.",
-       'config-xcache'                   => '[http://xcache.lighttpd.net/ XCache] is installed',
-       'config-apc'                      => '[http://www.php.net/apc APC] is installed',
-       'config-wincache'                 => '[http://www.iis.net/download/WinCacheForPhp WinCache] is installed',
-       'config-no-cache'                 => "<strong>Warning:</strong> Could not find [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] or [http://www.iis.net/download/WinCacheForPhp WinCache].
-Object caching is not enabled.",
-       'config-mod-security'             => "<strong>Warning:</strong> Your web server has [http://modsecurity.org/ mod_security] enabled. If misconfigured, it can cause problems for MediaWiki or other software that allows users to post arbitrary content.
-Refer to [http://modsecurity.org/documentation/ mod_security documentation] or contact your host's support if you encounter random errors.",
-       'config-diff3-bad'                => 'GNU diff3 not found.',
-       'config-git'                      => 'Found the Git version control software: <code>$1</code>.',
-       'config-git-bad'                  => 'Git version control software not found.',
-       'config-imagemagick'              => 'Found ImageMagick: <code>$1</code>.
-Image thumbnailing will be enabled if you enable uploads.',
-       'config-gd'                       => 'Found GD graphics library built-in.
-Image thumbnailing will be enabled if you enable uploads.',
-       'config-no-scaling'               => 'Could not find GD library or ImageMagick.
-Image thumbnailing will be disabled.',
-       'config-no-uri'                   => "<strong>Error:</strong> Could not determine the current URI.
-Installation aborted.",
-       'config-no-cli-uri'               => "<strong>Warning:</strong> No --scriptpath specified, using default: <code>$1</code>.",
-       'config-using-server'             => 'Using server name "<nowiki>$1</nowiki>".',
-       'config-using-uri'                => 'Using server URL "<nowiki>$1$2</nowiki>".',
-       'config-uploads-not-safe'         => "<strong>Warning:</strong> Your default directory for uploads <code>$1</code> is vulnerable to arbitrary scripts execution.
-Although MediaWiki checks all uploaded files for security threats, it is highly recommended to [//www.mediawiki.org/wiki/Manual:Security#Upload_security close this security vulnerability] before enabling uploads.",
-       'config-no-cli-uploads-check'     => "<strong>Warning:</strong> Your default directory for uploads (<code>$1</code>) is not checked for vulnerability
-to arbitrary script execution during the CLI install.",
-       'config-brokenlibxml'             => 'Your system has a combination of PHP and libxml2 versions that is buggy and can cause hidden data corruption in MediaWiki and other web applications.
-Upgrade to libxml2 2.7.3 or later ([https://bugs.php.net/bug.php?id=45996 bug filed with PHP]).
-Installation aborted.',
-       'config-suhosin-max-value-length' => "Suhosin is installed and limits the GET parameter <code>length</code> to $1 bytes.
-MediaWiki's ResourceLoader component will work around this limit, but that will degrade performance.
-If at all possible, you should set <code>suhosin.get.max_value_length</code> to 1024 or higher in <code>php.ini</code>, and set <code>\$wgResourceLoaderMaxQueryLength</code> to the same value in <code>LocalSettings.php</code>.",
-       'config-db-type'                  => 'Database type:',
-       'config-db-host'                  => 'Database host:',
-       'config-db-host-help'             => 'If your database server is on different server, enter the host name or IP address here.
-
-If you are using shared web hosting, your hosting provider should give you the correct host name in their documentation.
-
-If you are installing on a Windows server and using MySQL, using "localhost" may not work for the server name. If it does not, try "127.0.0.1" for the local IP address.
-
-If you are using PostgreSQL, leave this field blank to connect via a Unix socket.',
-       'config-db-host-oracle'           => 'Database TNS:',
-       'config-db-host-oracle-help'      => 'Enter a valid [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; a tnsnames.ora file must be visible to this installation.<br />If you are using client libraries 10g or newer you can also use the [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] naming method.',
-       'config-db-wiki-settings'         => 'Identify this wiki',
-       'config-db-name'                  => 'Database name:',
-       'config-db-name-help'             => 'Choose a name that identifies your wiki.
-It should not contain spaces.
-
-If you are using shared web hosting, your hosting provider will either give you a specific database name to use or let you create databases via a control panel.',
-       'config-db-name-oracle'           => 'Database schema:',
-       'config-db-account-oracle-warn' => "There are three supported scenarios for installing Oracle as database backend:
-
-If you wish to create database account as part of the installation process, please supply an account with SYSDBA role as database account for installation and specify the desired credentials for the web-access account, otherwise you can either create the web-access account manually and supply only that account (if it has required permissions to create the schema objects) or supply two different accounts, one with create privileges and a restricted one for web access.
-
-Script for creating an account with required privileges can be found in \"maintenance/oracle/\" directory of this installation. Keep in mind that using a restricted account will disable all maintenance capabilities with the default account.",
-       'config-db-install-account'       => 'User account for installation',
-       'config-db-username'              => 'Database username:',
-       'config-db-password'              => 'Database password:',
-       'config-db-password-empty'        => 'Please enter a password for the new database user: $1.
-While it may be possible to create users with no passwords, it is not secure.',
-       'config-db-install-username'      => 'Enter the username that will be used to connect to the database during the installation process.
-This is not the username of the MediaWiki account; this is the username for your database.',
-       'config-db-install-password'      => 'Enter the password that will be used to connect to the database during the installation process.
-This is not the password for the MediaWiki account; this is the password for your database.',
-       'config-db-install-help'          => 'Enter the username and password that will be used to connect to the database during the installation process.',
-       'config-db-account-lock'          => 'Use the same username and password during normal operation',
-       'config-db-wiki-account'          => 'User account for normal operation',
-       'config-db-wiki-help'             => 'Enter the username and password that will be used to connect to the database during normal wiki operation.
-If the account does not exist, and the installation account has sufficient privileges, this user account will be created with the minimum privileges required to operate the wiki.',
-       'config-db-prefix'                => 'Database table prefix:',
-       'config-db-prefix-help'           => 'If you need to share one database between multiple wikis, or between MediaWiki and another web application, you may choose to add a prefix to all the table names to avoid conflicts.
-Do not use spaces.
-
-This field is usually left empty.',
-       'config-db-charset'               => 'Database character set',
-       '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-charset-help'             => "<strong>Warning:</strong> If you use <strong>backwards-compatible UTF-8</strong> on MySQL 4.1+, and subsequently back up the database with <code>mysqldump</code>, it may destroy all non-ASCII characters, irreversibly corrupting your backups!
-
-In <strong>binary mode</strong>, MediaWiki stores UTF-8 text to the database in binary fields.
-This is more efficient than MySQL's UTF-8 mode, and allows you to use the full range of Unicode characters.
-In <strong>UTF-8 mode</strong>, MySQL will know what character set your data is in, and can present and convert it appropriately,
-but it will not let you store characters above the [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
-       'config-mysql-old'                => 'MySQL $1 or later is required. You have $2.',
-       'config-db-port'                  => 'Database port:',
-       'config-db-schema'                => 'Schema for MediaWiki:',
-       'config-db-schema-help'           => 'This schema will usually be fine.
-Only change it if you know you need to.',
-       'config-pg-test-error'            => "Cannot connect to database <strong>$1</strong>: $2",
-       'config-sqlite-dir'               => 'SQLite data directory:',
-       'config-sqlite-dir-help'          => "SQLite stores all data in a single file.
-
-The directory you provide must be writable by the webserver during installation.
-
-It should <strong>not</strong> be accessible via the web, this is why we're not putting it where your PHP files are.
-
-The installer will write a <code>.htaccess</code> file along with it, but if that fails someone can gain access to your raw database.
-That includes raw user data (email addresses, hashed passwords) as well as deleted revisions and other restricted data on the wiki.
-
-Consider putting the database somewhere else altogether, for example in <code>/var/lib/mediawiki/yourwiki</code>.",
-       'config-oracle-def-ts'            => 'Default tablespace:',
-       'config-oracle-temp-ts'           => 'Temporary tablespace:',
-       'config-type-mysql'               => 'MySQL (or compatible)',
-       'config-type-postgres'            => 'PostgreSQL',
-       'config-type-sqlite'              => 'SQLite',
-       'config-type-oracle'              => 'Oracle',
-       'config-support-info'             => 'MediaWiki supports the following database systems:
-
-$1
-
-If you do not see the database system you are trying to use listed below, then follow the instructions linked above to enable support.',
-       'config-dbsupport-mysql'          => '* [{{int:version-db-mysql-url}} MySQL] is the primary target for MediaWiki and is best supported. MediaWiki also works with [{{int:version-db-mariadb-url}} MariaDB] and [{{int:version-db-percona-url}} Percona Server], which are MySQL compatible. ([http://www.php.net/manual/en/mysqli.installation.php How to compile PHP with MySQL support])',
-       'config-dbsupport-postgres'       => '* [{{int:version-db-postgres-url}} PostgreSQL] is a popular open source database system as an alternative to MySQL. There may be some minor outstanding bugs, and it is not recommended for use in a production environment. ([http://www.php.net/manual/en/pgsql.installation.php How to compile PHP with PostgreSQL support])',
-       'config-dbsupport-sqlite'         => '* [{{int:version-db-sqlite-url}} SQLite] is a lightweight database system that is very well supported. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], uses PDO)',
-       'config-dbsupport-oracle'         => '* [{{int:version-db-oracle-url}} Oracle] is a commercial enterprise database. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])',
-       'config-header-mysql'             => 'MySQL settings',
-       'config-header-postgres'          => 'PostgreSQL settings',
-       'config-header-sqlite'            => 'SQLite settings',
-       'config-header-oracle'            => 'Oracle settings',
-       'config-invalid-db-type'          => 'Invalid database type',
-       'config-missing-db-name'          => 'You must enter a value for "Database name"',
-       'config-missing-db-host'          => 'You must enter a value for "Database host"',
-       'config-missing-db-server-oracle' => 'You must enter a value for "Database TNS"',
-       'config-invalid-db-server-oracle' => 'Invalid database TNS "$1".
-Use either "TNS Name" or an "Easy Connect" string ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods])',
-       'config-invalid-db-name'          => 'Invalid database name "$1".
-Use only ASCII letters (a-z, A-Z), numbers (0-9), underscores (_) and hyphens (-).',
-       'config-invalid-db-prefix'        => 'Invalid database prefix "$1".
-Use only ASCII letters (a-z, A-Z), numbers (0-9), underscores (_) and hyphens (-).',
-       'config-connection-error'         => '$1.
-
-Check the host, username and password and try again.',
-       'config-invalid-schema'           => 'Invalid schema for MediaWiki "$1".
-Use only ASCII letters (a-z, A-Z), numbers (0-9) and underscores (_).',
-       'config-db-sys-create-oracle' => 'Installer only supports using a SYSDBA account for creating a new account.',
-       'config-db-sys-user-exists-oracle' => 'User account "$1" already exists. SYSDBA can only be used for creating of a new account!',
-       'config-postgres-old'             => 'PostgreSQL $1 or later is required. You have $2.',
-       'config-sqlite-name-help'         => 'Choose a name that identifies your wiki.
-Do not use spaces or hyphens.
-This will be used for the SQLite data file name.',
-       'config-sqlite-parent-unwritable-group' => 'Cannot create the data directory <code><nowiki>$1</nowiki></code>, because the parent directory <code><nowiki>$2</nowiki></code> is not writable by the webserver.
-
-The installer has determined the user your webserver is running as.
-Make the <code><nowiki>$3</nowiki></code> directory writable by it to continue.
-On a Unix/Linux system do:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Cannot create the data directory <code><nowiki>$1</nowiki></code>, because the parent directory <code><nowiki>$2</nowiki></code> is not writable by the webserver.
-
-The installer could not determine the user your webserver is running as.
-Make the <code><nowiki>$3</nowiki></code> directory globally writable by it (and others!) to continue.
-On a Unix/Linux system do:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error'       => 'Error creating the data directory "$1".
-Check the location and try again.',
-       'config-sqlite-dir-unwritable'    => 'Unable to write to the directory "$1".
-Change its permissions so that the webserver can write to it, and try again.',
-       'config-sqlite-connection-error'  => '$1.
-
-Check the data directory and database name below and try again.',
-       'config-sqlite-readonly'          => 'The file <code>$1</code> is not writeable.',
-       'config-sqlite-cant-create-db'    => 'Could not create database file <code>$1</code>.',
-       'config-sqlite-fts3-downgrade'    => 'PHP is missing FTS3 support, downgrading tables',
-       'config-can-upgrade'              => "There are MediaWiki tables in this database.
-To upgrade them to MediaWiki $1, click <strong>Continue</strong>.",
-       'config-upgrade-done'             => "Upgrade complete.
-
-You can now [$1 start using your wiki].
-
-If you want to regenerate your <code>LocalSettings.php</code> file, click the button below.
-This is <strong>not recommended</strong> unless you are having problems with your wiki.",
-       'config-upgrade-done-no-regenerate' => "Upgrade complete.
-
-You can now [$1 start using your wiki].",
-       'config-regenerate'               => 'Regenerate LocalSettings.php →',
-       'config-show-table-status'        => '<code>SHOW TABLE STATUS</code> query failed!',
-       'config-unknown-collation'        => "<strong>Warning:</strong> Database is using unrecognized collation.",
-       'config-db-web-account'           => 'Database account for web access',
-       'config-db-web-help'              => 'Select the username and password that the web server will use to connect to the database server, during ordinary operation of the wiki.',
-       'config-db-web-account-same'      => 'Use the same account as for installation',
-       'config-db-web-create'            => 'Create the account if it does not already exist',
-       'config-db-web-no-create-privs'   => 'The account you specified for installation does not have enough privileges to create an account.
-The account you specify here must already exist.',
-       'config-mysql-engine'             => 'Storage engine:',
-       'config-mysql-innodb'             => 'InnoDB',
-       'config-mysql-myisam'             => 'MyISAM',
-       'config-mysql-myisam-dep'         => "<strong>Warning:</strong> You have selected MyISAM as storage engine for MySQL, which is not recommended for use with MediaWiki, because:
-* it barely supports concurrency due to table locking
-* it is more prone to corruption than other engines
-* the MediaWiki codebase does not always handle MyISAM as it should
-
-If your MySQL installation supports InnoDB, it is highly recommended that you choose that instead.
-If your MySQL installation does not support InnoDB, maybe it's time for an upgrade.",
-       'config-mysql-only-myisam-dep'    => "<strong>Warning:</strong> MyISAM is the only available storage engine for MySQL on this machine, and this is not recommended for use with MediaWiki, because:
-* it barely supports concurrency due to table locking
-* it is more prone to corruption than other engines
-* the MediaWiki codebase does not always handle MyISAM as it should
-
-Your MySQL installation does not support InnoDB, maybe it's time for an upgrade.",
-       'config-mysql-engine-help'        => "<strong>InnoDB</strong> is almost always the best option, since it has good concurrency support.
-
-<strong>MyISAM</strong> may be faster in single-user or read-only installations.
-MyISAM databases tend to get corrupted more often than InnoDB databases.",
-       'config-mysql-charset'            => 'Database character set:',
-       'config-mysql-binary'             => 'Binary',
-       'config-mysql-utf8'               => 'UTF-8',
-       'config-mysql-charset-help'       => "In <strong>binary mode</strong>, MediaWiki stores UTF-8 text to the database in binary fields.
-This is more efficient than MySQL's UTF-8 mode, and allows you to use the full range of Unicode characters.
-
-In <strong>UTF-8 mode</strong>, MySQL will know what character set your data is in, and can present and convert it appropriately, but it will not let you store characters above the [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
-
-       'config-site-name'                => 'Name of wiki:',
-       'config-site-name-help'           => "This will appear in the title bar of the browser and in various other places.",
-       'config-site-name-blank'          => 'Enter a site name.',
-       'config-project-namespace'        => 'Project namespace:',
-       'config-ns-generic'               => 'Project',
-       'config-ns-site-name'             => 'Same as the wiki name: $1',
-       'config-ns-other'                 => 'Other (specify)',
-       '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.
-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.
-Specify a different project namespace.',
-       'config-admin-box'                => 'Administrator account',
-       'config-admin-name'               => 'Your username:',
-       'config-admin-password'           => 'Password:',
-       'config-admin-password-confirm'   => 'Password again:',
-       'config-admin-help'               => 'Enter your preferred username here, for example "Joe Bloggs".
-This is the name you will use to log in to the wiki.',
-       'config-admin-name-blank'         => 'Enter an administrator username.',
-       'config-admin-name-invalid'       => 'The specified username "<nowiki>$1</nowiki>" is invalid.
-Specify a different username.',
-       'config-admin-password-blank'     => 'Enter a password for the administrator account.',
-       'config-admin-password-same'      => 'The password must not be the same as the username.',
-       'config-admin-password-mismatch'  => 'The two passwords you entered do not match.',
-       'config-admin-email'              => 'Email address:',
-       'config-admin-email-help'         => 'Enter an email address here to allow you to receive email from other users on the wiki, reset your password, and be notified of changes to pages on your watchlist. You can leave this field empty.',
-       'config-admin-error-user'         => 'Internal error when creating an admin with the name "<nowiki>$1</nowiki>".',
-       'config-admin-error-password'     => 'Internal error when setting a password for the admin "<nowiki>$1</nowiki>": <pre>$2</pre>',
-       'config-admin-error-bademail'     => 'You have entered an invalid email address.',
-       'config-subscribe'                => 'Subscribe to the [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce release announcements mailing list].',
-       'config-subscribe-help'           => 'This is a low-volume mailing list used for release announcements, including important security announcements.
-You should subscribe to it and update your MediaWiki installation when new versions come out.',
-       'config-subscribe-noemail'        => 'You tried to subscribe to the release announcements mailing list without providing an email address.
-Please provide an email address if you wish to subscribe to the mailing list.',
-       'config-almost-done'              => 'You are almost done!
-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'             => 'Open wiki',
-       'config-profile-no-anon'          => 'Account creation required',
-       'config-profile-fishbowl'         => 'Authorized editors only',
-       'config-profile-private'          => 'Private wiki',
-       'config-profile-help'             => "Wikis work best when you let as many people edit them as possible.
-In MediaWiki, it is easy to review the recent changes, and to revert any damage that is done by naive or malicious users.
-
-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.
-
-The <strong>{{int:config-profile-wiki}}</strong> model allows anyone to edit, without even logging in.
-A wiki with <strong>{{int:config-profile-no-anon}}</strong> provides extra accountability, but may deter casual contributors.
-
-The <strong>{{int:config-profile-fishbowl}}</strong> scenario allows approved users to edit, but the public can view the pages, including history.
-A <strong>{{int:config-profile-private}}</strong> only allows approved users to view pages, with the same group allowed to edit.
-
-More complex user rights configurations are available after installation, see the [//www.mediawiki.org/wiki/Manual:User_rights relevant manual entry].",
-       'config-license'                  => 'Copyright and license:',
-       'config-license-none'             => 'No license footer',
-       'config-license-cc-by-sa'         => 'Creative Commons Attribution Share Alike',
-       'config-license-cc-by'            => 'Creative Commons Attribution',
-       'config-license-cc-by-nc-sa'      => 'Creative Commons Attribution Non-Commercial Share Alike',
-       'config-license-cc-0'             => 'Creative Commons Zero (Public Domain)',
-       'config-license-gfdl'             => 'GNU Free Documentation License 1.3 or later',
-       'config-license-pd'               => 'Public Domain',
-       'config-license-cc-choose'        => 'Select a custom Creative Commons license',
-       'config-license-help'             => "Many public wikis put all contributions under a [http://freedomdefined.org/Definition free license].
-This helps to create a sense of community ownership and encourages long-term contribution.
-It is not generally necessary for a private or corporate wiki.
-
-If you want to be able to use text from Wikipedia, and you want Wikipedia to be able to accept text copied from your wiki, you should choose <strong>Creative Commons Attribution Share Alike</strong>.
-
-Wikipedia previously used the GNU Free Documentation License.
-The GFDL is a valid license, but it is difficult to understand.
-It is also difficult to reuse content licensed under the GFDL.",
-       'config-email-settings'           => 'Email settings',
-       'config-enable-email'             => 'Enable outbound email',
-       'config-enable-email-help'        => "If you want email to work, [http://www.php.net/manual/en/mail.configuration.php PHP's mail settings] need to be configured correctly.
-If you do not want any email features, you can disable them here.",
-       'config-email-user'               => 'Enable user-to-user email',
-       'config-email-user-help'          => 'Allow all users to send each other email if they have enabled it in their preferences.',
-       'config-email-usertalk'           => 'Enable user talk page notification',
-       'config-email-usertalk-help'      => 'Allow users to receive notifications on user talk page changes, if they have enabled it in their preferences.',
-       'config-email-watchlist'          => 'Enable watchlist notification',
-       'config-email-watchlist-help'     => 'Allow users to receive notifications about their watched pages if they have enabled it in their preferences.',
-       'config-email-auth'               => 'Enable email authentication',
-       'config-email-auth-help'          => "If this option is enabled, users have to confirm their email address using a link sent to them whenever they set or change it.
-Only authenticated email addresses can receive emails from other users or change notification emails.
-Setting this option is <strong>recommended</strong> for public wikis because of potential abuse of the email features.",
-       'config-email-sender'             => 'Return email address:',
-       'config-email-sender-help'        => 'Enter the email address to use as the return address on outbound email.
-This is where bounces will be sent.
-Many mail servers require at least the domain name part to be valid.',
-       'config-upload-settings'          => 'Images and file uploads',
-       'config-upload-enable'            => 'Enable file uploads',
-       'config-upload-help'              => "File uploads potentially expose your server to security risks.
-For more information, read the [//www.mediawiki.org/wiki/Manual:Security security section] in the manual.
-
-To enable file uploads, change the mode on the <code>images</code> subdirectory under MediaWiki's root directory so that the web server can write to it.
-Then enable this option.",
-       'config-upload-deleted'           => 'Directory for deleted files:',
-       'config-upload-deleted-help'      => 'Choose a directory in which to archive deleted files.
-Ideally, this should not be accessible from the web.',
-       'config-logo'                     => 'Logo URL:',
-       'config-logo-help'                => "MediaWiki's default skin includes space for a 135x160 pixel logo above the sidebar menu.
-Upload an image of the appropriate size, and enter the URL here.
-
-You can use <code>\$wgStylePath</code> or <code>\$wgScriptPath</code> if your logo is relative to those paths.
-
-If you do not want a logo, leave this box blank.",
-       'config-instantcommons'           => 'Enable Instant Commons',
-       'config-instantcommons-help'      => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] is a feature that allows wikis to use images, sounds and other media found on the [//commons.wikimedia.org/ Wikimedia Commons] site.
-In order to do this, MediaWiki requires access to the Internet.
-
-For more information on this feature, including instructions on how to set it up for wikis other than the Wikimedia Commons, consult [//mediawiki.org/wiki/Manual:$wgForeignFileRepos the manual].',
-       'config-cc-error'                 => 'The Creative Commons license chooser gave no result.
-Enter the license name manually.',
-       'config-cc-again'                 => 'Pick again...',
-       'config-cc-not-chosen'            => 'Choose which Creative Commons license you want and click "proceed".',
-       'config-advanced-settings'        => 'Advanced configuration',
-       'config-cache-options'            => 'Settings for object caching:',
-       'config-cache-help'               => 'Object caching is used to improve the speed of MediaWiki by caching frequently used data.
-Medium to large sites are highly encouraged to enable this, and small sites will see benefits as well.',
-       'config-cache-none'               => 'No caching (no functionality is removed, but speed may be impacted on larger wiki sites)',
-       'config-cache-accel'              => 'PHP object caching (APC, XCache or WinCache)',
-       'config-cache-memcached'          => 'Use Memcached (requires additional setup and configuration)',
-       'config-memcached-servers'        => 'Memcached servers:',
-       'config-memcached-help'           => 'List of IP addresses to use for Memcached.
-Should specify one per line and specify the port to be used. For example:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers'     => 'You selected Memcached as your cache type but did not specify any servers.',
-       'config-memcache-badip'           => 'You have entered an invalid IP address for Memcached: $1.',
-       'config-memcache-noport'          => 'You did not specify a port to use for Memcached server: $1.
-If you do not know the port, the default is 11211.',
-       'config-memcache-badport'         => 'Memcached port numbers should be between $1 and $2.',
-       'config-extensions'               => 'Extensions',
-       'config-extensions-help'          => 'The extensions listed above were detected in your <code>./extensions</code> directory.
-
-They may require additional configuration, but you can enable them now.',
-       'config-install-alreadydone'      => "<strong>Warning:</strong> 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 "{{int:config-back}}".',
-       'config-install-step-done'        => 'done',
-       'config-install-step-failed'      => 'failed',
-       'config-install-extensions'       => 'Including extensions',
-       'config-install-database'         => 'Setting up database',
-       'config-install-schema'           => 'Creating schema',
-       'config-install-pg-schema-not-exist' => 'PostgreSQL schema does not exist.',
-       'config-install-pg-schema-failed' => 'Tables creation failed.
-Make sure that the user "$1" can write to the schema "$2".',
-       'config-install-pg-commit'        => 'Committing changes',
-       'config-install-pg-plpgsql'       => 'Checking for language PL/pgSQL',
-       'config-pg-no-plpgsql'            => 'You need to install the language PL/pgSQL in the database $1',
-       'config-pg-no-create-privs'       => 'The account you specified for installation does not have enough privileges to create an account.',
-       'config-pg-not-in-role'           => 'The account you specified for the web user already exists.
-The account you specified for installation is not a superuser and is not a member of the web user\'s role, so it is unable to create objects owned by the web user.
-
-MediaWiki currently requires that the tables be owned by the web user. Please specify another web account name, or click "back" and specify a suitably privileged install user.',
-       'config-install-user'             => 'Creating database user',
-       'config-install-user-alreadyexists' => 'User "$1" already exists',
-       'config-install-user-create-failed' => 'Creating user "$1" failed: $2',
-       'config-install-user-grant-failed'  => 'Granting permission to user "$1" failed: $2',
-       'config-install-user-missing'     => 'The specified user "$1" does not exist.',
-       'config-install-user-missing-create' => 'The specified user "$1" does not exist.
-Please click the "create account" checkbox below if you want to create it.',
-       'config-install-tables'           => 'Creating tables',
-       'config-install-tables-exist'     => "<strong>Warning:</strong> MediaWiki tables seem to already exist.
-Skipping creation.",
-       'config-install-tables-failed'    => "<strong>Error:</strong> Table creation failed with the following error: $1",
-       'config-install-interwiki'        => 'Populating default interwiki table',
-       'config-install-interwiki-list'   => 'Could not read file <code>interwiki.list</code>.',
-       'config-install-interwiki-exists' => "<strong>Warning:</strong> The interwiki table seems to already have entries.
-Skipping default list.",
-       'config-install-stats'            => 'Initializing statistics',
-       'config-install-keys'             => 'Generating secret keys',
-       'config-insecure-keys'            => "<strong>Warning:</strong> {{PLURAL:$2|A secure key|Secure keys}} ($1) generated during installation {{PLURAL:$2|is|are}} not completely safe. Consider changing {{PLURAL:$2|it|them}} manually.",
-       'config-install-sysop'            => 'Creating administrator user account',
-       'config-install-subscribe-fail'   => 'Unable to subscribe to mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'cURL is not installed and allow_url_fopen is not available.',
-       'config-install-mainpage'         => 'Creating main page with default content',
-       'config-install-extension-tables' => 'Creating tables for enabled extensions',
-       'config-install-mainpage-failed'  => 'Could not insert main page: $1',
-       'config-install-done'             => "<strong>Congratulations!</strong>
-You have successfully installed MediaWiki.
-
-The installer has generated a <code>LocalSettings.php</code> file.
-It contains all your configuration.
-
-You will need to download it and put it in the base of your wiki installation (the same directory as index.php). The download should have started automatically.
-
-If the download was not offered, or if you cancelled it, you can restart the download by clicking the link below:
-
-$3
-
-<strong>Note:</strong> If you do not do this now, this generated configuration file will not be available to you later if you exit the installation without downloading it.
-
-When that has been done, you can <strong>[$2 enter your wiki]</strong>.",
-       'config-download-localsettings' => 'Download <code>LocalSettings.php</code>',
-       'config-help' => 'help',
-       'config-nofile'     => 'File "$1" could not be found. Has it been deleted?',
-       'config-extension-link' => 'Did you know that your wiki supports [//www.mediawiki.org/wiki/Manual:Extensions extensions]?
-
-You can browse [//www.mediawiki.org/wiki/Category:Extensions_by_category extensions by category] or the [//www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] to see the full list of extensions.',
-       'mainpagetext'      => "<strong>MediaWiki has been successfully installed.</strong>",
-       'mainpagedocfooter' => "Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.
-
-== Getting started ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localise MediaWiki for your language]",
-);
-
-/** Message documentation (Message documentation)
- * @author Amire80
- * @author Dani
- * @author EugeneZelenko
- * @author Kghbln
- * @author McDutchie
- * @author Mormegil
- * @author Nemo bis
- * @author Nike
- * @author Platonides
- * @author Purodha
- * @author Raymond
- * @author SPQRobin
- * @author Shirayuki
- * @author Siebrand
- * @author Umherirrender
- * @author Waldir
- */
-$messages['qqq'] = array(
-       'config-desc' => 'Short description of the installer.',
-       'config-title' => 'Parameters:
-* $1 is the version of MediaWiki that is being installed.',
-       'config-information' => '{{Identical|Information}}',
-       'config-localsettings-upgrade' => '{{doc-important|Do not translate <code>LocalSettings.php</code> and <code>$wgUpgradeKey</code>.}}',
-       'config-localsettings-cli-upgrade' => '{{doc-important|Do not translate the <code>LocalSettings.php</code> and the <code>update.php</code> parts.}}',
-       'config-upgrade-key-missing' => 'Used in info box. Parameters:
-* $1 - the upgrade key, enclosed in <code><nowiki><pre></nowikI></code> tag.',
-       'config-localsettings-incomplete' => '{{doc-important|Do not translate <code>LocalSettings.php</code> and <code><nowiki>{{int:Config-continue}}</nowiki><code>.}}
-Parameters:
-* $1 - name of variable (any one of required variables or installer-specific global variables)',
-       'config-localsettings-connection-error' => '{{doc-important|Do not translate <code>LocalSettings.php</code> and <code>AdminSettings.php</code>.}}
-Used as error message. Parameters:
-* $1 - (probably empty string)',
-       'config-session-error' => 'Parameters:
-* $1 is the error that was encountered with the session.',
-       'config-session-expired' => 'Parameters:
-* $1 is the configured session lifetime.',
-       'config-no-session' => '{{doc-important|Do not translate <code>php.ini</code> and <code>session.save_path</code>.}}
-Used as error message.',
-       'config-back' => '{{Identical|Back}}',
-       'config-continue' => '{{Identical|Continue}}',
-       'config-page-language' => '{{Identical|Language}}',
-       'config-page-name' => '{{Identical|Name}}',
-       'config-page-options' => '{{Identical|Options}}',
-       'config-page-install' => '{{Identical|Install}}',
-       'config-page-complete' => '{{Identical|Complete}}',
-       'config-page-releasenotes' => '{{Identical|Release notes}}',
-       'config-page-copying' => 'This is a link to the full GPL text',
-       'config-restart' => 'Button text to confirm the installation procedure has to be restarted.',
-       'config-copyright' => 'This message follows {{msg-mw|config-env-good}}.
-
-Parameters:
-* $1 - copyright and author list',
-       'config-sidebar' => 'Maximum width for words is 24 characters. Only visible part of the translation counts to this limit.',
-       'config-env-php' => 'Parameters:
-* $1 - the version of PHP that has been installed
-See also:
-* {{msg-mw|config-env-php-toolow}}',
-       'config-env-php-toolow' => 'Parameters:
-* $1 - the version of PHP that has been installed
-* $2 - minimum PHP version number
-See also:
-* {{msg-mw|config-env-php}}',
-       'config-unicode-pure-php-warning' => 'PECL is the name of a group producing standard pieces of software for PHP, and intl is the name of their library handling some aspects of internationalization.',
-       'config-unicode-update-warning' => "ICU is a body producing standard software tools for support of Unicode and other internationalization aspects. This message warns the system administrator installing MediaWiki that the server's software is not up-to-date and MediaWiki will have problems handling some characters.",
-       'config-no-db' => '{{doc-important|Do not translate "<code>./configure --with-mysqli</code>" and "<code>php5-mysql</code>".}}
-Parameters:
-* $1 is comma separated list of database types supported by MediaWiki.',
-       'config-outdated-sqlite' => 'Used as warning. Parameters:
-* $1 - the version of SQLite that has been installed
-* $2 - minimum version',
-       'config-no-fts3' => 'A "[[:wikipedia:Front and back ends|backend]]" is a system or component that ordinary users don\'t interact with directly and don\'t need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are "system" or "service", or (depending on context and language) even leave it untranslated.',
-       'config-magic-quotes-runtime' => '{{Related|Config-fatal}}',
-       'config-magic-quotes-sybase' => '{{Related|Config-fatal}}',
-       '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-old' => 'Parameters:
-* $1 - minimum PCRE version number
-* $2 - the installed version of [[wikipedia:PCRE|PCRE]]
-{{Related|Config-fatal}}',
-       '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.',
-       'config-memory-bad' => 'Parameters:
-* $1 is the configured <code>memory_limit</code>.',
-       'config-ctype' => 'Message if support for [http://www.php.net/manual/en/ctype.installation.php Ctype] is missing from PHP',
-       'config-json' => 'Message if support for [[wikipedia:JSON|JSON]] is missing from PHP.
-* "[[wikipedia:Red Hat Enterprise Linux|Red Hat Enterprise Linux]]" (RHEL) and "[[wikipedia:CentOS|CentOS]]" refer to two almost-identical Linux distributions. "5 and 6" refers to version 5 or 6 of either distribution. Because RHEL 7 likely will not include the PHP extension, do not translate as "5 or newer".
-* "The [http://www.php.net/json PHP extension]" is the JSON extension included with PHP 5.2 and newer.
-* "The [http://pecl.php.net/package/jsonc PECL extension]" is based on the PHP extension, though excludes code some distributions have found unacceptable (see [[bugzilla:47431]]).',
-       'config-xcache' => 'Message indicates if this program is available',
-       'config-apc' => 'Message indicates if this program is available',
-       'config-wincache' => 'Message indicates if this program is available',
-       'config-git' => 'Message if Git version control software is available.
-Parameter:
-* $1 is the <code>Git</code> executable file name.',
-       'config-git-bad' => 'Message if Git version control software is not found.',
-       'config-imagemagick' => '$1 is ImageMagick\'s <code>convert</code> executable file name.
-
-Add dir="ltr" to the <nowiki><code></nowiki> for right-to-left languages.',
-       'config-no-cli-uri' => 'Parameters:
-* $1 is the default value for scriptpath.',
-       'config-using-server' => 'Used as a part of environment check result. Parameters:
-* $1 - default server name',
-       'config-using-uri' => 'Used as a part of environment check result. Parameters:
-* $1 - server name
-* $2 - script path',
-       'config-uploads-not-safe' => 'Used as a part of environment check result. Parameters:
-* $1 - name of directory for images: <code>$IP/images/</code>',
-       'config-no-cli-uploads-check' => 'CLI = [[w:Command-line interface|command-line interface]] (i.e. the installer runs as a command-line script, not using HTML interface via an internet browser)',
-       'config-using531' => 'Used as error message. Parameters:
-* $1 - the version of PHP that has been installed',
-       'config-suhosin-max-value-length' => '{{doc-important|Do not translate "length", "suhosin.get.max_value_length", "php.ini", "$wgResourceLoaderMaxQueryLength" and "LocalSettings.php".}}
-Message shown when PHP parameter <code>suhosin.get.max_value_length</code> is between 0 and 1023 (that max value is hard set in MediaWiki software).',
-       'config-db-host-help' => '{{doc-singularthey}}',
-       'config-db-host-oracle' => 'TNS = [[:wikipedia:Transparent Network Substrate|Transparent Network Substrate]] (<== wikipedia link)',
-       'config-db-host-oracle-help' => 'See also:
-* {{msg-mw|Config-invalid-db-server-oracle}}',
-       'config-db-wiki-settings' => 'This is more acurate: "Enter identifying or distinguishing data for this wiki" since a MySQL database can host tables of several wikis.',
-       'config-db-account-oracle-warn' => 'A "[[:wikipedia:Front and back ends|backend]]" is a system or component that ordinary users don\'t interact with directly and don\'t need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are "system" or "service", or (depending on context and language) even leave it untranslated.',
-       'config-db-password-empty' => 'Used as error message. Parameters:
-* $1 - database username',
-       'config-db-account-lock' => "It might be easier to translate ''normal operation'' as \"also after the installation process\"",
-       'config-mysql-old' => 'Used as error message. Parameters:
-* $1 - minimum version
-* $2 - the version of MySQL that has been installed',
-       'config-pg-test-error' => '* $1 - database name
-* $2 - error message',
-       'config-sqlite-dir-help' => '{{doc-important|Do not translate <code>.htaccess</code> and <code>/var/lib/mediawiki/yourwiki</code>.}}
-Used in help box.',
-       'config-type-mysql' => '"Or compatible" refers to several database systems that are compatible with MySQL, as explained in {{msg-mw|config-dbsupport-mysql}}, and thus also work with this choice of database type.',
-       'config-type-postgres' => '{{optional}}',
-       'config-type-sqlite' => '{{optional}}',
-       'config-type-oracle' => '{{optional}}',
-       'config-support-info' => 'Parameters:
-* $1 - a list of DBMSs that MediaWiki supports, composed with config-dbsupport-* messages.',
-       'config-support-mysql' => 'Parameters:
-* $1 - a link to the MySQL home page having the anchor text "MySQL".',
-       'config-support-postgres' => 'Parameters:
-* $1 - a link to the PostgreSQL home page having the anchor text "PostgreSQL".',
-       'config-support-sqlite' => 'Parameters:
-* $1 - a link to the SQLite home page having the anchor text "SQLite".',
-       'config-support-oracle' => 'Parameters:
-* $1 - a link to the Oracle home page, the anchor text of which is "Oracle".',
-       'config-dbsupport-mysql' => 'Used in {{msg-mw|config-support-info}}.',
-       'config-dbsupport-postgres' => 'Used in {{msg-mw|config-support-info}}.',
-       'config-dbsupport-sqlite' => 'Used in {{msg-mw|config-support-info}}.',
-       'config-dbsupport-oracle' => 'Used in {{msg-mw|config-support-info}}.',
-       'config-invalid-db-server-oracle' => 'Used as error message. Parameters:
-* $1 - database server name
-See also:
-* {{msg-mw|Config-db-host-oracle-help}}',
-       'config-invalid-db-name' => 'Used as error message. Parameters:
-* $1 - database name
-See also:
-* {{msg-mw|Config-invalid-db-prefix}}',
-       'config-invalid-db-prefix' => 'Used as error message. Parameters:
-* $1 - database prefix
-See also:
-* {{msg-mw|Config-invalid-db-name}}',
-       'config-connection-error' => '$1 is the external error from the database, such as "DB connection error: Access denied for user \'dba\'@\'localhost\' (using password: YES) (localhost)."
-
-If you\'re translating this message to a right-to-left language, consider writing <nowiki><div dir="ltr">$1.</div></nowiki>. (When the bidi features for HTML5 will be implemented in the browsers, it will probably be a good idea to write it as <nowiki><div dir="auto">$1.</div></nowiki>.)',
-       'config-invalid-schema' => '*$1 - schema name',
-       'config-db-sys-user-exists-oracle' => 'Used as error message. Parameters:
-* $1 - database username',
-       'config-postgres-old' => 'Used as error message. Used as warning. Parameters:
-* $1 - minimum version
-* $2 - the version of PostgreSQL that has been installed',
-       'config-sqlite-parent-unwritable-group' => 'Used as SQLite error message. Parameters:
-* $1 - data directory
-* $2 - "dirname" part of $1
-* $3 - "basename" part of $1
-* $4 - web server\'s primary group name
-See also:
-* {{msg-mw|Config-sqlite-parent-unwritable-nogroup}}',
-       'config-sqlite-parent-unwritable-nogroup' => 'Used as SQLite error message. Parameters:
-* $1 - data directory
-* $2 - "dirname" part of $1
-* $3 - "basename" part of $1
-See also:
-* {{msg-mw|Config-sqlite-parent-unwritable-group}}',
-       'config-sqlite-mkdir-error' => 'Used as SQLite error message. Parameters:
-* $1 - data directory name',
-       'config-sqlite-dir-unwritable' => 'webserver refers to a software like Apache or Lighttpd.',
-       'config-sqlite-connection-error' => 'Used as SQLite error message. Parameters:
-* $1 - error message which SQLite server returned',
-       'config-sqlite-readonly' => 'Used as SQLite error message. Parameters:
-* $1 - filename',
-       'config-sqlite-cant-create-db' => 'Used as SQLite error message. Parameters:
-* $1 - filename',
-       'config-can-upgrade' => 'Parameters:
-* $1 - Version or Revision indicator.',
-       'config-upgrade-done' => 'Used as success message. Parameters:
-* $1 - full URL of index.php
-See also:
-* {{msg-mw|config-upgrade-done-no-regenerate}}',
-       'config-upgrade-done-no-regenerate' => 'Used as success message. Parameters:
-* $1 - full URL of index.php
-See also:
-* {{msg-mw|config-upgrade-done}}',
-       'config-regenerate' => 'This message appears in a button after LocalSettings.php is generated and downloaded at the end of the MediaWiki installation process.',
-       'config-show-table-status' => '{{doc-important|"<code>SHOW TABLE STATUS</code>" is a MySQL command. Do not translate this.}}',
-       'config-db-web-account-same' => 'checkbox label',
-       'config-db-web-create' => 'checkbox label',
-       'config-mysql-only-myisam-dep' => 'Used as warning message when mysql does not support the minimum suggested feature set.',
-       'config-mysql-binary' => '{{Identical|Binary}}',
-       'config-ns-generic' => 'Used as label for "namespace type" radio button.
-
-See also:
-* {{msg-mw|Config-ns-site-name}}
-* {{msg-mw|Config-ns-other}}
-{{Identical|Project}}',
-       'config-ns-site-name' => 'Used as label for "namespace type" radio button. Parameters:
-* $1 - wiki name
-See also:
-* {{msg-mw|Config-ns-generic}}
-* {{msg-mw|Config-ns-other}}',
-       'config-ns-other' => "Used as label for \"namespace type\" radio button.
-
-This message is followed by the input box which enables to '''specify''' a namespace name.
-
-See also:
-* {{msg-mw|Config-ns-site-name}}
-* {{msg-mw|Config-ns-generic}}",
-       'config-ns-invalid' => 'Used as error message. Parameters:
-* $1 - namespace name
-See also:
-* {{msg-mw|Config-ns-conflict}}',
-       'config-ns-conflict' => 'Used as error message. Parameters:
-* $1 - namespace name
-See also:
-* {{msg-mw|Config-ns-invalid}}',
-       'config-admin-name' => '{{Identical|Your name}}',
-       'config-admin-password' => '{{Identical|Password}}',
-       'config-admin-name-invalid' => 'Used as error message. Parameters:
-* $1 - username of administrator',
-       'config-admin-email' => '{{Identical|E-mail address}}',
-       'config-admin-error-user' => 'Used as error message. Parameters:
-* $1 - username of administrator
-See also:
-* {{msg-mw|Config-admin-error-password}}',
-       'config-admin-error-password' => 'Used as error message. Parameters:
-* $1 - username of administrator
-* $2 - error message
-See also:
-* {{msg-mw|Config-admin-error-user}}',
-       'config-subscribe' => 'Used as label for the installer checkbox',
-       'config-subscribe-help' => '"Low-volume" in this context means that there will be few e-mails to that mailing list per time period.',
-       'config-profile-help' => 'Messages referenced:
-* {{msg-mw|config-profile-wiki}}
-* {{msg-mw|config-profile-no-anon}}
-* {{msg-mw|config-profile-fishbowl}}
-* {{msg-mw|config-profile-private}}',
-       'config-email-settings' => '{{Identical|E-mail setting}}',
-       'config-email-user' => '{{Identical|Enable user-to-user e-mail}}',
-       'config-upload-help' => 'The word "mode" here refers to the access rights given to various user groups when attempting to create and store files and/or subdiretories in the said directory on the server. It also refers to the <code>mode</code> command used to maipulate said right mask under Unix, Linux, and similar operating systems. A less operating-system-centric translation is fine.',
-       'config-logo-help' => '',
-       'config-instantcommons' => 'Used as label for the checkbox.
-
-The help message for this checkbox is:
-* {{msg-mw|Config-instantcommons-help}}',
-       'config-instantcommons-help' => 'Used as help message for the checkbox which is labeled {{msg-mw|config-instantcommons}}.',
-       'config-cc-not-chosen' => '{{doc-important|Do not translate the "<code>proceed</code>" part.}}
-This message refers to a block of HTML being embedded into the installer page. It comes from the Creative Commons Web site. The block is in the English language. It is a scripted license chooser. When an individual license has been selected, it asks you to click "proceed" so as to return to the MediaWiki installer page.',
-       'config-memcached-servers' => '{{doc-important|Do not translate "memcached".}}
-{{Identical|Memcached server}}',
-       'config-memcache-badip' => 'Used as error message. Parameters:
-* $1 - IP address for Memcached
-See also:
-* {{msg-mw|Config-memcache-noport}}
-* {{msg-mw|Config-memcache-badport}}',
-       'config-memcache-noport' => 'Used as error message. Parameters:
-* $1 - Memcached server name
-See also:
-* {{msg-mw|Config-memcache-badip}}
-* {{msg-mw|Config-memcache-badport}}',
-       'config-memcache-badport' => 'Used as error message. Parameters:
-* $1 - 1 (hard-coded)
-* $2 - 65535 (hard-coded)
-See also:
-* {{msg-mw|Config-memcache-badip}}
-* {{msg-mw|Config-memcache-noport}}',
-       'config-extensions' => '{{Identical|Extension}}',
-       'config-extensions-help' => '{{doc-important|Do not translate <code>./extensions</code>.}}
-Used in help box.',
-       'config-install-step-done' => '{{Identical|Done}}',
-       'config-install-step-failed' => '{{Identical|Failed}}',
-       'config-install-database' => '*{{msg-mw|Config-install-database}}
-*{{msg-mw|Config-install-tables}}
-*{{msg-mw|Config-install-schema}}
-*{{msg-mw|Config-install-user}}
-*{{msg-mw|Config-install-interwiki}}
-*{{msg-mw|Config-install-stats}}
-*{{msg-mw|Config-install-keys}}
-*{{msg-mw|Config-install-sysop}}
-*{{msg-mw|Config-install-mainpage}}',
-       'config-install-schema' => '*{{msg-mw|Config-install-database}}
-*{{msg-mw|Config-install-tables}}
-*{{msg-mw|Config-install-schema}}
-*{{msg-mw|Config-install-user}}
-*{{msg-mw|Config-install-interwiki}}
-*{{msg-mw|Config-install-stats}}
-*{{msg-mw|Config-install-keys}}
-*{{msg-mw|Config-install-sysop}}
-*{{msg-mw|Config-install-mainpage}}',
-       'config-install-pg-schema-failed' => 'Parameters:
-* $1 = database user name (usernames in the database are unrelated to wiki user names)
-* $2 =',
-       'config-pg-no-plpgsql' => 'Used as error message. Parameters:
-* $1 - database name',
-       'config-install-user' => 'Message indicates that the user is being created
-
-See also:
-*{{msg-mw|Config-install-database}}
-*{{msg-mw|Config-install-tables}}
-*{{msg-mw|Config-install-schema}}
-*{{msg-mw|Config-install-user}}
-*{{msg-mw|Config-install-interwiki}}
-*{{msg-mw|Config-install-stats}}
-*{{msg-mw|Config-install-keys}}
-*{{msg-mw|Config-install-sysop}}
-*{{msg-mw|Config-install-mainpage}}',
-       'config-install-user-alreadyexists' => 'Used as warning. Parameters:
-* $1 - database username',
-       'config-install-user-create-failed' => 'Used as MySQL warning and as PostgreSQL error. Parameters:
-* $1 - database username
-* $2 - detailed warning/error message',
-       'config-install-user-grant-failed' => 'Parameters:
-* $1 is the database username for which granting rights failed
-* $2 is the error message',
-       'config-install-user-missing' => 'Used as PostgreSQL error message. Parameters:
-* $1 - database username
-See also:
-* {{msg-mw|Config-install-user-missing-create}}',
-       'config-install-user-missing-create' => 'Used as PostgreSQL error message. Parameters:
-* $1 - database username
-See also:
-* {{msg-mw|Config-install-user-missing}}',
-       'config-install-tables' => 'Message indicates that the tables are being created
-
-See also:
-*{{msg-mw|Config-install-database}}
-*{{msg-mw|Config-install-tables}}
-*{{msg-mw|Config-install-schema}}
-*{{msg-mw|Config-install-user}}
-*{{msg-mw|Config-install-interwiki}}
-*{{msg-mw|Config-install-stats}}
-*{{msg-mw|Config-install-keys}}
-*{{msg-mw|Config-install-sysop}}
-*{{msg-mw|Config-install-mainpage}}',
-       'config-install-tables-failed' => 'Used as PostgreSQL error message. Parameters:
-* $1 - detailed error message',
-       'config-install-interwiki' => 'Message indicates that the interwikitables are being populated
-
-See also:
-*{{msg-mw|Config-install-database}}
-*{{msg-mw|Config-install-tables}}
-*{{msg-mw|Config-install-schema}}
-*{{msg-mw|Config-install-user}}
-*{{msg-mw|Config-install-interwiki}}
-*{{msg-mw|Config-install-stats}}
-*{{msg-mw|Config-install-keys}}
-*{{msg-mw|Config-install-sysop}}
-*{{msg-mw|Config-install-mainpage}}',
-       'config-install-interwiki-list' => '{{doc-important|Do not translate <code>interwiki.list</code>.}}
-Used as error message.',
-       'config-install-stats' => '*{{msg-mw|Config-install-database}}
-*{{msg-mw|Config-install-tables}}
-*{{msg-mw|Config-install-schema}}
-*{{msg-mw|Config-install-user}}
-*{{msg-mw|Config-install-interwiki}}
-*{{msg-mw|Config-install-stats}}
-*{{msg-mw|Config-install-keys}}
-*{{msg-mw|Config-install-sysop}}
-*{{msg-mw|Config-install-mainpage}}',
-       'config-install-keys' => '*{{msg-mw|Config-install-database}}
-*{{msg-mw|Config-install-tables}}
-*{{msg-mw|Config-install-schema}}
-*{{msg-mw|Config-install-user}}
-*{{msg-mw|Config-install-interwiki}}
-*{{msg-mw|Config-install-stats}}
-*{{msg-mw|Config-install-keys}}
-*{{msg-mw|Config-install-sysop}}
-*{{msg-mw|Config-install-mainpage}}',
-       'config-insecure-keys' => 'Parameters:
-* $1 - A list of names of the secret keys that were generated.
-* $2 - the number of items in the list $1, to be used with PLURAL.',
-       'config-install-sysop' => 'Message indicates that the administrator user account is being created
-
-See also:
-*{{msg-mw|Config-install-database}}
-*{{msg-mw|Config-install-tables}}
-*{{msg-mw|Config-install-schema}}
-*{{msg-mw|Config-install-user}}
-*{{msg-mw|Config-install-interwiki}}
-*{{msg-mw|Config-install-stats}}
-*{{msg-mw|Config-install-keys}}
-*{{msg-mw|Config-install-sysop}}
-*{{msg-mw|Config-install-mainpage}}',
-       'config-install-subscribe-fail' => '{{doc-important|"mediawiki-announce" is the name of a mailing list and should not be translated.}}',
-       'config-install-mainpage' => '*{{msg-mw|Config-install-database}}
-*{{msg-mw|Config-install-tables}}
-*{{msg-mw|Config-install-schema}}
-*{{msg-mw|Config-install-user}}
-*{{msg-mw|Config-install-interwiki}}
-*{{msg-mw|Config-install-stats}}
-*{{msg-mw|Config-install-keys}}
-*{{msg-mw|Config-install-sysop}}
-*{{msg-mw|Config-install-mainpage}}',
-       'config-install-mainpage-failed' => 'Used as error message. Parameters:
-* $1 - detailed error message',
-       'config-install-done' => 'Parameters:
-* $1 is the URL to LocalSettings download
-* $2 is a link to the wiki.
-* $3 is a download link with attached download icon. The config-download-localsettings message will be used as the link text.',
-       'config-download-localsettings' => 'The link text used in the download link in config-install-done.',
-       'config-help' => 'This is used in help boxes.
-{{Identical|Help}}',
-       'config-nofile' => 'Used as failure message. Parameters:
-* $1 - filename',
-       'config-extension-link' => 'Shown on last page of installation to inform about possible extensions.',
-       '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.',
-);
-
-/** Afrikaans (Afrikaans)
- * @author Naudefj
- */
-$messages['af'] = array(
-       'config-desc' => 'Die Installasieprogram vir MediaWiki',
-       'config-title' => 'Installasie MediaWiki $1',
-       'config-information' => 'Inligting',
-       'config-localsettings-key' => 'Opgradeer-sleutel:',
-       'config-localsettings-badkey' => 'Die sleutel wat u verskaf het is verkeerd.',
-       'config-session-error' => 'Fout met begin van sessie: $1',
-       'config-no-session' => "U sessiedata is verlore!
-Kontroleer u php.ini en maak seker dat <code>session.save_path</code> na 'n geldige gids wys.",
-       'config-your-language' => 'U taal:',
-       'config-your-language-help' => "Kies 'n taal om tydens die installasieproses te gebruik.",
-       'config-wiki-language' => 'Wiki se taal:',
-       'config-wiki-language-help' => 'Kies die taal waarin die wiki hoofsaaklik geskryf sal word.',
-       'config-back' => '← Terug',
-       'config-continue' => 'Gaan voort →',
-       'config-page-language' => 'Taal',
-       'config-page-welcome' => 'Welkom by MediaWiki!',
-       'config-page-dbconnect' => 'Konnekteer na die databasis',
-       'config-page-upgrade' => "Opgradeer 'n bestaande installasie",
-       'config-page-dbsettings' => 'Databasis-instellings',
-       'config-page-name' => 'Naam',
-       'config-page-options' => 'Opsies',
-       'config-page-install' => 'Installeer',
-       'config-page-complete' => 'Voltooi!',
-       'config-page-restart' => 'Herbegin installasie',
-       'config-page-readme' => 'Lees my',
-       'config-page-releasenotes' => 'Vrystellingsnotas',
-       'config-page-copying' => 'Besig met kopiëring',
-       'config-page-upgradedoc' => 'Besig met opgradering',
-       'config-page-existingwiki' => 'Bestaande wiki',
-       'config-restart' => 'Ja, herbegin dit',
-       'config-sidebar' => '* [//www.mediawiki.org MediaWiki tuisblad]
-* [//www.mediawiki.org/wiki/Help:Contents Gebruikershandleiding] (Engelstalig)
-* [//www.mediawiki.org/wiki/Manual:Contents Administrateurshandleiding] (Engelstalig)
-* [//www.mediawiki.org/wiki/Manual:FAQ Algemene vrae] (Engelstalig)
-----
-* <doclink href=Readme>Lees my</doclink>
-* <doclink href=ReleaseNotes>Vrystellingsnotas</doclink>
-* <doclink href=Copying>Kopiëring</doclink>
-* <doclink href=UpgradeDoc>Opgradering</doclink>',
-       'config-env-good' => 'Die omgewing is gekontroleer.
-U kan MediaWiki installeer.',
-       'config-env-bad' => 'Die omgewing is gekontroleer.
-U kan nie MediaWiki installeer nie.</span>',
-       'config-env-php' => 'PHP $1 is tans geïnstalleer.',
-       'config-no-db' => "Kon nie 'n geskikte databasisdrywer vind nie!", # Fuzzy
-       'config-memory-raised' => 'PHP se <code>memory_limit</code> is $1, en is verhoog tot $2.',
-       'config-memory-bad' => "'''Waarskuwing:''' PHP se <code>memory_limit</code> is $1.
-Dit is waarskynlik te laag.
-Die installasie mag moontlik faal!",
-       'config-xcache' => '[Http://trac.lighttpd.net/xcache/ XCache] is geïnstalleer',
-       'config-apc' => '[Http://www.php.net/apc APC] is geïnstalleer',
-       'config-wincache' => '[Http://www.iis.net/download/WinCacheForPhp WinCache] is geïnstalleer',
-       'config-diff3-bad' => 'GNU diff3 nie gevind nie.',
-       'config-db-type' => 'Databasistipe:',
-       'config-db-host' => 'Databasisbediener:',
-       'config-db-host-oracle' => 'Databasis-TNS:',
-       'config-db-wiki-settings' => 'Identifiseer hierdie wiki',
-       'config-db-name' => 'Databasisnaam:',
-       'config-db-name-oracle' => 'Databasis-skema:',
-       'config-db-install-account' => 'Gebruiker vir die installasie',
-       'config-db-username' => 'Databasis gebruikersnaam:',
-       'config-db-password' => 'Databasis wagwoord:',
-       'config-db-prefix' => 'Voorvoegsel vir databasistabelle:',
-       'config-db-charset' => 'Karakterstelsel vir databasis',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binêr',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-mysql-old' => 'U moet MySQL $1 of later gebruik.
-U gebruik tans $2.',
-       'config-db-port' => 'Databasispoort:',
-       'config-db-schema' => 'Skema vir MediaWiki',
-       'config-sqlite-dir' => 'Gids vir SQLite se data:',
-       'config-oracle-def-ts' => 'Standaard tabelruimte:',
-       'config-oracle-temp-ts' => 'Tydelike tabelruimte:',
-       'config-header-mysql' => 'MySQL-instellings',
-       'config-header-postgres' => 'PostgreSQL-instellings',
-       'config-header-sqlite' => 'SQLite-instellings',
-       'config-header-oracle' => 'Oracle-instellings',
-       'config-invalid-db-type' => 'Ongeldige databasistipe',
-       'config-missing-db-name' => 'U moet \'n waarde vir "Databasnaam" verskaf',
-       'config-sqlite-readonly' => 'Die lêer <code>$1</code> kan nie geskryf word nie.',
-       'config-sqlite-cant-create-db' => 'Kon nie databasislêer <code>$1</code> skep nie.',
-       'config-upgrade-done-no-regenerate' => 'Opgradering is voltooi.
-
-U kan nou [$1 u wiki gebruik].',
-       'config-regenerate' => 'Herskep LocalSettings.php →',
-       'config-show-table-status' => 'Die uitvoer van <code>SHOW TABLE STATUS</code> het gefaal!',
-       'config-db-web-account' => 'Databasisgebruiker vir toegang tot die web',
-       'config-mysql-engine' => 'Stoor-enjin:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-charset' => 'Karakterstelsel vir databasis:',
-       'config-mysql-binary' => 'Binêr',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Naam van die wiki:',
-       'config-site-name-blank' => "Verskaf 'n naam vir u webwerf.",
-       'config-project-namespace' => 'Projeknaamruimte:',
-       'config-ns-generic' => 'Projek',
-       'config-ns-site-name' => 'Dieselfde as die wiki: $1',
-       'config-ns-other' => 'Ander (spesifiseer)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-admin-box' => 'Administrateur se gebruiker',
-       'config-admin-name' => 'U naam:',
-       'config-admin-password' => 'Wagwoord:',
-       'config-admin-password-confirm' => 'Wagwoord weer:',
-       'config-admin-password-blank' => "Verskaf 'n wagwoord vir die administrateur in.",
-       'config-admin-password-same' => 'Die wagwoord mag nie dieselfde as die gebruikersnaam wees nie.',
-       'config-admin-password-mismatch' => 'Die twee wagwoorde wat u ingetik het stem nie ooreen nie.',
-       'config-admin-email' => 'E-posadres:',
-       'config-optional-continue' => 'Vra my meer vrae.',
-       'config-optional-skip' => 'Ek is reeds verveeld, installeer maar net die wiki.',
-       'config-profile-wiki' => 'Tradisionele wiki', # Fuzzy
-       'config-profile-no-anon' => 'Skep van gebruiker is verpligtend',
-       'config-profile-fishbowl' => 'Slegs vir gemagtigde redaksie',
-       'config-profile-private' => 'Privaat wiki',
-       'config-license' => 'Kopiereg en lisensie:',
-       'config-license-none' => 'Geen lisensie in die onderskrif',
-       'config-license-pd' => 'Publieke Domein',
-       'config-license-cc-choose' => "Kies 'n Creative Commons-lisensie",
-       'config-email-settings' => 'E-posinstellings',
-       'config-email-sender' => 'E-posadres vir antwoorde:',
-       'config-upload-settings' => 'Oplaai van beelde en lêer',
-       'config-upload-enable' => 'Aktiveer die oplaai van lêers',
-       'config-upload-deleted' => 'Gids vir verwyderde lêers:',
-       'config-logo' => 'URL vir logo:',
-       'config-cc-again' => 'Kies weer...',
-       'config-advanced-settings' => 'Gevorderde konfigurasie',
-       'config-memcached-servers' => 'Memcached-bedieners:',
-       'config-extensions' => 'Uitbreidings',
-       'config-install-step-done' => 'gedoen',
-       'config-install-step-failed' => 'het misluk',
-       'config-install-extensions' => 'Insluitende uitbreidings',
-       'config-install-database' => 'Stel die databasis op',
-       'config-install-pg-schema-not-exist' => 'Die skema vir PostgreSQL bestaan ​​nie.',
-       'config-install-pg-schema-failed' => 'Die skep van tabelle het gefaal.
-Maak seker dat die gebruiker "$1" na skema "$2" mag skryf.',
-       'config-install-pg-commit' => 'Wysigings word gestoor',
-       'config-install-pg-plpgsql' => 'Kontroleer vir taal PL/pgSQL',
-       'config-pg-no-plpgsql' => 'U moet die taal PL/pgSQL in die database $1 installeer',
-       'config-install-user' => 'Besig om die databasisgebruiker te skep',
-       'config-install-user-alreadyexists' => 'Gebruiker "$1" bestaan al reeds',
-       'config-install-user-create-failed' => 'Skep van gebruiker "$1" het gefaal: $2',
-       'config-install-user-grant-failed' => 'Die toekenning van regte aan gebruiker "$1" het gefaal: $2',
-       'config-install-tables' => 'Skep tabelle',
-       'config-install-tables-exist' => "'''Waarskuwing''': Dit lyk of MediaWiki se tabelle reeds bestaan.
-Die skep van tabelle word oorgeslaan.",
-       'config-install-tables-failed' => "'''Fout''': die skep van 'n tabel het gefaal met die volgende fout: $1",
-       'config-install-interwiki' => 'Besig om data in die interwiki-tabel in te laai',
-       'config-install-interwiki-list' => 'Kon nie die lêer <code>interwiki.list</code> vind nie.',
-       'config-install-interwiki-exists' => "'''Waarskuwing''': Die interwiki-tabel bevat reeds inskrywings.
-Die standaardlys word oorgeslaan.",
-       'config-install-stats' => 'Inisialiseer statistieke',
-       'config-install-keys' => 'Genereer geheime sleutel', # Fuzzy
-       'config-install-sysop' => "Skep 'n gebruiker vir die administrateur",
-       'config-install-subscribe-fail' => 'Kon nie vir MediaWiki-announce inskryf nie: $1',
-       'config-install-mainpage' => 'Skep die hoofblad met standaard inhoud',
-       'config-install-extension-tables' => 'Skep tabelle vir aangeskakel uitbreidings',
-       'config-install-mainpage-failed' => 'Kon nie die hoofblad laai nie: $1',
-       'config-install-done' => "'''Veels geluk!'''
-U het MediaWiki suksesvol geïnstalleer.
-
-Die installeerder het 'n <code>LocalSettings.php</code> lêer opgestel.
-Dit bevat al u instellings.
-
-U sal dit moet [$1 aflaai] en dit in die hoofgids van u wiki-installasie plaas; in dieselfde gids as index.php.
-'''Let wel''': As u dit nie nou doen nie, sal die gegenereerde konfigurasielêer nie later meer beskikbaar wees nadat u die installasie afgesluit het nie.
-
-As dit gedoen is, kan u '''[u $2 wiki besoek]'''.", # Fuzzy
-       'config-download-localsettings' => 'Laai <code>LocalSettings.php</code> af',
-       'config-help' => 'hulp',
-       'mainpagetext' => "'''MediaWiki is suksesvol geïnstalleer.'''",
-       'mainpagedocfooter' => "Konsulteer '''[//meta.wikimedia.org/wiki/Help:Contents User's Guide]''' vir inligting oor hoe om die wikisagteware te gebruik.
-
-== Hoe om te Begin ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Gheg Albanian (Gegë)
- * @author Bresta
- */
-$messages['aln'] = array(
-       'mainpagetext' => "'''MediaWiki software u instalue me sukses.'''",
-       'mainpagedocfooter' => 'Për mâ shumë informata rreth përdorimit të softwareit wiki, ju lutem shikoni [//meta.wikimedia.org/wiki/Help:Contents dokumentacionin].
-
-
-== Për fillim ==
-
-* [//www.mediawiki.org/wiki/Help:Configuration_settings Konfigurimi i MediaWikit]
-* [//www.mediawiki.org/wiki/Help:FAQ Pyetjet e shpeshta rreth MediaWikit]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Njoftime rreth MediaWikit]', # Fuzzy
-);
-
-/** Amharic (አማርኛ)
- */
-$messages['am'] = array(
-       'mainpagetext' => "'''MediaWiki በትክክል ማስገባቱ ተከናወነ።'''",
-       'mainpagedocfooter' => "ስለ ዊኪ ሶፍትዌር ጥቅም ለመረዳት፣ [//meta.wikimedia.org/wiki/Help:Contents User's Guide] ያንብቡ።
-
-== ለመጀመር ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Aragonese (aragonés)
- * @author Juanpabl
- */
-$messages['an'] = array(
-       'mainpagetext' => "'''O programa MediaWiki s'ha instalato correctament.'''",
-       'mainpagedocfooter' => "Consulta a [//meta.wikimedia.org/wiki/Help:Contents Guía d'usuario] ta mirar información sobre cómo usar o software wiki.
-
-== Ta prencipiar ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de caracteristicas confegurables]
-* [//www.mediawiki.org/wiki/Manual:FAQ Preguntas cutianas sobre MediaWiki (FAQ)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correu sobre ta anuncios de MediaWiki]", # Fuzzy
-);
-
-/** Old English (Ænglisc)
- * @author Gott wisst
- */
-$messages['ang'] = array(
-       'mainpagetext' => "'''MediaWiki hafaþ geworden spēdige inseted.'''",
-       'mainpagedocfooter' => 'Þeahta þone [//meta.wikimedia.org/wiki/Help:Contents Brūcenda Lǣdend]  on helpe mid þǣre nytte of ƿikisōftƿare.
-
-== Beȝinnunȝ ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Onfæstnunȝa ȝesetednessa ȝetæl]
-* [//www.mediawiki.org/wiki/Manual:FAQ Ȝetæl oft ascodra ascunȝa ymb MediaǷiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Ǣrendunȝȝetæl nīƿra MediaǷiki forþsendnessa]', # Fuzzy
-);
-
-/** Arabic (العربية)
- * @author Meno25
- * @author Mido
- * @author OsamaK
- * @author روخو
- */
-$messages['ar'] = array(
-       'config-desc' => 'مثبت لميدياويكي',
-       'config-title' => 'تثبيت ميدياويكي $1',
-       'config-information' => 'معلومات',
-       'config-back' => '→ ارجع',
-       'config-continue' => 'استمر ←',
-       'config-page-language' => 'اللغة',
-       'config-page-name' => 'الاسم',
-       'config-db-username' => 'اسم مستخدم قاعدة البيانات:',
-       'config-db-password' => 'كلمة سر قاعدة البيانات:',
-       'config-db-port' => 'منفذ قاعدة البيانات:',
-       'config-type-mysql' => 'ماي إس كيو إل',
-       'config-type-postgres' => 'بوستجر إس كيو إل',
-       'config-type-sqlite' => 'إس كيو لايت',
-       'config-type-oracle' => 'أوراكل',
-       'config-admin-email' => 'عنوان البريد الإلكتروني:',
-       'mainpagetext' => "'''تم تثبيت ميدياويكي بنجاح.'''",
-       'mainpagedocfooter' => 'استشر [//meta.wikimedia.org/wiki/Help:Contents دليل المستخدم] لمعلومات حول استخدام برنامج الويكي.
-
-== البداية ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings قائمة إعدادات الضبط]
-* [//www.mediawiki.org/wiki/Manual:FAQ أسئلة متكررة حول ميدياويكي]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce القائمة البريدية الخاصة بإصدار ميدياويكي]', # Fuzzy
-);
-
-/** Aramaic (ܐܪܡܝܐ)
- * @author Basharh
- */
-$messages['arc'] = array(
-       'config-information' => 'ܝܕ̈ܥܬܐ',
-       'config-your-language' => 'ܠܫܢܐ ܕܝܠܟ:',
-       'config-wiki-language' => 'ܠܫܢܐ ܕܘܝܩܝ:',
-       'config-page-language' => 'ܠܫܢܐ',
-       'config-page-name' => 'ܫܡܐ',
-       'config-page-options' => 'ܓܒܝܬ̈ܐ',
-       'config-page-install' => 'ܢܨܘܒ',
-       'config-ns-other-default' => 'ܘܝܩܝ ܕܝܠܝ',
-       'config-admin-box' => 'ܚܘܫܒܢܐ ܕܡܕܒܪܢܐ',
-       'config-admin-name' => 'ܫܡܐ ܕܝܠܟ:',
-       'config-admin-password' => 'ܡܠܬܐ ܕܥܠܠܐ:',
-       'config-admin-password-confirm' => 'ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܬܐ ܐܚܪܬܐ:',
-       'config-admin-email' => 'ܡܘܢܥܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ:',
-       'config-profile-private' => 'ܘܝܩܝ ܦܪܨܘܦܝܐ',
-       'config-email-settings' => 'ܛܘܝܒ̈ܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
-);
-
-/** Moroccan Spoken Arabic (Maġribi)
- * @author Enzoreg
- */
-$messages['ary'] = array(
-       'mainpagetext' => "'''MediaWiki ṫ'instala be najaḫ.'''",
-       'mainpagedocfooter' => 'Ila bġiṫiw meĝlomaṫ ĥrin baċ ṫesṫeĝmlo had l-lojisyél siro ċofo [//meta.wikimedia.org/wiki/Aide:Contenu Gid dyal l-mosṫeĥdim]
-
-== L-bdaya mĝa MediaWiki ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista dyal l-paramétraṫ dyal l-konfigurasyon]
-* [//www.mediawiki.org/wiki/Manual:FAQ/fr FAQ fe MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista dyal l-modakaraṫ ĝla versyonaṫ jdad dyal MediaWiki]', # Fuzzy
-);
-
-/** Egyptian Spoken Arabic (مصرى)
- */
-$messages['arz'] = array(
-       'mainpagetext' => "''' ميدياويكى اتنزلت بنجاح.'''",
-       'mainpagedocfooter' => 'اسال [//meta.wikimedia.org/wiki/Help:Contents دليل اليوزر] للمعلومات حوالين استخدام برنامج الويكى.
-
-== البداية ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings لستة اعدادات الضبط]
-* [//www.mediawiki.org/wiki/Manual:FAQ أسئلة بتكرر حوالين الميدياويكى]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce لستة الايميلات بتاعة اعلانات الميدياويكى]', # Fuzzy
-);
-
-/** Assamese (অসমীয়া)
- * @author Chaipau
- * @author Gitartha.bordoloi
- */
-$messages['as'] = array(
-       'mainpagetext' => "'''মিডিয়াৱিকি সফলভাবে ইন্সটল কৰা হ'ল ।'''",
-       'mainpagedocfooter' => "ৱিকি চ'ফটৱেৰ কেনেকৈ ব্যৱহাৰ কৰিব [//meta.wikimedia.org/wiki/Help:Contents সদস্যৰ সহায়িকা] চাওঁক ।
-
-== আৰম্ভণি কৰিবলৈ ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Asturian (asturianu)
- * @author Xuacu
- */
-$messages['ast'] = array(
-       'config-desc' => "L'instalador pa MediaWiki",
-       'config-title' => 'Instalación de MediaWiki $1',
-       'config-information' => 'Información',
-       'config-localsettings-upgrade' => "Detectose un ficheru <code>LocalSettings.php</code>.
-P'anovar esta instalación, escriba'l valor de
-<code>\$wgUpgradeKey</code> nel cuadru d'abaxo.
-Alcontraralu en <code>LocalSettings.php</code>.",
-       'config-localsettings-cli-upgrade' => "Deteutose un ficheru <code>LocalSettings.php</code>.
-P'anovar esta instalación, execute <code>update.php</code>",
-       'config-localsettings-key' => "Clave d'anovamientu:",
-       'config-localsettings-badkey' => 'La clave que dio ye incorreuta.',
-       'config-upgrade-key-missing' => "Deteutose una instalación esistente de MediaWiki.
-P'anovar esta instalación, ponga la llinia siguiente al final del ficheru <code>LocalSettings.php</code>:
-
-$1",
-       'config-localsettings-incomplete' => 'Paez que\'l ficheru <code>LocalSettings.php</code> esistente ta incompletu.
-La variable $1 nun ta definida.
-Camude\'l ficheru <code>LocalSettings.php</code> pa qu\'esta variable quede definida y calque "{{int:Config-continue}}".',
-       'config-localsettings-connection-error' => 'Alcontrose un error al conectar cola base de datos usando la configuración especificada en <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Corrixa esta configuración y vuelva a intentalo.
-
-$1',
-       'config-your-language' => 'La so llingua:',
-       'config-your-language-help' => "Seleicione la llingua a emplegar nel procesu d'instalación.",
-       'config-wiki-language' => 'Llingua de la wiki:',
-       'config-wiki-language-help' => "Seleicione la llingua que s'usará preferentemente na wiki.",
-       'config-back' => '← Atrás',
-       'config-continue' => 'Siguir →',
-       'config-page-language' => 'Llingua',
-       'config-page-welcome' => '¡Bienveníu a MediaWiki!',
-       'config-page-dbconnect' => 'Conectar cola base de datos',
-       'config-page-upgrade' => 'Anovar instalación esistente',
-       'config-page-dbsettings' => 'Configuración de la base de datos',
-       'config-page-name' => 'Nome',
-       'config-page-options' => 'Opciones',
-       'config-page-install' => 'Instalar',
-       'config-page-complete' => '¡Completo!',
-       'config-page-restart' => 'Reaniciar la instalación',
-       'config-page-readme' => 'Llei-me',
-       'config-page-releasenotes' => 'Notes de la versión',
-       'config-page-copying' => 'Copiar',
-       'config-page-upgradedoc' => 'Anovando',
-       'config-page-existingwiki' => 'Wiki esistente',
-       'config-download-localsettings' => 'Descargar <code>LocalSettings.php</code>',
-       'config-help' => 'Ayuda',
-       'config-nofile' => 'Nun pudo atopase\'l ficheru "$1". ¿Desaniciose?',
-       'mainpagetext' => "'''MediaWiki instalóse correchamente.'''",
-       'mainpagedocfooter' => 'Visita la [//meta.wikimedia.org/wiki/Help:Contents Guía del usuariu] pa saber cómo usar esti software wiki.
-
-== Empecipiando ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Llista de les opciones de configuración]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ de MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de corréu de les ediciones de MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Llocaliza MediaWiki na to llingua]',
-);
-
-/** Kotava (Kotava)
- */
-$messages['avk'] = array(
-       'mainpagetext' => "'''MediaWiki inkeyen talpeyot.'''",
-);
-
-/** Azerbaijani (azərbaycanca)
- * @author Cekli829
- * @author Vago
- * @author Wertuose
- */
-$messages['az'] = array(
-       'config-back' => '← Geri',
-       'config-continue' => 'Davam et →',
-       'config-page-language' => 'Dil',
-       'config-page-welcome' => 'MediaWiki-yə xoş gəlmişsiniz!',
-       'config-page-dbconnect' => 'Verilənlər bazasına birləşdir',
-       'config-page-dbsettings' => 'Verilənlər bazasının nizamlanması',
-       'config-page-name' => 'Ad',
-       'config-page-options' => 'Nizamlamalar:',
-       'config-page-install' => 'Nizamlama',
-       'config-page-complete' => 'Komplektləşdir!',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-ns-generic' => 'Layihə',
-       'config-admin-name' => 'Sizin adınız:',
-       'config-admin-password' => 'Parol:',
-       'config-admin-email' => 'E-poçt ünvanı',
-       'config-help' => 'kömək',
-       'mainpagetext' => "'''MediaWiki müvəffəqiyyətlə quraşdırıldı.'''",
-       'mainpagedocfooter' => 'Bu vikinin istifadəsi ilə bağlı məlumat almaq üçün [//meta.wikimedia.org/wiki/Help:Contents İstifadəçi məlumat səhifəsinə] baxın.
-
-== Faydalı keçidlər ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Tənzimləmələrin siyahısı]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki haqqında tez-tez soruşulan suallar]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-poçt siyahısı]', # Fuzzy
-);
-
-/** Bashkir (башҡортса)
- * @author Haqmar
- */
-$messages['ba'] = array(
-       'mainpagetext' => '«MediaWiki» уңышлы рәүештә ҡоролдо.',
-       'mainpagedocfooter' => 'Был вики менән эшләү тураһында мәғлүмәтте [//meta.wikimedia.org/wiki/Ярҙам:Белешмә ошонда] табып була.
-
-== Файҙалы сығанаҡтар ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Көйләүҙәр исемлеге (инг.)];
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki тураһында йыш бирелгән һорауҙар һәм яуаптар (инг.)];
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-ның яңы версиялары тураһында хәбәрҙәр алып тороу].', # Fuzzy
-);
-
-/** Bavarian (Boarisch)
- * @author Mucalexx
- */
-$messages['bar'] = array(
-       'mainpagetext' => "'''MediaWiki is erfoigreich installird worn.'''",
-       'mainpagedocfooter' => 'A Hüf zur da Benützung und Konfigurazion voh da Wiki-Software findst auf [//meta.wikimedia.org/wiki/Help:Contents Benützerhåndbuach].
-
-== Starthüfe ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Listen voh de Konfigurazionsvariaablen]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglisten voh de neichen MediaWiki-Versionen]', # Fuzzy
-);
-
-/** Southern Balochi (بلوچی مکرانی)
- */
-$messages['bcc'] = array(
-       'mainpagetext' => "'''مدیا وی کی گون موفقیت نصب بوت.'''",
-       'mainpagedocfooter' => "مشورت کنیت گون  [//meta.wikimedia.org/wiki/Help:Contents User's Guide] په گشیترین اطلاعات په استفاده چه برنامه ویکی.
-
-== شروع بیت ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Bikol Central (Bikol Central)
- */
-$messages['bcl'] = array(
-       'mainpagetext' => "'''Instalado na an MediaWiki.'''",
-       'mainpagedocfooter' => "Konsultarón tabì an [//meta.wikimedia.org/wiki/Help:Contents User's Guide] para sa impormasyon sa paggamit nin progama kaining wiki.
-
-== Pagpopoon ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Belarusian (беларуская)
- */
-$messages['be'] = array(
-       'mainpagetext' => "'''MediaWiki паспяхова ўсталяваная.'''",
-       'mainpagedocfooter' => 'Гл. [//meta.wikimedia.org/wiki/Help:Contents Дапаможнік карыстальніка (англ.)] па далейшыя звесткі аб карыстанні вікі-праграмамі.
-
-== З чаго пачаць ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Пералік параметраў канфігурацыі (англ.)]
-* [//www.mediawiki.org/wiki/Manual:FAQ ЧАПЫ MediaWiki (англ.)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Ліставанне аб выпусках MediaWiki (англ.)]', # Fuzzy
-);
-
-/** Belarusian (Taraškievica orthography) (беларуская (тарашкевіца)‎)
- * @author EugeneZelenko
- * @author Jim-by
- * @author Wizardist
- * @author Zedlik
- * @author 아라
- */
-$messages['be-tarask'] = array(
-       'config-desc' => 'Праграма ўсталяваньня MediaWiki',
-       'config-title' => 'Усталяваньне MediaWiki $1',
-       'config-information' => 'Інфармацыя',
-       'config-localsettings-upgrade' => 'Выяўлены файл <code>LocalSettings.php</code>.
-Каб абнавіць гэтае усталяваньне, калі ласка, увядзіце значэньне <code>$wgUpgradeKey</code> у полі ніжэй.
-Яго можна знайсьці ў <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Быў знойдзены файл <code>LocalSettings.php</code>.
-Каб зьмяніць гэтае ўсталяваньне, калі ласка, запусьціце <code>update.php</code>',
-       'config-localsettings-key' => 'Ключ паляпшэньня:',
-       'config-localsettings-badkey' => 'Пададзены Вамі ключ зьяўляецца няслушным',
-       'config-upgrade-key-missing' => 'Выяўленае існуючае ўсталяваньне MediaWiki.
-Каб абнавіць гэтае ўсталяваньне, калі ласка, устаўце наступны радок у канец Вашага <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => 'Выглядае, што існуючы <code>LocalSettings.php</code> зьяўляецца няпоўным.
-Не ўстаноўленая пераменная $1.
-Калі ласка, зьмяніце <code>LocalSettings.php</code> так, каб была ўстаноўленая гэтая пераменная, і націсьніце «{{int:Config-continue}}».',
-       'config-localsettings-connection-error' => 'Адбылася памылка падчас злучэньня з базай зьвестак з выкарыстаньнем наладаў, пазначаных у <code>LocalSettings.php</code> ці <code>AdminSettings.php</code>. Калі ласка, выпраўце гэтыя налады і паспрабуйце зноў.
-
-$1',
-       'config-session-error' => 'Памылка стварэньня сэсіі: $1',
-       'config-session-expired' => 'Скончыўся тэрмін дзеяньня зьвестак сэсіі.
-Сэсія мае абмежаваны тэрмін у $1.
-Вы можаце павялічыць яго, зьмяніўшы парамэтар <code>session.gc_maxlifetime</code> у php.ini.
-Перазапусьціце праграму ўсталяваньня.',
-       'config-no-session' => 'Зьвесткі сэсіі згубленыя!
-Праверце php.ini і ўпэўніцеся, што ўстаноўлены слушны шлях у <code>session.save_path</code>.',
-       'config-your-language' => 'Вашая мова:',
-       'config-your-language-help' => 'Выберыце мову для выкарыстаньня падчас усталяваньня.',
-       'config-wiki-language' => 'Мова вікі:',
-       'config-wiki-language-help' => 'Выберыце мову, на якой пераважна будзе пісацца зьмест у вікі.',
-       'config-back' => '← Назад',
-       'config-continue' => 'Далей →',
-       'config-page-language' => 'Мова',
-       'config-page-welcome' => 'Вітаем у MediaWiki!',
-       'config-page-dbconnect' => 'Падключэньне да базы зьвестак',
-       'config-page-upgrade' => 'Абнавіць існуючую ўстаноўку',
-       'config-page-dbsettings' => 'Налады базы зьвестак',
-       'config-page-name' => 'Назва',
-       'config-page-options' => 'Налады',
-       'config-page-install' => 'Усталяваць',
-       'config-page-complete' => 'Зроблена!',
-       'config-page-restart' => 'Пачаць усталяваньне зноў',
-       'config-page-readme' => 'Дадатковыя зьвесткі',
-       'config-page-releasenotes' => 'Заўвагі да выпуску',
-       'config-page-copying' => 'Капіяваньне',
-       'config-page-upgradedoc' => 'Абнаўленьне',
-       'config-page-existingwiki' => 'Існуючая вікі',
-       'config-help-restart' => 'Ці жадаеце выдаліць усе ўведзеныя зьвесткі і пачаць працэс усталяваньня зноў?',
-       'config-restart' => 'Так, пачаць зноў',
-       'config-welcome' => '== Праверка асяродзьдзя ==
-Праверка патрэбная для запэўніваньня, што гэтае асяродзьдзе слушнае для ўсталяваньня MediaWiki.
-Вам патрэбна будзе падаць усе вынікі праверкі, калі спатрэбіцца дапамога падчас усталяваньня.',
-       'config-copyright' => "== Аўтарскае права і ўмовы ==
-
-$1
-
-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 <doclink href=Copying>a copy of the GNU General Public License</doclink> along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. or [http://www.gnu.org/copyleft/gpl.html read it online].",
-       'config-sidebar' => '* [//www.mediawiki.org Хатняя старонка MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents Даведка для ўдзельнікаў]
-* [//www.mediawiki.org/wiki/Manual:Contents Даведка для адміністратараў]
-* [//www.mediawiki.org/wiki/Manual:FAQ Адказы на частыя пытаньні]
-----
-* <doclink href=Readme>Прачытайце</doclink>
-* <doclink href=ReleaseNotes>Паляпшэньні ў вэрсіі</doclink>
-* <doclink href=Copying>Капіяваньне</doclink>
-* <doclink href=UpgradeDoc>Абнаўленьне</doclink>',
-       'config-env-good' => 'Асяродзьдзе было праверанае.
-Вы можаце ўсталёўваць MediaWiki.',
-       'config-env-bad' => 'Асяродзьдзе было праверанае.
-Усталяваньне MediaWiki немагчымае.',
-       'config-env-php' => 'Усталяваны PHP $1.',
-       'config-env-php-toolow' => 'Усталяваны PHP $1.
-Але MediaWiki патрабуе PHP вэрсіі $2 ці навейшай.',
-       'config-unicode-using-utf8' => 'Выкарыстоўваецца бібліятэка Unicode-нармалізацыі Браяна Вібэра',
-       'config-unicode-using-intl' => 'Выкарыстоўваецца [http://pecl.php.net/intl intl пашырэньне з PECL] для Unicode-нармалізацыі',
-       'config-unicode-pure-php-warning' => "'''Папярэджаньне''': [http://pecl.php.net/intl Пашырэньне intl з PECL] — ня слушнае для Unicode-нармалізацыі, цяпер выкарыстоўваецца марудная PHP-рэалізацыя.
-Калі ў Вас сайт з высокай наведваемасьцю, раім пачытаць пра [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-нармалізацыю].",
-       'config-unicode-update-warning' => "'''Папярэджаньне''': усталяваная вэрсія бібліятэкі для Unicode-нармалізацыі выкарыстоўвае састарэлую вэрсію бібліятэкі з [http://site.icu-project.org/ праекту ICU].
-Раім [//www.mediawiki.org/wiki/Unicode_normalization_considerations абнавіць], калі ваш сайт будзе працаваць зь Unicode.",
-       'config-no-db' => 'Немагчыма знайсьці адпаведны драйвэр базы зьвестак. Вам неабходна ўсталяваць драйвэр базы зьвестак для PHP.
-Падтрымліваюцца наступныя тыпы базаў зьвестак: $1.
-
-Калі вы выкарыстоўваеце агульны хостынг, запытайцеся ў свайго хостынг-правайдэра наконт усталяваньня патрабуемага драйвэру базы зьвестак.
-Калі Вы кампілявалі PHP самастойна, пераканфігуруйце і сабярыце яго з дазволеным кліентам базаў зьвестак, напрыклад, <code>./configure --with-mysql</code>.
-Калі Вы ўсталёўвалі PHP з пакетаў Debian ці Ubuntu, то Вам трэба ўсталяваць дадаткова модуль <code>php5-mysql</code>.',
-       'config-outdated-sqlite' => "'''Папярэджаньне''': усталяваны SQLite $1, у той час, калі мінімальная сумяшчальная вэрсія — $2. SQLite ня будзе даступны.",
-       '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' => "'''Фатальная памылка: уключаная опцыя PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!'''
-Гэтая опцыя псуе ўводны паток зьвестак непрадказальным чынам.
-Працяг усталяваньня альбо выкарыстаньне MediaWiki без адключэньня гэтай опцыі немагчымыя.",
-       'config-magic-quotes-sybase' => "'''Фатальная памылка: рэжым [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] уключаны!'''
-Гэты рэжым шкодзіць уваходныя зьвесткі непрадказальным чынам.
-Працяг усталяваньня альбо выкарыстаньне MediaWiki немагчымыя, пакуль рэжым ня будзе выключаны.",
-       'config-mbstring' => "'''Фатальная памылка: рэжым [http://www.php.net/manual/en/ref.info.php#mbstring.overload mbstring.func_overload] уключаны!'''
-Гэты рэжым выклікае памылкі і можа шкодзіць зьвесткі непрадказальным чынам.
-Працяг усталяваньня альбо выкарыстаньне MediaWiki немагчымыя, пакуль рэжым ня будзе выключаны.",
-       'config-ze1' => "'''Фатальная памылка: рэжым [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] уключаны!'''
-Гэтая рэжым стварае вялікія праблемы ў працы MediaWiki.
-Працяг усталяваньня альбо выкарыстаньне MediaWiki немагчымыя, пакуль рэжым ня будзе выключаны.",
-       'config-safe-mode' => "'''Папярэджаньне:''' [http://www.php.net/features.safe-mode бясьпечны рэжым] PHP уключаны.
-Гэта можа выклікаць праблемы, галоўным чынам падчас загрузак файлаў і ў падтрымцы <code>math</code>.",
-       'config-xml-bad' => 'Ня знойдзены модуль XML для PHP.
-MediaWiki патрэбныя функцыі з гэтага модулю, таму MediaWiki ня будзе працаваць у гэтай канфігурацыі.
-Калі Вы выкарыстоўваеце Mandrake, усталюйце пакет php-xml.',
-       'config-pcre' => 'Ня знойдзены модуль падтрымкі PCRE.
-MediaWiki для працы патрабуюцца функцыі рэгулярных выразаў у стылі Perl.',
-       'config-pcre-no-utf8' => "'''Фатальная памылка''': модуль PCRE для PHP скампіляваны без падтрымкі PCRE_UTF8.
-MediaWiki патрабуе падтрымкі UTF-8 для слушнай працы.",
-       'config-memory-raised' => 'Абмежаваньне на даступную для PHP памяць <code>memory_limit</code> было падвышанае з $1 да $2.',
-       'config-memory-bad' => "'''Папярэджаньне:''' памер PHP <code>memory_limit</code> складае $1.
-Верагодна, гэта вельмі мала.
-Усталяваньне можа быць няўдалым!",
-       'config-ctype' => "'''Фатальная памылка''': PHP мусіць быць скампіляваны з падтрымкай [http://www.php.net/manual/en/ctype.installation.php пашырэньня Ctype].",
-       '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-mod-security' => "'''Папярэджаньне''': на Вашым ўэб-сэрверы ўключаны [http://modsecurity.org/ mod_security]. У выпадку няслушнай наладцы, ён можа стаць прычынай праблемаў для MediaWiki ці іншага праграмнага забесьпячэньня, якое дазваляе ўдзельнікам дасылаць на сэрвэр любы зьмест.
-Глядзіце [http://modsecurity.org/documentation/ дакумэнтацыю mod_security] ці зьвярніцеся ў падтрымку Вашага хосту, калі ў Вас узьнікаюць выпадковыя праблемы.",
-       'config-diff3-bad' => 'GNU diff3 ня знойдзены.',
-       'config-git' => 'Знойдзеная сыстэма канстролю вэрсіяў Git: <code>$1</code>',
-       'config-git-bad' => 'Сыстэма кантролю вэрсіяў Git ня знойдзеная.',
-       'config-imagemagick' => 'Знойдзены ImageMagick: <code>$1</code>.
-Пасьля ўключэньня загрузак будзе ўключанае маштабаваньне выяваў.',
-       'config-gd' => 'GD падтрымліваецца ўбудавана.
-Пасьля ўключэньня загрузак будзе ўключанае маштабаваньне выяваў.',
-       'config-no-scaling' => 'Ні GD, ні ImageMagick ня знойдзеныя.
-Маштабаваньне выяваў будзе адключанае.',
-       'config-no-uri' => "'''Памылка:''' Не магчыма вызначыць цяперашні URI.
-Усталяваньне спыненае.",
-       '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> уразьлівая да выкананьня адвольнага коду.
-Хоць MediaWiki і правярае ўсе файлы перад захаваньнем, вельмі рэкамэндуецца [//www.mediawiki.org/wiki/Manual:Security#Upload_security закрыць гэтую ўразьлівасьць] перад уключэньнем магчымасьці загрузкі файлаў.",
-       'config-no-cli-uploads-check' => "'''Папярэджаньне:''' Вашая дырэкторыя для загрузак па змоўчваньні (<code>$1</code>), не правераная на ўразьлівасьць да выкананьня адвольных скрыптоў падчас усталяваньня CLI.
-.",
-       'config-brokenlibxml' => 'У Вашай сыстэме ўсталяваныя PHP і libxml2 зь несумяшчальнымі вэрсіямі, што можа прывесьці да пашкоджаньня зьвестак MediaWiki і іншых ўэб-дастасаваньняў.
-Абнавіце PHP да вэрсіі 5.2.9 ці болей позьняй, а libxml2 да 2.7.3 ці болей позьняй ([//bugs.php.net/bug.php?id=45996 паведамленьне пра памылку на сайце PHP]).
-Усталяваньне перарванае.',
-       'config-using531' => 'PHP $1 не сумяшчальнае з MediaWiki з-за памылкі ў перадачы парамэтраў па ўказальніку да <code>__call()</code>.
-Абнавіце PHP да вэрсіі 5.3.2 ці болей позьняй, ці адкаціце да вэрсіі 5.3.0 каб гэта выправіць.
-Усталяваньне перарванае.',
-       'config-suhosin-max-value-length' => 'Suhosin усталяваны і абмяжоўвае <code>даўжыню</code> парамэтра GET да $1 {{PLURAL:$1|байта|байтаў}}.
-ResourceLoader, складнік MediaWiki, будзе абходзіць гэтае абмежаваньне, што, адаб’ецца на прадукцыйнасьці.
-Калі магчыма, варта ўсталяваць у <code>php.ini</code> <code>suhosin.get.max_value_length</code> роўным 1024 ці больш, а таксама вызначыць тое ж значэньне для <code>$wgResourceLoaderMaxQueryLength</code> у LocalSettings.php.',
-       'config-db-type' => 'Тып базы зьвестак:',
-       'config-db-host' => 'Хост базы зьвестак:',
-       'config-db-host-help' => 'Калі сэрвэр Вашай базы зьвестак знаходзіцца на іншым сэрвэры, увядзіце тут імя хоста ці IP-адрас.
-
-Калі Вы карыстаецеся shared-хостынгам, Ваш хостынг-правайдэр мусіць даць Вам слушнае імя хоста базы зьвестак у сваёй дакумэнтацыі.
-
-Калі Вы усталёўваеце сэрвэр Windows з выкарыстаньнем MySQL, выкарыстаньне «localhost» можа не працаваць для назвы сэрвэра. У гэтым выпадку паспрабуйце пазначыць «127.0.0.1»  для лякальнага IP-адраса.
-
-Калі Вы выкарыстоўваеце PostgreSQL, пакіньце поле пустым, каб далучыцца праз Unix-сокет.',
-       'config-db-host-oracle' => 'TNS базы зьвестак:',
-       'config-db-host-oracle-help' => 'Увядзіце слушнае [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm лякальнае імя злучэньня]; файл tnsnames.ora павінен быць бачным для гэтага ўсталяваньня.<br />Калі Вы выкарыстоўваеце кліенцкія бібліятэкі 10g ці больш новыя, Вы можаце таксама выкарыстоўваць мэтад наданьня назваў [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm лёгкае злучэньне].',
-       'config-db-wiki-settings' => 'Ідэнтыфікацыя гэтай вікі',
-       'config-db-name' => 'Назва базы зьвестак:',
-       'config-db-name-help' => 'Выберыце імя для вызначэньня Вашай вікі.
-Яно ня мусіць зьмяшчаць прагалаў.
-
-Калі Вы набываеце shared-хостынг, Ваш хостынг-правайдэр мусіць надаць Вам ці пэўнае імя базы зьвестак для выкарыстаньня, ці магчымасьць ствараць базы зьвестак праз кантрольную панэль.',
-       'config-db-name-oracle' => 'Схема базы зьвестак:',
-       'config-db-account-oracle-warn' => 'Існуюць тры сцэнары ўсталяваньня Oracle як базы зьвестак для MediaWiki:
-
-Калі Вы жадаеце стварыць рахунак базы зьвестак як частку працэсу ўсталяваньня, калі ласка, падайце рахунак з роляй SYSDBA як рахунак базы зьвестак для ўсталяваньня і пазначце пажаданыя правы рахунку з доступам да Інтэрнэту, у адваротным выпадку Вы можаце таксама стварыць рахунак з доступам да Інтэрнэту ўручную і падаць толькі гэты рахунак (калі патрабуюцца правы для стварэньня схемы аб’ектаў) ці падайце два розных рахункі, адзін з правамі на стварэньне і адзін з абмежаваньнямі для доступу да Інтэрнэту.
-
-Скрыпт для стварэньня рахунку з патрабуемымі правамі можна знайсьці ў дырэкторыі гэтага ўсталяваньня «maintenance/oracle/». Памятайце, што выкарыстаньне рахунку з абмежаваньнямі адключыць усе падтрымліваемыя магчымасьці даступныя па змоўчваньні.',
-       'config-db-install-account' => 'Імя карыстальніка для ўсталяваньня',
-       'config-db-username' => 'Імя карыстальніка базы зьвестак:',
-       'config-db-password' => 'Пароль базы зьвестак:',
-       'config-db-password-empty' => 'Калі ласка, увядзіце пароль для новага карыстальніка базы зьвестак: $1.
-Магчыма стварыць карыстальніка без паролю, але гэта небясьпечна.',
-       'config-db-install-username' => 'Увядзіце імя карыстальніка, якое будзе выкарыстоўвацца для злучэньня з базай зьвестак падчас усталяваньня. Гэта не назва рахунку MediaWiki; гэта імя карыстальніка Вашай базы зьвестак.',
-       'config-db-install-password' => 'Увядзіце пароль, які будзе выкарыстоўвацца для злучэньня з базай зьвестак падчас усталяваньня. Гэта не пароль рахунку MediaWiki; гэта пароль Вашай базы зьвестак.',
-       'config-db-install-help' => 'Увядзіце імя карыстальніка і пароль, якія будуць выкарыстаныя для далучэньня да базы зьвестак падчас працэсу ўсталяваньня.',
-       'config-db-account-lock' => 'Выкарыстоўваць тыя ж імя карыстальніка і пароль пасьля ўсталяваньня',
-       'config-db-wiki-account' => 'Імя карыстальніка для працы',
-       'config-db-wiki-help' => 'Увядзіце імя карыстальніка і пароль, якія будуць выкарыстаныя для далучэньня да базы зьвестак падчас працы (пасьля ўсталяваньня).
-Калі рахунак ня створаны, а рахунак для ўсталяваньня мае значныя правы, гэты рахунак будзе створаны зь мінімальна патрэбнымі для працы вікі правамі.',
-       'config-db-prefix' => 'Прэфікс табліцаў базы зьвестак:',
-       'config-db-prefix-help' => 'Калі Вы разьдзяляеце адну базу зьвестак паміж некалькімі вікі, ці паміж MediaWiki і іншым вэб-дастасаваньнем, можаце вызначыць прэфікс назваў табліцаў для пазьбяганьня канфліктаў.
-Пазьбягайце прагалаў.
-
-Гэтае поле звычайна пакідаецца пустым.',
-       'config-db-charset' => 'Кадаваньне базы зьвестак',
-       '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 UTF-8 з адваротнай сумяшчальнасьцю',
-       'config-charset-help' => "'''Папярэджаньне:''' калі Вы выкарыстоўваеце '''UTF-8 з адваротнай сумяшчальнасьцю''' на MySQL 4.1+ і зробіце рэзэрвовую копію праз <code>mysqldump</code>, ён можа зьнішчыць усе не-ASCII-сымбалі беспаваротна!
-
-У '''бінарным (binary)''' рэжыме MediaWiki захоўвае тэксты ў UTF-8 у палёх тыпу binary.
-Гэты рэжым болей эфэктыўны за рэжым MySQL UTF-8 і дазваляе выкарыстоўваць увесь абсяг сымбаляў Unicode.
-У рэжыме '''UTF-8''' MySQL будзе ведаць, у якім кадаваньне Вы зьмяшчаеце зьвесткі, і будзе вяртаць іх у адпаведным кадаваньні,
-але MySQL ня можа ўтрымліваць сымбалі па-за [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Стандартным шматмоўным пластом] сымбаляў Unicode.",
-       'config-mysql-old' => 'Патрабуецца MySQL $1 ці навейшая, усталяваная вэрсія $2.',
-       'config-db-port' => 'Порт базы зьвестак:',
-       'config-db-schema' => 'Схема для MediaWiki',
-       'config-db-schema-help' => 'Гэтая схема слушная ў большасьці выпадкаў.
-Зьмяняйце яе толькі тады, калі Вы ведаеце, што гэта неабходна.',
-       'config-pg-test-error' => "Немагчыма далучыцца да базы зьвестак '''$1''': $2",
-       'config-sqlite-dir' => 'Дырэкторыя зьвестак SQLite:',
-       'config-sqlite-dir-help' => "SQLite захоўвае ўсе зьвесткі ў адзіным файле.
-
-Пададзеная Вамі дырэкторыя павінна быць даступнай да запісу вэб-сэрвэрам падчас усталяваньня.
-
-Яна '''ня''' мусіць быць даступнай праз Сеціва, вось чаму мы не захоўваем яе ў адным месцы з файламі PHP.
-
-Праграма ўсталяваньня дадаткова створыць файл <code>.htaccess</code>, але калі ён не выкарыстоўваецца, хто заўгодна зможа атрымаць зьвесткі з базы зьвестак.
-Гэта ўключае як прыватныя зьвесткі ўдзельнікаў (адрасы электроннай пошты, хэшы пароляў), гэтак і выдаленыя вэрсіі старонак і іншыя зьвесткі, доступ да якіх маецца абмежаваны.
-
-Падумайце над тым, каб зьмяшчаць базу зьвестак у іншым месцы, напрыклад у <code>/var/lib/mediawiki/yourwiki</code>.",
-       'config-oracle-def-ts' => 'Прастора табліцаў па змоўчваньні:',
-       'config-oracle-temp-ts' => 'Часовая прастора табліцаў:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => 'MediaWiki падтрымлівае наступныя сыстэмы базаў зьвестак:
-
-$1
-
-Калі Вы ня бачыце сыстэму базаў зьвестак, якую Вы спрабуеце выкарыстоўваць ў сьпісе ніжэй, перайдзіце па спасылцы інструкцыі, якая знаходзіцца ніжэй, каб уключыць падтрымку.',
-       'config-support-mysql' => '* $1 зьяўляецца галоўнай мэтай MediaWiki і падтрымліваецца лепей за ўсё ([http://www.php.net/manual/en/mysql.installation.php як кампіляваць PHP з падтрымкай MySQL])',
-       'config-support-postgres' => '* $1 — вядомая сыстэма базы зьвестак з адкрытым кодам, якая зьяўляецца альтэрнатывай MySQL ([http://www.php.net/manual/en/pgsql.installation.php як кампіляваць PHP з падтрымкай PostgreSQL]). Яна можа ўтрымліваць дробныя памылкі, і не рэкамэндуецца выкарыстоўваць яе для працуючых праектаў.',
-       'config-support-sqlite' => '* $1 — невялікая сыстэма базы зьвестак, якая мае вельмі добрую падтрымку. ([http://www.php.net/manual/en/pdo.installation.php як кампіляваць PHP з падтрымкай SQLite], выкарыстоўвае PDO)',
-       'config-support-oracle' => '* $1 зьяўляецца камэрцыйнай прафэсійнай базай зьвестак. ([http://www.php.net/manual/en/oci8.installation.php Як скампіляваць PHP з падтрымкай OCI8])',
-       'config-header-mysql' => 'Налады MySQL',
-       'config-header-postgres' => 'Налады PostgreSQL',
-       'config-header-sqlite' => 'Налады SQLite',
-       'config-header-oracle' => 'Налады Oracle',
-       'config-invalid-db-type' => 'Няслушны тып базы зьвестак',
-       'config-missing-db-name' => 'Вы павінны ўвесьці значэньне парамэтру «Імя базы зьвестак»',
-       'config-missing-db-host' => 'Вы павінны ўвесьці значэньне парамэтру «Хост базы зьвестак»',
-       'config-missing-db-server-oracle' => 'Вы павінны ўвесьці значэньне парамэтру «TNS базы зьвестак»',
-       'config-invalid-db-server-oracle' => 'Няслушнае TNS базы зьвестак «$1».
-Назва можа ўтрымліваць толькі ASCII-літары (a-z, A-Z), лічбы (0-9), сымбалі падкрэсьліваньня(_) і кропкі (.).', # Fuzzy
-       'config-invalid-db-name' => 'Няслушная назва базы зьвестак «$1».
-Назва можа ўтрымліваць толькі ASCII-літары (a-z, A-Z), лічбы (0-9), сымбалі падкрэсьліваньня(_) і працяжнікі (-).',
-       'config-invalid-db-prefix' => 'Няслушны прэфікс базы зьвестак «$1».
-Ён можа зьмяшчаць толькі ASCII-літары (a-z, A-Z), лічбы (0-9), сымбалі падкрэсьліваньня (_) і працяжнікі (-).',
-       'config-connection-error' => '$1.
-
-Праверце хост, імя карыстальніка і пароль ніжэй і паспрабуйце зноў.',
-       'config-invalid-schema' => 'Няслушная схема для MediaWiki «$1».
-Выкарыстоўвайце толькі ASCII-літары (a-z, A-Z), лічбы (0-9) і сымбалі падкрэсьліваньня (_).',
-       'config-db-sys-create-oracle' => 'Праграма ўсталяваньня падтрымлівае толькі выкарыстаньне рахунку SYSDBA для стварэньня новага рахунку.',
-       'config-db-sys-user-exists-oracle' => 'Рахунак карыстальніка «$1» ужо існуе. SYSDBA можа выкарыстоўвацца толькі для стварэньня новых рахункаў!',
-       'config-postgres-old' => 'Патрабуецца PostgreSQL $1 ці навейшая, усталяваная вэрсія $2.',
-       'config-sqlite-name-help' => 'Выберыце назву, якая будзе ідэнтыфікаваць Вашую вікі.
-Не выкарыстоўвайце прагалы ці злучкі.
-Назва будзе выкарыстоўвацца ў назьве файла зьвестак SQLite.',
-       'config-sqlite-parent-unwritable-group' => 'Немагчыма стварыць дырэкторыю зьвестак <code><nowiki>$1</nowiki></code>, таму што бацькоўская дырэкторыя <code><nowiki>$2</nowiki></code> абароненая ад запісаў вэб-сэрвэра.
-
-Праграма ўсталяваньня вызначыла карыстальніка, які запусьціў вэб-сэрвэр.
-Дазвольце запісы ў дырэкторыю <code><nowiki>$3</nowiki></code> для працягу.
-У сыстэме Unix/Linux зрабіце:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Немагчыма стварыць дырэкторыю зьвестак <code><nowiki>$1</nowiki></code>, таму што бацькоўская дырэкторыя <code><nowiki>$2</nowiki></code> абароненая ад запісаў вэб-сэрвэра.
-
-Праграма ўсталяваньня вызначыла карыстальніка, які запусьціў вэб-сэрвэр.
-Дазвольце яму (і іншым) запісы ў дырэкторыю <code><nowiki>$3</nowiki></code> для працягу.
-У сыстэме Unix/Linux зрабіце:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Памылка падчас стварэньня дырэкторыі «$1».
-Праверце шлях і паспрабуйце зноў.',
-       'config-sqlite-dir-unwritable' => 'Запіс у дырэкторыю «$1» немагчымы.
-Зьмяніце налады доступу, каб вэб-сэрвэр меў правы на запіс, і паспрабуйце зноў.',
-       'config-sqlite-connection-error' => '$1.
-
-Праверце дырэкторыю для зьвестак, назву базы зьвестак і паспрабуйце зноў.',
-       'config-sqlite-readonly' => 'Файл <code>$1</code> недаступны для запісу.',
-       'config-sqlite-cant-create-db' => 'Немагчыма стварыць файл базы зьвестак <code>$1</code>.',
-       'config-sqlite-fts3-downgrade' => 'PHP бракуе падтрымкі FTS3 — табліцы пагаршаюцца',
-       'config-can-upgrade' => "У гэтай базе зьвестак ёсьць табліцы MediaWiki.
-Каб абнавіць іх да MediaWiki $1, націсьніце '''Працягнуць'''.",
-       'config-upgrade-done' => "Абнаўленьне завершанае.
-
-Цяпер Вы можаце [$1 пачаць выкарыстаньне вікі].
-
-Калі Вы жадаеце рэгенэраваць <code>LocalSettings.php</code>, націсьніце кнопку ніжэй.
-Гэтае дзеяньне '''не рэкамэндуецца''', калі Вы ня маеце праблемаў у працы вікі.",
-       'config-upgrade-done-no-regenerate' => 'Абнаўленьне скончанае.
-
-Цяпер Вы можаце [$1 пачаць працу з вікі].',
-       'config-regenerate' => 'Рэгенэраваць LocalSettings.php →',
-       'config-show-table-status' => "Запыт '<code>SHOW TABLE STATUS</code>' не атрымаўся!",
-       'config-unknown-collation' => "'''Папярэджаньне:''' база зьвестак выкарыстоўвае нераспазнанае супастаўленьне.",
-       'config-db-web-account' => 'Рахунак базы зьвестак для вэб-доступу',
-       'config-db-web-help' => 'Выберыце імя карыстальніка і пароль, які выкарыстоўваецца вэб-сэрвэрам для злучэньня з сэрвэрам базы зьвестак, падчас звычайных апэрацыяў вікі.',
-       'config-db-web-account-same' => 'Выкарыстоўваць той жа рахунак, што для ўсталяваньня',
-       'config-db-web-create' => 'Стварыць рахунак, калі ён яшчэ не існуе',
-       'config-db-web-no-create-privs' => 'Рахунак, які Вы пазначылі для ўсталяваньня ня мае правоў для стварэньня рахунку.
-Рахунак, які Вы пазначылі тут, мусіць ужо існаваць.',
-       'config-mysql-engine' => 'Рухавік сховішча:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Папярэджаньне''': Вы выбралі MyISAM у якасьці рухавіка для захоўваньня зьвестак у MySQL, які не рэкамэндуецца да выкарыстаньня з MediaWiki па прычынах:
-* кепская падтрымка паралельнай апрацоўкі з-за таблічных блякаваньняў;
-* большая імавернасьць пашкоджаньня зьвестак у параўнаньні зь іншымі рухавікамі;
-* код MediaWiki не ва ўсіх выпадках улічвае асаблівасьці MyISAM.
-
-Калі Ваш MySQL-сэрвэр падтрымлівае InnoDB, вельмі рэкамэндуецца выкарыстаньне менавіта гэтага рухавіка.
-Калі MySQL-сэрвэр не падтрымлівае InnoDB, пэўна, настаў час абнавіць яго.",
-       'config-mysql-engine-help' => "'''InnoDB''' — звычайна найбольш слушны варыянт, таму што добра падтрымлівае паралелізм.
-
-'''MyISAM''' можа быць хутчэйшай у вікі з адным удзельнікам, ці толькі для чытаньня.
-Базы зьвестак на MyISAM вядомыя тым, што ў іх зьвесткі шкодзяцца нашмат часьцей за InnoDB.",
-       'config-mysql-charset' => 'Кадаваньне базы зьвестак:',
-       'config-mysql-binary' => 'Двайковае',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "У '''двайковым рэжыме''', MediaWiki захоўвае тэкст у кадаваньні UTF-8 у базе зьвестак у двайковых палях.
-Гэта болей эфэктыўна за рэжым MySQL UTF-8, і дазваляе Вам выкарыстоўваць увесь дыяпазон сымбаляў Unicode.
-
-У '''рэжыме UTF-8''', MySQL ведае, якая табліцы сымбаляў выкарыстоўваецца ў Вашых зьвестках, і можа адпаведна прадстаўляць і канвэртаваць іх, але гэта не дазволіць Вам захоўваць сымбалі па-за межамі [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Базавага шматмоўнага дыяпазону].",
-       'config-site-name' => 'Назва вікі:',
-       'config-site-name-help' => 'Назва будзе паказвацца ў загалоўку браўзэра і ў некаторых іншых месцах.',
-       'config-site-name-blank' => 'Увядзіце назву сайта.',
-       'config-project-namespace' => 'Прастора назваў праекту:',
-       'config-ns-generic' => 'Праект',
-       'config-ns-site-name' => 'Такая ж, як і назва вікі: $1',
-       'config-ns-other' => 'Іншая (вызначце)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-project-namespace-help' => "Па прыкладу Вікіпэдыі, шматлікія вікі трымаюць уласныя старонкі з правіламі асобна ад старонак са зьместам, у «'''прасторы назваў праекту'''».
-Усе назвы старонак у гэтай прасторы назваў пачынаюцца з прыстаўкі, якую Вы можаце пазначыць тут.
-Традыцыйна, гэтая прыстаўка вытворная ад назвы вікі, яле яна ня можа ўтрымліваць некаторыя сымбалі, такія як «#» ці «:».",
-       'config-ns-invalid' => 'Пададзеная няслушная прастора назваў «<nowiki>$1</nowiki>».
-Падайце іншую прастору назваў праекту.',
-       'config-ns-conflict' => 'Пазначаная прастора назваў «<nowiki>$1</nowiki>» канфліктуе з прасторай назваў MediaWiki па змоўчваньні.
-Пазначце іншую прастору назваў праекту.',
-       'config-admin-box' => 'Рахунак адміністратара',
-       'config-admin-name' => 'Вашае імя:',
-       'config-admin-password' => 'Пароль:',
-       'config-admin-password-confirm' => 'Пароль яшчэ раз:',
-       'config-admin-help' => 'Увядзіце тут Вашае імя ўдзельніка, напрыклад «Янка Кавалевіч».
-Гэтае імя будзе выкарыстоўвацца для ўваходу ў вікі.',
-       'config-admin-name-blank' => 'Увядзіце імя адміністратара.',
-       'config-admin-name-invalid' => 'Пададзенае няслушнае імя ўдзельніка «<nowiki>$1</nowiki>».
-Падайце іншае імя ўдзельніка.',
-       'config-admin-password-blank' => 'Увядзіце пароль рахунку адміністратара.',
-       'config-admin-password-same' => 'Пароль ня можа быць аднолькавым зь іменем удзельніка.',
-       'config-admin-password-mismatch' => 'Уведзеныя Вамі паролі не супадаюць.',
-       'config-admin-email' => 'Адрас электроннай пошты:',
-       'config-admin-email-help' => 'Увядзіце тут адрас электроннай пошты, каб атрымліваць электронныя лісты ад іншых удзельнікаў вікі, скідваць Ваш пароль і атрымліваць абвешчаньні пра зьмены старонак, якія знаходзяцца ў Вашым сьпісе назіраньня. Вы можаце пакінуць гэтае поле пустым.',
-       'config-admin-error-user' => 'Унутраная памылка падчас стварэньня рахунку адміністратара зь іменем «<nowiki>$1</nowiki>».',
-       'config-admin-error-password' => 'Унутраная памылка падчас устаноўкі паролю для адміністратара «<nowiki>$1</nowiki>»: <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Вы ўвялі няслушны адрас электроннай пошты',
-       'config-subscribe' => 'Падпісацца на [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce сьпіс распаўсюджаньня навінаў пра зьяўленьне новых вэрсіяў].',
-       'config-subscribe-help' => 'Гэта ня вельмі актыўны сьпіс распаўсюджаньня навінаў пра зьяўленьне новых вэрсіяў, які ўключаючы важныя навіны пра бясьпеку.
-Вам неабходна падпісацца на яго і абнавіць Вашае ўсталяваньне MediaWiki, калі зьявяцца новыя вэрсіі.',
-       'config-subscribe-noemail' => 'Вы спрабавалі падпісацца на рассылку паведамленьняў пра выхад новых вэрсіяў, не пазначыўшы адрас электроннай пошты.
-Калі ласка, падайце слушны адрас, калі Вы жадаеце падпісацца на рассылку.',
-       'config-almost-done' => 'Вы амаль што скончылі!
-Астатнія налады можна прапусьціць і пачаць усталяваньне вікі.',
-       'config-optional-continue' => 'Задаць болей пытаньняў.',
-       'config-optional-skip' => 'Хопіць, проста ўсталяваць вікі.',
-       'config-profile' => 'Профіль правоў удзельніка:',
-       'config-profile-wiki' => 'Адкрытая вікі',
-       'config-profile-no-anon' => 'Патрэбнае стварэньне рахунку',
-       'config-profile-fishbowl' => 'Толькі для аўтарызаваных рэдактараў',
-       'config-profile-private' => 'Прыватная вікі',
-       'config-profile-help' => "Вікі працуюць лепей, калі Вы дазваляеце як мага большай колькасьці людзей рэдагаваць яе.
-У MediaWiki вельмі лёгка праглядаць апошнія зьмены і выпраўляць любыя пашкоджаньні зробленыя недасьведчанымі ўдзельнікамі альбо вандаламі.
-
-Тым ня менш, многія лічаць, што MediaWiki можа быць карыснай ў шматлікіх іншых ролях, і часта вельмі нялёгка растлумачыць усім перавагі выкарыстаньня тэхналёгіяў вікі.
-Таму Вы маеце выбар.
-
-'''{{int:config-profile-wiki}}''' дазваляе рэдагаваць усім, нават без уваходу ў сыстэму.
-Вікі з '''{{int:config-profile-no-anon}}''' дазваляе дадатковую адказнасьць, але можа адштурхнуць некаторых патэнцыйных удзельнікаў.
-
-Сцэнар '''{{int:config-profile-fishbowl}}''' дазваляе рэдагаваць зацьверджаным удзельнікам, але ўсе могуць праглядаць старонкі іх гісторыю.
-'''{{int:config-profile-private}}''' дазваляе праглядаць і рэдагаваць старонкі толькі зацьверджаным удзельнікам.
-
-Больш складаныя правы ўдзельнікаў даступныя пасьля ўсталяваньня, глядзіце [//www.mediawiki.org/wiki/Manual:User_rights адпаведную старонку дакумэнтацыі].", # Fuzzy
-       'config-license' => 'Аўтарскія правы і ліцэнзія:',
-       'config-license-none' => 'Без інфармацыі пра ліцэнзію',
-       'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
-       'config-license-cc-by' => 'Creative Commons Attribution',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
-       'config-license-cc-0' => 'Creative Commons Zero (грамадзкі набытак)',
-       'config-license-gfdl' => 'GNU Free Documentation License 1.3 ці болей позьняя',
-       'config-license-pd' => 'Грамадзкі набытак',
-       'config-license-cc-choose' => 'Выберыце іншую ліцэнзію Creative Commons',
-       'config-license-help' => "Шматлікія адкрытыя вікі публікуюць увесь унёсак у праект на ўмовах [http://freedomdefined.org/Definition вольнай ліцэнзіі].
-Гэта дазваляе ствараць эфэкт супольнай уласнасьці і садзейнічае доўгатэрміноваму ўнёску.
-Для прыватных і карпаратыўных вікі гэта не зьяўляецца неабходнасьцю.
-
-Калі Вы жадаеце выкарыстоўваць тэкст зь Вікіпэдыі, і жадаеце, каб Вікіпэдыя магла прымаць тэксты, скапіяваныя з Вашай вікі, Вам неабходна выбраць ліцэнзію '''Creative Commons Attribution Share Alike'''.
-
-Раней Вікіпэдыя выкарыстоўвала ліцэнзію GNU Free Documentation.
-Яна ўсё яшчэ дзейнічае, але яна ўтрымлівае некаторыя моманты,
-якія ўскладняюць паўторнае выкарыстоўваньне і інтэрпрэтацыю матэрыялаў.",
-       'config-email-settings' => 'Налады электроннай пошты',
-       'config-enable-email' => 'Дазволіць выходзячыя электронныя лісты',
-       'config-enable-email-help' => 'Калі Вы жадаеце, каб працавала электронная пошта, неабходна сканфігураваць PHP [http://www.php.net/manual/en/mail.configuration.php адпаведным чынам].
-Калі Вы не жадаеце выкарыстоўваць магчымасьці электроннай пошты, Вы можаце яе адключыць.',
-       'config-email-user' => 'Дазволіць электронную пошту для сувязі паміж удзельнікамі',
-       'config-email-user-help' => 'Дазволіць усім удзельнікам дасылаць адзін аднаму электронныя лісты, калі ўключаная адпаведная магчымасьць ў іх наладах.',
-       'config-email-usertalk' => 'Уключыць абвяшчэньні пра паведамленьні на старонцы абмеркаваньня',
-       'config-email-usertalk-help' => 'Дазваляе ўдзельнікам атрымліваць абвяшчэньні пра зьмены на старонцы абмеркаваньня, калі гэтая магчымасьць уключаная ў іх наладах.',
-       'config-email-watchlist' => 'Уключыць абвяшчэньні пра зьмены ў сьпісе назіраньня',
-       'config-email-watchlist-help' => 'Дазваляе ўдзельнікам атрымліваць абвяшчэньні пра зьмены ў іх сьпісе назіраньня, калі гэтая магчымасьць уключаная ў іх наладах.',
-       'config-email-auth' => 'Уключыць аўтэнтыфікацыю праз электронную пошту',
-       'config-email-auth-help' => "Калі гэтая магчымасьць уключаная, удзельнікі павінны пацьвердзіць іх адрас электроннай пошты праз спасылку, якая дасылаецца ім праз электронную пошту. Яна дасылаецца і падчас зьмены адрасу электроннай пошты.
-Толькі аўтэнтыфікаваныя адрасы электроннай пошты могуць атрымліваць электронныя лісты ад іншых удзельнікаў, ці зьмяняць абвяшчэньні дасылаемыя праз электронную пошту.
-Уключэньне гэтай магчымасьці '''рэкамэндуецца'''  для адкрытых вікі, з-за магчымых злоўжываньняў магчымасьцямі электроннай пошты.",
-       'config-email-sender' => 'Адрас электроннай пошты для вяртаньня:',
-       'config-email-sender-help' => 'Увядзіце адрас электроннай пошты для вяртаньня ў якасьці адрасу дасылаемых электронных лістоў.
-Сюды будуць дасылацца неатрыманыя электронныя лісты.
-Шматлікія паштовыя сэрвэры патрабуюць, каб хаця б назва дамэну была слушнай.',
-       'config-upload-settings' => 'Загрузкі выяваў і файлаў',
-       'config-upload-enable' => 'Дазволіць загрузку файлаў',
-       'config-upload-help' => 'Дазвол загрузкі файлаў можа патэнцыйна пагражаць бясьпекі сэрвэра.
-Дадатковую інфармацыю можна атрымаць ў [//www.mediawiki.org/wiki/Manual:Security разьдзеле бясьпекі].
-
-Каб дазволіць загрузку файлаў, зьмяніце рэжым падкаталёга <code>images</code> у карэннай дырэкторыі MediaWiki так, каб ўэб-сэрвэр меў доступ на запіс.
-Потым дазвольце гэтую магчымасьць.',
-       'config-upload-deleted' => 'Дырэкторыя для выдаленых файлаў:',
-       'config-upload-deleted-help' => 'Выберыце дырэкторыю, у якой будуць захоўвацца выдаленыя файлы.
-У ідэальным выпадку, яна не павінна мець доступу з Інтэрнэту.',
-       'config-logo' => 'URL-адрас лягатыпу:',
-       'config-logo-help' => 'Афармленьне MediaWiki па змоўчваньні уключае прастору для лягатыпу памерам 135×160 піксэляў у верхнім левым куце.
-Загрузіце выяву адпаведнага памеру і увядзіце тут URL-адрас.
-
-Калі Вы не жадаеце мець ніякага лягатыпу, пакіньце поле пустым.', # Fuzzy
-       'config-instantcommons' => 'Дазволіць Instant Commons',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] — магчымасьць, якая дазваляе вікі выкарыстоўваць выявы, гукі і іншыя мэдыя, якія знаходзяцца на сайце [//commons.wikimedia.org/ Wikimedia Commons].
-Каб гэта зрабіць, MediaWiki патрабуе доступу да Інтэрнэту.
-
-Каб даведацца болей пра гэтую магчымасьць, уключаючы інструкцыю пра тое, як яе ўстанавіць ў любой вікі, акрамя Wikimedia Commons, глядзіце [//mediawiki.org/wiki/Manual:$wgForeignFileRepos дакумэнтацыю].',
-       'config-cc-error' => 'Выбар ліцэнзіі Creative Commons ня даў вынікаў.
-Увядзіце назву ліцэнзіі ўручную.',
-       'config-cc-again' => 'Выберыце яшчэ раз…',
-       'config-cc-not-chosen' => 'Выберыце, якую ліцэнзію Creative Commons Вы жадаеце выкарыстоўваць і націсьніце «працягваць».',
-       'config-advanced-settings' => 'Дадатковыя налады',
-       'config-cache-options' => 'Налады кэшаваньня аб’ектаў:',
-       'config-cache-help' => 'Кэшаваньне аб’ектаў павялічвае хуткасьць працы MediaWiki праз кэшаваньне зьвестак, якія часта выкарыстоўваюцца.
-Вельмі рэкамэндуем уключыць гэта для сярэдніх і буйных сайтаў, таксама будзе карысна для дробных сайтаў.',
-       'config-cache-none' => 'Без кэшаваньня (ніякія магчымасьці не страчваюцца, але хуткасьць працы буйных сайтаў можа зьнізіцца)',
-       'config-cache-accel' => 'Кэшаваньне аб’ектаў PHP (APC, XCache ці WinCache)',
-       'config-cache-memcached' => 'Выкарыстоўваць Memcached (патрабуе дадатковай канфігурацыі)',
-       'config-memcached-servers' => 'Сэрвэры memcached:',
-       'config-memcached-help' => 'Сьпіс IP-адрасоў, якія будуць выкарыстоўвацца Memcached.
-Адрасы павінны быць у асобным радку з пазначэньнем порту, які будзе выкарыстоўвацца. Напрыклад:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => 'Вы выбралі Memcached у якасьці тыпу Вашага кэша, але не пазначылі ніякага сэрвэра',
-       'config-memcache-badip' => 'Вы ўвялі няслушны IP-адрас для Memcached: $1',
-       'config-memcache-noport' => 'Вы не пазначылі порт для выкарыстаньня сэрвэрам Memcached: $1.
-Калі Вы ня ведаеце порт, то па змоўчваньні выкарыстоўваецца 11211',
-       'config-memcache-badport' => 'Нумар порту Memcached павінен быць паміж $1 і $2',
-       'config-extensions' => 'Пашырэньні',
-       'config-extensions-help' => 'Пашырэньні пададзеныя вышэй, былі знойдзеныя ў Вашай дырэкторыі <code>./extensions</code>.
-
-Яны могуць патрабаваць дадатковых наладаў, але іх можна ўключыць зараз',
-       'config-install-alreadydone' => "'''Папярэджаньне:''' здаецца, што Вы ўжо ўсталёўвалі MediaWiki і спрабуеце зрабіць гэтай зноў.
-Калі ласка, перайдзіце на наступную старонку.",
-       'config-install-begin' => 'Пасьля націску кнопкі «{{int:config-continue}}» пачнецца ўсталяваньне MediaWiki.
-Калі Вы жадаеце што-небудзь зьмяніць, націсьніце кнопку «Вярнуцца».', # Fuzzy
-       'config-install-step-done' => 'зроблена',
-       'config-install-step-failed' => 'не атрымалася',
-       'config-install-extensions' => 'Уключаючы пашырэньні',
-       'config-install-database' => 'Налада базы зьвестак',
-       'config-install-schema' => 'Стварэньне схемы',
-       'config-install-pg-schema-not-exist' => 'Схема PostgreSQL не існуе',
-       'config-install-pg-schema-failed' => 'Немагчыма стварыць табліцу.
-Упэўніцеся, што карыстальнік «$1» можа пісаць у схему «$2».',
-       'config-install-pg-commit' => 'Захаваньне зьменаў',
-       'config-install-pg-plpgsql' => 'Праверка падтрымкі мовы PL/pgSQL',
-       'config-pg-no-plpgsql' => 'Вам неабходна ўсталяваць падтрымку мовы PL/pgSQL у базе зьвестак $1',
-       'config-pg-no-create-privs' => 'Рахунак, які Вы пазначылі для ўсталяваньня ня мае дастаткова правоў для стварэньня рахунку.',
-       'config-pg-not-in-role' => 'Пазначаны Вамі рахунак для ўэб-карыстальніка ўжо існуе.
-Пазначаны Вамі рахунак для ўсталяваньня ня мае правоў і не зьяўляецца сябрам ролі ўэб-карыстальніка, таму немагчыма стварыць аб’екты, якія належаць ўэб-карыстальніку.
-
-Цяпер MediaWiki патрабуе, каб табліцы належалі да ўэб-карыстальніку. Калі ласка, пазначце іншы рахунак, ці націсьніце кнопку «Вярнуцца» і пазначце карыстальніка з неабходнымі для ўсталяваньня правамі.',
-       'config-install-user' => 'Стварэньне карыстальніка базы зьвестак',
-       'config-install-user-alreadyexists' => 'Удзельнік «$1» ужо існуе',
-       'config-install-user-create-failed' => 'Немагчыма стварыць ўдзельніка «$1»: $2',
-       'config-install-user-grant-failed' => 'Немагчыма даць правы удзельніку «$1»: $2',
-       'config-install-user-missing' => 'Пазначаны карыстальнік «$1» не існуе.',
-       'config-install-user-missing-create' => 'Пазначаны карыстальнік «$1» не існуе.
-Калі ласка, пазначце «стварыць рахунак», калі Вы жадаеце яго стварыць.',
-       'config-install-tables' => 'Стварэньне табліцаў',
-       '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-stats' => 'Ініцыялізацыі статыстыкі',
-       'config-install-keys' => 'Стварэньне сакрэтных ключоў',
-       'config-insecure-keys' => "'''Папярэджаньне:''' {{PLURAL:$2|Ключ бясьпекі $1 створаны|Ключы бясьпекі $1 створаныя}} падчас усталяваньня, не зьяўляюцца поўнасьцю бясьпечнымі. Рэкамэндуецца зьмяніць {{PLURAL:$2|яго ўручную|іх уручную}}.",
-       'config-install-sysop' => 'Стварэньне рахунку адміністратара',
-       'config-install-subscribe-fail' => 'Немагчыма падпісацца на «mediawiki-announce»: $1',
-       'config-install-subscribe-notpossible' => 'cURL не ўсталяваны, allow_url_fopen недаступны.',
-       'config-install-mainpage' => 'Стварэньне галоўнай старонкі са зьместам па змоўчваньні',
-       'config-install-extension-tables' => 'Стварэньне табліцаў для ўключаных пашырэньняў',
-       'config-install-mainpage-failed' => 'Немагчыма ўставіць галоўную старонку: $1',
-       'config-install-done' => "'''Віншуем!'''
-Вы пасьпяхова ўсталявалі MediaWiki.
-
-Праграма ўсталяваньня стварыла файл <code>LocalSettings.php</code>.
-Ён утрымлівае ўсе Вашыя налады.
-
-Вам неабходна загрузіць яго і захаваць у карэнную дырэкторыю Вашай вікі (у тую ж самую дырэкторыю, дзе знаходзіцца index.php). Загрузка павінна пачацца аўтаматычна.
-
-Калі загрузка не пачалася, ці Вы яе адмянілі, Вы можаце перазапусьціць яе націснуўшы на спасылку ніжэй:
-
-$3
-
-'''Заўвага''': калі Вы гэтага ня зробіце зараз, то створаны файл ня будзе даступны Вам потым, калі Вы выйдзеце з праграмы ўсталяваньня  без яго загрузкі.
-
-Калі Вы гэта зробіце, Вы можаце '''[$2 ўвайсьці ў Вашую вікі]'''.",
-       'config-download-localsettings' => 'Загрузіць <code>LocalSettings.php</code>',
-       'config-help' => 'дапамога',
-       'config-nofile' => 'Файл «$1» ня знойдзены. Ці быў ён выдалены?',
-       'mainpagetext' => "'''MediaWiki пасьпяхова ўсталяваная.'''",
-       'mainpagedocfooter' => 'Глядзіце [//meta.wikimedia.org/wiki/Help:Contents дапаможнік карыстальніка] для атрыманьня інфармацыі па карыстаньні вікі-праграмамі.
-
-== З чаго пачаць ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Сьпіс парамэтраў канфігурацыі]
-* [//www.mediawiki.org/wiki/Manual:FAQ Частыя пытаньні MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка паведамленьняў пра зьяўленьне новых вэрсіяў MediaWiki]', # Fuzzy
-);
-
-/** Bulgarian (български)
- * @author DCLXVI
- * @author 아라
- */
-$messages['bg'] = array(
-       'config-desc' => 'Инсталатор на МедияУики',
-       'config-title' => 'Инсталиране на МедияУики $1',
-       'config-information' => 'Информация',
-       'config-localsettings-upgrade' => 'Беше открит файл <code>LocalSettings.php</code>.
-За надграждане на съществуващата инсталация, необходимо е в кутията по-долу да се въведе стойността на <code>$wgUpgradeKey</code>.
-Тази информация е налична в <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Беше открит файл <code>LocalSettings.php</code>.
-За надграждане на наличната инсталация, необходимо е да се стартира <code>update.php</code>',
-       'config-localsettings-key' => 'Ключ за надграждане:',
-       'config-localsettings-badkey' => 'Предоставеният ключ е неправилен.',
-       'config-upgrade-key-missing' => 'Беше открита съществуваща инсталация на МедияУики.
-За надграждане на съществуващата инсталация, необходимо е да се постави следният ред в края на файла <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => 'Съществуващият файл <code>LocalSettings.php</code> изглежда непълен.
-Променливата $1 не е зададена.
-Необходимо е да се редактира файлът <code>LocalSettings.php</code> и да се зададе променливата, след което да се натисне „{{int:Config-continue}}“.',
-       'config-localsettings-connection-error' => 'Възникна грешка при свързване с базата от данни чрез данните, посочени в <code>LocalSettings.php</code> или <code>AdminSettings.php</code>. Необходимо е да се коригират тези настройки преди повторен опит за свързване.
-
-$1',
-       'config-session-error' => 'Грешка при създаване на сесия: $1',
-       'config-session-expired' => 'Срокът на валидност на данните от сесията са изтекли.
-Продължителността на сесиите е настроена на $1.
-Това може да бъде увеличено чрез настройване на <code>session.gc_maxlifetime</code> в php.ini.
-Необходимо е рестартиране на инсталационния процес.',
-       'config-no-session' => 'Данните за сесията бяха загубени!
-Проверете вашия php.ini и се уверете, че на <code>session.save_path</code> е настроена подходящата директория.',
-       'config-your-language' => 'Вашият език:',
-       'config-your-language-help' => 'Избиране на език за използване по време на инсталацията.',
-       'config-wiki-language' => 'Език на уикито:',
-       'config-wiki-language-help' => 'Избиране на език, на който ще е основното съдържание на уикито.',
-       'config-back' => '← Връщане',
-       'config-continue' => 'Продължаване →',
-       'config-page-language' => 'Език',
-       'config-page-welcome' => 'Добре дошли в МедияУики!',
-       'config-page-dbconnect' => 'Свързване с базата от данни',
-       'config-page-upgrade' => 'Надграждане на съществуваща инсталация',
-       'config-page-dbsettings' => 'Настройки на базата от данни',
-       'config-page-name' => 'Име',
-       'config-page-options' => 'Настройки',
-       'config-page-install' => 'Инсталиране',
-       'config-page-complete' => 'Готово!',
-       'config-page-restart' => 'Рестартиране на инсталацията',
-       'config-page-readme' => 'Информация за софтуера',
-       'config-page-releasenotes' => 'Бележки за версията',
-       'config-page-copying' => 'Лицензно споразумение',
-       'config-page-upgradedoc' => 'Надграждане',
-       'config-page-existingwiki' => 'Съществуващо уики',
-       'config-help-restart' => 'Необходимо е потвърждение за изтриване на всички въведени и съхранени данни и започване отначало на процеса по инсталация.',
-       'config-restart' => 'Да, започване отначало',
-       'config-welcome' => '=== Проверка на средата ===
-Извършени бяха основни проверки, за да се провери дали средата е подходяща за инсталиране на МедияУики.
-Ако е необходима помощ по време на инсталацията, резултатите от направените проверки трябва също да бъдат предоставени.',
-       'config-copyright' => "=== Авторски права и Условия ===
-
-$1
-
-Тази програма е свободен софтуер, който може да се променя и/или разпространява според Общия публичен лиценз на GNU, както е публикуван от Free Software Foundation във версия на Лиценза 2 или по-късна версия.
-
-Тази програма се разпространява с надеждата, че ще е полезна, но '''без каквито и да е гаранции'''; без дори косвена гаранция за '''продаваемост''' или '''прогодност за конкретна употреба'''.
-За повече подробности се препоръчва преглеждането на Общия публичен лиценз на GNU.
-
-Към програмата трябва да е приложено <doclink href=Copying>копие на Общия публичен лиценз на GNU</doclink>; ако не, можете да пишете на Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. или да [http://www.gnu.org/copyleft/gpl.html го прочетете онлайн].",
-       'config-sidebar' => '* [//www.mediawiki.org Сайт на МедияУики]
-* [//www.mediawiki.org/wiki/Help:Contents Наръчник на потребителя]
-* [//www.mediawiki.org/wiki/Manual:Contents Наръчник на администратора]
-* [//www.mediawiki.org/wiki/Manual:FAQ ЧЗВ]
-----
-* <doclink href=Readme>Документация</doclink>
-* <doclink href=ReleaseNotes>Бележки за версията</doclink>
-* <doclink href=Copying>Авторски права</doclink>
-* <doclink href=UpgradeDoc>Обновяване</doclink>',
-       'config-env-good' => 'Средата беше проверена.
-Инсталирането на МедияУики е възможно.',
-       'config-env-bad' => 'Средата беше проверена.
-Не е възможна инсталация на МедияУики.',
-       'config-env-php' => 'Инсталирана е версия на PHP $1.',
-       'config-env-php-toolow' => 'Инсталирана е версия на PHP $1.
-МедияУики изисква версия PHP $2 или по-нова.',
-       'config-unicode-using-utf8' => 'Използване на utf8_normalize.so от Brion Vibber за нормализация на Уникод.',
-       'config-unicode-using-intl' => 'Използване на разширението [http://pecl.php.net/intl intl PECL] за нормализация на Уникод.',
-       'config-unicode-pure-php-warning' => "'''Предупреждение''': [http://pecl.php.net/intl Разширението intl PECL] не е налично за справяне с нормализацията на Уникод, превключване към по-бавното изпълнение на чист PHP.
-Ако сайтът е с голям трафик, препоръчително е запознаването с [//www.mediawiki.org/wiki/Unicode_normalization_considerations нормализацията на Уникод].",
-       'config-unicode-update-warning' => "'''Предупреждение''': Инсталираната версия на Обвивката за нормализация на Unicode използва по-старата версия на библиотеката на [http://site.icu-project.org/ проекта ICU].
-Необходимо е да [//www.mediawiki.org/wiki/Unicode_normalization_considerations инсталирате по-нова верия], в случай че сте загрижени за използването на Unicode.",
-       'config-no-db' => 'Не може да бъде открит подходящ драйвер за база от данни! Необходимо е да се инсталира драйвер за база от данни за PHP.
-Поддържат се следните типове базни от данни: $1.
-
-Ако използвате споделен хостинг, помолете доставчика на услугата да инсталира подходящ драйвер за база от данни.
-Ако сами сте компилирали PHP, преконфигурирайте го с включен клиент за база от данни, например чрез използване на <code>./configure --with-mysql</code>.
-Ако сте инсталирали PHP от пакет за Debian или Убунту, необходимо е, също така, да инсталирате и модула php5-mysql.',
-       'config-no-fts3' => "'''Предупреждение''': SQLite е компилирана без [//sqlite.org/fts3.html модула FTS3], затова възможностите за търсене няма да са достъпни.",
-       'config-register-globals' => "'''Предупреждение: Настройката на PHP <code>[http://php.net/register_globals register_globals]</code> е включена.'''
-'''При възможност е препоръчително тя да бъде изключена.'''
-МедияУики ще работи, но сървърът е изложен на евентуални пропуски в сигурността.",
-       'config-magic-quotes-runtime' => "'''Фатално: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] е активирана!'''
-Това може да повреди непредвидимо въвеждането на данните.
-Инсталацията на МедияУики е невъзможна докато тази настройка не бъде изключена.",
-       'config-magic-quotes-sybase' => "'''Фатално: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] е активирана!'''
-Това може да повреди непредвидимо въвеждането на данните.
-Инсталацията на МедияУики е невъзможна докато тази настройка не бъде изключена.",
-       'config-mbstring' => "'''Фатално: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] е активирана!'''
-Това може да повреди непредвидимо въвеждането на данните.
-Инсталацията на МедияУики е невъзможна докато тази настройка не бъде изключена.",
-       'config-ze1' => "'''Фатално: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] е активирана!'''
-Тази настройка причинява ужасни грешки в МедияУики.
-Невъзможно е инсталирането и използването на МедияУики докато тази настройка не бъде изключена.",
-       'config-safe-mode' => "'''Предупреждение:''' PHP работи в [http://www.php.net/features.safe-mode безопасен режим].
-Това може да създаде проблеми, особено ако качването на файлове е разрешено, както и при поддръжката на <code>math</code>.",
-       'config-xml-bad' => 'Липсва XML модулът на PHP.
-МедияУики се нуждае от някои функции от този модул и няма да работи при наличната конфигурация.
-При Mandrake, необходимо е да се инсталира пакетът php-xml.',
-       'config-pcre' => 'Липсва модулът PCRE.
-За да работи, МедияУики изисква съвместими с Perl функии за регилярни изрази.',
-       'config-pcre-no-utf8' => "'''Фатално''': Модулът PCRE на PHP изглежда е компилиран без поддръжка на PCRE_UTF8.
-За да функционира правилно, МедияУики изисква поддръжка на UTF-8.",
-       'config-memory-raised' => '<code>memory_limit</code> на PHP е $1, увеличаване до $2.',
-       'config-memory-bad' => "'''Предупреждение:''' <code>memory_limit</code> на PHP е $1.
-Стойността вероятно е твърде ниска.
-Възможно е инсталацията да се провали!",
-       'config-ctype' => "'''Фатално''': Необходимо е PHP да бъде компилиран с поддръжка на [http://www.php.net/manual/en/ctype.installation.php разширението Ctype].",
-       '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-diff3-bad' => 'GNU diff3 не беше намерен.',
-       'config-imagemagick' => 'Открит е ImageMagick: <code>$1</code>.
-Преоразмеряването на картинки ще бъде включено ако качването на файлове бъде разрешено.',
-       'config-gd' => 'Открита е вградена графичната библиотека GD.
-Ако качването на файлове бъде включено, ще бъде включена възможността за преоразмеряване на картинки.',
-       'config-no-scaling' => 'Не са открити библиотеките GD или ImageMagick.
-Преоразмеряването на картинки ще бъде изключено.',
-       'config-no-uri' => "'''Грешка:''' Не може да се определи текущия адрес.
-Инсталация беше прекратена.",
-       'config-using-server' => 'Използване на сървърното име "<nowiki>$1</nowiki>".',
-       'config-using-uri' => 'Използване на сървърния адрес (URL) "<nowiki>$1$2</nowiki>".',
-       'config-uploads-not-safe' => "'''Предупреждение:''' Папката по подразбиране за качване <code>$1</code> е уязвима от изпълнение на зловредни скриптове.
-Въпреки че МедияУики извършва проверка за заплахи в сигурността на всички качени файлове, силно препоръчително е да се [//www.mediawiki.org/wiki/Manual:Security#Upload_security затвори тази уязвимост в сигурността] преди разрешаване за качване на файлове.",
-       'config-brokenlibxml' => 'Вашата система използа комбинация от версии на PHP и libxml2, които са с много грешки и могат да причинят скрити повреди на данните в МедияУики или други уеб приложения.
-Необходимо е обновяване до PHP 5.2.9 или по-нова версия и libxml2 2.7.3 или по-нова версия ([//bugs.php.net/bug.php?id=45996 докладвана грешка при PHP]).
-Инсталацията беше прекратена.',
-       'config-using531' => 'МедияУики не може да се използва с PHP $1 заради проблем с референтните параметри за <code>__call()</code>.
-За разрешаване на този проблем е необходимо да се обнови до PHP 5.3.2 или по-нова версия или да се инсталира по-стара версия, напр. PHP 5.3.0.
-Инсталацията беше прекратена.',
-       'config-suhosin-max-value-length' => 'Suhosin е инсталиран и ограничава дължината на параметъра GET на $1 байта. Компонентът на МедияУики ResourceLoader ще може да пренебрегне частично това ограничение, но това ще намали производителността. По възможност е препоръчително да се настрои <code>suhosin.get.max_value_length</code> на 1024 или по-голяма стойност в <code>php.ini</code> и в LocalSettings.php да се настрои <code>$wgResourceLoaderMaxQueryLength</code> със същата стойност.', # Fuzzy
-       'config-db-type' => 'Тип на базата от данни:',
-       'config-db-host' => 'Хост на базата от данни:',
-       'config-db-host-help' => 'Ако базата от данни е на друг сървър, в кутията се въвежда името на хоста или IP адреса.
-
-Ако се използва споделен уеб хостинг, доставчикът на услугата би трябвало да е предоставил в документацията си коректния хост.
-
-Ако инсталацията протича на Windows-сървър и се използва MySQL, използването на "localhost" може да е неприемливо. В такива случаи се използва "127.0.0.1" за локален IP адрес.
-
-При използване на PostgreSQL, това поле се оставя празно, за свързване чрез Unix socket.',
-       'config-db-host-oracle' => 'TNS на базата данни:',
-       'config-db-wiki-settings' => 'Идентифициране на това уики',
-       'config-db-name' => 'Име на базата от данни:',
-       'config-db-name-help' => 'Избира се име, което да идентифицира уикито.
-То не трябва да съдържа интервали.
-
-Ако се използва споделен хостинг, доставчикът на услугата би трябвало да е предоставил или име на базата от данни, която да бъде използвана, или да позволява създаването на бази от данни чрез контролния панел.',
-       'config-db-name-oracle' => 'Схема на базата от данни:',
-       'config-db-install-account' => 'Потребителска сметка за инсталацията',
-       'config-db-username' => 'Потребителско име за базата от данни:',
-       'config-db-password' => 'Парола за базата от данни:',
-       'config-db-password-empty' => 'Въведете парола за новия потребител на базата от данни: $1.
-Въпреки че е допустимо да се създават потребители без пароли, това е незащитено действие.',
-       'config-db-install-username' => 'Въвежда се потребителско име, което ще се използва за свързване с базата от данни по време на процеса по инсталация.
-Това не е потребителско име за сметка в МедияУики; това е потребителско име за базата от данни.',
-       'config-db-install-password' => 'Въвежда се парола, която ще бъде използвана за свързване с базата от данни по време на инсталационния процес.
-Това не е парола за сметка в МедияУики; това е парола за базата от данни.',
-       'config-db-install-help' => 'Въвеждат се потребителско име и парола, които ще бъдат използвани за свързване с базата от данни по време на инсталационния процес.',
-       'config-db-account-lock' => 'Използване на същото потребителско име и парола по време на нормална работа',
-       'config-db-wiki-account' => 'Потребителска сметка за нормална работа',
-       'config-db-wiki-help' => 'Въвежда се потребителско име и парола, които ще се използват при нормалното функциониране на уикито.
-Ако сметката не съществува и използваната при инсталацията сметка има необходимите права, тази потребителска сметка ще бъде създадена с минималните необходими права за работа с уикито.',
-       'config-db-prefix' => 'Представка за таблиците в базата от данни:',
-       'config-db-prefix-help' => 'Ако е необходимо да се сподели базата от данни между няколко уикита или между МедияУики и друго уеб приложение, може да се добави представка пред имената на таблиците, за да се избегнат конфликти.
-Не се използват интервали.
-
-Това поле обикновено се оставя празно.',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 бинарно',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 с обратна съвестимост с UTF-8',
-       'config-mysql-old' => 'Изисква се MySQL $1 или по-нова версия, наличната версия е $2.',
-       'config-db-port' => 'Порт на базата от данни:',
-       'config-db-schema' => 'Схема за МедияУики',
-       'config-db-schema-help' => 'Схемата по-горе обикновено е коректна.
-Промени се извършват ако наистина е необходимо.',
-       'config-pg-test-error' => "Невъзможно свързване с базата данни '''$1''': $2",
-       'config-sqlite-dir' => 'Директория за данни на SQLite:',
-       'config-sqlite-dir-help' => "SQLite съхранява всички данни в един файл.
-
-По време на инсталацията уеб сървърът трябва да има права за писане в посочената директория.
-
-Тя '''не трябва''' да е достъпна през уеб, затова не е там, където са PHP файловете.
-
-Инсталаторът ще съхрани заедно с нея файл <code>.htaccess</code>, но ако този метод пропадне, някой може да придобие даостъп до суровите данни от базата от данни.
-Това включва сурови данни за потребителите (адреси за е-поща, хеширани пароли), както и изтрити версии на страници и друга чувствителна и с ограничен достъп информация от и за уикито.
-
-Базата от данни е препоръчително да се разположи на друго място, например в <code>/var/lib/mediawiki/yourwiki</code>.",
-       'config-support-info' => 'МедияУики поддържа следните системи за бази от данни:
-
-$1
-
-Ако не виждате желаната за използване система в списъка по-долу, следвайте инструкциите за активиране на поддръжка по-горе.',
-       'config-support-mysql' => '* $1 е най-добре поддържаната система за база от данни, с най-добра поддръжка от МедияУики ([http://www.php.net/manual/en/mysql.installation.php Как се компилира PHP с поддръжка на MySQL])',
-       'config-support-postgres' => '* $1 е популярна система за бази от данни с отворен изходен код, която е алтернатива на MySQL ([http://www.php.net/manual/en/pgsql.installation.php как се компилира PHP с поддръжка на PostgreSQL]). Възможно е все още да има грешки, затова не се препоръчва да се използва в общодостъпна среда.',
-       'config-support-sqlite' => '* $1 е лека система за база от данни, която е много добре поддържана. ([http://www.php.net/manual/en/pdo.installation.php Как се компилира PHP с поддръжка на SQLite], използва PDO)',
-       'config-support-oracle' => '* $1 е комерсиална корпоративна база от данни. ([http://www.php.net/manual/en/oci8.installation.php Как се компилира PHP с поддръжка на OCI8])',
-       'config-header-mysql' => 'Настройки за MySQL',
-       'config-header-postgres' => 'Настройки за PostgreSQL',
-       'config-header-sqlite' => 'Настройки за SQLite',
-       'config-header-oracle' => 'Настройки за Oracle',
-       'config-invalid-db-type' => 'Невалиден тип база от данни',
-       'config-missing-db-name' => 'Необходимо е да се въведе стойност за "Име на базата от данни"',
-       'config-missing-db-host' => 'Необходимо е да се въведе стойност за "Хост на базата от данни"',
-       'config-missing-db-server-oracle' => 'Необходимо е да се въведе стойност за "Database TNS"',
-       'config-invalid-db-server-oracle' => 'Невалиден TNS на базата от данни "$1".
-Допустими са само ASCII букви (a-z, A-Z), цифри (0-9), символите за долна черта (_) и точка (.).',
-       'config-invalid-db-name' => 'Невалидно име на базата от данни "$1".
-Използват се само ASCII букви (a-z, A-Z), цифри (0-9), долни черти (_) и тирета (-).',
-       'config-invalid-db-prefix' => 'Невалидна представка за базата от данни "$1".
-Позволени са само ASCII букви (a-z, A-Z), цифри (0-9), долни черти (_) и тирета (-).',
-       'config-connection-error' => '$1.
-
-Необходимо е да се проверят хостът, потребителското име и паролата, след което да се опита отново.',
-       'config-invalid-schema' => 'Невалидна схема за МедияУики "$1".
-Допустими са само ASCII букви (a-z, A-Z), цифри (0-9) и долни черти (_).',
-       'config-db-sys-create-oracle' => 'Инсталаторът поддържа само сметка SYSDBA за създаване на нова сметка.',
-       'config-db-sys-user-exists-oracle' => 'Потребителската сметка "$1" вече съществува. SYSDBA може да се използва само за създаване на нова сметка!',
-       'config-postgres-old' => 'Изисква се PostgreSQL $1 или по-нова версия, наличната версия е $2.',
-       'config-sqlite-name-help' => 'Избира се име, което да идентифицира уикито.
-Не се използват интервали или тирета.
-Това име ще се използва за име на файла за данни на SQLite.',
-       'config-sqlite-parent-unwritable-group' => 'Дикректорията за данни <code><nowiki>$1</nowiki></code> не може да бъде създадена, тъй като уеб сървърът няма права за писане в родителската директория <code><nowiki>$2</nowiki></code>.
-
-Инсталаторът разпознава потребителското име, с което работи уеб сървърът.
-Уверете се, че той притежава права за писане в директорията <code><nowiki>$3</nowiki></code> преди да продължите.
-В Unix/Линукс системи можете да използвате:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Дикректорията за данни <code><nowiki>$1</nowiki></code> не може да бъде създадена, тъй като уеб сървърът няма права за писане в родителската директория <code><nowiki>$2</nowiki></code>.
-
-Инсталаторът не може да определи потребителското име, с което работи уеб сървърът.
-Уверете се, че в директория <code><nowiki>$3</nowiki></code> може да бъде писано от уебсървъра (или от други потребители!) преди да продължите.
-На Unix/Линукс системи можете да използвате:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Грешка при създаване на директорията за данни "$1".
-Проверете местоположението ѝ и опитайте отново.',
-       'config-sqlite-dir-unwritable' => 'Уебсървърът няма права за писане в директория "$1".
-Променете правата му така, че да може да пише в нея, и опитайте отново.',
-       'config-sqlite-connection-error' => '$1.
-
-Проверете директорията за данни и името на базата от данни по-долу и опитайте отново.',
-       'config-sqlite-readonly' => 'Файлът <code>$1</code> няма права за писане.',
-       'config-sqlite-cant-create-db' => 'Файлът за базата от данни <code>$1</code> не може да бъде създаден.',
-       'config-sqlite-fts3-downgrade' => 'Липсва поддръжката на FTS3 за PHP, извършен беше downgradе на таблиците',
-       'config-can-upgrade' => "В базата от данни има таблици за МедияУики.
-За надграждането им за MediaWiki $1, натиска се '''Продължаване'''.",
-       'config-upgrade-done' => "Обновяването приключи.
-
-Вече е възможно [$1 да използвате уикито].
-
-Ако е необходимо, възможно е файлът <code>LocalSettings.php</code> да бъде създаден отново чрез натискане на бутона по-долу.
-Това '''не е препоръчително действие''', освен ако не срещате затруднения с уикито.",
-       'config-upgrade-done-no-regenerate' => 'Обновяването приключи.
-
-Вече е възможно [$1 да използвате уикито].',
-       'config-regenerate' => 'Създаване на LocalSettings.php →',
-       'config-show-table-status' => 'Заявката <code>SHOW TABLE STATUS</code> не сполучи!',
-       'config-unknown-collation' => "'''Предупреждение:''' Базата от данни използва неразпозната колация.",
-       'config-db-web-account' => 'Сметка за уеб достъп до базата от данни',
-       'config-db-web-help' => 'Избиране на потребителско име и парола, които уеб сървърът ще използва да се свързва с базата от данни при обичайната работа на уикито.',
-       'config-db-web-account-same' => 'Използване на същата сметка като при инсталацията.',
-       'config-db-web-create' => 'Създаване на сметката ако все още не съществува',
-       'config-db-web-no-create-privs' => 'Посочената сметка за инсталацията не разполага с достатъчно права за създаване на нова сметка.
-Необходимо е посочената сметка вече да съществува.',
-       'config-mysql-engine' => 'Хранилище на данни:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Предупреждение''': Избрана е MyISAM като система за складиране в MySQL, която не се препоръчва за използване с МедияУики, защото:
-* почти не поддържа паралелност заради заключване на таблиците
-* е по-податлива на повреди в сравнение с други системи
-* кодът на МедияУики не винаги поддържа MyISAM коректно
-
-Ако инсталацията на MySQL поддържа InnoDB, силно е препоръчително да се използва тя.
-Ако инсталацията на MySQL не поддържа InnoDB, вероятно е време за обновяване.",
-       'config-mysql-engine-help' => "'''InnoDB''' почти винаги е най-добрата възможност заради навременната си поддръжка.
-
-'''MyISAM''' може да е по-бърза при инсталации с един потребител или само за четене.
-Базите от данни MyISAM се повреждат по-често от InnoDB.",
-       'config-mysql-charset' => 'Набор от символи в базата от данни:',
-       'config-mysql-binary' => 'Бинарен',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "В '''бинарен режим''' МедияУики съхранява текстовете в UTF-8 в бинарни полета в базата от данни.
-Това е по-ефективно от UTF-8 режима на MySQL и позволява използването на пълния набор от символи в Уникод.
-
-В '''UTF-8 режим''' MySQL ще знае в кой набор от символи са данните от уикито и ще може да ги показва и променя по подходящ начин, но няма да позволява складиране на символи извън [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Основния многоезичен набор].",
-       'config-site-name' => 'Име на уикито:',
-       'config-site-name-help' => 'Това име ще се показва в заглавната лента на браузъра и на различни други места.',
-       'config-site-name-blank' => 'Необходимо е да се въведе име на уикито.',
-       'config-project-namespace' => 'Именно пространство на проекта:',
-       'config-ns-generic' => 'Проект',
-       'config-ns-site-name' => 'Същото като името на уикито: $1',
-       'config-ns-other' => 'Друго (уточняване)',
-       'config-ns-other-default' => 'МоетоУики',
-       'config-project-namespace-help' => 'Следвайки примера на Уикипедия, много уикита съхраняват страниците си с правила в "\'\'\'именно пространство на проекта\'\'\'", отделно от основното съдържание.
-Всички заглавия на страниците в това именно пространство започват с определена представка, която може да бъде зададена тук.
-Обикновено представката произлиза от името на уикито, но не може да съдържа символи като "#" или ":".',
-       'config-ns-invalid' => 'Посоченото именно пространство "<nowiki>$1</nowiki>" е невалидно.
-Необходимо е да бъде посочено друго.',
-       'config-ns-conflict' => 'Посоченото именно пространство "<nowiki>$1</nowiki>" е в конфликт с използваното по подразбиране именно пространство MediaWiki.
-Необходимо е да се посочи друго именно пространство.',
-       'config-admin-box' => 'Администраторска сметка',
-       'config-admin-name' => 'Потребителско име:',
-       'config-admin-password' => 'Парола:',
-       'config-admin-password-confirm' => 'Парола (повторно):',
-       'config-admin-help' => 'Въвежда се предпочитаното потребителско име, например "Иванчо Иванчев".
-Това ще е потребителското име, което администраторът ще използва за влизане в уикито.',
-       'config-admin-name-blank' => 'Необходимо е да бъде въведено потребителско име на администратора.',
-       'config-admin-name-invalid' => 'Посоченото потребителско име "<nowiki>$1</nowiki>" е невалидно.
-Необходимо е да се посочи друго.',
-       'config-admin-password-blank' => 'Неовходимо е да се въведе парола за администраторската сметка.',
-       'config-admin-password-same' => 'Паролата не трябва да е същата като потребителското име.',
-       'config-admin-password-mismatch' => 'Двете въведени пароли не съвпадат.',
-       'config-admin-email' => 'Адрес за електронна поща:',
-       'config-admin-email-help' => 'Въвеждането на адрес за е-поща позволява получаване на е-писма от другите потребители на уикито, възстановяване на изгубена или забравена парола, оповестяване при промени в страниците от списъка за наблюдение. Това поле може да бъде оставено празно.',
-       'config-admin-error-user' => 'Възникна вътрешна грешка при създаване на администратор с името "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'Възникна вътрешна грешка при задаване на парола за администратора "<nowiki>$1</nowiki>": <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Въведен е невалиден адрес за електронна поща',
-       'config-subscribe' => 'Абониране за [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce пощенския списък за нови версии].',
-       'config-subscribe-help' => 'Това е пощенски списък с малко трафик, който се използва за съобщения при излизане на нови версии, както и за важни проблеми със сигурността.
-Абонирането е препоръчително, както и надграждането на инсталацията на МедияУики при излизането на нова версия.',
-       'config-subscribe-noemail' => 'Опитахте да се абонирате за пощенския списък за нови версии без да посочите адрес за електронна поща.
-Необходимо е да се предостави адрес за електронна поща, в случай че желаете да се абонирате за пощенския списък.',
-       'config-almost-done' => 'Инсталацията е почти готова!
-Възможно е пропускане на оставащата конфигурация и моментално инсталиране на уикито.',
-       'config-optional-continue' => 'Задаване на допълнителни въпроси.',
-       'config-optional-skip' => 'Достатъчно, инсталиране на уикито.',
-       'config-profile' => 'Профил на потребителските права:',
-       'config-profile-wiki' => 'Отворено уики',
-       'config-profile-no-anon' => 'Необходимо е създаване на сметка',
-       'config-profile-fishbowl' => 'Само одобрени редактори',
-       'config-profile-private' => 'Затворено уики',
-       'config-profile-help' => "Уикитата функционират най-добре, когато позволяват на възможно най-много хора да ги редактират.
-В МедияУики лесно се преглеждат последните промени и се възстановяват пораженип от недобронамерени потребители.
-
-Въпреки това мнозина смятат МедияУики за полезен софтуер по различни начини и често е трудно да се убедят всички от предимствата на уики модела.
-Затова се предоставя възможност за избор.
-
-Уикитата от типа '''{{int:config-profile-wiki}}''' позволяват на всички потребители да редактират, дори и без регистрация.
-Уикитата от типа '''{{int:config-profile-no-anon}}''' позволяват достъп до страниците и редактирането им само след създаване на потребителска сметка.
-
-Уики, което е '''{{int:config-profile-fishbowl}}''' позволява на всички да преглеждат страниците, но само предварително одобрени редактори могат да редактират съдържанието.
-В '''{{int:config-profile-private}}''' само предварително одобрени потребители могат да четат и редактират съдържанието.
-
-Детайлно обяснение на конфигурациите на потребителските права е достъпно след инсталацията в [//www.mediawiki.org/wiki/Manual:User_rights Наръчника за потребителски права].", # Fuzzy
-       'config-license' => 'Авторски права и лиценз:',
-       'config-license-none' => 'Без лиценз',
-       'config-license-cc-by-sa' => 'Криейтив Комънс Признание-Споделяне на споделеното',
-       'config-license-cc-by' => 'Криейтив Комънс Признание',
-       'config-license-cc-by-nc-sa' => 'Криейтив Комънс Признание-Некомерсиално-Споделяне на споделеното',
-       'config-license-cc-0' => 'Криейтив Комънс Нула (обществено достояние)',
-       'config-license-gfdl' => 'Лиценз за свободна документация на GNU 1.3 или по-нов',
-       'config-license-pd' => 'Обществено достояние',
-       'config-license-cc-choose' => 'Избиране на друг лиценз от Криейтив Комънс',
-       'config-license-help' => "Много публични уикита поставят всички приноси под [http://freedomdefined.org/Definition/Bg свободен лиценз].
-Това помага създаване на усещане за общност и насърчава дългосрочните приноси.
-Това не е необходимо за частни или корпоративни уикита.
-
-Ако е необходимо да се използват текстове от Уикипедия, както и Уикипедия да може да използва текстове от уикито, необходимо е да се избере лиценз '''Криейтив Комънс Признание-Споделяне на споделеното'''.
-
-Лицензът за свободна документация на GNU е старият лиценз на съдържанието на Уикипедия.
-Той все още е валиден лиценз, но някои негови условия са трудни за разбиране и правят по-сложни повторното използване и интерпретацията.",
-       'config-email-settings' => 'Настройки за е-поща',
-       'config-enable-email' => 'Разрешаване на изходящи е-писма',
-       'config-enable-email-help' => 'За да работят възможностите за използване на е-поща, необходимо е [http://www.php.net/manual/en/mail.configuration.php настройките за поща на PHP] да бъдат конфигурирани правилно.
-Ако няма да се използват услугите за е-поща в уикито, те могат да бъдат изключени тук.',
-       'config-email-user' => 'Позволяване на потребителите да си изпращат е-писма през уикито',
-       'config-email-user-help' => 'Позволяване на потребителите да си изпращат е-писма ако са разрешили това в настройките си.',
-       'config-email-usertalk' => 'Оповестяване при промяна на потребителската беседа',
-       'config-email-usertalk-help' => 'Позволява на потребителите да получават оповестяване при промяна на беседата им, ако това е разрешено в настройките им.',
-       'config-email-watchlist' => 'Оповестяване за списъка за наблюдение',
-       'config-email-watchlist-help' => 'Позволява на потребителите да получават оповестяване за техните наблюдавани страници, ако това е разрешено в настройките им.',
-       'config-email-auth' => 'Потвърждаване на адреса за електронна поща',
-       'config-email-auth-help' => "Ако тази настройка е включена, потребителите трябва да потвърдят адреса си за е-поща чрез препратка, която им се изпраща при настройване или промяна.
-Само валидните адреси могат да получават е-писма от други потребители или да променят писмата за оповестяване.
-Настройването на това е '''препоръчително''' за публични уикита заради потенциални злоупотреби с възможностите за електронна поща.",
-       'config-email-sender' => 'Адрес за обратна връзка:',
-       'config-email-sender-help' => 'Въвежда се адрес за електронна поща, който ще се използва за обратен адрес при изходящи е-писма.
-Това е адресът, на който ще се получават върнатите и неполучени писма.
-Много е-пощенски сървъри изискват поне домейн името да е валидно.',
-       'config-upload-settings' => 'Картинки и качване на файлове',
-       'config-upload-enable' => 'Позволяне качването на файлове',
-       'config-upload-help' => 'Качването на файлове е възможно да доведе до пробели със сигурността на сървъра.
-Повече информация по темата има в [//www.mediawiki.org/wiki/Manual:Security раздела за сигурност] в Наръчника.
-
-За позволяване качването на файлове, необходимо е уебсървърът да може да записва в поддиректорията на МедияУики <code>images</code>.
-След като това условие е изпълнено, функционалността може да бъде активирана.',
-       'config-upload-deleted' => 'Директория за изтритите файлове:',
-       'config-upload-deleted-help' => 'Избиране на директория, в която ще се складират изтритите файлове.
-В най-добрия случай тя не трябва да е достъпна през уеб.',
-       'config-logo' => 'Адрес на логото:',
-       'config-logo-help' => 'Обликът по подразбиране на МедияУики вклчва място с размери 135х160 пиксела за лого над страничното меню.
-Ако има наличен файл с подходящ размер, неговият адрес може да бъде посочен тук.
-
-Ако не е необходимо лого, полето може да се остави празно.', # Fuzzy
-       'config-instantcommons' => 'Включване на Instant Commons',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] е функционалност, която позволява на уикитата да използват картинки, звуци и друга медиа от сайта на Уикимедия [//commons.wikimedia.org/ Общомедия].
-За да е възможно това, МедияУики изисква достъп до Интернет.
-
-Повече информация за тази функционалност, както и инструкции за настройване за други уикита, различни от Общомедия, е налична в [//mediawiki.org/wiki/Manual:$wgForeignFileRepos наръчника].',
-       'config-cc-error' => 'Избирането на лиценз на Криейтив Комънс не даде резултат.
-Необходимо е името на лиценза да бъде въведено ръчно.',
-       'config-cc-again' => 'Повторно избиране...',
-       'config-cc-not-chosen' => 'Изберете кой лиценз на Криейтив Комънс желаете и щракнете "proceed".',
-       'config-advanced-settings' => 'Разширена конфигурация',
-       'config-cache-options' => 'Настройки за обектното кеширане:',
-       'config-cache-help' => 'Обектното кеширане се използва за подобряване на скоростта на МедияУики чрез кеширане на често използваните данни.
-Силно препоръчително е на средните и големите сайтове да включат тази настройка, но малките също могат да се възползват от нея.',
-       'config-cache-none' => 'Без кеширане (не се премахва от функционалността, но това влияе на скоростта на по-големи уикита)',
-       'config-cache-accel' => 'PHP обектно кеширане (APC, XCache или WinCache)',
-       'config-cache-memcached' => 'Използване на Memcached (изисква допълнителни настройки и конфигуриране)',
-       'config-memcached-servers' => 'Memcached сървъри:',
-       'config-memcached-help' => 'Списък с IP адреси за използване за Memcached.
-Необходимо е да бъдат разделени по един на ред, както и да е посочен порта. Пример:
-127.0.0.1:11211
-192.168.1.25:1234',
-       'config-memcache-needservers' => 'Избран е Memcached като складиращ тип, но не са посочени сървъри.',
-       'config-memcache-badip' => 'Беше въведен невалиден IP адрес за Memcached: $1.',
-       'config-memcache-noport' => 'Не е посочен порт за използване за Memcached сървъра: $1.
-В случай, че не знаете порта, този по подразбиране е 11211.',
-       'config-memcache-badport' => 'Портовете за Memcached трябва да бъдат между $1 и $2.',
-       'config-extensions' => 'Разширения',
-       'config-extensions-help' => 'Разширенията от списъка по-горе бяха открити в директорията <code>./extensions</code>.
-
-Възможно е те да изискват допълнително конфигуриране, но сега могат да бъдат включени.',
-       'config-install-alreadydone' => "'''Предупреждение:''' Изглежда вече сте инсталирали МедияУики и се опитвате да го инсталирате отново.
-Продължете към следващата страница.",
-       'config-install-begin' => 'Инсталацията на МедияУики ще започне след натискане на бутона „{{int:config-continue}}“.
-В случай, че е необходимо да се направят промени, използва се бутона „{{int:config-back}}“.',
-       'config-install-step-done' => 'готово',
-       'config-install-step-failed' => 'неуспешно',
-       'config-install-extensions' => 'Добавяне на разширенията',
-       'config-install-database' => 'Създаване на базата от данни',
-       'config-install-schema' => 'Създаване на схема',
-       'config-install-pg-schema-not-exist' => 'PostgreSQL схемата не съществува',
-       'config-install-pg-schema-failed' => 'Създаването на таблиците пропадна.
-Необходимо е потребител "$1" да има права за писане в схемата "$2".',
-       'config-install-pg-plpgsql' => 'Проверяване за езика PL/pgSQL',
-       'config-pg-no-plpgsql' => 'Необходимо е да се инсталира езикът PL/pgSQL в базата от данни $1',
-       'config-pg-no-create-privs' => 'Посочената сметка за инсталацията не притежава достатъчно права за създаване на сметка.',
-       'config-pg-not-in-role' => 'Посочената сметка за уеб потребител вече съществува.
-Посочената сметка за инсталация не с права на суперпотребител и не е член на ролите на уеб потребителя и не може да създава обекти, собственост на уеб потребителя.
-
-Текущо МедияУики изисква таблиците да са собственост на уеб потребителя. Необходимо е да се посочи друго потребителско име за уеб или да се натисне "връщане" и да се избере друг потребител за инсталацията с подходящите права.',
-       'config-install-user' => 'Създаване на потребител за базата от данни',
-       'config-install-user-alreadyexists' => 'Потребител „$1“ вече съществува',
-       'config-install-user-create-failed' => 'Създаването на потребител „$1“ беше неуспешно: $2',
-       'config-install-user-grant-failed' => 'Предоставянето на права на потребител "$1" беше неуспешно: $2',
-       'config-install-user-missing' => 'Посоченият потребител " $1 "не съществува.',
-       'config-install-user-missing-create' => 'Посоченият потребител "$1" не съществува.
-Ако желаете да го създадете, поставете отметка на "създаване на сметка".',
-       'config-install-tables' => 'Създаване на таблиците',
-       'config-install-tables-exist' => "'''Предупреждение''': Таблиците за МедияУики изглежда вече съществуват.
-Пропускане на създаването им.",
-       'config-install-tables-failed' => "'''Грешка''': Създаването на таблиците пропадна и върна следната грешка: $1",
-       'config-install-interwiki' => 'Попълване на таблицата с междууикитата по подразбиране',
-       'config-install-interwiki-list' => 'Файлът <code>interwiki.list</code> не можа да бъде открит.',
-       'config-install-interwiki-exists' => "'''Предупреждение''': Таблицата с междууикита изглежда вече съдържа данни.
-Пропускане на списъка по подразбиране.",
-       'config-install-stats' => 'Инициализиране на статистиките',
-       'config-install-keys' => 'Генериране на тайни ключове',
-       'config-insecure-keys' => "'''Предупреждение:''' {{PLURAL:$2|Сигурният ключ, създаден по време на инсталацията, не е напълно надежден|Сигурните ключове, създадени по време на инсталацията, не са напълно надеждни}} $1 . Обмислете да {{PLURAL:$2|го|ги}} смените ръчно.",
-       'config-install-sysop' => 'Създаване на администраторска сметка',
-       'config-install-subscribe-fail' => 'Невъзможно беше абонирането за mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'не е инсталиран cURL и allow_url_fopen не е налична.',
-       'config-install-mainpage' => 'Създаване на Началната страница със съдържание по подразбиране',
-       'config-install-extension-tables' => 'Създаване на таблици за включените разширения',
-       'config-install-mainpage-failed' => 'Вмъкването на Началната страница беше невъзможно: $1',
-       'config-install-done' => "'''Поздравления!'''
-Инсталирането на МедияУики приключи успешно.
-
-Инсталаторът създаде файл <code>LocalSettings.php</code>.
-Той съдържа всичката необходима основна конфигурация на уикито.
-
-Необходимо е той да бъде изтеглен и поставен в основната директория на уикито (директорията, в която е и index.php). Изтеглянето би трябвало да започне автоматично.
-
-Ако изтеглянето не започне автоматично или е било прекратено, файлът може да бъде изтеглен чрез щракване на препратката по-долу:
-
-$3
-
-'''Забележка''': Ако това не бъде извършено сега, генерираният конфигурационен файл няма да е достъпен на по-късен етап ако не бъде изтеглен сега или инсталацията приключи без изтеглянето му.
-
-Когато файлът вече е в основната директория, '''[$2 уикито ще е достъпно на този адрес]'''.",
-       'config-download-localsettings' => 'Изтегляне на <code>LocalSettings.php</code>',
-       'config-help' => 'помощ',
-       'config-nofile' => 'Файлът „$1“ не може да бъде открит. Да не е бил изтрит?',
-       'mainpagetext' => "'''Уикито беше успешно инсталирано.'''",
-       'mainpagedocfooter' => 'Разгледайте [//meta.wikimedia.org/wiki/Help:Contents ръководството] за подробна информация относно използването на уики софтуера.
-
-== Първи стъпки ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Настройки за конфигуриране]
-* [//www.mediawiki.org/wiki/Manual:FAQ ЧЗВ за МедияУики]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Пощенски списък относно нови версии на МедияУики]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Локализиране на МедияУики]',
-);
-
-/** Banjar (Bahasa Banjar)
- * @author Ezagren
- * @author J Subhi
- */
-$messages['bjn'] = array(
-       'mainpagetext' => "'''MediaWiki sudah tapasang awan sukses'''.",
-       'mainpagedocfooter' => 'Carii panjalasan [//meta.wikimedia.org/wiki/Help:Contents Panduan Pamuruk] gasan mamuruk parangkat lunak wiki
-
-== Gasan bamula ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Daptar konpigurasi setélan]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki nang rancak ditakunakan]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki rilis milis]', # Fuzzy
-);
-
-/** Bengali (বাংলা)
- * @author Bellayet
- * @author Wikitanvir
- */
-$messages['bn'] = array(
-       'config-desc' => 'মিডিয়াউইকির জন্য ইন্সটলার',
-       'config-title' => 'মিডিয়াউইকি $1 ইন্সটলেশন',
-       'config-information' => 'তথ্য',
-       'config-localsettings-key' => 'হালনাগাদ কি',
-       'config-session-error' => 'সেশন শুরুতে ত্রুটি: $1',
-       'config-your-language' => 'আপনার ভাষা:',
-       'config-your-language-help' => 'ইন্সটল করা সময় ব্যবহারের জন্য ভাষা নির্বাচন করুন।',
-       'config-wiki-language' => 'উইকি ভাষা:',
-       'config-back' => '← পেছনে',
-       'config-continue' => 'অব্যাহত →',
-       'config-page-language' => 'ভাষা',
-       'config-page-welcome' => 'মিডিয়াউইকিতে স্বাগতম!',
-       'config-page-dbconnect' => 'ডেটাবেজে সংযোগ দিন',
-       'config-page-upgrade' => 'ইতিমধ্যেই থাকা ইন্সটলেশন হালনাগাদ করুন',
-       'config-page-dbsettings' => 'ডেটাবেজ সেটিংস',
-       'config-page-name' => 'নাম',
-       'config-page-options' => 'অপশন',
-       'config-page-install' => 'ইন্সটল',
-       'config-page-complete' => 'সম্পূর্ণ!',
-       'config-page-restart' => 'পুনরায় ইন্সটল প্রক্রিয়া চালু করুন',
-       'config-page-readme' => 'এটি পড়ুন',
-       'config-page-releasenotes' => 'রিলিজ নোট',
-       'config-page-copying' => 'অনুলেপন',
-       'config-page-upgradedoc' => 'হালনাগাদকরণ',
-       'config-page-existingwiki' => 'ইতিমধ্যেই থাকা উইকি',
-       'config-restart' => 'হ্যাঁ, পুনরায় চালু করুন',
-       'config-env-php' => 'পিএইচপি $1 ইন্সটল করা হয়েছে।',
-       'config-db-type' => 'ডেটাবেজের ধরন:',
-       'config-db-host' => 'ডেটাবেজের হোস্ট:',
-       'config-db-install-account' => 'ইন্সটলের জন্য ব্যবহারকারী অ্যাকাউন্ট',
-       'config-db-username' => 'ডেটাবেজের ব্যবহারকারী নাম:',
-       'config-db-password' => 'ডেটাবেজের শব্দচাবি:',
-       'config-db-charset' => 'ডেটাবেজের অক্ষর সেট',
-       'config-db-port' => 'ডেটাবেজ পোর্ট:',
-       'config-db-schema' => 'মিডিয়াউইকির স্কিমা',
-       'config-sqlite-dir' => 'এসকিউলাইট ডেটা ডিরেক্টরি:',
-       'config-oracle-def-ts' => 'পূর্বনির্ধারিত টেবিলস্পেস',
-       'config-oracle-temp-ts' => 'সাময়কি টেবিলস্পেস:',
-       'config-header-mysql' => 'মাইএসকিউএল সেটিংস',
-       'config-header-postgres' => 'পোস্টগ্রেএসকিউএল সেটিংস',
-       'config-header-sqlite' => 'এসকিউলাইট সেটিংস',
-       'config-header-oracle' => 'ওরাকল সেটিংস',
-       'config-invalid-db-type' => 'ডেটাবেজের ধরন অগ্রহযোগ্য',
-       'config-missing-db-name' => 'আপনাকে অবশ্যই "ডেটাবেজ নাম"-এর জন্য একটি মান প্রবেশ করাতে হবে',
-       'config-missing-db-host' => 'আপনাকে অবশ্যই "ডেটাবেজ হোস্ট"-এর জন্য একটি মান প্রবেশ করাতে হবে',
-       'config-missing-db-server-oracle' => 'আপনাকে অবশ্যই "ডেটাবেজ টিএনএস"-এর জন্য একটি মান প্রবেশ করাতে হবে',
-       'config-mysql-engine' => 'সংরক্ষণ ইঞ্জিন:',
-       'config-mysql-innodb' => 'ইনোডিবি',
-       'config-mysql-myisam' => 'মাইআইএসএএম',
-       'config-mysql-charset' => 'ডেটাবেজের অক্ষর সেট',
-       'config-mysql-binary' => 'বাইনারি',
-       'config-mysql-utf8' => 'ইউটিএফ-৮',
-       'config-site-name' => 'উইকির নাম:',
-       'config-site-name-blank' => 'একটি সাইটের নাম প্রবেশ করান।',
-       'config-project-namespace' => 'প্রকল্প নামস্থান:',
-       'config-ns-generic' => 'প্রকল্প',
-       'config-ns-site-name' => 'উইকি নামের অনুরুপ: $1',
-       'config-ns-other' => 'অন্যান্য (নির্দিষ্ট করুন)',
-       'config-ns-other-default' => 'মাইউইকি',
-       'config-admin-box' => 'প্রশাসক অ্যাকাউন্ট',
-       'config-admin-name' => 'আপনার নাম:',
-       'config-admin-password' => 'শব্দচাবি:',
-       'config-admin-password-confirm' => 'শব্দচাবি আবারও প্রবেশ করান:',
-       'config-admin-name-blank' => 'একটি প্রশাসক ব্যবহারকারী নাম প্রবেশ করান',
-       'config-admin-password-blank' => 'প্রশাসক অ্যাকাউন্টের জন্য পাসওয়ার্ড প্রবেশ করান।',
-       'config-admin-password-same' => 'পাসওয়ার্ড অবশ্যই ব্যবহারকারী নামের অনুরুপ হওয়া চলবে না।',
-       'config-admin-password-mismatch' => 'আপনি যে দুটি শব্দচাবি দিয়েছেন তারা পরস্পর মেলেনি।',
-       'config-admin-email' => 'ইমেইল ঠিকানা:',
-       'config-optional-continue' => 'আরও প্রশ্ন জিজ্ঞেস করুন।',
-       'config-optional-skip' => 'আমি ইতিমধ্যেই বিরক্ত হয়ে গেছি, উইকিটি ইন্সটল করো।',
-       'config-profile' => 'ব্যবহারকারী অধিকার প্রোফাইল:',
-       'config-profile-wiki' => 'গতানুগতিক উইকি', # Fuzzy
-       'config-profile-no-anon' => 'অ্যাকাউন্ট তৈরি করা বাধ্যতামূলক',
-       'config-profile-fishbowl' => 'শুধুমাত্র নির্ধারিত সম্পাদকদের  জন্যই',
-       'config-profile-private' => 'ব্যক্তিগত উইকি',
-       'config-license' => 'কপিরাইট ও লাইসেন্স:',
-       'config-license-none' => 'কোনো লাইসেন্স ফুটার নেই',
-       'config-license-cc-by-sa' => 'ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন শেয়ার অ্যালাইক',
-       'config-license-cc-by-nc-sa' => 'ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন নন-কমার্শিয়াল শেয়ার অ্যালাইক',
-       'config-license-cc-0' => 'ক্রিয়েটিভ কমন্স জিরো', # Fuzzy
-       'config-license-pd' => 'পাবলিক ডোমেইন',
-       'config-license-cc-choose' => 'একটি স্বনির্ধারিত ক্রিয়েটিভ কমন্স লাইসেন্ট নির্বাচন করুন',
-       'config-email-settings' => 'ই-মেইল সেটিংস',
-       'config-email-user' => 'ব্যবহারকারী-থেকে-ব্যবহারকারী ই-মেইল সুবিধা সক্রিয় করো',
-       'config-upload-settings' => 'চিত্র এবং ফাইল আপলোড',
-       'config-upload-enable' => 'ফাইল আপলোড সক্রিয় করো',
-       'config-upload-deleted' => 'অপসারণকৃত ফাইলের ডিরেক্টরি:',
-       'config-logo' => 'লোগো ইউআরএল:',
-       'config-memcached-servers' => 'মেমক্যাশেকৃত সার্ভারসমূহ:',
-       'config-extensions' => 'এক্সটেনশন',
-       'config-install-step-done' => 'সম্পন্ন',
-       'config-install-step-failed' => 'ব্যর্থ',
-       'config-install-extensions' => 'এক্সটেনশন সহকারে',
-       'config-install-database' => 'ডেটাবেজ সেটআপ',
-       'config-install-pg-schema-not-exist' => 'পোস্টগ্রেএসকিউএল স্কিমা খুঁজে পাওয়া যায়নি।',
-       'config-install-tables' => 'টেবিল তৈরি',
-       'config-install-keys' => 'গোপন কি তৈরি',
-       'config-help' => 'সাহায্য',
-       'mainpagetext' => "'''মিডিয়াউইকি সফলভাবে ইন্সটল করা হয়েছে।'''",
-       'mainpagedocfooter' => 'কী ভাবে উইকি সফটওয়্যারটি ব্যবহারকার করবেন, তা জানতে [//meta.wikimedia.org/wiki/Help:Contents ব্যবহারকারী সহায়িকা] দেখুন।
-
-== কোথা থেকে শুরু করবেন ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings কনফিগারেশন সেটিংস তালিকা]
-* [//www.mediawiki.org/wiki/Manual:FAQ প্রশ্নোত্তরে মিডিয়াউইকি]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce মিডিয়াউইকি রিলিজের মেইলিং লিস্ট]', # Fuzzy
-);
-
-/** Bishnupria Manipuri (বিষ্ণুপ্রিয়া মণিপুরী)
- */
-$messages['bpy'] = array(
-       'mainpagetext' => "'''মিডিয়াউইকি হবাবালা ইয়া ইন্সটল ইল.'''",
-       'mainpagedocfooter' => 'উইকি সফটৱ্যার এহান আতানির বারে দরকার ইলে [//meta.wikimedia.org/wiki/Help:Contents আতাকুরার গাইড]হানর পাঙলাক নেগা।
-
-== অকরানিহান ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings কনফিগারেশন সেটিংর তালিকাহান]
-* [//www.mediawiki.org/wiki/Manual:FAQ মিডিয়া উইকি আঙলাক]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce মিডিয়া উইকির ফঙপার বারে মেইলর তালিকাহান]', # Fuzzy
-);
-
-/** Breton (brezhoneg)
- * @author Fohanno
- * @author Fulup
- * @author Gwendal
- * @author Y-M D
- * @author 아라
- */
-$messages['br'] = array(
-       'config-desc' => 'Poellad staliañ MediaWIki',
-       'config-title' => 'Staliadur MediaWiki $1',
-       'config-information' => 'Titouroù',
-       'config-localsettings-upgrade' => 'Kavet ez eus bet ur restr <code>LocalSettings.php</code>.
-Evit hizivaat ar staliadur-se, merkit an talvoud <code>$wgUpgradeKey</code> er voest dindan.
-E gavout a rit e <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Dinoet ez eus bet ur restr <code>LocalSettings.php</code>.
-Evit lakaat ar staliadur-mañ a-live, implijit <code>update.php</code> e plas',
-       'config-localsettings-key' => "Alc'hwez hizivaat :",
-       'config-localsettings-badkey' => "Direizh eo an alc'hwez merket ganeoc'h",
-       'config-upgrade-key-missing' => 'Kavet ez eus bet ur staliadur kent eus MediaWiki.
-Evit hizivaat ar staliadur-se, ouzhpennit al linenn da-heul e traoñ ho restr <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => "Diglok e seblant bezañ ar restr <code>LocalSettings.php</code> zo anezhi dija.
-An argemmenn $1 n'eo ket termenet.
-Kemmit <code>LocalSettings.php</code> evit ma vo termenet an argemmenn-se, ha klikit war « {{int:Config-continue}} ».",
-       'config-localsettings-connection-error' => "C'hoarvezet ez eus ur fazi en ur gevreañ ouzh an diaz roadennoù oc'h implijout an arventennoù diferet e <code>LocalSettings.php</code> pe <code>AdminSettings.php</code>. Reizhit an arventennoù-se hag esaeit en-dro.
-
-$1",
-       'config-session-error' => "Fazi e-ser loc'hañ an dalc'h : $1",
-       'config-session-expired' => "Kloz eo an dalc'h evit doare.
-Kefluniet eo an dalc'hoù evit padout $1.
-Kreskiñ ar pad-mañ a c'hallit dre e arventenniñ <code>session.gc_maxlifetime</code> e php.ini.
-Adgrogit gant ar staliadur.",
-       'config-no-session' => "Kolle teo bet roadennoù ho talc'h !
-Gwiriit ar restr php.ini ha bezit sur emañ staliet <code>session.save_path</code> en ur c'havlec'h a zere.",
-       'config-your-language' => 'Ho yezh :',
-       'config-your-language-help' => 'Dibabit ur yezh da implijout e-pad an argerzh staliañ.',
-       'config-wiki-language' => 'Yezh ar wiki :',
-       'config-wiki-language-help' => 'Diuzañ ar yezh a vo implijet ar muiañ er wiki.',
-       'config-back' => '← Distreiñ',
-       'config-continue' => "Kenderc'hel →",
-       'config-page-language' => 'Yezh',
-       'config-page-welcome' => 'Degemer mat e MediaWiki !',
-       'config-page-dbconnect' => "Kevreañ d'an diaz roadennoù",
-       'config-page-upgrade' => 'Hizivaat ar staliadur a zo dioutañ',
-       'config-page-dbsettings' => 'Arventennoù an diaz roadennoù',
-       'config-page-name' => 'Anv',
-       'config-page-options' => 'Dibarzhioù',
-       'config-page-install' => 'Staliañ',
-       'config-page-complete' => 'Graet !',
-       'config-page-restart' => 'Adlañsañ ar staliadur',
-       'config-page-readme' => 'Lennit-me',
-       'config-page-releasenotes' => 'Notennoù stumm',
-       'config-page-copying' => 'O eilañ',
-       'config-page-upgradedoc' => 'O hizivaat',
-       'config-page-existingwiki' => 'Wiki zo anezhañ dija',
-       'config-help-restart' => "Ha c'hoant hoc'h eus da ziverkañ an holl roadennoù hoc'h eus ebarzhet ha da adlañsañ an argerzh staliañ ?",
-       'config-restart' => "Ya, adloc'hañ anezhañ",
-       'config-welcome' => "=== Gwiriadennoù a denn d'an endro ===
-Rekis eo un nebeud gwiriadennoù diazez da welet hag azas eo an endro evit gallout staliañ MediaWiki.
-Dleout a rafec'h merkañ disoc'hoù ar gwiriadennoù-se m'hoc'h eus ezhomm skoazell e-pad ar staliadenn.",
-       'config-copyright' => "=== Gwiriañ aozer ha Termenoù implijout ===
-
-$1
-
-Ur meziant frank eo ar programm-mañ; gallout a rit skignañ anezhañ ha/pe kemmañ anezhañ dindan termenoù ar GNU Aotre-implijout Foran Hollek evel m'emañ embannet gant Diazezadur ar Meziantoù Frank; pe diouzh stumm 2 an aotre-implijout, pe (evel mar karit) diouzh ne vern pe stumm nevesoc'h.
-
-Ingalet eo ar programm gant ar spi e vo talvoudus met n'eus '''tamm gwarant ebet'''; hep zoken gwarant empleg ar '''varc'hadusted''' pe an '''azaster ouzh ur pal bennak'''. Gwelet ar GNU Aotre-Implijout Foran Hollek evit muioc'h a ditouroù.
-
-Sañset oc'h bezañ resevet <doclink href=Copying>un eilskrid eus ar GNU Aotre-implijout Foran Hollek</doclink> a-gevret gant ar programm-mañ; ma n'hoc'h eus ket, skrivit da Diazezadur ar Meziantoù Frank/Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, SUA pe [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html lennit anezhañ enlinenn].",
-       'config-sidebar' => "* [//www.mediawiki.org MediaWiki degemer]
-* [//www.mediawiki.org/wiki/Help:Contents Sturlevr an implijerien]
-* [//www.mediawiki.org/wiki/Manual:Contents Sturlevr ar verourien]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAG]
-----
-* <doclink href=Readme>Lennit-me</doclink>
-* <doclink href=ReleaseNotes>Notennoù embann</doclink>
-* <doclink href=Copying>Oc'h eilañ</doclink>
-* <doclink href=UpgradeDoc>O hizivaat</doclink>",
-       'config-env-good' => 'Gwiriet eo bet an endro.
-Gallout a rit staliañ MediaWiki.',
-       'config-env-bad' => "Gwiriet eo bet an endro.
-Ne c'hallit ket staliañ MediaWiki.",
-       'config-env-php' => 'Staliet eo PHP $1.',
-       'config-env-php-toolow' => "Staliet eo PHP $1.
-Nemet eo rekis PHP $2 pe nevesoc'h evit MediaWiki.",
-       'config-unicode-using-utf8' => "Oc'h implijout utf8_normalize.so gant Brion Vibber evit ar reolata Unicode.",
-       'config-unicode-using-intl' => "Oc'h implijout [http://pecl.php.net/intl an astenn PECL intl] evit ar reolata Unicode.",
-       'config-unicode-pure-php-warning' => "'''Diwallit''' : N'haller ket kaout an [http://pecl.php.net/intl intl PECL astenn] evit merañ reoladur Unicode, a zistro d'ar stumm gorrek emplementet e-PHP.
-Ma lakait da dreiñ ul lec'hienn darempredet-stank e vo mat deoc'h lenn un tammig bihan diwar-benn se war [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode normalization]. (e saozneg)",
-       'config-unicode-update-warning' => "'''Diwallit''': ober a ra stumm staliet endalc'her skoueriekaat Unicode gant ur stumm kozh eus [http://site.icu-project.org/ levraoueg meziantoù ar raktres ICU].
-Dleout a rafec'h [//www.mediawiki.org/wiki/Unicode_normalization_considerations hizivaat] ma seblant deoc'h bezañ pouezus ober gant Unicode.",
-       'config-no-db' => "N'eus ket bet gallet kavout ur sturier diazoù roadennoù a zere ! Ret eo deoc'h staliañ ur sturier diazoù roadennoù evit PHP.
-Skoret eo an diazoù roadennoù da-heul : $1.
-
-Ma rit gant un herberc'hiañ kenrannet, goulennit digant ho herberc'hier staliañ ur sturier diaz roadennoù azas.
-Ma kempunit PHP c'hwi hoc'h-unan, adkeflugnit-eñ en ur weredekaat un arval diaz roadennoù, da skouer en ur ober gant <code>./configure --mysql</code>.
-M'hoc'h eus staliet PHP adalek ur pakad Debian pe Ubuntu, eo ret deoc'h staliañ ar vodulenn php5-mysql ivez.",
-       'config-no-fts3' => "'''Diwallit ''': Kempunet eo SQLite hep ar [//sqlite.org/fts3.html vodulenn FTS3]; ne vo ket posupl ober gant an arc'hwelioù klask er staliadur-mañ",
-       'config-register-globals' => "'''Diwallit : Gweredekaet eo dibarzh <code>[http://php.net/register_globals register_globals]</code> PHP.'''
-'''Diweredekait anezhañ ma c'hallit.'''
-Mont a raio MediaWiki en-dro met fazioù surentez a c'hallo c'hoari war ho servijer",
-       'config-magic-quotes-runtime' => "'''Fazi groñs : gweredekaet eo [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] !'''
-Breinañ a ra an dibarzh-mañ ar roadennoù en ur mod dic'hortoz.
-N'hallit ket staliañ pe ober gant MediaWiki e-keit ha m'eo gweredekaet an dibarzh-se.",
-       'config-magic-quotes-sybase' => "'''Fazi groñs : gweredekaet eo [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] !'''
-Breinañ a ra an dibarzh-mañ ar roadennoù en ur mod dic'hortoz.
-N'hallit ket staliañ pe ober gant MediaWiki e-keit ha m'eo gweredekaet an dibarzh-se.",
-       'config-mbstring' => "'''Fazi groñs : gweredekaet eo [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] !'''
-Degas a ra an dibarzh-mañ fazioù ha gallout a ra breinañ ar roadennoù en ur mod dic'hortoz.
-N'hallit ket staliañ pe ober gant MediaWiki e-keit ha m'eo gweredekaet an dibarzh-se.",
-       'config-ze1' => "'''Fazi diremed : [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mod] zo gweredekaet !'''
-An dibarzh-mañ zo kaoz da zrein euzhus gant MediaWiki.
-Ne c'hallit ket staliañ nag implijout MediaWiki keit ha m'eo gweredekaet an dibarzh-mañ.",
-       'config-safe-mode' => "'''Diwallit :''' Gweredekaet eo [http://www.php.net/features.safe-mode mod surentez] PHP.
-Kudennoù a c'hall sevel abalamour da gement-se, dreist-holl ma pellgargit restroù ha ma skorit <code>math</code>.",
-       'config-xml-bad' => "Mankout a ra modulenn XML PHP.
-Ezhomm en deus MediaWiki eus arc'hwelioù zo eus ar vodulenn-se ha ne'z aio ket en-dro gant ar c'hefluniadur zo.
-M'emaoc'h gant Mandrake, stailhit pakad php-xml.",
-       'config-pcre' => "Evit doare e vank ar vodulenn skorañ PCRE.
-Evit mont en-dro plaen en deus ezhomm MediaWiki eus an arc'hwelioù jediñ reoliek kenglotus gant Perl.",
-       'config-pcre-no-utf8' => "'''Fazi groñs ''': evit doare eo bet kempunet modulenn PCRE PHP hep ar skor PCRE_UTF8.
-Ezhomm en deus MediaWiki eus UTF-8 evit mont plaen en-dro.",
-       'config-memory-raised' => '<code>memory_limit</code> ar PHP zo $1, kemmet e $2.',
-       'config-memory-bad' => "'''Diwallit :''' Da $1 emañ arventenn <code>memory_limit</code> PHP.
-Re izel eo moarvat.
-Marteze e c'hwito ar staliadenn !",
-       'config-xcache' => 'Staliet eo [http://xcache.lighttpd.net/ XCache]',
-       'config-apc' => 'Staliet eo [http://www.php.net/apc APC]',
-       'config-wincache' => 'Staliet eo [http://www.iis.net/download/WinCacheForPhp WinCache]',
-       'config-no-cache' => "'''Diwallit:''' N'eus ket bet gallet kavout [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] pe [http://www.iis.net/download/WinCacheForPhp WinCache].
-N'eo ket gweredekaet ar c'hrubuilhañ traezoù.",
-       'config-diff3-bad' => "N'eo ket bet kavet GNU diff3.",
-       'config-imagemagick' => "ImageMagick kavet : <code>$1</code>.
-Gweredekaet e vo ar bihanaat skeudennoù ma vez gweredekaet ganeoc'h ar pellgargañ restroù.",
-       'config-gd' => "Kavet eo bet al levraoueg c'hrafek GD enframmet.
-Gweredekaet e vo ar bihanaat skeudennoù ma vez gweredekaet an enporzhiañ restroù.",
-       'config-no-scaling' => "N'eus ket bet gallet kavout al levraoueg GD pe ImageMagick.
-Diweredekaet e vo ar bihanaat skeudennoù.",
-       'config-no-uri' => "'''Fazi :''' N'eus ket tu da anavezout URI ar skript red.
-Staliadur nullet.",
-       'config-uploads-not-safe' => "'''Diwallit :'''Bresk eo ho kavlec'h pellgargañ dre ziouer <code>$1</code> rak gallout a ra erounit ne vern pe skript.
-ha pa vefe gwiriet gant MediaWiki an holl restroù pellgarget eo erbedet-groñs da [//www.mediawiki.org/wiki/Manual:Security#Upload_security serriñ ar breskter surentez-mañ] a-rao gweredekaat ar pellgargañ.",
-       'config-brokenlibxml' => "Ur meskad stummoù PHP ha libxml2 dreinek a vez implijet gant ho reizhiad. Gallout a ra breinañ ar roadennoù e MediaWiki hag en arloadoù web all.
-Hizivait da PHP 5.2.9 pe nevesoc'h ha libxml2 2.7.3 pe nevesoc'h ([//bugs.php.net/bug.php?id=45996 draet renablet gant PHP]).
-Staliadur paouezet.",
-       'config-using531' => "N'haller ket implijout MediaWiki gant PHP $1 abalamour d'un draen a zegas trubuilh en arventennoù kaset en ur ober dave da <code>__call()</code>.
-Hizivait ho reizhiad gant PHP 5.3.2 pe nevesoc'h, pe distroit da PHP 5.3.0 evit renkañ an dra-se.
-Staliadur paouezet.",
-       'config-db-type' => 'Doare an diaz roadennoù :',
-       'config-db-host' => 'Anv implijer an diaz roadennoù :',
-       'config-db-host-help' => "M'emañ ho servijer roadennoù war ur servijer disheñvel, merkit amañ an anv ostiz pe ar chomlec'h IP.
-
-Ma rit gant un herberc'hiañ kenrannet, e tlefe ho herberc'hier bezañ pourchaset deoc'h un anv ostiz reizh en teulioù titouriñ.
-
-M'emaoc'h o staliañ ur servijer Windows ha ma rit gant MySQL, marteze ne'z aio ket en-dro \"localhost\" evel anv servijer. Ma ne dro ket, klaskit ober gant \"127.0.0.1\" da chomlec'h IP lechel.", # Fuzzy
-       'config-db-host-oracle' => 'TNS an diaz roadennoù :',
-       'config-db-wiki-settings' => 'Anavezout ar wiki-mañ',
-       'config-db-name' => 'Anv an diaz roadennoù :',
-       'config-db-name-help' => "Dibabit un anv evit ho wiki.
-Na lakait ket a esaouennoù ennañ.
-
-Ma ri gant un herberc'hiañ kenrannet e vo pourchaset deoc'h un anv diaz roadennoù dibar da vezañ graet gantañ gant ho herberc'hier pe e lezo ac'hanoc'h da grouiñ diazoù roadennoù dre ur banell gontrolliñ.",
-       'config-db-name-oracle' => 'Brastres diaz roadennoù :',
-       'config-db-install-account' => 'Kont implijer evit ar staliadur',
-       'config-db-username' => 'Anv implijer an diaz roadennoù :',
-       'config-db-password' => 'Ger-tremen an diaz roadennoù :',
-       'config-db-password-empty' => "Lakait ur ger-tremen evit kont nevez an diaz roadennoù : $1.
-Ha pa vefe posupl da grouiñ kontoù hep ger-tremen, n'eo ket erbedet evit abegoù surentez.",
-       'config-db-install-username' => "Ebarzhit an anv implijer a vo implijet da gevreañ ouzh an diaz roadennoù e-pad an argerzh staliañ.
-N'eo ket anv implijer ar gont MediaWiki, an anv implijer evit ho tiaz roadennoù eo.",
-       'config-db-install-password' => "Ebarzhit ar ger-tremen a vo implijet da gevreañ ouzh an diaz roadennoù e-pad an argerzh staliañ.
-N'eo ket ar ger-tremen evit ar gont MediaWiki, ar ger-tremen evit ho tiaz roadennoù eo.",
-       'config-db-install-help' => 'Merkañ anv an implijer hag ar ger-tremen a vo implijet evit kevreañ ouzh an diaz roadennoù e-pad an argerzh staliañ.',
-       'config-db-account-lock' => 'Implijout ar memes anv implijer ha ger-tremen e-kerzh oberiadurioù boutin',
-       'config-db-wiki-account' => 'Kont implijer evit oberiadurioù boutin',
-       'config-db-prefix' => 'Rakrann taolennoù an diaz roadennoù :',
-       'config-db-charset' => 'Strobad arouezennoù an diaz roadennoù',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binarel',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 kilkenglotus UTF-8',
-       'config-mysql-old' => "Rekis eo MySQL $1 pe ur stumm nevesoc'h; ober a rit gant $2.",
-       'config-db-port' => 'Porzh an diaz roadennoù :',
-       'config-db-schema' => 'Brastres evit MediaWiki',
-       'config-db-schema-help' => "Peurliesañ e vo digudenn ar chema-mañ.
-Arabat cheñch anezho ma n'hoc'h eus ket ezhomm d'en ober.",
-       'config-pg-test-error' => "N'haller ket kevreañ ouzh an diaz-titouroù '''$1''' : $2",
-       'config-sqlite-dir' => "Kavlec'h roadennoù SQLite :",
-       'config-oracle-def-ts' => 'Esaouenn stokañ ("tablespace") dre ziouer :',
-       'config-oracle-temp-ts' => "Esaouenn stokañ (''tablespace'') da c'hortoz :",
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => "Skoret eo ar reizhiadoù diaz titouroù da-heul gant MediaWiki :
-
-$1
-
-Ma ne welit ket amañ dindan ar reizhiad diaz titouroù a fell deoc'h ober ganti, heuilhit an titouroù a-us (s.o. al liammoù) evit gweredekaat ar skorañ.",
-       'config-support-mysql' => '* $1 eo an dibab kentañ evit MediaWiki hag an hini skoret ar gwellañ ([http://www.php.net/manual/en/mysql.installation.php penaos kempunañ PHP gant skor MySQL])',
-       'config-support-postgres' => "* Ur reizhiad diaz titouroù brudet ha digor eo $1. Gallout a ra ober evit MySQL ([http://www.php.net/manual/en/pgsql.installation.php Penaos kempunañ PHP gant skor PostgreSQL]). Gallout a ra bezañ un nebeud drein bihan enni ha n'eo ket erbedet he implijout en un endro produiñ.",
-       'config-support-sqlite' => "* $1 zo ur reizhiad diaz titouroù skañv skoret eus ar c'hentañ. ([http://www.php.net/manual/en/pdo.installation.php Penaos kempunañ PHP gant skor SQLite], implijout a ra PDO)",
-       'config-support-oracle' => '* $1 zo un diaz titouroù kenwerzhel. ([http://www.php.net/manual/en/oci8.installation.php Penaos kempunañ PHP gant skor OCI8])',
-       'config-header-mysql' => 'Arventennoù MySQL',
-       'config-header-postgres' => 'Arventennoù PostgreSQL',
-       'config-header-sqlite' => 'Arventennoù SQLite',
-       'config-header-oracle' => 'Arventennoù Oracle',
-       'config-invalid-db-type' => 'Direizh eo ar seurt diaz roadennoù',
-       'config-missing-db-name' => 'Ret eo deoc\'h merkañ un dalvoudenn evit "Anv an diaz titouroù"',
-       'config-missing-db-host' => 'Ret eo deoc\'h merkañ un dalvoudenn evit "Ostiz an diaz titouroù"',
-       'config-missing-db-server-oracle' => 'Ret eo deoc\'h merkañ un dalvoudenn evit "Anv TNS an diaz titouroù"',
-       'config-invalid-db-server-oracle' => 'Direizh eo anv TNS an diaz titouroù "$1".
-Ober hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha pikoù (.).',
-       'config-invalid-db-name' => 'Direizh eo anv an diaz titouroù "$1".
-Ober hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha tiredoù (-).',
-       'config-invalid-db-prefix' => 'Direizh eo rakger an diaz titouroù "$1".
-Ober hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha tiredoù (-).',
-       'config-connection-error' => '$1.
-
-Gwiriit anv an ostiz, an anv implijer, ar ger-tremen ha klaskit en-dro.',
-       'config-invalid-schema' => 'Chema direizh evit MediaWiki "$1".
-Grit hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9) hag arouezennoù islinennañ (_).',
-       'config-db-sys-create-oracle' => "N'anavez ar stalier nemet ar c'hontoù SYSDBA evit krouiñ kontoù nevez.",
-       'config-db-sys-user-exists-oracle' => 'Bez\' ez eus eus ar gont "$1" c\'hoazh. N\'haller ober gant SYSDBA nemet evit krouiñ kontoù nevez !',
-       'config-postgres-old' => "Rekis eo PostgreSQL $1 pe ur stumm nevesoc'h; ober a rit gant $2.",
-       'config-sqlite-name-help' => "Dibabit un anv dibar d'ho wiki.
-Arabat ober gant esaouennoù pe barrennigoù-stagañ.
-Implijet e vo evit ar restr roadennoù SQLite.",
-       'config-sqlite-mkdir-error' => 'Ur fazi zo bet e-ser krouiñ ar c\'havlec\'h roadennoù "$1".
-Gwiriañ al lec\'hiadur ha klask en-dro.',
-       'config-sqlite-dir-unwritable' => 'Dibosupl skrivañ er c\'havlec\'h "$1".
-Cheñchit ar aotreoù evit ma c\'hallfe ar servijer web skrivañ ennañ ha klaskit en-dro.',
-       'config-sqlite-connection-error' => "$1.
-
-Gwiriañ ar c'havlec'h roadennoù hag anv an diaz roadennoù a-is ha klaskit en-dro.",
-       'config-sqlite-readonly' => "N'haller ket skrivañ er restr <code>$1</code>.",
-       'config-sqlite-cant-create-db' => "N'haller ket krouiñ restr an diaz roadennoù <code>$1</code>.",
-       'config-sqlite-fts3-downgrade' => "N'eo ket kenglotus ar PHP gant FTS3, o lakaat an taolennoù da glotañ gant ur stumm koshoc'h",
-       'config-can-upgrade' => "Taolennoù MediaWiki zo en diaz titouroù.
-Da hizivaat anezho da VediaWiki $1, klikañ war '''Kenderc'hel'''.",
-       'config-upgrade-done-no-regenerate' => 'Hizivadenn kaset da benn.
-
-Gallout a rit [$1 kregiñ da implijout ho wiki].',
-       'config-regenerate' => 'Adgenel LocalSettings.php →',
-       'config-show-table-status' => "C'hwitet ar reked <code>SHOW TABLE STATUS</code> !",
-       'config-unknown-collation' => "'''Diwallit :''' Emañ an diaz roadennoù o renkañ an traoù diouzh un urzh lizherennek dianav.",
-       'config-db-web-account' => 'Kont an diaz roadennoù evit ar voned Kenrouedad',
-       'config-db-web-help' => 'Diuzañ an anv implijer hag ar ger-tremen a vo implijet gant ar servijer web evit kevreañ ouzh ar servijer diaz roadennoù pa vez ar wiki o vont en-dro war ar pemdez.',
-       'config-db-web-account-same' => 'Ober gant an hevelep kont hag an hini implijet evit ar staliañ',
-       'config-db-web-create' => "Krouiñ ar gont ma n'eus ket anezhi c'hoazh",
-       'config-mysql-engine' => 'Lusker stokañ :',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-charset' => 'Strobad arouezennoù an diaz roadennoù :',
-       'config-mysql-binary' => 'Binarel',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Anv ar wiki :',
-       'config-site-name-help' => "Dont a raio war wel e barrenn ditl ar merdeer hag e meur a lec'h all c'hoazh.",
-       'config-site-name-blank' => "Lakait anv ul lec'hienn .",
-       'config-project-namespace' => 'Esaouenn anv ar raktres :',
-       'config-ns-generic' => 'Raktres',
-       'config-ns-site-name' => 'Hevelep anv hag hini ar wiki : $1',
-       'config-ns-other' => 'All (spisaat)',
-       'config-ns-other-default' => 'MaWiki',
-       'config-ns-invalid' => 'Direizh eo an esaouenn anv "<nowiki>$1</nowiki>" spisaet.
-Merkit un esaouenn anv disheñvel evit ar raktres.',
-       'config-ns-conflict' => 'Tabut zo etre an esaouenn anv spisaet "<nowiki>$1</nowiki>" hag un esaouenn anv dre ziouer eus MediaWiki.
-Spisait un anv raktres esaouenn anv all.',
-       'config-admin-box' => 'Kont merour',
-       'config-admin-name' => "Hoc'h anv :",
-       'config-admin-password' => 'Ger-tremen :',
-       'config-admin-password-confirm' => 'Adskrivañ ar ger-tremen :',
-       'config-admin-help' => 'Merkit hoc\'h anv implijer amañ, da skouer "Yann Vlog".
-Hemañ eo an anv a implijot evit kevreañ d\'ar wiki-mañ.',
-       'config-admin-name-blank' => 'Lakait anv ur merour.',
-       'config-admin-name-invalid' => 'Direizh eo an anv implijer spisaet "<nowiki>$1</nowiki>".
-Merkit un anv implijer all.',
-       'config-admin-password-blank' => 'Reiñ ur ger-tremen evit kont ar merour.',
-       'config-admin-password-same' => "Ne c'hall ket ar ger-tremen bezañ heñvel ouzh anv ar gont.",
-       'config-admin-password-mismatch' => "Ne glot ket ar gerioù-tremen hoc'h eus merket an eil gant egile.",
-       'config-admin-email' => "Chomlec'h postel :",
-       'config-admin-email-help' => "Merkit ur chomlec'h postel amañ evit gallout resev posteloù a-berzh implijerien all eus ar wiki, adderaouekaat ho ker-tremen ha bezañ kelaouet eus ar c'hemmoù degaset d'ar pajennoù zo en ho roll evezhiañ. Gallout a rit lezel ar vaezienn-mañ goullo.",
-       'config-admin-error-user' => 'Fazi diabarzh en ur grouiñ ur merer gant an anv "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'Fazi diabarzh o lakaat ur ger-tremen evit ar merour « <nowiki>$1</nowiki> » : <pre>$2</pre>',
-       'config-admin-error-bademail' => "Ebarzhet hoc'h eus ur chomlec'h postel direizh.",
-       'config-subscribe' => 'Koumanantit da [https://lists.wikimedia.org/mailman/listinfo/mediawiki-listenn kemennadoù evit ar stummoù nevez].',
-       'config-almost-done' => "Kazi echu eo !
-Gellout a rit tremen ar c'hefluniadur nevez ha staliañ ar wiki war-eeun.",
-       'config-optional-continue' => "Sevel muioc'h a goulennoù ouzhin.",
-       'config-optional-skip' => 'Aet on skuizh, staliañ ar wiki hepken.',
-       'config-profile' => 'Profil ar gwirioù implijer :',
-       'config-profile-wiki' => 'Wiki digor',
-       'config-profile-no-anon' => 'Krouidigezh ur gont ret',
-       'config-profile-fishbowl' => 'Embanner aotreet hepken',
-       'config-profile-private' => 'Wiki prevez',
-       'config-license' => 'Copyright hag aotre-implijout:',
-       'config-license-none' => 'Aotre ebet en traoñ pajenn',
-       'config-license-cc-by-sa' => 'Creative Commons Deroadenn Kenrannañ heñvel',
-       'config-license-cc-by' => 'Creative Commons Deroadenn',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Deroadenn Angenwerzhel Kenrannañ heñvel',
-       'config-license-cc-0' => 'Creative Commons Zero (Domani foran)',
-       'config-license-pd' => 'Domani foran',
-       'config-license-cc-choose' => 'Dibabit un aotre-implijout Creative Commons personelaet',
-       'config-email-settings' => 'Arventennoù ar postel',
-       'config-enable-email' => 'Gweredekaat ar posteloù a ya kuit',
-       'config-enable-email-help' => "Mar fell deoc'h ober gant ar posteler eo ret deoc'h [http://www.php.net/manual/en/mail.configuration.php kefluniañ arventennoù postel PHP] ervat.
-Mar ne fell ket deoc'h ober gant ar servij posteloù e c'hall bezañ diweredekaet amañ.",
-       'config-email-user' => 'Gweredekaat ar posteloù a implijer da implijer',
-       'config-email-user-help' => "Aotren a ra an holl implijerien da gas posteloù an eil d'egile mard eo bet gweredekaet an arc'hwel ganto en ho penndibaboù.",
-       'config-email-usertalk' => 'Gweredekaat kemennadur pajennoù kaozeal an implijerien',
-       'config-email-usertalk-help' => "Talvezout a ra d'an implijerien da resev kemennadennoù ma vez kemmet o fajennoù kaozeal, ma vez gweredekaet en o fenndibaboù.",
-       'config-email-watchlist' => "Gweredekaat ar c'hemenn listenn evezhiañ",
-       'config-email-watchlist-help' => "Talvezout a ra d'an implijerien da resev kemennadennoù diwar-benn ar pajennoù evezhiet ganto, ma vez gweredekaet en o fenndibaboù.",
-       'config-email-auth' => 'Gweredekaat an dilesadur dre bostel',
-       'config-email-sender' => "Chomlec'h postel respont :",
-       'config-email-sender-help' => "Merkit ar chomlec'h postel da vezañ implijet da chomlec'h distreiñ ar posteloù a ya er-maez.
-Di e vo kaset ar posteloù distaolet.
-Niverus eo ar servijerioù postel a c'houlenn da nebeutañ un [http://fr.wikipedia.org/wiki/Nom_de_domaine anv domani] reizh.",
-       'config-upload-settings' => 'Pellgargañ skeudennoù ha restroù',
-       'config-upload-enable' => 'Gweredekaat ar pellgargañ restroù',
-       'config-upload-deleted' => "Kavlec'h evit ar restroù dilamet :",
-       'config-upload-deleted-help' => "Dibab ur c'havlec'h da ziellaouiñ ar restroù diverket.
-Ar pep gwellañ e vije ma ne vije ket tu d'e dizhout adalek ar Genrouedad.",
-       'config-logo' => 'URL al logo :',
-       'config-instantcommons' => "Gweredekaat ''InstantCommons''",
-       'config-cc-error' => "N'eus deuet disoc'h ebet gant dibaber aotreoù-implijout Creative Commons.
-Merkit anv an aotre-implijout gant an dorn.",
-       'config-cc-again' => 'Dibabit adarre...',
-       'config-cc-not-chosen' => 'Dibabit an aotre-implijout Creative Commons a fell deoc\'h ober gantañ ha klikit war "kenderc\'hel".',
-       'config-advanced-settings' => 'Kefluniadur araokaet',
-       'config-cache-options' => 'Arventennoù evit krubuilhañ traezoù :',
-       'config-cache-accel' => 'Krubuilhañ traezoù PHP (APC, XCache pe WinCache)',
-       'config-cache-memcached' => 'Implijout Memcached (en deus ezhomm bezañ staliet ha kefluniet)',
-       'config-memcached-servers' => 'Servijerioù Memcached :',
-       'config-memcached-help' => "Roll ar chomlec'hioù IP da implijout evit Memcached.
-Ret eo spisaat unan dre linenn ha spisaat ar porzh da vezañ implijet. Da skouer :
-127.0.0.1:11211
-192.168.1.25:1234",
-       'config-memcache-needservers' => "Diuzet hoc'h eus Memcached evel seurt krubuilh met n'hoc'h eus spisaet servijer ebet.",
-       'config-memcache-badip' => "Ur chomlec'h IP direizh hoc'h eus lakaet evit Memcached : $1.",
-       'config-memcache-badport' => 'Niverennoù porzh Memcached a zlefe bezañ etre $1 ha $2.',
-       'config-extensions' => 'Astennoù',
-       'config-extensions-help' => "N'eo ket bet detektet an astennoù rollet a-us en ho kavlec'h <code>./astennoù</code>.
-
-Marteze e vo ezhomm kefluniañ pelloc'h met gallout a rit o gweredekaat bremañ.",
-       'config-install-alreadydone' => "'''Diwallit''': Staliet hoc'h eus MediaWiki dija war a seblant hag emaoc'h o klask e staliañ c'hoazh.
-Kit d'ar bajenn war-lerc'h, mar plij.",
-       'config-install-begin' => 'Pa vo bet pouezet ganeoc\'h war "{{int:config-continue}}"  e krogo staliadur MediaWiki.
-Pouezit war "{{int:config-back}}" mar fell deoc\'h cheñch tra pe dra.',
-       'config-install-step-done' => 'graet',
-       'config-install-step-failed' => "c'hwitet",
-       'config-install-extensions' => 'En ur gontañ an astennoù',
-       'config-install-database' => 'Krouiñ an diaz roadennoù',
-       'config-install-schema' => 'O krouiñ ar chema',
-       'config-install-pg-schema-not-exist' => "N'eus ket eus chema PostgreSQL.",
-       'config-install-pg-schema-failed' => "C'hwitet eo krouidigezh an taolennoù.
-Gwiriit hag-eñ e c'hall an implijer « $1 » skrivañ er brastres « $2 ».",
-       'config-install-pg-commit' => "O wiriekaat ar c'hemmoù",
-       'config-install-pg-plpgsql' => 'O wiriañ ar yezh PL/pgSQL',
-       'config-pg-no-plpgsql' => "Ret eo deoc'h staliañ ar yezh PL/pgSQL en diaz roadennoù $1",
-       'config-pg-no-create-privs' => "N'eus ket gwirioù a-walc'h gant ar gont hoc'h eus merket evit ar staliadur evit gallout krouiñ ur gont.",
-       'config-install-user' => 'O krouiñ an diaz roadennoù implijer',
-       'config-install-user-alreadyexists' => 'An implijer "$1" zo anezhañ dija',
-       'config-install-user-create-failed' => 'Fazi e-ser krouiñ an implijer "$1" : $2',
-       'config-install-user-grant-failed' => 'N\'eus ket bet gallet reiñ an aotre d\'an implijer "$1" : $2',
-       'config-install-tables' => 'Krouiñ taolennoù',
-       'config-install-tables-failed' => "'''Fazi :''' c'hwitet eo krouidigezh an daolenn gant ar fazi-mañ : $1",
-       'config-install-interwiki' => 'O leuniañ dre ziouer an daolenn etrewiki',
-       'config-install-interwiki-list' => "Ne c'haller ket kavout ar restr <code>interwiki.list</code>.",
-       'config-install-stats' => 'O sevel ar stadegoù',
-       'config-install-keys' => "Genel an alc'hwezioù kuzh",
-       'config-install-sysop' => 'Krouidigezh kont ar merour',
-       'config-install-subscribe-fail' => "N'haller ket koumanantiñ da mediawiki-announce : $1",
-       'config-install-mainpage' => "O krouiñ ar bajenn bennañ gant un endalc'had dre ziouer",
-       'config-install-extension-tables' => 'O krouiñ taolennoù evit an astennoù gweredekaet',
-       'config-install-mainpage-failed' => "Ne c'haller ket ensoc'hañ ar bajenn bennañ: $1",
-       'config-download-localsettings' => 'Pellgargañ <code>LocalSettings.php</code>',
-       'config-help' => 'skoazell',
-       'config-nofile' => 'N\'eus ket bet gallet kavout ar restr "$1". Daoust ha dilamet eo bet ?',
-       'mainpagetext' => "'''Meziant MediaWiki staliet.'''",
-       'mainpagedocfooter' => "Sellit ouzh [//meta.wikimedia.org/wiki/Help:Contents Sturlevr an implijerien] evit gouzout hiroc'h war an doare da implijout ar meziant wiki.
-
-== Kregiñ ganti ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Roll an arventennoù kefluniañ]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAG MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Roll ar c'haozeadennoù diwar-benn dasparzhoù MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Lec'hiañ MediaWiki en ho yezh", # Fuzzy
-);
-
-/** Bosnian (bosanski)
- * @author CERminator
- */
-$messages['bs'] = array(
-       'config-desc' => 'Instalacija za MediaWiki',
-       'config-title' => 'MediaWiki $1 instalacija',
-       'config-information' => 'Informacija',
-       'config-localsettings-upgrade' => 'Otkrivena je datoteka <code>LocalSettings.php</code>.
-Da biste unaprijedili vaš softver, molimo vas upišite vrijednost od <code>$wgUpgradeKey</code> u okvir ispod.
-Naći ćete ga u <code>LocalSettings.php</code>.',
-       'config-localsettings-key' => 'Ključ za nadgradnju:',
-       'config-session-error' => 'Greška pri pokretanju sesije: $1',
-       'config-no-session' => 'Vaši podaci sesije su izgubljeni!
-Provjerite vaš php.ini i provjerite da li je <code>session.save_path</code> postavljen na pravilni direktorijum.',
-       'config-your-language' => 'Vaš jezik:',
-       'config-your-language-help' => 'Odaberite jezik koji ćete koristiti tokom procesa instalacije.',
-       'config-wiki-language' => 'Wiki jezik:',
-       'config-wiki-language-help' => 'Odaberite jezik na kojem će wiki biti najvećim dijelim pisana.',
-       'config-back' => '← Nazad',
-       'config-continue' => 'Nastavi →',
-       'config-page-language' => 'Jezik',
-       'config-page-welcome' => 'Dobrodošli u MediaWiki!',
-       'config-page-dbconnect' => 'Poveži sa bazom podataka',
-       'config-page-upgrade' => 'Unaprijedi postojeću instalaciju',
-       'config-page-dbsettings' => 'Postavke baze podataka',
-       'config-page-name' => 'Naziv',
-       'config-page-options' => 'Opcije',
-       'config-page-install' => 'Instaliraj',
-       'config-page-complete' => 'Završeno!',
-       'config-page-restart' => 'Ponovi instalaciju ispočetka',
-       'config-page-readme' => 'Pročitaj me',
-       'config-page-releasenotes' => 'Bilješke izdanja',
-       'config-page-copying' => 'Kopiram',
-       'config-page-upgradedoc' => 'Nadograđujem',
-       'config-help-restart' => 'Da li želite očistiti sve spremljene podatke koje ste unijeli i da započnete ponovo proces instalacije?',
-       'config-restart' => 'Da, pokreni ponovo',
-       'config-sidebar' => '* [//www.mediawiki.org MediaWiki Početna strana]
-* [//www.mediawiki.org/wiki/Help:Contents Vodič za korisnike]
-* [//www.mediawiki.org/wiki/Manual:Contents Vodič za administratore]
-* [//www.mediawiki.org/wiki/Manual:FAQ NPP]
-----
-* <doclink href=Readme>Pročitaj me</doclink>
-* <doclink href=ReleaseNotes>Napomene izdanja</doclink>
-* <doclink href=Copying>Kopiranje</doclink>
-* <doclink href=UpgradeDoc>Poboljšavanje</doclink>',
-       'config-env-good' => 'Okruženje je provjereno.
-Možete instalirati MediaWiki.',
-       'config-env-php' => 'PHP $1 je instaliran.',
-       'config-no-db' => 'Nije mogao biti pronađen pogodan driver za bazu podataka! Morate instalirati driver baze podataka za PHP.
-Slijedeće vrste baza podataka su podržane: $1.
-
-Ako se na dijeljenom serveru, tražite od vašeg pružaoca usluga da instalira pogodan driver za bazu podataka.
-Ako se sami kompajlirali PHP, podesite ga sa omogućenim klijentom baze podataka, koristeći naprimjer <code>./configure --with-mysql</code>.
-Ako ste instalirali PHP iz Debian ili Ubuntu paketa, možda morate instalirati i modul php5-mysql.',
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] je instaliran',
-       'config-apc' => '[http://www.php.net/apc APC] je instaliran',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] je instaliran',
-       'config-diff3-bad' => 'GNU diff3 nije pronađen.',
-       'config-db-type' => 'Vrsta baze podataka:',
-       'config-db-host' => 'Domaćin baze podataka:',
-       'config-db-wiki-settings' => 'Identificiraj ovu wiki',
-       'config-db-name' => 'Naziv baze podataka:',
-       'config-db-name-oracle' => 'Šema baze podataka:',
-       'config-header-mysql' => 'Postavke MySQL',
-       'config-header-postgres' => 'Postavke PostgreSQL',
-       'config-header-sqlite' => 'Postavke SQLite',
-       'config-header-oracle' => 'Postavke Oracle',
-       'config-invalid-db-type' => 'Nevaljana vrsta baze podataka',
-       'config-upgrade-done' => "Nadogradnja završena.
-
-Sada možete [$1 početi koristiti vašu wiki].
-
-Ako želite regenerisati vašu datoteku <code>LocalSettings.php</code>, kliknite na dugme ispod.
-Ovo '''nije preporučeno''' osim ako nemate problema s vašom wiki.",
-       'config-admin-name' => 'Vaše ime:',
-       'config-admin-password' => 'Šifra:',
-       'mainpagetext' => "'''MediaViki softver is uspješno instaliran.'''",
-       'mainpagedocfooter' => 'Kontaktirajte [//meta.wikimedia.org/wiki/Help:Contents uputstva za korisnike] za informacije o upotrebi wiki programa.
-
-== Početak ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista postavki]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki najčešće postavljana pitanja]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista E-Mail adresa MediaWiki]', # Fuzzy
-);
-
-/** Catalan (català)
- * @author Pitort
- * @author පසිඳු කාවින්ද
- */
-$messages['ca'] = array(
-       'config-page-language' => 'Llengua',
-       'config-page-name' => 'Nom',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-ns-generic' => 'Projecte',
-       'config-admin-password' => 'Contrasenya:',
-       'config-profile-wiki' => 'Wiki públic',
-       'config-profile-private' => 'Wiki privat',
-       'config-license-pd' => 'Domini públic',
-       'config-upload-deleted' => 'Directori pels arxius suprimits:',
-       'config-advanced-settings' => 'Configuració avançada',
-       'config-extensions' => 'Extensions',
-       'mainpagetext' => "'''El programari del MediaWiki s'ha instaŀlat correctament.'''",
-       'mainpagedocfooter' => "Consulteu la [//meta.wikimedia.org/wiki/Help:Contents Guia d'Usuari] per a més informació sobre com utilitzar-lo.
-
-== Per a començar ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Llista de característiques configurables]
-* [//www.mediawiki.org/wiki/Manual:FAQ PMF del MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de correu (''listserv'') per a anuncis del MediaWiki]", # Fuzzy
-);
-
-/** Chechen (нохчийн)
- * @author Sasan700
- * @author Умар
- */
-$messages['ce'] = array(
-       'config-your-language' => 'Хьан мотт:',
-       'config-continue' => 'Кхин дӀа →',
-       'config-page-language' => 'Мотт',
-       'config-page-name' => 'ЦӀе',
-       'config-no-fts3' => "'''Тергам бе''': SQLite гулйина хуттург йоцуш [//sqlite.org/fts3.html FTS3] — лахар болхбеш хир дац оцу бухца.",
-       'config-site-name' => 'Викин цӀе:',
-       'config-site-name-blank' => 'Язъе сайтан цӀе.',
-       'config-license' => 'Авторан бакъонаш а лицензи а:',
-       'config-license-pd' => 'Юкъараллин хьал',
-       'config-help' => 'гӀо',
-       'mainpagetext' => "'''Вики-белха гlирс «MediaWiki» кхочуш дика дlахlоттийна.'''",
-       'mainpagedocfooter' => 'Викийца болх бан хаамаш карор бу хlокху чохь [//meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 нисвохааман куьйгаллица].
-
-== Цхьаболу пайде гlирсаш ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Гlирс нисбан тарлушболу могlам];
-* [//www.mediawiki.org/wiki/Manual:FAQ Сих сиха лушдолу хаттарш а жоьпаш оцу MediaWiki];
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Хаам бохьуьйту араяларца башхонца керла MediaWiki].', # Fuzzy
-);
-
-/** Cebuano (Cebuano)
- */
-$messages['ceb'] = array(
-       'mainpagetext' => "'''Malamposon ang pag-instalar sa MediaWiki.'''",
-       'mainpagedocfooter' => 'Konsultaha ang [//meta.wikimedia.org/wiki/Help:Contents Giya sa mga gumagamit] alang sa impormasyon unsaon paggamit niining wiki nga software.
-
-== Pagsugod ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Listahan sa mga setting sa kompigurasyon]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ sa MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce  Mailing list sa mga release sa MediaWiki]', # Fuzzy
-);
-
-/** Sorani Kurdish (کوردی)
- * @author Asoxor
- * @author Calak
- * @author Muhammed taha
- */
-$messages['ckb'] = array(
-       'config-wiki-language' => 'زمانی ویکی:',
-       'config-back' => '→ گەڕانەوە',
-       'config-continue' => 'بەردەوامبوون ←',
-       'config-page-language' => 'زمان',
-       'config-page-welcome' => 'بەخێربێیت بۆ میدیاویکی!',
-       'config-page-dbconnect' => 'پەیوەندی دەکات بەبنکەی زانیارییەکان',
-       'config-page-upgrade' => 'نويکردنەوەی دابەزاندنی پێشوو',
-       'config-page-dbsettings' => 'ڕێکخستنەکانی بنکەی زانیارییەکان',
-       'config-page-name' => 'ناو',
-       'config-page-options' => 'ھەڵبژاردەکان',
-       'config-page-install' => 'دابەزاندن',
-       'config-page-complete' => 'تەواو!',
-       'config-page-restart' => 'دەست پێکردنەوە بەدابەزاندن',
-       'config-page-readme' => 'بمخوێنەوە',
-       'config-page-copying' => 'لەبەردەگیرێتەوە',
-       'config-page-upgradedoc' => 'نوێدەکرێتەوە',
-       'config-page-existingwiki' => 'ویکی پێشوو',
-       'config-restart' => 'بەڵێ، دەستی پێ بکەرەوە',
-       'config-env-php' => 'PHP $1 دابەزێندرا.',
-       'config-env-php-toolow' => 'PHP $1 دابەزێندرا.
-ھەرچۆنێک بێت میدیاویکی پێویستی بە PHP $2 یان بەرزتر ھەیە.',
-       'mainpagetext' => "'''میدیاویکی بە سەرکەوتوویی دامەزرا.'''",
-       'mainpagedocfooter' => 'لە [//meta.wikimedia.org/wiki/Help:Contents ڕێنوێنیی بەکارھێنەران] بۆ زانیاری سەبارەت بە بەکارھێنانی نەرمامێری ویکی کەڵک وەربگرە.
-
-== دەستپێکردن ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings پێرستی ڕێکخستنەکانی شێوەپێدان]
-* [//www.mediawiki.org/wiki/Manual:FAQ پرسیارە دووپاتکراوەکانی میدیاویکی (MediaWiki FAQ)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce پێرستی ئیمەیلی وەشانەکانی میدیاویکی]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources خۆماڵیکردنی ویکیمیدیا بۆ زمانەکەت]',
-);
-
-/** Capiznon (Capiceño)
- * @author Oxyzen
- */
-$messages['cps'] = array(
-       'mainpagetext' => "'''Madalag-on nga na-install ang MediaWiki.'''",
-       'mainpagedocfooter' => 'Kunsultahon ang [//meta.wikimedia.org/wiki/Help:Pagtuytoy sa Manug-usar] para sa impormasyon sa paggamit sang wiki nga "software".
-
-==Pag-umpisa==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista sang mga setting sang konpigurayon]
-* [//www.mediawiki.org/wiki/Manual:FAQ Mga perme napangkot sa MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista sang mga ginapadal-an sang sulat sang MediaWiki]', # Fuzzy
-);
-
-/** Crimean Turkish (Cyrillic script) (къырымтатарджа (Кирилл)‎)
- */
-$messages['crh-cyrl'] = array(
-       'mainpagetext' => "'''MediaWiki мувафакъиетнен къурулды.'''",
-       'mainpagedocfooter' => "Бу викининъ ёл-ёругъыны [//meta.wikimedia.org/wiki/Help:Contents User's Guide къулланыджы къылавузындан] огренип оласынъыз.
-
-== Базы файдалы сайтлар ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Олуджы сазламалар джедвели];
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki боюнджа сыкъ берильген суаллернен джеваплар];
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-нинъ янъы версияларынынъ чыкъувындан хабер йиберюв].", # Fuzzy
-);
-
-/** Crimean Turkish (Latin script) (qırımtatarca (Latin)‎)
- */
-$messages['crh-latn'] = array(
-       'mainpagetext' => "'''MediaWiki muvafaqiyetnen quruldı.'''",
-       'mainpagedocfooter' => "Bu vikiniñ yol-yoruğını [//meta.wikimedia.org/wiki/Help:Contents User's Guide qullanıcı qılavuzından] ögrenip olasıñız.
-
-== Bazı faydalı saytlar ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Olucı sazlamalar cedveli];
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki boyunca sıq berilgen suallernen cevaplar];
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-niñ yañı versiyalarınıñ çıquvından haber yiberüv].", # Fuzzy
-);
-
-/** Czech (česky)
- * @author Danny B.
- * @author Jezevec
- * @author Mormegil
- * @author 아라
- */
-$messages['cs'] = array(
-       'config-desc' => 'Instalační program pro MediaWiki',
-       'config-title' => 'Instalace MediaWiki $1',
-       'config-information' => 'Informace',
-       'config-localsettings-upgrade' => 'Byl nalezen soubor <code>LocalSettings.php</code>.
-Pokud chcete stávající instalaci aktualizovat, zadejte hodnotu <code>$wgUpgradeKey</code>, kterou naleznete v souboru <code>LocalSettings.php</code>, do následujícího rámečku.',
-       'config-localsettings-cli-upgrade' => 'Byl detekován soubor <code><code>LocalSettings.php</code></code>
-Pro aktualizaci spusťte místo instalace skript <code>update.php</code>.',
-       'config-localsettings-key' => 'Klíč pro aktualizaci:',
-       'config-localsettings-badkey' => 'Zadaný klíč je nesprávný.',
-       'config-upgrade-key-missing' => 'Byla detekována existující instalace MediaWiki.
-Pokud ji chcete aktualizovat, přidejte následující řádku na konec souboru <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => 'Existující soubor <code>LocalSettings.php</code> vypadá neúplný.
-Není nastavena proměnná $1.
-Upravte soubor <code>LocalSettings.php</code> tak, aby tuto proměnnou obsahoval, a klikněte na „{{int:Config-continue}}“.',
-       'config-localsettings-connection-error' => 'Při připojování k databázi s využitím nastavení uvedených v <code>LocalSettings.php</code> nebo <code>AdminSettings.php</code> došlo k chybě. Opravte tato nastavení a zkuste to znovu.
-
-$1',
-       'config-session-error' => 'Nepodařilo se inicializovat relaci: $1',
-       'config-session-expired' => 'Platnost dat vašeho sezení patrně vypršela.
-Sezení má nastavenu životnost $1.
-Prodloužit ji můžete nastavením <code>session.gc_maxlifetime</code> v php.ini.
-Spusťte instalační proces od začátku.',
-       'config-no-session' => 'Data vašeho sezení se ztratila!
-Zkontrolujte svůj soubor php.ini a ujistěte se, že <code>session.save_path</code> je nastaveno na odpovídající adresář.',
-       'config-your-language' => 'Váš jazyk:',
-       'config-your-language-help' => 'Zvolte jazyk, který se má použít v průběhu instalace.',
-       'config-wiki-language' => 'Jazyk wiki:',
-       'config-wiki-language-help' => 'Zvolte jazyk, ve kterém bude většina obsahu wiki.',
-       'config-back' => '← Zpět',
-       'config-continue' => 'Pokračovat →',
-       'config-page-language' => 'Jazyk',
-       'config-page-welcome' => 'Vítejte v MediaWiki!',
-       'config-page-dbconnect' => 'Připojení k databázi',
-       'config-page-upgrade' => 'Aktualizace existující instalace',
-       'config-page-dbsettings' => 'Nastavení databáze',
-       'config-page-name' => 'Název',
-       'config-page-options' => 'Nastavení',
-       'config-page-install' => 'Instalovat',
-       'config-page-complete' => 'Hotovo!',
-       'config-page-restart' => 'Restartovat instalaci',
-       'config-page-readme' => 'Soubor Čti mě',
-       'config-page-releasenotes' => 'Poznámky k vydání',
-       'config-page-copying' => 'Licence',
-       'config-page-upgradedoc' => 'Upgrade',
-       'config-page-existingwiki' => 'Existující wiki',
-       'config-help-restart' => 'Chcete smazat všechny údaje, které jste zadali, a spustit proces instalace znovu od začátku?',
-       'config-restart' => 'Ano, restartovat',
-       'config-welcome' => '=== Kontrola prostředí ===
-Nyní se provedou základní kontroly, aby se zjistilo, zda je toto prostředí použitelné k instalaci MediaWiki.
-Pokud budete potřebovat k dokončení instalace pomoc, nezapomeňte sdělit výsledky těchto testů.',
-       'config-copyright' => "=== Licence a podmínky ===
-$1
-
-Tento program je svobodný software; můžete jej šířit nebo modifikovat podle podmínek GNU General Public License, vydávané Free Software Foundation; buď verze 2 této licence anebo (podle vašeho uvážení) kterékoli pozdější verze.
-
-Tento program je distribuován v naději, že bude užitečný, avšak '''bez jakékoli záruky'''; neposkytují se ani odvozené záruky '''prodejnosti''' anebo '''vhodnosti pro určitý účel'''.
-Podrobnosti se dočtete v textu GNU General Public License.
-
-<doclink href=Copying>Kopii GNU General Public License</doclink> jste měli obdržet spolu s tímto programem; pokud ne, napište na Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA nebo [http://www.gnu.org/copyleft/gpl.html si ji přečtěte online].",
-       'config-sidebar' => '* [//www.mediawiki.org Oficiální web MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents Uživatelská příručka]
-* [//www.mediawiki.org/wiki/Manual:Contents Administrátorská příručka]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]
-----
-* <doclink href=Readme>Čti mě</doclink>
-* <doclink href=ReleaseNotes>Poznámky k vydání</doclink>
-* <doclink href=Copying>Licence</doclink>
-* <doclink href=UpgradeDoc>Upgrade</doclink>',
-       'config-env-good' => 'Prostředí bylo zkontrolováno.
-Můžete nainstalovat MediaWiki.',
-       'config-env-bad' => 'Prostředí bylo zkontrolováno.
-MediaWiki nelze nainstalovat.',
-       'config-env-php' => 'Je nainstalováno PHP $1.',
-       'config-env-php-toolow' => 'Je nainstalováno PHP $1.
-MediaWiki ale vyžaduje PHP $2 nebo vyšší.',
-       'config-unicode-using-utf8' => 'Pro normalizaci Unicode se používá utf8_normalize.so Briona Vibbera.',
-       'config-unicode-using-intl' => 'Pro normalizaci Unicode se používá [http://pecl.php.net/intl PECL rozšíření intl].',
-       'config-unicode-pure-php-warning' => "'''Upozornění''': Není dostupné [http://pecl.php.net/intl PECL rozšíření intl] pro normalizaci Unicode, bude se využívat pomalá implementace v čistém PHP.
-Pokud provozujete wiki s velkým provozem, měli byste si přečíst něco o [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalizaci Unicode].",
-       'config-unicode-update-warning' => "'''Upozornění''': Nainstalovaná verze vrstvy pro normalizaci Unicode používá starší verzi knihovny [http://site.icu-project.org/ projektu ICU].
-Pokud vám aspoň trochu záleží na používání Unicode, měli byste [//www.mediawiki.org/wiki/Unicode_normalization_considerations ji aktualizovat].",
-       'config-no-db' => 'Nepodařilo se nalézt vhodný databázový ovladač! Musíte do PHP nainstalovat databázový ovladač.
-Jsou podporovány následující typy databází: $1.
-
-Pokud jste na sdíleném hostingu, požádejte svého poskytovale o instalaci vhodného databázového ovladače.
-Pokud jste si PHP přeložili sami, překonfigurujte ho se zapnutým databázovým klientem, například pomocí <code>./configure --with-mysql</code>.
-Pokud jste PHP nainstalovali z balíčku Debian či Ubuntu, potřebujete nainstalovat také modul php5-mysql.',
-       'config-outdated-sqlite' => "'''Upozornění''': Máte SQLite $1, které je starší než minimálně vyžadovaná verze $2. SQLite nebude dostupné.",
-       'config-no-fts3' => "'''Upozornění''': SQLite bylo přeloženo bez [//sqlite.org/fts3.html modulu FTS3], funkce pro vyhledávání zde nebudou dostupné.",
-       'config-register-globals' => "'''Upozornění: Je zapnuta PHP volba <code>[http://php.net/register_globals register_globals]</code>.'''
-'''Pokud můžete, vypněte ji.'''
-MediaWiki bude fungovat, ale váš server je vystaven potenciálním bezpečnostním hrozbám.",
-       'config-magic-quotes-runtime' => "'''Kritická chyba: Je zapnuto [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!'''
-Toto nastavení nepředvídatelně poškozuje vstupní data.
-MediaWiki nelze nainstalovat ani používat, dokud není toto nastavení vypnuto.",
-       'config-magic-quotes-sybase' => "'''Kritická chyba: Je zapnuto [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''
-Toto nastavení nepředvídatelně poškozuje vstupní data.
-MediaWiki nelze nainstalovat ani používat, dokud není toto nastavení vypnuto.",
-       'config-mbstring' => "'''Kritická chyba: Je zapnuto [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''
-Toto nastavení způsobuje chyby a může nepředvídatelně poškozovat vstupní data.
-MediaWiki nelze nainstalovat ani používat, dokud není toto nastavení vypnuto.",
-       'config-ze1' => "'''Kritická chyba: Je zapnut [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]!'''
-Toto nastavení způsobuje s MediaWiki příšerné chyby.
-MediaWiki nelze nainstalovat ani používat, dokud není toto nastavení vypnuto.",
-       'config-safe-mode' => "'''Upozornění:''' Je aktivní [http://www.php.net/features.safe-mode bezpečný režim] PHP.
-Může způsobovat potíže, zejména při použití načítání souborů a podpory <code>math</code>.",
-       'config-xml-bad' => 'Chybí XML modul pro PHP.
-MediaWiki potřebuje funkce v tomto modulu a v této konfiguraci nebude fungovat.
-Pokud běžíte na Mandrake, nainstalujte balíček php-xml.',
-       'config-pcre' => 'Zdá se, že modul s podporou PCRE chybí.
-MediaWiki ke své činnosti potřebuje funkce pro Perl-kompatibilní regulární výrazy.',
-       'config-pcre-no-utf8' => "'''Kritická chyba''': PHP modul PCRE byl zřejmě přeložen bez podpory PCRE_UTF8.
-MediaWiki vyžaduje ke správné funkci podporu UTF-8.",
-       'config-memory-raised' => '<code>memory_limit</code> v PHP byl nastaven na $1, zvýšen na $2.',
-       'config-memory-bad' => "'''Upozornění:''' <code>memory_limit</code> je v PHP nastaven na $1.
-To je pravděpodobně příliš málo.
-Instalace může selhat!",
-       'config-ctype' => "'''Kritická chyba''': PHP musí být přeloženo s podporou pro [http://www.php.net/manual/en/ctype.installation.php rozšíření Ctype].",
-       'config-json' => "'''Kritická chyba:''' PHP bylo přeloženo bez podpory JSON.
-Před instalací MediaWiki musíte buď nainstalovat rozšíření PHP JSON nebo rozšíření [http://pecl.php.net/package/jsonc PECL jsonc].
-* Rozšíření PHP je součástí Red Hat Enterprise Linux (CentOS) 5 a 6, avšak musí se povolit v <code>/etc/php.ini</code> nebo <code>/etc/php.d/json.ini</code>.
-* V některých linuxových distribucích vydaných po květnu 2013 může toto rozšíření PHP chybět a místo toho mohou používat rozšíření PECL jako <code>php5-json</code> nebo <code>php-pecl-jsonc</code>.",
-       'config-xcache' => 'Je nainstalována [http://xcache.lighttpd.net/ XCache]',
-       'config-apc' => 'Je nainstalováno [http://www.php.net/apc APC]',
-       'config-wincache' => 'Je nainstalována [http://www.iis.net/download/WinCacheForPhp WinCache]',
-       'config-no-cache' => "'''Upozornění:''' Nebylo nalezeno [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache], ani [http://www.iis.net/download/WinCacheForPhp WinCache].
-Kešování objektů bude vypnuto.",
-       'config-mod-security' => "'''Upozornění''': váš webový server má zapnuto [http://modsecurity.org/ mod_security]. Při chybné konfiguraci může způsobovat potíže MediaWiki či dalším programům, které umožňují ukládat libovolný obsah.
-Pokud narazíte na náhodné chyby, podívejte se do [http://modsecurity.org/documentation/ dokumentace mod_security] nebo kontaktujte technickou podporu vašeho poskytovatele.",
-       'config-diff3-bad' => 'Nebyl nalezen GNU diff3.',
-       'config-git' => 'Nalezen software pro správu verzí Git: <code>$1</code>.',
-       'config-git-bad' => 'Software pro správu verzí Git nebyl nalezen.',
-       'config-imagemagick' => 'Nalezen ImageMagick: <code>$1</code>.
-Pokud povolíte načítání souborů, bude zapnuto vytváření náhledů.',
-       'config-gd' => 'Nalezena vestavěná grafická knihovna GD.
-Pokud povolíte načítání souborů, bude zapnuto vytváření náhledů.',
-       'config-no-scaling' => 'Nebyla nalezena knihovna GD ani ImageMagick.
-Vytváření náhledů bude vypnuto.',
-       'config-no-uri' => "'''Chyba:''' Nepodařilo se určit aktuální URI.
-Instalace přerušena.",
-       'config-no-cli-uri' => "'''Upozornění''': Nebylo uvedeno --scriptpath, používá se implicitní hodnota: <code>$1</code>.",
-       'config-using-server' => 'Použito jméno serveru „<nowiki>$1</nowiki>“.',
-       'config-using-uri' => 'Použito URL serveru „<nowiki>$1$2</nowiki>“.',
-       'config-uploads-not-safe' => "'''Upozornění:''' Váš implicitní adresář pro načítání souborů <code>$1</code> umožňuje provádění libovolných skriptů.
-Přestože MediaWiki všechny načítané soubory kontroluje proti bezpečnostním hrozbám, je důrazně doporučeno [//www.mediawiki.org/wiki/Manual:Security#Upload_security tuto bezpečnostní díru zacelit] před povolením načítání souborů.",
-       'config-no-cli-uploads-check' => "'''Upozornění:''' Váš implicitní adresář pro načítané soubory (<code>$1</code>) se při instalaci z příkazového řádku nekontroluje na bezpečnostní hrozbu provádění libovolných skriptů.",
-       'config-brokenlibxml' => 'Váš systém obsahuje kombinaci verzí PHP a libxml2, která je chybná a může v MediaWiki a dalších webových aplikacích způsobovat skryté poškozování dat.
-Aktualizujte na PHP 5.2.9 nebo novější a libxml2 2.7.3 nebo novější ([//bugs.php.net/bug.php?id=45996 chyba evidovaná u PHP]).
-Instalace přerušena.',
-       'config-using531' => 'MediaWiki nelze používat na PHP $1 kvůli chybě při předávání parametrů odkazem do <code>__call()</code>.
-Pro vyřešení upgradujte na PHP 5.3.2 nebo vyšší nebo downgradujte na PHP 5.3.0.
-Instalace přerušena.',
-       'config-suhosin-max-value-length' => 'Je nainstalován Suhosin, který omezuje délku parametrů GET na $1 bajtů.
-Komponenta ResourceLoader z MediaWiki dokáže s tímto omezením pracovat, ale sníží to výkon.
-Pokud to je alespoň trochu možné, měli byste v <code>php.ini</code> nastavit <code>suhosin.get.max_value_length</code> na 1024 nebo vyšší a na stejnou hodnotu nastavit v <code>LocalSettings.php</code> proměnnou <code>$wgResourceLoaderMaxQueryLength</code>.',
-       'config-db-type' => 'Typ databáze:',
-       'config-db-host' => 'Databázový server:',
-       'config-db-host-help' => 'Pokud je váš databázový server na jiném počítači, zadejte zde jméno stroje nebo IP adresu.
-
-Pokud používáte sdílený webový hosting, váš poskytovatel by vám měl v dokumentaci sdělit správné jméno stroje.
-
-Pokud instalujete na server běžící na Windows a používáte MySQL, jméno „localhost“ nemusí fungovat. V takovém případě zkuste jako místní IP adresu zadat „127.0.0.1“.
-
-Pokud používáte PostgreSQL, můžete se připojit Unixovými sockety tak, že toto pole necháte prázdné.',
-       'config-db-host-oracle' => 'Databázové TNS:',
-       'config-db-host-oracle-help' => 'Zadejte platné [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; tato instalace musí vidět soubor tnsnames.ora.<br />Pokud používáte klientské knihovny verze 10g nebo novější, můžete také používat názvy [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
-       'config-db-wiki-settings' => 'Identifikace této wiki',
-       'config-db-name' => 'Jméno databáze:',
-       'config-db-name-help' => 'Zvolte jméno, které označuje vaši wiki.
-Nemělo by obsahovat mezery.
-
-Pokud používáte sdílený webový hosting, váš poskytovatel vám buď sdělí konkrétní jméno databáze, nebo vás nechá vytvářet databáze pomocí nějakého ovládacího panelu.',
-       'config-db-name-oracle' => 'Databázové schéma:',
-       'config-db-account-oracle-warn' => 'Existují tři podporované možnosti pro instalaci s použitím databáze Oracle.
-
-Pokud chcete v rámci instalace založit databázový účet, zadejte jako databázový účet pro instalaci účet s rolí SYSDBA a uveďte požadované údaje pro účet pro webový přístup, jinak můžete vytvořit účet pro webový přístup ručně a zadat pouze tento účet (pokud má dostatečná oprávnění k zakládání objektů schématu) nebo poskytnout dva různé účty, jeden s oprávněními k zakládání, druhý omezený pro webový přístup.
-
-Skript pro založení účtu s potřebnými privilegii můžete v této instalaci nalézt v adresáři „maintenance/oracle/“. Nezapomeňte, že použití omezeného účtu znepřístupní veškeré možnosti údržby přes implicitní účet.',
-       'config-db-install-account' => 'Uživatelský účet pro instalaci',
-       'config-db-username' => 'Databázové uživatelské jméno:',
-       'config-db-password' => 'Databázové heslo:',
-       'config-db-password-empty' => 'Zadejte heslo pro nového databázového uživatele: $1.
-Přestože může jít zakládat nové uživatele i bez hesel, není to bezpečné.',
-       'config-db-install-username' => 'Zadejte uživatelské jméno, které se použije pro připojení k databázi v průběhu instalace.
-Toto není jméno uživatelského účtu MediaWiki; toto je uživatelské jméno k vaší databázi.',
-       'config-db-install-password' => 'Zadejte heslo, které se použije pro připojení k databázi v průběhu instalace.
-Toto není heslo uživatelského účtu MediaWiki; toto je heslo k vaší databázi.',
-       'config-db-install-help' => 'Zadejte uživatelské jméno a heslo, které se použijí pro připojení k databázi v průběhu instalace.',
-       'config-db-account-lock' => 'Použít stejné uživatelské jméno a heslo pro běžnou činnost',
-       'config-db-wiki-account' => 'Uživatelský účet pro běžnou činnost',
-       'config-db-wiki-help' => 'Zadejte uživatelské jméno a heslo, které se bude používat pro připojení k databázi za běžného provozu wiki.
-Pokud účet neexistuje a instalační účet má dostatečná oprávnění, bude tento uživatelský účet založen s minimálními oprávněními potřebnými k provozu wiki.',
-       'config-db-prefix' => 'Prefix databázových tabulek:',
-       'config-db-prefix-help' => 'Pokud potřebujete sdílet jednu databázi mezi vícero wiki, případně mezi MediaWiki a další webovou aplikací, můžete přidat k názvu každé tabulky prefix, abyste se vyhnuli konfliktům.
-Nepoužívejte mezery.
-
-Toto pole se zpravidla ponechává prázdné.',
-       'config-db-charset' => 'Znaková sada databáze',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binární',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 zpětně kompatibilní UTF-8',
-       'config-charset-help' => "'''Upozornění:''' Pokud použijete '''zpětně kompatibilní UTF-8''' na MySQL 4.1+ a následně zazálohujete databázi pomocí <code>mysqldump</code>, může to zničit všechny ne-ASCII znaky, což nevratně poškodí vaše zálohy!
-
-V '''binárním režimu''' ukládá MediaWiki text v UTF-8 do databáze v binárních sloupcích.
-To je výkonnější než UTF-8 režim MySQL a umožňuje využít plný rozsah znaků Unicode.
-V '''režimu UTF-8''' bude MySQL znát znakovou sadu vašich dat a může je příslušně zobrazovat a převádět,
-ale neumožní vám uložit znaky mimo [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
-       'config-mysql-old' => 'Je vyžadováno MySQL $1 nebo novější, vy máte $2.',
-       'config-db-port' => 'Databázový port:',
-       'config-db-schema' => 'Schéma pro MediaWiki:',
-       'config-db-schema-help' => 'Toto schéma zpravidla stačí.
-Měňte ho, jen pokud víte, že je to potřeba.',
-       'config-pg-test-error' => "Nelze se připojit k databázi '''$1''': $2",
-       'config-sqlite-dir' => 'Adresář pro data SQLite:',
-       'config-sqlite-dir-help' => "SQLite ukládá veškerá data v jediném souboru.
-
-Zadaný adresář musí být v průběhu instalace být přístupný pro zápis.
-
-'''Neměl by''' být dostupný z webu, proto ho nedáváme tam, kde jsou vaše PHP soubory.
-
-Instalátor do adresáře přidá soubor <code>.htaccess</code>, ale pokud to selže, mohl by někdo získat přístup k vaší holé databázi.
-To zahrnuje syrová uživatelská data (e-mailové adresy, hašovaná hesla), jako i smazané revize a další data s omezeným přístupem z vaší wiki.
-
-Zvažte umístění databáze někam zcela jinam, například do <code>/var/lib/mediawiki/mojewiki</code>.",
-       'config-oracle-def-ts' => 'Implicitní tabulkový prostor:',
-       'config-oracle-temp-ts' => 'Dočasný tabulkový prostor:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Věštba',
-       'config-support-info' => 'MediaWiki podporuje následující databázové systémy:
-
-$1
-
-Pokud v nabídce níže nevidíte databázový systém, který chcete použít, musíte pro zapnutí podpory následovat instrukce odkázané výše.',
-       'config-support-mysql' => '* $1 je pro MediaWiki hlavní platformou a je podporováno nejlépe ([http://www.php.net/manual/en/mysql.installation.php jak zkompilovat PHP s podporou MySQL])',
-       'config-support-postgres' => '* $1 je populární open-source databázový systém používaný jako alternativa k MySQL ([http://www.php.net/manual/en/pgsql.installation.php jak přeložit PHP s podporou PostgreSQL]). Mohou se vyskytnout ještě nějaké menší chyby, použití v produkčním prostředí se nedoporučuje.',
-       'config-support-sqlite' => '* $1 je velmi dobře podporovaný lehký databázový systém. ([http://www.php.net/manual/en/pdo.installation.php Jak přeložit PHP s podporou SQLite], používá PDO)',
-       'config-support-oracle' => '* $1 je komerční podniková databáze. ([http://www.php.net/manual/en/oci8.installation.php Jak přeložit PHP s podporou OCI8])',
-       'config-header-mysql' => 'Nastavení MySQL',
-       'config-header-postgres' => 'Nastavení PostgreSQL',
-       'config-header-sqlite' => 'Nastavení SQLite',
-       'config-header-oracle' => 'Nastavení Oracle',
-       'config-invalid-db-type' => 'Chybný typ databáze',
-       'config-missing-db-name' => 'Musíte zadat hodnotu pro „Jméno databáze“',
-       'config-missing-db-host' => 'Musíte zadat hodnotu pro „Databázový server“',
-       'config-missing-db-server-oracle' => 'Musíte zadat hodnotu pro „Databázové TNS“',
-       'config-invalid-db-server-oracle' => 'Chybné databázové TNS „$1“.
-Používejte buď „TNS Name“ nebo „Easy Connect“ (vizte [http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]).',
-       'config-invalid-db-name' => 'Chybné jméno databáze „$1“.
-Používejte pouze ASCII písmena (a-z, A-Z), čísla (0-9), podtržítko (_) a spojovník (-).',
-       'config-invalid-db-prefix' => 'Chybný databázový prefix „$1“.
-Používejte pouze ASCII písmena (a-z, A-Z), čísla (0-9), podtržítko (_) a spojovník (-).',
-       'config-connection-error' => '$1.
-
-Zkontrolujte server, uživatelské jméno a heslo a zkuste to znovu.',
-       'config-invalid-schema' => 'Neplatné schéma pro MediaWiki „$1“.
-Používejte pouze ASCII písmena (a-z, A-Z), čísla (0-9) a podtržítko (_).',
-       'config-db-sys-create-oracle' => 'Instalátor podporuje zakládání nového účtu pouze prostřednictvím účtu SYSDBA.',
-       'config-db-sys-user-exists-oracle' => 'Uživatelský účet „$1“ již existuje. SYSDBA lze použít pouze pro založení nového účtu!',
-       'config-postgres-old' => 'Je vyžadován PostgreSQL $1 nebo novější, vy máte $2.',
-       'config-sqlite-name-help' => 'Zvolte jméno, které označuje vaši wiki.
-Nepoužívejte mezery a spojovníky.
-Použije se jako název souboru s daty SQLite.',
-       'config-sqlite-parent-unwritable-group' => 'Nelze vytvořit datový adresář <code><nowiki>$1</nowiki></code>, protože do nadřazeného adresáře <code><nowiki>$2</nowiki></code> nemá webový server právo zapisovat.
-
-Instalátor zjistil uživatele, pod kterým váš webový server běží.
-Abyste mohli pokračovat, umožněte mu zapisovat do adresáře <code><nowiki>$3</nowiki></code>.
-Na systémech Unix/Linux proveďte:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Nelze vytvořit datový adresář <code><nowiki>$1</nowiki></code>, protože do nadřazeného adresáře <code><nowiki>$2</nowiki></code> nemá webový server právo zapisovat.
-
-Instalátoru se nepodařilo zjistit uživatele, pod kterým váš webový server běží.
-Abyste mohli pokračovat, umožněte zápis do <code><nowiki>$3</nowiki></code> všem uživatelům.
-Na systémech Unix/Linux proveďte:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Chyba při vytváření datového adresáře „$1“.
-Zkontrolujte umístění a zkuste to znovu.',
-       'config-sqlite-dir-unwritable' => 'Nelze zapisovat do adresáře „$1“.
-Změňte na něm oprávnění, aby do něj mohl webový server zapisovat, a zkuste to znovu.',
-       'config-sqlite-connection-error' => '$1.
-
-Zkontrolujte datový adresář a jméno databáze níže a zkuste to znovu.',
-       'config-sqlite-readonly' => 'Do souboru <code>$1</code> nelze zapisovat.',
-       'config-sqlite-cant-create-db' => 'Nepodařilo se vytvořit databázový soubor <code>$1</code>.',
-       'config-sqlite-fts3-downgrade' => 'PHP neobsahuje podporu FTS3, downgradují se tabulky',
-       'config-can-upgrade' => "V této databázi jsou tabulky MediaWiki.
-Pokud je chcete aktualizovat na MediaWiki $1, klikněte na '''Pokračovat'''.",
-       'config-upgrade-done' => "Aktualizace byla dokončena.
-
-Svou wiki teď můžete [$1 začít používat].
-
-Pokud chcete přegenerovat soubor <code>LocalSettings.php</code>, klikněte na tlačítko níže.
-To se ale '''nedoporučuje''', pokud s wiki nemáte problémy.",
-       'config-upgrade-done-no-regenerate' => 'Aktualizace byla dokončena.
-
-Svou wiki teď můžete [$1 začít používat].',
-       'config-regenerate' => 'Přegenerovat LocalSettings.php →',
-       'config-show-table-status' => 'Dotaz <code>SHOW TABLE STATUS</code> se nezdařil!',
-       'config-unknown-collation' => "'''Upozornění:''' Databáze používá nerozpoznané řazení.",
-       'config-db-web-account' => 'Databázový účet pro webový přístup',
-       'config-db-web-help' => 'Zvolte uživatelské jméno a heslo, které bude webový server používat pro připojení k databázovému serveru při běžném provozu wiki.',
-       'config-db-web-account-same' => 'Použít stejný účet jako pro instalaci',
-       'config-db-web-create' => 'Založit účet, pokud zatím neexistuje',
-       'config-db-web-no-create-privs' => 'Účet uvedený pro instalaci nemá oprávnění dostatečná pro založení nového účtu.
-Účet, který zde uvedete, již musí existovat.',
-       'config-mysql-engine' => 'Typ úložiště:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Upozornění''': Jako typ úložiště pro MySQL jste zvolili MyISAM, které není pro použití v MediaWiki doporučeno, neboť:
-* stěží podporuje současný přístup kvůli zamykání tabulek,
-* je náchylnější na poškození dat než jiná úložiště,
-* kód MediaWiki nepodporuje MyISAM vždy tak dobře, jak by měl.
-
-Pokud vaše instalace MySQL podporuje InnoDB, důrazně doporučujeme použít spíše to.
-Pokud vaše instalace MySQL InnoDB nepodporuje, možná je čas na aktualizaci.",
-       'config-mysql-only-myisam-dep' => "'''Upozornění:''' Jediným dostupným formátem dat pro MySQL je MyISAM, který se k užití pro MediaWiki nedoporučuje, protože:
-* téměř nepodporuje současný přístup kvůli zamykání tabulek,
-* oproti jiným formátům je náchylnější k poškození,
-* kód MediaWiki nepodporuje MyISAM tak dobře, jak by bylo potřeba.
-
-Vaše instalace MySQL nepodporuje InnoDB, možná je na čase upgradovat.",
-       'config-mysql-engine-help' => "'''InnoDB''' je téměř vždy nejlepší volba, neboť má dobrou podporu současného přístupu.
-
-'''MyISAM''' může být rychlejší u instalací pro jednoho uživatele nebo jen pro čtení.
-Databáze MyISAM bývají poškozeny častěji než databáze InnoDB.",
-       'config-mysql-charset' => 'Znaková sada databáze:',
-       'config-mysql-binary' => 'Binární',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "V '''binárním režimu''' ukládá MediaWiki text v UTF-8 do databáze v binárních sloupcích.
-To je výkonnější než UTF-8 režim MySQL a umožňuje využít plný rozsah znaků Unicode.
-
-V '''režimu UTF-8''' bude MySQL znát znakovou sadu vašich dat a může je příslušně zobrazovat a převádět, ale neumožní vám uložit znaky mimo [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
-       'config-site-name' => 'Název wiki:',
-       'config-site-name-help' => 'Bude se zobrazovat v titulku prohlížeče a na dalších místech.',
-       'config-site-name-blank' => 'Zadejte název serveru.',
-       'config-project-namespace' => 'Jmenný prostor projektu:',
-       'config-ns-generic' => 'Projekt',
-       'config-ns-site-name' => 'Stejný jako název wiki: $1',
-       'config-ns-other' => 'Jiný (uveďte)',
-       'config-ns-other-default' => 'MojeWiki',
-       'config-project-namespace-help' => "Po vzoru Wikipedie udržuje mnoho wiki stránky se svými pravidly odděleně od stránek s vlastním obsahem, v „'''jmenném prostoru projektu'''“.
-Názvy všech stránek v tomto jmenném prostoru začínají jistým prefixem, který zde můžete nastavit.
-Zvykem je odvozovat tento prefix z názvu wiki, ale nesmí obsahovat jisté interpunkční znaky jako „#“ nebo „:“.",
-       'config-ns-invalid' => 'Uvedený jmenný prostor „<nowiki>$1</nowiki>“ je neplatný.
-Zadejte jiný jmenný prostor projektu.',
-       'config-ns-conflict' => 'Uvedený jmenný prostor „<nowiki>$1</nowiki>“ koliduje se standardním jmenným prostorem MediaWiki.
-Zadejte jiný jmenný prostor projektu.',
-       'config-admin-box' => 'Správcovský účet',
-       'config-admin-name' => 'Vaše jméno:',
-       'config-admin-password' => 'Heslo:',
-       'config-admin-password-confirm' => 'Heslo ještě jednou:',
-       'config-admin-help' => 'Zde zadejte své požadované uživatelské jméno, například „Pepa Novák“.
-Tímto jménem se budete do wiki hlásit.',
-       'config-admin-name-blank' => 'Zadejte uživatelské jméno správce.',
-       'config-admin-name-invalid' => 'Uvedené uživatelské jméno „<nowiki>$1</nowiki>“ není platné.
-Zadejte jiné uživatelské jméno.',
-       'config-admin-password-blank' => 'Zadejte heslo ke správcovskému účtu.',
-       'config-admin-password-same' => 'Heslo nesmí být stejné jako uživatelské jméno.',
-       'config-admin-password-mismatch' => 'Uvedená hesla se neshodují.',
-       'config-admin-email' => 'E-mailová adresa:',
-       'config-admin-email-help' => 'Zde zadejte e-mailovou adresu, která vám umožní přijímat e-maily od ostatních uživatelů wiki, získat nové heslo a přijímat notifikace o změnách sledovaných stránek. Tohle pole můžete nechat prázdné.',
-       'config-admin-error-user' => 'Vnitřní chyba při vytváření správce se jménem „<nowiki>$1</nowiki>“.',
-       'config-admin-error-password' => 'Vnitřní chyba při nastavování hesla správci se jménem „<nowiki>$1</nowiki>“: <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Zadali jste neplatnou e-mailovou adresu.',
-       'config-subscribe' => 'Přihlásit se k odběru [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce e-mailové konference pro oznamování nových verzí].',
-       'config-subscribe-help' => 'Tohle je e-mailová konference s nízkým provozem, na které se oznamují nové verze, včetně důležitých bezpečnostních oznámení.
-Měli byste se do ní přihlásit a při vydání nových verzí aktualizovat svou instalaci MediaWiki.',
-       'config-subscribe-noemail' => 'Pokusili jste se přihlásit k odběru e-mailové konference pro oznamování nových verzí, aniž byste poskytli e-mailovou adresu.
-Pokud se chcete přihlásit k odběru, zadejte e-mailovou adresu.',
-       'config-almost-done' => 'Už jsme skoro hotovi!
-Zbývající konfiguraci už můžete přeskočit a nainstalovat wiki hned teď.',
-       'config-optional-continue' => 'Ptejte se mě dál.',
-       'config-optional-skip' => 'Už mě to nudí, prostě nainstalujte wiki.',
-       'config-profile' => 'Profil uživatelských práv:',
-       'config-profile-wiki' => 'Otevřená wiki',
-       'config-profile-no-anon' => 'Vyžadována registrace uživatelů',
-       'config-profile-fishbowl' => 'Editace jen pro vybrané',
-       'config-profile-private' => 'Soukromá wiki',
-       'config-profile-help' => "Wiki fungují nejlépe, když je necháte editovat co největším možným počtem lidí.
-V MediaWiki můžete snadno kontrolovat poslední změny a vracet zpět libovolnou škodu způsobenou hloupými nebo zlými uživateli.
-
-Mnoho lidí však zjistilo, že je MediaWiki užitečné v širokém spektru rolí a někdy není snadné všechny přesvědčit o výhodách wikizvyklostí.
-Takže si můžete vybrat.
-
-Model '''{{int:config-profile-wiki}}''' dovoluje editovat všem, aniž by se museli přihlašovat.
-Na wiki, kde je '''{{int:config-profile-no-anon}}''', se lépe řídí zodpovědnost, ale může to odradit náhodné přispěvatele.
-
-Profil '''{{int:config-profile-fishbowl}}''' umožňuje schváleným uživatelům editovat, ale veřejnost si může stránky prohlížet včetně jejich historie.
-'''{{int:config-profile-private}}''' dovoluje stránky prohlížet jen schváleným uživatelům, kteří je i mohou editovat.
-
-Po instalaci je možná komplexní konfigurace uživatelských práv; vizte [//www.mediawiki.org/wiki/Manual:User_rights odpovídající stránku příručky].",
-       'config-license' => 'Autorská práva a licence:',
-       'config-license-none' => 'Bez patičky s licencí',
-       'config-license-cc-by-sa' => 'Creative Commons Uveďte autora-Zachovejte licenci',
-       'config-license-cc-by' => 'Creative Commons Uveďte autora',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci',
-       'config-license-cc-0' => 'Creative Commons Zero (volné dílo)',
-       'config-license-gfdl' => 'GNU Free Documentation License 1.3 nebo novější',
-       'config-license-pd' => 'Volné dílo',
-       'config-license-cc-choose' => 'Zvolit vlastní licenci Creative Commons',
-       'config-license-help' => "Mnoho veřejných wiki všechny příspěvky zveřejňuje pod některou [http://freedomdefined.org/Definition/Cs svobodnou licencí].
-To pomáhá vytvořit duch komunitního vlastnictví a povzbuzuje dlouhodobé přispívání.
-To obecně není potřeba u soukromé nebo firemní wiki.
-
-Pokud chcete být schopni používat text z Wikipedie a chcete, aby Wikipedie byla schopna přijímat text okopírovaný z vaší wiki, měli byste zvolit '''Creative Commons Uveďte autora-Zachovejte licenci'''.
-
-Dříve Wikipedie používala GNU Free Documentation License.
-GFDL je platná licence, ale složité jí porozumět.
-Také je komplikované používat obsah licencovaný pod GFDL.",
-       'config-email-settings' => 'Nastavení e-mailu',
-       'config-enable-email' => 'Zapnout odchozí e-mail',
-       'config-enable-email-help' => 'Pokud chcete, aby e-mail fungoval, je potřeba správně nakonfigurovat [http://www.php.net/manual/en/mail.configuration.php e-mailová nastavení PHP].
-Pokud nechcete žádné e-mailové funkce, můžete je zde vypnout.',
-       'config-email-user' => 'Umožnit vzájemné e-maily mezi uživateli',
-       'config-email-user-help' => 'Umožní všem uživatelům posílat si navzájem e-maily, pokud si to zapnout v uživatelském nastavení.',
-       'config-email-usertalk' => 'Umožnit notifikace k uživatelským diskusím',
-       'config-email-usertalk-help' => 'Umožní uživatelům přijímat notifikace o změnách uživatelských diskusí, pokud si to zapnou v nastavení.',
-       'config-email-watchlist' => 'Umožnit notifikace ke sledovaným stránkám',
-       'config-email-watchlist-help' => 'Umožní uživatelům přijímat notifikace o změnách sledovaných stránek, pokud si to zapnou v nastavení.',
-       'config-email-auth' => 'Zapnout ověřování e-mailů',
-       'config-email-auth-help' => "Pokud je tato volba vybrána, uživatelé musí potvrdit svou e-mailovou adresu pomocí odkazu, který je jim poslán, kdykoli si ji nastaví nebo změní.
-Jen potvrzené e-mailové adresy mohou přijímat e-maily od ostatních uživatelů a e-maily s notifikacemi o změnách.
-Nastavení této volby je '''doporučeno''' pro veřejné wiki kvůli možnosti zneužití e-mailových funkcí.",
-       'config-email-sender' => 'Návratová e-mailová adresa:',
-       'config-email-sender-help' => 'Zadejte e-mailovou adresu, která se má použít jako návratová na odchozích e-mailech.
-Sem budou zasílány nedoručitelné zprávy.
-Mnoho mailových serverů vyžaduje, aby byla přinejmenším část s doménovým jménem platná.',
-       'config-upload-settings' => 'Obrázky a načítání souborů',
-       'config-upload-enable' => 'Povolit načítání souborů',
-       'config-upload-help' => 'Načítání souborů potenciálně vystavuje váš server bezpečnostním rizikům.
-Více informací naleznete v [//www.mediawiki.org/wiki/Manual:Security části o bezpečnosti] v příručce.
-
-Pro umožnění načítání souborů změňte práva na podadresáři <code>images</code> pod kořenovým adresářem MediaWiki, aby do něj mohl webový server zapisovat.
-Poté zapněte tuto volbu.',
-       'config-upload-deleted' => 'Adresář pro smazané soubory:',
-       'config-upload-deleted-help' => 'Zvolte adresář, do kterého se mají archivovat smazané soubory.
-Tento adresář by ideálně neměl být dostupný z webu.',
-       'config-logo' => 'URL loga:',
-       'config-logo-help' => 'Základní vzhled MediaWiki zahrnuje místo pro logo o velikosti 135×160 pixelů nad bočním menu.
-Načtěte obrázek odpovídající velikosti a zadejte sem jeho URL.
-
-Pokud je vaše logo umístěno relativně vůči <code>$wgStylePath</code> nebo <code>$wgScriptPath</code>, můžete zde tyto proměnné použít.
-
-Pokud logo nechcete, ponechte toto pole prázdné.',
-       'config-instantcommons' => 'Zapnout Instant Commons',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] je funkce, která umožňuje wiki používat obrázky, zvuky a další mediální soubory ze serveru [//commons.wikimedia.org/wiki/Hlavn%C3%AD_strana Wikimedia Commons].
-Aby to bylo možné, potřebuje mít MediaWiki přístup k internetu.
-
-Více informací o této funkci, včetně instrukcí, jak ji nastavit pro jiné wiki než Wikimedia Commons, najdete v [//mediawiki.org/wiki/Manual:$wgForeignFileRepos příručce].',
-       'config-cc-error' => 'Volič licence Creative Commons nevrátil žádný výsledek.
-Zadejte název licence ručně.',
-       'config-cc-again' => 'Zvolit znovu…',
-       'config-cc-not-chosen' => 'Zvolte si požadovanou licenci Creative Commons a klikněte na tlačítko.',
-       'config-advanced-settings' => 'Pokročilá konfigurace',
-       'config-cache-options' => 'Nastavení cachování objektů:',
-       'config-cache-help' => 'Cachování objektů se používá pro vylepšení rychlosti MediaWiki tím, že se cachují často používaná data.
-Středním až velkým serverům se jeho zapnutí důrazně doporučuje, i menší servery pocítí jeho výhody.',
-       'config-cache-none' => 'Bez cachování (o žádnou funkcionalitu nepřijdete, na větších wiki však může dojít ke zhoršení rychlosti)',
-       'config-cache-accel' => 'Cachování PHP objektů (APC, XCache nebo WinCache)',
-       'config-cache-memcached' => 'Použít Memcached (vyžaduje další nastavení a konfiguraci)',
-       'config-memcached-servers' => 'Servery Memcached:',
-       'config-memcached-help' => 'Seznam IP adres, které se mají používat pro Memcached.
-Uveďte jednu na řádek spolu s portem. Například:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => 'Jako typ cache jste zvolili Memcached, ale neuvedli jste žádné servery.',
-       'config-memcache-badip' => 'Zadali jste neplatnou IP adresu pro Memcached: $1.',
-       'config-memcache-noport' => 'Nezadali jste port serveru Memcached: $1.
-Pokud port neznáte, implicitní je 11211.',
-       'config-memcache-badport' => 'Čísla portů pro Memcached by měla být mezi $1 a $2.',
-       'config-extensions' => 'Rozšíření',
-       'config-extensions-help' => 'Výše uvedená rozšíření byla nalezena ve vašem adresáři <code>./extensions</code>.
-
-Mohou vyžadovat dodatečnou konfiguraci, ale teď je můžete povolit.',
-       'config-install-alreadydone' => "'''Upozornění:''' Vypadá to, že jste MediaWiki již nainstalovali a teď se o to pokoušíte znovu.
-Pokračujte na další stránku.",
-       'config-install-begin' => 'Stisknutím „{{int:config-continue}}“ spustíte instalaci MediaWiki.
-Pokud ještě chcete udělat nějaké změny, stiskněte „{{int:config-back}}“.',
-       'config-install-step-done' => 'hotovo',
-       'config-install-step-failed' => 'selhaly',
-       'config-install-extensions' => 'Vkládají se rozšíření',
-       'config-install-database' => 'Připravuje se databáze',
-       'config-install-schema' => 'Vytváří se schéma',
-       'config-install-pg-schema-not-exist' => 'Schéma PostgreSQL neexistuje.',
-       'config-install-pg-schema-failed' => 'Založení tabulek se nezdařilo.
-Ujistěte se, že uživatel „$1“ může zapisovat do schématu „$2“.',
-       'config-install-pg-commit' => 'Potvrzují se změny',
-       'config-install-pg-plpgsql' => 'Kontroluje se jazyk PL/pgSQL',
-       'config-pg-no-plpgsql' => 'Musíte do databáze $1 nainstalovat jazyk PL/pgSQL',
-       'config-pg-no-create-privs' => 'Účet zadaný pro instalaci nemá oprávnění k založení uživatelského účtu.',
-       'config-pg-not-in-role' => 'Účet zadaný pro webového uživatele již existuje
-Účet zadaný pro instalaci není superuživatelský a není členem role webového uživatele, takže nemůže zakládat objekty vlastněné webovým uživatelem.
-
-MediaWiki v současné době vyžaduje, aby byl vlastníkem tabulek webový uživatel. Uveďte jiný název účtu webového uživatele nebo klikněte na „zpět“ a zadejte instalačního uživatele s odpovídajícími oprávněními.',
-       'config-install-user' => 'Vytváří se databázový uživatel',
-       'config-install-user-alreadyexists' => 'Uživatel „$1“ už existuje',
-       'config-install-user-create-failed' => 'Vytváření uživatele „$1“ selhalo: $2',
-       'config-install-user-grant-failed' => 'Uživateli „$1“ se nepodařilo přidělit oprávnění: $2',
-       'config-install-user-missing' => 'Zadaný uživatel „$1“ neexistuje.',
-       'config-install-user-missing-create' => 'Zadaný uživatel „$1“ neexistuje.
-Pokud ho chcete založit, zaškrtněte možnost „založit účet“ níže.',
-       'config-install-tables' => 'Vytvářejí se tabulky',
-       'config-install-tables-exist' => "'''Upozornění''': Vypadá to, že tabulky MediaWiki již existují.
-Přeskakuje se jejich zakládání.",
-       'config-install-tables-failed' => "'''Chyba''': Vytvoření tabulek selhalo s následující chybou: $1",
-       'config-install-interwiki' => 'Tabulka interwiki se plní implicitními položkami',
-       'config-install-interwiki-list' => 'Nelze přečíst soubor <code>interwiki.list</code>.',
-       'config-install-interwiki-exists' => "'''Upozornění''': Vypadá to, že tabulka interwiki již obsahuje nějaké záznamy.
-Přeskakuje se implicitní seznam.",
-       'config-install-stats' => 'Inicializují se statistiky',
-       'config-install-keys' => 'Vytvářejí se tajné klíče',
-       'config-insecure-keys' => "'''Upozornění:''' {{PLURAL:$2|Tajný klíč|Tajné klíče}} ($1) vytvořené v průběhu instalace {{PLURAL:$2|není|nejsou}} zcela {{PLURAL:$2|bezpečný|bezpečné}}. Zvažte {{PLURAL:$2|jeho|jejich}} ruční změnu.",
-       'config-install-sysop' => 'Zakládá se uživatelský účet správce',
-       'config-install-subscribe-fail' => 'Nelze se přihlásit k odběru mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'Není nainstalován cURL a není dostupné allow_url_fopen.',
-       'config-install-mainpage' => 'Vytváří se počáteční obsah hlavní strany',
-       'config-install-extension-tables' => 'Vytvářejí se tabulky pro zapnutá rozšíření',
-       'config-install-mainpage-failed' => 'Nepodařilo se vložit hlavní stranu: $1',
-       'config-install-done' => "'''Gratulujeme!'''
-Úspěšně jste nainstalovali MediaWiki.
-
-Instalátor vytvořil soubor <code>LocalSettings.php</code>.
-Ten obsahuje veškerou vaši konfiguraci.
-
-Budete si ho muset stáhnout a uložit do základního adresáře vaší instalace wiki (do stejného adresáře jako soubor index.php). Stažení souboru se mělo spustit automaticky.
-
-Pokud se vám stažení nenabídlo nebo jste ho zrušili, můžete ho spustit znovu kliknutím na následující odkaz:
-
-$3
-
-'''Poznámka''': Pokud to neuděláte hned, tento vygenerovaný konfigurační soubor nebude později dostupný, pokud instalaci opustíte, aniž byste si ho stáhli.
-
-Až to dokončíte, můžete '''[$2 vstoupit do své wiki]'''.",
-       'config-download-localsettings' => 'Stáhnout <code>LocalSettings.php</code>',
-       'config-help' => 'nápověda',
-       'config-nofile' => 'Soubor „$1“ nelze nalézt. Byl smazán?',
-       'config-extension-link' => 'Věděli jste, že vaše wiki podporuje [//www.mediawiki.org/wiki/Manual:Extensions rozšíření]?
-
-Můžete procházet [//www.mediawiki.org/wiki/Category:Extensions_by_category rozšíření po kategoriích] nebo si prohlédnout [//www.mediawiki.org/wiki/Extension_Matrix Matici rozšíření] obsahující úplný seznam.',
-       'mainpagetext' => "'''MediaWiki byla úspěšně nainstalována.'''",
-       'mainpagedocfooter' => '[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.
-
-== Začínáme ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]
-* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Překlad MediaWiki do vašeho jazyka]',
-);
-
-/** Kashubian (kaszëbsczi)
- */
-$messages['csb'] = array(
-       'mainpagetext' => "'''MediaWiki òsta zainstalowónô.'''",
-);
-
-/** Church Slavic (словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ)
- * @author ОйЛ
- */
-$messages['cu'] = array(
-       'config-page-language' => 'ѩꙁꙑкъ',
-       'config-page-name' => 'имѧ',
-       'config-help' => 'помощь',
-);
-
-/** Chuvash (Чӑвашла)
- */
-$messages['cv'] = array(
-       'mainpagetext' => "'''«MediaWiki» вики-движока лартасси ăнăçлă вĕçленчĕ.'''",
-       'mainpagedocfooter' => 'Ку википе ĕçлеме пулăшакан информацине [//meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 усăç руководствинче] тупма пултаратăр.
-
-== Пулăшма пултарĕç ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Ĕнерлевсен списокĕ];
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki тăрăх час-часах ыйтакан ыйтусемпе хуравсем];
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki çĕнĕ верси тухнине пĕлтерекен рассылка].', # Fuzzy
-);
-
-/** Welsh (Cymraeg)
- * @author Lloffiwr
- * @author Xxglennxx
- */
-$messages['cy'] = array(
-       'mainpagetext' => "'''Wedi llwyddo gosod meddalwedd MediaWiki yma'''",
-       'mainpagedocfooter' => "Ceir cymorth (yn Saesneg) ar ddefnyddio meddalwedd wici yn y [//meta.wikimedia.org/wiki/Help:Contents Canllaw Defnyddwyr] ar wefan Wikimedia.
-
-==Cychwyn arni==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Rhestr osodiadau wrth gyflunio]
-* [//www.mediawiki.org/wiki/Manual:FAQ Cwestiynau poblogaidd ar MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Rhestr postio datganiadau MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Cyfieithu MediaWici i'ch iaith chi]",
-);
-
-/** Danish (dansk)
- * @author Peter Alberti
- */
-$messages['da'] = array(
-       'mainpagetext' => "'''MediaWiki er nu installeret.'''",
-       'mainpagedocfooter' => 'Se [//meta.wikimedia.org/wiki/Help:Contents brugervejledningen] for oplysninger om brugen af wikiprogrammellet.
-
-== At komme i gang ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Listen over opsætningsmuligheder]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki ofte stillede spørgsmål]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Postliste angående udgivelser af MediaWiki]', # Fuzzy
-);
-
-/** German (Deutsch)
- * @author Geitost
- * @author Kghbln
- * @author LWChris
- * @author Metalhead64
- * @author Purodha
- * @author Rillke
- * @author The Evil IP address
- * @author Umherirrender
- * @author Wikinaut
- * @author 아라
- */
-$messages['de'] = array(
-       'config-desc' => 'Das MediaWiki-Installationsprogramm',
-       'config-title' => 'Installation von MediaWiki $1',
-       'config-information' => 'Informationen',
-       'config-localsettings-upgrade' => 'Eine Datei <code>LocalSettings.php</code> wurde gefunden.
-Um die vorhandene Installation aktualisieren zu können, muss der Wert des Parameters <code>$wgUpgradeKey</code> im folgenden Eingabefeld angegeben werden.
-Der Parameterwert befindet sich in der Datei <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Eine Datei <code><code>LocalSettings.php</code></code> wurde gefunden.
-Um die vorhandene Installation zu aktualisieren, muss die Datei <code>update.php</code> ausgeführt werden.',
-       'config-localsettings-key' => 'Aktualisierungsschlüssel:',
-       'config-localsettings-badkey' => 'Der angegebene Aktualisierungsschlüssel ist falsch.',
-       'config-upgrade-key-missing' => 'Eine MediaWiki-Installation wurde gefunden.
-Um die vorhandene Installation aktualisieren zu können, muss die unten angegebene Codezeile in die Datei <code>LocalSettings.php</code> an deren Ende eingefügt werden:
-
-$1',
-       'config-localsettings-incomplete' => 'Die vorhandene Datei <code>LocalSettings.php</code> scheint unvollständig zu sein.
-Die Variable <code>$1</code> wurde nicht definiert.
-Die Datei <code>LocalSettings.php</code> muss entsprechend geändert werden, so dass sie definiert ist. Klicke danach auf „{{int:Config-continue}}“.',
-       'config-localsettings-connection-error' => 'Beim Verbindungsversuch zur Datenbank ist, unter Verwendung der in den Dateien <code>LocalSettings.php</code> oder <code>AdminSettings.php</code> hinterlegten Einstellungen, ein Fehler aufgetreten. Diese Einstellungen müssen korrigiert werden. Danach kann ein erneuter Versuch unternommen werden.
-
-$1',
-       'config-session-error' => 'Fehler beim Starten der Sitzung: $1',
-       'config-session-expired' => 'Die Sitzungsdaten scheinen abgelaufen zu sein.
-Sitzungen sind für einen Zeitraum von $1 konfiguriert.
-Dieser kann durch Anhebung des Parameters <code>session.gc_maxlifetime</code> in der Datei <code>php.ini</code> erhöht werden.
-Den Installationsvorgang erneut starten.',
-       'config-no-session' => 'Die Sitzungsdaten sind verloren gegangen!
-Die Datei <code>php.ini</code> muss geprüft und es muss dabei sichergestellt werden, dass der Parameter <code>session.save_path</code> auf das richtige Verzeichnis verweist.',
-       'config-your-language' => 'Sprache während des Installierens:',
-       'config-your-language-help' => 'Bitte die Sprache auswählen, die während des Installationsvorgangs verwendet werden soll.',
-       'config-wiki-language' => 'Sprache des Wikis:',
-       'config-wiki-language-help' => 'Bitte die Sprache auswählen, die überwiegend beim Erstellen der Inhalte verwendet werden soll.',
-       'config-back' => '← Zurück',
-       'config-continue' => 'Weiter →',
-       'config-page-language' => 'Sprache',
-       'config-page-welcome' => 'Willkommen bei MediaWiki!',
-       'config-page-dbconnect' => 'Mit der Datenbank verbinden',
-       'config-page-upgrade' => 'Eine vorhandene Installation aktualisieren',
-       'config-page-dbsettings' => 'Einstellungen zur Datenbank',
-       'config-page-name' => 'Name',
-       'config-page-options' => 'Optionen',
-       'config-page-install' => 'Installieren',
-       'config-page-complete' => 'Fertig!',
-       'config-page-restart' => 'Installationsvorgang erneut starten',
-       'config-page-readme' => 'Lies mich',
-       'config-page-releasenotes' => 'Versionsinfos (en)',
-       'config-page-copying' => 'Kopie der Lizenz',
-       'config-page-upgradedoc' => 'Aktualisiere',
-       'config-page-existingwiki' => 'Vorhandenes Wiki',
-       'config-help-restart' => 'Sollen alle bereits eingegebenen Daten gelöscht und der Installationsvorgang erneut gestartet werden?',
-       'config-restart' => 'Ja, erneut starten',
-       'config-welcome' => '=== Prüfung der Installationsumgebung ===
-Die Basisprüfungen werden jetzt durchgeführt, um festzustellen, ob die Installationsumgebung für die Installation von MediaWiki geeignet ist.
-Nimm diese Information auf, falls du Unterstützung bei der Vervollständigung der Installation benötigst.',
-       'config-copyright' => "=== Lizenz und Nutzungsbedingungen ===
-
-$1
-
-Dieses Programm ist freie Software, d. h. es kann, gemäß den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.
-
-Dieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings '''ohne jegliche Garantie''' und sogar ohne die implizierte Garantie einer '''Marktgängigkeit''' oder '''Eignung für einen bestimmten Zweck'''. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.
-
-Eine <doclink href=Copying>Kopie der GNU General Public License</doclink> sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [http://www.gnu.org/copyleft/gpl.html online gelesen] werden.",
-       'config-sidebar' => '* [//www.mediawiki.org/wiki/MediaWiki/de Website von MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents/de Benutzeranleitung]
-* [//www.mediawiki.org/wiki/Manual:Contents/de Administratorenanleitung]
-* [//www.mediawiki.org/wiki/Manual:FAQ/de Häufig gestellte Fragen]
-----
-* <doclink href=Readme>Lies mich</doclink>
-* <doclink href=ReleaseNotes>Versionsinformationen</doclink>
-* <doclink href=Copying>Lizenzbestimmungen</doclink>
-* <doclink href=UpgradeDoc>Aktualisierung</doclink>',
-       'config-env-good' => 'Die Installationsumgebung wurde geprüft.
-MediaWiki kann installiert werden.',
-       'config-env-bad' => 'Die Installationsumgebung wurde geprüft.
-MediaWiki kann nicht installiert werden.',
-       'config-env-php' => 'PHP $1 ist installiert.',
-       'config-env-php-toolow' => 'PHP $1 ist installiert.
-Allerdings benötigt MediaWiki PHP $2 oder höher.',
-       'config-unicode-using-utf8' => 'Zur Unicode-Normalisierung wird Brion Vibbers <code>utf8_normalize.so</code> eingesetzt.',
-       'config-unicode-using-intl' => 'Zur  Unicode-Normalisierung wird die [http://pecl.php.net/intl PECL-Erweiterung intl] eingesetzt.',
-       'config-unicode-pure-php-warning' => "'''Warnung:''' Die [http://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird.
-Sofern eine Website mit großer Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.",
-       'config-unicode-update-warning' => "'''Warnung:''' Die installierte Version des Unicode-Normalisierungswrappers nutzt einer ältere Version der Bibliothek des [http://site.icu-project.org/ ICU-Projekts].
-Diese sollte [//www.mediawiki.org/wiki/Unicode_normalization_considerations aktualisiert] werden, sofern auf die Verwendung von Unicode Wert gelegt wird.",
-       'config-no-db' => 'Es konnte kein adäquater Datenbanktreiber gefunden werden. Es muss daher ein Datenbanktreiber für PHP installiert werden.
-Die folgenden Datenbanksysteme werden unterstützt: $1
-
-Sofern ein gemeinschaftlich genutzter Server für das Hosting verwendet wird, muss der Hoster gefragt werden einen adäquaten Datenbanktreiber zu installieren.
-Sofern PHP selbst kompiliert wurde, muss es mit es neu konfiguriert werden, wobei der Datenbankclient zu aktivierten ist. Hierzu kann beispielsweise <code>./configure --with-mysql</code> ausgeführt werden.
-Sofern PHP über die Paketverwaltung einer Debian- oder Ubuntu-Installation installiert wurde, muss das „php5-mysql“-Paket nachinstalliert werden.',
-       'config-outdated-sqlite' => "'''Warnung:''' SQLite $1 ist installiert. Allerdings benötigt MediaWiki SQLite $2 oder höher. SQLite wird daher nicht verfügbar sein.",
-       'config-no-fts3' => "'''Warnung:''' SQLite wurde ohne das [//sqlite.org/fts3.html FTS3-Modul] kompiliert, so dass keine Suchfunktionen für dieses Datenbanksystem zur Verfügung stehen werden.",
-       'config-register-globals' => "'''Warnung: Der Parameter <code>[http://php.net/register_globals register_globals]</code> von PHP ist aktiviert.'''
-'''Sie sollte deaktiviert werden, sofern dies möglich ist.'''
-Die MediaWiki-Installation wird zwar laufen, wobei aber der Server für potentielle Sicherheitsprobleme anfällig ist.",
-       'config-magic-quotes-runtime' => "'''Fataler Fehler: Der Parameter <code>[http://www.php.net/manual/de/function.set-magic-quotes-runtime.php set_magic_quotes_runtime]</code> von PHP ist aktiviert!'''
-Diese Einstellung führt zu unvorhersehbaren Problemen bei der Dateneingabe.
-MediaWiki kann nicht installiert werden, solange dieser Parameter nicht deaktiviert wurde.",
-       'config-magic-quotes-sybase' => "'''Fataler Fehler: Der Parameter <code>[http://www.php.net/manual/de/sybase.configuration.php#ini.magic-quotes-sybase magic_quotes_sybase]</code> von PHP ist aktiviert!'''
-Diese Einstellung führt zu unvorhersehbaren Problemen bei der Dateneingabe.
-MediaWiki kann nicht installiert werden, solange dieser Parameter nicht deaktiviert wurde.",
-       'config-mbstring' => "'''Fataler Fehler: Der Parameter <code>[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]</code> von PHP ist aktiviert!'''
-Diese Einstellung verursacht Fehler und führt zu unvorhersehbaren Problemen bei der Dateneingabe.
-MediaWiki kann nicht installiert werden, solange dieser Parameter nicht deaktiviert wurde.",
-       'config-ze1' => "'''Fataler Fehler: Der Parameter <code>[http://www.php.net/manual/de/ini.core.php zend.ze1_compatibility_mode]</code> von PHP ist aktiviert!'''
-Diese Einstellung führt zu großen Fehlern bei MediaWiki.
-MediaWiki kann nicht installiert werden, solange dieser Parameter nicht deaktiviert wurde.",
-       'config-safe-mode' => "'''Warnung:''' Der Funktion <code>[http://www.php.net/features.safe-mode Safe Mode]</code> von PHP ist aktiviert.
-Dies kann zu Problemen führen, insbesondere wenn das Hochladen von Dateien möglich sein, bzw. der Auszeichner <code>math</code> genutzt werden soll.",
-       'config-xml-bad' => 'Das XML-Modul von PHP fehlt.
-MediaWiki benötigt Funktionen, die dieses Modul bereitstellt und wird in der bestehenden Konfiguration nicht funktionieren.
-Sofern Mandriva genutzt wird, muss noch das „php-xml“-Paket installiert werden.',
-       'config-pcre' => 'Das PHP-Modul für die PCRE-Unterstützung wurde nicht gefunden.
-MediaWiki benötigt allerdings perl-kompatible reguläre Ausdrücke, um lauffähig zu sein.',
-       'config-pcre-no-utf8' => "'''Fataler Fehler:''' Das PHP-Modul PCRE scheint ohne PCRE_UTF8-Unterstützung kompiliert worden zu sein.
-MediaWiki benötigt die UTF-8-Unterstützung, um fehlerfrei lauffähig zu sein.",
-       'config-memory-raised' => 'Der PHP-Parameter <code>memory_limit</code> betrug $1 und wurde auf $2 erhöht.',
-       'config-memory-bad' => "'''Warnung:''' Der PHP-Parameter <code>memory_limit</code> beträgt $1.
-Dieser Wert ist wahrscheinlich zu niedrig.
-Der Installationsvorgang könnte daher scheitern!",
-       'config-ctype' => "'''Fataler Fehler:''' PHP muss mit Unterstützung für das [http://www.php.net/manual/de/ctype.installation.php Modul ctype] kompiliert werden.",
-       'config-json' => "'''Fatal:''' PHP wurde ohne JSON-Support kompiliert.
-Du musst entweder die PHP-JSON- oder die [http://pecl.php.net/package/jsonc PECL-jsonc]-Erweiterung installieren, bevor du MediaWiki installierst.
-* Die PHP-Erweiterung ist in Red Hat Enterprise Linux (CentOS) 5 und 6 enthalten, muss jedoch in <code>/etc/php.ini</code> oder <code>/etc/php.d/json.ini</code> aktiviert werden.
-* Einige Linux-Distributionen, die nach Mai 2013 veröffentlicht wurden, lassen die PHP-Erweiterung weg, stattdessen wird die PECL-Erweiterung als <code>php5-json</code> oder <code>php-pecl-jsonc</code> mitgeliefert.",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] ist installiert',
-       'config-apc' => '[http://www.php.net/apc APC] ist installiert',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] ist installiert',
-       'config-no-cache' => "'''Warnung:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] oder [http://www.iis.net/download/WinCacheForPhp WinCache] wurden nicht gefunden.
-Das Objektcaching kann daher nicht aktiviert werden.",
-       'config-mod-security' => "'''Warnung:''' Auf dem Webserver wurde [http://modsecurity.org/ ModSecurity] aktiviert. Sofern falsch konfiguriert, kann dies zu Problemen mit MediaWiki sowie anderer Software auf dem Server führen und es Benutzern ermöglichen beliebige Inhalte im Wiki einzustellen.
-Für weitere Informationen empfehlen wir die [http://modsecurity.org/documentation/ Dokumentation zu ModSecurity] oder den Kontakt zum Hoster, sofern Fehler auftreten.",
-       'config-diff3-bad' => 'GNU diff3 wurde nicht gefunden.',
-       'config-git' => 'Die Git-Versionsverwaltungssoftware wurde gefunden: <code>$1</code>.',
-       'config-git-bad' => 'Die Git-Versionsverwaltungssoftware wurde nicht gefunden.',
-       'config-imagemagick' => 'ImageMagick wurde gefunden: <code>$1</code>.
-Miniaturansichten von Bildern werden möglich sein, sobald das Hochladen von Dateien aktiviert wurde.',
-       'config-gd' => 'Die im System integrierte GD-Grafikbibliothek wurde gefunden.
-Miniaturansichten von Bildern werden möglich sein, sobald das Hochladen von Dateien aktiviert wurde.',
-       'config-no-scaling' => 'Weder die GD-Grafikbibliothek noch ImageMagick wurden gefunden.
-Miniaturansichten von Bildern sind daher nicht möglich.',
-       'config-no-uri' => "'''Fehler:''' Die aktuelle URL konnte nicht ermittelt werden.
-Der Installationsvorgang wurde daher abgebrochen.",
-       'config-no-cli-uri' => "'''Warnung''': Es wurde kein Pfad zum Skipt (--scriptpath) angegeben. Daher wird der Standardpfad genutzt: <code>$1</code>.",
-       'config-using-server' => 'Der Servername „<nowiki>$1</nowiki>“ wird verwendet.',
-       'config-using-uri' => 'Die Server-URL „<nowiki>$1$2</nowiki>“ wird verwendet.',
-       'config-uploads-not-safe' => "'''Warnung:''' Das Standardverzeichnis für hochgeladene Dateien <code>$1</code> ist für die willkürliche Ausführung von Skripten anfällig.
-Obwohl MediaWiki die hochgeladenen Dateien auf Sicherheitsrisiken überprüft, wird dennoch dringend empfohlen diese [//www.mediawiki.org/wiki/Manual:Security#Upload_security Sicherheitslücke] zu schließen, bevor das Hochladen von Dateien aktiviert wird.",
-       'config-no-cli-uploads-check' => "'''Warnung''': Das Standardverzeichnis für hochgeladene Dateien (<code>$1</code>) wird, während der Installation über die Kommandozeile, nicht auf Sicherheitsanfälligkeiten hinsichtlich willkürlicher Skriptausführungen geprüft.",
-       'config-brokenlibxml' => 'Das System nutzt eine Kombination aus PHP- und libxml2-Versionen, die fehleranfällig ist und versteckte Datenfehler bei MediaWiki und anderen Webanwendungen verursachen kann.
-PHP muss auf Version 5.2.9 oder später sowie libxml2 auf die Version 2.7.3 oder später aktualisiert werden, um das Problem zu lösen. Installationsabbruch ([//bugs.php.net/bug.php?id=45996 siehe hierzu die Fehlermeldung bei PHP]).',
-       'config-using531' => 'MediaWiki kann nicht zusammen mit PHP $1 verwendet werden. Grund hierfür ist ein Fehler im Zusammenhang mit den Verweisparametern zu <code>__call()</code>.
-PHP muss auf Version 5.3.2 oder höher oder 5.3.0 oder niedriger aktualisiert werden, um das Problem zu beheben.
-Die Installation wurde abgebrochen.',
-       'config-suhosin-max-value-length' => 'Suhosin ist installiert und beschränkt die Länge des GET-Parameters auf $1 Bytes.
-Der ResouceLoader von MediaWiki wird zwar unter diesen Bedingungen funktionieren, allerdings nur mit verminderter Leistungsfähigkeit.
-Sofern möglich sollte der Parameter <code>suhosin.get.max_value_length</code> in der Datei <code>php.ini</code> auf 1024 oder höher festgelegt werden.
-Gleichzeitig muss der Parameter <code>$wgResourceLoaderMaxQueryLength</code> in der Datei <code>LocalSettings.php</code> auf den selben Wert eingestellt werden.',
-       'config-db-type' => 'Datenbanksystem:',
-       'config-db-host' => 'Datenbankserver:',
-       'config-db-host-help' => 'Sofern sich die Datenbank auf einem anderen Server befindet, ist hier der Servername oder die entsprechende IP-Adresse anzugeben.
-
-Sofern ein gemeinschaftlich genutzter Server verwendet wird, sollte der Hoster den zutreffenden Servernamen in seiner Dokumentation angegeben haben.
-
-Sofern auf einem Windows-Server installiert und MySQL genutzt wird, funktioniert der Servername „localhost“ voraussichtlich nicht. Wenn nicht, sollte  „127.0.0.1“ oder die lokale IP-Adresse angegeben werden.
-
-Sofern PostgresQL genutzt wird, muss dieses Feld leer gelassen werden, um über ein Unix-Socket zu verbinden.',
-       'config-db-host-oracle' => 'Datenbank-TNS:',
-       'config-db-host-oracle-help' => 'Einen gültigen [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm „Local Connect“-Namen] angeben. Die „tnsnames.ora“-Datei muss von dieser Installation erkannt werden können.<br />Sofern die Client-Bibliotheken für Version 10g oder neuer verwendet werden, kann auch [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm „Easy Connect“] zur Namensgebung genutzt werden.',
-       'config-db-wiki-settings' => 'Bitte Daten zur eindeutigen Identifikation dieses Wikis angeben',
-       'config-db-name' => 'Datenbankname:',
-       'config-db-name-help' => 'Bitte einen Namen angeben, mit dem das Wiki identifiziert werden kann.
-Dabei sollten keine Leerzeichen verwendet werden.
-
-Sofern ein gemeinschaftlich genutzter Server verwendet wird, sollte der Hoster den Datenbanknamen angegeben oder aber die Erstellung einer Datenbank über ein entsprechendes Interface gestattet haben.',
-       'config-db-name-oracle' => 'Datenbankschema:',
-       'config-db-account-oracle-warn' => 'Es gibt drei von MediaWiki unterstützte Möglichkeiten Oracle als Datenbank einzurichten:
-
-Sofern das Datenbankbenutzerkonto während des Installationsvorgangs erstellt werden soll, muss ein Datenbankbenutzerkonto mit der SYSDBA-Berechtigung zusammen mit den entsprechenden Anmeldeinformationen angegeben werden, mit dem dann über das Web auf die Datenbank zugegriffen werden kann. Alternativ kann man auch lediglich ein einzelnes manuell angelegtes Datenbankbenutzerkonto angeben, mit dem über das Web auf die Datenbank zugegriffen werden kann, sofern dieses über die Berechtigung zur Erstellung von Datenbankschemen verfügt. Zudem ist es möglich zwei Datenbankbenutzerkonten anzugeben von denen eines die Berechtigung zur Erstellung von Datenbankschemen hat und das andere, um mit ihm über das Web auf die Datenbank zuzugreifen.
-
-Ein Skript zum Anlegen eines Datenbankbenutzerkontos mit den notwendigen Berechtigungen findet man unter dem Pfad „…/maintenance/oracle/“ dieser MediaWiki-Installation. Es ist dabei zu bedenken, dass die Verwendung eines Datenbankbenutzerkontos mit beschränkten Berechtigungen die Nutzung der Wartungsfunktionen für das Standarddatenbankbenutzerkonto deaktiviert.',
-       'config-db-install-account' => 'Benutzerkonto für die Installation',
-       'config-db-username' => 'Name des Datenbankbenutzers:',
-       'config-db-password' => 'Passwort des Datenbankbenutzers:',
-       'config-db-password-empty' => 'Bitte ein Passwort für den neuen Datenbankbenutzer angeben: $1
-Obzwar es möglich ist Datenbankbenutzer ohne Passwort anzulegen, so ist dies aber nicht sicher.',
-       'config-db-install-username' => 'Den Benutzernamen angeben, der für die Verbindung mit der Datenbank während des Installationsvorgangs genutzt werden soll. Es handelt sich dabei nicht um den Benutzernamen für das MediaWiki-Konto, sondern um den Benutzernamen der vorgesehenen Datenbank.',
-       'config-db-install-password' => 'Das Passwort angeben, das für die Verbindung mit der Datenbank während des Installationsvorgangs genutzt werden soll. Es handelt sich dabei nicht um das Passwort für das MediaWiki-Konto, sondern um das Passwort der vorgesehenen Datenbank.',
-       'config-db-install-help' => 'Benutzername und Passwort, die während des Installationsvorgangs, für die Verbindung mit der Datenbank, genutzt werden sollen, sind nun anzugeben.',
-       'config-db-account-lock' => 'Derselbe Benutzername und das Passwort müssen während des Normalbetriebs des Wikis verwendet werden.',
-       'config-db-wiki-account' => 'Benutzerkonto für den normalen Betrieb',
-       'config-db-wiki-help' => 'Bitte Benutzernamen und Passwort angeben, die der Webserver während des Normalbetriebes dazu verwenden soll, eine Verbindung zum Datenbankserver herzustellen.
-Sofern ein entsprechendes Benutzerkonto nicht vorhanden ist und das Benutzerkonto für den Installationsvorgang über ausreichende Berechtigungen verfügt, wird dieses Benutzerkonto automatisch mit den Mindestberechtigungen zum Normalbetrieb des Wikis angelegt.',
-       'config-db-prefix' => 'Datenbanktabellenpräfix:',
-       'config-db-prefix-help' => 'Sofern eine Datenbank für mehrere Wikiinstallationen oder eine Wikiinstallation und eine andere Programminstallation genutzt werden soll, muss ein Datenbanktabellenpräfix angegeben werden, um Datenbankprobleme zu vermeiden.
-Es können keine Leerzeichen verwendet werden.
-
-Gewöhnlich bleibt dieses Datenfeld leer.',
-       'config-db-charset' => 'Datenbankzeichensatz',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binär',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 abwärtskompatibles UTF-8',
-       'config-charset-help' => "'''Warnung:''' Sofern '''abwärtskompatibles UTF-8''' bei MySQL 4.1+ verwendet und anschließend die Datenbank mit <code>mysqldump</code> gesichert wird, könnten alle nicht mit ASCII-codierten Zeichen beschädigt werden, was zu irreversiblen Schäden der Datensicherung führt!
-
-Im '''binären Modus''' speichert MediaWiki UTF-8 Texte in der Datenbank in binär kodierte Datenfelder.
-Dies ist effizienter als der UTF-8-Modus von MySQL und ermöglicht so die Verwendung jeglicher Unicode-Zeichen.
-Im '''UTF-8-Modus''' wird MySQL den Zeichensatz der Daten erkennen und sie richtig anzeigen und konvertieren.
-Es können allerdings keine Zeichen außerhalb des [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke ''Basic Multilingual Plane'' (BMP)] gespeichert werden.",
-       'config-mysql-old' => 'MySQL $1 oder höher wird benötigt. MySQL $2 ist momentan vorhanden.',
-       'config-db-port' => 'Datenbankport:',
-       'config-db-schema' => 'Datenschema für MediaWiki',
-       'config-db-schema-help' => 'Dieses Datenschema ist in der Regel allgemein verwendbar.
-Nur Änderungen daran vornehmen, sofern es gute Gründe dafür gibt.',
-       'config-pg-test-error' => "Es kann keine Verbindung zur Datenbank '''$1''' hergestellt werden: $2",
-       'config-sqlite-dir' => 'SQLite-Datenverzeichnis:',
-       'config-sqlite-dir-help' => "SQLite speichert alle Daten in einer einzigen Datei.
-
-Das für sie vorgesehene Verzeichnis muss während des Installationsvorgangs beschreibbar sein.
-
-Es sollte '''nicht''' über das Web zugänglich sein, was der Grund ist, warum die Datei nicht dort abgelegt wird, wo sich die PHP-Dateien befinden.
-
-Das Installationsprogramm wird mit der Datei zusammen eine zusätzliche <code>.htaccess</code>-Datei erstellen. Sofern dies scheitert, können Dritte auf die Datendatei zugreifen.
-Dies umfasst die Nutzerdaten (E-Mail-Adressen, Passwörter, etc.) wie auch gelöschte Seitenversionen und andere vertrauliche Daten, die im Wiki gespeichert sind.
-
-Es ist daher zu erwägen, die Datendatei an gänzlich anderer Stelle abzulegen, beispielsweise im Verzeichnis <code>./var/lib/mediawiki/yourwiki</code>.",
-       'config-oracle-def-ts' => 'Standardtabellenraum:',
-       'config-oracle-temp-ts' => 'Temporärer Tabellenraum:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => 'MediaWiki unterstützt die folgenden Datenbanksysteme:
-
-$1
-
-Sofern nicht das Datenbanksystem angezeigt wird, das verwendet werden soll, gibt es oben einen Link zur Anleitung mit Informationen, wie dieses aktiviert werden kann.',
-       'config-support-mysql' => '* $1 ist das von MediaWiki primär unterstützte Datenbanksystem ([http://www.php.net/manual/en/mysql.installation.php Anleitung zur Kompilierung von PHP mit MySQL-Unterstützung (en)])',
-       'config-support-postgres' => '* $1 ist ein beliebtes Open-Source-Datenbanksystem und eine Alternative zu MySQL ([http://www.php.net/manual/de/pgsql.installation.php Anleitung zur Kompilierung von PHP mit PostgreSQL-Unterstützung]). Es gibt allerdings einige kleinere Implementierungsfehler, so dass von der Nutzung in einer Produktivumgebung abgeraten wird.',
-       'config-support-sqlite' => '* $1 ist ein verschlanktes Datenbanksystem, das auch gut unterstützt wird ([http://www.php.net/manual/de/pdo.installation.php Anleitung zur Kompilierung von PHP mit SQLite-Unterstützung], verwendet PHP Data Objects (PDO))',
-       'config-support-oracle' => '* $1 ist eine kommerzielle Unternehmensdatenbank ([http://www.php.net/manual/en/oci8.installation.php Anleitung zur Kompilierung von PHP mit OCI8-Unterstützung (en)])',
-       'config-header-mysql' => 'MySQL-Einstellungen',
-       'config-header-postgres' => 'PostgreSQL-Einstellungen',
-       'config-header-sqlite' => 'SQLite-Einstellungen',
-       'config-header-oracle' => 'Oracle-Einstellungen',
-       'config-invalid-db-type' => 'Unzulässiges Datenbanksystem',
-       'config-missing-db-name' => 'Bei „Datenbankname“ muss ein Wert angegeben werden.',
-       'config-missing-db-host' => 'Bei „Datenbankhost“ muss ein Wert angegeben werden.',
-       'config-missing-db-server-oracle' => 'Für das „Datenbank-TNS“ muss ein Wert eingegeben werden',
-       'config-invalid-db-server-oracle' => 'Ungültiges Datenbank-TNS „$1“.
-Entweder „TNS Name“ oder eine „Easy Connect“-Zeichenfolge verwenden ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle-Benennungsmethoden])',
-       'config-invalid-db-name' => 'Ungültiger Datenbankname „$1“.
-Es dürfen nur ASCII-codierte Buchstaben (a-z, A-Z), Zahlen (0-9), Unter- (_) sowie Bindestriche (-) verwendet werden.',
-       'config-invalid-db-prefix' => 'Ungültiger Datenbanktabellenpräfix „$1“.
-Es dürfen nur ASCII-codierte Buchstaben (a-z, A-Z), Zahlen (0-9), Unter- (_) sowie Bindestriche (-) verwendet werden.',
-       'config-connection-error' => '$1.
-
-Bitte unten angegebenen Servernamen, Benutzernamen sowie das Passwort überprüfen und es danach erneut versuchen.',
-       'config-invalid-schema' => 'Ungültiges Datenschema für MediaWiki „$1“.
-Es dürfen nur ASCII-codierte Buchstaben (a-z, A-Z), Zahlen (0-9) und Unterstriche (_) verwendet werden.',
-       'config-db-sys-create-oracle' => 'Das Installationsprogramm unterstützt nur die Verwendung eines Datenbankbenutzerkontos mit SYSDBA-Berechtigung zum Anlegen eines neuen Datenbankbenutzerkontos.',
-       'config-db-sys-user-exists-oracle' => 'Das Datenbankbenutzerkonto „$1“ ist bereits vorhanden. Ein Datenbankbenutzerkontos mit SYSDBA-Berechtigung kann nur zum Anlegen eines neuen Datenbankbenutzerkontos genutzt werden.',
-       'config-postgres-old' => 'PostgreSQL $1 oder höher wird benötigt. PostgreSQL $2 ist momentan vorhanden.',
-       'config-sqlite-name-help' => 'Bitten einen Namen angeben, mit dem das Wiki identifiziert werden kann.
-Dabei bitte keine Leerzeichen oder Bindestriche verwenden.
-Dieser Name wird für die SQLite-Datendateinamen genutzt.',
-       'config-sqlite-parent-unwritable-group' => 'Das Datenverzeichnis <code><nowiki>$1</nowiki></code> kann nicht erzeugt werden, da das übergeordnete Verzeichnis <code><nowiki>$2</nowiki></code> nicht für den Webserver beschreibbar ist.
-
-Das Installationsprogramm konnte den Benutzer bestimmen, mit dem Webserver ausgeführt wird.
-Schreibzugriff auf das <code><nowiki>$3</nowiki></code>-Verzeichnis muss für diesen ermöglicht werden, um den Installationsvorgang fortsetzen zu können.
-
-Auf einem Unix- oder Linux-System:
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Das Datenverzeichnis <code><nowiki>$1</nowiki></code> kann nicht erzeugt werden, da das übergeordnete Verzeichnis <code><nowiki>$2</nowiki></code> nicht für den Webserver beschreibbar ist.
-
-Das Installationsprogramm konnte den Benutzer bestimmen, mit dem Webserver ausgeführt wird.
-Schreibzugriff auf das <code><nowiki>$3</nowiki></code>-Verzeichnis muss global für diesen und andere Benutzer ermöglicht werden, um den Installationsvorgang fortsetzen zu können.
-
-Auf einem Unix- oder Linux-System:
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Fehler beim Erstellen des Datenverzeichnisses „$1“.
-
-Bitte den Speicherort überprüfen und es danach erneut versuchen.',
-       'config-sqlite-dir-unwritable' => 'Das Verzeichnis „$1“  ist nicht beschreibbar.
-Bitte die Zugriffsberechtigungen so ändern, dass dieses Verzeichnis für den Webserver beschreibbar ist und es danach erneut versuchen.',
-       'config-sqlite-connection-error' => '$1.
-
-Bitte unten angegebenes Datenverzeichnis sowie den Datenbanknamen überprüfen und es danach erneut versuchen.',
-       'config-sqlite-readonly' => 'Die Datei <code>$1</code> ist nicht beschreibbar.',
-       'config-sqlite-cant-create-db' => 'Die Datenbankdatei <code>$1</code> konnte nicht erzeugt werden.',
-       'config-sqlite-fts3-downgrade' => 'PHP verfügt nicht über FTS3-Unterstützung. Die Tabellen wurden zurückgestuft.',
-       'config-can-upgrade' => "Es wurden MediaWiki-Tabellen in dieser Datenbank gefunden.
-Um sie auf MediaWiki $1 zu aktualisieren, bitte auf '''Weiter''' klicken.",
-       'config-upgrade-done' => "Die Aktualisierung ist nun abgeschlossen.
-
-Das Wiki kann nun [$1 genutzt werden].
-
-Sofern die Datei <code>LocalSettings.php</code> neu erzeugt werden soll, bitte auf die Schaltfläche unten klicken.
-Dies wird '''nicht empfohlen''', es sei denn, es treten Probleme mit dem Wiki auf.",
-       'config-upgrade-done-no-regenerate' => 'Die Aktualisierung ist abgeschlossen.
-
-Das Wiki kann nun [$1 genutzt werden].',
-       'config-regenerate' => 'LocalSettings.php neu erstellen →',
-       'config-show-table-status' => 'Die Abfrage <code>SHOW TABLE STATUS</code> ist gescheitert!',
-       'config-unknown-collation' => "'''Warnung:''' Die Datenbank nutzt eine unbekannte Kollation.",
-       'config-db-web-account' => 'Datenbankkonto für den Webzugriff',
-       'config-db-web-help' => 'Bitte Benutzernamen und Passwort auswählen, die der Webserver während des Normalbetriebes dazu verwenden soll, eine Verbindung zum Datenbankserver herzustellen.',
-       'config-db-web-account-same' => 'Dasselbe Datenbankkonto wie während des Installationsvorgangs verwenden',
-       'config-db-web-create' => 'Sofern nicht bereits vorhanden, muss nun das Konto erstellt werden',
-       'config-db-web-no-create-privs' => 'Das angegebene und für den Installationsvorgang vorgesehene Datenbankkonto verfügt nicht über ausreichend Berechtigungen, um ein weiteres Datenbankkonto zu erstellen.
-Das hier angegebene Datenbankkonto muss daher bereits vorhanden sein.',
-       'config-mysql-engine' => 'Speicher-Engine:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Warnung:''' Es wurde MyISAM als Speicher-Engine für MySQL ausgewählt, die aus folgenden Gründen nicht für den Einsatz mit MediaWiki empfohlen ist:
-* Sie unterstützt aufgrund von Tabellensperrungen kaum die nebenläufige Ausführung von Aktionen.
-* Sie ist anfälliger für Datenprobleme.
-* Sie wird von MediaWiki nicht immer adäquat unterstützt.
-
-Sofern die vorhandene MySQL-Installation die Speicher-Engine InnoDB unterstützt, wird deren Verwendung eindringlich empfohlen.
-Sofern sie sie nicht unterstützt, sollte eine entsprechende Aktualisierung nunmehr Erwägung gezogen werden.",
-       'config-mysql-only-myisam-dep' => "'''Warnung:''' MyISAM ist die einzige verfügbare Speicher-Engine für MySQL, die nicht für die Verwendung mit MediaWiki empfohlen wird, da sie
-* aufgrund von Tabellensperrungen kaum die nebenläufige Ausführung von Aktionen unterstützt,
-* anfälliger für Datenprobleme ist und
-* von MediaWiki nicht immer adäquat unterstützt wird.
-
-Deine MySQL-Installation unterstützt nicht InnoDB. Eventuell muss eine Aktualisierung durchgeführt werden.",
-       'config-mysql-engine-help' => "'''InnoDB''' ist fast immer die bessere Wahl, da es gleichzeitige Zugriffe gut unterstützt.
-
-'''MyISAM''' ist in Einzelnutzerumgebungen sowie bei schreibgeschützten Wikis schneller.
-Bei MyISAM-Datenbanken treten tendenziell häufiger Fehler auf als bei InnoDB-Datenbanken.",
-       'config-mysql-charset' => 'Datenbankzeichensatz:',
-       'config-mysql-binary' => 'binär',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "Im '''binären Modus''' speichert MediaWiki UTF-8 Texte in der Datenbank in binär kodierte Datenfelder.
-Dies ist effizienter als der UTF-8-Modus von MySQL und ermöglicht so die Verwendung jeglicher Unicode-Zeichen.
-
-Im '''UTF-8-Modus''' wird MySQL den Zeichensatz der Daten erkennen und sie richtig anzeigen und konvertieren,
-allerdings können keine Zeichen außerhalb des [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke ''Basic Multilingual Plane'' (BMP)] gespeichert werden.",
-       'config-site-name' => 'Name des Wikis:',
-       'config-site-name-help' => 'Er wird in der Titelleiste des Browsers, wie auch verschiedenen anderen Stellen, genutzt.',
-       'config-site-name-blank' => 'Den Namen des Wikis angeben.',
-       'config-project-namespace' => 'Name des Projektnamensraums:',
-       'config-ns-generic' => 'Projekt',
-       'config-ns-site-name' => 'Entspricht dem Namen des Wikis: $1',
-       'config-ns-other' => 'Anderer Name (bitte angeben)',
-       'config-ns-other-default' => 'MeinWiki',
-       'config-project-namespace-help' => "Dem Beispiel von Wikipedia folgend, unterscheiden viele Wikis zwischen den Seiten für Inhalte und denen für Richtlinien. Letztere werden im „'''Projektnamensraum'''“ hinterlegt.
-Alle Seiten dieses Namensraumes verfügen über einen Seitenpräfix, der nun an dieser Stelle angegeben werden kann.
-Traditionell steht dieser Seitenpräfix mit dem Namen des Wikis in einem engen Zusammenhang. Dabei können bestimmte Sonderzeichen wie „#“ oder „:“ nicht verwendet werden.",
-       'config-ns-invalid' => 'Der angegebene Namensraum „<nowiki>$1</nowiki>“ ist ungültig.
-Bitte einen abweichenden Projektnamensraum angeben.',
-       'config-ns-conflict' => 'Der angegebene Namensraum „<nowiki>$1</nowiki>“ verursacht Problem mit dem Standardnamensraum von MediaWiki.
-Bitte einen abweichenden Projektnamensraum angeben.',
-       'config-admin-box' => 'Administratorkonto',
-       'config-admin-name' => 'Name:',
-       'config-admin-password' => 'Passwort:',
-       'config-admin-password-confirm' => 'Passwort wiederholen:',
-       'config-admin-help' => 'Bitte den bevorzugten Benutzernamen angeben, beispielsweise „Knut Wuchtig“.
-Dies ist der Name, der benötigt wird, um sich im Wiki anzumelden.',
-       'config-admin-name-blank' => 'Bitte den Benutzernamen für den Administratoren angeben.',
-       'config-admin-name-invalid' => 'Der angegebene Benutzername „<nowiki>$1</nowiki>“ ist ungültig.
-Bitte einen abweichenden Benutzernamen angeben.',
-       'config-admin-password-blank' => 'Bitte das Passwort für das Administratorkonto angeben.',
-       'config-admin-password-same' => 'Das Passwort darf nicht mit dem Benutzernamen übereinstimmen.',
-       'config-admin-password-mismatch' => 'Die beiden Passwörter stimmen nicht überein.',
-       'config-admin-email' => 'E-Mail-Adresse:',
-       'config-admin-email-help' => 'Bitte hier eine E-Mail-Adresse angeben, die den E-Mail-Empfang von anderen Benutzern des Wikis, das Zurücksetzen des Passwortes sowie Benachrichtigungen zu Änderungen an beobachteten Seiten ermöglicht. Diese Feld kann leer gelassen werden.',
-       'config-admin-error-user' => 'Es ist beim Erstellen des Administrators mit dem Namen „<nowiki>$1</nowiki>“ ein interner Fehler aufgetreten.',
-       'config-admin-error-password' => 'Es ist beim Setzen des Passworts für den Administrator „<nowiki>$1</nowiki>“ ein interner Fehler aufgetreten: <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Es wurde eine ungültige E-Mail-Adresse angegeben',
-       'config-subscribe' => 'Bitte die Mailingliste [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mitteilungen zu Versionsveröffentlichungen] abonnieren.',
-       'config-subscribe-help' => 'Es handelt sich hierbei um eine Mailingliste mit wenigen Aussendungen, die für Mitteilungen zu Versionsveröffentlichungen, einschließlich wichtiger Sicherheitsveröffentlichungen, genutzt wird.
-Diese Mailingliste sollte abonniert werden. Zudem sollte die MediaWiki-Installation stets aktualisiert werden, sobald eine neue Programmversion veröffentlicht wurde.',
-       'config-subscribe-noemail' => 'Beim Abonnieren der Mailingliste mit Mitteilungen zu Versionsveröffentlichungen wurde keine E-Mail-Adresse angegeben.
-Bitte eine E-Mail-Adresse angeben, sofern die Mailingliste abonniert werden soll.',
-       'config-almost-done' => 'Der Vorgang ist fast abgeschlossen!
-Die verbleibenden Konfigurationseinstellungen können übersprungen und das Wiki umgehend installiert werden.',
-       'config-optional-continue' => 'Ja, es sollen weitere Konfigurationseinstellungen vorgenommen werden.',
-       'config-optional-skip' => 'Nein, das Wiki soll nun installiert werden.',
-       'config-profile' => 'Profil der Benutzerberechtigungen:',
-       'config-profile-wiki' => 'offenes Wiki',
-       'config-profile-no-anon' => 'Erstellung eines Benutzerkontos erforderlich',
-       'config-profile-fishbowl' => 'ausschließlich berechtigte Bearbeiter',
-       'config-profile-private' => 'geschlossenes Wiki',
-       'config-profile-help' => "Wikis sind am nützlichsten, wenn so viele Menschen als möglich Bearbeitungen vornehmen können.
-Mit MediaWiki ist es einfach die letzten Änderungen nachzuvollziehen und unbrauchbare Bearbeitungen, beispielsweise von unbedarften oder böswilligen Benutzern, rückgängig zu machen.
-
-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.
-
-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].",
-       'config-license' => 'Lizenz:',
-       'config-license-none' => 'Keine Lizenzangabe in der Fußzeile',
-       'config-license-cc-by-sa' => 'Creative Commons „Namensnennung, Weitergabe unter gleichen Bedingungen“',
-       'config-license-cc-by' => 'Creative Commons „Namensnennung“',
-       'config-license-cc-by-nc-sa' => 'Creative Commons „Namensnennung, nicht kommerziell, Weitergabe unter gleichen Bedingungen“',
-       'config-license-cc-0' => 'Creative Commons „Zero“ (Gemeinfreiheit)',
-       'config-license-gfdl' => 'GNU-Lizenz für freie Dokumentation 1.3 oder höher',
-       'config-license-pd' => 'Gemeinfreiheit',
-       'config-license-cc-choose' => 'Eine benutzerdefinierte Creative-Commons-Lizenz auswählen',
-       'config-license-help' => 'Viele öffentliche Wikis publizieren alle Beiträge unter einer [http://freedomdefined.org/Definition/De freien Lizenz].
-Dies trägt dazu bei ein Gefühl von Gemeinschaft zu schaffen und ermutigt zu längerfristiger Mitarbeit.
-Dahingegen ist im Allgemeinen eine freie Lizenz auf geschlossenen Wikis nicht notwendig.
-
-Sofern man Texte aus der Wikipedia verwenden möchte und umgekehrt, sollte die Creative Commons-Lizenz „Namensnennung, Weitergabe unter gleichen Bedingungen“ gewählt werden.
-
-Die Wikipedia nutzte vormals die GNU-Lizenz für freie Dokumentation (GFDL).
-Die GFDL ist eine gültige Lizenz, die allerdings schwer zu verstehen ist.
-Es ist zudem schwierig gemäß dieser Lizenz lizenzierte Inhalten wiederzuverwenden.',
-       'config-email-settings' => 'E-Mail-Einstellungen',
-       'config-enable-email' => 'Ausgehende E-Mails ermöglichen',
-       'config-enable-email-help' => 'Sofern die E-Mail-Funktionen genutzt werden sollen, müssen die entsprechenden [http://www.php.net/manual/en/mail.configuration.php PHP-E-Mail-Einstellungen] richtig konfiguriert werden.
-Für den Fall, dass die E-Mail-Funktionen nicht benötigt werden, können sie hier deaktiviert werden.',
-       'config-email-user' => 'E-Mail-Versand von Benutzer zu Benutzer aktivieren',
-       'config-email-user-help' => 'Allen Benutzern ermöglichen, sich gegenseitig E-Mails zu schicken, sofern sie es in ihren Einstellungen aktiviert haben.',
-       'config-email-usertalk' => 'Benachrichtigungen zu Änderungen an Benutzerdiskussionsseiten ermöglichen',
-       'config-email-usertalk-help' => 'Ermöglicht es Benutzern, Benachrichtigungen zu Änderungen an ihren Benutzerdiskussionsseiten zu erhalten, sofern sie dies in ihren Einstellungen aktiviert haben.',
-       'config-email-watchlist' => 'Benachrichtigungen zu Änderungen an Seiten auf der Beobachtungsliste ermöglichen',
-       'config-email-watchlist-help' => 'Ermöglicht es Benutzern, Benachrichtigungen zu Änderungen an Seiten auf ihrer Beobachtungsliste zu erhalten, sofern sie dies in ihren Einstellungen aktiviert haben.',
-       'config-email-auth' => 'E-Mail-Authentifizierung ermöglichen',
-       'config-email-auth-help' => "Sofern diese Funktion aktiviert ist, müssen Benutzer ihre E-Mail-Adresse bestätigen, indem sie den Bestätigungslink nutzen, der ihnen immer dann zugesandt wird, wenn sie ihre E-Mail-Adresse angeben oder ändern.
-Nur bestätigte E-Mail-Adressen können Nachrichten von anderen Benutzer oder Benachrichtigungsmitteilungen erhalten.
-Die Aktivierung dieser Funktion wird bei offenen Wikis, mit Hinblick auf möglichen Missbrauch der E-Mail-Funktionen, '''empfohlen.'''",
-       'config-email-sender' => 'E-Mail-Adresse für Antworten:',
-       'config-email-sender-help' => 'Bitte hier die E-Mail-Adresse angeben, die als Absenderadresse bei ausgehenden E-Mails eingesetzt werden soll.
-Rücklaufende E-Mails werden an diese E-Mail-Adresse gesandt.
-Bei vielen E-Mail-Servern muss der Teil der E-Mail-Adresse mit der Domainangabe korrekt sein.',
-       'config-upload-settings' => 'Hochladen von Bildern und Dateien',
-       'config-upload-enable' => 'Das Hochladen von Dateien ermöglichen',
-       'config-upload-help' => 'Das Hochladen von Dateien macht den Server für potentielle Sicherheitsprobleme anfällig.
-Weitere Informationen hierzu können im [//www.mediawiki.org/wiki/Manual:Security Abschnitt Sicherheit] der Anleitung nachgelesen werden.
-
-Um das Hochladen von Dateien zu ermöglichen, muss der Zugriff auf das Unterverzeichnis <code>./images</code> so geändert werden, das dieses für den Webserver beschreibbar ist.
-Hernach kann diese Option aktiviert werden.',
-       'config-upload-deleted' => 'Verzeichnis für gelöschte Dateien:',
-       'config-upload-deleted-help' => 'Bitte ein Verzeichnis auswählen, in dem gelöschte Dateien archiviert werden sollen.
-Idealerweise sollte es nicht über das Internet zugänglich sein.',
-       'config-logo' => 'URL des Logos:',
-       'config-logo-help' => 'Die Standardoberfläche von MediaWiki verfügt links oberhalb der Seitenleiste über Platz für ein Logo mit den Maßen 135x160 Pixel.
-Bitte ein Logo in entsprechender Größe hochladen und die zugehörige URL an dieser Stelle angeben.
-
-Du kannst <code>$wgStylePath</code> oder <code>$wgScriptPath</code> verwenden, falls dein Logo relativ zu diesen Pfaden ist.
-
-Sofern kein Logo benötigt wird, kann dieses Datenfeld leer bleiben.',
-       'config-instantcommons' => '„InstantCommons“ aktivieren',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons InstantCommons] ist eine Funktion, die es Wikis ermöglicht, Bild-, Klang- und andere Mediendateien zu nutzen, die auf der Website [//commons.wikimedia.org/ Wikimedia Commons] verfügbar sind.
-Um diese Funktion nutzen zu können, muss das Wiki über eine Verbindung zum Internet verfügen.
-
-Weitere Informationen zu dieser Funktion, einschließlich der Anleitung, wie hierfür andere Wikis als Wikimedia Commons eingerichtet werden können, gibt es im [//mediawiki.org/wiki/Manual:$wgForeignFileRepos Handbuch].',
-       'config-cc-error' => 'Der Creativ-Commons-Lizenzassistent konnte keine Lizenz ermitteln.
-Die Lizenz ist daher jetzt manuell einzugeben.',
-       'config-cc-again' => 'Erneut auswählen …',
-       'config-cc-not-chosen' => 'Die gewünschte Creative-Commons-Lizenz auswählen und dann auf „weiter“ klicken.',
-       'config-advanced-settings' => 'Erweiterte Konfiguration',
-       'config-cache-options' => 'Einstellungen für die Zwischenspeicherung von Objekten:',
-       'config-cache-help' => 'Das Objektcaching wird dazu genutzt die Geschwindigkeit von MediaWiki zu verbessern, indem häufig genutzte Daten zwischengespeichert werden.
-Es wird sehr empfohlen es für mittelgroße bis große Wikis zu nutzen, aber auch für kleine Wikis ergeben sich erkennbare Geschwindigkeitsverbesserungen.',
-       'config-cache-none' => 'Kein Objektcaching (es wird keine Funktion entfernt, allerdings kann dies die Geschwindigkeit größerer Wikis negativ beeinflussen)',
-       'config-cache-accel' => 'Objektcaching von PHP (APC, XCache oder WinCache)',
-       'config-cache-memcached' => 'Memcached Cacheserver nutzen (erfordert einen zusätzlichen Installationsvorgang mitsamt Konfiguration)',
-       'config-memcached-servers' => 'Memcached Cacheserver',
-       'config-memcached-help' => 'Liste der für Memcached nutzbaren IP-Adressen.
-Es sollte eine je Zeile mitsamt des vorgesehenen Ports angegeben werden. Beispiele:
-127.0.0.1:11211 oder
-192.168.1.25:1234 usw.',
-       'config-memcache-needservers' => 'Memcached wurde als Cacheserver ausgewählt. Dabei wurde allerdings kein Server angegeben.',
-       'config-memcache-badip' => 'Es wurde für Memcached eine ungültige IP-Adresse angegeben: $1',
-       'config-memcache-noport' => 'Es wurde kein Port zur Nutzung durch den Memcached Cacheserver angegeben: $1
-Sofern der Port unbekannt ist, ist 11211 die Standardangabe.',
-       'config-memcache-badport' => 'Der Ports für den Memcached Cacheserver sollten zwischen $1 und $2 liegen',
-       'config-extensions' => 'Erweiterungen',
-       'config-extensions-help' => 'Die obig angegebenen Erweiterungen wurden im Verzeichnis <code>./extensions</code> gefunden.
-
-Es könnten zusätzliche Konfigurierungen zu einzelnen Erweiterungen erforderlich sein, dennoch können sie aber bereits jetzt aktiviert werden.',
-       '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 „{{int:config-back}}“ klicken.',
-       'config-install-step-done' => 'erledigt',
-       'config-install-step-failed' => 'gescheitert',
-       'config-install-extensions' => 'Programmerweiterungen',
-       'config-install-database' => 'Datenbank wird eingerichtet',
-       'config-install-schema' => 'Datenschema wird erstellt',
-       'config-install-pg-schema-not-exist' => 'Das PostgesSQL-Datenschema ist nicht vorhanden',
-       'config-install-pg-schema-failed' => 'Das Erstellen der Datentabellen ist gescheitert.
-Es muss sichergestellt sein, dass der Benutzer „$1“ Schreibzugriff auf das Datenschema „$2“ hat.',
-       'config-install-pg-commit' => 'Änderungen anwenden',
-       'config-install-pg-plpgsql' => 'Suche nach der Datenbanksprache PL/pgSQL',
-       'config-pg-no-plpgsql' => 'Für Datenbank $1 muss die Datenbanksprache PL/pgSQL installiert werden',
-       'config-pg-no-create-privs' => 'Das für die Installation angegeben Konto verfügt nicht über ausreichende Berechtigungen, um ein Datenbanknutzerkonto zu erstellen.',
-       'config-pg-not-in-role' => 'Das für den Webbenutzer angegebene Benutzerkonto ist bereits vorhanden.
-Das für den Installationsvorgang angegebene Benutzerkonto ist kein Superbenutzer und nicht Mitglied der Benutzergruppe der Webbenutzer, so dass keine dem Webbenutzer zugeordneten Datenobjekte erstellt werden können.
-
-Für MediaWiki ist es momentan erforderlich, dass die Tabellen dem Webbenutzer rechtemäßig zugeordnet sind. Bitte einen anderen Namen für den Wikibenutzer angeben oder „← Zurück“ anklicken, um einen ausreichend berechtigten Benutzer für den Installationsvorgang anzugeben.',
-       'config-install-user' => 'Datenbankbenutzer wird erstellt',
-       'config-install-user-alreadyexists' => 'Datenbankbenutzer „$1“ ist bereits vorhanden',
-       'config-install-user-create-failed' => 'Das Anlegen des Datenbankbenutzers „$1“ ist gescheitert: $2',
-       'config-install-user-grant-failed' => 'Die Gewährung der Berechtigung für Datenbankbenutzer „$1“ ist gescheitert: $2',
-       'config-install-user-missing' => 'Der angegebene Benutzer „$1“ ist nicht vorhanden.',
-       'config-install-user-missing-create' => 'Der angegebene Benutzer „$1“ ist nicht vorhanden.
-Bitte das Auswahlkästchen „Benutzerkonto erstellen“ anklicken, sofern dieser erstellt werden soll.',
-       'config-install-tables' => 'Datentabellen werden erstellt',
-       'config-install-tables-exist' => "'''Warnung:''' Es wurden MediaWiki-Datentabellen gefunden.
-Die Erstellung wurde übersprungen.",
-       'config-install-tables-failed' => "'''Fehler:''' Die Erstellung der Datentabellen ist aufgrund des folgenden Fehlers gescheitert: $1",
-       'config-install-interwiki' => 'Interwikitabellen werden eingerichtet',
-       'config-install-interwiki-list' => 'Die Datei <code>interwiki.list</code> konnte nicht gelesen werden.',
-       'config-install-interwiki-exists' => "'''Warnung:'''  Es wurden Interwikitabellen mit Daten gefunden.
-Die Standardliste wird übersprungen.",
-       'config-install-stats' => 'Statistiken werden initialisiert',
-       'config-install-keys' => 'Geheimschlüssel werden erstellt',
-       'config-insecure-keys' => "'''Warnung:''' {{PLURAL:$2|Der Geheimschlüssel|Die Geheimschlüssel}} $1, {{PLURAL:$2|der|die}} während des Installationsvorgangs generiert {{PLURAL:$2|wurde, ist|wurden, sind}} nicht sehr sicher. {{PLURAL:$2|Er sollte|Sie sollten}} manuell geändert werden.",
-       'config-install-sysop' => 'Administratorkonto wird erstellt',
-       'config-install-subscribe-fail' => 'Abonnieren von „mediawiki-announce“ ist gescheitert: $1',
-       'config-install-subscribe-notpossible' => 'cURL ist nicht installiert und allow_url_fopen ist nicht verfügbar.',
-       'config-install-mainpage' => 'Erstellung der Hauptseite mit Standardinhalten',
-       'config-install-extension-tables' => 'Erstellung der Tabellen für die aktivierten Erweiterungen',
-       'config-install-mainpage-failed' => 'Die Hauptseite konnte nicht erstellt werden: $1',
-       'config-install-done' => "'''Herzlichen Glückwunsch!'''
-MediaWiki wurde erfolgreich installiert.
-
-Das Installationsprogramm hat die Datei <code>LocalSettings.php</code> erzeugt.
-Sie enthält alle vorgenommenen Konfigurationseinstellungen.
-
-Diese Datei muss nun heruntergeladen und anschließend in das Stammverzeichnis der MediaWiki-Installation hochgeladen werden. Dies ist dasselbe Verzeichnis, in dem sich auch die Datei <code>index.php</code> befindet. Das Herunterladen sollte inzwischen automatisch gestartet worden sein.
-
-Sofern dies nicht der Fall war, oder das Herunterladen unterbrochen wurde, kann der Vorgang durch einen Klick auf den folgenden Link erneut gestartet werden:
-
-$3
-
-'''Hinweis:''' Die Konfigurationsdatei sollte jetzt unbedingt heruntergeladen werden. Sie wird nach Beenden des Installationsprogramms, nicht mehr zur Verfügung stehen.
-
-Sobald alles erledigt wurde, kann auf das '''[$2 Wiki zugegriffen werden]'''. Wir wünschen viel Spaß und Erfolg mit dem Wiki.",
-       'config-download-localsettings' => '<code>LocalSettings.php</code> herunterladen',
-       'config-help' => 'Hilfe',
-       'config-nofile' => 'Die Datei „$1“ konnte nicht gefunden werden. Wurde sie gelöscht?',
-       'config-extension-link' => 'Wusstest du, dass dein Wiki [//www.mediawiki.org/wiki/Manual:Extensions Erweiterungen] unterstützt?
-
-Du kannst [//www.mediawiki.org/wiki/Category:Extensions_by_category Erweiterungen nach Kategorie] durchsuchen oder die [//www.mediawiki.org/wiki/Extension_Matrix Erweiterungstabelle] ansehen, um eine volle Erweiterungsliste zu erhalten.',
-       'mainpagetext' => "'''MediaWiki wurde erfolgreich installiert.'''",
-       'mainpagedocfooter' => 'Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [//meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch].
-
-== Starthilfen ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Lokalisiere MediaWiki für deine Sprache]',
-);
-
-/** German (formal address) (Deutsch (Sie-Form)‎)
- * @author MichaelFrey
- */
-$messages['de-formal'] = array(
-       'mainpagedocfooter' => 'Hilfe zur Benutzung und Konfiguration der Wiki-Software finden Sie im [//meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch].
-
-== Starthilfen ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen]', # Fuzzy
-);
-
-/** Zazaki (Zazaki)
- * @author Erdemaslancan
- * @author Mirzali
- */
-$messages['diq'] = array(
-       'config-title' => 'MediaWiki $1 sazkerdış',
-       'config-information' => 'Melumat',
-       'config-your-language' => 'Zıwanê şıma:',
-       'config-wiki-language' => 'Wiki zıwan:',
-       'config-back' => '← Peyser',
-       'config-continue' => 'Dewam ke',
-       'config-page-language' => 'Zıwan',
-       'config-page-welcome' => 'Şıma xeyr ameyê MediaWiki!',
-       'config-page-dbconnect' => 'Database rê grêdey',
-       'config-page-name' => 'Name',
-       'config-page-options' => 'Weçinegi',
-       'config-page-install' => 'Barine',
-       'config-page-complete' => 'Temamyayo',
-       'config-page-readme' => 'Mı bıwane',
-       'config-page-copying' => 'Kopyayeno',
-       'config-page-upgradedoc' => 'Berzkerdış',
-       'config-restart' => 'E, fına dest pekê',
-       'config-sidebar' => "* [//www.mediawiki.org MediaWiki keye]
-* [//www.mediawiki.org/wiki/Help:Contents User's Şınasiye]
-* [//www.mediawiki.org/wiki/Manual:Contents Xizmetkara şınasiye]
-* [//www.mediawiki.org/wiki/Manual:FAQ Peşti]
-----
-* <doclink href=Readme>Mı buwanê</doclink>
-* <doclink href=ReleaseNotes>Notê elekeyıni</doclink>
-* <doclink href=Copying>Telifiye</doclink>
-* <doclink href=UpgradeDoc>Weşkerdış</doclink>",
-       'config-env-php' => 'PHP $1 i biyo saz.',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 dılet',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-db-port' => 'Portê database:',
-       'config-header-mysql' => 'Sazkardışê MySQL',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-binary' => 'Dılet',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Namey wiki:',
-       'config-ns-generic' => 'Proce',
-       'config-ns-other' => 'Zewbi (keyfiyo)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-admin-box' => 'Hesabê Administratori',
-       'config-admin-name' => 'Namey şıma:',
-       'config-admin-password' => 'Parola:',
-       'config-admin-password-confirm' => 'Fına parola:',
-       'config-admin-email' => 'Adresa e-postey:',
-       'config-profile-private' => 'Bexse wiki',
-       'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
-       'config-license-cc-by' => 'Creative Commons Attribution',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
-       'config-license-pd' => 'Malê Şari',
-       'config-extensions' => 'Olekeni',
-       'config-help' => 'peşti',
-       'mainpagetext' => "'''MediaWiki vıst ra ser, vıraziya.'''",
-       'mainpagedocfooter' => 'Seba gurenayış u eyarkerdışê Wiki-Softwarey [//meta.wikimedia.org/wiki/Help:Contents İdarê karberi] de mıracaet ke.
-
-== Yardımê Sıftekerdışi ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista eyaranê vıraştışi]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki de ÇZP]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki ra lista serbest-dayışê postey]', # Fuzzy
-);
-
-/** Lower Sorbian (dolnoserbski)
- * @author Michawiki
- */
-$messages['dsb'] = array(
-       'mainpagetext' => "'''MediaWiki jo se wuspěšnje instalěrowało.'''",
-       'mainpagedocfooter' => "Pomoc pśi wužywanju softwary wiki namakajoš pód [//meta.wikimedia.org/wiki/Help:Contents User's Guide].
-
-Pomoc pśi wužywanju softwary wiki namakajoš pód [//meta.wikimedia.org/wiki/Help:Contents User's Guide].
-
-== Na zachopjenje ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfiguracija lisćiny połoženjow]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ (pšašanja a wótegrona)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lisćina e-mailowych nakładow MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki za twóju rěc lokalizěrowaś]",
-);
-
-/** Central Dusun (Dusun Bundu-liwan)
- * @author FRANELYA
- */
-$messages['dtp'] = array(
-       'mainpagetext' => "'''Nopongo no do popodokot ot ModiaWiki.'''",
-       'mainpagedocfooter' => 'Rujuko hilo [//meta.wikimedia.org/wiki/Help:Contents Ponudukan Momomoguno] kokomoi koilaan do momoguno posusuang-suangon wiki.
-
-== Kopotimpuunan ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lis papatantu nuludan]
-* [//www.mediawiki.org/wiki/Manual:FAQ Ponguhatan Koinsoruan om Simbar ModiaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lis pininsuratan pinolabus do ModiaWiki]', # Fuzzy
-);
-
-/** 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' => 'Γλώσσα του wiki:',
-       'config-back' => '← Πίσω',
-       'config-continue' => 'Συνέχεια →',
-       'config-page-language' => 'Γλώσσα',
-       'config-page-welcome' => 'Καλώς ήλθατε στο MediaWiki!',
-       'config-page-name' => 'Όνομα',
-       'config-page-options' => 'Επιλογές',
-       'config-page-install' => 'Εγκατάσταση',
-       'config-page-complete' => 'Ολοκληρώθηκε!',
-       'config-page-restart' => 'Επανεκκίνηση εγκατάστασης',
-       'config-page-copying' => 'Αντιγραφή',
-       'config-page-upgradedoc' => 'Αναβάθμιση',
-       'config-page-existingwiki' => 'Υπάρχον βίκι',
-       'config-restart' => 'Ναι, κάντε επανεκκίνηση',
-       '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-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',
-       'config-header-oracle' => 'Ρυθμίσεις Oracle',
-       'config-invalid-db-type' => 'Μη έγκυρος τύπος βάσης δεδομένων',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Όνομα του βίκι:',
-       'config-site-name-blank' => 'Εισαγάγετε όνομα ιστοχώρου.',
-       'config-project-namespace' => 'Ονοματοχώρος εγχειρήματος:',
-       'config-ns-generic' => 'Εγχείρημα',
-       'config-ns-site-name' => 'Ίδιο με το όνομα του wiki: $1',
-       'config-ns-other' => 'Άλλο (προσδιορίστε)',
-       'config-admin-box' => 'Λογαριασμός διαχειριστή',
-       'config-admin-name' => 'Το όνομά σας:',
-       'config-admin-password' => 'Κωδικός πρόσβασης:',
-       'config-admin-password-confirm' => 'Επανάληψη κωδικού πρόσβασης:',
-       'config-admin-email' => 'Διεύθυνση ηλεκτρονικού ταχυδρομείου:',
-       'config-optional-continue' => 'Να ερωτηθώ περισσότερες ερωτήσεις.',
-       'config-profile-wiki' => 'Παραδοσιακό wiki', # Fuzzy
-       'config-profile-no-anon' => 'Απαιτείται η δημιουργία λογαριασμού',
-       'config-profile-private' => 'Ιδιωτικό wiki',
-       'config-email-settings' => 'Ρυθμίσεις ηλεκτρονικού ταχυδρομείου',
-       'config-upload-settings' => 'Ανέβασμα εικόνων και άλλων αρχείων',
-       'config-upload-enable' => 'Ενεργοποιήστε το ανέβασμα αρχείων',
-       'config-logo' => 'Διεύθυνση URL λογότυπου:',
-       'config-cc-again' => 'Επιλέξτε ξανά...',
-       'config-extensions' => 'Επεκτάσεις',
-       'config-install-step-done' => 'έγινε',
-       'config-install-step-failed' => 'απέτυχε',
-       'config-help' => 'βοήθεια',
-       'mainpagetext' => "'''To λογισμικό MediaWiki εγκαταστάθηκε με επιτυχία.'''",
-       'mainpagedocfooter' => 'Περισσότερες πληροφορίες σχετικά με τη χρήση και με τη ρύθμιση παραμέτρων θα βρείτε στους συνδέσμους: [//meta.wikimedia.org/wiki/MediaWiki_localisation Οδηγίες για τροποποίηση του περιβάλλοντος εργασίας] και [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Εγχειρίδιο χρήστη].', # Fuzzy
-);
-
-/** British English (British English)
- * @author Shirayuki
- */
-$messages['en-gb'] = array(
-       'config-unicode-using-utf8' => "Using Brion Vibber's utf8_normalize.so for Unicode normalisation.",
-       'config-unicode-using-intl' => 'Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalisation.',
-       'config-unicode-pure-php-warning' => "'''Warning:''' The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalisation, falling back to slow pure-PHP implementation.
-If you run a high-traffic site, you should read a little on [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode normalisation].",
-       'config-unicode-update-warning' => "'''Warning:''' The installed version of the Unicode normalisation wrapper uses an older version of [http://site.icu-project.org/ the ICU project's] library.
-You should [//www.mediawiki.org/wiki/Unicode_normalization_considerations upgrade] if you are at all concerned about using Unicode.",
-       'config-unknown-collation' => "'''Warning:''' Database is using unrecognised collation.",
-       'config-profile-fishbowl' => 'Authorised editors only',
-       'config-install-stats' => 'Initialising statistics',
-);
-
-/** Esperanto (Esperanto)
- * @author Airon90
- * @author Yekrats
- */
-$messages['eo'] = array(
-       'config-your-language' => 'Via lingvo:',
-       'config-your-language-help' => 'Elekti lingvon uzi dum la instalada procezo.',
-       'config-wiki-language' => 'Lingvo de la vikio:',
-       'config-wiki-language-help' => 'Elekti la ĉefe skribotan lingvon de la vikio.',
-       'config-page-welcome' => 'Bonvenon al MediaWiki!',
-       'config-page-dbsettings' => 'Agordoj de la datumbazo',
-       'config-page-name' => 'Nomo',
-       'config-page-options' => 'Agordoj',
-       'config-page-install' => 'Instali',
-       'config-page-complete' => 'Farita!',
-       'mainpagetext' => "'''MediaWiki estis sukcese instalita.'''",
-       'mainpagedocfooter' => "Konsultu la [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide User's Guide] por informo pri uzado de vikia programaro.
-
-==Kiel komenci==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Listo de konfiguraĵoj] (angla)
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki Oftaj Demandoj] (angla)
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki dissendolisto pri anoncoj] (angla)", # Fuzzy
-);
-
-/** Spanish (español)
- * @author Armando-Martin
- * @author Ciencia Al Poder
- * @author Crazymadlover
- * @author Danke7
- * @author Fitoschido
- * @author Locos epraix
- * @author Od1n
- * @author Platonides
- * @author Sanbec
- * @author Translationista
- * @author Vivaelcelta
- * @author 아라
- */
-$messages['es'] = array(
-       'config-desc' => 'El instalador para MediaWiki',
-       'config-title' => 'MediaWiki $1 instalación',
-       'config-information' => 'Información',
-       'config-localsettings-upgrade' => 'Se ha encontrado un archivo <code>LocalSettings.php</code>.
-Para actualizar esta instalación, por favor ingresa el valor de <code>$wgUpgradeKey</code> en el cuadro de abajo.
-Lo encontrarás en <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Se ha detectado un archivo <code>LocalSettings.php</code>.
-Para actualizar la instalación, vuelva a ejecutar <code>update.php</code>',
-       'config-localsettings-key' => 'Clave de actualización:',
-       'config-localsettings-badkey' => 'La clave proporcionada es incorrecta.',
-       'config-upgrade-key-missing' => 'Se ha detectado una instalación existente de MediaWiki.
-Para actualizar la instalación, por favor, ponga la siguiente línea al final de su archivo <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => 'El archivo <code>LocalSettings.php</code> existente parece estar incompleto.
-La variable $1 no está definida.
-Cambie el archivo <code>LocalSettings.php</code> para que esta variable quede establecida y haga clic en "{{int:Config-continue}}".',
-       'config-localsettings-connection-error' => 'Se detectó un error al conectarse a la base de datos utilizando la configuración especificada en los archivos <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Corrija estas opciones y vuelva a intentarlo.
-
-$1',
-       'config-session-error' => 'Error comenzando sesión: $1',
-       'config-session-expired' => 'Tus datos de sesión parecen haber expirado.
-Las sesiones están configuradas por una duración de $1.
-Puedes incrementar esto configurando <code>session.gc_maxlifetime</code> en php.ini.
-Reiniciar el proceso de instalación.',
-       'config-no-session' => 'Se han perdido los datos de sesión.
-Verifica tu php.ini y comprueba que <code>session.save_path</code> está establecido en un directorio apropiado.',
-       'config-your-language' => 'Tu idioma:',
-       'config-your-language-help' => 'Seleccionar un idioma a usar durante el proceso de instalación.',
-       'config-wiki-language' => 'Idioma del wiki:',
-       'config-wiki-language-help' => 'Seleccionar el idioma en el que el wiki será escrito predominantemente.',
-       'config-back' => '← Atrás',
-       'config-continue' => 'Continuar →',
-       'config-page-language' => 'Idioma',
-       'config-page-welcome' => 'Bienvenido a MediaWiki!',
-       'config-page-dbconnect' => 'Conectar a la base de datos',
-       'config-page-upgrade' => 'Actualizar instalación existente',
-       'config-page-dbsettings' => 'Configuración de la base de datos',
-       'config-page-name' => 'Nombre',
-       'config-page-options' => 'Opciones',
-       'config-page-install' => 'Instalar',
-       'config-page-complete' => 'Completo!',
-       'config-page-restart' => 'Reiniciar instalación',
-       'config-page-readme' => 'Léeme',
-       'config-page-releasenotes' => 'Notas de la versión',
-       'config-page-copying' => 'Copiando',
-       'config-page-upgradedoc' => 'Actualizando',
-       'config-page-existingwiki' => 'Wiki existente',
-       'config-help-restart' => '¿Deseas borrar todos los datos que has ingresado hasta ahora y reiniciar el proceso de instalación desde el principio?',
-       'config-restart' => 'Sí, reiniciarlo',
-       'config-welcome' => '=== Comprobación del entorno ===
-Se realiza comprobaciones básicas para ver si el entorno es adecuado para la instalación de MediaWiki.
-Deberás suministrar los resultados de tales comprobaciones si necesitas ayuda durante la instalación.', # Fuzzy
-       'config-copyright' => "=== Derechos de autor y Términos de uso ===
-
-$1
-
-Este programa es software libre; puedes redistribuirlo y/o modificarlo en los términos de la Licencia Pública General de GNU, tal como aparece publicada por la Fundación para el Software Libre, tanto la versión 2 de la Licencia, como cualquier versión posterior (según prefiera).
-
-Este programa es distribuido en la esperanza de que sea útil, pero '''sin cualquier garantía'''; inclusive, sin la garantía implícita de la '''posibilidad de ser comercializado''' o de '''idoneidad para cualquier finalidad específica'''.
-Consulte la licencia *GNU General *Public *License para más detalles.
-
-En conjunto con este programa debe haber recibido <doclink href=Copying>una copia de la Licencia Pública General de GNU</doclink>; si no la recibió, pídala por escrito a Fundación para el Software Libre, Inc., 51 Franklin Street, Fifth Floor, Boston, ME La 02110-1301, USA o [http://www.gnu.org/copyleft/gpl.html léala en internet].",
-       'config-sidebar' => '* [//www.mediawiki.org Página principal de MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents Guía del usuario]
-* [//www.mediawiki.org/wiki/Manual:Contents Guía del administrador]
-* [//www.mediawiki.org/wiki/Manual:FAQ Preguntas frecuentes]
-----
-* <doclink href=Readme>Léeme</doclink>
-* <doclink href=ReleaseNotes>Notas de la versión</doclink>
-* <doclink href=Copying>Copia</doclink>
-* <doclink href=UpgradeDoc>Actualización</doclink>',
-       'config-env-good' => 'El entorno ha sido comprobado.
-Puedes instalar MediaWiki.',
-       'config-env-bad' => 'El entorno ha sido comprobado.
-No puedes instalar MediaWiki.',
-       'config-env-php' => 'PHP $1 está instalado.',
-       'config-env-php-toolow' => 'PHP $1 está instalado.
-Sin embargo, MediaWiki requiere PHP $2 o superior.',
-       'config-unicode-using-utf8' => 'Usando utf8_normalize.so de Brion Vibber para la normalización Unicode.',
-       'config-unicode-using-intl' => 'Usando la [http://pecl.php.net/intl extensión intl PECL] para la normalización Unicode.',
-       'config-unicode-pure-php-warning' => "'''Advertencia''': La [http://pecl.php.net/intl extensión intl] no está disponible para efectuar la normalización Unicode. Utilizando la implementación más lenta en PHP.
-Si tu web tiene mucho tráfico, te recomendamos leer acerca de la [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalización Unicode].",
-       'config-unicode-update-warning' => "'''Warning''': La versión instalada del contenedor de normalización Unicode usa una versión anterior de la biblioteca del [http://site.icu-project.org/ proyecto ICU].
-Deberás [//www.mediawiki.org/wiki/Unicode_normalization_considerations actualizar] si realmente deseas usar Unicode.",
-       'config-no-db' => 'No fue posible encontrar un controlador adecuado para la base de datos! Necesitas instalar un controlador de base de datos para PHP.
-Las siguientes bases de datos son soportadas: $1.
-Si estás en alojamiento compartido, pregunta a tu proveedor el instalar un controlador de base de datos adecuado.
-Si estás compilando PHP por ti mismo, reconfigúralo con un cliente de base de datos disponible, por ejemplo usando <code>./configure --with-mysql</code>.
-Si instalaste PHP de un paquete Debian o Ubuntu, entonces también necesitas instalar el módulo php5-mysql.',
-       'config-outdated-sqlite' => "''' Advertencia ''': tiene la versión SQLite $1, que es inferior a la mínima versión requerida: $2 . SQLite no estará disponible.",
-       'config-no-fts3' => "'''Advertencia''': SQLite está compilado sin el [//sqlite.org/fts3.html módulo FTS3]. Las funcionalidades de búsqueda no estarán disponibles en esta instalación.",
-       'config-register-globals' => "'''Advertencia: La opción de <code>[http://php.net/register_globals register_globals]</code> de PHP está habilitada.'''
-'''Desactívela si puede.'''
-MediaWiki funcionará, pero tu servidor quedará expuesto a vulnerabilidades de seguridad potenciales.",
-       'config-magic-quotes-runtime' => "'''Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está activada!'''
-Esta opción causa la imprevisible corrupción de la entrada de datos.
-No puedes instalar o utilizar MediaWiki a menos que esta opción esté inhabilitada.",
-       'config-magic-quotes-sybase' => "'''Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está activada!'''
-Esta opción causa la imprevisible corrupción de la entrada de datos.
-No puedes instalar o utilizar MediaWiki a menos que esta opción esté inhabilitada.",
-       'config-mbstring' => "'''Fatal: La opción [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está activada!'''
-Esta opción causa errores y puede corromper los datos de una forma imprevisible.
-No se puede instalar o usar MediaWiki a menos que esta opción sea desactivada.",
-       'config-ze1' => "'''Fatal: ¡La opción [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] está activada!'''
-Esta opción causa problemas significativos en MediaWiki.
-No se puede instalar o usar MediaWiki a menos que esta opción sea desactivada.",
-       'config-safe-mode' => "'''Advertencia:''' El [http://www.php.net/features.safe-mode modo seguro] de PHP está activado.
-Este modo puede causar problemas, especialmente en la carga de archivosy en compatibilidad con <code>math</code>.",
-       'config-xml-bad' => 'Falta el módulo XML de PHP.
-MediaWiki necesita funciones en este módulo y no funcionará con esta configuración.
-Si está ejecutando Mandrake, instale el paquete php-xml.',
-       'config-pcre' => 'Parece faltar el módulo de compatibilidad PCRE.
-MediaWiki necesita que las funciones de expresiones regulares compatibles con Perl estén funcionando.',
-       'config-pcre-no-utf8' => "'''Error fatal ''': Parece que el módulo PCRE de PHP fue compilado sin el soporte PCRE_UTF8.
-MediaWiki requiere compatibilidad con UTF-8 para funcionar correctamente.",
-       'config-memory-raised' => 'el parámetro <code>memory_limit</code> de PHP es $1, aumentada a $2.',
-       'config-memory-bad' => "'''Advertencia:''' El parámetro <code>memory_limit</code> de PHP es $1.
-Probablemente este valor es demasiado bajo.
-¡La instalación podrá fallar!",
-       'config-ctype' => "'''Fatal''': PHP debe ser compilado con soporte para la [http://www.php.net/manual/en/ctype.installation.php extensión Ctype].",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] está instalado',
-       'config-apc' => '[http://www.php.net/apc APC] está instalado',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado',
-       'config-no-cache' => "'''Advertencia:''' No pudo encontrarse [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].
-El caché de objetos no está habilitado.",
-       'config-mod-security' => "''' Advertencia ''': Su servidor web tiene [http://modsecurity.org/ mod_security] habilitado. Si la configuración es incorrecta, puede causar problemas a MediaWiki u otro software que permita a los usuarios publicar contenido arbitrarios.
-Consulte la [http://modsecurity.org/documentation/ documentación de mod_security] o contacte con el soporte de su servidor (''host'') si encuentra errores aleatorios.",
-       'config-diff3-bad' => 'GNU diff3 no se encuentra.',
-       'config-git-bad' => 'No se encontró el software de control de versiones Git.',
-       'config-imagemagick' => 'ImageMagick encontrado: <code>$1</code>.
-La miniaturización de imágenes se habilitará si habilitas las cargas.',
-       'config-gd' => 'Se ha encontrado una biblioteca de gráficos GD integrada.
-La miniaturización de imágenes se habilitará si habilitas las subidas.',
-       'config-no-scaling' => 'No se ha encontrado ninguma biblioteca GD o ImageMagik.
-Se inhabilitará la miniaturización de imágenes.',
-       'config-no-uri' => "'''Error:''' No se pudo determinar el URI actual.
-Instalación abortada.",
-       'config-no-cli-uri' => "''' Advertencia ''': No se ha especificado ningún --scriptpath, por defecto, se usará: <code>$1</code> .",
-       'config-using-server' => 'Utilizando el nombre de servidor "<nowiki>$1</nowiki>".',
-       'config-using-uri' => 'Utilizando la dirección URL del servidor "<nowiki>$1$2</nowiki>".',
-       'config-uploads-not-safe' => "'''Atención:''' Su directorio por defecto para las cargas, <code>$1</code>, es vulnerable a la ejecución de scripts arbitrarios.
-Aunque MediaWiki comprueba todos los archivos cargados por si hubiese amenazas de seguridad, es altamente recomendable [//www.mediawiki.org/wiki/Manual:Security#Upload_security cerrar esta vulnerabilidad de seguridad] antes de activar las cargas.",
-       'config-no-cli-uploads-check' => "'''Atención:''' Su directorio predeterminado para cargas (<code>$1</code>) no está comprobado para la vulnerabilidad
- de ejecución arbitraria de comandos script durante la instalación de CLI.",
-       'config-brokenlibxml' => 'El sistema tiene una combinación de versiones de PHP y de libxml2 que puede ser problemática y puede causar daños en datos ocultos de MediaWiki y otras aplicaciones web
-Actualizar a PHP 5.2.9 o posterior y a libxml2 2.7.3 o posterior ([//bugs.php.net/bug.php?id=45996 bug presentado con PHP]).
-Instalación anulada.',
-       'config-using531' => 'MediaWiki no puede utilizarse con PHP $1 debido a un error con los parámetros de referencia para <code>__call()</code> .
-Actualice el sistema a PHP 5.3.2 o superior, o vuelva a la versión PHP 5.3.0 para resolver este problema.
-Instalación anulada.',
-       'config-suhosin-max-value-length' => 'Suhosin está instalado y limita el parámetro <code>length</code> GET a $1 bytes. 
-El componente ResourceLoader (gestor de recursos) de MediaWiki trabajará en este límite, pero eso perjudicará el rendimiento.
-Si es posible, deberías establecer <code>suhosin.get.max_value_length</code> en el valor 1024 o superior en <code>php.ini</code> y establecer <code>$wgResourceLoaderMaxQueryLength</code> en el mismo valor en <code>php.ini</code>.',
-       'config-db-type' => 'Tipo de base de datos',
-       'config-db-host' => 'Servidor de la base de datos:',
-       'config-db-host-help' => 'Si su servidor de base de datos está en otro servidor, escriba el nombre del host o su dirección IP aquí.
-Si está utilizando alojamiento web compartido, su proveedor de alojamiento debería darle el nombre correcto del servidor de alojamiento (host) en su documentación.
-Si va a instalarlo en un servidor Windows y utiliza MySQL, el uso de "localhost" como nombre del servidor puede no funcionar. Si no es así, intente poner "127.0.0.1" como dirección IP local.
-Si utiliza PostgreSQL, deje este campo en blanco para conectarse a través de un socket de Unix.',
-       'config-db-host-oracle' => 'TNS de la base de datos:',
-       'config-db-host-oracle-help' => 'Introduzca un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nombre de conexión local] válido; un archivo tnsnames.ora debe ser visible para esta instalación.<br />Si está utilizando bibliotecas de cliente 10g o más recientes también puede utilizar el método de asignación de nombres [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
-       'config-db-wiki-settings' => 'Identifique este wiki',
-       'config-db-name' => 'Nombre de base de datos:',
-       'config-db-name-help' => 'Elija un nombre que identifique su wiki.
-No debe contener espacios.
-
-Si está utilizando alojamiento web compartido, su proveedor de alojamiento le dará un nombre específico de base de datos para que lo utilice, o bien le permitirá crear bases de datos a través de un panel de control.',
-       'config-db-name-oracle' => 'Esquema de base de datos:',
-       'config-db-account-oracle-warn' => 'Hay tres escenarios compatibles para la instalación de Oracle como base de datos back-end:
-
-Si desea crear una cuenta de base de datos como parte del proceso de instalación, por favor suministre una cuenta con función SYSDBA como cuenta de base de datos para la instalación y especifique las credenciales deseadas de la cuenta de acceso al web, de lo contrario puede crear manualmente la cuenta de acceso al web y suministrar sólo esa cuenta (si tiene los permisos necesarios para crear los objetos de esquema) o suministrar dos cuentas diferentes, una con privilegios de creación y otra con acceso restringido a la web
-
-La secuencia de comandos (script) para crear una cuenta con los privilegios necesarios puede encontrarse en el directorio "maintenance/oracle/" de esta instalación. Tenga en cuenta que utilizando una cuenta restringida desactivará todas las capacidades de mantenimiento con la cuenta predeterminada.',
-       'config-db-install-account' => 'Cuenta de usuario para instalación',
-       'config-db-username' => 'Nombre de usuario de base de datos:',
-       'config-db-password' => 'contraseña de base de datos:',
-       'config-db-password-empty' => 'Introduzca una contraseña para el nuevo usuario de base de datos:  $1.
-Aunque es posible crear usuarios sin contraseña, esto no es seguro.',
-       'config-db-install-username' => 'Introduzca el nombre de usuario que se utilizará para conectarse a la base de datos durante el proceso de instalación.
-Este no es el nombre de usuario de la cuenta de MediaWiki; Este es el nombre de usuario para la base de datos.',
-       'config-db-install-password' => 'Introduzca la contraseña que se utilizará para conectarse a la base de datos durante el proceso de instalación.
-Esta no es la contraseña para la cuenta de MediaWiki; esta es la contraseña para la base de datos.',
-       'config-db-install-help' => 'Ingresar el nombre de usuario y la contraseña que será usada para conectar a la base de datos durante el proceso de instalación.',
-       'config-db-account-lock' => 'Usar el mismo nombre de usuario y contraseña durante operación normal',
-       'config-db-wiki-account' => 'Usar cuenta para operación normal',
-       'config-db-wiki-help' => 'Introduce el nombre de usuario y la contraseña que serán usados para acceder a la base de datos durante la operación normal del wiki.
-Si esta cuenta no existe y la cuenta de instalación tiene suficientes privilegios, se creará esta cuenta de usuario con los privilegios mínimos necesarios para la operación normal del wiki.',
-       'config-db-prefix' => 'Prefijo para las tablas de la base de datos:',
-       'config-db-prefix-help' => 'Si necesita compartir una base de datos entre múltiples wikis, o entre MediaWiki y otra aplicación web, puede optar por agregar un prefijo a todos los nombres de tabla para evitar conflictos. 
-No utilice espacios.
-
-Normalmente se deja este campo vacío.',
-       'config-db-charset' => 'Conjunto de caracteres de la base de datos',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binario',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 retrocompatible UTF-8',
-       'config-charset-help' => "'''Atención:''' Si emplea '''backwards-compatible UTF-8''' en MySQL 4.1+ y posteriormente hace copia de seguridad de la base de datos con <code>mysqldump</code> , puede destruir todos los caracteres no-ASCII, ¡dañando irreversiblemente sus copias de seguridad!
-
-En '''modo binario''', MediaWiki almacena texto UTF-8 en la base de datos en campos binarios.
-Esto es más eficiente que el modo UTF-8 de MySQL, y le permite utilizar la gama completa de caracteres Unicode.
-En ''' modo UTF-8'' ', MySQL sabrá el juego de caracteres de sus datos y puede presentarlos y convertirlos apropiadamente,
-pero no le permitirá almacenar caracteres por encima del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plano multilingüe básico].",
-       'config-mysql-old' => 'Se necesita MySQL $1 o una versión más reciente. Tienes la versión $2.',
-       'config-db-port' => 'Puerto de la base de datos:',
-       'config-db-schema' => 'Esquema para MediaWiki',
-       'config-db-schema-help' => 'Estos esquemas usualmente estarán bien.
-Altéralos sólo si tienes la seguridad de que necesitas hacerlo.',
-       'config-pg-test-error' => "No se puede conectar a la base de datos '''$1''': $2",
-       'config-sqlite-dir' => 'Directorio de datos SQLite:',
-       'config-sqlite-dir-help' => "SQLite almacena todos los datos en un único archivo.
-
-El directorio que proporcione debe ser escribible por el servidor Web durante la instalación.
-
-'''No''' debería ser accesible a través de Internet, por eso no vamos a ponerlo en el sitio donde están los archivos PHP.
-
-El instalador escribirá un archivo <code>.htaccess</code> junto con él, pero si falla alguien podría tener acceso a la base de datos en bloque.
-Eso incluye los datos de usuario en bloque (direcciones de correo electrónico, las contraseñas con hash) así como revisiones eliminadas y otros datos restringidos del wiki.
-
-Considere la posibilidad de poner la base de datos en algún otro sitio, por ejemplo en <code>/var/lib/mediawiki/yourwiki</code> .",
-       'config-oracle-def-ts' => 'Espacio de tablas por defecto:',
-       'config-oracle-temp-ts' => 'Espacio de tablas temporal:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => 'MediaWiki es compatible con los siguientes sistemas de bases de datos:
-
-$1
-
-Si no encuentras en el listado el sistema de base de datos que estás intentando utilizar, sigue las instrucciones vinculadas arriba para habilitar la compatibilidad.',
-       'config-support-mysql' => '* $1 es la base de datos mayoritaria para MediaWiki y la que goza de mayor compatibilidad ([http://www.php.net/manual/es/mysql.installation.php cómo compilar PHP con compatibilidad MySQL])',
-       'config-support-postgres' => '$1 es un popular sistema de base de datos de código abierto, alternativa a MySQL. ([http://www.php.net/manual/es/pgsql.installation.php cómo compilar PHP con compatibilidad PostgreSQL]). Puede haber algunos defectos menores destacables, y no es recomendable para uso en un entorno de producción.',
-       'config-support-sqlite' => '* $1 es una base de datos ligera con gran compatibilidad con MediaWiki ([http://www.php.net/manual/es/pdo.installation.php cómo compilar PHP con compatibilidad SQLite usando PDO]).',
-       'config-support-oracle' => '* $1 es una base de datos comercial a nivel empresarial ([http://www.php.net/manual/es/oci8.installation.php cómo compilar PHP con compatibilidad con OCI8])',
-       'config-header-mysql' => 'Configuración de MySQL',
-       'config-header-postgres' => 'Configuración de PostgreSQL',
-       'config-header-sqlite' => 'Configuración de SQLite',
-       'config-header-oracle' => 'Configuración de Oracle',
-       'config-invalid-db-type' => 'Tipo de base de datos inválida',
-       'config-missing-db-name' => 'Debes introducir un valor para "Nombre de la base de datos"',
-       'config-missing-db-host' => 'Debe introducir un valor para "Servidor (host) de base de datos"',
-       'config-missing-db-server-oracle' => 'Debe introducir un valor para "TNS de la base de datos"',
-       'config-invalid-db-server-oracle' => 'El TNS de la base de datos, "$1", es inválido.Use sólo carateres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_) y guiones (-).Usa sólo caracteres ASCII: letras (a-z, A-Z), dígitos (0-9), guiones bajos (_) y puntos (.).', # Fuzzy
-       'config-invalid-db-name' => 'El nombre de la base de datos "$1"  es inválido.
-Usa sólo caracteres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_)y guiones (-).',
-       'config-invalid-db-prefix' => 'El prefijo de la base de datos "$1"  es inválido.
-Use sólo carateres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_) y guiones (-).',
-       'config-connection-error' => '$1.
-
-Verifique el servidor, el nombre de usuario y la contraseña, e intente de nuevo.',
-       'config-invalid-schema' => 'El esquema de la base de datos "$1"  es inválido.
-Use sólo carateres ASCII: letras (a-z, A-Z), guarismos (0-9) y guiones bajos (_).',
-       'config-db-sys-create-oracle' => 'El instalador sólo admite el empleo de cuentas SYSDBA como método para crear una cuenta nueva.',
-       'config-db-sys-user-exists-oracle' => 'La cuenta de usuario "$1" ya existe. ¡SYSDBA sólo puede utilizarse para crear una nueva cuenta!',
-       'config-postgres-old' => 'Se necesita PostgreSQL $1 o una versión más reciente; tienes la versión $2.',
-       'config-sqlite-name-help' => 'Elige el nombre que identificará tu wiki.
-No uses espacios o guiones.
-Este nombre será usado como nombre del archivo de datos de SQLite.',
-       'config-sqlite-parent-unwritable-group' => 'No se puede crear el directorio de datos <code><nowiki>$1</nowiki></code> , porque el directorio padre <code><nowiki>$2</nowiki></code> no es accesible en escritura por el servidor Web.
-
-El instalador ha determinado el usuario cuyo servidor Web se está ejecutando.
-Conceda permisos de escritura en el directorio <code><nowiki>$3</nowiki></code> para continuar.
-En un sistema Unix/Linux haga:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'No se puede crear el directorio de datos <code><nowiki>$1</nowiki></code> , porque el directorio padre <code><nowiki>$2</nowiki></code> no es accesible en escritura por el servidor Web.
-
-El programa de instalación no pudo determinar el usuario que se ejecuta en el servidor Web
-Conceda permisos de escritura en el directorio <code><nowiki>$3</nowiki></code> para continuar.
-En un sistema Unix/Linux haga:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Error al crear el directorio de datos "$1".
-Comprueba la ubicación e inténtalo de nuevo.',
-       'config-sqlite-dir-unwritable' => 'No se puede escribir en el directorio "$1".
-Modifica los permisos para que el servidor web pueda escribir en él y vuelve a intentarlo.',
-       'config-sqlite-connection-error' => '$1.
-
-Verifique el directório de datos y el nombre de la base de datos mostrada a continuación e inténtalo nuevamente.',
-       'config-sqlite-readonly' => 'El archivo <code>$1</code> no se puede escribir.',
-       'config-sqlite-cant-create-db' => 'No fue posible crear el archivo de la base de datos <code>$1</code>.',
-       'config-sqlite-fts3-downgrade' => 'El PHP no tiene compatibilidad FTS3. actualizando tablas a una versión anterior',
-       'config-can-upgrade' => "Esta base de datos contiene tablas de MediaWiki.
-Para actualizarlas a MediaWiki $1, haz clic en '''Continuar'''.",
-       'config-upgrade-done' => "Actualización completa.
-
-Usted puede ahora [ $1  empezar a usar su wiki].
-
-Si desea regenerar su archivo <code>LocalSettings.php</code> de archivo, haga clic en el botón de abajo.
-Esto '''no se recomienda''' a menos que esté teniendo problemas con su wiki.",
-       'config-upgrade-done-no-regenerate' => 'Actualización completa.
-
-Usted puede ahora [$1  empezar a usar su wiki].',
-       'config-regenerate' => 'Regenerar LocalSettings.php →',
-       'config-show-table-status' => '<code>SHOW TABLE STATUS</code> ha fallado!',
-       'config-unknown-collation' => "'''Advertencia:''' La base de datos está utilizando una intercalación no reconocida.",
-       'config-db-web-account' => 'Cuenta de base de datos para acceso Web',
-       'config-db-web-help' => 'Elige el usuario y contraseña que el servidor Web usará para conectarse al servidor de la base de datos durante el fincionamiento normal del wiki.',
-       'config-db-web-account-same' => 'Utilizar la misma cuenta que en la instalación',
-       'config-db-web-create' => 'Crear la cuenta si no existe',
-       'config-db-web-no-create-privs' => 'La cuenta que has especificado para la instalación no tiene privilegios suficientes para crear una cuenta.
-La cuenta que especifiques aquí debe existir.',
-       'config-mysql-engine' => 'Motor de almacenamiento:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Atención''': Ha seleccionado MyISAM como motor de almacenamiento de MySQL, el cual no está recomendado para su uso con MediaWiki, porque:
- * apenas soporta accesos simultáneos debido al bloqueo de tablas
- * es más propenso a la corrupción que otros motores
- * el código MediaWiki no siempre controla MyISAM como debiera
-
-Si su instalación de MySQL soporta InnoDB, es muy recomendable que lo elija en su lugar.
-Si la instalación de MySQL no admite InnoDB, quizás es el momento de una actualización.",
-       'config-mysql-engine-help' => "'''InnoDB''' es casi siempre la mejor opción, dado que soporta bien los accesos simultáneos.
-
-'''MyISAM''' es más rápido en instalaciones de usuario único o de sólo lectura.
-Las bases de datos MyISAM tienden a corromperse más a menudo que las bases de datos InnoDB.",
-       'config-mysql-charset' => 'Conjunto de caracteres de la base de datos:',
-       'config-mysql-binary' => 'Binario',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "En '''modo binario''', MediaWiki almacena texto UTF-8 para la base de datos en campos binarios.
-Esto es más eficiente que el modo UTF-8 de MySQL y le permite utilizar la gama completa de caracteres Unicode.
-
-En '''modo UTF-8''', MySQL sabrá qué conjunto de caracteres emplean sus datos y puede presentarlos y convertirlos adecuadamente, pero no le permitirá almacenar caracteres por encima del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plano multilingüe básico].",
-       'config-site-name' => 'Nombre del wiki:',
-       'config-site-name-help' => 'Esto aparecerá en la barra de título del navegador y en varios otros lugares.',
-       'config-site-name-blank' => 'Ingresar un nombre de sitio.',
-       'config-project-namespace' => 'Espacio de nombre de proyecto:',
-       'config-ns-generic' => 'Proyecto',
-       'config-ns-site-name' => 'Igual como el nombre del wiki: $1',
-       'config-ns-other' => 'Otro (especificar)',
-       'config-ns-other-default' => 'MiWiki',
-       'config-project-namespace-help' => 'Siguiendo el ejemplo de  Wikipedia, muchos wikis mantienen sus páginas de políticas separadas de sus páginas de contenido, en un "\'\'\'espacio de nombres del proyecto\'\'\'".
-
-Todos los títulos de página en este espacio de nombres comienzan con un determinado prefijo, que usted puede especificar aquí.
-Tradicionalmente, este prefijo se deriva del nombre del wiki, pero no puede contener caracteres de puntuación como "#" o ":".',
-       'config-ns-invalid' => 'El espacio de nombre especificado "<nowiki>$1</nowiki>" no es válido.
-Especifica un espacio de nombre de proyecto diferente.',
-       'config-ns-conflict' => 'El espacio de nombres especificado "<nowiki>$1</nowiki>" entra en conflicto con un espacio de nombres predeterminado de MediaWiki.
-Especifique un espacio de nombres de proyecto diferente.',
-       'config-admin-box' => 'Cuenta de administrador',
-       'config-admin-name' => 'Su nombre:',
-       'config-admin-password' => 'Contraseña:',
-       'config-admin-password-confirm' => 'Repita la contraseña:',
-       'config-admin-help' => 'Escribe aquí el nombre de usuario que desees, como por ejemplo "Pedro Bloggs".
-Este es el nombre que usarás para entrar al wiki.',
-       'config-admin-name-blank' => 'Introduce un nombre de usuario de administrador.',
-       'config-admin-name-invalid' => 'El nombre de usuario especificado "<nowiki>$1</nowiki>" no es válido.
-Especifique un nombre de usuario diferente.',
-       'config-admin-password-blank' => 'Introduzca una contraseña para la cuenta de administrador.',
-       'config-admin-password-same' => 'La contraseña no debe ser la misma que el nombre de usuario.',
-       'config-admin-password-mismatch' => 'Las dos contraseñas que ingresaste no coinciden.',
-       'config-admin-email' => 'Dirección de correo electrónico:',
-       'config-admin-email-help' => 'Introduce aquí un correo electrónico que te permita recibir mensajes de otros usuarios del wiki, vuelve a configurar tu contraseña y recibe notificaciones de cambios realizados a tus páginas vigiladas. Puedes dejar este campo vacío.',
-       'config-admin-error-user' => 'Error interno al crear un administrador con el nombre "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'Error interno al establecer una contraseña para el administrador " <nowiki>$1</nowiki> ": <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Ha introducido una dirección de correo electrónico inválida.',
-       'config-subscribe' => 'Suscribirse para recibir [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce avisos de nuevas versiones].',
-       'config-subscribe-help' => 'Esta es una lista de divulgación de bajo volumen para anuncios de lanzamiento de versiones nuevas, incluyendo anuncios de seguridad importantes.
-Te recomendamos suscribirte y actualizar tu instalación MediaWiki cada vez que se lance una nueva versión.',
-       'config-subscribe-noemail' => 'Ha intentado suscribirse a la lista de correo de anuncios de nuevos lanzamientos sin proporcionar una dirección de correo electrónico.
-Proporcione una dirección de correo electrónico si desea suscribirse a la lista de correo.',
-       'config-almost-done' => '¡Ya casi has terminado!
-Ahora puedes saltarte el resto de pasos e instalar el wiki con valores predeterminados.',
-       'config-optional-continue' => 'Hazme más preguntas.',
-       'config-optional-skip' => 'Ya estoy aburrido, sólo instala el wiki.',
-       'config-profile' => 'Perfil de derechos de usuario:',
-       'config-profile-wiki' => 'Wiki abierto',
-       'config-profile-no-anon' => 'Creación de cuenta requerida',
-       'config-profile-fishbowl' => 'Sólo editores autorizados',
-       'config-profile-private' => 'Wiki privado',
-       'config-profile-help' => "Los wikis funcionan mejor cuando dejas que los edite tanta gente como sea posible.
-En MediaWiki, es fácil revisar los cambios recientes y revertir los daños realizados por usuarios malintencionados o novatos.
-Sin embargo, muchos han encontrado que MediaWiki es útil para una amplia variedad de funciones, y a veces no es fácil convencer a todos de los beneficios de la forma wiki.
-Por lo tanto tienes la elección.
-
-Un '''{{int:config-profile-wiki}}''' permite que cualquiera pueda editar, sin siquiera iniciar sesión.
-Un wiki con '''{{int:config-profile-no-anon}}''' ofrece rendición de cuentas adicional, pero puede disuadir a colaboradores.
-
-El escenario '''{{int:config-profile-fishbowl}}''' permite editar a los usuarios autorizados, pero el público puede ver las páginas, incluyendo el historial.
-Un '''{{int:config-profile-private}}''' sólo permite ver páginas a los usuarios autorizados, el mismo grupo al que le está permitido editar.
-
-Configuraciones más complejas de derechos de usuario están disponibles después de la instalación, consulte [//www.mediawiki.org/wiki/Manual:User_rights esta entrada en el manual].", # Fuzzy
-       'config-license' => 'Copyright and licencia:',
-       'config-license-none' => 'Pie sin licencia',
-       'config-license-cc-by-sa' => 'Creative Commons Reconocimiento Compartir Igual',
-       'config-license-cc-by' => 'Creative Commons Reconocimiento',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Reconocimiento Compartir Igual no comercial',
-       'config-license-cc-0' => 'Creative Commons Zero (dominio público)',
-       'config-license-gfdl' => 'Licencia de documentación libre de GNU 1.3 o posterior',
-       'config-license-pd' => 'Dominio Público',
-       'config-license-cc-choose' => 'Selecciona una licencia personalizada de Creative Commons',
-       'config-license-help' => "Muchos wikis públicos ponen todas las contribuciones bajo una [http://freedomdefined.org/Definition licencia libre].
-Esto ayuda a crear un sentido de propiedad comunitaria y alienta la contribución a largo plazo.
-Esto no es generalmente necesario para un wiki privado o corporativo.
-
-Si desea poder utilizar texto de Wikipedia, y desea que Wikipedia pueda aceptar el texto copiado de tu wiki, debe elegir '''Creative Commons Reconocimiento Compartir Igual'''.
-
-Wikipedia utilizaba anteriormente la licencia de documentación libre de GNU (GFDL).
-La GFDL es una licencia válida, pero es difícil de entender.
-También es difícil reutilizar el contenido licenciado bajo la GFDL.",
-       'config-email-settings' => 'Configuración de correo electrónico',
-       'config-enable-email' => 'Activar el envío de correos electrónicos',
-       'config-enable-email-help' => 'Si quieres que el correo electrónico funcione, la [http://www.php.net/manual/en/mail.configuration.php configuración PHP de correo electrónico] debe ser la correcta.
-Si no quieres la funcionalidad de correo electrónico, puedes desactivarla aquí.',
-       'config-email-user' => 'Habilitar correo electrónico de usuario a usuario',
-       'config-email-user-help' => 'Permitir que todos los usuarios intercambien correos electrónicos si lo han activado en sus preferencias.',
-       'config-email-usertalk' => 'Activar notificaciones de páginas de discusión de usuarios',
-       'config-email-usertalk-help' => 'Permitir a los usuarios recibir notificaciones de cambios en la página de discusión de usuario, si lo han activado en sus preferencias.',
-       'config-email-watchlist' => 'Activar notificación de alteraciones a la páginas vigiladas',
-       'config-email-watchlist-help' => 'Permitir a los usuarios recibir notificaciones de cambios en la páginas que vigilan, si lo han activado en sus preferencias.',
-       'config-email-auth' => 'Activar autenticación del correo electrónico',
-       'config-email-auth-help' => "Si esta opción está habilitada, los usuarios tienen que confirmar su dirección de correo electrónico mediante un enlace que se les envía a ellos cuando éstos lo establecen o lo cambian.
-Solo las direcciones de correo electrónico autenticadas pueden recibir correos electrónicos de otros usuarios o correos electrónicos de notificación de cambios.
-Esta opción está '''recomendada''' para wikis públicos debido a posibles abusos de las características del correo electrónico.",
-       'config-email-sender' => 'Dirección de correo electrónico de retorno:',
-       'config-email-sender-help' => 'Introduce la dirección de correo electrónico que será usada como dirección de retorno en los mensajes electrónicos de salida.
-Aquí llegarán los correos electrónicos que no lleguen a su destino.
-Muchos servidores de correo electrónico exigen que por lo menos la parte del nombre del dominio sea válida.',
-       'config-upload-settings' => 'Cargas de imágenes y archivos',
-       'config-upload-enable' => 'Habilitar la subida de archivos',
-       'config-upload-help' => 'La carga de archivos expone potencialmente su servidor a riesgos de seguridad.
-Para obtener más información, lea la [//www.mediawiki.org/wiki/Manual:Security sección de seguridad] en el manual.
-
-Para habilitar la carga de archivos, cambie el modo en el subdirectorio <code>images</code> bajo el directorio raíz de MediaWiki para que el servidor web pueda escribir en él.
-A continuación, habilite esta opción.',
-       'config-upload-deleted' => '*Directorio para los archivos eliminados:',
-       'config-upload-deleted-help' => 'Elige un directorio en el que guardar los archivos eliminados.
-Lo ideal es una carpeta no accesible desde la red.',
-       'config-logo' => 'URL del logo :',
-       'config-logo-help' => 'La apariencia por defecto de MediaWiki incluye espacio para un logotipo de 135x160 píxeles encima del menú de la barra lateral.
-Cargue una imagen de tamaño adecuado e introduzca la dirección URL aquí.
-
-Si no desea un logotipo, deje esta casilla en blanco.', # Fuzzy
-       'config-instantcommons' => 'Habilitar Instant Commons',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] es una característica que permite que los wikis puedan utilizar imágenes, sonidos y otros archivos multimedia que se encuentran en el sitio [//commons.wikimedia.org/ Wikimedia Commons].
-Para ello, MediaWiki requiere acceso a Internet.
-
-Para obtener más información sobre esta función, incluidas las instrucciones sobre cómo configurarlo para otras wikis distintas de Wikimedia Commons, consulte [//mediawiki.org/wiki/Manual:$wgForeignFileRepos el manual].',
-       'config-cc-error' => 'El selector de licencia de Creative Commons no dio resultado.
-Escribe el nombre de la licencia manualmente.',
-       'config-cc-again' => 'Elegir otra vez...',
-       'config-cc-not-chosen' => 'Elige la licencia Creative Commons que desees y haz clic en "continuar".',
-       'config-advanced-settings' => 'Configuración avanzada',
-       'config-cache-options' => 'Configuración de la caché de objetos:',
-       'config-cache-help' => 'El almacenamiento en caché de objetos se utiliza para mejorar la velocidad de MediaWiki mediante el almacenamiento en caché los datos usados más frecuentemente.
-A los sitios medianos y grandes se les recomienda que permitirlo. También es beneficioso para los sitios pequeños.',
-       'config-cache-none' => 'Sin almacenamiento en caché (no se pierde ninguna funcionalidad, pero la velocidad puede resentirse en sitios grandes)',
-       'config-cache-accel' => 'Almacenamiento en caché de objetos PHP (APC, XCache o WinCache)',
-       'config-cache-memcached' => 'Utilizar Memcached (necesita ser instalado y configurado aparte)',
-       'config-memcached-servers' => 'Servidores Memcached:',
-       'config-memcached-help' => 'Lista de direcciones IP que serán usadas por Memcached.
-Deben especificarse una por cada línea y especificar el puerto a utilizar. Por ejemplo:
-127.0.0.1:11211
-192.168.1.25:1234',
-       'config-memcache-needservers' => 'Ha seleccionado Memcached como su tipo de caché pero no especificó ninguno de los servidores.',
-       'config-memcache-badip' => 'Ha introducido una dirección IP no válida para Memcached:  $1 .',
-       'config-memcache-noport' => 'No ha especificado un puerto a usar en el servidor Memcached:  $1 .
-Si no conoce el puerto, el valor predeterminado es 11211.',
-       'config-memcache-badport' => 'Los números de puerto de Memcached deben estar entre  $1  y  $2.',
-       'config-extensions' => 'Extensiones',
-       'config-extensions-help' => 'Se ha detectado en tu directorio <code>./extensions</code>  las extensiones listadas arriba.
-
-Puede que necesiten configuraciones adicionales, pero puedes habilitarlas ahora.',
-       'config-install-alreadydone' => "'''Aviso:''' Parece que ya habías instalado MediaWiki y estás intentando instalarlo nuevamente.
-Pasa a la próxima página, por favor.",
-       'config-install-begin' => 'Pulsando "{{int:config-continue}}", se iniciará la instalación de MediaWiki.
-Si todavía desea realizar algún cambio, pulse atrás.', # Fuzzy
-       'config-install-step-done' => 'hecho',
-       'config-install-step-failed' => 'falló',
-       'config-install-extensions' => 'Extensiones inclusive',
-       'config-install-database' => 'Configurando la base de datos',
-       'config-install-schema' => 'Creando el esquema',
-       'config-install-pg-schema-not-exist' => 'El esquema PostgreSQL no existe.',
-       'config-install-pg-schema-failed' => 'La creación de las tablas ha fallado.
-Asegúrate de que el usuario "$1" puede escribir en el esquema "$2".',
-       'config-install-pg-commit' => 'Validando los cambios',
-       'config-install-pg-plpgsql' => 'Comprobación de lenguaje PL/pgSQL',
-       'config-pg-no-plpgsql' => 'Necesita instalar el lenguaje PL/pgSQL en la base de datos $1',
-       'config-pg-no-create-privs' => 'La cuenta especificada para la instalación no tiene suficientes privilegios para crear una cuenta.',
-       'config-pg-not-in-role' => 'La cuenta especificada para el usuario web ya existe.
-La cuenta especificada para la instalación no es de un superusuario y no es miembro del grupo de usuarios con acceso a la web, por lo que es incapaz de crear objetos pertenecientes al usuario web.
-
-MediaWiki requiere actualmente que las tablas sean propiedad del usuario web. Especifique otro nombre de cuenta web, o haga clic en "atrás" y especifique un usuario de instalación con los privilegios convenientes.',
-       'config-install-user' => 'Creando el usuario de la base de datos',
-       'config-install-user-alreadyexists' => 'El usuario "$1" ya existe',
-       'config-install-user-create-failed' => 'La creación del usuario "$1" falló:  $2',
-       'config-install-user-grant-failed' => 'La concesión de permisos para el usuario "$1" ha fallado: $2',
-       'config-install-user-missing' => 'El usuario especificado "$1" no existe.',
-       'config-install-user-missing-create' => 'El usuario especificado "$1" no existe.
-Por favor, haga clic en la casilla "Crear cuenta" que aparece a continuación si desea crearlo.',
-       'config-install-tables' => 'Creando tablas',
-       'config-install-tables-exist' => "'''Advertencia''': Al parecer, las tablas de MediaWiki ya existen. Saltándose su creación.",
-       'config-install-tables-failed' => "'''Error''': La creación de las tablas falló con el siguiente error: $1",
-       'config-install-interwiki' => 'Llenando la tabla interwiki predeterminada',
-       'config-install-interwiki-list' => 'No se pudo encontrar el archivo <code>interwiki.list</code>.',
-       'config-install-interwiki-exists' => "'''Advertencia''': La tabla de interwikis parece ya contener entradas.
-Se omitirá la lista predeterminada.",
-       'config-install-stats' => 'Iniciando las estadísticas',
-       'config-install-keys' => 'Generación de claves secretas',
-       'config-insecure-keys' => "''' Atención:'' '  {{PLURAL:$2|Una clave de seguridad generada|Las claves de seguridad generadas}} ($1) durante la instalación no  {{PLURAL:$2|es totalmente segura|son totalmente seguras}}. Considere {{PLURAL:$2| cambiarla|cambiarlas}} manualmente.",
-       'config-install-sysop' => 'Creando cuenta de usuario del administrador',
-       'config-install-subscribe-fail' => 'No se ha podido suscribir a mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'cURL no está instalado y allow_url_fopen no está disponible.',
-       'config-install-mainpage' => 'Creando página principal con contenido predeterminado',
-       'config-install-extension-tables' => 'Creando las tablas para las extensiones habilitadas',
-       'config-install-mainpage-failed' => 'No se pudo insertar la página principal: $1',
-       'config-install-done' => "''' Felicidades!'''
-Ha instalado MediaWiki correctamente.
-
-El instalador ha generado un  archivo<code>LocalSettings.php</code>.
-Contiene toda su configuración.
-
-Deberá descargarlo y ponerlo en la base de la instalación de wiki (el mismo directorio que index.php). Debería haber comenzado automáticamente la descarga.
-
-Si no comenzó la descarga, o si se ha cancelado, puede reiniciar la descarga haciendo clic en el enlace siguiente:
-$3
-
-'''Nota''': Si no haces esto ahora, este archivo de configuración generado no estará disponible para usted más tarde si sale de la instalación sin descargarlo.
-
-Cuando lo haya hecho, usted puede '''[$2  entrar en su wiki]'''.",
-       'config-download-localsettings' => 'Descargar archivo <code>LocalSettings.php</code>',
-       'config-help' => 'Ayuda',
-       'config-nofile' => 'El archivo "$1" no se pudo encontrar. ¿Se ha eliminado?',
-       'mainpagetext' => "'''MediaWiki ha sido instalado con éxito.'''",
-       'mainpagedocfooter' => 'Consulta la [//meta.wikimedia.org/wiki/Ayuda:Guía del usuario de contenidos] para obtener información sobre el uso del software wiki.
-
-== Empezando ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de ajustes de configuración]
-* [//www.mediawiki.org/wiki/Manual:FAQ/es FAQ de MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Regionalizar MediaWiki para tu idioma]',
-);
-
-/** español (formal) (español (formal))
- * @author Dferg
- */
-$messages['es-formal'] = array(
-       'mainpagedocfooter' => 'Consulte usted la [//meta.wikimedia.org/wiki/Ayuda:Contenido Guía de usuario] para obtener información sobre el uso del software wiki.
-
-== Empezando ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de ajustes de configuración]
-* [//www.mediawiki.org/wiki/Manual:FAQ/es FAQ de MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]', # Fuzzy
-);
-
-/** Estonian (eesti)
- * @author Avjoska
- * @author Pikne
- */
-$messages['et'] = array(
-       'config-information' => 'Teave',
-       'config-session-error' => 'Tõrge seansi alustamisel: $1',
-       'config-your-language' => 'Oma keel:',
-       'config-wiki-language' => 'Viki keel:',
-       'config-back' => '← Tagasi',
-       'config-continue' => 'Jätka →',
-       'config-page-language' => 'Keel',
-       'config-page-welcome' => 'Tere tulemast MediaWikisse!',
-       'config-page-dbconnect' => 'Andmebaasiga ühendamine',
-       'config-page-upgrade' => 'Olemasoleva installi uuendus',
-       'config-page-dbsettings' => 'Andmebaasi sätted',
-       'config-page-name' => 'Nimi',
-       'config-page-options' => 'Seaded',
-       'config-page-install' => 'Paigaldamine',
-       'config-page-complete' => 'Valmis!',
-       'config-page-restart' => 'Alusta installimist uuesti',
-       'config-page-readme' => 'Loe mind',
-       'config-page-copying' => 'Kopeerimine',
-       'config-page-upgradedoc' => 'Uuendamine',
-       'config-page-existingwiki' => 'Olemasolev viki',
-       'config-restart' => 'Jah, tee taaskäivitus',
-       'config-db-name' => 'Andmebaasi nimi:',
-       'config-db-username' => 'Andmebaasi kasutajanimi:',
-       'config-db-password' => 'Andmebaasi parool:',
-       'config-db-port' => 'Andmebaasi port:',
-       'config-invalid-db-type' => 'Vigane andmebaasi tüüp',
-       'config-site-name' => 'Viki nimi:',
-       'config-site-name-blank' => 'Sisestage lehekülje nimi.',
-       'config-project-namespace' => 'Projekti nimeruum:',
-       'config-ns-generic' => 'Projekt',
-       'config-admin-box' => 'Administraatorikonto',
-       'config-admin-name' => 'Sinu nimi:',
-       'config-admin-password' => 'Parool:',
-       'config-admin-password-confirm' => 'Parool uuesti:',
-       'config-admin-name-blank' => 'Sisesta administraatori kasutajanimi.',
-       'config-admin-password-blank' => 'Sisesta administraatorikonto parool.',
-       'config-admin-password-same' => 'Parool ei tohi kattuda kasutajanimega.',
-       'config-admin-password-mismatch' => 'Sisestatud kaks parooli ei lange kokku.',
-       'config-admin-email' => 'E-posti aadress:',
-       'config-admin-error-bademail' => 'Sisestasid vigase e-posti aadressi.',
-       'config-optional-continue' => 'Küsi minult veel küsimusi.',
-       'config-profile-private' => 'Eraviki',
-       'config-license' => 'Autoriõigus ja litsents:',
-       'config-license-none' => 'Litsentsijaluseta',
-       'config-license-cc-by-sa' => 'Creative Commonsi litsents "Autorile viitamine + jagamine samadel tingimustel"',
-       'config-license-cc-by' => 'Creative Commonsi litsents "Autorile viitamine"',
-       'config-license-cc-by-nc-sa' => 'Creative Commonsi litsents "Autorile viitamine + mitteäriline eesmärk + jagamine samadel tingimustel"',
-       'config-email-settings' => 'E-posti sätted',
-       'config-email-sender' => 'Saatja e-aadress:',
-       'config-logo' => 'Logo internetiaadress:',
-       'config-cc-again' => 'Vali uuesti...',
-       'config-extensions' => 'Lisad',
-       'config-install-step-done' => 'valmis',
-       'config-install-step-failed' => 'ebaõnnestus',
-       'config-install-user-alreadyexists' => 'Kasutaja "$1" on juba olemas',
-       'config-install-tables' => 'Tabelite loomine',
-       'config-help' => 'abi',
-       'mainpagetext' => "'''MediaWiki tarkvara on edukalt paigaldatud.'''",
-       'mainpagedocfooter' => 'Vikitarkvara kasutamise kohta leiad lisateavet [//meta.wikimedia.org/wiki/Help:Contents juhendist].
-
-== Alustamine ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Häälestussätete loend]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki KKK]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki versiooniuuenduste postiloend]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki lokaliseerimine]',
-);
-
-/** Basque (euskara)
- * @author An13sa
- * @author පසිඳු කාවින්ද
- */
-$messages['eu'] = array(
-       'config-desc' => 'MediaWiki instalatzailea',
-       'config-title' => 'MediaWiki $1 instalazioa',
-       'config-information' => 'Informazioa',
-       'config-session-error' => 'Saio hasierako errorea: $1',
-       'config-your-language' => 'Zure hizkuntza:',
-       'config-your-language-help' => 'Aukeratu instalazio prozesuan erabiliko den hizkuntza',
-       'config-wiki-language' => 'Wiki hizkuntza:',
-       'config-back' => '← Atzera',
-       'config-continue' => 'Jarraitu →',
-       'config-page-language' => 'Hizkuntza',
-       'config-page-welcome' => 'Ongi etorri MediaWikira!',
-       'config-page-dbconnect' => 'Datu-basera konektatu',
-       'config-page-dbsettings' => 'Datu-basearen ezarpenak',
-       'config-page-name' => 'Izena',
-       'config-page-options' => 'Aukerak',
-       'config-page-install' => 'Instalatu',
-       'config-page-complete' => 'Bukatua!',
-       'config-page-restart' => 'Instalazioa berriz hasi',
-       'config-page-readme' => 'Irakur nazazu',
-       'config-page-copying' => 'Kopiatzea',
-       'config-page-upgradedoc' => 'Eguneratu',
-       'config-restart' => 'Bai, berriz hasi',
-       'config-sidebar' => '* [//www.mediawiki.org MediaWiki nagusia]
-* [//www.mediawiki.org/wiki/Help:Contents Erabiltzaileentzako Gida]
-* [//www.mediawiki.org/wiki/Manual:Contents Administratzaileentzako Gida]
-* [//www.mediawiki.org/wiki/Manual:FAQ MEG]
-----
-* <doclink href=Readme>Irakur nazazu</doclink>
-* <doclink href=ReleaseNotes>Oharren argitalpena</doclink>
-* <doclink href=Copying>Kopiaketa</doclink>
-* <doclink href=UpgradeDoc>Eguneratzea</doclink>',
-       'config-env-php' => 'PHP $1 instalatuta dago.',
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] instalatuta dago',
-       'config-apc' => '[http://www.php.net/apc APC] instalatuta dago',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] instalatuta dago',
-       'config-diff3-bad' => 'GNU diff3 ez da aurkitu.',
-       'config-db-type' => 'Datu-base mota:',
-       'config-db-wiki-settings' => 'Wiki hau identifikatu',
-       'config-db-name' => 'Datu-base izena:',
-       'config-db-username' => 'Datu-base lankide izena:',
-       'config-db-password' => 'Datu-base pasahitza:',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 bitarra',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-header-mysql' => 'MySQL hobespenak',
-       'config-header-postgres' => 'PostgreSQL hobespenak',
-       'config-header-sqlite' => 'SQLite hobespenak',
-       'config-header-oracle' => 'Oracle hobespenak',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-binary' => 'Bitarra',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Wikiaren izena:',
-       'config-project-namespace' => 'Proiektuaren izen-tartea:',
-       'config-ns-generic' => 'Proiektua',
-       'config-ns-other' => 'Bestelakoa (zehaztu)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-admin-box' => 'Administratzaile kontua',
-       'config-admin-name' => 'Zure izena:',
-       'config-admin-password' => 'Pasahitza:',
-       'config-admin-password-confirm' => 'Pasahitza berriz:',
-       'config-admin-email' => 'E-posta helbidea:',
-       'config-profile-wiki' => 'Wiki tradizionala', # Fuzzy
-       'config-profile-private' => 'Wiki pribatua',
-       'config-license' => 'Copyright eta lizentzia:',
-       'config-license-pd' => 'Domeinu Askea',
-       'config-email-settings' => 'E-posta hobespenak',
-       'config-logo' => 'Logo URL:',
-       'config-extensions' => 'Luzapenak',
-       'config-install-step-done' => 'egina',
-       'config-help' => 'Laguntza',
-       'mainpagetext' => "'''MediaWiki arrakastaz instalatu da.'''",
-       'mainpagedocfooter' => 'Ikus [//meta.wikimedia.org/wiki/Help:Contents Erabiltzaile Gida] wiki softwarea erabiltzen hasteko informazio gehiagorako.
-
-== Nola hasi ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfigurazio balioen zerrenda]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ (Maiz egindako galderak)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWikiren argitalpenen posta zerrenda]', # Fuzzy
-);
-
-/** Extremaduran (estremeñu)
- */
-$messages['ext'] = array(
-       'mainpagetext' => "'''MeyaGüiqui s'á istalau satihatoriamenti.'''",
-       'mainpagedocfooter' => "Consurta la [//meta.wikimedia.org/wiki/Help:Contents User's Guide] pa sabel mas al tentu el huncionamientu el software güiqui.
-
-== Esminciandu ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Persian (فارسی)
- * @author Mjbmr
- */
-$messages['fa'] = array(
-       'config-desc' => 'نصب کنندهٔ ویکی‌مدیا',
-       'config-title' => 'نصب ویکی‌مدیا $1',
-       'config-information' => 'اطلاعات',
-       'config-localsettings-key' => 'کلید ارتقا:',
-       'config-your-language' => 'زبان شما:',
-       'config-wiki-language' => 'زبان ویکی:',
-       'config-back' => '→ بازگشت',
-       'config-continue' => 'ادامه ←',
-       'config-page-language' => 'زبان',
-       'config-page-welcome' => 'به مدیاویکی خوش آمدید!',
-       'config-page-dbconnect' => 'اتصال به پایگاه داده',
-       'config-page-name' => 'نام',
-       'config-page-options' => 'گزینه‌ها',
-       'config-page-install' => 'نصب',
-       'config-page-complete' => 'کامل!',
-       'config-page-readme' => 'مرا بخوان',
-       'config-page-releasenotes' => 'یادداشت‌های انتشار',
-       'config-page-copying' => 'تکثیر',
-       'config-page-upgradedoc' => 'ارتقا',
-       'config-page-existingwiki' => 'ویکی موجود',
-       'config-restart' => 'بله ، آن دوباره راه اندازی کن',
-       'config-sidebar' => '* [//www.mediawiki.org صفحهٔ اصلی مدیاویکی]
-* [//www.mediawiki.org/wiki/Help:Contents راهنمای کاربر]
-* [//www.mediawiki.org/wiki/Manual:Contents راهنمای مدیر]
-* [//www.mediawiki.org/wiki/Manual:FAQ پرسش‌های رایج]
-----
-* <doclink href=Readme>مرا بخوان</doclink>
-* <doclink href=ReleaseNotes>یادداشت‌های انتشار</doclink>
-* <doclink href=Copying>نسخه برداری</doclink>
-* <doclink href=UpgradeDoc>ارتقا</doclink>',
-       'config-env-php' => 'پی‌اچ‌پی $1 نصب شده است.',
-       'config-env-php-toolow' => 'پی‌اچ‌پی $1 نصب شده است.
-در هر صورت، مدیاویکی نیاز به پی‌اچ‌پی نسخهٔ $2 یا بالاتر دارد.',
-       'config-db-type' => 'نوع پایگاه اطلاعات:',
-       'config-db-host' => 'میزبان پایگاه اطلاعات:',
-       'config-db-username' => 'نام کاربری پایگاه اطلاعات:',
-       'config-db-password' => 'کلمه عبور پایگاه اطلاعات:',
-       'config-mysql-old' => 'مای‌اس‌کیو‌ال نسخهٔ $1 و یا بالاتر نیاز است، شما نسخهٔ $2 را دارید.',
-       'config-db-port' => 'درگاه پایگاه‌داده:',
-       'config-header-mysql' => 'تنظیمات مای‌اس‌کیو‌ال',
-       'config-connection-error' => '$1.
-
-میزبان، نام کاربری و گذرواژه را بررسی کنید و دوباره امتحان کنید.',
-       'config-mysql-binary' => 'دودویی',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'نام ویکی:',
-       'config-site-name-blank' => 'نام تارنما را وارد کنید.',
-       'config-project-namespace' => 'فضای نام پروژه:',
-       'config-ns-generic' => 'پروژه',
-       'config-ns-other-default' => 'ویکی‌من',
-       'config-admin-box' => 'حساب مدیر سیستم',
-       'config-admin-name' => 'نام شما:',
-       'config-admin-password' => 'کلمه عبور:',
-       'config-admin-password-confirm' => 'دوباره کلمه عبور:',
-       'config-admin-email' => 'پست الکترونیکی شما:',
-       'config-profile-private' => 'ویکی خصوصی',
-       'config-license' => 'حق تکثیر و مجوز:',
-       'config-license-none' => 'بدون پاورقی مجوز',
-       'config-license-pd' => 'دامنه عمومی',
-       'config-license-cc-choose' => 'انتخاب یک مجوز سفارشی عوام خلاق',
-       'config-email-settings' => 'تنظیمات پست الکترونیکی',
-       'config-upload-enable' => 'فعال سازی بارگذاری پرونده',
-       'config-logo' => 'نشانی نامواره:',
-       'config-extensions' => 'افزونه‌ها',
-       'config-install-step-done' => 'انجام شد',
-       'config-install-step-failed' => 'ناموفق بود',
-       'config-help' => 'راهنما',
-       'mainpagetext' => "'''نرم‌افزار ویکی با موفقیت نصب شد.'''",
-       'mainpagedocfooter' => 'از [//meta.wikimedia.org/wiki/Help:Contents راهنمای کاربران]
-برای استفاده از نرم‌افزار ویکی کمک بگیرید.
-
-== آغاز به کار ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings تنظیم پیکربندی]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki پرسش‌های متداول]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce فهرست پست الکترونیکی نسخه‌های مدیاویکی]', # Fuzzy
-);
-
-/** Finnish (suomi)
- * @author Beluga
- * @author Centerlink
- * @author Crt
- * @author Nike
- * @author Olli
- * @author Silvonen
- * @author Str4nd
- * @author VezonThunder
- * @author 아라
- */
-$messages['fi'] = array(
-       'config-desc' => 'MediaWiki-asennin',
-       'config-title' => 'MediaWikin version $1 asennus',
-       'config-information' => 'Tiedot',
-       'config-localsettings-upgrade' => '<code>LocalSettings.php</code>-tiedosto havaittiin.
-Kirjoita muuttujan <code>$wgUpgradeKey</code> arvo alla olevaan kenttään päivittääksesi asennuksen.
-Löydät sen <code>LocalSettings.php</code>-tiedostosta.',
-       'config-localsettings-cli-upgrade' => '<code>LocalSettings.php</code>-tiedosto havaittiin.
-Päivitä asennus suorittamalla <code>update.php</code>.',
-       'config-localsettings-key' => 'Päivitysavain',
-       'config-localsettings-badkey' => 'Antamasi avain on virheellinen.',
-       'config-upgrade-key-missing' => 'Havaittiin aiempi MediaWiki-asennus.
-Päivittääksesi tämän asennuksen lisää <code>LocalSettings.php</code>-tiedostosi loppuun seuraava rivi:
-
-$1',
-       'config-localsettings-incomplete' => 'Nykyinen <code>LocalSettings.php</code>-tiedosto näyttää olevan puutteellinen.
-Muuttujaa $1 ei ole asetettu.
-Muuta <code>LocalSettings.php</code>-tiedostoa siten, että muuttuja on asetettu ja napsauta »{{int:Config-continue}}».',
-       'config-localsettings-connection-error' => 'Virhe yhdistettäessä tietokantaan käyttäen tiedostossa <code>LocalSettings.php</code> tai <code>AdminSettings.php</code> määritettyjä asetuksia. Korjaa asetukset ja yritä uudelleen.
-
-$1',
-       'config-session-error' => 'Istunnon aloittaminen epäonnistui: $1',
-       'config-session-expired' => 'Istuntotietosi näyttävät olevan vanhentuneita.
-Istuntojen elinajaksi on määritelty $1.
-Voit muuttaa tätä asetusta vaihtamalla kohtaa <code>session.gc_maxlifetime</code> php.ini-tiedostossa.
-Käynnistä asennusprosessi uudelleen.',
-       'config-no-session' => 'Istuntosi tiedot menetettiin!
-Tarkista php.ini-tiedostosi ja varmista, että <code>session.save_path</code> on asetettu sopivaan kansioon.',
-       'config-your-language' => 'Asennuksen kieli',
-       'config-your-language-help' => 'Valitse kieli, jota haluat käyttää asennuksen ajan.',
-       'config-wiki-language' => 'Wikin kieli',
-       'config-wiki-language-help' => 'Valitse kieli, jota wikissä tullaan etupäässä käyttämään.',
-       'config-back' => '← Takaisin',
-       'config-continue' => 'Jatka →',
-       'config-page-language' => 'Kieli',
-       'config-page-welcome' => 'Tervetuloa MediaWikiin!',
-       'config-page-dbconnect' => 'Tietokantaan yhdistäminen',
-       'config-page-upgrade' => 'Olemassa olevan asennuksen päivitys',
-       'config-page-dbsettings' => 'Tietokannan asetukset',
-       'config-page-name' => 'Nimi',
-       'config-page-options' => 'Asetukset',
-       'config-page-install' => 'Asenna',
-       'config-page-complete' => 'Valmis!',
-       'config-page-restart' => 'Aloita asennus alusta',
-       'config-page-readme' => 'Lue minut',
-       'config-page-releasenotes' => 'Julkaisutiedot',
-       'config-page-copying' => 'Kopiointi',
-       'config-page-upgradedoc' => 'Päivittäminen',
-       'config-page-existingwiki' => 'Aikaisempi asennus',
-       'config-help-restart' => 'Haluatko poistaa kaikki annetut tiedot ja aloittaa asennuksen alusta?',
-       'config-restart' => 'Kyllä',
-       'config-welcome' => '=== Ympäristön tarkistukset ===
-Varmistetaan MediaWikin asennettavuus tähän ympäristöön.
-Sinun pitäisi antaa näiden tarkistusten tulokset, jos tarvitset apua asennuksen aikana.',
-       'config-sidebar' => '* [//www.mediawiki.org MediaWikin kotisivu]
-* [//www.mediawiki.org/wiki/Help:Contents Käyttöopas]
-* [//www.mediawiki.org/wiki/Manual:Contents Hallintaopas]
-* [//www.mediawiki.org/wiki/Manual:FAQ UKK]
-----
-* <doclink href=Readme>Lue minut</doclink>
-* <doclink href=ReleaseNotes>Julkaisutiedot</doclink>
-* <doclink href=Copying>Kopiointi</doclink>
-* <doclink href=UpgradeDoc>Päivittäminen</doclink>',
-       'config-env-good' => 'Asennusympäristö on tarkastettu.
-Voit asentaa MediaWikin.',
-       'config-env-bad' => 'Asennusympäristö on tarkastettu.
-Et voi asentaa MediaWikiä.',
-       'config-env-php' => 'PHP $1 on asennettu.',
-       'config-env-php-toolow' => 'PHP $1 on asennettu.
-MediaWiki vaatii PHP:n version $2 tai uudemman.',
-       'config-no-db' => 'Sopivaa tietokanta-ajuria ei löytynyt! Sinun täytyy asentaa tietokanta-ajurit PHP:lle.
-Seuraavat tietokantatyypit ovat tuettuja: $1.', # Fuzzy
-       'config-safe-mode' => "'''Varoitus:''' PHP:n [http://www.php.net/features.safe-mode safe mode] -tila on aktiivinen.
-Se voi aiheuttaa ongelmia erityisesti tiedostojen tallentamisen ja matemaattisten kaavojen kanssa.",
-       'config-pcre' => 'PCRE-tukimoduuli puuttuu.
-MediaWiki vaatii toimiakseen Perl-yhteensopivat säännölliset lausekkeet.',
-       'config-memory-bad' => "'''Varoitus:''' PHP:n <code>memory_limit</code> on $1.
-Tämä on luultavasti liian alhainen.
-Asennus saattaa epäonnistua!",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] on asennettu',
-       'config-apc' => '[http://www.php.net/apc APC] on asennettu.',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] on asennettu',
-       'config-diff3-bad' => 'GNU diff3:a ei löytynyt.',
-       'config-db-type' => 'Tietokannan tyyppi',
-       'config-db-host' => 'Tietokantapalvelin',
-       'config-db-name' => 'Tietokannan nimi',
-       'config-db-username' => 'Tietokannan käyttäjätunnus',
-       'config-db-password' => 'Tietokannan salasana',
-       'config-db-install-help' => 'Anna käyttäjätunnus ja salasana, joita käytetään asennuksen aikana.',
-       'config-db-account-lock' => 'Käytä samaa tunnusta ja salasanaa myös asennuksen jälkeen',
-       'config-db-prefix' => 'Tietokantataulujen etuliite',
-       'config-db-charset' => 'Tietokannan merkistö',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0, binääri',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0, UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0, taaksepäin yhteensopiva UTF-8',
-       'config-mysql-old' => 'MediaWiki tarvitsee MySQL:n version $1 tai uudemman. Nykyinen versio on $2.',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-header-mysql' => 'MySQL-asetukset',
-       'config-header-postgres' => 'PostgreSQL-asetukset',
-       'config-header-sqlite' => 'SQLite-asetukset',
-       'config-header-oracle' => 'Oracle-asetukset',
-       'config-invalid-db-type' => 'Virheellinen tietokantatyyppi',
-       'config-missing-db-name' => 'Kenttä »Tietokannan nimi» on pakollinen',
-       'config-invalid-db-name' => '”$1” ei kelpaa tietokannan nimeksi.
-Käytä ainoastaan kirjaimia (a-z, A-Z), numeroita (0-9), alaviivoja (_) ja tavuviivoja (-).',
-       'config-invalid-db-prefix' => '”$1” ei kelpaa tietokannan etuliitteeksi.
-Käytä ainoastaan kirjaimia (a-z, A-Z), numeroita (0-9), alaviivoja (_) ja tavuviivoja (-).',
-       'config-postgres-old' => 'MediaWiki tarvitsee PostgreSQL:n version $1 tai uudemman. Nykyinen versio on $2.',
-       'config-sqlite-name-help' => 'Valitse nimi, joka yksilöi tämän wikin.
-Älä käytä välilyöntejä tai viivoja.
-Nimeä käytetään SQLite-tietokannan tiedostonimessä.',
-       'config-sqlite-dir-unwritable' => 'Hakemistoon ”$1” kirjoittaminen epäonnistui.
-Muuta hakemiston käyttöoikeuksia siten, että palvelinohjelmisto voi kirjoittaa siihen ja yritä uudelleen.',
-       'config-sqlite-readonly' => 'Tiedostoon <code>$1</code> ei voi kirjoittaa.',
-       'config-sqlite-fts3-downgrade' => 'PHP:stä puuttuu FTS3-tuki. Poistetaan ominaisuus käytöstä tietokantatauluista.',
-       'config-upgrade-done' => "Päivitys valmis.
-
-Voit [$1 aloittaa wikin käytön].
-
-Napsauta alla olevaa painiketta, jos haluat luoda uudelleen <code>LocalSettings.php</code>-tiedoston.
-Tämä '''ei ole suositeltavaa''', jos wikissäsi ei ole ongelmia.",
-       'config-upgrade-done-no-regenerate' => 'Päivitys valmis.
-
-Voit [$1 aloittaa wikin käytön].',
-       'config-regenerate' => 'Luo LocalSettings.php uudelleen →',
-       'config-show-table-status' => 'Kysely <code>SHOW TABLE STATUS</code> epäonnistui!',
-       'config-mysql-engine' => 'Tallennusmoottori',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-binary' => 'Binääri',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Wikin nimi',
-       'config-site-name-blank' => 'Kirjoita sivuston nimi.',
-       'config-project-namespace' => 'Projektinimiavaruus',
-       'config-ns-generic' => 'Projekti',
-       'config-ns-site-name' => 'Sama kuin wikin nimi: $1',
-       'config-ns-other' => 'Muu (määritä)',
-       'config-admin-name' => 'Nimesi',
-       'config-admin-password' => 'Salasana',
-       'config-admin-password-confirm' => 'Salasana uudelleen',
-       'config-admin-name-blank' => 'Anna ylläpitäjän käyttäjänimi.',
-       'config-admin-email' => 'Sähköpostiosoite',
-       'config-admin-error-bademail' => 'Annoit virheellisen sähköpostiosoitteen.',
-       'config-almost-done' => 'Olet jo lähes valmis!
-Voit ohittaa jäljellä olevat määritykset ja asentaa wikin juuri nyt.',
-       'config-profile-wiki' => 'Avoin wiki',
-       'config-profile-no-anon' => 'Tunnuksen luonti vaaditaan',
-       'config-profile-private' => 'Yksityinen wiki',
-       'config-license' => 'Tekijänoikeus ja lisenssi:',
-       'config-license-pd' => 'Public domain',
-       'config-email-settings' => 'Sähköpostiasetukset',
-       'config-logo' => 'Logon URL-osoite',
-       'config-cc-again' => 'Valitse uudelleen...',
-       'config-extensions' => 'Laajennukset',
-       'config-install-step-done' => 'valmis',
-       'config-install-step-failed' => 'epäonnistui',
-       'config-install-user-alreadyexists' => 'Käyttäjä $1 on jo olemassa',
-       'config-install-interwiki-list' => 'Tiedostoa <code>interwiki.list</code> ei voitu lukea.',
-       'config-download-localsettings' => 'Lataa <code>LocalSettings.php</code>',
-       'config-help' => 'ohje',
-       'mainpagetext' => "'''MediaWiki on onnistuneesti asennettu.'''",
-       'mainpagedocfooter' => "Lisätietoja käytöstä on sivulla [//meta.wikimedia.org/wiki/Help:Contents User's Guide].
-
-=== Lisäohjeita ===
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Asetusten teko-ohjeita]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWikin FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Sähköpostilista, jolla tiedotetaan MediaWikin uusista versioista]
-
-=== Asetukset ===
-
-Tarkista, että alla olevat taivutusmuodot ovat oikein. Jos eivät, tee tarvittavat muutokset tiedostoon LocalSettings.php seuraavasti:
- \$wgGrammarForms['fi']['genitive']['{{SITENAME}}'] = '...';
- \$wgGrammarForms['fi']['partitive']['{{SITENAME}}'] = '...';
- \$wgGrammarForms['fi']['elative']['{{SITENAME}}'] = '...';
- \$wgGrammarForms['fi']['inessive']['{{SITENAME}}'] = '...';
- \$wgGrammarForms['fi']['illative']['{{SITENAME}}'] = '...';
-Taivutusmuodot: {{GRAMMAR:genitive|{{SITENAME}}}} (yön) – {{GRAMMAR:partitive|{{SITENAME}}}} (yötä) – {{GRAMMAR:elative|{{SITENAME}}}} (yöstä) – {{GRAMMAR:inessive|{{SITENAME}}}} (yössä) – {{GRAMMAR:illative|{{SITENAME}}}} (yöhön).",
-);
-
-/** Faroese (føroyskt)
- */
-$messages['fo'] = array(
-       'mainpagetext' => "'''Innlegging av Wiki-ritbúnaði væleydnað.'''",
-);
-
-/** French (français)
- * @author Aadri
- * @author Crochet.david
- * @author Gomoko
- * @author Grondin
- * @author Guillom
- * @author Hashar
- * @author IAlex
- * @author Jean-Frédéric
- * @author McDutchie
- * @author Peter17
- * @author Reedy
- * @author Sherbrooke
- * @author Urhixidur
- * @author Verdy p
- * @author Wyz
- * @author Yumeki
- * @author 아라
- */
-$messages['fr'] = array(
-       'config-desc' => 'Le programme d’installation de MediaWiki',
-       'config-title' => 'Installation de MediaWiki $1',
-       'config-information' => 'Informations',
-       'config-localsettings-upgrade' => 'Un fichier <code>LocalSettings.php</code> a été détecté.
-Pour mettre à jour cette installation, veuillez saisir la valeur de <code>$wgUpgradeKey</code> dans le champ ci-dessous.
-Vous la trouverez dans <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Un fichier <code>LocalSettings.php</code> a été détecté.
-Pour mettre à niveau cette installation, veuillez exécuter <code>update.php</code>',
-       'config-localsettings-key' => 'Clé de mise à jour :',
-       'config-localsettings-badkey' => 'La clé que vous avez fournie est incorrecte',
-       'config-upgrade-key-missing' => 'Une installation existante de MediaWiki a été détectée.
-
-Pour mettre à jour cette installation, veuillez ajouter la ligne suivante à la fin de votre fichier <code>LocalSettings.php</code>
-
-$1',
-       'config-localsettings-incomplete' => 'Le fichier <code>LocalSettings.php</code> existant semble être incomplet.
-La variable $1 n’est pas définie.
-Veuillez modifier <code>LocalSettings.php</code> de sorte que cette variable soit définie, puis cliquer sur « {{int:Config-continue}} ».',
-       'config-localsettings-connection-error' => 'Une erreur est survenue lors de la connexion à la base de données en utilisant la configuration spécifiée dans <code>LocalSettings.php</code> ou <code>AdminSettings.php</code>. Veuillez corriger cette configuration puis réessayer.
-
-$1',
-       'config-session-error' => 'Erreur lors du démarrage de la session : $1',
-       'config-session-expired' => "↓Les données de votre session semblent avoir expiré.
-Les sessions sont configurées pour une durée de $1.
-Vous pouvez l'augmenter en configurant <code>session.gc_maxlifetime</code> dans le fichier php.ini.
-Redémarrer le processus d'installation.",
-       'config-no-session' => 'Les données de votre session ont été perdues !
-Vérifiez votre fichier php.ini et assurez-vous que <code>session.save_path</code> contient le chemin d’un répertoire approprié.',
-       'config-your-language' => 'Votre langue :',
-       'config-your-language-help' => "Sélectionnez la langue à utiliser pendant le processus d'installation.",
-       'config-wiki-language' => 'Langue du wiki :',
-       'config-wiki-language-help' => 'Sélectionner la langue dans laquelle le wiki sera principalement écrit.',
-       'config-back' => '← Retour',
-       'config-continue' => 'Continuer →',
-       'config-page-language' => 'Langue',
-       'config-page-welcome' => 'Bienvenue sur MediaWiki !',
-       'config-page-dbconnect' => 'Se connecter à la base de données',
-       'config-page-upgrade' => 'Mettre à jour l’installation existante',
-       'config-page-dbsettings' => 'Paramètres de la base de données',
-       'config-page-name' => 'Nom',
-       'config-page-options' => 'Options',
-       'config-page-install' => 'Installer',
-       'config-page-complete' => 'Terminé !',
-       'config-page-restart' => 'Redémarrer l’installation',
-       'config-page-readme' => 'Lisez-moi',
-       'config-page-releasenotes' => 'Notes de version',
-       'config-page-copying' => 'Copie',
-       'config-page-upgradedoc' => 'Mise à jour',
-       'config-page-existingwiki' => 'Wiki existant',
-       'config-help-restart' => "Voulez-vous effacer toutes les données enregistrées que vous avez entrées et relancer le processus d'installation ?",
-       'config-restart' => 'Oui, le relancer',
-       'config-welcome' => '=== Vérifications liées à l’environnement ===
-Des vérifications de base vont maintenant être effectuées pour voir si cet environnement est adapté à l’installation de MediaWiki.
-Rappelez-vous d’inclure ces informations si vous recherchez de l’aide sur la manière de terminer l’installation.',
-       'config-copyright' => "=== Droit d'auteur et conditions ===
-
-$1
-
-Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation (version 2 de la Licence, ou, à votre choix, toute version ultérieure).
-
-Ce programme est distribué dans l’espoir qu’il sera utile, mais '''sans aucune garantie''' : sans même les garanties implicites de '''commerciabilité''' ou d’'''adéquation à un usage particulier'''.
-Voir la Licence Publique Générale GNU pour plus de détails.
-
-Vous devriez avoir reçu <doclink href=Copying>une copie de la Licence Publique Générale GNU</doclink> avec ce programme ; dans le cas contraire, écrivez à la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ou [http://www.gnu.org/copyleft/gpl.html lisez-le en ligne].",
-       'config-sidebar' => '* [//www.mediawiki.org Accueil MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents Guide de l’utilisateur]
-* [//www.mediawiki.org/wiki/Manual:Contents Guide de l’administrateur]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]
-----
-* <doclink href=Readme>Lisez-moi</doclink>
-* <doclink href=ReleaseNotes>Notes de publication</doclink>
-* <doclink href=Copying>Copie</doclink>
-* <doclink href=UpgradeDoc>Mise à jour</doclink>',
-       'config-env-good' => 'L’environnement a été vérifié.
-Vous pouvez installer MediaWiki.',
-       'config-env-bad' => 'L’environnement a été vérifié.
-Vous ne pouvez pas installer MediaWiki.',
-       'config-env-php' => 'PHP $1 est installé.',
-       'config-env-php-toolow' => 'PHP $1 est installé.
-Cependant, MediaWiki requiert PHP $2 ou plus haut.',
-       'config-unicode-using-utf8' => 'Utilisation de utf8_normalize.so par Brion Vibber pour la normalisation Unicode.',
-       'config-unicode-using-intl' => "Utilisation de [http://pecl.php.net/intl l'extension PECL intl] pour la normalisation Unicode.",
-       'config-unicode-pure-php-warning' => "'''Attention''': L'[http://pecl.php.net/intl extension PECL intl] n'est pas disponible pour la normalisation d’Unicode, retour à la version lente implémentée en PHP.
-Si votre site web sera très fréquenté, vous devriez lire ceci : [//www.mediawiki.org/wiki/Unicode_normalization_considerations ''Unicode normalization''] (en anglais).",
-       'config-unicode-update-warning' => "'''Attention''': La version installée du ''wrapper'' de normalisation Unicode utilise une vieille version de la [http://site.icu-project.org/ bibliothèque logicielle ''ICU Project''].
-Vous devriez faire une [//www.mediawiki.org/wiki/Unicode_normalization_considerations mise à jour] (texte en anglais) si l'usage d'Unicode vous semble important.",
-       'config-no-db' => "Impossible de trouver un pilote de base de données approprié ! Vous devez installer un pilote pour PHP. Ces types de bases de données sont reconnus : $1.
-
-Si vous êtes sur un site partagé, demandez à votre hébergeur d'installer un pilote de base de données approprié. Si vous avez compilé PHP, le configurer avec client de base de données activé, par exemple en insérant la directive <code>./configure --with-mysql</code>.
-
-Si vous avez installé PHP d'une distribution Debian ou Ubuntu, vous devez aussi installer le module <code>php5-mysql</code>.",
-       'config-outdated-sqlite' => "'''Attention''': vous avez SQLite $1, qui est inférieur à la version minimale requise $2. SQLite sera indisponible.",
-       'config-no-fts3' => "'''Attention :''' SQLite est compilé sans le module [//sqlite.org/fts3.html FTS3] ; les fonctions de recherche ne seront pas disponibles sur ce moteur.",
-       'config-register-globals' => "'''Attention : l'option <code>[http://php.net/register_globals register_globals]</code> de PHP est activée.'''
-'''Désactivez-la si vous le pouvez.'''
-MediaWiki fonctionnera, mais votre serveur sera exposé à de potentielles failles de sécurité.",
-       'config-magic-quotes-runtime' => "'''Erreur fatale : [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] est activé !'''
-Cette option corrompt les données de manière imprévisible.
-Vous ne pouvez pas installer ou utiliser MediaWiki tant que cette option est activée.",
-       'config-magic-quotes-sybase' => "'''Erreur fatale : [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybasee] est activé !'''
-Cette option corrompt les données de manière imprévisible.
-Vous ne pouvez pas installer ou utiliser MediaWiki tant que cette option est activée.",
-       'config-mbstring' => "'''Erreur fatale : [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] est activé !'''
-Cette option provoque des erreurs et peut corrompre les données de manière imprévisible.
-Vous ne pouvez pas installer ou utiliser MediaWiki tant que cette option est activée.",
-       'config-ze1' => "'''Erreur fatale : [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mod] est activé !'''
-Cette option provoque des bugs horribles avec MediaWiki.
-Vous ne pouvez pas installer ou utiliser MediaWiki tant que cette option est activée.",
-       'config-safe-mode' => "'''Attention : le « [http://www.php.net/features.safe-mode safe mode] » est activé !'''
-Ceci peut causer des problèmes, en particulier si vous utilisez le téléversement de fichiers et le support de <code>math</code>.",
-       'config-xml-bad' => 'Le module XML de PHP est manquant.
-MediaWiki requiert des fonctions de ce module et ne fonctionnera pas avec cette configuration.
-Si vous êtes sous Mandrake, installez le paquet php-xml.',
-       'config-pcre' => 'Le module de support PCRE semble manquer.
-MediaWiki requiert les fonctions d’expressions rationnelles compatibles avec Perl.',
-       'config-pcre-no-utf8' => "'''Erreur fatale''': Le module PCRE de PHP semble être compilé sans le support PCRE_UTF8.
-MédiaWiki nécessite la gestion d’UTF-8 pour fonctionner correctement.",
-       'config-memory-raised' => 'Le paramètre <code>memory_limit</code> de PHP était à $1, porté à $2.',
-       'config-memory-bad' => "'''Attention :''' Le paramètre <code>memory_limit</code> de PHP est à $1.
-Cette valeur est probablement trop faible.
-Il est possible que l’installation échoue !",
-       'config-ctype' => "'''Fatal ''': PHP doit être compilé avec le support pour l'[http://www.php.net/manual/en/ctype.installation.php extension Ctype].",
-       'config-json' => "'''Erreur fatale :''' PHP a été compilé sans le support de JSON.
-Vous devez soit installez l’extension JSON de PHP ou l’extension [http://pecl.php.net/package/jsonc PECL jsonc] avant d’installer MediaWiki.
-* L’extension PHP est comprise dans Red Hat Enterprise Linux (CentOS) 5 et 6, mais doit être activée dans <code>/etc/php.ini</code> ou <code>/etc/php.d/json.ini</code>.
-* Certaines distributions Linux après mai 2013 ne comprennent pas l’extension PHP, mais oint mis à la place l’extension PECL sous al forme <code>php5-json</code> ou <code>php-pecl-jsonc</code>.",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] est installé',
-       'config-apc' => '[http://www.php.net/apc APC] est installé',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] est installé',
-       'config-no-cache' => "'''Attention :''' Impossible de trouver [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] ou [http://www.iis.net/download/WinCacheForPhp WinCache].
-La mise en cache d'objets n'est pas activée.",
-       'config-mod-security' => "'''Attention''': Votre serveur web a [http://modsecurity.org/ mod_security] activé. S&il est mal configuré, cela peut poser des problèmes à MediaWiki ou à d'autres applications qui permettent aux utilisateurs de publier un contenu quelconque.
-Reportez-vous à [http://modsecurity.org/documentation/ la documentation de mod_security] ou contactez le support de votre hébergeur si vous rencontrez des erreurs aléatoires.",
-       'config-diff3-bad' => 'GNU diff3 introuvable.',
-       'config-git' => 'Logiciel de contrôle de version Git trouvé : <code>$1</code>.',
-       'config-git-bad' => 'Logiciel de contrôle de version Git non trouvé.',
-       'config-imagemagick' => "ImageMagick trouvé : <code>$1</code>.
-La miniaturisation d'images sera activée si vous activez le téléversement de fichiers.",
-       'config-gd' => "La bibliothèque graphique GD intégrée a été trouvée.
-La miniaturisation d'images sera activée si vous activez le téléversement de fichiers.",
-       'config-no-scaling' => "Impossible de trouver la bibliothèque GD ou ImageMagick.
-La miniaturisation d'images sera désactivé.",
-       'config-no-uri' => "'''Erreur :''' Impossible de déterminer l'URI du script actuel.
-Installation avortée.",
-       'config-no-cli-uri' => "'''Attention''': Aucun --scriptpath n'a été spécifié; <code>$1</code> sera utilisé par défaut",
-       'config-using-server' => 'Utilisation du nom de serveur "<nowiki>$1</nowiki>".',
-       'config-using-uri' => 'Utilisation de l\'URL de serveur "<nowiki>$1$2</nowiki>".',
-       'config-uploads-not-safe' => "'''Attention:''' Votre répertoire par défaut pour les téléchargements, <code>$1</code>, est vulnérable, car il peut exécuter n'importe quel script.
-Bien que MediaWiki vérifie tous les fichiers téléchargés, il est fortement recommandé de [//www.mediawiki.org/wiki/Manual:Security#Upload_security fermer cette vulnérabilité de sécurité] (texte en anglais) avant d'activer les téléchargements.",
-       'config-no-cli-uploads-check' => "'''Attention:''' Votre répertoire par défaut pour les imports(<code>$1</code>) n'est pas contrôlé concernant la vulnérabilité d'exécution de scripts arbitraires lors de l'installation CLI.",
-       'config-brokenlibxml' => 'Votre système utilise une combinaison de versions de PHP et libxml2 qui est boguée et peut engendrer des corruptions cachées de données dans MediaWiki et d’autres applications web.
-Veuillez mettre à jour votre système vers PHP 5.2.9 ou plus récent et libxml2 2.7.3 ou plus récent ([//bugs.php.net/bug.php?id=45996 bogue déposé auprès de PHP]).
-Installation interrompue.',
-       'config-using531' => 'MediaWiki ne peut pas être utilisé avec PHP $1 à cause d’un bogue affectant les paramètres passés par référence à <code>__call()</code>.
-Veuillez mettre à jour votre système vers PHP 5.3.2 ou plus récent ou revenir à PHP 5.3.0 pour résoudre ce problème.
-Installation interrompue.',
-       'config-suhosin-max-value-length' => 'Suhosin est installé et limite la <code>longueur</code> du paramètre GET à $1 octets.
-Le composant ResourceLoader de MediaWiki va répondre en respectant cette limite, mais ses performances seront dégradées. Si possible, vous devriez définir <code>suhosin.get.max_value_length</code> à 1024 ou plus dans le fichier <code>php.ini</code>, et fixer <code>$wgResourceLoaderMaxQueryLength</code> à la même valeur dans <code>LocalSettings.php</code>.',
-       'config-db-type' => 'Type de base de données :',
-       'config-db-host' => 'Nom d’hôte de la base de données :',
-       'config-db-host-help' => 'Si votre serveur de base de données est sur un serveur différent, saisissez ici son nom d’hôte ou son adresse IP.
-
-Si vous utilisez un hébergement mutualisé, votre hébergeur doit vous avoir fourni le nom d’hôte correct dans sa documentation.
-
-Si vous installez sur un serveur Windows et utilisez MySQL, « localhost » peut ne pas fonctionner comme nom de serveur. S’il ne fonctionne pas, essayez « 127.0.0.1 » comme adresse IP locale.
-
-Si vous utilisez PostgreSQL, laissez ce champ vide pour vous connecter via un socket Unix.',
-       'config-db-host-oracle' => 'Nom TNS de la base de données :',
-       'config-db-host-oracle-help' => 'Entrez un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nom de connexion locale] valide ; un fichier tnsnames.ora doit être visible par cette installation.<br /> Si vous utilisez les bibliothèques clientes version 10g ou plus récentes, vous pouvez également utiliser la méthode de nommage [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
-       'config-db-wiki-settings' => 'Identifier ce wiki',
-       'config-db-name' => 'Nom de la base de données :',
-       'config-db-name-help' => "Choisissez un nom qui identifie votre wiki.
-Il ne doit pas contenir d'espaces.
-
-Si vous utilisez un hébergement web partagé, votre hébergeur vous fournira un nom spécifique de base de données à utiliser, ou bien vous permet de créer des bases de données via un panneau de contrôle.",
-       'config-db-name-oracle' => 'Schéma de base de données :',
-       'config-db-account-oracle-warn' => "Il existe trois scénarios pris en charge pour l’installation d'Oracle comme backend de base :
-
-Si vous souhaitez créer un compte de base de données dans le cadre de la procédure d’installation, veuillez fournir un compte avec le rôle de SYSDBA comme compte de base de données pour l’installation et spécifiez les informations d’identification souhaitées pour le compte d'accès au web, sinon vous pouvez créer le compte d’accès web manuellement et fournir uniquement ce compte (si elle a exigé des autorisations nécessaires pour créer les objets de schéma) ou fournir deux comptes différents, l’un avec les privilèges de créer et une restreinte pour l’accès web.
-
-Un script pour créer un compte avec des privilèges requis peut être trouvé dans le répertoire « entretien/oracle/ » de cette installation. N’oubliez pas que le fait de l’utilisation d’un compte limité désactive toutes les fonctionnalités d’entretien avec le compte par défaut.",
-       'config-db-install-account' => "Compte d'utilisateur pour l'installation",
-       'config-db-username' => 'Nom d’utilisateur de la base de données :',
-       'config-db-password' => 'Mot de passe de la base de données :',
-       'config-db-password-empty' => "Veuillez entrer un mot de passe pour le nouvel compte de la base de données : $1.
-Bien qu'il soit possible de créer un compte sans mot de passe, ce n'est pas recommandé pour des questions de sécurité.",
-       'config-db-install-username' => "Entrez le nom d’utilisateur qui sera utilisé pour se connecter à la base de données pendant le processus d'installation. Il ne s’agit pas du nom d’utilisateur du compte MediaWiki, mais du nom d’utilisateur pour votre base de données.",
-       'config-db-install-password' => "Entrez le mot de passe qui sera utilisé pour se connecter à la base de données pendant le processus d'installation. Il ne s’agit pas du mot de passe du compte MediaWiki, mais du mot de passe pour votre base de données.",
-       'config-db-install-help' => "Entrez le nom d'utilisateur et le mot de passe qui seront utilisés pour se connecter à la base de données pendant le processus d'installation.",
-       'config-db-account-lock' => "Utiliser le même nom d'utilisateur et le même mot de passe pendant le fonctionnement habituel",
-       'config-db-wiki-account' => "Compte d'utilisateur pour le fonctionnement habituel",
-       'config-db-wiki-help' => "Entrez le nom d'utilisateur et le mot de passe qui seront utilisés pour se connecter à la base de données pendant le fonctionnement habituel du wiki.
-Si le compte n'existe pas, et le compte d'installation dispose de privilèges suffisants, ce compte d'utilisateur sera créé avec les privilèges minimum requis pour faire fonctionner le wiki.",
-       'config-db-prefix' => 'Préfixe des tables de la base de données :',
-       'config-db-prefix-help' => "Si vous avez besoin de partager une base de données entre plusieurs wikis, ou entre MediaWiki et une autre application Web, vous pouvez choisir d'ajouter un préfixe à tous les noms de table pour éviter les conflits.
-Ne pas utiliser des espaces.
-
-Ce champ est généralement laissé vide.",
-       'config-db-charset' => 'Jeu de caractères de la base de données',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binaire',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 rétrocompatible UTF-8',
-       'config-charset-help' => "'''Attention:''' Si vous utilisez ''backwards-compatible UTF-8'' sur MySQL 4.1+, et ensuite sauvegardez la base de données avec <code>mysqldump</code>, cela peut détruire tous les caractères non-ASCII, ce qui rend inutilisable vos copies de sauvegarde de façon irréversible !
-
-En ''mode binaire'', MediaWiki stocke le texte UTF-8 dans des champs binaires de la base de données. C'est plus efficace que le ''mode UTF-8'' de MySQL, et vous permet d'utiliser toute la gamme des caractères Unicode.
-En ''mode UTF-8'', MySQL connaîtra le jeu de caractères de vos données et pourra présenter et convertir les données de manière appropriée, mais il ne vous laissera pas stocker les caractères au-dessus du [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingue de base] (en anglais).",
-       'config-mysql-old' => 'MySQL $1 ou version ultérieure est requis, vous avez $2.',
-       'config-db-port' => 'Port de la base de données :',
-       'config-db-schema' => 'Schéma pour MediaWiki',
-       'config-db-schema-help' => "Les schémas ci-dessus sont généralement corrects.
-Ne les changez que si vous êtes sûr que c'est nécessaire.",
-       'config-pg-test-error' => "Impossible de se connecter à la base de données '''$1''' : $2",
-       'config-sqlite-dir' => 'Dossier des données SQLite :',
-       'config-sqlite-dir-help' => "SQLite stocke toutes les données dans un fichier unique.
-
-Le répertoire que vous inscrivez doit être accessible en écriture par le serveur lors de l'installation.
-
-Il '''ne faut pas''' qu'il soit accessible via le web, c'est pourquoi il n'est pas à l'endroit où vos fichiers PHP sont.
-
-L'installateur écrira un fichier <code>.htaccess</code> en même temps, mais s'il y a échec, quelqu'un peut accéder à votre base de données.
-Cela comprend les données des utilisateurs (adresses de courriel, mots de passe hachés) ainsi que des révisions supprimées et d'autres données confidentielles du wiki.
-
-Envisagez de placer la base de données ailleurs, par exemple dans <code>/var/lib/mediawiki/yourwiki</code>.",
-       'config-oracle-def-ts' => "Espace de stockage (''tablespace'') par défaut :",
-       'config-oracle-temp-ts' => "Espace de stockage (''tablespace'') temporaire :",
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => "MediaWiki supporte ces systèmes de bases de données :
-
-$1
-
-Si vous ne voyez pas le système de base de données que vous essayez d'utiliser ci-dessous, alors suivez les instructions ci-dessus (voir liens) pour activer le support.",
-       'config-support-mysql' => '* $1 est le premier choix pour MediaWiki et est mieux pris en charge ([http://www.php.net/manual/en/mysql.installation.php how to compile PHP with MySQL support])',
-       'config-support-postgres' => "* $1 est un système de base de données populaire et ''open source'' qui peut être une alternative à MySQL ([http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). Il peut contenir quelques bogues mineurs et n'est pas recommandé dans un environnement de production.",
-       'config-support-sqlite' => '* $1 est un système de base de données léger qui est bien supporté. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], utilise PDO)',
-       'config-support-oracle' => '* $1 est un système commercial de gestion de base de données d’entreprise. ([http://www.php.net/manual/en/oci8.installation.php Comment compiler PHP avec le support OCI8])',
-       'config-header-mysql' => 'Paramètres de MySQL',
-       'config-header-postgres' => 'Paramètres de PostgreSQL',
-       'config-header-sqlite' => 'Paramètres de SQLite',
-       'config-header-oracle' => 'Paramètres d’Oracle',
-       'config-invalid-db-type' => 'Type de base de données non valide',
-       'config-missing-db-name' => 'Vous devez saisir une valeur pour « Nom de la base de données »',
-       'config-missing-db-host' => "Vous devez entrer une valeur pour « l'hôte de la base de données »",
-       'config-missing-db-server-oracle' => 'Vous devez saisir une valeur pour le « Nom TNS de la base de données »',
-       'config-invalid-db-server-oracle' => 'Le nom TNS de la base de données (« $1 ») est invalide.
-Utilisez uniquement la chaîne "TNS Name" ou "Easy Connect" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Méthodes de nommage Oracle])',
-       'config-invalid-db-name' => 'Nom de la base de données invalide (« $1 »).
-Il ne peut contenir que des lettres latines (a-z, A-Z), des chiffres (0-9), des caractères de soulignement (_) et des tirets (-).',
-       'config-invalid-db-prefix' => 'Préfixe de la base de données non valide « $1 ».
-Il ne peut contenir que des lettres latines (a-z, A-Z), des chiffres (0-9), des caractères de soulignement (_) et des tirets (-).',
-       'config-connection-error' => '$1.
-
-Vérifier le nom d’hôte, le nom d’utilisateur et le mot de passe ci-dessous puis réessayer.',
-       'config-invalid-schema' => 'Schéma invalide pour MediaWiki « $1 ».
-Utilisez seulement des lettres latines (a-z, A-Z), des chiffres (0-9) et des caractères de soulignement (_).',
-       'config-db-sys-create-oracle' => "L'installateur ne reconnaît que les compte SYSDBA lors de la création d'un nouveau compte.",
-       'config-db-sys-user-exists-oracle' => 'Le compte « $1 » existe déjà. Un SYSDBA peut seulement servir à créer un nouveau compte.',
-       'config-postgres-old' => 'PostgreSQL $1 ou version ultérieure est requis, vous avez $2.',
-       'config-sqlite-name-help' => "Choisir un nom qui identifie votre wiki.
-Ne pas utiliser des espaces ou des traits d'union.
-Il sera utilisé pour le fichier de données SQLite.",
-       'config-sqlite-parent-unwritable-group' => "Impossible de créer le répertoire de données <nowiki><code>$1</code></nowiki>, parce que le répertoire parent <nowiki><code>$2</code></nowiki> n'est pas accessible en écriture par le serveur Web.
-
-L'utilisateur du serveur web est connu.
-Rendre le répertoire <nowiki><code>$3</code></nowiki> accessible en écriture pour continuer.
-Sur un système UNIX/Linux, saisir :
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>",
-       'config-sqlite-parent-unwritable-nogroup' => "Impossible de créer le répertoire de données <nowiki><code>$1</code></nowiki>, parce que le répertoire parent <nowiki><code>$2</code></nowiki> n'est pas accessible en écriture par le serveur Web.
-
-L'utilisateur du serveur web est inconnu.
-Rendre le répertoire <nowiki><code>$3</code></nowiki> globalement accessible en écriture pour continuer.
-Sur un système UNIX/Linux, saisir :
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>",
-       'config-sqlite-mkdir-error' => "Erreur de création du répertoire de données « $1 ».
-Vérifiez l'emplacement et essayez à nouveau.",
-       'config-sqlite-dir-unwritable' => "Impossible d'écrire dans le répertoire « $1 ».
-Changer les permissions de sorte que le serveur peut y écrire et essayez à nouveau.",
-       'config-sqlite-connection-error' => '$1.
-
-Vérifier le répertoire des données et le nom de la base de données ci-dessous et réessayer.',
-       'config-sqlite-readonly' => "Le fichier <code>$1</code> n'est pas accessible en écriture.",
-       'config-sqlite-cant-create-db' => 'Impossible de créer le fichier de base de données <code>$1</code>.',
-       'config-sqlite-fts3-downgrade' => 'PHP ne vient pas avec FTS3, les tables sont diminuées.',
-       'config-can-upgrade' => "Il y a des tables MediaWiki dans cette base de données.
-Pour les mettre au niveau de MediaWiki $1, cliquez sur '''Continuer'''.",
-       'config-upgrade-done' => "Mise à jour complétée.
-
-Vous pouvez maintenant [$1 commencer à utiliser votre wiki].
-
-Si vous souhaitez régénérer votre fichier <code>LocalSettings.php</code>, cliquez sur le bouton ci-dessous.
-Ce '''n'est pas recommandé''' sauf si vous rencontrez des problèmes avec votre wiki.",
-       'config-upgrade-done-no-regenerate' => 'Mise à jour terminée.
-
-Vous pouvez maintenant [$1 commencer à utiliser votre wiki].',
-       'config-regenerate' => 'Regénérer LocalSettings.php →',
-       'config-show-table-status' => 'Échec de la requête <code>SHOW TABLE STATUS</code> !',
-       'config-unknown-collation' => "'''Attention:''' La base de données effectue un classement alphabétique (''collation'') inconnu.",
-       'config-db-web-account' => "Compte de la base de données pour l'accès Web",
-       'config-db-web-help' => "Sélectionnez le nom d'utilisateur et le mot de passe que le serveur web utilisera pour se connecter au serveur de base de données pendant le fonctionnement habituel du wiki.",
-       'config-db-web-account-same' => "Utilisez le même compte que pour l'installation",
-       'config-db-web-create' => "Créez le compte s'il n'existe pas déjà",
-       'config-db-web-no-create-privs' => "Le compte que vous avez spécifié pour l'installation n'a pas de privilèges suffisants pour créer un compte.
-Le compte que vous spécifiez ici doit déjà exister.",
-       'config-mysql-engine' => 'Moteur de stockage :',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "''' Avertissement ''': vous avez sélectionné MyISAM comme moteur de stockage pour MySQL, ce qui n'est pas recommandé pour une utilisation avec MediaWiki, parce que:
- * il supporte à peine la simultanéité en raison de verrouillage de table
- * il est plus sujet à la corruption que les autres moteurs
- * le codebase MediaWiki ne gère pas toujours MyISAM comme il se doit
-Si votre installation MySQL supporte InnoDB, il est fortement recommandé que vous le choisissez plutôt. Si votre installation MySQL ne supporte pas les tables InnoDB, il est peut-être temps de faire une mise à niveau.",
-       'config-mysql-only-myisam-dep' => "'''Attention :''' MyISAM est le seul moteur de stockage disponible pour MySQL qui ne soit pas recommandé pour une utilsiation avec MédiaWiki, car :
-* il supporte très peu les accès concurrents à cause du verrouillage des tables
-* il est plus sujet à corruption que les autres moteurs
-* le code de base de MédiaWiki ne gère pas toujours MyISAM comme il faudrait
-
-Votre installation MySQL ne supporte pas InnoDB ; il est peut-être temps de la mettre à jour.",
-       'config-mysql-engine-help' => "'''InnoDB''' est presque toujours la meilleure option, car il supporte bien l'[http://fr.wikipedia.org/wiki/Ordonnancement_dans_les_syst%C3%A8mes_d%27exploitation ordonnancement].
-
-'''MyISAM''' peut être plus rapide dans les installations monoposte ou en lecture seule. Les bases de données MyISAM ont tendance à se corrompre plus souvent que celles d'InnoDB.",
-       'config-mysql-charset' => 'Jeu de caractères de la base de données :',
-       'config-mysql-binary' => 'Binaire',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "En ''mode binaire'', MediaWiki stocke le texte au format UTF-8 dans la base de données. C'est plus efficace que le ''UTF-8 mode'' de MySQL, et vous permet d'utiliser toute la gamme des caractères Unicode.
-
-En ''mode binaire'', MediaWiki stocke le texte UTF-8 dans des champs binaires de la base de données. C'est plus efficace que le ''mode UTF-8'' de MySQL, et vous permet d'utiliser toute la gamme des caractères Unicode.
-En ''mode UTF-8'', MySQL connaîtra le jeu de caractères de vos données et pourra présenter et convertir les données de manière appropriée, mais il ne vous laissera pas stocker les caractères au-dessus du [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingue de base] (en anglais).",
-       'config-site-name' => 'Nom du wiki :',
-       'config-site-name-help' => 'Il apparaîtra dans la barre de titre du navigateur et en divers autres endroits.',
-       'config-site-name-blank' => 'Entrez un nom de site.',
-       'config-project-namespace' => 'Espace de noms du projet :',
-       'config-ns-generic' => 'Projet',
-       'config-ns-site-name' => 'Même nom que le wiki : $1',
-       'config-ns-other' => 'Autre (préciser)',
-       'config-ns-other-default' => 'MonWiki',
-       'config-project-namespace-help' => "Suivant l'exemple de Wikipédia, plusieurs wikis gardent leurs pages de politique séparées de leurs pages de contenu, dans un ''espace de noms'' propre.
-Tous les titres de page de cet espace de noms commence par un préfixe défini, que vous pouvez spécifier ici.
-Traditionnellement, ce préfixe est dérivé du nom du wiki, mais il ne peut contenir des caractères de ponctuation tels que « # » ou « : ».",
-       'config-ns-invalid' => "L'espace de noms spécifié « <nowiki>$1</nowiki> » n'est pas valide.
-Spécifiez un espace de noms pour le projet.",
-       'config-ns-conflict' => "L'espace de noms spécifié « <nowiki>$1</nowiki> » est en conflit avec un espace de noms par défaut de MediaWiki.
-Choisir un autre espace de noms.",
-       'config-admin-box' => 'Compte administrateur',
-       'config-admin-name' => 'Votre nom :',
-       'config-admin-password' => 'Mot de passe :',
-       'config-admin-password-confirm' => 'Saisir à nouveau le mot de passe :',
-       'config-admin-help' => "Entrez votre nom d'utilisateur préféré ici, par exemple « Jean Blogue ».
-C'est le nom que vous utiliserez pour vous connecter au wiki.",
-       'config-admin-name-blank' => "Entrez un nom d'administrateur.",
-       'config-admin-name-invalid' => "Le nom d'utilisateur spécifié « <nowiki>$1</nowiki> » n'est pas valide.
-Indiquez un nom d'utilisateur différent.",
-       'config-admin-password-blank' => 'Entrez un mot de passe pour le compte administrateur.',
-       'config-admin-password-same' => "Le mot de passe doit être différent du nom d'utilisateur.",
-       'config-admin-password-mismatch' => 'Les deux mots de passe que vous avez saisis ne correspondent pas.',
-       'config-admin-email' => 'Adresse de courriel :',
-       'config-admin-email-help' => "Entrez une adresse de courriel ici pour vous permettre de recevoir des courriels d'autres utilisateurs du wiki, réinitialiser votre mot de passe, et être informé des modifications apportées aux pages de votre liste de suivi. Vous pouvez laisser ce champ vide.",
-       'config-admin-error-user' => "Erreur interne lors de la création d'un administrateur avec le nom « <nowiki>$1</nowiki> ».",
-       'config-admin-error-password' => "Erreur interne lors de l'inscription d'un mot de passe pour l'administrateur « <nowiki>$1</nowiki> » : <pre>$2</pre>",
-       'config-admin-error-bademail' => 'Vous avez entré une adresse de courriel invalide',
-       'config-subscribe' => "Abonnez-vous à la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce liste d'annonce des nouvelles versions] (la page peut afficher le texte en français).",
-       'config-subscribe-help' => "Il s'agit d'une liste de diffusion à faible volume utilisée servant à annoncer les nouvelles versions, y compris les versions améliorant la sécurité du logiciel.
-Vous devriez y souscrire et mettre à jour votre version de MediaWiki lorsque de nouvelles versions sont publiées.",
-       'config-subscribe-noemail' => "Vous avez essayé de vous abonner à la liste de diffusion des communiqués, sans fournir une adresse courriel ! S'il vous plaît, fournir une adresse électronique si vous souhaitez vous abonner à la liste de diffusion.",
-       'config-almost-done' => 'Vous avez presque fini !
-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 ouvert',
-       'config-profile-no-anon' => 'Création de compte requise',
-       'config-profile-fishbowl' => 'Éditeurs autorisés seulement',
-       'config-profile-private' => 'Wiki privé',
-       'config-profile-help' => "Les wikis fonctionnent mieux lorsque vous laissez le plus de personnes possible le modifier.
-Avec MediaWiki, il est facile de vérifier les modifications récentes et de révoquer tout dommage créé par des utilisateurs débutants ou mal intentionnés.
-
-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.
-
-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.
-'''{{int:config-profile-private}}''' n’autorise que les utilisateurs approuvés à voir et modifier les pages.
-
-Des configurations de droits d’utilisateurs plus complexes sont disponibles après l'installation, voir la [//www.mediawiki.org/wiki/Manual:User_rights page correspondante du manuel].",
-       'config-license' => "Droits d'auteur et licence :",
-       'config-license-none' => 'Aucune licence en bas de page',
-       'config-license-cc-by-sa' => "Creative Commons attribution partage à l'identique",
-       'config-license-cc-by' => 'Creative Commons Attribution',
-       'config-license-cc-by-nc-sa' => 'Creative Commons paternité – non commercial – partage à l’identique',
-       'config-license-cc-0' => 'Creative Commons Zero (domaine public)',
-       'config-license-gfdl' => 'GNU Free Documentation License 1.3 ou ultérieure',
-       'config-license-pd' => 'Domaine public',
-       'config-license-cc-choose' => 'Sélectionner une licence Creative Commons personnalisée',
-       'config-license-help' => "Beaucoup de wikis publics mettent l'ensemble des contributions sous [http://freedomdefined.org/Definition/Fr licence libre].
-Cela contribue à créer un sentiment d'appartenance dans leur communauté et encourage les contributions sur le long terme.
-Ce n'est généralement pas nécessaire pour un wiki privé ou d'entreprise.
-
-Si vous souhaitez utiliser des textes de Wikipédia, et souhaitez que Wikipédia réutilise des textes de votre wiki, vous devriez choisir la [http://creativecommons.org/licenses/by-sa/3.0/deed.fr licence ''Creative Commons Attribution Share Alike''] (CC-by-sa).
-
-Wikipédia a déjà été publié selon les termes de la [http://fr.wikipedia.org/wiki/Licence_de_documentation_libre_GNU ''GNU Free Documentation License''] (GFDL).
-C'est une licence valide, mais elle est difficile à comprendre. De plus, elle possède des caractéristiques qui rendent difficiles la réutilisation.",
-       'config-email-settings' => 'Paramètres de courriel',
-       'config-enable-email' => 'Activer les courriels sortants',
-       'config-enable-email-help' => 'Si vous souhaitez utiliser le courriel, vous devez [http://www.php.net/manual/en/mail.configuration.php configurer des paramètres PHP] (texte en anglais).
-Si vous ne voulez pas du service de courriel, vous pouvez le désactiver ici.',
-       'config-email-user' => "Activer les courriers électroniques d'utilisateur à utilisateur",
-       'config-email-user-help' => "Permet à tous les utilisateurs d'envoyer des courriels à d'autres utilisateurs si cela est activé dans leurs préférences.",
-       'config-email-usertalk' => 'Activer la notification des pages de discussion des utilisateurs',
-       'config-email-usertalk-help' => 'Permet aux utilisateurs de recevoir une notification en cas de modification de leurs pages de discussion, si cela est activé dans leurs préférences.',
-       'config-email-watchlist' => 'Activer la notification de la liste de suivi',
-       'config-email-watchlist-help' => "Permet aux utilisateurs de recevoir des notifications à propos des pages qu'ils ont en suivi (si cette préférence est activée).",
-       'config-email-auth' => "Activer l'authentification par courriel",
-       'config-email-auth-help' => "Si cette option est activée, les utilisateurs doivent confirmer leur adresse de courriel en utilisant l'hyperlien envoyé à chaque fois qu'ils la définissent ou la modifient.
-Seules les adresses authentifiées peuvent recevoir des courriels des autres utilisateurs ou lorsqu'il y a des notifications de modification.
-L'activation de cette option est '''recommandée''' pour les wikis publics en raison d'abus potentiels des fonctionnalités de courriels.",
-       'config-email-sender' => 'Adresse de courriel de retour :',
-       'config-email-sender-help' => "Entrez l'adresse de courriel à utiliser comme adresse de retour des courriels sortant.
-Les courriels rejetés y seront envoyés.
-De nombreux serveurs de courriels exigent au moins un [http://fr.wikipedia.org/wiki/Nom_de_domaine nom de domaine] valide.",
-       'config-upload-settings' => 'Téléchargement des images et des fichiers',
-       'config-upload-enable' => 'Activer le téléchargement des fichiers',
-       'config-upload-help' => "Le téléchargement des fichiers expose votre serveur à des risques de sécurité.
-Pour plus d'informations, lire la section [//www.mediawiki.org/wiki/Manual:Security ''Security''] du manuel d'installation (en anglais).
-
-Pour autoriser le téléchargement des fichiers, modifier le mode du sous-répertoire <code>images</code> qui se situe sous le répertoire racine de MediaWiki.
-Ensuite, activez cette option.",
-       'config-upload-deleted' => 'Répertoire pour les fichiers supprimés :',
-       'config-upload-deleted-help' => 'Choisissez un répertoire qui servira à archiver les fichiers supprimés.
-Idéalement, il ne devrait pas être accessible depuis le web.',
-       'config-logo' => 'URL du logo :',
-       'config-logo-help' => 'L’habillage par défaut de MediaWiki comprend l’espace pour un logo de 135x160 pixels au-dessus de la barre de menu latérale.
-Téléchargez une image de la taille appropriée, et entrez son URL ici.
-
-Vous pouvez utiliser <code>$wgStylePath</code> ou <code>$wgScriptPath</code> si votre logo est relatif à ces chemins.
-
-Si vous ne voulez pas de logo, laissez cette case vide.',
-       'config-instantcommons' => "Activer ''InstantCommons''",
-       'config-instantcommons-help' => "[//www.mediawiki.org/wiki/InstantCommons InstantCommons] est un service qui permet d'utiliser les images, les sons et les autres médias disponibles sur le site [//commons.wikimedia.org/ Wikimedia Commons].
-Pour se faire, il faut que MediaWiki accède à Internet.
-
-Pour plus d'informations sur ce service, y compris les instructions sur la façon de le configurer pour d'autres wikis que Wikimedia Commons, consultez le [//mediawiki.org/wiki/Manual:\$wgForeignFileRepos manuel] (en anglais).",
-       'config-cc-error' => "Le sélection d'une licence ''Creative Commons'' n'a donné aucun résultat.
-Entrez le nom de la licence manuellement.",
-       'config-cc-again' => 'Choisissez à nouveau...',
-       'config-cc-not-chosen' => "Choisissez une licence ''Creative Commons'' et cliquez sur « Continuer ».",
-       'config-advanced-settings' => 'Configuration avancée',
-       'config-cache-options' => 'Paramètres pour la mise en cache des objets:',
-       'config-cache-help' => "La mise en cache des objets améliore la vitesse de MediaWiki en mettant en cache les données fréquemment utilisées.
-Les sites de taille moyenne à grande sont fortement encouragés à l'activer. Les petits sites y verront également des avantages.",
-       'config-cache-none' => 'Aucune mise en cache (aucune fonctionnalité supprimée, mais la vitesse peut changer sur les wikis importants)',
-       'config-cache-accel' => 'Mise en cache des objets PHP (APC, XCache ou WinCache)',
-       'config-cache-memcached' => 'Utiliser Memcached (nécessite une installation et une configuration supplémentaires)',
-       'config-memcached-servers' => 'serveurs pour Memcached :',
-       'config-memcached-help' => 'Liste des adresses IP à utiliser pour Memcached.
-Elles doivent être séparés par des virgules et vous devez spécifier le port à utiliser. Par exemple :
-  127.0.0.1:11211
-  192.168.1.25:1234',
-       'config-memcache-needservers' => 'Vous avez sélectionné Memcached comme type de cache, mais ne précisez pas de serveur.',
-       'config-memcache-badip' => 'Vous avez entré une adresse IP invalide pour Memcached: $1.',
-       'config-memcache-noport' => "Vous n'avez pas entré un port pour le serveur Memcached : $1.
-Si vous ne le connaissez pas, la valeur par défaut est 11211.",
-       'config-memcache-badport' => 'Les numéros de port de Memcached sont situés entre $1 et $2.',
-       'config-extensions' => 'Extensions',
-       'config-extensions-help' => 'Les extensions énumérées ci-dessus ont été détectées dans votre répertoire <code>./extensions</code>.
-
-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 "{{int:config-back}}".',
-       'config-install-step-done' => 'fait',
-       'config-install-step-failed' => 'échec',
-       'config-install-extensions' => 'Inclusion des extensions',
-       'config-install-database' => 'Création de la base de données',
-       'config-install-schema' => 'Création de schéma',
-       'config-install-pg-schema-not-exist' => "Le schéma PostgreSQL n'existe pas",
-       'config-install-pg-schema-failed' => "Échec lors de la création des tables.
-Assurez-vous que l'utilisateur « $1 » peut écrire selon le schéma « $2 ».",
-       'config-install-pg-commit' => 'Validation des modifications',
-       'config-install-pg-plpgsql' => 'Vérification du langage PL/pgSQL',
-       'config-pg-no-plpgsql' => 'Vous devez installer le langage PL/pgSQL dans la base de données $1',
-       'config-pg-no-create-privs' => "Le compte que vous avez spécifié pour l'installation n'a pas suffisamment de privilèges pour créer un compte.",
-       'config-pg-not-in-role' => "Le compte que vous avez spécifié pour l'utilisateur web existe déjà !
-Le compte que vous avez spécifié pour l'installation n'est pas un super-utilisateur et n'est pas membre du rôle de l'internaute, il est donc incapable de créer des objets appartenant à l'utilisateur web.!
-
-MediaWiki exige actuellement que les tableaux soient possédés par un utilisateur web. S'il vous plaît, spécifier un autre nom de compte web, ou cliquez sur \"retour\" et spécifier un utilisateur avec les privilèges suffisants.",
-       'config-install-user' => "Création d'un utilisateur de la base de données",
-       'config-install-user-alreadyexists' => "L'utilisateur « $1 » existe déjà.",
-       'config-install-user-create-failed' => "Échec lors de la création de l'utilisateur « $1 » : $2",
-       'config-install-user-grant-failed' => "Échec lors de l'ajout de permissions à l'utilisateur « $1 » : $2",
-       'config-install-user-missing' => 'L\'utilisateur "$1" n\'existe pas.',
-       'config-install-user-missing-create' => 'L\'utilisateur "$1" n\'existe pas !
-S\'il vous plaît, cocher "Compte de créer" dans la case ci-dessous si vous voulez le créer.',
-       'config-install-tables' => 'Création des tables',
-       'config-install-tables-exist' => "'''Avertissement:''' Les tables MediaWiki semblent déjà exister.
-Création omise.",
-       'config-install-tables-failed' => "'''Erreur:''' échec lors de la création de la table avec l'erreur suivante: $1",
-       'config-install-interwiki' => 'Remplissage par défaut de la table des interwikis',
-       'config-install-interwiki-list' => 'Impossible de trouver le fichier <code>interwiki.list</code>.',
-       'config-install-interwiki-exists' => "'''Attention:''' La table des interwikis semble déjà contenir des entrées.
-La liste par défaut ne sera pas inscrite.",
-       'config-install-stats' => 'Initialisation des statistiques',
-       'config-install-keys' => 'Génération de la clé secrète',
-       'config-insecure-keys' => "'''Avertissement''' : {{PLURAL:$2|Une clé de sécurité générée ($1) pendant l'installation n'est pas complètement sécuritaire. Envisagez de la modifier manuellement.|Des clés de sécurité générées ($1) pendant l'installation ne sont pas complètement sécuritaires. Envisagez de les modifier manuellement.}}",
-       'config-install-sysop' => 'Création du compte administrateur',
-       'config-install-subscribe-fail' => "Impossible de s'abonner à mediawiki-announce : $1",
-       'config-install-subscribe-notpossible' => 'cURL n’est pas installé et allow_url_fopen n’est pas disponible.',
-       'config-install-mainpage' => 'Création de la page principale avec un contenu par défaut',
-       'config-install-extension-tables' => 'Création de tables pour les extensions activées',
-       'config-install-mainpage-failed' => 'Impossible d’insérer la page principale: $1',
-       'config-install-done' => "'''Félicitations!'''
-Vous avez réussi à installer MediaWiki.
-
-Le programme d'installation a généré <code>LocalSettings.php</code>, un fichier qui contient tous les paramètres de configuration.
-
-Si le téléchargement n'a pas été offert, ou que vous l'avez annulé, vous pouvez démarrer à nouveau le téléchargement en cliquant ce lien :
-
-$3
-
-'''Note''': Si vous ne le faites pas maintenant, ce fichier de configuration généré ne sera pas disponible plus tard si vous quittez l'installation sans le télécharger.
-
-Lorsque c'est fait, vous pouvez '''[$2 accéder à votre wiki]'''.",
-       'config-download-localsettings' => 'Télécharger <code>LocalSettings.php</code>',
-       'config-help' => 'aide',
-       'config-nofile' => 'Le fichier « $1 » est introuvable. A-t-il été supprimé ?',
-       'config-extension-link' => 'Saviez-vous que votre wiki supporte [//www.mediawiki.org/wiki/Manual:Extensions des extensions] ?
-
-Vous pouvez consulter les [//www.mediawiki.org/wiki/Category:Extensions_by_category extensions par catégorie] ou la [//www.mediawiki.org/wiki/Extension_Matrix Matrice des extensions] pourvoir la liste complète des extensions.',
-       'mainpagetext' => "'''MediaWiki a été installé avec succès.'''",
-       'mainpagedocfooter' => 'Consultez le [//meta.wikimedia.org/wiki/Aide:Contenu Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
-
-== Pour démarrer ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste des paramètres de configuration]
-* [//www.mediawiki.org/wiki/Manual:FAQ/fr FAQ sur MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]',
-);
-
-/** Cajun French (français cadien)
- */
-$messages['frc'] = array(
-       'mainpagetext' => "'''Vous avez bien installé MediaWiki.'''",
-       'mainpagedocfooter' => 'Lisez la [//meta.wikimedia.org/wiki/Help:Contents Guide des Useurs] pour apprendre à user le wiki software.
-
-== Pour Commencer ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Réglage]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki: Questions Souvent Posées]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki Liste à Malle]', # Fuzzy
-);
-
-/** Franco-Provençal (arpetan)
- * @author ChrisPtDe
- */
-$messages['frp'] = array(
-       'config-desc' => 'La programeria d’enstalacion de MediaWiki',
-       'config-title' => 'Enstalacion de MediaWiki $1',
-       'config-information' => 'Enformacions',
-       'config-localsettings-key' => 'Cllâf de misa a jorn :',
-       'config-session-error' => 'Èrror pendent l’emmodâ de la sèance : $1',
-       'config-your-language' => 'Voutra lengoua :',
-       'config-wiki-language' => 'Lengoua du vouiqui :',
-       'config-back' => '← Retôrn',
-       'config-continue' => 'Continuar →',
-       'config-page-language' => 'Lengoua',
-       'config-page-welcome' => 'Benvegnua dessus MediaWiki !',
-       'config-page-dbconnect' => 'Sè branchiér a la bâsa de balyês',
-       'config-page-upgrade' => 'Betar a jorn l’enstalacion ègzistenta',
-       'config-page-dbsettings' => 'Paramètres de la bâsa de balyês',
-       'config-page-name' => 'Nom',
-       'config-page-options' => 'Chouèx',
-       'config-page-install' => 'Enstalar',
-       'config-page-complete' => 'Chavonâ !',
-       'config-page-restart' => 'Tornar emmodar l’enstalacion',
-       'config-page-readme' => 'Liéséd-mè',
-       'config-page-releasenotes' => 'Notes de publecacion',
-       'config-page-copying' => 'Copia',
-       'config-page-upgradedoc' => 'Misa a jorn',
-       'config-page-existingwiki' => 'Vouiqui ègzistent',
-       'config-env-php' => 'PHP $1 est enstalâ.',
-       'config-env-php-toolow' => 'PHP $1 est enstalâ.
-Portant, MediaWiki at fôta de PHP $2 ou ben ples hôt.',
-       'config-memory-raised' => 'Lo paramètre <code>memory_limit</code> de PHP ére a $1, portâ a $2.',
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] est enstalâ',
-       'config-apc' => '[http://www.php.net/apc APC] est enstalâ',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] est enstalâ',
-       'config-diff3-bad' => 'GNU diff3 entrovâblo.',
-       'config-db-type' => 'Tipo de bâsa de balyês :',
-       'config-db-host' => 'Hôto de la bâsa de balyês :',
-       'config-db-host-oracle' => 'TNS de la bâsa de balyês :',
-       'config-db-wiki-settings' => 'Identifiar cél vouiqui',
-       'config-db-name' => 'Nom de la bâsa de balyês :',
-       'config-db-name-oracle' => 'Plan de bâsa de balyês :',
-       'config-db-install-account' => 'Compto usanciér por l’enstalacion',
-       'config-db-username' => 'Nom d’usanciér de la bâsa de balyês :',
-       'config-db-password' => 'Contresegno de la bâsa de balyês :',
-       'config-db-wiki-account' => 'Compto usanciér por l’opèracion normala',
-       'config-db-prefix' => 'Prèfixo de les trâbles de la bâsa de balyês :',
-       'config-db-charset' => 'Juè de caractèros de la bâsa de balyês',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binèro',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 rètrocompatiblo UTF-8',
-       'config-mysql-old' => 'MySQL $1 ou ben ples novél est nècèssèro, vos avéd $2.',
-       'config-db-port' => 'Pôrt de la bâsa de balyês :',
-       'config-db-schema' => 'Plan por MediaWiki',
-       'config-pg-test-error' => "Empossiblo de sè branchiér a la bâsa de donâs '''$1''' : $2",
-       'config-sqlite-dir' => 'Dossiér de les balyês SQLite :',
-       'config-oracle-def-ts' => "Èspâço de stocâjo (''tablespace'') per dèfôt :",
-       'config-oracle-temp-ts' => "Èspâço de stocâjo (''tablespace'') temporèro :",
-       'config-header-mysql' => 'Paramètres de MySQL',
-       'config-header-postgres' => 'Paramètres de PostgreSQL',
-       'config-header-sqlite' => 'Paramètres de SQLite',
-       'config-header-oracle' => 'Paramètres d’Oracle',
-       'config-invalid-db-type' => 'Tipo de bâsa de balyês envalido',
-       'config-missing-db-name' => 'Vos dête buchiér una valor por « Nom de la bâsa de balyês »',
-       'config-missing-db-host' => 'Vos dête buchiér una valor por « Hôto de la bâsa de balyês »',
-       'config-missing-db-server-oracle' => 'Vos dête buchiér una valor por « TNS de la bâsa de balyês »',
-       'config-sqlite-readonly' => 'Lo fichiér <code>$1</code> est pas accèssiblo en ècritura.',
-       'config-regenerate' => 'Refâre LocalSettings.php →',
-       'config-show-table-status' => 'Falyita de la requéta <code>SHOW TABLE STATUS</code> !',
-       'config-db-web-account' => 'Compto de la bâsa de balyês por l’accès vouèbe',
-       'config-db-web-account-same' => 'Utilisâd lo mémo compto que por l’enstalacion',
-       'config-db-web-create' => 'Féte lo compto s’ègziste p’oncor',
-       'config-mysql-engine' => 'Motor de stocâjo :',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-charset' => 'Juè de caractèros de la bâsa de balyês :',
-       'config-mysql-binary' => 'Binèro',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Nom du vouiqui :',
-       'config-site-name-blank' => 'Buchiéd un nom de seto.',
-       'config-project-namespace' => 'Èspâço de noms du projèt :',
-       'config-ns-generic' => 'Projèt',
-       'config-ns-site-name' => 'Mémo nom que lo vouiqui : $1',
-       'config-ns-other' => 'Ôtro (spècefiar)',
-       'config-ns-other-default' => 'MonVouiqui',
-       'config-admin-box' => 'Compto administrator',
-       'config-admin-name' => 'Voutron nom :',
-       'config-admin-password' => 'Contresegno :',
-       'config-admin-password-confirm' => 'Tornar buchiér lo contresegno :',
-       'config-admin-name-blank' => 'Buchiéd un nom d’administrator.',
-       'config-admin-password-blank' => 'Buchiéd un contresegno por lo compto administrator.',
-       'config-admin-email' => 'Adrèce èlèctronica :',
-       'config-optional-continue' => 'Mè posar més de quèstions.',
-       'config-profile' => 'Profil des drêts d’usanciér :',
-       'config-profile-wiki' => 'Vouiqui tradicionâl', # Fuzzy
-       'config-profile-no-anon' => 'Crèacion de compto nècèssèra',
-       'config-profile-fishbowl' => 'Solament los èditors ôtorisâs',
-       'config-profile-private' => 'Vouiqui privâ',
-       'config-license' => 'Drêts d’ôtor et licence :',
-       'config-license-none' => 'Gins de licence d’avâl la pâge',
-       'config-license-cc-by-sa' => 'Creative Commons patèrnitât - partâjo a l’identico',
-       'config-license-cc-by' => 'Creative Commons patèrnitât',
-       'config-license-cc-by-nc-sa' => 'Creative Commons patèrnitât pas comèrciâla - partâjo a l’identico',
-       'config-license-cc-0' => 'Creative Commons Zero (domêno publico)',
-       'config-license-gfdl' => 'Licence de documentacion libra GNU 1.3 ou ben ples novèla',
-       'config-license-pd' => 'Domêno publico',
-       'config-license-cc-choose' => 'Chouèsir una licence Creative Commons pèrsonalisâ',
-       'config-email-settings' => 'Paramètres de mèssageria èlèctronica',
-       'config-enable-email' => 'Activar los mèssâjos que sôrtont',
-       'config-email-user' => 'Activar los mèssâjos d’usanciér a usanciér',
-       'config-email-usertalk' => 'Activar la notificacion de les pâges de discussion ux usanciérs',
-       'config-email-watchlist' => 'Activar la notificacion de la lista de survelyence',
-       'config-email-auth' => 'Activar l’ôtenticacion per mèssageria èlèctronica',
-       'config-email-sender' => 'Adrèce èlèctronica de retôrn :',
-       'config-upload-settings' => 'Tèlèchargement de les émâges et des fichiérs',
-       'config-upload-enable' => 'Activar lo tèlèchargement des fichiérs',
-       'config-upload-deleted' => 'Dossiér por los fichiérs suprimâs :',
-       'config-logo' => 'URL du logô :',
-       'config-instantcommons' => 'Activar Instant Commons',
-       'config-cc-again' => 'Tornâd chouèsir...',
-       'config-advanced-settings' => 'Configuracion avanciê',
-       'config-cache-options' => 'Paramètres por la misa en cache de les chouses :',
-       'config-cache-accel' => 'Misa en cache de les chouses PHP (APC, XCache ou ben WinCache)',
-       'config-memcached-servers' => 'Sèrvors por memcached :',
-       'config-extensions' => 'Èxtensions',
-       'config-install-step-done' => 'fêt',
-       'config-install-step-failed' => 'falyita',
-       'config-install-extensions' => 'Encllusion de les èxtensions',
-       'config-install-database' => 'Crèacion de la bâsa de balyês',
-       'config-install-schema' => 'Crèacion de plan',
-       'config-install-pg-schema-not-exist' => 'Lo plan PostgreSQL ègziste pas',
-       'config-install-pg-commit' => 'Validacion des changements',
-       'config-install-pg-plpgsql' => 'Contrôlo du lengâjo PL/pgSQL',
-       'config-install-user' => 'Crèacion d’un usanciér de la bâsa de balyês',
-       'config-install-user-alreadyexists' => 'L’usanciér « $1 » ègziste ja',
-       'config-install-user-create-failed' => 'Falyita pendent la crèacion de l’usanciér « $1 » : $2',
-       'config-install-user-grant-failed' => 'Falyita pendent l’aponsa de pèrmissions a l’usanciér « $1 » : $2',
-       'config-install-tables' => 'Crèacion de les trâbles',
-       'config-install-interwiki' => 'Remplissâjo per dèfôt de la trâbla des entèrvouiquis',
-       'config-install-interwiki-list' => 'Empossiblo de trovar lo fichiér <code>interwiki.list</code>.',
-       'config-install-stats' => 'Inicialisacion de les statistiques',
-       'config-install-keys' => 'G·ènèracion de les cllâfs secrètes',
-       'config-install-sysop' => 'Crèacion du compto administrator',
-       'config-install-subscribe-fail' => 'Empossiblo de s’abonar a mediawiki-announce : $1',
-       'config-install-mainpage' => 'Crèacion de la pâge principâla avouéc un contegnu per dèfôt',
-       'config-install-extension-tables' => 'Crèacion de trâbles por les èxtensions activâs',
-       'config-install-mainpage-failed' => 'Empossiblo d’entrebetar la pâge principâla : $1',
-       'config-download-localsettings' => 'Tèlèchargiér <code>LocalSettings.php</code>',
-       'config-help' => 'éde',
-       'mainpagetext' => "'''MediaWiki at étâ enstalâ avouéc reusséta.'''",
-       'mainpagedocfooter' => 'Vêde lo [//meta.wikimedia.org/wiki/Aide:Contenu guido d’usanciér] por més d’enformacions sur l’usâjo de la programeria vouiqui.
-
-== Emmodar avouéc MediaWiki ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista des paramètres de configuracion]
-* [//www.mediawiki.org/wiki/Manual:FAQ/fr FDQ sur MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussion sur les distribucions de MediaWiki]', # Fuzzy
-);
-
-/** Northern Frisian (Nordfriisk)
- * @author Murma174
- * @author Pyt
- */
-$messages['frr'] = array(
-       'mainpagetext' => "'''MediaWiki wörd ma erfolch instaliird.'''",
-       'mainpagedocfooter' => "Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.
-
-== Getting started ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localise MediaWiki for your language]",
-);
-
-/** Friulian (furlan)
- */
-$messages['fur'] = array(
-       'mainpagetext' => "'''MediaWiki e je stade instalade cun sucès.'''",
-);
-
-/** Western Frisian (Frysk)
- */
-$messages['fy'] = array(
-       'mainpagetext' => "'''MediaWiki-program goed ynstallearre.'''",
-       'mainpagedocfooter' => "Rieplachtsje de [//meta.wikimedia.org/wiki/Help:Ynhâldsopjefte hantlieding] foar ynformaasje oer it gebrûk fan 'e wikisoftware.
-
-== Mear help oer Mediawiki ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings List mei ynstellings]
-* [//www.mediawiki.org/wiki/Manual:FAQ Faak stelde fragen (FAQ)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglist foar oankundigings fan nije ferzjes]", # Fuzzy
-);
-
-/** Irish (Gaeilge)
- * @author පසිඳු කාවින්ද
- */
-$messages['ga'] = array(
-       'config-page-language' => 'Teanga',
-       'config-page-name' => 'Ainm',
-       'config-admin-password' => "D'fhocal faire:",
-       'config-help' => 'Cuidiú',
-       'mainpagetext' => "'''D'éirigh le suiteáil MediaWiki.'''",
-       'mainpagedocfooter' => 'Féach ar [//meta.wikimedia.org/wiki/MediaWiki_localisation doiciméid um conas an chomhéadán a athrú]
-agus an [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Lámhleabhar úsáideora] chun cabhair úsáide agus fíoraíochta a fháil.', # Fuzzy
-);
-
-/** Gagauz (Gagauz)
- */
-$messages['gag'] = array(
-       'mainpagetext' => "'''MediaWiki başarılan kuruldu.'''",
-       'mainpagedocfooter' => "Vikilän iş uurunda bilgi almaa için [//meta.wikimedia.org/wiki/Help:Contents User's Guide] sayfasına bakınız
-
-== Eni başlayanlar için ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Simplified Gan script (赣语(简体)‎)
- */
-$messages['gan-hans'] = array(
-       'mainpagetext' => "'''安装正MediaWiki喽。'''",
-       'mainpagedocfooter' => '参看[//meta.wikimedia.org/wiki/Help:Contents 用户指南]里头会话到啷用wiki软件
-
-== 开始使用 ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki 配置设定列表]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 平常问题解答]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 发布email清单]', # Fuzzy
-);
-
-/** Traditional Gan script (贛語(繁體)‎)
- * @author Symane
- */
-$messages['gan-hant'] = array(
-       'mainpagetext' => "'''安裝正MediaWiki哩。'''",
-       'mainpagedocfooter' => '參看[//meta.wikimedia.org/wiki/Help:Contents 用戶指南]裡頭會話到啷用wiki軟件
-
-== 開始使用 ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki 配置設定列表]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 平常問題解答]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈email清單]', # Fuzzy
-);
-
-/** Scottish Gaelic (Gàidhlig)
- * @author Akerbeltz
- */
-$messages['gd'] = array(
-       'mainpagetext' => "'''Chaidh MediaWiki a stàladh gu soirbheachail.'''",
-       'mainpagedocfooter' => "Cuir sùil air [//meta.wikimedia.org/wiki/Help:Contents treòir nan cleachdaichean] airson fiosrachadh mu chleachdadh a' bhathar-bhog wiki.
-
-== Toiseach tòiseachaidh ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liosta suidheachadh nan roghainnean]
-* [//www.mediawiki.org/wiki/Manual:FAQ CÀBHA MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liosta puist nan sgaoilidhean MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Cuir do chànan air MediaWiki]",
-);
-
-/** Galician (galego)
- * @author Elisardojm
- * @author Toliño
- * @author 아라
- */
-$messages['gl'] = array(
-       'config-desc' => 'O programa de instalación de MediaWiki',
-       'config-title' => 'Instalación de MediaWiki $1',
-       'config-information' => 'Información',
-       'config-localsettings-upgrade' => 'Detectouse un ficheiro <code>LocalSettings.php</code>.
-Para actualizar esta instalación, introduza o valor de <code>$wgUpgradeKey</code> na caixa.
-Pode atopalo en <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Detectouse un ficheiro <code>LocalSettings.php</code>.
-Para actualizar esta instalación, execute <code>update.php</code>',
-       'config-localsettings-key' => 'Clave de actualización:',
-       'config-localsettings-badkey' => 'A clave dada é incorrecta',
-       'config-upgrade-key-missing' => 'Detectouse unha instalación existente de MediaWiki.
-Para actualizar esta instalación, inclúa esta liña ao final do ficheiro <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => 'Semella que o ficheiro <code>LocalSettings.php</code> existente está incompleto.
-A variable $1 non está establecida.
-Modifique o ficheiro <code>LocalSettings.php</code> de xeito que a variable quede establecida e prema en "{{int:Config-continue}}".',
-       'config-localsettings-connection-error' => 'Atopouse un erro ao conectar coa base de datos empregando a configuración especificada no ficheiro <code>LocalSettings.php</code> ou no ficheiro <code>AdminSettings.php</code>. Corrixa esta configuración e inténteo de novo.
-
-$1',
-       'config-session-error' => 'Erro ao iniciar a sesión: $1',
-       'config-session-expired' => 'Semella que os seus datos da sesión caducaron.
-As sesións están configuradas para unha duración de $1.
-Pode incrementar isto fixando <code>session.gc_maxlifetime</code> en php.ini.
-Reinicie o proceso de instalación.',
-       'config-no-session' => 'Perdéronse os datos da súa sesión!
-Comprobe o seu php.ini e asegúrese de que en <code>session.save_path</code> está definido un directorio correcto.',
-       'config-your-language' => 'A súa lingua:',
-       'config-your-language-help' => 'Seleccione a lingua que se empregará durante o proceso de instalación.',
-       'config-wiki-language' => 'Lingua do wiki:',
-       'config-wiki-language-help' => 'Seleccione a lingua que predominará no wiki.',
-       'config-back' => '← Volver',
-       'config-continue' => 'Continuar →',
-       'config-page-language' => 'Lingua',
-       'config-page-welcome' => 'Benvido a MediaWiki!',
-       'config-page-dbconnect' => 'Conectarse á base de datos',
-       'config-page-upgrade' => 'Actualizar a instalación actual',
-       'config-page-dbsettings' => 'Configuración da base de datos',
-       'config-page-name' => 'Nome',
-       'config-page-options' => 'Opcións',
-       'config-page-install' => 'Instalar',
-       'config-page-complete' => 'Completo!',
-       'config-page-restart' => 'Reiniciar a instalación',
-       'config-page-readme' => 'Léame',
-       'config-page-releasenotes' => 'Notas de lanzamento',
-       'config-page-copying' => 'Copiar',
-       'config-page-upgradedoc' => 'Actualizar',
-       'config-page-existingwiki' => 'Wiki existente',
-       'config-help-restart' => 'Quere eliminar todos os datos gardados e reiniciar o proceso de instalación?',
-       'config-restart' => 'Si, reiniciala',
-       'config-welcome' => '=== Comprobación da contorna ===
-Cómpre realizar agora unhas comprobacións básicas para ver se a contorna é axeitada para a instalación de MediaWiki.
-Lembre incluír esta información se necesita axuda para completar a instalación.',
-       'config-copyright' => "=== Dereitos de autor e termos de uso ===
-
-$1
-
-Este programa é software libre; pode redistribuílo e/ou modificalo segundo os termos da licenza pública xeral GNU publicada pola Free Software Foundation; versión 2 ou (na súa escolla) calquera outra posterior.
-
-Este programa distribúese coa esperanza de que poida ser útil, pero '''sen garantía ningunha'''; nin sequera a garantía implícita de '''comercialización''' ou '''adecuación a unha finalidade específica'''.
-Olle a licenza pública xeral GNU para obter máis detalles.
-
-Debería recibir <doclink href=Copying>unha copia da licenza pública xeral GNU</doclink> xunto ao programa; se non é así, escriba á Free Software Foundation, Inc., rúa Franklin, número 51, quinto andar, Boston, Massachusetts, 02110-1301, Estados Unidos de América ou [http://www.gnu.org/copyleft/gpl.html lea a licenza en liña].",
-       'config-sidebar' => '* [//www.mediawiki.org/wiki/MediaWiki/gl Páxina principal de MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents Guía de usuario]
-* [//www.mediawiki.org/wiki/Manual:Contents Guía de administrador]
-* [//www.mediawiki.org/wiki/Manual:FAQ Preguntas máis frecuentes]
-----
-* <doclink href=Readme>Léame</doclink>
-* <doclink href=ReleaseNotes>Notas de lanzamento</doclink>
-* <doclink href=Copying>Copia</doclink>
-* <doclink href=UpgradeDoc>Actualizacións</doclink>',
-       'config-env-good' => 'Rematou a comprobación da contorna.
-Pode instalar MediaWiki.',
-       'config-env-bad' => 'Rematou a comprobación da contorna.
-Non pode instalar MediaWiki.',
-       'config-env-php' => 'Está instalado o PHP $1.',
-       'config-env-php-toolow' => 'Está instalado o PHP $1.
-Porén, MediaWiki necesita o PHP $2 ou superior.',
-       'config-unicode-using-utf8' => 'Usando utf8_normalize.so de Brion Vibber para a normalización Unicode.',
-       'config-unicode-using-intl' => 'Usando a [http://pecl.php.net/intl extensión intl PECL] para a normalización Unicode.',
-       'config-unicode-pure-php-warning' => "'''Atención:''' A [http://pecl.php.net/intl extensión intl PECL] non está dispoñible para manexar a normalización Unicode; volvendo á implementación lenta de PHP puro.
-Se o seu sitio posúe un alto tráfico de visitantes, debería ler un chisco sobre a [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalización Unicode].",
-       'config-unicode-update-warning' => "'''Atención:''' A versión instalada da envoltura de normalización Unicode emprega unha versión vella da biblioteca [http://site.icu-project.org/ do proxecto ICU].
-Debería [//www.mediawiki.org/wiki/Unicode_normalization_considerations actualizar] se o uso de Unicode é importante para vostede.",
-       'config-no-db' => 'Non se puido atopar un controlador axeitado para a base de datos! Necesita instalar un controlador de base de datos para PHP.
-Os tipos de base de datos admitidos son os seguintes: $1.
-
-Se está nun aloxamento compartido, pregunte ao seu provedor de hospedaxe para instalar un controlador de base de datos axeitado.
-Se compilou o PHP vostede mesmo, reconfigúreo activando un cliente de base de datos, por exemplo, usando <code>./configure --with-mysql</code>.
-Se instalou o PHP desde un paquete Debian ou Ubuntu, entón tamén necesita instalar o módulo php5-mysql.',
-       'config-outdated-sqlite' => "'''Atención:''' Ten o SQLite $1, que é inferior á versión mínima necesaria: $2. O SQLite non estará dispoñible.",
-       'config-no-fts3' => "'''Atención:''' O SQLite está compilado sen o [//sqlite.org/fts3.html módulo FTS3]; as características de procura non estarán dispoñibles nesta instalación.",
-       'config-register-globals' => "'''Atención: A opción PHP <code>[http://php.net/register_globals register_globals]</code> está activada.'''
-'''Desactívea se pode.'''
-MediaWiki funcionará, pero o seu servidor está exposto a potenciais vulnerabilidades de seguridade.",
-       'config-magic-quotes-runtime' => "'''Erro fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está activado!'''
-Esta opción corrompe os datos de entrada de xeito imprevisible.
-Non pode instalar ou empregar MediaWiki a menos que esta opción estea desactivada.",
-       'config-magic-quotes-sybase' => "'''Erro fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está activado!'''
-Esta opción corrompe os datos de entrada de xeito imprevisible.
-Non pode instalar ou empregar MediaWiki a menos que esta opción estea desactivada.",
-       'config-mbstring' => "'''Erro fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está activado!'''
-Esta opción causa erros e pode corromper os datos de xeito imprevisible.
-Non pode instalar ou empregar MediaWiki a menos que esta opción estea desactivada.",
-       'config-ze1' => "'''Erro fatal: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] está activado!'''
-Esta opción causa erros horribles en MediaWiki.
-Non pode instalar ou empregar MediaWiki a menos que esta opción estea desactivada.",
-       'config-safe-mode' => "'''Atención:''' O [http://www.php.net/features.safe-mode safe mode] do PHP está activado.
-Isto pode causar problemas, particularmente se emprega cargas de ficheiros e soporte de <code>math</code>.",
-       'config-xml-bad' => 'Falta o módulo XML do PHP.
-MediaWiki necesita funcións neste módulo e non funcionará con esta configuración.
-Se está executando o Mandrake, instale o paquete php-xml.',
-       'config-pcre' => 'Semella que falta o módulo de soporte PCRE.
-MediaWiki necesita que funcionen as expresións regulares compatibles co Perl.',
-       'config-pcre-no-utf8' => "'''Erro fatal:''' Semella que o módulo PCRE do PHP foi compilado sen o soporte PCRE_UTF8.
-MediaWiki necesita soporte UTF-8 para funcionar correctamente.",
-       'config-memory-raised' => 'O parámetro <code>memory_limit</code> do PHP é $1. Aumentado a $2.',
-       'config-memory-bad' => "'''Atención:''' O parámetro <code>memory_limit</code> do PHP é $1.
-Probablemente é un valor baixo de máis.
-A instalación pode fallar!",
-       'config-ctype' => "'''Erro fatal:''' O PHP debe compilarse co soporte para a [http://www.php.net/manual/en/ctype.installation.php extensión Ctype].",
-       'config-json' => "'''Erro fatal:''' O PHP compilouse sen o soporte de JSON.
-Debe instalar ben a extensión JSON do PHP ou a extensión [http://pecl.php.net/package/jsonc PECL jsonc] antes de instalar MediaWiki.
-* A extensión do PHP está incluída en Red Hat Enterprise Linux (CentOS) 5 e 6, mais debe activarse <code>/etc/php.ini</code> ou <code>/etc/php.d/json.ini</code>.
-* Algunhas distribucións do Linux lanzadas despois de maio de 2013 omiten a extensión do PHP, pero inclúen a extensión PECL como <code>php5-json</code> ou <code>php-pecl-jsonc</code>.",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] está instalado',
-       'config-apc' => '[http://www.php.net/apc APC] está instalado',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado',
-       'config-no-cache' => "'''Atención:''' Non se puido atopar [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] ou [http://www.iis.net/download/WinCacheForPhp WinCache].
-A caché de obxectos está desactivada.",
-       'config-mod-security' => "'''Atención:''' O seu servidor web ten o [http://modsecurity.org/ mod_security] activado. Se estivese mal configurado, pode causar problemas a MediaWiki ou calquera outro software que permita aos usuarios publicar contidos arbitrarios.
-Olle a [http://modsecurity.org/documentation/ documentación do mod_security] ou póñase en contacto co soporte do seu servidor se atopa erros aleatorios.",
-       'config-diff3-bad' => 'GNU diff3 non se atopou.',
-       'config-git' => 'Atopouse o software de control da versión de Git: <code>$1</code>.',
-       'config-git-bad' => 'Non se atopou o software de control da versión de Git.',
-       'config-imagemagick' => 'ImageMagick atopado: <code>$1</code>.
-As miniaturas de imaxes estarán dispoñibles se activa as cargas.',
-       'config-gd' => 'Atopouse a biblioteca gráfica GD integrada.
-As miniaturas de imaxes estarán dispoñibles se activa as cargas.',
-       'config-no-scaling' => 'Non se puido atopar a biblioteca GD ou ImageMagick.
-As miniaturas de imaxes estarán desactivadas.',
-       'config-no-uri' => "'''Erro:''' Non se puido determinar o URI actual.
-Instalación abortada.",
-       'config-no-cli-uri' => "'''Aviso:''' Non se especificou ningún --scriptpath; por defecto, usarase: <code>$1</code>.",
-       'config-using-server' => 'Usando o nome do servidor "<nowiki>$1</nowiki>".',
-       'config-using-uri' => 'Usando o URL do servidor "<nowiki>$1$2</nowiki>".',
-       'config-uploads-not-safe' => "'''Atención:''' O seu directorio por defecto para as cargas, <code>$1</code>, é vulnerable a execucións arbitrarias de escrituras.
-Aínda que MediaWiki comproba todos os ficheiros cargados por se houbese ameazas de seguridade, é amplamente recomendable [//www.mediawiki.org/wiki/Manual:Security#Upload_security pechar esta vulnerabilidade de seguridade] antes de activar as cargas.",
-       'config-no-cli-uploads-check' => "'''Atención:''' Durante a instalación CLI, o seu directorio por defecto para as cargas, <code>$1</code>, non se comproba fronte a posibles vulnerabilidades de execucións arbitrarias de escrituras.",
-       'config-brokenlibxml' => 'O seu sistema ten unha combinación de versións de PHP e libxml2 que pode ser problemático e causar corrupción de datos en MediaWiki e outras aplicacións web.
-Actualice o sistema á versión 5.2.9 ou posterior do PHP e á 2.7.3 ou posterior de libxml2 ([//bugs.php.net/bug.php?id=45996 erro presentado co PHP]).
-Instalación abortada.',
-       'config-using531' => 'O PHP $1 non é compatible con MediaWiki debido a un erro que afecta aos parámetros de referencia de <code>__call()</code>.
-Actualice o sistema á versión 5.3.2 ou posterior do PHP ou volva á versión 5.3.0 do PHP para arranxar o problema.
-Instalación abortada.',
-       'config-suhosin-max-value-length' => 'Suhosin está instalado e limita o parámetro GET <code>length</code> a $1 bytes.
-O compoñente ResourceLoader (xestor de recursos) de MediaWiki traballa neste límite, pero este prexudica o rendemento.
-Se é posible, debería establecer <code>suhosin.get.max_value_length</code> no valor 1024 ou superior en <code>php.ini</code> e establecer <code>$wgResourceLoaderMaxQueryLength</code> no mesmo valor en <code>LocalSettings.php</code>.',
-       'config-db-type' => 'Tipo de base de datos:',
-       'config-db-host' => 'Servidor da base de datos:',
-       'config-db-host-help' => 'Se o servidor da súa base de datos está nun servidor diferente, escriba o nome do servidor ou o enderezo IP aquí.
-
-Se está usando un aloxamento web compartido, o seu provedor de hospedaxe debe darlle o nome de servidor correcto na súa documentación.
-
-Se está a realizar a instalación nun servidor de Windows con MySQL, o nome "localhost" pode non valer como servidor. Se non funcionase, inténteo con "127.0.0.1" como enderezo IP local.
-
-Se está usando PostgreSQL, deixe este campo en branco para facer a conexión a través do conectador Unix.',
-       'config-db-host-oracle' => 'TNS da base de datos:',
-       'config-db-host-oracle-help' => 'Insira un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nome de conexión local] válido; cómpre que haxa visible un ficheiro tnsnames.ora para esta instalación.<br />Se está a empregar bibliotecas cliente versión 10g ou máis recentes, tamén pode usar o método de atribución de nomes [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
-       'config-db-wiki-settings' => 'Identificar o wiki',
-       'config-db-name' => 'Nome da base de datos:',
-       'config-db-name-help' => 'Escolla un nome que identifique o seu wiki.
-Non debe conter espazos.
-
-Se está usando un aloxamento web compartido, o seu provedor de hospedaxe daralle un nome específico para a base de datos ou deixaralle crear unha a través do panel de control.',
-       'config-db-name-oracle' => 'Esquema da base de datos:',
-       'config-db-account-oracle-warn' => 'Existen tres escenarios soportados para a instalación de Oracle como fin da base de datos:
-
-Se quere crear unha conta para a base de datos como parte do proceso de instalación, proporcione unha conta co papel SYSDBA e especifique as credenciais desexadas para a conta; senón pode crear a conta manualmente e dar só esa conta (se ten os permisos necesarios para crear os obxectos do esquema) ou fornecer dous contas diferentes, unha con privilexios de creación e outra restrinxida para o acceso á web.
-
-A escritura para crear unha conta cos privilexios necesarios atópase no directorio "maintenance/oracle/" desta instalación. Teña en conta que o emprego de contas restrinxidas desactivará todas as operacións de mantemento da conta predeterminada.',
-       'config-db-install-account' => 'Conta de usuario para a instalación',
-       'config-db-username' => 'Nome de usuario da base de datos:',
-       'config-db-password' => 'Contrasinal da base de datos:',
-       'config-db-password-empty' => 'Introduza un contrasinal para o novo usuario da base de datos: $1.
-Malia que é posible crear usuarios sen contrasinal, esta práctica non é segura.',
-       'config-db-install-username' => 'Escriba o nome de usuario que empregará para conectarse á base de datos durante o proceso de instalación. Este non é o nome de usuario da conta de MediaWiki, trátase do nome de usuario para a súa base de datos.',
-       'config-db-install-password' => 'Escriba o contrasinal que empregará para conectarse á base de datos durante o proceso de instalación. Este non é o contrasinal da conta de MediaWiki, trátase do contrasinal para a súa base de datos.',
-       'config-db-install-help' => 'Introduza o nome de usuario e contrasinal que se usará para conectar á base de datos durante o proceso de instalación.',
-       'config-db-account-lock' => 'Use o mesmo nome de usuario e contrasinal despois do proceso de instalación',
-       'config-db-wiki-account' => 'Conta de usuario para despois do proceso de instalación',
-       'config-db-wiki-help' => 'Introduza o nome de usuario e mais o contrasinal que se usarán para conectar á base de datos durante o funcionamento habitual do wiki.
-Se a conta non existe e a conta de instalación ten privilexios suficientes, esa conta de usuario será creada cos privilexios mínimos necesarios para o funcionamento do wiki.',
-       'config-db-prefix' => 'Prefixo das táboas da base de datos:',
-       'config-db-prefix-help' => 'Se necesita compartir unha base de datos entre varios wikis ou entre MediaWiki e outra aplicación web, pode optar por engadir un prefixo a todos os nomes da táboa para evitar conflitos.
-Non utilice espazos.
-
-O normal é que este campo quede baleiro.',
-       'config-db-charset' => 'Conxunto de caracteres da base de datos',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binario',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 retrocompatible UTF-8',
-       'config-charset-help' => "'''Atención:''' Se emprega '''backwards-compatible UTF-8''' no MySQL 4.1+ e posteriormente realiza unha copia de seguridade da base de datos con <code>mysqldump</code>, pode destruír todos os caracteres que non sexan ASCII, corrompendo de xeito irreversible as súas copias!
-
-No '''modo binario''', MediaWiki almacena texto UTF-8 na base de datos en campos binarios.
-Isto é máis eficaz ca o modo UTF-8 de MySQL e permítelle usar o rango completo de caracteres Unicode.
-No '''modo UTF-8''', MySQL saberá o xogo de caracteres dos seus datos e pode presentar e converter os datos de maneira axeitada,
-pero non lle deixará gardar caracteres por riba do [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingüe básico].",
-       'config-mysql-old' => 'Necesítase MySQL $1 ou posterior; ten a versión $2.',
-       'config-db-port' => 'Porto da base de datos:',
-       'config-db-schema' => 'Esquema para MediaWiki',
-       'config-db-schema-help' => 'O normal é que este esquema sexa correcto.
-Cámbieo soamente se sabe que é necesario.',
-       'config-pg-test-error' => "Non se pode conectar coa base de datos '''$1''': $2",
-       'config-sqlite-dir' => 'Directorio de datos SQLite:',
-       'config-sqlite-dir-help' => "SQLite recolle todos os datos nun ficheiro único.
-
-O servidor web debe ter permisos sobre o directorio para que poida escribir nel durante a instalación.
-
-Ademais, o servidor '''non''' debe ser accesible a través da web, motivo polo que non está no mesmo lugar ca os ficheiros PHP.
-
-Asemade, o programa de instalación escribirá un ficheiro <code>.htaccess</code>, pero se erra alguén pode obter acceso á súa base de datos.
-Isto inclúe datos de usuario (enderezos de correo electrónico, contrasinais codificados), así como revisións borradas e outros datos restrinxidos no wiki.
-
-Considere poñer a base de datos nun só lugar, por exemplo en <code>/var/lib/mediawiki/oseuwiki</code>.",
-       'config-oracle-def-ts' => 'Espazo de táboas por defecto:',
-       'config-oracle-temp-ts' => 'Espazo de táboas temporal:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => 'MediaWiki soporta os seguintes sistemas de bases de datos:
-
-$1
-
-Se non ve listado a continuación o sistema de base de datos que intenta usar, siga as instrucións ligadas enriba para activar o soporte.',
-       'config-support-mysql' => '* $1 é o obxectivo principal para MediaWiki e está mellor soportado ([http://www.php.net/manual/en/mysql.installation.php como compilar o PHP con soporte MySQL])',
-       'config-support-postgres' => '* $1 é un sistema de base de datos popular e de código aberto como alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php como compilar o PHP con soporte PostgreSQL]). É posible que haxa algúns pequenos erros e non se recomenda o seu uso nunha contorna de produción.',
-       'config-support-sqlite' => '* $1 é un sistema de base de datos lixeiro moi ben soportado. ([http://www.php.net/manual/en/pdo.installation.php Como compilar o PHP con soporte SQLite], emprega PDO)',
-       'config-support-oracle' => '* $1 é un sistema comercial de xestión de base de datos de empresa. ([http://www.php.net/manual/en/oci8.installation.php Como compilar o PHP con soporte OCI8])',
-       'config-header-mysql' => 'Configuración do MySQL',
-       'config-header-postgres' => 'Configuración do PostgreSQL',
-       'config-header-sqlite' => 'Configuración do SQLite',
-       'config-header-oracle' => 'Configuración do Oracle',
-       'config-invalid-db-type' => 'Tipo de base de datos incorrecto',
-       'config-missing-db-name' => 'Debe escribir un valor "Nome da base de datos"',
-       'config-missing-db-host' => 'Debe escribir un valor "Servidor da base de datos"',
-       'config-missing-db-server-oracle' => 'Debe escribir un valor "TNS da base de datos"',
-       'config-invalid-db-server-oracle' => 'O TNS da base de datos, "$1", é incorrecto.
-Utilice só "TNS Name" ou unha cadea de texto "Easy Connect" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm métodos de nomeamento de Oracle])',
-       'config-invalid-db-name' => 'O nome da base de datos, "$1", é incorrecto.
-Só pode conter letras ASCII (a-z, A-Z), números (0-9), guións baixos (_) e guións (-).',
-       'config-invalid-db-prefix' => 'O prefixo da base de datos, "$1", é incorrecto.
-Só pode conter letras ASCII (a-z, A-Z), números (0-9), guións baixos (_) e guións (-).',
-       'config-connection-error' => '$1.
-
-Comprobe o servidor, nome de usuario e contrasinal que hai a continuación e inténteo de novo.',
-       'config-invalid-schema' => 'O esquema de MediaWiki, "$1", é incorrecto.
-Só pode conter letras ASCII (a-z, A-Z), números (0-9) e guións baixos (_).',
-       'config-db-sys-create-oracle' => 'O programa de instalación soamente soporta o emprego de contas SYSDBA como método para crear unha nova conta.',
-       'config-db-sys-user-exists-oracle' => 'A conta de usuario "$1" xa existe. SYSDBA soamente se pode empregar para a creación dunha nova conta!',
-       'config-postgres-old' => 'Necesítase PostgreSQL $1 ou posterior; ten a versión $2.',
-       'config-sqlite-name-help' => 'Escolla un nome que identifique o seu wiki.
-Non utilice espazos ou guións.
-Este nome será utilizado para o ficheiro de datos SQLite.',
-       'config-sqlite-parent-unwritable-group' => 'Non se puido crear o directorio de datos <code><nowiki>$1</nowiki></code>, porque o servidor web non pode escribir no directorio pai <code><nowiki>$2</nowiki></code>.
-
-O programa de instalación determinou o usuario que executa o seu servidor web.
-Para continuar, faga que se poida escribir no directorio <code><nowiki>$3</nowiki></code>.
-Nun sistema Unix/Linux cómpre realizar:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Non se puido crear o directorio de datos <code><nowiki>$1</nowiki></code>, porque o servidor web non pode escribir no directorio pai <code><nowiki>$2</nowiki></code>.
-
-O programa de instalación non puido determinar o usuario que executa o seu servidor web.
-Para continuar, faga que se poida escribir globalmente no directorio <code><nowiki>$3</nowiki></code>.
-Nun sistema Unix/Linux cómpre realizar:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Erro ao crear o directorio de datos "$1".
-Comprobe a localización e inténteo de novo.',
-       'config-sqlite-dir-unwritable' => 'Non se puido escribir o directorio "$1".
-Cambie os permisos para que o servidor poida escribir nel e inténteo de novo.',
-       'config-sqlite-connection-error' => '$1.
-
-Comprobe o directorio de datos e o nome da base de datos que hai a continuación e inténteo de novo.',
-       'config-sqlite-readonly' => 'Non se pode escribir no ficheiro <code>$1</code>.',
-       'config-sqlite-cant-create-db' => 'Non se puido crear o ficheiro da base de datos <code>$1</code>.',
-       'config-sqlite-fts3-downgrade' => 'Falta o soporte FTS3 para o PHP; diminuíndo as táboas',
-       'config-can-upgrade' => "Existen táboas MediaWiki nesta base de datos.
-Para actualizalas a MediaWiki \$1, prema sobre \"'''Continuar'''\".",
-       'config-upgrade-done' => "Actualización completada.
-
-Agora pode [$1 comezar a utilizar o seu wiki].
-
-Se quere rexenerar o seu ficheiro <code>LocalSettings.php</code>, prema no botón que aparece a continuación.
-Isto '''non é recomendable''' a menos que estea a ter problemas co seu wiki.",
-       'config-upgrade-done-no-regenerate' => 'Actualización completada.
-
-Xa pode [$1 comezar a usar o seu wiki].',
-       'config-regenerate' => 'Rexenerar LocalSettings.php →',
-       'config-show-table-status' => 'A pescuda <code>SHOW TABLE STATUS</code> fallou!',
-       'config-unknown-collation' => "'''Atención:''' A base de datos está a empregar unha clasificación alfabética irrecoñecible.",
-       'config-db-web-account' => 'Conta na base de datos para o acceso á internet',
-       'config-db-web-help' => 'Seleccione o nome de usuario e contrasinal que o servidor web empregará para se conectar ao servidor da base de datos durante o funcionamento normal do wiki.',
-       'config-db-web-account-same' => 'Empregar a mesma conta que para a instalación',
-       'config-db-web-create' => 'Crear a conta se aínda non existe',
-       'config-db-web-no-create-privs' => 'A conta que especificou para a instalación non ten os privilexios suficientes para crear unha conta.
-A conta que se especifique aquí xa debe existir.',
-       'config-mysql-engine' => 'Motor de almacenamento:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Atención:''' Seleccionou MyISAM como o motor de almacenamento para MySQL, unha combinación non recomendada para MediaWiki, porque:
-* practicamente non soporta os accesos simultáneos debido ao bloqueo de táboas
-* é máis propenso a corromperse ca outros motores
-* o código base de MediaWiki non sempre manexa o MyISAM como debera
-
-Se a súa instalación MySQL soporta InnoDB, recoméndase elixilo no canto de MyISAM.
-Se a súa instalación MySQL non soporta InnoDB, quizais sexa boa idea realizar unha actualización.",
-       'config-mysql-only-myisam-dep' => "'''Atención:''' MyISAM é o único motor de almacenamento para MySQL, unha combinación non recomendada para MediaWiki, porque:
-* practicamente non soporta os accesos simultáneos debido ao bloqueo de táboas
-* é máis propenso a corromperse ca outros motores
-* o código base de MediaWiki non sempre manexa o MyISAM como debera
-
-A súa instalación MySQL non soporta InnoDB, quizais sexa boa idea realizar unha actualización.",
-       'config-mysql-engine-help' => "'''InnoDB''' é case sempre a mellor opción, dado que soporta ben os accesos simultáneos.
-
-'''MyISAM''' é máis rápido en instalacións de usuario único e de só lectura.
-As bases de datos MyISAM tenden a se corromper máis a miúdo ca as bases de datos InnoDB.",
-       'config-mysql-charset' => 'Conxunto de caracteres da base de datos:',
-       'config-mysql-binary' => 'Binario',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "No '''modo binario''', MediaWiki almacena texto UTF-8 na base de datos en campos binarios.
-Isto é máis eficaz ca o modo UTF-8 de MySQL e permítelle usar o rango completo de caracteres Unicode.
-
-No '''modo UTF-8''', MySQL saberá o xogo de caracteres dos seus datos e pode presentar e converter os datos de maneira axeitada,
-pero non lle deixará gardar caracteres por riba do [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingüe básico].",
-       'config-site-name' => 'Nome do wiki:',
-       'config-site-name-help' => 'Isto aparecerá na barra de títulos do navegador e noutros lugares.',
-       'config-site-name-blank' => 'Escriba o nome do sitio.',
-       'config-project-namespace' => 'Espazo de nomes do proxecto:',
-       'config-ns-generic' => 'Proxecto',
-       'config-ns-site-name' => 'O mesmo nome que o wiki: $1',
-       'config-ns-other' => 'Outro (especificar)',
-       'config-ns-other-default' => 'OMeuWiki',
-       'config-project-namespace-help' => 'Seguindo o exemplo da Wikipedia, moitos wikis manteñen as súas páxinas de políticas separadas das súas páxinas de contido, nun "\'\'\'espazo de nomes do proxecto\'\'\'".
-Todos os títulos presentes neste espazo de nomes comezan cun prefixo determinado, que pode especificar aquí.
-Tradicionalmente, este prefixo deriva do nome do wiki, pero non pode conter caracteres de puntuación como "#" ou ":".',
-       'config-ns-invalid' => 'O espazo de nomes especificado, "<nowiki>$1</nowiki>", é incorrecto.
-Especifique un espazo de nomes do proxecto diferente.',
-       'config-ns-conflict' => 'O espazo de nomes especificado, "<nowiki>$1</nowiki>", entra en conflito co espazo de nomes MediaWiki por defecto.
-Especifique un espazo de nomes do proxecto diferente.',
-       'config-admin-box' => 'Conta de administrador',
-       'config-admin-name' => 'O seu nome:',
-       'config-admin-password' => 'Contrasinal:',
-       'config-admin-password-confirm' => 'Repita o contrasinal:',
-       'config-admin-help' => 'Escriba o nome de usuario que queira aquí, por exemplo, "Joe Bloggs".
-Este é o nome que usará para acceder ao sistema do wiki.',
-       'config-admin-name-blank' => 'Escriba un nome de usuario para o administrador.',
-       'config-admin-name-invalid' => 'O nome de usuario especificado, "<nowiki>$1</nowiki>", é incorrecto.
-Especifique un nome de usuario diferente.',
-       'config-admin-password-blank' => 'Escriba un contrasinal para a conta de administrador.',
-       'config-admin-password-same' => 'O contrasinal debe diferir do nome de usuario.',
-       'config-admin-password-mismatch' => 'Os contrasinais non coinciden.',
-       'config-admin-email' => 'Enderezo de correo electrónico:',
-       'config-admin-email-help' => 'Escriba aquí un enderezo de correo electrónico para que poida recibir mensaxes doutros usuarios a través do wiki, restablecer o contrasinal e ser notificado das modificacións feitas nas páxinas presentes na súa lista de vixilancia. Pode deixar este campo en branco.',
-       'config-admin-error-user' => 'Erro interno ao crear un administrador co nome "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'Erro interno ao establecer un contrasinal para o administrador "<nowiki>$1</nowiki>": <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Escribiu un enderezo de correo electrónico non válido.',
-       'config-subscribe' => 'Subscríbase á [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista de correo de anuncios sobre lanzamentos].',
-       'config-subscribe-help' => 'Esta é unha lista de correos de baixo volume usada para anuncios sobre lanzamentos de novas versións, incluíndo avisos de seguridade importantes.
-Debería subscribirse a ela e actualizar a súa instalación MediaWiki cando saian as novas versións.',
-       'config-subscribe-noemail' => 'Intentou subscribirse á lista de correo dos anuncios de novos lanzamentos sen proporcionar o enderezo de correo electrónico.
-Dea un enderezo de correo electrónico se quere efectuar a subscrición á lista de correo.',
-       'config-almost-done' => 'Xa case rematou!
-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 aberto',
-       'config-profile-no-anon' => 'Necesítase a creación dunha conta',
-       'config-profile-fishbowl' => 'Só os editores autorizados',
-       'config-profile-private' => 'Wiki privado',
-       'config-profile-help' => "Os wikis funcionan mellor canta máis xente os edite.
-En MediaWiki, é doado revisar os cambios recentes e reverter calquera dano feito por usuarios novatos ou con malas intencións.
-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 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.
-O tipo '''{{int:config-profile-private}}''' só deixa que os usuarios aprobados vexan e editen as páxinas.
-
-Hai dispoñibles configuracións de dereitos de usuario máis complexas despois da instalación; bótelle un ollo a [//www.mediawiki.org/wiki/Manual:User_rights esta entrada no manual].",
-       'config-license' => 'Dereitos de autor e licenza:',
-       'config-license-none' => 'Sen licenza ao pé',
-       'config-license-cc-by-sa' => 'Creative Commons recoñecemento compartir igual',
-       'config-license-cc-by' => 'Creative Commons recoñecemento',
-       'config-license-cc-by-nc-sa' => 'Creative Commons recoñecemento non comercial compartir igual',
-       'config-license-cc-0' => 'Creative Commons Zero (dominio público)',
-       'config-license-gfdl' => 'Licenza de documentación libre de GNU 1.3 ou posterior',
-       'config-license-pd' => 'Dominio público',
-       'config-license-cc-choose' => 'Seleccione unha licenza Creative Commons personalizada',
-       'config-license-help' => "Moitos wikis públicos liberan todas as súas contribucións baixo unha [http://freedomdefined.org/Definition/Gl licenza libre].
-Isto axuda a crear un sentido de propiedade comunitaria e anima a seguir contribuíndo durante moito tempo.
-Xeralmente, non é necesario nos wikis privados ou de empresas.
-
-Se quere poder empregar textos da Wikipedia, así como que a Wikipedia poida aceptar textos copiados do seu wiki, escolla a licenza '''Creative Commons recoñecemento compartir igual'''.
-
-A licenza de documentación libre de GNU era a licenza anterior da Wikipedia.
-Malia aínda ser unha licenza válida, é difícil de entender.
-Tamén é difícil reusar contidos baixo esta licenza.",
-       'config-email-settings' => 'Configuración do correo electrónico',
-       'config-enable-email' => 'Activar os correos electrónicos de saída',
-       'config-enable-email-help' => 'Se quere que o correo electrónico funcione, cómpre configurar os [http://www.php.net/manual/en/mail.configuration.php parámetros PHP] correctamente.
-Se non quere ningunha característica no correo, pode desactivalas aquí.',
-       'config-email-user' => 'Activar o intercambio de correos electrónicos entre usuarios',
-       'config-email-user-help' => 'Permitir que todos os usuarios intercambien correos electrónicos, se o teñen activado nas súas preferencias.',
-       'config-email-usertalk' => 'Activar a notificación da páxina de conversa de usuario',
-       'config-email-usertalk-help' => 'Permitir que os usuarios reciban notificacións cando a súa páxina de conversa de usuario sufra modificacións, se o teñen activado nas súas preferencias.',
-       'config-email-watchlist' => 'Activar a notificación da lista de vixilancia',
-       'config-email-watchlist-help' => 'Permitir que os usuarios reciban notificacións sobre modificacións nas páxinas que vixían, se o teñen activado nas súas preferencias.',
-       'config-email-auth' => 'Activar a autenticación do correo electrónico',
-       'config-email-auth-help' => "Se esta opción está activada, os usuarios teñen que confirmar o seu correo electrónico mediante unha ligazón enviada ao enderezo cando o definan ou o cambien.
-Só os enderezos autenticados poden recibir correos doutros usuarios ou de notificación.
-É '''recomendable''' establecer esta opción nos wikis públicos para evitar abusos potenciais das características do correo.",
-       'config-email-sender' => 'Enderezo de correo electrónico de retorno:',
-       'config-email-sender-help' => 'Introduza o enderezo de correo electrónico a usar como enderezo de retorno dos correos de saída.
-Aquí é onde irán parar os correos rexeitados.
-Moitos servidores de correo electrónico esixen que polo menos a parte do nome de dominio sexa válido.',
-       'config-upload-settings' => 'Imaxes e carga de ficheiros',
-       'config-upload-enable' => 'Activar a carga de ficheiros',
-       'config-upload-help' => 'A subida de ficheiros expón potencialmente o servidor a riscos de seguridade.
-Para obter máis información, lea a [//www.mediawiki.org/wiki/Manual:Security sección de seguridade] no manual.
-
-Para activar a carga de ficheiros, cambie o modo no subdirectorio <code>images</code> que está baixo o directorio raíz de MediaWiki, de xeito que o servidor web poida escribir nel.
-A continuación, active esta opción.',
-       'config-upload-deleted' => 'Directorio para os ficheiros borrados:',
-       'config-upload-deleted-help' => 'Escolla un directorio no que arquivar os ficheiros borrados.
-O ideal é que non sexa accesible desde a web.',
-       'config-logo' => 'URL do logo:',
-       'config-logo-help' => 'A aparencia de MediaWiki por defecto inclúe espazo para un logo de 135x160 píxeles por riba do menú lateral.
-Cargue unha imaxe do tamaño axeitado e introduza o enderezo URL aquí.
-
-Pode utilizar <code>$wgStylePath</code> ou <code>$wgScriptPath</code> se o seu logo está relacionado con esas rutas.
-
-Se non quere un logo, deixe esta caixa en branco.',
-       'config-instantcommons' => 'Activar Instant Commons',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons InstantCommons] é unha característica que permite aos wikis usar imaxes, sons e outros ficheiros multimedia atopados no sitio da [//commons.wikimedia.org/wiki/Portada_galega Wikimedia Commons].
-Para facer isto, MediaWiki necesita acceso á internet.
-
-Para obter máis información sobre esta característica, incluíndo as instrucións sobre como configuralo para outros wikis que non sexan a Wikimedia Commons, consulte [//mediawiki.org/wiki/Manual:$wgForeignFileRepos o manual].',
-       'config-cc-error' => 'A escolla da licenza Creative Commons non deu resultados.
-Escriba o nome da licenza manualmente.',
-       'config-cc-again' => 'Escolla outra vez...',
-       'config-cc-not-chosen' => 'Escolla a licenza Creative Commons que desexe e prema en "continuar".',
-       'config-advanced-settings' => 'Configuración avanzada',
-       'config-cache-options' => 'Configuración da caché de obxectos:',
-       'config-cache-help' => 'A caché de obxectos emprégase para mellorar a velocidade de MediaWiki mediante a memorización de datos usados con frecuencia.
-É amplamente recomendable a súa activación nos sitios de tamaño medio e grande; os sitios pequenos obterán tamén beneficios.',
-       'config-cache-none' => 'Sen caché (non se elimina ningunha funcionalidade, pero pode afectar á velocidade en wikis grandes)',
-       'config-cache-accel' => 'Caché de obxectos do PHP (APC, XCache ou WinCache)',
-       'config-cache-memcached' => 'Empregar o Memcached (necesita unha instalación e configuración adicional)',
-       'config-memcached-servers' => 'Servidores da memoria caché:',
-       'config-memcached-help' => 'Lista de enderezos IP para Memcached.
-Debe especificarse un por liña, así como o porto a usar. Por exemplo:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => 'Seleccionou Memcached como o seu tipo de caché, pero non especificou ningún servidor.',
-       'config-memcache-badip' => 'Escribiu un enderezo IP inválido para Memcached: $1.',
-       'config-memcache-noport' => 'Non especificou o porto a usar no servidor Memcached: $1.
-Se non sabe o porto, o predeterminado é 11211.',
-       'config-memcache-badport' => 'Os números de porto Memcached deben estar entre $1 e $2.',
-       'config-extensions' => 'Extensións',
-       'config-extensions-help' => 'As extensións anteriores detectáronse no seu directorio <code>./extensions</code>.
-
-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, prema en "{{int:config-back}}".',
-       'config-install-step-done' => 'feito',
-       'config-install-step-failed' => 'erro',
-       'config-install-extensions' => 'Incluíndo as extensións',
-       'config-install-database' => 'Configurando a base de datos',
-       'config-install-schema' => 'Creando o esquema',
-       'config-install-pg-schema-not-exist' => 'O esquema PostgreSQL non existe.',
-       'config-install-pg-schema-failed' => 'Fallou a creación de táboas.
-Asegúrese de que o usuario "$1" pode escribir no esquema "$2".',
-       'config-install-pg-commit' => 'Validando os cambios',
-       'config-install-pg-plpgsql' => 'Comprobación da lingua PL/pgSQL',
-       'config-pg-no-plpgsql' => 'Cómpre instalar a lingua PL/pgSQL na base de datos $1',
-       'config-pg-no-create-privs' => 'A conta especificada para a instalación non ten os privilexios necesarios para crear unha conta.',
-       'config-pg-not-in-role' => 'A conta especificada para o usuario web xa existe.
-A conta que especificou para a instalación non é un superusuario e non pertence ao grupo de usuarios con acceso á web, polo que non pode crear obxectos pertencentes ao usuario da rede.
-
-Actualmente, MediaWiki necesita que as táboas sexan propiedade do usuario da rede. Especifique outro nome de conta web ou prema no botón "Atrás" e dea un usuario de instalación cos privilexios axeitados.',
-       'config-install-user' => 'Creando o usuario da base de datos',
-       'config-install-user-alreadyexists' => 'O usuario "$1" xa existe',
-       'config-install-user-create-failed' => 'A creación do usuario "$1" fallou: $2',
-       'config-install-user-grant-failed' => 'Fallou a concesión de permisos ao usuario "$1": $2',
-       'config-install-user-missing' => 'O usuario especificado, "$1", non existe.',
-       'config-install-user-missing-create' => 'O usuario especificado, "$1", non existe.
-Prema na caixa de verificación "crear unha conta" que hai a continuación se quere crear unha.',
-       'config-install-tables' => 'Creando as táboas',
-       'config-install-tables-exist' => "'''Atención:''' Semella que as táboas de MediaWiki xa existen.
-Saltando a creación.",
-       'config-install-tables-failed' => "'''Erro:''' Fallou a creación da táboa. Descrición do erro: $1",
-       'config-install-interwiki' => 'Enchendo a táboa de interwiki por defecto',
-       'config-install-interwiki-list' => 'Non se puido atopar o ficheiro <code>interwiki.list</code>.',
-       'config-install-interwiki-exists' => "'''Atención:''' Semella que a táboa de interwiki xa contén entradas.
-Saltando a lista por defecto.",
-       'config-install-stats' => 'Iniciando as estatísticas',
-       'config-install-keys' => 'Xerando as claves secretas',
-       'config-insecure-keys' => "'''Atención:''' {{PLURAL:$2|A clave de seguridade|As claves de seguridade}} ($1) {{PLURAL:$2|xerada|xeradas}} durante a instalación non {{PLURAL:$2|é|son}} completamente {{PLURAL:$2|segura|seguras}}. Considere a posibilidade de {{PLURAL:$2|cambiala|cambialas}} manualmente.",
-       'config-install-sysop' => 'Creando a conta de usuario de administrador',
-       'config-install-subscribe-fail' => 'Non se puido subscribir á lista mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'cURL non está instalado e allow_url_fopen non está dispoñible.',
-       'config-install-mainpage' => 'Creando a páxina principal co contido por defecto',
-       'config-install-extension-tables' => 'Creando as táboas para as extensións activadas',
-       'config-install-mainpage-failed' => 'Non se puido inserir a páxina principal: $1',
-       'config-install-done' => "'''Parabéns!'''
-Instalou correctamente MediaWiki.
-
-O programa de instalación xerou un ficheiro <code>LocalSettings.php</code>.
-Este ficheiro contén toda a súa configuración.
-
-Terá que descargalo e poñelo na base da instalación do seu wiki (no mesmo directorio ca index.php). A descarga debería comezar automaticamente.
-
-Se non comezou a descarga ou se a cancelou, pode facer que comece de novo premendo na ligazón que aparece a continuación:
-
-$3
-
-'''Nota:''' Se non fai iso agora, este ficheiro de configuración xerado non estará dispoñible máis adiante se sae da instalación sen descargalo.
-
-Cando faga todo isto, xa poderá '''[$2 entrar no seu wiki]'''.",
-       'config-download-localsettings' => 'Descargar o <code>LocalSettings.php</code>',
-       'config-help' => 'axuda',
-       'config-nofile' => 'Non se puido atopar o ficheiro "$1". Se cadra, foi borrado.',
-       'config-extension-link' => 'Sabía que o seu wiki soporta [//www.mediawiki.org/wiki/Manual:Extensions extensións]?
-
-Pode explorar as [//www.mediawiki.org/wiki/Category:Extensions_by_category extensións por categoría] ou a [//www.mediawiki.org/wiki/Extension_Matrix matriz de extensións] para ollar a lista completa de extensións.',
-       'mainpagetext' => "'''MediaWiki instalouse correctamente.'''",
-       'mainpagedocfooter' => 'Consulte a [//meta.wikimedia.org/wiki/Help:Contents guía de usuario] para obter máis información sobre como usar o software wiki.
-
-== Primeiros pasos ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista das opcións de configuración]
-* [//www.mediawiki.org/wiki/Manual:FAQ Preguntas máis frecuentes sobre MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo dos lanzamentos de MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localice MediaWiki á súa lingua]',
-);
-
-/** Goan Konkani (Latin script) (Konknni)
- * @author The Discoverer
- */
-$messages['gom-latn'] = array(
-       'config-page-language' => 'Bhas',
-);
-
-/** Ancient Greek (Ἀρχαία ἑλληνικὴ)
- * @author Crazymadlover
- * @author Omnipaedista
- */
-$messages['grc'] = array(
-       'config-page-language' => 'Γλῶττα',
-       'mainpagetext' => "'''Ἡ ἐγκατάστασις τῆς MediaWiki ἦν ἐπιτυχής'''",
-       'mainpagedocfooter' => 'Βουλευθήσεσθε τὰς [//meta.wikimedia.org/wiki/Help:Contents βουλὰς τοῖς Χρωμένοις] ἵνα πληροφορηθῇτε περὶ τοῦ βίκιλογισμικοῦ.
-
-== Ἄρξασθε ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Διαλογή παραμέτρων διαμορφώσεως]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki: τὰ πολλάκις αἰτηθέντα]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Διαλογή διαλέξεων ἐπὶ τῶν διανομῶν τῆς MediaWiki]', # Fuzzy
-);
-
-/** Swiss German (Alemannisch)
- * @author Als-Holder
- */
-$messages['gsw'] = array(
-       'config-desc' => 'S MediaWiki-Inschtallationsprogramm',
-       'config-title' => 'MediaWiki $1 inschtalliere',
-       'config-information' => 'Information',
-       'config-localsettings-upgrade' => "'''Warnig:''' E Datei <code>LocalSettings.php</code> isch gfunde wore.
-Fir d Aktualisierig vu dr däre Inschtallation, gib bitte dr Wärt vum Parameter <code>\$wgUpgradeKey</code> im Fäld unten yy.
-Du findsch dr Wärt in dr Datei <code>LocalSettings.php</code>.",
-       'config-localsettings-key' => 'Aktualisierigsschlissel:',
-       'config-localsettings-badkey' => 'Dr Aktualisierigsschlissel, wu du aagee hesch, isch falsch.',
-       'config-session-error' => 'Fähler bim Starte vu dr Sitzig: $1',
-       'config-session-expired' => 'D Sitzigsdate sin schyns abgloffe.
-Sitzige sin fir e Zytruum vu $1 konfiguriert.
-Dää cha dur Aalupfe vum Parameter <code>session.gc_maxlifetime</code> in dr Datei <code>php.ini</code> greßer gmacht wäre.
-Dr Inschtallationsvorgang nomol starte.',
-       'config-no-session' => 'Dyyni Sitzigsdate sin verlore gange!
-D Datei <code>php.ini</code> mueß prieft wäre un s mueß derby sichergstellt wäre, ass dr Parameter <code>session.save_path</code> uf s richtig Verzeichnis verwyyst.',
-       'config-your-language' => 'Dyy Sproch:',
-       'config-your-language-help' => 'Bitte d Sproch uuswehle, wu bim Inschtallationsvorgang soll brucht wäre.',
-       'config-wiki-language' => 'Wikisproch:',
-       'config-wiki-language-help' => 'Bitte d Sproch uuswehle, wu s Wiki in dr Hauptsach din gschribe wird.',
-       'config-back' => '← Zruck',
-       'config-continue' => 'Wyter →',
-       'config-page-language' => 'Sproch',
-       'config-page-welcome' => 'Willchuu bi MediaWiki!',
-       'config-page-dbconnect' => 'Mit dr Datebank verbinde',
-       'config-page-upgrade' => 'E Inschtallition, wu s scho het, aktualisiere',
-       'config-page-dbsettings' => 'Datebankyystellige',
-       'config-page-name' => 'Name',
-       'config-page-options' => 'Optione',
-       'config-page-install' => 'Inschtalliere',
-       'config-page-complete' => 'Fertig!',
-       'config-page-restart' => 'Inschtallation nomol aafange',
-       'config-page-readme' => 'Liis mi',
-       'config-page-releasenotes' => 'Hiiwys fir d Vereffentlichung',
-       'config-page-copying' => 'Am Kopiere',
-       'config-page-upgradedoc' => 'Am Aktualisiere',
-       'config-help-restart' => 'Witt alli Date, wu Du yygee hesch, lesche un d Inschtallation nomol aafange?',
-       'config-restart' => 'Jo, nomol aafange',
-       'config-welcome' => '=== Priefig vu dr Inschtallationsumgäbig ===
-Basispriefige wäre durgfiert zum Feschtstelle, eb d Inschtallationsumgäbig fir d Inschtallation vu MediaWiki geignet isch.
-Du sottsch d Ergebnis vu däre Priefig aagee, wänn Du bi dr Inschtallation Hilf bruchsch.',
-       'config-copyright' => "=== Copyright un Nutzigsbedingige ===
-
-$1
-
-Des Programm isch e freji Software, d. h. s cha, no dr Bedingige vu dr GNU General Public-Lizänz, wu vu dr Free Software Foundation vereffentligt woren isch, wyterverteilt un/oder modifiziert wäre. Doderbyy cha d Version 2, oder no eigenem Ermässe, jedi nejeri Version vu dr Lizänz brucht wäre.
-
-Des Programm wird in dr Hoffnig verteilt, ass es nitzli isch, aber '''ohni jedi Garanti''' un sogar ohni di impliziert Garanti vun ere '''Märtgängigkeit''' oder '''Eignig fir e bstimmte Zwäck'''. Doderzue git meh Hiiwys in dr GNU General Public-Lizänz.
-
-E <doclink href=Copying>Kopi vu dr GNU General Public-Lizänz</doclink> sott zämme mit däm Programm verteilt wore syy. Wänn des nit eso isch, cha ne Kopi bi dr Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftli aagforderet oder [http://www.gnu.org/copyleft/gpl.html online gläse] wäre.",
-       'config-sidebar' => '* [//www.mediawiki.org MediaWiki Websyte vu MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents Nutzeraaleitig zue MediaWiki]
-* [//www.mediawiki.org/wiki/Manual:Contents Adminischtratoreaaleitig zue MediaWiki]
-* [//www.mediawiki.org/wiki/Manual:FAQ Vilmol gstellti Froge zue MediaWiki]', # Fuzzy
-       'config-env-good' => 'D Inschtallationsumgäbig isch prieft wore.
-Du chasch MediaWiki inschtalliere.',
-       'config-env-bad' => 'D Inschtallationsumgäbigisch prieft wore.
-Du chasch MediaWiki nit inschtalliere.',
-       'config-env-php' => 'PHP $1 isch inschtalliert.',
-       'config-unicode-using-utf8' => 'Fir d Unicode-Normalisierig wird em Brion Vibber syy utf8_normalize.so yygsetzt.',
-       'config-unicode-using-intl' => 'For d Unicode-Normalisierig wird d [http://pecl.php.net/intl PECL-Erwyterig intl] yygsetzt.',
-       'config-unicode-pure-php-warning' => "'''Warnig:''' D [http://pecl.php.net/intl PECL-Erwyterig intl] isch fir d Unicode-Normalisierig nit verfiegbar. Wäge däm wird di langsam pure-PHP-Implementierig brucht.
-Wänn Du ne Websyte mit ere große Bsuechrzahl bedrybsch, sottsch e weng ebis läse iber [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-Normalisierig (en)].",
-       'config-unicode-update-warning' => "'''Warnig:''' Di inschtalliert Version vum Unicode-Normalisierigswrapper verwändet e elteri Version vu dr Bibliothek vum [http://site.icu-project.org/ ICU-Projäkt].
-Du sottsch si [//www.mediawiki.org/wiki/Unicode_normalization_considerations aktualisiere], wänn Dor d Verwändig vu Unicode wichtig isch.",
-       'config-no-db' => 'S isch kei adäquate Datebanktryyber gfunde wore!', # Fuzzy
-       'config-no-fts3' => "'''Warnig:''' SQLite isch ohni s [//sqlite.org/fts3.html FTS3-Modul] kumpiliert wore, s stehn kei Suechfunktione z Verfiegig.",
-       'config-register-globals' => "'''Warnig: Dr Parameter <code>[http://php.net/register_globals register_globals]</code> vu PHP isch aktiviert.'''
-'''Är sott deaktiviert wäre, wänn des megli isch.'''
-D MediaWiki-Inschtallation lauft einwäg, aber dr Server isch aafällig fi megligi Sicherheitsprobläm.",
-       'config-magic-quotes-runtime' => "'''Fatal: Dr Parameter <code>[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]</code> vu PHP isch aktiviert!'''
-Die Yystellig fiert zue nit vorhärsähbare Probläm bi dr Datenyygab.
-MediaWiki cha nit inschtalliert wäre, solang dää Parameter nit deaktiviert woren isch.",
-       'config-magic-quotes-sybase' => "'''Fatal: Dr Parameter <code>[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]</code> vu PHP isch aktiviert!'''
-Die Yystellig fiert zue nit vorhärsähbare Probläm bi dr Datenyygab.
-MediaWiki cha nit inschtalliert wäre, solang dää Parameter nit deaktiviert woren isch.",
-       'config-mbstring' => "'''Fatal: Dr Parameter <code>[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]</code> vu PHP isch aktiviert!'''
-Die Yystellig verursacht Fähler un fiert zue nit vorhärsähbare Probläm bi dr Datenyygab.
-MediaWiki cha nit inschtalliert wäre, solang dää Parameter nit deaktiviert woren isch.",
-       'config-ze1' => "'''Fatal: Dr Parameter <code>[http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]</code> vu PHP isch aktiviert!'''
-Die Yystellig fiert zue große Fähler bi MediaWiki.
-MediaWiki cha nit inschtalliert wäre, solang dää Parameter nit deaktiviert woren isch.",
-       'config-safe-mode' => "'''Warnig:''' D Funktion <code>[http://www.php.net/features.safe-mode Safe Mode]</code> vu PHP isch aktiviert.
-Des cha zue Probläm fiere, vor allem wänn s Uffelade vu Dateie soll megli syy bzw. dr Uuszeichner <code>math</code> soll brucht wäre.",
-       'config-xml-bad' => 'S XML-Modul vu PHP fählt.
-MediaWiki brucht Funktione, wu au des Modul z Verfiegig stellt, un funktioniert in däre Konfiguration nit.
-Wänn Mandriva brucht wird, mueß no s „php-xml“-Paket inschtalliert wäre.',
-       'config-pcre' => 'S PHP-Modul fir d PCRE-Unterstitzig isch nit gfunde wore.
-MediaWiki brucht aber perl-kompatibli reguläri Uusdruck zum lauffähig syy.',
-       'config-pcre-no-utf8' => "'''Fatale Fähler: S PHP-Modul PCRE isch schyns ohni PCRE_UTF8-Unterstitzig kompiliert wore.'''
-MediaWiki brucht d UTF-8-Unterstitzi zum fählerfrej lauffähig syy.",
-       'config-memory-raised' => 'Dr PHP-Parameter <code>memory_limit</code> lyt bi $1 un isch uf $2 uffegsetzt wore.',
-       'config-memory-bad' => "'''Warnig:''' Dr PHP-Parameter <code>memory_limit</code> lyt bi $1.
-Dää Wärt isch wahrschyns z nider.
-Dr Inschtallationsvorgang chennt wäge däm fählschlaa!",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] isch inschtalliert',
-       'config-apc' => '[http://www.php.net/apc APC] isch inschtalliert',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] isch inschtalliert',
-       'config-no-cache' => "'''Warnig:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] oder [http://www.iis.net/download/WinCacheForPhp WinCache] hän nit chenne gfunde wäre.
-S Objäktcaching isch wäge däm nit aktiviert.",
-       'config-diff3-bad' => 'GNU diff3 isch nit gfunde wore.',
-       'config-imagemagick' => 'ImageMagick isch gfunde wore: <code>$1</code>.
-Miniaturaasichte vu Bilder sin megli, sobald s Uffelade vu Dateie aktiviert isch.',
-       'config-help' => 'Hilf',
-       'mainpagetext' => "'''MediaWiki isch erfolgrich inschtalliert worre.'''",
-       'mainpagedocfooter' => 'Lueg uf d [//meta.wikimedia.org/wiki/MediaWiki_localisation Dokumentation fir d Aapassig vu dr Benutzeroberflächi] un s [//meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuech] fir d Hilf iber d Benutzig un s Yystelle.', # Fuzzy
-);
-
-/** Gujarati (ગુજરાતી)
- * @author Ashok modhvadia
- * @author Dineshjk
- */
-$messages['gu'] = array(
-       'mainpagetext' => "'''મિડીયાવિકિ સફળતાપૂર્વક ઇન્સટોલ થયું છે.'''",
-       'mainpagedocfooter' => 'વિકિ સોફ્ટવેર વાપરવાની માહીતિ માટે [//meta.wikimedia.org/wiki/Help:Contents સભ્ય માર્ગદર્શિકા] જુઓ.
-
-== શરૂઆતના તબક્કે ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings કોનફીગ્યુરેશન સેટીંગ્સની યાદી]
-* [//www.mediawiki.org/wiki/Manual:FAQ વારંવાર પુછાતા પ્રશ્નો]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce મિડીયાવિકિ રીલીઝ મેઇલીંગ લીસ્ટ]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localise MediaWiki for your language]',
-);
-
-/** Manx (Gaelg)
- */
-$messages['gv'] = array(
-       'mainpagetext' => "'''Ta MediaWiki currit stiagh nish.'''",
-);
-
-/** Hakka (Hak-kâ-fa)
- */
-$messages['hak'] = array(
-       'mainpagetext' => "'''Yí-kîn sṳ̀n-kûng ôn-chông MediaWiki.'''",
-       'mainpagedocfooter' => 'chhiáng fóng-mun [//meta.wikimedia.org/wiki/Help:Contents Yung-fu sú-chhak] yî-khi̍p sṳ́-yung chhṳ́ wiki ngiôn-khien ke sin-sit!
-
-== Ngi̍p-mùn  ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki Phi-chṳ sat-thin chhîn-tân]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki Phìn-sòng mun-thì kié-tap]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki fat-phu email chhîn-tân]', # Fuzzy
-);
-
-/** Hawaiian (Hawai`i)
- */
-$messages['haw'] = array(
-       'mainpagetext' => "'''Ua pono ka ho‘ouka ‘ana o MediaWiki.'''",
-);
-
-/** Hebrew (עברית)
- * @author Amire80
- * @author YaronSh
- * @author ערן
- * @author 아라
- */
-$messages['he'] = array(
-       'config-desc' => 'תכנית ההתקנה של מדיה־ויקי',
-       'config-title' => 'התקנת מדיה־ויקי $1',
-       'config-information' => 'פרטים',
-       'config-localsettings-upgrade' => 'זוהה קובץ <code>LocalSettings.php</code>.
-כדי לשדרג את ההתקנה הזאת, נא להקליד את הערך של <code>$wgUpgradeKey</code> בתיבה להלן.
-אפשר למצוא אותו בקובץ <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'זוהה קובץ <code>LocalSettings.php</code>.
-כדי לשדרג את ההתקנה הזאת, הריצו את <code>update.php</code> ולא את הקובץ הזה.',
-       'config-localsettings-key' => 'מפתח השדרוג:',
-       'config-localsettings-badkey' => 'המפתח שהקלדתם שגוי',
-       'config-upgrade-key-missing' => 'זוהתה התקנה קיימת של מדיה־ויקי.
-כדי לשדרג את ההתקנה הזאת, אנא כתבו את השורה הבא בתחתית קובץ <code>LocalSettings.php</code> שלכם:
-
-$1',
-       'config-localsettings-incomplete' => 'נראה שקובץ <code>LocalSettings.php</code> הקיים אינו שלם.
-המשתנה $1 אינו מוגדר.
-נו לשנות את קובץ <code>LocalSettings.php</code> שלכם כך שהמשתנה הזה יהיה מוגדר וללחוץ "{{int:Config-continue}}".',
-       'config-localsettings-connection-error' => 'אירעה שגיאה בעת חיבור למסד נתונים עם הגדרות ב־<code>LocalSettings.php</code> או ב־<code>AdminSettings.php</code>. נא לתקן את ההגדרות האלו ולנסות שוב.
-
-$1',
-       'config-session-error' => 'שגיאה באתחול שיחה: $1',
-       'config-session-expired' => 'נראה שנתוני השיחה שלכם פגו.
-השיחות מוגדרות להיות תקפות לזמן של $1.
-אפשר להגדיל את זה ב־<code>session.gc_maxlifetime</code> בקובץ php.ini.
-יש להתחיל מחדש את תהליך ההתקנה.',
-       'config-no-session' => 'נתוני השיחה שלכם אבדו!
-יש לבדוק את קובץ php.ini שלכם ולוודא שתיקייה נכונה מוגדרת ב־<code>session.save_path</code>.',
-       'config-your-language' => 'השפה שלכם:',
-       'config-your-language-help' => 'נא לבחור את השפה שתשמש במהלך ההתקנה.',
-       'config-wiki-language' => 'שפת הוויקי:',
-       'config-wiki-language-help' => 'נא לבחור את השפה העיקרית שבה ייכתב ויקי זה.',
-       'config-back' => '→ חזרה',
-       'config-continue' => 'המשך ←',
-       'config-page-language' => 'שפה',
-       'config-page-welcome' => 'ברוכים הבאים למדיה־ויקי!',
-       'config-page-dbconnect' => 'התחברות למסד הנתונים',
-       'config-page-upgrade' => 'שדרוג התקנה קיימת',
-       'config-page-dbsettings' => 'הגדרות מסד הנתונים',
-       'config-page-name' => 'שם',
-       'config-page-options' => 'אפשרויות',
-       'config-page-install' => 'התקנה',
-       'config-page-complete' => 'הושלמה!',
-       'config-page-restart' => 'הפעלת ההתקנה מחדש',
-       'config-page-readme' => 'קרא־אותי',
-       'config-page-releasenotes' => 'הערות גרסה',
-       'config-page-copying' => 'העתקה',
-       'config-page-upgradedoc' => 'שדרוג',
-       'config-page-existingwiki' => 'ויקי קיים',
-       'config-help-restart' => 'האם ברצונך לנקות את כל הנתונים שהזנת ולהתחיל מחדש את תהליך ההתקנה?',
-       'config-restart' => 'כן, להפעיל מחדש',
-       'config-welcome' => '=== בדיקות סביבה ===
-בדיקות בסיסיות מתבצעות כדי לבדוק שהסביבה מתאימה להתקנת מדיה־ויקי.
-יש לתת את תוצאות הבדיקות האלו אם תזדקקו לעזרה בזמן ההתקנה.',
-       'config-copyright' => "=== זכויות יוצרים ותנאים ===
-
-$1
-
-תכנית זו היא תכנה חופשית; באפשרותך להפיצה מחדש ו/או לשנות אותה על פי תנאי הרישיון הציבורי הכללי של GNU כפי שפורסם על ידי קרן התכנה החופשית; בין אם גרסה 2 של הרישיון, ובין אם (לפי בחירתך) כל גרסה מאוחרת שלו.
-
-תכנית זו מופצת בתקווה שתהיה מועילה, אבל '''בלא אחריות כלשהי'''; ואפילו ללא האחריות המשתמעת בדבר '''מסחריותה''' או '''התאמתה למטרה '''מסוימת'''. לפרטים נוספים, ניתן לעיין ברישיון הציבורי הכללי של GNU.
-
-לתכנית זו אמור היה להיות מצורף <doclink href=Copying>עותק של הרישיון הציבורי הכללי של GNU</doclink>; אם לא, עליך לכתוב ל־Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, , MA 02111-1307, USA. או [http://www.gnu.org/copyleft/gpl.html לקרוא אותו דרך האינטרנט].",
-       'config-sidebar' => '* [//www.mediawiki.org אתר הבית של מדיה־ויקי]
-* [//www.mediawiki.org/wiki/Help:Contents המדריך למשתמשים]
-* [//www.mediawiki.org/wiki/Manual:Contents המדריך למנהלים]
-* [//www.mediawiki.org/wiki/Manual:FAQ שו״ת]
-----
-* <doclink href=Readme>קרא אותי</doclink>
-* <doclink href=ReleaseNotes>הערות גרסה</doclink>
-* <doclink href=Copying>העתקה</doclink>
-* <doclink href=UpgradeDoc>שדרוג</doclink>',
-       'config-env-good' => 'הסביבה שלכם נבדקה.
-אפשר להתקין מדיה־ויקי.',
-       'config-env-bad' => 'הסביבה שלכם נבדקה.
-אי־אפשר להתקין מדיה־ויקי.',
-       'config-env-php' => 'מותקנת <span dir="ltr">PHP $1</span>.',
-       'config-env-php-toolow' => 'מותקנת <span dir="ltr">PHP $1</span>.
-למדיה־ויקי נדרשת <span dir="ltr">PHP $2</span> או גרסה גבוהה יותר.',
-       'config-unicode-using-utf8' => 'משתמש ב־normalize.so של בריון ויבר לנרמול יוניקוד.',
-       'config-unicode-using-intl' => 'משתמש בהרחבת [http://pecl.php.net/intl הרחבת intl PECL] לנרמול יוניקוד',
-       'config-unicode-pure-php-warning' => "'''אזהרה''': [http://pecl.php.net/intl הרחבת intl PECL] אינה זמינה לטיפול בנרמול יוניקוד. משתמש ביישום PHP טהור ואטי יותר.
-אם זהו אתר בעל תעבורה גבוהה, כדאי לקרוא את המסמך הבא: [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode normalization].",
-       'config-unicode-update-warning' => "'''אזהרה''': הגרסה המותקנת של מעטפת נרמול יוניקוד משתמשת בגרסה ישנה של הספרייה של [http://site.icu-project.org/ פרויקט ICU].
-כדאי [//www.mediawiki.org/wiki/Unicode_normalization_considerations לעדכן] אם חשוב לכם הטיפול ביוניקוד.",
-       'config-no-db' => 'לא נמצא דרייבר מסד נתונים מתאים. יש להתקין דרייבר מסד נתונים ל־PHP.
-נתמכים הסוגים הבאים של מסדי נתונים: $1.
-
-אם אתם משתמשים באירוח משותף, בקשו מספק האירוח שלכם להתקין דרייבר מסד נתונים מתאים.
-אם קִמפלתם את PHP בעצמכם, הגדירו אותו מחדש והפעילו את לקוח מסד נתונים, למשל באמצעות <code dir="ltr">./configure --with-mysql</code>.
-אם התקנתם את PHP כחבילה של דביאן או של אובונטו, יש להתקין את המודול php5-mysql.',
-       'config-outdated-sqlite' => "'''אזהרה''': במערכת מתוקן SQLite $1. גרסה זו לא נתמכת ולשימוש ב SQLite נדרשת גרסה $2 ומעלה. מסיבה זו האפשרות SQLite לא מאופשרת.",
-       'config-no-fts3' => "'''אזהרה''': SQLite מקומפל ללא [//sqlite.org/fts3.html מודול FTS]. יכולות חיפוש לא יהיו זמינות בהתקנה הזאת.",
-       'config-register-globals' => "'''אזהרה: האפשרות <code>[http://php.net/register_globals register_globals]</code> של PHP מופעלת.'''
-'''כבו אותה אם אתם יכולים.'''
-מדיה־ויקי תעבוד, אבל השרת שלכם חשוף לפגיעות אבטחה.",
-       'config-magic-quotes-runtime' => "'''שגיאה סופנית: האפשרות [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] פעילה!'''
-האפשרות הזאת מעוותת את נתוני הקלט באופן בלתי־צפוי.
-לא ניתן להתקין את מדיה־ויקי אלא אם האפשרות הזאת תכובה.",
-       'config-magic-quotes-sybase' => "'''שגיאה סופנית''': האפשרות [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] פעילה!'''
-האפשרות הזאת מעוותת את נתוני הקלט באופן בלתי־צפוי.
-לא ניתן להתקין את מדיה־ויקי או להשתמש בה אלא אם האפשרות הזאת תכובה.",
-       'config-mbstring' => "'''שגיאה סופנית''': האפשרות [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] פעילה!'''
-האפשרות הזאת גורמת לשגיאות ומעוותת את נתוני הקלט באופן בלתי־צפוי.
-לא ניתן להתקין את מדיה־ויקי או להשתמש בה אלא אם האפשרות הזאת תכובה.",
-       'config-ze1' => "'''שגיאה סופנית''': האפשרות [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] פעילה!'''
-האפשרות הזאת גורמת לתקלות מזעזעות במדיה־ויקי.
-לא ניתן להתקין את מדיה־ויקי או להשתמש בה אלא אם האפשרות הזאת תכובה.",
-       'config-safe-mode' => "'''אזהרה:''' האפשרות [http://www.php.net/features.safe-mode safe mode] של PHP פעילה.
-היא יכולה לגרום לבעיות, במיוחד אם אתם משתמשים בהעלאת קבצים או ב־<code>math</code>.",
-       'config-xml-bad' => 'מודול XML של PHP חסר.
-מדיה־ויקי דורשת פונקציות של המודול ולא תעבוד עם הגדרות כאלו.
-אם מערכת ההפעלה שלהם היא Mandrake, התקינו את החבילה php-xml.',
-       'config-pcre' => 'נראה שחסרה תמיכה במודול PCRE.
-כדי שמדיה־ויקי תעבוד, נדרשת תמיכה בביטויים רגולריים תואמי Perl.',
-       'config-pcre-no-utf8' => "'''שגיאה סופנית''': נראה שמודול PCRE של PHP מקומפל ללא תמיכה ב־PCRE_UTF8.
-מדיה־ויקי דורשת תמיכה ב־UTF-8 לפעילות נכונה.",
-       'config-memory-raised' => 'ערך האפשרות <code>memory_limit</code> של PHP הוא $1, הועלה ל־$2.',
-       'config-memory-bad' => "'''אזהרה:''' ערך האפשרות <code>memory_limit</code> של PHP הוא $1.
-זה כנראה נמוך מדי.
-ההתקנה עשויה להיכשל!",
-       'config-ctype' => "'''שגיאה סופנית''': נדרשת גרסת PHP שתומכת בהרחבה [http://www.php.net/manual/en/ctype.installation.php Ctype].",
-       '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]&rlm;, [http://xcache.lighttpd.net/ XCache] או [http://www.iis.net/download/WinCacheForPhp WinCache].
-מטמון עצמים לא מופעל.",
-       'config-mod-security' => "'''אזהרה''': בשרת הווב שלכם מופעל [http://modsecurity.org/ mod_security]. אם הוא לא מוגדר טוב, זה יכול לגרום לבעיות במדיה־ויקי ובתכנה אחרת שמאפשרת למשתמשים לשלוח תוכן שרירותי.
-קראו את [http://modsecurity.org/documentation/ התיעוד של mod_security] או צרו קשר עם אנשי התמיכה של שירותי האירוח שלכם אם אתם נתקלים בשגיאות אקראיות.",
-       'config-diff3-bad' => 'GNU diff3 לא נמצא.',
-       'config-imagemagick' => 'נמצא ImageMagick&rlm;: <code dir="ltr">$1</code>.
-מזעור תמונות יופעל, אם תפעילו את האפשרות להעלות קבצים.',
-       'config-gd' => 'נמצאה ספריית הגרפיקה GD המובנית.
-מזעור תמונות יופעל, אם תפעילו את האפשרות להעלות קבצים.',
-       'config-no-scaling' => 'ספריית GD או ImageMagick לא נמצאו.
-מזעור תמונות לא יופעל.',
-       'config-no-uri' => "'''שגיאה:''' אי־אפשר לזהות את הכתובת הנוכחית.
-ההתקנה בוטלה.",
-       'config-no-cli-uri' => 'אזהרה: לא הוגדר <span dir="ltr">--scriptpath</span>, משתמש בבררת המחדל: <code dir="ltr">$1</code>.',
-       'config-using-server' => 'שם השרת בשימוש: "<nowiki>$1</nowiki>".',
-       'config-using-uri' => 'נעשה שימוש בכתובת השרת "<nowiki>$1$2</nowiki>".',
-       'config-uploads-not-safe' => "'''אזהרה:''' תיקיית ההעלאות ההתחלתית <code>$1</code> חשופה להרצת סקריפטים שרירותיים.
-מדיה־ויקי בודקת את כל הקבצים המוּעלים לאיומי אבטחה, מומלץ מאוד למנוע את [//www.mediawiki.org/wiki/Manual:Security#Upload_security פרצת האבטחה] הזאת לפני שאתם מפעילים את ההעלאות.",
-       'config-no-cli-uploads-check' => "'''אזהרה:''' תיקיית בררת המחדל להעלאות (<code>$1</code>) לא נבדקת לפגיעוּת להרצת תסריטים אקראיים בזמן התקנה דרך CLI.",
-       'config-brokenlibxml' => 'במערכת שלכם יש שילוב של גרסאות של PHP ושל libxml2 שחשוף לבאגים ויכול לגרום לעיוות נתונים נסתר במדיה־ויקי וביישומי רשת אחרים.
-שדרגו ל־PHP 5.2.9 או לגרסה חדשה יותר ול־libxml2 2.7.3 או גרסה חדשה יותר ([//bugs.php.net/bug.php?id=45996 באג מתויק ב־PHP]).
-ההתקנה בוטלה.',
-       'config-using531' => 'אי־אפשר להשתמש במדיה־ויקי עם <span dir="ltr">PHP $1</span> בגלל באג בפרמטרים של הפניות (reference parameters) ל־<code dir="ltr">__call()</code>.
-שדרגו ל־PHP 5.3.2 או לגרסה גבוהה יותר כדי לתקן את זה ([//bugs.php.net/bug.php?id=50394 bug filed with PHP]) או שַנמכו ל־PHP 5.3.0 כדי לפתור את הבעיה הזאת.
-ההתקנה בוטלה.',
-       'config-suhosin-max-value-length' => 'מותקן פה Suhosin והוא מגביל את אורך פרמטר GET ל־$1 בתים. רכיב ResourceLoader של מדיה־ויקי יעקוף את המגלבה הזאת, אבל זה יפגע בביצועים. אם זה בכלל אפשרי, כדאי לתקן את הערך של <code>suhosin.get.max_value_length</code> ל־1024 או יותר בקובץ <code>php.ini</code> ולהגדיר את ‎<code>$wgResourceLoaderMaxQueryLength</code> לאותו הערך בקובץ LocalSettings.php.',
-       'config-db-type' => 'סוג מסד הנתונים:',
-       'config-db-host' => 'שרת מסד הנתונים:',
-       'config-db-host-help' => 'אם שרת מסד הנתונים שלכם נמצא על שרת אחר, הקלידו את שם המחשב או את כתובת ה־IP כאן.
-
-אם אתם משתמשים באירוח משותף, ספק האירוח שלכם אמור לתת לכם את שם השרת הנכון במסמכים.
-
-אם אתם מתקינים בשרת Windows ומשתמשים ב־MySQL, השימוש ב־localhost עשוי לא לעבוד. אם הוא לא עובד, נסו את "127.0.0.1" בתור כתובת ה־IP המקומית.
-
-אם אתם משתמשים ב־PostgreSQL, תשאירו את השדה הזה ריק כדי להתחבר דרך שקע יוניקס.',
-       'config-db-host-oracle' => 'TNS של מסד הנתונים:',
-       'config-db-host-oracle-help' => 'הקלידו [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm שם חיבור מקומי (Local Connect Name)] תקין; הקובץ tnsnames.ora צריך להיות זמין להתקנה הזאת.<br />
-אם אתם משתמשים ב־client libraries 10g או בגרסה חדשה יותר, אתם יכולים גם להשתמש בשיטת מתן השמות [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
-       'config-db-wiki-settings' => 'זיהוי ויקי זה',
-       'config-db-name' => 'שם מסד הנתונים:',
-       'config-db-name-help' => 'בחרו שם שמזהה את הוויקי שלכם.
-לא צריכים להיות בו רווחים.
-
-אם אתם משתמשים באירוח משותף, ספק האירוח שלכם ייתן לכם שם מסד נתונים מסוים שתוכלו להשתמש בו או יאפשר לכם ליצור מסד נתונים דרך לוח בקרה.',
-       'config-db-name-oracle' => 'סכמה של מסד נתונים:',
-       'config-db-account-oracle-warn' => 'קיימים שלושה תרחישים נתמכים עבור התקנת אורקל בתור מסד הנתונים:
-
-אם אתם רוצים ליצור חשבון מסד נתונים כחלק מתהליך ההתקנה, נא לספק חשבון בעל תפקיד SYSDBA בתור חשבון מסד הנתונים עבור ההתקנה ולציין את האישורים המבוקשים עבור חשבון הגישה לאינטרנט, אחרת ניתן ליצור באופן ידני את חשבון הגישה לאינטרנט, ולספק חשבון זה בלבד (אם יש לו ההרשאות הדרושות ליצירת עצמי סכמה) או לספק שני חשבונות שונים, אחד עם הרשאות יצירה ואחד מוגבלת עבור גישה לאינטרנט.
-
-סקריפט ליצירת חשבון עם ההרשאות הנדרשות ניתן למצוא בתיקייה "<span dir="ltr">maintenance/oracle/</span>" של ההתקנה זו. זכרו כי שימוש בחשבון מוגבל יגרום להשבתת כל יכולות תחזוקה עם חשבון בררת המחדל.',
-       'config-db-install-account' => 'חשבון משתמש להתקנה',
-       'config-db-username' => 'שם המשתמש במסד הנתונים:',
-       'config-db-password' => 'הססמה במסד הנתונים:',
-       'config-db-password-empty' => 'נא להזין ססמה למשתמש מסד הנתונים החדש: $1.
-אף־על־פי שאפשר ליצור חשבונות ללא ססמה, זה לא מאובטח.',
-       'config-db-install-username' => 'הכניסו שם משתמש שישמש אתכם לחיבור למסד נתונים במהלך ההתקנה.
-זהו לא שם משתמש לחשבון במדיה־ויקי; זהו שם משתמש בשרת מסד נתונים.',
-       'config-db-install-password' => 'הקלידו ססמה שתשמש אתכם לצורך חיבור למסד נתונים במהלך ההתקנה.
-זוהי לא ססמה של חשבון במדיה־ויקי; זוהי ססמה לשרת מסד נתונים.',
-       'config-db-install-help' => 'הקלידו את שם המשתמש ואת הססמה להתחברות למסד הנתונים במהלך ההתקנה.',
-       'config-db-account-lock' => 'להשתמש באותו שם המשתמש ובאותה ססמה בזמן הפעלה רגילה',
-       'config-db-wiki-account' => 'חשבון משתמש להפעלה רגילה',
-       'config-db-wiki-help' => 'הקלידו את שם המשתמש והססמה לחיבור למסד הנתונים במהלך פעילות רגילה של הוויקי.
-אם החשבון אינו קיים ולחשבון שבו מתבצעת ההתקנה יש הרשאות מספיקות, החשבון הזה ייווצר עם ההרשאות המזעריות הנחוצות להפעלת הוויקי.',
-       'config-db-prefix' => 'תחילית לטבלאות של מסד נתונים (database table prefix):',
-       'config-db-prefix-help' => 'אם אתם צריכים לשתף מסד נתונים אחד בין אתרי ויקי שונים או בין מדיה־ויקי ויישום וב אחר, תוכלו לבחור להוסיף תחילית וכל שמות הטבלאות כדי להימנע מהתנגשויות.
-אל תשתמשו ברווחים.
-
-השדה הזה בדרך כלל אמור להיות ריק.',
-       'config-db-charset' => 'קבוצת התווים (character set) של מסד הנתונים',
-       '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-charset-help' => "'''אזהרה:''' אם אתם משתמשים ב־'''backwards-compatible UTF-8''' ב־<span dir=\"ltr\">MySQL 4.1+</span>, ומגבים את מסד הנתונים באמצעות <code>mysqldump</code>, זה יכול להרוס את כל תווי ה־ASCII ויהרוס באופן בלתי־הפיך את הגיבויים שלכם!
-
-ב'''מצב בינרי''' (binary mode) מדיה־ויקי שומרת טקסט UTF-8 במסד הנתונים בשדות בינריים.
-זה יעיל יותר ממצב UTF-8 של MySQL ומאפשר לכם להשתמש בכל הטווח של תווי יוניקוד.
-ב'''מצב UTF-8'''&rlm; (UTF-8 mode)&rlm; MySQL יֵדַע מה קבוצת התווים (character set) של הטקסט שלכם ויציג וימיר אותו בהתאם, אבל לא יאפשר לכם לשמור תווים שאינם נמצאים בטווח הרב־לשוני הבסיסי ([//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane]).",
-       'config-mysql-old' => 'נדרשת גרסה <span dir="ltr">$1</span> של MySQL או גרסה חדשה יותר. הגרסה הנוכחית שלכם היא $2.',
-       'config-db-port' => 'פִּתְחַת מסד הנתונים (database port):',
-       'config-db-schema' => 'סכמה למדיה־ויקי',
-       'config-db-schema-help' => 'הסְכֵמָה הבאה בדרך כלל מתאימה.
-שנו אותה רק אם אתם יודעים שאתם חייבים.',
-       'config-pg-test-error' => "ההתחברות למסד הנתונים '''$1''' לא מצליחה: $2",
-       'config-sqlite-dir' => 'תיקיית נתונים (data directory) של SQLite:',
-       'config-sqlite-dir-help' => 'SQLite שומר את כל הנתונים בקובץ אחד.
-
-לשרת הווב צריכה להיות הרשאה לכתוב לתיקייה שאתם מגדירים.
-
-היא לא צריכה נגישה לכולם דרך האינטרנט – בגלל זה איננו שמים אותה באותו מקום עם קובצי ה־PHP.
-
-תוכנת ההתקנה תכתוב קובץ <code dir="ltr">.htaccess</code> יחד אִתו, אבל אם זה ייכשל, מישהו יוכל להשיג גישה למסד הנתונים שלכם. שם נמצא מידע מפורש של משתמשים (כתובות דוא״ל, ססמאות מגובבות) וגם גרסאות מחוקות של דפים ומידע מוגבל אחר.
-
-כדאי לשקול לשים את מסד הנתונים במקום אחר לגמרי, למשל ב־<code dir="ltr">/var/lib/mediawiki/yourwik</code>.',
-       'config-oracle-def-ts' => 'מרחב טבלאות לפי בררת מחדל (default tablespace):',
-       'config-oracle-temp-ts' => 'מרחב טבלאות זמני (temporary tablespace):',
-       'config-support-info' => 'מדיה־ויקי תומכת במערכות מסדי הנתונים הבאות:
-
-$1
-
-אם אינכם רואים את מסד הנתונים שלכם ברשימה, עקבו אחר ההוראות המקושרות לעיל כדי להפעיל את התמיכה.',
-       'config-support-mysql' => '* $1 הוא היעד העיקרי עבור מדיה־ויקי ולו התמיכה הטובה ביותר (ר׳ [http://www.php.net/manual/en/mysql.installation.php how to compile PHP with MySQL support])',
-       'config-support-postgres' => '$1 הוא מסד נתונים נפוץ בקוד פתוח והוא נפוץ בתור חלופה ל־MySQL (ר׳ [http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). ייתכן שיש בתצורה הזאת באגים מסוימים והיא לא מומלצת לסביבות מבצעיות.',
-       'config-support-sqlite' => '* $1 הוא מסד נתונים קליל עם תמיכה טובה מאוד. (ר׳ [http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], משתמש ב־PDO)',
-       'config-support-oracle' => '* $1 הוא מסד נתונים עסקי מסחרי. (ר׳ [http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])',
-       'config-header-mysql' => 'הגדרות MySQL',
-       'config-header-postgres' => 'הגדרות PostgreSQL',
-       'config-header-sqlite' => 'הגדרות SQLite',
-       'config-header-oracle' => 'הגדרות Oracle',
-       'config-invalid-db-type' => 'סוג מסד הנתונים שגוי',
-       'config-missing-db-name' => 'עליך להזין ערך עבור "שם מסד הנתונים"',
-       'config-missing-db-host' => 'יש להכניס ערך לשדה "שרת מסד הנתונים"',
-       'config-missing-db-server-oracle' => 'יש להכניס ערך לשדה "TNS של מסד הנתונים"',
-       'config-invalid-db-server-oracle' => '"$1" הוא TNS בלתי תקין.
-יש להשתמש רק באותיות ASCII&rlm; (a עד z&rlm;, A עד Z), סְפָרוֹת (0 עד 9), קווים תחתיים (_) ונקודות (.).',
-       'config-invalid-db-name' => '"$1" הוא שם מסד נתונים בלתי תקין.
-יש להשתמש רק באותיות ASCII&rlm; (a עד z&rlm;, A עד Z), סְפָרוֹת (0 עד 9), קווים תחתיים (_) ומינוסים (-).',
-       'config-invalid-db-prefix' => '"$1" היא תחילית מסד נתונים בלתי תקינה.
-יש להשתמש רק באותיות ASCII&rlm; (a עד z&rlm;, A עד Z), סְפָרוֹת (0 עד 9), קווים תחתיים (_) ומינוסים (-).',
-       'config-connection-error' => '<div dir="ltr">$1.</div>
-
-בדקו את שם השרת, את שם המשתמש ואת הססמה בטופס להלן ונסו שוב.',
-       'config-invalid-schema' => '"$1" היא סכמה לא תקינה עבור מדיה־ויקי.
-יש להשתמש רק באותיות ASCII&rlm; (a עד z&rlm;, A עד Z), סְפָרוֹת (0 עד 9) וקווים תחתיים (_).',
-       'config-db-sys-create-oracle' => 'תוכנית ההתקנה תומכת רק בשימוש בחשבון SYSDBA ליצירת חשבון חדש.',
-       'config-db-sys-user-exists-oracle' => 'חשבון המשתמש "$1" כבר קיים. SYSDBA יכול לשמש רק ליצירת חשבון חדש!',
-       'config-postgres-old' => 'נדרש PostgreSQL $1 או גרסה חדשה יותר, הגרסה הנוכחית שלכם היא $2.',
-       'config-sqlite-name-help' => 'בחרו בשם שמזהה את הוויקי שלכם.
-אל תשתמשו ברווחים או במינוסים.
-זה יהיה שם קובץ הנתונים ל־SQLite.',
-       'config-sqlite-parent-unwritable-group' => 'לא ניתן ליצור את תיקיית הנתונים <code><nowiki>$1</nowiki></code>, כי לשָׁרַת הווב אין הרשאות לכתוב לתיקיית האם <code><nowiki>$2</nowiki></code> .
-
-תוכנת ההתקנה זיהתה את החשבון שתחתיו רץ שרת הווב שלכם.
-אפשרו לשָׁרַת הווב לכתוב לתיקייה <code><nowiki>$3</nowiki></code>.
-במערכת Unix/Linux כִתבו:
-
-<div dir="ltr"><pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre></div>',
-       'config-sqlite-parent-unwritable-nogroup' => 'לא ניתן ליצור את תיקיית הנתונים <code><nowiki>$1</nowiki></code>, כי לשָׁרַת הווב אין הרשאות לכתוב לתיקיית האם <code><nowiki>$2</nowiki></code> .
-
-תוכנת ההתקנה לא זיהתה את החשבון שתחתיו רץ שרת הווב שלכם.
-אפשרו לכל החשבונות לכתוב לתיקייה <code><nowiki>$3</nowiki></code> כדי להמשיך.
-במערכת Unix/Linux כִתבו:
-
-<div dir="ltr"><pre>cd $2
-mkdir $3
-chmod a+w $3</pre></div>',
-       'config-sqlite-mkdir-error' => 'אירעה שגיאה בעת יצירת תיקיית הנתונים "$1".
-נא לבדוק את המיקום ולנסות שוב.',
-       'config-sqlite-dir-unwritable' => 'אי־אפשר לכתוב לתיקייה "$1".
-שנו את ההרשאות שלה כך ששרת הווב יוכל לכתוב אליה ונסו שוב.',
-       'config-sqlite-connection-error' => '$1.
-
-בִדקו את תיקיית הנתונים את שם מסת הנתונים להלן ונסו שוב.',
-       'config-sqlite-readonly' => 'לא ניתן לכתוב אל הקובץ <code>$1</code>.',
-       'config-sqlite-cant-create-db' => 'לא ניתן ליצור את קובץ מסד הנתונים <code>$1</code>.',
-       'config-sqlite-fts3-downgrade' => 'ב־PHP חסרה תמיכה ב־FTS3, יבתצע שנמוך טבלאות',
-       'config-can-upgrade' => "יש טבלאות מדיה־ויקי במסד הנתונים.
-כדי לשדרג אותן למדיה־ויקי $1, לחצו '''המשך'''.",
-       'config-upgrade-done' => "השדרוג הושלם.
-
-עכשיו אפשר [$1 להשתמש בוויקי שלכם].
-
-אם תרצו ליצור מחדש את קובץ ה־<code>LocalSettings.php</code> שלכם, לחצו על הכפתור להלן.
-זה '''לא מומלץ''', אלא אם כן יש לכם בעיות עם הוויקי שלכם.",
-       'config-upgrade-done-no-regenerate' => 'השדרוג הושלם.
-
-עכשיו אפשר [$1 להתחיל להשתמש בוויקי שלכם].',
-       'config-regenerate' => 'לחולל מחדש את LocalSettings.php ←',
-       'config-show-table-status' => 'שאילתת <code>SHOW TABLE STATUS</code> נכשלה!',
-       'config-unknown-collation' => "'''אזהרה:''' מסד הנתונים משתמש בשיטת מיון שאינה מוּכּרת.",
-       'config-db-web-account' => 'חשבון במסד הנתונים לגישה מהרשת',
-       'config-db-web-help' => 'לבחור את שם המשתמש ואת הססמה ששרת הווב ישתמש בו להתחברות לשרת מסד הנתונים בזמן פעילות רגילה של הוויקי.',
-       'config-db-web-account-same' => 'להשתמש באותו חשבון כמו עבור ההתקנה',
-       'config-db-web-create' => 'ליצור חשבון אם הוא אינו קיים כבר.',
-       'config-db-web-no-create-privs' => 'לחשבון שהקלדתם להתקנה אין מספיק הרשאות ליצירת חשבות.
-החשבון שאתם מקלידים כאן צריך להיות קיים.',
-       'config-mysql-engine' => 'מנגנון האחסון:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''אזהרה''': בחרתם ב־MyISAM בתור מנוע אחסון של MySQL, וזה לא מומלץ מהסיבות הבאות:
-* המנוע הזה בקושי תומך בעיבוד מקבילי בגלל נעילת טבלאות
-* הוא פחות עמיד בפני אובדן מידע ממנועים אחרים
-* הקוד של מדיה־ויקי לא תמיד מטפל ב־MyISAM כפי שצריך
-
-אם התקנת MySQL שלכם תומכת ב־InnoDB, מומלץ מאוד שתבחרו באפשרות הזאת.
-אם התקנת MySQL שלכם אינה תומכת ב־InnoDB, אולי זה הזמן לשקול לשדרג אותה.",
-       'config-mysql-engine-help' => "'''InnoDB''' הוא כמעט תמיד האפשרות הטובה ביותר, כי במנוע הזה יש תמיכה טובה ביותר בעיבוד מקבילי.
-
-'''MyISAM''' עשוי להיות בהתקנות שמיועדות למשתמש אחד ולהתקנות לקריאה בלבד.
-מסדי נתונים עם MyISAM נוטים להיהרס לעתים קרובות יותר מאשר מסדי נתונים עם InnoDB.",
-       'config-mysql-charset' => 'ערכת הקידוד של מסד הנתונים:',
-       'config-mysql-binary' => 'בינרי',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "ב'''מצב בינרי''' (binary mode) מדיה־ויקי שומרת טקסט UTF-8 במסד הנתונים בשדות בינריים.
-זה יעיל יותר ממצב UTF-8 של MySQL ומאפשר לכם להשתמש בכל הטווח של תווי יוניקוד.
-
-ב'''מצב UTF-8'''&rlm; (UTF-8 mode)&rlm; MySQL יֵדַע מה קבוצת התווים (character set) של הטקסט שלכם ויציג וימיר אותו בהתאם, אבל לא יאפשר לכם לשמור תווים שאינם נמצאים בטווח הרב־לשוני הבסיסי ([//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane]).",
-       'config-site-name' => 'שם הוויקי:',
-       'config-site-name-help' => 'זה יופיע בשורת הכותרת של הדפדפן ובמקומות רבים אחרים.',
-       'config-site-name-blank' => 'נא להזין שם לאתר.',
-       'config-project-namespace' => 'מרחב שמות לדפי מיזם:',
-       'config-ns-generic' => 'מיזם',
-       'config-ns-site-name' => 'זהה לשם הוויקי: $1',
-       'config-ns-other' => 'אחר (לציין)',
-       'config-ns-other-default' => 'הוויקי שלי',
-       'config-project-namespace-help' => "בהתאם לדוגמה של ויקיפדיה, אתרי ויקי רבים שומרים על דפי המדיניות שלהם בנפרד מדפי התוכן שלהם ב\"'''מרחב השמות של המיזם'''\" (\"'''project namespace'''\").
-כל שמות הדפים במרחב השמות הזה מתחילים בתחילית מסוימת שאתם יכולים להגדיר כאן.
-באופן מסורתי התחילית הזאת מבוססת על שם הוויקי, והיא אינה יכולה להכיל תווי פיסוק כגון \"#\" או \":\".",
-       'config-ns-invalid' => 'מרחב השמות "<nowiki>$1</nowiki>" אינו תקין.
-הקלידו שם אחר למרחב השמות של המיזם.',
-       'config-ns-conflict' => 'מרחב השמות שהגדרתם "<nowiki>$1</nowiki>" מתנגש עם מרחב שמות מובנה של מדיה־ויקי.
-הגדירו מרחב שמות מיזם שונה.',
-       'config-admin-box' => 'חשבון מפעיל',
-       'config-admin-name' => 'שמכם:',
-       'config-admin-password' => 'ססמה:',
-       'config-admin-password-confirm' => 'הססמה שוב:',
-       'config-admin-help' => 'הקלידו כאן את שם המשתמש, למשל "שקד לוי" או "Joe Bloggs".
-זה השם שישמש אתכם כדי להיכנס לוויקי.',
-       'config-admin-name-blank' => 'נא להזין את שם המשתמש של המפעיל.',
-       'config-admin-name-invalid' => 'שם המשתמש שהוקלד "<nowiki>$1</nowiki>" אינו תקין.
-הקלידו שם משתמש אחר.',
-       'config-admin-password-blank' => 'הקלידו ססמה לחשבון המפעיל.',
-       'config-admin-password-same' => 'הססמה לא יכולה להיות זהה לשם המשתמש.',
-       'config-admin-password-mismatch' => 'שתי הססמאות שהוזנו אינן מתאימות.',
-       'config-admin-email' => 'כתובת הדוא״ל:',
-       'config-admin-email-help' => 'הקלידו כתובת דוא״ל שתאפשר לכם לקבל מכתבים ממשתמשים אחרים בוויקי, לאתחל את הססמה, ולקבל הודעות על שינויים בדפים ברשימת המעקב שלכם. אפשר להשאיר את השדה הזה ריק.',
-       'config-admin-error-user' => 'שגיאה פנימית ביצירת מפעיל בשם "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'שגיאה פנימית בהגדרת ססמה עבור המפעיל "<nowiki>$1</nowiki>"&rlm;: <pre>$2</pre>',
-       'config-admin-error-bademail' => 'הכנסתם כתובת דוא״ל לא תקינה.',
-       'config-subscribe' => 'להירשם ל[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce רשימת התפוצה עם הודעות על גרסאות חדשות].',
-       'config-subscribe-help' => 'זוהי רשימת תפוצה עם הודעות מעטות שמשמשת להודעות על הוצאת גרסאות, כולל עדכוני אבטחה חשובים.
-מומלץ להירשם אליה ולעדכן את מדיה־ויקי כאשר יוצאות גרסאות חדשות.',
-       'config-subscribe-noemail' => 'ניסיתם להירשם לרשימת תפוצה של הודעות בלי לתת כתובת דוא"ל.
-נא לתת כתובת דוא"ל אם אתם רוצים להירשם לרשימת התפוצה.',
-       'config-almost-done' => 'כמעט סיימתם!
-אפשר לדלג על שאר ההגדרות ולהתקין את הוויקי כבר עכשיו.',
-       'config-optional-continue' => 'הצגת שאלות נוספות.',
-       'config-optional-skip' => 'משעמם לי, תתקינו לי כבר את הוויקי הזה.',
-       'config-profile' => 'תסריט הרשאות משתמשים:',
-       'config-profile-wiki' => 'ויקי פיתוח',
-       'config-profile-no-anon' => 'נדרשת יצירת חשבון',
-       'config-profile-fishbowl' => 'עורכים מורשים בלבד',
-       'config-profile-private' => 'ויקי פרטי',
-       'config-profile-help' => "אתרי ויקי עובדים הכי טוב כאשר אתם מאפשרים לכמה שיותר אנשים לערוך אותם.
-במדיה־ויקי קל לסקור את השינויים האחרונים ולשחזר כל נזק שעושים משתמשים תמימים או משחיתים.
-
-עם זאת, אנשים שונים מצאו למדיה־ויקי שימושים מגוּונים ולעתים לא קל לשכנע את כולם ביתרונות של \"דרך הוויקי\" המסורתית. ולכן יש לכם בררה.
-
-באתר מסוג '''{{int:config-profile-wiki}}''' – לכולם יש הרשאה לערוך, אפילו בלי להיכנס לחשבון.
-באתר וויקי מסוג '''{{int:config-profile-no-anon}}''' יש ביטחון גדול יותר, אבל הגדרה כזאת יכולה להרתיע תורמים מזדמנים.
-
-בתסריט '''{{int:config-profile-fishbowl}}''' רק משתמשים שקיבלו אישור יכולים לערוך, אבל כל הגולשים יכולים לקרוא את הדפים ואת גרסאותיהם הקודמות.
-ב'''{{int:config-profile-private}}''' רק משתמשים שקיבלו אישור יכולים לקרוא ולערוך דפים.
-
-הגדרות מורכבות של הרשאות אפשריות אחרי ההתקנה, ר׳ את [//www.mediawiki.org/wiki/Manual:User_rights הפרק על הנושא הזה בספר ההדרכה].",
-       'config-license' => 'זכויות יוצרים ורישיון:',
-       'config-license-none' => 'ללא כותרת תחתית עם רישיון',
-       'config-license-cc-by-sa' => 'קריאייטיב קומונז–ייחוס–שיתוף זהה',
-       'config-license-cc-by' => 'קריאייטיב קומונז–ייחוס',
-       'config-license-cc-by-nc-sa' => 'קריאייטיב קומונז ייחוס–ללא שימוש מסחרי–שיתוף זהה',
-       'config-license-cc-0' => 'קריאייטיב קומונז אפס (נחלת הכלל)',
-       'config-license-gfdl' => 'רישיון חופשי למסמכים של גנו גרסה 1.3 או חדשה יותר',
-       'config-license-pd' => 'נחלת הכלל',
-       'config-license-cc-choose' => 'בחרו רישיון קריאייטיב קומונז מותאם אישית',
-       'config-license-help' => "אתרי ויקי ציבוריים רבים מפרסמים את כל התרומות תחת [http://freedomdefined.org/Definition רישיון חופשי].
-זה עוזר ליצור תחושה של בעלות קהילתית ומעודד תרומה לאורך זמן.
-זה בדרך כלל לא נחוץ לאתר ויקי פרטי או בחברה מסחרית.
-
-אם אתם רוצים אפשרות להשתמש בטקסט מוויקיפדיה ואתם רוצים שוויקיפדיה תוכל לקבל עותקים של טקסטים מהוויקי שלכם, כדאי לכם לבחור ב'''רישיון קריאייטיב קומונז ייחוס–שיתוף זהה''' (CC-BY-SA).
-
-ויקיפדיה השתמשה בעבר ברישיון החופשי למסמכים של גנו (GNU FDL או GFDL).
-הוא עדיין רישיון תקין, אבל קשה להבנה.
-כמו־כן, קשה לעשות שימוש חוזר ביצירות שפורסמו לפי GFDL.",
-       'config-email-settings' => 'הגדרות דוא״ל',
-       'config-enable-email' => 'להפעיל דוא״ל יוצא',
-       'config-enable-email-help' => 'אם אתם רוצים שדוא״ל יעבוד, [http://www.php.net/manual/en/mail.configuration.php אפשרויות הדוא״ל של PHP] צריכות להיות מוגדרות נכון.
-אם אינכם רוצים להפעיל שום אפשרויות דוא״ל, כבו אותן כאן ועכשיו.',
-       'config-email-user' => 'להפעיל שליחת דוא״ל ממשתמש למשתמש',
-       'config-email-user-help' => 'לאפשר לכל המשתמשים לשלוח אחד לשני דוא״ל אם הם הפעילו את זה בהעדפות שלהם.',
-       'config-email-usertalk' => 'להפעיל הודעות על דף שיחת משתמש',
-       'config-email-usertalk-help' => 'לאפשר למשתמשים לקבל הודעות על שינויים בדפי המשתמש שלהם, אם הם הפעילו את זה בהעדפות שלהם.',
-       'config-email-watchlist' => 'הפעלת התרעה על רשימת המעקב',
-       'config-email-watchlist-help' => 'לאפשר למשתמשים לקבל הודעות על הדפים ברשימת המעקב שלהם אם הם הפעילו את זה בהעדפות שלהם.',
-       'config-email-auth' => 'הפעלת התרעה בדוא״ל',
-       'config-email-auth-help' => "אם האפשרות הזאת מופעלת, משתמשים יצטרכו לאשר את כתובת הדוא״ל שלהם באמצעות קישור שיישלח אליהם בכל פעם שהם יגדירו או ישנו אותה.
-רק כתובות דוא״ל מאושרות יכולות לקבלת דוא״ל ממשתמשים אחרים או מכתבים עם הודעות על שינויים.
-'''מומלץ''' להגדיר את האפשרות הזאת לאתרי ויקי ציבוריים כי אפשר לעשות שימוש לרעה בתכונות הדוא״ל.",
-       'config-email-sender' => 'כתובת דוא״ל לתשובות:',
-       'config-email-sender-help' => 'הכניסו את כתובת הדוא״ל שתשמש ככתובת לתשובה לכל הדואר היוצא.
-לשם יישלחו תגובות שגיאה (bounce).
-שרתי דוא״ל רבים דורשים שלפחות החלק של המתחם יהיה תקין.',
-       'config-upload-settings' => 'העלאת קבצים ותמונות',
-       'config-upload-enable' => 'להפעיל העלאת קבצים',
-       'config-upload-help' => 'העלאות קבצים חושפות את השרת שלכם לסיכוני אבטחה.
-למידע נוסף, קִראו את [//www.mediawiki.org/wiki/Manual:Security חלק האבטחה] בספר ההדרכה.
-
-כדי להפעיל העלאת קבצים שנו את ההרשאות של התיקייה <code>images</code> תחת תיקיית השורש של מדיה־ויקי כך ששרת הווב יוכל לכתוב אליה.
-זה מפעיל את האפשרות הזאת.',
-       'config-upload-deleted' => 'תיקיית לקבצים שנמחקו:',
-       'config-upload-deleted-help' => 'בחרו את התיקייה לארכוב קבצים מחוקים.
-כדאי שזה לא יהיה נגיש לכל העולם דרך הרשת.',
-       'config-logo' => 'כתובת הסמל:',
-       'config-logo-help' => 'המראה ההתחלתי של מדיה־ויקי מכיל מקום לסמל של 135 על 160 פיקסלים בפינה העליונה מעל תפריט הצד.
-יש להעלות תמונה בגודל מתאים ולהכניס את הכתובת כאן.
-
-אם אינכם רוצים סמל, השאירו את התיבה הזאת ריקה.', # Fuzzy
-       'config-instantcommons' => 'להפעיל את Instant Commons',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] היא תכונה שמאפשרת לאתרי ויקי להשתמש בתמונות, בצלילים ובמדיה אחרת שנמצאת באתר [//commons.wikimedia.org/ ויקישיתוף] (Wikimedia Commons).
-כדי לעשות את זה, מדיה־ויקי צריך לגשת לאינטרנט.
-
-למידע נוסף על התכונה הזאת, כולל הוראות איך להפעיל את זה לאתרי ויקי שאינם ויקישיתוף, ר׳ [//mediawiki.org/wiki/Manual:$wgForeignFileRepos את ספר ההדרכה].',
-       'config-cc-error' => 'בורר רישיונות קריאייטיב קומונז לא החזיר שום תוצאה.
-הקלידו את שם הרישיון ידנית.',
-       'config-cc-again' => 'נא לבחור שוב...',
-       'config-cc-not-chosen' => 'בחרו באיזה רישיון קריאייטיב קומונז להשתמש ולחצו "המשך".',
-       'config-advanced-settings' => 'הגדרות מתקדמות',
-       'config-cache-options' => 'הגדרות למטמון עצמים (object caching):',
-       'config-cache-help' => 'מטמון עצמים משמש לשיפור המהירות של מדיה־ויקי על־ידי שמירה של נתונים שהשימוש בהם נפוץ במטמון.
-לאתרים בינוניים וגדולים כדאי מאוד להפעיל את זה, וגם אתרים קטנים ייהנו מזה.',
-       'config-cache-none' => 'ללא מטמון (שום יכולת אינה מוּסרת, אבל הביצועים באתרים גדולים ייפגעו)',
-       'config-cache-accel' => 'מטמון עצמים (object caching) של PHP&rlm; (APC&rlm;, XCache או WinCache)',
-       'config-cache-memcached' => 'להשתמש ב־Memcached (דורש התקנות והגדרות נוספות)',
-       'config-memcached-servers' => 'שרתי Memcached:',
-       'config-memcached-help' => 'רשימת כתובות IP ש־Memcached ישתמש בהן.
-יש לרשום כתובת אחת בכל שורה ולציין את הפִּתְחָה (port), למשל:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => 'בחרת ב־Memcached בתתור סוג המטמון שלכם, אבל לא הגדרתם שום שרת.',
-       'config-memcache-badip' => 'הקלדתם כתובת IP בלתי תקינה ל־Memcached&lrm;: $1.',
-       'config-memcache-noport' => 'לא הגדרתם פתחה לשימוש שרת Memcached&rlm;: $1.
-אם אינכם יודעים את מספר הפתחה, בררת המחדל היא 11211.',
-       'config-memcache-badport' => 'מספרי פתחה של Memcached צריכים להיות בין $1 ל־$2',
-       'config-extensions' => 'הרחבות',
-       'config-extensions-help' => 'ההרחבות ברשימה לעיל התגלו בתיקיית <span dir="ltr"><code>./extensions</code></span> שלכם.
-
-ייתכן שזה ידרוש הגדרות נוספות, אבל תוכלו להפעיל אותן עכשיו.',
-       'config-install-alreadydone' => "'''אזהרה:''' נראה שכבר התקנתם את מדיה־ויקי ואתם מנסים להתקין אותה שוב.
-אנה התקדמו לדף הבא.",
-       'config-install-begin' => 'כשתלחצו על "{{int:config-continue}}", תתחילו את ההתקנה של מדיה־ויקי.
-אם אתם עדיין רוצים לשנות משהו, לחצו על "{{int:config-back}}"',
-       'config-install-step-done' => 'בוצע',
-       'config-install-step-failed' => 'נכשל',
-       'config-install-extensions' => 'כולל הרחבות',
-       'config-install-database' => 'הקמת מסד נתונים',
-       'config-install-schema' => 'יצירת סכמה',
-       'config-install-pg-schema-not-exist' => 'סכמה של PostgreSQL אינה קיימת',
-       'config-install-pg-schema-failed' => 'יצירת טבלאות נכשלה.
-ודאו כי המשתמש "$1" יכול לכתוב לסכמה "$2".',
-       'config-install-pg-commit' => 'שמירת שינויים',
-       'config-install-pg-plpgsql' => 'בדיקת שפת PL/pgSQL',
-       'config-pg-no-plpgsql' => 'צריך להתקין את שפת PL/pgSQL במסד הנתונים $1',
-       'config-pg-no-create-privs' => 'לחשבון שהגדרתם להתקנה אין מספיק הרשאות ליצירת חשבון.',
-       'config-pg-not-in-role' => 'החשבון שציינתם עבור משתמש שרת הווב כבר קיים.
-החשבון שסיפקתם להתקנה אינו חשבון בעל הרשאות (superuser) ואינו חבר בתפקיד (role) של משתמש שרת הווב, אז אין אפשרות ליצור עצמים בבעלות משתמש שרת הווב.
-
-כעת נדרש במדיה־ויקי שהטבלאות יהיו בבעלות של משתמש שרת הווב. נא לציין שם חשבון שרת וב אחר או ללחוץ על כפתור "אחורה" ולציין משתמש התקנה בעל הרשאות מתאימות.',
-       'config-install-user' => 'יצירת חשבון במסד נתונים',
-       'config-install-user-alreadyexists' => 'המשתמש "$1" כבר קיים',
-       'config-install-user-create-failed' => 'יצירת משתמש "$1" נכשלה: $2',
-       'config-install-user-grant-failed' => 'מתן הרשאות למשתמש "$1" נכשל: $2',
-       'config-install-user-missing' => 'המשתמש "$1" שצוין אינו קיים.',
-       'config-install-user-missing-create' => 'המשתמש "$1" שצוין אינו קיים.
-נא ללחוץ על תיבת בסימון "יצירת חשבון" להלן אם אתם רוצים ליצור אותו.',
-       'config-install-tables' => 'יצירת טבלאות',
-       'config-install-tables-exist' => "'''אזהרה:''' נראה שטבלאות מדיה־ויקי כבר קיימות.
-מדלג על יצירתן.",
-       'config-install-tables-failed' => "'''שגיאה:''' יצירת הטבלה נכשלה עם השגיאה הבאה: $1",
-       'config-install-interwiki' => 'אכלוס טבלת בינוויקי התחלתית',
-       'config-install-interwiki-list' => 'קריאת הקובץ <code>interwiki.list</code> לא הצליחה.',
-       'config-install-interwiki-exists' => "'''אזהרה:''': נראה שבטבלת הבינוויקי כבר יש רשומות.
-מדלג על הרשומה ההתחלתית.",
-       'config-install-stats' => 'אתחול סטטיסטיקות',
-       'config-install-keys' => 'יצירת מפתחות סודיים',
-       'config-insecure-keys' => "'''אזהרה''': {{PLURAL:$2|מפתח|מפתחות}} אבטחה ($1) {{PLURAL:$2|שנוצר|שנוצרו}} במהלך ההתקנה {{PLURAL:$2|אינו בטוח|אינם בטוחים}} מספיק. מומלץ לשקול לשנות {{PLURAL:$2|אותו|אותם}} ידנית.",
-       'config-install-sysop' => 'יצירת חשבון מפעיל',
-       'config-install-subscribe-fail' => 'הרישום ל־mediawiki-announce לא הצליח: $1',
-       'config-install-subscribe-notpossible' => 'cURL אינה מותקנת ו־allow_url_fopen אינה זמינה.',
-       'config-install-mainpage' => 'יצירת דף ראשי עם תוכן התחלתי.',
-       'config-install-extension-tables' => 'יצירת טבלאות להרחבות מופעלות',
-       'config-install-mainpage-failed' => 'לא הצליחה הכנסת דף ראשי: $1.',
-       'config-install-done' => "'''מזל טוב!'''
-התקנתם בהצלחה את מדיה־ויקי.
-
-תוכנת ההתקנה יצרה את הקובץ <code>LocalSettings.php</code>.
-הוא מכיל את כל ההגדרות שלכם.
-
-תצטרכו להוריד אותו ולשים אותו בבסיס ההתקנה של הוויקי שלכם (אותה התיקייה שבה נמצא הקובץ index.php). ההורדה הייתה אמורה להתחיל באופן אוטומטי.
-
-אם ההורדה לא התחילה, או אם ביטלתם אותה, אפשר להתחיל אותה מחדש בלחיצה על הקישור הבא:
-
-$3
-
-'''שימו לב''': אם לא תעשו זאת עכשיו, קובץ ההגדרות המחוּלל לא יהיה זמין לכם שוב.
-
-אחרי שתעשו את זה, תוכלו '''[$2 להיכנס לוויקי שלכם]'''.",
-       'config-download-localsettings' => 'הורדת <code>LocalSettings.php</code>',
-       'config-help' => 'עזרה',
-       'config-nofile' => 'הקובץ "$1" לא נמצא. האם הוא נמחק?',
-       'mainpagetext' => "'''תוכנת מדיה־ויקי הותקנה בהצלחה.'''",
-       'mainpagedocfooter' => 'היעזרו ב[//meta.wikimedia.org/wiki/Help:Contents מדריך למשתמש] למידע על שימוש בתוכנת הוויקי.
-
-== קישורים שימושיים ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings רשימת ההגדרות]
-* [//www.mediawiki.org/wiki/Manual:FAQ שאלות ותשובות על מדיה־ויקי]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce רשימת התפוצה על השקת גרסאות]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources תרגום מדיה־ויקי לשפה שלך]',
-);
-
-/** Hindi (हिन्दी)
- */
-$messages['hi'] = array(
-       'mainpagetext' => "'''मीडियाविकिका इन्स्टॉलेशन पूरा हो गया हैं ।'''",
-       'mainpagedocfooter' => 'विकि सॉफ्टवेयरके इस्तेमाल के लिये [//meta.wikimedia.org/wiki/Help:Contents उपयोगकर्ता गाईड] देखें ।
-
-== शुरुवात करें ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings कॉन्फिगरेशन सेटींगकी सूची]
-* [//www.mediawiki.org/wiki/Manual:FAQ मीडियाविकिके बारे में प्राय: पूछे जाने वाले सवाल]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce मीडियाविकि मेलिंग लिस्ट]', # Fuzzy
-);
-
-/** Fiji Hindi (Latin script) (Fiji Hindi)
- * @author Thakurji
- */
-$messages['hif-latn'] = array(
-       'mainpagetext' => "'''MediaWiki ke safalta se install kar dewa gais hai.'''",
-       'mainpagedocfooter' => "Wiki software ke use kare ke aur jaankari ke khatir [//meta.wikimedia.org/wiki/Help:Contents User's Guide] ke dekho.
-
-== Getting started ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Hiligaynon (Ilonggo)
- * @author Anjoeli9806
- */
-$messages['hil'] = array(
-       'mainpagetext' => "'''Ang MediaWiki madinalag-on nga na-instala.'''",
-       'mainpagedocfooter' => " Magkonsulta sa [//meta.wikimedia.org/wiki/Help:Contents User's Guide] para sa mga impormasyon sa paggamit sang wiki nga software.
-
-== Pag-umpisa ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista sang mga konpigorasyon sang pagkay-o]
-* [//www.mediawiki.org/wiki/Manual:FAQ Mga Masami Pamangkoton sa MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista sang mga ginapadal-an sang sulat kon may paguha-on nga MediaWiki]", # Fuzzy
-);
-
-/** Croatian (hrvatski)
- */
-$messages['hr'] = array(
-       'mainpagetext' => "'''Softver MediaWiki je uspješno instaliran.'''",
-       'mainpagedocfooter' => 'Pogledajte [//meta.wikimedia.org/wiki/MediaWiki_localisation dokumentaciju o prilagodbi sučelja]
-i [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Vodič za suradnike] za pomoć pri uporabi i podešavanju.', # Fuzzy
-);
-
-/** Upper Sorbian (hornjoserbsce)
- * @author Michawiki
- * @author 아라
- */
-$messages['hsb'] = array(
-       'config-desc' => 'Instalaciski program za MediaWiki',
-       'config-title' => 'Instalacija MediaWiki $1',
-       'config-information' => 'Informacije',
-       'config-localsettings-upgrade' => 'Dataja <code>LocalSettings.php</code> je so wotkryła.
-Zo by tutu instalaciju aktualizował, zapodaj prošu hódnotu za parameter <code>$wgUpgradeKey</code> do slědowaceho pola.
-Namakaš tón parameter w dataji <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Dataja <code>LocalSettings.php</code> bu wotkryta.
-Zo by tutu instalaciju aktualizował, wuwjedźće <code>update.php</code>',
-       'config-localsettings-key' => 'Aktualizaciski kluč:',
-       'config-localsettings-badkey' => 'Kluč, kotryž sy podał, je wopak',
-       'config-upgrade-key-missing' => 'Eksistowaca instalacija MediaWiki je so wotkryła.
-Zo by tutu instalaciju aktualizował, staj prošu slědowacu linku deleka w dataji <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => 'Zda so, zo eksistwoaca dataja <code>LocalSettings.php</code> je njedospołna.
-Wariabla $1 njeje nastajena.
-Prošu změń dataju <code>LocalSettings.php</code>, zo by so tuta wariabla nastajiła a klikń na "{{int:Config-continue}}".',
-       'config-localsettings-connection-error' => 'Při zwjazowanju z datowej banku z pomocu nastajenjow podatych w <code>LocalSettings.php</code> abo <code>AdminSettings.php</code> je zmylk wustupił. Prošu skoriguj tute nastajenja a spytaj hišće raz.
-
-$1',
-       'config-session-error' => 'Zmylk při startowanju posedźenja: $1',
-       'config-session-expired' => 'Zda so, zo twoje posedźenske daty su spadnjene.
-Posedźenja su za čas žiwjenja $1 skonfigurowane.
-Móžeš jón přez nastajenje <code>session.gc_maxlifetime</code> w php.ini powyšić.
-Startuj instalaciski proces znowa.',
-       'config-no-session' => 'Twoje posedźenske daty su so zhubili!
-Skontroluj swój php.ini a zawěsć, zo <code>session.save_path</code> je na prawy zapis nastajeny.',
-       'config-your-language' => 'Twoja rěč:',
-       'config-your-language-help' => 'Wubjer rěč, kotraž ma so za instalaciski proces wužiwać.',
-       'config-wiki-language' => 'Wikirěč:',
-       'config-wiki-language-help' => 'Wubjer rěč, w kotrejž wiki ma so zwjetša pisać.',
-       'config-back' => '← Wróćo',
-       'config-continue' => 'Dale →',
-       'config-page-language' => 'Rěč',
-       'config-page-welcome' => 'Witaj do MediaWiki!',
-       'config-page-dbconnect' => 'Z datowej banku zwjazać',
-       'config-page-upgrade' => 'Eksistowacu instalaciju aktualizować',
-       'config-page-dbsettings' => 'Nastajenja datoweje banki',
-       'config-page-name' => 'Mjeno',
-       'config-page-options' => 'Opcije',
-       'config-page-install' => 'Instalować',
-       'config-page-complete' => 'Dokónčeny!',
-       'config-page-restart' => 'Instalaciju znowa startować',
-       'config-page-readme' => 'Čitaj mje',
-       'config-page-releasenotes' => 'Wersijowe informacije',
-       'config-page-copying' => 'Kopěrowanje',
-       'config-page-upgradedoc' => 'Aktualizowanje',
-       'config-page-existingwiki' => 'Eksistowacy wiki',
-       'config-help-restart' => 'Chceš wšě składowane daty hašeć, kotrež sy zapodał a instalaciski proces znowa startować?',
-       'config-restart' => 'Haj, znowa startować',
-       'config-sidebar' => '* [//www.mediawiki.org MediaWiki Startowa strona MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents Nawod za wužiwarjow]
-* [//www.mediawiki.org/wiki/Manual:Contents Nawod za administratorow]
-* [//www.mediawiki.org/wiki/Manual:FAQ Huste prašenja]
-----
-* <doclink href=Readme>Čitaj mje</doclink>
-* <doclink href=ReleaseNotes>Wersijowe informacije</doclink>
-* <doclink href=Copying>Licencne postajenja</doclink>
-* <doclink href=UpgradeDoc>Aktualizacija</doclink>',
-       'config-env-good' => 'Wokolina je so skontrolowała.
-Móžeš MediaWiki instalować.',
-       'config-env-bad' => 'Wokolina je so skontrolowała.
-Njemóžeš MediaWiki instalować.',
-       'config-env-php' => 'PHP $1 je instalowany.',
-       'config-env-php-toolow' => 'PHP $1 je instalowany.
-Ale MediaWiki wužaduje sej PHP $2 abo wyši.',
-       'config-unicode-using-utf8' => 'Za normalizaciju Unicode so utf8_normalize.so Briona Vibbera wužiwa.',
-       'config-unicode-using-intl' => 'Za normalizaciju Unicode so [http://pecl.php.net/intl PECL-rozšěrjenje intl] wužiwa.',
-       'config-no-db' => 'Njeda so přihódny ćěrjak datoweje banki namakać! Dyrbiš ćěrjak datoweje banki za PHP instalować.
-Slědowace typy datoweje banki so podpěruja: $1.
-
-Jeli wužiwaš zhromadnje wužiwany serwer, proš swojeho poskićowarja, zo by přihódny ćěrjak datoweje banki instalował.
-Jeli sy PHP sam kompilował, konfiguruj jón znowa z aktiwizowanym programom datoweje banki, na přikład z pomocu <code>./configure --with-mysql</code>.
-Jeli sy PHP z Debianoweho abo Ubuntuoweho paketa instalował, dyrbiš tež modul php5-mysql instalować.',
-       'config-outdated-sqlite' => "'''Warnowanje''': maš SQLite $1, kotryž je starši hač minimalna trěbna wersija $2. SQLite njebudźe k dispoziciji stać.",
-       'config-no-fts3' => "'''Warnowanje''': SQLite je so bjez [//sqlite.org/fts3.html FTS3-modula] kompilował, pytanske funkcije njebudu k dispoziciji stać.",
-       'config-register-globals' => "'''Warnowanje: Funkcija <code>[http://php.net/register_globals register_globals]</code> PHP je zmóžnjena.'''
-'''Znjemóžń ju, jeli móžeš.'''
-MediaWiki budźe fungować, ale twój serwer je potencielnym wěstotnym njedostatkam wustajeny.",
-       'config-ze1' => "'''Chutny zmylk: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] je aktiwny!'''
-Tuta opcija zawinuje grawěrowace zmylki při MediaWiki.
-Njemóžeš MediaWiki instalować abo wužiwać, chibazo tuta opcija je znjemóžnjena.",
-       'config-safe-mode' => "'''Warnowanje:''' [http://www.php.net/features.safe-mode wěsty modus] PHP je aktiwny.
-To móže problemy zawinować, předewšěm, jeli so datajowe nahraća a podpěra <code>math</code> wužiwaja.",
-       'config-xml-bad' => 'XML-modul za PHP faluje.
-MediaWiki trjeba funkcije w tutym modulu a njebudźe w tutej konfiguraciji fungować.
-Jeli wužiwaš Mandrake, instaluj paket php-xml.',
-       'config-pcre' => 'Zda so, zo modul za PCRE-podpěru faluje.
-MediaWiki trjeba z Perl kompatibelne funkcije za regularne wurazy, zo by fungował.',
-       'config-pcre-no-utf8' => "'''Ćežki zmylk''': Zda so, zo PCRE-modul za PHP ma so bjez PCRE_UTF8-podpěry kompilować.
-MediaWiki trjeba UTF-8-podpěru, zo by korektnje fungował.",
-       'config-memory-raised' => 'PHP-parameter <code>memory_limit</code> je $1, je so na hódnotu $2 zwyšił.',
-       'config-memory-bad' => "'''Warnowanje:''' PHP-parameter <code>memory_limit</code> ma hódnotu $1,
-To je najskerje přeniske.
-Instalacija móhła so njeporadźić!",
-       'config-ctype' => "'''Ćežki zmylk''': PHP dyrbi so z podpěru za [http://www.php.net/manual/en/ctype.installation.php rozšěrjenje Ctype] kompilować.",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] je instalowany',
-       'config-apc' => '[http://www.php.net/apc APC] je instalowany',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] je instalowany',
-       'config-diff3-bad' => 'GNU diff3 njenamakany.',
-       'config-no-uri' => "'''Zmylk:''' Aktualny URI njeda so postajić.
-Instalacija bu přetorhnjena.",
-       'config-no-cli-uri' => "'''Warnowanje''': Žana skriptowa šćežka (--scriptpath) podata, standard so wužiwa: <code>$1</code>.",
-       'config-using-server' => 'Serwerowe mjeno "<nowiki>$1</nowiki>" so wužiwa.',
-       'config-using-uri' => 'Serwerowy URL "<nowiki>$1$2</nowiki>" so wužiwa.',
-       'config-db-type' => 'Typ datoweje banki:',
-       'config-db-host' => 'Serwer datoweje banki:',
-       'config-db-host-oracle' => 'Datowa banka TNS:',
-       'config-db-wiki-settings' => 'Tutón wiki identifikować',
-       'config-db-name' => 'Mjeno datoweje banki:',
-       'config-db-name-oracle' => 'Šema datoweje banki:',
-       'config-db-install-account' => 'Wužiwarske konto za instalaciju',
-       'config-db-username' => 'Wužiwarske mjeno datoweje banki:',
-       'config-db-password' => 'Hesło datoweje banki:',
-       'config-db-password-empty' => 'Prošu zapodaj hesło za noweho wužiwarja datoweje banki: $1.
-Byrnjež było móžno wužiwarjow bjez hesłow wutworić, njeje to wěste.',
-       'config-db-install-username' => 'Zapodaj wužiwarske mjeno, kotrež budźe so za zwisk z datowej banku za instalaciski proces wužiwać.
-To njeje wužiwarske mjeno konta MediaWiki; to je wužiwarske mjeno za twoju datowu banku.',
-       'config-db-install-password' => 'Zapodaj hesło, kotrež budźe so za zwisk z datowej banku za instalaciski proces wužiwać.
-To njeje hesło konta MediaWiki; to je hesło za twoju datowu banku.',
-       'config-db-install-help' => 'Zapodaj wužiwarske mjeno a hesło, kotrejž měłoj so za zwisk z datowej banku za instalaciski proces wužiwać.',
-       'config-db-account-lock' => 'Samsne wužiwarske mjeno a hesło za normalnu operaciju wužiwać',
-       'config-db-wiki-account' => 'Wužiwarske konto za normalnu operaciju',
-       'config-db-prefix' => 'Tabelowy prefiks datoweje banki:',
-       'config-db-charset' => 'Znamješkowa sadźba datoweje banki',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binarny',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 wróćokompatibelny UTF-8',
-       'config-mysql-old' => 'MySQL $1 abo nowši trěbny, maš $2.',
-       'config-db-port' => 'Port datoweje banki:',
-       'config-db-schema' => 'Šema za MediaWiki',
-       'config-db-schema-help' => 'Tuta šema da so zwjetša derje wužiwać.
-Změń ju jenož, jeli su přeswědčiwe přičiny za to.',
-       'config-pg-test-error' => "Zwisk z datowej banku '''$1''' móžno njeje: $2",
-       'config-sqlite-dir' => 'Zapis SQLite-datow:',
-       'config-oracle-def-ts' => 'Standardny tabelowy rum:',
-       'config-oracle-temp-ts' => 'Nachwilny tabelowy rum:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-mysql' => '* $1 je primarny cil za MediaWiki a podpěruje so najlěpje ([http://www.php.net/manual/en/mysql.installation.php Nawod ke kompilowanju  PHP z  MySQL-podpěru])',
-       'config-support-postgres' => '* $1 je popularny system datoweje banki zjawneho žórła jako alternatiwa k MySQL ([http://www.php.net/manual/en/pgsql.installation.php nawod za kompilowanje PHP z podpěru PostgreSQL]). Móhło hišće někotre zmylki eksistować, a njeporuča so jón w produktiwnej wokolinje wužiwać.',
-       'config-support-oracle' => '* $1 je komercielna předewzaćelska datowa banka. ([http://www.php.net/manual/en/oci8.installation.php Nawod za kompilowanje PHP z OCI8-podpěru])',
-       'config-header-mysql' => 'Nastajenja MySQL',
-       'config-header-postgres' => 'Nastajenja PostgreSQL',
-       'config-header-sqlite' => 'Nastajenja SQLite',
-       'config-header-oracle' => 'Nastajenja Oracle',
-       'config-invalid-db-type' => 'Njepłaćiwy typ datoweje banki',
-       'config-missing-db-name' => 'Dyrbiš hódnotu za "Mjeno datoweje banki" zapodać',
-       'config-missing-db-host' => 'Dyrbiš hódnotu za "Database host" zapodać',
-       'config-missing-db-server-oracle' => 'Dyrbiš hódnotu za "Database TNS" zapodać',
-       'config-invalid-db-server-oracle' => 'Njepłaćiwa datowa banka TNS "$1".
-Wužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9), podsmužki (_) a dypki (.).',
-       'config-invalid-db-name' => 'Njepłaćiwe mjeno "$1" datoweje banki.
-Wužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9),a podsmužki (_) a wjazawki (-).',
-       'config-invalid-db-prefix' => 'Njepłaćiwy prefiks "$1" datoweje banki.
-Wužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9), podsmužki (_) a wjazawki (-).',
-       'config-connection-error' => '$1.
-
-Skontroluj serwer, wužiwarske a hesło a spytaj hišće raz.',
-       'config-invalid-schema' => 'Njepłaćiwe šema za MediaWiki "$1".
-Wužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9) a podsmužki (_).',
-       'config-db-sys-create-oracle' => 'Instalaciski program podpěruje jenož wužiwanje SYSDBA-konta za zakoženje noweho konta.',
-       'config-db-sys-user-exists-oracle' => 'Wužiwarske konto "$1" hižo eksistuje. SYSDBA hodźi so jenož za załoženje noweho konta wužiwać!',
-       'config-postgres-old' => 'PostgreSQL $1 abo nowši trěbny, maš $2.',
-       'config-sqlite-name-help' => 'Wubjer mjeno, kotrež twój wiki identifikuje.
-Njewužij mjezery abo wjazawki.
-To budźe so za mjeno dataje SQLite-datow wužiwać.',
-       'config-sqlite-mkdir-error' => 'Zmylk při wutworjenju datoweho zapisa "$1".
-Skontroluj městno a spytaj hišće raz.',
-       'config-sqlite-dir-unwritable' => 'Njeje móžno do zapisa "$1" pisać.
-Změń jeho prawa, tak zo webserwer móže do njeho pisać a spytaj hišće raz.',
-       'config-sqlite-connection-error' => '$1.
-
-Skontroluj datowy zapis a mjeno datoweje banki kaj spytaj hišće raz.',
-       'config-sqlite-readonly' => 'Do dataje <code>$1</code> njeda so pisać.',
-       'config-sqlite-cant-create-db' => 'Dataja <code>$1</code> datoweje banki njeda so wutworić.',
-       'config-sqlite-fts3-downgrade' => 'PHP wo podpěrje FTS3 k dispoziciji njesteji, table so znižuja',
-       'config-can-upgrade' => "Su tabele MediaWiki w tutej datowej bance.
-Zo by je na MediaWiki $1 aktualizował, klikń na '''Dale'''.",
-       'config-upgrade-done-no-regenerate' => 'Aktualizacija dokónčena.
-
-Móžeš nětko [$1 swój wiki wužiwać].',
-       'config-regenerate' => 'LocalSettings.php znowa wutworić →',
-       'config-show-table-status' => 'Naprašowanje <code>SHOW TABLE STATUS</code> je so njeporadźiło!',
-       'config-unknown-collation' => "'''Warnowanje:''' Datowa banka njeznatu kolaciju wužiwa.",
-       'config-db-web-account' => 'Konto datoweje banki za webpřistup',
-       'config-db-web-help' => 'wubjer wužiwarske mjeno a hesło, kotrejž webserwer budźe wužiwać, zo by z serwerom datoweje banki za wšědnu operaciju zwjazać',
-       'config-db-web-account-same' => 'Samsne konto kaž za instalaciju wužiwać',
-       'config-db-web-create' => 'Załož konto, jeli hišće njeeksistuje.',
-       'config-db-web-no-create-privs' => 'Konto, kotrež sy za instalaciju podał, nima dosć woprawnjenjow, zo by konto wutworiło.
-Konto, kotrež tu podawaće, dyrbi hižo eksistować.',
-       'config-mysql-engine' => 'Składowanska mašina:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-charset' => 'Znamješkowa sadźba datoweje banki:',
-       'config-mysql-binary' => 'Binarny',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Mjeno wikija:',
-       'config-site-name-help' => 'To zjewi so w titulowej lejstwje wobhladaka kaž tež na wšelakich druhich městnach.',
-       'config-site-name-blank' => 'Zapodaj sydłowe mjeno.',
-       'config-project-namespace' => 'Mjenowy rum projekta:',
-       'config-ns-generic' => 'Projekt',
-       'config-ns-site-name' => 'Samsne kaž wikimjeno: $1',
-       'config-ns-other' => 'Druhe (podać)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-ns-invalid' => 'Podaty mjenowy rum "<nowiki>$1</nowiki>" je njepłaćiwy.
-Podaj druhi projektowy mjenowy rum.',
-       'config-ns-conflict' => 'Podaty mjenowy rum "<nowiki>$1</nowiki>" je w konflikće ze standardnym mjenjowym rumom MediaWiki.
-Podaj druhi projektowy mjenowy rum.',
-       'config-admin-box' => 'Administratorowe konto',
-       'config-admin-name' => 'Twoje mjeno:',
-       'config-admin-password' => 'Hesło:',
-       'config-admin-password-confirm' => 'Hesło wospjetować:',
-       'config-admin-help' => 'Zapodaj swoje preferowane wužiwarske mjeno, na přikład "Jurij Serb".
-To je mjeno, kotrež budźeš wužiwać, zo by so do wikija přizjewił.',
-       'config-admin-name-blank' => 'Zapodaj administratorowe wužiwarske mjeno.',
-       'config-admin-name-invalid' => 'Podate wužiwarske mjeno "<nowiki>$1</nowiki>" je njepłaćiwe.
-Podaj druhe wužiwarske mjeno.',
-       'config-admin-password-blank' => 'Zapodaj hesło za administratorowe konto.',
-       'config-admin-password-same' => 'Hesło dyrbi so wot wužiwarskeho mjena rozeznać.',
-       'config-admin-password-mismatch' => 'Wobě hesle, kotrejž sy zapodał, njejstej jenakej.',
-       'config-admin-email' => 'E-mejlowa adresa:',
-       'config-admin-email-help' => 'Zapodaj tu e-mejlowu adresu, zo by přijimanje e-mejlow wot druhich wužiwarjow w tutym wikiju zmóžnił, swoje hesło wróćo stajił a zdźělenki wo změnach na swojich wobkedźbowanych stronach  dostał. Móžeš polo prózdne wostajić.',
-       'config-admin-error-user' => 'Interny zmylk při wutworjenju administratora z mjenom "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'Interny zmylk při nastajenju hesła za administratora "<nowiki>$1</nowiki>": <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Sy njepłaćiwu e-mejlowu adresu zapodał.',
-       'config-subscribe' => '[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Rozesyłansku lisćinu wo připowědźenjach nowych wersijow ].abonować',
-       'config-almost-done' => 'Sy skoro hotowy!
-Móžeš nětko zbytnu konfiguraciju přeskočić a wiki hnydom instalować.',
-       'config-optional-continue' => 'Dalše prašenja?',
-       'config-optional-skip' => 'Instaluj nětko wiki.',
-       'config-profile' => 'Profil wužiwarskich prawow:',
-       'config-profile-wiki' => 'Zjawny wiki',
-       'config-profile-no-anon' => 'Załoženje konto je trěbne',
-       'config-profile-fishbowl' => 'Jenož awtorizowani wobdźěłarjo',
-       'config-profile-private' => 'Priwatny wiki',
-       'config-license' => 'Awtorske prawo a licenca:',
-       'config-license-none' => 'Žane licencne podaća w nohowej lince',
-       'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
-       'config-license-cc-by' => 'Creative Commons Attribution',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
-       'config-license-cc-0' => 'Creative Commons Zero (zjawnosći přistupny)',
-       'config-license-gfdl' => 'GNU-licenca za swobodnu dokumentaciju 1.3 abo nowša',
-       'config-license-pd' => 'Powšitkownosći přistupny',
-       'config-license-cc-choose' => 'Swójsku licencu Creative Commons wubrać',
-       'config-email-settings' => 'E-mejlowe nastajenja',
-       'config-enable-email' => 'Wuchadźace e-mejlki zmóžnić',
-       'config-enable-email-help' => 'Jeli chceš e-mejl wužiwać, dyrbja so [http://www.php.net/manual/en/mail.configuration.php e-mejlowe nastajenja PHP] prawje konfigurować.
-Jeli nochceš e-mejlowe funkcije wužiwać, móžeš je tu znjemóžnić.',
-       'config-email-user' => 'E-mejl mjez wužiwarjemi zmóžnić',
-       'config-email-user-help' => 'Wšěm wužiwarjam dowolić, jednomu druhemu e-mejlki pósłać, jeli su tutu funkciju w swojich nastajenjach zmóžnili.',
-       'config-email-usertalk' => 'Zdźělenja za wužiwarske diskusijne strony zmóžnić',
-       'config-email-usertalk-help' => 'Wužiwarjam dowolić zdźělenki wo změnach na wužiwarskich diskusijnych stronach dóstać, jeli woni su to w swojich nastajenjach zmóžnili.',
-       'config-email-watchlist' => 'Zdźělenja za wobkedźbowanki zmóžnić',
-       'config-email-watchlist-help' => 'Wužiwarjam dowolić zdźělenki wo jich wobked´bowanych stronach dóstać, jeli woni su to w swojich nastajenjach zmóžnili.',
-       'config-email-auth' => 'E-mejlowu awtentifikaciju zmóžnić',
-       'config-email-sender' => 'E-mejlowa adresa za wotmołwy:',
-       'config-upload-settings' => 'Wobrazy a nahraća datajow',
-       'config-upload-enable' => 'Nahraće datajow zmóžnić',
-       'config-upload-deleted' => 'Zapis za zhašane dataje:',
-       'config-upload-deleted-help' => 'Wubjer zapis, w kotrymž zhašene dataje maja so archiwować.
-Idealnje tón njeměł z weba přistupny być.',
-       'config-logo' => 'URL loga:',
-       'config-instantcommons' => 'Instant commons zmóžnić',
-       'config-cc-error' => 'Pytanje za licencu Creative Commons njeje žadyn wuslědk přinjesło.
-Zapodaj licencne mjeno manuelnje.',
-       'config-cc-again' => 'Zaso wubrać...',
-       'config-cc-not-chosen' => 'Wubjer licencu Creative Commons a klikń na "dale".',
-       'config-advanced-settings' => 'Rozšěrjena konfiguraćija',
-       'config-cache-options' => 'Nastajenja za objektowe pufrowanje:',
-       'config-cache-none' => 'Žane pufrowanje (žana funkcionalnosć so njewotstronja, ale spěšnosć móže so na wjetšich wikijowych sydłach wobwliwować)',
-       'config-cache-accel' => 'Objektowe pufrowanje PHP (APC, XCache abo WinCache)',
-       'config-cache-memcached' => 'Memcached wužiwać (wužaduje sej přidatnu instalaciju a konfiguraciju)',
-       'config-memcached-servers' => 'Serwery memcached:',
-       'config-memcached-help' => 'Lisćina IP-adresow, kotrež maja so za Memcached wužiwać.
-Kóžda linka měła jenož jednu IP-adresu a port, kotryž ma so wužiwać, wobsahować. Na přikład:
-127.0.0.1:11211
-192.168.1.25:1234',
-       'config-memcache-needservers' => 'Sy Memcached jako swój pufrowakowy typ wubrał, ale njejsy žane serwery podał',
-       'config-memcache-badip' => 'Sy njepłaćiwu IP-adresu za Memcached zapodał: $1',
-       'config-memcache-noport' => 'Njejsy žadyn port za wužiwanje serwera Memcached podał: $1.
-Jeli port njewěš, standard je 11211.',
-       'config-memcache-badport' => 'Portowe čisła za Memcached měli mjez $1 a $2 być',
-       'config-extensions' => 'Rozšěrjenja',
-       'config-extensions-help' => 'Rozšěrjenja podate horjeka buchu w twojim zapisu <code>./extensions</code> namakane.
-
-To móže sej přidatnu konfiguraciju wužadać, ale móžeš je nětko zmóžnić.',
-       'config-install-alreadydone' => "'''Warnowanje:''' Zda so, zo sy hižo MediaWiki instalował a pospytuješ jón znowa instalować.
-Prošu pokročuj z přichodnej stronu.",
-       'config-install-begin' => 'Přez kliknjenje na "{{int:config-continue}}" budźe so instalacija MediaWiki startować.
-Jeli hišće chceš něšto změnić, klikń na "{{int:config-back}}".',
-       'config-install-step-done' => 'dokónčene',
-       'config-install-step-failed' => 'njeporadźiło',
-       'config-install-extensions' => 'Inkluziwnje rozšěrjenja',
-       'config-install-database' => 'Datowa banka so připrawja',
-       'config-install-schema' => 'Datowa šema so twori',
-       'config-install-pg-schema-not-exist' => 'Šema PostgreSQL njeeksistuje',
-       'config-install-pg-schema-failed' => 'Wutworjenje tabelow je so njeporadźiło.
-Zawěsć, zo wužiwar "$1" móže do šemy "$2" pisać.',
-       'config-install-pg-commit' => 'Změny so wotesyłaja',
-       'config-install-pg-plpgsql' => 'Pruwowanje za rěču PL/pgSQL',
-       'config-pg-no-plpgsql' => 'Dyrbiš rěč PL/pgSQL w datowej bance $1 instalować',
-       'config-pg-no-create-privs' => 'Konto, kotrež sy za instalaciju podał, nima dosahace prawa za wutworjenje konta.',
-       'config-install-user' => 'Tworjenje wužiwarja datoweje banki',
-       'config-install-user-alreadyexists' => 'Wužiwar "$1" hižo eksistuje',
-       'config-install-user-create-failed' => 'Wutworjenje wužiwarja "$1" je so njeporadźiło: $2',
-       'config-install-user-grant-failed' => 'Prawo njeda so wužiwarjej "$1" dać: $2',
-       'config-install-user-missing' => 'Podaty wužiwar "$1" njeeksistuje.',
-       'config-install-user-missing-create' => 'Podaty wužiwar "$1" njeeksistuje.
-Prošu klikń na slědowacy kontrolny kašćik "konto załožić", jeli chceš jo wutworić.',
-       'config-install-tables' => 'Tworjenje tabelow',
-       'config-install-tables-exist' => "'''Warnowanje''': Zda so, zo tabele MediaWiki hižo eksistuja.
-Wutworjenje so přeskakuje.",
-       'config-install-tables-failed' => "'''Zmylk''': Wutworjenje tabele je so slědowaceho zmylka dla njeporadźiło: $1",
-       'config-install-interwiki' => 'Standardna tabela interwikijow so pjelni',
-       'config-install-interwiki-list' => '<code>interwiki.list</code> njeda so namakać.',
-       'config-install-interwiki-exists' => "'''Warnowanje''': Zda so, zo tabela interwikjow hižo zapiski wobsahuje.
-Standardna lisćina sp přeskakuje.",
-       'config-install-stats' => 'Statistika so inicializuje',
-       'config-install-keys' => 'Tajne kluče so tworja',
-       'config-install-sysop' => 'Tworjenje administratoroweho wužiwarskeho konta',
-       'config-install-subscribe-fail' => 'Abonowanje "mediawiki-announce" njemóžno: $1',
-       'config-install-subscribe-notpossible' => 'cURL njeje instalowany a allow_url_fopen k dispoziciji njesteji.',
-       'config-install-mainpage' => 'Hłowna strona so ze standardnym wobsahom wutworja',
-       'config-install-extension-tables' => 'Tabele za zmóžnjene rozšěrjenja so tworja',
-       'config-install-mainpage-failed' => 'Powěsć njeda so zasunyć: $1',
-       'config-download-localsettings' => '<code>LocalSettings.php</code> sćahnyć',
-       'config-help' => 'pomoc',
-       'config-nofile' => 'Dataja "$1" njeje so namakała. Je so zhašała?',
-       'mainpagetext' => "'''MediaWiki bu wuspěšnje instalowany.'''",
-       'mainpagedocfooter' => 'Prošu hlej [//meta.wikimedia.org/wiki/Help:Contents dokumentaciju] za informacije wo wužiwanju softwary.
-
-== Za nowačkow ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Wo nastajenjach]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki za twoju rěč lokalizować]',
-);
-
-/** Haitian (Kreyòl ayisyen)
- * @author Boukman
- */
-$messages['ht'] = array(
-       'mainpagetext' => "'''MedyaWiki byen enstale l.'''",
-       'mainpagedocfooter' => 'Konsilte [//meta.wikimedia.org/wiki/Help:Konteni Gid Itilizatè] pou enfòmasyon sou kijan pou w itilize logisyèl wiki a.
-
-== Kijan pou kòmanse ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lis paramèt yo pou konfigirasyon]
-* [//www.mediawiki.org/wiki/Manyèl:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lis diskisyon ki parèt sou MediaWiki]', # Fuzzy
-);
-
-/** Hungarian (magyar)
- * @author Dani
- * @author Glanthor Reviol
- * @author 아라
- */
-$messages['hu'] = array(
-       'config-desc' => 'A MediaWiki telepítője',
-       'config-title' => 'A MediaWiki $1 telepítése',
-       'config-information' => 'Információ',
-       'config-localsettings-upgrade' => 'Már létezik a <code>LocalSettings.php</code> fájl.
-A telepített szoftver frissítéséhez írd be az alábbi mezőbe a <code>$wgUpgradeKey</code> beállítás értékét, melyet a <code>LocalSettings.php</code> nevű fájlban találhatsz meg.',
-       'config-localsettings-cli-upgrade' => 'A <code>LocalSettings.php</code> fájl megtalálható.
-A telepített rendszer frissítéséhez futtasd az <code>update.php</code>-t.',
-       'config-localsettings-key' => 'Frissítési kulcs:',
-       'config-localsettings-badkey' => 'A megadott kulcs érvénytelen.',
-       'config-upgrade-key-missing' => 'A telepítő a MediaWiki meglévő példányát észlelte.
-A telepített rendszer frissítéséhez helyezd el az alábbi sort a <code>LocalSettings.php</code> végére:
-
-$1',
-       'config-localsettings-incomplete' => 'A meglévő <code>LocalSettings.php</code> hiányosnak tűnik.
-A(z) $1 változó értéke nincs beállítva.
-Módosítsd a <code>LocalSettings.php</code> fájlt úgy, hogy ez a változó be legyen állítva, majd kattints a „{{int:Config-continue}}” gombra.',
-       'config-localsettings-connection-error' => 'Nem sikerült csatlakozni az adatbázishoz a <code>LocalSettings.php</code>-ben vagy az <code>AdminSettings.php</code>-ben megadott adatokkal. Ellenőrizd a beállításokat, majd próbáld újra.
-
-$1',
-       'config-session-error' => 'Nem sikerült elindítani a munkamenetet: $1',
-       'config-session-expired' => 'Úgy tűnik, hogy a munkamenetadatok lejártak.
-A munkamenetek élettartama a következőre van beállítva: $1.
-Az érték növelhető a php.ini <code>session.gc_maxlifetime</code> beállításának módosításával.
-Indítsd újra a telepítési folyamatot.',
-       'config-no-session' => 'Elvesztek a munkamenetadatok!
-Ellenőrizd, hogy a php.ini-ben a <code>session.save_path</code> a megfelelő könyvtárra mutat-e.',
-       'config-your-language' => 'Nyelv:',
-       'config-your-language-help' => 'A telepítési folyamat során használandó nyelv.',
-       'config-wiki-language' => 'A wiki nyelve:',
-       'config-wiki-language-help' => 'Az a nyelv, amin a wiki tartalmának legnagyobb része íródik.',
-       'config-back' => '← Vissza',
-       'config-continue' => 'Folytatás →',
-       'config-page-language' => 'Nyelv',
-       'config-page-welcome' => 'Üdvözöl a MediaWiki!',
-       'config-page-dbconnect' => 'Kapcsolódás az adatbázishoz',
-       'config-page-upgrade' => 'Telepített változat frissítése',
-       'config-page-dbsettings' => 'Adatbázis-beállítások',
-       'config-page-name' => 'Név',
-       'config-page-options' => 'Beállítások',
-       'config-page-install' => 'Telepítés',
-       'config-page-complete' => 'Kész!',
-       'config-page-restart' => 'Telepítés újraindítása',
-       'config-page-readme' => 'Tudnivalók',
-       'config-page-releasenotes' => 'Kiadási megjegyzések',
-       'config-page-copying' => 'Másolás',
-       'config-page-upgradedoc' => 'Frissítés',
-       'config-page-existingwiki' => 'Létező wiki',
-       'config-help-restart' => 'Szeretnéd törölni az eddig megadott összes adatot és újraindítani a telepítési folyamatot?',
-       'config-restart' => 'Igen, újraindítás',
-       'config-welcome' => '=== A környezet ellenőrzése ===
-Néhány alapvető ellenőrzés lett végrehajtva, ami meghatározza, hogy ez a környezet alkalmas-e a MediaWiki telepítésére.
-Ha telepítéssel kapcsolatos segítségre van szükséged, add meg ezen ellenőrzések eredményét.',
-       'config-copyright' => "=== Licenc és feltételek ===
-
-$1
-
-Ez a program szabad szoftver; terjeszthető illetve módosítható a Free Software Foundation által kiadott GNU General Public License dokumentumában leírtak; akár a licenc 2-es, akár (tetszőleges) későbbi változata szerint.
-
-Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb '''garancia nélkül''', az '''eladhatóságra''' vagy '''valamely célra való alkalmazhatóságra''' való származtatott garanciát is beleértve. További részleteket a GNU General Public License tartalmaz.
-
-A felhasználónak a programmal együtt meg kell kapnia a <doclink href=Copying>GNU General Public License egy példányát</doclink>; ha mégsem kapta meg, akkor írjon a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. címre, vagy [http://www.gnu.org/copyleft/gpl.html tekintse meg online].",
-       'config-sidebar' => '* [//www.mediawiki.org A MediaWiki honlapja]
-* [//www.mediawiki.org/wiki/Help:Contents Felhasználói kézikönyv]
-* [//www.mediawiki.org/wiki/Manual:Contents Útmutató adminisztrátoroknak]
-* [//www.mediawiki.org/wiki/Manual:FAQ GyIK]
-----
-* <doclink href=Readme>Ismertető</doclink>
-* <doclink href=ReleaseNotes>Kiadási megjegyzések</doclink>
-* <doclink href=Copying>Másolás</doclink>
-* <doclink href=UpgradeDoc>Frissítés</doclink>',
-       'config-env-good' => 'A környezet ellenőrzése befejeződött.
-A MediaWiki telepíthető.',
-       'config-env-bad' => 'A környezet ellenőrzése befejeződött.
-A MediaWiki nem telepíthető.',
-       'config-env-php' => 'A PHP verziója: $1',
-       'config-env-php-toolow' => 'PHP $1 van telepítve,
-azonban a MediaWikinek PHP $2, vagy újabb szükséges.',
-       'config-unicode-using-utf8' => 'A rendszer Unicode normalizálására Brion Vibber utf8_normalize.so könyvtárát használja.',
-       'config-unicode-using-intl' => 'A rendszer Unicode normalizálására az [http://pecl.php.net/intl intl PECL kiterjesztést] használja.',
-       'config-unicode-pure-php-warning' => "'''Figyelmeztetés''': Az Unicode normalizáláshoz szükséges [http://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el, helyette a lassú, PHP alapú implementáció lesz használva.
-Ha nagy látogatottságú oldalt üzemeltetsz, itt találhatsz további információkat [//www.mediawiki.org/wiki/Unicode_normalization_considerations a témáról].",
-       'config-unicode-update-warning' => "'''Figyelmeztetés''': Az Unicode normalizáláshoz szükséges burkolókönyvtár [http://site.icu-project.org/ ICU projekt] függvénykönyvtárának régebbi változatát használja.
-Ha ügyelni kívánsz a Unicode használatára, fontold meg a [//www.mediawiki.org/wiki/Unicode_normalization_considerations frissítését].",
-       'config-no-db' => 'Nem sikerült egyetlen használható adatbázis-illesztőprogramot sem találni.  Telepítened kell egyet a PHP-hez.
-A következő adatbázistípusok támogatottak: $1.
-
-Ha megosztott tárhelyszolgáltatást használsz, kérd meg a szolgáltatódat, hogy telepítsen egy megfelelő illesztőprogramot.
-Ha a PHP-t magad fordítottad, konfiguráld újra úgy, hogy engedélyezve legyen egy adatbáziskliens, pl. a <code>./configure --with-mysql</code> parancs használatával.
-Ha a PHP-t Debian vagy Ubuntu csomaggal telepítetted, akkor szükséged lesz a php5-mysql modulra is.',
-       'config-no-fts3' => "'''Figyelmeztetés''': Az SQLite [//sqlite.org/fts3.html FTS3 modul] nélkül lett fordítva, a keresési funkciók nem fognak működni ezen a rendszeren.",
-       'config-register-globals' => "'''Figyelmeztetés: A PHP <code>[http://php.net/register_globals register_globals]</code> beállítása engedélyezve van.'''
-'''Tiltsd le, ha van rá lehetőséged.'''
-A MediaWiki működőképes a beállítás használata mellett, de a szerver biztonsági kockázatnak lesz kitéve.",
-       'config-magic-quotes-runtime' => "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] aktív!'''
-Ez a beállítás kiszámíthatatlan károkat okoz a bevitt adatokban.
-A MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
-       'config-magic-quotes-sybase' => "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] aktív!'''
-Ez a beállítás kiszámíthatatlan károkat okoz a bevitt adatokban.
-A MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
-       'config-mbstring' => "'''Kritikus hiba: az [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime mbstring.func_overload] aktív!'''
-Ez a beállítás hibákat okoz és kiszámíthatatlanul károsíthatja bevitt adatokat.
-A MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
-       'config-ze1' => "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] aktív!'''
-Ez a beállítás borzalmas hibákat okoz a MediaWiki futása során.
-A MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
-       'config-safe-mode' => "'''Figyelmeztetés:''' A PHP [http://www.php.net/features.safe-mode safe mode]-ja be van kapcsolva.
-Problémákat okozhat, különösen a fájlfeltöltéseknél és a <code>math</code>-támogatás használatánál.",
-       'config-xml-bad' => 'A PHP XML-modulja hiányzik.
-Egyes MediaWiki-funkciók, melyek ezt a modult igénylik, nem fognak működni ilyen beállítások mellett.
-Ha Madrake-et futtatsz, telepítsd a php-xml csomagot.',
-       'config-pcre' => 'Úgy tűnik, hogy a PCRE támogató modul hiányzik.
-A MediaWikinek Perl-kompatibilis reguláriskifejezés-függvényekre van szüksége a működéshez.',
-       'config-pcre-no-utf8' => "'''Kritikus hiba''': Úgy tűnik, hogy a PHP PRCE modulja PRCE_UTF8 támogatás nélkül lett fordítva.
-A MediaWikinek UTF-8-támogatásra van szüksége a helyes működéshez.",
-       'config-memory-raised' => 'A PHP <code>memory_limit</code> beállításának értéke: $1. Meg lett növelve a következő értékre: $2.',
-       'config-memory-bad' => "'''Figyelmeztetés:''' A PHP <code>memory_limit</code> beállításának értéke $1.
-Ez az érték valószínűleg túl kevés, a telepítés sikertelen lehet.",
-       'config-xcache' => 'Az [http://xcache.lighttpd.net/ XCache] telepítve van',
-       'config-apc' => 'Az [http://www.php.net/apc APC] telepítve van',
-       'config-wincache' => 'A [http://www.iis.net/download/WinCacheForPhp WinCache] telepítve van',
-       'config-no-cache' => "'''Figyelmeztetés:''' Nem található [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] és [http://www.iis.net/download/WinCacheForPhp WinCache] sem.
-Objektum-gyorsítótárazás nem lesz engedélyezve.",
-       'config-diff3-bad' => 'GNU diff3 nem található.',
-       'config-imagemagick' => 'Az ImageMagick megtalálható a rendszeren: <code>$1</code>.
-A bélyegképek készítése engedélyezve lesz a feltöltések engedélyezése esetén.',
-       'config-gd' => 'A GD grafikai könyvtár elérhető.
-Bélyegképek készítése működni fog, miután engedélyezted a fájlfeltöltést.',
-       'config-no-scaling' => 'Nem található a GD könyvtár és az ImageMagick.
-A bélyegképek készítése le lesz tiltva.',
-       'config-no-uri' => "'''Hiba:''' Nem sikerült megállapítani a jelenlegi URI-t.
-Telepítés megszakítva.",
-       'config-using-server' => 'A következő szervernév használata: „<nowiki>$1</nowiki>”.',
-       'config-using-uri' => 'A következő szerver URL-cím használata: „<nowiki>$1$2</nowiki>”.',
-       'config-uploads-not-safe' => "'''Figyelmeztetés:''' a feltöltésekhez használt alapértelmezett könyvtárban (<code>$1</code>) tetszőleges külső szkript futtatható.
-Habár a MediaWiki ellenőrzi a feltöltött fájlokat az efféle biztonsági veszélyek megtalálása érdekében, a feltöltés engedélyezése előtt erősen ajánlott a [//www.mediawiki.org/wiki/Manual:Security#Upload_security a sérülékenység megszüntetése].",
-       'config-brokenlibxml' => 'A rendszereden a PHP és libxml2 verziók olyan kombinációja található meg, ami hibásan működik, és észrevehetetlen adatkárosodást okoz a MediaWikiben és más webalkalmazásokban.
-Frissíts a PHP 5.2.9-es vagy újabb, valamint a libxml2 2.7.3 vgy újabb verziójára ([//bugs.php.net/bug.php?id=45996 A hiba bejelentése a PHP-nél]).
-Telepítés megszakítva.',
-       'config-using531' => 'A MediaWiki nem használható a PHP $1-es verziójával, mert hiba van a <code>__call()</code> függvénynek átadott referenciaparaméterekkel.
-A probléma kiküszöböléséhez frissíts a PHP 5.3.2-es verziójára, vagy használd a korábbi, 5.3.0-ásat.
-Telepítés megszakítva.',
-       'config-suhosin-max-value-length' => 'A Suhosin telepítve van, és a GET paraméter hosszát $1 bájtra korlátozza. A MediaWiki erőforrásbetöltő összetevője megkerüli a problémát, de így csökkenni fog a teljesítmény. Ha lehetséges, állítsd be a <code>suhosin.get.max_value_length</code> értékét legalább 1024-re a <code>php.ini</code>ben, és állítsd be a <code>$wgResourceLoaderMaxQueryLength</code> változót ugyanerre az értékre a LocalSettings.php-ben.', # Fuzzy
-       'config-db-type' => 'Adatbázis típusa:',
-       'config-db-host' => 'Adatbázis hosztneve:',
-       'config-db-host-help' => 'Ha az adatbázisszerver másik szerveren található, add meg a hosztnevét vagy az IP-címét.
-
-Ha megosztott webtárhelyet használsz, a szolgáltató dokumentációjában megtalálható a helyes hosztnév.
-
-Ha Windows-alapú szerverre telepítesz, és MySQL-t használsz, a „localhost” nem biztos, hogy működni fog. Ha így van, próbáld meg a „127.0.0.1” helyi IP-cím használatát.', # Fuzzy
-       'config-db-host-oracle' => 'Adatbázis TNS:',
-       'config-db-wiki-settings' => 'A wiki azonosítása',
-       'config-db-name' => 'Adatbázisnév:',
-       'config-db-name-help' => 'Válassz egy nevet a wiki azonosítására.
-Ne tartalmazzon szóközt.
-
-Ha megosztott webtárhelyet használsz, a szolgáltatód vagy egy konkrét adatbázisnevet ad neked használatra, vagy te magad hozhatsz létre adatbázisokat a vezérlőpulton keresztül.',
-       'config-db-name-oracle' => 'Adatbázisséma:',
-       'config-db-account-oracle-warn' => 'Oracle adatbázisba való telepítésnek három támogatott módja van:
-
-Ha a telepítési folyamat során adatbázisfiókot szeretnél létrehozni, akkor egy olyan fiókot kell használnod, mely rendelkezik SYSDBA jogosultsággal, majd meg kell adnod a létrehozandó, webes hozzáféréshez használt fiók adatait. Emellett a fiók kézzel is létrehozható, ekkor ennek az adatait kell megadni (a fióknak rendelkeznie kell megfelelő jogosul adatbázis-objektumok létrehozásához), vagy megadhatsz két fiókot: egyet a létrehozáshoz szükséges jogosultságokkal, és egy korlátozottat a webes hozzáféréshez.
-
-A megfelelő jogosultságokkal rendelkező fiók létrehozásához használható szkript a szoftver „maintenance/oracle/” könyvtárában található. Ne feledd, hogy korlátozott fiók használatakor az alapértelmezett fiókkal nem végezhetőek el a karbantartási műveletek.',
-       'config-db-install-account' => 'A telepítéshez használt felhasználói fiók adatai',
-       'config-db-username' => 'Felhasználónév:',
-       'config-db-password' => 'Jelszó:',
-       'config-db-password-empty' => 'Írd be az új adatbázis-felhasználó jelszavát: $1
-Van lehetőség jelszó nélküli felhasználók létrehozására, azonban ez nem ajánlott.',
-       'config-db-install-username' => 'Írd be az adatbázisrendszerhez való csatlakozáshoz használt felhasználónevet.
-Ez nem a MediaWiki fiók felhasználóneve; ez az adatbázisrendszeren használt felhasználóneved.',
-       'config-db-install-password' => 'Írd be az adatbázisrendszerhez való csatlakozáshoz használt jelszót.
-Ez nem a MediaWiki-fiók jelszava; ez az adatbázisrendszeren használt jelszavad.',
-       'config-db-install-help' => 'Add meg a felhasználónevet és jelszót, amivel a telepítő csatlakozhat az adatbázishoz.',
-       'config-db-account-lock' => 'Általános működés során is ezen információk használata',
-       'config-db-wiki-account' => 'Általános működéshez használt felhasználói adatok',
-       'config-db-wiki-help' => 'Add meg azt a felhasználónevet és jelszót, amivel a wiki fog csatlakozni az adatbázishoz működés közben.
-Ha a fiók nem létezik és a telepítést végző fiók rendelkezik megfelelő jogosultsággal, egy új fiók készül a megadott a névvel, azon minimális jogosultságkörrel, ami a wiki működéséhez szükséges.',
-       'config-db-prefix' => 'Adatbázistáblák nevének előtagja:',
-       'config-db-prefix-help' => 'Ha egyetlen adatbázison osztozik több wiki, vagy a MediaWiki és más webalkalmazás, választhatsz egy előtagot a táblaneveknek, hogy megelőzd a konfliktusokat.
-Ne használj szóközöket.
-
-A mezőt általában üresen kell hagyni.',
-       'config-db-charset' => 'Az adatbázis karakterkészlete',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0, bináris',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0, visszafelé kompatibilis UTF-8',
-       'config-charset-help' => "'''Figyelmezetés:''' Ha a '''visszafelé kompatibilis UTF-8''' beállítást használod MySQL 4.1 vagy újabb verziók esetén, és utána a <code>mysqldump</code> programmal készítesz róla biztonsági másolatot, az tönkreteheti az összes nem ASCII-karaktert, visszafordíthatatlanul károsítva a másolatokban tárolt adatokat!
-
-'''Bináris''' módban a MediaWiki az UTF-8-ban kódolt szöveget bináris mezőkben tárolja az adatbázisban.
-Ez sokkal hatékonyabb a MySQL UTF-8-módjától, és lehetővé teszi, hogy a teljes Unicode-karakterkészletet használd.
-'''UTF-8-módban''' MySQL tudja, hogy milyen karakterkészlettel van kódolva az adat, és megfelelően tárolja és konvertálja, de
-nem használhatod a [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] feletti karaktereket.",
-       'config-mysql-old' => 'A MySQL $1 vagy újabb verziója szükséges, a rendszeren $2 van.',
-       'config-db-port' => 'Adatbázisport:',
-       'config-db-schema' => 'MediaWiki-séma',
-       'config-db-schema-help' => 'A fenti sémák általában megfelelőek.
-Csak akkor módosíts rajtuk, ha tudod, hogy szükséges.',
-       'config-pg-test-error' => "Nem sikerült csatlakozni a(z) '''$1''' adatbázishoz: $2",
-       'config-sqlite-dir' => 'SQLite-adatkönyvtár:',
-       'config-sqlite-dir-help' => "Az SQLite minden adatot egyetlen fájlban tárol.
-
-A megadott könyvtárban írási jogosultsággal kell rendelkeznie a webszervernek.
-
-'''Nem''' szabad elérhetőnek lennie weben keresztül, ezért nem rakjuk oda, ahol a PHP-fájljaid vannak.
-
-A telepítő készít egy <code>.htaccess</code> fájlt az adatbázis mellé, azonban ha valamilyen okból nem sikerül, akkor akárki hozzáférhet a teljes adatbázisodhoz. Ez a felhasználók adatai (e-mail címek, jelszók hashei) mellett a törölt változatokat és más, korlátozott hozzáférésű információkat is tartalmaz.
-
-Fontold meg az adatbázis más helyre történő elhelyezését, például a <code>/var/lib/mediawiki/tewikid</code> könyvtárba.",
-       'config-oracle-def-ts' => 'Alapértelmezett táblatér:',
-       'config-oracle-temp-ts' => 'Ideiglenes táblatér:',
-       'config-support-info' => 'A MediaWiki a következő adatbázisrendszereket támogatja:
-
-$1
-
-Ha az alábbi listán nem találod azt a rendszert, melyet használni szeretnél, a fenti linken található instrukciókat követve engedélyezheted a támogatását.',
-       'config-support-mysql' => '* A $1 a MediaWiki elsődleges célpontja, így a legjobban támogatott ([http://www.php.net/manual/en/mysql.installation.php Hogyan fordítható a PHP MySQL-támogatással])',
-       'config-support-postgres' => '* A $1 népszerű, nyílt forráskódú adatbázisrendszer, a MySQL alternatívája ([http://www.php.net/manual/en/pgsql.installation.php Hogyan fordítható a PHP PostgreSQL-támogatással]). Több apró, javítatlan hiba is előfordulhat, így nem ajánlott éles környezetben használni.',
-       'config-support-sqlite' => '* Az $1 egy könnyű, nagyon jól támogatott adatbázisrendszer. ([http://www.php.net/manual/en/pdo.installation.php Hogyan fordítható a PHP SQLite-támogatással], PDO-t használ)',
-       'config-support-oracle' => '* Az $1 kereskedelmi, vállalati adatbázisrendszer. ([http://www.php.net/manual/en/oci8.installation.php Hogyan fordítható a PHP OCI8-támogatással])',
-       'config-header-mysql' => 'MySQL-beállítások',
-       'config-header-postgres' => 'PostgreSQL-beállítások',
-       'config-header-sqlite' => 'SQLite-beállítások',
-       'config-header-oracle' => 'Oracle-beállítások',
-       'config-invalid-db-type' => 'Érvénytelen adatbázistípus',
-       'config-missing-db-name' => 'Meg kell adnod az „Adatbázisnév” értékét',
-       'config-missing-db-host' => 'Meg kell adnod az „Adatbázis hosztneve” értékét',
-       'config-missing-db-server-oracle' => 'Meg kell adnod az „Adatbázis TNS” értékét',
-       'config-invalid-db-server-oracle' => 'Érvénytelen adatbázis TNS: „$1”
-Csak ASCII betűk (a-z, A-Z), számok (0-9), alulvonás (_) és pont (.) használható.',
-       'config-invalid-db-name' => 'Érvénytelen adatbázisnév: „$1”.
-Csak ASCII-karakterek (a-z, A-Z), számok (0-9), alulvonás (_) és kötőjel (-) használható.',
-       'config-invalid-db-prefix' => 'Érvénytelen adatbázisnév-előtag: „$1”.
-Csak ASCII-karakterek (a-z, A-Z), számok (0-9), alulvonás (_) és kötőjel (-) használható.',
-       'config-connection-error' => '$1.
-
-Ellenőrizd a hosztot, felhasználónevet és jelszót, majd próbáld újra.',
-       'config-invalid-schema' => 'Érvénytelen MediaWiki-séma: „$1”.
-Csak ASCII-karakterek (a-z, A-Z), számok (0-9) és alulvonás (_) használható.',
-       'config-db-sys-create-oracle' => 'A telepítő csak a SYSDBA fiókkal tud új felhasználói fiókot létrehozni.',
-       'config-db-sys-user-exists-oracle' => 'Már létezik „$1” nevű felhasználói fiók. A SYSDBA csak új fiók létrehozására használható!',
-       'config-postgres-old' => 'A PostgreSQL $1 vagy újabb verziója szükséges, a rendszeren $2 van.',
-       'config-sqlite-name-help' => 'Válassz egy nevet a wiki azonosítására.
-Ne tartalmazzon szóközt vagy kötőjelet.
-Ez lesz az SQLite-adatfájl neve.',
-       'config-sqlite-parent-unwritable-group' => 'Nem hozható létre a(z) <code><nowiki>$1</nowiki></code> adatkönyvtár, mert a szülőkönyvtárba (<code><nowiki>$2</nowiki></code>) nem írhat a webszerver.
-
-A telepítő megállapította, hogy mely felhasználó futtatja a webszervert.
-A folytatáshoz tedd írhatóvá a(z) <code><nowiki>$3</nowiki></code> könyvtárat.
-Unix/Linux rendszeren tedd a következőt:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Nem lehet létrehozni az adatok tárolásához szükséges <code><nowiki>$1</nowiki></code> könyvtárat, mert a webszerver nem írhat a szülőkönyvtárba (<code><nowiki>$2</nowiki></code>).
-
-A telepítő nem tudta megállapíteni, hogy melyik felhasználói fiókon fut a webszerver.
-A folytatáshoz tedd írhatóvá ezen fiók (és más fiókok!) számára a következő könyvtárat: <code><nowiki>$3</nowiki></code>.
-Unix/Linux rendszereken tedd a következőt:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Nem sikerült létrehozni a következő adatkönyvtárat: „$1”.
-Ellenőrizd a helyet, majd próbáld újra.',
-       'config-sqlite-dir-unwritable' => 'Nem sikerült írni a következő könyvtárba: „$1”.
-Módosítsd a jogosultságokat úgy, hogy a webszerver tudjon oda írni, majd próbáld újra.',
-       'config-sqlite-connection-error' => '$1.
-
-Ellenőrizd az adatkönyvtárat és az adatbázisnevet, majd próbáld újra.',
-       'config-sqlite-readonly' => 'A következő fájl nem írható: <code>$1</code>.',
-       'config-sqlite-cant-create-db' => 'Nem sikerült létrehozni a következő adatbázisfájlt: <code>$1</code>.',
-       'config-sqlite-fts3-downgrade' => 'A PHP nem rendelkezik FTS3-támogatással, táblák visszaminősítése',
-       'config-can-upgrade' => "Ebben az adatábizban MediaWiki-táblák találhatóak.
-A MediaWiki $1 verzióra történő frissítéséhez kattints a '''Folytatás''' gombra.",
-       'config-upgrade-done' => "A frissítés befejeződött.
-
-Most már '''[$1 beléphetsz a wikibe]'''.
-
-Ha újra szeretnéd generálni a <code>LocalSettings.php</code> fájlt, kattints az alábbi gombra.
-Ez '''nem ajánlott''', csak akkor, ha problémák vannak a wikivel.",
-       'config-upgrade-done-no-regenerate' => "A frissítés befejeződött.
-
-Most már '''[$1 beléphetsz a wikibe]'''.",
-       'config-regenerate' => 'LocalSettings.php elkészítése újra →',
-       'config-show-table-status' => 'A <code>SHOW TABLE STATUS</code> lekérdezés nem sikerült!',
-       'config-unknown-collation' => "'''Figyelmeztetés:''' az adatbázis ismeretlen egybevetést használ.",
-       'config-db-web-account' => 'A webes hozzáférésnél használt adatbázisfiók',
-       'config-db-web-help' => 'Add meg azt a felhasználónevet és jelszót, amit a webszerver a wiki általános működése során használ a csatlakozáshoz.',
-       'config-db-web-account-same' => 'A telepítéshez használt fiók használata',
-       'config-db-web-create' => 'Fiók létrehozása, ha még nem létezik.',
-       'config-db-web-no-create-privs' => 'A telepítéshez megadott fiók nem rendelkezik megfelelő jogosultságokkal új felhasználó létrehozásához.
-Az itt megadott fióknak léteznie kell.',
-       'config-mysql-engine' => 'Tárolómotor:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Figyelmeztetés''': A MyISAM tárolómotort választottad, ami nem ajánlott a MediaWiki használatánál, mert:
-* nagyon rosszul kezeli a párhuzamos lekéréseket a táblák zárolása miatt
-* sokkal nagyobb az esélye az adatkorrupció kialakulásának
-* a MediaWiki kódbázisa nem mindig úgy kezeli a MyISAM-ot, ahogyan kellene
-
-Ha a feltelepített MySQL támogatja az InnoDB-t, erősen ajánlott, hogy inkább azt válaszd.
-Ha nem, akkor lehet, hogy itt az ideje a frissítésnek.",
-       'config-mysql-engine-help' => "A legtöbb esetben az '''InnoDB''' a legjobb választás, mivel megfelelően támogatja a párhuzamosságot.
-
-A '''MyISAM''' gyorsabb megoldás lehet egyfelhasználós vagy csak olvasható környezetekben, azonban a MyISAM-adatbázisok sokkal gyakrabban sérülnek meg, mint az InnoDB-adatbázisok.",
-       'config-mysql-charset' => 'Adatbázis karakterkészlete:',
-       'config-mysql-binary' => 'Bináris',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "'''Bináris módban''' a MediaWiki az UTF-8-as szövegeket bináris mezőkben tárolja az adatbázisban.
-Ez sokkal hatékonyabb a MySQL UTF-8-as módjánál, és lehetővé teszi a teljes Unicode-karakterkészlet használatát.
-
-'''UTF-8-as módban''' a MySQL tudni fogja,hogy az adatok milyen karakterkészlettel rendelkeznek, és megfelelően átalakítja őket, azonban nem tárolhatóak olyan karakterek, melyek a [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] felett vannak.",
-       'config-site-name' => 'A wiki neve:',
-       'config-site-name-help' => 'A böngésző címsorában és még számos más helyen jelenik meg.',
-       'config-site-name-blank' => 'Add meg az oldal nevét.',
-       'config-project-namespace' => 'Projektnévtér:',
-       'config-ns-generic' => 'Projekt',
-       'config-ns-site-name' => 'Ugyanaz, mint a wiki neve: $1',
-       'config-ns-other' => 'Más (meg kell adni)',
-       'config-ns-other-default' => 'SajátWiki',
-       'config-project-namespace-help' => "A Wikipédia példáját követve számos wiki elkülöníti egy '''projekt névtérbe''' az irányelveit a tartalommal rendelkező lapoktól
-Az ebben a névtérben található lapok nevei egy előtaggal kezdődnek, amit itt adhatsz meg.
-Általában az előtag a wiki nevéből származik, de nem tartalmazhat írásjeleket, például „#”-t vagy „:”-t.",
-       'config-ns-invalid' => 'A megadott névtér („<nowiki>$1</nowiki>”) érvénytelen.
-Válassz másik projektnévteret!',
-       'config-ns-conflict' => 'A megadott névtér („<nowiki>$1</nowiki>”) ütközik az egyik alapértelmezett MediaWiki-névtérrel.
-Válassz másik projektnévteret!',
-       'config-admin-box' => 'Adminisztrátori fiók',
-       'config-admin-name' => 'Név:',
-       'config-admin-password' => 'Jelszó:',
-       'config-admin-password-confirm' => 'Jelszó újra:',
-       'config-admin-help' => 'Írd be a kívánt felhasználónevet, például „Kovács János”.
-Ezzel a névvel fogsz majd bejelentkezni a wikibe.',
-       'config-admin-name-blank' => 'Add meg az adminisztrátor felhasználónevét!',
-       'config-admin-name-invalid' => 'A megadott felhasználónév (<nowiki>$1</nowiki>) érvénytelen.
-Adj meg egy másik felhasználónevet.',
-       'config-admin-password-blank' => 'Add meg az adminisztrátori fiók jelszavát!',
-       'config-admin-password-same' => 'A jelszó nem lehet ugyanaz, mint a felhasználónév.',
-       'config-admin-password-mismatch' => 'A megadott jelszavak nem egyeznek.',
-       'config-admin-email' => 'E-mail cím:',
-       'config-admin-email-help' => 'Add meg az e-mail címedet, hogy más felhasználók küldhessenek e-maileket a wikin keresztül, új jelszót tudj kérni, és értesülhess a figyelőlistádon lévő lapokon történt változásokról. Üresen is hagyhatod ezt a mezőt.',
-       'config-admin-error-user' => 'Belső hiba történt a(z) „<nowiki>$1</nowiki>” nevű adminisztrátor létrehozásakor.',
-       'config-admin-error-password' => 'Belső hiba történt a(z) „<nowiki>$1</nowiki>” nevű adminisztrátor jelszavának beállításakor: <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Érvénytelen e-mail címet adtál meg.',
-       'config-subscribe' => 'Feliratkozás a [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce kiadási bejelentések levelezőlistájára].',
-       'config-subscribe-help' => 'Ez egy alacsony forgalmú levelezőlista, ahol a kiadásokkal kapcsolatos bejelentések jelennek meg, a fontos biztonsági javításokkal együtt.
-Ajánlott feliratkozni rá, és frissíteni a MediaWikit, ha új verzió jön ki.',
-       'config-subscribe-noemail' => 'Anélkül próbáltál feliratkozni a kiadási bejelentések levelezőlistájára, hogy megadtál volna egy e-mail címet.
-Adj meg egyet, ha fel szeretnél iratkozni a levelezőlistára.',
-       'config-almost-done' => 'Már majdnem kész!
-A további konfigurációt kihagyhatod, és most azonnal elindíthatod a wiki telepítését.',
-       'config-optional-continue' => 'További információk megadása.',
-       'config-optional-skip' => 'Épp elég volt, települjön a wiki!',
-       'config-profile' => 'Felhasználói jogosultságok profilja:',
-       'config-profile-wiki' => 'Hagyományos wiki', # Fuzzy
-       'config-profile-no-anon' => 'Felhasználói fiók létrehozása szükséges',
-       'config-profile-fishbowl' => 'Csak engedélyezett szerkesztők',
-       'config-profile-private' => 'Privát wiki',
-       'config-profile-help' => "A wikik akkor működnek a legjobban, ha minél több felhasználó számára engedélyezett a szerkesztés.
-A MediaWikiben könnyű ellenőrizni a legutóbbi változtatásokat,és visszaállítani a naiv vagy káros felhasználók által okozott károkat.
-
-A MediaWiki azonban számos helyzetben hasznos lehet, és néha nem könnyű mindenkit meggyőzni a wiki előnyeiről.
-Választhatsz!
-
-'''{{int:config-profile-wiki}}kben''' bárki szerkeszthet, akár bejelentkezés nélkül is. A '''{{int:config-profile-no-anon}}''' beállítás további biztonságot nyújt, azonban elijesztheti az alkalmi szerkesztőket.
-
-Lehetőség van arra is, hogy '''{{lc:{{int:config-profile-fishbowl}}}}''' módosíthassák a lapokat, de a nyilvánosság ekkor megtekintheti a lapokat és azok laptörténetét is. '''{{int:config-profile-private}}''' esetén csak az engedélyezett szerkesztők tekinthetik meg a lapokat, és ugyanez a csoport szerkeszthet.
-
-Telepítés után jóval összetettebb jogosultságrendszer állítható össze, további információ a [//www.mediawiki.org/wiki/Manual:User_rights kézikönyv kapcsolódó bejegyzésében].", # Fuzzy
-       'config-license' => 'Szerzői jog és licenc:',
-       'config-license-none' => 'Nincs licencjelzés',
-       'config-license-cc-by-sa' => 'Creative Commons Nevezd meg! - Így add tovább!',
-       'config-license-cc-by' => 'Creative Commons Nevezd meg!',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Nevezd meg! - Ne add el! - Így add tovább!',
-       'config-license-cc-0' => 'Creative Commons Zero (közkincs)',
-       'config-license-gfdl' => 'GNU Szabad Dokumentációs Licenc 1.3 vagy újabb',
-       'config-license-pd' => 'Közkincs',
-       'config-license-cc-choose' => 'Creative Commons-licenc választása',
-       'config-license-help' => "A legtöbb wiki valamilyen [http://freedomdefined.org/Definition szabad licenc] alatt teszi közzé a szerkesztéseit.
-Ez erősíti a közösségi tulajdon érzését, és elősegíti a hosszú távú közreműködők megjelenését.
-Általában nem szükséges magán- vagy vállalati wiki esetén.
-
-Ha a Wikipédiáról szeretnél szövegeket másolni, és a Wikipédián felhasználhassák a wikidben található szöveget, akkor a '''Creative Commons Nevezd meg! - Így add tovább!''' lehetőséget válaszd.
-
-A Wikipédia korábban a GNU Szabad Dokumentációs Licencet használta.
-Ez a licenc még ma is használható, azonban nem könnyű megérteni,
-továbbá a GFDL alatt közzétett tartalom újrafelhasználása nehézkes.",
-       'config-email-settings' => 'E-mail beállítások',
-       'config-enable-email' => 'Kimenő e-mailek engedélyezése',
-       'config-enable-email-help' => 'E-mailek küldéséhez [http://www.php.net/manual/en/mail.configuration.php a PHP mail beállításait] megfelelően meg kell adni.
-Ha nem akarsz semmilyen e-mailes funkciót használni, itt tilthatod le őket.',
-       'config-email-user' => 'A felhasználók küldhetnek egymásnak e-maileket',
-       'config-email-user-help' => 'Bármelyik felhasználó küldhet másiknak e-mail üzenetet, amennyiben engedélyezték a lehetőséget a beállításaiknál.',
-       'config-email-usertalk' => 'Vitalapi értesítések engedélyezése',
-       'config-email-usertalk-help' => 'A felhasználók értesítéseket kapnak a vitalapjuk változásairól, amennyiben engedélyezték ezt a lehetőséget a beállításaiknál.',
-       'config-email-watchlist' => 'Figyelőlistai értesítések engedélyezése',
-       'config-email-watchlist-help' => 'A felhasználók értesítéseket kapnak a figyelt lapjaik változásairól, amennyiben engedélyezték ezt a lehetőséget a beállításaiknál.',
-       'config-email-auth' => 'E-mailes hitelesítés engedélyezése',
-       'config-email-auth-help' => "Ha a beállítás engedélyezve van, a felhasználóknak meg kell erősíteniük az e-mail címüket egy kiküldött link segítségével, amikor megadják vagy módosítják azt.
-Csak a megerősített e-mail címmel rendelkezők kaphatnak e-maileket más felhasználóktól vagy értesítéseket.
-A beállítás engedélyezése '''ajánlott''' publikus wikiknél, mivel így megakadályozható az e-mailes funkciókkal való visszaélés.",
-       'config-email-sender' => 'Válaszcím:',
-       'config-email-sender-help' => 'Add meg a kimenő e-mail-üzenetek válaszcímét.
-Ide lesznek küldve a visszapattant üzenetek is.
-Számos levelezőszerver számára a cím domainrészének érvényesnek kell lennie.',
-       'config-upload-settings' => 'Képek és fájlok feltöltése',
-       'config-upload-enable' => 'Fájlfeltöltés engedélyezése',
-       'config-upload-help' => 'A fájlfeltöltés lehetséges biztonsági kockázatoknak teszi ki a szerveredet.
-További információért olvasd el a [//www.mediawiki.org/wiki/Manual:Security biztonságról szóló szakaszt] a kézikönyvben.
-
-A fájlfeltöltés engedélyezéséhez változtasd meg a MediaWiki gyökérkönyvtárában található <code>images</code> alkönyvtár jogosultságát úgy, hogy a szerver írhasson oda, majd engedélyezd itt a beállítást.',
-       'config-upload-deleted' => 'Törölt fájlok könyvtára:',
-       'config-upload-deleted-help' => 'Válaszd ki azt a könyvtárat, ahol a törölt fájlok lesznek archiválva.
-Normális esetben ennek nem szabad elérhetőnek lennie az internetről.',
-       'config-logo' => 'A logó URL-címe:',
-       'config-logo-help' => 'A MediaWiki alapértelmezett felülete helyet ad egy 135×160 pixeles logónak a bal felső sarokban.
-Tölts fel egy megfelelő méretű képet, majd írd be ide az URL-címét!
-
-Ha nem szeretnél logót használni, egyszerűen hagyd üresen a mezőt.', # Fuzzy
-       'config-instantcommons' => 'Instant Commons engedélyezése',
-       'config-instantcommons-help' => 'Az [//www.mediawiki.org/wiki/InstantCommons Instant Commons] lehetővé teszi, hogy a wikin használhassák a [//commons.wikimedia.org/ Wikimedia Commons] oldalon található képeket, hangokat és más médiafájlokat.
-A használatához a MediaWikinek internethozzáférésre van szüksége.
-
-A funkcióról és hogy hogyan állítható be más wikik esetén [//mediawiki.org/wiki/Manual:$wgForeignFileRepos a kézikönyvben] találhatsz további információkat.',
-       'config-cc-error' => 'A Creative Commons-licencválasztó nem tért vissza eredménnyel.
-Add meg kézzel a licencet.',
-       'config-cc-again' => 'Válassz újra…',
-       'config-cc-not-chosen' => 'Válaszd ki a kívánt Creative Commons licencet, majd kattints a „Folytatás gombra”!',
-       'config-advanced-settings' => 'Haladó beállítások',
-       'config-cache-options' => 'Objektum-gyorsítótárazás beállításai:',
-       'config-cache-help' => 'Az objektumgyorsítótárazás célja, hogy felgyorsítsa a MediaWiki működését a gyakran használt adatok gyorsítótárazásával.
-Közepes vagy nagyobb oldalak esetén erősen ajánlott a használata, de kisebb oldalak esetén is hasznos lehet.',
-       'config-cache-none' => 'Nincs gyorsítótárazás (minden funkció működik, de nagyobb wiki esetében lassabb működést eredményezhet)',
-       'config-cache-accel' => 'PHP-objektumok gyorsítótárazása (APC, XCache or WinCache)',
-       'config-cache-memcached' => 'Memcached használata (további telepítés és konfigurálás szükséges)',
-       'config-memcached-servers' => 'Memcached-szerverek:',
-       'config-memcached-help' => 'Azon IP-címek listája, melyeket a Memcached használhat.
-Vesszővel kell elválasztani őket, és meg kell adni a portot is. Például:
- 127.0.0.1:11211
- 192.168.1.25:11211',
-       'config-memcache-needservers' => 'Memcachedet választottad gyorsítótárnak, de nem adtál meg egyetlen szervert sem.',
-       'config-memcache-badip' => 'Érvénytelen IP-címet adtál meg a Memcachednek: $1.',
-       'config-memcache-noport' => 'Nem adtál meg portot a Memcached-szervernek: $1.
-Ha nem ismered a portszámot, használd az alapértelmezettet: 11211.',
-       'config-memcache-badport' => 'A Memcached a(z) $1 és $2 közötti portokat szokta használni.',
-       'config-extensions' => 'Kiterjesztések',
-       'config-extensions-help' => 'A fent felsorolt kiterjesztések találhatóak meg az <code>./extensions</code> könyvtárban.
-
-Lehetséges, hogy további beállításra lesz szükség hozzájuk, de már most engedélyezheted őket.',
-       'config-install-alreadydone' => "'''Figyelmeztetés:''' Úgy tűnik, hogy a MediaWiki telepítve van, és te ismét megpróbálod telepíteni.
-Folytasd a következő oldalon.",
-       'config-install-begin' => 'A „{{int:config-continue}}” gomb megnyomása elindítja a MediaWiki telepítését.
-Ha szeretnél módosítani a beállításokon, kattints a vissza gombra.', # Fuzzy
-       'config-install-step-done' => 'kész',
-       'config-install-step-failed' => 'sikertelen',
-       'config-install-extensions' => 'Kiterjesztések beillesztése',
-       'config-install-database' => 'Adatbázis felállítása',
-       'config-install-schema' => 'Adatbázis-szerkezet létrehozása',
-       'config-install-pg-schema-not-exist' => 'A PostgreSQL-adatbázis nem létezik.',
-       'config-install-pg-schema-failed' => 'A táblák létrehozása nem sikerült.
-Ellenőrizd, hogy „$1” felhasználó írhat-e a következő adatbázisba: „$2”.',
-       'config-install-pg-commit' => 'Változtatások közzététele',
-       'config-install-pg-plpgsql' => 'PL/pgSQL nyelv meglétének ellenőrzése',
-       'config-pg-no-plpgsql' => 'Telepítened kell a PL/pgSQL nyelvet a következő adatbázishoz: $1',
-       'config-pg-no-create-privs' => 'A telepítéshez megadott felhasználói fiók nem rendelkezik új fiók létrehozásához szükséges jogosultságokkal.',
-       'config-install-user' => 'Adatbázis-felhasználó létrehozása',
-       'config-install-user-alreadyexists' => 'Már létezik „$1” nevű felhasználó',
-       'config-install-user-create-failed' => 'Nem sikerült a(z) „$1” nevű felhasználó létrehozása: $2',
-       'config-install-user-grant-failed' => 'Nem sikerült jogosultságokkal felruházni a(z) „$1” nevű felhasználót: $2',
-       'config-install-user-missing' => 'A megadott felhasználó („$1”) nem létezik.',
-       'config-install-user-missing-create' => 'A megadott felhasználó („$1”) nem létezik.
-Pipáld ki a „Fiók létrehozása” dobozt, ha létre szeretnéd hozni.',
-       'config-install-tables' => 'Táblák létrehozása',
-       'config-install-tables-exist' => "'''Figyelmeztetés''': úgy tűnik, hogy a MediaWiki táblái már léteznek.
-Létrehozás kihagyása.",
-       'config-install-tables-failed' => "'''Hiba''': a tábla létrehozása nem sikerült a következő miatt: $1",
-       'config-install-interwiki' => 'Alapértelmezett nyelvközihivatkozás-tábla feltöltése',
-       'config-install-interwiki-list' => 'Az <code>interwiki.list</code> fájl nem található.',
-       'config-install-interwiki-exists' => "'''Figyelmeztetés''': Úgy tűnik, hogy az interwiki táblában már vannak bejegyzések.
-Alapértelmezett lista kihagyása.",
-       'config-install-stats' => 'Statisztika inicializálása',
-       'config-install-keys' => 'Titkos kulcsok generálása',
-       'config-insecure-keys' => "'''Figyelmeztetés:''' A telepítés során generált $1 {{PLURAL:$2|biztonsági kulcs|biztonsági kulcsok}} nem teljesen $1 {{PLURAL:$2|biztonságos|biztonságosak}}. Érdemes {{PLURAL:$2||őket}} manuálisan megváltoztatni.",
-       'config-install-sysop' => 'Az adminisztrátor felhasználói fiókjának létrehozása',
-       'config-install-subscribe-fail' => 'Nem sikerült feliratkozni a mediawiki-announce levelezőlistára: $1',
-       'config-install-subscribe-notpossible' => 'A cURL nincs telepítve és az allow_url_fopen nem érhető el.',
-       'config-install-mainpage' => 'Kezdőlap létrehozása az alapértelmezett tartalommal',
-       'config-install-extension-tables' => 'Táblák létrehozása az engedélyezett kiterjesztésekhez',
-       'config-install-mainpage-failed' => 'Nemsikerült létrehozni a kezdőlapot: $1',
-       'config-install-done' => "'''Gratulálunk!'''
-A MediaWiki telepítése sikeresen befejeződött.
-
-A telepítő elkészítette a <code>LocalSettings.php</code> fájlt, amely tartalmazza az összes beállítást.
-
-Ezt le kell tölteni, majd elhelyezni a wiki telepítési könyvtárába (az a könyvtár, ahol az index.php is található).
-
-A letöltés automatikusan elindul. Ha mégsem indulna el, vagy megszakítottad, az alábbi linkre kattintva újra letöltheted:
-
-$3
-
-'''Megjegyzés''': Ha ezt most nem teszed meg, és kilépsz a telepítésből, az elkészített konfigurációs fájlt nem tudod elérni a későbbiekben.
-
-Ha végeztél a fájl elhelyezésével, '''[$2 beléphetsz a wikibe]'''.",
-       'config-download-localsettings' => '<code>LocalSettings.php</code> letöltése',
-       'config-help' => 'segítség',
-       'mainpagetext' => "'''A MediaWiki telepítése sikeresen befejeződött.'''",
-       'mainpagedocfooter' => "Ha segítségre van szükséged a wikiszoftver használatához, akkor keresd fel a [//meta.wikimedia.org/wiki/Help:Contents User's Guide] oldalt.
-
-== Alapok (angol nyelven) ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Beállítások listája]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki GyIK]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-kiadások levelezőlistája]", # Fuzzy
-);
-
-/** Magyar (magázó) (Magyar (magázó))
- * @author Dani
- * @author Glanthor Reviol
- */
-$messages['hu-formal'] = array(
-       'config-localsettings-upgrade' => "'''Figyelmeztetés''': már létezik a <code>LocalSettings.php</code> fájl.
-A szoftver frissíthető.
-Adja meg a <code>\$wgUpgradeKey</code>-ben található kulcsot a beviteli mezőben", # Fuzzy
-       'config-session-expired' => 'Úgy tűnik, hogy a munkamenetadatok lejártak.
-A munkamenetek élettartama a következőre van beállítva: $1.
-Az érték növelhető a php.ini <code>session.gc_maxlifetime</code> beállításának módosításával.
-Indítsa újra a telepítési folyamatot.',
-       'config-no-session' => 'Elvesztek a munkamenetadatok!
-Ellenőrizze, hogy a php.ini-ben a <code>session.save_path</code> beállítás a megfelelő könyvtárra mutat-e.',
-       'config-your-language-help' => 'Válassza ki a telepítési folyamat során használandó nyelvet.',
-       'config-wiki-language-help' => 'Az a nyelv, amin a wiki tartalmának legnagyobb része íródik.',
-       'config-page-welcome' => 'Üdvözli a MediaWiki!',
-       'config-help-restart' => 'Szeretné törölni az eddig megadott összes adatot és újraindítani a telepítési folyamatot?',
-       'config-welcome' => '=== Környezet ellenőrzése ===
-Alapvető ellenőrzés, ami megmondja, hogy a környezet alkalmas-e a MediaWiki számára.
-Ha probléma merülne fel a telepítés során, meg kell adnia mások számára az alább megjelenő információkat.',
-       'config-unicode-pure-php-warning' => "'''Figyelmeztetés''': Az [http://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el Unicode normalizáláshoz.
-Ha nagy látogatottságú oldalt üzemeltet, itt találhat információkat [//www.mediawiki.org/wiki/Unicode_normalization_considerations a témáról].", # Fuzzy
-       'config-register-globals' => "'''Figyelmeztetés: A PHP <code>[http://php.net/register_globals register_globals]</code> beállítása engedélyezve van.'''
-'''Tiltsa le, ha van rá lehetősége.'''
-A MediaWiki működőképes a beállítás használata mellett, de a szerver biztonsági kockázatnak lesz kitéve.",
-       'config-imagemagick' => 'Az ImageMagick megtalálható a rendszeren: <code>$1</code>.
-A bélyegképek készítése engedélyezve lesz, ha engedélyezi a feltöltéseket.',
-       'config-db-name-help' => 'Válassza ki a wikije azonosítására használt nevet.
-Nem tartalmazhat szóközt vagy kötőjelet.
-
-Ha megosztott webtárhelyet használ, a szolgáltatója vagy egy konkrét adatbázisnevet ad önnek használatra, vagy létrehozhat egyet a vezérlőpulton keresztül.', # Fuzzy
-       'config-db-install-help' => 'Adja meg a felhasználónevet és jelszót, amivel a telepítő csatlakozhat az adatbázishoz.',
-       'config-db-wiki-help' => 'Adja meg azt a felhasználónevet és jelszót, amivel a wiki fog csatlakozni az adatbázishoz működés közben.
-Ha a fiók nem létezik és a telepítést végző fiók rendelkezik megfelelő jogosultsággal, egy új fiók készül a megadott a névvel, azon minimális jogosultságkörrel, ami a wiki működéséhez szükséges.',
-       'config-charset-help' => "'''Figyelmezetés:''' Ha a '''visszafelé kompatibilis UTF-8''' beállítást használja MySQL 4.1 vagy újabb verziók esetén, és utána a <code>mysqldump</code> programmal készít róla biztonsági másolatot, az tönkreteheti az összes nem ASCII-karaktert, visszafordíthatatlanul károsítva a másolatokban tárolt adatokat!
-
-'''Bináris''' módban a MediaWiki az UTF-8-ban kódolt szöveget bináris mezőkben tárolja az adatbázisban.
-Ez sokkal hatékonyabb a MySQL UTF-8-módjától, és lehetővé teszi, hogy a teljes Unicode-karakterkészletet használja.
-'''UTF-8-módban''' MySQL tudja, hogy milyen karakterkészlettel van kódolva az adat, megfelelően van megjelenítve és konvertálva, de
-nem használhatja a [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] feletti karaktereket.",
-       'config-db-schema-help' => 'A fenti sémák általában megfelelőek.
-Csak akkor módosítson rajta, ha szükség van rá.', # Fuzzy
-       'config-sqlite-parent-unwritable-nogroup' => 'Nem lehet létrehozni az adatok tárolásához szükséges <code><nowiki>$1</nowiki></code> könyvtárat, mert a webszerver nem írhat a szülőkönyvtárba (<code><nowiki>$2</nowiki></code>).
-
-A telepítő nem tudta megállapíteni, hogy melyik felhasználói fiókon fut a webszerver.
-A folytatáshoz tegye írhatóvá ezen fiók (és más fiókok!) számára a következő könyvtárat: <code><nowiki>$3</nowiki></code>.
-Unix/Linux rendszereken tedd a következőt:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-ns-other' => 'Más (adja meg)',
-       'config-admin-name-blank' => 'Adja meg az adminisztrátor felhasználónevét!',
-       'config-admin-name-invalid' => 'A megadott felhasználónév (<nowiki>$1</nowiki>) érvénytelen.
-Adjon meg egy másik felhasználónevet.',
-       'config-admin-password-blank' => 'Adja meg az adminisztrátori fiók jelszavát!',
-       'config-instantcommons-help' => 'Az [//www.mediawiki.org/wiki/InstantCommons Instant Commons] lehetővé teszi, hogy a wikin használhassák a [//commons.wikimedia.org/ Wikimedia Commons] oldalon található képeket, hangokat és más médiafájlokat.
-A használatához a MediaWikinek internethozzáférésre van szüksége.
-
-A funkcióról és hogy hogyan állítható be más wikik esetén [//mediawiki.org/wiki/Manual:$wgForeignFileRepos a kézikönyvben] találhat további információkat.',
-       'config-install-done' => "'''Gratulálunk!'''
-Sikeresen telepítette a MediaWikit.
-
-A telepítő készített egy <code>LocalSettings.php</code> fájlt.
-Ez tartalmazza az összes beállítást.
-
-[$1 Le kell töltenie], és el kell helyeznie a MediaWiki telepítési könyvtárába (az a könyvtár, ahol az index.php van).
-'''Megjegyzés''': Ha ezt most nem teszi meg, és kilép, a generált fájl nem lesz elérhető a későbbiekben.
-
-Ha ezzel készen van, '''[$2 beléphet a wikibe]'''.", # Fuzzy
-       'mainpagedocfooter' => "Ha segítségre van szüksége a wikiszoftver használatához, akkor keresse fel a [//meta.wikimedia.org/wiki/Help:Contents User's Guide] oldalt.
-
-== Alapok (angol nyelven) ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Beállítások listája]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki GyIK]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-kiadások levelezőlistája]", # Fuzzy
-);
-
-/** Armenian (Հայերեն)
- */
-$messages['hy'] = array(
-       'mainpagetext' => "'''«MediaWiki» ծրագիրը հաջողությամբ տեղադրվեց։'''",
-       'mainpagedocfooter' => "Այցելեք [//meta.wikimedia.org/wiki/Help:Contents User's Guide]՝ վիքի ծրագրային ապահովման օգտագործման մասին տեղեկությունների համար։
-
-== Որոշ օգտակար ռեսուրսներ ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Interlingua (interlingua)
- * @author McDutchie
- * @author 아라
- */
-$messages['ia'] = array(
-       'config-desc' => 'Le installator de MediaWiki',
-       'config-title' => 'Installation de MediaWiki $1',
-       'config-information' => 'Information',
-       'config-localsettings-upgrade' => 'Un file <code>LocalSettings.php</code> ha essite detegite.
-Pro actualisar iste installation, per favor entra le valor de <code>$wgUpgradeKey</code> in le quadro hic infra.
-Iste se trova in <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Un file <code>LocalSettings.php</code> file ha essite detegite.
-Pro actualisar iste installation, per favor executa <code>update.php</code>.',
-       'config-localsettings-key' => 'Clave de actualisation:',
-       'config-localsettings-badkey' => 'Le clave que tu forniva es incorrecte',
-       'config-upgrade-key-missing' => 'Un installation existente de MediaWiki ha essite detegite.
-Pro actualisar iste installation, es necessari adjunger le sequente linea al fin del file <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => 'Le file <code>LocalSettings.php</code> existente pare esser incomplete.
-Le variabile $1 non es definite.
-Per favor cambia <code>LocalSettings.php</code> de sorta que iste variabile es definite, e clicca "{{int:Config-continue}}".',
-       'config-localsettings-connection-error' => 'Un error esseva incontrate durante le connexion al base de datos usante le configurationes specificate in <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Per favor repara iste configurationes e tenta lo de novo.
-
-$1',
-       'config-session-error' => 'Error al comenciamento del session: $1',
-       'config-session-expired' => 'Le datos de tu session pare haber expirate.
-Le sessiones es configurate pro un duration de $1.
-Tu pote augmentar isto per definir <code>session.gc_maxlifetime</code> in php.ini.
-Reinitia le processo de installation.',
-       'config-no-session' => 'Le datos de tu session es perdite!
-Verifica tu php.ini e assecura te que un directorio appropriate es definite in <code>session.save_path</code>.',
-       'config-your-language' => 'Tu lingua:',
-       'config-your-language-help' => 'Selige un lingua a usar durante le processo de installation.',
-       'config-wiki-language' => 'Lingua del wiki:',
-       'config-wiki-language-help' => 'Selige le lingua in que le wiki essera predominantemente scribite.',
-       'config-back' => '← Retro',
-       'config-continue' => 'Continuar →',
-       'config-page-language' => 'Lingua',
-       'config-page-welcome' => 'Benvenite a MediaWiki!',
-       'config-page-dbconnect' => 'Connecter al base de datos',
-       'config-page-upgrade' => 'Actualisar le installation existente',
-       'config-page-dbsettings' => 'Configuration del base de datos',
-       'config-page-name' => 'Nomine',
-       'config-page-options' => 'Optiones',
-       'config-page-install' => 'Installar',
-       'config-page-complete' => 'Complete!',
-       'config-page-restart' => 'Reinitiar installation',
-       'config-page-readme' => 'Lege me',
-       'config-page-releasenotes' => 'Notas del version',
-       'config-page-copying' => 'Copiar',
-       'config-page-upgradedoc' => 'Actualisar',
-       'config-page-existingwiki' => 'Wiki existente',
-       'config-help-restart' => 'Vole tu rader tote le datos salveguardate que tu ha entrate e reinitiar le processo de installation?',
-       'config-restart' => 'Si, reinitia lo',
-       'config-welcome' => '=== Verificationes del ambiente ===
-Verificationes de base es exequite pro determinar si iste ambiente es apte pro le installation de MediaWiki.
-Tu deberea indicar le resultatos de iste verificationes si tu ha besonio de adjuta durante le installation.',
-       'config-copyright' => "=== Copyright and Terms ===
-
-$1
-
-Iste programma es software libere; vos pote redistribuer lo e/o modificar lo sub le conditiones del Licentia Public General de GNU publicate per le Free Software Foundation; version 2 del Licentia, o (a vostre option) qualcunque version posterior.
-
-Iste programma es distribuite in le sperantia que illo sia utile, ma '''sin garantia''', sin mesmo le implicite garantia de '''commercialisation''' o '''aptitude pro un proposito particular'''.
-Vide le Licentia Public General de GNU pro plus detalios.
-
-Vos deberea haber recipite <doclink href=Copying>un exemplar del Licentia Public General de GNU</doclink> con iste programma; si non, scribe al Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [http://www.gnu.org/copyleft/gpl.html lege lo in linea].",
-       'config-sidebar' => '* [//www.mediawiki.org Pagina principal de MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents Guida pro usatores]
-* [//www.mediawiki.org/wiki/Manual:Contents Guida pro administratores]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]
-----
-* <doclink href=Readme>Lege me</doclink>
-* <doclink href=ReleaseNotes>Notas de iste version</doclink>
-* <doclink href=Copying>Conditiones de copia</doclink>
-* <doclink href=UpgradeDoc>Actualisation</doclink>',
-       'config-env-good' => 'Le ambiente ha essite verificate.
-Tu pote installar MediaWiki.',
-       'config-env-bad' => 'Le ambiente ha essite verificate.
-Tu non pote installar MediaWiki.',
-       'config-env-php' => 'PHP $1 es installate.',
-       'config-env-php-toolow' => 'PHP $1 es installate.
-Nonobstante, MediaWiki require PHP $2 o plus recente.',
-       'config-unicode-using-utf8' => 'utf8_normalize.so per Brion Vibber es usate pro le normalisation Unicode.',
-       'config-unicode-using-intl' => 'Le [http://pecl.php.net/intl extension PECL intl] es usate pro le normalisation Unicode.',
-       'config-unicode-pure-php-warning' => "'''Aviso''': Le [http://pecl.php.net/intl extension PECL intl] non es disponibile pro exequer le normalisation Unicode; le systema recurre al implementation lente in PHP pur.
-Si tu sito ha un alte volumine de traffico, tu deberea informar te un poco super le [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalisation Unicode].",
-       'config-unicode-update-warning' => "'''Aviso''': Le version installate del bibliotheca inveloppante pro normalisation Unicode usa un version ancian del bibliotheca del [http://site.icu-project.org/ projecto ICU].
-Tu deberea [//www.mediawiki.org/wiki/Unicode_normalization_considerations actualisar lo] si le uso de Unicode importa a te.",
-       'config-no-db' => 'Non poteva trovar un driver appropriate pro le base de datos! Es necessari installar un driver de base de datos pro PHP.
-Le sequente typos de base de datos es supportate: $1.
-
-Si tu sito usa un servitor dividite (shared hosting), demanda a tu providitor de installar un driver de base de datos appropriate.
-Si tu compilava PHP tu mesme, reconfigura lo con un cliente de base de datos activate, per exemplo usante <code>./configure --with-mysql</code>.
-Si tu installava PHP ex un pacchetto Debian o Ubuntu, tu debe installar equalmente le modulo php5-mysql.',
-       'config-outdated-sqlite' => "'''Attention''': tu ha SQLite $1, que es inferior al version minimal requirite, $2. SQLite essera indisponibile.",
-       'config-no-fts3' => "'''Attention''': SQLite es compilate sin [//sqlite.org/fts3.html modulo FTS3]; functionalitate de recerca non essera disponibile in iste back-end.",
-       'config-register-globals' => "'''Attention: le option <code>[http://php.net/register_globals register_globals]</code> de PHP es activate.'''
-'''Disactiva lo si tu pote.'''
-MediaWiki functionara, ma tu servitor es exponite a potential vulnerabilitates de securitate.",
-       'config-magic-quotes-runtime' => "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] es active!'''
-Iste option corrumpe le entrata de datos imprevisibilemente.
-Tu non pote installar o usar MediaWiki si iste option non es disactivate.",
-       'config-magic-quotes-sybase' => "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] es active!'''
-Iste option corrumpe le entrata de datos imprevisibilemente.
-Tu non pote installar o usar MediaWiki si iste option non es disactivate.",
-       'config-mbstring' => "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] es active!'''
-Iste option causa errores e pote corrumper datos imprevisibilemente.
-Tu non pote installar o usar MediaWiki si iste option non es disactivate.",
-       'config-ze1' => "'''Fatal: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] es active!'''
-Iste option causa horribile defectos con MediaWiki.
-Tu non pote installar o usar MediaWiki si iste option non es disactivate.",
-       'config-safe-mode' => "'''Aviso:''' Le [http://www.php.net/features.safe-mode modo secur] de PHP es active.
-Isto pote causar problemas, particularmente si es usate le incargamento de files e le supporto de <code>math</code>.",
-       'config-xml-bad' => 'Le modulo XML de PHP es mancante.
-MediaWiki require functiones de iste modulo e non functionara in iste configuration.
-Si tu usa Mandrake, installa le pacchetto php-xml.',
-       'config-pcre' => 'Le modulo de supporto PCRE pare esser mancante.
-MediaWiki require le functiones de expression regular compatibile con Perl pro poter functionar.',
-       'config-pcre-no-utf8' => "'''Fatal''': Le modulo PCRE de PHP pare haber essite compilate sin supporto de PCRE_UTF8.
-MediaWiki require supporto de UTF-8 pro functionar correctemente.",
-       'config-memory-raised' => 'Le <code>memory_limit</code> de PHP es $1, elevate a $2.',
-       'config-memory-bad' => "'''Aviso:''' Le <code>memory_limit</code> de PHP es $1.
-Isto es probabilemente troppo basse.
-Le installation pote faller!",
-       'config-ctype' => "'''Fatal''': PHP debe esser compilate con supporto pro le [http://www.php.net/manual/en/ctype.installation.php extension Ctype].",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] es installate',
-       'config-apc' => '[http://www.php.net/apc APC] es installate',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] es installate',
-       'config-no-cache' => "'''Aviso:''' Non poteva trovar [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].
-Le cache de objectos non es activate.",
-       'config-mod-security' => "'''Attention''': [http://modsecurity.org/ mod_security] es active in tu servitor web. Si mal configurate, isto pote causar problemas pro MediaWiki o altere software que permitte al usatores de publicar contento arbitrari.
-Consulta le [http://modsecurity.org/documentation/ documentation de mod_security] o contacta le servicio de adjuta de tu host si tu incontra estranie errores.",
-       'config-diff3-bad' => 'GNU diff3 non trovate.',
-       'config-imagemagick' => 'ImageMagick trovate: <code>$1</code>.
-Le miniaturas de imagines essera activate si tu activa le incargamento de files.',
-       'config-gd' => 'Le bibliotheca graphic GD se trova integrate in le systema.
-Le miniaturas de imagines essera activate si tu activa le incargamento de files.',
-       'config-no-scaling' => 'Non poteva trovar le bibliotheca GD ni ImageMagick.
-Le miniaturas de imagines essera disactivate.',
-       'config-no-uri' => "'''Error:''' Non poteva determinar le URI actual.
-Installation abortate.",
-       'config-no-cli-uri' => "'''Attention''': Cammino al script (--scriptpath) non specificate. Le predefinition es usate: <code>$1</code>.",
-       'config-using-server' => 'Es usate le nomine de servitor "<nowiki>$1</nowiki>".',
-       'config-using-uri' => 'Le URL de servitor "<nowiki>$1$2</nowiki>" es usate.',
-       'config-uploads-not-safe' => "'''Aviso:''' Le directorio predefinite pro files incargate <code>$1</code> es vulnerabile al execution arbitrari de scripts.
-Ben que MediaWiki verifica tote le files incargate contra le menacias de securitate, il es altemente recommendate [//www.mediawiki.org/wiki/Manual:Security#Upload_security remediar iste vulnerabilitate de securitate] ante de activar le incargamento de files.",
-       'config-no-cli-uploads-check' => "'''Attention:''' Le directorio predefinite pro files incargate (<code>$1</code>) non es verificate contra le vulnerabilitate
-al execution arbitrari de scripts durante le installation de CLI.",
-       'config-brokenlibxml' => 'Vostre systema ha un combination de versiones de PHP e libxml2 que es defectuose e pote causar corruption celate de datos in MediaWiki e altere applicationes web.
-Actualisa a PHP 5.2.9 o plus recente e libxml2 2.7.3 o plus recente ([//bugs.php.net/bug.php?id=45996 problema reportate presso PHP]).
-Installation abortate.',
-       'config-using531' => 'MediaWiki non pote esser usate con PHP $1 a causa de un defecto concernente parametros de referentia a <code>__call()</code>.
-Actualisa a PHP 5.3.2 o plus recente, o retrograda a PHP 5.3.0 pro remediar isto.
-Installation abortate.',
-       'config-suhosin-max-value-length' => 'Suhosin es installate e limita parametro <code>length</code> de GET a $1 bytes.
-Le componente ResourceLoader de MediaWiki va contornar iste limite, ma isto prejudicara le rendimento.
-Si possibile, tu deberea mitter <code>suhosin.get.max_value_length</code> a 1024 o superior in <code>php.ini</code>, e mitter <code>$wgResourceLoaderMaxQueryLength</code> al mesme valor in <code>LocalSettings.php</code>.',
-       'config-db-type' => 'Typo de base de datos:',
-       'config-db-host' => 'Servitor de base de datos:',
-       'config-db-host-help' => 'Si tu servitor de base de datos es in un altere servitor, entra hic le nomine o adresse IP del servitor.
-
-Si tu usa un servitor web usate in commun, tu providitor deberea dar te le correcte nomine de servitor in su documentation.
-
-Si tu face le installation in un servitor Windows e usa MySQL, le nomine "localhost" possibilemente non functiona como nomine de servitor. In tal caso, essaya "127.0.0.1", i.e. le adresse IP local.
-
-Si tu usa PostgreSQL, lassa iste campo vacue pro connecter via un "socket" de Unix.',
-       'config-db-host-oracle' => 'TNS del base de datos:',
-       'config-db-host-oracle-help' => 'Entra un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nomine Local Connect] valide; un file tnsnames.ora debe esser visibile a iste installation.<br />Si tu usa bibliothecas de cliente 10g o plus recente, tu pote anque usar le methodo de nomination [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
-       'config-db-wiki-settings' => 'Identificar iste wiki',
-       'config-db-name' => 'Nomine del base de datos:',
-       'config-db-name-help' => 'Selige un nomine que identifica tu wiki.
-Illo non pote continer spatios.
-
-Si tu usa un servitor web usate in commun, tu providitor te fornira le nomine specific de un base de datos a usar, o te permitte crear un base de datos via un pannello de controlo.',
-       'config-db-name-oracle' => 'Schema del base de datos:',
-       'config-db-account-oracle-warn' => 'Il ha tres scenarios supportate pro le installation de Oracle como le base de datos de iste systema:
-
-Si tu vole crear un conto del base de datos como parte del processo de installation, per favor specifica un conto con le rolo SYSDBA como le conto del base de datos pro installation, e specifica le nomine e contrasigno desirate pro le conto de accesso per web. Alteremente tu pote crear le conto de accesso per web manualmente e specificar solmente iste conto (si illo ha le permissiones requisite pro crear le objectos de schema) o specifica duo contos differente, un con privilegios de creation e un conto restringite pro accesso per web.
-
-Un script pro crear un conto con le privilegios requisite se trova in le directorio "maintenance/oracle/" de iste installation. Non oblida que le uso de un conto restringite disactiva tote le capacitates de mantenentia in le conto predefinite.',
-       'config-db-install-account' => 'Conto de usator pro installation',
-       'config-db-username' => 'Nomine de usator del base de datos:',
-       'config-db-password' => 'Contrasigno del base de datos:',
-       'config-db-password-empty' => 'Per favor entra un contrasigno pro le nove usator del base de datos: $1.
-Ben que il es possibile crear usatores sin contrasigno, isto non es secur.',
-       'config-db-install-username' => 'Entra le nomine de usator que essera usate pro connecter al base de datos durante le processo de installation. Isto non es le nomine de usator del conto MediaWiki; isto es le nomine de usator pro tu base de datos.',
-       'config-db-install-password' => 'Entra le contrasigno que essera usate pro connecter al base de datos durante le processo de installation. Isto non es le contrasigno del conto MediaWiki; isto es le contrasigno pro tu base de datos.',
-       'config-db-install-help' => 'Entra le nomine de usator e contrasigno que essera usate pro connecter al base de datos durante le processo de installation.',
-       'config-db-account-lock' => 'Usar le mesme nomine de usator e contrasigno durante le operation normal',
-       'config-db-wiki-account' => 'Conto de usator pro operation normal',
-       'config-db-wiki-help' => 'Entra le nomine de usator e contrasigno que essera usate pro connecter al base de datos durante le operation normal del wiki.
-Si le conto non existe, e si le conto de installation possede sufficiente privilegios, iste conto de usator essera create con le minime privilegios necessari pro operar le wiki.',
-       'config-db-prefix' => 'Prefixo de tabella del base de datos:',
-       'config-db-prefix-help' => 'Si il es necessari usar un base de datos in commun inter multiple wikis, o inter MediaWiki e un altere application web, tu pote optar pro adder un prefixo a tote le nomines de tabella pro evitar conflictos.
-Non usa spatios.
-
-Iste campo usualmente resta vacue.',
-       'config-db-charset' => 'Codification de characteres in le base de datos',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binari',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 retrocompatibile UTF-8',
-       'config-charset-help' => "'''Aviso:''' Si tu usa '''UTF-8 retrocompatibile''' sur MySQL 4.1+, e postea face un copia de reserva del base de datos con <code>mysqldump</code>, tote le characteres non ASCII pote esser destruite, resultante in corruption irreversibile de tu copias de reserva!
-
-In '''modo binari''', MediaWiki immagazina texto in UTF-8 in le base de datos in campos binari.
-Isto es plus efficiente que le modo UTF-8 de MySQL, e permitte usar le rango complete de characteres de Unicode.
-In '''modo UTF-8''', MySQL sapera in qual codification de characteres tu datos es, e pote presentar e converter lo appropriatemente,
-ma non te permittera immagazinar characteres supra le [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Basic].",
-       'config-mysql-old' => 'MySQL $1 o plus recente es requirite, tu ha $2.',
-       'config-db-port' => 'Porto de base de datos:',
-       'config-db-schema' => 'Schema pro MediaWiki',
-       'config-db-schema-help' => 'Iste schema es generalmente correcte.
-Solmente cambia lo si tu es secur que es necessari.',
-       'config-pg-test-error' => "Impossibile connecter al base de datos '''$1''': $2",
-       'config-sqlite-dir' => 'Directorio pro le datos de SQLite:',
-       'config-sqlite-dir-help' => "SQLite immagazina tote le datos in un sol file.
-
-Le directorio que tu forni debe permitter le accesso de scriptura al servitor web durante le installation.
-
-Illo '''non''' debe esser accessibile via web. Pro isto, nos non lo pone ubi tu files PHP es.
-
-Le installator scribera un file <code>.htaccess</code> insimul a illo, ma si isto falli, alcuno pote ganiar accesso directe a tu base de datos.
-Isto include le crude datos de usator (adresses de e-mail, contrasignos codificate) assi como versiones delite e altere datos restringite super le wiki.
-
-Considera poner le base de datos in un loco completemente differente, per exemplo in <code>/var/lib/mediawiki/yourwiki</code>.",
-       'config-oracle-def-ts' => 'Spatio de tabellas predefinite:',
-       'config-oracle-temp-ts' => 'Spatio de tabellas temporari:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => 'MediaWiki supporta le sequente systemas de base de datos:
-
-$1
-
-Si tu non vide hic infra le systema de base de datos que tu tenta usar, alora seque le instructiones ligate hic supra pro activar le supporto.',
-       'config-support-mysql' => '* $1 es le systema primari pro MediaWiki e le melio supportate ([http://www.php.net/manual/en/mysql.installation.php como compilar PHP con supporto de MySQL])',
-       'config-support-postgres' => '* $1 es un systema de base de datos popular e open source, alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php como compilar PHP con supporto de PostgreSQL]). Es possibile que resta alcun minor defectos non resolvite, dunque illo non es recommendate pro uso in un ambiente de production.',
-       'config-support-sqlite' => '* $1 es un systema de base de datos legier que es multo ben supportate. ([http://www.php.net/manual/en/pdo.installation.php Como compilar PHP con supporto de SQLite], usa PDO)',
-       'config-support-oracle' => '* $1 es un banca de datos commercial pro interprisas. ([http://www.php.net/manual/en/oci8.installation.php Como compilar PHP con supporto de OCI8])',
-       'config-header-mysql' => 'Configuration de MySQL',
-       'config-header-postgres' => 'Configuration de PostgreSQL',
-       'config-header-sqlite' => 'Configuration de SQLite',
-       'config-header-oracle' => 'Configuration de Oracle',
-       'config-invalid-db-type' => 'Typo de base de datos invalide',
-       'config-missing-db-name' => 'Tu debe entrar un valor pro "Nomine de base de datos"',
-       'config-missing-db-host' => 'Tu debe entrar un valor pro "Host del base de datos"',
-       'config-missing-db-server-oracle' => 'You must enter a value for "TNS del base de datos"',
-       'config-invalid-db-server-oracle' => 'TNS de base de datos "$1" invalide.
-Usa o "TNS Name" o un catena "Easy Connect". ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Methodos de nomenclatura de Oracle])',
-       'config-invalid-db-name' => 'Nomine de base de datos "$1" invalide.
-Usa solmente litteras ASCII (a-z, A-Z), numeros (0-9), characteres de sublineamento (_) e tractos de union (-).',
-       'config-invalid-db-prefix' => 'Prefixo de base de datos "$1" invalide.
-Usa solmente litteras ASCII (a-z, A-Z), numeros (0-9), characteres de sublineamento (_) e tractos de union (-).',
-       'config-connection-error' => '$1.
-
-Verifica le servitor, nomine de usator e contrasigno hic infra e reproba.',
-       'config-invalid-schema' => 'Schema invalide pro MediaWiki "$1".
-Usa solmente litteras ASCII (a-z, A-Z), numeros (0-9) e characteres de sublineamento (_).',
-       'config-db-sys-create-oracle' => 'Le installator supporta solmente le uso de un conto SYSDBA pro le creation de un nove conto.',
-       'config-db-sys-user-exists-oracle' => 'Le conto de usator "$1" ja existe. SYSDBA pote solmente esser usate pro le creation de un nove conto!',
-       'config-postgres-old' => 'PostgreSQL $1 o plus recente es requirite, tu ha $2.',
-       'config-sqlite-name-help' => 'Selige un nomine que identifica tu wiki.
-Non usar spatios o tractos de union.
-Isto essera usate pro le nomine del file de datos de SQLite.',
-       'config-sqlite-parent-unwritable-group' => 'Impossibile crear le directorio de datos <code><nowiki>$1</nowiki></code>, proque le directorio superjacente <code><nowiki>$2</nowiki></code> non concede le accesso de scriptura al servitor web.
-
-Le installator ha determinate le usator sub que le servitor web es executate.
-Concede le accesso de scriptura in le directorio <code><nowiki>$3</nowiki></code> a iste usator pro continuar.
-In un systema Unix/Linux:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Impossibile crear le directorio de datos <code><nowiki>$1</nowiki></code>, proque le directorio superjacente <code><nowiki>$2</nowiki></code> non concede le accesso de scriptura al servitor web.
-
-Le installator non poteva determinar le usator sub que le servitor web es executate.
-Concede le accesso de scriptura in le directorio <code><nowiki>$3</nowiki></code> a iste usator (e alteres!) pro continuar.
-In un systema Unix/Linux:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Error al creation del directorio de datos "$1".
-Verifica le loco e reproba.',
-       'config-sqlite-dir-unwritable' => 'Impossibile scriber in le directorio "$1".
-Cambia su permissiones de sorta que le servitor web pote scriber in illo, e reproba.',
-       'config-sqlite-connection-error' => '$1.
-
-Verifica le directorio de datos e le nomine de base de datos hic infra e reproba.',
-       'config-sqlite-readonly' => 'Le file <code>$1</code> non es accessibile pro scriptura.',
-       'config-sqlite-cant-create-db' => 'Non poteva crear le file de base de datos <code>$1</code>.',
-       'config-sqlite-fts3-downgrade' => 'PHP non ha supporto pro FTS3. Le tabellas es retrogradate.',
-       'config-can-upgrade' => "Il ha tabellas MediaWiki in iste base de datos.
-Pro actualisar los a MediaWiki $1, clicca super '''Continuar'''.",
-       'config-upgrade-done' => "Actualisation complete.
-
-Tu pote ora [$1 comenciar a usar tu wiki].
-
-Si tu vole regenerar tu file <code>LocalSettings.php</code>, clicca super le button hic infra.
-Isto '''non es recommendate''' si tu non ha problemas con tu wiki.",
-       'config-upgrade-done-no-regenerate' => 'Actualisation complete.
-
-Tu pote ora [$1 comenciar a usar tu wiki].',
-       'config-regenerate' => 'Regenerar LocalSettings.php →',
-       'config-show-table-status' => 'Le consulta <code>SHOW TABLE STATUS</code> falleva!',
-       'config-unknown-collation' => "'''Aviso:''' Le base de datos usa un collation non recognoscite.",
-       'config-db-web-account' => 'Conto de base de datos pro accesso via web',
-       'config-db-web-help' => 'Selige le nomine de usator e contrasigno que le servitor web usara pro connecter al servitor de base de datos, durante le operation ordinari del wiki.',
-       'config-db-web-account-same' => 'Usar le mesme conto que pro le installation',
-       'config-db-web-create' => 'Crear le conto si illo non jam existe',
-       'config-db-web-no-create-privs' => 'Le conto que tu specificava pro installation non ha sufficiente privilegios pro crear un conto.
-Le conto que tu specifica hic debe jam exister.',
-       'config-mysql-engine' => 'Motor de immagazinage:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "* '''Attention:''' Tu ha seligite MyISAM como motor de immagazinage pro MySQL, lo que non es recommendate pro uso con MediaWiki, perque:
-* illo a pena supporta le processamento simultanee a causa del blocada le tabulas
-* illo es plus susceptibile al corruption que altere motores
-* le base de codice de MediaWiki non sempre manea MyISAM como illo deberea
-
-Si tu installation de MySQL supporta InnoDB, es multo recommendate que tu selige iste in su loco.
-Si tu installation de MySQL non supporta InnoDB, forsan isto es un bon occasion pro actualisar lo.",
-       'config-mysql-engine-help' => "'''InnoDB''' es quasi sempre le melior option, post que illo ha bon supporto pro simultaneitate.
-
-'''MyISAM''' pote esser plus rapide in installationes a usator singule o a lectura solmente.
-Le bases de datos MyISAM tende a esser corrumpite plus frequentemente que le base de datos InnoDB.",
-       'config-mysql-charset' => 'Codification de characteres in le base de datos:',
-       'config-mysql-binary' => 'Binari',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "In '''modo binari''', MediaWiki immagazina le texto UTF-8 in le base de datos in campos binari.
-Isto es plus efficiente que le modo UTF-8 de MySQL, e permitte usar le rango complete de characteres Unicode.
-
-In '''modo UTF-8''', MySQL cognoscera le codification de characteres usate pro tu dats, e pote presentar e converter lo appropriatemente, ma illo non permittera immagazinar characteres supra le [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Basic].",
-       'config-site-name' => 'Nomine del wiki:',
-       'config-site-name-help' => 'Isto apparera in le barra de titulo del navigator e in varie altere locos.',
-       'config-site-name-blank' => 'Entra un nomine de sito.',
-       'config-project-namespace' => 'Spatio de nomines del projecto:',
-       'config-ns-generic' => 'Projecto',
-       'config-ns-site-name' => 'Mesme nomine que le wiki: $1',
-       'config-ns-other' => 'Altere (specifica)',
-       'config-ns-other-default' => 'MiWiki',
-       'config-project-namespace-help' => 'Sequente le exemplo de Wikipedia, multe wikis tene lor paginas de politica separate de lor paginas de contento, in un "\'\'\'spatio de nomines de projecto\'\'\'".
-Tote le titulos de pagina in iste spatio de nomines comencia con un certe prefixo, le qual tu pote specificar hic.
-Traditionalmente, iste prefixo deriva del nomine del wiki, ma illo non pote continer characteres de punctuation como "#" o ":".',
-       'config-ns-invalid' => 'Le spatio de nomines specificate "<nowiki>$1</nowiki>" es invalide.
-Specifica un altere spatio de nomines de projecto.',
-       'config-ns-conflict' => 'Le spatio de nomines specificate "<nowiki>$1</nowiki>" conflige con un spatio de nomines predefinite de MediaWiki.
-Specifica un altere spatio de nomines pro le projecto.',
-       'config-admin-box' => 'Conto de administrator',
-       'config-admin-name' => 'Tu nomine:',
-       'config-admin-password' => 'Contrasigno:',
-       'config-admin-password-confirm' => 'Repete contrasigno:',
-       'config-admin-help' => 'Entra hic tu nomine de usator preferite, per exemplo "Julio Cesare".
-Isto es le nomine que tu usara pro aperir session in le wiki.',
-       'config-admin-name-blank' => 'Entra un nomine de usator pro administrator.',
-       'config-admin-name-invalid' => 'Le nomine de usator specificate "<nowiki>$1</nowiki>" es invalide.
-Specifica un altere nomine de usator.',
-       'config-admin-password-blank' => 'Entra un contrasigno pro le conto de administrator.',
-       'config-admin-password-same' => 'Le contrasigno non pote esser le mesme que le nomine de usator.',
-       'config-admin-password-mismatch' => 'Le duo contrasignos que tu scribeva non es identic.',
-       'config-admin-email' => 'Adresse de e-mail:',
-       'config-admin-email-help' => 'Entra un adresse de e-mail hic pro permitter le reception de e-mail ab altere usatores del wiki, pro poter reinitialisar tu contrasigno, e pro reciper notification de cambios a paginas in tu observatorio. Iste campo pote esser lassate vacue.',
-       'config-admin-error-user' => 'Error interne durante le creation de un administrator con le nomine "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'Error interne durante le definition de un contrasigno pro le administrator "<nowiki>$1</nowiki>": <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Tu ha entrate un adresse de e-mail invalide',
-       'config-subscribe' => 'Subscribe al [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista de diffusion pro annuncios de nove versiones].',
-       'config-subscribe-help' => 'Isto es un lista de e-mail a basse volumine pro annuncios de nove versiones, includente importante annuncios de securitate.
-Tu deberea subscriber a illo e actualisar tu installation de MediaWiki quando nove versiones es editate.',
-       'config-subscribe-noemail' => 'Tu tentava abonar te al lista de diffusion pro annunciamento de nove versiones sin fornir un adresse de e-mail.
-Per favor specifica un adresse de e-mail si tu vole abonar te al lista de diffusion.',
-       'config-almost-done' => 'Tu ha quasi finite!
-Tu pote ora saltar le configuration remanente e installar le wiki immediatemente.',
-       'config-optional-continue' => 'Pone me plus questiones.',
-       'config-optional-skip' => 'Isto me es jam tediose. Simplemente installa le wiki.',
-       'config-profile' => 'Profilo de derectos de usator:',
-       'config-profile-wiki' => 'Wiki aperte',
-       'config-profile-no-anon' => 'Creation de conto obligatori',
-       'config-profile-fishbowl' => 'Modificatores autorisate solmente',
-       'config-profile-private' => 'Wiki private',
-       'config-profile-help' => "Le wikis functiona melio si tu permitte a tante personas como possibile de modificar los.
-In MediaWiki, il es facile revider le modificationes recente, e reverter omne damno facite per usatores naive o malitiose.
-
-Nonobstante, multes ha trovate MediaWiki utile in un grande varietate de rolos, e alcun vices il non es facile convincer omnes del beneficios del principio wiki.
-Dunque, a te le option.
-
-Le modello '''{{int:config-profile-wiki}}''' permitte a omnes de modificar, sin mesmo aperir un session.
-Un wiki con '''{{int:config-profile-no-anon}}''' attribue additional responsabilitate, ma pote dissuader contributores occasional.
-
-Le scenario '''{{int:config-profile-fishbowl}}''' permitte al usatores approbate de modificar, ma le publico pote vider le paginas, includente lor historia.
-Un '''{{int:config-profile-private}}''' permitte solmente al usatores approbate de vider le paginas e de modificar los.
-
-Configurationes de derectos de usator plus complexe es disponibile post installation, vide le [//www.mediawiki.org/wiki/Manual:User_rights pertinente section del manual].",
-       'config-license' => 'Copyright e licentia:',
-       'config-license-none' => 'Nulle licentia in pede de paginas',
-       'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
-       'config-license-cc-by' => 'Creative Commons Attribution',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
-       'config-license-cc-0' => 'Creative Commons Zero (dominio public)',
-       'config-license-gfdl' => 'Licentia GNU pro Documentation Libere 1.3 o plus recente',
-       'config-license-pd' => 'Dominio public',
-       'config-license-cc-choose' => 'Seliger un licentia Creative Commons personalisate',
-       'config-license-help' => "Multe wikis public pone tote le contributiones sub un [http://freedomdefined.org/Definition/Ia?uselang=ia licentia libere].
-Isto adjuta a crear un senso de proprietate communitari e incoragia le contribution in longe termino.
-Isto non es generalmente necessari pro un wiki private o de interprisa.
-
-Si tu vole poter usar texto de Wikipedia, e si tu vole que Wikipedia pote acceptar texto copiate de tu wiki, tu debe seliger '''Creative Commons Attribution Share Alike'''.
-
-Wikipedia usava anteriormente le Licentia GNU pro Documentation Libere (GFDL).
-Iste es un licentia valide, ma es difficile a comprender.
-Il es anque difficile reusar le contento licentiate sub GFDL.",
-       'config-email-settings' => 'Configuration de e-mail',
-       'config-enable-email' => 'Activar le e-mail sortiente',
-       'config-enable-email-help' => 'Si tu vole que e-mail functiona, [http://www.php.net/manual/en/mail.configuration.php le optiones de e-mail de PHP] debe esser configurate correctemente.
-Si tu non vole functiones de e-mail, tu pote disactivar los hic.',
-       'config-email-user' => 'Activar le e-mail de usator a usator',
-       'config-email-user-help' => 'Permitter a tote le usatores de inviar e-mail inter se, si illes lo ha activate in lor preferentias.',
-       'config-email-usertalk' => 'Activar notification de cambios in paginas de discussion de usatores',
-       'config-email-usertalk-help' => 'Permitter al usatores de reciper notification de modificationes in lor paginas de discussion personal, si illes lo ha activate in lor preferentias.',
-       'config-email-watchlist' => 'Activar notification de observatorio',
-       'config-email-watchlist-help' => 'Permitter al usatores de reciper notification super lor paginas sub observation, si illes lo ha activate in lor preferentias.',
-       'config-email-auth' => 'Activar authentication de e-mail',
-       'config-email-auth-help' => "Si iste option es activate, le usatores debe confirmar lor adresse de e-mail usante un ligamine inviate a illes, quandocunque illes lo defini o cambia.
-Solmente le adresses de e-mail authenticate pote reciper e-mail de altere usatores o alterar le e-mails de notification.
-Es '''recommendate''' activar iste option pro wikis public a causa de abuso potential del functionalitate de e-mail.",
-       'config-email-sender' => 'Adresse de e-mail de retorno:',
-       'config-email-sender-help' => 'Entra le adresse de e-mail a usar como adresse de retorno in e-mail sortiente.
-Hic es recipite le notificationes de non-livration.
-Multe servitores de e-mail require que al minus le parte de nomine de dominio sia valide.',
-       'config-upload-settings' => 'Incargamento de imagines e files',
-       'config-upload-enable' => 'Activar le incargamento de files',
-       'config-upload-help' => 'Le incargamento de files potentialmente expone tu servitor a riscos de securitate.
-Pro plus information, lege le [//www.mediawiki.org/wiki/Manual:Security section de securitate] in le manual.
-
-Pro activar le incargamento de files, cambia le modo in le subdirectorio <code>images</code> sub le directorio-radice de MediaWiki de sorta que le servitor web pote scriber in illo.
-Postea activa iste option.',
-       'config-upload-deleted' => 'Directorio pro files delite:',
-       'config-upload-deleted-help' => 'Selige un directorio in le qual archivar le files delite.
-Idealmente, isto non debe esser accessibile ab le web.',
-       'config-logo' => 'URL del logotypo:',
-       'config-logo-help' => 'Le apparentia predefinite de MediaWiki include spatio pro un logotypo de 135×160 pixels supra le menu del barra lateral.
-Incarga un imagine con le dimensiones appropriate, e entra le URL hic.
-
-Tu pote usar <code>$wgStylePath</code> o <code>$wgScriptPath</code> si le loco de tu logotypo es relative a iste camminos.
-
-Si tu non vole un logotypo, lassa iste quadro vacue.',
-       'config-instantcommons' => 'Activar "Instant Commons"',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] es un function que permitte a wikis de usar imagines, sonos e altere multimedia trovate in le sito [//commons.wikimedia.org/ Wikimedia Commons].
-Pro poter facer isto, MediaWiki require accesso a Internet.
-
-Pro plus information super iste function, includente instructiones super como configurar lo pro wikis altere que Wikimedia Commons, consulta [//mediawiki.org/wiki/Manual:$wgForeignFileRepos le manual].',
-       'config-cc-error' => 'Le selector de licentia Creative Commons non dava un resultato.
-Entra le nomine del licentia manualmente.',
-       'config-cc-again' => 'Selige de novo…',
-       'config-cc-not-chosen' => 'Selige le licentia Creative Commons que tu prefere e clicca "proceder".',
-       'config-advanced-settings' => 'Configuration avantiate',
-       'config-cache-options' => 'Configuration del cache de objectos:',
-       'config-cache-help' => 'Le cache de objectos es usate pro meliorar le rapiditate de MediaWiki per immagazinar le datos frequentemente usate.
-Le sitos medie o grande es multo incoragiate de activar isto, ma anque le sitos parve percipera le beneficios.',
-       'config-cache-none' => 'Nulle cache (nulle functionalitate es removite, ma le rapiditate pote diminuer in grande sitos wiki)',
-       'config-cache-accel' => 'Cache de objectos de PHP (APC, XCache o WinCache)',
-       'config-cache-memcached' => 'Usar Memcached (require additional installation e configuration)',
-       'config-memcached-servers' => 'Servitores Memcached:',
-       'config-memcached-help' => 'Lista de adresses IP a usar pro Memcached.
-Debe specificar un per linea e specificar le porto a usar. Per exemplo:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => 'Tu seligeva Memcached como typo de cache ma non specificava alcun servitores',
-       'config-memcache-badip' => 'Tu ha entrate un adresse IP invalide pro Memcached: $1',
-       'config-memcache-noport' => 'Tu non specificava un porto a usar pro le servitor Memcached: $1.
-Si tu non cognosce le porto, le standard es 11211',
-       'config-memcache-badport' => 'Le numeros de porto de Memcached debe esser inter $1 e $2',
-       'config-extensions' => 'Extensiones',
-       'config-extensions-help' => 'Le extensiones listate hic supra esseva detegite in tu directorio <code>./extensions</code>.
-
-Istes pote requirer additional configuration, ma tu pote activar los ora.',
-       'config-install-alreadydone' => "'''Aviso:''' Il pare que tu ha jam installate MediaWiki e tenta installar lo de novo.
-Per favor continua al proxime pagina.",
-       'config-install-begin' => 'Un clic sur "{{int:config-continue}}" comencia le installation de MediaWiki.
-Pro facer alterationes, clicca sur "{{int:config-back}}".',
-       'config-install-step-done' => 'finite',
-       'config-install-step-failed' => 'fallite',
-       'config-install-extensions' => 'Include le extensiones',
-       'config-install-database' => 'Configura le base de datos',
-       'config-install-schema' => 'Creation de schema',
-       'config-install-pg-schema-not-exist' => 'Iste schema de PostgreSQL non existe',
-       'config-install-pg-schema-failed' => 'Le creation del tabellas falleva.
-Assecura te que le usator "$1" pote scriber in le schema "$2".',
-       'config-install-pg-commit' => 'Committer cambiamentos',
-       'config-install-pg-plpgsql' => 'Verifica le presentia del linguage PL/pgSQL',
-       'config-pg-no-plpgsql' => 'Es necessari installar le linguage PL/pgSQL in le base de datos $1',
-       'config-pg-no-create-privs' => 'Le conto que tu specificava pro installation non ha sufficiente privilegios pro crear un conto.',
-       'config-pg-not-in-role' => 'Le conto que tu specificava pro le usator web ja existe.
-Le conto que tu specificava pro installation non es superusator e non es membro del rolo de usator web, dunque es incapace de crear objectos possedite per le usator web.
-
-MediaWiki require actualmente que le tabellas sia possedite per le usator web. Per favor specifica un altere nomine de conto web, o clicca super "retornar" e specifica un usator de installation con sufficiente privilegios.',
-       'config-install-user' => 'Crea usator pro base de datos',
-       'config-install-user-alreadyexists' => 'Le usator "$1" ja existe',
-       'config-install-user-create-failed' => 'Le creation del usator "$1" ha fallite: $2',
-       'config-install-user-grant-failed' => 'Le concession de permission al usator "$1" falleva: $2',
-       'config-install-user-missing' => 'Le usator specificate, "$1", non existe.',
-       'config-install-user-missing-create' => 'Le usator specificate, "$1", non existe.
-Per favor marca le quadrato "crear conto" hic infra si tu vole crear lo.',
-       'config-install-tables' => 'Crea tabellas',
-       'config-install-tables-exist' => "'''Aviso''': Il pare que le tabellas de MediaWiki jam existe.
-Le creation es saltate.",
-       'config-install-tables-failed' => "'''Error''': Le creation del tabellas falleva con le sequente error: $1",
-       'config-install-interwiki' => 'Plena le tabella interwiki predefinite',
-       'config-install-interwiki-list' => 'Non poteva trovar le file <code>interwiki.list</code>.',
-       'config-install-interwiki-exists' => "'''Aviso''': Le tabella interwiki pare jam haber entratas.
-Le lista predefinite es saltate.",
-       'config-install-stats' => 'Initialisation del statisticas',
-       'config-install-keys' => 'Generation de claves secrete',
-       'config-insecure-keys' => "'''Attention:''' {{PLURAL:$2|Un clave|Alcun claves}} secur ($1) generate durante le installation non es completemente secur. Considera cambiar {{PLURAL:$2|lo|los}} manualmente.",
-       'config-install-sysop' => 'Crea conto de usator pro administrator',
-       'config-install-subscribe-fail' => 'Impossibile subscriber a mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'cURL non es installate e allow_url_fopen non es disponibile.',
-       'config-install-mainpage' => 'Crea pagina principal con contento predefinite',
-       'config-install-extension-tables' => 'Creation de tabellas pro le extensiones activate',
-       'config-install-mainpage-failed' => 'Non poteva inserer le pagina principal: $1',
-       'config-install-done' => "'''Felicitationes!'''
-Tu ha installate MediaWiki con successo.
-
-Le installator ha generate un file <code>LocalSettings.php</code>.
-Iste contine tote le configuration.
-
-Es necessari discargar lo e poner lo in le base del installation wiki (le mesme directorio que index.php).
-Le discargamento debe haber comenciate automaticamente.
-
-Si le discargamento non ha comenciate, o si illo esseva cancellate, es possibile recomenciar le discargamento con un clic sur le ligamine sequente:
-
-$3
-
-'''Nota''': Si tu non discarga iste file de configuration ora, illo non essera disponibile plus tarde.
-
-Post facer isto, tu pote '''[$2 entrar in tu wiki]'''.",
-       'config-download-localsettings' => 'Discargar <code>LocalSettings.php</code>',
-       'config-help' => 'adjuta',
-       'config-nofile' => 'Le file "$1" non poteva esser trovate. Ha illo essite delite?',
-       'mainpagetext' => "'''MediaWiki ha essite installate con successo.'''",
-       'mainpagedocfooter' => 'Consulta le [//meta.wikimedia.org/wiki/Help:Contents Guida del usator] pro informationes super le uso del software wiki.
-
-== Pro initiar ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de configurationes]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ a proposito de MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de diffusion pro annuncios de nove versiones de MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Traducer MediaWiki in tu lingua]',
-);
-
-/** Indonesian (Bahasa Indonesia)
- * @author Farras
- * @author IvanLanin
- * @author Kenrick95
- * @author Reedy
- * @author 아라
- */
-$messages['id'] = array(
-       'config-desc' => 'Penginstal untuk MediaWiki',
-       'config-title' => 'Instalasi MediaWiki $1',
-       'config-information' => 'Informasi',
-       'config-localsettings-upgrade' => 'Berkas <code>LocalSettings.php</code> sudah ada.
-Untuk memutakhirkan instalasi ini, masukkan nilai <code>$wgUpgradeKey</code> dalam kotak yang tersedia di bawah ini.
-Anda dapat menemukan nilai tersebut dalam <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Berkas <code>LocalSettings.php</code> terdeteksi.
-Untuk meningkatkan versi, harap jalankan <code>update.php</code>.',
-       'config-localsettings-key' => 'Kunci pemutakhiran:',
-       'config-localsettings-badkey' => 'Kunci yang Anda berikan tidak benar',
-       'config-upgrade-key-missing' => 'Suatu instalasi MediaWiki telah terdeteksi.
-Untuk memutakhirkan instalasi ini, silakan masukkan baris berikut di bagian bawah <code>LocalSettings.php</code> Anda:
-
-$1',
-       'config-localsettings-incomplete' => '<code>LocalSettings.php</code> yang ada tampaknya tidak lengkap.
-Variabel $1 tidak diatur.
-Silakan ubah <code>LocalSettings.php</code> untuk mengatur variabel ini dan klik "{{int:Config-continue}}".',
-       'config-localsettings-connection-error' => 'Timbul galat saat menghubungkan ke basis data dengan menggunakan setelan yang ditentukan di <code>LocalSettings.php</code> atau <code>AdminSettings.php</code>. Harap perbaiki setelan ini dan coba lagi.
-
-$1',
-       'config-session-error' => 'Kesalahan sesi mulai: $1',
-       'config-session-expired' => 'Data sesi tampaknya telah kedaluwarsa.
-Sesi dikonfigurasi untuk berlaku selama $1.
-Anda dapat menaikkannya dengan menetapkan <code>session.gc_maxlifetime</code> dalam php.ini.
-Ulangi proses instalasi.',
-       'config-no-session' => 'Data sesi Anda hilang!
-Cek php.ini Anda dan pastikan bahwa <code>session.save_path</code> diatur ke direktori yang sesuai.',
-       'config-your-language' => 'Bahasa Anda:',
-       'config-your-language-help' => 'Pilih bahasa yang akan digunakan selama proses instalasi.',
-       'config-wiki-language' => 'Bahasa wiki:',
-       'config-wiki-language-help' => 'Pilih bahasa yang akan digunakan tulisan-tulisan wiki.',
-       'config-back' => '← Kembali',
-       'config-continue' => 'Lanjut →',
-       'config-page-language' => 'Bahasa',
-       'config-page-welcome' => 'Selamat datang di MediaWiki',
-       'config-page-dbconnect' => 'Hubungkan ke basis data',
-       'config-page-upgrade' => 'Perbarui instalasi yang ada',
-       'config-page-dbsettings' => 'Pengaturan basis data',
-       'config-page-name' => 'Nama',
-       'config-page-options' => 'Pilihan',
-       'config-page-install' => 'Instal',
-       'config-page-complete' => 'Selesai!',
-       'config-page-restart' => 'Ulangi instalasi',
-       'config-page-readme' => 'Baca saya',
-       'config-page-releasenotes' => 'Catatan pelepasan',
-       'config-page-copying' => 'Menyalin',
-       'config-page-upgradedoc' => 'Memerbarui',
-       'config-page-existingwiki' => 'Wiki yang ada',
-       'config-help-restart' => 'Apakah Anda ingin menghapus semua data tersimpan yang telah Anda masukkan dan mengulang proses instalasi?',
-       'config-restart' => 'Ya, nyalakan ulang',
-       'config-welcome' => '=== Pengecekan lingkungan ===
-Pengecekan dasar dilakukan untuk melihat apakah lingkungan ini memadai untuk instalasi MediaWiki.
-Anda harus memberikan hasil pemeriksaan ini jika Anda memerlukan bantuan selama instalasi.',
-       'config-copyright' => "=== Hak cipta dan persyaratan ===
-
-\$1
-
-Program ini adalah perangkat lunak bebas; Anda dapat mendistribusikan dan/atau memodifikasi di bawah persyaratan GNU General Public License seperti yang diterbitkan oleh Free Software Foundation; baik versi 2 lisensi, atau (sesuai pilihan Anda) versi yang lebih baru.
-
-Program ini didistribusikan dengan harapan bahwa itu akan berguna, tetapi '''tanpa jaminan apa pun'''; bahkan tanpa jaminan tersirat untuk '''dapat diperjualbelikan ''' atau '''sesuai untuk tujuan tertentu'''.
-Lihat GNU General Public License untuk lebih jelasnya.
-
-Anda seharusnya telah menerima <doclink href=\"Copying\">salinan dari GNU General Public License</doclink> bersama dengan program ini; jika tidak, kirimkan surat untuk Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. atau [http://www.gnu.org/copyleft/gpl.html baca versi daring].",
-       'config-sidebar' => '* [//www.mediawiki.org/wiki/MediaWiki/id Situs MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents/id Pedoman Pengguna]
-* [//www.mediawiki.org/wiki/Manual:Contents/id Pedoman Administrator]
-* [//www.mediawiki.org/wiki/Manual:FAQ/id FAQ]
-----
-* <doclink href=Readme>Read me</doclink>
-* <doclink href=ReleaseNotes>Release notes</doclink>
-* <doclink href=Copying>Copying</doclink>
-* <doclink href=UpgradeDoc>Upgrading</doclink>',
-       'config-env-good' => 'Kondisi telah diperiksa.
-Anda dapat menginstal MediaWiki.',
-       'config-env-bad' => 'Kondisi telah diperiksa.
-Anda tidak dapat menginstal MediaWiki.',
-       'config-env-php' => 'PHP $1 diinstal.',
-       'config-env-php-toolow' => 'PHP $1 telah terinstal.
-Namun, MediaWiki memerlukan PHP $2 atau lebih tinggi.',
-       'config-unicode-using-utf8' => 'Menggunakan utf8_normalize.so Brion Vibber untuk normalisasi Unicode.',
-       'config-unicode-using-intl' => 'Menggunakan [http://pecl.php.net/intl ekstensi PECL intl] untuk normalisasi Unicode.',
-       'config-unicode-pure-php-warning' => "'''Peringatan''': [http://pecl.php.net/intl Ekstensi intl PECL] untuk menangani normalisasi Unicode tidak tersedia, kembali menggunakan implementasi murni PHP yang lambat.
-Jika Anda menjalankan situs berlalu lintas tinggi, Anda harus sedikit membaca [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalisasi Unicode].",
-       'config-unicode-update-warning' => "'''Peringatan''': Versi terinstal dari pembungkus normalisasi Unicode menggunakan versi lama pustaka [http://site.icu-project.org/ proyek ICU].
-Anda harus [//www.mediawiki.org/wiki/Unicode_normalization_considerations memutakhirkannya] jika Anda ingin menggunakan Unicode.",
-       'config-no-db' => 'Pengandar basis data yang sesuai tidak ditemukan! Anda perlu menginstal pengandar basis data untuk PHP.
-Jenis basis data yang didukung: $1.
-
-Jika Anda menggunakan inang bersama, mintalah penyedia inang Anda untuk menginstal pengandar basis data yang sesuai.
-Jika Anda mengompilasi sendiri PHP, ubahlah konfigurasinya dengan mengaktifkan klien basis data, misalnya menggunakan <code>./configure --with-mysql</code>.
-Jika Anda menginstal PHP dari paket Debian atau Ubuntu, maka Anda juga perlu menginstal modul php5-mysql.',
-       'config-no-fts3' => "'''Peringatan''': SQLite dikompilasi tanpa [//sqlite.org/fts3.html modul FTS3], fitur pencarian tidak akan tersedia pada konfigurasi ini.",
-       'config-register-globals' => "'''Peringatan: Opsi <code>[http://php.net/register_globals register_globals]</code> PHP diaktifkan.'''
-'''Nonaktifkan kalau bisa.'''
-MediaWiki akan bekerja, tetapi server Anda memiliki potensi kerentanan keamanan.",
-       'config-magic-quotes-runtime' => "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] aktif!'''
-Pilihan ini dapat merusak masukan data secara tidak terduga.
-Anda tidak dapat menginstal atau menggunakan MediaWiki kecuali pilihan ini dinonaktifkan.",
-       'config-magic-quotes-sybase' => "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic_quotes_sybase magic_quotes_sybase] aktif!'''
-Pilihan ini dapat merusak masukan data secara tidak terduga.
-Anda tidak dapat menginstal atau menggunakan MediaWiki kecuali pilihan ini dinonaktifkan.",
-       'config-mbstring' => "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] aktif!'' '
-Pilihan ini dapat menyebabkan kesalahan dan kerusakan data yang tidak terduga.
-Anda tidak dapat menginstal atau menggunakan MediaWiki kecuali pilihan ini dinonaktifkan.",
-       'config-ze1' => "'''Fatal: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] aktif!'''
-Pilihan ini dapat menyebabkan bug yang mengerikan pada MediaWiki.
-Anda tidak dapat menginstal atau menggunakan MediaWiki kecuali pilihan ini dinonaktifkan.",
-       'config-safe-mode' => "''' Peringatan:''' [http://www.php.net/features.safe-mode Mode aman] PHP aktif.
-Hal ini akan menyebabkan masalah, terutama jika menggunakan pengunggahan berkas dan dukungan <code>math</code>.",
-       'config-xml-bad' => 'Modul XML PHP hilang.
-MediaWiki membutuhkan fungsi dalam modul ini dan tidak akan bekerja dalam konfigurasi ini.
-Jika Anda menggunakan Mandrake, instal paket php-xml.',
-       'config-pcre' => 'Modul pendukung PCRE tampaknya hilang.
-MediaWiki memerlukan fungsi persamaan reguler kompatibel Perl untuk bekerja.',
-       'config-pcre-no-utf8' => "'''Fatal''': Modul PCRE PHP tampaknya dikompilasi tanpa dukungan PCRE_UTF8.
-MediaWiki memerlukan dukungan UTF-8 untuk berfungsi dengan benar.",
-       'config-memory-raised' => '<code>memory_limit</code> PHP adalah $1, dinaikkan ke $2.',
-       'config-memory-bad' => "'''Peringatan:''' <code>memory_limit</code> PHP adalah $1.
-Ini terlalu rendah.
-Instalasi terancam gagal!",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] telah diinstal',
-       'config-apc' => '[http://www.php.net/apc APC] telah diinstal',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] telah diinstal',
-       'config-no-cache' => "'''Peringatan:''' Tidak dapat menemukan [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache], atau [http://www.iis.net/download/WinCacheForPhp WinCache]. Pinggahan obyek tidak dinonaktifkan.",
-       'config-diff3-bad' => 'GNU diff3 tidak ditemukan.',
-       'config-imagemagick' => 'ImageMagick ditemukan: <code>$1</code> .
-Pembuatan gambar mini akan diaktifkan jika Anda mengaktifkan pengunggahan.',
-       'config-gd' => 'Pustaka grafis GD terpasang ditemukan.
-Pembuatan gambar mini akan diaktifkan jika Anda mengaktifkan pengunggahan.',
-       'config-no-scaling' => 'Pustaka GD atau ImageMagick tidak ditemukan.
-Pembuatan gambar mini dinonaktifkan.',
-       'config-no-uri' => "'''Kesalahan:''' URI saat ini tidak dapat ditentukan.
-Instalasi dibatalkan.",
-       'config-uploads-not-safe' => "'''Peringatan:''' Direktori bawaan pengunggahan <code>$1</code> Anda rentan terhadap eksekusi skrip yang sewenang-wenang.
-Meskipun MediaWiki memeriksa semua berkas unggahan untuk ancaman keamanan, sangat dianjurkan untuk [//www.mediawiki.org/wiki/Manual:Security#Upload_security menutup kerentanan keamanan ini] sebelum mengaktifkan pengunggahan.",
-       'config-brokenlibxml' => 'Sistem Anda memiliki kombinasi versi PHP dan libxml2 yang memiliki bug dan dapat menyebabkan kerusakan data tersembunyi pada MediaWiki dan aplikasi web lain.
-Mutakhirkan ke PHP 5.2.9 atau yang lebih baru dan libxml2 2.7.3 atau yang lebih baru ([//bugs.php.net/bug.php?id=45996 arsip bug di PHP]).
-Instalasi dibatalkan.',
-       'config-using531' => 'MediaWiki tidak dapat dijalankan dengan PHP $1 karena bug yang melibatkan parameter referensi untuk <code>__call()</code> .
-Tingkatkan ke PHP 5.3.2 atau lebih baru, atau turunkan ke PHP versi 5.3.0 untuk menyelesaikan hal ini.
-Instalasi dibatalkan.',
-       'config-suhosin-max-value-length' => 'Suhosin terpasang dan membatasi panjang parameter GET sebesar $1 bita. Komponen ResourceLoader MediaWiki akan mengatasi batasan ini, tapi penanganannya akan menurunkan kinerja. Jika memungkinkan, Anda sebaiknya menetapkan nilai <code>suhosin.get.max_value_length</code> menjadi 1024 atau lebih tinggi dalam <code>php.ini</code> dan menyetel <code>$wgResourceLoaderMaxQueryLength</code> dengan nilai yang sama dalam LocalSettings.php.', # Fuzzy
-       'config-db-type' => 'Jenis basis data:',
-       'config-db-host' => 'Inang basis data:',
-       'config-db-host-help' => 'Jika server basis data Anda berada di server yang berbeda, masukkan nama inang atau alamat IP di sini.
-
-Jika Anda menggunakan inang web bersama, penyedia inang Anda harus memberikan nama inang yang benar di dokumentasi mereka.
-
-Jika Anda menginstal pada server Windows dan menggunakan MySQL, "localhost" mungkin tidak dapat digunakan sebagai nama server. Jika demikian, coba "127.0.0.1" untuk alamat IP lokal.', # Fuzzy
-       'config-db-host-oracle' => 'TNS basis data:',
-       'config-db-host-oracle-help' => 'Masukkan [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] yang sah; berkas tnsnames.ora harus dapat diakses oleh instalasi ini.<br />Jika Anda menggunakan pustaka klien 10g atau lebih baru, Anda juga dapat menggunakan metode penamaan [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
-       'config-db-wiki-settings' => 'Identifikasi wiki ini',
-       'config-db-name' => 'Nama basis data:',
-       'config-db-name-help' => 'Pilih nama yang mengidentifikasikan wiki Anda.
-Nama tersebut tidak boleh mengandung spasi.
-
-Jika Anda menggunakan inang web bersama, penyedia inang Anda dapat memberikan Anda nama basis data khusus untuk digunakan atau mengizinkan Anda membuat basis data melalui panel kontrol.',
-       'config-db-name-oracle' => 'Skema basis data:',
-       'config-db-account-oracle-warn' => 'Ada tiga skenario yang didukung untuk instalasi Oracle sebagai basis data pendukung:
-
-Jika Anda ingin membuat akun basis data sebagai bagian dari proses instalasi, silakan masukkan akun dengan peran SYSDBA sebagai akun basis data untuk instalasi dan tentukan kredensial yang diinginkan untuk akun akses web. Jika tidak, Anda dapat membuat akun akses web secara manual dan hanya memberikan akun tersebut (jika memiliki izin yang diperlukan untuk membuat objek skema) atau memasukkan dua akun yang berbeda, satu dengan hak membuat objek dan satu dibatasi untuk akses web.
-
-Skrip untuk membuat akun dengan privilese yang diperlukan dapat ditemukan pada direktori "maintenance/oracle/" instalasi ini. Harap diingat bahwa penggunaan akun terbatas akan menonaktifkan semua kemampuan pemeliharaan dengan akun bawaan.',
-       'config-db-install-account' => 'Akun pengguna untuk instalasi',
-       'config-db-username' => 'Nama pengguna basis data:',
-       'config-db-password' => 'Kata sandi basis data:',
-       'config-db-password-empty' => 'Silakan masukkan sandi untuk pengguna basis data baru: $1.
-Meskipun dimungkinkan untuk membuat pengguna tanpa sandi, hal itu tidak aman.',
-       'config-db-install-username' => 'Masukkan nama pengguna yang akan digunakan untuk terhubung ke basis data selama proses instalasi.
-Ini bukan nama pengguna akun MediaWiki, melainkan nama pengguna untuk basis data Anda.',
-       'config-db-install-password' => 'Masukkan sandi yang akan digunakan untuk terhubung ke basis data selama proses instalasi.
-Ini bukan sandi untuk akun MediaWiki, melainkan sandi untuk basis data Anda.',
-       'config-db-install-help' => 'Masukkan nama pengguna dan sandi yang akan digunakan untuk terhubung ke basis data pada saat proses instalasi.',
-       'config-db-account-lock' => 'Gunakan nama pengguna dan kata sandi yang sama selama operasi normal',
-       'config-db-wiki-account' => 'Akun pengguna untuk operasi normal',
-       'config-db-wiki-help' => 'Masukkan nama pengguna dan sandi yang akan digunakan untuk terhubung ke basis data wiki selama operasi normal.
-Jika akun tidak ada, akun instalasi memiliki hak yang memadai, akun pengguna ini akan dibuat dengan hak akses minimum yang diperlukan untuk mengoperasikan wiki.',
-       'config-db-prefix' => 'Prefiks tabel basis data:',
-       'config-db-prefix-help' => 'Jika Anda perlu berbagi satu basis data di antara beberapa wiki, atau antara MediaWiki dan aplikasi web lain, Anda dapat memilih untuk menambahkan prefiks terhadap semua nama tabel demi menghindari konflik.
-Jangan gunakan spasi.
-
-Prefiks ini biasanya dibiarkan kosong.',
-       'config-db-charset' => 'Set karakter basis data',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 biner',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'UTF-8 yang kompatibel balik dengan MySQL 4.0',
-       'config-charset-help' => "'''Peringatan:''' Jika Anda menggunakan '''UTF-8 kompatibel balik''' pada MySQL 4.1+, dan kemudian mencadangkan basis data dengan <code>mysqldump</code>, proses itu mungkin menghancurkan semua karakter non-ASCII dan merusak cadangan Anda tanpa dapat dikembalikan!
-
-Dalam '''modus biner''', MediaWiki menyimpan teks UTF-8 ke basis data dalam bidang biner.
-Ini lebih efisien dibandingkan modus UTF-8 MySQL dan memungkinkan Anda untuk menggunakan berbagai karakter Unicode.
-Dalam '''modus UTF-8''', MySQL akan tahu apa set karakter data anda dan dapat menyajikan dan mengubahnya denga tepat, namun tidak akan mengizinkan Anda menyimpan karakter di atas [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
-       'config-mysql-old' => 'MySQL $1 atau versi terbaru diperlukan, Anda menggunakan $2.',
-       'config-db-port' => 'Porta basis data:',
-       'config-db-schema' => 'Skema untuk MediaWiki',
-       'config-db-schema-help' => 'Skema ini biasanya berjalan baik.
-Ubah hanya jika Anda tahu Anda perlu mengubahnya.',
-       'config-sqlite-dir' => 'Direktori data SQLite:',
-       'config-sqlite-dir-help' => "SQLite menyimpan semua data dalam satu berkas.
-
-Direktori yang Anda berikan harus dapat ditulisi oleh server web selama instalasi.
-
-Direktori itu '''tidak''' boleh dapat diakses melalui web, inilah sebabnya kami tidak menempatkannya bersama dengan berkas PHP lain.
-
-Penginstal akan membuat berkas <code>.htaccess</code> bersamaan dengan itu, tetapi jika gagal, orang dapat memperoleh akses ke basis data mentah Anda.
-Itu termasuk data mentah pengguna (alamat surel, hash sandi) serta revisi yang dihapus dan data lainnya yang dibatasi pada wiki.
-
-Pertimbangkan untuk menempatkan basis data di tempat lain, misalnya di <code>/var/lib/mediawiki/yourwiki</code>.",
-       'config-oracle-def-ts' => 'Tablespace bawaan:',
-       'config-oracle-temp-ts' => 'Tablespace sementara:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => 'MediaWiki mendukung sistem basis data berikut:
-
-$1
-
-Jika Anda tidak melihat sistem basis data yang Anda gunakan tercantum di bawah ini, ikuti petunjuk terkait di atas untuk mengaktifkan dukungan.',
-       'config-support-mysql' => '* $1 adalah target utama MediaWiki dan memiliki dukungan terbaik ([http://www.php.net/manual/en/mysql.installation.php cara mengompilasi PHP dengan dukungan MySQL])',
-       'config-support-postgres' => '* $1 adalah sistem basis data sumber terbuka populer sebagai alternatif untuk MySQL ([http://www.php.net/manual/en/pgsql.installation.php cara mengompilasi PHP dengan dukungan PostgreSQL]). Mungkin ada beberapa bug terbuka dan alternatif ini tidak direkomendasikan untuk dipakai dalam lingkungan produksi.',
-       'config-support-sqlite' => '* $1 adalah sistem basis data yang ringan yang sangat baik dukungannya. ([http://www.php.net/manual/en/pdo.installation.php cara mengompilasi PHP dengan dukungan SQLite], menggunakan PDO)',
-       'config-support-oracle' => '* $1 adalah basis data komersial untuka perusahaan. ([http://www.php.net/manual/en/oci8.installation.php cara mengompilasi PHP dengan dukungan OCI8])',
-       'config-header-mysql' => 'Pengaturan MySQL',
-       'config-header-postgres' => 'Pengaturan PostgreSQL',
-       'config-header-sqlite' => 'Pengaturan SQLite',
-       'config-header-oracle' => 'Pengaturan Oracle',
-       'config-invalid-db-type' => 'Jenis basis data tidak sah',
-       'config-missing-db-name' => 'Anda harus memasukkan nilai untuk "Nama basis data"',
-       'config-missing-db-host' => 'Anda harus memasukkan nilai untuk "Inang basis data"',
-       'config-missing-db-server-oracle' => 'Anda harus memasukkan nilai untuk "TNS basis data"',
-       'config-invalid-db-server-oracle' => 'TNS basis data "$1" tidak sah.
-Gunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan titik (.).',
-       'config-invalid-db-name' => 'Nama basis data "$1" tidak sah.
-Gunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan tanda hubung (-).',
-       'config-invalid-db-prefix' => 'Prefiks basis data "$1" tidak sah.
-Gunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan tanda hubung (-).',
-       'config-connection-error' => '$1.
-
-Periksa nama inang, pengguna, dan sandi di bawah ini dan coba lagi.',
-       'config-invalid-schema' => 'Skema MediaWiki "$1" tidak sah.
-Gunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), dan garis bawah (_).',
-       'config-db-sys-create-oracle' => 'Penginstal hanya mendukung penggunaan akun SYSDBA untuk membuat akun baru.',
-       'config-db-sys-user-exists-oracle' => 'Akun pengguna "$1"sudah ada. SYSDBA hanya dapat digunakan untuk membuat akun baru!',
-       'config-postgres-old' => 'PostgreSQL $1 atau versi terbaru diperlukan, Anda menggunakan $2.',
-       'config-sqlite-name-help' => 'Pilih nama yang mengidentifikasi wiki Anda.
-Jangan gunakan spasi atau tanda hubung.
-Nama ini akan digunakan untuk nama berkas data SQLite.',
-       'config-sqlite-parent-unwritable-group' => 'Tidak dapat membuat direktori data <code><nowiki>$1</nowiki></code>, karena direktori induk <code><nowiki>$2</nowiki></code> tidak bisa ditulisi oleh server web.
-
-Penginstal telah menentukan pengguna yang menjalankan server web Anda.
-Buat direktori <code><nowiki>$3</nowiki></code> menjadi dapat ditulisi olehnya.
-Pada sistem Unix/Linux lakukan hal berikut:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Tidak dapat membuat direktori data <code><nowiki>$1</nowiki></code>, karena direktori induk <code><nowiki>$2</nowiki></code> tidak bisa ditulisi oleh server web.
-
-Penginstal tidak dapat menentukan pengguna yang menjalankan server web Anda.
-Buat direktori <code><nowiki>$3</nowiki></code> menjadi dapat ditulisi oleh semua orang.
-Pada sistem Unix/Linux lakukan hal berikut:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Kesalahan saat membuat direktori data "$1".
-Periksa lokasi dan coba lagi.',
-       'config-sqlite-dir-unwritable' => 'Tidak dapat menulisi direktori "$1".
-Ubah hak akses direktori sehingga server web dapat menulis ke sana, dan coba lagi.',
-       'config-sqlite-connection-error' => '$1.
-
-Periksa direktori data dan nama basis data di bawah dan coba lagi.',
-       'config-sqlite-readonly' => 'Berkas <code>$1</code> tidak dapat ditulisi.',
-       'config-sqlite-cant-create-db' => 'Tidak dapat membuat berkas basis data <code>$1</code>.',
-       'config-sqlite-fts3-downgrade' => 'PHP tidak memiliki dukungan FTS3, tabel dituruntarafkan.',
-       'config-can-upgrade' => "Ada tabel MediaWiki di basis dataini.
-Untuk memperbaruinya ke MediaWiki $1, klik '''Lanjut'''.",
-       'config-upgrade-done' => "Pemutakhiran selesai.
-
-Anda sekarang dapat [$1 mulai menggunakan wiki Anda].
-
-Jika Anda ingin membuat ulang berkas <code>LocalSettings.php</code>, klik tombol di bawah ini.
-Tindakan ini '''tidak dianjurkan''' kecuali jika Anda mengalami masalah dengan wiki Anda.",
-       'config-upgrade-done-no-regenerate' => 'Pemutakhiran selesai.
-
-Anda sekarang dapat [$1 mulai menggunakan wiki Anda].',
-       'config-regenerate' => 'Regenerasi LocalSettings.php →',
-       'config-show-table-status' => 'Kueri <code>SHOW TABLE STATUS</code> gagal!',
-       'config-unknown-collation' => "'''Peringatan:''' basis data menggunakan kolasi yang tidak dikenal.",
-       'config-db-web-account' => 'Akun basis data untuk akses web',
-       'config-db-web-help' => 'Masukkan nama pengguna dan sandi yang akan digunakan server web untuk terhubung ke server basis data saat operasi normal wiki.',
-       'config-db-web-account-same' => 'Gunakan akun yang sama seperti untuk instalasi',
-       'config-db-web-create' => 'Buat akun jika belum ada',
-       'config-db-web-no-create-privs' => 'Akun Anda berikan untuk instalasi tidak memiliki hak yang cukup untuk membuat akun.
-Akun yang Anda berikan harus sudah ada.',
-       'config-mysql-engine' => 'Mesin penyimpanan:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-engine-help' => "'''InnoDB''' hampir selalu merupakan pilihan terbaik karena memiliki dukungan konkurensi yang baik.
-
-'''MyISAM''' mungkin lebih cepat dalam instalasi pengguna-tunggal atau hanya-baca.
-Basis data MyISAM cenderung lebih sering rusak daripada basis data InnoDB.",
-       'config-mysql-charset' => 'Set karakter basis data:',
-       'config-mysql-binary' => 'Biner',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "Dalam '''modus biner''', MediaWiki menyimpan teks UTF-8 untuk basis data dalam bidang biner.
-Ini lebih efisien daripada modus UTF-8 MySQL dan memungkinkan Anda untuk menggunakan ragam penuh karakter Unicode.
-
-Dalam '''modus UTF-8''', MySQL akan tahu apa set karakter data dan dapat menampilkan dan mengubahnya sesuai keperluan, tetapi tidak akan mengizinkan Anda menyimpan karakter di atas [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
-       'config-site-name' => 'Nama wiki:',
-       'config-site-name-help' => 'Ini akan muncul di bilah judul peramban dan di berbagai tempat lainnya.',
-       'config-site-name-blank' => 'Masukkan nama situs.',
-       'config-project-namespace' => 'Ruang nama proyek:',
-       'config-ns-generic' => 'Proyek',
-       'config-ns-site-name' => 'Sama seperti nama wiki: $1',
-       'config-ns-other' => 'Lainnya (sebutkan)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-project-namespace-help' => 'Mengikuti contoh Wikipedia, banyak wiki menyimpan halaman kebijakan mereka terpisah dari halaman konten mereka, dalam "\'\'\'ruang nama proyek\'\'\'".
-Semua judul halaman dalam ruang nama ini diawali dengan prefiks tertentu yang dapat Anda tetapkan di sini.
-Biasanya, prefiks ini berasal dari nama wiki, tetapi tidak dapat berisi karakter tanda baca seperti "#" atau ":".',
-       'config-ns-invalid' => 'Ruang nama "<nowiki>$1</nowiki>" yang ditentukan tidak sah.
-Berikan ruang nama proyek lain.',
-       'config-ns-conflict' => 'Ruang nama "<nowiki>$1</nowiki>" yang diberikan berkonflik dengan ruang nama bawaan MediaWiki.
-Tentukan ruang nama proyek yang berbeda.',
-       'config-admin-box' => 'Akun pengurus',
-       'config-admin-name' => 'Nama Anda:',
-       'config-admin-password' => 'Kata sandi:',
-       'config-admin-password-confirm' => 'Kata sandi lagi:',
-       'config-admin-help' => 'Masukkan nama pengguna pilihan Anda di sini, misalnya "Udin Wiki".
-Ini adalah nama yang akan Anda gunakan untuk masuk ke wiki.',
-       'config-admin-name-blank' => 'Masukkan nama pengguna pengurus.',
-       'config-admin-name-invalid' => 'Nama pengguna "<nowiki>$1</nowiki>" yang diberikan tidak sah.
-Berikan nama pengguna lain.',
-       'config-admin-password-blank' => 'Masukkan kata sandi untuk akun pengurus.',
-       'config-admin-password-same' => 'Kata sandi harus tidak sama seperti nama pengguna.',
-       'config-admin-password-mismatch' => 'Dua kata sandi yang Anda masukkan tidak cocok.',
-       'config-admin-email' => 'Alamat surel:',
-       'config-admin-email-help' => 'Masukkan alamat surel untuk memungkinkan Anda menerima surel dari pengguna lain, menyetel ulang sandi, dan mendapat pemberitahuan tentang perubahan atas daftar pantauan Anda. Anda dapat mengosongkan bidang ini.',
-       'config-admin-error-user' => 'Kesalahan internal saat membuat admin dengan nama "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'Kesalahan internal saat membuat sandi untuk admin "<nowiki>$1</nowiki>":<pre>$2</pre>',
-       'config-admin-error-bademail' => 'Anda memasukkan alamat surel yang tidak sah',
-       'config-subscribe' => 'Berlangganan ke [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce milis pengumuman rilis].',
-       'config-subscribe-help' => 'Ini adalah milis bervolume rendah yang digunakan untuk pengumuman rilis, termasuk pengumuman keamanan penting.
-Anda sebaiknya berlangganan dan memperbarui instalasi MediaWiki saat versi baru keluar.',
-       'config-almost-done' => 'Anda hampir selesai!
-Anda sekarang dapat melewati sisa konfigurasi dan menginstal wiki sekarang.',
-       'config-optional-continue' => 'Berikan saya pertanyaan lagi.',
-       'config-optional-skip' => 'Saya sudah bosan, instal saja wikinya.',
-       'config-profile' => 'Profil hak pengguna:',
-       'config-profile-wiki' => 'Wiki tradisional', # Fuzzy
-       'config-profile-no-anon' => 'Pembuatan akun diperlukan',
-       'config-profile-fishbowl' => 'Khusus penyunting terdaftar',
-       'config-profile-private' => 'Wiki pribadi',
-       'config-profile-help' => "Wiki paling baik bekerja jika Anda membiarkan sebanyak mungkin orang untuk menyunting. Dengan MediaWiki, sangat mudah meninjau perubahan terbaru dan mengembalikan kerusakan yang dilakukan oleh pengguna naif atau berbahaya.
-
-Namun, berbagai kegunaan lain dari MediaWiki telah ditemukan, dan kadang tidak mudah untuk meyakinkan semua orang manfaat dari cara wiki. Jadi, Anda yang menentukan.
-
-'''{{int:config-profile-wiki}}''' memungkinkan setiap orang untuk menyunting, bahkan tanpa masuk.
-'''{{int:config-profile-no-anon}}''' menyediakan akuntabilitas tambahan, tetapi dapat mencegah kontributor biasa.
-
-'''{{int:config-profile-fishbowl}}''' memungkinkan pengguna yang disetujui untuk menyunting, tetapi publik dapat melihat halaman, termasuk riwayatnya.
-'''{{int:config-profile-private}}''' hanya memungkinkan pengguna yang disetujui untuk melihat dan menyunting halaman.
-
-Konfigurasi hak pengguna yang lebih kompleks tersedia setelah instalasi. Lihat [//www.mediawiki.org/wiki/Manual:User_rights/id entri manual terkait].", # Fuzzy
-       'config-license' => 'Hak cipta dan lisensi:',
-       'config-license-none' => 'Tidak ada lisensi',
-       'config-license-cc-by-sa' => 'Creative Commons Atribusi Berbagi Serupa',
-       'config-license-cc-by' => 'Creative Commons Atribusi',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Atribusi Nonkomersial Berbagi Serupa',
-       'config-license-cc-0' => 'Creative Commons Zero (Domain Publik)',
-       'config-license-gfdl' => 'Lisensi Dokumentasi Bebas GNU 1.3 atau versi terbaru',
-       'config-license-pd' => 'Domain Umum',
-       'config-license-cc-choose' => 'Pilih lisensi Creative Commons kustom',
-       'config-license-help' => "Banyak wiki publik melisensikan semua kontribusi di bawah [http://freedomdefined.org/Definition lisensi bebas].
-Hal ini membantu menciptakan rasa kepemilikan komunitas dan mendorong kontribusi jangka panjang.
-Hal ini umumnya tidak diperlukan untuk wiki pribadi atau perusahaan.
-
-Jika Anda ingin dapat menggunakan teks dari Wikipedia dan Anda ingin agar Wikipedia dapat menerima teks yang disalin dari wiki Anda, Anda harus memilih'''Creative Commons Attribution Share Alike'''.
-
-Wikipedia sebelumnya menggunakan GNU Free Documentation License.
-Lisensi ini masih sah, namun sulit dipahami.
-Selain itu, sulit untuk menggunakan ulang konten yang dilisensikan di bawah GFDL.",
-       'config-email-settings' => 'Pengaturan surel',
-       'config-enable-email' => 'Aktifkan surel keluar',
-       'config-enable-email-help' => 'Jika Anda ingin mengaktifkan surel, [http://www.php.net/manual/en/mail.configuration.php setelah surel PHP] perlu dikonfigurasi dengan benar.
-Jika Anda tidak perlu fitur surel, Anda dapat menonaktifkannya di sini.',
-       'config-email-user' => 'Aktifkan surel antarpengguna',
-       'config-email-user-help' => 'Memungkinkan semua pengguna untuk saling berkirim surel jika mereka mengaktifkan pilihan tersebut dalam preferensi mereka.',
-       'config-email-usertalk' => 'Aktifkan pemberitahuan perubahan halaman pembicaraan pengguna',
-       'config-email-usertalk-help' => 'Memungkinkan pengguna untuk menerima pemberitahuan tentang perubahan halaman pembicaraan pengguna, jika pilihan tersebut telah diaktifkan dalam preferensi mereka.',
-       'config-email-watchlist' => 'Aktifkan pemberitahuan daftar pantau',
-       'config-email-watchlist-help' => 'Memungkinkan pengguna untuk menerima pemberitahuan tentang perubahan halaman yang ada dalam daftar pantauan mereka, jika pilihan tersebut telah diaktifkan dalam preferensi mereka.',
-       'config-email-auth' => 'Aktifkan otentikasi surel',
-       'config-email-auth-help' => "Jika opsi ini diaktifkan, pengguna harus mengonfirmasi alamat surel dengan menggunakan pranala yang dikirim kepadanya setiap kali mereka mengatur atau mengubahnya.
-Hanya alamat surel yang dikonfirmasi yang dapat menerima surel dari pengguna lain atau surel pemberitahuan perubahan.
-Penetapan opsi ini '''direkomendasikan''' untuk wiki publik karena adanya potensi penyalahgunaan fitur surel.",
-       'config-email-sender' => 'Alamat surel balasan:',
-       'config-email-sender-help' => 'Masukkan alamat surel untuk digunakan sebagai alamat pengirim pada surel keluar.
-Alamat ini akan menerima pentalan.
-Banyak server surel mensyaratkan paling tidak bagian nama domain yang sah.',
-       'config-upload-settings' => 'Pengunggahan gambar dan berkas',
-       'config-upload-enable' => 'Aktifkan pengunggahan berkas',
-       'config-upload-help' => 'Pengunggahan berkas berpotensi memaparkan server Anda dengan risiko keamanan.
-Untuk informasi lebih lanjut, baca [//www.mediawiki.org/wiki/Manual:Security/id manual keamanan].
-
-Untuk mengaktifkan pengunggahan berkas, ubah modus subdirektori <code>images</code> di bawah direktori akar MediaWiki agar server web dapat menulis ke sana.
-Kemudian aktifkan opsi ini.',
-       'config-upload-deleted' => 'Direktori untuk berkas terhapus:',
-       'config-upload-deleted-help' => 'Pilih direktori tempat mengarsipkan berkas yang dihapus.
-Idealnya, direktori ini tidak boleh dapat diakses dari web.',
-       'config-logo' => 'URL logo:',
-       'config-logo-help' => 'Kulit bawaan MediaWiki memberikan ruang untuk logo berukuran 135x160 piksel di atas menu bilah samping.
-Unggah gambar dengan ukuran yang sesuai, lalu masukkan URL di sini.
-
-Jika Anda tidak ingin menyertakan logo, biarkan kotak ini kosong.', # Fuzzy
-       'config-instantcommons' => 'Aktifkan Instant Commons',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] adalah fitur yang memungkinkan wiki untuk menggunakan gambar, suara, dan media lain dari [//commons.wikimedia.org/ Wikimedia Commons].
-Untuk melakukannya, MediaWiki memerlukan akses ke Internet.
-
-Untuk informasi lebih lanjut tentang fitur ini, termasuk petunjuk tentang cara untuk mengatur untuk wiki selain Wikimedia Commons, baca [//mediawiki.org/wiki/Manual:$wgForeignFileRepos manual].',
-       'config-cc-error' => 'Pemilih lisensi Creative Commons tidak memberikan hasil.
-Masukkan nama lisensi secara manual.',
-       'config-cc-again' => 'Pilih lagi...',
-       'config-cc-not-chosen' => 'Pilih lisensi Creative Commons yang Anda inginkan dan klik "lanjutkan".',
-       'config-advanced-settings' => 'Konfigurasi lebih lanjut',
-       'config-cache-options' => 'Pengaturan untuk penyinggahan objek:',
-       'config-cache-help' => 'Penyinggahan objek digunakan untuk meningkatkan kecepatan MediaWiki dengan menyinggahkan data yang sering digunakan.
-Situs berukuran sedang hingga besar sangat dianjurkan untuk mengaktifkan fitur ini, dan situs kecil juga akan merasakan manfaatnya.',
-       'config-cache-none' => 'Tidak ada penyinggahan (tidak ada fungsi yang dibuang, tetapi kecepatan dapat terpengaruh pada situs wiki yang besar)',
-       'config-cache-accel' => 'Penyinggahan objek PHP (APC, XCache atau WinCache)',
-       'config-cache-memcached' => 'Gunakan Memcached (memerlukan setup dan konfigurasi tambahan)',
-       'config-memcached-servers' => 'Server Memcached:',
-       'config-memcached-help' => 'Daftar alamat IP yang digunakan untuk Memcached.
-Harus dispesifikasikan per baris berikut porta yang akan digunakan. Contoh:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => 'Anda memilih Memcached sebagai jenis singgahan, tetapi tidak menentukan server apa pun.',
-       'config-memcache-badip' => 'Anda memasukkan alamat IP yang tidak sah untuk Memcached: $1 .',
-       'config-memcache-noport' => 'Anda tidak menentukan suatu porta untuk digunakan oleh server Memcached: $1.
-Jika Anda tidak tahu porta tersebut, porta bawaan adalah 11211.',
-       'config-memcache-badport' => 'Nomor porta Memcached harus antara $1 dan $2.',
-       'config-extensions' => 'Ekstensi',
-       'config-extensions-help' => 'Ekstensi yang tercantum di atas terdeteksi di direktori <code>./extensions</code>.
-
-Ekstensi tersebut mungkin memerlukan konfigurasi tambahan, tetapi Anda dapat mengaktifkannya sekarang.',
-       'config-install-alreadydone' => "'''Peringatan:''' Anda tampaknya telah menginstal MediaWiki dan mencoba untuk menginstalnya lagi.
-Lanjutkan ke halaman berikutnya.",
-       'config-install-begin' => 'Dengan menekan "{{int:config-continue}}", Anda akan memulai instalasi MediaWiki.
-Jika Anda masih ingin membuat perubahan, tekan "{{int:config-back}}".', # Fuzzy
-       'config-install-step-done' => 'selesai',
-       'config-install-step-failed' => 'gagal',
-       'config-install-extensions' => 'Termasuk ekstensi',
-       'config-install-database' => 'Menyiapkan basis data',
-       'config-install-pg-schema-not-exist' => 'Skema PostgreSQL tidak tersedia.',
-       'config-install-pg-schema-failed' => 'Pembuatan tabel gagal.
-Pastikan bahwa pengguna "$1" dapat menulis ke skema "$2".',
-       'config-install-pg-commit' => 'Melakukan perubahan',
-       'config-install-pg-plpgsql' => 'Memeriksa bahasa PL / pgSQL',
-       'config-pg-no-plpgsql' => 'Anda perlu menginstal bahasa PL/pgSQL pada basis data $1',
-       'config-pg-no-create-privs' => 'Akun yang Anda tetapkan untuk instalasi tidak memiliki hak yang cukup untuk membuat akun.',
-       'config-install-user' => 'Membuat pengguna basis data',
-       'config-install-user-alreadyexists' => 'Pengguna "$1" sudah ada',
-       'config-install-user-create-failed' => 'Pembuatan pengguna "$1" gagal: $2',
-       'config-install-user-grant-failed' => 'Memberikan izin untuk pengguna "$1" gagal: $2',
-       'config-install-tables' => 'Membuat tabel',
-       'config-install-tables-exist' => "'''Peringatan''': Tabel MediaWiki sepertinya sudah ada.
-Melompati pembuatan.",
-       'config-install-tables-failed' => "'''Kesalahan''': Pembuatan tabel gagal dengan kesalahan berikut: $1",
-       'config-install-interwiki' => 'Mengisi tabel bawaan antarwiki',
-       'config-install-interwiki-list' => 'Tidak dapat menemukan berkas <code>interwiki.list</code>.',
-       'config-install-interwiki-exists' => "'''Peringatan''': Tabel antarwiki tampaknya sudah memiliki entri.
-Mengabaikan daftar bawaan.",
-       'config-install-stats' => 'Inisialisasi statistik',
-       'config-install-keys' => 'Membuat kunci rahasia',
-       'config-insecure-keys' => "'''Peringatan:''' {{PLURAL:$2|Suatu|Beberapa}} kunci aman ($1) yang dibuat selama instalasi {{PLURAL:$2|tidak|tidak}} benar-benar aman. Pertimbangkan untuk mengubah {{PLURAL:$2|kunci|kunci-kunci}} tersebut secara manual.",
-       'config-install-sysop' => 'Membuat akun pengguna pengurus',
-       'config-install-subscribe-fail' => 'Tidak dapat berlangganan mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'cURL tidak diinstal dan allow_url_fopen tidak tersedia.',
-       'config-install-mainpage' => 'Membuat halaman utama dengan konten bawaan',
-       'config-install-extension-tables' => 'Pembuatan tabel untuk ekstensi yang diaktifkan',
-       'config-install-mainpage-failed' => 'Tidak dapat membuat halaman utama: $1',
-       'config-install-done' => "'''Selamat!'''
-Anda telah berhasil menginstal MediaWiki.
-
-Penginstal telah membuat berkas <code>LocalSettings.php</code>.
-Berkas itu berisi semua konfigurasi Anda.
-
-Anda perlu mengunduh berkas itu dan meletakkannya di direktori instalasi wiki (direktori yang sama dengan index.php). Pengunduhan akan dimulai secara otomatis.
-
-Jika pengunduhan tidak terjadi, atau jika Anda membatalkannya, Anda dapat mengulangi pengunduhan dengan mengeklik tautan berikut:
-
-$3
-
-'''Catatan''': Jika Anda tidak melakukannya sekarang, berkas konfigurasi yang dihasilkan ini tidak akan tersedia lagi setelah Anda keluar dari proses instalasi tanpa mengunduhnya.
-
-Setelah melakukannya, Anda dapat '''[$2 memasuki wiki Anda]'''.",
-       'config-download-localsettings' => 'Unduh <code>LocalSettings.php</code>',
-       'config-help' => 'bantuan',
-       'config-nofile' => 'Berkas "$1" tidak dapat ditemukan. Mungkin sudah dihapus?',
-       'mainpagetext' => "'''MediaWiki telah terpasang dengan sukses'''.",
-       'mainpagedocfooter' => 'Silakan baca [//www.mediawiki.org/wiki/Help:Contents/id Panduan Pengguna] untuk cara penggunaan perangkat lunak wiki ini.
-
-== Memulai penggunaan ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings/id Daftar pengaturan konfigurasi]
-* [//www.mediawiki.org/wiki/Manual:FAQ/id Daftar pertanyaan yang sering diajukan mengenai MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Terjemahkan MediaWiki ke bahasa Anda]',
-);
-
-/** Interlingue (Interlingue)
- */
-$messages['ie'] = array(
-       'mainpagetext' => "'''Software del wiki installat con successe.'''",
-);
-
-/** Igbo (Igbo)
- * @author Ukabia
- */
-$messages['ig'] = array(
-       'config-back' => '← Laàzú',
-       'config-continue' => 'Gawazie →',
-       'config-page-language' => 'Ásụ̀sụ̀',
-       'config-page-name' => 'Áhà',
-       'config-page-install' => 'Sụ̀ímé',
-       'config-restart' => 'Eeh, bìdówárí ya.',
-       'config-admin-password' => 'Okwúngáfè:',
-       'config-admin-password-confirm' => 'Okwúngáfè mgbe ozor:',
-       'mainpagetext' => "'''MediaWiki a banyélé nke oma.'''",
-       'mainpagedocfooter' => "Gbàkpó [//meta.wikimedia.org/wiki/Help:Contents Ǹdù Ọ'bànifé] màkà ụmá màkà Í jí ngwa nsónùsòrò bu wiki.
-
-== I bídó ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Ndétu ndósé ihe]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce wéfù ndétu nke ozi MediaWiki]", # Fuzzy
-);
-
-/** Iloko (Ilokano)
- */
-$messages['ilo'] = array(
-       'mainpagetext' => "'''Sibaballigi a nainstolar ti MediaWiki.'''",
-);
-
-/** Ido (Ido)
- * @author Wyvernoid
- */
-$messages['io'] = array(
-       'mainpagetext' => "'''MediaWiki instalesis sucese.'''",
-       'mainpagedocfooter' => "Videz la [//meta.wikimedia.org/wiki/Help:Contents Guidilo por Uzanti] por informo pri uzar la wiki programo.
-
-== Komencar ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Listo di ''Configuration setting'']
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki OQQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki nova versioni posto-listo]", # Fuzzy
-);
-
-/** Icelandic (íslenska)
- */
-$messages['is'] = array(
-       'mainpagetext' => "'''Uppsetning á MediaWiki heppnaðist.'''",
-       'mainpagedocfooter' => 'Ráðfærðu þig við [//meta.wikimedia.org/wiki/Help:Contents Notandahandbókina] fyrir frekari upplýsingar um notkun wiki-hugbúnaðarins.
-
-== Fyrir byrjendur ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Listi yfir uppsetningarstillingar]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki Algengar spurningar MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Póstlisti MediaWiki-útgáfa]', # Fuzzy
-);
-
-/** Italian (italiano)
- * @author Beta16
- * @author Darth Kule
- * @author F. Cosoleto
- * @author Gianfranco
- * @author Karika
- * @author 아라
- */
-$messages['it'] = array(
-       'config-desc' => 'Il programma di installazione per MediaWiki',
-       'config-title' => 'Installazione MediaWiki $1',
-       'config-information' => 'Informazioni',
-       'config-localsettings-upgrade' => 'È stato rilevato un file <code>LocalSettings.php</code>.
-Per aggiornare questa installazione, si prega di inserire il valore di <code>$wgUpgradeKey</code> nella casella qui sotto.
-Lo potete trovare in <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'È stato rilevato un file <code>LocalSettings.php</code>.
-Per aggiornare questa installazione, eseguire <code>update.php</code>',
-       'config-localsettings-key' => 'Chiave di aggiornamento:',
-       'config-localsettings-badkey' => 'La chiave che hai fornito non è corretta.',
-       'config-upgrade-key-missing' => "È stata rilevata un'installazione esistente di MediaWiki.
-Per aggiornare questa installazione, si prega di inserire la seguente riga nella parte inferiore del tuo <code>LocalSettings.php</code>:
-
-$1",
-       'config-localsettings-incomplete' => 'Il file <code>LocalSettings.php</code> esistente sembra essere incompleto.
-La variabile $1 non è impostata.
-Cambia <code>LocalSettings.php</code> in modo che questa variabile sia impostata e fai clic su "{{int:Config-continue}}".',
-       'config-localsettings-connection-error' => 'Si è verificato un errore durante la connessione al database utilizzando le impostazioni specificate in <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Si prega di correggere queste impostazioni e riprovare.
-
-$1',
-       'config-session-error' => "Errore nell'avvio della sessione: $1",
-       'config-session-expired' => 'I dati della sessione sembrano essere scaduti.
-Le sessioni sono configurate per una durata di $1.
-Puoi aumentarla impostando <code>session.gc_maxlifetime</code> nel file php.ini.
-Riavvia il processo di installazione.',
-       'config-no-session' => 'I dati della sessione sono andati persi!
-Controlla il tuo file php.ini ed assicurati che <code>session.save_path</code> è impostato su una directory appropriata.',
-       'config-your-language' => 'La tua lingua:',
-       'config-your-language-help' => 'Seleziona una lingua da utilizzare durante il processo di installazione.',
-       'config-wiki-language' => 'La lingua del wiki:',
-       'config-wiki-language-help' => 'Seleziona la lingua che verrà prevalentemente usata nel wiki.',
-       'config-back' => '← Indietro',
-       'config-continue' => 'Continua →',
-       'config-page-language' => 'Lingua',
-       'config-page-welcome' => 'Benvenuti in MediaWiki!',
-       'config-page-dbconnect' => 'Connessione al database',
-       'config-page-upgrade' => "Aggiornamento dell'installazione esistente",
-       'config-page-dbsettings' => 'Impostazioni del database',
-       'config-page-name' => 'Nome',
-       'config-page-options' => 'Opzioni',
-       'config-page-install' => 'Installa',
-       'config-page-complete' => 'Completa!',
-       'config-page-restart' => 'Riavvio installazione',
-       'config-page-readme' => 'Leggimi',
-       'config-page-releasenotes' => 'Note di versione',
-       'config-page-upgradedoc' => 'Aggiornamento',
-       'config-page-existingwiki' => 'Wiki esistenti',
-       'config-help-restart' => 'Vuoi cancellare tutti i dati salvati che hai inserito e riavviare il processo di installazione?',
-       'config-restart' => 'Sì, riavvia',
-       'config-welcome' => "=== Controllo dell'ambiente ===
-Saranno eseguiti controlli di base per vedere se questo ambiente è adatto per l'installazione di MediaWiki.
-Ricordati di includere queste informazioni se chiedi assistenza su come completare l'installazione.",
-       '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.
-Non è possibile installare MediaWiki.",
-       'config-env-php' => 'PHP $1 è installato.',
-       'config-env-php-toolow' => 'PHP $1 è installato.
-Tuttavia, MediaWiki richiede PHP $2 o superiore.',
-       'config-outdated-sqlite' => "'''Attenzione''': è presente SQLite $1 mentre è richiesta la versione $2, SQLite non sarà disponibile.",
-       'config-no-fts3' => "'''Attenzione''': SQLite è compilato senza il [//sqlite.org/fts3.html modulo FTS3], le funzionalità di ricerca non saranno disponibili su questo backend.",
-       'config-xml-bad' => 'Il modulo XML di PHP è mancante.
-MediaWIki necessita di funzioni presenti in questo modulo e non funzionerà con la configurazione corrente.
-Se si sta eseguendo Mandrake, installare il paccketto php-xml.',
-       'config-pcre' => 'Il modulo per il supporto PCRE sembra essere mancante.
-MediaWiki necessita di questo modulo per funzinare, che fornisce funzioni per le espressioni regolari Perl-compatibili.',
-       'config-pcre-no-utf8' => "'''Errore''': Il modulo PCRE di PHP sembra essere stato compilato senza il supporto PCRE_UTF8, ma MediaWiki lo richiede per funzionare correttamente.",
-       'config-memory-raised' => 'Il valore <code>memory_limit</code> di PHP è $1, aumentato a $2.',
-       'config-memory-bad' => "''Attenzione:''' Il valore di <code>memory_limit</code> di PHP è $1.
-Probabilmente è troppo basso.
-L'installazione potrebbe non riuscire!",
-       'config-ctype' => "'''Errore''': PHP deve essere compilato con il supporto per l'[http://www.php.net/manual/it/ctype.installation.php estensione Ctype].",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] è installato',
-       'config-apc' => '[http://www.php.net/apc APC] è installato',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] è installato',
-       'config-no-cache' => "'''Attenzione:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache] non sono stati trovati.
-La caching degli oggetti non è attivata.",
-       'config-diff3-bad' => 'GNU diff3 non trovato.',
-       'config-git' => 'Trovato software di controllo della versione Git: <code>$1</code>.',
-       'config-git-bad' => 'Software di controllo della versione Git non trovato.',
-       'config-imagemagick' => 'Trovato ImageMagick: <code>$1</code>.
-Le miniature delle immagini saranno presenti se gli upload vengono abilitati.',
-       'config-gd' => 'Trovata la GD Graphics Library built-in.
-Le miniature delle immagini saranno presenti se gli upload vengono abilitati.',
-       'config-no-scaling' => 'Impossibile trovare GD library o ImageMagick.
-Le miniature delle immagini saranno disabilitate.',
-       'config-no-uri' => "'''Errore:''' Impossibile determinare l'URI attuale.
-Installazione interrotta.",
-       'config-no-cli-uri' => "'''Attenzione''': --scriptpath non specificato, si utilizza il valore predefinito: <code>$1</code>.",
-       'config-using-server' => 'Nome server in uso "<nowiki>$1</nowiki>".',
-       'config-using-uri' => 'URL del server in uso "<nowiki>$1$2</nowiki>".',
-       'config-brokenlibxml' => 'Il tuo sistema ha una combinazione di versioni di PHP e libxml2 che è difettosa e che può provocare un danneggiamento non visibile di dati in MediaWiki ed in altre applicazioni per il web.
-Aggiorna a PHP 5.2.9 o successivo, ed a libxml2 2.7.3 o successivo ([//bugs.php.net/bug.php?id=45996 il bug è studiato dal lato PHP]).
-Installazione interrotta.',
-       'config-using531' => 'MediaWiki non può essere usato con il PHP $1 a causa di un bug che coinvolge i parametri di riferimento a <code>__call()</code>.
-Aggiorna a PHP 5.3.2 o superiore, o fai un downgrade tornando a PHP 5.3.0 per risolvere il problema.
-Installazione interrotta.',
-       'config-db-type' => 'Tipo di database:',
-       'config-db-host' => 'Host del database:',
-       'config-db-host-help' => 'Se il server del tuo database è su un server diverso, immetti qui il nome dell\'host o il suo indirizzo IP.
-
-Se stai utilizzando un web hosting condiviso, il tuo hosting provider dovrebbe fornirti il nome host corretto nella sua documentazione.
-
-Se stai installando su un server Windows con uso di MySQL, l\'uso di "localhost" potrebbe non funzionare correttamente come nome del server. In caso di problemi, prova a impostare "127.0.0.1" come indirizzo IP locale.
-
-Se usi PostgreSQL, lascia questo campo vuoto per consentire di connettersi tramite un socket Unix.',
-       'config-db-host-oracle' => 'TNS del database:',
-       'config-db-wiki-settings' => 'Identifica questo wiki',
-       'config-db-name' => 'Nome del database:',
-       'config-db-name-help' => 'Scegli un nome che identifica il tuo wiki.
-Non deve contenere spazi.
-
-Se utilizzi un web hosting condiviso, il tuo hosting provider o ti fornisce uno specifico nome di database da utilizzare, oppure ti consentirà di creare il database tramite un pannello di controllo.',
-       'config-db-name-oracle' => 'Schema del database:',
-       'config-db-install-account' => "Account utente per l'installazione",
-       'config-db-username' => 'Nome utente del database:',
-       'config-db-password' => 'Password del database:',
-       'config-db-password-empty' => 'Inserire una password per il nuovo utente del database: $1.
-Anche se può essere possibile creare utenti senza password, questo non è sicuro.',
-       'config-db-install-username' => "Inserisci il nome utente che verrà utilizzato per connettersi al database durante il processo di installazione.
-Questo non è il nome utente dell'account MediaWiki; ma quello per il tuo database.",
-       'config-db-install-password' => "Inserisci la password che verrà utilizzato per connettersi al database durante il processo di installazione.
-Questa non è la password dell'account MediaWiki; ma quella per il tuo database.",
-       'config-db-install-help' => "Inserire il nome utente e la password che verranno usate per la connessione al database durante il processo d'installazione.",
-       'config-db-account-lock' => 'Utilizza lo stesso nome utente e password durante il normale funzionamento',
-       'config-db-wiki-account' => 'Account utente per il normale funzionamento',
-       'config-db-wiki-help' => "Inserisci il nome utente e la password che verrà utilizzato per connettersi al database durante il normale funzionamento del wiki.
-Se l'account non esiste, e l'account di installazione dispone di privilegi sufficienti, verrà creato con privilegi minimi necessari per operare sul wiki.",
-       'config-db-prefix' => 'Prefisso tabella del database:',
-       'config-db-prefix-help' => "Se hai bisogno di condividere un database tra più wiki, o tra MediaWiki e un'altra applicazione web, puoi scegliere di aggiungere un prefisso a tutti i nomi di tabella, per evitare conflitti.
-Non utilizzare spazi.
-
-Solitamente, questo campo viene lasciato vuoto.",
-       'config-db-charset' => 'Set di caratteri del database',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binario',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 con compatibilità UTF-8',
-       'config-mysql-old' => 'MySQL $1 o una versione successiva è necessaria, rilevata la $2.',
-       'config-db-port' => 'Porta del database:',
-       'config-db-schema' => 'Schema per MediaWiki:',
-       'config-db-schema-help' => 'Questo schema in genere andrà bene.
-Da cambiare solamente se si è sicuri di averne bisogno.',
-       'config-pg-test-error' => "Impossibile connettersi al database '''$1''': $2",
-       'config-sqlite-dir' => 'Directory data di SQLite:',
-       'config-oracle-def-ts' => 'Tablespace di default:',
-       'config-oracle-temp-ts' => 'Tablespace temporaneo:',
-       'config-support-info' => 'MediaWiki supporta i seguenti sistemi di database:
-
-$1
-
-Se fra quelli elencati qui sotto non vedi il sistema di database che vorresti utilizzare, seguire le istruzioni linkate sopra per abilitare il supporto.',
-       'config-support-mysql' => '* $1 è la configurazione preferibile per MediaWiki ed è quella meglio supportata ([http://www.php.net/manual/en/mysql.installation.php come compilare PHP con supporto MySQL])',
-       'config-header-mysql' => 'Impostazioni MySQL',
-       'config-header-postgres' => 'Impostazioni PostgreSQL',
-       'config-header-sqlite' => 'Impostazioni SQLite',
-       'config-header-oracle' => 'Impostazioni Oracle',
-       'config-invalid-db-type' => 'Tipo di database non valido',
-       'config-missing-db-name' => 'È necessario immettere un valore per "Nome del database"',
-       'config-missing-db-host' => 'È necessario immettere un valore per "Host del database"',
-       'config-missing-db-server-oracle' => 'È necessario immettere un valore per "TNS del database"',
-       'config-invalid-db-name' => 'Nome di database "$1" non valido.
-Utilizza soltanto caratteri ASCII come lettere (a-z, A-Z), numeri (0-9), sottolineatura (_) e trattini (-).',
-       'config-invalid-db-prefix' => 'Prefisso database "$1" non valido.
-Utilizza soltanto caratteri ASCII come lettere (a-z, A-Z), numeri (0-9), sottolineatura (_) e trattini (-).',
-       'config-connection-error' => '$1.
-
-Controlla host, nome utente e password e prova ancora.',
-       'config-db-sys-create-oracle' => "Il programma di installazione supporta solo l'utilizzo di un account SYSDBA per la creazione di un nuovo account.",
-       'config-db-sys-user-exists-oracle' => 'L\'account utente "$1" esiste già. SYSDBA può essere usato solo per la creazione di un nuovo account!',
-       'config-postgres-old' => 'PostgreSQL $1 o una versione successiva è necessaria, rilevata la $2.',
-       'config-sqlite-name-help' => 'Scegli un nome che identifichi il tuo wiki.
-Non utilizzare spazi o trattini.
-Questo servirà per il nome del file di dati SQLite.',
-       'config-sqlite-mkdir-error' => 'Errore durante la creazione della directory dati "$1".
-Controlla la posizione e riprova.',
-       'config-sqlite-dir-unwritable' => 'Impossibile scrivere nella directory "$1".
-Modifica le autorizzazioni in modo che il webserver possa scrivere in essa e riprova.',
-       'config-sqlite-connection-error' => '$1.
-
-Controlla la directory dati e il nome del database qui sotto, poi riprova.',
-       'config-sqlite-readonly' => 'Il file <code>$1</code> non è scrivibile.',
-       'config-sqlite-cant-create-db' => 'Impossibile creare il file di database <code>$1</code> .',
-       'config-sqlite-fts3-downgrade' => 'Il PHP è mancante del supporto FTS3, declassamento tabelle in corso',
-       'config-can-upgrade' => "Ci sono tabelle di MediaWiki in questo database.
-Per aggiornarle a MediaWiki $1, fai clic su '''continua'''.",
-       'config-upgrade-done' => "Aggiornamento completo.
-
-Puoi [$1 iniziare ad usare il tuo wiki].
-
-Se vuoi rigenerare il tuo file <code>LocalSettings.php</code>, clicca sul pulsante sotto. Questa operazione '''non è raccomandata''', a meno che non hai problemi con il tuo wiki.",
-       'config-upgrade-done-no-regenerate' => 'Aggiornamento completo.
-
-Puoi [$1 iniziare ad usare il tuo wiki].',
-       'config-regenerate' => 'Rigenera LocalSettings.php →',
-       'config-show-table-status' => 'La query <code>SHOW TABLE STATUS</code> è fallita!',
-       'config-unknown-collation' => "'''Attenzione:''' il database utilizza regole di confronto non riconosciute.",
-       'config-db-web-account' => "Account del database per l'accesso web",
-       'config-db-web-help' => 'Seleziona il nome utente e la password che il server web utilizzerà per connettersi al server di database, durante il normale funzionamento del wiki.',
-       'config-db-web-account-same' => "Utilizza lo stesso account dell'installazione",
-       'config-db-web-create' => "Crea l'account se non esiste già",
-       'config-db-web-no-create-privs' => "L'account usato per l'installazione non dispone dei privilegi necessari per creare un altro account.
-L'account indicato qui deve già esistere.",
-       'config-mysql-engine' => 'Storage engine:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-charset' => 'Set di caratteri del database:',
-       'config-mysql-binary' => 'Binario',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Nome del wiki:',
-       'config-site-name-help' => 'Questo verrà visualizzato nella barra del titolo del browser e in vari altri posti.',
-       'config-site-name-blank' => 'Inserisci il nome del sito.',
-       'config-project-namespace' => 'Namespace del progetto:',
-       'config-ns-generic' => 'Progetto',
-       'config-ns-site-name' => 'Stesso nome del wiki: $1',
-       'config-ns-other' => 'Altro (specificare)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-admin-box' => 'Account amministratore',
-       'config-admin-name' => 'Tuo nome:',
-       'config-admin-password' => 'Password:',
-       'config-admin-password-confirm' => 'Ripeti la password:',
-       'config-admin-help' => 'Inserisci il tuo nome utente scelto qui, ad esempio "Mario Rossi".
-Questo è il nome che userai per accedere al wiki.',
-       'config-admin-name-blank' => "Inserisci un nome utente per l'amministratore.",
-       'config-admin-name-invalid' => 'Il nome utente specificato "<nowiki>$1</nowiki>" non è valido.
-Specificare un nome utente diverso.',
-       'config-admin-password-blank' => "Inserisci una password per l'account di amministratore.",
-       'config-admin-password-same' => 'La password non deve essere uguale al nome utente.',
-       'config-admin-password-mismatch' => 'Le password inserite non coincidono tra loro.',
-       'config-admin-email' => 'Indirizzo e-mail:',
-       'config-admin-error-bademail' => 'È stato inserito un indirizzo email non valido.',
-       'config-subscribe-help' => 'Si tratta di una mailing list a basso traffico dedicata agli annunci di nuove versioni, compresi importanti segnalazioni riguardanti la sicurezza.
-È consigliato iscriversi e aggiornare la proprio installazione di MediaWiki quando una nuova versione viene resa pubblica.',
-       'config-subscribe-noemail' => "Hai provato ad iscriverti alla mailing list dedicata agli annunci delle nuove versioni senza fornire un indirizzo email.
-Inserire un indirizzo email se si desidera effettuare l'iscrizione alla mailing list.",
-       '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-optional-skip' => 'Sono già stanco, installa solo il wiki.',
-       'config-profile' => 'Profilo dei diritti utente:',
-       'config-profile-wiki' => 'Wiki aperto',
-       'config-profile-no-anon' => 'Creazione utenza obbligatoria',
-       'config-profile-fishbowl' => 'Solo editori autorizzati',
-       'config-profile-private' => 'Wiki privata',
-       'config-license' => 'Copyright e licenza:',
-       'config-license-none' => 'Nessun piè di pagina per la licenza',
-       'config-license-cc-by-sa' => 'Creative Commons Attribuzione-Condividi allo stesso modo',
-       'config-license-cc-by' => 'Creative Commons Attribuzione',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo',
-       'config-license-cc-0' => 'Creative Commons Zero (pubblico dominio)',
-       'config-license-gfdl' => 'GNU Free Documentation License 1.3 o versioni successive',
-       'config-license-pd' => 'Pubblico dominio',
-       'config-license-cc-choose' => 'Seleziona una delle licenze Creative Commons',
-       'config-license-help' => "Molti wiki pubblici rilasciano i loro contributi con una [http://freedomdefined.org/Definition licenza libera]. Questo aiuta a creare un senso di proprietà condivisa nella comunità e incoraggia a contribuire a lungo termine. Non è generalmente necessario per un wiki privato o aziendale.
-
-Se vuoi usare testi da Wikipedia, o desideri che Wikipedia possa essere in grado di accettare testi copiati dal tuo wiki, dovresti scegliere '''Creative Commons Attribution Share Alike'''.
-
-In precedenza Wikipedia ha utilizzato la GNU Free Documentation License. La GFDL è una licenza valida, ma è di difficile comprensione e complica il riutilizzo dei contenuti.",
-       'config-email-settings' => 'Impostazioni email',
-       'config-enable-email' => 'Abilita la posta elettronica in uscita',
-       'config-email-user' => 'Abilita invio email fra utenti',
-       'config-email-usertalk' => 'Abilita le notifiche per le pagine di discussione utente',
-       'config-email-watchlist' => 'Abilita le notifiche per gli osservati speciali',
-       'config-email-auth' => 'Abilita autenticazione via email',
-       'config-email-sender' => 'Indirizzo email di ritorno:',
-       'config-upload-settings' => 'Caricamenti di immagini e file',
-       'config-upload-enable' => 'Consentire il caricamento di file',
-       'config-upload-deleted' => 'Directory per i file cancellati:',
-       'config-logo' => 'URL del logo:',
-       'config-instantcommons' => 'Abilita Instant Commons',
-       'config-cc-again' => 'Seleziona di nuovo...',
-       'config-cc-not-chosen' => 'Scegliere quale licenza Creative Commons si desidera e cliccare su "procedi".',
-       'config-advanced-settings' => 'Configurazione avanzata',
-       'config-memcached-servers' => 'Server di memcached:',
-       'config-memcache-needservers' => 'È stato selezionato il tipo di caching Memcached, ma non è stato impostato alcun server.',
-       'config-memcache-badip' => 'È stato inserito un indirizzo IP non valido per Memcached: $1.',
-       'config-memcache-badport' => 'I numeri di porta per memcached dovrebbero essere tra $1 e $2.',
-       'config-extensions' => 'Estensioni',
-       'config-install-step-done' => 'fatto',
-       'config-install-step-failed' => 'non riuscito',
-       'config-install-database' => 'Configurazione database',
-       'config-install-schema' => 'Creazione dello schema',
-       'config-install-user' => 'Creazione di utente del database',
-       'config-install-user-alreadyexists' => 'L\'utente "$1" è già presente',
-       'config-install-user-create-failed' => 'Creazione dell\'utente "$1" non riuscita: $2',
-       'config-install-user-missing' => 'L\'utente indicato "$1" non esiste.',
-       'config-install-tables' => 'Creazione tabelle',
-       'config-install-tables-failed' => "'''Errore''': La creazione della tabella non è riuscita: $1",
-       'config-install-interwiki' => 'Riempimento della tabella interwiki predefinita',
-       'config-install-interwiki-list' => 'Impossibile leggere il file <code>interwiki.list</code>.',
-       'config-install-stats' => 'Inizializzazione delle statistiche',
-       'config-install-keys' => 'Generazione delle chiavi segrete',
-       'config-install-sysop' => "Creazione dell'account utente per l'amministratore",
-       'config-install-subscribe-fail' => 'Impossibile sottoscrivere mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'cURL non è installato e allow_url_fopen non è disponibile.',
-       'config-install-mainpage' => 'Creazione della pagina principale con contenuto predefinito',
-       'config-install-extension-tables' => 'Creazione delle tabelle per le estensioni attivate',
-       'config-install-mainpage-failed' => 'Impossibile inserire la pagina principale: $1',
-       'config-download-localsettings' => 'Scarica <code>LocalSettings.php</code>',
-       'config-help' => 'aiuto',
-       'config-nofile' => 'Il file "$1" non può essere trovato. È stato eliminato?',
-       'mainpagetext' => "'''Installazione di MediaWiki completata correttamente.'''",
-       'mainpagedocfooter' => "Consultare la [//meta.wikimedia.org/wiki/Aiuto:Sommario Guida utente] per maggiori informazioni sull'uso di questo software wiki.
-
-== Per iniziare ==
-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]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localizza MediaWiki nella tua lingua]",
-);
-
-/** Japanese (日本語)
- * @author Aphaia
- * @author Fryed-peach
- * @author Iwai.masaharu
- * @author Mizusumashi
- * @author Ninomy
- * @author Ohgi
- * @author Shirayuki
- * @author Whym
- * @author Yanajin66
- * @author 青子守歌
- * @author 아라
- */
-$messages['ja'] = array(
-       'config-desc' => 'MediaWiki のインストーラー',
-       'config-title' => 'MediaWiki $1 のインストール',
-       'config-information' => '情報',
-       'config-localsettings-upgrade' => 'ファイル <code>LocalSettings.php</code> を検出しました。
-インストールされているものをアップグレードするには、<code>$wgUpgradeKey</code> の値を以下の欄に入力してください。
-この値は <code>LocalSettings.php</code> 内にあります。',
-       'config-localsettings-cli-upgrade' => 'ファイル <code>LocalSettings.php</code> を検出しました。
-インストールされているものをアップグレードするには、<code>update.php</code> を実行してください',
-       'config-localsettings-key' => 'アップグレード キー:',
-       'config-localsettings-badkey' => '与えられたキーが間違っています',
-       'config-upgrade-key-missing' => 'MediaWiki が既にインストールされていることを検出しました。
-インストールされているものをアップグレードするために、以下の行を <code>LocalSettings.php</code> の末尾に挿入してください:
-
-$1',
-       'config-localsettings-incomplete' => '既存の <code>LocalSettings.php</code> の内容は不完全のようです。
-変数 $1 が設定されていません。
-<code>LocalSettings.php</code> 内でこの変数を設定して、「{{int:Config-continue}}」をクリックしてください。',
-       'config-localsettings-connection-error' => '<code>LocalSettings.php</code> または <code>AdminSettings.php</code> で指定した設定を使用してデータベースに接続する際にエラーが発生しました。
-設定を修正してから再度試してください。
-
-$1',
-       'config-session-error' => 'セッションの開始エラー: $1',
-       'config-session-expired' => 'セッションの有効期限が切れたようです。
-セッションの有効期間は$1に設定されています。
-php.iniの<code>session.gc_maxlifetime</code>を設定することで、この問題を改善できます。
-インストール作業を再起動させてください。',
-       'config-no-session' => 'セッションのデータが消失しました!
-php.ini 内で <code>session.save_path</code> が適切なディレクトリに設定されていることを確認してください。',
-       'config-your-language' => 'あなたの言語:',
-       'config-your-language-help' => 'インストール作業に使用する言語を選択してください。',
-       'config-wiki-language' => 'ウィキの言語:',
-       'config-wiki-language-help' => 'ウィキで主に書き込まれる言語を選択してください。',
-       'config-back' => '← 戻る',
-       'config-continue' => '続行 →',
-       'config-page-language' => '言語',
-       'config-page-welcome' => 'MediaWiki へようこそ!',
-       'config-page-dbconnect' => 'データベースに接続',
-       'config-page-upgrade' => '既存のインストールを更新',
-       'config-page-dbsettings' => 'データベースの設定',
-       'config-page-name' => '名前',
-       'config-page-options' => 'オプション',
-       'config-page-install' => 'インストール',
-       'config-page-complete' => '完了!',
-       'config-page-restart' => 'インストールを再起動',
-       'config-page-readme' => 'お読みください',
-       'config-page-releasenotes' => 'リリースノート',
-       'config-page-copying' => 'コピー',
-       'config-page-upgradedoc' => 'アップグレード',
-       'config-page-existingwiki' => '既存のウィキ',
-       'config-help-restart' => '入力した保存データをすべて消去して、インストール作業を再起動しますか?',
-       'config-restart' => 'はい、再起動します',
-       'config-welcome' => '=== 環境の確認 ===
-基本的な確認では、現在の環境が MediaWiki のインストールに適しているかを確認します。
-インストール方法について助けが必要になった場合は、必ずこの確認結果を添えてください。',
-       'config-copyright' => '=== 著作権および規約 ===
-$1
-
-この作品はフリーソフトウェアです。あなたは、フリーソフトウェア財団の発行するGNU一般公衆利用許諾書 (GNU General Public License) (バージョン2、またはそれ以降のライセンス) の規約に基づき、このライブラリを再配布および改変できます。
-
-この作品は、有用であることを期待して配布されていますが、商用あるいは特定の目的に適するかどうかも含めて、暗黙的にも、一切保証されません。
-詳しくは、GNU一般公衆利用許諾書をご覧ください。
-
-あなたはこのプログラムと共に、<doclink href=Copying>GNU一般公衆利用許諾契約書の複製</doclink>を一部受け取ったはずです。受け取っていない場合は、フリーソフトウェア財団 (宛先は the Free Software Foundation, Inc., 59Temple Place, Suite 330, Boston, MA 02111-1307 USA) まで請求してください。',
-       'config-sidebar' => '* [//www.mediawiki.org MediaWikiのホーム]
-* [//www.mediawiki.org/wiki/Help:Contents 利用者向け案内]
-* [//www.mediawiki.org/wiki/Manual:Contents 管理者向け案内]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]
-----
-* <doclink href=Readme>お読みください</doclink>
-* <doclink href=ReleaseNotes>リリースノート</doclink>
-* <doclink href=Copying>コピー</doclink>
-* <doclink href=UpgradeDoc>アップグレード</doclink>',
-       'config-env-good' => '環境の確認が終わりました。
-MediaWikiをインストールできます。',
-       'config-env-bad' => '環境の確認が終わりました。
-MediaWikiのインストールはできません。',
-       'config-env-php' => 'PHP $1がインストールされています。',
-       'config-env-php-toolow' => 'PHP $1 がインストールされています。
-しかし、MediaWikiには PHP $2 以上が必要です。',
-       'config-unicode-using-utf8' => 'Unicode正規化に、Brion Vibberのutf8_normalize.soを使用。',
-       '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-no-db' => '適切なデータベース ドライバーが見つかりませんでした! PHP にデータベース ドライバーをインストールする必要があります。
-以下の種類のデータベースに対応しています: $1
-
-共有サーバーを使用している場合は、適切なデータベース ドライバーのインストールを、サーバーの管理者に依頼してください。
-PHP を自分でコンパイルした場合は、例えば <code>./configure --with-mysql</code> を実行して、データベース クライアントを使用できるように再設定してください。
-Debian または Ubuntu のパッケージから PHP をインストールした場合は、php5-mysql モジュールもインストールする必要があります。',
-       'config-outdated-sqlite' => "'''警告:''' あなたは SQLite $1 を使用していますが、最低限必要なバージョン $2 より古いバージョンです。SQLite は利用できません。",
-       '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] が動作しています!'''
-このオプションは、予期せずデータ入力を破壊します。
-このオプションを無効化しない限り、MediaWiki のインストールや使用はできません。",
-       'config-magic-quotes-sybase' => "'''致命的エラー: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] が動作しています!'''
-このオプションは、予期せずデータ入力を破壊します。
-このオプションを無効化しない限り、MediaWiki のインストールや使用はできません。",
-       'config-mbstring' => "'''致命的エラー: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] が動作しています!'''
-このオプションは、エラーを引き起こし、予期せずデータを破壊するおそれがあります。
-このオプションを無効化しない限り、MediaWiki のインストールや使用はできません。",
-       'config-ze1' => "'''致命的エラー: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] が動作しています!'''
-このオプションは、MediaWiki において深刻なバグを引き起こします。
-このオプションを無効化しない限り、MediaWiki のインストールや使用はできません。",
-       'config-safe-mode' => "'''警告:''' PHPの[http://www.php.net/features.safe-mode セーフモード]が有効になっています。
-特に、ファイルのアップロードや<code>math</code>機能で、問題が発生するおそれがあります。",
-       'config-xml-bad' => 'PHPのXMLモジュールが不足しています。
-MediaWikiは、このモジュールの関数を必要としているため、この構成では動作しません。
-Mandrakeを実行している場合、php-xmlパッケージをインストールしてください。',
-       'config-pcre' => 'PCREをサポートしているモジュールが不足しているようです。
-MediaWikiは、Perl互換の正規表現関数の動作が必要です。',
-       'config-pcre-no-utf8' => "'''致命的エラー:''' PHP の PCRE が PCRE_UTF8 対応なしでコンパイルされているようです。
-MediaWiki を正しく動作させるには、UTF-8 対応が必要です。",
-       'config-memory-raised' => 'PHPの<code>memory_limit</code>は$1で、$2に引き上げられました。',
-       'config-memory-bad' => "'''警告:''' PHPの<code>memory_limit</code>に$1に設定されています。
-この値はおそらく小さすぎます。
-インストールが失敗するおそれがあります!",
-       '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-diff3-bad' => 'GNU diff3 が見つかりません。',
-       'config-git' => 'バージョン管理ソフトウェア Git が見つかりました: <code>$1</code>',
-       'config-git-bad' => 'バージョン管理ソフトウェア Git が見つかりません。',
-       'config-imagemagick' => 'ImageMagickが見つかりました: <code>$1</code>。
-アップロードが有効であれば、画像のサムネイルを利用できます。',
-       'config-gd' => 'GD画像ライブラリが内蔵されていることが確認されました。
-アップロードが有効なら、画像のサムネイルが利用できます。',
-       'config-no-scaling' => 'GDライブラリもImageMagickも見つかりませんでした。
-画像のサムネイル生成は無効になります。',
-       'config-no-uri' => "'''エラー:''' 現在のURIを決定できませんでした。
-インストールは中止されました。",
-       '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> に、任意のスクリプト実行に関する脆弱性があります。
-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でのバグ情報])。
-インストールを終了します。',
-       'config-using531' => 'PHP$1は<code>__call()</code>の引数参照に関するバグのため、MediaWikiと互換性がありません。
-PHP5.3.2以降に更新するか、この([//bugs.php.net/bug.php?id=50394 PHPに提出されたバグ])を修正するためにPHP5.3.0へ戻してください。
-インストールは中止されました。',
-       'config-suhosin-max-value-length' => 'Suhosin がインストールされており、GET パラメーターの <code>length</code> を $1 バイトに制限しています。
-MediaWiki の ResourceLoader コンポーネントはこの制限を回避しますが、パフォーマンスは低下します。
-可能な限り、<code>php.ini</code> で <code>suhosin.get.max_value_length</code> を 1024 以上に設定し、同じ値を <code>LocalSettings.php</code> 内で <code>$wgResourceLoaderMaxQueryLength</code> に設定してください。',
-       'config-db-type' => 'データベースの種類:',
-       'config-db-host' => 'データベースのホスト:',
-       'config-db-host-help' => '異なるサーバー上にデータベースサーバーがある場合、ホスト名またはIPアドレスをここに入力してください。
-
-もし、共有されたウェブホスティングを使用している場合、ホスティングプロバイダーは正確なホスト名を解説しているはずです。
-
-WindowsでMySQLを使用している場合に、「localhost」は、サーバー名としてはうまく働かないでしょう。もしそのような場合は、ローカルIPアドレスとして「127.0.0.1」を試してみてください。
-
-PostgreSQLを使用している場合、UNIXソケットで接続するにはこの欄を空欄のままにしてください。',
-       'config-db-host-oracle' => 'データベース TNS:',
-       'config-db-host-oracle-help' => '有効な[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm ローカル接続名]を入力してください。tnsnames.ora ファイルは、このインストール先から参照できる場所に置いてください。<br />ご使用中のクライアント ライブラリが 10g 以降の場合、[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] ネーミング メソッドを使用できます。',
-       'config-db-wiki-settings' => 'このウィキの識別情報',
-       'config-db-name' => 'データベース名:',
-       'config-db-name-help' => 'このウィキを識別する名前を入力してください。
-空白を含めることはできません。
-
-共有ウェブホストを利用している場合、ホスティングプロバイダーが特定の使用可能なデータベース名を提供するか、あるいは管理パネルからデータベースを作成できるようにしているでしょう。',
-       'config-db-name-oracle' => 'データベースのスキーマ:',
-       'config-db-install-account' => 'インストールで使用する利用者アカウント',
-       'config-db-username' => 'データベースのユーザー名:',
-       'config-db-password' => 'データベースのパスワード:',
-       'config-db-password-empty' => '新しいデータベースの利用者名 $1 のパスワードを入力してください。
-パスワードを設定せずにユーザーを作成できる場合もありますが、安全ではありません。',
-       'config-db-install-username' => 'インストール中にデータベースへの接続で使用するユーザー名を入力してください。
-これは MediaWiki アカウントの利用者名のことではありません。あなたのデータベースでのユーザー名です。',
-       'config-db-install-password' => 'インストール中にデータベースへの接続で使用するパスワードを入力してください。
-これは MediaWiki アカウントのパスワードのことではありません。あなたのデータベースでのパスワードです。',
-       'config-db-install-help' => 'インストール作業中にデータベースに接続するための利用者名とパスワードを入力してください。',
-       'config-db-account-lock' => 'インストール作業終了後も同じ利用者名とパスワードを使用する',
-       'config-db-wiki-account' => 'インストール作業終了後の利用者アカウント',
-       'config-db-wiki-help' => '通常のウィキ操作中にデータベースへの接続する時に利用する利用者名とパスワードを入力してください。
-アカウントが存在せず、インストールのアカウントに十分な権限がある場合は、この利用者アカウントは、ウィキを操作する上で最小限の権限を持った状態で作成されます。',
-       'config-db-prefix' => 'データベース テーブルの接頭辞:',
-       'config-db-prefix-help' => 'データベースを複数のウィキ間、あるいはMediaWikiと他のウェブアプリケーションで共有する必要がある場合、衝突を避けるために、すべてのテーブル名に接頭辞を付ける必要があります。
-空白は使用できません。
-
-このフィールドは、通常は空のままです。',
-       'config-db-charset' => 'データベースの文字セット',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 バイナリ',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 後方互換 UTF-8',
-       'config-charset-help' => "'''警告:''' MySQL 4.1+ で'''後方互換 UTF-8''' を使用している状態で、<code>mysqldump</code> でデータベースをバックアップすると、すべての非 ASCII 文字が破壊されてしまい、バックアップが不可逆的に破損してしまいます!
-
-'''バイナリ モード'''では、MediaWiki は、UTF-8 テキストをデータベースのバイナリ フィールドに格納します。
-これは、MySQL の UTF-8 モードより効率的で、Unicode 文字の全範囲を利用できるようになります。
-'''UTF-8 モード'''では、MySQL は、データ内で使用している文字集合を知っているため、適切に表現や変換ができますが、
-[//ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 基本多言語面]の外にある文字を格納できません。",
-       'config-mysql-old' => 'MySQL $1 以降が必要です。ご使用中の MySQL は $2 です。',
-       'config-db-port' => 'データベースのポート:',
-       'config-db-schema' => 'MediaWiki のスキーマ:',
-       'config-db-schema-help' => '通常はこのスキーマで問題ありません。
-必要な場合のみ変更してください。',
-       'config-pg-test-error' => "データベース '''$1''' に接続できません: $2",
-       'config-sqlite-dir' => 'SQLite データ ディレクトリ:',
-       'config-sqlite-dir-help' => "SQLite は単一のファイル内にすべてのデータを格納しています。
-
-指定したディレクトリは、インストール時にウェブ サーバーが書き込めるようにしておく必要があります。
-
-このディレクトリはウェブからアクセス'''不可能'''である必要があります。PHP ファイルがある場所には配置できないのはこのためです。
-
-インストーラーは <code>.htaccess</code> ファイルにも書き込みます。しかし、これが失敗した場合は、誰かが生のデータベースにアクセスできてしまいます。
-データベースは、生のデータ (メールアドレス、パスワードのハッシュ値) の他、削除された版、その他ウィキ上の制限されているデータを含んでいます。
-
-例えば <code>/var/lib/mediawiki/yourwiki</code> のように、別の場所にデータベースを配置することを検討してください。",
-       'config-oracle-def-ts' => '既定のテーブル領域:',
-       'config-oracle-temp-ts' => '一時的なテーブル領域:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => 'MediaWiki は以下のデータベース システムに対応しています:
-
-$1
-
-使用しようとしているデータベース システムが下記の一覧にない場合は、上記リンク先の手順に従ってインストールしてください。',
-       'config-support-mysql' => '* $1はMediaWikiの主要な対象であり、最もサポートされています ([http://www.php.net/manual/en/mysql.installation.php MySQLに対応したPHPをコンパイルする方法])',
-       'config-support-postgres' => '* $1は、MySQLの代替として人気があるオープンソースのデータベースシステムです ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQLに対応したPHPをコンパイルする方法])',
-       'config-support-sqlite' => '* $1は、良くサポートされている、軽量データベースシステムです。([http://www.php.net/manual/ja/pdo.installation.php SQLiteに対応したPHPをコンパイルする方法]、PDOを使用)',
-       'config-support-oracle' => '* $1は商業企業のデータベースです。([http://www.php.net/manual/en/oci8.installation.php OCI8サポートなPHPをコンパイルする方法])',
-       'config-header-mysql' => 'MySQL の設定',
-       'config-header-postgres' => 'PostgreSQL の設定',
-       'config-header-sqlite' => 'SQLite の設定',
-       'config-header-oracle' => 'Oracle の設定',
-       'config-invalid-db-type' => '無効なデータベースの種類',
-       'config-missing-db-name' => '「データベース名」を入力してください',
-       'config-missing-db-host' => '「データベースのホスト」を入力してください',
-       'config-missing-db-server-oracle' => '「データベース TNS」の値を入力してください',
-       'config-invalid-db-server-oracle' => '「$1」は無効なデータベース TNS です。
-「TNS 名」「Easy Connect」文字列のいずれかを使用してください ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle ネーミング メソッド])',
-       'config-invalid-db-name' => '「$1」は無効なデータベース名です。
-半角の英数字 (a-z、A-Z、0-9)、アンダースコア (_)、ハイフン (-) のみを使用してください。',
-       'config-invalid-db-prefix' => '「$1」は無効なデータベース接頭辞です。
-半角の英数字 (a-z、A-Z、0-9)、アンダースコア (_)、ハイフン (-) のみを使用してください。',
-       'config-connection-error' => '$1。
-
-以下のホスト名、ユーザー名、パスワードを確認してから再度試してください。',
-       'config-invalid-schema' => '「$1」は MediaWiki のスキーマとして無効です。
-半角の英数字 (a-z、A-Z、0-9)、アンダースコア (_) のみを使用してください。',
-       'config-postgres-old' => 'PostgreSQL $1 以降が必要です。ご使用中の PostgreSQL は $2 です。',
-       'config-sqlite-name-help' => 'あなたのウェキと同一性のある名前を選んでください。
-空白およびハイフンは使用しないでください。
-SQLiteのデータファイル名として使用されます。',
-       'config-sqlite-parent-unwritable-group' => 'データ ディレクトリ <code><nowiki>$1</nowiki></code> を作成できません。ウェブ サーバーは親ディレクトリ <code><nowiki>$2</nowiki></code> に書き込めませんでした。
-
-インストーラーは、ウェブ サーバーの実行ユーザーを特定しました。
-続行するには、ディレクトリ <code><nowiki>$3</nowiki></code> に書き込めるようにしてください。
-Unix または Linux であれば、以下を実行してください:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'データ ディレクトリ <code><nowiki>$1</nowiki></code> を作成できません。ウェブ サーバーは、親ディレクトリ <code><nowiki>$2</nowiki></code> に書き込めませんでした。
-
-インストーラーは、ウェブ サーバーの実行ユーザーを特定できませんでした。
-続行するには、ディレクトリ <code><nowiki>$3</nowiki></code> に、ウェブ サーバー (と、あらゆる人々!) がグローバルに書き込めるようにしてください。
-Unix または Linux では、以下を実行してください:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'データ ディレクトリ「$1」を作成する際にエラーが発生しました。
-場所を確認してから、再度試してください。',
-       'config-sqlite-dir-unwritable' => 'ディレクトリ「$1」に書き込めません。
-ウェブ サーバーが書き込めるようにパーミッションを変更してから、再度試してください。',
-       'config-sqlite-connection-error' => '$1。
-
-データ ディレクトリおよびデータベース名を確認してから、再度試してください。',
-       'config-sqlite-readonly' => 'ファイル <code>$1</code> に書き込めません。',
-       'config-sqlite-cant-create-db' => 'データベース ファイル <code>$1</code> を作成できませんでした。',
-       'config-sqlite-fts3-downgrade' => 'PHP が FTS3 に対応していないため、テーブルをダウングレードしています',
-       'config-can-upgrade' => 'このデータベースには MediaWiki テーブルがあります。
-これらのテーブルを MediaWiki $1 にアップグレードするには、「続行」をクリックしてください。',
-       'config-upgrade-done' => "更新は完了しました。
-
-[$1 ウィキを使い始める]ことができます。
-
-<code>LocalSettings.php</code> ファイルを再生成したい場合は、下のボタンを押してください。
-ウィキに問題がある場合を除き、再生成は'''推奨されません'''。",
-       'config-upgrade-done-no-regenerate' => 'アップグレードが完了しました。
-
-[$1 ウィキの使用を開始]することができます。',
-       'config-regenerate' => 'LocalSettings.php を再生成→',
-       'config-show-table-status' => '<code>SHOW TABLE STATUS</code> クエリが失敗しました!',
-       'config-unknown-collation' => "'''警告:''' データベースは認識されない照合を使用しています。",
-       'config-db-web-account' => 'ウェブアクセスのためのデータベースアカウント',
-       'config-db-web-help' => 'ウィキの通常の操作の際に、ウェブ サーバーがデータベース サーバーに接続できるように、ユーザー名とパスワードを指定してください。',
-       'config-db-web-account-same' => 'インストール作業と同じアカウントを使用する',
-       'config-db-web-create' => 'アカウントが存在しない場合は作成する',
-       'config-db-web-no-create-privs' => 'あなたがインストールのために定義したアカウントは、アカウント作成のための特権としては不充分です。
-あなたがここで指定したアカウントは既に存在している必要があります。',
-       'config-mysql-engine' => 'ストレージ エンジン:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-engine-help' => "'''InnoDB'''は、並行処理のサポートに優れているので、ほとんどの場合において最良の選択肢です。
-
-'''MyISAM'''は、利用者が1人の場合、あるいは読み込み専用でインストールする場合に、より処理が早くなるでしょう。
-ただし、MyISAMのデータベースは、InnoDBより高頻度で破損する傾向があります。",
-       'config-mysql-charset' => 'データベースの文字セット:',
-       'config-mysql-binary' => 'バイナリ',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "'''バイナリ モード'''では、MediaWiki は、UTF-8 テキストをデータベースのバイナリ フィールドに格納します。
-これは、MySQL の UTF-8 モードより効率的で、Unicode 文字の全範囲を利用できるようになります。
-
-'''UTF-8 モード'''では、MySQL は、データ内で使用している文字集合を知っているため、適切に表現や変換ができますが、
-[//ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 基本多言語面]の外にある文字を格納できません。",
-       'config-site-name' => 'ウィキ名:',
-       'config-site-name-help' => 'この事象はブラウザーのタイトルバーと他のさまざまな場所に現れる。',
-       'config-site-name-blank' => 'サイト名を入力してください。',
-       'config-project-namespace' => 'プロジェクト名前空間:',
-       'config-ns-generic' => 'プロジェクト',
-       'config-ns-site-name' => 'ウィキ名と同じ: $1',
-       'config-ns-other' => 'その他 (指定してください)',
-       'config-ns-other-default' => 'マイウィキ',
-       'config-project-namespace-help' => "ウィキペディアの例に従い、多くのウィキは、コンテンツのページとは分離したポリシーページを「'''プロジェクトの名前空間'''」に持っています。
-この名前空間内のページのページ名はすべて特定の接頭辞で始まります。それをここで指定できます。
-通常、この接頭辞はウィキ名に基づきますが、「#」や「:」のような区切り文字を含めることはできません。",
-       'config-ns-invalid' => '指定した名前空間「<nowiki>$1</nowiki>」は無効です。
-別のプロジェクト名前空間を指定してください。',
-       'config-admin-box' => '管理アカウント',
-       'config-admin-name' => '名前:',
-       'config-admin-password' => 'パスワード:',
-       'config-admin-password-confirm' => 'パスワードの再入力:',
-       'config-admin-help' => '希望するユーザー名をここに入力してください (例:「Joe Bloggs」)。
-この名前でこのウィキにログインすることになります。',
-       'config-admin-name-blank' => '管理者のユーザー名を入力してください。',
-       'config-admin-name-invalid' => '指定したユーザー名「<nowiki>$1</nowiki>」は無効です。
-別のユーザー名を指定してください。',
-       'config-admin-password-blank' => '管理者アカウントのパスワードを入力してください。',
-       'config-admin-password-same' => 'ユーザー名と同じパスワードは使用できません。',
-       'config-admin-password-mismatch' => '入力された2つのパスワードが一致しません。',
-       'config-admin-email' => 'メールアドレス:',
-       'config-admin-email-help' => 'メールアドレスを入力してください。他の利用者からのメールの受け取り、パスワードのリセット、ウォッチリストに登録したページの更新通知に使用します。空欄のままにすることもできます。',
-       'config-admin-error-user' => '「<nowiki>$1</nowiki>」という名前の管理者を作成する際に内部エラーが発生しました。',
-       'config-admin-error-password' => '管理者「<nowiki>$1</nowiki>」のパスワードを設定する際に内部エラーが発生しました: <pre>$2</pre>',
-       'config-admin-error-bademail' => '無効なメールアドレスを入力しました。',
-       'config-subscribe' => '[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce リリース告知のメーリングリスト]を購読する。',
-       'config-subscribe-help' => 'これは、リリースの告知 (重要なセキュリティに関する案内を含む) に使用される、流量が少ないメーリングリストです。
-このメーリングリストを購読して、新しいバージョンが出た場合にMediaWikiを更新してください。',
-       'config-almost-done' => 'これでほぼ終わりました!
-残りの設定を飛ばして、ウィキを今すぐインストールできます。',
-       'config-optional-continue' => '私にもっと質問してください。',
-       'config-optional-skip' => 'もう飽きてしまったので、とにかくウィキをインストールしてください。',
-       'config-profile' => '利用者権限のプロファイル:',
-       'config-profile-wiki' => '公開ウィキ',
-       'config-profile-no-anon' => 'アカウントの作成が必要',
-       'config-profile-fishbowl' => '承認された編集者のみ',
-       'config-profile-private' => '非公開ウィキ',
-       'config-profile-help' => "ウィキは、できるだけ多くの人が編集できるようにすると最も優れた働きをします。
-MediaWikiでは、最近の更新を確認しやすく、神経質な、または悪意を持った利用者からの損害を簡単に差し戻せます。
-
-しかし一方で、MediaWikiは、さらにさまざまな形態での利用も優れていると言われています。また、時には、すべての人にウィキ手法の利点を説得させるのは容易ではないかもしれません。
-そこで、選択肢があります。
-
-「'''{{int:config-profile-wiki}}'''」モデルでは、ログインしなくても、誰でも編集できます。
-「'''{{int:config-profile-no-anon}}'''」なウィキでは、各編集に対してより強い説明責任を付与しますが、気軽な投稿を阻害するかもしれません。
-
-「'''{{int:config-profile-fishbowl}}'''」シナリオでは、承認された利用者のみが編集でき、一般の人はページ (とその履歴) を閲覧できます。
-「'''{{int:config-profile-private}}'''」では、承認された利用者のみがページを閲覧でき、そのグループが編集できます。
-
-より複雑な利用者権限の設定は、インストール後に設定できます。詳細は[//www.mediawiki.org/wiki/Manual:User_rights 関連するマニュアル]をご覧ください。",
-       'config-license' => '著作権とライセンス:',
-       'config-license-none' => 'ライセンスのフッターを付けない',
-       'config-license-cc-by-sa' => 'クリエイティブ・コモンズ 表示-継承',
-       'config-license-cc-by' => 'クリエイティブ・コモンズ 表示',
-       'config-license-cc-by-nc-sa' => 'クリエイティブ・コモンズ 表示-非営利-継承',
-       'config-license-gfdl' => 'GNU フリー文書利用許諾契約書 1.3 以降',
-       'config-license-pd' => 'パブリック・ドメイン',
-       'config-license-cc-choose' => 'その他のクリエイティブ・コモンズ・ライセンスを選択する',
-       'config-license-help' => "多くの公開ウィキでは、すべての寄稿物が[http://freedomdefined.org/Definition フリーライセンス]のもとに置かれています。
-こうすることにより、コミュニティによる共有の感覚が生まれ、長期的な寄稿が促されます。
-私的ウィキや企業のウィキでは、通常、フリーライセンスにする必要はありません。
-
-ウィキペディアにあるテキストをあなたのウィキで利用し、逆にあなたのウィキにあるテキストをウィキペディアに複製することを許可したい場合には、'''クリエイティブ・コモンズ 表示-継承'''を選択するべきです。
-
-ウィキペディアは以前、GNUフリー文書利用許諾契約書(GFDL)を使用していました。
-GFDLは有効なライセンスですが、内容を理解するのは困難です。
-また、GFDLのもとに置かれているコンテンツの再利用も困難です。",
-       'config-email-settings' => 'メールの設定',
-       'config-enable-email' => 'メール送信を有効にする',
-       'config-enable-email-help' => 'メールを使用したい場合は、[http://www.php.net/manual/en/mail.configuration.php PHP のメール設定]が正しく設定されている必要があります。
-メールの機能を使用しない場合は、ここで無効にすることができます。',
-       'config-email-user' => '利用者間のメールを有効にする',
-       'config-email-user-help' => '設定で有効になっている場合、すべてのユーザーがお互いにメールのやりとりを行うことを許可する。',
-       'config-email-usertalk' => 'ユーザーのトークページでの通知を有効にする',
-       'config-email-usertalk-help' => '設定で有効にしている場合は、ユーザーのトークページの変更の通知を受けることをユーザーに許可する。',
-       'config-email-watchlist' => 'ウォッチリストの通知を有効にする',
-       'config-email-watchlist-help' => '利用者が設定で有効にしている場合、閲覧されたページに関する通知を受け取ることを許可する。',
-       'config-email-auth' => 'メールの認証を有効にする',
-       'config-email-auth-help' => "この選択肢を有効にすると、利用者がメールアドレスを設定あるいは変更したときに送信されるリンクにより、そのアドレスを確認しなければならなくなります。
-認証済みのアドレスだけが、他の利用者からのメールや、変更通知のメールを受け取ることができます。
-公開ウィキでは、メール機能による潜在的な不正利用の防止のため、この選択肢を設定することが'''推奨'''されます。",
-       'config-email-sender' => '返信先メールアドレス:',
-       'config-email-sender-help' => '送信メールで返信先として使用するメールアドレスを入力してください。
-このアドレスは、宛先不明の場合の通知の宛先になります。
-多くのメールサーバーでは、少なくともドメイン名部分は有効である必要があります。',
-       'config-upload-settings' => '画像およびファイルのアップロード',
-       'config-upload-enable' => 'ファイルのアップロードを有効にする',
-       'config-upload-help' => 'ファイルのアップロードは、あなたのサーバーをセキュリティ上の潜在的な危険に晒します。
-この詳細は、マニュアルの [//www.mediawiki.org/wiki/Manual:Security security section] をお読みください。
-
-ファイルのアップロードを有効にするには、MediaWiki のルート ディレクトリ内の <code>images</code> サブ ディレクトリのモードを変更します。これにより、ウェブ サーバーがそこに書き込めるようになります。
-そして、このオプションを有効にしてください。',
-       'config-upload-deleted' => '削除されたファイルのためのディレクトリ:',
-       'config-upload-deleted-help' => '削除されるファイルを保存するためのディレクトリを選択してください。
-これがウェブからアクセスできないことが理想です。',
-       'config-logo' => 'ロゴ のURL:',
-       'config-logo-help' => 'MediaWiki の既定の外装では、サイドバー上部に135x160ピクセルのロゴ用の余白があります。
-適切なサイズの画像をアップロードして、その URL をここに入力してください。
-
-ロゴが相対パスの場合は、<code>$wgStylePath</code> や <code>$wgScriptPath</code> を使用できます。
-
-ロゴが不要の場合は、この欄を空白のままにしてください。',
-       'config-instantcommons' => 'Instant Commons 機能を有効にする',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] は、[//commons.wikimedia.org/ ウィキメディア・コモンズ]のサイトにある画像、音声、その他のメディアをウィキ上で利用できるようにする機能です。
-これを使用するには、MediaWiki がインターネットに接続できる必要があります。
-
-ウィキメディア・コモンズ以外のウィキを同様に設定する手順など、この機能に関する詳細な情報は、[//mediawiki.org/wiki/Manual:$wgForeignFileRepos マニュアル]をご覧ください。',
-       'config-cc-error' => 'クリエイティブ・コモンズ・ライセンスの選択器から結果が得られませんでした。
-ライセンスの名前を手動で入力してください。',
-       'config-cc-again' => 'もう一度選択してください...',
-       'config-cc-not-chosen' => '希望するクリエイティブ・コモンズのライセンスを選択して、「続行」をクリックしてください。',
-       'config-advanced-settings' => '高度な設定',
-       'config-cache-options' => 'オブジェクトのキャッシュの設定:',
-       'config-cache-help' => 'オブジェクトのキャッシュを使用すると、頻繁に使用するデータをキャッシュするため MediaWiki の動作速度を改善できます。
-中〜大規模サイトではこれを有効にすることを強くお勧めします。小規模サイトでも同様に効果があります。',
-       'config-cache-none' => 'キャッシングしない(機能は取り払われます、しかもより大きなウィキサイト上でスピードの問題が発生します)',
-       'config-cache-accel' => 'PHP オブジェクト キャッシュ (APC、XCache、WinCache のいずれか)',
-       'config-cache-memcached' => 'memcached を使用 (追加の設定が必要)',
-       'config-memcached-servers' => 'memcached サーバー:',
-       'config-memcached-help' => 'Memcachedを使用するIPアドレスの一覧。
-カンマ区切りで、利用する特定のポートの指定が必要です。例:
-127.0.0.1:11211
-192.168.1.25:1234',
-       'config-memcache-noport' => 'Memcached サーバー $1 で使用するポート番号を指定していません。
-ポート番号が分からない場合、既定値は 11211 です。',
-       'config-memcache-badport' => 'Memcached のポート番号は $1 から $2 の範囲にしてください。',
-       'config-extensions' => '拡張機能',
-       'config-extensions-help' => '<code>./extensions</code>ディレクトリ内で、上記リストの拡張機能が発見されました。
-
-これらは更に多くの設定を要求するかもしれませんが、今これらを有効にすることができます。',
-       'config-install-alreadydone' => "'''警告:''' 既にMediaWikiがインストール済みで、再びインストールし直そうとしています。
-次のページへ進んでください。",
-       'config-install-begin' => '「{{int:config-continue}}」を押すと、MediaWiki のインストールを開始できます。
-変更したい設定がある場合は、「{{int:config-back}}」を押してください。',
-       'config-install-step-done' => '実行',
-       'config-install-step-failed' => '失敗した',
-       'config-install-extensions' => '拡張機能を含む',
-       'config-install-database' => 'データベースの構築',
-       'config-install-schema' => 'スキーマの作成',
-       'config-install-pg-schema-not-exist' => 'PostgreSQL スキーマがありません。',
-       'config-install-pg-schema-failed' => 'テーブルの作成に失敗しました。
-利用者「$1」がスキーマ「$2」に書き込めるようにしてください。',
-       'config-install-pg-commit' => '変更を送信',
-       'config-pg-no-plpgsql' => 'データベース $1 内に PL/pgSQL 言語をインストールする必要があります。',
-       'config-install-user' => 'データベースユーザーの作成',
-       'config-install-user-alreadyexists' => 'ユーザー「$1」は既に存在します',
-       'config-install-user-create-failed' => 'ユーザー「$1」の作成に失敗しました: $2',
-       'config-install-user-grant-failed' => 'ユーザー「$1」に許可を与えることに失敗しました: $2',
-       'config-install-user-missing' => '指定したユーザー「$1」は存在しません。',
-       'config-install-user-missing-create' => '指定したユーザー「$1」は存在しません。
-アカウントを作成する場合は、下の「アカウント作成」をクリックしてください。',
-       'config-install-tables' => 'テーブルの作成',
-       '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-stats' => '統計情報の初期化',
-       'config-install-keys' => '秘密鍵の生成',
-       'config-install-sysop' => '管理者のアカウントの作成',
-       'config-install-mainpage' => 'メインページを既定の内容で作成',
-       'config-install-mainpage-failed' => 'メインページを挿入できませんでした: $1',
-       'config-install-done' => "'''おめでとうございます!'''
-MediaWikiのインストールに成功しました。
-
-<code>LocalSettings.php</code>ファイルが生成されました。
-このファイルはすべての設定を含んでいます。
-
-これをダウンロードして、ウィキをインストールした基準ディレクトリ (index.phpと同じディレクトリ) に設置する必要があります。ダウンロードは自動的に開始されるはずです。
-
-ダウンロードが開始されていない場合、またはダウンロードをキャンセルした場合は、下記のリンクをクリックしてダウンロードを再開できます:
-
-$3
-
-'''注意:''' この生成された設定ファイルをダウンロードせずにインストールを終了すると、このファイルは利用できなくなります。
-
-上記の作業が完了すると、'''[$2 ウィキに入る]'''ことができます。",
-       'config-download-localsettings' => '<code>LocalSettings.php</code> をダウンロード',
-       'config-help' => 'ヘルプ',
-       'config-nofile' => 'ファイル「$1」が見つかりませんでした。削除された可能性があります。',
-       'mainpagetext' => "'''MediaWiki のインストールに成功しました。'''",
-       'mainpagedocfooter' => 'ウィキソフトウェアの使い方に関する情報は[//meta.wikimedia.org/wiki/Help:Contents 利用者案内]を参照してください。
-
-== はじめましょう ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings/ja 設定の一覧]
-* [//www.mediawiki.org/wiki/Manual:FAQ/ja MediaWiki よくある質問と回答]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki リリース情報メーリングリスト]
-* [//www.mediawiki.org/wiki/Localisation/ja MediaWiki のあなたの言語へのローカライズ]',
-);
-
-/** Jamaican Creole English (Patois)
- * @author Yocahuna
- */
-$messages['jam'] = array(
-       'mainpagetext' => "'''MediaWiki don instaal soksesful.'''",
-       'mainpagedocfooter' => "Kansolt di [//meta.wikimedia.org/wiki/Help:Contents User's Guide] fi infamieshan ou fi yuuz di wiki saafwier.
-
-== Taatop ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Jutish (jysk)
- * @author Huslåke
- */
-$messages['jut'] = array(
-       'mainpagetext' => "'''MediaWiki er nu installeret.'''",
-       'mainpagedocfooter' => "Se vores engelskspråĝede [//meta.wikimedia.org/wiki/MediaWiki_localisation dokumentåsje tilpasnenge'm åf æ brugergrænseflade] og [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide æ brugervejlednenge] før åplysnenger åpsætnenge'm og anvendelse.", # Fuzzy
-);
-
-/** Javanese (Basa Jawa)
- */
-$messages['jv'] = array(
-       'mainpagetext' => "'''Prangkat empuk wiki wis suksès dipasang.'''",
-       'mainpagedocfooter' => "Mangga maca [//meta.wikimedia.org/wiki/Help:Contents User's Guide] kanggo katrangan luwih langkung prakara panggunan prangkat empuk wiki
-== Miwiti panggunan  ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Daftar pangaturan préférènsi]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]", # Fuzzy
-);
-
-/** Georgian (ქართული)
- * @author David1010
- */
-$messages['ka'] = array(
-       'config-information' => 'ინფორმაცია',
-       'config-your-language' => 'თქვენი ენა:',
-       'config-wiki-language' => 'ვიკის ენა:',
-       'config-back' => '← უკან',
-       'config-continue' => 'გაგრძელება →',
-       'config-page-language' => 'ენა',
-       'config-page-welcome' => 'კეთილი იყოს თქვენი მობრძანება მედიავიკიში!',
-       'config-page-dbconnect' => 'მონაცემთა ბაზასთან დაკავშირება',
-       'config-page-dbsettings' => 'მონაცემთა ბაზის კონფიგურაცია',
-       'config-page-name' => 'სახელი',
-       'config-page-options' => 'პარამეტრები',
-       'config-page-install' => 'ინსტალაცია',
-       'config-page-complete' => 'დასრულებულია!',
-       'config-page-restart' => 'ინსტალაციის თავიდან დაწყება',
-       'config-page-readme' => 'წამიკითხე',
-       'config-page-copying' => 'ლიცენზია',
-       'config-page-upgradedoc' => 'განახლება',
-       'config-restart' => 'დიახ, თავიდან დაიწყეთ',
-       'config-sidebar' => '* [//www.mediawiki.org მედიავიკის ვებ-გვერდი]
-* [//www.mediawiki.org/wiki/Help:Contents/ka მომხმარებლების დახმარება]
-* [//www.mediawiki.org/wiki/Manual:Contents/ka ადმინისტრატორების დახმარება]
-* [//www.mediawiki.org/wiki/Manual:FAQ/ka FAQ]
-----
-* <doclink href=Readme>წამიკითხე</doclink>
-* <doclink href=ReleaseNotes>ინფორმაცია გამოშვებაზე</doclink>
-* <doclink href=Copying>ლიცენზია</doclink>
-* <doclink href=UpgradeDoc>განახლება</doclink>',
-       'config-db-type' => 'მონაცემთა ბაზის ტიპი:',
-       'config-db-host-oracle' => 'მონაცემთა ბაზის TNS:',
-       'config-db-name' => 'მონაცემთა ბაზის სახელი:',
-       'config-db-name-oracle' => 'მონაცემთა ბაზის სქემა:',
-       'config-db-username' => 'მონაცემთა ბაზის მომხმარებლის სახელი:',
-       'config-db-password' => 'მონაცემთა ბაზის პაროლი:',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 ორობითი',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-db-port' => 'მონაცემთა ბაზის პორტი:',
-       'config-db-schema' => 'მედიავიკის სქემა:',
-       'config-header-mysql' => 'MySQL-ის პარამეტრები',
-       'config-header-postgres' => 'PostgreSQL-ის პარამეტრები',
-       'config-header-sqlite' => 'SQLite-ის პარამეტრები',
-       'config-header-oracle' => 'Oracle-ის პარამეტრები',
-       'config-invalid-db-type' => 'არასწორი მონაცემთა ბაზის ტიპი',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-binary' => 'ორობითი',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'ვიკის სახელი:',
-       'config-site-name-blank' => 'შეიყვანეთ ვებ-გვერდის სახელი.',
-       'config-project-namespace' => 'პროექტის სახელთა სივრცე:',
-       'config-ns-generic' => 'პროექტი',
-       'config-ns-other' => 'სხვა (მიუთითეთ)',
-       'config-ns-other-default' => 'ჩემი ვიკი',
-       'config-admin-box' => 'ადმინისტრატორის ანგარიში',
-       'config-admin-name' => 'თქვენი სახელი:',
-       'config-admin-password' => 'პაროლი:',
-       'config-admin-password-confirm' => 'პაროლი ხელმეორედ:',
-       'config-admin-name-blank' => 'შეიყვანეთ ადმინისტრატორის მომხმარებლის სახელი.',
-       'config-admin-email' => 'ელ. ფოსტის მისამართი:',
-       'config-profile' => 'მომხმარებელთა უფლებების პროფილი:',
-       'config-profile-wiki' => 'ღია ვიკი',
-       'config-profile-private' => 'დახურული ვიკი',
-       'config-license' => 'საავტორო უფლები და ლიცენზია:',
-       'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
-       'config-license-cc-by' => 'Creative Commons Attribution',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
-       'config-license-cc-0' => 'Creative Commons Zero (საზოგადოებრივი საკუთრება)',
-       'config-license-gfdl' => 'GNU Free Documentation License 1.3 ან უფრო გვიანი',
-       'config-license-pd' => 'საზოგადოებრივი საკუთრება',
-       'config-license-cc-choose' => 'აირჩიეთ Creative Commons-ის ლიცენზიიდან ერთ-ერთი',
-       'config-email-settings' => 'ელ. ფოსტის პარამეტრები',
-       'config-upload-settings' => 'სურათებისა და ფაილების ატვირთვა',
-       'config-upload-enable' => 'ფაილების ატვირთვის ჩართვა',
-       'config-logo' => 'ლოგოს URL:',
-       'config-cc-again' => 'აირჩიეთ კიდევ ერთხელ...',
-       'config-extensions' => 'გაფართოებები',
-       'config-install-step-done' => 'შესრულდა',
-       'config-install-step-failed' => 'ვერ მოხერხდა',
-       'config-install-tables' => 'ცხრილების შექმნა',
-       'config-install-interwiki-list' => 'ვერ მოიძებნა ფაილი <code>interwiki.list</code>.',
-       'config-download-localsettings' => '<code>LocalSettings.php</code>-ის გადმოწერა',
-       'config-help' => 'დახმარება',
-       'mainpagetext' => "'''მედიავიკი წარმატებით ჩაიტვირთა.'''",
-       'mainpagedocfooter' => 'ვიკი პროგრამის გამოყენების ინფორმაციისთვის იხილეთ [//meta.wikimedia.org/wiki/Help:Contents მომხმარებლის მეგზური].
-
-== დაწყება ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings კონფიგურაციის მაჩვენებლების სია]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce მედიავიკის გამოცემის დაგზავნის სია]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources მედიავიკის ლოკალიზება თქვენ ენაზე]',
-);
-
-/** Kara-Kalpak (Qaraqalpaqsha)
- */
-$messages['kaa'] = array(
-       'mainpagetext' => "'''MediaWiki tabıslı ornatıldı.'''",
-       'mainpagedocfooter' => "Wiki bag'darlamasın qollanıw haqqındag'i mag'lıwmat usın [//meta.wikimedia.org/wiki/Help:Contents Paydalanıwshılar qollanbasınan] ken'es alın'.
-
-== Baslaw ushın ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfiguratsiya sazlaw dizimi]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWikidin' Ko'p Soralatug'ın Sorawları]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki haqqında xat tarqatıw dizimi]", # Fuzzy
-);
-
-/** Адыгэбзэ (Адыгэбзэ)
- * @author Bogups
- */
-$messages['kbd-cyrl'] = array(
-       'mainpagetext' => "'''«MediaWiki» узыншу хэгъува.'''",
-       'mainpagedocfooter' => 'Мы виким и лэжьыгъэ хъыбархэр здэбгъуэтыфынур [//meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 дэӀэпыкъуэгъу тхылъым].
-
-
-== Къыщхьэпэгъуэ хъуфынухэр ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Зэгъэзэхуэгъуэ гуэрэхэм я тхылъ];
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-м упщӀэ нахъыбу ятхэмрэ я жэуапхэмрэ];
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-м и версиэ щӀэуэ къэжахэм я къэӀохугъуэ].', # Fuzzy
-);
-
-/** Khowar (کھوار)
- * @author Rachitrali
- */
-$messages['khw'] = array(
-       'mainpagetext' => "'''میڈیاوکیو کامیابیو سورا چالو کورونو بیتی شیر۔.'''",
-);
-
-/** Kirmanjki (Kırmancki)
- * @author Mirzali
- */
-$messages['kiu'] = array(
-       'mainpagetext' => "'''MediaWiki fist ra ser, vıraziya.'''",
-       'mainpagedocfooter' => "Serba melumatê gurenaena ''wiki software''i [//meta.wikimedia.org/wiki/Help:Contents İdarê karberi] de mıracaet ke.
-
-== Gamê verêni ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista ayarunê vırastene]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki de ÇZP]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki ra lista serbest-daena postey]", # Fuzzy
-);
-
-/** Kazakh (Arabic script) (قازاقشا (تٴوتە)‏)
- */
-$messages['kk-arab'] = array(
-       'mainpagetext' => "'''مەدىياۋىيكىي بۋماسى ٴساتتى ورناتىلدى.'''",
-       'mainpagedocfooter' => 'ۋىيكىي باعدارلامالىق جاساقتاماسىن قالاي قولداناتىن اقپاراتى ٴۇشىن [//meta.wikimedia.org/wiki/Help:Contents پايدالانۋشىلىق نۇسقاۋلارىنان] كەڭەس الىڭىز.
-
-== باستاۋ ٴۇشىن ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings باپتالىم قالاۋلارىنىڭ ٴتىزىمى]
-* [//www.mediawiki.org/wiki/Manual:FAQ مەدىياۋىيكىيدىڭ جىيى قويىلعان ساۋالدارى]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce مەدىياۋىيكىي شىعۋ تۋرالى حات تاراتۋ ٴتىزىمى]', # Fuzzy
-);
-
-/** Kazakh (Cyrillic script) (қазақша (кирил)‎)
- */
-$messages['kk-cyrl'] = array(
-       'mainpagetext' => "'''МедиаУики бумасы сәтті орнатылды.'''",
-       'mainpagedocfooter' => 'Уики бағдарламалық жасақтамасын қалай қолданатын ақпараты үшін [//meta.wikimedia.org/wiki/Help:Contents Пайдаланушылық нұсқауларынан] кеңес алыңыз.
-
-== Бастау үшін ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Бапталым қалауларының тізімі]
-* [//www.mediawiki.org/wiki/Manual:FAQ МедиаУикидің Жиы Қойылған Сауалдары]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce МедиаУики шығу туралы хат тарату тізімі]', # Fuzzy
-);
-
-/** Kazakh (Latin script) (qazaqşa (latın)‎)
- */
-$messages['kk-latn'] = array(
-       'mainpagetext' => "'''MedïaWïkï bwması sätti ornatıldı.'''",
-       'mainpagedocfooter' => 'Wïkï bağdarlamalıq jasaqtamasın qalaý qoldanatın aqparatı üşin [//meta.wikimedia.org/wiki/Help:Contents Paýdalanwşılıq nusqawlarınan] keñes alıñız.
-
-== Bastaw üşin ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Baptalım qalawlarınıñ tizimi]
-* [//www.mediawiki.org/wiki/Manual:FAQ MedïaWïkïdiñ Jïı Qoýılğan Sawaldarı]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MedïaWïkï şığw twralı xat taratw tizimi]', # Fuzzy
-);
-
-/** Khmer (ភាសាខ្មែរ)
- * @author Thearith
- * @author គីមស៊្រុន
- */
-$messages['km'] = array(
-       'config-your-language' => 'ភាសារបស់អ្នក៖',
-       'config-your-language-help' => 'ជ្រើសយកភាសាដើម្បីប្រើក្នុងពេលតំលើង។',
-       'config-wiki-language' => 'ភាសាវិគី៖',
-       'config-wiki-language-help' => 'ជ្រើសរើសភាសាដែលវិគីនេះប្រើជាចំបង។',
-       'config-back' => '← ត្រលប់ក្រោយ',
-       'config-continue' => 'បន្ត →',
-       'config-page-language' => 'ភាសា',
-       'config-page-welcome' => 'មេឌាវិគីសូមស្វាគមន៍!',
-       'config-page-dbconnect' => 'ភ្ជាប់ទៅមូលដ្ឋានទិន្នន័យ',
-       'config-page-name' => 'ឈ្មោះ',
-       'config-page-options' => 'ជំរើស',
-       'config-page-install' => 'តំលើង',
-       'config-page-complete' => 'បញ្ចប់!',
-       'config-page-restart' => 'តំលើងឡើងវិញ',
-       'config-help' => 'ជំនួយ',
-       'mainpagetext' => "'''មេឌាវិគីត្រូវបានដំឡើងសំរេចហើយ​។'''",
-       'mainpagedocfooter' => 'សូមពិនិត្យមើល [//meta.wikimedia.org/wiki/ជំនួយ​៖ ខ្លឹមសារ​ណែនាំ​ប្រើប្រាស់]សម្រាប់​ព័ត៌មាន​​បន្ថែមចំពោះ​ការប្រើប្រាស់ ផ្នែកទន់វិគី​។
-
-== ចាប់ផ្ដើមជាមួយមេឌាវិគី ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings បញ្ជីកំណត់ទម្រង់]
-* [//www.mediawiki.org/wiki/Manual:FAQ/km សំណួរញឹកញាប់​មេឌាវិគី]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce បញ្ជី​ពិភាក្សា​ការផ្សព្វផ្សាយ​របស់​មេឌាវិគី]', # Fuzzy
-);
-
-/** Kannada (ಕನ್ನಡ)
- */
-$messages['kn'] = array(
-       'mainpagetext' => "'''ವಿಕಿ ತಂತ್ರಾಂಶವನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಅನುಸ್ಥಾಪಿಸಲಾಯಿತು.'''",
-       'mainpagedocfooter' => 'ವಿಕಿ ತಂತ್ರಾಂಶವನ್ನು ಬಳಸುವ ಬಗ್ಗೆ ಮಾಹಿತಿಗೆ [//meta.wikimedia.org/wiki/Help:Contents ಬಳಕೆದಾರರಿಗೆ ನಿರ್ದೇಶನ ಪುಟ] ನೋಡಿ.
-
-== ಪ್ರಾರಂಭಿಸುವುದು ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ ಮೀಡಿಯವಿಕಿ FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]', # Fuzzy
-);
-
-/** Korean (한국어)
- * @author Kwj2772
- * @author 아라
- */
-$messages['ko'] = array(
-       'config-desc' => '미디어위키 설치 프로그램',
-       'config-title' => 'MediaWiki $1 설치',
-       'config-information' => '정보',
-       'config-localsettings-upgrade' => '<code>LocalSettings.php</code> 파일을 감지했습니다.
-이 설치를 업그레이드하려면 아래 상자에 <code>$wgUpgradeKey</code>의 값을 입력하세요.
-<code>LocalSettings.php</code>에 찾을 수 있습니다.',
-       'config-localsettings-cli-upgrade' => '<code>LocalSettings.php</code> 파일을 감지했습니다.
-이 설치를 업그레이드하려면 <code>update.php</code>를 대신 실행하세요',
-       'config-localsettings-key' => '업그레이드 키:',
-       'config-localsettings-badkey' => '제공한 키가 잘못되었습니다.',
-       'config-upgrade-key-missing' => '미디어위키의 기존 설치가 감지되었습니다.
-이 설치를 업그레이드하려면 <code>LocalSettings.php</code>의 아래에 다음 줄을 넣으세요:
-
-$1',
-       'config-localsettings-incomplete' => '기존 <code>LocalSettings.php</code>가 완전하지 않은 것 같습니다.
-$1 변수가 설정되어 있지 않습니다.
-이 변수가 설정되도록 <code>LocalSettings.php</code>를 바꾸고 "{{int:Config-continue}}"을 클릭하세요.',
-       'config-localsettings-connection-error' => '<code>LocalSettings.php</code> 또는 <code>AdminSettings.php</code>에 지정한 설정을 사용하여 데이터베이스에 연결할 때 오류가 발생했습니다. 이러한 설정을 수정하고 다시 시도하세요.
-
-$1',
-       'config-session-error' => '세션 시작 오류: $1',
-       'config-session-expired' => '세션 데이터가 만료된 것 같습니다.
-세션은 $1의 작동 시간 동안 구성됩니다.
-php.ini에 있는 <code>session.gc_maxlifetime</code>에서 설정해 이를 증가시킬 수 있습니다.
-설치 과정을 다시 시작합니다.',
-       'config-no-session' => '세션 데이터가 없어졌습니다!
-php.ini를 확인하고 <code>session.save_path</code>가 적절한 디렉토리로 설정되어 있는지 확인하세요.',
-       'config-your-language' => '설치 언어:',
-       'config-your-language-help' => '설치 과정에서 사용할 언어를 선택하세요.',
-       'config-wiki-language' => '위키 언어:',
-       'config-wiki-language-help' => '위키에 주로 작성될 언어를 선택하세요.',
-       'config-back' => '← 뒤로',
-       'config-continue' => '계속 →',
-       'config-page-language' => '언어',
-       'config-page-welcome' => '미디어위키에 오신 것을 환영합니다!',
-       'config-page-dbconnect' => '데이터베이스에 연결',
-       'config-page-upgrade' => '기존 설치 업그레이드',
-       'config-page-dbsettings' => '데이터베이스 설정',
-       'config-page-name' => '이름',
-       'config-page-options' => '설정',
-       'config-page-install' => '설치',
-       'config-page-complete' => '완료!',
-       'config-page-restart' => '설치 다시 시작',
-       'config-page-readme' => '읽어보기',
-       'config-page-releasenotes' => '배포 노트',
-       'config-page-copying' => '전문',
-       'config-page-upgradedoc' => '업그레이드하기',
-       'config-page-existingwiki' => '기존 위키',
-       'config-help-restart' => '입력한 모든 저장된 데이터를 지우고 설치 과정을 다시 시작하겠습니까?',
-       'config-restart' => '예, 다시 시작합니다',
-       'config-welcome' => '=== 사용 환경 검사 ===
-기본 검사는 지금 이 환경이 미디어위키 설치에 적합한지 수행합니다.
-설치를 완료하는 방법에 대한 지원을 찾는다면 이 정보를 포함해야 하는 것을 기억하세요.',
-       'config-copyright' => "=== 저작권 및 이용 약관 ===
-
-$1
-
-이 프로그램은 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 프로그램을 재배포하거나 수정할 수 있습니다.
-
-이 프로그램이 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''.
-자세한 내용은 GNU 일반 공중 사용 허가서를 참고하십시오.
-
-당신은 이 프로그램을 통해 <doclink href=Copying>GNU 일반 공중 사용 허가서 전문</doclink>을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [http://www.gnu.org/copyleft/gpl.html 온라인으로 읽어보시기] 바랍니다.",
-       'config-sidebar' => '* [//www.mediawiki.org 미디어위키 홈]
-* [//www.mediawiki.org/wiki/Help:Contents 사용자 가이드]
-* [//www.mediawiki.org/wiki/Manual:Contents 관리자 가이드]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]
-----
-* <doclink href=Readme>읽어보기</doclink>
-* <doclink href=ReleaseNotes>배포 노트</doclink>
-* <doclink href=Copying>전문</doclink>
-* <doclink href=UpgradeDoc>업그레이드하기</doclink>',
-       'config-env-good' => '환경이 확인되었습니다.
-미디어위키를 설치할 수 있습니다.',
-       'config-env-bad' => '환경이 확인되었습니다.
-미디어위키를 설치할 수 없습니다.',
-       'config-env-php' => 'PHP $1(이)가 설치되었습니다.',
-       'config-env-php-toolow' => 'PHP $1(이)가 설치되었습니다.
-하지만 미디어위키는 PHP $2 이상이 필요합니다.',
-       'config-unicode-using-utf8' => '유니코드 정규화에 Brion Vibber의 utf8_normalize.so를 사용합니다.',
-       'config-unicode-using-intl' => '유니코드 정규화에 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용합니다.',
-       'config-unicode-pure-php-warning' => "'''경고''': 유니코드 정규화를 처리할 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용할 수 없기 때문에 느린 순수한 PHP 구현을 대신 사용합니다.
-높은 트래픽 사이트에서 실행하려면 [//www.mediawiki.org/wiki/Unicode_normalization_considerations 유니코드 정규화]를 읽어보시기 바랍니다.",
-       'config-unicode-update-warning' => "'''경고''': 유니코드 정규화 래퍼의 설치된 버전은 [http://site.icu-project.org/ ICU 프로젝트]의 라이브러리의 이전 버전을 사용합니다.
-만약 유니코드를 사용하는 것에 대해 우려가 된다면 [//www.mediawiki.org/wiki/Unicode_normalization_considerations 업그레이드]해야합니다.",
-       'config-no-db' => '적절한 데이터베이스 드라이버를 찾을 수 없습니다! PHP에 데이터베이스 드라이버를 설치해야 합니다.
-다음 데이터베이스 유형을 지원합니다 : $1.
-
-공유하는 호스팅을 사용하고 있다면 적절한 데이터베이스 드라이버를 설치하도록 호스팅 제공 업체에 문의하세요.
-PHP를 직접 컴파일했다면 예를 들어 <code>./configure --with-mysql</code>을 사용하여 데이터베이스 클라이언트를 활성화하도록 다시 설정하세요.
-데비안이나 우분트 패키지에서 PHP를 설치했다면 php-mysql 모듈도 설치해야 합니다.',
-       'config-outdated-sqlite' => "'''경고''': SQLite 필요한 최소 $2 버전보다 낮은 $1(이)가 있습니다. SQLite는 사용할 수 없습니다.",
-       'config-no-fts3' => "'''경고''': SQLite는 [//sqlite.org/fts3.html FTS3 모듈] 없이 컴파일되어, 검색 기능은 백엔드에 사용할 수 없습니다.",
-       'config-register-globals' => "'''경고: PHP의 <code>[http://php.net/register_globals register_globals]</code> 옵션이 활성화되어 있습니다.'''
-'''가능하면 이를 비활성화하십시오.'''
-미디어위키는 작동하지만 서버에 잠재적인 보안 취약점이 노출됩니다.",
-       'config-magic-quotes-runtime' => "'''치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]이 활성합니다!'''
-이 옵션은 데이터를 입력하는 데 예기치 않는 손상이 일어납니다.
-이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
-       'config-magic-quotes-sybase' => "'''치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]이 활성합니다!'''
-이 옵션은 데이터를 입력하는 데 예기치 않는 손상이 일어납니다.
-이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
-       'config-mbstring' => "'''치명: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]이 활성합니다!'''
-이 옵션은 오류가 발생하고 데이터를 입력하는 데 예기치 않는 손상이 일어날 수 있습니다.
-이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
-       'config-ze1' => "'''치명: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]이 활성합니다!'''
-이 옵션은 미디어위키에 심간한 버그를 일으킵니다.
-이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
-       'config-safe-mode' => "'''경고:''' [http://www.php.net/features.safe-mode 안전 모드]이 활성합니다!
-특히 파일을 올리거나 <code>math</code>를 지원하는 데 문제가 발생할 수 있습니다.",
-       'config-xml-bad' => 'PHP의 XML 모듈이 없습니다.
-미디어위키는 이 모듈의 기능이 필요하며 이 설정에서는 작동하지 않습니다.
-Mandrake를 실행하고 있다면 php-xml 패키지를 설치하세요.',
-       'config-pcre' => 'PCRE 지원 모듈이 없는 것 같습니다.
-미디어위키는 Perl 호환 정규 표현식을 작동시켜야 합니다.',
-       'config-pcre-no-utf8' => "'''치명''': PHP의 PCRE 모듈은 RCRE_UTF8 지원 없이 컴파일된 것 같습니다.
-미디어위키가 제대로 작동하려면 UTF-8 지원이 필요합니다.",
-       'config-memory-raised' => 'PHP의 <code>memory_limit</code>는 $1이며 $2(으)로 늘리세요.',
-       'config-memory-bad' => "'''경고:''' PHP의 <code>memory_limit</code>는 $1입니다.
-아마도 너무 낮은 것 같습니다.
-설치가 실패할 수 있습니다!",
-       'config-ctype' => "'''치명''': PHP는 [http://www.php.net/manual/en/ctype.installation.php Ctype 확장 기능]에 대해 지원하여 컴파일해야 합니다.",
-       '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-mod-security' => "'''경고''': 웹 서버에 [http://modsecurity.org/ mod_security]가 허용되었습니다. 잘못 설정된 경우 미디어위키나 사용자가 임의의 콘텐츠를 게시할 수 있는 다른 소프트웨어에 대한 문제를 일으킬 수 있습니다.
-[http://modsecurity.org/documentation/ mod_security] 문서를 참고하거나 임의의 오류가 발생할 경우 호스트의 지원 요청에 문의하십시오.",
-       'config-diff3-bad' => 'GNU diff3를 찾을 수 없습니다.',
-       'config-git' => 'Git 버전 관리 소프트웨어를 찾았습니다: <code>$1</code>.',
-       'config-git-bad' => 'Git 버전 관리 소프트웨어를 찾을 수 없습니다.',
-       'config-imagemagick' => 'ImageMagick를 찾았습니다: <code>$1</code>.
-올리기를 활성화할 경우 그림 섬네일이 활성화됩니다.',
-       'config-gd' => '내장된 GD 그래픽 라이브러리를 찾았습니다.
-올리기를 활성화할 경우 그림 섬네일이 활성화됩니다.',
-       'config-no-scaling' => 'GD 라이브러리나 ImageMagick를 찾을 수 없습니다.
-그림 섬네일이 비활성화됩니다.',
-       'config-no-uri' => "'''오류:''' 현재 URI를 확인할 수 없습니다.
-설치가 중단되었습니다.",
-       'config-no-cli-uri' => "'''경고''': 기본값을 사용하여 --scriptpath를 지정하지 않았습니다: <code>$1</code>.",
-       'config-using-server' => '"<nowiki>$1</nowiki>"(을)를 서버 이름으로 사용합니다.',
-       'config-using-uri' => '"<nowiki>$1$2</nowiki>"(을)를 서버 URL로 사용합니다.',
-       'config-uploads-not-safe' => "'''경고:''' 올리기에 대한 기본 디렉터리(<code>$1</code>)는 임의의 스크립트 실행에 취약합니다.
-미디어위키는 보안 위협에 대한 모든 올린 파일을 검사하지만, 올리기를 활성화하기 전에 [//www.mediawiki.org/wiki/Manual:Security#Upload_security 이 보안 취약점을 해결할 것]을 매우 권장합니다.",
-       'config-no-cli-uploads-check' => "'''경고:''' 올리기에 대한 기본 디렉터리(<code>$1</code>)는 CLI를 설치하는 동안 임의의 스크립트 실행에 대한 취약점에 대해 검사되지 않습니다.",
-       'config-brokenlibxml' => '시스템에 버그가 있는 PHP와 libxml2의 조합이 있으며 미디어위키나 다른 웹 어플리케이션에 숨겨진 데이터 손상을 일으킬 수 있습니다.
-PHP 5.2.9 이후와 libxml2 2.7.3 이후로 업그레이드하세요. ([//bugs.php.net/bug.php?id=45996 PHP에 제기한 버그])
-설치가 중단되었습니다.',
-       'config-using531' => '미디어위키는 <code>__call()</code>을 참고로 매개 변수를 포함하는 버그로 인해 PHP $1(와)과 함께 사용할 수 없습니다.
-문제를 해결하려면 PHP 5.3.2 이상로 업그레이드하거나 PHP 5.3.0으로 다운그레이드를 하세요.
-설치가 중단되었습니다.',
-       'config-suhosin-max-value-length' => '수호신(Suhosin)이 설치되었고 $1 바이트로 GET 매개 변수인 <code>length</code>를 제한하고 있습니다.
-미디어위키의 ResourceLoader 구성 요소는 이 제한을 해결하지만 성능이 저하됩니다.
-가능하면 <code>php.ini</code>의 <code>suhosin.get.max_value_length</code>에 1024 이상으로 설정하고 <code>LocalSettings.php</code>의 <code>$wgResourceLoaderMaxQueryLength</code>에 같은 값을 설정해야 합니다.',
-       'config-db-type' => '데이터베이스 종류:',
-       'config-db-host' => '데이터베이스 호스트:',
-       'config-db-host-help' => '데이터베이스 서버가 다른 서버에 있으면 여기에 호스트 이름이나 IP 주소를 입력하세요.
-
-공유하는 웹 호스팅을 사용하고 있으면 호스팅 제공 업체는 호스트 이름을 설명하고 있을 것입니다.
-
-윈도 서버에 설치하고 MySQL을 사용하면 "localhost"는 서버 이름으로 작동하지 않을 수 있습니다. 그렇게 된다면 로컬 IP 주소로 "127.0.0.1"를 시도하세요.
-
-PostgreSQL을 사용하면 유닉스 소켓을 통해 연결되도록 입력란을 비워두세요.',
-       'config-db-host-oracle' => '데이터베이스 TNS:',
-       'config-db-host-oracle-help' => '올바른 [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 로컬 연결 이름]을 입력하세요. tnsnames.ora 파일이 이 설치에 보여야 합니다.<br />10g 이후의 클라이언트 라이브러리를 사용하는 경우 [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 쉬운 연결] 네이밍 메소드도 사용할 수 있습니다.',
-       'config-db-wiki-settings' => '이 위키 식별',
-       'config-db-name' => '데이터베이스 이름:',
-       'config-db-name-help' => '위키를 식별하기 위한 이름을 선택하세요.
-공백이 없어야 합니다.
-
-공유하는 웹 호스팅 사용하면 호스팅 제공 업체가 특정 데이터베이스 이름을 제공하거나 관리 패널에서 데이터베이스를 만들 수 있습니다.',
-       'config-db-name-oracle' => '데이터베이스 스키마:',
-       'config-db-account-oracle-warn' => '데이터베이스 백엔드로 오라클을 설치하기 위해 지원하는 세 가지 시나리오가 있습니다:
-
-설치 과정의 일부로 데이터베이스 계정을 만들려면 설치를 위해 데이터베이스 계정으로 SYSDBA 역할을 가진 계정을 제공하고 웹 접근 계정에 대해 원하는 자격 증명을 지정하세요, 그렇지 않으면 수동으로 웹 접근 계정을 만들 수 있으며 (필요한 경우 권한 스키마 개체를 만들어야 합니다) 또는 다른 계정 두 개를 만들고 권한을 가진 하나의 웹 접근을 위한 제한된 하나를 제공할 수 있습니다.
-
-필요한 권한을 가진 계정을 만드는 스크립트는 이 설치의 "maintenance/oracle/" 디렉토리에서 찾을 수 있습니다. 제한된 계정을 사용하면 기본 계정으로 모든 관리 기능을 비활성화할 것을 유의하십시오.',
-       'config-db-install-account' => '설치를 위한 사용자 계정',
-       'config-db-username' => '데이터베이스 사용자 이름:',
-       'config-db-password' => '데이터베이스 비밀번호:',
-       'config-db-password-empty' => '새 데이터베이스 사용자의 비밀번호를 입력하세요: $1.
-비밀번호 없이 사용자를 만들 수도 있지만 안전하지 않습니다.',
-       'config-db-install-username' => '설치 과정 중에 데이터베이스에 연결할 때 사용할 사용자 이름을 입력하세요.
-미디어위키 계정의 사용자 이름이 아닌 데이터베이스에 대한 사용자 이름입니다.',
-       'config-db-install-password' => '설치 과정 중에 데이터베이스에 연결할 때 사용할 비밀번호을 입력하세요.
-미디어위키 계정의 비밀번호가 아닌 데이터베이스에 대한 비밀번호입니다.',
-       'config-db-install-help' => '설치 과정 중에 데이터베이스에 연결할 때 사용할 사용자 이름과 비밀번호를 입력하세요.',
-       'config-db-account-lock' => '정상적으로 작동하는 동안 같은 사용자 이름과 비밀번호를 사용함',
-       'config-db-wiki-account' => '정상적인 작동을 위한 사용자 계정',
-       'config-db-wiki-help' => '정상적인 위키 작업 동안 데이터베이스에 연결하는 데 사용할 사용자 이름과 비밀 번호를 입력하세요.
-계정이 존재하지 않고 설치 계정에 충분한 권한이 있는 경우 이 사용자 계정은 위키를 작동하는 데 필요한 최소 권한으로 만들어집니다.',
-       'config-db-prefix' => '데이터베이스 테이블 접두어:',
-       'config-db-prefix-help' => '여러 위키 사이 또는 미디어위키와 다른 웹 응용 프로그램 사이에서 하나의 데이터베이스를 공유해야 하는 경우, 충돌을 피하기 위해 모든 테이블 이름에 접두어를 추가하도록 선택할 수 있습니다.
-공백을 사용하지 마세요.
-
-이 필드는 일반적으로 비어있습니다.',
-       'config-db-charset' => '데이터베이스 문자 집합',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 바이너리',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 UTF-8 하위 호환성',
-       'config-charset-help' => "'''경고:''' MySQL 4.1에서 '''UTF-8 하위 호환성'''을 사용하고 나서 <code>mysqldump</code>로 데이터베이스에 백업한다면 모든 ASCII가 아닌 문자를 파괴하고 손상한 백업을 되돌릴 수 없습니다!
-
-'''바이너리 모드'''에서는 미디어위키는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.
-MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.
-'''UTF-8 모드'''에서는 MySQL은 데이터를 설정하는 문자 집합을 알고 있기 때문에 적절하게 표현하고 변환할 수 있지만
-[//ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%ED%8F%89%EB%A9%B4#.EA.B8.B0.EB.B3.B8_.EB.8B.A4.EA.B5.AD.EC.96.B4_.ED.8F.89.EB.A9.B4 기본 다국어 평면] 밖의 문자를 저장할 수 없습니다.",
-       'config-mysql-old' => 'MySQL $1 이상이 필요하나 $2(이)가 있습니다.',
-       'config-db-port' => '데이터베이스 포트:',
-       'config-db-schema' => '미디어위키에 대한 스키마:',
-       'config-db-schema-help' => '보통 이 스키마는 문제가 없습니다.
-필요한 경우에만 바꾸세요.',
-       'config-pg-test-error' => "'''$1''' 데이터베이스에 연결할 수 없습니다: $2",
-       'config-sqlite-dir' => 'SQLite 데이터 디렉터리:',
-       'config-sqlite-dir-help' => "SQLite는 하나의 파일에 모든 데이터를 저장합니다.
-
-제공하는 디렉토리는 설치하는 동안 웹 서버가 쓸 수 있어야 합니다.
-
-이 디렉토리는 웹을 통해 접근할 수 '''없어야''' 하는데 PHP 파일이 있는 곳에 넣을 수 없는 것은 이 때문입니다.
-
-설치 프로그램은 <code>.htaccess</code> 파일을 작성하지만 이것이 실패하면 누군가가 원본 데이터베이스에 접근할 수 있습니다.
-데이터베이스는 원본 사용자 데이터(이메일 주소, 해시한 비밀번호) 뿐만 아니라 삭제된 판과 위키의 다른 제한된 데이터를 포함합니다.
-
-예를 들어 <code>/var/lib/mediawiki/yourwiki</code>와 같이 다른 곳에 데이터베이스를 넣는 것이 좋습니다.",
-       'config-oracle-def-ts' => '기본 테이블공간:',
-       'config-oracle-temp-ts' => '임시 테이블공간:',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => '미디어위키는 다음의 데이터베이스 시스템을 지원합니다:
-
-$1
-
-데이터베이스 시스템이 표시되지 않을 때 아래에 나열된 다음 지원을 활성화하려면 위의 링크된 지시에 따라 설치해볼 수 있습니다.',
-       'config-support-mysql' => '* $1은 미디어위키의 기본 대상으로 가장 잘 지원합니다. ([http://www.php.net/manual/en/mysql.installation.php MySQL을 지원하여 PHP를 컴파일하는 방법])',
-       'config-support-postgres' => '* $1은 MySQL의 대안으로 인기 있는 오픈 소스 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQL을 지원하여 PHP를 컴파일하는 방법]) 몇가지 사소한 해결하지 못한 버그가 있을 수 있으며, 이를 제작 환경에서 사용하지 않는 것이 좋습니다.',
-       'config-support-sqlite' => '* $1는 매우 잘 지원하는 가벼운 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pdo.installation.php SQLite를 지원하여 PHP를 컴파일하는 방법], PDO 사용)',
-       'config-support-oracle' => '* $1은 상용 엔터프라이스 데이터베이스입니다. ([http://www.php.net/manual/en/oci8.installation.php OCI8을 지원하여 PHP를 컴파일하는 방법])',
-       'config-header-mysql' => 'MySQL 설정',
-       'config-header-postgres' => 'PostgreSQL 설정',
-       'config-header-sqlite' => 'SQLite 설정',
-       'config-header-oracle' => 'Oracle 설정',
-       'config-invalid-db-type' => '잘못된 데이터베이스 종류',
-       'config-missing-db-name' => '"데이터베이스 이름"에 대한 값을 입력해야 합니다',
-       'config-missing-db-host' => '"데이터베이스 호스트"에 대한 값을 입력해야 합니다',
-       'config-missing-db-server-oracle' => '"데이터베이스 TNS"에 대한 값을 입력해야 합니다',
-       'config-invalid-db-server-oracle' => '"$1" 데이터베이스 TNS가 잘못됐습니다.
-"TNS Name"이나 "Easy Connect" 문자열 중 하나를 사용하세요 ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle 네이밍 메서드])',
-       'config-invalid-db-name' => '"$1" 데이터베이스 이름이 잘못되었습니다.
-ASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.',
-       'config-invalid-db-prefix' => '"$1" 데이터베이스 접두어가 잘못됐습니다.
-ASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.',
-       'config-connection-error' => '$1.
-
-호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.',
-       'config-invalid-schema' => '미디어위키 "$1"에 대한 스키마가 잘못됐습니다.
-ASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.',
-       'config-db-sys-create-oracle' => '설치 프로그램은 새 계정을 만들기 위한 SYSDBA 계정만을 지원합니다.',
-       'config-db-sys-user-exists-oracle' => '"$1" 사용자 계정이 이미 존재합니다. SYSDBA는 새 계정을 만드는 데에만 사용할 수 있습니다!',
-       'config-postgres-old' => 'PostgreSQL $1 이상이 필요하나 $2(이)가 있습니다.',
-       'config-sqlite-name-help' => '위키를 식별하기 위한 이름을 선택하세요.
-공백이나 하이픈을 사용하지 마십시오.
-SQLite 데이터 파일 이름에 사용됩니다.',
-       'config-sqlite-parent-unwritable-group' => '<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며 웹 서버는 <code><nowiki>$2</nowiki></code> 상위 디렉토리에 쓸 수 없기 때문입니다.
-
-설치 프로그램은 웹 서버로 실행중인 사용자를 지정할 수 없습니다.
-계속하려면 웹 서버가 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.
-유닉스/리눅스 시스템에서의 수행:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => '<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며 웹 서버는 <code><nowiki>$2</nowiki></code> 상위 디렉토리에 쓸 수 없기 때문입니다.
-
-설치 프로그램은 웹 서버로 실행중인 사용자를 지정할 수 없습니다.
-계속하려면 웹 서버(와 기타!)가 전역으로 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.
-유닉스/리눅스 시스템에서의 수행:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => '"$1" 데이터 디렉토리를 만드는 중 오류가 났습니다.
-경로를 확인하고 다시 시도하세요.',
-       'config-sqlite-dir-unwritable' => '"$1" 디렉토리에 쓸 수 없습니다.
-웹 서버를 쓸 수 있도록 권한을 바꾸고 다시 시도하세요.',
-       'config-sqlite-connection-error' => '$1.
-
-호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.',
-       'config-sqlite-readonly' => '<code>$1</code> 파일은 쓸 수 없습니다.',
-       'config-sqlite-cant-create-db' => '<code>$1</code> 데이터베이스 파일을 만들 수 없습니다.',
-       'config-sqlite-fts3-downgrade' => 'PHP가 FTS3 지원이 없어졌습니다. 테이블을 다운그레이드하세요.',
-       'config-can-upgrade' => "이 데이터베이스에 미디어위키 테이블이 있습니다.
-미디어위키 $1(으)로 업그레이드하려면 '''계속'''을 클릭하세요.",
-       'config-upgrade-done' => "업그레이드가 완료되었습니다.
-
-이제 [$1 위키를 시작]할 수 있습니다.
-
-만약 <code>LocalSettings.php</code> 파일을 다시 만들기를 원하면 아래의 버튼을 클릭하세요.
-위키에 문제가 있지 않는 한 '''권장하지 않습니다'''.",
-       'config-upgrade-done-no-regenerate' => '업그레이드가 완료되었습니다.
-
-이제 [$1 위키를 시작]할 수 있습니다.',
-       'config-regenerate' => 'LocalSettings.php 다시 만들기 →',
-       'config-show-table-status' => '<code>SHOW TABLE STATUS</code> 쿼리를 실패했습니다!',
-       'config-unknown-collation' => "'''경고:''' 데이터베이스가 인식하지 않는 정렬을 사용하고 있습니다.",
-       'config-db-web-account' => '웹 접근을 위한 데이터베이스 계정',
-       'config-db-web-help' => '위키의 일반적인 작업 중에 데이터베이스 서버에 연결하는 데 사용할 웹 서버에 대한 계정 이름과 비밀번호를 선택하세요.',
-       'config-db-web-account-same' => '설치를 위해 같은 계정 사용',
-       'config-db-web-create' => '이 계정이 아직 존재하지 않을 경우 계정 만들기',
-       'config-db-web-no-create-privs' => '설치를 위해 지정한 계정은 계정을 만들 수 있는 충분한 권한이 없습니다.
-여기서 지정한 계정은 이미 존재해야 합니다.',
-       'config-mysql-engine' => '스토리지 엔진:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''경고''': 미디어위키에 사용하지 않는 것이 좋은 MySQL에 대한 스토리지 엔진으로 MyISAM을 선택하였습니다. 이유는:
-* 테이블 잠금에 의해 간신히 동시성을 지원합니다
-* 다른 엔진보다 손상하는 경향이 있습니다
-* 미디어위키 코드베이스가 항상 정상적으로 MyISAM을 처리하지 않습니다
-
-MySQL 설치가 InnoDB를 지원한다면, 그 선택 대신에 InnoDB를 선택할 것을 매우 권장합니다.
-MySQL 설치가 InnoDB를 지원하지 않는다면, 아마도 업그레이드를 할 시간입니다.",
-       'config-mysql-only-myisam-dep' => "'''경고''': 미디어위키에 사용하지 않는 것이 좋은 MySQL에 대한 유일하게 사용할 수 있는 스토리지 엔진입니다. 이유는:
-* 테이블 잠금에 의해 간신히 동시성을 지원합니다
-* 다른 엔진보다 손상하는 경향이 있습니다
-* 미디어위키 코드베이스가 항상 정상적으로 MyISAM을 처리하지 않습니다
-
-MySQL 설치가 InnoDB를 지원하지 않으며, 아마도 업그레이드를 할 시간입니다.",
-       'config-mysql-engine-help' => "'''InnoDB'''는 동시적인 지원에 좋기 때문에 대부분 최고의 옵션입니다.
-
-'''MyISAM'''은 단일 사용자 또는 읽기 전용 설치에 빠를 수 있습니다.
-MyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실될 수 있습니다.",
-       'config-mysql-charset' => '데이터베이스 문자 집합:',
-       'config-mysql-binary' => '바이너리',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "'''바이너리 모드'''에서는 미디어위키는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.
-MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.
-'''UTF-8 모드'''에서는 MySQL은 데이터를 설정하는 문자 집합을 알고 있기 때문에 적절하게 표현하고 변환할 수 있지만
-[//ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%ED%8F%89%EB%A9%B4#.EA.B8.B0.EB.B3.B8_.EB.8B.A4.EA.B5.AD.EC.96.B4_.ED.8F.89.EB.A9.B4 기본 다국어 평면] 밖의 문자를 저장할 수 없습니다.",
-       'config-site-name' => '위키 이름:',
-       'config-site-name-help' => '브라우저 제목 표시줄과 다른 여러 곳에 나타납니다.',
-       'config-site-name-blank' => '사이트 이름을 입력하세요.',
-       'config-project-namespace' => '프로젝트 이름공간:',
-       'config-ns-generic' => '프로젝트',
-       'config-ns-site-name' => '위키 이름과 같은 이름: $1',
-       'config-ns-other' => '기타 (지정)',
-       'config-ns-other-default' => '내위키',
-       'config-project-namespace-help' => '위키백과의 예를 따라서, 많은 위키는 "\'\'\'프로젝트 이름공간\'\'\'"에 그들의 콘텐츠 페이지에서 그들의 정책 페이지는 별도로 보관합니다.
-이 이름공간에 있는 모든 페이지의 제목은 여기서 지정할 수 있는 특정 접두어로 시작합니다.
-보통 이 접두어는 위키의 이름에서 파생되지만, "#" 또는 ":"와 같은 특수 문자를 포함할 수 없습니다.',
-       'config-ns-invalid' => '특정 "<nowiki>$1</nowiki>" 이름공간이 잘못되었습니다.
-다른 프로젝트 이름공간을 지정하세요.',
-       'config-ns-conflict' => '특정 "<nowiki>$1</nowiki>" 이름공간이 기본 미디어위키 이름공간과 충돌합니다.
-다른 프로젝트 이름공간을 지정하세요.',
-       'config-admin-box' => '관리자 계정',
-       'config-admin-name' => '사용자 이름:',
-       'config-admin-password' => '비밀번호:',
-       'config-admin-password-confirm' => '비밀번호 확인:',
-       'config-admin-help' => '"홍길동"과 같이 여기에 원하는 사용자 이름을 입력하세요.
-위키에 로그인하는 데 사용되는 이름입니다.',
-       'config-admin-name-blank' => '관리자의 사용자 이름을 입력하세요.',
-       'config-admin-name-invalid' => '특정 "<nowiki>$1</nowiki>" 사용자 이름이 잘못되었습니다.
-다른 사용자 이름을 지정하세요.',
-       'config-admin-password-blank' => '관리자 계정의 비밀번호를 입력하세요.',
-       'config-admin-password-same' => '비밀번호는 사용자 이름과 같아서는 안 됩니다.',
-       'config-admin-password-mismatch' => '입력한 비밀번호 두 개가 일치하지 않습니다.',
-       'config-admin-email' => '이메일 주소:',
-       'config-admin-email-help' => '위키의 다른 사용자로부터 이메일을 전달받거나 비밀번호를 재설정하고 주시문서 목록에 대한 바뀜 알림을 받기 위해 여기에 이메일 주소를 입력하세요. 이 필드를 비워 둘 수 있습니다.',
-       'config-admin-error-user' => '"<nowiki>$1</nowiki>" 이름의 관리자를 만드는 중 내부 오류가 발생했습니다.',
-       'config-admin-error-password' => '"<nowiki>$1</nowiki>" 관리자의 비밀번호를 설정하는 중 내부 오류가 발생했습니다: <pre>$2</pre>',
-       'config-admin-error-bademail' => '이메일 주소를 잘못 입력하였습니다.',
-       'config-subscribe' => '[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 배포 발표 메일링 리스트]에 가입합니다.',
-       'config-subscribe-help' => '중요한 보안 알림을 포함한 배포 알림에 대해 사용되는 로우 볼륨 메일링 리스트입니다.
-이 리스트를 구독하고 나서 새 버전이 나올 때 미디어위키 설치를 업데이트하십시오.',
-       'config-subscribe-noemail' => '이메일 주소를 제공하지 않고 배포 발표 메일링 리스트에 가입하려 합니다.
-메일링 리스트에 가입하고자 할 경우 이메일 주소를 제공하세요.',
-       'config-almost-done' => '거의 다 완료했습니다!
-이제 남은 설정을 생략하고 지금 바로 위키를 설치할 수 있습니다.',
-       'config-optional-continue' => '더 많은 질문을 물어보세요.',
-       'config-optional-skip' => '지겨워요, 그냥 위키를 설치할래요.',
-       'config-profile' => '사용자 권한 프로필:',
-       'config-profile-wiki' => '열린 위키',
-       'config-profile-no-anon' => '계정 만들기 필요',
-       'config-profile-fishbowl' => '승인된 편집자만',
-       'config-profile-private' => '비공개 위키',
-       'config-profile-help' => "위키는 많은 사람들이 가능한 한 편집할 수 있도록 하면 가장 뛰어난 역할을 합니다.
-미디어위키에서는 최근 바뀜을 검토하기 쉽고, 선하거나 악의적인 사용자의 어떠한 손실을 되돌리는 것이 쉽습니다.
-
-그러나 많은 사람이 미디어위키는 다양한 역할로 유용하지만, 때로는 모든 사람에게 위키 방식의 장점을 설득하기 쉽지 않을 지도 모릅니다.
-그래서 선택할 수 있습니다.
-
-'''{{int:config-profile-wiki}}''' 모델은 로그인하지 않고도 누구나 편집할 수 있습니다.
-'''{{int:config-profile-no-anon}}'''인 위키는 각 편집에 추가적으로 강한 책임을 제공하지만, 부담 없는 기여를 저해할 수도 있습니다.
-
-'''{{int:config-profile-fishbowl}}''' 시나리오는 승인된 사용자만 편집할 수 있지만, 대중은 역사를 포함하여 문서를 볼 수 있습니다.
-'''{{int:config-profile-private}}'''는 승인된 사용자만 문서를 볼 수 있으며 해당 그룹을 편집할 수 있습니다.
-
-더 복잡한 사용자 권한을 설정은 설치한 후 사용할 수 있으며 [//www.mediawiki.org/wiki/Manual:User_rights 관련 설명서 항목]을 참고하세요.",
-       'config-license' => '저작권 및 라이선스:',
-       'config-license-none' => '라이선스 바닥글 없음',
-       'config-license-cc-by-sa' => '크리에이티브 커먼즈 저작자표시-동일조건변경허락',
-       'config-license-cc-by' => '크리에이티브 커먼즈 저작자표시',
-       'config-license-cc-by-nc-sa' => '크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락',
-       'config-license-cc-0' => '크리에이티브 커먼즈 제로 (퍼블릭 도메인)',
-       'config-license-gfdl' => 'GNU 자유 문서 사용 허가서 1.3 이상',
-       'config-license-pd' => '퍼블릭 도메인',
-       'config-license-cc-choose' => '다른 크리에이티브 커먼즈 라이선스 선택',
-       'config-license-help' => "많은 공개 위키는 모든 기여를 [http://freedomdefined.org/Definition 자유 라이선스]에 따라 넣습니다.
-이렇게 하면 커뮤니티 소유권의 이해를 할 수 있도록 하고 장기적인 기여를 장려합니다.
-일반적으로 개인 또는 회사 위키에 대해서는 필요하지 않습니다.
-
-위키백과의 텍스트를 사용할 수 있도록 하고 위키백과가 위키에서 복사한 텍스트를 사용할 수 있도록 원한다면 '''크리에이티브 커먼즈 저작자표시-동일조건변경허락'''으로 선택해야 합니다.
-
-위키백과는 이전에 GNU 자유 문서 사용 허가서를 사용했습니다.
-GFDL은 유효한 라이선스이지만 내용을 이해하기 어렵습니다.
-GFDL에 따라 사용이 허가된 내용을 재사용하는 것도 어렵습니다.",
-       'config-email-settings' => '이메일 설정',
-       'config-enable-email' => '발신 이메일 활성화',
-       'config-enable-email-help' => '이메일을 작동하려면 [http://www.php.net/manual/en/mail.configuration.php PHP의 메일 설정]을 올바르게 설정해야 합니다.
-이메일 기능을 사용하지 않으려면 이를 비활성화할 수 있습니다.',
-       'config-email-user' => '사용자와 사용자 간 이메일 활성화',
-       'config-email-user-help' => '환경 설정에서 활성화한 경우 모든 사용자가 이메일을 서로 보내도록 활성화합니다.',
-       'config-email-usertalk' => '사용자 토론 문서 알림 활성화',
-       'config-email-usertalk-help' => '환경 설정에서 활성화한 경우 사용자는 사용자 토론 문서의 바뀜 알림을 받도록 활성화합니다.',
-       'config-email-watchlist' => '주시문서 목록 알림 활성화',
-       'config-email-watchlist-help' => '환경 설정에서 활성화한 경우 사용자가 주시한 문서에 대한 알림을 받도록 활성화합니다.',
-       'config-email-auth' => '이메일 인증 활성화',
-       'config-email-auth-help' => "이 설정이 활성화되어 있으면 사용자는 이메일 주소를 설정하거나 바꿀 때마다 링크를 사용하여 이메일 주소를 확인해야 합니다.
-인증된 이메일 주소만 다른 사용자로부터의 이메일이나 바뀜 알림 이메일을 받을 수 있습니다.
-이메일 기능의 남용 가능성이 있기 때문에 이 옵션을 설정하는 것은 공개 위키에서 '''권장'''합니다.",
-       'config-email-sender' => '반송 이메일 주소',
-       'config-email-sender-help' => '발신한 이메일에 대한 반송 주소로 사용할 이메일 주소를 입력하세요.
-반송할 때 보내는 주소입니다.
-대부분의 메일 서버는 적어도 도메인 이름 부분은 유효합니다.',
-       'config-upload-settings' => '그림과 파일 올리기',
-       'config-upload-enable' => '파일 올리기 활성화',
-       'config-upload-help' => '파일 올리기는 서버에 잠재적인 보안 위험에 쉽게 노출될 수 있습니다.
-자세한 내용은 매뉴얼의 [//www.mediawiki.org/wiki/Manual:Security 보안 문단]을 참고하세요.
-
-파일 올리기를 활성화하려면 미디어위키의 루트 디렉토리에 있는 <code>images</code> 하위 디렉토리에서 웹 서버가 기록할 수 있도록 모드를 바꿉니다.
-그 다음 이 옵션을 활성화합니다.',
-       'config-upload-deleted' => '삭제된 파일에 대한 디렉터리:',
-       'config-upload-deleted-help' => '삭제된 파일을 보관할 디렉토리를 선택하세요.
-이상적으로 웹에서 접근할 수 없게 해야 합니다.',
-       'config-logo' => '로고 URL:',
-       'config-logo-help' => '미디어위키의 기본 스킨은 사이드바 메뉴 위에 135×160 픽셀의 로고의 공간을 포함하고 있습니다.
-적당한 크기로 그림을 올리고 여기에 URL을 입력하세요.
-
-로고가 상대적인 경로에 있으면 <code>$wgStylePath</code>나 <code>$wgScriptPath</code>를 사용할 수 있습니다.
-
-로고 사용을 원하지 않으면 이 상자를 비우세요.',
-       'config-instantcommons' => '인스턴트 공용 활성화',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons 인스턴트 공용]은 [//commons.wikimedia.org/ 위키미디어 공용] 사이트에서 찾을 수 있는 그림, 소리 및 다른 미디어를 위키에서 사용할 수 있도록 하는 기능입니다.
-이렇게 하려면 미디어위키가 인터넷에 접근해야합니다.
-
-위키미디어 공용 외에 기타 위키를 설정하는 방법에 대한 지침을 포함한 기능에 대한 자세한 내용은 [//mediawiki.org/wiki/Manual:$wgForeignFileRepos 매뉴얼]을 참고하세요.',
-       'config-cc-error' => '크리에이티브 커먼즈 라이선스 선택기에 결과가 없습니다.
-수동으로 라이선스 이름을 입력하세요.',
-       'config-cc-again' => '다시 선택...',
-       'config-cc-not-chosen' => '원하는 크리에이티브 커먼즈 라이선스를 선택하고 "진행"을 클릭하세요.',
-       'config-advanced-settings' => '고급 설정',
-       'config-cache-options' => '개체 캐싱을 위한 설정:',
-       'config-cache-help' => '개체 캐싱은 자주 사용하는 데이터를 캐싱하여 미디어위키의 속도를 개선하는 데 사용합니다.
-큰 사이트의 규모에는 이를 많이 사용하도록 권장하고 있으며, 소규모 사이트들도 물론 이익을 볼 수 있습니다.',
-       'config-cache-none' => '캐시하지 않음 (기능적으로는 삭제되지 않지만 큰 위키 사이트에 속도에 영향을 받을 수 있습니다)',
-       'config-cache-accel' => 'PHP 개체 캐싱 (APC, XCache 또는 WinCache)',
-       'config-cache-memcached' => 'Memcached 사용 (추가적인 설치와 설정이 필요합니다)',
-       'config-memcached-servers' => 'Memcached 서버:',
-       'config-memcached-help' => 'Memcached의 사용하기 위한 IP 주소 목록입니다.
-한 줄에 하나씩 사용할 포트를 지정해야 합니다. 예를 들어 :
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => '캐시 종류로 Memcached를 선택했지만 어떠한 서버도 지정하지 않았습니다.',
-       'config-memcache-badip' => 'Memcached에 대해 잘못된 IP 주소를 입력했습니다: $1.',
-       'config-memcache-noport' => 'Memcached 서버에 사용할 포트를 지정하지 않았습니다: $1.
-포트를 모를 경우 기본값은 11211입니다.',
-       'config-memcache-badport' => 'Memcached 포트 번호는 $1(와)과 $2 사이여야 합니다.',
-       'config-extensions' => '확장 기능',
-       'config-extensions-help' => '위에 나열된 확장 기능이 <code>./extensions</code>에서 발견되었습니다.
-
-추가적인 설정이 필요할 수 있습니다만 지금 활성화시킬 수 있습니다.',
-       'config-install-alreadydone' => "'''경고:''' 이미 미디어위키를 설치했고 다시 설치하려고 합니다.
-다음 페이지에서 진행하세요.",
-       'config-install-begin' => '"{{int:config-continue}}"을 누르면 미디어위키의 설치를 시작합니다.
-그래도 바꾸는 것을 원한다면 "{{int:config-back}}"를 누르세요.',
-       'config-install-step-done' => '완료',
-       'config-install-step-failed' => '실패',
-       'config-install-extensions' => '확장 기능을 포함하는 중',
-       'config-install-database' => '데이터베이스를 설정하는 중',
-       'config-install-schema' => '스키마를 만드는 중',
-       'config-install-pg-schema-not-exist' => 'PostgreSQL 스키마가 존재하지 않습니다.',
-       'config-install-pg-schema-failed' => '테이블을 만드는 데 실패했습니다.
-"$2" 스키마에 쓸 수 있는 "$1" 사용자가 있는지 확인하세요.',
-       'config-install-pg-commit' => '바뀐 사항을 적용하는 중',
-       'config-install-pg-plpgsql' => 'PL/pgSQL 언어에 대해 확인하는 중',
-       'config-pg-no-plpgsql' => '$1 데이터베이스에 PL/pgSQL 언어를 설치해야 합니다',
-       'config-pg-no-create-privs' => '설치를 위한 지정한 계정에 계정을 만드는 데 충분한 권한이 없습니다,',
-       'config-pg-not-in-role' => '웹 사용자에 대해 지정한 계정이 이미 존재합니다.
-설치에 대한 지정한 사용자는 슈퍼 사용자가 아니고, 그것은 웹 사용자의 역할의 구성원이 아니며, 그래서 웹 사용자가 소유한 개체를 만들 수 없습니다.
-
-현재 미디어위키는 테이블을 웹 사용자가 소유해야 합니다. 다른 웹 계정 이름을 지정하거나 "뒤로"를 클릭하고 적절한 권한의 설치할 사용자를 지정하세요.',
-       'config-install-user' => '데이터베이스 사용자를 만드는 중',
-       'config-install-user-alreadyexists' => '"$1" 사용자가 이미 존재합니다',
-       'config-install-user-create-failed' => '"$1" 사용자 만드는 중 실패: $2',
-       'config-install-user-grant-failed' => '"$1" 사용자에 대한 권한 부여 실패: $2',
-       'config-install-user-missing' => '지정한 "$1" 사용자가 존재하지 않습니다.',
-       'config-install-user-missing-create' => '지정된 "$1" 사용자가 존재하지 않습니다.
-이를 만드는 것을 원하면 아래의 "계정 만들기" 확인 상자를 클릭하세요.',
-       'config-install-tables' => '테이블을 만드는 중',
-       'config-install-tables-exist' => "'''경고''': 미디어위키 테이블이 이미 있는 것 같습니다.
-테이블 만들기를 생략합니다.",
-       'config-install-tables-failed' => "'''오류''': 다음 오류와 함께 테이블 만들기에 실패했습니다: $1",
-       'config-install-interwiki' => '기본 인터위키 테이블을 채우는 중',
-       'config-install-interwiki-list' => '<code>interwiki.list</code> 파일을 불러올 수 없습니다.',
-       'config-install-interwiki-exists' => "'''경고''': 인터위키 테이블이 이미 항목을 갖고 있는 것 같습니다.
-기본 목록으로 넘어갑니다.",
-       'config-install-stats' => '통계를 초기화하는 중',
-       'config-install-keys' => '보안 키를 만드는 중',
-       'config-insecure-keys' => "'''경고:''' 설치 중에 생성한 {{PLURAL:$2|보안 키}} ($1)를 설치하는 동안 완전히 안전하지 {{PLURAL:$2|않습니다}}. 직접 바꾸기를 고려하세요.",
-       'config-install-sysop' => '관리자 사용자 계정을 만드는 중',
-       'config-install-subscribe-fail' => '미디어위키 발표를 구독할 수 없습니다: $1',
-       'config-install-subscribe-notpossible' => 'cURL이 설치되지 않았고 allow_url_fopen를 사용할 수 없습니다.',
-       'config-install-mainpage' => '기본 콘텐츠로 대문을 만드는 중',
-       'config-install-extension-tables' => '활성화된 확장 기능을 위한 테이블을 만드는 중',
-       'config-install-mainpage-failed' => '대문을 삽입할 수 없습니다: $1',
-       'config-install-done' => "'''축하합니다!'''
-미디어위키가 성공적으로 설치되었습니다.
-
-설치 프로그램이 <code>LocalSettings.php</code> 파일을 만들었습니다.
-모든 설정이 포함되어 있습니다.
-
-파일을 다운로드하여 위키 설치의 거점에 넣어야 합니다. (index.php와 같은 디렉터리) 다운로드가 자동으로 시작됩니다.
-
-다운로드가 제공되지 않을 경우나 그것을 취소한 경우에는 아래의 링크를 클릭하여 다운로드를 다시 시작할 수 있습니다:
-
-$3
-
-'''참고:''' 이 생성한 설정 파일을 다운로드하지 않고 설치를 끝내면 이 파일은 나중에 사용할 수 없습니다.
-
-완료되었으면 '''[$2 위키에 들어갈 수 있습니다]'''.",
-       'config-download-localsettings' => '<code>LocalSettings.php</code> 다운로드',
-       'config-help' => '도움말',
-       'config-nofile' => '"$1" 파일을 찾을 수 없습니다. 이미 삭제되었나요?',
-       'config-extension-link' => '당신의 위키가 [//www.mediawiki.org/wiki/Manual:Extensions 확장 기능]을 지원한다는 것을 알고 계십니까?
-
-전체 확장 기능의 목록을 확인하려면 [//www.mediawiki.org/wiki/Category:Extensions_by_category 분류별 확장 기능]이나 [//www.mediawiki.org/wiki/Extension_Matrix 확장 기능 표]를 찾아보실 수 있습니다.',
-       'mainpagetext' => "'''미디어위키가 성공적으로 설치되었습니다.'''",
-       'mainpagedocfooter' => '[//meta.wikimedia.org/wiki/Help:Contents 이곳]에서 위키 소프트웨어에 대한 정보를 얻을 수 있습니다.
-
-== 시작하기 ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings 설정하기 목록]
-* [//www.mediawiki.org/wiki/Manual:FAQ 미디어위키 FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 미디어위키 발표 메일링 리스트]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources 내 언어로 미디어위키 지역화]',
-);
-
-/** Karachay-Balkar (къарачай-малкъар)
- * @author Iltever
- */
-$messages['krc'] = array(
-       'mainpagetext' => "'''«MediaWiki» тыйыншлы салынды.'''",
-       'mainpagedocfooter' => "Бу вики бла къалай ишлерге ангылатхан информацияны [//meta.wikimedia.org/wiki/Help:Contents_User's_Guide къошулуучугъа юретиуде] табаргъа боллукъду.
-
-== Файдалы ресурсла ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings тюрлендириулени списогу (ингил.)];
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-ни юсюнден кёб берилген соруула];
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-ни джангы версиясыны чыкъгъанын билдириу письмола].", # Fuzzy
-);
-
-/** Colognian (Ripoarisch)
- * @author Mormegil
- * @author Purodha
- * @author Reedy
- */
-$messages['ksh'] = array(
-       'config-desc' => 'Et Projramm för Mediwiki opzesäze.',
-       'config-title' => 'MediaWiki $1 opsäze',
-       'config-information' => 'Enfomazjuhn',
-       'config-localsettings-upgrade' => 'De Dattei <code lang="en"><code>LocalSettings.php</code></code> es ald doh.
-De Projramme vum Wiki künne op der neußte Shtand jebraat wääde:
-Donn doför dä Wäät vum <code lang="en">$wgUpgradeKey</code> en dat heh Feld enjävve.
-Do fenggs_et en dä Dattei <code lang="en"><code>LocalSettings.php</code></code> om ẞööver.',
-       'config-localsettings-cli-upgrade' => 'En Dattei <code lang="en"><code>LocalSettings.php</code></code> es jefonge woode.
-Öm et Wiki_Projramm op ene neue Shtand ze bränge, donn <code lang="en">update.php</code> oproofe.',
-       'config-localsettings-key' => 'Der Schlößel för et Projramm op ene neue Schtand ze bränge:',
-       'config-localsettings-badkey' => 'Dinge Schlößel paß nit.',
-       'config-upgrade-key-missing' => 'Mer han jefonge, dat MediaWiki ald enschtalleed es.
-Üm de Projramme un Daate o der neue Schtand bränge ze künne, dunn aan et Engk vun dä Dattei <code lang="en"><code>LocalSettings.php</code></code> op dämm ẞööver:
-
-$1
-
-aanhange.',
-       'config-localsettings-incomplete' => 'Mer han en Dattei <code lang="en"><code>LocalSettings.php</code>:</code> jefonge, ävver di schingk nit kumplätt ze sin.
-De Varijable <code lang="en">$1</code> es nit jesatz.
-Bes esu joot, un donn di Dattei esu aanpaße, dat se jesaz ea, un dann donn op „{{int:config-continue}}“ klecke.',
-       'config-localsettings-connection-error' => 'Ene Fähler es opjetrodde wi mer en Verbendung noh de Datebangk opmaache wullte met dä Enshtellunge uß dä Dattei <code lang="en">LocalSettings</code> udder uß dä Dattei <code lang="en">LocalSettings</code> un et hät nit jeflupp. Bes esu joot un dat repareere un versöhg et dann norr_ens.
-
-$1',
-       'config-session-error' => 'Ene Fähler es opjetrodde beim Aanmelde för en Sezung: $1',
-       'config-session-expired' => 'De Daate för Ding Setzung sinn wall övverholld of afjeloufe.
-De Setzungunge sin esu enjeshtallt, nit mieh wi $1 ze doore.
-Dat kanns De verlängere, endämm dat De de <code lang="en">session.gc_maxlifetime</code> en dä Dattei <code>php.ini</code> jrüüßer määß.
-Don dat Projramm för et Opsäze norr_ens aanschmiiße.',
-       'config-no-session' => 'De Daate för Ding Setzung sinn verschött jejange.
-Donn en dä Dattei <code>php.ini</code> nohloore, ov dä <code lang="en">session.save_path</code> op e zopaß Verzeijschneß zeisch.',
-       'config-your-language' => 'Ding Schprooch:',
-       'config-your-language-help' => 'Donn heh di Shprooch ußsöhke, di dat Enshtallzjuhnsprojramm kalle sull.',
-       'config-wiki-language' => 'Dem Wiki sing Shprooch:',
-       'config-wiki-language-help' => 'Donn heh di Shprooch ußsöhke, di et Wiki shtandattmääßesch kalle sull.',
-       'config-back' => '← Retuur',
-       'config-continue' => 'Wigger →',
-       'config-page-language' => 'Schprooch',
-       'config-page-welcome' => 'Wellkumme beim MediaWiki!',
-       'config-page-dbconnect' => 'Met dä Daatebangk Verbenge',
-       'config-page-upgrade' => 'En Inshtallzjuhn op der neuste Shtand bränge',
-       'config-page-dbsettings' => 'Parrameeter för de Daatebangk',
-       'config-page-name' => 'Name',
-       'config-page-options' => 'Ennställunge',
-       'config-page-install' => 'Opsäzze',
-       'config-page-complete' => 'Fäädesch!',
-       'config-page-restart' => 'Et Opsäze norr_ens neu aanfange',
-       'config-page-readme' => 'Donn mesch lässe! (<i lang="en">read me</i>)',
-       'config-page-releasenotes' => 'Henwies för heh di Version vum Projramm (<i lang="en">Release notes</i>)',
-       'config-page-copying' => 'Ben aam Kopeere',
-       'config-page-upgradedoc' => 'Ben op der neuste Stand aam bränge',
-       'config-page-existingwiki' => 'Mer han ald e Wiki!',
-       'config-help-restart' => 'Wells De all Ding enjejovve Sachee fottjeschmesse han, un dä janze Vörjang vun fürre aan neu aanfange?',
-       'config-restart' => 'Joh, neu aanfange!',
-       'config-welcome' => '=== Ömjevong Prööfe ===
-Mer maache en Aanzal jrundlääje Prövunge, öm erus ze fenge, ov di Ömjevong heh paß, för Mediawiki opzesäze.
-Wann de Hölp bem Opsäze bruchs, donn wigger ssare, wat erus kohm, wat heh shteiht.',
-       'config-copyright' => "=== Urhävverrääsch un Lizänzbedengunge ===
-
-\$1
-
-Dat  Projramm heh es frei, mer kann et wiggerjävve un verdeijle un och verändere ungger dä Bedengunge vun de  GNU <i lang=\"en\">General Public License</i> (Alljemeine öffentlesche Lizänz) wi se vun de <i lang=\"en\">Free Software Foundation</i> (de Shteftung för frei Projramme) veröffentlesch woode es. Dobei kanns De Der de Version 2 vun dä Lizanz ußsöhke, udder jeede Version donoh, wi et Der jefällt.
-
-Dat Projramm weed wigger jejovve met dä Hoffnung, dat et jät nöz, ävver '''ohne Jarrantie''', sujaa ohne de onußjeshproche Jarantie, '''verkoufbaa''' ze sin, udder '''för öhnds_ene beshtemmpte Zweck ze bruche''' ze sin.
-Liß de GNU <i lang=\"en\">General Public License</i> sellver, öm mieh ze erfahre.
-
-Do sullts en <doclink href=Copying>Kopie vun dä alljemene öffentlesche Lizänz vun dä GNU</doclink> (<i lang=\"en\">GNU General Public License</i>) zosamme met heh däm Projramm krääje han. Wann dat nit esu es, schrief aan de <i lang=\"en\">Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA</i>. udder [http://www.gnu.org/copyleft/gpl.html liß se online övver et Internet].",
-       'config-sidebar' => '* [//www.mediawiki.org MediaWiki sing Hompäjdsch]
-* [//www.mediawiki.org/wiki/Help:Contents Handbooch för Aanwender]
-* [//www.mediawiki.org/wiki/Manual:Contents Handbooch för Administratore un Wiki_Köbesse]
-* [//www.mediawiki.org/wiki/Manual:FAQ Öff jeshtallte Froore met Antwoote]
-----
-* <doclink href=Readme>Liß Mesch! (<i lang="en">Read me</i>)</doclink>
-* <doclink href=ReleaseNotes><i lang="en">Release notes</i> Övver heh di Projrammversion</doclink>
-* <doclink href=Copying><i lang="en">Copying</i> — Lizänzbeshtemmunge</doclink>
-* <doclink href=UpgradeDoc><i lang="en">Upgrading</i> — Ob en neu Projrammversion jonn</doclink>',
-       'config-env-good' => 'De Ömjävung es jeprööf.
-Do kanns MediaWiki opsäze.',
-       'config-env-bad' => 'De Ömjävung es jeprööf.
-Do kanns MediaWiki nit opsäze.',
-       'config-env-php' => 'PHP $1 es doh.',
-       'config-env-php-toolow' => 'PHP $1 es enshtalleert.
-Ävver MediaWiki bruch PHP $2 udder hühter.',
-       'config-unicode-using-utf8' => 'För et <i lang="en">Unicode</i>-Nommaliseere dom_mer däm <i lang="en">Brion Vibber</i> sing Projramm <code lang="en">utf8_normalize.so</code> nämme.',
-       'config-unicode-using-intl' => 'För et <i lang="en">Unicode</i>-Nommaliseere dom_mer dä [http://pecl.php.net/intl Zohsaz <code lang="en">intl</code> uss em <code lang="en">PECL</code>] nämme.',
-       'config-unicode-pure-php-warning' => '\'\'\'Opjepaß:\'\'\' Mer kunnte dä [http://pecl.php.net/intl Zohsaz <code lang="en">intl</code> uss em <code lang="en">PECL</code>] för et <i lang="en">Unicode</i>-Nommaliseere nit fenge. Dröm nämme mer dat eijfache, ävver ärsh lahme, <i lang="en">PHP</i>-Projrammshtöck doför.
-För jruuße Wikis met vill Metmaachere doht Üsch die Sigg övver et [//www.mediawiki.org/wiki/Unicode_normalization_considerations <i lang="en">Unicode</i>-Nommaliseere] (es op Änglesch) aanloore.',
-       'config-unicode-update-warning' => "'''Opjepaß:''' Dat Projramm för der <i lang=\"en\">Unicode</i> zo normaliseere boud em Momang op en  ählter Version vun dä Bibliothek vum [http://site.icu-project.org/ ICU-Projäk] op.
-Doht di [//www.mediawiki.org/wiki/Unicode_normalization_considerations op der neuste Shtand bränge], wann auf dat Wiki em Äänz <i lang=\"en\">Unicode</i> bruche sull.",
-       'config-no-db' => 'Mer kunnte kei zopaß Daatebangk-Driiverprojamm fenge.
-Mer bruche e Daatebangk-Driiverprojamm för PHP. Dat moß enjeresht wääde.
-Mer künne met heh dä Daatebangke ömjonn: $1.
-
-Wann De nit om eijene Rääshner bes, moß De Dinge <i lang="en">provider</i> bedde, dat hä Der ene zopaß Driiver enresht.
-Wann de PHP sellver övversaz häs, donn e Zohjangsprjramm för en Daatebangk enbenge, för e Beishpell met: <code  lang="en">./configure --with-mysql</code> op ene <i lang="en">command shell</i>.
-Wann De PHP uss enem <i lang="en">Debian</i> udder <i lang="en">Ubuntu</i> Pakätt enjeresht häs, moß De dann och noch et <code lang="en">php5-mysql</code> op Dinge Räschner bränge.',
-       'config-outdated-sqlite' => '\'\'\'Opjepaß:\'\'\' <i lang="en">SQLite</i> $1 es enschtaleert. Avver MediaWiki bruch <i lang="en">SQLite</i> $2 udder hühter. <i lang="en">SQLite</i> kann dröm nit enjesaz wääde.',
-       'config-no-fts3' => "'''Opjepaß:''' De Projramme vum <i lang=\"en\">SQLite</i> sin der ohne et [//sqlite.org/fts3.html FTS3-Modul] övversaz, dröm wääde de Funxjohne för et Söhke fähle.",
-       'config-register-globals' => "'''Opjepaß:''' dem PHP singe Schallder <code lang=\"en\">[http://php.net/register_globals register_globals]</code> es enjeschalldt.
-'''Donn dä ußmaache, wann De kann.'''
-MediaWiki löp och esu, dä künnt ävver Sesherheitslöcke opmaache, di mer noch nit jefonge un eruß jemaat hät.",
-       'config-magic-quotes-runtime' => "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]</code> es enjeschalldt.
-Dä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere.
-Domet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.
-Dat heiß, mer moß en affschallde, söns jeiht nix.",
-       'config-magic-quotes-sybase' => "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]</code> es enjeschalldt.
-Dä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere.
-Domet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.
-Dat heiß, mer moß en affschallde, söns jeiht nix.",
-       'config-mbstring' => "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]</code> es enjeschalldt.
-Dat sorresch för Fähler un kann enjejovve Daate esu kapott maach, dat doh draan nix mieh ze repareere es.
-Domet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.
-Dat heiß, mer moß en affschallde, söns jeiht nix.",
-       'config-ze1' => "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]</code> es enjeschalldt.
-Dat sorresch för schräcklejje Fähler em MediaWiki.
-Dat kam_mer domet nit ennreeshte un och nit loufe lohße.
-Dat heiß, mer moß en affschallde, söns jeiht nix.",
-       'config-safe-mode' => "'''Opjepaß:''' Dem PHP singe <code lang=\"en\">[http://www.php.net/features.safe-mode safe mode]</code> es aanjeschalldt. Dat kann Ärjer maache, besönders beim Datteie Huhlaade bei de Ongershtözung för <code lang=\"en\">math</code>-Befähle.",
-       'config-xml-bad' => 'Dem PHP sing XML-Modul es nit ze fenge.
-MediaWiki bruch Funxjohne en däm Modul un deiht et esu nit.
-Wann De <i lang="en">Mandrake</i> aam loufehäs, donn dat Pakätt <code lang="en">php-xml</code> enstalleere.',
-       'config-pcre' => 'Dem PHP sing Modul för <i lang="en">PCRE</i> schingk ze fähle.
-MediaWiki deiht et nit der ohne de Funxjohne för de rejolähre Ußdrök vun dä Zoot, wi <i lang="en">Perl</i> se kännt.',
-       'config-pcre-no-utf8' => "'''Dä:''' Et PHP-Modul <i lang=\"en\">PCRE</i> schingk ohne de <i lang=\"en\">PCRE_UTF8</i>-Aandeile övversaz ze sin.
-MediaWiki bruch dä UTF-8-Krohm ävver, öm ohne Fähler loufe ze künne.",
-       'config-memory-raised' => 'Der jrühzte zohjelasse Shpeisherbedarf vum PHP, et <code lang="en">memory_limit</code>, shtund op $1 un es op $2 erop jesaz woode.',
-       'config-memory-bad' => "'''Opjepaß:''' Dem PHP singe Parameeter <code lang=\"en\">memory_limit</code> es \$1.
-Dat es wall ze winnisch.
-Et Enreeschte kunnt doh draan kappott jon!",
-       'config-ctype' => "'''Fähler:''' <i lang=\"en\">PHP</i> moß met dä Ongerschtözong för der [http://www.php.net/manual/en/ctype.installation.php <code lang=\"en\">Ctype</code> Zohsaz] övversaz woode sin.",
-       'config-xcache' => 'Dä <code lang="en">[http://xcache.lighttpd.net/ XCache]</code> es ennjeresht.',
-       'config-apc' => 'Dä <code lang="en">[http://www.php.net/apc APC]</code> es ennjeresht.',
-       'config-wincache' => 'Dä <code lang="en">[http://www.iis.net/download/WinCacheForPhp WinCache]</code> es ennjeresht.',
-       'config-no-cache' => '\'\'\'Opjepaß:\'\'\' Mer kunnte dä <code lang="en">[http://www.php.net/apc APC]</code>, dä <code lang="en">[http://xcache.lighttpd.net/ XCache]</code> un dä <code lang="en">[http://www.iis.net/download/WinCacheForPhp WinCache]</code> nit fenge.
-Et <i lang="en">object caching</i> es nit müjjelesh un ußjeschalldt.',
-       'config-mod-security' => "'''Opjepaß''': Dinge Webßööver hät <code lang=\"en\">[http://modsecurity.org/ mod_security]</code> enjeschalldt. Wann doh derbei en Enschtällong nit janz akeraat paßß, dann kann et goot sin, dat mer Probleme met MeedijaWiki un oc met ander Projramme kritt, die zohlööt, dat vun ußerhallef öhndsene Krohm op dä Webßööver jebraat wääde künnt.Beloor Der di Sigg <code lang=\"en\">[http://modsecurity.org/documentation/ mod_security documentation]</code> udder donn met dä Fachlück för Dinge Webßööver kalle, wann zohfälleje un koomijje Fähler bemerke deihß.",
-       'config-diff3-bad' => 'Mer han <i lang="en">GNU</i> <code lang="en">diff3</code> nit jefonge.',
-       'config-git' => 'Mer han de Väsjohn <code>$1</code> vun däm Väsjohnsverwalldongsprojamm <i lang="en">Git</i> jefonge.',
-       'config-git-bad' => 'Dat Väsjohnsverwalldongsprojamm <i lang="en">Git</i> ham_mer nit jefonge.',
-       'config-imagemagick' => 'Mer han <i lang="en">ImageMagick</i> jefonge: <code>$1</code>.
-Et Ömrääschne en Minni-Beldsche weed müjjelesch sin, wann De et Belder Huhlaade zohlöhß.',
-       'config-gd' => 'Mer han de ennjeboute GD-Jrafik-Projramm-Biblijotheek jefonge.
-Et Ömrääschne en Minni-Beldsche weed müjjelesch sin, wann De et Belder Huhlaade zohlöhß.',
-       'config-no-scaling' => 'Mer han weeder de GD-Jrafik-Projramm-Biblijotheek, noch <i lang="en">ImageMagick</i> jefonge.
-Et Ömrääschne en Minni-Beldsche weed ußjeschalldt.',
-       'config-no-uri' => "'''Fähler:''' Mer kunnte der aktoälle <i lang=\"en\">URI</i> nit erusfenge.
-Et Enreeschte es domet heh aam Engk.",
-       'config-no-cli-uri' => "'''Opjepaß''': <code lang=\"en\">--scriptpath</code> es nit aanjejovve, mer nämme der Schtandatt: <code>\$1</code>.",
-       'config-using-server' => 'Mer nämmen dem ẞööver singe Name: „<nowiki>$1</nowiki>“.',
-       'config-using-uri' => 'Mer nämmen dem ẞööver singe <i lang="en">URL</i>: „<nowiki>$1$2</nowiki>“.',
-       'config-uploads-not-safe' => "'''Opjepaß:''' Uß däm jewöhnlijje Verzeichnes för de huhjelaade Datteie, dat es <code>$1</code>, künnte öhnzwällsche Skrepte un Projramme ußjeföhrt wääde. Och wann MediaWiki de huhjelaade Datteie prööf, dat kein bekannte Risike dren sin, sullt mer doch dat [//www.mediawiki.org/wiki/Manual:Security#Upload_security Sesherheitsloch] zoh maache, ih dat mer et Dattei Huhlaade zohlöht.",
-       'config-no-cli-uploads-check' => "'''Opjepaß''': <code>\$1</code> es dat Schtandatt-Verzeijschneß för et Datteije-Huhlaade. Beim Opsäze met <abbr lang=\"en\" title=\"Call Level Interface\">CLI</abbr> donn mer ävver nit övverpröhve, dat dat jeschöz es dojääje, dat Skrepte vun doh loufe künne, di mer nit loufe han well.",
-       'config-brokenlibxml' => 'Op Dingem Rääschner loufe Versione vun PHP un <code lang="en">libxml2</code> zosamme, di ävver nit zosamme paßße, un de Daate em MediaWiki un ander Web_Aanwändunge [//bugs.php.net/bug.php?id=45996 bug kapott maache].
-Jangk op PHP 5.2.9 udder dohnoh un op <code lang="en">libxml2</code> 2.7.3 udder dohnoh.
-Heh jeihd et nit wigger.',
-       'config-using531' => 'MediaWiki läuf nit met PHP $1 zosamme wääje enem [//bugs.php.net/bug.php?id=50394 Fähler em Zosammehang met Parrameetere för <code lang="en">__call()</code>].
-Jangk op de Version 5.3.2 vum <i lang="en">PHP</i> ov dohnoh, udder op de Version 5.3.0 udder dovöör, öm dat Problem ze ömjonn.
-Heh jeiht et nit wigger.',
-       'config-suhosin-max-value-length' => '<i lang="en">Suhosin</i> es enschtalleet. Dröm kann ene <code lang="en">GET</code>-Parrameeter nit övver {{PLURAL:$1|ei Byte|$1 Bytes|noll Byte}} lang wääde. Dem MediaWiki singe <i lang="en">ResourceLoader</i> kütt doh zwa drömeröm, ävver dat bräms. Wann müjelesch, doht <code lang="en">suhosin.get.max_value_length</code> en dä Dattei <code lang="en">php.ini</code> op 1024 Bytes udder drövver enschtälle, un dann moß <code lang="en">$wgResourceLoaderMaxQueryLength</code> en dä Dattei <code lang="en">LocalSettings.php</code> op däsälve Wäät jesaz wääde.',
-       'config-db-type' => 'De Zoot Daatebangk:',
-       'config-db-host' => 'Dä Name vun däm Rääschner met dä Daatebangk:',
-       'config-db-host-help' => 'Wann Dinge ẞööver för de Daatebangk ob enem andere Rääschner es, donn heh dämm singe Name udder dämm sing <i lang="en">IP</i>-Addräß enjävve.
-
-Wann De ob enem Meetẞööver beß, weet Der Dinge Provaider odder däm sing Dokemäntazjuhn saare, wat De endraare moß.
-
-Wann De ob enem ẞööver onger <i lang="en">Windows</i> am enshtalleere bes un en <i lang="en">MySQL</i>-Daatebangk häs, künnd_et sin, dat „<code lang="en">localhost</code>“ nit douch för der Name vum ẞööver. Wann dad-esu es, versöhg et ens met „<code lang="en">127.0.0.1</code>“ als <i lang="en">IP</i>-Addräß vum eije Rääschner.
-
-Wann De ene <i lang="en">PostgreSQL</i>-ẞööver häs, donn dat Fäld läddesch lohße, öm en Verbendung övver e <i lang="en">Unix socket</i> opzemaache.',
-       'config-db-host-oracle' => 'Dä Daatebangk ier <i lang="en" title="Transparent Network Substrate">TNS</i>:',
-       'config-db-host-oracle-help' => 'Donn ene jöltije [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm „<i lang="en">Local Connect</i>“-Name] aanjävve. De Dattei „<code lang="en">tnsnames.ora</code>“ moß för heh dat Projamm seschbaa un ze Lässe sin.<br />Wann heh de Projamm_Biblijoteeke für de Aanwänderprojramme för de Version 10g udder neuer enjesaz wääde, kam_mer och et [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm „<i lang="en">Easy Connect</i>“] jenumme wääde för der Name ze verjävve.',
-       'config-db-wiki-settings' => 'De Daate vum Wiki',
-       'config-db-name' => 'Dä Name vun dä Daatebangk:',
-       'config-db-name-help' => 'Jiff ene Name aan, dä för Ding Wiki passe deiht.
-Doh sullte kei Zweschrereum un kein Stresche dren sin.
-
-Wann De nit op Dingem eije Rääschner bes, künnt et sin, dat Dinge Provaider Der extra ene beshtemmpte Name för de Daatebangk jejovve hät, uffr dat de dä drom froore moß udder dat De de Daatebangke övver e Fommulaa selver enreeschte moß.',
-       'config-db-name-oracle' => 'Schema för de Daatebangk:',
-       'config-db-account-oracle-warn' => 'Mer han drei Aate, wi mer <i lang="en">Oracle</i> als Daatebangk aanbenge künne.
-
-Wann De ene neue Zohjang op de Daatenbangk met Naame un Paßwoot mem Projramm för et Opsäze aanlääje wells, dann jif ene Zohjang met däm Rääsch „<i lang="en">SYSDBA</i>“ aan, dä et alld jitt, un jif däm di Daate aan för dä neue Zohjang aanzelääje.
-Do kanns och dä neue Zohjang vun Hand aanlääje un heh beim Opsäze nur dää aanjävve — wann dä dat Rääsch hät, en de Daatebangk Schema_Objäkte aanzelääje.
-Udder De jiß zwei ongerscheidlijje Zohjäng op de Daatenbangk aan, woh eine vun dat Rääsch zom Aanlääje hät un dä andere moß dat nit un es för der nomaale Bedrief zohshtändesch.
-
-En Skrep, wat ene Zohjang op de Daatenbangk aanlääsch met all dä nüüdejje Rääschde, fengks De em Verzeishneß <code lang="en">maintenance/oracle/</code> vun Dingem MediaWiki. Donn draan dengke, dat ene Zohjang met beschrängkte Rääschde all di Müjjeleschkeite för et Waade un Repareere nit hät, di de jewöhnlejje Zoot Zohjang met sesh brängk.',
-       'config-db-install-account' => 'Der Zohjang för en Enreeschte',
-       'config-db-username' => 'Dä Name vun däm Aanwender för dä Zohjref op de Daatebangk:',
-       'config-db-password' => 'Et Paßwoot vun däm Aanwender för dä Zohjref op de Daatebangk:',
-       'config-db-password-empty' => 'Jiv e Paßwoot aan, för dä neue Aanwender för dä Zohjref op de Daatebangk, $1.
-Ed es zwa müjjelesch, Aanwender för dä Zohjref op de Daatebangk der ohne e Paßwoot aanzelääje,
-ävver dat wöhr en schwere Jevah för de Sescherheit vum Wiki.',
-       'config-db-install-username' => 'Jiv ene Name aan för dä Aanwender för dä Zohjref op de Daatebangk beim Enshtalleere.
-Dat es keine Metmaacher_Name em Wiki — heh dä Name es alleins en der Daatebangk bikannt.',
-       'config-db-install-password' => 'Jiv e Paßwoot aan för dä Aanwender för dä Zohjref op de Daatebangk beim Enshtalleere.
-Dat es kei Paßwoot för ene Metmaacher em Wiki — et es alleins en der Daatebangk bikannt.',
-       'config-db-install-help' => 'Donn dä Name un et Paßwoot vun däm Aanwänder för der Zohjreff op de Daatebangk jäz för et Enreeshte aanjävve.',
-       'config-db-account-lock' => 'Donn dersälve Name un et sälve Paßwoot för der nomaale Bedrief vum Wiki bruche',
-       'config-db-wiki-account' => 'Dä Name vun däm Aanwender för dä Zohjref op de Daatebangk em nomaale Bedrief:',
-       'config-db-wiki-help' => 'Jiv ene Name un e Paßwoot aan, för dä Aanwender för dä Zohjref op de Daatebangk, wann et wiki nommaal aam Loufe es.
-Wan et dä Name en der Daatebangk noch it jit, un dä Aanwender för dä Zohjref op de Daatebangk beim Enshtalleere
-jenooch Beräschtijunge hät, läät dä heh dä Aanwender en der Daatebangk aan un jidd_em di Rääschde, di dä nüüdesch hät, ävver nit mieh.',
-       'config-db-prefix' => 'Vörsaz för de Name vun de Tabälle en de Daatebangk:',
-       'config-db-prefix-help' => 'Wann ein Daatebangk för mieh wi ein Wiki udder e Wiki uns söns jät zosamme jebruch weed, dann kam_mer noch jet vör de Tabälle ier Name säze. Esu ene Vörsaz sull dubblte Tabällename vermeide hälfe.
-Donn kein Zwescheräum enjävve!
-
-Jewöhnlesch bliev dat Feld heh ävver läddesch.',
-       'config-db-charset' => 'Dä Daatebangk iere Zeishesaz',
-       'config-charset-mysql5-binary' => 'MySQL (4.1 udder 5.0) binär',
-       'config-charset-mysql5' => 'MySQL (4.1 udder 5.0) UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 röckwääts kompatibel UTF-8',
-       'config-charset-help' => "''' Opjepaß:'''
-Wann De et '''röckwääts kompatibel UTF-8 Fommaat''' nemmps, met dem <i lang=\"en\">MySQL</i> singe Version4.1 udder hüüter, dann künnt dat all di Zeishe kappott maache, die nit em <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> sen, un domet all ding Sesherungskopieje kapott maache, wat mer nieh mieh retuur krijje kann.
-
-Beim Shpeishere em '''binäre Fomaat''' deiht MediaWiki de Täxte, di em UTF-8 Fommaat kumme, en dä Daatebangk en binär kodeerte Daatefälder faßhallde.
-Dat es flöcker un spaasaamer wi et UTF-8 Fommaat vum <i lang=\"en\">MySQL</i> un määd et müjjelesch, all un jeedes <i lang=\"en\">Unicode</i>-Zeishe met faßzehallde.
-
-Beim Shpeishere em '''UTF-8 Fomaat''' deiht et <i lang=\"en\">MySQL</i> der Zeishesaz un de Kodeerung vun dä Daate känne, un kann se akeraat aanzeije un ömwandelle,
-allerdengs künne kein Zeishe ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrundlääje Knubbel för vill Shprooche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeshpeishert wääde.",
-       'config-mysql-old' => 'Mer bruche <i lang="en">MySQL</i> $1 udder neuer. Em Momang es <i lang="en">MySQL</i> $2 aam Loufe.',
-       'config-db-port' => 'De Pooz-Nommer (<i lang="en">port</i>) för de Daatebangk:',
-       'config-db-schema' => 'Et Schema en de Datebangk för MediaWiki:',
-       'config-db-schema-help' => 'För jewöhnlesch es dat Schema en Odenong.
-Donn bloß jät draan ändere, wann De sescher weiß, dat dat nüüdesch es.',
-       'config-pg-test-error' => "Mer krijje kein Verbendung zor Daatebank '''$1''': $2",
-       'config-sqlite-dir' => 'Dem <i lang="en">SQLite</i> sing Daateverzeishnes:',
-       'config-sqlite-dir-help' => '<i lang="en">SQLite</i> hät all sing Daate zosamme en en einzel Dattei.
-
-En dat Verzeishneß, wat De aanjiß, moß dat Web_ẞööver_Projramm beim Opsäze eren schriive dörrve.
-
-Dat Verzeishneß sullt \'\'\'nit\'\'\' övver et Web zohjänglesch sin, dröm dom_mer et nit dohen, woh de <i lang="en">PHP</i>-Datteije sin.
-
-Mer donn beim Opsäze zwa uß Vöörssh en <code lang="en">.htaccess</code> Dattei dobei, ävver wann di nit werrek, künnte Lück vun ußerhallef aan Ding Daatebangk_Dattei eraan kumme.
-Doh shtonn Saache dren, wi de Addräße för de Metmaacher ier <i lang="en">e-mail</i> un de verschlößelte Paßwööter un de vershtoche un de fottjeschmeße Sigge un ander Saache ussem Wiki, di mer nit öffentlesch maache darref.
-
-Donn Ding Daatebangk et beß janz woh anders hen, noh <code lang="en">/var/lib/mediawiki/\'\'wikiname\'\'</code> för e Beishpell.',
-       'config-oracle-def-ts' => 'Tabälleroum för der Shtandattjebruch:',
-       'config-oracle-temp-ts' => 'Tabälleroum för der Jebruch zweschedorsh:',
-       'config-type-mysql' => '<i lang="en">MySQL</i>',
-       'config-type-postgres' => '<i lang="en">PostgreSQL</i>',
-       'config-type-sqlite' => '<i lang="en">SQLite</i>',
-       'config-type-oracle' => '<i lang="en">Oracle</i>',
-       'config-support-info' => 'MediaWiki kann met heh dä Daatebangk_Süßteeme zosamme jonn:
-
-$1
-
-Wann dat Daatebangk_Süßteem, wat De nämme wells, onge nit dobei es, dann donn desch aan di Aanleidonge hallde, di bovve verlengk sen, öm et op Dingem ẞööver singem Süßteem müjjelesh ze maache, se aan et Loufe ze krijje.',
-       'config-support-mysql' => '* <i lang="en">$1</i> es dat vum MediaWiki et eets ongershtöz Daatebangksüßteem ([http://www.php.net/manual/de/mysql.installation.php Aanleidung för et Övversäze un Enreeschte von PHP met <i lang="en">MySQL</i> dobei, op Deutsch])',
-       'config-support-postgres' => '* <i lang="en">$1</i> es e bikannt Daatebangksüßteem met offe Quälltäxde, un en och en Wahl nävve <i lang="en">MySQL</i> ([http://www.php.net/manual/de/pgsql.installation.php Aanleidung för et Övversäze un Enreeschte von PHP met <i lang="en">PostgreSQL</i> dobei, op Deutsch]) Et sinn_er ävver paa klein Fählershe bekannt, um kunne dat em Momang för et reschtijje Werke nit emfähle.',
-       'config-support-sqlite' => '* <i lang="en">$1</i> es e eijfach Daatebangksüßteem, wat joot ongershtöz weed. ([http://www.php.net/manual/de/pdo.installation.php Aanleidong för et Övversäze un Enreeschte von PHP met <i lang="en">SQLite</i> dobei, op Deutsch])',
-       'config-support-oracle' => '* <i lang="en">$1</i> es e jeschäfflesch Daatebangksüßteem för Ferme. ([http://www.php.net/manual/de/oci8.installation.php Aanleidong för et Övversäze un Enreeschte von PHP met <i lang="en">OCI8</i> dobei, op Deutsch])',
-       'config-header-mysql' => 'De Enshtällunge för de <i lang="en">MySQL</i> Daatebangk',
-       'config-header-postgres' => 'De Enshtällunge för de <i lang="en">PostgreSQL</i> Daatebangk',
-       'config-header-sqlite' => 'De Enshtällunge för de <i lang="en">SQLite</i> Daatebangk',
-       'config-header-oracle' => 'De Enshtällunge för de <i lang="en">Oracle</i> Daatebangk',
-       'config-invalid-db-type' => 'Dat es en onjöltijje Zoot Daatebangk.',
-       'config-missing-db-name' => 'Do moß jät enjävve för dä Name vun dä Daatebangk.',
-       'config-missing-db-host' => 'Do moß jät enjävve för dä Name vun däm Rääschner met dä Daatebangk.',
-       'config-missing-db-server-oracle' => 'Do moß jät enjävve för dä Daatebangk ier <i lang="en" title="Transparent Network Substrate">TNS</i>.',
-       'config-invalid-db-server-oracle' => 'Dä Daatebangk ier <i lang="en" title="Transparent Network Substrate">TNS</i> kann nit „$1“ sin, dat es esu nit jöltesch.
-Döh dörve bloß <i lang="en" title="American Standard Code for Information Interchange">ASCII</i> Boochshtaabe (a-z, A-Z), Zahle (0-9), Ongerstreshe (_), un Punkte (.) dren vörkumme.',
-       'config-invalid-db-name' => 'Dä Daatebangk iere Name kann nit „$1“ sin, dä es esu nit jöltesch.
-Döh dörve bloß <i lang="en" title="American Standard Code for Information Interchange">ASCII</i> Boochshtaabe (a-z, A-Z), Zahle (0-9), Ongerstresh (_), un Bendeshtresh (-) dren vörkumme.',
-       'config-invalid-db-prefix' => 'Dä Vörsaz för de Name vun de Tabälle en de Daatebangk kann nit „$1“ sin, dä es esu nit jöltesch.
-Döh dörve bloß <i lang="en" title="American Standard Code for Information Interchange">ASCII</i> Boochshtaabe (a-z, A-Z), Zahle (0-9), Ongerstreshe (_), un Bendeshtreshe (-) dren vörkumme.',
-       'config-connection-error' => '$1.
-
-Donn de Name för dä Rääschner, vun däm Aanwender för dä Zohjref op de Daatebangk, un et Paßwoot prööfe, repareere, un dann versöhg et norr_ens.',
-       'config-invalid-schema' => 'Dat Schema för MediaWiki kann nit „$1“ sin, dä Name wöhr esu nit jöltesch.
-Döh dörve bloß <i lang="en" title="American Standard Code for Information Interchange">ASCII</i> Boochshtaabe (a-z, A-Z), Zahle (0-9), un Ongerstreshe (_) dren vörkumme.',
-       'config-db-sys-create-oracle' => 'Dat Projramm för MediaWiki opzesäze kann bloß <i lang="en">SYSDBA</i> bruche för ene neue Zohjang zor Daatebangk enzereeschte!',
-       'config-db-sys-user-exists-oracle' => 'Dä Aanwender „$1“ för dä Zohjref op de Daatebangk jidd_et ald. <i lang="en">SYSDBA</i> kam_mer bloß bruche, för ene neue Zohjang enzereeschte!',
-       'config-postgres-old' => 'Mer bruche <i lang="en">PostgreSQL</i> $1 udder neuer. Em Momang es <i lang="en">PostgreSQL</i> $2 aam Loufe.',
-       'config-sqlite-name-help' => 'Söhk enen Name uß, dä Ding Wiki beschrief.
-Donn kein Bendeschresch un Zweschräum en däm Name bruche.
-Dä Name weed för der Dateiname för de <i lang="en">SQLite</i> Daatebangk jenumme.',
-       'config-sqlite-parent-unwritable-group' => 'Mer kunnte dat Verzeischneß för de Daate, <code lang="en"><nowiki>$1</nowiki></code>, nit enreeschte, weil dat Projramm fö dä Web_ẞööver en dat Verzeischneß doh drövver, <code><nowiki>$2</nowiki></code>, nix erin donn darref.
-
-Mer han dä Name vun däm Zohjang op et Süßteem eruß jefonge, onger dämm dat Web_ẞööver_Projramm läuf. Jez moß De bloß doför sorrje, dat dä en dat Verzeischneß  <code><nowiki>$3</nowiki></code> schrieve kann, öm heh wigger maache ze künne.
-Ob enem Süßteem met <i lang="en">Unix</i>- oder <i lang="en">Linux</i> jeiht dat esu:
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Mer kunnte dat Verzeischneß för de Daate, <code lang="en"><nowiki>$1</nowiki></code>, nit enreeschte, weil dat Projramm fö dä Web_ẞööver en dat Verzeischneß doh drövver, <code><nowiki>$2</nowiki></code>, nix erin donn darref.
-
-Mer han dä Name vun däm Zohjang op et Süßteem nit eruß fenge künne, onger dämm dat Web_ẞööver_Projramm läuf. Jez moß De bloß doför sorrje, dat dä en dat Verzeischneß  <code><nowiki>$3</nowiki></code> schrieve kann, öm heh wigger maache ze künne. Wann De dä Name och nit weiß, maach, dat jeeder_ein doh schrieve kann.
-Ob enem Süßteem met <i lang="en">Unix</i>- oder <i lang="en">Linux</i> jeiht dat esu:
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Ene Fähler es opjetrodde beim Aanlääje vum Daate_Verzeishneß „$1“.
-Don dä Plaz för et Shpeishere prööfe un Repareere, dann versöhg et norr_ens.',
-       'config-sqlite-dir-unwritable' => 'Mer künne nit en dat Verzeishneß „$1“ schrieeve
-Donn dohvun de Zohjreffs_Rääschde esu verändere, dat der Webßööver doh dren schrieeve kann, un dann versöhg et norr_ens.',
-       'config-sqlite-connection-error' => '$1.
-
-Donn onge dat Verzeishnes un der Name vun der Daatebangk prööfe un repareere, un dann versöhg_et norr-ens.',
-       'config-sqlite-readonly' => 'En di Dattei <code lang="en">$1</code> künne mer nit schrieve.',
-       'config-sqlite-cant-create-db' => 'Mer kunnte di Dattei <code lang="en">$1</code> för de Daatebangk nit aanlääje.',
-       'config-sqlite-fts3-downgrade' => 'Dat PHP heh hät kein Ongershtözong för FTS3, dröm donn mer de Daatebangktabälle eronger shtoofe.',
-       'config-can-upgrade' => 'Et sinn-er ald Daatebangktabelle vum MediaWiki en dä Daatebangk.
-Öm di op der Shtand vum MediaWiki $1 ze bränge, donn jäz op „{{int:config-continue}}“ klecke.',
-       'config-upgrade-done' => "Alles es jäz om neue Shtand.
-
-Mer kann dat Wiki jäz [\$1 bruche].
-
-Wann De Ding Dattei <code lang=\"en\">LocalSettings.php</code> neu schrieve wells, donn onge op dä Knopp klicke.
-Dat dom_mer ävver '''nit vörschlonn'''em Jääjedeil, ußer, wann et Probleme mem Wiki jitt.",
-       'config-upgrade-done-no-regenerate' => 'Alles es jäz om neue Shtand.
-
-Mer kann dat Wiki jäz [$1 bruche].',
-       'config-regenerate' => 'Donn de Dattei <code lang="en">LocalSettings.php</code> neu opsäze →',
-       'config-show-table-status' => 'Et Kommando <code lang="en"><code>SHOW TABLE STATUS</code></code> aan de Daatebangk es donävve jejange!',
-       'config-unknown-collation' => "'''Opjepaß:''' De Daatabangk deiht en onbikannte Reijefollsch bruche, för Booshtaabe un Zeishe ze verjliishe un ze zotteere.",
-       'config-db-web-account' => 'Dä Zohjang zor Daatebangk för et Wiki',
-       'config-db-web-help' => 'Donn ene Name un e Paßwoot för der Zohjang zor Daatebangk för et Wiki em nomaale Bedrief aanjävve.',
-       'config-db-web-account-same' => 'Donn dersällve Zohjang nämme, wi heh beim Opsäze.',
-       'config-db-web-create' => 'Donn dä Zohjang aanlääje, wann dä noch nit doh es.',
-       'config-db-web-no-create-privs' => 'Dä Zohjang för et Opsäze es nit berääschtesch, ene ander Zohjan enzereeschte.
-Dä aanjejovve Zohjang för der Nomaalbedrief moß dröm schunn enjersht sen!',
-       'config-mysql-engine' => 'De Zoot udder et Fommaat vun de Tabälle:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => '\'\'\'Opjepaß:\'\'\' <i lang="en">MyISAM</i> es als Speicher för <i lang="en">MySQL</i> nit besönders joot för et Zosammeschpell met MediaWiki zo bruche:
-* Dorj_et kumplätte Sperre vun Tabälle, künne koum ens Saache parrallel en dä Daatebangk jedonn wääde.
-* Dat Fomaat es anfällesch för Probleme met de Daate.
-* Et weed vun MediaWiki nit ėmmer zopaß ongerschtöz.
-
-Wann Ding <i lang="en">MySQL</i> et Schpeischere en <i lang="en">InnoDB</i>-Datteije ongerschtöze deiht, dom_mer dat nohdröcklesch ämfähle.
-Kann dä ẞööver dat nit, künnd et joode jelääjeheit sin, dä ens op der neuste Schtand ze bränge.',
-       'config-mysql-only-myisam-dep' => '\'\'\'Opjepaß:\'\'\' <i lang="en">MyISAM</i> es de einzeje Zoot Speischerprojramm för <i lang="en">MySQL</i>, di nit för MediaWiki ze ämfähle es, weil:
-* wääje dem Schpärre vun jannze Tabälle sin koum paralleele Axjuhne en dä Daatebangk möjjelesch,
-* et es aanfällesch för Probleeme met de Daate es, un
-* et weed vun MediaWiki nit emmer jood ongerschtöz.
-
-Ding Enschtallazjuhn vum <i lang="en">MySQL</i> kann nit met <i lang="en">InnoDB</i> ömjonn.
-Wi wöhr et met ener neuere väsjohn vum <i lang="en">MySQL</i>?',
-       'config-mysql-engine-help' => "'''InnoDB''' es fö jewöhnlesch et beß, weil vill Zohjreffe op eijmohl joot ongershtöz wääde.
-
-'''MyISAM''' es flöcker op Rääschnere met bloß einem Minsch draan, un bei Wikis, di mer bloß lässe un nit schrieeve kann.
-MyISAM-Daatebangke han em Schnett mieh Fähler un jon flöcker kappott, wi InnoDB-Daatebangke.",
-       'config-mysql-charset' => 'Dä Daatebangk iere Zeishesaz:',
-       'config-mysql-binary' => 'binär',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "Beim Shpeishere em '''binäre Fomaat''' deiht MediaWiki de Täxte, di em UTF-8 Fommaat kumme, en dä Daatebangk en binär kodeerte Daatefälder faßhallde.
-Dat es flöcker un spaasaamer wi et UTF-8 Fommaat vum <i lang=\"en\">MySQL</i> un määd et müjjelesch, all un jeedes <i lang=\"en\">Unicode</i>-Zeishe met faßzehallde.
-
-Beim Shpeishere em '''UTF-8 Fomaat''' deiht et <i lang=\"en\">MySQL</i> der Zeishesaz un de Kodeerung vun dä Daate känne, un kann se akeraat aanzeije un ömwandelle,
-allerdengs künne kein Zeishe ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrundlääje Knubbel för vill Shprooche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeshpeishert wääde.",
-       'config-site-name' => 'Däm Wiki singe Name:',
-       'config-site-name-help' => 'Dä douch em Tittel vun de Brauserfinstere un aan ätlije andere Shtälle op.',
-       'config-site-name-blank' => 'Donn ene Name för di Sait aanjävve.',
-       'config-project-namespace' => 'Dä Name för et Appachtemang övver et Projäk:',
-       'config-ns-generic' => 'Projäk',
-       'config-ns-site-name' => 'Et sällve wi däm Wiki singe Name: $1',
-       'config-ns-other' => 'Andere (jiff aan wälshe)',
-       'config-ns-other-default' => 'MingWiki',
-       'config-project-namespace-help' => "Noh dämm Vörbeld vun de Wikipeedija, donn vill Wikis dänne ier Sigge övver et Wiki un sing Rääjelle vun dä Sigge mem Enhald vum Wiki tränne, un en enem extra Appachtemang för et „'''Projäk'''“ afflääje.
-Sigge en däm Appachtemang fange all med enem beshtemmpte Vörsaz aan, däm Name vum Appachtemang, un dä moß De heh faßlääje.
-Dä Name kann beshtemmpte Zeiche nit enthallde, wi „#“ un „:“ un et es Tradizjuhn, dat hä vum Name vum Wiki her kütt.",
-       'config-ns-invalid' => 'Dat aanjejovve Appachtemang „<nowiki>$1</nowiki>“ es nit jöltesch.
-Nemm ene andere Name för däm Wiki sing eije Appachtemang.',
-       'config-ns-conflict' => 'Dat aanjejovve Appachtemang „<nowiki>$1</nowiki>“ kütt ald als Standatt-Appachtemang em MediaWiki vör.
-Nemm ene andere Name för däm Wiki sing eije Appachtemang.',
-       'config-admin-box' => 'Der Zohjang för der eezte Wiki_Köbes',
-       'config-admin-name' => 'Metmaacher_Name:',
-       'config-admin-password' => 'Et Paßwoot:',
-       'config-admin-password-confirm' => 'Norrens dat Paßwoot:',
-       'config-admin-help' => 'Jif Dinge leevste Name als Metmaacher för Desch aan, för e Beishpell „Schmitzens Pitter“
-— Dat weed dä Name wääde, met dämm De Desch enlogge deihs.',
-       'config-admin-name-blank' => 'Jiv ene Metmaacher_Name en för dä Wiki-Köbes.',
-       'config-admin-name-invalid' => '„<nowiki>$1</nowiki>“ es keine jöltijje Metmaacher_Name.
-Jiv ene joode Name en!',
-       'config-admin-password-blank' => 'Do mos_e Paßwoot för dä Wiki_Köbes aanjävve!',
-       'config-admin-password-same' => 'Dat Paßwoot un dä Name dörve nit ejaal sin!',
-       'config-admin-password-mismatch' => 'Di Paßwööter sin ongerscheidlesh!',
-       'config-admin-email' => 'Addräß för de <i lang="en">e-mail</i>:',
-       'config-admin-email-help' => 'Jiv heh di Adräß för de <i lang="en">e-mail</i> aan, woh De <i lang="en">e-mail</i> vun ander Metmaacher uss_em Wiki hen krijje wells, di et Der müjjelesh määt, Ding Paßwoot automatetsch truusche ze lohße, un woh Nohreeshte övver veränderte Sigge op Dinge Oppaßleß hen jescheck wääde sulle.
-De kanns dat Fäld ävver och läddesch lohße.',
-       'config-admin-error-user' => 'Beim Enreeshte vum Zohjang för dä Wiki_Köbes „<nowiki>$1</nowiki>“ es ene Fähler em Wiki opjetrodde.',
-       'config-admin-error-password' => 'Beim Paßwoot-Säze för dä Wiki_Köbes „<nowiki>$1</nowiki>“ es ene Fähler em Wiki opjetrodde.: <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Do häs_en onjöltijje Addräß för de <i lang="en">e-mail</i> aanjejovve.',
-       'config-subscribe' => 'Donn de [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce <i lang="en">e-mail</i>-Leß met de Aanköndijunge vum MediaWiki] abonnere.',
-       'config-subscribe-help' => 'Do kumme bloß winnish Meddeilunge un di jonn övver neu Versiohne vom MediaWiki un weeshtejje Saache vun däm sing Sesherheit.
-Do sullts se abbonneere, un Ding MediWiki_Projramme op der neue Shtand bränge, wann neu Version eruß kumme.',
-       'config-subscribe-noemail' => 'Do has versöhk, der ohne en Addräß för Ding <i lang="en">e-mail<i> aanzejävve, de Aanköndijonge för Aanköndijunge för neue Versione ze abboneere. Jivv en Addräß aan, wann De di Aanköndijonge hann wells.',
-       'config-almost-done' => 'Do bes beinah dorsh!
-Do künnts jez der Räß vun de einzel Enshtellunge övverjonn, un et Wiki tiräktemang fäädesch opsäze.',
-       'config-optional-continue' => 'De wells noch mieh Frore jeshtallt krijje un noch mieh Enshtällunge maache?',
-       'config-optional-skip' => 'Nä, lohß dä Ömshtand, donn eifarr_et Wiki opsäze.',
-       'config-profile' => 'Enshtällunge för de Metmaacher ier Rääschte:',
-       'config-profile-wiki' => 'En offe Wiki',
-       'config-profile-no-anon' => 'Schriever möße enlogge',
-       'config-profile-fishbowl' => 'Bloß ußdröcklesch zohjelohße Schriever',
-       'config-profile-private' => 'E jeschloße Privat_Wiki',
-       'config-profile-help' => "Wikis loufe et bäß, wam_mer esu vill Lück wi möjjelesch draan metmaache un schrieve löht.
-Met MediaWiki es et ejfach, de neuste Änderonge ze beloore un wat ahnungslose udder fiese Lück kapott jemaat han wider retuur ze maache.
-
-Bloß, mänsch eine häd_eruß jefonge, dat mer MediaWiki jood en en jruuße Zahl ongerscheidlijje Rolle bruche kann, un nit emmer es et leisch, ene vum onverfälschte Wiki_Wääsch ze övverzeuje.
-Esu häß De de Wahl:
-
-'''{{int:config-profile-wiki}}''' löht jeder_ein metschrieve, och ohne sesch enzelogge.
-
-'''{{int:config-profile-no-anon}}''', dat sorsch för mieh seeschbaa Verantwootlischkeite, künnt ävver zohfällije Methellefer verschrecke.
-
-'''{{int:config-profile-fishbowl}}''' löht nor de ußjesöhk Metmaacher schrieve, ävver de janze Öffentleshkeit kann et lässe un süht och de ällder Versione, un wat wää wann draan jedonn hät.
-
-'''{{int:config-profile-private}}''' kann nur lässe, wäh en et Wiki zohjelohße es, un desellve Jropp kann uch schrieve.
-
-Noch ander un un opwändijere Enschtellunge för de Rääschte sin möjjelesch, wann et Wiki ens aam Loufe es. Loor Der doför de [//www.mediawiki.org/wiki/Manual:User_rights zopaß Hölp em Handbooch] aan.",
-       'config-license' => 'Urhävverrääsch un Lizänz:',
-       'config-license-none' => 'Kein Fooßreih övver de Lizänz',
-       'config-license-cc-by-sa' => '<i lang="en">Creative Commons</i> Der Name moß jenannt sin, et Wiggerjävve es zohjelohße onger dersellve Bedengunge',
-       'config-license-cc-by' => 'De <i lang="en">Creative Commons</i> ier Lizänz met Namensnännong',
-       'config-license-cc-by-nc-sa' => '<i lang="en">Creative Commons</i> Nit för e Jeschäff ze maache, et Wiggerjävve es zohjelohße unger dersellve Bedengunge',
-       'config-license-cc-0' => '<i lang="en">Creative Commons</i> „Noll“ (jemeinfrei udder Pablic Domain)',
-       'config-license-gfdl' => 'De <i lang="en">GNU</i>-Lizänz för frei Dokemäntazjuhne, Version 1.3 udder en späädere',
-       'config-license-pd' => 'Allmende (jemeinfrei, <i lang="en">public domain</i>)',
-       'config-license-cc-choose' => 'En <i lang="en">Creative Commons</i> Lizänz, sellver ußjesöhk:',
-       'config-license-help' => "Ättlijje öffentleje Wikis donn iehr Beidrääsh onger en [http://freedomdefined.org/Definition frei Lizänz] shtelle.
-Dat hellef, e Jeföhl vun Jemeinsamkeid opzeboue, un op lange Seesh emmer wider Beidrääsch ze krijje.
-Dat es nit onbedengk nüüdesh för e Jeschäffs- udder Privaat_Wiki.
-
-Wä Stöcke uß de Wikipedia bruche well, un han well, dat de Wikipedia uss_em eije Wiki jät övvernämme kann, sullt „'''<i lang=\"en\">Creative Commons</i>, dem Schriever singe Name moß jenannt wääde, un Wiggerjävve zoh dersellve Bedengunge es zohjelohße'''“ ußwähle.
-
-De su jenannte '''<i lang=\"en\">GNU Free Documentation License</i>''' (de freije Lizänz för Dokemäntazjuhne vun dä GNU) sen de ahle Lizänzbedenonge vun de Wikipedia. Se es emmer noch in Odenong un jöltesch, ävver se es schwer ze vershtonn un et Wiggerjävve un widder Verwände es manshmool schwieeresch domet.",
-       'config-email-settings' => 'Enschtellunge för de <i lang="en">e-mail</i>',
-       'config-enable-email' => 'De <i lang="en">e-mail</i> noh druße zohlohße',
-       'config-enable-email-help' => 'Sulle <i lang="en">e-mails</i> zohjelohße sin, moß mer, domet et noher flupp, de [http://www.php.net/manual/en/mail.configuration.php Enschtellunge em PHP för de <i lang="en">e-mails</i>] zopaß jemaat han.
-Wann kein <i lang="en">e-mails</i> nüüdesch sin, kam_mer se heh afschallde.',
-       'config-email-user' => '<i lang="en">e-mails</i> zwesche de Metmaacher zohlohße',
-       'config-email-user-help' => 'Määt et müjjelesch, dat sesch de Metmaacher jääjesiggesch <i lang="en">e-mails</i> schecke künne, wann se dat en iehre eije Enschtellunge och enjeschalldt han.',
-       'config-email-usertalk' => '<i lang="en">e-mails</i> mem Bescheid zohlohße, dat einem sing Klaafsigg verändert woodt',
-       'config-email-usertalk-help' => 'Maach et müjjelesch, dat Metmaaacher en iere Enstellunge <i lang="en">e-mails</i> mem Bescheid zohlohße, dat einem sing Klaafsigg verändert woodt.',
-       'config-email-watchlist' => 'Nohreeschte övver Änderonge aan Sigg op de Opaßleßte zohlohße',
-       'config-email-watchlist-help' => 'Lohß Metmaacher Nohreeshte övver de Sigge op dänne iehr Oppaßleß krijje, wann se et en iehre Enschtellonge ußjewählt han.',
-       'config-email-auth' => 'Donn de Övverprööfung för Zohjangsberääschtejunge övver de <i lang="en">e-mail</i> zohlohße',
-       'config-email-auth-help' => 'Wann dat aanjeschald es, möße Metmaacher, di iehr Adräß för de <i lang="en">e-mail</i> neu aanjävve udder ändere, di Addräß övver ene Lengk beschtäätejje, dä se met de <i lang="en">e-mail</i> jescheck krijje.
-Bloß aan esu beschtääteschte Adräße deiht et Wiki <i lang="en">e-mails</i> schecke, Di künne vun annder Metmaachere kumme, udder vum Wiki sellver, wann en Sigg en däm Metmaacher singe Oppaßleß verändert woode es.
-Mer \'\'\'schlonn vör, dat aanzeschallde\'\'\' för öffentlesch Wikis, weil sönß zoh leisch Driß mem Wiki singe <i lang="en">e-mail</i> jemaat wääde künnt.',
-       'config-email-sender' => 'De Adräß för de Antwoote op <i lang="en">e-mails</i>:',
-       'config-email-sender-help' => 'Jiff de Adräß för de <i lang="en">e-mail</i> en, woh Antwoote ob em Wiki singe <i lang="en">e-mails</i> hen jonn sulle.
-Dat es och de Adräß, woh de <i lang="en">e-mails</i> met Fählermäldonge hen jon.
-Vill ẞöövere för de <i lang="en">e-mail</i> welle winnischßdens ene jöltijje Domain en dä Adräß han.',
-       'config-upload-settings' => 'Belder un Datteie huh laade',
-       'config-upload-enable' => 'Belder un Datteie huh laade zohlohße',
-       'config-upload-help' => 'Datteije huh ze laade künnt e Risiko för dem ẞööver singe Sescherheit sin.
-Mieh doh drövver kam_mer em [//www.mediawiki.org/wiki/Manual:Security Kapitel övver de Sescherheit] em Handbooch lässe.
-
-Öm et Huhlaade zohzelohße donn de Rääschde för der Zohjreff op dat Ongerverzeischneß <code lang="en">images</code> em MediaWiki singem Houpverzeischneß esu enshtälle, dat et Webßööverprojramm doh Datteije un Verzeischneße eren schrieve kann.
-Donoh donn heh di Saach zohlohße.',
-       'config-upload-deleted' => 'Dat Verzeishneß för fottjeschmeße Datteije:',
-       'config-upload-deleted-help' => 'Söhk e Verzeijschneß uß för de fottjeschmeße Datteije vum Wiki dren afzelääje.
-Et bäß es, wam_mer vum <i lang="en">world wide web</i> doh nit drahn kumme kann.',
-       'config-logo' => 'Dem Wiki singem Logo sing <i lang="en">URL</i>:',
-       'config-logo-help' => 'De Schtandart_Bedeen_Bovverfläsch vum MediaWiki hät e Logo bovve en der Eck met 135x160 Pixele.
-Donn e zopaß Logo huh laade, un donn däm sing URL heh endraare.
-
-Do kanns <code lang="en">$wgStylePath</code> udder <code lang="en">$wgScriptPath</code> nämme, wann Ding Logo en einem vun dänne Pahde litt.
-
-Wells De kei Logo han, draach heh nix en.',
-       'config-instantcommons' => 'Donn <i lang="en">InstantCommons</i> zohlohße.',
-       'config-instantcommons-help' => '<i lang="en">[//www.mediawiki.org/wiki/InstantCommons InstantCommons]</i> es en Eijeschaff, di et för Wikis müjjelesch määt, Belder, Tondatteie un ander Meedijedatteie enzebenge, di op dä Webßait vun de <i lang="en">[//commons.wikimedia.org/ Wikimedia Commons]</i> ongerjebraat sin. Öm dat noze ze künne, moß dä ẞööver vum MediaWiki en Verbendung nohm Internet opnämme künne.
-
-Mieh Aanjaabe doh drövver un en Aanleidung, wi mer och ander Wikis ußer de <i lang="en">Wikimedia Commons</i> doför enreeschte kann, fengk mer em [//mediawiki.org/wiki/Manual:$wgForeignFileRepos Handbooch].',
-       'config-cc-error' => 'Et Ußsöhke övver de <i lang="en">Creative Commons</i> iehr Projramm zum Lizänzbeshtemme hät nix jebraat.
-Donn de Lizänz sellver beshtemme.',
-       'config-cc-again' => 'Noch ens neu ußsöhke&nbsp;…',
-       'config-cc-not-chosen' => 'Söhk uß, wat för en Lizänz vun de <i lang="en">Creative Commons</i> De han wells, un donn dann op „<i lang="en">proceed</i>“ klecke.',
-       'config-advanced-settings' => 'Fottjeschredde Enshtellunge',
-       'config-cache-options' => 'Enshtällunge för et Faßhallde vun Objäkte em Zweschsheisher:',
-       'config-cache-help' => 'Objäkte em Zwescheshpeisher faßhallde, dat heiß öff jebruchte Daate en der <i lang="en">cache</i> donn, bruche mer, öm MediaWiki flöcker ze maache,
-Meddlere un jruuße Wiki-ẞaits sullte dat onbedengk ußnoze, un och bei klein Wikis weed mer et jood merke.',
-       'config-cache-none' => 'Keine Zweschshpeijsher (Et jeid_em Wiki nix verloore, ußer velleish Schnälleshkeid wann vill loss es)',
-       'config-cache-accel' => 'Ene Objäk<i lang="en">cache</i> vum PHP (<i lang="en">APC</i>, <i lang="en">XCache</i>, udder <i lang="en">WinCache</i>)',
-       'config-cache-memcached' => 'Donn der <code lang="en">memcached</code> ẞööver nämme (Määt extra Enshtellunge un Opsäze nüüdesch)',
-       'config-memcached-servers' => 'De <code lang="en">memcached</code> ßöövere:',
-       'config-memcached-help' => 'Donn de Leß aanhjävve, met de <i lang="en">IP</i>-Addräße för der <code lang="en">memcached</code> ẞööver ze bruche.
-Se sullte ein pro Reih opjeschrevve sin, un en Pooz (<i lang="en">port</i>) ier Nommer han, För e Beishpell, esu:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => 'Do häss der <code lang="en">memcached</code> als Dinge Zoot vun Zwescheshpeijscher aanjejovve, ävver nit eine ẞööver doför.',
-       'config-memcache-badip' => 'Do häss en onjöltijje <i lang="en">IP</i>-Addräß för der <code lang="en">memcached</code> ẞööver aanjejovve: $1.',
-       'config-memcache-noport' => 'Do has kein Pooz (<code lang="en">port</code>) Nommer aanjejovve för mem <code lang="en">memcached</code> ẞööver ze bruche: $1.
-Wann De di Nommer nit weiß, der Shtandatt es 11211.',
-       'config-memcache-badport' => 'Dem <code lang="en">memcached</code> ẞööver singe Pooz (<code lang="en">port</code>) Nommere sullte zwesche $1 un $2 sin.',
-       'config-extensions' => 'Projramm-Zohsäz (<i lang="en">Extensions</i>)',
-       'config-extensions-help' => 'Di bovve opjeleß Zohsazprojramme för et MediaWiki sin em Verzeischneß <code lang="en">./extensions</code> ald ze fenge.
-
-Do kann se heh un jez aanschallde, ävver se künnte noch zohsäzlesch Enshtellunge bruche.',
-       'config-install-alreadydone' => "'''Opjepaß:'''
-Et sühd esu uß, wi wann De MediaWiki ald enshtalleet hätß, un wöhrs aam Versöhke, dat norr_ens ze donn.
-Jang wigger op de näähßte Sigg.",
-       'config-install-begin' => 'Wann De op „{{int:config-continue}}“ klecks, jeiht de Enshtallazjuhn vum MediaWiki loßß.
-Wann De noch Änderonge maache wells, dann kleck op „{{int:config-back}}“.',
-       'config-install-step-done' => 'jedonn',
-       'config-install-step-failed' => 'donävve jejange',
-       'config-install-extensions' => 'Zohsazprojramme enjeschloße',
-       'config-install-database' => 'Ben de Daatebangk aam ennreeschte.',
-       'config-install-schema' => 'Dat Schema en dä Daatebank weed aanjelaat.',
-       'config-install-pg-schema-not-exist' => 'Dat Scheema för <i lang="en">PostgreSQL</i> es nit doh.',
-       'config-install-pg-schema-failed' => 'Et Tabälle-Opsäze es donävve jejange.
-Donn doför sorrje, dat dä Daatebangk-Aanwänder „$1“ en dämm Daatebangkscheema „$2“ schrieve kann.',
-       'config-install-pg-commit' => 'Ben de Änderonge aam ennbränge.',
-       'config-install-pg-plpgsql' => 'Ben noh dä Daatebangkshprooch <code lang="en">PL/pgSQL</code> aam söhke.',
-       'config-pg-no-plpgsql' => 'Do moß de Daatebangkshprooch <code lang="en">PL/pgSQL</code> en dä Daatebangk $1 enreeschte.',
-       'config-pg-no-create-privs' => 'Dä Daatebangk-Aanwänder för et Enreeschte hät nit jenooch Rääschde, öm ene andere Daatebangk-Aanwänder en dä Daatebangk aanzelääje.',
-       'config-pg-not-in-role' => 'Dä aanjejovve Zohjang för et Web jiddet ald.
-Dä aanjejovve Zohjang för et Enschtalleere es keine <i lang="en">superuser<i> un es nit en de Web-Jropp, dröm kam_mer domet kein Dateije aanlääje, di däm Zohjang för et Web jehüüre.
-
-För MeedijaWiki mößße dämm ävver em Momang di Tabälle jehüüre.
-Dröm donn ene andere Name för dä Zohjang zom Wäb nämme, udder donn „retuur“ klicke, un jivv ene Zohjang för et Enschtalleere aan, dä jenooch Rääschte hät.',
-       'config-install-user' => 'Ben unse Daatebangk-Aanwänder en de Daatebangk am aanlääje.',
-       'config-install-user-alreadyexists' => 'Dä Aanwender „$1“ för dä Zohjref op de Daatebangk kann nit aanjelaat wääde, et jidd_en alld.',
-       'config-install-user-create-failed' => 'Dä Aanwender „$1“ för dä Zohjref op de Daatebangk kunnt nit aanjelaat wääde, wäje: <code lang="en">$2</code>',
-       'config-install-user-grant-failed' => 'Däm Daatebangk-Aanwänder sing Beräschtijunge ze säze däät nit fluppe wääje: $2',
-       'config-install-user-missing' => 'Dä aanjejovve Metmaacher „$1“ jidd_et nit.',
-       'config-install-user-missing-create' => '{{int:Config-install-user-missing}}<!-- $1 -->
-Donn e Höhksche en et Käßje „{{int:Createaccount}}“ onge, wann De dä aanlääje wells.',
-       'config-install-tables' => 'Ben de Daatebangk-Tabälle aam aanlääje.',
-       'config-install-tables-exist' => "'''Opjepaß''': Et schingk, dem MediaWiki sing Tabälle sin alt doh.
-Doh dom_mer nix aanlääje.",
-       'config-install-tables-failed' => "'''Fähler''': De Tabälle kunnte nit aanjelaat wääde, wääje: $1",
-       'config-install-interwiki' => 'Ben de Engerwiki-Tabäll met de shtandattmääßejje Daate aam fölle.',
-       'config-install-interwiki-list' => 'Mer kunnte de Dattei <code lang="en">interwiki.list</code> nit fenge.',
-       'config-install-interwiki-exists' => "'''Opjepaß''': En der Engewiki-Tabäll schingk alt jät dren ze shtonn.
-Doh dom_mer nix dobei.",
-       'config-install-stats' => 'De Shtatestek-Zahle wääde op Aanfang jeshtallt.',
-       'config-install-keys' => 'Jeheime Schlößel wääde opjebout.',
-       'config-insecure-keys' => "'''Opjepaß:''' {{PLURAL:$2|Ene jeheime Schlößel|Jeheim Schlößele|Keine jeheime Schlößel}} ($1) {{PLURAL:$2|es|sin|es}} automattesch aanjelaat woode. {{PLURAL:$2|Dä es|Di sin|Hä es}} ävver nit onbedengk janz sescher. Övverlääsch Der, {{PLURAL:$2|dä|di|en}} norr_ens vun Hand ze ändere.",
-       'config-install-sysop' => 'Dä Zohjang för der Wiki-Köbes weed aanjelaat.',
-       'config-install-subscribe-fail' => 'Mer künne de <i lang="en">e-mail</i>-Leß <code lang="en">mediawiki-announce</code> nit abonneere: $1',
-       'config-install-subscribe-notpossible' => '<code lang="en">cURL</code> es nit enstalleed un <code lang="en">allow_url_fopen</code>es nit doh.',
-       'config-install-mainpage' => 'Ben de Houpsigg med enem shtandatmääßeje Enhald aam aanlääje',
-       'config-install-extension-tables' => 'Ben Datebangk-Tabälle för de Zohsazprojramme aam ennreschte',
-       'config-install-mainpage-failed' => 'Kunnt de Houpsigg nit afshpeishere: $1',
-       'config-install-done' => "'''Jlöckwonsch!'''
-MediaWiki es jetz enstalleet.
-
-Et Projramm zom Enreeschte hät en Dattei <code lang=\"en\">LocalSettings.php</code> aanjelaat.
-Doh sin de Enstellunge vum Wiki dren.
-
-Do weeß se eronge laade möße un dann en dem Wiki sing Aanfangsverzeishnes donn möße, et sellve Verzeisneß, woh di Dattei <code lang=\"en\">index.php</code> dren litt. Dat Erongerlaade sullt automattesch aanjefange han.
-
-Wann domet jet nit jeflupp hät, udder De di Dattei norr_ens han wells, donn op dä Lengk heh dronger klecke:
-
-\$3
-
-'''Opjepaß''': Wann De dat jez nit deihß, es alles verschött, wat De bes jöz enjejovve häs, weil di Dattei fott es en däm Momang, woh heh dat Projamm aam Engk es.
-
-Wann De mem Ronger- un widder Huhlaade fäädesh bes, kanns De '''[\$2 en Ding Wiki jonn]'''.",
-       'config-download-localsettings' => 'Donn di Dattei <code lang="en">LocalSettings.php</code> eronger laade',
-       'config-help' => 'Hölp',
-       'config-nofile' => 'De Dattei „$1“ ham_mer nit jefonge. Es di fottjeschmeße?',
-       'config-extension-link' => 'Häs De jewoß, dat et Wiki [//www.mediawiki.org/wiki/Manual:Extensions Zohsazprojramme] hann kann?
-
-Do kanns [//www.mediawiki.org/wiki/Category:Extensions_by_category Zohsazprojramme noh Saachjroppe] söhke udder en de [//www.mediawiki.org/wiki/Extension_Matrix Tabäll met de Zohsazprojramme] kike, öm de kumplätte Leß met de Zohsazprojramme ze krijje.',
-       'mainpagetext' => "'''MediaWiki es jetz enstalleet.'''",
-       'mainpagedocfooter' => 'Luur en et (änglesche) [//meta.wikimedia.org/wiki/Help:Contents Handbooch] wann De wesse wells wie de Wiki-Soffwär jebruch un bedeent wääde moß.
-
-== För dä Aanfang ==
-Dat es och all op Änglesch:
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Donn MediaWiki op Ding Schprooch aanpaße]',
-);
-
-/** Kurdish (Latin script) (Kurdî (latînî)‎)
- * @author George Animal
- */
-$messages['ku-latn'] = array(
-       'config-information' => 'Agahî',
-       'config-your-language' => 'Zimanê te:',
-       'config-page-language' => 'Ziman',
-       'config-page-name' => 'Nav',
-       'config-page-options' => 'Vebijêrk',
-       'config-ns-generic' => 'Proje',
-       'config-install-step-done' => 'çêbû',
-       'config-help' => 'alîkarî',
-       'mainpagetext' => "'''MediaWiki serketî hate çêkirin.'''",
-       'mainpagedocfooter' => 'Alîkarî ji bo bikaranîn û guherandin yê datayê Wîkî tu di bin [//meta.wikimedia.org/wiki/Help:Contents pirtûka alîkarîyê ji bikarhêneran] da dikarê bibînê.
-
-== Alîkarî ji bo destpêkê ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lîsteya varîyablên konfîgûrasîyonê]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lîsteya e-nameyên versyonên nuh yê MediaWiki]', # Fuzzy
-);
-
-/** Ladino (Ladino)
- * @author Universal Life
- */
-$messages['lad'] = array(
-       'mainpagetext' => "'''MedyaViki ya se kureó con reuxitá.'''",
-       'mainpagedocfooter' => 'Konsulta la [//meta.wikimedia.org/wiki/Ayudo:Contenido Guía de usador] para tomar enformasyones encima de como usar el lojikal viki.
-
-== En Empeçando ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings La lista de los arreglamientos de la konfiggurasyón]
-* [//www.mediawiki.org/wiki/Manual:FAQ/lad DDS de MedyaViki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce La lista de las letrales (e-mail) de MedyaViki]', # Fuzzy
-);
-
-/** Luxembourgish (Lëtzebuergesch)
- * @author Robby
- * @author Soued031
- * @author 아라
- */
-$messages['lb'] = array(
-       'config-desc' => 'Den Installatiounsprogramm vu MediaWiki',
-       'config-title' => 'MediaWiki $1 Installatioun',
-       'config-information' => 'Informatioun',
-       'config-localsettings-upgrade' => "'''Opgepasst''': E Fichier <code>LocalSettings.php</code> gouf fonnt.
-Är Software kann aktualiséiert ginn, setzt w.e.g. de Wäert vum <code>\$wgUpgradeKey</code> an d'Këscht.
-Dir fannt en am <code>LocalSettings.php</code>.",
-       'config-localsettings-cli-upgrade' => "E Fichier <code>LocalSettings.php</code> gouf fonnt.
-Fir dës Installatioun z'aktuaéliséieren start w.e.g. <code>update.php</code>",
-       'config-localsettings-key' => 'Aktualisatiounsschlëssel:',
-       'config-localsettings-badkey' => 'De Schlëssel deen Dir aginn hutt ass net korrekt',
-       'config-localsettings-incomplete' => 'De Fichier <code>LocalSettings.php</code> schéngt net komplett ze sinn.
-D\'Variabel $1 ass net definéiert.
-Ännert w.e.g. de Fichier <code>LocalSettings.php</code> esou datt déi Variabel definéiert ass a klickt op "{{int:Config-continue}}".',
-       'config-session-error' => 'Feeler beim Starte vun der Sessioun: $1',
-       'config-no-session' => "D'Donnéeë vun ärer Sessioun si verluergaangen!
-Kuckt Är php.ini no a vergewëssert Iech datt <code>session.save_path</code>  op adequate REpertoire agestallt ass.",
-       'config-your-language' => 'Är Sprooch',
-       'config-your-language-help' => 'Sicht déi Sprooch eraus déi Dir während der Installatioun benotze wëllt',
-       'config-wiki-language' => 'Sprooch vun der Wiki:',
-       'config-wiki-language-help' => "Sicht d'Sprooch eraus an där d'Wiki haaptsächlech geschriwwe gëtt.",
-       'config-back' => '← Zréck',
-       'config-continue' => 'Weider →',
-       'config-page-language' => 'Sprooch',
-       'config-page-welcome' => 'Wëllkomm bäi MediaWiki!',
-       'config-page-dbconnect' => 'Mat der Datebank verbannen',
-       'config-page-upgrade' => 'Eng Installatioun déi besteet aktualiséieren',
-       'config-page-dbsettings' => 'Astellunge vun der Datebank',
-       'config-page-name' => 'Numm',
-       'config-page-options' => 'Optiounen',
-       'config-page-install' => 'Installéieren',
-       'config-page-complete' => 'Fäerdeg!',
-       'config-page-restart' => 'Installatioun neistarten',
-       'config-page-readme' => 'Liest dëst',
-       'config-page-releasenotes' => 'Informatiounen zur Versioun',
-       'config-page-copying' => 'Kopéieren',
-       'config-page-upgradedoc' => 'Aktualiséieren',
-       'config-page-existingwiki' => 'Wiki déi et gëtt',
-       'config-help-restart' => 'Wëllt dir all gespäichert Donnéeë läschen déi dir bis elo aginn hutt an den Installatiounsprozess nei starten?',
-       'config-restart' => 'Jo, neistarten',
-       'config-welcome' => "=== Iwwerpréifung vum Installatiounsenvironnement ===
-Et gi grondsätzlech Iwwerpréifunge gemaach fir ze kucken ob den Environnment gëeegent ass fir MediaWiki z'installéieren.
-Dir sollt d'Resultater vun dëser Iwwerpréifung ugi wann Dir während der Installatioun Hëllef frot wéi Dir D'Installatioun ofschléisse kënnt.",
-       'config-sidebar' => '* [//www.mediawiki.org MediaWiki Haaptsäit]
-* [//www.mediawiki.org/wiki/Help:Contents Benotzerguide]
-* [//www.mediawiki.org/wiki/Manual:Contents Guide fir Administrateuren]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]
-----
-* <doclink href=Readme>Liest dëst</doclink>
-* <doclink href=ReleaseNotes>Informatioune vun der aktueller Versioun</doclink>
-* <doclink href=Copying>Lizenzbedingungen</doclink>
-* <doclink href=UpgradeDoc>Aktualisatioun</doclink>',
-       'config-env-good' => 'Den Environement gouf nogekuckt.
-Dir kënnt MediaWiki installéieren.',
-       'config-env-bad' => 'Den Environnement gouf iwwerpréift.
-Dir kënnt MediWiki net installéieren.',
-       'config-env-php' => 'PHP $1 ass installéiert.',
-       'config-env-php-toolow' => 'PHP $1 ass installéiert.
-Awer MediaWiki brauch PHP $2 oder méi héich.',
-       'config-unicode-using-utf8' => "Fir d'Unicode-Normalisatioun gëtt dem Brion Vibber säin <code>utf8_normalize.so</code> benotzt.",
-       'config-no-db' => "Et konnt kee passenden Datebank-Driver fonnt ginn! Dir musst een Datebank-Driver fir PHP installéieren.
-Dës Datebank-Type ginn ënnerstëtzt: $1.
-
-Wann Dir op engem gesharte Server sidd, da frot Ären Hosting-Provider fir de passenden Datebank-Driver z'installéieren.
-Wann Dir PHP selwer compiléiert hutt, da reconfiguréiert en mat dem ageschalten Datebank-Client, zum Beispill an deem Dir <code>./configure --with-mysql</code> benotzt.
-Wann Dir PHP vun engem Debian oder Ubuntu Package aus installéiert hutt, da musst Dir och den php5-mysql Modul installéieren.",
-       'config-outdated-sqlite' => "'''Warnung:''' SQLite $1 ass installéiert. Allerdengs brauch MediaWiki SQLite $2 oder méi nei. SQLite ass dofir net disponibel.",
-       'config-memory-bad' => "'''Opgepasst:''' De Parameter <code>memory_limit</code> vu PHP ass $1.
-Dat ass wahrscheinlech ze niddreg.
-D'Installatioun kéint net funktionéieren.",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] ass installéiert',
-       'config-apc' => '[http://www.php.net/apc APC] ass installéiert',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] ass installéiert',
-       'config-diff3-bad' => 'GNU diff3 gouf net fonnt.',
-       'config-no-uri' => "'''Feeler:''' Déi aktuell URI konnt net festgestallt ginn.
-Installatioun ofgebrach.",
-       'config-using-server' => 'De Servernumm "<nowiki>$1</nowiki>" gëtt benotzt.',
-       'config-using-uri' => 'D\'Server URL  "<nowiki>$1$2</nowiki>" gëtt benotzt.',
-       'config-db-type' => 'Datebanktyp:',
-       'config-db-host' => 'Host vun der Datebank:',
-       'config-db-host-oracle' => 'Datebank-TNS:',
-       'config-db-wiki-settings' => 'Dës Wiki identifizéieren',
-       'config-db-name' => 'Numm vun der Datebank:',
-       'config-db-name-oracle' => 'Datebankschema:',
-       'config-db-install-account' => "Benotzerkont fir d'Installatioun",
-       'config-db-username' => 'Datebank-Benotzernumm:',
-       'config-db-password' => 'Passwuert vun der Datebank:',
-       'config-db-install-help' => 'Gitt de Benotzernumm an Passwuert an dat wàhrend der Installatioun benotzt gëtt fir sech mat der Datebank ze verbannen.',
-       'config-db-account-lock' => 'De selwechte Benotzernumm a Passwuert fir déi normal Operatioune benotzen',
-       'config-db-wiki-account' => 'Benotzerkont fir normal Operatiounen',
-       'config-db-wiki-help' => "Gitt de Benotzernumm an d'Passwuert an dat benotzt wäert gi fir sech bei den normale Wiki-Operatiounen mat der Datebank ze connectéieren.
-Wann et de Kont net gëtt, a wann den Installatiouns-Kont genuch Rechter huet, gëtt dëse Benotzerkont opgemaach mat dem Minimum vu Rechter déi gebraucht gi fir dës Wiki bedreiwen ze kënnen.",
-       'config-db-charset' => 'Zeechesaz (character set) vun der Datebank',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binair',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-mysql-old' => 'MySQL $1 oder eng méi nei Versioun gëtt gebraucht, Dir hutt $2.',
-       'config-db-port' => 'Port vun der Datebank:',
-       'config-db-schema' => 'Schema fir MediaWiki',
-       'config-db-schema-help' => "D'Schemaen hei driwwer si gewéinlech korrekt.
-Ännert se nëmme wann Dir wësst datt et néideg ass.",
-       'config-pg-test-error' => "Et ass net méiglech d'Datebank '''$1''' ze kontaktéieren: $2",
-       'config-sqlite-dir' => 'Repertoire vun den SQLite-Donnéeën',
-       'config-oracle-def-ts' => "Standard 'tablespace':",
-       'config-oracle-temp-ts' => "Temporären 'tablespace':",
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-header-mysql' => 'MySQL-Astellungen',
-       'config-header-postgres' => 'PostgreSQL-Astellungen',
-       'config-header-sqlite' => 'SQLite-Astellungen',
-       'config-header-oracle' => 'Oracle-Astellungen',
-       'config-invalid-db-type' => 'Net valabelen Datebank-Typ',
-       'config-missing-db-name' => 'Dir musst en Numm fir de Wäert "Numm vun der Datebank" uginn',
-       'config-missing-db-host' => 'Dir musst e Wäert fir "Database host" uginn',
-       'config-missing-db-server-oracle' => 'Dir musst e Wäert fir "Datebank-TNS" uginn',
-       'config-db-sys-user-exists-oracle' => 'De Benotzerkont "$1" gëtt et schonn. SYSDBA kann nëmme benotzt gi fir en neie Benotzerkont opzemaachen.',
-       'config-postgres-old' => 'PostgreSQL $1 oder eng méi nei Versioun gëtt gebraucht, Dir hutt $2.',
-       'config-sqlite-name-help' => 'Sicht en Numm deen Är wiki identifizéiert.
-Benotzt keng Espacen a Bindestrécher.
-E gëtt fir den Numm vum SQLite Date-Fichier benotzt.',
-       'config-sqlite-readonly' => 'An de Fichier <code>$1</code> Kann net geschriwwe ginn.',
-       'config-sqlite-cant-create-db' => 'Den Datebank-Fichier <code>$1</code> konnt net ugeluecht ginn.',
-       'config-upgrade-done-no-regenerate' => "D'Aktualisatioun ass ofgeschloss.
-
-Dir kënnt elo [$1 ufänken Är Wiki ze benotzen]",
-       'config-regenerate' => 'LocalSettings.php regeneréieren →',
-       'config-db-web-account' => 'Datebankkont fir den Accès iwwer de Web',
-       'config-db-web-account-same' => 'Dee selwechte Kont wéi bei der Installatioun benotzen',
-       'config-db-web-create' => 'De Kont uleeë wann et e net scho gëtt',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-binary' => 'binär',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Numm vun der Wiki:',
-       'config-site-name-help' => 'Dësen daucht an der Titelleescht vum Browser an op verschiddenen anere Plazen op.',
-       'config-site-name-blank' => 'Gitt den Numm vum Site un.',
-       'config-project-namespace' => 'Projet Nummraum:',
-       'config-ns-generic' => 'Projet',
-       'config-ns-site-name' => 'Deeselwechte wéi den Numm vun der Wiki: $1',
-       'config-ns-other' => 'Anerer (spezifizéieren)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-admin-box' => 'Administrateurs-Kont',
-       'config-admin-name' => 'Ären Numm:',
-       'config-admin-password' => 'Passwuert:',
-       'config-admin-password-confirm' => 'Passwuert confirméieren:',
-       'config-admin-help' => 'Gitt w.e.g. Äre gewënschte Benotzernumm hei an, zum Beispill "Jang Muller".
-Dësen Numm gëtt da gebraucht fir sech an d\'Wiki anzeloggen.',
-       'config-admin-name-blank' => 'Gitt e Benotzernumm fir den Administrateur an.',
-       'config-admin-name-invalid' => 'De spezifizéierte Benotzernumm "<nowiki>$1</nowiki>" ass net valabel.
-Spezifizéiert en anere Benotzernumm.',
-       'config-admin-password-blank' => 'Gitt e Passwuert fir den Adminstateur-Kont an.',
-       'config-admin-password-same' => "D'Passwuert däerf net dat selwecht si wéi de Benotzernumm.",
-       'config-admin-password-mismatch' => 'Déi zwee Passwierder Déi Dir aginn hutt stëmmen net iwwereneen.',
-       'config-admin-email' => 'E-Mail-Adress:',
-       'config-admin-error-user' => 'Interne Feeler beim uleeë vun engem Administrateur mam Numm "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'Interne Feeler beim Setze vum Passwuert fir den Admin "<nowiki>$1</nowiki>": <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Dir hutt eng E-Mail-Adress aginn déi net valabel ass',
-       'config-subscribe' => "Sech op d'[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Ukënnegunge vun neie Versiounen] abonnéieren.",
-       'config-almost-done' => "Dir sidd bal fäerdeg!
-Dir kënnt elo déi Astellungen déi nach iwwreg sinn iwwersprangen an d'Wiki elo direkt installéieren.",
-       'config-optional-continue' => 'Stellt mir méi Froen.',
-       'config-optional-skip' => "Ech hunn es genuch, installéier just d'Wiki.",
-       'config-profile' => 'Profil vun de Benotzerrechter:',
-       'config-profile-wiki' => 'Oppe Wiki',
-       'config-profile-no-anon' => 'Uleeë vun engem Benotzerkont verlaangt',
-       'config-profile-fishbowl' => 'Nëmmen autoriséiert Editeuren',
-       'config-profile-private' => 'Privat Wiki',
-       'config-license' => 'Copyright a Lizenz:',
-       'config-license-none' => 'Keng Lizenz ënnen op der Säit',
-       'config-license-pd' => 'Ëffentlechen Domaine',
-       'config-email-settings' => 'E-Mail-Astellungen',
-       'config-enable-email' => 'E-Mailen déi no bausse ginn aschalten',
-       'config-email-user' => 'Benotzer-op-Benotzer E-Mail aschalten',
-       'config-email-usertalk' => 'Benoriichtege bäi Ännerung vun der Benotzerdiskussiounssäit aschalten',
-       'config-email-watchlist' => 'Benoriichtigung vun der Iwwerwaachungslëscht aschalten',
-       'config-email-auth' => 'E-Mail-Authentifizéierung aschalten',
-       'config-email-sender' => 'E-Mailadress fir Äntwerten:',
-       'config-upload-settings' => 'Eropgeluede Biller a Fichieren',
-       'config-upload-enable' => 'Eropluede vu Fichieren aschalten',
-       'config-upload-deleted' => 'Repertoire fir geläscht Fichieren:',
-       'config-logo' => 'URL vum Logo:',
-       'config-instantcommons' => '"Instant Commons" aktivéieren',
-       'config-cc-again' => 'Nach eng kéier eraussichen...',
-       'config-advanced-settings' => 'Erweidert Astellungen',
-       'config-extensions' => 'Erweiderungen',
-       'config-install-step-done' => 'fäerdeg',
-       'config-install-step-failed' => 'huet net funktionéiert',
-       'config-install-extensions' => 'Mat den Ereiderungen',
-       'config-install-database' => 'Datebank gëtt installéiert',
-       'config-install-pg-plpgsql' => 'No der Sprooch PL/pgSQL sichen',
-       'config-pg-no-plpgsql' => "Fir d'Datebank $1 muss d'Datebanksprooch PL/pgSQL installéiert ginn",
-       'config-install-user' => 'Datebank Benotzer uleeën',
-       'config-install-user-alreadyexists' => 'De Benotzer "$1" gëtt et schonn!',
-       'config-install-user-create-failed' => 'D\'Opmaache vum Benotzer "$1" huet net funktionéiert: $2',
-       'config-install-user-grant-failed' => 'D\'Bäisetze vu Rechter fir de Benotzer "$1" huet net funktionéiert: $2',
-       'config-install-user-missing' => 'De Benotzer "$1" deen ugi gouf gëtt et net.',
-       'config-install-user-missing-create' => 'De spezifizéierte Benotzer "$1" gëtt et net.
-Klickt d\'Checkbox "Benotzerkont uleeën" wann Dir dee Benotzer uleeë wëllt.',
-       'config-install-tables' => 'Tabelle ginn ugeluecht',
-       'config-install-interwiki' => 'Standard Interwiki-Tabell gëtt ausgefëllt',
-       'config-install-interwiki-list' => 'De Fichier <code>interwiki.list</code> gouf net fonnt.',
-       'config-install-stats' => 'Initialisatioun vun de Statistiken',
-       'config-install-keys' => 'Generéiere vum Geheimschlëssel',
-       'config-install-sysop' => 'Administrateur Benotzerkont gëtt ugeluecht',
-       'config-install-mainpage' => 'Haaptsäit mat Standard-Inhalt gëtt ugeluecht',
-       'config-install-extension-tables' => "D'Tabelle fir déi aktivéiert Erweiderunge ginn ugeluecht",
-       'config-install-mainpage-failed' => "D'Haaptsäit konnt net dragesat ginn: $1",
-       'config-download-localsettings' => '<code>LocalSettings.php</code> eroflueden',
-       'config-help' => 'Hëllef',
-       'config-nofile' => 'De Fichier "$1" gouf net fonnt. Gouf e geläscht?',
-       'mainpagetext' => "'''MediaWiki gouf installéiert.'''",
-       'mainpagedocfooter' => "Kuckt w.e.g. [//meta.wikimedia.org/wiki/Help:Contents d'Benotzerhandbuch] fir Informatiounen iwwer de Gebruach vun der Wiki Software.
-
-== Fir  unzefänken ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Hëllef bei der Konfiguratioun]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglëscht vun neie MediaWiki-Versiounen]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Lokaliséiert MediaWiki fir Är Sprooch]",
-);
-
-/** Lingua Franca Nova (Lingua Franca Nova)
- */
-$messages['lfn'] = array(
-       'mainpagetext' => "'''MediaWiki es aora instalada.'''",
-       'mainpagedocfooter' => 'Atenda la [//meta.wikimedia.org/wiki/Help:Contents Gida per Usores] per informa supra la usa de la programa de vici.
-
-== Comensa ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de ajustas de la desinia]
-* [//www.mediawiki.org/wiki/Manual:FAQ Demandas comun de MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista per receta anunsias de novas supra MediaWiki]', # Fuzzy
-);
-
-/** Ganda (Luganda)
- * @author Kizito
- */
-$messages['lg'] = array(
-       'mainpagetext' => 'MediaWiki kati ewangidwa ku sisitemu yo',
-       'mainpagedocfooter' => "Okuyiga ku nkozesa ya sofutiweya owa wiki, kebera [//meta.wikimedia.org/wiki/Help:Contents Okulagirira Abakozesa].
-
-== Amagezi agakuyamba okutandika ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lukalala lw'eby'enteekateeka yo]
-* [//www.mediawiki.org/wiki/Manual:FAQ Ebiter'okubuuzibwa ku MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Wewandise ofunenga amawulire aga email ag'ebifa ku MediaWiki]", # Fuzzy
-);
-
-/** Limburgish (Limburgs)
- */
-$messages['li'] = array(
-       'mainpagetext' => "'''MediaWiki software succesvol geïnsjtalleerd.'''",
-       'mainpagedocfooter' => "Raodpleeg de [//meta.wikimedia.org/wiki/NL_Help:Inhoudsopgave handjleiding] veur informatie euver 't gebroek van de wikisoftware.
-
-== Mieë hölp ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lies mit instellinge]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki VGV (FAQ)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki mailinglies veur nuuj versies]", # Fuzzy
-);
-
-/** Lao (ລາວ)
- */
-$messages['lo'] = array(
-       'mainpagetext' => "'''ຕິດຕັ້ງມີເດຍວິກິນີ້ສຳເລັດແລ້ວ.'''",
-);
-
-/** Lithuanian (lietuvių)
- * @author Eitvys200
- * @author Mantak111
- */
-$messages['lt'] = array(
-       'config-desc' => 'MediaWiki diegimas',
-       'config-title' => 'MediaWiki $1 diegimas',
-       'config-information' => 'Informacija',
-       'config-your-language' => 'Jūsų kalba:',
-       'config-wiki-language' => 'Viki kalba:',
-       'config-back' => '← Atgal',
-       'config-continue' => 'Toliau →',
-       'config-page-language' => 'Kalba',
-       'config-page-welcome' => 'Sveiki atvykę į MediaWiki!',
-       'config-page-dbconnect' => 'Prisijungti prie duomenų bazės',
-       'config-page-dbsettings' => 'Duomenų bazės nustatymai',
-       'config-page-name' => 'Vardas',
-       'config-page-options' => 'Parinktys',
-       'config-page-install' => 'Įdiegti',
-       'config-page-complete' => 'Baigta!',
-       'config-page-restart' => 'Iš naujo paleiskite diegimą',
-       'config-page-readme' => 'Perskaityk manę',
-       'config-page-copying' => 'Kopijuojama',
-       'config-page-upgradedoc' => 'Atnaujinama',
-       'config-restart' => 'Taip, paleiskite jį iš naujo',
-       'config-env-php' => 'PHP $1 yra įdiegtas.',
-       'config-env-php-toolow' => 'PHP $1 įdiegta.
-Tačiau, MediaWiki reikia PHP $2 ar naujesnės.',
-       'config-db-type' => 'Duomenų bazės tipas:',
-       'config-db-host' => 'Duomenų bazės serveris:',
-       'config-db-name' => 'Duomenų bazės pavadinimas:',
-       'config-db-name-oracle' => 'Duomenų bazės schema:',
-       'config-db-username' => 'Duomenų bazės vartotojo vardas:',
-       'config-db-password' => 'Duomenų bazės slaptažodis:',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-db-port' => 'Duomenų bazės prievadas:',
-       'config-db-schema' => 'MediaWiki schema:',
-       'config-header-mysql' => 'MySQL nustatymai',
-       'config-header-postgres' => 'PostgreSQL nustatymai',
-       'config-header-sqlite' => 'SQLite nustatymai',
-       'config-header-oracle' => 'Oracle nustatymai',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Viki pavadinimas:',
-       'config-site-name-blank' => 'Įveskite svetainės pavadinimą.',
-       'config-project-namespace' => 'Projekto pavadinimas:',
-       'config-ns-generic' => 'Projektas',
-       'config-ns-site-name' => 'Toks pat kaip viki pavadinimas: $1',
-       'config-ns-other-default' => 'ManoWiki',
-       'config-admin-box' => 'Administratoriaus paskyra',
-       'config-admin-name' => 'Jūsų vardas:',
-       'config-admin-password' => 'Slaptažodis:',
-       'config-admin-password-confirm' => 'Slaptažodis dar kartą:',
-       'config-admin-name-blank' => 'Įveskite administratoriaus vartotojo vardą.',
-       'config-admin-password-blank' => 'Įvesti administratoriaus paskyros slaptažodį.',
-       'config-admin-password-same' => 'Slaptažodis turi būti ne toks pat, kaip vartotojo vardas.',
-       'config-admin-password-mismatch' => 'Įvesti slaptažodžiai nesutampa.',
-       'config-admin-email' => 'El. pašto adresas:',
-       'config-optional-continue' => 'Paklausti daugiau klausimų.',
-       'config-optional-skip' => 'Man jau nuobodu, tiesiog įdiekite viki.',
-       'config-profile' => 'Vartotojo teisių paskyra:',
-       'config-profile-wiki' => 'Tradicinė viki', # Fuzzy
-       'config-profile-private' => 'Privati viki',
-       'config-license-pd' => 'Viešas Domenas',
-       'config-email-settings' => 'El. pašto nustatymai',
-       'config-upload-enable' => 'Įgalinti failų įkėlimus',
-       'config-logo' => 'Logotipo URL:',
-       'config-cc-again' => 'Pasirinkti dar kartą...',
-       'config-extensions' => 'Plėtiniai',
-       'config-install-step-done' => 'atlikta',
-       'config-install-step-failed' => 'nepavyko',
-       'config-install-schema' => 'Kuriama schema',
-       'config-install-tables' => 'Kuriamos lentelės',
-       'config-install-stats' => 'Inicijuojamos statistikos',
-       'config-install-keys' => 'Generuojami slapti raktai',
-       'config-install-done' => "'''Sveikiname!'''
-Jūs sėkmingai įdiegėte MediaWiki.
-
-Įdiegimo programa sukūrė <code>LocalSettings.php</code> failą.
-Jame yra visos jūsų konfigūracijos.
-
-Jums reikės atsisiųsti ir įdėti jį į savo wiki įdiegimo bazę (pačiame kataloge, kaip index.php). Atsisiuntimas turėtų prasidėti automatiškai.
-
-Jei atsisiuntimas nebuvo pasiūlytas, arba jį atšaukėte, galite iš naujo atsisiųsti paspaudę žemiau esančią nuorodą:
-
-$3
-
-'''Pastaba:''' Jei jūs to nepadarysite dabar, tada šis sukurtas konfigūracijos failas nebus galimas vėliau, jei išeisite iš įdiegimo be atsisiuntimo.
-
-Kai baigsite, jūs galėsite '''[$2 įeiti į savo wiki]'''.",
-       'config-download-localsettings' => 'Atsisiųsti <code>LocalSettings.php</code>',
-       'config-help' => 'pagalba',
-       'mainpagetext' => "'''MediaWiki sėkmingai įdiegta.'''",
-       'mainpagedocfooter' => 'Informacijos apie wiki programinės įrangos naudojimą, ieškokite [//meta.wikimedia.org/wiki/Help:Contents žinyne].
-
-== Pradžiai ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfigūracijos nustatymų sąrašas]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki DUK]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki pranešimai paštu apie naujas versijas]', # Fuzzy
-);
-
-/** Latvian (latviešu)
- * @author GreenZeb
- */
-$messages['lv'] = array(
-       'config-back' => '← Atpakaļ',
-       'config-continue' => 'Turpināt →',
-       'config-page-language' => 'Valoda',
-       'config-page-welcome' => 'Laipni lūdzam MediaWiki!',
-       'config-page-dbconnect' => 'Savienoties ar datubāzi',
-       'config-page-upgrade' => 'Atjaunināt pašreizējo instalāciju',
-       'config-page-dbsettings' => 'Datubāzes iestatījumi',
-       'config-page-name' => 'Vārds',
-       'config-page-options' => 'Iespējas',
-       'config-page-install' => 'Instalēt',
-       'config-page-complete' => 'Pabeigts!',
-       'config-page-restart' => 'Pārstartēt instalāciju',
-       'config-page-readme' => 'Lasīt mani',
-       'config-page-releasenotes' => 'Informācija par laidienu',
-       'mainpagetext' => "'''MediaWiki veiksmīgi ieinstalēts'''",
-       'mainpagedocfooter' => 'Izlasi [//meta.wikimedia.org/wiki/Help:Contents Lietotāja pamācību], lai iegūtu vairāk informācijas par Wiki programmatūras lietošanu.
-
-== Pirmie soļi ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfigurācijas iespēju saraksts]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki J&A]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Parakstīties uz paziņojumiem par jaunām MediaWiki versijām]', # Fuzzy
-);
-
-/** Literary Chinese (文言)
- */
-$messages['lzh'] = array(
-       'mainpagetext' => "'''共筆臺已立'''",
-       'mainpagedocfooter' => "欲識維基,見[//meta.wikimedia.org/wiki/Help:Contents User's Guide]
-
-== 始 ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Lazuri (Lazuri)
- * @author Bombola
- */
-$messages['lzz'] = array(
-       'mainpagetext' => "'''Mediawiki dido k'ai ik'idu.'''",
-       'mainpagedocfooter' => "Vik'i şeni muç'o ixmarinen ya mutxanepe oguru şeni [//meta.wikimedia.org/wiki/Help:Contents oxmaruşi rexberis] o3'k'edit.
-
-== Ağani na gyoç’k’u maxmarepe ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Ok'iduşi ayarepeşi liste]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki P'anda Na-k'itxu K'itxalape]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-mailepeşiş liste]", # Fuzzy
-);
-
-/** Maithili (मैथिली)
- * @author Umeshberma
- */
-$messages['mai'] = array(
-       'mainpagetext' => "'''मीडियाविकी नीक जकाँ प्रस्थापित भेल।'''",
-       'mainpagedocfooter' => "सम्पर्क करू [//meta.wikimedia.org/wiki/Help:Contents User's Guide] विकी तंत्रांशक प्रयोगक जानकारी लेल।
-
-==प्रारम्भ कोना करी==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Moksha (мокшень)
- */
-$messages['mdf'] = array(
-       'mainpagetext' => "'''МедиаВикить арафтозь лац.'''",
-       'mainpagedocfooter' => 'Ванк [//meta.wikimedia.org/wiki/Help:Contents Ветямовал Тиинди] тяса ули кода содамс Вики програпнень эрявикснень колга.
-
-== Эрявикс сюлмафксне ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Васьфневи арафнематнень кярькссь]
-* [//www.mediawiki.org/wiki/Manual:FAQ МедиаВикить Сидеста Кеподеви Кизефксне]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce МедиаВикить од верзиятнень колга кулянь пачфтема]', # Fuzzy
-);
-
-/** Malagasy (Malagasy)
- * @author Jagwar
- */
-$messages['mg'] = array(
-       'config-session-error' => 'Hadisoana teo am-panombohana ny fidirana : $1',
-       'config-your-language' => 'Ny fiteninao :',
-       'config-wiki-language' => "Fiteny ho ampiasain'ny wiki :",
-       'config-back' => '← Miverina',
-       'config-continue' => 'Manohy →',
-       'config-page-language' => 'Fiteny',
-       'config-page-welcome' => "Tonga soa eto amin'i MediaWiki !",
-       'config-page-dbconnect' => "Hiditra eo amin'i banky angona",
-       'config-page-name' => 'Anarana',
-       'config-page-readme' => 'Vakio aho',
-       'config-page-copying' => 'Hala-tahaka',
-       'config-page-upgradedoc' => 'Fanavaozina',
-       'config-page-existingwiki' => 'Wiki efa misy',
-       'config-help-restart' => "Tianao hofafana avokoa ve ny data voaangona natsofokao ary hamerina ny fizotran'ny fametrahana ?",
-       'config-restart' => 'Eny, avereno atao',
-       'config-db-username' => "Anaram-pikamban'ny banky angona :",
-       'config-db-password' => "Tenimiafin'ny banky angona :",
-       'config-header-mysql' => "Parametatr'i MySQL",
-       'config-header-sqlite' => "Parametatr'i SQLite",
-       'config-header-oracle' => "Parametatr'i Oracle",
-       'config-mysql-innodb' => 'innoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-ns-generic' => 'Tetikasa',
-       'config-ns-other' => 'Hafa (lazao)',
-       'config-admin-name' => 'Ny anaranao :',
-       'config-admin-password' => 'Tenimiafina :',
-       'config-admin-email' => 'Adiresy imailaka :',
-       'config-profile-wiki' => 'Wiki tsotra', # Fuzzy
-       'config-profile-no-anon' => 'Mila mamorona kaonty',
-       'config-profile-fishbowl' => 'Mpanova mahazo alalana ihany',
-       'config-profile-private' => 'Wiki tsy sarababem-bahoaka',
-       'config-license' => 'Zom-pamorona ary lisansa :',
-       'config-license-none' => 'Tsy misy lisansa any an-tongom-pejy',
-       'config-email-user' => 'Avela mifandefa imailaka ny mpikambana',
-       'config-email-user-help' => "Hahafahan'ny mpikambana mifandefa imailaka raha omen'ny mpikambana alalana ao amin'ny safidiny.",
-       'config-upload-deleted' => "Petra-drakitra ho an'ny rakitra voafafa :",
-       'config-extensions' => 'Fanitarana',
-       'config-install-step-done' => 'vita',
-       'config-install-step-failed' => 'hadisoana',
-       'config-install-user' => "Famoronana mpapiasan'ny banky angona",
-       'config-install-tables' => 'Famoronana tabilao',
-       'config-install-stats' => 'Fanombohana ny statistika',
-       'config-install-keys' => 'Fanamboarana lakile miafina',
-       'config-help' => 'fanoroana',
-       'mainpagetext' => "'''Tafajoro soa aman-tsara ny rindrankajy Wiki.'''",
-       'mainpagedocfooter' => "Vangio ny [//meta.wikimedia.org/wiki/Aide:Contenu Fanoroana ho an'ny mpampiasa] ra te hitady fanoroana momba ny fampiasan'ity rindrankajy ity.
-
-== Hanomboka amin'ny MediaWiki ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lisitra ny paramètre de configuration]
-* [//www.mediawiki.org/wiki/Manual:FAQ/fr FAQ momba ny MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Resaka momba ny fizaràn'ny MediaWiki]", # Fuzzy
-);
-
-/** Eastern Mari (олык марий)
- */
-$messages['mhr'] = array(
-       'mainpagetext' => "'''MediaWiki сай шындыме.'''",
-);
-
-/** Minangkabau (Baso Minangkabau)
- * @author Iwan Novirion
- * @author Luthfi94
- */
-$messages['min'] = array(
-       'mainpagetext' => "'''MediaWiki alah tapasang jo sukses'''.",
-       'mainpagedocfooter' => 'Konsultasian [//meta.wikimedia.org/wiki/Help:Contents/min Panduan Panggunoan] untuak informasi caro panggunoan parangkaik lunak wiki.
-
-== Mamulai panggunoan ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings/id Daftar pangaturan konfigurasi]
-* [//www.mediawiki.org/wiki/Manual:FAQ/id Daftar patanyoan nan acok diajukan manganai MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Palokalan MediaWiki untuak bahaso Sanak]',
-);
-
-/** Macedonian (македонски)
- * @author Bjankuloski06
- * @author 아라
- */
-$messages['mk'] = array(
-       'config-desc' => 'Инсталатор на МедијаВики',
-       'config-title' => 'Инсталатор на МедијаВики $1',
-       'config-information' => 'Информации',
-       'config-localsettings-upgrade' => 'Востановена е податотека <code>LocalSettings.php</code>.
-За да ја надградите инсталцијава, внесете ја вредноста на <code>$wgUpgradeKey</code> во полето подолу.
-Тоа е го најдете во <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Утврдено е присуството на податотеката „<code>LocalSettings.php</code>“.
-За да ја надградите инсталацијата, пуштете ја „<code>update.php</code>“ наместо горенаведената.',
-       'config-localsettings-key' => 'Надградбен клуч:',
-       'config-localsettings-badkey' => 'Клучот што го наведовте е погрешен',
-       'config-upgrade-key-missing' => 'Востановена е постоечка инсталација на МедијаВики.
-За да ја надградите, вметнете го следниов ред на дното од вашата страница <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => 'Постоечката страница <code>LocalSettings.php</code> е нецелосна.
-Не е поставена променливата $1.
-Изменете ја страницата <code>LocalSettings.php</code> така што ќе ѝ зададете вредност на променливата, па стиснете на „{{int:Config-continue}}“.',
-       'config-localsettings-connection-error' => 'Се појави грешка при поврзувањето со базата користејќи ги поставките назначени во <code>LocalSettings.php</code> или <code>AdminSettings.php</code>. Исправете ги овие поставки и обидете се повторно.
-
-$1',
-       'config-session-error' => 'Грешка при започнување на сесијата: $1',
-       'config-session-expired' => 'Вашите сесиски податоци истекоа.
-Поставките на сесиите траат $1.
-Нивниот рок можете да го зголемите со задавање на <code>session.gc_maxlifetime</code> во php.ini.
-Почнете ја инсталацијата одново.',
-       'config-no-session' => 'Вашите сесиски податоци се изгубени!
-Погледајте во php.ini дали <code>session.save_path</code> е поставен во правилна папка.',
-       'config-your-language' => 'Вашиот јазик:',
-       'config-your-language-help' => 'Одберете на кој јазик да се одвива инсталацијата.',
-       'config-wiki-language' => 'Јазик на викито:',
-       'config-wiki-language-help' => 'Одберете на кој јазик ќе бидат содржините на викито.',
-       'config-back' => '← Назад',
-       'config-continue' => 'Продолжи →',
-       'config-page-language' => 'Јазик',
-       'config-page-welcome' => 'Добредојдовте на МедијаВики!',
-       'config-page-dbconnect' => 'Поврзување со базата',
-       'config-page-upgrade' => 'Надградба на постоечката инсталација',
-       'config-page-dbsettings' => 'Нагодувања на базата',
-       'config-page-name' => 'Назив',
-       'config-page-options' => 'Поставки',
-       'config-page-install' => 'Инсталирај',
-       'config-page-complete' => 'Готово!',
-       'config-page-restart' => 'Пушти ја инсталацијата одново',
-       'config-page-readme' => 'Прочитај ме',
-       'config-page-releasenotes' => 'Белешки за изданието',
-       'config-page-copying' => 'Копирање',
-       'config-page-upgradedoc' => 'Надградба',
-       'config-page-existingwiki' => 'Постоечко вики',
-       'config-help-restart' => 'Дали сакате да ги исчистите сите зачувани податоци што ги внесовте и да ја започнете инсталацијата одново?',
-       'config-restart' => 'Да, почни одново',
-       'config-welcome' => '=== Проверки на околината ===
-Сега ќе се извршиме основни проверки за да се востанови дали околината е погодна за инсталирање на МедијаВики. Не заборавајте да ги приложите овие информации ако барате помош со довршување на инсталацијата.',
-       'config-copyright' => "=== Авторски права и услови ===
-
-$1
-
-Ова е слободна програмска опрема (free software); можете да го редистрибуирате и/или менувате согласно условите на ГНУ-овата општа јавна лиценца (GNU General Public License) на Фондацијата за слободна програмска опрема (Free Software Foundation); верзија 2 или било која понова верзија на лиценцата (по ваш избор).
-
-Овој програм се нуди со надеж дека ќе биде корисен, но '''без никаква гаранција'''; дури ни подразбраната гаранција за '''продажна способност''' или '''погодност за определена цел'''.
-Повеќе информации ќе најдете во текстот на ГНУ-овата општа јавна лиценца.
-
-Би требало да имате добиено <doclink href=Copying>примерок од ГНУ-овата општа јавна лиценца</doclink> заедно со програмов; ако немате добиено, тогаш пишете ни на Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. или [http://www.gnu.org/copyleft/gpl.html прочитајте ја тука].",
-       'config-sidebar' => '* [//www.mediawiki.org Домашна страница на МедијаВики]
-* [//www.mediawiki.org/wiki/Help:Contents Водич за корисници]
-* [//www.mediawiki.org/wiki/Manual:Contents Водич за администратори]
-* [//www.mediawiki.org/wiki/Manual:FAQ ЧПП]
-----
-* <doclink href=Readme>Прочитај ме</doclink>
-* <doclink href=ReleaseNotes>Белешки за изданието</doclink>
-* <doclink href=Copying>Копирање</doclink>
-* <doclink href=UpgradeDoc>Надградување</doclink>',
-       'config-env-good' => 'Околината е проверена.
-Можете да го инсталирате МедијаВики.',
-       'config-env-bad' => 'Околината е проверена.
-Не можете да го инсталирате МедијаВики.',
-       'config-env-php' => 'PHP $1 е инсталиран.',
-       'config-env-php-toolow' => 'PHP $1 е инсталиран.
-Меѓутоа, МедијаВики бара PHP $2 или поново.',
-       'config-unicode-using-utf8' => 'Со utf8_normalize.so за уникодна нормализација од Брајон Вибер (Brion Vibber).',
-       'config-unicode-using-intl' => 'Со додатокот [http://pecl.php.net/intl intl PECL] за уникодна нормализација.',
-       'config-unicode-pure-php-warning' => "'''Предупредување''': Додатокот [http://pecl.php.net/intl intl PECL] не е достапен за врши уникодна нормализација, враќајќи се на бавна примена на чист PHP.
-
-Ако имате високопрометно мрежно место, тогаш ќе треба да прочитате повеќе за [//www.mediawiki.org/wiki/Unicode_normalization_considerations уникодната нормализација].",
-       'config-unicode-update-warning' => "'''Предупредување''': Инсталираната верзија на обвивката за уникодна нормализација користи постара верзија на библиотеката на [http://site.icu-project.org/ проектот ICU].
-За да користите Уникод, ќе треба да направите [//www.mediawiki.org/wiki/Unicode_normalization_considerations надградба].",
-       'config-no-db' => 'Не можев да пронајдам соодветен двигател за базата на податоци! Ќе треба да инсталирате двигател за базата на податоци за PHP.
-Поддржани се следниве типови на бази $1.
-
-Ако сте на заедничко (споделено) вдомување, побарајте му на вдомителот да инсталира соодветен двигател за базата.
-Ако вие самите го составивте ова PHP, сменете ги поставките така што ќе овозможите клиент на базата - на пр. со кодот <code>./configure --with-mysql</code>.
-Ако инсталиравте PHP од пакет на Debian или Ubuntu, тогаш ќе треба да го инсталирате и модулот php5-mysql.',
-       'config-outdated-sqlite' => "'''Предупредување''': имате SQLite $1. Најстарата допуштена верзија е $2. Затоа, SQLite ќе биде недостапен.",
-       'config-no-fts3' => "'''Предупредување''': SQLite iе составен без модулот [//sqlite.org/fts3.html FTS3] - за оваа база нема да има можност за пребарување.",
-       'config-register-globals' => "'''Предупредување: Можноста <code>[http://php.net/register_globals register_globals]</code> за PHP е овозможена.'''
-'''Оневозможете ја ако е можно.'''
-МедијаВики ќе работи, но опслужувачот ви е изложен на безбедносни ризици.",
-       'config-magic-quotes-runtime' => "'''Кобно: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] е активно!'''
-Оваа можност непредвидливо го расипува вносот на податоци.
-Оваа можност мора да е исклучена. Во спротивно нема да можете да го инсталирате и користите МедијаВики.",
-       'config-magic-quotes-sybase' => "'''Кобно: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] е активно!'''
-Оваа можност непредвидливо го расипува вносот на податоци.
-Оваа можност мора да е исклучена. Во спротивно нема да можете да го инсталирате и користите МедијаВики.",
-       'config-mbstring' => "'''Кобно: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] е активно!'''
-Оваа можност предизвикува грешки и може непредвидиво да го расипува вносот на податоци.
-Оваа можност мора да е исклучена. Во спротивно нема да можете да го инсталирате и користите МедијаВики.",
-       'config-ze1' => "'''Кобно: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] е активно!'''
-Оваа можност предизвикува ужасни грешки во МедијаВики.
-Оваа можност мора да е исклучена. Во спротивно нема да можете да го инсталирате и користите МедијаВики.",
-       'config-safe-mode' => "'''Предупредување:''' [http://www.php.net/features.safe-mode безбедниот режим] на PHP е активен.
-Ова може да предизвика проблеми, особено ако користите подигања и поддршка за <code>math</code>.",
-       'config-xml-bad' => 'XML-модулот за PHP недостасува.
-МедијаВики има потреба од функции во овој модул и нема да работи со овие поставки.
-Ако работите со Mandrake, инсталирајте го php-xml пакетот.',
-       'config-pcre' => 'Недостасува модулот за поддршка на PCRE.
-МедијаВики не може да работи без функции за регуларни изрази соодветни на Perl.',
-       'config-pcre-no-utf8' => "'''Фатално''': PCRE-модулот на PHP е составен без поддршка за PCRE_UTF8.
-МедијаВики бара поддршка за UTF-8 за да може да работи правилно.",
-       'config-memory-raised' => '<code>memory_limit</code> за PHP изнесува $1, зголемен на $2.',
-       'config-memory-bad' => "'''Предупредување:''' <code>memory_limit</code> за PHP изнесува $1.
-Ова е веројатно премалку.
-Инсталацијата може да не успее!",
-       'config-ctype' => "'''Фатална грешка''': PHP мора да се состави со поддршка за [http://www.php.net/manual/en/ctype.installation.php додатокот Ctype].",
-       'config-json' => "'''Кобно:''' PHP беше срочен без поддршка од JSON.
-Ќе мора да го инсталирате додатокот за JSON во PHP, или додатокот [http://pecl.php.net/package/jsonc PECL jsonc] пред да го инсталирате МедијаВики.
-* Додатокот за PHP е вклучен во верзиите 5 и 6 на Linux (од Red Hat Enterprise) (CentOS), но мора да се активира во <code>/etc/php.ini</code> или <code>/etc/php.d/json.ini</code>.
-* Некои варијанти на Linux излезени по мај 2013 г. не го содржат додатокот за PHP, туку го пакуваат додатокот PECL како <code>php5-json</code> или <code>php-pecl-jsonc</code>.",
-       '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-mod-security' => "'''Предупредување''': на вашиот опслужувач има овозможено [http://modsecurity.org/ mod_security]. Ако не е поставено како што треба, ова може да предизвика проблеми кај МедијаВики и други програми што им овозможуваат на корисниците да објавуваат произволни содржини.
-Погледнете ја [http://modsecurity.org/documentation/ mod_security документацијата] или обратете се кај домаќинот ако наидете на случајни грешки.",
-       'config-diff3-bad' => 'GNU diff3 не е пронајден.',
-       'config-git' => 'Го пронајдов Git програмот за контрола на верзии: <code>$1</code>.',
-       'config-git-bad' => 'Не го пронајдов Git-програмот за контрола на верзии.',
-       'config-imagemagick' => 'Пронајден е ImageMagick: <code>$1</code>.
-Ако овозможите подигање, тогаш ќе биде овозможена минијатуризација на сликите.',
-       'config-gd' => 'Утврдив дека има вградена GD графичка библиотека.
-Ако овозможите подигање, тогаш ќе биде овозможена минијатураизација на сликите.',
-       'config-no-scaling' => 'Не можев да пронајдам GD-библиотека или ImageMagick.
-Минијатуризацијата на сликите ќе биде оневозможена.',
-       'config-no-uri' => "'''Грешка:''' Не можев да го утврдам тековниот URI.
-Инсталацијата е откажана.",
-       '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> е подложна на извршување (пуштање) на произволни скрипти.
-Иако МедијаВики врши безбедносни проверки на сите подигнати податотеки, ве советуваме [//www.mediawiki.org/wiki/Manual:Security#Upload_security да ја затворите оваа безбедносна дупка] пред да овозможите подигање.",
-       'config-no-cli-uploads-check' => "'''Предупредување:''' Вашата основна папка за подигања (<code>$1</code>) не е проверена дали е подложна
-произволно извршување на скрипти во текот на инсталацијата на посредникот на повикувачко ниво (CLI).",
-       'config-brokenlibxml' => 'Вашиот систем има комбинација од PHP и libxml2 верзии и затоа има грешки и може да предизвика скриено расипување на податоците кај МедијаВики и други мрежни програми.
-Надградете го на PHP 5.2.9 и libxml2 2.7.3 или нивни понови верзии! ПРЕКИНУВАМ ([//bugs.php.net/bug.php?id=45996 грешката е заведена во PHP]).',
-       'config-using531' => 'МедијаВики не може да се користи со PHP $1 поради грешка кај упатните параметри за <code>__call()</code>.
-За да го решите проблемот, надградете го на PHP 5.3.2 или понова верзија, или пак користете го постариот PHP 5.3.0.',
-       'config-suhosin-max-value-length' => 'Suhosin е инсталиран и ја ограничува должината на параметарот GET на $1 бајти. Делот ResourceLoader на МедијаВики ќе ја заобиколува ова граница, но со тоа ќе се влоши делотворноста. Ако е воопшто можно, на <code>suhosin.get.max_value_length</code> треба да го наместите на 1024 или повеќе во <code>php.ini</code>, и да му ја зададете истата вредност на <code>$wgResourceLoaderMaxQueryLength</code> во <code>LocalSettings.php</code>.',
-       'config-db-type' => 'Тип на база:',
-       'config-db-host' => 'Домаќин на базата:',
-       'config-db-host-help' => 'Ако вашата база е на друг опслужувач, тогаш тука внесете го името на домаќинот или IP-адресата.
-
-Ако користите заедничко (споделено) вдомување, тогаш вашиот вдомител треба да го наведе точното име на домаќинот во неговата документација.
-
-Ако инсталирате на опслужувач на Windows и користите MySQL, можноста „localhost“ може да не функционира за опслужувачкото име. Во тој случај, обидете се со внесување на „127.0.0.1“ како локална IP-адреса.
-
-Ако користите PostgreSQL, оставете го полево празно за да се поврзете преку Unix-приклучок.',
-       'config-db-host-oracle' => 'TNS на базата:',
-       'config-db-host-oracle-help' => 'Внесете важечко [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm локално име за поврзување]. На оваа инсталација мора да ѝ биде видлива податотеката tnsnames.ora.<br />Ако користите клиентски библиотеки 10g или понови, тогаш можете да го користите и методот на иметнување на [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
-       'config-db-wiki-settings' => 'Идентификувај го викиво',
-       'config-db-name' => 'Име на базата:',
-       'config-db-name-help' => 'Одберете име што ќе го претставува вашето вики.
-Името не смее да содржи празни места.
-
-Ако користите заедничко (споделено) вдомување, тогаш вашиот вдомител ќе ви даде конкретно име на база за користење, или пак ќе ви даде да создавате бази преку контролната табла.',
-       'config-db-name-oracle' => 'Шема на базата:',
-       'config-db-account-oracle-warn' => 'Постојат три поддржани сценарија за инсталирање на Oracle како базен услужник:
-
-Ако сакате да создадете сметка на базата како дел од постапката за инсталација, наведете сметка со SYSDBA-улога како сметка за базата што ќе се инсталира и наведете ги саканите податоци за сметката за мрежен пристап. Во друг случај, можете да создадете сметка за мрежен пристап рачно и да ја наведете само таа сметка (ако има дозволи за создавање на шематски објекти) или пак да наведете две различни сметки, една со привилегии за создавање, а друга (ограничена) за мрежен пристап.
-
-Скриптата за создавање сметка со задолжителни привилегии ќе ја најдете во папката „maintenance/oracle/“ од оваа инсталација. Имајте на ум дека ако користите ограничена сметка ќе ги оневозможите сите функции за одржување со основната сметка.',
-       'config-db-install-account' => 'Корисничка смета за инсталација',
-       'config-db-username' => 'Корисничко име за базата:',
-       'config-db-password' => 'Лозинка за базата:',
-       'config-db-password-empty' => 'Внесете лозинка за новиот корисник на базата: $1.
-Иако може да се создаваат корисници без лозинка, тоа не е безбедно.',
-       'config-db-install-username' => 'Внесете корисничко име што ќе се користи за поврзување со базата во текот на инсталацијата. Ова не е корисничкото име од сметката на МедијаВики, туку посебно корисничко име за вашата база на податоци.',
-       'config-db-install-password' => 'Внесете клозинка што ќе се користи за поврзување со базата во текот на инсталацијата. Ова не е лозинката од сметката на МедијаВики, туку посебна лозинка за вашата база на податоци.',
-       'config-db-install-help' => 'Внесете го корисничкото име и лозинката што ќе се користи за поврзување со базата на податоци во текот на инсталацијата.',
-       'config-db-account-lock' => 'Користи го истото корисничко име и лозинка за редовна работа',
-       'config-db-wiki-account' => 'Корисничко име за редовна работа',
-       'config-db-wiki-help' => 'Внесете корисничко име и лозинка што ќе се користат за поврзување со базата на податоци во текот на редовната работа со викито.
-Ако сметката не постои, а инсталационата сметка има доволно привилегии, тогаш оваа корисничка сметка ќе биде создадена со минималните привилегии потребни за работа со викито.',
-       'config-db-prefix' => 'Префикс на табелата на базата:',
-       'config-db-prefix-help' => 'Ако треба да делите една база на податоци со повеќе викија, или со МедијаВики и друг мрежен програм, тогаш можете да додадете префикс на сите називи на табелите за да спречите проблематични ситуации.
-Не користете празни простори.
-
-Ова поле обично се остава празно.',
-       'config-db-charset' => 'Збир знаци за базата',
-       'config-charset-mysql5-binary' => 'Бинарен за MySQL 4.1/5.0',
-       'config-charset-mysql5' => 'UTF-8 за MySQL 4.1/5.0',
-       'config-charset-mysql4' => 'Назадно-соодветен UTF-8 за MySQL 4.0',
-       'config-charset-help' => "'''ПРЕДУПРЕДУВАЊЕ:''' Ако користите '''назадно-соодветен UTF-8''' во MySQL 4.1+, а потоа направите резервен примерок на базата со <code>mysqldump</code>, ова може да ги опустоши сите не-ASCII знаци, и со тоа неповратно да ја расипе целата зачувана резерва!
-
-Во '''бинарен режим''', во базата МедијаВики го складира UTF-8 текстот во бинарни полиња.
-Ова е поефикансно отколку  UTF-8 режимот на MySQL бидејќи ви овозможува да го користите целиот спектар на уникодни знаци.
-Во '''UTF-8 режим''', MySQL ќе знае на кој збир знаци припаѓаат вашите податоци, и може соодветно да ги претстави и претвори,
-но нема да ви дозволи да складирате знаци над [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Основната повеќејазична рамнина].",
-       'config-mysql-old' => 'Се бара MySQL $1 или поново, а вие имате $2.',
-       'config-db-port' => 'Порта на базата:',
-       'config-db-schema' => 'Шема за МедијаВики',
-       'config-db-schema-help' => 'Оваа шема обично по правило ќе работи нормално.
-Сменете ја само ако знаете дека треба да се смени.',
-       'config-pg-test-error' => "Не можам да се поврзам со базата '''$1''': $2",
-       'config-sqlite-dir' => 'Папка на SQLite-податоци:',
-       'config-sqlite-dir-help' => "SQLite ги складира сите податоци во една податотека.
-
-Папката што ќе ја наведете мора да е запислива од мрежниот опслужувач во текот на инсталацијата.
-
-Таа '''не''' смее да биде достапна преку интернет, и затоа не ја ставаме кајшто ви се наоѓаат PHP-податотеките.
-
-Инсталаторот воедно ќе создаде податотека <code>.htaccess</code>, но ако таа не функционира како што треба, тогаш некој ќе може да ви влезе во вашата необработена (сирова) база на податоци.
-Тука спаѓаат необработени кориснички податоци (е-поштенски адреси, хеширани лозинки) како и избришани ревизии и други податоци за викито до кои се има ограничен пристап.
-
-Се препорачува целата база да ја сместите некаде, како на пр. <code>/var/lib/mediawiki/вашетовики</code>.",
-       'config-oracle-def-ts' => 'Стандарден таблеарен простор:',
-       'config-oracle-temp-ts' => 'Привремен табеларен простор:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => 'МедијаВики ги поддржува следниве системи на бази на податоци:
-
-$1
-
-Ако системот што сакате да го користите не е наведен подолу, тогаш проследете ја горенаведената врска со инструкции за да овозможите поддршка за тој систем.',
-       'config-support-mysql' => '* $1 е главната цел на МедијаВики и најдобро се поддржува ([http://www.php.net/manual/en/mysql.installation.php како се составува PHP со поддршка за MySQL])',
-       'config-support-postgres' => '* $1 е популарен систем на бази на податоци со отворен код кој претставува алтернатива на MySQL ([http://www.php.net/manual/en/pgsql.installation.php како да составите PHP со поддршка за PostgreSQL]). Може сè уште да има некои грешки. па затоа не се препорачува за употреба во производна средина.',
-       'config-support-sqlite' => '* $1 е лесен систем за бази на податоци кој е многу добро поддржан. ([http://www.php.net/manual/en/pdo.installation.php Како да составите PHP со поддршка за SQLite], користи PDO)',
-       'config-support-oracle' => '* $1 е база на податоци на комерцијално претпријатие. ([http://www.php.net/manual/en/oci8.installation.php Како да составите PHP со поддршка за OCI8])',
-       'config-header-mysql' => 'Нагодувања на MySQL',
-       'config-header-postgres' => 'Нагодувања на PostgreSQL',
-       'config-header-sqlite' => 'Нагодувања на SQLite',
-       'config-header-oracle' => 'Нагодувања на Oracle',
-       'config-invalid-db-type' => 'Неважечки тип на база',
-       'config-missing-db-name' => 'Мора да внесете значење за параметарот „Име на базата“',
-       'config-missing-db-host' => 'Мора да внесете вредност за „Домаќин на базата на податоци“',
-       'config-missing-db-server-oracle' => 'Мора да внесете вредност за „TNS на базата“',
-       'config-invalid-db-server-oracle' => 'Неважечки TNS „$1“.
-Користете или „TNS Name“ или низата „Easy Connect“ ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Методи на именување за Oracle])',
-       'config-invalid-db-name' => 'Неважечко име на базата „$1“.
-Користете само ASCII-букви (a-z, A-Z), бројки (0-9), долни црти (_) и цртички (-).',
-       'config-invalid-db-prefix' => 'Неважечки префикс за базата „$1“.
-Користете само ASCII-букви (a-z, A-Z), бројки (0-9), долни црти (_) и цртички (-).',
-       'config-connection-error' => '$1.
-
-Проверете го долунаведениот домаќин, корисничко име и лозинка и обидете се повторно.',
-       'config-invalid-schema' => 'Неважечка шема за МедијаВики „$1“.
-Користете само букви, бројки и долни црти.',
-       'config-db-sys-create-oracle' => 'Инсталаторот поддржува само употреба на SYSDBA-сметка за создавање на нова сметка.',
-       'config-db-sys-user-exists-oracle' => 'Корисничката сметка „$1“ веќе постои. SYSDBA служи само за создавање на нова сметка!',
-       'config-postgres-old' => 'Се бара PostgreSQL $1 или поново, а вие имате $2.',
-       'config-sqlite-name-help' => 'Одберете име кое ќе го претставува вашето вики.
-Не користете празни простори и црти.
-Ова ќе се користи за податотечното име на SQLite-податоците.',
-       'config-sqlite-parent-unwritable-group' => 'Не можам да ја создадам папката <code><nowiki>$1</nowiki></code> бидејќи мрежниот опслужувач не може да запише во матичната папка <code><nowiki>$2</nowiki></code>.
-
-Инсталаторот го утврди корисникот под кој работи вашиот мрежен опслужувач.
-За да продолжите, наместете да може да запишува во папката <code><nowiki>$3</nowiki></code>.
-На Unix/Linux систем направете го следново:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Не можам да ја создадам папката <code><nowiki>$1</nowiki></code> бидејќи мрежниот опслужувач не може да запише во матичната папка <code><nowiki>$2</nowiki></code>.
-
-Инсталаторот не можеше го утврди корисникот под кој работи вашиот мрежен опслужувач.
-За да продолжите, наместете тој (и други!) да може глобално да запишува во папката <code><nowiki>$3</nowiki></code>
-На Unix/Linux систем направете го следново:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Грешка при создавањето на податочната папка „$1“.
-Проверете каде се наоѓа и обидете се повторно.',
-       'config-sqlite-dir-unwritable' => 'Не можам да запишам во папката „$1“.
-Во дозволите за неа, овозможете му на мрежниот опслужувач да запишува во неа и обидете се повторно.',
-       'config-sqlite-connection-error' => '$1.
-
-Проверете ја податочната папка и името на базата, и обидете се повторно.',
-       'config-sqlite-readonly' => 'Податотеката <code>$1</code> е незапислива.',
-       'config-sqlite-cant-create-db' => 'Не можев да ја создадам податотеката <code>$1</code> за базата.',
-       'config-sqlite-fts3-downgrade' => 'PHP нема поддршка за FTS3 — ја поништувам надградбата за табелите',
-       'config-can-upgrade' => "Во оваа база има табели на МедијаВики.
-За да ги надградите на МедијаВики $1, кликнете на '''Продолжи'''.",
-       'config-upgrade-done' => "Надградбата заврши.
-
-Сега можете да [$1 почнете да го користите вашето вики].
-
-Ако сакате да ја пресоздадете вашата податотека <code>LocalSettings.php</code>, тогаш кликнете на копчето подолу.
-Ова '''не се препорачува''' освен во случај на проблеми со викито.",
-       'config-upgrade-done-no-regenerate' => 'Надградбата заврши.
-
-Сега можете да [$1 почнете да го користите викито].',
-       'config-regenerate' => 'Пресоздај LocalSettings.php →',
-       'config-show-table-status' => 'Барањето <code>SHOW TABLE STATUS</code> не успеа!',
-       'config-unknown-collation' => "'''Предупредување:''' Базата корисни непрепознаена упатна споредба.",
-       'config-db-web-account' => 'Сметка на базата за мрежен пристап',
-       'config-db-web-help' => 'Одберете корисничко име и лозинка што ќе ги користи мрежниот опслужувач за поврзување со опслужувачот на базта на податоци во текот на редовната работа со викито.',
-       'config-db-web-account-same' => 'Користи ја истата сметка од инсталацијата',
-       'config-db-web-create' => 'Создај ја сметката ако веќе не постои',
-       'config-db-web-no-create-privs' => 'Сметката што ја назначивте за инсталација нема доволно привилегии за да може да создаде сметка.
-Тука мора да назначите постоечка сметка.',
-       'config-mysql-engine' => 'Складишен погон:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Предупредување''': Го одбравте MyISAM како складишен погон за MySQL. Но тој не се препорачува за МедијаВики бидејќи:
-* одвај поддржува едновременост поради заклучување на табелите
-* поподложен на расипување од другите погони
-* кодната база на МедијаВики не секогаш може да работи со MyISAM како што треба
-
-Ако вашата инсталација на MySQL поддржува InnoDB, тогаш сериозно препорачуваме да го користите него наместо MyISAM.
-Ако вашата инсталација на MySQL не поддржува InnoDB, веројатно дошло време за надградба.",
-       'config-mysql-only-myisam-dep' => "'''Предупредување:''' MyISAM е единствениот достапен складишен погон за MySQL, што не се препорачува за употреба со МедијаВики, бидејќи:
-* речиси не поддржува истовремено извршување на задачите поради заклучувањето на табелите
-* поподложен е на расипувања од другите погони
-* кодната база на МедијаВИки не секогаш работи исправно со MyISAM
-Вашата инсталација на MySQL не поддржува InnoDB. Можеби е време да ја надградите.",
-       'config-mysql-engine-help' => "'''InnoDB''' речиси секогаш е најдобар избор, бидејќи има добра поддршка за едновременост.
-
-'''MyISAM''' може да е побрз кај инсталациите наменети за само еден корисник или незаписни инсталации (само читање).
-Базите на податоци од MyISAM почесто се расипуваат од базите на InnoDB.",
-       'config-mysql-charset' => 'Збир знаци за базата:',
-       'config-mysql-binary' => 'Бинарен',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "Во '''бинарен режим''', во базата на податоци МедијаВики складира UTF-8 текст во бинарни полиња.
-Ова е поефикасно отколку  TF-8 режимот на MySQL, и ви овозможува да ја користите целата палета на уникодни знаци.
-
-Во '''UTF-8 режим''', MySQL ќе знае на кој збир знаци припаѓаат вашите податоци, и може соодветно да ги претстави и претвори, но нема да ви дозволи да складиратезнаци над [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Основната повеќејазична рамнина].",
-       'config-site-name' => 'Име на викито:',
-       'config-site-name-help' => 'Ова ќе се појавува во заглавната лента на прелистувачот и на разни други места.',
-       'config-site-name-blank' => 'Внесете име на мрежното место.',
-       'config-project-namespace' => 'Проектен именски простор:',
-       'config-ns-generic' => 'Проект',
-       'config-ns-site-name' => 'Исто име како викито: $1',
-       'config-ns-other' => 'Друго (наведете)',
-       'config-ns-other-default' => 'МоеВики',
-       'config-project-namespace-help' => "По примерот на Википедија, многу викија ги чуваат страниците со правила на посебно место од самите содржини, т.е. во „'''проектен именски простор'''“.
-Сите наслови на страниците во овој именски простор почнуваат со извесна претставка, којшто можете да го укажете тука.
-По традиција претставката произлегува од името на викито, но не смее да содржи интерпункциски знаци како „#“ или „:“.",
-       'config-ns-invalid' => 'Назначениот именски простор „<nowiki>$1</nowiki>“ е неважечки.
-Назначете друг проектен именски простор.',
-       'config-ns-conflict' => 'Наведениот именски простор „<nowiki>$1</nowiki>“ се коси со основниот именски простор на МедијаВики.
-Наведете друг именски простор за проектот.',
-       'config-admin-box' => 'Администратоска сметка',
-       'config-admin-name' => 'Вашето име:',
-       'config-admin-password' => 'Лозинка:',
-       'config-admin-password-confirm' => 'Пак лозинката:',
-       'config-admin-help' => 'Тука внесете го вашето корисничко име, на пр. „Петар Петровски“.
-Ова име ќесе користи за најава во викито.',
-       'config-admin-name-blank' => 'Внесете администраторско корисничко име.',
-       'config-admin-name-invalid' => 'Назначенотго корисничко име „<nowiki>$1</nowiki>“ е неважечко.
-Назначете друго.',
-       'config-admin-password-blank' => 'Внесете лозинка за администраторската сметка',
-       'config-admin-password-same' => 'Лозинката не може да биде иста со корисничкото име.',
-       'config-admin-password-mismatch' => 'Лозинките што ги внесовте не се совпаѓаат.',
-       'config-admin-email' => 'Е-поштенска адреса:',
-       'config-admin-email-help' => 'Тука внесете е-поштенска адреса за да можете да добивате е-пошта од други корисници на викито, да ја менувате лозинката, и да бидете известувани за промени во страниците на вашиот список на набљудувања. Можете и да го оставите празно.',
-       'config-admin-error-user' => 'Се појави внатрешна грешка при создавањето на администраторот со име „<nowiki>$1</nowiki>“.',
-       'config-admin-error-password' => 'Се појави внатрешна грешка при задавање на лозинката за администраторот „<nowiki>$1</nowiki>“: <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Внесовте неважечка е-поштенска адреса',
-       'config-subscribe' => 'Претплатете се на [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce release поштенскиот список за известувања].',
-       'config-subscribe-help' => 'Ова е нископрометен поштенски список кој се користи за соопштувања во врска со изданија, вклучувајќи важни безбедносни соопштенија.
-Треба да се претплатите и да ја надградувате вашата инсталација на МедијаВики кога излегуваат нови верзии.',
-       'config-subscribe-noemail' => 'Се обидовте да се претплатите на поштенскиот список со известувања за нови изданија без да наведете е-пошта.
-Наведете е-поштенска адреса ако сакате да се претплатите на списокот.',
-       'config-almost-done' => 'Уште малку сте готови!
-Сега можете да ги прескокнете преостанатите поставувања и веднаш да го инсталирате викито.',
-       'config-optional-continue' => 'Постави ми повеќе прашања.',
-       'config-optional-skip' => 'Веќе ми здосади, дај само инсталирај го викито.',
-       'config-profile' => 'Профил на кориснички права:',
-       'config-profile-wiki' => 'Отворено вики',
-       'config-profile-no-anon' => 'Задолжително отворање сметка',
-       'config-profile-fishbowl' => 'Само овластени уредници',
-       'config-profile-private' => 'Приватно вики',
-       'config-profile-help' => "Викијата функционираат најдобро кога имаат што повеќе уредници.
-Во МедијаВики лесно се проверуваат скорешните промени, и лесно се исправа (технички: „враќа“) штетата направена од неупатени или злонамерни корисници.
-
-Многумина имаат најдено најразлични полезни примени за МедијаВики, но понекогаш не е лесно да убедите некого во предностите на вики-концептот.
-Значи имате избор.
-
-'''{{int:config-profile-wiki}}''' — модел според кој секој може да уредува, дури и без најавување.
-Ако имате вики со '''задолжително отворање на сметка''', тогаш добивате повеќе контрола, но ова може даги одврати спонтаните учесници.
-
-'''{{int:config-profile-fishbowl}}''' — може да уредуваат само уредници што имаат добиено дозвола за тоа, но јавноста може да ги гледа страниците, вклучувајќи ја нивната историја.
-'''{{int:config-profile-private}}''' — страниците се видливи и уредливи само за овластени корисници.
-
-По инсталацијата имате на избор и посложени кориснички права и поставки. Погледајте во [//www.mediawiki.org/wiki/Manual:User_rights прирачникот].",
-       'config-license' => 'Авторски права и лиценца:',
-       'config-license-none' => 'Без подножје за лиценца',
-       'config-license-cc-by-sa' => 'Криејтив комонс НаведиИзвор СподелиПодИстиУслови',
-       'config-license-cc-by' => 'Криејтив комонс НаведиИзвор',
-       'config-license-cc-by-nc-sa' => 'Криејтив комонс НаведиИзвор-Некомерцијално-СподелиПодИстиУслови',
-       'config-license-cc-0' => 'Криејтив комонс Нула (јавна сопственост)',
-       'config-license-gfdl' => 'ГНУ-ова лиценца за слободна документација 1.3 или понова',
-       'config-license-pd' => 'Јавна сопственост',
-       'config-license-cc-choose' => 'Одберете друга лиценца на Криејтив комонс по ваш избор',
-       'config-license-help' => "Многу јавни викија ги ставаат сите придонеси под [http://freedomdefined.org/Definition слободна лиценца].
-Со ова се создава атмосфера на општа сопственост и поттикнува долгорочно учество.
-Ова не е неопходно за викија на поединечни физички или правни лица.
-
-Ако сакате да користите текст од Википедија, и сакате Википедија да прифаќа текст прекопиран од вашето вики, тогаш треба да ја одберете лиценцата '''Криејтив комонс НаведиИзвор СподелиПодИстиУслови'''.
-
-ГНУ-овата лиценца за слободна документација (ГЛСД) е старата лиценца на Википедија.
-Оваа лиценца сè уште важи, но е тешка за разбирање.
-Исто така треба да се има на ум дека пренамената на содржините под ГЛСД не е лесна.",
-       'config-email-settings' => 'Нагодувања за е-пошта',
-       'config-enable-email' => 'Овозможи излезна е-пошта',
-       'config-enable-email-help' => 'Ако сакате да работи е-поштата, [http://www.php.net/manual/en/mail.configuration.php поштенските нагодувања на PHP] треба да се правилно наместени.
-Ако воопшто не сакате никакви функции за е-пошта, тогаш можете да ги оневозможите тука.',
-       'config-email-user' => 'Овозможи е-пошта од корисник до корисник',
-       'config-email-user-help' => 'Дозволи сите корисници да можат да си праќаат е-пошта ако ја имаат овозможено во нагодувањата.',
-       'config-email-usertalk' => 'Овозможи известувања за промени во кориснички страници за разговор',
-       'config-email-usertalk-help' => 'Овозможи корисниците да добиваат известувања за промени во нивните кориснички страници за разговор ако ги имаат овозможено во нагодувањата.',
-       'config-email-watchlist' => 'Овозможи известувања за список на набљудувања',
-       'config-email-watchlist-help' => 'Овозможи корисниците да добиваат известувања за нивните набљудувани страници ако ги имаат овозможено во нагодувањата.',
-       'config-email-auth' => 'Овозможи потврдување на е-пошта',
-       'config-email-auth-help' => "Ако оваа можност е вклучена, тогаш корисниците ќе мора да ја потврдат нивната е-поштенска адреса преку врска испратена до нив кога ја укажуваат или менуваат е-поштенската адреса.
-Само корисници со потврдена е-пошта можат да добиваат е-пошта од други корисници или да ги менуваат писмата за известување.
-Оваа можност е '''препорачана''' за јавни викија поради можни злоупотреби на е-поштенската функција.",
-       'config-email-sender' => 'Повратна е-поштенска адреса:',
-       'config-email-sender-help' => 'Внесете ја е-поштенската адреса што ќе се користи како повратна адреса за излезна е-пошта.
-Таму ќе се испраќаат вратените (непримени) писма.
-Многу поштенски опслужувачи бараат барем делот за доменско име да биде важечки.',
-       'config-upload-settings' => 'Подигање на слики и податотеки',
-       'config-upload-enable' => 'Овозможи подигање на податотеки',
-       'config-upload-help' => 'Подигањето на податотеки потенцијално го изложуваат вашиот опслужувач на безбедносни ризици.
-За повеќе информации, прочитајте го [//www.mediawiki.org/wiki/Manual:Security поглавието за безбедност] во прирачникот.
-
-За да овозможите подигање на податотеки, сменете го режимот на потпапката <code>images</code> во основната папка на МедијаВики, за да му овозможите на мрежниот опслужувач да запишува во неа.
-Потоа овозможете ја оваа функција.',
-       'config-upload-deleted' => 'Папка за избришаните податотеки:',
-       'config-upload-deleted-help' => 'Одберете во која папка да се архивираат избришаните податотеки.
-Најдобро би било ако таа не е достапна преку интернет.',
-       'config-logo' => 'URL за логото:',
-       'config-logo-help' => 'Матичното руво на МедијаВики има простор за лого од 135x160 пиксели над страничната лента.
-
-Можете да употребите <code>$wgStylePath</code> или <code>$wgScriptPath</code> ако вашето лого е релативно на тие патеки.
-
-Ако не сакате да имате лого, тогаш оставете го ова поле празно.',
-       'config-instantcommons' => 'Овозможи Instant Commons',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] е функција која им овозможува на викијата да користат слики, звучни записи и други мултимедијални содржини од [//commons.wikimedia.org/ Заедничката Ризница].
-За да може ова да работи, МедијаВики бара пристап до интернет.
-
-За повеќе информации за оваа функција и напатствија за нејзино поставување на вики (сите други освен Ризницата), коносултирајте го [//mediawiki.org/wiki/Manual:$wgForeignFileRepos прирачникот].',
-       'config-cc-error' => 'Изборникот на лиценци од Криејтив комонс не даде резултати.
-Внесете го името на лиценцата рачно.',
-       'config-cc-again' => 'Одберете повторно...',
-       'config-cc-not-chosen' => 'Одберете ја саканата лиценца од Криејтив комонс и стиснете на „продолжи“.',
-       'config-advanced-settings' => 'Напредни нагодувања',
-       'config-cache-options' => 'Нагодувања за кеширање на објекти:',
-       'config-cache-help' => 'Кеширањето на објекти се користи за зголемување на брзината на МедијаВики со кеширање на често употребуваните податоци.
-Ова многу се препорачува на средни до големи викија, но од тоа ќе имаат полза и малите викија.',
-       'config-cache-none' => 'Без кеширање (не се остранува ниедна функција, но може да влијае на брзината кај поголеми викија)',
-       'config-cache-accel' => 'Кеширање на PHP-објекти (APC, XCache или WinCache)',
-       'config-cache-memcached' => 'Користи Memcached (бара дополнително поставување и нагодување)',
-       'config-memcached-servers' => 'Memcached-опслужувачи:',
-       'config-memcached-help' => 'Список на IP-адреси за употреба во Memcached.
-Треба да се наведе по една во секој ред, како и портата што ќе се користи. На пример:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => 'Го одбравте Memcached како ваш ваш тип на скришно памтење (кеш), но не наведовте опслужувач(и)',
-       'config-memcache-badip' => 'Внесовте неважечка IP-адреса за Memcached: $1',
-       'config-memcache-noport' => 'Не ја наведовте портата за опслужувачот на Memcached: $1.
-Ако не знаете која порта треба да се користи, основната е 11211',
-       'config-memcache-badport' => 'Бројките за портата на Memcached треба да бидат помеѓу $1 и $2',
-       'config-extensions' => 'Додатоци',
-       'config-extensions-help' => 'Во вашата папка <code>./extensions</code> беа востановени горенаведените додатоци.
-
-За ова може да треба дополнително нагодување, но можете да ги овозможите сега',
-       'config-install-alreadydone' => "'''Предупредување:''' Изгледа дека веќе го имате инсталирано МедијаВики и сега сакате да го инсталирате повторно.
-Продолжете на следната страница.",
-       'config-install-begin' => 'Стискајќи на „{{int:config-continue}}“ ќе ја започнете инсталацијата на МедијаВики.
-Ако сакате да направите измени во досегашното, стиснете на „{{int:config-back}}“.',
-       'config-install-step-done' => 'готово',
-       'config-install-step-failed' => 'не успеа',
-       'config-install-extensions' => 'Вклучувам додатоци',
-       'config-install-database' => 'Ја поставувам базата на податоци',
-       'config-install-schema' => 'Создавам шема',
-       'config-install-pg-schema-not-exist' => 'PostgreSQL-шемата не постои',
-       'config-install-pg-schema-failed' => 'Создавањето натабелите не успеа.
-Проверете дали корисникот „$1“ може да запишува во шемата „$2“.',
-       'config-install-pg-commit' => 'Спроведување на промени',
-       'config-install-pg-plpgsql' => 'Проверувам јазик PL/pgSQL',
-       'config-pg-no-plpgsql' => 'Ќе треба да го инсталирате јазикот PL/pgSQL во базата $1',
-       'config-pg-no-create-privs' => 'Сметката што ја наведовте за инсталацијата нема доволно привилегии за да создаде друга сметка.',
-       'config-pg-not-in-role' => 'Сметката што ја наведовте за мрежниот корисник веќе постои.
-Сметката што ја наведовте за инсталација не е суперкорисник и не ѝ припаѓа на улогата на мрежниот корисник, па затоа не може да создава објекти во негова  сопственост.
-
-МедијаВики налага дека табелите мора да се во сопственост на мрежниот корисник. Наведете друга мрежна сметка, или стиснете на „назад“ и наведете соодветно привилегиран корисник за инталацијата.',
-       'config-install-user' => 'Создавам корисник за базата',
-       'config-install-user-alreadyexists' => 'Корисникот „$1“ веќе постои',
-       'config-install-user-create-failed' => 'Создавањето на корисникот „$1“ не успеа: $2',
-       'config-install-user-grant-failed' => 'Доделувањето на дозвола на корисникот „$1“ не успеа: $2',
-       'config-install-user-missing' => 'Наведениот корисник „$1“ не постои.',
-       'config-install-user-missing-create' => 'Наведениот корисник „$1“ не постои.
-Ако сакате да го создадете, штиклирајте ја можноста „создај сметка“.',
-       'config-install-tables' => 'Создавам табели',
-       'config-install-tables-exist' => "'''Предупредување''': Изгледа дека табелите за МедијаВики веќе постојат.
-Го прескокнувам создавањето.",
-       'config-install-tables-failed' => "'''Грешка''': Создавањето на табелата не успеа поради следнава грешка: $1",
-       'config-install-interwiki' => 'Ги пополнувам основно зададените меѓувики-табели',
-       'config-install-interwiki-list' => 'Не можев да ја пронајдам податотеката <code>interwiki.list</code>.',
-       'config-install-interwiki-exists' => "'''Предупредување''': Табелата со интервикија веќе содржи ставки.
-Го прескокнувам основно-зададениот список.",
-       'config-install-stats' => 'Ги подготвувам статистиките',
-       'config-install-keys' => 'Создавање на тајни клучеви',
-       'config-insecure-keys' => "'''Предупредување:''' {{PLURAL:$2|Безбедносниот клуч $1 создаден во текот на инсталацијата не е сосем безбеден|Безбедносните клучеви $1 создадени во текот на инсталацијата не се сосем безбедни}}. Ви препорачуваме да {{PLURAL:$2|го|ги}} смените рачно.",
-       'config-install-sysop' => 'Создавање на администраторска корисничка сметка',
-       'config-install-subscribe-fail' => 'Не можам да ве претплатам на известувањето mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'cURL не е инсталиран, а allow_url_fopen не е достапно.',
-       'config-install-mainpage' => 'Создавам главна страница со стандардна содржина',
-       'config-install-extension-tables' => 'Изработка на табели за овозможени додатоци',
-       'config-install-mainpage-failed' => 'Не можев да вметнам главна страница: $1',
-       'config-install-done' => "'''Честитаме!'''
-Успешно го инсталиравте МедијаВики.
-
-Инсталаторот создаде податотека <code>LocalSettings.php</code>.
-Таму се содржат сите ваши нагодувања.
-
-Ќе треба да ја преземете и да ја ставите во основата на инсталацијата (истата папка во која се наоѓа index.php). Преземањето треба да е започнато автоматски.
-
-Ако не ви е понудено преземање, или пак ако сте го откажале, можете да го почнете одново стискајќи на следнава врска:
-
-$3
-
-'''Напомена''': Ако ова не го направите сега, податотеката со поставки повеќе нема да биде на достапна.
-
-Откога ќе завршите со тоа, можете да '''[$2 влезете на вашето вики]'''.",
-       'config-download-localsettings' => 'Преземи го <code>LocalSettings.php</code>',
-       'config-help' => 'помош',
-       'config-nofile' => 'Податотеката „$1“ не е пронајдена. Да не е избришана?',
-       'config-extension-link' => 'Дали сте знаеле дека вашето вики поддржува [//www.mediawiki.org/wiki/Manual:Extensions додатоци]?
-
-Можете да ги прелистате [//www.mediawiki.org/wiki/Category:Extensions_by_category по категории] или да ја посетите [//www.mediawiki.org/wiki/Extension_Matrix матрицата], каде ќе најдете полн список на додатоци.',
-       'mainpagetext' => "'''МедијаВики е успешно инсталиран.'''",
-       'mainpagedocfooter' => 'Погледнете го [//meta.wikimedia.org/wiki/Help:Contents Упатството за корисници] за подетални иформации како се користи вики-програмот.
-
-==Од каде да почнете==
-* [//meta.wikimedia.org/wiki/Manual:Configuration_settings Список на нагодувања]
-* [//meta.wikimedia.org/wiki/Manual:FAQ ЧПП (често поставувани прашања) за МедијаВики].
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Поштенски список на МедијаВики за нови верзии]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Локализирајте го МедијаВики на вашиот јазик]',
-);
-
-/** Malayalam (മലയാളം)
- * @author Praveenp
- * @author Sadik Khalid
- */
-$messages['ml'] = array(
-       'config-desc' => 'മീഡിയവിക്കി ഇൻസ്റ്റോളർ',
-       'config-title' => 'മീഡിയവിക്കി $1 ഇൻസ്റ്റലേഷൻ',
-       'config-information' => 'വിവരങ്ങൾ',
-       'config-localsettings-upgrade' => "'''അറിയിപ്പ്''': ഒരു <code>LocalSettings.php</code> ഫയൽ കാണുന്നു.
-സോഫ്റ്റ്‌വേർ അപ്‌ഗ്രേഡ് ചെയ്യുക സാദ്ധ്യമാണ്.
-ദയവായി പെട്ടിയിൽ <code>\$wgUpgradeKey</code> എന്നതിന്റെ വില നൽകുക.", # Fuzzy
-       'config-localsettings-key' => 'അപ്‌ഗ്രേഡ് ചാവി:',
-       'config-localsettings-badkey' => 'താങ്കൾ നൽകിയ ചാവി തെറ്റാണ്',
-       'config-session-error' => 'സെഷൻ തുടങ്ങുന്നതിൽ പിഴവ്: $1',
-       'config-your-language' => 'താങ്കളുടെ ഭാഷ:',
-       'config-your-language-help' => 'ഇൻസ്റ്റലേഷൻ പ്രക്രിയയിൽ ഉപയോഗിക്കേണ്ട ഭാഷ തിരഞ്ഞെടുക്കുക.',
-       'config-wiki-language' => 'വിക്കി ഭാഷ:',
-       'config-wiki-language-help' => 'വിക്കിയിൽ പ്രധാനമായി ഉപയോഗിക്കേണ്ട ഭാഷ തിരഞ്ഞെടുക്കുക.',
-       'config-back' => '← പിന്നിലേയ്ക്ക്',
-       'config-continue' => 'തുടരുക →',
-       'config-page-language' => 'ഭാഷ',
-       'config-page-welcome' => 'മീഡിയവിക്കിയിലേയ്ക്ക് സ്വാഗതം!',
-       'config-page-dbconnect' => 'ഡേറ്റാബേസുമായി ബന്ധപ്പെടുക',
-       'config-page-upgrade' => 'നിലവിലുള്ള ഇൻസ്റ്റലേഷൻ അപ്‌ഗ്രേഡ് ചെയ്യുക',
-       'config-page-dbsettings' => 'ഡേറ്റാബേസ് സജ്ജീകരണങ്ങൾ',
-       'config-page-name' => 'പേര്',
-       'config-page-options' => 'ഐച്ഛികങ്ങൾ',
-       'config-page-install' => 'ഇൻസ്റ്റോൾ',
-       'config-page-complete' => 'സമ്പൂർണ്ണം!',
-       'config-page-restart' => 'ഇൻസ്റ്റലേഷൻ അടച്ച ശേഷം പുനർപ്രവർത്തിപ്പിക്കുക',
-       'config-page-readme' => 'ഇത് വായിക്കൂ',
-       'config-page-releasenotes' => 'പ്രകാശന കുറിപ്പുകൾ',
-       'config-page-copying' => 'പകർത്തൽ',
-       'config-page-upgradedoc' => 'അപ്‌ഗ്രേഡിങ്',
-       'config-help-restart' => 'ഇതുവരെ ഉൾപ്പെടുത്തിയ എല്ലാവിവരങ്ങളും ഒഴിവാക്കാനും ഇൻസ്റ്റലേഷൻ പ്രക്രിയ നിർത്തി-വീണ്ടുമാരംഭിക്കാനും താങ്കളാഗ്രഹിക്കുന്നുണ്ടോ?',
-       'config-restart' => 'അതെ, പുനർപ്രവർത്തിപ്പിക്കുക',
-       'config-sidebar' => '* [//www.mediawiki.org മീഡിയവിക്കി പ്രധാനതാൾ]
-* [//www.mediawiki.org/wiki/Help:Contents ഉപയോക്തൃസഹായി]
-* [//www.mediawiki.org/wiki/Manual:Contents കാര്യനിർവഹണസഹായി]
-* [//www.mediawiki.org/wiki/Manual:FAQ പതിവുചോദ്യങ്ങൾ]', # Fuzzy
-       'config-env-php' => 'പി.എച്ച്.പി. $1 ഇൻസ്റ്റോൾ ചെയ്തിട്ടുണ്ട്.',
-       'config-no-db' => 'അനുയോജ്യമായ ഡേറ്റാബേസ് ഡ്രൈവർ കണ്ടെത്താനായില്ല!', # Fuzzy
-       'config-memory-raised' => 'പി.എച്ച്.പി.യുടെ <code>memory_limit</code> $1 ആണ്, $2 ആയി ഉയർത്തിയിരിക്കുന്നു.',
-       'config-memory-bad' => "'''മുന്നറിയിപ്പ്:''' പി.എച്ച്.പി.യുടെ <code>memory_limit</code> $1 ആണ്.
-ഇത് മിക്കവാറും വളരെ കുറവാണ്.
-ഇൻസ്റ്റലേഷൻ പരാജയപ്പെട്ടേക്കാം!",
-       'config-db-type' => 'ഡേറ്റാബേസ് തരം:',
-       'config-db-host' => 'ഡേറ്റാബേസ് ഹോസ്റ്റ്:',
-       'config-db-name' => 'ഡേറ്റാബേസിന്റെ പേര്:',
-       'config-db-name-oracle' => 'ഡേറ്റാബേസ് സ്കീമ:',
-       'config-db-install-account' => 'ഇൻസ്റ്റലേഷനുള്ള ഉപയോക്തൃ അംഗത്വം',
-       'config-db-username' => 'ഡേറ്റാബേസ് ഉപയോക്തൃനാമം:',
-       'config-db-password' => 'ഡേറ്റാബേസ് രഹസ്യവാക്ക്:',
-       'config-mysql-old' => 'മൈഎസ്‌ക്യൂഎൽ $1 അഥവാ അതിലും പുതിയത് ആവശ്യമാണ്, താങ്കളുടെ പക്കൽ ഉള്ളത് $2 ആണ്.',
-       'config-db-port' => 'ഡേറ്റാബേസ് പോർട്ട്:',
-       'config-db-schema' => 'മീഡിയവിക്കിയ്ക്കായുള്ള സ്കീമ',
-       'config-support-info' => 'മീഡിയവിക്കി താഴെ പറയുന്ന ഡേറ്റാബേസ് സിസ്റ്റംസ് പിന്തുണയ്ക്കുന്നു:
-
-$1
-
-താങ്കൾ ഉപയോഗിക്കാനാഗ്രഹിക്കുന്ന ഡേറ്റാബേസ് സിസ്റ്റം പട്ടികയിലില്ലെങ്കിൽ, ദയവായി പിന്തുണ സജ്ജമാക്കാനായി മുകളിൽ നൽകിയിട്ടുള്ള ലിങ്കിലെ നിർദ്ദേശങ്ങൾ ചെയ്യുക.',
-       'config-header-mysql' => 'മൈഎസ്‌ക്യൂഎൽ സജ്ജീകരണങ്ങൾ',
-       'config-invalid-db-type' => 'അസാധുവായ ഡേറ്റാബേസ് തരം',
-       'config-missing-db-name' => '"ഡേറ്റാബേസിന്റെ പേരി"ന് ഒരു വില നിർബന്ധമായും നൽകിയിരിക്കണം',
-       'config-connection-error' => '$1.
-
-താഴെ നൽകിയിരിക്കുന്ന ഹോസ്റ്റ്, ഉപയോക്തൃനാമം, രഹസ്യവാക്ക് എന്നിവ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.',
-       'config-regenerate' => 'LocalSettings.php പുനഃസൃഷ്ടിക്കുക →',
-       'config-mysql-engine' => 'സ്റ്റോറേജ് എൻജിൻ:',
-       'config-site-name' => 'വിക്കിയുടെ പേര്:',
-       'config-site-name-help' => 'ഇത് ബ്രൗസറിന്റെ ടൈറ്റിൽ ബാറിലും മറ്റനേകം ഇടങ്ങളിലും പ്രദർശിപ്പിക്കപ്പെടും.',
-       'config-site-name-blank' => 'സൈറ്റിന്റെ പേര് നൽകുക.',
-       'config-project-namespace' => 'പദ്ധതി നാമമേഖല:',
-       'config-ns-generic' => 'പദ്ധതി',
-       'config-ns-site-name' => 'വിക്കിയുടെ പേര് തന്നെ: $1',
-       'config-ns-other' => 'ഇതരം (വ്യക്തമാക്കുക)',
-       'config-ns-other-default' => 'എന്റെ‌വിക്കി',
-       'config-admin-box' => 'കാര്യനിർവാഹക അംഗത്വം',
-       'config-admin-name' => 'താങ്കളുടെ പേര്:',
-       'config-admin-password' => 'രഹസ്യവാക്ക്:',
-       'config-admin-password-confirm' => 'രഹസ്യവാക്ക് ഒരിക്കൽക്കൂടി:',
-       'config-admin-help' => 'ഇവിടെ താങ്കളുടെ ഇച്ഛാനുസരണമുള്ള ഉപയോക്തൃനാമം നൽകുക, ഉദാഹരണം "ശശി കൊട്ടാരത്തിൽ".
-ഈ പേരായിരിക്കണം വിക്കിയിൽ പ്രവേശിക്കാൻ താങ്കൾ ഉപയോഗിക്കേണ്ടത്.',
-       'config-admin-name-blank' => 'ഒരു കാര്യനിർവാഹക ഉപയോക്തൃനാമം നൽകുക.',
-       'config-admin-name-invalid' => 'നൽകിയിട്ടുള്ള ഉപയോക്തൃനാമം "<nowiki>$1</nowiki>" അസാധുവാണ്.
-മറ്റൊരു ഉപയോക്തൃനാമം നൽകുക.',
-       'config-admin-password-blank' => 'കാര്യനിർവാഹക അംഗത്വത്തിനുള്ള രഹസ്യവാക്ക് നൽകുക.',
-       'config-admin-password-same' => 'രഹസ്യവാക്കും ഉപയോക്തൃനാമവും ഒന്നാകരുത്.',
-       'config-admin-password-mismatch' => 'താങ്കൾ നൽകിയ രഹസ്യവാക്കുകൾ രണ്ടും തമ്മിൽ യോജിക്കുന്നില്ല.',
-       'config-admin-email' => 'ഇമെയിൽ വിലാസം:',
-       'config-admin-error-user' => '"<nowiki>$1</nowiki>" എന്ന പേരിലുള്ള കാര്യനിർവഹണ അംഗത്വ നിർമ്മിതിയ്ക്കിടെ ആന്തരികമായ പിഴവുണ്ടായി.',
-       'config-admin-error-password' => '"<nowiki>$1</nowiki>" എന്ന പേരിലുള്ള കാര്യനിർവാഹക അംഗത്വത്തിനു രഹസ്യവാക്ക് സജ്ജീകരിച്ചപ്പോൾ ആന്തരികമായ പിഴവുണ്ടായി: <pre>$2</pre>',
-       'config-subscribe' => '[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce പ്രകാശന അറിയിപ്പ് മെയിലിങ് ലിസ്റ്റിൽ] വരിക്കാരാകുക.',
-       'config-subscribe-help' => 'പുറത്തിറക്കൽ അറിയിപ്പുകളും, പ്രധാന സുരക്ഷാ അറിയിപ്പുകളും പ്രസിദ്ധീകരിക്കുന്ന വളരെ എഴുത്തുകളൊന്നും ഉണ്ടാകാറില്ലാത്ത മെയിലിങ് ലിസ്റ്റ് ആണിത്.
-പുതിയ പതിപ്പുകൾ പുറത്ത് വരുന്നതനുസരിച്ച് അവയെക്കുറിച്ചറിയാനും മീഡിയവിക്കി ഇൻസ്റ്റലേഷൻ പുതുക്കാനും ഇതിന്റെ വരിക്കാരൻ/വരിക്കാരി ആവുക.',
-       'config-almost-done' => 'മിക്കവാറും പൂർത്തിയായിരിക്കുന്നു!
-ബാക്കിയുള്ളവ അവഗണിച്ച് വിക്കി ഇൻസ്റ്റോൾ ചെയ്യാവുന്നതാണ്.',
-       'config-optional-continue' => 'കൂടുതൽ ചോദ്യങ്ങൾ ചോദിക്കൂ.',
-       'config-optional-skip' => 'എനിക്ക് മടുത്തു, ഒന്ന് ഇൻസ്റ്റോൾ ചെയ്ത് തീർക്ക്.',
-       'config-profile-wiki' => 'പരമ്പരാഗത വിക്കി', # Fuzzy
-       'config-profile-no-anon' => 'അംഗത്വ സൃഷ്ടി ചെയ്യേണ്ടതുണ്ട്',
-       'config-profile-fishbowl' => 'അനുവാദമുള്ളവർ മാത്രം തിരുത്തുക',
-       'config-profile-private' => 'സ്വകാര്യ വിക്കി',
-       'config-license' => 'പകർപ്പവകാശവും അനുമതിയും:',
-       'config-license-cc-by-sa' => 'ക്രിയേറ്റീവ് കോമൺസ് ആട്രിബ്യൂഷൻ ഷെയർ എലൈക്',
-       'config-license-cc-by-nc-sa' => 'ക്രിയേറ്റീവ് കോമൺസ് ആട്രിബ്യൂഷൻ നോൺ-കൊമേഴ്സ്യൽ ഷെയർ എലൈക്',
-       'config-license-pd' => 'പൊതുസഞ്ചയം',
-       'config-email-settings' => 'ഇമെയിൽ സജ്ജീകരണങ്ങൾ',
-       'config-enable-email-help' => "ഇമെയിൽ പ്രവർത്തിക്കണമെങ്കിൽ, [http://www.php.net/manual/en/mail.configuration.php PHP's മെയിൽ സജ്ജീകരണങ്ങൾ] ശരിയായി ക്രമീകരിക്കേണ്ടതുണ്ട്.
-ഇമെയിൽ സൗകര്യം ആവശ്യമില്ലെങ്കിൽ, ഇവിടെത്തന്നെ അത് നിർജ്ജീവമാക്കാം.",
-       'config-email-user' => 'ഉപയോക്താക്കൾ തമ്മിലുള്ള ഇമെയിൽ പ്രവർത്തനസജ്ജമാക്കുക',
-       'config-email-user-help' => 'സ്വന്തം ക്രമീകരണങ്ങളിൽ ഇമെയിൽ സജ്ജമാക്കിയിട്ടുണ്ടെങ്കിൽ ഉപയോക്താക്കളെ മറ്റുള്ളവർക്ക് ഇമെയിൽ അയയ്ക്കാൻ അനുവദിക്കുക.',
-       'config-email-usertalk' => 'ഉപയോക്തൃസംവാദം താളിൽ മാറ്റങ്ങളുണ്ടായാൽ അറിയിക്കുക',
-       'config-email-watchlist' => 'ശ്രദ്ധിക്കുന്നവയിൽ മാറ്റം വന്നാൽ അറിയിക്കുക',
-       'config-email-auth' => 'ഇമെയിലിന്റെ സാധുതാപരിശോധന സജ്ജമാക്കുക',
-       'config-email-sender' => 'മറുപടിയ്ക്കുള്ള ഇമെയിൽ വിലാസം:',
-       'config-upload-settings' => 'ചിത്രങ്ങളും പ്രമാണങ്ങളും അപ്‌ലോഡ് ചെയ്യൽ',
-       'config-upload-enable' => 'പ്രമാണ അപ്‌ലോഡുകൾ സജ്ജമാക്കുക',
-       'config-upload-deleted' => 'മായ്ക്കപ്പെട്ട ഫയലുകൾക്കുള്ള ഡയറക്റ്ററി:',
-       'config-logo' => 'ലോഗോയുടെ യൂ.ആർ.എൽ.:',
-       'config-logo-help' => 'മീഡിയവിക്കിയിൽ സ്വതേയുള്ള ദൃശ്യരൂപത്തിൽ 135x160 പിക്സലുള്ള ലോഗോ മുകളിൽ ഇടത് മൂലയിൽ കാണാം.
-അനുയോജ്യമായ വലിപ്പമുള്ള ഒരു ചിത്രം അപ്‌ലോഡ് ചെയ്തിട്ട്, അതിന്റെ യൂ.ആർ.എൽ. ഇവിടെ നൽകുക.
-
-താങ്കൾക്ക് ലോഗോ ആവശ്യമില്ലെങ്കിൽ, ഈ പെട്ടി ശൂന്യമായിടുക.', # Fuzzy
-       'config-cc-again' => 'ഒന്നുകൂടി എടുക്കൂ...',
-       'config-advanced-settings' => 'വിപുലീകൃത ക്രമീകരണങ്ങൾ',
-       'config-extensions' => 'അനുബന്ധങ്ങൾ',
-       'config-install-step-done' => 'ചെയ്തു കഴിഞ്ഞു',
-       'config-install-step-failed' => 'പരാജയപ്പെട്ടു',
-       'config-install-extensions' => 'അനുബന്ധങ്ങൾ ഉൾപ്പെടുത്തുന്നു',
-       'config-install-database' => 'ഡേറ്റാബേസ് സജ്ജമാക്കുന്നു',
-       'config-install-pg-commit' => 'മാറ്റങ്ങൾ സ്വീകരിക്കുന്നു',
-       'config-install-user' => 'ഡേറ്റാബേസ് ഉപയോക്താവിനെ സൃഷ്ടിക്കുന്നു',
-       'config-install-sysop' => 'കാര്യനിർവാഹക അംഗത്വം സൃഷ്ടിക്കുന്നു',
-       'config-install-mainpage' => 'സ്വാഭാവിക ഉള്ളടക്കത്തോടുകൂടി പ്രധാനതാൾ സൃഷ്ടിക്കുന്നു',
-       'config-install-mainpage-failed' => 'പ്രധാന താൾ ഉൾപ്പെടുത്താൻ കഴിഞ്ഞില്ല: $1',
-       'config-install-done' => "'''അഭിനന്ദനങ്ങൾ!'''
-താങ്കൾ വിജയകരമായി മീഡിയവിക്കി സജ്ജീകരിച്ചിരിക്കുന്നു.
-
-ഇൻസ്റ്റോളർ താങ്കളുടെ എല്ലാ ക്രമീകരണങ്ങളുമടങ്ങുന്ന <code>LocalSettings.php</code> ഫയൽ സൃഷ്ടിച്ചിട്ടുണ്ട്.
-
-പ്രസ്തുത പ്രമാണം ഡൗൺലോഡ് ചെയ്ത് താങ്കളുടെ വിക്കി സജ്ജീകരണത്തിന്റെ അടിസ്ഥാന ഡയറക്റ്ററിയിൽ ഇടേണ്ടതാണ് (index.php കിടക്കുന്ന അതേ ഡയറക്റ്ററിയിൽ). ഡൗൺലോഡിങ്ങ് സ്വയം ആരംഭിക്കുന്നതാണ്. ഡൗൺലോഡിങ്ങ് സ്വയം തുടങ്ങാതിരിക്കുകയോ, താങ്കൾ റദ്ദാക്കുകയോ ചെയ്ത പക്ഷം താഴെ കാണുന്ന കണ്ണിയിൽ ഞെക്കുക:
-$3
-
-'''ശ്രദ്ധിക്കുക''': താങ്കൾ ഇപ്പോൾ ചെയ്തില്ലെങ്കിൽ, ഫയൽ എടുക്കാതെ ഇൻസ്റ്റലേഷൻ പ്രക്രിയയിൽ നിന്ന് പുറത്തിറങ്ങിയാൽ, സൃഷ്ടിക്കപ്പെട്ട ക്രമീകരണങ്ങളടങ്ങുന്ന പ്രമാണം പിന്നീട് ലഭ്യമായിരിക്കില്ല.
-
-മുകളിൽ പറഞ്ഞ പ്രകാരം ചെയ്തു കഴിഞ്ഞാൽ, താങ്കൾക്ക് '''[$2 വിക്കിയിൽ പ്രവേശിക്കാവുന്നതാണ്]'''.",
-       'mainpagetext' => "'''മീഡിയവിക്കി വിജയകരമായി സജ്ജീകരിച്ചിരിക്കുന്നു.'''",
-       'mainpagedocfooter' => 'വിക്കി സോഫ്റ്റ്‌വെയർ ഉപയോഗിക്കുന്നതിനെ കുറിച്ചുള്ള വിശദാംശങ്ങൾക്ക്  [//meta.wikimedia.org/wiki/Help:Contents സോഫ്റ്റ്‌വെയർ സഹായി] കാണുക.
-
-== പ്രാരംഭസഹായികൾ ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings ക്രമീകരണങ്ങളുടെ പട്ടിക]
-* [//www.mediawiki.org/wiki/Manual:FAQ മീഡിയവിക്കി പതിവുചോദ്യങ്ങൾ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce മീഡിയവിക്കി പ്രകാശന മെയിലിങ് ലിസ്റ്റ്]', # Fuzzy
-);
-
-/** Mongolian (монгол)
- * @author Chinneeb
- */
-$messages['mn'] = array(
-       'config-page-language' => 'Хэл',
-       'mainpagetext' => "'''МедиаВики амжилттай суулаа.'''",
-       'mainpagedocfooter' => 'Вики программыг хэрэглэх талаар заавар авахын тулд [//meta.wikimedia.org/wiki/Help:Contents хэрэглэгчийн гарын авлага]-г үзнэ үү.
-
-== Эхлэх ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Тохиргоо]
-* [//www.mediawiki.org/wiki/Manual:FAQ МедиаВикигийн тогтмол тавигддаг асуултууд]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce МедиаВикигийн мэдээний мэйл явуулах жагсаалт]', # Fuzzy
-);
-
-/** Marathi (मराठी)
- */
-$messages['mr'] = array(
-       'mainpagetext' => "'''मीडियाविकीचे इन्स्टॉलेशन पूर्ण.'''",
-       'mainpagedocfooter' => 'विकी सॉफ्टवेअर वापरण्याकरिता [//meta.wikimedia.org/wiki/Help:Contents यूजर गाईड] पहा.
-
-== सुरुवात ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings कॉन्फिगरेशन सेटींगची यादी]
-* [//www.mediawiki.org/wiki/Manual:FAQ मीडियाविकी नेहमी विचारले जाणारे प्रश्न]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce मीडियाविकि मेलिंग लिस्ट]', # Fuzzy
-);
-
-/** Malay (Bahasa Melayu)
- * @author Anakmalaysia
- * @author Pizza1016
- */
-$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 anda:',
-       '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',
-       'config-page-welcome' => 'Selamat datang ke MediaWiki!',
-       'config-page-dbconnect' => 'Bersambung dengan pangkalan data',
-       'config-page-upgrade' => 'Naik taraf pemasangan sedia ada',
-       'config-page-dbsettings' => 'Tetapan pangkalan data',
-       'config-page-name' => 'Nama',
-       '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.',
-       'config-unicode-using-utf8' => 'utf8_normalize.so oleh Brion Vibber digunakan untuk penormalan Unicode.',
-       'config-unicode-using-intl' => '[http://pecl.php.net/intl Sambungan intl PECL] digunakan untuk penormalan Unicode.',
-       'config-db-charset' => 'Peranggu aksara pangkalan data',
-       'config-header-mysql' => 'Keutamaan MySQL',
-       'config-header-postgres' => 'Keutamaan PostgreSQL',
-       'config-header-sqlite' => 'Keutamaan SQLite',
-       'config-header-oracle' => 'Keutamaan Oracle',
-       'config-invalid-db-type' => 'Jenis pangkalan data tidak sah',
-       'config-db-web-account-same' => 'Gunakan akaun yang sama seperti dalam pemasangan',
-       'config-db-web-create' => 'Ciptakan akaun jika belum wujud',
-       'config-mysql-engine' => 'Enjin storan:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-charset' => 'Peranggu aksara pangkalan data:',
-       'config-mysql-binary' => 'Perduaan',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Nama wiki:',
-       'config-site-name-help' => 'Ini akan dipaparkan pada bar tajuk perisian pelayar dan tempat-tempat lain yang berkenaan.',
-       'config-site-name-blank' => 'Isikan nama tapak.',
-       'config-project-namespace' => 'Ruang nama projek:',
-       'config-ns-generic' => 'Projek',
-       'config-ns-site-name' => 'Sama dengan nama wiki: $1',
-       'config-ns-other' => 'Lain-lain (nyatakan)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-admin-box' => 'Akaun penyelia',
-       'config-admin-name' => 'Nama kamu:',
-       'config-admin-password' => 'Kata laluan:',
-       'config-admin-password-confirm' => 'Kata laluan lagi:',
-       'config-admin-password-mismatch' => 'Kata-kata laluan yang kamu berikan tidak sepadan.',
-       'config-admin-email' => 'Alamat e-mel:',
-       'config-admin-error-bademail' => 'Kamu telah memberikan alamat e-mel yang tidak betul.',
-       'config-optional-skip' => 'Saya sudah bosan, pasangkanlah wiki sahaja.',
-       'config-license' => 'Hak cipta dan lesen:',
-       'config-license-none' => 'Tiada pengaki lesen',
-       'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
-       'config-license-cc-by' => 'Creative Commons Attribution',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
-       'config-license-cc-0' => 'Creative Commons Zero (Domain Awam)',
-       'config-license-gfdl' => 'Lesen Dokumentasi Bebas GNU 1.3 atau ke atas',
-       'config-license-pd' => 'Domain Awam',
-       'config-email-settings' => 'Tetapan e-mel',
-       'config-install-step-done' => 'siap',
-       'config-install-step-failed' => 'gagal',
-       'config-install-user-alreadyexists' => 'Pengguna "$1" sudah wujud',
-       'config-help' => 'bantuan',
-       'mainpagetext' => "'''MediaWiki telah berjaya dipasang.'''",
-       'mainpagedocfooter' => 'Sila rujuk [//meta.wikimedia.org/wiki/Help:Contents Panduan Penggunaan] untuk maklumat mengenai penggunaan perisian wiki ini.
-
-== Permulaan ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Senarai tetapan konfigurasi]
-* [//www.mediawiki.org/wiki/Manual:FAQ Soalan Lazim MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Senarai surat keluaran MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Terjemahkan MediaWiki ke dalam bahasa anda]',
-);
-
-/** Maltese (Malti)
- * @author Chrisportelli
- */
-$messages['mt'] = array(
-       'config-title' => "Installazzjoni ta' MediaWiki $1",
-       'config-information' => 'Informazzjoni',
-       'config-localsettings-key' => 'Ċavetta tal-aġġornament:',
-       'config-localsettings-badkey' => 'Iċ-ċavetta li tajt hija ħażina.',
-       'config-your-language' => 'Il-lingwa tiegħek:',
-       'config-your-language-help' => "Agħżel lingwa li tixtieq tuża' matul il-proċess ta' installazzjoni.",
-       'config-wiki-language' => 'Lingwi tal-wiki:',
-       'config-wiki-language-help' => 'Agħżel il-lingwa li l-wiki se tkun l-aktar użata fil-wiki.',
-       'config-back' => '← Lura',
-       'config-continue' => 'Kompli →',
-       'config-page-language' => 'Lingwa',
-       'config-page-welcome' => 'Merħba fuq MediaWiki!',
-       'config-page-dbconnect' => 'Aqbad mad-databażi',
-       'config-page-upgrade' => 'Aġġorna l-installazzjoni eżistenti',
-       'config-page-dbsettings' => 'Impostazzjonijiet tad-databażi',
-       'config-page-name' => 'Isem',
-       'config-page-options' => 'Għażliet',
-       'config-page-install' => 'Installa',
-       'config-page-complete' => 'Lesta!',
-       'config-page-restart' => "Erġa' ibda l-installazzjoni",
-       'config-page-readme' => 'Aqrani',
-       'config-page-releasenotes' => 'Noti tal-verżjoni',
-       'config-page-upgradedoc' => 'Aġġornament',
-       'config-page-existingwiki' => 'Wiki eżistenti',
-       'config-restart' => "Iva, erġa' ibda",
-       'config-env-php' => 'PHP $1 huwa installat.',
-       'config-db-wiki-settings' => 'Identifika din il-wiki',
-       'config-db-name' => 'Isem tad-databażi:',
-       'config-db-install-account' => 'Kont tal-utent għall-installazzjoni',
-       'config-db-username' => 'Isem tal-utent tad-databażi:',
-       'config-db-password' => 'Password tad-databażi:',
-       'config-db-port' => 'Port tad-databażi:',
-       'config-db-schema' => 'Skema għal MediaWiki:',
-       'config-db-web-create' => 'Oħloq il-kont jekk għadu ma jeżistix',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-charset' => "Sett ta' karattri tad-databażi:",
-       'config-mysql-binary' => 'Binarju',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Isem tal-wiki:',
-       'config-site-name-help' => "Dan se jidher fil-barra tat-titlu tal-browżer u f'diversi postijiet oħra.",
-       'config-site-name-blank' => 'Daħħal isem tas-sit.',
-       'config-project-namespace' => 'Spazju tal-isem tal-proġett:',
-       'config-ns-generic' => 'Proġett',
-       'config-ns-site-name' => 'L-istess bħall-isem tal-wiki: $1',
-       'config-ns-other' => 'Oħrajn (speċifika)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-ns-invalid' => 'L-ispazju speċifikat "<nowiki>$1</nowiki>" huwa ħażin.
-Speċifika spazju tal-isem tal-proġett differenti.',
-       'config-ns-conflict' => 'L-ispazju speċifikat "<nowiki>$1</nowiki>" joħloq kunflitt ma\' spazju tal-isem ieħor tal-MediaWiki.
-Speċifika spazju tal-isem tal-proġett differenti.',
-       'config-admin-box' => 'Kont tal-amministratur',
-       'config-admin-name' => 'Ismek:',
-       'config-admin-password' => 'Password:',
-       'config-admin-password-confirm' => "Erġa' daħħal il-password:",
-       'config-admin-help' => 'Daħħal l-isem tal-utent preferit hawnhekk, per eżempju "Joe Borg".
-Dan huwa l-isem li se tuża\' kull darba li tidħol fil-wiki.',
-       'config-admin-name-blank' => 'Daħħal isem tal-utent għall-amministratur.',
-       'config-admin-name-invalid' => 'L-isem tal-utent speċifikat "<nowiki>$1</nowiki>" huwa ħażin.
-Speċifika isem tal-utent differenti.',
-       'config-admin-password-blank' => 'Daħħal password għall-kont tal-amministratur.',
-       'config-admin-password-same' => 'Il-password ma tistax tkun l-istess bħall-isem tal-utent.',
-       'config-admin-password-mismatch' => 'Il-passwords li daħħalt ma jaqblux.',
-       'config-admin-email' => 'Indirizz elettroniku:',
-       'config-admin-error-bademail' => 'Daħħalt indirizz elettroniku ħażin.',
-       'config-almost-done' => "Kważi lest!
-Jekk trid tista' taqbeż il-parti li jmiss tal-konfigurazzjoni u sempliċiment tinstalla l-wiki.",
-       'config-optional-continue' => 'Staqsini aktar mistoqsijiet.',
-       'config-optional-skip' => 'Xbajt diġà, installa l-wiki.',
-       'config-profile-wiki' => 'Wiki tradizzjonali', # Fuzzy
-       'config-profile-no-anon' => 'Huwa obbligatorju l-ħolqien tal-kont',
-       'config-profile-fishbowl' => 'Edituri awtorizzati biss',
-       'config-profile-private' => 'Wiki privata',
-       'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
-       'config-license-cc-by' => 'Creative Commons Attribution',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
-       'config-license-cc-0' => 'Creative Commons Zero (dominju pubbliku)',
-       'config-license-pd' => 'Dominju pubbliku',
-       'config-license-cc-choose' => 'Agħżel waħda mil-liċenzji tal-Creative Commons',
-       'config-upload-deleted' => 'Direttorju għall-fajls imħassra:',
-       'config-upload-deleted-help' => "Agħżel direttorju fejn iżżomm fajls imħassra.
-Idealment, dan m'għandux ikun aċċessibbli mill-web.",
-       'config-logo' => 'URL tal-logo:',
-       'config-download-localsettings' => 'Niżżel <code>LocalSettings.php</code>',
-       'config-help' => 'għajnuna',
-       'config-nofile' => 'Il-fajl "$1" ma setax jinstab. Dan ġie mħassar?',
-       'mainpagetext' => "'''MediaWiki ġie installat b'suċċess.'''",
-       'mainpagedocfooter' => "Ikkonsulta l-[//meta.wikimedia.org/wiki/Help:Contents Gwida għall-utenti] sabiex tikseb iktar informazzjoni dwar kif tuża' s-softwer tal-wiki.
-
-== Biex tibda ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista ta' preferenzi għall-konfigurazzjoni]
-* [//www.mediawiki.org/wiki/Manual:FAQ Mistoqsijiet rikorrenti fuq il-MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Il-lista tal-posta tħabbar 'l MediaWiki]", # Fuzzy
-);
-
-/** Burmese (မြန်မာဘာသာ)
- * @author Lionslayer
- */
-$messages['my'] = array(
-       'mainpagetext' => "'''မီဒီယာဝီကီကို အောင်မြင်စွာ သွင်းပြီးပါပြီ။'''",
-);
-
-/** Erzya (эрзянь)
- * @author Botuzhaleny-sodamo
- */
-$messages['myv'] = array(
-       'config-page-language' => 'Кель',
-       'config-page-name' => 'Лемезэ',
-       'config-page-readme' => 'Ловномак',
-       'config-admin-name' => 'Леметь:',
-       'config-admin-password' => 'Совамо валот:',
-       'config-admin-password-confirm' => 'Совамо валот одов:',
-       'config-admin-email' => 'Е-сёрма паргот:',
-       'config-install-step-done' => 'теезь',
-       'mainpagetext' => "'''МедияВикинь тевс аравтомазо парсте лиссь.'''",
-);
-
-/** Mazanderani (مازِرونی)
- * @author محک
- */
-$messages['mzn'] = array(
-       'config-help' => 'راهنما',
-);
-
-/** Nahuatl (Nāhuatl)
- */
-$messages['nah'] = array(
-       'mainpagetext' => "'''MediaHuiqui cualli ōmotlahtlāli.'''",
-);
-
-/** Min Nan Chinese (Bân-lâm-gú)
- * @author Ianbu
- */
-$messages['nan'] = array(
-       'mainpagetext' => "'''MediaWiki已經裝好矣。'''",
-       'mainpagedocfooter' => '請查看[//meta.wikimedia.org/wiki/Help:Contents 用者說明書]的資料通使用wiki 軟體
-
-== 入門 ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings 配置的設定]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki時常問答]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki的公布列單]', # Fuzzy
-);
-
-/** Norwegian Bokmål (norsk bokmål)
- * @author Event
- * @author Nghtwlkr
- * @author 아라
- */
-$messages['nb'] = array(
-       'config-desc' => 'Installasjonsprogrammet for MediaWiki',
-       'config-title' => 'Installasjon av MediaWiki $1',
-       'config-information' => 'Informasjon',
-       'config-localsettings-upgrade' => 'En <code>LocalSettings.php</code>-fil har blitt oppdaget.
-For å oppgradere denne installasjonen, skriv inn verdien av <code>$wgUpgradeKey</code> i boksen nedenfor.
-Du finner denne i <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => "Filen ''<code>LocalSettings.php</code>'' er funnet.
-For å oppgradere denne installasjonen, vennligst kjør ''update.php'' i stedet",
-       'config-localsettings-key' => 'Oppgraderingsnøkkel:',
-       'config-localsettings-badkey' => 'Nøkkelen du oppga er feil.',
-       'config-upgrade-key-missing' => "En eksisterende installasjon av MediaWiki er funnet.
-For å oppgradere denne installasjonen, vær vennlig å legge til følgende linje helt til slutt i din ''<code>LocalSettings.php</code>''-fil:
-
-$1",
-       'config-localsettings-incomplete' => "Den eksisterende ''<code>LocalSettings.php</code>'' ser ut til å være ufullstendig.
-Variabelen $1 har ingen verdi.
-Vær vennlig å endre ''<code>LocalSettings.php</code>'' slik at variabelen får en verdi, og klikk ''{{int:Config-continue}}''.",
-       'config-localsettings-connection-error' => "Det ble funnet en feil ved tilknytning av databasen med innstillingene i ''<code>LocalSettings.php</code>'' eller ''<code>AdminSettings.php</code>''. Vær vennlig å rette opp disse innstillingene og prøv igjen.
-
-$1",
-       'config-session-error' => 'Feil under oppstart av økt: $1',
-       'config-session-expired' => 'Dine øktdata ser ut til å ha utløpt.
-Økter er konfigurert for en levetid på $1.
-Du kan øke dette ved å sette <code>session.gc_maxlifetime</code> i php.ini.
-Start installasjonsprosessen på nytt.',
-       'config-no-session' => 'Dine øktdata ble tapt!
-Sjekk din php.ini og sørg for at <code>session.save_path</code> er satt til en passende mappe.',
-       'config-your-language' => 'Ditt språk:',
-       'config-your-language-help' => 'Velg et språk å bruke under installasjonsprosessen.',
-       'config-wiki-language' => 'Wikispråk:',
-       'config-wiki-language-help' => 'Velg språket som wikien hovedsakelig vil bli skrevet i.',
-       'config-back' => '← Tilbake',
-       'config-continue' => 'Fortsett →',
-       'config-page-language' => 'Språk',
-       'config-page-welcome' => 'Velkommen til MediaWiki!',
-       'config-page-dbconnect' => 'Koble til database',
-       'config-page-upgrade' => 'Oppgrader eksisterende innstallasjon',
-       'config-page-dbsettings' => 'Databaseinnstillinger',
-       'config-page-name' => 'Navn',
-       'config-page-options' => 'Valg',
-       'config-page-install' => 'Installer',
-       'config-page-complete' => 'Ferdig!',
-       'config-page-restart' => 'Start installasjonen på nytt',
-       'config-page-readme' => 'Les meg',
-       'config-page-releasenotes' => 'Utgivelsesnotat',
-       'config-page-copying' => 'Kopiering',
-       'config-page-upgradedoc' => 'Oppgradering',
-       'config-page-existingwiki' => 'Eksisterende wiki',
-       'config-help-restart' => 'Ønsker du å fjerne alle lagrede data som du har skrevet inn og starte installasjonsprosessen på nytt?',
-       'config-restart' => 'Ja, start på nytt',
-       'config-welcome' => '=== Miljøsjekker ===
-Grunnleggende sjekker utføres for å se om dette miljøet er egnet for en MediaWiki-installasjon.
-Du bør oppgi resultatene fra disse sjekkene om du trenger hjelp under installasjonen.',
-       'config-copyright' => "=== Opphavsrett og vilkår ===
-
-$1
-
-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.
-
-Dette programmet 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 <doclink href=Copying>en kopi av GNU General Public License</doclink> sammen med dette programmet; hvis ikke, skriv til Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA eller [http://www.gnu.org/copyleft/gpl.html les det på nettet].",
-       'config-sidebar' => '* [//www.mediawiki.org MediaWiki hjem]
-* [//www.mediawiki.org/wiki/Help:Contents Brukerguide]
-* [//www.mediawiki.org/wiki/Manual:Contents Administratorguide]
-* [//www.mediawiki.org/wiki/Manual:FAQ OSS]
-----
-* <doclink href=Readme>Les meg</doclink>
-* <doclink href=ReleaseNotes>Utgivelsesnotater</doclink>
-* <doclink href=Copying>Kopiering</doclink>
-* <doclink href=UpgradeDoc>Oppgradering</doclink>',
-       'config-env-good' => 'Miljøet har blitt sjekket.
-Du kan installere MediaWiki.',
-       'config-env-bad' => 'Miljøet har blitt sjekket.
-Du kan installere MediaWiki.',
-       'config-env-php' => 'PHP $1 er innstallert.',
-       'config-env-php-toolow' => 'PHP $1 er installert.
-MediaWiki krever imidlertid PHP $2 eller høyere.',
-       'config-unicode-using-utf8' => 'Bruker Brion Vibbers utf8_normalize.so for Unicode-normalisering.',
-       'config-unicode-using-intl' => 'Bruker [http://pecl.php.net/intl intl PECL-utvidelsen] for Unicode-normalisering.',
-       'config-unicode-pure-php-warning' => "'''Advarsel''': [http://pecl.php.net/intl intl PECL-utvidelsen] er ikke tilgjengelig for å håndtere Unicode-normaliseringen, faller tilbake til en langsommere ren-PHP-implementasjon.
-Om du kjører et nettsted med høy trafikk bør du lese litt om [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-normalisering].",
-       'config-unicode-update-warning' => "'''Advarsel''': Den installerte versjonen av Unicode-normalisereren bruker en eldre versjon av [http://site.icu-project.org/ ICU-prosjektets] bibliotek.
-Du bør [//www.mediawiki.org/wiki/Unicode_normalization_considerations oppgradere] om du er bekymret for å bruke Unicode.",
-       'config-no-db' => 'Fant ikke en passende databasedriver! Du må installere en databasedriver for PHP.
-Følgende databasetyper er støttet: $1
-
-Om du er på delt vertsskap, spør din vertsleverandør om å installere en passende databasedriver.
-Om du kompilerte PHP selv, rekonfigirer den med en aktivert databaseklient, for eksempel ved å bruke <code>./configure --with-mysql</code>.
-Om du installerte PHP fra en Debian- eller Ubuntu-pakke må du også installere modulen php5-mysql.',
-       'config-outdated-sqlite' => "'''Advarsel''': Du har SQLite $1, som er en eldre versjon enn minimumskravet SQLite $2. SQLite vil ikke være tilgjengelig.",
-       'config-no-fts3' => "'''Advarsel''': SQLite er kompilert uten [//sqlite.org/fts3.html FTS3-modulen], søkefunksjoner vil ikke være tilgjengelig på dette bakstykket.",
-       'config-register-globals' => "'''Advarsel: PHPs <code>[http://php.net/register_globals register_globals]</code>-alternativ er aktivert.'''
-'''Deaktiver det om du kan.'''
-MediaWiki vil fungere, men tjeneren din er utsatt for potensielle sikkerhetssårbarheter.",
-       'config-magic-quotes-runtime' => "'''Kritisk: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] er aktiv!'''
-Dette alternativet ødelegger inndata på en uforutsigbar måte.
-Du kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.",
-       'config-magic-quotes-sybase' => "'''Kritisk: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] er aktiv!'''
-Dette alternativet ødelegger inndata på en uforutsigbar måte.
-Du kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.",
-       'config-mbstring' => "'''Kritisk: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] er aktiv!'''
-Dette alternativet fører til feil og kan ødelegge data på en uforutsigbar måte.
-Du kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.",
-       'config-ze1' => "'''Kritisk: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] er aktiv!'''
-Dette alternativet fører til horrible feil med MediaWiki.
-Du kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.",
-       'config-safe-mode' => "'''Advarsel:''' PHPs [http://www.php.net/features.safe-mode safe mode] er aktiv.
-Det kan føre til problem, spesielt hvis du bruker støtte for filopplastinger og <code>math</code>.",
-       'config-xml-bad' => 'PHPs XML-modul mangler.
-MediaWiki krever funksjonene i denne modulen og vil ikke virke i denne konfigurasjonen.
-Hvis du kjører Mandrak, installer pakken php-xml.',
-       'config-pcre' => 'PCRE-støttemodulen ser ut til å mangle.
-MediaWiki krever funksjonene for de Perl-kompatible regulære uttrykkene for å virke.',
-       'config-pcre-no-utf8' => "'''Fatal''': PHPs PCRE modul ser ut til å være kompilert uten PCRE_UTF8-støtte.
-MediaWiki krever UTF-8-støtte for å fungere riktig.",
-       'config-memory-raised' => 'PHPs <code>memory_limit</code> er $1, økt til $2.',
-       'config-memory-bad' => "'''Advarsel:''' PHPs <code>memory_limit</code> er $1.
-Dette er sannsynligvis for lavt.
-Installasjonen kan mislykkes!",
-       'config-ctype' => "'''Fatal feil''': PHP må kompileres med støtte for [http://www.php.net/manual/en/ctype.installation.php Ctype-utvidelsen].",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] er innstallert',
-       'config-apc' => '[http://www.php.net/apc APC] er innstallert',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] er installert',
-       'config-no-cache' => "'''Advarsel:''' Kunne ikke finne [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] eller [http://www.iis.net/download/WinCacheForPhp WinCache].
-Objekthurtiglagring er ikke aktivert.",
-       'config-mod-security' => "'''Advarsel''': Din web-tjener har [http://modsecurity.org/ mod_security] påslått. Hvis denne er feilinnstilt, kan det gi problemer for MediaWiki eller annen programvare som tillater brukere å poste vilkårlig innhold.
-Sjekk [http://modsecurity.org/documentation/ mod_security-dokumentasjonen] eller ta kontakt med din nettleverandør hvis du opplever tilfeldige feil.",
-       'config-diff3-bad' => 'GNU diff3 ikke funnet.',
-       'config-imagemagick' => 'Fant ImageMagick: <code>$1</code>.
-Bildeminiatyrisering vil aktiveres om du aktiverer opplastinger.',
-       'config-gd' => 'Fant innebygd GD-grafikkbibliotek.
-Bildeminiatyrisering vil aktiveres om du aktiverer opplastinger.',
-       'config-no-scaling' => 'Kunne ikke finne GD-bibliotek eller ImageMagick.
-Bildeminiatyrisering vil være deaktivert.',
-       'config-no-uri' => "'''Feil:''' Kunne ikke bestemme gjeldende URI.
-Installasjon avbrutt.",
-       'config-no-cli-uri' => "'''Advarsel''': Ingen --scriptpath er angitt; bruker standard: <code>$1</code>.",
-       'config-using-server' => 'Bruker servernavnet  "<nowiki>$1</nowiki>".',
-       'config-using-uri' => 'Bruker server-URL "<nowiki>$1$2</nowiki>".',
-       'config-uploads-not-safe' => "'''Advarsel:''' Din standardmappe for opplastinger <code>$1</code> er sårbar for kjøring av vilkårlige skript.
-Selv om MediaWiki sjekker alle opplastede filer for sikkerhetstrusler er det sterkt anbefalt å [//www.mediawiki.org/wiki/Manual:Security#Upload_security lukke denne sikkerhetssårbarheten] før du aktiverer opplastinger.",
-       'config-no-cli-uploads-check' => "'''Advarsel:''' Din standard-katalog for opplastinger (<code>$1</code>) er ikke kontrollert for sårbarhet overfor vilkårlig skript-kjøring under CLI-installasjonen.",
-       'config-brokenlibxml' => 'Ditt system har en kombinasjon av PHP- og libxml2-versjoner som er feilaktige og kan forårsake skjult dataødeleggelse i MediaWiki og andre web-applikasjoner.
-Oppgrader til PHP 5.2.9 eller nyere og libxml 2 2.7.3 eller nyere ([//bugs.php.net/bug.php?id=45996 Feil-liste for PHP]).
-Installasjon abortert.',
-       'config-using531' => 'MediaWiki kan ikke brukes med PHP $1 på grunn av en feil med referanseparametere til <code>__call()</code>.
-Oppgrader til PHP 5.3.2 eller høyere, eller nedgrader til PHP 5.3.0 for å løse dette.
-Installasjonen avbrutt.',
-       'config-suhosin-max-value-length' => 'Suhosin er installert og begrenser GET-parameterlengder til $1 bytes. MediaWiki\'s ResourceLoader-komponent klarer å komme rundt denne begrensningen, med med redusert ytelse. På mulig bør du sette <code>suhosin.get.max_value_length</code> til minst 1024 i <code>php.ini</code>, og sette <code>$wgResourceLoaderMaxQueryLength</code> til samme verdi i LocalSettings.php.', # Fuzzy
-       'config-db-type' => 'Databasetype:',
-       'config-db-host' => 'Databasevert:',
-       'config-db-host-help' => 'Hvis databasen kjører på en annen tjenermaskin, skriv inn vertsnavnet eller IP-adressen her.
-
-Hvis du bruker et webhotell, vil du kunne be om aktuelt vertsnavn fra din leverandør.
-
-Hvis du installerer på en Windowstjener og bruker MySQL, kan det hende at «localhost» ikke brukes som tjenernavn. Hvis så er tilfelle, prøv «127.0.0.1» som lokal IP-adresse.
-
-Hvis du bruker PostgreSQL, la dette feltet være blankt slik at koplingen gjøres via en "Unix socket".',
-       'config-db-host-oracle' => 'Database TNS:',
-       'config-db-host-oracle-help' => 'Skriv inn et gyldig [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; en tnsnames.ora-fil må være synlig for installasjonsprosessen.<br />Hvis du bruker klientbibliotek 10g eller nyere kan du også bruke navngivingsmetoden [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
-       'config-db-wiki-settings' => 'Identifiser denne wikien',
-       'config-db-name' => 'Databasenavn:',
-       'config-db-name-help' => 'Velg et navn som identifiserer wikien din.
-Det bør ikke inneholde mellomrom.
-
-Hvis du bruker en delt nettvert vil verten din enten gi deg et spesifikt databasenavn å bruke, eller la deg opprette databaser via kontrollpanelet.',
-       'config-db-name-oracle' => 'Databaseskjema:',
-       'config-db-account-oracle-warn' => 'Det finnes tre mulig fremgangsmåter for å installere Oracle som database:
-
-Hvis du ønsker å opprette en databasekonto som del av installasjonsprosessen, oppgi da en konto med SYSDBA-rolle som databasekonto for installasjonen og angi påkrevd autentiseringsinformasjon for web-aksesskontoen. Ellers kan du enten opprette web-aksesskontoen manuelt eller kun oppgi den kontoen (hvis den har påkrevede tillatelser for å opprette skjemeobjektene) , alternativt oppgi to ulike kontoer, en med opprettelsesprivilegier (create) og en begrenset konto for web-aksess.
-
-Skript for å opprette en konto med påkrevde privilegier finnes i "maintenance/oracle/"-folderen av denne installasjonen. Husk at det å bruke en begrenset konto vil blokkere all vedlikeholdsfunksjonalitet med standard konto.',
-       'config-db-install-account' => 'Brukerkonto for installasjon',
-       'config-db-username' => 'Databasebrukernavn:',
-       'config-db-password' => 'Databasepassord:',
-       'config-db-password-empty' => 'Skriv inn et passord for den nye databasebrukeren: $1.
-Det er mulig å opprette brukere uten passord, men dette er ikke sikkert.',
-       'config-db-install-username' => 'Skriv inn brukernavnet som vil bli brukt til å koble til databasen under installasjonsprosessen.
-Dette er ikke brukernavnet på MediaWiki-kontoen; dette er brukernavnet for databasen din.',
-       'config-db-install-password' => 'Skriv inn passordet som vil bli brukt til å koble til databasen under installasjonsprosessen.
-Dette er ikke passordet på MediaWiki-kontoen; dette er passordet for databasen din.',
-       'config-db-install-help' => 'Skriv inn brukernavnet og passordet som vil bli brukt for å koble til databasen under installasjonsprosessen.',
-       'config-db-account-lock' => 'Bruk det samme brukernavnet og passordet under normal drift',
-       'config-db-wiki-account' => 'Brukerkonto for normal drift',
-       'config-db-wiki-help' => 'Skriv inn brukernavnet og passordet som vil bli brukt til å koble til databasen under normal wikidrift.
-Hvis kontoen ikke finnes, og installasjonskontoen har tilstrekkelige privilegier, vil denne brukerkontoen bli opprettet med et minimum av privilegier, tilstrekkelig for å operere wikien.',
-       'config-db-prefix' => 'Databasetabellprefiks:',
-       'config-db-prefix-help' => 'Hvis du trenger å dele en database mellom flere wikier, eller mellom MediaWiki og andre nettapplikasjoner, kan du velge å legge til et prefiks til alle tabellnavnene for å unngå konflikter.
-Ikke bruk mellomrom.
-
-Dette feltet er vanligvis tomt.',
-       'config-db-charset' => 'Databasetegnsett',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binær',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 bakoverkompatibel UTF-8',
-       'config-charset-help' => "'''Advarsel:''' Hvis du bruker '''bakoverkompatibel UTF-8''' på MySQL 4.1+, og deretter sikkerhetskopierer databasen med <code>mysqldump</code> kan det ødelegge alle ikke-ASCII tegn og irreversibelt ødelegge dine sikkerhetskopier!
-
-I '''binary mode''' lagrer MediaWiki UTF-8 tekst til databasen i binærfelt.
-Dette er mer effektivt enn MySQLs UTF-8 modus og tillater deg å bruke hele spekteret av Unicode-tegn.
-I '''UTF-8 mode''' vil MySQL vite hvilket tegnsett dataene dine er i og kan presentere og konvertere det på en riktig måte,
-men det vil ikke la deg lagre tegn over «[//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes the Basic Multilingual Plane]».",
-       'config-mysql-old' => 'MySQL $1 eller senere kreves, du har $2.',
-       'config-db-port' => 'Databaseport:',
-       'config-db-schema' => 'Skjema for MediaWiki',
-       'config-db-schema-help' => 'Dette skjemaet er som regel riktig.
-Bare endre det hvis du vet at du trenger det.',
-       'config-pg-test-error' => "Får ikke kontakt med database '''$1''': $2",
-       'config-sqlite-dir' => 'SQLite datamappe:',
-       'config-sqlite-dir-help' => "SQLite lagrer alle data i en enkelt fil.
-
-Mappen du oppgir må være skrivbar for nettjeneren under installasjonen.
-
-Den bør '''ikke''' være tilgjengelig fra nettet, dette er grunnen til at vi ikke legger det der PHP-filene dine er.
-
-Installasjonsprogrammet vil skrive en <code>.htaccess</code>-fil sammen med det, men om det mislykkes kan noen få tilgang til din råe database. Dette inkluderer rå brukerdata (e-postadresser, hashede passord) samt slettede revisjoner og andre begrensede data på wikien.
-
-Vurder å plassere databasen et helt annet sted, for eksempel i <code>/var/lib/mediawiki/yourwiki</code>.",
-       'config-oracle-def-ts' => 'Standard tabellrom:',
-       'config-oracle-temp-ts' => 'Midlertidig tabellrom:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => 'MediaWiki støtter følgende databasesystem:
-
-$1
-
-Hvis du ikke ser databasesystemet du prøver å bruke i listen nedenfor, følg instruksjonene det er lenket til over for å aktivere støtte.',
-       'config-support-mysql' => '* $1 er det primære målet for MediaWiki og er best støttet ([http://www.php.net/manual/en/mysql.installation.php hvordan kompilere PHP med MySQL-støtte])',
-       'config-support-postgres' => '* $1 er et populært åpen kildekode-databasesystem som er et alternativ til MySQL ([http://www.php.net/manual/en/pgsql.installation.php hvordan kompilere PHP med PostgreSQL-støtte]). Det kan være noen små utestående feil og det anbefales ikke for bruk i et produksjonsmiljø.',
-       'config-support-sqlite' => '* $1 er et lettvekts-databasesystem som er veldig godt støttet. ([http://www.php.net/manual/en/pdo.installation.php hvordan kompilere PHP med SQLite-støtte], bruker PDO)',
-       'config-support-oracle' => '* $1 er en kommersiell bedriftsdatabase. ([http://www.php.net/manual/en/oci8.installation.php Hvordan kompilere PHP med OCI8-støtte])',
-       'config-header-mysql' => 'MySQL-innstillinger',
-       'config-header-postgres' => 'PostgreSQL-innstillinger',
-       'config-header-sqlite' => 'SQLite-innstillinger',
-       'config-header-oracle' => 'Oracle-innstillinger',
-       'config-invalid-db-type' => 'Ugyldig databasetype',
-       'config-missing-db-name' => 'Du må skrive inn en verdi for «Databasenavn»',
-       'config-missing-db-host' => 'Du må skrive inn en verdi for «Databasevert»',
-       'config-missing-db-server-oracle' => 'Du må skrive inn en verdi for «Database TNS»',
-       'config-invalid-db-server-oracle' => 'Ugyldig database-TNS «$1».
-Bruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9) og undestreker (_) og punktum (.).',
-       'config-invalid-db-name' => 'Ugyldig databasenavn «$1».
-Bruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9), undestreker (_) og bindestreker (-).',
-       'config-invalid-db-prefix' => 'Ugyldig databaseprefiks «$1».
-Bruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9), undestreker (_) og bindestreker (-).',
-       'config-connection-error' => '$1.
-
-Sjekk verten, brukernavnet og passordet nedenfor og prøv igjen.',
-       'config-invalid-schema' => 'Ugyldig skjema for MediaWiki «$1».
-Bruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9) og undestreker (_).',
-       'config-db-sys-create-oracle' => 'Installasjonsprogrammet støtter kun bruk av en SYSDBA-konto for opprettelse av en ny konto.',
-       'config-db-sys-user-exists-oracle' => 'Brukerkontoen «$1» finnes allerede. SYSDBA kan kun brukes for oppretting av nye kontoer!',
-       'config-postgres-old' => 'PostgreSQL $1 eller senere kreves, du har $2.',
-       'config-sqlite-name-help' => 'Velg et navn som identifiserer wikien din.
-Ikke bruk mellomrom eller bindestreker.
-Dette vil bli brukt til SQLite-datafilnavnet.',
-       'config-sqlite-parent-unwritable-group' => 'Kan ikke opprette datamappen <code><nowiki>$1</nowiki></code> fordi foreldremappen <code><nowiki>$2</nowiki></code> ikke er skrivbar for nettjeneren.
-
-Installasjonsprogrammet har bestemt brukeren nettjeneren din kjører som.
-Gjør <code><nowiki>$3</nowiki></code>-mappen skrivbar for denne for å fortsette.
-På et Unix/Linux-system, gjør:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Kan ikke opprette datamappen <code><nowiki>$1</nowiki></code> fordi foreldremappen <code><nowiki>$2</nowiki></code> ikke er skrivbar for nettjeneren.
-
-Installasjonsprogrammet kunne ikke bestemme brukeren nettjeneren din kjører som.
-Gjør <code><nowiki>$3</nowiki></code>-mappen globalt skrivbar for denne (og andre!) for å fortsette.
-På et Unix/Linux-system, gjør:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Feil under oppretting av datamappen «$1».
-Sjekk plasseringen og prøv igjen.',
-       'config-sqlite-dir-unwritable' => 'Kan ikke skrive til mappen «$1».
-Endre dens tilganger slik at nettjeneren kan skrive til den og prøv igjen.',
-       'config-sqlite-connection-error' => '$1.
-
-Sjekk datamappen og databasenavnet nedenfor og prøv igjen.',
-       'config-sqlite-readonly' => 'Filen <code>$1</code> er ikke skrivbar.',
-       'config-sqlite-cant-create-db' => 'Kunne ikke opprette databasefilen <code>$1</code>.',
-       'config-sqlite-fts3-downgrade' => 'PHP mangler FTS3-støtte, nedgraderer tabeller',
-       'config-can-upgrade' => "Det er MediaWiki-tabeller i denne databasen.
-For å oppgradere dem til MediaWiki $1, klikk '''Fortsett'''.",
-       'config-upgrade-done' => "Oppgradering fullført.
-
-Du kan nå [$1 begynne å bruke wikien din].
-
-Hvis du ønsker å regenerere <code>LocalSettings.php</code>-filen din, klikk på knappen nedenfor.
-Dette er '''ikke anbefalt''' med mindre du har problemer med wikien din.",
-       'config-upgrade-done-no-regenerate' => 'Oppgradering fullført.
-
-Du kan nå [$1 begynne å bruke wikien din].',
-       'config-regenerate' => 'Regenerer LocalSettings.php →',
-       'config-show-table-status' => '<code>SHOW TABLE STATUS</code> etterspørselen mislyktes!',
-       'config-unknown-collation' => "'''Advarsel:''' Databasen bruker en ukjent sortering.",
-       'config-db-web-account' => 'Databasekonto for nettilgang',
-       'config-db-web-help' => 'Velg brukernavnet og passordet som nettjeneren skal bruke for å koble til databasetjeneren under ordinær drift av wikien.',
-       'config-db-web-account-same' => 'Bruk samme konto som for installasjonen',
-       'config-db-web-create' => 'Opprett kontoen om den ikke finnes allerede',
-       'config-db-web-no-create-privs' => 'Kontoen du oppga for installasjonen har ikke nok privilegier til å opprette en konto.
-Kontoen du oppgir her må finnes allerede.',
-       'config-mysql-engine' => 'Lagringsmotor:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-engine-help' => "'''InnoDB''' er nesten alltid det beste alternativet siden den har god støtte for samtidighet («concurrency»).
-
-'''MyISAM''' kan være raskere i enbruker- eller les-bare-installasjoner.
-MyISAM-databaser har en tendens til å bli ødelagt oftere enn InnoDB-databaser.",
-       'config-mysql-charset' => 'Databasetegnsett:',
-       'config-mysql-binary' => 'Binær',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "I '''binary mode''' lagrer MediaWiki UTF-8 tekst til databasen i binærfelt.
-Dette er mer effektivt enn MySQLs UTF-8 modus og tillater deg å bruke hele spekteret av Unicode-tegn.
-
-I '''UTF-8 mode''' vil MySQL vite hvilket tegnsett dataene dine er i og kan presentere og konvertere det på en riktig måte,
-men det vil ikke la deg lagre tegn over «[//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes the Basic Multilingual Plane]».",
-       'config-site-name' => 'Navn på wiki:',
-       'config-site-name-help' => 'Dette vil vises i tittellinjen i nettleseren og diverse andre steder.',
-       'config-site-name-blank' => 'Skriv inn et nettstedsnavn.',
-       'config-project-namespace' => 'Prosjektnavnerom:',
-       'config-ns-generic' => 'Prosjekt',
-       'config-ns-site-name' => 'Samme som wikinavnet: $1',
-       'config-ns-other' => 'Annet (spesifiser)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-project-namespace-help' => "Etter Wikipedias eksempel holder mange wikier deres sider med retningslinjer atskilt fra sine innholdssider, i et «'''prosjektnavnerom'''».
-Alle sidetitler i dette navnerommet starter med et gitt prefiks som du kan angi her.
-Tradisjonelt er dette prefikset avledet fra navnet på wikien, men det kan ikke innholde punkttegn som «#» eller «:».",
-       'config-ns-invalid' => 'Det angitte navnerommet «<nowiki>$1</nowiki>» er ugyldig.
-Angi et annet prosjektnavnerom.',
-       'config-ns-conflict' => 'Det angitte navnerommet «<nowiki>$1</nowiki>» er i konflikt med et standard MediaWiki-navnerom.
-Angi et annet prosjekt-navnerom.',
-       'config-admin-box' => 'Administratorkonto',
-       'config-admin-name' => 'Ditt navn:',
-       'config-admin-password' => 'Passord:',
-       'config-admin-password-confirm' => 'Passord igjen:',
-       'config-admin-help' => 'Skriv inn ditt ønskede brukernavn her, for eksempel «Joe Bloggs».
-Dette er navnet du vil bruke for å logge inn på denne wikien.',
-       'config-admin-name-blank' => 'Skriv inn et administratorbrukernavn.',
-       'config-admin-name-invalid' => 'Det angitte brukernavnet «<nowiki>$1</nowiki>» er ugyldig.
-Angi et annet brukernavn.',
-       'config-admin-password-blank' => 'Skriv inn et passord for administratorkontoen.',
-       'config-admin-password-same' => 'Passordet skal ikke være det samme som brukernavnet.',
-       'config-admin-password-mismatch' => 'De to passordene du skrev inn samsvarte ikke.',
-       'config-admin-email' => 'E-postadresse:',
-       'config-admin-email-help' => 'Skriv inn en e-postadresse her for at du skal kunne motta e-post fra andre brukere på wikien, tilbakestille passordet ditt, og bli varslet om endringer på sider på overvåkningslisten din. Du kan la dette feltet stå tomt.',
-       'config-admin-error-user' => 'Intern feil ved opprettelse av en admin med navnet «<nowiki>$1</nowiki>».',
-       'config-admin-error-password' => 'Intern feil ved opprettelse av passord for admin «<nowiki>$1</nowiki>»: <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Du har skrevet inn en ugyldig e-postadresse.',
-       'config-subscribe' => 'Abonner på [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce e-postlisten for utgivelsesannonseringer].',
-       'config-subscribe-help' => 'Dette er en lav-volums e-postliste brukt til utgivelsesannonseringer, herunder viktige sikkerhetsannonseringer.
-Du bør abonnere på den og oppdatere MediaWikiinstallasjonen din når nye versjoner kommer ut.',
-       'config-almost-done' => 'Du er nesten ferdig!
-Du kan hoppe over de resterende konfigurasjonene og installere wikien nå.',
-       'config-optional-continue' => 'Spør meg flere spørsmål.',
-       'config-optional-skip' => 'Jeg er lei, bare installer wikien.',
-       'config-profile' => 'Brukerrettighetsprofil:',
-       'config-profile-wiki' => 'Tradisjonell wiki', # Fuzzy
-       'config-profile-no-anon' => 'Kontoopprettelse påkrevd',
-       'config-profile-fishbowl' => 'Kun autoriserte bidragsytere',
-       'config-profile-private' => 'Privat wiki',
-       'config-profile-help' => "Wikier fungerer best når du lar så mange mennesker som mulig redigere den.
-I MediaWiki er det lett å revidere siste endringer og tilbakestille eventuell skade som er gjort av naive eller ondsinnede brukere.
-
-Imidlertid har mange funnet at MediaWiki er nyttig i mange roller, og av og til er det ikke lett å overbevise alle om fordelene med wikimåten.
-Så du har valget.
-
-En '''{{int:config-profile-wiki}}''' tillater alle å redigere, selv uten å logge inn.
-En wiki med '''{{int:config-profile-no-anon}}''' tilbyr ekstra ansvarlighet, men kan avskrekke tilfeldige bidragsytere.
-
-'''{{int:config-profile-fishbowl}}'''-scenariet tillater godkjente brukere å redigere, mens publikum kan se sider, og også historikken.
-En '''{{int:config-profile-private}}''' tillater kun godkjente brukere å se sider, den samme gruppen som får lov til å redigere dem.
-
-Mer komplekse konfigurasjoner av brukerrettigheter er tilgjengelig etter installasjon, se det [//www.mediawiki.org/wiki/Manual:User_rights relevante manualavsnittet].", # Fuzzy
-       'config-license' => 'Opphavsrett og lisens:',
-       'config-license-none' => 'Ingen lisensbunntekst',
-       'config-license-cc-by-sa' => 'Creative Commons Navngivelse Del på samme vilkår',
-       'config-license-cc-by' => 'Creative Commons Attribution',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Navngivelse Ikke-kommersiell Del på samme vilkår',
-       'config-license-cc-0' => 'Creative Commons Zero', # Fuzzy
-       'config-license-pd' => 'Offentlig rom',
-       'config-license-cc-choose' => 'Velg en egendefinert Creative Commons-lisens',
-       'config-email-settings' => 'E-postinnstillinger',
-       'config-enable-email' => 'Aktiver utgående e-post',
-       'config-enable-email-help' => 'Hvis du vil at e-post skal virke må [http://www.php.net/manual/en/mail.configuration.php PHPs e-postinnstillinger] bli konfigurert riktig.
-Hvis du ikke ønsker noen e-postfunksjoner kan du deaktivere dem her.',
-       'config-email-user' => 'Aktiver e-post mellom brukere',
-       'config-email-user-help' => 'Tillat alle brukere å sende hverandre e-post hvis de har aktivert det i deres innstillinger.',
-       'config-email-usertalk' => 'Aktiver brukerdiskusjonssidevarsler',
-       'config-email-usertalk-help' => 'Tillat brukere å motta varsler ved endringer på deres brukerdiskusjonsside hvis de har aktivert dette i deres innstillinger.',
-       'config-email-watchlist' => 'Aktiver overvåkningslistevarsler',
-       'config-email-watchlist-help' => 'Tillat brukere å motta varsler ved endringer på deres overvåkede sider hvis de har aktivert dette i deres innstillinger.',
-       'config-email-auth' => 'Aktiver e-postautentisering',
-       'config-email-auth-help' => "Om dette alternativet er aktivert må brukere bekrefte sin e-postadresse ved å bruke en lenke som blir sendt til dem når de setter eller endrer adressen sin.
-Kun autentiserte e-postadresser kan motta e-post fra andre brukere eller endringsvarsel.
-Å sette dette valget er '''anbefalt''' for offentlige wikier på grunn av potensiell misbruk av e-postfunksjonene.",
-       'config-email-sender' => 'Svar-e-postadresse:',
-       'config-email-sender-help' => 'Skriv inn e-postadressen som skal brukes som svar-adresse ved utgående e-post.
-Det er hit returmeldinger vil bli sendt.
-Mange e-posttjenere krever at minst domenenavnet må være gyldig.',
-       'config-upload-settings' => 'Bilde- og filopplastinger',
-       'config-upload-enable' => 'Aktiver filopplastinger',
-       'config-upload-help' => 'Filopplastinger kan potensielt utsette tjeneren din for sikkerhetsrisikoer.
-For mer informasjon, les [//www.mediawiki.org/wiki/Manual:Security sikkerhetsseksjonen] i manualen.
-
-For å aktivere filopplastinger, endre modusen i <code>images</code>-undermappen i MediaWikis rotmappe slik at nettjeneren kan skrive til den.
-Aktiver så dette alternativet.',
-       'config-upload-deleted' => 'Mappe for slettede filer:',
-       'config-upload-deleted-help' => 'Velg en mappe for å arkivere slettede filer.
-Ideelt burde ikke denne være tilgjengelig for nettet.',
-       'config-logo' => 'Logo-URL:',
-       'config-logo-help' => 'MediaWikis standarddrakt inkluderer plass til en 135x160 pikslers logo i øvre venstre hjørne.
-Last opp et bilde i passende størrelse og skriv inn nettadressen her.
-
-Hvis du ikke ønsker en logo, la denne boksen være tom.', # Fuzzy
-       'config-instantcommons' => 'Aktiver Instant Commons',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] er en funksjon som gjør det mulig for wikier å bruke bilder, lyder og andre media funnet på nettstedet [//commons.wikimedia.org/ Wikimedia Commons].
-For å gjøre dette krever MediaWiki tilgang til internett.
-
-For mer informasjon om denne funksjonen, inklusive instruksjoner om hvordan man setter opp dette for andre wikier enn Wikimedia Commons, konsulter [//mediawiki.org/wiki/Manual:$wgForeignFileRepos manualen].',
-       'config-cc-again' => 'Velg igjen...',
-       'config-cc-not-chosen' => 'Velg hvilken Creative Commons-lisens du ønsker og klikk «fortsett».',
-       'config-advanced-settings' => 'Avansert konfigurasjon',
-       'config-extensions' => 'Utvidelser',
-       'config-install-step-done' => 'ferdig',
-       'config-install-step-failed' => 'mislyktes',
-       'config-install-extensions' => 'Inkludert utvidelser',
-       'config-install-database' => 'Setter opp database',
-       'config-install-user' => 'Oppretter databasebruker',
-       'config-install-user-alreadyexists' => 'Brukeren «$1» finnes allerede',
-       'config-install-user-create-failed' => 'Opprettelse av brukeren «$1» mislyktes: $2',
-       'config-install-user-grant-failed' => 'Å gi tillatelse til brukeren «$1» mislyktes: $2',
-       'config-install-tables' => 'Oppretter tabeller',
-       'config-install-mainpage-failed' => 'Kunne ikke sette inn hovedside: $1',
-       'config-download-localsettings' => 'Last ned <code>LocalSettings.php</code>',
-       'config-help' => 'hjelp',
-       'config-nofile' => 'Filen "$1" ble ikke funnet. Kan den være blitt slettet?',
-       'mainpagetext' => "'''MediaWiki-programvaren er nå installert.'''",
-       'mainpagedocfooter' => 'Se [//meta.wikimedia.org/wiki/Help:Contents brukerveiledningen] for informasjon om hvordan du bruker wiki-programvaren.
-
-==Å starte==
-*[//www.mediawiki.org/wiki/Manual:Configuration_settings Oppsettsliste]
-*[//www.mediawiki.org/wiki/Manual:FAQ Ofte stilte spørsmål]
-*[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-postliste]', # Fuzzy
-);
-
-/** Low German (Plattdüütsch)
- * @author Joachim Mos
- */
-$messages['nds'] = array(
-       'config-page-name' => 'Naam',
-       'config-ns-generic' => 'Projekt',
-       'config-admin-name' => 'Dien Naam:',
-       'config-admin-password' => 'Passwoord:',
-       'config-help' => 'Hülp',
-       'mainpagetext' => "'''De MediaWiki-Software is mit Spood installeert worrn.'''",
-       'mainpagedocfooter' => 'Kiek de [//meta.wikimedia.org/wiki/MediaWiki_localisation Dokumentatschoon för dat Anpassen vun de Brukerböversiet]
-un dat [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Brukerhandbook] för Hülp to de Bruuk un Konfiguratschoon.', # Fuzzy
-);
-
-/** Low Saxon (Netherlands) (Nedersaksies)
- * @author Servien
- */
-$messages['nds-nl'] = array(
-       'mainpagetext' => "'''’t Installeren van de MediaWiki programmatuur is succesvol.'''",
-       'mainpagedocfooter' => 'Bekiek de [//meta.wikimedia.org/wiki/Help:Contents haandleiding] veur informasie over t gebruuk van de wikiprogrammatuur.
-
-== Meer hulpe ==
-* [//www.mediawiki.org/wiki/Help:Configuration_settings Lieste mit instellingen]
-* [//www.mediawiki.org/wiki/Help:FAQ MediaWiki-vragen die vake esteld wörden]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-postlieste veur nieje versies]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Maak MediaWiki beschikbaor in joew taal]',
-);
-
-/** Nepali (नेपाली)
- * @author Bhawani Gautam
- * @author RajeshPandey
- */
-$messages['ne'] = array(
-       'mainpagetext' => "'''मीडिया सफलतापूर्वक कम्प्यूटरमा स्थापित भयो ।'''",
-       'mainpagedocfooter' => ' विकी अनुप्रयोग कसरी प्रयोग गर्ने भन्ने जानकारीको लागि  [//meta.wikimedia.org/wiki/Help:Contents प्रयोगकर्ता सहायता] हेर्नुहोस्
-
-== सुरू गर्नको लागि  ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings विन्यास सेटिङ्ग सूची]
-* [//www.mediawiki.org/wiki/Manual:FAQ मेडियाविकि सामान्य प्रश्नका उत्तरहरु]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce मेडियाविकि सुचना मेलिङ्ग सूची]', # Fuzzy
-);
-
-/** Dutch (Nederlands)
- * @author Catrope
- * @author McDutchie
- * @author Purodha
- * @author SPQRobin
- * @author Siebrand
- * @author Tjcool007
- * @author 아라
- */
-$messages['nl'] = array(
-       'config-desc' => 'Het installatieprogramma voor MediaWiki',
-       'config-title' => 'Installatie MediaWiki $1',
-       'config-information' => 'Gegevens',
-       'config-localsettings-upgrade' => 'Er is een bestaand instellingenbestand <code>LocalSettings.php</code> gevonden.
-Voer de waarde van <code>$wgUpgradeKey</code> in in onderstaande invoerveld om deze installatie bij te werken.
-De instelling is terug te vinden in <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Het bestand <code>LocalSettings.php</code> is al aanwezig.
-Voer <code>update.php</code> uit om deze installatie bij te werken.',
-       'config-localsettings-key' => 'Upgradesleutel:',
-       'config-localsettings-badkey' => 'De sleutel die u hebt opgegeven is onjuist',
-       'config-upgrade-key-missing' => 'Er is een bestaande installatie van MediaWiki aangetroffen.
-Plaats de volgende regel onderaan uw <code>LocalSettings.php</code> om deze installatie bij te werken:
-
-$1',
-       'config-localsettings-incomplete' => 'De bestaande inhoud van <code>LocalSettings.php</code> lijkt incompleet.
-De variabele $1 is niet ingesteld.
-Wijzig <code>LocalSettings.php</code> zodat deze variabele is ingesteld en klik op "{{int:Config-continue}}".',
-       'config-localsettings-connection-error' => 'Er is een fout opgetreden tijdens het verbinden van de database met de instellingen uit <code>LocalSettings.php</code> of <code>AdminSettings.php</code>. Los het probleem met de instellingen op en probeer het daarna opnieuw.
-
-$1',
-       'config-session-error' => 'Fout bij het begin van de sessie: $1',
-       'config-session-expired' => 'Uw sessiegegevens zijn verlopen.
-Sessies zijn ingesteld om een levensduur van $1 te hebben.
-U kunt deze wijzigen via de instelling <code>session.gc_maxlifetime</code> in php.ini.
-Begin het installatieproces opnieuw.',
-       'config-no-session' => 'Uw sessiegegevens zijn verloren gegaan.
-Controleer uw php.ini en zorg dat er een juiste map is ingesteld voor <code>session.save_path</code>.',
-       'config-your-language' => 'Uw taal:',
-       'config-your-language-help' => 'Selecteer een taal om tijdens het installatieproces te gebruiken.',
-       'config-wiki-language' => 'Wikitaal:',
-       'config-wiki-language-help' => 'Selecteer de taal waar de wiki voornamelijk in wordt geschreven.',
-       'config-back' => '← Terug',
-       'config-continue' => 'Doorgaan →',
-       'config-page-language' => 'Taal',
-       'config-page-welcome' => 'Welkom bij MediaWiki!',
-       'config-page-dbconnect' => 'Verbinding maken met database',
-       'config-page-upgrade' => 'Bestaande installatie bijwerken',
-       'config-page-dbsettings' => 'Databaseinstellingen',
-       'config-page-name' => 'Naam',
-       'config-page-options' => 'Opties',
-       'config-page-install' => 'Installeren',
-       'config-page-complete' => 'Voltooid!',
-       'config-page-restart' => 'Installatie herstarten',
-       'config-page-readme' => 'Lees mij',
-       'config-page-releasenotes' => 'Release notes',
-       'config-page-copying' => 'Kopiëren',
-       'config-page-upgradedoc' => 'Bijwerken',
-       'config-page-existingwiki' => 'Bestaande wiki',
-       'config-help-restart' => 'Wilt u alle opgeslagen gegevens die u hebt ingevoerd wissen en het installatieproces opnieuw starten?',
-       'config-restart' => 'Ja, opnieuw starten',
-       'config-welcome' => '=== Controle omgeving ===
-Er worden een aantal basiscontroles uitgevoerd met als doel vast te stellen of deze omgeving geschikt is voor een installatie van MediaWiki.
-Als u hulp nodig hebt bij de installatie, lever deze gegevens dan ook aan.',
-       'config-copyright' => "=== Auteursrechten en voorwaarden ===
-
-$1
-
-Dit programma is vrije software. U mag het verder verspreiden en/of aanpassen in overeenstemming met de voorwaarden van de GNU General Public License zoals uitgegeven door de Free Software Foundation; ofwel versie 2 van de Licentie of - naar uw keuze - enige latere versie.
-
-Dit programma wordt verspreid in de hoop dat het nuttig is, maar '''zonder enige garantie''', zelfs zonder de impliciete garantie van '''verkoopbaarheid''' of '''geschiktheid voor een bepaald doel'''.
-Zie de GNU General Public License voor meer informatie.
-
-Samen met dit programma hoort u een <doclink href=Copying>exemplaar van de GNU General Public License</doclink> ontvangen te hebben; zo niet, schrijf dan aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Verenigde Staten. Of [http://www.gnu.org/copyleft/gpl.html lees de licentie online].",
-       'config-sidebar' => '* [//www.mediawiki.org MediaWiki thuispagina]
-* [//www.mediawiki.org/wiki/Help:Contents Gebruikershandleiding] (Engelstalig)
-* [//www.mediawiki.org/wiki/Manual:Contents Beheerdershandleiding] (Engelstalig)
-* [//www.mediawiki.org/wiki/Manual:FAQ Veel gestelde vragen] (Engelstalig)
-----
-* <doclink href=Readme>Leesmij</doclink> (Engelstalig)
-* <doclink href=ReleaseNotes>Release notes</doclink> (Engelstalig)
-* <doclink href=Copying>Kopiëren</doclink> (Engelstalig)
-* <doclink href=UpgradeDoc>Versie bijwerken</doclink> (Engelstalig)',
-       'config-env-good' => 'De omgeving is gecontroleerd.
-U kunt MediaWiki installeren.',
-       'config-env-bad' => 'De omgeving is gecontroleerd.
-U kunt MediaWiki niet installeren.',
-       'config-env-php' => 'PHP $1 is op dit moment geïnstalleerd.',
-       'config-env-php-toolow' => 'PHP $1 is geïnstalleerd.
-MediaWiki heeft PHP $2 of hoger nodig om correct te kunnen werken.',
-       'config-unicode-using-utf8' => 'Voor Unicode-normalisatie wordt utf8_normalize.so van Brion Vibber gebruikt.',
-       'config-unicode-using-intl' => 'Voor Unicode-normalisatie wordt de [http://pecl.php.net/intl PECL-extensie intl] gebruikt.',
-       'config-unicode-pure-php-warning' => "'''Waarschuwing''': de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.
-Als u MediaWiki voor een website met veel verkeer installeert, lees u dan in over [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicodenormalisatie].",
-       'config-unicode-update-warning' => "'''Waarschuwing''': de geïnstalleerde versie van de Unicodenormalisatiewrapper maakt gebruik van een oudere versie van [http://site.icu-project.org/ de bibliotheek van het ICU-project].
-U moet [//www.mediawiki.org/wiki/Unicode_normalization_considerations bijwerken] als Unicode voor u van belang is.",
-       'config-no-db' => 'Het was niet mogelijk een geschikte databasedriver te vinden voor PHP.
-U moet een databasedriver installeren voor PHP.
-De volgende databases worden ondersteund: $1.
-
-Als u op een gedeelde omgeving zit, vraag dan aan uw hostingprovider een geschikte databasedriver te installeren.
-Als u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysql</code>.
-Als u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook de module php5-mysql.',
-       'config-outdated-sqlite' => "''' Waarschuwing:''' u gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.",
-       'config-no-fts3' => "'''Waarschuwing''': SQLite is gecompileerd zonder de module [//sqlite.org/fts3.html FTS3]; er zijn geen zoekfuncties niet beschikbaar.",
-       'config-register-globals' => "'''Waarschuwing: de PHP-optie <code>[http://php.net/register_globals register_globals]</code> is ingeschakeld.'''
-'''Schakel deze uit als dat mogelijk is.'''
-MediaWiki kan ermee werken, maar uw server is dan meer kwetsbaar voor beveiligingslekken.",
-       'config-magic-quotes-runtime' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is actief!'''
-Deze instelling zorgt voor gegevenscorruptie.
-U kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
-       'config-magic-quotes-sybase' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] is actief!'''
-Deze instelling zorgt voor gegevenscorruptie.
-U kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
-       'config-mbstring' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!'''
-Deze instelling zorgt voor gegevenscorruptie.
-U kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
-       'config-ze1' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] is actief!'''
-Deze instelling zorgt voor grote problemen in MediaWiki.
-U kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
-       'config-safe-mode' => "'''Waarschuwing:'''
-'''PHP's [http://www.php.net/features.safe-mode veilige modus] is actief.'''
-Dit kan problemen veroorzaken, vooral bij het uploaden van bestanden en ondersteuning van <code>math</code>.",
-       'config-xml-bad' => 'De XML-module van PHP ontbreekt.
-MediaWiki heeft de functies van deze module nodig en werkt niet zonder deze module.
-Als u gebruik maakt van Mandrake, installeer dan het package php-xml.',
-       'config-pcre' => 'De ondersteuningsmodule PCRE lijkt te missen.
-MediaWiki vereist dat de met Perl compatibele reguliere expressies werken.',
-       'config-pcre-no-utf8' => "'''Fataal:''' de module PRCE van PHP lijkt te zijn gecompileerd zonder ondersteuning voor PCRE_UTF8.
-MediaWiki heeft ondersteuning voor UTF-8 nodig om correct te kunnen werken.",
-       'config-memory-raised' => "PHP's <code>memory_limit</code> is $1 en is verhoogd tot $2.",
-       'config-memory-bad' => "'''Waarschuwing:''' PHP's <code>memory_limit</code> is $1.
-Dit is waarschijnlijk te laag.
-De installatie kan mislukken!",
-       'config-ctype' => "'''Fataal:''' PHP moet gecompileerd zijn met ondersteuning voor de [http://www.php.net/manual/en/ctype.installation.php extensie Ctype].",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] is op dit moment geïnstalleerd',
-       'config-apc' => '[http://www.php.net/apc APC] is op dit moment geïnstalleerd',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] is op dit moment geïnstalleerd',
-       'config-no-cache' => "'''Waarschuwing:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] of [http://www.iis.net/download/WinCacheForPhp WinCache] is niet aangetroffen.
-Het cachen van objecten is niet ingeschakeld.",
-       'config-mod-security' => "'''Waarschuwing:''' uw webserver heeft de module [http://modsecurity.org/ mod_security] ingeschakeld. Als deze onjuist is ingesteld, kan dit problemen geven in combinatie met MediaWiki of andere software die gebruikers in staat stelt willekeurige inhoud te posten.
-Lees de [http://modsecurity.org/documentation/ documentatie over mod_security] of neem contact op met de helpdesk van uw provider als u tegen problemen aanloopt.",
-       'config-diff3-bad' => 'GNU diff3 niet aangetroffen.',
-       'config-git' => 'Versiecontrolesoftware git is aangetroffen: <code>$1</code>',
-       'config-git-bad' => 'Geen git versiecontrolesoftware aangetroffen.',
-       'config-imagemagick' => 'ImageMagick aangetroffen: <code>$1</code>.
-Het aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als u uploaden inschakelt.',
-       'config-gd' => 'Ingebouwde GD grafische bibliotheek aangetroffen.
-Het aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als u uploaden inschakelt.',
-       'config-no-scaling' => 'De GD-bibliotheek en ImageMagick zijn niet aangetroffen.
-Het maken van miniaturen van afbeeldingen wordt uitgeschakeld.',
-       'config-no-uri' => "'''Fout:''' de huidige URI kon niet vastgesteld worden.
-De installatie is afgebroken.",
-       'config-no-cli-uri' => "'''Waarschuwing:''' de parameter ==scriptpath is niet opgegeven. De standaardwaarde wordt gebruikt: <code>$1</code>.",
-       'config-using-server' => 'De servernaam "<nowiki>$1</nowiki>" wordt gebruikt.',
-       'config-using-uri' => 'De server-URL "<nowiki>$1$2</nowiki>" wordt gebruikt.',
-       'config-uploads-not-safe' => "'''Waarschuwing:''' uw uploadmap <code>$1</code> kan gebruikt worden voor het arbitrair uitvoeren van scripts.
-Hoewel MediaWiki alle toegevoegde bestanden controleert op bedreigingen, is het zeer aan te bevelen het [//www.mediawiki.org/wiki/Manual:Security#Upload_security beveiligingslek te verhelpen] alvorens uploads in te schakelen.",
-       'config-no-cli-uploads-check' => "''Waarschuwing:'' uw standaardmap voor uploads (<code>$1</code>) wordt niet gecontroleerd op kwetsbaarheden voor het uitvoeren van willekeurige scripts gedurende de CLI-installatie.",
-       'config-brokenlibxml' => 'Uw systeem heeft een combinatie van PHP- en libxml2-versies geïnstalleerd die is foutgevoelig is en kan leiden tot onzichtbare beschadiging van gegevens in MediaWiki en andere webapplicaties.
-Upgrade naar PHP 5.2.9 of hoger en libxml2 2.7.3 of hoger([//bugs.php.net/bug.php?id=45996 bij PHP gerapporteerde fout]).
-De installatie wordt afgebroken.',
-       'config-using531' => 'PHP $1 is niet compatibel met MediaWiki vanwege een fout met betrekking tot referentieparameters met <code>__call()</code>.
-Werk uw PHP bij naar PHP 5.3.2 of hoger of werk bij naar de lagere versie PHP 5.3.0 om dit op te lossen.
-De installatie wordt afgebroken.',
-       'config-suhosin-max-value-length' => 'Suhosin is geïnstalleerd en beperkt de GET-parameter <code>length</code> tot $1 bytes.
-De ResourceLoader van MediaWiki omzeilt deze beperking, maar dat is slecht voor de prestaties.
-Als het mogelijk is, moet u de waarde "<code>suhosin.get.max_value_length</code>" in <code>php.ini</code> instellen op 1024 of hoger en <code>$wgResourceLoaderMaxQueryLength</code> in LocalSettings.php op dezelfde waarde instellen.',
-       'config-db-type' => 'Databasetype:',
-       'config-db-host' => 'Databasehost:',
-       'config-db-host-help' => 'Als uw databaseserver een andere server is, voer dan de hostnaam of het IP-adres hier in.
-
-Als u gebruik maakt van gedeelde webhosting, hoort uw provider u de juiste hostnaam te hebben verstrekt.
-
-Als u MediaWiki op een Windowsserver installeert en MySQL gebruikt, dan werkt "localhost" mogelijk niet als servernaam.
-Als het inderdaad niet werkt, probeer dan "127.0.0.1" te gebruiken als lokaal IP-adres.
-
-Als u PostgreSQL gebruikt, laat dit veld dan leeg om via een Unix-socket te verbinden.',
-       'config-db-host-oracle' => 'Database-TNS:',
-       'config-db-host-oracle-help' => 'Voer een geldige [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] in; een tnsnames.ora-bestand moet zichtbaar zijn voor deze installatie.<br />Als u gebruik maakt van clientlibraries 10g of een latere versie, kunt u ook gebruik maken van de naamgevingsmethode [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
-       'config-db-wiki-settings' => 'Identificeer deze wiki',
-       'config-db-name' => 'Databasenaam:',
-       'config-db-name-help' => 'Kies een naam die uw wiki identificeert.
-Er mogen geen spaties gebruikt worden.
-Als u gebruik maakt van gedeelde webhosting, dan hoort uw provider ofwel u een te gebruiken databasenaam gegeven te hebben, of u aangegeven te hebben hoe u databases kunt aanmaken.',
-       'config-db-name-oracle' => 'Databaseschema:',
-       'config-db-account-oracle-warn' => 'Er zijn drie ondersteunde scenario\'s voor het installeren van Oracle als databasebackend:
-
-Als u een databasegebruiker wilt aanmaken als onderdeel van het installatieproces, geef dan de gegevens op van een databasegebruiker in met de rol SYSDBA voor de installatie en voer de gewenste aanmeldgegevens in voor de gebruiker met webtoegang. U kunt ook de gebruiker met webtoegang handmatig aanmaken en alleen van die gebruiker de aanmeldgegevens opgeven als deze de vereiste rechten heeft om schemaobjecten aan te maken. Als laatste is het mogelijk om aanmeldgegevens van twee verschillende gebruikers op te geven; een met de rechten om schemaobjecten aan te maken, en een met alleen webtoegang.
-
-Een script voor het aanmaken van een gebruiker met de vereiste rechten is te vinden in de map "maintenance/oracle/" van deze installatie. Onthoud dat het gebruiken van een gebruiker met beperkte rechten alle mogelijkheden om beheerscripts uit te voeren met de standaard gebruiker onmogelijk maakt.',
-       'config-db-install-account' => 'Gebruiker voor installatie',
-       'config-db-username' => 'Gebruikersnaam voor database:',
-       'config-db-password' => 'Wachtwoord voor database:',
-       'config-db-password-empty' => 'Voer een wachtwoord in voor de nieuwe databasegebruiker: $1.
-Hoewel het wellicht mogelijk is gebruikers aan te maken zonder wachtwoord, is dit niet veilig.',
-       'config-db-install-username' => 'Voer de gebruikersnaam in die gebruikt moet worden om te verbinden met de database tijdens het installatieproces. Dit is niet de gebruikersnaam van de MediaWikigebruiker. Dit is de gebruikersnaam voor de database.',
-       'config-db-install-password' => 'Voer het wachtwoord in dat gebruikt moet worden om te verbinden met de database tijdens het installatieproces. Dit is niet het wachtwoord van de MediaWikigebruiker. Dit is het wachtwoord voor de database.',
-       'config-db-install-help' => 'Voer de gebruikersnaam en het wachtwoord in die worden gebruikt voor de databaseverbinding tijdens het installatieproces.',
-       'config-db-account-lock' => 'Dezelfde gebruiker en wachwoord gebruiken na de installatie',
-       'config-db-wiki-account' => 'Gebruiker voor na de installatie',
-       'config-db-wiki-help' => 'Voer de gebruikersnaam en het wachtwoord in die gebruikt worden om verbinding te maken met de database na de installatie.
-Als de gebruiker niet bestaat en de gebruiker die tijdens de installatie gebruikt wordt voldoende rechten heeft, wordt deze gebruiker aangemaakt met de minimaal benodigde rechten voor het laten werken van de wiki.',
-       'config-db-prefix' => 'Databasetabelvoorvoegsel:',
-       'config-db-prefix-help' => "Als u een database moet gebruiken voor meerdere wiki's, of voor MediaWiki en een andere applicatie, dan kunt u ervoor kiezen om een voorvoegsel toe te voegen aan de tabelnamen om conflicten te voorkomen.
-Gebruik geen spaties.
-
-Dit veld wordt meestal leeg gelaten.",
-       'config-db-charset' => 'Tekenset voor de database',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binair',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 UTF-8-compatibel',
-       'config-charset-help' => "'''Waarschuwing:''' als u '''achterwaarts compatibel met UTF-8''' gebruikt met MySQL 4.1+ en een back-up van de database maakt met <code>mysqldump</code>, dan kunnen alle niet-ASCII-tekens in uw back-ups onherstelbaar beschadigd raken.
-
-In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.
-Dit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledige reeks Unicode-tekens te gebruiken.
-In '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren.
-Het is dan niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
-       'config-mysql-old' => 'U moet MySQL $1 of later gebruiken.
-U gebruikt $2.',
-       'config-db-port' => 'Databasepoort:',
-       'config-db-schema' => 'Schema voor MediaWiki',
-       'config-db-schema-help' => 'Dit schema klopt meestal.
-Wijzig het alleen als u weet dat dit nodig is.',
-       'config-pg-test-error' => "Kan geen verbinding maken met database '''$1''': $2",
-       'config-sqlite-dir' => 'Gegevensmap voor SQLite:',
-       'config-sqlite-dir-help' => "SQLite slaat alle gegevens op in een enkel bestand.
-
-De map die u opgeeft moet beschrijfbaar zijn voor de webserver tijdens de installatie.
-
-Deze mag '''niet toegankelijk''' zijn via het web en het bestand mag dus niet tussen de PHP-bestanden staan.
-
-Het installatieprogramma schrijft het bestand <code>.htaccess</code> weg met het databasebestand, maar als dat niet werkt kan iemand zich toegang tot het ruwe databasebestand verschaffen.
-Ook de gebruikersgegevens (e-mailadressen, wachtwoordhashes) en verwijderde versies en overige gegevens met beperkte toegang via MediaWiki zijn dan onbeschermd.
-
-Overweeg om de database op een totaal andere plaats neer te zetten, bijvoorbeeld in <code>/var/lib/mediawiki/yourwiki</code>.",
-       'config-oracle-def-ts' => 'Standaard tablespace:',
-       'config-oracle-temp-ts' => 'Tijdelijke tablespace:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => 'MediaWiki ondersteunt de volgende databasesystemen:
-
-$1
-
-Als u het databasesysteem dat u wilt gebruiken niet in de lijst terugvindt, volg dan de handleiding waarnaar hierboven wordt verwezen om ondersteuning toe te voegen.',
-       'config-support-mysql' => '* $1 is het primaire databasesysteem voor voor MediaWiki en wordt het best ondersteund ([http://www.php.net/manual/en/mysql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor MySQL])',
-       'config-support-postgres' => '* $1 is een populair open source databasesysteem als alternatief voor MySQL ([http://www.php.net/manual/en/pgsql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor PostgreSQL]). Het is mogelijk dat er een aantal bekende problemen zijn met MediaWiki in combinatie met deze database en daarom wordt PostgreSQL niet aanbevolen voor een productieomgeving.',
-       'config-support-sqlite' => '* $1 is een zeer goed ondersteund lichtgewicht databasesysteem ([http://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd zijn met ondersteuning voor SQLite]; gebruikt PDO)',
-       'config-support-oracle' => '* $1 is een commerciële data voor grote bedrijven ([http://www.php.net/manual/en/oci8.installation.php PHP compileren met ondersteuning voor OCI8]).',
-       'config-header-mysql' => 'MySQL-instellingen',
-       'config-header-postgres' => 'PostgreSQL-instellingen',
-       'config-header-sqlite' => 'SQLite-instellingen',
-       'config-header-oracle' => 'Oracle-instellingen',
-       'config-invalid-db-type' => 'Ongeldig databasetype',
-       'config-missing-db-name' => 'U moet een waarde opgeven voor "Databasenaam"',
-       'config-missing-db-host' => 'U moet een waarde invoeren voor "Databaseserver"',
-       'config-missing-db-server-oracle' => 'U moet een waarde opgeven voor "Database-TNS"',
-       'config-invalid-db-server-oracle' => 'Ongeldige database-TNS "$1".
-Gebruik "TNS Names" of een "Easy Connect" tekst ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle naamgevingsmethoden])',
-       'config-invalid-db-name' => 'Ongeldige databasenaam "$1".
-Gebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_) en streepjes (-).',
-       'config-invalid-db-prefix' => 'Ongeldig databasevoorvoegsel "$1".
-Gebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_) en streepjes (-).',
-       'config-connection-error' => '$1.
-
-Controleer de host, gebruikersnaam en wachtwoord en probeer het opnieuw.',
-       'config-invalid-schema' => 'Ongeldig schema voor MediaWiki "$1".
-Gebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_).',
-       'config-db-sys-create-oracle' => 'Het installatieprogramma biedt alleen de mogelijkheid een nieuwe gebruiker aan te maken met de SYSDBA-gebruiker.',
-       'config-db-sys-user-exists-oracle' => 'De gebruiker "$1" bestaat al. SYSDBA kan alleen gebruikt worden voor het aanmaken van een nieuwe gebruiker!',
-       'config-postgres-old' => 'PostgreSQL $1 of hoger is vereist.
-U gebruikt $2.',
-       'config-sqlite-name-help' => 'Kies een naam die uw wiki identificeert.
-Gebruik geen spaties of koppeltekens.
-Deze naam wordt gebruikt voor het gegevensbestand van SQLite.',
-       'config-sqlite-parent-unwritable-group' => 'Het was niet mogelijk de gegevensmap <code><nowiki>$1</nowiki></code> te maken omdat in de bovenliggende map <code><nowiki>$2</nowiki></code> niet geschreven mag worden door de webserver.
-
-Het installatieprogramma heeft vast kunnen stellen onder welke gebruiker de webserver draait.
-Maak de map <code><nowiki>$3</nowiki></code> beschrijfbaar om door te kunnen gaan.
-Voer op een Linux-systeem de volgende opdrachten uit:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Het was niet mogelijk de gegevensmap <code><nowiki>$1</nowiki></code> te maken omdat in de bovenliggende map <code><nowiki>$2</nowiki></code> niet geschreven mag worden door de webserver.
-
-Het installatieprogramma heeft niet vast kunnen stellen onder welke gebruiker de webserver draait.
-Maak de map <code><nowiki>$3</nowiki></code> beschrijfbaar voor de webserver (en anderen!) om door te kunnen gaan.
-Voer op een Linux-systeem de volgende opdrachten uit:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Er is een fout opgetreden tijdens het aanmaken van de gegevensmap "$1".
-Controleer de locatie en probeer het opnieuw.',
-       'config-sqlite-dir-unwritable' => 'Het was niet mogelijk in de map "$1" te schrijven.
-Wijzig de rechten zodat de webserver erin kan schrijven en probeer het opnieuw.',
-       'config-sqlite-connection-error' => '$1.
-
-Controleer de map voor gegevens en de databasenaam hieronder en probeer het opnieuw.',
-       'config-sqlite-readonly' => 'Er kan niet naar bestand <code>$1</code> worden geschreven.',
-       'config-sqlite-cant-create-db' => 'Het was niet mogelijk het databasebestand <code>$1</code> aan te maken.',
-       'config-sqlite-fts3-downgrade' => 'PHP heeft geen ondersteuning voor FTS3.
-De tabellen worden gedowngrade.',
-       'config-can-upgrade' => "Er staan al tabellen voor MediaWiki in deze database.
-Klik op '''Doorgaan''' om ze bij te werken naar MediaWiki $1.",
-       'config-upgrade-done' => "Het bijwerken is afgerond.
-
-Uw kunt [$1 uw wiki nu gebruiken].
-
-Als u uw <code>LocalSettings.php</code> opnieuw wilt aanmaken, klik dan op de knop hieronder.
-Dit is '''niet aan te raden''' tenzij u problemen hebt met uw wiki.",
-       'config-upgrade-done-no-regenerate' => 'Het bijwerken is afgerond.
-
-U kunt nu [$1 uw wiki gebruiken].',
-       'config-regenerate' => 'LocalSettings.php opnieuw aanmaken →',
-       'config-show-table-status' => 'Het uitvoeren van <code>SHOW TABLE STATUS</code> is mislukt!',
-       'config-unknown-collation' => "'''Waarschuwing:''' de database gebruikt een collatie die niet wordt herkend.",
-       'config-db-web-account' => 'Databasegebruiker voor webtoegang',
-       'config-db-web-help' => 'Selecteer de gebruikersnaam en het wachtwoord die de webserver gebruikt om verbinding te maken met de databaseserver na de installatie.',
-       'config-db-web-account-same' => 'Dezelfde gebruiker gebruiken als voor de installatie',
-       'config-db-web-create' => 'Maak de gebruiker aan als deze nog niet bestaat',
-       'config-db-web-no-create-privs' => 'De gebruiker die u hebt opgegeven voor de installatie heeft niet voldoende rechten om een gebruiker aan te maken.
-De gebruiker die u hier opgeeft moet al bestaan.',
-       'config-mysql-engine' => 'Opslagmethode:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Waarschuwing''': u hebt MyISAM geselecteerd als opslagengine voor MySQL. Dit is niet aan te raden voor MediaWiki omdat:
-* het nauwelijks ondersteuning biedt voor gebruik door meerdere gebruikers tegelijkertijd door het locken van tabellen;
-* het meer vatbaar is voor corruptie dan andere engines;
-* de code van MediaWiki niet alstijd omgaat met MyISAM zoals dat zou moeten.
-
-Als uw installatie van MySQL InnoDB ondersteunt, gebruik dat dan vooral.
-Als uw installatie van MySQL geen ondersteuning heeft voor InnoDB, denk dan na over upgraden.",
-       'config-mysql-only-myisam-dep' => "'''Waarschuwing:''' MyISAM is enige beschikbare opslagmethode voor MySQL, en deze wordt niet aangeraden voor gebruik met MediaWiki, omdat:
-* er nauwelijks ondersteuning is voor meerdere gelijktijdige transacties omdat tabellen op slot gezet worden;
-* tabellen makkelijker stuk kunnen gaan;
-* de code van MediaWiki niet altijd op de juiste wijze omgaat met MyISAM.
-
-Uw installatie van MySQL heeft geen ondersteuning voor InnoDB. We raden u aan om een meer recente versie te gebruiken.",
-       'config-mysql-engine-help' => "'''InnoDB''' is vrijwel altijd de beste instelling, omdat deze goed omgaat met meerdere verzoeken tegelijkertijd.
-
-'''MyISAM''' is bij een zeer beperkt aantal gebruikers mogelijk sneller, of als de wiki alleen-lezen is.
-MyISAM-databases raken vaker corrupt dan InnoDB-databases.",
-       'config-mysql-charset' => 'Tekenset voor de database:',
-       'config-mysql-binary' => 'Binair',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.
-Dit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledige reeks Unicodetekens te gebruiken.
-
-In '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren.
-Het is dat niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
-       'config-site-name' => 'Naam van de wiki:',
-       'config-site-name-help' => 'Deze naam verschijnt in de titelbalk van browsers en op andere plaatsen.',
-       'config-site-name-blank' => 'Geef een naam op voor de site.',
-       'config-project-namespace' => 'Projectnaamruimte:',
-       'config-ns-generic' => 'Project',
-       'config-ns-site-name' => 'Zelfde als de wiki: $1',
-       'config-ns-other' => 'Andere (geef aan welke)',
-       'config-ns-other-default' => 'MijnWiki',
-       'config-project-namespace-help' => "In het kielzog van Wikipedia beheren veel wiki's hun beleidspagina's apart van hun inhoudelijke pagina's in een \"'''projectnaamruimte'''\".
-Alle paginanamen in deze naamruimte beginnen met een bepaald voorvoegsel dat u hier kunt opgeven.
-Dit voorvoegsel wordt meestal afgeleid van de naam van de wiki, maar het kan geen bijzondere tekens bevatten als \"#\" of \":\".",
-       'config-ns-invalid' => 'De opgegeven naamruimte "<nowiki>$1</nowiki>" is ongeldig.
-Geef een andere naamruimte op.',
-       'config-ns-conflict' => 'De opgegeven naamruimte "<nowiki>$1</nowiki>" conflicteert met een standaard naamruimte in MediaWiki.
-Geef een andere naam op voor de projectnaamruimte.',
-       'config-admin-box' => 'Beheerdersgebruiker',
-       'config-admin-name' => 'Uw naam:',
-       'config-admin-password' => 'Wachtwoord:',
-       'config-admin-password-confirm' => 'Wachtwoord opnieuw:',
-       'config-admin-help' => 'Voer de gebruikersnaam hier in, bijvoorbeeld "Jan Jansen".
-Dit is de naam die wordt gebruikt om aan de melden bij de wiki.',
-       'config-admin-name-blank' => 'Geef een gebruikersnaam op voor de beheerder.',
-       'config-admin-name-invalid' => 'De opgegeven gebruikersnaam "<nowiki>$1</nowiki>" is ongeldig.
-Kies een andere gebruikersnaam.',
-       'config-admin-password-blank' => 'Voer een wachtwoord voor de beheerder in.',
-       'config-admin-password-same' => 'Het wachtwoord mag niet hetzelfde zijn als de gebruikersnaam.',
-       'config-admin-password-mismatch' => 'De twee door u ingevoerde wachtwoorden komen niet overeen.',
-       'config-admin-email' => 'E-mailadres:',
-       'config-admin-email-help' => "Voer hier een e-mailadres in om e-mail te kunnen ontvangen van andere gebruikers op de wiki, uw wachtwoord opnieuw in te kunnen stellen en op de hoogte te worden gehouden van wijzigingen van pagina's op uw volglijst. U kunt het veld leeg laten.",
-       'config-admin-error-user' => 'Interne fout bij het aanmaken van een beheerder met de naam "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'Interne fout bij het instellen van een wachtwoord voor de bejeerder "<nowiki>$1</nowiki>": <pre>$2</pre>',
-       'config-admin-error-bademail' => 'U hebt een ongeldig e-mailadres opgegeven',
-       'config-subscribe' => 'Abonneren op de [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailinglijst releaseaankondigen].',
-       'config-subscribe-help' => 'Dit is een mailinglijst met een laag volume voor aankondigingen van nieuwe versies, inclusief belangrijke aankondigingen met betrekking tot beveiliging.
-Abonneer uzelf erop en werk uw MediaWiki-installatie bij als er nieuwe versies uitkomen.',
-       'config-subscribe-noemail' => 'U hebt geprobeerd zich te abonneren op de mailinglijst voor release-aankondigingen zonder een e-mailadres op te geven.
-Geef een e-mailadres op als u zich wilt abonneren op de mailinglijst.',
-       'config-almost-done' => 'U bent bijna klaar!
-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' => 'Open wiki',
-       'config-profile-no-anon' => 'Gebruiker aanmaken verplicht',
-       'config-profile-fishbowl' => 'Alleen voor geautoriseerde bewerkers',
-       'config-profile-private' => 'Privéwiki',
-       'config-profile-help' => "Wiki's werken het beste als ze door zoveel mogelijk gebruikers worden bewerkt.
-In MediaWiki is het eenvoudig om de recente wijzigingen te controleren en eventuele foutieve of kwaadwillende bewerkingen terug te draaien.
-
-Daarnaast vinden velen MediaWiki goed inzetbaar in vele andere rollen, en soms is het niet handig om helemaal \"op de wikimanier\" te werken.
-Daarom biedt dit installatieprogramma u de volgende keuzes voor de basisinstelling van gebruikersvrijheden:
-
-Het profiel '''{{int:config-profile-wiki}}''' staat iedereen toe te bewerken, zonder zelfs aan te melden.
-Een wiki met '''{{int:config-profile-no-anon}}\" biedt extra verantwoordelijkheid, maar kan afschrikken toevallige gebruikers afschrikken.
-
-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].",
-       'config-license' => 'Auteursrechten en licentie:',
-       'config-license-none' => 'Geen licentie in de voettekst',
-       'config-license-cc-by-sa' => 'Creative Commons Naamsvermelding-Gelijk delen',
-       'config-license-cc-by' => 'Creative Commons Naamsvermelding',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Naamsvermelding-Niet Commercieel-Gelijk delen',
-       'config-license-cc-0' => 'Creative Commons Zero (Publiek domein)',
-       'config-license-gfdl' => 'GNU Free Documentation License 1.3 of hoger',
-       'config-license-pd' => 'Publiek domein',
-       'config-license-cc-choose' => 'Een Creative Commons-licentie selecteren',
-       'config-license-help' => "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [http://freedomdefined.org/Definition vrije licentie].
-Dit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.
-Dit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.
-
-Als u teksten uit Wikipedia wilt kunnen gebruiken en u wilt het mogelijk maken teksten uit uw wiki naar Wikipedia te kopiëren, kies dan de licentie '''Creative Commons Naamsvermelding-Gelijk delen'''.
-
-De GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.
-Dit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.
-Het is ook lastig inhoud te hergebruiken onder de GFDL.",
-       'config-email-settings' => 'E-mailinstellingen',
-       'config-enable-email' => 'Uitgaande e-mail inschakelen',
-       'config-enable-email-help' => 'Als u wilt dat e-mailen mogelijk is, dan moeten de [http://www.php.net/manual/en/mail.configuration.php e-mailinstellingen van PHP] correct zijn.
-Als u niet wilt dat e-mailen mogelijk is, dan kunt u de instellingen hier uitschakelen.',
-       'config-email-user' => 'E-mail tussen gebruikers inschakelen',
-       'config-email-user-help' => 'Gebruikers toestaan e-mail aan elkaar te verzenden als dit in de voorkeuren is ingesteld.',
-       'config-email-usertalk' => 'Gebruikersoverlegmeldingen inschakelen',
-       'config-email-usertalk-help' => 'Gebruikers toestaan meldingen te ontvangen bij wijzigingen op de eigen overlegpagina, als dit in de voorkeuren is ingesteld.',
-       'config-email-watchlist' => 'Volglijstmeldingen inschakelen',
-       'config-email-watchlist-help' => "Gebruikers toestaan meldingen te ontvangen bij wijzigingen van pagina's op hun volglijst, als dit in de voorkeuren is ingesteld.",
-       'config-email-auth' => 'E-mailbevestiging inschakelen',
-       'config-email-auth-help' => "Als deze instelling actief is, moeten gebruikers hun e-mailadres bevestigen via een verwijziging die ze per e-mail wordt toegezonden.
-Alleen bevestigde e-mailadressen kunnen e-mail ontvangen van andere gebruikers of wijzigingsnotificaties ontvangen.
-Het inschakelen van deze instelling wordt '''aangeraden''' voor openbare wiki's vanwege de mogelijkheden voor misbruik van e-mailmogelijkheden.",
-       'config-email-sender' => 'E-mailadres voor antwoorden:',
-       'config-email-sender-help' => 'Voer het e-mailadres in dat u wilt gebruiken als antwoordadres voor uitgaande e-mail.
-Als een e-mail niet bezorgd kan worden, wordt dat op dit e-mailadres gemeld.
-Veel mailservers vereisen dat tenminste het domein bestaat.',
-       'config-upload-settings' => 'Afbeeldingen en bestanden uploaden',
-       'config-upload-enable' => 'Uploaden van bestanden inschakelen',
-       'config-upload-help' => "Het toestaan van het uploaden van bestanden stelt uw server mogelijk bloot aan beveiligingsrisico's.
-Er is meer [//www.mediawiki.org/wiki/Manual:Security informatie over beveiliging] beschikbaar in de handleiding.
-
-Om het bestandsuploads mogelijk te maken kunt u de rechten op de submap <code>images</code> onder de hoofdmap van MediaWiki aanpassen, zodat de webserver erin kan schrijven.
-Daarmee wordt deze functie ingeschakeld.",
-       'config-upload-deleted' => 'Map voor verwijderde bestanden:',
-       'config-upload-deleted-help' => 'Kies een map waarin verwijderde bestanden gearchiveerd kunnen worden.
-Idealiter is deze map niet via het web te benaderen.',
-       'config-logo' => 'URL voor logo:',
-       'config-logo-help' => 'Het standaarduiterlijk van MediaWiki bevat ruimte voor een logo van 135x160 pixels boven het menu.
-Upload een afbeelding met de juiste afmetingen en voer de URL hier in.
-
-U kunt <code>$wgStylePath</code> of <code>$wgScriptPath</code> gebruiken als uw logo relatief is aan een van deze paden.
-
-Als u geen logo wilt gebruiken, kunt u dit veld leeg laten.',
-       'config-instantcommons' => 'Instant Commons inschakelen',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] is functie die het mogelijk maakt om afbeeldingen, geluidsbestanden en andere mediabestanden te gebruiken van de website [//commons.wikimedia.org/ Wikimedia Commons].
-Hiervoor heeft MediaWiki toegang nodig tot Internet.
-
-Meer informatie over deze functie en hoe deze in te stellen voor andere wiki\'s dan Wikimedia Commons is te vinden in de [//mediawiki.org/wiki/Manual:$wgForeignFileRepos handleiding].',
-       'config-cc-error' => 'De licentiekiezer van Creative Commons heeft geen resultaat opgeleverd.
-Voer de licentie handmatig in.',
-       'config-cc-again' => 'Opnieuw kiezen...',
-       'config-cc-not-chosen' => 'Kies de Creative Commonslicentie die u wilt gebruiken en klik op "doorgaan".',
-       'config-advanced-settings' => 'Gevorderde instellingen',
-       'config-cache-options' => 'Instellingen voor het cachen van objecten:',
-       'config-cache-help' => 'Het cachen van objecten wordt gebruikt om de snelheid van MediaWiki te verbeteren door vaak gebruikte gegevens te bewaren.
-Middelgrote tot grote websites wordt geadviseerd dit in te schakelen en ook kleine sites merken de voordelen.',
-       'config-cache-none' => 'Niets cachen.
-Er gaat geen functionaliteit verloren, maar dit kan invloed hebben op de prestaties.',
-       'config-cache-accel' => 'Cachen van objecten via PHP (APC, XCache of WinCache)',
-       'config-cache-memcached' => 'Memcached gebruiken (dit vereist aanvullende instellingen)',
-       'config-memcached-servers' => 'Memcachedservers:',
-       'config-memcached-help' => 'Lijst met IP-adressen te gebruiken voor Memcached.
-Eén IP-adres per regel met een poortnummer.
-Bijvoorbeeld:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => 'U hebt Memcached geselecteerd als uw cache, maar u hebt geen servers opgegeven.',
-       'config-memcache-badip' => 'U hebt een ongeldig IP-adres ingevoerd voor Memcached: $1.',
-       'config-memcache-noport' => 'U hebt geen poort opgegeven voor de Memcachedserver: $1.
-De standaardpoort is 11211.',
-       'config-memcache-badport' => 'Poortnummers voor Memcached moeten tussen $1 en $2 liggen.',
-       'config-extensions' => 'Uitbreidingen',
-       'config-extensions-help' => 'De bovenstaande uitbreidingen zijn aangetroffen in de map <code>./extensions</code>.
-
-Mogelijk moet u aanvullende instellingen maken, maar u kunt deze uitbreidingen nu inschakelen.',
-       'config-install-alreadydone' => "'''Waarschuwing:''' het lijkt alsof u MediaWiki al hebt geïnstalleerd en probeert het programma opnieuw te installeren.
-Ga 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 "{{int:config-back}}".',
-       'config-install-step-done' => 'afgerond',
-       'config-install-step-failed' => 'mislukt',
-       'config-install-extensions' => 'Inclusief uitbreidingen',
-       'config-install-database' => 'Database inrichten',
-       'config-install-schema' => 'Het schema wordt aangemaakt',
-       'config-install-pg-schema-not-exist' => 'Het schema voor PostgreSQL bestaat niet',
-       'config-install-pg-schema-failed' => 'Het aanmaken van de tabellen is mislukt.
-Zorg dat de gebruiker "$1" in het schema "$2" mag schrijven.',
-       'config-install-pg-commit' => 'Wijzigingen worden doorgevoerd',
-       'config-install-pg-plpgsql' => 'Controle op de taal PL/pgSQL',
-       'config-pg-no-plpgsql' => 'U moet de taal PL/pgSQL installeren in de database $1',
-       'config-pg-no-create-privs' => 'De gebruiker die u hebt opgegeven door de installatie heeft niet voldoende rechten om een gebruiker aan te maken.',
-       'config-pg-not-in-role' => 'De gebruiker die u hebt opgegeven voor de webgebruiker bestaat al.
-De gebruiker die u hebt opgegeven voor installatie is geen superuser en geen lid van de rol van de webgebruiker, en kan het dus geen objecten aanmaken die van de webgebruiker zijn.
-
-MediaWiki vereist momenteel dat de tabellen van de webgebruiker zijn. Geef een andere webgebruikersnaam op, of klik op "terug" en geef een gebruiker op die voldoende installatierechten heeft.',
-       'config-install-user' => 'Databasegebruiker aan het aanmaken',
-       'config-install-user-alreadyexists' => 'Gebruiker "$1" bestaat al',
-       'config-install-user-create-failed' => 'Het aanmaken van de gebruiker "$1" is mislukt: $2',
-       'config-install-user-grant-failed' => 'Het geven van rechten aan gebruiker "$1" is mislukt: $2',
-       'config-install-user-missing' => 'De opgegeven gebruiker "$1" bestaat niet.',
-       'config-install-user-missing-create' => 'De opgegeven gebruiker "$1" bestaat niet.
-Klik op "registreren" onderaan als u de gebruiker wilt aanmaken.',
-       'config-install-tables' => 'Tabellen aanmaken',
-       'config-install-tables-exist' => "'''Waarschuwing''': de MediaWikitabellen lijken al te bestaan.
-Het aanmaken wordt overgeslagen.",
-       'config-install-tables-failed' => "'''Fout''': het aanmaken van een tabel is mislukt met de volgende foutmelding: $1",
-       'config-install-interwiki' => 'Bezig met het vullen van de interwikitabel',
-       'config-install-interwiki-list' => 'Het bestand <code>interwiki.list</code> is niet aangetroffen',
-       'config-install-interwiki-exists' => "'''Waarschuwing''': de interwikitabel heeft al inhoud.
-De standaardlijst wordt overgeslagen.",
-       'config-install-stats' => 'Statistieken initialiseren',
-       'config-install-keys' => 'Bezig met aanmaken van geheime sleutels',
-       'config-insecure-keys' => "'''Waarschuwing:''' De {{PLURAL:$2|sleutel die is aangemaakt|sleutels die zijn aangemaakt}} ($1) tijdens de installatie {{PLURAL:$2|is|zijn}} niet volledig veilig. Overweeg deze handmatig te wijzigen.",
-       'config-install-sysop' => 'Gebruiker voor beheerder aanmaken',
-       'config-install-subscribe-fail' => 'Het is niet mogelijk te abonneren op mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'cURL is niet geïnstalleerd en <code>allow_url_fopen</code> is niet beschikbaar.',
-       'config-install-mainpage' => 'Hoofdpagina aanmaken met standaard inhoud',
-       'config-install-extension-tables' => 'Tabellen voor ingeschakelde uitbreidingen worden aangemaakt',
-       'config-install-mainpage-failed' => 'Het was niet mogelijk de hoofdpagina in te voegen: $1',
-       'config-install-done' => "'''Gefeliciteerd!'''
-U hebt MediaWiki met geïnstalleerd.
-
-Het installatieprogramma heeft het bestand <code>LocalSettings.php</code> aangemaakt.
-Dit bevat al uw instellingen.
-
-U moet het bestand downloaden en in de hoofdmap van uw wiki-installatie plaatsten; in dezelfde map als index.php.
-De download moet u automatisch zijn aangeboden.
-
-Als de download niet is aangeboden of als u de download hebt geannuleerd, dan kunt u de download opnieuw starten door op de onderstaande koppeling te klikken:
-
-$3
-
-'''Let op''': als u dit niet nu doet, dan het is bestand als u later de installatieprocedure afsluit zonder het bestand te downloaden niet meer beschikbaar.
-
-Na het plaatsen van het bestand met instellingen kunt u '''[$2 uw wiki betreden]'''.",
-       'config-download-localsettings' => '<code>LocalSettings.php</code> downloaden',
-       'config-help' => 'hulp',
-       'config-nofile' => 'Het bestand "$1" is niet gevonden. Is het verwijderd?',
-       'config-extension-link' => 'Weet u dat u [//www.mediawiki.org/wiki/Manual:Extensions uitbreidingen] kunt gebruiken voor uw wiki?
-U kunt [//www.mediawiki.org/wiki/Category:Extensions_by_category uitbreidingen op categorie] bekijken of ga naar de [//www.mediawiki.org/wiki/Extension_Matrix Uitbreidingenmatrix] om de volledige lijst met uitbreidingen te bekijken.',
-       'mainpagetext' => "'''De installatie van MediaWiki is geslaagd.'''",
-       'mainpagedocfooter' => 'Raadpleeg de [//meta.wikimedia.org/wiki/NL_Help:Inhoudsopgave handleiding] voor informatie over het gebruik van de wikisoftware.
-
-== Meer hulp over MediaWiki ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lijst met instellingen]
-* [//www.mediawiki.org/wiki/Manual:FAQ Veelgestelde vragen (FAQ)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Maak MediaWiki beschikbaar in uw taal]',
-);
-
-/** Nederlands (informeel)‎ (Nederlands (informeel)‎)
- * @author Siebrand
- */
-$messages['nl-informal'] = array(
-       'config-localsettings-badkey' => 'De sleutel die je hebt opgegeven is onjuist',
-       'config-upgrade-key-missing' => 'Er is een bestaande installatie van MediaWiki aangetroffen.
-Plaats de volgende regel onderaan je <code>LocalSettings.php</code> om deze installatie bij te werken:
-
-$1',
-       'config-session-expired' => 'Je sessiegegevens zijn verlopen.
-Sessies zijn ingesteld om een levensduur van $1 te hebben.
-Je kunt deze wijzigen via de instelling <code>session.gc_maxlifetime</code> in php.ini.
-Begin het installatieproces opnieuw.',
-       'config-no-session' => 'Je sessiegegevens zijn verloren gegaan.
-Controleer je php.ini en zorg dat er een juiste map is ingesteld voor <code>session.save_path</code>.',
-       'config-your-language' => 'Jouw taal:',
-       'config-help-restart' => 'Wil je alle opgeslagen gegevens die je hebt ingevoerd wissen en het installatieproces opnieuw starten?',
-       'config-welcome' => '=== Controle omgeving ===
-Er worden een aantal basiscontroles uitgevoerd met als doel vast te stellen of deze omgeving geschikt is voor een installatie van MediaWiki.
-Als je hulp nodig hebt bij de installatie, lever deze gegevens dan ook aan.',
-       'config-copyright' => "=== Auteursrechten en voorwaarden ===
-
-$1
-
-Dit programma is vrije software. Je mag het verder verspreiden en/of aanpassen in overeenstemming met de voorwaarden van de GNU General Public License zoals uitgegeven door de Free Software Foundation; ofwel versie 2 van de Licentie of - naar eigen keuze - enige latere versie.
-
-Dit programma wordt verspreid in de hoop dat het nuttig is, maar '''zonder enige garantie''', zelfs zonder de impliciete garantie van '''verkoopbaarheid''' of '''geschiktheid voor een bepaald doel'''.
-Zie de GNU General Public License voor meer informatie.
-
-Samen met dit programma hoor je een <doclink href=Copying>exemplaar van de GNU General Public License</doclink> ontvangen te hebben; zo niet, schrijf dan aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Verenigde Staten. Of [http://www.gnu.org/copyleft/gpl.html lees de licentie online].",
-       'config-env-good' => 'De omgeving is gecontroleerd.
-Je kunt MediaWiki installeren.',
-       'config-env-bad' => 'De omgeving is gecontroleerd.
-Je kunt MediaWiki niet installeren.',
-       'config-unicode-pure-php-warning' => "'''Waarschuwing''': de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.
-Als je MediaWiki voor een website met veel verkeer installeert, lees je dan in over [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicodenormalisatie].",
-       'config-unicode-update-warning' => "'''Waarschuwing''': de geïnstalleerde versie van de Unicodenormalisatiewrapper maakt gebruik van een oudere versie van [http://site.icu-project.org/ de bibliotheek van het ICU-project].
-Je moet [//www.mediawiki.org/wiki/Unicode_normalization_considerations bijwerken] als Unicode voor jou van belang is.",
-       'config-no-db' => 'Het was niet mogelijk een geschikte databasedriver te vinden voor PHP.
-Je moet een databasedriver installeren voor PHP.
-De volgende databases worden ondersteund: $1.
-
-Als je op een gedeelde omgeving zit, vraag dan aan je hostingprovider een geschikte databasedriver te installeren.
-Als je PHP zelf hebt gecompileerd, wijzig dan je instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysql</code>.
-Als je PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook de module php5-mysql.',
-       'config-outdated-sqlite' => "''' Waarschuwing:''' je gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.",
-       'config-register-globals' => "'''Waarschuwing: de PHP-optie <code>[http://php.net/register_globals register_globals]</code> is ingeschakeld.'''
-'''Schakel deze uit als dat mogelijk is.'''
-MediaWiki kan ermee werken, maar je server is dan meer kwetsbaar voor beveiligingslekken.",
-       'config-magic-quotes-runtime' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is actief!'''
-Deze instelling zorgt voor gegevenscorruptie.
-Je kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
-       'config-magic-quotes-sybase' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] is actief!'''
-Deze instelling zorgt voor gegevenscorruptie.
-Je kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
-       'config-mbstring' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!'''
-Deze instelling zorgt voor gegevenscorruptie.
-Je kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
-       'config-ze1' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] is actief!'''
-Deze instelling zorgt voor grote problemen in MediaWiki.
-Je kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
-       'config-xml-bad' => 'De XML-module van PHP ontbreekt.
-MediaWiki heeft de functies van deze module nodig en werkt niet zonder deze module.
-Als je gebruik maakt van Mandrake, installeer dan het package php-xml.',
-       'config-mod-security' => "'''Waarschuwing:''' je webserver heeft de module [http://modsecurity.org/ mod_security] ingeschakeld. Als deze onjuist is ingesteld, kan dit problemen geven in combinatie met MediaWiki of andere software die gebruikers in staat stelt willekeurige inhoud te posten.
-Lees de [http://modsecurity.org/documentation/ documentatie over mod_security] of neem contact op met de helpdesk van je provider als je tegen problemen aanloopt.",
-       'config-imagemagick' => 'ImageMagick aangetroffen: <code>$1</code>.
-Het aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als je uploaden inschakelt.',
-       'config-gd' => 'Ingebouwde GD grafische bibliotheek aangetroffen.
-Het aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als je uploaden inschakelt.',
-       'config-uploads-not-safe' => "'''Waarschuwing:''' je uploadmap <code>$1</code> kan gebruikt worden voor het arbitrair uitvoeren van scripts.
-Hoewel MediaWiki alle toegevoegde bestanden controleert op bedreigingen, is het zeer aan te bevelen het [//www.mediawiki.org/wiki/Manual:Security#Upload_security beveiligingslek te verhelpen] alvorens uploads in te schakelen.",
-       'config-no-cli-uploads-check' => "''Waarschuwing:'' je standaardmap voor uploads (<code>$1</code>) wordt niet gecontroleerd op kwetsbaarheden voor het uitvoeren van willekeurige scripts gedurende de CLI-installatie.",
-       'config-brokenlibxml' => 'Je systeem heeft een combinatie van PHP- en libxml2-versies geïnstalleerd die is foutgevoelig is en kan leiden tot onzichtbare beschadiging van gegevens in MediaWiki en andere webapplicaties.
-Upgrade naar PHP 5.2.9 of hoger en libxml2 2.7.3 of hoger([//bugs.php.net/bug.php?id=45996 bij PHP gerapporteerde fout]).
-De installatie wordt afgebroken.',
-       'config-db-host-help' => 'Als je databaseserver een andere server is, voer dan de hostnaam of het IP-adres hier in.
-
-Als je gebruik maakt van gedeelde webhosting, hoort je provider je de juiste hostnaam te hebben verstrekt.
-
-Als je MediaWiki op een Windowsserver installeert en MySQL gebruikt, dan werkt "localhost" mogelijk niet als servernaam.
-Als het inderdaad niet werkt, probeer dan "127.0.0.1" te gebruiken als lokaal IP-adres.
-
-Als je PostgreSQL gebruikt, laat dit veld dan leeg om via een Unix-socket te verbinden.',
-       'config-db-host-oracle-help' => 'Voer een geldige [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] in; een tnsnames.ora-bestand moet zichtbaar zijn voor deze installatie.<br />Als je gebruik maakt van clientlibraries 10g of een latere versie, kan je ook gebruik maken van de naamgevingsmethode [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
-       'config-db-name-help' => 'Kies een naam die je wiki identificeert.
-Er mogen geen spaties gebruikt worden.
-Als je gebruik maakt van gedeelde webhosting, dan hoort je provider ofwel jou een te gebruiken databasenaam gegeven te hebben, of je aangegeven te hebben hoe je databases kunt aanmaken.',
-       'config-db-account-oracle-warn' => 'Er zijn drie ondersteunde scenario\'s voor het installeren van Oracle als databasebackend:
-
-Als je een databasegebruiker wilt aanmaken als onderdeel van het installatieproces, geef dan de gegevens op van een databasegebruiker in met de rol SYSDBA voor de installatie en voer de gewenste aanmeldgegevens in voor de gebruiker met webtoegang. Je kunt ook de gebruiker met webtoegang handmatig aanmaken en alleen van die gebruiker de aanmeldgegevens opgeven als deze de vereiste rechten heeft om schemaobjecten aan te maken. Als laatste is het mogelijk om aanmeldgegevens van twee verschillende gebruikers op te geven; een met de rechten om schemaobjecten aan te maken, en een met alleen webtoegang.
-
-Een script voor het aanmaken van een gebruiker met de vereiste rechten is te vinden in de map "maintenance/oracle/" van deze installatie. Onthoud dat het gebruiken van een gebruiker met beperkte rechten alle mogelijkheden om beheerscripts uit te voeren met de standaard gebruiker onmogelijk maakt.',
-       'config-db-prefix-help' => "Als je een database moet gebruiken voor meerdere wiki's, of voor MediaWiki en een andere applicatie, dan kan je ervoor kiezen om een voorvoegsel toe te voegen aan de tabelnamen om conflicten te voorkomen.
-Gebruik geen spaties.
-
-Dit veld wordt meestal leeg gelaten.",
-       'config-charset-help' => "'''Waarschuwing:''' als je '''achterwaarts compatibel met UTF-8''' gebruikt met MySQL 4.1+ en een back-up van de database maakt met <code>mysqldump</code>, dan kunnen alle niet-ASCII-tekens in je back-ups onherstelbaar beschadigd raken.
-
-In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.
-Dit is efficiënter dan de UTF-8-modus van MySQL en stelt je in staat de volledige reeks Unicode-tekens te gebruiken.
-In '''UTF-8-modus''' kent MySQL de tekenset van je gegevens en kan de databaseserver ze juist weergeven en converteren.
-Het is dan niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
-       'config-mysql-old' => 'Je moet MySQL $1 of later gebruiken.
-Jij gebruikt $2.',
-       'config-db-schema-help' => 'Dit schema klopt meestal.
-Wijzig het alleen als je weet dat dit nodig is.',
-       'config-sqlite-dir-help' => "SQLite slaat alle gegevens op in een enkel bestand.
-
-De map die je opgeeft moet beschrijfbaar zijn voor de webserver tijdens de installatie.
-
-Deze mag '''niet toegankelijk''' zijn via het web en het bestand mag dus niet tussen de PHP-bestanden staan.
-
-Het installatieprogramma schrijft het bestand <code>.htaccess</code> weg met het databasebestand, maar als dat niet werkt kan iemand zich toegang tot het ruwe databasebestand verschaffen.
-Ook de gebruikersgegevens (e-mailadressen, wachtwoordhashes) en verwijderde versies en overige gegevens met beperkte toegang via MediaWiki zijn dan onbeschermd.
-
-Overweeg om de database op een totaal andere plaats neer te zetten, bijvoorbeeld in <code>/var/lib/mediawiki/yourwiki</code>.",
-       'config-support-info' => 'MediaWiki ondersteunt de volgende databasesystemen:
-
-$1
-
-Als je het databasesysteem dat je wilt gebruiken niet in de lijst terugvindt, volg dan de handleiding waarnaar hierboven wordt verwezen om ondersteuning toe te voegen.',
-       'config-missing-db-name' => 'Je moet een waarde opgeven voor "Databasenaam"',
-       'config-missing-db-host' => 'Je moet een waarde invoeren voor "Databaseserver"',
-       'config-missing-db-server-oracle' => 'Je moet een waarde opgeven voor "Database-TNS"',
-       'config-postgres-old' => 'PostgreSQL $1 of hoger is vereist.
-Jij gebruikt $2.',
-       'config-sqlite-name-help' => 'Kies een naam die je wiki identificeert.
-Gebruik geen spaties of koppeltekens.
-Deze naam wordt gebruikt voor het gegevensbestand van SQLite.',
-       'config-upgrade-done' => "Het bijwerken is afgerond.
-
-Je kunt [$1 je wiki nu gebruiken].
-
-Als je je <code>LocalSettings.php</code> opnieuw wilt aanmaken, klik dan op de knop hieronder.
-Dit is '''niet aan te raden''' tenzij je problemen hebt met je wiki.",
-       'config-upgrade-done-no-regenerate' => 'Het bijwerken is afgerond.
-
-Je kunt nu [$1 je wiki gebruiken].',
-       'config-db-web-no-create-privs' => 'De gebruiker die je hebt opgegeven voor de installatie heeft niet voldoende rechten om een gebruiker aan te maken.
-De gebruiker die je hier opgeeft moet al bestaan.',
-       'config-mysql-myisam-dep' => "'''Waarschuwing''': je hebt MyISAM geselecteerd als opslagengine voor MySQL. Dit is niet aan te raden voor MediaWiki omdat:
-* het nauwelijks ondersteuning biedt voor gebruik door meerdere gebruikers tegelijkertijd door het locken van tabellen;
-* het meer vatbaar is voor corruptie dan andere engines;
-* de code van MediaWiki niet alstijd omgaat met MyISAM zoals dat zou moeten.
-
-Als je installatie van MySQL InnoDB ondersteunt, gebruik dat dan vooral.
-Als je installatie van MySQL geen ondersteuning heeft voor InnoDB, denk dan na over upgraden.",
-       'config-mysql-charset-help' => "In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.
-Dit is efficiënter dan de UTF-8-modus van MySQL en stelt je in staat de volledige reeks Unicodetekens te gebruiken.
-
-In '''UTF-8-modus''' kent MySQL de tekenset van je gegevens en kan de databaseserver ze juist weergeven en converteren.
-Het is dat niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
-       'config-project-namespace-help' => "In het kielzog van Wikipedia beheren veel wiki's hun beleidspagina's apart van hun inhoudelijke pagina's in een \"'''projectnaamruimte'''\".
-Alle paginanamen in deze naamruimte beginnen met een bepaald voorvoegsel dat je hier kunt opgeven.
-Dit voorvoegsel wordt meestal afgeleid van de naam van de wiki, maar het kan geen bijzondere tekens bevatten als \"#\" of \":\".",
-       'config-admin-name' => 'Je naam:',
-       'config-admin-password-mismatch' => 'De twee door jou ingevoerde wachtwoorden komen niet overeen.',
-       'config-admin-email-help' => "Voer hier een e-mailadres in om e-mail te kunnen ontvangen van andere gebruikers op de wiki, je wachtwoord opnieuw in te kunnen stellen en op de hoogte te worden gehouden van wijzigingen van pagina's op uw volglijst. Je kunt het veld leeg laten.",
-       'config-admin-error-bademail' => 'Je hebt een ongeldig e-mailadres opgegeven',
-       'config-subscribe-help' => 'Dit is een mailinglijst met een laag volume voor aankondigingen van nieuwe versies, inclusief belangrijke aankondigingen met betrekking tot beveiliging.
-Abonneer jezelf erop en werk je MediaWiki-installatie bij als er nieuwe versies uitkomen.',
-       'config-subscribe-noemail' => 'Je hebt geprobeerd je te abonneren op de mailinglijst voor release-aankondigingen zonder een e-mailadres op te geven.
-Geef een e-mailadres op als je je wilt abonneren op de mailinglijst.',
-       'config-almost-done' => 'Je bent bijna klaar!
-Als je wilt kan je de overige instellingen overslaan en de wiki nu installeren.',
-       'config-profile-help' => "Wiki's werken het beste als ze door zoveel mogelijk gebruikers worden bewerkt.
-In MediaWiki is het eenvoudig om de recente wijzigingen te controleren en eventuele foutieve of kwaadwillende bewerkingen terug te draaien.
-
-Daarnaast vinden velen MediaWiki goed inzetbaar in vele andere rollen, en soms is het niet handig om helemaal \"op de wikimanier\" te werken.
-Daarom biedt dit installatieprogramma je de volgende keuzes voor de basisinstelling van gebruikersvrijheden:
-
-Een '''{{int:config-profile-wiki}}''' staat iedereen toe te bewerken, zonder zelfs aan te melden.
-Een wiki met '''{{int:config-profile-no-anon}}\" biedt extra verantwoordelijkheid, maar kan afschrikken toevallige gebruikers afschrikken.
-
-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].", # Fuzzy
-       'config-license-help' => "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [http://freedomdefined.org/Definition vrije licentie].
-Dit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.
-Dit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.
-
-Als je teksten uit Wikipedia wilt kunnen gebruiken en je wilt het mogelijk maken teksten uit je wiki naar Wikipedia te kopiëren, kies dan de licentie '''Creative Commons Naamsvermelding-Gelijk delen'''.
-
-De GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.
-Dit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.
-Het is ook lastig inhoud te hergebruiken onder de GFDL.",
-       'config-enable-email-help' => 'Als je wilt dat e-mailen mogelijk is, dan moeten de [http://www.php.net/manual/en/mail.configuration.php e-mailinstellingen van PHP] correct zijn.
-Als je niet wilt dat e-mailen mogelijk is, dan kan je de instellingen hier uitschakelen.',
-       'config-upload-help' => "Het toestaan van het uploaden van bestanden stelt je server mogelijk bloot aan beveiligingsrisico's.
-Er is meer [//www.mediawiki.org/wiki/Manual:Security informatie over beveiliging] beschikbaar in de handleiding.
-
-Om het bestandsuploads mogelijk te maken kan je de rechten op de submap <code>images</code> onder de hoofdmap van MediaWiki aanpassen, zodat de webserver erin kan schrijven.
-Daarmee wordt deze functie ingeschakeld.",
-       'config-logo-help' => 'Het standaarduiterlijk van MediaWiki bevat ruimte voor een logo van 135x160 pixels boven het menu.
-Upload een afbeelding met de juiste afmetingen en voer de URL hier in.
-
-Als je geen logo wilt gebruiken, kan je dit veld leeg laten.', # Fuzzy
-       'config-cc-not-chosen' => 'Kies de Creative Commonslicentie die je wilt gebruiken en klik op "doorgaan".',
-       'config-memcache-needservers' => 'Je hebt Memcached geselecteerd als je cache, maar je hebt geen servers opgegeven.',
-       'config-memcache-badip' => 'Je hebt een ongeldig IP-adres ingevoerd voor Memcached: $1.',
-       'config-memcache-noport' => 'Je hebt geen poort opgegeven voor de Memcachedserver: $1.
-De standaardpoort is 11211.',
-       'config-extensions-help' => 'De bovenstaande uitbreidingen zijn aangetroffen in de map <code>./extensions</code>.
-
-Mogelijk moet je aanvullende instellingen maken, maar je kunt deze uitbreidingen nu inschakelen.',
-       'config-install-alreadydone' => "'''Waarschuwing:''' het lijkt alsof je MediaWiki al hebt geïnstalleerd en probeert het programma opnieuw te installeren.
-Ga door naar de volgende pagina.",
-       'config-install-begin' => 'Als je nu op "{{int:config-continue}}" klikt, begint de installatie van MediaWiki.
-Als je nog wijzigingen wilt maken, klik dan op "Terug".', # Fuzzy
-       'config-pg-no-plpgsql' => 'Je moet de taal PL/pgSQL installeren in de database $1',
-       'config-pg-no-create-privs' => 'De gebruiker die je hebt opgegeven door de installatie heeft niet voldoende rechten om een gebruiker aan te maken.',
-       'config-pg-not-in-role' => 'De gebruiker die je hebt opgegeven voor de webgebruiker bestaat al.
-De gebruiker die je hebt opgegeven voor installatie is geen superuser en geen lid van de rol van de webgebruiker, en kan het dus geen objecten aanmaken die van de webgebruiker zijn.
-
-MediaWiki vereist momenteel dat de tabellen van de webgebruiker zijn. Geef een andere webgebruikersnaam op, of klik op "terug" en geef een gebruiker op die voldoende installatierechten heeft.',
-       'config-install-user-missing-create' => 'De opgegeven gebruiker "$1" bestaat niet.
-Klik op "registreren" onderaan als je de gebruiker wilt aanmaken.',
-       'config-install-done' => "'''Gefeliciteerd!'''
-Je hebt MediaWiki met geïnstalleerd.
-
-Het installatieprogramma heeft het bestand <code>LocalSettings.php</code> aangemaakt.
-Dit bevat al je instellingen.
-
-Je moet het bestand downloaden en in de hoofdmap van uw wikiinstallatie plaatsten; in dezelfde map als index.php.
-De download moet je automatisch zijn aangeboden.
-
-Als de download niet is aangeboden of als je de download hebt geannuleerd, dan kan je de download opnieuw starten door op de onderstaande koppeling te klikken:
-
-$3
-
-'''Let op''': als je dit niet nu doet, dan het is bestand als u later de installatieprocedure afsluit zonder het bestand te downloaden niet meer beschikbaar.
-
-Na het plaatsen van het bestand met instellingen kan je '''[$2 je wiki betreden]'''.",
-       'mainpagedocfooter' => 'Raadpleeg de [//meta.wikimedia.org/wiki/NL_Help:Inhoudsopgave handleiding] voor informatie over het gebruik van de wikisoftware.
-
-== Meer hulp over MediaWiki ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lijst met instellingen]
-* [//www.mediawiki.org/wiki/Manual:FAQ Veelgestelde vragen (FAQ)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Maak MediaWiki beschikbaar in jouw taal]',
-);
-
-/** Norwegian Nynorsk (norsk nynorsk)
- * @author Harald Khan
- * @author Nghtwlkr
- */
-$messages['nn'] = array(
-       'config-your-language' => 'Språket ditt:',
-       'config-wiki-language' => 'Wikispråk:',
-       'config-back' => '← Attende',
-       'config-continue' => 'Hald fram →',
-       'config-page-language' => 'Språk',
-       'config-memory-raised' => 'PHPs <code>memory_limit</code> er $1, auka til $2.',
-       'config-memory-bad' => "'''Advarsel:''' PHPs <code>memory_limit</code> er $1.
-Dette er sannsynlegvis for lågt.
-Installasjonen kan mislukkast!",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] er innstallert',
-       'config-apc' => '[http://www.php.net/apc APC] er innstallert',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] er installert',
-       'config-db-name' => 'Databasenamn:',
-       'config-db-username' => 'Databasebrukarnamn:',
-       'config-db-password' => 'Databasepassord:',
-       'config-db-charset' => 'Databaseteiknsett',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binær',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 bakoverkompatibel UTF-8',
-       'config-mysql-old' => 'MySQL $1 eller seinare krevst, du har $2.',
-       'config-db-port' => 'Databaseport:',
-       'config-db-schema' => 'Skjema for MediaWiki',
-       'config-header-mysql' => 'MySQL-innstillingar',
-       'config-header-postgres' => 'PostgreSQL-innstillingar',
-       'config-header-sqlite' => 'SQLite-innstillingar',
-       'config-header-oracle' => 'Oracle-innstillingar',
-       'config-invalid-db-type' => 'Ugyldig databasetype',
-       'config-invalid-db-name' => 'Ugyldig databasenamn «$1».
-Berre bruk ASCII-bokstavar (a-z, A-Z), tal (0-9) og undestrekar (_).', # Fuzzy
-       'config-invalid-db-prefix' => 'Ugyldig databaseprefiks «$1».
-Berre bruk ASCII-bokstavar (a-z, A-Z), tal (0-9) og undestrekar (_).', # Fuzzy
-       'config-invalid-schema' => 'Ugyldig skjema for MediaWiki «$1».
-Berre bruk ASCII-bokstavar (a-z, A-Z), tal (0-9) og undestrekar (_).',
-       'config-postgres-old' => 'PostgreSQL $1 eller seinare krevst, du har $2.',
-       'config-email-settings' => 'E-postinnstillingar',
-       'config-logo' => 'Logo-URL:',
-       'mainpagetext' => "'''MediaWiki er no installert.'''",
-       'mainpagedocfooter' => 'Sjå [//meta.wikimedia.org/wiki/Help:Contents brukarmanualen] for informasjon om bruk og oppsettshjelp for wikiprogramvara.
-
-==Kome i gang==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste over oppsettsinnstillingar]
-* [//www.mediawiki.org/wiki/Manual:FAQ Spørsmål og svar om MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-postliste med informasjon om nye MediaWiki-versjonar]', # Fuzzy
-);
-
-/** Norwegian (bokmål)‬ (‪norsk (bokmål)‬) */
-$messages['no'] = array(
-       'mainpagetext' => "'''MediaWiki-programvaren er nå installert.'''",
-);
-
-/** Occitan (occitan)
- * @author Cedric31
- */
-$messages['oc'] = array(
-       'config-desc' => 'Lo programa d’installacion de MediaWiki',
-       'config-title' => 'Installacion de MediaWiki $1',
-       'config-information' => 'Informacions',
-       'config-localsettings-key' => 'Clau de mesa a jorn :',
-       'config-localsettings-badkey' => "La clau qu'avètz provesida es incorrècta",
-       'config-session-error' => "Error al moment de l'aviada de la sesilha : $1",
-       'config-your-language' => 'Vòstra lenga :',
-       'config-wiki-language' => 'Lenga del wiki :',
-       'config-back' => '← Retorn',
-       'config-continue' => 'Contunhar →',
-       'config-page-language' => 'Lenga',
-       'config-page-welcome' => 'Benvenguda sus MediaWiki !',
-       'config-page-dbconnect' => 'Se connectar a la banca de donadas',
-       'config-page-dbsettings' => 'Paramètres de la banca de donadas',
-       'config-page-name' => 'Nom',
-       'config-page-options' => 'Opcions',
-       'config-page-install' => 'Installar',
-       'config-page-complete' => 'Acabat !',
-       'config-page-restart' => 'Reaviar l’installacion',
-       'config-page-readme' => 'Legissètz-me',
-       'config-page-releasenotes' => 'Nòtas de version',
-       'config-page-copying' => 'Còpia',
-       'config-page-upgradedoc' => 'Mesa a jorn',
-       'config-page-existingwiki' => 'Wiki existent',
-       'config-restart' => 'Òc, lo reaviar',
-       'config-env-php' => 'PHP $1 es installat.',
-       'config-db-host-oracle' => 'Nom TNS de la banca de donadas :',
-       'config-db-wiki-settings' => 'Identificar aqueste wiki',
-       'config-db-name' => 'Nom de la banca de donadas :',
-       'config-db-name-oracle' => 'Esquèma de banca de donadas :',
-       'config-db-install-account' => "Compte d'utilizaire per l'installacion",
-       'config-db-username' => "Nom d'utilizaire de la banca de donadas :",
-       'config-db-password' => 'Senhal de la banca de donadas :',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binari',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 retrocompatible UTF-8',
-       'config-db-port' => 'Pòrt de la banca de donadas :',
-       'config-db-schema' => 'Esquèma per MediaWiki',
-       'config-header-mysql' => 'Paramètres de MySQL',
-       'config-header-postgres' => 'Paramètres de PostgreSQL',
-       'config-header-sqlite' => 'Paramètres de SQLite',
-       'config-header-oracle' => 'Paramètres d’Oracle',
-       'config-mysql-engine' => "Motor d'emmagazinatge :",
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-binary' => 'Binari',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Nom del wiki :',
-       'config-ns-generic' => 'Projècte',
-       'config-ns-other-default' => 'MonWiki',
-       'config-admin-name' => 'Vòstre nom :',
-       'config-admin-password' => 'Senhal :',
-       'mainpagetext' => "'''MediaWiki es estat installat amb succès.'''",
-       'mainpagedocfooter' => "Consultatz lo [//meta.wikimedia.org/wiki/Ajuda:Contengut Guida de l'utilizaire] per mai d'entresenhas sus l'utilizacion d'aqueste logicial.
-
-== Començar amb MediaWiki ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista dels paramètres de configuracion]
-* [//www.mediawiki.org/wiki/Manual:FAQ/fr FAQ MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussions de las parucions de MediaWiki]", # Fuzzy
-);
-
-/** Oriya (ଓଡ଼ିଆ)
- * @author Jnanaranjan Sahu
- */
-$messages['or'] = array(
-       'config-back' => '← ପଛକୁ',
-       'config-continue' => 'ଚାଲୁରଖିବେ →',
-       'config-page-language' => 'ଭାଷା',
-       'config-page-welcome' => 'ମେଡିଆଉଇକିକୁ ଆପଣଙ୍କୁ ସ୍ଵାଗତ',
-       'config-page-name' => 'ନାମ',
-       'config-page-options' => 'ପସନ୍ଦସମୂହ',
-);
-
-/** Ossetic (Ирон)
- * @author Amikeco
- */
-$messages['os'] = array(
-       'config-page-language' => 'Æвзаг',
-       'mainpagetext' => "'''Вики-скрипт «MediaWiki» æнтыстджынæй æвæрд æрцыд.'''",
-);
-
-/** Punjabi (ਪੰਜਾਬੀ)
- */
-$messages['pa'] = array(
-       'mainpagetext' => "'''ਮੀਡਿਆਵਿਕਿ ਠੀਕ ਤਰ੍ਹਾਂ ਇੰਸਟਾਲ ਹੋ ਗਿਆ ਹੈ।'''",
-);
-
-/** Pampanga (Kapampangan)
- */
-$messages['pam'] = array(
-       'mainpagetext' => "'''Melaus ing pamipalyari ning MediaWiki.'''",
-       'mainpagedocfooter' => "Basan me ing [//meta.wikimedia.org/wiki/Help:Contents User's Guide] para king impormasiun keng pamangamit ning wiki software.
-
-== Pamagumpisa ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Picard (Picard)
- */
-$messages['pcd'] = array(
-       'mainpagetext' => "'''MediaWiki o té instalé aveuc victoère.'''",
-);
-
-/** Deitsch (Deitsch)
- * @author Xqt
- */
-$messages['pdc'] = array(
-       'config-continue' => 'Weider →',
-       'config-page-language' => 'Schprooch',
-       'config-admin-password' => 'Paesswatt:',
-       'config-install-step-done' => 'geduh',
-       'config-help' => 'Hilf',
-       'mainpagedocfooter' => "Hilf fer's Yuuse unn Konfiguriere vun de Wiki-Software kansch finne im [//meta.wikimedia.org/wiki/Help:Contents Handbuch fer Yuuser].
-
-== Hilf zum Schtaerte ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lischt vun Gnepp zum Konfiguriere]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Eposchde-Lischt fer neie MediaWiki-Versione]", # Fuzzy
-);
-
-/** Polish (polski)
- * @author Beau
- * @author BeginaFelicysym
- * @author Chrumps
- * @author Holek
- * @author Matma Rex
- * @author Michał Roszka
- * @author Saper
- * @author Sp5uhe
- * @author Woytecr
- * @author 아라
- */
-$messages['pl'] = array(
-       'config-desc' => 'Instalator MediaWiki',
-       'config-title' => 'Instalacja MediaWiki $1',
-       'config-information' => 'Informacja',
-       'config-localsettings-upgrade' => 'Plik <code>LocalSettings.php</code> istnieje.
-Aby oprogramowanie zostało zaktualizowane musisz wstawić wartość <code>$wgUpgradeKey</code> w poniższe pole.
-Odnajdziesz ją w <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Wykryto obecność pliku <code>LocalSettings.php</code>.
-Aktualizację należy wykonać poprzez uruchomienie <code>update.php</code>',
-       'config-localsettings-key' => 'Klucz aktualizacji',
-       'config-localsettings-badkey' => 'Podany klucz jest nieprawidłowy',
-       'config-upgrade-key-missing' => 'Wykryto zainstalowane wcześniej MediaWiki.
-Jeśli chcesz je zaktualizować dodaj na koniec pliku <code>LocalSettings.php</code> poniższą linię tekstu.
-
-$1',
-       'config-localsettings-incomplete' => 'Istniejący plik <code>LocalSettings.php</code> wygląda na niekompletny.
-Brak wartości zmiennej $1.
-Zmień plik <code>LocalSettings.php</code>, tak by zawierał deklarację wartości tej zmiennej, a następnie kliknij „{{int:Config-continue}}”.',
-       'config-localsettings-connection-error' => 'Wystąpił błąd podczas łączenia z bazą danych z wykorzystaniem danych z <code>LocalSettings.php</code> lub <code>AdminSettings.php</code>.
-Popraw ustawienia i spróbuj ponownie.
-
-$1',
-       'config-session-error' => 'Błąd uruchomienia sesji – $1',
-       'config-session-expired' => 'Wygląda na to, że Twoja sesja wygasła.
-Czas życia sesji został skonfigurowany na $1.
-Możesz go wydłużyć zmieniając <code>session.gc_maxlifetime</code> w pliku php.ini.
-Uruchom ponownie proces instalacji.',
-       'config-no-session' => 'Dane sesji zostały utracone.
-Sprawdź plik php.ini i upewnij się, że <code>session.save_path</code> wskazuje na odpowiedni katalog.',
-       'config-your-language' => 'Język',
-       'config-your-language-help' => 'Wybierz język używany podczas procesu instalacji.',
-       'config-wiki-language' => 'Język wiki',
-       'config-wiki-language-help' => 'Wybierz język, w którym będzie tworzona większość treści wiki',
-       'config-back' => '← Wstecz',
-       'config-continue' => 'Dalej →',
-       'config-page-language' => 'Język',
-       'config-page-welcome' => 'Witamy w MediaWiki!',
-       'config-page-dbconnect' => 'Połączenie z bazą danych',
-       'config-page-upgrade' => 'Uaktualnienie istniejącej instalacji',
-       'config-page-dbsettings' => 'Ustawienia bazy danych',
-       'config-page-name' => 'Nazwa',
-       'config-page-options' => 'Opcje',
-       'config-page-install' => 'Instaluj',
-       'config-page-complete' => 'Zakończono!',
-       'config-page-restart' => 'Rozpoczęcie instalacji od nowa',
-       'config-page-readme' => 'Podstawowe informacje',
-       'config-page-releasenotes' => 'Informacje o wersji',
-       'config-page-copying' => 'Kopiowanie',
-       'config-page-upgradedoc' => 'Uaktualnienie',
-       'config-page-existingwiki' => 'Istniejąca wiki',
-       'config-help-restart' => 'Czy chcesz usunąć wszystkie zapisane dane i uruchomić ponownie proces instalacji?',
-       'config-restart' => 'Tak, zacznij od nowa',
-       'config-welcome' => '=== Sprawdzenie środowiska instalacji ===
-Teraz zostaną wykonane podstawowe testy sprawdzające czy to środowisko jest odpowiednie dla instalacji MediaWiki.
-Jeśli potrzebujesz pomocy podczas instalacji, załącz wyniki tych testów.',
-       'config-copyright' => "=== Prawa autorskie i warunki użytkowania ===
-
-$1
-
-To oprogramowanie jest wolne; możesz je rozprowadzać dalej i modyfikować zgodnie z warunkami licencji GNU General Public License opublikowanej przez Free Software Foundation w wersji 2 tej licencji lub (według Twojego wyboru) którejś z późniejszych jej wersji.
-
-Niniejsze oprogramowanie jest rozpowszechniane w nadziei, że będzie użyteczne, ale '''bez żadnej gwarancji'''; nawet bez domniemanej gwarancji '''handlowej''' lub '''przydatności do określonego celu'''.
-Zobacz treść licencji GNU General Public License, aby uzyskać więcej szczegółów.
-
-Razem z oprogramowaniem powinieneś otrzymać <doclink href=Copying>kopię licencji GNU General Public License</doclink>. Jeśli jej nie otrzymałeś, napisz do Free Software Foundation, Inc, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. lub [http://www.gnu.org/copyleft/gpl.html przeczytaj ją online].",
-       'config-sidebar' => '* [//www.mediawiki.org Strona domowa MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents Podręcznik użytkownika]
-* [//www.mediawiki.org/wiki/Manual:Contents Podręcznik administratora]
-* [//www.mediawiki.org/wiki/Manual:FAQ Odpowiedzi na często zadawane pytania]
-----
-* <doclink href=Readme>Przeczytaj to</doclink>
-* <doclink href=ReleaseNotes>Informacje o tej wersji</doclink>
-* <doclink href=Copying>Kopiowanie</doclink>
-* <doclink href=UpgradeDoc>Aktualizacja</doclink>',
-       'config-env-good' => 'Środowisko oprogramowania zostało sprawdzone.
-Możesz teraz zainstalować MediaWiki.',
-       'config-env-bad' => 'Środowisko oprogramowania zostało sprawdzone.
-Nie możesz zainstalować MediaWiki.',
-       'config-env-php' => 'Zainstalowane jest PHP w wersji $1.',
-       'config-env-php-toolow' => 'Zainstalowane jest PHP $1.
-Jednak MediaWiki wymaga PHP $2 lub nowszego.',
-       'config-unicode-using-utf8' => 'Korzystanie z normalizacji Unicode utf8_normalize.so napisanej przez Brion Vibbera.',
-       'config-unicode-using-intl' => 'Korzystanie z [http://pecl.php.net/intl rozszerzenia intl PECL] do normalizacji Unicode.',
-       'config-unicode-pure-php-warning' => "'''Uwaga!''' [http://pecl.php.net/intl Rozszerzenie intl PECL] do obsługi normalizacji Unicode nie jest dostępne. Użyta zostanie mało wydajna zwykła implementacja w PHP.
-Jeśli prowadzisz stronę o dużym natężeniu ruchu, powinieneś zapoznać się z informacjami o [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalizacji Unicode].",
-       'config-unicode-update-warning' => "'''Uwaga''' – zainstalowana wersja normalizacji Unicode korzysta z nieaktualnej biblioteki [http://site.icu-project.org/ projektu ICU].
-Powinieneś [//www.mediawiki.org/wiki/Unicode_normalization_considerations zrobić aktualizację] jeśli chcesz korzystać w pełni z Unicode.",
-       'config-no-db' => 'Nie można odnaleźć właściwego sterownika bazy danych! Musisz zainstalować sterownik bazy danych dla PHP.
-Można użyć następujących typów baz danych: $1.
-
-Jeżeli korzystasz ze współdzielonego hostingu, zwróć się do administratora o zainstalowanie odpowiedniego sterownika bazy danych.
-Jeśli skompilowałeś PHP samodzielnie, skonfiguruj je ponownie z włączonym klientem bazy danych, na przykład za pomocą polecenia <code>./configure --with-mysql</code>.
-Jeśli zainstalowałeś PHP jako pakiet Debiana lub Ubuntu, musisz również zainstalować moduł php5-mysql.',
-       'config-outdated-sqlite' => "'''Ostrzeżenie''': masz SQLite  $1, która jest niższa od minimalnej wymaganej wersji  $2 . SQLite będzie niedostępne.",
-       'config-no-fts3' => "'''Uwaga''' – SQLite został skompilowany bez [//sqlite.org/fts3.html modułu FTS3] – funkcje wyszukiwania nie będą dostępne.",
-       'config-register-globals' => "'''Uwaga –  w konfiguracji PHP włączona jest opcja <code>[http://php.net/register_globals register_globals]</code>.'''
-'''Jeśli możesz, wyłącz ją.'''
-MediaWiki będzie działać, ale Twój serwer może być narażony potencjalnymi lukami w zabezpieczeniach.",
-       'config-magic-quotes-runtime' => "'''Błąd krytyczny – włączono [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!'''
-Ta opcja powoduje nieprzewidywalne uszkodzenia wprowadzanych danych.
-Zainstalować lub korzystać z MediaWiki można pod warunkiem, że ta opcja jest wyłączona.",
-       'config-magic-quotes-sybase' => "'''Błąd krytyczny – włączono [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''
-Ta opcja powoduje nieprzewidywalne uszkodzenia wprowadzanych danych.
-Zainstalować lub korzystać z MediaWiki można pod warunkiem, że ta opcja jest wyłączona.",
-       'config-mbstring' => "'''Błąd krytyczny – włączono [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''
-Ta opcja powoduje błędy i może wywołać nieprzewidywalne uszkodzenia wprowadzanych danych.
-Zainstalować lub korzystać z MediaWiki można pod warunkiem, że ta opcja jest wyłączona.",
-       'config-ze1' => "'''Błąd krytyczny – włączono [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]!'''
-Ta opcja powoduje okropne błędy podczas korzystania z MediaWiki.
-Zainstalować lub korzystać z MediaWiki można wyłącznie wtedy, gdy ta opcja jest wyłączona.",
-       'config-safe-mode' => "'''Ostrzeżenie''' – uaktywniono [http://www.php.net/features.safe-mode tryb awaryjny] PHP.
-Opcja ta może powodować problemy, szczególnie w przypadku korzystania z przesyłania plików i używania znacznika <code>math</code>.",
-       'config-xml-bad' => 'Brak modułu XML dla PHP.
-MediaWiki wymaga funkcji z tego modułu i nie może działać w tej konfiguracji.
-Jeśli korzystasz z Mandrake, zainstaluj pakiet php-xml.',
-       'config-pcre' => 'Wygląda na to, że brak modułu PCRE.
-MediaWiki do pracy wymaga funkcji obsługi wyrażeń regularnych kompatybilnej z Perlem.',
-       'config-pcre-no-utf8' => "'''Błąd krytyczny''' – wydaje się, że moduł PCRE w PHP został skompilowany bez wsparcia dla UTF‐8.
-MediaWiki wymaga wsparcia dla UTF‐8 do prawidłowego działania.",
-       'config-memory-raised' => 'PHP <code>memory_limit</code> było ustawione na $1, zostanie zwiększone do $2.',
-       'config-memory-bad' => "'''Uwaga:''' PHP <code>memory_limit</code> jest ustawione na $1.
-To jest prawdopodobnie zbyt mało.
-Instalacja może się nie udać!",
-       'config-ctype' => "''' Krytyczny ''': PHP musi być skompilowany z obsługą [http://www.php.net/manual/en/ctype.installation.php rozszerzenia Ctype].",
-       'config-xcache' => '[Http://trac.lighttpd.net/xcache/ XCache] jest zainstalowany',
-       'config-apc' => '[Http://www.php.net/apc APC] jest zainstalowany',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] jest zainstalowany',
-       'config-no-cache' => "'''Uwaga:''' Pamięć podręczna dla kodu MediaWiki nie będzie uruchomiona., gdyż nie ma żadnego z następujących narzędzi: [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] lub [http://www.iis.net/download/WinCacheForPhp WinCache].",
-       'config-mod-security' => "''' Ostrzeżenie ''': Serwer sieci web ma włączone [http://modsecurity.org/ mod_security]. Jeśli niepoprawnie skonfigurowane, może być przyczyną problemów MediaWiki lub innego oprogramowania, które pozwala użytkownikom na wysyłanie dowolnej zawartości.
-Sprawdź w [http://modsecurity.org/documentation/ dokumentacji mod_security] lub skontaktuj się z obsługa hosta, jeśli wystąpią losowe błędy.",
-       'config-diff3-bad' => 'Nie znaleziono GNU diff3.',
-       'config-git' => 'Znaleziono oprogramowanie kontroli wersji Git: <code>$1</code>.',
-       'config-git-bad' => 'Oprogramowanie systemu kontroli wersji Git nie zostało znalezione.',
-       'config-imagemagick' => 'Mamy zainstalowany ImageMagick <code>$1</code>, dzięki czemu będzie można pomniejszać załadowane grafiki.',
-       'config-gd' => 'Mamy wbudowaną bibliotekę graficzną GD, dzięki czemu będzie można pomniejszać załadowane grafiki.',
-       'config-no-scaling' => 'Nie można odnaleźć biblioteki GD lub ImageMagick. Nie będzie działać pomniejszanie załadowane grafiki.',
-       'config-no-uri' => "'''Błąd.''' Nie można określić aktualnego URI.
-Instalacja została przerwana.",
-       'config-no-cli-uri' => "''' Ostrzeżenie ''': nie wskazano --scriptpath,  użycie wartości domyślnej: <code>$1</code> .",
-       'config-using-server' => '„<nowiki>$1</nowiki>“ jest adresem serwera, na którym instalowana jest wiki.',
-       'config-using-uri' => 'Wiki będzie zainstalowana pod adresem "<nowiki>$1$2</nowiki>".',
-       'config-uploads-not-safe' => "'''Uwaga''' – domyślny katalog do którego zapisywane są przesyłane pliki <code>$1</code> jest podatny na wykonanie dowolnego skryptu.
-Chociaż MediaWiki sprawdza wszystkie przesłane pliki pod kątem bezpieczeństwa, zaleca się jednak, aby [//www.mediawiki.org/wiki/Manual:Security#Upload_security zamknąć tę lukę w zabezpieczeniach] przed włączeniem przesyłania plików.",
-       'config-no-cli-uploads-check' => "'''Ostrzeżenie:''' Katalog domyślny przesyłanych plików ( <code>$1</code> ) nie jest sprawdzona względem luki
- wykonania dowolnego skryptu podczas instalacji CLI w zabezpieczeniach.",
-       'config-brokenlibxml' => 'Twój system jest kombinacją wersji PHP i libxml2, które zawierają błędy mogące powodować ukryte uszkodzenia danych w MediaWiki i innych aplikacjach sieci web.
-Wykonaj aktualizację PHP do wersji 5.2.9 lub późniejszej oraz libxml2 do wersji 2.7.3 lub późniejszej ([//bugs.php.net/bug.php?id=45996 błąd w PHP]).
-Instalacja została przerwana.',
-       'config-using531' => 'MediaWiki nie może być używane z PHP $1 z powodu błędu dotyczącego referencyjnych argumentów funkcji <code>__call()</code>.
-Uaktualnij do PHP 5.3.2 lub nowszego. Możesz również cofnąć wersję do PHP 5.3.0, aby naprawić ten błąd.
-Instalacja została przerwana.',
-       'config-suhosin-max-value-length' => 'Jest zainstalowany Suhosin i ogranicza długość parametru GET <code>length</code> do $1 bajtów. Komponent ResourceLoader w MediaWiki wykona obejście tego ograniczenia, ale kosztem wydajności.
-Jeśli to możliwe, należy ustawić <code>suhosin.get.max_value_length</code> na 1024 lub wyżej w <code>php.ini</code> oraz ustawić <code>$wgResourceLoaderMaxQueryLength</code> w <code>LocalSettings.php</code> na tę samą wartość.',
-       'config-db-type' => 'Typ bazy danych',
-       'config-db-host' => 'Adres serwera bazy danych',
-       'config-db-host-help' => 'Jeśli serwer bazy danych jest na innej maszynie, wprowadź jej nazwę domenową lub adres IP.
-
-Jeśli korzystasz ze współdzielonego hostingu, operator serwera powinien podać Ci prawidłową nazwę serwera w swojej dokumentacji.
-
-Jeśli instalujesz oprogramowanie na serwerze Windowsowym i korzystasz z MySQL, użycie „localhost” może nie zadziałać jako nazwa hosta. Jeśli wystąpi ten problem użyj „127.0.0.1” jako lokalnego adresu IP.
-
-Jeżeli korzystasz z PostgreSQL, pozostaw to pole puste, aby połączyć się poprzez gniazdo Unix‐a.',
-       'config-db-host-oracle' => 'Nazwa instancji bazy danych (TNS):',
-       'config-db-host-oracle-help' => 'Wprowadź prawidłową [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nazwę połączenia lokalnego]. Plik „tnsnames.ora” musi być widoczny dla instalatora.<br />Jeśli używasz biblioteki klienckiej 10g lub nowszej możesz również skorzystać z metody nazw [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm łatwego łączenia].',
-       'config-db-wiki-settings' => 'Zidentyfikuj tę wiki',
-       'config-db-name' => 'Nazwa bazy danych',
-       'config-db-name-help' => 'Wybierz nazwę, która zidentyfikuje Twoją wiki.
-Nie może ona zawierać spacji.
-
-Jeśli korzystasz ze współdzielonego hostingu, dostawca usługi hostingowej może wymagać użycia konkretnej nazwy bazy danych lub pozwalać na tworzenie baz danych za pośrednictwem panelu użytkownika.',
-       'config-db-name-oracle' => 'Nazwa schematu bazy danych:',
-       'config-db-account-oracle-warn' => 'Bazę danych Oracle można przygotować do pracy z MediaWiki na trzy sposoby:
-
-Możesz utworzyć konto użytkownika bazy danych podczas instalacji MediaWiki. Wówczas należy podać nazwę i hasło użytkownika z rolą SYSDBA w celu użycia go przez instalator do utworzenia nowe konta użytkownika, z którego korzystać będzie MediaWiki.
-
-Możesz również skorzystać z konta użytkownika bazy danych utworzonego bezpośrednio w Oracle i wówczas wystarczy podać tylko nazwę i hasło tego użytkownika. Konto z rolą SYSDBA nie będzie potrzebne, jednak konto użytkownika powinno mieć uprawnienia do utworzenia obiektów w schemacie bazy danych. Możesz też podać dwa konta - konto dla instalatora, z pomocą którego zostaną obiekty w schemacie bazy danych i drugie konto, z którego będzie MediaWiki korzystać będzie do pracy. 
-
-W podkatalogu "maintenance/oracle" znajduje się skrypt do tworzenia konta użytkownika. Korzystanie z konta użytkownika z ograniczonymi uprawnieniami spowoduje wyłączenie funkcji związanych z aktualizacją oprogramowania MediaWiki.',
-       'config-db-install-account' => 'Konto użytkownika dla instalatora',
-       'config-db-username' => 'Nazwa użytkownika bazy danych',
-       'config-db-password' => 'Hasło bazy danych',
-       'config-db-password-empty' => 'Wprowadź hasło dla nowego użytkownika bazy danych: $1.
-Choć istnieje możliwość tworzenia użytkowników bez hasła, nie jest to bezpieczne.',
-       'config-db-install-username' => 'Wprowadź nazwę użytkownika, który będzie używany do łączenia się z bazą danych podczas procesu instalacji.
-Nie jest to nazwa konta MediaWiki, a użytkownika bazy danych.',
-       'config-db-install-password' => 'Wprowadź hasło, które będzie wykorzystywane do łączenia się z bazą danych w procesie instalacji.
-To nie jest hasło konta MediaWiki, lecz hasło do bazy danych.',
-       'config-db-install-help' => 'Podaj nazwę użytkownika i jego hasło, które zostaną użyte do połączenia z bazą danych w czasie procesu instalacji.',
-       'config-db-account-lock' => 'Użyj tej samej nazwy użytkownika i hasła w czasie normalnej pracy.',
-       'config-db-wiki-account' => 'Konto użytkownika do normalnej pracy',
-       'config-db-wiki-help' => 'Wprowadź nazwę użytkownika i hasło, które będą używane do połączenia z bazą danych podczas normalnej pracy wiki.
-Jeśli konto nie istnieje, a konto instalacji ma wystarczające uprawnienia, to zostanie utworzone konto użytkownika z minimalnymi uprawnieniami wymaganymi do działania wiki.',
-       'config-db-prefix' => 'Przedrostek tabel bazy danych',
-       'config-db-prefix-help' => 'Jeśli zachodzi potrzeba współdzielenia jednej bazy danych między wieloma wiki, lub między MediaWiki i inną aplikacją sieciową, można dodać przedrostek do wszystkich nazw tabel w celu uniknięcia konfliktów.
-Nie należy używać spacji.
-
-To pole zwykle pozostawiane jest puste.',
-       'config-db-charset' => 'Zestaw znaków bazy danych',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binarny',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 kompatybilny wstecz UTF-8',
-       'config-charset-help' => "'''Ostrzeżenie:''' W przypadku użycia opcji '''UTF-8 zgodnego ze starszymi wersjami''' podczas korzystania z wersji MySQL nowszych niż 4.1 kopie zapasowe wykonane przy użyciu programu <code>mysqldump</code> będą bezużyteczne - wszystkie znaki inne niż ASCII zostaną zapisane nieprawidłowo.
-
-W '''trybie binarnym''', MediaWiki zapisuje tekst UTF-8 do bazy danych w polach binarnych.
-To jest bardziej wydajne niż tryb UTF-8 w MySQL i pozwala na używanie pełnego zakresu znaków Unicode.
-W ''' trybie UTF-8''', MySQL będzie wiedzieć, w jakim zestawie znaków są dane i umożliwia ich prezentowanie i odpowiednią konwersję, ale nie pozwoli Ci przechowywać znaków spoza [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes podstawowej płaszczyzny wielojęzyczności].",
-       'config-mysql-old' => 'Wymagany jest MySQL $1 lub nowszy; korzystasz z $2.',
-       'config-db-port' => 'Numer portu TCP dla połączeń do bazy danych',
-       'config-db-schema' => 'Nazwa schematu bazy danych, z którego ma korzystać MediaWiki',
-       'config-db-schema-help' => 'Zaproponowana nazwa schematu jest odpowiednia dla większości sytuacji i przeważnie nie trzeba jej zmieniać.',
-       'config-pg-test-error' => "Nie można połączyć się z bazą danych''' $1 ''': $2",
-       'config-sqlite-dir' => 'Katalog danych SQLite',
-       'config-sqlite-dir-help' => "SQLite przechowuje wszystkie dane w pojedynczym pliku.
-
-Wskazany katalog musi być dostępny do zapisu przez webserver podczas instalacji.
-
-Powinien '''nie''' być dostępny za z sieci web, dlatego nie umieszczamy ich tam, gdzie znajdują się pliki PHP.
-
-Instalator zapisze plik <code>.htaccess</code> obokniego, ale jeśli to zawiedzie, ktoś może uzyskać dostęp do nieprzetworzonej bazy danych.
-Zawiera ona nieopracowane dane użytkownika (adresy e-mail, zahaszowane hasła) jak również usunięte wersje oraz inne dane o ograniczonym dostępie na wiki.
-
-Warto rozważyć umieszczenie w bazie danych zupełnie gdzie indziej, na przykład w <code>/var/lib/mediawiki/yourwiki</code> .",
-       'config-oracle-def-ts' => 'Domyślna przestrzeń tabel',
-       'config-oracle-temp-ts' => 'Przestrzeń tabel tymczasowych',
-       'config-support-info' => 'MediaWiki może współpracować z następującymi systemami baz danych:
-
-$1
-
-Poniżej wyświetlone są systemy baz danych gotowe do użycia. Jeżeli poniżej brakuje bazy danych, z której chcesz skorzystać, oznacza to, że brakuje odpowiedniego oprogramowania lub zostało ono niepoprawnie skonfigurowane. Powyżej znajdziesz odnośniki do dokumentacji, która pomoże w konfiguracji odpowiednich komponentów.',
-       'config-support-mysql' => '* $1 jest bazą danych, na której rozwijane jest oprogramowanie MediaWiki. Ewentualne błędy w współpracy z bazą danych są odnajdowane i naprawiane dość szybko. ([http://www.php.net/manual/en/mysql.installation.php zobacz, jak skompilować PHP ze wsparciem dla MySQL])',
-       'config-support-postgres' => '* $1 jest popularnym systemem baz danych, często stosowanym zamiast MySQL  ([http://www.php.net/manual/en/pgsql.installation.php Zobacz, jak skompilować PHP ze wsparciem dla PostgreSQL]). Z powodu możliwości wystąpienia drobnych błędów, nie jest zalecana do wymagających wdrożeń.',
-       'config-support-sqlite' => '* $1 jest niewielkim systemem bazy danych, z którym MediaWiki bardzo dobrze współpracuje. ([http://www.php.net/manual/en/pdo.installation.php Jak skompilować PHP ze wsparciem dla SQLite], korzystając z PDO)',
-       'config-support-oracle' => '* $1 jest komercyjną profesjonalną bazą danych. ([http://www.php.net/manual/en/oci8.installation.php Jak skompilować PHP ze wsparciem dla OCI8])',
-       'config-header-mysql' => 'Ustawienia MySQL',
-       'config-header-postgres' => 'Ustawienia PostgreSQL',
-       'config-header-sqlite' => 'Ustawienia SQLite',
-       'config-header-oracle' => 'Ustawienia Oracle',
-       'config-invalid-db-type' => 'Nieprawidłowy typ bazy danych',
-       'config-missing-db-name' => 'Należy wpisać wartość w polu „Nazwa bazy danych”',
-       'config-missing-db-host' => 'Musisz wpisać wartość w polu „Serwer bazy danych”',
-       'config-missing-db-server-oracle' => 'Należy wpisać wartość w polu „Nazwa instancji bazy danych (TNS)”',
-       'config-invalid-db-server-oracle' => 'Nieprawidłowa nazwa instancji bazy danych (TNS) „$1”.
-Użyj "TNS Name" lub "Easy Connect" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods])',
-       'config-invalid-db-name' => 'Nieprawidłowa nazwa bazy danych „$1”.
-Używaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) lub znaku odejmowania (-).',
-       'config-invalid-db-prefix' => 'Nieprawidłowy prefiks bazy danych „$1”.
-Używaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) lub znaku odejmowania (-).',
-       'config-connection-error' => '$1.
-
-Sprawdź adres serwera, nazwę użytkownika i hasło, a następnie spróbuj ponownie.',
-       'config-invalid-schema' => 'Nieprawidłowa nazwa schematu dla MediaWiki „$1”.
-Nazwa może zawierać wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9) i podkreślenia (_).',
-       'config-db-sys-create-oracle' => 'Instalator może wykorzystać wyłącznie konto SYSDBA do tworzenia nowych kont użytkowników.',
-       'config-db-sys-user-exists-oracle' => 'Konto użytkownika „$1“ już istnieje. SYSDBA można użyć tylko do utworzenia nowego konta!',
-       'config-postgres-old' => 'Korzystasz z wersji $2 oprogramowania PostgreSQL, a potrzebna jest wersja co najmniej $1.',
-       'config-sqlite-name-help' => 'Wybierz nazwę, która będzie identyfikować Twoją wiki.
-Nie wolno używać spacji ani myślników.
-Zostanie ona użyta jako nazwa pliku danych SQLite.',
-       'config-sqlite-parent-unwritable-group' => 'Nie można utworzyć katalogu danych <code><nowiki>$1</nowiki></code> , ponieważ katalog nadrzędny <code><nowiki>$2</nowiki></code> nie jest dostępny do zapisu przez webserwer.
-
-Instalator nie może określić, jako kttóry użytkownik działa webserwer.
-Zezwól by katalog <code><nowiki>$3</nowiki></code> był dostępny do zapisu przez niego, aby przejść dalej.
-W systemie Unix/Linux wykonaj:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Nie można utworzyć katalogu danych <code><nowiki>$1</nowiki></code> , ponieważ katalog nadrzędny <code><nowiki>$2</nowiki></code> nie jest dostępny do zapisu przez webserwer.
-
-Instalator nie może określić, jako kttóry użytkownik działa webserwer.
-Zezwól by katalog <code><nowiki>$3</nowiki></code> był globalnie modyfikowalny przez niego (i innych!) aby przejść dalej.
-W systemie Unix/Linux wykonaj:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Błąd podczas tworzenia katalogu dla danych „$1”.
-Sprawdź lokalizację i spróbuj ponownie.',
-       'config-sqlite-dir-unwritable' => 'Nie można zapisać do katalogu „$1”.
-Zmień uprawnienia dostępu do katalogu tak, aby serwer WWW mógł pisać do niego, a następnie spróbuj ponownie.',
-       'config-sqlite-connection-error' => '$1.
-
-Sprawdź katalog danych oraz nazwę bazy danych, a następnie spróbuj ponownie.',
-       'config-sqlite-readonly' => 'Plik <code>$1</code> nie jest zapisywalny.',
-       'config-sqlite-cant-create-db' => 'Nie można utworzyć pliku bazy danych <code>$1</code>.',
-       'config-sqlite-fts3-downgrade' => 'Brak wsparcia FTS3 dla PHP. Tabele zostały cofnięte',
-       'config-can-upgrade' => "W bazie danych są już tabele MediaWiki.
-Aby uaktualnić je do MediaWiki $1, kliknij '''Dalej'''.",
-       'config-upgrade-done' => "Uaktualnienie kompletne.
-
-Można teraz [ $1  rozpocząć korzystanie z wiki].
-
-Jeśli chcesz ponownie wygenerować plik <code>LocalSettings.php</code>, kliknij przycisk poniżej.
-Jest to '''nie zalecane''', chyba że występują problemy z twoją wiki.",
-       'config-upgrade-done-no-regenerate' => 'Aktualizacja zakończona.
-
-Możesz wreszcie [$1 zacząć korzystać ze swojej wiki].',
-       'config-regenerate' => 'Ponowne generowanie LocalSettings.php →',
-       'config-show-table-status' => 'Zapytanie „<code>SHOW TABLE STATUS</code>” nie powiodło się!',
-       'config-unknown-collation' => "'''Uwaga''' – bazy danych używa nierozpoznanej metody porównywania.",
-       'config-db-web-account' => 'Konto bazy danych dla dostępu przez WWW',
-       'config-db-web-help' => 'Wybierz nazwę użytkownika i hasło, z których korzystać będzie serwer WWW do łączenia się z serwerem baz danych, podczas zwykłej pracy z wiki.',
-       'config-db-web-account-same' => 'Użyj tego samego konta, co dla instalacji',
-       'config-db-web-create' => 'Utwórz konto, jeśli jeszcze nie istnieje',
-       'config-db-web-no-create-privs' => 'Konto podane do wykonania instalacji nie ma wystarczających uprawnień, aby utworzyć nowe konto.
-Konto, które wskazałeś tutaj musi już istnieć.',
-       'config-mysql-engine' => 'Silnik przechowywania',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Ostrzeżenie''': wybrano MyISIAM jako silnik  składowania danych MySQL, co nie jest zalecane do użytku w MediaWiki, ponieważ:
- * ledwo obsługuje współbieżnośći ze względu na blokowanie tabel
- * jest bardziej podatna na uszkodzenie niż inne silniki
- * kod źródłowy MediaWiki nie zawsze obsługuje MyISAM tak, jak powinien
-
-Jeśli instalacja MySQL obsługuje InnoDB, jest wysoce zalecane, by to je wybrać.
-Jeśli instalacja MySQL nie obsługuje InnoDB, być może nadszedł czas na jej uaktualnienie.",
-       'config-mysql-only-myisam-dep' => "'''Ostrzeżenie:''' MyISAM jest jedynym dostępnym mechanizmem składowania dla MySQL, który nie jest zalecany do używania z MediaWiki, ponieważ:
-* słabo obsługuje współbieżność z powodu blokowania tabel
-* jest bardziej skłonny do uszkodzeń niż inne silniki
-* kod MediaWiki nie zawsze traktuje MyISAM jak powinien
-
-Twoja instalacja MySQL nie obsługuje InnoDB, być może jest to czas na aktualizację.",
-       'config-mysql-engine-help' => "'''InnoDB''' jest prawie zawsze najlepszą opcją, ponieważ posiada dobrą obsługę współbieżności.
-
-'''MyISAM''' może być szybsze w instalacjach pojedynczego użytkownika lub tylko do odczytu.
-Bazy danych MyISAM mają tendencję do ulegania uszkodzeniom częściej niż bazy InnoDB.",
-       'config-mysql-charset' => 'Zestaw znaków bazy danych',
-       'config-mysql-binary' => 'binarny',
-       'config-mysql-utf8' => 'UTF‐8',
-       'config-mysql-charset-help' => "W '''trybie binarnym''', MediaWiki zapisuje tekst UTF-8 do bazy danych w polach binarnych.
-Jest on bardziej wydajny niż tryb UTF-8 w MySQL i pozwala na używanie znaków pełnego zakresu Unicode.
-
-W '''trybie UTF-8''', MySQL będzie znać zestaw znaków w jakim zakodowano dane, można też przedstawić i przekonwertuj je odpowiednio, ale nie pozwoli Ci przechowywać znaków spoza [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes podstawowej płaszczyzny wielojęzyczności].",
-       'config-site-name' => 'Nazwa wiki',
-       'config-site-name-help' => 'Ten napis pojawi się w pasku tytułowym przeglądarki oraz w różnych innych miejscach.',
-       'config-site-name-blank' => 'Wprowadź nazwę witryny.',
-       'config-project-namespace' => 'Przestrzeń nazw projektu',
-       'config-ns-generic' => 'Projekt',
-       'config-ns-site-name' => 'Taka sama jak nazwa wiki $1',
-       'config-ns-other' => 'Inna (należy określić)',
-       'config-ns-other-default' => 'MojaWiki',
-       'config-project-namespace-help' => 'Według przykładu Wikipedii wiele wiki przechowuje swoje strony zasad oddzielnie od stron z zawartością, w "\'\'\'przestrzeni nazw projektu\'\'\'".
-Wszystkie tytuły stron w tej przestrzeni nazw zaczynają się od pewnego przedrostka, który można tutaj określić.
-Tradycyjnie ten przedrostek wywodzi się od nazwy wiki, ale nie może zawierać pewnych znaków przestankowych takich jak "#" lub ":".',
-       'config-ns-invalid' => 'Podana przestrzeń nazw „<nowiki>$1</nowiki>” jest nieprawidłowa.
-Podaj inną przestrzeń nazw projektu.',
-       'config-ns-conflict' => 'Określona przestrzeń nazw "<nowiki>$1</nowiki>" powoduje konflikt z domyślną przestrzenią nazw MediaWiki.
-Wskaż inną przestrzeń nazw projektu.',
-       'config-admin-box' => 'Konto administratora',
-       'config-admin-name' => 'Administrator',
-       'config-admin-password' => 'Hasło',
-       'config-admin-password-confirm' => 'Hasło powtórnie',
-       'config-admin-help' => 'Wprowadź preferowaną nazwę użytkownika, na przykład „Jan Kowalski”.
-Tej nazwy będziesz używać do logowania się do wiki.',
-       'config-admin-name-blank' => 'Wpisz nazwę użytkownika, który będzie administratorem.',
-       'config-admin-name-invalid' => 'Podana nazwa użytkownika „<nowiki>$1</nowiki>” jest nieprawidłowa.
-Podaj inną nazwę.',
-       'config-admin-password-blank' => 'Wprowadź hasło dla konta administratora.',
-       'config-admin-password-same' => 'Hasło nie może być takie samo jak nazwa użytkownika.',
-       'config-admin-password-mismatch' => 'Wprowadzone dwa hasła różnią się między sobą.',
-       'config-admin-email' => 'Adres e‐mail',
-       'config-admin-email-help' => 'Wpisz adres e‐mail, aby mieć możliwość odbierania e‐maili od innych użytkowników wiki, zresetowania hasła oraz otrzymywania powiadomień o zmianach na stronach z listy obserwowanych. Możesz pozostawić to pole niewypełnione.',
-       'config-admin-error-user' => 'Błąd wewnętrzny podczas tworzenia konta administratora o nazwie „<nowiki>$1</nowiki>”.',
-       'config-admin-error-password' => 'Wewnętrzny błąd podczas ustawiania hasła dla administratora „<nowiki>$1</nowiki>”: <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Wpisałeś nieprawidłowy adres e‐mail',
-       'config-subscribe' => 'Zapisz się na [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce listę pocztową z ogłoszeniami o nowych wersjach].',
-       'config-subscribe-help' => 'Jest to lista o małej liczbie wiadomości, wykorzystywana do przesyłania informacji o udostępnieniu nowej wersji oraz istotnych sprawach dotyczących bezpieczeństwa.
-Powinieneś zapisać się na tę listę i aktualizować zainstalowane oprogramowanie MediaWiki gdy pojawia się nowa wersja.',
-       'config-subscribe-noemail' => 'Próbowano subskrybować listę mailingową ogłoszeń wersji bez podania adresu e-mail.
-Proszę podać adres e-mail, jeśli chcesz subskrybować listę wysyłkową.',
-       'config-almost-done' => 'To już prawie koniec!
-Możesz pominąć pozostałe czynności konfiguracyjne i zainstalować wiki.',
-       'config-optional-continue' => 'Zadaj mi więcej pytań.',
-       'config-optional-skip' => 'Jestem już znudzony, po prostu zainstaluj wiki.',
-       'config-profile' => 'Profil uprawnień użytkowników',
-       'config-profile-wiki' => 'Otwarte wiki',
-       'config-profile-no-anon' => 'Wymagane utworzenie konta',
-       'config-profile-fishbowl' => 'Wyłącznie zatwierdzeni edytorzy',
-       'config-profile-private' => 'Prywatna wiki',
-       'config-profile-help' => "Strony typu wiki działają najlepiej, gdy pozwolisz je edytować tak wielu osobom, jak to możliwie.
-W MediaWiki, można łatwo sprawdzić ostatnie zmiany i wycofać szkody, które są spowodowane przez naiwnych lub złośliwych użytkowników.
-
-Jednakże wielu uznało MediaWiki użytecznym w różnorodnych rolach, a czasami nie jest łatwo przekonać wszystkich do korzyści ze sposobu działania wiki. Masz więc wybór.
-
-Ustawienie '''{{int:config-profile-wiki}}''' pozwala każdemu na edycję, nawet bez logowania się.
-Wiki z '''{{int:config-profile-no-anon}}''' zawiera dodatkowe możliwości ale może powstrzymywać potencjalnych edytorów.
-
-Scenariusz '''{{int:config-profile-fishbowl}}''' umożliwia zatwierdzonym użytkownikom edycję, ale wyświetlanie stron jest powszechnie dostępne, włącznie z historią.
-Ustawienie '''{{int:config-profile-private}}'' ' pozwala na wyświetlanie stron tylko zatwierdzonym użytkownikom, ta sama grupa może je edytować.
-
-Bardziej skomplikowane konfiguracje uprawnień użytkowników są dostępne po zakończeniu instalacji, zobacz [//www.mediawiki.org/wiki/Manual:User_rights odpowiednią część podręcznika].",
-       'config-license' => 'Prawa autorskie i licencja',
-       'config-license-none' => 'Brak stopki z licencją',
-       'config-license-cc-by-sa' => 'Creative Commons – za uznaniem autora, na tych samych zasadach',
-       'config-license-cc-by' => 'Creative Commons – za podaniem autora',
-       'config-license-cc-by-nc-sa' => 'Creative Commons – za uznaniem autora, bez użycia komercyjnego, na tych samych zasadach',
-       'config-license-cc-0' => 'Creative Commons – zero (domena publiczna)',
-       'config-license-gfdl' => 'GNU licencja wolnej dokumentacji 1.3 lub nowsza',
-       'config-license-pd' => 'Domena publiczna',
-       'config-license-cc-choose' => 'Wybierz własną licencję Creative Commons',
-       'config-license-help' => "Wiele publicznych wiki umieszcza wszystkie dopisane treści na [http://freedomdefined.org/Definition wolnej licencji].
-To pomaga tworzyć poczucie wspólnoty i zachęca do długoterminowego wkładu.
-Nie jest to zazwyczaj konieczne w prywatnych lub firmowych wiki.
-
-Jeśli chcesz móc użyć tekstu z Wikipedii i chcesz Wikipedia mogła zaakceptować tekst skopiowany z twojej wiki, należy wybrać '''Creative Commons Attribution Share Alike'''.
-
-Wikipedia używała poprzednio GNU Free Documentation License.
-GFDL jest poprawną licencję, ale trudno ją zrozumieć.
-Trudno także ponowne użyć zawartości na licencji GFDL.",
-       'config-email-settings' => 'Ustawienia e-maili',
-       'config-enable-email' => 'Włącz wychodzące wiadomości e–mail',
-       'config-enable-email-help' => 'Jeśli chcesz, aby działał e-mail, [http://www.php.net/manual/en/mail.configuration.php Ustawienia poczty PHP] muszą być poprawnie wprowadzone.
-Jeśli nie chcesz jakichś funkcji poczty e-mail, można je wyłączyć tutaj.',
-       'config-email-user' => 'Włącz możliwość przesyłania e‐maili pomiędzy użytkownikami',
-       'config-email-user-help' => 'Zezwalaj użytkownikom na wysyłanie wzajemnie e‐maili, jeśli będą mieć włączoną tę funkcję w swoich preferencjach.',
-       'config-email-usertalk' => 'Włącz powiadamianie o zmianach na stronie dyskusji użytkownika',
-       'config-email-usertalk-help' => 'Pozwól użytkownikom otrzymywać powiadomienia o zmianach na stronie dyskusji użytkownika, jeśli będą mieć włączoną tę funkcję w swoich preferencjach.',
-       'config-email-watchlist' => 'Włącz powiadomienie o zmianach stron obserwowanych',
-       'config-email-watchlist-help' => 'Pozwól użytkownikom otrzymywać powiadomienia o zmianach na stronach obserwowanych, jeśli będą mieć włączoną tę funkcję w swoich preferencjach.',
-       'config-email-auth' => 'Włącz uwierzytelnianie e‐mailem',
-       'config-email-auth-help' => "Jeśli ta opcja jest włączona, użytkownicy będą musieli potwierdzić swoje adresy e-mail przy użyciu wysłanego do nich łącza, gdy będą je ustawiać lub zmieniać.
-Tylko uwierzytelnione adresy e-mail mogą otrzymywać wiadomości od innych użytkowników lub mailowe powiadomienia o zmianach.
-Ustawienie tej opcji jest'''zalecane''' na publicznych wiki ze względu na potencjalne nadużycia funkcji poczty e-mail.",
-       'config-email-sender' => 'Zwrotny adres e‐mail',
-       'config-email-sender-help' => 'Wprowadź adres e-mail używany jako adres zwrotny wiadomości wychodzących.
-To tam będą wysyłane szturchnięcia.
-Wiele serwerów poczty wymaga, by co najmniej część nazwy domeny była prawidłowa.',
-       'config-upload-settings' => 'Przesyłanie obrazków i plików',
-       'config-upload-enable' => 'Włącz przesyłanie plików na serwer',
-       'config-upload-help' => 'Przesyłanie plików potencjalnie wystawia serwer na zagrożenia.
-Więcej informacji na ten temat można znaleźć w [//www.mediawiki.org/wiki/Manual:Security sekcji zabezpieczeń] podręcznika.
-
-Aby włączyć przesyłanie plików, zmień właściwości podkatalogu <code>images</code> katalogu głównego MediaWiki tak, aby serwer sieci web mógł zapisywać do niego.
-Następnie włącz tę opcję.',
-       'config-upload-deleted' => 'Katalog dla usuniętych plików',
-       'config-upload-deleted-help' => 'Wybierz katalog, w którym będzie archiwum usuniętych plików.
-Najlepiej, aby nie był on dostępny z internetu.',
-       'config-logo' => 'Adres URL logo',
-       'config-logo-help' => 'Domyślny motyw MediaWiki zawiera miejsce na logo wielkości 135 x 160 pikseli powyżej menu na pasku bocznym.
-Prześlij obrazek o odpowiednim rozmiarze, a następnie wpisz jego URL tutaj.
-
-Możesz użyć <code>$wgStylePath</code> lub <code>$wgScriptPath</code> jeżeli twoje logo jest relatywne do tych ścieżek.
-
-Jeśli nie chcesz logo, pozostaw to pole puste.',
-       'config-instantcommons' => 'Włącz Instant Commons',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] jest funkcją, która pozwala wiki używać obrazów, dźwięków i innych mediów znalezionych na  witrynie [//commons.wikimedia.org/ Wikimedia Commons].
-Aby to zrobić, MediaWiki wymaga dostępu do internetu.
-
-Aby uzyskać więcej informacji na temat tej funkcji, w tym instrukcje dotyczące sposobu ustawiania go na wiki innych niż Wikimedia Commons, sprawdź w [//mediawiki.org/wiki/Manual:$wgForeignFileRepos podręczniku].',
-       'config-cc-error' => 'Wybieranie licencji Creative Commons nie dało wyniku.
-Wpisz nazwę licencji ręcznie.',
-       'config-cc-again' => 'Wybierz jeszcze raz...',
-       'config-cc-not-chosen' => 'Wybierz którą chcesz licencję Creative Commons i kliknij „Dalej”.',
-       'config-advanced-settings' => 'Konfiguracja zaawansowana',
-       'config-cache-options' => 'Ustawienia buforowania obiektów',
-       'config-cache-help' => 'Buforowanie obiekto jest używane aby przyspieszyć MediaWiki przez trzymanie w pamięci podręcznej często używanych danych.
-Średnie oraz duże witryny są wysoce zachęcane by je włączyć, a małe witryny także dostrzegą korzyści.',
-       'config-cache-none' => 'Brak buforowania (wszystkie funkcje będą działać, ale mogą wystąpić kłopoty z wydajnością na dużych witrynach wiki)',
-       'config-cache-accel' => 'Buforowania obiektów PHP (APC, XCache lub WinCache)',
-       'config-cache-memcached' => 'Użyj Memcached (wymaga dodatkowej instalacji i konfiguracji)',
-       'config-memcached-servers' => 'Serwery Memcached:',
-       'config-memcached-help' => 'Lista adresów IP do wykorzystania przez Memcached.
-Adresy powinny być umieszczane po jednym w linii i określać również wykorzystywany port. Na przykład:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => 'Został wybrany Memcached jako typ pamięci podręcznej, ale nie określono żadnych serwerów.',
-       'config-memcache-badip' => 'Wprowadzono nieprawidłowy adres IP dla Memcached:  $1.',
-       'config-memcache-noport' => 'Nie określono portu dla serwera Memcached:  $1.
-Jeśli nie znasz numeru portu, wartością domyślną jest 11211.',
-       'config-memcache-badport' => 'Numery portu Memcached powinny zawierać się pomiędzy $1 i $2.',
-       'config-extensions' => 'Rozszerzenia',
-       'config-extensions-help' => 'Rozszerzenia wyżej wymienione zostały wykryte w katalogu <code>./extensions</code>.
-
-Mogą one wymagać dodatkowych czynności konfiguracyjnych, ale można je teraz włączyć',
-       'config-install-alreadydone' => "'''Uwaga''' – wydaje się, że MediaWiki jest już zainstalowane, a obecnie próbujesz zainstalować je ponownie.
-Przejdź do następnej strony.",
-       'config-install-begin' => 'Po naciśnięciu "{{int:config-continue}}", rozpocznie się instalacja MediaWiki.
-Jeśli nadal chcesz dokonać zmian, naciśnij "{{int:config-back}}".',
-       'config-install-step-done' => 'gotowe',
-       'config-install-step-failed' => 'nieudane',
-       'config-install-extensions' => 'Włącznie z rozszerzeniami',
-       'config-install-database' => 'Konfigurowanie bazy danych',
-       'config-install-schema' => 'Tworzenie schematu',
-       'config-install-pg-schema-not-exist' => 'Schemat PostgreSQL nie istnieje.',
-       'config-install-pg-schema-failed' => 'Utworzenie tabel nie powiodło się.
-Upewnij się, że użytkownik „$1” może zapisywać do schematu „$2”.',
-       'config-install-pg-commit' => 'Zatwierdzanie zmian',
-       'config-install-pg-plpgsql' => 'Sprawdzanie języka PL/pgSQL',
-       'config-pg-no-plpgsql' => 'Musisz zainstalować język PL/pgSQL w bazie danych $1',
-       'config-pg-no-create-privs' => 'Konto, które zostało określone dla instalacji nie ma wystarczających uprawnień, aby utworzyć konto.',
-       'config-pg-not-in-role' => 'Konto określone dla użytkownika sieci już istnieje.
-Konto określone dla instalacji nie ma uprawnień administratora ani nie jest przynależy do roli użytkownika sieci web, więc nie można utworzyć obiektów stanowiących własność użytkownika sieci.
-
-MediaWiki wymaga obecnie, by tabele były własnością konta zwykłego użytkownika. Podaj inną nazwę konta użytkownika, lub kliknij przycisk "Wstecz" i podaj nazwę konta użytkownika instalatora, które posiada odpowiednie uprawnienia.',
-       'config-install-user' => 'Tworzenie użytkownika bazy danych',
-       'config-install-user-alreadyexists' => 'Konto użytkownika „$1“ już istnieje',
-       'config-install-user-create-failed' => 'Tworzenie użytkownika "$1" nie powiodło się: $2',
-       'config-install-user-grant-failed' => 'Przyznanie uprawnień użytkownikowi „$1” nie powiodło się – $2',
-       'config-install-user-missing' => 'Nie istnieje konto użytkownika „$1“.',
-       'config-install-user-missing-create' => 'Określony użytkownik "$1" nie istnieje.
-Kliknij poniższe pole wyboru „utwórz konto" jeśli chcesz go utworzyć.',
-       'config-install-tables' => 'Tworzenie tabel',
-       'config-install-tables-exist' => "'''Uwaga''' – wygląda na to, że tabele MediaWiki już istnieją.
-Pomijam tworzenie tabel.",
-       'config-install-tables-failed' => "'''Błąd''' – tworzenie tabeli nie powiodło się z powodu błędu – $1",
-       'config-install-interwiki' => 'Wypełnianie tabeli domyślnymi interwiki',
-       'config-install-interwiki-list' => 'Nie można odnaleźć pliku <code>interwiki.list</code>.',
-       'config-install-interwiki-exists' => "'''Uwaga''' – wygląda na to, że tabela interwiki ma już jakieś wpisy.
-Tworzenie domyślnej listy pominięto.",
-       'config-install-stats' => 'Inicjowanie statystyki',
-       'config-install-keys' => 'Generowanie tajnych kluczy',
-       'config-insecure-keys' => "'''Ostrzeżenie:''' {{PLURAL:$2|Klucz bezpieczeństwa|Klucze bezpieczeństwa|Klucze bezpieczeństwa}} ($1) utworzone podczas instalacji {{PLURAL:$2|utworzony podczas instalacji nie jest|utworzone podczas instalacji nie są|utworzone podczas instalacji nie są}} w pełni bezpieczne. Być może warto wygenerować {{PLURAL:$2|własny klucz|własne klucze|własne klucze}}.",
-       'config-install-sysop' => 'Tworzenie konta administratora',
-       'config-install-subscribe-fail' => 'Nie można zapisać na listę „mediawiki-announce“ – $1',
-       'config-install-subscribe-notpossible' => 'cURL nie jest zainstalowany, więc allow_url_fopen nie jest dostępne.',
-       'config-install-mainpage' => 'Tworzenie strony głównej z domyślną zawartością',
-       'config-install-extension-tables' => 'Tworzenie tabel dla aktywnych rozszerzeń',
-       'config-install-mainpage-failed' => 'Nie udało się wstawić strony głównej – $1',
-       'config-install-done' => "'''Gratulacje!'''
-Udało Ci się zainstalować MediaWiki.
-
-Instalator wygenerował plik konfiguracyjny <code>LocalSettings.php</code>.
-
-Musisz go pobrać i umieścić w katalogu głównym Twojej instalacji wiki (tym samym katalogu co index.php). Pobieranie powinno zacząć się automatycznie.
-
-Jeżeli pobieranie nie zostało zaproponowane lub jeśli użytkownik je anulował, można ponownie uruchomić pobranie klikając poniższe łącze:
-
-$3
-
-'''Uwaga''': Jeśli nie zrobisz tego teraz, wygenerowany plik konfiguracyjny nie będzie już dostępny po zakończeniu instalacji.
-
-Po załadowaniu pliku konfiguracyjnego możesz '''[$2 wejść na wiki]'''.",
-       'config-download-localsettings' => 'Pobierz <code>LocalSettings.php</code>',
-       'config-help' => 'pomoc',
-       'config-nofile' => 'Nie udało się odnaleźć pliku "$1". Czy nie został usunięty?',
-       'config-extension-link' => 'Czy wiesz, że twoja wiki obsługuje [//www.mediawiki.org/wiki/Manual:Extensions/pl rozszerzenia]?
-
-Możesz przejrzeć [//www.mediawiki.org/wiki/Category:Extensions_by_category rozszerzenia według kategorii] lub [//www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] aby zobaczyć pełną listę rozszerzeń.',
-       'mainpagetext' => "'''Instalacja MediaWiki powiodła się.'''",
-       'mainpagedocfooter' => 'Zobacz [//meta.wikimedia.org/wiki/Help:Contents przewodnik użytkownika] w celu uzyskania informacji o działaniu oprogramowania wiki.
-
-== Na początek ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings/pl Lista ustawień konfiguracyjnych]
-* [//www.mediawiki.org/wiki/Manual:FAQ/pl MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Komunikaty o nowych wersjach MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Przetłumacz MediaWiki na swój język]',
-);
-
-/** Piedmontese (Piemontèis)
- * @author Borichèt
- * @author Dragonòt
- * @author Krinkle
- * @author 아라
- */
-$messages['pms'] = array(
-       'config-desc' => "L'instalador për mediaWiki",
-       'config-title' => 'Anstalassion ëd MediaWiki $1',
-       'config-information' => 'Anformassion',
-       'config-localsettings-upgrade' => "A l'é stàit trovà n'archivi <code>LocalSettings.php</code>.
-Për agiorné cost'anstalassion, ch'a anserissa ël valor ëd <code>\$wgUpgradeKey</code> ant la casela sì-sota.
-A la trovrà an LocalSetting.php.",
-       'config-localsettings-cli-upgrade' => "N'archivi <code>LocalSettings.php</code> a l'é stàit trovà.
-Për agiorné sta instalassion, për piasì fà anvece giré <code>update.php</code>",
-       'config-localsettings-key' => "Ciav d'agiornament:",
-       'config-localsettings-badkey' => "La ciav ch'it l'has dàit a l'é pa giusta.",
-       'config-upgrade-key-missing' => "A l'é stàita trovà n'istalassion esistenta ëd MediaWiki. 
-Për agiorné soa istalassion, për piasì ch'a buta la linia sì-sota al fond ëd sò <code>LocalSettings.php</code>:
-
-$1",
-       'config-localsettings-incomplete' => "L'esistent <code>LocalSettings.php</code> a smija esse ancomplet.
-La variàbil $1 a l'é nen ampostà.
-Për piasì, ch'a modìfica <code>LocalSettings.php</code> ëd fasson che costa variàbil a sia ampostà, e ch'a sgnaca «{{int:Config-continue}}».",
-       'config-localsettings-connection-error' => "A l'é ancapitaje n'eror an colegand-se a la base ëd dàit an dovrand j'ampostassion specificà an <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Për piasì, ch'a coregia cost'ampostassion e ch'a preuva torna.
-
-$1",
-       'config-session-error' => 'Eror an fasend parte la session: $1',
-       'config-session-expired' => "Ij sò dat ëd session a smijo scadù.
-Le session a son configurà për na durà ëd $1.
-A peul aumenté sòn an ampostand <code>session.gc_maxlifetime</code> an php.ini.
-Ch'a anandia torna ël process d'instalassion.",
-       'config-no-session' => "Ij sò dat ëd session a son përdù!
-Ch'a contròla sò php.ini e ch'as sigura che <code>session.save_path</code> a sia ampostà ant ël dossié giust.",
-       'config-your-language' => 'Toa lenga:',
-       'config-your-language-help' => "Selessioné na lenga da dovré durant ël process d'instalassion.",
-       'config-wiki-language' => 'Lenga dla Wiki:',
-       'config-wiki-language-help' => 'Selession-a la lenga dont la wiki a sarà prevalentement scrivùa.',
-       'config-back' => '← André',
-       'config-continue' => 'Continua →',
-       'config-page-language' => 'Lenga',
-       'config-page-welcome' => 'Bin  ëvnù a MediaWiki!',
-       'config-page-dbconnect' => 'Coleghesse a la base ëd dàit',
-       'config-page-upgrade' => "Agiorné l'instalassion esistenta",
-       'config-page-dbsettings' => 'Ampostassion dla base ëd dàit',
-       'config-page-name' => 'Nòm',
-       'config-page-options' => 'Opsion',
-       'config-page-install' => 'Instala',
-       'config-page-complete' => 'Completa!',
-       'config-page-restart' => "Fé torna parte l'instalassion",
-       'config-page-readme' => 'Lesme',
-       'config-page-releasenotes' => 'Nòte ëd publicassion',
-       'config-page-copying' => 'Copié',
-       'config-page-upgradedoc' => 'Agiorné',
-       'config-page-existingwiki' => 'Wiki esistenta',
-       'config-help-restart' => "Veul-lo scancelé tùit ij dat salvà ch'a l'ha anserì e anandié torna ël process d'instalassion?",
-       'config-restart' => 'É!, felo torna parte',
-       'config-welcome' => "=== Contròj d'ambient ===
-Dle verìfiche ëd base a son fàite për vëdde se st'ambient a va bin për l'instalassion ëd MediaWiki.
-S'a l'ha da manca d'agiut durant l'anstalassion, a dovrìa fornì j'arzultà dë sti contròj.",
-       'config-copyright' => "=== Drit d'Autor e Condission ===
-
-$1
-
-Cost-sì a l'é un programa lìber e a gràtis: a peul ridistribuilo e/o modifichelo sota le condission dla licensa pùblica general GNU com publicà da la Free Software Foundation; la version 2 dla Licensa, o (a toa sèrnìa) qualsëssìa version pi recenta.
-
-Cost programa a l'é distribuì ant la speransa ch'a sia ùtil, ma '''sensa gnun-e garansìe'''; sensa gnanca la garansia implìssita ëd '''comersiabilità''' o '''d'esse adat a un but particolar'''.
-
-A dovrìa avèj arseivù <doclink href=Copying>na còpia ëd la licensa pùblica general GNU</doclink> ansema a sto programa; dësnò, ch'a scriva a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA opura [http://www.gnu.org/copyleft/gpl.html ch'a la lesa an linia].",
-       'config-sidebar' => "* [//www.mediawiki.org Intrada MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents Guida dl'Utent]
-* [//www.mediawiki.org/wiki/Manual:Contents Guida dl'Aministrator]
-* [//www.mediawiki.org/wiki/Manual:FAQ Soens an ciamo]
-----
-* <doclink href=Readme>Ch'am lesa</doclink>
-* <doclink href=ReleaseNotes>Nòte ëd publicassion</doclink>
-* <doclink href=Copying>Còpia</doclink>
-* <doclink href=UpgradeDoc>Agiornament</doclink>",
-       'config-env-good' => "L'ambient a l'é stàit controlà.
-It peule instalé MediaWiki.",
-       'config-env-bad' => "L'ambient a l'é stàit controlà.
-It peule pa instalé MediaWiki.",
-       'config-env-php' => "PHP $1 a l'é instalà.",
-       'config-env-php-toolow' => "PHP $1 a l'é instalà.
-Ant tùit ij cas, MediaWiki a ciama PHP $2 o pi neuv.",
-       'config-unicode-using-utf8' => 'As deuvra utf8_normalize.so ëd Brion Vibber për la normalisassion Unicode.',
-       'config-unicode-using-intl' => "As deuvra l'[http://pecl.php.net/intl estension intl PECL] për la normalisassion Unicode.",
-       'config-unicode-pure-php-warning' => "'''Avis:''' L'[http://pecl.php.net/intl estension intl PECL] a l'é pa disponìbil për gestì la normalisassion Unicode, da già che l'implementassion an PHP pur a faliss për lentëssa.
-S'a gestiss un sit a àut tràfich, a dovrìa lese cheicòs an sla [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalisassion Unicode].",
-       'config-unicode-update-warning' => "'''Avis:''' La version instalà dlë spassiador ëd normalisassion Unicode a deuvra na version veja ëd la librarìa dël [http://site.icu-project.org/ proget ICU].
-A dovrìa fé n'[//www.mediawiki.org/wiki/Unicode_normalization_considerations agiornament] s'a l'é anteressà a dovré Unicode.",
-       'config-no-db' => "Impossìbil trové un pilòta ëd base ëd dàit bon! A dev instalé un pilòta ëd base ëd dàit për PHP.
-Le sòrt ëd database ch'a ven-o a son apogià: $1.
-
-S'a l'é ansima a 'n servissi partagià, ch'a ciama a sò fornidor ëd servissi d'instalé un pilòta ëd base ëd dàit compatìbil.
-S'a l'é compilasse PHP chiel-midem, ch'a lo configura torna con un client ëd base ëd dàit abilità, për esempi an dovrand <code>./configure --with-mysql</code>.
-S'a l'ha instalà PHP dai pachèt Debian o Ubuntu, antlora a dev ëdcò istalé ël mòdul php5-mysql.",
-       'config-outdated-sqlite' => "'''Avis''': chiel a l'ha SQLite $1, che a l'é pi vej che la version mìnima dont a-i é damanca $2. SQLite a sarà pa disponìbil.",
-       'config-no-fts3' => "'''Avis''': SQLite a l'é compilà sensa ël mòdul [//sqlite.org/fts3.html FTS3], le funsion d'arserca a saran pa disponìbij su cost motor.",
-       'config-register-globals' => "'''Avis: L'opsion <code>[http://php.net/register_globals register_globals]</code> ëd PHP a l'é abilità.'''
-'''Ch'a la disabìlita s'a peul.'''
-MediaWiki a marcërà, ma sò servent a l'é espòst a 'd possìbij vunerabilità ëd sicurëssa.",
-       'config-magic-quotes-runtime' => "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] a l'é ativ!'''
-Costa opsion a danegia ij dat d'intrada an manera pa prevedìbil.
-A peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.",
-       'config-magic-quotes-sybase' => "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] a l'é ativ!'''
-Costa opsion a danegia ij dat d'intrada an manera pa prevedìbil.
-A peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.",
-       'config-mbstring' => "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] a l'é ativ!'''
-Costa opsion a càusa d'eror e a peul danegié ij dat d'intrada an manera pa prevedìbil.
-A peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.",
-       'config-ze1' => "'''Fatal: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] a l'é ativ!'''
-Costa opsion a càusa dij bigat afros con MediaWiki.
-A peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.",
-       'config-safe-mode' => "'''Avis:''' [http://www.php.net/features.safe-mode Safe mode] ëd PHP a l'é ativ.
-A peul causé ëd problema, dzortut s'as deuvro ël cariament d'archivi e ël manteniment ëd <code>math</code>.",
-       'config-xml-bad' => "Mòdul XML ed PHP mancant.
-MediaWiki a l'ha da manca dle funsion an sto mòdul e a travajërà pa an costa configurassion.
-S'a fa giré mandrake, ch'a instala ël pachet php-xml.",
-       'config-pcre' => "A smija che ël mòdul d'apògg PCRE a sia mancant.
-MediaWiki a l'ha da manca dle funsion d'espression regolar Perl-compatìbij për marcé.",
-       'config-pcre-no-utf8' => "'''Fatal''': ël mòdul PCRE ëd PHP a smija esse compilà sensa l'apògg PCRE_UTF8.
-MediaWiki a ciama l'apògg d'UTF8 për marcé për da bin.",
-       'config-memory-raised' => "<code>memory_limit</code> ëd PHP a l'é $1, aussà a $2.",
-       'config-memory-bad' => "'''Avis:''' <code>memory_limit</code> ëd PHP a l'é $1.
-Sossì a l'é probabilment tròp bass.
-L'instalassion a peul falì!",
-       'config-ctype' => "'''Fatal''': PHP a dev esse compilà con l'apògg për l'[http://www.php.net/manual/en/ctype.installation.php extension Ctype].",
-       'config-xcache' => "[http://xcache.lighttpd.net/ XCache] a l'é instalà",
-       'config-apc' => "[http://www.php.net/apc APC] a l'é instalà",
-       'config-wincache' => "[http://www.iis.net/download/WinCacheForPhp WinCache]  a l'é instalà",
-       'config-no-cache' => "'''Avis:''' As treuva pa [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache]. Ël buté d'oget an memòria local a l'é pa abilità.",
-       'config-mod-security' => "'''Avis''': Sò servent për l'aragnà a l'ha [http://modsecurity.org/ mod_security] abilità. Se mal configurà, a peul causé dij problema për MediaWiki o d'àutri programa ch'a përmëtto a j'utent dë spedì un contnù qualsëssìa.
-Ch'a fasa arferiment a la [http://modsecurity.org/documentation/ mod_security documentassion] o ch'a contata l'echip ëd sò servissi s'a-j rivo dj'eror casuaj.",
-       'config-diff3-bad' => 'GNU diff3 pa trovà.',
-       'config-imagemagick' => "Trovà ImageMagick: <code>$1</code>.
-La miniaturisassion ëd figure a sarà abilità s'it abìlite le carie.",
-       'config-gd' => "Trovà la librarìa gràfica antëgrà GD.
-La miniaturisassion ëd figure a sarà abilità s'a abìlita ij cariament.",
-       'config-no-scaling' => 'As treuva pa la librarìa GD o ImageMagick.
-La miniaturisassion ëd figure a sarà disabilità.',
-       'config-no-uri' => "'''Eror:''' As peul pa determiné l'URI corenta.
-Instalassion abortìa.",
-       'config-no-cli-uri' => "'''Avis''': pa gnun --scriptpath specificà, a sarà dovrà ël predefinì: <code>$1</code>.",
-       'config-using-server' => 'Utilisassion dël nòm ëd servent "<nowiki>$1</nowiki>".',
-       'config-using-uri' => "Utilisassion ëd l'anliura ëd servent «<nowiki>$1$2</nowiki>».",
-       'config-uploads-not-safe' => "'''Avis:''' Sò dossié stàndard për carié <code>$1</code> a l'é vulneràbil a l'esecussion ëd qualsëssìa senari.
-Bele che MediaWiki a contròla j'aspet ëd sicurëssa ëd tùit j'archivi carià, a l'é motobin arcomandà ëd [//www.mediawiki.org/wiki/Manual:Security#Upload_security saré ës përtus ëd sicurëssa] prima d'abilité ij cariament.",
-       'config-no-cli-uploads-check' => "'''Avis:''' Toa cartela predefinìa për j-amportassion (<code>$1</code>) a l'é nen controlà a propòsit ëd la vulnerabilità
-d'esecussion ëd senari arbitrari durant l'istalassion CLI.",
-       'config-brokenlibxml' => "Sò sistema a l'ha na combinassion ëd version PHP e libxml2 che a l'ha dij bigat e a peul provoché la corussion ëd dat ëstërmà an MediaWiki e d'àutre aplicassion për l'aragnà.
-Ch'a agiorna a PHP 5.2.9 o pi neuv e libxml2 2.7.3 o pi neuv ([//bugs.php.net/bug.php?id=45996 bug filed with PHP]).
-Istalassion abortìa.",
-       'config-using531' => "MediaWiki a peul pa esse dovrà con PHP $1 a motiv d'un bigat ch'a ìmplica ij paràmetr d'arferiment a <code>__call()</code>.
-Ch'a agiorna a PHP 5.3.2 o pi neuv, o ch'a torna andré a PHP 5.3.0 për arzòlve ës problema.
-Istalassion abortìa.",
-       'config-suhosin-max-value-length' => 'Suhosin a l\'é instalà e a lìmita la longheur dël paràmetr GET a $1 byte. Ël component ResourceLoader ëd MediaWiki a travajerà an rispetand ës lìmit, ma sòn a degraderà le prestassion. Se possìbil, a dovrìa amposté suhosin.get.max_value_lenght a 1024 o pi àut an <code>php.ini</code>, e amposté <code>$wgResourceLoaderMaxQueryLength</code> al midem valor an LocalSettings.php .', # Fuzzy
-       'config-db-type' => 'Sòrt ëd base ëd dàit:',
-       'config-db-host' => 'Ospitant ëd la base ëd dàit:',
-       'config-db-host-help' => "Se sò servent ëd base ëd dàit a l'é su un servent diferent, ch'a anserissa ambelessì ël nòm dl'ospitant o l'adrëssa IP.
-
-S'a deuvra n'ospitalità partagià, sò fornidor d'ospitalità a dovrìa deje ël nòm dl'ospitant giust ant soa documentassion.
-
-Se a anstala su un servent Windows e a deuvra MySQL, dovré «localhost» a podrìa funsioné nen com nòm dël servent. S'a marcia nen, ch'a preuva «127.0.0.1» com adrëssa IP local.
-
-S'a deuvra PostgresSQL, ch'a lassa sto camp bianch për coleghesse a travers un socket UNIX.",
-       'config-db-host-oracle' => 'TNS dla base ëd dàit:',
-       'config-db-host-oracle-help' => "Anserì un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nòm ëd conession local] bon; n'archivi tnsnames.ora a dev esse visìbil da costa anstalassion..<br />S'a deuvra le librarìe cliente 10g o pi neuve a peul ëdcò dovré ël métod ëd nominassion [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
-       'config-db-wiki-settings' => 'Identìfica sta wiki',
-       'config-db-name' => 'Nòm dla base ëd dàit:',
-       'config-db-name-help' => "Ch'a serna un nòm ch'a identìfica soa wiki.
-A dovrìa conten-e gnun ëspassi.
-
-S'a deuvra n'ospitalità partagià, sò fornidor ëd l'ospitalità a-j darà un nòm ëd base ëd dàit specìfich da dovré o a lassrà ch'a lo crea via un panel ëd contròl.",
-       'config-db-name-oracle' => 'Schema dla base ëd dàit:',
-       'config-db-account-oracle-warn' => "A-i é tre possibilità mantnùe për istalé Oracle tanme terminal ëd base ëd dàit:
-
-S'a veul creé un cont ëd base ëd dàit com part dël process d'istalassion, për piasì ch'a fornissa un cont con ël ròl SYSDBA com cont ëd base ëd dàit për l'istalassion e ch'a specìfica le credensiaj vorsùe për ël cont d'acess an sl'aragnà, dësnò a peul ëdcò creé ël cont d'acess an sl'aragnà manualment e mach fornì col cont (se a l'ha ij përmess necessari për creé j'oget dë schema) o fornì doi cont diferent, un con ij privilegi ëd creé e un limità për l'acess an sla Ragnà.
-
-Ij senari për creé un cont con ij privilegi necessari a peul esse trovà ant la cartela «manutension/oracol/» ëd costa istalassion. Ch'a ten-a da ment che dovrand un cont limità a disabiliterà tute le funsion ëd manutension con ël cont predefinì.",
-       'config-db-install-account' => "Cont d'utent për l'instalassion.",
-       'config-db-username' => "Nòm d'utent dla base ëd dàit:",
-       'config-db-password' => 'Ciav dla base ëd dàit:',
-       'config-db-password-empty' => "Për piasì, ch'a anserissa na ciav për ël neuv utent ëd base ëd dàit: $1.
-Con tut ch'a sia possìbil creé d'utent sensa ciav, a l'é pa na ròba sigura.",
-       'config-db-install-username' => "Ch'a nserissa lë stranòm che a sarà dovrà për coleghesse a la base ëd dàit durant ël process d'istalassion.
-Cost-sì a l'é nen lë stranòm dël cont MediaWiki; a l'é lë stranòm për soa base ëd dàit.",
-       'config-db-install-password' => "Ch'a anserissa la ciav che a sarà dovrà për coleghesse a la base ëd dàit durant ël process d'istalassion.
-Costa-sì a l'é nen la ciav dël cont MediaWiki; a l'é la ciav për soa base ëd dàit.",
-       'config-db-install-help' => "Ch'a anserissa lë stranòm d'utent e la ciav che a saran dovrà për coleghesse a la base ëd dàit durant ël process d'instalassion.",
-       'config-db-account-lock' => "Dovré ij midem stranòm d'utent e ciav durant j'operassion normaj",
-       'config-db-wiki-account' => "Cont d'utent për j'operassion normaj",
-       'config-db-wiki-help' => "Ch'a anseriss lë stranòm d'utent e la ciav che a saran dovrà për coleghesse a la base ëd dàit durant j'operassion normaj dla wiki.
-S'ël cont a esist pa, e ël cont d'instalassion a l'ha ij privilegi ch'a-i van, sto cont utent a sarà creà con ij privilegi mìnin për fé marcé la wiki.",
-       'config-db-prefix' => 'Prefiss dle tàule dla base ëd dàit:',
-       'config-db-prefix-help' => "S'a l'ha dabzògn ëd partagé na base ëd dàit an tra vàire wiki, o tra MediaWiki e n'àutra aplicassion dl'aragnà, a peul serne ëd gionté un prefiss a tùit ij nòm ëd le tàule për evité ëd conflit.
-Ch'a deuvra pa dë spassi.
-
-Cost camp a l'é lassà normalment veuid.",
-       'config-db-charset' => 'Ansema dij caràter dla base ëd dàit',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binari',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => "MySQL 4.0 compatìbil a l'andaré con UTF-8",
-       'config-charset-help' => "'''Avis:''' S'a deuvra '''UTF-8 compatìbil a l'andaré''' su MySQL 4.1+, e peui a fa na còpia con <code>mysqldump</code>, a podrìa scancelé tùit ij caràter nen-ASCII, dësbland sensa speranse soe còpie!
-
-An '''manera binaria''', MediaWiki a memorisa ël test UTF-8 an dij camp binari ant la base ëd dàit.
-Sossì a l'é pi eficient che la manera UTF-8 ëd MySQL, e a përmët ëd dovré tut l'ansema ëd caràter Unicode.
-An '''manera UTF-8''', MySQL a arconòss an che ansema ëd caràter a son ij sò dat, e a peul presenteje e convertije apropriatament, ma a-j lassrà pa memorisé ij caràter dzora al [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes pian multilenghe ëd base].",
-       'config-mysql-old' => "A-i é da manca ëd MySQL $1 o pi recent, chiel a l'ha $2.",
-       'config-db-port' => 'Porta dla base ëd dàit:',
-       'config-db-schema' => 'Schema për MediaWiki',
-       'config-db-schema-help' => "Lë schema sì-sota a l'é ëd sòlit giust.
-Ch'a lo cangia mach s'a sa ch'a n'ha da manca.",
-       'config-pg-test-error' => "Impossìbil coleghesse a la base ëd dàit '''$1'''; $2",
-       'config-sqlite-dir' => 'Dossié dij dat SQLite:',
-       'config-sqlite-dir-help' => "SQLite a memorisa tùit ij dat ant n'archivi ùnich.
-
-Ël dossié che chiel a forniss a dev esse scrivìbil dal servent durant l'instalassion.
-
-A dovrìa '''pa''' esse acessìbil da l'aragnà, sossì a l'é për sòn ch'i l'oma pa butalo andova a-i son ij sò file PHP.
-
-L'instalador a scriverà n'archivi <code>.htaccess</code> ansema con chiel, ma se lòn a faliss quaidun a peul intré an soa base ëd dàit originaria.
-Lòn a comprend ij dat brut ëd l'utent (adrëssa ëd pòsta eletrònica, ciav tërbola) e ëdcò le revision scancelà e d'àutri dat segret ëd la wiki.
-
-Ch'a consìdera ëd buté la base ëd dàit tuta antrega da n'àutra part, për esempi an <code>/var/lib/mediawiki/yourwiki</code>.",
-       'config-oracle-def-ts' => 'Spassi dla tàula dë stàndard:',
-       'config-oracle-temp-ts' => 'Spassi dla tàula temporani:',
-       'config-support-info' => "MediaWiki a manten ij sistema ëd base ëd dàit sì-dapress:
-
-$1
-
-S'a vëd pa listà sì-sota ël sistema ëd base ëd dàit ch'a preuva a dovré, antlora va andaré a j'istrussion dl'anliura sì-dzora për abilité ël manteniment.",
-       'config-support-mysql' => "* $1 e l'é l'obietiv primari për MediaWiki e a l'é mej mantnù ([http://www.php.net/manual/en/mysql.installation.php com compilé PHP con ël manteniment MySQL])",
-       'config-support-postgres' => "* $1 e l'é un sistema ëd base ëd dàit popolar a sorgiss duverta com alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php com compilé PHP con ël manteniment ëd PostgreSQL]). A peulo ess-ie chèich cit bigat, e a l'é nen arcomandà ëd dovrelo an n'ambient ëd produssion.",
-       'config-support-sqlite' => "* $1 e l'é un sistema ëd base ëd dàit leger che a l'é motobin bin mantnù ([http://www.php.net/manual/en/pdo.installation.php com compilé PHP con ël manteniment ëd SQLite], a deuvra PDO)",
-       'config-support-oracle' => "* $1 a l'é na base ëd dàit comersial për j'amprèise. ([http://www.php.net/manual/en/oci8.installation.php Com compilé PHP con ël manteniment OCI8])",
-       'config-header-mysql' => 'Ampostassion MySQL',
-       'config-header-postgres' => 'Ampostassion PostgreSQL',
-       'config-header-sqlite' => 'Ampostassion SQLite',
-       'config-header-oracle' => 'Ampostassion Oracle',
-       'config-invalid-db-type' => 'Sòrt ëd ëd base ëd dàit pa bon-a',
-       'config-missing-db-name' => 'A dev buteje un valor për "Nòm ëd la base ëd dàit"',
-       'config-missing-db-host' => 'A dev buteje un valor për "l\'òspit ëd la base ëd dàit"',
-       'config-missing-db-server-oracle' => 'A dev buteje un valor për "TNS ëd la base ëd dat"',
-       'config-invalid-db-server-oracle' => 'TNS ëd la base ëd dat pa bon "$1".
-Dovré mach dle litre ASCII (a-z, A-Z), nùmer (0-9), sotlignadure (_) e pontin (.).',
-       'config-invalid-db-name' => 'Nòm ëd la base ëd dàit pa bon "$1".
-Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9), sotlignadure (_) e tratin (-).',
-       'config-invalid-db-prefix' => 'Prefiss dla base ëd dàit pa bon "$1".
-Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9), sotlignadure (_) e tratin (-).',
-       'config-connection-error' => "$1.
-
-Controla l'ospitant, lë stranòm d'utent e la ciav sì-sota e prové torna.",
-       'config-invalid-schema' => 'Schema pa bon për MediaWiki "$1".
-Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9) e sotlignadure (_).',
-       'config-db-sys-create-oracle' => "L'istalador a arconòss mach ij cont SYSDBA durant la creassion d'un cont neuv.",
-       'config-db-sys-user-exists-oracle' => 'Ël cont utent "$1" a esist già. SYSDBA a peul mach esse dovrà për creé un cont neuv!',
-       'config-postgres-old' => "A-i é da manca ëd PostgreSQL $1 o pi recent, chiel a l'ha $2.",
-       'config-sqlite-name-help' => "Serne un nòm ch'a identìfica soa wiki.
-Dovré nì dë spassi nì ëd tratin.
-Sòn a sarà dovrà për ël nòm ëd l'archivi ëd dat SQLite.",
-       'config-sqlite-parent-unwritable-group' => "As peul pa creesse ël dossié ëd dat <code><nowiki>$1</nowiki></code>, përchè ël dossié a mont <code><nowiki>$2</nowiki></code> a l'é pa scrivìbil dal servent.
-
-L'instalador a l'ha determinà sota che utent a gira sò servent.
-Fé an manera che ël dossié <code><nowiki>$3</nowiki></code> a sia scrivìbil da chiel për continué.
-Su un sistema Unix/Linux buté:
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>",
-       'config-sqlite-parent-unwritable-nogroup' => "As peul pa creesse ël dossié ëd dat <code><nowiki>$1</nowiki></code>, përchè ël dossié a mont <code><nowiki>$2</nowiki></code> a l'é pa scrivìbil dal servent.
-
-L'instalador a peul pa determiné l'utent sota ël qual a gira sò servent.
-Fé an manera che ël dossié <code><nowiki>$3</nowiki></code> a sia scrivìbil globalment da chiel (e da d'àutri) për continué.
-Su un sistema Unix/Linux buté:
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>",
-       'config-sqlite-mkdir-error' => 'Eror an creand ël dossié ëd dat "$1".
-Ch\'a contròla la locassion e ch\'a preuva torna.',
-       'config-sqlite-dir-unwritable' => 'As peul pa scrivse an sël dossié "$1".
-Modifiché ij sò përmess an manera che ël servent a peula scrivje ansima, e prové torna.',
-       'config-sqlite-connection-error' => '$1.
-
-Controlé ël dossié ëd dat e ël nòm ëd la base ëd dàit ambelessì-sota e prové torna.',
-       'config-sqlite-readonly' => "L'archivi <code>$1</code> a l'é nen scrivìbil.",
-       'config-sqlite-cant-create-db' => "As peul pa cresse l'archivi ëd base ëd dàit <code>$1</code>.",
-       'config-sqlite-fts3-downgrade' => "PHP a l'ha pa ël supòrt ëd FTS3, le tàule a son degradà",
-       'config-can-upgrade' => "A-i é dle tàule MediaWiki an costa base ëd dàit.
-Për agiorneje a MediaWiki $1, ch'a sgnaca su '''Continué'''.",
-       'config-upgrade-done' => "Agiornament completà.
-
-Adess a peule [$1 ancaminé a dovré soa wiki].
-
-S'a veul generé torna sò archivi <code>LocalSettings.php</code>, ch'a sgnaca ël boton sì-sota.
-Sòn a l'è '''pa arcomandà''' gavà ch'a rancontra dij problema con soa wiki.",
-       'config-upgrade-done-no-regenerate' => 'Agiornament complet.
-
-It peule adess [$1 ancaminé a dovré toa wiki].',
-       'config-regenerate' => 'Generé torna LocalSettings.php →',
-       'config-show-table-status' => 'Arcesta <code>SHOW TABLE STATUS</code> falìa!',
-       'config-unknown-collation' => "'''Avis:''' La base ëd dàit a deuvra na classificassion pa arconossùa.",
-       'config-db-web-account' => "Cont dla base ëd dàit për l'acess a l'aragnà",
-       'config-db-web-help' => "Ch'a selession-a lë stranòm d'utent e la ciav che ël servent ëd l'aragnà a dovrërà për coleghesse al servent dle base ëd dàit, durant j'operassion ordinarie dla wiki.",
-       'config-db-web-account-same' => "Ch'a deuvra ël midem cont com për l'istalassion",
-       'config-db-web-create' => "Crea ël cont se a esist pa anco'",
-       'config-db-web-no-create-privs' => "Ël cont ch'a l'ha specificà për l'instalassion a l'ha pa basta 'd privilegi për creé un cont.
-Ël cont ch'a spessìfica ambelessì a dev già esiste.",
-       'config-mysql-engine' => 'Motor ëd memorisassion:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Avis''': A l'ha selessionà MyISAM com motor ëd memorisassion për MySQL, che a l'é pa arcomandà da dovré con MediaWiki, përchè:
-* a sopòrta a pen-a la contemporanità për via ëd saradure ëd tàula
-* a l'é pi soget a la corussion che j'àutri motor
-* ël còdes bas ëd MediaWiki pa sempe a gestiss MyISAM com a dovrìa
-
-Se soa istalassion MySQL a manten InnoDB, a l'é fortement arcomandà ch'a serna pitòst col-lì.
-Se soa istalassion MySQL a manten nen InnoDB, a peul esse ch'a sia ël moment ëd n'agiornament.",
-       'config-mysql-engine-help' => "'''InnoDB''' a l'é scasi sempe la mej opsion, da già ch'a l'ha un bon manteniment dla concorensa.
-
-'''MyISAM''' a peul esse pi lest an instalassion për n'utent sol o mach an letura.
-La base ëd dàit MyISAM a tira a corompse pi 'd soens che la base ëd dàit InnoDB.",
-       'config-mysql-charset' => 'Ansem ëd caràter dla base ëd dàit:',
-       'config-mysql-binary' => 'Binari',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "An '''manera binaria''', MediaWiki a memorisa ël test UTF-8 ant la base ëd dàit an camp binari.
-Sòn a l'é pi eficient che la manera UTF-8 ëd MySQL, e a-j përmët ëd dovré l'ansema antregh ëd caràter Unicode.
-
-An '''manera UTF-8''', MySQL a conossrà an che ansem ëd caràter a son ij sò dat, e a peul presenteje e convertije apropriatament, ma a-j lassa pa memorisé ij caràter ëdzora al [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes pian multilenghìstich ëd base].",
-       'config-site-name' => 'Nòm ëd la wiki:',
-       'config-site-name-help' => "Sòn a comparirà ant la bara dël tìtol dël navigador e an vàire d'àutri pòst.",
-       'config-site-name-blank' => "Ch'a buta un nòm ëd sit.",
-       'config-project-namespace' => 'Spassi nominal dël proget:',
-       'config-ns-generic' => 'Proget',
-       'config-ns-site-name' => 'Midem com ël nom dla wiki: $1',
-       'config-ns-other' => 'Àutr (specìfica)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-project-namespace-help' => "Andasend daré a l'esempi ëd Wikipedia, vàire wiki a manten-o soe pàgine ëd regolament separà da soe pàgine ëd contnù, ant në \"'''spassi nominal ëd proget'''\".
-Tùit ij tìtoj ëd pàgina ant cost ëspassi nominal a parto con un sert prefiss, che a peul specifiché ambelessì.
-Tradissionalment, sto prefiss a l'é derivà dal nòm ëd la wiki, ma a peul pa conten-e caràter ëd pontegiatura coma \"#\" o \":\".",
-       'config-ns-invalid' => 'Lë spassi nominal specificà "<nowiki>$1</nowiki>" a l\'é pa bon.
-Specìfica në spassi nominal ëd proget diferent.',
-       'config-ns-conflict' => 'Lë spassi nominal specificà "<nowiki>$1</nowiki>" a và contra në spassi nominal predefinì ëd MediaWiki.
-Specìfica në spassi nominal ëd proget diferent.',
-       'config-admin-box' => "Cont ëd l'Aministrator",
-       'config-admin-name' => 'Tò nòm:',
-       'config-admin-password' => 'Ciav:',
-       'config-admin-password-confirm' => 'Buté torna la ciav:',
-       'config-admin-help' => "Ch'a butà ambelessì tò stranòm d'utent preferì, për esempi \"Gioann Scriv\".
-Cost-sì a l'é lë stranòm ch'a dovrërà për intré ant la wiki.",
-       'config-admin-name-blank' => "Ch'a anserissa në stranòm d'aministrator.",
-       'config-admin-name-invalid' => 'Ël nòm utent specificà "<nowiki>$1</nowiki>" a l\'é pa bon.
-Specìfica un nòm utent diferent.',
-       'config-admin-password-blank' => "Ch'a anserissa na ciav për ël cont d'aministrator.",
-       'config-admin-password-same' => "La ciav a dev nen esse l'istessa ëd lë stranòm d'utent.",
-       'config-admin-password-mismatch' => "Le doe ciav che a l'ha scrivù a son diferente antra 'd lor.",
-       'config-admin-email' => 'Adrëssa ëd pòsta eletrònica:',
-       'config-admin-email-help' => "Ch'a anserissa ambelessì n'adrëssa ëd pòsta eletrònica për përmëtt-je d'arsèive ëd mëssagi da d'àutri utent an sla wiki, riamposté soa ciav, e esse anformà dle modìfiche a le pàgine ch'a ten sot-euj. A peule lassé ës camp veuid.",
-       'config-admin-error-user' => 'Eror antern an creand n\'aministrator con lë stranòm "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'Eror antern an ampostand na ciav për l\'admin "<nowiki>$1</nowiki>": <pre>$2</pre>',
-       'config-admin-error-bademail' => "A l'ha butà n'adrëssa ëd pòsta eletrònica pa bon-a.",
-       'config-subscribe' => "Ch'a sot-scriva la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista ëd discussion ëd j'anonsi ëd publicassion].",
-       'config-subscribe-help' => "Costa a l'é na lista ëd discussion a bass tràfich dovrà për j'anonsi ëd publicassion, comprèis d'amportant anonsi ëd sicurëssa.
-A dovrìa sot-ëscrivla e agiorné soa instalassion mediaWiki quand che ëd version neuve a rivo.",
-       'config-subscribe-noemail' => "A l'ha provà a abonesse a la lista ëd difusion dij comunicà sensa dé n'adrëssa ëd pòsta eletrònica.
-Për piasì, ch'a fornissa n'adrëssa ëd pòsta eletrònica s'a veul abonesse a la lista ëd pòsta.",
-       'config-almost-done' => "A l'ha bele che fàit!
-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 duverta',
-       'config-profile-no-anon' => 'A venta creé un cont',
-       'config-profile-fishbowl' => 'Mach editor autorisà',
-       'config-profile-private' => 'Wiki privà',
-       'config-profile-help' => "Le wiki a marcio mej quand ch'a lassa che pì përsone possìbij a-j modìfico.
-An MediaWiki, a l'é bel fé revisioné j'ùltime modìfiche, e buté andré qualsëssìa dann che a sia fàit da dj'utent noviss o malissios.
-
-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à.
-
-Ë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 contributor ocasionaj.
-
-Ë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.
-Un '''{{int:config-profile-private}}''' a përmët mach a j'utent aprovà ëd vëdde le pàgine, con la midema partìa ch'a peul modifiché.
-
-Configurassion ëd drit d'utent pi complicà a son disponìbij apress l'instalassion, vëdde la [//www.mediawiki.org/wiki/Manual:User_rights pàgina a pòsta dël manual].",
-       'config-license' => "Drit d'autor e licensa",
-       'config-license-none' => 'Gnun-a licensa an nòta an bass',
-       'config-license-cc-by-sa' => 'Creative Commons atribussion an part uguaj',
-       'config-license-cc-by' => 'Creative Commons Attribution',
-       'config-license-cc-by-nc-sa' => 'Creative Commons atribussion nen comersial an part uguaj',
-       'config-license-cc-0' => 'Creative Commons Zero (domini pùblich)',
-       'config-license-gfdl' => 'Licensa GNU Free Documentation 1.3 o pi neuva',
-       'config-license-pd' => 'Domini Pùblich',
-       'config-license-cc-choose' => 'Selessioné na licensa Creative Commons përsonalisà',
-       'config-license-help' => "Vàire wiki pùbliche a buto tute le contribussion sota na [http://freedomdefined.org/Definition licensa lìbera]. Sòn a giuta a creé un sens d'apartenensa a la comunità e a ancoragia ëd contribussion ëd longa durà.
-A l'é generalment nen necessari për na wiki privà o d'asienda.
-
-S'a veul podèj dovré dij test da Wikipedia, e a veul che Wikipedia a aceta dij test copià da soa wiki, a dovrìa serne '''Creative Commons Attribution Share Alike'''.
-
-Wikipedia prima a dovrava la GNU Free Documentation License.
-La GDFL a l'é anco' na licensa bon-a, ma a l'é malfé da capila.
-A l'é ëdcò mal fé riutilisé dël contnù licensià sota la GDFL.",
-       'config-email-settings' => 'Ampostassion ëd pòsta eletrònica',
-       'config-enable-email' => 'Abilité ij mëssagi ëd pòsta eletrònica an surtìa',
-       'config-enable-email-help' => "S'a veul che la pòsta eletrònica a marcia, j'[http://www.php.net/manual/en/mail.configuration.php ampostassion ëd pòsta eletrònica PHP] a devo esse configurà për da bin.
-S'a veul pa 'd funsion ëd pòsta eletrònica, a dev disabiliteje ambelessì.",
-       'config-email-user' => 'Abilité ij mëssagi ëd pòsta eletrònica da utent a utent',
-       'config-email-user-help' => "A përmët a tùit j'utent ëd mandesse ëd mëssagi ëd pòsta eletrònica se lor a l'han abilità sòn an soe preferense.",
-       'config-email-usertalk' => "Abilité notìfica dle pàgine ëd discussion dj'utent",
-       'config-email-usertalk-help' => "A përmët a j'utent d'arsèive na notìfica dle modìfiche dle pàgine ëd discussion d'utent, s'a l'han abilitalo ant soe preferense.",
-       'config-email-watchlist' => "Abilité la notìfica ëd lòn ch'as ten sot euj",
-       'config-email-watchlist-help' => "A përmët a j'utent d'arsèive dle notificassion a propòsit dle pàgine ch'a ten-o sot euj s'a l'han abilitalo ant soe preferense.",
-       'config-email-auth' => "Abilité l'autenticassion për pòsta eletrònica",
-       'config-email-auth-help' => "Se st'opsion a l'é abilità, j'utent a devo confirmé soe adrësse ëd pòsta eletrònica an dovrand un colegament mandà a lor quand ch'a l'han ampostala o cambiala.
-Mach j'adrësse ëd pòsta eletrònica autenticà a peulo arsèive ëd mëssagi da j'àutri utent o cangé adrëssa ëd notìfica.
-Amposté st'opsion a l'é '''arcomandà''' për le wiki pùbliche a càusa ëd possìbij abus ëd le funsion ëd pòsta eletrònica.",
-       'config-email-sender' => 'Adrëssa ëd pòsta eletrònica ëd ritorn:',
-       'config-email-sender-help' => "Ch'a anserissa l'adrëssa ëd pòsta eletrònica da dovré com adrëssa d'artorn dij mëssagi an surtìa.
-Ambelessì a l'é andova j'arspòste a saran mandà.
-Motobin ëd servent ëd pòsta a ciamo che almanch la part dël nòm ëd domini a sia bon-a.",
-       'config-upload-settings' => 'Cariament ëd figure e archivi',
-       'config-upload-enable' => "Abilité ël cariament d'archivi",
-       'config-upload-help' => "Carié d'archivi potensialment a espon sò servent a d'arzigh ëd sicurëssa.
-Per pi d'anformassion, ch'a lesa la [//www.mediawiki.org/wiki/Manual:Security session ëd sicurëssa] d'ës manual.
-
-Për abilité ël cariament d'archivi, ch'a modìfica la manera dël sot-dossié dle <code>figure</code> sota al dossié rèis ëd MediaWiki an manera che ël servent dl'aragnà a peussa scrivlo.
-Peui ch'a abìlita costa opsion.",
-       'config-upload-deleted' => "Dossié për j'archivi scancelà:",
-       'config-upload-deleted-help' => "ch'a serna un dossié andova goerné j'archivi scancelà.
-Idealment, sòn a dovrìa pa esse acessìbil an sl'aragnà.",
-       'config-logo' => 'Anliura dla marca:',
-       'config-logo-help' => "La pel dë stàndard ëd MediaWiki a comprend lë spassi për na marca ëd 135x160 pontin dzora la lista dla bara lateral.
-Ch'a dëscaria na figura ëd la dimension aproprià, e ch'a anserissa l'anliura ambelessì.
-
-S'a veul gnun-e marche, ch'a lassa ës camp bianch.", # Fuzzy
-       'config-instantcommons' => 'Abìlita Instant Commons',
-       'config-instantcommons-help' => "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] a l'é na funsion ch'a përmët a le wiki ëd dovré dle figure, dij son e d'àutri mojen trovà an sël sit [//commons.wikimedia.org/ Wikimedia Commons].
-Për dovré sossì, MediaWiki a l'ha da manca dl'acess a la ragnà.
-
-Për pi d'anformassion su sta funsion, comprèise j'istrussion ëd com ampostela për wiki diferente da Wikimedia Commons, ch'a consulta [//mediawiki.org/wiki/Manual:\$wgForeignFileRepos ël manual].",
-       'config-cc-error' => "La selession ëd la licensa Creative Commons a l'ha dàit gnun arzultà.
-Ch'a anserissa ël nòm dla licensa a man.",
-       'config-cc-again' => 'Torna cheuje...',
-       'config-cc-not-chosen' => 'Sern che licensa Creative Commons it veule e sgnaca "anans".',
-       'config-advanced-settings' => 'Configurassion avansà',
-       'config-cache-options' => "Ampostassion për la memorisassion local d'oget:",
-       'config-cache-help' => "La memorisassion loca d'oget a l'é dovrà për amelioré l'andi ëd MediaWiki an butant an local dij dat dovrà 'd soens.
-Ij sit da mesan a gròss a son motobin ancoragià a abilité sòn, e ij sit cit a l'avran ëdcò dij benefissi.",
-       'config-cache-none' => "Gnun-a memorisassion local (gnun-a funsionalità gavà, ma l'andi a peul esse anfluensà an sij sit ëd wiki gròsse)",
-       'config-cache-accel' => "Memorisassion local d'oget PHP (APC, XCache o WinCache)",
-       'config-cache-memcached' => "Dovré Memcached (a ciama n'ampostassion e na configurassion adissionaj)",
-       'config-memcached-servers' => 'Servent Memcached:',
-       'config-memcached-help' => "Lista d'adrësse IP da dovré për Memcached.
-A dovrìa specifichene un-a për linia e specifiché la pòrta da dovré. Për esempi:
-127.0.0.1:11211
-192.168.1.25:11211",
-       'config-memcache-needservers' => "A l'ha selessionà Memcached com soa sòrt ëd memorisassion local ma a l'ha specificà gnun servent.",
-       'config-memcache-badip' => "It l'ha anserì n'adrëssa IP pa bon-a për Memcached: $1.",
-       'config-memcache-noport' => "A l'ha pa specificà na pòrta da dovré për ël servent Memcached: $1.
-S'a conòsse nen la pòrta, cola predefinìa a l'é 11211.",
-       'config-memcache-badport' => 'Ij nùmer ëd pòrta ëd Memcached a dovrìo esse tra $1 e $2.',
-       'config-extensions' => 'Estension',
-       'config-extensions-help' => "J'estension listà dì-sota a son ëstàite trovà ant sò dossié <code>./extensions</code>.
-
-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 su «{{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",
-       'config-install-database' => 'Creassion ëd la base ëd dàit',
-       'config-install-schema' => 'Creassion dë schema',
-       'config-install-pg-schema-not-exist' => 'Lë schema postgreSQL a esist pa.',
-       'config-install-pg-schema-failed' => 'Creassion dle tàule falìa.
-Sigurte che l\'utent "$1" a peussa scrive lë schema "$2".',
-       'config-install-pg-commit' => 'Salvé ij cambi.',
-       'config-install-pg-plpgsql' => 'Contròl dël langagi PL/pgSQL',
-       'config-pg-no-plpgsql' => 'A dev istalé ël langage PL/pgSQL ant la base ëd dàit $1',
-       'config-pg-no-create-privs' => "Ël cont ch'a l'ha specificà për l'istalassion a l'ha pa basta 'd privilegi për creé un cont.",
-       'config-pg-not-in-role' => "Ël cont ch'a l'ha specificà për l'utent ëd la ragnà a esist già.
-Ël cont ch'a l'has specificà për l'istalassion a l'é pa un superutent e a l'é pa un mémber dla partìa dj'utent dla Ragnà, parèj a peul pa creé dj'oget ch'a apartenent a l'utent dla Ragnà.
-
-MediaWiki al moment a ciama che le tàule a sia possedùe da n'utent dla Ragnà. Për piasì, ch'a specìfica n'àutr nòm ëd cont dla Ragnà, o ch'a sgnaca ansima a \"andré\" e ch'a specìfica n'utent ch'a l'ha ij privilegi ch'a basto për l'anstalassion.",
-       'config-install-user' => "Creassion ëd n'utent ëd la base ëd dàit",
-       'config-install-user-alreadyexists' => 'L\'utent "$1" a esist già',
-       'config-install-user-create-failed' => "Faliment ant la creassion ëd l'utent «$1»: $2",
-       'config-install-user-grant-failed' => 'Falì a dé ij përmess a l\'utent "$1": $2',
-       'config-install-user-missing' => 'L\'utent specificà "$1" a esist pa.',
-       'config-install-user-missing-create' => "L'utent specificà «$1» a esist pa.
-Për piasì, ch'a selession-a la casela «cont da creé» sì-sota s'a veul creelo.",
-       'config-install-tables' => 'Creassion dle tàule',
-       'config-install-tables-exist' => "'''Avis''': A smija che le tàule ëd mediaWiki a esisto già.
-Sauté la creassion.",
-       'config-install-tables-failed' => "'''Eror''': Creassion ëd le tàule falìa con l'eror sì-dapress: $1",
-       'config-install-interwiki' => "Ampiniment dë stàndard ëd le tàule dj'anliure interwiki",
-       'config-install-interwiki-list' => "As peul pa trovesse l'archivi <code>interwiki.list</code>.",
-       'config-install-interwiki-exists' => "'''Avis''': La tàula interwiki a smija ch'a l'abia già dj'element.
-Për stàndard, la lista a sarà sautà.",
-       'config-install-stats' => 'Inissialisassion dle statìstiche',
-       'config-install-keys' => 'Generassion ëd le ciav segrete',
-       'config-insecure-keys' => "'''Avis:''' {{PLURAL:$2|Na ciav sigura|Dle ciav sigure}} ($1) generà durant l'istalassion {{PLURAL:$2|a l'é|a son}} pa completament sigure. Ch'a consìdera ëd modifiche{{PLURAL:$2|la|je}} manualment.",
-       'config-install-sysop' => "Creassion dël cont ëd l'utent aministrator",
-       'config-install-subscribe-fail' => 'As peul pa sot-scrivse mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => "cURL a l'é pa istalà e allow_url_fopen a l'é pa disponìbil.",
-       'config-install-mainpage' => 'Creassion ëd la pàgina prinsipal con un contnù predefinì',
-       'config-install-extension-tables' => "Creassion ëd tàule për j'estension abilità",
-       'config-install-mainpage-failed' => 'As peul pa inserisse la pàgina prinsipal: $1',
-       'config-install-done' => "'''Congratulassion!'''
-A l'ha instalà për da bin mediaWiki.
-
-L'instalador a l'ha generà n'archivi <code>LocalSettings.php</code>.
-A conten tuta soa configurassion.
-
-A dovrà dëscarielo e butelo ant la bas ëd l'instalassion ëd soa wiki (ël midem dossié d'index.php). La dëscaria a dovrìa esse ancaminà automaticament.
-
-Se la dëscaria a l'é pa disponìbil, o s'a l'ha scancelala, a peul torna ancaminé la dëscaria an sgnacand an sla liura sì-sota:
-
-$3
-
-'''Nòta''': S'a lo fa nen adess, cost archivi ëd configurassion generà a sarà pa disponìbil për chiel pi tard s'a chita l'instalassion sensa dëscarielo.
-
-Quand che a l'é stàit fàit, a peul '''[$2 intré an soa wiki]'''.",
-       'config-download-localsettings' => 'Dëscarié <code>LocalSettings.php</code>',
-       'config-help' => 'agiut',
-       'config-nofile' => "L'archivi «$1» as treuva nen. A l'é stàit ëscancelà?",
-       'mainpagetext' => "'''MediaWiki a l'é staita anstalà a la përfession.'''",
-       'mainpagedocfooter' => "Che a varda la [//meta.wikimedia.org/wiki/Help:Contents User's Guide] për avèj dj'anformassion ant sël coma dovré ël programa dla wiki.
-
-== Për anandiesse a travajé ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista dij paràmeter ëd configurassion]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki Chestion frequente]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista ëd discussion an sla distribussion ëd MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localisa MediaWiki për toa lenga]",
-);
-
-/** Pontic (Ποντιακά)
- * @author Sinopeus
- */
-$messages['pnt'] = array(
-       'mainpagetext' => "'''To λογισμικόν MediaWiki εθέκεν.'''",
-);
-
-/** Prussian (Prūsiskan)
- * @author Nertiks
- */
-$messages['prg'] = array(
-       'mainpagetext' => "'''MediaWiki's instalaciōni izpalla.'''",
-       'mainpagedocfooter' => 'Wīdais [//meta.wikimedia.org/wiki/Help:Contents przewodnik użytkownika] kāi gaūlai infōrmaciōnei ezze wiki prōgramijas tērpausnan.
-
-== En pagaūseņu ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]', # Fuzzy
-);
-
-/** Pashto (پښتو)
- * @author Ahmed-Najib-Biabani-Ibrahimkhel
- */
-$messages['ps'] = array(
-       'config-information' => 'مالومات',
-       'config-your-language' => 'ستاسې ژبه:',
-       'config-wiki-language' => 'د ويکي ژبه:',
-       'config-page-language' => 'ژبه',
-       'config-page-welcome' => 'مېډياويکي ته ښه راغلاست!',
-       'config-page-name' => 'نوم',
-       'config-page-options' => 'خوښنې',
-       'config-page-install' => 'لگول',
-       'config-page-complete' => 'بشپړ!',
-       'config-env-php' => 'د $1 PHP نصب شو.',
-       'config-db-type' => 'د توکبنسټ ډول:',
-       'config-db-host' => 'د توکبنسټ کوربه:',
-       'config-db-host-oracle' => 'د توکبنسټ TNS:',
-       'config-db-name' => 'د توکبنسټ نوم:',
-       'config-db-username' => 'د توکبنسټ کارن-نوم:',
-       'config-db-password' => 'د توکبنسټ پټنوم:',
-       'config-header-mysql' => 'د MySQL امستنې',
-       'config-header-postgres' => 'د PostgreSQL امستنې',
-       'config-header-sqlite' => 'د SQLite امستنې',
-       'config-header-oracle' => 'د اورېکل امستنې',
-       'config-sqlite-readonly' => 'د <code>$1</code> دوتنه د ليکلو وړ نه ده.',
-       'config-sqlite-cant-create-db' => 'د توکبنسټ دوتنه <code>$1</code> جوړه نه شوه.',
-       'config-site-name' => 'د ويکي نوم:',
-       'config-site-name-blank' => 'د وېبځي نوم وليکۍ.',
-       'config-project-namespace' => 'د پروژې نوم-تشيال:',
-       'config-ns-generic' => 'پروژه',
-       'config-admin-box' => 'د پازوال گڼون',
-       'config-admin-name' => 'ستاسې نوم:',
-       'config-admin-password' => 'پټنوم:',
-       'config-admin-password-confirm' => 'پټنوم يو ځل بيا:',
-       'config-admin-email' => 'برېښليک پته:',
-       'config-profile-wiki' => 'پرانيستې ويکي',
-       'config-license-pd' => 'ټولگړی شپول',
-       'config-email-settings' => 'د برېښليک امستنې',
-       'config-install-step-done' => 'ترسره شو',
-       'config-install-tables' => 'لښتيالونه جوړول',
-       'config-help' => 'لارښود',
-       'mainpagetext' => "'''MediaWiki په برياليتوب سره نصب شو.'''",
-       'mainpagedocfooter' => 'د ويکي ساوترې د کارولو د  مالوماتو په اړه [//meta.wikimedia.org/wiki/Help:Contents د کارن لارښود] سره سلا وکړۍ.
-
-== پيلول ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings د امستنو د سازونې لړليک]
-* [//www.mediawiki.org/wiki/Manual:FAQ د ميډياويکي ډېرځليزې پوښتنې]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce د مېډياويکي د برېښليکونو لړليک]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources خپلې ژبې لپاره MediaWiki ځايتابول]',
-);
-
-/** Portuguese (português)
- * @author Crazymadlover
- * @author Hamilton Abreu
- * @author Luckas
- * @author Mormegil
- * @author Platonides
- * @author SandroHc
- * @author Waldir
- * @author 아라
- * @author 555
- */
-$messages['pt'] = array(
-       'config-desc' => 'O instalador do MediaWiki',
-       'config-title' => 'Instalação MediaWiki $1',
-       'config-information' => 'Informação',
-       'config-localsettings-upgrade' => 'Foi detectado um ficheiro <code>LocalSettings.php</code>.
-Para atualizar esta instalação, por favor introduza o valor de <code>$wgUpgradeKey</code> na caixa abaixo.
-Encontra este valor no <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Foi detectada a existência de um ficheiro <code>LocalSettings.php</code>.
-Para atualizar esta instalação execute o <code>update.php</code>, por favor.',
-       'config-localsettings-key' => 'Chave de atualização:',
-       'config-localsettings-badkey' => 'A chave que forneceu está incorreta.',
-       'config-upgrade-key-missing' => 'Foi detectada uma instalação existente do MediaWiki.
-Para atualizar esta instalação, por favor coloque a seguinte linha no final do seu <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => 'O ficheiro <code>LocalSettings.php</code> existente parece estar incompleto.
-A variável $1 não está definida.
-Por favor defina esta variável no <code>LocalSettings.php</code> e clique "{{int:Config-continue}}".',
-       'config-localsettings-connection-error' => 'Ocorreu um erro ao ligar à base de dados usando as configurações especificadas no <code>LocalSettings.php</code> ou <code>AdminSettings.php</code>. Por favor corrija essas configurações e tente novamente.
-
-$1',
-       'config-session-error' => 'Erro ao iniciar a sessão: $1',
-       'config-session-expired' => 'Os seus dados de sessão parecem ter expirado.
-As sessões estão configuradas para uma duração de $1.
-Pode aumentar esta duração configurando <code>session.gc_maxlifetime</code> no php.ini.
-Reinicie o processo de instalação.',
-       'config-no-session' => 'Os seus dados de sessão foram perdidos!
-Verifique o seu php.ini e certifique-se de que em <code>session.save_path</code> está definido um diretório apropriado.',
-       'config-your-language' => 'A sua língua:',
-       'config-your-language-help' => 'Selecione a língua que será usada durante o processo de instalação.',
-       'config-wiki-language' => 'Língua da wiki:',
-       'config-wiki-language-help' => 'Selecione a língua que será predominante na wiki.',
-       'config-back' => '← Voltar',
-       'config-continue' => 'Continuar →',
-       'config-page-language' => 'Língua',
-       'config-page-welcome' => 'Bem-vindo(a) ao MediaWiki!',
-       'config-page-dbconnect' => 'Ligar à base de dados',
-       'config-page-upgrade' => 'Atualizar a instalação existente',
-       'config-page-dbsettings' => 'Configurações da base de dados',
-       'config-page-name' => 'Nome',
-       'config-page-options' => 'Opções',
-       'config-page-install' => 'Instalar',
-       'config-page-complete' => 'Terminado!',
-       'config-page-restart' => 'Reiniciar a instalação',
-       'config-page-readme' => 'Leia-me',
-       'config-page-releasenotes' => 'Notas de lançamento',
-       'config-page-copying' => 'A copiar',
-       'config-page-upgradedoc' => 'Atualizando',
-       'config-page-existingwiki' => 'Wiki existente',
-       'config-help-restart' => 'Deseja limpar todos os dados gravados que introduziu e reiniciar o processo de instalação?',
-       'config-restart' => 'Sim, reiniciar',
-       'config-welcome' => '=== Verificações do ambiente ===
-São realizadas verificações básicas para determinar se este ambiente é apropriado para instalação do MediaWiki.
-Se necessitar de pedir ajuda durante a instalação, deve fornecer os resultados destas verificações.', # Fuzzy
-       'config-copyright' => "=== Direitos de autor e Condições de uso ===
-
-$1
-
-Este programa é software livre; pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.
-
-Este programa é distribuído na esperança de que seja útil, mas '''sem qualquer garantia'''; inclusive, sem a garantia implícita da '''possibilidade de ser comercializado''' ou de '''adequação para qualquer finalidade específica'''.
-Consulte a licença GNU General Public License para mais detalhes.
-
-Em conjunto com este programa deve ter recebido <doclink href=Copying>uma cópia da licença GNU General Public License</doclink>; se não a recebeu, peça-a por escrito a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [http://www.gnu.org/copyleft/gpl.html leia-a na internet].",
-       'config-sidebar' => '* [//www.mediawiki.org/wiki/MediaWiki/pt Página principal do MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents/pt Ajuda]
-* [//www.mediawiki.org/wiki/Manual:Contents/pt Manual técnico]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]
-----
-* <doclink href=Readme>Leia-me</doclink>
-* <doclink href=ReleaseNotes>Notas de lançamento</doclink>
-* <doclink href=Copying>Cópia</doclink>
-* <doclink href=UpgradeDoc>Atualização</doclink>',
-       'config-env-good' => 'O ambiente foi verificado.
-Pode instalar o MediaWiki.',
-       'config-env-bad' => 'O ambiente foi verificado.
-Não pode instalar o MediaWiki.',
-       'config-env-php' => 'O PHP $1 está instalado.',
-       'config-env-php-toolow' => 'O PHP $1 está instalado.
-No entanto, o MediaWiki requer o PHP $2 ou superior.',
-       'config-unicode-using-utf8' => 'A usar o utf8_normalize.so, por Brion Vibber, para a normalização Unicode.',
-       'config-unicode-using-intl' => 'A usar a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.',
-       'config-unicode-pure-php-warning' => "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode. Irá recorrer-se à implementação em PHP puro, que é mais lenta.
-Se o seu site tem alto volume de tráfego, devia informar-se um pouco sobre a [//www.mediawiki.org/wiki/Unicode_normalization_considerations/pt normalização Unicode].",
-       'config-unicode-update-warning' => "'''Aviso''': A versão instalada do wrapper de normalização Unicode usa uma versão mais antiga da biblioteca do [http://site.icu-project.org/ projeto ICU].
-Devia [//www.mediawiki.org/wiki/Unicode_normalization_considerations atualizá-la] se tem quaisquer preocupações sobre o uso do Unicode.",
-       'config-no-db' => "Não foi possível encontrar um controlador ''(driver)'' apropriado para a base de dados! Precisa de instalar um controlador para o PHP. São aceites os seguintes tipos de base de dados: $1.
-
-Se usa alojamento partilhado, peça ao fornecedor do alojamento para instalar um controlador apropriado.
-Se foi você quem compilou o PHP, reconfigure-o com um cliente de base de dados ativado; por exemplo, usando <code>./configure --with-mysql</code>.
-Se instalou o PHP a partir de um pacote Debian ou Ubuntu, então precisa de instalar também o módulo php5-mysql.",
-       'config-outdated-sqlite' => "'''Aviso''': Tem a versão $1 do SQLite, que é anterior à versão mínima necessária, a $2. O SQLite não estará disponível.",
-       'config-no-fts3' => "'''Aviso''': O SQLite foi compilado sem o módulo [//sqlite.org/fts3.html FTS3]; as funcionalidades de pesquisa não estarão disponíveis nesta instalação.",
-       'config-register-globals' => "'''Aviso: A opção <code>[http://php.net/register_globals register_globals]</code> do PHP está ativada.'''
-'''Desative-a, se puder.'''
-O MediaWiki funciona mesmo assim, mas o seu servidor está exposto a potenciais vulnerabilidades de segurança.",
-       'config-magic-quotes-runtime' => "'''Fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está ativada!'''
-Esta opção causa corrupção dos dados de entrada, de uma forma imprevisível.
-Não pode instalar ou usar o MediaWiki a menos que esta opção seja desativada.",
-       'config-magic-quotes-sybase' => "'''Fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está ativada!'''
-Esta opção causa corrupção dos dados de entrada, de uma forma imprevisível.
-Não pode instalar ou usar o MediaWiki a menos que esta opção seja desativada.",
-       'config-mbstring' => "'''Fatal: A opção [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está ativada!'''
-Esta opção causa erros e pode corromper os dados de uma forma imprevisível.
-Não pode instalar ou usar o MediaWiki a menos que esta opção seja desativada.",
-       'config-ze1' => "'''Fatal: A opção [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] está ativada!'''
-Esta opção causa problemas significativos no MediaWiki.
-Não pode instalar ou usar o MediaWiki a menos que esta opção seja desativada.",
-       'config-safe-mode' => "'''Aviso:''' O [http://www.php.net/features.safe-mode safe mode] do PHP está ativo.
-Este modo pode causar problemas, especialmente no upload de ficheiros e no suporte a <code>math</code>.",
-       'config-xml-bad' => 'Falta o módulo XML do PHP.
-O MediaWiki necessita de funções deste módulo e não funcionará com esta configuração.
-Se está a executar o Mandrake, instale o pacote php-xml.',
-       'config-pcre' => 'Parece faltar o módulo de suporte PCRE.
-Para funcionar, o MediaWiki necessita das funções de expressões regulares compatíveis com Perl.',
-       'config-pcre-no-utf8' => "'''Fatal''': O módulo PCRE do PHP parece ter sido compilado sem suporte PCRE_UTF8.
-O MediaWiki necessita do suporte UTF-8 para funcionar corretamente.",
-       'config-memory-raised' => 'A configuração <code>memory_limit</code> do PHP era $1; foi aumentada para $2.',
-       'config-memory-bad' => "'''Aviso:''' A configuração <code>memory_limit</code> do PHP é $1.
-Isto é provavelmente demasiado baixo.
-A instalação poderá falhar!",
-       'config-ctype' => "'''Fatal''': O PHP tem de ser compilado com suporte para a [http://www.php.net/manual/en/ctype.installation.php extensão Ctype].",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] instalada',
-       'config-apc' => '[http://www.php.net/apc APC] instalada',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] instalada',
-       'config-no-cache' => "'''Aviso:''' Não foi possível encontrar: [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache], nem [http://www.iis.net/download/WinCacheForPhp WinCache].
-A cache de objetos não está ativada.",
-       'config-mod-security' => "'''Aviso''': O seu servidor de internet tem o [http://modsecurity.org/ mod_security] ativado. Se este estiver mal configurado, pode causar problemas ao MediaWiki ou a outros programas, permitindo que os utilizadores publiquem conteúdos arbitrários.
-Consulte a [http://modsecurity.org/documentation/ mod_security documentação] ou peça apoio ao fornecedor do alojamento do seu servidor se encontrar erros aleatórios.",
-       'config-diff3-bad' => 'O GNU diff3 não foi encontrado.',
-       'config-imagemagick' => 'Foi encontrado o ImageMagick: <code>$1</code>.
-Se possibilitar uploads, a miniaturização de imagens será ativada.',
-       'config-gd' => 'Foi encontrada a biblioteca gráfica GD.
-Se possibilitar uploads, a miniaturização de imagens será ativada.',
-       'config-no-scaling' => 'Não foi encontrada a biblioteca gráfica GD nem o ImageMagick.
-A miniaturização de imagens será desativada.',
-       'config-no-uri' => "'''Erro:''' Não foi possível determinar a URI atual.
-A instalação foi abortada.",
-       'config-no-cli-uri' => "'''Aviso''':  Não foi especificado um --scriptpath; por omissão, será usado: <code>$1</code>.",
-       'config-using-server' => 'Será usado o nome do servidor "<nowiki>$1</nowiki>".',
-       'config-using-uri' => 'Será usada a URL do servidor "<nowiki>$1$2</nowiki>".',
-       'config-uploads-not-safe' => "'''Aviso:''' O diretório por omissão para uploads <code>$1</code>, está vulnerável à execução arbitrária de scripts.
-Embora o MediaWiki verifique a existência de ameaças de segurança em todos os ficheiros enviados, é altamente recomendado que [//www.mediawiki.org/wiki/Manual:Security#Upload_security vede esta vulnerabilidade de segurança] antes de possibilitar uploads.",
-       'config-no-cli-uploads-check' => "'''Aviso:''' O diretório por omissão para uploads, <code>\$1</code>, não é verificado para determinar se é vulnerável à execução de código arbitrário durante a instalação por CLI (\"Command-line Interface\").",
-       'config-brokenlibxml' => 'O seu sistema tem uma combinação de versões de PHP e libxml2 conhecida por ser problemática, podendo causar corrupção de dados no MediaWiki e outras aplicações da internet.
-Atualize para o PHP versão 5.2.9 ou posterior e libxml2 versão 2.7.3 ou posterior ([//bugs.php.net/bug.php?id=45996 incidência reportada no PHP]).
-Instalação interrompida.',
-       'config-using531' => 'O MediaWiki não pode ser usado com o PHP $1 devido a um problema que envolve parâmetros de referência para <code>__call()</code>.
-Para resolver este problema, atualize o PHP para a versão 5.3.2 ou posterior, ou reverta-o para a 5.3.0.
-Instalação interrompida.',
-       'config-suhosin-max-value-length' => 'O Suhosin está instalado e limita a $1 bytes o comprimento do parâmetro GET. O componente ResourceLoader do MediaWiki pode tornear este limite, mas prejudicando o desempenho. Se lhe for possível, deve atribuir o valor 1024 ou maior ao parâmetro <code>suhosin.get.max_value_length</code> no ficheiro <code>php.ini</code>, e definir o mesmo valor para <code>$wgResourceLoaderMaxQueryLength</code> no ficheiro LocalSettings.php.', # Fuzzy
-       'config-db-type' => 'Tipo da base de dados:',
-       'config-db-host' => 'Servidor da base de dados:',
-       'config-db-host-help' => 'Se a base de dados estiver num servidor separado, introduza aqui o nome ou o endereço IP desse servidor.
-
-Se estiver a usar um servidor partilhado, o fornecedor do alojamento deve fornecer o nome do servidor na documentação.
-
-Se está a fazer a instalação num servidor Windows com MySQL, usar como nome do servidor "localhost" poderá não funcionar. Se não funcionar, tente usar "127.0.0.1" como endereço IP local.
-
-Se estiver a usar PostgreSQL, deixe este campo em branco para fazer a ligação através de um socket Unix.',
-       'config-db-host-oracle' => 'TNS (Transparent Network Substrate) da base de dados:',
-       'config-db-host-oracle-help' => 'Introduza um [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Nome Local de Ligação] válido; tem de estar visível para esta instalação um ficheiro tnsnames.ora.<br />Se está a usar bibliotecas cliente versão 10g ou posterior, também pode usar o método [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Ligação Fácil] de atribuição do nome.',
-       'config-db-wiki-settings' => 'Identifique esta wiki',
-       'config-db-name' => 'Nome da base de dados:',
-       'config-db-name-help' => 'Escolha um nome para identificar a sua wiki.
-O nome não deve conter espaços.
-
-Se estiver a usar um servidor partilhado, o fornecedor do alojamento deve poder fornecer-lhe o nome de uma base de dados que possa usar, ou permite-lhe criar bases de dados através de um painel de controle.',
-       'config-db-name-oracle' => "Esquema ''(schema)'' da base de dados:",
-       'config-db-account-oracle-warn' => "Há três cenários suportados na instalação do servidor de base de dados Oracle:
-
-Se pretende criar a conta de acesso pela internet na base de dados durante o processo de instalação, forneça como conta para a instalação uma conta com o papel de SYSDBA na base de dados e especifique as credenciais desejadas para a conta de acesso pela internet. Se não pretende criar a conta de acesso pela internet durante a instalação, pode criá-la manualmente e fornecer só essa conta para a instalação (se ela tiver as permissões necessárias para criar os objetos do esquema ''(schema)''). A terceira alternativa é fornecer duas contas diferentes; uma com privilégios de criação e outra com privilégios limitados para o acesso pela internet.
-
-Existe um script para criação de uma conta com os privilégios necessários no diretório \"maintenance/oracle/\" desta instalação. Mantenha em mente que usar uma conta com privilégios limitados impossibilita todas as operações de manutenção com a conta padrão.",
-       'config-db-install-account' => 'Conta do utilizador para a instalação',
-       'config-db-username' => 'Nome do utilizador da base de dados:',
-       'config-db-password' => 'Palavra-chave do utilizador da base de dados:',
-       'config-db-password-empty' => 'Introduza a palavra-chave do novo utilizador da base de dados: $1.
-Embora seja possível criar utilizadores sem palavra-chave, fazê-lo não é seguro.',
-       'config-db-install-username' => 'Introduza o nome de utilizador que será usado para aceder à base de dados durante o processo de instalação. Este utilizador não é o do MediaWiki; é o utilizador da base de dados.',
-       'config-db-install-password' => 'Introduza a palavra-chave do utilizador que será usado para aceder à base de dados durante o processo de instalação. Esta palavra-chave não é a do utilizador do MediaWiki; é a palavra-chave do utilizador da base de dados.',
-       'config-db-install-help' => 'Introduza o nome de utilizador e a palavra-chave que serão usados para aceder à base de dados durante o processo de instalação.',
-       'config-db-account-lock' => 'Usar o mesmo nome de utilizador e palavra-chave durante a operação normal',
-       'config-db-wiki-account' => 'Conta de utilizador para a operação normal',
-       'config-db-wiki-help' => 'Introduza o nome de utilizador e a palavra-chave que serão usados para aceder à base de dados durante a operação normal da wiki.
-Se o utilizador não existir na base de dados, mas a conta de instalação tiver privilégios suficientes, o utilizador que introduzir será criado na base de dados com os privilégios mínimos necessários para a operação normal da wiki.',
-       'config-db-prefix' => 'Prefixo para as tabelas da base de dados:',
-       'config-db-prefix-help' => 'Se necessitar de partilhar uma só base de dados entre várias wikis, ou entre o MediaWiki e outra aplicação, pode escolher adicionar um prefixo ao nome de todas as tabelas desta instalação, para evitar conflitos.
-Não use espaços.
-
-Normalmente, este campo deve ficar vazio.',
-       'config-db-charset' => 'Conjunto de caracteres da base de dados',
-       '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-charset-help' => "'''Aviso:''' Se usar '''backwards-compatible UTF-8''' (\"UTF-8 compatível com versões anteriores\") no MySQL 4.1+, e depois fizer cópias de segurança da base de dados usando <code>mysqldump</code>, poderá destruir todos os caracteres que não fazem parte do conjunto ASCII, corrompendo assim, de forma irreversível, as suas cópias de segurança!
-
-No modo '''binary''' (\"binário\"), o MediaWiki armazena o texto UTF-8 na base de dados em campos binários.
-Isto é mais eficiente do que o modo UTF-8 do MySQL e permite que sejam usados todos os caracteres Unicode.
-No modo '''UTF-8''', o MySQL saberá em que conjunto de caracteres os seus dados estão e pode apresentá-los e convertê-los da forma mais adequada,
-mas não lhe permitirá armazenar caracteres acima do [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Básico].",
-       'config-mysql-old' => 'É necessário o MySQL $1 ou posterior; tem a versão $2.',
-       'config-db-port' => 'Porta da base de dados:',
-       'config-db-schema' => "Esquema ''(schema)'' do MediaWiki",
-       'config-db-schema-help' => 'Normalmente, este esquema estará correto.
-Altere-o só se souber que precisa de o fazer.',
-       'config-pg-test-error' => "Não foi possível criar uma ligação à base de dados '''$1''': $2",
-       'config-sqlite-dir' => 'Diretório de dados do SQLite:',
-       'config-sqlite-dir-help' => "O SQLite armazena todos os dados num único ficheiro.
-
-Durante a instalação, o servidor de internet precisa de ter permissão de escrita no diretório que especificar.
-
-Este diretório '''não''' deve poder ser acedido diretamente da internet, por isso está a ser colocado onde estão os seus ficheiros PHP.
-
-Juntamente com o diretório, o instalador irá criar um ficheiro <code>.htaccess</code>, mas se esta operação falhar é possível que alguém venha a ter acesso direto à base de dados.
-Isto inclui acesso aos dados dos utilizadores (endereços de correio eletrónico, palavras-chave encriptadas), às revisões eliminadas e a outros dados de acesso restrito na wiki.
-
-Considere colocar a base de dados num local completamente diferente, como, por exemplo, em <code>/var/lib/mediawiki/asuawiki</code>.",
-       'config-oracle-def-ts' => 'Tablespace padrão:',
-       'config-oracle-temp-ts' => 'Tablespace temporário:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => 'O MediaWiki suporta as seguintes plataformas de base de dados:
-
-$1
-
-Se a plataforma que pretende usar não está listada abaixo, siga as instruções nos links acima para ativar o suporte.',
-       'config-support-mysql' => '* $1 é a plataforma primária do MediaWiki e a melhor suportada ([http://www.php.net/manual/en/mysql.installation.php como compilar PHP com suporte MySQL])',
-       'config-support-postgres' => '* $1 é uma plataforma de base de dados comum, de fonte aberta, alternativa ao MySQL ([http://www.php.net/manual/en/pgsql.installation.php como compilar PHP com suporte PostgreSQL]). Poderão existir alguns pequenos problemas e não é recomendado o seu uso em ambientes de exploração/produção.',
-       'config-support-sqlite' => '* $1 é uma plataforma de base de dados ligeira muito bem suportada. ([http://www.php.net/manual/en/pdo.installation.php Como compilar PHP com suporte SQLite], usa PDO)',
-       'config-support-oracle' => '* $1 é uma base de dados de uma empresa comercial. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])',
-       'config-header-mysql' => 'Definições MySQL',
-       'config-header-postgres' => 'Definições PostgreSQL',
-       'config-header-sqlite' => 'Definições SQLite',
-       'config-header-oracle' => 'Definições Oracle',
-       'config-invalid-db-type' => 'O tipo de base de dados é inválido',
-       'config-missing-db-name' => 'Tem de introduzir um valor para "Nome da base de dados"',
-       'config-missing-db-host' => 'Tem de introduzir um valor para "Servidor da base de dados"',
-       'config-missing-db-server-oracle' => 'Tem de introduzir um valor para "TNS da base de dados"',
-       'config-invalid-db-server-oracle' => 'O TNS da base de dados, "$1", é inválido.
-Use só letras (a-z, A-Z), algarismos (0-9), sublinhados (_) e pontos (.) dos caracteres ASCII.', # Fuzzy
-       'config-invalid-db-name' => 'O nome da base de dados, "$1",  é inválido.
-Use só letras (a-z, A-Z), algarismos (0-9), sublinhados (_) e hífens (-) dos caracteres ASCII.',
-       'config-invalid-db-prefix' => 'O prefixo da base de dados, "$1",  é inválido.
-Use só letras (a-z, A-Z), algarismos (0-9), sublinhados (_) e hífens (-) dos caracteres ASCII.',
-       'config-connection-error' => '$1.
-
-Verifique o servidor, o nome do utilizador e a palavra-chave abaixo e tente novamente.',
-       'config-invalid-schema' => "O esquema ''(schema)'' do MediaWiki, \"\$1\", é inválido.
-Use só letras (a-z, A-Z), algarismos (0-9) e sublinhados (_) dos caracteres ASCII.",
-       'config-db-sys-create-oracle' => 'O instalador só permite criar uma conta nova usando uma conta SYSDBA.',
-       'config-db-sys-user-exists-oracle' => 'A conta "$1" já existe. A conta SYSDBA só pode criar uma conta nova!',
-       'config-postgres-old' => 'É necessário o PostgreSQL $1 ou posterior; tem a versão $2.',
-       'config-sqlite-name-help' => 'Escolha o nome que identificará a sua wiki.
-Não use espaços ou hífens.
-Este nome será usado como nome do ficheiro de dados do SQLite.',
-       'config-sqlite-parent-unwritable-group' => 'Não é possível criar o diretório de dados <code><nowiki>$1</nowiki></code>, porque o servidor de internet não tem permissão de escrita no diretório que o contém <code><nowiki>$2</nowiki></code>.
-
-O instalador determinou em que nome de utilizador o seu servidor de internet está a correr.
-Para continuar, configure o diretório <code><nowiki>$3</nowiki></code> para poder ser escrito por este utilizador.
-Para fazê-lo em sistemas Unix ou Linux, use:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Não é possível criar o diretório de dados <code><nowiki>$1</nowiki></code>, porque o servidor de internet não tem permissão de escrita no diretório que o contém <code><nowiki>$2</nowiki></code>.
-
-Não foi possível determinar em que nome de utilizador o seu servidor de internet está a correr.
-Para continuar, configure o diretório <code><nowiki>$3</nowiki></code> para que este possa ser globalmente escrito por esse utilizador (e por outros!).
-Para fazê-lo em sistemas Unix ou Linux, use:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Ocorreu um erro ao criar o diretório de dados "$1".
-Verifique a localização e tente novamente.',
-       'config-sqlite-dir-unwritable' => 'Não foi possível escrever no diretório "$1".
-Altere as permissões para que ele possa ser escrito pelo servidor de internet e tente novamente.',
-       'config-sqlite-connection-error' => '$1.
-
-Verifique o diretório de dados e o nome da base de dados abaixo e tente novamente.',
-       'config-sqlite-readonly' => 'Não é possivel escrever no ficheiro <code>$1</code>.',
-       'config-sqlite-cant-create-db' => 'Não foi possível criar o ficheiro da base de dados <code>$1</code>.',
-       'config-sqlite-fts3-downgrade' => 'O PHP não tem suporte FTS3; a reverter o esquema das tabelas para o anterior',
-       'config-can-upgrade' => "Esta base de dados contém tabelas do MediaWiki.
-Para atualizá-las para o MediaWiki $1, clique '''Continuar'''.",
-       'config-upgrade-done' => "Atualização terminada.
-
-Agora pode [$1 começar a usar a sua wiki].
-
-Se quiser regenerar o seu ficheiro <code>LocalSettings.php</code>, clique o botão abaixo.
-Esta operação '''não é recomendada''' a menos que esteja a ter problemas com a sua wiki.",
-       'config-upgrade-done-no-regenerate' => 'Atualização terminada.
-
-Agora pode [$1 começar a usar a sua wiki].',
-       'config-regenerate' => 'Regenerar o LocalSettings.php →',
-       'config-show-table-status' => 'A consulta <code>SHOW TABLE STATUS</code> falhou!',
-       'config-unknown-collation' => "'''Aviso:''' A base de dados está a utilizar uma colação ''(collation)'' desconhecida.",
-       'config-db-web-account' => 'Conta na base de dados para acesso pela internet',
-       'config-db-web-help' => 'Selecione o nome de utilizador e a palavra-chave que o servidor de internet irá utilizar para aceder ao servidor da base de dados, durante a operação normal da wiki.',
-       'config-db-web-account-same' => 'Usar a mesma conta usada na instalação',
-       'config-db-web-create' => 'Criar a conta se ainda não existir',
-       'config-db-web-no-create-privs' => 'A conta que especificou para a instalação não tem privilégios suficientes para criar uma conta.
-A conta que especificar aqui já tem de existir.',
-       'config-mysql-engine' => 'Motor de armazenamento:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Aviso''': Selecionou o MyISAM para motor de armazenamento do MySQL, uma combinação desaconselhada para usar com o MediaWiki porque:
-* praticamente não permite acessos simultâneos, devido aos bloqueios de tabelas
-* o MyISAM é mais suscetível a perdas da integridade dos dados do que outros motores
-* o código do MediaWiki não trabalha devidamente com o MyISAM
-
-Se a sua instalação do MySQL suporta InnoDB, é altamente recomendado que o escolha em vez do MyISAM.
-Se não suporta o InnoDB, talvez esta seja uma boa altura para fazer a atualização para a versão mais recente do MySQL.",
-       'config-mysql-engine-help' => "'''InnoDB''' é quase sempre a melhor opção, porque suporta bem acessos simultâneos ''(concurrency)''.
-
-'''MyISAM''' pode ser mais rápido no modo de utilizador único ou em instalações somente para leitura.
-As bases de dados MyISAM tendem a ficar corrompidas com maior frequência do que as bases de dados InnoDB.",
-       'config-mysql-charset' => 'Conjunto de caracteres da base de dados:',
-       'config-mysql-binary' => 'Binary',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "No modo '''binary''' (\"binário\"), o MediaWiki armazena o texto UTF-8 na base de dados em campos binários.
-Isto é mais eficiente do que o modo UTF-8 do MySQL e permite que sejam usados todos os caracteres Unicode.
-
-No modo '''UTF-8''', o MySQL saberá em que conjunto de caracteres os seus dados estão e pode apresentá-los e convertê-los da forma mais adequada,
-mas não lhe permitirá armazenar caracteres acima do [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Básico].",
-       'config-site-name' => 'Nome da wiki:',
-       'config-site-name-help' => 'Este nome aparecerá no título da janela do seu browser e em vários outros sítios.',
-       'config-site-name-blank' => 'Introduza o nome do site.',
-       'config-project-namespace' => 'Espaço nominal do projeto:',
-       'config-ns-generic' => 'Projeto',
-       'config-ns-site-name' => 'O mesmo que o nome da wiki: $1',
-       'config-ns-other' => 'Outro (especifique)',
-       'config-ns-other-default' => 'AMinhaWiki',
-       'config-project-namespace-help' => 'Seguindo o exemplo da Wikipedia, muitas wikis mantêm as páginas das suas normas e políticas, separadas das páginas de conteúdo, num "\'\'\'espaço nominal do projeto\'\'\'".
-Todos os nomes das páginas neste espaço nominal começam com um determinado prefixo, que pode especificar aqui.
-Tradicionalmente, este prefixo deriva do nome da wiki, mas não pode conter caracteres de pontuação, como "#" ou ":".',
-       'config-ns-invalid' => 'O espaço nominal especificado "<nowiki>$1</nowiki>" é inválido.
-Introduza um espaço nominal de projeto diferente.',
-       'config-ns-conflict' => 'O espaço nominal que especificou, "<nowiki>$1</nowiki>", cria um conflito com um dos espaços nominais padrão do MediaWiki.
-Especifique um espaço nominal do projeto diferente.',
-       'config-admin-box' => 'Conta de administrador',
-       'config-admin-name' => 'O seu nome:',
-       'config-admin-password' => 'Palavra-chave:',
-       'config-admin-password-confirm' => 'Repita a palavra-chave:',
-       'config-admin-help' => 'Introduza aqui o seu nome de utilizador preferido, por exemplo, "João Beltrão".
-Este é o nome que irá utilizar para entrar na wiki.',
-       'config-admin-name-blank' => 'Introduza um nome de utilizador para administrador.',
-       'config-admin-name-invalid' => 'O nome de utilizador especificado "<nowiki>$1</nowiki>" é inválido.
-Introduza um nome de utilizador diferente.',
-       'config-admin-password-blank' => 'Introduza uma palavra-chave para a conta de administrador.',
-       'config-admin-password-same' => 'A palavra-chave tem de ser diferente do nome de utilizador.',
-       'config-admin-password-mismatch' => 'As duas palavras-chave que introduziu não coincidem.',
-       'config-admin-email' => 'Correio electrónico:',
-       'config-admin-email-help' => 'Introduza aqui um correio electrónico que lhe permita receber mensagens de outros utilizadores da wiki, reiniciar a sua palavra-chave e receber notificações de alterações às suas páginas vigiadas. Pode deixar o campo vazio.',
-       'config-admin-error-user' => 'Ocorreu um erro interno ao criar um administrador com o nome "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'Ocorreu um erro interno ao definir uma palavra-chave para o administrador "<nowiki>$1</nowiki>": <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Introduziu um correio electrónico inválido',
-       'config-subscribe' => 'Subscreva a [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista de divulgação de anúncios de lançamento].',
-       'config-subscribe-help' => 'Esta é uma lista de divulgação de baixo volume para anúncios de lançamento de versões novas, incluindo anúncios de segurança importantes.
-Deve subscrevê-la e atualizar a sua instalação MediaWiki quando são lançadas versões novas.',
-       'config-subscribe-noemail' => 'Tentou subscrever a lista de divulgação dos anúncios de novas versões, sem fornecer um endereço de correio electrónico.
-Para subscrever esta lista de divulgação tem de fornecer um endereço de correio electrónico.',
-       'config-almost-done' => 'Está quase a terminar!
-Agora pode saltar as configurações restantes e instalar já a wiki.',
-       'config-optional-continue' => 'Faz-me mais perguntas.',
-       'config-optional-skip' => 'Já estou aborrecido, instala lá a wiki.',
-       'config-profile' => 'Perfil de permissões:',
-       'config-profile-wiki' => 'Wiki tradicional', # Fuzzy
-       'config-profile-no-anon' => 'Criação de conta exigida',
-       'config-profile-fishbowl' => 'Somente utilizadores autorizados',
-       'config-profile-private' => 'Wiki privada',
-       'config-profile-help' => "As wikis funcionam melhor quando se deixa tantas pessoas editá-las quanto possível.
-No MediaWiki, é fácil rever as alterações recentes e reverter quaisquer estragos causados por utilizadores novatos ou maliciosos.
-
-No entanto, muitas pessoas consideram o MediaWiki útil de variadas formas e nem sempre é fácil convencer todas as pessoas dos benefícios desta filosofia wiki.
-Por isso pode optar.
-
-Uma '''{{int:config-profile-wiki}}''' permite que todos a editem, sem sequer necessitar de autenticação.
-Uma wiki com '''{{int:config-profile-no-anon}}''' atribui mais responsabilidade, mas pode afastar os colaboradores ocasionais.
-
-Um cenário '''{{int:config-profile-fishbowl}}''' permite que os utilizadores aprovados editem, mas que o público visione as páginas, incluindo o historial das mesmas.
-Uma '''{{int:config-profile-private}}''' só permite que os utilizadores aprovados visionem as páginas e as editem.
-
-Após a instalação, estarão disponíveis mais configurações de privilégios. Consulte [//www.mediawiki.org/wiki/Manual:User_rights a entrada relevante no Manual].", # Fuzzy
-       'config-license' => 'Direitos de autor e licença:',
-       'config-license-none' => 'Sem rodapé com a licença',
-       'config-license-cc-by-sa' => 'Creative Commons - Atribuição - Partilha nos Mesmos Termos',
-       'config-license-cc-by' => 'Creative Commons - Atribuição',
-       'config-license-cc-by-nc-sa' => 'Creative Commons - Atribuição - Uso Não Comercial - Partilha nos Mesmos Termos',
-       'config-license-cc-0' => 'Creative Commons Zero (Domínio Público)',
-       'config-license-gfdl' => 'GNU Free Documentation License 1.3 ou posterior',
-       'config-license-pd' => 'Domínio Público',
-       'config-license-cc-choose' => 'Selecione uma licença personalizada Creative Commons',
-       'config-license-help' => 'Muitas wikis de acesso público licenciam todas as colaborações com uma [http://freedomdefined.org/Definition licença livre].
-Isto ajuda a criar um sentido de propriedade da comunidade e encoraja as colaborações a longo prazo.
-Tal não é geralmente necessário nas wikis privadas ou corporativas.
-
-Se pretende que seja possível usar textos da Wikipédia na sua wiki e que seja possível a Wikipédia aceitar textos copiados da sua wiki, deve escolher a licença Creative Commons - Atribuição - Partilha nos Mesmos Termos.
-
-A licença anterior da Wikipédia era a licença GNU Free Documentation License.
-A GFDL é uma licença válida, mas de difícil compreensão.
-Também é difícil reutilizar conteúdos licenciados com a GFDL.',
-       'config-email-settings' => 'Definições do correio electrónico',
-       'config-enable-email' => 'Ativar mensagens eletrónicas de saída',
-       'config-enable-email-help' => 'Se quer que o correio eletrónico funcione, as [http://www.php.net/manual/en/mail.configuration.php definições de correio eletrónico do PHP] têm de estar configuradas corretamente.
-Se não pretende viabilizar qualquer funcionalidade de correio eletrónico, pode desativá-lo aqui.',
-       'config-email-user' => 'Ativar mensagens eletrónicas entre utilizadores',
-       'config-email-user-help' => 'Permitir que todos os utilizadores troquem entre si mensagens de correio eletrónico, se tiverem ativado esta funcionalidade nas suas preferências.',
-       'config-email-usertalk' => 'Ativar notificações de alterações à página de discussão dos utilizadores',
-       'config-email-usertalk-help' => 'Permitir que os utilizadores recebam notificações de alterações à sua página de discussão, se tiverem ativado esta funcionalidade nas suas preferências.',
-       'config-email-watchlist' => 'Ativar notificação de alterações às páginas vigiadas',
-       'config-email-watchlist-help' => 'Permitir que os utilizadores recebam notificações de alterações às suas páginas vigiadas, se tiverem ativado esta funcionalidade nas suas preferências.',
-       'config-email-auth' => 'Ativar autenticação do correio eletrónico',
-       'config-email-auth-help' => "Se esta opção for ativada, os utilizadores têm de confirmar o seu endereço de correio eletrónico usando um link que lhes é enviado sempre que o definirem ou alterarem.
-Só os endereços de correio eletrónico autenticados podem receber mensagens eletrónicas dos outros utilizadores ou alterar as mensagens de notificação.
-É '''recomendado''' que esta opção seja ativada nas wikis de acesso público para impedir o uso abusivo das funcionalidades de correio eletrónico.",
-       'config-email-sender' => 'Endereço de correio electrónico de retorno:',
-       'config-email-sender-help' => 'Introduza o endereço de correio electrónico que será usado como endereço de retorno nas mensagens electrónicas de saída.
-É para este endereço que serão enviadas as mensagens que não podem ser entregues.
-Muitos servidores de correio electrónico exigem que pelo menos a parte do nome do domínio seja válida. \\',
-       'config-upload-settings' => 'Upload de imagens e ficheiros',
-       'config-upload-enable' => 'Possibilitar o upload de ficheiros',
-       'config-upload-help' => 'O upload de ficheiros expõe o seu servidor a riscos de segurança.
-Para mais informações, leia a [//www.mediawiki.org/wiki/Manual:Security seção sobre segurança] do Manual Técnico.
-
-Para permitir o upload de ficheiros, altere as permissões do subdiretório <code>images</code> no diretório de raiz do MediaWiki para que o servidor de internet possa escrever nele.
-Depois ative esta opção.',
-       'config-upload-deleted' => 'Diretório para os ficheiros apagados:',
-       'config-upload-deleted-help' => 'Escolha um diretório onde serão arquivados os ficheiros apagados.
-O ideal é que este diretório não possa ser diretamente acedido a partir da internet.',
-       'config-logo' => 'URL do logótipo:',
-       'config-logo-help' => 'O tema padrão do MediaWiki inclui espaço para um logótipo de 135x160 pixels acima do menu da barra lateral.
-Coloque na wiki uma imagem com estas dimensões e introduza aqui a URL dessa imagem.
-
-Se não pretende usar um logótipo, deixe este campo em branco.', # Fuzzy
-       'config-instantcommons' => 'Ativar Instant Commons',
-       'config-instantcommons-help' => 'O [//www.mediawiki.org/wiki/InstantCommons Instant Commons] é uma funcionalidade que permite que as wikis usem imagens, áudio e outros ficheiros multimédia disponíveis no site [//commons.wikimedia.org/ Wikimedia Commons].
-Para poder usá-los, o MediaWiki necessita de acesso à internet.
-
-Para mais informações sobre esta funcionalidade, incluindo instruções sobre como configurá-la para usar outras wikis em vez da Wikimedia Commons, consulte o [//mediawiki.org/wiki/Manual:$wgForeignFileRepos Manual Técnico].',
-       'config-cc-error' => 'O auxiliar de escolha de licenças da Creative Commons não produziu resultados.
-Introduza o nome da licença manualmente.',
-       'config-cc-again' => 'Escolha outra vez...',
-       'config-cc-not-chosen' => 'Escolha a licença da Creative Commons que pretende e clique "continuar".',
-       'config-advanced-settings' => 'Configuração avançada',
-       'config-cache-options' => 'Configuração da cache de objetos:',
-       'config-cache-help' => 'A cache de objetos é usada para melhorar o desempenho do MediaWiki. Armazena dados usados com frequência.
-Sites de tamanho médio ou grande são altamente encorajados a ativar esta funcionalidade e os sites pequenos também terão alguns benefícios em fazê-lo.',
-       'config-cache-none' => 'Sem cache (não é removida nenhuma funcionalidade, mas a velocidade de operação pode ser afectada nas wikis grandes)',
-       'config-cache-accel' => 'Cache de objetos do PHP (APC, XCache ou WinCache)',
-       'config-cache-memcached' => 'Usar Memcached (requer instalação e configurações adicionais)',
-       'config-memcached-servers' => 'Servidores Memcached:',
-       'config-memcached-help' => 'Lista de endereços IP que serão usados para o Memcached.
-Deve-se colocar um por linha e indicar a porta a utilizar. Por exemplo:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => 'Selecionou o Memcached como tipo de chache, mas não especificou nenhum servidor.',
-       'config-memcache-badip' => 'Introduziu um endereço IP inválido para o Memcached: $1.',
-       'config-memcache-noport' => 'Não especificou a porta a usar para o servidor Memcached: $1.
-Se não sabe qual é a porta, a predefinida é a 11211.',
-       'config-memcache-badport' => 'Os números das portas do Memcached devem estar entre $1 e $2.',
-       'config-extensions' => 'Extensões',
-       'config-extensions-help' => 'Foi detectada a existência das extensões listadas acima, no seu diretório <code>./extensions</code>.
-
-Estas talvez necessitem de configurações adicionais, mas pode ativá-las agora',
-       'config-install-alreadydone' => "'''Aviso:''' Parece que já instalou o MediaWiki e está a tentar instalá-lo novamente.
-Passe para a próxima página, por favor.",
-       'config-install-begin' => 'Ao clicar "{{int:config-continue}}", vai iniciar a instalação do MediaWiki.
-Se quiser fazer mais alterações, clique Voltar.', # Fuzzy
-       'config-install-step-done' => 'terminado',
-       'config-install-step-failed' => 'falhou',
-       'config-install-extensions' => 'A incluir as extensões',
-       'config-install-database' => 'A preparar a base de dados',
-       'config-install-schema' => "A criar o esquema (''schema'') da base de dados",
-       'config-install-pg-schema-not-exist' => "O esquema ''(schema)'' PostgreSQL não existe",
-       'config-install-pg-schema-failed' => 'A criação das tabelas falhou.
-Certifique-se de que o utilizador "$1" pode escrever no esquema \'\'(schema)\'\' "$2".',
-       'config-install-pg-commit' => 'A gravar as alterações',
-       'config-install-pg-plpgsql' => 'A verificar a presença da linguagem PL/pgSQL',
-       'config-pg-no-plpgsql' => 'É preciso instalar a linguagem PL/pgSQL na base de dados $1',
-       'config-pg-no-create-privs' => 'A conta que especificou para a instalação não tem privilégios suficientes para criar uma conta.',
-       'config-pg-not-in-role' => 'A conta que especificou para o utilizador da internet já existe.
-A conta que especificou para a instalação não é a de um super-utilizador e não pertence ao grupo de utilizadores de acesso pela internet, por isso não pode criar objetos que pertencem ao utilizador da internet.
-
-O MediaWiki necessita que as tabelas pertençam ao utilizador da internet. Especifique outra conta de internet, ou clique "voltar" e especifique um utilizador com os privilégios necessários para a instalação.',
-       'config-install-user' => 'A criar o utilizador da base de dados',
-       'config-install-user-alreadyexists' => 'O utilizador "$1" já existe',
-       'config-install-user-create-failed' => 'A criação do utilizador "$1" falhou: $2',
-       'config-install-user-grant-failed' => 'A atribuição das permissões ao utilizador "$1" falhou: $2',
-       'config-install-user-missing' => 'O utilizador especificado, "$1", não existe.',
-       'config-install-user-missing-create' => 'O utilizador especificado, "$1", não existe.
-Marque a caixa de seleção "criar conta" abaixo se pretende criá-la, por favor.',
-       'config-install-tables' => 'A criar as tabelas',
-       'config-install-tables-exist' => "'''Aviso''': As tabelas do MediaWiki parecem já existir.
-A criação das tabelas será saltada.",
-       'config-install-tables-failed' => "'''Erro''': A criação das tabelas falhou com o seguinte erro: $1",
-       'config-install-interwiki' => 'A preencher a tabela padrão de interwikis',
-       'config-install-interwiki-list' => 'Não foi possível encontrar o ficheiro <code>interwiki.list</code>.',
-       'config-install-interwiki-exists' => "'''Aviso''': A tabela de interwikis parece já conter entradas.
-O preenchimento padrão desta tabela será saltado.",
-       'config-install-stats' => 'A inicializar as estatísticas',
-       'config-install-keys' => 'A gerar as chaves secretas',
-       'config-insecure-keys' => "'''Warning:''' {{PLURAL:$2|A chave segura|As chaves seguras}} ($1) {{PLURAL:$2|gerada durante a instalação não é completamente segura|geradas durante a instalação não são completamente seguras}}. Considere a possibilidade de {{PLURAL:$2|alterá-la|alterá-las}} manualmente.",
-       'config-install-sysop' => 'A criar a conta de administrador',
-       'config-install-subscribe-fail' => 'Não foi possível subscrever a lista mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'cURL não está instalado e allow_url_fopen não está disponível.',
-       'config-install-mainpage' => 'A criar a página principal com o conteúdo padrão.',
-       'config-install-extension-tables' => 'A criar as tabelas das extensões ativadas',
-       'config-install-mainpage-failed' => 'Não foi possível inserir a página principal: $1',
-       'config-install-done' => "'''Parabéns!'''
-Terminou a instalação do MediaWiki.
-
-O instalador gerou um ficheiro <code>LocalSettings.php</code>.
-Este ficheiro contém todas as configurações.
-
-Precisa de fazer o download do ficheiro e colocá-lo no diretório de raiz da sua instalação (o mesmo diretório onde está o ficheiro index.php). Este download deverá ter sido iniciado automaticamente.
-
-Se o download não foi iniciado, ou se o cancelou, pode recomeçá-lo clicando o link abaixo:
-
-$3
-
-'''Nota''': Se não fizer isto agora, o ficheiro que foi gerado deixará de estar disponível quando sair do processo de instalação.
-
-Depois de terminar o passo anterior, pode '''[$2 entrar na wiki]'''.",
-       'config-download-localsettings' => 'Download do <code>LocalSettings.php</code>',
-       'config-help' => 'ajuda',
-       'config-nofile' => 'Não foi possível encontrar o ficheiro "$1". Terá sido apagado?',
-       'mainpagetext' => "'''MediaWiki instalado com sucesso.'''",
-       'mainpagedocfooter' => 'Consulte o [//meta.wikimedia.org/wiki/Help:Contents Guia de Utilizadores] para informações sobre o uso do software wiki.
-
-== Onde começar ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de opções de configuração]
-* [//www.mediawiki.org/wiki/Manual:FAQ Perguntas e respostas frequentes sobre o MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Subscreva a lista de divulgação de novas versões do MediaWiki]', # Fuzzy
-);
-
-/** Brazilian Portuguese (português do Brasil)
- * @author Cainamarques
- * @author Giro720
- * @author Gustavo
- * @author Luckas
- * @author Marcionunes
- * @author 555
- */
-$messages['pt-br'] = array(
-       'config-desc' => 'O instalador do MediaWiki',
-       'config-title' => 'Instalação do MediaWiki $1',
-       'config-information' => 'Informações',
-       'config-localsettings-upgrade' => 'Foi detectada a existência do arquivo <code>LocalSettings.php</code>.
-Para atualizar esta instalação, insira no box abaixo o valor de <code>$wgUpgradeKey</code>.
-Essa informação pode ser encontrada no arquivo <code>LocalSettings.php</code>',
-       'config-localsettings-cli-upgrade' => 'Foi detectada a existência do arquivo <code><code>LocalSettings.php</code></code>.
-Atualize esta instalação executando o arquivo <code>update.php</code>',
-       'config-localsettings-key' => 'Chave de atualização:',
-       'config-localsettings-badkey' => 'A chave fornecida está incorreta.',
-       'config-upgrade-key-missing' => 'Foi detectada uma instalação existente do MediaWiki.
-Para atualizar esta instalação, insira a seguinte linha na parte inferior do seu <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => 'O arquivo <code>LocalSettings.php</code> parece incompleto.
-A variável $1 não está definida.
-Altere seu <code>LocalSettings.php</code> com a definição dessa variável e clique em "{{int:Config-continue}}".',
-       'config-localsettings-connection-error' => 'Ocorreu um erro ao conectar ao banco de dados através das configurações presentes ou no <code>LocalSettings.php</code> ou no <code>AdminSettings.php</code>. Corrija essas configurações e tente novamente.
-
-$1',
-       'config-session-error' => 'Erro ao iniciar a sessão: $1',
-       'config-session-expired' => 'Os seus dados de sessão parecem ter expirado.
-As sessões estão configuradas para uma duração de $1.
-Você pode aumentar esta duração configurando <code>session.gc_maxlifetime</code> no php.ini.
-Reinicie o processo de instalação.',
-       'config-no-session' => 'Os seus dados de sessão foram perdidos!
-Verifique o seu php.ini e certifique-se de que em <code>session.save_path</code> está definido um diretório apropriado.',
-       'config-your-language' => 'Seu idioma:',
-       'config-your-language-help' => 'Selecione o idioma que será usado durante o processo de instalação.',
-       'config-wiki-language' => 'Idioma do wiki:',
-       'config-wiki-language-help' => 'Selecione o idioma em que o wiki será predominantemente escrito.',
-       'config-back' => '← Voltar',
-       'config-continue' => 'Continuar →',
-       'config-page-language' => 'Idioma',
-       'config-page-welcome' => 'Bem-vindo(a) ao MediaWiki!',
-       'config-page-dbconnect' => 'Conectar ao banco de dados',
-       'config-page-upgrade' => 'Atualizar a instalação existente',
-       'config-page-dbsettings' => 'Configurações do banco de dados',
-       'config-page-name' => 'Nome',
-       'config-page-options' => 'Opções',
-       'config-page-install' => 'Instalar',
-       'config-page-complete' => 'Concluído!',
-       'config-page-restart' => 'Reiniciar a instalação',
-       'config-page-readme' => 'Leia-me',
-       'config-page-releasenotes' => 'Notas de lançamento',
-       'config-page-copying' => 'Copiando',
-       'config-page-upgradedoc' => 'Atualizando',
-       'config-page-existingwiki' => 'Wiki existente',
-       'config-help-restart' => 'Deseja limpar todos os dados salvos que você introduziu e reiniciar o processo de instalação?',
-       'config-restart' => 'Sim, reiniciar',
-       'config-welcome' => '=== Verificações de ambiente ===
-São realizadas verificações básicas para determinar se este ambiente é apropriado para a instalação do MediaWiki.
-Lembre-se de incluir estas informações se for procurar por suporte para a conclusão da instalação.',
-       'config-copyright' => "=== Direitos autorais e Termos de uso ===
-
-$1
-
-Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.
-
-Este programa é distribuído na esperança de que seja útil, mas '''sem qualquer garantia'''; inclusive, sem a garantia implícita da '''possibilidade de ser comercializado''' ou de '''adequação para qualquer finalidade específica'''.
-Consulte a licença GNU General Public License para mais detalhes.
-
-Em conjunto com este programa você deve ter recebido <doclink href=Copying>uma cópia da licença GNU General Public License</doclink>; se não a recebeu, peça-a por escrito para Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [http://www.gnu.org/copyleft/gpl.html leia-a na internet].",
-       'config-sidebar' => '* [//www.mediawiki.org/wiki/MediaWiki Página principal do MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents Manual de uso]
-* [//www.mediawiki.org/wiki/Manual:Contents Manual administrativo]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]
-----
-* <doclink href=Readme>Leia-me</doclink>
-* <doclink href=ReleaseNotes>Notas de lançamento</doclink>
-* <doclink href=Copying>Licença</doclink>
-* <doclink href=UpgradeDoc>Como fazer upgrade</doclink>',
-       'config-env-good' => 'O ambiente foi verificado.
-Você pode instalar o MediaWiki.',
-       'config-env-bad' => 'O ambiente foi verificado.
-Você não pode instalar o MediaWiki.',
-       'config-env-php' => 'O PHP $1 está instalado.',
-       'config-unicode-using-utf8' => 'Usando o utf8_normalize.so, de Brion Vibber, para a normalização Unicode.',
-       'config-unicode-using-intl' => 'Usando a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.',
-       'config-unicode-pure-php-warning' => "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode sendo usada, em seu lugar, a lenta implementação de PHP puro.
-Se o seu site tem um alto volume de tráfego, informe-se sobre a [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalização Unicode].",
-       'config-no-db' => 'Não foi possível encontrar um driver de banco de dados adequado! É necessário instalar um driver de banco de dados para o PHP.
-São suportados os seguintes tipos de bancos de dados: $1.
-
-Se estiver em uma hospedagem partilhada, peça à sua empresa de hospedagem para instalar um driver de banco de dados adequado.
-Se você mesmo tiver compilado o PHP, reconfigure-o com um cliente de banco de dados ativado usando, por exemplo, <code>./configure --with-mysql</code>.
-Se você instalou o PHP a partir de um pacote do Debian ou do Ubuntu, instale também o módulo php5-mysql.',
-       'config-no-fts3' => "' ' 'Aviso' ' ': O SQLite foi compilado sem o módulo [//sqlite.org/fts3.html FTS3]; as funcionalidades de pesquisa não estarão disponíveis nesta instalação.",
-       'config-register-globals' => "' ' 'Aviso: A opção <code>[http://php.net/register_globals register_globals]</code> do PHP está ativada.'''
-' ' 'Desative-a, se puder.'''
-O MediaWiki funcionará mesmo assim, mas o seu servidor ficará exposto a potenciais vulnerabilidades de segurança.",
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binary',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-binary' => 'Binary',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-ns-generic' => 'Projeto',
-       'config-admin-box' => 'Conta de administrador',
-       'config-admin-name' => 'Seu nome:',
-       'config-admin-password' => 'Senha:',
-       'config-license-pd' => 'Domínio público',
-       'config-logo-help' => 'Faça o upload de uma imagem de tamanho adequado e insira seu URL aqui.
-
-Você pode usar <code>$wgStylePath</code> ou <code>$wgScriptPath</code> se o seu logotipo for associado a esses diretórios.',
-       'config-advanced-settings' => 'Configuração avançada',
-       'config-extensions' => 'Extensões',
-       'config-install-step-done' => 'feito',
-       'config-help' => 'ajuda',
-       'mainpagetext' => "'''MediaWiki instalado com sucesso.'''",
-       'mainpagedocfooter' => 'Consulte o [//meta.wikimedia.org/wiki/Help:Contents Manual de Usuário] para informações de como usar o software wiki.
-
-== Começando ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de opções de configuração]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ do MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussão com avisos de novas versões do MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Traduza o MediaWiki para seu idioma]',
-);
-
-/** Quechua (Runa Simi)
- * @author AlimanRuna
- */
-$messages['qu'] = array(
-       'config-desc' => 'MediaWiki tiyachiq',
-       'config-title' => 'MediaWiki $1 tiyachiy',
-       'config-information' => 'Willay',
-       'config-your-language' => 'Rimayniyki:',
-       'config-wiki-language' => 'Wiki rimay:',
-       'config-back' => '← Ñawpaqman',
-       'config-extensions' => "Mast'ariykuna",
-       'config-install-step-done' => 'rurasqañam',
-       'config-install-step-failed' => 'manam aypasqachu',
-       'config-help' => 'yanapay',
-       'config-nofile' => '"$1" sutiyuq willañiqiqa manam tarisqachu. Qullusqachu?',
-       'mainpagetext' => "'''MediaWiki nisqa llamp'u kaqqa aypaylla takyachisqañam.'''",
-       'mainpagedocfooter' => "Wiki llamp'u kaqmanta willasunaykipaqqa [//meta.wikimedia.org/wiki/Help:Contents Ruraqpaq yanapana] ''(User's Guide)'' sutiyuq p'anqata qhaway.
-
-== Qallarichkaspa ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Kunphigurasyun churanamanta sutisuyu]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki nisqamanta pasaq tapuykuna]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki kachaykuy e-chaski sutisuyu]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki nisqata qampa rimaykiman t'ikray]",
-);
-
-/** Romagnol (Rumagnôl)
- */
-$messages['rgn'] = array(
-       'mainpagetext' => "'''L'instalaziòn d'MediaWiki l'è andêda ben'''",
-);
-
-/** Romansh (rumantsch)
- * @author Gion-andri
- */
-$messages['rm'] = array(
-       'mainpagetext' => "'''MediaWiki è vegnì installà cun success.'''",
-       'mainpagedocfooter' => "Consultai il [//meta.wikimedia.org/wiki/Help:Contents manual per utilisaders] per infurmaziuns davart l'utilisaziun da questa software da wiki.
-
-== Cumenzar ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Glista da las opziuns per la configuraziun]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Glista da mail da MediaWiki cun annunzias da novas versiuns]", # Fuzzy
-);
-
-/** Romanian (română)
- * @author Firilacroco
- * @author Minisarm
- * @author Stelistcristi
- */
-$messages['ro'] = array(
-       'config-desc' => 'Programul de instalare pentru MediaWiki',
-       'config-title' => 'Instalarea MediaWiki $1',
-       'config-information' => 'Informații',
-       'config-localsettings-key' => 'Cheie de actualizare:',
-       'config-localsettings-badkey' => 'Cheia furnizată este incorectă.',
-       'config-session-error' => 'Eroare la pornirea sesiunii: $1',
-       'config-your-language' => 'Limba ta:',
-       'config-your-language-help' => 'Alege o limbă pentru a o utiliza în timpul procesului de instalare.',
-       'config-wiki-language' => 'Limbă wiki:',
-       'config-wiki-language-help' => 'Alege limba în care wiki-ul va fi scris predominant.',
-       'config-back' => '← Înapoi',
-       'config-continue' => 'Continuă →',
-       'config-page-language' => 'Limbă',
-       'config-page-welcome' => 'Bun venit la MediaWiki!',
-       'config-page-dbconnect' => 'Conectează la baza de date',
-       'config-page-upgrade' => 'Extinde instalarea existentă',
-       'config-page-dbsettings' => 'Setări ale bazei de date',
-       'config-page-name' => 'Nume',
-       'config-page-options' => 'Opţiuni',
-       'config-page-install' => 'Instalare',
-       'config-page-complete' => 'Finalizat!',
-       'config-page-restart' => 'Reporneşte instalarea',
-       'config-page-readme' => 'Citeşte-mă',
-       'config-page-releasenotes' => 'Note de lansare',
-       'config-page-copying' => 'Copiere',
-       'config-page-upgradedoc' => 'Actualizare',
-       'config-page-existingwiki' => 'Wiki existent',
-       'config-restart' => 'Da, repornește.',
-       'config-env-php' => 'PHP $1 este instalat.',
-       'config-env-php-toolow' => 'PHP $1 este instalat.
-Totuși, MediaWiki necesită PHP $2 sau mai nou.',
-       'config-db-type' => 'Tipul bazei de date:',
-       'config-db-host' => 'Gazdă bază de date:',
-       'config-db-host-oracle' => 'Baza de date TNS:',
-       'config-db-wiki-settings' => 'Identificați acest wiki',
-       'config-db-name' => 'Numele bazei de date:',
-       'config-db-name-oracle' => 'Schema bazei de date:',
-       'config-db-username' => 'Nume de utilizator pentru baza de date:',
-       'config-db-password' => 'Parola bazei de date:',
-       'config-db-prefix' => 'Prefixul tabelelor din baza de date:',
-       'config-db-charset' => 'Setul de caractere al bazei de date',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binar',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-db-port' => 'Portul bazei de date:',
-       'config-db-schema' => 'Schema pentru MediaWiki:',
-       'config-sqlite-dir' => 'Director de date SQLite:',
-       'config-oracle-def-ts' => 'Spațiu de stocare („tablespace”) implicit:',
-       'config-oracle-temp-ts' => 'Spațiu de stocare („tablespace”) temporar:',
-       'config-header-mysql' => 'Setările MySQL',
-       'config-header-postgres' => 'Setări PostgreSQL',
-       'config-header-sqlite' => 'Setări SQLite',
-       'config-header-oracle' => 'Setări Oracle',
-       'config-invalid-db-type' => 'Tip de bază de date incorect',
-       'config-missing-db-name' => 'Trebuie să introduci o valoare pentru „Numele bazei de date”',
-       'config-connection-error' => '$1.
-
-Verificați gazda, numele de utilizator și parola și reîncercați.',
-       'config-upgrade-done-no-regenerate' => 'Actualizare completă.
-
-Acum puteți [$1 începe să vă folosiți wikiul].',
-       'config-regenerate' => 'Regenerare LocalSettings.php →',
-       'config-unknown-collation' => 'AVERTISMENT: Baza de date folosește o colaționare nerecunoscută.',
-       'config-db-web-account' => 'Contul bazei de date pentru accesul web.',
-       'config-db-web-create' => 'Creați contul dacă nu există deja',
-       'config-mysql-engine' => 'Motor de stocare:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-charset' => 'Setul de caractere al bazei de date:',
-       'config-mysql-binary' => 'Binar',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Numele wikiului:',
-       'config-site-name-blank' => 'Introduceți un nume pentru sit.',
-       'config-project-namespace' => 'Spațiul de nume al proiectului:',
-       'config-ns-generic' => 'Proiect',
-       'config-ns-site-name' => 'Același nume ca al wikiului: $1',
-       'config-ns-other' => 'Altul (specificați)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-admin-box' => 'Cont de administrator',
-       'config-admin-name' => 'Numele dumneavoastră:',
-       'config-admin-password' => 'Parolă:',
-       'config-admin-password-confirm' => 'Parola, din nou:',
-       'config-admin-password-blank' => 'Introduceți o parolă pentru contul de administrator.',
-       'config-admin-password-same' => 'Parola trebuie să difere de numele de utilizator.',
-       'config-admin-password-mismatch' => 'Cele două parole introduse nu corespund.',
-       'config-admin-email' => 'Adresa de e-mail:',
-       'config-admin-error-bademail' => 'Ați introdus o adresă de e-mail incorectă.',
-       'config-almost-done' => 'Sunteți aproape gata!
-Puteți sări peste configurarea rămasă și să instalați wikiul chiar acum.',
-       'config-optional-continue' => 'Adresează-mi mai multe întrebări.',
-       'config-optional-skip' => 'Sunt deja plictisit, doar instalează wikiul.',
-       'config-profile' => 'Profilul drepturilor de utilizator:',
-       'config-profile-wiki' => 'Wiki tradițional', # Fuzzy
-       'config-profile-no-anon' => 'Crearea de cont este necesară',
-       'config-profile-fishbowl' => 'Doar editorii autorizați',
-       'config-profile-private' => 'Wiki privat',
-       'config-license' => 'Drepturi de autor și licență:',
-       'config-license-none' => 'Fără licență în subsolul paginii',
-       'config-license-cc-by-sa' => 'Creative Commons Atribuire și distribuire în condiții identice',
-       'config-license-cc-by' => 'Creative Commons Atribuire',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Atribuire, necomercial și distribuire în condiții identice',
-       'config-license-cc-0' => 'Creative Commons Zero (domeniu public)',
-       'config-license-gfdl' => 'Licența GNU pentru Documentare Liberă 1.3 sau ulterioară',
-       'config-license-pd' => 'Domeniu public',
-       'config-license-cc-choose' => 'Alegeți o licență Creative Commons personalizată',
-       'config-email-settings' => 'Setări pentru e-mail',
-       'config-email-usertalk' => 'Activați notificările pentru pagina de discuții a utilizatorului',
-       'config-upload-deleted' => 'Director pentru fișierele șterse:',
-       'config-logo' => 'Adresa URL a siglei:',
-       'config-cc-again' => 'Alegeți din nou...',
-       'config-advanced-settings' => 'Configurare avansată',
-       'config-cache-options' => 'Parametrii pentru stocarea temporară a obiectelor:',
-       'config-extensions' => 'Extensii',
-       'config-install-step-done' => 'realizat',
-       'config-install-step-failed' => 'eșuat',
-       'config-install-extensions' => 'Se includ extensiile',
-       'config-install-database' => 'Se creează baza de date',
-       'config-install-schema' => 'Se creează schema',
-       'config-install-pg-schema-not-exist' => 'Schema PostgreSQL nu există.',
-       'config-install-pg-commit' => 'Se validează modificările',
-       'config-install-user' => 'Se creează utilizatorul pentru baza de date',
-       'config-install-user-alreadyexists' => 'Utilizatorul „$1” există deja',
-       'config-install-user-create-failed' => 'Crearea utilizatorului „$1” a eșuat: $2',
-       'config-install-tables' => 'Se creează tabelele',
-       'config-install-stats' => 'Se inițializează statisticile',
-       'config-install-keys' => 'Se generează cheile secrete',
-       'config-install-sysop' => 'Se creează contul de administrator',
-       'config-install-mainpage-failed' => 'Nu s-a putut insera pagina principală: $1',
-       'config-download-localsettings' => 'Descarcă <code>LocalSettings.php</code>',
-       'config-help' => 'ajutor',
-       'mainpagetext' => "'''Programul Wiki a fost instalat cu succes.'''",
-       'mainpagedocfooter' => 'Consultați [//meta.wikimedia.org/wiki/Help:Contents Ghidul utilizatorului (en)] pentru informații despre utilizarea software-ului wiki.
-
-== Primii pași ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista parametrilor configurabili (en)]
-* [//www.mediawiki.org/wiki/Manual:FAQ Întrebări frecvente despre MediaWiki (en)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discuții a MediaWiki (en)]', # Fuzzy
-);
-
-/** tarandíne (tarandíne)
- * @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-localsettings-badkey' => "'A chiave ca è date non g'è corrette.",
-       'config-session-error' => "Errore facenne accumenzà 'a sessione: $1",
-       'config-your-language' => "'A lènga toje:",
-       'config-your-language-help' => "Scacchie 'na lènghe da ausà duranne 'u processe de installazzione:",
-       'config-wiki-language' => 'Lènga de Uicchi:',
-       'config-back' => '← Rrète',
-       'config-continue' => 'Condinue →',
-       'config-page-language' => 'Lènghe',
-       'config-page-welcome' => "Bovègne jndr'à MediaUicchi!",
-       'config-page-dbconnect' => "Collegate a 'u database",
-       'config-page-upgrade' => "Aggiorne l'installazzione esistende",
-       'config-page-dbsettings' => "'Mbostaziune d'u database",
-       'config-page-name' => 'Nome',
-       'config-page-options' => 'Opziune',
-       'config-page-install' => 'Installe',
-       'config-page-complete' => 'Combletate!',
-       'config-page-restart' => "Riavvie l'installazzione",
-       'config-page-readme' => 'Liggeme',
-       'config-page-releasenotes' => 'Note de rilasce',
-       'config-page-copying' => 'Stoche a copie',
-       'config-page-upgradedoc' => 'Aggiornamende',
-       'config-page-existingwiki' => 'Uicchi esistende',
-       'config-db-type' => 'Tipe de database:',
-       '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-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-admin-email' => 'Indirizze e-mail:',
-       'config-install-step-done' => 'fatte',
-       'config-install-step-failed' => 'fallite',
-       'config-install-extensions' => "'Ngludenne le estenziune",
-       'config-install-database' => "Stoche a 'mboste l'archivije",
-       'config-install-schema' => "Stoche a creje 'u scheme",
-       'config-install-pg-schema-not-exist' => "'U scheme PostgreSQL non g'esiste.",
-       'config-help' => 'ajute',
-       'mainpagetext' => "'''MediaUicchi ha state 'nstallete.'''",
-       'mainpagedocfooter' => "Vè vide [//meta.wikimedia.org/wiki/Help:Contents User's Guide] pe l'mbormaziune sus a cumme s'ause 'u softuer wiki.
-
-== Pe accumenzà ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste pe le configuraziune]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ de MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Elenghe d'a poste de MediaUicchi]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localizzazzione de MediaUicchi pa lènga toje]",
-);
-
-/** Russian (русский)
- * @author Adata80
- * @author DCamer
- * @author Eleferen
- * @author Express2000
- * @author KPu3uC B Poccuu
- * @author Kaganer
- * @author Krinkle
- * @author Lockal
- * @author MaxSem
- * @author Okras
- * @author Yuriy Apostol
- * @author Александр Сигачёв
- * @author Сrower
- * @author 아라
- */
-$messages['ru'] = array(
-       'config-desc' => 'Инсталлятор MediaWiki',
-       'config-title' => 'Установка MediaWiki $1',
-       'config-information' => 'Информация',
-       'config-localsettings-upgrade' => 'Обнаружен файл <code>LocalSettings.php</code>.
-Для обновления этой установки, пожалуйста, введите значение <code>$wgUpgradeKey</code>.
-Его можно найти в файле <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Обнаружен файл <code>LocalSettings.php</code>.
-Для обновления этой установки, пожалуйста, запустите <code>update.php</code>',
-       'config-localsettings-key' => 'Ключ обновления:',
-       'config-localsettings-badkey' => 'Вы указали неправильный ключ',
-       'config-upgrade-key-missing' => 'Обнаружена существующая установленная копия MediaWiki.
-Чтобы обновить обнаруженную установку, пожалуйста, добавьте следующую строку в конец вашего файла <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => 'Похоже, что существующий файл <code>LocalSettings.php</code> не является полными.
-Не установлена переменная $1.
-Пожалуйста, измените <code>LocalSettings.php</code> так, чтобы значение этой переменной было задано, затем нажмите «{{int:Config-continue}}».',
-       'config-localsettings-connection-error' => 'Произошла ошибка при подключении к базе данных с помощью настроек, указанных в <code>LocalSettings.php</code> или <code>AdminSettings.php</code>. Пожалуйста, исправьте эти настройки и повторите попытку.
-
-$1',
-       'config-session-error' => 'Ошибка при запуске сессии: $1',
-       'config-session-expired' => 'Ваша сессия истекла.
-Сессии настроены на длительность $1.
-Вы её можете увеличить, изменив <code>session.gc_maxlifetime</code> в php.ini.
-Перезапустите процесс установки.',
-       'config-no-session' => 'Данные сессии потеряны!
-Проверьте ваш php.ini и убедитесь, что <code>session.save_path</code> установлен в соответствующий каталог.',
-       'config-your-language' => 'Ваш язык:',
-       'config-your-language-help' => 'Выберите язык, на котором будет происходить процесс установки.',
-       'config-wiki-language' => 'Язык, который будет использовать вики:',
-       'config-wiki-language-help' => 'Выберите язык, на котором будут отображаться вики.',
-       'config-back' => '← Назад',
-       'config-continue' => 'Далее →',
-       'config-page-language' => 'Язык',
-       'config-page-welcome' => 'Добро пожаловать в MediaWiki!',
-       'config-page-dbconnect' => 'Подключение к базе данных',
-       'config-page-upgrade' => 'Обновление существующей установки',
-       'config-page-dbsettings' => 'Настройки базы данных',
-       'config-page-name' => 'Название',
-       'config-page-options' => 'Настройки',
-       'config-page-install' => 'Установка',
-       'config-page-complete' => 'Готово!',
-       'config-page-restart' => 'Начать установку заново',
-       'config-page-readme' => 'Прочти меня',
-       'config-page-releasenotes' => 'Информация о версии',
-       'config-page-copying' => 'Лицензия',
-       'config-page-upgradedoc' => 'Обновление',
-       'config-page-existingwiki' => 'Существующая вики',
-       'config-help-restart' => 'Вы хотите удалить все сохранённые данные, которые вы ввели, и запустить процесс установки заново?',
-       'config-restart' => 'Да, начать заново',
-       'config-welcome' => '=== Проверка окружения ===
-Будут проведены базовые проверки с целью определить, подходит ли данная система для установки MediaWiki.
-Не забудьте включить эту информацию, если вам потребуется помощь для завершения установки.',
-       'config-copyright' => "=== Авторские права и условия ===
-
-$1
-
-MediaWiki является свободным программным обеспечением, которое вы можете распространять и/или изменять в соответствии с условиями лицензии GNU General Public License, опубликованной фондом свободного программного обеспечения; второй версии, либо любой более поздней версии.
-
-MediaWiki распространяется в надежде, что она будет полезной, но '''без каких-либо гарантий''', даже без подразумеваемых гарантий '''коммерческой ценности''' или '''пригодности для определённой цели'''. См. лицензию GNU General Public License для более подробной информации.
-
-Вы должны были получить <doclink href=Copying>копию GNU General Public License</doclink> вместе с этой программой, если нет, то напишите Free Software Foundation, Inc., по адресу: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA или [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html прочтите её онлайн].",
-       'config-sidebar' => '* [//www.mediawiki.org Сайт MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents/ru Справка для пользователей]
-* [//www.mediawiki.org/wiki/Manual:Contents/ru Справка для администраторов]
-* [//www.mediawiki.org/wiki/Manual:FAQ/ru FAQ]
-----
-* <doclink href=Readme>Readme-файл</doclink>
-* <doclink href=ReleaseNotes>Информация о выпуске</doclink>
-* <doclink href=Copying>Лицензия</doclink>
-* <doclink href=UpgradeDoc>Обновление</doclink>',
-       'config-env-good' => 'Проверка внешней среды была успешно проведена.
-Вы можете установить MediaWiki.',
-       'config-env-bad' => 'Была проведена проверка внешней среды.
-Вы не можете установить MediaWiki.',
-       'config-env-php' => 'Установленная версия PHP: $1.',
-       'config-env-php-toolow' => 'Найден PHP $1, тогда как MediaWiki требуется PHP версии $2 или выше.',
-       'config-unicode-using-utf8' => 'Использовать Brion Vibber utf8_normalize.so для нормализации Юникода.',
-       'config-unicode-using-intl' => 'Будет использовано [http://pecl.php.net/intl расширение «intl» для PECL] для нормализации Юникода.',
-       'config-unicode-pure-php-warning' => "'''Внимание!''': [http://pecl.php.net/intl расширение intl из PECL] недоступно для нормализации Юникода, будет использоваться медленная реализация на чистом PHP.
-Если ваш сайт работает под высокой нагрузкой, вам следует больше узнать о [//www.mediawiki.org/wiki/Unicode_normalization_considerations нормализации Юникода].",
-       'config-unicode-update-warning' => "'''Предупреждение''': установленная версия обёртки нормализации Юникода использует старую версию библиотеки [http://site.icu-project.org/ проекта ICU].
-Вы должны [//www.mediawiki.org/wiki/Unicode_normalization_considerations обновить версию], если хотите полноценно использовать Юникод.",
-       'config-no-db' => 'Не найдено поддержки баз данных! Вам необходимо установить драйвера базы данных для PHP.
-Поддерживаются следующие базы данных: $1.
-
-Если вы используете виртуальный хостинг, обратитесь к своему хостинг-провайдеру с просьбой установить подходящий драйвер базы данных.
-Если вы скомпилировали PHP сами, сконфигурируйте его снова с включенным клиентом базы данных, например, с помощью <code>./configure --with-mysql</code>.
-Если вы установили PHP из пакетов Debian или Ubuntu, то вам также необходимо установить модуль php5-mysql.',
-       'config-outdated-sqlite' => "'''Предупреждение''': у Вас установлен SQLite  $1, версия которого ниже требуемой $2 . SQLite будет недоступен.",
-       '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' => "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!'''
-Это приводит к непредсказуемой порче вводимых данных.
-Установка и использование MediaWiki без выключения этой опции невозможно.",
-       'config-magic-quotes-sybase' => "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''
-Это приводит к непредсказуемой порче вводимых данных.
-Установка и использование MediaWiki без выключения этой опции невозможно.",
-       'config-mbstring' => "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''
-Это приводит к ошибкам и непредсказуемой порче вводимых данных.
-Установка и использование MediaWiki без выключения этой опции невозможно.",
-       'config-ze1' => "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]!'''
-Это приводит к катастрофическим сбоям в MediaWiki.
-Установка и использование MediaWiki без выключения этой опции невозможно.",
-       'config-safe-mode' => "'''Предупреждение:''' PHP работает в [http://www.php.net/features.safe-mode «безопасном режиме»].
-Это может привести к проблемам, особенно с загрузкой файлов и вставкой математических формул.",
-       'config-xml-bad' => 'XML-модуль РНР отсутствует.
-MediaWiki не будет работать в этой конфигурации, так как требуется функционал этого модуля.
-Если вы работаете в Mandrake, установите PHP XML-пакет.',
-       'config-pcre' => 'Модуль поддержки PCRE не найден.
-Для работы MediaWiki требуется поддержка Perl-совместимых регулярных выражений.',
-       'config-pcre-no-utf8' => "'''Фатальная ошибка'''. Модуль PCRE для PHP, похоже, собран без поддержки PCRE_UTF8.
-MediaWiki требует поддержки UTF-8 для корректной работы.",
-       'config-memory-raised' => 'Ограничение на доступную PHP память (<code>memory_limit</code>) поднято с $1 до $2.',
-       'config-memory-bad' => "'''Внимание:''' размер PHP <code>memory_limit</code> составляет $1.
-Вероятно, этого слишком мало.
-Установка может потерпеть неудачу!",
-       'config-ctype' => "'''Фатальная ошибка:''' PHP должен быть скомпилирован с поддержкой [http://www.php.net/manual/ru/ctype.installation.php расширения Ctype].",
-       'config-json' => "'''Фатальная ошибка:''' PHP был скомпилирован без поддержка JSON.
-Вам необходимо установить либо расширение PHP JSON, либо расширение [http://pecl.php.net/package/jsonc PECL jsonc] перед установкой MediaWiki.
-* PHP-расширение входит в состав Red Hat Enterprise Linux (CentOS) 5 и 6, хотя должна быть включено в <code>/etc/php.ini</code> или <code>/etc/php.d/json.ini</code>.
-* Некоторые дистрибутивы Linux, выпущенные после мая 2013 года, не включают расширение PHP, вместо того, чтобы упаковывать расширение PECL как <code>php5-json</code> или <code>php-pecl-jsonc</code>.",
-       '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-mod-security' => "'''Внимание''': на вашем веб-сервере включен [http://modsecurity.org/ mod_security]. При неправильной настройке он может вызывать проблемы для MediaWiki или другого ПО, позволяющего пользователям отправлять на сервер произвольный текст.
-Обратитесь к [http://modsecurity.org/documentation/ документации mod_security] или в поддержку вашего хостера, если при работе возникают непонятные ошибки.",
-       'config-diff3-bad' => 'GNU diff3 не найден.',
-       'config-git' => 'Найдена система контроля версий Git: <code>$1</code>.',
-       'config-git-bad' => 'Программное обеспечение по управлению версиями Git не найдено.',
-       'config-imagemagick' => 'Обнаружен ImageMagick: <code>$1</code>.
-Возможно отображение миниатюр изображений, если вы разрешите закачки файлов.',
-       'config-gd' => 'Найдена встроенная графическая библиотека GD.
-Возможность использования миниатюр изображений будет включена, если вы включите их загрузку.',
-       'config-no-scaling' => 'Не удалось найти встроенную библиотеку GD или ImageMagick.
-Возможность использования миниатюр изображений будет отключена.',
-       'config-no-uri' => "'''Ошибка:''' Не могу определить текущий URI.
-Установка прервана.",
-       'config-no-cli-uri' => "'''Предупреждение''': нет задан параметр --scriptpath, используется по умолчанию: <code>$1</code> .",
-       'config-using-server' => 'Используется имя сервера «<nowiki>$1</nowiki>».',
-       'config-using-uri' => 'Используется имя сервера "<nowiki>$1$2</nowiki>".',
-       'config-uploads-not-safe' => "'''Внимание:''' директория, используемая по умолчанию для загрузок (<code>$1</code>) уязвима к выполнению произвольных скриптов.
-Хотя MediaWiki проверяет все загружаемые файлы на наличие угроз, настоятельно рекомендуется [//www.mediawiki.org/wiki/Manual:Security#Upload_security закрыть данную уязвимость] перед включением загрузки файлов.",
-       'config-no-cli-uploads-check' => "'''Предупреждение:''' каталог для загрузки по умолчанию ( <code>$1</code> ) не проверялся на уязвимости
- на выполнение произвольного сценария во время установки CLI.",
-       'config-brokenlibxml' => 'В вашей системе имеется сочетание версий PHP и libxml2, могущее привести к скрытым повреждениям данных в MediaWiki и других веб-приложениях.
-Обновите PHP до версии 5.2.9 или старше и libxml2 до 2.7.3 или старше ([//bugs.php.net/bug.php?id=45996 сведения об ошибке]).
-Установка прервана.',
-       'config-using531' => 'PHP $1 не совместим с MediaWiki из-за ошибки с параметрами-ссылками при вызовах <code>__call()</code>.
-Обновитесь до PHP 5.3.2 и выше, или откатитесь до PHP 5.3.0, чтобы избежать этой проблемы.
-Установка прервана.',
-       'config-suhosin-max-value-length' => 'Suhosin установлен и ограничивает параметр GET <code>length</code> до $1 байт. Компонент MediaWiki ResourceLoader будет обходить это ограничение, но это снизит производительность. Если это возможно, следует установить <code>suhosin.get.max_value_length</code> в значение 1024 или выше в <code>php.ini</code>, а также установить для <code>$wgResourceLoaderMaxQueryLength</code> такое же значение в LocalSettings.php.',
-       'config-db-type' => 'Тип базы данных:',
-       'config-db-host' => 'Хост базы данных:',
-       'config-db-host-help' => 'Если сервер базы данных находится на другом сервере, введите здесь его имя хоста или IP-адрес.
-
-Если вы используете виртуальный хостинг, ваш провайдер должен указать правильное имя хоста в своей документации.
-
-Если вы устанавливаете систему на сервере под Windows и используете MySQL, имя сервера «localhost» может не работать. В этом случае попробуйте указать 127.0.0.1 локальный  IP-адрес.
-
-Если вы используете PostgreSQL, оставьте это поле пустым для подключения через сокет Unix.',
-       'config-db-host-oracle' => 'TNS базы данных:',
-       'config-db-host-oracle-help' => 'Введите действительный [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; файл tnsnames.ora должен быть видимым для этой инсталляции. <br />При использовании клиентских библиотек версии 10g и старше также возможно использовать метод именования [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
-       'config-db-wiki-settings' => 'Идентификация этой вики',
-       'config-db-name' => 'Имя базы данных:',
-       'config-db-name-help' => 'Выберите название-идентификатор для вашей вики.
-Оно не должно содержать пробелов.
-
-Если вы используете виртуальный хостинг, провайдер или выдаст вам конкретное имя базы данных, или позволит создавать базы данных с помощью панели управления.',
-       'config-db-name-oracle' => 'Схема базы данных:',
-       'config-db-account-oracle-warn' => 'Поддерживаются три сценария установки Oracle в качестве базы данных:
-
-Если вы хотите создать учётную запись базы данных в процессе установки, пожалуйста, укажите учётную запись роли SYSDBA для установки и укажите желаемые полномочия учётной записи с веб-доступом. вы также можете учётную запись с веб-доступом вручную и указать только её (если у неё есть необходимые разрешения на создание объектов схемы) или указать две учётные записи, одну с правами создания объектов, а другую с ограничениями для веб-доступа.
-
-Сценарий для создания учётной записи с необходимыми привилегиями можно найти в папке «maintenance/oracle/» этой программы установки. Имейте в виду, что использование ограниченной учётной записи приведёт к отключению всех возможностей обслуживания с учётной записи по умолчанию.',
-       'config-db-install-account' => 'Учётная запись для установки',
-       'config-db-username' => 'Имя пользователя базы данных:',
-       'config-db-password' => 'Пароль базы данных:',
-       'config-db-password-empty' => 'Пожалуйста, введите пароль для нового пользователя базы данных «$1».
-Хотя и возможно создание пользователей без паролей, это небезопасно.',
-       'config-db-install-username' => 'Введите имя пользователя, которое будет использоваться для подключения к базе данных в процессе установки.
-Это не имя пользователя MediaWiki, это имя пользователя для базы данных.',
-       'config-db-install-password' => 'Введите пароль, который будет использоваться для подключения к базе данных в процессе установки.
-Это не пароль пользователя MediaWiki, это пароль для базы данных.',
-       'config-db-install-help' => 'Введите имя пользователя и пароль, которые будут использоваться для подключения к базе данных во время процесса установки.',
-       'config-db-account-lock' => 'Использовать то же имя пользователя и пароль для обычной работы',
-       'config-db-wiki-account' => 'Учётная запись для обычной работы',
-       'config-db-wiki-help' => 'Введите имя пользователя и пароль, которые будут использоваться для подключения к базе данных во время обычной работы вики.
-Если такой учётной записи не существует, а установочная учётная запись имеет достаточно привилегий, то обычная учётная запись будет создана с минимально необходимыми для работы вики привилегиями.',
-       'config-db-prefix' => 'Префикс таблиц базы данных:',
-       'config-db-prefix-help' => 'Если вам нужно делить одну базу данных между несколькими вики, или между MediaWiki и другими веб-приложениями, вы можете добавить префикс для всех имён таблиц.
-Не используйте пробелы.
-
-Это поле обычно остаётся пустым.',
-       'config-db-charset' => 'Набор символов базы данных',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 бинарная',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 обратно совместимая с UTF-8',
-       'config-charset-help' => "'''Внимание.''' Если вы используете '''обратно совместый UTF-8''' на MySQL 4.1+ и создаёте резервные копии базы данных с помощью <code>mysqldump</code>, то все не-ASCII символы могут быть искажены, а резервная копия окажется негодной!
-
-В '''бинарном режиме''' MediaWiki хранит юникодный текст в базе в виде двоичных полей.
-Это более эффективно, чем MySQL в режиме UTF-8, позволяет использовать полный набор символов Юникода.
-В '''режиме UTF-8''' MySQL будет знать к какому набору символу относятся ваши данные, сможет представлять и преобразовать их надлежащим образом (буква Ё окажется при сортировке после буквы Е, а не после буквы Я, как в бинарном режиме),
-но не позволит вам сохранять символы, выходящие за пределы [//ru.wikipedia.org/wiki/Символы,_представленные_в_Юникоде#.D0.91.D0.B0.D0.B7.D0.BE.D0.B2.D0.B0.D1.8F_.D0.BC.D0.BD.D0.BE.D0.B3.D0.BE.D1.8F.D0.B7.D1.8B.D0.BA.D0.BE.D0.B2.D0.B0.D1.8F_.D0.BF.D0.BB.D0.BE.D1.81.D0.BA.D0.BE.D1.81.D1.82.D1.8C BMP].",
-       'config-mysql-old' => 'Необходим MySQL $1 или более поздняя версия. У вас установлен MySQL $2.',
-       'config-db-port' => 'Порт базы данных:',
-       'config-db-schema' => 'Схема для MediaWiki',
-       'config-db-schema-help' => 'Эта схема обычно работают хорошо.
-Изменяйте её только если знаете, что вам это нужно.',
-       'config-pg-test-error' => "Не удаётся подключиться к базе данных '''$1''': $2",
-       'config-sqlite-dir' => 'Директория данных SQLite:',
-       'config-sqlite-dir-help' => "SQLite хранит все данные в одном файле.
-
-Директория, которую вы должны указать, должна быть доступна для записи веб-сервером во время установки.
-
-Она '''не должна''' быть доступна через Интернет, поэтому не должна совпадать с той, где хранятся PHP файлы.
-
-Установщик запишет в эту директорию файл <code>.htaccess</code>, но если это не сработает, кто-нибудь может получить доступ ко всей базе данных.
-В этой базе находится в том числе и информация о пользователях (адреса электронной почты, хэши паролей), а также удалённые страницы и другие секретные данные о вики.
-
-По возможности, расположите базу данных где-нибудь в стороне, например, в <code>/var/lib/mediawiki/yourwiki</code>.",
-       'config-oracle-def-ts' => 'Пространство таблиц по умолчанию:',
-       'config-oracle-temp-ts' => 'Временное пространство таблиц:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => 'MediaWiki поддерживает следующие СУБД:
-
-$1
-
-Если вы не видите своей системы хранения данных в этом списке, следуйте инструкциям, на которые есть ссылка выше, чтобы получить поддержку.',
-       'config-support-mysql' => '* $1 — основная база данных для MediaWiki, и лучше поддерживается ([http://www.php.net/manual/en/mysql.installation.php инструкция, как собрать PHP с поддержкой MySQL])',
-       'config-support-postgres' => '* $1 — популярная открытая СУБД, альтернатива MySQL ([http://www.php.net/manual/en/pgsql.installation.php инструкция, как собрать PHP с поддержкой PostgreSQL]). Могут встречаться небольшие неисправленные ошибки, не рекомендуется для использования в рабочей системе.',
-       'config-support-sqlite' => '* $1 — это легковесная система баз данных, имеющая очень хорошую поддержку. ([http://www.php.net/manual/en/pdo.installation.php инструкция, как собрать PHP с поддержкой SQLite], работающей посредством PDO)',
-       'config-support-oracle' => '* $1 — это коммерческая база данных масштаба предприятия. ([http://www.php.net/manual/en/oci8.installation.php Как собрать PHP с поддержкой OCI8])',
-       'config-header-mysql' => 'Настройки MySQL',
-       'config-header-postgres' => 'Настройки PostgreSQL',
-       'config-header-sqlite' => 'Настройки SQLite',
-       'config-header-oracle' => 'Настройки Oracle',
-       'config-invalid-db-type' => 'Неверный тип базы данных',
-       'config-missing-db-name' => 'Вы должны ввести значение параметра «Имя базы данных»',
-       'config-missing-db-host' => 'Необходимо ввести значение параметра «Сервер базы данных»',
-       'config-missing-db-server-oracle' => 'Вы должны заполнить поле «TNS базы данных»',
-       'config-invalid-db-server-oracle' => 'Неверное TNS базы данных «$1».
-Используйте либо «TNS Name», либо строку «Easy Connect» ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Методы наименования Oracle])',
-       'config-invalid-db-name' => 'Неверное имя базы данных «$1».
-Используйте только ASCII-символы (a-z, A-Z), цифры (0-9), знак подчёркивания (_) и дефис(-).',
-       'config-invalid-db-prefix' => 'Неверный префикс базы данных «$1».
-Используйте только буквы ASCII (a-z, A-Z), цифры (0-9), знак подчёркивания (_) и дефис (-).',
-       'config-connection-error' => '$1.
-
-Проверьте хост, имя пользователя и пароль и попробуйте ещё раз.',
-       'config-invalid-schema' => 'Неправильная схема для MediaWiki «$1».
-Используйте только ASCII символы (a-z, A-Z), цифры(0-9) и знаки подчёркивания(_).',
-       'config-db-sys-create-oracle' => 'Программа установки поддерживает только использование SYSDBA для создания новой учётной записи.',
-       'config-db-sys-user-exists-oracle' => 'Учётная запись «$1». SYSDBA может использоваться только для создания новой учётной записи!',
-       'config-postgres-old' => 'Необходим PostgreSQL $1 или более поздняя версия. У вас установлен PostgreSQL $2.',
-       'config-sqlite-name-help' => 'Выберите имя-идентификатор для вашей вики.
-Не используйте дефисы и пробелы.
-Эта строка будет использоваться в имени файла SQLite.',
-       'config-sqlite-parent-unwritable-group' => 'Не удалось создать директорию данных <nowiki><code>$1</code></nowiki>, так как у веб-сервера нет прав записи в родительскую директорию <nowiki><code>$2</code></nowiki>.
-
-Установщик определил пользователя, под которым работает веб-сервер.
-Сделайте директорию <nowiki><code>$3</code></nowiki> доступной для записи и продолжите.
-В Unix/Linux системе выполните:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Не удалось создать директорию для данных <code><nowiki>$1</nowiki></code>, так как у веб-сервера нет прав на запись в родительскую директорию <code><nowiki>$2</nowiki></code>.
-
-Программа установки не смогла определить пользователя, под которым работает веб-сервер.
-Для продолжения сделайте каталог <code><nowiki>$3</nowiki></code> глобально доступным для записи серверу (и другим).
-В Unix/Linux сделайте:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Ошибка при создании директории для данных «$1».
-Проверьте расположение и повторите попытку.',
-       'config-sqlite-dir-unwritable' => 'Невозможно произвести запись в каталог «$1».
-Измените настройки доступа так, чтобы веб-сервер мог записывать в этот каталог, и попробуйте ещё раз.',
-       'config-sqlite-connection-error' => '$1.
-
-Проверьте название базы данных и директорию с данными и попробуйте ещё раз.',
-       'config-sqlite-readonly' => 'Файл <code>$1</code> недоступен для записи.',
-       'config-sqlite-cant-create-db' => 'Не удаётся создать файл базы данных <code>$1</code> .',
-       'config-sqlite-fts3-downgrade' => 'У PHP отсутствует поддержка FTS3 — сбрасываем таблицы',
-       'config-can-upgrade' => "В базе данных найдены таблицы MediaWiki.
-Чтобы обновить их до MediaWiki $1, нажмите на кнопку '''«Продолжить»'''.",
-       'config-upgrade-done' => "Обновление завершено.
-
-Теперь вы можете [$1 начать использовать вики].
-
-Если вы хотите повторно создать файл <code>LocalSettings.php</code>, нажмите на кнопку ниже.
-Это действие '''не рекомендуется''', если у вас не возникло проблем при установке.",
-       'config-upgrade-done-no-regenerate' => 'Обновление завершено.
-
-Теперь вы можете [$1 начать работу с вики].',
-       'config-regenerate' => 'Создать LocalSettings.php заново →',
-       'config-show-table-status' => 'Запрос «<code>SHOW TABLE STATUS</code>» не выполнен!',
-       'config-unknown-collation' => "'''Внимание:''' База данных использует нераспознанные правила сортировки.",
-       'config-db-web-account' => 'Учётная запись для доступа к базе данных из веб-сервера',
-       'config-db-web-help' => 'Выберите имя пользователя и пароль, которые веб-сервер будет использовать для подключения к серверу базы данных при обычной работе вики.',
-       'config-db-web-account-same' => 'Использовать ту же учётную запись, что и для установки',
-       'config-db-web-create' => 'Создать учётную запись, если она ещё не существует',
-       'config-db-web-no-create-privs' => 'Учётная запись, указанная вами для установки, не обладает достаточными правами для создания учётной записи.
-Указанная здесь учётная запись уже должна существовать.',
-       'config-mysql-engine' => 'Движок базы данных:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "''' Внимание.''' Вы выбрали механизм MyISAM для хранения данных MySQL. Он не рекомендуется к использованию по следующим причинам:
-* он слабо поддерживает параллелизм из-за табличных блокировок;
-* более склонен к потере данных, по сравнению с другими механизмами;
-* код MediaWiki не всегда учитывает особенности MyISAM должным образом.
-
-Если ваша установка MySQL поддерживает InnoDB, настоятельно рекомендуется выбрать этот механизм.
-Если ваша установка MySQL не поддерживает InnoDB, возможно, настало время обновиться.",
-       'config-mysql-only-myisam-dep' => "'''Предупреждение:''' MyISAM является единственной доступной системой хранения данных для MySQL, которая, однако, не рекомендуется для использования с MediaWiki, потому что:
- * он слабо поддерживает параллелизм из-за блокировки таблиц
- * она больше других систем подвержена повреждению
- * кодовая база MediaWiki не всегда обрабатывает MyISAM так, как следует
-
-Ваша MySQL не поддерживает InnoDB, так что, возможно, настало время для обновления.",
-       'config-mysql-engine-help' => "'''InnoDB''' почти всегда предпочтительнее, так как он лучше справляется с параллельным доступом.
-
-'''MyISAM''' может оказаться быстрее для вики с одним пользователем или с минимальным количеством поступающих правок, однако базы данных на нём портятся чаще, чем на InnoDB.",
-       'config-mysql-charset' => 'Набор символов (кодовая таблица) базы данных:',
-       'config-mysql-binary' => 'Двоичный',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "В '''двоичном режиме''' MediaWiki хранит UTF-8 текст в бинарных полях базы данных.
-Это более эффективно, чем ''UTF-8 режим'' MySQL, и позволяет использовать полный набор символов Unicode.
-
-В '''режиме UTF-8''' MySQL будет знать в какой кодировке находятся Ваши данные и может отображать и преобразовывать их соответствующим образом, но это не позволит вам хранить символы выше [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Базовой Многоязыковой Плоскости].",
-       'config-site-name' => 'Название вики:',
-       'config-site-name-help' => 'Название будет отображаться в заголовке окна браузера и в некоторых других местах вики.',
-       'config-site-name-blank' => 'Введите название сайта.',
-       'config-project-namespace' => 'Пространство имён проекта:',
-       'config-ns-generic' => 'Проект',
-       'config-ns-site-name' => 'То же, что имя вики: $1',
-       'config-ns-other' => 'Другое (укажите)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-project-namespace-help' => "Следуя примеру Википедии, многие вики хранят свои страницы правил отдельно от страниц основного содержания, в так называемом '''«пространстве имён проекта»'''.
-Все названия страниц в этом пространстве имён начинается с определённого префикса, который вы можете задать здесь.
-Обычно, этот префикс происходит от имени вики, но он не может содержать знаки препинания, символы «#» или «:».",
-       'config-ns-invalid' => 'Указанное пространство имён <nowiki>$1</nowiki> недопустимо.
-Укажите другое пространство имён проекта.',
-       'config-ns-conflict' => 'Указанное пространство имён «<nowiki>$1</nowiki>» конфликтует со стандартным пространством имён MediaWiki.
-Укажите другое пространство имён проекта.',
-       'config-admin-box' => 'Учётная запись администратора',
-       'config-admin-name' => 'Имя:',
-       'config-admin-password' => 'Пароль:',
-       'config-admin-password-confirm' => 'Пароль ещё раз:',
-       'config-admin-help' => 'Введите ваше имя пользователя здесь, например, «Иван Иванов».
-Это имя будет использоваться для входа в вики.',
-       'config-admin-name-blank' => 'Введите имя пользователя администратора.',
-       'config-admin-name-invalid' => 'Указанное имя пользователя «<nowiki>$1</nowiki>» недопустимо.
-Укажите другое имя пользователя.',
-       'config-admin-password-blank' => 'Введите пароль для учётной записи администратора.',
-       'config-admin-password-same' => 'Пароль не должен быть таким же, как имя пользователя.',
-       'config-admin-password-mismatch' => 'Введённые вами пароли не совпадают.',
-       'config-admin-email' => 'Адрес электронной почты:',
-       'config-admin-email-help' => 'Введите адрес электронной почты, чтобы получать сообщения от других пользователей вики, иметь возможность восстановить пароль, а также получать уведомления об изменениях страниц из списка наблюдения. Вы можете оставить это поле пустым.',
-       'config-admin-error-user' => 'Внутренняя ошибка при создании учётной записи администратора с именем «<nowiki>$1</nowiki>».',
-       'config-admin-error-password' => 'Внутренняя ошибка при установке пароля для учётной записи администратора «<nowiki>$1</nowiki>»: <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Вы ввели неправильный адрес электронной почты',
-       'config-subscribe' => 'Подписаться на [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce рассылку новостей о появлении новых версий MediaWiki].',
-       'config-subscribe-help' => 'Это список рассылки с малым числом сообщений, используется для анонса новых выпусков и сообщений о проблемах с безопасностью.
-Вам следует подписаться на него и обновлять движок MediaWiki, по мере выхода новых версий.',
-       'config-subscribe-noemail' => 'Вы попытались подписаться на список рассылки уведомлений о новых выпусках без указания адреса электронной почты.
-Укажите адрес электронной почты, если вы хотите подписаться на список рассылки.',
-       'config-almost-done' => 'Вы почти у цели!
-Остальные настройки можно пропустить и приступить к установке вики.',
-       'config-optional-continue' => 'Произвести тонкую настройку',
-       'config-optional-skip' => 'Хватит, установить вики',
-       'config-profile' => 'Профиль прав прользователей:',
-       'config-profile-wiki' => 'Открытая вики',
-       'config-profile-no-anon' => 'Требуется создание учётной записи',
-       'config-profile-fishbowl' => 'Только для авторизованных редакторов',
-       'config-profile-private' => 'Закрытая вики',
-       'config-profile-help' => "Вики-технология лучше всего работает, когда вы позволяете редактировать сайт максимально широкому кругу лиц.
-В MediaWiki легко просмотреть последних изменений и, при необходимости, откатить любой ущерб сделанный злоумышленниками или наивными пользователями.
-
-Однако, движок MediaWiki можно использовать и иными способами, и не далеко не всех удаётся убедить в преимуществах открытой вики-работы.
-Так что в вас есть выбор.
-
-Модель '''«{{int:config-profile-wiki}}»''' позволяет всем править страницы даже не регистрируясь на сайте. Конфигурация '''{{int:config-profile-no-anon}}''' обеспечивает дополнительный учёт, но может отсечь случайных участников.
-
-Сценарий '''«{{int:config-profile-fishbowl}}»''' разрешает редактирование только определённым участникам, но общедоступным остаётся просмотр страниц, в том числе просмотр истории изменения. В режиме '''«{{int:config-profile-private}}»''' просмотр страниц разрешён только определённым пользователям, какая-то их часть может иметь также права на редактирование.
-
-Более сложные схемы разграничения прав можно настроить после установки, см. [//www.mediawiki.org/wiki/Manual:User_rights соответствующее руководство].",
-       'config-license' => 'Авторские права и лицензии:',
-       'config-license-none' => 'Не указывать лицензию в колонтитуле внизу страницы',
-       'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
-       'config-license-cc-by' => 'Creative Commons Attribution',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
-       'config-license-cc-0' => 'Creative Commons Zero (общественное достояние)',
-       'config-license-gfdl' => 'GNU Free Documentation License 1.3 или более поздняя',
-       'config-license-pd' => 'Общественное достояние',
-       'config-license-cc-choose' => 'Выберите одну из лицензий Creative Commons',
-       'config-license-help' => "Многие общедоступные вики разрешают использовать свои материалы на условиях [http://freedomdefined.org/Definition/Ru свободных лицензий].
-Это помогает созданию чувства общности, стимулирует долгосрочное участие.
-Но в этом нет необходимости для частных или корпоративных вики.
-
-Если вы хотите использовать тексты из Википедии или хотите, что в Википедию можно было копировать тексты из вашей вики, вам следует выбрать '''Creative Commons Attribution Share Alike'''.
-
-Википедия ранее использовала лицензию GNU Free Documentation License.
-GFDL может быть использована, но она сложна для понимания и осложняет повторное использование материалов.",
-       'config-email-settings' => 'Настройки электронной почты',
-       'config-enable-email' => 'Включить исходящие e-mail',
-       'config-enable-email-help' => 'Если вы хотите, чтобы электронная почта работала, необходимо выполнить [http://www.php.net/manual/en/mail.configuration.php соответствующие настройки PHP].
-Если вы не хотите использовать возможности электронной почты в вики, вы можете её отключить.',
-       'config-email-user' => 'Включить электронную почту от участника к участнику',
-       'config-email-user-help' => 'Разрешить всем пользователям отправлять друг другу электронные письма, если выставлена соответствующая настройка в профиле.',
-       'config-email-usertalk' => 'Включить уведомления пользователей о сообщениях на их странице обсуждения',
-       'config-email-usertalk-help' => 'Разрешить пользователям получать уведомления об изменениях своих страниц обсуждения, если они разрешат это в своих настройках.',
-       'config-email-watchlist' => 'Включить уведомление на электронную почту об изменении списка наблюдения',
-       'config-email-watchlist-help' => 'Разрешить пользователям получать уведомления об отслеживаемых ими страницах, если они разрешили это в своих настройках.',
-       'config-email-auth' => 'Включить аутентификацию через электронную почту',
-       'config-email-auth-help' => "Если эта опция включена, пользователи должны подтвердить свой адрес электронной почты перейдя по ссылке, которая отправляется на e-mail. Подтверждение требуется каждый раз при смене электронного ящика в настройках пользователя.
-Только прошедшие проверку подлинности адреса электронной почты, могут получать электронные письма от других пользователей или изменять уведомления, отправляемые по электронной почте.
-Включение этой опции '''рекомендуется'''  для открытых вики в целях пресечения потенциальных злоупотреблений возможностями электронной почты.",
-       'config-email-sender' => 'Обратный адрес электронной почты:',
-       'config-email-sender-help' => 'Введите адрес электронной почты для использования в качестве обратного адреса исходящей электронной почты.
-На него будут отправляться отказы.
-Многие почтовые серверы требуют, чтобы по крайней мере доменное имя в нём было правильным.',
-       'config-upload-settings' => 'Загрузка изображений и файлов',
-       'config-upload-enable' => 'Разрешить загрузку файлов',
-       'config-upload-help' => 'Разрешение загрузки файлов, потенциально, может привести к угрозе безопасности сервера.
-Для получения дополнительной информации, прочтите в руководстве [//www.mediawiki.org/wiki/Manual:Security раздел, посвящённый безопасности].
-
-Чтобы разрешить загрузку файлов, необходимо изменить права на каталог <code>images</code>, в корневой директории MediaWiki так, чтобы веб-сервер мог записывать в него файлы.
-Затем включите эту опцию.',
-       'config-upload-deleted' => 'Директория для удалённых файлов:',
-       'config-upload-deleted-help' => 'Выберите каталог, в котором будут храниться архивы удалённых файлов.
-В идеальном случае, в этот каталог не должно быть доступа из сети Интернет.',
-       'config-logo' => 'URL логотипа:',
-       'config-logo-help' => 'Стандартная тема оформления MediaWiki содержит над боковой панелью пространство для логотипа размером 135x160 пикселей.
-Загрузите изображение соответствующего размера, и введите его URL здесь.
-
-Вы можете использовать <code>$wgStylePath</code> или <code>$wgScriptPath</code>, если ваш логотип находится относительно к этим путям.
-
-Если вам не нужен логотип, оставьте это поле пустым.',
-       'config-instantcommons' => 'Включить Instant Commons',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] — это функция, позволяющая использовать изображения, звуки и другие медиафайлы с Викисклада ([//commons.wikimedia.org/ Wikimedia Commons]).
-Для работы этой функции MediaWiki необходим доступ к Интернету.
-
-Дополнительную информацию об Instant Commons, в том числе указания о том, как её настроить для других вики, отличных от Викисклада, можно найти в [//mediawiki.org/wiki/Manual:$wgForeignFileRepos руководстве].',
-       'config-cc-error' => 'Механизм выбора лицензии Creative Commons не вернул результата.
-Введите название лицензии вручную.',
-       'config-cc-again' => 'Выберите ещё раз…',
-       'config-cc-not-chosen' => 'Выберите, какую лицензию Creative Commons Вы хотите использовать, и нажмите кнопку "Продолжить".',
-       'config-advanced-settings' => 'Дополнительные настройки',
-       'config-cache-options' => 'Параметры кэширования объектов:',
-       'config-cache-help' => 'Кэширование объектов используется для повышения скорости MediaWiki путем кэширования часто используемых данных.
-Для средних и больших сайтов кеширование настоятельно рекомендуется включать, а для небольших сайтов кеширование может показать преимущество.',
-       'config-cache-none' => 'Без кэширования (никакой функционал не теряется, но крупные вики-сайты могут работать медленнее)',
-       'config-cache-accel' => 'PHP кэширование объектов (APC, XCache или WinCache)',
-       'config-cache-memcached' => 'Использовать Memcached (требует дополнительной настройки)',
-       'config-memcached-servers' => 'Сервера Memcached:',
-       'config-memcached-help' => 'Список IP-адресов, используемых Memcached.
-Перечислите по одному адресу на строку с указанием портов. Например:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => 'Вы выбрали тип кэширования Memcached, но не задали адреса серверов.',
-       'config-memcache-badip' => 'Вы ввели неверный IP-адрес для Memcached: $1.',
-       'config-memcache-noport' => 'Не указан порт для сервера Memcached: $1.
-Если вы не знаете порт, по умолчанию используется 11211.',
-       'config-memcache-badport' => 'Номера портов Memcached должны лежать в пределах от $1 до $2.',
-       'config-extensions' => 'Расширения',
-       'config-extensions-help' => 'Расширения MediaWiki, перечисленные выше, были найдены в каталоге <code>./extensions</code>.
-
-Они могут потребовать дополнительные настройки, но их можно включить прямо сейчас',
-       'config-install-alreadydone' => "'''Предупреждение:''' Вы, кажется, уже устанавливали MediaWiki и пытаетесь произвести повторную установку.
-Пожалуйста, перейдите на следующую страницу.",
-       'config-install-begin' => 'Нажав «{{int:config-continue}}», вы начнёте установку MediaWiki.
-Если вы хотите внести изменения, нажмите «{{int:config-back}}».',
-       'config-install-step-done' => 'выполнено',
-       'config-install-step-failed' => 'не удалось',
-       'config-install-extensions' => 'В том числе расширения',
-       'config-install-database' => 'Настройка базы данных',
-       'config-install-schema' => 'Создание схемы',
-       'config-install-pg-schema-not-exist' => 'Схемы PostgreSQL не существует',
-       'config-install-pg-schema-failed' => 'Не удалось создать таблицы.
-Убедитесь в том, что пользователь «$1» может писать в схему «$2».',
-       'config-install-pg-commit' => 'Внесение изменений',
-       'config-install-pg-plpgsql' => 'Проверка языка PL/pgSQL',
-       'config-pg-no-plpgsql' => 'Вам необходимо установить поддержку языка PL/pgSQL для базы данных $1',
-       'config-pg-no-create-privs' => 'Учётная запись, указанная для установки, не обладает достаточными привилегиями для создания учётной записи.',
-       'config-pg-not-in-role' => 'Указанная учётная запись веб-пользователя уже существует.
-Указанная для установки учётная запись не является записью суперпользователя, и не относится к роли веб-пользователя, поэтому не получается создать объекты, принадлежащие веб-пользователю.
-
-MediaWiki в настоящее время требует, чтобы владельцем таблиц был веб-пользователь. Пожалуйста, укажите другое имя учётной записи для веб, или нажмите кнопку «назад» и укажите пользователя с достаточными для установки правами.',
-       'config-install-user' => 'Создание базы данных пользователей',
-       'config-install-user-alreadyexists' => 'Участник «$1» уже существует',
-       'config-install-user-create-failed' => 'Не получилось создать участника «$1»: $2',
-       'config-install-user-grant-failed' => 'Ошибка предоставления прав пользователю «$1»: $2',
-       'config-install-user-missing' => 'Указанного пользователя «$1» не существует.',
-       'config-install-user-missing-create' => 'Указанного пользователя «$1» не существует.
-Пожалуйста поставьте ниже отметку «Создать учётную запись», если вы хотите создать его.',
-       'config-install-tables' => 'Создание таблиц',
-       '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-stats' => 'Статистика инициализации',
-       'config-install-keys' => 'Создание секретных ключей',
-       'config-insecure-keys' => "'''Предупреждение.''' {{PLURAL:$2|Ключ безопасности $1, созданный во время установки, недостаточно надёжен|Ключи безопасности $1, созданные во время установки, недостаточно надёжны}}. Рассмотрите возможность {{PLURAL:$2|его|их}} изменения вручную.",
-       'config-install-sysop' => 'Создание учётной записи администратора',
-       'config-install-subscribe-fail' => 'Не удаётся подписаться на mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'cURL не установлен и не доступна опция allow_url_fopen.',
-       'config-install-mainpage' => 'Создание главной страницы с содержимым по умолчанию',
-       'config-install-extension-tables' => 'Создание таблиц для включённых расширений',
-       'config-install-mainpage-failed' => 'Не удаётся вставить главную страницу: $1',
-       'config-install-done' => "'''Поздравляем!'''
-Вы успешно установили MediaWiki.
-
-Во время установки был создан файл <code>LocalSettings.php</code>.
-Он содержит всю конфигурации вики.
-
-Вам необходимо скачать его и положить в корневую директорию вашей вики (ту же директорию, где находится файл index.php). Его загрузка должна начаться автоматически.
-
-Если автоматическая загрузка не началась или вы её отменили, вы можете скачать по ссылке ниже:
-
-$3
-
-'''Примечание''': Если вы не сделаете этого сейчас, то сгенерированный файл конфигурации не будет доступен вам в дальнейшем, если вы выйдете из установки, не скачивая его.
-
-По окончании действий, описанных выше, вы сможете '''[$2 войти в вашу вики]'''.",
-       'config-download-localsettings' => 'Загрузить <code>LocalSettings.php</code>',
-       'config-help' => 'справка',
-       'config-nofile' => 'Файл "$1" не удается найти. Он был удален?',
-       'config-extension-link' => 'Знаете ли вы, что ваш вики-проект поддерживает [//www.mediawiki.org/wiki/Manual:Extensions расширения]?
-
-Вы можете просмотреть [//www.mediawiki.org/wiki/Category:Extensions_by_category расширения по категориям] или [//www.mediawiki.org/wiki/Extension_Matrix матрицу расширений], чтобы увидеть их полный список.',
-       'mainpagetext' => "'''Вики-движок «MediaWiki» успешно установлен.'''",
-       'mainpagedocfooter' => 'Информацию по работе с этой вики можно найти в [//meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 справочном руководстве].
-
-== Некоторые полезные ресурсы ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Список возможных настроек];
-* [//www.mediawiki.org/wiki/Manual:FAQ Часто задаваемые вопросы и ответы по MediaWiki];
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Перевод MediaWiki на свой язык]',
-);
-
-/** Rusyn (русиньскый)
- * @author Gazeb
- */
-$messages['rue'] = array(
-       'mainpagetext' => "'''MediaWiki была успішно наіншталована.'''",
-       'mainpagedocfooter' => '[//meta.wikimedia.org/wiki/Help:Contents Мануял хоснователя] Вам порадить, як хосновати MediaWiki.
-
-== Про початок ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Наставлїня конфіґурації]
-* [//www.mediawiki.org/wiki/Manual:FAQ Часты вопросы о MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Розосыланя повідомлїнь про новы верзії MediaWiki]', # Fuzzy
-);
-
-/** Sanskrit (संस्कृतम्)
- * @author Hemant wikikosh1
- */
-$messages['sa'] = array(
-       'mainpagetext' => 'मीडियाविकि तु सफलतया अन्तःस्थापितमस्ति',
-);
-
-/** Sakha (саха тыла)
- */
-$messages['sah'] = array(
-       'mainpagetext' => "'''«MediaWiki» сөпкө туруорулунна.'''",
-       'mainpagedocfooter' => 'Биики программатын туһунан [//meta.wikimedia.org/wiki/Help:Contents справочникка] көрүөххүн сөп.
-
-== Саҕаланыыта ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Конфигурация уларытыытын параметрдара]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki релизтарын почтовай испииһэгэ]', # Fuzzy
-);
-
-/** Sardinian (sardu)
- * @author Andria
- */
-$messages['sc'] = array(
-       'mainpagetext' => "'''MediaWiki est stadu installadu in modu currègidu.'''",
-);
-
-/** Sicilian (sicilianu)
- */
-$messages['scn'] = array(
-       'mainpagetext' => "'''Nstallazzioni di MediaWiki cumplitata currettamenti.'''",
-       'mainpagedocfooter' => "Pi favuri taliari [//meta.wikimedia.org/wiki/Help:Contents Guida utenti] pi aiutu supra l'usu e la cunfigurazzioni di stu software wiki.
-
-== P'accuminzari ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Alencu di mpustazzioni di cunfigurazzioni]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list dî rilassi di MediaWiki]", # Fuzzy
-);
-
-/** Scots (Scots)
- */
-$messages['sco'] = array(
-       'mainpagetext' => "'''MediaWiki haes been installit wi speed.'''",
-       'mainpagedocfooter' => "Aks the [//meta.wikimedia.org/wiki/Help:Contents Uiser's Manual] for speirins aboot using the wiki saftware.
-
-== Gettin startit ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settins leet]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki releese mailin leet]", # Fuzzy
-);
-
-/** Sassaresu (Sassaresu)
- */
-$messages['sdc'] = array(
-       'mainpagetext' => "'''Isthallazioni di MediaWiki accabadda currentementi.'''",
-       'mainpagedocfooter' => "Cunsultha la [//meta.wikimedia.org/wiki/Aggiuddu:Summàriu Ghia utenti] pa maggiori infuimmazioni i l'usu di chisthu software wiki.
-
-== Pa ischuminzà ==
-Li sighenti cullegamenti so in linga ingrese:
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Impusthazioni di cunfigurazioni]
-* [//www.mediawiki.org/wiki/Manual:FAQ Prigonti friquenti i MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list annùnzii MediaWiki]", # Fuzzy
-);
-
-/** Cmique Itom (Cmique Itom)
- */
-$messages['sei'] = array(
-       'mainpagetext' => "'''MediaWiki coccebj installöx successua zo mii.'''",
-);
-
-/** Serbo-Croatian (srpskohrvatski / српскохрватски)
- * @author OC Ripper
- */
-$messages['sh'] = array(
-       'mainpagetext' => "'''MediaWiki softver is uspješno instaliran.'''",
-       'mainpagedocfooter' => 'Kontaktirajte [//meta.wikimedia.org/wiki/Help:Contents uputstva za korisnike] za informacije o upotrebi wiki programa.
-
-== Početak ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista postavki]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki najčešće postavljana pitanja]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista E-Mail adresa MediaWiki]', # Fuzzy
-);
-
-/** Tachelhit (Tašlḥiyt/ⵜⴰⵛⵍⵃⵉⵜ)
- * @author Dalinanir
- */
-$messages['shi'] = array(
-       'mainpagetext' => "'''MediaWiki tǧizn (tsrbk) bla tamukrist.'''",
-       'mainpagedocfooter' => 'Ẓr taǧttnn  [//meta.wikimedia.org/wiki/Aide:Contenu Guide de l’utilisateur] bac ad tawit inɣmisn yaḍn f manik sa tswwurt asɣẓan ad.
-
-== Izwir d MediaWiki ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Umuɣ n iɣwwarn n usgadda ]
-* [//www.mediawiki.org/wiki/Manual:FAQ/fr Isqqsitn f MidyWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Umuɣ n imsgdaln f imbḍitn n MidyaWiki]', # Fuzzy
-);
-
-/** Sinhala (සිංහල)
- * @author Singhalawap
- * @author පසිඳු කාවින්ද
- */
-$messages['si'] = array(
-       'config-desc' => 'මාධ්‍යවිකි සඳහා වූ ස්ථාපකය',
-       'config-title' => 'මාධ්‍යවිකි $1 ස්ථාපනය',
-       'config-information' => 'තොරතුරු',
-       'config-localsettings-key' => 'උසස්කිරීම් යතුර:',
-       'config-localsettings-badkey' => 'ඔබ ඉදිරිපත් කෙරූ යතුර වැරදිය.',
-       'config-session-error' => 'සැසිය ඇරඹීමේ දෝෂය: $1',
-       'config-your-language' => 'ඔබේ භාෂාව:',
-       'config-wiki-language' => 'විකි භාෂාව:',
-       'config-back' => '← ආපසු',
-       'config-continue' => 'ඉදිරියට →',
-       'config-page-language' => 'භාෂාව',
-       'config-page-welcome' => 'මාධ්‍යවිකි වෙත පිළිගනිමු!',
-       'config-page-dbconnect' => 'දත්ත සංචිතයට සම්බන්ධ කරන්න',
-       'config-page-upgrade' => 'පවත්නා ස්ථාපනය උසස් කරන්න',
-       'config-page-dbsettings' => 'දත්ත සංචිත සැකසුම්',
-       'config-page-name' => 'නම',
-       'config-page-options' => 'විකල්ප',
-       'config-page-install' => 'ස්ථාපනය',
-       'config-page-complete' => 'සම්පූර්ණයි!',
-       'config-page-restart' => 'ස්ථාපනය යළි අරඹන්න',
-       'config-page-readme' => 'මාව කියවන්න',
-       'config-page-releasenotes' => 'නිකුතු සටහන්',
-       'config-page-copying' => 'පිටපත් කරමින්',
-       'config-page-upgradedoc' => 'උසස් කරමින්',
-       'config-page-existingwiki' => 'පවත්නා විකිය',
-       'config-env-php' => 'PHP $1 ස්ථාපිතයි.',
-       'config-db-type' => 'දත්ත සංචිත වර්ගය:',
-       'config-db-host' => 'දත්ත සංචිත ධාරක:',
-       'config-db-wiki-settings' => 'මෙම විකිය හඳුනා ගන්න',
-       'config-db-name' => 'දත්ත සංචිතයේ නම:',
-       'config-db-name-oracle' => 'දත්ත සංචිත සංක්ෂිප්ත නිරූපණය:',
-       'config-db-install-account' => 'ස්ථාපනය සඳහා පරිශීලක ගිණුම',
-       'config-db-username' => 'දත්ත සංචිතයේ පරිශීලක නාමය:',
-       'config-db-password' => 'දත්ත සංචිතයේ මුරපදය:',
-       'config-db-wiki-account' => 'සාමාන්‍ය ක්‍රියාකාරිත්වය සඳහා පරිශීලක ගිණුම',
-       'config-db-prefix' => 'දත්ත සංචිත වගු උපසර්ගය:',
-       'config-db-charset' => 'දත්ත සංචිත අක්ෂර කට්ටලය',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 ද්විමය',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 ආපස්සට-ගැළපෙන UTF-8',
-       'config-db-port' => 'දත්ත සංචිතයේ කවුළුව:',
-       'config-db-schema' => 'මාධ්‍යවිකි සඳහා සංක්ෂිප්ත නිරූපණය:',
-       'config-pg-test-error' => "'''$1''' දත්ත සංචිතය වෙත සම්බන්ධ විය නොහැක: $2",
-       'config-sqlite-dir' => 'SQLite දත්ත නාමවලිය:',
-       'config-oracle-def-ts' => 'සාමාන්‍ය වගු අවකාශය:',
-       'config-oracle-temp-ts' => 'තාවකාලික වගු අවකාශය:',
-       'config-header-mysql' => 'MySQL සැකසුම්',
-       'config-header-postgres' => 'PostgreSQL සැකසුම්',
-       'config-header-sqlite' => 'SQLite සැකසුම්',
-       'config-header-oracle' => 'ඔරකල් සැකසුම්',
-       'config-invalid-db-type' => 'වලංගු නොවන දත්ත සංචිත වර්ගය',
-       'config-missing-db-name' => '"දත්ත සංචිත නාමය" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ',
-       'config-missing-db-host' => '"දත්ත සංචිත ධාරකය" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ',
-       'config-missing-db-server-oracle' => '"දත්ත සංචිත TNS" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ',
-       'config-regenerate' => 'නැවත ජනිත කරන්න LocalSettings.php →',
-       'config-db-web-account' => 'ජාල ප්‍රවේශනය සඳහා දත්ත සංචිත ගිණුම',
-       'config-mysql-engine' => 'ආචයන එන්ජිම:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-binary' => 'ද්විමය',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'විකියෙහි නම:',
-       'config-site-name-blank' => 'අඩවි නාමයක් යොදන්න.',
-       'config-project-namespace' => 'ව්‍යාපෘතියේ නාමඅවකාශය:',
-       'config-ns-generic' => 'ව්‍යාපෘතිය',
-       'config-ns-site-name' => 'විකියෙහි නම ලෙසම: $1',
-       'config-ns-other' => 'වෙනත් (විශේෂණය කරන්න)',
-       'config-ns-other-default' => 'මගේවිකිය',
-       'config-admin-box' => 'පරිපාලක ගිණුම',
-       'config-admin-name' => 'ඔබේ නම:',
-       'config-admin-password' => 'මුරපදය:',
-       'config-admin-password-confirm' => 'මුරපදය නැවතත්:',
-       'config-admin-name-blank' => 'පරිපාලක පරිශීලක නාමය යොදන්න.',
-       'config-admin-password-blank' => 'පරිපාලක ගිණුම සඳහා මුරපදය යොදන්න.',
-       'config-admin-password-same' => 'මුරපදය හා පරිශීලක නාමය එක සමාන නොවිය යුතුය.',
-       'config-admin-password-mismatch' => 'ඔබ ඇතුළු කල මුරපද දෙක නොගැලපේ.',
-       'config-admin-email' => 'විද්‍යුත්-තැපැල් ලිපිනය:',
-       'config-admin-error-bademail' => 'ඔබ විසින් වලංගු නොවන විද්‍යුත්-ලිපිනයක් යොදා ඇත.',
-       'config-optional-continue' => 'මගෙන් තව ප්‍රශ්ණ අහන්න.',
-       'config-optional-skip' => 'මම දැනටමත් කම්මැලි වී ඇත, විකිය ස්ථාපනය කරන්න.',
-       'config-profile' => 'පරිශීලක හිමිකම් පැතිකඩ:',
-       'config-profile-wiki' => 'සාම්ප්‍රදායික විකිය', # Fuzzy
-       'config-profile-no-anon' => 'ගිණුම් තැනීම අවශ්‍යයි',
-       'config-profile-fishbowl' => 'අවසරලත් සංස්කාරකවරුන් පමණි',
-       'config-profile-private' => 'පුද්ගලික විකිය',
-       'config-license' => 'කතුහිමිකම සහ බලපත්‍රය:',
-       'config-license-none' => 'බලපත්‍ර පාද තලයක් නොමැත',
-       'config-license-cc-by-sa' => 'නිර්මාණාත්මක පොදුජන ආරෝපණය හුවමාරුවට සමානව',
-       'config-license-cc-by' => 'නිර්මාණාත්මක පොදුජන ආරෝපණය',
-       'config-license-cc-by-nc-sa' => 'නිර්මාණාත්මක පොදුජන ආරෝපණය වාණිජ්‍ය-නොවන හුවමාරුවට සමානව',
-       'config-license-pd' => 'පොදු වසම',
-       'config-email-settings' => 'විද්‍යුත්-තැපැල් සැකසුම්',
-       'config-enable-email' => 'පිටතට යොමු වූ විද්‍යුත්-තැපෑල සක්‍රිය කරන්න',
-       'config-email-user' => 'පරිශීලක-වෙත-පරිශීලක විද්‍යුත්-තැපෑල සක්‍රිය කරන්න',
-       'config-email-usertalk' => 'පරිශීලක කතාබහ පිටු නිවේදනය සක්‍රිය කරන්න',
-       'config-email-watchlist' => 'මුරලැයිස්තු නිවේදනය සක්‍රිය කරන්න',
-       'config-email-auth' => 'විද්‍යුත්-තැපැල් සහතික කිරීම සක්‍රිය කරන්න',
-       'config-email-sender' => 'ප්‍රත්‍යාගමන විද්‍යුත්-තැපැල් ලිපිනය:',
-       'config-upload-settings' => 'පින්තූර සහ ගොනු උඩුගත කිරීම්',
-       'config-upload-enable' => 'ගොනු උඩුගත කිරීම් සක්‍රිය කරන්න',
-       'config-upload-deleted' => 'මැකූ ගොනු සඳහා නාමාවලිය:',
-       'config-logo' => 'ලාංඡනයේ URL:',
-       'config-instantcommons' => 'ක්ෂණික කොමන්ස් සක්‍රිය කරන්න',
-       'config-cc-again' => 'නැවත ඇහිඳගන්න...',
-       'config-advanced-settings' => 'උසස් වින්‍යාසගතකෙරුම',
-       'config-cache-options' => 'වස්තු කෑෂය සඳහා සැකසුම්:',
-       'config-memcached-servers' => 'මතකකෑෂිත සර්වරයන්:',
-       'config-extensions' => 'විස්තීර්ණ',
-       'config-install-step-done' => 'සිදුකලා',
-       'config-install-step-failed' => 'අසාර්ථකයි',
-       'config-install-extensions' => 'විස්තීර්ණ අඩංගු කරමින්',
-       'config-install-database' => 'දත්ත සංචිතය සකසමින්',
-       'config-install-schema' => 'සංක්ෂිප්ත නිරූපණය තනමින්',
-       'config-install-pg-schema-not-exist' => 'PostgreSQL සංක්ෂිප්ත නිරූපණය නොපවතියි.',
-       'config-install-pg-commit' => 'වෙනස්කම් ප්‍රයාපනය කරමින්',
-       'config-install-pg-plpgsql' => 'PL/pgSQL භාෂාව සඳහා පරික්ෂා කරමින්',
-       'config-install-user' => 'දත්ත සංචිත පරිශීලක තනමින්',
-       'config-install-user-alreadyexists' => '"$1" පරිශීලක දැනටමත් පවතී',
-       'config-install-user-create-failed' => '"$1" පරිශීලක තැනීම අසාර්ථකයි: $2',
-       'config-install-user-missing' => 'විශේෂණය කෙරූ "$1" පරිශීලකයා නොපවතියි.',
-       'config-install-tables' => 'වගු තනමින්',
-       'config-install-interwiki' => 'සාමාන්‍ය අන්තර්විකි වගුව ගහනය කරමින්',
-       'config-install-interwiki-list' => '<code>interwiki.list</code> ගොනුව කියවිය නොහැක.',
-       'config-install-stats' => 'සංඛ්‍යානය අරඹමින්',
-       'config-install-keys' => 'රහස් යතුරු ජනිත කරමින්',
-       'config-install-sysop' => 'පරිපාලක පරිශීලක ගිණුම තනමින්',
-       'config-install-mainpage' => 'සාමාන්‍ය අන්තර්ගතය සමඟින් ප්‍රධාන පිටුව තනමින්',
-       'config-install-mainpage-failed' => 'ප්‍රධාන පිටුව ඇතුල් කල නොහැක: $1',
-       'config-download-localsettings' => '<code>LocalSettings.php</code> බාගන්න',
-       'config-help' => 'උදව්',
-       'config-nofile' => '"$1" ගොනුව සොයාගත නොහැක. එක මැකිලා ගියාවත්ද?',
-       'mainpagetext' => "'''මීඩියාවිකි සාර්ථක ලෙස ස්ථාපනය කරන ලදි.'''",
-       'mainpagedocfooter' => 'විකි මෘදුකාංග භාවිතා කිරීම පිළිබඳ තොරතුරු සඳහා  [//meta.wikimedia.org/wiki/Help:Contents පරිශීලකයන් සඳහා නියමුව] හදාරන්න.
-
-== ඇරඹුම ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings වින්‍යාස සැකසුම්]
-* [//www.mediawiki.org/wiki/Manual:FAQ මීඩියාවිකි නිති-විමසන-පැන]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce මීඩියාවිකි නිකුතුව තැපැල් ලැයිස්තුව]', # Fuzzy
-);
-
-/** Slovak (slovenčina)
- * @author Kusavica
- */
-$messages['sk'] = array(
-       'config-your-language' => 'Váš jazyk:',
-       'config-wiki-language' => 'Wiki jazyk:',
-       'config-back' => '← Späť',
-       'config-continue' => 'Pokračovať →',
-       'config-page-language' => 'Jazyk',
-       'config-download-localsettings' => 'Stiahnuť <code>LocalSettings.php</code>',
-       'config-nofile' => 'Súbor "$1" sa nenašiel. Bol zmazaný?',
-       'mainpagetext' => "'''Softvér MediaWiki bol úspešne nainštalovaný.'''",
-       'mainpagedocfooter' => 'Informácie ako používať wiki softvér nájdete v [//meta.wikimedia.org/wiki/Help:Contents Používateľskej príručke].
-
-== Začíname ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Zoznam konfiguračných nastavení]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailing list nových verzií MediaWiki]', # Fuzzy
-);
-
-/** Slovenian (slovenščina)
- * @author Dbc334
- * @author Eleassar
- */
-$messages['sl'] = array(
-       'config-desc' => 'Namestitveni program za MediaWiki',
-       'config-title' => 'Namestitev MediaWiki $1',
-       'config-information' => 'Informacije',
-       'config-localsettings-cli-upgrade' => 'Zaznana je bila datoteka <code>LocalSettings.php</code>.
-Za nadgradnjo te namestitve zaženite <code>update.php</code>',
-       'config-localsettings-key' => 'Nadgraditveni ključ:',
-       'config-localsettings-badkey' => 'Naveden ključ je napačen.',
-       'config-upgrade-key-missing' => 'Zaznana je bila obstoječa namestitev MediaWiki.
-Za nadgradnjo te namestitve vstavite naslednjo vrstico na dno vaše <code>LocalSettings.php</code>:
-
-$1',
-       'config-session-error' => 'Napaka pri začenjanju seje: $1',
-       'config-session-expired' => 'Kot kaže, so vaši podatki seje potekli.
-Seje so konfigurirane za dobo $1.
-To lahko povečate tako, da nastavite <code>session.gc_maxlifetime</code> v php.ini.
-Ponovno zaženite postopek namestitve.',
-       'config-no-session' => 'Vaši podatki seje so bili izgubljeni!
-Preverite vaš php.ini in se prepričajte, da je <code>session.save_path</code> nastavljena na ustrezno mapo.',
-       'config-your-language' => 'Vaš jezik:',
-       'config-your-language-help' => 'Izberite jezik, ki bo uporabljen med postopkom namestitve.',
-       'config-wiki-language' => 'Jezik wikija:',
-       'config-wiki-language-help' => 'Izberite jezik, v katerem bo wiki večinoma pisan.',
-       'config-back' => '← Nazaj',
-       'config-continue' => 'Nadaljuj →',
-       'config-page-language' => 'Jezik',
-       'config-page-welcome' => 'Dobrodošli na MediaWiki!',
-       'config-page-dbconnect' => 'Vzpostavi povezavo z zbirko podatkov',
-       'config-page-upgrade' => 'Nadgradi obstoječo namestitev',
-       'config-page-dbsettings' => 'Nastavitve zbirke podatkov',
-       'config-page-name' => 'Ime',
-       'config-page-options' => 'Možnosti',
-       'config-page-install' => 'Namesti',
-       'config-page-complete' => 'Končano!',
-       'config-page-restart' => 'Ponovno zaženi namestitev',
-       'config-page-readme' => 'Beri me',
-       'config-page-releasenotes' => 'Opombe ob izidu',
-       'config-page-copying' => 'Kopiranje',
-       'config-page-upgradedoc' => 'Nadgrajevanje',
-       'config-page-existingwiki' => 'Obstoječ wiki',
-       'config-help-restart' => 'Želite počistiti vse shranjene podatke, ki ste jih vnesti, in ponovno začeti s postopkom namestitve?',
-       'config-restart' => 'Da, ponovno zaženi',
-       'config-welcome' => '=== Pregledi okolja ===
-Izvedli bomo osnovne preglede, da vidimo, če je okolje primerno za namestitev MediaWiki.
-Posredujte rezultate teh pregledov, če med namestitvijo potrebujete pomoč.',
-       'config-sidebar' => '* [//www.mediawiki.org Domača stran MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents Vodnik za uporabnike]
-* [//www.mediawiki.org/wiki/Manual:Contents Vodnik za administratorje]
-* [//www.mediawiki.org/wiki/Manual:FAQ Pogosto zastavljena vprašanja]
-----
-* <doclink href=Readme>Beri me</doclink>
-* <doclink href=ReleaseNotes>Opombe ob izidu</doclink>
-* <doclink href=Copying>Kopiranje</doclink>
-* <doclink href=UpgradeDoc>Nadgrajevanje</doclink>',
-       'config-env-good' => 'Okolje je pregledano.
-Lahko namestite MediaWiki.',
-       'config-env-bad' => 'Okolje je pregledano.
-Ne morete namestiti MediaWiki.',
-       'config-env-php' => 'Nameščen je PHP $1.',
-       'config-env-php-toolow' => 'Nameščen je PHP $1.
-Vendar pa MediaWiki zahteva PHP $2 ali višji.',
-       'config-unicode-using-utf8' => 'Uporaba utf8_normalize.so Briona Vibberja za normalizacijo unikoda.',
-       'config-unicode-using-intl' => 'Uporaba [http://pecl.php.net/intl razširitve PECL intl] za normalizacijo unikoda.',
-       'config-memory-raised' => 'PHP-jev <code>memory_limit</code> je $1, dvignjen na $2.',
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] je nameščen',
-       'config-apc' => '[http://www.php.net/apc APC] je nameščen',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] je nameščen',
-       'config-diff3-bad' => 'GNU diff3 ni bilo mogoče najti.',
-       'config-db-type' => 'Vrsta zbirke podatkov:',
-       'config-db-host' => 'Gostitelj zbirke podatkov:',
-       'config-db-host-oracle' => 'TNS zbirke podatkov:',
-       'config-db-wiki-settings' => 'Prepoznaj ta wiki:',
-       'config-db-name' => 'Ime zbirke podatkov:',
-       'config-db-name-oracle' => 'Shema zbirke podatkov:',
-       'config-db-username' => 'Uporabniško ime zbirke podatkov:',
-       'config-db-password' => 'Geslo zbirke podatkov:',
-       'config-db-prefix' => 'Predpona tabel zbirke podatkov:',
-       'config-db-charset' => 'Nabor znakov zbirke podatkov',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 dvojiško',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 nazaj združljiv UTF-8',
-       'config-mysql-old' => 'Potreben je MySQL $1 ali novejši; vi imate $2.',
-       'config-db-port' => 'Vrata zbirke podatkov:',
-       'config-db-schema' => 'Shema MediaWiki',
-       'config-db-schema-help' => 'Ta shema je po navadi v redu.
-Spremenite jo samo, če veste, da jo morate.',
-       'config-sqlite-dir' => 'Mapa podatkov SQLite:',
-       'config-support-info' => 'MediaWiki podpira naslednje sisteme zbirk podatkov:
-
-$1
-
-Če zgoraj ne vidite navedenega sistema zbirk podatkov, ki ga poskušate uporabiti, sledite navodilom na spodnji povezavi, da omogočite podporo.',
-       'config-header-mysql' => 'Nastavitve MySQL',
-       'config-header-postgres' => 'Nastavitve PostgreSQL',
-       'config-header-sqlite' => 'Nastavitve SQLite',
-       'config-header-oracle' => 'Nastavitve Oracle',
-       'config-invalid-db-type' => 'Neveljavna vrsta zbirke podatkov',
-       'config-missing-db-name' => 'Vnesti morate vrednost za »Ime zbirke podatkov«',
-       'config-missing-db-host' => 'Vnesti morate vrednost za »Gostitelj zbirke podatkov«',
-       'config-missing-db-server-oracle' => 'Vnesti morate vrednost za »TNS zbirke podatkov«',
-       'config-invalid-db-server-oracle' => 'Neveljaven TNS zbirke podatkov »$1«.
-Uporabite ali "ime TNS" ali niz "Easy Connect" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Načini poimenovanja Oracle])',
-       'config-invalid-db-name' => 'Neveljavno ime zbirke podatkov »$1«.
-Uporabljajte samo črke ASCII (a-z, A-Z), številke (0-9), podčrtaje (_) in vezaje (-).',
-       'config-invalid-db-prefix' => 'Neveljavna predpona zbirke podatkov »$1«.
-Uporabljajte samo črke ASCII (a-z, A-Z), številke (0-9), podčrtaje (_) in vezaje (-).',
-       'config-connection-error' => '$1.
-
-Preverite gostitelja, uporabniško ime in geslo spodaj ter poskusite znova.',
-       'config-postgres-old' => 'Potreben je PostgreSQL $1 ali novejši; vi imate $2.',
-       'config-sqlite-connection-error' => '$1.
-
-Preverite mapo podatkov in ime zbirke podatkov spodaj ter poskusite znova.',
-       'config-sqlite-readonly' => 'Datoteka <code>$1</code> ni zapisljiva.',
-       'config-sqlite-cant-create-db' => 'Ne morem ustvariti datoteke zbirke podatkov <code>$1</code>.',
-       'config-upgrade-done-no-regenerate' => 'Nadgradnja je končana.
-
-Sedaj lahko [$1 začnete uporabljati vaš wiki].',
-       'config-regenerate' => 'Ponovno ustvari LocalSettings.php →',
-       'config-show-table-status' => 'Poizvedba <code>SHOW TABLE STATUS</code> ni uspela!',
-       'config-unknown-collation' => "'''Opozorilo:''' Zbirke podatkov uporablja neprepoznano razvrščanje znakov.",
-       'config-db-web-account' => 'Račun zbirke podatkov za spletni dostop',
-       'config-db-web-account-same' => 'Uporabi enak račun kot za namestitev',
-       'config-db-web-create' => 'Ustvari račun, če že ne obstaja',
-       'config-mysql-engine' => 'Pogon skladiščenja:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-charset' => 'Nabor znakov zbirke podatkov:',
-       'config-mysql-binary' => 'Dvojiško',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'Ime wikija:',
-       'config-site-name-help' => 'To bo prikazano v naslovni vrstici brskalnika in na drugih različnih mestih.',
-       'config-site-name-blank' => 'Vnesite ime strani.',
-       'config-project-namespace' => 'Imenski prostor projekta:',
-       'config-ns-generic' => 'Projekt',
-       'config-ns-site-name' => 'Enako kot ime wikija: $1',
-       'config-ns-other' => 'Drugo (navedite)',
-       'config-ns-other-default' => 'MojWiki',
-       'config-ns-invalid' => 'Naveden imenski prostor »<nowiki>$1</nowiki>« ni veljaven.
-Določite drug imenski prostor projekta.',
-       'config-ns-conflict' => 'Naveden imenski prostor »<nowiki>$1</nowiki>« je v sporu s privzetim imenskim prostorom MediaWiki.
-Določite drug imenski prostor projekta.',
-       'config-admin-box' => 'Administratorski račun',
-       'config-admin-name' => 'Vaše ime:',
-       'config-admin-password' => 'Geslo:',
-       'config-admin-password-confirm' => 'Geslo, ponovno:',
-       'config-admin-help' => 'Tukaj vnesite želeno uporabniško ime, na primer »Janez Blog«.
-To je ime, ki ga boste uporabljali za prijavo v wiki.',
-       'config-admin-name-blank' => 'Vnesite uporabniško ime administratorja.',
-       'config-admin-name-invalid' => 'Navedeno uporabniško ime »<nowiki>$1</nowiki>« ni veljavno.
-Določite drugo uporabniško ime.',
-       'config-admin-password-blank' => 'Vnesite geslo za administratorski račun.',
-       'config-admin-password-same' => 'Geslo ne sme biti enako kot uporabniško ime.',
-       'config-admin-password-mismatch' => 'Vneseni gesli se ne ujemata.',
-       'config-admin-email' => 'E-poštni naslov:',
-       'config-admin-error-user' => 'Med ustvarjanjem administratorja »<nowiki>$1</nowiki>« je prišlo do notranje napake.',
-       'config-admin-error-password' => 'Med nastavljanjem gesla za administratorja »<nowiki>$1</nowiki>« je prišlo do notranje napake: <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Vnesli ste neveljaven e-poštni naslov.',
-       'config-subscribe' => 'Naročite se na [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce poštni seznam obvestil o izdajah].',
-       'config-almost-done' => 'Skoraj ste že končali!
-Preostalo konfiguriranje lahko zdaj preskočite in wiki takoj namestite.',
-       'config-optional-continue' => 'Zastavi mi več vprašanj.',
-       'config-optional-skip' => 'Se že dolgočasim; samo namesti wiki.',
-       'config-profile' => 'Profil uporabniških pravic:',
-       'config-profile-wiki' => 'Odprti wiki',
-       'config-profile-no-anon' => 'Zahtevano je ustvarjanje računa',
-       'config-profile-fishbowl' => 'Samo pooblaščeni urejevalci',
-       'config-profile-private' => 'Zasebni wiki',
-       'config-license' => 'Avtorske pravice in licenca:',
-       'config-license-none' => 'Brez noge dovoljenja',
-       'config-license-cc-by-sa' => 'Creative Commons Priznanje avtorstva-Deljenje pod enakimi pogoji',
-       'config-license-cc-by' => 'Creative Commons Priznanje avtorstva',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Priznanje avtorstva-Nekomercialno-Deljenje pod enakimi pogoji',
-       'config-license-cc-0' => 'Creative Commons Zero (javna last)',
-       'config-license-pd' => 'Javna last',
-       'config-license-cc-choose' => 'Izberite dovoljenje Creative Commons po meri',
-       'config-email-settings' => 'Nastavitve e-pošte',
-       'config-enable-email' => 'Omogoči odhodno e-pošto',
-       'config-email-user' => 'Omogoči e-pošto med uporabniki',
-       'config-email-auth' => 'Omogoči overitev preko e-pošte',
-       'config-email-sender' => 'E-poštni naslov za vrnjeno pošto:',
-       'config-upload-settings' => 'Nalaganje slike in datotek',
-       'config-upload-enable' => 'Omogoči nalaganje datotek',
-       'config-upload-deleted' => 'Mapa za izbrisane datoteke:',
-       'config-upload-deleted-help' => 'Izberite mapo za arhiviranje izbrisanih datotek.
-Najbolje je, da mapa ni dostopna preko spleta.',
-       'config-logo' => 'URL logotipa:',
-       'config-cc-error' => 'Izbirnik dovoljenja Creative Commons ni vrnil nobenih rezultatov.
-Vnesite ime dovoljenja ročno.',
-       'config-cc-again' => 'Izberi ponovno ...',
-       'config-cc-not-chosen' => 'Izberite licenco Creative Commons, ki jo želite uporabiti, in kliknite »proceed«.',
-       'config-advanced-settings' => 'Napredna konfiguracija',
-       'config-cache-accel' => 'Predpomnjenje predmetov PHP (APC, XCache ali WinCache)',
-       'config-cache-memcached' => 'Uporabi Memcached (zahteva dodatno namestitev in konfiguracijo)',
-       'config-memcached-servers' => 'Strežniki Memcached:',
-       'config-memcache-badip' => 'Vnesli ste neveljaven IP-naslov za Memcached: $1',
-       'config-extensions' => 'Razširitve',
-       'config-install-step-done' => 'končano',
-       'config-install-step-failed' => 'spodletelo',
-       'config-install-database' => 'Vzpostavljanje zbirke podatkov',
-       'config-install-pg-schema-not-exist' => 'Shema PostgreSQL ne obstaja.',
-       'config-install-user-alreadyexists' => 'Uporabnik »$1« že obstaja',
-       'config-install-tables' => 'Ustvarjanje tabel',
-       'config-download-localsettings' => 'Prenesi <code>LocalSettings.php</code>',
-       'config-help' => 'pomoč',
-       'mainpagetext' => "'''Programje MediaWiki je bilo uspešno nameščeno.'''",
-       'mainpagedocfooter' => 'Oglejte si [//meta.wikimedia.org/wiki/Help:Contents Uporabniški priročnik] za informacije o uporabi programja wiki.
-
-== Kako začeti ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Seznam konfiguracijskih nastavitev]
-* [//www.mediawiki.org/wiki/Manual:FAQ Poogsto zastavljena vprašanja MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Poštni seznam izdaj MediaWiki]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Prevedite MediaWiki v svoj jezik]',
-);
-
-/** Lower Silesian (Schläsch)
- * @author Äberlausitzer
- */
-$messages['sli'] = array(
-       'mainpagetext' => "'''MediaWiki wourde erfolgreich installiert.'''",
-       'mainpagedocfooter' => 'Hilfe zur Benutzung und Konfiguration der Wiki-Software fendest du eim [//meta.wikimedia.org/wiki/Help:Contents Benutzerhandbichl].
-
-== Stoarthilfa ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen]', # Fuzzy
-);
-
-/** Somali (Soomaaliga)
- * @author Maax
- */
-$messages['so'] = array(
-       'mainpagetext' => "'''MediaWiki Si fiican oo kuugu install gareeyay.'''",
-       'mainpagedocfooter' => "Meeshaan ka akhriso sidii aad u isticmaali leheed brogramka wiki [//meta.wikimedia.org/wiki/Help:Contents User's Guide]  .
-== Bilaaw ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Albanian (shqip)
- */
-$messages['sq'] = array(
-       'mainpagetext' => "'''MediaWiki software u instalua me sukses.'''",
-       'mainpagedocfooter' => 'Për më shumë informata rreth përdorimit të softwerit wiki , ju lutem shikoni [//meta.wikimedia.org/wiki/Help:Contents dokumentacionin përkatës].
-
-== Sa për fillim==
-* [//www.mediawiki.org/wiki/Help:Configuration_settings Parazgjedhjet e MediaWiki-t]
-* [//www.mediawiki.org/wiki/Help:FAQ Pyetjet e shpeshta rreth MediaWiki-t]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Njoftime rreth MediaWiki-t]', # Fuzzy
-);
-
-/** Serbian (Cyrillic script) (српски (ћирилица)‎)
- * @author Rancher
- * @author Михајло Анђелковић
- */
-$messages['sr-ec'] = array(
-       'config-session-error' => 'Грешка при започињању сесије: $1',
-       'config-session-expired' => 'Ваши подаци о сесији су истекли.
-Сесије су подешене да трају $1.
-Њихов рок можете повећати постављањем <code>session.gc_maxlifetime</code> у php.ini.
-Поново покрените инсталацију.',
-       'config-no-session' => 'Ваши подаци о сесији су изгубљени!
-Проверите Ваш php.ini и обезбедите да је <code>session.save_path</code> постављен на одговарајући директоријум.',
-       'config-your-language' => 'Ваш језик:',
-       'config-your-language-help' => 'Изаберите језик који желите да користите током инсталације.',
-       'config-wiki-language' => 'Језик викија:',
-       'config-wiki-language-help' => 'Изаберите језик на ком ће бити садржај викија.',
-       'config-back' => '← Назад',
-       'config-continue' => 'Настави →',
-       'config-page-language' => 'Језик',
-       'config-page-welcome' => 'Добро дошли на МедијаВики!',
-       'config-page-dbconnect' => 'Повезивање са базом података',
-       'config-page-upgrade' => 'Надоградња постојеће инсталације',
-       'config-page-dbsettings' => 'Подешавања базе података',
-       'config-page-name' => 'Назив',
-       'config-page-options' => 'Поставке',
-       'config-page-install' => 'Инсталирај',
-       'config-page-complete' => 'Завршено!',
-       'config-page-restart' => 'Поновно покретање инсталације',
-       'config-page-copying' => 'Умножавање',
-       'config-page-upgradedoc' => 'Надоградња',
-       'config-page-existingwiki' => 'Постојећи вики',
-       'config-help-restart' => 'Желите ли да обришете све сачуване податке које сте унели и поново покренете инсталацију?',
-       'config-restart' => 'Да, покрени поново',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'mainpagetext' => "'''Медијавики је успешно инсталиран.'''",
-       'mainpagedocfooter' => 'Погледајте [//meta.wikimedia.org/wiki/Help:Contents кориснички водич] за коришћење програма.
-
-== Увод ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Помоћ у вези са подешавањима]
-* [//www.mediawiki.org/wiki/Manual:FAQ Често постављена питања]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописна листа о издањима Медијавикија]', # Fuzzy
-);
-
-/** Serbian (Latin script) (srpski (latinica)‎)
- */
-$messages['sr-el'] = array(
-       'config-session-error' => 'Greška pri započinjanju sesije: $1',
-       'config-session-expired' => 'Vaši podaci o sesiji su istekli.
-Sesije su podešene da traju $1.
-Njihov rok možete povećati postavljanjem <code>session.gc_maxlifetime</code> u php.ini.
-Ponovo pokrenite instalaciju.',
-       'config-no-session' => 'Vaši podaci o sesiji su izgubljeni!
-Proverite Vaš php.ini i obezbedite da je <code>session.save_path</code> postavljen na odgovarajući direktorijum.',
-       'config-your-language' => 'Vaš jezik:',
-       'config-your-language-help' => 'Izaberite jezik koji želite da koristite tokom instalacije.',
-       'config-wiki-language' => 'Jezik vikija:',
-       'config-wiki-language-help' => 'Izaberite jezik na kom će biti sadržaj vikija.',
-       'config-back' => '← Nazad',
-       'config-continue' => 'Nastavi →',
-       'config-page-language' => 'Jezik',
-       'config-page-welcome' => 'Dobro došli na MedijaViki!',
-       'config-page-dbconnect' => 'Povezivanje sa bazom podataka',
-       'config-page-upgrade' => 'Nadogradnja postojeće instalacije',
-       'config-page-dbsettings' => 'Podešavanja baze podataka',
-       'config-page-name' => 'Naziv',
-       'config-page-options' => 'Postavke',
-       'config-page-install' => 'Instaliraj',
-       'config-page-complete' => 'Završeno!',
-       'config-page-restart' => 'Ponovno pokretanje instalacije',
-       'config-page-copying' => 'Umnožavanje',
-       'config-page-upgradedoc' => 'Nadogradnja',
-       'config-page-existingwiki' => 'Postojeći viki',
-       'config-help-restart' => 'Želite li da obrišete sve sačuvane podatke koje ste uneli i ponovo pokrenete instalaciju?',
-       'config-restart' => 'Da, pokreni ponovo',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'mainpagetext' => "'''MedijaViki je uspešno instaliran.'''",
-       'mainpagedocfooter' => 'Molimo vidite [//meta.wikimedia.org/wiki/Help:Contents korisnički vodič] za informacije o upotrebi viki softvera.
-
-== Za početak ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Pomoć u vezi sa podešavanjima]
-* [//www.mediawiki.org/wiki/Manual:FAQ Najčešće postavljena pitanja]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mejling lista o izdanjima MedijaVikija]', # Fuzzy
-);
-
-/** Sranan Tongo (Sranantongo)
- */
-$messages['srn'] = array(
-       'mainpagetext' => "'''MediaWiki seti kon bun.'''",
-       'mainpagedocfooter' => 'Luku na ini a [//meta.wikimedia.org/wiki/Help:Yepi yepibuku] fu si fa fu kebrouki a wikisoftware.
-
-== Moro yepi ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Den seti]
-* [//www.mediawiki.org/wiki/Manual:FAQ Sani di ben aksi furu (FAQ)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Boskopu grupu gi nyun meki]', # Fuzzy
-);
-
-/** Swati (SiSwati)
- */
-$messages['ss'] = array(
-       'mainpagetext' => "'''i-MediaWiki seyifakeke ngalokuphelele.'''",
-);
-
-/** Seeltersk (Seeltersk)
- * @author Maartenvdbent
- */
-$messages['stq'] = array(
-       'mainpagetext' => "'''Ju MediaWiki Software wuude mäd Ärfoulch installierd.'''",
-       'mainpagedocfooter' => 'Sjuch ju [//meta.wikimedia.org/wiki/MediaWiki_localization Dokumentation tou de Anpaasenge fon dän Benutseruurfläche] un dät [//meta.wikimedia.org/wiki/Help:Contents Benutserhondbouk] foar Hälpe tou ju Benutsenge un Konfiguration.', # Fuzzy
-);
-
-/** Sundanese (Basa Sunda)
- */
-$messages['su'] = array(
-       'mainpagetext' => "'''''Software'' MediaWiki geus diinstal.'''",
-       'mainpagedocfooter' => "Mangga tingal ''[//meta.wikimedia.org/wiki/MediaWiki_localisation documentation on customizing the interface]'' jeung [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Tungtunan Pamaké] pikeun pitulung maké jeung konfigurasi.", # Fuzzy
-);
-
-/** Swedish (svenska)
- * @author Jopparn
- * @author Skalman
- * @author WikiPhoenix
- */
-$messages['sv'] = array(
-       'config-desc' => 'Installationsprogram för MediaWiki',
-       'config-title' => 'Installation av MediaWiki $1',
-       'config-information' => 'Information',
-       'config-localsettings-upgrade' => 'A <code>LocalSettings.php</code>-fil har upptäckts.
-För att uppgradera den här installationen, vänligen ange värdet för <code>$wgUpgradeKey</code> i rutan nedan.
-Du hittar den i <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'En <code>LocalSettings.php</code>-fil har upptäckts.
-För att uppgradera denna installation, kör <code>update.php</code> istället',
-       'config-localsettings-key' => 'Uppgraderingsnyckel:',
-       'config-localsettings-badkey' => 'Nyckeln du angav är inkorrekt.',
-       'config-upgrade-key-missing' => 'En nuvarande installerade av MediaWiki har upptäckts.
-För att uppgradera installationen, lägg till följande rad i slutet av din <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => 'De befintliga <code>LocalSettings.php</code> verkar vara ofullständig.
-Variabeln $1 är inte inställd.
-Ändra <code>LocalSettings.php</code> så att denna variabel är inställd och klicka på "{{int:Config-continue}}".',
-       'config-session-error' => 'Fel vid uppstart av session: $1',
-       'config-your-language' => 'Ditt språk:',
-       'config-your-language-help' => 'Välj ett språk som ska användas under installationen.',
-       'config-wiki-language' => 'Wikispråk:',
-       'config-wiki-language-help' => 'Välj det språk som wikin främst kommer att skrivas i.',
-       'config-back' => '← Tillbaka',
-       'config-continue' => 'Fortsätt →',
-       'config-page-language' => 'Språk',
-       'config-page-welcome' => 'Välkommen till MediaWiki!',
-       'config-page-dbconnect' => 'Anslut till databas',
-       'config-page-upgrade' => 'Uppgradera existerande installation',
-       'config-page-dbsettings' => 'Databasinställningar',
-       'config-page-name' => 'Namn',
-       'config-page-options' => 'Alternativ',
-       'config-page-install' => 'Installera',
-       'config-page-complete' => 'Slutfört!',
-       'config-page-restart' => 'Starta om installationen',
-       'config-page-readme' => 'Läs mig',
-       'config-page-releasenotes' => 'Utgivningsanteckningar',
-       'config-page-copying' => 'Kopiering',
-       'config-page-upgradedoc' => 'Uppgradering',
-       'config-page-existingwiki' => 'Befintlig wiki',
-       'config-help-restart' => 'Vill du rensa all sparad data som du har skrivit in och starta om installationen?',
-       'config-restart' => 'Ja, starta om',
-       'config-sidebar' => '* [//www.mediawiki.org MediaWikis hemsida]
-* [//www.mediawiki.org/wiki/Help:Contents Användarguide]
-* [//www.mediawiki.org/wiki/Manual:Contents Administratörguide]
-* [//www.mediawiki.org/wiki/Manual:FAQ Frågor och svar]
-----
-* <doclink href=Readme>Läs mig</doclink>
-* <doclink href=ReleaseNotes>Utgivningsanteckningar</doclink>
-* <doclink href=Copying>Kopiering</doclink>
-* <doclink href=UpgradeDoc>Uppgradering</doclink>',
-       'config-env-good' => 'Miljön har kontrollerats.
-Du kan installera MediaWiki.',
-       'config-env-bad' => 'Miljön har kontrollerats.
-Du kan inte installera MediaWiki.',
-       'config-env-php' => 'PHP $1 är installerad.',
-       'config-env-php-toolow' => 'PHP $1 är installerad.
-MediaWiki kräver PHP $2 eller högre.',
-       'config-outdated-sqlite' => "'''Varning:''' du har SQLite $1, vilket är lägre än minimikravet version $2. SQLite kommer inte att vara tillgänglig.",
-       'config-register-globals' => "'''Varning: PHP:s <code>[http://php.net/register_globals register_globals]</code> tillval är aktiverat.'''
-'''Inaktivera den om du kan.'''
-MediaWiki kommer att fungera, men din server exponeras för potentiella säkerhetsluckor.",
-       'config-safe-mode' => "''' Varning:''' PHP:s [http://www.php.net/features.safe-mode felsäkert läge] är aktivt.
-Det kan orsaka problem, särskilt om du använder filöverföringar och <code>math</code>-stöd.",
-       'config-xml-bad' => 'PHP:s XML-modul saknas.
-MediaWiki kräver funktioner i denna modul och kommer inte att fungera i den här konfigurationen.
-Om du kör Mandrake, installera php-xml-paketet.',
-       'config-memory-raised' => 'PHPs <code>memory_limit</code> är $1, ökar till $2.',
-       'config-memory-bad' => "''' Varning:''' PHP:s <code>memory_limit</code> är $1.
-Detta är förmodligen för lågt.
-Installationen kan misslyckas!",
-       'config-xcache' => '[http://xcache.lighttpd.net/ XCache] är installerad',
-       'config-apc' => '[http://www.php.net/apc APC] är installerad',
-       'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] är installerad',
-       'config-diff3-bad' => 'GNU diff3 hittades inte.',
-       'config-git-bad' => 'Git-versionen av kontrollmjukvaran hittades inte.',
-       'config-no-uri' => "'''Fel:''' Kunde inte fastställa det nuvarande URI:et.
-Installationen avbröts.",
-       'config-no-cli-uri' => "'''Varning:''' inget --scriptpath är anget, med standarden: <code>$1</code> .",
-       'config-using-server' => 'Använder servernamn "<nowiki>$1</nowiki>".',
-       'config-using-uri' => 'Använder server-URL "<nowiki>$1$2</nowiki>".',
-       'config-no-cli-uploads-check' => "'''Varning:''' Din standardkatalog för uppladdningar (<code>$1</code>) inte är kontrollerad för sårbarhet från godtyckliga skriptkörning under CLI-installationen.",
-       'config-db-type' => 'Databastyp:',
-       'config-db-host' => 'Databasvärd:',
-       '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-password-empty' => 'Ange ett lösenord för den nya databasanvändaren: $1.
-Även om det kan vara möjligt att skapa användare utan lösenord är det inte säkert.',
-       'config-db-account-lock' => 'Använda samma användarnamn och lösenord under normal drift',
-       'config-db-wiki-account' => 'Användarkonto för normal drift',
-       'config-db-prefix' => 'Prefix för tabellerna i databasen:',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binär',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 bakåtkompatibel UTF-8',
-       'config-db-port' => 'Databasport:',
-       'config-db-schema' => 'Schema för MediaWiki',
-       'config-pg-test-error' => "Kan inte ansluta till databas '''$1''': $2",
-       'config-sqlite-dir' => 'SQLite data-katalog:',
-       'config-header-mysql' => 'MySQL-inställningar',
-       'config-header-postgres' => 'PostgreSQL-inställningar',
-       'config-header-sqlite' => 'SQLite-inställningar',
-       'config-header-oracle' => 'Oracle-inställningar',
-       'config-invalid-db-type' => 'Ogiltig databastyp',
-       'config-missing-db-name' => 'Du måste ange ett värde för "Databasnamn"',
-       'config-missing-db-host' => 'Du måste ange ett värde för "Databasvärd"',
-       'config-missing-db-server-oracle' => 'Du måste ange ett värde för "Databas TNS"',
-       'config-invalid-db-name' => '"$1" är ett ogiltigt databasnamn.
-Använd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).',
-       'config-invalid-db-prefix' => '"$1" är ett ogiltigt databasprefix.
-Använd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).',
-       'config-connection-error' => '$1.
-
-Kontrollera värden, användarnamnet och lösenordet nedan och försök igen',
-       'config-invalid-schema' => '"$1" är ett ogiltigt schema för MediaWiki.
-Använd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).',
-       'config-db-sys-create-oracle' => 'Installationsprogrammet stöder endast med ett SYSDBA-konto för att skapa ett nytt konto.',
-       'config-db-sys-user-exists-oracle' => 'Användarkontot "$1" finns redan. SYSDBA kan endast användas för att skapa ett nytt konto!',
-       'config-postgres-old' => 'PostgreSQL $1 eller senare krävs, du har $2.',
-       'config-sqlite-name-help' => 'Välja ett namn som identifierar din wiki.
-Använd inte mellanslag eller bindestreck.
-Detta kommer att användas för SQLite-data filnamnet.',
-       'config-sqlite-readonly' => 'Filen <code>$1</code> är inte skrivbar.',
-       'config-sqlite-cant-create-db' => 'Kunde inte skapa databasfilen <code>$1</code>.',
-       'config-sqlite-fts3-downgrade' => 'PHP saknar stöd för FTS3, nedgraderar tabeller',
-       'config-can-upgrade' => "Det finns MediaWiki-tabeller i den här databasen.
-För att uppgradera dem till MediaWiki $1, klicka på '''Fortsätt'''.",
-       'config-upgrade-done' => "Uppgraderingen slutfördes.
-
-Du kan nu [$1 börja använda din wiki].
-
-Om du vill förnya din <code>LocalSettings.php</code>-fil, klicka på knappen nedan.
-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-regenerate' => 'Återskapa LocalSettings.php →',
-       'config-db-web-account' => 'Databaskonto för webbaccess',
-       '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.',
-       'config-ns-generic' => 'Projekt',
-       'config-ns-site-name' => 'Samma som wikinamnet: $1',
-       'config-ns-other' => 'Annan (specificera)',
-       'config-ns-invalid' => 'Den angivna namnrymden "<nowiki>$1</nowiki>" är ogiltig.
-Ange ett annat namnrymd för projektet.',
-       'config-ns-conflict' => 'Den angivna namnrymden "<nowiki>$1</nowiki>" står i konflikt med en standardnamnrymd för MediaWiki.
-Ange ett annat namnrymd för projektet.',
-       'config-admin-box' => 'Administratörskonto',
-       'config-admin-name' => 'Ditt namn:',
-       'config-admin-password' => 'Lösenord:',
-       'config-admin-password-confirm' => 'Lösenord igen:',
-       'config-admin-help' => 'Skriv in ditt föredragna användarnamn här, t.ex. "Joe Bloggs".
-Detta är namnet du kommer att använda för att logga in på wikin.',
-       'config-admin-name-blank' => 'Ange ett användarnamn för administratörskontot.',
-       'config-admin-name-invalid' => 'Det angivna användarnamnet "<nowiki>$1</nowiki>" är ogiltigt.
-Ange ett annat användarnamn.',
-       'config-admin-password-blank' => 'Ange ett lösenord för administratörskontot.',
-       'config-admin-password-same' => 'Lösenordet får inte vara samma som användarnamnet.',
-       'config-admin-password-mismatch' => 'De två lösenord du uppgett överensstämmer inte med varandra.',
-       'config-admin-email' => 'E-postadress:',
-       'config-admin-error-user' => 'Internt fel när du skapar en administratör med namnet "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'Internt fel när du väljer ett lösenord för administratören "<nowiki>$1</nowiki>": <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Du har angivit en felaktigt e-postadress.',
-       'config-subscribe' => 'Prenumerera på [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce e-postlistan för tillkännagivanden].',
-       'config-almost-done' => 'Du är nästan färdig!
-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' => 'Öppen wiki',
-       'config-profile-no-anon' => 'Kontoskapande krävs',
-       'config-profile-fishbowl' => 'Endast auktoriserade redigerare',
-       'config-profile-private' => 'Privat wiki',
-       'config-license' => 'Upphovsrätt och licens:',
-       'config-license-none' => 'Ingen licenssidfot',
-       'config-license-cc-by-sa' => 'Creative Commons Erkännande Dela Lika',
-       'config-license-cc-by' => 'Creative Commons Erkännande',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Erkännande Icke-Kommersiell Dela Lika',
-       'config-license-cc-0' => 'Creative Commons Zero (allmän egendom)',
-       'config-license-gfdl' => 'GNU Free Documentation License 1.3 eller senare',
-       'config-license-pd' => 'Allmän egendom',
-       'config-license-cc-choose' => 'Välj en anpassad Creative Commons-licens',
-       'config-email-settings' => 'E-postinställningar',
-       'config-enable-email' => 'Aktivera utgående e-post',
-       'config-email-user' => 'Aktivera e-post mellan användare',
-       'config-email-user-help' => 'Tillåta alla användare att skicka mail till varandra om de har aktiverat det i deras preferenser.',
-       'config-email-usertalk' => 'Aktivera underrättelse för användardiskussionssidan',
-       'config-email-watchlist' => 'Aktivera meddelanden för bevakningslistan',
-       'config-email-auth' => 'Aktivera autentisering via e-post',
-       '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-instantcommons' => 'Aktivera Instant Commons',
-       'config-cc-error' => 'Creative Commons-licens-väljaren gav inget resultat.
-Ange licensnamnet manuellt.',
-       'config-cc-again' => 'Välj igen...',
-       'config-cc-not-chosen' => 'Välj vilken Creative Commons-licens du vill ha och klicka på "gå vidare".',
-       'config-advanced-settings' => 'Avancerad konfiguration',
-       'config-extensions' => 'Tillägg',
-       'config-install-alreadydone' => "''' Varning:''' Du verkar redan ha installerat MediaWiki och försöker installera det igen.
-Vänligen fortsätt till nästa sida.",
-       'config-install-begin' => 'Genom att trycka på "{{int:config-continue}}", påbörjar du installationen av MediaWiki.
-Om du fortfarande vill göra ändringar trycker du på "{{int:config-back}}".',
-       'config-install-step-done' => 'klar',
-       'config-install-step-failed' => 'misslyckades',
-       'config-install-database' => 'Konfigurerar databas',
-       'config-install-schema' => 'Skapar schema',
-       'config-pg-no-plpgsql' => 'Du måste installera språket PL/pgSQL i databasen $1',
-       '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-grant-failed' => 'Beviljandet av behörighet till användaren "$1" misslyckades: $2',
-       'config-install-user-missing' => 'Den angivna användaren "$1" existerar inte.',
-       'config-install-user-missing-create' => 'Den angivna användaren "$1" existerar inte.
-Vänligen klicka på kryssrutan "skapa konto" nedan om du vill skapa den.',
-       'config-install-tables' => 'Skapar tabeller',
-       'config-install-tables-exist' => "''' Varning:''' MediaWiki-tabeller verkar redan finnas.
-Hoppar över skapandet.",
-       'config-install-tables-failed' => "''' Fel:''' Skapandet av tabell misslyckades med följande fel: $1",
-       '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-subscribe-fail' => 'Det gick inte att prenumerera på mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'cURL är inte installerad och allow_url_fopen är inte tillgänglig.',
-       'config-install-mainpage' => 'Skapa huvudsida med standardinnehåll',
-       'config-install-extension-tables' => 'Skapar tabeller för aktiverade tillägg',
-       'config-install-mainpage-failed' => 'Kunde inte infoga huvudsidan: $1',
-       'config-install-done' => "'''Grattis!'''
-Du har installerat MediaWiki.
-
-Installationsprogrammet har genererat filen <code>LocalSettings.php</code>.
-Det innehåller alla dina konfigurationer.
-
-Du kommer att behöva ladda ned den och placera den i botten av din wiki-installation (samma mapp som index.php). Nedladdningen borde ha startats automatiskt.
-
-Om ingen nedladdning erbjöds, eller om du har avbrutit det kan du starta om nedladdningen genom att klicka på länken nedan:
-
-$3
-
-'''OBS''': Om du inte gör detta nu, kommer denna genererade konfigurationsfil inte vara tillgänglig för dig senare om du avslutar installationen utan att ladda ned den.
-
-När det är klart, kan du '''[$2 gå in på din wiki]'''.",
-       'config-download-localsettings' => 'Ladda ned <code>LocalSettings.php</code>',
-       'config-help' => 'hjälp',
-       'config-nofile' => 'Filen "$1" kunde inte hittas. Har den tagits bort?',
-       'mainpagetext' => "'''MediaWiki har installerats utan problem.'''",
-       '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]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Lokalisera MediaWiki för ditt språk]',
-);
-
-/** Swahili (Kiswahili)
- * @author Lloffiwr
- */
-$messages['sw'] = array(
-       'mainpagetext' => "'''MediaWiki imefanikiwa kuingizwa.'''",
-       'mainpagedocfooter' => 'Shauriana na [//meta.wikimedia.org/wiki/Help:Contents Mwongozo wa Mtumiaji] kwa habari juu ya utumiaji wa bidhaa pepe ya wiki.
-
-== Msaada wa kianzio ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Orodha ya mipangilio ya msingi]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ ya MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Orodha ya utoaji wa habari za MediaWiki]', # Fuzzy
-);
-
-/** Silesian (ślůnski)
- * @author Djpalar
- */
-$messages['szl'] = array(
-       'mainpagetext' => "'''Sztalowańy MediaWiki śe udoło.'''",
-       'mainpagedocfooter' => 'Uobezdrzij [//meta.wikimedia.org/wiki/Help:Contents przewodńik sprowjacza], kaj sům informacyje uo dźołańu uoprogramowańo MediaWiki.
-
-== Na sztart ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista sztalowań konfiguracyje]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Komuńikaty uo nowych wersyjach MediaWiki]', # Fuzzy
-);
-
-/** Tamil (தமிழ்)
- * @author Karthi.dr
- * @author TRYPPN
- * @author மதனாஹரன்
- */
-$messages['ta'] = array(
-       'config-title' => 'மீடியாவிக்கி $1 நிறுவுதல்',
-       'config-information' => 'தகவல்',
-       'config-localsettings-key' => 'தரமுயர்த்தல் குறியீடு:',
-       'config-localsettings-badkey' => 'நீங்கள் தந்த குறியீடு தவறானது.',
-       'config-your-language' => 'தங்களது மொழி:',
-       'config-your-language-help' => 'நிறுவல் செயன்முறையின்போது பயன்படுத்துவதற்கு ஒரு மொழியைத் தெரிவு செய்யவும்.',
-       'config-wiki-language' => 'விக்கி மொழி:',
-       'config-back' => '← முந்தைய',
-       'config-continue' => 'தொடரவும் →',
-       'config-page-language' => 'மொழி',
-       'config-page-welcome' => 'மீடியாவிக்கிக்கு வருக !',
-       'config-page-dbconnect' => 'தரவுத் தளத்துடன் தொடர்பு கொள்ளவும்',
-       'config-page-dbsettings' => 'தரவுத் தள அமைப்புகள்',
-       'config-page-name' => 'பெயர்',
-       'config-page-options' => 'விருப்பத்தேர்வுகள்',
-       'config-page-install' => 'நிறுவு',
-       'config-page-complete' => 'நிறைவு!',
-       'config-page-restart' => 'நிறுவலை மீண்டும் தொடங்கவும்',
-       'config-page-readme' => 'இதைப் படி',
-       'config-page-releasenotes' => 'வெளியீட்டு குறிப்புகள்',
-       'config-page-copying' => 'நகலெடுக்கப்படுகிறது',
-       'config-page-upgradedoc' => 'தரமுயர்த்தப்படுகிறது',
-       'config-page-existingwiki' => 'இருக்கின்ற விக்கி',
-       'config-restart' => 'ஆம், மறுமுறை துவங்கு',
-       'config-sidebar' => '* [//www.mediawiki.org மீடியாவிக்கி முகப்பு]
-* [//www.mediawiki.org/wiki/Help:Contents பயனரின் கையேடு]
-* [//www.mediawiki.org/wiki/Manual:Contents மேலாளரின் கையேடு]
-* [//www.mediawiki.org/wiki/Manual:FAQ அகேகே]
-----
-* <doclink href=Readme>என்னை வாசிக்கவும்</doclink>
-* <doclink href=ReleaseNotes>வெளியீட்டுக் குறிப்புகள்</doclink>
-* <doclink href=Copying>படியெடுத்தல்</doclink>
-* <doclink href=UpgradeDoc>நிகழ்நிலைப்படுத்தல்</doclink>',
-       'config-db-type' => 'தரவுத்தள வகை:',
-       'config-db-wiki-settings' => 'இந்த விக்கியைக் கண்டுபிடி',
-       'config-db-name' => 'தரவுதளப் பெயர்:',
-       'config-db-install-account' => 'நிறுவலுக்கான பயனர் கணக்கு',
-       'config-db-username' => 'தரவுத்தள பயனர்பெயர்:',
-       'config-db-password' => 'தரவுத்தள கடவுச்சொல்:',
-       'config-db-prefix' => 'தரவுத் தள வரிசைப் பட்டியல் முன்னொட்டு:',
-       'config-db-charset' => 'தரவுத் தள வரியுருத் தொகுதி',
-       'config-invalid-db-type' => 'செல்லாத தரவுத்தள வகை',
-       'config-upgrade-done-no-regenerate' => 'தரமுயர்த்தல் முழுமையடைந்தது.
-நீங்கள் தற்போது [$1 உங்கள் விக்கியைப் பயன்படுத்தத் துவங்கலாம்].',
-       'config-db-web-account' => 'வலை அணுகலுக்கான தரவுத் தளக் கணக்கு',
-       'config-mysql-engine' => 'சேமிப்பு இயந்திரம்:',
-       'config-mysql-charset' => 'தரவுத் தள வரியுருத் தொகுதி:',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'விக்கியின் பெயர்:',
-       'config-site-name-blank' => 'ஒரு தளத்தின் பெயரை உள்ளிடுக.',
-       'config-ns-generic' => 'திட்டம்',
-       'config-ns-other' => 'ஏனையவை (குறிப்பிடவும்)',
-       'config-admin-box' => 'நிருவாகி கணக்கு',
-       'config-admin-name' => 'தங்களது பெயர்:',
-       'config-admin-password' => 'கடவுச்சொல்:',
-       'config-admin-password-confirm' => 'கடவுச்சொல் மறுமுறையும்:',
-       'config-admin-name-blank' => 'நிருவாக அணுக்கம் உள்ள பயனர் பெயரை இடுக.',
-       'config-admin-password-blank' => 'நிருவாகி கணக்குக்கு கடவுச்சொல் ஒன்றை உள்ளிடவும்.',
-       'config-admin-password-same' => 'பயனர் பெயரையே கடவுச்சொல்லாக வைத்துக் கொள்ள முடியாது.',
-       'config-admin-password-mismatch' => 'நீங்கள் பதிந்த கடவுச்சொற்கள் ஒன்றுக்கொன்று பொருந்தவில்லை.',
-       'config-admin-email' => 'மின்னஞ்சல் முகவரி:',
-       'config-admin-error-bademail' => 'நீங்கள் செல்லாத ஒரு மின்னஞ்சல் முகவரியைத் தந்துள்ளீர்கள்.',
-       'config-optional-continue' => 'என்னை இன்னும் அதிகமாக வினவு.',
-       'config-optional-skip' => 'நான் ஏற்கனவே சோர்வடைந்துள்ளேன், விக்கியை மட்டும் உருவாக்கு.',
-       'config-profile' => 'பயனர் உரிமைகள் சுயவிவரம்:',
-       'config-profile-wiki' => 'பாரம்பரிய விக்கி', # Fuzzy
-       'config-profile-no-anon' => 'கணக்கு உருவாக்குதல் அவசியம்',
-       'config-profile-private' => 'தனியார் விக்கி',
-       'config-license' => 'பதிப்புரிமை மற்றும் உரிமம்:',
-       'config-license-pd' => 'பொதுக்களம்',
-       'config-email-settings' => 'மின்னஞ்சல் அமைப்புகள்',
-       'config-email-user' => 'பயனர்-பயனர் மின்னஞ்சலைச் செயற்படுத்தவும்',
-       'config-email-usertalk' => 'பயனர் பேச்சுப் பக்க அறிவிப்பைச் செயற்படுத்தவும்',
-       'config-email-watchlist' => 'கவனிப்புப் பட்டியல் அறிவிப்பைச் செயற்படுத்தவும்',
-       'config-upload-settings' => 'படிமம் மற்றும் கோப்பு பதிவேற்றங்கள்',
-       'config-upload-enable' => 'கோப்புப் பதிவேற்றங்களைச் செயற்படுத்தவும்',
-       'config-upload-deleted' => 'அழித்த கோப்புகளுக்கான அடைவு:',
-       'config-logo' => 'அடையாளச் சின்ன உரலி:',
-       'config-extensions' => 'நீட்சிகள்',
-       'config-install-step-done' => 'முடிந்தது',
-       'config-install-step-failed' => 'தோல்வியுற்றது',
-       'config-install-user' => 'தரவுத் தளப் பயனரை உருவாக்குகிறது',
-       'config-install-user-alreadyexists' => 'பயனர் "$1" ஏற்கனவே உள்ளது',
-       'config-install-tables' => 'வரிசைப் பட்டியல்களை உருவாக்குகிறது',
-       'config-install-mainpage' => 'இயல்புநிலை உள்ளடக்கத்துடன் முதற்பக்கத்தை உருவாக்குகிறது',
-       'config-install-extension-tables' => 'செயற்படுத்தப்பட்ட நீட்சிகளுக்கு வரிசைப் பட்டியல்களை உருவாக்குகிறது',
-       'config-download-localsettings' => '<code>LocalSettings.php</code>ஐத் தரவிறக்கவும்',
-       'config-help' => 'உதவி',
-       'mainpagetext' => "'''விக்கி மென்பொருள் வெற்றிகரமாக உள்ளிடப்பட்டது.'''",
-       'mainpagedocfooter' => 'விக்கி மென்பொருளைப் பயன்படுத்துவது தொடர்பாக [//meta.wikimedia.org/wiki/Help:Contents பயனர் வழிகாட்டியைப்] பார்க்க.
-
-== தொடக்கப்படிகள் ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings அமைப்புக்களை மாற்றம் செய்தல்]
-* [//www.mediawiki.org/wiki/Manual:FAQ மிடியாவிக்கி பொதுவான கேள்விகள்]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce மீடியாவிக்கி வெளியீடு மின்னஞ்சல் பட்டியல்]', # Fuzzy
-);
-
-/** Tulu (ತುಳು)
- */
-$messages['tcy'] = array(
-       'mainpagetext' => "'''ಮೀಡಿಯವಿಕಿ ಯಶಸ್ವಿಯಾದ್ ಇನ್’ಸ್ಟಾಲ್ ಆಂಡ್.'''",
-       'mainpagedocfooter' => 'ವಿಕಿ ತಂತ್ರಾಂಶನ್ ಉಪಗೋಗ ಮನ್ಪುನ ಬಗ್ಗೆ ಮಾಹಿತಿಗ್ [//meta.wikimedia.org/wiki/Help:Contents ಸದಸ್ಯೆರ್ನ ನಿರ್ದೇಶನ ಪುಟ] ತೂಲೆ.
-
-== ಎಂಚ ಶುರು ಮಲ್ಪುನಿ ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ ಮೀಡಿಯವಿಕಿ FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]', # Fuzzy
-);
-
-/** Telugu (తెలుగు)
- * @author Veeven
- */
-$messages['te'] = array(
-       'config-desc' => 'మీడియావికీ కొరకై స్థాపకి',
-       'config-title' => 'మీడియావికీ $1స్థాపన',
-       'config-information' => 'సమాచారం',
-       'config-your-language' => 'మీ భాష:',
-       'config-wiki-language' => 'వికీ భాష:',
-       'config-back' => '← వెనక్కి',
-       'config-continue' => 'కొనసాగించు →',
-       'config-page-language' => 'భాష',
-       'config-page-welcome' => 'మీడియావికీకి స్వాగతం!',
-       'config-page-dbsettings' => 'డాటాబేసు అమరికలు',
-       'config-page-name' => 'పేరు',
-       'config-page-options' => 'ఎంపికలు',
-       'config-page-install' => 'స్థాపించు',
-       'config-page-complete' => 'పూర్తయ్యింది!',
-       'config-page-readme' => 'నన్ను చదవండి',
-       'config-page-releasenotes' => 'విడుదల విశేషాలు',
-       'config-db-type' => 'డాటాబేసు రకం:',
-       'config-db-name' => 'డాటాబేసు పేరు:',
-       'config-db-install-account' => 'స్థాపనకి వాడుకరి ఖాతా',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-header-mysql' => 'MySQL అమరికలు',
-       'config-header-postgres' => 'PostgreSQL అమరికలు',
-       'config-header-sqlite' => 'SQLite అమరికలు',
-       'config-header-oracle' => 'Oracle అమరికలు',
-       'config-invalid-db-type' => 'తప్పుడు డాటాబేసు రకం',
-       'config-connection-error' => '$1.
-
-క్రింది హోస్టు, వాడుకరిపేరు మరియు సంకేతపదాలను ఒకసారి సరిచూసుకుని అప్పుడు ప్రయత్నించండి.',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-site-name' => 'వికీ యొక్క పేరు:',
-       'config-ns-other' => 'ఇతర (ఇవ్వండి)',
-       'config-ns-other-default' => 'నావికీ',
-       'config-admin-name' => 'మీ పేరు:',
-       'config-admin-password' => 'సంకేతపదం:',
-       'config-admin-password-confirm' => 'సంకేతపదం మళ్ళీ:',
-       'config-admin-email' => 'ఈ-మెయిలు చిరునామా:',
-       'config-optional-continue' => 'నన్ను మరిన్ని ప్రశ్నలు అడుగు.',
-       'config-profile-wiki' => 'సంప్రదాయ వికీ', # Fuzzy
-       'config-profile-no-anon' => 'ఖాతా సృష్టింపు తప్పనిసరి',
-       'config-profile-private' => 'అంతరంగిక వికీ',
-       'config-license' => 'కాపీహక్కులు మరియు లైసెన్సు:',
-       'config-license-pd' => 'సార్వజనీనం',
-       'config-email-settings' => 'ఈ-మెయిల్ అమరికలు',
-       'config-upload-deleted' => 'తొలగించిన దస్త్రాల కొరకు సంచయం:',
-       'config-advanced-settings' => 'ఉన్నత స్వరూపణం',
-       'config-install-step-done' => 'పూర్తయింది',
-       'config-install-step-failed' => 'విఫలమైంది',
-       'config-help' => 'సహాయం',
-       'mainpagetext' => "'''మీడియా వికీని విజయవంతంగా ప్రతిష్టించాం.'''",
-       'mainpagedocfooter' => 'వికీ సాఫ్టువేరును వాడటనికి కావలిసిన సమాచారం కోసం [//meta.wikimedia.org/wiki/Help:Contents వాడుకరుల గైడు]ను సందర్శించండి.
-
-== మొదలు పెట్టండి ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings మీడియావికీ పనితీరు, అమరిక మార్చుకునేందుకు వీలుకల్పించే చిహ్నాల జాబితా]
-* [//www.mediawiki.org/wiki/Manual:FAQ మీడియావికీపై తరుచుగా అడిగే ప్రశ్నలు]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce మీడియావికీ సాఫ్టువేరు కొత్త వెర్షను విడుదలల గురించి తెలిపే మెయిలింగు లిస్టు]', # Fuzzy
-);
-
-/** Tetum (tetun)
- * @author MF-Warburg
- */
-$messages['tet'] = array(
-       'config-page-language' => 'Lian',
-       'config-page-name' => 'Naran',
-);
-
-/** Tajik (Cyrillic script) (тоҷикӣ)
- */
-$messages['tg-cyrl'] = array(
-       'mainpagetext' => "'''Нармафзори МедиаВики бо муваффақият насб шуд.'''",
-       'mainpagedocfooter' => 'Аз [//meta.wikimedia.org/wiki/Help:Contents Роҳнамои Корбарон] барои истифодаи нармафзори вики кӯмак бигиред.
-
-== Оғоз ба кор ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Феҳристи танзимоти пайгирбандӣ]
-* [//www.mediawiki.org/wiki/Manual:FAQ Пурсишҳои МедиаВики]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Феҳристи ройномаҳои нусхаҳои МедиаВики]', # Fuzzy
-);
-
-/** Tajik (Latin script) (tojikī)
- * @author Liangent
- */
-$messages['tg-latn'] = array(
-       'mainpagetext' => "'''Narmafzori MediaViki bo muvaffaqijat nasb şud.'''",
-       'mainpagedocfooter' => 'Az [//meta.wikimedia.org/wiki/Help:Contents Rohnamoi Korbaron] baroi istifodai narmafzori viki kūmak bigired.
-
-== Oƣoz ba kor ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Fehristi tanzimoti pajgirbandī]
-* [//www.mediawiki.org/wiki/Manual:FAQ Pursişhoi MediaViki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Fehristi rojnomahoi nusxahoi MediaViki]', # Fuzzy
-);
-
-/** Thai (ไทย)
- * @author Korrawit
- */
-$messages['th'] = array(
-       'mainpagetext' => "'''ติดตั้งซอฟต์แวร์มีเดียวิกิเรียบร้อย'''",
-       'mainpagedocfooter' => 'ศึกษา[//meta.wikimedia.org/wiki/Help:Contents คู่มือการใช้งาน] สำหรับเริ่มต้นใช้งานซอฟต์แวร์วิกิ
-
-== เริ่มต้น ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings รายการการปรับแต่งระบบ] (ภาษาอังกฤษ)
-* [//www.mediawiki.org/wiki/Manual:FAQ คำถามที่ถามบ่อยในมีเดียวิกิ] (ภาษาอังกฤษ)
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce เมลลิงลิสต์ของมีเดียวิกิ]', # Fuzzy
-);
-
-/** Turkmen (Türkmençe)
- * @author Hanberke
- */
-$messages['tk'] = array(
-       'mainpagetext' => "'''MediaWiki şowlulyk bilen guruldy.'''",
-       'mainpagedocfooter' => 'Wiki programmasynyň ulanylyşy hakynda maglumat almak üçin [//meta.wikimedia.org/wiki/Help:Contents ulanyjy gollanmasyna] serediň.
-
-== Öwrenjeler ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfigurasiýa sazlamalary]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki SSS]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-poçta sanawy]', # Fuzzy
-);
-
-/** Tagalog (Tagalog)
- * @author AnakngAraw
- * @author Sky Harbor
- * @author 아라
- */
-$messages['tl'] = array(
-       'config-desc' => 'Ang tagapagluklok para sa MediaWiki',
-       'config-title' => 'Instalasyong $1 ng MediaWiki',
-       'config-information' => 'Kabatiran',
-       'config-localsettings-upgrade' => 'Napansin ang isang talaksang <code>LocalSettings.php</code>.
-Upang maitaas ang uri ng pagluluklok na ito, paki ipasok ang halaga ng <code>$wgUpgradeKey</code> sa loob ng kahong nasa ibaba.
-Matatagpuan mo ito sa loob ng <code>LocalSettings.php</code>.',
-       'config-localsettings-cli-upgrade' => 'Napansin ang isang talaksan ng <code>LocalSettings.php</code>.
-Upang isapanahon ang pagtatalagang ito, mangyaring patakbuhin sa halip ang <code>update.php</code>',
-       'config-localsettings-key' => 'Susi ng pagsasapanahon:',
-       'config-localsettings-badkey' => 'Hindi tama ang susing ibinigay mo.',
-       'config-upgrade-key-missing' => 'Napansin ang isang umiiral na pagtatalaga ng MediaWiki.
-Upang isapanahon ang katalagahang ito, mangyaring ilagay ang sumusunod na guhit sa ilalim ng iyong <code>LocalSettings.php</code>:
-
-$1',
-       'config-localsettings-incomplete' => 'Lumilitaw na hindi pa buo ang umiiral na <code>LocalSettings.php</code>.
-Ang pabagu-bagong $1 ay hindi nakatakda.
-Mangyaring baguhin ang  <code>LocalSettings.php</code> upang ang maitakda ang pagpapabagu-bagong ito, at pindutin ang "{{int:Config-continue}}".',
-       'config-localsettings-connection-error' => 'Isang kamalian ang nakatagpo noong kumakabit sa kalipunan ng dato na ginagamit ang tinukoy na mga katakdaan sa loob ng <code>LocalSettings.php</code> o
-<code>AdminSettings.php</code>. Paki kumpunihin ang mga katakdaang ito at subukang muli.
-
-$1',
-       'config-session-error' => 'Kamalian sa pagsisimula ng sesyon: $1',
-       'config-session-expired' => 'Tila nagwakas na ang inilaan sa iyong panahon ng dato.
-Ang inilaang mga panahon ay iniayos para sa isang panahon ng buhay na $1.
-Mapapataas mo ito sa pamamagitan ng pagtatakda ng <code>session.gc_maxlifetime</code> sa loob ng php.ini.
-Muling simulan ang proseso ng pagluluklok.',
-       'config-no-session' => 'Nawala ang iyong datos ng sesyon!
-Suriin ang iyong php.ini at tiyakin na ang <code>session.save_path</code> ay nakatakda sa angkop na direktoryo.',
-       'config-your-language' => 'Ang wika mo:',
-       'config-your-language-help' => 'Pumili ng isang wikang gagamitin habang isinasagawa ang pagtatalaga.',
-       'config-wiki-language' => 'Wika ng Wiki:',
-       'config-wiki-language-help' => 'Piliin ang wika kung saan mangingibabaw na isusulat ang wiki.',
-       'config-back' => '← Bumalik',
-       'config-continue' => 'Magpatuloy →',
-       'config-page-language' => 'Wika',
-       'config-page-welcome' => 'Maligayang pagdating sa MediaWiki!',
-       'config-page-dbconnect' => 'Umugnay sa kalipunan ng datos',
-       'config-page-upgrade' => 'Itaas ng uri ang umiiral na pagkakatalaga',
-       'config-page-dbsettings' => 'Mga katakdaan ng kalipunan ng datos',
-       'config-page-name' => 'Pangalan',
-       'config-page-options' => 'Mga mapipili',
-       'config-page-install' => 'Italaga',
-       'config-page-complete' => 'Buo na!',
-       'config-page-restart' => 'Simulan muli ang pag-iinstala',
-       'config-page-readme' => 'Basahin ako',
-       'config-page-releasenotes' => 'Pakawalan ang mga tala',
-       'config-page-copying' => 'Kinokopya',
-       'config-page-upgradedoc' => 'Itinataas ang uri',
-       'config-page-existingwiki' => 'Umiiral na wiki',
-       'config-help-restart' => 'Nais mo bang hawiin ang lahat ng nasagip na datong ipinasok mo at muling simulan ang proseso ng pagluluklok?',
-       'config-restart' => 'Oo, muling simulan ito',
-       'config-welcome' => '=== Pagsusuring pangkapaligiran ===
-Isinasagawa ang payak na mga pagsusuri upang makita kung ang kapaligirang ito ay angkop para sa pagluluklok ng MediaWiki.
-Dapat mong ibigay ang mga kinalabasan ng mga pagsusuring ito kung kailangan mo ng tulong habang nagluluklok.',
-       'config-copyright' => "=== Karapatang-ari at Tadhana ===
-
-$1
-
-Ang programang ito ay malayang software; maaari mo itong ipamahagi at/o baguhin sa ilalim ng mga tadhana ng Pangkalahatang Pampublikong Lisensiyang GNU ayon sa pagkakalathala ng Free Software Foundation; na maaaring bersyong 2 ng Lisensiya, o (kung nais mo) anumang susunod na bersyon.
-
-Ipinamamahagi ang programang ito na umaasang magiging gamitin, subaliut '''walang anumang katiyakan'''; na walang pahiwatig ng '''pagiging mabenta''' o '''kaangkupan para sa isang tiyak na layunin'''.
-Tingnan ang Pangkalahatang Pampublikong Lisensiyang GNU para sa mas maraming detalye.
-
-Dapat nakatanggap ka ng <doclink href=Copying>isang sipi ng Pangkalahatang Pampublikong Lisensiyang GNU</doclink> kasama ng programang ito; kung hindi, sumulat sa Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [http://www.gnu.org/licenses//gpl.html basahin ito sa Internet].",
-       'config-sidebar' => '* [//www.mediawiki.org Tahanan ng MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents Gabay ng Tagagamit]
-* [//www.mediawiki.org/wiki/Manual:Contents Gabay ng Tagapangasiwa]
-* [//www.mediawiki.org/wiki/Manual:FAQ Mga Malimit Itanong]
-----
-* <doclink href=Readme>Basahin ako</doclink>
-* <doclink href=ReleaseNotes>Mga tala ng paglalabas</doclink>
-* <doclink href=Copying>Pagkopya</doclink>
-* <doclink href=UpgradeDoc>Pagsasapanahon</doclink>',
-       'config-env-good' => 'Nasuri na ang kapaligiran.
-Mailuluklok mo ang MediaWiki.',
-       'config-env-bad' => 'Nasuri na ang kapaligiran.
-Hindi mo mailuklok ang MediaWiki.',
-       'config-env-php' => 'Naitalaga ang PHP na $1.',
-       'config-env-php-toolow' => 'Naitalaga ang PHP $1.
-Subalit, nangangailangan ang MediaWiki ng PHP $2 o mas mataas pa.',
-       'config-unicode-using-utf8' => 'Ginagamit ang utf8_normalize.so ni Brion Vibber para sa pagpapanormal ng Unikodigo.',
-       'config-unicode-using-intl' => 'Ginagamit ang [http://pecl.php.net/intl intl dugtong na PECL] para sa pagsasanormal ng Unikodigo.',
-       'config-unicode-pure-php-warning' => "'''Babala''': Ang [http://pecl.php.net/intl dugtong ng internasyunal na PECL] ay hindi makukuha upang makapanghawak ng pagpapanormal ng Unikodigo, na babagsak na pabalik sa mabagal na pagsasakatuparan ng dalisay na PHP.
-Kapag nagpapatakbo ka ng isang pook na mataas ang trapiko, dapat kang bumasa ng kaunti hinggil sa [//www.mediawiki.org/wiki/Unicode_normalization_considerations pagpapanormal ng Unikodigo].",
-       'config-unicode-update-warning' => "'''Babala''': Ang nakaluklok na bersiyon ng pambalot ng pagpapanormal ng Unikodigo ay gumagamit ng isang mas matandang bersiyon ng aklatan ng [http://site.icu-project.org/ proyekto ng ICU].
-Dapat kang [//www.mediawiki.org/wiki/Unicode_normalization_considerations magtaas ng uri] kung may pag-aalala ka hinggil sa paggamit ng Unikodigo.",
-       'config-no-db' => 'Hindi matagpuan ang isang angkop na tagapagmaneho ng kalipunan ng datos! Kailangan mong magluklok ng isang tagapagmaneho ng kalipunan ng dato para sa PHP.
-Tinatangkilik ang sumusunod na mga uri ng kalipunan ng dato: $1.
-
-Kung ikaw ay nasa isang pinagsasaluhang pagpapasinaya, hilingin sa iyong tagapagbigay ng pagpapasinaya na iluklok ang isang angkop na tagapagmaneho ng kalipunan ng dato.
-Kung ikaw mismo ang nangalap ng PHP, muling isaayos ito na pinagagana ang isang kliyente ng kalipunan ng dato, halimbawa na ang paggamit ng <code>./configure --with-mysql</code>.
-Kung iniluklok mo ang PHP mula sa isang pakete ng Debian o Ubuntu, kung gayon kailangan mo ring magluklok ng modyul na php5-mysql.',
-       'config-outdated-sqlite' => "'''Babala''': mayroong kang $1 ng SQLite, na mas mababa kaysa sa pinaka mababang kailangang bersiyon na $2. Magiging hindi makukuha ang SQLite.",
-       'config-no-fts3' => "'''Warning''': Ang SQLite ay hindi itinala at tinipon na wala ang [//sqlite.org/fts3.html modulong FTS3], ang mga tampok na panghanap ay magiging hindi makukuha sa ibabaw ng panlikod na dulong ito.",
-       'config-register-globals' => "'''Babala: Ang mapipili na <code>[http://php.net/register_globals register_globals]</code> ng PHP ay pinagagana.'''
-'''Huwag paganahin kung kaya mo.'''
-Aandar ang MediaWiki, subalit ang tagapaghain mo ay nakalantad sa maaaring maganap na mga kahinaang pangkatiwasayan.",
-       'config-magic-quotes-runtime' => "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!'''
-Ang piniling ito ay hindi mahuhulaan na pipinsala sa lahok na dato.
-Hindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na gumagana ang pinili na ito.",
-       'config-magic-quotes-sybase' => "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''
-Hindi mahuhulaan na sinisira ng napiling ito ang lahok na dato.
-Hindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
-       'config-mbstring' => "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''
-Ang napiling ito ay nagdurulot ng mga kamalian at maaaring sumira nang hindi nahuhulaan ang dato.
-Hindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
-       'config-ze1' => "'''Malubha: Masigla ang [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]!'''
-Ang napiling ito ay nagsasanhi ng karima-rimarim na mga sira sa MediaWiki.
-Hindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
-       'config-safe-mode' => "'''Babala:''' Masigla ang [http://www.php.net/features.safe-mode safe mode] ng PHP.
-Maaari itong magdulot ng mga suliranin, partikular na kung gumagamit ng mga ikinargang paitaas na talaksan at ng suporta sa <code>math</code>.",
-       'config-xml-bad' => 'Nawawala ang modulong XML ng PHP.
-Nangangailangan ang MediaWiki ng mga tungkulin sa loob ng modulong ito at hindi aandar sa loob ng ganitong pagkakaayos.
-Kung pinapatakbo mo ang Mandrake, iluklok ang pakete ng php-xml.',
-       'config-pcre' => 'Tila nawawala ang modyul na pangsuporta ng PCRE.
-Nangangailangan ang MediaWiki ng nakaukol sa Perl na mga tungkulin ng karaniwang pagsasaad upang gumana.',
-       'config-pcre-no-utf8' => "'''Malubha''': Tila tinipon ang modyul na PCRE ng PHP na wala ang suporta ng PCRE_UTF8.
-Nangangailangan ang MediaWiki ng suporta ng UTF-8 upang maging tama ang pag-andar.",
-       'config-memory-raised' => 'Ang <code>hangganan_ng_alaala</code> ng PHP ay $1, itinaas sa $2.',
-       'config-memory-bad' => "'''Babala:''' Ang <code>hangganan_ng_alaala</code> ng PHP ay $1.
-Ito ay maaaring napakababa.
-Maaaring mabigo ang pagluluklok!",
-       'config-ctype' => "'''Maluba''': Dapat na tipunin ang PHP na mayroong suporta para sa [http://www.php.net/manual/en/ctype.installation.php dugtong Ctype].",
-       'config-xcache' => 'Ininstala na ang [http://xcache.lighttpd.net/ XCache]',
-       'config-apc' => 'Ininstala na ang [http://www.php.net/apc APC]',
-       'config-wincache' => 'Ininstala na ang [http://www.iis.net/download/WinCacheForPhp WinCache]',
-       'config-no-cache' => "'''Babala:''' Hindi mahanap ang [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].
-Hindi pinapagana ang pagbabaon ng mga bagay.",
-       'config-mod-security' => "'''Babala''': Ang tagapaghain mo ng sangkasaputan ay pinagana na mayroong [http://modsecurity.org/ mod_security]. Kung mali ang kaayusan, makapagdurulot ito ng mga suliranin para sa MediaWiki o ibang mga sopwer na nagpapahintulot sa mga tagagamit na magpaskil ng hindi makatwirang nilalaman.
-Sumangguni sa [http://modsecurity.org/documentation/ mod_security kasulatan] o makipag-ugnayan sa suporta ng iyong tagapagpasinaya kapag nakatagpo ng alin mang mga kamalian.",
-       'config-diff3-bad' => 'Hindi natagpuan ang GNU diff3.',
-       'config-imagemagick' => 'Natagpuan ang ImageMagick: <code>$1</code>.
-Papaganahin ang pagkakagyat ng larawan kapag pinagana mo ang mga pagkakargang paitaas.',
-       'config-gd' => 'Natagpuan ang pinasadyang nakapaloob na grapiks ng GD.
-Papaganahin ang pagkakagyat ng larawan kapag pinagana mo ang mga pagkakargang paitaas.',
-       'config-no-scaling' => 'Hindi matagpuan ang aklatang GD o ImageMagick.
-Hindi papaganahin ang pagkakagyat ng larawan.',
-       'config-no-uri' => "'''Kamalian:''' Hindi matukoy ang kasalukuyang URI.
-Pinigilan ang pag-iinstala.",
-       'config-no-cli-uri' => "'''Babala''': Walang tinukoy na --landas ng panitik, ginagamit ang likas na katakdaan: <code>$1</code>.",
-       'config-using-server' => 'Ginagamit ang pangalan ng tagapaghain na "<nowiki>$1</nowiki>".',
-       'config-using-uri' => 'Ginagamit ang URL ng tagapaghain na "<nowiki>$1$2</nowiki>".',
-       'config-uploads-not-safe' => "'''Babala:''' Ang iyong likas na nakatakdang direktoryo para sa paitaas na mga pagkakarga na <code>$1</code> ay may kahinaan laban sa pagsasagawa ng mga panitiki na hindi makatwiran. Bagaman sinisiyasat ng MediaWiki ang lahat ng paitaas na naikargang mga talaksan para sa mga panganib na pangkatiwasayan, mataas na iminumungkahi na [//www.mediawiki.org/wiki/Manual:Security#Upload_security isara ang kahinaang ito na pangkatiwasayan] bago paganahin ang paitaas na mga pagkakarga.",
-       'config-no-cli-uploads-check' => "'''Babala:''' Ang iyong likas na nakatakdang direktoryo para sa paitaas na mga pagkakarga (<code>$1</code>) ay hindi nasuri para sa kahinaan laban sa pagsasagawa ng panitik na hindi makatwiran habang iniluluklok ang Ugnayang Mukha ng Guhit ng Kaataasan o Command-Line Interface (CLI).",
-       'config-brokenlibxml' => "Ang sistema mo ay mayroong isang pagsasama ng mga bersiyon ng PHP at libxml2 na maaaring masurot at maaaring makapagsanhi ng pagkasira ng datong nakakubli sa loob ng MediaWiki at iba pang mga aplikasyon ng sangkasaputan.
-Magtaas ng uri upang maging PHP 5.2.9 o mas lalong huli at libxml2 2.7.3 o mas lalong huli ([//bugs.php.net/bug.php?id=45996 isinalansan ang surot o ''bug'' na mayroong PHP]). Binigo ang pagluluklok.",
-       'config-using531' => 'Hindi maaaring gamitin ang MediaWiki na kapiling ang PHP na $1 dahil sa isang surot na kinasasangkutan ng mga parametrong pangsangguni sa <code>__call()</code>. Magtaas ng uri upang maging PHP 5.3.2 o mas mataas, o magbaba ng uri upang maging PHP 5.3.0 upang malutas ito. Binigo ang pagluluklok.',
-       'config-suhosin-max-value-length' => 'Nakaluklok ang Suhosin at hinahanggahan ang haba ng parametro ng GET sa $1 mga byte. Ang sangkap na ResourceLoader ng MediaWiki ay gagana sa paligid ng hangganang ito, subalit pasasamain nito ang pagganap. Kung talagang maaari, dapat mong itakda ang <code>suhosin.get.max_value_length</code> upang maging 1024 o mas mataas sa loob ng <code>php.ini</code>, at itakda ang <code>$wgResourceLoaderMaxQueryLength</code> sa katulad na halaga sa loob ng LocalSettings.php.', # Fuzzy
-       'config-db-type' => 'Uri ng kalipunan ng datos:',
-       'config-db-host' => 'Tagapagpasinaya ng kalipunan ng datos:',
-       'config-db-host-help' => 'Kung ang iyong tagapaghain ng kalipunan ng dato ay nasa ibabaw ng isang ibang tagapaghain, ipasok ang pangalan ng tagapagpasinaya o tirahan ng IP dito.
-
-Kung gumagamit ka ng pinagsasaluhang pagpapasinaya ng sangkasaputan, dapat ibigay sa iyo ng iyong tagapagbigay ng pagpapasinaya ang tamang pangalan ng tagapagpasinaya sa loob ng kanilang kasulatan.
-
-Kapag nagluluklok ka sa ibabaw ng isang tagapaghain ng Windows at gumagamit ng MySQL, maaaring hindi gumana ang paggamit ng "localhost" para sa pangalan ng tagapaghain. Kung hindi, subukan ang "127.0.0.1" para sa katutubong tirahan ng IP.
-
-Kapag gumagamit ka ng PostgreSQL, iwanang walang laman ang hanay na ito upang kumabit sa pamamagitan ng bokilya ng Unix.',
-       'config-db-host-oracle' => 'TNS ng kalipunan ng dato:',
-       'config-db-host-oracle-help' => 'Magpasok ng isang katanggap-tanggap na [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Katutubong Pangalan ng Pagkabit]; dapat na nakikita ang isang talaksan ng tnsnames.ora sa pagluluklok na ito.<br />Kung gumagamit ka ng mga aklatan ng kliyente na 10g o mas bago, maaari mo ring gamitin ang pamamaraan ng pagpapangalan ng [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Maginhawang Pagkabit].',
-       'config-db-wiki-settings' => 'Kilalanin ang wiking ito',
-       'config-db-name' => 'Pangalan ng kalipunan ng dato:',
-       'config-db-name-help' => 'Pumili ng isang pangalan na pangkilala sa wiki mo.
-Hindi ito dapat maglaman ng mga patlang.
-
-Kung gumagamit ka ng pinagsasaluhang pagpapasinaya ng sangkasaputan, ang iyong tagapagbigay ng pagpapasinaya ay maaaring bigyan ka ng isang tiyak na pangalan ng kalipunan ng datong gagamitin o papayagan kang lumikha ng mga kalipunan ng dato sa pamamagitan ng isang entrepanyong pantaban.',
-       'config-db-name-oracle' => 'Balangkas ng kalipunan ng dato:',
-       'config-db-account-oracle-warn' => 'Mayroong tatlong tinatangkilik na tagpo para sa pagluluklok ng Oracle bilang panlikurang hulihan ng kalipunan ng dato:
-
-Kung nais mong lumikha ng akawnt ng kalipunan ng dato bilang bahagi ng proseso ng pagluluklok, paki magbigay ng isang akawnt na mayroong gampanin ng SYSDBA bilang akawnt ng kalipunan ng dato para sa pagluluklok at tukuyin ang ninanais na mga kredensiyal para sa akawnt ng pagpunta sa sangkasaputan, o di kaya ay maaaring kinakamay na lumikha ng akawnt ng pagpunta sa sangkasaputan at ibigay lamang ang akawnt na iyan (kung mayroong ito ng kinakailangang mga pahintulot upang malikha ang mga bagay na pampagpapanukala) o magbigay ng dalawang magkaibang mga akawnt, isang mayroong pribilehiyo ng paglikha at isang may pagbabawal para sa pagpunta sa sangkasaputan.
-
-Ang panitik sa paglikha ng isang akawnt na mayroon ng kinakailangang mga pribilehiyo ay matatagpuan sa loob ng direktoryong "maintenance/oracle/" ng pagluluklok na ito. Pakatandaan na ang paggamit ng isang akawnt na may pagbabawal ay hindi magpapagana isa lahat ng mga kakayahang pampananatili sa piling ng likas na nakatakdang akawnt.',
-       'config-db-install-account' => 'Akawnt ng tagagamit para sa pagluluklok',
-       'config-db-username' => 'Pangalang pangtagagamit ng kalipunan ng dato:',
-       'config-db-password' => 'Hudyat sa kalipunan ng dato:',
-       'config-db-password-empty' => 'Paki magpasok ng isang hudyat para sa bagong tagagamit ng kalipunan ng dato: $1.
-Habang maging maaari na makalikha ng mga tagagamit na walang mga hudyat, hindi ito ligtas.',
-       'config-db-install-username' => 'Ipasok ang pangalan ng tagagamit na gagamitin upang kumabit sa kalipunan ng dato habang isinasagawa ang pagluluklok.
-Hindi ito ang pangalan ng tagagamit ng akawnt ng MediaWiki; ito ang pangalan ng tagagamit para sa iyong kalipunan ng dato.',
-       'config-db-install-password' => 'Ipasok ang hudyat na gagamitin upang kumabit sa kalipunan ng dato habang isinasagawa ang pagluluklok.
-Hindi ito ang hudyat para sa akawnt ng MediaWiki; ito ang hudyat para sa iyong kalipunan ng dato.',
-       'config-db-install-help' => 'Ipasok ang pangalan ng tagagamit at hudyat na gagamitin upang umugnay sa kalipunan ng dato habang isinasagawa ang pagluluklok.',
-       'config-db-account-lock' => 'Gamitin ang gayun ding pangalan ng tagagamit at hudyat habang nasa normal na operasyon',
-       'config-db-wiki-account' => 'Akawnt ng tagagamit para sa pangkaraniwang pagpapaandar',
-       'config-db-wiki-help' => 'Ipasok ang pangalan ng tagagamit at hudyat na gagamitin upang kumabit sa kalipunan ng dato habang nasa karaniwang pagtakbo ng wiki.
-Kung hindi umiiral ang akawnt, at ang akawnt ng pagluluklok ay mayroong sapat na mga pribilehiyo, ang akawnt na ito ng tagagamit ay lilikhain na mayroong pinaka mababang mga pribilehiyo na kailangan upang mapatakbo ang wiki.',
-       'config-db-prefix' => 'Unlapi ng talahanayan ng kalipunan ng dato:',
-       'config-db-prefix-help' => 'Kung kailangan mong ibahagi ang isang kalipunan ng dato sa pagitan ng maramihang mga wiki, o sa pagitan ng MediaWiki at ibang aplikasyon ng kasaputan, maaaring piliin mo na magdagdag ng isang unlapi sa lahat ng mga pangalan ng talahanayan upang maiwasan ang mga salungatan.
-Huwag gumamit ng mga patlang.
-
-Ang hanay na ito ay karaniwang iniiwanang walang laman.',
-       'config-db-charset' => 'Pangkat ng panitik ng kalipunan ng dato',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binaryo',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 paurong-kabagay UTF-8',
-       'config-charset-help' => "'''Babala:''' Kapag ginamit mo ang '''backwards-compatible UTF-8''' o \"nauukol na pabalik na UTF-8\" sa MySQL 4.1+, at may kasunod na pagtatabi ng pansalong kopya ng kalipunan ng dato na mayroong <code>mysqldump</code>, maaaring wasakin nito ang lahat ng mga panitik na hindi ASCII, na hindi na mababawi pa ang mga pansalong kopya.
-
-Sa '''gawi na nakahalo sa dalawa (binaryo)''', itinatabi ng MediaWiki ang tekstong UTF-8 sa kalipunan ng dato sa loob ng mga kahanayang binaryo.
-Mas kapaki-pakinabang ito kaysa sa gawi na UTF-8 ng MySQL, at nagpapahintulot sa iyo na gamitin ang buong kasaklawan ng mga panitik na Unikodigo.
-Sa '''gawi ng UTF-8''', malalaman ng MySQL kung anong pangkat ng panitik ang kinapapalooban ng iyong dato, at may kaangkupang maihaharap at mapapalitan ito, ngunit hindi ka nito papayagan na mag-imbak ng mga panitik sa ibabaw ng [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] o Saligang Patag na Kayas na Pangmaramihang Wika.",
-       'config-mysql-old' => 'Hindi kailangan ang MySQL na $1 o mas bago, mayroon kang $2.',
-       'config-db-port' => 'Daungan ng kalipunan ng dato:',
-       'config-db-schema' => 'Panukala para sa MediaWiki',
-       'config-db-schema-help' => 'Ang nasa itaas na panukala ay pangkaraniwang magiging maayos.
-Baguhin lamang ito kung alam mong kinakailangan.',
-       'config-pg-test-error' => "Hindi makakabit sa kalipunan ng dato na '''$1''': $2",
-       'config-sqlite-dir' => 'Direktoryo ng dato ng SQLite:',
-       'config-sqlite-dir-help' => "Iniimbak ng SQLite ang lahat ng dato sa loob ng isang nag-iisang talaksan.
-
-Ang ibibigay mong direktoryo ay dapat na maging masusulatan ng tagapaghain ng kasaputan habang nagluluklok.
-
-'''Hindi''' ito dapat na mapuntahan sa pamamagitan ng kasaputan, ito ang dahilan kung bakit hindi namin ito inilalagay sa kung nasaan ang iyong mga talaksan ng PHP.
-
-Ang tagapagluklok ay magsusulat ng isang talaksang <code>.htaccess</code> na kasama ito, subalit kapag nabigo iyon mayroong isang tao na maaaring makakuha ng pagka nakakapunta sa iyong hilaw na kalipunan ng dato.
-Kasama riyan ang hilaw na dato ng tagagamit (mga tirahan ng e-liham, pinaghalong mga hudyat) pati na ang nabura nang mga pagbabago at iba pang may pagbabawal na dato sa ibabaw ng wiki.
-
-Isaalang-alang ang paglalagay na magkakasama ang kalipunan ng dato sa ibang lugar, halimbawa na ang sa loob ng <code>/var/lib/mediawiki/yourwiki</code>.",
-       'config-oracle-def-ts' => 'Likas na nakatakdang puwang ng talahanayan:',
-       'config-oracle-temp-ts' => 'Pansamantalang puwang ng talahanayan:',
-       'config-type-mysql' => 'MySQL',
-       'config-type-postgres' => 'PostgreSQL',
-       'config-type-sqlite' => 'SQLite',
-       'config-type-oracle' => 'Oracle',
-       'config-support-info' => 'Sinusuportahan ng MediaWiki ang sumusunod na mga sistema ng kalipunan ng dato:
-
-$1
-
-Kung hindi mo makita ang sistema ng kalipunan ng dato na sinusubukan mong gamitin na nakatala sa ibaba, kung gayon ay sundi ang mga tagubilin na nakakawing sa itaas upang mapagana ang suporta,',
-       'config-support-mysql' => '* Ang $1 ay ang pangunahing puntirya para sa MediaWiki at ang pinaka sinusuportahan ([http://www.php.net/manual/en/mysql.installation.php paano magtipon ng PHP na mayroong suporta ng MySQL])',
-       'config-support-postgres' => '* Ang $1 ay isang bantog na sistema ng kalipunan ng dato na bukas ang pinagmulan na panghalili sa MySQL ([http://www.php.net/manual/en/pgsql.installation.php paano magtipon ng PHP na mayroong suporta ng PostgreSQL]). Maaaring mayroong ilang hindi pangunahing mga surot na natitira pa, at hindi iminumungkahi para gamitin sa loob ng isang kapaligiran ng produksiyon.',
-       'config-support-sqlite' => 'Ang $1 ay isang magaan ang timbang na sistema ng kalipunan ng dato na sinusuportahan nang napaka mainam. ([http://www.php.net/manual/en/pdo.installation.php Paano magtipon ng PHP na mayroong suporta ng SQLite], gumagamit ng PDO)',
-       'config-support-oracle' => '* Ang $1 ay isang kalipunan ng dato ng kasigasigang pangkalakal. ([http://www.php.net/manual/en/oci8.installation.php Paano magtipunan ng PHP na mayroong suporta ng OCI8])',
-       'config-header-mysql' => 'Mga katakdaan ng MySQL',
-       'config-header-postgres' => 'Mga katakdaan ng PostgreSQL',
-       'config-header-sqlite' => 'Mga katakdaan ng SQLite',
-       'config-header-oracle' => 'Mga katakdaan ng Oracle',
-       'config-invalid-db-type' => 'Hindi tanggap na uri ng kalipunan ng dato',
-       'config-missing-db-name' => 'Dapat kang magpasok ng isang halaga para sa "Pangalan ng kalipunan ng dato"',
-       'config-missing-db-host' => 'Dapat kang magpasok ng isang halaga para sa "Tagapagpasinaya ng kalipunan ng dato"',
-       'config-missing-db-server-oracle' => 'Dapat kang magpasok ng isang halaga para sa "TNS ng kalipunan ng dato"',
-       'config-invalid-db-server-oracle' => 'Hindi katanggap-tanggap na pangalan ng TNSng kalipunan ng dato na "$1".
-Gumamit lamang ng mga titik ng ASCII (a-z, A-Z), mga bilang (0-9), mga salungguhit (_) at mga tuldok (.).',
-       'config-invalid-db-name' => 'Hindi tanggap na pangalan ng kalipunan ng dato na "$1".
-Gumamit lamang ng mga titik ng ASCII (a-z, A-Z), mga bilang (0-9), mga salungguhit (_) at mga gitling (-).',
-       'config-invalid-db-prefix' => 'Hindi tanggap na unlapi ng kalipunan ng dato na "$1".
-Gamitin lamang ang mga titik na ASCII (a-z, A-Z), mga bilang (0-9), mga salungguhit (_) at mga gitling (-).',
-       'config-connection-error' => '$1.
-
-Suriin ang punong-abala, pangalan ng tagagamit at hudyat na nasa ibaba at subukan ulit.',
-       'config-invalid-schema' => 'Hindi katanggap-tanggap na panukala para sa "$1" ng MediaWiki.
-Gumamit lamang ng mga titik ng ASCII (a-z, A-Z), mga bilang (0-9), at mga salungguhit (_).',
-       'config-db-sys-create-oracle' => 'Ang panluklok ay tumatangkilik lamang sa paggamit ng isang akawnt ng SYSDBA para sa paglikha ng isang bagong akawnt.',
-       'config-db-sys-user-exists-oracle' => 'Umiiral na ang akawnt ng tagagamit na "$1". Magagamit lamang ang SYSDBA para sa paglikha ng isang bagong akawnt!',
-       'config-postgres-old' => 'Kailangan ang PostgreSQL $1 o mas bago, mayroon kang $2.',
-       'config-sqlite-name-help' => 'Pumili ng isang pangalan na pangkilala na wiki mo.
-Huwag gumamit ng mga puwang o mga gitling.
-Gagamitin ito para sa pangalan ng talaksan ng dato ng SQLite.',
-       'config-sqlite-parent-unwritable-group' => 'Hindi malikha ang direktoryo ng dato na <code><nowiki>$1</nowiki></code>, sapagkat ang magulang na direktoryong <code><nowiki>$2</nowiki></code> ay hindi masulatan ng tagapaghain ng kasaputan.
-
-Napag-alaman ng tagapagluklok kung sinong tagagamit ang kinatatakbuhan ng iyong tagapaghain ng kasaputan.
-Gawing nasusulatan nito ang <code><nowiki>$3</nowiki></code> ng direktoryo upang makapagpatuloy.
-Ito ang gawin sa ibabaw ng isang sistema ng Unix/Linux:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Hindi malikha ang direktoryo ng dato na <code><nowiki>$1</nowiki></code>, sapagkat ang magulang na direktoryong <code><nowiki>$2</nowiki></code> ay hindi masulatan ng tagapaghain ng kasaputan.
-
-Hindi malaman ng tagapagluklok kung sinong tagagamit ang kinatatakbuhan ng iyong tagapaghain ng kasaputan.
-Gawing nasusulatan nito (at ng mga iba pa) ang <code><nowiki>$3</nowiki></code> ng direktoryo upang makapagpatuloy.
-Ito ang gawin sa ibabaw ng isang sistema ng Unix/Linux:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Kamalian sa paglikha ng direktoryo ng datong "$1".
-Suriin ang kinalalagyan at subukang muli.',
-       'config-sqlite-dir-unwritable' => 'Hindi nagawang magsulat sa direktoryong "$1".
-Baguhin ang mga kapahintulutan nito upang makapagsulat dito ang tagapaghain ng sapot, at subukang muli.',
-       'config-sqlite-connection-error' => '$1.
-
-Surrin ang direktoryo ng dato at pangalan ng kalipunan ng datong nasa ibaba at subukan uli.',
-       'config-sqlite-readonly' => 'Ang talaksang <code>$1</code> ay hindi maisusulat.',
-       'config-sqlite-cant-create-db' => 'Hindi malikha ang talaksang <code>$1</code> ng kalipunan ng dato.',
-       'config-sqlite-fts3-downgrade' => 'Nawawala ang suportang FTS3 ng PHP, ibinababa ang uri ng mga talahanayan',
-       'config-can-upgrade' => "Mayroong mga talahanayan ng MediaWiki sa loob ng kalipunan ng datong ito.
-Upang maitaas ang uri ng mga ito upang maging MediaWiki na $1, pindutin ang '''Magpatuloy'''.",
-       'config-upgrade-done' => "Buo na ang pagtataas ng uri.
-
-Maaari mo na ngayong [$1 gamitin ang iyong wiki].
-
-Kung nais mong muling likhain ang iyong talaksang <code>LocalSettings.php</code>, lagitikin ang pindutang nasa ibaba.
-'''Hindi minumungkahi''' ito maliban na lamang kung nagkakaroon ka ng mga suliranin sa piling ng wiki mo.",
-       'config-upgrade-done-no-regenerate' => 'Buo na ang pagsasapanahon.
-
-Maaari ka na ngayong [$1 magsimula sa paggamit ng wiki mo].',
-       'config-regenerate' => 'Muling likhain ang LocalSettings.php →',
-       'config-show-table-status' => 'Nabigo ang pagtatanong na IPAKITA ANG KALAGAYAN NG TALAHANAYAN!', # Fuzzy
-       'config-unknown-collation' => "'''Babala:''' Ang kalipunan ng dato ay gumagagamit ng hindi nakikilalang pag-iipon.",
-       'config-db-web-account' => 'Akawnt ng kalipunan ng dato para sa pagpunta sa web',
-       'config-db-web-help' => 'Piliin ang pangalan ng tagagamit at hudyat na gagamitin ng tagapaghain ng web upang umugnay sa tagapaghain ng kalipunan ng dato, habang nasa pangkaraniwang pagtakbo ng wiki.',
-       'config-db-web-account-same' => 'Gamitin ang gayun din akawnt katulad ng sa pagluluklok',
-       'config-db-web-create' => 'Likhain ang akawnt kung hindi pa ito umiiral',
-       'config-db-web-no-create-privs' => 'Ang tinukoy mong akawnt na iluluklok ay walang sapat na mga pribilehiyo upang makalikha ng isang akawnt.
-Ang akawnt na tutukuyin mo rito ay umiiral na dapat.',
-       'config-mysql-engine' => 'Makinang imbakan:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Babala''': Pinili mo ang MyISAM bilang makinang imbakan para sa MySQL, na hindi iminumungkahi para gamitin sa MediaWiki, sapagkat:
-* bahagya lamang itong sumusuporta ng pagkakasundu-sundo dahil sa pagkakandado ng talahanayan
-* mas malaki ang pagkakataon na kapitan ng sira kaysa sa ibang mga makina
-* ang himpilang kodigo ng MediaWiki ay hindi palaging humahawak ng MyISAM ayon sa nararapat
-
-Kung ang iyong nakaluklok na MySQL ay sumusuporta ng InnoDB, higit na iminumungkahi na piliin mo iyon sa halip.
-Kung ang iyong nakaluklok na MySQL ay hindi sumusuporta ng InnoDB, marahil ay panahon na para sa isang pagtataas ng uri.",
-       'config-mysql-engine-help' => "Ang '''InnoDB''' ay ang halos palaging pinaka mainam na mapipili, dahil mayroon itong mabuting suporta ng pagkakasundu-sundo.
-
-Maaaring mas mabilis ang '''MyISAM''' sa mga pagluluklok na pang-isahang tagagamit o mababasa lamang.
-May gawi ang mga kalipunan ng dato ng MyISAM na masira nang mas madalas kaysa sa mga kalipunan ng dato ng InnoDB.",
-       'config-mysql-charset' => 'Pangkat ng panitik ng kalipunan ng dato:',
-       'config-mysql-binary' => 'Binaryo',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "Sa '''gawi na binaryo''', iniimbak ng MediaWiki ang tekstong UTF-8 sa kalipunan ng dato sa loob ng mga hanay na binaryo.
-Mas kapaki-pakinabang ito kaysa sa gawi na UTF-8 ng MySQL, at nagpapahintulot sa iyo upang magamit ang buong kasaklawan ng mga panitik ng Unikodigo.
-
-Sa ''gawi na UTF-8''', malalaman ng MySQL kung sa anong pangkat ng panitik nakapaloob ang iyong dato, at angkop na makakapagharap at makapapagpalit nito, subalit hindi ka nito papayagan na mag-imbak ng mga panitik na nasa itaas ng [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] o Saligang Tapyas na Pangmaramihang Wika.",
-       'config-site-name' => 'Pangalan ng wiki:',
-       'config-site-name-help' => "Lilitaw ito sa bareta ng pamagat ng pantingin-tingin at sa samu't saring ibang mga lugar.",
-       'config-site-name-blank' => 'Magpasok ng isang pangalan ng sityo.',
-       'config-project-namespace' => 'Puwang na pampangalan ng proyekto:',
-       'config-ns-generic' => 'Proyekto',
-       'config-ns-site-name' => 'Katulad ng sa pangalan ng wiki: $1',
-       'config-ns-other' => 'Iba pa (tukuyin)',
-       'config-ns-other-default' => 'Wiki Ko',
-       'config-project-namespace-help' => 'Bilang pagsunod sa halimbawa ng Wikipedia, maraming mga wiki ang nagpapanatili ng kanilang mga pahina ng patakaran na nakahiwalay magmula sa kanilang mga pahina ng nilalaman, na nasa loob ng isang "\'\'\'puwang na pampangalan ng proyekto\'\'\'".
-Ang lahat ng mga pamagat ng pahina na nasa loob ng puwang ng pangalang ito ay nagsisimula na mayroong isang partikular na unlapi, na maaari mong tukuyin dito.
-Sa nakaugalian, ang unlaping ito ay hinango mula sa pangalan ng wiki, subalit hindi ito maaaring maglaman ng mga panitik ng palabantasan na katulad ng "#" o ":".',
-       'config-ns-invalid' => 'Ang tinukoy na puwang ng pangalan na "<nowiki>$1</nowiki>" ay hindi katanggap-tanggap.
-Tumukoy ng isang ibang puwang ng pangalan ng proyekto.',
-       'config-ns-conflict' => 'Ang tinukoy na puwang ng pangalan na "<nowiki>$1</nowiki>" ay sumasalungat sa isang likas na nakatakdang puwang ng pangalan ng MediaWiki.
-Tumukoy ng isang ibang puwang ng pangalan ng proyekto.',
-       'config-admin-box' => 'Akawnt ng tagapangasiwa',
-       'config-admin-name' => 'Pangalan mo:',
-       'config-admin-password' => 'Hudyat:',
-       'config-admin-password-confirm' => 'Hudyat uli:',
-       'config-admin-help' => 'Ipasok dito ang mas ninanais mong pangalan ng tagagamit, bilang halimbawa na ang "Joe Bloggs".
-Ito ang pangalang gagamitin mo upang lumagdang papasok sa wiki.',
-       'config-admin-name-blank' => 'Magpasok ng isang pangalan ng tagagamit na tagapangasiwa.',
-       'config-admin-name-invalid' => 'Ang tinukoy na pangalan ng tagagamit na "<nowiki>$1</nowiki>" ay hindi tanggap.
-Tumukoy ng ibang pangalan ng tagagamit.',
-       'config-admin-password-blank' => 'Magpasok ng isang hudyat para sa akawnt ng tagapangasiwa.',
-       'config-admin-password-same' => 'Ang hudyat ay hindi dapat na katulad ng pangalan ng tagagamit.',
-       'config-admin-password-mismatch' => 'Hindi magkatugma ang ipinasok mong dalawang mga hudyat.',
-       'config-admin-email' => 'Tirahan ng e-liham:',
-       'config-admin-email-help' => 'Magpasok dito ng isang tirahan ng e-liham upang mapahintulutan kang makatanggap ng e-liham mula sa iba pang mga tagagamit sa ibabaw ng wiki, itakdang muli ang hudyat mo, at mapabatiran ng mga pagbabago sa mga pahinang nasa ibabaw ng iyong tala ng mga binabantayan. Maiiwanan mo na walang laman ang hanay na ito.',
-       'config-admin-error-user' => 'Panloob na kamalian kapag nililikha ang isang tagapangasiwa na may pangalang "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'Panloob na kamalian kapag nagtatakda ng isang hudyat na para sa tagapangasiwang "<nowiki>$1</nowiki>": <pre>$2</pre>',
-       'config-admin-error-bademail' => 'Nagpasok ka ng isang hindi katanggap-tanggap na tirahan ng e-liham.',
-       'config-subscribe' => 'Tumanggap mula sa [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce talaan ng mga pinadadalhan ng mga nilalabas na mga pabatid].',
-       'config-subscribe-help' => 'Isang itong tala ng pagliliham na mababa ang dami na ginagamit para sa pagpapakawala ng mga pahayag, kabilang na ang mahahalagang mga pahayag na pangkatiwasayan. Dapat kang magpasipi nito at isapanahon ang iyong nakaluklok na MediaWiki kapag lumalabas ang bagong mga bersiyon.',
-       'config-subscribe-noemail' => 'Sinubukan mong magpasipi sa tala ng nililihaman ng pagpapakawala ng mga pahayag na hindi nagbibigay ng isang tirahan ng -eliham. Paki magbigay ng isang tirahan ng e-liham kung nais mong magpasipi sa listahan ng pagliliham.',
-       'config-almost-done' => 'Halos tapos ka na!
-Maaari mo ngayong laktawan ang natitira pang pag-aayos at iluklok na ang wiki ngayon.',
-       'config-optional-continue' => 'Magtanong sa akin ng marami pang mga tanong.',
-       'config-optional-skip' => 'Naiinip na ako, basta iluklok na lang ang wiki.',
-       'config-profile' => 'Balangkas ng mga karapatan ng tagagamit:',
-       'config-profile-wiki' => 'Tradisyonal na wiki', # Fuzzy
-       'config-profile-no-anon' => 'Kailangan ang paglikha ng akawnt',
-       'config-profile-fishbowl' => 'Pinahintulutang mga patnugot lamang',
-       'config-profile-private' => 'Pribadong wiki',
-       'config-profile-help' => "Pinaka mahusay ang pagtakbo ng mga Wiki kapag pinapahintulutan mo ang pinaka maraming mga tao na makapamatnugot ng mga ito hanggang sa maaari.
-Sa loob ng MediaWiki, maginhawang masusuring muli ang kamakailang mga pagbabago, at mapanauli sa dati ang anumang nasira na nagawa ng isang walang muwang o may masamang hangarin na mga tagagamit.
-
-Subalit, marami ang nakatagpo na nagagamit ang MediaWiki sa loob ng malawak na sari-saring mga gampanin, at kung minsan ay hindi madaling makumbinsi ang lahat ng mga tao hinggil sa kapakinabangan ng kaparaanan ng wiki.
-Kung kaya't nasa iyo ang pagpili.
-
-Ang isang '''{{int:config-profile-wiki}}''' ay nagpapahintulot sa sinuman upang makapagbago, na hindi kailangan ang paglagdang papasok.
-Ang isang wiki na mayroong '''{{int:config-profile-no-anon}}''' ay nagbibigay ng karagdagang pananagutan, subalit maaaring pumigil sa nagkataon lamang na mga tagapag-ambag.
-
-Ang tagpo na '''{{int:config-profile-fishbowl}}''' ay nagpapahintulot lamang sa pinayagang mga tagagamit na makatingin ng mga pahina, na kapiling ang pangkat na pinayagang  makapamatnugot.
-Ang isang '''{{int:config-profile-private}}''' ay nagpapahintulot lamang sa pinayagang mga tagagamit na makatingin ng mga pahina, na kapiling ang pangkat na pinayagang makapamatnugot.
-
-Ang mas masasalimuot na mga kaayusan ng mga karapatan ng tagagamit ay makukuha pagkaraan ng pagluluklok, tingnan ang [//www.mediawiki.org/wiki/Manual:User_rights may kaugnayang kinamay na lahok].", # Fuzzy
-       'config-license' => 'Karapatang-ari at lisensiya:',
-       'config-license-none' => 'Walang talababa ng lisensiya',
-       'config-license-cc-by-sa' => 'Malikhaing Pangkaraniwang Pagtukoy Pamamahaging Magkatulad',
-       'config-license-cc-by' => 'Atribusyon ng Creative Commons',
-       'config-license-cc-by-nc-sa' => 'Malikhaing Pangkaraniwang Pagtukoy Hindi-Pangkalakal Pamamahaging Magkatulad',
-       'config-license-cc-0' => 'Sero na Creative Commons (Nasasakop ng Madla)',
-       'config-license-gfdl' => 'Lisensiyang 1.3 ng Malayang Dokumentasyon ng GNU o mas lalong huli',
-       'config-license-pd' => 'Nasasakupan ng Madla',
-       'config-license-cc-choose' => 'Pumili ng isang pasadyang Lisensiya ng Malikhaing mga Pangkaraniwan',
-       'config-license-help' => "Maraming mga pangmadlang wiki ang naglalagay ng lahat ng mga ambag sa ilalim ng [http://freedomdefined.org/Definition lisensiyang malaya]. 
-Nakakatulong ito sa paglikha ng isang diwa ng pagmamay-ari ng pamayanan at nakapanghihikayat ng ambag na pangmahabang panahon.
-Sa pangkalahatan, hindi kailangan ang isang wiking pribado o pangsamahan.
-
-Kung nais mong magamit ang teksto magmula sa Wikipedia, at nais mong makatanggap ang Wikipedia ng tekstong kinopya magmula sa wiki mo, dapat mong piliin ang '''Creative Commons Attribution Share Alike''' (Pagbanggit na Pinagsasaluhang Magkatulad ng Malikhaing Pangkaraniwan).
-
-Dating ginamit ng Wikipedia ang Lisensiya ng Kasulatang Malaya ng GNU (GNU Free Documentation License o GFDL).
-Isang katanggap-tanggap na lisensiya ang GFDL, subalit mahirap itong maunawaan.
-Mahirap din ang paggamit na muli ng nilalaman na nasa ilalim ng GFDL.",
-       'config-email-settings' => 'Mga katakdaan ng e-liham',
-       'config-enable-email' => 'Paganahin ang palabas na e-liham',
-       'config-enable-email-help' => 'Kung nais mong gumana ang e-liham, ang mga katakdaan ng liham ng [http://www.php.net/manual/en/mail.configuration.php PHP] ay kailangang maging wasto ang pagkakaayos.
-Kung ayaw mo nang anumang mga katampukan ng e-liham, maaari mong huwag paganahin ang mga ito rito.',
-       'config-email-user' => 'Paganahin ang tagagamit-sa-tagagamit na e-liham',
-       'config-email-user-help' => 'Payagan ang lahat ng mga tagagamit na magpadala ng e-liham sa bawat isa kapag pinagana nila ito sa kanilang mga nais.',
-       'config-email-usertalk' => 'Paganahin ang pabatid na pampahina ng usapan ng tagagamit',
-       'config-email-usertalk-help' => 'Payagan ang mga tagagamit na tumanggap ng mga pabatid sa mga pagbabago ng pahina ng usapan ng tagagamit, kapag pinagana nila ito sa kanilang mga nais.',
-       'config-email-watchlist' => 'Paganahin ang pabatid ng talaan ng bantayan',
-       'config-email-watchlist-help' => 'Payagan ang mga tagagamit na tumanggap ng mga pabatid tungkol sa kanilang binabantayang mga pahina kapag pinagana nila ito sa kanilang mga nais.',
-       'config-email-auth' => 'Paganahin ang pagpapatunay ng e-liham',
-       'config-email-auth-help' => "Kapag pinagagana ang mapipiling ito, dapat tiyakin ng mga tagagamit ang kanilang tirahan ng e-liham na ginagamit ang isang kawing na ipinadala sa kanila tuwing itinatakda o binabago nila ito.
-Tanging napatunayang mga tirahan ng e-liham lamang ang makakatanggap ng mga e-liham magmula sa ibang mga tagagamit o makakapagbago ng mga e-liham ng pagpapabatid.
-'''Iminumungkahi''' ang mapipiling katakdaan na ito para sa mga wiking pangmadla dahil sa maaaring mangyaring pagmamalabis ng mga katampukan ng e-liham.",
-       'config-email-sender' => 'Pabalik na tirahan ng e-liham:',
-       'config-email-sender-help' => 'Ipasok ang tirahan ng e-liham na gagamitin bilang tirahang pagsasaulian ng e-liham na papalabas.
-Dito ang kung saan ipapadala ang mga pagtalbog.
-Maraming mga tagapaghain ng liham ang nangangailangan ng kahit na bahagi lamang ng pangalan ng nasasakupan upang maging katanggap-tanggap.',
-       'config-upload-settings' => 'Mga pagkakarga ng mga larawan at talaksan',
-       'config-upload-enable' => 'Paganahin ang pagkakarga ng talaksan',
-       'config-upload-help' => 'Ang paitaas na mga pagkakarga ng mga talaksan ay maaaring makapaglantad ng iyong tagapaghain sa mga panganib na pangkatiwasayan.
-Para sa mas marami pang kabatiran, basahin ang [//www.mediawiki.org/wiki/Manual:Security seksiyon ng katiwasayan] sa loob ng gabay.
-
-Upang mapagana ang paitaas na mga pagkakarga ng talaksan, baguhin ang gawi roon sa subdirektoryo ng <code>mga imahe</code> sa ilalim ng ugat na direktoryo ng MediaWiki upang ang tagapaghain ng kasaputan ay makapagsulat dito.
-Pagkaraan ay paganahin ang pipiliing ito.',
-       'config-upload-deleted' => 'Direktoryo para sa binurang mga talaksan:',
-       'config-upload-deleted-help' => 'Pumili ng isang direktoryong pagsusupnayan ng naburang mga talaksan.
-Ideyal na dapat itong  hindi mapupuntahan mula sa web.',
-       'config-logo' => 'URL ng logo:',
-       'config-logo-help' => 'Ang likas na nakatakdang pabalat ng MediaWiki ay nagsasama ng puwang para sa isang logong 135x160 ang piksel na nasa itaas ng menu ng panggilid na bareta.
-Magkargang papaitaas ng isang imahe na mayroong naaangkop na sukat, at ipasok dito ang URL.
-
-Kung ayaw mo ng isang logo, iwanang walang laman ang kahong ito.', # Fuzzy
-       'config-instantcommons' => 'Paganahin ang Mga Pangkaraniwang Biglaan',
-       'config-instantcommons-help' => 'Ang [//www.mediawiki.org/wiki/InstantCommons Instant Commons] ay isang tampok na nagpapahintulot sa mga wiki upang gumamit ng mga imahe, mga tunog at iba pang mga midyang matatagpuan sa pook ng [//commons.wikimedia.org/ Wikimedia Commons].
-Upang magawa ito, nangangailangan ang MediaWiki ng pagka nakakapunta sa Internet.
-
-Para sa mas marami pang kabatiran hinggil sa tampok na ito, kabilang na ang mga tagubilin sa kung paano ito itakda para sa mga wiki na bukod pa kaysa sa Wikimedia Commons, sumangguni sa [//mediawiki.org/wiki/Manual:$wgForeignFileRepos gabay].',
-       'config-cc-error' => 'Hindi nagbigay ng resulta ang pampili ng lisensiya ng Malikhaing Pangkaraniwan.
-Ipasok na kinakamay ang pangalan ng lisensiya.',
-       'config-cc-again' => 'Pumili uli...',
-       'config-cc-not-chosen' => 'Piliin kung anong lisensiya ng Malikhaing mga Pangkaraniwan ang nais mo at pindutin ang "magpatuloy".',
-       'config-advanced-settings' => 'Mas masulong na pagkakaayos',
-       'config-cache-options' => 'Mga katakdaan para sa pagtatago ng bagay:',
-       'config-cache-help' => 'Ang pagtatago ng bagay ay ginagamit upang mapainam ang tulin ng MediaWiki sa pamamagitan ng pagtatago ng madalas gamiting dato.
-Ang mga pook na bahagya hanggang malalaki ang sukat ay labis na hinihikayat na paganahin ito, at ang mga pook na maliliit ay makakakita rin ng mga kapakinabangan.',
-       'config-cache-none' => 'Walang pagtatago (tinanggal ang katungkulan, subalit maaaring maapektuhan ang tulin sa mas malalaking mga pook ng wiki)',
-       'config-cache-accel' => 'Pagtatago ng bagay ng PHP (APC, XCache o WinCache)',
-       'config-cache-memcached' => 'Gamitin ang Pagtatago sa Alaala (Memcached) (nangangailangan ng karagdagang kaayusan ng pagkakahanda at pagsasaayos)',
-       'config-memcached-servers' => 'Mga tagapaghaing itinago sa alaala:',
-       'config-memcached-help' => 'Listahan ng mga tirahan ng IP na gagamitin para sa Memcached o Itinagong Alaala.
-Dapat na tukuyin na isa sa bawat guhit at tukuyin ang daungang gagamitin. Bilang halimbawa:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => 'Pinili mo ang Memcached bilang uri mo ng taguan ngunit hindi tumukoy ng anumang mga tagapaghain.',
-       'config-memcache-badip' => 'Nagpasok ka ng isang hindi tanggap na tirahan ng IP para sa Memcached: $1.',
-       'config-memcache-noport' => 'Hindi ka tumukoy ng isang daungan na gagamitin para sa tagapaghain ng Memcached: $1.
-Kung hindi mo alam ang daungan, ang likas na nakatakda ay 11211.',
-       'config-memcache-badport' => 'Ang bilang ng daungan ng Memcached ay dapat na nasa pagitan ng $1 at $2.',
-       'config-extensions' => 'Mga dugtong',
-       'config-extensions-help' => 'Ang mga dugtong na nakalista sa ibabaw ay napansin sa loob ng iyong direktoryo ng <code>./extensions</code>.
-
-Maaaring mangailangan ang mga ito ng karagdagang kaayusan, subalit mapapagana mo ngayon ang mga ito',
-       'config-install-alreadydone' => "'''Babala:''' Tila nailuklok mo na ang MediaWiki at tinatangka mong iluklok ito ulit.
-Paki magpatuloy sa susunod na pahina.",
-       'config-install-begin' => 'Sa pamamagitan ng pagpindot sa "{{int:config-continue}}", sisimulan mo ang pagluluklok ng MediaWiki.
-Kung nais mo paring gumawa ng mga pagbabago, paki pindutin ang bumalik.', # Fuzzy
-       'config-install-step-done' => 'nagawa na',
-       'config-install-step-failed' => 'nabigo',
-       'config-install-extensions' => 'Isinasama ang mga karugtong',
-       'config-install-database' => 'Inihahanda ang kalipunan ng dato',
-       'config-install-schema' => 'Nililikha ang panukala',
-       'config-install-pg-schema-not-exist' => 'Hindi umiiral ang panukala ng PostgreSQL.',
-       'config-install-pg-schema-failed' => 'Nabigo ang paglikha ng mga talahanayan.
-Tiyakin na ang tagagamit na "$1" ay maaaring makasulat sa balangkas na "$2".',
-       'config-install-pg-commit' => 'Isinasagawa ang mga pagbabago',
-       'config-install-pg-plpgsql' => 'Sumusuri ng wikang PL/pgSQL',
-       'config-pg-no-plpgsql' => 'Kailangan mong magtalaga ng wikang PL/pgSQL sa loob ng kalipunan ng datong $1',
-       'config-pg-no-create-privs' => 'Ang tinukoy mong akawnt para sa pagtatalaga ay walang sapat na mga pribilehiyo upang makalikha ng isang akawnt.',
-       'config-pg-not-in-role' => 'Umiiral na ang akawnt na tinukoy mo para sa tagagamit ng sangkasaputan.
-Ang tinukoy mong akawnt para sa pagluluklok ay hindi isang tagagamit na super at hindi isang kasapi sa gampanin ng tagagamit ng sangkasaputan, kung kaya\'t hindi nito nagawang makalikha ng mga bagay na pag-aari ng tagagamit ng sangkasaputan.
-
-Sa kasalukuyan, nangangailangan ang MediaWiki na ang mga talahanayan ay maging pag-aari ng tagagamit ng sangkasaputan. Paki tumukoy ng isa pang pangalan ng akawnt na pangsangkasaputan, o pindutin ang "bumalik" at tumukoy ng isang tagagamit na may kaangkupang pribilehiyo ng pagluluklok.',
-       'config-install-user' => 'Nililikha ang tagagamit ng kalipunan ng dato',
-       'config-install-user-alreadyexists' => 'Umiiral na ang tagagamit na "$1"',
-       'config-install-user-create-failed' => 'Nabigo ang paglikha ng tagagamit na "$1": $2',
-       'config-install-user-grant-failed' => 'Nabigo ang pagbibigay ng pahintulot sa tagagamit na "$1": $2',
-       'config-install-user-missing' => 'Hindi umiiral ang tinukoy na tagagamit na si "$1".',
-       'config-install-user-missing-create' => 'Hindi umiiral ang tinukoy na tagagamit na si "$1".
-Paki lagitikin ang nasa ibabang kahong natsetsekan na "likhain ang akawnt" kung nais mong likhain ito.',
-       'config-install-tables' => 'Nililikha ang mga talahanayan',
-       'config-install-tables-exist' => "'''Babala''': Tila umiiral na ang mga talahanayan ng MediaWiki.
-Nilalaktawan ang paglikha.",
-       'config-install-tables-failed' => "'''Kamalian''': Nabigo ang paglikha ng talahanayan na may sumusunod na kamalian: $1",
-       'config-install-interwiki' => 'Nilalagyan ng laman ang likas na nakatakdang talahanayan ng interwiki',
-       'config-install-interwiki-list' => 'Hindi matagpuan ang talaksang <code>interwiki.list</code>.',
-       'config-install-interwiki-exists' => "'''Babala''': Tila may mga laman na ang talahanayan ng interwiki.
-Nilalaktawan ang likas na nakatakdang talaan.",
-       'config-install-stats' => 'Sinisimulan ang estadistika',
-       'config-install-keys' => 'Ginagawa ang lihim na mga susi',
-       'config-insecure-keys' => "'''Babala:''' Nalikha ang {{PLURAL:$2|A secure key|ligtas na mga susi}} ($1) habang ang pagluluklok {{PLURAL:$2|ay|ay}} hindi pa lubos na ligtas. Isaalang-alang ang kinakamay na pagbago {{PLURAL:$2|nito|ng mga ito}}.",
-       'config-install-sysop' => 'Nililikha ang akawnt ng tagagamit na tagapangasiwa',
-       'config-install-subscribe-fail' => 'Hindi nagawang magpasipi mula sa mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'Hindi nakalagak ang cURL at hindi makukuha ang allow_url_fopen',
-       'config-install-mainpage' => 'Nililikha ang pangunahing pahina na may likas na nakatakdang nilalaman',
-       'config-install-extension-tables' => 'Nililikha ang mga talahanayan para sa pinagaganang mga dugtong',
-       'config-install-mainpage-failed' => 'Hindi maisingit ang pangunahing pahina: $1',
-       'config-install-done' => "'''Maligayang bati!'''
-Matagumpay mong nailuklok ang MediaWiki.
-
-Ang tagapagluklok ay nakagawa ng isang talaksan ng <code>LocalSettings.php</code>.
-Naglalaman ito ng lahat ng iyong mga pagsasaayos.
-
-Kailangan mo itong ikargang paibaba at ilagay ito sa lipon ng iyong pagluluklok ng wiki (katulad ng direktoryo ng index.php).  Ang pagkakargang paibaba ay dapat na kusang magsimula.
-
-Kung ang pagkakargang paibaba ay hindi inialok, o kung hindi mo ito itinuloy, maaari mong muling simulan ang pagkakargang paibaba sa pamamagitan ng pagpindot sa kawing na nasa ibaba:
-
-$3
-
-'''Paunawa''': Kapag hindi mo ito ginawa ngayon, ang nagawang talaksang ito ng pagkakaayos ay hindi mo na makukuha mamaya kapag lumabas ka mula sa pagluluklok na hindi ikinakarga itong paibaba.
-
-Kapag nagawa na iyan, maaari ka nang '''[$2 pumasok sa wiki mo]'''.",
-       'config-download-localsettings' => 'Ikargang paibaba ang <code>LocalSettings.php</code>',
-       'config-help' => 'saklolo',
-       'config-nofile' => 'Hindi matagpuan ang talaksang "$1". Binura na ba ito?',
-       'mainpagetext' => "'''Matagumpay na ininstala ang MediaWiki.'''",
-       'mainpagedocfooter' => "Silipin ang [//meta.wikimedia.org/wiki/Help:Contents Patnubay sa Tagagamit] (''\"User's Guide\"'') para sa kaalaman sa paggamit ng wiking ''software''.
-
-== Pagsisimula ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Tala ng mga nakatakdang kumpigurasyon]
-* [//www.mediawiki.org/wiki/Manual:FAQ Mga malimit itanong sa MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Tala ng mga pinadadalhan ng liham ng MediaWiki]", # Fuzzy
-);
-
-/** толышә зывон (толышә зывон)
- * @author Erdemaslancan
- */
-$messages['tly'] = array(
-       'config-page-options' => 'Кукон',
-);
-
-/** Turkish (Türkçe)
- */
-$messages['tr'] = array(
-       'mainpagetext' => "'''MediaWiki başarı ile kuruldu.'''",
-       'mainpagedocfooter' => 'Viki yazılımının kullanımı hakkında bilgi almak için [//meta.wikimedia.org/wiki/Help:Contents kullanıcı rehberine] bakınız.
-
-== Yeni Başlayanlar ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Yapılandırma ayarlarının listesi]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki SSS]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-posta listesi]', # Fuzzy
-);
-
-/** Tatar (Cyrillic script) (татарча)
- * @author KhayR
- */
-$messages['tt-cyrl'] = array(
-       'mainpagetext' => '«MediaWiki» уңышлы куелды.',
-       'mainpagedocfooter' => "Бу вики турында мәгълүматны [//meta.wikimedia.org/wiki/Ярдәм:Эчтәлек биредә] табып була.
-
-== Кайбер файдалы ресурслар ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Көйләнмәләр исемлеге (инг.)];
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki турында еш бирелгән сораулар һәм җаваплар (инг.)];
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki'ның яңа версияләре турында хәбәрләр яздырып алу].", # Fuzzy
-);
-
-/** Tatar (Latin script) (tatarça)
- * @author Don Alessandro
- */
-$messages['tt-latn'] = array(
-       'mainpagetext' => '«MediaWiki» uñışlı quyıldı.',
-       'mainpagedocfooter' => "Bu wiki turında mäğlümatnı [//meta.wikimedia.org/wiki/Yärdäm:Eçtälek biredä] tabıp bula.
-
-== Qayber faydalı resurslar ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Köylänmälär isemlege (ing.)];
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki turında yış birelgän sorawlar häm cawaplar (ing.)];
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki'nıñ yaña versiäläre turında xäbärlär yazdırıp alu].", # Fuzzy
-);
-
-/** Udmurt (удмурт)
- * @author Andrewboltachev
- */
-$messages['udm'] = array(
-       'mainpagetext' => "'''MediaWiki движок азинлыко пуктэмын.'''",
-);
-
-/** Uyghur (Arabic script) (ئۇيغۇرچە)
- * @author Sahran
- */
-$messages['ug-arab'] = array(
-       'mainpagetext' => "'''MediaWiki مۇۋەپپەقىيەتلىك قاچىلاندى.'''",
-       'mainpagedocfooter' => '[//meta.wikimedia.org/wiki/Help:Contents ئىشلەتكۈچى قوللانمىسى] نى زىيارەت قىلىپ wiki يۇمشاق دېتالىنى ئىشلىتىش ئۇچۇرىغا ئېرىشىڭ.
-
-== دەسلەپكى ساۋات ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings سەپلىمە تەڭشەك تىزىملىكى]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki كۆپ ئۇچرايدىغان مەسىلىلەرگە جاۋاب]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki تارقاتقان ئېلخەت تىزىملىكى]', # Fuzzy
-);
-
-/** Ukrainian (українська)
- * @author AS
- * @author Ahonc
- * @author Alex Khimich
- * @author Andriykopanytsia
- * @author Base
- * @author Diemon.ukr
- * @author Ата
- * @author Тест
- * @author 아라
- */
-$messages['uk'] = array(
-       'config-desc' => 'Інсталятор MediaWiki',
-       'config-title' => 'Встановлення MediaWiki $1',
-       'config-information' => 'Інформація',
-       'config-localsettings-upgrade' => "'''Увага''': було виявлено файл <code>LocalSettings.php</code>.
-Ваше програмне забезпечення може бути оновлено.
-Будь-ласка, перемістіть файл <code>LocalSettings.php</code> в іншу безпечну директорію, а потім знову запустіть програму установки.",
-       'config-localsettings-cli-upgrade' => 'Виявлено файл <code>LocalSettings.php</code>.
-Щоб оновити наявну установку, запустіть <code>update.php</code>',
-       'config-localsettings-key' => 'Ключ оновлення:',
-       'config-localsettings-badkey' => 'Ви вказали неправильний ключ.',
-       'config-upgrade-key-missing' => 'Виявлено наявну установку MediaWiki.
-Для оновлення цієї установки, будь ласка, вставте такий рядок в кінець вашого <code>LocalSettings.php</code>:
-$1',
-       'config-localsettings-incomplete' => 'Існуючий файл <code>LocalSettings.php</code> виявився неповним.
-Не вказано змінну $1.
-Будь ласка, змініть <code>LocalSettings.php</code> так, щоб цю змінну було задано, і натисніть "{{int:Config-continue}}".',
-       'config-localsettings-connection-error' => 'Сталася помилка при підключення до бази даних з допомогою налаштувань на сторінці <code>LocalSettings.php</code> чи <code>AdminSettings.php</code>. Будь ласка, виплавте ці налаштування і спробуйте знову.
-
-$1',
-       'config-session-error' => 'Помилка початку сесії: $1',
-       'config-session-expired' => 'Час Вашої сесії минув.
-Задана тривалість сесії — $1.
-Ви можете збільшити її, змінивши <code>session.gc_maxlifetime</code> у php.ini.
-Перезапустіть процес встановлення.',
-       'config-no-session' => 'Дані сесії було втрачено!
-Перевірте Ваш php.ini і переконайтесь, що <code>session.save_path</code> встановлено у відповідну папку.',
-       'config-your-language' => 'Ваша мова:',
-       'config-your-language-help' => 'Оберіть мову для використання в процесі установки.',
-       'config-wiki-language' => 'Мова для вікі:',
-       'config-wiki-language-help' => 'Виберіть мову, якою буде відображатися вікі.',
-       'config-back' => '← Назад',
-       'config-continue' => 'Далі →',
-       'config-page-language' => 'Мова',
-       'config-page-welcome' => 'Ласкаво просимо на MediaWiki!',
-       'config-page-dbconnect' => 'Підключення до бази даних',
-       'config-page-upgrade' => 'Оновлення існуючої установки',
-       'config-page-dbsettings' => 'Налаштування бази даних',
-       'config-page-name' => 'Назва',
-       'config-page-options' => 'Параметри',
-       'config-page-install' => 'Установка',
-       'config-page-complete' => 'Готово!',
-       'config-page-restart' => 'Перезапустити установку',
-       'config-page-readme' => 'Прочитай мене',
-       'config-page-releasenotes' => 'Інформація про версію',
-       'config-page-copying' => 'Копіювання',
-       'config-page-upgradedoc' => 'Оновлення',
-       'config-page-existingwiki' => 'Існуюча вікі',
-       'config-help-restart' => 'Ви бажаєте видалити всі введені та збережені вами дані і запустити процес установки спочатку?',
-       'config-restart' => 'Так, перезапустити установку',
-       'config-welcome' => '=== Перевірка оточення ===
-Будуть проведені базові перевірки, щоб виявити, чи можлива установка MediaWiki у даній системі.
-Не забудьте включити цю інформацію, якщо ви звернетеся по підтримку, як завершити установку.',
-       'config-copyright' => "=== Авторське право і умови ===
-
-$1
-
-Ця програма є вільним програмним забезпеченням; Ви можете розповсюджувати та/або змінювати її під ліцензією GNU General Public License, опублікованою Фондом вільного програмного забезпечення; версією 2 цієї ліцензії або будь-якою пізнішою на Ваш вибір.
-
-Ця програма поширюється з надією на те, що вона буде корисною, однак '''без жодних гарантій'''; навіть без неявної гарантії '''комерційної цінності''' або '''придатності для певних цілей'''.
-Див. GNU General Public License для детальної інформації.
-
-Ви повинні були отримати <doclink href=Copying>копію GNU General Public License</doclink> разом із цією програмою; якщо ж ні, зверніться до Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. або [http://www.gnu.org/copyleft/gpl.html ознайомтесь з нею онлайн].",
-       'config-sidebar' => '* [//www.mediawiki.org Сайт MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents Посібник користувача]
-* [//www.mediawiki.org/wiki/Manual:Contents Посібник адміністратора]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]
-----
-* <doclink href=Readme>Read me</doclink>
-* <doclink href=ReleaseNotes>Інформація про випуск</doclink>
-* <doclink href=Copying>Ліцензія</doclink>
-* <doclink href=UpgradeDoc>Оновлення</doclink>',
-       'config-env-good' => 'Перевірку середовища успішно завершено.
-Ви можете встановити MediaWiki.',
-       'config-env-bad' => 'Було проведено перевірку середовища. Ви не можете встановити MediaWiki.',
-       'config-env-php' => 'Встановлено версію PHP: $1.',
-       'config-env-php-toolow' => 'Встановлено PHP $1.
-Натомість MediaWiki вимагає PHP $2 і вище.',
-       'config-unicode-using-utf8' => 'Використовувати utf8_normalize.so Брайона Віббера для нормалізації Юнікоду.',
-       'config-unicode-using-intl' => 'Використовувати [http://pecl.php.net/intl міжнародне розширення PECL] для нормалізації Юнікоду.',
-       'config-unicode-pure-php-warning' => "'''Увага''': [http://pecl.php.net/intl міжнародне розширення PECL] не може провести нормалізацію Юнікоду.
-Якщо ваш сайт має високий трафік, вам варто почитати про [//www.mediawiki.org/wiki/Unicode_normalization_considerations нормалізацію Юнікоду].",
-       'config-unicode-update-warning' => "'''Увага''': Встановлена версія обгортки нормалізації Юнікоду використовує стару версію бібліотеки [http://site.icu-project.org/ проекту ICU].
-Ви маєте [//www.mediawiki.org/wiki/Unicode_normalization_considerations оновити версію], якщо плануєте повноцінно використовувати Юнікод.",
-       'config-no-db' => 'Не вдалося знайти відповідний драйвер бази даних! Вам необхідно встановити драйвер бази даних для PHP. Підтримуються такі типи баз даних: $1.
-
-Якщо ви користуєтесь віртуальним хостингом, попросіть вашого хостинг-провайдера інсталювати відповідний драйвер бази даних.
-Якщо ви скомпілювали PHP самостійно, переналаштуйте його з включенням клієнта бази даних, наприклад за допомогою <code>./configure --with-mysql</code>.
-Якщо установлено PHP з пакетів Debian або Ubuntu, тоді ви також повинні встановити php5-mysql модуль.',
-       'config-outdated-sqlite' => "'''Увага''': у Вас встановлена версія SQLite $1, а це нижче, ніж мінімально необхідна версія $2. SQLite буде недоступним.",
-       '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' => "'''Проблема: Опція PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] увімкнена!'''
-Ця опція призводить до непередбачуваного пошкодження даних.
-Ви не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
-       'config-magic-quotes-sybase' => "'''Проблема: Опція PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] увімкнена!'''
-Ця опція призводить до непередбачуваного пошкодження даних.
-Ви не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
-       'config-mbstring' => "'''Проблема: Опція PHP [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] увімкнена!'''
-Ця опція призводить до непередбачуваного пошкодження даних.
-Ви не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
-       'config-ze1' => "'''Проблема: Опція PHP [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] увімкнена!'''
-Ця опція призводить до непередбачуваного пошкодження даних.
-Ви не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
-       'config-safe-mode' => "'''Увага:''' Опція PHP [http://www.php.net/features.safe-mode «безпечний режим»] увімкнена.
-Це може спричинити проблеми, зокрема із завантаженням файлів та вставкою математичних формул.",
-       'config-xml-bad' => 'XML-модуть PHP відсутній.
-MediaWiki необхідні його функції, без цього модуля вона працювати не буде.
-Якщо Ви використовуєте Mandrake, встановіть php-xml пакет.',
-       'config-pcre' => 'Модуть підтримку PCRE не знайдено.
-Для роботи MediaWiki необхідна підтримка Perl-сумісних регулярних виразів.',
-       'config-pcre-no-utf8' => "'''Помилка''': PCRE-модуть PHP, вочевидь, було зібрано без підтримки PCRE_UTF8.
-MediaWiki вимагає підтримку UTF-8 для коректної роботи.",
-       'config-memory-raised' => "Обмеження пам'яті PHP (<code>memory_limit</code>) $1, піднято до $2.",
-       'config-memory-bad' => "'''Увага:''' Розмір пам'яті PHP (<code>memory_limit</code>) становить $1.
-Імовірно, це замало.
-Встановлення може не вдатись!",
-       'config-ctype' => "'''Помилка''': PHP має бути зібраним з підтримкою [http://www.php.net/manual/en/ctype.installation.php розширення Ctype].",
-       'config-json' => "'''Fatal:''' PHP був скомпільований без підтримки JSON.
-Вам потрібно встановити або розширення PHP JSON або розширення[http://pecl.php.net/package/jsonc PECL jsonc] перед встановлення Медіавікі.
-* Розширення PHP включено у Red Hat Enterprise Linux (CentOS) 5 та 6, хоча має бути доступним у  <code>/etc/php.ini</code> або <code>/etc/php.d/json.ini</code>.
-* Деякі дистрибутиви Лінукса, випущені після травня 2013, пропустили розширення PHP, натомість упакували розширення  PECL як <code>php5-json</code> або <code>php-pecl-jsonc</code>.",
-       '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-mod-security' => "'''Увага''': на Вашому веб-сервері увімкнено [http://modsecurity.org/ mod_security]. У разі неправильних налаштувать, він може викликати проблеми MediaWiki або іншого ПЗ, яке дозволяє користувачам надсилати довільний вміст.
-Зверніться до [http://modsecurity.org/documentation/ документації mod_security] або підтримки Вашого хостера, якщо під час роботи виникають незрозумілі помилки.",
-       'config-diff3-bad' => 'GNU diff3 не знайдено.',
-       'config-git' => 'Знайшов програму управління версіями Git: <code>$1</code>.',
-       'config-git-bad' => 'Програму управління версіями Git  не знайдено.',
-       'config-imagemagick' => 'Виявлено ImageMagick: <code>$1</code>.
-Буде ввімкнуто відображення мініатюр, якщо ви дозволите завантаження файлів.',
-       'config-gd' => 'Виявлено вбудовано графічну бібліотеку GD.
-Буде ввімкнуто відображення мініатюр, якщо ви дозволите завантаження файлів.',
-       'config-no-scaling' => 'Не вдалося виявити бібліотеку GD чи ImageMagick.
-Відображення мініатюр буде вимкнено.',
-       'config-no-uri' => "'''Помилка:''' Не вдалося визначити поточний URI.
-Встановлення перервано.",
-       '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> вразлива до виконання довільних скриптів.
-Хоча MediaWiki перевіряє усі завантажені файли на наявність загроз, наполегливо рекомендується [//www.mediawiki.org/wiki/Manual:Security#Upload_security закрити дану вразливість] перед тим, як дозволяти завантаження файлів.",
-       'config-no-cli-uploads-check' => "'''Увага:''' Ваша типова папка для завантажень (<code>$1</code>) не перевірялась на вразливість до виконання довільних скриптів під час встановлення CLI.",
-       'config-brokenlibxml' => 'У Вашій системі невдале поєднання версій PHP і libxml2, яке може спричинити пошкодження прихованих даних у MediaWiki та інших веб-застосунках.
-Оновіть PHP до версії 5.2.9 або пізнішої і libxml2 до 2.7.3 або пізнішої ([//bugs.php.net/bug.php?id=45996 відомості про помилку]).
-Встановлення перервано.',
-       'config-using531' => 'MediaWiki не можна використовувати разом з PHP $1 через помилку з параметрами-посиланнями <code>__call()</code>.
-Оновіть PHP до версії 5.3.2 і вище або відкотіть до PHP 5.3.0 щоб уникнути цієї проблеми.
-Встановлення скасовано.',
-       'config-suhosin-max-value-length' => 'Suhosin встановлено і обмежує параметра GET  <code>length</code> до $1 байта. Компонент MediaWiki ResourceLoader буде обходити це обмеження, однак це зменшить продуктивність. Якщо це можливо, Вам варто встановити значення <code>suhosin.get.max_value_length</code> як 1024 і більше у <code>php.ini</code> і встановити таке ж значення <code>$wgResourceLoaderMaxQueryLength</code> у LocalSettings.php .',
-       'config-db-type' => 'Тип бази даних:',
-       'config-db-host' => 'Хост бази даних:',
-       'config-db-host-help' => 'Якщо сервер бази даних знаходиться на іншому сервері, введіть тут ім\'я хосту і IP адресу.
-
-Якщо Ви використовуєте віртуальний хостинг, Ваш хостинг-провайдер має надати Вам правильне ім\'я хосту у його документації.
-
-Якщо у Вас сервер із Windows Ви використовуєте MySQL, параметр "localhost" може не працювати для імені сервера. Якщо не працює, використайте "127.0.0.1" як локальну IP-адресу.
-
-Якщо Ви використовуєте PostgreSQL, залиште це поле пустим, щоб під\'єднатись через сокет Unix.',
-       'config-db-host-oracle' => 'TNS бази даних:',
-       'config-db-host-oracle-help' => 'Введіть допустиме [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; файл tnsnames.ora має бути видимим для цієї інсталяції. <br />Якщо Ви використовуєте бібліотеки 10g чи новіші, можна також використовувати метод іменування [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
-       'config-db-wiki-settings' => 'Ідентифікувати цю вікі',
-       'config-db-name' => 'Назва бази даних:',
-       'config-db-name-help' => 'Виберіть назву, що ідентифікує Вашу вікі.
-Вона не повинна містити пробілів.
-
-Якщо Ви використовуєте віртуальний хостинг, Ваш хостинг-провайдер або надасть Вам конкретну назву бази даних, або дозволить створювати бази даних з допомогою панелі управління.',
-       'config-db-name-oracle' => 'Схема бази даних:',
-       'config-db-account-oracle-warn' => 'Є три підтримувані сценарії установки Oracle:
-
-Якщо Ви хочете створити обліковий запис бази даних у процесі встановлення, будь ласка, вкажіть обліковий запис ролі SYSDBA для установки і бажані повноваження для облікового запису з веб-доступом. В протилежному випадку Ви можете або створити обліковий запис з веб-доступом вручну і вказати тільки цей обліковий запис (якщо він має необхідні дозволи на створення об\'єктів-схем), або вказати два різні облікові записи, з яких в одного будуть права на створення, а в другого, обмеженого — права веб-доступу.
-
-Скрипт для створення облікового запису з необхідними повноваженнями можна знайти у папці "maintenance/oracle/" цієї інсталяції. Майте на увазі, що використання обмеженого облікового запису вимкне можливість використання технічного обслуговування з облікового запису за замовчуванням.',
-       'config-db-install-account' => 'Обліковий запис користувача для встановлення',
-       'config-db-username' => "Ім'я користувача бази даних:",
-       'config-db-password' => 'Пароль бази даних:',
-       'config-db-password-empty' => 'Будь ласка, введіть пароль для нового користувача бази даних: $1.
-Хоча можна створювати користувачів без паролів, це не є безпечним.',
-       'config-db-install-username' => "Введіть ім'я користувача, яке буде використано для підключення до бази даних під час процесу встановлення.
-Це не ім'я користувача облікового запису MediaWiki; це ім'я користувача для Вашої бази даних.",
-       'config-db-install-password' => 'Введіть пароль, який буде використано для підключення до бази даних під час процесу встановлення.
-Це не пароль облікового запису MediaWiki; це пароль для Вашої бази даних.',
-       'config-db-install-help' => "Введіть ім'я користувача і пароль, які буде використано для підключення до бази даних у процесі встановлення.",
-       'config-db-account-lock' => "Використовувати ті ж ім'я користувача і пароль і для звичайної роботи",
-       'config-db-wiki-account' => 'Обліковий запис користувача для звичайної роботи',
-       'config-db-wiki-help' => "Введіть ім'я користувача і пароль, які будуть використовуватись для з'єднання з базою даних під час звичайної роботи.
-Якщо обліковий запис не існує, а в облікового запису інсталяції є достатні повноваження, цей обліковий запис користувача буде створено з мінімальними правами, що необхідні для роботи з вікі.",
-       'config-db-prefix' => 'Префікс таблиць бази даних:',
-       'config-db-prefix-help' => 'Якщо треба ділити одну базу даних між декількома вікі або між MediaWiki та іншим веб-застосунком, Ви можете додати префікс до усіх назв таблиць для уникнення конфліктів.
-Не використовуйте пробіли.
-
-Це поле зазвичай залишають пустим.',
-       'config-db-charset' => 'Кодування бази даних',
-       '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 зворотно сумісна з UTF-8',
-       'config-charset-help' => "'''Увага:''' Якщо Ви використовуєте '''зворотно сумісну UTF-8''' на MySQL 4.1+ і створюєте резервні копії бази даних з допомогою <code>mysqldump</code>, це може викривити усі не-ASCII символи, незворотно пошкодивши резервні копії!
-
-У '''бінарному режимі''' MediaWiki зберігає текст UTF-8 у базі даних з бінарними полями.
-Це більш ефективно, ніж UTF-8 режим MySQL, і дозволяє використовувати увесь набір символів Юнікоду.
-У '''режимі UTF-8''' MySQL буде знати, якого символу стосуються Ваші дані, і могтиме відображати та конвертувати їх належним чином,
-але не дозволятиме зберігати символи, що виходять за межі [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
-       'config-mysql-old' => 'Необхідна MySQL $1 або пізніша, а у Вас $2.',
-       'config-db-port' => 'Порт бази даних:',
-       'config-db-schema' => 'Схема для MediaWiki',
-       'config-db-schema-help' => 'Ця схема зазвичай працює добре. 
-Змінюйте її тільки якщо знаєте, що Вам це потрібно.',
-       'config-pg-test-error' => "Не вдається підключитися до бази даних '''$1''': $2",
-       'config-sqlite-dir' => 'Папка даних SQLite:',
-       'config-sqlite-dir-help' => "SQLite зберігає усі дані в єдиному файлі.
-
-Папка, яку Ви вказуєте, має бути доступна серверу для запису під час встановлення.
-
-Вона '''не''' повинна бути доступна через інтернет, тому ми і не поміщуємо її туди, де Ваші файли PHP.
-
-Інсталятор пропише у неї файл <code>.htaccess</code>, але якщо це не спрацює, хтось може отримати доступ до Вашої вихідної бази даних, яка містить вихідні дані користувача (адреси електронної пошти, хеші паролів), а також видалені версії та інші обмежені дані на вікі.
-
-За можливості розташуйте базу даних десь окремо, наприклад в <code>/var/lib/mediawiki/yourwiki</code>.",
-       'config-oracle-def-ts' => 'Простір таблиць за замовчуванням:',
-       'config-oracle-temp-ts' => 'Тимчасовий простір таблиць:',
-       'config-support-info' => 'MediaWiki підтримує таки системи баз даних:
-
-$1
-
-Якщо Ви не бачите серед перерахованих систему баз даних, яку використовуєте, виконайте вказівки, вказані вище, щоб увімкнути підтримку.',
-       'config-support-mysql' => '* $1 є основною для MediaWiki і найкраще підтримується ([http://www.php.net/manual/en/mysql.installation.php як зібрати PHP з допомогою MySQL])',
-       'config-support-postgres' => '* $1 — популярна відкрита СУБД, альтернатива MySQL ([http://www.php.net/manual/en/pgsql.installation.php як зібрати PHP з допомогою PostgreSQL]). Можуть зустрічатись деякі невеликі невиправлені помилки, не рекомендується використовувати у робочій системі.',
-       'config-support-sqlite' => '* $1 — легка система баз даних, яка дуже добре підтримується. ([http://www.php.net/manual/en/pdo.installation.php Як зібрати PHP з допомогою SQLite], що використовує PDO)',
-       'config-support-oracle' => '* $1 — комерційна база даних масштабу підприємства. ([http://www.php.net/manual/en/oci8.installation.php Як зібрати PHP з підтримкою OCI8])',
-       'config-header-mysql' => 'Налаштування MySQL',
-       'config-header-postgres' => 'Налаштування PostgreSQL',
-       'config-header-sqlite' => 'Налаштування SQLite',
-       'config-header-oracle' => 'Налаштування Oracle',
-       'config-invalid-db-type' => 'Невірний тип бази даних',
-       'config-missing-db-name' => "Ви повинні ввести значення параметру «Ім'я бази даних»",
-       'config-missing-db-host' => 'Ви повинні ввести значення параметру «Хост бази даних»',
-       'config-missing-db-server-oracle' => 'Ви повинні ввести значення параметру «TNS бази даних»',
-       'config-invalid-db-server-oracle' => 'Неприпустиме TNS бази даних "$1".
-Використовуйте "TNS Name" або рядок "Easy Connect"  ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Методи найменування Oracle])',
-       'config-invalid-db-name' => 'Неприпустима назва бази даних "$1".
-Використовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9), знаки підкреслення (_) і дефіси (-).',
-       'config-invalid-db-prefix' => 'Неприпустимий префікс бази даних "$1".
-Використовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9), знаки підкреслення (_) і дефіси (-).',
-       'config-connection-error' => "$1.
-
-Перевірте хост, ім'я користувача та пароль і спробуйте ще раз.",
-       'config-invalid-schema' => 'Неприпустима схема для MediaWiki "$1".
-Використовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9) і знаки підкреслення(_).',
-       'config-db-sys-create-oracle' => 'Інсталятор підтримує лише використання облікового запису SYSDBA для створення нового облікового запису.',
-       'config-db-sys-user-exists-oracle' => 'Обліковий запис користувача "$1" уже існує. SYSDBA використовується лише для створення новий облікових записів!',
-       'config-postgres-old' => 'Необхідна PostgreSQL $1 або пізніша, а у Вас $2.',
-       'config-sqlite-name-help' => 'Виберіть назву, що ідентифікує Вашу вікі.
-Не використовуйте пробіли і дефіси.
-Це буде використовуватись у назві файлу даних SQLite.',
-       'config-sqlite-parent-unwritable-group' => 'Не можна створити папку даних <code><nowiki>$1</nowiki></code>, оскільки батьківська папка <code><nowiki>$2</nowiki></code> не доступна веб-серверу для запису.
-
-Інсталятор виявив, під яким користувачем працює Ваш сервер.
-Зробіть папку <code><nowiki>$3</nowiki></code> доступною для запису, щоб продовжити.
-В ОС Unix/Linux виконайте:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => 'Не можна створити папку даних <code><nowiki>$1</nowiki></code>, оскільки батьківська папка <code><nowiki>$2</nowiki></code> не доступна веб-серверу для запису.
-
-Інсталятор не зміг виявити, під яким користувачем працює Ваш сервер.
-Зробіть папку <code><nowiki>$3</nowiki></code> доступною для запису серверу (і всім!) глобально, щоб продовжити.
-В ОС Unix/Linux виконайте:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'Помилка при створенні папки даних "$1".
-Перевірте розташування і спробуйте знову.',
-       'config-sqlite-dir-unwritable' => 'Не можливо записати до папки "$1".
-Змініть налаштування доступу так, щоб веб-сервер міг писати до неї, і спробуйте ще раз.',
-       'config-sqlite-connection-error' => '$1.
-
-Перевірте папку даних і назву бази даних нижче та спробуйте знову.',
-       'config-sqlite-readonly' => 'Файл <code>$1</code> недоступний для запису.',
-       'config-sqlite-cant-create-db' => 'Не вдалося створити файл бази даних <code>$1</code>.',
-       'config-sqlite-fts3-downgrade' => 'У PHP немає підтримки FTS3, скидаю таблиці',
-       'config-can-upgrade' => "У цій базі даних є таблиці MediaWiki.
-Щоб оновити їх до MediaWiki $1, натисніть '''Продовжити'''.",
-       'config-upgrade-done' => "Оновлення завершено.
-
-Ви можете зараз [$1 починати використовувати свою вікі].
-
-Якщо Ви хочете повторно згенерувати файл <code>LocalSettings.php</code>, натисніть на кнопку нижче.
-Це '''не рекомендується''', якщо тільки у Вас не виникли проблеми з Вашою вікі.",
-       'config-upgrade-done-no-regenerate' => 'Оновлення завершено.
-
-Ви можете зараз [$1 починати використовувати свою вікі].',
-       'config-regenerate' => 'Повторно згенерувати LocalSettings.php →',
-       'config-show-table-status' => 'Запит <code>SHOW TABLE STATUS</code> не виконано!',
-       'config-unknown-collation' => "'''Увага:''' База даних використовує нерозпізнане сортування.",
-       'config-db-web-account' => 'Обліковий запис бази даних для інтернет-доступу',
-       'config-db-web-help' => "Оберіть ім'я користувача і пароль, які веб-сервер буде використовувати для з'єднання із сервером бази даних під час звичайної роботи вікі.",
-       'config-db-web-account-same' => 'Використати той же обліковий запис для встановлення',
-       'config-db-web-create' => 'Створити обліковий запис, якщо його ще не існує',
-       'config-db-web-no-create-privs' => 'Обліковий запис, вказаний Вами для встановлення, не має достатніх повноважень для створення облікового запису.
-Обліковий запис, який Ви вказуєте тут, уже повинен існувати.',
-       'config-mysql-engine' => 'Двигун бази даних:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Увага''': Ви обрали MyISAM для зберігання даних MySQL, що не рекомендовано для роботи з MediaWiki, оскільки:
-* він слабко підтримує паралелізм через блокування таблиць
-* він більш схильний до ушкоджень, ніж інші двигуни
-* база коду MediaWiki не завжди працює з MyISAM так, як мала б.
-
-Якщо Ваша інсталяція MySQL підтримує InnoDB, дуже рекомендується вибрати цей двигун.
-Якщо Ваша інсталяція MySQL не підтримує InnoDB, можливо настав час її оновити.",
-       'config-mysql-only-myisam-dep' => '"\'Зауваження:"\' MyISAM є єдиним механізмом для зберігання MySQL, який не рекомендується для використання з MediaWiki, оскільки:
-* слабо підтримує паралелізм через блокування таблиць
-* більш схильний до пошкоджень, ніж інші двигуни
-* код MediaWiki не завжди розглядає MyISAM, як повинен
-
-Твоє встановлення MySQL не підтримує InnoDB, можливо, потрібно оновити.',
-       'config-mysql-engine-help' => "'''InnoDB''' є завжди кращим вибором, оскільки краще підтримує паралельний доступ.
-
-'''MyISAM''' може бути швидшим для одного користувача або в інсталяціях read-only.
-Бази даних MyISAM схильні псуватись частіше, ніж бази InnoDB.",
-       'config-mysql-charset' => 'Кодування бази даних:',
-       'config-mysql-binary' => 'Двійкове',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "У '''бінарному режимі''' MediaWiki зберігає текст UTF-8 у базі даних з бінарними полями.
-Це більш ефективно, ніж UTF-8 режим MySQL, і дозволяє використовувати увесь набір символів Юнікоду.
-
-У '''режимі UTF-8''' MySQL буде знати, якого символу стосуються Ваші дані, і могтиме відображати та конвертувати їх належним чином, але не дозволятиме зберігати символи, що виходять за межі [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
-       'config-site-name' => 'Назва вікі:',
-       'config-site-name-help' => 'Це буде відображатись у заголовку вікна браузера та у деяких інших місцях.',
-       'config-site-name-blank' => 'Введіть назву сайту.',
-       'config-project-namespace' => 'Простір назв проекту:',
-       'config-ns-generic' => 'Проект',
-       'config-ns-site-name' => 'Те ж саме, що й назва вікі: $1',
-       'config-ns-other' => 'Інше (вкажіть)',
-       'config-ns-other-default' => 'MyWiki',
-       'config-project-namespace-help' => 'За прикладом Вікіпедії, чимало вікі тримають свої сторінки правил окремо від сторінок основного вмісту, у "\'\'\'просторі імен проекту\'\'\'".
-Усі назви сторінок у цьому просторі імен починаються з певного префікса, який Ви можете вказати тут.
-Традиційно цей префікс виводиться з назви вікі, але не може містити знаки пунктуація, як-то "#" чи ":".',
-       'config-ns-invalid' => 'Вказаний простір імен "<nowiki>$1</nowiki>" не припустимий.
-Вкажіть інший простір імен проекту.',
-       'config-ns-conflict' => 'Вказаний простір імен "<nowiki>$1</nowiki>" конфліктує зі стандартним простором імен MediaWiki.
-Вкажіть інший простір імен проекту.',
-       'config-admin-box' => 'Обліковий запис адміністратора',
-       'config-admin-name' => "Ваше ім'я:",
-       'config-admin-password' => 'Пароль:',
-       'config-admin-password-confirm' => 'Пароль ще раз:',
-       'config-admin-help' => 'Введіть бажане ім\'я користувача тут, наприклад "Павло НЛО".
-Це ім\'я ви будете використовувати про вході у вікі.',
-       'config-admin-name-blank' => "Введіть ім'я користувача адміністратора.",
-       'config-admin-name-invalid' => 'Вказане ім\'я користувача "<nowiki>$1</nowiki>" не припустиме.
-Вкажіть інше ім\'я користувача.',
-       'config-admin-password-blank' => 'Введіть пароль до облікового запису адміністратора.',
-       'config-admin-password-same' => "Пароль не може бути таким же, як ім'я користувача.",
-       'config-admin-password-mismatch' => 'Два введені вами паролі не збігаються.',
-       'config-admin-email' => 'Адреса електронної пошти:',
-       'config-admin-email-help' => 'Введіть адресу електронної пошти, щоб мати змогу отримувати електронну пошту від інших користувачів у вікі, відновити пароль і отримувати повідомлення про зміни, внесені до сторінок у Вашому списку спостереження. Ви можете залишити це поле пустим.',
-       'config-admin-error-user' => 'Внутрішня помилка під час створення адміністратора з ім\'ям "<nowiki>$1</nowiki>".',
-       'config-admin-error-password' => 'Внутрішня помилка під час встановлення пароля для адміністратора "<nowiki>$1</nowiki>":<pre>$2</pre>',
-       'config-admin-error-bademail' => 'Ви ввели недопустиму адресу електронної пошти.',
-       'config-subscribe' => 'Підписатися на [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce розсилку анонсів нових версій MediaWiki].',
-       'config-subscribe-help' => "Це список розсилки з малим обсягом повідомлень, що використовується для анонсування релізів, а також важливих повідомлень про безпеку.
-Вам варто підписати і оновлювати інсталяцію MediaWiki, коли з'являтимуться нові версії.",
-       'config-subscribe-noemail' => 'Ви намагались підписатись на розсилку анонсів релізів, не вказавши адреси електронної пошти.
-Будь ласка, вкажіть адресу електронної пошти, якщо хочете підписатись на розсилку.',
-       'config-almost-done' => 'Майже готово!
-Ви можете зараз пропустити налаштування, що залишилось, і встановити вікі прямо зараз.',
-       'config-optional-continue' => 'Запитуйте ще.',
-       'config-optional-skip' => 'Це вже втомлює, просто встановити вікі.',
-       'config-profile' => 'Профіль прав користувача:',
-       'config-profile-wiki' => 'Відкрита вікі',
-       'config-profile-no-anon' => 'Необхідно створити обліковий запис',
-       'config-profile-fishbowl' => 'Тільки для авторизованих редакторів',
-       'config-profile-private' => 'Приватна вікі',
-       'config-profile-help' => "Вікі краще працюють, коли Ви дозволяєте їх редагувати якомога ширшому колу людей.
-У MediaWiki легко переглядати останні зміни і відкочувати будь-яку шкоду, спричинену недосвідченими або зловмисними користувачами.
-
-Одначе, MediaWiki може бути корисна по-різному, й інколи важко переконати у вигідності відкритої вікі-роботи.
-Тож у Вас є вибір.
-
-Модель '''{{int:config-profile-wiki}}''' дозволяє редагувати будь-кому, навіть без входження в систему.
-Вікі з вимогою \"'''{{int:config-profile-no-anon}}'''\" дає певний облік, але може відвернути випадкових дописувачів.
-Спосіб \"'''{{int:config-profile-fishbowl}}'''\" дозволяє редагувати підтвердженим користувачам, а переглядати сторінки і історію можуть усі.
-'''{{int:config-profile-private}}''' дозволяє переглядати сторінки і редагувати лише підтвердженим користувачам.
-
-Детальніші конфігурації прав користувачів доступні після встановлення, див. [//www.mediawiki.org/wiki/Manual:User_rights відповідний розділ посібника].",
-       'config-license' => 'Авторські права і ліцензія:',
-       'config-license-none' => 'Без ліцензії у нижньому колонтитулі',
-       'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
-       'config-license-cc-by' => 'Creative Commons Attribution',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
-       'config-license-cc-0' => 'Creative Commons Zero (Суспільне надбання)',
-       'config-license-gfdl' => 'GNU Free Documentation License 1.3 або пізніша',
-       'config-license-pd' => 'Суспільне надбання (Public Domain)',
-       'config-license-cc-choose' => 'Виберіть одну з ліцензій Creative Commons',
-       'config-license-help' => "Чимало загальнодоступних вікі публікують увесь свій вміст під [http://freedomdefined.org/Definition вільною ліцензією]. Це розвиває відчуття спільної власності і заохочує довготривалу участь. У загальному випадку для приватної чи корпоративної вікі у цьому немає необхідності.
-
-Якщо Ви хочете мати змогу використовувати текст з Вікіпедії і дати Вікіпедії змогу використовувати текст, скопійований з Вашої вікі, вам необхідно обрати '''Creative Commons Attribution Share Alike'''.
-
-Раніше Вікіпедія використовувала GNU Free Documentation License.
-GFDL — допустима ліцензія, але у ній важко розібратися, а контент під GFDL важко використовувати повторно.",
-       'config-email-settings' => 'Налаштування електронної пошти',
-       'config-enable-email' => 'Увімкнути вихідну електронну пошту',
-       'config-enable-email-help' => 'Якщо Ви хочете, що електронна пошта працювала, необхідно виставити коректні [http://www.php.net/manual/en/mail.configuration.php налаштування пошти у PHP].
-Якщо Вам не потрібні жодні можливості електронної пошти у вікі, можете тут їх відключити.',
-       'config-email-user' => 'Увімкнути електронну пошту користувач-користувачеві',
-       'config-email-user-help' => 'Дозволити усім користувачам надсилати один одному електронну пошту, якщо вони увімкнули цю можливість у своїх налаштуваннях.',
-       'config-email-usertalk' => 'Увімкнути сповіщення про повідомлення на сторінці обговорення користувача',
-       'config-email-usertalk-help' => 'Дозволити користувачам отримувати сповіщення про зміни на своїй сторінці обговорення, якщо вони увімкнули цю можливість у своїх налаштуваннях.',
-       'config-email-watchlist' => 'Увімкнути сповіщення про зміни у списку спостереження',
-       'config-email-watchlist-help' => 'Дозволити користувачам отримувати сповіщення про сторінки з їхнього списку спостереження, якщо вони увімкнули цю можливість у своїх налаштуваннях.',
-       'config-email-auth' => 'Увімкнути автентифікацію через електронну пошту',
-       'config-email-auth-help' => "Якщо ця опція увімкнена, користувачам треба підтвердити свою адресу електронної пошти з допомогою надісланого їм посилання, коли вони встановлюють чи змінюють її.
-Тільки автентифіковані адреси електронної пошти отримують листи від інших користувачів або змінювати поштові сповіщення.
-Увімкнення цієї опції '''рекомендується''' загальнодоступним вікі через можливі зловживання функціями електронної пошти.",
-       'config-email-sender' => 'Зворотна адреса електронної пошти:',
-       'config-email-sender-help' => "Введіть адресу електронної пошти, що буде використовуватись як зворотна адреса для вихідної пошти.
-На неї будуть надсилатись відмови.
-Чимало поштових серверів вимагають, щоб принаймні доменне ім'я було допустимим.",
-       'config-upload-settings' => 'Завантаження зображень і файлів',
-       'config-upload-enable' => 'Дозволити завантаження файлів',
-       'config-upload-help' => 'Завантаження файлів підставляє Ваш сервер під потенційні загрози.
-Детальнішу інформацію можна почитати у посібнику, [//www.mediawiki.org/wiki/Manual:Security розділ про безпеку].
-
-Щоб дозволити завантаження файлів, змініть режим підпапки <code>images</code> у кореневій папці MediaWiki так, щоб сервер міг у неї записувати.
-Потім увімкніть цю опцію.',
-       'config-upload-deleted' => 'Каталог для вилучених файлів:',
-       'config-upload-deleted-help' => 'Оберіть папку для архівації видалених файлів.
-В ідеалі, вона не має бути доступною через інтернет.',
-       'config-logo' => 'URL логотипу:',
-       'config-logo-help' => 'Стандартна схема оформлення MediaWiki містить вільне для логотипу місце над бічною панеллю розміром 135x160 пікселів. 
-
-Завантажте зображення відповідного розміру і введіть тут його URL.
-
-Ви можете використати <code>$wgStylePath</code> або <code>$wgScriptPath</code>, якщо ваш логотип пов\'язаний з цими шляхами.
-
-Якщо Вам не потрібен логотип, залиште це поле пустим.',
-       'config-instantcommons' => 'Увімкнути Instant Commons',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] це функція, що дозволяє вікі використовувати зображення, звуки та інші медіа, розміщені на [//commons.wikimedia.org/ Вікісховищі].
-Для цього MediaWiki необхідний доступ до інтернету.
-
-Додаткову інформацію стосовно цієї функції, включаючи інструкції, як її увімкнути у вікі, відмінних від Вікісховища, дивіться у [//mediawiki.org/wiki/Manual:$wgForeignFileRepos посібнику].',
-       'config-cc-error' => 'Механізм вибору ліцензії Creative Commons не дав результатів.
-Введіть назву ліцензії вручну.',
-       'config-cc-again' => 'Виберіть знову ...',
-       'config-cc-not-chosen' => 'Оберіть, яку ліцензію Creative Commons Ви хочете використовувати, і натисніть "продовжити".',
-       'config-advanced-settings' => 'Розширені налаштування',
-       'config-cache-options' => "Налаштування кешування об'єктів:",
-       'config-cache-help' => "Кешування об'єктів використовується для покращення швидкодії MediaWiki методом кешування часто використовуваних даних.
-Заохочується увімкнення цієї можливості для середніх і великих сайтів, малі сайти також можуть відчути її перевагу.",
-       'config-cache-none' => 'Без кешування (жодні функції не втрачаються, але впливає на швидкодію великих вікі-сайтів)',
-       'config-cache-accel' => "PHP кешування об'єктів (APC, XCache чи WinCache)",
-       'config-cache-memcached' => 'Використовувати Memcached (вимагає додаткової установки і налаштування)',
-       'config-memcached-servers' => 'Сервери Memcached:',
-       'config-memcached-help' => 'Список IP-адрес, що викоритовує Memcached.
-Вкажіть по одному в рядку, разом з портами. Наприклад:
- 127.0.0.1:11211
- 192.168.1.25:1234',
-       'config-memcache-needservers' => 'Ви обрали тип кешування Memcached, але не вказали ніяких серверів.',
-       'config-memcache-badip' => 'Ви ввели недопустиму IP-адресу для Memcached: $1.',
-       'config-memcache-noport' => 'Ви не вказали порт для сервера Memcached: $1.
-Якщо Ви його не знаєте, за замовчуванням використовується 11211.',
-       'config-memcache-badport' => 'Номери портів Memcached повинні лежати в межах від $1 до $2.',
-       'config-extensions' => 'Розширення',
-       'config-extensions-help' => 'Розширення, перераховані вище, були знайдені у папці <code>./extensions</code>.
-
-Вони можуть потребувати додаткових налаштувань, але Ви можете увімкнути їх зараз.',
-       'config-install-alreadydone' => "'''Увага:''' Здається, Ви вже встановлювали MediaWiki і зараз намагаєтесь встановити її знову.
-Будь ласка, перейдіть на наступну сторінку.",
-       'config-install-begin' => 'Натискаючи "{{int:config-continue}}", Ви розпочинаєте встановлення MediaWiki.
-Якщо Ви все ще хочете внести зміни, натисніть "{{int:config-back}}".',
-       'config-install-step-done' => 'виконано',
-       'config-install-step-failed' => 'не вдалося',
-       'config-install-extensions' => 'У тому числі розширення',
-       'config-install-database' => 'Налаштування бази даних',
-       'config-install-schema' => 'Створення схеми',
-       'config-install-pg-schema-not-exist' => 'Схеми PostgreSQL не існує.',
-       'config-install-pg-schema-failed' => 'Не вдалось створити таблиці.
-Переконайтесь, що користувач "$1" може писати до схеми "$2".',
-       'config-install-pg-commit' => 'Внесення змін',
-       'config-install-pg-plpgsql' => 'Перевірка мови PL/pgSQL',
-       'config-pg-no-plpgsql' => 'Вам необхідно встановити мову PL/pgSQL у базі даних $1',
-       'config-pg-no-create-privs' => 'Обліковий запис, вказаний для встановлення, має недостатньо прав для створення облікового запису.',
-       'config-pg-not-in-role' => 'Обліковий запис, який Ви вказали для веб-користувача, уже існує.
-Обліковий запис, який Ви вказали для встановлення не є суперюзером і не відноситься до ролі веб-користувача, тому неможливо створити об\'єкти, що належать веб-користувачеві.
-
-У даний час MediaWiki вимагає, щоб усі таблиці належали веб-користувачу. Будь ласка, вкажіть інше ім\'я облікового запису або натисніть "Назад" та вкажіть користувача з достатніми правами.',
-       'config-install-user' => 'Створення користувача бази даних',
-       'config-install-user-alreadyexists' => 'Користувач "$1" уже існує',
-       'config-install-user-create-failed' => 'Не вдалося створити користувача "$1": $2',
-       'config-install-user-grant-failed' => 'Не вдалося надати права користувачеві "$1": $2',
-       'config-install-user-missing' => 'Зазначеного користувача "$1" не існує.',
-       'config-install-user-missing-create' => 'Зазначеного користувача "$1" не існує.
-Будь ласка, поставте галочку "Створити обліковий запис", якщо хочете його створити.',
-       'config-install-tables' => 'Створення таблиць',
-       '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-stats' => 'Ініціалізація статистики',
-       'config-install-keys' => 'Генерація секретних ключів',
-       'config-insecure-keys' => "'''Увага:''' {{PLURAL:$2|Секретний ключ|Секретні ключі}} ($1), {{PLURAL:$2|згенерований в процесі встановлення, недостатньо надійний|згенеровані в процесі встановлення, недостатньо надійні}}. Розгляньте можливість {{PLURAL:$2|його|їх}} заміни вручку.",
-       'config-install-sysop' => 'Створення облікового запису адміністратора',
-       'config-install-subscribe-fail' => 'Не можливо підписатись на mediawiki-announce: $1',
-       'config-install-subscribe-notpossible' => 'cURL не встановлено і опція allow_url_fopen не доступна.',
-       'config-install-mainpage' => 'Створення головної сторінки із вмістом за замовчуванням',
-       'config-install-extension-tables' => 'Створення таблиць для увімкнених розширень',
-       'config-install-mainpage-failed' => 'Не вдається вставити головну сторінку: $1',
-       'config-install-done' => "'''Вітаємо!'''
-Ви успішно встановили MediaWiki.
-
-Інсталятор згенерував файл <code>LocalSettings.php</code>, який містить усі Ваші налаштування.
-
-Вам необхідно завантажити його і помістити у кореневу папку Вашої вікі (туди ж, де index.php). Завантаження мало початись автоматично.
-
-Якщо завантаження не почалось або Ви його скасували, можете заново його почати, натиснувши на посилання внизу:
-
-$3
-
-'''Примітка''': Якщо Ви не зробите цього зараз, цей файл не буде доступним пізніше, коли Ви вийдете з встановлення, не скачавши його.
-
-Після виконання дій, описаних вище, Ви зможете '''[$2 увійти у свою вікі]'''.",
-       'config-download-localsettings' => 'Завантажити <code>LocalSettings.php</code>',
-       'config-help' => 'допомога',
-       'config-nofile' => 'Файл "$1" не знайдено. Його видалено?',
-       'config-extension-link' => 'Чи знаєте ви, що ваше вікі підтримує [//www.mediawiki.org/wiki/Manual:Extensions розширення]?
-
-Ви можете переглядати [//www.mediawiki.org/wiki/Category:Extensions_by_category розширення по категорії] або в [//www.mediawiki.org/wiki/Extension_Matrix матрицю розширень] щоб побачити повний список розширень.',
-       'mainpagetext' => 'Програмне забезпечення «MediaWiki» успішно встановлене.',
-       'mainpagedocfooter' => 'Інформацію про роботу з цією вікі можна знайти в [//meta.wikimedia.org/wiki/Help:Contents посібнику користувача].
-
-== Деякі корисні ресурси ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Список налаштувань];
-* [//www.mediawiki.org/wiki/Manual:FAQ Часті питання з приводу MediaWiki];
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Розсилка повідомлень про появу нових версій MediaWiki];
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Локалізуйте MediaWiki своєю мовою]',
-);
-
-/** Urdu (اردو)
- * @author Noor2020
- * @author පසිඳු කාවින්ද
- */
-$messages['ur'] = array(
-       'config-information' => 'معلومات',
-       'config-git' => 'Git ورژن کنٹرول مصنع لطیف ملا: <code>$1</code> ۔',
-       'config-git-bad' => 'GIT ورژن کنٹرول مصنع لطیف نہيں ملا ۔',
-       'config-mysql-only-myisam-dep' => "' ' تنبیہ: ' '[[MyISAM|مائ اسام]] واحد دستیاب 'ذخیرہ جاتی انجن' ہے جو مائی ایس کیو ایل کے لیے ہے ، جو کہ ناموزوں ہے میڈیا وکی کے لیے ،کیوں کہ :
-* یہ ہموار قطاروں کی سہولت بمشکل فراہم کرتا ہے 
-* یہ دوسرے انجنوں کے مقابلے  زیادہ بگڑ جاتا ہے
-* میڈیا وکی کوڈ بیس ہمیشہ سنبھال نہيں پاتا مائی اسام کو ۔ 
-
-آپ کا مائی ایس کیو ایل کا نصب ہمیشہ اننو ڈی بی کی سہولت نہيں دے سکتا ، ہو سکتا ہے یہ مزید ترقیاتی کام چاہے", # Fuzzy
-       'config-profile-fishbowl' => 'صرف مجاز ایڈیٹرز',
-       'config-license-pd' => 'پبلک ڈومین',
-       'config-email-settings' => 'ای میل کی ترتیبات',
-       'config-email-user-help' => 'تمام صارفین ای میل بھیجنے کیلئے ایک دوسرے اگر وہ یہ ان کی ترجیحات میں فعال ہے کی اجازت دیتے ہیں.',
-       'config-email-usertalk' => 'صارف بات صفحہ کی اطلاع فعال',
-       'config-email-usertalk-help' => 'اگر وہ یہ ان کی ترجیحات میں فعال ہے صارف بات صفحہ تبدیلی پر اطلاعات حاصل کرنے کے لئے صارفین کی اجازت دیں.',
-       'config-email-watchlist' => 'دیکھنی والی فہرست کی اطلاع فعال',
-       'config-email-auth' => 'فعال ای میل کی تصدیق',
-       'config-email-sender' => 'ای میل ایڈریس پر واپس:',
-       'config-upload-deleted' => 'ڈائرکٹری خارج کردہ فائلوں کے لیے:',
-       'config-advanced-settings' => 'اعلی درجے کی ترتیب',
-       'config-cache-options' => 'اعتراض کیش کے لئے ترتیب دینا:',
-       'config-extensions' => 'ملانے',
-       'config-install-step-done' => 'کیا کیا',
-       'config-install-step-failed' => 'میں ناکام رہے',
-       'config-install-extensions' => 'سمیت ملانے',
-       'config-install-database' => 'ڈیٹا بیس کی ترتیب',
-       'config-install-pg-commit' => 'تبدیلیوں کے ارتکاب',
-       'config-install-keys' => 'خفیہ چابیاں پیدا',
-       'config-install-sysop' => 'منتظم کے صارف کے اکاؤنٹ کی تشکیل',
-       'config-install-mainpage' => 'پہلے سے طے شدہ مواد کے ساتھ سب سے کامیاب کی تشکیل',
-       'mainpagetext' => "'''میڈیاوکی کو کامیابی سے چالو کردیا گیا ہے۔.'''",
-);
-
-/** Uzbek (oʻzbekcha)
- * @author Sociologist
- */
-$messages['uz'] = array(
-       'config-admin-password-blank' => 'Administrator hisob yozuvi uchun maxfiy soʻz kiriting.',
-       'mainpagetext' => "'''MediaWiki muvaffaqiyatli o'rnatildi.'''",
-       'mainpagedocfooter' => "Wiki dasturini ishlatish haqida ma'lumot olish uchun  [//meta.wikimedia.org/wiki/Help:Contents Foydalanuvchi qo'llanmasi] sahifasiga murojaat qiling.
-
-== Dastlabki qadamlar ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Moslamalar ro'yxati]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki haqida ko'p so'raladigan savollar]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki yangi versiyasi chiqqanda xabar berish ro'yxati]", # Fuzzy
-);
-
-/** vèneto (vèneto)
- * @author Vajotwo
- */
-$messages['vec'] = array(
-       'mainpagetext' => "'''Instałasion de MediaWiki conpletà coretamente.'''",
-       'mainpagedocfooter' => "Varda ła [//meta.wikimedia.org/wiki/Aiuto:Sommario Guida utente] par majori informasion so l'uso de sto software wiki.
-
-== Par scumisiar ==
-
-I seguenti cołegamenti i xé en łengua inglese:
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Inpostasion de configurasion]
-* [//www.mediawiki.org/wiki/Manual:FAQ Domande frequenti so MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list anunsi MediaWiki]", # Fuzzy
-);
-
-/** Veps (vepsän kel’)
- * @author Игорь Бродский
- */
-$messages['vep'] = array(
-       'mainpagetext' => "'''MediaWiki-likutim om seižutadud jügedusita.'''",
-       'mainpagedocfooter' => 'Kc. [//meta.wikimedia.org/wiki/Help:Kävutajan abukirj], miše sada informacijad wikin kävutamižes.
-
-== Erased tarbhaižed resursad ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Järgendusiden nimikirjutez]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce počtnimikirjutez]', # Fuzzy
-);
-
-/** Vietnamese (Tiếng Việt)
- * @author පසිඳු කාවින්ද
- */
-$messages['vi'] = array(
-       'config-information' => 'Thông tin',
-       'config-page-language' => 'Ngôn ngữ',
-       'config-page-name' => 'Tên',
-       'config-page-options' => 'Tùy chọn',
-       'config-ns-generic' => 'Dự án',
-       'config-admin-password' => 'Mật khẩu:',
-       'config-admin-email' => 'Địa chỉ thư điện tử:',
-       'config-help' => 'Trợ giúp',
-       'mainpagetext' => "'''MediaWiki đã được cài đặt thành công.'''",
-       'mainpagedocfooter' => 'Xin đọc [//meta.wikimedia.org/wiki/Help:Contents Hướng dẫn sử dụng] để biết thêm thông tin về cách sử dụng phần mềm wiki.
-
-== Để bắt đầu ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Danh sách các thiết lập cấu hình]
-* [//www.mediawiki.org/wiki/Manual:FAQ Các câu hỏi thường gặp MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Danh sách gửi thư về việc phát hành MediaWiki]', # Fuzzy
-);
-
-/** Volapük (Volapük)
- */
-$messages['vo'] = array(
-       'mainpagetext' => "'''El MediaWiki pestiton benosekiko.'''",
-       'mainpagedocfooter' => 'Konsultolös [//meta.wikimedia.org/wiki/Help:Contents Gebanageidian] ad tuvön nünis dö geb programema vükik.
-
-== Nüdugot ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Parametalised]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki: SSP]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Potalised tefü fomams nulik ela MediaWiki]', # Fuzzy
-);
-
-/** Võro (Võro)
- */
-$messages['vro'] = array(
-       'mainpagetext' => "'''MediaWiki tarkvara paika säet.'''",
-       'mainpagedocfooter' => 'Vikitarkvara pruukmisõ kotsilõ loeq mano:
-* [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide MediaWiki pruukmisoppus (inglüse keelen)].
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Säädmiisi oppus (inglüse keelen)]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki kõgõ küsütümbäq küsümiseq (inglüse keelen)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-postilist, minka andas teedäq MediaWiki vahtsist kujõst].', # Fuzzy
-);
-
-/** Walloon (walon)
- * @author Srtxg
- */
-$messages['wa'] = array(
-       'mainpagetext' => "'''Li programe MediaWiki a stî astalé a l' idêye.'''",
-);
-
-/** Waray (Winaray)
- * @author Harvzsf
- */
-$messages['war'] = array(
-       'mainpagetext' => "'''Malinamposon an pag-instalar han MediaWiki.'''",
-       'mainpagedocfooter' => "Kitaa an [//meta.wikimedia.org/wiki/Help:Contents User's Guide] para hin impormasyon ha paggamit han wiki nga softweyr.
-
-== Ha pagtikang==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Wolof (Wolof)
- */
-$messages['wo'] = array(
-       'mainpagetext' => "'''Campug MediaWiki gi sotti na . '''",
-       'mainpagedocfooter' => 'Saytul [//meta.wikimedia.org/wiki/Ndimbal:Ndefu Gindikaayu jëfandikukat bi] ngir yeneeni xibaar ci jëfandiku gu tëriin gi.
-
-== Tambali ak MediaWiki ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Limu jumtukaayi kocc-koccal gi]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Limu waxtaan ci liy-génn ci MediaWiki]', # Fuzzy
-);
-
-/** Wu (吴语)
- * @author Wu-chinese.com
- */
-$messages['wuu'] = array(
-       'mainpagetext' => "'''MediaWiki安装成功哉!'''",
-       'mainpagedocfooter' => '请访问[//meta.wikimedia.org/wiki/Help:Contents 用户手册]以获得使用此维基软件个信息!
-
-== 入门 ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki 配置设置列表]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 常见问题解答]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 发布邮件列表]', # Fuzzy
-);
-
-/** Kalmyk (хальмг)
- * @author Huuchin
- */
-$messages['xal'] = array(
-       'mainpagetext' => "Йовудта Mediawiki гүүлһүдә тәвллһн.'''",
-       'mainpagedocfooter' => 'Тер бики закллһна теткүл ю кеһәд олзлх туск [//meta.wikimedia.org/wiki/Help:Contents көтлвр] дастн.
-
-== Туста заавр ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Көгүдә бүрткл]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki туск ЮмБи]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki шинҗллһнә бүрткл]', # Fuzzy
-);
-
-/** Yiddish (ייִדיש)
- * @author פוילישער
- * @author පසිඳු කාවින්ද
- */
-$messages['yi'] = array(
-       'config-desc' => 'דער אינסטאלירער פאר מעדיעוויקי',
-       'config-title' => 'מעדיעוויקי $1 אינסטאלירונג',
-       'config-information' => 'אינפֿארמאציע',
-       'config-wiki-language' => 'ווקי שפראך:',
-       'config-back' => '→ צוריק',
-       'config-continue' => 'פֿארזעצן ←',
-       'config-page-language' => 'שפראַך',
-       'config-page-name' => 'נאָמען',
-       'config-page-options' => 'ברירות',
-       'config-db-type' => 'דאטנבאזע טיפ:',
-       'config-db-name' => 'דאטנבאזע נאָמען:',
-       'config-project-namespace' => 'פראיעקט נאָמענטייל:',
-       'config-ns-generic' => 'פראיעקט',
-       'config-admin-name' => 'אײַער נאָמען:',
-       'config-admin-password' => 'פאַסווארט:',
-       'config-admin-password-mismatch' => 'די צוויי פאסוועטרט איר האט איינגעגעבן שטימען נישט.',
-       'config-admin-email' => 'בליצפּאָסט אַדרעס:',
-       'config-install-tables' => 'שאפן טאבעלעס',
-       'config-install-tables-exist' => "'''ווארענונג''': זעט אויס אז די מעדיעוויקי טאבעלעס עקזיסטירן שוין.
-איבערהיפן שאפֿן.",
-       'config-download-localsettings' => 'אראפלאדן <code>LocalSettings.php</code>',
-       'config-help' => 'הילף',
-       'config-nofile' => 'מ\'האט נישט געקענט טרעפן די טעקע "$1". צי האט מען זי אויסגעמעקט?',
-       'mainpagetext' => "'''מעדיעוויקי אינסטאלירט מיט דערפאלג.'''",
-       'mainpagedocfooter' => "גיט זיך אן עצה מיט [//meta.wikimedia.org/wiki/Help:Contents באניצער'ס וועגווײַזער] פֿאר אינפֿארמאציע וויאזוי זיך באנוצן מיט וויקי ווייכוואַרג.
-
-== נוצליכע וועבלינקען פֿאַר אנהייבערס ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings רשימה פון קאנפֿיגוראציעס]
-* [//www.mediawiki.org/wiki/Manual:FAQ אפֿט געפֿרעגטע שאלות]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce מעדיעוויקי באפֿרײַאונג פאסטליסטע]* [//www.mediawiki.org/wiki/Localisation#Translation_resources איבערזעצן מעדיעוויקי אין אײַער שפראך]",
-);
-
-/** Yoruba (Yorùbá)
- * @author Demmy
- */
-$messages['yo'] = array(
-       'mainpagetext' => "'''MediaWiki ti jẹ́ gbígbékọ́sínú láyọrísírere.'''",
-       'mainpagedocfooter' => "Ẹ ṣàbẹ̀wò sí [//meta.wikimedia.org/wiki/Help:Contents User's Guide] fún ìfitólétí nípa líló atòlànà wíkì.
-
-== Láti bẹ̀rẹ̀ ==
-*  [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
-);
-
-/** Cantonese (粵語)
- */
-$messages['yue'] = array(
-       'mainpagetext' => "'''MediaWiki已經裝好。'''",
-       'mainpagedocfooter' => '參閱[//meta.wikimedia.org/wiki/Help:Contents 用戶指引](英),裏面有資料講點用wiki軟件。
-
-==開始使用==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings 配置設定清單](英)
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 常見問題](英)
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈郵件名單](英)', # Fuzzy
-);
-
-/** Zeeuws (Zeêuws)
- */
-$messages['zea'] = array(
-       'mainpagetext' => "'''De installaotie van MediaWiki is geslaegd.'''",
-       'mainpagedocfooter' => "Raedpleeg de [//meta.wikimedia.org/wiki/ZEA_Ulpe:Inhoudsopgaeve andleidieng] voe informatie over 't gebruuk van de wikisoftware.
-
-== Meer ulpe over MediaWiki ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lieste mie instelliengen]
-* [//www.mediawiki.org/wiki/Manual:FAQ Veehestelde vraehen (FAQ)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailienglieste voe ankondigiengen van nieuwe versies]", # Fuzzy
-);
-
-/** Simplified Chinese (中文(简体)‎)
- * @author Anthony Fok
- * @author Cwek
- * @author Hydra
- * @author Hzy980512
- * @author Liangent
- * @author Makecat
- * @author PhiLiP
- * @author Xiaomingyan
- * @author Yfdyh000
- * @author 乌拉跨氪
- * @author 阿pp
- * @author 아라
- */
-$messages['zh-hans'] = array(
-       'config-desc' => 'MediaWiki安装程序',
-       'config-title' => 'MediaWiki $1配置',
-       'config-information' => '信息',
-       'config-localsettings-upgrade' => '已检测到<code>LocalSettings.php</code>文件。要升级该配置,请在下面的框中输入<code>$wgUpgradeKey</code>的值。您可以在<code>LocalSettings.php</code>中找到它。',
-       'config-localsettings-cli-upgrade' => '已检测到<code>LocalSettings.php</code>文件。要升级该配置,请直接运行<code>update.php</code>。',
-       'config-localsettings-key' => '升级密钥:',
-       'config-localsettings-badkey' => '您提供的密钥不正确。',
-       'config-upgrade-key-missing' => '检测到MediaWiki的配置已经存在。若要升级该配置,请将下面一行文本添加到<code>LocalSettings.php</code>的底部:
-
-$1',
-       'config-localsettings-incomplete' => '当前的<code>LocalSettings.php</code>可能并不完整,因为变量$1没有设置。请在<code>LocalSettings.php</code>设置该变量,并单击“{{int:Config-continue}}”。',
-       'config-localsettings-connection-error' => '在使用<code>LocalSettings.php</code>或<code>AdminSettings.php</code>中指定的设置连接数据库时发生错误。请修复相应设置并重试。
-
-$1',
-       'config-session-error' => '启动会话出错:$1',
-       'config-session-expired' => '您的会话数据可能已经过期,当前会话的使用期限被设定为$1。您可以在php.ini中设置<code>session.gc_maxlifetime</code>来延长此期限,并重新启动本配置程序。',
-       'config-no-session' => '您的会话数据丢失了!请检查php.ini并确保<code>session.save_path</code>被设置为适当的目录。',
-       'config-your-language' => '您使用的语言:',
-       'config-your-language-help' => '选择在安装过程中使用的语言。',
-       'config-wiki-language' => 'Wiki使用的语言:',
-       'config-wiki-language-help' => '选择将要安装的wiki在多数情况下使用的语言。',
-       'config-back' => '← 后退',
-       'config-continue' => '继续 →',
-       'config-page-language' => '语言',
-       'config-page-welcome' => '欢迎使用MediaWiki!',
-       'config-page-dbconnect' => '连接到数据库',
-       'config-page-upgrade' => '升级当前配置',
-       'config-page-dbsettings' => '数据库设置',
-       'config-page-name' => '名称',
-       'config-page-options' => '选项',
-       'config-page-install' => '安装',
-       'config-page-complete' => '完成!',
-       'config-page-restart' => '重新开始安装',
-       'config-page-readme' => '自述',
-       'config-page-releasenotes' => '发布说明',
-       'config-page-copying' => '复制',
-       'config-page-upgradedoc' => '更新',
-       'config-page-existingwiki' => '已有wiki',
-       'config-help-restart' => '是否要清除所有已输入且保存的数据,并重新启动安装过程吗?',
-       'config-restart' => '是的,重启吧',
-       'config-welcome' => '=== 环境检查 ===
-对当前环境是否适合安装MediaWiki作基本的检查。如果您在安装过程中需要帮助,请提供这些检查的结果。',
-       'config-copyright' => "=== 版权和条款 ===
-
-\$1
-
-本程序为自由软件;您可依据自由软件基金会所发表的GNU通用公共授权条款规定,就本程序再为发布与/或修改;无论您依据的是本授权的第二版或(您自行选择的)任一日后发行的版本。
-
-本程序是基于使用目的而加以发布,然而'''不负任何担保责任''';亦无对'''适售性'''或'''特定目的适用性'''所为的默示性担保。详情请参照GNU通用公共授权。
-
-您应已收到附随于本程序的<doclink href=\"Copying\">GNU通用公共授权的副本</doclink>;如果没有,请写信至自由软件基金会:59 Temple Place - Suite 330, Boston, Ma 02111-1307, USA,或[http://www.gnu.org/copyleft/gpl.html 在线阅读]。",
-       'config-sidebar' => '* [//www.mediawiki.org/wiki/MediaWiki/zh-hans MediaWiki首页]
-* [//www.mediawiki.org/wiki/Help:Contents/zh-hans 用户指南]
-* [//www.mediawiki.org/wiki/Manual:Contents 管理员指南]
-* [//www.mediawiki.org/wiki/Manual:FAQ/zh-hans 常见问题解答]
-----
-* <doclink href=Readme>自述文件</doclink>
-* <doclink href=ReleaseNotes>发行说明</doclink>
-* <doclink href=Copying>协议副本</doclink>
-* <doclink href=UpgradeDoc>升级</doclink>',
-       'config-env-good' => '环境检查已经完成。您可以安装MediaWiki。',
-       'config-env-bad' => '环境检查已经完成。您不能安装MediaWiki。',
-       'config-env-php' => 'PHP $1已安装。',
-       'config-env-php-toolow' => '已安装PHP $1;但是,MediaWiki需要PHP $2或更高版本。',
-       'config-unicode-using-utf8' => '使用Brion Vibber的utf8_normalize.so实现Unicode正常化。',
-       'config-unicode-using-intl' => '使用[http://pecl.php.net/intl intl PECL扩展]实现Unicode正常化。',
-       'config-unicode-pure-php-warning' => "'''警告:'''因为尚未安装 [http://pecl.php.net/intl intl PECL 扩展]以处理 Unicode 正常化,故只能退而采用运行较慢的纯 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-no-db' => '找不到合适的数据库驱动!您需要为PHP安装数据库驱动。目前支持以下数据库:$1。
-
-如果您正在使用共享主机,请向您的主机提供商申请安装合适的数据库驱动。如果您通过自行编译安装的PHP,请对其进行重新配置以启用数据库客户端,例如使用<code>./configure --with-mysql</code>。如果您通过Debian或Ubuntu包安装的PHP,您还需要安装php5-mysql模块。',
-       'config-outdated-sqlite' => "'''警告''':您已安装SQLite $1,但是它的版本低于最低要求版本$2。因此您无法选择SQLite。",
-       '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]已启用!'''
-此选项会无法预测地破坏输入的数据,请将其禁用,否则您将不能安装或使用MediaWiki。",
-       'config-magic-quotes-sybase' => "'''毁灭性错误:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase]已启用!'''
-此选项会无法预测地破坏输入的数据,请将其禁用,否则您将不能安装或使用MediaWiki。",
-       'config-mbstring' => "'''毁灭性错误:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]已启用!'''
-此选项会导致错误并不可预测地破坏数据,请将其禁用,否则您将不能安装或使用MediaWiki。",
-       'config-ze1' => "'''毁灭性错误:[http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]已启用!'''
-此选项将导致MediaWiki出现极其严重的故障,请将其禁用,否则您将不能安装或使用MediaWiki。",
-       'config-safe-mode' => "'''警告:'''PHP的[http://www.php.net/features.safe-mode 安全模式]已启用。它可能会导致一些问题,尤其在对文件上传和数学公式<code>math</code>的支持方面。",
-       'config-xml-bad' => '缺少PHP的XML模块。MediaWiki需要使用该模块提供的函数,在当前配置下将无法工作。如果您正在使用Mandrake Linux,请安装php-xml包。',
-       'config-pcre' => '可能缺少PCRE的支持模块。MediaWiki的运行需要兼容于Perl的正则表达式函数。',
-       'config-pcre-no-utf8' => "'''毁灭性错误''':PHP的PCRE模块在编译时可能没有包含PCRE_UTF8支持。MediaWiki需要UTF-8支持才能正常工作。",
-       'config-memory-raised' => 'PHP的内存使用上限<code>memory_limit</code>为$1,自动提升到$2。',
-       'config-memory-bad' => "'''警告:'''PHP的内存使用上限<code>memory_limit</code>为$1。该设定可能过低,并导致安装失败!",
-       'config-ctype' => "'''毁灭性错误''':PHP必须有[http://www.php.net/manual/en/ctype.installation.php Ctype 扩展]来支持编译。",
-       '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],无法启用对象缓存。
-Object caching is not enabled.",
-       'config-mod-security' => "'''警告''':您的服务器已启动[http://modsecurity.org/ mod_security]。若其配置错误, 会导致MediaWiki和其他软件的错误并允许用户任意发布内容。如果您遇到任何错误,请查阅[http://modsecurity.org/documentation/ mod_security文档]或联系您的客服。",
-       'config-diff3-bad' => '找不到GNU diff3。',
-       'config-git' => '发现Git版本控制软件:<code>$1</code>',
-       'config-git-bad' => 'Git版本控制软件未找到。',
-       'config-imagemagick' => '已找到ImageMagick:<code>$1</code>。如果你启用了上传功能,缩略图功能也将被启用。',
-       'config-gd' => '已找到内建的GD图形库。如果你启用了上传功能,缩略图功能也将被启用。',
-       'config-no-scaling' => '找不到GD库或ImageMagick。缩略图功能将不可用。',
-       'config-no-uri' => "'''错误:'''无法确定当前的URI。安装已中断。",
-       '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>存在允许执行任意脚本的漏洞。尽管MediaWiki会对所有已上传的文件进行安全检查,但我们仍然强烈建议您在启用上传功能前[//www.mediawiki.org/wiki/Manual:Security#Upload_security 关闭该安全漏洞]。",
-       'config-no-cli-uploads-check' => "'''警告''':在CLI安装过程中,没有对您的默认上传目录(<code>$1</code>)进行执行任意脚本的漏洞检查。",
-       'config-brokenlibxml' => '您的系统安装的PHP和libxml2版本组合存在故障,并可能在MediaWiki和其他web应用程序中造成隐藏的数据损坏。请将PHP升级到5.2.9或以上,libxml2升级到2.7.3或以上([//bugs.php.net/bug.php?id=45996 PHP的故障报告])。安装已中断。',
-       'config-using531' => '由于函数<code>__call()</code>的引用参数存在故障,PHP $1和MediaWiki无法兼容。请升级到PHP 5.3.2或更高版本,或降级到PHP 5.3.0以修复该问题。安装已中断。',
-       'config-suhosin-max-value-length' => 'Suhosin已经安装并将GET请求的参数长度限制在$1字节。MediaWiki的ResourceLoader部件可以在此限制下正常工作,但其性能会被降低。如果可能,请在<code>php.ini</code>中将<code>suhosin.get.max_value_length</code>设为1024或更高值,并在LocalSettings.php中将<code>$wgResourceLoaderMaxQueryLength</code>设为同一值。',
-       'config-db-type' => '数据库类型:',
-       'config-db-host' => '数据库主机:',
-       'config-db-host-help' => '如果您的数据库在别的服务器上,请在这里输入它的域名或IP地址。
-
-如果您在使用共享网站套餐,您的网站商应该已在他们的控制面板中给您数据库信息了。
-
-如果您在Windows中安装并且使用MySQL,“localhost”可能无效。如果确实无效,请输入“127.0.0.1”作为IP地址。
-
-如果您在使用PostgreSQL,并且要用Unix socket来连接,请留空。',
-       'config-db-host-oracle' => '数据库透明网络底层(TNS):',
-       'config-db-host-oracle-help' => '请输入合法的[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 本地连接名],并确保tnsnames.ora文件对本安装程序可见。<br />如果您使用的客户端库为10g或更新的版本,您还可以使用[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 简单连接名方法](easy connect naming method)。',
-       'config-db-wiki-settings' => '标识本wiki',
-       'config-db-name' => '数据库名称:',
-       'config-db-name-help' => '请输入一个可以标识您的wiki的名称。请勿使用空格。
-
-如果您正在使用共享web主机,您的主机提供商或会给您指定一个数据库名称,或会让您通过控制面板创建数据库。',
-       'config-db-name-oracle' => '数据库模式:',
-       'config-db-account-oracle-warn' => '现有三种已支持方案可以将Oracle设置为后端数据库:
-
-如果您希望在安装过程中创建数据库帐户,请为安装程序提供具有SYSDBA角色的数据库帐户,并为web访问帐户指定所需身份证明;否则您可以手动创建web访问的账户并仅须提供该帐户(确保帐户已有创建方案对象(schema object)的所需权限);或提供两个不同的帐户,其一具有创建权限,另一则被限制为web访问。
-
-具有所需权限账户的创建脚本存放于本程序的“maintenance/oracle/”目录下。请注意,使用受限制的帐户将禁用默认帐户的所有维护性功能。',
-       'config-db-install-account' => '用于安装的用户帐号',
-       'config-db-username' => '数据库用户名:',
-       'config-db-password' => '数据库密码:',
-       'config-db-password-empty' => '请为新数据库用户$1输入密码。尽管您可以创建不使用密码的用户,但这样做并不安全。',
-       'config-db-install-username' => '请输入在安装过程中用于连接数据库的用户名。请勿输入MediaWiki帐号的用户名,请输入您数据库的用户名。',
-       'config-db-install-password' => '请输入在安装过程中用于连接数据库的密码。请勿输入MediaWiki帐号的密码,请输入您数据库的密码。',
-       'config-db-install-help' => '请输入在安装过程中用于连接数据库的用户名和密码。',
-       'config-db-account-lock' => '在普通操作中使用相同的用户名和密码',
-       'config-db-wiki-account' => '用于普通操作的用户帐号',
-       'config-db-wiki-help' => '输入在普通的wiki操作中(安装完成后)将用于连接数据库的用户名和密码。如果该帐号并不存在,而安装帐号具有足够的权限,该用户帐号会被自动创建,并被赋予足以运行此wiki的最低权限。',
-       'config-db-prefix' => '数据库表前缀:',
-       'config-db-prefix-help' => '如果您需要在多个wiki之间(或在MediaWiki与其他web应用程序之间)共享一个数据库,您可以通过添加前缀的方式来避免出现表名称的冲突。请勿使用空格。
-
-此字段通常可留空。',
-       'config-db-charset' => '数据库字符集',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 二进制',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 UTF-8(向后兼容)',
-       'config-charset-help' => "'''警告:'''如果您在MySQL 4.1+中使用'''向后兼容的UTF-8'''字符集,并在之后使用<code>mysqldump</code>备份了数据库,则可能损坏所有的非ASCII字符,从而不可逆地破坏您的备份!
-
-在'''二进制模式'''下,MediaWiki会将UTF-8编码的文本存于数据库的二进制字段中。相对于MySQL的UTF-8模式,这种方法效率更高,并允许您使用全范围的Unicode字符。
-
-在'''UTF-8模式'''下,MySQL将知道您数据使用的字符集,并能适当地提供和转换内容。但这样做您将无法在数据库中存储[//zh.wikipedia.org/wiki/基本多文种平面 基本多文种平面]以外的字符。",
-       'config-mysql-old' => '需要MySQL $1或更新的版本,您的版本为$2。',
-       'config-db-port' => '数据库端口:',
-       'config-db-schema' => 'MediaWiki的数据库模式',
-       'config-db-schema-help' => '此数据库模式通常是正确的,请在有明确需求时才改动之。',
-       'config-pg-test-error' => "无法连接到数据库'''$1''':$2",
-       'config-sqlite-dir' => 'SQLite数据目录:',
-       'config-sqlite-dir-help' => "SQLite会将所有的数据存储于单一文件中。
-
-您所提供的目录必须在安装过程中对网页服务器可写。
-
-该目录'''不应'''允许通过web访问,因此我们不会将数据文件和PHP文件放在一起。
-
-安装程序在创建数据文件时,亦会在相同目录下创建<code>.htaccess</code>以控制权限。假若此等控制失效,则可能会将您的数据文件暴露于公共空间,让他人可以获取用户数据(电子邮件地址、杂凑后的密码)、被删除的版本以及其他在wiki上被限制访问的数据。
-
-请考虑将数据库统一放置在某处,如<code>/var/lib/mediawiki/yourwiki</code>下。",
-       'config-oracle-def-ts' => '默认表空间:',
-       'config-oracle-temp-ts' => '临时表空间:',
-       'config-support-info' => 'MediaWiki支持以下数据库系统:
-
-$1
-
-如果您在下面列出的数据库系统中没有找到您希望使用的系统,请根据上方链向的指引启用支持。',
-       'config-support-mysql' => '* $1是MediaWiki的首选数据库,对它的支持最为完备([http://www.php.net/manual/en/mysql.installation.php 如何将对MySQL的支持编译进PHP中])',
-       'config-support-postgres' => '* $1是一种流行的开源数据库系统,可作为MySQL的替代([http://www.php.net/manual/en/pgsql.installation.php 如何将对PostgreSQL的支持编译进PHP中])。本程序中可能依然存在一些小而明显的错误,因此并不建议在生产环境中使用该数据库系统。',
-       'config-support-sqlite' => '* $1是一种轻量级的数据库系统,能被良好地支持。([http://www.php.net/manual/en/pdo.installation.php 如何将对SQLite的支持编译进PHP中],须使用PDO)',
-       'config-support-oracle' => '* $1是一种商用企业级的数据库。([http://www.php.net/manual/en/oci8.installation.php 如何将对OCI8的支持编译进PHP中])',
-       'config-header-mysql' => 'MySQL设置',
-       'config-header-postgres' => 'PostgreSQL设置',
-       'config-header-sqlite' => 'SQLite设置',
-       'config-header-oracle' => 'Oracle设置',
-       'config-invalid-db-type' => '无效的数据库类型',
-       'config-missing-db-name' => '您必须为“数据库名称”输入内容',
-       'config-missing-db-host' => '您必须为“数据库主机”输入内容',
-       'config-missing-db-server-oracle' => '您必须为“数据库透明网络底层(TNS)”输入内容',
-       'config-invalid-db-server-oracle' => '无效的数据库TNS“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)、下划线(_)和点号(.)。',
-       'config-invalid-db-name' => '无效的数据库名称“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)、下划线(_)和连字号(-)。',
-       'config-invalid-db-prefix' => '无效的数据库前缀“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)、下划线(_)和连字号(-)。',
-       'config-connection-error' => '$1。
-
-请检查下列的主机、用户名和密码设置后重试。',
-       'config-invalid-schema' => '无效的MediaWiki数据库模式“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)和下划线(_)。',
-       'config-db-sys-create-oracle' => '安装程序仅支持使用SYSDBA帐户创建新帐户。',
-       'config-db-sys-user-exists-oracle' => '用户帐户“$1”已经存在。SYSDBA仅可用于创建新帐户!',
-       'config-postgres-old' => '需要PostgreSQL $1或更新的版本,您的版本为$2。',
-       'config-sqlite-name-help' => '请为您的wiki指定一个用于标识的名称。请勿使用空格或连字号,该名称将被用作SQLite的数据文件名。',
-       'config-sqlite-parent-unwritable-group' => '由于父目录<code><nowiki>$2</nowiki></code>对网页服务器不可写,无法创建数据目录<code><nowiki>$1</nowiki></code>。
-
-安装程序已确定您网页服务器所使用的用户。请将<code><nowiki>$3</nowiki></code>目录设为对该用户可写以继续安装过程。在Unix/Linux系统中,您可以逐行输入下列命令:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => '由于父目录<code><nowiki>$2</nowiki></code>对网页服务器不可写,无法创建数据目录<code><nowiki>$1</nowiki></code>。
-
-安装程序无法确定您网页服务器所使用的用户。请将<code><nowiki>$3</nowiki></code>目录设为全局可写(对所有用户)以继续安装过程。在Unix/Linux系统中,您可以逐行输入下列命令:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => '创建数据目录“$1”时发生错误。请检查路径后重试。',
-       'config-sqlite-dir-unwritable' => '无法写入目录“$1”。请修改该目录的权限,使其对网页服务器可写后重试。',
-       'config-sqlite-connection-error' => '$1。
-
-请检查下列的数据目录和数据库名称后重试。',
-       'config-sqlite-readonly' => '文件<code>$1</code>不可写。',
-       'config-sqlite-cant-create-db' => '无法创建数据文件<code>$1</code>。',
-       'config-sqlite-fts3-downgrade' => 'PHP缺少FTS3支持,正在降级数据表',
-       'config-can-upgrade' => "在数据库中发现了MediaWiki的数据表。要将它们升级至MediaWiki $1,请点击'''继续'''。",
-       'config-upgrade-done' => "升级完成。
-
-现在您可以[$1 开始使用您的wiki]了。
-
-如果您需要重新生成<code>LocalSettings.php</code>文件,请点击下面的按钮。除非您的wiki出现了问题,我们'''不推荐'''您执行此操作。",
-       'config-upgrade-done-no-regenerate' => '升级完成。
-
-现在您可以[$1 开始使用您的wiki]了。',
-       'config-regenerate' => '重新生成LocalSettings.php →',
-       'config-show-table-status' => '<code>SHOW TABLE STATUS</code>语句执行失败!',
-       'config-unknown-collation' => "'''警告:'''数据库使用了无法识别的整理。",
-       'config-db-web-account' => '供网页访问使用的数据库帐号',
-       'config-db-web-help' => '请指定在wiki执行普通操作时,网页服务器用于连接数据库服务器的用户名和密码。',
-       'config-db-web-account-same' => '使用和安装程序相同的帐号',
-       'config-db-web-create' => '如果帐号不存在,则自动创建',
-       'config-db-web-no-create-privs' => '您指定给安装程序的帐号缺少创建帐号的权限,因此您指定的帐号必须已经存在。',
-       'config-mysql-engine' => '存储引擎:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''警告''':您选择了MyISAM作为MySQL的存储引擎,MediaWiki并不推荐您这么做,因为:
-* 它仅能通过表锁定来勉强支持并发
-* 与其他引擎相比,它更容易被损坏
-* MediaWiki代码库并不总会去处理MyISAM
-
-如果您的MySQL程序支持InnoDB,我们高度推荐您使用该引擎替代MyISAM。
-如果您的MySQL程序不支持InnoDB,请考虑升级。",
-       'config-mysql-only-myisam-dep' => "''''警告:'''MyISAM是MySQL唯一可用的存储引擎,但不适合用于MediaWiki,是由于:
-*由于只支持表级锁定,几乎不支持并发。
-*它比其他引擎更容易损坏。
-*MediaWiki代码不能总是按照预设地操作MyISAM。
-
-你的MySQL不支持InnoDB,是时候升级了。",
-       'config-mysql-engine-help' => "'''InnoDB'''通常是最佳选项,因为它对并发操作有着良好的支持。
-
-'''MyISAM'''在单用户或只读环境下可能会有更快的性能表现。但MyISAM数据库出错的概率一般要大于InnoDB数据库。",
-       'config-mysql-charset' => '数据库字符集:',
-       'config-mysql-binary' => '二进制',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "在'''二进制模式'''下,MediaWiki会将UTF-8编码的文本存于数据库的二进制字段中。相对于MySQL的UTF-8模式,这种方法效率更高,并允许您使用全范围的Unicode字符。
-
-在'''UTF-8模式'''下,MySQL将知道您数据使用的字符集,并能适当地提供和转换内容。但这样做您将无法在数据库中存储[//zh.wikipedia.org/wiki/基本多文种平面 基本多文种平面]以外的字符。",
-       'config-site-name' => 'Wiki的名称:',
-       'config-site-name-help' => '填入的内容会出现在浏览器的标题栏以及其他多处位置中。',
-       'config-site-name-blank' => '输入网站的名称。',
-       'config-project-namespace' => '项目名字空间:',
-       'config-ns-generic' => '项目',
-       'config-ns-site-name' => '与wiki名称相同:$1',
-       'config-ns-other' => '其他(自定义)',
-       'config-ns-other-default' => '我的Wiki',
-       'config-project-namespace-help' => "依循维基百科形成的惯例,许多wiki将他们的方针页面存放在与内容页面不同的“'''项目名字空间'''”中。所有位于该名字空间下的页面标题都会被冠以固定的前缀,您可以在此处指定这一前缀。传统上,这一前缀应与wiki的命名保持一致,但请勿在其中使用标点符号,如“#”或“:”。",
-       'config-ns-invalid' => '指定的名字空间“<nowiki>$1</nowiki>”无效,请为项目名字空间指定其他名称。',
-       'config-ns-conflict' => '指定的名字空间“<nowiki>$1</nowiki>”与默认的MediaWiki名字空间冲突。请指定一个不同的项目名字空间。',
-       'config-admin-box' => '管理员帐号',
-       'config-admin-name' => '您的名字:',
-       'config-admin-password' => '密码:',
-       'config-admin-password-confirm' => '确认密码:',
-       'config-admin-help' => '在此输入您想使用的用户名,例如“乔帮主”。您将使用该名称登录本wiki。',
-       'config-admin-name-blank' => '输入管理员的用户名。',
-       'config-admin-name-invalid' => '指定的用户名“<nowiki>$1</nowiki>”无效,请指定其他用户名。',
-       'config-admin-password-blank' => '输入管理员帐号的密码。',
-       'config-admin-password-same' => '密码不能和用户名相同。',
-       'config-admin-password-mismatch' => '两次输入的密码并不相同。',
-       'config-admin-email' => '电子邮件地址:',
-       'config-admin-email-help' => '输入电子邮件地址后,您可以收到此wiki上其他用户发来的电子邮件,并能重置您的密码,还可在监视列表中页面被更改时收到邮件通知。您可以将此字段留空。',
-       'config-admin-error-user' => '在创建用户名为“<nowiki>$1</nowiki>”的管理员帐号时发生内部错误。',
-       'config-admin-error-password' => '在为管理员“<nowiki>$1</nowiki>”设置密码时发生内部错误:<pre>$2</pre>',
-       'config-admin-error-bademail' => '您输入了无效的电子邮件地址。',
-       'config-subscribe' => '订阅[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 发行公告邮件列表]。',
-       'config-subscribe-help' => '此低流量的邮件列表仅用于发行公告,其中包括重要安全公告。请订阅该列表以便在新的版本推出时升级您的MediaWiki。',
-       'config-subscribe-noemail' => '您选择了订阅发行公告邮件列表,但没有提供电子邮件地址。请提供一个电子邮件地址以订阅邮件列表。',
-       'config-almost-done' => '您几乎已经完成了!现在您可以跳过剩下的配置流程并立即安装wiki。',
-       'config-optional-continue' => '多问我一些问题吧。',
-       'config-optional-skip' => '我已经不耐烦了,赶紧安装我的wiki。',
-       'config-profile' => '用户权限配置:',
-       'config-profile-wiki' => '开放的wiki',
-       'config-profile-no-anon' => '需要注册帐号',
-       'config-profile-fishbowl' => '编辑受限',
-       'config-profile-private' => '非公开wiki',
-       'config-profile-help' => "如果您允许尽量多的人编写wiki,网站上的内容会更加丰富。在MediaWiki中,您可以轻松地审查最近更改,并轻易回退掉新手或破坏者造成的损害。
-
-然而,许多人觉得让MediaWiki存在多种角色将更加好用;同时,要说服所有人都愿以wiki的方式作贡献并非一件易事。因此,您可以有以下选择:
-
-'''{{int:config-profile-wiki}}'''允许包括未登录用户在内的所有人编辑。'''{{int:config-profile-no-anon}}'''的wiki需要额外的注册流程,这有可能会阻碍随意贡献者。
-
-'''{{int:config-profile-fishbowl}}'''模式只允许获批准的用户编辑,但对公众开放页面浏览(包括历史记录)。'''{{int:config-profile-private}}'''则只允许获批准的用户浏览、编辑页面。
-
-安装完成后,您还可以对用户权限进行更多、更复杂的配置,参见[//www.mediawiki.org/wiki/Manual:User_rights 相关的使用手册]。",
-       'config-license' => '版权和许可证:',
-       'config-license-none' => '页脚无许可证',
-       'config-license-cc-by-sa' => '知识共享署名-相同方式分享',
-       'config-license-cc-by' => '知识共享署名',
-       'config-license-cc-by-nc-sa' => '知识共享署名-非商业性使用-相同方式共享',
-       'config-license-cc-0' => '知识共享Zero(公有领域)',
-       'config-license-gfdl' => 'GNU自由文档许可证1.3或更高版本',
-       'config-license-pd' => '公有领域',
-       'config-license-cc-choose' => '选择自定义的知识共享许可证',
-       'config-license-help' => "许多公共wiki会以[http://freedomdefined.org/Definition 自由许可证]的方式释放出编者的所有贡献。这有助于构建社区的主人翁意识,并能鼓励长期贡献。对于非公共wiki或公司wiki,这并非必要条件。
-
-如果您希望使用来自维基百科的内容,并希望维基百科能接受复制自您的wiki的内容,请选择'''知识共享署名-相同方式共享'''。
-
-GNU自由文档许可证是维基百科曾经使用过的许可证,并迄今有效。然而,该许可证难以理解,并会增加重用内容的难度。",
-       'config-email-settings' => '电子邮件设置',
-       'config-enable-email' => '启用出站电子邮件',
-       'config-enable-email-help' => '如果您希望使用电子邮件功能,请正确配置[http://www.php.net/manual/en/mail.configuration.php PHP的邮件设定]。如果您不需要任何电子邮件功能,请在此处禁用它。',
-       'config-email-user' => '启用用户到用户的电子邮件',
-       'config-email-user-help' => '允许所有用户互发邮件,假若他们启用了该功能。',
-       'config-email-usertalk' => '启用用户讨论页通知',
-       'config-email-usertalk-help' => '允许用户收到用户讨论页被修改的通知,假若他们启用了该功能。',
-       'config-email-watchlist' => '启用监视列表通知',
-       'config-email-watchlist-help' => '允许用户收到与其监视列表有关的通知,假若他们启用了该功能。',
-       'config-email-auth' => '启用电子邮件身份验证',
-       'config-email-auth-help' => "如果启用此选项,在用户设置或修改电子邮件地址时,就会收到一封邮件,内含确认电子地址的链接。只有经过身份验证的电子邮件地址,才能收到来自其他用户的电子邮件,或任何修改通知的邮件。'''建议'''公开wiki启用本选项,以防对电子邮件功能的滥用。",
-       'config-email-sender' => '回复电子邮件地址:',
-       'config-email-sender-help' => '输入要用来发送出站电子邮件的地址,该地址将会收到被拒收的邮件。许多邮件服务器要求域名部分必须有效。',
-       'config-upload-settings' => '图像和文件上传',
-       'config-upload-enable' => '启用文件上传',
-       'config-upload-help' => '文件上传可能会将您的服务器暴露在安全风险下。有关更多的信息,请参阅手册的[//www.mediawiki.org/wiki/Manual:Security 安全部分]。
-
-要启用文件上传,请先将MediaWiki根目录下的<code>images</code>子目录更改为对web服务器可写,然后再启用此选项。',
-       'config-upload-deleted' => '已删除文件的目录:',
-       'config-upload-deleted-help' => '指定用于存放被删除文件的目录。理想情况下,该目录不应能通过web访问。',
-       'config-logo' => '标志URL:',
-       'config-logo-help' => '在MediaWiki的默认外观中,左侧栏菜单之上有一块135x160像素的标志区。请上传一幅相应大小的图像,并在此输入URL。
-
-你可以用<code>$wgStylePath</code>或<code>$wgScriptPath</code>来表示相对于这些位置的路径。
-
-如果您不希望使用标志,请将本处留空。',
-       'config-instantcommons' => '启用即时共享资源',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons 即时共享资源]可以让wiki使用来自[//commons.wikimedia.org/ 维基共享资源]网站的图像、音频和其他媒体文件。要启用该功能,MediaWiki必须能够访问互联网。
-
-有关此功能的详细信息,包括如何将其他wiki网站设为具有类似共享功能的方法,请参考[//mediawiki.org/wiki/Manual:$wgForeignFileRepos 手册]。',
-       'config-cc-error' => '知识共享许可证挑选器无法找到结果,请手动输入许可证的名称。',
-       'config-cc-again' => '重新挑选……',
-       'config-cc-not-chosen' => '选择您希望使用的知识共享许可证,并点击“继续”。',
-       'config-advanced-settings' => '高级设置',
-       'config-cache-options' => '对象缓存设置:',
-       'config-cache-help' => '对象缓存可通过缓存频繁使用的数据来提高MediaWiki的速度。高度推荐中到大型的网站启用该功能,小型网站亦能从其中受益。',
-       'config-cache-none' => '无缓存(不影响功能,但对较大型的wiki网站会有速度影响)',
-       'config-cache-accel' => 'PHP对象缓存(APC、XCache或WinCache)',
-       'config-cache-memcached' => '使用Memcached(需要另外安装并配置)',
-       'config-memcached-servers' => 'Memcached服务器:',
-       'config-memcached-help' => '用于Memcached的IP地址列表。请保持每行一条,并指定要使用的端口。例如:
-127.0.0.1:11211
-192.168.1.25:1234',
-       'config-memcache-needservers' => '您选择了Memcached作为您的缓存,但并未指定任何服务器。',
-       'config-memcache-badip' => '您为Memcached输入了无效的IP地址:$1。',
-       'config-memcache-noport' => '您没有指定Memcached服务器的端口:$1。如果您不清楚端口是多少,默认值为11211。',
-       'config-memcache-badport' => 'Memcached的端口号应该在$1到$2之间。',
-       'config-extensions' => '扩展',
-       'config-extensions-help' => '已在您的<code>./extensions</code>目录中发现下列扩展。
-
-您可能要对它们进行额外的配置,但您现在可以启用它们。',
-       'config-install-alreadydone' => "'''警告:'''您似乎已经安装了MediaWiki,并试图重新安装它。请前往下一个页面。",
-       'config-install-begin' => '点击“{{int:config-continue}}”后,您将开始安装MediaWiki。如果您还想对配置作一些修改,请点击“{{int:config-back}}”。',
-       'config-install-step-done' => '完成',
-       'config-install-step-failed' => '失败',
-       'config-install-extensions' => '正在启用扩展',
-       'config-install-database' => '正在配置数据库',
-       'config-install-schema' => '创建架构',
-       'config-install-pg-schema-not-exist' => 'PostgreSQL 架构不存在',
-       'config-install-pg-schema-failed' => '创建数据表失败。请确保用户“$1”拥有写入模式“$2”的权限。',
-       'config-install-pg-commit' => '正在提交更改',
-       'config-install-pg-plpgsql' => '正在检查PL/pgSQL语言',
-       'config-pg-no-plpgsql' => '您需要为数据库$1安装PL/pgSQL语言',
-       'config-pg-no-create-privs' => '为安装程序指定的帐号缺少创建帐号的权限。',
-       'config-pg-not-in-role' => '您指定为web用户的帐户已经存在。
-您给本程序指定的帐户不是超级用户,也不是web用户角色的成员,所以它不能创建web用户所拥有的对象。
-
-MediaWiki当前需要使用由web用户所有的表。请指定另一个web帐户名称,或点击“后退”并指定具有适当权限的安装用户。',
-       'config-install-user' => '正在创建数据库用户',
-       'config-install-user-alreadyexists' => '用户“$1”已存在',
-       'config-install-user-create-failed' => '创建用户“$1”失败:$2',
-       'config-install-user-grant-failed' => '授予用户“$1”权限失败:$2',
-       'config-install-user-missing' => '指定的用户“$1”不存在。',
-       'config-install-user-missing-create' => '指定的用户“$1”不存在。如果您想要创建一名,请点选“创建帐户”下面的复选框。',
-       'config-install-tables' => '正在创建数据表',
-       'config-install-tables-exist' => "'''警告''':MediaWiki的数据表似乎已经存在,跳过创建。",
-       'config-install-tables-failed' => "'''错误''':创建数据表出错,下为错误信息:$1",
-       'config-install-interwiki' => '正在填充默认的跨wiki数据表',
-       'config-install-interwiki-list' => '找不到文件<code>interwiki.list</code>。',
-       'config-install-interwiki-exists' => "'''警告''':跨wiki数据表似乎已有内容,跳过默认列表。",
-       'config-install-stats' => '初始化统计',
-       'config-install-keys' => '生成密钥中',
-       'config-insecure-keys' => "'''警告''':在安装过程中生成的{{PLURAL:$2|安全密钥|安全密钥}}($1){{PLURAL:$2|并|并}}不一定安全。请考虑手动更改{{PLURAL:$2|它|它们}}。",
-       'config-install-sysop' => '正在创建管理员用户帐号',
-       'config-install-subscribe-fail' => '无法订阅mediawiki-announce:$1',
-       'config-install-subscribe-notpossible' => '没有安装cURL,allow_url_fopen也不可用。',
-       'config-install-mainpage' => '正在创建显示默认内容的首页',
-       'config-install-extension-tables' => '正在为已启用扩展创建数据表',
-       'config-install-mainpage-failed' => '无法插入首页:$1',
-       'config-install-done' => "'''恭喜!'''
-您已经成功地安装了MediaWiki。
-
-安装程序已经生成了<code>LocalSettings.php</code>文件,其中包含了您所有的配置。
-
-您需要下载该文件,并将其放在您wiki的根目录(index.php的同级目录)中。稍后下载将自动开始。
-
-如果浏览器没有提示您下载,或者您取消了下载,您可以点击下面的链接重新开始下载:
-
-$3
-
-'''注意''':如果您现在不完成本步骤,而是没有下载便退出了安装过程,此后您将无法获得自动生成的配置文件。
-
-当本步骤完成后,您可以 '''[$2 进入您的wiki]'''。",
-       'config-download-localsettings' => '下载<code>LocalSettings.php</code>',
-       'config-help' => '帮助',
-       'config-nofile' => '找不到文件“$1”。它是否已被删除?',
-       'mainpagetext' => "'''已成功安装MediaWiki。'''",
-       'mainpagedocfooter' => '请查阅[//meta.wikimedia.org/wiki/Help:Contents 用户指南]以获取使用本wiki软件的信息!
-
-== 入门 ==
-* [//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发布邮件列表]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources 本地化MediaWiki到您的语言]',
-);
-
-/** Traditional Chinese (中文(繁體)‎)
- * @author Anthony Fok
- * @author Hzy980512
- * @author Justincheng12345
- * @author Liangent
- * @author Mark85296341
- * @author Simon Shek
- * @author 아라
- */
-$messages['zh-hant'] = array(
-       'config-desc' => 'MediaWiki安裝程序',
-       'config-title' => 'MediaWiki $1配置',
-       'config-information' => '資訊',
-       'config-localsettings-upgrade' => '已檢測到<code>LocalSettings.php</code>文件。要升級該配置,請在下面的框中輸入<code>$wgUpgradeKey</code>的值。您可以在<code>LocalSettings.php</code>中找到它。',
-       'config-localsettings-cli-upgrade' => '已檢測到<code>LocalSettings.php</code>文件。要升級該配置,請直接執行<code>update.php</code>。',
-       'config-localsettings-key' => '升級密鑰:',
-       'config-localsettings-badkey' => '您提供的密鑰不正確。',
-       'config-upgrade-key-missing' => '檢測到MediaWiki的配置已經存在。若要升級該配置,請將下面一行文本添加到<code>LocalSettings.php</code>的底部:
-
-$1',
-       'config-localsettings-incomplete' => '當前的<code>LocalSettings.php</code>可能並不完整,因為變量$1沒有設置。請在<code>LocalSettings.php</code>設置該變量,並單擊“{{int:Config-continue}}”。',
-       'config-localsettings-connection-error' => '在使用<code>LocalSettings.php</code>或<code>AdminSettings.php</code>中指定的設置連接數據庫時發生錯誤。請修復相應設置並重試。
-
-$1',
-       'config-session-error' => '啟動會話出錯:$1',
-       'config-session-expired' => '您的會話數據可能已經過期,當前會話的使用期限被設定為$1。您可以在php.ini中設置<code>session.gc_maxlifetime</code>來延長此期限,並重新啟動本配置程序。',
-       'config-no-session' => '您的會話數據丟失了!請檢查php.ini並確保<code>session.save_path</code>被設置為適當的目錄。',
-       'config-your-language' => '您的語言:',
-       'config-your-language-help' => '選擇一個要使用的語言在安裝過程中。',
-       'config-wiki-language' => 'Wiki 語言:',
-       'config-wiki-language-help' => '選擇將要安裝的wiki在多數情況下使用的語言。',
-       'config-back' => '←返回',
-       'config-continue' => '繼續→',
-       'config-page-language' => '語言',
-       'config-page-welcome' => '歡迎您來到 MediaWiki!',
-       'config-page-dbconnect' => '連接到資料庫',
-       'config-page-upgrade' => '升級現有的安裝',
-       'config-page-dbsettings' => '資料庫設定',
-       'config-page-name' => '名稱',
-       'config-page-options' => '選項',
-       'config-page-install' => '安裝',
-       'config-page-complete' => '完成!',
-       'config-page-restart' => '重新安裝',
-       'config-page-readme' => '讀我',
-       'config-page-releasenotes' => '發布說明',
-       'config-page-copying' => '複製',
-       'config-page-upgradedoc' => '升級',
-       'config-page-existingwiki' => '已有wiki',
-       'config-help-restart' => '是否要清除所有已輸入且保存的數據,並重新啟動安裝過程嗎?',
-       'config-restart' => '是的,重新啟動',
-       'config-welcome' => '=== 環境檢查 ===
-對當前環境是否適合安裝MediaWiki作基本的檢查。如果您在安裝過程中需要幫助,請提供這些檢查的結果。',
-       'config-copyright' => "=== 版權和條款 ===
-
-\$1
-
-本程序為自由軟件;您可依據自由軟件基金會所發表的GNU通用公共授權條款規定,就本程序再為發布與/或修改;無論您依據的是本授權的第二版或(您自行選擇的)任一日後發行的版本。
-
-本程序是基於使用目的而加以發布,然而'''不負任何擔保責任''';亦無對'''適售性'''或'''特定目的適用性'''所為的默示性擔保。詳情請參照GNU通用公共授權。
-
-您應已收到附隨於本程序的<doclink href=\"Copying\">GNU通用公共授權的副本</doclink>;如果沒有,請寫信至自由軟件基金會:59 Temple Place - Suite 330, Boston, Ma 02111-1307, USA,或[http://www.gnu.org/copyleft/gpl.html 在線閱讀]。",
-       'config-sidebar' => '* [//www.mediawiki.org/wiki/MediaWiki/zh-hans MediaWiki首頁]
-* [//www.mediawiki.org/wiki/Help:Contents/zh-hans 用戶指南]
-* [//www.mediawiki.org/wiki/Manual:Contents 管理員指南]
-* [//www.mediawiki.org/wiki/Manual:FAQ/zh-hans 常見問題解答]
-----
-* <doclink href=Readme>自述文件</doclink>
-* <doclink href=ReleaseNotes>發行說明</doclink>
-* <doclink href=Copying>協議副本</doclink>
-* <doclink href=UpgradeDoc>升級</doclink>',
-       'config-env-good' => '環境檢查已經完成。您可以安裝MediaWiki。',
-       'config-env-bad' => '環境檢查已經完成。您不能安裝MediaWiki。',
-       'config-env-php' => 'PHP $1 已安裝。',
-       'config-env-php-toolow' => '已安裝 PHP $1;但是,MediaWiki 需要 PHP $2 或更高版本。',
-       'config-unicode-using-utf8' => '將使用 Brion Vibber 的 utf8_normalize.so 以實作 Unicode 正規化。',
-       'config-unicode-using-intl' => '將使用 [http://pecl.php.net/intl intl PECL 延伸函式庫]以實作 Unicode 正規化。',
-       'config-unicode-pure-php-warning' => "'''警告:'''因為尚未安裝 [http://pecl.php.net/intl intl PECL 延伸函式庫]以處理 Unicode 正規化,故只能退而採用較慢的純 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-no-db' => '找不到合適的數據庫驅動!您需要為PHP安裝數據庫驅動。目前支持以下數據庫:$1。
-
-如果您正在使用共享主機,請向您的主機提供商申請安裝合適的數據庫驅動。如果您通過自行編譯安裝的PHP,請對其進行重新配置以啟用數據庫客戶端,例如使用<code>./configure --with-mysql</code>。如果您通過Debian或Ubuntu包安裝的PHP,您還需要安裝php5-mysql模塊。',
-       'config-outdated-sqlite' => "'''警告''':您已安裝SQLite $1,但是它的版本低於最低要求版本$2。因此您無法選擇SQLite。",
-       '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]被啟用!'''
-此選項會無法預測地破壞輸入的數據,請將其禁用,否則您將不能安裝或使用MediaWiki。",
-       'config-magic-quotes-sybase' => "'''致命錯誤:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase]被啟用!'''
-此選項會無法預測地破壞輸入的數據,請將其禁用,否則您將不能安裝或使用MediaWiki。",
-       'config-mbstring' => "'''致命錯誤:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]被啟用!'''
-此選項會導致錯誤並不可預測地破壞數據,請將其禁用,否則您將不能安裝或使用MediaWiki。",
-       'config-ze1' => "'''致命錯誤:[http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]被啟用!'''
-此選項將導致MediaWiki出現極其嚴重的故障,請將其禁用,否則您將不能安裝或使用MediaWiki。",
-       'config-safe-mode' => "'''警告:'''PHP的[http://www.php.net/features.safe-mode 安全模式]已啟用。它可能會導致一些問題,尤其在對文件上傳和數學公式<code>math</code>的支持方面。",
-       'config-xml-bad' => '缺少PHP的XML模塊。MediaWiki需要使用該模塊提供的函數,在當前配置下將無法工作。如果您正在使用Mandrake Linux,請安裝php-xml包。',
-       'config-pcre' => '可能缺少PCRE的支持模塊。MediaWiki的運行需要兼容於Perl的正則表達式函數。',
-       'config-pcre-no-utf8' => "'''致命錯誤''':PHP的PCRE模塊在編譯時可能沒有包含PCRE_UTF8支持。MediaWiki需要UTF-8支持才能正常工作。",
-       'config-memory-raised' => 'PHP的內存使用上限<code>memory_limit</code>為$1,自動提升到$2。',
-       'config-memory-bad' => "'''警告:'''PHP的內存使用上限<code>memory_limit</code>為$1。該設定可能過低,並導致安裝失敗!",
-       'config-ctype' => "'''毀滅性錯誤''':PHP必須有[http://www.php.net/manual/en/ctype.installation.php Ctype 擴展]來支持編譯。",
-       '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],無法啟用對象緩存。
-Object caching is not enabled.",
-       'config-mod-security' => "'''警告''':您的服務器已啟動[http://modsecurity.org/ mod_security]。若其配置錯誤, 會導致MediaWiki和其他軟件的錯誤並允許用戶任意發布內容。如果您遇到任何錯誤,請查閱[http://modsecurity.org/documentation/ mod_security文檔]或聯繫您的客服。",
-       'config-diff3-bad' => '找不到GNU diff3。',
-       'config-git' => '發現Git版本控制軟件:<code>$1</code>。',
-       'config-git-bad' => '無法找到Git版本控制軟件。',
-       'config-imagemagick' => '已找到ImageMagick:<code>$1</code>。如果你啟用了上傳功能,縮略圖功能也將被啟用。',
-       'config-gd' => '已找到內建的GD圖形庫。如果你啟用了上傳功能,縮略圖功能也將被啟用。',
-       'config-no-scaling' => '找不到GD庫或ImageMagick。縮略圖功能將不可用。',
-       'config-no-uri' => "'''錯誤:'''無法確定當前的URI。安裝已中斷。",
-       '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>存在允許執行任意腳本的漏洞。儘管MediaWiki會對所有已上傳的文件進行安全檢查,但我們仍然強烈建議您在啟用上傳功能前[//www.mediawiki.org/wiki/Manual:Security#Upload_security 關閉該安全漏洞]。",
-       'config-no-cli-uploads-check' => "'''警告''':在CLI安裝過程中,沒有對您的默認上傳目錄(<code>$1</code>)進行執行任意腳本的漏洞檢查。",
-       'config-brokenlibxml' => '您的系統安裝的PHP和libxml2版本組合存在故障,並可能在MediaWiki和其他web應用程序中造成隱藏的數據損壞。請將PHP升級到5.2.9或以上,libxml2升級到2.7.3或以上([//bugs.php.net/bug.php?id=45996 PHP的故障報告])。安裝已中斷。',
-       'config-using531' => '由於函數<code>__call()</code>的引用參數存在故障,PHP $1和MediaWiki無法兼容。請升級到PHP 5.3.2或更高版本,或降級到PHP 5.3.0以修復該問題。安裝已中斷。',
-       'config-suhosin-max-value-length' => 'Suhosin已經安裝並將GET請求的參數長度限制在$1字節。MediaWiki的ResourceLoader部件可以在此限制下正常工作,但其性能會被降低。如果可能,請在<code>php.ini</code>中將<code>suhosin.get.max_value_length</code>設為1024或更高值,並在LocalSettings.php中將<code>$wgResourceLoaderMaxQueryLength</code>設為同一值。', # Fuzzy
-       'config-db-type' => '資料庫類型:',
-       'config-db-host' => '資料庫主機:',
-       'config-db-host-help' => '如果您的數據庫在別的服務器上,請在這裡輸入它的域名或IP地址。
-
-如果您在使用共享網站套餐,您的網站商應該已在他們的控制面板中給您數據庫信息了。
-
-如果您在Windows中安裝並且使用MySQL,“localhost”可能無效。如果確實無效,請輸入“127.0.0.1”作為IP地址。
-
-如果您在使用PostgreSQL,並且要用Unix socket來連接,請留空。',
-       'config-db-host-oracle' => '資料庫的 TNS:',
-       'config-db-host-oracle-help' => '請輸入合法的[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 本地連接名],並確保tnsnames.ora文件對本安裝程序可見。<br />如果您使用的客戶端庫為10g或更新的版本,您還可以使用[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 簡單連接名方法](easy connect naming method)。',
-       'config-db-wiki-settings' => '識別這個 Wiki',
-       'config-db-name' => '資料庫名稱:',
-       'config-db-name-help' => '請輸入一個可以標識您的wiki的名稱。請勿使用空格。
-
-如果您正在使用共享web主機,您的主機提供商或會給您指定一個數據庫名稱,或會讓您通過控制面板創建數據庫。',
-       'config-db-name-oracle' => '資料庫架構:',
-       'config-db-account-oracle-warn' => '現有三種已支持方案可以將Oracle設置為後端數據庫:
-
-如果您希望在安裝過程中創建數據庫帳戶,請為安裝程序提供具有SYSDBA角色的數據庫帳戶,並為web訪問帳戶指定所需身份證明;否則您可以手動創建web訪問的賬戶並僅須提供該帳戶(確保帳戶已有創建方案對象(schema object)的所需權限);或提供兩個不同的帳戶,其一具有創建權限,另一則被限制為web訪問。
-
-具有所需權限賬戶的創建腳本存放於本程序的“maintenance/oracle/”目錄下。請注意,使用受限制的帳戶將禁用默認帳戶的所有維護性功能。',
-       'config-db-install-account' => '用於安裝的用戶帳號',
-       'config-db-username' => '資料庫使用者名稱:',
-       'config-db-password' => '資料庫密碼:',
-       'config-db-password-empty' => '請為新數據庫用戶$1輸入密碼。儘管您可以創建不使用密碼的用戶,但這樣做並不安全。',
-       'config-db-install-username' => '請輸入在安裝過程中用於連接數據庫的用戶名。請勿輸入MediaWiki帳號的用戶名,請輸入您數據庫的用戶名。',
-       'config-db-install-password' => '請輸入在安裝過程中用於連接數據庫的密碼。請勿輸入MediaWiki帳號的密碼,請輸入您數據庫的密碼。',
-       'config-db-install-help' => '請輸入在安裝過程中用於連接數據庫的用戶名和密碼。',
-       'config-db-account-lock' => '在普通操作中使用相同的用戶名和密碼',
-       'config-db-wiki-account' => '用於普通操作的用戶帳號',
-       'config-db-wiki-help' => '輸入在普通的wiki操作中(安裝完成後)將用於連接數據庫的用戶名和密碼。如果該帳號並不存在,而安裝帳號具有足夠的權限,該用戶帳號會被自動創建,並被賦予足以運行此wiki的最低權限。',
-       'config-db-prefix' => '數據庫表前綴:',
-       'config-db-prefix-help' => '如果您需要在多個wiki之間(或在MediaWiki與其他web應用程序之間)共享一個數據庫,您可以通過添加前綴的方式來避免出現表名稱的衝突。請勿使用空格。
-
-此字段通常可留空。',
-       'config-db-charset' => '數據庫字符集',
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 二進制',
-       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
-       'config-charset-mysql4' => 'MySQL 4.0 UTF-8(向後兼容)',
-       'config-charset-help' => "'''警告:'''如果您在MySQL 4.1+中使用'''向後兼容的UTF-8'''字符集,並在之後使用<code>mysqldump</code>備份了數據庫,則可能損壞所有的非ASCII字符,從而不可逆地破壞您的備份!
-
-在'''二進制模式'''下,MediaWiki會將UTF-8編碼的文本存於數據庫的二進制字段中。相對於MySQL的UTF-8模式,這種方法效率更高,並允許您使用全範圍的Unicode字符。
-
-在'''UTF-8模式'''下,MySQL將知道您數據使用的字符集,並能適當地提供和轉換內容。但這樣做您將無法在數據庫中存儲[//zh.wikipedia.org/wiki/基本多文種平面 基本多文種平面]以外的字符。",
-       'config-mysql-old' => '需要MySQL $1或更新的版本,您的版本為$2。',
-       'config-db-port' => '數據庫端口:',
-       'config-db-schema' => 'MediaWiki的數據庫模式',
-       'config-db-schema-help' => '此數據庫模式通常是正確的,請在有明確需求時才改動之。',
-       'config-pg-test-error' => "無法連接到數據庫'''$1''':$2",
-       'config-sqlite-dir' => 'SQLite 的資料目錄:',
-       'config-sqlite-dir-help' => "SQLite會將所有的數據存儲於單一文件中。
-
-您所提供的目錄必須在安裝過程中對網頁服務器可寫。
-
-該目錄'''不應'''允許通過web訪問,因此我們不會將數據文件和PHP文件放在一起。
-
-安裝程序在創建數據文件時,亦會在相同目錄下創建<code>.htaccess</code>以控制權限。假若此等控制失效,則可能會將您的數據文件暴露於公共空間,讓他人可以獲取用戶數據(電子郵件地址、雜湊後的密碼)、被刪除的版本以及其他在wiki上被限制訪問的數據。
-
-請考慮將數據庫統一放置在某處,如<code>/var/lib/mediawiki/yourwiki</code>下。",
-       'config-oracle-def-ts' => '默認表空間:',
-       'config-oracle-temp-ts' => '臨時表空間:',
-       'config-support-info' => 'MediaWiki支持以下數據庫系統:
-
-$1
-
-如果您在下面列出的數據庫系統中沒有找到您希望使用的系統,請根據上方鏈向的指引啟用支持。',
-       'config-support-mysql' => '* $1是MediaWiki的首選數據庫,對它的支持最為完備([http://www.php.net/manual/en/mysql.installation.php 如何將對MySQL的支持編譯進PHP中])',
-       'config-support-postgres' => '* $1是一種流行的開源數據庫系統,可作為MySQL的替代([http://www.php.net/manual/en/pgsql.installation.php 如何將對PostgreSQL的支持編譯進PHP中])。本程序中可能依然存在一些小而明顯的錯誤,因此並不建議在生產環境中使用該數據庫系統。',
-       'config-support-sqlite' => '* $1是一種輕量級的數據庫系統,能被良好地支持。([http://www.php.net/manual/en/pdo.installation.php 如何將對SQLite的支持編譯進PHP中],須使用PDO)',
-       'config-support-oracle' => '* $1是一種商用企業級的數據庫。([http://www.php.net/manual/en/oci8.installation.php 如何將對OCI8的支持編譯進PHP中])',
-       'config-header-mysql' => 'MySQL 的設定',
-       'config-header-postgres' => 'PostgreSQL設置',
-       'config-header-sqlite' => 'SQLite 的設定',
-       'config-header-oracle' => '甲骨文設定',
-       'config-invalid-db-type' => '無效的資料庫類型',
-       'config-missing-db-name' => '您必須為“數據庫名稱”輸入內容',
-       'config-missing-db-host' => '您必須為“數據庫主機”輸入內容',
-       'config-missing-db-server-oracle' => '您必須為“數據庫透明網絡底層(TNS)”輸入內容',
-       'config-invalid-db-server-oracle' => '無效的數據庫TNS「$1」。
-請只使用「TNS Name」或「Easy Connect」 字串([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle命名法])',
-       'config-invalid-db-name' => '無效的數據庫名稱“$1”。請只使用ASCII字母(a-z、A-Z)、數字(0-9)、下劃線(_)和連字號(-)。',
-       'config-invalid-db-prefix' => '無效的數據庫前綴“$1”。請只使用ASCII字母(a-z、A-Z)、數字(0-9)、下劃線(_)和連字號(-)。',
-       'config-connection-error' => '$1。
-
-請檢查下列的主機、用戶名和密碼設置後重試。',
-       'config-invalid-schema' => '無效的MediaWiki數據庫模式“$1”。請只使用ASCII字母(a-z、A-Z)、數字(0-9)和下劃線(_)。',
-       'config-db-sys-create-oracle' => '安裝程序僅支持使用SYSDBA帳戶創建新帳戶。',
-       'config-db-sys-user-exists-oracle' => '用戶帳戶“$1”已經存在。SYSDBA僅可用於創建新帳戶!',
-       'config-postgres-old' => '需要PostgreSQL $1或更新的版本,您的版本為$2。',
-       'config-sqlite-name-help' => '請為您的wiki指定一個用於標識的名稱。請勿使用空格或連字號,該名稱將被用作SQLite的數據文件名。',
-       'config-sqlite-parent-unwritable-group' => '由於父目錄<code><nowiki>$2</nowiki></code>對網頁服務器不可寫,無法創建數據目錄<code><nowiki>$1</nowiki></code>。
-
-安裝程序已確定您網頁服務器所使用的用戶。請將<code><nowiki>$3</nowiki></code>目錄設為對該用戶可寫以繼續安裝過程。在Unix/Linux系統中,您可以逐行輸入下列命令:
-
-<pre>cd $2
-mkdir $3
-chgrp $4 $3
-chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => '由於父目錄<code><nowiki>$2</nowiki></code>對網頁服務器不可寫,無法創建數據目錄<code><nowiki>$1</nowiki></code>。
-
-安裝程序無法確定您網頁服務器所使用的用戶。請將<code><nowiki>$3</nowiki></code>目錄設為全局可寫(對所有用戶)以繼續安裝過程。在Unix/Linux系統中,您可以逐行輸入下列命令:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => '創建數據目錄“$1”時發生錯誤。請檢查路徑後重試。',
-       'config-sqlite-dir-unwritable' => '無法寫入目錄“$1”。請修改該目錄的權限,使其對網頁服務器可寫後重試。',
-       'config-sqlite-connection-error' => '$1。
-
-請檢查下列的數據目錄和數據庫名稱後重試。',
-       'config-sqlite-readonly' => '文件<code>$1</code>不可寫。',
-       'config-sqlite-cant-create-db' => '無法創建數據文件<code>$1</code>。',
-       'config-sqlite-fts3-downgrade' => 'PHP缺少FTS3支持,正在降級數據表',
-       'config-can-upgrade' => "在數據庫中發現了MediaWiki的數據表。要將它們升級至MediaWiki $1,請點擊'''繼續'''。",
-       'config-upgrade-done' => "升級完成。
-
-現在您可以[$1 開始使用您的wiki]了。
-
-如果您需要重新生成<code>LocalSettings.php</code>文件,請點擊下面的按鈕。除非您的wiki出現了問題,我們'''不推薦'''您執行此操作。",
-       'config-upgrade-done-no-regenerate' => '升級完成。
-
-現在您可以[$1 開始使用您的wiki]了。',
-       'config-regenerate' => '重新生成LocalSettings.php →',
-       'config-show-table-status' => '查詢<code>SHOW TABLE STATUS</code>失敗!',
-       'config-unknown-collation' => "'''警告:'''數據庫使用了無法識別的整理。",
-       'config-db-web-account' => '供網頁訪問使用的數據庫帳號',
-       'config-db-web-help' => '請指定在wiki執行普通操作時,網頁服務器用於連接數據庫服務器的用戶名和密碼。',
-       'config-db-web-account-same' => '使用和安裝程序相同的帳號',
-       'config-db-web-create' => '建立帳號,如果它不存在',
-       'config-db-web-no-create-privs' => '您指定給安裝程序的帳號缺少創建帳號的權限,因此您指定的帳號必須已經存在。',
-       'config-mysql-engine' => '存儲引擎:',
-       'config-mysql-innodb' => 'InnoDB',
-       'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''警告''':您選擇了MyISAM作為MySQL的存儲引擎,MediaWiki並不推薦您這麼做,因為:
-* 它僅能通過表鎖定來勉強支持並發
-* 與其他引擎相比,它更容易被損壞
-* MediaWiki代碼庫並不總會去處理MyISAM
-
-如果您的MySQL程序支持InnoDB,我們高度推薦您使用該引擎替代MyISAM。
-如果您的MySQL程序不支持InnoDB,請考慮升級。",
-       'config-mysql-engine-help' => "'''InnoDB'''通常是最佳選項,因為它對並發操作有着良好的支持。
-
-'''MyISAM'''在單用戶或只讀環境下可能會有更快的性能表現。但MyISAM數據庫出錯的概率一般要大於InnoDB數據庫。",
-       'config-mysql-charset' => '資料庫字符集:',
-       'config-mysql-binary' => '二進制',
-       'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "在'''二進制模式'''下,MediaWiki會將UTF-8編碼的文本存於數據庫的二進制字段中。相對於MySQL的UTF-8模式,這種方法效率更高,並允許您使用全範圍的Unicode字符。
-
-在'''UTF-8模式'''下,MySQL將知道您數據使用的字符集,並能適當地提供和轉換內容。但這樣做您將無法在數據庫中存儲[//zh.wikipedia.org/wiki/基本多文種平面 基本多文種平面]以外的字符。",
-       'config-site-name' => 'Wiki的名稱:',
-       'config-site-name-help' => '填入的內容會出現在瀏覽器的標題欄以及其他多處位置中。',
-       'config-site-name-blank' => '輸入站點名稱。',
-       'config-project-namespace' => '項目名字空間:',
-       'config-ns-generic' => '項目',
-       'config-ns-site-name' => '與wiki名稱相同:$1',
-       'config-ns-other' => '其他(請註明)',
-       'config-ns-other-default' => '我的Wiki',
-       'config-project-namespace-help' => "依循維基百科形成的慣例,許多wiki將他們的方針頁面存放在與內容頁面不同的“'''項目名字空間'''”中。所有位於該名字空間下的頁面標題都會被冠以固定的前綴,您可以在此處指定這一前綴。傳統上,這一前綴應與wiki的命名保持一致,但請勿在其中使用標點符號,如“#”或“:”。",
-       'config-ns-invalid' => '指定的名字空間“<nowiki>$1</nowiki>”無效,請為項目名字空間指定其他名稱。',
-       'config-ns-conflict' => '指定的名字空間“<nowiki>$1</nowiki>”與默認的MediaWiki名字空間衝突。請指定一個不同的項目名字空間。',
-       'config-admin-box' => '管理員帳號',
-       'config-admin-name' => '您的名字:',
-       'config-admin-password' => '密碼:',
-       'config-admin-password-confirm' => '再次輸入密碼:',
-       'config-admin-help' => '在此輸入您想使用的用戶名,例如“喬幫主”。您將使用該名稱登錄本wiki。',
-       'config-admin-name-blank' => '輸入管理員的使用者名稱。',
-       'config-admin-name-invalid' => '指定的用戶名“<nowiki>$1</nowiki>”無效,請指定其他用戶名。',
-       'config-admin-password-blank' => '輸入管理員帳號密碼。',
-       'config-admin-password-same' => '密碼不能與使用者名稱相同。',
-       'config-admin-password-mismatch' => '兩次輸入的密碼並不相同。',
-       'config-admin-email' => '電郵地址:',
-       'config-admin-email-help' => '輸入電子郵件地址後,您可以收到此wiki上其他用戶發來的電子郵件,並能重置您的密碼,還可在監視列表中頁面被更改時收到郵件通知。您可以將此字段留空。',
-       'config-admin-error-user' => '在創建用戶名為“<nowiki>$1</nowiki>”的管理員帳號時發生內部錯誤。',
-       'config-admin-error-password' => '在為管理員“<nowiki>$1</nowiki>”設置密碼時發生內部錯誤:<pre>$2</pre>',
-       'config-admin-error-bademail' => '你輸入了一個無效的電子郵件地址。',
-       'config-subscribe' => '訂閱[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 發行公告郵件列表]。',
-       'config-subscribe-help' => '此低流量的郵件列表僅用於發行公告,其中包括重要安全公告。請訂閱該列表以便在新的版本推出時升級您的MediaWiki。',
-       'config-subscribe-noemail' => '您選擇了訂閱發行公告郵件列表,但沒有提供電子郵件地址。請提供一個電子郵件地址以訂閱郵件列表。',
-       'config-almost-done' => '您幾乎已經完成了!現在您可以跳過剩下的配置流程並立即安裝wiki。',
-       'config-optional-continue' => '多問我一些問題吧。',
-       'config-optional-skip' => '我已經不耐煩了,趕緊安裝我的wiki。',
-       'config-profile' => '用戶權限配置:',
-       'config-profile-wiki' => '開放的wiki',
-       'config-profile-no-anon' => '需要註冊帳號',
-       'config-profile-fishbowl' => '編輯受限',
-       'config-profile-private' => '非公開wiki',
-       'config-profile-help' => "如果您允許盡量多的人編寫wiki,網站上的內容會更加豐富。在MediaWiki中,您可以輕鬆地審查最近更改,並輕易回退掉新手或破壞者造成的損害。
-
-然而,許多人覺得讓MediaWiki存在多種角色將更加好用;同時,要說服所有人都願以wiki的方式作貢獻並非一件易事。因此,您可以有以下選擇:
-
-'''{{int:config-profile-wiki}}'''允許包括未登錄用戶在內的所有人編輯。'''{{int:config-profile-no-anon}}'''的wiki需要額外的註冊流程,這有可能會阻礙隨意貢獻者。
-
-'''{{int:config-profile-fishbowl}}'''模式只允許獲批准的用戶編輯,但對公眾開放頁面瀏覽(包括歷史記錄)。'''{{int:config-profile-private}}'''則只允許獲批准的用戶瀏覽、編輯頁面。
-
-安裝完成後,您還可以對用戶權限進行更多、更複雜的配置,參見[//www.mediawiki.org/wiki/Manual:User_rights 相關的使用手冊]。", # Fuzzy
-       'config-license' => '版權和許可證:',
-       'config-license-none' => '頁腳無許可證',
-       'config-license-cc-by-sa' => '知識共享署名-相同方式分享',
-       'config-license-cc-by' => '知識共享署名',
-       'config-license-cc-by-nc-sa' => '知識共享署名-非商業性使用-相同方式共享',
-       'config-license-cc-0' => '知識共享Zero(公有領域)',
-       'config-license-gfdl' => 'GNU自由文檔許可證1.3或更高版本',
-       'config-license-pd' => '公共領域',
-       'config-license-cc-choose' => '選擇自定義的知識共享許可證',
-       'config-license-help' => "許多公共wiki會以[http://freedomdefined.org/Definition 自由許可證]的方式釋放出編者的所有貢獻。這有助於構建社區的主人翁意識,並能鼓勵長期貢獻。對於非公共wiki或公司wiki,這並非必要條件。
-
-如果您希望使用來自維基百科的內容,並希望維基百科能接受複製自您的wiki的內容,請選擇'''知識共享署名-相同方式共享'''。
-
-GNU自由文檔許可證是維基百科曾經使用過的許可證,並迄今有效。然而,該許可證難以理解,並會增加重用內容的難度。",
-       'config-email-settings' => 'E-mail 設定',
-       'config-enable-email' => '啟用出站電子郵件',
-       'config-enable-email-help' => '如果您希望使用電子郵件功能,請正確配置[http://www.php.net/manual/en/mail.configuration.php PHP的郵件設定]。如果您不需要任何電子郵件功能,請在此處禁用它。',
-       'config-email-user' => '啟用用戶到用戶的電子郵件',
-       'config-email-user-help' => '允許所有用戶互發郵件,假若他們啟用了該功能。',
-       'config-email-usertalk' => '啟用用戶討論頁通知',
-       'config-email-usertalk-help' => '允許用戶收到用戶討論頁被修改的通知,假若他們啟用了該功能。',
-       'config-email-watchlist' => '啟用監視列表通知',
-       'config-email-watchlist-help' => '允許用戶收到與其監視列表有關的通知,假若他們啟用了該功能。',
-       'config-email-auth' => '啟用電子郵件認證',
-       'config-email-auth-help' => "如果啟用此選項,在用戶設置或修改電子郵件地址時,就會收到一封郵件,內含確認電子地址的鏈接。只有經過身份驗證的電子郵件地址,才能收到來自其他用戶的電子郵件,或任何修改通知的郵件。'''建議'''公開wiki啟用本選項,以防對電子郵件功能的濫用。",
-       'config-email-sender' => '返回電子郵件地址:',
-       'config-email-sender-help' => '輸入要用來發送出站電子郵件的地址,該地址將會收到被拒收的郵件。許多郵件服務器要求域名部分必須有效。',
-       'config-upload-settings' => '圖片和檔案上傳',
-       'config-upload-enable' => '啟用檔案上傳',
-       'config-upload-help' => '文件上傳可能會將您的服務器暴露在安全風險下。有關更多的信息,請參閱手冊的[//www.mediawiki.org/wiki/Manual:Security 安全部分]。
-
-要啟用文件上傳,請先將MediaWiki根目錄下的<code>images</code>子目錄更改為對web服務器可寫,然後再啟用此選項。',
-       'config-upload-deleted' => '已刪除文件的目錄:',
-       'config-upload-deleted-help' => '指定用於存放被刪除文件的目錄。理想情況下,該目錄不應能通過web訪問。',
-       'config-logo' => '標誌URL:',
-       'config-logo-help' => '在MediaWiki的默認外觀中,左側欄菜單之上有一塊135x160像素的標誌區。請上傳一幅相應大小的圖像,並在此輸入URL。
-
-如果您不希望使用標誌,請將本處留空。', # Fuzzy
-       'config-instantcommons' => '啟用即時共享資源',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons 即時共享資源]可以讓wiki使用來自[//commons.wikimedia.org/ 維基共享資源]網站的圖像、音頻和其他媒體文件。要啟用該功能,MediaWiki必須能夠訪問互聯網。
-
-有關此功能的詳細信息,包括如何將其他wiki網站設為具有類似共享功能的方法,請參考[//mediawiki.org/wiki/Manual:$wgForeignFileRepos 手冊]。',
-       'config-cc-error' => '知識共享許可證挑選器無法找到結果,請手動輸入許可證的名稱。',
-       'config-cc-again' => '重新選取......',
-       'config-cc-not-chosen' => '選擇您希望使用的知識共享許可證,並點擊“繼續”。',
-       'config-advanced-settings' => '進階配置',
-       'config-cache-options' => '對象緩存設置:',
-       'config-cache-help' => '對象緩存可通過緩存頻繁使用的數據來提高MediaWiki的速度。高度推薦中到大型的網站啟用該功能,小型網站亦能從其中受益。',
-       'config-cache-none' => '無緩存(不影響功能,但對較大型的wiki網站會有速度影響)',
-       'config-cache-accel' => 'PHP對象緩存(APC、XCache或WinCache)',
-       'config-cache-memcached' => '使用Memcached(需要另外安裝並配置)',
-       'config-memcached-servers' => 'Memcached服務器:',
-       'config-memcached-help' => '用於Memcached的IP地址列表。請保持每行一條,並指定要使用的端口。例如:
-127.0.0.1:11211
-192.168.1.25:1234',
-       'config-memcache-needservers' => '您選擇了Memcached作為您的緩存,但並未指定任何服務器。',
-       'config-memcache-badip' => '您為Memcached輸入了無效的IP地址:$1。',
-       'config-memcache-noport' => '您沒有指定Memcached服務器的端口:$1。如果您不清楚端口是多少,默認值為11211。',
-       'config-memcache-badport' => 'Memcached的端口號應該在$1到$2之間。',
-       'config-extensions' => '擴充套件',
-       'config-extensions-help' => '已在您的<code>./extensions</code>目錄中發現下列擴展。
-
-您可能要對它們進行額外的配置,但您現在可以啟用它們。',
-       'config-install-alreadydone' => "'''警告:'''您似乎已經安裝了MediaWiki,並試圖重新安裝它。請前往下一個頁面。",
-       'config-install-begin' => '點擊“{{int:config-continue}}”後,您將開始安裝MediaWiki。如果您還想對配置作一些修改,請點擊後退。', # Fuzzy
-       'config-install-step-done' => '完成',
-       'config-install-step-failed' => '失敗',
-       'config-install-extensions' => '正在啟用擴展',
-       'config-install-database' => '正在配置數據庫',
-       'config-install-schema' => '創建架構',
-       'config-install-pg-schema-not-exist' => 'PostgreSQL 架構不存在',
-       'config-install-pg-schema-failed' => '創建數據表失敗。請確保用戶“$1”擁有寫入模式“$2”的權限。',
-       'config-install-pg-commit' => '提交更改',
-       'config-install-pg-plpgsql' => '正在檢查PL/pgSQL語言',
-       'config-pg-no-plpgsql' => '您需要為數據庫$1安裝PL/pgSQL語言',
-       'config-pg-no-create-privs' => '為安裝程序指定的帳號缺少創建帳號的權限。',
-       'config-pg-not-in-role' => '您指定為web用戶的帳戶已經存在。
-您給本程序指定的帳戶不是超級用戶,也不是web用戶角色的成員,所以它不能創建web用戶所擁有的對象。
-
-MediaWiki當前需要使用由web用戶所有的表。請指定另一個web帳戶名稱,或點擊“後退”並指定具有適當權限的安裝用戶。',
-       'config-install-user' => '正在創建數據庫用戶',
-       'config-install-user-alreadyexists' => '用戶“$1”已存在',
-       'config-install-user-create-failed' => '創建用戶“$1”失敗:$2',
-       'config-install-user-grant-failed' => '授予用戶“$1”權限失敗:$2',
-       'config-install-user-missing' => '指定的用戶“$1”不存在。',
-       'config-install-user-missing-create' => '指定的用戶“$1”不存在。如果您想要創建一名,請點選“創建帳戶”下面的複選框。',
-       'config-install-tables' => '正在創建數據表',
-       'config-install-tables-exist' => "'''警告''':MediaWiki的數據表似乎已經存在,跳過創建。",
-       'config-install-tables-failed' => "'''錯誤''':創建數據表出錯,下為錯誤信息:$1",
-       'config-install-interwiki' => '正在填充默認的跨wiki數據表',
-       'config-install-interwiki-list' => '找不到文件<code>interwiki.list</code>。',
-       'config-install-interwiki-exists' => "'''警告''':跨wiki數據表似乎已有內容,跳過默認列表。",
-       'config-install-stats' => '初始化統計',
-       'config-install-keys' => '生成密鑰中',
-       'config-insecure-keys' => "'''警告''':在安裝過程中生成的{{PLURAL:$2|安全密鑰|安全密鑰}}($1){{PLURAL:$2|並|並}}不一定安全。請考慮手動更改{{PLURAL:$2|它|它們}}。",
-       'config-install-sysop' => '正在創建管理員用戶帳號',
-       'config-install-subscribe-fail' => '無法訂閱mediawiki-announce:$1',
-       'config-install-subscribe-notpossible' => '沒有安裝cURL,allow_url_fopen也不可用。',
-       'config-install-mainpage' => '正在創建顯示默認內容的首頁',
-       'config-install-extension-tables' => '正在為已啟用擴展創建數據表',
-       'config-install-mainpage-failed' => '無法插入首頁:$1',
-       'config-install-done' => "'''恭喜!'''
-您已經成功地安裝了MediaWiki。
-
-安裝程序已經生成了<code>LocalSettings.php</code>文件,其中包含了您所有的配置。
-
-您需要下載該文件,並將其放在您wiki的根目錄(index.php的同級目錄)中。稍後下載將自動開始。
-
-如果瀏覽器沒有提示您下載,或者您取消了下載,您可以點擊下面的鏈接重新開始下載:
-
-$3
-
-'''注意''':如果您現在不完成本步驟,而是沒有下載便退出了安裝過程,此後您將無法獲得自動生成的配置文件。
-
-當本步驟完成後,您可以 '''[$2 進入您的wiki]'''。",
-       'config-download-localsettings' => '下載<code>LocalSettings.php</code>',
-       'config-help' => '說明',
-       'mainpagetext' => "'''已成功安裝MediaWiki。'''",
-       'mainpagedocfooter' => '請參閱[//meta.wikimedia.org/wiki/Help:Contents 用戶手冊]以獲得使用此wiki軟體的訊息!
-
-== 入門 ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki配置設定清單]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki常見問題解答]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki發佈郵件清單]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki界面本地化]',
-);
-
-/** Chinese (Hong Kong) (‪中文(香港)‬)
- * @author Mark85296341
- */
-$messages['zh-hk'] = array(
-       'mainpagedocfooter' => '請參閱[//meta.wikimedia.org/wiki/Help:Contents 用戶手冊]以獲得使用此 wiki 軟件的訊息!
-
-== 入門 ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki 配置設定清單]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 常見問題解答]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈郵件清單]',
-);
-
-/** Chinese (Taiwan) (‪中文(台灣)‬) */
-$messages['zh-tw'] = array(
-       'mainpagedocfooter' => '請參閱 [//meta.wikimedia.org/wiki/Help:Contents 使用者手冊] 以獲得使用此 wiki 軟體的訊息!
-
-== 入門 ==
-
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki 配置設定清單]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 常見問題解答]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈郵件清單]',
-);
index edc0feb..48f850f 100644 (file)
@@ -102,6 +102,7 @@ abstract class Installer {
                'mysql',
                'postgres',
                'oracle',
+               'mssql',
                'sqlite',
        );
 
@@ -345,15 +346,14 @@ abstract class Installer {
         * Constructor, always call this from child classes.
         */
        public function __construct() {
-               global $wgExtensionMessagesFiles, $wgUser;
+               global $wgMessagesDirs, $wgUser;
 
                // Disable the i18n cache and LoadBalancer
                Language::getLocalisationCache()->disableBackend();
                LBFactory::disableBackend();
 
-               // Load the installer's i18n file.
-               $wgExtensionMessagesFiles['MediawikiInstaller'] =
-                       __DIR__ . '/Installer.i18n.php';
+               // Load the installer's i18n.
+               $wgMessagesDirs['MediawikiInstaller'] = __DIR__ . '/i18n';
 
                // Having a user with id = 0 safeguards us from DB access via User::loadOptions().
                $wgUser = User::newFromId( 0 );
index 77c35b8..fe036ad 100644 (file)
@@ -264,7 +264,7 @@ class LocalSettingsGenerator {
 # file, not there.
 #
 # Further documentation for configuration settings may be found at:
-# http://www.mediawiki.org/wiki/Manual:Configuration_settings
+# https://www.mediawiki.org/wiki/Manual:Configuration_settings
 
 # Protect against web entry
 if ( !defined( 'MEDIAWIKI' ) ) {
@@ -280,7 +280,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 ## defaults for all runtime URL paths are based off of this.
 ## For more information on customizing the URLs
 ## (like /w/index.php/Page_title to /wiki/Page_title) please see:
-## http://www.mediawiki.org/wiki/Manual:Short_URL
+## https://www.mediawiki.org/wiki/Manual:Short_URL
 \$wgScriptPath = \"{$this->values['wgScriptPath']}\";
 \$wgScriptExtension = \"{$this->values['wgScriptExtension']}\";
 ${serverSetting}
diff --git a/includes/installer/MssqlInstaller.php b/includes/installer/MssqlInstaller.php
new file mode 100644 (file)
index 0000000..952b902
--- /dev/null
@@ -0,0 +1,692 @@
+<?php
+/**
+ * Microsoft SQL Server-specific installer.
+ *
+ * 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 Deployment
+ */
+
+/**
+ * Class for setting up the MediaWiki database using Microsoft SQL Server.
+ *
+ * @ingroup Deployment
+ * @since 1.23
+ */
+class MssqlInstaller extends DatabaseInstaller {
+
+       protected $globalNames = array(
+               'wgDBserver',
+               'wgDBname',
+               'wgDBuser',
+               'wgDBpassword',
+               'wgDBmwschema',
+               'wgDBprefix',
+               'wgDBWindowsAuthentication',
+       );
+
+       protected $internalDefaults = array(
+               '_InstallUser' => 'sa',
+               '_InstallWindowsAuthentication' => 'sqlauth',
+               '_WebWindowsAuthentication' => 'sqlauth',
+       );
+
+       public $minimumVersion = '9.00.1399'; // SQL Server 2005 RTM (TODO: are SQL Express version numbers different?)
+
+       // These are schema-level privs
+       // Note: the web user will be created will full permissions if possible, this permission
+       // list is only used if we are unable to grant full permissions.
+       public $webUserPrivs = array(
+               'DELETE',
+               'INSERT',
+               'SELECT',
+               'UPDATE',
+               'EXECUTE',
+       );
+
+       /**
+        * @return string
+        */
+       public function getName() {
+               return 'mssql';
+       }
+
+       /**
+        * @return Bool
+        */
+       public function isCompiled() {
+               return self::checkExtension( 'sqlsrv' );
+       }
+
+       /**
+        * @return string
+        */
+       public function getConnectForm() {
+               if ( $this->getVar( '_InstallWindowsAuthentication' ) == 'windowsauth' ) {
+                       $displayStyle = 'display: none;';
+               } else {
+                       $displayStyle = 'display: block;';
+               }
+
+               return $this->getTextBox(
+                       'wgDBserver',
+                       'config-db-host',
+                       array(),
+                       $this->parent->getHelpBox( 'config-db-host-help' )
+               ) .
+                       Html::openElement( 'fieldset' ) .
+                       Html::element( 'legend', array(), wfMessage( 'config-db-wiki-settings' )->text() ) .
+                       $this->getTextBox( 'wgDBname', 'config-db-name', array( 'dir' => 'ltr' ),
+                               $this->parent->getHelpBox( 'config-db-name-help' ) ) .
+                       $this->getTextBox( 'wgDBmwschema', 'config-db-schema', array( 'dir' => 'ltr' ),
+                               $this->parent->getHelpBox( 'config-db-schema-help' ) ) .
+                       $this->getTextBox( 'wgDBprefix', 'config-db-prefix', array( 'dir' => 'ltr' ),
+                               $this->parent->getHelpBox( 'config-db-prefix-help' ) ) .
+                       Html::closeElement( 'fieldset' ) .
+                       Html::openElement( 'fieldset' ) .
+                       Html::element( 'legend', array(), wfMessage( 'config-db-install-account' )->text() ) .
+                       $this->getRadioSet( array(
+                               'var' => '_InstallWindowsAuthentication',
+                               'label' => 'config-mssql-auth',
+                               'itemLabelPrefix' => 'config-mssql-',
+                               'values' => array( 'sqlauth', 'windowsauth' ),
+                               'itemAttribs' => array(
+                                       'sqlauth' => array(
+                                               'class' => 'showHideRadio',
+                                               'rel' => 'dbCredentialBox',
+                                       ),
+                                       'windowsauth' => array(
+                                               'class' => 'hideShowRadio',
+                                               'rel' => 'dbCredentialBox',
+                                       )
+                               ),
+                               'help' => $this->parent->getHelpBox( 'config-mssql-install-auth' )
+                       ) ) .
+                       Html::openElement( 'div', array( 'id' => 'dbCredentialBox', 'style' => $displayStyle ) ) .
+                       $this->getTextBox(
+                               '_InstallUser',
+                               'config-db-username',
+                               array( 'dir' => 'ltr' ),
+                               $this->parent->getHelpBox( 'config-db-install-username' )
+                       ) .
+                       $this->getPasswordBox(
+                               '_InstallPassword',
+                               'config-db-password',
+                               array( 'dir' => 'ltr' ),
+                               $this->parent->getHelpBox( 'config-db-install-password' )
+                       ) .
+                       Html::closeElement( 'div' ) .
+                       Html::closeElement( 'fieldset' );
+       }
+
+       public function submitConnectForm() {
+               // Get variables from the request.
+               $newValues = $this->setVarsFromRequest( array( 'wgDBserver', 'wgDBname', 'wgDBmwschema', 'wgDBprefix' ) );
+
+               // Validate them.
+               $status = Status::newGood();
+               if ( !strlen( $newValues['wgDBserver'] ) ) {
+                       $status->fatal( 'config-missing-db-host' );
+               }
+               if ( !strlen( $newValues['wgDBname'] ) ) {
+                       $status->fatal( 'config-missing-db-name' );
+               } elseif ( !preg_match( '/^[a-z0-9_]+$/i', $newValues['wgDBname'] ) ) {
+                       $status->fatal( 'config-invalid-db-name', $newValues['wgDBname'] );
+               }
+               if ( !preg_match( '/^[a-z0-9_]*$/i', $newValues['wgDBmwschema'] ) ) {
+                       $status->fatal( 'config-invalid-schema', $newValues['wgDBmwschema'] );
+               }
+               if ( !preg_match( '/^[a-z0-9_]*$/i', $newValues['wgDBprefix'] ) ) {
+                       $status->fatal( 'config-invalid-db-prefix', $newValues['wgDBprefix'] );
+               }
+               if ( !$status->isOK() ) {
+                       return $status;
+               }
+
+               // Check for blank schema and remap to dbo
+               if ( $newValues['wgDBmwschema'] === '' ) {
+                       $this->setVar( 'wgDBmwschema', 'dbo' );
+               }
+
+               // User box
+               $this->setVarsFromRequest( array( '_InstallUser', '_InstallPassword', '_InstallWindowsAuthentication' ) );
+
+               // Try to connect
+               $status = $this->getConnection();
+               if ( !$status->isOK() ) {
+                       return $status;
+               }
+               /**
+                * @var $conn DatabaseBase
+                */
+               $conn = $status->value;
+
+               // Check version
+               $version = $conn->getServerVersion();
+               if ( version_compare( $version, $this->minimumVersion ) < 0 ) {
+                       return Status::newFatal( 'config-mssql-old', $this->minimumVersion, $version );
+               }
+
+               return $status;
+       }
+
+       /**
+        * @return Status
+        */
+       public function openConnection() {
+               global $wgDBWindowsAuthentication;
+               $status = Status::newGood();
+               $user = $this->getVar( '_InstallUser' );
+               $password = $this->getVar( '_InstallPassword' );
+
+               if ( $this->getVar( '_InstallWindowsAuthentication' ) == 'windowsauth' ) {
+                       // Use Windows authentication for this connection
+                       $wgDBWindowsAuthentication = true;
+               } else {
+                       $wgDBWindowsAuthentication = false;
+               }
+
+               try {
+                       $db = DatabaseBase::factory( 'mssql', array(
+                               'host' => $this->getVar( 'wgDBserver' ),
+                               'user' => $user,
+                               'password' => $password,
+                               'dbname' => false,
+                               'flags' => 0,
+                               'tablePrefix' => $this->getVar( 'wgDBprefix' ) ) );
+                       $db->prepareStatements( false );
+                       $db->scrollableCursor( false );
+                       $status->value = $db;
+               } catch ( DBConnectionError $e ) {
+                       $status->fatal( 'config-connection-error', $e->getMessage() );
+               }
+
+               return $status;
+       }
+
+       public function preUpgrade() {
+               global $wgDBuser, $wgDBpassword;
+
+               $status = $this->getConnection();
+               if ( !$status->isOK() ) {
+                       $this->parent->showStatusError( $status );
+
+                       return;
+               }
+               /**
+                * @var $conn DatabaseBase
+                */
+               $conn = $status->value;
+               $conn->selectDB( $this->getVar( 'wgDBname' ) );
+
+               # Normal user and password are selected after this step, so for now
+               # just copy these two
+               $wgDBuser = $this->getVar( '_InstallUser' );
+               $wgDBpassword = $this->getVar( '_InstallPassword' );
+       }
+
+       /**
+        * Return true if the install user can create accounts
+        *
+        * @return bool
+        */
+       public function canCreateAccounts() {
+               $status = $this->getConnection();
+               if ( !$status->isOK() ) {
+                       return false;
+               }
+               /** @var $conn DatabaseBase */
+               $conn = $status->value;
+
+               // We need the server-level ALTER ANY LOGIN permission to create new accounts
+               $res = $conn->query( "SELECT permission_name FROM sys.fn_my_permissions( NULL, 'SERVER' )" );
+               $serverPrivs = array(
+                       'ALTER ANY LOGIN' => false,
+                       'CONTROL SERVER' => false,
+               );
+
+               foreach ( $res as $row ) {
+                       $serverPrivs[$row->permission_name] = true;
+               }
+
+               if ( !$serverPrivs['ALTER ANY LOGIN'] ) {
+                       return false;
+               }
+
+               // Check to ensure we can grant everything needed as well
+               // We can't actually tell if we have WITH GRANT OPTION for a given permission, so we assume we do
+               // and just check for the permission
+               // http://technet.microsoft.com/en-us/library/ms178569.aspx
+               // The following array sets up which permissions imply whatever permissions we specify
+               $implied = array(
+                       // schema           database   server
+                       'DELETE'  => array( 'DELETE',  'CONTROL SERVER' ),
+                       'EXECUTE' => array( 'EXECUTE', 'CONTROL SERVER' ),
+                       'INSERT'  => array( 'INSERT',  'CONTROL SERVER' ),
+                       'SELECT'  => array( 'SELECT',  'CONTROL SERVER' ),
+                       'UPDATE'  => array( 'UPDATE',  'CONTROL SERVER' ),
+               );
+
+               $grantOptions = array_flip( $this->webUserPrivs );
+
+               // Check for schema and db-level permissions, but only if the schema/db exists
+               $schemaPrivs = $dbPrivs = array(
+                       'DELETE' => false,
+                       'EXECUTE' => false,
+                       'INSERT' => false,
+                       'SELECT' => false,
+                       'UPDATE' => false,
+               );
+
+               $dbPrivs['ALTER ANY USER'] = false;
+
+               if ( $this->databaseExists( $this->getVar( 'wgDBname' ) ) ) {
+                       $conn->selectDB( $this->getVar( 'wgDBname' ) );
+                       $res = $conn->query( "SELECT permission_name FROM sys.fn_my_permissions( NULL, 'DATABASE' )" );
+
+                       foreach ( $res as $row ) {
+                               $dbPrivs[$row->permission_name] = true;
+                       }
+
+                       // If the db exists, we need ALTER ANY USER privs on it to make a new user
+                       if ( !$dbPrivs['ALTER ANY USER'] ) {
+                               return false;
+                       }
+
+                       if ( $this->schemaExists( $this->getVar( 'wgDBmwschema' ) ) ) {
+                               // wgDBmwschema is validated to only contain alphanumeric + underscore, so this is safe
+                               $res = $conn->query( "SELECT permission_name FROM sys.fn_my_permissions( '{$this->getVar( 'wgDBmwschema' )}', 'SCHEMA' )" );
+
+                               foreach ( $res as $row ) {
+                                       $schemaPrivs[$row->permission_name] = true;
+                               }
+                       }
+               }
+
+               // Now check all the grants we'll need to be doing to see if we can
+               foreach ( $this->webUserPrivs as $permission ) {
+                       if ( ( isset( $schemaPrivs[$permission] ) && $schemaPrivs[$permission] )
+                                       || ( isset( $dbPrivs[$implied[$permission][0]] ) && $dbPrivs[$implied[$permission][0]] )
+                                       || ( isset( $serverPrivs[$implied[$permission][1]] ) && $serverPrivs[$implied[$permission][1]] ) ) {
+
+                               unset( $grantOptions[$permission] );
+                       }
+               }
+
+               if ( count( $grantOptions ) ) {
+                       // Can't grant everything
+                       return false;
+               }
+
+               return true;
+       }
+
+       /**
+        * @return string
+        */
+       public function getSettingsForm() {
+               if ( $this->canCreateAccounts() ) {
+                       $noCreateMsg = false;
+               } else {
+                       $noCreateMsg = 'config-db-web-no-create-privs';
+               }
+               $wrapperStyle = $this->getVar( '_SameAccount' ) ? 'display: none' : '';
+               $displayStyle = $this->getVar( '_WebWindowsAuthentication' ) == 'windowsauth' ? 'display: none' : '';
+               $s = Html::openElement( 'fieldset' ) .
+                       Html::element( 'legend', array(), wfMessage( 'config-db-web-account' )->text() ) .
+                       $this->getCheckBox(
+                               '_SameAccount', 'config-db-web-account-same',
+                               array( 'class' => 'hideShowRadio', 'rel' => 'dbOtherAccount' )
+                       ) .
+                       Html::openElement( 'div', array( 'id' => 'dbOtherAccount', 'style' => $wrapperStyle ) ) .
+                       $this->getRadioSet( array(
+                               'var' => '_WebWindowsAuthentication',
+                               'label' => 'config-mssql-auth',
+                               'itemLabelPrefix' => 'config-mssql-',
+                               'values' => array( 'sqlauth', 'windowsauth' ),
+                               'itemAttribs' => array(
+                                       'sqlauth' => array(
+                                               'class' => 'showHideRadio',
+                                               'rel' => 'dbCredentialBox',
+                                       ),
+                                       'windowsauth' => array(
+                                               'class' => 'hideShowRadio',
+                                               'rel' => 'dbCredentialBox',
+                                       )
+                               ),
+                               'help' => $this->parent->getHelpBox( 'config-mssql-web-auth' )
+                       ) ) .
+                       Html::openElement( 'div', array( 'id' => 'dbCredentialBox', 'style' => $displayStyle ) ) .
+                       $this->getTextBox( 'wgDBuser', 'config-db-username' ) .
+                       $this->getPasswordBox( 'wgDBpassword', 'config-db-password' ) .
+                       Html::closeElement( 'div' );
+
+               if ( $noCreateMsg ) {
+                       $s .= $this->parent->getWarningBox( wfMessage( $noCreateMsg )->plain() );
+               } else {
+                       $s .= $this->getCheckBox( '_CreateDBAccount', 'config-db-web-create' );
+               }
+
+               $s .= Html::closeElement( 'div' ) . Html::closeElement( 'fieldset' );
+
+               return $s;
+       }
+
+       /**
+        * @return Status
+        */
+       public function submitSettingsForm() {
+               $this->setVarsFromRequest(
+                       array( 'wgDBuser', 'wgDBpassword', '_SameAccount', '_CreateDBAccount', '_WebWindowsAuthentication' )
+               );
+
+               if ( $this->getVar( '_SameAccount' ) ) {
+                       $this->setVar( '_WebWindowsAuthentication', $this->getVar( '_InstallWindowsAuthentication' ) );
+                       $this->setVar( 'wgDBuser', $this->getVar( '_InstallUser' ) );
+                       $this->setVar( 'wgDBpassword', $this->getVar( '_InstallPassword' ) );
+               }
+
+               if ( $this->getVar( '_WebWindowsAuthentication' ) == 'windowsauth' ) {
+                       $this->setVar( 'wgDBuser', '' );
+                       $this->setVar( 'wgDBpassword', '' );
+                       $this->setVar( 'wgDBWindowsAuthentication', true );
+               } else {
+                       $this->setVar( 'wgDBWindowsAuthentication', false );
+               }
+
+               if ( $this->getVar( '_CreateDBAccount' ) && $this->getVar( '_WebWindowsAuthentication' ) == 'sqlauth' && strval( $this->getVar( 'wgDBpassword' ) ) == '' ) {
+                       return Status::newFatal( 'config-db-password-empty', $this->getVar( 'wgDBuser' ) );
+               }
+
+               // Validate the create checkbox
+               $canCreate = $this->canCreateAccounts();
+               if ( !$canCreate ) {
+                       $this->setVar( '_CreateDBAccount', false );
+                       $create = false;
+               } else {
+                       $create = $this->getVar( '_CreateDBAccount' );
+               }
+
+               if ( !$create ) {
+                       // Test the web account
+                       $user = $this->getVar( 'wgDBuser' );
+                       $password = $this->getVar( 'wgDBpassword' );
+
+                       if ( $this->getVar( '_WebWindowsAuthentication' ) == 'windowsauth' ) {
+                               $user = 'windowsauth';
+                               $password = 'windowsauth';
+                       }
+
+                       try {
+                               DatabaseBase::factory( 'mssql', array(
+                                       'host' => $this->getVar( 'wgDBserver' ),
+                                       'user' => $user,
+                                       'password' => $password,
+                                       'dbname' => false,
+                                       'flags' => 0,
+                                       'tablePrefix' => $this->getVar( 'wgDBprefix' ),
+                                       'schema' => $this->getVar( 'wgDBmwschema' ),
+                               ) );
+                       } catch ( DBConnectionError $e ) {
+                               return Status::newFatal( 'config-connection-error', $e->getMessage() );
+                       }
+               }
+
+               return Status::newGood();
+       }
+
+       public function preInstall() {
+               # Add our user callback to installSteps, right before the tables are created.
+               $callback = array(
+                       'name' => 'user',
+                       'callback' => array( $this, 'setupUser' ),
+               );
+               $this->parent->addInstallStep( $callback, 'tables' );
+       }
+
+       /**
+        * @return Status
+        */
+       public function setupDatabase() {
+               $status = $this->getConnection();
+               if ( !$status->isOK() ) {
+                       return $status;
+               }
+               /** @var DatabaseBase $conn */
+               $conn = $status->value;
+               $dbName = $this->getVar( 'wgDBname' );
+               $schemaName = $this->getVar( 'wgDBmwschema' );
+               if ( !$this->databaseExists( $dbName ) ) {
+                       $conn->query( "CREATE DATABASE " . $conn->addIdentifierQuotes( $dbName ), __METHOD__ );
+                       $conn->selectDB( $dbName );
+                       if ( !$this->schemaExists( $schemaName ) ) {
+                               $conn->query( "CREATE SCHEMA " . $conn->addIdentifierQuotes( $schemaName ), __METHOD__ );
+                       }
+                       if ( !$this->catalogExists( $schemaName ) ) {
+                               $conn->query( "CREATE FULLTEXT CATALOG " . $conn->addIdentifierQuotes( $schemaName ), __METHOD__ );
+                       }
+               }
+               $this->setupSchemaVars();
+
+               return $status;
+       }
+
+       /**
+        * @return Status
+        */
+       public function setupUser() {
+               $dbUser = $this->getVar( 'wgDBuser' );
+               if ( $dbUser == $this->getVar( '_InstallUser' )
+                               || ( $this->getVar( '_InstallWindowsAuthentication' ) == 'windowsauth'
+                                       && $this->getVar( '_WebWindowsAuthentication' ) == 'windowsauth' ) ) {
+                       return Status::newGood();
+               }
+               $status = $this->getConnection();
+               if ( !$status->isOK() ) {
+                       return $status;
+               }
+
+               $this->setupSchemaVars();
+               $dbName = $this->getVar( 'wgDBname' );
+               $this->db->selectDB( $dbName );
+               $server = $this->getVar( 'wgDBserver' );
+               $password = $this->getVar( 'wgDBpassword' );
+               $schemaName = $this->getVar( 'wgDBmwschema' );
+
+               if ( $this->getVar( '_WebWindowsAuthentication' ) == 'windowsauth' ) {
+                       $dbUser = 'windowsauth';
+                       $password = 'windowsauth';
+               }
+
+               if ( $this->getVar( '_CreateDBAccount' ) ) {
+                       $tryToCreate = true;
+               } else {
+                       $tryToCreate = false;
+               }
+
+               $escUser = $this->db->addIdentifierQuotes( $dbUser );
+               $escDb = $this->db->addIdentifierQuotes( $dbName );
+               $escSchema = $this->db->addIdentifierQuotes( $schemaName );
+               $grantableNames = array();
+               if ( $tryToCreate ) {
+                       $escPass = $this->db->addQuotes( $password );
+
+                       if ( !$this->loginExists( $dbUser ) ) {
+                               try {
+                                       $this->db->begin();
+                                       $this->db->selectDB( 'master' );
+                                       $logintype = $this->getVar( '_WebWindowsAuthentication' ) == 'windowsauth' ? 'FROM WINDOWS' : "WITH PASSWORD = $escPass";
+                                       $this->db->query( "CREATE LOGIN $escUser $logintype" );
+                                       $this->db->selectDB( $dbName );
+                                       $this->db->query( "CREATE USER $escUser FOR LOGIN $escUser WITH DEFAULT_SCHEMA = $escSchema" );
+                                       $this->db->commit();
+                                       $grantableNames[] = $dbUser;
+                               } catch ( DBQueryError $dqe ) {
+                                       $this->db->rollback();
+                                       $status->warning( 'config-install-user-create-failed', $dbUser, $dqe->getText() );
+                               }
+                       } elseif ( !$this->userExists( $dbUser ) ) {
+                               try {
+                                       $this->db->begin();
+                                       $this->db->selectDB( $dbName );
+                                       $this->db->query( "CREATE USER $escUser FOR LOGIN $escUser WITH DEFAULT_SCHEMA = $escSchema" );
+                                       $this->db->commit();
+                                       $grantableNames[] = $dbUser;
+                               } catch ( DBQueryError $dqe ) {
+                                       $this->db->rollback();
+                                       $status->warning( 'config-install-user-create-failed', $dbUser, $dqe->getText() );
+                               }
+                       } else {
+                               $status->warning( 'config-install-user-alreadyexists', $dbUser );
+                               $grantableNames[] = $dbUser;
+                       }
+               }
+
+               // Try to grant to all the users we know exist or we were able to create
+               $this->db->selectDB( $dbName );
+               foreach ( $grantableNames as $name ) {
+                       try {
+                               // First try to grant full permissions
+                               $fullPrivArr = array(
+                                       'BACKUP DATABASE', 'BACKUP LOG', 'CREATE FUNCTION', 'CREATE PROCEDURE',
+                                       'CREATE TABLE', 'CREATE VIEW', 'CREATE FULLTEXT CATALOG', 'SHOWPLAN'
+                               );
+                               $fullPrivList = implode( ', ', $fullPrivArr );
+                               $this->db->begin();
+                               $this->db->query( "GRANT $fullPrivList ON DATABASE :: $escDb TO $escUser", __METHOD__ );
+                               $this->db->query( "GRANT CONTROL ON SCHEMA :: $escSchema TO $escUser", __METHOD__ );
+                               $this->db->commit();
+                       } catch ( DBQueryError $dqe ) {
+                               // If that fails, try to grant the limited subset specified in $this->webUserPrivs
+                               try {
+                                       $privList = implode( ', ', $this->webUserPrivs );
+                                       $this->db->rollback();
+                                       $this->db->begin();
+                                       $this->db->query( "GRANT $privList ON SCHEMA :: $escSchema TO $escUser", __METHOD__ );
+                                       $this->db->commit();
+                               } catch ( DBQueryError $dqe ) {
+                                       $this->db->rollback();
+                                       $status->fatal( 'config-install-user-grant-failed', $dbUser, $dqe->getText() );
+                               }
+                               // Also try to grant SHOWPLAN on the db, but don't fail if we can't
+                               // (just makes a couple things in mediawiki run slower since
+                               // we have to run SELECT COUNT(*) instead of getting the query plan)
+                               try {
+                                       $this->db->query( "GRANT SHOWPLAN ON DATABASE :: $escDb TO $escUser", __METHOD__ );
+                               } catch ( DBQueryError $dqe ) {
+                               }
+                       }
+               }
+
+               return $status;
+       }
+
+       public function createTables() {
+               $status = parent::createTables();
+
+               // Do last-minute stuff like fulltext indexes (since they can't be inside a transaction)
+               if ( $status->isOk() ) {
+                       $searchindex = $this->db->tableName( 'searchindex' );
+                       $schema = $this->db->addIdentifierQuotes( $this->getVar( 'wgDBmwschema' ) );
+                       try {
+                               $this->db->query( "CREATE FULLTEXT INDEX ON $searchindex (si_title, si_text) KEY INDEX si_page ON $schema" );
+                       } catch ( DBQueryError $dqe ) {
+                               $status->fatal( 'config-install-tables-failed', $dqe->getText() );
+                       }
+               }
+
+               return $status;
+       }
+
+       /**
+        * Try to see if the login exists
+        * @param string $user Username to check
+        * @return boolean
+        */
+       private function loginExists( $user ) {
+               $res = $this->db->selectField( 'sys.sql_logins', 1, array( 'name' => $user ) );
+               return (bool)$res;
+       }
+
+       /**
+        * Try to see if the user account exists
+        * We assume we already have the appropriate database selected
+        * @param string $user Username to check
+        * @return boolean
+        */
+       private function userExists( $user ) {
+               $res = $this->db->selectField( 'sys.sysusers', 1, array( 'name' => $user ) );
+               return (bool)$res;
+       }
+
+       /**
+        * Try to see if a given database exists
+        * @param string $dbName Database name to check
+        * @return boolean
+        */
+       private function databaseExists( $dbName ) {
+               $res = $this->db->selectField( 'sys.databases', 1, array( 'name' => $dbName ) );
+               return (bool)$res;
+       }
+
+       /**
+        * Try to see if a given schema exists
+        * We assume we already have the appropriate database selected
+        * @param string $schemaName Schema name to check
+        * @return boolean
+        */
+       private function schemaExists( $schemaName ) {
+               $res = $this->db->selectField( 'sys.schemas', 1, array( 'name' => $schemaName ) );
+               return (bool)$res;
+       }
+
+       /**
+        * Try to see if a given fulltext catalog exists
+        * We assume we already have the appropriate database selected
+        * @param string $schemaName Catalog name to check
+        * @return boolean
+        */
+       private function catalogExists( $catalogName ) {
+               $res = $this->db->selectField( 'sys.fulltext_catalogs', 1, array( 'name' => $catalogName ) );
+               return (bool)$res;
+       }
+
+       /**
+        * Get variables to substitute into tables.sql and the SQL patch files.
+        *
+        * @return array
+        */
+       public function getSchemaVars() {
+               return array(
+                       'wgDBname' => $this->getVar( 'wgDBname' ),
+                       'wgDBmwschema' => $this->getVar( 'wgDBmwschema' ),
+                       'wgDBuser' => $this->getVar( 'wgDBuser' ),
+                       'wgDBpassword' => $this->getVar( 'wgDBpassword' ),
+               );
+       }
+
+       public function getLocalSettings() {
+               $schema = LocalSettingsGenerator::escapePhpString( $this->getVar( 'wgDBmwschema' ) );
+               $prefix = LocalSettingsGenerator::escapePhpString( $this->getVar( 'wgDBprefix' ) );
+               $windowsauth = $this->getVar( 'wgDBWindowsAuthentication' ) ? 'true' : 'false';
+
+               return "# MSSQL specific settings
+\$wgDBWindowsAuthentication = {$windowsauth};
+\$wgDBmwschema = \"{$schema}\";
+\$wgDBprefix = \"{$prefix}\";";
+       }
+}
diff --git a/includes/installer/MssqlUpdater.php b/includes/installer/MssqlUpdater.php
new file mode 100644 (file)
index 0000000..7d3833b
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Microsoft SQL Server-specific installer.
+ *
+ * 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 Deployment
+ */
+
+/**
+ * Class for setting up the MediaWiki database using Microsoft SQL Server.
+ *
+ * @ingroup Deployment
+ * @since 1.23
+ */
+
+class MssqlUpdater extends DatabaseUpdater {
+
+       /**
+        * @var DatabaseMssql
+        */
+       protected $db;
+
+       protected function getCoreUpdateList() {
+               return array(
+                       array( 'disableContentHandlerUseDB' ),
+
+                       // 1.23
+
+               );
+       }
+}
index 33ff65e..bcd50b3 100644 (file)
@@ -249,6 +249,7 @@ class MysqlUpdater extends DatabaseUpdater {
                                'patch-logging_user_text_type_time_index.sql' ),
                        array( 'addIndex', 'logging', 'log_user_text_time', 'patch-logging_user_text_time_index.sql' ),
                        array( 'addField', 'page', 'page_links_updated', 'patch-page_links_updated.sql' ),
+                       array( 'addField', 'user', 'user_password_expires', 'patch-user_password_expire.sql' ),
                );
        }
 
index 6c56b3a..02116ea 100644 (file)
@@ -96,6 +96,7 @@ class OracleUpdater extends DatabaseUpdater {
                        //1.23
                        array( 'addIndex', 'logging', 'i06', 'patch-logging_user_text_type_time_index.sql' ),
                        array( 'addIndex', 'logging', 'i07', 'patch-logging_user_text_time_index.sql' ),
+                       array( 'addField', 'user', 'user_password_expires', 'patch-user_password_expire.sql' ),
 
                        // KEEP THIS AT THE BOTTOM!!
                        array( 'doRebuildDuplicateFunction' ),
index 1e0651c..c5c10b3 100644 (file)
@@ -404,6 +404,7 @@ class PostgresUpdater extends DatabaseUpdater {
                        // 1.23
                        array( 'addPgField', 'recentchanges', 'rc_source', "TEXT NOT NULL DEFAULT ''" ),
                        array( 'addPgField', 'page', 'page_links_updated', "TIMESTAMPTZ NULL" ),
+                       array( 'addPgField', 'mwuser', 'user_password_expires', 'TIMESTAMPTZ NULL' ),
                );
        }
 
index 2869d1f..ea19efa 100644 (file)
@@ -127,6 +127,7 @@ class SqliteUpdater extends DatabaseUpdater {
                                'patch-logging_user_text_type_time_index.sql' ),
                        array( 'addIndex', 'logging', 'log_user_text_time', 'patch-logging_user_text_time_index.sql' ),
                        array( 'addField', 'page', 'page_links_updated', 'patch-page_links_updated.sql' ),
+                       array( 'addField', 'user', 'user_password_expires', 'patch-user_password_expire.sql' ),
                );
        }
 
index 25634ba..e05a3d4 100644 (file)
@@ -306,7 +306,7 @@ class WebInstallerOutput {
 <div id="mw-panel">
        <div class="portal" id="p-logo">
          <a style="background-image: url(../skins/common/images/mediawiki.png);"
-               href="http://www.mediawiki.org/"
+               href="https://www.mediawiki.org/"
                title="Main Page"></a>
        </div>
        <div class="portal"><div class="body">
index 131431a..4bc6cad 100644 (file)
@@ -482,7 +482,7 @@ class WebInstaller_DBConnect extends WebInstallerPage {
                $defaultType = $this->getVar( 'wgDBtype' );
 
                // Messages: config-dbsupport-mysql, config-dbsupport-postgres, config-dbsupport-oracle,
-               // config-dbsupport-sqlite
+               // config-dbsupport-sqlite, config-dbsupport-mssql
                $dbSupport = '';
                foreach ( Installer::getDBTypes() as $type ) {
                        $dbSupport .= wfMessage( "config-dbsupport-$type" )->plain() . "\n";
@@ -827,7 +827,11 @@ class WebInstaller_Name extends WebInstallerPage {
                $msg = false;
                $pwd = $this->getVar( '_AdminPassword' );
                $user = User::newFromName( $cname );
-               $valid = $user && $user->getPasswordValidity( $pwd );
+               if ( $user ) {
+                       $valid = $user->getPasswordValidity( $pwd );
+               } else {
+                       $valid = 'config-admin-name-invalid';
+               }
                if ( strval( $pwd ) === '' ) {
                        # $user->getPasswordValidity just checks for $wgMinimalPasswordLength.
                        # This message is more specific and helpful.
@@ -835,8 +839,6 @@ class WebInstaller_Name extends WebInstallerPage {
                } elseif ( $pwd !== $this->getVar( '_AdminPassword2' ) ) {
                        $msg = 'config-admin-password-mismatch';
                } elseif ( $valid !== true ) {
-                       # As of writing this will only catch the username being e.g. 'FOO' and
-                       # the password 'foo'
                        $msg = $valid;
                }
                if ( $msg !== false ) {
diff --git a/includes/installer/i18n/af.json b/includes/installer/i18n/af.json
new file mode 100644 (file)
index 0000000..95831f4
--- /dev/null
@@ -0,0 +1,150 @@
+{
+    "@metadata": {
+        "authors": [
+            "Naudefj"
+        ]
+    },
+    "config-desc": "Die Installasieprogram vir MediaWiki",
+    "config-title": "Installasie MediaWiki $1",
+    "config-information": "Inligting",
+    "config-localsettings-key": "Opgradeer-sleutel:",
+    "config-localsettings-badkey": "Die sleutel wat u verskaf het is verkeerd.",
+    "config-session-error": "Fout met begin van sessie: $1",
+    "config-no-session": "U sessiedata is verlore!\nKontroleer u php.ini en maak seker dat <code>session.save_path</code> na 'n geldige gids wys.",
+    "config-your-language": "U taal:",
+    "config-your-language-help": "Kies 'n taal om tydens die installasieproses te gebruik.",
+    "config-wiki-language": "Wiki se taal:",
+    "config-wiki-language-help": "Kies die taal waarin die wiki hoofsaaklik geskryf sal word.",
+    "config-back": "← Terug",
+    "config-continue": "Gaan voort →",
+    "config-page-language": "Taal",
+    "config-page-welcome": "Welkom by MediaWiki!",
+    "config-page-dbconnect": "Konnekteer na die databasis",
+    "config-page-upgrade": "Opgradeer 'n bestaande installasie",
+    "config-page-dbsettings": "Databasis-instellings",
+    "config-page-name": "Naam",
+    "config-page-options": "Opsies",
+    "config-page-install": "Installeer",
+    "config-page-complete": "Voltooi!",
+    "config-page-restart": "Herbegin installasie",
+    "config-page-readme": "Lees my",
+    "config-page-releasenotes": "Vrystellingsnotas",
+    "config-page-copying": "Besig met kopiëring",
+    "config-page-upgradedoc": "Besig met opgradering",
+    "config-page-existingwiki": "Bestaande wiki",
+    "config-restart": "Ja, herbegin dit",
+    "config-sidebar": "* [//www.mediawiki.org MediaWiki tuisblad]\n* [//www.mediawiki.org/wiki/Help:Contents Gebruikershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Manual:Contents Administrateurshandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Manual:FAQ Algemene vrae] (Engelstalig)\n----\n* <doclink href=Readme>Lees my</doclink>\n* <doclink href=ReleaseNotes>Vrystellingsnotas</doclink>\n* <doclink href=Copying>Kopiëring</doclink>\n* <doclink href=UpgradeDoc>Opgradering</doclink>",
+    "config-env-good": "Die omgewing is gekontroleer.\nU kan MediaWiki installeer.",
+    "config-env-bad": "Die omgewing is gekontroleer.\nU kan nie MediaWiki installeer nie.</span>",
+    "config-env-php": "PHP $1 is tans geïnstalleer.",
+    "config-no-db": "Kon nie 'n geskikte databasisdrywer vind nie!",
+    "config-memory-raised": "PHP se <code>memory_limit</code> is $1, en is verhoog tot $2.",
+    "config-memory-bad": "'''Waarskuwing:''' PHP se <code>memory_limit</code> is $1.\nDit is waarskynlik te laag.\nDie installasie mag moontlik faal!",
+    "config-xcache": "[Http://trac.lighttpd.net/xcache/ XCache] is geïnstalleer",
+    "config-apc": "[Http://www.php.net/apc APC] is geïnstalleer",
+    "config-wincache": "[Http://www.iis.net/download/WinCacheForPhp WinCache] is geïnstalleer",
+    "config-diff3-bad": "GNU diff3 nie gevind nie.",
+    "config-db-type": "Databasistipe:",
+    "config-db-host": "Databasisbediener:",
+    "config-db-host-oracle": "Databasis-TNS:",
+    "config-db-wiki-settings": "Identifiseer hierdie wiki",
+    "config-db-name": "Databasisnaam:",
+    "config-db-name-oracle": "Databasis-skema:",
+    "config-db-install-account": "Gebruiker vir die installasie",
+    "config-db-username": "Databasis gebruikersnaam:",
+    "config-db-password": "Databasis wagwoord:",
+    "config-db-prefix": "Voorvoegsel vir databasistabelle:",
+    "config-db-charset": "Karakterstelsel vir databasis",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binêr",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-mysql-old": "U moet MySQL $1 of later gebruik.\nU gebruik tans $2.",
+    "config-db-port": "Databasispoort:",
+    "config-db-schema": "Skema vir MediaWiki",
+    "config-sqlite-dir": "Gids vir SQLite se data:",
+    "config-oracle-def-ts": "Standaard tabelruimte:",
+    "config-oracle-temp-ts": "Tydelike tabelruimte:",
+    "config-header-mysql": "MySQL-instellings",
+    "config-header-postgres": "PostgreSQL-instellings",
+    "config-header-sqlite": "SQLite-instellings",
+    "config-header-oracle": "Oracle-instellings",
+    "config-invalid-db-type": "Ongeldige databasistipe",
+    "config-missing-db-name": "U moet 'n waarde vir \"Databasnaam\" verskaf",
+    "config-sqlite-readonly": "Die lêer <code>$1</code> kan nie geskryf word nie.",
+    "config-sqlite-cant-create-db": "Kon nie databasislêer <code>$1</code> skep nie.",
+    "config-upgrade-done-no-regenerate": "Opgradering is voltooi.\n\nU kan nou [$1 u wiki gebruik].",
+    "config-regenerate": "Herskep LocalSettings.php →",
+    "config-show-table-status": "Die uitvoer van <code>SHOW TABLE STATUS</code> het gefaal!",
+    "config-db-web-account": "Databasisgebruiker vir toegang tot die web",
+    "config-mysql-engine": "Stoor-enjin:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-charset": "Karakterstelsel vir databasis:",
+    "config-mysql-binary": "Binêr",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Naam van die wiki:",
+    "config-site-name-blank": "Verskaf 'n naam vir u webwerf.",
+    "config-project-namespace": "Projeknaamruimte:",
+    "config-ns-generic": "Projek",
+    "config-ns-site-name": "Dieselfde as die wiki: $1",
+    "config-ns-other": "Ander (spesifiseer)",
+    "config-ns-other-default": "MyWiki",
+    "config-admin-box": "Administrateur se gebruiker",
+    "config-admin-name": "U naam:",
+    "config-admin-password": "Wagwoord:",
+    "config-admin-password-confirm": "Wagwoord weer:",
+    "config-admin-password-blank": "Verskaf 'n wagwoord vir die administrateur in.",
+    "config-admin-password-same": "Die wagwoord mag nie dieselfde as die gebruikersnaam wees nie.",
+    "config-admin-password-mismatch": "Die twee wagwoorde wat u ingetik het stem nie ooreen nie.",
+    "config-admin-email": "E-posadres:",
+    "config-optional-continue": "Vra my meer vrae.",
+    "config-optional-skip": "Ek is reeds verveeld, installeer maar net die wiki.",
+    "config-profile-wiki": "Tradisionele wiki",
+    "config-profile-no-anon": "Skep van gebruiker is verpligtend",
+    "config-profile-fishbowl": "Slegs vir gemagtigde redaksie",
+    "config-profile-private": "Privaat wiki",
+    "config-license": "Kopiereg en lisensie:",
+    "config-license-none": "Geen lisensie in die onderskrif",
+    "config-license-pd": "Publieke Domein",
+    "config-license-cc-choose": "Kies 'n Creative Commons-lisensie",
+    "config-email-settings": "E-posinstellings",
+    "config-email-sender": "E-posadres vir antwoorde:",
+    "config-upload-settings": "Oplaai van beelde en lêer",
+    "config-upload-enable": "Aktiveer die oplaai van lêers",
+    "config-upload-deleted": "Gids vir verwyderde lêers:",
+    "config-logo": "URL vir logo:",
+    "config-cc-again": "Kies weer...",
+    "config-advanced-settings": "Gevorderde konfigurasie",
+    "config-memcached-servers": "Memcached-bedieners:",
+    "config-extensions": "Uitbreidings",
+    "config-install-step-done": "gedoen",
+    "config-install-step-failed": "het misluk",
+    "config-install-extensions": "Insluitende uitbreidings",
+    "config-install-database": "Stel die databasis op",
+    "config-install-pg-schema-not-exist": "Die skema vir PostgreSQL bestaan ​​nie.",
+    "config-install-pg-schema-failed": "Die skep van tabelle het gefaal.\nMaak seker dat die gebruiker \"$1\" na skema \"$2\" mag skryf.",
+    "config-install-pg-commit": "Wysigings word gestoor",
+    "config-install-pg-plpgsql": "Kontroleer vir taal PL/pgSQL",
+    "config-pg-no-plpgsql": "U moet die taal PL/pgSQL in die database $1 installeer",
+    "config-install-user": "Besig om die databasisgebruiker te skep",
+    "config-install-user-alreadyexists": "Gebruiker \"$1\" bestaan al reeds",
+    "config-install-user-create-failed": "Skep van gebruiker \"$1\" het gefaal: $2",
+    "config-install-user-grant-failed": "Die toekenning van regte aan gebruiker \"$1\" het gefaal: $2",
+    "config-install-tables": "Skep tabelle",
+    "config-install-tables-exist": "'''Waarskuwing''': Dit lyk of MediaWiki se tabelle reeds bestaan.\nDie skep van tabelle word oorgeslaan.",
+    "config-install-tables-failed": "'''Fout''': die skep van 'n tabel het gefaal met die volgende fout: $1",
+    "config-install-interwiki": "Besig om data in die interwiki-tabel in te laai",
+    "config-install-interwiki-list": "Kon nie die lêer <code>interwiki.list</code> vind nie.",
+    "config-install-interwiki-exists": "'''Waarskuwing''': Die interwiki-tabel bevat reeds inskrywings.\nDie standaardlys word oorgeslaan.",
+    "config-install-stats": "Inisialiseer statistieke",
+    "config-install-keys": "Genereer geheime sleutel",
+    "config-install-sysop": "Skep 'n gebruiker vir die administrateur",
+    "config-install-subscribe-fail": "Kon nie vir MediaWiki-announce inskryf nie: $1",
+    "config-install-mainpage": "Skep die hoofblad met standaard inhoud",
+    "config-install-extension-tables": "Skep tabelle vir aangeskakel uitbreidings",
+    "config-install-mainpage-failed": "Kon nie die hoofblad laai nie: $1",
+    "config-install-done": "'''Veels geluk!'''\nU het MediaWiki suksesvol geïnstalleer.\n\nDie installeerder het 'n <code>LocalSettings.php</code> lêer opgestel.\nDit bevat al u instellings.\n\nU sal dit moet [$1 aflaai] en dit in die hoofgids van u wiki-installasie plaas; in dieselfde gids as index.php.\n'''Let wel''': As u dit nie nou doen nie, sal die gegenereerde konfigurasielêer nie later meer beskikbaar wees nadat u die installasie afgesluit het nie.\n\nAs dit gedoen is, kan u '''[u $2 wiki besoek]'''.",
+    "config-download-localsettings": "Laai <code>LocalSettings.php</code> af",
+    "config-help": "hulp",
+    "mainpagetext": "'''MediaWiki is suksesvol geïnstalleer.'''",
+    "mainpagedocfooter": "Konsulteer '''[//meta.wikimedia.org/wiki/Help:Contents User's Guide]''' vir inligting oor hoe om die wikisagteware te gebruik.\n\n== Hoe om te Begin ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/aln.json b/includes/installer/i18n/aln.json
new file mode 100644 (file)
index 0000000..16dbe0a
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Bresta"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki software u instalue me sukses.'''",
+    "mainpagedocfooter": "Për mâ shumë informata rreth përdorimit të softwareit wiki, ju lutem shikoni [//meta.wikimedia.org/wiki/Help:Contents dokumentacionin].\n\n\n== Për fillim ==\n\n* [//www.mediawiki.org/wiki/Help:Configuration_settings Konfigurimi i MediaWikit]\n* [//www.mediawiki.org/wiki/Help:FAQ Pyetjet e shpeshta rreth MediaWikit]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Njoftime rreth MediaWikit]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/am.json b/includes/installer/i18n/am.json
new file mode 100644 (file)
index 0000000..2c79fab
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki በትክክል ማስገባቱ ተከናወነ።'''",
+    "mainpagedocfooter": "ስለ ዊኪ ሶፍትዌር ጥቅም ለመረዳት፣ [//meta.wikimedia.org/wiki/Help:Contents User's Guide] ያንብቡ።\n\n== ለመጀመር ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/an.json b/includes/installer/i18n/an.json
new file mode 100644 (file)
index 0000000..90f5d5d
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Juanpabl"
+        ]
+    },
+    "mainpagetext": "'''O programa MediaWiki s'ha instalato correctament.'''",
+    "mainpagedocfooter": "Consulta a [//meta.wikimedia.org/wiki/Help:Contents Guía d'usuario] ta mirar información sobre cómo usar o software wiki.\n\n== Ta prencipiar ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de caracteristicas confegurables]\n* [//www.mediawiki.org/wiki/Manual:FAQ Preguntas cutianas sobre MediaWiki (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correu sobre ta anuncios de MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ang.json b/includes/installer/i18n/ang.json
new file mode 100644 (file)
index 0000000..a7ecaeb
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Gott wisst"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki hafaþ geworden spēdige inseted.'''",
+    "mainpagedocfooter": "Þeahta þone [//meta.wikimedia.org/wiki/Help:Contents Brūcenda Lǣdend]  on helpe mid þǣre nytte of ƿikisōftƿare.\n\n== Beȝinnunȝ ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Onfæstnunȝa ȝesetednessa ȝetæl]\n* [//www.mediawiki.org/wiki/Manual:FAQ Ȝetæl oft ascodra ascunȝa ymb MediaǷiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Ǣrendunȝȝetæl nīƿra MediaǷiki forþsendnessa]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ar.json b/includes/installer/i18n/ar.json
new file mode 100644 (file)
index 0000000..c7e3914
--- /dev/null
@@ -0,0 +1,27 @@
+{
+    "@metadata": {
+        "authors": [
+            "Meno25",
+            "Mido",
+            "OsamaK",
+            "روخو"
+        ]
+    },
+    "config-desc": "مثبت لميدياويكي",
+    "config-title": "تثبيت ميدياويكي $1",
+    "config-information": "معلومات",
+    "config-back": "→ ارجع",
+    "config-continue": "استمر ←",
+    "config-page-language": "اللغة",
+    "config-page-name": "الاسم",
+    "config-db-username": "اسم مستخدم قاعدة البيانات:",
+    "config-db-password": "كلمة سر قاعدة البيانات:",
+    "config-db-port": "منفذ قاعدة البيانات:",
+    "config-type-mysql": "ماي إس كيو إل",
+    "config-type-postgres": "بوستجر إس كيو إل",
+    "config-type-sqlite": "إس كيو لايت",
+    "config-type-oracle": "أوراكل",
+    "config-admin-email": "عنوان البريد الإلكتروني:",
+    "mainpagetext": "'''تم تثبيت ميدياويكي بنجاح.'''",
+    "mainpagedocfooter": "استشر [//meta.wikimedia.org/wiki/Help:Contents دليل المستخدم] لمعلومات حول استخدام برنامج الويكي.\n\n== البداية ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings قائمة إعدادات الضبط]\n* [//www.mediawiki.org/wiki/Manual:FAQ أسئلة متكررة حول ميدياويكي]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce القائمة البريدية الخاصة بإصدار ميدياويكي]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/arc.json b/includes/installer/i18n/arc.json
new file mode 100644 (file)
index 0000000..e109ca1
--- /dev/null
@@ -0,0 +1,22 @@
+{
+    "@metadata": {
+        "authors": [
+            "Basharh"
+        ]
+    },
+    "config-information": "ܝܕ̈ܥܬܐ",
+    "config-your-language": "ܠܫܢܐ ܕܝܠܟ:",
+    "config-wiki-language": "ܠܫܢܐ ܕܘܝܩܝ:",
+    "config-page-language": "ܠܫܢܐ",
+    "config-page-name": "ܫܡܐ",
+    "config-page-options": "ܓܒܝܬ̈ܐ",
+    "config-page-install": "ܢܨܘܒ",
+    "config-ns-other-default": "ܘܝܩܝ ܕܝܠܝ",
+    "config-admin-box": "ܚܘܫܒܢܐ ܕܡܕܒܪܢܐ",
+    "config-admin-name": "ܫܡܐ ܕܝܠܟ:",
+    "config-admin-password": "ܡܠܬܐ ܕܥܠܠܐ:",
+    "config-admin-password-confirm": "ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܬܐ ܐܚܪܬܐ:",
+    "config-admin-email": "ܡܘܢܥܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ:",
+    "config-profile-private": "ܘܝܩܝ ܦܪܨܘܦܝܐ",
+    "config-email-settings": "ܛܘܝܒ̈ܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ary.json b/includes/installer/i18n/ary.json
new file mode 100644 (file)
index 0000000..9437127
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Enzoreg"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki ṫ'instala be najaḫ.'''",
+    "mainpagedocfooter": "Ila bġiṫiw meĝlomaṫ ĥrin baċ ṫesṫeĝmlo had l-lojisyél siro ċofo [//meta.wikimedia.org/wiki/Aide:Contenu Gid dyal l-mosṫeĥdim]\n\n== L-bdaya mĝa MediaWiki ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista dyal l-paramétraṫ dyal l-konfigurasyon]\n* [//www.mediawiki.org/wiki/Manual:FAQ/fr FAQ fe MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista dyal l-modakaraṫ ĝla versyonaṫ jdad dyal MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/arz.json b/includes/installer/i18n/arz.json
new file mode 100644 (file)
index 0000000..e0f7319
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "''' ميدياويكى اتنزلت بنجاح.'''",
+    "mainpagedocfooter": "اسال [//meta.wikimedia.org/wiki/Help:Contents دليل اليوزر] للمعلومات حوالين استخدام برنامج الويكى.\n\n== البداية ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings لستة اعدادات الضبط]\n* [//www.mediawiki.org/wiki/Manual:FAQ أسئلة بتكرر حوالين الميدياويكى]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce لستة الايميلات بتاعة اعلانات الميدياويكى]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/as.json b/includes/installer/i18n/as.json
new file mode 100644 (file)
index 0000000..3af200f
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Chaipau",
+            "Gitartha.bordoloi"
+        ]
+    },
+    "mainpagetext": "'''মিডিয়াৱিকি সফলভাবে ইন্সটল কৰা হ'ল ।'''",
+    "mainpagedocfooter": "ৱিকি চ'ফটৱেৰ কেনেকৈ ব্যৱহাৰ কৰিব [//meta.wikimedia.org/wiki/Help:Contents সদস্যৰ সহায়িকা] চাওঁক ।\n\n== আৰম্ভণি কৰিবলৈ ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ast.json b/includes/installer/i18n/ast.json
new file mode 100644 (file)
index 0000000..56be311
--- /dev/null
@@ -0,0 +1,43 @@
+{
+    "@metadata": {
+        "authors": [
+            "Xuacu"
+        ]
+    },
+    "config-desc": "L'instalador pa MediaWiki",
+    "config-title": "Instalación de MediaWiki $1",
+    "config-information": "Información",
+    "config-localsettings-upgrade": "Detectose un ficheru <code>LocalSettings.php</code>.\nP'anovar esta instalación, escriba'l valor de\n<code>$wgUpgradeKey</code> nel cuadru d'abaxo.\nAlcontraralu en <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Deteutose un ficheru <code>LocalSettings.php</code>.\nP'anovar esta instalación, execute <code>update.php</code>",
+    "config-localsettings-key": "Clave d'anovamientu:",
+    "config-localsettings-badkey": "La clave que dio ye incorreuta.",
+    "config-upgrade-key-missing": "Deteutose una instalación esistente de MediaWiki.\nP'anovar esta instalación, ponga la llinia siguiente al final del ficheru <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "Paez que'l ficheru <code>LocalSettings.php</code> esistente ta incompletu.\nLa variable $1 nun ta definida.\nCamude'l ficheru <code>LocalSettings.php</code> pa qu'esta variable quede definida y calque \"{{int:Config-continue}}\".",
+    "config-localsettings-connection-error": "Alcontrose un error al conectar cola base de datos usando la configuración especificada en <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Corrixa esta configuración y vuelva a intentalo.\n\n$1",
+    "config-your-language": "La so llingua:",
+    "config-your-language-help": "Seleicione la llingua a emplegar nel procesu d'instalación.",
+    "config-wiki-language": "Llingua de la wiki:",
+    "config-wiki-language-help": "Seleicione la llingua que s'usará preferentemente na wiki.",
+    "config-back": "← Atrás",
+    "config-continue": "Siguir →",
+    "config-page-language": "Llingua",
+    "config-page-welcome": "¡Bienveníu a MediaWiki!",
+    "config-page-dbconnect": "Conectar cola base de datos",
+    "config-page-upgrade": "Anovar instalación esistente",
+    "config-page-dbsettings": "Configuración de la base de datos",
+    "config-page-name": "Nome",
+    "config-page-options": "Opciones",
+    "config-page-install": "Instalar",
+    "config-page-complete": "¡Completo!",
+    "config-page-restart": "Reaniciar la instalación",
+    "config-page-readme": "Llei-me",
+    "config-page-releasenotes": "Notes de la versión",
+    "config-page-copying": "Copiar",
+    "config-page-upgradedoc": "Anovando",
+    "config-page-existingwiki": "Wiki esistente",
+    "config-download-localsettings": "Descargar <code>LocalSettings.php</code>",
+    "config-help": "Ayuda",
+    "config-nofile": "Nun pudo atopase'l ficheru \"$1\". ¿Desaniciose?",
+    "mainpagetext": "'''MediaWiki instalóse correchamente.'''",
+    "mainpagedocfooter": "Visita la [//meta.wikimedia.org/wiki/Help:Contents Guía del usuariu] pa saber cómo usar esti software wiki.\n\n== Empecipiando ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Llista de les opciones de configuración]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de corréu de les ediciones de MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Llocaliza MediaWiki na to llingua]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/avk.json b/includes/installer/i18n/avk.json
new file mode 100644 (file)
index 0000000..7e3a0c3
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki inkeyen talpeyot.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/az.json b/includes/installer/i18n/az.json
new file mode 100644 (file)
index 0000000..63b9c4c
--- /dev/null
@@ -0,0 +1,29 @@
+{
+    "@metadata": {
+        "authors": [
+            "Cekli829",
+            "Vago",
+            "Wertuose"
+        ]
+    },
+    "config-back": "← Geri",
+    "config-continue": "Davam et →",
+    "config-page-language": "Dil",
+    "config-page-welcome": "MediaWiki-yə xoş gəlmişsiniz!",
+    "config-page-dbconnect": "Verilənlər bazasına birləşdir",
+    "config-page-dbsettings": "Verilənlər bazasının nizamlanması",
+    "config-page-name": "Ad",
+    "config-page-options": "Nizamlamalar:",
+    "config-page-install": "Nizamlama",
+    "config-page-complete": "Komplektləşdir!",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-utf8": "UTF-8",
+    "config-ns-generic": "Layihə",
+    "config-admin-name": "Sizin adınız:",
+    "config-admin-password": "Parol:",
+    "config-admin-email": "E-poçt ünvanı",
+    "config-help": "kömək",
+    "mainpagetext": "'''MediaWiki müvəffəqiyyətlə quraşdırıldı.'''",
+    "mainpagedocfooter": "Bu vikinin istifadəsi ilə bağlı məlumat almaq üçün [//meta.wikimedia.org/wiki/Help:Contents İstifadəçi məlumat səhifəsinə] baxın.\n\n== Faydalı keçidlər ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Tənzimləmələrin siyahısı]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki haqqında tez-tez soruşulan suallar]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-poçt siyahısı]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ba.json b/includes/installer/i18n/ba.json
new file mode 100644 (file)
index 0000000..d07dabf
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Haqmar"
+        ]
+    },
+    "mainpagetext": "«MediaWiki» уңышлы рәүештә ҡоролдо.",
+    "mainpagedocfooter": "Был вики менән эшләү тураһында мәғлүмәтте [//meta.wikimedia.org/wiki/Ярҙам:Белешмә ошонда] табып була.\n\n== Файҙалы сығанаҡтар ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Көйләүҙәр исемлеге (инг.)];\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki тураһында йыш бирелгән һорауҙар һәм яуаптар (инг.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-ның яңы версиялары тураһында хәбәрҙәр алып тороу]."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/bar.json b/includes/installer/i18n/bar.json
new file mode 100644 (file)
index 0000000..5eb5e2f
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Mucalexx"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki is erfoigreich installird worn.'''",
+    "mainpagedocfooter": "A Hüf zur da Benützung und Konfigurazion voh da Wiki-Software findst auf [//meta.wikimedia.org/wiki/Help:Contents Benützerhåndbuach].\n\n== Starthüfe ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Listen voh de Konfigurazionsvariaablen]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglisten voh de neichen MediaWiki-Versionen]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/bcc.json b/includes/installer/i18n/bcc.json
new file mode 100644 (file)
index 0000000..1b4f44a
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''مدیا وی کی گون موفقیت نصب بوت.'''",
+    "mainpagedocfooter": "مشورت کنیت گون  [//meta.wikimedia.org/wiki/Help:Contents User's Guide] په گشیترین اطلاعات په استفاده چه برنامه ویکی.\n\n== شروع بیت ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/bcl.json b/includes/installer/i18n/bcl.json
new file mode 100644 (file)
index 0000000..640cb22
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Instalado na an MediaWiki.'''",
+    "mainpagedocfooter": "Konsultarón tabì an [//meta.wikimedia.org/wiki/Help:Contents User's Guide] para sa impormasyon sa paggamit nin progama kaining wiki.\n\n== Pagpopoon ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/be-tarask.json b/includes/installer/i18n/be-tarask.json
new file mode 100644 (file)
index 0000000..911c3c2
--- /dev/null
@@ -0,0 +1,311 @@
+{
+    "@metadata": {
+        "authors": [
+            "EugeneZelenko",
+            "Jim-by",
+            "Wizardist",
+            "Zedlik",
+            "아라"
+        ]
+    },
+    "config-desc": "Праграма ўсталяваньня MediaWiki",
+    "config-title": "Усталяваньне MediaWiki $1",
+    "config-information": "Інфармацыя",
+    "config-localsettings-upgrade": "Выяўлены файл <code>LocalSettings.php</code>.\nКаб абнавіць гэтае усталяваньне, калі ласка, увядзіце значэньне <code>$wgUpgradeKey</code> у полі ніжэй.\nЯго можна знайсьці ў <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Быў знойдзены файл <code>LocalSettings.php</code>.\nКаб зьмяніць гэтае ўсталяваньне, калі ласка, запусьціце <code>update.php</code>",
+    "config-localsettings-key": "Ключ паляпшэньня:",
+    "config-localsettings-badkey": "Пададзены Вамі ключ зьяўляецца няслушным",
+    "config-upgrade-key-missing": "Выяўленае існуючае ўсталяваньне MediaWiki.\nКаб абнавіць гэтае ўсталяваньне, калі ласка, устаўце наступны радок у канец Вашага <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "Выглядае, што існуючы <code>LocalSettings.php</code> зьяўляецца няпоўным.\nНе ўстаноўленая пераменная $1.\nКалі ласка, зьмяніце <code>LocalSettings.php</code> так, каб была ўстаноўленая гэтая пераменная, і націсьніце «{{int:Config-continue}}».",
+    "config-localsettings-connection-error": "Адбылася памылка падчас злучэньня з базай зьвестак з выкарыстаньнем наладаў, пазначаных у <code>LocalSettings.php</code> ці <code>AdminSettings.php</code>. Калі ласка, выпраўце гэтыя налады і паспрабуйце зноў.\n\n$1",
+    "config-session-error": "Памылка стварэньня сэсіі: $1",
+    "config-session-expired": "Скончыўся тэрмін дзеяньня зьвестак сэсіі.\nСэсія мае абмежаваны тэрмін у $1.\nВы можаце павялічыць яго, зьмяніўшы парамэтар <code>session.gc_maxlifetime</code> у php.ini.\nПеразапусьціце праграму ўсталяваньня.",
+    "config-no-session": "Зьвесткі сэсіі згубленыя!\nПраверце php.ini і ўпэўніцеся, што ўстаноўлены слушны шлях у <code>session.save_path</code>.",
+    "config-your-language": "Вашая мова:",
+    "config-your-language-help": "Выберыце мову для выкарыстаньня падчас усталяваньня.",
+    "config-wiki-language": "Мова вікі:",
+    "config-wiki-language-help": "Выберыце мову, на якой пераважна будзе пісацца зьмест у вікі.",
+    "config-back": "← Назад",
+    "config-continue": "Далей →",
+    "config-page-language": "Мова",
+    "config-page-welcome": "Вітаем у MediaWiki!",
+    "config-page-dbconnect": "Падключэньне да базы зьвестак",
+    "config-page-upgrade": "Абнавіць існуючую ўстаноўку",
+    "config-page-dbsettings": "Налады базы зьвестак",
+    "config-page-name": "Назва",
+    "config-page-options": "Налады",
+    "config-page-install": "Усталяваць",
+    "config-page-complete": "Зроблена!",
+    "config-page-restart": "Пачаць усталяваньне зноў",
+    "config-page-readme": "Дадатковыя зьвесткі",
+    "config-page-releasenotes": "Заўвагі да выпуску",
+    "config-page-copying": "Капіяваньне",
+    "config-page-upgradedoc": "Абнаўленьне",
+    "config-page-existingwiki": "Існуючая вікі",
+    "config-help-restart": "Ці жадаеце выдаліць усе ўведзеныя зьвесткі і пачаць працэс усталяваньня зноў?",
+    "config-restart": "Так, пачаць зноў",
+    "config-welcome": "== Праверка асяродзьдзя ==\nПраверка патрэбная для запэўніваньня, што гэтае асяродзьдзе слушнае для ўсталяваньня MediaWiki.\nВам патрэбна будзе падаць усе вынікі праверкі, калі спатрэбіцца дапамога падчас усталяваньня.",
+    "config-copyright": "== Аўтарскае права і ўмовы ==\n\n$1\n\nThis 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.\n\nThis 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'''.\nSee the GNU General Public License for more details.\n\nYou should have received <doclink href=Copying>a copy of the GNU General Public License</doclink> along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. or [http://www.gnu.org/copyleft/gpl.html read it online].",
+    "config-sidebar": "* [//www.mediawiki.org Хатняя старонка MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents Даведка для ўдзельнікаў]\n* [//www.mediawiki.org/wiki/Manual:Contents Даведка для адміністратараў]\n* [//www.mediawiki.org/wiki/Manual:FAQ Адказы на частыя пытаньні]\n----\n* <doclink href=Readme>Прачытайце</doclink>\n* <doclink href=ReleaseNotes>Паляпшэньні ў вэрсіі</doclink>\n* <doclink href=Copying>Капіяваньне</doclink>\n* <doclink href=UpgradeDoc>Абнаўленьне</doclink>",
+    "config-env-good": "Асяродзьдзе было праверанае.\nВы можаце ўсталёўваць MediaWiki.",
+    "config-env-bad": "Асяродзьдзе было праверанае.\nУсталяваньне MediaWiki немагчымае.",
+    "config-env-php": "Усталяваны PHP $1.",
+    "config-env-php-toolow": "Усталяваны PHP $1.\nАле MediaWiki патрабуе PHP вэрсіі $2 ці навейшай.",
+    "config-unicode-using-utf8": "Выкарыстоўваецца бібліятэка Unicode-нармалізацыі Браяна Вібэра",
+    "config-unicode-using-intl": "Выкарыстоўваецца [http://pecl.php.net/intl intl пашырэньне з PECL] для Unicode-нармалізацыі",
+    "config-unicode-pure-php-warning": "'''Папярэджаньне''': [http://pecl.php.net/intl Пашырэньне intl з PECL] — ня слушнае для Unicode-нармалізацыі, цяпер выкарыстоўваецца марудная PHP-рэалізацыя.\nКалі ў Вас сайт з высокай наведваемасьцю, раім пачытаць пра [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-нармалізацыю].",
+    "config-unicode-update-warning": "'''Папярэджаньне''': усталяваная вэрсія бібліятэкі для Unicode-нармалізацыі выкарыстоўвае састарэлую вэрсію бібліятэкі з [http://site.icu-project.org/ праекту ICU].\nРаім [//www.mediawiki.org/wiki/Unicode_normalization_considerations абнавіць], калі ваш сайт будзе працаваць зь Unicode.",
+    "config-no-db": "Немагчыма знайсьці адпаведны драйвэр базы зьвестак. Вам неабходна ўсталяваць драйвэр базы зьвестак для PHP.\nПадтрымліваюцца наступныя тыпы базаў зьвестак: $1.\n\nКалі вы выкарыстоўваеце агульны хостынг, запытайцеся ў свайго хостынг-правайдэра наконт усталяваньня патрабуемага драйвэру базы зьвестак.\nКалі Вы кампілявалі PHP самастойна, пераканфігуруйце і сабярыце яго з дазволеным кліентам базаў зьвестак, напрыклад, <code>./configure --with-mysql</code>.\nКалі Вы ўсталёўвалі PHP з пакетаў Debian ці Ubuntu, то Вам трэба ўсталяваць дадаткова модуль <code>php5-mysql</code>.",
+    "config-outdated-sqlite": "'''Папярэджаньне''': усталяваны SQLite $1, у той час, калі мінімальная сумяшчальная вэрсія — $2. SQLite ня будзе даступны.",
+    "config-no-fts3": "'''Папярэджаньне''': SQLite створаны без модуля [//sqlite.org/fts3.html FTS3], для гэтага ўнутранага інтэрфэйсу ня будзе даступная магчымасьць пошуку.",
+    "config-register-globals": "'''Папярэджаньне: уключаная опцыя PHP <code>[http://php.net/register_globals register_globals]</code>.'''\n'''Адключыце яе, калі можаце.'''\nMediaWiki будзе працаваць, але гэта панізіць узровень бясьпекі сэрвэра.",
+    "config-magic-quotes-runtime": "'''Фатальная памылка: уключаная опцыя PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!'''\nГэтая опцыя псуе ўводны паток зьвестак непрадказальным чынам.\nПрацяг усталяваньня альбо выкарыстаньне MediaWiki без адключэньня гэтай опцыі немагчымыя.",
+    "config-magic-quotes-sybase": "'''Фатальная памылка: рэжым [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] уключаны!'''\nГэты рэжым шкодзіць уваходныя зьвесткі непрадказальным чынам.\nПрацяг усталяваньня альбо выкарыстаньне MediaWiki немагчымыя, пакуль рэжым ня будзе выключаны.",
+    "config-mbstring": "'''Фатальная памылка: рэжым [http://www.php.net/manual/en/ref.info.php#mbstring.overload mbstring.func_overload] уключаны!'''\nГэты рэжым выклікае памылкі і можа шкодзіць зьвесткі непрадказальным чынам.\nПрацяг усталяваньня альбо выкарыстаньне MediaWiki немагчымыя, пакуль рэжым ня будзе выключаны.",
+    "config-ze1": "'''Фатальная памылка: рэжым [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] уключаны!'''\nГэтая рэжым стварае вялікія праблемы ў працы MediaWiki.\nПрацяг усталяваньня альбо выкарыстаньне MediaWiki немагчымыя, пакуль рэжым ня будзе выключаны.",
+    "config-safe-mode": "'''Папярэджаньне:''' [http://www.php.net/features.safe-mode бясьпечны рэжым] PHP уключаны.\nГэта можа выклікаць праблемы, галоўным чынам падчас загрузак файлаў і ў падтрымцы <code>math</code>.",
+    "config-xml-bad": "Ня знойдзены модуль XML для PHP.\nMediaWiki патрэбныя функцыі з гэтага модулю, таму MediaWiki ня будзе працаваць у гэтай канфігурацыі.\nКалі Вы выкарыстоўваеце Mandrake, усталюйце пакет php-xml.",
+    "config-pcre": "Ня знойдзены модуль падтрымкі PCRE.\nMediaWiki для працы патрабуюцца функцыі рэгулярных выразаў у стылі Perl.",
+    "config-pcre-no-utf8": "'''Фатальная памылка''': модуль PCRE для PHP скампіляваны без падтрымкі PCRE_UTF8.\nMediaWiki патрабуе падтрымкі UTF-8 для слушнай працы.",
+    "config-memory-raised": "Абмежаваньне на даступную для PHP памяць <code>memory_limit</code> было падвышанае з $1 да $2.",
+    "config-memory-bad": "'''Папярэджаньне:''' памер PHP <code>memory_limit</code> складае $1.\nВерагодна, гэта вельмі мала.\nУсталяваньне можа быць няўдалым!",
+    "config-ctype": "'''Фатальная памылка''': PHP мусіць быць скампіляваны з падтрымкай [http://www.php.net/manual/en/ctype.installation.php пашырэньня Ctype].",
+    "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].\nАб’ектнае кэшаваньне ня ўключанае.",
+    "config-mod-security": "'''Папярэджаньне''': на Вашым ўэб-сэрверы ўключаны [http://modsecurity.org/ mod_security]. У выпадку няслушнай наладцы, ён можа стаць прычынай праблемаў для MediaWiki ці іншага праграмнага забесьпячэньня, якое дазваляе ўдзельнікам дасылаць на сэрвэр любы зьмест.\nГлядзіце [http://modsecurity.org/documentation/ дакумэнтацыю mod_security] ці зьвярніцеся ў падтрымку Вашага хосту, калі ў Вас узьнікаюць выпадковыя праблемы.",
+    "config-diff3-bad": "GNU diff3 ня знойдзены.",
+    "config-git": "Знойдзеная сыстэма канстролю вэрсіяў Git: <code>$1</code>",
+    "config-git-bad": "Сыстэма кантролю вэрсіяў Git ня знойдзеная.",
+    "config-imagemagick": "Знойдзены ImageMagick: <code>$1</code>.\nПасьля ўключэньня загрузак будзе ўключанае маштабаваньне выяваў.",
+    "config-gd": "GD падтрымліваецца ўбудавана.\nПасьля ўключэньня загрузак будзе ўключанае маштабаваньне выяваў.",
+    "config-no-scaling": "Ні GD, ні ImageMagick ня знойдзеныя.\nМаштабаваньне выяваў будзе адключанае.",
+    "config-no-uri": "'''Памылка:''' Не магчыма вызначыць цяперашні URI.\nУсталяваньне спыненае.",
+    "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> уразьлівая да выкананьня адвольнага коду.\nХоць MediaWiki і правярае ўсе файлы перад захаваньнем, вельмі рэкамэндуецца [//www.mediawiki.org/wiki/Manual:Security#Upload_security закрыць гэтую ўразьлівасьць] перад уключэньнем магчымасьці загрузкі файлаў.",
+    "config-no-cli-uploads-check": "'''Папярэджаньне:''' Вашая дырэкторыя для загрузак па змоўчваньні (<code>$1</code>), не правераная на ўразьлівасьць да выкананьня адвольных скрыптоў падчас усталяваньня CLI.\n.",
+    "config-brokenlibxml": "У Вашай сыстэме ўсталяваныя PHP і libxml2 зь несумяшчальнымі вэрсіямі, што можа прывесьці да пашкоджаньня зьвестак MediaWiki і іншых ўэб-дастасаваньняў.\nАбнавіце PHP да вэрсіі 5.2.9 ці болей позьняй, а libxml2 да 2.7.3 ці болей позьняй ([//bugs.php.net/bug.php?id=45996 паведамленьне пра памылку на сайце PHP]).\nУсталяваньне перарванае.",
+    "config-using531": "PHP $1 не сумяшчальнае з MediaWiki з-за памылкі ў перадачы парамэтраў па ўказальніку да <code>__call()</code>.\nАбнавіце PHP да вэрсіі 5.3.2 ці болей позьняй, ці адкаціце да вэрсіі 5.3.0 каб гэта выправіць.\nУсталяваньне перарванае.",
+    "config-suhosin-max-value-length": "Suhosin усталяваны і абмяжоўвае <code>даўжыню</code> парамэтра GET да $1 {{PLURAL:$1|байта|байтаў}}.\nResourceLoader, складнік MediaWiki, будзе абходзіць гэтае абмежаваньне, што, адаб’ецца на прадукцыйнасьці.\nКалі магчыма, варта ўсталяваць у <code>php.ini</code> <code>suhosin.get.max_value_length</code> роўным 1024 ці больш, а таксама вызначыць тое ж значэньне для <code>$wgResourceLoaderMaxQueryLength</code> у LocalSettings.php.",
+    "config-db-type": "Тып базы зьвестак:",
+    "config-db-host": "Хост базы зьвестак:",
+    "config-db-host-help": "Калі сэрвэр Вашай базы зьвестак знаходзіцца на іншым сэрвэры, увядзіце тут імя хоста ці IP-адрас.\n\nКалі Вы карыстаецеся shared-хостынгам, Ваш хостынг-правайдэр мусіць даць Вам слушнае імя хоста базы зьвестак у сваёй дакумэнтацыі.\n\nКалі Вы усталёўваеце сэрвэр Windows з выкарыстаньнем MySQL, выкарыстаньне «localhost» можа не працаваць для назвы сэрвэра. У гэтым выпадку паспрабуйце пазначыць «127.0.0.1»  для лякальнага IP-адраса.\n\nКалі Вы выкарыстоўваеце PostgreSQL, пакіньце поле пустым, каб далучыцца праз Unix-сокет.",
+    "config-db-host-oracle": "TNS базы зьвестак:",
+    "config-db-host-oracle-help": "Увядзіце слушнае [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm лякальнае імя злучэньня]; файл tnsnames.ora павінен быць бачным для гэтага ўсталяваньня.<br />Калі Вы выкарыстоўваеце кліенцкія бібліятэкі 10g ці больш новыя, Вы можаце таксама выкарыстоўваць мэтад наданьня назваў [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm лёгкае злучэньне].",
+    "config-db-wiki-settings": "Ідэнтыфікацыя гэтай вікі",
+    "config-db-name": "Назва базы зьвестак:",
+    "config-db-name-help": "Выберыце імя для вызначэньня Вашай вікі.\nЯно ня мусіць зьмяшчаць прагалаў.\n\nКалі Вы набываеце shared-хостынг, Ваш хостынг-правайдэр мусіць надаць Вам ці пэўнае імя базы зьвестак для выкарыстаньня, ці магчымасьць ствараць базы зьвестак праз кантрольную панэль.",
+    "config-db-name-oracle": "Схема базы зьвестак:",
+    "config-db-account-oracle-warn": "Існуюць тры сцэнары ўсталяваньня Oracle як базы зьвестак для MediaWiki:\n\nКалі Вы жадаеце стварыць рахунак базы зьвестак як частку працэсу ўсталяваньня, калі ласка, падайце рахунак з роляй SYSDBA як рахунак базы зьвестак для ўсталяваньня і пазначце пажаданыя правы рахунку з доступам да Інтэрнэту, у адваротным выпадку Вы можаце таксама стварыць рахунак з доступам да Інтэрнэту ўручную і падаць толькі гэты рахунак (калі патрабуюцца правы для стварэньня схемы аб’ектаў) ці падайце два розных рахункі, адзін з правамі на стварэньне і адзін з абмежаваньнямі для доступу да Інтэрнэту.\n\nСкрыпт для стварэньня рахунку з патрабуемымі правамі можна знайсьці ў дырэкторыі гэтага ўсталяваньня «maintenance/oracle/». Памятайце, што выкарыстаньне рахунку з абмежаваньнямі адключыць усе падтрымліваемыя магчымасьці даступныя па змоўчваньні.",
+    "config-db-install-account": "Імя карыстальніка для ўсталяваньня",
+    "config-db-username": "Імя карыстальніка базы зьвестак:",
+    "config-db-password": "Пароль базы зьвестак:",
+    "config-db-password-empty": "Калі ласка, увядзіце пароль для новага карыстальніка базы зьвестак: $1.\nМагчыма стварыць карыстальніка без паролю, але гэта небясьпечна.",
+    "config-db-install-username": "Увядзіце імя карыстальніка, якое будзе выкарыстоўвацца для злучэньня з базай зьвестак падчас усталяваньня. Гэта не назва рахунку MediaWiki; гэта імя карыстальніка Вашай базы зьвестак.",
+    "config-db-install-password": "Увядзіце пароль, які будзе выкарыстоўвацца для злучэньня з базай зьвестак падчас усталяваньня. Гэта не пароль рахунку MediaWiki; гэта пароль Вашай базы зьвестак.",
+    "config-db-install-help": "Увядзіце імя карыстальніка і пароль, якія будуць выкарыстаныя для далучэньня да базы зьвестак падчас працэсу ўсталяваньня.",
+    "config-db-account-lock": "Выкарыстоўваць тыя ж імя карыстальніка і пароль пасьля ўсталяваньня",
+    "config-db-wiki-account": "Імя карыстальніка для працы",
+    "config-db-wiki-help": "Увядзіце імя карыстальніка і пароль, якія будуць выкарыстаныя для далучэньня да базы зьвестак падчас працы (пасьля ўсталяваньня).\nКалі рахунак ня створаны, а рахунак для ўсталяваньня мае значныя правы, гэты рахунак будзе створаны зь мінімальна патрэбнымі для працы вікі правамі.",
+    "config-db-prefix": "Прэфікс табліцаў базы зьвестак:",
+    "config-db-prefix-help": "Калі Вы разьдзяляеце адну базу зьвестак паміж некалькімі вікі, ці паміж MediaWiki і іншым вэб-дастасаваньнем, можаце вызначыць прэфікс назваў табліцаў для пазьбяганьня канфліктаў.\nПазьбягайце прагалаў.\n\nГэтае поле звычайна пакідаецца пустым.",
+    "config-db-charset": "Кадаваньне базы зьвестак",
+    "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 UTF-8 з адваротнай сумяшчальнасьцю",
+    "config-charset-help": "'''Папярэджаньне:''' калі Вы выкарыстоўваеце '''UTF-8 з адваротнай сумяшчальнасьцю''' на MySQL 4.1+ і зробіце рэзэрвовую копію праз <code>mysqldump</code>, ён можа зьнішчыць усе не-ASCII-сымбалі беспаваротна!\n\nУ '''бінарным (binary)''' рэжыме MediaWiki захоўвае тэксты ў UTF-8 у палёх тыпу binary.\nГэты рэжым болей эфэктыўны за рэжым MySQL UTF-8 і дазваляе выкарыстоўваць увесь абсяг сымбаляў Unicode.\nУ рэжыме '''UTF-8''' MySQL будзе ведаць, у якім кадаваньне Вы зьмяшчаеце зьвесткі, і будзе вяртаць іх у адпаведным кадаваньні,\nале MySQL ня можа ўтрымліваць сымбалі па-за [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Стандартным шматмоўным пластом] сымбаляў Unicode.",
+    "config-mysql-old": "Патрабуецца MySQL $1 ці навейшая, усталяваная вэрсія $2.",
+    "config-db-port": "Порт базы зьвестак:",
+    "config-db-schema": "Схема для MediaWiki",
+    "config-db-schema-help": "Гэтая схема слушная ў большасьці выпадкаў.\nЗьмяняйце яе толькі тады, калі Вы ведаеце, што гэта неабходна.",
+    "config-pg-test-error": "Немагчыма далучыцца да базы зьвестак '''$1''': $2",
+    "config-sqlite-dir": "Дырэкторыя зьвестак SQLite:",
+    "config-sqlite-dir-help": "SQLite захоўвае ўсе зьвесткі ў адзіным файле.\n\nПададзеная Вамі дырэкторыя павінна быць даступнай да запісу вэб-сэрвэрам падчас усталяваньня.\n\nЯна '''ня''' мусіць быць даступнай праз Сеціва, вось чаму мы не захоўваем яе ў адным месцы з файламі PHP.\n\nПраграма ўсталяваньня дадаткова створыць файл <code>.htaccess</code>, але калі ён не выкарыстоўваецца, хто заўгодна зможа атрымаць зьвесткі з базы зьвестак.\nГэта ўключае як прыватныя зьвесткі ўдзельнікаў (адрасы электроннай пошты, хэшы пароляў), гэтак і выдаленыя вэрсіі старонак і іншыя зьвесткі, доступ да якіх маецца абмежаваны.\n\nПадумайце над тым, каб зьмяшчаць базу зьвестак у іншым месцы, напрыклад у <code>/var/lib/mediawiki/yourwiki</code>.",
+    "config-oracle-def-ts": "Прастора табліцаў па змоўчваньні:",
+    "config-oracle-temp-ts": "Часовая прастора табліцаў:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "MediaWiki падтрымлівае наступныя сыстэмы базаў зьвестак:\n\n$1\n\nКалі Вы ня бачыце сыстэму базаў зьвестак, якую Вы спрабуеце выкарыстоўваць ў сьпісе ніжэй, перайдзіце па спасылцы інструкцыі, якая знаходзіцца ніжэй, каб уключыць падтрымку.",
+    "config-support-mysql": "* $1 зьяўляецца галоўнай мэтай MediaWiki і падтрымліваецца лепей за ўсё ([http://www.php.net/manual/en/mysql.installation.php як кампіляваць PHP з падтрымкай MySQL])",
+    "config-support-postgres": "* $1 — вядомая сыстэма базы зьвестак з адкрытым кодам, якая зьяўляецца альтэрнатывай MySQL ([http://www.php.net/manual/en/pgsql.installation.php як кампіляваць PHP з падтрымкай PostgreSQL]). Яна можа ўтрымліваць дробныя памылкі, і не рэкамэндуецца выкарыстоўваць яе для працуючых праектаў.",
+    "config-support-sqlite": "* $1 — невялікая сыстэма базы зьвестак, якая мае вельмі добрую падтрымку. ([http://www.php.net/manual/en/pdo.installation.php як кампіляваць PHP з падтрымкай SQLite], выкарыстоўвае PDO)",
+    "config-support-oracle": "* $1 зьяўляецца камэрцыйнай прафэсійнай базай зьвестак. ([http://www.php.net/manual/en/oci8.installation.php Як скампіляваць PHP з падтрымкай OCI8])",
+    "config-header-mysql": "Налады MySQL",
+    "config-header-postgres": "Налады PostgreSQL",
+    "config-header-sqlite": "Налады SQLite",
+    "config-header-oracle": "Налады Oracle",
+    "config-invalid-db-type": "Няслушны тып базы зьвестак",
+    "config-missing-db-name": "Вы павінны ўвесьці значэньне парамэтру «Імя базы зьвестак»",
+    "config-missing-db-host": "Вы павінны ўвесьці значэньне парамэтру «Хост базы зьвестак»",
+    "config-missing-db-server-oracle": "Вы павінны ўвесьці значэньне парамэтру «TNS базы зьвестак»",
+    "config-invalid-db-server-oracle": "Няслушнае TNS базы зьвестак «$1».\nНазва можа ўтрымліваць толькі ASCII-літары (a-z, A-Z), лічбы (0-9), сымбалі падкрэсьліваньня(_) і кропкі (.).",
+    "config-invalid-db-name": "Няслушная назва базы зьвестак «$1».\nНазва можа ўтрымліваць толькі ASCII-літары (a-z, A-Z), лічбы (0-9), сымбалі падкрэсьліваньня(_) і працяжнікі (-).",
+    "config-invalid-db-prefix": "Няслушны прэфікс базы зьвестак «$1».\nЁн можа зьмяшчаць толькі ASCII-літары (a-z, A-Z), лічбы (0-9), сымбалі падкрэсьліваньня (_) і працяжнікі (-).",
+    "config-connection-error": "$1.\n\nПраверце хост, імя карыстальніка і пароль ніжэй і паспрабуйце зноў.",
+    "config-invalid-schema": "Няслушная схема для MediaWiki «$1».\nВыкарыстоўвайце толькі ASCII-літары (a-z, A-Z), лічбы (0-9) і сымбалі падкрэсьліваньня (_).",
+    "config-db-sys-create-oracle": "Праграма ўсталяваньня падтрымлівае толькі выкарыстаньне рахунку SYSDBA для стварэньня новага рахунку.",
+    "config-db-sys-user-exists-oracle": "Рахунак карыстальніка «$1» ужо існуе. SYSDBA можа выкарыстоўвацца толькі для стварэньня новых рахункаў!",
+    "config-postgres-old": "Патрабуецца PostgreSQL $1 ці навейшая, усталяваная вэрсія $2.",
+    "config-sqlite-name-help": "Выберыце назву, якая будзе ідэнтыфікаваць Вашую вікі.\nНе выкарыстоўвайце прагалы ці злучкі.\nНазва будзе выкарыстоўвацца ў назьве файла зьвестак SQLite.",
+    "config-sqlite-parent-unwritable-group": "Немагчыма стварыць дырэкторыю зьвестак <code><nowiki>$1</nowiki></code>, таму што бацькоўская дырэкторыя <code><nowiki>$2</nowiki></code> абароненая ад запісаў вэб-сэрвэра.\n\nПраграма ўсталяваньня вызначыла карыстальніка, які запусьціў вэб-сэрвэр.\nДазвольце запісы ў дырэкторыю <code><nowiki>$3</nowiki></code> для працягу.\nУ сыстэме Unix/Linux зрабіце:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Немагчыма стварыць дырэкторыю зьвестак <code><nowiki>$1</nowiki></code>, таму што бацькоўская дырэкторыя <code><nowiki>$2</nowiki></code> абароненая ад запісаў вэб-сэрвэра.\n\nПраграма ўсталяваньня вызначыла карыстальніка, які запусьціў вэб-сэрвэр.\nДазвольце яму (і іншым) запісы ў дырэкторыю <code><nowiki>$3</nowiki></code> для працягу.\nУ сыстэме Unix/Linux зрабіце:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Памылка падчас стварэньня дырэкторыі «$1».\nПраверце шлях і паспрабуйце зноў.",
+    "config-sqlite-dir-unwritable": "Запіс у дырэкторыю «$1» немагчымы.\nЗьмяніце налады доступу, каб вэб-сэрвэр меў правы на запіс, і паспрабуйце зноў.",
+    "config-sqlite-connection-error": "$1.\n\nПраверце дырэкторыю для зьвестак, назву базы зьвестак і паспрабуйце зноў.",
+    "config-sqlite-readonly": "Файл <code>$1</code> недаступны для запісу.",
+    "config-sqlite-cant-create-db": "Немагчыма стварыць файл базы зьвестак <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "PHP бракуе падтрымкі FTS3 — табліцы пагаршаюцца",
+    "config-can-upgrade": "У гэтай базе зьвестак ёсьць табліцы MediaWiki.\nКаб абнавіць іх да MediaWiki $1, націсьніце '''Працягнуць'''.",
+    "config-upgrade-done": "Абнаўленьне завершанае.\n\nЦяпер Вы можаце [$1 пачаць выкарыстаньне вікі].\n\nКалі Вы жадаеце рэгенэраваць <code>LocalSettings.php</code>, націсьніце кнопку ніжэй.\nГэтае дзеяньне '''не рэкамэндуецца''', калі Вы ня маеце праблемаў у працы вікі.",
+    "config-upgrade-done-no-regenerate": "Абнаўленьне скончанае.\n\nЦяпер Вы можаце [$1 пачаць працу з вікі].",
+    "config-regenerate": "Рэгенэраваць LocalSettings.php →",
+    "config-show-table-status": "Запыт '<code>SHOW TABLE STATUS</code>' не атрымаўся!",
+    "config-unknown-collation": "'''Папярэджаньне:''' база зьвестак выкарыстоўвае нераспазнанае супастаўленьне.",
+    "config-db-web-account": "Рахунак базы зьвестак для вэб-доступу",
+    "config-db-web-help": "Выберыце імя карыстальніка і пароль, які выкарыстоўваецца вэб-сэрвэрам для злучэньня з сэрвэрам базы зьвестак, падчас звычайных апэрацыяў вікі.",
+    "config-db-web-account-same": "Выкарыстоўваць той жа рахунак, што для ўсталяваньня",
+    "config-db-web-create": "Стварыць рахунак, калі ён яшчэ не існуе",
+    "config-db-web-no-create-privs": "Рахунак, які Вы пазначылі для ўсталяваньня ня мае правоў для стварэньня рахунку.\nРахунак, які Вы пазначылі тут, мусіць ужо існаваць.",
+    "config-mysql-engine": "Рухавік сховішча:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Папярэджаньне''': Вы выбралі MyISAM у якасьці рухавіка для захоўваньня зьвестак у MySQL, які не рэкамэндуецца да выкарыстаньня з MediaWiki па прычынах:\n* кепская падтрымка паралельнай апрацоўкі з-за таблічных блякаваньняў;\n* большая імавернасьць пашкоджаньня зьвестак у параўнаньні зь іншымі рухавікамі;\n* код MediaWiki не ва ўсіх выпадках улічвае асаблівасьці MyISAM.\n\nКалі Ваш MySQL-сэрвэр падтрымлівае InnoDB, вельмі рэкамэндуецца выкарыстаньне менавіта гэтага рухавіка.\nКалі MySQL-сэрвэр не падтрымлівае InnoDB, пэўна, настаў час абнавіць яго.",
+    "config-mysql-engine-help": "'''InnoDB''' — звычайна найбольш слушны варыянт, таму што добра падтрымлівае паралелізм.\n\n'''MyISAM''' можа быць хутчэйшай у вікі з адным удзельнікам, ці толькі для чытаньня.\nБазы зьвестак на MyISAM вядомыя тым, што ў іх зьвесткі шкодзяцца нашмат часьцей за InnoDB.",
+    "config-mysql-charset": "Кадаваньне базы зьвестак:",
+    "config-mysql-binary": "Двайковае",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "У '''двайковым рэжыме''', MediaWiki захоўвае тэкст у кадаваньні UTF-8 у базе зьвестак у двайковых палях.\nГэта болей эфэктыўна за рэжым MySQL UTF-8, і дазваляе Вам выкарыстоўваць увесь дыяпазон сымбаляў Unicode.\n\nУ '''рэжыме UTF-8''', MySQL ведае, якая табліцы сымбаляў выкарыстоўваецца ў Вашых зьвестках, і можа адпаведна прадстаўляць і канвэртаваць іх, але гэта не дазволіць Вам захоўваць сымбалі па-за межамі [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Базавага шматмоўнага дыяпазону].",
+    "config-site-name": "Назва вікі:",
+    "config-site-name-help": "Назва будзе паказвацца ў загалоўку браўзэра і ў некаторых іншых месцах.",
+    "config-site-name-blank": "Увядзіце назву сайта.",
+    "config-project-namespace": "Прастора назваў праекту:",
+    "config-ns-generic": "Праект",
+    "config-ns-site-name": "Такая ж, як і назва вікі: $1",
+    "config-ns-other": "Іншая (вызначце)",
+    "config-ns-other-default": "MyWiki",
+    "config-project-namespace-help": "Па прыкладу Вікіпэдыі, шматлікія вікі трымаюць уласныя старонкі з правіламі асобна ад старонак са зьместам, у «'''прасторы назваў праекту'''».\nУсе назвы старонак у гэтай прасторы назваў пачынаюцца з прыстаўкі, якую Вы можаце пазначыць тут.\nТрадыцыйна, гэтая прыстаўка вытворная ад назвы вікі, яле яна ня можа ўтрымліваць некаторыя сымбалі, такія як «#» ці «:».",
+    "config-ns-invalid": "Пададзеная няслушная прастора назваў «<nowiki>$1</nowiki>».\nПадайце іншую прастору назваў праекту.",
+    "config-ns-conflict": "Пазначаная прастора назваў «<nowiki>$1</nowiki>» канфліктуе з прасторай назваў MediaWiki па змоўчваньні.\nПазначце іншую прастору назваў праекту.",
+    "config-admin-box": "Рахунак адміністратара",
+    "config-admin-name": "Вашае імя:",
+    "config-admin-password": "Пароль:",
+    "config-admin-password-confirm": "Пароль яшчэ раз:",
+    "config-admin-help": "Увядзіце тут Вашае імя ўдзельніка, напрыклад «Янка Кавалевіч».\nГэтае імя будзе выкарыстоўвацца для ўваходу ў вікі.",
+    "config-admin-name-blank": "Увядзіце імя адміністратара.",
+    "config-admin-name-invalid": "Пададзенае няслушнае імя ўдзельніка «<nowiki>$1</nowiki>».\nПадайце іншае імя ўдзельніка.",
+    "config-admin-password-blank": "Увядзіце пароль рахунку адміністратара.",
+    "config-admin-password-same": "Пароль ня можа быць аднолькавым зь іменем удзельніка.",
+    "config-admin-password-mismatch": "Уведзеныя Вамі паролі не супадаюць.",
+    "config-admin-email": "Адрас электроннай пошты:",
+    "config-admin-email-help": "Увядзіце тут адрас электроннай пошты, каб атрымліваць электронныя лісты ад іншых удзельнікаў вікі, скідваць Ваш пароль і атрымліваць абвешчаньні пра зьмены старонак, якія знаходзяцца ў Вашым сьпісе назіраньня. Вы можаце пакінуць гэтае поле пустым.",
+    "config-admin-error-user": "Унутраная памылка падчас стварэньня рахунку адміністратара зь іменем «<nowiki>$1</nowiki>».",
+    "config-admin-error-password": "Унутраная памылка падчас устаноўкі паролю для адміністратара «<nowiki>$1</nowiki>»: <pre>$2</pre>",
+    "config-admin-error-bademail": "Вы ўвялі няслушны адрас электроннай пошты",
+    "config-subscribe": "Падпісацца на [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce сьпіс распаўсюджаньня навінаў пра зьяўленьне новых вэрсіяў].",
+    "config-subscribe-help": "Гэта ня вельмі актыўны сьпіс распаўсюджаньня навінаў пра зьяўленьне новых вэрсіяў, які ўключаючы важныя навіны пра бясьпеку.\nВам неабходна падпісацца на яго і абнавіць Вашае ўсталяваньне MediaWiki, калі зьявяцца новыя вэрсіі.",
+    "config-subscribe-noemail": "Вы спрабавалі падпісацца на рассылку паведамленьняў пра выхад новых вэрсіяў, не пазначыўшы адрас электроннай пошты.\nКалі ласка, падайце слушны адрас, калі Вы жадаеце падпісацца на рассылку.",
+    "config-almost-done": "Вы амаль што скончылі!\nАстатнія налады можна прапусьціць і пачаць усталяваньне вікі.",
+    "config-optional-continue": "Задаць болей пытаньняў.",
+    "config-optional-skip": "Хопіць, проста ўсталяваць вікі.",
+    "config-profile": "Профіль правоў удзельніка:",
+    "config-profile-wiki": "Адкрытая вікі",
+    "config-profile-no-anon": "Патрэбнае стварэньне рахунку",
+    "config-profile-fishbowl": "Толькі для аўтарызаваных рэдактараў",
+    "config-profile-private": "Прыватная вікі",
+    "config-profile-help": "Вікі працуюць лепей, калі Вы дазваляеце як мага большай колькасьці людзей рэдагаваць яе.\nУ MediaWiki вельмі лёгка праглядаць апошнія зьмены і выпраўляць любыя пашкоджаньні зробленыя недасьведчанымі ўдзельнікамі альбо вандаламі.\n\nТым ня менш, многія лічаць, што MediaWiki можа быць карыснай ў шматлікіх іншых ролях, і часта вельмі нялёгка растлумачыць усім перавагі выкарыстаньня тэхналёгіяў вікі.\nТаму Вы маеце выбар.\n\n'''{{int:config-profile-wiki}}''' дазваляе рэдагаваць усім, нават без уваходу ў сыстэму.\nВікі з '''{{int:config-profile-no-anon}}''' дазваляе дадатковую адказнасьць, але можа адштурхнуць некаторых патэнцыйных удзельнікаў.\n\nСцэнар '''{{int:config-profile-fishbowl}}''' дазваляе рэдагаваць зацьверджаным удзельнікам, але ўсе могуць праглядаць старонкі іх гісторыю.\n'''{{int:config-profile-private}}''' дазваляе праглядаць і рэдагаваць старонкі толькі зацьверджаным удзельнікам.\n\nБольш складаныя правы ўдзельнікаў даступныя пасьля ўсталяваньня, глядзіце [//www.mediawiki.org/wiki/Manual:User_rights адпаведную старонку дакумэнтацыі].",
+    "config-license": "Аўтарскія правы і ліцэнзія:",
+    "config-license-none": "Без інфармацыі пра ліцэнзію",
+    "config-license-cc-by-sa": "Creative Commons Attribution Share Alike",
+    "config-license-cc-by": "Creative Commons Attribution",
+    "config-license-cc-by-nc-sa": "Creative Commons Attribution Non-Commercial Share Alike",
+    "config-license-cc-0": "Creative Commons Zero (грамадзкі набытак)",
+    "config-license-gfdl": "GNU Free Documentation License 1.3 ці болей позьняя",
+    "config-license-pd": "Грамадзкі набытак",
+    "config-license-cc-choose": "Выберыце іншую ліцэнзію Creative Commons",
+    "config-license-help": "Шматлікія адкрытыя вікі публікуюць увесь унёсак у праект на ўмовах [http://freedomdefined.org/Definition вольнай ліцэнзіі].\nГэта дазваляе ствараць эфэкт супольнай уласнасьці і садзейнічае доўгатэрміноваму ўнёску.\nДля прыватных і карпаратыўных вікі гэта не зьяўляецца неабходнасьцю.\n\nКалі Вы жадаеце выкарыстоўваць тэкст зь Вікіпэдыі, і жадаеце, каб Вікіпэдыя магла прымаць тэксты, скапіяваныя з Вашай вікі, Вам неабходна выбраць ліцэнзію '''Creative Commons Attribution Share Alike'''.\n\nРаней Вікіпэдыя выкарыстоўвала ліцэнзію GNU Free Documentation.\nЯна ўсё яшчэ дзейнічае, але яна ўтрымлівае некаторыя моманты,\nякія ўскладняюць паўторнае выкарыстоўваньне і інтэрпрэтацыю матэрыялаў.",
+    "config-email-settings": "Налады электроннай пошты",
+    "config-enable-email": "Дазволіць выходзячыя электронныя лісты",
+    "config-enable-email-help": "Калі Вы жадаеце, каб працавала электронная пошта, неабходна сканфігураваць PHP [http://www.php.net/manual/en/mail.configuration.php адпаведным чынам].\nКалі Вы не жадаеце выкарыстоўваць магчымасьці электроннай пошты, Вы можаце яе адключыць.",
+    "config-email-user": "Дазволіць электронную пошту для сувязі паміж удзельнікамі",
+    "config-email-user-help": "Дазволіць усім удзельнікам дасылаць адзін аднаму электронныя лісты, калі ўключаная адпаведная магчымасьць ў іх наладах.",
+    "config-email-usertalk": "Уключыць абвяшчэньні пра паведамленьні на старонцы абмеркаваньня",
+    "config-email-usertalk-help": "Дазваляе ўдзельнікам атрымліваць абвяшчэньні пра зьмены на старонцы абмеркаваньня, калі гэтая магчымасьць уключаная ў іх наладах.",
+    "config-email-watchlist": "Уключыць абвяшчэньні пра зьмены ў сьпісе назіраньня",
+    "config-email-watchlist-help": "Дазваляе ўдзельнікам атрымліваць абвяшчэньні пра зьмены ў іх сьпісе назіраньня, калі гэтая магчымасьць уключаная ў іх наладах.",
+    "config-email-auth": "Уключыць аўтэнтыфікацыю праз электронную пошту",
+    "config-email-auth-help": "Калі гэтая магчымасьць уключаная, удзельнікі павінны пацьвердзіць іх адрас электроннай пошты праз спасылку, якая дасылаецца ім праз электронную пошту. Яна дасылаецца і падчас зьмены адрасу электроннай пошты.\nТолькі аўтэнтыфікаваныя адрасы электроннай пошты могуць атрымліваць электронныя лісты ад іншых удзельнікаў, ці зьмяняць абвяшчэньні дасылаемыя праз электронную пошту.\nУключэньне гэтай магчымасьці '''рэкамэндуецца'''  для адкрытых вікі, з-за магчымых злоўжываньняў магчымасьцямі электроннай пошты.",
+    "config-email-sender": "Адрас электроннай пошты для вяртаньня:",
+    "config-email-sender-help": "Увядзіце адрас электроннай пошты для вяртаньня ў якасьці адрасу дасылаемых электронных лістоў.\nСюды будуць дасылацца неатрыманыя электронныя лісты.\nШматлікія паштовыя сэрвэры патрабуюць, каб хаця б назва дамэну была слушнай.",
+    "config-upload-settings": "Загрузкі выяваў і файлаў",
+    "config-upload-enable": "Дазволіць загрузку файлаў",
+    "config-upload-help": "Дазвол загрузкі файлаў можа патэнцыйна пагражаць бясьпекі сэрвэра.\nДадатковую інфармацыю можна атрымаць ў [//www.mediawiki.org/wiki/Manual:Security разьдзеле бясьпекі].\n\nКаб дазволіць загрузку файлаў, зьмяніце рэжым падкаталёга <code>images</code> у карэннай дырэкторыі MediaWiki так, каб ўэб-сэрвэр меў доступ на запіс.\nПотым дазвольце гэтую магчымасьць.",
+    "config-upload-deleted": "Дырэкторыя для выдаленых файлаў:",
+    "config-upload-deleted-help": "Выберыце дырэкторыю, у якой будуць захоўвацца выдаленыя файлы.\nУ ідэальным выпадку, яна не павінна мець доступу з Інтэрнэту.",
+    "config-logo": "URL-адрас лягатыпу:",
+    "config-logo-help": "Афармленьне MediaWiki па змоўчваньні уключае прастору для лягатыпу памерам 135×160 піксэляў у верхнім левым куце.\nЗагрузіце выяву адпаведнага памеру і увядзіце тут URL-адрас.\n\nКалі Вы не жадаеце мець ніякага лягатыпу, пакіньце поле пустым.",
+    "config-instantcommons": "Дазволіць Instant Commons",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] — магчымасьць, якая дазваляе вікі выкарыстоўваць выявы, гукі і іншыя мэдыя, якія знаходзяцца на сайце [//commons.wikimedia.org/ Wikimedia Commons].\nКаб гэта зрабіць, MediaWiki патрабуе доступу да Інтэрнэту.\n\nКаб даведацца болей пра гэтую магчымасьць, уключаючы інструкцыю пра тое, як яе ўстанавіць ў любой вікі, акрамя Wikimedia Commons, глядзіце [//mediawiki.org/wiki/Manual:$wgForeignFileRepos дакумэнтацыю].",
+    "config-cc-error": "Выбар ліцэнзіі Creative Commons ня даў вынікаў.\nУвядзіце назву ліцэнзіі ўручную.",
+    "config-cc-again": "Выберыце яшчэ раз…",
+    "config-cc-not-chosen": "Выберыце, якую ліцэнзію Creative Commons Вы жадаеце выкарыстоўваць і націсьніце «працягваць».",
+    "config-advanced-settings": "Дадатковыя налады",
+    "config-cache-options": "Налады кэшаваньня аб’ектаў:",
+    "config-cache-help": "Кэшаваньне аб’ектаў павялічвае хуткасьць працы MediaWiki праз кэшаваньне зьвестак, якія часта выкарыстоўваюцца.\nВельмі рэкамэндуем уключыць гэта для сярэдніх і буйных сайтаў, таксама будзе карысна для дробных сайтаў.",
+    "config-cache-none": "Без кэшаваньня (ніякія магчымасьці не страчваюцца, але хуткасьць працы буйных сайтаў можа зьнізіцца)",
+    "config-cache-accel": "Кэшаваньне аб’ектаў PHP (APC, XCache ці WinCache)",
+    "config-cache-memcached": "Выкарыстоўваць Memcached (патрабуе дадатковай канфігурацыі)",
+    "config-memcached-servers": "Сэрвэры memcached:",
+    "config-memcached-help": "Сьпіс IP-адрасоў, якія будуць выкарыстоўвацца Memcached.\nАдрасы павінны быць у асобным радку з пазначэньнем порту, які будзе выкарыстоўвацца. Напрыклад:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "Вы выбралі Memcached у якасьці тыпу Вашага кэша, але не пазначылі ніякага сэрвэра",
+    "config-memcache-badip": "Вы ўвялі няслушны IP-адрас для Memcached: $1",
+    "config-memcache-noport": "Вы не пазначылі порт для выкарыстаньня сэрвэрам Memcached: $1.\nКалі Вы ня ведаеце порт, то па змоўчваньні выкарыстоўваецца 11211",
+    "config-memcache-badport": "Нумар порту Memcached павінен быць паміж $1 і $2",
+    "config-extensions": "Пашырэньні",
+    "config-extensions-help": "Пашырэньні пададзеныя вышэй, былі знойдзеныя ў Вашай дырэкторыі <code>./extensions</code>.\n\nЯны могуць патрабаваць дадатковых наладаў, але іх можна ўключыць зараз",
+    "config-install-alreadydone": "'''Папярэджаньне:''' здаецца, што Вы ўжо ўсталёўвалі MediaWiki і спрабуеце зрабіць гэтай зноў.\nКалі ласка, перайдзіце на наступную старонку.",
+    "config-install-begin": "Пасьля націску кнопкі «{{int:config-continue}}» пачнецца ўсталяваньне MediaWiki.\nКалі Вы жадаеце што-небудзь зьмяніць, націсьніце кнопку «Вярнуцца».",
+    "config-install-step-done": "зроблена",
+    "config-install-step-failed": "не атрымалася",
+    "config-install-extensions": "Уключаючы пашырэньні",
+    "config-install-database": "Налада базы зьвестак",
+    "config-install-schema": "Стварэньне схемы",
+    "config-install-pg-schema-not-exist": "Схема PostgreSQL не існуе",
+    "config-install-pg-schema-failed": "Немагчыма стварыць табліцу.\nУпэўніцеся, што карыстальнік «$1» можа пісаць у схему «$2».",
+    "config-install-pg-commit": "Захаваньне зьменаў",
+    "config-install-pg-plpgsql": "Праверка падтрымкі мовы PL/pgSQL",
+    "config-pg-no-plpgsql": "Вам неабходна ўсталяваць падтрымку мовы PL/pgSQL у базе зьвестак $1",
+    "config-pg-no-create-privs": "Рахунак, які Вы пазначылі для ўсталяваньня ня мае дастаткова правоў для стварэньня рахунку.",
+    "config-pg-not-in-role": "Пазначаны Вамі рахунак для ўэб-карыстальніка ўжо існуе.\nПазначаны Вамі рахунак для ўсталяваньня ня мае правоў і не зьяўляецца сябрам ролі ўэб-карыстальніка, таму немагчыма стварыць аб’екты, якія належаць ўэб-карыстальніку.\n\nЦяпер MediaWiki патрабуе, каб табліцы належалі да ўэб-карыстальніку. Калі ласка, пазначце іншы рахунак, ці націсьніце кнопку «Вярнуцца» і пазначце карыстальніка з неабходнымі для ўсталяваньня правамі.",
+    "config-install-user": "Стварэньне карыстальніка базы зьвестак",
+    "config-install-user-alreadyexists": "Удзельнік «$1» ужо існуе",
+    "config-install-user-create-failed": "Немагчыма стварыць ўдзельніка «$1»: $2",
+    "config-install-user-grant-failed": "Немагчыма даць правы удзельніку «$1»: $2",
+    "config-install-user-missing": "Пазначаны карыстальнік «$1» не існуе.",
+    "config-install-user-missing-create": "Пазначаны карыстальнік «$1» не існуе.\nКалі ласка, пазначце «стварыць рахунак», калі Вы жадаеце яго стварыць.",
+    "config-install-tables": "Стварэньне табліцаў",
+    "config-install-tables-exist": "'''Папярэджаньне''': Выглядае, што табліцы MediaWiki ужо існуюць.\nСтварэньне прапушчанае.",
+    "config-install-tables-failed": "'''Памылка''': немагчыма стварыць табліцы з-за наступнай памылкі: $1",
+    "config-install-interwiki": "Запаўненьне табліцы інтэрвікі па змоўчваньні",
+    "config-install-interwiki-list": "Немагчыма знайсьці файл <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "'''Папярэджаньне''': выглядае, што табліца інтэрвікі ўжо запоўненая.\nСьпіс па змоўчваньні прапушчаны.",
+    "config-install-stats": "Ініцыялізацыі статыстыкі",
+    "config-install-keys": "Стварэньне сакрэтных ключоў",
+    "config-insecure-keys": "'''Папярэджаньне:''' {{PLURAL:$2|Ключ бясьпекі $1 створаны|Ключы бясьпекі $1 створаныя}} падчас усталяваньня, не зьяўляюцца поўнасьцю бясьпечнымі. Рэкамэндуецца зьмяніць {{PLURAL:$2|яго ўручную|іх уручную}}.",
+    "config-install-sysop": "Стварэньне рахунку адміністратара",
+    "config-install-subscribe-fail": "Немагчыма падпісацца на «mediawiki-announce»: $1",
+    "config-install-subscribe-notpossible": "cURL не ўсталяваны, allow_url_fopen недаступны.",
+    "config-install-mainpage": "Стварэньне галоўнай старонкі са зьместам па змоўчваньні",
+    "config-install-extension-tables": "Стварэньне табліцаў для ўключаных пашырэньняў",
+    "config-install-mainpage-failed": "Немагчыма ўставіць галоўную старонку: $1",
+    "config-install-done": "'''Віншуем!'''\nВы пасьпяхова ўсталявалі MediaWiki.\n\nПраграма ўсталяваньня стварыла файл <code>LocalSettings.php</code>.\nЁн утрымлівае ўсе Вашыя налады.\n\nВам неабходна загрузіць яго і захаваць у карэнную дырэкторыю Вашай вікі (у тую ж самую дырэкторыю, дзе знаходзіцца index.php). Загрузка павінна пачацца аўтаматычна.\n\nКалі загрузка не пачалася, ці Вы яе адмянілі, Вы можаце перазапусьціць яе націснуўшы на спасылку ніжэй:\n\n$3\n\n'''Заўвага''': калі Вы гэтага ня зробіце зараз, то створаны файл ня будзе даступны Вам потым, калі Вы выйдзеце з праграмы ўсталяваньня  без яго загрузкі.\n\nКалі Вы гэта зробіце, Вы можаце '''[$2 ўвайсьці ў Вашую вікі]'''.",
+    "config-download-localsettings": "Загрузіць <code>LocalSettings.php</code>",
+    "config-help": "дапамога",
+    "config-nofile": "Файл «$1» ня знойдзены. Ці быў ён выдалены?",
+    "mainpagetext": "'''MediaWiki пасьпяхова ўсталяваная.'''",
+    "mainpagedocfooter": "Глядзіце [//meta.wikimedia.org/wiki/Help:Contents дапаможнік карыстальніка] для атрыманьня інфармацыі па карыстаньні вікі-праграмамі.\n\n== З чаго пачаць ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Сьпіс парамэтраў канфігурацыі]\n* [//www.mediawiki.org/wiki/Manual:FAQ Частыя пытаньні MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка паведамленьняў пра зьяўленьне новых вэрсіяў MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/be.json b/includes/installer/i18n/be.json
new file mode 100644 (file)
index 0000000..99222c6
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki паспяхова ўсталяваная.'''",
+    "mainpagedocfooter": "Гл. [//meta.wikimedia.org/wiki/Help:Contents Дапаможнік карыстальніка (англ.)] па далейшыя звесткі аб карыстанні вікі-праграмамі.\n\n== З чаго пачаць ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Пералік параметраў канфігурацыі (англ.)]\n* [//www.mediawiki.org/wiki/Manual:FAQ ЧАПЫ MediaWiki (англ.)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Ліставанне аб выпусках MediaWiki (англ.)]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/bg.json b/includes/installer/i18n/bg.json
new file mode 100644 (file)
index 0000000..601a2f4
--- /dev/null
@@ -0,0 +1,291 @@
+{
+    "@metadata": {
+        "authors": [
+            "DCLXVI",
+            "아라"
+        ]
+    },
+    "config-desc": "Инсталатор на МедияУики",
+    "config-title": "Инсталиране на МедияУики $1",
+    "config-information": "Информация",
+    "config-localsettings-upgrade": "Беше открит файл <code>LocalSettings.php</code>.\nЗа надграждане на съществуващата инсталация, необходимо е в кутията по-долу да се въведе стойността на <code>$wgUpgradeKey</code>.\nТази информация е налична в <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Беше открит файл <code>LocalSettings.php</code>.\nЗа надграждане на наличната инсталация, необходимо е да се стартира <code>update.php</code>",
+    "config-localsettings-key": "Ключ за надграждане:",
+    "config-localsettings-badkey": "Предоставеният ключ е неправилен.",
+    "config-upgrade-key-missing": "Беше открита съществуваща инсталация на МедияУики.\nЗа надграждане на съществуващата инсталация, необходимо е да се постави следният ред в края на файла <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "Съществуващият файл <code>LocalSettings.php</code> изглежда непълен.\nПроменливата $1 не е зададена.\nНеобходимо е да се редактира файлът <code>LocalSettings.php</code> и да се зададе променливата, след което да се натисне „{{int:Config-continue}}“.",
+    "config-localsettings-connection-error": "Възникна грешка при свързване с базата от данни чрез данните, посочени в <code>LocalSettings.php</code> или <code>AdminSettings.php</code>. Необходимо е да се коригират тези настройки преди повторен опит за свързване.\n\n$1",
+    "config-session-error": "Грешка при създаване на сесия: $1",
+    "config-session-expired": "Срокът на валидност на данните от сесията са изтекли.\nПродължителността на сесиите е настроена на $1.\nТова може да бъде увеличено чрез настройване на <code>session.gc_maxlifetime</code> в php.ini.\nНеобходимо е рестартиране на инсталационния процес.",
+    "config-no-session": "Данните за сесията бяха загубени!\nПроверете вашия php.ini и се уверете, че на <code>session.save_path</code> е настроена подходящата директория.",
+    "config-your-language": "Вашият език:",
+    "config-your-language-help": "Избиране на език за използване по време на инсталацията.",
+    "config-wiki-language": "Език на уикито:",
+    "config-wiki-language-help": "Избиране на език, на който ще е основното съдържание на уикито.",
+    "config-back": "← Връщане",
+    "config-continue": "Продължаване →",
+    "config-page-language": "Език",
+    "config-page-welcome": "Добре дошли в МедияУики!",
+    "config-page-dbconnect": "Свързване с базата от данни",
+    "config-page-upgrade": "Надграждане на съществуваща инсталация",
+    "config-page-dbsettings": "Настройки на базата от данни",
+    "config-page-name": "Име",
+    "config-page-options": "Настройки",
+    "config-page-install": "Инсталиране",
+    "config-page-complete": "Готово!",
+    "config-page-restart": "Рестартиране на инсталацията",
+    "config-page-readme": "Информация за софтуера",
+    "config-page-releasenotes": "Бележки за версията",
+    "config-page-copying": "Лицензно споразумение",
+    "config-page-upgradedoc": "Надграждане",
+    "config-page-existingwiki": "Съществуващо уики",
+    "config-help-restart": "Необходимо е потвърждение за изтриване на всички въведени и съхранени данни и започване отначало на процеса по инсталация.",
+    "config-restart": "Да, започване отначало",
+    "config-welcome": "=== Проверка на средата ===\nИзвършени бяха основни проверки, за да се провери дали средата е подходяща за инсталиране на МедияУики.\nАко е необходима помощ по време на инсталацията, резултатите от направените проверки трябва също да бъдат предоставени.",
+    "config-copyright": "=== Авторски права и Условия ===\n\n$1\n\nТази програма е свободен софтуер, който може да се променя и/или разпространява според Общия публичен лиценз на GNU, както е публикуван от Free Software Foundation във версия на Лиценза 2 или по-късна версия.\n\nТази програма се разпространява с надеждата, че ще е полезна, но '''без каквито и да е гаранции'''; без дори косвена гаранция за '''продаваемост''' или '''прогодност за конкретна употреба'''.\nЗа повече подробности се препоръчва преглеждането на Общия публичен лиценз на GNU.\n\nКъм програмата трябва да е приложено <doclink href=Copying>копие на Общия публичен лиценз на GNU</doclink>; ако не, можете да пишете на Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. или да [http://www.gnu.org/copyleft/gpl.html го прочетете онлайн].",
+    "config-sidebar": "* [//www.mediawiki.org Сайт на МедияУики]\n* [//www.mediawiki.org/wiki/Help:Contents Наръчник на потребителя]\n* [//www.mediawiki.org/wiki/Manual:Contents Наръчник на администратора]\n* [//www.mediawiki.org/wiki/Manual:FAQ ЧЗВ]\n----\n* <doclink href=Readme>Документация</doclink>\n* <doclink href=ReleaseNotes>Бележки за версията</doclink>\n* <doclink href=Copying>Авторски права</doclink>\n* <doclink href=UpgradeDoc>Обновяване</doclink>",
+    "config-env-good": "Средата беше проверена.\nИнсталирането на МедияУики е възможно.",
+    "config-env-bad": "Средата беше проверена.\nНе е възможна инсталация на МедияУики.",
+    "config-env-php": "Инсталирана е версия на PHP $1.",
+    "config-env-php-toolow": "Инсталирана е версия на PHP $1.\nМедияУики изисква версия PHP $2 или по-нова.",
+    "config-unicode-using-utf8": "Използване на utf8_normalize.so от Brion Vibber за нормализация на Уникод.",
+    "config-unicode-using-intl": "Използване на разширението [http://pecl.php.net/intl intl PECL] за нормализация на Уникод.",
+    "config-unicode-pure-php-warning": "'''Предупреждение''': [http://pecl.php.net/intl Разширението intl PECL] не е налично за справяне с нормализацията на Уникод, превключване към по-бавното изпълнение на чист PHP.\nАко сайтът е с голям трафик, препоръчително е запознаването с [//www.mediawiki.org/wiki/Unicode_normalization_considerations нормализацията на Уникод].",
+    "config-unicode-update-warning": "'''Предупреждение''': Инсталираната версия на Обвивката за нормализация на Unicode използва по-старата версия на библиотеката на [http://site.icu-project.org/ проекта ICU].\nНеобходимо е да [//www.mediawiki.org/wiki/Unicode_normalization_considerations инсталирате по-нова верия], в случай че сте загрижени за използването на Unicode.",
+    "config-no-db": "Не може да бъде открит подходящ драйвер за база от данни! Необходимо е да се инсталира драйвер за база от данни за PHP.\nПоддържат се следните типове базни от данни: $1.\n\nАко използвате споделен хостинг, помолете доставчика на услугата да инсталира подходящ драйвер за база от данни.\nАко сами сте компилирали PHP, преконфигурирайте го с включен клиент за база от данни, например чрез използване на <code>./configure --with-mysql</code>.\nАко сте инсталирали PHP от пакет за Debian или Убунту, необходимо е, също така, да инсталирате и модула php5-mysql.",
+    "config-no-fts3": "'''Предупреждение''': SQLite е компилирана без [//sqlite.org/fts3.html модула FTS3], затова възможностите за търсене няма да са достъпни.",
+    "config-register-globals": "'''Предупреждение: Настройката на PHP <code>[http://php.net/register_globals register_globals]</code> е включена.'''\n'''При възможност е препоръчително тя да бъде изключена.'''\nМедияУики ще работи, но сървърът е изложен на евентуални пропуски в сигурността.",
+    "config-magic-quotes-runtime": "'''Фатално: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] е активирана!'''\nТова може да повреди непредвидимо въвеждането на данните.\nИнсталацията на МедияУики е невъзможна докато тази настройка не бъде изключена.",
+    "config-magic-quotes-sybase": "'''Фатално: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] е активирана!'''\nТова може да повреди непредвидимо въвеждането на данните.\nИнсталацията на МедияУики е невъзможна докато тази настройка не бъде изключена.",
+    "config-mbstring": "'''Фатално: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] е активирана!'''\nТова може да повреди непредвидимо въвеждането на данните.\nИнсталацията на МедияУики е невъзможна докато тази настройка не бъде изключена.",
+    "config-ze1": "'''Фатално: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] е активирана!'''\nТази настройка причинява ужасни грешки в МедияУики.\nНевъзможно е инсталирането и използването на МедияУики докато тази настройка не бъде изключена.",
+    "config-safe-mode": "'''Предупреждение:''' PHP работи в [http://www.php.net/features.safe-mode безопасен режим].\nТова може да създаде проблеми, особено ако качването на файлове е разрешено, както и при поддръжката на <code>math</code>.",
+    "config-xml-bad": "Липсва XML модулът на PHP.\nМедияУики се нуждае от някои функции от този модул и няма да работи при наличната конфигурация.\nПри Mandrake, необходимо е да се инсталира пакетът php-xml.",
+    "config-pcre": "Липсва модулът PCRE.\nЗа да работи, МедияУики изисква съвместими с Perl функии за регилярни изрази.",
+    "config-pcre-no-utf8": "'''Фатално''': Модулът PCRE на PHP изглежда е компилиран без поддръжка на PCRE_UTF8.\nЗа да функционира правилно, МедияУики изисква поддръжка на UTF-8.",
+    "config-memory-raised": "<code>memory_limit</code> на PHP е $1, увеличаване до $2.",
+    "config-memory-bad": "'''Предупреждение:''' <code>memory_limit</code> на PHP е $1.\nСтойността вероятно е твърде ниска.\nВъзможно е инсталацията да се провали!",
+    "config-ctype": "'''Фатално''': Необходимо е PHP да бъде компилиран с поддръжка на [http://www.php.net/manual/en/ctype.installation.php разширението Ctype].",
+    "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].\nОбектното кеширане не е включено.",
+    "config-diff3-bad": "GNU diff3 не беше намерен.",
+    "config-imagemagick": "Открит е ImageMagick: <code>$1</code>.\nПреоразмеряването на картинки ще бъде включено ако качването на файлове бъде разрешено.",
+    "config-gd": "Открита е вградена графичната библиотека GD.\nАко качването на файлове бъде включено, ще бъде включена възможността за преоразмеряване на картинки.",
+    "config-no-scaling": "Не са открити библиотеките GD или ImageMagick.\nПреоразмеряването на картинки ще бъде изключено.",
+    "config-no-uri": "'''Грешка:''' Не може да се определи текущия адрес.\nИнсталация беше прекратена.",
+    "config-using-server": "Използване на сървърното име \"<nowiki>$1</nowiki>\".",
+    "config-using-uri": "Използване на сървърния адрес (URL) \"<nowiki>$1$2</nowiki>\".",
+    "config-uploads-not-safe": "'''Предупреждение:''' Папката по подразбиране за качване <code>$1</code> е уязвима от изпълнение на зловредни скриптове.\nВъпреки че МедияУики извършва проверка за заплахи в сигурността на всички качени файлове, силно препоръчително е да се [//www.mediawiki.org/wiki/Manual:Security#Upload_security затвори тази уязвимост в сигурността] преди разрешаване за качване на файлове.",
+    "config-brokenlibxml": "Вашата система използа комбинация от версии на PHP и libxml2, които са с много грешки и могат да причинят скрити повреди на данните в МедияУики или други уеб приложения.\nНеобходимо е обновяване до PHP 5.2.9 или по-нова версия и libxml2 2.7.3 или по-нова версия ([//bugs.php.net/bug.php?id=45996 докладвана грешка при PHP]).\nИнсталацията беше прекратена.",
+    "config-using531": "МедияУики не може да се използва с PHP $1 заради проблем с референтните параметри за <code>__call()</code>.\nЗа разрешаване на този проблем е необходимо да се обнови до PHP 5.3.2 или по-нова версия или да се инсталира по-стара версия, напр. PHP 5.3.0.\nИнсталацията беше прекратена.",
+    "config-suhosin-max-value-length": "Suhosin е инсталиран и ограничава дължината на параметъра GET на $1 байта. Компонентът на МедияУики ResourceLoader ще може да пренебрегне частично това ограничение, но това ще намали производителността. По възможност е препоръчително да се настрои <code>suhosin.get.max_value_length</code> на 1024 или по-голяма стойност в <code>php.ini</code> и в LocalSettings.php да се настрои <code>$wgResourceLoaderMaxQueryLength</code> със същата стойност.",
+    "config-db-type": "Тип на базата от данни:",
+    "config-db-host": "Хост на базата от данни:",
+    "config-db-host-help": "Ако базата от данни е на друг сървър, в кутията се въвежда името на хоста или IP адреса.\n\nАко се използва споделен уеб хостинг, доставчикът на услугата би трябвало да е предоставил в документацията си коректния хост.\n\nАко инсталацията протича на Windows-сървър и се използва MySQL, използването на \"localhost\" може да е неприемливо. В такива случаи се използва \"127.0.0.1\" за локален IP адрес.\n\nПри използване на PostgreSQL, това поле се оставя празно, за свързване чрез Unix socket.",
+    "config-db-host-oracle": "TNS на базата данни:",
+    "config-db-wiki-settings": "Идентифициране на това уики",
+    "config-db-name": "Име на базата от данни:",
+    "config-db-name-help": "Избира се име, което да идентифицира уикито.\nТо не трябва да съдържа интервали.\n\nАко се използва споделен хостинг, доставчикът на услугата би трябвало да е предоставил или име на базата от данни, която да бъде използвана, или да позволява създаването на бази от данни чрез контролния панел.",
+    "config-db-name-oracle": "Схема на базата от данни:",
+    "config-db-install-account": "Потребителска сметка за инсталацията",
+    "config-db-username": "Потребителско име за базата от данни:",
+    "config-db-password": "Парола за базата от данни:",
+    "config-db-password-empty": "Въведете парола за новия потребител на базата от данни: $1.\nВъпреки че е допустимо да се създават потребители без пароли, това е незащитено действие.",
+    "config-db-install-username": "Въвежда се потребителско име, което ще се използва за свързване с базата от данни по време на процеса по инсталация.\nТова не е потребителско име за сметка в МедияУики; това е потребителско име за базата от данни.",
+    "config-db-install-password": "Въвежда се парола, която ще бъде използвана за свързване с базата от данни по време на инсталационния процес.\nТова не е парола за сметка в МедияУики; това е парола за базата от данни.",
+    "config-db-install-help": "Въвеждат се потребителско име и парола, които ще бъдат използвани за свързване с базата от данни по време на инсталационния процес.",
+    "config-db-account-lock": "Използване на същото потребителско име и парола по време на нормална работа",
+    "config-db-wiki-account": "Потребителска сметка за нормална работа",
+    "config-db-wiki-help": "Въвежда се потребителско име и парола, които ще се използват при нормалното функциониране на уикито.\nАко сметката не съществува и използваната при инсталацията сметка има необходимите права, тази потребителска сметка ще бъде създадена с минималните необходими права за работа с уикито.",
+    "config-db-prefix": "Представка за таблиците в базата от данни:",
+    "config-db-prefix-help": "Ако е необходимо да се сподели базата от данни между няколко уикита или между МедияУики и друго уеб приложение, може да се добави представка пред имената на таблиците, за да се избегнат конфликти.\nНе се използват интервали.\n\nТова поле обикновено се оставя празно.",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 бинарно",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 с обратна съвестимост с UTF-8",
+    "config-mysql-old": "Изисква се MySQL $1 или по-нова версия, наличната версия е $2.",
+    "config-db-port": "Порт на базата от данни:",
+    "config-db-schema": "Схема за МедияУики",
+    "config-db-schema-help": "Схемата по-горе обикновено е коректна.\nПромени се извършват ако наистина е необходимо.",
+    "config-pg-test-error": "Невъзможно свързване с базата данни '''$1''': $2",
+    "config-sqlite-dir": "Директория за данни на SQLite:",
+    "config-sqlite-dir-help": "SQLite съхранява всички данни в един файл.\n\nПо време на инсталацията уеб сървърът трябва да има права за писане в посочената директория.\n\nТя '''не трябва''' да е достъпна през уеб, затова не е там, където са PHP файловете.\n\nИнсталаторът ще съхрани заедно с нея файл <code>.htaccess</code>, но ако този метод пропадне, някой може да придобие даостъп до суровите данни от базата от данни.\nТова включва сурови данни за потребителите (адреси за е-поща, хеширани пароли), както и изтрити версии на страници и друга чувствителна и с ограничен достъп информация от и за уикито.\n\nБазата от данни е препоръчително да се разположи на друго място, например в <code>/var/lib/mediawiki/yourwiki</code>.",
+    "config-support-info": "МедияУики поддържа следните системи за бази от данни:\n\n$1\n\nАко не виждате желаната за използване система в списъка по-долу, следвайте инструкциите за активиране на поддръжка по-горе.",
+    "config-support-mysql": "* $1 е най-добре поддържаната система за база от данни, с най-добра поддръжка от МедияУики ([http://www.php.net/manual/en/mysql.installation.php Как се компилира PHP с поддръжка на MySQL])",
+    "config-support-postgres": "* $1 е популярна система за бази от данни с отворен изходен код, която е алтернатива на MySQL ([http://www.php.net/manual/en/pgsql.installation.php как се компилира PHP с поддръжка на PostgreSQL]). Възможно е все още да има грешки, затова не се препоръчва да се използва в общодостъпна среда.",
+    "config-support-sqlite": "* $1 е лека система за база от данни, която е много добре поддържана. ([http://www.php.net/manual/en/pdo.installation.php Как се компилира PHP с поддръжка на SQLite], използва PDO)",
+    "config-support-oracle": "* $1 е комерсиална корпоративна база от данни. ([http://www.php.net/manual/en/oci8.installation.php Как се компилира PHP с поддръжка на OCI8])",
+    "config-header-mysql": "Настройки за MySQL",
+    "config-header-postgres": "Настройки за PostgreSQL",
+    "config-header-sqlite": "Настройки за SQLite",
+    "config-header-oracle": "Настройки за Oracle",
+    "config-invalid-db-type": "Невалиден тип база от данни",
+    "config-missing-db-name": "Необходимо е да се въведе стойност за \"Име на базата от данни\"",
+    "config-missing-db-host": "Необходимо е да се въведе стойност за \"Хост на базата от данни\"",
+    "config-missing-db-server-oracle": "Необходимо е да се въведе стойност за \"Database TNS\"",
+    "config-invalid-db-server-oracle": "Невалиден TNS на базата от данни \"$1\".\nДопустими са само ASCII букви (a-z, A-Z), цифри (0-9), символите за долна черта (_) и точка (.).",
+    "config-invalid-db-name": "Невалидно име на базата от данни \"$1\".\nИзползват се само ASCII букви (a-z, A-Z), цифри (0-9), долни черти (_) и тирета (-).",
+    "config-invalid-db-prefix": "Невалидна представка за базата от данни \"$1\".\nПозволени са само ASCII букви (a-z, A-Z), цифри (0-9), долни черти (_) и тирета (-).",
+    "config-connection-error": "$1.\n\nНеобходимо е да се проверят хостът, потребителското име и паролата, след което да се опита отново.",
+    "config-invalid-schema": "Невалидна схема за МедияУики \"$1\".\nДопустими са само ASCII букви (a-z, A-Z), цифри (0-9) и долни черти (_).",
+    "config-db-sys-create-oracle": "Инсталаторът поддържа само сметка SYSDBA за създаване на нова сметка.",
+    "config-db-sys-user-exists-oracle": "Потребителската сметка \"$1\" вече съществува. SYSDBA може да се използва само за създаване на нова сметка!",
+    "config-postgres-old": "Изисква се PostgreSQL $1 или по-нова версия, наличната версия е $2.",
+    "config-sqlite-name-help": "Избира се име, което да идентифицира уикито.\nНе се използват интервали или тирета.\nТова име ще се използва за име на файла за данни на SQLite.",
+    "config-sqlite-parent-unwritable-group": "Дикректорията за данни <code><nowiki>$1</nowiki></code> не може да бъде създадена, тъй като уеб сървърът няма права за писане в родителската директория <code><nowiki>$2</nowiki></code>.\n\nИнсталаторът разпознава потребителското име, с което работи уеб сървърът.\nУверете се, че той притежава права за писане в директорията <code><nowiki>$3</nowiki></code> преди да продължите.\nВ Unix/Линукс системи можете да използвате:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Дикректорията за данни <code><nowiki>$1</nowiki></code> не може да бъде създадена, тъй като уеб сървърът няма права за писане в родителската директория <code><nowiki>$2</nowiki></code>.\n\nИнсталаторът не може да определи потребителското име, с което работи уеб сървърът.\nУверете се, че в директория <code><nowiki>$3</nowiki></code> може да бъде писано от уебсървъра (или от други потребители!) преди да продължите.\nНа Unix/Линукс системи можете да използвате:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Грешка при създаване на директорията за данни \"$1\".\nПроверете местоположението ѝ и опитайте отново.",
+    "config-sqlite-dir-unwritable": "Уебсървърът няма права за писане в директория \"$1\".\nПроменете правата му така, че да може да пише в нея, и опитайте отново.",
+    "config-sqlite-connection-error": "$1.\n\nПроверете директорията за данни и името на базата от данни по-долу и опитайте отново.",
+    "config-sqlite-readonly": "Файлът <code>$1</code> няма права за писане.",
+    "config-sqlite-cant-create-db": "Файлът за базата от данни <code>$1</code> не може да бъде създаден.",
+    "config-sqlite-fts3-downgrade": "Липсва поддръжката на FTS3 за PHP, извършен беше downgradе на таблиците",
+    "config-can-upgrade": "В базата от данни има таблици за МедияУики.\nЗа надграждането им за MediaWiki $1, натиска се '''Продължаване'''.",
+    "config-upgrade-done": "Обновяването приключи.\n\nВече е възможно [$1 да използвате уикито].\n\nАко е необходимо, възможно е файлът <code>LocalSettings.php</code> да бъде създаден отново чрез натискане на бутона по-долу.\nТова '''не е препоръчително действие''', освен ако не срещате затруднения с уикито.",
+    "config-upgrade-done-no-regenerate": "Обновяването приключи.\n\nВече е възможно [$1 да използвате уикито].",
+    "config-regenerate": "Създаване на LocalSettings.php →",
+    "config-show-table-status": "Заявката <code>SHOW TABLE STATUS</code> не сполучи!",
+    "config-unknown-collation": "'''Предупреждение:''' Базата от данни използва неразпозната колация.",
+    "config-db-web-account": "Сметка за уеб достъп до базата от данни",
+    "config-db-web-help": "Избиране на потребителско име и парола, които уеб сървърът ще използва да се свързва с базата от данни при обичайната работа на уикито.",
+    "config-db-web-account-same": "Използване на същата сметка като при инсталацията.",
+    "config-db-web-create": "Създаване на сметката ако все още не съществува",
+    "config-db-web-no-create-privs": "Посочената сметка за инсталацията не разполага с достатъчно права за създаване на нова сметка.\nНеобходимо е посочената сметка вече да съществува.",
+    "config-mysql-engine": "Хранилище на данни:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Предупреждение''': Избрана е MyISAM като система за складиране в MySQL, която не се препоръчва за използване с МедияУики, защото:\n* почти не поддържа паралелност заради заключване на таблиците\n* е по-податлива на повреди в сравнение с други системи\n* кодът на МедияУики не винаги поддържа MyISAM коректно\n\nАко инсталацията на MySQL поддържа InnoDB, силно е препоръчително да се използва тя.\nАко инсталацията на MySQL не поддържа InnoDB, вероятно е време за обновяване.",
+    "config-mysql-engine-help": "'''InnoDB''' почти винаги е най-добрата възможност заради навременната си поддръжка.\n\n'''MyISAM''' може да е по-бърза при инсталации с един потребител или само за четене.\nБазите от данни MyISAM се повреждат по-често от InnoDB.",
+    "config-mysql-charset": "Набор от символи в базата от данни:",
+    "config-mysql-binary": "Бинарен",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "В '''бинарен режим''' МедияУики съхранява текстовете в UTF-8 в бинарни полета в базата от данни.\nТова е по-ефективно от UTF-8 режима на MySQL и позволява използването на пълния набор от символи в Уникод.\n\nВ '''UTF-8 режим''' MySQL ще знае в кой набор от символи са данните от уикито и ще може да ги показва и променя по подходящ начин, но няма да позволява складиране на символи извън [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Основния многоезичен набор].",
+    "config-site-name": "Име на уикито:",
+    "config-site-name-help": "Това име ще се показва в заглавната лента на браузъра и на различни други места.",
+    "config-site-name-blank": "Необходимо е да се въведе име на уикито.",
+    "config-project-namespace": "Именно пространство на проекта:",
+    "config-ns-generic": "Проект",
+    "config-ns-site-name": "Същото като името на уикито: $1",
+    "config-ns-other": "Друго (уточняване)",
+    "config-ns-other-default": "МоетоУики",
+    "config-project-namespace-help": "Следвайки примера на Уикипедия, много уикита съхраняват страниците си с правила в \"'''именно пространство на проекта'''\", отделно от основното съдържание.\nВсички заглавия на страниците в това именно пространство започват с определена представка, която може да бъде зададена тук.\nОбикновено представката произлиза от името на уикито, но не може да съдържа символи като \"#\" или \":\".",
+    "config-ns-invalid": "Посоченото именно пространство \"<nowiki>$1</nowiki>\" е невалидно.\nНеобходимо е да бъде посочено друго.",
+    "config-ns-conflict": "Посоченото именно пространство \"<nowiki>$1</nowiki>\" е в конфликт с използваното по подразбиране именно пространство MediaWiki.\nНеобходимо е да се посочи друго именно пространство.",
+    "config-admin-box": "Администраторска сметка",
+    "config-admin-name": "Потребителско име:",
+    "config-admin-password": "Парола:",
+    "config-admin-password-confirm": "Парола (повторно):",
+    "config-admin-help": "Въвежда се предпочитаното потребителско име, например \"Иванчо Иванчев\".\nТова ще е потребителското име, което администраторът ще използва за влизане в уикито.",
+    "config-admin-name-blank": "Необходимо е да бъде въведено потребителско име на администратора.",
+    "config-admin-name-invalid": "Посоченото потребителско име \"<nowiki>$1</nowiki>\" е невалидно.\nНеобходимо е да се посочи друго.",
+    "config-admin-password-blank": "Неовходимо е да се въведе парола за администраторската сметка.",
+    "config-admin-password-same": "Паролата не трябва да е същата като потребителското име.",
+    "config-admin-password-mismatch": "Двете въведени пароли не съвпадат.",
+    "config-admin-email": "Адрес за електронна поща:",
+    "config-admin-email-help": "Въвеждането на адрес за е-поща позволява получаване на е-писма от другите потребители на уикито, възстановяване на изгубена или забравена парола, оповестяване при промени в страниците от списъка за наблюдение. Това поле може да бъде оставено празно.",
+    "config-admin-error-user": "Възникна вътрешна грешка при създаване на администратор с името \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Възникна вътрешна грешка при задаване на парола за администратора \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+    "config-admin-error-bademail": "Въведен е невалиден адрес за електронна поща",
+    "config-subscribe": "Абониране за [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce пощенския списък за нови версии].",
+    "config-subscribe-help": "Това е пощенски списък с малко трафик, който се използва за съобщения при излизане на нови версии, както и за важни проблеми със сигурността.\nАбонирането е препоръчително, както и надграждането на инсталацията на МедияУики при излизането на нова версия.",
+    "config-subscribe-noemail": "Опитахте да се абонирате за пощенския списък за нови версии без да посочите адрес за електронна поща.\nНеобходимо е да се предостави адрес за електронна поща, в случай че желаете да се абонирате за пощенския списък.",
+    "config-almost-done": "Инсталацията е почти готова!\nВъзможно е пропускане на оставащата конфигурация и моментално инсталиране на уикито.",
+    "config-optional-continue": "Задаване на допълнителни въпроси.",
+    "config-optional-skip": "Достатъчно, инсталиране на уикито.",
+    "config-profile": "Профил на потребителските права:",
+    "config-profile-wiki": "Отворено уики",
+    "config-profile-no-anon": "Необходимо е създаване на сметка",
+    "config-profile-fishbowl": "Само одобрени редактори",
+    "config-profile-private": "Затворено уики",
+    "config-profile-help": "Уикитата функционират най-добре, когато позволяват на възможно най-много хора да ги редактират.\nВ МедияУики лесно се преглеждат последните промени и се възстановяват пораженип от недобронамерени потребители.\n\nВъпреки това мнозина смятат МедияУики за полезен софтуер по различни начини и често е трудно да се убедят всички от предимствата на уики модела.\nЗатова се предоставя възможност за избор.\n\nУикитата от типа '''{{int:config-profile-wiki}}''' позволяват на всички потребители да редактират, дори и без регистрация.\nУикитата от типа '''{{int:config-profile-no-anon}}''' позволяват достъп до страниците и редактирането им само след създаване на потребителска сметка.\n\nУики, което е '''{{int:config-profile-fishbowl}}''' позволява на всички да преглеждат страниците, но само предварително одобрени редактори могат да редактират съдържанието.\nВ '''{{int:config-profile-private}}''' само предварително одобрени потребители могат да четат и редактират съдържанието.\n\nДетайлно обяснение на конфигурациите на потребителските права е достъпно след инсталацията в [//www.mediawiki.org/wiki/Manual:User_rights Наръчника за потребителски права].",
+    "config-license": "Авторски права и лиценз:",
+    "config-license-none": "Без лиценз",
+    "config-license-cc-by-sa": "Криейтив Комънс Признание-Споделяне на споделеното",
+    "config-license-cc-by": "Криейтив Комънс Признание",
+    "config-license-cc-by-nc-sa": "Криейтив Комънс Признание-Некомерсиално-Споделяне на споделеното",
+    "config-license-cc-0": "Криейтив Комънс Нула (обществено достояние)",
+    "config-license-gfdl": "Лиценз за свободна документация на GNU 1.3 или по-нов",
+    "config-license-pd": "Обществено достояние",
+    "config-license-cc-choose": "Избиране на друг лиценз от Криейтив Комънс",
+    "config-license-help": "Много публични уикита поставят всички приноси под [http://freedomdefined.org/Definition/Bg свободен лиценз].\nТова помага създаване на усещане за общност и насърчава дългосрочните приноси.\nТова не е необходимо за частни или корпоративни уикита.\n\nАко е необходимо да се използват текстове от Уикипедия, както и Уикипедия да може да използва текстове от уикито, необходимо е да се избере лиценз '''Криейтив Комънс Признание-Споделяне на споделеното'''.\n\nЛицензът за свободна документация на GNU е старият лиценз на съдържанието на Уикипедия.\nТой все още е валиден лиценз, но някои негови условия са трудни за разбиране и правят по-сложни повторното използване и интерпретацията.",
+    "config-email-settings": "Настройки за е-поща",
+    "config-enable-email": "Разрешаване на изходящи е-писма",
+    "config-enable-email-help": "За да работят възможностите за използване на е-поща, необходимо е [http://www.php.net/manual/en/mail.configuration.php настройките за поща на PHP] да бъдат конфигурирани правилно.\nАко няма да се използват услугите за е-поща в уикито, те могат да бъдат изключени тук.",
+    "config-email-user": "Позволяване на потребителите да си изпращат е-писма през уикито",
+    "config-email-user-help": "Позволяване на потребителите да си изпращат е-писма ако са разрешили това в настройките си.",
+    "config-email-usertalk": "Оповестяване при промяна на потребителската беседа",
+    "config-email-usertalk-help": "Позволява на потребителите да получават оповестяване при промяна на беседата им, ако това е разрешено в настройките им.",
+    "config-email-watchlist": "Оповестяване за списъка за наблюдение",
+    "config-email-watchlist-help": "Позволява на потребителите да получават оповестяване за техните наблюдавани страници, ако това е разрешено в настройките им.",
+    "config-email-auth": "Потвърждаване на адреса за електронна поща",
+    "config-email-auth-help": "Ако тази настройка е включена, потребителите трябва да потвърдят адреса си за е-поща чрез препратка, която им се изпраща при настройване или промяна.\nСамо валидните адреси могат да получават е-писма от други потребители или да променят писмата за оповестяване.\nНастройването на това е '''препоръчително''' за публични уикита заради потенциални злоупотреби с възможностите за електронна поща.",
+    "config-email-sender": "Адрес за обратна връзка:",
+    "config-email-sender-help": "Въвежда се адрес за електронна поща, който ще се използва за обратен адрес при изходящи е-писма.\nТова е адресът, на който ще се получават върнатите и неполучени писма.\nМного е-пощенски сървъри изискват поне домейн името да е валидно.",
+    "config-upload-settings": "Картинки и качване на файлове",
+    "config-upload-enable": "Позволяне качването на файлове",
+    "config-upload-help": "Качването на файлове е възможно да доведе до пробели със сигурността на сървъра.\nПовече информация по темата има в [//www.mediawiki.org/wiki/Manual:Security раздела за сигурност] в Наръчника.\n\nЗа позволяване качването на файлове, необходимо е уебсървърът да може да записва в поддиректорията на МедияУики <code>images</code>.\nСлед като това условие е изпълнено, функционалността може да бъде активирана.",
+    "config-upload-deleted": "Директория за изтритите файлове:",
+    "config-upload-deleted-help": "Избиране на директория, в която ще се складират изтритите файлове.\nВ най-добрия случай тя не трябва да е достъпна през уеб.",
+    "config-logo": "Адрес на логото:",
+    "config-logo-help": "Обликът по подразбиране на МедияУики вклчва място с размери 135х160 пиксела за лого над страничното меню.\nАко има наличен файл с подходящ размер, неговият адрес може да бъде посочен тук.\n\nАко не е необходимо лого, полето може да се остави празно.",
+    "config-instantcommons": "Включване на Instant Commons",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] е функционалност, която позволява на уикитата да използват картинки, звуци и друга медиа от сайта на Уикимедия [//commons.wikimedia.org/ Общомедия].\nЗа да е възможно това, МедияУики изисква достъп до Интернет.\n\nПовече информация за тази функционалност, както и инструкции за настройване за други уикита, различни от Общомедия, е налична в [//mediawiki.org/wiki/Manual:$wgForeignFileRepos наръчника].",
+    "config-cc-error": "Избирането на лиценз на Криейтив Комънс не даде резултат.\nНеобходимо е името на лиценза да бъде въведено ръчно.",
+    "config-cc-again": "Повторно избиране...",
+    "config-cc-not-chosen": "Изберете кой лиценз на Криейтив Комънс желаете и щракнете \"proceed\".",
+    "config-advanced-settings": "Разширена конфигурация",
+    "config-cache-options": "Настройки за обектното кеширане:",
+    "config-cache-help": "Обектното кеширане се използва за подобряване на скоростта на МедияУики чрез кеширане на често използваните данни.\nСилно препоръчително е на средните и големите сайтове да включат тази настройка, но малките също могат да се възползват от нея.",
+    "config-cache-none": "Без кеширане (не се премахва от функционалността, но това влияе на скоростта на по-големи уикита)",
+    "config-cache-accel": "PHP обектно кеширане (APC, XCache или WinCache)",
+    "config-cache-memcached": "Използване на Memcached (изисква допълнителни настройки и конфигуриране)",
+    "config-memcached-servers": "Memcached сървъри:",
+    "config-memcached-help": "Списък с IP адреси за използване за Memcached.\nНеобходимо е да бъдат разделени по един на ред, както и да е посочен порта. Пример:\n127.0.0.1:11211\n192.168.1.25:1234",
+    "config-memcache-needservers": "Избран е Memcached като складиращ тип, но не са посочени сървъри.",
+    "config-memcache-badip": "Беше въведен невалиден IP адрес за Memcached: $1.",
+    "config-memcache-noport": "Не е посочен порт за използване за Memcached сървъра: $1.\nВ случай, че не знаете порта, този по подразбиране е 11211.",
+    "config-memcache-badport": "Портовете за Memcached трябва да бъдат между $1 и $2.",
+    "config-extensions": "Разширения",
+    "config-extensions-help": "Разширенията от списъка по-горе бяха открити в директорията <code>./extensions</code>.\n\nВъзможно е те да изискват допълнително конфигуриране, но сега могат да бъдат включени.",
+    "config-install-alreadydone": "'''Предупреждение:''' Изглежда вече сте инсталирали МедияУики и се опитвате да го инсталирате отново.\nПродължете към следващата страница.",
+    "config-install-begin": "Инсталацията на МедияУики ще започне след натискане на бутона „{{int:config-continue}}“.\nВ случай, че е необходимо да се направят промени, използва се бутона „{{int:config-back}}“.",
+    "config-install-step-done": "готово",
+    "config-install-step-failed": "неуспешно",
+    "config-install-extensions": "Добавяне на разширенията",
+    "config-install-database": "Създаване на базата от данни",
+    "config-install-schema": "Създаване на схема",
+    "config-install-pg-schema-not-exist": "PostgreSQL схемата не съществува",
+    "config-install-pg-schema-failed": "Създаването на таблиците пропадна.\nНеобходимо е потребител \"$1\" да има права за писане в схемата \"$2\".",
+    "config-install-pg-plpgsql": "Проверяване за езика PL/pgSQL",
+    "config-pg-no-plpgsql": "Необходимо е да се инсталира езикът PL/pgSQL в базата от данни $1",
+    "config-pg-no-create-privs": "Посочената сметка за инсталацията не притежава достатъчно права за създаване на сметка.",
+    "config-pg-not-in-role": "Посочената сметка за уеб потребител вече съществува.\nПосочената сметка за инсталация не с права на суперпотребител и не е член на ролите на уеб потребителя и не може да създава обекти, собственост на уеб потребителя.\n\nТекущо МедияУики изисква таблиците да са собственост на уеб потребителя. Необходимо е да се посочи друго потребителско име за уеб или да се натисне \"връщане\" и да се избере друг потребител за инсталацията с подходящите права.",
+    "config-install-user": "Създаване на потребител за базата от данни",
+    "config-install-user-alreadyexists": "Потребител „$1“ вече съществува",
+    "config-install-user-create-failed": "Създаването на потребител „$1“ беше неуспешно: $2",
+    "config-install-user-grant-failed": "Предоставянето на права на потребител \"$1\" беше неуспешно: $2",
+    "config-install-user-missing": "Посоченият потребител \" $1 \"не съществува.",
+    "config-install-user-missing-create": "Посоченият потребител \"$1\" не съществува.\nАко желаете да го създадете, поставете отметка на \"създаване на сметка\".",
+    "config-install-tables": "Създаване на таблиците",
+    "config-install-tables-exist": "'''Предупреждение''': Таблиците за МедияУики изглежда вече съществуват.\nПропускане на създаването им.",
+    "config-install-tables-failed": "'''Грешка''': Създаването на таблиците пропадна и върна следната грешка: $1",
+    "config-install-interwiki": "Попълване на таблицата с междууикитата по подразбиране",
+    "config-install-interwiki-list": "Файлът <code>interwiki.list</code> не можа да бъде открит.",
+    "config-install-interwiki-exists": "'''Предупреждение''': Таблицата с междууикита изглежда вече съдържа данни.\nПропускане на списъка по подразбиране.",
+    "config-install-stats": "Инициализиране на статистиките",
+    "config-install-keys": "Генериране на тайни ключове",
+    "config-insecure-keys": "'''Предупреждение:''' {{PLURAL:$2|Сигурният ключ, създаден по време на инсталацията, не е напълно надежден|Сигурните ключове, създадени по време на инсталацията, не са напълно надеждни}} $1 . Обмислете да {{PLURAL:$2|го|ги}} смените ръчно.",
+    "config-install-sysop": "Създаване на администраторска сметка",
+    "config-install-subscribe-fail": "Невъзможно беше абонирането за mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "не е инсталиран cURL и allow_url_fopen не е налична.",
+    "config-install-mainpage": "Създаване на Началната страница със съдържание по подразбиране",
+    "config-install-extension-tables": "Създаване на таблици за включените разширения",
+    "config-install-mainpage-failed": "Вмъкването на Началната страница беше невъзможно: $1",
+    "config-install-done": "'''Поздравления!'''\nИнсталирането на МедияУики приключи успешно.\n\nИнсталаторът създаде файл <code>LocalSettings.php</code>.\nТой съдържа всичката необходима основна конфигурация на уикито.\n\nНеобходимо е той да бъде изтеглен и поставен в основната директория на уикито (директорията, в която е и index.php). Изтеглянето би трябвало да започне автоматично.\n\nАко изтеглянето не започне автоматично или е било прекратено, файлът може да бъде изтеглен чрез щракване на препратката по-долу:\n\n$3\n\n'''Забележка''': Ако това не бъде извършено сега, генерираният конфигурационен файл няма да е достъпен на по-късен етап ако не бъде изтеглен сега или инсталацията приключи без изтеглянето му.\n\nКогато файлът вече е в основната директория, '''[$2 уикито ще е достъпно на този адрес]'''.",
+    "config-download-localsettings": "Изтегляне на <code>LocalSettings.php</code>",
+    "config-help": "помощ",
+    "config-nofile": "Файлът „$1“ не може да бъде открит. Да не е бил изтрит?",
+    "mainpagetext": "'''Уикито беше успешно инсталирано.'''",
+    "mainpagedocfooter": "Разгледайте [//meta.wikimedia.org/wiki/Help:Contents ръководството] за подробна информация относно използването на уики софтуера.\n\n== Първи стъпки ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Настройки за конфигуриране]\n* [//www.mediawiki.org/wiki/Manual:FAQ ЧЗВ за МедияУики]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Пощенски списък относно нови версии на МедияУики]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Локализиране на МедияУики]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/bjn.json b/includes/installer/i18n/bjn.json
new file mode 100644 (file)
index 0000000..49e56c1
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Ezagren",
+            "J Subhi"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki sudah tapasang awan sukses'''.",
+    "mainpagedocfooter": "Carii panjalasan [//meta.wikimedia.org/wiki/Help:Contents Panduan Pamuruk] gasan mamuruk parangkat lunak wiki\n\n== Gasan bamula ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Daptar konpigurasi setélan]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki nang rancak ditakunakan]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki rilis milis]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/bn.json b/includes/installer/i18n/bn.json
new file mode 100644 (file)
index 0000000..ef2da60
--- /dev/null
@@ -0,0 +1,108 @@
+{
+    "@metadata": {
+        "authors": [
+            "Bellayet",
+            "Wikitanvir"
+        ]
+    },
+    "config-desc": "মিডিয়াউইকির জন্য ইন্সটলার",
+    "config-title": "মিডিয়াউইকি $1 ইন্সটলেশন",
+    "config-information": "তথ্য",
+    "config-localsettings-key": "হালনাগাদ কি",
+    "config-session-error": "সেশন শুরুতে ত্রুটি: $1",
+    "config-your-language": "আপনার ভাষা:",
+    "config-your-language-help": "ইন্সটল করা সময় ব্যবহারের জন্য ভাষা নির্বাচন করুন।",
+    "config-wiki-language": "উইকি ভাষা:",
+    "config-back": "← পেছনে",
+    "config-continue": "অব্যাহত →",
+    "config-page-language": "ভাষা",
+    "config-page-welcome": "মিডিয়াউইকিতে স্বাগতম!",
+    "config-page-dbconnect": "ডেটাবেজে সংযোগ দিন",
+    "config-page-upgrade": "ইতিমধ্যেই থাকা ইন্সটলেশন হালনাগাদ করুন",
+    "config-page-dbsettings": "ডেটাবেজ সেটিংস",
+    "config-page-name": "নাম",
+    "config-page-options": "অপশন",
+    "config-page-install": "ইন্সটল",
+    "config-page-complete": "সম্পূর্ণ!",
+    "config-page-restart": "পুনরায় ইন্সটল প্রক্রিয়া চালু করুন",
+    "config-page-readme": "এটি পড়ুন",
+    "config-page-releasenotes": "রিলিজ নোট",
+    "config-page-copying": "অনুলেপন",
+    "config-page-upgradedoc": "হালনাগাদকরণ",
+    "config-page-existingwiki": "ইতিমধ্যেই থাকা উইকি",
+    "config-restart": "হ্যাঁ, পুনরায় চালু করুন",
+    "config-env-php": "পিএইচপি $1 ইন্সটল করা হয়েছে।",
+    "config-db-type": "ডেটাবেজের ধরন:",
+    "config-db-host": "ডেটাবেজের হোস্ট:",
+    "config-db-install-account": "ইন্সটলের জন্য ব্যবহারকারী অ্যাকাউন্ট",
+    "config-db-username": "ডেটাবেজের ব্যবহারকারী নাম:",
+    "config-db-password": "ডেটাবেজের শব্দচাবি:",
+    "config-db-charset": "ডেটাবেজের অক্ষর সেট",
+    "config-db-port": "ডেটাবেজ পোর্ট:",
+    "config-db-schema": "মিডিয়াউইকির স্কিমা",
+    "config-sqlite-dir": "এসকিউলাইট ডেটা ডিরেক্টরি:",
+    "config-oracle-def-ts": "পূর্বনির্ধারিত টেবিলস্পেস",
+    "config-oracle-temp-ts": "সাময়কি টেবিলস্পেস:",
+    "config-header-mysql": "মাইএসকিউএল সেটিংস",
+    "config-header-postgres": "পোস্টগ্রেএসকিউএল সেটিংস",
+    "config-header-sqlite": "এসকিউলাইট সেটিংস",
+    "config-header-oracle": "ওরাকল সেটিংস",
+    "config-invalid-db-type": "ডেটাবেজের ধরন অগ্রহযোগ্য",
+    "config-missing-db-name": "আপনাকে অবশ্যই \"ডেটাবেজ নাম\"-এর জন্য একটি মান প্রবেশ করাতে হবে",
+    "config-missing-db-host": "আপনাকে অবশ্যই \"ডেটাবেজ হোস্ট\"-এর জন্য একটি মান প্রবেশ করাতে হবে",
+    "config-missing-db-server-oracle": "আপনাকে অবশ্যই \"ডেটাবেজ টিএনএস\"-এর জন্য একটি মান প্রবেশ করাতে হবে",
+    "config-mysql-engine": "সংরক্ষণ ইঞ্জিন:",
+    "config-mysql-innodb": "ইনোডিবি",
+    "config-mysql-myisam": "মাইআইএসএএম",
+    "config-mysql-charset": "ডেটাবেজের অক্ষর সেট",
+    "config-mysql-binary": "বাইনারি",
+    "config-mysql-utf8": "ইউটিএফ-৮",
+    "config-site-name": "উইকির নাম:",
+    "config-site-name-blank": "একটি সাইটের নাম প্রবেশ করান।",
+    "config-project-namespace": "প্রকল্প নামস্থান:",
+    "config-ns-generic": "প্রকল্প",
+    "config-ns-site-name": "উইকি নামের অনুরুপ: $1",
+    "config-ns-other": "অন্যান্য (নির্দিষ্ট করুন)",
+    "config-ns-other-default": "মাইউইকি",
+    "config-admin-box": "প্রশাসক অ্যাকাউন্ট",
+    "config-admin-name": "আপনার নাম:",
+    "config-admin-password": "শব্দচাবি:",
+    "config-admin-password-confirm": "শব্দচাবি আবারও প্রবেশ করান:",
+    "config-admin-name-blank": "একটি প্রশাসক ব্যবহারকারী নাম প্রবেশ করান",
+    "config-admin-password-blank": "প্রশাসক অ্যাকাউন্টের জন্য পাসওয়ার্ড প্রবেশ করান।",
+    "config-admin-password-same": "পাসওয়ার্ড অবশ্যই ব্যবহারকারী নামের অনুরুপ হওয়া চলবে না।",
+    "config-admin-password-mismatch": "আপনি যে দুটি শব্দচাবি দিয়েছেন তারা পরস্পর মেলেনি।",
+    "config-admin-email": "ইমেইল ঠিকানা:",
+    "config-optional-continue": "আরও প্রশ্ন জিজ্ঞেস করুন।",
+    "config-optional-skip": "আমি ইতিমধ্যেই বিরক্ত হয়ে গেছি, উইকিটি ইন্সটল করো।",
+    "config-profile": "ব্যবহারকারী অধিকার প্রোফাইল:",
+    "config-profile-wiki": "গতানুগতিক উইকি",
+    "config-profile-no-anon": "অ্যাকাউন্ট তৈরি করা বাধ্যতামূলক",
+    "config-profile-fishbowl": "শুধুমাত্র নির্ধারিত সম্পাদকদের  জন্যই",
+    "config-profile-private": "ব্যক্তিগত উইকি",
+    "config-license": "কপিরাইট ও লাইসেন্স:",
+    "config-license-none": "কোনো লাইসেন্স ফুটার নেই",
+    "config-license-cc-by-sa": "ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন শেয়ার অ্যালাইক",
+    "config-license-cc-by-nc-sa": "ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন নন-কমার্শিয়াল শেয়ার অ্যালাইক",
+    "config-license-cc-0": "ক্রিয়েটিভ কমন্স জিরো",
+    "config-license-pd": "পাবলিক ডোমেইন",
+    "config-license-cc-choose": "একটি স্বনির্ধারিত ক্রিয়েটিভ কমন্স লাইসেন্ট নির্বাচন করুন",
+    "config-email-settings": "ই-মেইল সেটিংস",
+    "config-email-user": "ব্যবহারকারী-থেকে-ব্যবহারকারী ই-মেইল সুবিধা সক্রিয় করো",
+    "config-upload-settings": "চিত্র এবং ফাইল আপলোড",
+    "config-upload-enable": "ফাইল আপলোড সক্রিয় করো",
+    "config-upload-deleted": "অপসারণকৃত ফাইলের ডিরেক্টরি:",
+    "config-logo": "লোগো ইউআরএল:",
+    "config-memcached-servers": "মেমক্যাশেকৃত সার্ভারসমূহ:",
+    "config-extensions": "এক্সটেনশন",
+    "config-install-step-done": "সম্পন্ন",
+    "config-install-step-failed": "ব্যর্থ",
+    "config-install-extensions": "এক্সটেনশন সহকারে",
+    "config-install-database": "ডেটাবেজ সেটআপ",
+    "config-install-pg-schema-not-exist": "পোস্টগ্রেএসকিউএল স্কিমা খুঁজে পাওয়া যায়নি।",
+    "config-install-tables": "টেবিল তৈরি",
+    "config-install-keys": "গোপন কি তৈরি",
+    "config-help": "সাহায্য",
+    "mainpagetext": "'''মিডিয়াউইকি সফলভাবে ইন্সটল করা হয়েছে।'''",
+    "mainpagedocfooter": "কী ভাবে উইকি সফটওয়্যারটি ব্যবহারকার করবেন, তা জানতে [//meta.wikimedia.org/wiki/Help:Contents ব্যবহারকারী সহায়িকা] দেখুন।\n\n== কোথা থেকে শুরু করবেন ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings কনফিগারেশন সেটিংস তালিকা]\n* [//www.mediawiki.org/wiki/Manual:FAQ প্রশ্নোত্তরে মিডিয়াউইকি]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce মিডিয়াউইকি রিলিজের মেইলিং লিস্ট]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/bpy.json b/includes/installer/i18n/bpy.json
new file mode 100644 (file)
index 0000000..af0b4c0
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''মিডিয়াউইকি হবাবালা ইয়া ইন্সটল ইল.'''",
+    "mainpagedocfooter": "উইকি সফটৱ্যার এহান আতানির বারে দরকার ইলে [//meta.wikimedia.org/wiki/Help:Contents আতাকুরার গাইড]হানর পাঙলাক নেগা।\n\n== অকরানিহান ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings কনফিগারেশন সেটিংর তালিকাহান]\n* [//www.mediawiki.org/wiki/Manual:FAQ মিডিয়া উইকি আঙলাক]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce মিডিয়া উইকির ফঙপার বারে মেইলর তালিকাহান]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/br.json b/includes/installer/i18n/br.json
new file mode 100644 (file)
index 0000000..eac799b
--- /dev/null
@@ -0,0 +1,267 @@
+{
+    "@metadata": {
+        "authors": [
+            "Fohanno",
+            "Fulup",
+            "Gwendal",
+            "Y-M D",
+            "아라"
+        ]
+    },
+    "config-desc": "Poellad staliañ MediaWIki",
+    "config-title": "Staliadur MediaWiki $1",
+    "config-information": "Titouroù",
+    "config-localsettings-upgrade": "Kavet ez eus bet ur restr <code>LocalSettings.php</code>.\nEvit hizivaat ar staliadur-se, merkit an talvoud <code>$wgUpgradeKey</code> er voest dindan.\nE gavout a rit e <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Dinoet ez eus bet ur restr <code>LocalSettings.php</code>.\nEvit lakaat ar staliadur-mañ a-live, implijit <code>update.php</code> e plas",
+    "config-localsettings-key": "Alc'hwez hizivaat :",
+    "config-localsettings-badkey": "Direizh eo an alc'hwez merket ganeoc'h",
+    "config-upgrade-key-missing": "Kavet ez eus bet ur staliadur kent eus MediaWiki.\nEvit hizivaat ar staliadur-se, ouzhpennit al linenn da-heul e traoñ ho restr <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "Diglok e seblant bezañ ar restr <code>LocalSettings.php</code> zo anezhi dija.\nAn argemmenn $1 n'eo ket termenet.\nKemmit <code>LocalSettings.php</code> evit ma vo termenet an argemmenn-se, ha klikit war « {{int:Config-continue}} ».",
+    "config-localsettings-connection-error": "C'hoarvezet ez eus ur fazi en ur gevreañ ouzh an diaz roadennoù oc'h implijout an arventennoù diferet e <code>LocalSettings.php</code> pe <code>AdminSettings.php</code>. Reizhit an arventennoù-se hag esaeit en-dro.\n\n$1",
+    "config-session-error": "Fazi e-ser loc'hañ an dalc'h : $1",
+    "config-session-expired": "Kloz eo an dalc'h evit doare.\nKefluniet eo an dalc'hoù evit padout $1.\nKreskiñ ar pad-mañ a c'hallit dre e arventenniñ <code>session.gc_maxlifetime</code> e php.ini.\nAdgrogit gant ar staliadur.",
+    "config-no-session": "Kolle teo bet roadennoù ho talc'h !\nGwiriit ar restr php.ini ha bezit sur emañ staliet <code>session.save_path</code> en ur c'havlec'h a zere.",
+    "config-your-language": "Ho yezh :",
+    "config-your-language-help": "Dibabit ur yezh da implijout e-pad an argerzh staliañ.",
+    "config-wiki-language": "Yezh ar wiki :",
+    "config-wiki-language-help": "Diuzañ ar yezh a vo implijet ar muiañ er wiki.",
+    "config-back": "← Distreiñ",
+    "config-continue": "Kenderc'hel →",
+    "config-page-language": "Yezh",
+    "config-page-welcome": "Degemer mat e MediaWiki !",
+    "config-page-dbconnect": "Kevreañ d'an diaz roadennoù",
+    "config-page-upgrade": "Hizivaat ar staliadur a zo dioutañ",
+    "config-page-dbsettings": "Arventennoù an diaz roadennoù",
+    "config-page-name": "Anv",
+    "config-page-options": "Dibarzhioù",
+    "config-page-install": "Staliañ",
+    "config-page-complete": "Graet !",
+    "config-page-restart": "Adlañsañ ar staliadur",
+    "config-page-readme": "Lennit-me",
+    "config-page-releasenotes": "Notennoù stumm",
+    "config-page-copying": "O eilañ",
+    "config-page-upgradedoc": "O hizivaat",
+    "config-page-existingwiki": "Wiki zo anezhañ dija",
+    "config-help-restart": "Ha c'hoant hoc'h eus da ziverkañ an holl roadennoù hoc'h eus ebarzhet ha da adlañsañ an argerzh staliañ ?",
+    "config-restart": "Ya, adloc'hañ anezhañ",
+    "config-welcome": "=== Gwiriadennoù a denn d'an endro ===\nRekis eo un nebeud gwiriadennoù diazez da welet hag azas eo an endro evit gallout staliañ MediaWiki.\nDleout a rafec'h merkañ disoc'hoù ar gwiriadennoù-se m'hoc'h eus ezhomm skoazell e-pad ar staliadenn.",
+    "config-copyright": "=== Gwiriañ aozer ha Termenoù implijout ===\n\n$1\n\nUr meziant frank eo ar programm-mañ; gallout a rit skignañ anezhañ ha/pe kemmañ anezhañ dindan termenoù ar GNU Aotre-implijout Foran Hollek evel m'emañ embannet gant Diazezadur ar Meziantoù Frank; pe diouzh stumm 2 an aotre-implijout, pe (evel mar karit) diouzh ne vern pe stumm nevesoc'h.\n\nIngalet eo ar programm gant ar spi e vo talvoudus met n'eus '''tamm gwarant ebet'''; hep zoken gwarant empleg ar '''varc'hadusted''' pe an '''azaster ouzh ur pal bennak'''. Gwelet ar GNU Aotre-Implijout Foran Hollek evit muioc'h a ditouroù.\n\nSañset oc'h bezañ resevet <doclink href=Copying>un eilskrid eus ar GNU Aotre-implijout Foran Hollek</doclink> a-gevret gant ar programm-mañ; ma n'hoc'h eus ket, skrivit da Diazezadur ar Meziantoù Frank/Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, SUA pe [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html lennit anezhañ enlinenn].",
+    "config-sidebar": "* [//www.mediawiki.org MediaWiki degemer]\n* [//www.mediawiki.org/wiki/Help:Contents Sturlevr an implijerien]\n* [//www.mediawiki.org/wiki/Manual:Contents Sturlevr ar verourien]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAG]\n----\n* <doclink href=Readme>Lennit-me</doclink>\n* <doclink href=ReleaseNotes>Notennoù embann</doclink>\n* <doclink href=Copying>Oc'h eilañ</doclink>\n* <doclink href=UpgradeDoc>O hizivaat</doclink>",
+    "config-env-good": "Gwiriet eo bet an endro.\nGallout a rit staliañ MediaWiki.",
+    "config-env-bad": "Gwiriet eo bet an endro.\nNe c'hallit ket staliañ MediaWiki.",
+    "config-env-php": "Staliet eo PHP $1.",
+    "config-env-php-toolow": "Staliet eo PHP $1.\nNemet eo rekis PHP $2 pe nevesoc'h evit MediaWiki.",
+    "config-unicode-using-utf8": "Oc'h implijout utf8_normalize.so gant Brion Vibber evit ar reolata Unicode.",
+    "config-unicode-using-intl": "Oc'h implijout [http://pecl.php.net/intl an astenn PECL intl] evit ar reolata Unicode.",
+    "config-unicode-pure-php-warning": "'''Diwallit''' : N'haller ket kaout an [http://pecl.php.net/intl intl PECL astenn] evit merañ reoladur Unicode, a zistro d'ar stumm gorrek emplementet e-PHP.\nMa lakait da dreiñ ul lec'hienn darempredet-stank e vo mat deoc'h lenn un tammig bihan diwar-benn se war [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode normalization]. (e saozneg)",
+    "config-unicode-update-warning": "'''Diwallit''': ober a ra stumm staliet endalc'her skoueriekaat Unicode gant ur stumm kozh eus [http://site.icu-project.org/ levraoueg meziantoù ar raktres ICU].\nDleout a rafec'h [//www.mediawiki.org/wiki/Unicode_normalization_considerations hizivaat] ma seblant deoc'h bezañ pouezus ober gant Unicode.",
+    "config-no-db": "N'eus ket bet gallet kavout ur sturier diazoù roadennoù a zere ! Ret eo deoc'h staliañ ur sturier diazoù roadennoù evit PHP.\nSkoret eo an diazoù roadennoù da-heul : $1.\n\nMa rit gant un herberc'hiañ kenrannet, goulennit digant ho herberc'hier staliañ ur sturier diaz roadennoù azas.\nMa kempunit PHP c'hwi hoc'h-unan, adkeflugnit-eñ en ur weredekaat un arval diaz roadennoù, da skouer en ur ober gant <code>./configure --mysql</code>.\nM'hoc'h eus staliet PHP adalek ur pakad Debian pe Ubuntu, eo ret deoc'h staliañ ar vodulenn php5-mysql ivez.",
+    "config-no-fts3": "'''Diwallit ''': Kempunet eo SQLite hep ar [//sqlite.org/fts3.html vodulenn FTS3]; ne vo ket posupl ober gant an arc'hwelioù klask er staliadur-mañ",
+    "config-register-globals": "'''Diwallit : Gweredekaet eo dibarzh <code>[http://php.net/register_globals register_globals]</code> PHP.'''\n'''Diweredekait anezhañ ma c'hallit.'''\nMont a raio MediaWiki en-dro met fazioù surentez a c'hallo c'hoari war ho servijer",
+    "config-magic-quotes-runtime": "'''Fazi groñs : gweredekaet eo [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] !'''\nBreinañ a ra an dibarzh-mañ ar roadennoù en ur mod dic'hortoz.\nN'hallit ket staliañ pe ober gant MediaWiki e-keit ha m'eo gweredekaet an dibarzh-se.",
+    "config-magic-quotes-sybase": "'''Fazi groñs : gweredekaet eo [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] !'''\nBreinañ a ra an dibarzh-mañ ar roadennoù en ur mod dic'hortoz.\nN'hallit ket staliañ pe ober gant MediaWiki e-keit ha m'eo gweredekaet an dibarzh-se.",
+    "config-mbstring": "'''Fazi groñs : gweredekaet eo [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] !'''\nDegas a ra an dibarzh-mañ fazioù ha gallout a ra breinañ ar roadennoù en ur mod dic'hortoz.\nN'hallit ket staliañ pe ober gant MediaWiki e-keit ha m'eo gweredekaet an dibarzh-se.",
+    "config-ze1": "'''Fazi diremed : [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mod] zo gweredekaet !'''\nAn dibarzh-mañ zo kaoz da zrein euzhus gant MediaWiki.\nNe c'hallit ket staliañ nag implijout MediaWiki keit ha m'eo gweredekaet an dibarzh-mañ.",
+    "config-safe-mode": "'''Diwallit :''' Gweredekaet eo [http://www.php.net/features.safe-mode mod surentez] PHP.\nKudennoù a c'hall sevel abalamour da gement-se, dreist-holl ma pellgargit restroù ha ma skorit <code>math</code>.",
+    "config-xml-bad": "Mankout a ra modulenn XML PHP.\nEzhomm en deus MediaWiki eus arc'hwelioù zo eus ar vodulenn-se ha ne'z aio ket en-dro gant ar c'hefluniadur zo.\nM'emaoc'h gant Mandrake, stailhit pakad php-xml.",
+    "config-pcre": "Evit doare e vank ar vodulenn skorañ PCRE.\nEvit mont en-dro plaen en deus ezhomm MediaWiki eus an arc'hwelioù jediñ reoliek kenglotus gant Perl.",
+    "config-pcre-no-utf8": "'''Fazi groñs ''': evit doare eo bet kempunet modulenn PCRE PHP hep ar skor PCRE_UTF8.\nEzhomm en deus MediaWiki eus UTF-8 evit mont plaen en-dro.",
+    "config-memory-raised": "<code>memory_limit</code> ar PHP zo $1, kemmet e $2.",
+    "config-memory-bad": "'''Diwallit :''' Da $1 emañ arventenn <code>memory_limit</code> PHP.\nRe izel eo moarvat.\nMarteze e c'hwito ar staliadenn !",
+    "config-xcache": "Staliet eo [http://xcache.lighttpd.net/ XCache]",
+    "config-apc": "Staliet eo [http://www.php.net/apc APC]",
+    "config-wincache": "Staliet eo [http://www.iis.net/download/WinCacheForPhp WinCache]",
+    "config-no-cache": "'''Diwallit:''' N'eus ket bet gallet kavout [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] pe [http://www.iis.net/download/WinCacheForPhp WinCache].\nN'eo ket gweredekaet ar c'hrubuilhañ traezoù.",
+    "config-diff3-bad": "N'eo ket bet kavet GNU diff3.",
+    "config-imagemagick": "ImageMagick kavet : <code>$1</code>.\nGweredekaet e vo ar bihanaat skeudennoù ma vez gweredekaet ganeoc'h ar pellgargañ restroù.",
+    "config-gd": "Kavet eo bet al levraoueg c'hrafek GD enframmet.\nGweredekaet e vo ar bihanaat skeudennoù ma vez gweredekaet an enporzhiañ restroù.",
+    "config-no-scaling": "N'eus ket bet gallet kavout al levraoueg GD pe ImageMagick.\nDiweredekaet e vo ar bihanaat skeudennoù.",
+    "config-no-uri": "'''Fazi :''' N'eus ket tu da anavezout URI ar skript red.\nStaliadur nullet.",
+    "config-uploads-not-safe": "'''Diwallit :'''Bresk eo ho kavlec'h pellgargañ dre ziouer <code>$1</code> rak gallout a ra erounit ne vern pe skript.\nha pa vefe gwiriet gant MediaWiki an holl restroù pellgarget eo erbedet-groñs da [//www.mediawiki.org/wiki/Manual:Security#Upload_security serriñ ar breskter surentez-mañ] a-rao gweredekaat ar pellgargañ.",
+    "config-brokenlibxml": "Ur meskad stummoù PHP ha libxml2 dreinek a vez implijet gant ho reizhiad. Gallout a ra breinañ ar roadennoù e MediaWiki hag en arloadoù web all.\nHizivait da PHP 5.2.9 pe nevesoc'h ha libxml2 2.7.3 pe nevesoc'h ([//bugs.php.net/bug.php?id=45996 draet renablet gant PHP]).\nStaliadur paouezet.",
+    "config-using531": "N'haller ket implijout MediaWiki gant PHP $1 abalamour d'un draen a zegas trubuilh en arventennoù kaset en ur ober dave da <code>__call()</code>.\nHizivait ho reizhiad gant PHP 5.3.2 pe nevesoc'h, pe distroit da PHP 5.3.0 evit renkañ an dra-se.\nStaliadur paouezet.",
+    "config-db-type": "Doare an diaz roadennoù :",
+    "config-db-host": "Anv implijer an diaz roadennoù :",
+    "config-db-host-help": "M'emañ ho servijer roadennoù war ur servijer disheñvel, merkit amañ an anv ostiz pe ar chomlec'h IP.\n\nMa rit gant un herberc'hiañ kenrannet, e tlefe ho herberc'hier bezañ pourchaset deoc'h un anv ostiz reizh en teulioù titouriñ.\n\nM'emaoc'h o staliañ ur servijer Windows ha ma rit gant MySQL, marteze ne'z aio ket en-dro \"localhost\" evel anv servijer. Ma ne dro ket, klaskit ober gant \"127.0.0.1\" da chomlec'h IP lechel.",
+    "config-db-host-oracle": "TNS an diaz roadennoù :",
+    "config-db-wiki-settings": "Anavezout ar wiki-mañ",
+    "config-db-name": "Anv an diaz roadennoù :",
+    "config-db-name-help": "Dibabit un anv evit ho wiki.\nNa lakait ket a esaouennoù ennañ.\n\nMa ri gant un herberc'hiañ kenrannet e vo pourchaset deoc'h un anv diaz roadennoù dibar da vezañ graet gantañ gant ho herberc'hier pe e lezo ac'hanoc'h da grouiñ diazoù roadennoù dre ur banell gontrolliñ.",
+    "config-db-name-oracle": "Brastres diaz roadennoù :",
+    "config-db-install-account": "Kont implijer evit ar staliadur",
+    "config-db-username": "Anv implijer an diaz roadennoù :",
+    "config-db-password": "Ger-tremen an diaz roadennoù :",
+    "config-db-password-empty": "Lakait ur ger-tremen evit kont nevez an diaz roadennoù : $1.\nHa pa vefe posupl da grouiñ kontoù hep ger-tremen, n'eo ket erbedet evit abegoù surentez.",
+    "config-db-install-username": "Ebarzhit an anv implijer a vo implijet da gevreañ ouzh an diaz roadennoù e-pad an argerzh staliañ.\nN'eo ket anv implijer ar gont MediaWiki, an anv implijer evit ho tiaz roadennoù eo.",
+    "config-db-install-password": "Ebarzhit ar ger-tremen a vo implijet da gevreañ ouzh an diaz roadennoù e-pad an argerzh staliañ.\nN'eo ket ar ger-tremen evit ar gont MediaWiki, ar ger-tremen evit ho tiaz roadennoù eo.",
+    "config-db-install-help": "Merkañ anv an implijer hag ar ger-tremen a vo implijet evit kevreañ ouzh an diaz roadennoù e-pad an argerzh staliañ.",
+    "config-db-account-lock": "Implijout ar memes anv implijer ha ger-tremen e-kerzh oberiadurioù boutin",
+    "config-db-wiki-account": "Kont implijer evit oberiadurioù boutin",
+    "config-db-prefix": "Rakrann taolennoù an diaz roadennoù :",
+    "config-db-charset": "Strobad arouezennoù an diaz roadennoù",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binarel",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 kilkenglotus UTF-8",
+    "config-mysql-old": "Rekis eo MySQL $1 pe ur stumm nevesoc'h; ober a rit gant $2.",
+    "config-db-port": "Porzh an diaz roadennoù :",
+    "config-db-schema": "Brastres evit MediaWiki",
+    "config-db-schema-help": "Peurliesañ e vo digudenn ar chema-mañ.\nArabat cheñch anezho ma n'hoc'h eus ket ezhomm d'en ober.",
+    "config-pg-test-error": "N'haller ket kevreañ ouzh an diaz-titouroù '''$1''' : $2",
+    "config-sqlite-dir": "Kavlec'h roadennoù SQLite :",
+    "config-oracle-def-ts": "Esaouenn stokañ (\"tablespace\") dre ziouer :",
+    "config-oracle-temp-ts": "Esaouenn stokañ (''tablespace'') da c'hortoz :",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "Skoret eo ar reizhiadoù diaz titouroù da-heul gant MediaWiki :\n\n$1\n\nMa ne welit ket amañ dindan ar reizhiad diaz titouroù a fell deoc'h ober ganti, heuilhit an titouroù a-us (s.o. al liammoù) evit gweredekaat ar skorañ.",
+    "config-support-mysql": "* $1 eo an dibab kentañ evit MediaWiki hag an hini skoret ar gwellañ ([http://www.php.net/manual/en/mysql.installation.php penaos kempunañ PHP gant skor MySQL])",
+    "config-support-postgres": "* Ur reizhiad diaz titouroù brudet ha digor eo $1. Gallout a ra ober evit MySQL ([http://www.php.net/manual/en/pgsql.installation.php Penaos kempunañ PHP gant skor PostgreSQL]). Gallout a ra bezañ un nebeud drein bihan enni ha n'eo ket erbedet he implijout en un endro produiñ.",
+    "config-support-sqlite": "* $1 zo ur reizhiad diaz titouroù skañv skoret eus ar c'hentañ. ([http://www.php.net/manual/en/pdo.installation.php Penaos kempunañ PHP gant skor SQLite], implijout a ra PDO)",
+    "config-support-oracle": "* $1 zo un diaz titouroù kenwerzhel. ([http://www.php.net/manual/en/oci8.installation.php Penaos kempunañ PHP gant skor OCI8])",
+    "config-header-mysql": "Arventennoù MySQL",
+    "config-header-postgres": "Arventennoù PostgreSQL",
+    "config-header-sqlite": "Arventennoù SQLite",
+    "config-header-oracle": "Arventennoù Oracle",
+    "config-invalid-db-type": "Direizh eo ar seurt diaz roadennoù",
+    "config-missing-db-name": "Ret eo deoc'h merkañ un dalvoudenn evit \"Anv an diaz titouroù\"",
+    "config-missing-db-host": "Ret eo deoc'h merkañ un dalvoudenn evit \"Ostiz an diaz titouroù\"",
+    "config-missing-db-server-oracle": "Ret eo deoc'h merkañ un dalvoudenn evit \"Anv TNS an diaz titouroù\"",
+    "config-invalid-db-server-oracle": "Direizh eo anv TNS an diaz titouroù \"$1\".\nOber hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha pikoù (.).",
+    "config-invalid-db-name": "Direizh eo anv an diaz titouroù \"$1\".\nOber hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha tiredoù (-).",
+    "config-invalid-db-prefix": "Direizh eo rakger an diaz titouroù \"$1\".\nOber hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha tiredoù (-).",
+    "config-connection-error": "$1.\n\nGwiriit anv an ostiz, an anv implijer, ar ger-tremen ha klaskit en-dro.",
+    "config-invalid-schema": "Chema direizh evit MediaWiki \"$1\".\nGrit hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9) hag arouezennoù islinennañ (_).",
+    "config-db-sys-create-oracle": "N'anavez ar stalier nemet ar c'hontoù SYSDBA evit krouiñ kontoù nevez.",
+    "config-db-sys-user-exists-oracle": "Bez' ez eus eus ar gont \"$1\" c'hoazh. N'haller ober gant SYSDBA nemet evit krouiñ kontoù nevez !",
+    "config-postgres-old": "Rekis eo PostgreSQL $1 pe ur stumm nevesoc'h; ober a rit gant $2.",
+    "config-sqlite-name-help": "Dibabit un anv dibar d'ho wiki.\nArabat ober gant esaouennoù pe barrennigoù-stagañ.\nImplijet e vo evit ar restr roadennoù SQLite.",
+    "config-sqlite-mkdir-error": "Ur fazi zo bet e-ser krouiñ ar c'havlec'h roadennoù \"$1\".\nGwiriañ al lec'hiadur ha klask en-dro.",
+    "config-sqlite-dir-unwritable": "Dibosupl skrivañ er c'havlec'h \"$1\".\nCheñchit ar aotreoù evit ma c'hallfe ar servijer web skrivañ ennañ ha klaskit en-dro.",
+    "config-sqlite-connection-error": "$1.\n\nGwiriañ ar c'havlec'h roadennoù hag anv an diaz roadennoù a-is ha klaskit en-dro.",
+    "config-sqlite-readonly": "N'haller ket skrivañ er restr <code>$1</code>.",
+    "config-sqlite-cant-create-db": "N'haller ket krouiñ restr an diaz roadennoù <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "N'eo ket kenglotus ar PHP gant FTS3, o lakaat an taolennoù da glotañ gant ur stumm koshoc'h",
+    "config-can-upgrade": "Taolennoù MediaWiki zo en diaz titouroù.\nDa hizivaat anezho da VediaWiki $1, klikañ war '''Kenderc'hel'''.",
+    "config-upgrade-done-no-regenerate": "Hizivadenn kaset da benn.\n\nGallout a rit [$1 kregiñ da implijout ho wiki].",
+    "config-regenerate": "Adgenel LocalSettings.php →",
+    "config-show-table-status": "C'hwitet ar reked <code>SHOW TABLE STATUS</code> !",
+    "config-unknown-collation": "'''Diwallit :''' Emañ an diaz roadennoù o renkañ an traoù diouzh un urzh lizherennek dianav.",
+    "config-db-web-account": "Kont an diaz roadennoù evit ar voned Kenrouedad",
+    "config-db-web-help": "Diuzañ an anv implijer hag ar ger-tremen a vo implijet gant ar servijer web evit kevreañ ouzh ar servijer diaz roadennoù pa vez ar wiki o vont en-dro war ar pemdez.",
+    "config-db-web-account-same": "Ober gant an hevelep kont hag an hini implijet evit ar staliañ",
+    "config-db-web-create": "Krouiñ ar gont ma n'eus ket anezhi c'hoazh",
+    "config-mysql-engine": "Lusker stokañ :",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-charset": "Strobad arouezennoù an diaz roadennoù :",
+    "config-mysql-binary": "Binarel",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Anv ar wiki :",
+    "config-site-name-help": "Dont a raio war wel e barrenn ditl ar merdeer hag e meur a lec'h all c'hoazh.",
+    "config-site-name-blank": "Lakait anv ul lec'hienn .",
+    "config-project-namespace": "Esaouenn anv ar raktres :",
+    "config-ns-generic": "Raktres",
+    "config-ns-site-name": "Hevelep anv hag hini ar wiki : $1",
+    "config-ns-other": "All (spisaat)",
+    "config-ns-other-default": "MaWiki",
+    "config-ns-invalid": "Direizh eo an esaouenn anv \"<nowiki>$1</nowiki>\" spisaet.\nMerkit un esaouenn anv disheñvel evit ar raktres.",
+    "config-ns-conflict": "Tabut zo etre an esaouenn anv spisaet \"<nowiki>$1</nowiki>\" hag un esaouenn anv dre ziouer eus MediaWiki.\nSpisait un anv raktres esaouenn anv all.",
+    "config-admin-box": "Kont merour",
+    "config-admin-name": "Hoc'h anv :",
+    "config-admin-password": "Ger-tremen :",
+    "config-admin-password-confirm": "Adskrivañ ar ger-tremen :",
+    "config-admin-help": "Merkit hoc'h anv implijer amañ, da skouer \"Yann Vlog\".\nHemañ eo an anv a implijot evit kevreañ d'ar wiki-mañ.",
+    "config-admin-name-blank": "Lakait anv ur merour.",
+    "config-admin-name-invalid": "Direizh eo an anv implijer spisaet \"<nowiki>$1</nowiki>\".\nMerkit un anv implijer all.",
+    "config-admin-password-blank": "Reiñ ur ger-tremen evit kont ar merour.",
+    "config-admin-password-same": "Ne c'hall ket ar ger-tremen bezañ heñvel ouzh anv ar gont.",
+    "config-admin-password-mismatch": "Ne glot ket ar gerioù-tremen hoc'h eus merket an eil gant egile.",
+    "config-admin-email": "Chomlec'h postel :",
+    "config-admin-email-help": "Merkit ur chomlec'h postel amañ evit gallout resev posteloù a-berzh implijerien all eus ar wiki, adderaouekaat ho ker-tremen ha bezañ kelaouet eus ar c'hemmoù degaset d'ar pajennoù zo en ho roll evezhiañ. Gallout a rit lezel ar vaezienn-mañ goullo.",
+    "config-admin-error-user": "Fazi diabarzh en ur grouiñ ur merer gant an anv \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Fazi diabarzh o lakaat ur ger-tremen evit ar merour « <nowiki>$1</nowiki> » : <pre>$2</pre>",
+    "config-admin-error-bademail": "Ebarzhet hoc'h eus ur chomlec'h postel direizh.",
+    "config-subscribe": "Koumanantit da [https://lists.wikimedia.org/mailman/listinfo/mediawiki-listenn kemennadoù evit ar stummoù nevez].",
+    "config-almost-done": "Kazi echu eo !\nGellout a rit tremen ar c'hefluniadur nevez ha staliañ ar wiki war-eeun.",
+    "config-optional-continue": "Sevel muioc'h a goulennoù ouzhin.",
+    "config-optional-skip": "Aet on skuizh, staliañ ar wiki hepken.",
+    "config-profile": "Profil ar gwirioù implijer :",
+    "config-profile-wiki": "Wiki digor",
+    "config-profile-no-anon": "Krouidigezh ur gont ret",
+    "config-profile-fishbowl": "Embanner aotreet hepken",
+    "config-profile-private": "Wiki prevez",
+    "config-license": "Copyright hag aotre-implijout:",
+    "config-license-none": "Aotre ebet en traoñ pajenn",
+    "config-license-cc-by-sa": "Creative Commons Deroadenn Kenrannañ heñvel",
+    "config-license-cc-by": "Creative Commons Deroadenn",
+    "config-license-cc-by-nc-sa": "Creative Commons Deroadenn Angenwerzhel Kenrannañ heñvel",
+    "config-license-cc-0": "Creative Commons Zero (Domani foran)",
+    "config-license-pd": "Domani foran",
+    "config-license-cc-choose": "Dibabit un aotre-implijout Creative Commons personelaet",
+    "config-email-settings": "Arventennoù ar postel",
+    "config-enable-email": "Gweredekaat ar posteloù a ya kuit",
+    "config-enable-email-help": "Mar fell deoc'h ober gant ar posteler eo ret deoc'h [http://www.php.net/manual/en/mail.configuration.php kefluniañ arventennoù postel PHP] ervat.\nMar ne fell ket deoc'h ober gant ar servij posteloù e c'hall bezañ diweredekaet amañ.",
+    "config-email-user": "Gweredekaat ar posteloù a implijer da implijer",
+    "config-email-user-help": "Aotren a ra an holl implijerien da gas posteloù an eil d'egile mard eo bet gweredekaet an arc'hwel ganto en ho penndibaboù.",
+    "config-email-usertalk": "Gweredekaat kemennadur pajennoù kaozeal an implijerien",
+    "config-email-usertalk-help": "Talvezout a ra d'an implijerien da resev kemennadennoù ma vez kemmet o fajennoù kaozeal, ma vez gweredekaet en o fenndibaboù.",
+    "config-email-watchlist": "Gweredekaat ar c'hemenn listenn evezhiañ",
+    "config-email-watchlist-help": "Talvezout a ra d'an implijerien da resev kemennadennoù diwar-benn ar pajennoù evezhiet ganto, ma vez gweredekaet en o fenndibaboù.",
+    "config-email-auth": "Gweredekaat an dilesadur dre bostel",
+    "config-email-sender": "Chomlec'h postel respont :",
+    "config-email-sender-help": "Merkit ar chomlec'h postel da vezañ implijet da chomlec'h distreiñ ar posteloù a ya er-maez.\nDi e vo kaset ar posteloù distaolet.\nNiverus eo ar servijerioù postel a c'houlenn da nebeutañ un [http://fr.wikipedia.org/wiki/Nom_de_domaine anv domani] reizh.",
+    "config-upload-settings": "Pellgargañ skeudennoù ha restroù",
+    "config-upload-enable": "Gweredekaat ar pellgargañ restroù",
+    "config-upload-deleted": "Kavlec'h evit ar restroù dilamet :",
+    "config-upload-deleted-help": "Dibab ur c'havlec'h da ziellaouiñ ar restroù diverket.\nAr pep gwellañ e vije ma ne vije ket tu d'e dizhout adalek ar Genrouedad.",
+    "config-logo": "URL al logo :",
+    "config-instantcommons": "Gweredekaat ''InstantCommons''",
+    "config-cc-error": "N'eus deuet disoc'h ebet gant dibaber aotreoù-implijout Creative Commons.\nMerkit anv an aotre-implijout gant an dorn.",
+    "config-cc-again": "Dibabit adarre...",
+    "config-cc-not-chosen": "Dibabit an aotre-implijout Creative Commons a fell deoc'h ober gantañ ha klikit war \"kenderc'hel\".",
+    "config-advanced-settings": "Kefluniadur araokaet",
+    "config-cache-options": "Arventennoù evit krubuilhañ traezoù :",
+    "config-cache-accel": "Krubuilhañ traezoù PHP (APC, XCache pe WinCache)",
+    "config-cache-memcached": "Implijout Memcached (en deus ezhomm bezañ staliet ha kefluniet)",
+    "config-memcached-servers": "Servijerioù Memcached :",
+    "config-memcached-help": "Roll ar chomlec'hioù IP da implijout evit Memcached.\nRet eo spisaat unan dre linenn ha spisaat ar porzh da vezañ implijet. Da skouer :\n127.0.0.1:11211\n192.168.1.25:1234",
+    "config-memcache-needservers": "Diuzet hoc'h eus Memcached evel seurt krubuilh met n'hoc'h eus spisaet servijer ebet.",
+    "config-memcache-badip": "Ur chomlec'h IP direizh hoc'h eus lakaet evit Memcached : $1.",
+    "config-memcache-badport": "Niverennoù porzh Memcached a zlefe bezañ etre $1 ha $2.",
+    "config-extensions": "Astennoù",
+    "config-extensions-help": "N'eo ket bet detektet an astennoù rollet a-us en ho kavlec'h <code>./astennoù</code>.\n\nMarteze e vo ezhomm kefluniañ pelloc'h met gallout a rit o gweredekaat bremañ.",
+    "config-install-alreadydone": "'''Diwallit''': Staliet hoc'h eus MediaWiki dija war a seblant hag emaoc'h o klask e staliañ c'hoazh.\nKit d'ar bajenn war-lerc'h, mar plij.",
+    "config-install-begin": "Pa vo bet pouezet ganeoc'h war \"{{int:config-continue}}\"  e krogo staliadur MediaWiki.\nPouezit war \"{{int:config-back}}\" mar fell deoc'h cheñch tra pe dra.",
+    "config-install-step-done": "graet",
+    "config-install-step-failed": "c'hwitet",
+    "config-install-extensions": "En ur gontañ an astennoù",
+    "config-install-database": "Krouiñ an diaz roadennoù",
+    "config-install-schema": "O krouiñ ar chema",
+    "config-install-pg-schema-not-exist": "N'eus ket eus chema PostgreSQL.",
+    "config-install-pg-schema-failed": "C'hwitet eo krouidigezh an taolennoù.\nGwiriit hag-eñ e c'hall an implijer « $1 » skrivañ er brastres « $2 ».",
+    "config-install-pg-commit": "O wiriekaat ar c'hemmoù",
+    "config-install-pg-plpgsql": "O wiriañ ar yezh PL/pgSQL",
+    "config-pg-no-plpgsql": "Ret eo deoc'h staliañ ar yezh PL/pgSQL en diaz roadennoù $1",
+    "config-pg-no-create-privs": "N'eus ket gwirioù a-walc'h gant ar gont hoc'h eus merket evit ar staliadur evit gallout krouiñ ur gont.",
+    "config-install-user": "O krouiñ an diaz roadennoù implijer",
+    "config-install-user-alreadyexists": "An implijer \"$1\" zo anezhañ dija",
+    "config-install-user-create-failed": "Fazi e-ser krouiñ an implijer \"$1\" : $2",
+    "config-install-user-grant-failed": "N'eus ket bet gallet reiñ an aotre d'an implijer \"$1\" : $2",
+    "config-install-tables": "Krouiñ taolennoù",
+    "config-install-tables-failed": "'''Fazi :''' c'hwitet eo krouidigezh an daolenn gant ar fazi-mañ : $1",
+    "config-install-interwiki": "O leuniañ dre ziouer an daolenn etrewiki",
+    "config-install-interwiki-list": "Ne c'haller ket kavout ar restr <code>interwiki.list</code>.",
+    "config-install-stats": "O sevel ar stadegoù",
+    "config-install-keys": "Genel an alc'hwezioù kuzh",
+    "config-install-sysop": "Krouidigezh kont ar merour",
+    "config-install-subscribe-fail": "N'haller ket koumanantiñ da mediawiki-announce : $1",
+    "config-install-mainpage": "O krouiñ ar bajenn bennañ gant un endalc'had dre ziouer",
+    "config-install-extension-tables": "O krouiñ taolennoù evit an astennoù gweredekaet",
+    "config-install-mainpage-failed": "Ne c'haller ket ensoc'hañ ar bajenn bennañ: $1",
+    "config-download-localsettings": "Pellgargañ <code>LocalSettings.php</code>",
+    "config-help": "skoazell",
+    "config-nofile": "N'eus ket bet gallet kavout ar restr \"$1\". Daoust ha dilamet eo bet ?",
+    "mainpagetext": "'''Meziant MediaWiki staliet.'''",
+    "mainpagedocfooter": "Sellit ouzh [//meta.wikimedia.org/wiki/Help:Contents Sturlevr an implijerien] evit gouzout hiroc'h war an doare da implijout ar meziant wiki.\n\n== Kregiñ ganti ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Roll an arventennoù kefluniañ]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAG MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Roll ar c'haozeadennoù diwar-benn dasparzhoù MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Lec'hiañ MediaWiki en ho yezh"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/bs.json b/includes/installer/i18n/bs.json
new file mode 100644 (file)
index 0000000..f876673
--- /dev/null
@@ -0,0 +1,59 @@
+{
+    "@metadata": {
+        "authors": [
+            "CERminator"
+        ]
+    },
+    "config-desc": "Instalacija za MediaWiki",
+    "config-title": "MediaWiki $1 instalacija",
+    "config-information": "Informacija",
+    "config-localsettings-upgrade": "Otkrivena je datoteka <code>LocalSettings.php</code>.\nDa biste unaprijedili vaš softver, molimo vas upišite vrijednost od <code>$wgUpgradeKey</code> u okvir ispod.\nNaći ćete ga u <code>LocalSettings.php</code>.",
+    "config-localsettings-key": "Ključ za nadgradnju:",
+    "config-session-error": "Greška pri pokretanju sesije: $1",
+    "config-no-session": "Vaši podaci sesije su izgubljeni!\nProvjerite vaš php.ini i provjerite da li je <code>session.save_path</code> postavljen na pravilni direktorijum.",
+    "config-your-language": "Vaš jezik:",
+    "config-your-language-help": "Odaberite jezik koji ćete koristiti tokom procesa instalacije.",
+    "config-wiki-language": "Wiki jezik:",
+    "config-wiki-language-help": "Odaberite jezik na kojem će wiki biti najvećim dijelim pisana.",
+    "config-back": "← Nazad",
+    "config-continue": "Nastavi →",
+    "config-page-language": "Jezik",
+    "config-page-welcome": "Dobrodošli u MediaWiki!",
+    "config-page-dbconnect": "Poveži sa bazom podataka",
+    "config-page-upgrade": "Unaprijedi postojeću instalaciju",
+    "config-page-dbsettings": "Postavke baze podataka",
+    "config-page-name": "Naziv",
+    "config-page-options": "Opcije",
+    "config-page-install": "Instaliraj",
+    "config-page-complete": "Završeno!",
+    "config-page-restart": "Ponovi instalaciju ispočetka",
+    "config-page-readme": "Pročitaj me",
+    "config-page-releasenotes": "Bilješke izdanja",
+    "config-page-copying": "Kopiram",
+    "config-page-upgradedoc": "Nadograđujem",
+    "config-help-restart": "Da li želite očistiti sve spremljene podatke koje ste unijeli i da započnete ponovo proces instalacije?",
+    "config-restart": "Da, pokreni ponovo",
+    "config-sidebar": "* [//www.mediawiki.org MediaWiki Početna strana]\n* [//www.mediawiki.org/wiki/Help:Contents Vodič za korisnike]\n* [//www.mediawiki.org/wiki/Manual:Contents Vodič za administratore]\n* [//www.mediawiki.org/wiki/Manual:FAQ NPP]\n----\n* <doclink href=Readme>Pročitaj me</doclink>\n* <doclink href=ReleaseNotes>Napomene izdanja</doclink>\n* <doclink href=Copying>Kopiranje</doclink>\n* <doclink href=UpgradeDoc>Poboljšavanje</doclink>",
+    "config-env-good": "Okruženje je provjereno.\nMožete instalirati MediaWiki.",
+    "config-env-php": "PHP $1 je instaliran.",
+    "config-no-db": "Nije mogao biti pronađen pogodan driver za bazu podataka! Morate instalirati driver baze podataka za PHP.\nSlijedeće vrste baza podataka su podržane: $1.\n\nAko se na dijeljenom serveru, tražite od vašeg pružaoca usluga da instalira pogodan driver za bazu podataka.\nAko se sami kompajlirali PHP, podesite ga sa omogućenim klijentom baze podataka, koristeći naprimjer <code>./configure --with-mysql</code>.\nAko ste instalirali PHP iz Debian ili Ubuntu paketa, možda morate instalirati i modul php5-mysql.",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] je instaliran",
+    "config-apc": "[http://www.php.net/apc APC] je instaliran",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] je instaliran",
+    "config-diff3-bad": "GNU diff3 nije pronađen.",
+    "config-db-type": "Vrsta baze podataka:",
+    "config-db-host": "Domaćin baze podataka:",
+    "config-db-wiki-settings": "Identificiraj ovu wiki",
+    "config-db-name": "Naziv baze podataka:",
+    "config-db-name-oracle": "Šema baze podataka:",
+    "config-header-mysql": "Postavke MySQL",
+    "config-header-postgres": "Postavke PostgreSQL",
+    "config-header-sqlite": "Postavke SQLite",
+    "config-header-oracle": "Postavke Oracle",
+    "config-invalid-db-type": "Nevaljana vrsta baze podataka",
+    "config-upgrade-done": "Nadogradnja završena.\n\nSada možete [$1 početi koristiti vašu wiki].\n\nAko želite regenerisati vašu datoteku <code>LocalSettings.php</code>, kliknite na dugme ispod.\nOvo '''nije preporučeno''' osim ako nemate problema s vašom wiki.",
+    "config-admin-name": "Vaše ime:",
+    "config-admin-password": "Šifra:",
+    "mainpagetext": "'''MediaViki softver is uspješno instaliran.'''",
+    "mainpagedocfooter": "Kontaktirajte [//meta.wikimedia.org/wiki/Help:Contents uputstva za korisnike] za informacije o upotrebi wiki programa.\n\n== Početak ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista postavki]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki najčešće postavljana pitanja]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista E-Mail adresa MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ca.json b/includes/installer/i18n/ca.json
new file mode 100644 (file)
index 0000000..9270e07
--- /dev/null
@@ -0,0 +1,24 @@
+{
+    "@metadata": {
+        "authors": [
+            "Pitort",
+            "පසිඳු කාවින්ද"
+        ]
+    },
+    "config-page-language": "Llengua",
+    "config-page-name": "Nom",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-utf8": "UTF-8",
+    "config-ns-generic": "Projecte",
+    "config-admin-password": "Contrasenya:",
+    "config-profile-wiki": "Wiki públic",
+    "config-profile-private": "Wiki privat",
+    "config-license-pd": "Domini públic",
+    "config-upload-deleted": "Directori pels arxius suprimits:",
+    "config-advanced-settings": "Configuració avançada",
+    "config-extensions": "Extensions",
+    "mainpagetext": "'''El programari del MediaWiki s'ha instaŀlat correctament.'''",
+    "mainpagedocfooter": "Consulteu la [//meta.wikimedia.org/wiki/Help:Contents Guia d'Usuari] per a més informació sobre com utilitzar-lo.\n\n== Per a començar ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Llista de característiques configurables]\n* [//www.mediawiki.org/wiki/Manual:FAQ PMF del MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de correu (''listserv'') per a anuncis del MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ce.json b/includes/installer/i18n/ce.json
new file mode 100644 (file)
index 0000000..944f52b
--- /dev/null
@@ -0,0 +1,20 @@
+{
+    "@metadata": {
+        "authors": [
+            "Sasan700",
+            "Умар"
+        ]
+    },
+    "config-your-language": "Хьан мотт:",
+    "config-continue": "Кхин дӀа →",
+    "config-page-language": "Мотт",
+    "config-page-name": "ЦӀе",
+    "config-no-fts3": "'''Тергам бе''': SQLite гулйина хуттург йоцуш [//sqlite.org/fts3.html FTS3] — лахар болхбеш хир дац оцу бухца.",
+    "config-site-name": "Викин цӀе:",
+    "config-site-name-blank": "Язъе сайтан цӀе.",
+    "config-license": "Авторан бакъонаш а лицензи а:",
+    "config-license-pd": "Юкъараллин хьал",
+    "config-help": "гӀо",
+    "mainpagetext": "'''Вики-белха гlирс «MediaWiki» кхочуш дика дlахlоттийна.'''",
+    "mainpagedocfooter": "Викийца болх бан хаамаш карор бу хlокху чохь [//meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 нисвохааман куьйгаллица].\n\n== Цхьаболу пайде гlирсаш ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Гlирс нисбан тарлушболу могlам];\n* [//www.mediawiki.org/wiki/Manual:FAQ Сих сиха лушдолу хаттарш а жоьпаш оцу MediaWiki];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Хаам бохьуьйту араяларца башхонца керла MediaWiki]."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ceb.json b/includes/installer/i18n/ceb.json
new file mode 100644 (file)
index 0000000..8d4f46a
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Malamposon ang pag-instalar sa MediaWiki.'''",
+    "mainpagedocfooter": "Konsultaha ang [//meta.wikimedia.org/wiki/Help:Contents Giya sa mga gumagamit] alang sa impormasyon unsaon paggamit niining wiki nga software.\n\n== Pagsugod ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Listahan sa mga setting sa kompigurasyon]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ sa MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce  Mailing list sa mga release sa MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ckb.json b/includes/installer/i18n/ckb.json
new file mode 100644 (file)
index 0000000..9319178
--- /dev/null
@@ -0,0 +1,31 @@
+{
+    "@metadata": {
+        "authors": [
+            "Asoxor",
+            "Calak",
+            "Muhammed taha"
+        ]
+    },
+    "config-wiki-language": "زمانی ویکی:",
+    "config-back": "→ گەڕانەوە",
+    "config-continue": "بەردەوامبوون ←",
+    "config-page-language": "زمان",
+    "config-page-welcome": "بەخێربێیت بۆ میدیاویکی!",
+    "config-page-dbconnect": "پەیوەندی دەکات بەبنکەی زانیارییەکان",
+    "config-page-upgrade": "نويکردنەوەی دابەزاندنی پێشوو",
+    "config-page-dbsettings": "ڕێکخستنەکانی بنکەی زانیارییەکان",
+    "config-page-name": "ناو",
+    "config-page-options": "ھەڵبژاردەکان",
+    "config-page-install": "دابەزاندن",
+    "config-page-complete": "تەواو!",
+    "config-page-restart": "دەست پێکردنەوە بەدابەزاندن",
+    "config-page-readme": "بمخوێنەوە",
+    "config-page-copying": "لەبەردەگیرێتەوە",
+    "config-page-upgradedoc": "نوێدەکرێتەوە",
+    "config-page-existingwiki": "ویکی پێشوو",
+    "config-restart": "بەڵێ، دەستی پێ بکەرەوە",
+    "config-env-php": "PHP $1 دابەزێندرا.",
+    "config-env-php-toolow": "PHP $1 دابەزێندرا.\nھەرچۆنێک بێت میدیاویکی پێویستی بە PHP $2 یان بەرزتر ھەیە.",
+    "mainpagetext": "'''میدیاویکی بە سەرکەوتوویی دامەزرا.'''",
+    "mainpagedocfooter": "لە [//meta.wikimedia.org/wiki/Help:Contents ڕێنوێنیی بەکارھێنەران] بۆ زانیاری سەبارەت بە بەکارھێنانی نەرمامێری ویکی کەڵک وەربگرە.\n\n== دەستپێکردن ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings پێرستی ڕێکخستنەکانی شێوەپێدان]\n* [//www.mediawiki.org/wiki/Manual:FAQ پرسیارە دووپاتکراوەکانی میدیاویکی (MediaWiki FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce پێرستی ئیمەیلی وەشانەکانی میدیاویکی]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources خۆماڵیکردنی ویکیمیدیا بۆ زمانەکەت]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/cps.json b/includes/installer/i18n/cps.json
new file mode 100644 (file)
index 0000000..6b2a372
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Oxyzen"
+        ]
+    },
+    "mainpagetext": "'''Madalag-on nga na-install ang MediaWiki.'''",
+    "mainpagedocfooter": "Kunsultahon ang [//meta.wikimedia.org/wiki/Help:Pagtuytoy sa Manug-usar] para sa impormasyon sa paggamit sang wiki nga \"software\".\n\n==Pag-umpisa==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista sang mga setting sang konpigurayon]\n* [//www.mediawiki.org/wiki/Manual:FAQ Mga perme napangkot sa MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista sang mga ginapadal-an sang sulat sang MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/crh-cyrl.json b/includes/installer/i18n/crh-cyrl.json
new file mode 100644 (file)
index 0000000..738cdb1
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki мувафакъиетнен къурулды.'''",
+    "mainpagedocfooter": "Бу викининъ ёл-ёругъыны [//meta.wikimedia.org/wiki/Help:Contents User's Guide къулланыджы къылавузындан] огренип оласынъыз.\n\n== Базы файдалы сайтлар ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Олуджы сазламалар джедвели];\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki боюнджа сыкъ берильген суаллернен джеваплар];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-нинъ янъы версияларынынъ чыкъувындан хабер йиберюв]."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/crh-latn.json b/includes/installer/i18n/crh-latn.json
new file mode 100644 (file)
index 0000000..b0dcc1f
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki muvafaqiyetnen quruldı.'''",
+    "mainpagedocfooter": "Bu vikiniñ yol-yoruğını [//meta.wikimedia.org/wiki/Help:Contents User's Guide qullanıcı qılavuzından] ögrenip olasıñız.\n\n== Bazı faydalı saytlar ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Olucı sazlamalar cedveli];\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki boyunca sıq berilgen suallernen cevaplar];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-niñ yañı versiyalarınıñ çıquvından haber yiberüv]."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/cs.json b/includes/installer/i18n/cs.json
new file mode 100644 (file)
index 0000000..939581e
--- /dev/null
@@ -0,0 +1,313 @@
+{
+    "@metadata": {
+        "authors": [
+            "Danny B.",
+            "Jezevec",
+            "Mormegil",
+            "아라"
+        ]
+    },
+    "config-desc": "Instalační program pro MediaWiki",
+    "config-title": "Instalace MediaWiki $1",
+    "config-information": "Informace",
+    "config-localsettings-upgrade": "Byl nalezen soubor <code>LocalSettings.php</code>.\nPokud chcete stávající instalaci aktualizovat, zadejte hodnotu <code>$wgUpgradeKey</code>, kterou naleznete v souboru <code>LocalSettings.php</code>, do následujícího rámečku.",
+    "config-localsettings-cli-upgrade": "Byl detekován soubor <code><code>LocalSettings.php</code></code>\nPro aktualizaci spusťte místo instalace skript <code>update.php</code>.",
+    "config-localsettings-key": "Klíč pro aktualizaci:",
+    "config-localsettings-badkey": "Zadaný klíč je nesprávný.",
+    "config-upgrade-key-missing": "Byla detekována existující instalace MediaWiki.\nPokud ji chcete aktualizovat, přidejte následující řádku na konec souboru <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "Existující soubor <code>LocalSettings.php</code> vypadá neúplný.\nNení nastavena proměnná $1.\nUpravte soubor <code>LocalSettings.php</code> tak, aby tuto proměnnou obsahoval, a klikněte na „{{int:Config-continue}}“.",
+    "config-localsettings-connection-error": "Při připojování k databázi s využitím nastavení uvedených v <code>LocalSettings.php</code> nebo <code>AdminSettings.php</code> došlo k chybě. Opravte tato nastavení a zkuste to znovu.\n\n$1",
+    "config-session-error": "Nepodařilo se inicializovat relaci: $1",
+    "config-session-expired": "Platnost dat vašeho sezení patrně vypršela.\nSezení má nastavenu životnost $1.\nProdloužit ji můžete nastavením <code>session.gc_maxlifetime</code> v php.ini.\nSpusťte instalační proces od začátku.",
+    "config-no-session": "Data vašeho sezení se ztratila!\nZkontrolujte svůj soubor php.ini a ujistěte se, že <code>session.save_path</code> je nastaveno na odpovídající adresář.",
+    "config-your-language": "Váš jazyk:",
+    "config-your-language-help": "Zvolte jazyk, který se má použít v průběhu instalace.",
+    "config-wiki-language": "Jazyk wiki:",
+    "config-wiki-language-help": "Zvolte jazyk, ve kterém bude většina obsahu wiki.",
+    "config-back": "← Zpět",
+    "config-continue": "Pokračovat →",
+    "config-page-language": "Jazyk",
+    "config-page-welcome": "Vítejte v MediaWiki!",
+    "config-page-dbconnect": "Připojení k databázi",
+    "config-page-upgrade": "Aktualizace existující instalace",
+    "config-page-dbsettings": "Nastavení databáze",
+    "config-page-name": "Název",
+    "config-page-options": "Nastavení",
+    "config-page-install": "Instalovat",
+    "config-page-complete": "Hotovo!",
+    "config-page-restart": "Restartovat instalaci",
+    "config-page-readme": "Soubor Čti mě",
+    "config-page-releasenotes": "Poznámky k vydání",
+    "config-page-copying": "Licence",
+    "config-page-upgradedoc": "Upgrade",
+    "config-page-existingwiki": "Existující wiki",
+    "config-help-restart": "Chcete smazat všechny údaje, které jste zadali, a spustit proces instalace znovu od začátku?",
+    "config-restart": "Ano, restartovat",
+    "config-welcome": "=== Kontrola prostředí ===\nNyní se provedou základní kontroly, aby se zjistilo, zda je toto prostředí použitelné k instalaci MediaWiki.\nPokud budete potřebovat k dokončení instalace pomoc, nezapomeňte sdělit výsledky těchto testů.",
+    "config-copyright": "=== Licence a podmínky ===\n$1\n\nTento program je svobodný software; můžete jej šířit nebo modifikovat podle podmínek GNU General Public License, vydávané Free Software Foundation; buď verze 2 této licence anebo (podle vašeho uvážení) kterékoli pozdější verze.\n\nTento program je distribuován v naději, že bude užitečný, avšak '''bez jakékoli záruky'''; neposkytují se ani odvozené záruky '''prodejnosti''' anebo '''vhodnosti pro určitý účel'''.\nPodrobnosti se dočtete v textu GNU General Public License.\n\n<doclink href=Copying>Kopii GNU General Public License</doclink> jste měli obdržet spolu s tímto programem; pokud ne, napište na Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA nebo [http://www.gnu.org/copyleft/gpl.html si ji přečtěte online].",
+    "config-sidebar": "* [//www.mediawiki.org Oficiální web MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents Uživatelská příručka]\n* [//www.mediawiki.org/wiki/Manual:Contents Administrátorská příručka]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Čti mě</doclink>\n* <doclink href=ReleaseNotes>Poznámky k vydání</doclink>\n* <doclink href=Copying>Licence</doclink>\n* <doclink href=UpgradeDoc>Upgrade</doclink>",
+    "config-env-good": "Prostředí bylo zkontrolováno.\nMůžete nainstalovat MediaWiki.",
+    "config-env-bad": "Prostředí bylo zkontrolováno.\nMediaWiki nelze nainstalovat.",
+    "config-env-php": "Je nainstalováno PHP $1.",
+    "config-env-php-toolow": "Je nainstalováno PHP $1.\nMediaWiki ale vyžaduje PHP $2 nebo vyšší.",
+    "config-unicode-using-utf8": "Pro normalizaci Unicode se používá utf8_normalize.so Briona Vibbera.",
+    "config-unicode-using-intl": "Pro normalizaci Unicode se používá [http://pecl.php.net/intl PECL rozšíření intl].",
+    "config-unicode-pure-php-warning": "'''Upozornění''': Není dostupné [http://pecl.php.net/intl PECL rozšíření intl] pro normalizaci Unicode, bude se využívat pomalá implementace v čistém PHP.\nPokud provozujete wiki s velkým provozem, měli byste si přečíst něco o [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalizaci Unicode].",
+    "config-unicode-update-warning": "'''Upozornění''': Nainstalovaná verze vrstvy pro normalizaci Unicode používá starší verzi knihovny [http://site.icu-project.org/ projektu ICU].\nPokud vám aspoň trochu záleží na používání Unicode, měli byste [//www.mediawiki.org/wiki/Unicode_normalization_considerations ji aktualizovat].",
+    "config-no-db": "Nepodařilo se nalézt vhodný databázový ovladač! Musíte do PHP nainstalovat databázový ovladač.\nJsou podporovány následující typy databází: $1.\n\nPokud jste na sdíleném hostingu, požádejte svého poskytovale o instalaci vhodného databázového ovladače.\nPokud jste si PHP přeložili sami, překonfigurujte ho se zapnutým databázovým klientem, například pomocí <code>./configure --with-mysql</code>.\nPokud jste PHP nainstalovali z balíčku Debian či Ubuntu, potřebujete nainstalovat také modul php5-mysql.",
+    "config-outdated-sqlite": "'''Upozornění''': Máte SQLite $1, které je starší než minimálně vyžadovaná verze $2. SQLite nebude dostupné.",
+    "config-no-fts3": "'''Upozornění''': SQLite bylo přeloženo bez [//sqlite.org/fts3.html modulu FTS3], funkce pro vyhledávání zde nebudou dostupné.",
+    "config-register-globals": "'''Upozornění: Je zapnuta PHP volba <code>[http://php.net/register_globals register_globals]</code>.'''\n'''Pokud můžete, vypněte ji.'''\nMediaWiki bude fungovat, ale váš server je vystaven potenciálním bezpečnostním hrozbám.",
+    "config-magic-quotes-runtime": "'''Kritická chyba: Je zapnuto [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!'''\nToto nastavení nepředvídatelně poškozuje vstupní data.\nMediaWiki nelze nainstalovat ani používat, dokud není toto nastavení vypnuto.",
+    "config-magic-quotes-sybase": "'''Kritická chyba: Je zapnuto [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''\nToto nastavení nepředvídatelně poškozuje vstupní data.\nMediaWiki nelze nainstalovat ani používat, dokud není toto nastavení vypnuto.",
+    "config-mbstring": "'''Kritická chyba: Je zapnuto [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''\nToto nastavení způsobuje chyby a může nepředvídatelně poškozovat vstupní data.\nMediaWiki nelze nainstalovat ani používat, dokud není toto nastavení vypnuto.",
+    "config-ze1": "'''Kritická chyba: Je zapnut [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]!'''\nToto nastavení způsobuje s MediaWiki příšerné chyby.\nMediaWiki nelze nainstalovat ani používat, dokud není toto nastavení vypnuto.",
+    "config-safe-mode": "'''Upozornění:''' Je aktivní [http://www.php.net/features.safe-mode bezpečný režim] PHP.\nMůže způsobovat potíže, zejména při použití načítání souborů a podpory <code>math</code>.",
+    "config-xml-bad": "Chybí XML modul pro PHP.\nMediaWiki potřebuje funkce v tomto modulu a v této konfiguraci nebude fungovat.\nPokud běžíte na Mandrake, nainstalujte balíček php-xml.",
+    "config-pcre": "Zdá se, že modul s podporou PCRE chybí.\nMediaWiki ke své činnosti potřebuje funkce pro Perl-kompatibilní regulární výrazy.",
+    "config-pcre-no-utf8": "'''Kritická chyba''': PHP modul PCRE byl zřejmě přeložen bez podpory PCRE_UTF8.\nMediaWiki vyžaduje ke správné funkci podporu UTF-8.",
+    "config-memory-raised": "<code>memory_limit</code> v PHP byl nastaven na $1, zvýšen na $2.",
+    "config-memory-bad": "'''Upozornění:''' <code>memory_limit</code> je v PHP nastaven na $1.\nTo je pravděpodobně příliš málo.\nInstalace může selhat!",
+    "config-ctype": "'''Kritická chyba''': PHP musí být přeloženo s podporou pro [http://www.php.net/manual/en/ctype.installation.php rozšíření Ctype].",
+    "config-json": "'''Kritická chyba:''' PHP bylo přeloženo bez podpory JSON.\nPřed instalací MediaWiki musíte buď nainstalovat rozšíření PHP JSON nebo rozšíření [http://pecl.php.net/package/jsonc PECL jsonc].\n* Rozšíření PHP je součástí Red Hat Enterprise Linux (CentOS) 5 a 6, avšak musí se povolit v <code>/etc/php.ini</code> nebo <code>/etc/php.d/json.ini</code>.\n* V některých linuxových distribucích vydaných po květnu 2013 může toto rozšíření PHP chybět a místo toho mohou používat rozšíření PECL jako <code>php5-json</code> nebo <code>php-pecl-jsonc</code>.",
+    "config-xcache": "Je nainstalována [http://xcache.lighttpd.net/ XCache]",
+    "config-apc": "Je nainstalováno [http://www.php.net/apc APC]",
+    "config-wincache": "Je nainstalována [http://www.iis.net/download/WinCacheForPhp WinCache]",
+    "config-no-cache": "'''Upozornění:''' Nebylo nalezeno [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache], ani [http://www.iis.net/download/WinCacheForPhp WinCache].\nKešování objektů bude vypnuto.",
+    "config-mod-security": "'''Upozornění''': váš webový server má zapnuto [http://modsecurity.org/ mod_security]. Při chybné konfiguraci může způsobovat potíže MediaWiki či dalším programům, které umožňují ukládat libovolný obsah.\nPokud narazíte na náhodné chyby, podívejte se do [http://modsecurity.org/documentation/ dokumentace mod_security] nebo kontaktujte technickou podporu vašeho poskytovatele.",
+    "config-diff3-bad": "Nebyl nalezen GNU diff3.",
+    "config-git": "Nalezen software pro správu verzí Git: <code>$1</code>.",
+    "config-git-bad": "Software pro správu verzí Git nebyl nalezen.",
+    "config-imagemagick": "Nalezen ImageMagick: <code>$1</code>.\nPokud povolíte načítání souborů, bude zapnuto vytváření náhledů.",
+    "config-gd": "Nalezena vestavěná grafická knihovna GD.\nPokud povolíte načítání souborů, bude zapnuto vytváření náhledů.",
+    "config-no-scaling": "Nebyla nalezena knihovna GD ani ImageMagick.\nVytváření náhledů bude vypnuto.",
+    "config-no-uri": "'''Chyba:''' Nepodařilo se určit aktuální URI.\nInstalace přerušena.",
+    "config-no-cli-uri": "'''Upozornění''': Nebylo uvedeno --scriptpath, používá se implicitní hodnota: <code>$1</code>.",
+    "config-using-server": "Použito jméno serveru „<nowiki>$1</nowiki>“.",
+    "config-using-uri": "Použito URL serveru „<nowiki>$1$2</nowiki>“.",
+    "config-uploads-not-safe": "'''Upozornění:''' Váš implicitní adresář pro načítání souborů <code>$1</code> umožňuje provádění libovolných skriptů.\nPřestože MediaWiki všechny načítané soubory kontroluje proti bezpečnostním hrozbám, je důrazně doporučeno [//www.mediawiki.org/wiki/Manual:Security#Upload_security tuto bezpečnostní díru zacelit] před povolením načítání souborů.",
+    "config-no-cli-uploads-check": "'''Upozornění:''' Váš implicitní adresář pro načítané soubory (<code>$1</code>) se při instalaci z příkazového řádku nekontroluje na bezpečnostní hrozbu provádění libovolných skriptů.",
+    "config-brokenlibxml": "Váš systém obsahuje kombinaci verzí PHP a libxml2, která je chybná a může v MediaWiki a dalších webových aplikacích způsobovat skryté poškozování dat.\nAktualizujte na PHP 5.2.9 nebo novější a libxml2 2.7.3 nebo novější ([//bugs.php.net/bug.php?id=45996 chyba evidovaná u PHP]).\nInstalace přerušena.",
+    "config-using531": "MediaWiki nelze používat na PHP $1 kvůli chybě při předávání parametrů odkazem do <code>__call()</code>.\nPro vyřešení upgradujte na PHP 5.3.2 nebo vyšší nebo downgradujte na PHP 5.3.0.\nInstalace přerušena.",
+    "config-suhosin-max-value-length": "Je nainstalován Suhosin, který omezuje délku parametrů GET na $1 bajtů.\nKomponenta ResourceLoader z MediaWiki dokáže s tímto omezením pracovat, ale sníží to výkon.\nPokud to je alespoň trochu možné, měli byste v <code>php.ini</code> nastavit <code>suhosin.get.max_value_length</code> na 1024 nebo vyšší a na stejnou hodnotu nastavit v <code>LocalSettings.php</code> proměnnou <code>$wgResourceLoaderMaxQueryLength</code>.",
+    "config-db-type": "Typ databáze:",
+    "config-db-host": "Databázový server:",
+    "config-db-host-help": "Pokud je váš databázový server na jiném počítači, zadejte zde jméno stroje nebo IP adresu.\n\nPokud používáte sdílený webový hosting, váš poskytovatel by vám měl v dokumentaci sdělit správné jméno stroje.\n\nPokud instalujete na server běžící na Windows a používáte MySQL, jméno „localhost“ nemusí fungovat. V takovém případě zkuste jako místní IP adresu zadat „127.0.0.1“.\n\nPokud používáte PostgreSQL, můžete se připojit Unixovými sockety tak, že toto pole necháte prázdné.",
+    "config-db-host-oracle": "Databázové TNS:",
+    "config-db-host-oracle-help": "Zadejte platné [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; tato instalace musí vidět soubor tnsnames.ora.<br />Pokud používáte klientské knihovny verze 10g nebo novější, můžete také používat názvy [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+    "config-db-wiki-settings": "Identifikace této wiki",
+    "config-db-name": "Jméno databáze:",
+    "config-db-name-help": "Zvolte jméno, které označuje vaši wiki.\nNemělo by obsahovat mezery.\n\nPokud používáte sdílený webový hosting, váš poskytovatel vám buď sdělí konkrétní jméno databáze, nebo vás nechá vytvářet databáze pomocí nějakého ovládacího panelu.",
+    "config-db-name-oracle": "Databázové schéma:",
+    "config-db-account-oracle-warn": "Existují tři podporované možnosti pro instalaci s použitím databáze Oracle.\n\nPokud chcete v rámci instalace založit databázový účet, zadejte jako databázový účet pro instalaci účet s rolí SYSDBA a uveďte požadované údaje pro účet pro webový přístup, jinak můžete vytvořit účet pro webový přístup ručně a zadat pouze tento účet (pokud má dostatečná oprávnění k zakládání objektů schématu) nebo poskytnout dva různé účty, jeden s oprávněními k zakládání, druhý omezený pro webový přístup.\n\nSkript pro založení účtu s potřebnými privilegii můžete v této instalaci nalézt v adresáři „maintenance/oracle/“. Nezapomeňte, že použití omezeného účtu znepřístupní veškeré možnosti údržby přes implicitní účet.",
+    "config-db-install-account": "Uživatelský účet pro instalaci",
+    "config-db-username": "Databázové uživatelské jméno:",
+    "config-db-password": "Databázové heslo:",
+    "config-db-password-empty": "Zadejte heslo pro nového databázového uživatele: $1.\nPřestože může jít zakládat nové uživatele i bez hesel, není to bezpečné.",
+    "config-db-install-username": "Zadejte uživatelské jméno, které se použije pro připojení k databázi v průběhu instalace.\nToto není jméno uživatelského účtu MediaWiki; toto je uživatelské jméno k vaší databázi.",
+    "config-db-install-password": "Zadejte heslo, které se použije pro připojení k databázi v průběhu instalace.\nToto není heslo uživatelského účtu MediaWiki; toto je heslo k vaší databázi.",
+    "config-db-install-help": "Zadejte uživatelské jméno a heslo, které se použijí pro připojení k databázi v průběhu instalace.",
+    "config-db-account-lock": "Použít stejné uživatelské jméno a heslo pro běžnou činnost",
+    "config-db-wiki-account": "Uživatelský účet pro běžnou činnost",
+    "config-db-wiki-help": "Zadejte uživatelské jméno a heslo, které se bude používat pro připojení k databázi za běžného provozu wiki.\nPokud účet neexistuje a instalační účet má dostatečná oprávnění, bude tento uživatelský účet založen s minimálními oprávněními potřebnými k provozu wiki.",
+    "config-db-prefix": "Prefix databázových tabulek:",
+    "config-db-prefix-help": "Pokud potřebujete sdílet jednu databázi mezi vícero wiki, případně mezi MediaWiki a další webovou aplikací, můžete přidat k názvu každé tabulky prefix, abyste se vyhnuli konfliktům.\nNepoužívejte mezery.\n\nToto pole se zpravidla ponechává prázdné.",
+    "config-db-charset": "Znaková sada databáze",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binární",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 zpětně kompatibilní UTF-8",
+    "config-charset-help": "'''Upozornění:''' Pokud použijete '''zpětně kompatibilní UTF-8''' na MySQL 4.1+ a následně zazálohujete databázi pomocí <code>mysqldump</code>, může to zničit všechny ne-ASCII znaky, což nevratně poškodí vaše zálohy!\n\nV '''binárním režimu''' ukládá MediaWiki text v UTF-8 do databáze v binárních sloupcích.\nTo je výkonnější než UTF-8 režim MySQL a umožňuje využít plný rozsah znaků Unicode.\nV '''režimu UTF-8''' bude MySQL znát znakovou sadu vašich dat a může je příslušně zobrazovat a převádět,\nale neumožní vám uložit znaky mimo [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
+    "config-mysql-old": "Je vyžadováno MySQL $1 nebo novější, vy máte $2.",
+    "config-db-port": "Databázový port:",
+    "config-db-schema": "Schéma pro MediaWiki:",
+    "config-db-schema-help": "Toto schéma zpravidla stačí.\nMěňte ho, jen pokud víte, že je to potřeba.",
+    "config-pg-test-error": "Nelze se připojit k databázi '''$1''': $2",
+    "config-sqlite-dir": "Adresář pro data SQLite:",
+    "config-sqlite-dir-help": "SQLite ukládá veškerá data v jediném souboru.\n\nZadaný adresář musí být v průběhu instalace být přístupný pro zápis.\n\n'''Neměl by''' být dostupný z webu, proto ho nedáváme tam, kde jsou vaše PHP soubory.\n\nInstalátor do adresáře přidá soubor <code>.htaccess</code>, ale pokud to selže, mohl by někdo získat přístup k vaší holé databázi.\nTo zahrnuje syrová uživatelská data (e-mailové adresy, hašovaná hesla), jako i smazané revize a další data s omezeným přístupem z vaší wiki.\n\nZvažte umístění databáze někam zcela jinam, například do <code>/var/lib/mediawiki/mojewiki</code>.",
+    "config-oracle-def-ts": "Implicitní tabulkový prostor:",
+    "config-oracle-temp-ts": "Dočasný tabulkový prostor:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Věštba",
+    "config-support-info": "MediaWiki podporuje následující databázové systémy:\n\n$1\n\nPokud v nabídce níže nevidíte databázový systém, který chcete použít, musíte pro zapnutí podpory následovat instrukce odkázané výše.",
+    "config-support-mysql": "* $1 je pro MediaWiki hlavní platformou a je podporováno nejlépe ([http://www.php.net/manual/en/mysql.installation.php jak zkompilovat PHP s podporou MySQL])",
+    "config-support-postgres": "* $1 je populární open-source databázový systém používaný jako alternativa k MySQL ([http://www.php.net/manual/en/pgsql.installation.php jak přeložit PHP s podporou PostgreSQL]). Mohou se vyskytnout ještě nějaké menší chyby, použití v produkčním prostředí se nedoporučuje.",
+    "config-support-sqlite": "* $1 je velmi dobře podporovaný lehký databázový systém. ([http://www.php.net/manual/en/pdo.installation.php Jak přeložit PHP s podporou SQLite], používá PDO)",
+    "config-support-oracle": "* $1 je komerční podniková databáze. ([http://www.php.net/manual/en/oci8.installation.php Jak přeložit PHP s podporou OCI8])",
+    "config-header-mysql": "Nastavení MySQL",
+    "config-header-postgres": "Nastavení PostgreSQL",
+    "config-header-sqlite": "Nastavení SQLite",
+    "config-header-oracle": "Nastavení Oracle",
+    "config-invalid-db-type": "Chybný typ databáze",
+    "config-missing-db-name": "Musíte zadat hodnotu pro „Jméno databáze“",
+    "config-missing-db-host": "Musíte zadat hodnotu pro „Databázový server“",
+    "config-missing-db-server-oracle": "Musíte zadat hodnotu pro „Databázové TNS“",
+    "config-invalid-db-server-oracle": "Chybné databázové TNS „$1“.\nPoužívejte buď „TNS Name“ nebo „Easy Connect“ (vizte [http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]).",
+    "config-invalid-db-name": "Chybné jméno databáze „$1“.\nPoužívejte pouze ASCII písmena (a-z, A-Z), čísla (0-9), podtržítko (_) a spojovník (-).",
+    "config-invalid-db-prefix": "Chybný databázový prefix „$1“.\nPoužívejte pouze ASCII písmena (a-z, A-Z), čísla (0-9), podtržítko (_) a spojovník (-).",
+    "config-connection-error": "$1.\n\nZkontrolujte server, uživatelské jméno a heslo a zkuste to znovu.",
+    "config-invalid-schema": "Neplatné schéma pro MediaWiki „$1“.\nPoužívejte pouze ASCII písmena (a-z, A-Z), čísla (0-9) a podtržítko (_).",
+    "config-db-sys-create-oracle": "Instalátor podporuje zakládání nového účtu pouze prostřednictvím účtu SYSDBA.",
+    "config-db-sys-user-exists-oracle": "Uživatelský účet „$1“ již existuje. SYSDBA lze použít pouze pro založení nového účtu!",
+    "config-postgres-old": "Je vyžadován PostgreSQL $1 nebo novější, vy máte $2.",
+    "config-sqlite-name-help": "Zvolte jméno, které označuje vaši wiki.\nNepoužívejte mezery a spojovníky.\nPoužije se jako název souboru s daty SQLite.",
+    "config-sqlite-parent-unwritable-group": "Nelze vytvořit datový adresář <code><nowiki>$1</nowiki></code>, protože do nadřazeného adresáře <code><nowiki>$2</nowiki></code> nemá webový server právo zapisovat.\n\nInstalátor zjistil uživatele, pod kterým váš webový server běží.\nAbyste mohli pokračovat, umožněte mu zapisovat do adresáře <code><nowiki>$3</nowiki></code>.\nNa systémech Unix/Linux proveďte:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Nelze vytvořit datový adresář <code><nowiki>$1</nowiki></code>, protože do nadřazeného adresáře <code><nowiki>$2</nowiki></code> nemá webový server právo zapisovat.\n\nInstalátoru se nepodařilo zjistit uživatele, pod kterým váš webový server běží.\nAbyste mohli pokračovat, umožněte zápis do <code><nowiki>$3</nowiki></code> všem uživatelům.\nNa systémech Unix/Linux proveďte:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Chyba při vytváření datového adresáře „$1“.\nZkontrolujte umístění a zkuste to znovu.",
+    "config-sqlite-dir-unwritable": "Nelze zapisovat do adresáře „$1“.\nZměňte na něm oprávnění, aby do něj mohl webový server zapisovat, a zkuste to znovu.",
+    "config-sqlite-connection-error": "$1.\n\nZkontrolujte datový adresář a jméno databáze níže a zkuste to znovu.",
+    "config-sqlite-readonly": "Do souboru <code>$1</code> nelze zapisovat.",
+    "config-sqlite-cant-create-db": "Nepodařilo se vytvořit databázový soubor <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "PHP neobsahuje podporu FTS3, downgradují se tabulky",
+    "config-can-upgrade": "V této databázi jsou tabulky MediaWiki.\nPokud je chcete aktualizovat na MediaWiki $1, klikněte na '''Pokračovat'''.",
+    "config-upgrade-done": "Aktualizace byla dokončena.\n\nSvou wiki teď můžete [$1 začít používat].\n\nPokud chcete přegenerovat soubor <code>LocalSettings.php</code>, klikněte na tlačítko níže.\nTo se ale '''nedoporučuje''', pokud s wiki nemáte problémy.",
+    "config-upgrade-done-no-regenerate": "Aktualizace byla dokončena.\n\nSvou wiki teď můžete [$1 začít používat].",
+    "config-regenerate": "Přegenerovat LocalSettings.php →",
+    "config-show-table-status": "Dotaz <code>SHOW TABLE STATUS</code> se nezdařil!",
+    "config-unknown-collation": "'''Upozornění:''' Databáze používá nerozpoznané řazení.",
+    "config-db-web-account": "Databázový účet pro webový přístup",
+    "config-db-web-help": "Zvolte uživatelské jméno a heslo, které bude webový server používat pro připojení k databázovému serveru při běžném provozu wiki.",
+    "config-db-web-account-same": "Použít stejný účet jako pro instalaci",
+    "config-db-web-create": "Založit účet, pokud zatím neexistuje",
+    "config-db-web-no-create-privs": "Účet uvedený pro instalaci nemá oprávnění dostatečná pro založení nového účtu.\nÚčet, který zde uvedete, již musí existovat.",
+    "config-mysql-engine": "Typ úložiště:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Upozornění''': Jako typ úložiště pro MySQL jste zvolili MyISAM, které není pro použití v MediaWiki doporučeno, neboť:\n* stěží podporuje současný přístup kvůli zamykání tabulek,\n* je náchylnější na poškození dat než jiná úložiště,\n* kód MediaWiki nepodporuje MyISAM vždy tak dobře, jak by měl.\n\nPokud vaše instalace MySQL podporuje InnoDB, důrazně doporučujeme použít spíše to.\nPokud vaše instalace MySQL InnoDB nepodporuje, možná je čas na aktualizaci.",
+    "config-mysql-only-myisam-dep": "'''Upozornění:''' Jediným dostupným formátem dat pro MySQL je MyISAM, který se k užití pro MediaWiki nedoporučuje, protože:\n* téměř nepodporuje současný přístup kvůli zamykání tabulek,\n* oproti jiným formátům je náchylnější k poškození,\n* kód MediaWiki nepodporuje MyISAM tak dobře, jak by bylo potřeba.\n\nVaše instalace MySQL nepodporuje InnoDB, možná je na čase upgradovat.",
+    "config-mysql-engine-help": "'''InnoDB''' je téměř vždy nejlepší volba, neboť má dobrou podporu současného přístupu.\n\n'''MyISAM''' může být rychlejší u instalací pro jednoho uživatele nebo jen pro čtení.\nDatabáze MyISAM bývají poškozeny častěji než databáze InnoDB.",
+    "config-mysql-charset": "Znaková sada databáze:",
+    "config-mysql-binary": "Binární",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "V '''binárním režimu''' ukládá MediaWiki text v UTF-8 do databáze v binárních sloupcích.\nTo je výkonnější než UTF-8 režim MySQL a umožňuje využít plný rozsah znaků Unicode.\n\nV '''režimu UTF-8''' bude MySQL znát znakovou sadu vašich dat a může je příslušně zobrazovat a převádět, ale neumožní vám uložit znaky mimo [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
+    "config-site-name": "Název wiki:",
+    "config-site-name-help": "Bude se zobrazovat v titulku prohlížeče a na dalších místech.",
+    "config-site-name-blank": "Zadejte název serveru.",
+    "config-project-namespace": "Jmenný prostor projektu:",
+    "config-ns-generic": "Projekt",
+    "config-ns-site-name": "Stejný jako název wiki: $1",
+    "config-ns-other": "Jiný (uveďte)",
+    "config-ns-other-default": "MojeWiki",
+    "config-project-namespace-help": "Po vzoru Wikipedie udržuje mnoho wiki stránky se svými pravidly odděleně od stránek s vlastním obsahem, v „'''jmenném prostoru projektu'''“.\nNázvy všech stránek v tomto jmenném prostoru začínají jistým prefixem, který zde můžete nastavit.\nZvykem je odvozovat tento prefix z názvu wiki, ale nesmí obsahovat jisté interpunkční znaky jako „#“ nebo „:“.",
+    "config-ns-invalid": "Uvedený jmenný prostor „<nowiki>$1</nowiki>“ je neplatný.\nZadejte jiný jmenný prostor projektu.",
+    "config-ns-conflict": "Uvedený jmenný prostor „<nowiki>$1</nowiki>“ koliduje se standardním jmenným prostorem MediaWiki.\nZadejte jiný jmenný prostor projektu.",
+    "config-admin-box": "Správcovský účet",
+    "config-admin-name": "Vaše jméno:",
+    "config-admin-password": "Heslo:",
+    "config-admin-password-confirm": "Heslo ještě jednou:",
+    "config-admin-help": "Zde zadejte své požadované uživatelské jméno, například „Pepa Novák“.\nTímto jménem se budete do wiki hlásit.",
+    "config-admin-name-blank": "Zadejte uživatelské jméno správce.",
+    "config-admin-name-invalid": "Uvedené uživatelské jméno „<nowiki>$1</nowiki>“ není platné.\nZadejte jiné uživatelské jméno.",
+    "config-admin-password-blank": "Zadejte heslo ke správcovskému účtu.",
+    "config-admin-password-same": "Heslo nesmí být stejné jako uživatelské jméno.",
+    "config-admin-password-mismatch": "Uvedená hesla se neshodují.",
+    "config-admin-email": "E-mailová adresa:",
+    "config-admin-email-help": "Zde zadejte e-mailovou adresu, která vám umožní přijímat e-maily od ostatních uživatelů wiki, získat nové heslo a přijímat notifikace o změnách sledovaných stránek. Tohle pole můžete nechat prázdné.",
+    "config-admin-error-user": "Vnitřní chyba při vytváření správce se jménem „<nowiki>$1</nowiki>“.",
+    "config-admin-error-password": "Vnitřní chyba při nastavování hesla správci se jménem „<nowiki>$1</nowiki>“: <pre>$2</pre>",
+    "config-admin-error-bademail": "Zadali jste neplatnou e-mailovou adresu.",
+    "config-subscribe": "Přihlásit se k odběru [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce e-mailové konference pro oznamování nových verzí].",
+    "config-subscribe-help": "Tohle je e-mailová konference s nízkým provozem, na které se oznamují nové verze, včetně důležitých bezpečnostních oznámení.\nMěli byste se do ní přihlásit a při vydání nových verzí aktualizovat svou instalaci MediaWiki.",
+    "config-subscribe-noemail": "Pokusili jste se přihlásit k odběru e-mailové konference pro oznamování nových verzí, aniž byste poskytli e-mailovou adresu.\nPokud se chcete přihlásit k odběru, zadejte e-mailovou adresu.",
+    "config-almost-done": "Už jsme skoro hotovi!\nZbývající konfiguraci už můžete přeskočit a nainstalovat wiki hned teď.",
+    "config-optional-continue": "Ptejte se mě dál.",
+    "config-optional-skip": "Už mě to nudí, prostě nainstalujte wiki.",
+    "config-profile": "Profil uživatelských práv:",
+    "config-profile-wiki": "Otevřená wiki",
+    "config-profile-no-anon": "Vyžadována registrace uživatelů",
+    "config-profile-fishbowl": "Editace jen pro vybrané",
+    "config-profile-private": "Soukromá wiki",
+    "config-profile-help": "Wiki fungují nejlépe, když je necháte editovat co největším možným počtem lidí.\nV MediaWiki můžete snadno kontrolovat poslední změny a vracet zpět libovolnou škodu způsobenou hloupými nebo zlými uživateli.\n\nMnoho lidí však zjistilo, že je MediaWiki užitečné v širokém spektru rolí a někdy není snadné všechny přesvědčit o výhodách wikizvyklostí.\nTakže si můžete vybrat.\n\nModel '''{{int:config-profile-wiki}}''' dovoluje editovat všem, aniž by se museli přihlašovat.\nNa wiki, kde je '''{{int:config-profile-no-anon}}''', se lépe řídí zodpovědnost, ale může to odradit náhodné přispěvatele.\n\nProfil '''{{int:config-profile-fishbowl}}''' umožňuje schváleným uživatelům editovat, ale veřejnost si může stránky prohlížet včetně jejich historie.\n'''{{int:config-profile-private}}''' dovoluje stránky prohlížet jen schváleným uživatelům, kteří je i mohou editovat.\n\nPo instalaci je možná komplexní konfigurace uživatelských práv; vizte [//www.mediawiki.org/wiki/Manual:User_rights odpovídající stránku příručky].",
+    "config-license": "Autorská práva a licence:",
+    "config-license-none": "Bez patičky s licencí",
+    "config-license-cc-by-sa": "Creative Commons Uveďte autora-Zachovejte licenci",
+    "config-license-cc-by": "Creative Commons Uveďte autora",
+    "config-license-cc-by-nc-sa": "Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci",
+    "config-license-cc-0": "Creative Commons Zero (volné dílo)",
+    "config-license-gfdl": "GNU Free Documentation License 1.3 nebo novější",
+    "config-license-pd": "Volné dílo",
+    "config-license-cc-choose": "Zvolit vlastní licenci Creative Commons",
+    "config-license-help": "Mnoho veřejných wiki všechny příspěvky zveřejňuje pod některou [http://freedomdefined.org/Definition/Cs svobodnou licencí].\nTo pomáhá vytvořit duch komunitního vlastnictví a povzbuzuje dlouhodobé přispívání.\nTo obecně není potřeba u soukromé nebo firemní wiki.\n\nPokud chcete být schopni používat text z Wikipedie a chcete, aby Wikipedie byla schopna přijímat text okopírovaný z vaší wiki, měli byste zvolit '''Creative Commons Uveďte autora-Zachovejte licenci'''.\n\nDříve Wikipedie používala GNU Free Documentation License.\nGFDL je platná licence, ale složité jí porozumět.\nTaké je komplikované používat obsah licencovaný pod GFDL.",
+    "config-email-settings": "Nastavení e-mailu",
+    "config-enable-email": "Zapnout odchozí e-mail",
+    "config-enable-email-help": "Pokud chcete, aby e-mail fungoval, je potřeba správně nakonfigurovat [http://www.php.net/manual/en/mail.configuration.php e-mailová nastavení PHP].\nPokud nechcete žádné e-mailové funkce, můžete je zde vypnout.",
+    "config-email-user": "Umožnit vzájemné e-maily mezi uživateli",
+    "config-email-user-help": "Umožní všem uživatelům posílat si navzájem e-maily, pokud si to zapnout v uživatelském nastavení.",
+    "config-email-usertalk": "Umožnit notifikace k uživatelským diskusím",
+    "config-email-usertalk-help": "Umožní uživatelům přijímat notifikace o změnách uživatelských diskusí, pokud si to zapnou v nastavení.",
+    "config-email-watchlist": "Umožnit notifikace ke sledovaným stránkám",
+    "config-email-watchlist-help": "Umožní uživatelům přijímat notifikace o změnách sledovaných stránek, pokud si to zapnou v nastavení.",
+    "config-email-auth": "Zapnout ověřování e-mailů",
+    "config-email-auth-help": "Pokud je tato volba vybrána, uživatelé musí potvrdit svou e-mailovou adresu pomocí odkazu, který je jim poslán, kdykoli si ji nastaví nebo změní.\nJen potvrzené e-mailové adresy mohou přijímat e-maily od ostatních uživatelů a e-maily s notifikacemi o změnách.\nNastavení této volby je '''doporučeno''' pro veřejné wiki kvůli možnosti zneužití e-mailových funkcí.",
+    "config-email-sender": "Návratová e-mailová adresa:",
+    "config-email-sender-help": "Zadejte e-mailovou adresu, která se má použít jako návratová na odchozích e-mailech.\nSem budou zasílány nedoručitelné zprávy.\nMnoho mailových serverů vyžaduje, aby byla přinejmenším část s doménovým jménem platná.",
+    "config-upload-settings": "Obrázky a načítání souborů",
+    "config-upload-enable": "Povolit načítání souborů",
+    "config-upload-help": "Načítání souborů potenciálně vystavuje váš server bezpečnostním rizikům.\nVíce informací naleznete v [//www.mediawiki.org/wiki/Manual:Security části o bezpečnosti] v příručce.\n\nPro umožnění načítání souborů změňte práva na podadresáři <code>images</code> pod kořenovým adresářem MediaWiki, aby do něj mohl webový server zapisovat.\nPoté zapněte tuto volbu.",
+    "config-upload-deleted": "Adresář pro smazané soubory:",
+    "config-upload-deleted-help": "Zvolte adresář, do kterého se mají archivovat smazané soubory.\nTento adresář by ideálně neměl být dostupný z webu.",
+    "config-logo": "URL loga:",
+    "config-logo-help": "Základní vzhled MediaWiki zahrnuje místo pro logo o velikosti 135×160 pixelů nad bočním menu.\nNačtěte obrázek odpovídající velikosti a zadejte sem jeho URL.\n\nPokud je vaše logo umístěno relativně vůči <code>$wgStylePath</code> nebo <code>$wgScriptPath</code>, můžete zde tyto proměnné použít.\n\nPokud logo nechcete, ponechte toto pole prázdné.",
+    "config-instantcommons": "Zapnout Instant Commons",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] je funkce, která umožňuje wiki používat obrázky, zvuky a další mediální soubory ze serveru [//commons.wikimedia.org/wiki/Hlavn%C3%AD_strana Wikimedia Commons].\nAby to bylo možné, potřebuje mít MediaWiki přístup k internetu.\n\nVíce informací o této funkci, včetně instrukcí, jak ji nastavit pro jiné wiki než Wikimedia Commons, najdete v [//mediawiki.org/wiki/Manual:$wgForeignFileRepos příručce].",
+    "config-cc-error": "Volič licence Creative Commons nevrátil žádný výsledek.\nZadejte název licence ručně.",
+    "config-cc-again": "Zvolit znovu…",
+    "config-cc-not-chosen": "Zvolte si požadovanou licenci Creative Commons a klikněte na tlačítko.",
+    "config-advanced-settings": "Pokročilá konfigurace",
+    "config-cache-options": "Nastavení cachování objektů:",
+    "config-cache-help": "Cachování objektů se používá pro vylepšení rychlosti MediaWiki tím, že se cachují často používaná data.\nStředním až velkým serverům se jeho zapnutí důrazně doporučuje, i menší servery pocítí jeho výhody.",
+    "config-cache-none": "Bez cachování (o žádnou funkcionalitu nepřijdete, na větších wiki však může dojít ke zhoršení rychlosti)",
+    "config-cache-accel": "Cachování PHP objektů (APC, XCache nebo WinCache)",
+    "config-cache-memcached": "Použít Memcached (vyžaduje další nastavení a konfiguraci)",
+    "config-memcached-servers": "Servery Memcached:",
+    "config-memcached-help": "Seznam IP adres, které se mají používat pro Memcached.\nUveďte jednu na řádek spolu s portem. Například:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "Jako typ cache jste zvolili Memcached, ale neuvedli jste žádné servery.",
+    "config-memcache-badip": "Zadali jste neplatnou IP adresu pro Memcached: $1.",
+    "config-memcache-noport": "Nezadali jste port serveru Memcached: $1.\nPokud port neznáte, implicitní je 11211.",
+    "config-memcache-badport": "Čísla portů pro Memcached by měla být mezi $1 a $2.",
+    "config-extensions": "Rozšíření",
+    "config-extensions-help": "Výše uvedená rozšíření byla nalezena ve vašem adresáři <code>./extensions</code>.\n\nMohou vyžadovat dodatečnou konfiguraci, ale teď je můžete povolit.",
+    "config-install-alreadydone": "'''Upozornění:''' Vypadá to, že jste MediaWiki již nainstalovali a teď se o to pokoušíte znovu.\nPokračujte na další stránku.",
+    "config-install-begin": "Stisknutím „{{int:config-continue}}“ spustíte instalaci MediaWiki.\nPokud ještě chcete udělat nějaké změny, stiskněte „{{int:config-back}}“.",
+    "config-install-step-done": "hotovo",
+    "config-install-step-failed": "selhaly",
+    "config-install-extensions": "Vkládají se rozšíření",
+    "config-install-database": "Připravuje se databáze",
+    "config-install-schema": "Vytváří se schéma",
+    "config-install-pg-schema-not-exist": "Schéma PostgreSQL neexistuje.",
+    "config-install-pg-schema-failed": "Založení tabulek se nezdařilo.\nUjistěte se, že uživatel „$1“ může zapisovat do schématu „$2“.",
+    "config-install-pg-commit": "Potvrzují se změny",
+    "config-install-pg-plpgsql": "Kontroluje se jazyk PL/pgSQL",
+    "config-pg-no-plpgsql": "Musíte do databáze $1 nainstalovat jazyk PL/pgSQL",
+    "config-pg-no-create-privs": "Účet zadaný pro instalaci nemá oprávnění k založení uživatelského účtu.",
+    "config-pg-not-in-role": "Účet zadaný pro webového uživatele již existuje\nÚčet zadaný pro instalaci není superuživatelský a není členem role webového uživatele, takže nemůže zakládat objekty vlastněné webovým uživatelem.\n\nMediaWiki v současné době vyžaduje, aby byl vlastníkem tabulek webový uživatel. Uveďte jiný název účtu webového uživatele nebo klikněte na „zpět“ a zadejte instalačního uživatele s odpovídajícími oprávněními.",
+    "config-install-user": "Vytváří se databázový uživatel",
+    "config-install-user-alreadyexists": "Uživatel „$1“ už existuje",
+    "config-install-user-create-failed": "Vytváření uživatele „$1“ selhalo: $2",
+    "config-install-user-grant-failed": "Uživateli „$1“ se nepodařilo přidělit oprávnění: $2",
+    "config-install-user-missing": "Zadaný uživatel „$1“ neexistuje.",
+    "config-install-user-missing-create": "Zadaný uživatel „$1“ neexistuje.\nPokud ho chcete založit, zaškrtněte možnost „založit účet“ níže.",
+    "config-install-tables": "Vytvářejí se tabulky",
+    "config-install-tables-exist": "'''Upozornění''': Vypadá to, že tabulky MediaWiki již existují.\nPřeskakuje se jejich zakládání.",
+    "config-install-tables-failed": "'''Chyba''': Vytvoření tabulek selhalo s následující chybou: $1",
+    "config-install-interwiki": "Tabulka interwiki se plní implicitními položkami",
+    "config-install-interwiki-list": "Nelze přečíst soubor <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "'''Upozornění''': Vypadá to, že tabulka interwiki již obsahuje nějaké záznamy.\nPřeskakuje se implicitní seznam.",
+    "config-install-stats": "Inicializují se statistiky",
+    "config-install-keys": "Vytvářejí se tajné klíče",
+    "config-insecure-keys": "'''Upozornění:''' {{PLURAL:$2|Tajný klíč|Tajné klíče}} ($1) vytvořené v průběhu instalace {{PLURAL:$2|není|nejsou}} zcela {{PLURAL:$2|bezpečný|bezpečné}}. Zvažte {{PLURAL:$2|jeho|jejich}} ruční změnu.",
+    "config-install-sysop": "Zakládá se uživatelský účet správce",
+    "config-install-subscribe-fail": "Nelze se přihlásit k odběru mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "Není nainstalován cURL a není dostupné allow_url_fopen.",
+    "config-install-mainpage": "Vytváří se počáteční obsah hlavní strany",
+    "config-install-extension-tables": "Vytvářejí se tabulky pro zapnutá rozšíření",
+    "config-install-mainpage-failed": "Nepodařilo se vložit hlavní stranu: $1",
+    "config-install-done": "'''Gratulujeme!'''\nÚspěšně jste nainstalovali MediaWiki.\n\nInstalátor vytvořil soubor <code>LocalSettings.php</code>.\nTen obsahuje veškerou vaši konfiguraci.\n\nBudete si ho muset stáhnout a uložit do základního adresáře vaší instalace wiki (do stejného adresáře jako soubor index.php). Stažení souboru se mělo spustit automaticky.\n\nPokud se vám stažení nenabídlo nebo jste ho zrušili, můžete ho spustit znovu kliknutím na následující odkaz:\n\n$3\n\n'''Poznámka''': Pokud to neuděláte hned, tento vygenerovaný konfigurační soubor nebude později dostupný, pokud instalaci opustíte, aniž byste si ho stáhli.\n\nAž to dokončíte, můžete '''[$2 vstoupit do své wiki]'''.",
+    "config-download-localsettings": "Stáhnout <code>LocalSettings.php</code>",
+    "config-help": "nápověda",
+    "config-nofile": "Soubor „$1“ nelze nalézt. Byl smazán?",
+    "config-extension-link": "Věděli jste, že vaše wiki podporuje [//www.mediawiki.org/wiki/Manual:Extensions rozšíření]?\n\nMůžete procházet [//www.mediawiki.org/wiki/Category:Extensions_by_category rozšíření po kategoriích] nebo si prohlédnout [//www.mediawiki.org/wiki/Extension_Matrix Matici rozšíření] obsahující úplný seznam.",
+    "mainpagetext": "'''MediaWiki byla úspěšně nainstalována.'''",
+    "mainpagedocfooter": "[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Překlad MediaWiki do vašeho jazyka]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/csb.json b/includes/installer/i18n/csb.json
new file mode 100644 (file)
index 0000000..024b3d8
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki òsta zainstalowónô.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/cu.json b/includes/installer/i18n/cu.json
new file mode 100644 (file)
index 0000000..a5b1c21
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "ОйЛ"
+        ]
+    },
+    "config-page-language": "ѩꙁꙑкъ",
+    "config-page-name": "имѧ",
+    "config-help": "помощь"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/cv.json b/includes/installer/i18n/cv.json
new file mode 100644 (file)
index 0000000..bdb08c2
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''«MediaWiki» вики-движока лартасси ăнăçлă вĕçленчĕ.'''",
+    "mainpagedocfooter": "Ку википе ĕçлеме пулăшакан информацине [//meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 усăç руководствинче] тупма пултаратăр.\n\n== Пулăшма пултарĕç ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Ĕнерлевсен списокĕ];\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki тăрăх час-часах ыйтакан ыйтусемпе хуравсем];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki çĕнĕ верси тухнине пĕлтерекен рассылка]."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/cy.json b/includes/installer/i18n/cy.json
new file mode 100644 (file)
index 0000000..5bfbb21
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Lloffiwr",
+            "Xxglennxx"
+        ]
+    },
+    "mainpagetext": "'''Wedi llwyddo gosod meddalwedd MediaWiki yma'''",
+    "mainpagedocfooter": "Ceir cymorth (yn Saesneg) ar ddefnyddio meddalwedd wici yn y [//meta.wikimedia.org/wiki/Help:Contents Canllaw Defnyddwyr] ar wefan Wikimedia.\n\n==Cychwyn arni==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Rhestr osodiadau wrth gyflunio]\n* [//www.mediawiki.org/wiki/Manual:FAQ Cwestiynau poblogaidd ar MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Rhestr postio datganiadau MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Cyfieithu MediaWici i'ch iaith chi]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/da.json b/includes/installer/i18n/da.json
new file mode 100644 (file)
index 0000000..45f6a79
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Peter Alberti"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki er nu installeret.'''",
+    "mainpagedocfooter": "Se [//meta.wikimedia.org/wiki/Help:Contents brugervejledningen] for oplysninger om brugen af wikiprogrammellet.\n\n== At komme i gang ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Listen over opsætningsmuligheder]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki ofte stillede spørgsmål]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Postliste angående udgivelser af MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/de-formal.json b/includes/installer/i18n/de-formal.json
new file mode 100644 (file)
index 0000000..8a48010
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "MichaelFrey"
+        ]
+    },
+    "mainpagedocfooter": "Hilfe zur Benutzung und Konfiguration der Wiki-Software finden Sie im [//meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch].\n\n== Starthilfen ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/de.json b/includes/installer/i18n/de.json
new file mode 100644 (file)
index 0000000..2924c82
--- /dev/null
@@ -0,0 +1,319 @@
+{
+    "@metadata": {
+        "authors": [
+            "Geitost",
+            "Kghbln",
+            "LWChris",
+            "Metalhead64",
+            "Purodha",
+            "Rillke",
+            "The Evil IP address",
+            "Umherirrender",
+            "Wikinaut",
+            "아라"
+        ]
+    },
+    "config-desc": "Das MediaWiki-Installationsprogramm",
+    "config-title": "Installation von MediaWiki $1",
+    "config-information": "Informationen",
+    "config-localsettings-upgrade": "Eine Datei <code>LocalSettings.php</code> wurde gefunden.\nUm die vorhandene Installation aktualisieren zu können, muss der Wert des Parameters <code>$wgUpgradeKey</code> im folgenden Eingabefeld angegeben werden.\nDer Parameterwert befindet sich in der Datei <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Eine Datei <code><code>LocalSettings.php</code></code> wurde gefunden.\nUm die vorhandene Installation zu aktualisieren, muss die Datei <code>update.php</code> ausgeführt werden.",
+    "config-localsettings-key": "Aktualisierungsschlüssel:",
+    "config-localsettings-badkey": "Der angegebene Aktualisierungsschlüssel ist falsch.",
+    "config-upgrade-key-missing": "Eine MediaWiki-Installation wurde gefunden.\nUm die vorhandene Installation aktualisieren zu können, muss die unten angegebene Codezeile in die Datei <code>LocalSettings.php</code> an deren Ende eingefügt werden:\n\n$1",
+    "config-localsettings-incomplete": "Die vorhandene Datei <code>LocalSettings.php</code> scheint unvollständig zu sein.\nDie Variable <code>$1</code> wurde nicht definiert.\nDie Datei <code>LocalSettings.php</code> muss entsprechend geändert werden, so dass sie definiert ist. Klicke danach auf „{{int:Config-continue}}“.",
+    "config-localsettings-connection-error": "Beim Verbindungsversuch zur Datenbank ist, unter Verwendung der in den Dateien <code>LocalSettings.php</code> oder <code>AdminSettings.php</code> hinterlegten Einstellungen, ein Fehler aufgetreten. Diese Einstellungen müssen korrigiert werden. Danach kann ein erneuter Versuch unternommen werden.\n\n$1",
+    "config-session-error": "Fehler beim Starten der Sitzung: $1",
+    "config-session-expired": "Die Sitzungsdaten scheinen abgelaufen zu sein.\nSitzungen sind für einen Zeitraum von $1 konfiguriert.\nDieser kann durch Anhebung des Parameters <code>session.gc_maxlifetime</code> in der Datei <code>php.ini</code> erhöht werden.\nDen Installationsvorgang erneut starten.",
+    "config-no-session": "Die Sitzungsdaten sind verloren gegangen!\nDie Datei <code>php.ini</code> muss geprüft und es muss dabei sichergestellt werden, dass der Parameter <code>session.save_path</code> auf das richtige Verzeichnis verweist.",
+    "config-your-language": "Sprache während des Installierens:",
+    "config-your-language-help": "Bitte die Sprache auswählen, die während des Installationsvorgangs verwendet werden soll.",
+    "config-wiki-language": "Sprache des Wikis:",
+    "config-wiki-language-help": "Bitte die Sprache auswählen, die überwiegend beim Erstellen der Inhalte verwendet werden soll.",
+    "config-back": "← Zurück",
+    "config-continue": "Weiter →",
+    "config-page-language": "Sprache",
+    "config-page-welcome": "Willkommen bei MediaWiki!",
+    "config-page-dbconnect": "Mit der Datenbank verbinden",
+    "config-page-upgrade": "Eine vorhandene Installation aktualisieren",
+    "config-page-dbsettings": "Einstellungen zur Datenbank",
+    "config-page-name": "Name",
+    "config-page-options": "Optionen",
+    "config-page-install": "Installieren",
+    "config-page-complete": "Fertig!",
+    "config-page-restart": "Installationsvorgang erneut starten",
+    "config-page-readme": "Lies mich",
+    "config-page-releasenotes": "Versionsinfos (en)",
+    "config-page-copying": "Kopie der Lizenz",
+    "config-page-upgradedoc": "Aktualisiere",
+    "config-page-existingwiki": "Vorhandenes Wiki",
+    "config-help-restart": "Sollen alle bereits eingegebenen Daten gelöscht und der Installationsvorgang erneut gestartet werden?",
+    "config-restart": "Ja, erneut starten",
+    "config-welcome": "=== Prüfung der Installationsumgebung ===\nDie Basisprüfungen werden jetzt durchgeführt, um festzustellen, ob die Installationsumgebung für die Installation von MediaWiki geeignet ist.\nNimm diese Information auf, falls du Unterstützung bei der Vervollständigung der Installation benötigst.",
+    "config-copyright": "=== Lizenz und Nutzungsbedingungen ===\n\n$1\n\nDieses Programm ist freie Software, d. h. es kann, gemäß den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nDieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings '''ohne jegliche Garantie''' und sogar ohne die implizierte Garantie einer '''Marktgängigkeit''' oder '''Eignung für einen bestimmten Zweck'''. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.\n\nEine <doclink href=Copying>Kopie der GNU General Public License</doclink> sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [http://www.gnu.org/copyleft/gpl.html online gelesen] werden.",
+    "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/de Website von MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents/de Benutzeranleitung]\n* [//www.mediawiki.org/wiki/Manual:Contents/de Administratorenanleitung]\n* [//www.mediawiki.org/wiki/Manual:FAQ/de Häufig gestellte Fragen]\n----\n* <doclink href=Readme>Lies mich</doclink>\n* <doclink href=ReleaseNotes>Versionsinformationen</doclink>\n* <doclink href=Copying>Lizenzbestimmungen</doclink>\n* <doclink href=UpgradeDoc>Aktualisierung</doclink>",
+    "config-env-good": "Die Installationsumgebung wurde geprüft.\nMediaWiki kann installiert werden.",
+    "config-env-bad": "Die Installationsumgebung wurde geprüft.\nMediaWiki kann nicht installiert werden.",
+    "config-env-php": "PHP $1 ist installiert.",
+    "config-env-php-toolow": "PHP $1 ist installiert.\nAllerdings benötigt MediaWiki PHP $2 oder höher.",
+    "config-unicode-using-utf8": "Zur Unicode-Normalisierung wird Brion Vibbers <code>utf8_normalize.so</code> eingesetzt.",
+    "config-unicode-using-intl": "Zur  Unicode-Normalisierung wird die [http://pecl.php.net/intl PECL-Erweiterung intl] eingesetzt.",
+    "config-unicode-pure-php-warning": "'''Warnung:''' Die [http://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird.\nSofern eine Website mit großer Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.",
+    "config-unicode-update-warning": "'''Warnung:''' Die installierte Version des Unicode-Normalisierungswrappers nutzt einer ältere Version der Bibliothek des [http://site.icu-project.org/ ICU-Projekts].\nDiese sollte [//www.mediawiki.org/wiki/Unicode_normalization_considerations aktualisiert] werden, sofern auf die Verwendung von Unicode Wert gelegt wird.",
+    "config-no-db": "Es konnte kein adäquater Datenbanktreiber gefunden werden. Es muss daher ein Datenbanktreiber für PHP installiert werden.\nDie folgenden Datenbanksysteme werden unterstützt: $1\n\nSofern ein gemeinschaftlich genutzter Server für das Hosting verwendet wird, muss der Hoster gefragt werden einen adäquaten Datenbanktreiber zu installieren.\nSofern PHP selbst kompiliert wurde, muss es mit es neu konfiguriert werden, wobei der Datenbankclient zu aktivierten ist. Hierzu kann beispielsweise <code>./configure --with-mysql</code> ausgeführt werden.\nSofern PHP über die Paketverwaltung einer Debian- oder Ubuntu-Installation installiert wurde, muss das „php5-mysql“-Paket nachinstalliert werden.",
+    "config-outdated-sqlite": "'''Warnung:''' SQLite $1 ist installiert. Allerdings benötigt MediaWiki SQLite $2 oder höher. SQLite wird daher nicht verfügbar sein.",
+    "config-no-fts3": "'''Warnung:''' SQLite wurde ohne das [//sqlite.org/fts3.html FTS3-Modul] kompiliert, so dass keine Suchfunktionen für dieses Datenbanksystem zur Verfügung stehen werden.",
+    "config-register-globals": "'''Warnung: Der Parameter <code>[http://php.net/register_globals register_globals]</code> von PHP ist aktiviert.'''\n'''Sie sollte deaktiviert werden, sofern dies möglich ist.'''\nDie MediaWiki-Installation wird zwar laufen, wobei aber der Server für potentielle Sicherheitsprobleme anfällig ist.",
+    "config-magic-quotes-runtime": "'''Fataler Fehler: Der Parameter <code>[http://www.php.net/manual/de/function.set-magic-quotes-runtime.php set_magic_quotes_runtime]</code> von PHP ist aktiviert!'''\nDiese Einstellung führt zu unvorhersehbaren Problemen bei der Dateneingabe.\nMediaWiki kann nicht installiert werden, solange dieser Parameter nicht deaktiviert wurde.",
+    "config-magic-quotes-sybase": "'''Fataler Fehler: Der Parameter <code>[http://www.php.net/manual/de/sybase.configuration.php#ini.magic-quotes-sybase magic_quotes_sybase]</code> von PHP ist aktiviert!'''\nDiese Einstellung führt zu unvorhersehbaren Problemen bei der Dateneingabe.\nMediaWiki kann nicht installiert werden, solange dieser Parameter nicht deaktiviert wurde.",
+    "config-mbstring": "'''Fataler Fehler: Der Parameter <code>[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]</code> von PHP ist aktiviert!'''\nDiese Einstellung verursacht Fehler und führt zu unvorhersehbaren Problemen bei der Dateneingabe.\nMediaWiki kann nicht installiert werden, solange dieser Parameter nicht deaktiviert wurde.",
+    "config-ze1": "'''Fataler Fehler: Der Parameter <code>[http://www.php.net/manual/de/ini.core.php zend.ze1_compatibility_mode]</code> von PHP ist aktiviert!'''\nDiese Einstellung führt zu großen Fehlern bei MediaWiki.\nMediaWiki kann nicht installiert werden, solange dieser Parameter nicht deaktiviert wurde.",
+    "config-safe-mode": "'''Warnung:''' Der Funktion <code>[http://www.php.net/features.safe-mode Safe Mode]</code> von PHP ist aktiviert.\nDies kann zu Problemen führen, insbesondere wenn das Hochladen von Dateien möglich sein, bzw. der Auszeichner <code>math</code> genutzt werden soll.",
+    "config-xml-bad": "Das XML-Modul von PHP fehlt.\nMediaWiki benötigt Funktionen, die dieses Modul bereitstellt und wird in der bestehenden Konfiguration nicht funktionieren.\nSofern Mandriva genutzt wird, muss noch das „php-xml“-Paket installiert werden.",
+    "config-pcre": "Das PHP-Modul für die PCRE-Unterstützung wurde nicht gefunden.\nMediaWiki benötigt allerdings perl-kompatible reguläre Ausdrücke, um lauffähig zu sein.",
+    "config-pcre-no-utf8": "'''Fataler Fehler:''' Das PHP-Modul PCRE scheint ohne PCRE_UTF8-Unterstützung kompiliert worden zu sein.\nMediaWiki benötigt die UTF-8-Unterstützung, um fehlerfrei lauffähig zu sein.",
+    "config-memory-raised": "Der PHP-Parameter <code>memory_limit</code> betrug $1 und wurde auf $2 erhöht.",
+    "config-memory-bad": "'''Warnung:''' Der PHP-Parameter <code>memory_limit</code> beträgt $1.\nDieser Wert ist wahrscheinlich zu niedrig.\nDer Installationsvorgang könnte daher scheitern!",
+    "config-ctype": "'''Fataler Fehler:''' PHP muss mit Unterstützung für das [http://www.php.net/manual/de/ctype.installation.php Modul ctype] kompiliert werden.",
+    "config-json": "'''Fatal:''' PHP wurde ohne JSON-Support kompiliert.\nDu musst entweder die PHP-JSON- oder die [http://pecl.php.net/package/jsonc PECL-jsonc]-Erweiterung installieren, bevor du MediaWiki installierst.\n* Die PHP-Erweiterung ist in Red Hat Enterprise Linux (CentOS) 5 und 6 enthalten, muss jedoch in <code>/etc/php.ini</code> oder <code>/etc/php.d/json.ini</code> aktiviert werden.\n* Einige Linux-Distributionen, die nach Mai 2013 veröffentlicht wurden, lassen die PHP-Erweiterung weg, stattdessen wird die PECL-Erweiterung als <code>php5-json</code> oder <code>php-pecl-jsonc</code> mitgeliefert.",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] ist installiert",
+    "config-apc": "[http://www.php.net/apc APC] ist installiert",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] ist installiert",
+    "config-no-cache": "'''Warnung:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] oder [http://www.iis.net/download/WinCacheForPhp WinCache] wurden nicht gefunden.\nDas Objektcaching kann daher nicht aktiviert werden.",
+    "config-mod-security": "'''Warnung:''' Auf dem Webserver wurde [http://modsecurity.org/ ModSecurity] aktiviert. Sofern falsch konfiguriert, kann dies zu Problemen mit MediaWiki sowie anderer Software auf dem Server führen und es Benutzern ermöglichen beliebige Inhalte im Wiki einzustellen.\nFür weitere Informationen empfehlen wir die [http://modsecurity.org/documentation/ Dokumentation zu ModSecurity] oder den Kontakt zum Hoster, sofern Fehler auftreten.",
+    "config-diff3-bad": "GNU diff3 wurde nicht gefunden.",
+    "config-git": "Die Git-Versionsverwaltungssoftware wurde gefunden: <code>$1</code>.",
+    "config-git-bad": "Die Git-Versionsverwaltungssoftware wurde nicht gefunden.",
+    "config-imagemagick": "ImageMagick wurde gefunden: <code>$1</code>.\nMiniaturansichten von Bildern werden möglich sein, sobald das Hochladen von Dateien aktiviert wurde.",
+    "config-gd": "Die im System integrierte GD-Grafikbibliothek wurde gefunden.\nMiniaturansichten von Bildern werden möglich sein, sobald das Hochladen von Dateien aktiviert wurde.",
+    "config-no-scaling": "Weder die GD-Grafikbibliothek noch ImageMagick wurden gefunden.\nMiniaturansichten von Bildern sind daher nicht möglich.",
+    "config-no-uri": "'''Fehler:''' Die aktuelle URL konnte nicht ermittelt werden.\nDer Installationsvorgang wurde daher abgebrochen.",
+    "config-no-cli-uri": "'''Warnung''': Es wurde kein Pfad zum Skipt (--scriptpath) angegeben. Daher wird der Standardpfad genutzt: <code>$1</code>.",
+    "config-using-server": "Der Servername „<nowiki>$1</nowiki>“ wird verwendet.",
+    "config-using-uri": "Die Server-URL „<nowiki>$1$2</nowiki>“ wird verwendet.",
+    "config-uploads-not-safe": "'''Warnung:''' Das Standardverzeichnis für hochgeladene Dateien <code>$1</code> ist für die willkürliche Ausführung von Skripten anfällig.\nObwohl MediaWiki die hochgeladenen Dateien auf Sicherheitsrisiken überprüft, wird dennoch dringend empfohlen diese [//www.mediawiki.org/wiki/Manual:Security#Upload_security Sicherheitslücke] zu schließen, bevor das Hochladen von Dateien aktiviert wird.",
+    "config-no-cli-uploads-check": "'''Warnung''': Das Standardverzeichnis für hochgeladene Dateien (<code>$1</code>) wird, während der Installation über die Kommandozeile, nicht auf Sicherheitsanfälligkeiten hinsichtlich willkürlicher Skriptausführungen geprüft.",
+    "config-brokenlibxml": "Das System nutzt eine Kombination aus PHP- und libxml2-Versionen, die fehleranfällig ist und versteckte Datenfehler bei MediaWiki und anderen Webanwendungen verursachen kann.\nPHP muss auf Version 5.2.9 oder später sowie libxml2 auf die Version 2.7.3 oder später aktualisiert werden, um das Problem zu lösen. Installationsabbruch ([//bugs.php.net/bug.php?id=45996 siehe hierzu die Fehlermeldung bei PHP]).",
+    "config-using531": "MediaWiki kann nicht zusammen mit PHP $1 verwendet werden. Grund hierfür ist ein Fehler im Zusammenhang mit den Verweisparametern zu <code>__call()</code>.\nPHP muss auf Version 5.3.2 oder höher oder 5.3.0 oder niedriger aktualisiert werden, um das Problem zu beheben.\nDie Installation wurde abgebrochen.",
+    "config-suhosin-max-value-length": "Suhosin ist installiert und beschränkt die Länge des GET-Parameters auf $1 Bytes.\nDer ResouceLoader von MediaWiki wird zwar unter diesen Bedingungen funktionieren, allerdings nur mit verminderter Leistungsfähigkeit.\nSofern möglich sollte der Parameter <code>suhosin.get.max_value_length</code> in der Datei <code>php.ini</code> auf 1024 oder höher festgelegt werden.\nGleichzeitig muss der Parameter <code>$wgResourceLoaderMaxQueryLength</code> in der Datei <code>LocalSettings.php</code> auf den selben Wert eingestellt werden.",
+    "config-db-type": "Datenbanksystem:",
+    "config-db-host": "Datenbankserver:",
+    "config-db-host-help": "Sofern sich die Datenbank auf einem anderen Server befindet, ist hier der Servername oder die entsprechende IP-Adresse anzugeben.\n\nSofern ein gemeinschaftlich genutzter Server verwendet wird, sollte der Hoster den zutreffenden Servernamen in seiner Dokumentation angegeben haben.\n\nSofern auf einem Windows-Server installiert und MySQL genutzt wird, funktioniert der Servername „localhost“ voraussichtlich nicht. Wenn nicht, sollte  „127.0.0.1“ oder die lokale IP-Adresse angegeben werden.\n\nSofern PostgresQL genutzt wird, muss dieses Feld leer gelassen werden, um über ein Unix-Socket zu verbinden.",
+    "config-db-host-oracle": "Datenbank-TNS:",
+    "config-db-host-oracle-help": "Einen gültigen [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm „Local Connect“-Namen] angeben. Die „tnsnames.ora“-Datei muss von dieser Installation erkannt werden können.<br />Sofern die Client-Bibliotheken für Version 10g oder neuer verwendet werden, kann auch [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm „Easy Connect“] zur Namensgebung genutzt werden.",
+    "config-db-wiki-settings": "Bitte Daten zur eindeutigen Identifikation dieses Wikis angeben",
+    "config-db-name": "Datenbankname:",
+    "config-db-name-help": "Bitte einen Namen angeben, mit dem das Wiki identifiziert werden kann.\nDabei sollten keine Leerzeichen verwendet werden.\n\nSofern ein gemeinschaftlich genutzter Server verwendet wird, sollte der Hoster den Datenbanknamen angegeben oder aber die Erstellung einer Datenbank über ein entsprechendes Interface gestattet haben.",
+    "config-db-name-oracle": "Datenbankschema:",
+    "config-db-account-oracle-warn": "Es gibt drei von MediaWiki unterstützte Möglichkeiten Oracle als Datenbank einzurichten:\n\nSofern das Datenbankbenutzerkonto während des Installationsvorgangs erstellt werden soll, muss ein Datenbankbenutzerkonto mit der SYSDBA-Berechtigung zusammen mit den entsprechenden Anmeldeinformationen angegeben werden, mit dem dann über das Web auf die Datenbank zugegriffen werden kann. Alternativ kann man auch lediglich ein einzelnes manuell angelegtes Datenbankbenutzerkonto angeben, mit dem über das Web auf die Datenbank zugegriffen werden kann, sofern dieses über die Berechtigung zur Erstellung von Datenbankschemen verfügt. Zudem ist es möglich zwei Datenbankbenutzerkonten anzugeben von denen eines die Berechtigung zur Erstellung von Datenbankschemen hat und das andere, um mit ihm über das Web auf die Datenbank zuzugreifen.\n\nEin Skript zum Anlegen eines Datenbankbenutzerkontos mit den notwendigen Berechtigungen findet man unter dem Pfad „…/maintenance/oracle/“ dieser MediaWiki-Installation. Es ist dabei zu bedenken, dass die Verwendung eines Datenbankbenutzerkontos mit beschränkten Berechtigungen die Nutzung der Wartungsfunktionen für das Standarddatenbankbenutzerkonto deaktiviert.",
+    "config-db-install-account": "Benutzerkonto für die Installation",
+    "config-db-username": "Name des Datenbankbenutzers:",
+    "config-db-password": "Passwort des Datenbankbenutzers:",
+    "config-db-password-empty": "Bitte ein Passwort für den neuen Datenbankbenutzer angeben: $1\nObzwar es möglich ist Datenbankbenutzer ohne Passwort anzulegen, so ist dies aber nicht sicher.",
+    "config-db-install-username": "Den Benutzernamen angeben, der für die Verbindung mit der Datenbank während des Installationsvorgangs genutzt werden soll. Es handelt sich dabei nicht um den Benutzernamen für das MediaWiki-Konto, sondern um den Benutzernamen der vorgesehenen Datenbank.",
+    "config-db-install-password": "Das Passwort angeben, das für die Verbindung mit der Datenbank während des Installationsvorgangs genutzt werden soll. Es handelt sich dabei nicht um das Passwort für das MediaWiki-Konto, sondern um das Passwort der vorgesehenen Datenbank.",
+    "config-db-install-help": "Benutzername und Passwort, die während des Installationsvorgangs, für die Verbindung mit der Datenbank, genutzt werden sollen, sind nun anzugeben.",
+    "config-db-account-lock": "Derselbe Benutzername und das Passwort müssen während des Normalbetriebs des Wikis verwendet werden.",
+    "config-db-wiki-account": "Benutzerkonto für den normalen Betrieb",
+    "config-db-wiki-help": "Bitte Benutzernamen und Passwort angeben, die der Webserver während des Normalbetriebes dazu verwenden soll, eine Verbindung zum Datenbankserver herzustellen.\nSofern ein entsprechendes Benutzerkonto nicht vorhanden ist und das Benutzerkonto für den Installationsvorgang über ausreichende Berechtigungen verfügt, wird dieses Benutzerkonto automatisch mit den Mindestberechtigungen zum Normalbetrieb des Wikis angelegt.",
+    "config-db-prefix": "Datenbanktabellenpräfix:",
+    "config-db-prefix-help": "Sofern eine Datenbank für mehrere Wikiinstallationen oder eine Wikiinstallation und eine andere Programminstallation genutzt werden soll, muss ein Datenbanktabellenpräfix angegeben werden, um Datenbankprobleme zu vermeiden.\nEs können keine Leerzeichen verwendet werden.\n\nGewöhnlich bleibt dieses Datenfeld leer.",
+    "config-db-charset": "Datenbankzeichensatz",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binär",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 abwärtskompatibles UTF-8",
+    "config-charset-help": "'''Warnung:''' Sofern '''abwärtskompatibles UTF-8''' bei MySQL 4.1+ verwendet und anschließend die Datenbank mit <code>mysqldump</code> gesichert wird, könnten alle nicht mit ASCII-codierten Zeichen beschädigt werden, was zu irreversiblen Schäden der Datensicherung führt!\n\nIm '''binären Modus''' speichert MediaWiki UTF-8 Texte in der Datenbank in binär kodierte Datenfelder.\nDies ist effizienter als der UTF-8-Modus von MySQL und ermöglicht so die Verwendung jeglicher Unicode-Zeichen.\nIm '''UTF-8-Modus''' wird MySQL den Zeichensatz der Daten erkennen und sie richtig anzeigen und konvertieren.\nEs können allerdings keine Zeichen außerhalb des [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke ''Basic Multilingual Plane'' (BMP)] gespeichert werden.",
+    "config-mysql-old": "MySQL $1 oder höher wird benötigt. MySQL $2 ist momentan vorhanden.",
+    "config-db-port": "Datenbankport:",
+    "config-db-schema": "Datenschema für MediaWiki",
+    "config-db-schema-help": "Dieses Datenschema ist in der Regel allgemein verwendbar.\nNur Änderungen daran vornehmen, sofern es gute Gründe dafür gibt.",
+    "config-pg-test-error": "Es kann keine Verbindung zur Datenbank '''$1''' hergestellt werden: $2",
+    "config-sqlite-dir": "SQLite-Datenverzeichnis:",
+    "config-sqlite-dir-help": "SQLite speichert alle Daten in einer einzigen Datei.\n\nDas für sie vorgesehene Verzeichnis muss während des Installationsvorgangs beschreibbar sein.\n\nEs sollte '''nicht''' über das Web zugänglich sein, was der Grund ist, warum die Datei nicht dort abgelegt wird, wo sich die PHP-Dateien befinden.\n\nDas Installationsprogramm wird mit der Datei zusammen eine zusätzliche <code>.htaccess</code>-Datei erstellen. Sofern dies scheitert, können Dritte auf die Datendatei zugreifen.\nDies umfasst die Nutzerdaten (E-Mail-Adressen, Passwörter, etc.) wie auch gelöschte Seitenversionen und andere vertrauliche Daten, die im Wiki gespeichert sind.\n\nEs ist daher zu erwägen, die Datendatei an gänzlich anderer Stelle abzulegen, beispielsweise im Verzeichnis <code>./var/lib/mediawiki/yourwiki</code>.",
+    "config-oracle-def-ts": "Standardtabellenraum:",
+    "config-oracle-temp-ts": "Temporärer Tabellenraum:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "MediaWiki unterstützt die folgenden Datenbanksysteme:\n\n$1\n\nSofern nicht das Datenbanksystem angezeigt wird, das verwendet werden soll, gibt es oben einen Link zur Anleitung mit Informationen, wie dieses aktiviert werden kann.",
+    "config-support-mysql": "* $1 ist das von MediaWiki primär unterstützte Datenbanksystem ([http://www.php.net/manual/en/mysql.installation.php Anleitung zur Kompilierung von PHP mit MySQL-Unterstützung (en)])",
+    "config-support-postgres": "* $1 ist ein beliebtes Open-Source-Datenbanksystem und eine Alternative zu MySQL ([http://www.php.net/manual/de/pgsql.installation.php Anleitung zur Kompilierung von PHP mit PostgreSQL-Unterstützung]). Es gibt allerdings einige kleinere Implementierungsfehler, so dass von der Nutzung in einer Produktivumgebung abgeraten wird.",
+    "config-support-sqlite": "* $1 ist ein verschlanktes Datenbanksystem, das auch gut unterstützt wird ([http://www.php.net/manual/de/pdo.installation.php Anleitung zur Kompilierung von PHP mit SQLite-Unterstützung], verwendet PHP Data Objects (PDO))",
+    "config-support-oracle": "* $1 ist eine kommerzielle Unternehmensdatenbank ([http://www.php.net/manual/en/oci8.installation.php Anleitung zur Kompilierung von PHP mit OCI8-Unterstützung (en)])",
+    "config-header-mysql": "MySQL-Einstellungen",
+    "config-header-postgres": "PostgreSQL-Einstellungen",
+    "config-header-sqlite": "SQLite-Einstellungen",
+    "config-header-oracle": "Oracle-Einstellungen",
+    "config-invalid-db-type": "Unzulässiges Datenbanksystem",
+    "config-missing-db-name": "Bei „Datenbankname“ muss ein Wert angegeben werden.",
+    "config-missing-db-host": "Bei „Datenbankhost“ muss ein Wert angegeben werden.",
+    "config-missing-db-server-oracle": "Für das „Datenbank-TNS“ muss ein Wert eingegeben werden",
+    "config-invalid-db-server-oracle": "Ungültiges Datenbank-TNS „$1“.\nEntweder „TNS Name“ oder eine „Easy Connect“-Zeichenfolge verwenden ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle-Benennungsmethoden])",
+    "config-invalid-db-name": "Ungültiger Datenbankname „$1“.\nEs dürfen nur ASCII-codierte Buchstaben (a-z, A-Z), Zahlen (0-9), Unter- (_) sowie Bindestriche (-) verwendet werden.",
+    "config-invalid-db-prefix": "Ungültiger Datenbanktabellenpräfix „$1“.\nEs dürfen nur ASCII-codierte Buchstaben (a-z, A-Z), Zahlen (0-9), Unter- (_) sowie Bindestriche (-) verwendet werden.",
+    "config-connection-error": "$1.\n\nBitte unten angegebenen Servernamen, Benutzernamen sowie das Passwort überprüfen und es danach erneut versuchen.",
+    "config-invalid-schema": "Ungültiges Datenschema für MediaWiki „$1“.\nEs dürfen nur ASCII-codierte Buchstaben (a-z, A-Z), Zahlen (0-9) und Unterstriche (_) verwendet werden.",
+    "config-db-sys-create-oracle": "Das Installationsprogramm unterstützt nur die Verwendung eines Datenbankbenutzerkontos mit SYSDBA-Berechtigung zum Anlegen eines neuen Datenbankbenutzerkontos.",
+    "config-db-sys-user-exists-oracle": "Das Datenbankbenutzerkonto „$1“ ist bereits vorhanden. Ein Datenbankbenutzerkontos mit SYSDBA-Berechtigung kann nur zum Anlegen eines neuen Datenbankbenutzerkontos genutzt werden.",
+    "config-postgres-old": "PostgreSQL $1 oder höher wird benötigt. PostgreSQL $2 ist momentan vorhanden.",
+    "config-sqlite-name-help": "Bitten einen Namen angeben, mit dem das Wiki identifiziert werden kann.\nDabei bitte keine Leerzeichen oder Bindestriche verwenden.\nDieser Name wird für die SQLite-Datendateinamen genutzt.",
+    "config-sqlite-parent-unwritable-group": "Das Datenverzeichnis <code><nowiki>$1</nowiki></code> kann nicht erzeugt werden, da das übergeordnete Verzeichnis <code><nowiki>$2</nowiki></code> nicht für den Webserver beschreibbar ist.\n\nDas Installationsprogramm konnte den Benutzer bestimmen, mit dem Webserver ausgeführt wird.\nSchreibzugriff auf das <code><nowiki>$3</nowiki></code>-Verzeichnis muss für diesen ermöglicht werden, um den Installationsvorgang fortsetzen zu können.\n\nAuf einem Unix- oder Linux-System:\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Das Datenverzeichnis <code><nowiki>$1</nowiki></code> kann nicht erzeugt werden, da das übergeordnete Verzeichnis <code><nowiki>$2</nowiki></code> nicht für den Webserver beschreibbar ist.\n\nDas Installationsprogramm konnte den Benutzer bestimmen, mit dem Webserver ausgeführt wird.\nSchreibzugriff auf das <code><nowiki>$3</nowiki></code>-Verzeichnis muss global für diesen und andere Benutzer ermöglicht werden, um den Installationsvorgang fortsetzen zu können.\n\nAuf einem Unix- oder Linux-System:\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Fehler beim Erstellen des Datenverzeichnisses „$1“.\n\nBitte den Speicherort überprüfen und es danach erneut versuchen.",
+    "config-sqlite-dir-unwritable": "Das Verzeichnis „$1“  ist nicht beschreibbar.\nBitte die Zugriffsberechtigungen so ändern, dass dieses Verzeichnis für den Webserver beschreibbar ist und es danach erneut versuchen.",
+    "config-sqlite-connection-error": "$1.\n\nBitte unten angegebenes Datenverzeichnis sowie den Datenbanknamen überprüfen und es danach erneut versuchen.",
+    "config-sqlite-readonly": "Die Datei <code>$1</code> ist nicht beschreibbar.",
+    "config-sqlite-cant-create-db": "Die Datenbankdatei <code>$1</code> konnte nicht erzeugt werden.",
+    "config-sqlite-fts3-downgrade": "PHP verfügt nicht über FTS3-Unterstützung. Die Tabellen wurden zurückgestuft.",
+    "config-can-upgrade": "Es wurden MediaWiki-Tabellen in dieser Datenbank gefunden.\nUm sie auf MediaWiki $1 zu aktualisieren, bitte auf '''Weiter''' klicken.",
+    "config-upgrade-done": "Die Aktualisierung ist nun abgeschlossen.\n\nDas Wiki kann nun [$1 genutzt werden].\n\nSofern die Datei <code>LocalSettings.php</code> neu erzeugt werden soll, bitte auf die Schaltfläche unten klicken.\nDies wird '''nicht empfohlen''', es sei denn, es treten Probleme mit dem Wiki auf.",
+    "config-upgrade-done-no-regenerate": "Die Aktualisierung ist abgeschlossen.\n\nDas Wiki kann nun [$1 genutzt werden].",
+    "config-regenerate": "LocalSettings.php neu erstellen →",
+    "config-show-table-status": "Die Abfrage <code>SHOW TABLE STATUS</code> ist gescheitert!",
+    "config-unknown-collation": "'''Warnung:''' Die Datenbank nutzt eine unbekannte Kollation.",
+    "config-db-web-account": "Datenbankkonto für den Webzugriff",
+    "config-db-web-help": "Bitte Benutzernamen und Passwort auswählen, die der Webserver während des Normalbetriebes dazu verwenden soll, eine Verbindung zum Datenbankserver herzustellen.",
+    "config-db-web-account-same": "Dasselbe Datenbankkonto wie während des Installationsvorgangs verwenden",
+    "config-db-web-create": "Sofern nicht bereits vorhanden, muss nun das Konto erstellt werden",
+    "config-db-web-no-create-privs": "Das angegebene und für den Installationsvorgang vorgesehene Datenbankkonto verfügt nicht über ausreichend Berechtigungen, um ein weiteres Datenbankkonto zu erstellen.\nDas hier angegebene Datenbankkonto muss daher bereits vorhanden sein.",
+    "config-mysql-engine": "Speicher-Engine:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Warnung:''' Es wurde MyISAM als Speicher-Engine für MySQL ausgewählt, die aus folgenden Gründen nicht für den Einsatz mit MediaWiki empfohlen ist:\n* Sie unterstützt aufgrund von Tabellensperrungen kaum die nebenläufige Ausführung von Aktionen.\n* Sie ist anfälliger für Datenprobleme.\n* Sie wird von MediaWiki nicht immer adäquat unterstützt.\n\nSofern die vorhandene MySQL-Installation die Speicher-Engine InnoDB unterstützt, wird deren Verwendung eindringlich empfohlen.\nSofern sie sie nicht unterstützt, sollte eine entsprechende Aktualisierung nunmehr Erwägung gezogen werden.",
+    "config-mysql-only-myisam-dep": "'''Warnung:''' MyISAM ist die einzige verfügbare Speicher-Engine für MySQL, die nicht für die Verwendung mit MediaWiki empfohlen wird, da sie\n* aufgrund von Tabellensperrungen kaum die nebenläufige Ausführung von Aktionen unterstützt,\n* anfälliger für Datenprobleme ist und\n* von MediaWiki nicht immer adäquat unterstützt wird.\n\nDeine MySQL-Installation unterstützt nicht InnoDB. Eventuell muss eine Aktualisierung durchgeführt werden.",
+    "config-mysql-engine-help": "'''InnoDB''' ist fast immer die bessere Wahl, da es gleichzeitige Zugriffe gut unterstützt.\n\n'''MyISAM''' ist in Einzelnutzerumgebungen sowie bei schreibgeschützten Wikis schneller.\nBei MyISAM-Datenbanken treten tendenziell häufiger Fehler auf als bei InnoDB-Datenbanken.",
+    "config-mysql-charset": "Datenbankzeichensatz:",
+    "config-mysql-binary": "binär",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "Im '''binären Modus''' speichert MediaWiki UTF-8 Texte in der Datenbank in binär kodierte Datenfelder.\nDies ist effizienter als der UTF-8-Modus von MySQL und ermöglicht so die Verwendung jeglicher Unicode-Zeichen.\n\nIm '''UTF-8-Modus''' wird MySQL den Zeichensatz der Daten erkennen und sie richtig anzeigen und konvertieren,\nallerdings können keine Zeichen außerhalb des [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke ''Basic Multilingual Plane'' (BMP)] gespeichert werden.",
+    "config-site-name": "Name des Wikis:",
+    "config-site-name-help": "Er wird in der Titelleiste des Browsers, wie auch verschiedenen anderen Stellen, genutzt.",
+    "config-site-name-blank": "Den Namen des Wikis angeben.",
+    "config-project-namespace": "Name des Projektnamensraums:",
+    "config-ns-generic": "Projekt",
+    "config-ns-site-name": "Entspricht dem Namen des Wikis: $1",
+    "config-ns-other": "Anderer Name (bitte angeben)",
+    "config-ns-other-default": "MeinWiki",
+    "config-project-namespace-help": "Dem Beispiel von Wikipedia folgend, unterscheiden viele Wikis zwischen den Seiten für Inhalte und denen für Richtlinien. Letztere werden im „'''Projektnamensraum'''“ hinterlegt.\nAlle Seiten dieses Namensraumes verfügen über einen Seitenpräfix, der nun an dieser Stelle angegeben werden kann.\nTraditionell steht dieser Seitenpräfix mit dem Namen des Wikis in einem engen Zusammenhang. Dabei können bestimmte Sonderzeichen wie „#“ oder „:“ nicht verwendet werden.",
+    "config-ns-invalid": "Der angegebene Namensraum „<nowiki>$1</nowiki>“ ist ungültig.\nBitte einen abweichenden Projektnamensraum angeben.",
+    "config-ns-conflict": "Der angegebene Namensraum „<nowiki>$1</nowiki>“ verursacht Problem mit dem Standardnamensraum von MediaWiki.\nBitte einen abweichenden Projektnamensraum angeben.",
+    "config-admin-box": "Administratorkonto",
+    "config-admin-name": "Name:",
+    "config-admin-password": "Passwort:",
+    "config-admin-password-confirm": "Passwort wiederholen:",
+    "config-admin-help": "Bitte den bevorzugten Benutzernamen angeben, beispielsweise „Knut Wuchtig“.\nDies ist der Name, der benötigt wird, um sich im Wiki anzumelden.",
+    "config-admin-name-blank": "Bitte den Benutzernamen für den Administratoren angeben.",
+    "config-admin-name-invalid": "Der angegebene Benutzername „<nowiki>$1</nowiki>“ ist ungültig.\nBitte einen abweichenden Benutzernamen angeben.",
+    "config-admin-password-blank": "Bitte das Passwort für das Administratorkonto angeben.",
+    "config-admin-password-same": "Das Passwort darf nicht mit dem Benutzernamen übereinstimmen.",
+    "config-admin-password-mismatch": "Die beiden Passwörter stimmen nicht überein.",
+    "config-admin-email": "E-Mail-Adresse:",
+    "config-admin-email-help": "Bitte hier eine E-Mail-Adresse angeben, die den E-Mail-Empfang von anderen Benutzern des Wikis, das Zurücksetzen des Passwortes sowie Benachrichtigungen zu Änderungen an beobachteten Seiten ermöglicht. Diese Feld kann leer gelassen werden.",
+    "config-admin-error-user": "Es ist beim Erstellen des Administrators mit dem Namen „<nowiki>$1</nowiki>“ ein interner Fehler aufgetreten.",
+    "config-admin-error-password": "Es ist beim Setzen des Passworts für den Administrator „<nowiki>$1</nowiki>“ ein interner Fehler aufgetreten: <pre>$2</pre>",
+    "config-admin-error-bademail": "Es wurde eine ungültige E-Mail-Adresse angegeben",
+    "config-subscribe": "Bitte die Mailingliste [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mitteilungen zu Versionsveröffentlichungen] abonnieren.",
+    "config-subscribe-help": "Es handelt sich hierbei um eine Mailingliste mit wenigen Aussendungen, die für Mitteilungen zu Versionsveröffentlichungen, einschließlich wichtiger Sicherheitsveröffentlichungen, genutzt wird.\nDiese Mailingliste sollte abonniert werden. Zudem sollte die MediaWiki-Installation stets aktualisiert werden, sobald eine neue Programmversion veröffentlicht wurde.",
+    "config-subscribe-noemail": "Beim Abonnieren der Mailingliste mit Mitteilungen zu Versionsveröffentlichungen wurde keine E-Mail-Adresse angegeben.\nBitte eine E-Mail-Adresse angeben, sofern die Mailingliste abonniert werden soll.",
+    "config-almost-done": "Der Vorgang ist fast abgeschlossen!\nDie verbleibenden Konfigurationseinstellungen können übersprungen und das Wiki umgehend installiert werden.",
+    "config-optional-continue": "Ja, es sollen weitere Konfigurationseinstellungen vorgenommen werden.",
+    "config-optional-skip": "Nein, das Wiki soll nun installiert werden.",
+    "config-profile": "Profil der Benutzerberechtigungen:",
+    "config-profile-wiki": "offenes Wiki",
+    "config-profile-no-anon": "Erstellung eines Benutzerkontos erforderlich",
+    "config-profile-fishbowl": "ausschließlich berechtigte Bearbeiter",
+    "config-profile-private": "geschlossenes Wiki",
+    "config-profile-help": "Wikis sind am nützlichsten, wenn so viele Menschen als möglich Bearbeitungen vornehmen können.\nMit MediaWiki ist es einfach die letzten Änderungen nachzuvollziehen und unbrauchbare Bearbeitungen, beispielsweise von unbedarften oder böswilligen Benutzern, rückgängig zu machen.\n\nAllerdings 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.\n\nDas Modell „'''{{int:config-profile-wiki}}'''“ ermöglicht es jedermann, sogar ohne über ein Benutzerkonto zu verfügen, Bearbeitungen vorzunehmen.\nEin 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.\n\nKomplexere 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].",
+    "config-license": "Lizenz:",
+    "config-license-none": "Keine Lizenzangabe in der Fußzeile",
+    "config-license-cc-by-sa": "Creative Commons „Namensnennung, Weitergabe unter gleichen Bedingungen“",
+    "config-license-cc-by": "Creative Commons „Namensnennung“",
+    "config-license-cc-by-nc-sa": "Creative Commons „Namensnennung, nicht kommerziell, Weitergabe unter gleichen Bedingungen“",
+    "config-license-cc-0": "Creative Commons „Zero“ (Gemeinfreiheit)",
+    "config-license-gfdl": "GNU-Lizenz für freie Dokumentation 1.3 oder höher",
+    "config-license-pd": "Gemeinfreiheit",
+    "config-license-cc-choose": "Eine benutzerdefinierte Creative-Commons-Lizenz auswählen",
+    "config-license-help": "Viele öffentliche Wikis publizieren alle Beiträge unter einer [http://freedomdefined.org/Definition/De freien Lizenz].\nDies trägt dazu bei ein Gefühl von Gemeinschaft zu schaffen und ermutigt zu längerfristiger Mitarbeit.\nDahingegen ist im Allgemeinen eine freie Lizenz auf geschlossenen Wikis nicht notwendig.\n\nSofern man Texte aus der Wikipedia verwenden möchte und umgekehrt, sollte die Creative Commons-Lizenz „Namensnennung, Weitergabe unter gleichen Bedingungen“ gewählt werden.\n\nDie Wikipedia nutzte vormals die GNU-Lizenz für freie Dokumentation (GFDL).\nDie GFDL ist eine gültige Lizenz, die allerdings schwer zu verstehen ist.\nEs ist zudem schwierig gemäß dieser Lizenz lizenzierte Inhalten wiederzuverwenden.",
+    "config-email-settings": "E-Mail-Einstellungen",
+    "config-enable-email": "Ausgehende E-Mails ermöglichen",
+    "config-enable-email-help": "Sofern die E-Mail-Funktionen genutzt werden sollen, müssen die entsprechenden [http://www.php.net/manual/en/mail.configuration.php PHP-E-Mail-Einstellungen] richtig konfiguriert werden.\nFür den Fall, dass die E-Mail-Funktionen nicht benötigt werden, können sie hier deaktiviert werden.",
+    "config-email-user": "E-Mail-Versand von Benutzer zu Benutzer aktivieren",
+    "config-email-user-help": "Allen Benutzern ermöglichen, sich gegenseitig E-Mails zu schicken, sofern sie es in ihren Einstellungen aktiviert haben.",
+    "config-email-usertalk": "Benachrichtigungen zu Änderungen an Benutzerdiskussionsseiten ermöglichen",
+    "config-email-usertalk-help": "Ermöglicht es Benutzern, Benachrichtigungen zu Änderungen an ihren Benutzerdiskussionsseiten zu erhalten, sofern sie dies in ihren Einstellungen aktiviert haben.",
+    "config-email-watchlist": "Benachrichtigungen zu Änderungen an Seiten auf der Beobachtungsliste ermöglichen",
+    "config-email-watchlist-help": "Ermöglicht es Benutzern, Benachrichtigungen zu Änderungen an Seiten auf ihrer Beobachtungsliste zu erhalten, sofern sie dies in ihren Einstellungen aktiviert haben.",
+    "config-email-auth": "E-Mail-Authentifizierung ermöglichen",
+    "config-email-auth-help": "Sofern diese Funktion aktiviert ist, müssen Benutzer ihre E-Mail-Adresse bestätigen, indem sie den Bestätigungslink nutzen, der ihnen immer dann zugesandt wird, wenn sie ihre E-Mail-Adresse angeben oder ändern.\nNur bestätigte E-Mail-Adressen können Nachrichten von anderen Benutzer oder Benachrichtigungsmitteilungen erhalten.\nDie Aktivierung dieser Funktion wird bei offenen Wikis, mit Hinblick auf möglichen Missbrauch der E-Mail-Funktionen, '''empfohlen.'''",
+    "config-email-sender": "E-Mail-Adresse für Antworten:",
+    "config-email-sender-help": "Bitte hier die E-Mail-Adresse angeben, die als Absenderadresse bei ausgehenden E-Mails eingesetzt werden soll.\nRücklaufende E-Mails werden an diese E-Mail-Adresse gesandt.\nBei vielen E-Mail-Servern muss der Teil der E-Mail-Adresse mit der Domainangabe korrekt sein.",
+    "config-upload-settings": "Hochladen von Bildern und Dateien",
+    "config-upload-enable": "Das Hochladen von Dateien ermöglichen",
+    "config-upload-help": "Das Hochladen von Dateien macht den Server für potentielle Sicherheitsprobleme anfällig.\nWeitere Informationen hierzu können im [//www.mediawiki.org/wiki/Manual:Security Abschnitt Sicherheit] der Anleitung nachgelesen werden.\n\nUm das Hochladen von Dateien zu ermöglichen, muss der Zugriff auf das Unterverzeichnis <code>./images</code> so geändert werden, das dieses für den Webserver beschreibbar ist.\nHernach kann diese Option aktiviert werden.",
+    "config-upload-deleted": "Verzeichnis für gelöschte Dateien:",
+    "config-upload-deleted-help": "Bitte ein Verzeichnis auswählen, in dem gelöschte Dateien archiviert werden sollen.\nIdealerweise sollte es nicht über das Internet zugänglich sein.",
+    "config-logo": "URL des Logos:",
+    "config-logo-help": "Die Standardoberfläche von MediaWiki verfügt links oberhalb der Seitenleiste über Platz für ein Logo mit den Maßen 135x160 Pixel.\nBitte ein Logo in entsprechender Größe hochladen und die zugehörige URL an dieser Stelle angeben.\n\nDu kannst <code>$wgStylePath</code> oder <code>$wgScriptPath</code> verwenden, falls dein Logo relativ zu diesen Pfaden ist.\n\nSofern kein Logo benötigt wird, kann dieses Datenfeld leer bleiben.",
+    "config-instantcommons": "„InstantCommons“ aktivieren",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons InstantCommons] ist eine Funktion, die es Wikis ermöglicht, Bild-, Klang- und andere Mediendateien zu nutzen, die auf der Website [//commons.wikimedia.org/ Wikimedia Commons] verfügbar sind.\nUm diese Funktion nutzen zu können, muss das Wiki über eine Verbindung zum Internet verfügen.\n\nWeitere Informationen zu dieser Funktion, einschließlich der Anleitung, wie hierfür andere Wikis als Wikimedia Commons eingerichtet werden können, gibt es im [//mediawiki.org/wiki/Manual:$wgForeignFileRepos Handbuch].",
+    "config-cc-error": "Der Creativ-Commons-Lizenzassistent konnte keine Lizenz ermitteln.\nDie Lizenz ist daher jetzt manuell einzugeben.",
+    "config-cc-again": "Erneut auswählen …",
+    "config-cc-not-chosen": "Die gewünschte Creative-Commons-Lizenz auswählen und dann auf „weiter“ klicken.",
+    "config-advanced-settings": "Erweiterte Konfiguration",
+    "config-cache-options": "Einstellungen für die Zwischenspeicherung von Objekten:",
+    "config-cache-help": "Das Objektcaching wird dazu genutzt die Geschwindigkeit von MediaWiki zu verbessern, indem häufig genutzte Daten zwischengespeichert werden.\nEs wird sehr empfohlen es für mittelgroße bis große Wikis zu nutzen, aber auch für kleine Wikis ergeben sich erkennbare Geschwindigkeitsverbesserungen.",
+    "config-cache-none": "Kein Objektcaching (es wird keine Funktion entfernt, allerdings kann dies die Geschwindigkeit größerer Wikis negativ beeinflussen)",
+    "config-cache-accel": "Objektcaching von PHP (APC, XCache oder WinCache)",
+    "config-cache-memcached": "Memcached Cacheserver nutzen (erfordert einen zusätzlichen Installationsvorgang mitsamt Konfiguration)",
+    "config-memcached-servers": "Memcached Cacheserver",
+    "config-memcached-help": "Liste der für Memcached nutzbaren IP-Adressen.\nEs sollte eine je Zeile mitsamt des vorgesehenen Ports angegeben werden. Beispiele:\n127.0.0.1:11211 oder\n192.168.1.25:1234 usw.",
+    "config-memcache-needservers": "Memcached wurde als Cacheserver ausgewählt. Dabei wurde allerdings kein Server angegeben.",
+    "config-memcache-badip": "Es wurde für Memcached eine ungültige IP-Adresse angegeben: $1",
+    "config-memcache-noport": "Es wurde kein Port zur Nutzung durch den Memcached Cacheserver angegeben: $1\nSofern der Port unbekannt ist, ist 11211 die Standardangabe.",
+    "config-memcache-badport": "Der Ports für den Memcached Cacheserver sollten zwischen $1 und $2 liegen",
+    "config-extensions": "Erweiterungen",
+    "config-extensions-help": "Die obig angegebenen Erweiterungen wurden im Verzeichnis <code>./extensions</code> gefunden.\n\nEs könnten zusätzliche Konfigurierungen zu einzelnen Erweiterungen erforderlich sein, dennoch können sie aber bereits jetzt aktiviert werden.",
+    "config-install-alreadydone": "'''Warnung:''' Es wurde eine vorhandene MediaWiki-Installation gefunden.\nEs 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.\nSofern Ä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",
+    "config-install-database": "Datenbank wird eingerichtet",
+    "config-install-schema": "Datenschema wird erstellt",
+    "config-install-pg-schema-not-exist": "Das PostgesSQL-Datenschema ist nicht vorhanden",
+    "config-install-pg-schema-failed": "Das Erstellen der Datentabellen ist gescheitert.\nEs muss sichergestellt sein, dass der Benutzer „$1“ Schreibzugriff auf das Datenschema „$2“ hat.",
+    "config-install-pg-commit": "Änderungen anwenden",
+    "config-install-pg-plpgsql": "Suche nach der Datenbanksprache PL/pgSQL",
+    "config-pg-no-plpgsql": "Für Datenbank $1 muss die Datenbanksprache PL/pgSQL installiert werden",
+    "config-pg-no-create-privs": "Das für die Installation angegeben Konto verfügt nicht über ausreichende Berechtigungen, um ein Datenbanknutzerkonto zu erstellen.",
+    "config-pg-not-in-role": "Das für den Webbenutzer angegebene Benutzerkonto ist bereits vorhanden.\nDas für den Installationsvorgang angegebene Benutzerkonto ist kein Superbenutzer und nicht Mitglied der Benutzergruppe der Webbenutzer, so dass keine dem Webbenutzer zugeordneten Datenobjekte erstellt werden können.\n\nFür MediaWiki ist es momentan erforderlich, dass die Tabellen dem Webbenutzer rechtemäßig zugeordnet sind. Bitte einen anderen Namen für den Wikibenutzer angeben oder „← Zurück“ anklicken, um einen ausreichend berechtigten Benutzer für den Installationsvorgang anzugeben.",
+    "config-install-user": "Datenbankbenutzer wird erstellt",
+    "config-install-user-alreadyexists": "Datenbankbenutzer „$1“ ist bereits vorhanden",
+    "config-install-user-create-failed": "Das Anlegen des Datenbankbenutzers „$1“ ist gescheitert: $2",
+    "config-install-user-grant-failed": "Die Gewährung der Berechtigung für Datenbankbenutzer „$1“ ist gescheitert: $2",
+    "config-install-user-missing": "Der angegebene Benutzer „$1“ ist nicht vorhanden.",
+    "config-install-user-missing-create": "Der angegebene Benutzer „$1“ ist nicht vorhanden.\nBitte das Auswahlkästchen „Benutzerkonto erstellen“ anklicken, sofern dieser erstellt werden soll.",
+    "config-install-tables": "Datentabellen werden erstellt",
+    "config-install-tables-exist": "'''Warnung:''' Es wurden MediaWiki-Datentabellen gefunden.\nDie Erstellung wurde übersprungen.",
+    "config-install-tables-failed": "'''Fehler:''' Die Erstellung der Datentabellen ist aufgrund des folgenden Fehlers gescheitert: $1",
+    "config-install-interwiki": "Interwikitabellen werden eingerichtet",
+    "config-install-interwiki-list": "Die Datei <code>interwiki.list</code> konnte nicht gelesen werden.",
+    "config-install-interwiki-exists": "'''Warnung:'''  Es wurden Interwikitabellen mit Daten gefunden.\nDie Standardliste wird übersprungen.",
+    "config-install-stats": "Statistiken werden initialisiert",
+    "config-install-keys": "Geheimschlüssel werden erstellt",
+    "config-insecure-keys": "'''Warnung:''' {{PLURAL:$2|Der Geheimschlüssel|Die Geheimschlüssel}} $1, {{PLURAL:$2|der|die}} während des Installationsvorgangs generiert {{PLURAL:$2|wurde, ist|wurden, sind}} nicht sehr sicher. {{PLURAL:$2|Er sollte|Sie sollten}} manuell geändert werden.",
+    "config-install-sysop": "Administratorkonto wird erstellt",
+    "config-install-subscribe-fail": "Abonnieren von „mediawiki-announce“ ist gescheitert: $1",
+    "config-install-subscribe-notpossible": "cURL ist nicht installiert und allow_url_fopen ist nicht verfügbar.",
+    "config-install-mainpage": "Erstellung der Hauptseite mit Standardinhalten",
+    "config-install-extension-tables": "Erstellung der Tabellen für die aktivierten Erweiterungen",
+    "config-install-mainpage-failed": "Die Hauptseite konnte nicht erstellt werden: $1",
+    "config-install-done": "'''Herzlichen Glückwunsch!'''\nMediaWiki wurde erfolgreich installiert.\n\nDas Installationsprogramm hat die Datei <code>LocalSettings.php</code> erzeugt.\nSie enthält alle vorgenommenen Konfigurationseinstellungen.\n\nDiese Datei muss nun heruntergeladen und anschließend in das Stammverzeichnis der MediaWiki-Installation hochgeladen werden. Dies ist dasselbe Verzeichnis, in dem sich auch die Datei <code>index.php</code> befindet. Das Herunterladen sollte inzwischen automatisch gestartet worden sein.\n\nSofern dies nicht der Fall war, oder das Herunterladen unterbrochen wurde, kann der Vorgang durch einen Klick auf den folgenden Link erneut gestartet werden:\n\n$3\n\n'''Hinweis:''' Die Konfigurationsdatei sollte jetzt unbedingt heruntergeladen werden. Sie wird nach Beenden des Installationsprogramms, nicht mehr zur Verfügung stehen.\n\nSobald alles erledigt wurde, kann auf das '''[$2 Wiki zugegriffen werden]'''. Wir wünschen viel Spaß und Erfolg mit dem Wiki.",
+    "config-download-localsettings": "<code>LocalSettings.php</code> herunterladen",
+    "config-help": "Hilfe",
+    "config-nofile": "Die Datei „$1“ konnte nicht gefunden werden. Wurde sie gelöscht?",
+    "config-extension-link": "Wusstest du, dass dein Wiki [//www.mediawiki.org/wiki/Manual:Extensions Erweiterungen] unterstützt?\n\nDu kannst [//www.mediawiki.org/wiki/Category:Extensions_by_category Erweiterungen nach Kategorie] durchsuchen oder die [//www.mediawiki.org/wiki/Extension_Matrix Erweiterungstabelle] ansehen, um eine volle Erweiterungsliste zu erhalten.",
+    "mainpagetext": "'''MediaWiki wurde erfolgreich installiert.'''",
+    "mainpagedocfooter": "Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [//meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch].\n\n== Starthilfen ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Lokalisiere MediaWiki für deine Sprache]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/diq.json b/includes/installer/i18n/diq.json
new file mode 100644 (file)
index 0000000..78daf1d
--- /dev/null
@@ -0,0 +1,53 @@
+{
+    "@metadata": {
+        "authors": [
+            "Erdemaslancan",
+            "Mirzali"
+        ]
+    },
+    "config-title": "MediaWiki $1 sazkerdış",
+    "config-information": "Melumat",
+    "config-your-language": "Zıwanê şıma:",
+    "config-wiki-language": "Wiki zıwan:",
+    "config-back": "← Peyser",
+    "config-continue": "Dewam ke",
+    "config-page-language": "Zıwan",
+    "config-page-welcome": "Şıma xeyr ameyê MediaWiki!",
+    "config-page-dbconnect": "Database rê grêdey",
+    "config-page-name": "Name",
+    "config-page-options": "Weçinegi",
+    "config-page-install": "Barine",
+    "config-page-complete": "Temamyayo",
+    "config-page-readme": "Mı bıwane",
+    "config-page-copying": "Kopyayeno",
+    "config-page-upgradedoc": "Berzkerdış",
+    "config-restart": "E, fına dest pekê",
+    "config-sidebar": "* [//www.mediawiki.org MediaWiki keye]\n* [//www.mediawiki.org/wiki/Help:Contents User's Şınasiye]\n* [//www.mediawiki.org/wiki/Manual:Contents Xizmetkara şınasiye]\n* [//www.mediawiki.org/wiki/Manual:FAQ Peşti]\n----\n* <doclink href=Readme>Mı buwanê</doclink>\n* <doclink href=ReleaseNotes>Notê elekeyıni</doclink>\n* <doclink href=Copying>Telifiye</doclink>\n* <doclink href=UpgradeDoc>Weşkerdış</doclink>",
+    "config-env-php": "PHP $1 i biyo saz.",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 dılet",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-db-port": "Portê database:",
+    "config-header-mysql": "Sazkardışê MySQL",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-binary": "Dılet",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Namey wiki:",
+    "config-ns-generic": "Proce",
+    "config-ns-other": "Zewbi (keyfiyo)",
+    "config-ns-other-default": "MyWiki",
+    "config-admin-box": "Hesabê Administratori",
+    "config-admin-name": "Namey şıma:",
+    "config-admin-password": "Parola:",
+    "config-admin-password-confirm": "Fına parola:",
+    "config-admin-email": "Adresa e-postey:",
+    "config-profile-private": "Bexse wiki",
+    "config-license-cc-by-sa": "Creative Commons Attribution Share Alike",
+    "config-license-cc-by": "Creative Commons Attribution",
+    "config-license-cc-by-nc-sa": "Creative Commons Attribution Non-Commercial Share Alike",
+    "config-license-pd": "Malê Şari",
+    "config-extensions": "Olekeni",
+    "config-help": "peşti",
+    "mainpagetext": "'''MediaWiki vıst ra ser, vıraziya.'''",
+    "mainpagedocfooter": "Seba gurenayış u eyarkerdışê Wiki-Softwarey [//meta.wikimedia.org/wiki/Help:Contents İdarê karberi] de mıracaet ke.\n\n== Yardımê Sıftekerdışi ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista eyaranê vıraştışi]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki de ÇZP]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki ra lista serbest-dayışê postey]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/dsb.json b/includes/installer/i18n/dsb.json
new file mode 100644 (file)
index 0000000..da8bd44
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Michawiki"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki jo se wuspěšnje instalěrowało.'''",
+    "mainpagedocfooter": "Pomoc pśi wužywanju softwary wiki namakajoš pód [//meta.wikimedia.org/wiki/Help:Contents User's Guide].\n\nPomoc pśi wužywanju softwary wiki namakajoš pód [//meta.wikimedia.org/wiki/Help:Contents User's Guide].\n\n== Na zachopjenje ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfiguracija lisćiny połoženjow]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ (pšašanja a wótegrona)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lisćina e-mailowych nakładow MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki za twóju rěc lokalizěrowaś]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/dtp.json b/includes/installer/i18n/dtp.json
new file mode 100644 (file)
index 0000000..2280a90
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "FRANELYA"
+        ]
+    },
+    "mainpagetext": "'''Nopongo no do popodokot ot ModiaWiki.'''",
+    "mainpagedocfooter": "Rujuko hilo [//meta.wikimedia.org/wiki/Help:Contents Ponudukan Momomoguno] kokomoi koilaan do momoguno posusuang-suangon wiki.\n\n== Kopotimpuunan ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lis papatantu nuludan]\n* [//www.mediawiki.org/wiki/Manual:FAQ Ponguhatan Koinsoruan om Simbar ModiaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lis pininsuratan pinolabus do ModiaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/el.json b/includes/installer/i18n/el.json
new file mode 100644 (file)
index 0000000..c88b749
--- /dev/null
@@ -0,0 +1,68 @@
+{
+    "@metadata": {
+        "authors": [
+            "Glavkos",
+            "Protnet",
+            "ZaDiak"
+        ]
+    },
+    "config-desc": "Το πρόγραμμα εγκατάστασης για το MediaWiki",
+    "config-title": "Εγκατάσταση MediaWiki $1",
+    "config-information": "Πληροφορίες",
+    "config-your-language": "Η γλώσσα σας:",
+    "config-wiki-language": "Γλώσσα του wiki:",
+    "config-back": "← Πίσω",
+    "config-continue": "Συνέχεια →",
+    "config-page-language": "Γλώσσα",
+    "config-page-welcome": "Καλώς ήλθατε στο MediaWiki!",
+    "config-page-name": "Όνομα",
+    "config-page-options": "Επιλογές",
+    "config-page-install": "Εγκατάσταση",
+    "config-page-complete": "Ολοκληρώθηκε!",
+    "config-page-restart": "Επανεκκίνηση εγκατάστασης",
+    "config-page-copying": "Αντιγραφή",
+    "config-page-upgradedoc": "Αναβάθμιση",
+    "config-page-existingwiki": "Υπάρχον βίκι",
+    "config-restart": "Ναι, κάντε επανεκκίνηση",
+    "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-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",
+    "config-header-oracle": "Ρυθμίσεις Oracle",
+    "config-invalid-db-type": "Μη έγκυρος τύπος βάσης δεδομένων",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Όνομα του βίκι:",
+    "config-site-name-blank": "Εισαγάγετε όνομα ιστοχώρου.",
+    "config-project-namespace": "Ονοματοχώρος εγχειρήματος:",
+    "config-ns-generic": "Εγχείρημα",
+    "config-ns-site-name": "Ίδιο με το όνομα του wiki: $1",
+    "config-ns-other": "Άλλο (προσδιορίστε)",
+    "config-admin-box": "Λογαριασμός διαχειριστή",
+    "config-admin-name": "Το όνομά σας:",
+    "config-admin-password": "Κωδικός πρόσβασης:",
+    "config-admin-password-confirm": "Επανάληψη κωδικού πρόσβασης:",
+    "config-admin-email": "Διεύθυνση ηλεκτρονικού ταχυδρομείου:",
+    "config-optional-continue": "Να ερωτηθώ περισσότερες ερωτήσεις.",
+    "config-profile-wiki": "Παραδοσιακό wiki",
+    "config-profile-no-anon": "Απαιτείται η δημιουργία λογαριασμού",
+    "config-profile-private": "Ιδιωτικό wiki",
+    "config-email-settings": "Ρυθμίσεις ηλεκτρονικού ταχυδρομείου",
+    "config-upload-settings": "Ανέβασμα εικόνων και άλλων αρχείων",
+    "config-upload-enable": "Ενεργοποιήστε το ανέβασμα αρχείων",
+    "config-logo": "Διεύθυνση URL λογότυπου:",
+    "config-cc-again": "Επιλέξτε ξανά...",
+    "config-extensions": "Επεκτάσεις",
+    "config-install-step-done": "έγινε",
+    "config-install-step-failed": "απέτυχε",
+    "config-help": "βοήθεια",
+    "mainpagetext": "'''To λογισμικό MediaWiki εγκαταστάθηκε με επιτυχία.'''",
+    "mainpagedocfooter": "Περισσότερες πληροφορίες σχετικά με τη χρήση και με τη ρύθμιση παραμέτρων θα βρείτε στους συνδέσμους: [//meta.wikimedia.org/wiki/MediaWiki_localisation Οδηγίες για τροποποίηση του περιβάλλοντος εργασίας] και [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Εγχειρίδιο χρήστη]."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/en-gb.json b/includes/installer/i18n/en-gb.json
new file mode 100644 (file)
index 0000000..2f836ca
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "Shirayuki"
+        ]
+    },
+    "config-unicode-using-utf8": "Using Brion Vibber's utf8_normalize.so for Unicode normalisation.",
+    "config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalisation.",
+    "config-unicode-pure-php-warning": "'''Warning:''' The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalisation, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode normalisation].",
+    "config-unicode-update-warning": "'''Warning:''' The installed version of the Unicode normalisation wrapper uses an older version of [http://site.icu-project.org/ the ICU project's] library.\nYou should [//www.mediawiki.org/wiki/Unicode_normalization_considerations upgrade] if you are at all concerned about using Unicode.",
+    "config-unknown-collation": "'''Warning:''' Database is using unrecognised collation.",
+    "config-profile-fishbowl": "Authorised editors only",
+    "config-install-stats": "Initialising statistics"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/en.json b/includes/installer/i18n/en.json
new file mode 100644 (file)
index 0000000..45149c5
--- /dev/null
@@ -0,0 +1,314 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "config-desc": "The installer for MediaWiki",
+    "config-title": "MediaWiki $1 installation",
+    "config-information": "Information",
+    "config-localsettings-upgrade": "A <code>LocalSettings.php</code> file has been detected.\nTo upgrade this installation, please enter the value of <code>$wgUpgradeKey</code> in the box below.\nYou will find it in <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "A <code>LocalSettings.php</code> file has been detected.\nTo upgrade this installation, please run <code>update.php</code> instead",
+    "config-localsettings-key": "Upgrade key:",
+    "config-localsettings-badkey": "The key you provided is incorrect.",
+    "config-upgrade-key-missing": "An existing installation of MediaWiki has been detected.\nTo upgrade this installation, please put the following line at the bottom of your <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "The existing <code>LocalSettings.php</code> appears to be incomplete.\nThe $1 variable is not set.\nPlease change <code>LocalSettings.php</code> so that this variable is set, and click \"{{int:Config-continue}}\".",
+    "config-localsettings-connection-error": "An error was encountered when connecting to the database using the settings specified in <code>LocalSettings.php</code>. Please fix these settings and try again.\n\n$1",
+    "config-session-error": "Error starting session: $1",
+    "config-session-expired": "Your session data seems to have expired.\nSessions are configured for a lifetime of $1.\nYou can increase this by setting <code>session.gc_maxlifetime</code> in php.ini.\nRestart the installation process.",
+    "config-no-session": "Your session data was lost!\nCheck your php.ini and make sure <code>session.save_path</code> is set to an appropriate directory.",
+    "config-your-language": "Your language:",
+    "config-your-language-help": "Select a language to use during the installation process.",
+    "config-wiki-language": "Wiki language:",
+    "config-wiki-language-help": "Select the language that the wiki will predominantly be written in.",
+    "config-back": "← Back",
+    "config-continue": "Continue →",
+    "config-page-language": "Language",
+    "config-page-welcome": "Welcome to MediaWiki!",
+    "config-page-dbconnect": "Connect to database",
+    "config-page-upgrade": "Upgrade existing installation",
+    "config-page-dbsettings": "Database settings",
+    "config-page-name": "Name",
+    "config-page-options": "Options",
+    "config-page-install": "Install",
+    "config-page-complete": "Complete!",
+    "config-page-restart": "Restart installation",
+    "config-page-readme": "Read me",
+    "config-page-releasenotes": "Release notes",
+    "config-page-copying": "Copying",
+    "config-page-upgradedoc": "Upgrading",
+    "config-page-existingwiki": "Existing wiki",
+    "config-help-restart": "Do you want to clear all saved data that you have entered and restart the installation process?",
+    "config-restart": "Yes, restart it",
+    "config-welcome": "=== Environmental checks ===\nBasic checks will now be performed to see if this environment is suitable for MediaWiki installation.\nRemember to include this information if you seek support on how to complete the installation.",
+    "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nThis 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.\n\nThis program is distributed in the hope that it will be useful, but <strong>without any warranty</strong>; without even the implied warranty of <strong>merchantability</strong> or <strong>fitness for a particular purpose</strong>.\nSee the GNU General Public License for more details.\n\nYou should have received <doclink href=Copying>a copy of the GNU General Public License</doclink> along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, or [http://www.gnu.org/copyleft/gpl.html read it online].",
+    "config-sidebar": "* [//www.mediawiki.org MediaWiki home]\n* [//www.mediawiki.org/wiki/Help:Contents User's Guide]\n* [//www.mediawiki.org/wiki/Manual:Contents Administrator's Guide]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Read me</doclink>\n* <doclink href=ReleaseNotes>Release notes</doclink>\n* <doclink href=Copying>Copying</doclink>\n* <doclink href=UpgradeDoc>Upgrading</doclink>",
+    "config-env-good": "The environment has been checked.\nYou can install MediaWiki.",
+    "config-env-bad": "The environment has been checked.\nYou cannot install MediaWiki.",
+    "config-env-php": "PHP $1 is installed.",
+    "config-env-php-toolow": "PHP $1 is installed.\nHowever, MediaWiki requires PHP $2 or higher.",
+    "config-unicode-using-utf8": "Using Brion Vibber's utf8_normalize.so for Unicode normalization.",
+    "config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalization.",
+    "config-unicode-pure-php-warning": "<strong>Warning:</strong> The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalization, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode normalization].",
+    "config-unicode-update-warning": "<strong>Warning:</strong> The installed version of the Unicode normalization wrapper uses an older version of [http://site.icu-project.org/ the ICU project's] library.\nYou should [//www.mediawiki.org/wiki/Unicode_normalization_considerations upgrade] if you are at all concerned about using Unicode.",
+    "config-no-db": "Could not find a suitable database driver! You need to install a database driver for PHP.\nThe following database types are supported: $1.\n\nIf you compiled PHP yourself, reconfigure it with a database client enabled, for example, using <code>./configure --with-mysqli</code>.\nIf you installed PHP from a Debian or Ubuntu package, then you also need to install, for example, the <code>php5-mysql</code> package.",
+    "config-outdated-sqlite": "<strong>Warning:</strong> you have SQLite $1, which is lower than minimum required version $2. SQLite will be unavailable.",
+    "config-no-fts3": "<strong>Warning:</strong> SQLite is compiled without the [//sqlite.org/fts3.html FTS3 module], search features will be unavailable on this backend.",
+    "config-register-globals": "<strong>Warning: PHP's <code>[http://php.net/register_globals register_globals]</code> option is enabled.\nDisable it if you can.</strong>\nMediaWiki will work, but your server is exposed to potential security vulnerabilities.",
+    "config-magic-quotes-runtime": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is active!'</strong>\nThis option corrupts data input unpredictably.\nYou cannot install or use MediaWiki unless this option is disabled.",
+    "config-magic-quotes-sybase": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] is active!</strong>\nThis option corrupts data input unpredictably.\nYou cannot install or use MediaWiki unless this option is disabled.",
+    "config-mbstring": "<strong>Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is active!</strong>\nThis option causes errors and may corrupt data unpredictably.\nYou cannot install or use MediaWiki unless this option is disabled.",
+    "config-safe-mode": "<strong>Warning:</strong> PHP's [http://www.php.net/features.safe-mode safe mode] is active.\nIt may cause problems, particularly if using file uploads and <code>math</code> support.",
+    "config-xml-bad": "PHP's XML module is missing.\nMediaWiki requires functions in this module and will not work in this configuration.\nIf you're running Mandrake, install the php-xml package.",
+    "config-pcre-old": "<strong>Fatal:</strong> PCRE $1 or later is required.\nYour PHP binary is linked with PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE More information].",
+    "config-pcre-no-utf8": "<strong>Fatal:</strong> PHP's PCRE module seems to be compiled without PCRE_UTF8 support.\nMediaWiki requires UTF-8 support to function correctly.",
+    "config-memory-raised": "PHP's <code>memory_limit</code> is $1, raised to $2.",
+    "config-memory-bad": "<strong>Warning:</strong> PHP's <code>memory_limit</code> is $1.\nThis is probably too low.\nThe installation may fail!",
+    "config-ctype": "<strong>Fatal:</strong> PHP must be compiled with support for the [http://www.php.net/manual/en/ctype.installation.php Ctype extension].",
+    "config-json": "<strong>Fatal:</strong> PHP was compiled without JSON support.\nYou must install either the PHP JSON extension or the [http://pecl.php.net/package/jsonc PECL jsonc] extension before installing MediaWiki.\n* The PHP extension is included in Red Hat Enterprise Linux (CentOS) 5 and 6, though must be enabled in <code>/etc/php.ini</code> or <code>/etc/php.d/json.ini</code>.\n* Some Linux distributions released after May 2013 omit the PHP extension, instead packaging the PECL extension as <code>php5-json</code> or <code>php-pecl-jsonc</code>.",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] is installed",
+    "config-apc": "[http://www.php.net/apc APC] is installed",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] is installed",
+    "config-no-cache": "<strong>Warning:</strong> Could not find [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] or [http://www.iis.net/download/WinCacheForPhp WinCache].\nObject caching is not enabled.",
+    "config-mod-security": "<strong>Warning:</strong> Your web server has [http://modsecurity.org/ mod_security] enabled. If misconfigured, it can cause problems for MediaWiki or other software that allows users to post arbitrary content.\nRefer to [http://modsecurity.org/documentation/ mod_security documentation] or contact your host's support if you encounter random errors.",
+    "config-diff3-bad": "GNU diff3 not found.",
+    "config-git": "Found the Git version control software: <code>$1</code>.",
+    "config-git-bad": "Git version control software not found.",
+    "config-imagemagick": "Found ImageMagick: <code>$1</code>.\nImage thumbnailing will be enabled if you enable uploads.",
+    "config-gd": "Found GD graphics library built-in.\nImage thumbnailing will be enabled if you enable uploads.",
+    "config-no-scaling": "Could not find GD library or ImageMagick.\nImage thumbnailing will be disabled.",
+    "config-no-uri": "<strong>Error:</strong> Could not determine the current URI.\nInstallation aborted.",
+    "config-no-cli-uri": "<strong>Warning:</strong> No --scriptpath specified, using default: <code>$1</code>.",
+    "config-using-server": "Using server name \"<nowiki>$1</nowiki>\".",
+    "config-using-uri": "Using server URL \"<nowiki>$1$2</nowiki>\".",
+    "config-uploads-not-safe": "<strong>Warning:</strong> Your default directory for uploads <code>$1</code> is vulnerable to arbitrary scripts execution.\nAlthough MediaWiki checks all uploaded files for security threats, it is highly recommended to [//www.mediawiki.org/wiki/Manual:Security#Upload_security close this security vulnerability] before enabling uploads.",
+    "config-no-cli-uploads-check": "<strong>Warning:</strong> Your default directory for uploads (<code>$1</code>) is not checked for vulnerability\nto arbitrary script execution during the CLI install.",
+    "config-brokenlibxml": "Your system has a combination of PHP and libxml2 versions that is buggy and can cause hidden data corruption in MediaWiki and other web applications.\nUpgrade to libxml2 2.7.3 or later ([https://bugs.php.net/bug.php?id=45996 bug filed with PHP]).\nInstallation aborted.",
+    "config-suhosin-max-value-length": "Suhosin is installed and limits the GET parameter <code>length</code> to $1 bytes.\nMediaWiki's ResourceLoader component will work around this limit, but that will degrade performance.\nIf at all possible, you should set <code>suhosin.get.max_value_length</code> to 1024 or higher in <code>php.ini</code>, and set <code>$wgResourceLoaderMaxQueryLength</code> to the same value in <code>LocalSettings.php</code>.",
+    "config-db-type": "Database type:",
+    "config-db-host": "Database host:",
+    "config-db-host-help": "If your database server is on different server, enter the host name or IP address here.\n\nIf you are using shared web hosting, your hosting provider should give you the correct host name in their documentation.\n\nIf you are installing on a Windows server and using MySQL, using \"localhost\" may not work for the server name. If it does not, try \"127.0.0.1\" for the local IP address.\n\nIf you are using PostgreSQL, leave this field blank to connect via a Unix socket.",
+    "config-db-host-oracle": "Database TNS:",
+    "config-db-host-oracle-help": "Enter a valid [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; a tnsnames.ora file must be visible to this installation.<br />If you are using client libraries 10g or newer you can also use the [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] naming method.",
+    "config-db-wiki-settings": "Identify this wiki",
+    "config-db-name": "Database name:",
+    "config-db-name-help": "Choose a name that identifies your wiki.\nIt should not contain spaces.\n\nIf you are using shared web hosting, your hosting provider will either give you a specific database name to use or let you create databases via a control panel.",
+    "config-db-name-oracle": "Database schema:",
+    "config-db-account-oracle-warn": "There are three supported scenarios for installing Oracle as database backend:\n\nIf you wish to create database account as part of the installation process, please supply an account with SYSDBA role as database account for installation and specify the desired credentials for the web-access account, otherwise you can either create the web-access account manually and supply only that account (if it has required permissions to create the schema objects) or supply two different accounts, one with create privileges and a restricted one for web access.\n\nScript for creating an account with required privileges can be found in \"maintenance/oracle/\" directory of this installation. Keep in mind that using a restricted account will disable all maintenance capabilities with the default account.",
+    "config-db-install-account": "User account for installation",
+    "config-db-username": "Database username:",
+    "config-db-password": "Database password:",
+    "config-db-password-empty": "Please enter a password for the new database user: $1.\nWhile it may be possible to create users with no passwords, it is not secure.",
+    "config-db-install-username": "Enter the username that will be used to connect to the database during the installation process.\nThis is not the username of the MediaWiki account; this is the username for your database.",
+    "config-db-install-password": "Enter the password that will be used to connect to the database during the installation process.\nThis is not the password for the MediaWiki account; this is the password for your database.",
+    "config-db-install-help": "Enter the username and password that will be used to connect to the database during the installation process.",
+    "config-db-account-lock": "Use the same username and password during normal operation",
+    "config-db-wiki-account": "User account for normal operation",
+    "config-db-wiki-help": "Enter the username and password that will be used to connect to the database during normal wiki operation.\nIf the account does not exist, and the installation account has sufficient privileges, this user account will be created with the minimum privileges required to operate the wiki.",
+    "config-db-prefix": "Database table prefix:",
+    "config-db-prefix-help": "If you need to share one database between multiple wikis, or between MediaWiki and another web application, you may choose to add a prefix to all the table names to avoid conflicts.\nDo not use spaces.\n\nThis field is usually left empty.",
+    "config-db-charset": "Database character set",
+    "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-charset-help": "<strong>Warning:</strong> If you use <strong>backwards-compatible UTF-8</strong> on MySQL 4.1+, and subsequently back up the database with <code>mysqldump</code>, it may destroy all non-ASCII characters, irreversibly corrupting your backups!\n\nIn <strong>binary mode</strong>, MediaWiki stores UTF-8 text to the database in binary fields.\nThis is more efficient than MySQL's UTF-8 mode, and allows you to use the full range of Unicode characters.\nIn <strong>UTF-8 mode</strong>, MySQL will know what character set your data is in, and can present and convert it appropriately,\nbut it will not let you store characters above the [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
+    "config-mysql-old": "MySQL $1 or later is required. You have $2.",
+    "config-db-port": "Database port:",
+    "config-db-schema": "Schema for MediaWiki:",
+    "config-db-schema-help": "This schema will usually be fine.\nOnly change it if you know you need to.",
+    "config-pg-test-error": "Cannot connect to database <strong>$1</strong>: $2",
+    "config-sqlite-dir": "SQLite data directory:",
+    "config-sqlite-dir-help": "SQLite stores all data in a single file.\n\nThe directory you provide must be writable by the webserver during installation.\n\nIt should <strong>not</strong> be accessible via the web, this is why we're not putting it where your PHP files are.\n\nThe installer will write a <code>.htaccess</code> file along with it, but if that fails someone can gain access to your raw database.\nThat includes raw user data (email addresses, hashed passwords) as well as deleted revisions and other restricted data on the wiki.\n\nConsider putting the database somewhere else altogether, for example in <code>/var/lib/mediawiki/yourwiki</code>.",
+    "config-oracle-def-ts": "Default tablespace:",
+    "config-oracle-temp-ts": "Temporary tablespace:",
+    "config-type-mysql": "MySQL (or compatible)",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-type-mssql": "Microsoft SQL Server",
+    "config-support-info": "MediaWiki supports the following database systems:\n\n$1\n\nIf you do not see the database system you are trying to use listed below, then follow the instructions linked above to enable support.",
+    "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] is the primary target for MediaWiki and is best supported. MediaWiki also works with [{{int:version-db-mariadb-url}} MariaDB] and [{{int:version-db-percona-url}} Percona Server], which are MySQL compatible. ([http://www.php.net/manual/en/mysqli.installation.php How to compile PHP with MySQL support])",
+    "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is a popular open source database system as an alternative to MySQL. There may be some minor outstanding bugs, and it is not recommended for use in a production environment. ([http://www.php.net/manual/en/pgsql.installation.php How to compile PHP with PostgreSQL support])",
+    "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is a lightweight database system that is very well supported. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], uses PDO)",
+    "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] is a commercial enterprise database. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])",
+    "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] is a commercial enterprise database for Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php How to compile PHP with SQLSRV support])",
+    "config-header-mysql": "MySQL settings",
+    "config-header-postgres": "PostgreSQL settings",
+    "config-header-sqlite": "SQLite settings",
+    "config-header-oracle": "Oracle settings",
+    "config-header-mssql": "Microsoft SQL Server settings",
+    "config-invalid-db-type": "Invalid database type",
+    "config-missing-db-name": "You must enter a value for \"Database name\"",
+    "config-missing-db-host": "You must enter a value for \"Database host\"",
+    "config-missing-db-server-oracle": "You must enter a value for \"Database TNS\"",
+    "config-invalid-db-server-oracle": "Invalid database TNS \"$1\".\nUse either \"TNS Name\" or an \"Easy Connect\" string ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods])",
+    "config-invalid-db-name": "Invalid database name \"$1\".\nUse only ASCII letters (a-z, A-Z), numbers (0-9), underscores (_) and hyphens (-).",
+    "config-invalid-db-prefix": "Invalid database prefix \"$1\".\nUse only ASCII letters (a-z, A-Z), numbers (0-9), underscores (_) and hyphens (-).",
+    "config-connection-error": "$1.\n\nCheck the host, username and password and try again.",
+    "config-invalid-schema": "Invalid schema for MediaWiki \"$1\".\nUse only ASCII letters (a-z, A-Z), numbers (0-9) and underscores (_).",
+    "config-db-sys-create-oracle": "Installer only supports using a SYSDBA account for creating a new account.",
+    "config-db-sys-user-exists-oracle": "User account \"$1\" already exists. SYSDBA can only be used for creating of a new account!",
+    "config-postgres-old": "PostgreSQL $1 or later is required. You have $2.",
+    "config-mssql-old": "Microsoft SQL Server $1 or later is required. You have $2.",
+    "config-sqlite-name-help": "Choose a name that identifies your wiki.\nDo not use spaces or hyphens.\nThis will be used for the SQLite data file name.",
+    "config-sqlite-parent-unwritable-group": "Cannot create the data directory <code><nowiki>$1</nowiki></code>, because the parent directory <code><nowiki>$2</nowiki></code> is not writable by the webserver.\n\nThe installer has determined the user your webserver is running as.\nMake the <code><nowiki>$3</nowiki></code> directory writable by it to continue.\nOn a Unix/Linux system do:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Cannot create the data directory <code><nowiki>$1</nowiki></code>, because the parent directory <code><nowiki>$2</nowiki></code> is not writable by the webserver.\n\nThe installer could not determine the user your webserver is running as.\nMake the <code><nowiki>$3</nowiki></code> directory globally writable by it (and others!) to continue.\nOn a Unix/Linux system do:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Error creating the data directory \"$1\".\nCheck the location and try again.",
+    "config-sqlite-dir-unwritable": "Unable to write to the directory \"$1\".\nChange its permissions so that the webserver can write to it, and try again.",
+    "config-sqlite-connection-error": "$1.\n\nCheck the data directory and database name below and try again.",
+    "config-sqlite-readonly": "The file <code>$1</code> is not writeable.",
+    "config-sqlite-cant-create-db": "Could not create database file <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "PHP is missing FTS3 support, downgrading tables",
+    "config-can-upgrade": "There are MediaWiki tables in this database.\nTo upgrade them to MediaWiki $1, click <strong>Continue</strong>.",
+    "config-upgrade-done": "Upgrade complete.\n\nYou can now [$1 start using your wiki].\n\nIf you want to regenerate your <code>LocalSettings.php</code> file, click the button below.\nThis is <strong>not recommended</strong> unless you are having problems with your wiki.",
+    "config-upgrade-done-no-regenerate": "Upgrade complete.\n\nYou can now [$1 start using your wiki].",
+    "config-regenerate": "Regenerate LocalSettings.php →",
+    "config-show-table-status": "<code>SHOW TABLE STATUS</code> query failed!",
+    "config-unknown-collation": "<strong>Warning:</strong> Database is using unrecognized collation.",
+    "config-db-web-account": "Database account for web access",
+    "config-db-web-help": "Select the username and password that the web server will use to connect to the database server, during ordinary operation of the wiki.",
+    "config-db-web-account-same": "Use the same account as for installation",
+    "config-db-web-create": "Create the account if it does not already exist",
+    "config-db-web-no-create-privs": "The account you specified for installation does not have enough privileges to create an account.\nThe account you specify here must already exist.",
+    "config-mysql-engine": "Storage engine:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "<strong>Warning:</strong> You have selected MyISAM as storage engine for MySQL, which is not recommended for use with MediaWiki, because:\n* it barely supports concurrency due to table locking\n* it is more prone to corruption than other engines\n* the MediaWiki codebase does not always handle MyISAM as it should\n\nIf your MySQL installation supports InnoDB, it is highly recommended that you choose that instead.\nIf your MySQL installation does not support InnoDB, maybe it's time for an upgrade.",
+    "config-mysql-only-myisam-dep": "<strong>Warning:</strong> MyISAM is the only available storage engine for MySQL on this machine, and this is not recommended for use with MediaWiki, because:\n* it barely supports concurrency due to table locking\n* it is more prone to corruption than other engines\n* the MediaWiki codebase does not always handle MyISAM as it should\n\nYour MySQL installation does not support InnoDB, maybe it's time for an upgrade.",
+    "config-mysql-engine-help": "<strong>InnoDB</strong> is almost always the best option, since it has good concurrency support.\n\n<strong>MyISAM</strong> may be faster in single-user or read-only installations.\nMyISAM databases tend to get corrupted more often than InnoDB databases.",
+    "config-mysql-charset": "Database character set:",
+    "config-mysql-binary": "Binary",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "In <strong>binary mode</strong>, MediaWiki stores UTF-8 text to the database in binary fields.\nThis is more efficient than MySQL's UTF-8 mode, and allows you to use the full range of Unicode characters.\n\nIn <strong>UTF-8 mode</strong>, MySQL will know what character set your data is in, and can present and convert it appropriately, but it will not let you store characters above the [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
+    "config-mssql-auth": "Authentication type:",
+    "config-mssql-install-auth": "Select the authentication type that will be used to connect to the database during the installation process.\nIf you select \"{{int:config-mssql-windowsauth}}\", the credentials of whatever user the webserver is running as will be used.",
+    "config-mssql-web-auth": "Select the authentication type that the web server will use to connect to the database server, during ordinary operation of the wiki.\nIf you select \"{{int:config-mssql-windowsauth}}\", the credentials of whatever user the webserver is running as will be used.",
+    "config-mssql-sqlauth": "SQL Server Authentication",
+    "config-mssql-windowsauth": "Windows Authentication",
+    "config-site-name": "Name of wiki:",
+    "config-site-name-help": "This will appear in the title bar of the browser and in various other places.",
+    "config-site-name-blank": "Enter a site name.",
+    "config-project-namespace": "Project namespace:",
+    "config-ns-generic": "Project",
+    "config-ns-site-name": "Same as the wiki name: $1",
+    "config-ns-other": "Other (specify)",
+    "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'''\".\nAll page titles in this namespace start with a certain prefix, which you can specify here.\nUsually, 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.\nSpecify a different project namespace.",
+    "config-ns-conflict": "The specified namespace \"<nowiki>$1</nowiki>\" conflicts with a default MediaWiki namespace.\nSpecify a different project namespace.",
+    "config-admin-box": "Administrator account",
+    "config-admin-name": "Your username:",
+    "config-admin-password": "Password:",
+    "config-admin-password-confirm": "Password again:",
+    "config-admin-help": "Enter your preferred username here, for example \"Joe Bloggs\".\nThis is the name you will use to log in to the wiki.",
+    "config-admin-name-blank": "Enter an administrator username.",
+    "config-admin-name-invalid": "The specified username \"<nowiki>$1</nowiki>\" is invalid.\nSpecify a different username.",
+    "config-admin-password-blank": "Enter a password for the administrator account.",
+    "config-admin-password-mismatch": "The two passwords you entered do not match.",
+    "config-admin-email": "Email address:",
+    "config-admin-email-help": "Enter an email address here to allow you to receive email from other users on the wiki, reset your password, and be notified of changes to pages on your watchlist. You can leave this field empty.",
+    "config-admin-error-user": "Internal error when creating an admin with the name \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Internal error when setting a password for the admin \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+    "config-admin-error-bademail": "You have entered an invalid email address.",
+    "config-subscribe": "Subscribe to the [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce release announcements mailing list].",
+    "config-subscribe-help": "This is a low-volume mailing list used for release announcements, including important security announcements.\nYou should subscribe to it and update your MediaWiki installation when new versions come out.",
+    "config-subscribe-noemail": "You tried to subscribe to the release announcements mailing list without providing an email address.\nPlease provide an email address if you wish to subscribe to the mailing list.",
+    "config-almost-done": "You are almost done!\nYou 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": "Open wiki",
+    "config-profile-no-anon": "Account creation required",
+    "config-profile-fishbowl": "Authorized editors only",
+    "config-profile-private": "Private wiki",
+    "config-profile-help": "Wikis work best when you let as many people edit them as possible.\nIn MediaWiki, it is easy to review the recent changes, and to revert any damage that is done by naive or malicious users.\n\nHowever, 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.\nSo you have the choice.\n\nThe <strong>{{int:config-profile-wiki}}</strong> model allows anyone to edit, without even logging in.\nA wiki with <strong>{{int:config-profile-no-anon}}</strong> provides extra accountability, but may deter casual contributors.\n\nThe <strong>{{int:config-profile-fishbowl}}</strong> scenario allows approved users to edit, but the public can view the pages, including history.\nA <strong>{{int:config-profile-private}}</strong> only allows approved users to view pages, with the same group allowed to edit.\n\nMore complex user rights configurations are available after installation, see the [//www.mediawiki.org/wiki/Manual:User_rights relevant manual entry].",
+    "config-license": "Copyright and license:",
+    "config-license-none": "No license footer",
+    "config-license-cc-by-sa": "Creative Commons Attribution Share Alike",
+    "config-license-cc-by": "Creative Commons Attribution",
+    "config-license-cc-by-nc-sa": "Creative Commons Attribution Non-Commercial Share Alike",
+    "config-license-cc-0": "Creative Commons Zero (Public Domain)",
+    "config-license-gfdl": "GNU Free Documentation License 1.3 or later",
+    "config-license-pd": "Public Domain",
+    "config-license-cc-choose": "Select a custom Creative Commons license",
+    "config-license-help": "Many public wikis put all contributions under a [http://freedomdefined.org/Definition free license].\nThis helps to create a sense of community ownership and encourages long-term contribution.\nIt is not generally necessary for a private or corporate wiki.\n\nIf you want to be able to use text from Wikipedia, and you want Wikipedia to be able to accept text copied from your wiki, you should choose <strong>Creative Commons Attribution Share Alike</strong>.\n\nWikipedia previously used the GNU Free Documentation License.\nThe GFDL is a valid license, but it is difficult to understand.\nIt is also difficult to reuse content licensed under the GFDL.",
+    "config-email-settings": "Email settings",
+    "config-enable-email": "Enable outbound email",
+    "config-enable-email-help": "If you want email to work, [http://www.php.net/manual/en/mail.configuration.php PHP's mail settings] need to be configured correctly.\nIf you do not want any email features, you can disable them here.",
+    "config-email-user": "Enable user-to-user email",
+    "config-email-user-help": "Allow all users to send each other email if they have enabled it in their preferences.",
+    "config-email-usertalk": "Enable user talk page notification",
+    "config-email-usertalk-help": "Allow users to receive notifications on user talk page changes, if they have enabled it in their preferences.",
+    "config-email-watchlist": "Enable watchlist notification",
+    "config-email-watchlist-help": "Allow users to receive notifications about their watched pages if they have enabled it in their preferences.",
+    "config-email-auth": "Enable email authentication",
+    "config-email-auth-help": "If this option is enabled, users have to confirm their email address using a link sent to them whenever they set or change it.\nOnly authenticated email addresses can receive emails from other users or change notification emails.\nSetting this option is <strong>recommended</strong> for public wikis because of potential abuse of the email features.",
+    "config-email-sender": "Return email address:",
+    "config-email-sender-help": "Enter the email address to use as the return address on outbound email.\nThis is where bounces will be sent.\nMany mail servers require at least the domain name part to be valid.",
+    "config-upload-settings": "Images and file uploads",
+    "config-upload-enable": "Enable file uploads",
+    "config-upload-help": "File uploads potentially expose your server to security risks.\nFor more information, read the [//www.mediawiki.org/wiki/Manual:Security security section] in the manual.\n\nTo enable file uploads, change the mode on the <code>images</code> subdirectory under MediaWiki's root directory so that the web server can write to it.\nThen enable this option.",
+    "config-upload-deleted": "Directory for deleted files:",
+    "config-upload-deleted-help": "Choose a directory in which to archive deleted files.\nIdeally, this should not be accessible from the web.",
+    "config-logo": "Logo URL:",
+    "config-logo-help": "MediaWiki's default skin includes space for a 135x160 pixel logo above the sidebar menu.\nUpload an image of the appropriate size, and enter the URL here.\n\nYou can use <code>$wgStylePath</code> or <code>$wgScriptPath</code> if your logo is relative to those paths.\n\nIf you do not want a logo, leave this box blank.",
+    "config-instantcommons": "Enable Instant Commons",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] is a feature that allows wikis to use images, sounds and other media found on the [//commons.wikimedia.org/ Wikimedia Commons] site.\nIn order to do this, MediaWiki requires access to the Internet.\n\nFor more information on this feature, including instructions on how to set it up for wikis other than the Wikimedia Commons, consult [//mediawiki.org/wiki/Manual:$wgForeignFileRepos the manual].",
+    "config-cc-error": "The Creative Commons license chooser gave no result.\nEnter the license name manually.",
+    "config-cc-again": "Pick again...",
+    "config-cc-not-chosen": "Choose which Creative Commons license you want and click \"proceed\".",
+    "config-advanced-settings": "Advanced configuration",
+    "config-cache-options": "Settings for object caching:",
+    "config-cache-help": "Object caching is used to improve the speed of MediaWiki by caching frequently used data.\nMedium to large sites are highly encouraged to enable this, and small sites will see benefits as well.",
+    "config-cache-none": "No caching (no functionality is removed, but speed may be impacted on larger wiki sites)",
+    "config-cache-accel": "PHP object caching (APC, XCache or WinCache)",
+    "config-cache-memcached": "Use Memcached (requires additional setup and configuration)",
+    "config-memcached-servers": "Memcached servers:",
+    "config-memcached-help": "List of IP addresses to use for Memcached.\nShould specify one per line and specify the port to be used. For example:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "You selected Memcached as your cache type but did not specify any servers.",
+    "config-memcache-badip": "You have entered an invalid IP address for Memcached: $1.",
+    "config-memcache-noport": "You did not specify a port to use for Memcached server: $1.\nIf you do not know the port, the default is 11211.",
+    "config-memcache-badport": "Memcached port numbers should be between $1 and $2.",
+    "config-extensions": "Extensions",
+    "config-extensions-help": "The extensions listed above were detected in your <code>./extensions</code> directory.\n\nThey may require additional configuration, but you can enable them now.",
+    "config-install-alreadydone": "<strong>Warning:</strong> You seem to have already installed MediaWiki and are trying to install it again.\nPlease proceed to the next page.",
+    "config-install-begin": "By pressing \"{{int:config-continue}}\", you will begin the installation of MediaWiki.\nIf 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",
+    "config-install-database": "Setting up database",
+    "config-install-schema": "Creating schema",
+    "config-install-pg-schema-not-exist": "PostgreSQL schema does not exist.",
+    "config-install-pg-schema-failed": "Tables creation failed.\nMake sure that the user \"$1\" can write to the schema \"$2\".",
+    "config-install-pg-commit": "Committing changes",
+    "config-install-pg-plpgsql": "Checking for language PL/pgSQL",
+    "config-pg-no-plpgsql": "You need to install the language PL/pgSQL in the database $1",
+    "config-pg-no-create-privs": "The account you specified for installation does not have enough privileges to create an account.",
+    "config-pg-not-in-role": "The account you specified for the web user already exists.\nThe account you specified for installation is not a superuser and is not a member of the web user's role, so it is unable to create objects owned by the web user.\n\nMediaWiki currently requires that the tables be owned by the web user. Please specify another web account name, or click \"back\" and specify a suitably privileged install user.",
+    "config-install-user": "Creating database user",
+    "config-install-user-alreadyexists": "User \"$1\" already exists",
+    "config-install-user-create-failed": "Creating user \"$1\" failed: $2",
+    "config-install-user-grant-failed": "Granting permission to user \"$1\" failed: $2",
+    "config-install-user-missing": "The specified user \"$1\" does not exist.",
+    "config-install-user-missing-create": "The specified user \"$1\" does not exist.\nPlease click the \"create account\" checkbox below if you want to create it.",
+    "config-install-tables": "Creating tables",
+    "config-install-tables-exist": "<strong>Warning:</strong> MediaWiki tables seem to already exist.\nSkipping creation.",
+    "config-install-tables-failed": "<strong>Error:</strong> Table creation failed with the following error: $1",
+    "config-install-interwiki": "Populating default interwiki table",
+    "config-install-interwiki-list": "Could not read file <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "<strong>Warning:</strong> The interwiki table seems to already have entries.\nSkipping default list.",
+    "config-install-stats": "Initializing statistics",
+    "config-install-keys": "Generating secret keys",
+    "config-insecure-keys": "<strong>Warning:</strong> {{PLURAL:$2|A secure key|Secure keys}} ($1) generated during installation {{PLURAL:$2|is|are}} not completely safe. Consider changing {{PLURAL:$2|it|them}} manually.",
+    "config-install-sysop": "Creating administrator user account",
+    "config-install-subscribe-fail": "Unable to subscribe to mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "cURL is not installed and allow_url_fopen is not available.",
+    "config-install-mainpage": "Creating main page with default content",
+    "config-install-extension-tables": "Creating tables for enabled extensions",
+    "config-install-mainpage-failed": "Could not insert main page: $1",
+    "config-install-done": "<strong>Congratulations!</strong>\nYou have successfully installed MediaWiki.\n\nThe installer has generated a <code>LocalSettings.php</code> file.\nIt contains all your configuration.\n\nYou will need to download it and put it in the base of your wiki installation (the same directory as index.php). The download should have started automatically.\n\nIf the download was not offered, or if you cancelled it, you can restart the download by clicking the link below:\n\n$3\n\n<strong>Note:</strong> If you do not do this now, this generated configuration file will not be available to you later if you exit the installation without downloading it.\n\nWhen that has been done, you can <strong>[$2 enter your wiki]</strong>.",
+    "config-download-localsettings": "Download <code>LocalSettings.php</code>",
+    "config-help": "help",
+    "config-nofile": "File \"$1\" could not be found. Has it been deleted?",
+    "config-extension-link": "Did you know that your wiki supports [//www.mediawiki.org/wiki/Manual:Extensions extensions]?\n\nYou can browse [//www.mediawiki.org/wiki/Category:Extensions_by_category extensions by category] or the [//www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] to see the full list of extensions.",
+    "mainpagetext": "<strong>MediaWiki has been successfully installed.</strong>",
+    "mainpagedocfooter": "Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.\n\n== Getting started ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localise MediaWiki for your language]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/eo.json b/includes/installer/i18n/eo.json
new file mode 100644 (file)
index 0000000..baeed82
--- /dev/null
@@ -0,0 +1,20 @@
+{
+    "@metadata": {
+        "authors": [
+            "Airon90",
+            "Yekrats"
+        ]
+    },
+    "config-your-language": "Via lingvo:",
+    "config-your-language-help": "Elekti lingvon uzi dum la instalada procezo.",
+    "config-wiki-language": "Lingvo de la vikio:",
+    "config-wiki-language-help": "Elekti la ĉefe skribotan lingvon de la vikio.",
+    "config-page-welcome": "Bonvenon al MediaWiki!",
+    "config-page-dbsettings": "Agordoj de la datumbazo",
+    "config-page-name": "Nomo",
+    "config-page-options": "Agordoj",
+    "config-page-install": "Instali",
+    "config-page-complete": "Farita!",
+    "mainpagetext": "'''MediaWiki estis sukcese instalita.'''",
+    "mainpagedocfooter": "Konsultu la [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide User's Guide] por informo pri uzado de vikia programaro.\n\n==Kiel komenci==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Listo de konfiguraĵoj] (angla)\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki Oftaj Demandoj] (angla)\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki dissendolisto pri anoncoj] (angla)"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/es-formal.json b/includes/installer/i18n/es-formal.json
new file mode 100644 (file)
index 0000000..12a94c7
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Dferg"
+        ]
+    },
+    "mainpagedocfooter": "Consulte usted la [//meta.wikimedia.org/wiki/Ayuda:Contenido Guía de usuario] para obtener información sobre el uso del software wiki.\n\n== Empezando ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de ajustes de configuración]\n* [//www.mediawiki.org/wiki/Manual:FAQ/es FAQ de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/es.json b/includes/installer/i18n/es.json
new file mode 100644 (file)
index 0000000..acf0f02
--- /dev/null
@@ -0,0 +1,317 @@
+{
+    "@metadata": {
+        "authors": [
+            "Armando-Martin",
+            "Ciencia Al Poder",
+            "Crazymadlover",
+            "Danke7",
+            "Fitoschido",
+            "Locos epraix",
+            "Od1n",
+            "Platonides",
+            "Sanbec",
+            "Translationista",
+            "Vivaelcelta",
+            "아라"
+        ]
+    },
+    "config-desc": "El instalador para MediaWiki",
+    "config-title": "MediaWiki $1 instalación",
+    "config-information": "Información",
+    "config-localsettings-upgrade": "Se ha encontrado un archivo <code>LocalSettings.php</code>.\nPara actualizar esta instalación, por favor ingresa el valor de <code>$wgUpgradeKey</code> en el cuadro de abajo.\nLo encontrarás en <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Se ha detectado un archivo <code>LocalSettings.php</code>.\nPara actualizar la instalación, vuelva a ejecutar <code>update.php</code>",
+    "config-localsettings-key": "Clave de actualización:",
+    "config-localsettings-badkey": "La clave proporcionada es incorrecta.",
+    "config-upgrade-key-missing": "Se ha detectado una instalación existente de MediaWiki.\nPara actualizar la instalación, por favor, ponga la siguiente línea al final de su archivo <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "El archivo <code>LocalSettings.php</code> existente parece estar incompleto.\nLa variable $1 no está definida.\nCambie el archivo <code>LocalSettings.php</code> para que esta variable quede establecida y haga clic en \"{{int:Config-continue}}\".",
+    "config-localsettings-connection-error": "Se detectó un error al conectarse a la base de datos utilizando la configuración especificada en los archivos <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Corrija estas opciones y vuelva a intentarlo.\n\n$1",
+    "config-session-error": "Error comenzando sesión: $1",
+    "config-session-expired": "Tus datos de sesión parecen haber expirado.\nLas sesiones están configuradas por una duración de $1.\nPuedes incrementar esto configurando <code>session.gc_maxlifetime</code> en php.ini.\nReiniciar el proceso de instalación.",
+    "config-no-session": "Se han perdido los datos de sesión.\nVerifica tu php.ini y comprueba que <code>session.save_path</code> está establecido en un directorio apropiado.",
+    "config-your-language": "Tu idioma:",
+    "config-your-language-help": "Seleccionar un idioma a usar durante el proceso de instalación.",
+    "config-wiki-language": "Idioma del wiki:",
+    "config-wiki-language-help": "Seleccionar el idioma en el que el wiki será escrito predominantemente.",
+    "config-back": "← Atrás",
+    "config-continue": "Continuar →",
+    "config-page-language": "Idioma",
+    "config-page-welcome": "Bienvenido a MediaWiki!",
+    "config-page-dbconnect": "Conectar a la base de datos",
+    "config-page-upgrade": "Actualizar instalación existente",
+    "config-page-dbsettings": "Configuración de la base de datos",
+    "config-page-name": "Nombre",
+    "config-page-options": "Opciones",
+    "config-page-install": "Instalar",
+    "config-page-complete": "Completo!",
+    "config-page-restart": "Reiniciar instalación",
+    "config-page-readme": "Léeme",
+    "config-page-releasenotes": "Notas de la versión",
+    "config-page-copying": "Copiando",
+    "config-page-upgradedoc": "Actualizando",
+    "config-page-existingwiki": "Wiki existente",
+    "config-help-restart": "¿Deseas borrar todos los datos que has ingresado hasta ahora y reiniciar el proceso de instalación desde el principio?",
+    "config-restart": "Sí, reiniciarlo",
+    "config-welcome": "=== Comprobación del entorno ===\nSe realiza comprobaciones básicas para ver si el entorno es adecuado para la instalación de MediaWiki.\nDeberás suministrar los resultados de tales comprobaciones si necesitas ayuda durante la instalación.",
+    "config-copyright": "=== Derechos de autor y Términos de uso ===\n\n$1\n\nEste programa es software libre; puedes redistribuirlo y/o modificarlo en los términos de la Licencia Pública General de GNU, tal como aparece publicada por la Fundación para el Software Libre, tanto la versión 2 de la Licencia, como cualquier versión posterior (según prefiera).\n\nEste programa es distribuido en la esperanza de que sea útil, pero '''sin cualquier garantía'''; inclusive, sin la garantía implícita de la '''posibilidad de ser comercializado''' o de '''idoneidad para cualquier finalidad específica'''.\nConsulte la licencia *GNU General *Public *License para más detalles.\n\nEn conjunto con este programa debe haber recibido <doclink href=Copying>una copia de la Licencia Pública General de GNU</doclink>; si no la recibió, pídala por escrito a Fundación para el Software Libre, Inc., 51 Franklin Street, Fifth Floor, Boston, ME La 02110-1301, USA o [http://www.gnu.org/copyleft/gpl.html léala en internet].",
+    "config-sidebar": "* [//www.mediawiki.org Página principal de MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents Guía del usuario]\n* [//www.mediawiki.org/wiki/Manual:Contents Guía del administrador]\n* [//www.mediawiki.org/wiki/Manual:FAQ Preguntas frecuentes]\n----\n* <doclink href=Readme>Léeme</doclink>\n* <doclink href=ReleaseNotes>Notas de la versión</doclink>\n* <doclink href=Copying>Copia</doclink>\n* <doclink href=UpgradeDoc>Actualización</doclink>",
+    "config-env-good": "El entorno ha sido comprobado.\nPuedes instalar MediaWiki.",
+    "config-env-bad": "El entorno ha sido comprobado.\nNo puedes instalar MediaWiki.",
+    "config-env-php": "PHP $1 está instalado.",
+    "config-env-php-toolow": "PHP $1 está instalado.\nSin embargo, MediaWiki requiere PHP $2 o superior.",
+    "config-unicode-using-utf8": "Usando utf8_normalize.so de Brion Vibber para la normalización Unicode.",
+    "config-unicode-using-intl": "Usando la [http://pecl.php.net/intl extensión intl PECL] para la normalización Unicode.",
+    "config-unicode-pure-php-warning": "'''Advertencia''': La [http://pecl.php.net/intl extensión intl] no está disponible para efectuar la normalización Unicode. Utilizando la implementación más lenta en PHP.\nSi tu web tiene mucho tráfico, te recomendamos leer acerca de la [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalización Unicode].",
+    "config-unicode-update-warning": "'''Warning''': La versión instalada del contenedor de normalización Unicode usa una versión anterior de la biblioteca del [http://site.icu-project.org/ proyecto ICU].\nDeberás [//www.mediawiki.org/wiki/Unicode_normalization_considerations actualizar] si realmente deseas usar Unicode.",
+    "config-no-db": "No fue posible encontrar un controlador adecuado para la base de datos! Necesitas instalar un controlador de base de datos para PHP.\nLas siguientes bases de datos son soportadas: $1.\nSi estás en alojamiento compartido, pregunta a tu proveedor el instalar un controlador de base de datos adecuado.\nSi estás compilando PHP por ti mismo, reconfigúralo con un cliente de base de datos disponible, por ejemplo usando <code>./configure --with-mysql</code>.\nSi instalaste PHP de un paquete Debian o Ubuntu, entonces también necesitas instalar el módulo php5-mysql.",
+    "config-outdated-sqlite": "''' Advertencia ''': tiene la versión SQLite $1, que es inferior a la mínima versión requerida: $2 . SQLite no estará disponible.",
+    "config-no-fts3": "'''Advertencia''': SQLite está compilado sin el [//sqlite.org/fts3.html módulo FTS3]. Las funcionalidades de búsqueda no estarán disponibles en esta instalación.",
+    "config-register-globals": "'''Advertencia: La opción de <code>[http://php.net/register_globals register_globals]</code> de PHP está habilitada.'''\n'''Desactívela si puede.'''\nMediaWiki funcionará, pero tu servidor quedará expuesto a vulnerabilidades de seguridad potenciales.",
+    "config-magic-quotes-runtime": "'''Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está activada!'''\nEsta opción causa la imprevisible corrupción de la entrada de datos.\nNo puedes instalar o utilizar MediaWiki a menos que esta opción esté inhabilitada.",
+    "config-magic-quotes-sybase": "'''Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está activada!'''\nEsta opción causa la imprevisible corrupción de la entrada de datos.\nNo puedes instalar o utilizar MediaWiki a menos que esta opción esté inhabilitada.",
+    "config-mbstring": "'''Fatal: La opción [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está activada!'''\nEsta opción causa errores y puede corromper los datos de una forma imprevisible.\nNo se puede instalar o usar MediaWiki a menos que esta opción sea desactivada.",
+    "config-ze1": "'''Fatal: ¡La opción [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] está activada!'''\nEsta opción causa problemas significativos en MediaWiki.\nNo se puede instalar o usar MediaWiki a menos que esta opción sea desactivada.",
+    "config-safe-mode": "'''Advertencia:''' El [http://www.php.net/features.safe-mode modo seguro] de PHP está activado.\nEste modo puede causar problemas, especialmente en la carga de archivosy en compatibilidad con <code>math</code>.",
+    "config-xml-bad": "Falta el módulo XML de PHP.\nMediaWiki necesita funciones en este módulo y no funcionará con esta configuración.\nSi está ejecutando Mandrake, instale el paquete php-xml.",
+    "config-pcre": "Parece faltar el módulo de compatibilidad PCRE.\nMediaWiki necesita que las funciones de expresiones regulares compatibles con Perl estén funcionando.",
+    "config-pcre-no-utf8": "'''Error fatal ''': Parece que el módulo PCRE de PHP fue compilado sin el soporte PCRE_UTF8.\nMediaWiki requiere compatibilidad con UTF-8 para funcionar correctamente.",
+    "config-memory-raised": "el parámetro <code>memory_limit</code> de PHP es $1, aumentada a $2.",
+    "config-memory-bad": "'''Advertencia:''' El parámetro <code>memory_limit</code> de PHP es $1.\nProbablemente este valor es demasiado bajo.\n¡La instalación podrá fallar!",
+    "config-ctype": "'''Fatal''': PHP debe ser compilado con soporte para la [http://www.php.net/manual/en/ctype.installation.php extensión Ctype].",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] está instalado",
+    "config-apc": "[http://www.php.net/apc APC] está instalado",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado",
+    "config-no-cache": "'''Advertencia:''' No pudo encontrarse [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].\nEl caché de objetos no está habilitado.",
+    "config-mod-security": "''' Advertencia ''': Su servidor web tiene [http://modsecurity.org/ mod_security] habilitado. Si la configuración es incorrecta, puede causar problemas a MediaWiki u otro software que permita a los usuarios publicar contenido arbitrarios.\nConsulte la [http://modsecurity.org/documentation/ documentación de mod_security] o contacte con el soporte de su servidor (''host'') si encuentra errores aleatorios.",
+    "config-diff3-bad": "GNU diff3 no se encuentra.",
+    "config-git-bad": "No se encontró el software de control de versiones Git.",
+    "config-imagemagick": "ImageMagick encontrado: <code>$1</code>.\nLa miniaturización de imágenes se habilitará si habilitas las cargas.",
+    "config-gd": "Se ha encontrado una biblioteca de gráficos GD integrada.\nLa miniaturización de imágenes se habilitará si habilitas las subidas.",
+    "config-no-scaling": "No se ha encontrado ninguma biblioteca GD o ImageMagik.\nSe inhabilitará la miniaturización de imágenes.",
+    "config-no-uri": "'''Error:''' No se pudo determinar el URI actual.\nInstalación abortada.",
+    "config-no-cli-uri": "''' Advertencia ''': No se ha especificado ningún --scriptpath, por defecto, se usará: <code>$1</code> .",
+    "config-using-server": "Utilizando el nombre de servidor \"<nowiki>$1</nowiki>\".",
+    "config-using-uri": "Utilizando la dirección URL del servidor \"<nowiki>$1$2</nowiki>\".",
+    "config-uploads-not-safe": "'''Atención:''' Su directorio por defecto para las cargas, <code>$1</code>, es vulnerable a la ejecución de scripts arbitrarios.\nAunque MediaWiki comprueba todos los archivos cargados por si hubiese amenazas de seguridad, es altamente recomendable [//www.mediawiki.org/wiki/Manual:Security#Upload_security cerrar esta vulnerabilidad de seguridad] antes de activar las cargas.",
+    "config-no-cli-uploads-check": "'''Atención:''' Su directorio predeterminado para cargas (<code>$1</code>) no está comprobado para la vulnerabilidad\n de ejecución arbitraria de comandos script durante la instalación de CLI.",
+    "config-brokenlibxml": "El sistema tiene una combinación de versiones de PHP y de libxml2 que puede ser problemática y puede causar daños en datos ocultos de MediaWiki y otras aplicaciones web\nActualizar a PHP 5.2.9 o posterior y a libxml2 2.7.3 o posterior ([//bugs.php.net/bug.php?id=45996 bug presentado con PHP]).\nInstalación anulada.",
+    "config-using531": "MediaWiki no puede utilizarse con PHP $1 debido a un error con los parámetros de referencia para <code>__call()</code> .\nActualice el sistema a PHP 5.3.2 o superior, o vuelva a la versión PHP 5.3.0 para resolver este problema.\nInstalación anulada.",
+    "config-suhosin-max-value-length": "Suhosin está instalado y limita el parámetro <code>length</code> GET a $1 bytes.\nEl componente ResourceLoader (gestor de recursos) de MediaWiki trabajará en este límite, pero eso perjudicará el rendimiento.\nSi es posible, deberías establecer <code>suhosin.get.max_value_length</code> en el valor 1024 o superior en <code>php.ini</code> y establecer <code>$wgResourceLoaderMaxQueryLength</code> en el mismo valor en <code>php.ini</code>.",
+    "config-db-type": "Tipo de base de datos",
+    "config-db-host": "Servidor de la base de datos:",
+    "config-db-host-help": "Si su servidor de base de datos está en otro servidor, escriba el nombre del host o su dirección IP aquí.\nSi está utilizando alojamiento web compartido, su proveedor de alojamiento debería darle el nombre correcto del servidor de alojamiento (host) en su documentación.\nSi va a instalarlo en un servidor Windows y utiliza MySQL, el uso de \"localhost\" como nombre del servidor puede no funcionar. Si no es así, intente poner \"127.0.0.1\" como dirección IP local.\nSi utiliza PostgreSQL, deje este campo en blanco para conectarse a través de un socket de Unix.",
+    "config-db-host-oracle": "TNS de la base de datos:",
+    "config-db-host-oracle-help": "Introduzca un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nombre de conexión local] válido; un archivo tnsnames.ora debe ser visible para esta instalación.<br />Si está utilizando bibliotecas de cliente 10g o más recientes también puede utilizar el método de asignación de nombres [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+    "config-db-wiki-settings": "Identifique este wiki",
+    "config-db-name": "Nombre de base de datos:",
+    "config-db-name-help": "Elija un nombre que identifique su wiki.\nNo debe contener espacios.\n\nSi está utilizando alojamiento web compartido, su proveedor de alojamiento le dará un nombre específico de base de datos para que lo utilice, o bien le permitirá crear bases de datos a través de un panel de control.",
+    "config-db-name-oracle": "Esquema de base de datos:",
+    "config-db-account-oracle-warn": "Hay tres escenarios compatibles para la instalación de Oracle como base de datos back-end:\n\nSi desea crear una cuenta de base de datos como parte del proceso de instalación, por favor suministre una cuenta con función SYSDBA como cuenta de base de datos para la instalación y especifique las credenciales deseadas de la cuenta de acceso al web, de lo contrario puede crear manualmente la cuenta de acceso al web y suministrar sólo esa cuenta (si tiene los permisos necesarios para crear los objetos de esquema) o suministrar dos cuentas diferentes, una con privilegios de creación y otra con acceso restringido a la web\n\nLa secuencia de comandos (script) para crear una cuenta con los privilegios necesarios puede encontrarse en el directorio \"maintenance/oracle/\" de esta instalación. Tenga en cuenta que utilizando una cuenta restringida desactivará todas las capacidades de mantenimiento con la cuenta predeterminada.",
+    "config-db-install-account": "Cuenta de usuario para instalación",
+    "config-db-username": "Nombre de usuario de base de datos:",
+    "config-db-password": "contraseña de base de datos:",
+    "config-db-password-empty": "Introduzca una contraseña para el nuevo usuario de base de datos:  $1.\nAunque es posible crear usuarios sin contraseña, esto no es seguro.",
+    "config-db-install-username": "Introduzca el nombre de usuario que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nEste no es el nombre de usuario de la cuenta de MediaWiki; Este es el nombre de usuario para la base de datos.",
+    "config-db-install-password": "Introduzca la contraseña que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nEsta no es la contraseña para la cuenta de MediaWiki; esta es la contraseña para la base de datos.",
+    "config-db-install-help": "Ingresar el nombre de usuario y la contraseña que será usada para conectar a la base de datos durante el proceso de instalación.",
+    "config-db-account-lock": "Usar el mismo nombre de usuario y contraseña durante operación normal",
+    "config-db-wiki-account": "Usar cuenta para operación normal",
+    "config-db-wiki-help": "Introduce el nombre de usuario y la contraseña que serán usados para acceder a la base de datos durante la operación normal del wiki.\nSi esta cuenta no existe y la cuenta de instalación tiene suficientes privilegios, se creará esta cuenta de usuario con los privilegios mínimos necesarios para la operación normal del wiki.",
+    "config-db-prefix": "Prefijo para las tablas de la base de datos:",
+    "config-db-prefix-help": "Si necesita compartir una base de datos entre múltiples wikis, o entre MediaWiki y otra aplicación web, puede optar por agregar un prefijo a todos los nombres de tabla para evitar conflictos.\nNo utilice espacios.\n\nNormalmente se deja este campo vacío.",
+    "config-db-charset": "Conjunto de caracteres de la base de datos",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binario",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 retrocompatible UTF-8",
+    "config-charset-help": "'''Atención:''' Si emplea '''backwards-compatible UTF-8''' en MySQL 4.1+ y posteriormente hace copia de seguridad de la base de datos con <code>mysqldump</code> , puede destruir todos los caracteres no-ASCII, ¡dañando irreversiblemente sus copias de seguridad!\n\nEn '''modo binario''', MediaWiki almacena texto UTF-8 en la base de datos en campos binarios.\nEsto es más eficiente que el modo UTF-8 de MySQL, y le permite utilizar la gama completa de caracteres Unicode.\nEn ''' modo UTF-8'' ', MySQL sabrá el juego de caracteres de sus datos y puede presentarlos y convertirlos apropiadamente,\npero no le permitirá almacenar caracteres por encima del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plano multilingüe básico].",
+    "config-mysql-old": "Se necesita MySQL $1 o una versión más reciente. Tienes la versión $2.",
+    "config-db-port": "Puerto de la base de datos:",
+    "config-db-schema": "Esquema para MediaWiki",
+    "config-db-schema-help": "Estos esquemas usualmente estarán bien.\nAltéralos sólo si tienes la seguridad de que necesitas hacerlo.",
+    "config-pg-test-error": "No se puede conectar a la base de datos '''$1''': $2",
+    "config-sqlite-dir": "Directorio de datos SQLite:",
+    "config-sqlite-dir-help": "SQLite almacena todos los datos en un único archivo.\n\nEl directorio que proporcione debe ser escribible por el servidor Web durante la instalación.\n\n'''No''' debería ser accesible a través de Internet, por eso no vamos a ponerlo en el sitio donde están los archivos PHP.\n\nEl instalador escribirá un archivo <code>.htaccess</code> junto con él, pero si falla alguien podría tener acceso a la base de datos en bloque.\nEso incluye los datos de usuario en bloque (direcciones de correo electrónico, las contraseñas con hash) así como revisiones eliminadas y otros datos restringidos del wiki.\n\nConsidere la posibilidad de poner la base de datos en algún otro sitio, por ejemplo en <code>/var/lib/mediawiki/yourwiki</code> .",
+    "config-oracle-def-ts": "Espacio de tablas por defecto:",
+    "config-oracle-temp-ts": "Espacio de tablas temporal:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "MediaWiki es compatible con los siguientes sistemas de bases de datos:\n\n$1\n\nSi no encuentras en el listado el sistema de base de datos que estás intentando utilizar, sigue las instrucciones vinculadas arriba para habilitar la compatibilidad.",
+    "config-support-mysql": "* $1 es la base de datos mayoritaria para MediaWiki y la que goza de mayor compatibilidad ([http://www.php.net/manual/es/mysql.installation.php cómo compilar PHP con compatibilidad MySQL])",
+    "config-support-postgres": "$1 es un popular sistema de base de datos de código abierto, alternativa a MySQL. ([http://www.php.net/manual/es/pgsql.installation.php cómo compilar PHP con compatibilidad PostgreSQL]). Puede haber algunos defectos menores destacables, y no es recomendable para uso en un entorno de producción.",
+    "config-support-sqlite": "* $1 es una base de datos ligera con gran compatibilidad con MediaWiki ([http://www.php.net/manual/es/pdo.installation.php cómo compilar PHP con compatibilidad SQLite usando PDO]).",
+    "config-support-oracle": "* $1 es una base de datos comercial a nivel empresarial ([http://www.php.net/manual/es/oci8.installation.php cómo compilar PHP con compatibilidad con OCI8])",
+    "config-header-mysql": "Configuración de MySQL",
+    "config-header-postgres": "Configuración de PostgreSQL",
+    "config-header-sqlite": "Configuración de SQLite",
+    "config-header-oracle": "Configuración de Oracle",
+    "config-invalid-db-type": "Tipo de base de datos inválida",
+    "config-missing-db-name": "Debes introducir un valor para \"Nombre de la base de datos\"",
+    "config-missing-db-host": "Debe introducir un valor para \"Servidor (host) de base de datos\"",
+    "config-missing-db-server-oracle": "Debe introducir un valor para \"TNS de la base de datos\"",
+    "config-invalid-db-server-oracle": "El TNS de la base de datos, \"$1\", es inválido.Use sólo carateres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_) y guiones (-).Usa sólo caracteres ASCII: letras (a-z, A-Z), dígitos (0-9), guiones bajos (_) y puntos (.).",
+    "config-invalid-db-name": "El nombre de la base de datos \"$1\"  es inválido.\nUsa sólo caracteres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_)y guiones (-).",
+    "config-invalid-db-prefix": "El prefijo de la base de datos \"$1\"  es inválido.\nUse sólo carateres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_) y guiones (-).",
+    "config-connection-error": "$1.\n\nVerifique el servidor, el nombre de usuario y la contraseña, e intente de nuevo.",
+    "config-invalid-schema": "El esquema de la base de datos \"$1\"  es inválido.\nUse sólo carateres ASCII: letras (a-z, A-Z), guarismos (0-9) y guiones bajos (_).",
+    "config-db-sys-create-oracle": "El instalador sólo admite el empleo de cuentas SYSDBA como método para crear una cuenta nueva.",
+    "config-db-sys-user-exists-oracle": "La cuenta de usuario \"$1\" ya existe. ¡SYSDBA sólo puede utilizarse para crear una nueva cuenta!",
+    "config-postgres-old": "Se necesita PostgreSQL $1 o una versión más reciente; tienes la versión $2.",
+    "config-sqlite-name-help": "Elige el nombre que identificará tu wiki.\nNo uses espacios o guiones.\nEste nombre será usado como nombre del archivo de datos de SQLite.",
+    "config-sqlite-parent-unwritable-group": "No se puede crear el directorio de datos <code><nowiki>$1</nowiki></code> , porque el directorio padre <code><nowiki>$2</nowiki></code> no es accesible en escritura por el servidor Web.\n\nEl instalador ha determinado el usuario cuyo servidor Web se está ejecutando.\nConceda permisos de escritura en el directorio <code><nowiki>$3</nowiki></code> para continuar.\nEn un sistema Unix/Linux haga:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "No se puede crear el directorio de datos <code><nowiki>$1</nowiki></code> , porque el directorio padre <code><nowiki>$2</nowiki></code> no es accesible en escritura por el servidor Web.\n\nEl programa de instalación no pudo determinar el usuario que se ejecuta en el servidor Web\nConceda permisos de escritura en el directorio <code><nowiki>$3</nowiki></code> para continuar.\nEn un sistema Unix/Linux haga:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Error al crear el directorio de datos \"$1\".\nComprueba la ubicación e inténtalo de nuevo.",
+    "config-sqlite-dir-unwritable": "No se puede escribir en el directorio \"$1\".\nModifica los permisos para que el servidor web pueda escribir en él y vuelve a intentarlo.",
+    "config-sqlite-connection-error": "$1.\n\nVerifique el directório de datos y el nombre de la base de datos mostrada a continuación e inténtalo nuevamente.",
+    "config-sqlite-readonly": "El archivo <code>$1</code> no se puede escribir.",
+    "config-sqlite-cant-create-db": "No fue posible crear el archivo de la base de datos <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "El PHP no tiene compatibilidad FTS3. actualizando tablas a una versión anterior",
+    "config-can-upgrade": "Esta base de datos contiene tablas de MediaWiki.\nPara actualizarlas a MediaWiki $1, haz clic en '''Continuar'''.",
+    "config-upgrade-done": "Actualización completa.\n\nUsted puede ahora [ $1  empezar a usar su wiki].\n\nSi desea regenerar su archivo <code>LocalSettings.php</code> de archivo, haga clic en el botón de abajo.\nEsto '''no se recomienda''' a menos que esté teniendo problemas con su wiki.",
+    "config-upgrade-done-no-regenerate": "Actualización completa.\n\nUsted puede ahora [$1  empezar a usar su wiki].",
+    "config-regenerate": "Regenerar LocalSettings.php →",
+    "config-show-table-status": "<code>SHOW TABLE STATUS</code> ha fallado!",
+    "config-unknown-collation": "'''Advertencia:''' La base de datos está utilizando una intercalación no reconocida.",
+    "config-db-web-account": "Cuenta de base de datos para acceso Web",
+    "config-db-web-help": "Elige el usuario y contraseña que el servidor Web usará para conectarse al servidor de la base de datos durante el fincionamiento normal del wiki.",
+    "config-db-web-account-same": "Utilizar la misma cuenta que en la instalación",
+    "config-db-web-create": "Crear la cuenta si no existe",
+    "config-db-web-no-create-privs": "La cuenta que has especificado para la instalación no tiene privilegios suficientes para crear una cuenta.\nLa cuenta que especifiques aquí debe existir.",
+    "config-mysql-engine": "Motor de almacenamiento:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Atención''': Ha seleccionado MyISAM como motor de almacenamiento de MySQL, el cual no está recomendado para su uso con MediaWiki, porque:\n * apenas soporta accesos simultáneos debido al bloqueo de tablas\n * es más propenso a la corrupción que otros motores\n * el código MediaWiki no siempre controla MyISAM como debiera\n\nSi su instalación de MySQL soporta InnoDB, es muy recomendable que lo elija en su lugar.\nSi la instalación de MySQL no admite InnoDB, quizás es el momento de una actualización.",
+    "config-mysql-engine-help": "'''InnoDB''' es casi siempre la mejor opción, dado que soporta bien los accesos simultáneos.\n\n'''MyISAM''' es más rápido en instalaciones de usuario único o de sólo lectura.\nLas bases de datos MyISAM tienden a corromperse más a menudo que las bases de datos InnoDB.",
+    "config-mysql-charset": "Conjunto de caracteres de la base de datos:",
+    "config-mysql-binary": "Binario",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "En '''modo binario''', MediaWiki almacena texto UTF-8 para la base de datos en campos binarios.\nEsto es más eficiente que el modo UTF-8 de MySQL y le permite utilizar la gama completa de caracteres Unicode.\n\nEn '''modo UTF-8''', MySQL sabrá qué conjunto de caracteres emplean sus datos y puede presentarlos y convertirlos adecuadamente, pero no le permitirá almacenar caracteres por encima del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plano multilingüe básico].",
+    "config-site-name": "Nombre del wiki:",
+    "config-site-name-help": "Esto aparecerá en la barra de título del navegador y en varios otros lugares.",
+    "config-site-name-blank": "Ingresar un nombre de sitio.",
+    "config-project-namespace": "Espacio de nombre de proyecto:",
+    "config-ns-generic": "Proyecto",
+    "config-ns-site-name": "Igual como el nombre del wiki: $1",
+    "config-ns-other": "Otro (especificar)",
+    "config-ns-other-default": "MiWiki",
+    "config-project-namespace-help": "Siguiendo el ejemplo de  Wikipedia, muchos wikis mantienen sus páginas de políticas separadas de sus páginas de contenido, en un \"'''espacio de nombres del proyecto'''\".\n\nTodos los títulos de página en este espacio de nombres comienzan con un determinado prefijo, que usted puede especificar aquí.\nTradicionalmente, este prefijo se deriva del nombre del wiki, pero no puede contener caracteres de puntuación como \"#\" o \":\".",
+    "config-ns-invalid": "El espacio de nombre especificado \"<nowiki>$1</nowiki>\" no es válido.\nEspecifica un espacio de nombre de proyecto diferente.",
+    "config-ns-conflict": "El espacio de nombres especificado \"<nowiki>$1</nowiki>\" entra en conflicto con un espacio de nombres predeterminado de MediaWiki.\nEspecifique un espacio de nombres de proyecto diferente.",
+    "config-admin-box": "Cuenta de administrador",
+    "config-admin-name": "Su nombre:",
+    "config-admin-password": "Contraseña:",
+    "config-admin-password-confirm": "Repita la contraseña:",
+    "config-admin-help": "Escribe aquí el nombre de usuario que desees, como por ejemplo \"Pedro Bloggs\".\nEste es el nombre que usarás para entrar al wiki.",
+    "config-admin-name-blank": "Introduce un nombre de usuario de administrador.",
+    "config-admin-name-invalid": "El nombre de usuario especificado \"<nowiki>$1</nowiki>\" no es válido.\nEspecifique un nombre de usuario diferente.",
+    "config-admin-password-blank": "Introduzca una contraseña para la cuenta de administrador.",
+    "config-admin-password-same": "La contraseña no debe ser la misma que el nombre de usuario.",
+    "config-admin-password-mismatch": "Las dos contraseñas que ingresaste no coinciden.",
+    "config-admin-email": "Dirección de correo electrónico:",
+    "config-admin-email-help": "Introduce aquí un correo electrónico que te permita recibir mensajes de otros usuarios del wiki, vuelve a configurar tu contraseña y recibe notificaciones de cambios realizados a tus páginas vigiladas. Puedes dejar este campo vacío.",
+    "config-admin-error-user": "Error interno al crear un administrador con el nombre \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Error interno al establecer una contraseña para el administrador \" <nowiki>$1</nowiki> \": <pre>$2</pre>",
+    "config-admin-error-bademail": "Ha introducido una dirección de correo electrónico inválida.",
+    "config-subscribe": "Suscribirse para recibir [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce avisos de nuevas versiones].",
+    "config-subscribe-help": "Esta es una lista de divulgación de bajo volumen para anuncios de lanzamiento de versiones nuevas, incluyendo anuncios de seguridad importantes.\nTe recomendamos suscribirte y actualizar tu instalación MediaWiki cada vez que se lance una nueva versión.",
+    "config-subscribe-noemail": "Ha intentado suscribirse a la lista de correo de anuncios de nuevos lanzamientos sin proporcionar una dirección de correo electrónico.\nProporcione una dirección de correo electrónico si desea suscribirse a la lista de correo.",
+    "config-almost-done": "¡Ya casi has terminado!\nAhora puedes saltarte el resto de pasos e instalar el wiki con valores predeterminados.",
+    "config-optional-continue": "Hazme más preguntas.",
+    "config-optional-skip": "Ya estoy aburrido, sólo instala el wiki.",
+    "config-profile": "Perfil de derechos de usuario:",
+    "config-profile-wiki": "Wiki abierto",
+    "config-profile-no-anon": "Creación de cuenta requerida",
+    "config-profile-fishbowl": "Sólo editores autorizados",
+    "config-profile-private": "Wiki privado",
+    "config-profile-help": "Los wikis funcionan mejor cuando dejas que los edite tanta gente como sea posible.\nEn MediaWiki, es fácil revisar los cambios recientes y revertir los daños realizados por usuarios malintencionados o novatos.\nSin embargo, muchos han encontrado que MediaWiki es útil para una amplia variedad de funciones, y a veces no es fácil convencer a todos de los beneficios de la forma wiki.\nPor lo tanto tienes la elección.\n\nUn '''{{int:config-profile-wiki}}''' permite que cualquiera pueda editar, sin siquiera iniciar sesión.\nUn wiki con '''{{int:config-profile-no-anon}}''' ofrece rendición de cuentas adicional, pero puede disuadir a colaboradores.\n\nEl escenario '''{{int:config-profile-fishbowl}}''' permite editar a los usuarios autorizados, pero el público puede ver las páginas, incluyendo el historial.\nUn '''{{int:config-profile-private}}''' sólo permite ver páginas a los usuarios autorizados, el mismo grupo al que le está permitido editar.\n\nConfiguraciones más complejas de derechos de usuario están disponibles después de la instalación, consulte [//www.mediawiki.org/wiki/Manual:User_rights esta entrada en el manual].",
+    "config-license": "Copyright and licencia:",
+    "config-license-none": "Pie sin licencia",
+    "config-license-cc-by-sa": "Creative Commons Reconocimiento Compartir Igual",
+    "config-license-cc-by": "Creative Commons Reconocimiento",
+    "config-license-cc-by-nc-sa": "Creative Commons Reconocimiento Compartir Igual no comercial",
+    "config-license-cc-0": "Creative Commons Zero (dominio público)",
+    "config-license-gfdl": "Licencia de documentación libre de GNU 1.3 o posterior",
+    "config-license-pd": "Dominio Público",
+    "config-license-cc-choose": "Selecciona una licencia personalizada de Creative Commons",
+    "config-license-help": "Muchos wikis públicos ponen todas las contribuciones bajo una [http://freedomdefined.org/Definition licencia libre].\nEsto ayuda a crear un sentido de propiedad comunitaria y alienta la contribución a largo plazo.\nEsto no es generalmente necesario para un wiki privado o corporativo.\n\nSi desea poder utilizar texto de Wikipedia, y desea que Wikipedia pueda aceptar el texto copiado de tu wiki, debe elegir '''Creative Commons Reconocimiento Compartir Igual'''.\n\nWikipedia utilizaba anteriormente la licencia de documentación libre de GNU (GFDL).\nLa GFDL es una licencia válida, pero es difícil de entender.\nTambién es difícil reutilizar el contenido licenciado bajo la GFDL.",
+    "config-email-settings": "Configuración de correo electrónico",
+    "config-enable-email": "Activar el envío de correos electrónicos",
+    "config-enable-email-help": "Si quieres que el correo electrónico funcione, la [http://www.php.net/manual/en/mail.configuration.php configuración PHP de correo electrónico] debe ser la correcta.\nSi no quieres la funcionalidad de correo electrónico, puedes desactivarla aquí.",
+    "config-email-user": "Habilitar correo electrónico de usuario a usuario",
+    "config-email-user-help": "Permitir que todos los usuarios intercambien correos electrónicos si lo han activado en sus preferencias.",
+    "config-email-usertalk": "Activar notificaciones de páginas de discusión de usuarios",
+    "config-email-usertalk-help": "Permitir a los usuarios recibir notificaciones de cambios en la página de discusión de usuario, si lo han activado en sus preferencias.",
+    "config-email-watchlist": "Activar notificación de alteraciones a la páginas vigiladas",
+    "config-email-watchlist-help": "Permitir a los usuarios recibir notificaciones de cambios en la páginas que vigilan, si lo han activado en sus preferencias.",
+    "config-email-auth": "Activar autenticación del correo electrónico",
+    "config-email-auth-help": "Si esta opción está habilitada, los usuarios tienen que confirmar su dirección de correo electrónico mediante un enlace que se les envía a ellos cuando éstos lo establecen o lo cambian.\nSolo las direcciones de correo electrónico autenticadas pueden recibir correos electrónicos de otros usuarios o correos electrónicos de notificación de cambios.\nEsta opción está '''recomendada''' para wikis públicos debido a posibles abusos de las características del correo electrónico.",
+    "config-email-sender": "Dirección de correo electrónico de retorno:",
+    "config-email-sender-help": "Introduce la dirección de correo electrónico que será usada como dirección de retorno en los mensajes electrónicos de salida.\nAquí llegarán los correos electrónicos que no lleguen a su destino.\nMuchos servidores de correo electrónico exigen que por lo menos la parte del nombre del dominio sea válida.",
+    "config-upload-settings": "Cargas de imágenes y archivos",
+    "config-upload-enable": "Habilitar la subida de archivos",
+    "config-upload-help": "La carga de archivos expone potencialmente su servidor a riesgos de seguridad.\nPara obtener más información, lea la [//www.mediawiki.org/wiki/Manual:Security sección de seguridad] en el manual.\n\nPara habilitar la carga de archivos, cambie el modo en el subdirectorio <code>images</code> bajo el directorio raíz de MediaWiki para que el servidor web pueda escribir en él.\nA continuación, habilite esta opción.",
+    "config-upload-deleted": "*Directorio para los archivos eliminados:",
+    "config-upload-deleted-help": "Elige un directorio en el que guardar los archivos eliminados.\nLo ideal es una carpeta no accesible desde la red.",
+    "config-logo": "URL del logo :",
+    "config-logo-help": "La apariencia por defecto de MediaWiki incluye espacio para un logotipo de 135x160 píxeles encima del menú de la barra lateral.\nCargue una imagen de tamaño adecuado e introduzca la dirección URL aquí.\n\nSi no desea un logotipo, deje esta casilla en blanco.",
+    "config-instantcommons": "Habilitar Instant Commons",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] es una característica que permite que los wikis puedan utilizar imágenes, sonidos y otros archivos multimedia que se encuentran en el sitio [//commons.wikimedia.org/ Wikimedia Commons].\nPara ello, MediaWiki requiere acceso a Internet.\n\nPara obtener más información sobre esta función, incluidas las instrucciones sobre cómo configurarlo para otras wikis distintas de Wikimedia Commons, consulte [//mediawiki.org/wiki/Manual:$wgForeignFileRepos el manual].",
+    "config-cc-error": "El selector de licencia de Creative Commons no dio resultado.\nEscribe el nombre de la licencia manualmente.",
+    "config-cc-again": "Elegir otra vez...",
+    "config-cc-not-chosen": "Elige la licencia Creative Commons que desees y haz clic en \"continuar\".",
+    "config-advanced-settings": "Configuración avanzada",
+    "config-cache-options": "Configuración de la caché de objetos:",
+    "config-cache-help": "El almacenamiento en caché de objetos se utiliza para mejorar la velocidad de MediaWiki mediante el almacenamiento en caché los datos usados más frecuentemente.\nA los sitios medianos y grandes se les recomienda que permitirlo. También es beneficioso para los sitios pequeños.",
+    "config-cache-none": "Sin almacenamiento en caché (no se pierde ninguna funcionalidad, pero la velocidad puede resentirse en sitios grandes)",
+    "config-cache-accel": "Almacenamiento en caché de objetos PHP (APC, XCache o WinCache)",
+    "config-cache-memcached": "Utilizar Memcached (necesita ser instalado y configurado aparte)",
+    "config-memcached-servers": "Servidores Memcached:",
+    "config-memcached-help": "Lista de direcciones IP que serán usadas por Memcached.\nDeben especificarse una por cada línea y especificar el puerto a utilizar. Por ejemplo:\n127.0.0.1:11211\n192.168.1.25:1234",
+    "config-memcache-needservers": "Ha seleccionado Memcached como su tipo de caché pero no especificó ninguno de los servidores.",
+    "config-memcache-badip": "Ha introducido una dirección IP no válida para Memcached:  $1 .",
+    "config-memcache-noport": "No ha especificado un puerto a usar en el servidor Memcached:  $1 .\nSi no conoce el puerto, el valor predeterminado es 11211.",
+    "config-memcache-badport": "Los números de puerto de Memcached deben estar entre  $1  y  $2.",
+    "config-extensions": "Extensiones",
+    "config-extensions-help": "Se ha detectado en tu directorio <code>./extensions</code>  las extensiones listadas arriba.\n\nPuede que necesiten configuraciones adicionales, pero puedes habilitarlas ahora.",
+    "config-install-alreadydone": "'''Aviso:''' Parece que ya habías instalado MediaWiki y estás intentando instalarlo nuevamente.\nPasa a la próxima página, por favor.",
+    "config-install-begin": "Pulsando \"{{int:config-continue}}\", se iniciará la instalación de MediaWiki.\nSi todavía desea realizar algún cambio, pulse atrás.",
+    "config-install-step-done": "hecho",
+    "config-install-step-failed": "falló",
+    "config-install-extensions": "Extensiones inclusive",
+    "config-install-database": "Configurando la base de datos",
+    "config-install-schema": "Creando el esquema",
+    "config-install-pg-schema-not-exist": "El esquema PostgreSQL no existe.",
+    "config-install-pg-schema-failed": "La creación de las tablas ha fallado.\nAsegúrate de que el usuario \"$1\" puede escribir en el esquema \"$2\".",
+    "config-install-pg-commit": "Validando los cambios",
+    "config-install-pg-plpgsql": "Comprobación de lenguaje PL/pgSQL",
+    "config-pg-no-plpgsql": "Necesita instalar el lenguaje PL/pgSQL en la base de datos $1",
+    "config-pg-no-create-privs": "La cuenta especificada para la instalación no tiene suficientes privilegios para crear una cuenta.",
+    "config-pg-not-in-role": "La cuenta especificada para el usuario web ya existe.\nLa cuenta especificada para la instalación no es de un superusuario y no es miembro del grupo de usuarios con acceso a la web, por lo que es incapaz de crear objetos pertenecientes al usuario web.\n\nMediaWiki requiere actualmente que las tablas sean propiedad del usuario web. Especifique otro nombre de cuenta web, o haga clic en \"atrás\" y especifique un usuario de instalación con los privilegios convenientes.",
+    "config-install-user": "Creando el usuario de la base de datos",
+    "config-install-user-alreadyexists": "El usuario \"$1\" ya existe",
+    "config-install-user-create-failed": "La creación del usuario \"$1\" falló:  $2",
+    "config-install-user-grant-failed": "La concesión de permisos para el usuario \"$1\" ha fallado: $2",
+    "config-install-user-missing": "El usuario especificado \"$1\" no existe.",
+    "config-install-user-missing-create": "El usuario especificado \"$1\" no existe.\nPor favor, haga clic en la casilla \"Crear cuenta\" que aparece a continuación si desea crearlo.",
+    "config-install-tables": "Creando tablas",
+    "config-install-tables-exist": "'''Advertencia''': Al parecer, las tablas de MediaWiki ya existen. Saltándose su creación.",
+    "config-install-tables-failed": "'''Error''': La creación de las tablas falló con el siguiente error: $1",
+    "config-install-interwiki": "Llenando la tabla interwiki predeterminada",
+    "config-install-interwiki-list": "No se pudo encontrar el archivo <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "'''Advertencia''': La tabla de interwikis parece ya contener entradas.\nSe omitirá la lista predeterminada.",
+    "config-install-stats": "Iniciando las estadísticas",
+    "config-install-keys": "Generación de claves secretas",
+    "config-insecure-keys": "''' Atención:'' '  {{PLURAL:$2|Una clave de seguridad generada|Las claves de seguridad generadas}} ($1) durante la instalación no  {{PLURAL:$2|es totalmente segura|son totalmente seguras}}. Considere {{PLURAL:$2| cambiarla|cambiarlas}} manualmente.",
+    "config-install-sysop": "Creando cuenta de usuario del administrador",
+    "config-install-subscribe-fail": "No se ha podido suscribir a mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "cURL no está instalado y allow_url_fopen no está disponible.",
+    "config-install-mainpage": "Creando página principal con contenido predeterminado",
+    "config-install-extension-tables": "Creando las tablas para las extensiones habilitadas",
+    "config-install-mainpage-failed": "No se pudo insertar la página principal: $1",
+    "config-install-done": "''' Felicidades!'''\nHa instalado MediaWiki correctamente.\n\nEl instalador ha generado un  archivo<code>LocalSettings.php</code>.\nContiene toda su configuración.\n\nDeberá descargarlo y ponerlo en la base de la instalación de wiki (el mismo directorio que index.php). Debería haber comenzado automáticamente la descarga.\n\nSi no comenzó la descarga, o si se ha cancelado, puede reiniciar la descarga haciendo clic en el enlace siguiente:\n$3\n\n'''Nota''': Si no haces esto ahora, este archivo de configuración generado no estará disponible para usted más tarde si sale de la instalación sin descargarlo.\n\nCuando lo haya hecho, usted puede '''[$2  entrar en su wiki]'''.",
+    "config-download-localsettings": "Descargar archivo <code>LocalSettings.php</code>",
+    "config-help": "Ayuda",
+    "config-nofile": "El archivo \"$1\" no se pudo encontrar. ¿Se ha eliminado?",
+    "mainpagetext": "'''MediaWiki ha sido instalado con éxito.'''",
+    "mainpagedocfooter": "Consulta la [//meta.wikimedia.org/wiki/Ayuda:Guía del usuario de contenidos] para obtener información sobre el uso del software wiki.\n\n== Empezando ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de ajustes de configuración]\n* [//www.mediawiki.org/wiki/Manual:FAQ/es FAQ de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Regionalizar MediaWiki para tu idioma]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/et.json b/includes/installer/i18n/et.json
new file mode 100644 (file)
index 0000000..710e218
--- /dev/null
@@ -0,0 +1,67 @@
+{
+    "@metadata": {
+        "authors": [
+            "Avjoska",
+            "Pikne"
+        ]
+    },
+    "config-information": "Teave",
+    "config-session-error": "Tõrge seansi alustamisel: $1",
+    "config-your-language": "Oma keel:",
+    "config-wiki-language": "Viki keel:",
+    "config-back": "← Tagasi",
+    "config-continue": "Jätka →",
+    "config-page-language": "Keel",
+    "config-page-welcome": "Tere tulemast MediaWikisse!",
+    "config-page-dbconnect": "Andmebaasiga ühendamine",
+    "config-page-upgrade": "Olemasoleva installi uuendus",
+    "config-page-dbsettings": "Andmebaasi sätted",
+    "config-page-name": "Nimi",
+    "config-page-options": "Seaded",
+    "config-page-install": "Paigaldamine",
+    "config-page-complete": "Valmis!",
+    "config-page-restart": "Alusta installimist uuesti",
+    "config-page-readme": "Loe mind",
+    "config-page-copying": "Kopeerimine",
+    "config-page-upgradedoc": "Uuendamine",
+    "config-page-existingwiki": "Olemasolev viki",
+    "config-restart": "Jah, tee taaskäivitus",
+    "config-db-name": "Andmebaasi nimi:",
+    "config-db-username": "Andmebaasi kasutajanimi:",
+    "config-db-password": "Andmebaasi parool:",
+    "config-db-port": "Andmebaasi port:",
+    "config-invalid-db-type": "Vigane andmebaasi tüüp",
+    "config-site-name": "Viki nimi:",
+    "config-site-name-blank": "Sisestage lehekülje nimi.",
+    "config-project-namespace": "Projekti nimeruum:",
+    "config-ns-generic": "Projekt",
+    "config-admin-box": "Administraatorikonto",
+    "config-admin-name": "Sinu nimi:",
+    "config-admin-password": "Parool:",
+    "config-admin-password-confirm": "Parool uuesti:",
+    "config-admin-name-blank": "Sisesta administraatori kasutajanimi.",
+    "config-admin-password-blank": "Sisesta administraatorikonto parool.",
+    "config-admin-password-same": "Parool ei tohi kattuda kasutajanimega.",
+    "config-admin-password-mismatch": "Sisestatud kaks parooli ei lange kokku.",
+    "config-admin-email": "E-posti aadress:",
+    "config-admin-error-bademail": "Sisestasid vigase e-posti aadressi.",
+    "config-optional-continue": "Küsi minult veel küsimusi.",
+    "config-profile-private": "Eraviki",
+    "config-license": "Autoriõigus ja litsents:",
+    "config-license-none": "Litsentsijaluseta",
+    "config-license-cc-by-sa": "Creative Commonsi litsents \"Autorile viitamine + jagamine samadel tingimustel\"",
+    "config-license-cc-by": "Creative Commonsi litsents \"Autorile viitamine\"",
+    "config-license-cc-by-nc-sa": "Creative Commonsi litsents \"Autorile viitamine + mitteäriline eesmärk + jagamine samadel tingimustel\"",
+    "config-email-settings": "E-posti sätted",
+    "config-email-sender": "Saatja e-aadress:",
+    "config-logo": "Logo internetiaadress:",
+    "config-cc-again": "Vali uuesti...",
+    "config-extensions": "Lisad",
+    "config-install-step-done": "valmis",
+    "config-install-step-failed": "ebaõnnestus",
+    "config-install-user-alreadyexists": "Kasutaja \"$1\" on juba olemas",
+    "config-install-tables": "Tabelite loomine",
+    "config-help": "abi",
+    "mainpagetext": "'''MediaWiki tarkvara on edukalt paigaldatud.'''",
+    "mainpagedocfooter": "Vikitarkvara kasutamise kohta leiad lisateavet [//meta.wikimedia.org/wiki/Help:Contents juhendist].\n\n== Alustamine ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Häälestussätete loend]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki KKK]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki versiooniuuenduste postiloend]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki lokaliseerimine]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/eu.json b/includes/installer/i18n/eu.json
new file mode 100644 (file)
index 0000000..a0033bd
--- /dev/null
@@ -0,0 +1,76 @@
+{
+    "@metadata": {
+        "authors": [
+            "An13sa",
+            "පසිඳු කාවින්ද"
+        ]
+    },
+    "config-desc": "MediaWiki instalatzailea",
+    "config-title": "MediaWiki $1 instalazioa",
+    "config-information": "Informazioa",
+    "config-session-error": "Saio hasierako errorea: $1",
+    "config-your-language": "Zure hizkuntza:",
+    "config-your-language-help": "Aukeratu instalazio prozesuan erabiliko den hizkuntza",
+    "config-wiki-language": "Wiki hizkuntza:",
+    "config-back": "← Atzera",
+    "config-continue": "Jarraitu →",
+    "config-page-language": "Hizkuntza",
+    "config-page-welcome": "Ongi etorri MediaWikira!",
+    "config-page-dbconnect": "Datu-basera konektatu",
+    "config-page-dbsettings": "Datu-basearen ezarpenak",
+    "config-page-name": "Izena",
+    "config-page-options": "Aukerak",
+    "config-page-install": "Instalatu",
+    "config-page-complete": "Bukatua!",
+    "config-page-restart": "Instalazioa berriz hasi",
+    "config-page-readme": "Irakur nazazu",
+    "config-page-copying": "Kopiatzea",
+    "config-page-upgradedoc": "Eguneratu",
+    "config-restart": "Bai, berriz hasi",
+    "config-sidebar": "* [//www.mediawiki.org MediaWiki nagusia]\n* [//www.mediawiki.org/wiki/Help:Contents Erabiltzaileentzako Gida]\n* [//www.mediawiki.org/wiki/Manual:Contents Administratzaileentzako Gida]\n* [//www.mediawiki.org/wiki/Manual:FAQ MEG]\n----\n* <doclink href=Readme>Irakur nazazu</doclink>\n* <doclink href=ReleaseNotes>Oharren argitalpena</doclink>\n* <doclink href=Copying>Kopiaketa</doclink>\n* <doclink href=UpgradeDoc>Eguneratzea</doclink>",
+    "config-env-php": "PHP $1 instalatuta dago.",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] instalatuta dago",
+    "config-apc": "[http://www.php.net/apc APC] instalatuta dago",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] instalatuta dago",
+    "config-diff3-bad": "GNU diff3 ez da aurkitu.",
+    "config-db-type": "Datu-base mota:",
+    "config-db-wiki-settings": "Wiki hau identifikatu",
+    "config-db-name": "Datu-base izena:",
+    "config-db-username": "Datu-base lankide izena:",
+    "config-db-password": "Datu-base pasahitza:",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 bitarra",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-header-mysql": "MySQL hobespenak",
+    "config-header-postgres": "PostgreSQL hobespenak",
+    "config-header-sqlite": "SQLite hobespenak",
+    "config-header-oracle": "Oracle hobespenak",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-binary": "Bitarra",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Wikiaren izena:",
+    "config-project-namespace": "Proiektuaren izen-tartea:",
+    "config-ns-generic": "Proiektua",
+    "config-ns-other": "Bestelakoa (zehaztu)",
+    "config-ns-other-default": "MyWiki",
+    "config-admin-box": "Administratzaile kontua",
+    "config-admin-name": "Zure izena:",
+    "config-admin-password": "Pasahitza:",
+    "config-admin-password-confirm": "Pasahitza berriz:",
+    "config-admin-email": "E-posta helbidea:",
+    "config-profile-wiki": "Wiki tradizionala",
+    "config-profile-private": "Wiki pribatua",
+    "config-license": "Copyright eta lizentzia:",
+    "config-license-pd": "Domeinu Askea",
+    "config-email-settings": "E-posta hobespenak",
+    "config-logo": "Logo URL:",
+    "config-extensions": "Luzapenak",
+    "config-install-step-done": "egina",
+    "config-help": "Laguntza",
+    "mainpagetext": "'''MediaWiki arrakastaz instalatu da.'''",
+    "mainpagedocfooter": "Ikus [//meta.wikimedia.org/wiki/Help:Contents Erabiltzaile Gida] wiki softwarea erabiltzen hasteko informazio gehiagorako.\n\n== Nola hasi ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfigurazio balioen zerrenda]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ (Maiz egindako galderak)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWikiren argitalpenen posta zerrenda]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ext.json b/includes/installer/i18n/ext.json
new file mode 100644 (file)
index 0000000..9e0af3d
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MeyaGüiqui s'á istalau satihatoriamenti.'''",
+    "mainpagedocfooter": "Consurta la [//meta.wikimedia.org/wiki/Help:Contents User's Guide] pa sabel mas al tentu el huncionamientu el software güiqui.\n\n== Esminciandu ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/fa.json b/includes/installer/i18n/fa.json
new file mode 100644 (file)
index 0000000..b469b79
--- /dev/null
@@ -0,0 +1,65 @@
+{
+    "@metadata": {
+        "authors": [
+            "Mjbmr"
+        ]
+    },
+    "config-desc": "نصب کنندهٔ ویکی‌مدیا",
+    "config-title": "نصب ویکی‌مدیا $1",
+    "config-information": "اطلاعات",
+    "config-localsettings-key": "کلید ارتقا:",
+    "config-your-language": "زبان شما:",
+    "config-wiki-language": "زبان ویکی:",
+    "config-back": "→ بازگشت",
+    "config-continue": "ادامه ←",
+    "config-page-language": "زبان",
+    "config-page-welcome": "به مدیاویکی خوش آمدید!",
+    "config-page-dbconnect": "اتصال به پایگاه داده",
+    "config-page-name": "نام",
+    "config-page-options": "گزینه‌ها",
+    "config-page-install": "نصب",
+    "config-page-complete": "کامل!",
+    "config-page-readme": "مرا بخوان",
+    "config-page-releasenotes": "یادداشت‌های انتشار",
+    "config-page-copying": "تکثیر",
+    "config-page-upgradedoc": "ارتقا",
+    "config-page-existingwiki": "ویکی موجود",
+    "config-restart": "بله ، آن دوباره راه اندازی کن",
+    "config-sidebar": "* [//www.mediawiki.org صفحهٔ اصلی مدیاویکی]\n* [//www.mediawiki.org/wiki/Help:Contents راهنمای کاربر]\n* [//www.mediawiki.org/wiki/Manual:Contents راهنمای مدیر]\n* [//www.mediawiki.org/wiki/Manual:FAQ پرسش‌های رایج]\n----\n* <doclink href=Readme>مرا بخوان</doclink>\n* <doclink href=ReleaseNotes>یادداشت‌های انتشار</doclink>\n* <doclink href=Copying>نسخه برداری</doclink>\n* <doclink href=UpgradeDoc>ارتقا</doclink>",
+    "config-env-php": "پی‌اچ‌پی $1 نصب شده است.",
+    "config-env-php-toolow": "پی‌اچ‌پی $1 نصب شده است.\nدر هر صورت، مدیاویکی نیاز به پی‌اچ‌پی نسخهٔ $2 یا بالاتر دارد.",
+    "config-db-type": "نوع پایگاه اطلاعات:",
+    "config-db-host": "میزبان پایگاه اطلاعات:",
+    "config-db-username": "نام کاربری پایگاه اطلاعات:",
+    "config-db-password": "کلمه عبور پایگاه اطلاعات:",
+    "config-mysql-old": "مای‌اس‌کیو‌ال نسخهٔ $1 و یا بالاتر نیاز است، شما نسخهٔ $2 را دارید.",
+    "config-db-port": "درگاه پایگاه‌داده:",
+    "config-header-mysql": "تنظیمات مای‌اس‌کیو‌ال",
+    "config-connection-error": "$1.\n\nمیزبان، نام کاربری و گذرواژه را بررسی کنید و دوباره امتحان کنید.",
+    "config-mysql-binary": "دودویی",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "نام ویکی:",
+    "config-site-name-blank": "نام تارنما را وارد کنید.",
+    "config-project-namespace": "فضای نام پروژه:",
+    "config-ns-generic": "پروژه",
+    "config-ns-other-default": "ویکی‌من",
+    "config-admin-box": "حساب مدیر سیستم",
+    "config-admin-name": "نام شما:",
+    "config-admin-password": "کلمه عبور:",
+    "config-admin-password-confirm": "دوباره کلمه عبور:",
+    "config-admin-email": "پست الکترونیکی شما:",
+    "config-profile-private": "ویکی خصوصی",
+    "config-license": "حق تکثیر و مجوز:",
+    "config-license-none": "بدون پاورقی مجوز",
+    "config-license-pd": "دامنه عمومی",
+    "config-license-cc-choose": "انتخاب یک مجوز سفارشی عوام خلاق",
+    "config-email-settings": "تنظیمات پست الکترونیکی",
+    "config-upload-enable": "فعال سازی بارگذاری پرونده",
+    "config-logo": "نشانی نامواره:",
+    "config-extensions": "افزونه‌ها",
+    "config-install-step-done": "انجام شد",
+    "config-install-step-failed": "ناموفق بود",
+    "config-help": "راهنما",
+    "mainpagetext": "'''نرم‌افزار ویکی با موفقیت نصب شد.'''",
+    "mainpagedocfooter": "از [//meta.wikimedia.org/wiki/Help:Contents راهنمای کاربران]\nبرای استفاده از نرم‌افزار ویکی کمک بگیرید.\n\n== آغاز به کار ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings تنظیم پیکربندی]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki پرسش‌های متداول]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce فهرست پست الکترونیکی نسخه‌های مدیاویکی]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/fi.json b/includes/installer/i18n/fi.json
new file mode 100644 (file)
index 0000000..149313a
--- /dev/null
@@ -0,0 +1,134 @@
+{
+    "@metadata": {
+        "authors": [
+            "Beluga",
+            "Centerlink",
+            "Crt",
+            "Nike",
+            "Olli",
+            "Silvonen",
+            "Str4nd",
+            "VezonThunder",
+            "아라"
+        ]
+    },
+    "config-desc": "MediaWiki-asennin",
+    "config-title": "MediaWikin version $1 asennus",
+    "config-information": "Tiedot",
+    "config-localsettings-upgrade": "<code>LocalSettings.php</code>-tiedosto havaittiin.\nKirjoita muuttujan <code>$wgUpgradeKey</code> arvo alla olevaan kenttään päivittääksesi asennuksen.\nLöydät sen <code>LocalSettings.php</code>-tiedostosta.",
+    "config-localsettings-cli-upgrade": "<code>LocalSettings.php</code>-tiedosto havaittiin.\nPäivitä asennus suorittamalla <code>update.php</code>.",
+    "config-localsettings-key": "Päivitysavain",
+    "config-localsettings-badkey": "Antamasi avain on virheellinen.",
+    "config-upgrade-key-missing": "Havaittiin aiempi MediaWiki-asennus.\nPäivittääksesi tämän asennuksen lisää <code>LocalSettings.php</code>-tiedostosi loppuun seuraava rivi:\n\n$1",
+    "config-localsettings-incomplete": "Nykyinen <code>LocalSettings.php</code>-tiedosto näyttää olevan puutteellinen.\nMuuttujaa $1 ei ole asetettu.\nMuuta <code>LocalSettings.php</code>-tiedostoa siten, että muuttuja on asetettu ja napsauta »{{int:Config-continue}}».",
+    "config-localsettings-connection-error": "Virhe yhdistettäessä tietokantaan käyttäen tiedostossa <code>LocalSettings.php</code> tai <code>AdminSettings.php</code> määritettyjä asetuksia. Korjaa asetukset ja yritä uudelleen.\n\n$1",
+    "config-session-error": "Istunnon aloittaminen epäonnistui: $1",
+    "config-session-expired": "Istuntotietosi näyttävät olevan vanhentuneita.\nIstuntojen elinajaksi on määritelty $1.\nVoit muuttaa tätä asetusta vaihtamalla kohtaa <code>session.gc_maxlifetime</code> php.ini-tiedostossa.\nKäynnistä asennusprosessi uudelleen.",
+    "config-no-session": "Istuntosi tiedot menetettiin!\nTarkista php.ini-tiedostosi ja varmista, että <code>session.save_path</code> on asetettu sopivaan kansioon.",
+    "config-your-language": "Asennuksen kieli",
+    "config-your-language-help": "Valitse kieli, jota haluat käyttää asennuksen ajan.",
+    "config-wiki-language": "Wikin kieli",
+    "config-wiki-language-help": "Valitse kieli, jota wikissä tullaan etupäässä käyttämään.",
+    "config-back": "← Takaisin",
+    "config-continue": "Jatka →",
+    "config-page-language": "Kieli",
+    "config-page-welcome": "Tervetuloa MediaWikiin!",
+    "config-page-dbconnect": "Tietokantaan yhdistäminen",
+    "config-page-upgrade": "Olemassa olevan asennuksen päivitys",
+    "config-page-dbsettings": "Tietokannan asetukset",
+    "config-page-name": "Nimi",
+    "config-page-options": "Asetukset",
+    "config-page-install": "Asenna",
+    "config-page-complete": "Valmis!",
+    "config-page-restart": "Aloita asennus alusta",
+    "config-page-readme": "Lue minut",
+    "config-page-releasenotes": "Julkaisutiedot",
+    "config-page-copying": "Kopiointi",
+    "config-page-upgradedoc": "Päivittäminen",
+    "config-page-existingwiki": "Aikaisempi asennus",
+    "config-help-restart": "Haluatko poistaa kaikki annetut tiedot ja aloittaa asennuksen alusta?",
+    "config-restart": "Kyllä",
+    "config-welcome": "=== Ympäristön tarkistukset ===\nVarmistetaan MediaWikin asennettavuus tähän ympäristöön.\nSinun pitäisi antaa näiden tarkistusten tulokset, jos tarvitset apua asennuksen aikana.",
+    "config-sidebar": "* [//www.mediawiki.org MediaWikin kotisivu]\n* [//www.mediawiki.org/wiki/Help:Contents Käyttöopas]\n* [//www.mediawiki.org/wiki/Manual:Contents Hallintaopas]\n* [//www.mediawiki.org/wiki/Manual:FAQ UKK]\n----\n* <doclink href=Readme>Lue minut</doclink>\n* <doclink href=ReleaseNotes>Julkaisutiedot</doclink>\n* <doclink href=Copying>Kopiointi</doclink>\n* <doclink href=UpgradeDoc>Päivittäminen</doclink>",
+    "config-env-good": "Asennusympäristö on tarkastettu.\nVoit asentaa MediaWikin.",
+    "config-env-bad": "Asennusympäristö on tarkastettu.\nEt voi asentaa MediaWikiä.",
+    "config-env-php": "PHP $1 on asennettu.",
+    "config-env-php-toolow": "PHP $1 on asennettu.\nMediaWiki vaatii PHP:n version $2 tai uudemman.",
+    "config-no-db": "Sopivaa tietokanta-ajuria ei löytynyt! Sinun täytyy asentaa tietokanta-ajurit PHP:lle.\nSeuraavat tietokantatyypit ovat tuettuja: $1.",
+    "config-safe-mode": "'''Varoitus:''' PHP:n [http://www.php.net/features.safe-mode safe mode] -tila on aktiivinen.\nSe voi aiheuttaa ongelmia erityisesti tiedostojen tallentamisen ja matemaattisten kaavojen kanssa.",
+    "config-pcre": "PCRE-tukimoduuli puuttuu.\nMediaWiki vaatii toimiakseen Perl-yhteensopivat säännölliset lausekkeet.",
+    "config-memory-bad": "'''Varoitus:''' PHP:n <code>memory_limit</code> on $1.\nTämä on luultavasti liian alhainen.\nAsennus saattaa epäonnistua!",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] on asennettu",
+    "config-apc": "[http://www.php.net/apc APC] on asennettu.",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] on asennettu",
+    "config-diff3-bad": "GNU diff3:a ei löytynyt.",
+    "config-db-type": "Tietokannan tyyppi",
+    "config-db-host": "Tietokantapalvelin",
+    "config-db-name": "Tietokannan nimi",
+    "config-db-username": "Tietokannan käyttäjätunnus",
+    "config-db-password": "Tietokannan salasana",
+    "config-db-install-help": "Anna käyttäjätunnus ja salasana, joita käytetään asennuksen aikana.",
+    "config-db-account-lock": "Käytä samaa tunnusta ja salasanaa myös asennuksen jälkeen",
+    "config-db-prefix": "Tietokantataulujen etuliite",
+    "config-db-charset": "Tietokannan merkistö",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0, binääri",
+    "config-charset-mysql5": "MySQL 4.1/5.0, UTF-8",
+    "config-charset-mysql4": "MySQL 4.0, taaksepäin yhteensopiva UTF-8",
+    "config-mysql-old": "MediaWiki tarvitsee MySQL:n version $1 tai uudemman. Nykyinen versio on $2.",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-header-mysql": "MySQL-asetukset",
+    "config-header-postgres": "PostgreSQL-asetukset",
+    "config-header-sqlite": "SQLite-asetukset",
+    "config-header-oracle": "Oracle-asetukset",
+    "config-invalid-db-type": "Virheellinen tietokantatyyppi",
+    "config-missing-db-name": "Kenttä »Tietokannan nimi» on pakollinen",
+    "config-invalid-db-name": "”$1” ei kelpaa tietokannan nimeksi.\nKäytä ainoastaan kirjaimia (a-z, A-Z), numeroita (0-9), alaviivoja (_) ja tavuviivoja (-).",
+    "config-invalid-db-prefix": "”$1” ei kelpaa tietokannan etuliitteeksi.\nKäytä ainoastaan kirjaimia (a-z, A-Z), numeroita (0-9), alaviivoja (_) ja tavuviivoja (-).",
+    "config-postgres-old": "MediaWiki tarvitsee PostgreSQL:n version $1 tai uudemman. Nykyinen versio on $2.",
+    "config-sqlite-name-help": "Valitse nimi, joka yksilöi tämän wikin.\nÄlä käytä välilyöntejä tai viivoja.\nNimeä käytetään SQLite-tietokannan tiedostonimessä.",
+    "config-sqlite-dir-unwritable": "Hakemistoon ”$1” kirjoittaminen epäonnistui.\nMuuta hakemiston käyttöoikeuksia siten, että palvelinohjelmisto voi kirjoittaa siihen ja yritä uudelleen.",
+    "config-sqlite-readonly": "Tiedostoon <code>$1</code> ei voi kirjoittaa.",
+    "config-sqlite-fts3-downgrade": "PHP:stä puuttuu FTS3-tuki. Poistetaan ominaisuus käytöstä tietokantatauluista.",
+    "config-upgrade-done": "Päivitys valmis.\n\nVoit [$1 aloittaa wikin käytön].\n\nNapsauta alla olevaa painiketta, jos haluat luoda uudelleen <code>LocalSettings.php</code>-tiedoston.\nTämä '''ei ole suositeltavaa''', jos wikissäsi ei ole ongelmia.",
+    "config-upgrade-done-no-regenerate": "Päivitys valmis.\n\nVoit [$1 aloittaa wikin käytön].",
+    "config-regenerate": "Luo LocalSettings.php uudelleen →",
+    "config-show-table-status": "Kysely <code>SHOW TABLE STATUS</code> epäonnistui!",
+    "config-mysql-engine": "Tallennusmoottori",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-binary": "Binääri",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Wikin nimi",
+    "config-site-name-blank": "Kirjoita sivuston nimi.",
+    "config-project-namespace": "Projektinimiavaruus",
+    "config-ns-generic": "Projekti",
+    "config-ns-site-name": "Sama kuin wikin nimi: $1",
+    "config-ns-other": "Muu (määritä)",
+    "config-admin-name": "Nimesi",
+    "config-admin-password": "Salasana",
+    "config-admin-password-confirm": "Salasana uudelleen",
+    "config-admin-name-blank": "Anna ylläpitäjän käyttäjänimi.",
+    "config-admin-email": "Sähköpostiosoite",
+    "config-admin-error-bademail": "Annoit virheellisen sähköpostiosoitteen.",
+    "config-almost-done": "Olet jo lähes valmis!\nVoit ohittaa jäljellä olevat määritykset ja asentaa wikin juuri nyt.",
+    "config-profile-wiki": "Avoin wiki",
+    "config-profile-no-anon": "Tunnuksen luonti vaaditaan",
+    "config-profile-private": "Yksityinen wiki",
+    "config-license": "Tekijänoikeus ja lisenssi:",
+    "config-license-pd": "Public domain",
+    "config-email-settings": "Sähköpostiasetukset",
+    "config-logo": "Logon URL-osoite",
+    "config-cc-again": "Valitse uudelleen...",
+    "config-extensions": "Laajennukset",
+    "config-install-step-done": "valmis",
+    "config-install-step-failed": "epäonnistui",
+    "config-install-user-alreadyexists": "Käyttäjä $1 on jo olemassa",
+    "config-install-interwiki-list": "Tiedostoa <code>interwiki.list</code> ei voitu lukea.",
+    "config-download-localsettings": "Lataa <code>LocalSettings.php</code>",
+    "config-help": "ohje",
+    "mainpagetext": "'''MediaWiki on onnistuneesti asennettu.'''",
+    "mainpagedocfooter": "Lisätietoja käytöstä on sivulla [//meta.wikimedia.org/wiki/Help:Contents User's Guide].\n\n=== Lisäohjeita ===\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Asetusten teko-ohjeita]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWikin FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Sähköpostilista, jolla tiedotetaan MediaWikin uusista versioista]\n\n=== Asetukset ===\n\nTarkista, että alla olevat taivutusmuodot ovat oikein. Jos eivät, tee tarvittavat muutokset tiedostoon LocalSettings.php seuraavasti:\n $wgGrammarForms['fi']['genitive']['{{SITENAME}}'] = '...';\n $wgGrammarForms['fi']['partitive']['{{SITENAME}}'] = '...';\n $wgGrammarForms['fi']['elative']['{{SITENAME}}'] = '...';\n $wgGrammarForms['fi']['inessive']['{{SITENAME}}'] = '...';\n $wgGrammarForms['fi']['illative']['{{SITENAME}}'] = '...';\nTaivutusmuodot: {{GRAMMAR:genitive|{{SITENAME}}}} (yön) – {{GRAMMAR:partitive|{{SITENAME}}}} (yötä) – {{GRAMMAR:elative|{{SITENAME}}}} (yöstä) – {{GRAMMAR:inessive|{{SITENAME}}}} (yössä) – {{GRAMMAR:illative|{{SITENAME}}}} (yöhön)."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/fo.json b/includes/installer/i18n/fo.json
new file mode 100644 (file)
index 0000000..30aa2c6
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Innlegging av Wiki-ritbúnaði væleydnað.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/fr.json b/includes/installer/i18n/fr.json
new file mode 100644 (file)
index 0000000..2c1793b
--- /dev/null
@@ -0,0 +1,326 @@
+{
+    "@metadata": {
+        "authors": [
+            "Aadri",
+            "Crochet.david",
+            "Gomoko",
+            "Grondin",
+            "Guillom",
+            "Hashar",
+            "IAlex",
+            "Jean-Frédéric",
+            "McDutchie",
+            "Peter17",
+            "Reedy",
+            "Sherbrooke",
+            "Urhixidur",
+            "Verdy p",
+            "Wyz",
+            "Yumeki",
+            "아라"
+        ]
+    },
+    "config-desc": "Le programme d’installation de MediaWiki",
+    "config-title": "Installation de MediaWiki $1",
+    "config-information": "Informations",
+    "config-localsettings-upgrade": "Un fichier <code>LocalSettings.php</code> a été détecté.\nPour mettre à jour cette installation, veuillez saisir la valeur de <code>$wgUpgradeKey</code> dans le champ ci-dessous.\nVous la trouverez dans <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Un fichier <code>LocalSettings.php</code> a été détecté.\nPour mettre à niveau cette installation, veuillez exécuter <code>update.php</code>",
+    "config-localsettings-key": "Clé de mise à jour :",
+    "config-localsettings-badkey": "La clé que vous avez fournie est incorrecte",
+    "config-upgrade-key-missing": "Une installation existante de MediaWiki a été détectée.\n\nPour mettre à jour cette installation, veuillez ajouter la ligne suivante à la fin de votre fichier <code>LocalSettings.php</code>\n\n$1",
+    "config-localsettings-incomplete": "Le fichier <code>LocalSettings.php</code> existant semble être incomplet.\nLa variable $1 n’est pas définie.\nVeuillez modifier <code>LocalSettings.php</code> de sorte que cette variable soit définie, puis cliquer sur « {{int:Config-continue}} ».",
+    "config-localsettings-connection-error": "Une erreur est survenue lors de la connexion à la base de données en utilisant la configuration spécifiée dans <code>LocalSettings.php</code> ou <code>AdminSettings.php</code>. Veuillez corriger cette configuration puis réessayer.\n\n$1",
+    "config-session-error": "Erreur lors du démarrage de la session : $1",
+    "config-session-expired": "↓Les données de votre session semblent avoir expiré.\nLes sessions sont configurées pour une durée de $1.\nVous pouvez l'augmenter en configurant <code>session.gc_maxlifetime</code> dans le fichier php.ini.\nRedémarrer le processus d'installation.",
+    "config-no-session": "Les données de votre session ont été perdues !\nVérifiez votre fichier php.ini et assurez-vous que <code>session.save_path</code> contient le chemin d’un répertoire approprié.",
+    "config-your-language": "Votre langue :",
+    "config-your-language-help": "Sélectionnez la langue à utiliser pendant le processus d'installation.",
+    "config-wiki-language": "Langue du wiki :",
+    "config-wiki-language-help": "Sélectionner la langue dans laquelle le wiki sera principalement écrit.",
+    "config-back": "← Retour",
+    "config-continue": "Continuer →",
+    "config-page-language": "Langue",
+    "config-page-welcome": "Bienvenue sur MediaWiki !",
+    "config-page-dbconnect": "Se connecter à la base de données",
+    "config-page-upgrade": "Mettre à jour l’installation existante",
+    "config-page-dbsettings": "Paramètres de la base de données",
+    "config-page-name": "Nom",
+    "config-page-options": "Options",
+    "config-page-install": "Installer",
+    "config-page-complete": "Terminé !",
+    "config-page-restart": "Redémarrer l’installation",
+    "config-page-readme": "Lisez-moi",
+    "config-page-releasenotes": "Notes de version",
+    "config-page-copying": "Copie",
+    "config-page-upgradedoc": "Mise à jour",
+    "config-page-existingwiki": "Wiki existant",
+    "config-help-restart": "Voulez-vous effacer toutes les données enregistrées que vous avez entrées et relancer le processus d'installation ?",
+    "config-restart": "Oui, le relancer",
+    "config-welcome": "=== Vérifications liées à l’environnement ===\nDes vérifications de base vont maintenant être effectuées pour voir si cet environnement est adapté à l’installation de MediaWiki.\nRappelez-vous d’inclure ces informations si vous recherchez de l’aide sur la manière de terminer l’installation.",
+    "config-copyright": "=== Droit d'auteur et conditions ===\n\n$1\n\nCe programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation (version 2 de la Licence, ou, à votre choix, toute version ultérieure).\n\nCe programme est distribué dans l’espoir qu’il sera utile, mais '''sans aucune garantie''' : sans même les garanties implicites de '''commerciabilité''' ou d’'''adéquation à un usage particulier'''.\nVoir la Licence Publique Générale GNU pour plus de détails.\n\nVous devriez avoir reçu <doclink href=Copying>une copie de la Licence Publique Générale GNU</doclink> avec ce programme ; dans le cas contraire, écrivez à la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ou [http://www.gnu.org/copyleft/gpl.html lisez-le en ligne].",
+    "config-sidebar": "* [//www.mediawiki.org Accueil MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents Guide de l’utilisateur]\n* [//www.mediawiki.org/wiki/Manual:Contents Guide de l’administrateur]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Lisez-moi</doclink>\n* <doclink href=ReleaseNotes>Notes de publication</doclink>\n* <doclink href=Copying>Copie</doclink>\n* <doclink href=UpgradeDoc>Mise à jour</doclink>",
+    "config-env-good": "L’environnement a été vérifié.\nVous pouvez installer MediaWiki.",
+    "config-env-bad": "L’environnement a été vérifié.\nVous ne pouvez pas installer MediaWiki.",
+    "config-env-php": "PHP $1 est installé.",
+    "config-env-php-toolow": "PHP $1 est installé.\nCependant, MediaWiki requiert PHP $2 ou plus haut.",
+    "config-unicode-using-utf8": "Utilisation de utf8_normalize.so par Brion Vibber pour la normalisation Unicode.",
+    "config-unicode-using-intl": "Utilisation de [http://pecl.php.net/intl l'extension PECL intl] pour la normalisation Unicode.",
+    "config-unicode-pure-php-warning": "'''Attention''': L'[http://pecl.php.net/intl extension PECL intl] n'est pas disponible pour la normalisation d’Unicode, retour à la version lente implémentée en PHP.\nSi votre site web sera très fréquenté, vous devriez lire ceci : [//www.mediawiki.org/wiki/Unicode_normalization_considerations ''Unicode normalization''] (en anglais).",
+    "config-unicode-update-warning": "'''Attention''': La version installée du ''wrapper'' de normalisation Unicode utilise une vieille version de la [http://site.icu-project.org/ bibliothèque logicielle ''ICU Project''].\nVous devriez faire une [//www.mediawiki.org/wiki/Unicode_normalization_considerations mise à jour] (texte en anglais) si l'usage d'Unicode vous semble important.",
+    "config-no-db": "Impossible de trouver un pilote de base de données approprié ! Vous devez installer un pilote pour PHP. Ces types de bases de données sont reconnus : $1.\n\nSi vous êtes sur un site partagé, demandez à votre hébergeur d'installer un pilote de base de données approprié. Si vous avez compilé PHP, le configurer avec client de base de données activé, par exemple en insérant la directive <code>./configure --with-mysql</code>.\n\nSi vous avez installé PHP d'une distribution Debian ou Ubuntu, vous devez aussi installer le module <code>php5-mysql</code>.",
+    "config-outdated-sqlite": "'''Attention''': vous avez SQLite $1, qui est inférieur à la version minimale requise $2. SQLite sera indisponible.",
+    "config-no-fts3": "'''Attention :''' SQLite est compilé sans le module [//sqlite.org/fts3.html FTS3] ; les fonctions de recherche ne seront pas disponibles sur ce moteur.",
+    "config-register-globals": "'''Attention : l'option <code>[http://php.net/register_globals register_globals]</code> de PHP est activée.'''\n'''Désactivez-la si vous le pouvez.'''\nMediaWiki fonctionnera, mais votre serveur sera exposé à de potentielles failles de sécurité.",
+    "config-magic-quotes-runtime": "'''Erreur fatale : [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] est activé !'''\nCette option corrompt les données de manière imprévisible.\nVous ne pouvez pas installer ou utiliser MediaWiki tant que cette option est activée.",
+    "config-magic-quotes-sybase": "'''Erreur fatale : [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybasee] est activé !'''\nCette option corrompt les données de manière imprévisible.\nVous ne pouvez pas installer ou utiliser MediaWiki tant que cette option est activée.",
+    "config-mbstring": "'''Erreur fatale : [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] est activé !'''\nCette option provoque des erreurs et peut corrompre les données de manière imprévisible.\nVous ne pouvez pas installer ou utiliser MediaWiki tant que cette option est activée.",
+    "config-ze1": "'''Erreur fatale : [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mod] est activé !'''\nCette option provoque des bugs horribles avec MediaWiki.\nVous ne pouvez pas installer ou utiliser MediaWiki tant que cette option est activée.",
+    "config-safe-mode": "'''Attention : le « [http://www.php.net/features.safe-mode safe mode] » est activé !'''\nCeci peut causer des problèmes, en particulier si vous utilisez le téléversement de fichiers et le support de <code>math</code>.",
+    "config-xml-bad": "Le module XML de PHP est manquant.\nMediaWiki requiert des fonctions de ce module et ne fonctionnera pas avec cette configuration.\nSi vous êtes sous Mandrake, installez le paquet php-xml.",
+    "config-pcre": "Le module de support PCRE semble manquer.\nMediaWiki requiert les fonctions d’expressions rationnelles compatibles avec Perl.",
+    "config-pcre-no-utf8": "'''Erreur fatale''': Le module PCRE de PHP semble être compilé sans le support PCRE_UTF8.\nMédiaWiki nécessite la gestion d’UTF-8 pour fonctionner correctement.",
+    "config-memory-raised": "Le paramètre <code>memory_limit</code> de PHP était à $1, porté à $2.",
+    "config-memory-bad": "'''Attention :''' Le paramètre <code>memory_limit</code> de PHP est à $1.\nCette valeur est probablement trop faible.\nIl est possible que l’installation échoue !",
+    "config-ctype": "'''Fatal ''': PHP doit être compilé avec le support pour l'[http://www.php.net/manual/en/ctype.installation.php extension Ctype].",
+    "config-json": "'''Erreur fatale :''' PHP a été compilé sans le support de JSON.\nVous devez soit installez l’extension JSON de PHP ou l’extension [http://pecl.php.net/package/jsonc PECL jsonc] avant d’installer MediaWiki.\n* L’extension PHP est comprise dans Red Hat Enterprise Linux (CentOS) 5 et 6, mais doit être activée dans <code>/etc/php.ini</code> ou <code>/etc/php.d/json.ini</code>.\n* Certaines distributions Linux après mai 2013 ne comprennent pas l’extension PHP, mais oint mis à la place l’extension PECL sous al forme <code>php5-json</code> ou <code>php-pecl-jsonc</code>.",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] est installé",
+    "config-apc": "[http://www.php.net/apc APC] est installé",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] est installé",
+    "config-no-cache": "'''Attention :''' Impossible de trouver [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] ou [http://www.iis.net/download/WinCacheForPhp WinCache].\nLa mise en cache d'objets n'est pas activée.",
+    "config-mod-security": "'''Attention''': Votre serveur web a [http://modsecurity.org/ mod_security] activé. S&il est mal configuré, cela peut poser des problèmes à MediaWiki ou à d'autres applications qui permettent aux utilisateurs de publier un contenu quelconque.\nReportez-vous à [http://modsecurity.org/documentation/ la documentation de mod_security] ou contactez le support de votre hébergeur si vous rencontrez des erreurs aléatoires.",
+    "config-diff3-bad": "GNU diff3 introuvable.",
+    "config-git": "Logiciel de contrôle de version Git trouvé : <code>$1</code>.",
+    "config-git-bad": "Logiciel de contrôle de version Git non trouvé.",
+    "config-imagemagick": "ImageMagick trouvé : <code>$1</code>.\nLa miniaturisation d'images sera activée si vous activez le téléversement de fichiers.",
+    "config-gd": "La bibliothèque graphique GD intégrée a été trouvée.\nLa miniaturisation d'images sera activée si vous activez le téléversement de fichiers.",
+    "config-no-scaling": "Impossible de trouver la bibliothèque GD ou ImageMagick.\nLa miniaturisation d'images sera désactivé.",
+    "config-no-uri": "'''Erreur :''' Impossible de déterminer l'URI du script actuel.\nInstallation avortée.",
+    "config-no-cli-uri": "'''Attention''': Aucun --scriptpath n'a été spécifié; <code>$1</code> sera utilisé par défaut",
+    "config-using-server": "Utilisation du nom de serveur \"<nowiki>$1</nowiki>\".",
+    "config-using-uri": "Utilisation de l'URL de serveur \"<nowiki>$1$2</nowiki>\".",
+    "config-uploads-not-safe": "'''Attention:''' Votre répertoire par défaut pour les téléchargements, <code>$1</code>, est vulnérable, car il peut exécuter n'importe quel script.\nBien que MediaWiki vérifie tous les fichiers téléchargés, il est fortement recommandé de [//www.mediawiki.org/wiki/Manual:Security#Upload_security fermer cette vulnérabilité de sécurité] (texte en anglais) avant d'activer les téléchargements.",
+    "config-no-cli-uploads-check": "'''Attention:''' Votre répertoire par défaut pour les imports(<code>$1</code>) n'est pas contrôlé concernant la vulnérabilité d'exécution de scripts arbitraires lors de l'installation CLI.",
+    "config-brokenlibxml": "Votre système utilise une combinaison de versions de PHP et libxml2 qui est boguée et peut engendrer des corruptions cachées de données dans MediaWiki et d’autres applications web.\nVeuillez mettre à jour votre système vers PHP 5.2.9 ou plus récent et libxml2 2.7.3 ou plus récent ([//bugs.php.net/bug.php?id=45996 bogue déposé auprès de PHP]).\nInstallation interrompue.",
+    "config-using531": "MediaWiki ne peut pas être utilisé avec PHP $1 à cause d’un bogue affectant les paramètres passés par référence à <code>__call()</code>.\nVeuillez mettre à jour votre système vers PHP 5.3.2 ou plus récent ou revenir à PHP 5.3.0 pour résoudre ce problème.\nInstallation interrompue.",
+    "config-suhosin-max-value-length": "Suhosin est installé et limite la <code>longueur</code> du paramètre GET à $1 octets.\nLe composant ResourceLoader de MediaWiki va répondre en respectant cette limite, mais ses performances seront dégradées. Si possible, vous devriez définir <code>suhosin.get.max_value_length</code> à 1024 ou plus dans le fichier <code>php.ini</code>, et fixer <code>$wgResourceLoaderMaxQueryLength</code> à la même valeur dans <code>LocalSettings.php</code>.",
+    "config-db-type": "Type de base de données :",
+    "config-db-host": "Nom d’hôte de la base de données :",
+    "config-db-host-help": "Si votre serveur de base de données est sur un serveur différent, saisissez ici son nom d’hôte ou son adresse IP.\n\nSi vous utilisez un hébergement mutualisé, votre hébergeur doit vous avoir fourni le nom d’hôte correct dans sa documentation.\n\nSi vous installez sur un serveur Windows et utilisez MySQL, « localhost » peut ne pas fonctionner comme nom de serveur. S’il ne fonctionne pas, essayez « 127.0.0.1 » comme adresse IP locale.\n\nSi vous utilisez PostgreSQL, laissez ce champ vide pour vous connecter via un socket Unix.",
+    "config-db-host-oracle": "Nom TNS de la base de données :",
+    "config-db-host-oracle-help": "Entrez un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nom de connexion locale] valide ; un fichier tnsnames.ora doit être visible par cette installation.<br /> Si vous utilisez les bibliothèques clientes version 10g ou plus récentes, vous pouvez également utiliser la méthode de nommage [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+    "config-db-wiki-settings": "Identifier ce wiki",
+    "config-db-name": "Nom de la base de données :",
+    "config-db-name-help": "Choisissez un nom qui identifie votre wiki.\nIl ne doit pas contenir d'espaces.\n\nSi vous utilisez un hébergement web partagé, votre hébergeur vous fournira un nom spécifique de base de données à utiliser, ou bien vous permet de créer des bases de données via un panneau de contrôle.",
+    "config-db-name-oracle": "Schéma de base de données :",
+    "config-db-account-oracle-warn": "Il existe trois scénarios pris en charge pour l’installation d'Oracle comme backend de base :\n\nSi vous souhaitez créer un compte de base de données dans le cadre de la procédure d’installation, veuillez fournir un compte avec le rôle de SYSDBA comme compte de base de données pour l’installation et spécifiez les informations d’identification souhaitées pour le compte d'accès au web, sinon vous pouvez créer le compte d’accès web manuellement et fournir uniquement ce compte (si elle a exigé des autorisations nécessaires pour créer les objets de schéma) ou fournir deux comptes différents, l’un avec les privilèges de créer et une restreinte pour l’accès web.\n\nUn script pour créer un compte avec des privilèges requis peut être trouvé dans le répertoire « entretien/oracle/ » de cette installation. N’oubliez pas que le fait de l’utilisation d’un compte limité désactive toutes les fonctionnalités d’entretien avec le compte par défaut.",
+    "config-db-install-account": "Compte d'utilisateur pour l'installation",
+    "config-db-username": "Nom d’utilisateur de la base de données :",
+    "config-db-password": "Mot de passe de la base de données :",
+    "config-db-password-empty": "Veuillez entrer un mot de passe pour le nouvel compte de la base de données : $1.\nBien qu'il soit possible de créer un compte sans mot de passe, ce n'est pas recommandé pour des questions de sécurité.",
+    "config-db-install-username": "Entrez le nom d’utilisateur qui sera utilisé pour se connecter à la base de données pendant le processus d'installation. Il ne s’agit pas du nom d’utilisateur du compte MediaWiki, mais du nom d’utilisateur pour votre base de données.",
+    "config-db-install-password": "Entrez le mot de passe qui sera utilisé pour se connecter à la base de données pendant le processus d'installation. Il ne s’agit pas du mot de passe du compte MediaWiki, mais du mot de passe pour votre base de données.",
+    "config-db-install-help": "Entrez le nom d'utilisateur et le mot de passe qui seront utilisés pour se connecter à la base de données pendant le processus d'installation.",
+    "config-db-account-lock": "Utiliser le même nom d'utilisateur et le même mot de passe pendant le fonctionnement habituel",
+    "config-db-wiki-account": "Compte d'utilisateur pour le fonctionnement habituel",
+    "config-db-wiki-help": "Entrez le nom d'utilisateur et le mot de passe qui seront utilisés pour se connecter à la base de données pendant le fonctionnement habituel du wiki.\nSi le compte n'existe pas, et le compte d'installation dispose de privilèges suffisants, ce compte d'utilisateur sera créé avec les privilèges minimum requis pour faire fonctionner le wiki.",
+    "config-db-prefix": "Préfixe des tables de la base de données :",
+    "config-db-prefix-help": "Si vous avez besoin de partager une base de données entre plusieurs wikis, ou entre MediaWiki et une autre application Web, vous pouvez choisir d'ajouter un préfixe à tous les noms de table pour éviter les conflits.\nNe pas utiliser des espaces.\n\nCe champ est généralement laissé vide.",
+    "config-db-charset": "Jeu de caractères de la base de données",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binaire",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 rétrocompatible UTF-8",
+    "config-charset-help": "'''Attention:''' Si vous utilisez ''backwards-compatible UTF-8'' sur MySQL 4.1+, et ensuite sauvegardez la base de données avec <code>mysqldump</code>, cela peut détruire tous les caractères non-ASCII, ce qui rend inutilisable vos copies de sauvegarde de façon irréversible !\n\nEn ''mode binaire'', MediaWiki stocke le texte UTF-8 dans des champs binaires de la base de données. C'est plus efficace que le ''mode UTF-8'' de MySQL, et vous permet d'utiliser toute la gamme des caractères Unicode.\nEn ''mode UTF-8'', MySQL connaîtra le jeu de caractères de vos données et pourra présenter et convertir les données de manière appropriée, mais il ne vous laissera pas stocker les caractères au-dessus du [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingue de base] (en anglais).",
+    "config-mysql-old": "MySQL $1 ou version ultérieure est requis, vous avez $2.",
+    "config-db-port": "Port de la base de données :",
+    "config-db-schema": "Schéma pour MediaWiki",
+    "config-db-schema-help": "Les schémas ci-dessus sont généralement corrects.\nNe les changez que si vous êtes sûr que c'est nécessaire.",
+    "config-pg-test-error": "Impossible de se connecter à la base de données '''$1''' : $2",
+    "config-sqlite-dir": "Dossier des données SQLite :",
+    "config-sqlite-dir-help": "SQLite stocke toutes les données dans un fichier unique.\n\nLe répertoire que vous inscrivez doit être accessible en écriture par le serveur lors de l'installation.\n\nIl '''ne faut pas''' qu'il soit accessible via le web, c'est pourquoi il n'est pas à l'endroit où vos fichiers PHP sont.\n\nL'installateur écrira un fichier <code>.htaccess</code> en même temps, mais s'il y a échec, quelqu'un peut accéder à votre base de données.\nCela comprend les données des utilisateurs (adresses de courriel, mots de passe hachés) ainsi que des révisions supprimées et d'autres données confidentielles du wiki.\n\nEnvisagez de placer la base de données ailleurs, par exemple dans <code>/var/lib/mediawiki/yourwiki</code>.",
+    "config-oracle-def-ts": "Espace de stockage (''tablespace'') par défaut :",
+    "config-oracle-temp-ts": "Espace de stockage (''tablespace'') temporaire :",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "MediaWiki supporte ces systèmes de bases de données :\n\n$1\n\nSi vous ne voyez pas le système de base de données que vous essayez d'utiliser ci-dessous, alors suivez les instructions ci-dessus (voir liens) pour activer le support.",
+    "config-support-mysql": "* $1 est le premier choix pour MediaWiki et est mieux pris en charge ([http://www.php.net/manual/en/mysql.installation.php how to compile PHP with MySQL support])",
+    "config-support-postgres": "* $1 est un système de base de données populaire et ''open source'' qui peut être une alternative à MySQL ([http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). Il peut contenir quelques bogues mineurs et n'est pas recommandé dans un environnement de production.",
+    "config-support-sqlite": "* $1 est un système de base de données léger qui est bien supporté. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], utilise PDO)",
+    "config-support-oracle": "* $1 est un système commercial de gestion de base de données d’entreprise. ([http://www.php.net/manual/en/oci8.installation.php Comment compiler PHP avec le support OCI8])",
+    "config-header-mysql": "Paramètres de MySQL",
+    "config-header-postgres": "Paramètres de PostgreSQL",
+    "config-header-sqlite": "Paramètres de SQLite",
+    "config-header-oracle": "Paramètres d’Oracle",
+    "config-invalid-db-type": "Type de base de données non valide",
+    "config-missing-db-name": "Vous devez saisir une valeur pour « Nom de la base de données »",
+    "config-missing-db-host": "Vous devez entrer une valeur pour « l'hôte de la base de données »",
+    "config-missing-db-server-oracle": "Vous devez saisir une valeur pour le « Nom TNS de la base de données »",
+    "config-invalid-db-server-oracle": "Le nom TNS de la base de données (« $1 ») est invalide.\nUtilisez uniquement la chaîne \"TNS Name\" ou \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Méthodes de nommage Oracle])",
+    "config-invalid-db-name": "Nom de la base de données invalide (« $1 »).\nIl ne peut contenir que des lettres latines (a-z, A-Z), des chiffres (0-9), des caractères de soulignement (_) et des tirets (-).",
+    "config-invalid-db-prefix": "Préfixe de la base de données non valide « $1 ».\nIl ne peut contenir que des lettres latines (a-z, A-Z), des chiffres (0-9), des caractères de soulignement (_) et des tirets (-).",
+    "config-connection-error": "$1.\n\nVérifier le nom d’hôte, le nom d’utilisateur et le mot de passe ci-dessous puis réessayer.",
+    "config-invalid-schema": "Schéma invalide pour MediaWiki « $1 ».\nUtilisez seulement des lettres latines (a-z, A-Z), des chiffres (0-9) et des caractères de soulignement (_).",
+    "config-db-sys-create-oracle": "L'installateur ne reconnaît que les compte SYSDBA lors de la création d'un nouveau compte.",
+    "config-db-sys-user-exists-oracle": "Le compte « $1 » existe déjà. Un SYSDBA peut seulement servir à créer un nouveau compte.",
+    "config-postgres-old": "PostgreSQL $1 ou version ultérieure est requis, vous avez $2.",
+    "config-sqlite-name-help": "Choisir un nom qui identifie votre wiki.\nNe pas utiliser des espaces ou des traits d'union.\nIl sera utilisé pour le fichier de données SQLite.",
+    "config-sqlite-parent-unwritable-group": "Impossible de créer le répertoire de données <nowiki><code>$1</code></nowiki>, parce que le répertoire parent <nowiki><code>$2</code></nowiki> n'est pas accessible en écriture par le serveur Web.\n\nL'utilisateur du serveur web est connu.\nRendre le répertoire <nowiki><code>$3</code></nowiki> accessible en écriture pour continuer.\nSur un système UNIX/Linux, saisir :\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Impossible de créer le répertoire de données <nowiki><code>$1</code></nowiki>, parce que le répertoire parent <nowiki><code>$2</code></nowiki> n'est pas accessible en écriture par le serveur Web.\n\nL'utilisateur du serveur web est inconnu.\nRendre le répertoire <nowiki><code>$3</code></nowiki> globalement accessible en écriture pour continuer.\nSur un système UNIX/Linux, saisir :\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Erreur de création du répertoire de données « $1 ».\nVérifiez l'emplacement et essayez à nouveau.",
+    "config-sqlite-dir-unwritable": "Impossible d'écrire dans le répertoire « $1 ».\nChanger les permissions de sorte que le serveur peut y écrire et essayez à nouveau.",
+    "config-sqlite-connection-error": "$1.\n\nVérifier le répertoire des données et le nom de la base de données ci-dessous et réessayer.",
+    "config-sqlite-readonly": "Le fichier <code>$1</code> n'est pas accessible en écriture.",
+    "config-sqlite-cant-create-db": "Impossible de créer le fichier de base de données <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "PHP ne vient pas avec FTS3, les tables sont diminuées.",
+    "config-can-upgrade": "Il y a des tables MediaWiki dans cette base de données.\nPour les mettre au niveau de MediaWiki $1, cliquez sur '''Continuer'''.",
+    "config-upgrade-done": "Mise à jour complétée.\n\nVous pouvez maintenant [$1 commencer à utiliser votre wiki].\n\nSi vous souhaitez régénérer votre fichier <code>LocalSettings.php</code>, cliquez sur le bouton ci-dessous.\nCe '''n'est pas recommandé''' sauf si vous rencontrez des problèmes avec votre wiki.",
+    "config-upgrade-done-no-regenerate": "Mise à jour terminée.\n\nVous pouvez maintenant [$1 commencer à utiliser votre wiki].",
+    "config-regenerate": "Regénérer LocalSettings.php →",
+    "config-show-table-status": "Échec de la requête <code>SHOW TABLE STATUS</code> !",
+    "config-unknown-collation": "'''Attention:''' La base de données effectue un classement alphabétique (''collation'') inconnu.",
+    "config-db-web-account": "Compte de la base de données pour l'accès Web",
+    "config-db-web-help": "Sélectionnez le nom d'utilisateur et le mot de passe que le serveur web utilisera pour se connecter au serveur de base de données pendant le fonctionnement habituel du wiki.",
+    "config-db-web-account-same": "Utilisez le même compte que pour l'installation",
+    "config-db-web-create": "Créez le compte s'il n'existe pas déjà",
+    "config-db-web-no-create-privs": "Le compte que vous avez spécifié pour l'installation n'a pas de privilèges suffisants pour créer un compte.\nLe compte que vous spécifiez ici doit déjà exister.",
+    "config-mysql-engine": "Moteur de stockage :",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "''' Avertissement ''': vous avez sélectionné MyISAM comme moteur de stockage pour MySQL, ce qui n'est pas recommandé pour une utilisation avec MediaWiki, parce que:\n * il supporte à peine la simultanéité en raison de verrouillage de table\n * il est plus sujet à la corruption que les autres moteurs\n * le codebase MediaWiki ne gère pas toujours MyISAM comme il se doit\nSi votre installation MySQL supporte InnoDB, il est fortement recommandé que vous le choisissez plutôt. Si votre installation MySQL ne supporte pas les tables InnoDB, il est peut-être temps de faire une mise à niveau.",
+    "config-mysql-only-myisam-dep": "'''Attention :''' MyISAM est le seul moteur de stockage disponible pour MySQL qui ne soit pas recommandé pour une utilsiation avec MédiaWiki, car :\n* il supporte très peu les accès concurrents à cause du verrouillage des tables\n* il est plus sujet à corruption que les autres moteurs\n* le code de base de MédiaWiki ne gère pas toujours MyISAM comme il faudrait\n\nVotre installation MySQL ne supporte pas InnoDB ; il est peut-être temps de la mettre à jour.",
+    "config-mysql-engine-help": "'''InnoDB''' est presque toujours la meilleure option, car il supporte bien l'[http://fr.wikipedia.org/wiki/Ordonnancement_dans_les_syst%C3%A8mes_d%27exploitation ordonnancement].\n\n'''MyISAM''' peut être plus rapide dans les installations monoposte ou en lecture seule. Les bases de données MyISAM ont tendance à se corrompre plus souvent que celles d'InnoDB.",
+    "config-mysql-charset": "Jeu de caractères de la base de données :",
+    "config-mysql-binary": "Binaire",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "En ''mode binaire'', MediaWiki stocke le texte au format UTF-8 dans la base de données. C'est plus efficace que le ''UTF-8 mode'' de MySQL, et vous permet d'utiliser toute la gamme des caractères Unicode.\n\nEn ''mode binaire'', MediaWiki stocke le texte UTF-8 dans des champs binaires de la base de données. C'est plus efficace que le ''mode UTF-8'' de MySQL, et vous permet d'utiliser toute la gamme des caractères Unicode.\nEn ''mode UTF-8'', MySQL connaîtra le jeu de caractères de vos données et pourra présenter et convertir les données de manière appropriée, mais il ne vous laissera pas stocker les caractères au-dessus du [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingue de base] (en anglais).",
+    "config-site-name": "Nom du wiki :",
+    "config-site-name-help": "Il apparaîtra dans la barre de titre du navigateur et en divers autres endroits.",
+    "config-site-name-blank": "Entrez un nom de site.",
+    "config-project-namespace": "Espace de noms du projet :",
+    "config-ns-generic": "Projet",
+    "config-ns-site-name": "Même nom que le wiki : $1",
+    "config-ns-other": "Autre (préciser)",
+    "config-ns-other-default": "MonWiki",
+    "config-project-namespace-help": "Suivant l'exemple de Wikipédia, plusieurs wikis gardent leurs pages de politique séparées de leurs pages de contenu, dans un ''espace de noms'' propre.\nTous les titres de page de cet espace de noms commence par un préfixe défini, que vous pouvez spécifier ici.\nTraditionnellement, ce préfixe est dérivé du nom du wiki, mais il ne peut contenir des caractères de ponctuation tels que « # » ou « : ».",
+    "config-ns-invalid": "L'espace de noms spécifié « <nowiki>$1</nowiki> » n'est pas valide.\nSpécifiez un espace de noms pour le projet.",
+    "config-ns-conflict": "L'espace de noms spécifié « <nowiki>$1</nowiki> » est en conflit avec un espace de noms par défaut de MediaWiki.\nChoisir un autre espace de noms.",
+    "config-admin-box": "Compte administrateur",
+    "config-admin-name": "Votre nom :",
+    "config-admin-password": "Mot de passe :",
+    "config-admin-password-confirm": "Saisir à nouveau le mot de passe :",
+    "config-admin-help": "Entrez votre nom d'utilisateur préféré ici, par exemple « Jean Blogue ».\nC'est le nom que vous utiliserez pour vous connecter au wiki.",
+    "config-admin-name-blank": "Entrez un nom d'administrateur.",
+    "config-admin-name-invalid": "Le nom d'utilisateur spécifié « <nowiki>$1</nowiki> » n'est pas valide.\nIndiquez un nom d'utilisateur différent.",
+    "config-admin-password-blank": "Entrez un mot de passe pour le compte administrateur.",
+    "config-admin-password-same": "Le mot de passe doit être différent du nom d'utilisateur.",
+    "config-admin-password-mismatch": "Les deux mots de passe que vous avez saisis ne correspondent pas.",
+    "config-admin-email": "Adresse de courriel :",
+    "config-admin-email-help": "Entrez une adresse de courriel ici pour vous permettre de recevoir des courriels d'autres utilisateurs du wiki, réinitialiser votre mot de passe, et être informé des modifications apportées aux pages de votre liste de suivi. Vous pouvez laisser ce champ vide.",
+    "config-admin-error-user": "Erreur interne lors de la création d'un administrateur avec le nom « <nowiki>$1</nowiki> ».",
+    "config-admin-error-password": "Erreur interne lors de l'inscription d'un mot de passe pour l'administrateur « <nowiki>$1</nowiki> » : <pre>$2</pre>",
+    "config-admin-error-bademail": "Vous avez entré une adresse de courriel invalide",
+    "config-subscribe": "Abonnez-vous à la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce liste d'annonce des nouvelles versions] (la page peut afficher le texte en français).",
+    "config-subscribe-help": "Il s'agit d'une liste de diffusion à faible volume utilisée servant à annoncer les nouvelles versions, y compris les versions améliorant la sécurité du logiciel.\nVous devriez y souscrire et mettre à jour votre version de MediaWiki lorsque de nouvelles versions sont publiées.",
+    "config-subscribe-noemail": "Vous avez essayé de vous abonner à la liste de diffusion des communiqués, sans fournir une adresse courriel ! S'il vous plaît, fournir une adresse électronique si vous souhaitez vous abonner à la liste de diffusion.",
+    "config-almost-done": "Vous avez presque fini !\nVous 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 ouvert",
+    "config-profile-no-anon": "Création de compte requise",
+    "config-profile-fishbowl": "Éditeurs autorisés seulement",
+    "config-profile-private": "Wiki privé",
+    "config-profile-help": "Les wikis fonctionnent mieux lorsque vous laissez le plus de personnes possible le modifier.\nAvec MediaWiki, il est facile de vérifier les modifications récentes et de révoquer tout dommage créé par des utilisateurs débutants ou mal intentionnés.\n\nCependant, 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.\nVous avez donc le choix.\n\nLe modèle '''{{int:config-profile-wiki}}''' autorise toute personne à modifier, y compris sans s’identifier.\n'''{{int:config-profile-no-anon}}''' fournit plus de contrôle, par l’identification, mais peut rebuter les contributeurs occasionnels.\n\n'''{{int:config-profile-fishbowl}}''' autorise la modification par les utilisateurs approuvés, mais le public peut toujours lire les pages et leur historique.\n'''{{int:config-profile-private}}''' n’autorise que les utilisateurs approuvés à voir et modifier les pages.\n\nDes configurations de droits d’utilisateurs plus complexes sont disponibles après l'installation, voir la [//www.mediawiki.org/wiki/Manual:User_rights page correspondante du manuel].",
+    "config-license": "Droits d'auteur et licence :",
+    "config-license-none": "Aucune licence en bas de page",
+    "config-license-cc-by-sa": "Creative Commons attribution partage à l'identique",
+    "config-license-cc-by": "Creative Commons Attribution",
+    "config-license-cc-by-nc-sa": "Creative Commons paternité – non commercial – partage à l’identique",
+    "config-license-cc-0": "Creative Commons Zero (domaine public)",
+    "config-license-gfdl": "GNU Free Documentation License 1.3 ou ultérieure",
+    "config-license-pd": "Domaine public",
+    "config-license-cc-choose": "Sélectionner une licence Creative Commons personnalisée",
+    "config-license-help": "Beaucoup de wikis publics mettent l'ensemble des contributions sous [http://freedomdefined.org/Definition/Fr licence libre].\nCela contribue à créer un sentiment d'appartenance dans leur communauté et encourage les contributions sur le long terme.\nCe n'est généralement pas nécessaire pour un wiki privé ou d'entreprise.\n\nSi vous souhaitez utiliser des textes de Wikipédia, et souhaitez que Wikipédia réutilise des textes de votre wiki, vous devriez choisir la [http://creativecommons.org/licenses/by-sa/3.0/deed.fr licence ''Creative Commons Attribution Share Alike''] (CC-by-sa).\n\nWikipédia a déjà été publié selon les termes de la [http://fr.wikipedia.org/wiki/Licence_de_documentation_libre_GNU ''GNU Free Documentation License''] (GFDL).\nC'est une licence valide, mais elle est difficile à comprendre. De plus, elle possède des caractéristiques qui rendent difficiles la réutilisation.",
+    "config-email-settings": "Paramètres de courriel",
+    "config-enable-email": "Activer les courriels sortants",
+    "config-enable-email-help": "Si vous souhaitez utiliser le courriel, vous devez [http://www.php.net/manual/en/mail.configuration.php configurer des paramètres PHP] (texte en anglais).\nSi vous ne voulez pas du service de courriel, vous pouvez le désactiver ici.",
+    "config-email-user": "Activer les courriers électroniques d'utilisateur à utilisateur",
+    "config-email-user-help": "Permet à tous les utilisateurs d'envoyer des courriels à d'autres utilisateurs si cela est activé dans leurs préférences.",
+    "config-email-usertalk": "Activer la notification des pages de discussion des utilisateurs",
+    "config-email-usertalk-help": "Permet aux utilisateurs de recevoir une notification en cas de modification de leurs pages de discussion, si cela est activé dans leurs préférences.",
+    "config-email-watchlist": "Activer la notification de la liste de suivi",
+    "config-email-watchlist-help": "Permet aux utilisateurs de recevoir des notifications à propos des pages qu'ils ont en suivi (si cette préférence est activée).",
+    "config-email-auth": "Activer l'authentification par courriel",
+    "config-email-auth-help": "Si cette option est activée, les utilisateurs doivent confirmer leur adresse de courriel en utilisant l'hyperlien envoyé à chaque fois qu'ils la définissent ou la modifient.\nSeules les adresses authentifiées peuvent recevoir des courriels des autres utilisateurs ou lorsqu'il y a des notifications de modification.\nL'activation de cette option est '''recommandée''' pour les wikis publics en raison d'abus potentiels des fonctionnalités de courriels.",
+    "config-email-sender": "Adresse de courriel de retour :",
+    "config-email-sender-help": "Entrez l'adresse de courriel à utiliser comme adresse de retour des courriels sortant.\nLes courriels rejetés y seront envoyés.\nDe nombreux serveurs de courriels exigent au moins un [http://fr.wikipedia.org/wiki/Nom_de_domaine nom de domaine] valide.",
+    "config-upload-settings": "Téléchargement des images et des fichiers",
+    "config-upload-enable": "Activer le téléchargement des fichiers",
+    "config-upload-help": "Le téléchargement des fichiers expose votre serveur à des risques de sécurité.\nPour plus d'informations, lire la section [//www.mediawiki.org/wiki/Manual:Security ''Security''] du manuel d'installation (en anglais).\n\nPour autoriser le téléchargement des fichiers, modifier le mode du sous-répertoire <code>images</code> qui se situe sous le répertoire racine de MediaWiki.\nEnsuite, activez cette option.",
+    "config-upload-deleted": "Répertoire pour les fichiers supprimés :",
+    "config-upload-deleted-help": "Choisissez un répertoire qui servira à archiver les fichiers supprimés.\nIdéalement, il ne devrait pas être accessible depuis le web.",
+    "config-logo": "URL du logo :",
+    "config-logo-help": "L’habillage par défaut de MediaWiki comprend l’espace pour un logo de 135x160 pixels au-dessus de la barre de menu latérale.\nTéléchargez une image de la taille appropriée, et entrez son URL ici.\n\nVous pouvez utiliser <code>$wgStylePath</code> ou <code>$wgScriptPath</code> si votre logo est relatif à ces chemins.\n\nSi vous ne voulez pas de logo, laissez cette case vide.",
+    "config-instantcommons": "Activer ''InstantCommons''",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons InstantCommons] est un service qui permet d'utiliser les images, les sons et les autres médias disponibles sur le site [//commons.wikimedia.org/ Wikimedia Commons].\nPour se faire, il faut que MediaWiki accède à Internet.\n\nPour plus d'informations sur ce service, y compris les instructions sur la façon de le configurer pour d'autres wikis que Wikimedia Commons, consultez le [//mediawiki.org/wiki/Manual:$wgForeignFileRepos manuel] (en anglais).",
+    "config-cc-error": "Le sélection d'une licence ''Creative Commons'' n'a donné aucun résultat.\nEntrez le nom de la licence manuellement.",
+    "config-cc-again": "Choisissez à nouveau...",
+    "config-cc-not-chosen": "Choisissez une licence ''Creative Commons'' et cliquez sur « Continuer ».",
+    "config-advanced-settings": "Configuration avancée",
+    "config-cache-options": "Paramètres pour la mise en cache des objets:",
+    "config-cache-help": "La mise en cache des objets améliore la vitesse de MediaWiki en mettant en cache les données fréquemment utilisées.\nLes sites de taille moyenne à grande sont fortement encouragés à l'activer. Les petits sites y verront également des avantages.",
+    "config-cache-none": "Aucune mise en cache (aucune fonctionnalité supprimée, mais la vitesse peut changer sur les wikis importants)",
+    "config-cache-accel": "Mise en cache des objets PHP (APC, XCache ou WinCache)",
+    "config-cache-memcached": "Utiliser Memcached (nécessite une installation et une configuration supplémentaires)",
+    "config-memcached-servers": "serveurs pour Memcached :",
+    "config-memcached-help": "Liste des adresses IP à utiliser pour Memcached.\nElles doivent être séparés par des virgules et vous devez spécifier le port à utiliser. Par exemple :\n  127.0.0.1:11211\n  192.168.1.25:1234",
+    "config-memcache-needservers": "Vous avez sélectionné Memcached comme type de cache, mais ne précisez pas de serveur.",
+    "config-memcache-badip": "Vous avez entré une adresse IP invalide pour Memcached: $1.",
+    "config-memcache-noport": "Vous n'avez pas entré un port pour le serveur Memcached : $1.\nSi vous ne le connaissez pas, la valeur par défaut est 11211.",
+    "config-memcache-badport": "Les numéros de port de Memcached sont situés entre $1 et $2.",
+    "config-extensions": "Extensions",
+    "config-extensions-help": "Les extensions énumérées ci-dessus ont été détectées dans votre répertoire <code>./extensions</code>.\n\nElles 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.\nS'il vous plaît, allez à la page suivante.",
+    "config-install-begin": "En appuyant sur {{int:config-continue}}, vous commencerez l'installation de MediaWiki.\nSi 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",
+    "config-install-database": "Création de la base de données",
+    "config-install-schema": "Création de schéma",
+    "config-install-pg-schema-not-exist": "Le schéma PostgreSQL n'existe pas",
+    "config-install-pg-schema-failed": "Échec lors de la création des tables.\nAssurez-vous que l'utilisateur « $1 » peut écrire selon le schéma « $2 ».",
+    "config-install-pg-commit": "Validation des modifications",
+    "config-install-pg-plpgsql": "Vérification du langage PL/pgSQL",
+    "config-pg-no-plpgsql": "Vous devez installer le langage PL/pgSQL dans la base de données $1",
+    "config-pg-no-create-privs": "Le compte que vous avez spécifié pour l'installation n'a pas suffisamment de privilèges pour créer un compte.",
+    "config-pg-not-in-role": "Le compte que vous avez spécifié pour l'utilisateur web existe déjà !\nLe compte que vous avez spécifié pour l'installation n'est pas un super-utilisateur et n'est pas membre du rôle de l'internaute, il est donc incapable de créer des objets appartenant à l'utilisateur web.!\n\nMediaWiki exige actuellement que les tableaux soient possédés par un utilisateur web. S'il vous plaît, spécifier un autre nom de compte web, ou cliquez sur \"retour\" et spécifier un utilisateur avec les privilèges suffisants.",
+    "config-install-user": "Création d'un utilisateur de la base de données",
+    "config-install-user-alreadyexists": "L'utilisateur « $1 » existe déjà.",
+    "config-install-user-create-failed": "Échec lors de la création de l'utilisateur « $1 » : $2",
+    "config-install-user-grant-failed": "Échec lors de l'ajout de permissions à l'utilisateur « $1 » : $2",
+    "config-install-user-missing": "L'utilisateur \"$1\" n'existe pas.",
+    "config-install-user-missing-create": "L'utilisateur \"$1\" n'existe pas !\nS'il vous plaît, cocher \"Compte de créer\" dans la case ci-dessous si vous voulez le créer.",
+    "config-install-tables": "Création des tables",
+    "config-install-tables-exist": "'''Avertissement:''' Les tables MediaWiki semblent déjà exister.\nCréation omise.",
+    "config-install-tables-failed": "'''Erreur:''' échec lors de la création de la table avec l'erreur suivante: $1",
+    "config-install-interwiki": "Remplissage par défaut de la table des interwikis",
+    "config-install-interwiki-list": "Impossible de trouver le fichier <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "'''Attention:''' La table des interwikis semble déjà contenir des entrées.\nLa liste par défaut ne sera pas inscrite.",
+    "config-install-stats": "Initialisation des statistiques",
+    "config-install-keys": "Génération de la clé secrète",
+    "config-insecure-keys": "'''Avertissement''' : {{PLURAL:$2|Une clé de sécurité générée ($1) pendant l'installation n'est pas complètement sécuritaire. Envisagez de la modifier manuellement.|Des clés de sécurité générées ($1) pendant l'installation ne sont pas complètement sécuritaires. Envisagez de les modifier manuellement.}}",
+    "config-install-sysop": "Création du compte administrateur",
+    "config-install-subscribe-fail": "Impossible de s'abonner à mediawiki-announce : $1",
+    "config-install-subscribe-notpossible": "cURL n’est pas installé et allow_url_fopen n’est pas disponible.",
+    "config-install-mainpage": "Création de la page principale avec un contenu par défaut",
+    "config-install-extension-tables": "Création de tables pour les extensions activées",
+    "config-install-mainpage-failed": "Impossible d’insérer la page principale: $1",
+    "config-install-done": "'''Félicitations!'''\nVous avez réussi à installer MediaWiki.\n\nLe programme d'installation a généré <code>LocalSettings.php</code>, un fichier qui contient tous les paramètres de configuration.\n\nSi le téléchargement n'a pas été offert, ou que vous l'avez annulé, vous pouvez démarrer à nouveau le téléchargement en cliquant ce lien :\n\n$3\n\n'''Note''': Si vous ne le faites pas maintenant, ce fichier de configuration généré ne sera pas disponible plus tard si vous quittez l'installation sans le télécharger.\n\nLorsque c'est fait, vous pouvez '''[$2 accéder à votre wiki]'''.",
+    "config-download-localsettings": "Télécharger <code>LocalSettings.php</code>",
+    "config-help": "aide",
+    "config-nofile": "Le fichier « $1 » est introuvable. A-t-il été supprimé ?",
+    "config-extension-link": "Saviez-vous que votre wiki supporte [//www.mediawiki.org/wiki/Manual:Extensions des extensions] ?\n\nVous pouvez consulter les [//www.mediawiki.org/wiki/Category:Extensions_by_category extensions par catégorie] ou la [//www.mediawiki.org/wiki/Extension_Matrix Matrice des extensions] pourvoir la liste complète des extensions.",
+    "mainpagetext": "'''MediaWiki a été installé avec succès.'''",
+    "mainpagedocfooter": "Consultez le [//meta.wikimedia.org/wiki/Aide:Contenu Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.\n\n== Pour démarrer ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste des paramètres de configuration]\n* [//www.mediawiki.org/wiki/Manual:FAQ/fr FAQ sur MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/frc.json b/includes/installer/i18n/frc.json
new file mode 100644 (file)
index 0000000..c80bb4b
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Vous avez bien installé MediaWiki.'''",
+    "mainpagedocfooter": "Lisez la [//meta.wikimedia.org/wiki/Help:Contents Guide des Useurs] pour apprendre à user le wiki software.\n\n== Pour Commencer ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Réglage]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki: Questions Souvent Posées]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki Liste à Malle]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/frp.json b/includes/installer/i18n/frp.json
new file mode 100644 (file)
index 0000000..48b014e
--- /dev/null
@@ -0,0 +1,153 @@
+{
+    "@metadata": {
+        "authors": [
+            "ChrisPtDe"
+        ]
+    },
+    "config-desc": "La programeria d’enstalacion de MediaWiki",
+    "config-title": "Enstalacion de MediaWiki $1",
+    "config-information": "Enformacions",
+    "config-localsettings-key": "Cllâf de misa a jorn :",
+    "config-session-error": "Èrror pendent l’emmodâ de la sèance : $1",
+    "config-your-language": "Voutra lengoua :",
+    "config-wiki-language": "Lengoua du vouiqui :",
+    "config-back": "← Retôrn",
+    "config-continue": "Continuar →",
+    "config-page-language": "Lengoua",
+    "config-page-welcome": "Benvegnua dessus MediaWiki !",
+    "config-page-dbconnect": "Sè branchiér a la bâsa de balyês",
+    "config-page-upgrade": "Betar a jorn l’enstalacion ègzistenta",
+    "config-page-dbsettings": "Paramètres de la bâsa de balyês",
+    "config-page-name": "Nom",
+    "config-page-options": "Chouèx",
+    "config-page-install": "Enstalar",
+    "config-page-complete": "Chavonâ !",
+    "config-page-restart": "Tornar emmodar l’enstalacion",
+    "config-page-readme": "Liéséd-mè",
+    "config-page-releasenotes": "Notes de publecacion",
+    "config-page-copying": "Copia",
+    "config-page-upgradedoc": "Misa a jorn",
+    "config-page-existingwiki": "Vouiqui ègzistent",
+    "config-env-php": "PHP $1 est enstalâ.",
+    "config-env-php-toolow": "PHP $1 est enstalâ.\nPortant, MediaWiki at fôta de PHP $2 ou ben ples hôt.",
+    "config-memory-raised": "Lo paramètre <code>memory_limit</code> de PHP ére a $1, portâ a $2.",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] est enstalâ",
+    "config-apc": "[http://www.php.net/apc APC] est enstalâ",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] est enstalâ",
+    "config-diff3-bad": "GNU diff3 entrovâblo.",
+    "config-db-type": "Tipo de bâsa de balyês :",
+    "config-db-host": "Hôto de la bâsa de balyês :",
+    "config-db-host-oracle": "TNS de la bâsa de balyês :",
+    "config-db-wiki-settings": "Identifiar cél vouiqui",
+    "config-db-name": "Nom de la bâsa de balyês :",
+    "config-db-name-oracle": "Plan de bâsa de balyês :",
+    "config-db-install-account": "Compto usanciér por l’enstalacion",
+    "config-db-username": "Nom d’usanciér de la bâsa de balyês :",
+    "config-db-password": "Contresegno de la bâsa de balyês :",
+    "config-db-wiki-account": "Compto usanciér por l’opèracion normala",
+    "config-db-prefix": "Prèfixo de les trâbles de la bâsa de balyês :",
+    "config-db-charset": "Juè de caractèros de la bâsa de balyês",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binèro",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 rètrocompatiblo UTF-8",
+    "config-mysql-old": "MySQL $1 ou ben ples novél est nècèssèro, vos avéd $2.",
+    "config-db-port": "Pôrt de la bâsa de balyês :",
+    "config-db-schema": "Plan por MediaWiki",
+    "config-pg-test-error": "Empossiblo de sè branchiér a la bâsa de donâs '''$1''' : $2",
+    "config-sqlite-dir": "Dossiér de les balyês SQLite :",
+    "config-oracle-def-ts": "Èspâço de stocâjo (''tablespace'') per dèfôt :",
+    "config-oracle-temp-ts": "Èspâço de stocâjo (''tablespace'') temporèro :",
+    "config-header-mysql": "Paramètres de MySQL",
+    "config-header-postgres": "Paramètres de PostgreSQL",
+    "config-header-sqlite": "Paramètres de SQLite",
+    "config-header-oracle": "Paramètres d’Oracle",
+    "config-invalid-db-type": "Tipo de bâsa de balyês envalido",
+    "config-missing-db-name": "Vos dête buchiér una valor por « Nom de la bâsa de balyês »",
+    "config-missing-db-host": "Vos dête buchiér una valor por « Hôto de la bâsa de balyês »",
+    "config-missing-db-server-oracle": "Vos dête buchiér una valor por « TNS de la bâsa de balyês »",
+    "config-sqlite-readonly": "Lo fichiér <code>$1</code> est pas accèssiblo en ècritura.",
+    "config-regenerate": "Refâre LocalSettings.php →",
+    "config-show-table-status": "Falyita de la requéta <code>SHOW TABLE STATUS</code> !",
+    "config-db-web-account": "Compto de la bâsa de balyês por l’accès vouèbe",
+    "config-db-web-account-same": "Utilisâd lo mémo compto que por l’enstalacion",
+    "config-db-web-create": "Féte lo compto s’ègziste p’oncor",
+    "config-mysql-engine": "Motor de stocâjo :",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-charset": "Juè de caractèros de la bâsa de balyês :",
+    "config-mysql-binary": "Binèro",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Nom du vouiqui :",
+    "config-site-name-blank": "Buchiéd un nom de seto.",
+    "config-project-namespace": "Èspâço de noms du projèt :",
+    "config-ns-generic": "Projèt",
+    "config-ns-site-name": "Mémo nom que lo vouiqui : $1",
+    "config-ns-other": "Ôtro (spècefiar)",
+    "config-ns-other-default": "MonVouiqui",
+    "config-admin-box": "Compto administrator",
+    "config-admin-name": "Voutron nom :",
+    "config-admin-password": "Contresegno :",
+    "config-admin-password-confirm": "Tornar buchiér lo contresegno :",
+    "config-admin-name-blank": "Buchiéd un nom d’administrator.",
+    "config-admin-password-blank": "Buchiéd un contresegno por lo compto administrator.",
+    "config-admin-email": "Adrèce èlèctronica :",
+    "config-optional-continue": "Mè posar més de quèstions.",
+    "config-profile": "Profil des drêts d’usanciér :",
+    "config-profile-wiki": "Vouiqui tradicionâl",
+    "config-profile-no-anon": "Crèacion de compto nècèssèra",
+    "config-profile-fishbowl": "Solament los èditors ôtorisâs",
+    "config-profile-private": "Vouiqui privâ",
+    "config-license": "Drêts d’ôtor et licence :",
+    "config-license-none": "Gins de licence d’avâl la pâge",
+    "config-license-cc-by-sa": "Creative Commons patèrnitât - partâjo a l’identico",
+    "config-license-cc-by": "Creative Commons patèrnitât",
+    "config-license-cc-by-nc-sa": "Creative Commons patèrnitât pas comèrciâla - partâjo a l’identico",
+    "config-license-cc-0": "Creative Commons Zero (domêno publico)",
+    "config-license-gfdl": "Licence de documentacion libra GNU 1.3 ou ben ples novèla",
+    "config-license-pd": "Domêno publico",
+    "config-license-cc-choose": "Chouèsir una licence Creative Commons pèrsonalisâ",
+    "config-email-settings": "Paramètres de mèssageria èlèctronica",
+    "config-enable-email": "Activar los mèssâjos que sôrtont",
+    "config-email-user": "Activar los mèssâjos d’usanciér a usanciér",
+    "config-email-usertalk": "Activar la notificacion de les pâges de discussion ux usanciérs",
+    "config-email-watchlist": "Activar la notificacion de la lista de survelyence",
+    "config-email-auth": "Activar l’ôtenticacion per mèssageria èlèctronica",
+    "config-email-sender": "Adrèce èlèctronica de retôrn :",
+    "config-upload-settings": "Tèlèchargement de les émâges et des fichiérs",
+    "config-upload-enable": "Activar lo tèlèchargement des fichiérs",
+    "config-upload-deleted": "Dossiér por los fichiérs suprimâs :",
+    "config-logo": "URL du logô :",
+    "config-instantcommons": "Activar Instant Commons",
+    "config-cc-again": "Tornâd chouèsir...",
+    "config-advanced-settings": "Configuracion avanciê",
+    "config-cache-options": "Paramètres por la misa en cache de les chouses :",
+    "config-cache-accel": "Misa en cache de les chouses PHP (APC, XCache ou ben WinCache)",
+    "config-memcached-servers": "Sèrvors por memcached :",
+    "config-extensions": "Èxtensions",
+    "config-install-step-done": "fêt",
+    "config-install-step-failed": "falyita",
+    "config-install-extensions": "Encllusion de les èxtensions",
+    "config-install-database": "Crèacion de la bâsa de balyês",
+    "config-install-schema": "Crèacion de plan",
+    "config-install-pg-schema-not-exist": "Lo plan PostgreSQL ègziste pas",
+    "config-install-pg-commit": "Validacion des changements",
+    "config-install-pg-plpgsql": "Contrôlo du lengâjo PL/pgSQL",
+    "config-install-user": "Crèacion d’un usanciér de la bâsa de balyês",
+    "config-install-user-alreadyexists": "L’usanciér « $1 » ègziste ja",
+    "config-install-user-create-failed": "Falyita pendent la crèacion de l’usanciér « $1 » : $2",
+    "config-install-user-grant-failed": "Falyita pendent l’aponsa de pèrmissions a l’usanciér « $1 » : $2",
+    "config-install-tables": "Crèacion de les trâbles",
+    "config-install-interwiki": "Remplissâjo per dèfôt de la trâbla des entèrvouiquis",
+    "config-install-interwiki-list": "Empossiblo de trovar lo fichiér <code>interwiki.list</code>.",
+    "config-install-stats": "Inicialisacion de les statistiques",
+    "config-install-keys": "G·ènèracion de les cllâfs secrètes",
+    "config-install-sysop": "Crèacion du compto administrator",
+    "config-install-subscribe-fail": "Empossiblo de s’abonar a mediawiki-announce : $1",
+    "config-install-mainpage": "Crèacion de la pâge principâla avouéc un contegnu per dèfôt",
+    "config-install-extension-tables": "Crèacion de trâbles por les èxtensions activâs",
+    "config-install-mainpage-failed": "Empossiblo d’entrebetar la pâge principâla : $1",
+    "config-download-localsettings": "Tèlèchargiér <code>LocalSettings.php</code>",
+    "config-help": "éde",
+    "mainpagetext": "'''MediaWiki at étâ enstalâ avouéc reusséta.'''",
+    "mainpagedocfooter": "Vêde lo [//meta.wikimedia.org/wiki/Aide:Contenu guido d’usanciér] por més d’enformacions sur l’usâjo de la programeria vouiqui.\n\n== Emmodar avouéc MediaWiki ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista des paramètres de configuracion]\n* [//www.mediawiki.org/wiki/Manual:FAQ/fr FDQ sur MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussion sur les distribucions de MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/frr.json b/includes/installer/i18n/frr.json
new file mode 100644 (file)
index 0000000..88ccbcd
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Murma174",
+            "Pyt"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki wörd ma erfolch instaliird.'''",
+    "mainpagedocfooter": "Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.\n\n== Getting started ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localise MediaWiki for your language]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/fur.json b/includes/installer/i18n/fur.json
new file mode 100644 (file)
index 0000000..79cd43c
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki e je stade instalade cun sucès.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/fy.json b/includes/installer/i18n/fy.json
new file mode 100644 (file)
index 0000000..34734c1
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki-program goed ynstallearre.'''",
+    "mainpagedocfooter": "Rieplachtsje de [//meta.wikimedia.org/wiki/Help:Ynhâldsopjefte hantlieding] foar ynformaasje oer it gebrûk fan 'e wikisoftware.\n\n== Mear help oer Mediawiki ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings List mei ynstellings]\n* [//www.mediawiki.org/wiki/Manual:FAQ Faak stelde fragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglist foar oankundigings fan nije ferzjes]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ga.json b/includes/installer/i18n/ga.json
new file mode 100644 (file)
index 0000000..51f931a
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "පසිඳු කාවින්ද"
+        ]
+    },
+    "config-page-language": "Teanga",
+    "config-page-name": "Ainm",
+    "config-admin-password": "D'fhocal faire:",
+    "config-help": "Cuidiú",
+    "mainpagetext": "'''D'éirigh le suiteáil MediaWiki.'''",
+    "mainpagedocfooter": "Féach ar [//meta.wikimedia.org/wiki/MediaWiki_localisation doiciméid um conas an chomhéadán a athrú]\nagus an [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Lámhleabhar úsáideora] chun cabhair úsáide agus fíoraíochta a fháil."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/gag.json b/includes/installer/i18n/gag.json
new file mode 100644 (file)
index 0000000..9967905
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki başarılan kuruldu.'''",
+    "mainpagedocfooter": "Vikilän iş uurunda bilgi almaa için [//meta.wikimedia.org/wiki/Help:Contents User's Guide] sayfasına bakınız\n\n== Eni başlayanlar için ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/gan-hans.json b/includes/installer/i18n/gan-hans.json
new file mode 100644 (file)
index 0000000..25e89ea
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''安装正MediaWiki喽。'''",
+    "mainpagedocfooter": "参看[//meta.wikimedia.org/wiki/Help:Contents 用户指南]里头会话到啷用wiki软件\n\n== 开始使用 ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki 配置设定列表]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 平常问题解答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 发布email清单]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/gan-hant.json b/includes/installer/i18n/gan-hant.json
new file mode 100644 (file)
index 0000000..2924deb
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Symane"
+        ]
+    },
+    "mainpagetext": "'''安裝正MediaWiki哩。'''",
+    "mainpagedocfooter": "參看[//meta.wikimedia.org/wiki/Help:Contents 用戶指南]裡頭會話到啷用wiki軟件\n\n== 開始使用 ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki 配置設定列表]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 平常問題解答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈email清單]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/gd.json b/includes/installer/i18n/gd.json
new file mode 100644 (file)
index 0000000..0fbe2fe
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Akerbeltz"
+        ]
+    },
+    "mainpagetext": "'''Chaidh MediaWiki a stàladh gu soirbheachail.'''",
+    "mainpagedocfooter": "Cuir sùil air [//meta.wikimedia.org/wiki/Help:Contents treòir nan cleachdaichean] airson fiosrachadh mu chleachdadh a' bhathar-bhog wiki.\n\n== Toiseach tòiseachaidh ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liosta suidheachadh nan roghainnean]\n* [//www.mediawiki.org/wiki/Manual:FAQ CÀBHA MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liosta puist nan sgaoilidhean MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Cuir do chànan air MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/gl.json b/includes/installer/i18n/gl.json
new file mode 100644 (file)
index 0000000..fe51f70
--- /dev/null
@@ -0,0 +1,312 @@
+{
+    "@metadata": {
+        "authors": [
+            "Elisardojm",
+            "Toliño",
+            "아라"
+        ]
+    },
+    "config-desc": "O programa de instalación de MediaWiki",
+    "config-title": "Instalación de MediaWiki $1",
+    "config-information": "Información",
+    "config-localsettings-upgrade": "Detectouse un ficheiro <code>LocalSettings.php</code>.\nPara actualizar esta instalación, introduza o valor de <code>$wgUpgradeKey</code> na caixa.\nPode atopalo en <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Detectouse un ficheiro <code>LocalSettings.php</code>.\nPara actualizar esta instalación, execute <code>update.php</code>",
+    "config-localsettings-key": "Clave de actualización:",
+    "config-localsettings-badkey": "A clave dada é incorrecta",
+    "config-upgrade-key-missing": "Detectouse unha instalación existente de MediaWiki.\nPara actualizar esta instalación, inclúa esta liña ao final do ficheiro <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "Semella que o ficheiro <code>LocalSettings.php</code> existente está incompleto.\nA variable $1 non está establecida.\nModifique o ficheiro <code>LocalSettings.php</code> de xeito que a variable quede establecida e prema en \"{{int:Config-continue}}\".",
+    "config-localsettings-connection-error": "Atopouse un erro ao conectar coa base de datos empregando a configuración especificada no ficheiro <code>LocalSettings.php</code> ou no ficheiro <code>AdminSettings.php</code>. Corrixa esta configuración e inténteo de novo.\n\n$1",
+    "config-session-error": "Erro ao iniciar a sesión: $1",
+    "config-session-expired": "Semella que os seus datos da sesión caducaron.\nAs sesións están configuradas para unha duración de $1.\nPode incrementar isto fixando <code>session.gc_maxlifetime</code> en php.ini.\nReinicie o proceso de instalación.",
+    "config-no-session": "Perdéronse os datos da súa sesión!\nComprobe o seu php.ini e asegúrese de que en <code>session.save_path</code> está definido un directorio correcto.",
+    "config-your-language": "A súa lingua:",
+    "config-your-language-help": "Seleccione a lingua que se empregará durante o proceso de instalación.",
+    "config-wiki-language": "Lingua do wiki:",
+    "config-wiki-language-help": "Seleccione a lingua que predominará no wiki.",
+    "config-back": "← Volver",
+    "config-continue": "Continuar →",
+    "config-page-language": "Lingua",
+    "config-page-welcome": "Benvido a MediaWiki!",
+    "config-page-dbconnect": "Conectarse á base de datos",
+    "config-page-upgrade": "Actualizar a instalación actual",
+    "config-page-dbsettings": "Configuración da base de datos",
+    "config-page-name": "Nome",
+    "config-page-options": "Opcións",
+    "config-page-install": "Instalar",
+    "config-page-complete": "Completo!",
+    "config-page-restart": "Reiniciar a instalación",
+    "config-page-readme": "Léame",
+    "config-page-releasenotes": "Notas de lanzamento",
+    "config-page-copying": "Copiar",
+    "config-page-upgradedoc": "Actualizar",
+    "config-page-existingwiki": "Wiki existente",
+    "config-help-restart": "Quere eliminar todos os datos gardados e reiniciar o proceso de instalación?",
+    "config-restart": "Si, reiniciala",
+    "config-welcome": "=== Comprobación da contorna ===\nCómpre realizar agora unhas comprobacións básicas para ver se a contorna é axeitada para a instalación de MediaWiki.\nLembre incluír esta información se necesita axuda para completar a instalación.",
+    "config-copyright": "=== Dereitos de autor e termos de uso ===\n\n$1\n\nEste programa é software libre; pode redistribuílo e/ou modificalo segundo os termos da licenza pública xeral GNU publicada pola Free Software Foundation; versión 2 ou (na súa escolla) calquera outra posterior.\n\nEste programa distribúese coa esperanza de que poida ser útil, pero '''sen garantía ningunha'''; nin sequera a garantía implícita de '''comercialización''' ou '''adecuación a unha finalidade específica'''.\nOlle a licenza pública xeral GNU para obter máis detalles.\n\nDebería recibir <doclink href=Copying>unha copia da licenza pública xeral GNU</doclink> xunto ao programa; se non é así, escriba á Free Software Foundation, Inc., rúa Franklin, número 51, quinto andar, Boston, Massachusetts, 02110-1301, Estados Unidos de América ou [http://www.gnu.org/copyleft/gpl.html lea a licenza en liña].",
+    "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/gl Páxina principal de MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents Guía de usuario]\n* [//www.mediawiki.org/wiki/Manual:Contents Guía de administrador]\n* [//www.mediawiki.org/wiki/Manual:FAQ Preguntas máis frecuentes]\n----\n* <doclink href=Readme>Léame</doclink>\n* <doclink href=ReleaseNotes>Notas de lanzamento</doclink>\n* <doclink href=Copying>Copia</doclink>\n* <doclink href=UpgradeDoc>Actualizacións</doclink>",
+    "config-env-good": "Rematou a comprobación da contorna.\nPode instalar MediaWiki.",
+    "config-env-bad": "Rematou a comprobación da contorna.\nNon pode instalar MediaWiki.",
+    "config-env-php": "Está instalado o PHP $1.",
+    "config-env-php-toolow": "Está instalado o PHP $1.\nPorén, MediaWiki necesita o PHP $2 ou superior.",
+    "config-unicode-using-utf8": "Usando utf8_normalize.so de Brion Vibber para a normalización Unicode.",
+    "config-unicode-using-intl": "Usando a [http://pecl.php.net/intl extensión intl PECL] para a normalización Unicode.",
+    "config-unicode-pure-php-warning": "'''Atención:''' A [http://pecl.php.net/intl extensión intl PECL] non está dispoñible para manexar a normalización Unicode; volvendo á implementación lenta de PHP puro.\nSe o seu sitio posúe un alto tráfico de visitantes, debería ler un chisco sobre a [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalización Unicode].",
+    "config-unicode-update-warning": "'''Atención:''' A versión instalada da envoltura de normalización Unicode emprega unha versión vella da biblioteca [http://site.icu-project.org/ do proxecto ICU].\nDebería [//www.mediawiki.org/wiki/Unicode_normalization_considerations actualizar] se o uso de Unicode é importante para vostede.",
+    "config-no-db": "Non se puido atopar un controlador axeitado para a base de datos! Necesita instalar un controlador de base de datos para PHP.\nOs tipos de base de datos admitidos son os seguintes: $1.\n\nSe está nun aloxamento compartido, pregunte ao seu provedor de hospedaxe para instalar un controlador de base de datos axeitado.\nSe compilou o PHP vostede mesmo, reconfigúreo activando un cliente de base de datos, por exemplo, usando <code>./configure --with-mysql</code>.\nSe instalou o PHP desde un paquete Debian ou Ubuntu, entón tamén necesita instalar o módulo php5-mysql.",
+    "config-outdated-sqlite": "'''Atención:''' Ten o SQLite $1, que é inferior á versión mínima necesaria: $2. O SQLite non estará dispoñible.",
+    "config-no-fts3": "'''Atención:''' O SQLite está compilado sen o [//sqlite.org/fts3.html módulo FTS3]; as características de procura non estarán dispoñibles nesta instalación.",
+    "config-register-globals": "'''Atención: A opción PHP <code>[http://php.net/register_globals register_globals]</code> está activada.'''\n'''Desactívea se pode.'''\nMediaWiki funcionará, pero o seu servidor está exposto a potenciais vulnerabilidades de seguridade.",
+    "config-magic-quotes-runtime": "'''Erro fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está activado!'''\nEsta opción corrompe os datos de entrada de xeito imprevisible.\nNon pode instalar ou empregar MediaWiki a menos que esta opción estea desactivada.",
+    "config-magic-quotes-sybase": "'''Erro fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está activado!'''\nEsta opción corrompe os datos de entrada de xeito imprevisible.\nNon pode instalar ou empregar MediaWiki a menos que esta opción estea desactivada.",
+    "config-mbstring": "'''Erro fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está activado!'''\nEsta opción causa erros e pode corromper os datos de xeito imprevisible.\nNon pode instalar ou empregar MediaWiki a menos que esta opción estea desactivada.",
+    "config-ze1": "'''Erro fatal: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] está activado!'''\nEsta opción causa erros horribles en MediaWiki.\nNon pode instalar ou empregar MediaWiki a menos que esta opción estea desactivada.",
+    "config-safe-mode": "'''Atención:''' O [http://www.php.net/features.safe-mode safe mode] do PHP está activado.\nIsto pode causar problemas, particularmente se emprega cargas de ficheiros e soporte de <code>math</code>.",
+    "config-xml-bad": "Falta o módulo XML do PHP.\nMediaWiki necesita funcións neste módulo e non funcionará con esta configuración.\nSe está executando o Mandrake, instale o paquete php-xml.",
+    "config-pcre": "Semella que falta o módulo de soporte PCRE.\nMediaWiki necesita que funcionen as expresións regulares compatibles co Perl.",
+    "config-pcre-no-utf8": "'''Erro fatal:''' Semella que o módulo PCRE do PHP foi compilado sen o soporte PCRE_UTF8.\nMediaWiki necesita soporte UTF-8 para funcionar correctamente.",
+    "config-memory-raised": "O parámetro <code>memory_limit</code> do PHP é $1. Aumentado a $2.",
+    "config-memory-bad": "'''Atención:''' O parámetro <code>memory_limit</code> do PHP é $1.\nProbablemente é un valor baixo de máis.\nA instalación pode fallar!",
+    "config-ctype": "'''Erro fatal:''' O PHP debe compilarse co soporte para a [http://www.php.net/manual/en/ctype.installation.php extensión Ctype].",
+    "config-json": "'''Erro fatal:''' O PHP compilouse sen o soporte de JSON.\nDebe instalar ben a extensión JSON do PHP ou a extensión [http://pecl.php.net/package/jsonc PECL jsonc] antes de instalar MediaWiki.\n* A extensión do PHP está incluída en Red Hat Enterprise Linux (CentOS) 5 e 6, mais debe activarse <code>/etc/php.ini</code> ou <code>/etc/php.d/json.ini</code>.\n* Algunhas distribucións do Linux lanzadas despois de maio de 2013 omiten a extensión do PHP, pero inclúen a extensión PECL como <code>php5-json</code> ou <code>php-pecl-jsonc</code>.",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] está instalado",
+    "config-apc": "[http://www.php.net/apc APC] está instalado",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado",
+    "config-no-cache": "'''Atención:''' Non se puido atopar [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] ou [http://www.iis.net/download/WinCacheForPhp WinCache].\nA caché de obxectos está desactivada.",
+    "config-mod-security": "'''Atención:''' O seu servidor web ten o [http://modsecurity.org/ mod_security] activado. Se estivese mal configurado, pode causar problemas a MediaWiki ou calquera outro software que permita aos usuarios publicar contidos arbitrarios.\nOlle a [http://modsecurity.org/documentation/ documentación do mod_security] ou póñase en contacto co soporte do seu servidor se atopa erros aleatorios.",
+    "config-diff3-bad": "GNU diff3 non se atopou.",
+    "config-git": "Atopouse o software de control da versión de Git: <code>$1</code>.",
+    "config-git-bad": "Non se atopou o software de control da versión de Git.",
+    "config-imagemagick": "ImageMagick atopado: <code>$1</code>.\nAs miniaturas de imaxes estarán dispoñibles se activa as cargas.",
+    "config-gd": "Atopouse a biblioteca gráfica GD integrada.\nAs miniaturas de imaxes estarán dispoñibles se activa as cargas.",
+    "config-no-scaling": "Non se puido atopar a biblioteca GD ou ImageMagick.\nAs miniaturas de imaxes estarán desactivadas.",
+    "config-no-uri": "'''Erro:''' Non se puido determinar o URI actual.\nInstalación abortada.",
+    "config-no-cli-uri": "'''Aviso:''' Non se especificou ningún --scriptpath; por defecto, usarase: <code>$1</code>.",
+    "config-using-server": "Usando o nome do servidor \"<nowiki>$1</nowiki>\".",
+    "config-using-uri": "Usando o URL do servidor \"<nowiki>$1$2</nowiki>\".",
+    "config-uploads-not-safe": "'''Atención:''' O seu directorio por defecto para as cargas, <code>$1</code>, é vulnerable a execucións arbitrarias de escrituras.\nAínda que MediaWiki comproba todos os ficheiros cargados por se houbese ameazas de seguridade, é amplamente recomendable [//www.mediawiki.org/wiki/Manual:Security#Upload_security pechar esta vulnerabilidade de seguridade] antes de activar as cargas.",
+    "config-no-cli-uploads-check": "'''Atención:''' Durante a instalación CLI, o seu directorio por defecto para as cargas, <code>$1</code>, non se comproba fronte a posibles vulnerabilidades de execucións arbitrarias de escrituras.",
+    "config-brokenlibxml": "O seu sistema ten unha combinación de versións de PHP e libxml2 que pode ser problemático e causar corrupción de datos en MediaWiki e outras aplicacións web.\nActualice o sistema á versión 5.2.9 ou posterior do PHP e á 2.7.3 ou posterior de libxml2 ([//bugs.php.net/bug.php?id=45996 erro presentado co PHP]).\nInstalación abortada.",
+    "config-using531": "O PHP $1 non é compatible con MediaWiki debido a un erro que afecta aos parámetros de referencia de <code>__call()</code>.\nActualice o sistema á versión 5.3.2 ou posterior do PHP ou volva á versión 5.3.0 do PHP para arranxar o problema.\nInstalación abortada.",
+    "config-suhosin-max-value-length": "Suhosin está instalado e limita o parámetro GET <code>length</code> a $1 bytes.\nO compoñente ResourceLoader (xestor de recursos) de MediaWiki traballa neste límite, pero este prexudica o rendemento.\nSe é posible, debería establecer <code>suhosin.get.max_value_length</code> no valor 1024 ou superior en <code>php.ini</code> e establecer <code>$wgResourceLoaderMaxQueryLength</code> no mesmo valor en <code>LocalSettings.php</code>.",
+    "config-db-type": "Tipo de base de datos:",
+    "config-db-host": "Servidor da base de datos:",
+    "config-db-host-help": "Se o servidor da súa base de datos está nun servidor diferente, escriba o nome do servidor ou o enderezo IP aquí.\n\nSe está usando un aloxamento web compartido, o seu provedor de hospedaxe debe darlle o nome de servidor correcto na súa documentación.\n\nSe está a realizar a instalación nun servidor de Windows con MySQL, o nome \"localhost\" pode non valer como servidor. Se non funcionase, inténteo con \"127.0.0.1\" como enderezo IP local.\n\nSe está usando PostgreSQL, deixe este campo en branco para facer a conexión a través do conectador Unix.",
+    "config-db-host-oracle": "TNS da base de datos:",
+    "config-db-host-oracle-help": "Insira un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nome de conexión local] válido; cómpre que haxa visible un ficheiro tnsnames.ora para esta instalación.<br />Se está a empregar bibliotecas cliente versión 10g ou máis recentes, tamén pode usar o método de atribución de nomes [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+    "config-db-wiki-settings": "Identificar o wiki",
+    "config-db-name": "Nome da base de datos:",
+    "config-db-name-help": "Escolla un nome que identifique o seu wiki.\nNon debe conter espazos.\n\nSe está usando un aloxamento web compartido, o seu provedor de hospedaxe daralle un nome específico para a base de datos ou deixaralle crear unha a través do panel de control.",
+    "config-db-name-oracle": "Esquema da base de datos:",
+    "config-db-account-oracle-warn": "Existen tres escenarios soportados para a instalación de Oracle como fin da base de datos:\n\nSe quere crear unha conta para a base de datos como parte do proceso de instalación, proporcione unha conta co papel SYSDBA e especifique as credenciais desexadas para a conta; senón pode crear a conta manualmente e dar só esa conta (se ten os permisos necesarios para crear os obxectos do esquema) ou fornecer dous contas diferentes, unha con privilexios de creación e outra restrinxida para o acceso á web.\n\nA escritura para crear unha conta cos privilexios necesarios atópase no directorio \"maintenance/oracle/\" desta instalación. Teña en conta que o emprego de contas restrinxidas desactivará todas as operacións de mantemento da conta predeterminada.",
+    "config-db-install-account": "Conta de usuario para a instalación",
+    "config-db-username": "Nome de usuario da base de datos:",
+    "config-db-password": "Contrasinal da base de datos:",
+    "config-db-password-empty": "Introduza un contrasinal para o novo usuario da base de datos: $1.\nMalia que é posible crear usuarios sen contrasinal, esta práctica non é segura.",
+    "config-db-install-username": "Escriba o nome de usuario que empregará para conectarse á base de datos durante o proceso de instalación. Este non é o nome de usuario da conta de MediaWiki, trátase do nome de usuario para a súa base de datos.",
+    "config-db-install-password": "Escriba o contrasinal que empregará para conectarse á base de datos durante o proceso de instalación. Este non é o contrasinal da conta de MediaWiki, trátase do contrasinal para a súa base de datos.",
+    "config-db-install-help": "Introduza o nome de usuario e contrasinal que se usará para conectar á base de datos durante o proceso de instalación.",
+    "config-db-account-lock": "Use o mesmo nome de usuario e contrasinal despois do proceso de instalación",
+    "config-db-wiki-account": "Conta de usuario para despois do proceso de instalación",
+    "config-db-wiki-help": "Introduza o nome de usuario e mais o contrasinal que se usarán para conectar á base de datos durante o funcionamento habitual do wiki.\nSe a conta non existe e a conta de instalación ten privilexios suficientes, esa conta de usuario será creada cos privilexios mínimos necesarios para o funcionamento do wiki.",
+    "config-db-prefix": "Prefixo das táboas da base de datos:",
+    "config-db-prefix-help": "Se necesita compartir unha base de datos entre varios wikis ou entre MediaWiki e outra aplicación web, pode optar por engadir un prefixo a todos os nomes da táboa para evitar conflitos.\nNon utilice espazos.\n\nO normal é que este campo quede baleiro.",
+    "config-db-charset": "Conxunto de caracteres da base de datos",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binario",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 retrocompatible UTF-8",
+    "config-charset-help": "'''Atención:''' Se emprega '''backwards-compatible UTF-8''' no MySQL 4.1+ e posteriormente realiza unha copia de seguridade da base de datos con <code>mysqldump</code>, pode destruír todos os caracteres que non sexan ASCII, corrompendo de xeito irreversible as súas copias!\n\nNo '''modo binario''', MediaWiki almacena texto UTF-8 na base de datos en campos binarios.\nIsto é máis eficaz ca o modo UTF-8 de MySQL e permítelle usar o rango completo de caracteres Unicode.\nNo '''modo UTF-8''', MySQL saberá o xogo de caracteres dos seus datos e pode presentar e converter os datos de maneira axeitada,\npero non lle deixará gardar caracteres por riba do [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingüe básico].",
+    "config-mysql-old": "Necesítase MySQL $1 ou posterior; ten a versión $2.",
+    "config-db-port": "Porto da base de datos:",
+    "config-db-schema": "Esquema para MediaWiki",
+    "config-db-schema-help": "O normal é que este esquema sexa correcto.\nCámbieo soamente se sabe que é necesario.",
+    "config-pg-test-error": "Non se pode conectar coa base de datos '''$1''': $2",
+    "config-sqlite-dir": "Directorio de datos SQLite:",
+    "config-sqlite-dir-help": "SQLite recolle todos os datos nun ficheiro único.\n\nO servidor web debe ter permisos sobre o directorio para que poida escribir nel durante a instalación.\n\nAdemais, o servidor '''non''' debe ser accesible a través da web, motivo polo que non está no mesmo lugar ca os ficheiros PHP.\n\nAsemade, o programa de instalación escribirá un ficheiro <code>.htaccess</code>, pero se erra alguén pode obter acceso á súa base de datos.\nIsto inclúe datos de usuario (enderezos de correo electrónico, contrasinais codificados), así como revisións borradas e outros datos restrinxidos no wiki.\n\nConsidere poñer a base de datos nun só lugar, por exemplo en <code>/var/lib/mediawiki/oseuwiki</code>.",
+    "config-oracle-def-ts": "Espazo de táboas por defecto:",
+    "config-oracle-temp-ts": "Espazo de táboas temporal:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "MediaWiki soporta os seguintes sistemas de bases de datos:\n\n$1\n\nSe non ve listado a continuación o sistema de base de datos que intenta usar, siga as instrucións ligadas enriba para activar o soporte.",
+    "config-support-mysql": "* $1 é o obxectivo principal para MediaWiki e está mellor soportado ([http://www.php.net/manual/en/mysql.installation.php como compilar o PHP con soporte MySQL])",
+    "config-support-postgres": "* $1 é un sistema de base de datos popular e de código aberto como alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php como compilar o PHP con soporte PostgreSQL]). É posible que haxa algúns pequenos erros e non se recomenda o seu uso nunha contorna de produción.",
+    "config-support-sqlite": "* $1 é un sistema de base de datos lixeiro moi ben soportado. ([http://www.php.net/manual/en/pdo.installation.php Como compilar o PHP con soporte SQLite], emprega PDO)",
+    "config-support-oracle": "* $1 é un sistema comercial de xestión de base de datos de empresa. ([http://www.php.net/manual/en/oci8.installation.php Como compilar o PHP con soporte OCI8])",
+    "config-header-mysql": "Configuración do MySQL",
+    "config-header-postgres": "Configuración do PostgreSQL",
+    "config-header-sqlite": "Configuración do SQLite",
+    "config-header-oracle": "Configuración do Oracle",
+    "config-invalid-db-type": "Tipo de base de datos incorrecto",
+    "config-missing-db-name": "Debe escribir un valor \"Nome da base de datos\"",
+    "config-missing-db-host": "Debe escribir un valor \"Servidor da base de datos\"",
+    "config-missing-db-server-oracle": "Debe escribir un valor \"TNS da base de datos\"",
+    "config-invalid-db-server-oracle": "O TNS da base de datos, \"$1\", é incorrecto.\nUtilice só \"TNS Name\" ou unha cadea de texto \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm métodos de nomeamento de Oracle])",
+    "config-invalid-db-name": "O nome da base de datos, \"$1\", é incorrecto.\nSó pode conter letras ASCII (a-z, A-Z), números (0-9), guións baixos (_) e guións (-).",
+    "config-invalid-db-prefix": "O prefixo da base de datos, \"$1\", é incorrecto.\nSó pode conter letras ASCII (a-z, A-Z), números (0-9), guións baixos (_) e guións (-).",
+    "config-connection-error": "$1.\n\nComprobe o servidor, nome de usuario e contrasinal que hai a continuación e inténteo de novo.",
+    "config-invalid-schema": "O esquema de MediaWiki, \"$1\", é incorrecto.\nSó pode conter letras ASCII (a-z, A-Z), números (0-9) e guións baixos (_).",
+    "config-db-sys-create-oracle": "O programa de instalación soamente soporta o emprego de contas SYSDBA como método para crear unha nova conta.",
+    "config-db-sys-user-exists-oracle": "A conta de usuario \"$1\" xa existe. SYSDBA soamente se pode empregar para a creación dunha nova conta!",
+    "config-postgres-old": "Necesítase PostgreSQL $1 ou posterior; ten a versión $2.",
+    "config-sqlite-name-help": "Escolla un nome que identifique o seu wiki.\nNon utilice espazos ou guións.\nEste nome será utilizado para o ficheiro de datos SQLite.",
+    "config-sqlite-parent-unwritable-group": "Non se puido crear o directorio de datos <code><nowiki>$1</nowiki></code>, porque o servidor web non pode escribir no directorio pai <code><nowiki>$2</nowiki></code>.\n\nO programa de instalación determinou o usuario que executa o seu servidor web.\nPara continuar, faga que se poida escribir no directorio <code><nowiki>$3</nowiki></code>.\nNun sistema Unix/Linux cómpre realizar:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Non se puido crear o directorio de datos <code><nowiki>$1</nowiki></code>, porque o servidor web non pode escribir no directorio pai <code><nowiki>$2</nowiki></code>.\n\nO programa de instalación non puido determinar o usuario que executa o seu servidor web.\nPara continuar, faga que se poida escribir globalmente no directorio <code><nowiki>$3</nowiki></code>.\nNun sistema Unix/Linux cómpre realizar:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Erro ao crear o directorio de datos \"$1\".\nComprobe a localización e inténteo de novo.",
+    "config-sqlite-dir-unwritable": "Non se puido escribir o directorio \"$1\".\nCambie os permisos para que o servidor poida escribir nel e inténteo de novo.",
+    "config-sqlite-connection-error": "$1.\n\nComprobe o directorio de datos e o nome da base de datos que hai a continuación e inténteo de novo.",
+    "config-sqlite-readonly": "Non se pode escribir no ficheiro <code>$1</code>.",
+    "config-sqlite-cant-create-db": "Non se puido crear o ficheiro da base de datos <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "Falta o soporte FTS3 para o PHP; diminuíndo as táboas",
+    "config-can-upgrade": "Existen táboas MediaWiki nesta base de datos.\nPara actualizalas a MediaWiki $1, prema sobre \"'''Continuar'''\".",
+    "config-upgrade-done": "Actualización completada.\n\nAgora pode [$1 comezar a utilizar o seu wiki].\n\nSe quere rexenerar o seu ficheiro <code>LocalSettings.php</code>, prema no botón que aparece a continuación.\nIsto '''non é recomendable''' a menos que estea a ter problemas co seu wiki.",
+    "config-upgrade-done-no-regenerate": "Actualización completada.\n\nXa pode [$1 comezar a usar o seu wiki].",
+    "config-regenerate": "Rexenerar LocalSettings.php →",
+    "config-show-table-status": "A pescuda <code>SHOW TABLE STATUS</code> fallou!",
+    "config-unknown-collation": "'''Atención:''' A base de datos está a empregar unha clasificación alfabética irrecoñecible.",
+    "config-db-web-account": "Conta na base de datos para o acceso á internet",
+    "config-db-web-help": "Seleccione o nome de usuario e contrasinal que o servidor web empregará para se conectar ao servidor da base de datos durante o funcionamento normal do wiki.",
+    "config-db-web-account-same": "Empregar a mesma conta que para a instalación",
+    "config-db-web-create": "Crear a conta se aínda non existe",
+    "config-db-web-no-create-privs": "A conta que especificou para a instalación non ten os privilexios suficientes para crear unha conta.\nA conta que se especifique aquí xa debe existir.",
+    "config-mysql-engine": "Motor de almacenamento:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Atención:''' Seleccionou MyISAM como o motor de almacenamento para MySQL, unha combinación non recomendada para MediaWiki, porque:\n* practicamente non soporta os accesos simultáneos debido ao bloqueo de táboas\n* é máis propenso a corromperse ca outros motores\n* o código base de MediaWiki non sempre manexa o MyISAM como debera\n\nSe a súa instalación MySQL soporta InnoDB, recoméndase elixilo no canto de MyISAM.\nSe a súa instalación MySQL non soporta InnoDB, quizais sexa boa idea realizar unha actualización.",
+    "config-mysql-only-myisam-dep": "'''Atención:''' MyISAM é o único motor de almacenamento para MySQL, unha combinación non recomendada para MediaWiki, porque:\n* practicamente non soporta os accesos simultáneos debido ao bloqueo de táboas\n* é máis propenso a corromperse ca outros motores\n* o código base de MediaWiki non sempre manexa o MyISAM como debera\n\nA súa instalación MySQL non soporta InnoDB, quizais sexa boa idea realizar unha actualización.",
+    "config-mysql-engine-help": "'''InnoDB''' é case sempre a mellor opción, dado que soporta ben os accesos simultáneos.\n\n'''MyISAM''' é máis rápido en instalacións de usuario único e de só lectura.\nAs bases de datos MyISAM tenden a se corromper máis a miúdo ca as bases de datos InnoDB.",
+    "config-mysql-charset": "Conxunto de caracteres da base de datos:",
+    "config-mysql-binary": "Binario",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "No '''modo binario''', MediaWiki almacena texto UTF-8 na base de datos en campos binarios.\nIsto é máis eficaz ca o modo UTF-8 de MySQL e permítelle usar o rango completo de caracteres Unicode.\n\nNo '''modo UTF-8''', MySQL saberá o xogo de caracteres dos seus datos e pode presentar e converter os datos de maneira axeitada,\npero non lle deixará gardar caracteres por riba do [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingüe básico].",
+    "config-site-name": "Nome do wiki:",
+    "config-site-name-help": "Isto aparecerá na barra de títulos do navegador e noutros lugares.",
+    "config-site-name-blank": "Escriba o nome do sitio.",
+    "config-project-namespace": "Espazo de nomes do proxecto:",
+    "config-ns-generic": "Proxecto",
+    "config-ns-site-name": "O mesmo nome que o wiki: $1",
+    "config-ns-other": "Outro (especificar)",
+    "config-ns-other-default": "OMeuWiki",
+    "config-project-namespace-help": "Seguindo o exemplo da Wikipedia, moitos wikis manteñen as súas páxinas de políticas separadas das súas páxinas de contido, nun \"'''espazo de nomes do proxecto'''\".\nTodos os títulos presentes neste espazo de nomes comezan cun prefixo determinado, que pode especificar aquí.\nTradicionalmente, este prefixo deriva do nome do wiki, pero non pode conter caracteres de puntuación como \"#\" ou \":\".",
+    "config-ns-invalid": "O espazo de nomes especificado, \"<nowiki>$1</nowiki>\", é incorrecto.\nEspecifique un espazo de nomes do proxecto diferente.",
+    "config-ns-conflict": "O espazo de nomes especificado, \"<nowiki>$1</nowiki>\", entra en conflito co espazo de nomes MediaWiki por defecto.\nEspecifique un espazo de nomes do proxecto diferente.",
+    "config-admin-box": "Conta de administrador",
+    "config-admin-name": "O seu nome:",
+    "config-admin-password": "Contrasinal:",
+    "config-admin-password-confirm": "Repita o contrasinal:",
+    "config-admin-help": "Escriba o nome de usuario que queira aquí, por exemplo, \"Joe Bloggs\".\nEste é o nome que usará para acceder ao sistema do wiki.",
+    "config-admin-name-blank": "Escriba un nome de usuario para o administrador.",
+    "config-admin-name-invalid": "O nome de usuario especificado, \"<nowiki>$1</nowiki>\", é incorrecto.\nEspecifique un nome de usuario diferente.",
+    "config-admin-password-blank": "Escriba un contrasinal para a conta de administrador.",
+    "config-admin-password-same": "O contrasinal debe diferir do nome de usuario.",
+    "config-admin-password-mismatch": "Os contrasinais non coinciden.",
+    "config-admin-email": "Enderezo de correo electrónico:",
+    "config-admin-email-help": "Escriba aquí un enderezo de correo electrónico para que poida recibir mensaxes doutros usuarios a través do wiki, restablecer o contrasinal e ser notificado das modificacións feitas nas páxinas presentes na súa lista de vixilancia. Pode deixar este campo en branco.",
+    "config-admin-error-user": "Erro interno ao crear un administrador co nome \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Erro interno ao establecer un contrasinal para o administrador \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+    "config-admin-error-bademail": "Escribiu un enderezo de correo electrónico non válido.",
+    "config-subscribe": "Subscríbase á [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista de correo de anuncios sobre lanzamentos].",
+    "config-subscribe-help": "Esta é unha lista de correos de baixo volume usada para anuncios sobre lanzamentos de novas versións, incluíndo avisos de seguridade importantes.\nDebería subscribirse a ela e actualizar a súa instalación MediaWiki cando saian as novas versións.",
+    "config-subscribe-noemail": "Intentou subscribirse á lista de correo dos anuncios de novos lanzamentos sen proporcionar o enderezo de correo electrónico.\nDea un enderezo de correo electrónico se quere efectuar a subscrición á lista de correo.",
+    "config-almost-done": "Xa case rematou!\nNeste 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 aberto",
+    "config-profile-no-anon": "Necesítase a creación dunha conta",
+    "config-profile-fishbowl": "Só os editores autorizados",
+    "config-profile-private": "Wiki privado",
+    "config-profile-help": "Os wikis funcionan mellor canta máis xente os edite.\nEn MediaWiki, é doado revisar os cambios recentes e reverter calquera dano feito por usuarios novatos ou con malas intencións.\nPoré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.\nVostede decide.\n\nO modelo '''{{int:config-profile-wiki}}''' permite a edición por parte de calquera, mesmo sen rexistro.\nA opción '''{{int:config-profile-no-anon}}''' proporciona un control maior, pero pode desalentar os colaboradores casuais.\n\nO 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.\nO tipo '''{{int:config-profile-private}}''' só deixa que os usuarios aprobados vexan e editen as páxinas.\n\nHai dispoñibles configuracións de dereitos de usuario máis complexas despois da instalación; bótelle un ollo a [//www.mediawiki.org/wiki/Manual:User_rights esta entrada no manual].",
+    "config-license": "Dereitos de autor e licenza:",
+    "config-license-none": "Sen licenza ao pé",
+    "config-license-cc-by-sa": "Creative Commons recoñecemento compartir igual",
+    "config-license-cc-by": "Creative Commons recoñecemento",
+    "config-license-cc-by-nc-sa": "Creative Commons recoñecemento non comercial compartir igual",
+    "config-license-cc-0": "Creative Commons Zero (dominio público)",
+    "config-license-gfdl": "Licenza de documentación libre de GNU 1.3 ou posterior",
+    "config-license-pd": "Dominio público",
+    "config-license-cc-choose": "Seleccione unha licenza Creative Commons personalizada",
+    "config-license-help": "Moitos wikis públicos liberan todas as súas contribucións baixo unha [http://freedomdefined.org/Definition/Gl licenza libre].\nIsto axuda a crear un sentido de propiedade comunitaria e anima a seguir contribuíndo durante moito tempo.\nXeralmente, non é necesario nos wikis privados ou de empresas.\n\nSe quere poder empregar textos da Wikipedia, así como que a Wikipedia poida aceptar textos copiados do seu wiki, escolla a licenza '''Creative Commons recoñecemento compartir igual'''.\n\nA licenza de documentación libre de GNU era a licenza anterior da Wikipedia.\nMalia aínda ser unha licenza válida, é difícil de entender.\nTamén é difícil reusar contidos baixo esta licenza.",
+    "config-email-settings": "Configuración do correo electrónico",
+    "config-enable-email": "Activar os correos electrónicos de saída",
+    "config-enable-email-help": "Se quere que o correo electrónico funcione, cómpre configurar os [http://www.php.net/manual/en/mail.configuration.php parámetros PHP] correctamente.\nSe non quere ningunha característica no correo, pode desactivalas aquí.",
+    "config-email-user": "Activar o intercambio de correos electrónicos entre usuarios",
+    "config-email-user-help": "Permitir que todos os usuarios intercambien correos electrónicos, se o teñen activado nas súas preferencias.",
+    "config-email-usertalk": "Activar a notificación da páxina de conversa de usuario",
+    "config-email-usertalk-help": "Permitir que os usuarios reciban notificacións cando a súa páxina de conversa de usuario sufra modificacións, se o teñen activado nas súas preferencias.",
+    "config-email-watchlist": "Activar a notificación da lista de vixilancia",
+    "config-email-watchlist-help": "Permitir que os usuarios reciban notificacións sobre modificacións nas páxinas que vixían, se o teñen activado nas súas preferencias.",
+    "config-email-auth": "Activar a autenticación do correo electrónico",
+    "config-email-auth-help": "Se esta opción está activada, os usuarios teñen que confirmar o seu correo electrónico mediante unha ligazón enviada ao enderezo cando o definan ou o cambien.\nSó os enderezos autenticados poden recibir correos doutros usuarios ou de notificación.\nÉ '''recomendable''' establecer esta opción nos wikis públicos para evitar abusos potenciais das características do correo.",
+    "config-email-sender": "Enderezo de correo electrónico de retorno:",
+    "config-email-sender-help": "Introduza o enderezo de correo electrónico a usar como enderezo de retorno dos correos de saída.\nAquí é onde irán parar os correos rexeitados.\nMoitos servidores de correo electrónico esixen que polo menos a parte do nome de dominio sexa válido.",
+    "config-upload-settings": "Imaxes e carga de ficheiros",
+    "config-upload-enable": "Activar a carga de ficheiros",
+    "config-upload-help": "A subida de ficheiros expón potencialmente o servidor a riscos de seguridade.\nPara obter máis información, lea a [//www.mediawiki.org/wiki/Manual:Security sección de seguridade] no manual.\n\nPara activar a carga de ficheiros, cambie o modo no subdirectorio <code>images</code> que está baixo o directorio raíz de MediaWiki, de xeito que o servidor web poida escribir nel.\nA continuación, active esta opción.",
+    "config-upload-deleted": "Directorio para os ficheiros borrados:",
+    "config-upload-deleted-help": "Escolla un directorio no que arquivar os ficheiros borrados.\nO ideal é que non sexa accesible desde a web.",
+    "config-logo": "URL do logo:",
+    "config-logo-help": "A aparencia de MediaWiki por defecto inclúe espazo para un logo de 135x160 píxeles por riba do menú lateral.\nCargue unha imaxe do tamaño axeitado e introduza o enderezo URL aquí.\n\nPode utilizar <code>$wgStylePath</code> ou <code>$wgScriptPath</code> se o seu logo está relacionado con esas rutas.\n\nSe non quere un logo, deixe esta caixa en branco.",
+    "config-instantcommons": "Activar Instant Commons",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons InstantCommons] é unha característica que permite aos wikis usar imaxes, sons e outros ficheiros multimedia atopados no sitio da [//commons.wikimedia.org/wiki/Portada_galega Wikimedia Commons].\nPara facer isto, MediaWiki necesita acceso á internet.\n\nPara obter máis información sobre esta característica, incluíndo as instrucións sobre como configuralo para outros wikis que non sexan a Wikimedia Commons, consulte [//mediawiki.org/wiki/Manual:$wgForeignFileRepos o manual].",
+    "config-cc-error": "A escolla da licenza Creative Commons non deu resultados.\nEscriba o nome da licenza manualmente.",
+    "config-cc-again": "Escolla outra vez...",
+    "config-cc-not-chosen": "Escolla a licenza Creative Commons que desexe e prema en \"continuar\".",
+    "config-advanced-settings": "Configuración avanzada",
+    "config-cache-options": "Configuración da caché de obxectos:",
+    "config-cache-help": "A caché de obxectos emprégase para mellorar a velocidade de MediaWiki mediante a memorización de datos usados con frecuencia.\nÉ amplamente recomendable a súa activación nos sitios de tamaño medio e grande; os sitios pequenos obterán tamén beneficios.",
+    "config-cache-none": "Sen caché (non se elimina ningunha funcionalidade, pero pode afectar á velocidade en wikis grandes)",
+    "config-cache-accel": "Caché de obxectos do PHP (APC, XCache ou WinCache)",
+    "config-cache-memcached": "Empregar o Memcached (necesita unha instalación e configuración adicional)",
+    "config-memcached-servers": "Servidores da memoria caché:",
+    "config-memcached-help": "Lista de enderezos IP para Memcached.\nDebe especificarse un por liña, así como o porto a usar. Por exemplo:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "Seleccionou Memcached como o seu tipo de caché, pero non especificou ningún servidor.",
+    "config-memcache-badip": "Escribiu un enderezo IP inválido para Memcached: $1.",
+    "config-memcache-noport": "Non especificou o porto a usar no servidor Memcached: $1.\nSe non sabe o porto, o predeterminado é 11211.",
+    "config-memcache-badport": "Os números de porto Memcached deben estar entre $1 e $2.",
+    "config-extensions": "Extensións",
+    "config-extensions-help": "As extensións anteriores detectáronse no seu directorio <code>./extensions</code>.\n\nQuizais 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.\nVaia ata a seguinte páxina.",
+    "config-install-begin": "Ao premer en \"{{int:config-continue}}\", comezará a instalación de MediaWiki.\nSe 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",
+    "config-install-database": "Configurando a base de datos",
+    "config-install-schema": "Creando o esquema",
+    "config-install-pg-schema-not-exist": "O esquema PostgreSQL non existe.",
+    "config-install-pg-schema-failed": "Fallou a creación de táboas.\nAsegúrese de que o usuario \"$1\" pode escribir no esquema \"$2\".",
+    "config-install-pg-commit": "Validando os cambios",
+    "config-install-pg-plpgsql": "Comprobación da lingua PL/pgSQL",
+    "config-pg-no-plpgsql": "Cómpre instalar a lingua PL/pgSQL na base de datos $1",
+    "config-pg-no-create-privs": "A conta especificada para a instalación non ten os privilexios necesarios para crear unha conta.",
+    "config-pg-not-in-role": "A conta especificada para o usuario web xa existe.\nA conta que especificou para a instalación non é un superusuario e non pertence ao grupo de usuarios con acceso á web, polo que non pode crear obxectos pertencentes ao usuario da rede.\n\nActualmente, MediaWiki necesita que as táboas sexan propiedade do usuario da rede. Especifique outro nome de conta web ou prema no botón \"Atrás\" e dea un usuario de instalación cos privilexios axeitados.",
+    "config-install-user": "Creando o usuario da base de datos",
+    "config-install-user-alreadyexists": "O usuario \"$1\" xa existe",
+    "config-install-user-create-failed": "A creación do usuario \"$1\" fallou: $2",
+    "config-install-user-grant-failed": "Fallou a concesión de permisos ao usuario \"$1\": $2",
+    "config-install-user-missing": "O usuario especificado, \"$1\", non existe.",
+    "config-install-user-missing-create": "O usuario especificado, \"$1\", non existe.\nPrema na caixa de verificación \"crear unha conta\" que hai a continuación se quere crear unha.",
+    "config-install-tables": "Creando as táboas",
+    "config-install-tables-exist": "'''Atención:''' Semella que as táboas de MediaWiki xa existen.\nSaltando a creación.",
+    "config-install-tables-failed": "'''Erro:''' Fallou a creación da táboa. Descrición do erro: $1",
+    "config-install-interwiki": "Enchendo a táboa de interwiki por defecto",
+    "config-install-interwiki-list": "Non se puido atopar o ficheiro <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "'''Atención:''' Semella que a táboa de interwiki xa contén entradas.\nSaltando a lista por defecto.",
+    "config-install-stats": "Iniciando as estatísticas",
+    "config-install-keys": "Xerando as claves secretas",
+    "config-insecure-keys": "'''Atención:''' {{PLURAL:$2|A clave de seguridade|As claves de seguridade}} ($1) {{PLURAL:$2|xerada|xeradas}} durante a instalación non {{PLURAL:$2|é|son}} completamente {{PLURAL:$2|segura|seguras}}. Considere a posibilidade de {{PLURAL:$2|cambiala|cambialas}} manualmente.",
+    "config-install-sysop": "Creando a conta de usuario de administrador",
+    "config-install-subscribe-fail": "Non se puido subscribir á lista mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "cURL non está instalado e allow_url_fopen non está dispoñible.",
+    "config-install-mainpage": "Creando a páxina principal co contido por defecto",
+    "config-install-extension-tables": "Creando as táboas para as extensións activadas",
+    "config-install-mainpage-failed": "Non se puido inserir a páxina principal: $1",
+    "config-install-done": "'''Parabéns!'''\nInstalou correctamente MediaWiki.\n\nO programa de instalación xerou un ficheiro <code>LocalSettings.php</code>.\nEste ficheiro contén toda a súa configuración.\n\nTerá que descargalo e poñelo na base da instalación do seu wiki (no mesmo directorio ca index.php). A descarga debería comezar automaticamente.\n\nSe non comezou a descarga ou se a cancelou, pode facer que comece de novo premendo na ligazón que aparece a continuación:\n\n$3\n\n'''Nota:''' Se non fai iso agora, este ficheiro de configuración xerado non estará dispoñible máis adiante se sae da instalación sen descargalo.\n\nCando faga todo isto, xa poderá '''[$2 entrar no seu wiki]'''.",
+    "config-download-localsettings": "Descargar o <code>LocalSettings.php</code>",
+    "config-help": "axuda",
+    "config-nofile": "Non se puido atopar o ficheiro \"$1\". Se cadra, foi borrado.",
+    "config-extension-link": "Sabía que o seu wiki soporta [//www.mediawiki.org/wiki/Manual:Extensions extensións]?\n\nPode explorar as [//www.mediawiki.org/wiki/Category:Extensions_by_category extensións por categoría] ou a [//www.mediawiki.org/wiki/Extension_Matrix matriz de extensións] para ollar a lista completa de extensións.",
+    "mainpagetext": "'''MediaWiki instalouse correctamente.'''",
+    "mainpagedocfooter": "Consulte a [//meta.wikimedia.org/wiki/Help:Contents guía de usuario] para obter máis información sobre como usar o software wiki.\n\n== Primeiros pasos ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista das opcións de configuración]\n* [//www.mediawiki.org/wiki/Manual:FAQ Preguntas máis frecuentes sobre MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo dos lanzamentos de MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localice MediaWiki á súa lingua]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/gom-latn.json b/includes/installer/i18n/gom-latn.json
new file mode 100644 (file)
index 0000000..31c7322
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "The Discoverer"
+        ]
+    },
+    "config-page-language": "Bhas"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/grc.json b/includes/installer/i18n/grc.json
new file mode 100644 (file)
index 0000000..abe9756
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Crazymadlover",
+            "Omnipaedista"
+        ]
+    },
+    "config-page-language": "Γλῶττα",
+    "mainpagetext": "'''Ἡ ἐγκατάστασις τῆς MediaWiki ἦν ἐπιτυχής'''",
+    "mainpagedocfooter": "Βουλευθήσεσθε τὰς [//meta.wikimedia.org/wiki/Help:Contents βουλὰς τοῖς Χρωμένοις] ἵνα πληροφορηθῇτε περὶ τοῦ βίκιλογισμικοῦ.\n\n== Ἄρξασθε ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Διαλογή παραμέτρων διαμορφώσεως]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki: τὰ πολλάκις αἰτηθέντα]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Διαλογή διαλέξεων ἐπὶ τῶν διανομῶν τῆς MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/gsw.json b/includes/installer/i18n/gsw.json
new file mode 100644 (file)
index 0000000..dbfa550
--- /dev/null
@@ -0,0 +1,70 @@
+{
+    "@metadata": {
+        "authors": [
+            "Als-Holder"
+        ]
+    },
+    "config-desc": "S MediaWiki-Inschtallationsprogramm",
+    "config-title": "MediaWiki $1 inschtalliere",
+    "config-information": "Information",
+    "config-localsettings-upgrade": "'''Warnig:''' E Datei <code>LocalSettings.php</code> isch gfunde wore.\nFir d Aktualisierig vu dr däre Inschtallation, gib bitte dr Wärt vum Parameter <code>$wgUpgradeKey</code> im Fäld unten yy.\nDu findsch dr Wärt in dr Datei <code>LocalSettings.php</code>.",
+    "config-localsettings-key": "Aktualisierigsschlissel:",
+    "config-localsettings-badkey": "Dr Aktualisierigsschlissel, wu du aagee hesch, isch falsch.",
+    "config-session-error": "Fähler bim Starte vu dr Sitzig: $1",
+    "config-session-expired": "D Sitzigsdate sin schyns abgloffe.\nSitzige sin fir e Zytruum vu $1 konfiguriert.\nDää cha dur Aalupfe vum Parameter <code>session.gc_maxlifetime</code> in dr Datei <code>php.ini</code> greßer gmacht wäre.\nDr Inschtallationsvorgang nomol starte.",
+    "config-no-session": "Dyyni Sitzigsdate sin verlore gange!\nD Datei <code>php.ini</code> mueß prieft wäre un s mueß derby sichergstellt wäre, ass dr Parameter <code>session.save_path</code> uf s richtig Verzeichnis verwyyst.",
+    "config-your-language": "Dyy Sproch:",
+    "config-your-language-help": "Bitte d Sproch uuswehle, wu bim Inschtallationsvorgang soll brucht wäre.",
+    "config-wiki-language": "Wikisproch:",
+    "config-wiki-language-help": "Bitte d Sproch uuswehle, wu s Wiki in dr Hauptsach din gschribe wird.",
+    "config-back": "← Zruck",
+    "config-continue": "Wyter →",
+    "config-page-language": "Sproch",
+    "config-page-welcome": "Willchuu bi MediaWiki!",
+    "config-page-dbconnect": "Mit dr Datebank verbinde",
+    "config-page-upgrade": "E Inschtallition, wu s scho het, aktualisiere",
+    "config-page-dbsettings": "Datebankyystellige",
+    "config-page-name": "Name",
+    "config-page-options": "Optione",
+    "config-page-install": "Inschtalliere",
+    "config-page-complete": "Fertig!",
+    "config-page-restart": "Inschtallation nomol aafange",
+    "config-page-readme": "Liis mi",
+    "config-page-releasenotes": "Hiiwys fir d Vereffentlichung",
+    "config-page-copying": "Am Kopiere",
+    "config-page-upgradedoc": "Am Aktualisiere",
+    "config-help-restart": "Witt alli Date, wu Du yygee hesch, lesche un d Inschtallation nomol aafange?",
+    "config-restart": "Jo, nomol aafange",
+    "config-welcome": "=== Priefig vu dr Inschtallationsumgäbig ===\nBasispriefige wäre durgfiert zum Feschtstelle, eb d Inschtallationsumgäbig fir d Inschtallation vu MediaWiki geignet isch.\nDu sottsch d Ergebnis vu däre Priefig aagee, wänn Du bi dr Inschtallation Hilf bruchsch.",
+    "config-copyright": "=== Copyright un Nutzigsbedingige ===\n\n$1\n\nDes Programm isch e freji Software, d. h. s cha, no dr Bedingige vu dr GNU General Public-Lizänz, wu vu dr Free Software Foundation vereffentligt woren isch, wyterverteilt un/oder modifiziert wäre. Doderbyy cha d Version 2, oder no eigenem Ermässe, jedi nejeri Version vu dr Lizänz brucht wäre.\n\nDes Programm wird in dr Hoffnig verteilt, ass es nitzli isch, aber '''ohni jedi Garanti''' un sogar ohni di impliziert Garanti vun ere '''Märtgängigkeit''' oder '''Eignig fir e bstimmte Zwäck'''. Doderzue git meh Hiiwys in dr GNU General Public-Lizänz.\n\nE <doclink href=Copying>Kopi vu dr GNU General Public-Lizänz</doclink> sott zämme mit däm Programm verteilt wore syy. Wänn des nit eso isch, cha ne Kopi bi dr Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftli aagforderet oder [http://www.gnu.org/copyleft/gpl.html online gläse] wäre.",
+    "config-sidebar": "* [//www.mediawiki.org MediaWiki Websyte vu MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents Nutzeraaleitig zue MediaWiki]\n* [//www.mediawiki.org/wiki/Manual:Contents Adminischtratoreaaleitig zue MediaWiki]\n* [//www.mediawiki.org/wiki/Manual:FAQ Vilmol gstellti Froge zue MediaWiki]",
+    "config-env-good": "D Inschtallationsumgäbig isch prieft wore.\nDu chasch MediaWiki inschtalliere.",
+    "config-env-bad": "D Inschtallationsumgäbigisch prieft wore.\nDu chasch MediaWiki nit inschtalliere.",
+    "config-env-php": "PHP $1 isch inschtalliert.",
+    "config-unicode-using-utf8": "Fir d Unicode-Normalisierig wird em Brion Vibber syy utf8_normalize.so yygsetzt.",
+    "config-unicode-using-intl": "For d Unicode-Normalisierig wird d [http://pecl.php.net/intl PECL-Erwyterig intl] yygsetzt.",
+    "config-unicode-pure-php-warning": "'''Warnig:''' D [http://pecl.php.net/intl PECL-Erwyterig intl] isch fir d Unicode-Normalisierig nit verfiegbar. Wäge däm wird di langsam pure-PHP-Implementierig brucht.\nWänn Du ne Websyte mit ere große Bsuechrzahl bedrybsch, sottsch e weng ebis läse iber [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-Normalisierig (en)].",
+    "config-unicode-update-warning": "'''Warnig:''' Di inschtalliert Version vum Unicode-Normalisierigswrapper verwändet e elteri Version vu dr Bibliothek vum [http://site.icu-project.org/ ICU-Projäkt].\nDu sottsch si [//www.mediawiki.org/wiki/Unicode_normalization_considerations aktualisiere], wänn Dor d Verwändig vu Unicode wichtig isch.",
+    "config-no-db": "S isch kei adäquate Datebanktryyber gfunde wore!",
+    "config-no-fts3": "'''Warnig:''' SQLite isch ohni s [//sqlite.org/fts3.html FTS3-Modul] kumpiliert wore, s stehn kei Suechfunktione z Verfiegig.",
+    "config-register-globals": "'''Warnig: Dr Parameter <code>[http://php.net/register_globals register_globals]</code> vu PHP isch aktiviert.'''\n'''Är sott deaktiviert wäre, wänn des megli isch.'''\nD MediaWiki-Inschtallation lauft einwäg, aber dr Server isch aafällig fi megligi Sicherheitsprobläm.",
+    "config-magic-quotes-runtime": "'''Fatal: Dr Parameter <code>[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]</code> vu PHP isch aktiviert!'''\nDie Yystellig fiert zue nit vorhärsähbare Probläm bi dr Datenyygab.\nMediaWiki cha nit inschtalliert wäre, solang dää Parameter nit deaktiviert woren isch.",
+    "config-magic-quotes-sybase": "'''Fatal: Dr Parameter <code>[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]</code> vu PHP isch aktiviert!'''\nDie Yystellig fiert zue nit vorhärsähbare Probläm bi dr Datenyygab.\nMediaWiki cha nit inschtalliert wäre, solang dää Parameter nit deaktiviert woren isch.",
+    "config-mbstring": "'''Fatal: Dr Parameter <code>[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]</code> vu PHP isch aktiviert!'''\nDie Yystellig verursacht Fähler un fiert zue nit vorhärsähbare Probläm bi dr Datenyygab.\nMediaWiki cha nit inschtalliert wäre, solang dää Parameter nit deaktiviert woren isch.",
+    "config-ze1": "'''Fatal: Dr Parameter <code>[http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]</code> vu PHP isch aktiviert!'''\nDie Yystellig fiert zue große Fähler bi MediaWiki.\nMediaWiki cha nit inschtalliert wäre, solang dää Parameter nit deaktiviert woren isch.",
+    "config-safe-mode": "'''Warnig:''' D Funktion <code>[http://www.php.net/features.safe-mode Safe Mode]</code> vu PHP isch aktiviert.\nDes cha zue Probläm fiere, vor allem wänn s Uffelade vu Dateie soll megli syy bzw. dr Uuszeichner <code>math</code> soll brucht wäre.",
+    "config-xml-bad": "S XML-Modul vu PHP fählt.\nMediaWiki brucht Funktione, wu au des Modul z Verfiegig stellt, un funktioniert in däre Konfiguration nit.\nWänn Mandriva brucht wird, mueß no s „php-xml“-Paket inschtalliert wäre.",
+    "config-pcre": "S PHP-Modul fir d PCRE-Unterstitzig isch nit gfunde wore.\nMediaWiki brucht aber perl-kompatibli reguläri Uusdruck zum lauffähig syy.",
+    "config-pcre-no-utf8": "'''Fatale Fähler: S PHP-Modul PCRE isch schyns ohni PCRE_UTF8-Unterstitzig kompiliert wore.'''\nMediaWiki brucht d UTF-8-Unterstitzi zum fählerfrej lauffähig syy.",
+    "config-memory-raised": "Dr PHP-Parameter <code>memory_limit</code> lyt bi $1 un isch uf $2 uffegsetzt wore.",
+    "config-memory-bad": "'''Warnig:''' Dr PHP-Parameter <code>memory_limit</code> lyt bi $1.\nDää Wärt isch wahrschyns z nider.\nDr Inschtallationsvorgang chennt wäge däm fählschlaa!",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] isch inschtalliert",
+    "config-apc": "[http://www.php.net/apc APC] isch inschtalliert",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] isch inschtalliert",
+    "config-no-cache": "'''Warnig:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] oder [http://www.iis.net/download/WinCacheForPhp WinCache] hän nit chenne gfunde wäre.\nS Objäktcaching isch wäge däm nit aktiviert.",
+    "config-diff3-bad": "GNU diff3 isch nit gfunde wore.",
+    "config-imagemagick": "ImageMagick isch gfunde wore: <code>$1</code>.\nMiniaturaasichte vu Bilder sin megli, sobald s Uffelade vu Dateie aktiviert isch.",
+    "config-help": "Hilf",
+    "mainpagetext": "'''MediaWiki isch erfolgrich inschtalliert worre.'''",
+    "mainpagedocfooter": "Lueg uf d [//meta.wikimedia.org/wiki/MediaWiki_localisation Dokumentation fir d Aapassig vu dr Benutzeroberflächi] un s [//meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuech] fir d Hilf iber d Benutzig un s Yystelle."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/gu.json b/includes/installer/i18n/gu.json
new file mode 100644 (file)
index 0000000..0046040
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Ashok modhvadia",
+            "Dineshjk"
+        ]
+    },
+    "mainpagetext": "'''મિડીયાવિકિ સફળતાપૂર્વક ઇન્સટોલ થયું છે.'''",
+    "mainpagedocfooter": "વિકિ સોફ્ટવેર વાપરવાની માહીતિ માટે [//meta.wikimedia.org/wiki/Help:Contents સભ્ય માર્ગદર્શિકા] જુઓ.\n\n== શરૂઆતના તબક્કે ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings કોનફીગ્યુરેશન સેટીંગ્સની યાદી]\n* [//www.mediawiki.org/wiki/Manual:FAQ વારંવાર પુછાતા પ્રશ્નો]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce મિડીયાવિકિ રીલીઝ મેઇલીંગ લીસ્ટ]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localise MediaWiki for your language]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/gv.json b/includes/installer/i18n/gv.json
new file mode 100644 (file)
index 0000000..8658931
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Ta MediaWiki currit stiagh nish.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/hak.json b/includes/installer/i18n/hak.json
new file mode 100644 (file)
index 0000000..02f55cf
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Yí-kîn sṳ̀n-kûng ôn-chông MediaWiki.'''",
+    "mainpagedocfooter": "chhiáng fóng-mun [//meta.wikimedia.org/wiki/Help:Contents Yung-fu sú-chhak] yî-khi̍p sṳ́-yung chhṳ́ wiki ngiôn-khien ke sin-sit!\n\n== Ngi̍p-mùn  ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki Phi-chṳ sat-thin chhîn-tân]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki Phìn-sòng mun-thì kié-tap]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki fat-phu email chhîn-tân]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/haw.json b/includes/installer/i18n/haw.json
new file mode 100644 (file)
index 0000000..f4e740e
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Ua pono ka ho‘ouka ‘ana o MediaWiki.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/he.json b/includes/installer/i18n/he.json
new file mode 100644 (file)
index 0000000..b1dc5a7
--- /dev/null
@@ -0,0 +1,304 @@
+{
+    "@metadata": {
+        "authors": [
+            "Amire80",
+            "YaronSh",
+            "ערן",
+            "아라"
+        ]
+    },
+    "config-desc": "תכנית ההתקנה של מדיה־ויקי",
+    "config-title": "התקנת מדיה־ויקי $1",
+    "config-information": "פרטים",
+    "config-localsettings-upgrade": "זוהה קובץ <code>LocalSettings.php</code>.\nכדי לשדרג את ההתקנה הזאת, נא להקליד את הערך של <code>$wgUpgradeKey</code> בתיבה להלן.\nאפשר למצוא אותו בקובץ <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "זוהה קובץ <code>LocalSettings.php</code>.\nכדי לשדרג את ההתקנה הזאת, הריצו את <code>update.php</code> ולא את הקובץ הזה.",
+    "config-localsettings-key": "מפתח השדרוג:",
+    "config-localsettings-badkey": "המפתח שהקלדתם שגוי",
+    "config-upgrade-key-missing": "זוהתה התקנה קיימת של מדיה־ויקי.\nכדי לשדרג את ההתקנה הזאת, אנא כתבו את השורה הבא בתחתית קובץ <code>LocalSettings.php</code> שלכם:\n\n$1",
+    "config-localsettings-incomplete": "נראה שקובץ <code>LocalSettings.php</code> הקיים אינו שלם.\nהמשתנה $1 אינו מוגדר.\nנו לשנות את קובץ <code>LocalSettings.php</code> שלכם כך שהמשתנה הזה יהיה מוגדר וללחוץ \"{{int:Config-continue}}\".",
+    "config-localsettings-connection-error": "אירעה שגיאה בעת חיבור למסד נתונים עם הגדרות ב־<code>LocalSettings.php</code> או ב־<code>AdminSettings.php</code>. נא לתקן את ההגדרות האלו ולנסות שוב.\n\n$1",
+    "config-session-error": "שגיאה באתחול שיחה: $1",
+    "config-session-expired": "נראה שנתוני השיחה שלכם פגו.\nהשיחות מוגדרות להיות תקפות לזמן של $1.\nאפשר להגדיל את זה ב־<code>session.gc_maxlifetime</code> בקובץ php.ini.\nיש להתחיל מחדש את תהליך ההתקנה.",
+    "config-no-session": "נתוני השיחה שלכם אבדו!\nיש לבדוק את קובץ php.ini שלכם ולוודא שתיקייה נכונה מוגדרת ב־<code>session.save_path</code>.",
+    "config-your-language": "השפה שלכם:",
+    "config-your-language-help": "נא לבחור את השפה שתשמש במהלך ההתקנה.",
+    "config-wiki-language": "שפת הוויקי:",
+    "config-wiki-language-help": "נא לבחור את השפה העיקרית שבה ייכתב ויקי זה.",
+    "config-back": "→ חזרה",
+    "config-continue": "המשך ←",
+    "config-page-language": "שפה",
+    "config-page-welcome": "ברוכים הבאים למדיה־ויקי!",
+    "config-page-dbconnect": "התחברות למסד הנתונים",
+    "config-page-upgrade": "שדרוג התקנה קיימת",
+    "config-page-dbsettings": "הגדרות מסד הנתונים",
+    "config-page-name": "שם",
+    "config-page-options": "אפשרויות",
+    "config-page-install": "התקנה",
+    "config-page-complete": "הושלמה!",
+    "config-page-restart": "הפעלת ההתקנה מחדש",
+    "config-page-readme": "קרא־אותי",
+    "config-page-releasenotes": "הערות גרסה",
+    "config-page-copying": "העתקה",
+    "config-page-upgradedoc": "שדרוג",
+    "config-page-existingwiki": "ויקי קיים",
+    "config-help-restart": "האם ברצונך לנקות את כל הנתונים שהזנת ולהתחיל מחדש את תהליך ההתקנה?",
+    "config-restart": "כן, להפעיל מחדש",
+    "config-welcome": "=== בדיקות סביבה ===\nבדיקות בסיסיות מתבצעות כדי לבדוק שהסביבה מתאימה להתקנת מדיה־ויקי.\nיש לתת את תוצאות הבדיקות האלו אם תזדקקו לעזרה בזמן ההתקנה.",
+    "config-copyright": "=== זכויות יוצרים ותנאים ===\n\n$1\n\nתכנית זו היא תכנה חופשית; באפשרותך להפיצה מחדש ו/או לשנות אותה על פי תנאי הרישיון הציבורי הכללי של GNU כפי שפורסם על ידי קרן התכנה החופשית; בין אם גרסה 2 של הרישיון, ובין אם (לפי בחירתך) כל גרסה מאוחרת שלו.\n\nתכנית זו מופצת בתקווה שתהיה מועילה, אבל '''בלא אחריות כלשהי'''; ואפילו ללא האחריות המשתמעת בדבר '''מסחריותה''' או '''התאמתה למטרה '''מסוימת'''. לפרטים נוספים, ניתן לעיין ברישיון הציבורי הכללי של GNU.\n\nלתכנית זו אמור היה להיות מצורף <doclink href=Copying>עותק של הרישיון הציבורי הכללי של GNU</doclink>; אם לא, עליך לכתוב ל־Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, , MA 02111-1307, USA. או [http://www.gnu.org/copyleft/gpl.html לקרוא אותו דרך האינטרנט].",
+    "config-sidebar": "* [//www.mediawiki.org אתר הבית של מדיה־ויקי]\n* [//www.mediawiki.org/wiki/Help:Contents המדריך למשתמשים]\n* [//www.mediawiki.org/wiki/Manual:Contents המדריך למנהלים]\n* [//www.mediawiki.org/wiki/Manual:FAQ שו״ת]\n----\n* <doclink href=Readme>קרא אותי</doclink>\n* <doclink href=ReleaseNotes>הערות גרסה</doclink>\n* <doclink href=Copying>העתקה</doclink>\n* <doclink href=UpgradeDoc>שדרוג</doclink>",
+    "config-env-good": "הסביבה שלכם נבדקה.\nאפשר להתקין מדיה־ויקי.",
+    "config-env-bad": "הסביבה שלכם נבדקה.\nאי־אפשר להתקין מדיה־ויקי.",
+    "config-env-php": "מותקנת <span dir=\"ltr\">PHP $1</span>.",
+    "config-env-php-toolow": "מותקנת <span dir=\"ltr\">PHP $1</span>.\nלמדיה־ויקי נדרשת <span dir=\"ltr\">PHP $2</span> או גרסה גבוהה יותר.",
+    "config-unicode-using-utf8": "משתמש ב־normalize.so של בריון ויבר לנרמול יוניקוד.",
+    "config-unicode-using-intl": "משתמש בהרחבת [http://pecl.php.net/intl הרחבת intl PECL] לנרמול יוניקוד",
+    "config-unicode-pure-php-warning": "'''אזהרה''': [http://pecl.php.net/intl הרחבת intl PECL] אינה זמינה לטיפול בנרמול יוניקוד. משתמש ביישום PHP טהור ואטי יותר.\nאם זהו אתר בעל תעבורה גבוהה, כדאי לקרוא את המסמך הבא: [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode normalization].",
+    "config-unicode-update-warning": "'''אזהרה''': הגרסה המותקנת של מעטפת נרמול יוניקוד משתמשת בגרסה ישנה של הספרייה של [http://site.icu-project.org/ פרויקט ICU].\nכדאי [//www.mediawiki.org/wiki/Unicode_normalization_considerations לעדכן] אם חשוב לכם הטיפול ביוניקוד.",
+    "config-no-db": "לא נמצא דרייבר מסד נתונים מתאים. יש להתקין דרייבר מסד נתונים ל־PHP.\nנתמכים הסוגים הבאים של מסדי נתונים: $1.\n\nאם אתם משתמשים באירוח משותף, בקשו מספק האירוח שלכם להתקין דרייבר מסד נתונים מתאים.\nאם קִמפלתם את PHP בעצמכם, הגדירו אותו מחדש והפעילו את לקוח מסד נתונים, למשל באמצעות <code dir=\"ltr\">./configure --with-mysql</code>.\nאם התקנתם את PHP כחבילה של דביאן או של אובונטו, יש להתקין את המודול php5-mysql.",
+    "config-outdated-sqlite": "'''אזהרה''': במערכת מתוקן SQLite $1. גרסה זו לא נתמכת ולשימוש ב SQLite נדרשת גרסה $2 ומעלה. מסיבה זו האפשרות SQLite לא מאופשרת.",
+    "config-no-fts3": "'''אזהרה''': SQLite מקומפל ללא [//sqlite.org/fts3.html מודול FTS]. יכולות חיפוש לא יהיו זמינות בהתקנה הזאת.",
+    "config-register-globals": "'''אזהרה: האפשרות <code>[http://php.net/register_globals register_globals]</code> של PHP מופעלת.'''\n'''כבו אותה אם אתם יכולים.'''\nמדיה־ויקי תעבוד, אבל השרת שלכם חשוף לפגיעות אבטחה.",
+    "config-magic-quotes-runtime": "'''שגיאה סופנית: האפשרות [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] פעילה!'''\nהאפשרות הזאת מעוותת את נתוני הקלט באופן בלתי־צפוי.\nלא ניתן להתקין את מדיה־ויקי אלא אם האפשרות הזאת תכובה.",
+    "config-magic-quotes-sybase": "'''שגיאה סופנית''': האפשרות [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] פעילה!'''\nהאפשרות הזאת מעוותת את נתוני הקלט באופן בלתי־צפוי.\nלא ניתן להתקין את מדיה־ויקי או להשתמש בה אלא אם האפשרות הזאת תכובה.",
+    "config-mbstring": "'''שגיאה סופנית''': האפשרות [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] פעילה!'''\nהאפשרות הזאת גורמת לשגיאות ומעוותת את נתוני הקלט באופן בלתי־צפוי.\nלא ניתן להתקין את מדיה־ויקי או להשתמש בה אלא אם האפשרות הזאת תכובה.",
+    "config-ze1": "'''שגיאה סופנית''': האפשרות [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] פעילה!'''\nהאפשרות הזאת גורמת לתקלות מזעזעות במדיה־ויקי.\nלא ניתן להתקין את מדיה־ויקי או להשתמש בה אלא אם האפשרות הזאת תכובה.",
+    "config-safe-mode": "'''אזהרה:''' האפשרות [http://www.php.net/features.safe-mode safe mode] של PHP פעילה.\nהיא יכולה לגרום לבעיות, במיוחד אם אתם משתמשים בהעלאת קבצים או ב־<code>math</code>.",
+    "config-xml-bad": "מודול XML של PHP חסר.\nמדיה־ויקי דורשת פונקציות של המודול ולא תעבוד עם הגדרות כאלו.\nאם מערכת ההפעלה שלהם היא Mandrake, התקינו את החבילה php-xml.",
+    "config-pcre": "נראה שחסרה תמיכה במודול PCRE.\nכדי שמדיה־ויקי תעבוד, נדרשת תמיכה בביטויים רגולריים תואמי Perl.",
+    "config-pcre-no-utf8": "'''שגיאה סופנית''': נראה שמודול PCRE של PHP מקומפל ללא תמיכה ב־PCRE_UTF8.\nמדיה־ויקי דורשת תמיכה ב־UTF-8 לפעילות נכונה.",
+    "config-memory-raised": "ערך האפשרות <code>memory_limit</code> של PHP הוא $1, הועלה ל־$2.",
+    "config-memory-bad": "'''אזהרה:''' ערך האפשרות <code>memory_limit</code> של PHP הוא $1.\nזה כנראה נמוך מדי.\nההתקנה עשויה להיכשל!",
+    "config-ctype": "'''שגיאה סופנית''': נדרשת גרסת PHP שתומכת בהרחבה [http://www.php.net/manual/en/ctype.installation.php Ctype].",
+    "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]&rlm;, [http://xcache.lighttpd.net/ XCache] או [http://www.iis.net/download/WinCacheForPhp WinCache].\nמטמון עצמים לא מופעל.",
+    "config-mod-security": "'''אזהרה''': בשרת הווב שלכם מופעל [http://modsecurity.org/ mod_security]. אם הוא לא מוגדר טוב, זה יכול לגרום לבעיות במדיה־ויקי ובתכנה אחרת שמאפשרת למשתמשים לשלוח תוכן שרירותי.\nקראו את [http://modsecurity.org/documentation/ התיעוד של mod_security] או צרו קשר עם אנשי התמיכה של שירותי האירוח שלכם אם אתם נתקלים בשגיאות אקראיות.",
+    "config-diff3-bad": "GNU diff3 לא נמצא.",
+    "config-imagemagick": "נמצא ImageMagick&rlm;: <code dir=\"ltr\">$1</code>.\nמזעור תמונות יופעל, אם תפעילו את האפשרות להעלות קבצים.",
+    "config-gd": "נמצאה ספריית הגרפיקה GD המובנית.\nמזעור תמונות יופעל, אם תפעילו את האפשרות להעלות קבצים.",
+    "config-no-scaling": "ספריית GD או ImageMagick לא נמצאו.\nמזעור תמונות לא יופעל.",
+    "config-no-uri": "'''שגיאה:''' אי־אפשר לזהות את הכתובת הנוכחית.\nההתקנה בוטלה.",
+    "config-no-cli-uri": "אזהרה: לא הוגדר <span dir=\"ltr\">--scriptpath</span>, משתמש בבררת המחדל: <code dir=\"ltr\">$1</code>.",
+    "config-using-server": "שם השרת בשימוש: \"<nowiki>$1</nowiki>\".",
+    "config-using-uri": "נעשה שימוש בכתובת השרת \"<nowiki>$1$2</nowiki>\".",
+    "config-uploads-not-safe": "'''אזהרה:''' תיקיית ההעלאות ההתחלתית <code>$1</code> חשופה להרצת סקריפטים שרירותיים.\nמדיה־ויקי בודקת את כל הקבצים המוּעלים לאיומי אבטחה, מומלץ מאוד למנוע את [//www.mediawiki.org/wiki/Manual:Security#Upload_security פרצת האבטחה] הזאת לפני שאתם מפעילים את ההעלאות.",
+    "config-no-cli-uploads-check": "'''אזהרה:''' תיקיית בררת המחדל להעלאות (<code>$1</code>) לא נבדקת לפגיעוּת להרצת תסריטים אקראיים בזמן התקנה דרך CLI.",
+    "config-brokenlibxml": "במערכת שלכם יש שילוב של גרסאות של PHP ושל libxml2 שחשוף לבאגים ויכול לגרום לעיוות נתונים נסתר במדיה־ויקי וביישומי רשת אחרים.\nשדרגו ל־PHP 5.2.9 או לגרסה חדשה יותר ול־libxml2 2.7.3 או גרסה חדשה יותר ([//bugs.php.net/bug.php?id=45996 באג מתויק ב־PHP]).\nההתקנה בוטלה.",
+    "config-using531": "אי־אפשר להשתמש במדיה־ויקי עם <span dir=\"ltr\">PHP $1</span> בגלל באג בפרמטרים של הפניות (reference parameters) ל־<code dir=\"ltr\">__call()</code>.\nשדרגו ל־PHP 5.3.2 או לגרסה גבוהה יותר כדי לתקן את זה ([//bugs.php.net/bug.php?id=50394 bug filed with PHP]) או שַנמכו ל־PHP 5.3.0 כדי לפתור את הבעיה הזאת.\nההתקנה בוטלה.",
+    "config-suhosin-max-value-length": "מותקן פה Suhosin והוא מגביל את אורך פרמטר GET ל־$1 בתים. רכיב ResourceLoader של מדיה־ויקי יעקוף את המגלבה הזאת, אבל זה יפגע בביצועים. אם זה בכלל אפשרי, כדאי לתקן את הערך של <code>suhosin.get.max_value_length</code> ל־1024 או יותר בקובץ <code>php.ini</code> ולהגדיר את ‎<code>$wgResourceLoaderMaxQueryLength</code> לאותו הערך בקובץ LocalSettings.php.",
+    "config-db-type": "סוג מסד הנתונים:",
+    "config-db-host": "שרת מסד הנתונים:",
+    "config-db-host-help": "אם שרת מסד הנתונים שלכם נמצא על שרת אחר, הקלידו את שם המחשב או את כתובת ה־IP כאן.\n\nאם אתם משתמשים באירוח משותף, ספק האירוח שלכם אמור לתת לכם את שם השרת הנכון במסמכים.\n\nאם אתם מתקינים בשרת Windows ומשתמשים ב־MySQL, השימוש ב־localhost עשוי לא לעבוד. אם הוא לא עובד, נסו את \"127.0.0.1\" בתור כתובת ה־IP המקומית.\n\nאם אתם משתמשים ב־PostgreSQL, תשאירו את השדה הזה ריק כדי להתחבר דרך שקע יוניקס.",
+    "config-db-host-oracle": "TNS של מסד הנתונים:",
+    "config-db-host-oracle-help": "הקלידו [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm שם חיבור מקומי (Local Connect Name)] תקין; הקובץ tnsnames.ora צריך להיות זמין להתקנה הזאת.<br />\nאם אתם משתמשים ב־client libraries 10g או בגרסה חדשה יותר, אתם יכולים גם להשתמש בשיטת מתן השמות [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+    "config-db-wiki-settings": "זיהוי ויקי זה",
+    "config-db-name": "שם מסד הנתונים:",
+    "config-db-name-help": "בחרו שם שמזהה את הוויקי שלכם.\nלא צריכים להיות בו רווחים.\n\nאם אתם משתמשים באירוח משותף, ספק האירוח שלכם ייתן לכם שם מסד נתונים מסוים שתוכלו להשתמש בו או יאפשר לכם ליצור מסד נתונים דרך לוח בקרה.",
+    "config-db-name-oracle": "סכמה של מסד נתונים:",
+    "config-db-account-oracle-warn": "קיימים שלושה תרחישים נתמכים עבור התקנת אורקל בתור מסד הנתונים:\n\nאם אתם רוצים ליצור חשבון מסד נתונים כחלק מתהליך ההתקנה, נא לספק חשבון בעל תפקיד SYSDBA בתור חשבון מסד הנתונים עבור ההתקנה ולציין את האישורים המבוקשים עבור חשבון הגישה לאינטרנט, אחרת ניתן ליצור באופן ידני את חשבון הגישה לאינטרנט, ולספק חשבון זה בלבד (אם יש לו ההרשאות הדרושות ליצירת עצמי סכמה) או לספק שני חשבונות שונים, אחד עם הרשאות יצירה ואחד מוגבלת עבור גישה לאינטרנט.\n\nסקריפט ליצירת חשבון עם ההרשאות הנדרשות ניתן למצוא בתיקייה \"<span dir=\"ltr\">maintenance/oracle/</span>\" של ההתקנה זו. זכרו כי שימוש בחשבון מוגבל יגרום להשבתת כל יכולות תחזוקה עם חשבון בררת המחדל.",
+    "config-db-install-account": "חשבון משתמש להתקנה",
+    "config-db-username": "שם המשתמש במסד הנתונים:",
+    "config-db-password": "הססמה במסד הנתונים:",
+    "config-db-password-empty": "נא להזין ססמה למשתמש מסד הנתונים החדש: $1.\nאף־על־פי שאפשר ליצור חשבונות ללא ססמה, זה לא מאובטח.",
+    "config-db-install-username": "הכניסו שם משתמש שישמש אתכם לחיבור למסד נתונים במהלך ההתקנה.\nזהו לא שם משתמש לחשבון במדיה־ויקי; זהו שם משתמש בשרת מסד נתונים.",
+    "config-db-install-password": "הקלידו ססמה שתשמש אתכם לצורך חיבור למסד נתונים במהלך ההתקנה.\nזוהי לא ססמה של חשבון במדיה־ויקי; זוהי ססמה לשרת מסד נתונים.",
+    "config-db-install-help": "הקלידו את שם המשתמש ואת הססמה להתחברות למסד הנתונים במהלך ההתקנה.",
+    "config-db-account-lock": "להשתמש באותו שם המשתמש ובאותה ססמה בזמן הפעלה רגילה",
+    "config-db-wiki-account": "חשבון משתמש להפעלה רגילה",
+    "config-db-wiki-help": "הקלידו את שם המשתמש והססמה לחיבור למסד הנתונים במהלך פעילות רגילה של הוויקי.\nאם החשבון אינו קיים ולחשבון שבו מתבצעת ההתקנה יש הרשאות מספיקות, החשבון הזה ייווצר עם ההרשאות המזעריות הנחוצות להפעלת הוויקי.",
+    "config-db-prefix": "תחילית לטבלאות של מסד נתונים (database table prefix):",
+    "config-db-prefix-help": "אם אתם צריכים לשתף מסד נתונים אחד בין אתרי ויקי שונים או בין מדיה־ויקי ויישום וב אחר, תוכלו לבחור להוסיף תחילית וכל שמות הטבלאות כדי להימנע מהתנגשויות.\nאל תשתמשו ברווחים.\n\nהשדה הזה בדרך כלל אמור להיות ריק.",
+    "config-db-charset": "קבוצת התווים (character set) של מסד הנתונים",
+    "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-charset-help": "'''אזהרה:''' אם אתם משתמשים ב־'''backwards-compatible UTF-8''' ב־<span dir=\"ltr\">MySQL 4.1+</span>, ומגבים את מסד הנתונים באמצעות <code>mysqldump</code>, זה יכול להרוס את כל תווי ה־ASCII ויהרוס באופן בלתי־הפיך את הגיבויים שלכם!\n\nב'''מצב בינרי''' (binary mode) מדיה־ויקי שומרת טקסט UTF-8 במסד הנתונים בשדות בינריים.\nזה יעיל יותר ממצב UTF-8 של MySQL ומאפשר לכם להשתמש בכל הטווח של תווי יוניקוד.\nב'''מצב UTF-8'''&rlm; (UTF-8 mode)&rlm; MySQL יֵדַע מה קבוצת התווים (character set) של הטקסט שלכם ויציג וימיר אותו בהתאם, אבל לא יאפשר לכם לשמור תווים שאינם נמצאים בטווח הרב־לשוני הבסיסי ([//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane]).",
+    "config-mysql-old": "נדרשת גרסה <span dir=\"ltr\">$1</span> של MySQL או גרסה חדשה יותר. הגרסה הנוכחית שלכם היא $2.",
+    "config-db-port": "פִּתְחַת מסד הנתונים (database port):",
+    "config-db-schema": "סכמה למדיה־ויקי",
+    "config-db-schema-help": "הסְכֵמָה הבאה בדרך כלל מתאימה.\nשנו אותה רק אם אתם יודעים שאתם חייבים.",
+    "config-pg-test-error": "ההתחברות למסד הנתונים '''$1''' לא מצליחה: $2",
+    "config-sqlite-dir": "תיקיית נתונים (data directory) של SQLite:",
+    "config-sqlite-dir-help": "SQLite שומר את כל הנתונים בקובץ אחד.\n\nלשרת הווב צריכה להיות הרשאה לכתוב לתיקייה שאתם מגדירים.\n\nהיא לא צריכה נגישה לכולם דרך האינטרנט – בגלל זה איננו שמים אותה באותו מקום עם קובצי ה־PHP.\n\nתוכנת ההתקנה תכתוב קובץ <code dir=\"ltr\">.htaccess</code> יחד אִתו, אבל אם זה ייכשל, מישהו יוכל להשיג גישה למסד הנתונים שלכם. שם נמצא מידע מפורש של משתמשים (כתובות דוא״ל, ססמאות מגובבות) וגם גרסאות מחוקות של דפים ומידע מוגבל אחר.\n\nכדאי לשקול לשים את מסד הנתונים במקום אחר לגמרי, למשל ב־<code dir=\"ltr\">/var/lib/mediawiki/yourwik</code>.",
+    "config-oracle-def-ts": "מרחב טבלאות לפי בררת מחדל (default tablespace):",
+    "config-oracle-temp-ts": "מרחב טבלאות זמני (temporary tablespace):",
+    "config-support-info": "מדיה־ויקי תומכת במערכות מסדי הנתונים הבאות:\n\n$1\n\nאם אינכם רואים את מסד הנתונים שלכם ברשימה, עקבו אחר ההוראות המקושרות לעיל כדי להפעיל את התמיכה.",
+    "config-support-mysql": "* $1 הוא היעד העיקרי עבור מדיה־ויקי ולו התמיכה הטובה ביותר (ר׳ [http://www.php.net/manual/en/mysql.installation.php how to compile PHP with MySQL support])",
+    "config-support-postgres": "$1 הוא מסד נתונים נפוץ בקוד פתוח והוא נפוץ בתור חלופה ל־MySQL (ר׳ [http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). ייתכן שיש בתצורה הזאת באגים מסוימים והיא לא מומלצת לסביבות מבצעיות.",
+    "config-support-sqlite": "* $1 הוא מסד נתונים קליל עם תמיכה טובה מאוד. (ר׳ [http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], משתמש ב־PDO)",
+    "config-support-oracle": "* $1 הוא מסד נתונים עסקי מסחרי. (ר׳ [http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])",
+    "config-header-mysql": "הגדרות MySQL",
+    "config-header-postgres": "הגדרות PostgreSQL",
+    "config-header-sqlite": "הגדרות SQLite",
+    "config-header-oracle": "הגדרות Oracle",
+    "config-invalid-db-type": "סוג מסד הנתונים שגוי",
+    "config-missing-db-name": "עליך להזין ערך עבור \"שם מסד הנתונים\"",
+    "config-missing-db-host": "יש להכניס ערך לשדה \"שרת מסד הנתונים\"",
+    "config-missing-db-server-oracle": "יש להכניס ערך לשדה \"TNS של מסד הנתונים\"",
+    "config-invalid-db-server-oracle": "\"$1\" הוא TNS בלתי תקין.\nיש להשתמש רק באותיות ASCII&rlm; (a עד z&rlm;, A עד Z), סְפָרוֹת (0 עד 9), קווים תחתיים (_) ונקודות (.).",
+    "config-invalid-db-name": "\"$1\" הוא שם מסד נתונים בלתי תקין.\nיש להשתמש רק באותיות ASCII&rlm; (a עד z&rlm;, A עד Z), סְפָרוֹת (0 עד 9), קווים תחתיים (_) ומינוסים (-).",
+    "config-invalid-db-prefix": "\"$1\" היא תחילית מסד נתונים בלתי תקינה.\nיש להשתמש רק באותיות ASCII&rlm; (a עד z&rlm;, A עד Z), סְפָרוֹת (0 עד 9), קווים תחתיים (_) ומינוסים (-).",
+    "config-connection-error": "<div dir=\"ltr\">$1.</div>\n\nבדקו את שם השרת, את שם המשתמש ואת הססמה בטופס להלן ונסו שוב.",
+    "config-invalid-schema": "\"$1\" היא סכמה לא תקינה עבור מדיה־ויקי.\nיש להשתמש רק באותיות ASCII&rlm; (a עד z&rlm;, A עד Z), סְפָרוֹת (0 עד 9) וקווים תחתיים (_).",
+    "config-db-sys-create-oracle": "תוכנית ההתקנה תומכת רק בשימוש בחשבון SYSDBA ליצירת חשבון חדש.",
+    "config-db-sys-user-exists-oracle": "חשבון המשתמש \"$1\" כבר קיים. SYSDBA יכול לשמש רק ליצירת חשבון חדש!",
+    "config-postgres-old": "נדרש PostgreSQL $1 או גרסה חדשה יותר, הגרסה הנוכחית שלכם היא $2.",
+    "config-sqlite-name-help": "בחרו בשם שמזהה את הוויקי שלכם.\nאל תשתמשו ברווחים או במינוסים.\nזה יהיה שם קובץ הנתונים ל־SQLite.",
+    "config-sqlite-parent-unwritable-group": "לא ניתן ליצור את תיקיית הנתונים <code><nowiki>$1</nowiki></code>, כי לשָׁרַת הווב אין הרשאות לכתוב לתיקיית האם <code><nowiki>$2</nowiki></code> .\n\nתוכנת ההתקנה זיהתה את החשבון שתחתיו רץ שרת הווב שלכם.\nאפשרו לשָׁרַת הווב לכתוב לתיקייה <code><nowiki>$3</nowiki></code>.\nבמערכת Unix/Linux כִתבו:\n\n<div dir=\"ltr\"><pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre></div>",
+    "config-sqlite-parent-unwritable-nogroup": "לא ניתן ליצור את תיקיית הנתונים <code><nowiki>$1</nowiki></code>, כי לשָׁרַת הווב אין הרשאות לכתוב לתיקיית האם <code><nowiki>$2</nowiki></code> .\n\nתוכנת ההתקנה לא זיהתה את החשבון שתחתיו רץ שרת הווב שלכם.\nאפשרו לכל החשבונות לכתוב לתיקייה <code><nowiki>$3</nowiki></code> כדי להמשיך.\nבמערכת Unix/Linux כִתבו:\n\n<div dir=\"ltr\"><pre>cd $2\nmkdir $3\nchmod a+w $3</pre></div>",
+    "config-sqlite-mkdir-error": "אירעה שגיאה בעת יצירת תיקיית הנתונים \"$1\".\nנא לבדוק את המיקום ולנסות שוב.",
+    "config-sqlite-dir-unwritable": "אי־אפשר לכתוב לתיקייה \"$1\".\nשנו את ההרשאות שלה כך ששרת הווב יוכל לכתוב אליה ונסו שוב.",
+    "config-sqlite-connection-error": "$1.\n\nבִדקו את תיקיית הנתונים את שם מסת הנתונים להלן ונסו שוב.",
+    "config-sqlite-readonly": "לא ניתן לכתוב אל הקובץ <code>$1</code>.",
+    "config-sqlite-cant-create-db": "לא ניתן ליצור את קובץ מסד הנתונים <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "ב־PHP חסרה תמיכה ב־FTS3, יבתצע שנמוך טבלאות",
+    "config-can-upgrade": "יש טבלאות מדיה־ויקי במסד הנתונים.\nכדי לשדרג אותן למדיה־ויקי $1, לחצו '''המשך'''.",
+    "config-upgrade-done": "השדרוג הושלם.\n\nעכשיו אפשר [$1 להשתמש בוויקי שלכם].\n\nאם תרצו ליצור מחדש את קובץ ה־<code>LocalSettings.php</code> שלכם, לחצו על הכפתור להלן.\nזה '''לא מומלץ''', אלא אם כן יש לכם בעיות עם הוויקי שלכם.",
+    "config-upgrade-done-no-regenerate": "השדרוג הושלם.\n\nעכשיו אפשר [$1 להתחיל להשתמש בוויקי שלכם].",
+    "config-regenerate": "לחולל מחדש את LocalSettings.php ←",
+    "config-show-table-status": "שאילתת <code>SHOW TABLE STATUS</code> נכשלה!",
+    "config-unknown-collation": "'''אזהרה:''' מסד הנתונים משתמש בשיטת מיון שאינה מוּכּרת.",
+    "config-db-web-account": "חשבון במסד הנתונים לגישה מהרשת",
+    "config-db-web-help": "לבחור את שם המשתמש ואת הססמה ששרת הווב ישתמש בו להתחברות לשרת מסד הנתונים בזמן פעילות רגילה של הוויקי.",
+    "config-db-web-account-same": "להשתמש באותו חשבון כמו עבור ההתקנה",
+    "config-db-web-create": "ליצור חשבון אם הוא אינו קיים כבר.",
+    "config-db-web-no-create-privs": "לחשבון שהקלדתם להתקנה אין מספיק הרשאות ליצירת חשבות.\nהחשבון שאתם מקלידים כאן צריך להיות קיים.",
+    "config-mysql-engine": "מנגנון האחסון:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''אזהרה''': בחרתם ב־MyISAM בתור מנוע אחסון של MySQL, וזה לא מומלץ מהסיבות הבאות:\n* המנוע הזה בקושי תומך בעיבוד מקבילי בגלל נעילת טבלאות\n* הוא פחות עמיד בפני אובדן מידע ממנועים אחרים\n* הקוד של מדיה־ויקי לא תמיד מטפל ב־MyISAM כפי שצריך\n\nאם התקנת MySQL שלכם תומכת ב־InnoDB, מומלץ מאוד שתבחרו באפשרות הזאת.\nאם התקנת MySQL שלכם אינה תומכת ב־InnoDB, אולי זה הזמן לשקול לשדרג אותה.",
+    "config-mysql-engine-help": "'''InnoDB''' הוא כמעט תמיד האפשרות הטובה ביותר, כי במנוע הזה יש תמיכה טובה ביותר בעיבוד מקבילי.\n\n'''MyISAM''' עשוי להיות בהתקנות שמיועדות למשתמש אחד ולהתקנות לקריאה בלבד.\nמסדי נתונים עם MyISAM נוטים להיהרס לעתים קרובות יותר מאשר מסדי נתונים עם InnoDB.",
+    "config-mysql-charset": "ערכת הקידוד של מסד הנתונים:",
+    "config-mysql-binary": "בינרי",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "ב'''מצב בינרי''' (binary mode) מדיה־ויקי שומרת טקסט UTF-8 במסד הנתונים בשדות בינריים.\nזה יעיל יותר ממצב UTF-8 של MySQL ומאפשר לכם להשתמש בכל הטווח של תווי יוניקוד.\n\nב'''מצב UTF-8'''&rlm; (UTF-8 mode)&rlm; MySQL יֵדַע מה קבוצת התווים (character set) של הטקסט שלכם ויציג וימיר אותו בהתאם, אבל לא יאפשר לכם לשמור תווים שאינם נמצאים בטווח הרב־לשוני הבסיסי ([//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane]).",
+    "config-site-name": "שם הוויקי:",
+    "config-site-name-help": "זה יופיע בשורת הכותרת של הדפדפן ובמקומות רבים אחרים.",
+    "config-site-name-blank": "נא להזין שם לאתר.",
+    "config-project-namespace": "מרחב שמות לדפי מיזם:",
+    "config-ns-generic": "מיזם",
+    "config-ns-site-name": "זהה לשם הוויקי: $1",
+    "config-ns-other": "אחר (לציין)",
+    "config-ns-other-default": "הוויקי שלי",
+    "config-project-namespace-help": "בהתאם לדוגמה של ויקיפדיה, אתרי ויקי רבים שומרים על דפי המדיניות שלהם בנפרד מדפי התוכן שלהם ב\"'''מרחב השמות של המיזם'''\" (\"'''project namespace'''\").\nכל שמות הדפים במרחב השמות הזה מתחילים בתחילית מסוימת שאתם יכולים להגדיר כאן.\nבאופן מסורתי התחילית הזאת מבוססת על שם הוויקי, והיא אינה יכולה להכיל תווי פיסוק כגון \"#\" או \":\".",
+    "config-ns-invalid": "מרחב השמות \"<nowiki>$1</nowiki>\" אינו תקין.\nהקלידו שם אחר למרחב השמות של המיזם.",
+    "config-ns-conflict": "מרחב השמות שהגדרתם \"<nowiki>$1</nowiki>\" מתנגש עם מרחב שמות מובנה של מדיה־ויקי.\nהגדירו מרחב שמות מיזם שונה.",
+    "config-admin-box": "חשבון מפעיל",
+    "config-admin-name": "שמכם:",
+    "config-admin-password": "ססמה:",
+    "config-admin-password-confirm": "הססמה שוב:",
+    "config-admin-help": "הקלידו כאן את שם המשתמש, למשל \"שקד לוי\" או \"Joe Bloggs\".\nזה השם שישמש אתכם כדי להיכנס לוויקי.",
+    "config-admin-name-blank": "נא להזין את שם המשתמש של המפעיל.",
+    "config-admin-name-invalid": "שם המשתמש שהוקלד \"<nowiki>$1</nowiki>\" אינו תקין.\nהקלידו שם משתמש אחר.",
+    "config-admin-password-blank": "הקלידו ססמה לחשבון המפעיל.",
+    "config-admin-password-same": "הססמה לא יכולה להיות זהה לשם המשתמש.",
+    "config-admin-password-mismatch": "שתי הססמאות שהוזנו אינן מתאימות.",
+    "config-admin-email": "כתובת הדוא״ל:",
+    "config-admin-email-help": "הקלידו כתובת דוא״ל שתאפשר לכם לקבל מכתבים ממשתמשים אחרים בוויקי, לאתחל את הססמה, ולקבל הודעות על שינויים בדפים ברשימת המעקב שלכם. אפשר להשאיר את השדה הזה ריק.",
+    "config-admin-error-user": "שגיאה פנימית ביצירת מפעיל בשם \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "שגיאה פנימית בהגדרת ססמה עבור המפעיל \"<nowiki>$1</nowiki>\"&rlm;: <pre>$2</pre>",
+    "config-admin-error-bademail": "הכנסתם כתובת דוא״ל לא תקינה.",
+    "config-subscribe": "להירשם ל[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce רשימת התפוצה עם הודעות על גרסאות חדשות].",
+    "config-subscribe-help": "זוהי רשימת תפוצה עם הודעות מעטות שמשמשת להודעות על הוצאת גרסאות, כולל עדכוני אבטחה חשובים.\nמומלץ להירשם אליה ולעדכן את מדיה־ויקי כאשר יוצאות גרסאות חדשות.",
+    "config-subscribe-noemail": "ניסיתם להירשם לרשימת תפוצה של הודעות בלי לתת כתובת דוא\"ל.\nנא לתת כתובת דוא\"ל אם אתם רוצים להירשם לרשימת התפוצה.",
+    "config-almost-done": "כמעט סיימתם!\nאפשר לדלג על שאר ההגדרות ולהתקין את הוויקי כבר עכשיו.",
+    "config-optional-continue": "הצגת שאלות נוספות.",
+    "config-optional-skip": "משעמם לי, תתקינו לי כבר את הוויקי הזה.",
+    "config-profile": "תסריט הרשאות משתמשים:",
+    "config-profile-wiki": "ויקי פיתוח",
+    "config-profile-no-anon": "נדרשת יצירת חשבון",
+    "config-profile-fishbowl": "עורכים מורשים בלבד",
+    "config-profile-private": "ויקי פרטי",
+    "config-profile-help": "אתרי ויקי עובדים הכי טוב כאשר אתם מאפשרים לכמה שיותר אנשים לערוך אותם.\nבמדיה־ויקי קל לסקור את השינויים האחרונים ולשחזר כל נזק שעושים משתמשים תמימים או משחיתים.\n\nעם זאת, אנשים שונים מצאו למדיה־ויקי שימושים מגוּונים ולעתים לא קל לשכנע את כולם ביתרונות של \"דרך הוויקי\" המסורתית. ולכן יש לכם בררה.\n\nבאתר מסוג '''{{int:config-profile-wiki}}''' – לכולם יש הרשאה לערוך, אפילו בלי להיכנס לחשבון.\nבאתר וויקי מסוג '''{{int:config-profile-no-anon}}''' יש ביטחון גדול יותר, אבל הגדרה כזאת יכולה להרתיע תורמים מזדמנים.\n\nבתסריט '''{{int:config-profile-fishbowl}}''' רק משתמשים שקיבלו אישור יכולים לערוך, אבל כל הגולשים יכולים לקרוא את הדפים ואת גרסאותיהם הקודמות.\nב'''{{int:config-profile-private}}''' רק משתמשים שקיבלו אישור יכולים לקרוא ולערוך דפים.\n\nהגדרות מורכבות של הרשאות אפשריות אחרי ההתקנה, ר׳ את [//www.mediawiki.org/wiki/Manual:User_rights הפרק על הנושא הזה בספר ההדרכה].",
+    "config-license": "זכויות יוצרים ורישיון:",
+    "config-license-none": "ללא כותרת תחתית עם רישיון",
+    "config-license-cc-by-sa": "קריאייטיב קומונז–ייחוס–שיתוף זהה",
+    "config-license-cc-by": "קריאייטיב קומונז–ייחוס",
+    "config-license-cc-by-nc-sa": "קריאייטיב קומונז ייחוס–ללא שימוש מסחרי–שיתוף זהה",
+    "config-license-cc-0": "קריאייטיב קומונז אפס (נחלת הכלל)",
+    "config-license-gfdl": "רישיון חופשי למסמכים של גנו גרסה 1.3 או חדשה יותר",
+    "config-license-pd": "נחלת הכלל",
+    "config-license-cc-choose": "בחרו רישיון קריאייטיב קומונז מותאם אישית",
+    "config-license-help": "אתרי ויקי ציבוריים רבים מפרסמים את כל התרומות תחת [http://freedomdefined.org/Definition רישיון חופשי].\nזה עוזר ליצור תחושה של בעלות קהילתית ומעודד תרומה לאורך זמן.\nזה בדרך כלל לא נחוץ לאתר ויקי פרטי או בחברה מסחרית.\n\nאם אתם רוצים אפשרות להשתמש בטקסט מוויקיפדיה ואתם רוצים שוויקיפדיה תוכל לקבל עותקים של טקסטים מהוויקי שלכם, כדאי לכם לבחור ב'''רישיון קריאייטיב קומונז ייחוס–שיתוף זהה''' (CC-BY-SA).\n\nויקיפדיה השתמשה בעבר ברישיון החופשי למסמכים של גנו (GNU FDL או GFDL).\nהוא עדיין רישיון תקין, אבל קשה להבנה.\nכמו־כן, קשה לעשות שימוש חוזר ביצירות שפורסמו לפי GFDL.",
+    "config-email-settings": "הגדרות דוא״ל",
+    "config-enable-email": "להפעיל דוא״ל יוצא",
+    "config-enable-email-help": "אם אתם רוצים שדוא״ל יעבוד, [http://www.php.net/manual/en/mail.configuration.php אפשרויות הדוא״ל של PHP] צריכות להיות מוגדרות נכון.\nאם אינכם רוצים להפעיל שום אפשרויות דוא״ל, כבו אותן כאן ועכשיו.",
+    "config-email-user": "להפעיל שליחת דוא״ל ממשתמש למשתמש",
+    "config-email-user-help": "לאפשר לכל המשתמשים לשלוח אחד לשני דוא״ל אם הם הפעילו את זה בהעדפות שלהם.",
+    "config-email-usertalk": "להפעיל הודעות על דף שיחת משתמש",
+    "config-email-usertalk-help": "לאפשר למשתמשים לקבל הודעות על שינויים בדפי המשתמש שלהם, אם הם הפעילו את זה בהעדפות שלהם.",
+    "config-email-watchlist": "הפעלת התרעה על רשימת המעקב",
+    "config-email-watchlist-help": "לאפשר למשתמשים לקבל הודעות על הדפים ברשימת המעקב שלהם אם הם הפעילו את זה בהעדפות שלהם.",
+    "config-email-auth": "הפעלת התרעה בדוא״ל",
+    "config-email-auth-help": "אם האפשרות הזאת מופעלת, משתמשים יצטרכו לאשר את כתובת הדוא״ל שלהם באמצעות קישור שיישלח אליהם בכל פעם שהם יגדירו או ישנו אותה.\nרק כתובות דוא״ל מאושרות יכולות לקבלת דוא״ל ממשתמשים אחרים או מכתבים עם הודעות על שינויים.\n'''מומלץ''' להגדיר את האפשרות הזאת לאתרי ויקי ציבוריים כי אפשר לעשות שימוש לרעה בתכונות הדוא״ל.",
+    "config-email-sender": "כתובת דוא״ל לתשובות:",
+    "config-email-sender-help": "הכניסו את כתובת הדוא״ל שתשמש ככתובת לתשובה לכל הדואר היוצא.\nלשם יישלחו תגובות שגיאה (bounce).\nשרתי דוא״ל רבים דורשים שלפחות החלק של המתחם יהיה תקין.",
+    "config-upload-settings": "העלאת קבצים ותמונות",
+    "config-upload-enable": "להפעיל העלאת קבצים",
+    "config-upload-help": "העלאות קבצים חושפות את השרת שלכם לסיכוני אבטחה.\nלמידע נוסף, קִראו את [//www.mediawiki.org/wiki/Manual:Security חלק האבטחה] בספר ההדרכה.\n\nכדי להפעיל העלאת קבצים שנו את ההרשאות של התיקייה <code>images</code> תחת תיקיית השורש של מדיה־ויקי כך ששרת הווב יוכל לכתוב אליה.\nזה מפעיל את האפשרות הזאת.",
+    "config-upload-deleted": "תיקיית לקבצים שנמחקו:",
+    "config-upload-deleted-help": "בחרו את התיקייה לארכוב קבצים מחוקים.\nכדאי שזה לא יהיה נגיש לכל העולם דרך הרשת.",
+    "config-logo": "כתובת הסמל:",
+    "config-logo-help": "המראה ההתחלתי של מדיה־ויקי מכיל מקום לסמל של 135 על 160 פיקסלים בפינה העליונה מעל תפריט הצד.\nיש להעלות תמונה בגודל מתאים ולהכניס את הכתובת כאן.\n\nאם אינכם רוצים סמל, השאירו את התיבה הזאת ריקה.",
+    "config-instantcommons": "להפעיל את Instant Commons",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] היא תכונה שמאפשרת לאתרי ויקי להשתמש בתמונות, בצלילים ובמדיה אחרת שנמצאת באתר [//commons.wikimedia.org/ ויקישיתוף] (Wikimedia Commons).\nכדי לעשות את זה, מדיה־ויקי צריך לגשת לאינטרנט.\n\nלמידע נוסף על התכונה הזאת, כולל הוראות איך להפעיל את זה לאתרי ויקי שאינם ויקישיתוף, ר׳ [//mediawiki.org/wiki/Manual:$wgForeignFileRepos את ספר ההדרכה].",
+    "config-cc-error": "בורר רישיונות קריאייטיב קומונז לא החזיר שום תוצאה.\nהקלידו את שם הרישיון ידנית.",
+    "config-cc-again": "נא לבחור שוב...",
+    "config-cc-not-chosen": "בחרו באיזה רישיון קריאייטיב קומונז להשתמש ולחצו \"המשך\".",
+    "config-advanced-settings": "הגדרות מתקדמות",
+    "config-cache-options": "הגדרות למטמון עצמים (object caching):",
+    "config-cache-help": "מטמון עצמים משמש לשיפור המהירות של מדיה־ויקי על־ידי שמירה של נתונים שהשימוש בהם נפוץ במטמון.\nלאתרים בינוניים וגדולים כדאי מאוד להפעיל את זה, וגם אתרים קטנים ייהנו מזה.",
+    "config-cache-none": "ללא מטמון (שום יכולת אינה מוּסרת, אבל הביצועים באתרים גדולים ייפגעו)",
+    "config-cache-accel": "מטמון עצמים (object caching) של PHP&rlm; (APC&rlm;, XCache או WinCache)",
+    "config-cache-memcached": "להשתמש ב־Memcached (דורש התקנות והגדרות נוספות)",
+    "config-memcached-servers": "שרתי Memcached:",
+    "config-memcached-help": "רשימת כתובות IP ש־Memcached ישתמש בהן.\nיש לרשום כתובת אחת בכל שורה ולציין את הפִּתְחָה (port), למשל:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "בחרת ב־Memcached בתתור סוג המטמון שלכם, אבל לא הגדרתם שום שרת.",
+    "config-memcache-badip": "הקלדתם כתובת IP בלתי תקינה ל־Memcached&lrm;: $1.",
+    "config-memcache-noport": "לא הגדרתם פתחה לשימוש שרת Memcached&rlm;: $1.\nאם אינכם יודעים את מספר הפתחה, בררת המחדל היא 11211.",
+    "config-memcache-badport": "מספרי פתחה של Memcached צריכים להיות בין $1 ל־$2",
+    "config-extensions": "הרחבות",
+    "config-extensions-help": "ההרחבות ברשימה לעיל התגלו בתיקיית <span dir=\"ltr\"><code>./extensions</code></span> שלכם.\n\nייתכן שזה ידרוש הגדרות נוספות, אבל תוכלו להפעיל אותן עכשיו.",
+    "config-install-alreadydone": "'''אזהרה:''' נראה שכבר התקנתם את מדיה־ויקי ואתם מנסים להתקין אותה שוב.\nאנה התקדמו לדף הבא.",
+    "config-install-begin": "כשתלחצו על \"{{int:config-continue}}\", תתחילו את ההתקנה של מדיה־ויקי.\nאם אתם עדיין רוצים לשנות משהו, לחצו על \"{{int:config-back}}\"",
+    "config-install-step-done": "בוצע",
+    "config-install-step-failed": "נכשל",
+    "config-install-extensions": "כולל הרחבות",
+    "config-install-database": "הקמת מסד נתונים",
+    "config-install-schema": "יצירת סכמה",
+    "config-install-pg-schema-not-exist": "סכמה של PostgreSQL אינה קיימת",
+    "config-install-pg-schema-failed": "יצירת טבלאות נכשלה.\nודאו כי המשתמש \"$1\" יכול לכתוב לסכמה \"$2\".",
+    "config-install-pg-commit": "שמירת שינויים",
+    "config-install-pg-plpgsql": "בדיקת שפת PL/pgSQL",
+    "config-pg-no-plpgsql": "צריך להתקין את שפת PL/pgSQL במסד הנתונים $1",
+    "config-pg-no-create-privs": "לחשבון שהגדרתם להתקנה אין מספיק הרשאות ליצירת חשבון.",
+    "config-pg-not-in-role": "החשבון שציינתם עבור משתמש שרת הווב כבר קיים.\nהחשבון שסיפקתם להתקנה אינו חשבון בעל הרשאות (superuser) ואינו חבר בתפקיד (role) של משתמש שרת הווב, אז אין אפשרות ליצור עצמים בבעלות משתמש שרת הווב.\n\nכעת נדרש במדיה־ויקי שהטבלאות יהיו בבעלות של משתמש שרת הווב. נא לציין שם חשבון שרת וב אחר או ללחוץ על כפתור \"אחורה\" ולציין משתמש התקנה בעל הרשאות מתאימות.",
+    "config-install-user": "יצירת חשבון במסד נתונים",
+    "config-install-user-alreadyexists": "המשתמש \"$1\" כבר קיים",
+    "config-install-user-create-failed": "יצירת משתמש \"$1\" נכשלה: $2",
+    "config-install-user-grant-failed": "מתן הרשאות למשתמש \"$1\" נכשל: $2",
+    "config-install-user-missing": "המשתמש \"$1\" שצוין אינו קיים.",
+    "config-install-user-missing-create": "המשתמש \"$1\" שצוין אינו קיים.\nנא ללחוץ על תיבת בסימון \"יצירת חשבון\" להלן אם אתם רוצים ליצור אותו.",
+    "config-install-tables": "יצירת טבלאות",
+    "config-install-tables-exist": "'''אזהרה:''' נראה שטבלאות מדיה־ויקי כבר קיימות.\nמדלג על יצירתן.",
+    "config-install-tables-failed": "'''שגיאה:''' יצירת הטבלה נכשלה עם השגיאה הבאה: $1",
+    "config-install-interwiki": "אכלוס טבלת בינוויקי התחלתית",
+    "config-install-interwiki-list": "קריאת הקובץ <code>interwiki.list</code> לא הצליחה.",
+    "config-install-interwiki-exists": "'''אזהרה:''': נראה שבטבלת הבינוויקי כבר יש רשומות.\nמדלג על הרשומה ההתחלתית.",
+    "config-install-stats": "אתחול סטטיסטיקות",
+    "config-install-keys": "יצירת מפתחות סודיים",
+    "config-insecure-keys": "'''אזהרה''': {{PLURAL:$2|מפתח|מפתחות}} אבטחה ($1) {{PLURAL:$2|שנוצר|שנוצרו}} במהלך ההתקנה {{PLURAL:$2|אינו בטוח|אינם בטוחים}} מספיק. מומלץ לשקול לשנות {{PLURAL:$2|אותו|אותם}} ידנית.",
+    "config-install-sysop": "יצירת חשבון מפעיל",
+    "config-install-subscribe-fail": "הרישום ל־mediawiki-announce לא הצליח: $1",
+    "config-install-subscribe-notpossible": "cURL אינה מותקנת ו־allow_url_fopen אינה זמינה.",
+    "config-install-mainpage": "יצירת דף ראשי עם תוכן התחלתי.",
+    "config-install-extension-tables": "יצירת טבלאות להרחבות מופעלות",
+    "config-install-mainpage-failed": "לא הצליחה הכנסת דף ראשי: $1.",
+    "config-install-done": "'''מזל טוב!'''\nהתקנתם בהצלחה את מדיה־ויקי.\n\nתוכנת ההתקנה יצרה את הקובץ <code>LocalSettings.php</code>.\nהוא מכיל את כל ההגדרות שלכם.\n\nתצטרכו להוריד אותו ולשים אותו בבסיס ההתקנה של הוויקי שלכם (אותה התיקייה שבה נמצא הקובץ index.php). ההורדה הייתה אמורה להתחיל באופן אוטומטי.\n\nאם ההורדה לא התחילה, או אם ביטלתם אותה, אפשר להתחיל אותה מחדש בלחיצה על הקישור הבא:\n\n$3\n\n'''שימו לב''': אם לא תעשו זאת עכשיו, קובץ ההגדרות המחוּלל לא יהיה זמין לכם שוב.\n\nאחרי שתעשו את זה, תוכלו '''[$2 להיכנס לוויקי שלכם]'''.",
+    "config-download-localsettings": "הורדת <code>LocalSettings.php</code>",
+    "config-help": "עזרה",
+    "config-nofile": "הקובץ \"$1\" לא נמצא. האם הוא נמחק?",
+    "mainpagetext": "'''תוכנת מדיה־ויקי הותקנה בהצלחה.'''",
+    "mainpagedocfooter": "היעזרו ב[//meta.wikimedia.org/wiki/Help:Contents מדריך למשתמש] למידע על שימוש בתוכנת הוויקי.\n\n== קישורים שימושיים ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings רשימת ההגדרות]\n* [//www.mediawiki.org/wiki/Manual:FAQ שאלות ותשובות על מדיה־ויקי]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce רשימת התפוצה על השקת גרסאות]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources תרגום מדיה־ויקי לשפה שלך]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/hi.json b/includes/installer/i18n/hi.json
new file mode 100644 (file)
index 0000000..44e2183
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''मीडियाविकिका इन्स्टॉलेशन पूरा हो गया हैं ।'''",
+    "mainpagedocfooter": "विकि सॉफ्टवेयरके इस्तेमाल के लिये [//meta.wikimedia.org/wiki/Help:Contents उपयोगकर्ता गाईड] देखें ।\n\n== शुरुवात करें ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings कॉन्फिगरेशन सेटींगकी सूची]\n* [//www.mediawiki.org/wiki/Manual:FAQ मीडियाविकिके बारे में प्राय: पूछे जाने वाले सवाल]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce मीडियाविकि मेलिंग लिस्ट]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/hif-latn.json b/includes/installer/i18n/hif-latn.json
new file mode 100644 (file)
index 0000000..9db833b
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Thakurji"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki ke safalta se install kar dewa gais hai.'''",
+    "mainpagedocfooter": "Wiki software ke use kare ke aur jaankari ke khatir [//meta.wikimedia.org/wiki/Help:Contents User's Guide] ke dekho.\n\n== Getting started ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/hil.json b/includes/installer/i18n/hil.json
new file mode 100644 (file)
index 0000000..8822f9b
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Anjoeli9806"
+        ]
+    },
+    "mainpagetext": "'''Ang MediaWiki madinalag-on nga na-instala.'''",
+    "mainpagedocfooter": " Magkonsulta sa [//meta.wikimedia.org/wiki/Help:Contents User's Guide] para sa mga impormasyon sa paggamit sang wiki nga software.\n\n== Pag-umpisa ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista sang mga konpigorasyon sang pagkay-o]\n* [//www.mediawiki.org/wiki/Manual:FAQ Mga Masami Pamangkoton sa MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista sang mga ginapadal-an sang sulat kon may paguha-on nga MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/hr.json b/includes/installer/i18n/hr.json
new file mode 100644 (file)
index 0000000..6b14f7a
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Softver MediaWiki je uspješno instaliran.'''",
+    "mainpagedocfooter": "Pogledajte [//meta.wikimedia.org/wiki/MediaWiki_localisation dokumentaciju o prilagodbi sučelja]\ni [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Vodič za suradnike] za pomoć pri uporabi i podešavanju."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/hsb.json b/includes/installer/i18n/hsb.json
new file mode 100644 (file)
index 0000000..f6e557f
--- /dev/null
@@ -0,0 +1,259 @@
+{
+    "@metadata": {
+        "authors": [
+            "Michawiki",
+            "아라"
+        ]
+    },
+    "config-desc": "Instalaciski program za MediaWiki",
+    "config-title": "Instalacija MediaWiki $1",
+    "config-information": "Informacije",
+    "config-localsettings-upgrade": "Dataja <code>LocalSettings.php</code> je so wotkryła.\nZo by tutu instalaciju aktualizował, zapodaj prošu hódnotu za parameter <code>$wgUpgradeKey</code> do slědowaceho pola.\nNamakaš tón parameter w dataji <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Dataja <code>LocalSettings.php</code> bu wotkryta.\nZo by tutu instalaciju aktualizował, wuwjedźće <code>update.php</code>",
+    "config-localsettings-key": "Aktualizaciski kluč:",
+    "config-localsettings-badkey": "Kluč, kotryž sy podał, je wopak",
+    "config-upgrade-key-missing": "Eksistowaca instalacija MediaWiki je so wotkryła.\nZo by tutu instalaciju aktualizował, staj prošu slědowacu linku deleka w dataji <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "Zda so, zo eksistwoaca dataja <code>LocalSettings.php</code> je njedospołna.\nWariabla $1 njeje nastajena.\nProšu změń dataju <code>LocalSettings.php</code>, zo by so tuta wariabla nastajiła a klikń na \"{{int:Config-continue}}\".",
+    "config-localsettings-connection-error": "Při zwjazowanju z datowej banku z pomocu nastajenjow podatych w <code>LocalSettings.php</code> abo <code>AdminSettings.php</code> je zmylk wustupił. Prošu skoriguj tute nastajenja a spytaj hišće raz.\n\n$1",
+    "config-session-error": "Zmylk při startowanju posedźenja: $1",
+    "config-session-expired": "Zda so, zo twoje posedźenske daty su spadnjene.\nPosedźenja su za čas žiwjenja $1 skonfigurowane.\nMóžeš jón přez nastajenje <code>session.gc_maxlifetime</code> w php.ini powyšić.\nStartuj instalaciski proces znowa.",
+    "config-no-session": "Twoje posedźenske daty su so zhubili!\nSkontroluj swój php.ini a zawěsć, zo <code>session.save_path</code> je na prawy zapis nastajeny.",
+    "config-your-language": "Twoja rěč:",
+    "config-your-language-help": "Wubjer rěč, kotraž ma so za instalaciski proces wužiwać.",
+    "config-wiki-language": "Wikirěč:",
+    "config-wiki-language-help": "Wubjer rěč, w kotrejž wiki ma so zwjetša pisać.",
+    "config-back": "← Wróćo",
+    "config-continue": "Dale →",
+    "config-page-language": "Rěč",
+    "config-page-welcome": "Witaj do MediaWiki!",
+    "config-page-dbconnect": "Z datowej banku zwjazać",
+    "config-page-upgrade": "Eksistowacu instalaciju aktualizować",
+    "config-page-dbsettings": "Nastajenja datoweje banki",
+    "config-page-name": "Mjeno",
+    "config-page-options": "Opcije",
+    "config-page-install": "Instalować",
+    "config-page-complete": "Dokónčeny!",
+    "config-page-restart": "Instalaciju znowa startować",
+    "config-page-readme": "Čitaj mje",
+    "config-page-releasenotes": "Wersijowe informacije",
+    "config-page-copying": "Kopěrowanje",
+    "config-page-upgradedoc": "Aktualizowanje",
+    "config-page-existingwiki": "Eksistowacy wiki",
+    "config-help-restart": "Chceš wšě składowane daty hašeć, kotrež sy zapodał a instalaciski proces znowa startować?",
+    "config-restart": "Haj, znowa startować",
+    "config-sidebar": "* [//www.mediawiki.org MediaWiki Startowa strona MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents Nawod za wužiwarjow]\n* [//www.mediawiki.org/wiki/Manual:Contents Nawod za administratorow]\n* [//www.mediawiki.org/wiki/Manual:FAQ Huste prašenja]\n----\n* <doclink href=Readme>Čitaj mje</doclink>\n* <doclink href=ReleaseNotes>Wersijowe informacije</doclink>\n* <doclink href=Copying>Licencne postajenja</doclink>\n* <doclink href=UpgradeDoc>Aktualizacija</doclink>",
+    "config-env-good": "Wokolina je so skontrolowała.\nMóžeš MediaWiki instalować.",
+    "config-env-bad": "Wokolina je so skontrolowała.\nNjemóžeš MediaWiki instalować.",
+    "config-env-php": "PHP $1 je instalowany.",
+    "config-env-php-toolow": "PHP $1 je instalowany.\nAle MediaWiki wužaduje sej PHP $2 abo wyši.",
+    "config-unicode-using-utf8": "Za normalizaciju Unicode so utf8_normalize.so Briona Vibbera wužiwa.",
+    "config-unicode-using-intl": "Za normalizaciju Unicode so [http://pecl.php.net/intl PECL-rozšěrjenje intl] wužiwa.",
+    "config-no-db": "Njeda so přihódny ćěrjak datoweje banki namakać! Dyrbiš ćěrjak datoweje banki za PHP instalować.\nSlědowace typy datoweje banki so podpěruja: $1.\n\nJeli wužiwaš zhromadnje wužiwany serwer, proš swojeho poskićowarja, zo by přihódny ćěrjak datoweje banki instalował.\nJeli sy PHP sam kompilował, konfiguruj jón znowa z aktiwizowanym programom datoweje banki, na přikład z pomocu <code>./configure --with-mysql</code>.\nJeli sy PHP z Debianoweho abo Ubuntuoweho paketa instalował, dyrbiš tež modul php5-mysql instalować.",
+    "config-outdated-sqlite": "'''Warnowanje''': maš SQLite $1, kotryž je starši hač minimalna trěbna wersija $2. SQLite njebudźe k dispoziciji stać.",
+    "config-no-fts3": "'''Warnowanje''': SQLite je so bjez [//sqlite.org/fts3.html FTS3-modula] kompilował, pytanske funkcije njebudu k dispoziciji stać.",
+    "config-register-globals": "'''Warnowanje: Funkcija <code>[http://php.net/register_globals register_globals]</code> PHP je zmóžnjena.'''\n'''Znjemóžń ju, jeli móžeš.'''\nMediaWiki budźe fungować, ale twój serwer je potencielnym wěstotnym njedostatkam wustajeny.",
+    "config-ze1": "'''Chutny zmylk: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] je aktiwny!'''\nTuta opcija zawinuje grawěrowace zmylki při MediaWiki.\nNjemóžeš MediaWiki instalować abo wužiwać, chibazo tuta opcija je znjemóžnjena.",
+    "config-safe-mode": "'''Warnowanje:''' [http://www.php.net/features.safe-mode wěsty modus] PHP je aktiwny.\nTo móže problemy zawinować, předewšěm, jeli so datajowe nahraća a podpěra <code>math</code> wužiwaja.",
+    "config-xml-bad": "XML-modul za PHP faluje.\nMediaWiki trjeba funkcije w tutym modulu a njebudźe w tutej konfiguraciji fungować.\nJeli wužiwaš Mandrake, instaluj paket php-xml.",
+    "config-pcre": "Zda so, zo modul za PCRE-podpěru faluje.\nMediaWiki trjeba z Perl kompatibelne funkcije za regularne wurazy, zo by fungował.",
+    "config-pcre-no-utf8": "'''Ćežki zmylk''': Zda so, zo PCRE-modul za PHP ma so bjez PCRE_UTF8-podpěry kompilować.\nMediaWiki trjeba UTF-8-podpěru, zo by korektnje fungował.",
+    "config-memory-raised": "PHP-parameter <code>memory_limit</code> je $1, je so na hódnotu $2 zwyšił.",
+    "config-memory-bad": "'''Warnowanje:''' PHP-parameter <code>memory_limit</code> ma hódnotu $1,\nTo je najskerje přeniske.\nInstalacija móhła so njeporadźić!",
+    "config-ctype": "'''Ćežki zmylk''': PHP dyrbi so z podpěru za [http://www.php.net/manual/en/ctype.installation.php rozšěrjenje Ctype] kompilować.",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] je instalowany",
+    "config-apc": "[http://www.php.net/apc APC] je instalowany",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] je instalowany",
+    "config-diff3-bad": "GNU diff3 njenamakany.",
+    "config-no-uri": "'''Zmylk:''' Aktualny URI njeda so postajić.\nInstalacija bu přetorhnjena.",
+    "config-no-cli-uri": "'''Warnowanje''': Žana skriptowa šćežka (--scriptpath) podata, standard so wužiwa: <code>$1</code>.",
+    "config-using-server": "Serwerowe mjeno \"<nowiki>$1</nowiki>\" so wužiwa.",
+    "config-using-uri": "Serwerowy URL \"<nowiki>$1$2</nowiki>\" so wužiwa.",
+    "config-db-type": "Typ datoweje banki:",
+    "config-db-host": "Serwer datoweje banki:",
+    "config-db-host-oracle": "Datowa banka TNS:",
+    "config-db-wiki-settings": "Tutón wiki identifikować",
+    "config-db-name": "Mjeno datoweje banki:",
+    "config-db-name-oracle": "Šema datoweje banki:",
+    "config-db-install-account": "Wužiwarske konto za instalaciju",
+    "config-db-username": "Wužiwarske mjeno datoweje banki:",
+    "config-db-password": "Hesło datoweje banki:",
+    "config-db-password-empty": "Prošu zapodaj hesło za noweho wužiwarja datoweje banki: $1.\nByrnjež było móžno wužiwarjow bjez hesłow wutworić, njeje to wěste.",
+    "config-db-install-username": "Zapodaj wužiwarske mjeno, kotrež budźe so za zwisk z datowej banku za instalaciski proces wužiwać.\nTo njeje wužiwarske mjeno konta MediaWiki; to je wužiwarske mjeno za twoju datowu banku.",
+    "config-db-install-password": "Zapodaj hesło, kotrež budźe so za zwisk z datowej banku za instalaciski proces wužiwać.\nTo njeje hesło konta MediaWiki; to je hesło za twoju datowu banku.",
+    "config-db-install-help": "Zapodaj wužiwarske mjeno a hesło, kotrejž měłoj so za zwisk z datowej banku za instalaciski proces wužiwać.",
+    "config-db-account-lock": "Samsne wužiwarske mjeno a hesło za normalnu operaciju wužiwać",
+    "config-db-wiki-account": "Wužiwarske konto za normalnu operaciju",
+    "config-db-prefix": "Tabelowy prefiks datoweje banki:",
+    "config-db-charset": "Znamješkowa sadźba datoweje banki",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binarny",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 wróćokompatibelny UTF-8",
+    "config-mysql-old": "MySQL $1 abo nowši trěbny, maš $2.",
+    "config-db-port": "Port datoweje banki:",
+    "config-db-schema": "Šema za MediaWiki",
+    "config-db-schema-help": "Tuta šema da so zwjetša derje wužiwać.\nZměń ju jenož, jeli su přeswědčiwe přičiny za to.",
+    "config-pg-test-error": "Zwisk z datowej banku '''$1''' móžno njeje: $2",
+    "config-sqlite-dir": "Zapis SQLite-datow:",
+    "config-oracle-def-ts": "Standardny tabelowy rum:",
+    "config-oracle-temp-ts": "Nachwilny tabelowy rum:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-mysql": "* $1 je primarny cil za MediaWiki a podpěruje so najlěpje ([http://www.php.net/manual/en/mysql.installation.php Nawod ke kompilowanju  PHP z  MySQL-podpěru])",
+    "config-support-postgres": "* $1 je popularny system datoweje banki zjawneho žórła jako alternatiwa k MySQL ([http://www.php.net/manual/en/pgsql.installation.php nawod za kompilowanje PHP z podpěru PostgreSQL]). Móhło hišće někotre zmylki eksistować, a njeporuča so jón w produktiwnej wokolinje wužiwać.",
+    "config-support-oracle": "* $1 je komercielna předewzaćelska datowa banka. ([http://www.php.net/manual/en/oci8.installation.php Nawod za kompilowanje PHP z OCI8-podpěru])",
+    "config-header-mysql": "Nastajenja MySQL",
+    "config-header-postgres": "Nastajenja PostgreSQL",
+    "config-header-sqlite": "Nastajenja SQLite",
+    "config-header-oracle": "Nastajenja Oracle",
+    "config-invalid-db-type": "Njepłaćiwy typ datoweje banki",
+    "config-missing-db-name": "Dyrbiš hódnotu za \"Mjeno datoweje banki\" zapodać",
+    "config-missing-db-host": "Dyrbiš hódnotu za \"Database host\" zapodać",
+    "config-missing-db-server-oracle": "Dyrbiš hódnotu za \"Database TNS\" zapodać",
+    "config-invalid-db-server-oracle": "Njepłaćiwa datowa banka TNS \"$1\".\nWužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9), podsmužki (_) a dypki (.).",
+    "config-invalid-db-name": "Njepłaćiwe mjeno \"$1\" datoweje banki.\nWužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9),a podsmužki (_) a wjazawki (-).",
+    "config-invalid-db-prefix": "Njepłaćiwy prefiks \"$1\" datoweje banki.\nWužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9), podsmužki (_) a wjazawki (-).",
+    "config-connection-error": "$1.\n\nSkontroluj serwer, wužiwarske a hesło a spytaj hišće raz.",
+    "config-invalid-schema": "Njepłaćiwe šema za MediaWiki \"$1\".\nWužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9) a podsmužki (_).",
+    "config-db-sys-create-oracle": "Instalaciski program podpěruje jenož wužiwanje SYSDBA-konta za zakoženje noweho konta.",
+    "config-db-sys-user-exists-oracle": "Wužiwarske konto \"$1\" hižo eksistuje. SYSDBA hodźi so jenož za załoženje noweho konta wužiwać!",
+    "config-postgres-old": "PostgreSQL $1 abo nowši trěbny, maš $2.",
+    "config-sqlite-name-help": "Wubjer mjeno, kotrež twój wiki identifikuje.\nNjewužij mjezery abo wjazawki.\nTo budźe so za mjeno dataje SQLite-datow wužiwać.",
+    "config-sqlite-mkdir-error": "Zmylk při wutworjenju datoweho zapisa \"$1\".\nSkontroluj městno a spytaj hišće raz.",
+    "config-sqlite-dir-unwritable": "Njeje móžno do zapisa \"$1\" pisać.\nZměń jeho prawa, tak zo webserwer móže do njeho pisać a spytaj hišće raz.",
+    "config-sqlite-connection-error": "$1.\n\nSkontroluj datowy zapis a mjeno datoweje banki kaj spytaj hišće raz.",
+    "config-sqlite-readonly": "Do dataje <code>$1</code> njeda so pisać.",
+    "config-sqlite-cant-create-db": "Dataja <code>$1</code> datoweje banki njeda so wutworić.",
+    "config-sqlite-fts3-downgrade": "PHP wo podpěrje FTS3 k dispoziciji njesteji, table so znižuja",
+    "config-can-upgrade": "Su tabele MediaWiki w tutej datowej bance.\nZo by je na MediaWiki $1 aktualizował, klikń na '''Dale'''.",
+    "config-upgrade-done-no-regenerate": "Aktualizacija dokónčena.\n\nMóžeš nětko [$1 swój wiki wužiwać].",
+    "config-regenerate": "LocalSettings.php znowa wutworić →",
+    "config-show-table-status": "Naprašowanje <code>SHOW TABLE STATUS</code> je so njeporadźiło!",
+    "config-unknown-collation": "'''Warnowanje:''' Datowa banka njeznatu kolaciju wužiwa.",
+    "config-db-web-account": "Konto datoweje banki za webpřistup",
+    "config-db-web-help": "wubjer wužiwarske mjeno a hesło, kotrejž webserwer budźe wužiwać, zo by z serwerom datoweje banki za wšědnu operaciju zwjazać",
+    "config-db-web-account-same": "Samsne konto kaž za instalaciju wužiwać",
+    "config-db-web-create": "Załož konto, jeli hišće njeeksistuje.",
+    "config-db-web-no-create-privs": "Konto, kotrež sy za instalaciju podał, nima dosć woprawnjenjow, zo by konto wutworiło.\nKonto, kotrež tu podawaće, dyrbi hižo eksistować.",
+    "config-mysql-engine": "Składowanska mašina:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-charset": "Znamješkowa sadźba datoweje banki:",
+    "config-mysql-binary": "Binarny",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Mjeno wikija:",
+    "config-site-name-help": "To zjewi so w titulowej lejstwje wobhladaka kaž tež na wšelakich druhich městnach.",
+    "config-site-name-blank": "Zapodaj sydłowe mjeno.",
+    "config-project-namespace": "Mjenowy rum projekta:",
+    "config-ns-generic": "Projekt",
+    "config-ns-site-name": "Samsne kaž wikimjeno: $1",
+    "config-ns-other": "Druhe (podać)",
+    "config-ns-other-default": "MyWiki",
+    "config-ns-invalid": "Podaty mjenowy rum \"<nowiki>$1</nowiki>\" je njepłaćiwy.\nPodaj druhi projektowy mjenowy rum.",
+    "config-ns-conflict": "Podaty mjenowy rum \"<nowiki>$1</nowiki>\" je w konflikće ze standardnym mjenjowym rumom MediaWiki.\nPodaj druhi projektowy mjenowy rum.",
+    "config-admin-box": "Administratorowe konto",
+    "config-admin-name": "Twoje mjeno:",
+    "config-admin-password": "Hesło:",
+    "config-admin-password-confirm": "Hesło wospjetować:",
+    "config-admin-help": "Zapodaj swoje preferowane wužiwarske mjeno, na přikład \"Jurij Serb\".\nTo je mjeno, kotrež budźeš wužiwać, zo by so do wikija přizjewił.",
+    "config-admin-name-blank": "Zapodaj administratorowe wužiwarske mjeno.",
+    "config-admin-name-invalid": "Podate wužiwarske mjeno \"<nowiki>$1</nowiki>\" je njepłaćiwe.\nPodaj druhe wužiwarske mjeno.",
+    "config-admin-password-blank": "Zapodaj hesło za administratorowe konto.",
+    "config-admin-password-same": "Hesło dyrbi so wot wužiwarskeho mjena rozeznać.",
+    "config-admin-password-mismatch": "Wobě hesle, kotrejž sy zapodał, njejstej jenakej.",
+    "config-admin-email": "E-mejlowa adresa:",
+    "config-admin-email-help": "Zapodaj tu e-mejlowu adresu, zo by přijimanje e-mejlow wot druhich wužiwarjow w tutym wikiju zmóžnił, swoje hesło wróćo stajił a zdźělenki wo změnach na swojich wobkedźbowanych stronach  dostał. Móžeš polo prózdne wostajić.",
+    "config-admin-error-user": "Interny zmylk při wutworjenju administratora z mjenom \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Interny zmylk při nastajenju hesła za administratora \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+    "config-admin-error-bademail": "Sy njepłaćiwu e-mejlowu adresu zapodał.",
+    "config-subscribe": "[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Rozesyłansku lisćinu wo připowědźenjach nowych wersijow ].abonować",
+    "config-almost-done": "Sy skoro hotowy!\nMóžeš nětko zbytnu konfiguraciju přeskočić a wiki hnydom instalować.",
+    "config-optional-continue": "Dalše prašenja?",
+    "config-optional-skip": "Instaluj nětko wiki.",
+    "config-profile": "Profil wužiwarskich prawow:",
+    "config-profile-wiki": "Zjawny wiki",
+    "config-profile-no-anon": "Załoženje konto je trěbne",
+    "config-profile-fishbowl": "Jenož awtorizowani wobdźěłarjo",
+    "config-profile-private": "Priwatny wiki",
+    "config-license": "Awtorske prawo a licenca:",
+    "config-license-none": "Žane licencne podaća w nohowej lince",
+    "config-license-cc-by-sa": "Creative Commons Attribution Share Alike",
+    "config-license-cc-by": "Creative Commons Attribution",
+    "config-license-cc-by-nc-sa": "Creative Commons Attribution Non-Commercial Share Alike",
+    "config-license-cc-0": "Creative Commons Zero (zjawnosći přistupny)",
+    "config-license-gfdl": "GNU-licenca za swobodnu dokumentaciju 1.3 abo nowša",
+    "config-license-pd": "Powšitkownosći přistupny",
+    "config-license-cc-choose": "Swójsku licencu Creative Commons wubrać",
+    "config-email-settings": "E-mejlowe nastajenja",
+    "config-enable-email": "Wuchadźace e-mejlki zmóžnić",
+    "config-enable-email-help": "Jeli chceš e-mejl wužiwać, dyrbja so [http://www.php.net/manual/en/mail.configuration.php e-mejlowe nastajenja PHP] prawje konfigurować.\nJeli nochceš e-mejlowe funkcije wužiwać, móžeš je tu znjemóžnić.",
+    "config-email-user": "E-mejl mjez wužiwarjemi zmóžnić",
+    "config-email-user-help": "Wšěm wužiwarjam dowolić, jednomu druhemu e-mejlki pósłać, jeli su tutu funkciju w swojich nastajenjach zmóžnili.",
+    "config-email-usertalk": "Zdźělenja za wužiwarske diskusijne strony zmóžnić",
+    "config-email-usertalk-help": "Wužiwarjam dowolić zdźělenki wo změnach na wužiwarskich diskusijnych stronach dóstać, jeli woni su to w swojich nastajenjach zmóžnili.",
+    "config-email-watchlist": "Zdźělenja za wobkedźbowanki zmóžnić",
+    "config-email-watchlist-help": "Wužiwarjam dowolić zdźělenki wo jich wobked´bowanych stronach dóstać, jeli woni su to w swojich nastajenjach zmóžnili.",
+    "config-email-auth": "E-mejlowu awtentifikaciju zmóžnić",
+    "config-email-sender": "E-mejlowa adresa za wotmołwy:",
+    "config-upload-settings": "Wobrazy a nahraća datajow",
+    "config-upload-enable": "Nahraće datajow zmóžnić",
+    "config-upload-deleted": "Zapis za zhašane dataje:",
+    "config-upload-deleted-help": "Wubjer zapis, w kotrymž zhašene dataje maja so archiwować.\nIdealnje tón njeměł z weba přistupny być.",
+    "config-logo": "URL loga:",
+    "config-instantcommons": "Instant commons zmóžnić",
+    "config-cc-error": "Pytanje za licencu Creative Commons njeje žadyn wuslědk přinjesło.\nZapodaj licencne mjeno manuelnje.",
+    "config-cc-again": "Zaso wubrać...",
+    "config-cc-not-chosen": "Wubjer licencu Creative Commons a klikń na \"dale\".",
+    "config-advanced-settings": "Rozšěrjena konfiguraćija",
+    "config-cache-options": "Nastajenja za objektowe pufrowanje:",
+    "config-cache-none": "Žane pufrowanje (žana funkcionalnosć so njewotstronja, ale spěšnosć móže so na wjetšich wikijowych sydłach wobwliwować)",
+    "config-cache-accel": "Objektowe pufrowanje PHP (APC, XCache abo WinCache)",
+    "config-cache-memcached": "Memcached wužiwać (wužaduje sej přidatnu instalaciju a konfiguraciju)",
+    "config-memcached-servers": "Serwery memcached:",
+    "config-memcached-help": "Lisćina IP-adresow, kotrež maja so za Memcached wužiwać.\nKóžda linka měła jenož jednu IP-adresu a port, kotryž ma so wužiwać, wobsahować. Na přikład:\n127.0.0.1:11211\n192.168.1.25:1234",
+    "config-memcache-needservers": "Sy Memcached jako swój pufrowakowy typ wubrał, ale njejsy žane serwery podał",
+    "config-memcache-badip": "Sy njepłaćiwu IP-adresu za Memcached zapodał: $1",
+    "config-memcache-noport": "Njejsy žadyn port za wužiwanje serwera Memcached podał: $1.\nJeli port njewěš, standard je 11211.",
+    "config-memcache-badport": "Portowe čisła za Memcached měli mjez $1 a $2 być",
+    "config-extensions": "Rozšěrjenja",
+    "config-extensions-help": "Rozšěrjenja podate horjeka buchu w twojim zapisu <code>./extensions</code> namakane.\n\nTo móže sej přidatnu konfiguraciju wužadać, ale móžeš je nětko zmóžnić.",
+    "config-install-alreadydone": "'''Warnowanje:''' Zda so, zo sy hižo MediaWiki instalował a pospytuješ jón znowa instalować.\nProšu pokročuj z přichodnej stronu.",
+    "config-install-begin": "Přez kliknjenje na \"{{int:config-continue}}\" budźe so instalacija MediaWiki startować.\nJeli hišće chceš něšto změnić, klikń na \"{{int:config-back}}\".",
+    "config-install-step-done": "dokónčene",
+    "config-install-step-failed": "njeporadźiło",
+    "config-install-extensions": "Inkluziwnje rozšěrjenja",
+    "config-install-database": "Datowa banka so připrawja",
+    "config-install-schema": "Datowa šema so twori",
+    "config-install-pg-schema-not-exist": "Šema PostgreSQL njeeksistuje",
+    "config-install-pg-schema-failed": "Wutworjenje tabelow je so njeporadźiło.\nZawěsć, zo wužiwar \"$1\" móže do šemy \"$2\" pisać.",
+    "config-install-pg-commit": "Změny so wotesyłaja",
+    "config-install-pg-plpgsql": "Pruwowanje za rěču PL/pgSQL",
+    "config-pg-no-plpgsql": "Dyrbiš rěč PL/pgSQL w datowej bance $1 instalować",
+    "config-pg-no-create-privs": "Konto, kotrež sy za instalaciju podał, nima dosahace prawa za wutworjenje konta.",
+    "config-install-user": "Tworjenje wužiwarja datoweje banki",
+    "config-install-user-alreadyexists": "Wužiwar \"$1\" hižo eksistuje",
+    "config-install-user-create-failed": "Wutworjenje wužiwarja \"$1\" je so njeporadźiło: $2",
+    "config-install-user-grant-failed": "Prawo njeda so wužiwarjej \"$1\" dać: $2",
+    "config-install-user-missing": "Podaty wužiwar \"$1\" njeeksistuje.",
+    "config-install-user-missing-create": "Podaty wužiwar \"$1\" njeeksistuje.\nProšu klikń na slědowacy kontrolny kašćik \"konto załožić\", jeli chceš jo wutworić.",
+    "config-install-tables": "Tworjenje tabelow",
+    "config-install-tables-exist": "'''Warnowanje''': Zda so, zo tabele MediaWiki hižo eksistuja.\nWutworjenje so přeskakuje.",
+    "config-install-tables-failed": "'''Zmylk''': Wutworjenje tabele je so slědowaceho zmylka dla njeporadźiło: $1",
+    "config-install-interwiki": "Standardna tabela interwikijow so pjelni",
+    "config-install-interwiki-list": "<code>interwiki.list</code> njeda so namakać.",
+    "config-install-interwiki-exists": "'''Warnowanje''': Zda so, zo tabela interwikjow hižo zapiski wobsahuje.\nStandardna lisćina sp přeskakuje.",
+    "config-install-stats": "Statistika so inicializuje",
+    "config-install-keys": "Tajne kluče so tworja",
+    "config-install-sysop": "Tworjenje administratoroweho wužiwarskeho konta",
+    "config-install-subscribe-fail": "Abonowanje \"mediawiki-announce\" njemóžno: $1",
+    "config-install-subscribe-notpossible": "cURL njeje instalowany a allow_url_fopen k dispoziciji njesteji.",
+    "config-install-mainpage": "Hłowna strona so ze standardnym wobsahom wutworja",
+    "config-install-extension-tables": "Tabele za zmóžnjene rozšěrjenja so tworja",
+    "config-install-mainpage-failed": "Powěsć njeda so zasunyć: $1",
+    "config-download-localsettings": "<code>LocalSettings.php</code> sćahnyć",
+    "config-help": "pomoc",
+    "config-nofile": "Dataja \"$1\" njeje so namakała. Je so zhašała?",
+    "mainpagetext": "'''MediaWiki bu wuspěšnje instalowany.'''",
+    "mainpagedocfooter": "Prošu hlej [//meta.wikimedia.org/wiki/Help:Contents dokumentaciju] za informacije wo wužiwanju softwary.\n\n== Za nowačkow ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Wo nastajenjach]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki za twoju rěč lokalizować]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ht.json b/includes/installer/i18n/ht.json
new file mode 100644 (file)
index 0000000..30e4e6b
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Boukman"
+        ]
+    },
+    "mainpagetext": "'''MedyaWiki byen enstale l.'''",
+    "mainpagedocfooter": "Konsilte [//meta.wikimedia.org/wiki/Help:Konteni Gid Itilizatè] pou enfòmasyon sou kijan pou w itilize logisyèl wiki a.\n\n== Kijan pou kòmanse ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lis paramèt yo pou konfigirasyon]\n* [//www.mediawiki.org/wiki/Manyèl:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lis diskisyon ki parèt sou MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/hu-formal.json b/includes/installer/i18n/hu-formal.json
new file mode 100644 (file)
index 0000000..733a0f9
--- /dev/null
@@ -0,0 +1,32 @@
+{
+    "@metadata": {
+        "authors": [
+            "Dani",
+            "Glanthor Reviol"
+        ]
+    },
+    "config-localsettings-upgrade": "'''Figyelmeztetés''': már létezik a <code>LocalSettings.php</code> fájl.\nA szoftver frissíthető.\nAdja meg a <code>$wgUpgradeKey</code>-ben található kulcsot a beviteli mezőben",
+    "config-session-expired": "Úgy tűnik, hogy a munkamenetadatok lejártak.\nA munkamenetek élettartama a következőre van beállítva: $1.\nAz érték növelhető a php.ini <code>session.gc_maxlifetime</code> beállításának módosításával.\nIndítsa újra a telepítési folyamatot.",
+    "config-no-session": "Elvesztek a munkamenetadatok!\nEllenőrizze, hogy a php.ini-ben a <code>session.save_path</code> beállítás a megfelelő könyvtárra mutat-e.",
+    "config-your-language-help": "Válassza ki a telepítési folyamat során használandó nyelvet.",
+    "config-wiki-language-help": "Az a nyelv, amin a wiki tartalmának legnagyobb része íródik.",
+    "config-page-welcome": "Üdvözli a MediaWiki!",
+    "config-help-restart": "Szeretné törölni az eddig megadott összes adatot és újraindítani a telepítési folyamatot?",
+    "config-welcome": "=== Környezet ellenőrzése ===\nAlapvető ellenőrzés, ami megmondja, hogy a környezet alkalmas-e a MediaWiki számára.\nHa probléma merülne fel a telepítés során, meg kell adnia mások számára az alább megjelenő információkat.",
+    "config-unicode-pure-php-warning": "'''Figyelmeztetés''': Az [http://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el Unicode normalizáláshoz.\nHa nagy látogatottságú oldalt üzemeltet, itt találhat információkat [//www.mediawiki.org/wiki/Unicode_normalization_considerations a témáról].",
+    "config-register-globals": "'''Figyelmeztetés: A PHP <code>[http://php.net/register_globals register_globals]</code> beállítása engedélyezve van.'''\n'''Tiltsa le, ha van rá lehetősége.'''\nA MediaWiki működőképes a beállítás használata mellett, de a szerver biztonsági kockázatnak lesz kitéve.",
+    "config-imagemagick": "Az ImageMagick megtalálható a rendszeren: <code>$1</code>.\nA bélyegképek készítése engedélyezve lesz, ha engedélyezi a feltöltéseket.",
+    "config-db-name-help": "Válassza ki a wikije azonosítására használt nevet.\nNem tartalmazhat szóközt vagy kötőjelet.\n\nHa megosztott webtárhelyet használ, a szolgáltatója vagy egy konkrét adatbázisnevet ad önnek használatra, vagy létrehozhat egyet a vezérlőpulton keresztül.",
+    "config-db-install-help": "Adja meg a felhasználónevet és jelszót, amivel a telepítő csatlakozhat az adatbázishoz.",
+    "config-db-wiki-help": "Adja meg azt a felhasználónevet és jelszót, amivel a wiki fog csatlakozni az adatbázishoz működés közben.\nHa a fiók nem létezik és a telepítést végző fiók rendelkezik megfelelő jogosultsággal, egy új fiók készül a megadott a névvel, azon minimális jogosultságkörrel, ami a wiki működéséhez szükséges.",
+    "config-charset-help": "'''Figyelmezetés:''' Ha a '''visszafelé kompatibilis UTF-8''' beállítást használja MySQL 4.1 vagy újabb verziók esetén, és utána a <code>mysqldump</code> programmal készít róla biztonsági másolatot, az tönkreteheti az összes nem ASCII-karaktert, visszafordíthatatlanul károsítva a másolatokban tárolt adatokat!\n\n'''Bináris''' módban a MediaWiki az UTF-8-ban kódolt szöveget bináris mezőkben tárolja az adatbázisban.\nEz sokkal hatékonyabb a MySQL UTF-8-módjától, és lehetővé teszi, hogy a teljes Unicode-karakterkészletet használja.\n'''UTF-8-módban''' MySQL tudja, hogy milyen karakterkészlettel van kódolva az adat, megfelelően van megjelenítve és konvertálva, de\nnem használhatja a [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] feletti karaktereket.",
+    "config-db-schema-help": "A fenti sémák általában megfelelőek.\nCsak akkor módosítson rajta, ha szükség van rá.",
+    "config-sqlite-parent-unwritable-nogroup": "Nem lehet létrehozni az adatok tárolásához szükséges <code><nowiki>$1</nowiki></code> könyvtárat, mert a webszerver nem írhat a szülőkönyvtárba (<code><nowiki>$2</nowiki></code>).\n\nA telepítő nem tudta megállapíteni, hogy melyik felhasználói fiókon fut a webszerver.\nA folytatáshoz tegye írhatóvá ezen fiók (és más fiókok!) számára a következő könyvtárat: <code><nowiki>$3</nowiki></code>.\nUnix/Linux rendszereken tedd a következőt:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-ns-other": "Más (adja meg)",
+    "config-admin-name-blank": "Adja meg az adminisztrátor felhasználónevét!",
+    "config-admin-name-invalid": "A megadott felhasználónév (<nowiki>$1</nowiki>) érvénytelen.\nAdjon meg egy másik felhasználónevet.",
+    "config-admin-password-blank": "Adja meg az adminisztrátori fiók jelszavát!",
+    "config-instantcommons-help": "Az [//www.mediawiki.org/wiki/InstantCommons Instant Commons] lehetővé teszi, hogy a wikin használhassák a [//commons.wikimedia.org/ Wikimedia Commons] oldalon található képeket, hangokat és más médiafájlokat.\nA használatához a MediaWikinek internethozzáférésre van szüksége.\n\nA funkcióról és hogy hogyan állítható be más wikik esetén [//mediawiki.org/wiki/Manual:$wgForeignFileRepos a kézikönyvben] találhat további információkat.",
+    "config-install-done": "'''Gratulálunk!'''\nSikeresen telepítette a MediaWikit.\n\nA telepítő készített egy <code>LocalSettings.php</code> fájlt.\nEz tartalmazza az összes beállítást.\n\n[$1 Le kell töltenie], és el kell helyeznie a MediaWiki telepítési könyvtárába (az a könyvtár, ahol az index.php van).\n'''Megjegyzés''': Ha ezt most nem teszi meg, és kilép, a generált fájl nem lesz elérhető a későbbiekben.\n\nHa ezzel készen van, '''[$2 beléphet a wikibe]'''.",
+    "mainpagedocfooter": "Ha segítségre van szüksége a wikiszoftver használatához, akkor keresse fel a [//meta.wikimedia.org/wiki/Help:Contents User's Guide] oldalt.\n\n== Alapok (angol nyelven) ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Beállítások listája]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki GyIK]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-kiadások levelezőlistája]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/hu.json b/includes/installer/i18n/hu.json
new file mode 100644 (file)
index 0000000..0447d17
--- /dev/null
@@ -0,0 +1,295 @@
+{
+    "@metadata": {
+        "authors": [
+            "Dani",
+            "Glanthor Reviol",
+            "아라"
+        ]
+    },
+    "config-desc": "A MediaWiki telepítője",
+    "config-title": "A MediaWiki $1 telepítése",
+    "config-information": "Információ",
+    "config-localsettings-upgrade": "Már létezik a <code>LocalSettings.php</code> fájl.\nA telepített szoftver frissítéséhez írd be az alábbi mezőbe a <code>$wgUpgradeKey</code> beállítás értékét, melyet a <code>LocalSettings.php</code> nevű fájlban találhatsz meg.",
+    "config-localsettings-cli-upgrade": "A <code>LocalSettings.php</code> fájl megtalálható.\nA telepített rendszer frissítéséhez futtasd az <code>update.php</code>-t.",
+    "config-localsettings-key": "Frissítési kulcs:",
+    "config-localsettings-badkey": "A megadott kulcs érvénytelen.",
+    "config-upgrade-key-missing": "A telepítő a MediaWiki meglévő példányát észlelte.\nA telepített rendszer frissítéséhez helyezd el az alábbi sort a <code>LocalSettings.php</code> végére:\n\n$1",
+    "config-localsettings-incomplete": "A meglévő <code>LocalSettings.php</code> hiányosnak tűnik.\nA(z) $1 változó értéke nincs beállítva.\nMódosítsd a <code>LocalSettings.php</code> fájlt úgy, hogy ez a változó be legyen állítva, majd kattints a „{{int:Config-continue}}” gombra.",
+    "config-localsettings-connection-error": "Nem sikerült csatlakozni az adatbázishoz a <code>LocalSettings.php</code>-ben vagy az <code>AdminSettings.php</code>-ben megadott adatokkal. Ellenőrizd a beállításokat, majd próbáld újra.\n\n$1",
+    "config-session-error": "Nem sikerült elindítani a munkamenetet: $1",
+    "config-session-expired": "Úgy tűnik, hogy a munkamenetadatok lejártak.\nA munkamenetek élettartama a következőre van beállítva: $1.\nAz érték növelhető a php.ini <code>session.gc_maxlifetime</code> beállításának módosításával.\nIndítsd újra a telepítési folyamatot.",
+    "config-no-session": "Elvesztek a munkamenetadatok!\nEllenőrizd, hogy a php.ini-ben a <code>session.save_path</code> a megfelelő könyvtárra mutat-e.",
+    "config-your-language": "Nyelv:",
+    "config-your-language-help": "A telepítési folyamat során használandó nyelv.",
+    "config-wiki-language": "A wiki nyelve:",
+    "config-wiki-language-help": "Az a nyelv, amin a wiki tartalmának legnagyobb része íródik.",
+    "config-back": "← Vissza",
+    "config-continue": "Folytatás →",
+    "config-page-language": "Nyelv",
+    "config-page-welcome": "Üdvözöl a MediaWiki!",
+    "config-page-dbconnect": "Kapcsolódás az adatbázishoz",
+    "config-page-upgrade": "Telepített változat frissítése",
+    "config-page-dbsettings": "Adatbázis-beállítások",
+    "config-page-name": "Név",
+    "config-page-options": "Beállítások",
+    "config-page-install": "Telepítés",
+    "config-page-complete": "Kész!",
+    "config-page-restart": "Telepítés újraindítása",
+    "config-page-readme": "Tudnivalók",
+    "config-page-releasenotes": "Kiadási megjegyzések",
+    "config-page-copying": "Másolás",
+    "config-page-upgradedoc": "Frissítés",
+    "config-page-existingwiki": "Létező wiki",
+    "config-help-restart": "Szeretnéd törölni az eddig megadott összes adatot és újraindítani a telepítési folyamatot?",
+    "config-restart": "Igen, újraindítás",
+    "config-welcome": "=== A környezet ellenőrzése ===\nNéhány alapvető ellenőrzés lett végrehajtva, ami meghatározza, hogy ez a környezet alkalmas-e a MediaWiki telepítésére.\nHa telepítéssel kapcsolatos segítségre van szükséged, add meg ezen ellenőrzések eredményét.",
+    "config-copyright": "=== Licenc és feltételek ===\n\n$1\n\nEz a program szabad szoftver; terjeszthető illetve módosítható a Free Software Foundation által kiadott GNU General Public License dokumentumában leírtak; akár a licenc 2-es, akár (tetszőleges) későbbi változata szerint.\n\nEz a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb '''garancia nélkül''', az '''eladhatóságra''' vagy '''valamely célra való alkalmazhatóságra''' való származtatott garanciát is beleértve. További részleteket a GNU General Public License tartalmaz.\n\nA felhasználónak a programmal együtt meg kell kapnia a <doclink href=Copying>GNU General Public License egy példányát</doclink>; ha mégsem kapta meg, akkor írjon a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. címre, vagy [http://www.gnu.org/copyleft/gpl.html tekintse meg online].",
+    "config-sidebar": "* [//www.mediawiki.org A MediaWiki honlapja]\n* [//www.mediawiki.org/wiki/Help:Contents Felhasználói kézikönyv]\n* [//www.mediawiki.org/wiki/Manual:Contents Útmutató adminisztrátoroknak]\n* [//www.mediawiki.org/wiki/Manual:FAQ GyIK]\n----\n* <doclink href=Readme>Ismertető</doclink>\n* <doclink href=ReleaseNotes>Kiadási megjegyzések</doclink>\n* <doclink href=Copying>Másolás</doclink>\n* <doclink href=UpgradeDoc>Frissítés</doclink>",
+    "config-env-good": "A környezet ellenőrzése befejeződött.\nA MediaWiki telepíthető.",
+    "config-env-bad": "A környezet ellenőrzése befejeződött.\nA MediaWiki nem telepíthető.",
+    "config-env-php": "A PHP verziója: $1",
+    "config-env-php-toolow": "PHP $1 van telepítve,\nazonban a MediaWikinek PHP $2, vagy újabb szükséges.",
+    "config-unicode-using-utf8": "A rendszer Unicode normalizálására Brion Vibber utf8_normalize.so könyvtárát használja.",
+    "config-unicode-using-intl": "A rendszer Unicode normalizálására az [http://pecl.php.net/intl intl PECL kiterjesztést] használja.",
+    "config-unicode-pure-php-warning": "'''Figyelmeztetés''': Az Unicode normalizáláshoz szükséges [http://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el, helyette a lassú, PHP alapú implementáció lesz használva.\nHa nagy látogatottságú oldalt üzemeltetsz, itt találhatsz további információkat [//www.mediawiki.org/wiki/Unicode_normalization_considerations a témáról].",
+    "config-unicode-update-warning": "'''Figyelmeztetés''': Az Unicode normalizáláshoz szükséges burkolókönyvtár [http://site.icu-project.org/ ICU projekt] függvénykönyvtárának régebbi változatát használja.\nHa ügyelni kívánsz a Unicode használatára, fontold meg a [//www.mediawiki.org/wiki/Unicode_normalization_considerations frissítését].",
+    "config-no-db": "Nem sikerült egyetlen használható adatbázis-illesztőprogramot sem találni.  Telepítened kell egyet a PHP-hez.\nA következő adatbázistípusok támogatottak: $1.\n\nHa megosztott tárhelyszolgáltatást használsz, kérd meg a szolgáltatódat, hogy telepítsen egy megfelelő illesztőprogramot.\nHa a PHP-t magad fordítottad, konfiguráld újra úgy, hogy engedélyezve legyen egy adatbáziskliens, pl. a <code>./configure --with-mysql</code> parancs használatával.\nHa a PHP-t Debian vagy Ubuntu csomaggal telepítetted, akkor szükséged lesz a php5-mysql modulra is.",
+    "config-no-fts3": "'''Figyelmeztetés''': Az SQLite [//sqlite.org/fts3.html FTS3 modul] nélkül lett fordítva, a keresési funkciók nem fognak működni ezen a rendszeren.",
+    "config-register-globals": "'''Figyelmeztetés: A PHP <code>[http://php.net/register_globals register_globals]</code> beállítása engedélyezve van.'''\n'''Tiltsd le, ha van rá lehetőséged.'''\nA MediaWiki működőképes a beállítás használata mellett, de a szerver biztonsági kockázatnak lesz kitéve.",
+    "config-magic-quotes-runtime": "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] aktív!'''\nEz a beállítás kiszámíthatatlan károkat okoz a bevitt adatokban.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
+    "config-magic-quotes-sybase": "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] aktív!'''\nEz a beállítás kiszámíthatatlan károkat okoz a bevitt adatokban.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
+    "config-mbstring": "'''Kritikus hiba: az [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime mbstring.func_overload] aktív!'''\nEz a beállítás hibákat okoz és kiszámíthatatlanul károsíthatja bevitt adatokat.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
+    "config-ze1": "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] aktív!'''\nEz a beállítás borzalmas hibákat okoz a MediaWiki futása során.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
+    "config-safe-mode": "'''Figyelmeztetés:''' A PHP [http://www.php.net/features.safe-mode safe mode]-ja be van kapcsolva.\nProblémákat okozhat, különösen a fájlfeltöltéseknél és a <code>math</code>-támogatás használatánál.",
+    "config-xml-bad": "A PHP XML-modulja hiányzik.\nEgyes MediaWiki-funkciók, melyek ezt a modult igénylik, nem fognak működni ilyen beállítások mellett.\nHa Madrake-et futtatsz, telepítsd a php-xml csomagot.",
+    "config-pcre": "Úgy tűnik, hogy a PCRE támogató modul hiányzik.\nA MediaWikinek Perl-kompatibilis reguláriskifejezés-függvényekre van szüksége a működéshez.",
+    "config-pcre-no-utf8": "'''Kritikus hiba''': Úgy tűnik, hogy a PHP PRCE modulja PRCE_UTF8 támogatás nélkül lett fordítva.\nA MediaWikinek UTF-8-támogatásra van szüksége a helyes működéshez.",
+    "config-memory-raised": "A PHP <code>memory_limit</code> beállításának értéke: $1. Meg lett növelve a következő értékre: $2.",
+    "config-memory-bad": "'''Figyelmeztetés:''' A PHP <code>memory_limit</code> beállításának értéke $1.\nEz az érték valószínűleg túl kevés, a telepítés sikertelen lehet.",
+    "config-xcache": "Az [http://xcache.lighttpd.net/ XCache] telepítve van",
+    "config-apc": "Az [http://www.php.net/apc APC] telepítve van",
+    "config-wincache": "A [http://www.iis.net/download/WinCacheForPhp WinCache] telepítve van",
+    "config-no-cache": "'''Figyelmeztetés:''' Nem található [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] és [http://www.iis.net/download/WinCacheForPhp WinCache] sem.\nObjektum-gyorsítótárazás nem lesz engedélyezve.",
+    "config-diff3-bad": "GNU diff3 nem található.",
+    "config-imagemagick": "Az ImageMagick megtalálható a rendszeren: <code>$1</code>.\nA bélyegképek készítése engedélyezve lesz a feltöltések engedélyezése esetén.",
+    "config-gd": "A GD grafikai könyvtár elérhető.\nBélyegképek készítése működni fog, miután engedélyezted a fájlfeltöltést.",
+    "config-no-scaling": "Nem található a GD könyvtár és az ImageMagick.\nA bélyegképek készítése le lesz tiltva.",
+    "config-no-uri": "'''Hiba:''' Nem sikerült megállapítani a jelenlegi URI-t.\nTelepítés megszakítva.",
+    "config-using-server": "A következő szervernév használata: „<nowiki>$1</nowiki>”.",
+    "config-using-uri": "A következő szerver URL-cím használata: „<nowiki>$1$2</nowiki>”.",
+    "config-uploads-not-safe": "'''Figyelmeztetés:''' a feltöltésekhez használt alapértelmezett könyvtárban (<code>$1</code>) tetszőleges külső szkript futtatható.\nHabár a MediaWiki ellenőrzi a feltöltött fájlokat az efféle biztonsági veszélyek megtalálása érdekében, a feltöltés engedélyezése előtt erősen ajánlott a [//www.mediawiki.org/wiki/Manual:Security#Upload_security a sérülékenység megszüntetése].",
+    "config-brokenlibxml": "A rendszereden a PHP és libxml2 verziók olyan kombinációja található meg, ami hibásan működik, és észrevehetetlen adatkárosodást okoz a MediaWikiben és más webalkalmazásokban.\nFrissíts a PHP 5.2.9-es vagy újabb, valamint a libxml2 2.7.3 vgy újabb verziójára ([//bugs.php.net/bug.php?id=45996 A hiba bejelentése a PHP-nél]).\nTelepítés megszakítva.",
+    "config-using531": "A MediaWiki nem használható a PHP $1-es verziójával, mert hiba van a <code>__call()</code> függvénynek átadott referenciaparaméterekkel.\nA probléma kiküszöböléséhez frissíts a PHP 5.3.2-es verziójára, vagy használd a korábbi, 5.3.0-ásat.\nTelepítés megszakítva.",
+    "config-suhosin-max-value-length": "A Suhosin telepítve van, és a GET paraméter hosszát $1 bájtra korlátozza. A MediaWiki erőforrásbetöltő összetevője megkerüli a problémát, de így csökkenni fog a teljesítmény. Ha lehetséges, állítsd be a <code>suhosin.get.max_value_length</code> értékét legalább 1024-re a <code>php.ini</code>ben, és állítsd be a <code>$wgResourceLoaderMaxQueryLength</code> változót ugyanerre az értékre a LocalSettings.php-ben.",
+    "config-db-type": "Adatbázis típusa:",
+    "config-db-host": "Adatbázis hosztneve:",
+    "config-db-host-help": "Ha az adatbázisszerver másik szerveren található, add meg a hosztnevét vagy az IP-címét.\n\nHa megosztott webtárhelyet használsz, a szolgáltató dokumentációjában megtalálható a helyes hosztnév.\n\nHa Windows-alapú szerverre telepítesz, és MySQL-t használsz, a „localhost” nem biztos, hogy működni fog. Ha így van, próbáld meg a „127.0.0.1” helyi IP-cím használatát.",
+    "config-db-host-oracle": "Adatbázis TNS:",
+    "config-db-wiki-settings": "A wiki azonosítása",
+    "config-db-name": "Adatbázisnév:",
+    "config-db-name-help": "Válassz egy nevet a wiki azonosítására.\nNe tartalmazzon szóközt.\n\nHa megosztott webtárhelyet használsz, a szolgáltatód vagy egy konkrét adatbázisnevet ad neked használatra, vagy te magad hozhatsz létre adatbázisokat a vezérlőpulton keresztül.",
+    "config-db-name-oracle": "Adatbázisséma:",
+    "config-db-account-oracle-warn": "Oracle adatbázisba való telepítésnek három támogatott módja van:\n\nHa a telepítési folyamat során adatbázisfiókot szeretnél létrehozni, akkor egy olyan fiókot kell használnod, mely rendelkezik SYSDBA jogosultsággal, majd meg kell adnod a létrehozandó, webes hozzáféréshez használt fiók adatait. Emellett a fiók kézzel is létrehozható, ekkor ennek az adatait kell megadni (a fióknak rendelkeznie kell megfelelő jogosul adatbázis-objektumok létrehozásához), vagy megadhatsz két fiókot: egyet a létrehozáshoz szükséges jogosultságokkal, és egy korlátozottat a webes hozzáféréshez.\n\nA megfelelő jogosultságokkal rendelkező fiók létrehozásához használható szkript a szoftver „maintenance/oracle/” könyvtárában található. Ne feledd, hogy korlátozott fiók használatakor az alapértelmezett fiókkal nem végezhetőek el a karbantartási műveletek.",
+    "config-db-install-account": "A telepítéshez használt felhasználói fiók adatai",
+    "config-db-username": "Felhasználónév:",
+    "config-db-password": "Jelszó:",
+    "config-db-password-empty": "Írd be az új adatbázis-felhasználó jelszavát: $1\nVan lehetőség jelszó nélküli felhasználók létrehozására, azonban ez nem ajánlott.",
+    "config-db-install-username": "Írd be az adatbázisrendszerhez való csatlakozáshoz használt felhasználónevet.\nEz nem a MediaWiki fiók felhasználóneve; ez az adatbázisrendszeren használt felhasználóneved.",
+    "config-db-install-password": "Írd be az adatbázisrendszerhez való csatlakozáshoz használt jelszót.\nEz nem a MediaWiki-fiók jelszava; ez az adatbázisrendszeren használt jelszavad.",
+    "config-db-install-help": "Add meg a felhasználónevet és jelszót, amivel a telepítő csatlakozhat az adatbázishoz.",
+    "config-db-account-lock": "Általános működés során is ezen információk használata",
+    "config-db-wiki-account": "Általános működéshez használt felhasználói adatok",
+    "config-db-wiki-help": "Add meg azt a felhasználónevet és jelszót, amivel a wiki fog csatlakozni az adatbázishoz működés közben.\nHa a fiók nem létezik és a telepítést végző fiók rendelkezik megfelelő jogosultsággal, egy új fiók készül a megadott a névvel, azon minimális jogosultságkörrel, ami a wiki működéséhez szükséges.",
+    "config-db-prefix": "Adatbázistáblák nevének előtagja:",
+    "config-db-prefix-help": "Ha egyetlen adatbázison osztozik több wiki, vagy a MediaWiki és más webalkalmazás, választhatsz egy előtagot a táblaneveknek, hogy megelőzd a konfliktusokat.\nNe használj szóközöket.\n\nA mezőt általában üresen kell hagyni.",
+    "config-db-charset": "Az adatbázis karakterkészlete",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0, bináris",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0, visszafelé kompatibilis UTF-8",
+    "config-charset-help": "'''Figyelmezetés:''' Ha a '''visszafelé kompatibilis UTF-8''' beállítást használod MySQL 4.1 vagy újabb verziók esetén, és utána a <code>mysqldump</code> programmal készítesz róla biztonsági másolatot, az tönkreteheti az összes nem ASCII-karaktert, visszafordíthatatlanul károsítva a másolatokban tárolt adatokat!\n\n'''Bináris''' módban a MediaWiki az UTF-8-ban kódolt szöveget bináris mezőkben tárolja az adatbázisban.\nEz sokkal hatékonyabb a MySQL UTF-8-módjától, és lehetővé teszi, hogy a teljes Unicode-karakterkészletet használd.\n'''UTF-8-módban''' MySQL tudja, hogy milyen karakterkészlettel van kódolva az adat, és megfelelően tárolja és konvertálja, de\nnem használhatod a [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] feletti karaktereket.",
+    "config-mysql-old": "A MySQL $1 vagy újabb verziója szükséges, a rendszeren $2 van.",
+    "config-db-port": "Adatbázisport:",
+    "config-db-schema": "MediaWiki-séma",
+    "config-db-schema-help": "A fenti sémák általában megfelelőek.\nCsak akkor módosíts rajtuk, ha tudod, hogy szükséges.",
+    "config-pg-test-error": "Nem sikerült csatlakozni a(z) '''$1''' adatbázishoz: $2",
+    "config-sqlite-dir": "SQLite-adatkönyvtár:",
+    "config-sqlite-dir-help": "Az SQLite minden adatot egyetlen fájlban tárol.\n\nA megadott könyvtárban írási jogosultsággal kell rendelkeznie a webszervernek.\n\n'''Nem''' szabad elérhetőnek lennie weben keresztül, ezért nem rakjuk oda, ahol a PHP-fájljaid vannak.\n\nA telepítő készít egy <code>.htaccess</code> fájlt az adatbázis mellé, azonban ha valamilyen okból nem sikerül, akkor akárki hozzáférhet a teljes adatbázisodhoz. Ez a felhasználók adatai (e-mail címek, jelszók hashei) mellett a törölt változatokat és más, korlátozott hozzáférésű információkat is tartalmaz.\n\nFontold meg az adatbázis más helyre történő elhelyezését, például a <code>/var/lib/mediawiki/tewikid</code> könyvtárba.",
+    "config-oracle-def-ts": "Alapértelmezett táblatér:",
+    "config-oracle-temp-ts": "Ideiglenes táblatér:",
+    "config-support-info": "A MediaWiki a következő adatbázisrendszereket támogatja:\n\n$1\n\nHa az alábbi listán nem találod azt a rendszert, melyet használni szeretnél, a fenti linken található instrukciókat követve engedélyezheted a támogatását.",
+    "config-support-mysql": "* A $1 a MediaWiki elsődleges célpontja, így a legjobban támogatott ([http://www.php.net/manual/en/mysql.installation.php Hogyan fordítható a PHP MySQL-támogatással])",
+    "config-support-postgres": "* A $1 népszerű, nyílt forráskódú adatbázisrendszer, a MySQL alternatívája ([http://www.php.net/manual/en/pgsql.installation.php Hogyan fordítható a PHP PostgreSQL-támogatással]). Több apró, javítatlan hiba is előfordulhat, így nem ajánlott éles környezetben használni.",
+    "config-support-sqlite": "* Az $1 egy könnyű, nagyon jól támogatott adatbázisrendszer. ([http://www.php.net/manual/en/pdo.installation.php Hogyan fordítható a PHP SQLite-támogatással], PDO-t használ)",
+    "config-support-oracle": "* Az $1 kereskedelmi, vállalati adatbázisrendszer. ([http://www.php.net/manual/en/oci8.installation.php Hogyan fordítható a PHP OCI8-támogatással])",
+    "config-header-mysql": "MySQL-beállítások",
+    "config-header-postgres": "PostgreSQL-beállítások",
+    "config-header-sqlite": "SQLite-beállítások",
+    "config-header-oracle": "Oracle-beállítások",
+    "config-invalid-db-type": "Érvénytelen adatbázistípus",
+    "config-missing-db-name": "Meg kell adnod az „Adatbázisnév” értékét",
+    "config-missing-db-host": "Meg kell adnod az „Adatbázis hosztneve” értékét",
+    "config-missing-db-server-oracle": "Meg kell adnod az „Adatbázis TNS” értékét",
+    "config-invalid-db-server-oracle": "Érvénytelen adatbázis TNS: „$1”\nCsak ASCII betűk (a-z, A-Z), számok (0-9), alulvonás (_) és pont (.) használható.",
+    "config-invalid-db-name": "Érvénytelen adatbázisnév: „$1”.\nCsak ASCII-karakterek (a-z, A-Z), számok (0-9), alulvonás (_) és kötőjel (-) használható.",
+    "config-invalid-db-prefix": "Érvénytelen adatbázisnév-előtag: „$1”.\nCsak ASCII-karakterek (a-z, A-Z), számok (0-9), alulvonás (_) és kötőjel (-) használható.",
+    "config-connection-error": "$1.\n\nEllenőrizd a hosztot, felhasználónevet és jelszót, majd próbáld újra.",
+    "config-invalid-schema": "Érvénytelen MediaWiki-séma: „$1”.\nCsak ASCII-karakterek (a-z, A-Z), számok (0-9) és alulvonás (_) használható.",
+    "config-db-sys-create-oracle": "A telepítő csak a SYSDBA fiókkal tud új felhasználói fiókot létrehozni.",
+    "config-db-sys-user-exists-oracle": "Már létezik „$1” nevű felhasználói fiók. A SYSDBA csak új fiók létrehozására használható!",
+    "config-postgres-old": "A PostgreSQL $1 vagy újabb verziója szükséges, a rendszeren $2 van.",
+    "config-sqlite-name-help": "Válassz egy nevet a wiki azonosítására.\nNe tartalmazzon szóközt vagy kötőjelet.\nEz lesz az SQLite-adatfájl neve.",
+    "config-sqlite-parent-unwritable-group": "Nem hozható létre a(z) <code><nowiki>$1</nowiki></code> adatkönyvtár, mert a szülőkönyvtárba (<code><nowiki>$2</nowiki></code>) nem írhat a webszerver.\n\nA telepítő megállapította, hogy mely felhasználó futtatja a webszervert.\nA folytatáshoz tedd írhatóvá a(z) <code><nowiki>$3</nowiki></code> könyvtárat.\nUnix/Linux rendszeren tedd a következőt:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Nem lehet létrehozni az adatok tárolásához szükséges <code><nowiki>$1</nowiki></code> könyvtárat, mert a webszerver nem írhat a szülőkönyvtárba (<code><nowiki>$2</nowiki></code>).\n\nA telepítő nem tudta megállapíteni, hogy melyik felhasználói fiókon fut a webszerver.\nA folytatáshoz tedd írhatóvá ezen fiók (és más fiókok!) számára a következő könyvtárat: <code><nowiki>$3</nowiki></code>.\nUnix/Linux rendszereken tedd a következőt:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Nem sikerült létrehozni a következő adatkönyvtárat: „$1”.\nEllenőrizd a helyet, majd próbáld újra.",
+    "config-sqlite-dir-unwritable": "Nem sikerült írni a következő könyvtárba: „$1”.\nMódosítsd a jogosultságokat úgy, hogy a webszerver tudjon oda írni, majd próbáld újra.",
+    "config-sqlite-connection-error": "$1.\n\nEllenőrizd az adatkönyvtárat és az adatbázisnevet, majd próbáld újra.",
+    "config-sqlite-readonly": "A következő fájl nem írható: <code>$1</code>.",
+    "config-sqlite-cant-create-db": "Nem sikerült létrehozni a következő adatbázisfájlt: <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "A PHP nem rendelkezik FTS3-támogatással, táblák visszaminősítése",
+    "config-can-upgrade": "Ebben az adatábizban MediaWiki-táblák találhatóak.\nA MediaWiki $1 verzióra történő frissítéséhez kattints a '''Folytatás''' gombra.",
+    "config-upgrade-done": "A frissítés befejeződött.\n\nMost már '''[$1 beléphetsz a wikibe]'''.\n\nHa újra szeretnéd generálni a <code>LocalSettings.php</code> fájlt, kattints az alábbi gombra.\nEz '''nem ajánlott''', csak akkor, ha problémák vannak a wikivel.",
+    "config-upgrade-done-no-regenerate": "A frissítés befejeződött.\n\nMost már '''[$1 beléphetsz a wikibe]'''.",
+    "config-regenerate": "LocalSettings.php elkészítése újra →",
+    "config-show-table-status": "A <code>SHOW TABLE STATUS</code> lekérdezés nem sikerült!",
+    "config-unknown-collation": "'''Figyelmeztetés:''' az adatbázis ismeretlen egybevetést használ.",
+    "config-db-web-account": "A webes hozzáférésnél használt adatbázisfiók",
+    "config-db-web-help": "Add meg azt a felhasználónevet és jelszót, amit a webszerver a wiki általános működése során használ a csatlakozáshoz.",
+    "config-db-web-account-same": "A telepítéshez használt fiók használata",
+    "config-db-web-create": "Fiók létrehozása, ha még nem létezik.",
+    "config-db-web-no-create-privs": "A telepítéshez megadott fiók nem rendelkezik megfelelő jogosultságokkal új felhasználó létrehozásához.\nAz itt megadott fióknak léteznie kell.",
+    "config-mysql-engine": "Tárolómotor:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Figyelmeztetés''': A MyISAM tárolómotort választottad, ami nem ajánlott a MediaWiki használatánál, mert:\n* nagyon rosszul kezeli a párhuzamos lekéréseket a táblák zárolása miatt\n* sokkal nagyobb az esélye az adatkorrupció kialakulásának\n* a MediaWiki kódbázisa nem mindig úgy kezeli a MyISAM-ot, ahogyan kellene\n\nHa a feltelepített MySQL támogatja az InnoDB-t, erősen ajánlott, hogy inkább azt válaszd.\nHa nem, akkor lehet, hogy itt az ideje a frissítésnek.",
+    "config-mysql-engine-help": "A legtöbb esetben az '''InnoDB''' a legjobb választás, mivel megfelelően támogatja a párhuzamosságot.\n\nA '''MyISAM''' gyorsabb megoldás lehet egyfelhasználós vagy csak olvasható környezetekben, azonban a MyISAM-adatbázisok sokkal gyakrabban sérülnek meg, mint az InnoDB-adatbázisok.",
+    "config-mysql-charset": "Adatbázis karakterkészlete:",
+    "config-mysql-binary": "Bináris",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "'''Bináris módban''' a MediaWiki az UTF-8-as szövegeket bináris mezőkben tárolja az adatbázisban.\nEz sokkal hatékonyabb a MySQL UTF-8-as módjánál, és lehetővé teszi a teljes Unicode-karakterkészlet használatát.\n\n'''UTF-8-as módban''' a MySQL tudni fogja,hogy az adatok milyen karakterkészlettel rendelkeznek, és megfelelően átalakítja őket, azonban nem tárolhatóak olyan karakterek, melyek a [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] felett vannak.",
+    "config-site-name": "A wiki neve:",
+    "config-site-name-help": "A böngésző címsorában és még számos más helyen jelenik meg.",
+    "config-site-name-blank": "Add meg az oldal nevét.",
+    "config-project-namespace": "Projektnévtér:",
+    "config-ns-generic": "Projekt",
+    "config-ns-site-name": "Ugyanaz, mint a wiki neve: $1",
+    "config-ns-other": "Más (meg kell adni)",
+    "config-ns-other-default": "SajátWiki",
+    "config-project-namespace-help": "A Wikipédia példáját követve számos wiki elkülöníti egy '''projekt névtérbe''' az irányelveit a tartalommal rendelkező lapoktól\nAz ebben a névtérben található lapok nevei egy előtaggal kezdődnek, amit itt adhatsz meg.\nÁltalában az előtag a wiki nevéből származik, de nem tartalmazhat írásjeleket, például „#”-t vagy „:”-t.",
+    "config-ns-invalid": "A megadott névtér („<nowiki>$1</nowiki>”) érvénytelen.\nVálassz másik projektnévteret!",
+    "config-ns-conflict": "A megadott névtér („<nowiki>$1</nowiki>”) ütközik az egyik alapértelmezett MediaWiki-névtérrel.\nVálassz másik projektnévteret!",
+    "config-admin-box": "Adminisztrátori fiók",
+    "config-admin-name": "Név:",
+    "config-admin-password": "Jelszó:",
+    "config-admin-password-confirm": "Jelszó újra:",
+    "config-admin-help": "Írd be a kívánt felhasználónevet, például „Kovács János”.\nEzzel a névvel fogsz majd bejelentkezni a wikibe.",
+    "config-admin-name-blank": "Add meg az adminisztrátor felhasználónevét!",
+    "config-admin-name-invalid": "A megadott felhasználónév (<nowiki>$1</nowiki>) érvénytelen.\nAdj meg egy másik felhasználónevet.",
+    "config-admin-password-blank": "Add meg az adminisztrátori fiók jelszavát!",
+    "config-admin-password-same": "A jelszó nem lehet ugyanaz, mint a felhasználónév.",
+    "config-admin-password-mismatch": "A megadott jelszavak nem egyeznek.",
+    "config-admin-email": "E-mail cím:",
+    "config-admin-email-help": "Add meg az e-mail címedet, hogy más felhasználók küldhessenek e-maileket a wikin keresztül, új jelszót tudj kérni, és értesülhess a figyelőlistádon lévő lapokon történt változásokról. Üresen is hagyhatod ezt a mezőt.",
+    "config-admin-error-user": "Belső hiba történt a(z) „<nowiki>$1</nowiki>” nevű adminisztrátor létrehozásakor.",
+    "config-admin-error-password": "Belső hiba történt a(z) „<nowiki>$1</nowiki>” nevű adminisztrátor jelszavának beállításakor: <pre>$2</pre>",
+    "config-admin-error-bademail": "Érvénytelen e-mail címet adtál meg.",
+    "config-subscribe": "Feliratkozás a [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce kiadási bejelentések levelezőlistájára].",
+    "config-subscribe-help": "Ez egy alacsony forgalmú levelezőlista, ahol a kiadásokkal kapcsolatos bejelentések jelennek meg, a fontos biztonsági javításokkal együtt.\nAjánlott feliratkozni rá, és frissíteni a MediaWikit, ha új verzió jön ki.",
+    "config-subscribe-noemail": "Anélkül próbáltál feliratkozni a kiadási bejelentések levelezőlistájára, hogy megadtál volna egy e-mail címet.\nAdj meg egyet, ha fel szeretnél iratkozni a levelezőlistára.",
+    "config-almost-done": "Már majdnem kész!\nA további konfigurációt kihagyhatod, és most azonnal elindíthatod a wiki telepítését.",
+    "config-optional-continue": "További információk megadása.",
+    "config-optional-skip": "Épp elég volt, települjön a wiki!",
+    "config-profile": "Felhasználói jogosultságok profilja:",
+    "config-profile-wiki": "Hagyományos wiki",
+    "config-profile-no-anon": "Felhasználói fiók létrehozása szükséges",
+    "config-profile-fishbowl": "Csak engedélyezett szerkesztők",
+    "config-profile-private": "Privát wiki",
+    "config-profile-help": "A wikik akkor működnek a legjobban, ha minél több felhasználó számára engedélyezett a szerkesztés.\nA MediaWikiben könnyű ellenőrizni a legutóbbi változtatásokat,és visszaállítani a naiv vagy káros felhasználók által okozott károkat.\n\nA MediaWiki azonban számos helyzetben hasznos lehet, és néha nem könnyű mindenkit meggyőzni a wiki előnyeiről.\nVálaszthatsz!\n\n'''{{int:config-profile-wiki}}kben''' bárki szerkeszthet, akár bejelentkezés nélkül is. A '''{{int:config-profile-no-anon}}''' beállítás további biztonságot nyújt, azonban elijesztheti az alkalmi szerkesztőket.\n\nLehetőség van arra is, hogy '''{{lc:{{int:config-profile-fishbowl}}}}''' módosíthassák a lapokat, de a nyilvánosság ekkor megtekintheti a lapokat és azok laptörténetét is. '''{{int:config-profile-private}}''' esetén csak az engedélyezett szerkesztők tekinthetik meg a lapokat, és ugyanez a csoport szerkeszthet.\n\nTelepítés után jóval összetettebb jogosultságrendszer állítható össze, további információ a [//www.mediawiki.org/wiki/Manual:User_rights kézikönyv kapcsolódó bejegyzésében].",
+    "config-license": "Szerzői jog és licenc:",
+    "config-license-none": "Nincs licencjelzés",
+    "config-license-cc-by-sa": "Creative Commons Nevezd meg! - Így add tovább!",
+    "config-license-cc-by": "Creative Commons Nevezd meg!",
+    "config-license-cc-by-nc-sa": "Creative Commons Nevezd meg! - Ne add el! - Így add tovább!",
+    "config-license-cc-0": "Creative Commons Zero (közkincs)",
+    "config-license-gfdl": "GNU Szabad Dokumentációs Licenc 1.3 vagy újabb",
+    "config-license-pd": "Közkincs",
+    "config-license-cc-choose": "Creative Commons-licenc választása",
+    "config-license-help": "A legtöbb wiki valamilyen [http://freedomdefined.org/Definition szabad licenc] alatt teszi közzé a szerkesztéseit.\nEz erősíti a közösségi tulajdon érzését, és elősegíti a hosszú távú közreműködők megjelenését.\nÁltalában nem szükséges magán- vagy vállalati wiki esetén.\n\nHa a Wikipédiáról szeretnél szövegeket másolni, és a Wikipédián felhasználhassák a wikidben található szöveget, akkor a '''Creative Commons Nevezd meg! - Így add tovább!''' lehetőséget válaszd.\n\nA Wikipédia korábban a GNU Szabad Dokumentációs Licencet használta.\nEz a licenc még ma is használható, azonban nem könnyű megérteni,\ntovábbá a GFDL alatt közzétett tartalom újrafelhasználása nehézkes.",
+    "config-email-settings": "E-mail beállítások",
+    "config-enable-email": "Kimenő e-mailek engedélyezése",
+    "config-enable-email-help": "E-mailek küldéséhez [http://www.php.net/manual/en/mail.configuration.php a PHP mail beállításait] megfelelően meg kell adni.\nHa nem akarsz semmilyen e-mailes funkciót használni, itt tilthatod le őket.",
+    "config-email-user": "A felhasználók küldhetnek egymásnak e-maileket",
+    "config-email-user-help": "Bármelyik felhasználó küldhet másiknak e-mail üzenetet, amennyiben engedélyezték a lehetőséget a beállításaiknál.",
+    "config-email-usertalk": "Vitalapi értesítések engedélyezése",
+    "config-email-usertalk-help": "A felhasználók értesítéseket kapnak a vitalapjuk változásairól, amennyiben engedélyezték ezt a lehetőséget a beállításaiknál.",
+    "config-email-watchlist": "Figyelőlistai értesítések engedélyezése",
+    "config-email-watchlist-help": "A felhasználók értesítéseket kapnak a figyelt lapjaik változásairól, amennyiben engedélyezték ezt a lehetőséget a beállításaiknál.",
+    "config-email-auth": "E-mailes hitelesítés engedélyezése",
+    "config-email-auth-help": "Ha a beállítás engedélyezve van, a felhasználóknak meg kell erősíteniük az e-mail címüket egy kiküldött link segítségével, amikor megadják vagy módosítják azt.\nCsak a megerősített e-mail címmel rendelkezők kaphatnak e-maileket más felhasználóktól vagy értesítéseket.\nA beállítás engedélyezése '''ajánlott''' publikus wikiknél, mivel így megakadályozható az e-mailes funkciókkal való visszaélés.",
+    "config-email-sender": "Válaszcím:",
+    "config-email-sender-help": "Add meg a kimenő e-mail-üzenetek válaszcímét.\nIde lesznek küldve a visszapattant üzenetek is.\nSzámos levelezőszerver számára a cím domainrészének érvényesnek kell lennie.",
+    "config-upload-settings": "Képek és fájlok feltöltése",
+    "config-upload-enable": "Fájlfeltöltés engedélyezése",
+    "config-upload-help": "A fájlfeltöltés lehetséges biztonsági kockázatoknak teszi ki a szerveredet.\nTovábbi információért olvasd el a [//www.mediawiki.org/wiki/Manual:Security biztonságról szóló szakaszt] a kézikönyvben.\n\nA fájlfeltöltés engedélyezéséhez változtasd meg a MediaWiki gyökérkönyvtárában található <code>images</code> alkönyvtár jogosultságát úgy, hogy a szerver írhasson oda, majd engedélyezd itt a beállítást.",
+    "config-upload-deleted": "Törölt fájlok könyvtára:",
+    "config-upload-deleted-help": "Válaszd ki azt a könyvtárat, ahol a törölt fájlok lesznek archiválva.\nNormális esetben ennek nem szabad elérhetőnek lennie az internetről.",
+    "config-logo": "A logó URL-címe:",
+    "config-logo-help": "A MediaWiki alapértelmezett felülete helyet ad egy 135×160 pixeles logónak a bal felső sarokban.\nTölts fel egy megfelelő méretű képet, majd írd be ide az URL-címét!\n\nHa nem szeretnél logót használni, egyszerűen hagyd üresen a mezőt.",
+    "config-instantcommons": "Instant Commons engedélyezése",
+    "config-instantcommons-help": "Az [//www.mediawiki.org/wiki/InstantCommons Instant Commons] lehetővé teszi, hogy a wikin használhassák a [//commons.wikimedia.org/ Wikimedia Commons] oldalon található képeket, hangokat és más médiafájlokat.\nA használatához a MediaWikinek internethozzáférésre van szüksége.\n\nA funkcióról és hogy hogyan állítható be más wikik esetén [//mediawiki.org/wiki/Manual:$wgForeignFileRepos a kézikönyvben] találhatsz további információkat.",
+    "config-cc-error": "A Creative Commons-licencválasztó nem tért vissza eredménnyel.\nAdd meg kézzel a licencet.",
+    "config-cc-again": "Válassz újra…",
+    "config-cc-not-chosen": "Válaszd ki a kívánt Creative Commons licencet, majd kattints a „Folytatás gombra”!",
+    "config-advanced-settings": "Haladó beállítások",
+    "config-cache-options": "Objektum-gyorsítótárazás beállításai:",
+    "config-cache-help": "Az objektumgyorsítótárazás célja, hogy felgyorsítsa a MediaWiki működését a gyakran használt adatok gyorsítótárazásával.\nKözepes vagy nagyobb oldalak esetén erősen ajánlott a használata, de kisebb oldalak esetén is hasznos lehet.",
+    "config-cache-none": "Nincs gyorsítótárazás (minden funkció működik, de nagyobb wiki esetében lassabb működést eredményezhet)",
+    "config-cache-accel": "PHP-objektumok gyorsítótárazása (APC, XCache or WinCache)",
+    "config-cache-memcached": "Memcached használata (további telepítés és konfigurálás szükséges)",
+    "config-memcached-servers": "Memcached-szerverek:",
+    "config-memcached-help": "Azon IP-címek listája, melyeket a Memcached használhat.\nVesszővel kell elválasztani őket, és meg kell adni a portot is. Például:\n 127.0.0.1:11211\n 192.168.1.25:11211",
+    "config-memcache-needservers": "Memcachedet választottad gyorsítótárnak, de nem adtál meg egyetlen szervert sem.",
+    "config-memcache-badip": "Érvénytelen IP-címet adtál meg a Memcachednek: $1.",
+    "config-memcache-noport": "Nem adtál meg portot a Memcached-szervernek: $1.\nHa nem ismered a portszámot, használd az alapértelmezettet: 11211.",
+    "config-memcache-badport": "A Memcached a(z) $1 és $2 közötti portokat szokta használni.",
+    "config-extensions": "Kiterjesztések",
+    "config-extensions-help": "A fent felsorolt kiterjesztések találhatóak meg az <code>./extensions</code> könyvtárban.\n\nLehetséges, hogy további beállításra lesz szükség hozzájuk, de már most engedélyezheted őket.",
+    "config-install-alreadydone": "'''Figyelmeztetés:''' Úgy tűnik, hogy a MediaWiki telepítve van, és te ismét megpróbálod telepíteni.\nFolytasd a következő oldalon.",
+    "config-install-begin": "A „{{int:config-continue}}” gomb megnyomása elindítja a MediaWiki telepítését.\nHa szeretnél módosítani a beállításokon, kattints a vissza gombra.",
+    "config-install-step-done": "kész",
+    "config-install-step-failed": "sikertelen",
+    "config-install-extensions": "Kiterjesztések beillesztése",
+    "config-install-database": "Adatbázis felállítása",
+    "config-install-schema": "Adatbázis-szerkezet létrehozása",
+    "config-install-pg-schema-not-exist": "A PostgreSQL-adatbázis nem létezik.",
+    "config-install-pg-schema-failed": "A táblák létrehozása nem sikerült.\nEllenőrizd, hogy „$1” felhasználó írhat-e a következő adatbázisba: „$2”.",
+    "config-install-pg-commit": "Változtatások közzététele",
+    "config-install-pg-plpgsql": "PL/pgSQL nyelv meglétének ellenőrzése",
+    "config-pg-no-plpgsql": "Telepítened kell a PL/pgSQL nyelvet a következő adatbázishoz: $1",
+    "config-pg-no-create-privs": "A telepítéshez megadott felhasználói fiók nem rendelkezik új fiók létrehozásához szükséges jogosultságokkal.",
+    "config-install-user": "Adatbázis-felhasználó létrehozása",
+    "config-install-user-alreadyexists": "Már létezik „$1” nevű felhasználó",
+    "config-install-user-create-failed": "Nem sikerült a(z) „$1” nevű felhasználó létrehozása: $2",
+    "config-install-user-grant-failed": "Nem sikerült jogosultságokkal felruházni a(z) „$1” nevű felhasználót: $2",
+    "config-install-user-missing": "A megadott felhasználó („$1”) nem létezik.",
+    "config-install-user-missing-create": "A megadott felhasználó („$1”) nem létezik.\nPipáld ki a „Fiók létrehozása” dobozt, ha létre szeretnéd hozni.",
+    "config-install-tables": "Táblák létrehozása",
+    "config-install-tables-exist": "'''Figyelmeztetés''': úgy tűnik, hogy a MediaWiki táblái már léteznek.\nLétrehozás kihagyása.",
+    "config-install-tables-failed": "'''Hiba''': a tábla létrehozása nem sikerült a következő miatt: $1",
+    "config-install-interwiki": "Alapértelmezett nyelvközihivatkozás-tábla feltöltése",
+    "config-install-interwiki-list": "Az <code>interwiki.list</code> fájl nem található.",
+    "config-install-interwiki-exists": "'''Figyelmeztetés''': Úgy tűnik, hogy az interwiki táblában már vannak bejegyzések.\nAlapértelmezett lista kihagyása.",
+    "config-install-stats": "Statisztika inicializálása",
+    "config-install-keys": "Titkos kulcsok generálása",
+    "config-insecure-keys": "'''Figyelmeztetés:''' A telepítés során generált $1 {{PLURAL:$2|biztonsági kulcs|biztonsági kulcsok}} nem teljesen $1 {{PLURAL:$2|biztonságos|biztonságosak}}. Érdemes {{PLURAL:$2||őket}} manuálisan megváltoztatni.",
+    "config-install-sysop": "Az adminisztrátor felhasználói fiókjának létrehozása",
+    "config-install-subscribe-fail": "Nem sikerült feliratkozni a mediawiki-announce levelezőlistára: $1",
+    "config-install-subscribe-notpossible": "A cURL nincs telepítve és az allow_url_fopen nem érhető el.",
+    "config-install-mainpage": "Kezdőlap létrehozása az alapértelmezett tartalommal",
+    "config-install-extension-tables": "Táblák létrehozása az engedélyezett kiterjesztésekhez",
+    "config-install-mainpage-failed": "Nemsikerült létrehozni a kezdőlapot: $1",
+    "config-install-done": "'''Gratulálunk!'''\nA MediaWiki telepítése sikeresen befejeződött.\n\nA telepítő elkészítette a <code>LocalSettings.php</code> fájlt, amely tartalmazza az összes beállítást.\n\nEzt le kell tölteni, majd elhelyezni a wiki telepítési könyvtárába (az a könyvtár, ahol az index.php is található).\n\nA letöltés automatikusan elindul. Ha mégsem indulna el, vagy megszakítottad, az alábbi linkre kattintva újra letöltheted:\n\n$3\n\n'''Megjegyzés''': Ha ezt most nem teszed meg, és kilépsz a telepítésből, az elkészített konfigurációs fájlt nem tudod elérni a későbbiekben.\n\nHa végeztél a fájl elhelyezésével, '''[$2 beléphetsz a wikibe]'''.",
+    "config-download-localsettings": "<code>LocalSettings.php</code> letöltése",
+    "config-help": "segítség",
+    "mainpagetext": "'''A MediaWiki telepítése sikeresen befejeződött.'''",
+    "mainpagedocfooter": "Ha segítségre van szükséged a wikiszoftver használatához, akkor keresd fel a [//meta.wikimedia.org/wiki/Help:Contents User's Guide] oldalt.\n\n== Alapok (angol nyelven) ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Beállítások listája]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki GyIK]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-kiadások levelezőlistája]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/hy.json b/includes/installer/i18n/hy.json
new file mode 100644 (file)
index 0000000..568c15e
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''«MediaWiki» ծրագիրը հաջողությամբ տեղադրվեց։'''",
+    "mainpagedocfooter": "Այցելեք [//meta.wikimedia.org/wiki/Help:Contents User's Guide]՝ վիքի ծրագրային ապահովման օգտագործման մասին տեղեկությունների համար։\n\n== Որոշ օգտակար ռեսուրսներ ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ia.json b/includes/installer/i18n/ia.json
new file mode 100644 (file)
index 0000000..edb7014
--- /dev/null
@@ -0,0 +1,306 @@
+{
+    "@metadata": {
+        "authors": [
+            "McDutchie",
+            "아라"
+        ]
+    },
+    "config-desc": "Le installator de MediaWiki",
+    "config-title": "Installation de MediaWiki $1",
+    "config-information": "Information",
+    "config-localsettings-upgrade": "Un file <code>LocalSettings.php</code> ha essite detegite.\nPro actualisar iste installation, per favor entra le valor de <code>$wgUpgradeKey</code> in le quadro hic infra.\nIste se trova in <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Un file <code>LocalSettings.php</code> file ha essite detegite.\nPro actualisar iste installation, per favor executa <code>update.php</code>.",
+    "config-localsettings-key": "Clave de actualisation:",
+    "config-localsettings-badkey": "Le clave que tu forniva es incorrecte",
+    "config-upgrade-key-missing": "Un installation existente de MediaWiki ha essite detegite.\nPro actualisar iste installation, es necessari adjunger le sequente linea al fin del file <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "Le file <code>LocalSettings.php</code> existente pare esser incomplete.\nLe variabile $1 non es definite.\nPer favor cambia <code>LocalSettings.php</code> de sorta que iste variabile es definite, e clicca \"{{int:Config-continue}}\".",
+    "config-localsettings-connection-error": "Un error esseva incontrate durante le connexion al base de datos usante le configurationes specificate in <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Per favor repara iste configurationes e tenta lo de novo.\n\n$1",
+    "config-session-error": "Error al comenciamento del session: $1",
+    "config-session-expired": "Le datos de tu session pare haber expirate.\nLe sessiones es configurate pro un duration de $1.\nTu pote augmentar isto per definir <code>session.gc_maxlifetime</code> in php.ini.\nReinitia le processo de installation.",
+    "config-no-session": "Le datos de tu session es perdite!\nVerifica tu php.ini e assecura te que un directorio appropriate es definite in <code>session.save_path</code>.",
+    "config-your-language": "Tu lingua:",
+    "config-your-language-help": "Selige un lingua a usar durante le processo de installation.",
+    "config-wiki-language": "Lingua del wiki:",
+    "config-wiki-language-help": "Selige le lingua in que le wiki essera predominantemente scribite.",
+    "config-back": "← Retro",
+    "config-continue": "Continuar →",
+    "config-page-language": "Lingua",
+    "config-page-welcome": "Benvenite a MediaWiki!",
+    "config-page-dbconnect": "Connecter al base de datos",
+    "config-page-upgrade": "Actualisar le installation existente",
+    "config-page-dbsettings": "Configuration del base de datos",
+    "config-page-name": "Nomine",
+    "config-page-options": "Optiones",
+    "config-page-install": "Installar",
+    "config-page-complete": "Complete!",
+    "config-page-restart": "Reinitiar installation",
+    "config-page-readme": "Lege me",
+    "config-page-releasenotes": "Notas del version",
+    "config-page-copying": "Copiar",
+    "config-page-upgradedoc": "Actualisar",
+    "config-page-existingwiki": "Wiki existente",
+    "config-help-restart": "Vole tu rader tote le datos salveguardate que tu ha entrate e reinitiar le processo de installation?",
+    "config-restart": "Si, reinitia lo",
+    "config-welcome": "=== Verificationes del ambiente ===\nVerificationes de base es exequite pro determinar si iste ambiente es apte pro le installation de MediaWiki.\nTu deberea indicar le resultatos de iste verificationes si tu ha besonio de adjuta durante le installation.",
+    "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nIste programma es software libere; vos pote redistribuer lo e/o modificar lo sub le conditiones del Licentia Public General de GNU publicate per le Free Software Foundation; version 2 del Licentia, o (a vostre option) qualcunque version posterior.\n\nIste programma es distribuite in le sperantia que illo sia utile, ma '''sin garantia''', sin mesmo le implicite garantia de '''commercialisation''' o '''aptitude pro un proposito particular'''.\nVide le Licentia Public General de GNU pro plus detalios.\n\nVos deberea haber recipite <doclink href=Copying>un exemplar del Licentia Public General de GNU</doclink> con iste programma; si non, scribe al Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [http://www.gnu.org/copyleft/gpl.html lege lo in linea].",
+    "config-sidebar": "* [//www.mediawiki.org Pagina principal de MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents Guida pro usatores]\n* [//www.mediawiki.org/wiki/Manual:Contents Guida pro administratores]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Lege me</doclink>\n* <doclink href=ReleaseNotes>Notas de iste version</doclink>\n* <doclink href=Copying>Conditiones de copia</doclink>\n* <doclink href=UpgradeDoc>Actualisation</doclink>",
+    "config-env-good": "Le ambiente ha essite verificate.\nTu pote installar MediaWiki.",
+    "config-env-bad": "Le ambiente ha essite verificate.\nTu non pote installar MediaWiki.",
+    "config-env-php": "PHP $1 es installate.",
+    "config-env-php-toolow": "PHP $1 es installate.\nNonobstante, MediaWiki require PHP $2 o plus recente.",
+    "config-unicode-using-utf8": "utf8_normalize.so per Brion Vibber es usate pro le normalisation Unicode.",
+    "config-unicode-using-intl": "Le [http://pecl.php.net/intl extension PECL intl] es usate pro le normalisation Unicode.",
+    "config-unicode-pure-php-warning": "'''Aviso''': Le [http://pecl.php.net/intl extension PECL intl] non es disponibile pro exequer le normalisation Unicode; le systema recurre al implementation lente in PHP pur.\nSi tu sito ha un alte volumine de traffico, tu deberea informar te un poco super le [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalisation Unicode].",
+    "config-unicode-update-warning": "'''Aviso''': Le version installate del bibliotheca inveloppante pro normalisation Unicode usa un version ancian del bibliotheca del [http://site.icu-project.org/ projecto ICU].\nTu deberea [//www.mediawiki.org/wiki/Unicode_normalization_considerations actualisar lo] si le uso de Unicode importa a te.",
+    "config-no-db": "Non poteva trovar un driver appropriate pro le base de datos! Es necessari installar un driver de base de datos pro PHP.\nLe sequente typos de base de datos es supportate: $1.\n\nSi tu sito usa un servitor dividite (shared hosting), demanda a tu providitor de installar un driver de base de datos appropriate.\nSi tu compilava PHP tu mesme, reconfigura lo con un cliente de base de datos activate, per exemplo usante <code>./configure --with-mysql</code>.\nSi tu installava PHP ex un pacchetto Debian o Ubuntu, tu debe installar equalmente le modulo php5-mysql.",
+    "config-outdated-sqlite": "'''Attention''': tu ha SQLite $1, que es inferior al version minimal requirite, $2. SQLite essera indisponibile.",
+    "config-no-fts3": "'''Attention''': SQLite es compilate sin [//sqlite.org/fts3.html modulo FTS3]; functionalitate de recerca non essera disponibile in iste back-end.",
+    "config-register-globals": "'''Attention: le option <code>[http://php.net/register_globals register_globals]</code> de PHP es activate.'''\n'''Disactiva lo si tu pote.'''\nMediaWiki functionara, ma tu servitor es exponite a potential vulnerabilitates de securitate.",
+    "config-magic-quotes-runtime": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] es active!'''\nIste option corrumpe le entrata de datos imprevisibilemente.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
+    "config-magic-quotes-sybase": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] es active!'''\nIste option corrumpe le entrata de datos imprevisibilemente.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
+    "config-mbstring": "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] es active!'''\nIste option causa errores e pote corrumper datos imprevisibilemente.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
+    "config-ze1": "'''Fatal: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] es active!'''\nIste option causa horribile defectos con MediaWiki.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
+    "config-safe-mode": "'''Aviso:''' Le [http://www.php.net/features.safe-mode modo secur] de PHP es active.\nIsto pote causar problemas, particularmente si es usate le incargamento de files e le supporto de <code>math</code>.",
+    "config-xml-bad": "Le modulo XML de PHP es mancante.\nMediaWiki require functiones de iste modulo e non functionara in iste configuration.\nSi tu usa Mandrake, installa le pacchetto php-xml.",
+    "config-pcre": "Le modulo de supporto PCRE pare esser mancante.\nMediaWiki require le functiones de expression regular compatibile con Perl pro poter functionar.",
+    "config-pcre-no-utf8": "'''Fatal''': Le modulo PCRE de PHP pare haber essite compilate sin supporto de PCRE_UTF8.\nMediaWiki require supporto de UTF-8 pro functionar correctemente.",
+    "config-memory-raised": "Le <code>memory_limit</code> de PHP es $1, elevate a $2.",
+    "config-memory-bad": "'''Aviso:''' Le <code>memory_limit</code> de PHP es $1.\nIsto es probabilemente troppo basse.\nLe installation pote faller!",
+    "config-ctype": "'''Fatal''': PHP debe esser compilate con supporto pro le [http://www.php.net/manual/en/ctype.installation.php extension Ctype].",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] es installate",
+    "config-apc": "[http://www.php.net/apc APC] es installate",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] es installate",
+    "config-no-cache": "'''Aviso:''' Non poteva trovar [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].\nLe cache de objectos non es activate.",
+    "config-mod-security": "'''Attention''': [http://modsecurity.org/ mod_security] es active in tu servitor web. Si mal configurate, isto pote causar problemas pro MediaWiki o altere software que permitte al usatores de publicar contento arbitrari.\nConsulta le [http://modsecurity.org/documentation/ documentation de mod_security] o contacta le servicio de adjuta de tu host si tu incontra estranie errores.",
+    "config-diff3-bad": "GNU diff3 non trovate.",
+    "config-imagemagick": "ImageMagick trovate: <code>$1</code>.\nLe miniaturas de imagines essera activate si tu activa le incargamento de files.",
+    "config-gd": "Le bibliotheca graphic GD se trova integrate in le systema.\nLe miniaturas de imagines essera activate si tu activa le incargamento de files.",
+    "config-no-scaling": "Non poteva trovar le bibliotheca GD ni ImageMagick.\nLe miniaturas de imagines essera disactivate.",
+    "config-no-uri": "'''Error:''' Non poteva determinar le URI actual.\nInstallation abortate.",
+    "config-no-cli-uri": "'''Attention''': Cammino al script (--scriptpath) non specificate. Le predefinition es usate: <code>$1</code>.",
+    "config-using-server": "Es usate le nomine de servitor \"<nowiki>$1</nowiki>\".",
+    "config-using-uri": "Le URL de servitor \"<nowiki>$1$2</nowiki>\" es usate.",
+    "config-uploads-not-safe": "'''Aviso:''' Le directorio predefinite pro files incargate <code>$1</code> es vulnerabile al execution arbitrari de scripts.\nBen que MediaWiki verifica tote le files incargate contra le menacias de securitate, il es altemente recommendate [//www.mediawiki.org/wiki/Manual:Security#Upload_security remediar iste vulnerabilitate de securitate] ante de activar le incargamento de files.",
+    "config-no-cli-uploads-check": "'''Attention:''' Le directorio predefinite pro files incargate (<code>$1</code>) non es verificate contra le vulnerabilitate\nal execution arbitrari de scripts durante le installation de CLI.",
+    "config-brokenlibxml": "Vostre systema ha un combination de versiones de PHP e libxml2 que es defectuose e pote causar corruption celate de datos in MediaWiki e altere applicationes web.\nActualisa a PHP 5.2.9 o plus recente e libxml2 2.7.3 o plus recente ([//bugs.php.net/bug.php?id=45996 problema reportate presso PHP]).\nInstallation abortate.",
+    "config-using531": "MediaWiki non pote esser usate con PHP $1 a causa de un defecto concernente parametros de referentia a <code>__call()</code>.\nActualisa a PHP 5.3.2 o plus recente, o retrograda a PHP 5.3.0 pro remediar isto.\nInstallation abortate.",
+    "config-suhosin-max-value-length": "Suhosin es installate e limita parametro <code>length</code> de GET a $1 bytes.\nLe componente ResourceLoader de MediaWiki va contornar iste limite, ma isto prejudicara le rendimento.\nSi possibile, tu deberea mitter <code>suhosin.get.max_value_length</code> a 1024 o superior in <code>php.ini</code>, e mitter <code>$wgResourceLoaderMaxQueryLength</code> al mesme valor in <code>LocalSettings.php</code>.",
+    "config-db-type": "Typo de base de datos:",
+    "config-db-host": "Servitor de base de datos:",
+    "config-db-host-help": "Si tu servitor de base de datos es in un altere servitor, entra hic le nomine o adresse IP del servitor.\n\nSi tu usa un servitor web usate in commun, tu providitor deberea dar te le correcte nomine de servitor in su documentation.\n\nSi tu face le installation in un servitor Windows e usa MySQL, le nomine \"localhost\" possibilemente non functiona como nomine de servitor. In tal caso, essaya \"127.0.0.1\", i.e. le adresse IP local.\n\nSi tu usa PostgreSQL, lassa iste campo vacue pro connecter via un \"socket\" de Unix.",
+    "config-db-host-oracle": "TNS del base de datos:",
+    "config-db-host-oracle-help": "Entra un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nomine Local Connect] valide; un file tnsnames.ora debe esser visibile a iste installation.<br />Si tu usa bibliothecas de cliente 10g o plus recente, tu pote anque usar le methodo de nomination [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+    "config-db-wiki-settings": "Identificar iste wiki",
+    "config-db-name": "Nomine del base de datos:",
+    "config-db-name-help": "Selige un nomine que identifica tu wiki.\nIllo non pote continer spatios.\n\nSi tu usa un servitor web usate in commun, tu providitor te fornira le nomine specific de un base de datos a usar, o te permitte crear un base de datos via un pannello de controlo.",
+    "config-db-name-oracle": "Schema del base de datos:",
+    "config-db-account-oracle-warn": "Il ha tres scenarios supportate pro le installation de Oracle como le base de datos de iste systema:\n\nSi tu vole crear un conto del base de datos como parte del processo de installation, per favor specifica un conto con le rolo SYSDBA como le conto del base de datos pro installation, e specifica le nomine e contrasigno desirate pro le conto de accesso per web. Alteremente tu pote crear le conto de accesso per web manualmente e specificar solmente iste conto (si illo ha le permissiones requisite pro crear le objectos de schema) o specifica duo contos differente, un con privilegios de creation e un conto restringite pro accesso per web.\n\nUn script pro crear un conto con le privilegios requisite se trova in le directorio \"maintenance/oracle/\" de iste installation. Non oblida que le uso de un conto restringite disactiva tote le capacitates de mantenentia in le conto predefinite.",
+    "config-db-install-account": "Conto de usator pro installation",
+    "config-db-username": "Nomine de usator del base de datos:",
+    "config-db-password": "Contrasigno del base de datos:",
+    "config-db-password-empty": "Per favor entra un contrasigno pro le nove usator del base de datos: $1.\nBen que il es possibile crear usatores sin contrasigno, isto non es secur.",
+    "config-db-install-username": "Entra le nomine de usator que essera usate pro connecter al base de datos durante le processo de installation. Isto non es le nomine de usator del conto MediaWiki; isto es le nomine de usator pro tu base de datos.",
+    "config-db-install-password": "Entra le contrasigno que essera usate pro connecter al base de datos durante le processo de installation. Isto non es le contrasigno del conto MediaWiki; isto es le contrasigno pro tu base de datos.",
+    "config-db-install-help": "Entra le nomine de usator e contrasigno que essera usate pro connecter al base de datos durante le processo de installation.",
+    "config-db-account-lock": "Usar le mesme nomine de usator e contrasigno durante le operation normal",
+    "config-db-wiki-account": "Conto de usator pro operation normal",
+    "config-db-wiki-help": "Entra le nomine de usator e contrasigno que essera usate pro connecter al base de datos durante le operation normal del wiki.\nSi le conto non existe, e si le conto de installation possede sufficiente privilegios, iste conto de usator essera create con le minime privilegios necessari pro operar le wiki.",
+    "config-db-prefix": "Prefixo de tabella del base de datos:",
+    "config-db-prefix-help": "Si il es necessari usar un base de datos in commun inter multiple wikis, o inter MediaWiki e un altere application web, tu pote optar pro adder un prefixo a tote le nomines de tabella pro evitar conflictos.\nNon usa spatios.\n\nIste campo usualmente resta vacue.",
+    "config-db-charset": "Codification de characteres in le base de datos",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binari",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 retrocompatibile UTF-8",
+    "config-charset-help": "'''Aviso:''' Si tu usa '''UTF-8 retrocompatibile''' sur MySQL 4.1+, e postea face un copia de reserva del base de datos con <code>mysqldump</code>, tote le characteres non ASCII pote esser destruite, resultante in corruption irreversibile de tu copias de reserva!\n\nIn '''modo binari''', MediaWiki immagazina texto in UTF-8 in le base de datos in campos binari.\nIsto es plus efficiente que le modo UTF-8 de MySQL, e permitte usar le rango complete de characteres de Unicode.\nIn '''modo UTF-8''', MySQL sapera in qual codification de characteres tu datos es, e pote presentar e converter lo appropriatemente,\nma non te permittera immagazinar characteres supra le [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Basic].",
+    "config-mysql-old": "MySQL $1 o plus recente es requirite, tu ha $2.",
+    "config-db-port": "Porto de base de datos:",
+    "config-db-schema": "Schema pro MediaWiki",
+    "config-db-schema-help": "Iste schema es generalmente correcte.\nSolmente cambia lo si tu es secur que es necessari.",
+    "config-pg-test-error": "Impossibile connecter al base de datos '''$1''': $2",
+    "config-sqlite-dir": "Directorio pro le datos de SQLite:",
+    "config-sqlite-dir-help": "SQLite immagazina tote le datos in un sol file.\n\nLe directorio que tu forni debe permitter le accesso de scriptura al servitor web durante le installation.\n\nIllo '''non''' debe esser accessibile via web. Pro isto, nos non lo pone ubi tu files PHP es.\n\nLe installator scribera un file <code>.htaccess</code> insimul a illo, ma si isto falli, alcuno pote ganiar accesso directe a tu base de datos.\nIsto include le crude datos de usator (adresses de e-mail, contrasignos codificate) assi como versiones delite e altere datos restringite super le wiki.\n\nConsidera poner le base de datos in un loco completemente differente, per exemplo in <code>/var/lib/mediawiki/yourwiki</code>.",
+    "config-oracle-def-ts": "Spatio de tabellas predefinite:",
+    "config-oracle-temp-ts": "Spatio de tabellas temporari:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "MediaWiki supporta le sequente systemas de base de datos:\n\n$1\n\nSi tu non vide hic infra le systema de base de datos que tu tenta usar, alora seque le instructiones ligate hic supra pro activar le supporto.",
+    "config-support-mysql": "* $1 es le systema primari pro MediaWiki e le melio supportate ([http://www.php.net/manual/en/mysql.installation.php como compilar PHP con supporto de MySQL])",
+    "config-support-postgres": "* $1 es un systema de base de datos popular e open source, alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php como compilar PHP con supporto de PostgreSQL]). Es possibile que resta alcun minor defectos non resolvite, dunque illo non es recommendate pro uso in un ambiente de production.",
+    "config-support-sqlite": "* $1 es un systema de base de datos legier que es multo ben supportate. ([http://www.php.net/manual/en/pdo.installation.php Como compilar PHP con supporto de SQLite], usa PDO)",
+    "config-support-oracle": "* $1 es un banca de datos commercial pro interprisas. ([http://www.php.net/manual/en/oci8.installation.php Como compilar PHP con supporto de OCI8])",
+    "config-header-mysql": "Configuration de MySQL",
+    "config-header-postgres": "Configuration de PostgreSQL",
+    "config-header-sqlite": "Configuration de SQLite",
+    "config-header-oracle": "Configuration de Oracle",
+    "config-invalid-db-type": "Typo de base de datos invalide",
+    "config-missing-db-name": "Tu debe entrar un valor pro \"Nomine de base de datos\"",
+    "config-missing-db-host": "Tu debe entrar un valor pro \"Host del base de datos\"",
+    "config-missing-db-server-oracle": "You must enter a value for \"TNS del base de datos\"",
+    "config-invalid-db-server-oracle": "TNS de base de datos \"$1\" invalide.\nUsa o \"TNS Name\" o un catena \"Easy Connect\". ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Methodos de nomenclatura de Oracle])",
+    "config-invalid-db-name": "Nomine de base de datos \"$1\" invalide.\nUsa solmente litteras ASCII (a-z, A-Z), numeros (0-9), characteres de sublineamento (_) e tractos de union (-).",
+    "config-invalid-db-prefix": "Prefixo de base de datos \"$1\" invalide.\nUsa solmente litteras ASCII (a-z, A-Z), numeros (0-9), characteres de sublineamento (_) e tractos de union (-).",
+    "config-connection-error": "$1.\n\nVerifica le servitor, nomine de usator e contrasigno hic infra e reproba.",
+    "config-invalid-schema": "Schema invalide pro MediaWiki \"$1\".\nUsa solmente litteras ASCII (a-z, A-Z), numeros (0-9) e characteres de sublineamento (_).",
+    "config-db-sys-create-oracle": "Le installator supporta solmente le uso de un conto SYSDBA pro le creation de un nove conto.",
+    "config-db-sys-user-exists-oracle": "Le conto de usator \"$1\" ja existe. SYSDBA pote solmente esser usate pro le creation de un nove conto!",
+    "config-postgres-old": "PostgreSQL $1 o plus recente es requirite, tu ha $2.",
+    "config-sqlite-name-help": "Selige un nomine que identifica tu wiki.\nNon usar spatios o tractos de union.\nIsto essera usate pro le nomine del file de datos de SQLite.",
+    "config-sqlite-parent-unwritable-group": "Impossibile crear le directorio de datos <code><nowiki>$1</nowiki></code>, proque le directorio superjacente <code><nowiki>$2</nowiki></code> non concede le accesso de scriptura al servitor web.\n\nLe installator ha determinate le usator sub que le servitor web es executate.\nConcede le accesso de scriptura in le directorio <code><nowiki>$3</nowiki></code> a iste usator pro continuar.\nIn un systema Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Impossibile crear le directorio de datos <code><nowiki>$1</nowiki></code>, proque le directorio superjacente <code><nowiki>$2</nowiki></code> non concede le accesso de scriptura al servitor web.\n\nLe installator non poteva determinar le usator sub que le servitor web es executate.\nConcede le accesso de scriptura in le directorio <code><nowiki>$3</nowiki></code> a iste usator (e alteres!) pro continuar.\nIn un systema Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Error al creation del directorio de datos \"$1\".\nVerifica le loco e reproba.",
+    "config-sqlite-dir-unwritable": "Impossibile scriber in le directorio \"$1\".\nCambia su permissiones de sorta que le servitor web pote scriber in illo, e reproba.",
+    "config-sqlite-connection-error": "$1.\n\nVerifica le directorio de datos e le nomine de base de datos hic infra e reproba.",
+    "config-sqlite-readonly": "Le file <code>$1</code> non es accessibile pro scriptura.",
+    "config-sqlite-cant-create-db": "Non poteva crear le file de base de datos <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "PHP non ha supporto pro FTS3. Le tabellas es retrogradate.",
+    "config-can-upgrade": "Il ha tabellas MediaWiki in iste base de datos.\nPro actualisar los a MediaWiki $1, clicca super '''Continuar'''.",
+    "config-upgrade-done": "Actualisation complete.\n\nTu pote ora [$1 comenciar a usar tu wiki].\n\nSi tu vole regenerar tu file <code>LocalSettings.php</code>, clicca super le button hic infra.\nIsto '''non es recommendate''' si tu non ha problemas con tu wiki.",
+    "config-upgrade-done-no-regenerate": "Actualisation complete.\n\nTu pote ora [$1 comenciar a usar tu wiki].",
+    "config-regenerate": "Regenerar LocalSettings.php →",
+    "config-show-table-status": "Le consulta <code>SHOW TABLE STATUS</code> falleva!",
+    "config-unknown-collation": "'''Aviso:''' Le base de datos usa un collation non recognoscite.",
+    "config-db-web-account": "Conto de base de datos pro accesso via web",
+    "config-db-web-help": "Selige le nomine de usator e contrasigno que le servitor web usara pro connecter al servitor de base de datos, durante le operation ordinari del wiki.",
+    "config-db-web-account-same": "Usar le mesme conto que pro le installation",
+    "config-db-web-create": "Crear le conto si illo non jam existe",
+    "config-db-web-no-create-privs": "Le conto que tu specificava pro installation non ha sufficiente privilegios pro crear un conto.\nLe conto que tu specifica hic debe jam exister.",
+    "config-mysql-engine": "Motor de immagazinage:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "* '''Attention:''' Tu ha seligite MyISAM como motor de immagazinage pro MySQL, lo que non es recommendate pro uso con MediaWiki, perque:\n* illo a pena supporta le processamento simultanee a causa del blocada le tabulas\n* illo es plus susceptibile al corruption que altere motores\n* le base de codice de MediaWiki non sempre manea MyISAM como illo deberea\n\nSi tu installation de MySQL supporta InnoDB, es multo recommendate que tu selige iste in su loco.\nSi tu installation de MySQL non supporta InnoDB, forsan isto es un bon occasion pro actualisar lo.",
+    "config-mysql-engine-help": "'''InnoDB''' es quasi sempre le melior option, post que illo ha bon supporto pro simultaneitate.\n\n'''MyISAM''' pote esser plus rapide in installationes a usator singule o a lectura solmente.\nLe bases de datos MyISAM tende a esser corrumpite plus frequentemente que le base de datos InnoDB.",
+    "config-mysql-charset": "Codification de characteres in le base de datos:",
+    "config-mysql-binary": "Binari",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "In '''modo binari''', MediaWiki immagazina le texto UTF-8 in le base de datos in campos binari.\nIsto es plus efficiente que le modo UTF-8 de MySQL, e permitte usar le rango complete de characteres Unicode.\n\nIn '''modo UTF-8''', MySQL cognoscera le codification de characteres usate pro tu dats, e pote presentar e converter lo appropriatemente, ma illo non permittera immagazinar characteres supra le [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Basic].",
+    "config-site-name": "Nomine del wiki:",
+    "config-site-name-help": "Isto apparera in le barra de titulo del navigator e in varie altere locos.",
+    "config-site-name-blank": "Entra un nomine de sito.",
+    "config-project-namespace": "Spatio de nomines del projecto:",
+    "config-ns-generic": "Projecto",
+    "config-ns-site-name": "Mesme nomine que le wiki: $1",
+    "config-ns-other": "Altere (specifica)",
+    "config-ns-other-default": "MiWiki",
+    "config-project-namespace-help": "Sequente le exemplo de Wikipedia, multe wikis tene lor paginas de politica separate de lor paginas de contento, in un \"'''spatio de nomines de projecto'''\".\nTote le titulos de pagina in iste spatio de nomines comencia con un certe prefixo, le qual tu pote specificar hic.\nTraditionalmente, iste prefixo deriva del nomine del wiki, ma illo non pote continer characteres de punctuation como \"#\" o \":\".",
+    "config-ns-invalid": "Le spatio de nomines specificate \"<nowiki>$1</nowiki>\" es invalide.\nSpecifica un altere spatio de nomines de projecto.",
+    "config-ns-conflict": "Le spatio de nomines specificate \"<nowiki>$1</nowiki>\" conflige con un spatio de nomines predefinite de MediaWiki.\nSpecifica un altere spatio de nomines pro le projecto.",
+    "config-admin-box": "Conto de administrator",
+    "config-admin-name": "Tu nomine:",
+    "config-admin-password": "Contrasigno:",
+    "config-admin-password-confirm": "Repete contrasigno:",
+    "config-admin-help": "Entra hic tu nomine de usator preferite, per exemplo \"Julio Cesare\".\nIsto es le nomine que tu usara pro aperir session in le wiki.",
+    "config-admin-name-blank": "Entra un nomine de usator pro administrator.",
+    "config-admin-name-invalid": "Le nomine de usator specificate \"<nowiki>$1</nowiki>\" es invalide.\nSpecifica un altere nomine de usator.",
+    "config-admin-password-blank": "Entra un contrasigno pro le conto de administrator.",
+    "config-admin-password-same": "Le contrasigno non pote esser le mesme que le nomine de usator.",
+    "config-admin-password-mismatch": "Le duo contrasignos que tu scribeva non es identic.",
+    "config-admin-email": "Adresse de e-mail:",
+    "config-admin-email-help": "Entra un adresse de e-mail hic pro permitter le reception de e-mail ab altere usatores del wiki, pro poter reinitialisar tu contrasigno, e pro reciper notification de cambios a paginas in tu observatorio. Iste campo pote esser lassate vacue.",
+    "config-admin-error-user": "Error interne durante le creation de un administrator con le nomine \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Error interne durante le definition de un contrasigno pro le administrator \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+    "config-admin-error-bademail": "Tu ha entrate un adresse de e-mail invalide",
+    "config-subscribe": "Subscribe al [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista de diffusion pro annuncios de nove versiones].",
+    "config-subscribe-help": "Isto es un lista de e-mail a basse volumine pro annuncios de nove versiones, includente importante annuncios de securitate.\nTu deberea subscriber a illo e actualisar tu installation de MediaWiki quando nove versiones es editate.",
+    "config-subscribe-noemail": "Tu tentava abonar te al lista de diffusion pro annunciamento de nove versiones sin fornir un adresse de e-mail.\nPer favor specifica un adresse de e-mail si tu vole abonar te al lista de diffusion.",
+    "config-almost-done": "Tu ha quasi finite!\nTu pote ora saltar le configuration remanente e installar le wiki immediatemente.",
+    "config-optional-continue": "Pone me plus questiones.",
+    "config-optional-skip": "Isto me es jam tediose. Simplemente installa le wiki.",
+    "config-profile": "Profilo de derectos de usator:",
+    "config-profile-wiki": "Wiki aperte",
+    "config-profile-no-anon": "Creation de conto obligatori",
+    "config-profile-fishbowl": "Modificatores autorisate solmente",
+    "config-profile-private": "Wiki private",
+    "config-profile-help": "Le wikis functiona melio si tu permitte a tante personas como possibile de modificar los.\nIn MediaWiki, il es facile revider le modificationes recente, e reverter omne damno facite per usatores naive o malitiose.\n\nNonobstante, multes ha trovate MediaWiki utile in un grande varietate de rolos, e alcun vices il non es facile convincer omnes del beneficios del principio wiki.\nDunque, a te le option.\n\nLe modello '''{{int:config-profile-wiki}}''' permitte a omnes de modificar, sin mesmo aperir un session.\nUn wiki con '''{{int:config-profile-no-anon}}''' attribue additional responsabilitate, ma pote dissuader contributores occasional.\n\nLe scenario '''{{int:config-profile-fishbowl}}''' permitte al usatores approbate de modificar, ma le publico pote vider le paginas, includente lor historia.\nUn '''{{int:config-profile-private}}''' permitte solmente al usatores approbate de vider le paginas e de modificar los.\n\nConfigurationes de derectos de usator plus complexe es disponibile post installation, vide le [//www.mediawiki.org/wiki/Manual:User_rights pertinente section del manual].",
+    "config-license": "Copyright e licentia:",
+    "config-license-none": "Nulle licentia in pede de paginas",
+    "config-license-cc-by-sa": "Creative Commons Attribution Share Alike",
+    "config-license-cc-by": "Creative Commons Attribution",
+    "config-license-cc-by-nc-sa": "Creative Commons Attribution Non-Commercial Share Alike",
+    "config-license-cc-0": "Creative Commons Zero (dominio public)",
+    "config-license-gfdl": "Licentia GNU pro Documentation Libere 1.3 o plus recente",
+    "config-license-pd": "Dominio public",
+    "config-license-cc-choose": "Seliger un licentia Creative Commons personalisate",
+    "config-license-help": "Multe wikis public pone tote le contributiones sub un [http://freedomdefined.org/Definition/Ia?uselang=ia licentia libere].\nIsto adjuta a crear un senso de proprietate communitari e incoragia le contribution in longe termino.\nIsto non es generalmente necessari pro un wiki private o de interprisa.\n\nSi tu vole poter usar texto de Wikipedia, e si tu vole que Wikipedia pote acceptar texto copiate de tu wiki, tu debe seliger '''Creative Commons Attribution Share Alike'''.\n\nWikipedia usava anteriormente le Licentia GNU pro Documentation Libere (GFDL).\nIste es un licentia valide, ma es difficile a comprender.\nIl es anque difficile reusar le contento licentiate sub GFDL.",
+    "config-email-settings": "Configuration de e-mail",
+    "config-enable-email": "Activar le e-mail sortiente",
+    "config-enable-email-help": "Si tu vole que e-mail functiona, [http://www.php.net/manual/en/mail.configuration.php le optiones de e-mail de PHP] debe esser configurate correctemente.\nSi tu non vole functiones de e-mail, tu pote disactivar los hic.",
+    "config-email-user": "Activar le e-mail de usator a usator",
+    "config-email-user-help": "Permitter a tote le usatores de inviar e-mail inter se, si illes lo ha activate in lor preferentias.",
+    "config-email-usertalk": "Activar notification de cambios in paginas de discussion de usatores",
+    "config-email-usertalk-help": "Permitter al usatores de reciper notification de modificationes in lor paginas de discussion personal, si illes lo ha activate in lor preferentias.",
+    "config-email-watchlist": "Activar notification de observatorio",
+    "config-email-watchlist-help": "Permitter al usatores de reciper notification super lor paginas sub observation, si illes lo ha activate in lor preferentias.",
+    "config-email-auth": "Activar authentication de e-mail",
+    "config-email-auth-help": "Si iste option es activate, le usatores debe confirmar lor adresse de e-mail usante un ligamine inviate a illes, quandocunque illes lo defini o cambia.\nSolmente le adresses de e-mail authenticate pote reciper e-mail de altere usatores o alterar le e-mails de notification.\nEs '''recommendate''' activar iste option pro wikis public a causa de abuso potential del functionalitate de e-mail.",
+    "config-email-sender": "Adresse de e-mail de retorno:",
+    "config-email-sender-help": "Entra le adresse de e-mail a usar como adresse de retorno in e-mail sortiente.\nHic es recipite le notificationes de non-livration.\nMulte servitores de e-mail require que al minus le parte de nomine de dominio sia valide.",
+    "config-upload-settings": "Incargamento de imagines e files",
+    "config-upload-enable": "Activar le incargamento de files",
+    "config-upload-help": "Le incargamento de files potentialmente expone tu servitor a riscos de securitate.\nPro plus information, lege le [//www.mediawiki.org/wiki/Manual:Security section de securitate] in le manual.\n\nPro activar le incargamento de files, cambia le modo in le subdirectorio <code>images</code> sub le directorio-radice de MediaWiki de sorta que le servitor web pote scriber in illo.\nPostea activa iste option.",
+    "config-upload-deleted": "Directorio pro files delite:",
+    "config-upload-deleted-help": "Selige un directorio in le qual archivar le files delite.\nIdealmente, isto non debe esser accessibile ab le web.",
+    "config-logo": "URL del logotypo:",
+    "config-logo-help": "Le apparentia predefinite de MediaWiki include spatio pro un logotypo de 135×160 pixels supra le menu del barra lateral.\nIncarga un imagine con le dimensiones appropriate, e entra le URL hic.\n\nTu pote usar <code>$wgStylePath</code> o <code>$wgScriptPath</code> si le loco de tu logotypo es relative a iste camminos.\n\nSi tu non vole un logotypo, lassa iste quadro vacue.",
+    "config-instantcommons": "Activar \"Instant Commons\"",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] es un function que permitte a wikis de usar imagines, sonos e altere multimedia trovate in le sito [//commons.wikimedia.org/ Wikimedia Commons].\nPro poter facer isto, MediaWiki require accesso a Internet.\n\nPro plus information super iste function, includente instructiones super como configurar lo pro wikis altere que Wikimedia Commons, consulta [//mediawiki.org/wiki/Manual:$wgForeignFileRepos le manual].",
+    "config-cc-error": "Le selector de licentia Creative Commons non dava un resultato.\nEntra le nomine del licentia manualmente.",
+    "config-cc-again": "Selige de novo…",
+    "config-cc-not-chosen": "Selige le licentia Creative Commons que tu prefere e clicca \"proceder\".",
+    "config-advanced-settings": "Configuration avantiate",
+    "config-cache-options": "Configuration del cache de objectos:",
+    "config-cache-help": "Le cache de objectos es usate pro meliorar le rapiditate de MediaWiki per immagazinar le datos frequentemente usate.\nLe sitos medie o grande es multo incoragiate de activar isto, ma anque le sitos parve percipera le beneficios.",
+    "config-cache-none": "Nulle cache (nulle functionalitate es removite, ma le rapiditate pote diminuer in grande sitos wiki)",
+    "config-cache-accel": "Cache de objectos de PHP (APC, XCache o WinCache)",
+    "config-cache-memcached": "Usar Memcached (require additional installation e configuration)",
+    "config-memcached-servers": "Servitores Memcached:",
+    "config-memcached-help": "Lista de adresses IP a usar pro Memcached.\nDebe specificar un per linea e specificar le porto a usar. Per exemplo:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "Tu seligeva Memcached como typo de cache ma non specificava alcun servitores",
+    "config-memcache-badip": "Tu ha entrate un adresse IP invalide pro Memcached: $1",
+    "config-memcache-noport": "Tu non specificava un porto a usar pro le servitor Memcached: $1.\nSi tu non cognosce le porto, le standard es 11211",
+    "config-memcache-badport": "Le numeros de porto de Memcached debe esser inter $1 e $2",
+    "config-extensions": "Extensiones",
+    "config-extensions-help": "Le extensiones listate hic supra esseva detegite in tu directorio <code>./extensions</code>.\n\nIstes pote requirer additional configuration, ma tu pote activar los ora.",
+    "config-install-alreadydone": "'''Aviso:''' Il pare que tu ha jam installate MediaWiki e tenta installar lo de novo.\nPer favor continua al proxime pagina.",
+    "config-install-begin": "Un clic sur \"{{int:config-continue}}\" comencia le installation de MediaWiki.\nPro facer alterationes, clicca sur \"{{int:config-back}}\".",
+    "config-install-step-done": "finite",
+    "config-install-step-failed": "fallite",
+    "config-install-extensions": "Include le extensiones",
+    "config-install-database": "Configura le base de datos",
+    "config-install-schema": "Creation de schema",
+    "config-install-pg-schema-not-exist": "Iste schema de PostgreSQL non existe",
+    "config-install-pg-schema-failed": "Le creation del tabellas falleva.\nAssecura te que le usator \"$1\" pote scriber in le schema \"$2\".",
+    "config-install-pg-commit": "Committer cambiamentos",
+    "config-install-pg-plpgsql": "Verifica le presentia del linguage PL/pgSQL",
+    "config-pg-no-plpgsql": "Es necessari installar le linguage PL/pgSQL in le base de datos $1",
+    "config-pg-no-create-privs": "Le conto que tu specificava pro installation non ha sufficiente privilegios pro crear un conto.",
+    "config-pg-not-in-role": "Le conto que tu specificava pro le usator web ja existe.\nLe conto que tu specificava pro installation non es superusator e non es membro del rolo de usator web, dunque es incapace de crear objectos possedite per le usator web.\n\nMediaWiki require actualmente que le tabellas sia possedite per le usator web. Per favor specifica un altere nomine de conto web, o clicca super \"retornar\" e specifica un usator de installation con sufficiente privilegios.",
+    "config-install-user": "Crea usator pro base de datos",
+    "config-install-user-alreadyexists": "Le usator \"$1\" ja existe",
+    "config-install-user-create-failed": "Le creation del usator \"$1\" ha fallite: $2",
+    "config-install-user-grant-failed": "Le concession de permission al usator \"$1\" falleva: $2",
+    "config-install-user-missing": "Le usator specificate, \"$1\", non existe.",
+    "config-install-user-missing-create": "Le usator specificate, \"$1\", non existe.\nPer favor marca le quadrato \"crear conto\" hic infra si tu vole crear lo.",
+    "config-install-tables": "Crea tabellas",
+    "config-install-tables-exist": "'''Aviso''': Il pare que le tabellas de MediaWiki jam existe.\nLe creation es saltate.",
+    "config-install-tables-failed": "'''Error''': Le creation del tabellas falleva con le sequente error: $1",
+    "config-install-interwiki": "Plena le tabella interwiki predefinite",
+    "config-install-interwiki-list": "Non poteva trovar le file <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "'''Aviso''': Le tabella interwiki pare jam haber entratas.\nLe lista predefinite es saltate.",
+    "config-install-stats": "Initialisation del statisticas",
+    "config-install-keys": "Generation de claves secrete",
+    "config-insecure-keys": "'''Attention:''' {{PLURAL:$2|Un clave|Alcun claves}} secur ($1) generate durante le installation non es completemente secur. Considera cambiar {{PLURAL:$2|lo|los}} manualmente.",
+    "config-install-sysop": "Crea conto de usator pro administrator",
+    "config-install-subscribe-fail": "Impossibile subscriber a mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "cURL non es installate e allow_url_fopen non es disponibile.",
+    "config-install-mainpage": "Crea pagina principal con contento predefinite",
+    "config-install-extension-tables": "Creation de tabellas pro le extensiones activate",
+    "config-install-mainpage-failed": "Non poteva inserer le pagina principal: $1",
+    "config-install-done": "'''Felicitationes!'''\nTu ha installate MediaWiki con successo.\n\nLe installator ha generate un file <code>LocalSettings.php</code>.\nIste contine tote le configuration.\n\nEs necessari discargar lo e poner lo in le base del installation wiki (le mesme directorio que index.php).\nLe discargamento debe haber comenciate automaticamente.\n\nSi le discargamento non ha comenciate, o si illo esseva cancellate, es possibile recomenciar le discargamento con un clic sur le ligamine sequente:\n\n$3\n\n'''Nota''': Si tu non discarga iste file de configuration ora, illo non essera disponibile plus tarde.\n\nPost facer isto, tu pote '''[$2 entrar in tu wiki]'''.",
+    "config-download-localsettings": "Discargar <code>LocalSettings.php</code>",
+    "config-help": "adjuta",
+    "config-nofile": "Le file \"$1\" non poteva esser trovate. Ha illo essite delite?",
+    "mainpagetext": "'''MediaWiki ha essite installate con successo.'''",
+    "mainpagedocfooter": "Consulta le [//meta.wikimedia.org/wiki/Help:Contents Guida del usator] pro informationes super le uso del software wiki.\n\n== Pro initiar ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de configurationes]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ a proposito de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de diffusion pro annuncios de nove versiones de MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Traducer MediaWiki in tu lingua]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/id.json b/includes/installer/i18n/id.json
new file mode 100644 (file)
index 0000000..a2d7623
--- /dev/null
@@ -0,0 +1,295 @@
+{
+    "@metadata": {
+        "authors": [
+            "Farras",
+            "IvanLanin",
+            "Kenrick95",
+            "Reedy",
+            "아라"
+        ]
+    },
+    "config-desc": "Penginstal untuk MediaWiki",
+    "config-title": "Instalasi MediaWiki $1",
+    "config-information": "Informasi",
+    "config-localsettings-upgrade": "Berkas <code>LocalSettings.php</code> sudah ada.\nUntuk memutakhirkan instalasi ini, masukkan nilai <code>$wgUpgradeKey</code> dalam kotak yang tersedia di bawah ini.\nAnda dapat menemukan nilai tersebut dalam <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Berkas <code>LocalSettings.php</code> terdeteksi.\nUntuk meningkatkan versi, harap jalankan <code>update.php</code>.",
+    "config-localsettings-key": "Kunci pemutakhiran:",
+    "config-localsettings-badkey": "Kunci yang Anda berikan tidak benar",
+    "config-upgrade-key-missing": "Suatu instalasi MediaWiki telah terdeteksi.\nUntuk memutakhirkan instalasi ini, silakan masukkan baris berikut di bagian bawah <code>LocalSettings.php</code> Anda:\n\n$1",
+    "config-localsettings-incomplete": "<code>LocalSettings.php</code> yang ada tampaknya tidak lengkap.\nVariabel $1 tidak diatur.\nSilakan ubah <code>LocalSettings.php</code> untuk mengatur variabel ini dan klik \"{{int:Config-continue}}\".",
+    "config-localsettings-connection-error": "Timbul galat saat menghubungkan ke basis data dengan menggunakan setelan yang ditentukan di <code>LocalSettings.php</code> atau <code>AdminSettings.php</code>. Harap perbaiki setelan ini dan coba lagi.\n\n$1",
+    "config-session-error": "Kesalahan sesi mulai: $1",
+    "config-session-expired": "Data sesi tampaknya telah kedaluwarsa.\nSesi dikonfigurasi untuk berlaku selama $1.\nAnda dapat menaikkannya dengan menetapkan <code>session.gc_maxlifetime</code> dalam php.ini.\nUlangi proses instalasi.",
+    "config-no-session": "Data sesi Anda hilang!\nCek php.ini Anda dan pastikan bahwa <code>session.save_path</code> diatur ke direktori yang sesuai.",
+    "config-your-language": "Bahasa Anda:",
+    "config-your-language-help": "Pilih bahasa yang akan digunakan selama proses instalasi.",
+    "config-wiki-language": "Bahasa wiki:",
+    "config-wiki-language-help": "Pilih bahasa yang akan digunakan tulisan-tulisan wiki.",
+    "config-back": "← Kembali",
+    "config-continue": "Lanjut →",
+    "config-page-language": "Bahasa",
+    "config-page-welcome": "Selamat datang di MediaWiki",
+    "config-page-dbconnect": "Hubungkan ke basis data",
+    "config-page-upgrade": "Perbarui instalasi yang ada",
+    "config-page-dbsettings": "Pengaturan basis data",
+    "config-page-name": "Nama",
+    "config-page-options": "Pilihan",
+    "config-page-install": "Instal",
+    "config-page-complete": "Selesai!",
+    "config-page-restart": "Ulangi instalasi",
+    "config-page-readme": "Baca saya",
+    "config-page-releasenotes": "Catatan pelepasan",
+    "config-page-copying": "Menyalin",
+    "config-page-upgradedoc": "Memerbarui",
+    "config-page-existingwiki": "Wiki yang ada",
+    "config-help-restart": "Apakah Anda ingin menghapus semua data tersimpan yang telah Anda masukkan dan mengulang proses instalasi?",
+    "config-restart": "Ya, nyalakan ulang",
+    "config-welcome": "=== Pengecekan lingkungan ===\nPengecekan dasar dilakukan untuk melihat apakah lingkungan ini memadai untuk instalasi MediaWiki.\nAnda harus memberikan hasil pemeriksaan ini jika Anda memerlukan bantuan selama instalasi.",
+    "config-copyright": "=== Hak cipta dan persyaratan ===\n\n$1\n\nProgram ini adalah perangkat lunak bebas; Anda dapat mendistribusikan dan/atau memodifikasi di bawah persyaratan GNU General Public License seperti yang diterbitkan oleh Free Software Foundation; baik versi 2 lisensi, atau (sesuai pilihan Anda) versi yang lebih baru.\n\nProgram ini didistribusikan dengan harapan bahwa itu akan berguna, tetapi '''tanpa jaminan apa pun'''; bahkan tanpa jaminan tersirat untuk '''dapat diperjualbelikan ''' atau '''sesuai untuk tujuan tertentu'''.\nLihat GNU General Public License untuk lebih jelasnya.\n\nAnda seharusnya telah menerima <doclink href=\"Copying\">salinan dari GNU General Public License</doclink> bersama dengan program ini; jika tidak, kirimkan surat untuk Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. atau [http://www.gnu.org/copyleft/gpl.html baca versi daring].",
+    "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/id Situs MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents/id Pedoman Pengguna]\n* [//www.mediawiki.org/wiki/Manual:Contents/id Pedoman Administrator]\n* [//www.mediawiki.org/wiki/Manual:FAQ/id FAQ]\n----\n* <doclink href=Readme>Read me</doclink>\n* <doclink href=ReleaseNotes>Release notes</doclink>\n* <doclink href=Copying>Copying</doclink>\n* <doclink href=UpgradeDoc>Upgrading</doclink>",
+    "config-env-good": "Kondisi telah diperiksa.\nAnda dapat menginstal MediaWiki.",
+    "config-env-bad": "Kondisi telah diperiksa.\nAnda tidak dapat menginstal MediaWiki.",
+    "config-env-php": "PHP $1 diinstal.",
+    "config-env-php-toolow": "PHP $1 telah terinstal.\nNamun, MediaWiki memerlukan PHP $2 atau lebih tinggi.",
+    "config-unicode-using-utf8": "Menggunakan utf8_normalize.so Brion Vibber untuk normalisasi Unicode.",
+    "config-unicode-using-intl": "Menggunakan [http://pecl.php.net/intl ekstensi PECL intl] untuk normalisasi Unicode.",
+    "config-unicode-pure-php-warning": "'''Peringatan''': [http://pecl.php.net/intl Ekstensi intl PECL] untuk menangani normalisasi Unicode tidak tersedia, kembali menggunakan implementasi murni PHP yang lambat.\nJika Anda menjalankan situs berlalu lintas tinggi, Anda harus sedikit membaca [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalisasi Unicode].",
+    "config-unicode-update-warning": "'''Peringatan''': Versi terinstal dari pembungkus normalisasi Unicode menggunakan versi lama pustaka [http://site.icu-project.org/ proyek ICU].\nAnda harus [//www.mediawiki.org/wiki/Unicode_normalization_considerations memutakhirkannya] jika Anda ingin menggunakan Unicode.",
+    "config-no-db": "Pengandar basis data yang sesuai tidak ditemukan! Anda perlu menginstal pengandar basis data untuk PHP.\nJenis basis data yang didukung: $1.\n\nJika Anda menggunakan inang bersama, mintalah penyedia inang Anda untuk menginstal pengandar basis data yang sesuai.\nJika Anda mengompilasi sendiri PHP, ubahlah konfigurasinya dengan mengaktifkan klien basis data, misalnya menggunakan <code>./configure --with-mysql</code>.\nJika Anda menginstal PHP dari paket Debian atau Ubuntu, maka Anda juga perlu menginstal modul php5-mysql.",
+    "config-no-fts3": "'''Peringatan''': SQLite dikompilasi tanpa [//sqlite.org/fts3.html modul FTS3], fitur pencarian tidak akan tersedia pada konfigurasi ini.",
+    "config-register-globals": "'''Peringatan: Opsi <code>[http://php.net/register_globals register_globals]</code> PHP diaktifkan.'''\n'''Nonaktifkan kalau bisa.'''\nMediaWiki akan bekerja, tetapi server Anda memiliki potensi kerentanan keamanan.",
+    "config-magic-quotes-runtime": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] aktif!'''\nPilihan ini dapat merusak masukan data secara tidak terduga.\nAnda tidak dapat menginstal atau menggunakan MediaWiki kecuali pilihan ini dinonaktifkan.",
+    "config-magic-quotes-sybase": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic_quotes_sybase magic_quotes_sybase] aktif!'''\nPilihan ini dapat merusak masukan data secara tidak terduga.\nAnda tidak dapat menginstal atau menggunakan MediaWiki kecuali pilihan ini dinonaktifkan.",
+    "config-mbstring": "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] aktif!'' '\nPilihan ini dapat menyebabkan kesalahan dan kerusakan data yang tidak terduga.\nAnda tidak dapat menginstal atau menggunakan MediaWiki kecuali pilihan ini dinonaktifkan.",
+    "config-ze1": "'''Fatal: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] aktif!'''\nPilihan ini dapat menyebabkan bug yang mengerikan pada MediaWiki.\nAnda tidak dapat menginstal atau menggunakan MediaWiki kecuali pilihan ini dinonaktifkan.",
+    "config-safe-mode": "''' Peringatan:''' [http://www.php.net/features.safe-mode Mode aman] PHP aktif.\nHal ini akan menyebabkan masalah, terutama jika menggunakan pengunggahan berkas dan dukungan <code>math</code>.",
+    "config-xml-bad": "Modul XML PHP hilang.\nMediaWiki membutuhkan fungsi dalam modul ini dan tidak akan bekerja dalam konfigurasi ini.\nJika Anda menggunakan Mandrake, instal paket php-xml.",
+    "config-pcre": "Modul pendukung PCRE tampaknya hilang.\nMediaWiki memerlukan fungsi persamaan reguler kompatibel Perl untuk bekerja.",
+    "config-pcre-no-utf8": "'''Fatal''': Modul PCRE PHP tampaknya dikompilasi tanpa dukungan PCRE_UTF8.\nMediaWiki memerlukan dukungan UTF-8 untuk berfungsi dengan benar.",
+    "config-memory-raised": "<code>memory_limit</code> PHP adalah $1, dinaikkan ke $2.",
+    "config-memory-bad": "'''Peringatan:''' <code>memory_limit</code> PHP adalah $1.\nIni terlalu rendah.\nInstalasi terancam gagal!",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] telah diinstal",
+    "config-apc": "[http://www.php.net/apc APC] telah diinstal",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] telah diinstal",
+    "config-no-cache": "'''Peringatan:''' Tidak dapat menemukan [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache], atau [http://www.iis.net/download/WinCacheForPhp WinCache]. Pinggahan obyek tidak dinonaktifkan.",
+    "config-diff3-bad": "GNU diff3 tidak ditemukan.",
+    "config-imagemagick": "ImageMagick ditemukan: <code>$1</code> .\nPembuatan gambar mini akan diaktifkan jika Anda mengaktifkan pengunggahan.",
+    "config-gd": "Pustaka grafis GD terpasang ditemukan.\nPembuatan gambar mini akan diaktifkan jika Anda mengaktifkan pengunggahan.",
+    "config-no-scaling": "Pustaka GD atau ImageMagick tidak ditemukan.\nPembuatan gambar mini dinonaktifkan.",
+    "config-no-uri": "'''Kesalahan:''' URI saat ini tidak dapat ditentukan.\nInstalasi dibatalkan.",
+    "config-uploads-not-safe": "'''Peringatan:''' Direktori bawaan pengunggahan <code>$1</code> Anda rentan terhadap eksekusi skrip yang sewenang-wenang.\nMeskipun MediaWiki memeriksa semua berkas unggahan untuk ancaman keamanan, sangat dianjurkan untuk [//www.mediawiki.org/wiki/Manual:Security#Upload_security menutup kerentanan keamanan ini] sebelum mengaktifkan pengunggahan.",
+    "config-brokenlibxml": "Sistem Anda memiliki kombinasi versi PHP dan libxml2 yang memiliki bug dan dapat menyebabkan kerusakan data tersembunyi pada MediaWiki dan aplikasi web lain.\nMutakhirkan ke PHP 5.2.9 atau yang lebih baru dan libxml2 2.7.3 atau yang lebih baru ([//bugs.php.net/bug.php?id=45996 arsip bug di PHP]).\nInstalasi dibatalkan.",
+    "config-using531": "MediaWiki tidak dapat dijalankan dengan PHP $1 karena bug yang melibatkan parameter referensi untuk <code>__call()</code> .\nTingkatkan ke PHP 5.3.2 atau lebih baru, atau turunkan ke PHP versi 5.3.0 untuk menyelesaikan hal ini.\nInstalasi dibatalkan.",
+    "config-suhosin-max-value-length": "Suhosin terpasang dan membatasi panjang parameter GET sebesar $1 bita. Komponen ResourceLoader MediaWiki akan mengatasi batasan ini, tapi penanganannya akan menurunkan kinerja. Jika memungkinkan, Anda sebaiknya menetapkan nilai <code>suhosin.get.max_value_length</code> menjadi 1024 atau lebih tinggi dalam <code>php.ini</code> dan menyetel <code>$wgResourceLoaderMaxQueryLength</code> dengan nilai yang sama dalam LocalSettings.php.",
+    "config-db-type": "Jenis basis data:",
+    "config-db-host": "Inang basis data:",
+    "config-db-host-help": "Jika server basis data Anda berada di server yang berbeda, masukkan nama inang atau alamat IP di sini.\n\nJika Anda menggunakan inang web bersama, penyedia inang Anda harus memberikan nama inang yang benar di dokumentasi mereka.\n\nJika Anda menginstal pada server Windows dan menggunakan MySQL, \"localhost\" mungkin tidak dapat digunakan sebagai nama server. Jika demikian, coba \"127.0.0.1\" untuk alamat IP lokal.",
+    "config-db-host-oracle": "TNS basis data:",
+    "config-db-host-oracle-help": "Masukkan [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] yang sah; berkas tnsnames.ora harus dapat diakses oleh instalasi ini.<br />Jika Anda menggunakan pustaka klien 10g atau lebih baru, Anda juga dapat menggunakan metode penamaan [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+    "config-db-wiki-settings": "Identifikasi wiki ini",
+    "config-db-name": "Nama basis data:",
+    "config-db-name-help": "Pilih nama yang mengidentifikasikan wiki Anda.\nNama tersebut tidak boleh mengandung spasi.\n\nJika Anda menggunakan inang web bersama, penyedia inang Anda dapat memberikan Anda nama basis data khusus untuk digunakan atau mengizinkan Anda membuat basis data melalui panel kontrol.",
+    "config-db-name-oracle": "Skema basis data:",
+    "config-db-account-oracle-warn": "Ada tiga skenario yang didukung untuk instalasi Oracle sebagai basis data pendukung:\n\nJika Anda ingin membuat akun basis data sebagai bagian dari proses instalasi, silakan masukkan akun dengan peran SYSDBA sebagai akun basis data untuk instalasi dan tentukan kredensial yang diinginkan untuk akun akses web. Jika tidak, Anda dapat membuat akun akses web secara manual dan hanya memberikan akun tersebut (jika memiliki izin yang diperlukan untuk membuat objek skema) atau memasukkan dua akun yang berbeda, satu dengan hak membuat objek dan satu dibatasi untuk akses web.\n\nSkrip untuk membuat akun dengan privilese yang diperlukan dapat ditemukan pada direktori \"maintenance/oracle/\" instalasi ini. Harap diingat bahwa penggunaan akun terbatas akan menonaktifkan semua kemampuan pemeliharaan dengan akun bawaan.",
+    "config-db-install-account": "Akun pengguna untuk instalasi",
+    "config-db-username": "Nama pengguna basis data:",
+    "config-db-password": "Kata sandi basis data:",
+    "config-db-password-empty": "Silakan masukkan sandi untuk pengguna basis data baru: $1.\nMeskipun dimungkinkan untuk membuat pengguna tanpa sandi, hal itu tidak aman.",
+    "config-db-install-username": "Masukkan nama pengguna yang akan digunakan untuk terhubung ke basis data selama proses instalasi.\nIni bukan nama pengguna akun MediaWiki, melainkan nama pengguna untuk basis data Anda.",
+    "config-db-install-password": "Masukkan sandi yang akan digunakan untuk terhubung ke basis data selama proses instalasi.\nIni bukan sandi untuk akun MediaWiki, melainkan sandi untuk basis data Anda.",
+    "config-db-install-help": "Masukkan nama pengguna dan sandi yang akan digunakan untuk terhubung ke basis data pada saat proses instalasi.",
+    "config-db-account-lock": "Gunakan nama pengguna dan kata sandi yang sama selama operasi normal",
+    "config-db-wiki-account": "Akun pengguna untuk operasi normal",
+    "config-db-wiki-help": "Masukkan nama pengguna dan sandi yang akan digunakan untuk terhubung ke basis data wiki selama operasi normal.\nJika akun tidak ada, akun instalasi memiliki hak yang memadai, akun pengguna ini akan dibuat dengan hak akses minimum yang diperlukan untuk mengoperasikan wiki.",
+    "config-db-prefix": "Prefiks tabel basis data:",
+    "config-db-prefix-help": "Jika Anda perlu berbagi satu basis data di antara beberapa wiki, atau antara MediaWiki dan aplikasi web lain, Anda dapat memilih untuk menambahkan prefiks terhadap semua nama tabel demi menghindari konflik.\nJangan gunakan spasi.\n\nPrefiks ini biasanya dibiarkan kosong.",
+    "config-db-charset": "Set karakter basis data",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 biner",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "UTF-8 yang kompatibel balik dengan MySQL 4.0",
+    "config-charset-help": "'''Peringatan:''' Jika Anda menggunakan '''UTF-8 kompatibel balik''' pada MySQL 4.1+, dan kemudian mencadangkan basis data dengan <code>mysqldump</code>, proses itu mungkin menghancurkan semua karakter non-ASCII dan merusak cadangan Anda tanpa dapat dikembalikan!\n\nDalam '''modus biner''', MediaWiki menyimpan teks UTF-8 ke basis data dalam bidang biner.\nIni lebih efisien dibandingkan modus UTF-8 MySQL dan memungkinkan Anda untuk menggunakan berbagai karakter Unicode.\nDalam '''modus UTF-8''', MySQL akan tahu apa set karakter data anda dan dapat menyajikan dan mengubahnya denga tepat, namun tidak akan mengizinkan Anda menyimpan karakter di atas [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
+    "config-mysql-old": "MySQL $1 atau versi terbaru diperlukan, Anda menggunakan $2.",
+    "config-db-port": "Porta basis data:",
+    "config-db-schema": "Skema untuk MediaWiki",
+    "config-db-schema-help": "Skema ini biasanya berjalan baik.\nUbah hanya jika Anda tahu Anda perlu mengubahnya.",
+    "config-sqlite-dir": "Direktori data SQLite:",
+    "config-sqlite-dir-help": "SQLite menyimpan semua data dalam satu berkas.\n\nDirektori yang Anda berikan harus dapat ditulisi oleh server web selama instalasi.\n\nDirektori itu '''tidak''' boleh dapat diakses melalui web, inilah sebabnya kami tidak menempatkannya bersama dengan berkas PHP lain.\n\nPenginstal akan membuat berkas <code>.htaccess</code> bersamaan dengan itu, tetapi jika gagal, orang dapat memperoleh akses ke basis data mentah Anda.\nItu termasuk data mentah pengguna (alamat surel, hash sandi) serta revisi yang dihapus dan data lainnya yang dibatasi pada wiki.\n\nPertimbangkan untuk menempatkan basis data di tempat lain, misalnya di <code>/var/lib/mediawiki/yourwiki</code>.",
+    "config-oracle-def-ts": "Tablespace bawaan:",
+    "config-oracle-temp-ts": "Tablespace sementara:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "MediaWiki mendukung sistem basis data berikut:\n\n$1\n\nJika Anda tidak melihat sistem basis data yang Anda gunakan tercantum di bawah ini, ikuti petunjuk terkait di atas untuk mengaktifkan dukungan.",
+    "config-support-mysql": "* $1 adalah target utama MediaWiki dan memiliki dukungan terbaik ([http://www.php.net/manual/en/mysql.installation.php cara mengompilasi PHP dengan dukungan MySQL])",
+    "config-support-postgres": "* $1 adalah sistem basis data sumber terbuka populer sebagai alternatif untuk MySQL ([http://www.php.net/manual/en/pgsql.installation.php cara mengompilasi PHP dengan dukungan PostgreSQL]). Mungkin ada beberapa bug terbuka dan alternatif ini tidak direkomendasikan untuk dipakai dalam lingkungan produksi.",
+    "config-support-sqlite": "* $1 adalah sistem basis data yang ringan yang sangat baik dukungannya. ([http://www.php.net/manual/en/pdo.installation.php cara mengompilasi PHP dengan dukungan SQLite], menggunakan PDO)",
+    "config-support-oracle": "* $1 adalah basis data komersial untuka perusahaan. ([http://www.php.net/manual/en/oci8.installation.php cara mengompilasi PHP dengan dukungan OCI8])",
+    "config-header-mysql": "Pengaturan MySQL",
+    "config-header-postgres": "Pengaturan PostgreSQL",
+    "config-header-sqlite": "Pengaturan SQLite",
+    "config-header-oracle": "Pengaturan Oracle",
+    "config-invalid-db-type": "Jenis basis data tidak sah",
+    "config-missing-db-name": "Anda harus memasukkan nilai untuk \"Nama basis data\"",
+    "config-missing-db-host": "Anda harus memasukkan nilai untuk \"Inang basis data\"",
+    "config-missing-db-server-oracle": "Anda harus memasukkan nilai untuk \"TNS basis data\"",
+    "config-invalid-db-server-oracle": "TNS basis data \"$1\" tidak sah.\nGunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan titik (.).",
+    "config-invalid-db-name": "Nama basis data \"$1\" tidak sah.\nGunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan tanda hubung (-).",
+    "config-invalid-db-prefix": "Prefiks basis data \"$1\" tidak sah.\nGunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan tanda hubung (-).",
+    "config-connection-error": "$1.\n\nPeriksa nama inang, pengguna, dan sandi di bawah ini dan coba lagi.",
+    "config-invalid-schema": "Skema MediaWiki \"$1\" tidak sah.\nGunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), dan garis bawah (_).",
+    "config-db-sys-create-oracle": "Penginstal hanya mendukung penggunaan akun SYSDBA untuk membuat akun baru.",
+    "config-db-sys-user-exists-oracle": "Akun pengguna \"$1\"sudah ada. SYSDBA hanya dapat digunakan untuk membuat akun baru!",
+    "config-postgres-old": "PostgreSQL $1 atau versi terbaru diperlukan, Anda menggunakan $2.",
+    "config-sqlite-name-help": "Pilih nama yang mengidentifikasi wiki Anda.\nJangan gunakan spasi atau tanda hubung.\nNama ini akan digunakan untuk nama berkas data SQLite.",
+    "config-sqlite-parent-unwritable-group": "Tidak dapat membuat direktori data <code><nowiki>$1</nowiki></code>, karena direktori induk <code><nowiki>$2</nowiki></code> tidak bisa ditulisi oleh server web.\n\nPenginstal telah menentukan pengguna yang menjalankan server web Anda.\nBuat direktori <code><nowiki>$3</nowiki></code> menjadi dapat ditulisi olehnya.\nPada sistem Unix/Linux lakukan hal berikut:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Tidak dapat membuat direktori data <code><nowiki>$1</nowiki></code>, karena direktori induk <code><nowiki>$2</nowiki></code> tidak bisa ditulisi oleh server web.\n\nPenginstal tidak dapat menentukan pengguna yang menjalankan server web Anda.\nBuat direktori <code><nowiki>$3</nowiki></code> menjadi dapat ditulisi oleh semua orang.\nPada sistem Unix/Linux lakukan hal berikut:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Kesalahan saat membuat direktori data \"$1\".\nPeriksa lokasi dan coba lagi.",
+    "config-sqlite-dir-unwritable": "Tidak dapat menulisi direktori \"$1\".\nUbah hak akses direktori sehingga server web dapat menulis ke sana, dan coba lagi.",
+    "config-sqlite-connection-error": "$1.\n\nPeriksa direktori data dan nama basis data di bawah dan coba lagi.",
+    "config-sqlite-readonly": "Berkas <code>$1</code> tidak dapat ditulisi.",
+    "config-sqlite-cant-create-db": "Tidak dapat membuat berkas basis data <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "PHP tidak memiliki dukungan FTS3, tabel dituruntarafkan.",
+    "config-can-upgrade": "Ada tabel MediaWiki di basis dataini.\nUntuk memperbaruinya ke MediaWiki $1, klik '''Lanjut'''.",
+    "config-upgrade-done": "Pemutakhiran selesai.\n\nAnda sekarang dapat [$1 mulai menggunakan wiki Anda].\n\nJika Anda ingin membuat ulang berkas <code>LocalSettings.php</code>, klik tombol di bawah ini.\nTindakan ini '''tidak dianjurkan''' kecuali jika Anda mengalami masalah dengan wiki Anda.",
+    "config-upgrade-done-no-regenerate": "Pemutakhiran selesai.\n\nAnda sekarang dapat [$1 mulai menggunakan wiki Anda].",
+    "config-regenerate": "Regenerasi LocalSettings.php →",
+    "config-show-table-status": "Kueri <code>SHOW TABLE STATUS</code> gagal!",
+    "config-unknown-collation": "'''Peringatan:''' basis data menggunakan kolasi yang tidak dikenal.",
+    "config-db-web-account": "Akun basis data untuk akses web",
+    "config-db-web-help": "Masukkan nama pengguna dan sandi yang akan digunakan server web untuk terhubung ke server basis data saat operasi normal wiki.",
+    "config-db-web-account-same": "Gunakan akun yang sama seperti untuk instalasi",
+    "config-db-web-create": "Buat akun jika belum ada",
+    "config-db-web-no-create-privs": "Akun Anda berikan untuk instalasi tidak memiliki hak yang cukup untuk membuat akun.\nAkun yang Anda berikan harus sudah ada.",
+    "config-mysql-engine": "Mesin penyimpanan:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-engine-help": "'''InnoDB''' hampir selalu merupakan pilihan terbaik karena memiliki dukungan konkurensi yang baik.\n\n'''MyISAM''' mungkin lebih cepat dalam instalasi pengguna-tunggal atau hanya-baca.\nBasis data MyISAM cenderung lebih sering rusak daripada basis data InnoDB.",
+    "config-mysql-charset": "Set karakter basis data:",
+    "config-mysql-binary": "Biner",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "Dalam '''modus biner''', MediaWiki menyimpan teks UTF-8 untuk basis data dalam bidang biner.\nIni lebih efisien daripada modus UTF-8 MySQL dan memungkinkan Anda untuk menggunakan ragam penuh karakter Unicode.\n\nDalam '''modus UTF-8''', MySQL akan tahu apa set karakter data dan dapat menampilkan dan mengubahnya sesuai keperluan, tetapi tidak akan mengizinkan Anda menyimpan karakter di atas [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
+    "config-site-name": "Nama wiki:",
+    "config-site-name-help": "Ini akan muncul di bilah judul peramban dan di berbagai tempat lainnya.",
+    "config-site-name-blank": "Masukkan nama situs.",
+    "config-project-namespace": "Ruang nama proyek:",
+    "config-ns-generic": "Proyek",
+    "config-ns-site-name": "Sama seperti nama wiki: $1",
+    "config-ns-other": "Lainnya (sebutkan)",
+    "config-ns-other-default": "MyWiki",
+    "config-project-namespace-help": "Mengikuti contoh Wikipedia, banyak wiki menyimpan halaman kebijakan mereka terpisah dari halaman konten mereka, dalam \"'''ruang nama proyek'''\".\nSemua judul halaman dalam ruang nama ini diawali dengan prefiks tertentu yang dapat Anda tetapkan di sini.\nBiasanya, prefiks ini berasal dari nama wiki, tetapi tidak dapat berisi karakter tanda baca seperti \"#\" atau \":\".",
+    "config-ns-invalid": "Ruang nama \"<nowiki>$1</nowiki>\" yang ditentukan tidak sah.\nBerikan ruang nama proyek lain.",
+    "config-ns-conflict": "Ruang nama \"<nowiki>$1</nowiki>\" yang diberikan berkonflik dengan ruang nama bawaan MediaWiki.\nTentukan ruang nama proyek yang berbeda.",
+    "config-admin-box": "Akun pengurus",
+    "config-admin-name": "Nama Anda:",
+    "config-admin-password": "Kata sandi:",
+    "config-admin-password-confirm": "Kata sandi lagi:",
+    "config-admin-help": "Masukkan nama pengguna pilihan Anda di sini, misalnya \"Udin Wiki\".\nIni adalah nama yang akan Anda gunakan untuk masuk ke wiki.",
+    "config-admin-name-blank": "Masukkan nama pengguna pengurus.",
+    "config-admin-name-invalid": "Nama pengguna \"<nowiki>$1</nowiki>\" yang diberikan tidak sah.\nBerikan nama pengguna lain.",
+    "config-admin-password-blank": "Masukkan kata sandi untuk akun pengurus.",
+    "config-admin-password-same": "Kata sandi harus tidak sama seperti nama pengguna.",
+    "config-admin-password-mismatch": "Dua kata sandi yang Anda masukkan tidak cocok.",
+    "config-admin-email": "Alamat surel:",
+    "config-admin-email-help": "Masukkan alamat surel untuk memungkinkan Anda menerima surel dari pengguna lain, menyetel ulang sandi, dan mendapat pemberitahuan tentang perubahan atas daftar pantauan Anda. Anda dapat mengosongkan bidang ini.",
+    "config-admin-error-user": "Kesalahan internal saat membuat admin dengan nama \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Kesalahan internal saat membuat sandi untuk admin \"<nowiki>$1</nowiki>\":<pre>$2</pre>",
+    "config-admin-error-bademail": "Anda memasukkan alamat surel yang tidak sah",
+    "config-subscribe": "Berlangganan ke [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce milis pengumuman rilis].",
+    "config-subscribe-help": "Ini adalah milis bervolume rendah yang digunakan untuk pengumuman rilis, termasuk pengumuman keamanan penting.\nAnda sebaiknya berlangganan dan memperbarui instalasi MediaWiki saat versi baru keluar.",
+    "config-almost-done": "Anda hampir selesai!\nAnda sekarang dapat melewati sisa konfigurasi dan menginstal wiki sekarang.",
+    "config-optional-continue": "Berikan saya pertanyaan lagi.",
+    "config-optional-skip": "Saya sudah bosan, instal saja wikinya.",
+    "config-profile": "Profil hak pengguna:",
+    "config-profile-wiki": "Wiki tradisional",
+    "config-profile-no-anon": "Pembuatan akun diperlukan",
+    "config-profile-fishbowl": "Khusus penyunting terdaftar",
+    "config-profile-private": "Wiki pribadi",
+    "config-profile-help": "Wiki paling baik bekerja jika Anda membiarkan sebanyak mungkin orang untuk menyunting. Dengan MediaWiki, sangat mudah meninjau perubahan terbaru dan mengembalikan kerusakan yang dilakukan oleh pengguna naif atau berbahaya.\n\nNamun, berbagai kegunaan lain dari MediaWiki telah ditemukan, dan kadang tidak mudah untuk meyakinkan semua orang manfaat dari cara wiki. Jadi, Anda yang menentukan.\n\n'''{{int:config-profile-wiki}}''' memungkinkan setiap orang untuk menyunting, bahkan tanpa masuk.\n'''{{int:config-profile-no-anon}}''' menyediakan akuntabilitas tambahan, tetapi dapat mencegah kontributor biasa.\n\n'''{{int:config-profile-fishbowl}}''' memungkinkan pengguna yang disetujui untuk menyunting, tetapi publik dapat melihat halaman, termasuk riwayatnya.\n'''{{int:config-profile-private}}''' hanya memungkinkan pengguna yang disetujui untuk melihat dan menyunting halaman.\n\nKonfigurasi hak pengguna yang lebih kompleks tersedia setelah instalasi. Lihat [//www.mediawiki.org/wiki/Manual:User_rights/id entri manual terkait].",
+    "config-license": "Hak cipta dan lisensi:",
+    "config-license-none": "Tidak ada lisensi",
+    "config-license-cc-by-sa": "Creative Commons Atribusi Berbagi Serupa",
+    "config-license-cc-by": "Creative Commons Atribusi",
+    "config-license-cc-by-nc-sa": "Creative Commons Atribusi Nonkomersial Berbagi Serupa",
+    "config-license-cc-0": "Creative Commons Zero (Domain Publik)",
+    "config-license-gfdl": "Lisensi Dokumentasi Bebas GNU 1.3 atau versi terbaru",
+    "config-license-pd": "Domain Umum",
+    "config-license-cc-choose": "Pilih lisensi Creative Commons kustom",
+    "config-license-help": "Banyak wiki publik melisensikan semua kontribusi di bawah [http://freedomdefined.org/Definition lisensi bebas].\nHal ini membantu menciptakan rasa kepemilikan komunitas dan mendorong kontribusi jangka panjang.\nHal ini umumnya tidak diperlukan untuk wiki pribadi atau perusahaan.\n\nJika Anda ingin dapat menggunakan teks dari Wikipedia dan Anda ingin agar Wikipedia dapat menerima teks yang disalin dari wiki Anda, Anda harus memilih'''Creative Commons Attribution Share Alike'''.\n\nWikipedia sebelumnya menggunakan GNU Free Documentation License.\nLisensi ini masih sah, namun sulit dipahami.\nSelain itu, sulit untuk menggunakan ulang konten yang dilisensikan di bawah GFDL.",
+    "config-email-settings": "Pengaturan surel",
+    "config-enable-email": "Aktifkan surel keluar",
+    "config-enable-email-help": "Jika Anda ingin mengaktifkan surel, [http://www.php.net/manual/en/mail.configuration.php setelah surel PHP] perlu dikonfigurasi dengan benar.\nJika Anda tidak perlu fitur surel, Anda dapat menonaktifkannya di sini.",
+    "config-email-user": "Aktifkan surel antarpengguna",
+    "config-email-user-help": "Memungkinkan semua pengguna untuk saling berkirim surel jika mereka mengaktifkan pilihan tersebut dalam preferensi mereka.",
+    "config-email-usertalk": "Aktifkan pemberitahuan perubahan halaman pembicaraan pengguna",
+    "config-email-usertalk-help": "Memungkinkan pengguna untuk menerima pemberitahuan tentang perubahan halaman pembicaraan pengguna, jika pilihan tersebut telah diaktifkan dalam preferensi mereka.",
+    "config-email-watchlist": "Aktifkan pemberitahuan daftar pantau",
+    "config-email-watchlist-help": "Memungkinkan pengguna untuk menerima pemberitahuan tentang perubahan halaman yang ada dalam daftar pantauan mereka, jika pilihan tersebut telah diaktifkan dalam preferensi mereka.",
+    "config-email-auth": "Aktifkan otentikasi surel",
+    "config-email-auth-help": "Jika opsi ini diaktifkan, pengguna harus mengonfirmasi alamat surel dengan menggunakan pranala yang dikirim kepadanya setiap kali mereka mengatur atau mengubahnya.\nHanya alamat surel yang dikonfirmasi yang dapat menerima surel dari pengguna lain atau surel pemberitahuan perubahan.\nPenetapan opsi ini '''direkomendasikan''' untuk wiki publik karena adanya potensi penyalahgunaan fitur surel.",
+    "config-email-sender": "Alamat surel balasan:",
+    "config-email-sender-help": "Masukkan alamat surel untuk digunakan sebagai alamat pengirim pada surel keluar.\nAlamat ini akan menerima pentalan.\nBanyak server surel mensyaratkan paling tidak bagian nama domain yang sah.",
+    "config-upload-settings": "Pengunggahan gambar dan berkas",
+    "config-upload-enable": "Aktifkan pengunggahan berkas",
+    "config-upload-help": "Pengunggahan berkas berpotensi memaparkan server Anda dengan risiko keamanan.\nUntuk informasi lebih lanjut, baca [//www.mediawiki.org/wiki/Manual:Security/id manual keamanan].\n\nUntuk mengaktifkan pengunggahan berkas, ubah modus subdirektori <code>images</code> di bawah direktori akar MediaWiki agar server web dapat menulis ke sana.\nKemudian aktifkan opsi ini.",
+    "config-upload-deleted": "Direktori untuk berkas terhapus:",
+    "config-upload-deleted-help": "Pilih direktori tempat mengarsipkan berkas yang dihapus.\nIdealnya, direktori ini tidak boleh dapat diakses dari web.",
+    "config-logo": "URL logo:",
+    "config-logo-help": "Kulit bawaan MediaWiki memberikan ruang untuk logo berukuran 135x160 piksel di atas menu bilah samping.\nUnggah gambar dengan ukuran yang sesuai, lalu masukkan URL di sini.\n\nJika Anda tidak ingin menyertakan logo, biarkan kotak ini kosong.",
+    "config-instantcommons": "Aktifkan Instant Commons",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] adalah fitur yang memungkinkan wiki untuk menggunakan gambar, suara, dan media lain dari [//commons.wikimedia.org/ Wikimedia Commons].\nUntuk melakukannya, MediaWiki memerlukan akses ke Internet.\n\nUntuk informasi lebih lanjut tentang fitur ini, termasuk petunjuk tentang cara untuk mengatur untuk wiki selain Wikimedia Commons, baca [//mediawiki.org/wiki/Manual:$wgForeignFileRepos manual].",
+    "config-cc-error": "Pemilih lisensi Creative Commons tidak memberikan hasil.\nMasukkan nama lisensi secara manual.",
+    "config-cc-again": "Pilih lagi...",
+    "config-cc-not-chosen": "Pilih lisensi Creative Commons yang Anda inginkan dan klik \"lanjutkan\".",
+    "config-advanced-settings": "Konfigurasi lebih lanjut",
+    "config-cache-options": "Pengaturan untuk penyinggahan objek:",
+    "config-cache-help": "Penyinggahan objek digunakan untuk meningkatkan kecepatan MediaWiki dengan menyinggahkan data yang sering digunakan.\nSitus berukuran sedang hingga besar sangat dianjurkan untuk mengaktifkan fitur ini, dan situs kecil juga akan merasakan manfaatnya.",
+    "config-cache-none": "Tidak ada penyinggahan (tidak ada fungsi yang dibuang, tetapi kecepatan dapat terpengaruh pada situs wiki yang besar)",
+    "config-cache-accel": "Penyinggahan objek PHP (APC, XCache atau WinCache)",
+    "config-cache-memcached": "Gunakan Memcached (memerlukan setup dan konfigurasi tambahan)",
+    "config-memcached-servers": "Server Memcached:",
+    "config-memcached-help": "Daftar alamat IP yang digunakan untuk Memcached.\nHarus dispesifikasikan per baris berikut porta yang akan digunakan. Contoh:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "Anda memilih Memcached sebagai jenis singgahan, tetapi tidak menentukan server apa pun.",
+    "config-memcache-badip": "Anda memasukkan alamat IP yang tidak sah untuk Memcached: $1 .",
+    "config-memcache-noport": "Anda tidak menentukan suatu porta untuk digunakan oleh server Memcached: $1.\nJika Anda tidak tahu porta tersebut, porta bawaan adalah 11211.",
+    "config-memcache-badport": "Nomor porta Memcached harus antara $1 dan $2.",
+    "config-extensions": "Ekstensi",
+    "config-extensions-help": "Ekstensi yang tercantum di atas terdeteksi di direktori <code>./extensions</code>.\n\nEkstensi tersebut mungkin memerlukan konfigurasi tambahan, tetapi Anda dapat mengaktifkannya sekarang.",
+    "config-install-alreadydone": "'''Peringatan:''' Anda tampaknya telah menginstal MediaWiki dan mencoba untuk menginstalnya lagi.\nLanjutkan ke halaman berikutnya.",
+    "config-install-begin": "Dengan menekan \"{{int:config-continue}}\", Anda akan memulai instalasi MediaWiki.\nJika Anda masih ingin membuat perubahan, tekan \"{{int:config-back}}\".",
+    "config-install-step-done": "selesai",
+    "config-install-step-failed": "gagal",
+    "config-install-extensions": "Termasuk ekstensi",
+    "config-install-database": "Menyiapkan basis data",
+    "config-install-pg-schema-not-exist": "Skema PostgreSQL tidak tersedia.",
+    "config-install-pg-schema-failed": "Pembuatan tabel gagal.\nPastikan bahwa pengguna \"$1\" dapat menulis ke skema \"$2\".",
+    "config-install-pg-commit": "Melakukan perubahan",
+    "config-install-pg-plpgsql": "Memeriksa bahasa PL / pgSQL",
+    "config-pg-no-plpgsql": "Anda perlu menginstal bahasa PL/pgSQL pada basis data $1",
+    "config-pg-no-create-privs": "Akun yang Anda tetapkan untuk instalasi tidak memiliki hak yang cukup untuk membuat akun.",
+    "config-install-user": "Membuat pengguna basis data",
+    "config-install-user-alreadyexists": "Pengguna \"$1\" sudah ada",
+    "config-install-user-create-failed": "Pembuatan pengguna \"$1\" gagal: $2",
+    "config-install-user-grant-failed": "Memberikan izin untuk pengguna \"$1\" gagal: $2",
+    "config-install-tables": "Membuat tabel",
+    "config-install-tables-exist": "'''Peringatan''': Tabel MediaWiki sepertinya sudah ada.\nMelompati pembuatan.",
+    "config-install-tables-failed": "'''Kesalahan''': Pembuatan tabel gagal dengan kesalahan berikut: $1",
+    "config-install-interwiki": "Mengisi tabel bawaan antarwiki",
+    "config-install-interwiki-list": "Tidak dapat menemukan berkas <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "'''Peringatan''': Tabel antarwiki tampaknya sudah memiliki entri.\nMengabaikan daftar bawaan.",
+    "config-install-stats": "Inisialisasi statistik",
+    "config-install-keys": "Membuat kunci rahasia",
+    "config-insecure-keys": "'''Peringatan:''' {{PLURAL:$2|Suatu|Beberapa}} kunci aman ($1) yang dibuat selama instalasi {{PLURAL:$2|tidak|tidak}} benar-benar aman. Pertimbangkan untuk mengubah {{PLURAL:$2|kunci|kunci-kunci}} tersebut secara manual.",
+    "config-install-sysop": "Membuat akun pengguna pengurus",
+    "config-install-subscribe-fail": "Tidak dapat berlangganan mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "cURL tidak diinstal dan allow_url_fopen tidak tersedia.",
+    "config-install-mainpage": "Membuat halaman utama dengan konten bawaan",
+    "config-install-extension-tables": "Pembuatan tabel untuk ekstensi yang diaktifkan",
+    "config-install-mainpage-failed": "Tidak dapat membuat halaman utama: $1",
+    "config-install-done": "'''Selamat!'''\nAnda telah berhasil menginstal MediaWiki.\n\nPenginstal telah membuat berkas <code>LocalSettings.php</code>.\nBerkas itu berisi semua konfigurasi Anda.\n\nAnda perlu mengunduh berkas itu dan meletakkannya di direktori instalasi wiki (direktori yang sama dengan index.php). Pengunduhan akan dimulai secara otomatis.\n\nJika pengunduhan tidak terjadi, atau jika Anda membatalkannya, Anda dapat mengulangi pengunduhan dengan mengeklik tautan berikut:\n\n$3\n\n'''Catatan''': Jika Anda tidak melakukannya sekarang, berkas konfigurasi yang dihasilkan ini tidak akan tersedia lagi setelah Anda keluar dari proses instalasi tanpa mengunduhnya.\n\nSetelah melakukannya, Anda dapat '''[$2 memasuki wiki Anda]'''.",
+    "config-download-localsettings": "Unduh <code>LocalSettings.php</code>",
+    "config-help": "bantuan",
+    "config-nofile": "Berkas \"$1\" tidak dapat ditemukan. Mungkin sudah dihapus?",
+    "mainpagetext": "'''MediaWiki telah terpasang dengan sukses'''.",
+    "mainpagedocfooter": "Silakan baca [//www.mediawiki.org/wiki/Help:Contents/id Panduan Pengguna] untuk cara penggunaan perangkat lunak wiki ini.\n\n== Memulai penggunaan ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings/id Daftar pengaturan konfigurasi]\n* [//www.mediawiki.org/wiki/Manual:FAQ/id Daftar pertanyaan yang sering diajukan mengenai MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Terjemahkan MediaWiki ke bahasa Anda]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ie.json b/includes/installer/i18n/ie.json
new file mode 100644 (file)
index 0000000..6b2f9ba
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Software del wiki installat con successe.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ig.json b/includes/installer/i18n/ig.json
new file mode 100644 (file)
index 0000000..253d8a3
--- /dev/null
@@ -0,0 +1,17 @@
+{
+    "@metadata": {
+        "authors": [
+            "Ukabia"
+        ]
+    },
+    "config-back": "← Laàzú",
+    "config-continue": "Gawazie →",
+    "config-page-language": "Ásụ̀sụ̀",
+    "config-page-name": "Áhà",
+    "config-page-install": "Sụ̀ímé",
+    "config-restart": "Eeh, bìdówárí ya.",
+    "config-admin-password": "Okwúngáfè:",
+    "config-admin-password-confirm": "Okwúngáfè mgbe ozor:",
+    "mainpagetext": "'''MediaWiki a banyélé nke oma.'''",
+    "mainpagedocfooter": "Gbàkpó [//meta.wikimedia.org/wiki/Help:Contents Ǹdù Ọ'bànifé] màkà ụmá màkà Í jí ngwa nsónùsòrò bu wiki.\n\n== I bídó ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Ndétu ndósé ihe]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce wéfù ndétu nke ozi MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ilo.json b/includes/installer/i18n/ilo.json
new file mode 100644 (file)
index 0000000..9ad0c99
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Sibaballigi a nainstolar ti MediaWiki.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/io.json b/includes/installer/i18n/io.json
new file mode 100644 (file)
index 0000000..fe5c494
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Wyvernoid"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki instalesis sucese.'''",
+    "mainpagedocfooter": "Videz la [//meta.wikimedia.org/wiki/Help:Contents Guidilo por Uzanti] por informo pri uzar la wiki programo.\n\n== Komencar ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Listo di ''Configuration setting'']\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki OQQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki nova versioni posto-listo]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/is.json b/includes/installer/i18n/is.json
new file mode 100644 (file)
index 0000000..1c3f99a
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Uppsetning á MediaWiki heppnaðist.'''",
+    "mainpagedocfooter": "Ráðfærðu þig við [//meta.wikimedia.org/wiki/Help:Contents Notandahandbókina] fyrir frekari upplýsingar um notkun wiki-hugbúnaðarins.\n\n== Fyrir byrjendur ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Listi yfir uppsetningarstillingar]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki Algengar spurningar MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Póstlisti MediaWiki-útgáfa]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/it.json b/includes/installer/i18n/it.json
new file mode 100644 (file)
index 0000000..bf679e3
--- /dev/null
@@ -0,0 +1,234 @@
+{
+    "@metadata": {
+        "authors": [
+            "Beta16",
+            "Darth Kule",
+            "F. Cosoleto",
+            "Gianfranco",
+            "Karika",
+            "아라"
+        ]
+    },
+    "config-desc": "Il programma di installazione per MediaWiki",
+    "config-title": "Installazione MediaWiki $1",
+    "config-information": "Informazioni",
+    "config-localsettings-upgrade": "È stato rilevato un file <code>LocalSettings.php</code>.\nPer aggiornare questa installazione, si prega di inserire il valore di <code>$wgUpgradeKey</code> nella casella qui sotto.\nLo potete trovare in <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "È stato rilevato un file <code>LocalSettings.php</code>.\nPer aggiornare questa installazione, eseguire <code>update.php</code>",
+    "config-localsettings-key": "Chiave di aggiornamento:",
+    "config-localsettings-badkey": "La chiave che hai fornito non è corretta.",
+    "config-upgrade-key-missing": "È stata rilevata un'installazione esistente di MediaWiki.\nPer aggiornare questa installazione, si prega di inserire la seguente riga nella parte inferiore del tuo <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "Il file <code>LocalSettings.php</code> esistente sembra essere incompleto.\nLa variabile $1 non è impostata.\nCambia <code>LocalSettings.php</code> in modo che questa variabile sia impostata e fai clic su \"{{int:Config-continue}}\".",
+    "config-localsettings-connection-error": "Si è verificato un errore durante la connessione al database utilizzando le impostazioni specificate in <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Si prega di correggere queste impostazioni e riprovare.\n\n$1",
+    "config-session-error": "Errore nell'avvio della sessione: $1",
+    "config-session-expired": "I dati della sessione sembrano essere scaduti.\nLe sessioni sono configurate per una durata di $1.\nPuoi aumentarla impostando <code>session.gc_maxlifetime</code> nel file php.ini.\nRiavvia il processo di installazione.",
+    "config-no-session": "I dati della sessione sono andati persi!\nControlla il tuo file php.ini ed assicurati che <code>session.save_path</code> è impostato su una directory appropriata.",
+    "config-your-language": "La tua lingua:",
+    "config-your-language-help": "Seleziona una lingua da utilizzare durante il processo di installazione.",
+    "config-wiki-language": "La lingua del wiki:",
+    "config-wiki-language-help": "Seleziona la lingua che verrà prevalentemente usata nel wiki.",
+    "config-back": "← Indietro",
+    "config-continue": "Continua →",
+    "config-page-language": "Lingua",
+    "config-page-welcome": "Benvenuti in MediaWiki!",
+    "config-page-dbconnect": "Connessione al database",
+    "config-page-upgrade": "Aggiornamento dell'installazione esistente",
+    "config-page-dbsettings": "Impostazioni del database",
+    "config-page-name": "Nome",
+    "config-page-options": "Opzioni",
+    "config-page-install": "Installa",
+    "config-page-complete": "Completa!",
+    "config-page-restart": "Riavvio installazione",
+    "config-page-readme": "Leggimi",
+    "config-page-releasenotes": "Note di versione",
+    "config-page-upgradedoc": "Aggiornamento",
+    "config-page-existingwiki": "Wiki esistenti",
+    "config-help-restart": "Vuoi cancellare tutti i dati salvati che hai inserito e riavviare il processo di installazione?",
+    "config-restart": "Sì, riavvia",
+    "config-welcome": "=== Controllo dell'ambiente ===\nSaranno eseguiti controlli di base per vedere se questo ambiente è adatto per l'installazione di MediaWiki.\nRicordati di includere queste informazioni se chiedi assistenza su come completare l'installazione.",
+    "config-sidebar": "* [//www.mediawiki.org Pagina principale MediaWiki]\n* [//www.mediawiki.org/wiki/Aiuto:Guida ai contenuti per utenti]\n* [//www.mediawiki.org/wiki/Manuale:Guida ai contenuti per admin]\n* [//www.mediawiki.org/wiki/Manuale:FAQ FAQ]\n----\n* <doclink href=Readme>Leggimi</doclink>\n* <doclink href=ReleaseNotes>Note di versione</doclink>\n* <doclink href=Copying>Copie</doclink>\n* <doclink href=UpgradeDoc>Aggiornamenti</doclink>",
+    "config-env-good": "L'ambiente è stato controllato.\nÈ possibile installare MediaWiki.",
+    "config-env-bad": "L'ambiente è stato controllato.\nNon è possibile installare MediaWiki.",
+    "config-env-php": "PHP $1 è installato.",
+    "config-env-php-toolow": "PHP $1 è installato.\nTuttavia, MediaWiki richiede PHP $2 o superiore.",
+    "config-outdated-sqlite": "'''Attenzione''': è presente SQLite $1 mentre è richiesta la versione $2, SQLite non sarà disponibile.",
+    "config-no-fts3": "'''Attenzione''': SQLite è compilato senza il [//sqlite.org/fts3.html modulo FTS3], le funzionalità di ricerca non saranno disponibili su questo backend.",
+    "config-xml-bad": "Il modulo XML di PHP è mancante.\nMediaWIki necessita di funzioni presenti in questo modulo e non funzionerà con la configurazione corrente.\nSe si sta eseguendo Mandrake, installare il paccketto php-xml.",
+    "config-pcre": "Il modulo per il supporto PCRE sembra essere mancante.\nMediaWiki necessita di questo modulo per funzinare, che fornisce funzioni per le espressioni regolari Perl-compatibili.",
+    "config-pcre-no-utf8": "'''Errore''': Il modulo PCRE di PHP sembra essere stato compilato senza il supporto PCRE_UTF8, ma MediaWiki lo richiede per funzionare correttamente.",
+    "config-memory-raised": "Il valore <code>memory_limit</code> di PHP è $1, aumentato a $2.",
+    "config-memory-bad": "''Attenzione:''' Il valore di <code>memory_limit</code> di PHP è $1.\nProbabilmente è troppo basso.\nL'installazione potrebbe non riuscire!",
+    "config-ctype": "'''Errore''': PHP deve essere compilato con il supporto per l'[http://www.php.net/manual/it/ctype.installation.php estensione Ctype].",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] è installato",
+    "config-apc": "[http://www.php.net/apc APC] è installato",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] è installato",
+    "config-no-cache": "'''Attenzione:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache] non sono stati trovati.\nLa caching degli oggetti non è attivata.",
+    "config-diff3-bad": "GNU diff3 non trovato.",
+    "config-git": "Trovato software di controllo della versione Git: <code>$1</code>.",
+    "config-git-bad": "Software di controllo della versione Git non trovato.",
+    "config-imagemagick": "Trovato ImageMagick: <code>$1</code>.\nLe miniature delle immagini saranno presenti se gli upload vengono abilitati.",
+    "config-gd": "Trovata la GD Graphics Library built-in.\nLe miniature delle immagini saranno presenti se gli upload vengono abilitati.",
+    "config-no-scaling": "Impossibile trovare GD library o ImageMagick.\nLe miniature delle immagini saranno disabilitate.",
+    "config-no-uri": "'''Errore:''' Impossibile determinare l'URI attuale.\nInstallazione interrotta.",
+    "config-no-cli-uri": "'''Attenzione''': --scriptpath non specificato, si utilizza il valore predefinito: <code>$1</code>.",
+    "config-using-server": "Nome server in uso \"<nowiki>$1</nowiki>\".",
+    "config-using-uri": "URL del server in uso \"<nowiki>$1$2</nowiki>\".",
+    "config-brokenlibxml": "Il tuo sistema ha una combinazione di versioni di PHP e libxml2 che è difettosa e che può provocare un danneggiamento non visibile di dati in MediaWiki ed in altre applicazioni per il web.\nAggiorna a PHP 5.2.9 o successivo, ed a libxml2 2.7.3 o successivo ([//bugs.php.net/bug.php?id=45996 il bug è studiato dal lato PHP]).\nInstallazione interrotta.",
+    "config-using531": "MediaWiki non può essere usato con il PHP $1 a causa di un bug che coinvolge i parametri di riferimento a <code>__call()</code>.\nAggiorna a PHP 5.3.2 o superiore, o fai un downgrade tornando a PHP 5.3.0 per risolvere il problema.\nInstallazione interrotta.",
+    "config-db-type": "Tipo di database:",
+    "config-db-host": "Host del database:",
+    "config-db-host-help": "Se il server del tuo database è su un server diverso, immetti qui il nome dell'host o il suo indirizzo IP.\n\nSe stai utilizzando un web hosting condiviso, il tuo hosting provider dovrebbe fornirti il nome host corretto nella sua documentazione.\n\nSe stai installando su un server Windows con uso di MySQL, l'uso di \"localhost\" potrebbe non funzionare correttamente come nome del server. In caso di problemi, prova a impostare \"127.0.0.1\" come indirizzo IP locale.\n\nSe usi PostgreSQL, lascia questo campo vuoto per consentire di connettersi tramite un socket Unix.",
+    "config-db-host-oracle": "TNS del database:",
+    "config-db-wiki-settings": "Identifica questo wiki",
+    "config-db-name": "Nome del database:",
+    "config-db-name-help": "Scegli un nome che identifica il tuo wiki.\nNon deve contenere spazi.\n\nSe utilizzi un web hosting condiviso, il tuo hosting provider o ti fornisce uno specifico nome di database da utilizzare, oppure ti consentirà di creare il database tramite un pannello di controllo.",
+    "config-db-name-oracle": "Schema del database:",
+    "config-db-install-account": "Account utente per l'installazione",
+    "config-db-username": "Nome utente del database:",
+    "config-db-password": "Password del database:",
+    "config-db-password-empty": "Inserire una password per il nuovo utente del database: $1.\nAnche se può essere possibile creare utenti senza password, questo non è sicuro.",
+    "config-db-install-username": "Inserisci il nome utente che verrà utilizzato per connettersi al database durante il processo di installazione.\nQuesto non è il nome utente dell'account MediaWiki; ma quello per il tuo database.",
+    "config-db-install-password": "Inserisci la password che verrà utilizzato per connettersi al database durante il processo di installazione.\nQuesta non è la password dell'account MediaWiki; ma quella per il tuo database.",
+    "config-db-install-help": "Inserire il nome utente e la password che verranno usate per la connessione al database durante il processo d'installazione.",
+    "config-db-account-lock": "Utilizza lo stesso nome utente e password durante il normale funzionamento",
+    "config-db-wiki-account": "Account utente per il normale funzionamento",
+    "config-db-wiki-help": "Inserisci il nome utente e la password che verrà utilizzato per connettersi al database durante il normale funzionamento del wiki.\nSe l'account non esiste, e l'account di installazione dispone di privilegi sufficienti, verrà creato con privilegi minimi necessari per operare sul wiki.",
+    "config-db-prefix": "Prefisso tabella del database:",
+    "config-db-prefix-help": "Se hai bisogno di condividere un database tra più wiki, o tra MediaWiki e un'altra applicazione web, puoi scegliere di aggiungere un prefisso a tutti i nomi di tabella, per evitare conflitti.\nNon utilizzare spazi.\n\nSolitamente, questo campo viene lasciato vuoto.",
+    "config-db-charset": "Set di caratteri del database",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binario",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 con compatibilità UTF-8",
+    "config-mysql-old": "MySQL $1 o una versione successiva è necessaria, rilevata la $2.",
+    "config-db-port": "Porta del database:",
+    "config-db-schema": "Schema per MediaWiki:",
+    "config-db-schema-help": "Questo schema in genere andrà bene.\nDa cambiare solamente se si è sicuri di averne bisogno.",
+    "config-pg-test-error": "Impossibile connettersi al database '''$1''': $2",
+    "config-sqlite-dir": "Directory data di SQLite:",
+    "config-oracle-def-ts": "Tablespace di default:",
+    "config-oracle-temp-ts": "Tablespace temporaneo:",
+    "config-support-info": "MediaWiki supporta i seguenti sistemi di database:\n\n$1\n\nSe fra quelli elencati qui sotto non vedi il sistema di database che vorresti utilizzare, seguire le istruzioni linkate sopra per abilitare il supporto.",
+    "config-support-mysql": "* $1 è la configurazione preferibile per MediaWiki ed è quella meglio supportata ([http://www.php.net/manual/en/mysql.installation.php come compilare PHP con supporto MySQL])",
+    "config-header-mysql": "Impostazioni MySQL",
+    "config-header-postgres": "Impostazioni PostgreSQL",
+    "config-header-sqlite": "Impostazioni SQLite",
+    "config-header-oracle": "Impostazioni Oracle",
+    "config-invalid-db-type": "Tipo di database non valido",
+    "config-missing-db-name": "È necessario immettere un valore per \"Nome del database\"",
+    "config-missing-db-host": "È necessario immettere un valore per \"Host del database\"",
+    "config-missing-db-server-oracle": "È necessario immettere un valore per \"TNS del database\"",
+    "config-invalid-db-name": "Nome di database \"$1\" non valido.\nUtilizza soltanto caratteri ASCII come lettere (a-z, A-Z), numeri (0-9), sottolineatura (_) e trattini (-).",
+    "config-invalid-db-prefix": "Prefisso database \"$1\" non valido.\nUtilizza soltanto caratteri ASCII come lettere (a-z, A-Z), numeri (0-9), sottolineatura (_) e trattini (-).",
+    "config-connection-error": "$1.\n\nControlla host, nome utente e password e prova ancora.",
+    "config-db-sys-create-oracle": "Il programma di installazione supporta solo l'utilizzo di un account SYSDBA per la creazione di un nuovo account.",
+    "config-db-sys-user-exists-oracle": "L'account utente \"$1\" esiste già. SYSDBA può essere usato solo per la creazione di un nuovo account!",
+    "config-postgres-old": "PostgreSQL $1 o una versione successiva è necessaria, rilevata la $2.",
+    "config-sqlite-name-help": "Scegli un nome che identifichi il tuo wiki.\nNon utilizzare spazi o trattini.\nQuesto servirà per il nome del file di dati SQLite.",
+    "config-sqlite-mkdir-error": "Errore durante la creazione della directory dati \"$1\".\nControlla la posizione e riprova.",
+    "config-sqlite-dir-unwritable": "Impossibile scrivere nella directory \"$1\".\nModifica le autorizzazioni in modo che il webserver possa scrivere in essa e riprova.",
+    "config-sqlite-connection-error": "$1.\n\nControlla la directory dati e il nome del database qui sotto, poi riprova.",
+    "config-sqlite-readonly": "Il file <code>$1</code> non è scrivibile.",
+    "config-sqlite-cant-create-db": "Impossibile creare il file di database <code>$1</code> .",
+    "config-sqlite-fts3-downgrade": "Il PHP è mancante del supporto FTS3, declassamento tabelle in corso",
+    "config-can-upgrade": "Ci sono tabelle di MediaWiki in questo database.\nPer aggiornarle a MediaWiki $1, fai clic su '''continua'''.",
+    "config-upgrade-done": "Aggiornamento completo.\n\nPuoi [$1 iniziare ad usare il tuo wiki].\n\nSe vuoi rigenerare il tuo file <code>LocalSettings.php</code>, clicca sul pulsante sotto. Questa operazione '''non è raccomandata''', a meno che non hai problemi con il tuo wiki.",
+    "config-upgrade-done-no-regenerate": "Aggiornamento completo.\n\nPuoi [$1 iniziare ad usare il tuo wiki].",
+    "config-regenerate": "Rigenera LocalSettings.php →",
+    "config-show-table-status": "La query <code>SHOW TABLE STATUS</code> è fallita!",
+    "config-unknown-collation": "'''Attenzione:''' il database utilizza regole di confronto non riconosciute.",
+    "config-db-web-account": "Account del database per l'accesso web",
+    "config-db-web-help": "Seleziona il nome utente e la password che il server web utilizzerà per connettersi al server di database, durante il normale funzionamento del wiki.",
+    "config-db-web-account-same": "Utilizza lo stesso account dell'installazione",
+    "config-db-web-create": "Crea l'account se non esiste già",
+    "config-db-web-no-create-privs": "L'account usato per l'installazione non dispone dei privilegi necessari per creare un altro account.\nL'account indicato qui deve già esistere.",
+    "config-mysql-engine": "Storage engine:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-charset": "Set di caratteri del database:",
+    "config-mysql-binary": "Binario",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Nome del wiki:",
+    "config-site-name-help": "Questo verrà visualizzato nella barra del titolo del browser e in vari altri posti.",
+    "config-site-name-blank": "Inserisci il nome del sito.",
+    "config-project-namespace": "Namespace del progetto:",
+    "config-ns-generic": "Progetto",
+    "config-ns-site-name": "Stesso nome del wiki: $1",
+    "config-ns-other": "Altro (specificare)",
+    "config-ns-other-default": "MyWiki",
+    "config-admin-box": "Account amministratore",
+    "config-admin-name": "Tuo nome:",
+    "config-admin-password": "Password:",
+    "config-admin-password-confirm": "Ripeti la password:",
+    "config-admin-help": "Inserisci il tuo nome utente scelto qui, ad esempio \"Mario Rossi\".\nQuesto è il nome che userai per accedere al wiki.",
+    "config-admin-name-blank": "Inserisci un nome utente per l'amministratore.",
+    "config-admin-name-invalid": "Il nome utente specificato \"<nowiki>$1</nowiki>\" non è valido.\nSpecificare un nome utente diverso.",
+    "config-admin-password-blank": "Inserisci una password per l'account di amministratore.",
+    "config-admin-password-same": "La password non deve essere uguale al nome utente.",
+    "config-admin-password-mismatch": "Le password inserite non coincidono tra loro.",
+    "config-admin-email": "Indirizzo e-mail:",
+    "config-admin-error-bademail": "È stato inserito un indirizzo email non valido.",
+    "config-subscribe-help": "Si tratta di una mailing list a basso traffico dedicata agli annunci di nuove versioni, compresi importanti segnalazioni riguardanti la sicurezza.\nÈ consigliato iscriversi e aggiornare la proprio installazione di MediaWiki quando una nuova versione viene resa pubblica.",
+    "config-subscribe-noemail": "Hai provato ad iscriverti alla mailing list dedicata agli annunci delle nuove versioni senza fornire un indirizzo email.\nInserire un indirizzo email se si desidera effettuare l'iscrizione alla mailing list.",
+    "config-almost-done": "Hai quasi finito!\nAdesso puoi saltare la rimanente parte della configurazione e semplicemente installare la wiki.",
+    "config-optional-continue": "Fammi altre domande.",
+    "config-optional-skip": "Sono già stanco, installa solo il wiki.",
+    "config-profile": "Profilo dei diritti utente:",
+    "config-profile-wiki": "Wiki aperto",
+    "config-profile-no-anon": "Creazione utenza obbligatoria",
+    "config-profile-fishbowl": "Solo editori autorizzati",
+    "config-profile-private": "Wiki privata",
+    "config-license": "Copyright e licenza:",
+    "config-license-none": "Nessun piè di pagina per la licenza",
+    "config-license-cc-by-sa": "Creative Commons Attribuzione-Condividi allo stesso modo",
+    "config-license-cc-by": "Creative Commons Attribuzione",
+    "config-license-cc-by-nc-sa": "Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo",
+    "config-license-cc-0": "Creative Commons Zero (pubblico dominio)",
+    "config-license-gfdl": "GNU Free Documentation License 1.3 o versioni successive",
+    "config-license-pd": "Pubblico dominio",
+    "config-license-cc-choose": "Seleziona una delle licenze Creative Commons",
+    "config-license-help": "Molti wiki pubblici rilasciano i loro contributi con una [http://freedomdefined.org/Definition licenza libera]. Questo aiuta a creare un senso di proprietà condivisa nella comunità e incoraggia a contribuire a lungo termine. Non è generalmente necessario per un wiki privato o aziendale.\n\nSe vuoi usare testi da Wikipedia, o desideri che Wikipedia possa essere in grado di accettare testi copiati dal tuo wiki, dovresti scegliere '''Creative Commons Attribution Share Alike'''.\n\nIn precedenza Wikipedia ha utilizzato la GNU Free Documentation License. La GFDL è una licenza valida, ma è di difficile comprensione e complica il riutilizzo dei contenuti.",
+    "config-email-settings": "Impostazioni email",
+    "config-enable-email": "Abilita la posta elettronica in uscita",
+    "config-email-user": "Abilita invio email fra utenti",
+    "config-email-usertalk": "Abilita le notifiche per le pagine di discussione utente",
+    "config-email-watchlist": "Abilita le notifiche per gli osservati speciali",
+    "config-email-auth": "Abilita autenticazione via email",
+    "config-email-sender": "Indirizzo email di ritorno:",
+    "config-upload-settings": "Caricamenti di immagini e file",
+    "config-upload-enable": "Consentire il caricamento di file",
+    "config-upload-deleted": "Directory per i file cancellati:",
+    "config-logo": "URL del logo:",
+    "config-instantcommons": "Abilita Instant Commons",
+    "config-cc-again": "Seleziona di nuovo...",
+    "config-cc-not-chosen": "Scegliere quale licenza Creative Commons si desidera e cliccare su \"procedi\".",
+    "config-advanced-settings": "Configurazione avanzata",
+    "config-memcached-servers": "Server di memcached:",
+    "config-memcache-needservers": "È stato selezionato il tipo di caching Memcached, ma non è stato impostato alcun server.",
+    "config-memcache-badip": "È stato inserito un indirizzo IP non valido per Memcached: $1.",
+    "config-memcache-badport": "I numeri di porta per memcached dovrebbero essere tra $1 e $2.",
+    "config-extensions": "Estensioni",
+    "config-install-step-done": "fatto",
+    "config-install-step-failed": "non riuscito",
+    "config-install-database": "Configurazione database",
+    "config-install-schema": "Creazione dello schema",
+    "config-install-user": "Creazione di utente del database",
+    "config-install-user-alreadyexists": "L'utente \"$1\" è già presente",
+    "config-install-user-create-failed": "Creazione dell'utente \"$1\" non riuscita: $2",
+    "config-install-user-missing": "L'utente indicato \"$1\" non esiste.",
+    "config-install-tables": "Creazione tabelle",
+    "config-install-tables-failed": "'''Errore''': La creazione della tabella non è riuscita: $1",
+    "config-install-interwiki": "Riempimento della tabella interwiki predefinita",
+    "config-install-interwiki-list": "Impossibile leggere il file <code>interwiki.list</code>.",
+    "config-install-stats": "Inizializzazione delle statistiche",
+    "config-install-keys": "Generazione delle chiavi segrete",
+    "config-install-sysop": "Creazione dell'account utente per l'amministratore",
+    "config-install-subscribe-fail": "Impossibile sottoscrivere mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "cURL non è installato e allow_url_fopen non è disponibile.",
+    "config-install-mainpage": "Creazione della pagina principale con contenuto predefinito",
+    "config-install-extension-tables": "Creazione delle tabelle per le estensioni attivate",
+    "config-install-mainpage-failed": "Impossibile inserire la pagina principale: $1",
+    "config-download-localsettings": "Scarica <code>LocalSettings.php</code>",
+    "config-help": "aiuto",
+    "config-nofile": "Il file \"$1\" non può essere trovato. È stato eliminato?",
+    "mainpagetext": "'''Installazione di MediaWiki completata correttamente.'''",
+    "mainpagedocfooter": "Consultare la [//meta.wikimedia.org/wiki/Aiuto:Sommario Guida utente] per maggiori informazioni sull'uso di questo software wiki.\n\n== Per iniziare ==\nI seguenti collegamenti sono in lingua inglese:\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Impostazioni di configurazione]\n* [//www.mediawiki.org/wiki/Manual:FAQ Domande frequenti su MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list annunci MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localizza MediaWiki nella tua lingua]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ja.json b/includes/installer/i18n/ja.json
new file mode 100644 (file)
index 0000000..8c868ee
--- /dev/null
@@ -0,0 +1,298 @@
+{
+    "@metadata": {
+        "authors": [
+            "Aphaia",
+            "Fryed-peach",
+            "Iwai.masaharu",
+            "Mizusumashi",
+            "Ninomy",
+            "Ohgi",
+            "Shirayuki",
+            "Whym",
+            "Yanajin66",
+            "青子守歌",
+            "아라"
+        ]
+    },
+    "config-desc": "MediaWiki のインストーラー",
+    "config-title": "MediaWiki $1 のインストール",
+    "config-information": "情報",
+    "config-localsettings-upgrade": "ファイル <code>LocalSettings.php</code> を検出しました。\nインストールされているものをアップグレードするには、<code>$wgUpgradeKey</code> の値を以下の欄に入力してください。\nこの値は <code>LocalSettings.php</code> 内にあります。",
+    "config-localsettings-cli-upgrade": "ファイル <code>LocalSettings.php</code> を検出しました。\nインストールされているものをアップグレードするには、<code>update.php</code> を実行してください",
+    "config-localsettings-key": "アップグレード キー:",
+    "config-localsettings-badkey": "与えられたキーが間違っています",
+    "config-upgrade-key-missing": "MediaWiki が既にインストールされていることを検出しました。\nインストールされているものをアップグレードするために、以下の行を <code>LocalSettings.php</code> の末尾に挿入してください:\n\n$1",
+    "config-localsettings-incomplete": "既存の <code>LocalSettings.php</code> の内容は不完全のようです。\n変数 $1 が設定されていません。\n<code>LocalSettings.php</code> 内でこの変数を設定して、「{{int:Config-continue}}」をクリックしてください。",
+    "config-localsettings-connection-error": "<code>LocalSettings.php</code> または <code>AdminSettings.php</code> で指定した設定を使用してデータベースに接続する際にエラーが発生しました。\n設定を修正してから再度試してください。\n\n$1",
+    "config-session-error": "セッションの開始エラー: $1",
+    "config-session-expired": "セッションの有効期限が切れたようです。\nセッションの有効期間は$1に設定されています。\nphp.iniの<code>session.gc_maxlifetime</code>を設定することで、この問題を改善できます。\nインストール作業を再起動させてください。",
+    "config-no-session": "セッションのデータが消失しました!\nphp.ini 内で <code>session.save_path</code> が適切なディレクトリに設定されていることを確認してください。",
+    "config-your-language": "あなたの言語:",
+    "config-your-language-help": "インストール作業に使用する言語を選択してください。",
+    "config-wiki-language": "ウィキの言語:",
+    "config-wiki-language-help": "ウィキで主に書き込まれる言語を選択してください。",
+    "config-back": "← 戻る",
+    "config-continue": "続行 →",
+    "config-page-language": "言語",
+    "config-page-welcome": "MediaWiki へようこそ!",
+    "config-page-dbconnect": "データベースに接続",
+    "config-page-upgrade": "既存のインストールを更新",
+    "config-page-dbsettings": "データベースの設定",
+    "config-page-name": "名前",
+    "config-page-options": "オプション",
+    "config-page-install": "インストール",
+    "config-page-complete": "完了!",
+    "config-page-restart": "インストールを再起動",
+    "config-page-readme": "お読みください",
+    "config-page-releasenotes": "リリースノート",
+    "config-page-copying": "コピー",
+    "config-page-upgradedoc": "アップグレード",
+    "config-page-existingwiki": "既存のウィキ",
+    "config-help-restart": "入力した保存データをすべて消去して、インストール作業を再起動しますか?",
+    "config-restart": "はい、再起動します",
+    "config-welcome": "=== 環境の確認 ===\n基本的な確認では、現在の環境が MediaWiki のインストールに適しているかを確認します。\nインストール方法について助けが必要になった場合は、必ずこの確認結果を添えてください。",
+    "config-copyright": "=== 著作権および規約 ===\n$1\n\nこの作品はフリーソフトウェアです。あなたは、フリーソフトウェア財団の発行するGNU一般公衆利用許諾書 (GNU General Public License) (バージョン2、またはそれ以降のライセンス) の規約に基づき、このライブラリを再配布および改変できます。\n\nこの作品は、有用であることを期待して配布されていますが、商用あるいは特定の目的に適するかどうかも含めて、暗黙的にも、一切保証されません。\n詳しくは、GNU一般公衆利用許諾書をご覧ください。\n\nあなたはこのプログラムと共に、<doclink href=Copying>GNU一般公衆利用許諾契約書の複製</doclink>を一部受け取ったはずです。受け取っていない場合は、フリーソフトウェア財団 (宛先は the Free Software Foundation, Inc., 59Temple Place, Suite 330, Boston, MA 02111-1307 USA) まで請求してください。",
+    "config-sidebar": "* [//www.mediawiki.org MediaWikiのホーム]\n* [//www.mediawiki.org/wiki/Help:Contents 利用者向け案内]\n* [//www.mediawiki.org/wiki/Manual:Contents 管理者向け案内]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>お読みください</doclink>\n* <doclink href=ReleaseNotes>リリースノート</doclink>\n* <doclink href=Copying>コピー</doclink>\n* <doclink href=UpgradeDoc>アップグレード</doclink>",
+    "config-env-good": "環境の確認が終わりました。\nMediaWikiをインストールできます。",
+    "config-env-bad": "環境の確認が終わりました。\nMediaWikiのインストールはできません。",
+    "config-env-php": "PHP $1がインストールされています。",
+    "config-env-php-toolow": "PHP $1 がインストールされています。\nしかし、MediaWikiには PHP $2 以上が必要です。",
+    "config-unicode-using-utf8": "Unicode正規化に、Brion Vibberのutf8_normalize.soを使用。",
+    "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 の実装を代わりに使用しています。\n高トラフィックのサイトを運営する場合は、[//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode 正規化]をお読みください。",
+    "config-unicode-update-warning": "'''警告:''' インストールされているバージョンの Unicode 正規化ラッパーは、[http://site.icu-project.org/ ICU プロジェクト]のライブラリの古いバージョンを使用しています。\nUnicode を少しでも利用する可能性がある場合は、[//www.mediawiki.org/wiki/Unicode_normalization_considerations アップグレード]してください。",
+    "config-no-db": "適切なデータベース ドライバーが見つかりませんでした! PHP にデータベース ドライバーをインストールする必要があります。\n以下の種類のデータベースに対応しています: $1\n\n共有サーバーを使用している場合は、適切なデータベース ドライバーのインストールを、サーバーの管理者に依頼してください。\nPHP を自分でコンパイルした場合は、例えば <code>./configure --with-mysql</code> を実行して、データベース クライアントを使用できるように再設定してください。\nDebian または Ubuntu のパッケージから PHP をインストールした場合は、php5-mysql モジュールもインストールする必要があります。",
+    "config-outdated-sqlite": "'''警告:''' あなたは SQLite $1 を使用していますが、最低限必要なバージョン $2 より古いバージョンです。SQLite は利用できません。",
+    "config-no-fts3": "'''警告:''' SQLite は [//sqlite.org/fts3.html FTS3] モジュールなしでコンパイルされており、このバックエンドでは検索機能は利用できなくなります。",
+    "config-register-globals": "'''警告: PHP の <code>[http://php.net/register_globals register_globals]</code> オプションが有効になっています。'''\n'''可能なら無効化してください。'''\nMediaWiki は動作しますが、サーバーの潜在的なセキュリティ脆弱性が露呈されます。",
+    "config-magic-quotes-runtime": "'''致命的エラー: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] が動作しています!'''\nこのオプションは、予期せずデータ入力を破壊します。\nこのオプションを無効化しない限り、MediaWiki のインストールや使用はできません。",
+    "config-magic-quotes-sybase": "'''致命的エラー: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] が動作しています!'''\nこのオプションは、予期せずデータ入力を破壊します。\nこのオプションを無効化しない限り、MediaWiki のインストールや使用はできません。",
+    "config-mbstring": "'''致命的エラー: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] が動作しています!'''\nこのオプションは、エラーを引き起こし、予期せずデータを破壊するおそれがあります。\nこのオプションを無効化しない限り、MediaWiki のインストールや使用はできません。",
+    "config-ze1": "'''致命的エラー: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] が動作しています!'''\nこのオプションは、MediaWiki において深刻なバグを引き起こします。\nこのオプションを無効化しない限り、MediaWiki のインストールや使用はできません。",
+    "config-safe-mode": "'''警告:''' PHPの[http://www.php.net/features.safe-mode セーフモード]が有効になっています。\n特に、ファイルのアップロードや<code>math</code>機能で、問題が発生するおそれがあります。",
+    "config-xml-bad": "PHPのXMLモジュールが不足しています。\nMediaWikiは、このモジュールの関数を必要としているため、この構成では動作しません。\nMandrakeを実行している場合、php-xmlパッケージをインストールしてください。",
+    "config-pcre": "PCREをサポートしているモジュールが不足しているようです。\nMediaWikiは、Perl互換の正規表現関数の動作が必要です。",
+    "config-pcre-no-utf8": "'''致命的エラー:''' PHP の PCRE が PCRE_UTF8 対応なしでコンパイルされているようです。\nMediaWiki を正しく動作させるには、UTF-8 対応が必要です。",
+    "config-memory-raised": "PHPの<code>memory_limit</code>は$1で、$2に引き上げられました。",
+    "config-memory-bad": "'''警告:''' PHPの<code>memory_limit</code>に$1に設定されています。\nこの値はおそらく小さすぎます。\nインストールが失敗するおそれがあります!",
+    "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] のいずれも見つかりませんでした。\nオブジェクトのキャッシュは有効化されません。",
+    "config-diff3-bad": "GNU diff3 が見つかりません。",
+    "config-git": "バージョン管理ソフトウェア Git が見つかりました: <code>$1</code>",
+    "config-git-bad": "バージョン管理ソフトウェア Git が見つかりません。",
+    "config-imagemagick": "ImageMagickが見つかりました: <code>$1</code>。\nアップロードが有効であれば、画像のサムネイルを利用できます。",
+    "config-gd": "GD画像ライブラリが内蔵されていることが確認されました。\nアップロードが有効なら、画像のサムネイルが利用できます。",
+    "config-no-scaling": "GDライブラリもImageMagickも見つかりませんでした。\n画像のサムネイル生成は無効になります。",
+    "config-no-uri": "'''エラー:''' 現在のURIを決定できませんでした。\nインストールは中止されました。",
+    "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> に、任意のスクリプト実行に関する脆弱性があります。\nMediaWiki はアップロードされたファイルのセキュリティ上の脅威を確認しますが、アップロードを有効化する前に、[//www.mediawiki.org/wiki/Manual:Security#Upload_security このセキュリティ上の脆弱性を解決する]ことを強く推奨します。",
+    "config-brokenlibxml": "このシステムで使われているPHPとlibxml2のバージョンのこの組み合わせにはバグがあります。具体的には、MediaWikiやその他のウェブアプリケーションでhiddenデータが破損する可能性があります。\nPHPを5.2.9かそれ以降のバージョンに、libxml2を2.7.3かそれ以降のバージョンにアップグレードしてください([//bugs.php.net/bug.php?id=45996 PHPでのバグ情報])。\nインストールを終了します。",
+    "config-using531": "PHP$1は<code>__call()</code>の引数参照に関するバグのため、MediaWikiと互換性がありません。\nPHP5.3.2以降に更新するか、この([//bugs.php.net/bug.php?id=50394 PHPに提出されたバグ])を修正するためにPHP5.3.0へ戻してください。\nインストールは中止されました。",
+    "config-suhosin-max-value-length": "Suhosin がインストールされており、GET パラメーターの <code>length</code> を $1 バイトに制限しています。\nMediaWiki の ResourceLoader コンポーネントはこの制限を回避しますが、パフォーマンスは低下します。\n可能な限り、<code>php.ini</code> で <code>suhosin.get.max_value_length</code> を 1024 以上に設定し、同じ値を <code>LocalSettings.php</code> 内で <code>$wgResourceLoaderMaxQueryLength</code> に設定してください。",
+    "config-db-type": "データベースの種類:",
+    "config-db-host": "データベースのホスト:",
+    "config-db-host-help": "異なるサーバー上にデータベースサーバーがある場合、ホスト名またはIPアドレスをここに入力してください。\n\nもし、共有されたウェブホスティングを使用している場合、ホスティングプロバイダーは正確なホスト名を解説しているはずです。\n\nWindowsでMySQLを使用している場合に、「localhost」は、サーバー名としてはうまく働かないでしょう。もしそのような場合は、ローカルIPアドレスとして「127.0.0.1」を試してみてください。\n\nPostgreSQLを使用している場合、UNIXソケットで接続するにはこの欄を空欄のままにしてください。",
+    "config-db-host-oracle": "データベース TNS:",
+    "config-db-host-oracle-help": "有効な[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm ローカル接続名]を入力してください。tnsnames.ora ファイルは、このインストール先から参照できる場所に置いてください。<br />ご使用中のクライアント ライブラリが 10g 以降の場合、[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] ネーミング メソッドを使用できます。",
+    "config-db-wiki-settings": "このウィキの識別情報",
+    "config-db-name": "データベース名:",
+    "config-db-name-help": "このウィキを識別する名前を入力してください。\n空白を含めることはできません。\n\n共有ウェブホストを利用している場合、ホスティングプロバイダーが特定の使用可能なデータベース名を提供するか、あるいは管理パネルからデータベースを作成できるようにしているでしょう。",
+    "config-db-name-oracle": "データベースのスキーマ:",
+    "config-db-install-account": "インストールで使用する利用者アカウント",
+    "config-db-username": "データベースのユーザー名:",
+    "config-db-password": "データベースのパスワード:",
+    "config-db-password-empty": "新しいデータベースの利用者名 $1 のパスワードを入力してください。\nパスワードを設定せずにユーザーを作成できる場合もありますが、安全ではありません。",
+    "config-db-install-username": "インストール中にデータベースへの接続で使用するユーザー名を入力してください。\nこれは MediaWiki アカウントの利用者名のことではありません。あなたのデータベースでのユーザー名です。",
+    "config-db-install-password": "インストール中にデータベースへの接続で使用するパスワードを入力してください。\nこれは MediaWiki アカウントのパスワードのことではありません。あなたのデータベースでのパスワードです。",
+    "config-db-install-help": "インストール作業中にデータベースに接続するための利用者名とパスワードを入力してください。",
+    "config-db-account-lock": "インストール作業終了後も同じ利用者名とパスワードを使用する",
+    "config-db-wiki-account": "インストール作業終了後の利用者アカウント",
+    "config-db-wiki-help": "通常のウィキ操作中にデータベースへの接続する時に利用する利用者名とパスワードを入力してください。\nアカウントが存在せず、インストールのアカウントに十分な権限がある場合は、この利用者アカウントは、ウィキを操作する上で最小限の権限を持った状態で作成されます。",
+    "config-db-prefix": "データベース テーブルの接頭辞:",
+    "config-db-prefix-help": "データベースを複数のウィキ間、あるいはMediaWikiと他のウェブアプリケーションで共有する必要がある場合、衝突を避けるために、すべてのテーブル名に接頭辞を付ける必要があります。\n空白は使用できません。\n\nこのフィールドは、通常は空のままです。",
+    "config-db-charset": "データベースの文字セット",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 バイナリ",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 後方互換 UTF-8",
+    "config-charset-help": "'''警告:''' MySQL 4.1+ で'''後方互換 UTF-8''' を使用している状態で、<code>mysqldump</code> でデータベースをバックアップすると、すべての非 ASCII 文字が破壊されてしまい、バックアップが不可逆的に破損してしまいます!\n\n'''バイナリ モード'''では、MediaWiki は、UTF-8 テキストをデータベースのバイナリ フィールドに格納します。\nこれは、MySQL の UTF-8 モードより効率的で、Unicode 文字の全範囲を利用できるようになります。\n'''UTF-8 モード'''では、MySQL は、データ内で使用している文字集合を知っているため、適切に表現や変換ができますが、\n[//ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 基本多言語面]の外にある文字を格納できません。",
+    "config-mysql-old": "MySQL $1 以降が必要です。ご使用中の MySQL は $2 です。",
+    "config-db-port": "データベースのポート:",
+    "config-db-schema": "MediaWiki のスキーマ:",
+    "config-db-schema-help": "通常はこのスキーマで問題ありません。\n必要な場合のみ変更してください。",
+    "config-pg-test-error": "データベース '''$1''' に接続できません: $2",
+    "config-sqlite-dir": "SQLite データ ディレクトリ:",
+    "config-sqlite-dir-help": "SQLite は単一のファイル内にすべてのデータを格納しています。\n\n指定したディレクトリは、インストール時にウェブ サーバーが書き込めるようにしておく必要があります。\n\nこのディレクトリはウェブからアクセス'''不可能'''である必要があります。PHP ファイルがある場所には配置できないのはこのためです。\n\nインストーラーは <code>.htaccess</code> ファイルにも書き込みます。しかし、これが失敗した場合は、誰かが生のデータベースにアクセスできてしまいます。\nデータベースは、生のデータ (メールアドレス、パスワードのハッシュ値) の他、削除された版、その他ウィキ上の制限されているデータを含んでいます。\n\n例えば <code>/var/lib/mediawiki/yourwiki</code> のように、別の場所にデータベースを配置することを検討してください。",
+    "config-oracle-def-ts": "既定のテーブル領域:",
+    "config-oracle-temp-ts": "一時的なテーブル領域:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "MediaWiki は以下のデータベース システムに対応しています:\n\n$1\n\n使用しようとしているデータベース システムが下記の一覧にない場合は、上記リンク先の手順に従ってインストールしてください。",
+    "config-support-mysql": "* $1はMediaWikiの主要な対象であり、最もサポートされています ([http://www.php.net/manual/en/mysql.installation.php MySQLに対応したPHPをコンパイルする方法])",
+    "config-support-postgres": "* $1は、MySQLの代替として人気があるオープンソースのデータベースシステムです ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQLに対応したPHPをコンパイルする方法])",
+    "config-support-sqlite": "* $1は、良くサポートされている、軽量データベースシステムです。([http://www.php.net/manual/ja/pdo.installation.php SQLiteに対応したPHPをコンパイルする方法]、PDOを使用)",
+    "config-support-oracle": "* $1は商業企業のデータベースです。([http://www.php.net/manual/en/oci8.installation.php OCI8サポートなPHPをコンパイルする方法])",
+    "config-header-mysql": "MySQL の設定",
+    "config-header-postgres": "PostgreSQL の設定",
+    "config-header-sqlite": "SQLite の設定",
+    "config-header-oracle": "Oracle の設定",
+    "config-invalid-db-type": "無効なデータベースの種類",
+    "config-missing-db-name": "「データベース名」を入力してください",
+    "config-missing-db-host": "「データベースのホスト」を入力してください",
+    "config-missing-db-server-oracle": "「データベース TNS」の値を入力してください",
+    "config-invalid-db-server-oracle": "「$1」は無効なデータベース TNS です。\n「TNS 名」「Easy Connect」文字列のいずれかを使用してください ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle ネーミング メソッド])",
+    "config-invalid-db-name": "「$1」は無効なデータベース名です。\n半角の英数字 (a-z、A-Z、0-9)、アンダースコア (_)、ハイフン (-) のみを使用してください。",
+    "config-invalid-db-prefix": "「$1」は無効なデータベース接頭辞です。\n半角の英数字 (a-z、A-Z、0-9)、アンダースコア (_)、ハイフン (-) のみを使用してください。",
+    "config-connection-error": "$1。\n\n以下のホスト名、ユーザー名、パスワードを確認してから再度試してください。",
+    "config-invalid-schema": "「$1」は MediaWiki のスキーマとして無効です。\n半角の英数字 (a-z、A-Z、0-9)、アンダースコア (_) のみを使用してください。",
+    "config-postgres-old": "PostgreSQL $1 以降が必要です。ご使用中の PostgreSQL は $2 です。",
+    "config-sqlite-name-help": "あなたのウェキと同一性のある名前を選んでください。\n空白およびハイフンは使用しないでください。\nSQLiteのデータファイル名として使用されます。",
+    "config-sqlite-parent-unwritable-group": "データ ディレクトリ <code><nowiki>$1</nowiki></code> を作成できません。ウェブ サーバーは親ディレクトリ <code><nowiki>$2</nowiki></code> に書き込めませんでした。\n\nインストーラーは、ウェブ サーバーの実行ユーザーを特定しました。\n続行するには、ディレクトリ <code><nowiki>$3</nowiki></code> に書き込めるようにしてください。\nUnix または Linux であれば、以下を実行してください:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "データ ディレクトリ <code><nowiki>$1</nowiki></code> を作成できません。ウェブ サーバーは、親ディレクトリ <code><nowiki>$2</nowiki></code> に書き込めませんでした。\n\nインストーラーは、ウェブ サーバーの実行ユーザーを特定できませんでした。\n続行するには、ディレクトリ <code><nowiki>$3</nowiki></code> に、ウェブ サーバー (と、あらゆる人々!) がグローバルに書き込めるようにしてください。\nUnix または Linux では、以下を実行してください:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "データ ディレクトリ「$1」を作成する際にエラーが発生しました。\n場所を確認してから、再度試してください。",
+    "config-sqlite-dir-unwritable": "ディレクトリ「$1」に書き込めません。\nウェブ サーバーが書き込めるようにパーミッションを変更してから、再度試してください。",
+    "config-sqlite-connection-error": "$1。\n\nデータ ディレクトリおよびデータベース名を確認してから、再度試してください。",
+    "config-sqlite-readonly": "ファイル <code>$1</code> に書き込めません。",
+    "config-sqlite-cant-create-db": "データベース ファイル <code>$1</code> を作成できませんでした。",
+    "config-sqlite-fts3-downgrade": "PHP が FTS3 に対応していないため、テーブルをダウングレードしています",
+    "config-can-upgrade": "このデータベースには MediaWiki テーブルがあります。\nこれらのテーブルを MediaWiki $1 にアップグレードするには、「続行」をクリックしてください。",
+    "config-upgrade-done": "更新は完了しました。\n\n[$1 ウィキを使い始める]ことができます。\n\n<code>LocalSettings.php</code> ファイルを再生成したい場合は、下のボタンを押してください。\nウィキに問題がある場合を除き、再生成は'''推奨されません'''。",
+    "config-upgrade-done-no-regenerate": "アップグレードが完了しました。\n\n[$1 ウィキの使用を開始]することができます。",
+    "config-regenerate": "LocalSettings.php を再生成→",
+    "config-show-table-status": "<code>SHOW TABLE STATUS</code> クエリが失敗しました!",
+    "config-unknown-collation": "'''警告:''' データベースは認識されない照合を使用しています。",
+    "config-db-web-account": "ウェブアクセスのためのデータベースアカウント",
+    "config-db-web-help": "ウィキの通常の操作の際に、ウェブ サーバーがデータベース サーバーに接続できるように、ユーザー名とパスワードを指定してください。",
+    "config-db-web-account-same": "インストール作業と同じアカウントを使用する",
+    "config-db-web-create": "アカウントが存在しない場合は作成する",
+    "config-db-web-no-create-privs": "あなたがインストールのために定義したアカウントは、アカウント作成のための特権としては不充分です。\nあなたがここで指定したアカウントは既に存在している必要があります。",
+    "config-mysql-engine": "ストレージ エンジン:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-engine-help": "'''InnoDB'''は、並行処理のサポートに優れているので、ほとんどの場合において最良の選択肢です。\n\n'''MyISAM'''は、利用者が1人の場合、あるいは読み込み専用でインストールする場合に、より処理が早くなるでしょう。\nただし、MyISAMのデータベースは、InnoDBより高頻度で破損する傾向があります。",
+    "config-mysql-charset": "データベースの文字セット:",
+    "config-mysql-binary": "バイナリ",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "'''バイナリ モード'''では、MediaWiki は、UTF-8 テキストをデータベースのバイナリ フィールドに格納します。\nこれは、MySQL の UTF-8 モードより効率的で、Unicode 文字の全範囲を利用できるようになります。\n\n'''UTF-8 モード'''では、MySQL は、データ内で使用している文字集合を知っているため、適切に表現や変換ができますが、\n[//ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 基本多言語面]の外にある文字を格納できません。",
+    "config-site-name": "ウィキ名:",
+    "config-site-name-help": "この事象はブラウザーのタイトルバーと他のさまざまな場所に現れる。",
+    "config-site-name-blank": "サイト名を入力してください。",
+    "config-project-namespace": "プロジェクト名前空間:",
+    "config-ns-generic": "プロジェクト",
+    "config-ns-site-name": "ウィキ名と同じ: $1",
+    "config-ns-other": "その他 (指定してください)",
+    "config-ns-other-default": "マイウィキ",
+    "config-project-namespace-help": "ウィキペディアの例に従い、多くのウィキは、コンテンツのページとは分離したポリシーページを「'''プロジェクトの名前空間'''」に持っています。\nこの名前空間内のページのページ名はすべて特定の接頭辞で始まります。それをここで指定できます。\n通常、この接頭辞はウィキ名に基づきますが、「#」や「:」のような区切り文字を含めることはできません。",
+    "config-ns-invalid": "指定した名前空間「<nowiki>$1</nowiki>」は無効です。\n別のプロジェクト名前空間を指定してください。",
+    "config-admin-box": "管理アカウント",
+    "config-admin-name": "名前:",
+    "config-admin-password": "パスワード:",
+    "config-admin-password-confirm": "パスワードの再入力:",
+    "config-admin-help": "希望するユーザー名をここに入力してください (例:「Joe Bloggs」)。\nこの名前でこのウィキにログインすることになります。",
+    "config-admin-name-blank": "管理者のユーザー名を入力してください。",
+    "config-admin-name-invalid": "指定したユーザー名「<nowiki>$1</nowiki>」は無効です。\n別のユーザー名を指定してください。",
+    "config-admin-password-blank": "管理者アカウントのパスワードを入力してください。",
+    "config-admin-password-same": "ユーザー名と同じパスワードは使用できません。",
+    "config-admin-password-mismatch": "入力された2つのパスワードが一致しません。",
+    "config-admin-email": "メールアドレス:",
+    "config-admin-email-help": "メールアドレスを入力してください。他の利用者からのメールの受け取り、パスワードのリセット、ウォッチリストに登録したページの更新通知に使用します。空欄のままにすることもできます。",
+    "config-admin-error-user": "「<nowiki>$1</nowiki>」という名前の管理者を作成する際に内部エラーが発生しました。",
+    "config-admin-error-password": "管理者「<nowiki>$1</nowiki>」のパスワードを設定する際に内部エラーが発生しました: <pre>$2</pre>",
+    "config-admin-error-bademail": "無効なメールアドレスを入力しました。",
+    "config-subscribe": "[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce リリース告知のメーリングリスト]を購読する。",
+    "config-subscribe-help": "これは、リリースの告知 (重要なセキュリティに関する案内を含む) に使用される、流量が少ないメーリングリストです。\nこのメーリングリストを購読して、新しいバージョンが出た場合にMediaWikiを更新してください。",
+    "config-almost-done": "これでほぼ終わりました!\n残りの設定を飛ばして、ウィキを今すぐインストールできます。",
+    "config-optional-continue": "私にもっと質問してください。",
+    "config-optional-skip": "もう飽きてしまったので、とにかくウィキをインストールしてください。",
+    "config-profile": "利用者権限のプロファイル:",
+    "config-profile-wiki": "公開ウィキ",
+    "config-profile-no-anon": "アカウントの作成が必要",
+    "config-profile-fishbowl": "承認された編集者のみ",
+    "config-profile-private": "非公開ウィキ",
+    "config-profile-help": "ウィキは、できるだけ多くの人が編集できるようにすると最も優れた働きをします。\nMediaWikiでは、最近の更新を確認しやすく、神経質な、または悪意を持った利用者からの損害を簡単に差し戻せます。\n\nしかし一方で、MediaWikiは、さらにさまざまな形態での利用も優れていると言われています。また、時には、すべての人にウィキ手法の利点を説得させるのは容易ではないかもしれません。\nそこで、選択肢があります。\n\n「'''{{int:config-profile-wiki}}'''」モデルでは、ログインしなくても、誰でも編集できます。\n「'''{{int:config-profile-no-anon}}'''」なウィキでは、各編集に対してより強い説明責任を付与しますが、気軽な投稿を阻害するかもしれません。\n\n「'''{{int:config-profile-fishbowl}}'''」シナリオでは、承認された利用者のみが編集でき、一般の人はページ (とその履歴) を閲覧できます。\n「'''{{int:config-profile-private}}'''」では、承認された利用者のみがページを閲覧でき、そのグループが編集できます。\n\nより複雑な利用者権限の設定は、インストール後に設定できます。詳細は[//www.mediawiki.org/wiki/Manual:User_rights 関連するマニュアル]をご覧ください。",
+    "config-license": "著作権とライセンス:",
+    "config-license-none": "ライセンスのフッターを付けない",
+    "config-license-cc-by-sa": "クリエイティブ・コモンズ 表示-継承",
+    "config-license-cc-by": "クリエイティブ・コモンズ 表示",
+    "config-license-cc-by-nc-sa": "クリエイティブ・コモンズ 表示-非営利-継承",
+    "config-license-gfdl": "GNU フリー文書利用許諾契約書 1.3 以降",
+    "config-license-pd": "パブリック・ドメイン",
+    "config-license-cc-choose": "その他のクリエイティブ・コモンズ・ライセンスを選択する",
+    "config-license-help": "多くの公開ウィキでは、すべての寄稿物が[http://freedomdefined.org/Definition フリーライセンス]のもとに置かれています。\nこうすることにより、コミュニティによる共有の感覚が生まれ、長期的な寄稿が促されます。\n私的ウィキや企業のウィキでは、通常、フリーライセンスにする必要はありません。\n\nウィキペディアにあるテキストをあなたのウィキで利用し、逆にあなたのウィキにあるテキストをウィキペディアに複製することを許可したい場合には、'''クリエイティブ・コモンズ 表示-継承'''を選択するべきです。\n\nウィキペディアは以前、GNUフリー文書利用許諾契約書(GFDL)を使用していました。\nGFDLは有効なライセンスですが、内容を理解するのは困難です。\nまた、GFDLのもとに置かれているコンテンツの再利用も困難です。",
+    "config-email-settings": "メールの設定",
+    "config-enable-email": "メール送信を有効にする",
+    "config-enable-email-help": "メールを使用したい場合は、[http://www.php.net/manual/en/mail.configuration.php PHP のメール設定]が正しく設定されている必要があります。\nメールの機能を使用しない場合は、ここで無効にすることができます。",
+    "config-email-user": "利用者間のメールを有効にする",
+    "config-email-user-help": "設定で有効になっている場合、すべてのユーザーがお互いにメールのやりとりを行うことを許可する。",
+    "config-email-usertalk": "ユーザーのトークページでの通知を有効にする",
+    "config-email-usertalk-help": "設定で有効にしている場合は、ユーザーのトークページの変更の通知を受けることをユーザーに許可する。",
+    "config-email-watchlist": "ウォッチリストの通知を有効にする",
+    "config-email-watchlist-help": "利用者が設定で有効にしている場合、閲覧されたページに関する通知を受け取ることを許可する。",
+    "config-email-auth": "メールの認証を有効にする",
+    "config-email-auth-help": "この選択肢を有効にすると、利用者がメールアドレスを設定あるいは変更したときに送信されるリンクにより、そのアドレスを確認しなければならなくなります。\n認証済みのアドレスだけが、他の利用者からのメールや、変更通知のメールを受け取ることができます。\n公開ウィキでは、メール機能による潜在的な不正利用の防止のため、この選択肢を設定することが'''推奨'''されます。",
+    "config-email-sender": "返信先メールアドレス:",
+    "config-email-sender-help": "送信メールで返信先として使用するメールアドレスを入力してください。\nこのアドレスは、宛先不明の場合の通知の宛先になります。\n多くのメールサーバーでは、少なくともドメイン名部分は有効である必要があります。",
+    "config-upload-settings": "画像およびファイルのアップロード",
+    "config-upload-enable": "ファイルのアップロードを有効にする",
+    "config-upload-help": "ファイルのアップロードは、あなたのサーバーをセキュリティ上の潜在的な危険に晒します。\nこの詳細は、マニュアルの [//www.mediawiki.org/wiki/Manual:Security security section] をお読みください。\n\nファイルのアップロードを有効にするには、MediaWiki のルート ディレクトリ内の <code>images</code> サブ ディレクトリのモードを変更します。これにより、ウェブ サーバーがそこに書き込めるようになります。\nそして、このオプションを有効にしてください。",
+    "config-upload-deleted": "削除されたファイルのためのディレクトリ:",
+    "config-upload-deleted-help": "削除されるファイルを保存するためのディレクトリを選択してください。\nこれがウェブからアクセスできないことが理想です。",
+    "config-logo": "ロゴ のURL:",
+    "config-logo-help": "MediaWiki の既定の外装では、サイドバー上部に135x160ピクセルのロゴ用の余白があります。\n適切なサイズの画像をアップロードして、その URL をここに入力してください。\n\nロゴが相対パスの場合は、<code>$wgStylePath</code> や <code>$wgScriptPath</code> を使用できます。\n\nロゴが不要の場合は、この欄を空白のままにしてください。",
+    "config-instantcommons": "Instant Commons 機能を有効にする",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] は、[//commons.wikimedia.org/ ウィキメディア・コモンズ]のサイトにある画像、音声、その他のメディアをウィキ上で利用できるようにする機能です。\nこれを使用するには、MediaWiki がインターネットに接続できる必要があります。\n\nウィキメディア・コモンズ以外のウィキを同様に設定する手順など、この機能に関する詳細な情報は、[//mediawiki.org/wiki/Manual:$wgForeignFileRepos マニュアル]をご覧ください。",
+    "config-cc-error": "クリエイティブ・コモンズ・ライセンスの選択器から結果が得られませんでした。\nライセンスの名前を手動で入力してください。",
+    "config-cc-again": "もう一度選択してください...",
+    "config-cc-not-chosen": "希望するクリエイティブ・コモンズのライセンスを選択して、「続行」をクリックしてください。",
+    "config-advanced-settings": "高度な設定",
+    "config-cache-options": "オブジェクトのキャッシュの設定:",
+    "config-cache-help": "オブジェクトのキャッシュを使用すると、頻繁に使用するデータをキャッシュするため MediaWiki の動作速度を改善できます。\n中〜大規模サイトではこれを有効にすることを強くお勧めします。小規模サイトでも同様に効果があります。",
+    "config-cache-none": "キャッシングしない(機能は取り払われます、しかもより大きなウィキサイト上でスピードの問題が発生します)",
+    "config-cache-accel": "PHP オブジェクト キャッシュ (APC、XCache、WinCache のいずれか)",
+    "config-cache-memcached": "memcached を使用 (追加の設定が必要)",
+    "config-memcached-servers": "memcached サーバー:",
+    "config-memcached-help": "Memcachedを使用するIPアドレスの一覧。\nカンマ区切りで、利用する特定のポートの指定が必要です。例:\n127.0.0.1:11211\n192.168.1.25:1234",
+    "config-memcache-noport": "Memcached サーバー $1 で使用するポート番号を指定していません。\nポート番号が分からない場合、既定値は 11211 です。",
+    "config-memcache-badport": "Memcached のポート番号は $1 から $2 の範囲にしてください。",
+    "config-extensions": "拡張機能",
+    "config-extensions-help": "<code>./extensions</code>ディレクトリ内で、上記リストの拡張機能が発見されました。\n\nこれらは更に多くの設定を要求するかもしれませんが、今これらを有効にすることができます。",
+    "config-install-alreadydone": "'''警告:''' 既にMediaWikiがインストール済みで、再びインストールし直そうとしています。\n次のページへ進んでください。",
+    "config-install-begin": "「{{int:config-continue}}」を押すと、MediaWiki のインストールを開始できます。\n変更したい設定がある場合は、「{{int:config-back}}」を押してください。",
+    "config-install-step-done": "実行",
+    "config-install-step-failed": "失敗した",
+    "config-install-extensions": "拡張機能を含む",
+    "config-install-database": "データベースの構築",
+    "config-install-schema": "スキーマの作成",
+    "config-install-pg-schema-not-exist": "PostgreSQL スキーマがありません。",
+    "config-install-pg-schema-failed": "テーブルの作成に失敗しました。\n利用者「$1」がスキーマ「$2」に書き込めるようにしてください。",
+    "config-install-pg-commit": "変更を送信",
+    "config-pg-no-plpgsql": "データベース $1 内に PL/pgSQL 言語をインストールする必要があります。",
+    "config-install-user": "データベースユーザーの作成",
+    "config-install-user-alreadyexists": "ユーザー「$1」は既に存在します",
+    "config-install-user-create-failed": "ユーザー「$1」の作成に失敗しました: $2",
+    "config-install-user-grant-failed": "ユーザー「$1」に許可を与えることに失敗しました: $2",
+    "config-install-user-missing": "指定したユーザー「$1」は存在しません。",
+    "config-install-user-missing-create": "指定したユーザー「$1」は存在しません。\nアカウントを作成する場合は、下の「アカウント作成」をクリックしてください。",
+    "config-install-tables": "テーブルの作成",
+    "config-install-tables-exist": "'''警告:''' MediaWiki テーブルは既に存在するようです。\n作成を省略します。",
+    "config-install-tables-failed": "'''エラー:''' テーブルの作成が、以下のエラーにより失敗しました: $1",
+    "config-install-interwiki": "既定のウィキ間テーブルの導入",
+    "config-install-interwiki-list": "ファイル <code>interwiki.list</code> から読み取れませんでした。",
+    "config-install-interwiki-exists": "'''警告:''' ウィキ間テーブルは既に登録されているようです。\n既定のテーブルを無視します。",
+    "config-install-stats": "統計情報の初期化",
+    "config-install-keys": "秘密鍵の生成",
+    "config-install-sysop": "管理者のアカウントの作成",
+    "config-install-mainpage": "メインページを既定の内容で作成",
+    "config-install-mainpage-failed": "メインページを挿入できませんでした: $1",
+    "config-install-done": "'''おめでとうございます!'''\nMediaWikiのインストールに成功しました。\n\n<code>LocalSettings.php</code>ファイルが生成されました。\nこのファイルはすべての設定を含んでいます。\n\nこれをダウンロードして、ウィキをインストールした基準ディレクトリ (index.phpと同じディレクトリ) に設置する必要があります。ダウンロードは自動的に開始されるはずです。\n\nダウンロードが開始されていない場合、またはダウンロードをキャンセルした場合は、下記のリンクをクリックしてダウンロードを再開できます:\n\n$3\n\n'''注意:''' この生成された設定ファイルをダウンロードせずにインストールを終了すると、このファイルは利用できなくなります。\n\n上記の作業が完了すると、'''[$2 ウィキに入る]'''ことができます。",
+    "config-download-localsettings": "<code>LocalSettings.php</code> をダウンロード",
+    "config-help": "ヘルプ",
+    "config-nofile": "ファイル「$1」が見つかりませんでした。削除された可能性があります。",
+    "mainpagetext": "'''MediaWiki のインストールに成功しました。'''",
+    "mainpagedocfooter": "ウィキソフトウェアの使い方に関する情報は[//meta.wikimedia.org/wiki/Help:Contents 利用者案内]を参照してください。\n\n== はじめましょう ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings/ja 設定の一覧]\n* [//www.mediawiki.org/wiki/Manual:FAQ/ja MediaWiki よくある質問と回答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki リリース情報メーリングリスト]\n* [//www.mediawiki.org/wiki/Localisation/ja MediaWiki のあなたの言語へのローカライズ]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/jam.json b/includes/installer/i18n/jam.json
new file mode 100644 (file)
index 0000000..0dc7b24
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Yocahuna"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki don instaal soksesful.'''",
+    "mainpagedocfooter": "Kansolt di [//meta.wikimedia.org/wiki/Help:Contents User's Guide] fi infamieshan ou fi yuuz di wiki saafwier.\n\n== Taatop ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/jut.json b/includes/installer/i18n/jut.json
new file mode 100644 (file)
index 0000000..2b44373
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Huslåke"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki er nu installeret.'''",
+    "mainpagedocfooter": "Se vores engelskspråĝede [//meta.wikimedia.org/wiki/MediaWiki_localisation dokumentåsje tilpasnenge'm åf æ brugergrænseflade] og [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide æ brugervejlednenge] før åplysnenger åpsætnenge'm og anvendelse."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/jv.json b/includes/installer/i18n/jv.json
new file mode 100644 (file)
index 0000000..2c2c5df
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Prangkat empuk wiki wis suksès dipasang.'''",
+    "mainpagedocfooter": "Mangga maca [//meta.wikimedia.org/wiki/Help:Contents User's Guide] kanggo katrangan luwih langkung prakara panggunan prangkat empuk wiki\n== Miwiti panggunan  ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Daftar pangaturan préférènsi]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ka.json b/includes/installer/i18n/ka.json
new file mode 100644 (file)
index 0000000..26d9c4d
--- /dev/null
@@ -0,0 +1,82 @@
+{
+    "@metadata": {
+        "authors": [
+            "David1010"
+        ]
+    },
+    "config-information": "ინფორმაცია",
+    "config-your-language": "თქვენი ენა:",
+    "config-wiki-language": "ვიკის ენა:",
+    "config-back": "← უკან",
+    "config-continue": "გაგრძელება →",
+    "config-page-language": "ენა",
+    "config-page-welcome": "კეთილი იყოს თქვენი მობრძანება მედიავიკიში!",
+    "config-page-dbconnect": "მონაცემთა ბაზასთან დაკავშირება",
+    "config-page-dbsettings": "მონაცემთა ბაზის კონფიგურაცია",
+    "config-page-name": "სახელი",
+    "config-page-options": "პარამეტრები",
+    "config-page-install": "ინსტალაცია",
+    "config-page-complete": "დასრულებულია!",
+    "config-page-restart": "ინსტალაციის თავიდან დაწყება",
+    "config-page-readme": "წამიკითხე",
+    "config-page-copying": "ლიცენზია",
+    "config-page-upgradedoc": "განახლება",
+    "config-restart": "დიახ, თავიდან დაიწყეთ",
+    "config-sidebar": "* [//www.mediawiki.org მედიავიკის ვებ-გვერდი]\n* [//www.mediawiki.org/wiki/Help:Contents/ka მომხმარებლების დახმარება]\n* [//www.mediawiki.org/wiki/Manual:Contents/ka ადმინისტრატორების დახმარება]\n* [//www.mediawiki.org/wiki/Manual:FAQ/ka FAQ]\n----\n* <doclink href=Readme>წამიკითხე</doclink>\n* <doclink href=ReleaseNotes>ინფორმაცია გამოშვებაზე</doclink>\n* <doclink href=Copying>ლიცენზია</doclink>\n* <doclink href=UpgradeDoc>განახლება</doclink>",
+    "config-db-type": "მონაცემთა ბაზის ტიპი:",
+    "config-db-host-oracle": "მონაცემთა ბაზის TNS:",
+    "config-db-name": "მონაცემთა ბაზის სახელი:",
+    "config-db-name-oracle": "მონაცემთა ბაზის სქემა:",
+    "config-db-username": "მონაცემთა ბაზის მომხმარებლის სახელი:",
+    "config-db-password": "მონაცემთა ბაზის პაროლი:",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 ორობითი",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-db-port": "მონაცემთა ბაზის პორტი:",
+    "config-db-schema": "მედიავიკის სქემა:",
+    "config-header-mysql": "MySQL-ის პარამეტრები",
+    "config-header-postgres": "PostgreSQL-ის პარამეტრები",
+    "config-header-sqlite": "SQLite-ის პარამეტრები",
+    "config-header-oracle": "Oracle-ის პარამეტრები",
+    "config-invalid-db-type": "არასწორი მონაცემთა ბაზის ტიპი",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-binary": "ორობითი",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "ვიკის სახელი:",
+    "config-site-name-blank": "შეიყვანეთ ვებ-გვერდის სახელი.",
+    "config-project-namespace": "პროექტის სახელთა სივრცე:",
+    "config-ns-generic": "პროექტი",
+    "config-ns-other": "სხვა (მიუთითეთ)",
+    "config-ns-other-default": "ჩემი ვიკი",
+    "config-admin-box": "ადმინისტრატორის ანგარიში",
+    "config-admin-name": "თქვენი სახელი:",
+    "config-admin-password": "პაროლი:",
+    "config-admin-password-confirm": "პაროლი ხელმეორედ:",
+    "config-admin-name-blank": "შეიყვანეთ ადმინისტრატორის მომხმარებლის სახელი.",
+    "config-admin-email": "ელ. ფოსტის მისამართი:",
+    "config-profile": "მომხმარებელთა უფლებების პროფილი:",
+    "config-profile-wiki": "ღია ვიკი",
+    "config-profile-private": "დახურული ვიკი",
+    "config-license": "საავტორო უფლები და ლიცენზია:",
+    "config-license-cc-by-sa": "Creative Commons Attribution Share Alike",
+    "config-license-cc-by": "Creative Commons Attribution",
+    "config-license-cc-by-nc-sa": "Creative Commons Attribution Non-Commercial Share Alike",
+    "config-license-cc-0": "Creative Commons Zero (საზოგადოებრივი საკუთრება)",
+    "config-license-gfdl": "GNU Free Documentation License 1.3 ან უფრო გვიანი",
+    "config-license-pd": "საზოგადოებრივი საკუთრება",
+    "config-license-cc-choose": "აირჩიეთ Creative Commons-ის ლიცენზიიდან ერთ-ერთი",
+    "config-email-settings": "ელ. ფოსტის პარამეტრები",
+    "config-upload-settings": "სურათებისა და ფაილების ატვირთვა",
+    "config-upload-enable": "ფაილების ატვირთვის ჩართვა",
+    "config-logo": "ლოგოს URL:",
+    "config-cc-again": "აირჩიეთ კიდევ ერთხელ...",
+    "config-extensions": "გაფართოებები",
+    "config-install-step-done": "შესრულდა",
+    "config-install-step-failed": "ვერ მოხერხდა",
+    "config-install-tables": "ცხრილების შექმნა",
+    "config-install-interwiki-list": "ვერ მოიძებნა ფაილი <code>interwiki.list</code>.",
+    "config-download-localsettings": "<code>LocalSettings.php</code>-ის გადმოწერა",
+    "config-help": "დახმარება",
+    "mainpagetext": "'''მედიავიკი წარმატებით ჩაიტვირთა.'''",
+    "mainpagedocfooter": "ვიკი პროგრამის გამოყენების ინფორმაციისთვის იხილეთ [//meta.wikimedia.org/wiki/Help:Contents მომხმარებლის მეგზური].\n\n== დაწყება ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings კონფიგურაციის მაჩვენებლების სია]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce მედიავიკის გამოცემის დაგზავნის სია]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources მედიავიკის ლოკალიზება თქვენ ენაზე]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/kaa.json b/includes/installer/i18n/kaa.json
new file mode 100644 (file)
index 0000000..7130f61
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki tabıslı ornatıldı.'''",
+    "mainpagedocfooter": "Wiki bag'darlamasın qollanıw haqqındag'i mag'lıwmat usın [//meta.wikimedia.org/wiki/Help:Contents Paydalanıwshılar qollanbasınan] ken'es alın'.\n\n== Baslaw ushın ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfiguratsiya sazlaw dizimi]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWikidin' Ko'p Soralatug'ın Sorawları]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki haqqında xat tarqatıw dizimi]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/kbd-cyrl.json b/includes/installer/i18n/kbd-cyrl.json
new file mode 100644 (file)
index 0000000..2ed0349
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Bogups"
+        ]
+    },
+    "mainpagetext": "'''«MediaWiki» узыншу хэгъува.'''",
+    "mainpagedocfooter": "Мы виким и лэжьыгъэ хъыбархэр здэбгъуэтыфынур [//meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 дэӀэпыкъуэгъу тхылъым].\n\n\n== Къыщхьэпэгъуэ хъуфынухэр ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Зэгъэзэхуэгъуэ гуэрэхэм я тхылъ];\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-м упщӀэ нахъыбу ятхэмрэ я жэуапхэмрэ];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-м и версиэ щӀэуэ къэжахэм я къэӀохугъуэ]."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/khw.json b/includes/installer/i18n/khw.json
new file mode 100644 (file)
index 0000000..16e34d5
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Rachitrali"
+        ]
+    },
+    "mainpagetext": "'''میڈیاوکیو کامیابیو سورا چالو کورونو بیتی شیر۔.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/kiu.json b/includes/installer/i18n/kiu.json
new file mode 100644 (file)
index 0000000..01f0bfe
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Mirzali"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki fist ra ser, vıraziya.'''",
+    "mainpagedocfooter": "Serba melumatê gurenaena ''wiki software''i [//meta.wikimedia.org/wiki/Help:Contents İdarê karberi] de mıracaet ke.\n\n== Gamê verêni ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista ayarunê vırastene]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki de ÇZP]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki ra lista serbest-daena postey]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/kk-arab.json b/includes/installer/i18n/kk-arab.json
new file mode 100644 (file)
index 0000000..c111678
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''مەدىياۋىيكىي بۋماسى ٴساتتى ورناتىلدى.'''",
+    "mainpagedocfooter": "ۋىيكىي باعدارلامالىق جاساقتاماسىن قالاي قولداناتىن اقپاراتى ٴۇشىن [//meta.wikimedia.org/wiki/Help:Contents پايدالانۋشىلىق نۇسقاۋلارىنان] كەڭەس الىڭىز.\n\n== باستاۋ ٴۇشىن ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings باپتالىم قالاۋلارىنىڭ ٴتىزىمى]\n* [//www.mediawiki.org/wiki/Manual:FAQ مەدىياۋىيكىيدىڭ جىيى قويىلعان ساۋالدارى]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce مەدىياۋىيكىي شىعۋ تۋرالى حات تاراتۋ ٴتىزىمى]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/kk-cyrl.json b/includes/installer/i18n/kk-cyrl.json
new file mode 100644 (file)
index 0000000..9b0f94f
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''МедиаУики бумасы сәтті орнатылды.'''",
+    "mainpagedocfooter": "Уики бағдарламалық жасақтамасын қалай қолданатын ақпараты үшін [//meta.wikimedia.org/wiki/Help:Contents Пайдаланушылық нұсқауларынан] кеңес алыңыз.\n\n== Бастау үшін ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Бапталым қалауларының тізімі]\n* [//www.mediawiki.org/wiki/Manual:FAQ МедиаУикидің Жиы Қойылған Сауалдары]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce МедиаУики шығу туралы хат тарату тізімі]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/kk-latn.json b/includes/installer/i18n/kk-latn.json
new file mode 100644 (file)
index 0000000..21cc1ee
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MedïaWïkï bwması sätti ornatıldı.'''",
+    "mainpagedocfooter": "Wïkï bağdarlamalıq jasaqtamasın qalaý qoldanatın aqparatı üşin [//meta.wikimedia.org/wiki/Help:Contents Paýdalanwşılıq nusqawlarınan] keñes alıñız.\n\n== Bastaw üşin ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Baptalım qalawlarınıñ tizimi]\n* [//www.mediawiki.org/wiki/Manual:FAQ MedïaWïkïdiñ Jïı Qoýılğan Sawaldarı]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MedïaWïkï şığw twralı xat taratw tizimi]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/km.json b/includes/installer/i18n/km.json
new file mode 100644 (file)
index 0000000..9f06065
--- /dev/null
@@ -0,0 +1,25 @@
+{
+    "@metadata": {
+        "authors": [
+            "Thearith",
+            "គីមស៊្រុន"
+        ]
+    },
+    "config-your-language": "ភាសារបស់អ្នក៖",
+    "config-your-language-help": "ជ្រើសយកភាសាដើម្បីប្រើក្នុងពេលតំលើង។",
+    "config-wiki-language": "ភាសាវិគី៖",
+    "config-wiki-language-help": "ជ្រើសរើសភាសាដែលវិគីនេះប្រើជាចំបង។",
+    "config-back": "← ត្រលប់ក្រោយ",
+    "config-continue": "បន្ត →",
+    "config-page-language": "ភាសា",
+    "config-page-welcome": "មេឌាវិគីសូមស្វាគមន៍!",
+    "config-page-dbconnect": "ភ្ជាប់ទៅមូលដ្ឋានទិន្នន័យ",
+    "config-page-name": "ឈ្មោះ",
+    "config-page-options": "ជំរើស",
+    "config-page-install": "តំលើង",
+    "config-page-complete": "បញ្ចប់!",
+    "config-page-restart": "តំលើងឡើងវិញ",
+    "config-help": "ជំនួយ",
+    "mainpagetext": "'''មេឌាវិគីត្រូវបានដំឡើងសំរេចហើយ​។'''",
+    "mainpagedocfooter": "សូមពិនិត្យមើល [//meta.wikimedia.org/wiki/ជំនួយ​៖ ខ្លឹមសារ​ណែនាំ​ប្រើប្រាស់]សម្រាប់​ព័ត៌មាន​​បន្ថែមចំពោះ​ការប្រើប្រាស់ ផ្នែកទន់វិគី​។\n\n== ចាប់ផ្ដើមជាមួយមេឌាវិគី ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings បញ្ជីកំណត់ទម្រង់]\n* [//www.mediawiki.org/wiki/Manual:FAQ/km សំណួរញឹកញាប់​មេឌាវិគី]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce បញ្ជី​ពិភាក្សា​ការផ្សព្វផ្សាយ​របស់​មេឌាវិគី]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/kn.json b/includes/installer/i18n/kn.json
new file mode 100644 (file)
index 0000000..69cc7a6
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''ವಿಕಿ ತಂತ್ರಾಂಶವನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಅನುಸ್ಥಾಪಿಸಲಾಯಿತು.'''",
+    "mainpagedocfooter": "ವಿಕಿ ತಂತ್ರಾಂಶವನ್ನು ಬಳಸುವ ಬಗ್ಗೆ ಮಾಹಿತಿಗೆ [//meta.wikimedia.org/wiki/Help:Contents ಬಳಕೆದಾರರಿಗೆ ನಿರ್ದೇಶನ ಪುಟ] ನೋಡಿ.\n\n== ಪ್ರಾರಂಭಿಸುವುದು ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ ಮೀಡಿಯವಿಕಿ FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ko.json b/includes/installer/i18n/ko.json
new file mode 100644 (file)
index 0000000..c01c793
--- /dev/null
@@ -0,0 +1,307 @@
+{
+    "@metadata": {
+        "authors": [
+            "Kwj2772",
+            "아라"
+        ]
+    },
+    "config-desc": "미디어위키 설치 프로그램",
+    "config-title": "MediaWiki $1 설치",
+    "config-information": "정보",
+    "config-localsettings-upgrade": "<code>LocalSettings.php</code> 파일을 감지했습니다.\n이 설치를 업그레이드하려면 아래 상자에 <code>$wgUpgradeKey</code>의 값을 입력하세요.\n<code>LocalSettings.php</code>에 찾을 수 있습니다.",
+    "config-localsettings-cli-upgrade": "<code>LocalSettings.php</code> 파일을 감지했습니다.\n이 설치를 업그레이드하려면 <code>update.php</code>를 대신 실행하세요",
+    "config-localsettings-key": "업그레이드 키:",
+    "config-localsettings-badkey": "제공한 키가 잘못되었습니다.",
+    "config-upgrade-key-missing": "미디어위키의 기존 설치가 감지되었습니다.\n이 설치를 업그레이드하려면 <code>LocalSettings.php</code>의 아래에 다음 줄을 넣으세요:\n\n$1",
+    "config-localsettings-incomplete": "기존 <code>LocalSettings.php</code>가 완전하지 않은 것 같습니다.\n$1 변수가 설정되어 있지 않습니다.\n이 변수가 설정되도록 <code>LocalSettings.php</code>를 바꾸고 \"{{int:Config-continue}}\"을 클릭하세요.",
+    "config-localsettings-connection-error": "<code>LocalSettings.php</code> 또는 <code>AdminSettings.php</code>에 지정한 설정을 사용하여 데이터베이스에 연결할 때 오류가 발생했습니다. 이러한 설정을 수정하고 다시 시도하세요.\n\n$1",
+    "config-session-error": "세션 시작 오류: $1",
+    "config-session-expired": "세션 데이터가 만료된 것 같습니다.\n세션은 $1의 작동 시간 동안 구성됩니다.\nphp.ini에 있는 <code>session.gc_maxlifetime</code>에서 설정해 이를 증가시킬 수 있습니다.\n설치 과정을 다시 시작합니다.",
+    "config-no-session": "세션 데이터가 없어졌습니다!\nphp.ini를 확인하고 <code>session.save_path</code>가 적절한 디렉토리로 설정되어 있는지 확인하세요.",
+    "config-your-language": "설치 언어:",
+    "config-your-language-help": "설치 과정에서 사용할 언어를 선택하세요.",
+    "config-wiki-language": "위키 언어:",
+    "config-wiki-language-help": "위키에 주로 작성될 언어를 선택하세요.",
+    "config-back": "← 뒤로",
+    "config-continue": "계속 →",
+    "config-page-language": "언어",
+    "config-page-welcome": "미디어위키에 오신 것을 환영합니다!",
+    "config-page-dbconnect": "데이터베이스에 연결",
+    "config-page-upgrade": "기존 설치 업그레이드",
+    "config-page-dbsettings": "데이터베이스 설정",
+    "config-page-name": "이름",
+    "config-page-options": "설정",
+    "config-page-install": "설치",
+    "config-page-complete": "완료!",
+    "config-page-restart": "설치 다시 시작",
+    "config-page-readme": "읽어보기",
+    "config-page-releasenotes": "배포 노트",
+    "config-page-copying": "전문",
+    "config-page-upgradedoc": "업그레이드하기",
+    "config-page-existingwiki": "기존 위키",
+    "config-help-restart": "입력한 모든 저장된 데이터를 지우고 설치 과정을 다시 시작하겠습니까?",
+    "config-restart": "예, 다시 시작합니다",
+    "config-welcome": "=== 사용 환경 검사 ===\n기본 검사는 지금 이 환경이 미디어위키 설치에 적합한지 수행합니다.\n설치를 완료하는 방법에 대한 지원을 찾는다면 이 정보를 포함해야 하는 것을 기억하세요.",
+    "config-copyright": "=== 저작권 및 이용 약관 ===\n\n$1\n\n이 프로그램은 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 프로그램을 재배포하거나 수정할 수 있습니다.\n\n이 프로그램이 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''.\n자세한 내용은 GNU 일반 공중 사용 허가서를 참고하십시오.\n\n당신은 이 프로그램을 통해 <doclink href=Copying>GNU 일반 공중 사용 허가서 전문</doclink>을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [http://www.gnu.org/copyleft/gpl.html 온라인으로 읽어보시기] 바랍니다.",
+    "config-sidebar": "* [//www.mediawiki.org 미디어위키 홈]\n* [//www.mediawiki.org/wiki/Help:Contents 사용자 가이드]\n* [//www.mediawiki.org/wiki/Manual:Contents 관리자 가이드]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>읽어보기</doclink>\n* <doclink href=ReleaseNotes>배포 노트</doclink>\n* <doclink href=Copying>전문</doclink>\n* <doclink href=UpgradeDoc>업그레이드하기</doclink>",
+    "config-env-good": "환경이 확인되었습니다.\n미디어위키를 설치할 수 있습니다.",
+    "config-env-bad": "환경이 확인되었습니다.\n미디어위키를 설치할 수 없습니다.",
+    "config-env-php": "PHP $1(이)가 설치되었습니다.",
+    "config-env-php-toolow": "PHP $1(이)가 설치되었습니다.\n하지만 미디어위키는 PHP $2 이상이 필요합니다.",
+    "config-unicode-using-utf8": "유니코드 정규화에 Brion Vibber의 utf8_normalize.so를 사용합니다.",
+    "config-unicode-using-intl": "유니코드 정규화에 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용합니다.",
+    "config-unicode-pure-php-warning": "'''경고''': 유니코드 정규화를 처리할 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용할 수 없기 때문에 느린 순수한 PHP 구현을 대신 사용합니다.\n높은 트래픽 사이트에서 실행하려면 [//www.mediawiki.org/wiki/Unicode_normalization_considerations 유니코드 정규화]를 읽어보시기 바랍니다.",
+    "config-unicode-update-warning": "'''경고''': 유니코드 정규화 래퍼의 설치된 버전은 [http://site.icu-project.org/ ICU 프로젝트]의 라이브러리의 이전 버전을 사용합니다.\n만약 유니코드를 사용하는 것에 대해 우려가 된다면 [//www.mediawiki.org/wiki/Unicode_normalization_considerations 업그레이드]해야합니다.",
+    "config-no-db": "적절한 데이터베이스 드라이버를 찾을 수 없습니다! PHP에 데이터베이스 드라이버를 설치해야 합니다.\n다음 데이터베이스 유형을 지원합니다 : $1.\n\n공유하는 호스팅을 사용하고 있다면 적절한 데이터베이스 드라이버를 설치하도록 호스팅 제공 업체에 문의하세요.\nPHP를 직접 컴파일했다면 예를 들어 <code>./configure --with-mysql</code>을 사용하여 데이터베이스 클라이언트를 활성화하도록 다시 설정하세요.\n데비안이나 우분트 패키지에서 PHP를 설치했다면 php-mysql 모듈도 설치해야 합니다.",
+    "config-outdated-sqlite": "'''경고''': SQLite 필요한 최소 $2 버전보다 낮은 $1(이)가 있습니다. SQLite는 사용할 수 없습니다.",
+    "config-no-fts3": "'''경고''': SQLite는 [//sqlite.org/fts3.html FTS3 모듈] 없이 컴파일되어, 검색 기능은 백엔드에 사용할 수 없습니다.",
+    "config-register-globals": "'''경고: PHP의 <code>[http://php.net/register_globals register_globals]</code> 옵션이 활성화되어 있습니다.'''\n'''가능하면 이를 비활성화하십시오.'''\n미디어위키는 작동하지만 서버에 잠재적인 보안 취약점이 노출됩니다.",
+    "config-magic-quotes-runtime": "'''치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]이 활성합니다!'''\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상이 일어납니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
+    "config-magic-quotes-sybase": "'''치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]이 활성합니다!'''\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상이 일어납니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
+    "config-mbstring": "'''치명: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]이 활성합니다!'''\n이 옵션은 오류가 발생하고 데이터를 입력하는 데 예기치 않는 손상이 일어날 수 있습니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
+    "config-ze1": "'''치명: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]이 활성합니다!'''\n이 옵션은 미디어위키에 심간한 버그를 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
+    "config-safe-mode": "'''경고:''' [http://www.php.net/features.safe-mode 안전 모드]이 활성합니다!\n특히 파일을 올리거나 <code>math</code>를 지원하는 데 문제가 발생할 수 있습니다.",
+    "config-xml-bad": "PHP의 XML 모듈이 없습니다.\n미디어위키는 이 모듈의 기능이 필요하며 이 설정에서는 작동하지 않습니다.\nMandrake를 실행하고 있다면 php-xml 패키지를 설치하세요.",
+    "config-pcre": "PCRE 지원 모듈이 없는 것 같습니다.\n미디어위키는 Perl 호환 정규 표현식을 작동시켜야 합니다.",
+    "config-pcre-no-utf8": "'''치명''': PHP의 PCRE 모듈은 RCRE_UTF8 지원 없이 컴파일된 것 같습니다.\n미디어위키가 제대로 작동하려면 UTF-8 지원이 필요합니다.",
+    "config-memory-raised": "PHP의 <code>memory_limit</code>는 $1이며 $2(으)로 늘리세요.",
+    "config-memory-bad": "'''경고:''' PHP의 <code>memory_limit</code>는 $1입니다.\n아마도 너무 낮은 것 같습니다.\n설치가 실패할 수 있습니다!",
+    "config-ctype": "'''치명''': PHP는 [http://www.php.net/manual/en/ctype.installation.php Ctype 확장 기능]에 대해 지원하여 컴파일해야 합니다.",
+    "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]를 찾을 수 없습니다.\n개체 캐싱을 활성화하지 않습니다.",
+    "config-mod-security": "'''경고''': 웹 서버에 [http://modsecurity.org/ mod_security]가 허용되었습니다. 잘못 설정된 경우 미디어위키나 사용자가 임의의 콘텐츠를 게시할 수 있는 다른 소프트웨어에 대한 문제를 일으킬 수 있습니다.\n[http://modsecurity.org/documentation/ mod_security] 문서를 참고하거나 임의의 오류가 발생할 경우 호스트의 지원 요청에 문의하십시오.",
+    "config-diff3-bad": "GNU diff3를 찾을 수 없습니다.",
+    "config-git": "Git 버전 관리 소프트웨어를 찾았습니다: <code>$1</code>.",
+    "config-git-bad": "Git 버전 관리 소프트웨어를 찾을 수 없습니다.",
+    "config-imagemagick": "ImageMagick를 찾았습니다: <code>$1</code>.\n올리기를 활성화할 경우 그림 섬네일이 활성화됩니다.",
+    "config-gd": "내장된 GD 그래픽 라이브러리를 찾았습니다.\n올리기를 활성화할 경우 그림 섬네일이 활성화됩니다.",
+    "config-no-scaling": "GD 라이브러리나 ImageMagick를 찾을 수 없습니다.\n그림 섬네일이 비활성화됩니다.",
+    "config-no-uri": "'''오류:''' 현재 URI를 확인할 수 없습니다.\n설치가 중단되었습니다.",
+    "config-no-cli-uri": "'''경고''': 기본값을 사용하여 --scriptpath를 지정하지 않았습니다: <code>$1</code>.",
+    "config-using-server": "\"<nowiki>$1</nowiki>\"(을)를 서버 이름으로 사용합니다.",
+    "config-using-uri": "\"<nowiki>$1$2</nowiki>\"(을)를 서버 URL로 사용합니다.",
+    "config-uploads-not-safe": "'''경고:''' 올리기에 대한 기본 디렉터리(<code>$1</code>)는 임의의 스크립트 실행에 취약합니다.\n미디어위키는 보안 위협에 대한 모든 올린 파일을 검사하지만, 올리기를 활성화하기 전에 [//www.mediawiki.org/wiki/Manual:Security#Upload_security 이 보안 취약점을 해결할 것]을 매우 권장합니다.",
+    "config-no-cli-uploads-check": "'''경고:''' 올리기에 대한 기본 디렉터리(<code>$1</code>)는 CLI를 설치하는 동안 임의의 스크립트 실행에 대한 취약점에 대해 검사되지 않습니다.",
+    "config-brokenlibxml": "시스템에 버그가 있는 PHP와 libxml2의 조합이 있으며 미디어위키나 다른 웹 어플리케이션에 숨겨진 데이터 손상을 일으킬 수 있습니다.\nPHP 5.2.9 이후와 libxml2 2.7.3 이후로 업그레이드하세요. ([//bugs.php.net/bug.php?id=45996 PHP에 제기한 버그])\n설치가 중단되었습니다.",
+    "config-using531": "미디어위키는 <code>__call()</code>을 참고로 매개 변수를 포함하는 버그로 인해 PHP $1(와)과 함께 사용할 수 없습니다.\n문제를 해결하려면 PHP 5.3.2 이상로 업그레이드하거나 PHP 5.3.0으로 다운그레이드를 하세요.\n설치가 중단되었습니다.",
+    "config-suhosin-max-value-length": "수호신(Suhosin)이 설치되었고 $1 바이트로 GET 매개 변수인 <code>length</code>를 제한하고 있습니다.\n미디어위키의 ResourceLoader 구성 요소는 이 제한을 해결하지만 성능이 저하됩니다.\n가능하면 <code>php.ini</code>의 <code>suhosin.get.max_value_length</code>에 1024 이상으로 설정하고 <code>LocalSettings.php</code>의 <code>$wgResourceLoaderMaxQueryLength</code>에 같은 값을 설정해야 합니다.",
+    "config-db-type": "데이터베이스 종류:",
+    "config-db-host": "데이터베이스 호스트:",
+    "config-db-host-help": "데이터베이스 서버가 다른 서버에 있으면 여기에 호스트 이름이나 IP 주소를 입력하세요.\n\n공유하는 웹 호스팅을 사용하고 있으면 호스팅 제공 업체는 호스트 이름을 설명하고 있을 것입니다.\n\n윈도 서버에 설치하고 MySQL을 사용하면 \"localhost\"는 서버 이름으로 작동하지 않을 수 있습니다. 그렇게 된다면 로컬 IP 주소로 \"127.0.0.1\"를 시도하세요.\n\nPostgreSQL을 사용하면 유닉스 소켓을 통해 연결되도록 입력란을 비워두세요.",
+    "config-db-host-oracle": "데이터베이스 TNS:",
+    "config-db-host-oracle-help": "올바른 [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 로컬 연결 이름]을 입력하세요. tnsnames.ora 파일이 이 설치에 보여야 합니다.<br />10g 이후의 클라이언트 라이브러리를 사용하는 경우 [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 쉬운 연결] 네이밍 메소드도 사용할 수 있습니다.",
+    "config-db-wiki-settings": "이 위키 식별",
+    "config-db-name": "데이터베이스 이름:",
+    "config-db-name-help": "위키를 식별하기 위한 이름을 선택하세요.\n공백이 없어야 합니다.\n\n공유하는 웹 호스팅 사용하면 호스팅 제공 업체가 특정 데이터베이스 이름을 제공하거나 관리 패널에서 데이터베이스를 만들 수 있습니다.",
+    "config-db-name-oracle": "데이터베이스 스키마:",
+    "config-db-account-oracle-warn": "데이터베이스 백엔드로 오라클을 설치하기 위해 지원하는 세 가지 시나리오가 있습니다:\n\n설치 과정의 일부로 데이터베이스 계정을 만들려면 설치를 위해 데이터베이스 계정으로 SYSDBA 역할을 가진 계정을 제공하고 웹 접근 계정에 대해 원하는 자격 증명을 지정하세요, 그렇지 않으면 수동으로 웹 접근 계정을 만들 수 있으며 (필요한 경우 권한 스키마 개체를 만들어야 합니다) 또는 다른 계정 두 개를 만들고 권한을 가진 하나의 웹 접근을 위한 제한된 하나를 제공할 수 있습니다.\n\n필요한 권한을 가진 계정을 만드는 스크립트는 이 설치의 \"maintenance/oracle/\" 디렉토리에서 찾을 수 있습니다. 제한된 계정을 사용하면 기본 계정으로 모든 관리 기능을 비활성화할 것을 유의하십시오.",
+    "config-db-install-account": "설치를 위한 사용자 계정",
+    "config-db-username": "데이터베이스 사용자 이름:",
+    "config-db-password": "데이터베이스 비밀번호:",
+    "config-db-password-empty": "새 데이터베이스 사용자의 비밀번호를 입력하세요: $1.\n비밀번호 없이 사용자를 만들 수도 있지만 안전하지 않습니다.",
+    "config-db-install-username": "설치 과정 중에 데이터베이스에 연결할 때 사용할 사용자 이름을 입력하세요.\n미디어위키 계정의 사용자 이름이 아닌 데이터베이스에 대한 사용자 이름입니다.",
+    "config-db-install-password": "설치 과정 중에 데이터베이스에 연결할 때 사용할 비밀번호을 입력하세요.\n미디어위키 계정의 비밀번호가 아닌 데이터베이스에 대한 비밀번호입니다.",
+    "config-db-install-help": "설치 과정 중에 데이터베이스에 연결할 때 사용할 사용자 이름과 비밀번호를 입력하세요.",
+    "config-db-account-lock": "정상적으로 작동하는 동안 같은 사용자 이름과 비밀번호를 사용함",
+    "config-db-wiki-account": "정상적인 작동을 위한 사용자 계정",
+    "config-db-wiki-help": "정상적인 위키 작업 동안 데이터베이스에 연결하는 데 사용할 사용자 이름과 비밀 번호를 입력하세요.\n계정이 존재하지 않고 설치 계정에 충분한 권한이 있는 경우 이 사용자 계정은 위키를 작동하는 데 필요한 최소 권한으로 만들어집니다.",
+    "config-db-prefix": "데이터베이스 테이블 접두어:",
+    "config-db-prefix-help": "여러 위키 사이 또는 미디어위키와 다른 웹 응용 프로그램 사이에서 하나의 데이터베이스를 공유해야 하는 경우, 충돌을 피하기 위해 모든 테이블 이름에 접두어를 추가하도록 선택할 수 있습니다.\n공백을 사용하지 마세요.\n\n이 필드는 일반적으로 비어있습니다.",
+    "config-db-charset": "데이터베이스 문자 집합",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 바이너리",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 UTF-8 하위 호환성",
+    "config-charset-help": "'''경고:''' MySQL 4.1에서 '''UTF-8 하위 호환성'''을 사용하고 나서 <code>mysqldump</code>로 데이터베이스에 백업한다면 모든 ASCII가 아닌 문자를 파괴하고 손상한 백업을 되돌릴 수 없습니다!\n\n'''바이너리 모드'''에서는 미디어위키는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.\nMySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.\n'''UTF-8 모드'''에서는 MySQL은 데이터를 설정하는 문자 집합을 알고 있기 때문에 적절하게 표현하고 변환할 수 있지만\n[//ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%ED%8F%89%EB%A9%B4#.EA.B8.B0.EB.B3.B8_.EB.8B.A4.EA.B5.AD.EC.96.B4_.ED.8F.89.EB.A9.B4 기본 다국어 평면] 밖의 문자를 저장할 수 없습니다.",
+    "config-mysql-old": "MySQL $1 이상이 필요하나 $2(이)가 있습니다.",
+    "config-db-port": "데이터베이스 포트:",
+    "config-db-schema": "미디어위키에 대한 스키마:",
+    "config-db-schema-help": "보통 이 스키마는 문제가 없습니다.\n필요한 경우에만 바꾸세요.",
+    "config-pg-test-error": "'''$1''' 데이터베이스에 연결할 수 없습니다: $2",
+    "config-sqlite-dir": "SQLite 데이터 디렉터리:",
+    "config-sqlite-dir-help": "SQLite는 하나의 파일에 모든 데이터를 저장합니다.\n\n제공하는 디렉토리는 설치하는 동안 웹 서버가 쓸 수 있어야 합니다.\n\n이 디렉토리는 웹을 통해 접근할 수 '''없어야''' 하는데 PHP 파일이 있는 곳에 넣을 수 없는 것은 이 때문입니다.\n\n설치 프로그램은 <code>.htaccess</code> 파일을 작성하지만 이것이 실패하면 누군가가 원본 데이터베이스에 접근할 수 있습니다.\n데이터베이스는 원본 사용자 데이터(이메일 주소, 해시한 비밀번호) 뿐만 아니라 삭제된 판과 위키의 다른 제한된 데이터를 포함합니다.\n\n예를 들어 <code>/var/lib/mediawiki/yourwiki</code>와 같이 다른 곳에 데이터베이스를 넣는 것이 좋습니다.",
+    "config-oracle-def-ts": "기본 테이블공간:",
+    "config-oracle-temp-ts": "임시 테이블공간:",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "미디어위키는 다음의 데이터베이스 시스템을 지원합니다:\n\n$1\n\n데이터베이스 시스템이 표시되지 않을 때 아래에 나열된 다음 지원을 활성화하려면 위의 링크된 지시에 따라 설치해볼 수 있습니다.",
+    "config-support-mysql": "* $1은 미디어위키의 기본 대상으로 가장 잘 지원합니다. ([http://www.php.net/manual/en/mysql.installation.php MySQL을 지원하여 PHP를 컴파일하는 방법])",
+    "config-support-postgres": "* $1은 MySQL의 대안으로 인기 있는 오픈 소스 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQL을 지원하여 PHP를 컴파일하는 방법]) 몇가지 사소한 해결하지 못한 버그가 있을 수 있으며, 이를 제작 환경에서 사용하지 않는 것이 좋습니다.",
+    "config-support-sqlite": "* $1는 매우 잘 지원하는 가벼운 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pdo.installation.php SQLite를 지원하여 PHP를 컴파일하는 방법], PDO 사용)",
+    "config-support-oracle": "* $1은 상용 엔터프라이스 데이터베이스입니다. ([http://www.php.net/manual/en/oci8.installation.php OCI8을 지원하여 PHP를 컴파일하는 방법])",
+    "config-header-mysql": "MySQL 설정",
+    "config-header-postgres": "PostgreSQL 설정",
+    "config-header-sqlite": "SQLite 설정",
+    "config-header-oracle": "Oracle 설정",
+    "config-invalid-db-type": "잘못된 데이터베이스 종류",
+    "config-missing-db-name": "\"데이터베이스 이름\"에 대한 값을 입력해야 합니다",
+    "config-missing-db-host": "\"데이터베이스 호스트\"에 대한 값을 입력해야 합니다",
+    "config-missing-db-server-oracle": "\"데이터베이스 TNS\"에 대한 값을 입력해야 합니다",
+    "config-invalid-db-server-oracle": "\"$1\" 데이터베이스 TNS가 잘못됐습니다.\n\"TNS Name\"이나 \"Easy Connect\" 문자열 중 하나를 사용하세요 ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle 네이밍 메서드])",
+    "config-invalid-db-name": "\"$1\" 데이터베이스 이름이 잘못되었습니다.\nASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.",
+    "config-invalid-db-prefix": "\"$1\" 데이터베이스 접두어가 잘못됐습니다.\nASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.",
+    "config-connection-error": "$1.\n\n호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.",
+    "config-invalid-schema": "미디어위키 \"$1\"에 대한 스키마가 잘못됐습니다.\nASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.",
+    "config-db-sys-create-oracle": "설치 프로그램은 새 계정을 만들기 위한 SYSDBA 계정만을 지원합니다.",
+    "config-db-sys-user-exists-oracle": "\"$1\" 사용자 계정이 이미 존재합니다. SYSDBA는 새 계정을 만드는 데에만 사용할 수 있습니다!",
+    "config-postgres-old": "PostgreSQL $1 이상이 필요하나 $2(이)가 있습니다.",
+    "config-sqlite-name-help": "위키를 식별하기 위한 이름을 선택하세요.\n공백이나 하이픈을 사용하지 마십시오.\nSQLite 데이터 파일 이름에 사용됩니다.",
+    "config-sqlite-parent-unwritable-group": "<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며 웹 서버는 <code><nowiki>$2</nowiki></code> 상위 디렉토리에 쓸 수 없기 때문입니다.\n\n설치 프로그램은 웹 서버로 실행중인 사용자를 지정할 수 없습니다.\n계속하려면 웹 서버가 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.\n유닉스/리눅스 시스템에서의 수행:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며 웹 서버는 <code><nowiki>$2</nowiki></code> 상위 디렉토리에 쓸 수 없기 때문입니다.\n\n설치 프로그램은 웹 서버로 실행중인 사용자를 지정할 수 없습니다.\n계속하려면 웹 서버(와 기타!)가 전역으로 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.\n유닉스/리눅스 시스템에서의 수행:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "\"$1\" 데이터 디렉토리를 만드는 중 오류가 났습니다.\n경로를 확인하고 다시 시도하세요.",
+    "config-sqlite-dir-unwritable": "\"$1\" 디렉토리에 쓸 수 없습니다.\n웹 서버를 쓸 수 있도록 권한을 바꾸고 다시 시도하세요.",
+    "config-sqlite-connection-error": "$1.\n\n호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.",
+    "config-sqlite-readonly": "<code>$1</code> 파일은 쓸 수 없습니다.",
+    "config-sqlite-cant-create-db": "<code>$1</code> 데이터베이스 파일을 만들 수 없습니다.",
+    "config-sqlite-fts3-downgrade": "PHP가 FTS3 지원이 없어졌습니다. 테이블을 다운그레이드하세요.",
+    "config-can-upgrade": "이 데이터베이스에 미디어위키 테이블이 있습니다.\n미디어위키 $1(으)로 업그레이드하려면 '''계속'''을 클릭하세요.",
+    "config-upgrade-done": "업그레이드가 완료되었습니다.\n\n이제 [$1 위키를 시작]할 수 있습니다.\n\n만약 <code>LocalSettings.php</code> 파일을 다시 만들기를 원하면 아래의 버튼을 클릭하세요.\n위키에 문제가 있지 않는 한 '''권장하지 않습니다'''.",
+    "config-upgrade-done-no-regenerate": "업그레이드가 완료되었습니다.\n\n이제 [$1 위키를 시작]할 수 있습니다.",
+    "config-regenerate": "LocalSettings.php 다시 만들기 →",
+    "config-show-table-status": "<code>SHOW TABLE STATUS</code> 쿼리를 실패했습니다!",
+    "config-unknown-collation": "'''경고:''' 데이터베이스가 인식하지 않는 정렬을 사용하고 있습니다.",
+    "config-db-web-account": "웹 접근을 위한 데이터베이스 계정",
+    "config-db-web-help": "위키의 일반적인 작업 중에 데이터베이스 서버에 연결하는 데 사용할 웹 서버에 대한 계정 이름과 비밀번호를 선택하세요.",
+    "config-db-web-account-same": "설치를 위해 같은 계정 사용",
+    "config-db-web-create": "이 계정이 아직 존재하지 않을 경우 계정 만들기",
+    "config-db-web-no-create-privs": "설치를 위해 지정한 계정은 계정을 만들 수 있는 충분한 권한이 없습니다.\n여기서 지정한 계정은 이미 존재해야 합니다.",
+    "config-mysql-engine": "스토리지 엔진:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''경고''': 미디어위키에 사용하지 않는 것이 좋은 MySQL에 대한 스토리지 엔진으로 MyISAM을 선택하였습니다. 이유는:\n* 테이블 잠금에 의해 간신히 동시성을 지원합니다\n* 다른 엔진보다 손상하는 경향이 있습니다\n* 미디어위키 코드베이스가 항상 정상적으로 MyISAM을 처리하지 않습니다\n\nMySQL 설치가 InnoDB를 지원한다면, 그 선택 대신에 InnoDB를 선택할 것을 매우 권장합니다.\nMySQL 설치가 InnoDB를 지원하지 않는다면, 아마도 업그레이드를 할 시간입니다.",
+    "config-mysql-only-myisam-dep": "'''경고''': 미디어위키에 사용하지 않는 것이 좋은 MySQL에 대한 유일하게 사용할 수 있는 스토리지 엔진입니다. 이유는:\n* 테이블 잠금에 의해 간신히 동시성을 지원합니다\n* 다른 엔진보다 손상하는 경향이 있습니다\n* 미디어위키 코드베이스가 항상 정상적으로 MyISAM을 처리하지 않습니다\n\nMySQL 설치가 InnoDB를 지원하지 않으며, 아마도 업그레이드를 할 시간입니다.",
+    "config-mysql-engine-help": "'''InnoDB'''는 동시적인 지원에 좋기 때문에 대부분 최고의 옵션입니다.\n\n'''MyISAM'''은 단일 사용자 또는 읽기 전용 설치에 빠를 수 있습니다.\nMyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실될 수 있습니다.",
+    "config-mysql-charset": "데이터베이스 문자 집합:",
+    "config-mysql-binary": "바이너리",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "'''바이너리 모드'''에서는 미디어위키는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.\nMySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.\n'''UTF-8 모드'''에서는 MySQL은 데이터를 설정하는 문자 집합을 알고 있기 때문에 적절하게 표현하고 변환할 수 있지만\n[//ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%ED%8F%89%EB%A9%B4#.EA.B8.B0.EB.B3.B8_.EB.8B.A4.EA.B5.AD.EC.96.B4_.ED.8F.89.EB.A9.B4 기본 다국어 평면] 밖의 문자를 저장할 수 없습니다.",
+    "config-site-name": "위키 이름:",
+    "config-site-name-help": "브라우저 제목 표시줄과 다른 여러 곳에 나타납니다.",
+    "config-site-name-blank": "사이트 이름을 입력하세요.",
+    "config-project-namespace": "프로젝트 이름공간:",
+    "config-ns-generic": "프로젝트",
+    "config-ns-site-name": "위키 이름과 같은 이름: $1",
+    "config-ns-other": "기타 (지정)",
+    "config-ns-other-default": "내위키",
+    "config-project-namespace-help": "위키백과의 예를 따라서, 많은 위키는 \"'''프로젝트 이름공간'''\"에 그들의 콘텐츠 페이지에서 그들의 정책 페이지는 별도로 보관합니다.\n이 이름공간에 있는 모든 페이지의 제목은 여기서 지정할 수 있는 특정 접두어로 시작합니다.\n보통 이 접두어는 위키의 이름에서 파생되지만, \"#\" 또는 \":\"와 같은 특수 문자를 포함할 수 없습니다.",
+    "config-ns-invalid": "특정 \"<nowiki>$1</nowiki>\" 이름공간이 잘못되었습니다.\n다른 프로젝트 이름공간을 지정하세요.",
+    "config-ns-conflict": "특정 \"<nowiki>$1</nowiki>\" 이름공간이 기본 미디어위키 이름공간과 충돌합니다.\n다른 프로젝트 이름공간을 지정하세요.",
+    "config-admin-box": "관리자 계정",
+    "config-admin-name": "사용자 이름:",
+    "config-admin-password": "비밀번호:",
+    "config-admin-password-confirm": "비밀번호 확인:",
+    "config-admin-help": "\"홍길동\"과 같이 여기에 원하는 사용자 이름을 입력하세요.\n위키에 로그인하는 데 사용되는 이름입니다.",
+    "config-admin-name-blank": "관리자의 사용자 이름을 입력하세요.",
+    "config-admin-name-invalid": "특정 \"<nowiki>$1</nowiki>\" 사용자 이름이 잘못되었습니다.\n다른 사용자 이름을 지정하세요.",
+    "config-admin-password-blank": "관리자 계정의 비밀번호를 입력하세요.",
+    "config-admin-password-same": "비밀번호는 사용자 이름과 같아서는 안 됩니다.",
+    "config-admin-password-mismatch": "입력한 비밀번호 두 개가 일치하지 않습니다.",
+    "config-admin-email": "이메일 주소:",
+    "config-admin-email-help": "위키의 다른 사용자로부터 이메일을 전달받거나 비밀번호를 재설정하고 주시문서 목록에 대한 바뀜 알림을 받기 위해 여기에 이메일 주소를 입력하세요. 이 필드를 비워 둘 수 있습니다.",
+    "config-admin-error-user": "\"<nowiki>$1</nowiki>\" 이름의 관리자를 만드는 중 내부 오류가 발생했습니다.",
+    "config-admin-error-password": "\"<nowiki>$1</nowiki>\" 관리자의 비밀번호를 설정하는 중 내부 오류가 발생했습니다: <pre>$2</pre>",
+    "config-admin-error-bademail": "이메일 주소를 잘못 입력하였습니다.",
+    "config-subscribe": "[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 배포 발표 메일링 리스트]에 가입합니다.",
+    "config-subscribe-help": "중요한 보안 알림을 포함한 배포 알림에 대해 사용되는 로우 볼륨 메일링 리스트입니다.\n이 리스트를 구독하고 나서 새 버전이 나올 때 미디어위키 설치를 업데이트하십시오.",
+    "config-subscribe-noemail": "이메일 주소를 제공하지 않고 배포 발표 메일링 리스트에 가입하려 합니다.\n메일링 리스트에 가입하고자 할 경우 이메일 주소를 제공하세요.",
+    "config-almost-done": "거의 다 완료했습니다!\n이제 남은 설정을 생략하고 지금 바로 위키를 설치할 수 있습니다.",
+    "config-optional-continue": "더 많은 질문을 물어보세요.",
+    "config-optional-skip": "지겨워요, 그냥 위키를 설치할래요.",
+    "config-profile": "사용자 권한 프로필:",
+    "config-profile-wiki": "열린 위키",
+    "config-profile-no-anon": "계정 만들기 필요",
+    "config-profile-fishbowl": "승인된 편집자만",
+    "config-profile-private": "비공개 위키",
+    "config-profile-help": "위키는 많은 사람들이 가능한 한 편집할 수 있도록 하면 가장 뛰어난 역할을 합니다.\n미디어위키에서는 최근 바뀜을 검토하기 쉽고, 선하거나 악의적인 사용자의 어떠한 손실을 되돌리는 것이 쉽습니다.\n\n그러나 많은 사람이 미디어위키는 다양한 역할로 유용하지만, 때로는 모든 사람에게 위키 방식의 장점을 설득하기 쉽지 않을 지도 모릅니다.\n그래서 선택할 수 있습니다.\n\n'''{{int:config-profile-wiki}}''' 모델은 로그인하지 않고도 누구나 편집할 수 있습니다.\n'''{{int:config-profile-no-anon}}'''인 위키는 각 편집에 추가적으로 강한 책임을 제공하지만, 부담 없는 기여를 저해할 수도 있습니다.\n\n'''{{int:config-profile-fishbowl}}''' 시나리오는 승인된 사용자만 편집할 수 있지만, 대중은 역사를 포함하여 문서를 볼 수 있습니다.\n'''{{int:config-profile-private}}'''는 승인된 사용자만 문서를 볼 수 있으며 해당 그룹을 편집할 수 있습니다.\n\n더 복잡한 사용자 권한을 설정은 설치한 후 사용할 수 있으며 [//www.mediawiki.org/wiki/Manual:User_rights 관련 설명서 항목]을 참고하세요.",
+    "config-license": "저작권 및 라이선스:",
+    "config-license-none": "라이선스 바닥글 없음",
+    "config-license-cc-by-sa": "크리에이티브 커먼즈 저작자표시-동일조건변경허락",
+    "config-license-cc-by": "크리에이티브 커먼즈 저작자표시",
+    "config-license-cc-by-nc-sa": "크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락",
+    "config-license-cc-0": "크리에이티브 커먼즈 제로 (퍼블릭 도메인)",
+    "config-license-gfdl": "GNU 자유 문서 사용 허가서 1.3 이상",
+    "config-license-pd": "퍼블릭 도메인",
+    "config-license-cc-choose": "다른 크리에이티브 커먼즈 라이선스 선택",
+    "config-license-help": "많은 공개 위키는 모든 기여를 [http://freedomdefined.org/Definition 자유 라이선스]에 따라 넣습니다.\n이렇게 하면 커뮤니티 소유권의 이해를 할 수 있도록 하고 장기적인 기여를 장려합니다.\n일반적으로 개인 또는 회사 위키에 대해서는 필요하지 않습니다.\n\n위키백과의 텍스트를 사용할 수 있도록 하고 위키백과가 위키에서 복사한 텍스트를 사용할 수 있도록 원한다면 '''크리에이티브 커먼즈 저작자표시-동일조건변경허락'''으로 선택해야 합니다.\n\n위키백과는 이전에 GNU 자유 문서 사용 허가서를 사용했습니다.\nGFDL은 유효한 라이선스이지만 내용을 이해하기 어렵습니다.\nGFDL에 따라 사용이 허가된 내용을 재사용하는 것도 어렵습니다.",
+    "config-email-settings": "이메일 설정",
+    "config-enable-email": "발신 이메일 활성화",
+    "config-enable-email-help": "이메일을 작동하려면 [http://www.php.net/manual/en/mail.configuration.php PHP의 메일 설정]을 올바르게 설정해야 합니다.\n이메일 기능을 사용하지 않으려면 이를 비활성화할 수 있습니다.",
+    "config-email-user": "사용자와 사용자 간 이메일 활성화",
+    "config-email-user-help": "환경 설정에서 활성화한 경우 모든 사용자가 이메일을 서로 보내도록 활성화합니다.",
+    "config-email-usertalk": "사용자 토론 문서 알림 활성화",
+    "config-email-usertalk-help": "환경 설정에서 활성화한 경우 사용자는 사용자 토론 문서의 바뀜 알림을 받도록 활성화합니다.",
+    "config-email-watchlist": "주시문서 목록 알림 활성화",
+    "config-email-watchlist-help": "환경 설정에서 활성화한 경우 사용자가 주시한 문서에 대한 알림을 받도록 활성화합니다.",
+    "config-email-auth": "이메일 인증 활성화",
+    "config-email-auth-help": "이 설정이 활성화되어 있으면 사용자는 이메일 주소를 설정하거나 바꿀 때마다 링크를 사용하여 이메일 주소를 확인해야 합니다.\n인증된 이메일 주소만 다른 사용자로부터의 이메일이나 바뀜 알림 이메일을 받을 수 있습니다.\n이메일 기능의 남용 가능성이 있기 때문에 이 옵션을 설정하는 것은 공개 위키에서 '''권장'''합니다.",
+    "config-email-sender": "반송 이메일 주소",
+    "config-email-sender-help": "발신한 이메일에 대한 반송 주소로 사용할 이메일 주소를 입력하세요.\n반송할 때 보내는 주소입니다.\n대부분의 메일 서버는 적어도 도메인 이름 부분은 유효합니다.",
+    "config-upload-settings": "그림과 파일 올리기",
+    "config-upload-enable": "파일 올리기 활성화",
+    "config-upload-help": "파일 올리기는 서버에 잠재적인 보안 위험에 쉽게 노출될 수 있습니다.\n자세한 내용은 매뉴얼의 [//www.mediawiki.org/wiki/Manual:Security 보안 문단]을 참고하세요.\n\n파일 올리기를 활성화하려면 미디어위키의 루트 디렉토리에 있는 <code>images</code> 하위 디렉토리에서 웹 서버가 기록할 수 있도록 모드를 바꿉니다.\n그 다음 이 옵션을 활성화합니다.",
+    "config-upload-deleted": "삭제된 파일에 대한 디렉터리:",
+    "config-upload-deleted-help": "삭제된 파일을 보관할 디렉토리를 선택하세요.\n이상적으로 웹에서 접근할 수 없게 해야 합니다.",
+    "config-logo": "로고 URL:",
+    "config-logo-help": "미디어위키의 기본 스킨은 사이드바 메뉴 위에 135×160 픽셀의 로고의 공간을 포함하고 있습니다.\n적당한 크기로 그림을 올리고 여기에 URL을 입력하세요.\n\n로고가 상대적인 경로에 있으면 <code>$wgStylePath</code>나 <code>$wgScriptPath</code>를 사용할 수 있습니다.\n\n로고 사용을 원하지 않으면 이 상자를 비우세요.",
+    "config-instantcommons": "인스턴트 공용 활성화",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons 인스턴트 공용]은 [//commons.wikimedia.org/ 위키미디어 공용] 사이트에서 찾을 수 있는 그림, 소리 및 다른 미디어를 위키에서 사용할 수 있도록 하는 기능입니다.\n이렇게 하려면 미디어위키가 인터넷에 접근해야합니다.\n\n위키미디어 공용 외에 기타 위키를 설정하는 방법에 대한 지침을 포함한 기능에 대한 자세한 내용은 [//mediawiki.org/wiki/Manual:$wgForeignFileRepos 매뉴얼]을 참고하세요.",
+    "config-cc-error": "크리에이티브 커먼즈 라이선스 선택기에 결과가 없습니다.\n수동으로 라이선스 이름을 입력하세요.",
+    "config-cc-again": "다시 선택...",
+    "config-cc-not-chosen": "원하는 크리에이티브 커먼즈 라이선스를 선택하고 \"진행\"을 클릭하세요.",
+    "config-advanced-settings": "고급 설정",
+    "config-cache-options": "개체 캐싱을 위한 설정:",
+    "config-cache-help": "개체 캐싱은 자주 사용하는 데이터를 캐싱하여 미디어위키의 속도를 개선하는 데 사용합니다.\n큰 사이트의 규모에는 이를 많이 사용하도록 권장하고 있으며, 소규모 사이트들도 물론 이익을 볼 수 있습니다.",
+    "config-cache-none": "캐시하지 않음 (기능적으로는 삭제되지 않지만 큰 위키 사이트에 속도에 영향을 받을 수 있습니다)",
+    "config-cache-accel": "PHP 개체 캐싱 (APC, XCache 또는 WinCache)",
+    "config-cache-memcached": "Memcached 사용 (추가적인 설치와 설정이 필요합니다)",
+    "config-memcached-servers": "Memcached 서버:",
+    "config-memcached-help": "Memcached의 사용하기 위한 IP 주소 목록입니다.\n한 줄에 하나씩 사용할 포트를 지정해야 합니다. 예를 들어 :\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "캐시 종류로 Memcached를 선택했지만 어떠한 서버도 지정하지 않았습니다.",
+    "config-memcache-badip": "Memcached에 대해 잘못된 IP 주소를 입력했습니다: $1.",
+    "config-memcache-noport": "Memcached 서버에 사용할 포트를 지정하지 않았습니다: $1.\n포트를 모를 경우 기본값은 11211입니다.",
+    "config-memcache-badport": "Memcached 포트 번호는 $1(와)과 $2 사이여야 합니다.",
+    "config-extensions": "확장 기능",
+    "config-extensions-help": "위에 나열된 확장 기능이 <code>./extensions</code>에서 발견되었습니다.\n\n추가적인 설정이 필요할 수 있습니다만 지금 활성화시킬 수 있습니다.",
+    "config-install-alreadydone": "'''경고:''' 이미 미디어위키를 설치했고 다시 설치하려고 합니다.\n다음 페이지에서 진행하세요.",
+    "config-install-begin": "\"{{int:config-continue}}\"을 누르면 미디어위키의 설치를 시작합니다.\n그래도 바꾸는 것을 원한다면 \"{{int:config-back}}\"를 누르세요.",
+    "config-install-step-done": "완료",
+    "config-install-step-failed": "실패",
+    "config-install-extensions": "확장 기능을 포함하는 중",
+    "config-install-database": "데이터베이스를 설정하는 중",
+    "config-install-schema": "스키마를 만드는 중",
+    "config-install-pg-schema-not-exist": "PostgreSQL 스키마가 존재하지 않습니다.",
+    "config-install-pg-schema-failed": "테이블을 만드는 데 실패했습니다.\n\"$2\" 스키마에 쓸 수 있는 \"$1\" 사용자가 있는지 확인하세요.",
+    "config-install-pg-commit": "바뀐 사항을 적용하는 중",
+    "config-install-pg-plpgsql": "PL/pgSQL 언어에 대해 확인하는 중",
+    "config-pg-no-plpgsql": "$1 데이터베이스에 PL/pgSQL 언어를 설치해야 합니다",
+    "config-pg-no-create-privs": "설치를 위한 지정한 계정에 계정을 만드는 데 충분한 권한이 없습니다,",
+    "config-pg-not-in-role": "웹 사용자에 대해 지정한 계정이 이미 존재합니다.\n설치에 대한 지정한 사용자는 슈퍼 사용자가 아니고, 그것은 웹 사용자의 역할의 구성원이 아니며, 그래서 웹 사용자가 소유한 개체를 만들 수 없습니다.\n\n현재 미디어위키는 테이블을 웹 사용자가 소유해야 합니다. 다른 웹 계정 이름을 지정하거나 \"뒤로\"를 클릭하고 적절한 권한의 설치할 사용자를 지정하세요.",
+    "config-install-user": "데이터베이스 사용자를 만드는 중",
+    "config-install-user-alreadyexists": "\"$1\" 사용자가 이미 존재합니다",
+    "config-install-user-create-failed": "\"$1\" 사용자 만드는 중 실패: $2",
+    "config-install-user-grant-failed": "\"$1\" 사용자에 대한 권한 부여 실패: $2",
+    "config-install-user-missing": "지정한 \"$1\" 사용자가 존재하지 않습니다.",
+    "config-install-user-missing-create": "지정된 \"$1\" 사용자가 존재하지 않습니다.\n이를 만드는 것을 원하면 아래의 \"계정 만들기\" 확인 상자를 클릭하세요.",
+    "config-install-tables": "테이블을 만드는 중",
+    "config-install-tables-exist": "'''경고''': 미디어위키 테이블이 이미 있는 것 같습니다.\n테이블 만들기를 생략합니다.",
+    "config-install-tables-failed": "'''오류''': 다음 오류와 함께 테이블 만들기에 실패했습니다: $1",
+    "config-install-interwiki": "기본 인터위키 테이블을 채우는 중",
+    "config-install-interwiki-list": "<code>interwiki.list</code> 파일을 불러올 수 없습니다.",
+    "config-install-interwiki-exists": "'''경고''': 인터위키 테이블이 이미 항목을 갖고 있는 것 같습니다.\n기본 목록으로 넘어갑니다.",
+    "config-install-stats": "통계를 초기화하는 중",
+    "config-install-keys": "보안 키를 만드는 중",
+    "config-insecure-keys": "'''경고:''' 설치 중에 생성한 {{PLURAL:$2|보안 키}} ($1)를 설치하는 동안 완전히 안전하지 {{PLURAL:$2|않습니다}}. 직접 바꾸기를 고려하세요.",
+    "config-install-sysop": "관리자 사용자 계정을 만드는 중",
+    "config-install-subscribe-fail": "미디어위키 발표를 구독할 수 없습니다: $1",
+    "config-install-subscribe-notpossible": "cURL이 설치되지 않았고 allow_url_fopen를 사용할 수 없습니다.",
+    "config-install-mainpage": "기본 콘텐츠로 대문을 만드는 중",
+    "config-install-extension-tables": "활성화된 확장 기능을 위한 테이블을 만드는 중",
+    "config-install-mainpage-failed": "대문을 삽입할 수 없습니다: $1",
+    "config-install-done": "'''축하합니다!'''\n미디어위키가 성공적으로 설치되었습니다.\n\n설치 프로그램이 <code>LocalSettings.php</code> 파일을 만들었습니다.\n모든 설정이 포함되어 있습니다.\n\n파일을 다운로드하여 위키 설치의 거점에 넣어야 합니다. (index.php와 같은 디렉터리) 다운로드가 자동으로 시작됩니다.\n\n다운로드가 제공되지 않을 경우나 그것을 취소한 경우에는 아래의 링크를 클릭하여 다운로드를 다시 시작할 수 있습니다:\n\n$3\n\n'''참고:''' 이 생성한 설정 파일을 다운로드하지 않고 설치를 끝내면 이 파일은 나중에 사용할 수 없습니다.\n\n완료되었으면 '''[$2 위키에 들어갈 수 있습니다]'''.",
+    "config-download-localsettings": "<code>LocalSettings.php</code> 다운로드",
+    "config-help": "도움말",
+    "config-nofile": "\"$1\" 파일을 찾을 수 없습니다. 이미 삭제되었나요?",
+    "config-extension-link": "당신의 위키가 [//www.mediawiki.org/wiki/Manual:Extensions 확장 기능]을 지원한다는 것을 알고 계십니까?\n\n전체 확장 기능의 목록을 확인하려면 [//www.mediawiki.org/wiki/Category:Extensions_by_category 분류별 확장 기능]이나 [//www.mediawiki.org/wiki/Extension_Matrix 확장 기능 표]를 찾아보실 수 있습니다.",
+    "mainpagetext": "'''미디어위키가 성공적으로 설치되었습니다.'''",
+    "mainpagedocfooter": "[//meta.wikimedia.org/wiki/Help:Contents 이곳]에서 위키 소프트웨어에 대한 정보를 얻을 수 있습니다.\n\n== 시작하기 ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings 설정하기 목록]\n* [//www.mediawiki.org/wiki/Manual:FAQ 미디어위키 FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 미디어위키 발표 메일링 리스트]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources 내 언어로 미디어위키 지역화]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/krc.json b/includes/installer/i18n/krc.json
new file mode 100644 (file)
index 0000000..320ae4b
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Iltever"
+        ]
+    },
+    "mainpagetext": "'''«MediaWiki» тыйыншлы салынды.'''",
+    "mainpagedocfooter": "Бу вики бла къалай ишлерге ангылатхан информацияны [//meta.wikimedia.org/wiki/Help:Contents_User's_Guide къошулуучугъа юретиуде] табаргъа боллукъду.\n\n== Файдалы ресурсла ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings тюрлендириулени списогу (ингил.)];\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-ни юсюнден кёб берилген соруула];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-ни джангы версиясыны чыкъгъанын билдириу письмола]."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ksh.json b/includes/installer/i18n/ksh.json
new file mode 100644 (file)
index 0000000..7c08745
--- /dev/null
@@ -0,0 +1,311 @@
+{
+    "@metadata": {
+        "authors": [
+            "Mormegil",
+            "Purodha",
+            "Reedy"
+        ]
+    },
+    "config-desc": "Et Projramm för Mediwiki opzesäze.",
+    "config-title": "MediaWiki $1 opsäze",
+    "config-information": "Enfomazjuhn",
+    "config-localsettings-upgrade": "De Dattei <code lang=\"en\"><code>LocalSettings.php</code></code> es ald doh.\nDe Projramme vum Wiki künne op der neußte Shtand jebraat wääde:\nDonn doför dä Wäät vum <code lang=\"en\">$wgUpgradeKey</code> en dat heh Feld enjävve.\nDo fenggs_et en dä Dattei <code lang=\"en\"><code>LocalSettings.php</code></code> om ẞööver.",
+    "config-localsettings-cli-upgrade": "En Dattei <code lang=\"en\"><code>LocalSettings.php</code></code> es jefonge woode.\nÖm et Wiki_Projramm op ene neue Shtand ze bränge, donn <code lang=\"en\">update.php</code> oproofe.",
+    "config-localsettings-key": "Der Schlößel för et Projramm op ene neue Schtand ze bränge:",
+    "config-localsettings-badkey": "Dinge Schlößel paß nit.",
+    "config-upgrade-key-missing": "Mer han jefonge, dat MediaWiki ald enschtalleed es.\nÜm de Projramme un Daate o der neue Schtand bränge ze künne, dunn aan et Engk vun dä Dattei <code lang=\"en\"><code>LocalSettings.php</code></code> op dämm ẞööver:\n\n$1\n\naanhange.",
+    "config-localsettings-incomplete": "Mer han en Dattei <code lang=\"en\"><code>LocalSettings.php</code>:</code> jefonge, ävver di schingk nit kumplätt ze sin.\nDe Varijable <code lang=\"en\">$1</code> es nit jesatz.\nBes esu joot, un donn di Dattei esu aanpaße, dat se jesaz ea, un dann donn op „{{int:config-continue}}“ klecke.",
+    "config-localsettings-connection-error": "Ene Fähler es opjetrodde wi mer en Verbendung noh de Datebangk opmaache wullte met dä Enshtellunge uß dä Dattei <code lang=\"en\">LocalSettings</code> udder uß dä Dattei <code lang=\"en\">LocalSettings</code> un et hät nit jeflupp. Bes esu joot un dat repareere un versöhg et dann norr_ens.\n\n$1",
+    "config-session-error": "Ene Fähler es opjetrodde beim Aanmelde för en Sezung: $1",
+    "config-session-expired": "De Daate för Ding Setzung sinn wall övverholld of afjeloufe.\nDe Setzungunge sin esu enjeshtallt, nit mieh wi $1 ze doore.\nDat kanns De verlängere, endämm dat De de <code lang=\"en\">session.gc_maxlifetime</code> en dä Dattei <code>php.ini</code> jrüüßer määß.\nDon dat Projramm för et Opsäze norr_ens aanschmiiße.",
+    "config-no-session": "De Daate för Ding Setzung sinn verschött jejange.\nDonn en dä Dattei <code>php.ini</code> nohloore, ov dä <code lang=\"en\">session.save_path</code> op e zopaß Verzeijschneß zeisch.",
+    "config-your-language": "Ding Schprooch:",
+    "config-your-language-help": "Donn heh di Shprooch ußsöhke, di dat Enshtallzjuhnsprojramm kalle sull.",
+    "config-wiki-language": "Dem Wiki sing Shprooch:",
+    "config-wiki-language-help": "Donn heh di Shprooch ußsöhke, di et Wiki shtandattmääßesch kalle sull.",
+    "config-back": "← Retuur",
+    "config-continue": "Wigger →",
+    "config-page-language": "Schprooch",
+    "config-page-welcome": "Wellkumme beim MediaWiki!",
+    "config-page-dbconnect": "Met dä Daatebangk Verbenge",
+    "config-page-upgrade": "En Inshtallzjuhn op der neuste Shtand bränge",
+    "config-page-dbsettings": "Parrameeter för de Daatebangk",
+    "config-page-name": "Name",
+    "config-page-options": "Ennställunge",
+    "config-page-install": "Opsäzze",
+    "config-page-complete": "Fäädesch!",
+    "config-page-restart": "Et Opsäze norr_ens neu aanfange",
+    "config-page-readme": "Donn mesch lässe! (<i lang=\"en\">read me</i>)",
+    "config-page-releasenotes": "Henwies för heh di Version vum Projramm (<i lang=\"en\">Release notes</i>)",
+    "config-page-copying": "Ben aam Kopeere",
+    "config-page-upgradedoc": "Ben op der neuste Stand aam bränge",
+    "config-page-existingwiki": "Mer han ald e Wiki!",
+    "config-help-restart": "Wells De all Ding enjejovve Sachee fottjeschmesse han, un dä janze Vörjang vun fürre aan neu aanfange?",
+    "config-restart": "Joh, neu aanfange!",
+    "config-welcome": "=== Ömjevong Prööfe ===\nMer maache en Aanzal jrundlääje Prövunge, öm erus ze fenge, ov di Ömjevong heh paß, för Mediawiki opzesäze.\nWann de Hölp bem Opsäze bruchs, donn wigger ssare, wat erus kohm, wat heh shteiht.",
+    "config-copyright": "=== Urhävverrääsch un Lizänzbedengunge ===\n\n$1\n\nDat  Projramm heh es frei, mer kann et wiggerjävve un verdeijle un och verändere ungger dä Bedengunge vun de  GNU <i lang=\"en\">General Public License</i> (Alljemeine öffentlesche Lizänz) wi se vun de <i lang=\"en\">Free Software Foundation</i> (de Shteftung för frei Projramme) veröffentlesch woode es. Dobei kanns De Der de Version 2 vun dä Lizanz ußsöhke, udder jeede Version donoh, wi et Der jefällt.\n\nDat Projramm weed wigger jejovve met dä Hoffnung, dat et jät nöz, ävver '''ohne Jarrantie''', sujaa ohne de onußjeshproche Jarantie, '''verkoufbaa''' ze sin, udder '''för öhnds_ene beshtemmpte Zweck ze bruche''' ze sin.\nLiß de GNU <i lang=\"en\">General Public License</i> sellver, öm mieh ze erfahre.\n\nDo sullts en <doclink href=Copying>Kopie vun dä alljemene öffentlesche Lizänz vun dä GNU</doclink> (<i lang=\"en\">GNU General Public License</i>) zosamme met heh däm Projramm krääje han. Wann dat nit esu es, schrief aan de <i lang=\"en\">Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA</i>. udder [http://www.gnu.org/copyleft/gpl.html liß se online övver et Internet].",
+    "config-sidebar": "* [//www.mediawiki.org MediaWiki sing Hompäjdsch]\n* [//www.mediawiki.org/wiki/Help:Contents Handbooch för Aanwender]\n* [//www.mediawiki.org/wiki/Manual:Contents Handbooch för Administratore un Wiki_Köbesse]\n* [//www.mediawiki.org/wiki/Manual:FAQ Öff jeshtallte Froore met Antwoote]\n----\n* <doclink href=Readme>Liß Mesch! (<i lang=\"en\">Read me</i>)</doclink>\n* <doclink href=ReleaseNotes><i lang=\"en\">Release notes</i> Övver heh di Projrammversion</doclink>\n* <doclink href=Copying><i lang=\"en\">Copying</i> — Lizänzbeshtemmunge</doclink>\n* <doclink href=UpgradeDoc><i lang=\"en\">Upgrading</i> — Ob en neu Projrammversion jonn</doclink>",
+    "config-env-good": "De Ömjävung es jeprööf.\nDo kanns MediaWiki opsäze.",
+    "config-env-bad": "De Ömjävung es jeprööf.\nDo kanns MediaWiki nit opsäze.",
+    "config-env-php": "PHP $1 es doh.",
+    "config-env-php-toolow": "PHP $1 es enshtalleert.\nÄvver MediaWiki bruch PHP $2 udder hühter.",
+    "config-unicode-using-utf8": "För et <i lang=\"en\">Unicode</i>-Nommaliseere dom_mer däm <i lang=\"en\">Brion Vibber</i> sing Projramm <code lang=\"en\">utf8_normalize.so</code> nämme.",
+    "config-unicode-using-intl": "För et <i lang=\"en\">Unicode</i>-Nommaliseere dom_mer dä [http://pecl.php.net/intl Zohsaz <code lang=\"en\">intl</code> uss em <code lang=\"en\">PECL</code>] nämme.",
+    "config-unicode-pure-php-warning": "'''Opjepaß:''' Mer kunnte dä [http://pecl.php.net/intl Zohsaz <code lang=\"en\">intl</code> uss em <code lang=\"en\">PECL</code>] för et <i lang=\"en\">Unicode</i>-Nommaliseere nit fenge. Dröm nämme mer dat eijfache, ävver ärsh lahme, <i lang=\"en\">PHP</i>-Projrammshtöck doför.\nFör jruuße Wikis met vill Metmaachere doht Üsch die Sigg övver et [//www.mediawiki.org/wiki/Unicode_normalization_considerations <i lang=\"en\">Unicode</i>-Nommaliseere] (es op Änglesch) aanloore.",
+    "config-unicode-update-warning": "'''Opjepaß:''' Dat Projramm för der <i lang=\"en\">Unicode</i> zo normaliseere boud em Momang op en  ählter Version vun dä Bibliothek vum [http://site.icu-project.org/ ICU-Projäk] op.\nDoht di [//www.mediawiki.org/wiki/Unicode_normalization_considerations op der neuste Shtand bränge], wann auf dat Wiki em Äänz <i lang=\"en\">Unicode</i> bruche sull.",
+    "config-no-db": "Mer kunnte kei zopaß Daatebangk-Driiverprojamm fenge.\nMer bruche e Daatebangk-Driiverprojamm för PHP. Dat moß enjeresht wääde.\nMer künne met heh dä Daatebangke ömjonn: $1.\n\nWann De nit om eijene Rääshner bes, moß De Dinge <i lang=\"en\">provider</i> bedde, dat hä Der ene zopaß Driiver enresht.\nWann de PHP sellver övversaz häs, donn e Zohjangsprjramm för en Daatebangk enbenge, för e Beishpell met: <code  lang=\"en\">./configure --with-mysql</code> op ene <i lang=\"en\">command shell</i>.\nWann De PHP uss enem <i lang=\"en\">Debian</i> udder <i lang=\"en\">Ubuntu</i> Pakätt enjeresht häs, moß De dann och noch et <code lang=\"en\">php5-mysql</code> op Dinge Räschner bränge.",
+    "config-outdated-sqlite": "'''Opjepaß:''' <i lang=\"en\">SQLite</i> $1 es enschtaleert. Avver MediaWiki bruch <i lang=\"en\">SQLite</i> $2 udder hühter. <i lang=\"en\">SQLite</i> kann dröm nit enjesaz wääde.",
+    "config-no-fts3": "'''Opjepaß:''' De Projramme vum <i lang=\"en\">SQLite</i> sin der ohne et [//sqlite.org/fts3.html FTS3-Modul] övversaz, dröm wääde de Funxjohne för et Söhke fähle.",
+    "config-register-globals": "'''Opjepaß:''' dem PHP singe Schallder <code lang=\"en\">[http://php.net/register_globals register_globals]</code> es enjeschalldt.\n'''Donn dä ußmaache, wann De kann.'''\nMediaWiki löp och esu, dä künnt ävver Sesherheitslöcke opmaache, di mer noch nit jefonge un eruß jemaat hät.",
+    "config-magic-quotes-runtime": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]</code> es enjeschalldt.\nDä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
+    "config-magic-quotes-sybase": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]</code> es enjeschalldt.\nDä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
+    "config-mbstring": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]</code> es enjeschalldt.\nDat sorresch för Fähler un kann enjejovve Daate esu kapott maach, dat doh draan nix mieh ze repareere es.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
+    "config-ze1": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]</code> es enjeschalldt.\nDat sorresch för schräcklejje Fähler em MediaWiki.\nDat kam_mer domet nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
+    "config-safe-mode": "'''Opjepaß:''' Dem PHP singe <code lang=\"en\">[http://www.php.net/features.safe-mode safe mode]</code> es aanjeschalldt. Dat kann Ärjer maache, besönders beim Datteie Huhlaade bei de Ongershtözung för <code lang=\"en\">math</code>-Befähle.",
+    "config-xml-bad": "Dem PHP sing XML-Modul es nit ze fenge.\nMediaWiki bruch Funxjohne en däm Modul un deiht et esu nit.\nWann De <i lang=\"en\">Mandrake</i> aam loufehäs, donn dat Pakätt <code lang=\"en\">php-xml</code> enstalleere.",
+    "config-pcre": "Dem PHP sing Modul för <i lang=\"en\">PCRE</i> schingk ze fähle.\nMediaWiki deiht et nit der ohne de Funxjohne för de rejolähre Ußdrök vun dä Zoot, wi <i lang=\"en\">Perl</i> se kännt.",
+    "config-pcre-no-utf8": "'''Dä:''' Et PHP-Modul <i lang=\"en\">PCRE</i> schingk ohne de <i lang=\"en\">PCRE_UTF8</i>-Aandeile övversaz ze sin.\nMediaWiki bruch dä UTF-8-Krohm ävver, öm ohne Fähler loufe ze künne.",
+    "config-memory-raised": "Der jrühzte zohjelasse Shpeisherbedarf vum PHP, et <code lang=\"en\">memory_limit</code>, shtund op $1 un es op $2 erop jesaz woode.",
+    "config-memory-bad": "'''Opjepaß:''' Dem PHP singe Parameeter <code lang=\"en\">memory_limit</code> es $1.\nDat es wall ze winnisch.\nEt Enreeschte kunnt doh draan kappott jon!",
+    "config-ctype": "'''Fähler:''' <i lang=\"en\">PHP</i> moß met dä Ongerschtözong för der [http://www.php.net/manual/en/ctype.installation.php <code lang=\"en\">Ctype</code> Zohsaz] övversaz woode sin.",
+    "config-xcache": "Dä <code lang=\"en\">[http://xcache.lighttpd.net/ XCache]</code> es ennjeresht.",
+    "config-apc": "Dä <code lang=\"en\">[http://www.php.net/apc APC]</code> es ennjeresht.",
+    "config-wincache": "Dä <code lang=\"en\">[http://www.iis.net/download/WinCacheForPhp WinCache]</code> es ennjeresht.",
+    "config-no-cache": "'''Opjepaß:''' Mer kunnte dä <code lang=\"en\">[http://www.php.net/apc APC]</code>, dä <code lang=\"en\">[http://xcache.lighttpd.net/ XCache]</code> un dä <code lang=\"en\">[http://www.iis.net/download/WinCacheForPhp WinCache]</code> nit fenge.\nEt <i lang=\"en\">object caching</i> es nit müjjelesh un ußjeschalldt.",
+    "config-mod-security": "'''Opjepaß''': Dinge Webßööver hät <code lang=\"en\">[http://modsecurity.org/ mod_security]</code> enjeschalldt. Wann doh derbei en Enschtällong nit janz akeraat paßß, dann kann et goot sin, dat mer Probleme met MeedijaWiki un oc met ander Projramme kritt, die zohlööt, dat vun ußerhallef öhndsene Krohm op dä Webßööver jebraat wääde künnt.Beloor Der di Sigg <code lang=\"en\">[http://modsecurity.org/documentation/ mod_security documentation]</code> udder donn met dä Fachlück för Dinge Webßööver kalle, wann zohfälleje un koomijje Fähler bemerke deihß.",
+    "config-diff3-bad": "Mer han <i lang=\"en\">GNU</i> <code lang=\"en\">diff3</code> nit jefonge.",
+    "config-git": "Mer han de Väsjohn <code>$1</code> vun däm Väsjohnsverwalldongsprojamm <i lang=\"en\">Git</i> jefonge.",
+    "config-git-bad": "Dat Väsjohnsverwalldongsprojamm <i lang=\"en\">Git</i> ham_mer nit jefonge.",
+    "config-imagemagick": "Mer han <i lang=\"en\">ImageMagick</i> jefonge: <code>$1</code>.\nEt Ömrääschne en Minni-Beldsche weed müjjelesch sin, wann De et Belder Huhlaade zohlöhß.",
+    "config-gd": "Mer han de ennjeboute GD-Jrafik-Projramm-Biblijotheek jefonge.\nEt Ömrääschne en Minni-Beldsche weed müjjelesch sin, wann De et Belder Huhlaade zohlöhß.",
+    "config-no-scaling": "Mer han weeder de GD-Jrafik-Projramm-Biblijotheek, noch <i lang=\"en\">ImageMagick</i> jefonge.\nEt Ömrääschne en Minni-Beldsche weed ußjeschalldt.",
+    "config-no-uri": "'''Fähler:''' Mer kunnte der aktoälle <i lang=\"en\">URI</i> nit erusfenge.\nEt Enreeschte es domet heh aam Engk.",
+    "config-no-cli-uri": "'''Opjepaß''': <code lang=\"en\">--scriptpath</code> es nit aanjejovve, mer nämme der Schtandatt: <code>$1</code>.",
+    "config-using-server": "Mer nämmen dem ẞööver singe Name: „<nowiki>$1</nowiki>“.",
+    "config-using-uri": "Mer nämmen dem ẞööver singe <i lang=\"en\">URL</i>: „<nowiki>$1$2</nowiki>“.",
+    "config-uploads-not-safe": "'''Opjepaß:''' Uß däm jewöhnlijje Verzeichnes för de huhjelaade Datteie, dat es <code>$1</code>, künnte öhnzwällsche Skrepte un Projramme ußjeföhrt wääde. Och wann MediaWiki de huhjelaade Datteie prööf, dat kein bekannte Risike dren sin, sullt mer doch dat [//www.mediawiki.org/wiki/Manual:Security#Upload_security Sesherheitsloch] zoh maache, ih dat mer et Dattei Huhlaade zohlöht.",
+    "config-no-cli-uploads-check": "'''Opjepaß''': <code>$1</code> es dat Schtandatt-Verzeijschneß för et Datteije-Huhlaade. Beim Opsäze met <abbr lang=\"en\" title=\"Call Level Interface\">CLI</abbr> donn mer ävver nit övverpröhve, dat dat jeschöz es dojääje, dat Skrepte vun doh loufe künne, di mer nit loufe han well.",
+    "config-brokenlibxml": "Op Dingem Rääschner loufe Versione vun PHP un <code lang=\"en\">libxml2</code> zosamme, di ävver nit zosamme paßße, un de Daate em MediaWiki un ander Web_Aanwändunge [//bugs.php.net/bug.php?id=45996 bug kapott maache].\nJangk op PHP 5.2.9 udder dohnoh un op <code lang=\"en\">libxml2</code> 2.7.3 udder dohnoh.\nHeh jeihd et nit wigger.",
+    "config-using531": "MediaWiki läuf nit met PHP $1 zosamme wääje enem [//bugs.php.net/bug.php?id=50394 Fähler em Zosammehang met Parrameetere för <code lang=\"en\">__call()</code>].\nJangk op de Version 5.3.2 vum <i lang=\"en\">PHP</i> ov dohnoh, udder op de Version 5.3.0 udder dovöör, öm dat Problem ze ömjonn.\nHeh jeiht et nit wigger.",
+    "config-suhosin-max-value-length": "<i lang=\"en\">Suhosin</i> es enschtalleet. Dröm kann ene <code lang=\"en\">GET</code>-Parrameeter nit övver {{PLURAL:$1|ei Byte|$1 Bytes|noll Byte}} lang wääde. Dem MediaWiki singe <i lang=\"en\">ResourceLoader</i> kütt doh zwa drömeröm, ävver dat bräms. Wann müjelesch, doht <code lang=\"en\">suhosin.get.max_value_length</code> en dä Dattei <code lang=\"en\">php.ini</code> op 1024 Bytes udder drövver enschtälle, un dann moß <code lang=\"en\">$wgResourceLoaderMaxQueryLength</code> en dä Dattei <code lang=\"en\">LocalSettings.php</code> op däsälve Wäät jesaz wääde.",
+    "config-db-type": "De Zoot Daatebangk:",
+    "config-db-host": "Dä Name vun däm Rääschner met dä Daatebangk:",
+    "config-db-host-help": "Wann Dinge ẞööver för de Daatebangk ob enem andere Rääschner es, donn heh dämm singe Name udder dämm sing <i lang=\"en\">IP</i>-Addräß enjävve.\n\nWann De ob enem Meetẞööver beß, weet Der Dinge Provaider odder däm sing Dokemäntazjuhn saare, wat De endraare moß.\n\nWann De ob enem ẞööver onger <i lang=\"en\">Windows</i> am enshtalleere bes un en <i lang=\"en\">MySQL</i>-Daatebangk häs, künnd_et sin, dat „<code lang=\"en\">localhost</code>“ nit douch för der Name vum ẞööver. Wann dad-esu es, versöhg et ens met „<code lang=\"en\">127.0.0.1</code>“ als <i lang=\"en\">IP</i>-Addräß vum eije Rääschner.\n\nWann De ene <i lang=\"en\">PostgreSQL</i>-ẞööver häs, donn dat Fäld läddesch lohße, öm en Verbendung övver e <i lang=\"en\">Unix socket</i> opzemaache.",
+    "config-db-host-oracle": "Dä Daatebangk ier <i lang=\"en\" title=\"Transparent Network Substrate\">TNS</i>:",
+    "config-db-host-oracle-help": "Donn ene jöltije [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm „<i lang=\"en\">Local Connect</i>“-Name] aanjävve. De Dattei „<code lang=\"en\">tnsnames.ora</code>“ moß för heh dat Projamm seschbaa un ze Lässe sin.<br />Wann heh de Projamm_Biblijoteeke für de Aanwänderprojramme för de Version 10g udder neuer enjesaz wääde, kam_mer och et [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm „<i lang=\"en\">Easy Connect</i>“] jenumme wääde för der Name ze verjävve.",
+    "config-db-wiki-settings": "De Daate vum Wiki",
+    "config-db-name": "Dä Name vun dä Daatebangk:",
+    "config-db-name-help": "Jiff ene Name aan, dä för Ding Wiki passe deiht.\nDoh sullte kei Zweschrereum un kein Stresche dren sin.\n\nWann De nit op Dingem eije Rääschner bes, künnt et sin, dat Dinge Provaider Der extra ene beshtemmpte Name för de Daatebangk jejovve hät, uffr dat de dä drom froore moß udder dat De de Daatebangke övver e Fommulaa selver enreeschte moß.",
+    "config-db-name-oracle": "Schema för de Daatebangk:",
+    "config-db-account-oracle-warn": "Mer han drei Aate, wi mer <i lang=\"en\">Oracle</i> als Daatebangk aanbenge künne.\n\nWann De ene neue Zohjang op de Daatenbangk met Naame un Paßwoot mem Projramm för et Opsäze aanlääje wells, dann jif ene Zohjang met däm Rääsch „<i lang=\"en\">SYSDBA</i>“ aan, dä et alld jitt, un jif däm di Daate aan för dä neue Zohjang aanzelääje.\nDo kanns och dä neue Zohjang vun Hand aanlääje un heh beim Opsäze nur dää aanjävve — wann dä dat Rääsch hät, en de Daatebangk Schema_Objäkte aanzelääje.\nUdder De jiß zwei ongerscheidlijje Zohjäng op de Daatenbangk aan, woh eine vun dat Rääsch zom Aanlääje hät un dä andere moß dat nit un es för der nomaale Bedrief zohshtändesch.\n\nEn Skrep, wat ene Zohjang op de Daatenbangk aanlääsch met all dä nüüdejje Rääschde, fengks De em Verzeishneß <code lang=\"en\">maintenance/oracle/</code> vun Dingem MediaWiki. Donn draan dengke, dat ene Zohjang met beschrängkte Rääschde all di Müjjeleschkeite för et Waade un Repareere nit hät, di de jewöhnlejje Zoot Zohjang met sesh brängk.",
+    "config-db-install-account": "Der Zohjang för en Enreeschte",
+    "config-db-username": "Dä Name vun däm Aanwender för dä Zohjref op de Daatebangk:",
+    "config-db-password": "Et Paßwoot vun däm Aanwender för dä Zohjref op de Daatebangk:",
+    "config-db-password-empty": "Jiv e Paßwoot aan, för dä neue Aanwender för dä Zohjref op de Daatebangk, $1.\nEd es zwa müjjelesch, Aanwender för dä Zohjref op de Daatebangk der ohne e Paßwoot aanzelääje,\nävver dat wöhr en schwere Jevah för de Sescherheit vum Wiki.",
+    "config-db-install-username": "Jiv ene Name aan för dä Aanwender för dä Zohjref op de Daatebangk beim Enshtalleere.\nDat es keine Metmaacher_Name em Wiki — heh dä Name es alleins en der Daatebangk bikannt.",
+    "config-db-install-password": "Jiv e Paßwoot aan för dä Aanwender för dä Zohjref op de Daatebangk beim Enshtalleere.\nDat es kei Paßwoot för ene Metmaacher em Wiki — et es alleins en der Daatebangk bikannt.",
+    "config-db-install-help": "Donn dä Name un et Paßwoot vun däm Aanwänder för der Zohjreff op de Daatebangk jäz för et Enreeshte aanjävve.",
+    "config-db-account-lock": "Donn dersälve Name un et sälve Paßwoot för der nomaale Bedrief vum Wiki bruche",
+    "config-db-wiki-account": "Dä Name vun däm Aanwender för dä Zohjref op de Daatebangk em nomaale Bedrief:",
+    "config-db-wiki-help": "Jiv ene Name un e Paßwoot aan, för dä Aanwender för dä Zohjref op de Daatebangk, wann et wiki nommaal aam Loufe es.\nWan et dä Name en der Daatebangk noch it jit, un dä Aanwender för dä Zohjref op de Daatebangk beim Enshtalleere\njenooch Beräschtijunge hät, läät dä heh dä Aanwender en der Daatebangk aan un jidd_em di Rääschde, di dä nüüdesch hät, ävver nit mieh.",
+    "config-db-prefix": "Vörsaz för de Name vun de Tabälle en de Daatebangk:",
+    "config-db-prefix-help": "Wann ein Daatebangk för mieh wi ein Wiki udder e Wiki uns söns jät zosamme jebruch weed, dann kam_mer noch jet vör de Tabälle ier Name säze. Esu ene Vörsaz sull dubblte Tabällename vermeide hälfe.\nDonn kein Zwescheräum enjävve!\n\nJewöhnlesch bliev dat Feld heh ävver läddesch.",
+    "config-db-charset": "Dä Daatebangk iere Zeishesaz",
+    "config-charset-mysql5-binary": "MySQL (4.1 udder 5.0) binär",
+    "config-charset-mysql5": "MySQL (4.1 udder 5.0) UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 röckwääts kompatibel UTF-8",
+    "config-charset-help": "''' Opjepaß:'''\nWann De et '''röckwääts kompatibel UTF-8 Fommaat''' nemmps, met dem <i lang=\"en\">MySQL</i> singe Version4.1 udder hüüter, dann künnt dat all di Zeishe kappott maache, die nit em <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> sen, un domet all ding Sesherungskopieje kapott maache, wat mer nieh mieh retuur krijje kann.\n\nBeim Shpeishere em '''binäre Fomaat''' deiht MediaWiki de Täxte, di em UTF-8 Fommaat kumme, en dä Daatebangk en binär kodeerte Daatefälder faßhallde.\nDat es flöcker un spaasaamer wi et UTF-8 Fommaat vum <i lang=\"en\">MySQL</i> un määd et müjjelesch, all un jeedes <i lang=\"en\">Unicode</i>-Zeishe met faßzehallde.\n\nBeim Shpeishere em '''UTF-8 Fomaat''' deiht et <i lang=\"en\">MySQL</i> der Zeishesaz un de Kodeerung vun dä Daate känne, un kann se akeraat aanzeije un ömwandelle,\nallerdengs künne kein Zeishe ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrundlääje Knubbel för vill Shprooche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeshpeishert wääde.",
+    "config-mysql-old": "Mer bruche <i lang=\"en\">MySQL</i> $1 udder neuer. Em Momang es <i lang=\"en\">MySQL</i> $2 aam Loufe.",
+    "config-db-port": "De Pooz-Nommer (<i lang=\"en\">port</i>) för de Daatebangk:",
+    "config-db-schema": "Et Schema en de Datebangk för MediaWiki:",
+    "config-db-schema-help": "För jewöhnlesch es dat Schema en Odenong.\nDonn bloß jät draan ändere, wann De sescher weiß, dat dat nüüdesch es.",
+    "config-pg-test-error": "Mer krijje kein Verbendung zor Daatebank '''$1''': $2",
+    "config-sqlite-dir": "Dem <i lang=\"en\">SQLite</i> sing Daateverzeishnes:",
+    "config-sqlite-dir-help": "<i lang=\"en\">SQLite</i> hät all sing Daate zosamme en en einzel Dattei.\n\nEn dat Verzeishneß, wat De aanjiß, moß dat Web_ẞööver_Projramm beim Opsäze eren schriive dörrve.\n\nDat Verzeishneß sullt '''nit''' övver et Web zohjänglesch sin, dröm dom_mer et nit dohen, woh de <i lang=\"en\">PHP</i>-Datteije sin.\n\nMer donn beim Opsäze zwa uß Vöörssh en <code lang=\"en\">.htaccess</code> Dattei dobei, ävver wann di nit werrek, künnte Lück vun ußerhallef aan Ding Daatebangk_Dattei eraan kumme.\nDoh shtonn Saache dren, wi de Addräße för de Metmaacher ier <i lang=\"en\">e-mail</i> un de verschlößelte Paßwööter un de vershtoche un de fottjeschmeße Sigge un ander Saache ussem Wiki, di mer nit öffentlesch maache darref.\n\nDonn Ding Daatebangk et beß janz woh anders hen, noh <code lang=\"en\">/var/lib/mediawiki/''wikiname''</code> för e Beishpell.",
+    "config-oracle-def-ts": "Tabälleroum för der Shtandattjebruch:",
+    "config-oracle-temp-ts": "Tabälleroum för der Jebruch zweschedorsh:",
+    "config-type-mysql": "<i lang=\"en\">MySQL</i>",
+    "config-type-postgres": "<i lang=\"en\">PostgreSQL</i>",
+    "config-type-sqlite": "<i lang=\"en\">SQLite</i>",
+    "config-type-oracle": "<i lang=\"en\">Oracle</i>",
+    "config-support-info": "MediaWiki kann met heh dä Daatebangk_Süßteeme zosamme jonn:\n\n$1\n\nWann dat Daatebangk_Süßteem, wat De nämme wells, onge nit dobei es, dann donn desch aan di Aanleidonge hallde, di bovve verlengk sen, öm et op Dingem ẞööver singem Süßteem müjjelesh ze maache, se aan et Loufe ze krijje.",
+    "config-support-mysql": "* <i lang=\"en\">$1</i> es dat vum MediaWiki et eets ongershtöz Daatebangksüßteem ([http://www.php.net/manual/de/mysql.installation.php Aanleidung för et Övversäze un Enreeschte von PHP met <i lang=\"en\">MySQL</i> dobei, op Deutsch])",
+    "config-support-postgres": "* <i lang=\"en\">$1</i> es e bikannt Daatebangksüßteem met offe Quälltäxde, un en och en Wahl nävve <i lang=\"en\">MySQL</i> ([http://www.php.net/manual/de/pgsql.installation.php Aanleidung för et Övversäze un Enreeschte von PHP met <i lang=\"en\">PostgreSQL</i> dobei, op Deutsch]) Et sinn_er ävver paa klein Fählershe bekannt, um kunne dat em Momang för et reschtijje Werke nit emfähle.",
+    "config-support-sqlite": "* <i lang=\"en\">$1</i> es e eijfach Daatebangksüßteem, wat joot ongershtöz weed. ([http://www.php.net/manual/de/pdo.installation.php Aanleidong för et Övversäze un Enreeschte von PHP met <i lang=\"en\">SQLite</i> dobei, op Deutsch])",
+    "config-support-oracle": "* <i lang=\"en\">$1</i> es e jeschäfflesch Daatebangksüßteem för Ferme. ([http://www.php.net/manual/de/oci8.installation.php Aanleidong för et Övversäze un Enreeschte von PHP met <i lang=\"en\">OCI8</i> dobei, op Deutsch])",
+    "config-header-mysql": "De Enshtällunge för de <i lang=\"en\">MySQL</i> Daatebangk",
+    "config-header-postgres": "De Enshtällunge för de <i lang=\"en\">PostgreSQL</i> Daatebangk",
+    "config-header-sqlite": "De Enshtällunge för de <i lang=\"en\">SQLite</i> Daatebangk",
+    "config-header-oracle": "De Enshtällunge för de <i lang=\"en\">Oracle</i> Daatebangk",
+    "config-invalid-db-type": "Dat es en onjöltijje Zoot Daatebangk.",
+    "config-missing-db-name": "Do moß jät enjävve för dä Name vun dä Daatebangk.",
+    "config-missing-db-host": "Do moß jät enjävve för dä Name vun däm Rääschner met dä Daatebangk.",
+    "config-missing-db-server-oracle": "Do moß jät enjävve för dä Daatebangk ier <i lang=\"en\" title=\"Transparent Network Substrate\">TNS</i>.",
+    "config-invalid-db-server-oracle": "Dä Daatebangk ier <i lang=\"en\" title=\"Transparent Network Substrate\">TNS</i> kann nit „$1“ sin, dat es esu nit jöltesch.\nDöh dörve bloß <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> Boochshtaabe (a-z, A-Z), Zahle (0-9), Ongerstreshe (_), un Punkte (.) dren vörkumme.",
+    "config-invalid-db-name": "Dä Daatebangk iere Name kann nit „$1“ sin, dä es esu nit jöltesch.\nDöh dörve bloß <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> Boochshtaabe (a-z, A-Z), Zahle (0-9), Ongerstresh (_), un Bendeshtresh (-) dren vörkumme.",
+    "config-invalid-db-prefix": "Dä Vörsaz för de Name vun de Tabälle en de Daatebangk kann nit „$1“ sin, dä es esu nit jöltesch.\nDöh dörve bloß <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> Boochshtaabe (a-z, A-Z), Zahle (0-9), Ongerstreshe (_), un Bendeshtreshe (-) dren vörkumme.",
+    "config-connection-error": "$1.\n\nDonn de Name för dä Rääschner, vun däm Aanwender för dä Zohjref op de Daatebangk, un et Paßwoot prööfe, repareere, un dann versöhg et norr_ens.",
+    "config-invalid-schema": "Dat Schema för MediaWiki kann nit „$1“ sin, dä Name wöhr esu nit jöltesch.\nDöh dörve bloß <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> Boochshtaabe (a-z, A-Z), Zahle (0-9), un Ongerstreshe (_) dren vörkumme.",
+    "config-db-sys-create-oracle": "Dat Projramm för MediaWiki opzesäze kann bloß <i lang=\"en\">SYSDBA</i> bruche för ene neue Zohjang zor Daatebangk enzereeschte!",
+    "config-db-sys-user-exists-oracle": "Dä Aanwender „$1“ för dä Zohjref op de Daatebangk jidd_et ald. <i lang=\"en\">SYSDBA</i> kam_mer bloß bruche, för ene neue Zohjang enzereeschte!",
+    "config-postgres-old": "Mer bruche <i lang=\"en\">PostgreSQL</i> $1 udder neuer. Em Momang es <i lang=\"en\">PostgreSQL</i> $2 aam Loufe.",
+    "config-sqlite-name-help": "Söhk enen Name uß, dä Ding Wiki beschrief.\nDonn kein Bendeschresch un Zweschräum en däm Name bruche.\nDä Name weed för der Dateiname för de <i lang=\"en\">SQLite</i> Daatebangk jenumme.",
+    "config-sqlite-parent-unwritable-group": "Mer kunnte dat Verzeischneß för de Daate, <code lang=\"en\"><nowiki>$1</nowiki></code>, nit enreeschte, weil dat Projramm fö dä Web_ẞööver en dat Verzeischneß doh drövver, <code><nowiki>$2</nowiki></code>, nix erin donn darref.\n\nMer han dä Name vun däm Zohjang op et Süßteem eruß jefonge, onger dämm dat Web_ẞööver_Projramm läuf. Jez moß De bloß doför sorrje, dat dä en dat Verzeischneß  <code><nowiki>$3</nowiki></code> schrieve kann, öm heh wigger maache ze künne.\nOb enem Süßteem met <i lang=\"en\">Unix</i>- oder <i lang=\"en\">Linux</i> jeiht dat esu:\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Mer kunnte dat Verzeischneß för de Daate, <code lang=\"en\"><nowiki>$1</nowiki></code>, nit enreeschte, weil dat Projramm fö dä Web_ẞööver en dat Verzeischneß doh drövver, <code><nowiki>$2</nowiki></code>, nix erin donn darref.\n\nMer han dä Name vun däm Zohjang op et Süßteem nit eruß fenge künne, onger dämm dat Web_ẞööver_Projramm läuf. Jez moß De bloß doför sorrje, dat dä en dat Verzeischneß  <code><nowiki>$3</nowiki></code> schrieve kann, öm heh wigger maache ze künne. Wann De dä Name och nit weiß, maach, dat jeeder_ein doh schrieve kann.\nOb enem Süßteem met <i lang=\"en\">Unix</i>- oder <i lang=\"en\">Linux</i> jeiht dat esu:\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Ene Fähler es opjetrodde beim Aanlääje vum Daate_Verzeishneß „$1“.\nDon dä Plaz för et Shpeishere prööfe un Repareere, dann versöhg et norr_ens.",
+    "config-sqlite-dir-unwritable": "Mer künne nit en dat Verzeishneß „$1“ schrieeve\nDonn dohvun de Zohjreffs_Rääschde esu verändere, dat der Webßööver doh dren schrieeve kann, un dann versöhg et norr_ens.",
+    "config-sqlite-connection-error": "$1.\n\nDonn onge dat Verzeishnes un der Name vun der Daatebangk prööfe un repareere, un dann versöhg_et norr-ens.",
+    "config-sqlite-readonly": "En di Dattei <code lang=\"en\">$1</code> künne mer nit schrieve.",
+    "config-sqlite-cant-create-db": "Mer kunnte di Dattei <code lang=\"en\">$1</code> för de Daatebangk nit aanlääje.",
+    "config-sqlite-fts3-downgrade": "Dat PHP heh hät kein Ongershtözong för FTS3, dröm donn mer de Daatebangktabälle eronger shtoofe.",
+    "config-can-upgrade": "Et sinn-er ald Daatebangktabelle vum MediaWiki en dä Daatebangk.\nÖm di op der Shtand vum MediaWiki $1 ze bränge, donn jäz op „{{int:config-continue}}“ klecke.",
+    "config-upgrade-done": "Alles es jäz om neue Shtand.\n\nMer kann dat Wiki jäz [$1 bruche].\n\nWann De Ding Dattei <code lang=\"en\">LocalSettings.php</code> neu schrieve wells, donn onge op dä Knopp klicke.\nDat dom_mer ävver '''nit vörschlonn'''em Jääjedeil, ußer, wann et Probleme mem Wiki jitt.",
+    "config-upgrade-done-no-regenerate": "Alles es jäz om neue Shtand.\n\nMer kann dat Wiki jäz [$1 bruche].",
+    "config-regenerate": "Donn de Dattei <code lang=\"en\">LocalSettings.php</code> neu opsäze →",
+    "config-show-table-status": "Et Kommando <code lang=\"en\"><code>SHOW TABLE STATUS</code></code> aan de Daatebangk es donävve jejange!",
+    "config-unknown-collation": "'''Opjepaß:''' De Daatabangk deiht en onbikannte Reijefollsch bruche, för Booshtaabe un Zeishe ze verjliishe un ze zotteere.",
+    "config-db-web-account": "Dä Zohjang zor Daatebangk för et Wiki",
+    "config-db-web-help": "Donn ene Name un e Paßwoot för der Zohjang zor Daatebangk för et Wiki em nomaale Bedrief aanjävve.",
+    "config-db-web-account-same": "Donn dersällve Zohjang nämme, wi heh beim Opsäze.",
+    "config-db-web-create": "Donn dä Zohjang aanlääje, wann dä noch nit doh es.",
+    "config-db-web-no-create-privs": "Dä Zohjang för et Opsäze es nit berääschtesch, ene ander Zohjan enzereeschte.\nDä aanjejovve Zohjang för der Nomaalbedrief moß dröm schunn enjersht sen!",
+    "config-mysql-engine": "De Zoot udder et Fommaat vun de Tabälle:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Opjepaß:''' <i lang=\"en\">MyISAM</i> es als Speicher för <i lang=\"en\">MySQL</i> nit besönders joot för et Zosammeschpell met MediaWiki zo bruche:\n* Dorj_et kumplätte Sperre vun Tabälle, künne koum ens Saache parrallel en dä Daatebangk jedonn wääde.\n* Dat Fomaat es anfällesch för Probleme met de Daate.\n* Et weed vun MediaWiki nit ėmmer zopaß ongerschtöz.\n\nWann Ding <i lang=\"en\">MySQL</i> et Schpeischere en <i lang=\"en\">InnoDB</i>-Datteije ongerschtöze deiht, dom_mer dat nohdröcklesch ämfähle.\nKann dä ẞööver dat nit, künnd et joode jelääjeheit sin, dä ens op der neuste Schtand ze bränge.",
+    "config-mysql-only-myisam-dep": "'''Opjepaß:''' <i lang=\"en\">MyISAM</i> es de einzeje Zoot Speischerprojramm för <i lang=\"en\">MySQL</i>, di nit för MediaWiki ze ämfähle es, weil:\n* wääje dem Schpärre vun jannze Tabälle sin koum paralleele Axjuhne en dä Daatebangk möjjelesch,\n* et es aanfällesch för Probleeme met de Daate es, un\n* et weed vun MediaWiki nit emmer jood ongerschtöz.\n\nDing Enschtallazjuhn vum <i lang=\"en\">MySQL</i> kann nit met <i lang=\"en\">InnoDB</i> ömjonn.\nWi wöhr et met ener neuere väsjohn vum <i lang=\"en\">MySQL</i>?",
+    "config-mysql-engine-help": "'''InnoDB''' es fö jewöhnlesch et beß, weil vill Zohjreffe op eijmohl joot ongershtöz wääde.\n\n'''MyISAM''' es flöcker op Rääschnere met bloß einem Minsch draan, un bei Wikis, di mer bloß lässe un nit schrieeve kann.\nMyISAM-Daatebangke han em Schnett mieh Fähler un jon flöcker kappott, wi InnoDB-Daatebangke.",
+    "config-mysql-charset": "Dä Daatebangk iere Zeishesaz:",
+    "config-mysql-binary": "binär",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "Beim Shpeishere em '''binäre Fomaat''' deiht MediaWiki de Täxte, di em UTF-8 Fommaat kumme, en dä Daatebangk en binär kodeerte Daatefälder faßhallde.\nDat es flöcker un spaasaamer wi et UTF-8 Fommaat vum <i lang=\"en\">MySQL</i> un määd et müjjelesch, all un jeedes <i lang=\"en\">Unicode</i>-Zeishe met faßzehallde.\n\nBeim Shpeishere em '''UTF-8 Fomaat''' deiht et <i lang=\"en\">MySQL</i> der Zeishesaz un de Kodeerung vun dä Daate känne, un kann se akeraat aanzeije un ömwandelle,\nallerdengs künne kein Zeishe ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrundlääje Knubbel för vill Shprooche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeshpeishert wääde.",
+    "config-site-name": "Däm Wiki singe Name:",
+    "config-site-name-help": "Dä douch em Tittel vun de Brauserfinstere un aan ätlije andere Shtälle op.",
+    "config-site-name-blank": "Donn ene Name för di Sait aanjävve.",
+    "config-project-namespace": "Dä Name för et Appachtemang övver et Projäk:",
+    "config-ns-generic": "Projäk",
+    "config-ns-site-name": "Et sällve wi däm Wiki singe Name: $1",
+    "config-ns-other": "Andere (jiff aan wälshe)",
+    "config-ns-other-default": "MingWiki",
+    "config-project-namespace-help": "Noh dämm Vörbeld vun de Wikipeedija, donn vill Wikis dänne ier Sigge övver et Wiki un sing Rääjelle vun dä Sigge mem Enhald vum Wiki tränne, un en enem extra Appachtemang för et „'''Projäk'''“ afflääje.\nSigge en däm Appachtemang fange all med enem beshtemmpte Vörsaz aan, däm Name vum Appachtemang, un dä moß De heh faßlääje.\nDä Name kann beshtemmpte Zeiche nit enthallde, wi „#“ un „:“ un et es Tradizjuhn, dat hä vum Name vum Wiki her kütt.",
+    "config-ns-invalid": "Dat aanjejovve Appachtemang „<nowiki>$1</nowiki>“ es nit jöltesch.\nNemm ene andere Name för däm Wiki sing eije Appachtemang.",
+    "config-ns-conflict": "Dat aanjejovve Appachtemang „<nowiki>$1</nowiki>“ kütt ald als Standatt-Appachtemang em MediaWiki vör.\nNemm ene andere Name för däm Wiki sing eije Appachtemang.",
+    "config-admin-box": "Der Zohjang för der eezte Wiki_Köbes",
+    "config-admin-name": "Metmaacher_Name:",
+    "config-admin-password": "Et Paßwoot:",
+    "config-admin-password-confirm": "Norrens dat Paßwoot:",
+    "config-admin-help": "Jif Dinge leevste Name als Metmaacher för Desch aan, för e Beishpell „Schmitzens Pitter“\n— Dat weed dä Name wääde, met dämm De Desch enlogge deihs.",
+    "config-admin-name-blank": "Jiv ene Metmaacher_Name en för dä Wiki-Köbes.",
+    "config-admin-name-invalid": "„<nowiki>$1</nowiki>“ es keine jöltijje Metmaacher_Name.\nJiv ene joode Name en!",
+    "config-admin-password-blank": "Do mos_e Paßwoot för dä Wiki_Köbes aanjävve!",
+    "config-admin-password-same": "Dat Paßwoot un dä Name dörve nit ejaal sin!",
+    "config-admin-password-mismatch": "Di Paßwööter sin ongerscheidlesh!",
+    "config-admin-email": "Addräß för de <i lang=\"en\">e-mail</i>:",
+    "config-admin-email-help": "Jiv heh di Adräß för de <i lang=\"en\">e-mail</i> aan, woh De <i lang=\"en\">e-mail</i> vun ander Metmaacher uss_em Wiki hen krijje wells, di et Der müjjelesh määt, Ding Paßwoot automatetsch truusche ze lohße, un woh Nohreeshte övver veränderte Sigge op Dinge Oppaßleß hen jescheck wääde sulle.\nDe kanns dat Fäld ävver och läddesch lohße.",
+    "config-admin-error-user": "Beim Enreeshte vum Zohjang för dä Wiki_Köbes „<nowiki>$1</nowiki>“ es ene Fähler em Wiki opjetrodde.",
+    "config-admin-error-password": "Beim Paßwoot-Säze för dä Wiki_Köbes „<nowiki>$1</nowiki>“ es ene Fähler em Wiki opjetrodde.: <pre>$2</pre>",
+    "config-admin-error-bademail": "Do häs_en onjöltijje Addräß för de <i lang=\"en\">e-mail</i> aanjejovve.",
+    "config-subscribe": "Donn de [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce <i lang=\"en\">e-mail</i>-Leß met de Aanköndijunge vum MediaWiki] abonnere.",
+    "config-subscribe-help": "Do kumme bloß winnish Meddeilunge un di jonn övver neu Versiohne vom MediaWiki un weeshtejje Saache vun däm sing Sesherheit.\nDo sullts se abbonneere, un Ding MediWiki_Projramme op der neue Shtand bränge, wann neu Version eruß kumme.",
+    "config-subscribe-noemail": "Do has versöhk, der ohne en Addräß för Ding <i lang=\"en\">e-mail<i> aanzejävve, de Aanköndijonge för Aanköndijunge för neue Versione ze abboneere. Jivv en Addräß aan, wann De di Aanköndijonge hann wells.",
+    "config-almost-done": "Do bes beinah dorsh!\nDo künnts jez der Räß vun de einzel Enshtellunge övverjonn, un et Wiki tiräktemang fäädesch opsäze.",
+    "config-optional-continue": "De wells noch mieh Frore jeshtallt krijje un noch mieh Enshtällunge maache?",
+    "config-optional-skip": "Nä, lohß dä Ömshtand, donn eifarr_et Wiki opsäze.",
+    "config-profile": "Enshtällunge för de Metmaacher ier Rääschte:",
+    "config-profile-wiki": "En offe Wiki",
+    "config-profile-no-anon": "Schriever möße enlogge",
+    "config-profile-fishbowl": "Bloß ußdröcklesch zohjelohße Schriever",
+    "config-profile-private": "E jeschloße Privat_Wiki",
+    "config-profile-help": "Wikis loufe et bäß, wam_mer esu vill Lück wi möjjelesch draan metmaache un schrieve löht.\nMet MediaWiki es et ejfach, de neuste Änderonge ze beloore un wat ahnungslose udder fiese Lück kapott jemaat han wider retuur ze maache.\n\nBloß, mänsch eine häd_eruß jefonge, dat mer MediaWiki jood en en jruuße Zahl ongerscheidlijje Rolle bruche kann, un nit emmer es et leisch, ene vum onverfälschte Wiki_Wääsch ze övverzeuje.\nEsu häß De de Wahl:\n\n'''{{int:config-profile-wiki}}''' löht jeder_ein metschrieve, och ohne sesch enzelogge.\n\n'''{{int:config-profile-no-anon}}''', dat sorsch för mieh seeschbaa Verantwootlischkeite, künnt ävver zohfällije Methellefer verschrecke.\n\n'''{{int:config-profile-fishbowl}}''' löht nor de ußjesöhk Metmaacher schrieve, ävver de janze Öffentleshkeit kann et lässe un süht och de ällder Versione, un wat wää wann draan jedonn hät.\n\n'''{{int:config-profile-private}}''' kann nur lässe, wäh en et Wiki zohjelohße es, un desellve Jropp kann uch schrieve.\n\nNoch ander un un opwändijere Enschtellunge för de Rääschte sin möjjelesch, wann et Wiki ens aam Loufe es. Loor Der doför de [//www.mediawiki.org/wiki/Manual:User_rights zopaß Hölp em Handbooch] aan.",
+    "config-license": "Urhävverrääsch un Lizänz:",
+    "config-license-none": "Kein Fooßreih övver de Lizänz",
+    "config-license-cc-by-sa": "<i lang=\"en\">Creative Commons</i> Der Name moß jenannt sin, et Wiggerjävve es zohjelohße onger dersellve Bedengunge",
+    "config-license-cc-by": "De <i lang=\"en\">Creative Commons</i> ier Lizänz met Namensnännong",
+    "config-license-cc-by-nc-sa": "<i lang=\"en\">Creative Commons</i> Nit för e Jeschäff ze maache, et Wiggerjävve es zohjelohße unger dersellve Bedengunge",
+    "config-license-cc-0": "<i lang=\"en\">Creative Commons</i> „Noll“ (jemeinfrei udder Pablic Domain)",
+    "config-license-gfdl": "De <i lang=\"en\">GNU</i>-Lizänz för frei Dokemäntazjuhne, Version 1.3 udder en späädere",
+    "config-license-pd": "Allmende (jemeinfrei, <i lang=\"en\">public domain</i>)",
+    "config-license-cc-choose": "En <i lang=\"en\">Creative Commons</i> Lizänz, sellver ußjesöhk:",
+    "config-license-help": "Ättlijje öffentleje Wikis donn iehr Beidrääsh onger en [http://freedomdefined.org/Definition frei Lizänz] shtelle.\nDat hellef, e Jeföhl vun Jemeinsamkeid opzeboue, un op lange Seesh emmer wider Beidrääsch ze krijje.\nDat es nit onbedengk nüüdesh för e Jeschäffs- udder Privaat_Wiki.\n\nWä Stöcke uß de Wikipedia bruche well, un han well, dat de Wikipedia uss_em eije Wiki jät övvernämme kann, sullt „'''<i lang=\"en\">Creative Commons</i>, dem Schriever singe Name moß jenannt wääde, un Wiggerjävve zoh dersellve Bedengunge es zohjelohße'''“ ußwähle.\n\nDe su jenannte '''<i lang=\"en\">GNU Free Documentation License</i>''' (de freije Lizänz för Dokemäntazjuhne vun dä GNU) sen de ahle Lizänzbedenonge vun de Wikipedia. Se es emmer noch in Odenong un jöltesch, ävver se es schwer ze vershtonn un et Wiggerjävve un widder Verwände es manshmool schwieeresch domet.",
+    "config-email-settings": "Enschtellunge för de <i lang=\"en\">e-mail</i>",
+    "config-enable-email": "De <i lang=\"en\">e-mail</i> noh druße zohlohße",
+    "config-enable-email-help": "Sulle <i lang=\"en\">e-mails</i> zohjelohße sin, moß mer, domet et noher flupp, de [http://www.php.net/manual/en/mail.configuration.php Enschtellunge em PHP för de <i lang=\"en\">e-mails</i>] zopaß jemaat han.\nWann kein <i lang=\"en\">e-mails</i> nüüdesch sin, kam_mer se heh afschallde.",
+    "config-email-user": "<i lang=\"en\">e-mails</i> zwesche de Metmaacher zohlohße",
+    "config-email-user-help": "Määt et müjjelesch, dat sesch de Metmaacher jääjesiggesch <i lang=\"en\">e-mails</i> schecke künne, wann se dat en iehre eije Enschtellunge och enjeschalldt han.",
+    "config-email-usertalk": "<i lang=\"en\">e-mails</i> mem Bescheid zohlohße, dat einem sing Klaafsigg verändert woodt",
+    "config-email-usertalk-help": "Maach et müjjelesch, dat Metmaaacher en iere Enstellunge <i lang=\"en\">e-mails</i> mem Bescheid zohlohße, dat einem sing Klaafsigg verändert woodt.",
+    "config-email-watchlist": "Nohreeschte övver Änderonge aan Sigg op de Opaßleßte zohlohße",
+    "config-email-watchlist-help": "Lohß Metmaacher Nohreeshte övver de Sigge op dänne iehr Oppaßleß krijje, wann se et en iehre Enschtellonge ußjewählt han.",
+    "config-email-auth": "Donn de Övverprööfung för Zohjangsberääschtejunge övver de <i lang=\"en\">e-mail</i> zohlohße",
+    "config-email-auth-help": "Wann dat aanjeschald es, möße Metmaacher, di iehr Adräß för de <i lang=\"en\">e-mail</i> neu aanjävve udder ändere, di Addräß övver ene Lengk beschtäätejje, dä se met de <i lang=\"en\">e-mail</i> jescheck krijje.\nBloß aan esu beschtääteschte Adräße deiht et Wiki <i lang=\"en\">e-mails</i> schecke, Di künne vun annder Metmaachere kumme, udder vum Wiki sellver, wann en Sigg en däm Metmaacher singe Oppaßleß verändert woode es.\nMer '''schlonn vör, dat aanzeschallde''' för öffentlesch Wikis, weil sönß zoh leisch Driß mem Wiki singe <i lang=\"en\">e-mail</i> jemaat wääde künnt.",
+    "config-email-sender": "De Adräß för de Antwoote op <i lang=\"en\">e-mails</i>:",
+    "config-email-sender-help": "Jiff de Adräß för de <i lang=\"en\">e-mail</i> en, woh Antwoote ob em Wiki singe <i lang=\"en\">e-mails</i> hen jonn sulle.\nDat es och de Adräß, woh de <i lang=\"en\">e-mails</i> met Fählermäldonge hen jon.\nVill ẞöövere för de <i lang=\"en\">e-mail</i> welle winnischßdens ene jöltijje Domain en dä Adräß han.",
+    "config-upload-settings": "Belder un Datteie huh laade",
+    "config-upload-enable": "Belder un Datteie huh laade zohlohße",
+    "config-upload-help": "Datteije huh ze laade künnt e Risiko för dem ẞööver singe Sescherheit sin.\nMieh doh drövver kam_mer em [//www.mediawiki.org/wiki/Manual:Security Kapitel övver de Sescherheit] em Handbooch lässe.\n\nÖm et Huhlaade zohzelohße donn de Rääschde för der Zohjreff op dat Ongerverzeischneß <code lang=\"en\">images</code> em MediaWiki singem Houpverzeischneß esu enshtälle, dat et Webßööverprojramm doh Datteije un Verzeischneße eren schrieve kann.\nDonoh donn heh di Saach zohlohße.",
+    "config-upload-deleted": "Dat Verzeishneß för fottjeschmeße Datteije:",
+    "config-upload-deleted-help": "Söhk e Verzeijschneß uß för de fottjeschmeße Datteije vum Wiki dren afzelääje.\nEt bäß es, wam_mer vum <i lang=\"en\">world wide web</i> doh nit drahn kumme kann.",
+    "config-logo": "Dem Wiki singem Logo sing <i lang=\"en\">URL</i>:",
+    "config-logo-help": "De Schtandart_Bedeen_Bovverfläsch vum MediaWiki hät e Logo bovve en der Eck met 135x160 Pixele.\nDonn e zopaß Logo huh laade, un donn däm sing URL heh endraare.\n\nDo kanns <code lang=\"en\">$wgStylePath</code> udder <code lang=\"en\">$wgScriptPath</code> nämme, wann Ding Logo en einem vun dänne Pahde litt.\n\nWells De kei Logo han, draach heh nix en.",
+    "config-instantcommons": "Donn <i lang=\"en\">InstantCommons</i> zohlohße.",
+    "config-instantcommons-help": "<i lang=\"en\">[//www.mediawiki.org/wiki/InstantCommons InstantCommons]</i> es en Eijeschaff, di et för Wikis müjjelesch määt, Belder, Tondatteie un ander Meedijedatteie enzebenge, di op dä Webßait vun de <i lang=\"en\">[//commons.wikimedia.org/ Wikimedia Commons]</i> ongerjebraat sin. Öm dat noze ze künne, moß dä ẞööver vum MediaWiki en Verbendung nohm Internet opnämme künne.\n\nMieh Aanjaabe doh drövver un en Aanleidung, wi mer och ander Wikis ußer de <i lang=\"en\">Wikimedia Commons</i> doför enreeschte kann, fengk mer em [//mediawiki.org/wiki/Manual:$wgForeignFileRepos Handbooch].",
+    "config-cc-error": "Et Ußsöhke övver de <i lang=\"en\">Creative Commons</i> iehr Projramm zum Lizänzbeshtemme hät nix jebraat.\nDonn de Lizänz sellver beshtemme.",
+    "config-cc-again": "Noch ens neu ußsöhke&nbsp;…",
+    "config-cc-not-chosen": "Söhk uß, wat för en Lizänz vun de <i lang=\"en\">Creative Commons</i> De han wells, un donn dann op „<i lang=\"en\">proceed</i>“ klecke.",
+    "config-advanced-settings": "Fottjeschredde Enshtellunge",
+    "config-cache-options": "Enshtällunge för et Faßhallde vun Objäkte em Zweschsheisher:",
+    "config-cache-help": "Objäkte em Zwescheshpeisher faßhallde, dat heiß öff jebruchte Daate en der <i lang=\"en\">cache</i> donn, bruche mer, öm MediaWiki flöcker ze maache,\nMeddlere un jruuße Wiki-ẞaits sullte dat onbedengk ußnoze, un och bei klein Wikis weed mer et jood merke.",
+    "config-cache-none": "Keine Zweschshpeijsher (Et jeid_em Wiki nix verloore, ußer velleish Schnälleshkeid wann vill loss es)",
+    "config-cache-accel": "Ene Objäk<i lang=\"en\">cache</i> vum PHP (<i lang=\"en\">APC</i>, <i lang=\"en\">XCache</i>, udder <i lang=\"en\">WinCache</i>)",
+    "config-cache-memcached": "Donn der <code lang=\"en\">memcached</code> ẞööver nämme (Määt extra Enshtellunge un Opsäze nüüdesch)",
+    "config-memcached-servers": "De <code lang=\"en\">memcached</code> ßöövere:",
+    "config-memcached-help": "Donn de Leß aanhjävve, met de <i lang=\"en\">IP</i>-Addräße för der <code lang=\"en\">memcached</code> ẞööver ze bruche.\nSe sullte ein pro Reih opjeschrevve sin, un en Pooz (<i lang=\"en\">port</i>) ier Nommer han, För e Beishpell, esu:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "Do häss der <code lang=\"en\">memcached</code> als Dinge Zoot vun Zwescheshpeijscher aanjejovve, ävver nit eine ẞööver doför.",
+    "config-memcache-badip": "Do häss en onjöltijje <i lang=\"en\">IP</i>-Addräß för der <code lang=\"en\">memcached</code> ẞööver aanjejovve: $1.",
+    "config-memcache-noport": "Do has kein Pooz (<code lang=\"en\">port</code>) Nommer aanjejovve för mem <code lang=\"en\">memcached</code> ẞööver ze bruche: $1.\nWann De di Nommer nit weiß, der Shtandatt es 11211.",
+    "config-memcache-badport": "Dem <code lang=\"en\">memcached</code> ẞööver singe Pooz (<code lang=\"en\">port</code>) Nommere sullte zwesche $1 un $2 sin.",
+    "config-extensions": "Projramm-Zohsäz (<i lang=\"en\">Extensions</i>)",
+    "config-extensions-help": "Di bovve opjeleß Zohsazprojramme för et MediaWiki sin em Verzeischneß <code lang=\"en\">./extensions</code> ald ze fenge.\n\nDo kann se heh un jez aanschallde, ävver se künnte noch zohsäzlesch Enshtellunge bruche.",
+    "config-install-alreadydone": "'''Opjepaß:'''\nEt sühd esu uß, wi wann De MediaWiki ald enshtalleet hätß, un wöhrs aam Versöhke, dat norr_ens ze donn.\nJang wigger op de näähßte Sigg.",
+    "config-install-begin": "Wann De op „{{int:config-continue}}“ klecks, jeiht de Enshtallazjuhn vum MediaWiki loßß.\nWann De noch Änderonge maache wells, dann kleck op „{{int:config-back}}“.",
+    "config-install-step-done": "jedonn",
+    "config-install-step-failed": "donävve jejange",
+    "config-install-extensions": "Zohsazprojramme enjeschloße",
+    "config-install-database": "Ben de Daatebangk aam ennreeschte.",
+    "config-install-schema": "Dat Schema en dä Daatebank weed aanjelaat.",
+    "config-install-pg-schema-not-exist": "Dat Scheema för <i lang=\"en\">PostgreSQL</i> es nit doh.",
+    "config-install-pg-schema-failed": "Et Tabälle-Opsäze es donävve jejange.\nDonn doför sorrje, dat dä Daatebangk-Aanwänder „$1“ en dämm Daatebangkscheema „$2“ schrieve kann.",
+    "config-install-pg-commit": "Ben de Änderonge aam ennbränge.",
+    "config-install-pg-plpgsql": "Ben noh dä Daatebangkshprooch <code lang=\"en\">PL/pgSQL</code> aam söhke.",
+    "config-pg-no-plpgsql": "Do moß de Daatebangkshprooch <code lang=\"en\">PL/pgSQL</code> en dä Daatebangk $1 enreeschte.",
+    "config-pg-no-create-privs": "Dä Daatebangk-Aanwänder för et Enreeschte hät nit jenooch Rääschde, öm ene andere Daatebangk-Aanwänder en dä Daatebangk aanzelääje.",
+    "config-pg-not-in-role": "Dä aanjejovve Zohjang för et Web jiddet ald.\nDä aanjejovve Zohjang för et Enschtalleere es keine <i lang=\"en\">superuser<i> un es nit en de Web-Jropp, dröm kam_mer domet kein Dateije aanlääje, di däm Zohjang för et Web jehüüre.\n\nFör MeedijaWiki mößße dämm ävver em Momang di Tabälle jehüüre.\nDröm donn ene andere Name för dä Zohjang zom Wäb nämme, udder donn „retuur“ klicke, un jivv ene Zohjang för et Enschtalleere aan, dä jenooch Rääschte hät.",
+    "config-install-user": "Ben unse Daatebangk-Aanwänder en de Daatebangk am aanlääje.",
+    "config-install-user-alreadyexists": "Dä Aanwender „$1“ för dä Zohjref op de Daatebangk kann nit aanjelaat wääde, et jidd_en alld.",
+    "config-install-user-create-failed": "Dä Aanwender „$1“ för dä Zohjref op de Daatebangk kunnt nit aanjelaat wääde, wäje: <code lang=\"en\">$2</code>",
+    "config-install-user-grant-failed": "Däm Daatebangk-Aanwänder sing Beräschtijunge ze säze däät nit fluppe wääje: $2",
+    "config-install-user-missing": "Dä aanjejovve Metmaacher „$1“ jidd_et nit.",
+    "config-install-user-missing-create": "{{int:Config-install-user-missing}}<!-- $1 -->\nDonn e Höhksche en et Käßje „{{int:Createaccount}}“ onge, wann De dä aanlääje wells.",
+    "config-install-tables": "Ben de Daatebangk-Tabälle aam aanlääje.",
+    "config-install-tables-exist": "'''Opjepaß''': Et schingk, dem MediaWiki sing Tabälle sin alt doh.\nDoh dom_mer nix aanlääje.",
+    "config-install-tables-failed": "'''Fähler''': De Tabälle kunnte nit aanjelaat wääde, wääje: $1",
+    "config-install-interwiki": "Ben de Engerwiki-Tabäll met de shtandattmääßejje Daate aam fölle.",
+    "config-install-interwiki-list": "Mer kunnte de Dattei <code lang=\"en\">interwiki.list</code> nit fenge.",
+    "config-install-interwiki-exists": "'''Opjepaß''': En der Engewiki-Tabäll schingk alt jät dren ze shtonn.\nDoh dom_mer nix dobei.",
+    "config-install-stats": "De Shtatestek-Zahle wääde op Aanfang jeshtallt.",
+    "config-install-keys": "Jeheime Schlößel wääde opjebout.",
+    "config-insecure-keys": "'''Opjepaß:''' {{PLURAL:$2|Ene jeheime Schlößel|Jeheim Schlößele|Keine jeheime Schlößel}} ($1) {{PLURAL:$2|es|sin|es}} automattesch aanjelaat woode. {{PLURAL:$2|Dä es|Di sin|Hä es}} ävver nit onbedengk janz sescher. Övverlääsch Der, {{PLURAL:$2|dä|di|en}} norr_ens vun Hand ze ändere.",
+    "config-install-sysop": "Dä Zohjang för der Wiki-Köbes weed aanjelaat.",
+    "config-install-subscribe-fail": "Mer künne de <i lang=\"en\">e-mail</i>-Leß <code lang=\"en\">mediawiki-announce</code> nit abonneere: $1",
+    "config-install-subscribe-notpossible": "<code lang=\"en\">cURL</code> es nit enstalleed un <code lang=\"en\">allow_url_fopen</code>es nit doh.",
+    "config-install-mainpage": "Ben de Houpsigg med enem shtandatmääßeje Enhald aam aanlääje",
+    "config-install-extension-tables": "Ben Datebangk-Tabälle för de Zohsazprojramme aam ennreschte",
+    "config-install-mainpage-failed": "Kunnt de Houpsigg nit afshpeishere: $1",
+    "config-install-done": "'''Jlöckwonsch!'''\nMediaWiki es jetz enstalleet.\n\nEt Projramm zom Enreeschte hät en Dattei <code lang=\"en\">LocalSettings.php</code> aanjelaat.\nDoh sin de Enstellunge vum Wiki dren.\n\nDo weeß se eronge laade möße un dann en dem Wiki sing Aanfangsverzeishnes donn möße, et sellve Verzeisneß, woh di Dattei <code lang=\"en\">index.php</code> dren litt. Dat Erongerlaade sullt automattesch aanjefange han.\n\nWann domet jet nit jeflupp hät, udder De di Dattei norr_ens han wells, donn op dä Lengk heh dronger klecke:\n\n$3\n\n'''Opjepaß''': Wann De dat jez nit deihß, es alles verschött, wat De bes jöz enjejovve häs, weil di Dattei fott es en däm Momang, woh heh dat Projamm aam Engk es.\n\nWann De mem Ronger- un widder Huhlaade fäädesh bes, kanns De '''[$2 en Ding Wiki jonn]'''.",
+    "config-download-localsettings": "Donn di Dattei <code lang=\"en\">LocalSettings.php</code> eronger laade",
+    "config-help": "Hölp",
+    "config-nofile": "De Dattei „$1“ ham_mer nit jefonge. Es di fottjeschmeße?",
+    "config-extension-link": "Häs De jewoß, dat et Wiki [//www.mediawiki.org/wiki/Manual:Extensions Zohsazprojramme] hann kann?\n\nDo kanns [//www.mediawiki.org/wiki/Category:Extensions_by_category Zohsazprojramme noh Saachjroppe] söhke udder en de [//www.mediawiki.org/wiki/Extension_Matrix Tabäll met de Zohsazprojramme] kike, öm de kumplätte Leß met de Zohsazprojramme ze krijje.",
+    "mainpagetext": "'''MediaWiki es jetz enstalleet.'''",
+    "mainpagedocfooter": "Luur en et (änglesche) [//meta.wikimedia.org/wiki/Help:Contents Handbooch] wann De wesse wells wie de Wiki-Soffwär jebruch un bedeent wääde moß.\n\n== För dä Aanfang ==\nDat es och all op Änglesch:\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Donn MediaWiki op Ding Schprooch aanpaße]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ku-latn.json b/includes/installer/i18n/ku-latn.json
new file mode 100644 (file)
index 0000000..30a01f4
--- /dev/null
@@ -0,0 +1,17 @@
+{
+    "@metadata": {
+        "authors": [
+            "George Animal"
+        ]
+    },
+    "config-information": "Agahî",
+    "config-your-language": "Zimanê te:",
+    "config-page-language": "Ziman",
+    "config-page-name": "Nav",
+    "config-page-options": "Vebijêrk",
+    "config-ns-generic": "Proje",
+    "config-install-step-done": "çêbû",
+    "config-help": "alîkarî",
+    "mainpagetext": "'''MediaWiki serketî hate çêkirin.'''",
+    "mainpagedocfooter": "Alîkarî ji bo bikaranîn û guherandin yê datayê Wîkî tu di bin [//meta.wikimedia.org/wiki/Help:Contents pirtûka alîkarîyê ji bikarhêneran] da dikarê bibînê.\n\n== Alîkarî ji bo destpêkê ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lîsteya varîyablên konfîgûrasîyonê]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lîsteya e-nameyên versyonên nuh yê MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/lad.json b/includes/installer/i18n/lad.json
new file mode 100644 (file)
index 0000000..3bae636
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Universal Life"
+        ]
+    },
+    "mainpagetext": "'''MedyaViki ya se kureó con reuxitá.'''",
+    "mainpagedocfooter": "Konsulta la [//meta.wikimedia.org/wiki/Ayudo:Contenido Guía de usador] para tomar enformasyones encima de como usar el lojikal viki.\n\n== En Empeçando ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings La lista de los arreglamientos de la konfiggurasyón]\n* [//www.mediawiki.org/wiki/Manual:FAQ/lad DDS de MedyaViki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce La lista de las letrales (e-mail) de MedyaViki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/lb.json b/includes/installer/i18n/lb.json
new file mode 100644 (file)
index 0000000..8aa3866
--- /dev/null
@@ -0,0 +1,184 @@
+{
+    "@metadata": {
+        "authors": [
+            "Robby",
+            "Soued031",
+            "아라"
+        ]
+    },
+    "config-desc": "Den Installatiounsprogramm vu MediaWiki",
+    "config-title": "MediaWiki $1 Installatioun",
+    "config-information": "Informatioun",
+    "config-localsettings-upgrade": "'''Opgepasst''': E Fichier <code>LocalSettings.php</code> gouf fonnt.\nÄr Software kann aktualiséiert ginn, setzt w.e.g. de Wäert vum <code>$wgUpgradeKey</code> an d'Këscht.\nDir fannt en am <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "E Fichier <code>LocalSettings.php</code> gouf fonnt.\nFir dës Installatioun z'aktuaéliséieren start w.e.g. <code>update.php</code>",
+    "config-localsettings-key": "Aktualisatiounsschlëssel:",
+    "config-localsettings-badkey": "De Schlëssel deen Dir aginn hutt ass net korrekt",
+    "config-localsettings-incomplete": "De Fichier <code>LocalSettings.php</code> schéngt net komplett ze sinn.\nD'Variabel $1 ass net definéiert.\nÄnnert w.e.g. de Fichier <code>LocalSettings.php</code> esou datt déi Variabel definéiert ass a klickt op \"{{int:Config-continue}}\".",
+    "config-session-error": "Feeler beim Starte vun der Sessioun: $1",
+    "config-no-session": "D'Donnéeë vun ärer Sessioun si verluergaangen!\nKuckt Är php.ini no a vergewëssert Iech datt <code>session.save_path</code>  op adequate REpertoire agestallt ass.",
+    "config-your-language": "Är Sprooch",
+    "config-your-language-help": "Sicht déi Sprooch eraus déi Dir während der Installatioun benotze wëllt",
+    "config-wiki-language": "Sprooch vun der Wiki:",
+    "config-wiki-language-help": "Sicht d'Sprooch eraus an där d'Wiki haaptsächlech geschriwwe gëtt.",
+    "config-back": "← Zréck",
+    "config-continue": "Weider →",
+    "config-page-language": "Sprooch",
+    "config-page-welcome": "Wëllkomm bäi MediaWiki!",
+    "config-page-dbconnect": "Mat der Datebank verbannen",
+    "config-page-upgrade": "Eng Installatioun déi besteet aktualiséieren",
+    "config-page-dbsettings": "Astellunge vun der Datebank",
+    "config-page-name": "Numm",
+    "config-page-options": "Optiounen",
+    "config-page-install": "Installéieren",
+    "config-page-complete": "Fäerdeg!",
+    "config-page-restart": "Installatioun neistarten",
+    "config-page-readme": "Liest dëst",
+    "config-page-releasenotes": "Informatiounen zur Versioun",
+    "config-page-copying": "Kopéieren",
+    "config-page-upgradedoc": "Aktualiséieren",
+    "config-page-existingwiki": "Wiki déi et gëtt",
+    "config-help-restart": "Wëllt dir all gespäichert Donnéeë läschen déi dir bis elo aginn hutt an den Installatiounsprozess nei starten?",
+    "config-restart": "Jo, neistarten",
+    "config-welcome": "=== Iwwerpréifung vum Installatiounsenvironnement ===\nEt gi grondsätzlech Iwwerpréifunge gemaach fir ze kucken ob den Environnment gëeegent ass fir MediaWiki z'installéieren.\nDir sollt d'Resultater vun dëser Iwwerpréifung ugi wann Dir während der Installatioun Hëllef frot wéi Dir D'Installatioun ofschléisse kënnt.",
+    "config-sidebar": "* [//www.mediawiki.org MediaWiki Haaptsäit]\n* [//www.mediawiki.org/wiki/Help:Contents Benotzerguide]\n* [//www.mediawiki.org/wiki/Manual:Contents Guide fir Administrateuren]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Liest dëst</doclink>\n* <doclink href=ReleaseNotes>Informatioune vun der aktueller Versioun</doclink>\n* <doclink href=Copying>Lizenzbedingungen</doclink>\n* <doclink href=UpgradeDoc>Aktualisatioun</doclink>",
+    "config-env-good": "Den Environement gouf nogekuckt.\nDir kënnt MediaWiki installéieren.",
+    "config-env-bad": "Den Environnement gouf iwwerpréift.\nDir kënnt MediWiki net installéieren.",
+    "config-env-php": "PHP $1 ass installéiert.",
+    "config-env-php-toolow": "PHP $1 ass installéiert.\nAwer MediaWiki brauch PHP $2 oder méi héich.",
+    "config-unicode-using-utf8": "Fir d'Unicode-Normalisatioun gëtt dem Brion Vibber säin <code>utf8_normalize.so</code> benotzt.",
+    "config-no-db": "Et konnt kee passenden Datebank-Driver fonnt ginn! Dir musst een Datebank-Driver fir PHP installéieren.\nDës Datebank-Type ginn ënnerstëtzt: $1.\n\nWann Dir op engem gesharte Server sidd, da frot Ären Hosting-Provider fir de passenden Datebank-Driver z'installéieren.\nWann Dir PHP selwer compiléiert hutt, da reconfiguréiert en mat dem ageschalten Datebank-Client, zum Beispill an deem Dir <code>./configure --with-mysql</code> benotzt.\nWann Dir PHP vun engem Debian oder Ubuntu Package aus installéiert hutt, da musst Dir och den php5-mysql Modul installéieren.",
+    "config-outdated-sqlite": "'''Warnung:''' SQLite $1 ass installéiert. Allerdengs brauch MediaWiki SQLite $2 oder méi nei. SQLite ass dofir net disponibel.",
+    "config-memory-bad": "'''Opgepasst:''' De Parameter <code>memory_limit</code> vu PHP ass $1.\nDat ass wahrscheinlech ze niddreg.\nD'Installatioun kéint net funktionéieren.",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] ass installéiert",
+    "config-apc": "[http://www.php.net/apc APC] ass installéiert",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] ass installéiert",
+    "config-diff3-bad": "GNU diff3 gouf net fonnt.",
+    "config-no-uri": "'''Feeler:''' Déi aktuell URI konnt net festgestallt ginn.\nInstallatioun ofgebrach.",
+    "config-using-server": "De Servernumm \"<nowiki>$1</nowiki>\" gëtt benotzt.",
+    "config-using-uri": "D'Server URL  \"<nowiki>$1$2</nowiki>\" gëtt benotzt.",
+    "config-db-type": "Datebanktyp:",
+    "config-db-host": "Host vun der Datebank:",
+    "config-db-host-oracle": "Datebank-TNS:",
+    "config-db-wiki-settings": "Dës Wiki identifizéieren",
+    "config-db-name": "Numm vun der Datebank:",
+    "config-db-name-oracle": "Datebankschema:",
+    "config-db-install-account": "Benotzerkont fir d'Installatioun",
+    "config-db-username": "Datebank-Benotzernumm:",
+    "config-db-password": "Passwuert vun der Datebank:",
+    "config-db-install-help": "Gitt de Benotzernumm an Passwuert an dat wàhrend der Installatioun benotzt gëtt fir sech mat der Datebank ze verbannen.",
+    "config-db-account-lock": "De selwechte Benotzernumm a Passwuert fir déi normal Operatioune benotzen",
+    "config-db-wiki-account": "Benotzerkont fir normal Operatiounen",
+    "config-db-wiki-help": "Gitt de Benotzernumm an d'Passwuert an dat benotzt wäert gi fir sech bei den normale Wiki-Operatiounen mat der Datebank ze connectéieren.\nWann et de Kont net gëtt, a wann den Installatiouns-Kont genuch Rechter huet, gëtt dëse Benotzerkont opgemaach mat dem Minimum vu Rechter déi gebraucht gi fir dës Wiki bedreiwen ze kënnen.",
+    "config-db-charset": "Zeechesaz (character set) vun der Datebank",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binair",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-mysql-old": "MySQL $1 oder eng méi nei Versioun gëtt gebraucht, Dir hutt $2.",
+    "config-db-port": "Port vun der Datebank:",
+    "config-db-schema": "Schema fir MediaWiki",
+    "config-db-schema-help": "D'Schemaen hei driwwer si gewéinlech korrekt.\nÄnnert se nëmme wann Dir wësst datt et néideg ass.",
+    "config-pg-test-error": "Et ass net méiglech d'Datebank '''$1''' ze kontaktéieren: $2",
+    "config-sqlite-dir": "Repertoire vun den SQLite-Donnéeën",
+    "config-oracle-def-ts": "Standard 'tablespace':",
+    "config-oracle-temp-ts": "Temporären 'tablespace':",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-header-mysql": "MySQL-Astellungen",
+    "config-header-postgres": "PostgreSQL-Astellungen",
+    "config-header-sqlite": "SQLite-Astellungen",
+    "config-header-oracle": "Oracle-Astellungen",
+    "config-invalid-db-type": "Net valabelen Datebank-Typ",
+    "config-missing-db-name": "Dir musst en Numm fir de Wäert \"Numm vun der Datebank\" uginn",
+    "config-missing-db-host": "Dir musst e Wäert fir \"Database host\" uginn",
+    "config-missing-db-server-oracle": "Dir musst e Wäert fir \"Datebank-TNS\" uginn",
+    "config-db-sys-user-exists-oracle": "De Benotzerkont \"$1\" gëtt et schonn. SYSDBA kann nëmme benotzt gi fir en neie Benotzerkont opzemaachen.",
+    "config-postgres-old": "PostgreSQL $1 oder eng méi nei Versioun gëtt gebraucht, Dir hutt $2.",
+    "config-sqlite-name-help": "Sicht en Numm deen Är wiki identifizéiert.\nBenotzt keng Espacen a Bindestrécher.\nE gëtt fir den Numm vum SQLite Date-Fichier benotzt.",
+    "config-sqlite-readonly": "An de Fichier <code>$1</code> Kann net geschriwwe ginn.",
+    "config-sqlite-cant-create-db": "Den Datebank-Fichier <code>$1</code> konnt net ugeluecht ginn.",
+    "config-upgrade-done-no-regenerate": "D'Aktualisatioun ass ofgeschloss.\n\nDir kënnt elo [$1 ufänken Är Wiki ze benotzen]",
+    "config-regenerate": "LocalSettings.php regeneréieren →",
+    "config-db-web-account": "Datebankkont fir den Accès iwwer de Web",
+    "config-db-web-account-same": "Dee selwechte Kont wéi bei der Installatioun benotzen",
+    "config-db-web-create": "De Kont uleeë wann et e net scho gëtt",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-binary": "binär",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Numm vun der Wiki:",
+    "config-site-name-help": "Dësen daucht an der Titelleescht vum Browser an op verschiddenen anere Plazen op.",
+    "config-site-name-blank": "Gitt den Numm vum Site un.",
+    "config-project-namespace": "Projet Nummraum:",
+    "config-ns-generic": "Projet",
+    "config-ns-site-name": "Deeselwechte wéi den Numm vun der Wiki: $1",
+    "config-ns-other": "Anerer (spezifizéieren)",
+    "config-ns-other-default": "MyWiki",
+    "config-admin-box": "Administrateurs-Kont",
+    "config-admin-name": "Ären Numm:",
+    "config-admin-password": "Passwuert:",
+    "config-admin-password-confirm": "Passwuert confirméieren:",
+    "config-admin-help": "Gitt w.e.g. Äre gewënschte Benotzernumm hei an, zum Beispill \"Jang Muller\".\nDësen Numm gëtt da gebraucht fir sech an d'Wiki anzeloggen.",
+    "config-admin-name-blank": "Gitt e Benotzernumm fir den Administrateur an.",
+    "config-admin-name-invalid": "De spezifizéierte Benotzernumm \"<nowiki>$1</nowiki>\" ass net valabel.\nSpezifizéiert en anere Benotzernumm.",
+    "config-admin-password-blank": "Gitt e Passwuert fir den Adminstateur-Kont an.",
+    "config-admin-password-same": "D'Passwuert däerf net dat selwecht si wéi de Benotzernumm.",
+    "config-admin-password-mismatch": "Déi zwee Passwierder Déi Dir aginn hutt stëmmen net iwwereneen.",
+    "config-admin-email": "E-Mail-Adress:",
+    "config-admin-error-user": "Interne Feeler beim uleeë vun engem Administrateur mam Numm \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Interne Feeler beim Setze vum Passwuert fir den Admin \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+    "config-admin-error-bademail": "Dir hutt eng E-Mail-Adress aginn déi net valabel ass",
+    "config-subscribe": "Sech op d'[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Ukënnegunge vun neie Versiounen] abonnéieren.",
+    "config-almost-done": "Dir sidd bal fäerdeg!\nDir kënnt elo déi Astellungen déi nach iwwreg sinn iwwersprangen an d'Wiki elo direkt installéieren.",
+    "config-optional-continue": "Stellt mir méi Froen.",
+    "config-optional-skip": "Ech hunn es genuch, installéier just d'Wiki.",
+    "config-profile": "Profil vun de Benotzerrechter:",
+    "config-profile-wiki": "Oppe Wiki",
+    "config-profile-no-anon": "Uleeë vun engem Benotzerkont verlaangt",
+    "config-profile-fishbowl": "Nëmmen autoriséiert Editeuren",
+    "config-profile-private": "Privat Wiki",
+    "config-license": "Copyright a Lizenz:",
+    "config-license-none": "Keng Lizenz ënnen op der Säit",
+    "config-license-pd": "Ëffentlechen Domaine",
+    "config-email-settings": "E-Mail-Astellungen",
+    "config-enable-email": "E-Mailen déi no bausse ginn aschalten",
+    "config-email-user": "Benotzer-op-Benotzer E-Mail aschalten",
+    "config-email-usertalk": "Benoriichtege bäi Ännerung vun der Benotzerdiskussiounssäit aschalten",
+    "config-email-watchlist": "Benoriichtigung vun der Iwwerwaachungslëscht aschalten",
+    "config-email-auth": "E-Mail-Authentifizéierung aschalten",
+    "config-email-sender": "E-Mailadress fir Äntwerten:",
+    "config-upload-settings": "Eropgeluede Biller a Fichieren",
+    "config-upload-enable": "Eropluede vu Fichieren aschalten",
+    "config-upload-deleted": "Repertoire fir geläscht Fichieren:",
+    "config-logo": "URL vum Logo:",
+    "config-instantcommons": "\"Instant Commons\" aktivéieren",
+    "config-cc-again": "Nach eng kéier eraussichen...",
+    "config-advanced-settings": "Erweidert Astellungen",
+    "config-extensions": "Erweiderungen",
+    "config-install-step-done": "fäerdeg",
+    "config-install-step-failed": "huet net funktionéiert",
+    "config-install-extensions": "Mat den Ereiderungen",
+    "config-install-database": "Datebank gëtt installéiert",
+    "config-install-pg-plpgsql": "No der Sprooch PL/pgSQL sichen",
+    "config-pg-no-plpgsql": "Fir d'Datebank $1 muss d'Datebanksprooch PL/pgSQL installéiert ginn",
+    "config-install-user": "Datebank Benotzer uleeën",
+    "config-install-user-alreadyexists": "De Benotzer \"$1\" gëtt et schonn!",
+    "config-install-user-create-failed": "D'Opmaache vum Benotzer \"$1\" huet net funktionéiert: $2",
+    "config-install-user-grant-failed": "D'Bäisetze vu Rechter fir de Benotzer \"$1\" huet net funktionéiert: $2",
+    "config-install-user-missing": "De Benotzer \"$1\" deen ugi gouf gëtt et net.",
+    "config-install-user-missing-create": "De spezifizéierte Benotzer \"$1\" gëtt et net.\nKlickt d'Checkbox \"Benotzerkont uleeën\" wann Dir dee Benotzer uleeë wëllt.",
+    "config-install-tables": "Tabelle ginn ugeluecht",
+    "config-install-interwiki": "Standard Interwiki-Tabell gëtt ausgefëllt",
+    "config-install-interwiki-list": "De Fichier <code>interwiki.list</code> gouf net fonnt.",
+    "config-install-stats": "Initialisatioun vun de Statistiken",
+    "config-install-keys": "Generéiere vum Geheimschlëssel",
+    "config-install-sysop": "Administrateur Benotzerkont gëtt ugeluecht",
+    "config-install-mainpage": "Haaptsäit mat Standard-Inhalt gëtt ugeluecht",
+    "config-install-extension-tables": "D'Tabelle fir déi aktivéiert Erweiderunge ginn ugeluecht",
+    "config-install-mainpage-failed": "D'Haaptsäit konnt net dragesat ginn: $1",
+    "config-download-localsettings": "<code>LocalSettings.php</code> eroflueden",
+    "config-help": "Hëllef",
+    "config-nofile": "De Fichier \"$1\" gouf net fonnt. Gouf e geläscht?",
+    "mainpagetext": "'''MediaWiki gouf installéiert.'''",
+    "mainpagedocfooter": "Kuckt w.e.g. [//meta.wikimedia.org/wiki/Help:Contents d'Benotzerhandbuch] fir Informatiounen iwwer de Gebruach vun der Wiki Software.\n\n== Fir  unzefänken ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Hëllef bei der Konfiguratioun]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglëscht vun neie MediaWiki-Versiounen]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Lokaliséiert MediaWiki fir Är Sprooch]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/lfn.json b/includes/installer/i18n/lfn.json
new file mode 100644 (file)
index 0000000..cd00514
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki es aora instalada.'''",
+    "mainpagedocfooter": "Atenda la [//meta.wikimedia.org/wiki/Help:Contents Gida per Usores] per informa supra la usa de la programa de vici.\n\n== Comensa ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de ajustas de la desinia]\n* [//www.mediawiki.org/wiki/Manual:FAQ Demandas comun de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista per receta anunsias de novas supra MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/lg.json b/includes/installer/i18n/lg.json
new file mode 100644 (file)
index 0000000..85b3f80
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Kizito"
+        ]
+    },
+    "mainpagetext": "MediaWiki kati ewangidwa ku sisitemu yo",
+    "mainpagedocfooter": "Okuyiga ku nkozesa ya sofutiweya owa wiki, kebera [//meta.wikimedia.org/wiki/Help:Contents Okulagirira Abakozesa].\n\n== Amagezi agakuyamba okutandika ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lukalala lw'eby'enteekateeka yo]\n* [//www.mediawiki.org/wiki/Manual:FAQ Ebiter'okubuuzibwa ku MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Wewandise ofunenga amawulire aga email ag'ebifa ku MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/li.json b/includes/installer/i18n/li.json
new file mode 100644 (file)
index 0000000..524067f
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki software succesvol geïnsjtalleerd.'''",
+    "mainpagedocfooter": "Raodpleeg de [//meta.wikimedia.org/wiki/NL_Help:Inhoudsopgave handjleiding] veur informatie euver 't gebroek van de wikisoftware.\n\n== Mieë hölp ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lies mit instellinge]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki VGV (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki mailinglies veur nuuj versies]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/lo.json b/includes/installer/i18n/lo.json
new file mode 100644 (file)
index 0000000..4cb70cc
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''ຕິດຕັ້ງມີເດຍວິກິນີ້ສຳເລັດແລ້ວ.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/lt.json b/includes/installer/i18n/lt.json
new file mode 100644 (file)
index 0000000..85618b0
--- /dev/null
@@ -0,0 +1,83 @@
+{
+    "@metadata": {
+        "authors": [
+            "Eitvys200",
+            "Mantak111"
+        ]
+    },
+    "config-desc": "MediaWiki diegimas",
+    "config-title": "MediaWiki $1 diegimas",
+    "config-information": "Informacija",
+    "config-your-language": "Jūsų kalba:",
+    "config-wiki-language": "Viki kalba:",
+    "config-back": "← Atgal",
+    "config-continue": "Toliau →",
+    "config-page-language": "Kalba",
+    "config-page-welcome": "Sveiki atvykę į MediaWiki!",
+    "config-page-dbconnect": "Prisijungti prie duomenų bazės",
+    "config-page-dbsettings": "Duomenų bazės nustatymai",
+    "config-page-name": "Vardas",
+    "config-page-options": "Parinktys",
+    "config-page-install": "Įdiegti",
+    "config-page-complete": "Baigta!",
+    "config-page-restart": "Iš naujo paleiskite diegimą",
+    "config-page-readme": "Perskaityk manę",
+    "config-page-copying": "Kopijuojama",
+    "config-page-upgradedoc": "Atnaujinama",
+    "config-restart": "Taip, paleiskite jį iš naujo",
+    "config-env-php": "PHP $1 yra įdiegtas.",
+    "config-env-php-toolow": "PHP $1 įdiegta.\nTačiau, MediaWiki reikia PHP $2 ar naujesnės.",
+    "config-db-type": "Duomenų bazės tipas:",
+    "config-db-host": "Duomenų bazės serveris:",
+    "config-db-name": "Duomenų bazės pavadinimas:",
+    "config-db-name-oracle": "Duomenų bazės schema:",
+    "config-db-username": "Duomenų bazės vartotojo vardas:",
+    "config-db-password": "Duomenų bazės slaptažodis:",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-db-port": "Duomenų bazės prievadas:",
+    "config-db-schema": "MediaWiki schema:",
+    "config-header-mysql": "MySQL nustatymai",
+    "config-header-postgres": "PostgreSQL nustatymai",
+    "config-header-sqlite": "SQLite nustatymai",
+    "config-header-oracle": "Oracle nustatymai",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Viki pavadinimas:",
+    "config-site-name-blank": "Įveskite svetainės pavadinimą.",
+    "config-project-namespace": "Projekto pavadinimas:",
+    "config-ns-generic": "Projektas",
+    "config-ns-site-name": "Toks pat kaip viki pavadinimas: $1",
+    "config-ns-other-default": "ManoWiki",
+    "config-admin-box": "Administratoriaus paskyra",
+    "config-admin-name": "Jūsų vardas:",
+    "config-admin-password": "Slaptažodis:",
+    "config-admin-password-confirm": "Slaptažodis dar kartą:",
+    "config-admin-name-blank": "Įveskite administratoriaus vartotojo vardą.",
+    "config-admin-password-blank": "Įvesti administratoriaus paskyros slaptažodį.",
+    "config-admin-password-same": "Slaptažodis turi būti ne toks pat, kaip vartotojo vardas.",
+    "config-admin-password-mismatch": "Įvesti slaptažodžiai nesutampa.",
+    "config-admin-email": "El. pašto adresas:",
+    "config-optional-continue": "Paklausti daugiau klausimų.",
+    "config-optional-skip": "Man jau nuobodu, tiesiog įdiekite viki.",
+    "config-profile": "Vartotojo teisių paskyra:",
+    "config-profile-wiki": "Tradicinė viki",
+    "config-profile-private": "Privati viki",
+    "config-license-pd": "Viešas Domenas",
+    "config-email-settings": "El. pašto nustatymai",
+    "config-upload-enable": "Įgalinti failų įkėlimus",
+    "config-logo": "Logotipo URL:",
+    "config-cc-again": "Pasirinkti dar kartą...",
+    "config-extensions": "Plėtiniai",
+    "config-install-step-done": "atlikta",
+    "config-install-step-failed": "nepavyko",
+    "config-install-schema": "Kuriama schema",
+    "config-install-tables": "Kuriamos lentelės",
+    "config-install-stats": "Inicijuojamos statistikos",
+    "config-install-keys": "Generuojami slapti raktai",
+    "config-install-done": "'''Sveikiname!'''\nJūs sėkmingai įdiegėte MediaWiki.\n\nĮdiegimo programa sukūrė <code>LocalSettings.php</code> failą.\nJame yra visos jūsų konfigūracijos.\n\nJums reikės atsisiųsti ir įdėti jį į savo wiki įdiegimo bazę (pačiame kataloge, kaip index.php). Atsisiuntimas turėtų prasidėti automatiškai.\n\nJei atsisiuntimas nebuvo pasiūlytas, arba jį atšaukėte, galite iš naujo atsisiųsti paspaudę žemiau esančią nuorodą:\n\n$3\n\n'''Pastaba:''' Jei jūs to nepadarysite dabar, tada šis sukurtas konfigūracijos failas nebus galimas vėliau, jei išeisite iš įdiegimo be atsisiuntimo.\n\nKai baigsite, jūs galėsite '''[$2 įeiti į savo wiki]'''.",
+    "config-download-localsettings": "Atsisiųsti <code>LocalSettings.php</code>",
+    "config-help": "pagalba",
+    "mainpagetext": "'''MediaWiki sėkmingai įdiegta.'''",
+    "mainpagedocfooter": "Informacijos apie wiki programinės įrangos naudojimą, ieškokite [//meta.wikimedia.org/wiki/Help:Contents žinyne].\n\n== Pradžiai ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfigūracijos nustatymų sąrašas]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki DUK]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki pranešimai paštu apie naujas versijas]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/lv.json b/includes/installer/i18n/lv.json
new file mode 100644 (file)
index 0000000..529a148
--- /dev/null
@@ -0,0 +1,23 @@
+{
+    "@metadata": {
+        "authors": [
+            "GreenZeb"
+        ]
+    },
+    "config-back": "← Atpakaļ",
+    "config-continue": "Turpināt →",
+    "config-page-language": "Valoda",
+    "config-page-welcome": "Laipni lūdzam MediaWiki!",
+    "config-page-dbconnect": "Savienoties ar datubāzi",
+    "config-page-upgrade": "Atjaunināt pašreizējo instalāciju",
+    "config-page-dbsettings": "Datubāzes iestatījumi",
+    "config-page-name": "Vārds",
+    "config-page-options": "Iespējas",
+    "config-page-install": "Instalēt",
+    "config-page-complete": "Pabeigts!",
+    "config-page-restart": "Pārstartēt instalāciju",
+    "config-page-readme": "Lasīt mani",
+    "config-page-releasenotes": "Informācija par laidienu",
+    "mainpagetext": "'''MediaWiki veiksmīgi ieinstalēts'''",
+    "mainpagedocfooter": "Izlasi [//meta.wikimedia.org/wiki/Help:Contents Lietotāja pamācību], lai iegūtu vairāk informācijas par Wiki programmatūras lietošanu.\n\n== Pirmie soļi ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfigurācijas iespēju saraksts]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki J&A]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Parakstīties uz paziņojumiem par jaunām MediaWiki versijām]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/lzh.json b/includes/installer/i18n/lzh.json
new file mode 100644 (file)
index 0000000..cf85646
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''共筆臺已立'''",
+    "mainpagedocfooter": "欲識維基,見[//meta.wikimedia.org/wiki/Help:Contents User's Guide]\n\n== 始 ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/lzz.json b/includes/installer/i18n/lzz.json
new file mode 100644 (file)
index 0000000..4163035
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Bombola"
+        ]
+    },
+    "mainpagetext": "'''Mediawiki dido k'ai ik'idu.'''",
+    "mainpagedocfooter": "Vik'i şeni muç'o ixmarinen ya mutxanepe oguru şeni [//meta.wikimedia.org/wiki/Help:Contents oxmaruşi rexberis] o3'k'edit.\n\n== Ağani na gyoç’k’u maxmarepe ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Ok'iduşi ayarepeşi liste]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki P'anda Na-k'itxu K'itxalape]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-mailepeşiş liste]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/mai.json b/includes/installer/i18n/mai.json
new file mode 100644 (file)
index 0000000..771b6fa
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Umeshberma"
+        ]
+    },
+    "mainpagetext": "'''मीडियाविकी नीक जकाँ प्रस्थापित भेल।'''",
+    "mainpagedocfooter": "सम्पर्क करू [//meta.wikimedia.org/wiki/Help:Contents User's Guide] विकी तंत्रांशक प्रयोगक जानकारी लेल।\n\n==प्रारम्भ कोना करी==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/mdf.json b/includes/installer/i18n/mdf.json
new file mode 100644 (file)
index 0000000..12ed5c5
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''МедиаВикить арафтозь лац.'''",
+    "mainpagedocfooter": "Ванк [//meta.wikimedia.org/wiki/Help:Contents Ветямовал Тиинди] тяса ули кода содамс Вики програпнень эрявикснень колга.\n\n== Эрявикс сюлмафксне ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Васьфневи арафнематнень кярькссь]\n* [//www.mediawiki.org/wiki/Manual:FAQ МедиаВикить Сидеста Кеподеви Кизефксне]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce МедиаВикить од верзиятнень колга кулянь пачфтема]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/mg.json b/includes/installer/i18n/mg.json
new file mode 100644 (file)
index 0000000..789474c
--- /dev/null
@@ -0,0 +1,53 @@
+{
+    "@metadata": {
+        "authors": [
+            "Jagwar"
+        ]
+    },
+    "config-session-error": "Hadisoana teo am-panombohana ny fidirana : $1",
+    "config-your-language": "Ny fiteninao :",
+    "config-wiki-language": "Fiteny ho ampiasain'ny wiki :",
+    "config-back": "← Miverina",
+    "config-continue": "Manohy →",
+    "config-page-language": "Fiteny",
+    "config-page-welcome": "Tonga soa eto amin'i MediaWiki !",
+    "config-page-dbconnect": "Hiditra eo amin'i banky angona",
+    "config-page-name": "Anarana",
+    "config-page-readme": "Vakio aho",
+    "config-page-copying": "Hala-tahaka",
+    "config-page-upgradedoc": "Fanavaozina",
+    "config-page-existingwiki": "Wiki efa misy",
+    "config-help-restart": "Tianao hofafana avokoa ve ny data voaangona natsofokao ary hamerina ny fizotran'ny fametrahana ?",
+    "config-restart": "Eny, avereno atao",
+    "config-db-username": "Anaram-pikamban'ny banky angona :",
+    "config-db-password": "Tenimiafin'ny banky angona :",
+    "config-header-mysql": "Parametatr'i MySQL",
+    "config-header-sqlite": "Parametatr'i SQLite",
+    "config-header-oracle": "Parametatr'i Oracle",
+    "config-mysql-innodb": "innoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-ns-generic": "Tetikasa",
+    "config-ns-other": "Hafa (lazao)",
+    "config-admin-name": "Ny anaranao :",
+    "config-admin-password": "Tenimiafina :",
+    "config-admin-email": "Adiresy imailaka :",
+    "config-profile-wiki": "Wiki tsotra",
+    "config-profile-no-anon": "Mila mamorona kaonty",
+    "config-profile-fishbowl": "Mpanova mahazo alalana ihany",
+    "config-profile-private": "Wiki tsy sarababem-bahoaka",
+    "config-license": "Zom-pamorona ary lisansa :",
+    "config-license-none": "Tsy misy lisansa any an-tongom-pejy",
+    "config-email-user": "Avela mifandefa imailaka ny mpikambana",
+    "config-email-user-help": "Hahafahan'ny mpikambana mifandefa imailaka raha omen'ny mpikambana alalana ao amin'ny safidiny.",
+    "config-upload-deleted": "Petra-drakitra ho an'ny rakitra voafafa :",
+    "config-extensions": "Fanitarana",
+    "config-install-step-done": "vita",
+    "config-install-step-failed": "hadisoana",
+    "config-install-user": "Famoronana mpapiasan'ny banky angona",
+    "config-install-tables": "Famoronana tabilao",
+    "config-install-stats": "Fanombohana ny statistika",
+    "config-install-keys": "Fanamboarana lakile miafina",
+    "config-help": "fanoroana",
+    "mainpagetext": "'''Tafajoro soa aman-tsara ny rindrankajy Wiki.'''",
+    "mainpagedocfooter": "Vangio ny [//meta.wikimedia.org/wiki/Aide:Contenu Fanoroana ho an'ny mpampiasa] ra te hitady fanoroana momba ny fampiasan'ity rindrankajy ity.\n\n== Hanomboka amin'ny MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lisitra ny paramètre de configuration]\n* [//www.mediawiki.org/wiki/Manual:FAQ/fr FAQ momba ny MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Resaka momba ny fizaràn'ny MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/mhr.json b/includes/installer/i18n/mhr.json
new file mode 100644 (file)
index 0000000..ee25ee9
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki сай шындыме.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/min.json b/includes/installer/i18n/min.json
new file mode 100644 (file)
index 0000000..bde2fc5
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Iwan Novirion",
+            "Luthfi94"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki alah tapasang jo sukses'''.",
+    "mainpagedocfooter": "Konsultasian [//meta.wikimedia.org/wiki/Help:Contents/min Panduan Panggunoan] untuak informasi caro panggunoan parangkaik lunak wiki.\n\n== Mamulai panggunoan ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings/id Daftar pangaturan konfigurasi]\n* [//www.mediawiki.org/wiki/Manual:FAQ/id Daftar patanyoan nan acok diajukan manganai MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Palokalan MediaWiki untuak bahaso Sanak]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/mk.json b/includes/installer/i18n/mk.json
new file mode 100644 (file)
index 0000000..d5aa56f
--- /dev/null
@@ -0,0 +1,311 @@
+{
+    "@metadata": {
+        "authors": [
+            "Bjankuloski06",
+            "아라"
+        ]
+    },
+    "config-desc": "Инсталатор на МедијаВики",
+    "config-title": "Инсталатор на МедијаВики $1",
+    "config-information": "Информации",
+    "config-localsettings-upgrade": "Востановена е податотека <code>LocalSettings.php</code>.\nЗа да ја надградите инсталцијава, внесете ја вредноста на <code>$wgUpgradeKey</code> во полето подолу.\nТоа е го најдете во <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Утврдено е присуството на податотеката „<code>LocalSettings.php</code>“.\nЗа да ја надградите инсталацијата, пуштете ја „<code>update.php</code>“ наместо горенаведената.",
+    "config-localsettings-key": "Надградбен клуч:",
+    "config-localsettings-badkey": "Клучот што го наведовте е погрешен",
+    "config-upgrade-key-missing": "Востановена е постоечка инсталација на МедијаВики.\nЗа да ја надградите, вметнете го следниов ред на дното од вашата страница <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "Постоечката страница <code>LocalSettings.php</code> е нецелосна.\nНе е поставена променливата $1.\nИзменете ја страницата <code>LocalSettings.php</code> така што ќе ѝ зададете вредност на променливата, па стиснете на „{{int:Config-continue}}“.",
+    "config-localsettings-connection-error": "Се појави грешка при поврзувањето со базата користејќи ги поставките назначени во <code>LocalSettings.php</code> или <code>AdminSettings.php</code>. Исправете ги овие поставки и обидете се повторно.\n\n$1",
+    "config-session-error": "Грешка при започнување на сесијата: $1",
+    "config-session-expired": "Вашите сесиски податоци истекоа.\nПоставките на сесиите траат $1.\nНивниот рок можете да го зголемите со задавање на <code>session.gc_maxlifetime</code> во php.ini.\nПочнете ја инсталацијата одново.",
+    "config-no-session": "Вашите сесиски податоци се изгубени!\nПогледајте во php.ini дали <code>session.save_path</code> е поставен во правилна папка.",
+    "config-your-language": "Вашиот јазик:",
+    "config-your-language-help": "Одберете на кој јазик да се одвива инсталацијата.",
+    "config-wiki-language": "Јазик на викито:",
+    "config-wiki-language-help": "Одберете на кој јазик ќе бидат содржините на викито.",
+    "config-back": "← Назад",
+    "config-continue": "Продолжи →",
+    "config-page-language": "Јазик",
+    "config-page-welcome": "Добредојдовте на МедијаВики!",
+    "config-page-dbconnect": "Поврзување со базата",
+    "config-page-upgrade": "Надградба на постоечката инсталација",
+    "config-page-dbsettings": "Нагодувања на базата",
+    "config-page-name": "Назив",
+    "config-page-options": "Поставки",
+    "config-page-install": "Инсталирај",
+    "config-page-complete": "Готово!",
+    "config-page-restart": "Пушти ја инсталацијата одново",
+    "config-page-readme": "Прочитај ме",
+    "config-page-releasenotes": "Белешки за изданието",
+    "config-page-copying": "Копирање",
+    "config-page-upgradedoc": "Надградба",
+    "config-page-existingwiki": "Постоечко вики",
+    "config-help-restart": "Дали сакате да ги исчистите сите зачувани податоци што ги внесовте и да ја започнете инсталацијата одново?",
+    "config-restart": "Да, почни одново",
+    "config-welcome": "=== Проверки на околината ===\nСега ќе се извршиме основни проверки за да се востанови дали околината е погодна за инсталирање на МедијаВики. Не заборавајте да ги приложите овие информации ако барате помош со довршување на инсталацијата.",
+    "config-copyright": "=== Авторски права и услови ===\n\n$1\n\nОва е слободна програмска опрема (free software); можете да го редистрибуирате и/или менувате согласно условите на ГНУ-овата општа јавна лиценца (GNU General Public License) на Фондацијата за слободна програмска опрема (Free Software Foundation); верзија 2 или било која понова верзија на лиценцата (по ваш избор).\n\nОвој програм се нуди со надеж дека ќе биде корисен, но '''без никаква гаранција'''; дури ни подразбраната гаранција за '''продажна способност''' или '''погодност за определена цел'''.\nПовеќе информации ќе најдете во текстот на ГНУ-овата општа јавна лиценца.\n\nБи требало да имате добиено <doclink href=Copying>примерок од ГНУ-овата општа јавна лиценца</doclink> заедно со програмов; ако немате добиено, тогаш пишете ни на Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. или [http://www.gnu.org/copyleft/gpl.html прочитајте ја тука].",
+    "config-sidebar": "* [//www.mediawiki.org Домашна страница на МедијаВики]\n* [//www.mediawiki.org/wiki/Help:Contents Водич за корисници]\n* [//www.mediawiki.org/wiki/Manual:Contents Водич за администратори]\n* [//www.mediawiki.org/wiki/Manual:FAQ ЧПП]\n----\n* <doclink href=Readme>Прочитај ме</doclink>\n* <doclink href=ReleaseNotes>Белешки за изданието</doclink>\n* <doclink href=Copying>Копирање</doclink>\n* <doclink href=UpgradeDoc>Надградување</doclink>",
+    "config-env-good": "Околината е проверена.\nМожете да го инсталирате МедијаВики.",
+    "config-env-bad": "Околината е проверена.\nНе можете да го инсталирате МедијаВики.",
+    "config-env-php": "PHP $1 е инсталиран.",
+    "config-env-php-toolow": "PHP $1 е инсталиран.\nМеѓутоа, МедијаВики бара PHP $2 или поново.",
+    "config-unicode-using-utf8": "Со utf8_normalize.so за уникодна нормализација од Брајон Вибер (Brion Vibber).",
+    "config-unicode-using-intl": "Со додатокот [http://pecl.php.net/intl intl PECL] за уникодна нормализација.",
+    "config-unicode-pure-php-warning": "'''Предупредување''': Додатокот [http://pecl.php.net/intl intl PECL] не е достапен за врши уникодна нормализација, враќајќи се на бавна примена на чист PHP.\n\nАко имате високопрометно мрежно место, тогаш ќе треба да прочитате повеќе за [//www.mediawiki.org/wiki/Unicode_normalization_considerations уникодната нормализација].",
+    "config-unicode-update-warning": "'''Предупредување''': Инсталираната верзија на обвивката за уникодна нормализација користи постара верзија на библиотеката на [http://site.icu-project.org/ проектот ICU].\nЗа да користите Уникод, ќе треба да направите [//www.mediawiki.org/wiki/Unicode_normalization_considerations надградба].",
+    "config-no-db": "Не можев да пронајдам соодветен двигател за базата на податоци! Ќе треба да инсталирате двигател за базата на податоци за PHP.\nПоддржани се следниве типови на бази $1.\n\nАко сте на заедничко (споделено) вдомување, побарајте му на вдомителот да инсталира соодветен двигател за базата.\nАко вие самите го составивте ова PHP, сменете ги поставките така што ќе овозможите клиент на базата - на пр. со кодот <code>./configure --with-mysql</code>.\nАко инсталиравте PHP од пакет на Debian или Ubuntu, тогаш ќе треба да го инсталирате и модулот php5-mysql.",
+    "config-outdated-sqlite": "'''Предупредување''': имате SQLite $1. Најстарата допуштена верзија е $2. Затоа, SQLite ќе биде недостапен.",
+    "config-no-fts3": "'''Предупредување''': SQLite iе составен без модулот [//sqlite.org/fts3.html FTS3] - за оваа база нема да има можност за пребарување.",
+    "config-register-globals": "'''Предупредување: Можноста <code>[http://php.net/register_globals register_globals]</code> за PHP е овозможена.'''\n'''Оневозможете ја ако е можно.'''\nМедијаВики ќе работи, но опслужувачот ви е изложен на безбедносни ризици.",
+    "config-magic-quotes-runtime": "'''Кобно: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] е активно!'''\nОваа можност непредвидливо го расипува вносот на податоци.\nОваа можност мора да е исклучена. Во спротивно нема да можете да го инсталирате и користите МедијаВики.",
+    "config-magic-quotes-sybase": "'''Кобно: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] е активно!'''\nОваа можност непредвидливо го расипува вносот на податоци.\nОваа можност мора да е исклучена. Во спротивно нема да можете да го инсталирате и користите МедијаВики.",
+    "config-mbstring": "'''Кобно: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] е активно!'''\nОваа можност предизвикува грешки и може непредвидиво да го расипува вносот на податоци.\nОваа можност мора да е исклучена. Во спротивно нема да можете да го инсталирате и користите МедијаВики.",
+    "config-ze1": "'''Кобно: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] е активно!'''\nОваа можност предизвикува ужасни грешки во МедијаВики.\nОваа можност мора да е исклучена. Во спротивно нема да можете да го инсталирате и користите МедијаВики.",
+    "config-safe-mode": "'''Предупредување:''' [http://www.php.net/features.safe-mode безбедниот режим] на PHP е активен.\nОва може да предизвика проблеми, особено ако користите подигања и поддршка за <code>math</code>.",
+    "config-xml-bad": "XML-модулот за PHP недостасува.\nМедијаВики има потреба од функции во овој модул и нема да работи со овие поставки.\nАко работите со Mandrake, инсталирајте го php-xml пакетот.",
+    "config-pcre": "Недостасува модулот за поддршка на PCRE.\nМедијаВики не може да работи без функции за регуларни изрази соодветни на Perl.",
+    "config-pcre-no-utf8": "'''Фатално''': PCRE-модулот на PHP е составен без поддршка за PCRE_UTF8.\nМедијаВики бара поддршка за UTF-8 за да може да работи правилно.",
+    "config-memory-raised": "<code>memory_limit</code> за PHP изнесува $1, зголемен на $2.",
+    "config-memory-bad": "'''Предупредување:''' <code>memory_limit</code> за PHP изнесува $1.\nОва е веројатно премалку.\nИнсталацијата може да не успее!",
+    "config-ctype": "'''Фатална грешка''': PHP мора да се состави со поддршка за [http://www.php.net/manual/en/ctype.installation.php додатокот Ctype].",
+    "config-json": "'''Кобно:''' PHP беше срочен без поддршка од JSON.\nЌе мора да го инсталирате додатокот за JSON во PHP, или додатокот [http://pecl.php.net/package/jsonc PECL jsonc] пред да го инсталирате МедијаВики.\n* Додатокот за PHP е вклучен во верзиите 5 и 6 на Linux (од Red Hat Enterprise) (CentOS), но мора да се активира во <code>/etc/php.ini</code> или <code>/etc/php.d/json.ini</code>.\n* Некои варијанти на Linux излезени по мај 2013 г. не го содржат додатокот за PHP, туку го пакуваат додатокот PECL како <code>php5-json</code> или <code>php-pecl-jsonc</code>.",
+    "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].\nКеширањето на објекти не е овозможено.",
+    "config-mod-security": "'''Предупредување''': на вашиот опслужувач има овозможено [http://modsecurity.org/ mod_security]. Ако не е поставено како што треба, ова може да предизвика проблеми кај МедијаВики и други програми што им овозможуваат на корисниците да објавуваат произволни содржини.\nПогледнете ја [http://modsecurity.org/documentation/ mod_security документацијата] или обратете се кај домаќинот ако наидете на случајни грешки.",
+    "config-diff3-bad": "GNU diff3 не е пронајден.",
+    "config-git": "Го пронајдов Git програмот за контрола на верзии: <code>$1</code>.",
+    "config-git-bad": "Не го пронајдов Git-програмот за контрола на верзии.",
+    "config-imagemagick": "Пронајден е ImageMagick: <code>$1</code>.\nАко овозможите подигање, тогаш ќе биде овозможена минијатуризација на сликите.",
+    "config-gd": "Утврдив дека има вградена GD графичка библиотека.\nАко овозможите подигање, тогаш ќе биде овозможена минијатураизација на сликите.",
+    "config-no-scaling": "Не можев да пронајдам GD-библиотека или ImageMagick.\nМинијатуризацијата на сликите ќе биде оневозможена.",
+    "config-no-uri": "'''Грешка:''' Не можев да го утврдам тековниот URI.\nИнсталацијата е откажана.",
+    "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> е подложна на извршување (пуштање) на произволни скрипти.\nИако МедијаВики врши безбедносни проверки на сите подигнати податотеки, ве советуваме [//www.mediawiki.org/wiki/Manual:Security#Upload_security да ја затворите оваа безбедносна дупка] пред да овозможите подигање.",
+    "config-no-cli-uploads-check": "'''Предупредување:''' Вашата основна папка за подигања (<code>$1</code>) не е проверена дали е подложна\nпроизволно извршување на скрипти во текот на инсталацијата на посредникот на повикувачко ниво (CLI).",
+    "config-brokenlibxml": "Вашиот систем има комбинација од PHP и libxml2 верзии и затоа има грешки и може да предизвика скриено расипување на податоците кај МедијаВики и други мрежни програми.\nНадградете го на PHP 5.2.9 и libxml2 2.7.3 или нивни понови верзии! ПРЕКИНУВАМ ([//bugs.php.net/bug.php?id=45996 грешката е заведена во PHP]).",
+    "config-using531": "МедијаВики не може да се користи со PHP $1 поради грешка кај упатните параметри за <code>__call()</code>.\nЗа да го решите проблемот, надградете го на PHP 5.3.2 или понова верзија, или пак користете го постариот PHP 5.3.0.",
+    "config-suhosin-max-value-length": "Suhosin е инсталиран и ја ограничува должината на параметарот GET на $1 бајти. Делот ResourceLoader на МедијаВики ќе ја заобиколува ова граница, но со тоа ќе се влоши делотворноста. Ако е воопшто можно, на <code>suhosin.get.max_value_length</code> треба да го наместите на 1024 или повеќе во <code>php.ini</code>, и да му ја зададете истата вредност на <code>$wgResourceLoaderMaxQueryLength</code> во <code>LocalSettings.php</code>.",
+    "config-db-type": "Тип на база:",
+    "config-db-host": "Домаќин на базата:",
+    "config-db-host-help": "Ако вашата база е на друг опслужувач, тогаш тука внесете го името на домаќинот или IP-адресата.\n\nАко користите заедничко (споделено) вдомување, тогаш вашиот вдомител треба да го наведе точното име на домаќинот во неговата документација.\n\nАко инсталирате на опслужувач на Windows и користите MySQL, можноста „localhost“ може да не функционира за опслужувачкото име. Во тој случај, обидете се со внесување на „127.0.0.1“ како локална IP-адреса.\n\nАко користите PostgreSQL, оставете го полево празно за да се поврзете преку Unix-приклучок.",
+    "config-db-host-oracle": "TNS на базата:",
+    "config-db-host-oracle-help": "Внесете важечко [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm локално име за поврзување]. На оваа инсталација мора да ѝ биде видлива податотеката tnsnames.ora.<br />Ако користите клиентски библиотеки 10g или понови, тогаш можете да го користите и методот на иметнување на [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+    "config-db-wiki-settings": "Идентификувај го викиво",
+    "config-db-name": "Име на базата:",
+    "config-db-name-help": "Одберете име што ќе го претставува вашето вики.\nИмето не смее да содржи празни места.\n\nАко користите заедничко (споделено) вдомување, тогаш вашиот вдомител ќе ви даде конкретно име на база за користење, или пак ќе ви даде да создавате бази преку контролната табла.",
+    "config-db-name-oracle": "Шема на базата:",
+    "config-db-account-oracle-warn": "Постојат три поддржани сценарија за инсталирање на Oracle како базен услужник:\n\nАко сакате да создадете сметка на базата како дел од постапката за инсталација, наведете сметка со SYSDBA-улога како сметка за базата што ќе се инсталира и наведете ги саканите податоци за сметката за мрежен пристап. Во друг случај, можете да создадете сметка за мрежен пристап рачно и да ја наведете само таа сметка (ако има дозволи за создавање на шематски објекти) или пак да наведете две различни сметки, една со привилегии за создавање, а друга (ограничена) за мрежен пристап.\n\nСкриптата за создавање сметка со задолжителни привилегии ќе ја најдете во папката „maintenance/oracle/“ од оваа инсталација. Имајте на ум дека ако користите ограничена сметка ќе ги оневозможите сите функции за одржување со основната сметка.",
+    "config-db-install-account": "Корисничка смета за инсталација",
+    "config-db-username": "Корисничко име за базата:",
+    "config-db-password": "Лозинка за базата:",
+    "config-db-password-empty": "Внесете лозинка за новиот корисник на базата: $1.\nИако може да се создаваат корисници без лозинка, тоа не е безбедно.",
+    "config-db-install-username": "Внесете корисничко име што ќе се користи за поврзување со базата во текот на инсталацијата. Ова не е корисничкото име од сметката на МедијаВики, туку посебно корисничко име за вашата база на податоци.",
+    "config-db-install-password": "Внесете клозинка што ќе се користи за поврзување со базата во текот на инсталацијата. Ова не е лозинката од сметката на МедијаВики, туку посебна лозинка за вашата база на податоци.",
+    "config-db-install-help": "Внесете го корисничкото име и лозинката што ќе се користи за поврзување со базата на податоци во текот на инсталацијата.",
+    "config-db-account-lock": "Користи го истото корисничко име и лозинка за редовна работа",
+    "config-db-wiki-account": "Корисничко име за редовна работа",
+    "config-db-wiki-help": "Внесете корисничко име и лозинка што ќе се користат за поврзување со базата на податоци во текот на редовната работа со викито.\nАко сметката не постои, а инсталационата сметка има доволно привилегии, тогаш оваа корисничка сметка ќе биде создадена со минималните привилегии потребни за работа со викито.",
+    "config-db-prefix": "Префикс на табелата на базата:",
+    "config-db-prefix-help": "Ако треба да делите една база на податоци со повеќе викија, или со МедијаВики и друг мрежен програм, тогаш можете да додадете префикс на сите називи на табелите за да спречите проблематични ситуации.\nНе користете празни простори.\n\nОва поле обично се остава празно.",
+    "config-db-charset": "Збир знаци за базата",
+    "config-charset-mysql5-binary": "Бинарен за MySQL 4.1/5.0",
+    "config-charset-mysql5": "UTF-8 за MySQL 4.1/5.0",
+    "config-charset-mysql4": "Назадно-соодветен UTF-8 за MySQL 4.0",
+    "config-charset-help": "'''ПРЕДУПРЕДУВАЊЕ:''' Ако користите '''назадно-соодветен UTF-8''' во MySQL 4.1+, а потоа направите резервен примерок на базата со <code>mysqldump</code>, ова може да ги опустоши сите не-ASCII знаци, и со тоа неповратно да ја расипе целата зачувана резерва!\n\nВо '''бинарен режим''', во базата МедијаВики го складира UTF-8 текстот во бинарни полиња.\nОва е поефикансно отколку  UTF-8 режимот на MySQL бидејќи ви овозможува да го користите целиот спектар на уникодни знаци.\nВо '''UTF-8 режим''', MySQL ќе знае на кој збир знаци припаѓаат вашите податоци, и може соодветно да ги претстави и претвори,\nно нема да ви дозволи да складирате знаци над [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Основната повеќејазична рамнина].",
+    "config-mysql-old": "Се бара MySQL $1 или поново, а вие имате $2.",
+    "config-db-port": "Порта на базата:",
+    "config-db-schema": "Шема за МедијаВики",
+    "config-db-schema-help": "Оваа шема обично по правило ќе работи нормално.\nСменете ја само ако знаете дека треба да се смени.",
+    "config-pg-test-error": "Не можам да се поврзам со базата '''$1''': $2",
+    "config-sqlite-dir": "Папка на SQLite-податоци:",
+    "config-sqlite-dir-help": "SQLite ги складира сите податоци во една податотека.\n\nПапката што ќе ја наведете мора да е запислива од мрежниот опслужувач во текот на инсталацијата.\n\nТаа '''не''' смее да биде достапна преку интернет, и затоа не ја ставаме кајшто ви се наоѓаат PHP-податотеките.\n\nИнсталаторот воедно ќе создаде податотека <code>.htaccess</code>, но ако таа не функционира како што треба, тогаш некој ќе може да ви влезе во вашата необработена (сирова) база на податоци.\nТука спаѓаат необработени кориснички податоци (е-поштенски адреси, хеширани лозинки) како и избришани ревизии и други податоци за викито до кои се има ограничен пристап.\n\nСе препорачува целата база да ја сместите некаде, како на пр. <code>/var/lib/mediawiki/вашетовики</code>.",
+    "config-oracle-def-ts": "Стандарден таблеарен простор:",
+    "config-oracle-temp-ts": "Привремен табеларен простор:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "МедијаВики ги поддржува следниве системи на бази на податоци:\n\n$1\n\nАко системот што сакате да го користите не е наведен подолу, тогаш проследете ја горенаведената врска со инструкции за да овозможите поддршка за тој систем.",
+    "config-support-mysql": "* $1 е главната цел на МедијаВики и најдобро се поддржува ([http://www.php.net/manual/en/mysql.installation.php како се составува PHP со поддршка за MySQL])",
+    "config-support-postgres": "* $1 е популарен систем на бази на податоци со отворен код кој претставува алтернатива на MySQL ([http://www.php.net/manual/en/pgsql.installation.php како да составите PHP со поддршка за PostgreSQL]). Може сè уште да има некои грешки. па затоа не се препорачува за употреба во производна средина.",
+    "config-support-sqlite": "* $1 е лесен систем за бази на податоци кој е многу добро поддржан. ([http://www.php.net/manual/en/pdo.installation.php Како да составите PHP со поддршка за SQLite], користи PDO)",
+    "config-support-oracle": "* $1 е база на податоци на комерцијално претпријатие. ([http://www.php.net/manual/en/oci8.installation.php Како да составите PHP со поддршка за OCI8])",
+    "config-header-mysql": "Нагодувања на MySQL",
+    "config-header-postgres": "Нагодувања на PostgreSQL",
+    "config-header-sqlite": "Нагодувања на SQLite",
+    "config-header-oracle": "Нагодувања на Oracle",
+    "config-invalid-db-type": "Неважечки тип на база",
+    "config-missing-db-name": "Мора да внесете значење за параметарот „Име на базата“",
+    "config-missing-db-host": "Мора да внесете вредност за „Домаќин на базата на податоци“",
+    "config-missing-db-server-oracle": "Мора да внесете вредност за „TNS на базата“",
+    "config-invalid-db-server-oracle": "Неважечки TNS „$1“.\nКористете или „TNS Name“ или низата „Easy Connect“ ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Методи на именување за Oracle])",
+    "config-invalid-db-name": "Неважечко име на базата „$1“.\nКористете само ASCII-букви (a-z, A-Z), бројки (0-9), долни црти (_) и цртички (-).",
+    "config-invalid-db-prefix": "Неважечки префикс за базата „$1“.\nКористете само ASCII-букви (a-z, A-Z), бројки (0-9), долни црти (_) и цртички (-).",
+    "config-connection-error": "$1.\n\nПроверете го долунаведениот домаќин, корисничко име и лозинка и обидете се повторно.",
+    "config-invalid-schema": "Неважечка шема за МедијаВики „$1“.\nКористете само букви, бројки и долни црти.",
+    "config-db-sys-create-oracle": "Инсталаторот поддржува само употреба на SYSDBA-сметка за создавање на нова сметка.",
+    "config-db-sys-user-exists-oracle": "Корисничката сметка „$1“ веќе постои. SYSDBA служи само за создавање на нова сметка!",
+    "config-postgres-old": "Се бара PostgreSQL $1 или поново, а вие имате $2.",
+    "config-sqlite-name-help": "Одберете име кое ќе го претставува вашето вики.\nНе користете празни простори и црти.\nОва ќе се користи за податотечното име на SQLite-податоците.",
+    "config-sqlite-parent-unwritable-group": "Не можам да ја создадам папката <code><nowiki>$1</nowiki></code> бидејќи мрежниот опслужувач не може да запише во матичната папка <code><nowiki>$2</nowiki></code>.\n\nИнсталаторот го утврди корисникот под кој работи вашиот мрежен опслужувач.\nЗа да продолжите, наместете да може да запишува во папката <code><nowiki>$3</nowiki></code>.\nНа Unix/Linux систем направете го следново:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Не можам да ја создадам папката <code><nowiki>$1</nowiki></code> бидејќи мрежниот опслужувач не може да запише во матичната папка <code><nowiki>$2</nowiki></code>.\n\nИнсталаторот не можеше го утврди корисникот под кој работи вашиот мрежен опслужувач.\nЗа да продолжите, наместете тој (и други!) да може глобално да запишува во папката <code><nowiki>$3</nowiki></code>\nНа Unix/Linux систем направете го следново:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Грешка при создавањето на податочната папка „$1“.\nПроверете каде се наоѓа и обидете се повторно.",
+    "config-sqlite-dir-unwritable": "Не можам да запишам во папката „$1“.\nВо дозволите за неа, овозможете му на мрежниот опслужувач да запишува во неа и обидете се повторно.",
+    "config-sqlite-connection-error": "$1.\n\nПроверете ја податочната папка и името на базата, и обидете се повторно.",
+    "config-sqlite-readonly": "Податотеката <code>$1</code> е незапислива.",
+    "config-sqlite-cant-create-db": "Не можев да ја создадам податотеката <code>$1</code> за базата.",
+    "config-sqlite-fts3-downgrade": "PHP нема поддршка за FTS3 — ја поништувам надградбата за табелите",
+    "config-can-upgrade": "Во оваа база има табели на МедијаВики.\nЗа да ги надградите на МедијаВики $1, кликнете на '''Продолжи'''.",
+    "config-upgrade-done": "Надградбата заврши.\n\nСега можете да [$1 почнете да го користите вашето вики].\n\nАко сакате да ја пресоздадете вашата податотека <code>LocalSettings.php</code>, тогаш кликнете на копчето подолу.\nОва '''не се препорачува''' освен во случај на проблеми со викито.",
+    "config-upgrade-done-no-regenerate": "Надградбата заврши.\n\nСега можете да [$1 почнете да го користите викито].",
+    "config-regenerate": "Пресоздај LocalSettings.php →",
+    "config-show-table-status": "Барањето <code>SHOW TABLE STATUS</code> не успеа!",
+    "config-unknown-collation": "'''Предупредување:''' Базата корисни непрепознаена упатна споредба.",
+    "config-db-web-account": "Сметка на базата за мрежен пристап",
+    "config-db-web-help": "Одберете корисничко име и лозинка што ќе ги користи мрежниот опслужувач за поврзување со опслужувачот на базта на податоци во текот на редовната работа со викито.",
+    "config-db-web-account-same": "Користи ја истата сметка од инсталацијата",
+    "config-db-web-create": "Создај ја сметката ако веќе не постои",
+    "config-db-web-no-create-privs": "Сметката што ја назначивте за инсталација нема доволно привилегии за да може да создаде сметка.\nТука мора да назначите постоечка сметка.",
+    "config-mysql-engine": "Складишен погон:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Предупредување''': Го одбравте MyISAM како складишен погон за MySQL. Но тој не се препорачува за МедијаВики бидејќи:\n* одвај поддржува едновременост поради заклучување на табелите\n* поподложен на расипување од другите погони\n* кодната база на МедијаВики не секогаш може да работи со MyISAM како што треба\n\nАко вашата инсталација на MySQL поддржува InnoDB, тогаш сериозно препорачуваме да го користите него наместо MyISAM.\nАко вашата инсталација на MySQL не поддржува InnoDB, веројатно дошло време за надградба.",
+    "config-mysql-only-myisam-dep": "'''Предупредување:''' MyISAM е единствениот достапен складишен погон за MySQL, што не се препорачува за употреба со МедијаВики, бидејќи:\n* речиси не поддржува истовремено извршување на задачите поради заклучувањето на табелите\n* поподложен е на расипувања од другите погони\n* кодната база на МедијаВИки не секогаш работи исправно со MyISAM\nВашата инсталација на MySQL не поддржува InnoDB. Можеби е време да ја надградите.",
+    "config-mysql-engine-help": "'''InnoDB''' речиси секогаш е најдобар избор, бидејќи има добра поддршка за едновременост.\n\n'''MyISAM''' може да е побрз кај инсталациите наменети за само еден корисник или незаписни инсталации (само читање).\nБазите на податоци од MyISAM почесто се расипуваат од базите на InnoDB.",
+    "config-mysql-charset": "Збир знаци за базата:",
+    "config-mysql-binary": "Бинарен",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "Во '''бинарен режим''', во базата на податоци МедијаВики складира UTF-8 текст во бинарни полиња.\nОва е поефикасно отколку  TF-8 режимот на MySQL, и ви овозможува да ја користите целата палета на уникодни знаци.\n\nВо '''UTF-8 режим''', MySQL ќе знае на кој збир знаци припаѓаат вашите податоци, и може соодветно да ги претстави и претвори, но нема да ви дозволи да складиратезнаци над [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Основната повеќејазична рамнина].",
+    "config-site-name": "Име на викито:",
+    "config-site-name-help": "Ова ќе се појавува во заглавната лента на прелистувачот и на разни други места.",
+    "config-site-name-blank": "Внесете име на мрежното место.",
+    "config-project-namespace": "Проектен именски простор:",
+    "config-ns-generic": "Проект",
+    "config-ns-site-name": "Исто име како викито: $1",
+    "config-ns-other": "Друго (наведете)",
+    "config-ns-other-default": "МоеВики",
+    "config-project-namespace-help": "По примерот на Википедија, многу викија ги чуваат страниците со правила на посебно место од самите содржини, т.е. во „'''проектен именски простор'''“.\nСите наслови на страниците во овој именски простор почнуваат со извесна претставка, којшто можете да го укажете тука.\nПо традиција претставката произлегува од името на викито, но не смее да содржи интерпункциски знаци како „#“ или „:“.",
+    "config-ns-invalid": "Назначениот именски простор „<nowiki>$1</nowiki>“ е неважечки.\nНазначете друг проектен именски простор.",
+    "config-ns-conflict": "Наведениот именски простор „<nowiki>$1</nowiki>“ се коси со основниот именски простор на МедијаВики.\nНаведете друг именски простор за проектот.",
+    "config-admin-box": "Администратоска сметка",
+    "config-admin-name": "Вашето име:",
+    "config-admin-password": "Лозинка:",
+    "config-admin-password-confirm": "Пак лозинката:",
+    "config-admin-help": "Тука внесете го вашето корисничко име, на пр. „Петар Петровски“.\nОва име ќесе користи за најава во викито.",
+    "config-admin-name-blank": "Внесете администраторско корисничко име.",
+    "config-admin-name-invalid": "Назначенотго корисничко име „<nowiki>$1</nowiki>“ е неважечко.\nНазначете друго.",
+    "config-admin-password-blank": "Внесете лозинка за администраторската сметка",
+    "config-admin-password-same": "Лозинката не може да биде иста со корисничкото име.",
+    "config-admin-password-mismatch": "Лозинките што ги внесовте не се совпаѓаат.",
+    "config-admin-email": "Е-поштенска адреса:",
+    "config-admin-email-help": "Тука внесете е-поштенска адреса за да можете да добивате е-пошта од други корисници на викито, да ја менувате лозинката, и да бидете известувани за промени во страниците на вашиот список на набљудувања. Можете и да го оставите празно.",
+    "config-admin-error-user": "Се појави внатрешна грешка при создавањето на администраторот со име „<nowiki>$1</nowiki>“.",
+    "config-admin-error-password": "Се појави внатрешна грешка при задавање на лозинката за администраторот „<nowiki>$1</nowiki>“: <pre>$2</pre>",
+    "config-admin-error-bademail": "Внесовте неважечка е-поштенска адреса",
+    "config-subscribe": "Претплатете се на [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce release поштенскиот список за известувања].",
+    "config-subscribe-help": "Ова е нископрометен поштенски список кој се користи за соопштувања во врска со изданија, вклучувајќи важни безбедносни соопштенија.\nТреба да се претплатите и да ја надградувате вашата инсталација на МедијаВики кога излегуваат нови верзии.",
+    "config-subscribe-noemail": "Се обидовте да се претплатите на поштенскиот список со известувања за нови изданија без да наведете е-пошта.\nНаведете е-поштенска адреса ако сакате да се претплатите на списокот.",
+    "config-almost-done": "Уште малку сте готови!\nСега можете да ги прескокнете преостанатите поставувања и веднаш да го инсталирате викито.",
+    "config-optional-continue": "Постави ми повеќе прашања.",
+    "config-optional-skip": "Веќе ми здосади, дај само инсталирај го викито.",
+    "config-profile": "Профил на кориснички права:",
+    "config-profile-wiki": "Отворено вики",
+    "config-profile-no-anon": "Задолжително отворање сметка",
+    "config-profile-fishbowl": "Само овластени уредници",
+    "config-profile-private": "Приватно вики",
+    "config-profile-help": "Викијата функционираат најдобро кога имаат што повеќе уредници.\nВо МедијаВики лесно се проверуваат скорешните промени, и лесно се исправа (технички: „враќа“) штетата направена од неупатени или злонамерни корисници.\n\nМногумина имаат најдено најразлични полезни примени за МедијаВики, но понекогаш не е лесно да убедите некого во предностите на вики-концептот.\nЗначи имате избор.\n\n'''{{int:config-profile-wiki}}''' — модел според кој секој може да уредува, дури и без најавување.\nАко имате вики со '''задолжително отворање на сметка''', тогаш добивате повеќе контрола, но ова може даги одврати спонтаните учесници.\n\n'''{{int:config-profile-fishbowl}}''' — може да уредуваат само уредници што имаат добиено дозвола за тоа, но јавноста може да ги гледа страниците, вклучувајќи ја нивната историја.\n'''{{int:config-profile-private}}''' — страниците се видливи и уредливи само за овластени корисници.\n\nПо инсталацијата имате на избор и посложени кориснички права и поставки. Погледајте во [//www.mediawiki.org/wiki/Manual:User_rights прирачникот].",
+    "config-license": "Авторски права и лиценца:",
+    "config-license-none": "Без подножје за лиценца",
+    "config-license-cc-by-sa": "Криејтив комонс НаведиИзвор СподелиПодИстиУслови",
+    "config-license-cc-by": "Криејтив комонс НаведиИзвор",
+    "config-license-cc-by-nc-sa": "Криејтив комонс НаведиИзвор-Некомерцијално-СподелиПодИстиУслови",
+    "config-license-cc-0": "Криејтив комонс Нула (јавна сопственост)",
+    "config-license-gfdl": "ГНУ-ова лиценца за слободна документација 1.3 или понова",
+    "config-license-pd": "Јавна сопственост",
+    "config-license-cc-choose": "Одберете друга лиценца на Криејтив комонс по ваш избор",
+    "config-license-help": "Многу јавни викија ги ставаат сите придонеси под [http://freedomdefined.org/Definition слободна лиценца].\nСо ова се создава атмосфера на општа сопственост и поттикнува долгорочно учество.\nОва не е неопходно за викија на поединечни физички или правни лица.\n\nАко сакате да користите текст од Википедија, и сакате Википедија да прифаќа текст прекопиран од вашето вики, тогаш треба да ја одберете лиценцата '''Криејтив комонс НаведиИзвор СподелиПодИстиУслови'''.\n\nГНУ-овата лиценца за слободна документација (ГЛСД) е старата лиценца на Википедија.\nОваа лиценца сè уште важи, но е тешка за разбирање.\nИсто така треба да се има на ум дека пренамената на содржините под ГЛСД не е лесна.",
+    "config-email-settings": "Нагодувања за е-пошта",
+    "config-enable-email": "Овозможи излезна е-пошта",
+    "config-enable-email-help": "Ако сакате да работи е-поштата, [http://www.php.net/manual/en/mail.configuration.php поштенските нагодувања на PHP] треба да се правилно наместени.\nАко воопшто не сакате никакви функции за е-пошта, тогаш можете да ги оневозможите тука.",
+    "config-email-user": "Овозможи е-пошта од корисник до корисник",
+    "config-email-user-help": "Дозволи сите корисници да можат да си праќаат е-пошта ако ја имаат овозможено во нагодувањата.",
+    "config-email-usertalk": "Овозможи известувања за промени во кориснички страници за разговор",
+    "config-email-usertalk-help": "Овозможи корисниците да добиваат известувања за промени во нивните кориснички страници за разговор ако ги имаат овозможено во нагодувањата.",
+    "config-email-watchlist": "Овозможи известувања за список на набљудувања",
+    "config-email-watchlist-help": "Овозможи корисниците да добиваат известувања за нивните набљудувани страници ако ги имаат овозможено во нагодувањата.",
+    "config-email-auth": "Овозможи потврдување на е-пошта",
+    "config-email-auth-help": "Ако оваа можност е вклучена, тогаш корисниците ќе мора да ја потврдат нивната е-поштенска адреса преку врска испратена до нив кога ја укажуваат или менуваат е-поштенската адреса.\nСамо корисници со потврдена е-пошта можат да добиваат е-пошта од други корисници или да ги менуваат писмата за известување.\nОваа можност е '''препорачана''' за јавни викија поради можни злоупотреби на е-поштенската функција.",
+    "config-email-sender": "Повратна е-поштенска адреса:",
+    "config-email-sender-help": "Внесете ја е-поштенската адреса што ќе се користи како повратна адреса за излезна е-пошта.\nТаму ќе се испраќаат вратените (непримени) писма.\nМногу поштенски опслужувачи бараат барем делот за доменско име да биде важечки.",
+    "config-upload-settings": "Подигање на слики и податотеки",
+    "config-upload-enable": "Овозможи подигање на податотеки",
+    "config-upload-help": "Подигањето на податотеки потенцијално го изложуваат вашиот опслужувач на безбедносни ризици.\nЗа повеќе информации, прочитајте го [//www.mediawiki.org/wiki/Manual:Security поглавието за безбедност] во прирачникот.\n\nЗа да овозможите подигање на податотеки, сменете го режимот на потпапката <code>images</code> во основната папка на МедијаВики, за да му овозможите на мрежниот опслужувач да запишува во неа.\nПотоа овозможете ја оваа функција.",
+    "config-upload-deleted": "Папка за избришаните податотеки:",
+    "config-upload-deleted-help": "Одберете во која папка да се архивираат избришаните податотеки.\nНајдобро би било ако таа не е достапна преку интернет.",
+    "config-logo": "URL за логото:",
+    "config-logo-help": "Матичното руво на МедијаВики има простор за лого од 135x160 пиксели над страничната лента.\n\nМожете да употребите <code>$wgStylePath</code> или <code>$wgScriptPath</code> ако вашето лого е релативно на тие патеки.\n\nАко не сакате да имате лого, тогаш оставете го ова поле празно.",
+    "config-instantcommons": "Овозможи Instant Commons",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] е функција која им овозможува на викијата да користат слики, звучни записи и други мултимедијални содржини од [//commons.wikimedia.org/ Заедничката Ризница].\nЗа да може ова да работи, МедијаВики бара пристап до интернет.\n\nЗа повеќе информации за оваа функција и напатствија за нејзино поставување на вики (сите други освен Ризницата), коносултирајте го [//mediawiki.org/wiki/Manual:$wgForeignFileRepos прирачникот].",
+    "config-cc-error": "Изборникот на лиценци од Криејтив комонс не даде резултати.\nВнесете го името на лиценцата рачно.",
+    "config-cc-again": "Одберете повторно...",
+    "config-cc-not-chosen": "Одберете ја саканата лиценца од Криејтив комонс и стиснете на „продолжи“.",
+    "config-advanced-settings": "Напредни нагодувања",
+    "config-cache-options": "Нагодувања за кеширање на објекти:",
+    "config-cache-help": "Кеширањето на објекти се користи за зголемување на брзината на МедијаВики со кеширање на често употребуваните податоци.\nОва многу се препорачува на средни до големи викија, но од тоа ќе имаат полза и малите викија.",
+    "config-cache-none": "Без кеширање (не се остранува ниедна функција, но може да влијае на брзината кај поголеми викија)",
+    "config-cache-accel": "Кеширање на PHP-објекти (APC, XCache или WinCache)",
+    "config-cache-memcached": "Користи Memcached (бара дополнително поставување и нагодување)",
+    "config-memcached-servers": "Memcached-опслужувачи:",
+    "config-memcached-help": "Список на IP-адреси за употреба во Memcached.\nТреба да се наведе по една во секој ред, како и портата што ќе се користи. На пример:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "Го одбравте Memcached како ваш ваш тип на скришно памтење (кеш), но не наведовте опслужувач(и)",
+    "config-memcache-badip": "Внесовте неважечка IP-адреса за Memcached: $1",
+    "config-memcache-noport": "Не ја наведовте портата за опслужувачот на Memcached: $1.\nАко не знаете која порта треба да се користи, основната е 11211",
+    "config-memcache-badport": "Бројките за портата на Memcached треба да бидат помеѓу $1 и $2",
+    "config-extensions": "Додатоци",
+    "config-extensions-help": "Во вашата папка <code>./extensions</code> беа востановени горенаведените додатоци.\n\nЗа ова може да треба дополнително нагодување, но можете да ги овозможите сега",
+    "config-install-alreadydone": "'''Предупредување:''' Изгледа дека веќе го имате инсталирано МедијаВики и сега сакате да го инсталирате повторно.\nПродолжете на следната страница.",
+    "config-install-begin": "Стискајќи на „{{int:config-continue}}“ ќе ја започнете инсталацијата на МедијаВики.\nАко сакате да направите измени во досегашното, стиснете на „{{int:config-back}}“.",
+    "config-install-step-done": "готово",
+    "config-install-step-failed": "не успеа",
+    "config-install-extensions": "Вклучувам додатоци",
+    "config-install-database": "Ја поставувам базата на податоци",
+    "config-install-schema": "Создавам шема",
+    "config-install-pg-schema-not-exist": "PostgreSQL-шемата не постои",
+    "config-install-pg-schema-failed": "Создавањето натабелите не успеа.\nПроверете дали корисникот „$1“ може да запишува во шемата „$2“.",
+    "config-install-pg-commit": "Спроведување на промени",
+    "config-install-pg-plpgsql": "Проверувам јазик PL/pgSQL",
+    "config-pg-no-plpgsql": "Ќе треба да го инсталирате јазикот PL/pgSQL во базата $1",
+    "config-pg-no-create-privs": "Сметката што ја наведовте за инсталацијата нема доволно привилегии за да создаде друга сметка.",
+    "config-pg-not-in-role": "Сметката што ја наведовте за мрежниот корисник веќе постои.\nСметката што ја наведовте за инсталација не е суперкорисник и не ѝ припаѓа на улогата на мрежниот корисник, па затоа не може да создава објекти во негова  сопственост.\n\nМедијаВики налага дека табелите мора да се во сопственост на мрежниот корисник. Наведете друга мрежна сметка, или стиснете на „назад“ и наведете соодветно привилегиран корисник за инталацијата.",
+    "config-install-user": "Создавам корисник за базата",
+    "config-install-user-alreadyexists": "Корисникот „$1“ веќе постои",
+    "config-install-user-create-failed": "Создавањето на корисникот „$1“ не успеа: $2",
+    "config-install-user-grant-failed": "Доделувањето на дозвола на корисникот „$1“ не успеа: $2",
+    "config-install-user-missing": "Наведениот корисник „$1“ не постои.",
+    "config-install-user-missing-create": "Наведениот корисник „$1“ не постои.\nАко сакате да го создадете, штиклирајте ја можноста „создај сметка“.",
+    "config-install-tables": "Создавам табели",
+    "config-install-tables-exist": "'''Предупредување''': Изгледа дека табелите за МедијаВики веќе постојат.\nГо прескокнувам создавањето.",
+    "config-install-tables-failed": "'''Грешка''': Создавањето на табелата не успеа поради следнава грешка: $1",
+    "config-install-interwiki": "Ги пополнувам основно зададените меѓувики-табели",
+    "config-install-interwiki-list": "Не можев да ја пронајдам податотеката <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "'''Предупредување''': Табелата со интервикија веќе содржи ставки.\nГо прескокнувам основно-зададениот список.",
+    "config-install-stats": "Ги подготвувам статистиките",
+    "config-install-keys": "Создавање на тајни клучеви",
+    "config-insecure-keys": "'''Предупредување:''' {{PLURAL:$2|Безбедносниот клуч $1 создаден во текот на инсталацијата не е сосем безбеден|Безбедносните клучеви $1 создадени во текот на инсталацијата не се сосем безбедни}}. Ви препорачуваме да {{PLURAL:$2|го|ги}} смените рачно.",
+    "config-install-sysop": "Создавање на администраторска корисничка сметка",
+    "config-install-subscribe-fail": "Не можам да ве претплатам на известувањето mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "cURL не е инсталиран, а allow_url_fopen не е достапно.",
+    "config-install-mainpage": "Создавам главна страница со стандардна содржина",
+    "config-install-extension-tables": "Изработка на табели за овозможени додатоци",
+    "config-install-mainpage-failed": "Не можев да вметнам главна страница: $1",
+    "config-install-done": "'''Честитаме!'''\nУспешно го инсталиравте МедијаВики.\n\nИнсталаторот создаде податотека <code>LocalSettings.php</code>.\nТаму се содржат сите ваши нагодувања.\n\nЌе треба да ја преземете и да ја ставите во основата на инсталацијата (истата папка во која се наоѓа index.php). Преземањето треба да е започнато автоматски.\n\nАко не ви е понудено преземање, или пак ако сте го откажале, можете да го почнете одново стискајќи на следнава врска:\n\n$3\n\n'''Напомена''': Ако ова не го направите сега, податотеката со поставки повеќе нема да биде на достапна.\n\nОткога ќе завршите со тоа, можете да '''[$2 влезете на вашето вики]'''.",
+    "config-download-localsettings": "Преземи го <code>LocalSettings.php</code>",
+    "config-help": "помош",
+    "config-nofile": "Податотеката „$1“ не е пронајдена. Да не е избришана?",
+    "config-extension-link": "Дали сте знаеле дека вашето вики поддржува [//www.mediawiki.org/wiki/Manual:Extensions додатоци]?\n\nМожете да ги прелистате [//www.mediawiki.org/wiki/Category:Extensions_by_category по категории] или да ја посетите [//www.mediawiki.org/wiki/Extension_Matrix матрицата], каде ќе најдете полн список на додатоци.",
+    "mainpagetext": "'''МедијаВики е успешно инсталиран.'''",
+    "mainpagedocfooter": "Погледнете го [//meta.wikimedia.org/wiki/Help:Contents Упатството за корисници] за подетални иформации како се користи вики-програмот.\n\n==Од каде да почнете==\n* [//meta.wikimedia.org/wiki/Manual:Configuration_settings Список на нагодувања]\n* [//meta.wikimedia.org/wiki/Manual:FAQ ЧПП (често поставувани прашања) за МедијаВики].\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Поштенски список на МедијаВики за нови верзии]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Локализирајте го МедијаВики на вашиот јазик]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ml.json b/includes/installer/i18n/ml.json
new file mode 100644 (file)
index 0000000..05f43c6
--- /dev/null
@@ -0,0 +1,121 @@
+{
+    "@metadata": {
+        "authors": [
+            "Praveenp",
+            "Sadik Khalid"
+        ]
+    },
+    "config-desc": "മീഡിയവിക്കി ഇൻസ്റ്റോളർ",
+    "config-title": "മീഡിയവിക്കി $1 ഇൻസ്റ്റലേഷൻ",
+    "config-information": "വിവരങ്ങൾ",
+    "config-localsettings-upgrade": "'''അറിയിപ്പ്''': ഒരു <code>LocalSettings.php</code> ഫയൽ കാണുന്നു.\nസോഫ്റ്റ്‌വേർ അപ്‌ഗ്രേഡ് ചെയ്യുക സാദ്ധ്യമാണ്.\nദയവായി പെട്ടിയിൽ <code>$wgUpgradeKey</code> എന്നതിന്റെ വില നൽകുക.",
+    "config-localsettings-key": "അപ്‌ഗ്രേഡ് ചാവി:",
+    "config-localsettings-badkey": "താങ്കൾ നൽകിയ ചാവി തെറ്റാണ്",
+    "config-session-error": "സെഷൻ തുടങ്ങുന്നതിൽ പിഴവ്: $1",
+    "config-your-language": "താങ്കളുടെ ഭാഷ:",
+    "config-your-language-help": "ഇൻസ്റ്റലേഷൻ പ്രക്രിയയിൽ ഉപയോഗിക്കേണ്ട ഭാഷ തിരഞ്ഞെടുക്കുക.",
+    "config-wiki-language": "വിക്കി ഭാഷ:",
+    "config-wiki-language-help": "വിക്കിയിൽ പ്രധാനമായി ഉപയോഗിക്കേണ്ട ഭാഷ തിരഞ്ഞെടുക്കുക.",
+    "config-back": "← പിന്നിലേയ്ക്ക്",
+    "config-continue": "തുടരുക →",
+    "config-page-language": "ഭാഷ",
+    "config-page-welcome": "മീഡിയവിക്കിയിലേയ്ക്ക് സ്വാഗതം!",
+    "config-page-dbconnect": "ഡേറ്റാബേസുമായി ബന്ധപ്പെടുക",
+    "config-page-upgrade": "നിലവിലുള്ള ഇൻസ്റ്റലേഷൻ അപ്‌ഗ്രേഡ് ചെയ്യുക",
+    "config-page-dbsettings": "ഡേറ്റാബേസ് സജ്ജീകരണങ്ങൾ",
+    "config-page-name": "പേര്",
+    "config-page-options": "ഐച്ഛികങ്ങൾ",
+    "config-page-install": "ഇൻസ്റ്റോൾ",
+    "config-page-complete": "സമ്പൂർണ്ണം!",
+    "config-page-restart": "ഇൻസ്റ്റലേഷൻ അടച്ച ശേഷം പുനർപ്രവർത്തിപ്പിക്കുക",
+    "config-page-readme": "ഇത് വായിക്കൂ",
+    "config-page-releasenotes": "പ്രകാശന കുറിപ്പുകൾ",
+    "config-page-copying": "പകർത്തൽ",
+    "config-page-upgradedoc": "അപ്‌ഗ്രേഡിങ്",
+    "config-help-restart": "ഇതുവരെ ഉൾപ്പെടുത്തിയ എല്ലാവിവരങ്ങളും ഒഴിവാക്കാനും ഇൻസ്റ്റലേഷൻ പ്രക്രിയ നിർത്തി-വീണ്ടുമാരംഭിക്കാനും താങ്കളാഗ്രഹിക്കുന്നുണ്ടോ?",
+    "config-restart": "അതെ, പുനർപ്രവർത്തിപ്പിക്കുക",
+    "config-sidebar": "* [//www.mediawiki.org മീഡിയവിക്കി പ്രധാനതാൾ]\n* [//www.mediawiki.org/wiki/Help:Contents ഉപയോക്തൃസഹായി]\n* [//www.mediawiki.org/wiki/Manual:Contents കാര്യനിർവഹണസഹായി]\n* [//www.mediawiki.org/wiki/Manual:FAQ പതിവുചോദ്യങ്ങൾ]",
+    "config-env-php": "പി.എച്ച്.പി. $1 ഇൻസ്റ്റോൾ ചെയ്തിട്ടുണ്ട്.",
+    "config-no-db": "അനുയോജ്യമായ ഡേറ്റാബേസ് ഡ്രൈവർ കണ്ടെത്താനായില്ല!",
+    "config-memory-raised": "പി.എച്ച്.പി.യുടെ <code>memory_limit</code> $1 ആണ്, $2 ആയി ഉയർത്തിയിരിക്കുന്നു.",
+    "config-memory-bad": "'''മുന്നറിയിപ്പ്:''' പി.എച്ച്.പി.യുടെ <code>memory_limit</code> $1 ആണ്.\nഇത് മിക്കവാറും വളരെ കുറവാണ്.\nഇൻസ്റ്റലേഷൻ പരാജയപ്പെട്ടേക്കാം!",
+    "config-db-type": "ഡേറ്റാബേസ് തരം:",
+    "config-db-host": "ഡേറ്റാബേസ് ഹോസ്റ്റ്:",
+    "config-db-name": "ഡേറ്റാബേസിന്റെ പേര്:",
+    "config-db-name-oracle": "ഡേറ്റാബേസ് സ്കീമ:",
+    "config-db-install-account": "ഇൻസ്റ്റലേഷനുള്ള ഉപയോക്തൃ അംഗത്വം",
+    "config-db-username": "ഡേറ്റാബേസ് ഉപയോക്തൃനാമം:",
+    "config-db-password": "ഡേറ്റാബേസ് രഹസ്യവാക്ക്:",
+    "config-mysql-old": "മൈഎസ്‌ക്യൂഎൽ $1 അഥവാ അതിലും പുതിയത് ആവശ്യമാണ്, താങ്കളുടെ പക്കൽ ഉള്ളത് $2 ആണ്.",
+    "config-db-port": "ഡേറ്റാബേസ് പോർട്ട്:",
+    "config-db-schema": "മീഡിയവിക്കിയ്ക്കായുള്ള സ്കീമ",
+    "config-support-info": "മീഡിയവിക്കി താഴെ പറയുന്ന ഡേറ്റാബേസ് സിസ്റ്റംസ് പിന്തുണയ്ക്കുന്നു:\n\n$1\n\nതാങ്കൾ ഉപയോഗിക്കാനാഗ്രഹിക്കുന്ന ഡേറ്റാബേസ് സിസ്റ്റം പട്ടികയിലില്ലെങ്കിൽ, ദയവായി പിന്തുണ സജ്ജമാക്കാനായി മുകളിൽ നൽകിയിട്ടുള്ള ലിങ്കിലെ നിർദ്ദേശങ്ങൾ ചെയ്യുക.",
+    "config-header-mysql": "മൈഎസ്‌ക്യൂഎൽ സജ്ജീകരണങ്ങൾ",
+    "config-invalid-db-type": "അസാധുവായ ഡേറ്റാബേസ് തരം",
+    "config-missing-db-name": "\"ഡേറ്റാബേസിന്റെ പേരി\"ന് ഒരു വില നിർബന്ധമായും നൽകിയിരിക്കണം",
+    "config-connection-error": "$1.\n\nതാഴെ നൽകിയിരിക്കുന്ന ഹോസ്റ്റ്, ഉപയോക്തൃനാമം, രഹസ്യവാക്ക് എന്നിവ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.",
+    "config-regenerate": "LocalSettings.php പുനഃസൃഷ്ടിക്കുക →",
+    "config-mysql-engine": "സ്റ്റോറേജ് എൻജിൻ:",
+    "config-site-name": "വിക്കിയുടെ പേര്:",
+    "config-site-name-help": "ഇത് ബ്രൗസറിന്റെ ടൈറ്റിൽ ബാറിലും മറ്റനേകം ഇടങ്ങളിലും പ്രദർശിപ്പിക്കപ്പെടും.",
+    "config-site-name-blank": "സൈറ്റിന്റെ പേര് നൽകുക.",
+    "config-project-namespace": "പദ്ധതി നാമമേഖല:",
+    "config-ns-generic": "പദ്ധതി",
+    "config-ns-site-name": "വിക്കിയുടെ പേര് തന്നെ: $1",
+    "config-ns-other": "ഇതരം (വ്യക്തമാക്കുക)",
+    "config-ns-other-default": "എന്റെ‌വിക്കി",
+    "config-admin-box": "കാര്യനിർവാഹക അംഗത്വം",
+    "config-admin-name": "താങ്കളുടെ പേര്:",
+    "config-admin-password": "രഹസ്യവാക്ക്:",
+    "config-admin-password-confirm": "രഹസ്യവാക്ക് ഒരിക്കൽക്കൂടി:",
+    "config-admin-help": "ഇവിടെ താങ്കളുടെ ഇച്ഛാനുസരണമുള്ള ഉപയോക്തൃനാമം നൽകുക, ഉദാഹരണം \"ശശി കൊട്ടാരത്തിൽ\".\nഈ പേരായിരിക്കണം വിക്കിയിൽ പ്രവേശിക്കാൻ താങ്കൾ ഉപയോഗിക്കേണ്ടത്.",
+    "config-admin-name-blank": "ഒരു കാര്യനിർവാഹക ഉപയോക്തൃനാമം നൽകുക.",
+    "config-admin-name-invalid": "നൽകിയിട്ടുള്ള ഉപയോക്തൃനാമം \"<nowiki>$1</nowiki>\" അസാധുവാണ്.\nമറ്റൊരു ഉപയോക്തൃനാമം നൽകുക.",
+    "config-admin-password-blank": "കാര്യനിർവാഹക അംഗത്വത്തിനുള്ള രഹസ്യവാക്ക് നൽകുക.",
+    "config-admin-password-same": "രഹസ്യവാക്കും ഉപയോക്തൃനാമവും ഒന്നാകരുത്.",
+    "config-admin-password-mismatch": "താങ്കൾ നൽകിയ രഹസ്യവാക്കുകൾ രണ്ടും തമ്മിൽ യോജിക്കുന്നില്ല.",
+    "config-admin-email": "ഇമെയിൽ വിലാസം:",
+    "config-admin-error-user": "\"<nowiki>$1</nowiki>\" എന്ന പേരിലുള്ള കാര്യനിർവഹണ അംഗത്വ നിർമ്മിതിയ്ക്കിടെ ആന്തരികമായ പിഴവുണ്ടായി.",
+    "config-admin-error-password": "\"<nowiki>$1</nowiki>\" എന്ന പേരിലുള്ള കാര്യനിർവാഹക അംഗത്വത്തിനു രഹസ്യവാക്ക് സജ്ജീകരിച്ചപ്പോൾ ആന്തരികമായ പിഴവുണ്ടായി: <pre>$2</pre>",
+    "config-subscribe": "[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce പ്രകാശന അറിയിപ്പ് മെയിലിങ് ലിസ്റ്റിൽ] വരിക്കാരാകുക.",
+    "config-subscribe-help": "പുറത്തിറക്കൽ അറിയിപ്പുകളും, പ്രധാന സുരക്ഷാ അറിയിപ്പുകളും പ്രസിദ്ധീകരിക്കുന്ന വളരെ എഴുത്തുകളൊന്നും ഉണ്ടാകാറില്ലാത്ത മെയിലിങ് ലിസ്റ്റ് ആണിത്.\nപുതിയ പതിപ്പുകൾ പുറത്ത് വരുന്നതനുസരിച്ച് അവയെക്കുറിച്ചറിയാനും മീഡിയവിക്കി ഇൻസ്റ്റലേഷൻ പുതുക്കാനും ഇതിന്റെ വരിക്കാരൻ/വരിക്കാരി ആവുക.",
+    "config-almost-done": "മിക്കവാറും പൂർത്തിയായിരിക്കുന്നു!\nബാക്കിയുള്ളവ അവഗണിച്ച് വിക്കി ഇൻസ്റ്റോൾ ചെയ്യാവുന്നതാണ്.",
+    "config-optional-continue": "കൂടുതൽ ചോദ്യങ്ങൾ ചോദിക്കൂ.",
+    "config-optional-skip": "എനിക്ക് മടുത്തു, ഒന്ന് ഇൻസ്റ്റോൾ ചെയ്ത് തീർക്ക്.",
+    "config-profile-wiki": "പരമ്പരാഗത വിക്കി",
+    "config-profile-no-anon": "അംഗത്വ സൃഷ്ടി ചെയ്യേണ്ടതുണ്ട്",
+    "config-profile-fishbowl": "അനുവാദമുള്ളവർ മാത്രം തിരുത്തുക",
+    "config-profile-private": "സ്വകാര്യ വിക്കി",
+    "config-license": "പകർപ്പവകാശവും അനുമതിയും:",
+    "config-license-cc-by-sa": "ക്രിയേറ്റീവ് കോമൺസ് ആട്രിബ്യൂഷൻ ഷെയർ എലൈക്",
+    "config-license-cc-by-nc-sa": "ക്രിയേറ്റീവ് കോമൺസ് ആട്രിബ്യൂഷൻ നോൺ-കൊമേഴ്സ്യൽ ഷെയർ എലൈക്",
+    "config-license-pd": "പൊതുസഞ്ചയം",
+    "config-email-settings": "ഇമെയിൽ സജ്ജീകരണങ്ങൾ",
+    "config-enable-email-help": "ഇമെയിൽ പ്രവർത്തിക്കണമെങ്കിൽ, [http://www.php.net/manual/en/mail.configuration.php PHP's മെയിൽ സജ്ജീകരണങ്ങൾ] ശരിയായി ക്രമീകരിക്കേണ്ടതുണ്ട്.\nഇമെയിൽ സൗകര്യം ആവശ്യമില്ലെങ്കിൽ, ഇവിടെത്തന്നെ അത് നിർജ്ജീവമാക്കാം.",
+    "config-email-user": "ഉപയോക്താക്കൾ തമ്മിലുള്ള ഇമെയിൽ പ്രവർത്തനസജ്ജമാക്കുക",
+    "config-email-user-help": "സ്വന്തം ക്രമീകരണങ്ങളിൽ ഇമെയിൽ സജ്ജമാക്കിയിട്ടുണ്ടെങ്കിൽ ഉപയോക്താക്കളെ മറ്റുള്ളവർക്ക് ഇമെയിൽ അയയ്ക്കാൻ അനുവദിക്കുക.",
+    "config-email-usertalk": "ഉപയോക്തൃസംവാദം താളിൽ മാറ്റങ്ങളുണ്ടായാൽ അറിയിക്കുക",
+    "config-email-watchlist": "ശ്രദ്ധിക്കുന്നവയിൽ മാറ്റം വന്നാൽ അറിയിക്കുക",
+    "config-email-auth": "ഇമെയിലിന്റെ സാധുതാപരിശോധന സജ്ജമാക്കുക",
+    "config-email-sender": "മറുപടിയ്ക്കുള്ള ഇമെയിൽ വിലാസം:",
+    "config-upload-settings": "ചിത്രങ്ങളും പ്രമാണങ്ങളും അപ്‌ലോഡ് ചെയ്യൽ",
+    "config-upload-enable": "പ്രമാണ അപ്‌ലോഡുകൾ സജ്ജമാക്കുക",
+    "config-upload-deleted": "മായ്ക്കപ്പെട്ട ഫയലുകൾക്കുള്ള ഡയറക്റ്ററി:",
+    "config-logo": "ലോഗോയുടെ യൂ.ആർ.എൽ.:",
+    "config-logo-help": "മീഡിയവിക്കിയിൽ സ്വതേയുള്ള ദൃശ്യരൂപത്തിൽ 135x160 പിക്സലുള്ള ലോഗോ മുകളിൽ ഇടത് മൂലയിൽ കാണാം.\nഅനുയോജ്യമായ വലിപ്പമുള്ള ഒരു ചിത്രം അപ്‌ലോഡ് ചെയ്തിട്ട്, അതിന്റെ യൂ.ആർ.എൽ. ഇവിടെ നൽകുക.\n\nതാങ്കൾക്ക് ലോഗോ ആവശ്യമില്ലെങ്കിൽ, ഈ പെട്ടി ശൂന്യമായിടുക.",
+    "config-cc-again": "ഒന്നുകൂടി എടുക്കൂ...",
+    "config-advanced-settings": "വിപുലീകൃത ക്രമീകരണങ്ങൾ",
+    "config-extensions": "അനുബന്ധങ്ങൾ",
+    "config-install-step-done": "ചെയ്തു കഴിഞ്ഞു",
+    "config-install-step-failed": "പരാജയപ്പെട്ടു",
+    "config-install-extensions": "അനുബന്ധങ്ങൾ ഉൾപ്പെടുത്തുന്നു",
+    "config-install-database": "ഡേറ്റാബേസ് സജ്ജമാക്കുന്നു",
+    "config-install-pg-commit": "മാറ്റങ്ങൾ സ്വീകരിക്കുന്നു",
+    "config-install-user": "ഡേറ്റാബേസ് ഉപയോക്താവിനെ സൃഷ്ടിക്കുന്നു",
+    "config-install-sysop": "കാര്യനിർവാഹക അംഗത്വം സൃഷ്ടിക്കുന്നു",
+    "config-install-mainpage": "സ്വാഭാവിക ഉള്ളടക്കത്തോടുകൂടി പ്രധാനതാൾ സൃഷ്ടിക്കുന്നു",
+    "config-install-mainpage-failed": "പ്രധാന താൾ ഉൾപ്പെടുത്താൻ കഴിഞ്ഞില്ല: $1",
+    "config-install-done": "'''അഭിനന്ദനങ്ങൾ!'''\nതാങ്കൾ വിജയകരമായി മീഡിയവിക്കി സജ്ജീകരിച്ചിരിക്കുന്നു.\n\nഇൻസ്റ്റോളർ താങ്കളുടെ എല്ലാ ക്രമീകരണങ്ങളുമടങ്ങുന്ന <code>LocalSettings.php</code> ഫയൽ സൃഷ്ടിച്ചിട്ടുണ്ട്.\n\nപ്രസ്തുത പ്രമാണം ഡൗൺലോഡ് ചെയ്ത് താങ്കളുടെ വിക്കി സജ്ജീകരണത്തിന്റെ അടിസ്ഥാന ഡയറക്റ്ററിയിൽ ഇടേണ്ടതാണ് (index.php കിടക്കുന്ന അതേ ഡയറക്റ്ററിയിൽ). ഡൗൺലോഡിങ്ങ് സ്വയം ആരംഭിക്കുന്നതാണ്. ഡൗൺലോഡിങ്ങ് സ്വയം തുടങ്ങാതിരിക്കുകയോ, താങ്കൾ റദ്ദാക്കുകയോ ചെയ്ത പക്ഷം താഴെ കാണുന്ന കണ്ണിയിൽ ഞെക്കുക:\n$3\n\n'''ശ്രദ്ധിക്കുക''': താങ്കൾ ഇപ്പോൾ ചെയ്തില്ലെങ്കിൽ, ഫയൽ എടുക്കാതെ ഇൻസ്റ്റലേഷൻ പ്രക്രിയയിൽ നിന്ന് പുറത്തിറങ്ങിയാൽ, സൃഷ്ടിക്കപ്പെട്ട ക്രമീകരണങ്ങളടങ്ങുന്ന പ്രമാണം പിന്നീട് ലഭ്യമായിരിക്കില്ല.\n\nമുകളിൽ പറഞ്ഞ പ്രകാരം ചെയ്തു കഴിഞ്ഞാൽ, താങ്കൾക്ക് '''[$2 വിക്കിയിൽ പ്രവേശിക്കാവുന്നതാണ്]'''.",
+    "mainpagetext": "'''മീഡിയവിക്കി വിജയകരമായി സജ്ജീകരിച്ചിരിക്കുന്നു.'''",
+    "mainpagedocfooter": "വിക്കി സോഫ്റ്റ്‌വെയർ ഉപയോഗിക്കുന്നതിനെ കുറിച്ചുള്ള വിശദാംശങ്ങൾക്ക്  [//meta.wikimedia.org/wiki/Help:Contents സോഫ്റ്റ്‌വെയർ സഹായി] കാണുക.\n\n== പ്രാരംഭസഹായികൾ ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings ക്രമീകരണങ്ങളുടെ പട്ടിക]\n* [//www.mediawiki.org/wiki/Manual:FAQ മീഡിയവിക്കി പതിവുചോദ്യങ്ങൾ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce മീഡിയവിക്കി പ്രകാശന മെയിലിങ് ലിസ്റ്റ്]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/mn.json b/includes/installer/i18n/mn.json
new file mode 100644 (file)
index 0000000..091cea6
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Chinneeb"
+        ]
+    },
+    "config-page-language": "Хэл",
+    "mainpagetext": "'''МедиаВики амжилттай суулаа.'''",
+    "mainpagedocfooter": "Вики программыг хэрэглэх талаар заавар авахын тулд [//meta.wikimedia.org/wiki/Help:Contents хэрэглэгчийн гарын авлага]-г үзнэ үү.\n\n== Эхлэх ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Тохиргоо]\n* [//www.mediawiki.org/wiki/Manual:FAQ МедиаВикигийн тогтмол тавигддаг асуултууд]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce МедиаВикигийн мэдээний мэйл явуулах жагсаалт]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/mr.json b/includes/installer/i18n/mr.json
new file mode 100644 (file)
index 0000000..a1ed0d9
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''मीडियाविकीचे इन्स्टॉलेशन पूर्ण.'''",
+    "mainpagedocfooter": "विकी सॉफ्टवेअर वापरण्याकरिता [//meta.wikimedia.org/wiki/Help:Contents यूजर गाईड] पहा.\n\n== सुरुवात ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings कॉन्फिगरेशन सेटींगची यादी]\n* [//www.mediawiki.org/wiki/Manual:FAQ मीडियाविकी नेहमी विचारले जाणारे प्रश्न]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce मीडियाविकि मेलिंग लिस्ट]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ms.json b/includes/installer/i18n/ms.json
new file mode 100644 (file)
index 0000000..88beae9
--- /dev/null
@@ -0,0 +1,84 @@
+{
+    "@metadata": {
+        "authors": [
+            "Anakmalaysia",
+            "Pizza1016"
+        ]
+    },
+    "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 anda:",
+    "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",
+    "config-page-welcome": "Selamat datang ke MediaWiki!",
+    "config-page-dbconnect": "Bersambung dengan pangkalan data",
+    "config-page-upgrade": "Naik taraf pemasangan sedia ada",
+    "config-page-dbsettings": "Tetapan pangkalan data",
+    "config-page-name": "Nama",
+    "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.\nBagaimanapun, MediaWiki memerlukan PHP $2 ke atas.",
+    "config-unicode-using-utf8": "utf8_normalize.so oleh Brion Vibber digunakan untuk penormalan Unicode.",
+    "config-unicode-using-intl": "[http://pecl.php.net/intl Sambungan intl PECL] digunakan untuk penormalan Unicode.",
+    "config-db-charset": "Peranggu aksara pangkalan data",
+    "config-header-mysql": "Keutamaan MySQL",
+    "config-header-postgres": "Keutamaan PostgreSQL",
+    "config-header-sqlite": "Keutamaan SQLite",
+    "config-header-oracle": "Keutamaan Oracle",
+    "config-invalid-db-type": "Jenis pangkalan data tidak sah",
+    "config-db-web-account-same": "Gunakan akaun yang sama seperti dalam pemasangan",
+    "config-db-web-create": "Ciptakan akaun jika belum wujud",
+    "config-mysql-engine": "Enjin storan:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-charset": "Peranggu aksara pangkalan data:",
+    "config-mysql-binary": "Perduaan",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Nama wiki:",
+    "config-site-name-help": "Ini akan dipaparkan pada bar tajuk perisian pelayar dan tempat-tempat lain yang berkenaan.",
+    "config-site-name-blank": "Isikan nama tapak.",
+    "config-project-namespace": "Ruang nama projek:",
+    "config-ns-generic": "Projek",
+    "config-ns-site-name": "Sama dengan nama wiki: $1",
+    "config-ns-other": "Lain-lain (nyatakan)",
+    "config-ns-other-default": "MyWiki",
+    "config-admin-box": "Akaun penyelia",
+    "config-admin-name": "Nama kamu:",
+    "config-admin-password": "Kata laluan:",
+    "config-admin-password-confirm": "Kata laluan lagi:",
+    "config-admin-password-mismatch": "Kata-kata laluan yang kamu berikan tidak sepadan.",
+    "config-admin-email": "Alamat e-mel:",
+    "config-admin-error-bademail": "Kamu telah memberikan alamat e-mel yang tidak betul.",
+    "config-optional-skip": "Saya sudah bosan, pasangkanlah wiki sahaja.",
+    "config-license": "Hak cipta dan lesen:",
+    "config-license-none": "Tiada pengaki lesen",
+    "config-license-cc-by-sa": "Creative Commons Attribution Share Alike",
+    "config-license-cc-by": "Creative Commons Attribution",
+    "config-license-cc-by-nc-sa": "Creative Commons Attribution Non-Commercial Share Alike",
+    "config-license-cc-0": "Creative Commons Zero (Domain Awam)",
+    "config-license-gfdl": "Lesen Dokumentasi Bebas GNU 1.3 atau ke atas",
+    "config-license-pd": "Domain Awam",
+    "config-email-settings": "Tetapan e-mel",
+    "config-install-step-done": "siap",
+    "config-install-step-failed": "gagal",
+    "config-install-user-alreadyexists": "Pengguna \"$1\" sudah wujud",
+    "config-help": "bantuan",
+    "mainpagetext": "'''MediaWiki telah berjaya dipasang.'''",
+    "mainpagedocfooter": "Sila rujuk [//meta.wikimedia.org/wiki/Help:Contents Panduan Penggunaan] untuk maklumat mengenai penggunaan perisian wiki ini.\n\n== Permulaan ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Senarai tetapan konfigurasi]\n* [//www.mediawiki.org/wiki/Manual:FAQ Soalan Lazim MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Senarai surat keluaran MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Terjemahkan MediaWiki ke dalam bahasa anda]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/mt.json b/includes/installer/i18n/mt.json
new file mode 100644 (file)
index 0000000..2aedc5d
--- /dev/null
@@ -0,0 +1,89 @@
+{
+    "@metadata": {
+        "authors": [
+            "Chrisportelli"
+        ]
+    },
+    "config-title": "Installazzjoni ta' MediaWiki $1",
+    "config-information": "Informazzjoni",
+    "config-localsettings-key": "Ċavetta tal-aġġornament:",
+    "config-localsettings-badkey": "Iċ-ċavetta li tajt hija ħażina.",
+    "config-your-language": "Il-lingwa tiegħek:",
+    "config-your-language-help": "Agħżel lingwa li tixtieq tuża' matul il-proċess ta' installazzjoni.",
+    "config-wiki-language": "Lingwi tal-wiki:",
+    "config-wiki-language-help": "Agħżel il-lingwa li l-wiki se tkun l-aktar użata fil-wiki.",
+    "config-back": "← Lura",
+    "config-continue": "Kompli →",
+    "config-page-language": "Lingwa",
+    "config-page-welcome": "Merħba fuq MediaWiki!",
+    "config-page-dbconnect": "Aqbad mad-databażi",
+    "config-page-upgrade": "Aġġorna l-installazzjoni eżistenti",
+    "config-page-dbsettings": "Impostazzjonijiet tad-databażi",
+    "config-page-name": "Isem",
+    "config-page-options": "Għażliet",
+    "config-page-install": "Installa",
+    "config-page-complete": "Lesta!",
+    "config-page-restart": "Erġa' ibda l-installazzjoni",
+    "config-page-readme": "Aqrani",
+    "config-page-releasenotes": "Noti tal-verżjoni",
+    "config-page-upgradedoc": "Aġġornament",
+    "config-page-existingwiki": "Wiki eżistenti",
+    "config-restart": "Iva, erġa' ibda",
+    "config-env-php": "PHP $1 huwa installat.",
+    "config-db-wiki-settings": "Identifika din il-wiki",
+    "config-db-name": "Isem tad-databażi:",
+    "config-db-install-account": "Kont tal-utent għall-installazzjoni",
+    "config-db-username": "Isem tal-utent tad-databażi:",
+    "config-db-password": "Password tad-databażi:",
+    "config-db-port": "Port tad-databażi:",
+    "config-db-schema": "Skema għal MediaWiki:",
+    "config-db-web-create": "Oħloq il-kont jekk għadu ma jeżistix",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-charset": "Sett ta' karattri tad-databażi:",
+    "config-mysql-binary": "Binarju",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Isem tal-wiki:",
+    "config-site-name-help": "Dan se jidher fil-barra tat-titlu tal-browżer u f'diversi postijiet oħra.",
+    "config-site-name-blank": "Daħħal isem tas-sit.",
+    "config-project-namespace": "Spazju tal-isem tal-proġett:",
+    "config-ns-generic": "Proġett",
+    "config-ns-site-name": "L-istess bħall-isem tal-wiki: $1",
+    "config-ns-other": "Oħrajn (speċifika)",
+    "config-ns-other-default": "MyWiki",
+    "config-ns-invalid": "L-ispazju speċifikat \"<nowiki>$1</nowiki>\" huwa ħażin.\nSpeċifika spazju tal-isem tal-proġett differenti.",
+    "config-ns-conflict": "L-ispazju speċifikat \"<nowiki>$1</nowiki>\" joħloq kunflitt ma' spazju tal-isem ieħor tal-MediaWiki.\nSpeċifika spazju tal-isem tal-proġett differenti.",
+    "config-admin-box": "Kont tal-amministratur",
+    "config-admin-name": "Ismek:",
+    "config-admin-password": "Password:",
+    "config-admin-password-confirm": "Erġa' daħħal il-password:",
+    "config-admin-help": "Daħħal l-isem tal-utent preferit hawnhekk, per eżempju \"Joe Borg\".\nDan huwa l-isem li se tuża' kull darba li tidħol fil-wiki.",
+    "config-admin-name-blank": "Daħħal isem tal-utent għall-amministratur.",
+    "config-admin-name-invalid": "L-isem tal-utent speċifikat \"<nowiki>$1</nowiki>\" huwa ħażin.\nSpeċifika isem tal-utent differenti.",
+    "config-admin-password-blank": "Daħħal password għall-kont tal-amministratur.",
+    "config-admin-password-same": "Il-password ma tistax tkun l-istess bħall-isem tal-utent.",
+    "config-admin-password-mismatch": "Il-passwords li daħħalt ma jaqblux.",
+    "config-admin-email": "Indirizz elettroniku:",
+    "config-admin-error-bademail": "Daħħalt indirizz elettroniku ħażin.",
+    "config-almost-done": "Kważi lest!\nJekk trid tista' taqbeż il-parti li jmiss tal-konfigurazzjoni u sempliċiment tinstalla l-wiki.",
+    "config-optional-continue": "Staqsini aktar mistoqsijiet.",
+    "config-optional-skip": "Xbajt diġà, installa l-wiki.",
+    "config-profile-wiki": "Wiki tradizzjonali",
+    "config-profile-no-anon": "Huwa obbligatorju l-ħolqien tal-kont",
+    "config-profile-fishbowl": "Edituri awtorizzati biss",
+    "config-profile-private": "Wiki privata",
+    "config-license-cc-by-sa": "Creative Commons Attribution Share Alike",
+    "config-license-cc-by": "Creative Commons Attribution",
+    "config-license-cc-by-nc-sa": "Creative Commons Attribution Non-Commercial Share Alike",
+    "config-license-cc-0": "Creative Commons Zero (dominju pubbliku)",
+    "config-license-pd": "Dominju pubbliku",
+    "config-license-cc-choose": "Agħżel waħda mil-liċenzji tal-Creative Commons",
+    "config-upload-deleted": "Direttorju għall-fajls imħassra:",
+    "config-upload-deleted-help": "Agħżel direttorju fejn iżżomm fajls imħassra.\nIdealment, dan m'għandux ikun aċċessibbli mill-web.",
+    "config-logo": "URL tal-logo:",
+    "config-download-localsettings": "Niżżel <code>LocalSettings.php</code>",
+    "config-help": "għajnuna",
+    "config-nofile": "Il-fajl \"$1\" ma setax jinstab. Dan ġie mħassar?",
+    "mainpagetext": "'''MediaWiki ġie installat b'suċċess.'''",
+    "mainpagedocfooter": "Ikkonsulta l-[//meta.wikimedia.org/wiki/Help:Contents Gwida għall-utenti] sabiex tikseb iktar informazzjoni dwar kif tuża' s-softwer tal-wiki.\n\n== Biex tibda ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista ta' preferenzi għall-konfigurazzjoni]\n* [//www.mediawiki.org/wiki/Manual:FAQ Mistoqsijiet rikorrenti fuq il-MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Il-lista tal-posta tħabbar 'l MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/my.json b/includes/installer/i18n/my.json
new file mode 100644 (file)
index 0000000..0ffbf17
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Lionslayer"
+        ]
+    },
+    "mainpagetext": "'''မီဒီယာဝီကီကို အောင်မြင်စွာ သွင်းပြီးပါပြီ။'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/myv.json b/includes/installer/i18n/myv.json
new file mode 100644 (file)
index 0000000..792c4ef
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "@metadata": {
+        "authors": [
+            "Botuzhaleny-sodamo"
+        ]
+    },
+    "config-page-language": "Кель",
+    "config-page-name": "Лемезэ",
+    "config-page-readme": "Ловномак",
+    "config-admin-name": "Леметь:",
+    "config-admin-password": "Совамо валот:",
+    "config-admin-password-confirm": "Совамо валот одов:",
+    "config-admin-email": "Е-сёрма паргот:",
+    "config-install-step-done": "теезь",
+    "mainpagetext": "'''МедияВикинь тевс аравтомазо парсте лиссь.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/mzn.json b/includes/installer/i18n/mzn.json
new file mode 100644 (file)
index 0000000..b24592d
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "محک"
+        ]
+    },
+    "config-help": "راهنما"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/nah.json b/includes/installer/i18n/nah.json
new file mode 100644 (file)
index 0000000..7a7a6d3
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaHuiqui cualli ōmotlahtlāli.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/nan.json b/includes/installer/i18n/nan.json
new file mode 100644 (file)
index 0000000..8ffe289
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Ianbu"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki已經裝好矣。'''",
+    "mainpagedocfooter": "請查看[//meta.wikimedia.org/wiki/Help:Contents 用者說明書]的資料通使用wiki 軟體\n\n== 入門 ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings 配置的設定]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki時常問答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki的公布列單]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/nb.json b/includes/installer/i18n/nb.json
new file mode 100644 (file)
index 0000000..d243baf
--- /dev/null
@@ -0,0 +1,264 @@
+{
+    "@metadata": {
+        "authors": [
+            "Event",
+            "Nghtwlkr",
+            "아라"
+        ]
+    },
+    "config-desc": "Installasjonsprogrammet for MediaWiki",
+    "config-title": "Installasjon av MediaWiki $1",
+    "config-information": "Informasjon",
+    "config-localsettings-upgrade": "En <code>LocalSettings.php</code>-fil har blitt oppdaget.\nFor å oppgradere denne installasjonen, skriv inn verdien av <code>$wgUpgradeKey</code> i boksen nedenfor.\nDu finner denne i <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Filen ''<code>LocalSettings.php</code>'' er funnet.\nFor å oppgradere denne installasjonen, vennligst kjør ''update.php'' i stedet",
+    "config-localsettings-key": "Oppgraderingsnøkkel:",
+    "config-localsettings-badkey": "Nøkkelen du oppga er feil.",
+    "config-upgrade-key-missing": "En eksisterende installasjon av MediaWiki er funnet.\nFor å oppgradere denne installasjonen, vær vennlig å legge til følgende linje helt til slutt i din ''<code>LocalSettings.php</code>''-fil:\n\n$1",
+    "config-localsettings-incomplete": "Den eksisterende ''<code>LocalSettings.php</code>'' ser ut til å være ufullstendig.\nVariabelen $1 har ingen verdi.\nVær vennlig å endre ''<code>LocalSettings.php</code>'' slik at variabelen får en verdi, og klikk ''{{int:Config-continue}}''.",
+    "config-localsettings-connection-error": "Det ble funnet en feil ved tilknytning av databasen med innstillingene i ''<code>LocalSettings.php</code>'' eller ''<code>AdminSettings.php</code>''. Vær vennlig å rette opp disse innstillingene og prøv igjen.\n\n$1",
+    "config-session-error": "Feil under oppstart av økt: $1",
+    "config-session-expired": "Dine øktdata ser ut til å ha utløpt.\nØkter er konfigurert for en levetid på $1.\nDu kan øke dette ved å sette <code>session.gc_maxlifetime</code> i php.ini.\nStart installasjonsprosessen på nytt.",
+    "config-no-session": "Dine øktdata ble tapt!\nSjekk din php.ini og sørg for at <code>session.save_path</code> er satt til en passende mappe.",
+    "config-your-language": "Ditt språk:",
+    "config-your-language-help": "Velg et språk å bruke under installasjonsprosessen.",
+    "config-wiki-language": "Wikispråk:",
+    "config-wiki-language-help": "Velg språket som wikien hovedsakelig vil bli skrevet i.",
+    "config-back": "← Tilbake",
+    "config-continue": "Fortsett →",
+    "config-page-language": "Språk",
+    "config-page-welcome": "Velkommen til MediaWiki!",
+    "config-page-dbconnect": "Koble til database",
+    "config-page-upgrade": "Oppgrader eksisterende innstallasjon",
+    "config-page-dbsettings": "Databaseinnstillinger",
+    "config-page-name": "Navn",
+    "config-page-options": "Valg",
+    "config-page-install": "Installer",
+    "config-page-complete": "Ferdig!",
+    "config-page-restart": "Start installasjonen på nytt",
+    "config-page-readme": "Les meg",
+    "config-page-releasenotes": "Utgivelsesnotat",
+    "config-page-copying": "Kopiering",
+    "config-page-upgradedoc": "Oppgradering",
+    "config-page-existingwiki": "Eksisterende wiki",
+    "config-help-restart": "Ønsker du å fjerne alle lagrede data som du har skrevet inn og starte installasjonsprosessen på nytt?",
+    "config-restart": "Ja, start på nytt",
+    "config-welcome": "=== Miljøsjekker ===\nGrunnleggende sjekker utføres for å se om dette miljøet er egnet for en MediaWiki-installasjon.\nDu bør oppgi resultatene fra disse sjekkene om du trenger hjelp under installasjonen.",
+    "config-copyright": "=== Opphavsrett og vilkår ===\n\n$1\n\nMediaWiki 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.\n\nDette programmet 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'''.\nSe GNU General Public License for flere detaljer.\n\nDu skal ha mottatt <doclink href=Copying>en kopi av GNU General Public License</doclink> sammen med dette programmet; hvis ikke, skriv til Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA eller [http://www.gnu.org/copyleft/gpl.html les det på nettet].",
+    "config-sidebar": "* [//www.mediawiki.org MediaWiki hjem]\n* [//www.mediawiki.org/wiki/Help:Contents Brukerguide]\n* [//www.mediawiki.org/wiki/Manual:Contents Administratorguide]\n* [//www.mediawiki.org/wiki/Manual:FAQ OSS]\n----\n* <doclink href=Readme>Les meg</doclink>\n* <doclink href=ReleaseNotes>Utgivelsesnotater</doclink>\n* <doclink href=Copying>Kopiering</doclink>\n* <doclink href=UpgradeDoc>Oppgradering</doclink>",
+    "config-env-good": "Miljøet har blitt sjekket.\nDu kan installere MediaWiki.",
+    "config-env-bad": "Miljøet har blitt sjekket.\nDu kan installere MediaWiki.",
+    "config-env-php": "PHP $1 er innstallert.",
+    "config-env-php-toolow": "PHP $1 er installert.\nMediaWiki krever imidlertid PHP $2 eller høyere.",
+    "config-unicode-using-utf8": "Bruker Brion Vibbers utf8_normalize.so for Unicode-normalisering.",
+    "config-unicode-using-intl": "Bruker [http://pecl.php.net/intl intl PECL-utvidelsen] for Unicode-normalisering.",
+    "config-unicode-pure-php-warning": "'''Advarsel''': [http://pecl.php.net/intl intl PECL-utvidelsen] er ikke tilgjengelig for å håndtere Unicode-normaliseringen, faller tilbake til en langsommere ren-PHP-implementasjon.\nOm du kjører et nettsted med høy trafikk bør du lese litt om [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-normalisering].",
+    "config-unicode-update-warning": "'''Advarsel''': Den installerte versjonen av Unicode-normalisereren bruker en eldre versjon av [http://site.icu-project.org/ ICU-prosjektets] bibliotek.\nDu bør [//www.mediawiki.org/wiki/Unicode_normalization_considerations oppgradere] om du er bekymret for å bruke Unicode.",
+    "config-no-db": "Fant ikke en passende databasedriver! Du må installere en databasedriver for PHP.\nFølgende databasetyper er støttet: $1\n\nOm du er på delt vertsskap, spør din vertsleverandør om å installere en passende databasedriver.\nOm du kompilerte PHP selv, rekonfigirer den med en aktivert databaseklient, for eksempel ved å bruke <code>./configure --with-mysql</code>.\nOm du installerte PHP fra en Debian- eller Ubuntu-pakke må du også installere modulen php5-mysql.",
+    "config-outdated-sqlite": "'''Advarsel''': Du har SQLite $1, som er en eldre versjon enn minimumskravet SQLite $2. SQLite vil ikke være tilgjengelig.",
+    "config-no-fts3": "'''Advarsel''': SQLite er kompilert uten [//sqlite.org/fts3.html FTS3-modulen], søkefunksjoner vil ikke være tilgjengelig på dette bakstykket.",
+    "config-register-globals": "'''Advarsel: PHPs <code>[http://php.net/register_globals register_globals]</code>-alternativ er aktivert.'''\n'''Deaktiver det om du kan.'''\nMediaWiki vil fungere, men tjeneren din er utsatt for potensielle sikkerhetssårbarheter.",
+    "config-magic-quotes-runtime": "'''Kritisk: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] er aktiv!'''\nDette alternativet ødelegger inndata på en uforutsigbar måte.\nDu kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.",
+    "config-magic-quotes-sybase": "'''Kritisk: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] er aktiv!'''\nDette alternativet ødelegger inndata på en uforutsigbar måte.\nDu kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.",
+    "config-mbstring": "'''Kritisk: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] er aktiv!'''\nDette alternativet fører til feil og kan ødelegge data på en uforutsigbar måte.\nDu kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.",
+    "config-ze1": "'''Kritisk: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] er aktiv!'''\nDette alternativet fører til horrible feil med MediaWiki.\nDu kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.",
+    "config-safe-mode": "'''Advarsel:''' PHPs [http://www.php.net/features.safe-mode safe mode] er aktiv.\nDet kan føre til problem, spesielt hvis du bruker støtte for filopplastinger og <code>math</code>.",
+    "config-xml-bad": "PHPs XML-modul mangler.\nMediaWiki krever funksjonene i denne modulen og vil ikke virke i denne konfigurasjonen.\nHvis du kjører Mandrak, installer pakken php-xml.",
+    "config-pcre": "PCRE-støttemodulen ser ut til å mangle.\nMediaWiki krever funksjonene for de Perl-kompatible regulære uttrykkene for å virke.",
+    "config-pcre-no-utf8": "'''Fatal''': PHPs PCRE modul ser ut til å være kompilert uten PCRE_UTF8-støtte.\nMediaWiki krever UTF-8-støtte for å fungere riktig.",
+    "config-memory-raised": "PHPs <code>memory_limit</code> er $1, økt til $2.",
+    "config-memory-bad": "'''Advarsel:''' PHPs <code>memory_limit</code> er $1.\nDette er sannsynligvis for lavt.\nInstallasjonen kan mislykkes!",
+    "config-ctype": "'''Fatal feil''': PHP må kompileres med støtte for [http://www.php.net/manual/en/ctype.installation.php Ctype-utvidelsen].",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] er innstallert",
+    "config-apc": "[http://www.php.net/apc APC] er innstallert",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] er installert",
+    "config-no-cache": "'''Advarsel:''' Kunne ikke finne [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] eller [http://www.iis.net/download/WinCacheForPhp WinCache].\nObjekthurtiglagring er ikke aktivert.",
+    "config-mod-security": "'''Advarsel''': Din web-tjener har [http://modsecurity.org/ mod_security] påslått. Hvis denne er feilinnstilt, kan det gi problemer for MediaWiki eller annen programvare som tillater brukere å poste vilkårlig innhold.\nSjekk [http://modsecurity.org/documentation/ mod_security-dokumentasjonen] eller ta kontakt med din nettleverandør hvis du opplever tilfeldige feil.",
+    "config-diff3-bad": "GNU diff3 ikke funnet.",
+    "config-imagemagick": "Fant ImageMagick: <code>$1</code>.\nBildeminiatyrisering vil aktiveres om du aktiverer opplastinger.",
+    "config-gd": "Fant innebygd GD-grafikkbibliotek.\nBildeminiatyrisering vil aktiveres om du aktiverer opplastinger.",
+    "config-no-scaling": "Kunne ikke finne GD-bibliotek eller ImageMagick.\nBildeminiatyrisering vil være deaktivert.",
+    "config-no-uri": "'''Feil:''' Kunne ikke bestemme gjeldende URI.\nInstallasjon avbrutt.",
+    "config-no-cli-uri": "'''Advarsel''': Ingen --scriptpath er angitt; bruker standard: <code>$1</code>.",
+    "config-using-server": "Bruker servernavnet  \"<nowiki>$1</nowiki>\".",
+    "config-using-uri": "Bruker server-URL \"<nowiki>$1$2</nowiki>\".",
+    "config-uploads-not-safe": "'''Advarsel:''' Din standardmappe for opplastinger <code>$1</code> er sårbar for kjøring av vilkårlige skript.\nSelv om MediaWiki sjekker alle opplastede filer for sikkerhetstrusler er det sterkt anbefalt å [//www.mediawiki.org/wiki/Manual:Security#Upload_security lukke denne sikkerhetssårbarheten] før du aktiverer opplastinger.",
+    "config-no-cli-uploads-check": "'''Advarsel:''' Din standard-katalog for opplastinger (<code>$1</code>) er ikke kontrollert for sårbarhet overfor vilkårlig skript-kjøring under CLI-installasjonen.",
+    "config-brokenlibxml": "Ditt system har en kombinasjon av PHP- og libxml2-versjoner som er feilaktige og kan forårsake skjult dataødeleggelse i MediaWiki og andre web-applikasjoner.\nOppgrader til PHP 5.2.9 eller nyere og libxml 2 2.7.3 eller nyere ([//bugs.php.net/bug.php?id=45996 Feil-liste for PHP]).\nInstallasjon abortert.",
+    "config-using531": "MediaWiki kan ikke brukes med PHP $1 på grunn av en feil med referanseparametere til <code>__call()</code>.\nOppgrader til PHP 5.3.2 eller høyere, eller nedgrader til PHP 5.3.0 for å løse dette.\nInstallasjonen avbrutt.",
+    "config-suhosin-max-value-length": "Suhosin er installert og begrenser GET-parameterlengder til $1 bytes. MediaWiki's ResourceLoader-komponent klarer å komme rundt denne begrensningen, med med redusert ytelse. På mulig bør du sette <code>suhosin.get.max_value_length</code> til minst 1024 i <code>php.ini</code>, og sette <code>$wgResourceLoaderMaxQueryLength</code> til samme verdi i LocalSettings.php.",
+    "config-db-type": "Databasetype:",
+    "config-db-host": "Databasevert:",
+    "config-db-host-help": "Hvis databasen kjører på en annen tjenermaskin, skriv inn vertsnavnet eller IP-adressen her.\n\nHvis du bruker et webhotell, vil du kunne be om aktuelt vertsnavn fra din leverandør.\n\nHvis du installerer på en Windowstjener og bruker MySQL, kan det hende at «localhost» ikke brukes som tjenernavn. Hvis så er tilfelle, prøv «127.0.0.1» som lokal IP-adresse.\n\nHvis du bruker PostgreSQL, la dette feltet være blankt slik at koplingen gjøres via en \"Unix socket\".",
+    "config-db-host-oracle": "Database TNS:",
+    "config-db-host-oracle-help": "Skriv inn et gyldig [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; en tnsnames.ora-fil må være synlig for installasjonsprosessen.<br />Hvis du bruker klientbibliotek 10g eller nyere kan du også bruke navngivingsmetoden [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+    "config-db-wiki-settings": "Identifiser denne wikien",
+    "config-db-name": "Databasenavn:",
+    "config-db-name-help": "Velg et navn som identifiserer wikien din.\nDet bør ikke inneholde mellomrom.\n\nHvis du bruker en delt nettvert vil verten din enten gi deg et spesifikt databasenavn å bruke, eller la deg opprette databaser via kontrollpanelet.",
+    "config-db-name-oracle": "Databaseskjema:",
+    "config-db-account-oracle-warn": "Det finnes tre mulig fremgangsmåter for å installere Oracle som database:\n\nHvis du ønsker å opprette en databasekonto som del av installasjonsprosessen, oppgi da en konto med SYSDBA-rolle som databasekonto for installasjonen og angi påkrevd autentiseringsinformasjon for web-aksesskontoen. Ellers kan du enten opprette web-aksesskontoen manuelt eller kun oppgi den kontoen (hvis den har påkrevede tillatelser for å opprette skjemeobjektene) , alternativt oppgi to ulike kontoer, en med opprettelsesprivilegier (create) og en begrenset konto for web-aksess.\n\nSkript for å opprette en konto med påkrevde privilegier finnes i \"maintenance/oracle/\"-folderen av denne installasjonen. Husk at det å bruke en begrenset konto vil blokkere all vedlikeholdsfunksjonalitet med standard konto.",
+    "config-db-install-account": "Brukerkonto for installasjon",
+    "config-db-username": "Databasebrukernavn:",
+    "config-db-password": "Databasepassord:",
+    "config-db-password-empty": "Skriv inn et passord for den nye databasebrukeren: $1.\nDet er mulig å opprette brukere uten passord, men dette er ikke sikkert.",
+    "config-db-install-username": "Skriv inn brukernavnet som vil bli brukt til å koble til databasen under installasjonsprosessen.\nDette er ikke brukernavnet på MediaWiki-kontoen; dette er brukernavnet for databasen din.",
+    "config-db-install-password": "Skriv inn passordet som vil bli brukt til å koble til databasen under installasjonsprosessen.\nDette er ikke passordet på MediaWiki-kontoen; dette er passordet for databasen din.",
+    "config-db-install-help": "Skriv inn brukernavnet og passordet som vil bli brukt for å koble til databasen under installasjonsprosessen.",
+    "config-db-account-lock": "Bruk det samme brukernavnet og passordet under normal drift",
+    "config-db-wiki-account": "Brukerkonto for normal drift",
+    "config-db-wiki-help": "Skriv inn brukernavnet og passordet som vil bli brukt til å koble til databasen under normal wikidrift.\nHvis kontoen ikke finnes, og installasjonskontoen har tilstrekkelige privilegier, vil denne brukerkontoen bli opprettet med et minimum av privilegier, tilstrekkelig for å operere wikien.",
+    "config-db-prefix": "Databasetabellprefiks:",
+    "config-db-prefix-help": "Hvis du trenger å dele en database mellom flere wikier, eller mellom MediaWiki og andre nettapplikasjoner, kan du velge å legge til et prefiks til alle tabellnavnene for å unngå konflikter.\nIkke bruk mellomrom.\n\nDette feltet er vanligvis tomt.",
+    "config-db-charset": "Databasetegnsett",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binær",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 bakoverkompatibel UTF-8",
+    "config-charset-help": "'''Advarsel:''' Hvis du bruker '''bakoverkompatibel UTF-8''' på MySQL 4.1+, og deretter sikkerhetskopierer databasen med <code>mysqldump</code> kan det ødelegge alle ikke-ASCII tegn og irreversibelt ødelegge dine sikkerhetskopier!\n\nI '''binary mode''' lagrer MediaWiki UTF-8 tekst til databasen i binærfelt.\nDette er mer effektivt enn MySQLs UTF-8 modus og tillater deg å bruke hele spekteret av Unicode-tegn.\nI '''UTF-8 mode''' vil MySQL vite hvilket tegnsett dataene dine er i og kan presentere og konvertere det på en riktig måte,\nmen det vil ikke la deg lagre tegn over «[//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes the Basic Multilingual Plane]».",
+    "config-mysql-old": "MySQL $1 eller senere kreves, du har $2.",
+    "config-db-port": "Databaseport:",
+    "config-db-schema": "Skjema for MediaWiki",
+    "config-db-schema-help": "Dette skjemaet er som regel riktig.\nBare endre det hvis du vet at du trenger det.",
+    "config-pg-test-error": "Får ikke kontakt med database '''$1''': $2",
+    "config-sqlite-dir": "SQLite datamappe:",
+    "config-sqlite-dir-help": "SQLite lagrer alle data i en enkelt fil.\n\nMappen du oppgir må være skrivbar for nettjeneren under installasjonen.\n\nDen bør '''ikke''' være tilgjengelig fra nettet, dette er grunnen til at vi ikke legger det der PHP-filene dine er.\n\nInstallasjonsprogrammet vil skrive en <code>.htaccess</code>-fil sammen med det, men om det mislykkes kan noen få tilgang til din råe database. Dette inkluderer rå brukerdata (e-postadresser, hashede passord) samt slettede revisjoner og andre begrensede data på wikien.\n\nVurder å plassere databasen et helt annet sted, for eksempel i <code>/var/lib/mediawiki/yourwiki</code>.",
+    "config-oracle-def-ts": "Standard tabellrom:",
+    "config-oracle-temp-ts": "Midlertidig tabellrom:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "MediaWiki støtter følgende databasesystem:\n\n$1\n\nHvis du ikke ser databasesystemet du prøver å bruke i listen nedenfor, følg instruksjonene det er lenket til over for å aktivere støtte.",
+    "config-support-mysql": "* $1 er det primære målet for MediaWiki og er best støttet ([http://www.php.net/manual/en/mysql.installation.php hvordan kompilere PHP med MySQL-støtte])",
+    "config-support-postgres": "* $1 er et populært åpen kildekode-databasesystem som er et alternativ til MySQL ([http://www.php.net/manual/en/pgsql.installation.php hvordan kompilere PHP med PostgreSQL-støtte]). Det kan være noen små utestående feil og det anbefales ikke for bruk i et produksjonsmiljø.",
+    "config-support-sqlite": "* $1 er et lettvekts-databasesystem som er veldig godt støttet. ([http://www.php.net/manual/en/pdo.installation.php hvordan kompilere PHP med SQLite-støtte], bruker PDO)",
+    "config-support-oracle": "* $1 er en kommersiell bedriftsdatabase. ([http://www.php.net/manual/en/oci8.installation.php Hvordan kompilere PHP med OCI8-støtte])",
+    "config-header-mysql": "MySQL-innstillinger",
+    "config-header-postgres": "PostgreSQL-innstillinger",
+    "config-header-sqlite": "SQLite-innstillinger",
+    "config-header-oracle": "Oracle-innstillinger",
+    "config-invalid-db-type": "Ugyldig databasetype",
+    "config-missing-db-name": "Du må skrive inn en verdi for «Databasenavn»",
+    "config-missing-db-host": "Du må skrive inn en verdi for «Databasevert»",
+    "config-missing-db-server-oracle": "Du må skrive inn en verdi for «Database TNS»",
+    "config-invalid-db-server-oracle": "Ugyldig database-TNS «$1».\nBruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9) og undestreker (_) og punktum (.).",
+    "config-invalid-db-name": "Ugyldig databasenavn «$1».\nBruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9), undestreker (_) og bindestreker (-).",
+    "config-invalid-db-prefix": "Ugyldig databaseprefiks «$1».\nBruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9), undestreker (_) og bindestreker (-).",
+    "config-connection-error": "$1.\n\nSjekk verten, brukernavnet og passordet nedenfor og prøv igjen.",
+    "config-invalid-schema": "Ugyldig skjema for MediaWiki «$1».\nBruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9) og undestreker (_).",
+    "config-db-sys-create-oracle": "Installasjonsprogrammet støtter kun bruk av en SYSDBA-konto for opprettelse av en ny konto.",
+    "config-db-sys-user-exists-oracle": "Brukerkontoen «$1» finnes allerede. SYSDBA kan kun brukes for oppretting av nye kontoer!",
+    "config-postgres-old": "PostgreSQL $1 eller senere kreves, du har $2.",
+    "config-sqlite-name-help": "Velg et navn som identifiserer wikien din.\nIkke bruk mellomrom eller bindestreker.\nDette vil bli brukt til SQLite-datafilnavnet.",
+    "config-sqlite-parent-unwritable-group": "Kan ikke opprette datamappen <code><nowiki>$1</nowiki></code> fordi foreldremappen <code><nowiki>$2</nowiki></code> ikke er skrivbar for nettjeneren.\n\nInstallasjonsprogrammet har bestemt brukeren nettjeneren din kjører som.\nGjør <code><nowiki>$3</nowiki></code>-mappen skrivbar for denne for å fortsette.\nPå et Unix/Linux-system, gjør:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Kan ikke opprette datamappen <code><nowiki>$1</nowiki></code> fordi foreldremappen <code><nowiki>$2</nowiki></code> ikke er skrivbar for nettjeneren.\n\nInstallasjonsprogrammet kunne ikke bestemme brukeren nettjeneren din kjører som.\nGjør <code><nowiki>$3</nowiki></code>-mappen globalt skrivbar for denne (og andre!) for å fortsette.\nPå et Unix/Linux-system, gjør:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Feil under oppretting av datamappen «$1».\nSjekk plasseringen og prøv igjen.",
+    "config-sqlite-dir-unwritable": "Kan ikke skrive til mappen «$1».\nEndre dens tilganger slik at nettjeneren kan skrive til den og prøv igjen.",
+    "config-sqlite-connection-error": "$1.\n\nSjekk datamappen og databasenavnet nedenfor og prøv igjen.",
+    "config-sqlite-readonly": "Filen <code>$1</code> er ikke skrivbar.",
+    "config-sqlite-cant-create-db": "Kunne ikke opprette databasefilen <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "PHP mangler FTS3-støtte, nedgraderer tabeller",
+    "config-can-upgrade": "Det er MediaWiki-tabeller i denne databasen.\nFor å oppgradere dem til MediaWiki $1, klikk '''Fortsett'''.",
+    "config-upgrade-done": "Oppgradering fullført.\n\nDu kan nå [$1 begynne å bruke wikien din].\n\nHvis du ønsker å regenerere <code>LocalSettings.php</code>-filen din, klikk på knappen nedenfor.\nDette er '''ikke anbefalt''' med mindre du har problemer med wikien din.",
+    "config-upgrade-done-no-regenerate": "Oppgradering fullført.\n\nDu kan nå [$1 begynne å bruke wikien din].",
+    "config-regenerate": "Regenerer LocalSettings.php →",
+    "config-show-table-status": "<code>SHOW TABLE STATUS</code> etterspørselen mislyktes!",
+    "config-unknown-collation": "'''Advarsel:''' Databasen bruker en ukjent sortering.",
+    "config-db-web-account": "Databasekonto for nettilgang",
+    "config-db-web-help": "Velg brukernavnet og passordet som nettjeneren skal bruke for å koble til databasetjeneren under ordinær drift av wikien.",
+    "config-db-web-account-same": "Bruk samme konto som for installasjonen",
+    "config-db-web-create": "Opprett kontoen om den ikke finnes allerede",
+    "config-db-web-no-create-privs": "Kontoen du oppga for installasjonen har ikke nok privilegier til å opprette en konto.\nKontoen du oppgir her må finnes allerede.",
+    "config-mysql-engine": "Lagringsmotor:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-engine-help": "'''InnoDB''' er nesten alltid det beste alternativet siden den har god støtte for samtidighet («concurrency»).\n\n'''MyISAM''' kan være raskere i enbruker- eller les-bare-installasjoner.\nMyISAM-databaser har en tendens til å bli ødelagt oftere enn InnoDB-databaser.",
+    "config-mysql-charset": "Databasetegnsett:",
+    "config-mysql-binary": "Binær",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "I '''binary mode''' lagrer MediaWiki UTF-8 tekst til databasen i binærfelt.\nDette er mer effektivt enn MySQLs UTF-8 modus og tillater deg å bruke hele spekteret av Unicode-tegn.\n\nI '''UTF-8 mode''' vil MySQL vite hvilket tegnsett dataene dine er i og kan presentere og konvertere det på en riktig måte,\nmen det vil ikke la deg lagre tegn over «[//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes the Basic Multilingual Plane]».",
+    "config-site-name": "Navn på wiki:",
+    "config-site-name-help": "Dette vil vises i tittellinjen i nettleseren og diverse andre steder.",
+    "config-site-name-blank": "Skriv inn et nettstedsnavn.",
+    "config-project-namespace": "Prosjektnavnerom:",
+    "config-ns-generic": "Prosjekt",
+    "config-ns-site-name": "Samme som wikinavnet: $1",
+    "config-ns-other": "Annet (spesifiser)",
+    "config-ns-other-default": "MyWiki",
+    "config-project-namespace-help": "Etter Wikipedias eksempel holder mange wikier deres sider med retningslinjer atskilt fra sine innholdssider, i et «'''prosjektnavnerom'''».\nAlle sidetitler i dette navnerommet starter med et gitt prefiks som du kan angi her.\nTradisjonelt er dette prefikset avledet fra navnet på wikien, men det kan ikke innholde punkttegn som «#» eller «:».",
+    "config-ns-invalid": "Det angitte navnerommet «<nowiki>$1</nowiki>» er ugyldig.\nAngi et annet prosjektnavnerom.",
+    "config-ns-conflict": "Det angitte navnerommet «<nowiki>$1</nowiki>» er i konflikt med et standard MediaWiki-navnerom.\nAngi et annet prosjekt-navnerom.",
+    "config-admin-box": "Administratorkonto",
+    "config-admin-name": "Ditt navn:",
+    "config-admin-password": "Passord:",
+    "config-admin-password-confirm": "Passord igjen:",
+    "config-admin-help": "Skriv inn ditt ønskede brukernavn her, for eksempel «Joe Bloggs».\nDette er navnet du vil bruke for å logge inn på denne wikien.",
+    "config-admin-name-blank": "Skriv inn et administratorbrukernavn.",
+    "config-admin-name-invalid": "Det angitte brukernavnet «<nowiki>$1</nowiki>» er ugyldig.\nAngi et annet brukernavn.",
+    "config-admin-password-blank": "Skriv inn et passord for administratorkontoen.",
+    "config-admin-password-same": "Passordet skal ikke være det samme som brukernavnet.",
+    "config-admin-password-mismatch": "De to passordene du skrev inn samsvarte ikke.",
+    "config-admin-email": "E-postadresse:",
+    "config-admin-email-help": "Skriv inn en e-postadresse her for at du skal kunne motta e-post fra andre brukere på wikien, tilbakestille passordet ditt, og bli varslet om endringer på sider på overvåkningslisten din. Du kan la dette feltet stå tomt.",
+    "config-admin-error-user": "Intern feil ved opprettelse av en admin med navnet «<nowiki>$1</nowiki>».",
+    "config-admin-error-password": "Intern feil ved opprettelse av passord for admin «<nowiki>$1</nowiki>»: <pre>$2</pre>",
+    "config-admin-error-bademail": "Du har skrevet inn en ugyldig e-postadresse.",
+    "config-subscribe": "Abonner på [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce e-postlisten for utgivelsesannonseringer].",
+    "config-subscribe-help": "Dette er en lav-volums e-postliste brukt til utgivelsesannonseringer, herunder viktige sikkerhetsannonseringer.\nDu bør abonnere på den og oppdatere MediaWikiinstallasjonen din når nye versjoner kommer ut.",
+    "config-almost-done": "Du er nesten ferdig!\nDu kan hoppe over de resterende konfigurasjonene og installere wikien nå.",
+    "config-optional-continue": "Spør meg flere spørsmål.",
+    "config-optional-skip": "Jeg er lei, bare installer wikien.",
+    "config-profile": "Brukerrettighetsprofil:",
+    "config-profile-wiki": "Tradisjonell wiki",
+    "config-profile-no-anon": "Kontoopprettelse påkrevd",
+    "config-profile-fishbowl": "Kun autoriserte bidragsytere",
+    "config-profile-private": "Privat wiki",
+    "config-profile-help": "Wikier fungerer best når du lar så mange mennesker som mulig redigere den.\nI MediaWiki er det lett å revidere siste endringer og tilbakestille eventuell skade som er gjort av naive eller ondsinnede brukere.\n\nImidlertid har mange funnet at MediaWiki er nyttig i mange roller, og av og til er det ikke lett å overbevise alle om fordelene med wikimåten.\nSå du har valget.\n\nEn '''{{int:config-profile-wiki}}''' tillater alle å redigere, selv uten å logge inn.\nEn wiki med '''{{int:config-profile-no-anon}}''' tilbyr ekstra ansvarlighet, men kan avskrekke tilfeldige bidragsytere.\n\n'''{{int:config-profile-fishbowl}}'''-scenariet tillater godkjente brukere å redigere, mens publikum kan se sider, og også historikken.\nEn '''{{int:config-profile-private}}''' tillater kun godkjente brukere å se sider, den samme gruppen som får lov til å redigere dem.\n\nMer komplekse konfigurasjoner av brukerrettigheter er tilgjengelig etter installasjon, se det [//www.mediawiki.org/wiki/Manual:User_rights relevante manualavsnittet].",
+    "config-license": "Opphavsrett og lisens:",
+    "config-license-none": "Ingen lisensbunntekst",
+    "config-license-cc-by-sa": "Creative Commons Navngivelse Del på samme vilkår",
+    "config-license-cc-by": "Creative Commons Attribution",
+    "config-license-cc-by-nc-sa": "Creative Commons Navngivelse Ikke-kommersiell Del på samme vilkår",
+    "config-license-cc-0": "Creative Commons Zero",
+    "config-license-pd": "Offentlig rom",
+    "config-license-cc-choose": "Velg en egendefinert Creative Commons-lisens",
+    "config-email-settings": "E-postinnstillinger",
+    "config-enable-email": "Aktiver utgående e-post",
+    "config-enable-email-help": "Hvis du vil at e-post skal virke må [http://www.php.net/manual/en/mail.configuration.php PHPs e-postinnstillinger] bli konfigurert riktig.\nHvis du ikke ønsker noen e-postfunksjoner kan du deaktivere dem her.",
+    "config-email-user": "Aktiver e-post mellom brukere",
+    "config-email-user-help": "Tillat alle brukere å sende hverandre e-post hvis de har aktivert det i deres innstillinger.",
+    "config-email-usertalk": "Aktiver brukerdiskusjonssidevarsler",
+    "config-email-usertalk-help": "Tillat brukere å motta varsler ved endringer på deres brukerdiskusjonsside hvis de har aktivert dette i deres innstillinger.",
+    "config-email-watchlist": "Aktiver overvåkningslistevarsler",
+    "config-email-watchlist-help": "Tillat brukere å motta varsler ved endringer på deres overvåkede sider hvis de har aktivert dette i deres innstillinger.",
+    "config-email-auth": "Aktiver e-postautentisering",
+    "config-email-auth-help": "Om dette alternativet er aktivert må brukere bekrefte sin e-postadresse ved å bruke en lenke som blir sendt til dem når de setter eller endrer adressen sin.\nKun autentiserte e-postadresser kan motta e-post fra andre brukere eller endringsvarsel.\nÅ sette dette valget er '''anbefalt''' for offentlige wikier på grunn av potensiell misbruk av e-postfunksjonene.",
+    "config-email-sender": "Svar-e-postadresse:",
+    "config-email-sender-help": "Skriv inn e-postadressen som skal brukes som svar-adresse ved utgående e-post.\nDet er hit returmeldinger vil bli sendt.\nMange e-posttjenere krever at minst domenenavnet må være gyldig.",
+    "config-upload-settings": "Bilde- og filopplastinger",
+    "config-upload-enable": "Aktiver filopplastinger",
+    "config-upload-help": "Filopplastinger kan potensielt utsette tjeneren din for sikkerhetsrisikoer.\nFor mer informasjon, les [//www.mediawiki.org/wiki/Manual:Security sikkerhetsseksjonen] i manualen.\n\nFor å aktivere filopplastinger, endre modusen i <code>images</code>-undermappen i MediaWikis rotmappe slik at nettjeneren kan skrive til den.\nAktiver så dette alternativet.",
+    "config-upload-deleted": "Mappe for slettede filer:",
+    "config-upload-deleted-help": "Velg en mappe for å arkivere slettede filer.\nIdeelt burde ikke denne være tilgjengelig for nettet.",
+    "config-logo": "Logo-URL:",
+    "config-logo-help": "MediaWikis standarddrakt inkluderer plass til en 135x160 pikslers logo i øvre venstre hjørne.\nLast opp et bilde i passende størrelse og skriv inn nettadressen her.\n\nHvis du ikke ønsker en logo, la denne boksen være tom.",
+    "config-instantcommons": "Aktiver Instant Commons",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] er en funksjon som gjør det mulig for wikier å bruke bilder, lyder og andre media funnet på nettstedet [//commons.wikimedia.org/ Wikimedia Commons].\nFor å gjøre dette krever MediaWiki tilgang til internett.\n\nFor mer informasjon om denne funksjonen, inklusive instruksjoner om hvordan man setter opp dette for andre wikier enn Wikimedia Commons, konsulter [//mediawiki.org/wiki/Manual:$wgForeignFileRepos manualen].",
+    "config-cc-again": "Velg igjen...",
+    "config-cc-not-chosen": "Velg hvilken Creative Commons-lisens du ønsker og klikk «fortsett».",
+    "config-advanced-settings": "Avansert konfigurasjon",
+    "config-extensions": "Utvidelser",
+    "config-install-step-done": "ferdig",
+    "config-install-step-failed": "mislyktes",
+    "config-install-extensions": "Inkludert utvidelser",
+    "config-install-database": "Setter opp database",
+    "config-install-user": "Oppretter databasebruker",
+    "config-install-user-alreadyexists": "Brukeren «$1» finnes allerede",
+    "config-install-user-create-failed": "Opprettelse av brukeren «$1» mislyktes: $2",
+    "config-install-user-grant-failed": "Å gi tillatelse til brukeren «$1» mislyktes: $2",
+    "config-install-tables": "Oppretter tabeller",
+    "config-install-mainpage-failed": "Kunne ikke sette inn hovedside: $1",
+    "config-download-localsettings": "Last ned <code>LocalSettings.php</code>",
+    "config-help": "hjelp",
+    "config-nofile": "Filen \"$1\" ble ikke funnet. Kan den være blitt slettet?",
+    "mainpagetext": "'''MediaWiki-programvaren er nå installert.'''",
+    "mainpagedocfooter": "Se [//meta.wikimedia.org/wiki/Help:Contents brukerveiledningen] for informasjon om hvordan du bruker wiki-programvaren.\n\n==Å starte==\n*[//www.mediawiki.org/wiki/Manual:Configuration_settings Oppsettsliste]\n*[//www.mediawiki.org/wiki/Manual:FAQ Ofte stilte spørsmål]\n*[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-postliste]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/nds-nl.json b/includes/installer/i18n/nds-nl.json
new file mode 100644 (file)
index 0000000..8970d66
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Servien"
+        ]
+    },
+    "mainpagetext": "'''’t Installeren van de MediaWiki programmatuur is succesvol.'''",
+    "mainpagedocfooter": "Bekiek de [//meta.wikimedia.org/wiki/Help:Contents haandleiding] veur informasie over t gebruuk van de wikiprogrammatuur.\n\n== Meer hulpe ==\n* [//www.mediawiki.org/wiki/Help:Configuration_settings Lieste mit instellingen]\n* [//www.mediawiki.org/wiki/Help:FAQ MediaWiki-vragen die vake esteld wörden]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-postlieste veur nieje versies]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Maak MediaWiki beschikbaor in joew taal]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/nds.json b/includes/installer/i18n/nds.json
new file mode 100644 (file)
index 0000000..e6878e6
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "Joachim Mos"
+        ]
+    },
+    "config-page-name": "Naam",
+    "config-ns-generic": "Projekt",
+    "config-admin-name": "Dien Naam:",
+    "config-admin-password": "Passwoord:",
+    "config-help": "Hülp",
+    "mainpagetext": "'''De MediaWiki-Software is mit Spood installeert worrn.'''",
+    "mainpagedocfooter": "Kiek de [//meta.wikimedia.org/wiki/MediaWiki_localisation Dokumentatschoon för dat Anpassen vun de Brukerböversiet]\nun dat [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Brukerhandbook] för Hülp to de Bruuk un Konfiguratschoon."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ne.json b/includes/installer/i18n/ne.json
new file mode 100644 (file)
index 0000000..dfeb32c
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Bhawani Gautam",
+            "RajeshPandey"
+        ]
+    },
+    "mainpagetext": "'''मीडिया सफलतापूर्वक कम्प्यूटरमा स्थापित भयो ।'''",
+    "mainpagedocfooter": " विकी अनुप्रयोग कसरी प्रयोग गर्ने भन्ने जानकारीको लागि  [//meta.wikimedia.org/wiki/Help:Contents प्रयोगकर्ता सहायता] हेर्नुहोस्\n\n== सुरू गर्नको लागि  ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings विन्यास सेटिङ्ग सूची]\n* [//www.mediawiki.org/wiki/Manual:FAQ मेडियाविकि सामान्य प्रश्नका उत्तरहरु]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce मेडियाविकि सुचना मेलिङ्ग सूची]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/nl-informal.json b/includes/installer/i18n/nl-informal.json
new file mode 100644 (file)
index 0000000..0a5096c
--- /dev/null
@@ -0,0 +1,79 @@
+{
+    "@metadata": {
+        "authors": [
+            "Siebrand"
+        ]
+    },
+    "config-localsettings-badkey": "De sleutel die je hebt opgegeven is onjuist",
+    "config-upgrade-key-missing": "Er is een bestaande installatie van MediaWiki aangetroffen.\nPlaats de volgende regel onderaan je <code>LocalSettings.php</code> om deze installatie bij te werken:\n\n$1",
+    "config-session-expired": "Je sessiegegevens zijn verlopen.\nSessies zijn ingesteld om een levensduur van $1 te hebben.\nJe kunt deze wijzigen via de instelling <code>session.gc_maxlifetime</code> in php.ini.\nBegin het installatieproces opnieuw.",
+    "config-no-session": "Je sessiegegevens zijn verloren gegaan.\nControleer je php.ini en zorg dat er een juiste map is ingesteld voor <code>session.save_path</code>.",
+    "config-your-language": "Jouw taal:",
+    "config-help-restart": "Wil je alle opgeslagen gegevens die je hebt ingevoerd wissen en het installatieproces opnieuw starten?",
+    "config-welcome": "=== Controle omgeving ===\nEr worden een aantal basiscontroles uitgevoerd met als doel vast te stellen of deze omgeving geschikt is voor een installatie van MediaWiki.\nAls je hulp nodig hebt bij de installatie, lever deze gegevens dan ook aan.",
+    "config-copyright": "=== Auteursrechten en voorwaarden ===\n\n$1\n\nDit programma is vrije software. Je mag het verder verspreiden en/of aanpassen in overeenstemming met de voorwaarden van de GNU General Public License zoals uitgegeven door de Free Software Foundation; ofwel versie 2 van de Licentie of - naar eigen keuze - enige latere versie.\n\nDit programma wordt verspreid in de hoop dat het nuttig is, maar '''zonder enige garantie''', zelfs zonder de impliciete garantie van '''verkoopbaarheid''' of '''geschiktheid voor een bepaald doel'''.\nZie de GNU General Public License voor meer informatie.\n\nSamen met dit programma hoor je een <doclink href=Copying>exemplaar van de GNU General Public License</doclink> ontvangen te hebben; zo niet, schrijf dan aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Verenigde Staten. Of [http://www.gnu.org/copyleft/gpl.html lees de licentie online].",
+    "config-env-good": "De omgeving is gecontroleerd.\nJe kunt MediaWiki installeren.",
+    "config-env-bad": "De omgeving is gecontroleerd.\nJe kunt MediaWiki niet installeren.",
+    "config-unicode-pure-php-warning": "'''Waarschuwing''': de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.\nAls je MediaWiki voor een website met veel verkeer installeert, lees je dan in over [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicodenormalisatie].",
+    "config-unicode-update-warning": "'''Waarschuwing''': de geïnstalleerde versie van de Unicodenormalisatiewrapper maakt gebruik van een oudere versie van [http://site.icu-project.org/ de bibliotheek van het ICU-project].\nJe moet [//www.mediawiki.org/wiki/Unicode_normalization_considerations bijwerken] als Unicode voor jou van belang is.",
+    "config-no-db": "Het was niet mogelijk een geschikte databasedriver te vinden voor PHP.\nJe moet een databasedriver installeren voor PHP.\nDe volgende databases worden ondersteund: $1.\n\nAls je op een gedeelde omgeving zit, vraag dan aan je hostingprovider een geschikte databasedriver te installeren.\nAls je PHP zelf hebt gecompileerd, wijzig dan je instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysql</code>.\nAls je PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook de module php5-mysql.",
+    "config-outdated-sqlite": "''' Waarschuwing:''' je gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.",
+    "config-register-globals": "'''Waarschuwing: de PHP-optie <code>[http://php.net/register_globals register_globals]</code> is ingeschakeld.'''\n'''Schakel deze uit als dat mogelijk is.'''\nMediaWiki kan ermee werken, maar je server is dan meer kwetsbaar voor beveiligingslekken.",
+    "config-magic-quotes-runtime": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is actief!'''\nDeze instelling zorgt voor gegevenscorruptie.\nJe kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
+    "config-magic-quotes-sybase": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] is actief!'''\nDeze instelling zorgt voor gegevenscorruptie.\nJe kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
+    "config-mbstring": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!'''\nDeze instelling zorgt voor gegevenscorruptie.\nJe kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
+    "config-ze1": "'''Onherstelbare fout: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] is actief!'''\nDeze instelling zorgt voor grote problemen in MediaWiki.\nJe kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
+    "config-xml-bad": "De XML-module van PHP ontbreekt.\nMediaWiki heeft de functies van deze module nodig en werkt niet zonder deze module.\nAls je gebruik maakt van Mandrake, installeer dan het package php-xml.",
+    "config-mod-security": "'''Waarschuwing:''' je webserver heeft de module [http://modsecurity.org/ mod_security] ingeschakeld. Als deze onjuist is ingesteld, kan dit problemen geven in combinatie met MediaWiki of andere software die gebruikers in staat stelt willekeurige inhoud te posten.\nLees de [http://modsecurity.org/documentation/ documentatie over mod_security] of neem contact op met de helpdesk van je provider als je tegen problemen aanloopt.",
+    "config-imagemagick": "ImageMagick aangetroffen: <code>$1</code>.\nHet aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als je uploaden inschakelt.",
+    "config-gd": "Ingebouwde GD grafische bibliotheek aangetroffen.\nHet aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als je uploaden inschakelt.",
+    "config-uploads-not-safe": "'''Waarschuwing:''' je uploadmap <code>$1</code> kan gebruikt worden voor het arbitrair uitvoeren van scripts.\nHoewel MediaWiki alle toegevoegde bestanden controleert op bedreigingen, is het zeer aan te bevelen het [//www.mediawiki.org/wiki/Manual:Security#Upload_security beveiligingslek te verhelpen] alvorens uploads in te schakelen.",
+    "config-no-cli-uploads-check": "''Waarschuwing:'' je standaardmap voor uploads (<code>$1</code>) wordt niet gecontroleerd op kwetsbaarheden voor het uitvoeren van willekeurige scripts gedurende de CLI-installatie.",
+    "config-brokenlibxml": "Je systeem heeft een combinatie van PHP- en libxml2-versies geïnstalleerd die is foutgevoelig is en kan leiden tot onzichtbare beschadiging van gegevens in MediaWiki en andere webapplicaties.\nUpgrade naar PHP 5.2.9 of hoger en libxml2 2.7.3 of hoger([//bugs.php.net/bug.php?id=45996 bij PHP gerapporteerde fout]).\nDe installatie wordt afgebroken.",
+    "config-db-host-help": "Als je databaseserver een andere server is, voer dan de hostnaam of het IP-adres hier in.\n\nAls je gebruik maakt van gedeelde webhosting, hoort je provider je de juiste hostnaam te hebben verstrekt.\n\nAls je MediaWiki op een Windowsserver installeert en MySQL gebruikt, dan werkt \"localhost\" mogelijk niet als servernaam.\nAls het inderdaad niet werkt, probeer dan \"127.0.0.1\" te gebruiken als lokaal IP-adres.\n\nAls je PostgreSQL gebruikt, laat dit veld dan leeg om via een Unix-socket te verbinden.",
+    "config-db-host-oracle-help": "Voer een geldige [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] in; een tnsnames.ora-bestand moet zichtbaar zijn voor deze installatie.<br />Als je gebruik maakt van clientlibraries 10g of een latere versie, kan je ook gebruik maken van de naamgevingsmethode [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+    "config-db-name-help": "Kies een naam die je wiki identificeert.\nEr mogen geen spaties gebruikt worden.\nAls je gebruik maakt van gedeelde webhosting, dan hoort je provider ofwel jou een te gebruiken databasenaam gegeven te hebben, of je aangegeven te hebben hoe je databases kunt aanmaken.",
+    "config-db-account-oracle-warn": "Er zijn drie ondersteunde scenario's voor het installeren van Oracle als databasebackend:\n\nAls je een databasegebruiker wilt aanmaken als onderdeel van het installatieproces, geef dan de gegevens op van een databasegebruiker in met de rol SYSDBA voor de installatie en voer de gewenste aanmeldgegevens in voor de gebruiker met webtoegang. Je kunt ook de gebruiker met webtoegang handmatig aanmaken en alleen van die gebruiker de aanmeldgegevens opgeven als deze de vereiste rechten heeft om schemaobjecten aan te maken. Als laatste is het mogelijk om aanmeldgegevens van twee verschillende gebruikers op te geven; een met de rechten om schemaobjecten aan te maken, en een met alleen webtoegang.\n\nEen script voor het aanmaken van een gebruiker met de vereiste rechten is te vinden in de map \"maintenance/oracle/\" van deze installatie. Onthoud dat het gebruiken van een gebruiker met beperkte rechten alle mogelijkheden om beheerscripts uit te voeren met de standaard gebruiker onmogelijk maakt.",
+    "config-db-prefix-help": "Als je een database moet gebruiken voor meerdere wiki's, of voor MediaWiki en een andere applicatie, dan kan je ervoor kiezen om een voorvoegsel toe te voegen aan de tabelnamen om conflicten te voorkomen.\nGebruik geen spaties.\n\nDit veld wordt meestal leeg gelaten.",
+    "config-charset-help": "'''Waarschuwing:''' als je '''achterwaarts compatibel met UTF-8''' gebruikt met MySQL 4.1+ en een back-up van de database maakt met <code>mysqldump</code>, dan kunnen alle niet-ASCII-tekens in je back-ups onherstelbaar beschadigd raken.\n\nIn '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.\nDit is efficiënter dan de UTF-8-modus van MySQL en stelt je in staat de volledige reeks Unicode-tekens te gebruiken.\nIn '''UTF-8-modus''' kent MySQL de tekenset van je gegevens en kan de databaseserver ze juist weergeven en converteren.\nHet is dan niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
+    "config-mysql-old": "Je moet MySQL $1 of later gebruiken.\nJij gebruikt $2.",
+    "config-db-schema-help": "Dit schema klopt meestal.\nWijzig het alleen als je weet dat dit nodig is.",
+    "config-sqlite-dir-help": "SQLite slaat alle gegevens op in een enkel bestand.\n\nDe map die je opgeeft moet beschrijfbaar zijn voor de webserver tijdens de installatie.\n\nDeze mag '''niet toegankelijk''' zijn via het web en het bestand mag dus niet tussen de PHP-bestanden staan.\n\nHet installatieprogramma schrijft het bestand <code>.htaccess</code> weg met het databasebestand, maar als dat niet werkt kan iemand zich toegang tot het ruwe databasebestand verschaffen.\nOok de gebruikersgegevens (e-mailadressen, wachtwoordhashes) en verwijderde versies en overige gegevens met beperkte toegang via MediaWiki zijn dan onbeschermd.\n\nOverweeg om de database op een totaal andere plaats neer te zetten, bijvoorbeeld in <code>/var/lib/mediawiki/yourwiki</code>.",
+    "config-support-info": "MediaWiki ondersteunt de volgende databasesystemen:\n\n$1\n\nAls je het databasesysteem dat je wilt gebruiken niet in de lijst terugvindt, volg dan de handleiding waarnaar hierboven wordt verwezen om ondersteuning toe te voegen.",
+    "config-missing-db-name": "Je moet een waarde opgeven voor \"Databasenaam\"",
+    "config-missing-db-host": "Je moet een waarde invoeren voor \"Databaseserver\"",
+    "config-missing-db-server-oracle": "Je moet een waarde opgeven voor \"Database-TNS\"",
+    "config-postgres-old": "PostgreSQL $1 of hoger is vereist.\nJij gebruikt $2.",
+    "config-sqlite-name-help": "Kies een naam die je wiki identificeert.\nGebruik geen spaties of koppeltekens.\nDeze naam wordt gebruikt voor het gegevensbestand van SQLite.",
+    "config-upgrade-done": "Het bijwerken is afgerond.\n\nJe kunt [$1 je wiki nu gebruiken].\n\nAls je je <code>LocalSettings.php</code> opnieuw wilt aanmaken, klik dan op de knop hieronder.\nDit is '''niet aan te raden''' tenzij je problemen hebt met je wiki.",
+    "config-upgrade-done-no-regenerate": "Het bijwerken is afgerond.\n\nJe kunt nu [$1 je wiki gebruiken].",
+    "config-db-web-no-create-privs": "De gebruiker die je hebt opgegeven voor de installatie heeft niet voldoende rechten om een gebruiker aan te maken.\nDe gebruiker die je hier opgeeft moet al bestaan.",
+    "config-mysql-myisam-dep": "'''Waarschuwing''': je hebt MyISAM geselecteerd als opslagengine voor MySQL. Dit is niet aan te raden voor MediaWiki omdat:\n* het nauwelijks ondersteuning biedt voor gebruik door meerdere gebruikers tegelijkertijd door het locken van tabellen;\n* het meer vatbaar is voor corruptie dan andere engines;\n* de code van MediaWiki niet alstijd omgaat met MyISAM zoals dat zou moeten.\n\nAls je installatie van MySQL InnoDB ondersteunt, gebruik dat dan vooral.\nAls je installatie van MySQL geen ondersteuning heeft voor InnoDB, denk dan na over upgraden.",
+    "config-mysql-charset-help": "In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.\nDit is efficiënter dan de UTF-8-modus van MySQL en stelt je in staat de volledige reeks Unicodetekens te gebruiken.\n\nIn '''UTF-8-modus''' kent MySQL de tekenset van je gegevens en kan de databaseserver ze juist weergeven en converteren.\nHet is dat niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
+    "config-project-namespace-help": "In het kielzog van Wikipedia beheren veel wiki's hun beleidspagina's apart van hun inhoudelijke pagina's in een \"'''projectnaamruimte'''\".\nAlle paginanamen in deze naamruimte beginnen met een bepaald voorvoegsel dat je hier kunt opgeven.\nDit voorvoegsel wordt meestal afgeleid van de naam van de wiki, maar het kan geen bijzondere tekens bevatten als \"#\" of \":\".",
+    "config-admin-name": "Je naam:",
+    "config-admin-password-mismatch": "De twee door jou ingevoerde wachtwoorden komen niet overeen.",
+    "config-admin-email-help": "Voer hier een e-mailadres in om e-mail te kunnen ontvangen van andere gebruikers op de wiki, je wachtwoord opnieuw in te kunnen stellen en op de hoogte te worden gehouden van wijzigingen van pagina's op uw volglijst. Je kunt het veld leeg laten.",
+    "config-admin-error-bademail": "Je hebt een ongeldig e-mailadres opgegeven",
+    "config-subscribe-help": "Dit is een mailinglijst met een laag volume voor aankondigingen van nieuwe versies, inclusief belangrijke aankondigingen met betrekking tot beveiliging.\nAbonneer jezelf erop en werk je MediaWiki-installatie bij als er nieuwe versies uitkomen.",
+    "config-subscribe-noemail": "Je hebt geprobeerd je te abonneren op de mailinglijst voor release-aankondigingen zonder een e-mailadres op te geven.\nGeef een e-mailadres op als je je wilt abonneren op de mailinglijst.",
+    "config-almost-done": "Je bent bijna klaar!\nAls je wilt kan je de overige instellingen overslaan en de wiki nu installeren.",
+    "config-profile-help": "Wiki's werken het beste als ze door zoveel mogelijk gebruikers worden bewerkt.\nIn MediaWiki is het eenvoudig om de recente wijzigingen te controleren en eventuele foutieve of kwaadwillende bewerkingen terug te draaien.\n\nDaarnaast vinden velen MediaWiki goed inzetbaar in vele andere rollen, en soms is het niet handig om helemaal \"op de wikimanier\" te werken.\nDaarom biedt dit installatieprogramma je de volgende keuzes voor de basisinstelling van gebruikersvrijheden:\n\nEen '''{{int:config-profile-wiki}}''' staat iedereen toe te bewerken, zonder zelfs aan te melden.\nEen wiki met '''{{int:config-profile-no-anon}}\" biedt extra verantwoordelijkheid, maar kan afschrikken toevallige gebruikers afschrikken.\n\nHet scenario '''{{int:config-profile-fishbowl}}''' laat gebruikers waarvoor dat is ingesteld bewerkt, maar andere gebruikers kunnen alleen pagina's bekijken, inclusief de bewerkingsgeschiedenis.\nIn een '''{{int:config-profile-private}}''' kunnen alleen goedgekeurde gebruikers pagina's bekijken en bewerken.\n\nMeer 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].",
+    "config-license-help": "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [http://freedomdefined.org/Definition vrije licentie].\nDit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.\nDit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.\n\nAls je teksten uit Wikipedia wilt kunnen gebruiken en je wilt het mogelijk maken teksten uit je wiki naar Wikipedia te kopiëren, kies dan de licentie '''Creative Commons Naamsvermelding-Gelijk delen'''.\n\nDe GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.\nDit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.\nHet is ook lastig inhoud te hergebruiken onder de GFDL.",
+    "config-enable-email-help": "Als je wilt dat e-mailen mogelijk is, dan moeten de [http://www.php.net/manual/en/mail.configuration.php e-mailinstellingen van PHP] correct zijn.\nAls je niet wilt dat e-mailen mogelijk is, dan kan je de instellingen hier uitschakelen.",
+    "config-upload-help": "Het toestaan van het uploaden van bestanden stelt je server mogelijk bloot aan beveiligingsrisico's.\nEr is meer [//www.mediawiki.org/wiki/Manual:Security informatie over beveiliging] beschikbaar in de handleiding.\n\nOm het bestandsuploads mogelijk te maken kan je de rechten op de submap <code>images</code> onder de hoofdmap van MediaWiki aanpassen, zodat de webserver erin kan schrijven.\nDaarmee wordt deze functie ingeschakeld.",
+    "config-logo-help": "Het standaarduiterlijk van MediaWiki bevat ruimte voor een logo van 135x160 pixels boven het menu.\nUpload een afbeelding met de juiste afmetingen en voer de URL hier in.\n\nAls je geen logo wilt gebruiken, kan je dit veld leeg laten.",
+    "config-cc-not-chosen": "Kies de Creative Commonslicentie die je wilt gebruiken en klik op \"doorgaan\".",
+    "config-memcache-needservers": "Je hebt Memcached geselecteerd als je cache, maar je hebt geen servers opgegeven.",
+    "config-memcache-badip": "Je hebt een ongeldig IP-adres ingevoerd voor Memcached: $1.",
+    "config-memcache-noport": "Je hebt geen poort opgegeven voor de Memcachedserver: $1.\nDe standaardpoort is 11211.",
+    "config-extensions-help": "De bovenstaande uitbreidingen zijn aangetroffen in de map <code>./extensions</code>.\n\nMogelijk moet je aanvullende instellingen maken, maar je kunt deze uitbreidingen nu inschakelen.",
+    "config-install-alreadydone": "'''Waarschuwing:''' het lijkt alsof je MediaWiki al hebt geïnstalleerd en probeert het programma opnieuw te installeren.\nGa door naar de volgende pagina.",
+    "config-install-begin": "Als je nu op \"{{int:config-continue}}\" klikt, begint de installatie van MediaWiki.\nAls je nog wijzigingen wilt maken, klik dan op \"Terug\".",
+    "config-pg-no-plpgsql": "Je moet de taal PL/pgSQL installeren in de database $1",
+    "config-pg-no-create-privs": "De gebruiker die je hebt opgegeven door de installatie heeft niet voldoende rechten om een gebruiker aan te maken.",
+    "config-pg-not-in-role": "De gebruiker die je hebt opgegeven voor de webgebruiker bestaat al.\nDe gebruiker die je hebt opgegeven voor installatie is geen superuser en geen lid van de rol van de webgebruiker, en kan het dus geen objecten aanmaken die van de webgebruiker zijn.\n\nMediaWiki vereist momenteel dat de tabellen van de webgebruiker zijn. Geef een andere webgebruikersnaam op, of klik op \"terug\" en geef een gebruiker op die voldoende installatierechten heeft.",
+    "config-install-user-missing-create": "De opgegeven gebruiker \"$1\" bestaat niet.\nKlik op \"registreren\" onderaan als je de gebruiker wilt aanmaken.",
+    "config-install-done": "'''Gefeliciteerd!'''\nJe hebt MediaWiki met geïnstalleerd.\n\nHet installatieprogramma heeft het bestand <code>LocalSettings.php</code> aangemaakt.\nDit bevat al je instellingen.\n\nJe moet het bestand downloaden en in de hoofdmap van uw wikiinstallatie plaatsten; in dezelfde map als index.php.\nDe download moet je automatisch zijn aangeboden.\n\nAls de download niet is aangeboden of als je de download hebt geannuleerd, dan kan je de download opnieuw starten door op de onderstaande koppeling te klikken:\n\n$3\n\n'''Let op''': als je dit niet nu doet, dan het is bestand als u later de installatieprocedure afsluit zonder het bestand te downloaden niet meer beschikbaar.\n\nNa het plaatsen van het bestand met instellingen kan je '''[$2 je wiki betreden]'''.",
+    "mainpagedocfooter": "Raadpleeg de [//meta.wikimedia.org/wiki/NL_Help:Inhoudsopgave handleiding] voor informatie over het gebruik van de wikisoftware.\n\n== Meer hulp over MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lijst met instellingen]\n* [//www.mediawiki.org/wiki/Manual:FAQ Veelgestelde vragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Maak MediaWiki beschikbaar in jouw taal]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/nl.json b/includes/installer/i18n/nl.json
new file mode 100644 (file)
index 0000000..3f8367a
--- /dev/null
@@ -0,0 +1,315 @@
+{
+    "@metadata": {
+        "authors": [
+            "Catrope",
+            "McDutchie",
+            "Purodha",
+            "SPQRobin",
+            "Siebrand",
+            "Tjcool007",
+            "아라"
+        ]
+    },
+    "config-desc": "Het installatieprogramma voor MediaWiki",
+    "config-title": "Installatie MediaWiki $1",
+    "config-information": "Gegevens",
+    "config-localsettings-upgrade": "Er is een bestaand instellingenbestand <code>LocalSettings.php</code> gevonden.\nVoer de waarde van <code>$wgUpgradeKey</code> in in onderstaande invoerveld om deze installatie bij te werken.\nDe instelling is terug te vinden in <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Het bestand <code>LocalSettings.php</code> is al aanwezig.\nVoer <code>update.php</code> uit om deze installatie bij te werken.",
+    "config-localsettings-key": "Upgradesleutel:",
+    "config-localsettings-badkey": "De sleutel die u hebt opgegeven is onjuist",
+    "config-upgrade-key-missing": "Er is een bestaande installatie van MediaWiki aangetroffen.\nPlaats de volgende regel onderaan uw <code>LocalSettings.php</code> om deze installatie bij te werken:\n\n$1",
+    "config-localsettings-incomplete": "De bestaande inhoud van <code>LocalSettings.php</code> lijkt incompleet.\nDe variabele $1 is niet ingesteld.\nWijzig <code>LocalSettings.php</code> zodat deze variabele is ingesteld en klik op \"{{int:Config-continue}}\".",
+    "config-localsettings-connection-error": "Er is een fout opgetreden tijdens het verbinden van de database met de instellingen uit <code>LocalSettings.php</code> of <code>AdminSettings.php</code>. Los het probleem met de instellingen op en probeer het daarna opnieuw.\n\n$1",
+    "config-session-error": "Fout bij het begin van de sessie: $1",
+    "config-session-expired": "Uw sessiegegevens zijn verlopen.\nSessies zijn ingesteld om een levensduur van $1 te hebben.\nU kunt deze wijzigen via de instelling <code>session.gc_maxlifetime</code> in php.ini.\nBegin het installatieproces opnieuw.",
+    "config-no-session": "Uw sessiegegevens zijn verloren gegaan.\nControleer uw php.ini en zorg dat er een juiste map is ingesteld voor <code>session.save_path</code>.",
+    "config-your-language": "Uw taal:",
+    "config-your-language-help": "Selecteer een taal om tijdens het installatieproces te gebruiken.",
+    "config-wiki-language": "Wikitaal:",
+    "config-wiki-language-help": "Selecteer de taal waar de wiki voornamelijk in wordt geschreven.",
+    "config-back": "← Terug",
+    "config-continue": "Doorgaan →",
+    "config-page-language": "Taal",
+    "config-page-welcome": "Welkom bij MediaWiki!",
+    "config-page-dbconnect": "Verbinding maken met database",
+    "config-page-upgrade": "Bestaande installatie bijwerken",
+    "config-page-dbsettings": "Databaseinstellingen",
+    "config-page-name": "Naam",
+    "config-page-options": "Opties",
+    "config-page-install": "Installeren",
+    "config-page-complete": "Voltooid!",
+    "config-page-restart": "Installatie herstarten",
+    "config-page-readme": "Lees mij",
+    "config-page-releasenotes": "Release notes",
+    "config-page-copying": "Kopiëren",
+    "config-page-upgradedoc": "Bijwerken",
+    "config-page-existingwiki": "Bestaande wiki",
+    "config-help-restart": "Wilt u alle opgeslagen gegevens die u hebt ingevoerd wissen en het installatieproces opnieuw starten?",
+    "config-restart": "Ja, opnieuw starten",
+    "config-welcome": "=== Controle omgeving ===\nEr worden een aantal basiscontroles uitgevoerd met als doel vast te stellen of deze omgeving geschikt is voor een installatie van MediaWiki.\nAls u hulp nodig hebt bij de installatie, lever deze gegevens dan ook aan.",
+    "config-copyright": "=== Auteursrechten en voorwaarden ===\n\n$1\n\nDit programma is vrije software. U mag het verder verspreiden en/of aanpassen in overeenstemming met de voorwaarden van de GNU General Public License zoals uitgegeven door de Free Software Foundation; ofwel versie 2 van de Licentie of - naar uw keuze - enige latere versie.\n\nDit programma wordt verspreid in de hoop dat het nuttig is, maar '''zonder enige garantie''', zelfs zonder de impliciete garantie van '''verkoopbaarheid''' of '''geschiktheid voor een bepaald doel'''.\nZie de GNU General Public License voor meer informatie.\n\nSamen met dit programma hoort u een <doclink href=Copying>exemplaar van de GNU General Public License</doclink> ontvangen te hebben; zo niet, schrijf dan aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Verenigde Staten. Of [http://www.gnu.org/copyleft/gpl.html lees de licentie online].",
+    "config-sidebar": "* [//www.mediawiki.org MediaWiki thuispagina]\n* [//www.mediawiki.org/wiki/Help:Contents Gebruikershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Manual:Contents Beheerdershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Manual:FAQ Veel gestelde vragen] (Engelstalig)\n----\n* <doclink href=Readme>Leesmij</doclink> (Engelstalig)\n* <doclink href=ReleaseNotes>Release notes</doclink> (Engelstalig)\n* <doclink href=Copying>Kopiëren</doclink> (Engelstalig)\n* <doclink href=UpgradeDoc>Versie bijwerken</doclink> (Engelstalig)",
+    "config-env-good": "De omgeving is gecontroleerd.\nU kunt MediaWiki installeren.",
+    "config-env-bad": "De omgeving is gecontroleerd.\nU kunt MediaWiki niet installeren.",
+    "config-env-php": "PHP $1 is op dit moment geïnstalleerd.",
+    "config-env-php-toolow": "PHP $1 is geïnstalleerd.\nMediaWiki heeft PHP $2 of hoger nodig om correct te kunnen werken.",
+    "config-unicode-using-utf8": "Voor Unicode-normalisatie wordt utf8_normalize.so van Brion Vibber gebruikt.",
+    "config-unicode-using-intl": "Voor Unicode-normalisatie wordt de [http://pecl.php.net/intl PECL-extensie intl] gebruikt.",
+    "config-unicode-pure-php-warning": "'''Waarschuwing''': de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.\nAls u MediaWiki voor een website met veel verkeer installeert, lees u dan in over [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicodenormalisatie].",
+    "config-unicode-update-warning": "'''Waarschuwing''': de geïnstalleerde versie van de Unicodenormalisatiewrapper maakt gebruik van een oudere versie van [http://site.icu-project.org/ de bibliotheek van het ICU-project].\nU moet [//www.mediawiki.org/wiki/Unicode_normalization_considerations bijwerken] als Unicode voor u van belang is.",
+    "config-no-db": "Het was niet mogelijk een geschikte databasedriver te vinden voor PHP.\nU moet een databasedriver installeren voor PHP.\nDe volgende databases worden ondersteund: $1.\n\nAls u op een gedeelde omgeving zit, vraag dan aan uw hostingprovider een geschikte databasedriver te installeren.\nAls u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysql</code>.\nAls u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook de module php5-mysql.",
+    "config-outdated-sqlite": "''' Waarschuwing:''' u gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.",
+    "config-no-fts3": "'''Waarschuwing''': SQLite is gecompileerd zonder de module [//sqlite.org/fts3.html FTS3]; er zijn geen zoekfuncties niet beschikbaar.",
+    "config-register-globals": "'''Waarschuwing: de PHP-optie <code>[http://php.net/register_globals register_globals]</code> is ingeschakeld.'''\n'''Schakel deze uit als dat mogelijk is.'''\nMediaWiki kan ermee werken, maar uw server is dan meer kwetsbaar voor beveiligingslekken.",
+    "config-magic-quotes-runtime": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is actief!'''\nDeze instelling zorgt voor gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
+    "config-magic-quotes-sybase": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] is actief!'''\nDeze instelling zorgt voor gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
+    "config-mbstring": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!'''\nDeze instelling zorgt voor gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
+    "config-ze1": "'''Onherstelbare fout: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] is actief!'''\nDeze instelling zorgt voor grote problemen in MediaWiki.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
+    "config-safe-mode": "'''Waarschuwing:'''\n'''PHP's [http://www.php.net/features.safe-mode veilige modus] is actief.'''\nDit kan problemen veroorzaken, vooral bij het uploaden van bestanden en ondersteuning van <code>math</code>.",
+    "config-xml-bad": "De XML-module van PHP ontbreekt.\nMediaWiki heeft de functies van deze module nodig en werkt niet zonder deze module.\nAls u gebruik maakt van Mandrake, installeer dan het package php-xml.",
+    "config-pcre": "De ondersteuningsmodule PCRE lijkt te missen.\nMediaWiki vereist dat de met Perl compatibele reguliere expressies werken.",
+    "config-pcre-no-utf8": "'''Fataal:''' de module PRCE van PHP lijkt te zijn gecompileerd zonder ondersteuning voor PCRE_UTF8.\nMediaWiki heeft ondersteuning voor UTF-8 nodig om correct te kunnen werken.",
+    "config-memory-raised": "PHP's <code>memory_limit</code> is $1 en is verhoogd tot $2.",
+    "config-memory-bad": "'''Waarschuwing:''' PHP's <code>memory_limit</code> is $1.\nDit is waarschijnlijk te laag.\nDe installatie kan mislukken!",
+    "config-ctype": "'''Fataal:''' PHP moet gecompileerd zijn met ondersteuning voor de [http://www.php.net/manual/en/ctype.installation.php extensie Ctype].",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] is op dit moment geïnstalleerd",
+    "config-apc": "[http://www.php.net/apc APC] is op dit moment geïnstalleerd",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] is op dit moment geïnstalleerd",
+    "config-no-cache": "'''Waarschuwing:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] of [http://www.iis.net/download/WinCacheForPhp WinCache] is niet aangetroffen.\nHet cachen van objecten is niet ingeschakeld.",
+    "config-mod-security": "'''Waarschuwing:''' uw webserver heeft de module [http://modsecurity.org/ mod_security] ingeschakeld. Als deze onjuist is ingesteld, kan dit problemen geven in combinatie met MediaWiki of andere software die gebruikers in staat stelt willekeurige inhoud te posten.\nLees de [http://modsecurity.org/documentation/ documentatie over mod_security] of neem contact op met de helpdesk van uw provider als u tegen problemen aanloopt.",
+    "config-diff3-bad": "GNU diff3 niet aangetroffen.",
+    "config-git": "Versiecontrolesoftware git is aangetroffen: <code>$1</code>",
+    "config-git-bad": "Geen git versiecontrolesoftware aangetroffen.",
+    "config-imagemagick": "ImageMagick aangetroffen: <code>$1</code>.\nHet aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als u uploaden inschakelt.",
+    "config-gd": "Ingebouwde GD grafische bibliotheek aangetroffen.\nHet aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als u uploaden inschakelt.",
+    "config-no-scaling": "De GD-bibliotheek en ImageMagick zijn niet aangetroffen.\nHet maken van miniaturen van afbeeldingen wordt uitgeschakeld.",
+    "config-no-uri": "'''Fout:''' de huidige URI kon niet vastgesteld worden.\nDe installatie is afgebroken.",
+    "config-no-cli-uri": "'''Waarschuwing:''' de parameter ==scriptpath is niet opgegeven. De standaardwaarde wordt gebruikt: <code>$1</code>.",
+    "config-using-server": "De servernaam \"<nowiki>$1</nowiki>\" wordt gebruikt.",
+    "config-using-uri": "De server-URL \"<nowiki>$1$2</nowiki>\" wordt gebruikt.",
+    "config-uploads-not-safe": "'''Waarschuwing:''' uw uploadmap <code>$1</code> kan gebruikt worden voor het arbitrair uitvoeren van scripts.\nHoewel MediaWiki alle toegevoegde bestanden controleert op bedreigingen, is het zeer aan te bevelen het [//www.mediawiki.org/wiki/Manual:Security#Upload_security beveiligingslek te verhelpen] alvorens uploads in te schakelen.",
+    "config-no-cli-uploads-check": "''Waarschuwing:'' uw standaardmap voor uploads (<code>$1</code>) wordt niet gecontroleerd op kwetsbaarheden voor het uitvoeren van willekeurige scripts gedurende de CLI-installatie.",
+    "config-brokenlibxml": "Uw systeem heeft een combinatie van PHP- en libxml2-versies geïnstalleerd die is foutgevoelig is en kan leiden tot onzichtbare beschadiging van gegevens in MediaWiki en andere webapplicaties.\nUpgrade naar PHP 5.2.9 of hoger en libxml2 2.7.3 of hoger([//bugs.php.net/bug.php?id=45996 bij PHP gerapporteerde fout]).\nDe installatie wordt afgebroken.",
+    "config-using531": "PHP $1 is niet compatibel met MediaWiki vanwege een fout met betrekking tot referentieparameters met <code>__call()</code>.\nWerk uw PHP bij naar PHP 5.3.2 of hoger of werk bij naar de lagere versie PHP 5.3.0 om dit op te lossen.\nDe installatie wordt afgebroken.",
+    "config-suhosin-max-value-length": "Suhosin is geïnstalleerd en beperkt de GET-parameter <code>length</code> tot $1 bytes.\nDe ResourceLoader van MediaWiki omzeilt deze beperking, maar dat is slecht voor de prestaties.\nAls het mogelijk is, moet u de waarde \"<code>suhosin.get.max_value_length</code>\" in <code>php.ini</code> instellen op 1024 of hoger en <code>$wgResourceLoaderMaxQueryLength</code> in LocalSettings.php op dezelfde waarde instellen.",
+    "config-db-type": "Databasetype:",
+    "config-db-host": "Databasehost:",
+    "config-db-host-help": "Als uw databaseserver een andere server is, voer dan de hostnaam of het IP-adres hier in.\n\nAls u gebruik maakt van gedeelde webhosting, hoort uw provider u de juiste hostnaam te hebben verstrekt.\n\nAls u MediaWiki op een Windowsserver installeert en MySQL gebruikt, dan werkt \"localhost\" mogelijk niet als servernaam.\nAls het inderdaad niet werkt, probeer dan \"127.0.0.1\" te gebruiken als lokaal IP-adres.\n\nAls u PostgreSQL gebruikt, laat dit veld dan leeg om via een Unix-socket te verbinden.",
+    "config-db-host-oracle": "Database-TNS:",
+    "config-db-host-oracle-help": "Voer een geldige [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] in; een tnsnames.ora-bestand moet zichtbaar zijn voor deze installatie.<br />Als u gebruik maakt van clientlibraries 10g of een latere versie, kunt u ook gebruik maken van de naamgevingsmethode [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+    "config-db-wiki-settings": "Identificeer deze wiki",
+    "config-db-name": "Databasenaam:",
+    "config-db-name-help": "Kies een naam die uw wiki identificeert.\nEr mogen geen spaties gebruikt worden.\nAls u gebruik maakt van gedeelde webhosting, dan hoort uw provider ofwel u een te gebruiken databasenaam gegeven te hebben, of u aangegeven te hebben hoe u databases kunt aanmaken.",
+    "config-db-name-oracle": "Databaseschema:",
+    "config-db-account-oracle-warn": "Er zijn drie ondersteunde scenario's voor het installeren van Oracle als databasebackend:\n\nAls u een databasegebruiker wilt aanmaken als onderdeel van het installatieproces, geef dan de gegevens op van een databasegebruiker in met de rol SYSDBA voor de installatie en voer de gewenste aanmeldgegevens in voor de gebruiker met webtoegang. U kunt ook de gebruiker met webtoegang handmatig aanmaken en alleen van die gebruiker de aanmeldgegevens opgeven als deze de vereiste rechten heeft om schemaobjecten aan te maken. Als laatste is het mogelijk om aanmeldgegevens van twee verschillende gebruikers op te geven; een met de rechten om schemaobjecten aan te maken, en een met alleen webtoegang.\n\nEen script voor het aanmaken van een gebruiker met de vereiste rechten is te vinden in de map \"maintenance/oracle/\" van deze installatie. Onthoud dat het gebruiken van een gebruiker met beperkte rechten alle mogelijkheden om beheerscripts uit te voeren met de standaard gebruiker onmogelijk maakt.",
+    "config-db-install-account": "Gebruiker voor installatie",
+    "config-db-username": "Gebruikersnaam voor database:",
+    "config-db-password": "Wachtwoord voor database:",
+    "config-db-password-empty": "Voer een wachtwoord in voor de nieuwe databasegebruiker: $1.\nHoewel het wellicht mogelijk is gebruikers aan te maken zonder wachtwoord, is dit niet veilig.",
+    "config-db-install-username": "Voer de gebruikersnaam in die gebruikt moet worden om te verbinden met de database tijdens het installatieproces. Dit is niet de gebruikersnaam van de MediaWikigebruiker. Dit is de gebruikersnaam voor de database.",
+    "config-db-install-password": "Voer het wachtwoord in dat gebruikt moet worden om te verbinden met de database tijdens het installatieproces. Dit is niet het wachtwoord van de MediaWikigebruiker. Dit is het wachtwoord voor de database.",
+    "config-db-install-help": "Voer de gebruikersnaam en het wachtwoord in die worden gebruikt voor de databaseverbinding tijdens het installatieproces.",
+    "config-db-account-lock": "Dezelfde gebruiker en wachwoord gebruiken na de installatie",
+    "config-db-wiki-account": "Gebruiker voor na de installatie",
+    "config-db-wiki-help": "Voer de gebruikersnaam en het wachtwoord in die gebruikt worden om verbinding te maken met de database na de installatie.\nAls de gebruiker niet bestaat en de gebruiker die tijdens de installatie gebruikt wordt voldoende rechten heeft, wordt deze gebruiker aangemaakt met de minimaal benodigde rechten voor het laten werken van de wiki.",
+    "config-db-prefix": "Databasetabelvoorvoegsel:",
+    "config-db-prefix-help": "Als u een database moet gebruiken voor meerdere wiki's, of voor MediaWiki en een andere applicatie, dan kunt u ervoor kiezen om een voorvoegsel toe te voegen aan de tabelnamen om conflicten te voorkomen.\nGebruik geen spaties.\n\nDit veld wordt meestal leeg gelaten.",
+    "config-db-charset": "Tekenset voor de database",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binair",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 UTF-8-compatibel",
+    "config-charset-help": "'''Waarschuwing:''' als u '''achterwaarts compatibel met UTF-8''' gebruikt met MySQL 4.1+ en een back-up van de database maakt met <code>mysqldump</code>, dan kunnen alle niet-ASCII-tekens in uw back-ups onherstelbaar beschadigd raken.\n\nIn '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.\nDit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledige reeks Unicode-tekens te gebruiken.\nIn '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren.\nHet is dan niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
+    "config-mysql-old": "U moet MySQL $1 of later gebruiken.\nU gebruikt $2.",
+    "config-db-port": "Databasepoort:",
+    "config-db-schema": "Schema voor MediaWiki",
+    "config-db-schema-help": "Dit schema klopt meestal.\nWijzig het alleen als u weet dat dit nodig is.",
+    "config-pg-test-error": "Kan geen verbinding maken met database '''$1''': $2",
+    "config-sqlite-dir": "Gegevensmap voor SQLite:",
+    "config-sqlite-dir-help": "SQLite slaat alle gegevens op in een enkel bestand.\n\nDe map die u opgeeft moet beschrijfbaar zijn voor de webserver tijdens de installatie.\n\nDeze mag '''niet toegankelijk''' zijn via het web en het bestand mag dus niet tussen de PHP-bestanden staan.\n\nHet installatieprogramma schrijft het bestand <code>.htaccess</code> weg met het databasebestand, maar als dat niet werkt kan iemand zich toegang tot het ruwe databasebestand verschaffen.\nOok de gebruikersgegevens (e-mailadressen, wachtwoordhashes) en verwijderde versies en overige gegevens met beperkte toegang via MediaWiki zijn dan onbeschermd.\n\nOverweeg om de database op een totaal andere plaats neer te zetten, bijvoorbeeld in <code>/var/lib/mediawiki/yourwiki</code>.",
+    "config-oracle-def-ts": "Standaard tablespace:",
+    "config-oracle-temp-ts": "Tijdelijke tablespace:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "MediaWiki ondersteunt de volgende databasesystemen:\n\n$1\n\nAls u het databasesysteem dat u wilt gebruiken niet in de lijst terugvindt, volg dan de handleiding waarnaar hierboven wordt verwezen om ondersteuning toe te voegen.",
+    "config-support-mysql": "* $1 is het primaire databasesysteem voor voor MediaWiki en wordt het best ondersteund ([http://www.php.net/manual/en/mysql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor MySQL])",
+    "config-support-postgres": "* $1 is een populair open source databasesysteem als alternatief voor MySQL ([http://www.php.net/manual/en/pgsql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor PostgreSQL]). Het is mogelijk dat er een aantal bekende problemen zijn met MediaWiki in combinatie met deze database en daarom wordt PostgreSQL niet aanbevolen voor een productieomgeving.",
+    "config-support-sqlite": "* $1 is een zeer goed ondersteund lichtgewicht databasesysteem ([http://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd zijn met ondersteuning voor SQLite]; gebruikt PDO)",
+    "config-support-oracle": "* $1 is een commerciële data voor grote bedrijven ([http://www.php.net/manual/en/oci8.installation.php PHP compileren met ondersteuning voor OCI8]).",
+    "config-header-mysql": "MySQL-instellingen",
+    "config-header-postgres": "PostgreSQL-instellingen",
+    "config-header-sqlite": "SQLite-instellingen",
+    "config-header-oracle": "Oracle-instellingen",
+    "config-invalid-db-type": "Ongeldig databasetype",
+    "config-missing-db-name": "U moet een waarde opgeven voor \"Databasenaam\"",
+    "config-missing-db-host": "U moet een waarde invoeren voor \"Databaseserver\"",
+    "config-missing-db-server-oracle": "U moet een waarde opgeven voor \"Database-TNS\"",
+    "config-invalid-db-server-oracle": "Ongeldige database-TNS \"$1\".\nGebruik \"TNS Names\" of een \"Easy Connect\" tekst ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle naamgevingsmethoden])",
+    "config-invalid-db-name": "Ongeldige databasenaam \"$1\".\nGebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_) en streepjes (-).",
+    "config-invalid-db-prefix": "Ongeldig databasevoorvoegsel \"$1\".\nGebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_) en streepjes (-).",
+    "config-connection-error": "$1.\n\nControleer de host, gebruikersnaam en wachtwoord en probeer het opnieuw.",
+    "config-invalid-schema": "Ongeldig schema voor MediaWiki \"$1\".\nGebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_).",
+    "config-db-sys-create-oracle": "Het installatieprogramma biedt alleen de mogelijkheid een nieuwe gebruiker aan te maken met de SYSDBA-gebruiker.",
+    "config-db-sys-user-exists-oracle": "De gebruiker \"$1\" bestaat al. SYSDBA kan alleen gebruikt worden voor het aanmaken van een nieuwe gebruiker!",
+    "config-postgres-old": "PostgreSQL $1 of hoger is vereist.\nU gebruikt $2.",
+    "config-sqlite-name-help": "Kies een naam die uw wiki identificeert.\nGebruik geen spaties of koppeltekens.\nDeze naam wordt gebruikt voor het gegevensbestand van SQLite.",
+    "config-sqlite-parent-unwritable-group": "Het was niet mogelijk de gegevensmap <code><nowiki>$1</nowiki></code> te maken omdat in de bovenliggende map <code><nowiki>$2</nowiki></code> niet geschreven mag worden door de webserver.\n\nHet installatieprogramma heeft vast kunnen stellen onder welke gebruiker de webserver draait.\nMaak de map <code><nowiki>$3</nowiki></code> beschrijfbaar om door te kunnen gaan.\nVoer op een Linux-systeem de volgende opdrachten uit:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Het was niet mogelijk de gegevensmap <code><nowiki>$1</nowiki></code> te maken omdat in de bovenliggende map <code><nowiki>$2</nowiki></code> niet geschreven mag worden door de webserver.\n\nHet installatieprogramma heeft niet vast kunnen stellen onder welke gebruiker de webserver draait.\nMaak de map <code><nowiki>$3</nowiki></code> beschrijfbaar voor de webserver (en anderen!) om door te kunnen gaan.\nVoer op een Linux-systeem de volgende opdrachten uit:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Er is een fout opgetreden tijdens het aanmaken van de gegevensmap \"$1\".\nControleer de locatie en probeer het opnieuw.",
+    "config-sqlite-dir-unwritable": "Het was niet mogelijk in de map \"$1\" te schrijven.\nWijzig de rechten zodat de webserver erin kan schrijven en probeer het opnieuw.",
+    "config-sqlite-connection-error": "$1.\n\nControleer de map voor gegevens en de databasenaam hieronder en probeer het opnieuw.",
+    "config-sqlite-readonly": "Er kan niet naar bestand <code>$1</code> worden geschreven.",
+    "config-sqlite-cant-create-db": "Het was niet mogelijk het databasebestand <code>$1</code> aan te maken.",
+    "config-sqlite-fts3-downgrade": "PHP heeft geen ondersteuning voor FTS3.\nDe tabellen worden gedowngrade.",
+    "config-can-upgrade": "Er staan al tabellen voor MediaWiki in deze database.\nKlik op '''Doorgaan''' om ze bij te werken naar MediaWiki $1.",
+    "config-upgrade-done": "Het bijwerken is afgerond.\n\nUw kunt [$1 uw wiki nu gebruiken].\n\nAls u uw <code>LocalSettings.php</code> opnieuw wilt aanmaken, klik dan op de knop hieronder.\nDit is '''niet aan te raden''' tenzij u problemen hebt met uw wiki.",
+    "config-upgrade-done-no-regenerate": "Het bijwerken is afgerond.\n\nU kunt nu [$1 uw wiki gebruiken].",
+    "config-regenerate": "LocalSettings.php opnieuw aanmaken →",
+    "config-show-table-status": "Het uitvoeren van <code>SHOW TABLE STATUS</code> is mislukt!",
+    "config-unknown-collation": "'''Waarschuwing:''' de database gebruikt een collatie die niet wordt herkend.",
+    "config-db-web-account": "Databasegebruiker voor webtoegang",
+    "config-db-web-help": "Selecteer de gebruikersnaam en het wachtwoord die de webserver gebruikt om verbinding te maken met de databaseserver na de installatie.",
+    "config-db-web-account-same": "Dezelfde gebruiker gebruiken als voor de installatie",
+    "config-db-web-create": "Maak de gebruiker aan als deze nog niet bestaat",
+    "config-db-web-no-create-privs": "De gebruiker die u hebt opgegeven voor de installatie heeft niet voldoende rechten om een gebruiker aan te maken.\nDe gebruiker die u hier opgeeft moet al bestaan.",
+    "config-mysql-engine": "Opslagmethode:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Waarschuwing''': u hebt MyISAM geselecteerd als opslagengine voor MySQL. Dit is niet aan te raden voor MediaWiki omdat:\n* het nauwelijks ondersteuning biedt voor gebruik door meerdere gebruikers tegelijkertijd door het locken van tabellen;\n* het meer vatbaar is voor corruptie dan andere engines;\n* de code van MediaWiki niet alstijd omgaat met MyISAM zoals dat zou moeten.\n\nAls uw installatie van MySQL InnoDB ondersteunt, gebruik dat dan vooral.\nAls uw installatie van MySQL geen ondersteuning heeft voor InnoDB, denk dan na over upgraden.",
+    "config-mysql-only-myisam-dep": "'''Waarschuwing:''' MyISAM is enige beschikbare opslagmethode voor MySQL, en deze wordt niet aangeraden voor gebruik met MediaWiki, omdat:\n* er nauwelijks ondersteuning is voor meerdere gelijktijdige transacties omdat tabellen op slot gezet worden;\n* tabellen makkelijker stuk kunnen gaan;\n* de code van MediaWiki niet altijd op de juiste wijze omgaat met MyISAM.\n\nUw installatie van MySQL heeft geen ondersteuning voor InnoDB. We raden u aan om een meer recente versie te gebruiken.",
+    "config-mysql-engine-help": "'''InnoDB''' is vrijwel altijd de beste instelling, omdat deze goed omgaat met meerdere verzoeken tegelijkertijd.\n\n'''MyISAM''' is bij een zeer beperkt aantal gebruikers mogelijk sneller, of als de wiki alleen-lezen is.\nMyISAM-databases raken vaker corrupt dan InnoDB-databases.",
+    "config-mysql-charset": "Tekenset voor de database:",
+    "config-mysql-binary": "Binair",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.\nDit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledige reeks Unicodetekens te gebruiken.\n\nIn '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren.\nHet is dat niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
+    "config-site-name": "Naam van de wiki:",
+    "config-site-name-help": "Deze naam verschijnt in de titelbalk van browsers en op andere plaatsen.",
+    "config-site-name-blank": "Geef een naam op voor de site.",
+    "config-project-namespace": "Projectnaamruimte:",
+    "config-ns-generic": "Project",
+    "config-ns-site-name": "Zelfde als de wiki: $1",
+    "config-ns-other": "Andere (geef aan welke)",
+    "config-ns-other-default": "MijnWiki",
+    "config-project-namespace-help": "In het kielzog van Wikipedia beheren veel wiki's hun beleidspagina's apart van hun inhoudelijke pagina's in een \"'''projectnaamruimte'''\".\nAlle paginanamen in deze naamruimte beginnen met een bepaald voorvoegsel dat u hier kunt opgeven.\nDit voorvoegsel wordt meestal afgeleid van de naam van de wiki, maar het kan geen bijzondere tekens bevatten als \"#\" of \":\".",
+    "config-ns-invalid": "De opgegeven naamruimte \"<nowiki>$1</nowiki>\" is ongeldig.\nGeef een andere naamruimte op.",
+    "config-ns-conflict": "De opgegeven naamruimte \"<nowiki>$1</nowiki>\" conflicteert met een standaard naamruimte in MediaWiki.\nGeef een andere naam op voor de projectnaamruimte.",
+    "config-admin-box": "Beheerdersgebruiker",
+    "config-admin-name": "Uw naam:",
+    "config-admin-password": "Wachtwoord:",
+    "config-admin-password-confirm": "Wachtwoord opnieuw:",
+    "config-admin-help": "Voer de gebruikersnaam hier in, bijvoorbeeld \"Jan Jansen\".\nDit is de naam die wordt gebruikt om aan de melden bij de wiki.",
+    "config-admin-name-blank": "Geef een gebruikersnaam op voor de beheerder.",
+    "config-admin-name-invalid": "De opgegeven gebruikersnaam \"<nowiki>$1</nowiki>\" is ongeldig.\nKies een andere gebruikersnaam.",
+    "config-admin-password-blank": "Voer een wachtwoord voor de beheerder in.",
+    "config-admin-password-same": "Het wachtwoord mag niet hetzelfde zijn als de gebruikersnaam.",
+    "config-admin-password-mismatch": "De twee door u ingevoerde wachtwoorden komen niet overeen.",
+    "config-admin-email": "E-mailadres:",
+    "config-admin-email-help": "Voer hier een e-mailadres in om e-mail te kunnen ontvangen van andere gebruikers op de wiki, uw wachtwoord opnieuw in te kunnen stellen en op de hoogte te worden gehouden van wijzigingen van pagina's op uw volglijst. U kunt het veld leeg laten.",
+    "config-admin-error-user": "Interne fout bij het aanmaken van een beheerder met de naam \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Interne fout bij het instellen van een wachtwoord voor de bejeerder \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+    "config-admin-error-bademail": "U hebt een ongeldig e-mailadres opgegeven",
+    "config-subscribe": "Abonneren op de [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailinglijst releaseaankondigen].",
+    "config-subscribe-help": "Dit is een mailinglijst met een laag volume voor aankondigingen van nieuwe versies, inclusief belangrijke aankondigingen met betrekking tot beveiliging.\nAbonneer uzelf erop en werk uw MediaWiki-installatie bij als er nieuwe versies uitkomen.",
+    "config-subscribe-noemail": "U hebt geprobeerd zich te abonneren op de mailinglijst voor release-aankondigingen zonder een e-mailadres op te geven.\nGeef een e-mailadres op als u zich wilt abonneren op de mailinglijst.",
+    "config-almost-done": "U bent bijna klaar!\nAls 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": "Open wiki",
+    "config-profile-no-anon": "Gebruiker aanmaken verplicht",
+    "config-profile-fishbowl": "Alleen voor geautoriseerde bewerkers",
+    "config-profile-private": "Privéwiki",
+    "config-profile-help": "Wiki's werken het beste als ze door zoveel mogelijk gebruikers worden bewerkt.\nIn MediaWiki is het eenvoudig om de recente wijzigingen te controleren en eventuele foutieve of kwaadwillende bewerkingen terug te draaien.\n\nDaarnaast vinden velen MediaWiki goed inzetbaar in vele andere rollen, en soms is het niet handig om helemaal \"op de wikimanier\" te werken.\nDaarom biedt dit installatieprogramma u de volgende keuzes voor de basisinstelling van gebruikersvrijheden:\n\nHet profiel '''{{int:config-profile-wiki}}''' staat iedereen toe te bewerken, zonder zelfs aan te melden.\nEen wiki met '''{{int:config-profile-no-anon}}\" biedt extra verantwoordelijkheid, maar kan afschrikken toevallige gebruikers afschrikken.\n\nHet scenario '''{{int:config-profile-fishbowl}}''' laat gebruikers waarvoor dat is ingesteld bewerkt, maar andere gebruikers kunnen alleen pagina's bekijken, inclusief de bewerkingsgeschiedenis.\nIn een '''{{int:config-profile-private}}''' kunnen alleen goedgekeurde gebruikers pagina's bekijken en bewerken.\n\nMeer 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].",
+    "config-license": "Auteursrechten en licentie:",
+    "config-license-none": "Geen licentie in de voettekst",
+    "config-license-cc-by-sa": "Creative Commons Naamsvermelding-Gelijk delen",
+    "config-license-cc-by": "Creative Commons Naamsvermelding",
+    "config-license-cc-by-nc-sa": "Creative Commons Naamsvermelding-Niet Commercieel-Gelijk delen",
+    "config-license-cc-0": "Creative Commons Zero (Publiek domein)",
+    "config-license-gfdl": "GNU Free Documentation License 1.3 of hoger",
+    "config-license-pd": "Publiek domein",
+    "config-license-cc-choose": "Een Creative Commons-licentie selecteren",
+    "config-license-help": "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [http://freedomdefined.org/Definition vrije licentie].\nDit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.\nDit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.\n\nAls u teksten uit Wikipedia wilt kunnen gebruiken en u wilt het mogelijk maken teksten uit uw wiki naar Wikipedia te kopiëren, kies dan de licentie '''Creative Commons Naamsvermelding-Gelijk delen'''.\n\nDe GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.\nDit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.\nHet is ook lastig inhoud te hergebruiken onder de GFDL.",
+    "config-email-settings": "E-mailinstellingen",
+    "config-enable-email": "Uitgaande e-mail inschakelen",
+    "config-enable-email-help": "Als u wilt dat e-mailen mogelijk is, dan moeten de [http://www.php.net/manual/en/mail.configuration.php e-mailinstellingen van PHP] correct zijn.\nAls u niet wilt dat e-mailen mogelijk is, dan kunt u de instellingen hier uitschakelen.",
+    "config-email-user": "E-mail tussen gebruikers inschakelen",
+    "config-email-user-help": "Gebruikers toestaan e-mail aan elkaar te verzenden als dit in de voorkeuren is ingesteld.",
+    "config-email-usertalk": "Gebruikersoverlegmeldingen inschakelen",
+    "config-email-usertalk-help": "Gebruikers toestaan meldingen te ontvangen bij wijzigingen op de eigen overlegpagina, als dit in de voorkeuren is ingesteld.",
+    "config-email-watchlist": "Volglijstmeldingen inschakelen",
+    "config-email-watchlist-help": "Gebruikers toestaan meldingen te ontvangen bij wijzigingen van pagina's op hun volglijst, als dit in de voorkeuren is ingesteld.",
+    "config-email-auth": "E-mailbevestiging inschakelen",
+    "config-email-auth-help": "Als deze instelling actief is, moeten gebruikers hun e-mailadres bevestigen via een verwijziging die ze per e-mail wordt toegezonden.\nAlleen bevestigde e-mailadressen kunnen e-mail ontvangen van andere gebruikers of wijzigingsnotificaties ontvangen.\nHet inschakelen van deze instelling wordt '''aangeraden''' voor openbare wiki's vanwege de mogelijkheden voor misbruik van e-mailmogelijkheden.",
+    "config-email-sender": "E-mailadres voor antwoorden:",
+    "config-email-sender-help": "Voer het e-mailadres in dat u wilt gebruiken als antwoordadres voor uitgaande e-mail.\nAls een e-mail niet bezorgd kan worden, wordt dat op dit e-mailadres gemeld.\nVeel mailservers vereisen dat tenminste het domein bestaat.",
+    "config-upload-settings": "Afbeeldingen en bestanden uploaden",
+    "config-upload-enable": "Uploaden van bestanden inschakelen",
+    "config-upload-help": "Het toestaan van het uploaden van bestanden stelt uw server mogelijk bloot aan beveiligingsrisico's.\nEr is meer [//www.mediawiki.org/wiki/Manual:Security informatie over beveiliging] beschikbaar in de handleiding.\n\nOm het bestandsuploads mogelijk te maken kunt u de rechten op de submap <code>images</code> onder de hoofdmap van MediaWiki aanpassen, zodat de webserver erin kan schrijven.\nDaarmee wordt deze functie ingeschakeld.",
+    "config-upload-deleted": "Map voor verwijderde bestanden:",
+    "config-upload-deleted-help": "Kies een map waarin verwijderde bestanden gearchiveerd kunnen worden.\nIdealiter is deze map niet via het web te benaderen.",
+    "config-logo": "URL voor logo:",
+    "config-logo-help": "Het standaarduiterlijk van MediaWiki bevat ruimte voor een logo van 135x160 pixels boven het menu.\nUpload een afbeelding met de juiste afmetingen en voer de URL hier in.\n\nU kunt <code>$wgStylePath</code> of <code>$wgScriptPath</code> gebruiken als uw logo relatief is aan een van deze paden.\n\nAls u geen logo wilt gebruiken, kunt u dit veld leeg laten.",
+    "config-instantcommons": "Instant Commons inschakelen",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] is functie die het mogelijk maakt om afbeeldingen, geluidsbestanden en andere mediabestanden te gebruiken van de website [//commons.wikimedia.org/ Wikimedia Commons].\nHiervoor heeft MediaWiki toegang nodig tot Internet.\n\nMeer informatie over deze functie en hoe deze in te stellen voor andere wiki's dan Wikimedia Commons is te vinden in de [//mediawiki.org/wiki/Manual:$wgForeignFileRepos handleiding].",
+    "config-cc-error": "De licentiekiezer van Creative Commons heeft geen resultaat opgeleverd.\nVoer de licentie handmatig in.",
+    "config-cc-again": "Opnieuw kiezen...",
+    "config-cc-not-chosen": "Kies de Creative Commonslicentie die u wilt gebruiken en klik op \"doorgaan\".",
+    "config-advanced-settings": "Gevorderde instellingen",
+    "config-cache-options": "Instellingen voor het cachen van objecten:",
+    "config-cache-help": "Het cachen van objecten wordt gebruikt om de snelheid van MediaWiki te verbeteren door vaak gebruikte gegevens te bewaren.\nMiddelgrote tot grote websites wordt geadviseerd dit in te schakelen en ook kleine sites merken de voordelen.",
+    "config-cache-none": "Niets cachen.\nEr gaat geen functionaliteit verloren, maar dit kan invloed hebben op de prestaties.",
+    "config-cache-accel": "Cachen van objecten via PHP (APC, XCache of WinCache)",
+    "config-cache-memcached": "Memcached gebruiken (dit vereist aanvullende instellingen)",
+    "config-memcached-servers": "Memcachedservers:",
+    "config-memcached-help": "Lijst met IP-adressen te gebruiken voor Memcached.\nEén IP-adres per regel met een poortnummer.\nBijvoorbeeld:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "U hebt Memcached geselecteerd als uw cache, maar u hebt geen servers opgegeven.",
+    "config-memcache-badip": "U hebt een ongeldig IP-adres ingevoerd voor Memcached: $1.",
+    "config-memcache-noport": "U hebt geen poort opgegeven voor de Memcachedserver: $1.\nDe standaardpoort is 11211.",
+    "config-memcache-badport": "Poortnummers voor Memcached moeten tussen $1 en $2 liggen.",
+    "config-extensions": "Uitbreidingen",
+    "config-extensions-help": "De bovenstaande uitbreidingen zijn aangetroffen in de map <code>./extensions</code>.\n\nMogelijk moet u aanvullende instellingen maken, maar u kunt deze uitbreidingen nu inschakelen.",
+    "config-install-alreadydone": "'''Waarschuwing:''' het lijkt alsof u MediaWiki al hebt geïnstalleerd en probeert het programma opnieuw te installeren.\nGa door naar de volgende pagina.",
+    "config-install-begin": "Als u nu op \"{{int:config-continue}}\" klikt, begint de installatie van MediaWiki.\nAls u nog wijzigingen wilt maken, klik dan op \"{{int:config-back}}\".",
+    "config-install-step-done": "afgerond",
+    "config-install-step-failed": "mislukt",
+    "config-install-extensions": "Inclusief uitbreidingen",
+    "config-install-database": "Database inrichten",
+    "config-install-schema": "Het schema wordt aangemaakt",
+    "config-install-pg-schema-not-exist": "Het schema voor PostgreSQL bestaat niet",
+    "config-install-pg-schema-failed": "Het aanmaken van de tabellen is mislukt.\nZorg dat de gebruiker \"$1\" in het schema \"$2\" mag schrijven.",
+    "config-install-pg-commit": "Wijzigingen worden doorgevoerd",
+    "config-install-pg-plpgsql": "Controle op de taal PL/pgSQL",
+    "config-pg-no-plpgsql": "U moet de taal PL/pgSQL installeren in de database $1",
+    "config-pg-no-create-privs": "De gebruiker die u hebt opgegeven door de installatie heeft niet voldoende rechten om een gebruiker aan te maken.",
+    "config-pg-not-in-role": "De gebruiker die u hebt opgegeven voor de webgebruiker bestaat al.\nDe gebruiker die u hebt opgegeven voor installatie is geen superuser en geen lid van de rol van de webgebruiker, en kan het dus geen objecten aanmaken die van de webgebruiker zijn.\n\nMediaWiki vereist momenteel dat de tabellen van de webgebruiker zijn. Geef een andere webgebruikersnaam op, of klik op \"terug\" en geef een gebruiker op die voldoende installatierechten heeft.",
+    "config-install-user": "Databasegebruiker aan het aanmaken",
+    "config-install-user-alreadyexists": "Gebruiker \"$1\" bestaat al",
+    "config-install-user-create-failed": "Het aanmaken van de gebruiker \"$1\" is mislukt: $2",
+    "config-install-user-grant-failed": "Het geven van rechten aan gebruiker \"$1\" is mislukt: $2",
+    "config-install-user-missing": "De opgegeven gebruiker \"$1\" bestaat niet.",
+    "config-install-user-missing-create": "De opgegeven gebruiker \"$1\" bestaat niet.\nKlik op \"registreren\" onderaan als u de gebruiker wilt aanmaken.",
+    "config-install-tables": "Tabellen aanmaken",
+    "config-install-tables-exist": "'''Waarschuwing''': de MediaWikitabellen lijken al te bestaan.\nHet aanmaken wordt overgeslagen.",
+    "config-install-tables-failed": "'''Fout''': het aanmaken van een tabel is mislukt met de volgende foutmelding: $1",
+    "config-install-interwiki": "Bezig met het vullen van de interwikitabel",
+    "config-install-interwiki-list": "Het bestand <code>interwiki.list</code> is niet aangetroffen",
+    "config-install-interwiki-exists": "'''Waarschuwing''': de interwikitabel heeft al inhoud.\nDe standaardlijst wordt overgeslagen.",
+    "config-install-stats": "Statistieken initialiseren",
+    "config-install-keys": "Bezig met aanmaken van geheime sleutels",
+    "config-insecure-keys": "'''Waarschuwing:''' De {{PLURAL:$2|sleutel die is aangemaakt|sleutels die zijn aangemaakt}} ($1) tijdens de installatie {{PLURAL:$2|is|zijn}} niet volledig veilig. Overweeg deze handmatig te wijzigen.",
+    "config-install-sysop": "Gebruiker voor beheerder aanmaken",
+    "config-install-subscribe-fail": "Het is niet mogelijk te abonneren op mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "cURL is niet geïnstalleerd en <code>allow_url_fopen</code> is niet beschikbaar.",
+    "config-install-mainpage": "Hoofdpagina aanmaken met standaard inhoud",
+    "config-install-extension-tables": "Tabellen voor ingeschakelde uitbreidingen worden aangemaakt",
+    "config-install-mainpage-failed": "Het was niet mogelijk de hoofdpagina in te voegen: $1",
+    "config-install-done": "'''Gefeliciteerd!'''\nU hebt MediaWiki met geïnstalleerd.\n\nHet installatieprogramma heeft het bestand <code>LocalSettings.php</code> aangemaakt.\nDit bevat al uw instellingen.\n\nU moet het bestand downloaden en in de hoofdmap van uw wiki-installatie plaatsten; in dezelfde map als index.php.\nDe download moet u automatisch zijn aangeboden.\n\nAls de download niet is aangeboden of als u de download hebt geannuleerd, dan kunt u de download opnieuw starten door op de onderstaande koppeling te klikken:\n\n$3\n\n'''Let op''': als u dit niet nu doet, dan het is bestand als u later de installatieprocedure afsluit zonder het bestand te downloaden niet meer beschikbaar.\n\nNa het plaatsen van het bestand met instellingen kunt u '''[$2 uw wiki betreden]'''.",
+    "config-download-localsettings": "<code>LocalSettings.php</code> downloaden",
+    "config-help": "hulp",
+    "config-nofile": "Het bestand \"$1\" is niet gevonden. Is het verwijderd?",
+    "config-extension-link": "Weet u dat u [//www.mediawiki.org/wiki/Manual:Extensions uitbreidingen] kunt gebruiken voor uw wiki?\nU kunt [//www.mediawiki.org/wiki/Category:Extensions_by_category uitbreidingen op categorie] bekijken of ga naar de [//www.mediawiki.org/wiki/Extension_Matrix Uitbreidingenmatrix] om de volledige lijst met uitbreidingen te bekijken.",
+    "mainpagetext": "'''De installatie van MediaWiki is geslaagd.'''",
+    "mainpagedocfooter": "Raadpleeg de [//meta.wikimedia.org/wiki/NL_Help:Inhoudsopgave handleiding] voor informatie over het gebruik van de wikisoftware.\n\n== Meer hulp over MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lijst met instellingen]\n* [//www.mediawiki.org/wiki/Manual:FAQ Veelgestelde vragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Maak MediaWiki beschikbaar in uw taal]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/nn.json b/includes/installer/i18n/nn.json
new file mode 100644 (file)
index 0000000..9940723
--- /dev/null
@@ -0,0 +1,41 @@
+{
+    "@metadata": {
+        "authors": [
+            "Harald Khan",
+            "Nghtwlkr"
+        ]
+    },
+    "config-your-language": "Språket ditt:",
+    "config-wiki-language": "Wikispråk:",
+    "config-back": "← Attende",
+    "config-continue": "Hald fram →",
+    "config-page-language": "Språk",
+    "config-memory-raised": "PHPs <code>memory_limit</code> er $1, auka til $2.",
+    "config-memory-bad": "'''Advarsel:''' PHPs <code>memory_limit</code> er $1.\nDette er sannsynlegvis for lågt.\nInstallasjonen kan mislukkast!",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] er innstallert",
+    "config-apc": "[http://www.php.net/apc APC] er innstallert",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] er installert",
+    "config-db-name": "Databasenamn:",
+    "config-db-username": "Databasebrukarnamn:",
+    "config-db-password": "Databasepassord:",
+    "config-db-charset": "Databaseteiknsett",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binær",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 bakoverkompatibel UTF-8",
+    "config-mysql-old": "MySQL $1 eller seinare krevst, du har $2.",
+    "config-db-port": "Databaseport:",
+    "config-db-schema": "Skjema for MediaWiki",
+    "config-header-mysql": "MySQL-innstillingar",
+    "config-header-postgres": "PostgreSQL-innstillingar",
+    "config-header-sqlite": "SQLite-innstillingar",
+    "config-header-oracle": "Oracle-innstillingar",
+    "config-invalid-db-type": "Ugyldig databasetype",
+    "config-invalid-db-name": "Ugyldig databasenamn «$1».\nBerre bruk ASCII-bokstavar (a-z, A-Z), tal (0-9) og undestrekar (_).",
+    "config-invalid-db-prefix": "Ugyldig databaseprefiks «$1».\nBerre bruk ASCII-bokstavar (a-z, A-Z), tal (0-9) og undestrekar (_).",
+    "config-invalid-schema": "Ugyldig skjema for MediaWiki «$1».\nBerre bruk ASCII-bokstavar (a-z, A-Z), tal (0-9) og undestrekar (_).",
+    "config-postgres-old": "PostgreSQL $1 eller seinare krevst, du har $2.",
+    "config-email-settings": "E-postinnstillingar",
+    "config-logo": "Logo-URL:",
+    "mainpagetext": "'''MediaWiki er no installert.'''",
+    "mainpagedocfooter": "Sjå [//meta.wikimedia.org/wiki/Help:Contents brukarmanualen] for informasjon om bruk og oppsettshjelp for wikiprogramvara.\n\n==Kome i gang==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste over oppsettsinnstillingar]\n* [//www.mediawiki.org/wiki/Manual:FAQ Spørsmål og svar om MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-postliste med informasjon om nye MediaWiki-versjonar]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/no.json b/includes/installer/i18n/no.json
new file mode 100644 (file)
index 0000000..bb9e376
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki-programvaren er nå installert.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/oc.json b/includes/installer/i18n/oc.json
new file mode 100644 (file)
index 0000000..f4f088d
--- /dev/null
@@ -0,0 +1,61 @@
+{
+    "@metadata": {
+        "authors": [
+            "Cedric31"
+        ]
+    },
+    "config-desc": "Lo programa d’installacion de MediaWiki",
+    "config-title": "Installacion de MediaWiki $1",
+    "config-information": "Informacions",
+    "config-localsettings-key": "Clau de mesa a jorn :",
+    "config-localsettings-badkey": "La clau qu'avètz provesida es incorrècta",
+    "config-session-error": "Error al moment de l'aviada de la sesilha : $1",
+    "config-your-language": "Vòstra lenga :",
+    "config-wiki-language": "Lenga del wiki :",
+    "config-back": "← Retorn",
+    "config-continue": "Contunhar →",
+    "config-page-language": "Lenga",
+    "config-page-welcome": "Benvenguda sus MediaWiki !",
+    "config-page-dbconnect": "Se connectar a la banca de donadas",
+    "config-page-dbsettings": "Paramètres de la banca de donadas",
+    "config-page-name": "Nom",
+    "config-page-options": "Opcions",
+    "config-page-install": "Installar",
+    "config-page-complete": "Acabat !",
+    "config-page-restart": "Reaviar l’installacion",
+    "config-page-readme": "Legissètz-me",
+    "config-page-releasenotes": "Nòtas de version",
+    "config-page-copying": "Còpia",
+    "config-page-upgradedoc": "Mesa a jorn",
+    "config-page-existingwiki": "Wiki existent",
+    "config-restart": "Òc, lo reaviar",
+    "config-env-php": "PHP $1 es installat.",
+    "config-db-host-oracle": "Nom TNS de la banca de donadas :",
+    "config-db-wiki-settings": "Identificar aqueste wiki",
+    "config-db-name": "Nom de la banca de donadas :",
+    "config-db-name-oracle": "Esquèma de banca de donadas :",
+    "config-db-install-account": "Compte d'utilizaire per l'installacion",
+    "config-db-username": "Nom d'utilizaire de la banca de donadas :",
+    "config-db-password": "Senhal de la banca de donadas :",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binari",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 retrocompatible UTF-8",
+    "config-db-port": "Pòrt de la banca de donadas :",
+    "config-db-schema": "Esquèma per MediaWiki",
+    "config-header-mysql": "Paramètres de MySQL",
+    "config-header-postgres": "Paramètres de PostgreSQL",
+    "config-header-sqlite": "Paramètres de SQLite",
+    "config-header-oracle": "Paramètres d’Oracle",
+    "config-mysql-engine": "Motor d'emmagazinatge :",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-binary": "Binari",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Nom del wiki :",
+    "config-ns-generic": "Projècte",
+    "config-ns-other-default": "MonWiki",
+    "config-admin-name": "Vòstre nom :",
+    "config-admin-password": "Senhal :",
+    "mainpagetext": "'''MediaWiki es estat installat amb succès.'''",
+    "mainpagedocfooter": "Consultatz lo [//meta.wikimedia.org/wiki/Ajuda:Contengut Guida de l'utilizaire] per mai d'entresenhas sus l'utilizacion d'aqueste logicial.\n\n== Començar amb MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista dels paramètres de configuracion]\n* [//www.mediawiki.org/wiki/Manual:FAQ/fr FAQ MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussions de las parucions de MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/or.json b/includes/installer/i18n/or.json
new file mode 100644 (file)
index 0000000..e945ace
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "Jnanaranjan Sahu"
+        ]
+    },
+    "config-back": "← ପଛକୁ",
+    "config-continue": "ଚାଲୁରଖିବେ →",
+    "config-page-language": "ଭାଷା",
+    "config-page-welcome": "ମେଡିଆଉଇକିକୁ ଆପଣଙ୍କୁ ସ୍ଵାଗତ",
+    "config-page-name": "ନାମ",
+    "config-page-options": "ପସନ୍ଦସମୂହ"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/os.json b/includes/installer/i18n/os.json
new file mode 100644 (file)
index 0000000..f8dc150
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Amikeco"
+        ]
+    },
+    "config-page-language": "Æвзаг",
+    "mainpagetext": "'''Вики-скрипт «MediaWiki» æнтыстджынæй æвæрд æрцыд.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/pa.json b/includes/installer/i18n/pa.json
new file mode 100644 (file)
index 0000000..db646cb
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''ਮੀਡਿਆਵਿਕਿ ਠੀਕ ਤਰ੍ਹਾਂ ਇੰਸਟਾਲ ਹੋ ਗਿਆ ਹੈ।'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/pam.json b/includes/installer/i18n/pam.json
new file mode 100644 (file)
index 0000000..7383ed4
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Melaus ing pamipalyari ning MediaWiki.'''",
+    "mainpagedocfooter": "Basan me ing [//meta.wikimedia.org/wiki/Help:Contents User's Guide] para king impormasiun keng pamangamit ning wiki software.\n\n== Pamagumpisa ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/pcd.json b/includes/installer/i18n/pcd.json
new file mode 100644 (file)
index 0000000..9927354
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki o té instalé aveuc victoère.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/pdc.json b/includes/installer/i18n/pdc.json
new file mode 100644 (file)
index 0000000..e653a6c
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "Xqt"
+        ]
+    },
+    "config-continue": "Weider →",
+    "config-page-language": "Schprooch",
+    "config-admin-password": "Paesswatt:",
+    "config-install-step-done": "geduh",
+    "config-help": "Hilf",
+    "mainpagedocfooter": "Hilf fer's Yuuse unn Konfiguriere vun de Wiki-Software kansch finne im [//meta.wikimedia.org/wiki/Help:Contents Handbuch fer Yuuser].\n\n== Hilf zum Schtaerte ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lischt vun Gnepp zum Konfiguriere]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Eposchde-Lischt fer neie MediaWiki-Versione]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/pl.json b/includes/installer/i18n/pl.json
new file mode 100644 (file)
index 0000000..ecfaa43
--- /dev/null
@@ -0,0 +1,314 @@
+{
+    "@metadata": {
+        "authors": [
+            "Beau",
+            "BeginaFelicysym",
+            "Chrumps",
+            "Holek",
+            "Matma Rex",
+            "Michał Roszka",
+            "Saper",
+            "Sp5uhe",
+            "Woytecr",
+            "아라"
+        ]
+    },
+    "config-desc": "Instalator MediaWiki",
+    "config-title": "Instalacja MediaWiki $1",
+    "config-information": "Informacja",
+    "config-localsettings-upgrade": "Plik <code>LocalSettings.php</code> istnieje.\nAby oprogramowanie zostało zaktualizowane musisz wstawić wartość <code>$wgUpgradeKey</code> w poniższe pole.\nOdnajdziesz ją w <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Wykryto obecność pliku <code>LocalSettings.php</code>.\nAktualizację należy wykonać poprzez uruchomienie <code>update.php</code>",
+    "config-localsettings-key": "Klucz aktualizacji",
+    "config-localsettings-badkey": "Podany klucz jest nieprawidłowy",
+    "config-upgrade-key-missing": "Wykryto zainstalowane wcześniej MediaWiki.\nJeśli chcesz je zaktualizować dodaj na koniec pliku <code>LocalSettings.php</code> poniższą linię tekstu.\n\n$1",
+    "config-localsettings-incomplete": "Istniejący plik <code>LocalSettings.php</code> wygląda na niekompletny.\nBrak wartości zmiennej $1.\nZmień plik <code>LocalSettings.php</code>, tak by zawierał deklarację wartości tej zmiennej, a następnie kliknij „{{int:Config-continue}}”.",
+    "config-localsettings-connection-error": "Wystąpił błąd podczas łączenia z bazą danych z wykorzystaniem danych z <code>LocalSettings.php</code> lub <code>AdminSettings.php</code>.\nPopraw ustawienia i spróbuj ponownie.\n\n$1",
+    "config-session-error": "Błąd uruchomienia sesji – $1",
+    "config-session-expired": "Wygląda na to, że Twoja sesja wygasła.\nCzas życia sesji został skonfigurowany na $1.\nMożesz go wydłużyć zmieniając <code>session.gc_maxlifetime</code> w pliku php.ini.\nUruchom ponownie proces instalacji.",
+    "config-no-session": "Dane sesji zostały utracone.\nSprawdź plik php.ini i upewnij się, że <code>session.save_path</code> wskazuje na odpowiedni katalog.",
+    "config-your-language": "Język",
+    "config-your-language-help": "Wybierz język używany podczas procesu instalacji.",
+    "config-wiki-language": "Język wiki",
+    "config-wiki-language-help": "Wybierz język, w którym będzie tworzona większość treści wiki",
+    "config-back": "← Wstecz",
+    "config-continue": "Dalej →",
+    "config-page-language": "Język",
+    "config-page-welcome": "Witamy w MediaWiki!",
+    "config-page-dbconnect": "Połączenie z bazą danych",
+    "config-page-upgrade": "Uaktualnienie istniejącej instalacji",
+    "config-page-dbsettings": "Ustawienia bazy danych",
+    "config-page-name": "Nazwa",
+    "config-page-options": "Opcje",
+    "config-page-install": "Instaluj",
+    "config-page-complete": "Zakończono!",
+    "config-page-restart": "Rozpoczęcie instalacji od nowa",
+    "config-page-readme": "Podstawowe informacje",
+    "config-page-releasenotes": "Informacje o wersji",
+    "config-page-copying": "Kopiowanie",
+    "config-page-upgradedoc": "Uaktualnienie",
+    "config-page-existingwiki": "Istniejąca wiki",
+    "config-help-restart": "Czy chcesz usunąć wszystkie zapisane dane i uruchomić ponownie proces instalacji?",
+    "config-restart": "Tak, zacznij od nowa",
+    "config-welcome": "=== Sprawdzenie środowiska instalacji ===\nTeraz zostaną wykonane podstawowe testy sprawdzające czy to środowisko jest odpowiednie dla instalacji MediaWiki.\nJeśli potrzebujesz pomocy podczas instalacji, załącz wyniki tych testów.",
+    "config-copyright": "=== Prawa autorskie i warunki użytkowania ===\n\n$1\n\nTo oprogramowanie jest wolne; możesz je rozprowadzać dalej i modyfikować zgodnie z warunkami licencji GNU General Public License opublikowanej przez Free Software Foundation w wersji 2 tej licencji lub (według Twojego wyboru) którejś z późniejszych jej wersji.\n\nNiniejsze oprogramowanie jest rozpowszechniane w nadziei, że będzie użyteczne, ale '''bez żadnej gwarancji'''; nawet bez domniemanej gwarancji '''handlowej''' lub '''przydatności do określonego celu'''.\nZobacz treść licencji GNU General Public License, aby uzyskać więcej szczegółów.\n\nRazem z oprogramowaniem powinieneś otrzymać <doclink href=Copying>kopię licencji GNU General Public License</doclink>. Jeśli jej nie otrzymałeś, napisz do Free Software Foundation, Inc, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. lub [http://www.gnu.org/copyleft/gpl.html przeczytaj ją online].",
+    "config-sidebar": "* [//www.mediawiki.org Strona domowa MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents Podręcznik użytkownika]\n* [//www.mediawiki.org/wiki/Manual:Contents Podręcznik administratora]\n* [//www.mediawiki.org/wiki/Manual:FAQ Odpowiedzi na często zadawane pytania]\n----\n* <doclink href=Readme>Przeczytaj to</doclink>\n* <doclink href=ReleaseNotes>Informacje o tej wersji</doclink>\n* <doclink href=Copying>Kopiowanie</doclink>\n* <doclink href=UpgradeDoc>Aktualizacja</doclink>",
+    "config-env-good": "Środowisko oprogramowania zostało sprawdzone.\nMożesz teraz zainstalować MediaWiki.",
+    "config-env-bad": "Środowisko oprogramowania zostało sprawdzone.\nNie możesz zainstalować MediaWiki.",
+    "config-env-php": "Zainstalowane jest PHP w wersji $1.",
+    "config-env-php-toolow": "Zainstalowane jest PHP $1.\nJednak MediaWiki wymaga PHP $2 lub nowszego.",
+    "config-unicode-using-utf8": "Korzystanie z normalizacji Unicode utf8_normalize.so napisanej przez Brion Vibbera.",
+    "config-unicode-using-intl": "Korzystanie z [http://pecl.php.net/intl rozszerzenia intl PECL] do normalizacji Unicode.",
+    "config-unicode-pure-php-warning": "'''Uwaga!''' [http://pecl.php.net/intl Rozszerzenie intl PECL] do obsługi normalizacji Unicode nie jest dostępne. Użyta zostanie mało wydajna zwykła implementacja w PHP.\nJeśli prowadzisz stronę o dużym natężeniu ruchu, powinieneś zapoznać się z informacjami o [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalizacji Unicode].",
+    "config-unicode-update-warning": "'''Uwaga''' – zainstalowana wersja normalizacji Unicode korzysta z nieaktualnej biblioteki [http://site.icu-project.org/ projektu ICU].\nPowinieneś [//www.mediawiki.org/wiki/Unicode_normalization_considerations zrobić aktualizację] jeśli chcesz korzystać w pełni z Unicode.",
+    "config-no-db": "Nie można odnaleźć właściwego sterownika bazy danych! Musisz zainstalować sterownik bazy danych dla PHP.\nMożna użyć następujących typów baz danych: $1.\n\nJeżeli korzystasz ze współdzielonego hostingu, zwróć się do administratora o zainstalowanie odpowiedniego sterownika bazy danych.\nJeśli skompilowałeś PHP samodzielnie, skonfiguruj je ponownie z włączonym klientem bazy danych, na przykład za pomocą polecenia <code>./configure --with-mysql</code>.\nJeśli zainstalowałeś PHP jako pakiet Debiana lub Ubuntu, musisz również zainstalować moduł php5-mysql.",
+    "config-outdated-sqlite": "'''Ostrzeżenie''': masz SQLite  $1, która jest niższa od minimalnej wymaganej wersji  $2 . SQLite będzie niedostępne.",
+    "config-no-fts3": "'''Uwaga''' – SQLite został skompilowany bez [//sqlite.org/fts3.html modułu FTS3] – funkcje wyszukiwania nie będą dostępne.",
+    "config-register-globals": "'''Uwaga –  w konfiguracji PHP włączona jest opcja <code>[http://php.net/register_globals register_globals]</code>.'''\n'''Jeśli możesz, wyłącz ją.'''\nMediaWiki będzie działać, ale Twój serwer może być narażony potencjalnymi lukami w zabezpieczeniach.",
+    "config-magic-quotes-runtime": "'''Błąd krytyczny – włączono [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!'''\nTa opcja powoduje nieprzewidywalne uszkodzenia wprowadzanych danych.\nZainstalować lub korzystać z MediaWiki można pod warunkiem, że ta opcja jest wyłączona.",
+    "config-magic-quotes-sybase": "'''Błąd krytyczny – włączono [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''\nTa opcja powoduje nieprzewidywalne uszkodzenia wprowadzanych danych.\nZainstalować lub korzystać z MediaWiki można pod warunkiem, że ta opcja jest wyłączona.",
+    "config-mbstring": "'''Błąd krytyczny – włączono [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''\nTa opcja powoduje błędy i może wywołać nieprzewidywalne uszkodzenia wprowadzanych danych.\nZainstalować lub korzystać z MediaWiki można pod warunkiem, że ta opcja jest wyłączona.",
+    "config-ze1": "'''Błąd krytyczny – włączono [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]!'''\nTa opcja powoduje okropne błędy podczas korzystania z MediaWiki.\nZainstalować lub korzystać z MediaWiki można wyłącznie wtedy, gdy ta opcja jest wyłączona.",
+    "config-safe-mode": "'''Ostrzeżenie''' – uaktywniono [http://www.php.net/features.safe-mode tryb awaryjny] PHP.\nOpcja ta może powodować problemy, szczególnie w przypadku korzystania z przesyłania plików i używania znacznika <code>math</code>.",
+    "config-xml-bad": "Brak modułu XML dla PHP.\nMediaWiki wymaga funkcji z tego modułu i nie może działać w tej konfiguracji.\nJeśli korzystasz z Mandrake, zainstaluj pakiet php-xml.",
+    "config-pcre": "Wygląda na to, że brak modułu PCRE.\nMediaWiki do pracy wymaga funkcji obsługi wyrażeń regularnych kompatybilnej z Perlem.",
+    "config-pcre-no-utf8": "'''Błąd krytyczny''' – wydaje się, że moduł PCRE w PHP został skompilowany bez wsparcia dla UTF‐8.\nMediaWiki wymaga wsparcia dla UTF‐8 do prawidłowego działania.",
+    "config-memory-raised": "PHP <code>memory_limit</code> było ustawione na $1, zostanie zwiększone do $2.",
+    "config-memory-bad": "'''Uwaga:''' PHP <code>memory_limit</code> jest ustawione na $1.\nTo jest prawdopodobnie zbyt mało.\nInstalacja może się nie udać!",
+    "config-ctype": "''' Krytyczny ''': PHP musi być skompilowany z obsługą [http://www.php.net/manual/en/ctype.installation.php rozszerzenia Ctype].",
+    "config-xcache": "[Http://trac.lighttpd.net/xcache/ XCache] jest zainstalowany",
+    "config-apc": "[Http://www.php.net/apc APC] jest zainstalowany",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] jest zainstalowany",
+    "config-no-cache": "'''Uwaga:''' Pamięć podręczna dla kodu MediaWiki nie będzie uruchomiona., gdyż nie ma żadnego z następujących narzędzi: [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] lub [http://www.iis.net/download/WinCacheForPhp WinCache].",
+    "config-mod-security": "''' Ostrzeżenie ''': Serwer sieci web ma włączone [http://modsecurity.org/ mod_security]. Jeśli niepoprawnie skonfigurowane, może być przyczyną problemów MediaWiki lub innego oprogramowania, które pozwala użytkownikom na wysyłanie dowolnej zawartości.\nSprawdź w [http://modsecurity.org/documentation/ dokumentacji mod_security] lub skontaktuj się z obsługa hosta, jeśli wystąpią losowe błędy.",
+    "config-diff3-bad": "Nie znaleziono GNU diff3.",
+    "config-git": "Znaleziono oprogramowanie kontroli wersji Git: <code>$1</code>.",
+    "config-git-bad": "Oprogramowanie systemu kontroli wersji Git nie zostało znalezione.",
+    "config-imagemagick": "Mamy zainstalowany ImageMagick <code>$1</code>, dzięki czemu będzie można pomniejszać załadowane grafiki.",
+    "config-gd": "Mamy wbudowaną bibliotekę graficzną GD, dzięki czemu będzie można pomniejszać załadowane grafiki.",
+    "config-no-scaling": "Nie można odnaleźć biblioteki GD lub ImageMagick. Nie będzie działać pomniejszanie załadowane grafiki.",
+    "config-no-uri": "'''Błąd.''' Nie można określić aktualnego URI.\nInstalacja została przerwana.",
+    "config-no-cli-uri": "''' Ostrzeżenie ''': nie wskazano --scriptpath,  użycie wartości domyślnej: <code>$1</code> .",
+    "config-using-server": "„<nowiki>$1</nowiki>“ jest adresem serwera, na którym instalowana jest wiki.",
+    "config-using-uri": "Wiki będzie zainstalowana pod adresem \"<nowiki>$1$2</nowiki>\".",
+    "config-uploads-not-safe": "'''Uwaga''' – domyślny katalog do którego zapisywane są przesyłane pliki <code>$1</code> jest podatny na wykonanie dowolnego skryptu.\nChociaż MediaWiki sprawdza wszystkie przesłane pliki pod kątem bezpieczeństwa, zaleca się jednak, aby [//www.mediawiki.org/wiki/Manual:Security#Upload_security zamknąć tę lukę w zabezpieczeniach] przed włączeniem przesyłania plików.",
+    "config-no-cli-uploads-check": "'''Ostrzeżenie:''' Katalog domyślny przesyłanych plików ( <code>$1</code> ) nie jest sprawdzona względem luki\n wykonania dowolnego skryptu podczas instalacji CLI w zabezpieczeniach.",
+    "config-brokenlibxml": "Twój system jest kombinacją wersji PHP i libxml2, które zawierają błędy mogące powodować ukryte uszkodzenia danych w MediaWiki i innych aplikacjach sieci web.\nWykonaj aktualizację PHP do wersji 5.2.9 lub późniejszej oraz libxml2 do wersji 2.7.3 lub późniejszej ([//bugs.php.net/bug.php?id=45996 błąd w PHP]).\nInstalacja została przerwana.",
+    "config-using531": "MediaWiki nie może być używane z PHP $1 z powodu błędu dotyczącego referencyjnych argumentów funkcji <code>__call()</code>.\nUaktualnij do PHP 5.3.2 lub nowszego. Możesz również cofnąć wersję do PHP 5.3.0, aby naprawić ten błąd.\nInstalacja została przerwana.",
+    "config-suhosin-max-value-length": "Jest zainstalowany Suhosin i ogranicza długość parametru GET <code>length</code> do $1 bajtów. Komponent ResourceLoader w MediaWiki wykona obejście tego ograniczenia, ale kosztem wydajności.\nJeśli to możliwe, należy ustawić <code>suhosin.get.max_value_length</code> na 1024 lub wyżej w <code>php.ini</code> oraz ustawić <code>$wgResourceLoaderMaxQueryLength</code> w <code>LocalSettings.php</code> na tę samą wartość.",
+    "config-db-type": "Typ bazy danych",
+    "config-db-host": "Adres serwera bazy danych",
+    "config-db-host-help": "Jeśli serwer bazy danych jest na innej maszynie, wprowadź jej nazwę domenową lub adres IP.\n\nJeśli korzystasz ze współdzielonego hostingu, operator serwera powinien podać Ci prawidłową nazwę serwera w swojej dokumentacji.\n\nJeśli instalujesz oprogramowanie na serwerze Windowsowym i korzystasz z MySQL, użycie „localhost” może nie zadziałać jako nazwa hosta. Jeśli wystąpi ten problem użyj „127.0.0.1” jako lokalnego adresu IP.\n\nJeżeli korzystasz z PostgreSQL, pozostaw to pole puste, aby połączyć się poprzez gniazdo Unix‐a.",
+    "config-db-host-oracle": "Nazwa instancji bazy danych (TNS):",
+    "config-db-host-oracle-help": "Wprowadź prawidłową [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nazwę połączenia lokalnego]. Plik „tnsnames.ora” musi być widoczny dla instalatora.<br />Jeśli używasz biblioteki klienckiej 10g lub nowszej możesz również skorzystać z metody nazw [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm łatwego łączenia].",
+    "config-db-wiki-settings": "Zidentyfikuj tę wiki",
+    "config-db-name": "Nazwa bazy danych",
+    "config-db-name-help": "Wybierz nazwę, która zidentyfikuje Twoją wiki.\nNie może ona zawierać spacji.\n\nJeśli korzystasz ze współdzielonego hostingu, dostawca usługi hostingowej może wymagać użycia konkretnej nazwy bazy danych lub pozwalać na tworzenie baz danych za pośrednictwem panelu użytkownika.",
+    "config-db-name-oracle": "Nazwa schematu bazy danych:",
+    "config-db-account-oracle-warn": "Bazę danych Oracle można przygotować do pracy z MediaWiki na trzy sposoby:\n\nMożesz utworzyć konto użytkownika bazy danych podczas instalacji MediaWiki. Wówczas należy podać nazwę i hasło użytkownika z rolą SYSDBA w celu użycia go przez instalator do utworzenia nowe konta użytkownika, z którego korzystać będzie MediaWiki.\n\nMożesz również skorzystać z konta użytkownika bazy danych utworzonego bezpośrednio w Oracle i wówczas wystarczy podać tylko nazwę i hasło tego użytkownika. Konto z rolą SYSDBA nie będzie potrzebne, jednak konto użytkownika powinno mieć uprawnienia do utworzenia obiektów w schemacie bazy danych. Możesz też podać dwa konta - konto dla instalatora, z pomocą którego zostaną obiekty w schemacie bazy danych i drugie konto, z którego będzie MediaWiki korzystać będzie do pracy.\n\nW podkatalogu \"maintenance/oracle\" znajduje się skrypt do tworzenia konta użytkownika. Korzystanie z konta użytkownika z ograniczonymi uprawnieniami spowoduje wyłączenie funkcji związanych z aktualizacją oprogramowania MediaWiki.",
+    "config-db-install-account": "Konto użytkownika dla instalatora",
+    "config-db-username": "Nazwa użytkownika bazy danych",
+    "config-db-password": "Hasło bazy danych",
+    "config-db-password-empty": "Wprowadź hasło dla nowego użytkownika bazy danych: $1.\nChoć istnieje możliwość tworzenia użytkowników bez hasła, nie jest to bezpieczne.",
+    "config-db-install-username": "Wprowadź nazwę użytkownika, który będzie używany do łączenia się z bazą danych podczas procesu instalacji.\nNie jest to nazwa konta MediaWiki, a użytkownika bazy danych.",
+    "config-db-install-password": "Wprowadź hasło, które będzie wykorzystywane do łączenia się z bazą danych w procesie instalacji.\nTo nie jest hasło konta MediaWiki, lecz hasło do bazy danych.",
+    "config-db-install-help": "Podaj nazwę użytkownika i jego hasło, które zostaną użyte do połączenia z bazą danych w czasie procesu instalacji.",
+    "config-db-account-lock": "Użyj tej samej nazwy użytkownika i hasła w czasie normalnej pracy.",
+    "config-db-wiki-account": "Konto użytkownika do normalnej pracy",
+    "config-db-wiki-help": "Wprowadź nazwę użytkownika i hasło, które będą używane do połączenia z bazą danych podczas normalnej pracy wiki.\nJeśli konto nie istnieje, a konto instalacji ma wystarczające uprawnienia, to zostanie utworzone konto użytkownika z minimalnymi uprawnieniami wymaganymi do działania wiki.",
+    "config-db-prefix": "Przedrostek tabel bazy danych",
+    "config-db-prefix-help": "Jeśli zachodzi potrzeba współdzielenia jednej bazy danych między wieloma wiki, lub między MediaWiki i inną aplikacją sieciową, można dodać przedrostek do wszystkich nazw tabel w celu uniknięcia konfliktów.\nNie należy używać spacji.\n\nTo pole zwykle pozostawiane jest puste.",
+    "config-db-charset": "Zestaw znaków bazy danych",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binarny",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 kompatybilny wstecz UTF-8",
+    "config-charset-help": "'''Ostrzeżenie:''' W przypadku użycia opcji '''UTF-8 zgodnego ze starszymi wersjami''' podczas korzystania z wersji MySQL nowszych niż 4.1 kopie zapasowe wykonane przy użyciu programu <code>mysqldump</code> będą bezużyteczne - wszystkie znaki inne niż ASCII zostaną zapisane nieprawidłowo.\n\nW '''trybie binarnym''', MediaWiki zapisuje tekst UTF-8 do bazy danych w polach binarnych.\nTo jest bardziej wydajne niż tryb UTF-8 w MySQL i pozwala na używanie pełnego zakresu znaków Unicode.\nW ''' trybie UTF-8''', MySQL będzie wiedzieć, w jakim zestawie znaków są dane i umożliwia ich prezentowanie i odpowiednią konwersję, ale nie pozwoli Ci przechowywać znaków spoza [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes podstawowej płaszczyzny wielojęzyczności].",
+    "config-mysql-old": "Wymagany jest MySQL $1 lub nowszy; korzystasz z $2.",
+    "config-db-port": "Numer portu TCP dla połączeń do bazy danych",
+    "config-db-schema": "Nazwa schematu bazy danych, z którego ma korzystać MediaWiki",
+    "config-db-schema-help": "Zaproponowana nazwa schematu jest odpowiednia dla większości sytuacji i przeważnie nie trzeba jej zmieniać.",
+    "config-pg-test-error": "Nie można połączyć się z bazą danych''' $1 ''': $2",
+    "config-sqlite-dir": "Katalog danych SQLite",
+    "config-sqlite-dir-help": "SQLite przechowuje wszystkie dane w pojedynczym pliku.\n\nWskazany katalog musi być dostępny do zapisu przez webserver podczas instalacji.\n\nPowinien '''nie''' być dostępny za z sieci web, dlatego nie umieszczamy ich tam, gdzie znajdują się pliki PHP.\n\nInstalator zapisze plik <code>.htaccess</code> obokniego, ale jeśli to zawiedzie, ktoś może uzyskać dostęp do nieprzetworzonej bazy danych.\nZawiera ona nieopracowane dane użytkownika (adresy e-mail, zahaszowane hasła) jak również usunięte wersje oraz inne dane o ograniczonym dostępie na wiki.\n\nWarto rozważyć umieszczenie w bazie danych zupełnie gdzie indziej, na przykład w <code>/var/lib/mediawiki/yourwiki</code> .",
+    "config-oracle-def-ts": "Domyślna przestrzeń tabel",
+    "config-oracle-temp-ts": "Przestrzeń tabel tymczasowych",
+    "config-support-info": "MediaWiki może współpracować z następującymi systemami baz danych:\n\n$1\n\nPoniżej wyświetlone są systemy baz danych gotowe do użycia. Jeżeli poniżej brakuje bazy danych, z której chcesz skorzystać, oznacza to, że brakuje odpowiedniego oprogramowania lub zostało ono niepoprawnie skonfigurowane. Powyżej znajdziesz odnośniki do dokumentacji, która pomoże w konfiguracji odpowiednich komponentów.",
+    "config-support-mysql": "* $1 jest bazą danych, na której rozwijane jest oprogramowanie MediaWiki. Ewentualne błędy w współpracy z bazą danych są odnajdowane i naprawiane dość szybko. ([http://www.php.net/manual/en/mysql.installation.php zobacz, jak skompilować PHP ze wsparciem dla MySQL])",
+    "config-support-postgres": "* $1 jest popularnym systemem baz danych, często stosowanym zamiast MySQL  ([http://www.php.net/manual/en/pgsql.installation.php Zobacz, jak skompilować PHP ze wsparciem dla PostgreSQL]). Z powodu możliwości wystąpienia drobnych błędów, nie jest zalecana do wymagających wdrożeń.",
+    "config-support-sqlite": "* $1 jest niewielkim systemem bazy danych, z którym MediaWiki bardzo dobrze współpracuje. ([http://www.php.net/manual/en/pdo.installation.php Jak skompilować PHP ze wsparciem dla SQLite], korzystając z PDO)",
+    "config-support-oracle": "* $1 jest komercyjną profesjonalną bazą danych. ([http://www.php.net/manual/en/oci8.installation.php Jak skompilować PHP ze wsparciem dla OCI8])",
+    "config-header-mysql": "Ustawienia MySQL",
+    "config-header-postgres": "Ustawienia PostgreSQL",
+    "config-header-sqlite": "Ustawienia SQLite",
+    "config-header-oracle": "Ustawienia Oracle",
+    "config-invalid-db-type": "Nieprawidłowy typ bazy danych",
+    "config-missing-db-name": "Należy wpisać wartość w polu „Nazwa bazy danych”",
+    "config-missing-db-host": "Musisz wpisać wartość w polu „Serwer bazy danych”",
+    "config-missing-db-server-oracle": "Należy wpisać wartość w polu „Nazwa instancji bazy danych (TNS)”",
+    "config-invalid-db-server-oracle": "Nieprawidłowa nazwa instancji bazy danych (TNS) „$1”.\nUżyj \"TNS Name\" lub \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods])",
+    "config-invalid-db-name": "Nieprawidłowa nazwa bazy danych „$1”.\nUżywaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) lub znaku odejmowania (-).",
+    "config-invalid-db-prefix": "Nieprawidłowy prefiks bazy danych „$1”.\nUżywaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) lub znaku odejmowania (-).",
+    "config-connection-error": "$1.\n\nSprawdź adres serwera, nazwę użytkownika i hasło, a następnie spróbuj ponownie.",
+    "config-invalid-schema": "Nieprawidłowa nazwa schematu dla MediaWiki „$1”.\nNazwa może zawierać wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9) i podkreślenia (_).",
+    "config-db-sys-create-oracle": "Instalator może wykorzystać wyłącznie konto SYSDBA do tworzenia nowych kont użytkowników.",
+    "config-db-sys-user-exists-oracle": "Konto użytkownika „$1“ już istnieje. SYSDBA można użyć tylko do utworzenia nowego konta!",
+    "config-postgres-old": "Korzystasz z wersji $2 oprogramowania PostgreSQL, a potrzebna jest wersja co najmniej $1.",
+    "config-sqlite-name-help": "Wybierz nazwę, która będzie identyfikować Twoją wiki.\nNie wolno używać spacji ani myślników.\nZostanie ona użyta jako nazwa pliku danych SQLite.",
+    "config-sqlite-parent-unwritable-group": "Nie można utworzyć katalogu danych <code><nowiki>$1</nowiki></code> , ponieważ katalog nadrzędny <code><nowiki>$2</nowiki></code> nie jest dostępny do zapisu przez webserwer.\n\nInstalator nie może określić, jako kttóry użytkownik działa webserwer.\nZezwól by katalog <code><nowiki>$3</nowiki></code> był dostępny do zapisu przez niego, aby przejść dalej.\nW systemie Unix/Linux wykonaj:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Nie można utworzyć katalogu danych <code><nowiki>$1</nowiki></code> , ponieważ katalog nadrzędny <code><nowiki>$2</nowiki></code> nie jest dostępny do zapisu przez webserwer.\n\nInstalator nie może określić, jako kttóry użytkownik działa webserwer.\nZezwól by katalog <code><nowiki>$3</nowiki></code> był globalnie modyfikowalny przez niego (i innych!) aby przejść dalej.\nW systemie Unix/Linux wykonaj:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Błąd podczas tworzenia katalogu dla danych „$1”.\nSprawdź lokalizację i spróbuj ponownie.",
+    "config-sqlite-dir-unwritable": "Nie można zapisać do katalogu „$1”.\nZmień uprawnienia dostępu do katalogu tak, aby serwer WWW mógł pisać do niego, a następnie spróbuj ponownie.",
+    "config-sqlite-connection-error": "$1.\n\nSprawdź katalog danych oraz nazwę bazy danych, a następnie spróbuj ponownie.",
+    "config-sqlite-readonly": "Plik <code>$1</code> nie jest zapisywalny.",
+    "config-sqlite-cant-create-db": "Nie można utworzyć pliku bazy danych <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "Brak wsparcia FTS3 dla PHP. Tabele zostały cofnięte",
+    "config-can-upgrade": "W bazie danych są już tabele MediaWiki.\nAby uaktualnić je do MediaWiki $1, kliknij '''Dalej'''.",
+    "config-upgrade-done": "Uaktualnienie kompletne.\n\nMożna teraz [ $1  rozpocząć korzystanie z wiki].\n\nJeśli chcesz ponownie wygenerować plik <code>LocalSettings.php</code>, kliknij przycisk poniżej.\nJest to '''nie zalecane''', chyba że występują problemy z twoją wiki.",
+    "config-upgrade-done-no-regenerate": "Aktualizacja zakończona.\n\nMożesz wreszcie [$1 zacząć korzystać ze swojej wiki].",
+    "config-regenerate": "Ponowne generowanie LocalSettings.php →",
+    "config-show-table-status": "Zapytanie „<code>SHOW TABLE STATUS</code>” nie powiodło się!",
+    "config-unknown-collation": "'''Uwaga''' – bazy danych używa nierozpoznanej metody porównywania.",
+    "config-db-web-account": "Konto bazy danych dla dostępu przez WWW",
+    "config-db-web-help": "Wybierz nazwę użytkownika i hasło, z których korzystać będzie serwer WWW do łączenia się z serwerem baz danych, podczas zwykłej pracy z wiki.",
+    "config-db-web-account-same": "Użyj tego samego konta, co dla instalacji",
+    "config-db-web-create": "Utwórz konto, jeśli jeszcze nie istnieje",
+    "config-db-web-no-create-privs": "Konto podane do wykonania instalacji nie ma wystarczających uprawnień, aby utworzyć nowe konto.\nKonto, które wskazałeś tutaj musi już istnieć.",
+    "config-mysql-engine": "Silnik przechowywania",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Ostrzeżenie''': wybrano MyISIAM jako silnik  składowania danych MySQL, co nie jest zalecane do użytku w MediaWiki, ponieważ:\n * ledwo obsługuje współbieżnośći ze względu na blokowanie tabel\n * jest bardziej podatna na uszkodzenie niż inne silniki\n * kod źródłowy MediaWiki nie zawsze obsługuje MyISAM tak, jak powinien\n\nJeśli instalacja MySQL obsługuje InnoDB, jest wysoce zalecane, by to je wybrać.\nJeśli instalacja MySQL nie obsługuje InnoDB, być może nadszedł czas na jej uaktualnienie.",
+    "config-mysql-only-myisam-dep": "'''Ostrzeżenie:''' MyISAM jest jedynym dostępnym mechanizmem składowania dla MySQL, który nie jest zalecany do używania z MediaWiki, ponieważ:\n* słabo obsługuje współbieżność z powodu blokowania tabel\n* jest bardziej skłonny do uszkodzeń niż inne silniki\n* kod MediaWiki nie zawsze traktuje MyISAM jak powinien\n\nTwoja instalacja MySQL nie obsługuje InnoDB, być może jest to czas na aktualizację.",
+    "config-mysql-engine-help": "'''InnoDB''' jest prawie zawsze najlepszą opcją, ponieważ posiada dobrą obsługę współbieżności.\n\n'''MyISAM''' może być szybsze w instalacjach pojedynczego użytkownika lub tylko do odczytu.\nBazy danych MyISAM mają tendencję do ulegania uszkodzeniom częściej niż bazy InnoDB.",
+    "config-mysql-charset": "Zestaw znaków bazy danych",
+    "config-mysql-binary": "binarny",
+    "config-mysql-utf8": "UTF‐8",
+    "config-mysql-charset-help": "W '''trybie binarnym''', MediaWiki zapisuje tekst UTF-8 do bazy danych w polach binarnych.\nJest on bardziej wydajny niż tryb UTF-8 w MySQL i pozwala na używanie znaków pełnego zakresu Unicode.\n\nW '''trybie UTF-8''', MySQL będzie znać zestaw znaków w jakim zakodowano dane, można też przedstawić i przekonwertuj je odpowiednio, ale nie pozwoli Ci przechowywać znaków spoza [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes podstawowej płaszczyzny wielojęzyczności].",
+    "config-site-name": "Nazwa wiki",
+    "config-site-name-help": "Ten napis pojawi się w pasku tytułowym przeglądarki oraz w różnych innych miejscach.",
+    "config-site-name-blank": "Wprowadź nazwę witryny.",
+    "config-project-namespace": "Przestrzeń nazw projektu",
+    "config-ns-generic": "Projekt",
+    "config-ns-site-name": "Taka sama jak nazwa wiki $1",
+    "config-ns-other": "Inna (należy określić)",
+    "config-ns-other-default": "MojaWiki",
+    "config-project-namespace-help": "Według przykładu Wikipedii wiele wiki przechowuje swoje strony zasad oddzielnie od stron z zawartością, w \"'''przestrzeni nazw projektu'''\".\nWszystkie tytuły stron w tej przestrzeni nazw zaczynają się od pewnego przedrostka, który można tutaj określić.\nTradycyjnie ten przedrostek wywodzi się od nazwy wiki, ale nie może zawierać pewnych znaków przestankowych takich jak \"#\" lub \":\".",
+    "config-ns-invalid": "Podana przestrzeń nazw „<nowiki>$1</nowiki>” jest nieprawidłowa.\nPodaj inną przestrzeń nazw projektu.",
+    "config-ns-conflict": "Określona przestrzeń nazw \"<nowiki>$1</nowiki>\" powoduje konflikt z domyślną przestrzenią nazw MediaWiki.\nWskaż inną przestrzeń nazw projektu.",
+    "config-admin-box": "Konto administratora",
+    "config-admin-name": "Administrator",
+    "config-admin-password": "Hasło",
+    "config-admin-password-confirm": "Hasło powtórnie",
+    "config-admin-help": "Wprowadź preferowaną nazwę użytkownika, na przykład „Jan Kowalski”.\nTej nazwy będziesz używać do logowania się do wiki.",
+    "config-admin-name-blank": "Wpisz nazwę użytkownika, który będzie administratorem.",
+    "config-admin-name-invalid": "Podana nazwa użytkownika „<nowiki>$1</nowiki>” jest nieprawidłowa.\nPodaj inną nazwę.",
+    "config-admin-password-blank": "Wprowadź hasło dla konta administratora.",
+    "config-admin-password-same": "Hasło nie może być takie samo jak nazwa użytkownika.",
+    "config-admin-password-mismatch": "Wprowadzone dwa hasła różnią się między sobą.",
+    "config-admin-email": "Adres e‐mail",
+    "config-admin-email-help": "Wpisz adres e‐mail, aby mieć możliwość odbierania e‐maili od innych użytkowników wiki, zresetowania hasła oraz otrzymywania powiadomień o zmianach na stronach z listy obserwowanych. Możesz pozostawić to pole niewypełnione.",
+    "config-admin-error-user": "Błąd wewnętrzny podczas tworzenia konta administratora o nazwie „<nowiki>$1</nowiki>”.",
+    "config-admin-error-password": "Wewnętrzny błąd podczas ustawiania hasła dla administratora „<nowiki>$1</nowiki>”: <pre>$2</pre>",
+    "config-admin-error-bademail": "Wpisałeś nieprawidłowy adres e‐mail",
+    "config-subscribe": "Zapisz się na [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce listę pocztową z ogłoszeniami o nowych wersjach].",
+    "config-subscribe-help": "Jest to lista o małej liczbie wiadomości, wykorzystywana do przesyłania informacji o udostępnieniu nowej wersji oraz istotnych sprawach dotyczących bezpieczeństwa.\nPowinieneś zapisać się na tę listę i aktualizować zainstalowane oprogramowanie MediaWiki gdy pojawia się nowa wersja.",
+    "config-subscribe-noemail": "Próbowano subskrybować listę mailingową ogłoszeń wersji bez podania adresu e-mail.\nProszę podać adres e-mail, jeśli chcesz subskrybować listę wysyłkową.",
+    "config-almost-done": "To już prawie koniec!\nMożesz pominąć pozostałe czynności konfiguracyjne i zainstalować wiki.",
+    "config-optional-continue": "Zadaj mi więcej pytań.",
+    "config-optional-skip": "Jestem już znudzony, po prostu zainstaluj wiki.",
+    "config-profile": "Profil uprawnień użytkowników",
+    "config-profile-wiki": "Otwarte wiki",
+    "config-profile-no-anon": "Wymagane utworzenie konta",
+    "config-profile-fishbowl": "Wyłącznie zatwierdzeni edytorzy",
+    "config-profile-private": "Prywatna wiki",
+    "config-profile-help": "Strony typu wiki działają najlepiej, gdy pozwolisz je edytować tak wielu osobom, jak to możliwie.\nW MediaWiki, można łatwo sprawdzić ostatnie zmiany i wycofać szkody, które są spowodowane przez naiwnych lub złośliwych użytkowników.\n\nJednakże wielu uznało MediaWiki użytecznym w różnorodnych rolach, a czasami nie jest łatwo przekonać wszystkich do korzyści ze sposobu działania wiki. Masz więc wybór.\n\nUstawienie '''{{int:config-profile-wiki}}''' pozwala każdemu na edycję, nawet bez logowania się.\nWiki z '''{{int:config-profile-no-anon}}''' zawiera dodatkowe możliwości ale może powstrzymywać potencjalnych edytorów.\n\nScenariusz '''{{int:config-profile-fishbowl}}''' umożliwia zatwierdzonym użytkownikom edycję, ale wyświetlanie stron jest powszechnie dostępne, włącznie z historią.\nUstawienie '''{{int:config-profile-private}}'' ' pozwala na wyświetlanie stron tylko zatwierdzonym użytkownikom, ta sama grupa może je edytować.\n\nBardziej skomplikowane konfiguracje uprawnień użytkowników są dostępne po zakończeniu instalacji, zobacz [//www.mediawiki.org/wiki/Manual:User_rights odpowiednią część podręcznika].",
+    "config-license": "Prawa autorskie i licencja",
+    "config-license-none": "Brak stopki z licencją",
+    "config-license-cc-by-sa": "Creative Commons – za uznaniem autora, na tych samych zasadach",
+    "config-license-cc-by": "Creative Commons – za podaniem autora",
+    "config-license-cc-by-nc-sa": "Creative Commons – za uznaniem autora, bez użycia komercyjnego, na tych samych zasadach",
+    "config-license-cc-0": "Creative Commons – zero (domena publiczna)",
+    "config-license-gfdl": "GNU licencja wolnej dokumentacji 1.3 lub nowsza",
+    "config-license-pd": "Domena publiczna",
+    "config-license-cc-choose": "Wybierz własną licencję Creative Commons",
+    "config-license-help": "Wiele publicznych wiki umieszcza wszystkie dopisane treści na [http://freedomdefined.org/Definition wolnej licencji].\nTo pomaga tworzyć poczucie wspólnoty i zachęca do długoterminowego wkładu.\nNie jest to zazwyczaj konieczne w prywatnych lub firmowych wiki.\n\nJeśli chcesz móc użyć tekstu z Wikipedii i chcesz Wikipedia mogła zaakceptować tekst skopiowany z twojej wiki, należy wybrać '''Creative Commons Attribution Share Alike'''.\n\nWikipedia używała poprzednio GNU Free Documentation License.\nGFDL jest poprawną licencję, ale trudno ją zrozumieć.\nTrudno także ponowne użyć zawartości na licencji GFDL.",
+    "config-email-settings": "Ustawienia e-maili",
+    "config-enable-email": "Włącz wychodzące wiadomości e–mail",
+    "config-enable-email-help": "Jeśli chcesz, aby działał e-mail, [http://www.php.net/manual/en/mail.configuration.php Ustawienia poczty PHP] muszą być poprawnie wprowadzone.\nJeśli nie chcesz jakichś funkcji poczty e-mail, można je wyłączyć tutaj.",
+    "config-email-user": "Włącz możliwość przesyłania e‐maili pomiędzy użytkownikami",
+    "config-email-user-help": "Zezwalaj użytkownikom na wysyłanie wzajemnie e‐maili, jeśli będą mieć włączoną tę funkcję w swoich preferencjach.",
+    "config-email-usertalk": "Włącz powiadamianie o zmianach na stronie dyskusji użytkownika",
+    "config-email-usertalk-help": "Pozwól użytkownikom otrzymywać powiadomienia o zmianach na stronie dyskusji użytkownika, jeśli będą mieć włączoną tę funkcję w swoich preferencjach.",
+    "config-email-watchlist": "Włącz powiadomienie o zmianach stron obserwowanych",
+    "config-email-watchlist-help": "Pozwól użytkownikom otrzymywać powiadomienia o zmianach na stronach obserwowanych, jeśli będą mieć włączoną tę funkcję w swoich preferencjach.",
+    "config-email-auth": "Włącz uwierzytelnianie e‐mailem",
+    "config-email-auth-help": "Jeśli ta opcja jest włączona, użytkownicy będą musieli potwierdzić swoje adresy e-mail przy użyciu wysłanego do nich łącza, gdy będą je ustawiać lub zmieniać.\nTylko uwierzytelnione adresy e-mail mogą otrzymywać wiadomości od innych użytkowników lub mailowe powiadomienia o zmianach.\nUstawienie tej opcji jest'''zalecane''' na publicznych wiki ze względu na potencjalne nadużycia funkcji poczty e-mail.",
+    "config-email-sender": "Zwrotny adres e‐mail",
+    "config-email-sender-help": "Wprowadź adres e-mail używany jako adres zwrotny wiadomości wychodzących.\nTo tam będą wysyłane szturchnięcia.\nWiele serwerów poczty wymaga, by co najmniej część nazwy domeny była prawidłowa.",
+    "config-upload-settings": "Przesyłanie obrazków i plików",
+    "config-upload-enable": "Włącz przesyłanie plików na serwer",
+    "config-upload-help": "Przesyłanie plików potencjalnie wystawia serwer na zagrożenia.\nWięcej informacji na ten temat można znaleźć w [//www.mediawiki.org/wiki/Manual:Security sekcji zabezpieczeń] podręcznika.\n\nAby włączyć przesyłanie plików, zmień właściwości podkatalogu <code>images</code> katalogu głównego MediaWiki tak, aby serwer sieci web mógł zapisywać do niego.\nNastępnie włącz tę opcję.",
+    "config-upload-deleted": "Katalog dla usuniętych plików",
+    "config-upload-deleted-help": "Wybierz katalog, w którym będzie archiwum usuniętych plików.\nNajlepiej, aby nie był on dostępny z internetu.",
+    "config-logo": "Adres URL logo",
+    "config-logo-help": "Domyślny motyw MediaWiki zawiera miejsce na logo wielkości 135 x 160 pikseli powyżej menu na pasku bocznym.\nPrześlij obrazek o odpowiednim rozmiarze, a następnie wpisz jego URL tutaj.\n\nMożesz użyć <code>$wgStylePath</code> lub <code>$wgScriptPath</code> jeżeli twoje logo jest relatywne do tych ścieżek.\n\nJeśli nie chcesz logo, pozostaw to pole puste.",
+    "config-instantcommons": "Włącz Instant Commons",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] jest funkcją, która pozwala wiki używać obrazów, dźwięków i innych mediów znalezionych na  witrynie [//commons.wikimedia.org/ Wikimedia Commons].\nAby to zrobić, MediaWiki wymaga dostępu do internetu.\n\nAby uzyskać więcej informacji na temat tej funkcji, w tym instrukcje dotyczące sposobu ustawiania go na wiki innych niż Wikimedia Commons, sprawdź w [//mediawiki.org/wiki/Manual:$wgForeignFileRepos podręczniku].",
+    "config-cc-error": "Wybieranie licencji Creative Commons nie dało wyniku.\nWpisz nazwę licencji ręcznie.",
+    "config-cc-again": "Wybierz jeszcze raz...",
+    "config-cc-not-chosen": "Wybierz którą chcesz licencję Creative Commons i kliknij „Dalej”.",
+    "config-advanced-settings": "Konfiguracja zaawansowana",
+    "config-cache-options": "Ustawienia buforowania obiektów",
+    "config-cache-help": "Buforowanie obiekto jest używane aby przyspieszyć MediaWiki przez trzymanie w pamięci podręcznej często używanych danych.\nŚrednie oraz duże witryny są wysoce zachęcane by je włączyć, a małe witryny także dostrzegą korzyści.",
+    "config-cache-none": "Brak buforowania (wszystkie funkcje będą działać, ale mogą wystąpić kłopoty z wydajnością na dużych witrynach wiki)",
+    "config-cache-accel": "Buforowania obiektów PHP (APC, XCache lub WinCache)",
+    "config-cache-memcached": "Użyj Memcached (wymaga dodatkowej instalacji i konfiguracji)",
+    "config-memcached-servers": "Serwery Memcached:",
+    "config-memcached-help": "Lista adresów IP do wykorzystania przez Memcached.\nAdresy powinny być umieszczane po jednym w linii i określać również wykorzystywany port. Na przykład:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "Został wybrany Memcached jako typ pamięci podręcznej, ale nie określono żadnych serwerów.",
+    "config-memcache-badip": "Wprowadzono nieprawidłowy adres IP dla Memcached:  $1.",
+    "config-memcache-noport": "Nie określono portu dla serwera Memcached:  $1.\nJeśli nie znasz numeru portu, wartością domyślną jest 11211.",
+    "config-memcache-badport": "Numery portu Memcached powinny zawierać się pomiędzy $1 i $2.",
+    "config-extensions": "Rozszerzenia",
+    "config-extensions-help": "Rozszerzenia wyżej wymienione zostały wykryte w katalogu <code>./extensions</code>.\n\nMogą one wymagać dodatkowych czynności konfiguracyjnych, ale można je teraz włączyć",
+    "config-install-alreadydone": "'''Uwaga''' – wydaje się, że MediaWiki jest już zainstalowane, a obecnie próbujesz zainstalować je ponownie.\nPrzejdź do następnej strony.",
+    "config-install-begin": "Po naciśnięciu \"{{int:config-continue}}\", rozpocznie się instalacja MediaWiki.\nJeśli nadal chcesz dokonać zmian, naciśnij \"{{int:config-back}}\".",
+    "config-install-step-done": "gotowe",
+    "config-install-step-failed": "nieudane",
+    "config-install-extensions": "Włącznie z rozszerzeniami",
+    "config-install-database": "Konfigurowanie bazy danych",
+    "config-install-schema": "Tworzenie schematu",
+    "config-install-pg-schema-not-exist": "Schemat PostgreSQL nie istnieje.",
+    "config-install-pg-schema-failed": "Utworzenie tabel nie powiodło się.\nUpewnij się, że użytkownik „$1” może zapisywać do schematu „$2”.",
+    "config-install-pg-commit": "Zatwierdzanie zmian",
+    "config-install-pg-plpgsql": "Sprawdzanie języka PL/pgSQL",
+    "config-pg-no-plpgsql": "Musisz zainstalować język PL/pgSQL w bazie danych $1",
+    "config-pg-no-create-privs": "Konto, które zostało określone dla instalacji nie ma wystarczających uprawnień, aby utworzyć konto.",
+    "config-pg-not-in-role": "Konto określone dla użytkownika sieci już istnieje.\nKonto określone dla instalacji nie ma uprawnień administratora ani nie jest przynależy do roli użytkownika sieci web, więc nie można utworzyć obiektów stanowiących własność użytkownika sieci.\n\nMediaWiki wymaga obecnie, by tabele były własnością konta zwykłego użytkownika. Podaj inną nazwę konta użytkownika, lub kliknij przycisk \"Wstecz\" i podaj nazwę konta użytkownika instalatora, które posiada odpowiednie uprawnienia.",
+    "config-install-user": "Tworzenie użytkownika bazy danych",
+    "config-install-user-alreadyexists": "Konto użytkownika „$1“ już istnieje",
+    "config-install-user-create-failed": "Tworzenie użytkownika \"$1\" nie powiodło się: $2",
+    "config-install-user-grant-failed": "Przyznanie uprawnień użytkownikowi „$1” nie powiodło się – $2",
+    "config-install-user-missing": "Nie istnieje konto użytkownika „$1“.",
+    "config-install-user-missing-create": "Określony użytkownik \"$1\" nie istnieje.\nKliknij poniższe pole wyboru „utwórz konto\" jeśli chcesz go utworzyć.",
+    "config-install-tables": "Tworzenie tabel",
+    "config-install-tables-exist": "'''Uwaga''' – wygląda na to, że tabele MediaWiki już istnieją.\nPomijam tworzenie tabel.",
+    "config-install-tables-failed": "'''Błąd''' – tworzenie tabeli nie powiodło się z powodu błędu – $1",
+    "config-install-interwiki": "Wypełnianie tabeli domyślnymi interwiki",
+    "config-install-interwiki-list": "Nie można odnaleźć pliku <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "'''Uwaga''' – wygląda na to, że tabela interwiki ma już jakieś wpisy.\nTworzenie domyślnej listy pominięto.",
+    "config-install-stats": "Inicjowanie statystyki",
+    "config-install-keys": "Generowanie tajnych kluczy",
+    "config-insecure-keys": "'''Ostrzeżenie:''' {{PLURAL:$2|Klucz bezpieczeństwa|Klucze bezpieczeństwa|Klucze bezpieczeństwa}} ($1) utworzone podczas instalacji {{PLURAL:$2|utworzony podczas instalacji nie jest|utworzone podczas instalacji nie są|utworzone podczas instalacji nie są}} w pełni bezpieczne. Być może warto wygenerować {{PLURAL:$2|własny klucz|własne klucze|własne klucze}}.",
+    "config-install-sysop": "Tworzenie konta administratora",
+    "config-install-subscribe-fail": "Nie można zapisać na listę „mediawiki-announce“ – $1",
+    "config-install-subscribe-notpossible": "cURL nie jest zainstalowany, więc allow_url_fopen nie jest dostępne.",
+    "config-install-mainpage": "Tworzenie strony głównej z domyślną zawartością",
+    "config-install-extension-tables": "Tworzenie tabel dla aktywnych rozszerzeń",
+    "config-install-mainpage-failed": "Nie udało się wstawić strony głównej – $1",
+    "config-install-done": "'''Gratulacje!'''\nUdało Ci się zainstalować MediaWiki.\n\nInstalator wygenerował plik konfiguracyjny <code>LocalSettings.php</code>.\n\nMusisz go pobrać i umieścić w katalogu głównym Twojej instalacji wiki (tym samym katalogu co index.php). Pobieranie powinno zacząć się automatycznie.\n\nJeżeli pobieranie nie zostało zaproponowane lub jeśli użytkownik je anulował, można ponownie uruchomić pobranie klikając poniższe łącze:\n\n$3\n\n'''Uwaga''': Jeśli nie zrobisz tego teraz, wygenerowany plik konfiguracyjny nie będzie już dostępny po zakończeniu instalacji.\n\nPo załadowaniu pliku konfiguracyjnego możesz '''[$2 wejść na wiki]'''.",
+    "config-download-localsettings": "Pobierz <code>LocalSettings.php</code>",
+    "config-help": "pomoc",
+    "config-nofile": "Nie udało się odnaleźć pliku \"$1\". Czy nie został usunięty?",
+    "config-extension-link": "Czy wiesz, że twoja wiki obsługuje [//www.mediawiki.org/wiki/Manual:Extensions/pl rozszerzenia]?\n\nMożesz przejrzeć [//www.mediawiki.org/wiki/Category:Extensions_by_category rozszerzenia według kategorii] lub [//www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] aby zobaczyć pełną listę rozszerzeń.",
+    "mainpagetext": "'''Instalacja MediaWiki powiodła się.'''",
+    "mainpagedocfooter": "Zobacz [//meta.wikimedia.org/wiki/Help:Contents przewodnik użytkownika] w celu uzyskania informacji o działaniu oprogramowania wiki.\n\n== Na początek ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings/pl Lista ustawień konfiguracyjnych]\n* [//www.mediawiki.org/wiki/Manual:FAQ/pl MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Komunikaty o nowych wersjach MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Przetłumacz MediaWiki na swój język]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/pms.json b/includes/installer/i18n/pms.json
new file mode 100644 (file)
index 0000000..e112561
--- /dev/null
@@ -0,0 +1,304 @@
+{
+    "@metadata": {
+        "authors": [
+            "Borichèt",
+            "Dragonòt",
+            "Krinkle",
+            "아라"
+        ]
+    },
+    "config-desc": "L'instalador për mediaWiki",
+    "config-title": "Anstalassion ëd MediaWiki $1",
+    "config-information": "Anformassion",
+    "config-localsettings-upgrade": "A l'é stàit trovà n'archivi <code>LocalSettings.php</code>.\nPër agiorné cost'anstalassion, ch'a anserissa ël valor ëd <code>$wgUpgradeKey</code> ant la casela sì-sota.\nA la trovrà an LocalSetting.php.",
+    "config-localsettings-cli-upgrade": "N'archivi <code>LocalSettings.php</code> a l'é stàit trovà.\nPër agiorné sta instalassion, për piasì fà anvece giré <code>update.php</code>",
+    "config-localsettings-key": "Ciav d'agiornament:",
+    "config-localsettings-badkey": "La ciav ch'it l'has dàit a l'é pa giusta.",
+    "config-upgrade-key-missing": "A l'é stàita trovà n'istalassion esistenta ëd MediaWiki.\nPër agiorné soa istalassion, për piasì ch'a buta la linia sì-sota al fond ëd sò <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "L'esistent <code>LocalSettings.php</code> a smija esse ancomplet.\nLa variàbil $1 a l'é nen ampostà.\nPër piasì, ch'a modìfica <code>LocalSettings.php</code> ëd fasson che costa variàbil a sia ampostà, e ch'a sgnaca «{{int:Config-continue}}».",
+    "config-localsettings-connection-error": "A l'é ancapitaje n'eror an colegand-se a la base ëd dàit an dovrand j'ampostassion specificà an <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Për piasì, ch'a coregia cost'ampostassion e ch'a preuva torna.\n\n$1",
+    "config-session-error": "Eror an fasend parte la session: $1",
+    "config-session-expired": "Ij sò dat ëd session a smijo scadù.\nLe session a son configurà për na durà ëd $1.\nA peul aumenté sòn an ampostand <code>session.gc_maxlifetime</code> an php.ini.\nCh'a anandia torna ël process d'instalassion.",
+    "config-no-session": "Ij sò dat ëd session a son përdù!\nCh'a contròla sò php.ini e ch'as sigura che <code>session.save_path</code> a sia ampostà ant ël dossié giust.",
+    "config-your-language": "Toa lenga:",
+    "config-your-language-help": "Selessioné na lenga da dovré durant ël process d'instalassion.",
+    "config-wiki-language": "Lenga dla Wiki:",
+    "config-wiki-language-help": "Selession-a la lenga dont la wiki a sarà prevalentement scrivùa.",
+    "config-back": "← André",
+    "config-continue": "Continua →",
+    "config-page-language": "Lenga",
+    "config-page-welcome": "Bin  ëvnù a MediaWiki!",
+    "config-page-dbconnect": "Coleghesse a la base ëd dàit",
+    "config-page-upgrade": "Agiorné l'instalassion esistenta",
+    "config-page-dbsettings": "Ampostassion dla base ëd dàit",
+    "config-page-name": "Nòm",
+    "config-page-options": "Opsion",
+    "config-page-install": "Instala",
+    "config-page-complete": "Completa!",
+    "config-page-restart": "Fé torna parte l'instalassion",
+    "config-page-readme": "Lesme",
+    "config-page-releasenotes": "Nòte ëd publicassion",
+    "config-page-copying": "Copié",
+    "config-page-upgradedoc": "Agiorné",
+    "config-page-existingwiki": "Wiki esistenta",
+    "config-help-restart": "Veul-lo scancelé tùit ij dat salvà ch'a l'ha anserì e anandié torna ël process d'instalassion?",
+    "config-restart": "É!, felo torna parte",
+    "config-welcome": "=== Contròj d'ambient ===\nDle verìfiche ëd base a son fàite për vëdde se st'ambient a va bin për l'instalassion ëd MediaWiki.\nS'a l'ha da manca d'agiut durant l'anstalassion, a dovrìa fornì j'arzultà dë sti contròj.",
+    "config-copyright": "=== Drit d'Autor e Condission ===\n\n$1\n\nCost-sì a l'é un programa lìber e a gràtis: a peul ridistribuilo e/o modifichelo sota le condission dla licensa pùblica general GNU com publicà da la Free Software Foundation; la version 2 dla Licensa, o (a toa sèrnìa) qualsëssìa version pi recenta.\n\nCost programa a l'é distribuì ant la speransa ch'a sia ùtil, ma '''sensa gnun-e garansìe'''; sensa gnanca la garansia implìssita ëd '''comersiabilità''' o '''d'esse adat a un but particolar'''.\n\nA dovrìa avèj arseivù <doclink href=Copying>na còpia ëd la licensa pùblica general GNU</doclink> ansema a sto programa; dësnò, ch'a scriva a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA opura [http://www.gnu.org/copyleft/gpl.html ch'a la lesa an linia].",
+    "config-sidebar": "* [//www.mediawiki.org Intrada MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents Guida dl'Utent]\n* [//www.mediawiki.org/wiki/Manual:Contents Guida dl'Aministrator]\n* [//www.mediawiki.org/wiki/Manual:FAQ Soens an ciamo]\n----\n* <doclink href=Readme>Ch'am lesa</doclink>\n* <doclink href=ReleaseNotes>Nòte ëd publicassion</doclink>\n* <doclink href=Copying>Còpia</doclink>\n* <doclink href=UpgradeDoc>Agiornament</doclink>",
+    "config-env-good": "L'ambient a l'é stàit controlà.\nIt peule instalé MediaWiki.",
+    "config-env-bad": "L'ambient a l'é stàit controlà.\nIt peule pa instalé MediaWiki.",
+    "config-env-php": "PHP $1 a l'é instalà.",
+    "config-env-php-toolow": "PHP $1 a l'é instalà.\nAnt tùit ij cas, MediaWiki a ciama PHP $2 o pi neuv.",
+    "config-unicode-using-utf8": "As deuvra utf8_normalize.so ëd Brion Vibber për la normalisassion Unicode.",
+    "config-unicode-using-intl": "As deuvra l'[http://pecl.php.net/intl estension intl PECL] për la normalisassion Unicode.",
+    "config-unicode-pure-php-warning": "'''Avis:''' L'[http://pecl.php.net/intl estension intl PECL] a l'é pa disponìbil për gestì la normalisassion Unicode, da già che l'implementassion an PHP pur a faliss për lentëssa.\nS'a gestiss un sit a àut tràfich, a dovrìa lese cheicòs an sla [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalisassion Unicode].",
+    "config-unicode-update-warning": "'''Avis:''' La version instalà dlë spassiador ëd normalisassion Unicode a deuvra na version veja ëd la librarìa dël [http://site.icu-project.org/ proget ICU].\nA dovrìa fé n'[//www.mediawiki.org/wiki/Unicode_normalization_considerations agiornament] s'a l'é anteressà a dovré Unicode.",
+    "config-no-db": "Impossìbil trové un pilòta ëd base ëd dàit bon! A dev instalé un pilòta ëd base ëd dàit për PHP.\nLe sòrt ëd database ch'a ven-o a son apogià: $1.\n\nS'a l'é ansima a 'n servissi partagià, ch'a ciama a sò fornidor ëd servissi d'instalé un pilòta ëd base ëd dàit compatìbil.\nS'a l'é compilasse PHP chiel-midem, ch'a lo configura torna con un client ëd base ëd dàit abilità, për esempi an dovrand <code>./configure --with-mysql</code>.\nS'a l'ha instalà PHP dai pachèt Debian o Ubuntu, antlora a dev ëdcò istalé ël mòdul php5-mysql.",
+    "config-outdated-sqlite": "'''Avis''': chiel a l'ha SQLite $1, che a l'é pi vej che la version mìnima dont a-i é damanca $2. SQLite a sarà pa disponìbil.",
+    "config-no-fts3": "'''Avis''': SQLite a l'é compilà sensa ël mòdul [//sqlite.org/fts3.html FTS3], le funsion d'arserca a saran pa disponìbij su cost motor.",
+    "config-register-globals": "'''Avis: L'opsion <code>[http://php.net/register_globals register_globals]</code> ëd PHP a l'é abilità.'''\n'''Ch'a la disabìlita s'a peul.'''\nMediaWiki a marcërà, ma sò servent a l'é espòst a 'd possìbij vunerabilità ëd sicurëssa.",
+    "config-magic-quotes-runtime": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] a l'é ativ!'''\nCosta opsion a danegia ij dat d'intrada an manera pa prevedìbil.\nA peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.",
+    "config-magic-quotes-sybase": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] a l'é ativ!'''\nCosta opsion a danegia ij dat d'intrada an manera pa prevedìbil.\nA peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.",
+    "config-mbstring": "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] a l'é ativ!'''\nCosta opsion a càusa d'eror e a peul danegié ij dat d'intrada an manera pa prevedìbil.\nA peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.",
+    "config-ze1": "'''Fatal: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] a l'é ativ!'''\nCosta opsion a càusa dij bigat afros con MediaWiki.\nA peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.",
+    "config-safe-mode": "'''Avis:''' [http://www.php.net/features.safe-mode Safe mode] ëd PHP a l'é ativ.\nA peul causé ëd problema, dzortut s'as deuvro ël cariament d'archivi e ël manteniment ëd <code>math</code>.",
+    "config-xml-bad": "Mòdul XML ed PHP mancant.\nMediaWiki a l'ha da manca dle funsion an sto mòdul e a travajërà pa an costa configurassion.\nS'a fa giré mandrake, ch'a instala ël pachet php-xml.",
+    "config-pcre": "A smija che ël mòdul d'apògg PCRE a sia mancant.\nMediaWiki a l'ha da manca dle funsion d'espression regolar Perl-compatìbij për marcé.",
+    "config-pcre-no-utf8": "'''Fatal''': ël mòdul PCRE ëd PHP a smija esse compilà sensa l'apògg PCRE_UTF8.\nMediaWiki a ciama l'apògg d'UTF8 për marcé për da bin.",
+    "config-memory-raised": "<code>memory_limit</code> ëd PHP a l'é $1, aussà a $2.",
+    "config-memory-bad": "'''Avis:''' <code>memory_limit</code> ëd PHP a l'é $1.\nSossì a l'é probabilment tròp bass.\nL'instalassion a peul falì!",
+    "config-ctype": "'''Fatal''': PHP a dev esse compilà con l'apògg për l'[http://www.php.net/manual/en/ctype.installation.php extension Ctype].",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] a l'é instalà",
+    "config-apc": "[http://www.php.net/apc APC] a l'é instalà",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache]  a l'é instalà",
+    "config-no-cache": "'''Avis:''' As treuva pa [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache]. Ël buté d'oget an memòria local a l'é pa abilità.",
+    "config-mod-security": "'''Avis''': Sò servent për l'aragnà a l'ha [http://modsecurity.org/ mod_security] abilità. Se mal configurà, a peul causé dij problema për MediaWiki o d'àutri programa ch'a përmëtto a j'utent dë spedì un contnù qualsëssìa.\nCh'a fasa arferiment a la [http://modsecurity.org/documentation/ mod_security documentassion] o ch'a contata l'echip ëd sò servissi s'a-j rivo dj'eror casuaj.",
+    "config-diff3-bad": "GNU diff3 pa trovà.",
+    "config-imagemagick": "Trovà ImageMagick: <code>$1</code>.\nLa miniaturisassion ëd figure a sarà abilità s'it abìlite le carie.",
+    "config-gd": "Trovà la librarìa gràfica antëgrà GD.\nLa miniaturisassion ëd figure a sarà abilità s'a abìlita ij cariament.",
+    "config-no-scaling": "As treuva pa la librarìa GD o ImageMagick.\nLa miniaturisassion ëd figure a sarà disabilità.",
+    "config-no-uri": "'''Eror:''' As peul pa determiné l'URI corenta.\nInstalassion abortìa.",
+    "config-no-cli-uri": "'''Avis''': pa gnun --scriptpath specificà, a sarà dovrà ël predefinì: <code>$1</code>.",
+    "config-using-server": "Utilisassion dël nòm ëd servent \"<nowiki>$1</nowiki>\".",
+    "config-using-uri": "Utilisassion ëd l'anliura ëd servent «<nowiki>$1$2</nowiki>».",
+    "config-uploads-not-safe": "'''Avis:''' Sò dossié stàndard për carié <code>$1</code> a l'é vulneràbil a l'esecussion ëd qualsëssìa senari.\nBele che MediaWiki a contròla j'aspet ëd sicurëssa ëd tùit j'archivi carià, a l'é motobin arcomandà ëd [//www.mediawiki.org/wiki/Manual:Security#Upload_security saré ës përtus ëd sicurëssa] prima d'abilité ij cariament.",
+    "config-no-cli-uploads-check": "'''Avis:''' Toa cartela predefinìa për j-amportassion (<code>$1</code>) a l'é nen controlà a propòsit ëd la vulnerabilità\nd'esecussion ëd senari arbitrari durant l'istalassion CLI.",
+    "config-brokenlibxml": "Sò sistema a l'ha na combinassion ëd version PHP e libxml2 che a l'ha dij bigat e a peul provoché la corussion ëd dat ëstërmà an MediaWiki e d'àutre aplicassion për l'aragnà.\nCh'a agiorna a PHP 5.2.9 o pi neuv e libxml2 2.7.3 o pi neuv ([//bugs.php.net/bug.php?id=45996 bug filed with PHP]).\nIstalassion abortìa.",
+    "config-using531": "MediaWiki a peul pa esse dovrà con PHP $1 a motiv d'un bigat ch'a ìmplica ij paràmetr d'arferiment a <code>__call()</code>.\nCh'a agiorna a PHP 5.3.2 o pi neuv, o ch'a torna andré a PHP 5.3.0 për arzòlve ës problema.\nIstalassion abortìa.",
+    "config-suhosin-max-value-length": "Suhosin a l'é instalà e a lìmita la longheur dël paràmetr GET a $1 byte. Ël component ResourceLoader ëd MediaWiki a travajerà an rispetand ës lìmit, ma sòn a degraderà le prestassion. Se possìbil, a dovrìa amposté suhosin.get.max_value_lenght a 1024 o pi àut an <code>php.ini</code>, e amposté <code>$wgResourceLoaderMaxQueryLength</code> al midem valor an LocalSettings.php .",
+    "config-db-type": "Sòrt ëd base ëd dàit:",
+    "config-db-host": "Ospitant ëd la base ëd dàit:",
+    "config-db-host-help": "Se sò servent ëd base ëd dàit a l'é su un servent diferent, ch'a anserissa ambelessì ël nòm dl'ospitant o l'adrëssa IP.\n\nS'a deuvra n'ospitalità partagià, sò fornidor d'ospitalità a dovrìa deje ël nòm dl'ospitant giust ant soa documentassion.\n\nSe a anstala su un servent Windows e a deuvra MySQL, dovré «localhost» a podrìa funsioné nen com nòm dël servent. S'a marcia nen, ch'a preuva «127.0.0.1» com adrëssa IP local.\n\nS'a deuvra PostgresSQL, ch'a lassa sto camp bianch për coleghesse a travers un socket UNIX.",
+    "config-db-host-oracle": "TNS dla base ëd dàit:",
+    "config-db-host-oracle-help": "Anserì un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nòm ëd conession local] bon; n'archivi tnsnames.ora a dev esse visìbil da costa anstalassion..<br />S'a deuvra le librarìe cliente 10g o pi neuve a peul ëdcò dovré ël métod ëd nominassion [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+    "config-db-wiki-settings": "Identìfica sta wiki",
+    "config-db-name": "Nòm dla base ëd dàit:",
+    "config-db-name-help": "Ch'a serna un nòm ch'a identìfica soa wiki.\nA dovrìa conten-e gnun ëspassi.\n\nS'a deuvra n'ospitalità partagià, sò fornidor ëd l'ospitalità a-j darà un nòm ëd base ëd dàit specìfich da dovré o a lassrà ch'a lo crea via un panel ëd contròl.",
+    "config-db-name-oracle": "Schema dla base ëd dàit:",
+    "config-db-account-oracle-warn": "A-i é tre possibilità mantnùe për istalé Oracle tanme terminal ëd base ëd dàit:\n\nS'a veul creé un cont ëd base ëd dàit com part dël process d'istalassion, për piasì ch'a fornissa un cont con ël ròl SYSDBA com cont ëd base ëd dàit për l'istalassion e ch'a specìfica le credensiaj vorsùe për ël cont d'acess an sl'aragnà, dësnò a peul ëdcò creé ël cont d'acess an sl'aragnà manualment e mach fornì col cont (se a l'ha ij përmess necessari për creé j'oget dë schema) o fornì doi cont diferent, un con ij privilegi ëd creé e un limità për l'acess an sla Ragnà.\n\nIj senari për creé un cont con ij privilegi necessari a peul esse trovà ant la cartela «manutension/oracol/» ëd costa istalassion. Ch'a ten-a da ment che dovrand un cont limità a disabiliterà tute le funsion ëd manutension con ël cont predefinì.",
+    "config-db-install-account": "Cont d'utent për l'instalassion.",
+    "config-db-username": "Nòm d'utent dla base ëd dàit:",
+    "config-db-password": "Ciav dla base ëd dàit:",
+    "config-db-password-empty": "Për piasì, ch'a anserissa na ciav për ël neuv utent ëd base ëd dàit: $1.\nCon tut ch'a sia possìbil creé d'utent sensa ciav, a l'é pa na ròba sigura.",
+    "config-db-install-username": "Ch'a nserissa lë stranòm che a sarà dovrà për coleghesse a la base ëd dàit durant ël process d'istalassion.\nCost-sì a l'é nen lë stranòm dël cont MediaWiki; a l'é lë stranòm për soa base ëd dàit.",
+    "config-db-install-password": "Ch'a anserissa la ciav che a sarà dovrà për coleghesse a la base ëd dàit durant ël process d'istalassion.\nCosta-sì a l'é nen la ciav dël cont MediaWiki; a l'é la ciav për soa base ëd dàit.",
+    "config-db-install-help": "Ch'a anserissa lë stranòm d'utent e la ciav che a saran dovrà për coleghesse a la base ëd dàit durant ël process d'instalassion.",
+    "config-db-account-lock": "Dovré ij midem stranòm d'utent e ciav durant j'operassion normaj",
+    "config-db-wiki-account": "Cont d'utent për j'operassion normaj",
+    "config-db-wiki-help": "Ch'a anseriss lë stranòm d'utent e la ciav che a saran dovrà për coleghesse a la base ëd dàit durant j'operassion normaj dla wiki.\nS'ël cont a esist pa, e ël cont d'instalassion a l'ha ij privilegi ch'a-i van, sto cont utent a sarà creà con ij privilegi mìnin për fé marcé la wiki.",
+    "config-db-prefix": "Prefiss dle tàule dla base ëd dàit:",
+    "config-db-prefix-help": "S'a l'ha dabzògn ëd partagé na base ëd dàit an tra vàire wiki, o tra MediaWiki e n'àutra aplicassion dl'aragnà, a peul serne ëd gionté un prefiss a tùit ij nòm ëd le tàule për evité ëd conflit.\nCh'a deuvra pa dë spassi.\n\nCost camp a l'é lassà normalment veuid.",
+    "config-db-charset": "Ansema dij caràter dla base ëd dàit",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binari",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 compatìbil a l'andaré con UTF-8",
+    "config-charset-help": "'''Avis:''' S'a deuvra '''UTF-8 compatìbil a l'andaré''' su MySQL 4.1+, e peui a fa na còpia con <code>mysqldump</code>, a podrìa scancelé tùit ij caràter nen-ASCII, dësbland sensa speranse soe còpie!\n\nAn '''manera binaria''', MediaWiki a memorisa ël test UTF-8 an dij camp binari ant la base ëd dàit.\nSossì a l'é pi eficient che la manera UTF-8 ëd MySQL, e a përmët ëd dovré tut l'ansema ëd caràter Unicode.\nAn '''manera UTF-8''', MySQL a arconòss an che ansema ëd caràter a son ij sò dat, e a peul presenteje e convertije apropriatament, ma a-j lassrà pa memorisé ij caràter dzora al [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes pian multilenghe ëd base].",
+    "config-mysql-old": "A-i é da manca ëd MySQL $1 o pi recent, chiel a l'ha $2.",
+    "config-db-port": "Porta dla base ëd dàit:",
+    "config-db-schema": "Schema për MediaWiki",
+    "config-db-schema-help": "Lë schema sì-sota a l'é ëd sòlit giust.\nCh'a lo cangia mach s'a sa ch'a n'ha da manca.",
+    "config-pg-test-error": "Impossìbil coleghesse a la base ëd dàit '''$1'''; $2",
+    "config-sqlite-dir": "Dossié dij dat SQLite:",
+    "config-sqlite-dir-help": "SQLite a memorisa tùit ij dat ant n'archivi ùnich.\n\nËl dossié che chiel a forniss a dev esse scrivìbil dal servent durant l'instalassion.\n\nA dovrìa '''pa''' esse acessìbil da l'aragnà, sossì a l'é për sòn ch'i l'oma pa butalo andova a-i son ij sò file PHP.\n\nL'instalador a scriverà n'archivi <code>.htaccess</code> ansema con chiel, ma se lòn a faliss quaidun a peul intré an soa base ëd dàit originaria.\nLòn a comprend ij dat brut ëd l'utent (adrëssa ëd pòsta eletrònica, ciav tërbola) e ëdcò le revision scancelà e d'àutri dat segret ëd la wiki.\n\nCh'a consìdera ëd buté la base ëd dàit tuta antrega da n'àutra part, për esempi an <code>/var/lib/mediawiki/yourwiki</code>.",
+    "config-oracle-def-ts": "Spassi dla tàula dë stàndard:",
+    "config-oracle-temp-ts": "Spassi dla tàula temporani:",
+    "config-support-info": "MediaWiki a manten ij sistema ëd base ëd dàit sì-dapress:\n\n$1\n\nS'a vëd pa listà sì-sota ël sistema ëd base ëd dàit ch'a preuva a dovré, antlora va andaré a j'istrussion dl'anliura sì-dzora për abilité ël manteniment.",
+    "config-support-mysql": "* $1 e l'é l'obietiv primari për MediaWiki e a l'é mej mantnù ([http://www.php.net/manual/en/mysql.installation.php com compilé PHP con ël manteniment MySQL])",
+    "config-support-postgres": "* $1 e l'é un sistema ëd base ëd dàit popolar a sorgiss duverta com alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php com compilé PHP con ël manteniment ëd PostgreSQL]). A peulo ess-ie chèich cit bigat, e a l'é nen arcomandà ëd dovrelo an n'ambient ëd produssion.",
+    "config-support-sqlite": "* $1 e l'é un sistema ëd base ëd dàit leger che a l'é motobin bin mantnù ([http://www.php.net/manual/en/pdo.installation.php com compilé PHP con ël manteniment ëd SQLite], a deuvra PDO)",
+    "config-support-oracle": "* $1 a l'é na base ëd dàit comersial për j'amprèise. ([http://www.php.net/manual/en/oci8.installation.php Com compilé PHP con ël manteniment OCI8])",
+    "config-header-mysql": "Ampostassion MySQL",
+    "config-header-postgres": "Ampostassion PostgreSQL",
+    "config-header-sqlite": "Ampostassion SQLite",
+    "config-header-oracle": "Ampostassion Oracle",
+    "config-invalid-db-type": "Sòrt ëd ëd base ëd dàit pa bon-a",
+    "config-missing-db-name": "A dev buteje un valor për \"Nòm ëd la base ëd dàit\"",
+    "config-missing-db-host": "A dev buteje un valor për \"l'òspit ëd la base ëd dàit\"",
+    "config-missing-db-server-oracle": "A dev buteje un valor për \"TNS ëd la base ëd dat\"",
+    "config-invalid-db-server-oracle": "TNS ëd la base ëd dat pa bon \"$1\".\nDovré mach dle litre ASCII (a-z, A-Z), nùmer (0-9), sotlignadure (_) e pontin (.).",
+    "config-invalid-db-name": "Nòm ëd la base ëd dàit pa bon \"$1\".\nDovré mach litre ASCII (a-z, A-Z), nùmer (0-9), sotlignadure (_) e tratin (-).",
+    "config-invalid-db-prefix": "Prefiss dla base ëd dàit pa bon \"$1\".\nDovré mach litre ASCII (a-z, A-Z), nùmer (0-9), sotlignadure (_) e tratin (-).",
+    "config-connection-error": "$1.\n\nControla l'ospitant, lë stranòm d'utent e la ciav sì-sota e prové torna.",
+    "config-invalid-schema": "Schema pa bon për MediaWiki \"$1\".\nDovré mach litre ASCII (a-z, A-Z), nùmer (0-9) e sotlignadure (_).",
+    "config-db-sys-create-oracle": "L'istalador a arconòss mach ij cont SYSDBA durant la creassion d'un cont neuv.",
+    "config-db-sys-user-exists-oracle": "Ël cont utent \"$1\" a esist già. SYSDBA a peul mach esse dovrà për creé un cont neuv!",
+    "config-postgres-old": "A-i é da manca ëd PostgreSQL $1 o pi recent, chiel a l'ha $2.",
+    "config-sqlite-name-help": "Serne un nòm ch'a identìfica soa wiki.\nDovré nì dë spassi nì ëd tratin.\nSòn a sarà dovrà për ël nòm ëd l'archivi ëd dat SQLite.",
+    "config-sqlite-parent-unwritable-group": "As peul pa creesse ël dossié ëd dat <code><nowiki>$1</nowiki></code>, përchè ël dossié a mont <code><nowiki>$2</nowiki></code> a l'é pa scrivìbil dal servent.\n\nL'instalador a l'ha determinà sota che utent a gira sò servent.\nFé an manera che ël dossié <code><nowiki>$3</nowiki></code> a sia scrivìbil da chiel për continué.\nSu un sistema Unix/Linux buté:\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "As peul pa creesse ël dossié ëd dat <code><nowiki>$1</nowiki></code>, përchè ël dossié a mont <code><nowiki>$2</nowiki></code> a l'é pa scrivìbil dal servent.\n\nL'instalador a peul pa determiné l'utent sota ël qual a gira sò servent.\nFé an manera che ël dossié <code><nowiki>$3</nowiki></code> a sia scrivìbil globalment da chiel (e da d'àutri) për continué.\nSu un sistema Unix/Linux buté:\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Eror an creand ël dossié ëd dat \"$1\".\nCh'a contròla la locassion e ch'a preuva torna.",
+    "config-sqlite-dir-unwritable": "As peul pa scrivse an sël dossié \"$1\".\nModifiché ij sò përmess an manera che ël servent a peula scrivje ansima, e prové torna.",
+    "config-sqlite-connection-error": "$1.\n\nControlé ël dossié ëd dat e ël nòm ëd la base ëd dàit ambelessì-sota e prové torna.",
+    "config-sqlite-readonly": "L'archivi <code>$1</code> a l'é nen scrivìbil.",
+    "config-sqlite-cant-create-db": "As peul pa cresse l'archivi ëd base ëd dàit <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "PHP a l'ha pa ël supòrt ëd FTS3, le tàule a son degradà",
+    "config-can-upgrade": "A-i é dle tàule MediaWiki an costa base ëd dàit.\nPër agiorneje a MediaWiki $1, ch'a sgnaca su '''Continué'''.",
+    "config-upgrade-done": "Agiornament completà.\n\nAdess a peule [$1 ancaminé a dovré soa wiki].\n\nS'a veul generé torna sò archivi <code>LocalSettings.php</code>, ch'a sgnaca ël boton sì-sota.\nSòn a l'è '''pa arcomandà''' gavà ch'a rancontra dij problema con soa wiki.",
+    "config-upgrade-done-no-regenerate": "Agiornament complet.\n\nIt peule adess [$1 ancaminé a dovré toa wiki].",
+    "config-regenerate": "Generé torna LocalSettings.php →",
+    "config-show-table-status": "Arcesta <code>SHOW TABLE STATUS</code> falìa!",
+    "config-unknown-collation": "'''Avis:''' La base ëd dàit a deuvra na classificassion pa arconossùa.",
+    "config-db-web-account": "Cont dla base ëd dàit për l'acess a l'aragnà",
+    "config-db-web-help": "Ch'a selession-a lë stranòm d'utent e la ciav che ël servent ëd l'aragnà a dovrërà për coleghesse al servent dle base ëd dàit, durant j'operassion ordinarie dla wiki.",
+    "config-db-web-account-same": "Ch'a deuvra ël midem cont com për l'istalassion",
+    "config-db-web-create": "Crea ël cont se a esist pa anco'",
+    "config-db-web-no-create-privs": "Ël cont ch'a l'ha specificà për l'instalassion a l'ha pa basta 'd privilegi për creé un cont.\nËl cont ch'a spessìfica ambelessì a dev già esiste.",
+    "config-mysql-engine": "Motor ëd memorisassion:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Avis''': A l'ha selessionà MyISAM com motor ëd memorisassion për MySQL, che a l'é pa arcomandà da dovré con MediaWiki, përchè:\n* a sopòrta a pen-a la contemporanità për via ëd saradure ëd tàula\n* a l'é pi soget a la corussion che j'àutri motor\n* ël còdes bas ëd MediaWiki pa sempe a gestiss MyISAM com a dovrìa\n\nSe soa istalassion MySQL a manten InnoDB, a l'é fortement arcomandà ch'a serna pitòst col-lì.\nSe soa istalassion MySQL a manten nen InnoDB, a peul esse ch'a sia ël moment ëd n'agiornament.",
+    "config-mysql-engine-help": "'''InnoDB''' a l'é scasi sempe la mej opsion, da già ch'a l'ha un bon manteniment dla concorensa.\n\n'''MyISAM''' a peul esse pi lest an instalassion për n'utent sol o mach an letura.\nLa base ëd dàit MyISAM a tira a corompse pi 'd soens che la base ëd dàit InnoDB.",
+    "config-mysql-charset": "Ansem ëd caràter dla base ëd dàit:",
+    "config-mysql-binary": "Binari",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "An '''manera binaria''', MediaWiki a memorisa ël test UTF-8 ant la base ëd dàit an camp binari.\nSòn a l'é pi eficient che la manera UTF-8 ëd MySQL, e a-j përmët ëd dovré l'ansema antregh ëd caràter Unicode.\n\nAn '''manera UTF-8''', MySQL a conossrà an che ansem ëd caràter a son ij sò dat, e a peul presenteje e convertije apropriatament, ma a-j lassa pa memorisé ij caràter ëdzora al [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes pian multilenghìstich ëd base].",
+    "config-site-name": "Nòm ëd la wiki:",
+    "config-site-name-help": "Sòn a comparirà ant la bara dël tìtol dël navigador e an vàire d'àutri pòst.",
+    "config-site-name-blank": "Ch'a buta un nòm ëd sit.",
+    "config-project-namespace": "Spassi nominal dël proget:",
+    "config-ns-generic": "Proget",
+    "config-ns-site-name": "Midem com ël nom dla wiki: $1",
+    "config-ns-other": "Àutr (specìfica)",
+    "config-ns-other-default": "MyWiki",
+    "config-project-namespace-help": "Andasend daré a l'esempi ëd Wikipedia, vàire wiki a manten-o soe pàgine ëd regolament separà da soe pàgine ëd contnù, ant në \"'''spassi nominal ëd proget'''\".\nTùit ij tìtoj ëd pàgina ant cost ëspassi nominal a parto con un sert prefiss, che a peul specifiché ambelessì.\nTradissionalment, sto prefiss a l'é derivà dal nòm ëd la wiki, ma a peul pa conten-e caràter ëd pontegiatura coma \"#\" o \":\".",
+    "config-ns-invalid": "Lë spassi nominal specificà \"<nowiki>$1</nowiki>\" a l'é pa bon.\nSpecìfica në spassi nominal ëd proget diferent.",
+    "config-ns-conflict": "Lë spassi nominal specificà \"<nowiki>$1</nowiki>\" a và contra në spassi nominal predefinì ëd MediaWiki.\nSpecìfica në spassi nominal ëd proget diferent.",
+    "config-admin-box": "Cont ëd l'Aministrator",
+    "config-admin-name": "Tò nòm:",
+    "config-admin-password": "Ciav:",
+    "config-admin-password-confirm": "Buté torna la ciav:",
+    "config-admin-help": "Ch'a butà ambelessì tò stranòm d'utent preferì, për esempi \"Gioann Scriv\".\nCost-sì a l'é lë stranòm ch'a dovrërà për intré ant la wiki.",
+    "config-admin-name-blank": "Ch'a anserissa në stranòm d'aministrator.",
+    "config-admin-name-invalid": "Ël nòm utent specificà \"<nowiki>$1</nowiki>\" a l'é pa bon.\nSpecìfica un nòm utent diferent.",
+    "config-admin-password-blank": "Ch'a anserissa na ciav për ël cont d'aministrator.",
+    "config-admin-password-same": "La ciav a dev nen esse l'istessa ëd lë stranòm d'utent.",
+    "config-admin-password-mismatch": "Le doe ciav che a l'ha scrivù a son diferente antra 'd lor.",
+    "config-admin-email": "Adrëssa ëd pòsta eletrònica:",
+    "config-admin-email-help": "Ch'a anserissa ambelessì n'adrëssa ëd pòsta eletrònica për përmëtt-je d'arsèive ëd mëssagi da d'àutri utent an sla wiki, riamposté soa ciav, e esse anformà dle modìfiche a le pàgine ch'a ten sot-euj. A peule lassé ës camp veuid.",
+    "config-admin-error-user": "Eror antern an creand n'aministrator con lë stranòm \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Eror antern an ampostand na ciav për l'admin \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+    "config-admin-error-bademail": "A l'ha butà n'adrëssa ëd pòsta eletrònica pa bon-a.",
+    "config-subscribe": "Ch'a sot-scriva la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista ëd discussion ëd j'anonsi ëd publicassion].",
+    "config-subscribe-help": "Costa a l'é na lista ëd discussion a bass tràfich dovrà për j'anonsi ëd publicassion, comprèis d'amportant anonsi ëd sicurëssa.\nA dovrìa sot-ëscrivla e agiorné soa instalassion mediaWiki quand che ëd version neuve a rivo.",
+    "config-subscribe-noemail": "A l'ha provà a abonesse a la lista ëd difusion dij comunicà sensa dé n'adrëssa ëd pòsta eletrònica.\nPër piasì, ch'a fornissa n'adrëssa ëd pòsta eletrònica s'a veul abonesse a la lista ëd pòsta.",
+    "config-almost-done": "A l'ha bele che fàit!\nA 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 duverta",
+    "config-profile-no-anon": "A venta creé un cont",
+    "config-profile-fishbowl": "Mach editor autorisà",
+    "config-profile-private": "Wiki privà",
+    "config-profile-help": "Le wiki a marcio mej quand ch'a lassa che pì përsone possìbij a-j modìfico.\nAn MediaWiki, a l'é bel fé revisioné j'ùltime modìfiche, e buté andré qualsëssìa dann che a sia fàit da dj'utent noviss o malissios.\n\nAn 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.\nParèj a l'ha doe possibilità.\n\nËl model '''{{int:config-profile-wiki}}''' a përmët a chicassìa ëd modifiché, bele sensa intré ant ël sistema.\nNa wiki con  '''{{int:config-profile-no-anon}}''' a dà pì 'd contròl, ma a peul slontané dij contributor ocasionaj.\n\nË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.\nUn '''{{int:config-profile-private}}''' a përmët mach a j'utent aprovà ëd vëdde le pàgine, con la midema partìa ch'a peul modifiché.\n\nConfigurassion ëd drit d'utent pi complicà a son disponìbij apress l'instalassion, vëdde la [//www.mediawiki.org/wiki/Manual:User_rights pàgina a pòsta dël manual].",
+    "config-license": "Drit d'autor e licensa",
+    "config-license-none": "Gnun-a licensa an nòta an bass",
+    "config-license-cc-by-sa": "Creative Commons atribussion an part uguaj",
+    "config-license-cc-by": "Creative Commons Attribution",
+    "config-license-cc-by-nc-sa": "Creative Commons atribussion nen comersial an part uguaj",
+    "config-license-cc-0": "Creative Commons Zero (domini pùblich)",
+    "config-license-gfdl": "Licensa GNU Free Documentation 1.3 o pi neuva",
+    "config-license-pd": "Domini Pùblich",
+    "config-license-cc-choose": "Selessioné na licensa Creative Commons përsonalisà",
+    "config-license-help": "Vàire wiki pùbliche a buto tute le contribussion sota na [http://freedomdefined.org/Definition licensa lìbera]. Sòn a giuta a creé un sens d'apartenensa a la comunità e a ancoragia ëd contribussion ëd longa durà.\nA l'é generalment nen necessari për na wiki privà o d'asienda.\n\nS'a veul podèj dovré dij test da Wikipedia, e a veul che Wikipedia a aceta dij test copià da soa wiki, a dovrìa serne '''Creative Commons Attribution Share Alike'''.\n\nWikipedia prima a dovrava la GNU Free Documentation License.\nLa GDFL a l'é anco' na licensa bon-a, ma a l'é malfé da capila.\nA l'é ëdcò mal fé riutilisé dël contnù licensià sota la GDFL.",
+    "config-email-settings": "Ampostassion ëd pòsta eletrònica",
+    "config-enable-email": "Abilité ij mëssagi ëd pòsta eletrònica an surtìa",
+    "config-enable-email-help": "S'a veul che la pòsta eletrònica a marcia, j'[http://www.php.net/manual/en/mail.configuration.php ampostassion ëd pòsta eletrònica PHP] a devo esse configurà për da bin.\nS'a veul pa 'd funsion ëd pòsta eletrònica, a dev disabiliteje ambelessì.",
+    "config-email-user": "Abilité ij mëssagi ëd pòsta eletrònica da utent a utent",
+    "config-email-user-help": "A përmët a tùit j'utent ëd mandesse ëd mëssagi ëd pòsta eletrònica se lor a l'han abilità sòn an soe preferense.",
+    "config-email-usertalk": "Abilité notìfica dle pàgine ëd discussion dj'utent",
+    "config-email-usertalk-help": "A përmët a j'utent d'arsèive na notìfica dle modìfiche dle pàgine ëd discussion d'utent, s'a l'han abilitalo ant soe preferense.",
+    "config-email-watchlist": "Abilité la notìfica ëd lòn ch'as ten sot euj",
+    "config-email-watchlist-help": "A përmët a j'utent d'arsèive dle notificassion a propòsit dle pàgine ch'a ten-o sot euj s'a l'han abilitalo ant soe preferense.",
+    "config-email-auth": "Abilité l'autenticassion për pòsta eletrònica",
+    "config-email-auth-help": "Se st'opsion a l'é abilità, j'utent a devo confirmé soe adrësse ëd pòsta eletrònica an dovrand un colegament mandà a lor quand ch'a l'han ampostala o cambiala.\nMach j'adrësse ëd pòsta eletrònica autenticà a peulo arsèive ëd mëssagi da j'àutri utent o cangé adrëssa ëd notìfica.\nAmposté st'opsion a l'é '''arcomandà''' për le wiki pùbliche a càusa ëd possìbij abus ëd le funsion ëd pòsta eletrònica.",
+    "config-email-sender": "Adrëssa ëd pòsta eletrònica ëd ritorn:",
+    "config-email-sender-help": "Ch'a anserissa l'adrëssa ëd pòsta eletrònica da dovré com adrëssa d'artorn dij mëssagi an surtìa.\nAmbelessì a l'é andova j'arspòste a saran mandà.\nMotobin ëd servent ëd pòsta a ciamo che almanch la part dël nòm ëd domini a sia bon-a.",
+    "config-upload-settings": "Cariament ëd figure e archivi",
+    "config-upload-enable": "Abilité ël cariament d'archivi",
+    "config-upload-help": "Carié d'archivi potensialment a espon sò servent a d'arzigh ëd sicurëssa.\nPer pi d'anformassion, ch'a lesa la [//www.mediawiki.org/wiki/Manual:Security session ëd sicurëssa] d'ës manual.\n\nPër abilité ël cariament d'archivi, ch'a modìfica la manera dël sot-dossié dle <code>figure</code> sota al dossié rèis ëd MediaWiki an manera che ël servent dl'aragnà a peussa scrivlo.\nPeui ch'a abìlita costa opsion.",
+    "config-upload-deleted": "Dossié për j'archivi scancelà:",
+    "config-upload-deleted-help": "ch'a serna un dossié andova goerné j'archivi scancelà.\nIdealment, sòn a dovrìa pa esse acessìbil an sl'aragnà.",
+    "config-logo": "Anliura dla marca:",
+    "config-logo-help": "La pel dë stàndard ëd MediaWiki a comprend lë spassi për na marca ëd 135x160 pontin dzora la lista dla bara lateral.\nCh'a dëscaria na figura ëd la dimension aproprià, e ch'a anserissa l'anliura ambelessì.\n\nS'a veul gnun-e marche, ch'a lassa ës camp bianch.",
+    "config-instantcommons": "Abìlita Instant Commons",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] a l'é na funsion ch'a përmët a le wiki ëd dovré dle figure, dij son e d'àutri mojen trovà an sël sit [//commons.wikimedia.org/ Wikimedia Commons].\nPër dovré sossì, MediaWiki a l'ha da manca dl'acess a la ragnà.\n\nPër pi d'anformassion su sta funsion, comprèise j'istrussion ëd com ampostela për wiki diferente da Wikimedia Commons, ch'a consulta [//mediawiki.org/wiki/Manual:$wgForeignFileRepos ël manual].",
+    "config-cc-error": "La selession ëd la licensa Creative Commons a l'ha dàit gnun arzultà.\nCh'a anserissa ël nòm dla licensa a man.",
+    "config-cc-again": "Torna cheuje...",
+    "config-cc-not-chosen": "Sern che licensa Creative Commons it veule e sgnaca \"anans\".",
+    "config-advanced-settings": "Configurassion avansà",
+    "config-cache-options": "Ampostassion për la memorisassion local d'oget:",
+    "config-cache-help": "La memorisassion loca d'oget a l'é dovrà për amelioré l'andi ëd MediaWiki an butant an local dij dat dovrà 'd soens.\nIj sit da mesan a gròss a son motobin ancoragià a abilité sòn, e ij sit cit a l'avran ëdcò dij benefissi.",
+    "config-cache-none": "Gnun-a memorisassion local (gnun-a funsionalità gavà, ma l'andi a peul esse anfluensà an sij sit ëd wiki gròsse)",
+    "config-cache-accel": "Memorisassion local d'oget PHP (APC, XCache o WinCache)",
+    "config-cache-memcached": "Dovré Memcached (a ciama n'ampostassion e na configurassion adissionaj)",
+    "config-memcached-servers": "Servent Memcached:",
+    "config-memcached-help": "Lista d'adrësse IP da dovré për Memcached.\nA dovrìa specifichene un-a për linia e specifiché la pòrta da dovré. Për esempi:\n127.0.0.1:11211\n192.168.1.25:11211",
+    "config-memcache-needservers": "A l'ha selessionà Memcached com soa sòrt ëd memorisassion local ma a l'ha specificà gnun servent.",
+    "config-memcache-badip": "It l'ha anserì n'adrëssa IP pa bon-a për Memcached: $1.",
+    "config-memcache-noport": "A l'ha pa specificà na pòrta da dovré për ël servent Memcached: $1.\nS'a conòsse nen la pòrta, cola predefinìa a l'é 11211.",
+    "config-memcache-badport": "Ij nùmer ëd pòrta ëd Memcached a dovrìo esse tra $1 e $2.",
+    "config-extensions": "Estension",
+    "config-extensions-help": "J'estension listà dì-sota a son ëstàite trovà ant sò dossié <code>./extensions</code>.\n\nA 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.\nPër piasì, ch'a vada a la pàgina ch'a-i ven.",
+    "config-install-begin": "An sgnacand su «{{int:config-continue}}», a anandiërà l'istalassion ëd MediaWiki.\nS'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",
+    "config-install-database": "Creassion ëd la base ëd dàit",
+    "config-install-schema": "Creassion dë schema",
+    "config-install-pg-schema-not-exist": "Lë schema postgreSQL a esist pa.",
+    "config-install-pg-schema-failed": "Creassion dle tàule falìa.\nSigurte che l'utent \"$1\" a peussa scrive lë schema \"$2\".",
+    "config-install-pg-commit": "Salvé ij cambi.",
+    "config-install-pg-plpgsql": "Contròl dël langagi PL/pgSQL",
+    "config-pg-no-plpgsql": "A dev istalé ël langage PL/pgSQL ant la base ëd dàit $1",
+    "config-pg-no-create-privs": "Ël cont ch'a l'ha specificà për l'istalassion a l'ha pa basta 'd privilegi për creé un cont.",
+    "config-pg-not-in-role": "Ël cont ch'a l'ha specificà për l'utent ëd la ragnà a esist già.\nËl cont ch'a l'has specificà për l'istalassion a l'é pa un superutent e a l'é pa un mémber dla partìa dj'utent dla Ragnà, parèj a peul pa creé dj'oget ch'a apartenent a l'utent dla Ragnà.\n\nMediaWiki al moment a ciama che le tàule a sia possedùe da n'utent dla Ragnà. Për piasì, ch'a specìfica n'àutr nòm ëd cont dla Ragnà, o ch'a sgnaca ansima a \"andré\" e ch'a specìfica n'utent ch'a l'ha ij privilegi ch'a basto për l'anstalassion.",
+    "config-install-user": "Creassion ëd n'utent ëd la base ëd dàit",
+    "config-install-user-alreadyexists": "L'utent \"$1\" a esist già",
+    "config-install-user-create-failed": "Faliment ant la creassion ëd l'utent «$1»: $2",
+    "config-install-user-grant-failed": "Falì a dé ij përmess a l'utent \"$1\": $2",
+    "config-install-user-missing": "L'utent specificà \"$1\" a esist pa.",
+    "config-install-user-missing-create": "L'utent specificà «$1» a esist pa.\nPër piasì, ch'a selession-a la casela «cont da creé» sì-sota s'a veul creelo.",
+    "config-install-tables": "Creassion dle tàule",
+    "config-install-tables-exist": "'''Avis''': A smija che le tàule ëd mediaWiki a esisto già.\nSauté la creassion.",
+    "config-install-tables-failed": "'''Eror''': Creassion ëd le tàule falìa con l'eror sì-dapress: $1",
+    "config-install-interwiki": "Ampiniment dë stàndard ëd le tàule dj'anliure interwiki",
+    "config-install-interwiki-list": "As peul pa trovesse l'archivi <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "'''Avis''': La tàula interwiki a smija ch'a l'abia già dj'element.\nPër stàndard, la lista a sarà sautà.",
+    "config-install-stats": "Inissialisassion dle statìstiche",
+    "config-install-keys": "Generassion ëd le ciav segrete",
+    "config-insecure-keys": "'''Avis:''' {{PLURAL:$2|Na ciav sigura|Dle ciav sigure}} ($1) generà durant l'istalassion {{PLURAL:$2|a l'é|a son}} pa completament sigure. Ch'a consìdera ëd modifiche{{PLURAL:$2|la|je}} manualment.",
+    "config-install-sysop": "Creassion dël cont ëd l'utent aministrator",
+    "config-install-subscribe-fail": "As peul pa sot-scrivse mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "cURL a l'é pa istalà e allow_url_fopen a l'é pa disponìbil.",
+    "config-install-mainpage": "Creassion ëd la pàgina prinsipal con un contnù predefinì",
+    "config-install-extension-tables": "Creassion ëd tàule për j'estension abilità",
+    "config-install-mainpage-failed": "As peul pa inserisse la pàgina prinsipal: $1",
+    "config-install-done": "'''Congratulassion!'''\nA l'ha instalà për da bin mediaWiki.\n\nL'instalador a l'ha generà n'archivi <code>LocalSettings.php</code>.\nA conten tuta soa configurassion.\n\nA dovrà dëscarielo e butelo ant la bas ëd l'instalassion ëd soa wiki (ël midem dossié d'index.php). La dëscaria a dovrìa esse ancaminà automaticament.\n\nSe la dëscaria a l'é pa disponìbil, o s'a l'ha scancelala, a peul torna ancaminé la dëscaria an sgnacand an sla liura sì-sota:\n\n$3\n\n'''Nòta''': S'a lo fa nen adess, cost archivi ëd configurassion generà a sarà pa disponìbil për chiel pi tard s'a chita l'instalassion sensa dëscarielo.\n\nQuand che a l'é stàit fàit, a peul '''[$2 intré an soa wiki]'''.",
+    "config-download-localsettings": "Dëscarié <code>LocalSettings.php</code>",
+    "config-help": "agiut",
+    "config-nofile": "L'archivi «$1» as treuva nen. A l'é stàit ëscancelà?",
+    "mainpagetext": "'''MediaWiki a l'é staita anstalà a la përfession.'''",
+    "mainpagedocfooter": "Che a varda la [//meta.wikimedia.org/wiki/Help:Contents User's Guide] për avèj dj'anformassion ant sël coma dovré ël programa dla wiki.\n\n== Për anandiesse a travajé ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista dij paràmeter ëd configurassion]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki Chestion frequente]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista ëd discussion an sla distribussion ëd MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localisa MediaWiki për toa lenga]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/pnt.json b/includes/installer/i18n/pnt.json
new file mode 100644 (file)
index 0000000..d137156
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Sinopeus"
+        ]
+    },
+    "mainpagetext": "'''To λογισμικόν MediaWiki εθέκεν.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/prg.json b/includes/installer/i18n/prg.json
new file mode 100644 (file)
index 0000000..58c28fc
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Nertiks"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki's instalaciōni izpalla.'''",
+    "mainpagedocfooter": "Wīdais [//meta.wikimedia.org/wiki/Help:Contents przewodnik użytkownika] kāi gaūlai infōrmaciōnei ezze wiki prōgramijas tērpausnan.\n\n== En pagaūseņu ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ps.json b/includes/installer/i18n/ps.json
new file mode 100644 (file)
index 0000000..62c5d39
--- /dev/null
@@ -0,0 +1,46 @@
+{
+    "@metadata": {
+        "authors": [
+            "Ahmed-Najib-Biabani-Ibrahimkhel"
+        ]
+    },
+    "config-information": "مالومات",
+    "config-your-language": "ستاسې ژبه:",
+    "config-wiki-language": "د ويکي ژبه:",
+    "config-page-language": "ژبه",
+    "config-page-welcome": "مېډياويکي ته ښه راغلاست!",
+    "config-page-name": "نوم",
+    "config-page-options": "خوښنې",
+    "config-page-install": "لگول",
+    "config-page-complete": "بشپړ!",
+    "config-env-php": "د $1 PHP نصب شو.",
+    "config-db-type": "د توکبنسټ ډول:",
+    "config-db-host": "د توکبنسټ کوربه:",
+    "config-db-host-oracle": "د توکبنسټ TNS:",
+    "config-db-name": "د توکبنسټ نوم:",
+    "config-db-username": "د توکبنسټ کارن-نوم:",
+    "config-db-password": "د توکبنسټ پټنوم:",
+    "config-header-mysql": "د MySQL امستنې",
+    "config-header-postgres": "د PostgreSQL امستنې",
+    "config-header-sqlite": "د SQLite امستنې",
+    "config-header-oracle": "د اورېکل امستنې",
+    "config-sqlite-readonly": "د <code>$1</code> دوتنه د ليکلو وړ نه ده.",
+    "config-sqlite-cant-create-db": "د توکبنسټ دوتنه <code>$1</code> جوړه نه شوه.",
+    "config-site-name": "د ويکي نوم:",
+    "config-site-name-blank": "د وېبځي نوم وليکۍ.",
+    "config-project-namespace": "د پروژې نوم-تشيال:",
+    "config-ns-generic": "پروژه",
+    "config-admin-box": "د پازوال گڼون",
+    "config-admin-name": "ستاسې نوم:",
+    "config-admin-password": "پټنوم:",
+    "config-admin-password-confirm": "پټنوم يو ځل بيا:",
+    "config-admin-email": "برېښليک پته:",
+    "config-profile-wiki": "پرانيستې ويکي",
+    "config-license-pd": "ټولگړی شپول",
+    "config-email-settings": "د برېښليک امستنې",
+    "config-install-step-done": "ترسره شو",
+    "config-install-tables": "لښتيالونه جوړول",
+    "config-help": "لارښود",
+    "mainpagetext": "'''MediaWiki په برياليتوب سره نصب شو.'''",
+    "mainpagedocfooter": "د ويکي ساوترې د کارولو د  مالوماتو په اړه [//meta.wikimedia.org/wiki/Help:Contents د کارن لارښود] سره سلا وکړۍ.\n\n== پيلول ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings د امستنو د سازونې لړليک]\n* [//www.mediawiki.org/wiki/Manual:FAQ د ميډياويکي ډېرځليزې پوښتنې]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce د مېډياويکي د برېښليکونو لړليک]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources خپلې ژبې لپاره MediaWiki ځايتابول]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/pt-br.json b/includes/installer/i18n/pt-br.json
new file mode 100644 (file)
index 0000000..8d7aec5
--- /dev/null
@@ -0,0 +1,78 @@
+{
+    "@metadata": {
+        "authors": [
+            "Cainamarques",
+            "Giro720",
+            "Gustavo",
+            "Luckas",
+            "Marcionunes",
+            "555"
+        ]
+    },
+    "config-desc": "O instalador do MediaWiki",
+    "config-title": "Instalação do MediaWiki $1",
+    "config-information": "Informações",
+    "config-localsettings-upgrade": "Foi detectada a existência do arquivo <code>LocalSettings.php</code>.\nPara atualizar esta instalação, insira no box abaixo o valor de <code>$wgUpgradeKey</code>.\nEssa informação pode ser encontrada no arquivo <code>LocalSettings.php</code>",
+    "config-localsettings-cli-upgrade": "Foi detectada a existência do arquivo <code><code>LocalSettings.php</code></code>.\nAtualize esta instalação executando o arquivo <code>update.php</code>",
+    "config-localsettings-key": "Chave de atualização:",
+    "config-localsettings-badkey": "A chave fornecida está incorreta.",
+    "config-upgrade-key-missing": "Foi detectada uma instalação existente do MediaWiki.\nPara atualizar esta instalação, insira a seguinte linha na parte inferior do seu <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "O arquivo <code>LocalSettings.php</code> parece incompleto.\nA variável $1 não está definida.\nAltere seu <code>LocalSettings.php</code> com a definição dessa variável e clique em \"{{int:Config-continue}}\".",
+    "config-localsettings-connection-error": "Ocorreu um erro ao conectar ao banco de dados através das configurações presentes ou no <code>LocalSettings.php</code> ou no <code>AdminSettings.php</code>. Corrija essas configurações e tente novamente.\n\n$1",
+    "config-session-error": "Erro ao iniciar a sessão: $1",
+    "config-session-expired": "Os seus dados de sessão parecem ter expirado.\nAs sessões estão configuradas para uma duração de $1.\nVocê pode aumentar esta duração configurando <code>session.gc_maxlifetime</code> no php.ini.\nReinicie o processo de instalação.",
+    "config-no-session": "Os seus dados de sessão foram perdidos!\nVerifique o seu php.ini e certifique-se de que em <code>session.save_path</code> está definido um diretório apropriado.",
+    "config-your-language": "Seu idioma:",
+    "config-your-language-help": "Selecione o idioma que será usado durante o processo de instalação.",
+    "config-wiki-language": "Idioma do wiki:",
+    "config-wiki-language-help": "Selecione o idioma em que o wiki será predominantemente escrito.",
+    "config-back": "← Voltar",
+    "config-continue": "Continuar →",
+    "config-page-language": "Idioma",
+    "config-page-welcome": "Bem-vindo(a) ao MediaWiki!",
+    "config-page-dbconnect": "Conectar ao banco de dados",
+    "config-page-upgrade": "Atualizar a instalação existente",
+    "config-page-dbsettings": "Configurações do banco de dados",
+    "config-page-name": "Nome",
+    "config-page-options": "Opções",
+    "config-page-install": "Instalar",
+    "config-page-complete": "Concluído!",
+    "config-page-restart": "Reiniciar a instalação",
+    "config-page-readme": "Leia-me",
+    "config-page-releasenotes": "Notas de lançamento",
+    "config-page-copying": "Copiando",
+    "config-page-upgradedoc": "Atualizando",
+    "config-page-existingwiki": "Wiki existente",
+    "config-help-restart": "Deseja limpar todos os dados salvos que você introduziu e reiniciar o processo de instalação?",
+    "config-restart": "Sim, reiniciar",
+    "config-welcome": "=== Verificações de ambiente ===\nSão realizadas verificações básicas para determinar se este ambiente é apropriado para a instalação do MediaWiki.\nLembre-se de incluir estas informações se for procurar por suporte para a conclusão da instalação.",
+    "config-copyright": "=== Direitos autorais e Termos de uso ===\n\n$1\n\nEste programa é software livre; você pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.\n\nEste programa é distribuído na esperança de que seja útil, mas '''sem qualquer garantia'''; inclusive, sem a garantia implícita da '''possibilidade de ser comercializado''' ou de '''adequação para qualquer finalidade específica'''.\nConsulte a licença GNU General Public License para mais detalhes.\n\nEm conjunto com este programa você deve ter recebido <doclink href=Copying>uma cópia da licença GNU General Public License</doclink>; se não a recebeu, peça-a por escrito para Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [http://www.gnu.org/copyleft/gpl.html leia-a na internet].",
+    "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki Página principal do MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents Manual de uso]\n* [//www.mediawiki.org/wiki/Manual:Contents Manual administrativo]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Leia-me</doclink>\n* <doclink href=ReleaseNotes>Notas de lançamento</doclink>\n* <doclink href=Copying>Licença</doclink>\n* <doclink href=UpgradeDoc>Como fazer upgrade</doclink>",
+    "config-env-good": "O ambiente foi verificado.\nVocê pode instalar o MediaWiki.",
+    "config-env-bad": "O ambiente foi verificado.\nVocê não pode instalar o MediaWiki.",
+    "config-env-php": "O PHP $1 está instalado.",
+    "config-unicode-using-utf8": "Usando o utf8_normalize.so, de Brion Vibber, para a normalização Unicode.",
+    "config-unicode-using-intl": "Usando a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.",
+    "config-unicode-pure-php-warning": "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode sendo usada, em seu lugar, a lenta implementação de PHP puro.\nSe o seu site tem um alto volume de tráfego, informe-se sobre a [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalização Unicode].",
+    "config-no-db": "Não foi possível encontrar um driver de banco de dados adequado! É necessário instalar um driver de banco de dados para o PHP.\nSão suportados os seguintes tipos de bancos de dados: $1.\n\nSe estiver em uma hospedagem partilhada, peça à sua empresa de hospedagem para instalar um driver de banco de dados adequado.\nSe você mesmo tiver compilado o PHP, reconfigure-o com um cliente de banco de dados ativado usando, por exemplo, <code>./configure --with-mysql</code>.\nSe você instalou o PHP a partir de um pacote do Debian ou do Ubuntu, instale também o módulo php5-mysql.",
+    "config-no-fts3": "' ' 'Aviso' ' ': O SQLite foi compilado sem o módulo [//sqlite.org/fts3.html FTS3]; as funcionalidades de pesquisa não estarão disponíveis nesta instalação.",
+    "config-register-globals": "' ' 'Aviso: A opção <code>[http://php.net/register_globals register_globals]</code> do PHP está ativada.'''\n' ' 'Desative-a, se puder.'''\nO MediaWiki funcionará mesmo assim, mas o seu servidor ficará exposto a potenciais vulnerabilidades de segurança.",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binary",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-binary": "Binary",
+    "config-mysql-utf8": "UTF-8",
+    "config-ns-generic": "Projeto",
+    "config-admin-box": "Conta de administrador",
+    "config-admin-name": "Seu nome:",
+    "config-admin-password": "Senha:",
+    "config-license-pd": "Domínio público",
+    "config-logo-help": "Faça o upload de uma imagem de tamanho adequado e insira seu URL aqui.\n\nVocê pode usar <code>$wgStylePath</code> ou <code>$wgScriptPath</code> se o seu logotipo for associado a esses diretórios.",
+    "config-advanced-settings": "Configuração avançada",
+    "config-extensions": "Extensões",
+    "config-install-step-done": "feito",
+    "config-help": "ajuda",
+    "mainpagetext": "'''MediaWiki instalado com sucesso.'''",
+    "mainpagedocfooter": "Consulte o [//meta.wikimedia.org/wiki/Help:Contents Manual de Usuário] para informações de como usar o software wiki.\n\n== Começando ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de opções de configuração]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ do MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussão com avisos de novas versões do MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Traduza o MediaWiki para seu idioma]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/pt.json b/includes/installer/i18n/pt.json
new file mode 100644 (file)
index 0000000..2a5164e
--- /dev/null
@@ -0,0 +1,313 @@
+{
+    "@metadata": {
+        "authors": [
+            "Crazymadlover",
+            "Hamilton Abreu",
+            "Luckas",
+            "Mormegil",
+            "Platonides",
+            "SandroHc",
+            "Waldir",
+            "아라",
+            "555"
+        ]
+    },
+    "config-desc": "O instalador do MediaWiki",
+    "config-title": "Instalação MediaWiki $1",
+    "config-information": "Informação",
+    "config-localsettings-upgrade": "Foi detectado um ficheiro <code>LocalSettings.php</code>.\nPara atualizar esta instalação, por favor introduza o valor de <code>$wgUpgradeKey</code> na caixa abaixo.\nEncontra este valor no <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Foi detectada a existência de um ficheiro <code>LocalSettings.php</code>.\nPara atualizar esta instalação execute o <code>update.php</code>, por favor.",
+    "config-localsettings-key": "Chave de atualização:",
+    "config-localsettings-badkey": "A chave que forneceu está incorreta.",
+    "config-upgrade-key-missing": "Foi detectada uma instalação existente do MediaWiki.\nPara atualizar esta instalação, por favor coloque a seguinte linha no final do seu <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "O ficheiro <code>LocalSettings.php</code> existente parece estar incompleto.\nA variável $1 não está definida.\nPor favor defina esta variável no <code>LocalSettings.php</code> e clique \"{{int:Config-continue}}\".",
+    "config-localsettings-connection-error": "Ocorreu um erro ao ligar à base de dados usando as configurações especificadas no <code>LocalSettings.php</code> ou <code>AdminSettings.php</code>. Por favor corrija essas configurações e tente novamente.\n\n$1",
+    "config-session-error": "Erro ao iniciar a sessão: $1",
+    "config-session-expired": "Os seus dados de sessão parecem ter expirado.\nAs sessões estão configuradas para uma duração de $1.\nPode aumentar esta duração configurando <code>session.gc_maxlifetime</code> no php.ini.\nReinicie o processo de instalação.",
+    "config-no-session": "Os seus dados de sessão foram perdidos!\nVerifique o seu php.ini e certifique-se de que em <code>session.save_path</code> está definido um diretório apropriado.",
+    "config-your-language": "A sua língua:",
+    "config-your-language-help": "Selecione a língua que será usada durante o processo de instalação.",
+    "config-wiki-language": "Língua da wiki:",
+    "config-wiki-language-help": "Selecione a língua que será predominante na wiki.",
+    "config-back": "← Voltar",
+    "config-continue": "Continuar →",
+    "config-page-language": "Língua",
+    "config-page-welcome": "Bem-vindo(a) ao MediaWiki!",
+    "config-page-dbconnect": "Ligar à base de dados",
+    "config-page-upgrade": "Atualizar a instalação existente",
+    "config-page-dbsettings": "Configurações da base de dados",
+    "config-page-name": "Nome",
+    "config-page-options": "Opções",
+    "config-page-install": "Instalar",
+    "config-page-complete": "Terminado!",
+    "config-page-restart": "Reiniciar a instalação",
+    "config-page-readme": "Leia-me",
+    "config-page-releasenotes": "Notas de lançamento",
+    "config-page-copying": "A copiar",
+    "config-page-upgradedoc": "Atualizando",
+    "config-page-existingwiki": "Wiki existente",
+    "config-help-restart": "Deseja limpar todos os dados gravados que introduziu e reiniciar o processo de instalação?",
+    "config-restart": "Sim, reiniciar",
+    "config-welcome": "=== Verificações do ambiente ===\nSão realizadas verificações básicas para determinar se este ambiente é apropriado para instalação do MediaWiki.\nSe necessitar de pedir ajuda durante a instalação, deve fornecer os resultados destas verificações.",
+    "config-copyright": "=== Direitos de autor e Condições de uso ===\n\n$1\n\nEste programa é software livre; pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.\n\nEste programa é distribuído na esperança de que seja útil, mas '''sem qualquer garantia'''; inclusive, sem a garantia implícita da '''possibilidade de ser comercializado''' ou de '''adequação para qualquer finalidade específica'''.\nConsulte a licença GNU General Public License para mais detalhes.\n\nEm conjunto com este programa deve ter recebido <doclink href=Copying>uma cópia da licença GNU General Public License</doclink>; se não a recebeu, peça-a por escrito a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [http://www.gnu.org/copyleft/gpl.html leia-a na internet].",
+    "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/pt Página principal do MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents/pt Ajuda]\n* [//www.mediawiki.org/wiki/Manual:Contents/pt Manual técnico]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Leia-me</doclink>\n* <doclink href=ReleaseNotes>Notas de lançamento</doclink>\n* <doclink href=Copying>Cópia</doclink>\n* <doclink href=UpgradeDoc>Atualização</doclink>",
+    "config-env-good": "O ambiente foi verificado.\nPode instalar o MediaWiki.",
+    "config-env-bad": "O ambiente foi verificado.\nNão pode instalar o MediaWiki.",
+    "config-env-php": "O PHP $1 está instalado.",
+    "config-env-php-toolow": "O PHP $1 está instalado.\nNo entanto, o MediaWiki requer o PHP $2 ou superior.",
+    "config-unicode-using-utf8": "A usar o utf8_normalize.so, por Brion Vibber, para a normalização Unicode.",
+    "config-unicode-using-intl": "A usar a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.",
+    "config-unicode-pure-php-warning": "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode. Irá recorrer-se à implementação em PHP puro, que é mais lenta.\nSe o seu site tem alto volume de tráfego, devia informar-se um pouco sobre a [//www.mediawiki.org/wiki/Unicode_normalization_considerations/pt normalização Unicode].",
+    "config-unicode-update-warning": "'''Aviso''': A versão instalada do wrapper de normalização Unicode usa uma versão mais antiga da biblioteca do [http://site.icu-project.org/ projeto ICU].\nDevia [//www.mediawiki.org/wiki/Unicode_normalization_considerations atualizá-la] se tem quaisquer preocupações sobre o uso do Unicode.",
+    "config-no-db": "Não foi possível encontrar um controlador ''(driver)'' apropriado para a base de dados! Precisa de instalar um controlador para o PHP. São aceites os seguintes tipos de base de dados: $1.\n\nSe usa alojamento partilhado, peça ao fornecedor do alojamento para instalar um controlador apropriado.\nSe foi você quem compilou o PHP, reconfigure-o com um cliente de base de dados ativado; por exemplo, usando <code>./configure --with-mysql</code>.\nSe instalou o PHP a partir de um pacote Debian ou Ubuntu, então precisa de instalar também o módulo php5-mysql.",
+    "config-outdated-sqlite": "'''Aviso''': Tem a versão $1 do SQLite, que é anterior à versão mínima necessária, a $2. O SQLite não estará disponível.",
+    "config-no-fts3": "'''Aviso''': O SQLite foi compilado sem o módulo [//sqlite.org/fts3.html FTS3]; as funcionalidades de pesquisa não estarão disponíveis nesta instalação.",
+    "config-register-globals": "'''Aviso: A opção <code>[http://php.net/register_globals register_globals]</code> do PHP está ativada.'''\n'''Desative-a, se puder.'''\nO MediaWiki funciona mesmo assim, mas o seu servidor está exposto a potenciais vulnerabilidades de segurança.",
+    "config-magic-quotes-runtime": "'''Fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está ativada!'''\nEsta opção causa corrupção dos dados de entrada, de uma forma imprevisível.\nNão pode instalar ou usar o MediaWiki a menos que esta opção seja desativada.",
+    "config-magic-quotes-sybase": "'''Fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está ativada!'''\nEsta opção causa corrupção dos dados de entrada, de uma forma imprevisível.\nNão pode instalar ou usar o MediaWiki a menos que esta opção seja desativada.",
+    "config-mbstring": "'''Fatal: A opção [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está ativada!'''\nEsta opção causa erros e pode corromper os dados de uma forma imprevisível.\nNão pode instalar ou usar o MediaWiki a menos que esta opção seja desativada.",
+    "config-ze1": "'''Fatal: A opção [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] está ativada!'''\nEsta opção causa problemas significativos no MediaWiki.\nNão pode instalar ou usar o MediaWiki a menos que esta opção seja desativada.",
+    "config-safe-mode": "'''Aviso:''' O [http://www.php.net/features.safe-mode safe mode] do PHP está ativo.\nEste modo pode causar problemas, especialmente no upload de ficheiros e no suporte a <code>math</code>.",
+    "config-xml-bad": "Falta o módulo XML do PHP.\nO MediaWiki necessita de funções deste módulo e não funcionará com esta configuração.\nSe está a executar o Mandrake, instale o pacote php-xml.",
+    "config-pcre": "Parece faltar o módulo de suporte PCRE.\nPara funcionar, o MediaWiki necessita das funções de expressões regulares compatíveis com Perl.",
+    "config-pcre-no-utf8": "'''Fatal''': O módulo PCRE do PHP parece ter sido compilado sem suporte PCRE_UTF8.\nO MediaWiki necessita do suporte UTF-8 para funcionar corretamente.",
+    "config-memory-raised": "A configuração <code>memory_limit</code> do PHP era $1; foi aumentada para $2.",
+    "config-memory-bad": "'''Aviso:''' A configuração <code>memory_limit</code> do PHP é $1.\nIsto é provavelmente demasiado baixo.\nA instalação poderá falhar!",
+    "config-ctype": "'''Fatal''': O PHP tem de ser compilado com suporte para a [http://www.php.net/manual/en/ctype.installation.php extensão Ctype].",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] instalada",
+    "config-apc": "[http://www.php.net/apc APC] instalada",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] instalada",
+    "config-no-cache": "'''Aviso:''' Não foi possível encontrar: [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache], nem [http://www.iis.net/download/WinCacheForPhp WinCache].\nA cache de objetos não está ativada.",
+    "config-mod-security": "'''Aviso''': O seu servidor de internet tem o [http://modsecurity.org/ mod_security] ativado. Se este estiver mal configurado, pode causar problemas ao MediaWiki ou a outros programas, permitindo que os utilizadores publiquem conteúdos arbitrários.\nConsulte a [http://modsecurity.org/documentation/ mod_security documentação] ou peça apoio ao fornecedor do alojamento do seu servidor se encontrar erros aleatórios.",
+    "config-diff3-bad": "O GNU diff3 não foi encontrado.",
+    "config-imagemagick": "Foi encontrado o ImageMagick: <code>$1</code>.\nSe possibilitar uploads, a miniaturização de imagens será ativada.",
+    "config-gd": "Foi encontrada a biblioteca gráfica GD.\nSe possibilitar uploads, a miniaturização de imagens será ativada.",
+    "config-no-scaling": "Não foi encontrada a biblioteca gráfica GD nem o ImageMagick.\nA miniaturização de imagens será desativada.",
+    "config-no-uri": "'''Erro:''' Não foi possível determinar a URI atual.\nA instalação foi abortada.",
+    "config-no-cli-uri": "'''Aviso''':  Não foi especificado um --scriptpath; por omissão, será usado: <code>$1</code>.",
+    "config-using-server": "Será usado o nome do servidor \"<nowiki>$1</nowiki>\".",
+    "config-using-uri": "Será usada a URL do servidor \"<nowiki>$1$2</nowiki>\".",
+    "config-uploads-not-safe": "'''Aviso:''' O diretório por omissão para uploads <code>$1</code>, está vulnerável à execução arbitrária de scripts.\nEmbora o MediaWiki verifique a existência de ameaças de segurança em todos os ficheiros enviados, é altamente recomendado que [//www.mediawiki.org/wiki/Manual:Security#Upload_security vede esta vulnerabilidade de segurança] antes de possibilitar uploads.",
+    "config-no-cli-uploads-check": "'''Aviso:''' O diretório por omissão para uploads, <code>$1</code>, não é verificado para determinar se é vulnerável à execução de código arbitrário durante a instalação por CLI (\"Command-line Interface\").",
+    "config-brokenlibxml": "O seu sistema tem uma combinação de versões de PHP e libxml2 conhecida por ser problemática, podendo causar corrupção de dados no MediaWiki e outras aplicações da internet.\nAtualize para o PHP versão 5.2.9 ou posterior e libxml2 versão 2.7.3 ou posterior ([//bugs.php.net/bug.php?id=45996 incidência reportada no PHP]).\nInstalação interrompida.",
+    "config-using531": "O MediaWiki não pode ser usado com o PHP $1 devido a um problema que envolve parâmetros de referência para <code>__call()</code>.\nPara resolver este problema, atualize o PHP para a versão 5.3.2 ou posterior, ou reverta-o para a 5.3.0.\nInstalação interrompida.",
+    "config-suhosin-max-value-length": "O Suhosin está instalado e limita a $1 bytes o comprimento do parâmetro GET. O componente ResourceLoader do MediaWiki pode tornear este limite, mas prejudicando o desempenho. Se lhe for possível, deve atribuir o valor 1024 ou maior ao parâmetro <code>suhosin.get.max_value_length</code> no ficheiro <code>php.ini</code>, e definir o mesmo valor para <code>$wgResourceLoaderMaxQueryLength</code> no ficheiro LocalSettings.php.",
+    "config-db-type": "Tipo da base de dados:",
+    "config-db-host": "Servidor da base de dados:",
+    "config-db-host-help": "Se a base de dados estiver num servidor separado, introduza aqui o nome ou o endereço IP desse servidor.\n\nSe estiver a usar um servidor partilhado, o fornecedor do alojamento deve fornecer o nome do servidor na documentação.\n\nSe está a fazer a instalação num servidor Windows com MySQL, usar como nome do servidor \"localhost\" poderá não funcionar. Se não funcionar, tente usar \"127.0.0.1\" como endereço IP local.\n\nSe estiver a usar PostgreSQL, deixe este campo em branco para fazer a ligação através de um socket Unix.",
+    "config-db-host-oracle": "TNS (Transparent Network Substrate) da base de dados:",
+    "config-db-host-oracle-help": "Introduza um [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Nome Local de Ligação] válido; tem de estar visível para esta instalação um ficheiro tnsnames.ora.<br />Se está a usar bibliotecas cliente versão 10g ou posterior, também pode usar o método [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Ligação Fácil] de atribuição do nome.",
+    "config-db-wiki-settings": "Identifique esta wiki",
+    "config-db-name": "Nome da base de dados:",
+    "config-db-name-help": "Escolha um nome para identificar a sua wiki.\nO nome não deve conter espaços.\n\nSe estiver a usar um servidor partilhado, o fornecedor do alojamento deve poder fornecer-lhe o nome de uma base de dados que possa usar, ou permite-lhe criar bases de dados através de um painel de controle.",
+    "config-db-name-oracle": "Esquema ''(schema)'' da base de dados:",
+    "config-db-account-oracle-warn": "Há três cenários suportados na instalação do servidor de base de dados Oracle:\n\nSe pretende criar a conta de acesso pela internet na base de dados durante o processo de instalação, forneça como conta para a instalação uma conta com o papel de SYSDBA na base de dados e especifique as credenciais desejadas para a conta de acesso pela internet. Se não pretende criar a conta de acesso pela internet durante a instalação, pode criá-la manualmente e fornecer só essa conta para a instalação (se ela tiver as permissões necessárias para criar os objetos do esquema ''(schema)''). A terceira alternativa é fornecer duas contas diferentes; uma com privilégios de criação e outra com privilégios limitados para o acesso pela internet.\n\nExiste um script para criação de uma conta com os privilégios necessários no diretório \"maintenance/oracle/\" desta instalação. Mantenha em mente que usar uma conta com privilégios limitados impossibilita todas as operações de manutenção com a conta padrão.",
+    "config-db-install-account": "Conta do utilizador para a instalação",
+    "config-db-username": "Nome do utilizador da base de dados:",
+    "config-db-password": "Palavra-chave do utilizador da base de dados:",
+    "config-db-password-empty": "Introduza a palavra-chave do novo utilizador da base de dados: $1.\nEmbora seja possível criar utilizadores sem palavra-chave, fazê-lo não é seguro.",
+    "config-db-install-username": "Introduza o nome de utilizador que será usado para aceder à base de dados durante o processo de instalação. Este utilizador não é o do MediaWiki; é o utilizador da base de dados.",
+    "config-db-install-password": "Introduza a palavra-chave do utilizador que será usado para aceder à base de dados durante o processo de instalação. Esta palavra-chave não é a do utilizador do MediaWiki; é a palavra-chave do utilizador da base de dados.",
+    "config-db-install-help": "Introduza o nome de utilizador e a palavra-chave que serão usados para aceder à base de dados durante o processo de instalação.",
+    "config-db-account-lock": "Usar o mesmo nome de utilizador e palavra-chave durante a operação normal",
+    "config-db-wiki-account": "Conta de utilizador para a operação normal",
+    "config-db-wiki-help": "Introduza o nome de utilizador e a palavra-chave que serão usados para aceder à base de dados durante a operação normal da wiki.\nSe o utilizador não existir na base de dados, mas a conta de instalação tiver privilégios suficientes, o utilizador que introduzir será criado na base de dados com os privilégios mínimos necessários para a operação normal da wiki.",
+    "config-db-prefix": "Prefixo para as tabelas da base de dados:",
+    "config-db-prefix-help": "Se necessitar de partilhar uma só base de dados entre várias wikis, ou entre o MediaWiki e outra aplicação, pode escolher adicionar um prefixo ao nome de todas as tabelas desta instalação, para evitar conflitos.\nNão use espaços.\n\nNormalmente, este campo deve ficar vazio.",
+    "config-db-charset": "Conjunto de caracteres da base de dados",
+    "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-charset-help": "'''Aviso:''' Se usar '''backwards-compatible UTF-8''' (\"UTF-8 compatível com versões anteriores\") no MySQL 4.1+, e depois fizer cópias de segurança da base de dados usando <code>mysqldump</code>, poderá destruir todos os caracteres que não fazem parte do conjunto ASCII, corrompendo assim, de forma irreversível, as suas cópias de segurança!\n\nNo modo '''binary''' (\"binário\"), o MediaWiki armazena o texto UTF-8 na base de dados em campos binários.\nIsto é mais eficiente do que o modo UTF-8 do MySQL e permite que sejam usados todos os caracteres Unicode.\nNo modo '''UTF-8''', o MySQL saberá em que conjunto de caracteres os seus dados estão e pode apresentá-los e convertê-los da forma mais adequada,\nmas não lhe permitirá armazenar caracteres acima do [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Básico].",
+    "config-mysql-old": "É necessário o MySQL $1 ou posterior; tem a versão $2.",
+    "config-db-port": "Porta da base de dados:",
+    "config-db-schema": "Esquema ''(schema)'' do MediaWiki",
+    "config-db-schema-help": "Normalmente, este esquema estará correto.\nAltere-o só se souber que precisa de o fazer.",
+    "config-pg-test-error": "Não foi possível criar uma ligação à base de dados '''$1''': $2",
+    "config-sqlite-dir": "Diretório de dados do SQLite:",
+    "config-sqlite-dir-help": "O SQLite armazena todos os dados num único ficheiro.\n\nDurante a instalação, o servidor de internet precisa de ter permissão de escrita no diretório que especificar.\n\nEste diretório '''não''' deve poder ser acedido diretamente da internet, por isso está a ser colocado onde estão os seus ficheiros PHP.\n\nJuntamente com o diretório, o instalador irá criar um ficheiro <code>.htaccess</code>, mas se esta operação falhar é possível que alguém venha a ter acesso direto à base de dados.\nIsto inclui acesso aos dados dos utilizadores (endereços de correio eletrónico, palavras-chave encriptadas), às revisões eliminadas e a outros dados de acesso restrito na wiki.\n\nConsidere colocar a base de dados num local completamente diferente, como, por exemplo, em <code>/var/lib/mediawiki/asuawiki</code>.",
+    "config-oracle-def-ts": "Tablespace padrão:",
+    "config-oracle-temp-ts": "Tablespace temporário:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "O MediaWiki suporta as seguintes plataformas de base de dados:\n\n$1\n\nSe a plataforma que pretende usar não está listada abaixo, siga as instruções nos links acima para ativar o suporte.",
+    "config-support-mysql": "* $1 é a plataforma primária do MediaWiki e a melhor suportada ([http://www.php.net/manual/en/mysql.installation.php como compilar PHP com suporte MySQL])",
+    "config-support-postgres": "* $1 é uma plataforma de base de dados comum, de fonte aberta, alternativa ao MySQL ([http://www.php.net/manual/en/pgsql.installation.php como compilar PHP com suporte PostgreSQL]). Poderão existir alguns pequenos problemas e não é recomendado o seu uso em ambientes de exploração/produção.",
+    "config-support-sqlite": "* $1 é uma plataforma de base de dados ligeira muito bem suportada. ([http://www.php.net/manual/en/pdo.installation.php Como compilar PHP com suporte SQLite], usa PDO)",
+    "config-support-oracle": "* $1 é uma base de dados de uma empresa comercial. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])",
+    "config-header-mysql": "Definições MySQL",
+    "config-header-postgres": "Definições PostgreSQL",
+    "config-header-sqlite": "Definições SQLite",
+    "config-header-oracle": "Definições Oracle",
+    "config-invalid-db-type": "O tipo de base de dados é inválido",
+    "config-missing-db-name": "Tem de introduzir um valor para \"Nome da base de dados\"",
+    "config-missing-db-host": "Tem de introduzir um valor para \"Servidor da base de dados\"",
+    "config-missing-db-server-oracle": "Tem de introduzir um valor para \"TNS da base de dados\"",
+    "config-invalid-db-server-oracle": "O TNS da base de dados, \"$1\", é inválido.\nUse só letras (a-z, A-Z), algarismos (0-9), sublinhados (_) e pontos (.) dos caracteres ASCII.",
+    "config-invalid-db-name": "O nome da base de dados, \"$1\",  é inválido.\nUse só letras (a-z, A-Z), algarismos (0-9), sublinhados (_) e hífens (-) dos caracteres ASCII.",
+    "config-invalid-db-prefix": "O prefixo da base de dados, \"$1\",  é inválido.\nUse só letras (a-z, A-Z), algarismos (0-9), sublinhados (_) e hífens (-) dos caracteres ASCII.",
+    "config-connection-error": "$1.\n\nVerifique o servidor, o nome do utilizador e a palavra-chave abaixo e tente novamente.",
+    "config-invalid-schema": "O esquema ''(schema)'' do MediaWiki, \"$1\", é inválido.\nUse só letras (a-z, A-Z), algarismos (0-9) e sublinhados (_) dos caracteres ASCII.",
+    "config-db-sys-create-oracle": "O instalador só permite criar uma conta nova usando uma conta SYSDBA.",
+    "config-db-sys-user-exists-oracle": "A conta \"$1\" já existe. A conta SYSDBA só pode criar uma conta nova!",
+    "config-postgres-old": "É necessário o PostgreSQL $1 ou posterior; tem a versão $2.",
+    "config-sqlite-name-help": "Escolha o nome que identificará a sua wiki.\nNão use espaços ou hífens.\nEste nome será usado como nome do ficheiro de dados do SQLite.",
+    "config-sqlite-parent-unwritable-group": "Não é possível criar o diretório de dados <code><nowiki>$1</nowiki></code>, porque o servidor de internet não tem permissão de escrita no diretório que o contém <code><nowiki>$2</nowiki></code>.\n\nO instalador determinou em que nome de utilizador o seu servidor de internet está a correr.\nPara continuar, configure o diretório <code><nowiki>$3</nowiki></code> para poder ser escrito por este utilizador.\nPara fazê-lo em sistemas Unix ou Linux, use:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Não é possível criar o diretório de dados <code><nowiki>$1</nowiki></code>, porque o servidor de internet não tem permissão de escrita no diretório que o contém <code><nowiki>$2</nowiki></code>.\n\nNão foi possível determinar em que nome de utilizador o seu servidor de internet está a correr.\nPara continuar, configure o diretório <code><nowiki>$3</nowiki></code> para que este possa ser globalmente escrito por esse utilizador (e por outros!).\nPara fazê-lo em sistemas Unix ou Linux, use:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Ocorreu um erro ao criar o diretório de dados \"$1\".\nVerifique a localização e tente novamente.",
+    "config-sqlite-dir-unwritable": "Não foi possível escrever no diretório \"$1\".\nAltere as permissões para que ele possa ser escrito pelo servidor de internet e tente novamente.",
+    "config-sqlite-connection-error": "$1.\n\nVerifique o diretório de dados e o nome da base de dados abaixo e tente novamente.",
+    "config-sqlite-readonly": "Não é possivel escrever no ficheiro <code>$1</code>.",
+    "config-sqlite-cant-create-db": "Não foi possível criar o ficheiro da base de dados <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "O PHP não tem suporte FTS3; a reverter o esquema das tabelas para o anterior",
+    "config-can-upgrade": "Esta base de dados contém tabelas do MediaWiki.\nPara atualizá-las para o MediaWiki $1, clique '''Continuar'''.",
+    "config-upgrade-done": "Atualização terminada.\n\nAgora pode [$1 começar a usar a sua wiki].\n\nSe quiser regenerar o seu ficheiro <code>LocalSettings.php</code>, clique o botão abaixo.\nEsta operação '''não é recomendada''' a menos que esteja a ter problemas com a sua wiki.",
+    "config-upgrade-done-no-regenerate": "Atualização terminada.\n\nAgora pode [$1 começar a usar a sua wiki].",
+    "config-regenerate": "Regenerar o LocalSettings.php →",
+    "config-show-table-status": "A consulta <code>SHOW TABLE STATUS</code> falhou!",
+    "config-unknown-collation": "'''Aviso:''' A base de dados está a utilizar uma colação ''(collation)'' desconhecida.",
+    "config-db-web-account": "Conta na base de dados para acesso pela internet",
+    "config-db-web-help": "Selecione o nome de utilizador e a palavra-chave que o servidor de internet irá utilizar para aceder ao servidor da base de dados, durante a operação normal da wiki.",
+    "config-db-web-account-same": "Usar a mesma conta usada na instalação",
+    "config-db-web-create": "Criar a conta se ainda não existir",
+    "config-db-web-no-create-privs": "A conta que especificou para a instalação não tem privilégios suficientes para criar uma conta.\nA conta que especificar aqui já tem de existir.",
+    "config-mysql-engine": "Motor de armazenamento:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Aviso''': Selecionou o MyISAM para motor de armazenamento do MySQL, uma combinação desaconselhada para usar com o MediaWiki porque:\n* praticamente não permite acessos simultâneos, devido aos bloqueios de tabelas\n* o MyISAM é mais suscetível a perdas da integridade dos dados do que outros motores\n* o código do MediaWiki não trabalha devidamente com o MyISAM\n\nSe a sua instalação do MySQL suporta InnoDB, é altamente recomendado que o escolha em vez do MyISAM.\nSe não suporta o InnoDB, talvez esta seja uma boa altura para fazer a atualização para a versão mais recente do MySQL.",
+    "config-mysql-engine-help": "'''InnoDB''' é quase sempre a melhor opção, porque suporta bem acessos simultâneos ''(concurrency)''.\n\n'''MyISAM''' pode ser mais rápido no modo de utilizador único ou em instalações somente para leitura.\nAs bases de dados MyISAM tendem a ficar corrompidas com maior frequência do que as bases de dados InnoDB.",
+    "config-mysql-charset": "Conjunto de caracteres da base de dados:",
+    "config-mysql-binary": "Binary",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "No modo '''binary''' (\"binário\"), o MediaWiki armazena o texto UTF-8 na base de dados em campos binários.\nIsto é mais eficiente do que o modo UTF-8 do MySQL e permite que sejam usados todos os caracteres Unicode.\n\nNo modo '''UTF-8''', o MySQL saberá em que conjunto de caracteres os seus dados estão e pode apresentá-los e convertê-los da forma mais adequada,\nmas não lhe permitirá armazenar caracteres acima do [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Básico].",
+    "config-site-name": "Nome da wiki:",
+    "config-site-name-help": "Este nome aparecerá no título da janela do seu browser e em vários outros sítios.",
+    "config-site-name-blank": "Introduza o nome do site.",
+    "config-project-namespace": "Espaço nominal do projeto:",
+    "config-ns-generic": "Projeto",
+    "config-ns-site-name": "O mesmo que o nome da wiki: $1",
+    "config-ns-other": "Outro (especifique)",
+    "config-ns-other-default": "AMinhaWiki",
+    "config-project-namespace-help": "Seguindo o exemplo da Wikipedia, muitas wikis mantêm as páginas das suas normas e políticas, separadas das páginas de conteúdo, num \"'''espaço nominal do projeto'''\".\nTodos os nomes das páginas neste espaço nominal começam com um determinado prefixo, que pode especificar aqui.\nTradicionalmente, este prefixo deriva do nome da wiki, mas não pode conter caracteres de pontuação, como \"#\" ou \":\".",
+    "config-ns-invalid": "O espaço nominal especificado \"<nowiki>$1</nowiki>\" é inválido.\nIntroduza um espaço nominal de projeto diferente.",
+    "config-ns-conflict": "O espaço nominal que especificou, \"<nowiki>$1</nowiki>\", cria um conflito com um dos espaços nominais padrão do MediaWiki.\nEspecifique um espaço nominal do projeto diferente.",
+    "config-admin-box": "Conta de administrador",
+    "config-admin-name": "O seu nome:",
+    "config-admin-password": "Palavra-chave:",
+    "config-admin-password-confirm": "Repita a palavra-chave:",
+    "config-admin-help": "Introduza aqui o seu nome de utilizador preferido, por exemplo, \"João Beltrão\".\nEste é o nome que irá utilizar para entrar na wiki.",
+    "config-admin-name-blank": "Introduza um nome de utilizador para administrador.",
+    "config-admin-name-invalid": "O nome de utilizador especificado \"<nowiki>$1</nowiki>\" é inválido.\nIntroduza um nome de utilizador diferente.",
+    "config-admin-password-blank": "Introduza uma palavra-chave para a conta de administrador.",
+    "config-admin-password-same": "A palavra-chave tem de ser diferente do nome de utilizador.",
+    "config-admin-password-mismatch": "As duas palavras-chave que introduziu não coincidem.",
+    "config-admin-email": "Correio electrónico:",
+    "config-admin-email-help": "Introduza aqui um correio electrónico que lhe permita receber mensagens de outros utilizadores da wiki, reiniciar a sua palavra-chave e receber notificações de alterações às suas páginas vigiadas. Pode deixar o campo vazio.",
+    "config-admin-error-user": "Ocorreu um erro interno ao criar um administrador com o nome \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Ocorreu um erro interno ao definir uma palavra-chave para o administrador \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+    "config-admin-error-bademail": "Introduziu um correio electrónico inválido",
+    "config-subscribe": "Subscreva a [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista de divulgação de anúncios de lançamento].",
+    "config-subscribe-help": "Esta é uma lista de divulgação de baixo volume para anúncios de lançamento de versões novas, incluindo anúncios de segurança importantes.\nDeve subscrevê-la e atualizar a sua instalação MediaWiki quando são lançadas versões novas.",
+    "config-subscribe-noemail": "Tentou subscrever a lista de divulgação dos anúncios de novas versões, sem fornecer um endereço de correio electrónico.\nPara subscrever esta lista de divulgação tem de fornecer um endereço de correio electrónico.",
+    "config-almost-done": "Está quase a terminar!\nAgora pode saltar as configurações restantes e instalar já a wiki.",
+    "config-optional-continue": "Faz-me mais perguntas.",
+    "config-optional-skip": "Já estou aborrecido, instala lá a wiki.",
+    "config-profile": "Perfil de permissões:",
+    "config-profile-wiki": "Wiki tradicional",
+    "config-profile-no-anon": "Criação de conta exigida",
+    "config-profile-fishbowl": "Somente utilizadores autorizados",
+    "config-profile-private": "Wiki privada",
+    "config-profile-help": "As wikis funcionam melhor quando se deixa tantas pessoas editá-las quanto possível.\nNo MediaWiki, é fácil rever as alterações recentes e reverter quaisquer estragos causados por utilizadores novatos ou maliciosos.\n\nNo entanto, muitas pessoas consideram o MediaWiki útil de variadas formas e nem sempre é fácil convencer todas as pessoas dos benefícios desta filosofia wiki.\nPor isso pode optar.\n\nUma '''{{int:config-profile-wiki}}''' permite que todos a editem, sem sequer necessitar de autenticação.\nUma wiki com '''{{int:config-profile-no-anon}}''' atribui mais responsabilidade, mas pode afastar os colaboradores ocasionais.\n\nUm cenário '''{{int:config-profile-fishbowl}}''' permite que os utilizadores aprovados editem, mas que o público visione as páginas, incluindo o historial das mesmas.\nUma '''{{int:config-profile-private}}''' só permite que os utilizadores aprovados visionem as páginas e as editem.\n\nApós a instalação, estarão disponíveis mais configurações de privilégios. Consulte [//www.mediawiki.org/wiki/Manual:User_rights a entrada relevante no Manual].",
+    "config-license": "Direitos de autor e licença:",
+    "config-license-none": "Sem rodapé com a licença",
+    "config-license-cc-by-sa": "Creative Commons - Atribuição - Partilha nos Mesmos Termos",
+    "config-license-cc-by": "Creative Commons - Atribuição",
+    "config-license-cc-by-nc-sa": "Creative Commons - Atribuição - Uso Não Comercial - Partilha nos Mesmos Termos",
+    "config-license-cc-0": "Creative Commons Zero (Domínio Público)",
+    "config-license-gfdl": "GNU Free Documentation License 1.3 ou posterior",
+    "config-license-pd": "Domínio Público",
+    "config-license-cc-choose": "Selecione uma licença personalizada Creative Commons",
+    "config-license-help": "Muitas wikis de acesso público licenciam todas as colaborações com uma [http://freedomdefined.org/Definition licença livre].\nIsto ajuda a criar um sentido de propriedade da comunidade e encoraja as colaborações a longo prazo.\nTal não é geralmente necessário nas wikis privadas ou corporativas.\n\nSe pretende que seja possível usar textos da Wikipédia na sua wiki e que seja possível a Wikipédia aceitar textos copiados da sua wiki, deve escolher a licença Creative Commons - Atribuição - Partilha nos Mesmos Termos.\n\nA licença anterior da Wikipédia era a licença GNU Free Documentation License.\nA GFDL é uma licença válida, mas de difícil compreensão.\nTambém é difícil reutilizar conteúdos licenciados com a GFDL.",
+    "config-email-settings": "Definições do correio electrónico",
+    "config-enable-email": "Ativar mensagens eletrónicas de saída",
+    "config-enable-email-help": "Se quer que o correio eletrónico funcione, as [http://www.php.net/manual/en/mail.configuration.php definições de correio eletrónico do PHP] têm de estar configuradas corretamente.\nSe não pretende viabilizar qualquer funcionalidade de correio eletrónico, pode desativá-lo aqui.",
+    "config-email-user": "Ativar mensagens eletrónicas entre utilizadores",
+    "config-email-user-help": "Permitir que todos os utilizadores troquem entre si mensagens de correio eletrónico, se tiverem ativado esta funcionalidade nas suas preferências.",
+    "config-email-usertalk": "Ativar notificações de alterações à página de discussão dos utilizadores",
+    "config-email-usertalk-help": "Permitir que os utilizadores recebam notificações de alterações à sua página de discussão, se tiverem ativado esta funcionalidade nas suas preferências.",
+    "config-email-watchlist": "Ativar notificação de alterações às páginas vigiadas",
+    "config-email-watchlist-help": "Permitir que os utilizadores recebam notificações de alterações às suas páginas vigiadas, se tiverem ativado esta funcionalidade nas suas preferências.",
+    "config-email-auth": "Ativar autenticação do correio eletrónico",
+    "config-email-auth-help": "Se esta opção for ativada, os utilizadores têm de confirmar o seu endereço de correio eletrónico usando um link que lhes é enviado sempre que o definirem ou alterarem.\nSó os endereços de correio eletrónico autenticados podem receber mensagens eletrónicas dos outros utilizadores ou alterar as mensagens de notificação.\nÉ '''recomendado''' que esta opção seja ativada nas wikis de acesso público para impedir o uso abusivo das funcionalidades de correio eletrónico.",
+    "config-email-sender": "Endereço de correio electrónico de retorno:",
+    "config-email-sender-help": "Introduza o endereço de correio electrónico que será usado como endereço de retorno nas mensagens electrónicas de saída.\nÉ para este endereço que serão enviadas as mensagens que não podem ser entregues.\nMuitos servidores de correio electrónico exigem que pelo menos a parte do nome do domínio seja válida. \\",
+    "config-upload-settings": "Upload de imagens e ficheiros",
+    "config-upload-enable": "Possibilitar o upload de ficheiros",
+    "config-upload-help": "O upload de ficheiros expõe o seu servidor a riscos de segurança.\nPara mais informações, leia a [//www.mediawiki.org/wiki/Manual:Security seção sobre segurança] do Manual Técnico.\n\nPara permitir o upload de ficheiros, altere as permissões do subdiretório <code>images</code> no diretório de raiz do MediaWiki para que o servidor de internet possa escrever nele.\nDepois ative esta opção.",
+    "config-upload-deleted": "Diretório para os ficheiros apagados:",
+    "config-upload-deleted-help": "Escolha um diretório onde serão arquivados os ficheiros apagados.\nO ideal é que este diretório não possa ser diretamente acedido a partir da internet.",
+    "config-logo": "URL do logótipo:",
+    "config-logo-help": "O tema padrão do MediaWiki inclui espaço para um logótipo de 135x160 pixels acima do menu da barra lateral.\nColoque na wiki uma imagem com estas dimensões e introduza aqui a URL dessa imagem.\n\nSe não pretende usar um logótipo, deixe este campo em branco.",
+    "config-instantcommons": "Ativar Instant Commons",
+    "config-instantcommons-help": "O [//www.mediawiki.org/wiki/InstantCommons Instant Commons] é uma funcionalidade que permite que as wikis usem imagens, áudio e outros ficheiros multimédia disponíveis no site [//commons.wikimedia.org/ Wikimedia Commons].\nPara poder usá-los, o MediaWiki necessita de acesso à internet.\n\nPara mais informações sobre esta funcionalidade, incluindo instruções sobre como configurá-la para usar outras wikis em vez da Wikimedia Commons, consulte o [//mediawiki.org/wiki/Manual:$wgForeignFileRepos Manual Técnico].",
+    "config-cc-error": "O auxiliar de escolha de licenças da Creative Commons não produziu resultados.\nIntroduza o nome da licença manualmente.",
+    "config-cc-again": "Escolha outra vez...",
+    "config-cc-not-chosen": "Escolha a licença da Creative Commons que pretende e clique \"continuar\".",
+    "config-advanced-settings": "Configuração avançada",
+    "config-cache-options": "Configuração da cache de objetos:",
+    "config-cache-help": "A cache de objetos é usada para melhorar o desempenho do MediaWiki. Armazena dados usados com frequência.\nSites de tamanho médio ou grande são altamente encorajados a ativar esta funcionalidade e os sites pequenos também terão alguns benefícios em fazê-lo.",
+    "config-cache-none": "Sem cache (não é removida nenhuma funcionalidade, mas a velocidade de operação pode ser afectada nas wikis grandes)",
+    "config-cache-accel": "Cache de objetos do PHP (APC, XCache ou WinCache)",
+    "config-cache-memcached": "Usar Memcached (requer instalação e configurações adicionais)",
+    "config-memcached-servers": "Servidores Memcached:",
+    "config-memcached-help": "Lista de endereços IP que serão usados para o Memcached.\nDeve-se colocar um por linha e indicar a porta a utilizar. Por exemplo:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "Selecionou o Memcached como tipo de chache, mas não especificou nenhum servidor.",
+    "config-memcache-badip": "Introduziu um endereço IP inválido para o Memcached: $1.",
+    "config-memcache-noport": "Não especificou a porta a usar para o servidor Memcached: $1.\nSe não sabe qual é a porta, a predefinida é a 11211.",
+    "config-memcache-badport": "Os números das portas do Memcached devem estar entre $1 e $2.",
+    "config-extensions": "Extensões",
+    "config-extensions-help": "Foi detectada a existência das extensões listadas acima, no seu diretório <code>./extensions</code>.\n\nEstas talvez necessitem de configurações adicionais, mas pode ativá-las agora",
+    "config-install-alreadydone": "'''Aviso:''' Parece que já instalou o MediaWiki e está a tentar instalá-lo novamente.\nPasse para a próxima página, por favor.",
+    "config-install-begin": "Ao clicar \"{{int:config-continue}}\", vai iniciar a instalação do MediaWiki.\nSe quiser fazer mais alterações, clique Voltar.",
+    "config-install-step-done": "terminado",
+    "config-install-step-failed": "falhou",
+    "config-install-extensions": "A incluir as extensões",
+    "config-install-database": "A preparar a base de dados",
+    "config-install-schema": "A criar o esquema (''schema'') da base de dados",
+    "config-install-pg-schema-not-exist": "O esquema ''(schema)'' PostgreSQL não existe",
+    "config-install-pg-schema-failed": "A criação das tabelas falhou.\nCertifique-se de que o utilizador \"$1\" pode escrever no esquema ''(schema)'' \"$2\".",
+    "config-install-pg-commit": "A gravar as alterações",
+    "config-install-pg-plpgsql": "A verificar a presença da linguagem PL/pgSQL",
+    "config-pg-no-plpgsql": "É preciso instalar a linguagem PL/pgSQL na base de dados $1",
+    "config-pg-no-create-privs": "A conta que especificou para a instalação não tem privilégios suficientes para criar uma conta.",
+    "config-pg-not-in-role": "A conta que especificou para o utilizador da internet já existe.\nA conta que especificou para a instalação não é a de um super-utilizador e não pertence ao grupo de utilizadores de acesso pela internet, por isso não pode criar objetos que pertencem ao utilizador da internet.\n\nO MediaWiki necessita que as tabelas pertençam ao utilizador da internet. Especifique outra conta de internet, ou clique \"voltar\" e especifique um utilizador com os privilégios necessários para a instalação.",
+    "config-install-user": "A criar o utilizador da base de dados",
+    "config-install-user-alreadyexists": "O utilizador \"$1\" já existe",
+    "config-install-user-create-failed": "A criação do utilizador \"$1\" falhou: $2",
+    "config-install-user-grant-failed": "A atribuição das permissões ao utilizador \"$1\" falhou: $2",
+    "config-install-user-missing": "O utilizador especificado, \"$1\", não existe.",
+    "config-install-user-missing-create": "O utilizador especificado, \"$1\", não existe.\nMarque a caixa de seleção \"criar conta\" abaixo se pretende criá-la, por favor.",
+    "config-install-tables": "A criar as tabelas",
+    "config-install-tables-exist": "'''Aviso''': As tabelas do MediaWiki parecem já existir.\nA criação das tabelas será saltada.",
+    "config-install-tables-failed": "'''Erro''': A criação das tabelas falhou com o seguinte erro: $1",
+    "config-install-interwiki": "A preencher a tabela padrão de interwikis",
+    "config-install-interwiki-list": "Não foi possível encontrar o ficheiro <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "'''Aviso''': A tabela de interwikis parece já conter entradas.\nO preenchimento padrão desta tabela será saltado.",
+    "config-install-stats": "A inicializar as estatísticas",
+    "config-install-keys": "A gerar as chaves secretas",
+    "config-insecure-keys": "'''Warning:''' {{PLURAL:$2|A chave segura|As chaves seguras}} ($1) {{PLURAL:$2|gerada durante a instalação não é completamente segura|geradas durante a instalação não são completamente seguras}}. Considere a possibilidade de {{PLURAL:$2|alterá-la|alterá-las}} manualmente.",
+    "config-install-sysop": "A criar a conta de administrador",
+    "config-install-subscribe-fail": "Não foi possível subscrever a lista mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "cURL não está instalado e allow_url_fopen não está disponível.",
+    "config-install-mainpage": "A criar a página principal com o conteúdo padrão.",
+    "config-install-extension-tables": "A criar as tabelas das extensões ativadas",
+    "config-install-mainpage-failed": "Não foi possível inserir a página principal: $1",
+    "config-install-done": "'''Parabéns!'''\nTerminou a instalação do MediaWiki.\n\nO instalador gerou um ficheiro <code>LocalSettings.php</code>.\nEste ficheiro contém todas as configurações.\n\nPrecisa de fazer o download do ficheiro e colocá-lo no diretório de raiz da sua instalação (o mesmo diretório onde está o ficheiro index.php). Este download deverá ter sido iniciado automaticamente.\n\nSe o download não foi iniciado, ou se o cancelou, pode recomeçá-lo clicando o link abaixo:\n\n$3\n\n'''Nota''': Se não fizer isto agora, o ficheiro que foi gerado deixará de estar disponível quando sair do processo de instalação.\n\nDepois de terminar o passo anterior, pode '''[$2 entrar na wiki]'''.",
+    "config-download-localsettings": "Download do <code>LocalSettings.php</code>",
+    "config-help": "ajuda",
+    "config-nofile": "Não foi possível encontrar o ficheiro \"$1\". Terá sido apagado?",
+    "mainpagetext": "'''MediaWiki instalado com sucesso.'''",
+    "mainpagedocfooter": "Consulte o [//meta.wikimedia.org/wiki/Help:Contents Guia de Utilizadores] para informações sobre o uso do software wiki.\n\n== Onde começar ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de opções de configuração]\n* [//www.mediawiki.org/wiki/Manual:FAQ Perguntas e respostas frequentes sobre o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Subscreva a lista de divulgação de novas versões do MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/qqq.json b/includes/installer/i18n/qqq.json
new file mode 100644 (file)
index 0000000..0663853
--- /dev/null
@@ -0,0 +1,188 @@
+{
+    "@metadata": {
+        "authors": [
+            "Amire80",
+            "Dani",
+            "EugeneZelenko",
+            "Kghbln",
+            "McDutchie",
+            "Mormegil",
+            "Nemo bis",
+            "Nike",
+            "Platonides",
+            "Purodha",
+            "Raymond",
+            "SPQRobin",
+            "Shirayuki",
+            "Siebrand",
+            "Umherirrender",
+            "Waldir"
+        ]
+    },
+    "config-desc": "Short description of the installer.",
+    "config-title": "Parameters:\n* $1 is the version of MediaWiki that is being installed.",
+    "config-information": "{{Identical|Information}}",
+    "config-localsettings-upgrade": "{{doc-important|Do not translate <code>LocalSettings.php</code> and <code>$wgUpgradeKey</code>.}}",
+    "config-localsettings-cli-upgrade": "{{doc-important|Do not translate the <code>LocalSettings.php</code> and the <code>update.php</code> parts.}}",
+    "config-upgrade-key-missing": "Used in info box. Parameters:\n* $1 - the upgrade key, enclosed in <code><nowiki><pre></nowikI></code> tag.",
+    "config-localsettings-incomplete": "{{doc-important|Do not translate <code>LocalSettings.php</code> and <code><nowiki>{{int:Config-continue}}</nowiki><code>.}}\nParameters:\n* $1 - name of variable (any one of required variables or installer-specific global variables)",
+    "config-localsettings-connection-error": "{{doc-important|Do not translate <code>LocalSettings.php</code>.}}\nUsed as error message. Parameters:\n* $1 - (probably empty string)",
+    "config-session-error": "Parameters:\n* $1 is the error that was encountered with the session.",
+    "config-session-expired": "Parameters:\n* $1 is the configured session lifetime.",
+    "config-no-session": "{{doc-important|Do not translate <code>php.ini</code> and <code>session.save_path</code>.}}\nUsed as error message.",
+    "config-back": "{{Identical|Back}}",
+    "config-continue": "{{Identical|Continue}}",
+    "config-page-language": "{{Identical|Language}}",
+    "config-page-name": "{{Identical|Name}}",
+    "config-page-options": "{{Identical|Options}}",
+    "config-page-install": "{{Identical|Install}}",
+    "config-page-complete": "{{Identical|Complete}}",
+    "config-page-releasenotes": "{{Identical|Release notes}}",
+    "config-page-copying": "This is a link to the full GPL text",
+    "config-restart": "Button text to confirm the installation procedure has to be restarted.",
+    "config-copyright": "This message follows {{msg-mw|config-env-good}}.\n\nParameters:\n* $1 - copyright and author list",
+    "config-sidebar": "Maximum width for words is 24 characters. Only visible part of the translation counts to this limit.",
+    "config-env-php": "Parameters:\n* $1 - the version of PHP that has been installed\nSee also:\n* {{msg-mw|config-env-php-toolow}}",
+    "config-env-php-toolow": "Parameters:\n* $1 - the version of PHP that has been installed\n* $2 - minimum PHP version number\nSee also:\n* {{msg-mw|config-env-php}}",
+    "config-unicode-pure-php-warning": "PECL is the name of a group producing standard pieces of software for PHP, and intl is the name of their library handling some aspects of internationalization.",
+    "config-unicode-update-warning": "ICU is a body producing standard software tools for support of Unicode and other internationalization aspects. This message warns the system administrator installing MediaWiki that the server's software is not up-to-date and MediaWiki will have problems handling some characters.",
+    "config-no-db": "{{doc-important|Do not translate \"<code>./configure --with-mysqli</code>\" and \"<code>php5-mysql</code>\".}}\nParameters:\n* $1 is comma separated list of database types supported by MediaWiki.",
+    "config-outdated-sqlite": "Used as warning. Parameters:\n* $1 - the version of SQLite that has been installed\n* $2 - minimum version",
+    "config-no-fts3": "A \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.",
+    "config-magic-quotes-runtime": "{{Related|Config-fatal}}",
+    "config-magic-quotes-sybase": "{{Related|Config-fatal}}",
+    "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-old": "Parameters:\n* $1 - minimum PCRE version number\n* $2 - the installed version of [[wikipedia:PCRE|PCRE]]\n{{Related|Config-fatal}}",
+    "config-pcre-no-utf8": "PCRE is a name of a programmers' library for supporting regular expressions. It can probably be translated without change.\n{{Related|Config-fatal}}",
+    "config-memory-raised": "Parameters:\n* $1 is the configured <code>memory_limit</code>.\n* $2 is the value to which <code>memory_limit</code> was raised.",
+    "config-memory-bad": "Parameters:\n* $1 is the configured <code>memory_limit</code>.",
+    "config-ctype": "Message if support for [http://www.php.net/manual/en/ctype.installation.php Ctype] is missing from PHP",
+    "config-json": "Message if support for [[wikipedia:JSON|JSON]] is missing from PHP.\n* \"[[wikipedia:Red Hat Enterprise Linux|Red Hat Enterprise Linux]]\" (RHEL) and \"[[wikipedia:CentOS|CentOS]]\" refer to two almost-identical Linux distributions. \"5 and 6\" refers to version 5 or 6 of either distribution. Because RHEL 7 likely will not include the PHP extension, do not translate as \"5 or newer\".\n* \"The [http://www.php.net/json PHP extension]\" is the JSON extension included with PHP 5.2 and newer.\n* \"The [http://pecl.php.net/package/jsonc PECL extension]\" is based on the PHP extension, though excludes code some distributions have found unacceptable (see [[bugzilla:47431]]).",
+    "config-xcache": "Message indicates if this program is available",
+    "config-apc": "Message indicates if this program is available",
+    "config-wincache": "Message indicates if this program is available",
+    "config-git": "Message if Git version control software is available.\nParameter:\n* $1 is the <code>Git</code> executable file name.",
+    "config-git-bad": "Message if Git version control software is not found.",
+    "config-imagemagick": "$1 is ImageMagick's <code>convert</code> executable file name.\n\nAdd dir=\"ltr\" to the <nowiki><code></nowiki> for right-to-left languages.",
+    "config-no-cli-uri": "Parameters:\n* $1 is the default value for scriptpath.",
+    "config-using-server": "Used as a part of environment check result. Parameters:\n* $1 - default server name",
+    "config-using-uri": "Used as a part of environment check result. Parameters:\n* $1 - server name\n* $2 - script path",
+    "config-uploads-not-safe": "Used as a part of environment check result. Parameters:\n* $1 - name of directory for images: <code>$IP/images/</code>",
+    "config-no-cli-uploads-check": "CLI = [[w:Command-line interface|command-line interface]] (i.e. the installer runs as a command-line script, not using HTML interface via an internet browser)",
+    "config-using531": "Used as error message. Parameters:\n* $1 - the version of PHP that has been installed",
+    "config-suhosin-max-value-length": "{{doc-important|Do not translate \"length\", \"suhosin.get.max_value_length\", \"php.ini\", \"$wgResourceLoaderMaxQueryLength\" and \"LocalSettings.php\".}}\nMessage shown when PHP parameter <code>suhosin.get.max_value_length</code> is between 0 and 1023 (that max value is hard set in MediaWiki software).",
+    "config-db-host-help": "{{doc-singularthey}}",
+    "config-db-host-oracle": "TNS = [[:wikipedia:Transparent Network Substrate|Transparent Network Substrate]] (<== wikipedia link)",
+    "config-db-host-oracle-help": "See also:\n* {{msg-mw|Config-invalid-db-server-oracle}}",
+    "config-db-wiki-settings": "This is more acurate: \"Enter identifying or distinguishing data for this wiki\" since a MySQL database can host tables of several wikis.",
+    "config-db-account-oracle-warn": "A \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.",
+    "config-db-password-empty": "Used as error message. Parameters:\n* $1 - database username",
+    "config-db-account-lock": "It might be easier to translate ''normal operation'' as \"also after the installation process\"",
+    "config-mysql-old": "Used as error message. Parameters:\n* $1 - minimum version\n* $2 - the version of MySQL that has been installed",
+    "config-pg-test-error": "* $1 - database name\n* $2 - error message",
+    "config-sqlite-dir-help": "{{doc-important|Do not translate <code>.htaccess</code> and <code>/var/lib/mediawiki/yourwiki</code>.}}\nUsed in help box.",
+    "config-type-mysql": "\"Or compatible\" refers to several database systems that are compatible with MySQL, as explained in {{msg-mw|config-dbsupport-mysql}}, and thus also work with this choice of database type.",
+    "config-type-postgres": "{{optional}}",
+    "config-type-sqlite": "{{optional}}",
+    "config-type-oracle": "{{optional}}",
+    "config-type-mssql": "{{optional}}",
+    "config-header-mssql": "Used as a section heading on the installer form, inside of a fieldset",
+    "config-support-info": "Parameters:\n* $1 - a list of DBMSs that MediaWiki supports, composed with config-dbsupport-* messages.",
+    "config-support-mysql": "Parameters:\n* $1 - a link to the MySQL home page having the anchor text \"MySQL\".",
+    "config-support-postgres": "Parameters:\n* $1 - a link to the PostgreSQL home page having the anchor text \"PostgreSQL\".",
+    "config-support-sqlite": "Parameters:\n* $1 - a link to the SQLite home page having the anchor text \"SQLite\".",
+    "config-support-oracle": "Parameters:\n* $1 - a link to the Oracle home page, the anchor text of which is \"Oracle\".",
+    "config-dbsupport-mysql": "Used in {{msg-mw|config-support-info}}.",
+    "config-dbsupport-postgres": "Used in {{msg-mw|config-support-info}}.",
+    "config-dbsupport-sqlite": "Used in {{msg-mw|config-support-info}}.",
+    "config-dbsupport-oracle": "Used in {{msg-mw|config-support-info}}.",
+    "config-invalid-db-server-oracle": "Used as error message. Parameters:\n* $1 - database server name\nSee also:\n* {{msg-mw|Config-db-host-oracle-help}}",
+    "config-support-mssql": "Parameters:\n* $1 - a link to the Microsoft SQL Server home page, the anchor text of which is \"Microsoft SQL Server\".",
+    "config-invalid-db-name": "Used as error message. Parameters:\n* $1 - database name\nSee also:\n* {{msg-mw|Config-invalid-db-prefix}}",
+    "config-invalid-db-prefix": "Used as error message. Parameters:\n* $1 - database prefix\nSee also:\n* {{msg-mw|Config-invalid-db-name}}",
+    "config-connection-error": "$1 is the external error from the database, such as \"DB connection error: Access denied for user 'dba'@'localhost' (using password: YES) (localhost).\"\n\nIf you're translating this message to a right-to-left language, consider writing <nowiki><div dir=\"ltr\">$1.</div></nowiki>. (When the bidi features for HTML5 will be implemented in the browsers, it will probably be a good idea to write it as <nowiki><div dir=\"auto\">$1.</div></nowiki>.)",
+    "config-invalid-schema": "*$1 - schema name",
+    "config-db-sys-user-exists-oracle": "Used as error message. Parameters:\n* $1 - database username",
+    "config-postgres-old": "Used as error message. Used as warning. Parameters:\n* $1 - minimum version\n* $2 - the version of PostgreSQL that has been installed",
+    "config-mssql-old": "Used as an error message. Parameters:\n* $1 - minimum version\n* $2 - the version of Microsoft SQL Server that has been installed",
+    "config-sqlite-parent-unwritable-group": "Used as SQLite error message. Parameters:\n* $1 - data directory\n* $2 - \"dirname\" part of $1\n* $3 - \"basename\" part of $1\n* $4 - web server's primary group name\nSee also:\n* {{msg-mw|Config-sqlite-parent-unwritable-nogroup}}",
+    "config-sqlite-parent-unwritable-nogroup": "Used as SQLite error message. Parameters:\n* $1 - data directory\n* $2 - \"dirname\" part of $1\n* $3 - \"basename\" part of $1\nSee also:\n* {{msg-mw|Config-sqlite-parent-unwritable-group}}",
+    "config-sqlite-mkdir-error": "Used as SQLite error message. Parameters:\n* $1 - data directory name",
+    "config-sqlite-dir-unwritable": "webserver refers to a software like Apache or Lighttpd.",
+    "config-sqlite-connection-error": "Used as SQLite error message. Parameters:\n* $1 - error message which SQLite server returned",
+    "config-sqlite-readonly": "Used as SQLite error message. Parameters:\n* $1 - filename",
+    "config-sqlite-cant-create-db": "Used as SQLite error message. Parameters:\n* $1 - filename",
+    "config-mssql-auth": "radio button label",
+    "config-mssql-install-auth": "Used as the help text for the \"Authentication type\" radio button when typing in database settings for installation",
+    "config-mssql-web-auth": "Used as the help text for the \"Authentication type\" radio button when typing in database settings for normal wiki usage",
+    "config-mssql-sqlauth": "Radio button",
+    "config-mssql-windowsauth": "Radio button. The official term is \"Integrated Windows Authentication\" but Microsoft itself uses \"Windows Authentication\" elsewhere in Microsoft SQL Server as a synonym.",
+    "config-can-upgrade": "Parameters:\n* $1 - Version or Revision indicator.",
+    "config-upgrade-done": "Used as success message. Parameters:\n* $1 - full URL of index.php\nSee also:\n* {{msg-mw|config-upgrade-done-no-regenerate}}",
+    "config-upgrade-done-no-regenerate": "Used as success message. Parameters:\n* $1 - full URL of index.php\nSee also:\n* {{msg-mw|config-upgrade-done}}",
+    "config-regenerate": "This message appears in a button after LocalSettings.php is generated and downloaded at the end of the MediaWiki installation process.",
+    "config-show-table-status": "{{doc-important|\"<code>SHOW TABLE STATUS</code>\" is a MySQL command. Do not translate this.}}",
+    "config-db-web-account-same": "checkbox label",
+    "config-db-web-create": "checkbox label",
+    "config-mysql-only-myisam-dep": "Used as warning message when mysql does not support the minimum suggested feature set.",
+    "config-mysql-binary": "{{Identical|Binary}}",
+    "config-ns-generic": "Used as label for \"namespace type\" radio button.\n\nSee also:\n* {{msg-mw|Config-ns-site-name}}\n* {{msg-mw|Config-ns-other}}\n{{Identical|Project}}",
+    "config-ns-site-name": "Used as label for \"namespace type\" radio button. Parameters:\n* $1 - wiki name\nSee also:\n* {{msg-mw|Config-ns-generic}}\n* {{msg-mw|Config-ns-other}}",
+    "config-ns-other": "Used as label for \"namespace type\" radio button.\n\nThis message is followed by the input box which enables to '''specify''' a namespace name.\n\nSee also:\n* {{msg-mw|Config-ns-site-name}}\n* {{msg-mw|Config-ns-generic}}",
+    "config-ns-invalid": "Used as error message. Parameters:\n* $1 - namespace name\nSee also:\n* {{msg-mw|Config-ns-conflict}}",
+    "config-ns-conflict": "Used as error message. Parameters:\n* $1 - namespace name\nSee also:\n* {{msg-mw|Config-ns-invalid}}",
+    "config-admin-name": "{{Identical|Your name}}",
+    "config-admin-password": "{{Identical|Password}}",
+    "config-admin-name-invalid": "Used as error message. Parameters:\n* $1 - username of administrator",
+    "config-admin-email": "{{Identical|E-mail address}}",
+    "config-admin-error-user": "Used as error message. Parameters:\n* $1 - username of administrator\nSee also:\n* {{msg-mw|Config-admin-error-password}}",
+    "config-admin-error-password": "Used as error message. Parameters:\n* $1 - username of administrator\n* $2 - error message\nSee also:\n* {{msg-mw|Config-admin-error-user}}",
+    "config-subscribe": "Used as label for the installer checkbox",
+    "config-subscribe-help": "\"Low-volume\" in this context means that there will be few e-mails to that mailing list per time period.",
+    "config-profile-help": "Messages referenced:\n* {{msg-mw|config-profile-wiki}}\n* {{msg-mw|config-profile-no-anon}}\n* {{msg-mw|config-profile-fishbowl}}\n* {{msg-mw|config-profile-private}}",
+    "config-email-settings": "{{Identical|E-mail setting}}",
+    "config-email-user": "{{Identical|Enable user-to-user e-mail}}",
+    "config-upload-help": "The word \"mode\" here refers to the access rights given to various user groups when attempting to create and store files and/or subdiretories in the said directory on the server. It also refers to the <code>mode</code> command used to maipulate said right mask under Unix, Linux, and similar operating systems. A less operating-system-centric translation is fine.",
+    "config-logo-help": "",
+    "config-instantcommons": "Used as label for the checkbox.\n\nThe help message for this checkbox is:\n* {{msg-mw|Config-instantcommons-help}}",
+    "config-instantcommons-help": "Used as help message for the checkbox which is labeled {{msg-mw|config-instantcommons}}.",
+    "config-cc-not-chosen": "{{doc-important|Do not translate the \"<code>proceed</code>\" part.}}\nThis message refers to a block of HTML being embedded into the installer page. It comes from the Creative Commons Web site. The block is in the English language. It is a scripted license chooser. When an individual license has been selected, it asks you to click \"proceed\" so as to return to the MediaWiki installer page.",
+    "config-memcached-servers": "{{doc-important|Do not translate \"memcached\".}}\n{{Identical|Memcached server}}",
+    "config-memcache-badip": "Used as error message. Parameters:\n* $1 - IP address for Memcached\nSee also:\n* {{msg-mw|Config-memcache-noport}}\n* {{msg-mw|Config-memcache-badport}}",
+    "config-memcache-noport": "Used as error message. Parameters:\n* $1 - Memcached server name\nSee also:\n* {{msg-mw|Config-memcache-badip}}\n* {{msg-mw|Config-memcache-badport}}",
+    "config-memcache-badport": "Used as error message. Parameters:\n* $1 - 1 (hard-coded)\n* $2 - 65535 (hard-coded)\nSee also:\n* {{msg-mw|Config-memcache-badip}}\n* {{msg-mw|Config-memcache-noport}}",
+    "config-extensions": "{{Identical|Extension}}",
+    "config-extensions-help": "{{doc-important|Do not translate <code>./extensions</code>.}}\nUsed in help box.",
+    "config-install-step-done": "{{Identical|Done}}",
+    "config-install-step-failed": "{{Identical|Failed}}",
+    "config-install-database": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+    "config-install-schema": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+    "config-install-pg-schema-failed": "Parameters:\n* $1 = database user name (usernames in the database are unrelated to wiki user names)\n* $2 =",
+    "config-pg-no-plpgsql": "Used as error message. Parameters:\n* $1 - database name",
+    "config-install-user": "Message indicates that the user is being created\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+    "config-install-user-alreadyexists": "Used as warning. Parameters:\n* $1 - database username",
+    "config-install-user-create-failed": "Used as MySQL warning and as PostgreSQL error. Parameters:\n* $1 - database username\n* $2 - detailed warning/error message",
+    "config-install-user-grant-failed": "Parameters:\n* $1 is the database username for which granting rights failed\n* $2 is the error message",
+    "config-install-user-missing": "Used as PostgreSQL error message. Parameters:\n* $1 - database username\nSee also:\n* {{msg-mw|Config-install-user-missing-create}}",
+    "config-install-user-missing-create": "Used as PostgreSQL error message. Parameters:\n* $1 - database username\nSee also:\n* {{msg-mw|Config-install-user-missing}}",
+    "config-install-tables": "Message indicates that the tables are being created\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+    "config-install-tables-failed": "Used as PostgreSQL error message. Parameters:\n* $1 - detailed error message",
+    "config-install-interwiki": "Message indicates that the interwikitables are being populated\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+    "config-install-interwiki-list": "{{doc-important|Do not translate <code>interwiki.list</code>.}}\nUsed as error message.",
+    "config-install-stats": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+    "config-install-keys": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+    "config-insecure-keys": "Parameters:\n* $1 - A list of names of the secret keys that were generated.\n* $2 - the number of items in the list $1, to be used with PLURAL.",
+    "config-install-sysop": "Message indicates that the administrator user account is being created\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+    "config-install-subscribe-fail": "{{doc-important|\"mediawiki-announce\" is the name of a mailing list and should not be translated.}}",
+    "config-install-mainpage": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+    "config-install-mainpage-failed": "Used as error message. Parameters:\n* $1 - detailed error message",
+    "config-install-done": "Parameters:\n* $1 is the URL to LocalSettings download\n* $2 is a link to the wiki.\n* $3 is a download link with attached download icon. The config-download-localsettings message will be used as the link text.",
+    "config-download-localsettings": "The link text used in the download link in config-install-done.",
+    "config-help": "This is used in help boxes.\n{{Identical|Help}}",
+    "config-nofile": "Used as failure message. Parameters:\n* $1 - filename",
+    "config-extension-link": "Shown on last page of installation to inform about possible extensions.",
+    "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.\nThis 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."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/qu.json b/includes/installer/i18n/qu.json
new file mode 100644 (file)
index 0000000..186feb2
--- /dev/null
@@ -0,0 +1,20 @@
+{
+    "@metadata": {
+        "authors": [
+            "AlimanRuna"
+        ]
+    },
+    "config-desc": "MediaWiki tiyachiq",
+    "config-title": "MediaWiki $1 tiyachiy",
+    "config-information": "Willay",
+    "config-your-language": "Rimayniyki:",
+    "config-wiki-language": "Wiki rimay:",
+    "config-back": "← Ñawpaqman",
+    "config-extensions": "Mast'ariykuna",
+    "config-install-step-done": "rurasqañam",
+    "config-install-step-failed": "manam aypasqachu",
+    "config-help": "yanapay",
+    "config-nofile": "\"$1\" sutiyuq willañiqiqa manam tarisqachu. Qullusqachu?",
+    "mainpagetext": "'''MediaWiki nisqa llamp'u kaqqa aypaylla takyachisqañam.'''",
+    "mainpagedocfooter": "Wiki llamp'u kaqmanta willasunaykipaqqa [//meta.wikimedia.org/wiki/Help:Contents Ruraqpaq yanapana] ''(User's Guide)'' sutiyuq p'anqata qhaway.\n\n== Qallarichkaspa ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Kunphigurasyun churanamanta sutisuyu]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki nisqamanta pasaq tapuykuna]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki kachaykuy e-chaski sutisuyu]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki nisqata qampa rimaykiman t'ikray]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/rgn.json b/includes/installer/i18n/rgn.json
new file mode 100644 (file)
index 0000000..7c3d7aa
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''L'instalaziòn d'MediaWiki l'è andêda ben'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/rm.json b/includes/installer/i18n/rm.json
new file mode 100644 (file)
index 0000000..c8f5dde
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Gion-andri"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki è vegnì installà cun success.'''",
+    "mainpagedocfooter": "Consultai il [//meta.wikimedia.org/wiki/Help:Contents manual per utilisaders] per infurmaziuns davart l'utilisaziun da questa software da wiki.\n\n== Cumenzar ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Glista da las opziuns per la configuraziun]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Glista da mail da MediaWiki cun annunzias da novas versiuns]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ro.json b/includes/installer/i18n/ro.json
new file mode 100644 (file)
index 0000000..a002c84
--- /dev/null
@@ -0,0 +1,134 @@
+{
+    "@metadata": {
+        "authors": [
+            "Firilacroco",
+            "Minisarm",
+            "Stelistcristi"
+        ]
+    },
+    "config-desc": "Programul de instalare pentru MediaWiki",
+    "config-title": "Instalarea MediaWiki $1",
+    "config-information": "Informații",
+    "config-localsettings-key": "Cheie de actualizare:",
+    "config-localsettings-badkey": "Cheia furnizată este incorectă.",
+    "config-session-error": "Eroare la pornirea sesiunii: $1",
+    "config-your-language": "Limba ta:",
+    "config-your-language-help": "Alege o limbă pentru a o utiliza în timpul procesului de instalare.",
+    "config-wiki-language": "Limbă wiki:",
+    "config-wiki-language-help": "Alege limba în care wiki-ul va fi scris predominant.",
+    "config-back": "← Înapoi",
+    "config-continue": "Continuă →",
+    "config-page-language": "Limbă",
+    "config-page-welcome": "Bun venit la MediaWiki!",
+    "config-page-dbconnect": "Conectează la baza de date",
+    "config-page-upgrade": "Extinde instalarea existentă",
+    "config-page-dbsettings": "Setări ale bazei de date",
+    "config-page-name": "Nume",
+    "config-page-options": "Opţiuni",
+    "config-page-install": "Instalare",
+    "config-page-complete": "Finalizat!",
+    "config-page-restart": "Reporneşte instalarea",
+    "config-page-readme": "Citeşte-mă",
+    "config-page-releasenotes": "Note de lansare",
+    "config-page-copying": "Copiere",
+    "config-page-upgradedoc": "Actualizare",
+    "config-page-existingwiki": "Wiki existent",
+    "config-restart": "Da, repornește.",
+    "config-env-php": "PHP $1 este instalat.",
+    "config-env-php-toolow": "PHP $1 este instalat.\nTotuși, MediaWiki necesită PHP $2 sau mai nou.",
+    "config-db-type": "Tipul bazei de date:",
+    "config-db-host": "Gazdă bază de date:",
+    "config-db-host-oracle": "Baza de date TNS:",
+    "config-db-wiki-settings": "Identificați acest wiki",
+    "config-db-name": "Numele bazei de date:",
+    "config-db-name-oracle": "Schema bazei de date:",
+    "config-db-username": "Nume de utilizator pentru baza de date:",
+    "config-db-password": "Parola bazei de date:",
+    "config-db-prefix": "Prefixul tabelelor din baza de date:",
+    "config-db-charset": "Setul de caractere al bazei de date",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binar",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-db-port": "Portul bazei de date:",
+    "config-db-schema": "Schema pentru MediaWiki:",
+    "config-sqlite-dir": "Director de date SQLite:",
+    "config-oracle-def-ts": "Spațiu de stocare („tablespace”) implicit:",
+    "config-oracle-temp-ts": "Spațiu de stocare („tablespace”) temporar:",
+    "config-header-mysql": "Setările MySQL",
+    "config-header-postgres": "Setări PostgreSQL",
+    "config-header-sqlite": "Setări SQLite",
+    "config-header-oracle": "Setări Oracle",
+    "config-invalid-db-type": "Tip de bază de date incorect",
+    "config-missing-db-name": "Trebuie să introduci o valoare pentru „Numele bazei de date”",
+    "config-connection-error": "$1.\n\nVerificați gazda, numele de utilizator și parola și reîncercați.",
+    "config-upgrade-done-no-regenerate": "Actualizare completă.\n\nAcum puteți [$1 începe să vă folosiți wikiul].",
+    "config-regenerate": "Regenerare LocalSettings.php →",
+    "config-unknown-collation": "AVERTISMENT: Baza de date folosește o colaționare nerecunoscută.",
+    "config-db-web-account": "Contul bazei de date pentru accesul web.",
+    "config-db-web-create": "Creați contul dacă nu există deja",
+    "config-mysql-engine": "Motor de stocare:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-charset": "Setul de caractere al bazei de date:",
+    "config-mysql-binary": "Binar",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Numele wikiului:",
+    "config-site-name-blank": "Introduceți un nume pentru sit.",
+    "config-project-namespace": "Spațiul de nume al proiectului:",
+    "config-ns-generic": "Proiect",
+    "config-ns-site-name": "Același nume ca al wikiului: $1",
+    "config-ns-other": "Altul (specificați)",
+    "config-ns-other-default": "MyWiki",
+    "config-admin-box": "Cont de administrator",
+    "config-admin-name": "Numele dumneavoastră:",
+    "config-admin-password": "Parolă:",
+    "config-admin-password-confirm": "Parola, din nou:",
+    "config-admin-password-blank": "Introduceți o parolă pentru contul de administrator.",
+    "config-admin-password-same": "Parola trebuie să difere de numele de utilizator.",
+    "config-admin-password-mismatch": "Cele două parole introduse nu corespund.",
+    "config-admin-email": "Adresa de e-mail:",
+    "config-admin-error-bademail": "Ați introdus o adresă de e-mail incorectă.",
+    "config-almost-done": "Sunteți aproape gata!\nPuteți sări peste configurarea rămasă și să instalați wikiul chiar acum.",
+    "config-optional-continue": "Adresează-mi mai multe întrebări.",
+    "config-optional-skip": "Sunt deja plictisit, doar instalează wikiul.",
+    "config-profile": "Profilul drepturilor de utilizator:",
+    "config-profile-wiki": "Wiki tradițional",
+    "config-profile-no-anon": "Crearea de cont este necesară",
+    "config-profile-fishbowl": "Doar editorii autorizați",
+    "config-profile-private": "Wiki privat",
+    "config-license": "Drepturi de autor și licență:",
+    "config-license-none": "Fără licență în subsolul paginii",
+    "config-license-cc-by-sa": "Creative Commons Atribuire și distribuire în condiții identice",
+    "config-license-cc-by": "Creative Commons Atribuire",
+    "config-license-cc-by-nc-sa": "Creative Commons Atribuire, necomercial și distribuire în condiții identice",
+    "config-license-cc-0": "Creative Commons Zero (domeniu public)",
+    "config-license-gfdl": "Licența GNU pentru Documentare Liberă 1.3 sau ulterioară",
+    "config-license-pd": "Domeniu public",
+    "config-license-cc-choose": "Alegeți o licență Creative Commons personalizată",
+    "config-email-settings": "Setări pentru e-mail",
+    "config-email-usertalk": "Activați notificările pentru pagina de discuții a utilizatorului",
+    "config-upload-deleted": "Director pentru fișierele șterse:",
+    "config-logo": "Adresa URL a siglei:",
+    "config-cc-again": "Alegeți din nou...",
+    "config-advanced-settings": "Configurare avansată",
+    "config-cache-options": "Parametrii pentru stocarea temporară a obiectelor:",
+    "config-extensions": "Extensii",
+    "config-install-step-done": "realizat",
+    "config-install-step-failed": "eșuat",
+    "config-install-extensions": "Se includ extensiile",
+    "config-install-database": "Se creează baza de date",
+    "config-install-schema": "Se creează schema",
+    "config-install-pg-schema-not-exist": "Schema PostgreSQL nu există.",
+    "config-install-pg-commit": "Se validează modificările",
+    "config-install-user": "Se creează utilizatorul pentru baza de date",
+    "config-install-user-alreadyexists": "Utilizatorul „$1” există deja",
+    "config-install-user-create-failed": "Crearea utilizatorului „$1” a eșuat: $2",
+    "config-install-tables": "Se creează tabelele",
+    "config-install-stats": "Se inițializează statisticile",
+    "config-install-keys": "Se generează cheile secrete",
+    "config-install-sysop": "Se creează contul de administrator",
+    "config-install-mainpage-failed": "Nu s-a putut insera pagina principală: $1",
+    "config-download-localsettings": "Descarcă <code>LocalSettings.php</code>",
+    "config-help": "ajutor",
+    "mainpagetext": "'''Programul Wiki a fost instalat cu succes.'''",
+    "mainpagedocfooter": "Consultați [//meta.wikimedia.org/wiki/Help:Contents Ghidul utilizatorului (en)] pentru informații despre utilizarea software-ului wiki.\n\n== Primii pași ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista parametrilor configurabili (en)]\n* [//www.mediawiki.org/wiki/Manual:FAQ Întrebări frecvente despre MediaWiki (en)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discuții a MediaWiki (en)]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/roa-tara.json b/includes/installer/i18n/roa-tara.json
new file mode 100644 (file)
index 0000000..5ce04cb
--- /dev/null
@@ -0,0 +1,56 @@
+{
+    "@metadata": {
+        "authors": [
+            "Joetaras"
+        ]
+    },
+    "config-desc": "'U 'nstallatore de MediaUicchi",
+    "config-title": "Installazzione de MediaUicchi $1",
+    "config-information": "'Mbormaziune",
+    "config-localsettings-key": "Chiave de aggiornamende:",
+    "config-localsettings-badkey": "'A chiave ca è date non g'è corrette.",
+    "config-session-error": "Errore facenne accumenzà 'a sessione: $1",
+    "config-your-language": "'A lènga toje:",
+    "config-your-language-help": "Scacchie 'na lènghe da ausà duranne 'u processe de installazzione:",
+    "config-wiki-language": "Lènga de Uicchi:",
+    "config-back": "← Rrète",
+    "config-continue": "Condinue →",
+    "config-page-language": "Lènghe",
+    "config-page-welcome": "Bovègne jndr'à MediaUicchi!",
+    "config-page-dbconnect": "Collegate a 'u database",
+    "config-page-upgrade": "Aggiorne l'installazzione esistende",
+    "config-page-dbsettings": "'Mbostaziune d'u database",
+    "config-page-name": "Nome",
+    "config-page-options": "Opziune",
+    "config-page-install": "Installe",
+    "config-page-complete": "Combletate!",
+    "config-page-restart": "Riavvie l'installazzione",
+    "config-page-readme": "Liggeme",
+    "config-page-releasenotes": "Note de rilasce",
+    "config-page-copying": "Stoche a copie",
+    "config-page-upgradedoc": "Aggiornamende",
+    "config-page-existingwiki": "Uicchi esistende",
+    "config-db-type": "Tipe de database:",
+    "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-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-admin-email": "Indirizze e-mail:",
+    "config-install-step-done": "fatte",
+    "config-install-step-failed": "fallite",
+    "config-install-extensions": "'Ngludenne le estenziune",
+    "config-install-database": "Stoche a 'mboste l'archivije",
+    "config-install-schema": "Stoche a creje 'u scheme",
+    "config-install-pg-schema-not-exist": "'U scheme PostgreSQL non g'esiste.",
+    "config-help": "ajute",
+    "mainpagetext": "'''MediaUicchi ha state 'nstallete.'''",
+    "mainpagedocfooter": "Vè vide [//meta.wikimedia.org/wiki/Help:Contents User's Guide] pe l'mbormaziune sus a cumme s'ause 'u softuer wiki.\n\n== Pe accumenzà ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste pe le configuraziune]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Elenghe d'a poste de MediaUicchi]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localizzazzione de MediaUicchi pa lènga toje]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ru.json b/includes/installer/i18n/ru.json
new file mode 100644 (file)
index 0000000..6e79935
--- /dev/null
@@ -0,0 +1,323 @@
+{
+    "@metadata": {
+        "authors": [
+            "Adata80",
+            "DCamer",
+            "Eleferen",
+            "Express2000",
+            "KPu3uC B Poccuu",
+            "Kaganer",
+            "Krinkle",
+            "Lockal",
+            "MaxSem",
+            "Okras",
+            "Yuriy Apostol",
+            "Александр Сигачёв",
+            "Сrower",
+            "아라"
+        ]
+    },
+    "config-desc": "Инсталлятор MediaWiki",
+    "config-title": "Установка MediaWiki $1",
+    "config-information": "Информация",
+    "config-localsettings-upgrade": "Обнаружен файл <code>LocalSettings.php</code>.\nДля обновления этой установки, пожалуйста, введите значение <code>$wgUpgradeKey</code>.\nЕго можно найти в файле <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Обнаружен файл <code>LocalSettings.php</code>.\nДля обновления этой установки, пожалуйста, запустите <code>update.php</code>",
+    "config-localsettings-key": "Ключ обновления:",
+    "config-localsettings-badkey": "Вы указали неправильный ключ",
+    "config-upgrade-key-missing": "Обнаружена существующая установленная копия MediaWiki.\nЧтобы обновить обнаруженную установку, пожалуйста, добавьте следующую строку в конец вашего файла <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "Похоже, что существующий файл <code>LocalSettings.php</code> не является полными.\nНе установлена переменная $1.\nПожалуйста, измените <code>LocalSettings.php</code> так, чтобы значение этой переменной было задано, затем нажмите «{{int:Config-continue}}».",
+    "config-localsettings-connection-error": "Произошла ошибка при подключении к базе данных с помощью настроек, указанных в <code>LocalSettings.php</code> или <code>AdminSettings.php</code>. Пожалуйста, исправьте эти настройки и повторите попытку.\n\n$1",
+    "config-session-error": "Ошибка при запуске сессии: $1",
+    "config-session-expired": "Ваша сессия истекла.\nСессии настроены на длительность $1.\nВы её можете увеличить, изменив <code>session.gc_maxlifetime</code> в php.ini.\nПерезапустите процесс установки.",
+    "config-no-session": "Данные сессии потеряны!\nПроверьте ваш php.ini и убедитесь, что <code>session.save_path</code> установлен в соответствующий каталог.",
+    "config-your-language": "Ваш язык:",
+    "config-your-language-help": "Выберите язык, на котором будет происходить процесс установки.",
+    "config-wiki-language": "Язык, который будет использовать вики:",
+    "config-wiki-language-help": "Выберите язык, на котором будут отображаться вики.",
+    "config-back": "← Назад",
+    "config-continue": "Далее →",
+    "config-page-language": "Язык",
+    "config-page-welcome": "Добро пожаловать в MediaWiki!",
+    "config-page-dbconnect": "Подключение к базе данных",
+    "config-page-upgrade": "Обновление существующей установки",
+    "config-page-dbsettings": "Настройки базы данных",
+    "config-page-name": "Название",
+    "config-page-options": "Настройки",
+    "config-page-install": "Установка",
+    "config-page-complete": "Готово!",
+    "config-page-restart": "Начать установку заново",
+    "config-page-readme": "Прочти меня",
+    "config-page-releasenotes": "Информация о версии",
+    "config-page-copying": "Лицензия",
+    "config-page-upgradedoc": "Обновление",
+    "config-page-existingwiki": "Существующая вики",
+    "config-help-restart": "Вы хотите удалить все сохранённые данные, которые вы ввели, и запустить процесс установки заново?",
+    "config-restart": "Да, начать заново",
+    "config-welcome": "=== Проверка окружения ===\nБудут проведены базовые проверки с целью определить, подходит ли данная система для установки MediaWiki.\nНе забудьте включить эту информацию, если вам потребуется помощь для завершения установки.",
+    "config-copyright": "=== Авторские права и условия ===\n\n$1\n\nMediaWiki является свободным программным обеспечением, которое вы можете распространять и/или изменять в соответствии с условиями лицензии GNU General Public License, опубликованной фондом свободного программного обеспечения; второй версии, либо любой более поздней версии.\n\nMediaWiki распространяется в надежде, что она будет полезной, но '''без каких-либо гарантий''', даже без подразумеваемых гарантий '''коммерческой ценности''' или '''пригодности для определённой цели'''. См. лицензию GNU General Public License для более подробной информации.\n\nВы должны были получить <doclink href=Copying>копию GNU General Public License</doclink> вместе с этой программой, если нет, то напишите Free Software Foundation, Inc., по адресу: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA или [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html прочтите её онлайн].",
+    "config-sidebar": "* [//www.mediawiki.org Сайт MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents/ru Справка для пользователей]\n* [//www.mediawiki.org/wiki/Manual:Contents/ru Справка для администраторов]\n* [//www.mediawiki.org/wiki/Manual:FAQ/ru FAQ]\n----\n* <doclink href=Readme>Readme-файл</doclink>\n* <doclink href=ReleaseNotes>Информация о выпуске</doclink>\n* <doclink href=Copying>Лицензия</doclink>\n* <doclink href=UpgradeDoc>Обновление</doclink>",
+    "config-env-good": "Проверка внешней среды была успешно проведена.\nВы можете установить MediaWiki.",
+    "config-env-bad": "Была проведена проверка внешней среды.\nВы не можете установить MediaWiki.",
+    "config-env-php": "Установленная версия PHP: $1.",
+    "config-env-php-toolow": "Найден PHP $1, тогда как MediaWiki требуется PHP версии $2 или выше.",
+    "config-unicode-using-utf8": "Использовать Brion Vibber utf8_normalize.so для нормализации Юникода.",
+    "config-unicode-using-intl": "Будет использовано [http://pecl.php.net/intl расширение «intl» для PECL] для нормализации Юникода.",
+    "config-unicode-pure-php-warning": "'''Внимание!''': [http://pecl.php.net/intl расширение intl из PECL] недоступно для нормализации Юникода, будет использоваться медленная реализация на чистом PHP.\nЕсли ваш сайт работает под высокой нагрузкой, вам следует больше узнать о [//www.mediawiki.org/wiki/Unicode_normalization_considerations нормализации Юникода].",
+    "config-unicode-update-warning": "'''Предупреждение''': установленная версия обёртки нормализации Юникода использует старую версию библиотеки [http://site.icu-project.org/ проекта ICU].\nВы должны [//www.mediawiki.org/wiki/Unicode_normalization_considerations обновить версию], если хотите полноценно использовать Юникод.",
+    "config-no-db": "Не найдено поддержки баз данных! Вам необходимо установить драйвера базы данных для PHP.\nПоддерживаются следующие базы данных: $1.\n\nЕсли вы используете виртуальный хостинг, обратитесь к своему хостинг-провайдеру с просьбой установить подходящий драйвер базы данных.\nЕсли вы скомпилировали PHP сами, сконфигурируйте его снова с включенным клиентом базы данных, например, с помощью <code>./configure --with-mysql</code>.\nЕсли вы установили PHP из пакетов Debian или Ubuntu, то вам также необходимо установить модуль php5-mysql.",
+    "config-outdated-sqlite": "'''Предупреждение''': у Вас установлен SQLite  $1, версия которого ниже требуемой $2 . SQLite будет недоступен.",
+    "config-no-fts3": "'''Внимание''': SQLite собран без модуля [//sqlite.org/fts3.html FTS3] — поиск не будет работать для этой базы данных.",
+    "config-register-globals": "'''Внимание: PHP-опция <code>[http://php.net/register_globals register_globals]</code> включена.'''\n'''Отключите её, если это возможно.'''\nMediaWiki будет работать, но это снизит безопасность сервера и увеличит риск проникновения извне.",
+    "config-magic-quotes-runtime": "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!'''\nЭто приводит к непредсказуемой порче вводимых данных.\nУстановка и использование MediaWiki без выключения этой опции невозможно.",
+    "config-magic-quotes-sybase": "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''\nЭто приводит к непредсказуемой порче вводимых данных.\nУстановка и использование MediaWiki без выключения этой опции невозможно.",
+    "config-mbstring": "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''\nЭто приводит к ошибкам и непредсказуемой порче вводимых данных.\nУстановка и использование MediaWiki без выключения этой опции невозможно.",
+    "config-ze1": "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]!'''\nЭто приводит к катастрофическим сбоям в MediaWiki.\nУстановка и использование MediaWiki без выключения этой опции невозможно.",
+    "config-safe-mode": "'''Предупреждение:''' PHP работает в [http://www.php.net/features.safe-mode «безопасном режиме»].\nЭто может привести к проблемам, особенно с загрузкой файлов и вставкой математических формул.",
+    "config-xml-bad": "XML-модуль РНР отсутствует.\nMediaWiki не будет работать в этой конфигурации, так как требуется функционал этого модуля.\nЕсли вы работаете в Mandrake, установите PHP XML-пакет.",
+    "config-pcre": "Модуль поддержки PCRE не найден.\nДля работы MediaWiki требуется поддержка Perl-совместимых регулярных выражений.",
+    "config-pcre-no-utf8": "'''Фатальная ошибка'''. Модуль PCRE для PHP, похоже, собран без поддержки PCRE_UTF8.\nMediaWiki требует поддержки UTF-8 для корректной работы.",
+    "config-memory-raised": "Ограничение на доступную PHP память (<code>memory_limit</code>) поднято с $1 до $2.",
+    "config-memory-bad": "'''Внимание:''' размер PHP <code>memory_limit</code> составляет $1.\nВероятно, этого слишком мало.\nУстановка может потерпеть неудачу!",
+    "config-ctype": "'''Фатальная ошибка:''' PHP должен быть скомпилирован с поддержкой [http://www.php.net/manual/ru/ctype.installation.php расширения Ctype].",
+    "config-json": "'''Фатальная ошибка:''' PHP был скомпилирован без поддержка JSON.\nВам необходимо установить либо расширение PHP JSON, либо расширение [http://pecl.php.net/package/jsonc PECL jsonc] перед установкой MediaWiki.\n* PHP-расширение входит в состав Red Hat Enterprise Linux (CentOS) 5 и 6, хотя должна быть включено в <code>/etc/php.ini</code> или <code>/etc/php.d/json.ini</code>.\n* Некоторые дистрибутивы Linux, выпущенные после мая 2013 года, не включают расширение PHP, вместо того, чтобы упаковывать расширение PECL как <code>php5-json</code> или <code>php-pecl-jsonc</code>.",
+    "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].\nКэширование объектов будет отключено.",
+    "config-mod-security": "'''Внимание''': на вашем веб-сервере включен [http://modsecurity.org/ mod_security]. При неправильной настройке он может вызывать проблемы для MediaWiki или другого ПО, позволяющего пользователям отправлять на сервер произвольный текст.\nОбратитесь к [http://modsecurity.org/documentation/ документации mod_security] или в поддержку вашего хостера, если при работе возникают непонятные ошибки.",
+    "config-diff3-bad": "GNU diff3 не найден.",
+    "config-git": "Найдена система контроля версий Git: <code>$1</code>.",
+    "config-git-bad": "Программное обеспечение по управлению версиями Git не найдено.",
+    "config-imagemagick": "Обнаружен ImageMagick: <code>$1</code>.\nВозможно отображение миниатюр изображений, если вы разрешите закачки файлов.",
+    "config-gd": "Найдена встроенная графическая библиотека GD.\nВозможность использования миниатюр изображений будет включена, если вы включите их загрузку.",
+    "config-no-scaling": "Не удалось найти встроенную библиотеку GD или ImageMagick.\nВозможность использования миниатюр изображений будет отключена.",
+    "config-no-uri": "'''Ошибка:''' Не могу определить текущий URI.\nУстановка прервана.",
+    "config-no-cli-uri": "'''Предупреждение''': нет задан параметр --scriptpath, используется по умолчанию: <code>$1</code> .",
+    "config-using-server": "Используется имя сервера «<nowiki>$1</nowiki>».",
+    "config-using-uri": "Используется имя сервера \"<nowiki>$1$2</nowiki>\".",
+    "config-uploads-not-safe": "'''Внимание:''' директория, используемая по умолчанию для загрузок (<code>$1</code>) уязвима к выполнению произвольных скриптов.\nХотя MediaWiki проверяет все загружаемые файлы на наличие угроз, настоятельно рекомендуется [//www.mediawiki.org/wiki/Manual:Security#Upload_security закрыть данную уязвимость] перед включением загрузки файлов.",
+    "config-no-cli-uploads-check": "'''Предупреждение:''' каталог для загрузки по умолчанию ( <code>$1</code> ) не проверялся на уязвимости\n на выполнение произвольного сценария во время установки CLI.",
+    "config-brokenlibxml": "В вашей системе имеется сочетание версий PHP и libxml2, могущее привести к скрытым повреждениям данных в MediaWiki и других веб-приложениях.\nОбновите PHP до версии 5.2.9 или старше и libxml2 до 2.7.3 или старше ([//bugs.php.net/bug.php?id=45996 сведения об ошибке]).\nУстановка прервана.",
+    "config-using531": "PHP $1 не совместим с MediaWiki из-за ошибки с параметрами-ссылками при вызовах <code>__call()</code>.\nОбновитесь до PHP 5.3.2 и выше, или откатитесь до PHP 5.3.0, чтобы избежать этой проблемы.\nУстановка прервана.",
+    "config-suhosin-max-value-length": "Suhosin установлен и ограничивает параметр GET <code>length</code> до $1 байт. Компонент MediaWiki ResourceLoader будет обходить это ограничение, но это снизит производительность. Если это возможно, следует установить <code>suhosin.get.max_value_length</code> в значение 1024 или выше в <code>php.ini</code>, а также установить для <code>$wgResourceLoaderMaxQueryLength</code> такое же значение в LocalSettings.php.",
+    "config-db-type": "Тип базы данных:",
+    "config-db-host": "Хост базы данных:",
+    "config-db-host-help": "Если сервер базы данных находится на другом сервере, введите здесь его имя хоста или IP-адрес.\n\nЕсли вы используете виртуальный хостинг, ваш провайдер должен указать правильное имя хоста в своей документации.\n\nЕсли вы устанавливаете систему на сервере под Windows и используете MySQL, имя сервера «localhost» может не работать. В этом случае попробуйте указать 127.0.0.1 локальный  IP-адрес.\n\nЕсли вы используете PostgreSQL, оставьте это поле пустым для подключения через сокет Unix.",
+    "config-db-host-oracle": "TNS базы данных:",
+    "config-db-host-oracle-help": "Введите действительный [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; файл tnsnames.ora должен быть видимым для этой инсталляции. <br />При использовании клиентских библиотек версии 10g и старше также возможно использовать метод именования [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+    "config-db-wiki-settings": "Идентификация этой вики",
+    "config-db-name": "Имя базы данных:",
+    "config-db-name-help": "Выберите название-идентификатор для вашей вики.\nОно не должно содержать пробелов.\n\nЕсли вы используете виртуальный хостинг, провайдер или выдаст вам конкретное имя базы данных, или позволит создавать базы данных с помощью панели управления.",
+    "config-db-name-oracle": "Схема базы данных:",
+    "config-db-account-oracle-warn": "Поддерживаются три сценария установки Oracle в качестве базы данных:\n\nЕсли вы хотите создать учётную запись базы данных в процессе установки, пожалуйста, укажите учётную запись роли SYSDBA для установки и укажите желаемые полномочия учётной записи с веб-доступом. вы также можете учётную запись с веб-доступом вручную и указать только её (если у неё есть необходимые разрешения на создание объектов схемы) или указать две учётные записи, одну с правами создания объектов, а другую с ограничениями для веб-доступа.\n\nСценарий для создания учётной записи с необходимыми привилегиями можно найти в папке «maintenance/oracle/» этой программы установки. Имейте в виду, что использование ограниченной учётной записи приведёт к отключению всех возможностей обслуживания с учётной записи по умолчанию.",
+    "config-db-install-account": "Учётная запись для установки",
+    "config-db-username": "Имя пользователя базы данных:",
+    "config-db-password": "Пароль базы данных:",
+    "config-db-password-empty": "Пожалуйста, введите пароль для нового пользователя базы данных «$1».\nХотя и возможно создание пользователей без паролей, это небезопасно.",
+    "config-db-install-username": "Введите имя пользователя, которое будет использоваться для подключения к базе данных в процессе установки.\nЭто не имя пользователя MediaWiki, это имя пользователя для базы данных.",
+    "config-db-install-password": "Введите пароль, который будет использоваться для подключения к базе данных в процессе установки.\nЭто не пароль пользователя MediaWiki, это пароль для базы данных.",
+    "config-db-install-help": "Введите имя пользователя и пароль, которые будут использоваться для подключения к базе данных во время процесса установки.",
+    "config-db-account-lock": "Использовать то же имя пользователя и пароль для обычной работы",
+    "config-db-wiki-account": "Учётная запись для обычной работы",
+    "config-db-wiki-help": "Введите имя пользователя и пароль, которые будут использоваться для подключения к базе данных во время обычной работы вики.\nЕсли такой учётной записи не существует, а установочная учётная запись имеет достаточно привилегий, то обычная учётная запись будет создана с минимально необходимыми для работы вики привилегиями.",
+    "config-db-prefix": "Префикс таблиц базы данных:",
+    "config-db-prefix-help": "Если вам нужно делить одну базу данных между несколькими вики, или между MediaWiki и другими веб-приложениями, вы можете добавить префикс для всех имён таблиц.\nНе используйте пробелы.\n\nЭто поле обычно остаётся пустым.",
+    "config-db-charset": "Набор символов базы данных",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 бинарная",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 обратно совместимая с UTF-8",
+    "config-charset-help": "'''Внимание.''' Если вы используете '''обратно совместый UTF-8''' на MySQL 4.1+ и создаёте резервные копии базы данных с помощью <code>mysqldump</code>, то все не-ASCII символы могут быть искажены, а резервная копия окажется негодной!\n\nВ '''бинарном режиме''' MediaWiki хранит юникодный текст в базе в виде двоичных полей.\nЭто более эффективно, чем MySQL в режиме UTF-8, позволяет использовать полный набор символов Юникода.\nВ '''режиме UTF-8''' MySQL будет знать к какому набору символу относятся ваши данные, сможет представлять и преобразовать их надлежащим образом (буква Ё окажется при сортировке после буквы Е, а не после буквы Я, как в бинарном режиме),\nно не позволит вам сохранять символы, выходящие за пределы [//ru.wikipedia.org/wiki/Символы,_представленные_в_Юникоде#.D0.91.D0.B0.D0.B7.D0.BE.D0.B2.D0.B0.D1.8F_.D0.BC.D0.BD.D0.BE.D0.B3.D0.BE.D1.8F.D0.B7.D1.8B.D0.BA.D0.BE.D0.B2.D0.B0.D1.8F_.D0.BF.D0.BB.D0.BE.D1.81.D0.BA.D0.BE.D1.81.D1.82.D1.8C BMP].",
+    "config-mysql-old": "Необходим MySQL $1 или более поздняя версия. У вас установлен MySQL $2.",
+    "config-db-port": "Порт базы данных:",
+    "config-db-schema": "Схема для MediaWiki",
+    "config-db-schema-help": "Эта схема обычно работают хорошо.\nИзменяйте её только если знаете, что вам это нужно.",
+    "config-pg-test-error": "Не удаётся подключиться к базе данных '''$1''': $2",
+    "config-sqlite-dir": "Директория данных SQLite:",
+    "config-sqlite-dir-help": "SQLite хранит все данные в одном файле.\n\nДиректория, которую вы должны указать, должна быть доступна для записи веб-сервером во время установки.\n\nОна '''не должна''' быть доступна через Интернет, поэтому не должна совпадать с той, где хранятся PHP файлы.\n\nУстановщик запишет в эту директорию файл <code>.htaccess</code>, но если это не сработает, кто-нибудь может получить доступ ко всей базе данных.\nВ этой базе находится в том числе и информация о пользователях (адреса электронной почты, хэши паролей), а также удалённые страницы и другие секретные данные о вики.\n\nПо возможности, расположите базу данных где-нибудь в стороне, например, в <code>/var/lib/mediawiki/yourwiki</code>.",
+    "config-oracle-def-ts": "Пространство таблиц по умолчанию:",
+    "config-oracle-temp-ts": "Временное пространство таблиц:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "MediaWiki поддерживает следующие СУБД:\n\n$1\n\nЕсли вы не видите своей системы хранения данных в этом списке, следуйте инструкциям, на которые есть ссылка выше, чтобы получить поддержку.",
+    "config-support-mysql": "* $1 — основная база данных для MediaWiki, и лучше поддерживается ([http://www.php.net/manual/en/mysql.installation.php инструкция, как собрать PHP с поддержкой MySQL])",
+    "config-support-postgres": "* $1 — популярная открытая СУБД, альтернатива MySQL ([http://www.php.net/manual/en/pgsql.installation.php инструкция, как собрать PHP с поддержкой PostgreSQL]). Могут встречаться небольшие неисправленные ошибки, не рекомендуется для использования в рабочей системе.",
+    "config-support-sqlite": "* $1 — это легковесная система баз данных, имеющая очень хорошую поддержку. ([http://www.php.net/manual/en/pdo.installation.php инструкция, как собрать PHP с поддержкой SQLite], работающей посредством PDO)",
+    "config-support-oracle": "* $1 — это коммерческая база данных масштаба предприятия. ([http://www.php.net/manual/en/oci8.installation.php Как собрать PHP с поддержкой OCI8])",
+    "config-header-mysql": "Настройки MySQL",
+    "config-header-postgres": "Настройки PostgreSQL",
+    "config-header-sqlite": "Настройки SQLite",
+    "config-header-oracle": "Настройки Oracle",
+    "config-invalid-db-type": "Неверный тип базы данных",
+    "config-missing-db-name": "Вы должны ввести значение параметра «Имя базы данных»",
+    "config-missing-db-host": "Необходимо ввести значение параметра «Сервер базы данных»",
+    "config-missing-db-server-oracle": "Вы должны заполнить поле «TNS базы данных»",
+    "config-invalid-db-server-oracle": "Неверное TNS базы данных «$1».\nИспользуйте либо «TNS Name», либо строку «Easy Connect» ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Методы наименования Oracle])",
+    "config-invalid-db-name": "Неверное имя базы данных «$1».\nИспользуйте только ASCII-символы (a-z, A-Z), цифры (0-9), знак подчёркивания (_) и дефис(-).",
+    "config-invalid-db-prefix": "Неверный префикс базы данных «$1».\nИспользуйте только буквы ASCII (a-z, A-Z), цифры (0-9), знак подчёркивания (_) и дефис (-).",
+    "config-connection-error": "$1.\n\nПроверьте хост, имя пользователя и пароль и попробуйте ещё раз.",
+    "config-invalid-schema": "Неправильная схема для MediaWiki «$1».\nИспользуйте только ASCII символы (a-z, A-Z), цифры(0-9) и знаки подчёркивания(_).",
+    "config-db-sys-create-oracle": "Программа установки поддерживает только использование SYSDBA для создания новой учётной записи.",
+    "config-db-sys-user-exists-oracle": "Учётная запись «$1». SYSDBA может использоваться только для создания новой учётной записи!",
+    "config-postgres-old": "Необходим PostgreSQL $1 или более поздняя версия. У вас установлен PostgreSQL $2.",
+    "config-sqlite-name-help": "Выберите имя-идентификатор для вашей вики.\nНе используйте дефисы и пробелы.\nЭта строка будет использоваться в имени файла SQLite.",
+    "config-sqlite-parent-unwritable-group": "Не удалось создать директорию данных <nowiki><code>$1</code></nowiki>, так как у веб-сервера нет прав записи в родительскую директорию <nowiki><code>$2</code></nowiki>.\n\nУстановщик определил пользователя, под которым работает веб-сервер.\nСделайте директорию <nowiki><code>$3</code></nowiki> доступной для записи и продолжите.\nВ Unix/Linux системе выполните:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Не удалось создать директорию для данных <code><nowiki>$1</nowiki></code>, так как у веб-сервера нет прав на запись в родительскую директорию <code><nowiki>$2</nowiki></code>.\n\nПрограмма установки не смогла определить пользователя, под которым работает веб-сервер.\nДля продолжения сделайте каталог <code><nowiki>$3</nowiki></code> глобально доступным для записи серверу (и другим).\nВ Unix/Linux сделайте:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Ошибка при создании директории для данных «$1».\nПроверьте расположение и повторите попытку.",
+    "config-sqlite-dir-unwritable": "Невозможно произвести запись в каталог «$1».\nИзмените настройки доступа так, чтобы веб-сервер мог записывать в этот каталог, и попробуйте ещё раз.",
+    "config-sqlite-connection-error": "$1.\n\nПроверьте название базы данных и директорию с данными и попробуйте ещё раз.",
+    "config-sqlite-readonly": "Файл <code>$1</code> недоступен для записи.",
+    "config-sqlite-cant-create-db": "Не удаётся создать файл базы данных <code>$1</code> .",
+    "config-sqlite-fts3-downgrade": "У PHP отсутствует поддержка FTS3 — сбрасываем таблицы",
+    "config-can-upgrade": "В базе данных найдены таблицы MediaWiki.\nЧтобы обновить их до MediaWiki $1, нажмите на кнопку '''«Продолжить»'''.",
+    "config-upgrade-done": "Обновление завершено.\n\nТеперь вы можете [$1 начать использовать вики].\n\nЕсли вы хотите повторно создать файл <code>LocalSettings.php</code>, нажмите на кнопку ниже.\nЭто действие '''не рекомендуется''', если у вас не возникло проблем при установке.",
+    "config-upgrade-done-no-regenerate": "Обновление завершено.\n\nТеперь вы можете [$1 начать работу с вики].",
+    "config-regenerate": "Создать LocalSettings.php заново →",
+    "config-show-table-status": "Запрос «<code>SHOW TABLE STATUS</code>» не выполнен!",
+    "config-unknown-collation": "'''Внимание:''' База данных использует нераспознанные правила сортировки.",
+    "config-db-web-account": "Учётная запись для доступа к базе данных из веб-сервера",
+    "config-db-web-help": "Выберите имя пользователя и пароль, которые веб-сервер будет использовать для подключения к серверу базы данных при обычной работе вики.",
+    "config-db-web-account-same": "Использовать ту же учётную запись, что и для установки",
+    "config-db-web-create": "Создать учётную запись, если она ещё не существует",
+    "config-db-web-no-create-privs": "Учётная запись, указанная вами для установки, не обладает достаточными правами для создания учётной записи.\nУказанная здесь учётная запись уже должна существовать.",
+    "config-mysql-engine": "Движок базы данных:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "''' Внимание.''' Вы выбрали механизм MyISAM для хранения данных MySQL. Он не рекомендуется к использованию по следующим причинам:\n* он слабо поддерживает параллелизм из-за табличных блокировок;\n* более склонен к потере данных, по сравнению с другими механизмами;\n* код MediaWiki не всегда учитывает особенности MyISAM должным образом.\n\nЕсли ваша установка MySQL поддерживает InnoDB, настоятельно рекомендуется выбрать этот механизм.\nЕсли ваша установка MySQL не поддерживает InnoDB, возможно, настало время обновиться.",
+    "config-mysql-only-myisam-dep": "'''Предупреждение:''' MyISAM является единственной доступной системой хранения данных для MySQL, которая, однако, не рекомендуется для использования с MediaWiki, потому что:\n * он слабо поддерживает параллелизм из-за блокировки таблиц\n * она больше других систем подвержена повреждению\n * кодовая база MediaWiki не всегда обрабатывает MyISAM так, как следует\n\nВаша MySQL не поддерживает InnoDB, так что, возможно, настало время для обновления.",
+    "config-mysql-engine-help": "'''InnoDB''' почти всегда предпочтительнее, так как он лучше справляется с параллельным доступом.\n\n'''MyISAM''' может оказаться быстрее для вики с одним пользователем или с минимальным количеством поступающих правок, однако базы данных на нём портятся чаще, чем на InnoDB.",
+    "config-mysql-charset": "Набор символов (кодовая таблица) базы данных:",
+    "config-mysql-binary": "Двоичный",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "В '''двоичном режиме''' MediaWiki хранит UTF-8 текст в бинарных полях базы данных.\nЭто более эффективно, чем ''UTF-8 режим'' MySQL, и позволяет использовать полный набор символов Unicode.\n\nВ '''режиме UTF-8''' MySQL будет знать в какой кодировке находятся Ваши данные и может отображать и преобразовывать их соответствующим образом, но это не позволит вам хранить символы выше [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Базовой Многоязыковой Плоскости].",
+    "config-site-name": "Название вики:",
+    "config-site-name-help": "Название будет отображаться в заголовке окна браузера и в некоторых других местах вики.",
+    "config-site-name-blank": "Введите название сайта.",
+    "config-project-namespace": "Пространство имён проекта:",
+    "config-ns-generic": "Проект",
+    "config-ns-site-name": "То же, что имя вики: $1",
+    "config-ns-other": "Другое (укажите)",
+    "config-ns-other-default": "MyWiki",
+    "config-project-namespace-help": "Следуя примеру Википедии, многие вики хранят свои страницы правил отдельно от страниц основного содержания, в так называемом '''«пространстве имён проекта»'''.\nВсе названия страниц в этом пространстве имён начинается с определённого префикса, который вы можете задать здесь.\nОбычно, этот префикс происходит от имени вики, но он не может содержать знаки препинания, символы «#» или «:».",
+    "config-ns-invalid": "Указанное пространство имён <nowiki>$1</nowiki> недопустимо.\nУкажите другое пространство имён проекта.",
+    "config-ns-conflict": "Указанное пространство имён «<nowiki>$1</nowiki>» конфликтует со стандартным пространством имён MediaWiki.\nУкажите другое пространство имён проекта.",
+    "config-admin-box": "Учётная запись администратора",
+    "config-admin-name": "Имя:",
+    "config-admin-password": "Пароль:",
+    "config-admin-password-confirm": "Пароль ещё раз:",
+    "config-admin-help": "Введите ваше имя пользователя здесь, например, «Иван Иванов».\nЭто имя будет использоваться для входа в вики.",
+    "config-admin-name-blank": "Введите имя пользователя администратора.",
+    "config-admin-name-invalid": "Указанное имя пользователя «<nowiki>$1</nowiki>» недопустимо.\nУкажите другое имя пользователя.",
+    "config-admin-password-blank": "Введите пароль для учётной записи администратора.",
+    "config-admin-password-same": "Пароль не должен быть таким же, как имя пользователя.",
+    "config-admin-password-mismatch": "Введённые вами пароли не совпадают.",
+    "config-admin-email": "Адрес электронной почты:",
+    "config-admin-email-help": "Введите адрес электронной почты, чтобы получать сообщения от других пользователей вики, иметь возможность восстановить пароль, а также получать уведомления об изменениях страниц из списка наблюдения. Вы можете оставить это поле пустым.",
+    "config-admin-error-user": "Внутренняя ошибка при создании учётной записи администратора с именем «<nowiki>$1</nowiki>».",
+    "config-admin-error-password": "Внутренняя ошибка при установке пароля для учётной записи администратора «<nowiki>$1</nowiki>»: <pre>$2</pre>",
+    "config-admin-error-bademail": "Вы ввели неправильный адрес электронной почты",
+    "config-subscribe": "Подписаться на [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce рассылку новостей о появлении новых версий MediaWiki].",
+    "config-subscribe-help": "Это список рассылки с малым числом сообщений, используется для анонса новых выпусков и сообщений о проблемах с безопасностью.\nВам следует подписаться на него и обновлять движок MediaWiki, по мере выхода новых версий.",
+    "config-subscribe-noemail": "Вы попытались подписаться на список рассылки уведомлений о новых выпусках без указания адреса электронной почты.\nУкажите адрес электронной почты, если вы хотите подписаться на список рассылки.",
+    "config-almost-done": "Вы почти у цели!\nОстальные настройки можно пропустить и приступить к установке вики.",
+    "config-optional-continue": "Произвести тонкую настройку",
+    "config-optional-skip": "Хватит, установить вики",
+    "config-profile": "Профиль прав прользователей:",
+    "config-profile-wiki": "Открытая вики",
+    "config-profile-no-anon": "Требуется создание учётной записи",
+    "config-profile-fishbowl": "Только для авторизованных редакторов",
+    "config-profile-private": "Закрытая вики",
+    "config-profile-help": "Вики-технология лучше всего работает, когда вы позволяете редактировать сайт максимально широкому кругу лиц.\nВ MediaWiki легко просмотреть последних изменений и, при необходимости, откатить любой ущерб сделанный злоумышленниками или наивными пользователями.\n\nОднако, движок MediaWiki можно использовать и иными способами, и не далеко не всех удаётся убедить в преимуществах открытой вики-работы.\nТак что в вас есть выбор.\n\nМодель '''«{{int:config-profile-wiki}}»''' позволяет всем править страницы даже не регистрируясь на сайте. Конфигурация '''{{int:config-profile-no-anon}}''' обеспечивает дополнительный учёт, но может отсечь случайных участников.\n\nСценарий '''«{{int:config-profile-fishbowl}}»''' разрешает редактирование только определённым участникам, но общедоступным остаётся просмотр страниц, в том числе просмотр истории изменения. В режиме '''«{{int:config-profile-private}}»''' просмотр страниц разрешён только определённым пользователям, какая-то их часть может иметь также права на редактирование.\n\nБолее сложные схемы разграничения прав можно настроить после установки, см. [//www.mediawiki.org/wiki/Manual:User_rights соответствующее руководство].",
+    "config-license": "Авторские права и лицензии:",
+    "config-license-none": "Не указывать лицензию в колонтитуле внизу страницы",
+    "config-license-cc-by-sa": "Creative Commons Attribution Share Alike",
+    "config-license-cc-by": "Creative Commons Attribution",
+    "config-license-cc-by-nc-sa": "Creative Commons Attribution Non-Commercial Share Alike",
+    "config-license-cc-0": "Creative Commons Zero (общественное достояние)",
+    "config-license-gfdl": "GNU Free Documentation License 1.3 или более поздняя",
+    "config-license-pd": "Общественное достояние",
+    "config-license-cc-choose": "Выберите одну из лицензий Creative Commons",
+    "config-license-help": "Многие общедоступные вики разрешают использовать свои материалы на условиях [http://freedomdefined.org/Definition/Ru свободных лицензий].\nЭто помогает созданию чувства общности, стимулирует долгосрочное участие.\nНо в этом нет необходимости для частных или корпоративных вики.\n\nЕсли вы хотите использовать тексты из Википедии или хотите, что в Википедию можно было копировать тексты из вашей вики, вам следует выбрать '''Creative Commons Attribution Share Alike'''.\n\nВикипедия ранее использовала лицензию GNU Free Documentation License.\nGFDL может быть использована, но она сложна для понимания и осложняет повторное использование материалов.",
+    "config-email-settings": "Настройки электронной почты",
+    "config-enable-email": "Включить исходящие e-mail",
+    "config-enable-email-help": "Если вы хотите, чтобы электронная почта работала, необходимо выполнить [http://www.php.net/manual/en/mail.configuration.php соответствующие настройки PHP].\nЕсли вы не хотите использовать возможности электронной почты в вики, вы можете её отключить.",
+    "config-email-user": "Включить электронную почту от участника к участнику",
+    "config-email-user-help": "Разрешить всем пользователям отправлять друг другу электронные письма, если выставлена соответствующая настройка в профиле.",
+    "config-email-usertalk": "Включить уведомления пользователей о сообщениях на их странице обсуждения",
+    "config-email-usertalk-help": "Разрешить пользователям получать уведомления об изменениях своих страниц обсуждения, если они разрешат это в своих настройках.",
+    "config-email-watchlist": "Включить уведомление на электронную почту об изменении списка наблюдения",
+    "config-email-watchlist-help": "Разрешить пользователям получать уведомления об отслеживаемых ими страницах, если они разрешили это в своих настройках.",
+    "config-email-auth": "Включить аутентификацию через электронную почту",
+    "config-email-auth-help": "Если эта опция включена, пользователи должны подтвердить свой адрес электронной почты перейдя по ссылке, которая отправляется на e-mail. Подтверждение требуется каждый раз при смене электронного ящика в настройках пользователя.\nТолько прошедшие проверку подлинности адреса электронной почты, могут получать электронные письма от других пользователей или изменять уведомления, отправляемые по электронной почте.\nВключение этой опции '''рекомендуется'''  для открытых вики в целях пресечения потенциальных злоупотреблений возможностями электронной почты.",
+    "config-email-sender": "Обратный адрес электронной почты:",
+    "config-email-sender-help": "Введите адрес электронной почты для использования в качестве обратного адреса исходящей электронной почты.\nНа него будут отправляться отказы.\nМногие почтовые серверы требуют, чтобы по крайней мере доменное имя в нём было правильным.",
+    "config-upload-settings": "Загрузка изображений и файлов",
+    "config-upload-enable": "Разрешить загрузку файлов",
+    "config-upload-help": "Разрешение загрузки файлов, потенциально, может привести к угрозе безопасности сервера.\nДля получения дополнительной информации, прочтите в руководстве [//www.mediawiki.org/wiki/Manual:Security раздел, посвящённый безопасности].\n\nЧтобы разрешить загрузку файлов, необходимо изменить права на каталог <code>images</code>, в корневой директории MediaWiki так, чтобы веб-сервер мог записывать в него файлы.\nЗатем включите эту опцию.",
+    "config-upload-deleted": "Директория для удалённых файлов:",
+    "config-upload-deleted-help": "Выберите каталог, в котором будут храниться архивы удалённых файлов.\nВ идеальном случае, в этот каталог не должно быть доступа из сети Интернет.",
+    "config-logo": "URL логотипа:",
+    "config-logo-help": "Стандартная тема оформления MediaWiki содержит над боковой панелью пространство для логотипа размером 135x160 пикселей.\nЗагрузите изображение соответствующего размера, и введите его URL здесь.\n\nВы можете использовать <code>$wgStylePath</code> или <code>$wgScriptPath</code>, если ваш логотип находится относительно к этим путям.\n\nЕсли вам не нужен логотип, оставьте это поле пустым.",
+    "config-instantcommons": "Включить Instant Commons",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] — это функция, позволяющая использовать изображения, звуки и другие медиафайлы с Викисклада ([//commons.wikimedia.org/ Wikimedia Commons]).\nДля работы этой функции MediaWiki необходим доступ к Интернету.\n\nДополнительную информацию об Instant Commons, в том числе указания о том, как её настроить для других вики, отличных от Викисклада, можно найти в [//mediawiki.org/wiki/Manual:$wgForeignFileRepos руководстве].",
+    "config-cc-error": "Механизм выбора лицензии Creative Commons не вернул результата.\nВведите название лицензии вручную.",
+    "config-cc-again": "Выберите ещё раз…",
+    "config-cc-not-chosen": "Выберите, какую лицензию Creative Commons Вы хотите использовать, и нажмите кнопку \"Продолжить\".",
+    "config-advanced-settings": "Дополнительные настройки",
+    "config-cache-options": "Параметры кэширования объектов:",
+    "config-cache-help": "Кэширование объектов используется для повышения скорости MediaWiki путем кэширования часто используемых данных.\nДля средних и больших сайтов кеширование настоятельно рекомендуется включать, а для небольших сайтов кеширование может показать преимущество.",
+    "config-cache-none": "Без кэширования (никакой функционал не теряется, но крупные вики-сайты могут работать медленнее)",
+    "config-cache-accel": "PHP кэширование объектов (APC, XCache или WinCache)",
+    "config-cache-memcached": "Использовать Memcached (требует дополнительной настройки)",
+    "config-memcached-servers": "Сервера Memcached:",
+    "config-memcached-help": "Список IP-адресов, используемых Memcached.\nПеречислите по одному адресу на строку с указанием портов. Например:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "Вы выбрали тип кэширования Memcached, но не задали адреса серверов.",
+    "config-memcache-badip": "Вы ввели неверный IP-адрес для Memcached: $1.",
+    "config-memcache-noport": "Не указан порт для сервера Memcached: $1.\nЕсли вы не знаете порт, по умолчанию используется 11211.",
+    "config-memcache-badport": "Номера портов Memcached должны лежать в пределах от $1 до $2.",
+    "config-extensions": "Расширения",
+    "config-extensions-help": "Расширения MediaWiki, перечисленные выше, были найдены в каталоге <code>./extensions</code>.\n\nОни могут потребовать дополнительные настройки, но их можно включить прямо сейчас",
+    "config-install-alreadydone": "'''Предупреждение:''' Вы, кажется, уже устанавливали MediaWiki и пытаетесь произвести повторную установку.\nПожалуйста, перейдите на следующую страницу.",
+    "config-install-begin": "Нажав «{{int:config-continue}}», вы начнёте установку MediaWiki.\nЕсли вы хотите внести изменения, нажмите «{{int:config-back}}».",
+    "config-install-step-done": "выполнено",
+    "config-install-step-failed": "не удалось",
+    "config-install-extensions": "В том числе расширения",
+    "config-install-database": "Настройка базы данных",
+    "config-install-schema": "Создание схемы",
+    "config-install-pg-schema-not-exist": "Схемы PostgreSQL не существует",
+    "config-install-pg-schema-failed": "Не удалось создать таблицы.\nУбедитесь в том, что пользователь «$1» может писать в схему «$2».",
+    "config-install-pg-commit": "Внесение изменений",
+    "config-install-pg-plpgsql": "Проверка языка PL/pgSQL",
+    "config-pg-no-plpgsql": "Вам необходимо установить поддержку языка PL/pgSQL для базы данных $1",
+    "config-pg-no-create-privs": "Учётная запись, указанная для установки, не обладает достаточными привилегиями для создания учётной записи.",
+    "config-pg-not-in-role": "Указанная учётная запись веб-пользователя уже существует.\nУказанная для установки учётная запись не является записью суперпользователя, и не относится к роли веб-пользователя, поэтому не получается создать объекты, принадлежащие веб-пользователю.\n\nMediaWiki в настоящее время требует, чтобы владельцем таблиц был веб-пользователь. Пожалуйста, укажите другое имя учётной записи для веб, или нажмите кнопку «назад» и укажите пользователя с достаточными для установки правами.",
+    "config-install-user": "Создание базы данных пользователей",
+    "config-install-user-alreadyexists": "Участник «$1» уже существует",
+    "config-install-user-create-failed": "Не получилось создать участника «$1»: $2",
+    "config-install-user-grant-failed": "Ошибка предоставления прав пользователю «$1»: $2",
+    "config-install-user-missing": "Указанного пользователя «$1» не существует.",
+    "config-install-user-missing-create": "Указанного пользователя «$1» не существует.\nПожалуйста поставьте ниже отметку «Создать учётную запись», если вы хотите создать его.",
+    "config-install-tables": "Создание таблиц",
+    "config-install-tables-exist": "'''Предупреждение''': таблицы MediaWiki, возможно, уже существуют.\nПропуск повторного создания.",
+    "config-install-tables-failed": "'''Ошибка''': Таблица не может быть создана из-за ошибки: $1",
+    "config-install-interwiki": "Заполнение таблицы интервики значениями по умолчанию",
+    "config-install-interwiki-list": "Не удалось найти файл <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "'''Предупреждение''': в интервики-таблице, кажется, уже есть записи.\nСоздание стандартного списка пропущено.",
+    "config-install-stats": "Статистика инициализации",
+    "config-install-keys": "Создание секретных ключей",
+    "config-insecure-keys": "'''Предупреждение.''' {{PLURAL:$2|Ключ безопасности $1, созданный во время установки, недостаточно надёжен|Ключи безопасности $1, созданные во время установки, недостаточно надёжны}}. Рассмотрите возможность {{PLURAL:$2|его|их}} изменения вручную.",
+    "config-install-sysop": "Создание учётной записи администратора",
+    "config-install-subscribe-fail": "Не удаётся подписаться на mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "cURL не установлен и не доступна опция allow_url_fopen.",
+    "config-install-mainpage": "Создание главной страницы с содержимым по умолчанию",
+    "config-install-extension-tables": "Создание таблиц для включённых расширений",
+    "config-install-mainpage-failed": "Не удаётся вставить главную страницу: $1",
+    "config-install-done": "'''Поздравляем!'''\nВы успешно установили MediaWiki.\n\nВо время установки был создан файл <code>LocalSettings.php</code>.\nОн содержит всю конфигурации вики.\n\nВам необходимо скачать его и положить в корневую директорию вашей вики (ту же директорию, где находится файл index.php). Его загрузка должна начаться автоматически.\n\nЕсли автоматическая загрузка не началась или вы её отменили, вы можете скачать по ссылке ниже:\n\n$3\n\n'''Примечание''': Если вы не сделаете этого сейчас, то сгенерированный файл конфигурации не будет доступен вам в дальнейшем, если вы выйдете из установки, не скачивая его.\n\nПо окончании действий, описанных выше, вы сможете '''[$2 войти в вашу вики]'''.",
+    "config-download-localsettings": "Загрузить <code>LocalSettings.php</code>",
+    "config-help": "справка",
+    "config-nofile": "Файл \"$1\" не удается найти. Он был удален?",
+    "config-extension-link": "Знаете ли вы, что ваш вики-проект поддерживает [//www.mediawiki.org/wiki/Manual:Extensions расширения]?\n\nВы можете просмотреть [//www.mediawiki.org/wiki/Category:Extensions_by_category расширения по категориям] или [//www.mediawiki.org/wiki/Extension_Matrix матрицу расширений], чтобы увидеть их полный список.",
+    "mainpagetext": "'''Вики-движок «MediaWiki» успешно установлен.'''",
+    "mainpagedocfooter": "Информацию по работе с этой вики можно найти в [//meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 справочном руководстве].\n\n== Некоторые полезные ресурсы ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Список возможных настроек];\n* [//www.mediawiki.org/wiki/Manual:FAQ Часто задаваемые вопросы и ответы по MediaWiki];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Перевод MediaWiki на свой язык]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/rue.json b/includes/installer/i18n/rue.json
new file mode 100644 (file)
index 0000000..92a1c38
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Gazeb"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki была успішно наіншталована.'''",
+    "mainpagedocfooter": "[//meta.wikimedia.org/wiki/Help:Contents Мануял хоснователя] Вам порадить, як хосновати MediaWiki.\n\n== Про початок ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Наставлїня конфіґурації]\n* [//www.mediawiki.org/wiki/Manual:FAQ Часты вопросы о MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Розосыланя повідомлїнь про новы верзії MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sa.json b/includes/installer/i18n/sa.json
new file mode 100644 (file)
index 0000000..5ef4773
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Hemant wikikosh1"
+        ]
+    },
+    "mainpagetext": "मीडियाविकि तु सफलतया अन्तःस्थापितमस्ति"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sah.json b/includes/installer/i18n/sah.json
new file mode 100644 (file)
index 0000000..e12c769
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''«MediaWiki» сөпкө туруорулунна.'''",
+    "mainpagedocfooter": "Биики программатын туһунан [//meta.wikimedia.org/wiki/Help:Contents справочникка] көрүөххүн сөп.\n\n== Саҕаланыыта ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Конфигурация уларытыытын параметрдара]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki релизтарын почтовай испииһэгэ]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sc.json b/includes/installer/i18n/sc.json
new file mode 100644 (file)
index 0000000..adf7b5d
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Andria"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki est stadu installadu in modu currègidu.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/scn.json b/includes/installer/i18n/scn.json
new file mode 100644 (file)
index 0000000..fa92a40
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Nstallazzioni di MediaWiki cumplitata currettamenti.'''",
+    "mainpagedocfooter": "Pi favuri taliari [//meta.wikimedia.org/wiki/Help:Contents Guida utenti] pi aiutu supra l'usu e la cunfigurazzioni di stu software wiki.\n\n== P'accuminzari ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Alencu di mpustazzioni di cunfigurazzioni]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list dî rilassi di MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sco.json b/includes/installer/i18n/sco.json
new file mode 100644 (file)
index 0000000..ddff751
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki haes been installit wi speed.'''",
+    "mainpagedocfooter": "Aks the [//meta.wikimedia.org/wiki/Help:Contents Uiser's Manual] for speirins aboot using the wiki saftware.\n\n== Gettin startit ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settins leet]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki releese mailin leet]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sdc.json b/includes/installer/i18n/sdc.json
new file mode 100644 (file)
index 0000000..8fb65a7
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Isthallazioni di MediaWiki accabadda currentementi.'''",
+    "mainpagedocfooter": "Cunsultha la [//meta.wikimedia.org/wiki/Aggiuddu:Summàriu Ghia utenti] pa maggiori infuimmazioni i l'usu di chisthu software wiki.\n\n== Pa ischuminzà ==\nLi sighenti cullegamenti so in linga ingrese:\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Impusthazioni di cunfigurazioni]\n* [//www.mediawiki.org/wiki/Manual:FAQ Prigonti friquenti i MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list annùnzii MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sei.json b/includes/installer/i18n/sei.json
new file mode 100644 (file)
index 0000000..3d46a56
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki coccebj installöx successua zo mii.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sh.json b/includes/installer/i18n/sh.json
new file mode 100644 (file)
index 0000000..c372fa4
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "OC Ripper"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki softver is uspješno instaliran.'''",
+    "mainpagedocfooter": "Kontaktirajte [//meta.wikimedia.org/wiki/Help:Contents uputstva za korisnike] za informacije o upotrebi wiki programa.\n\n== Početak ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista postavki]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki najčešće postavljana pitanja]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista E-Mail adresa MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/shi.json b/includes/installer/i18n/shi.json
new file mode 100644 (file)
index 0000000..09bbf18
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Dalinanir"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki tǧizn (tsrbk) bla tamukrist.'''",
+    "mainpagedocfooter": "Ẓr taǧttnn  [//meta.wikimedia.org/wiki/Aide:Contenu Guide de l’utilisateur] bac ad tawit inɣmisn yaḍn f manik sa tswwurt asɣẓan ad.\n\n== Izwir d MediaWiki ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Umuɣ n iɣwwarn n usgadda ]\n* [//www.mediawiki.org/wiki/Manual:FAQ/fr Isqqsitn f MidyWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Umuɣ n imsgdaln f imbḍitn n MidyaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/si.json b/includes/installer/i18n/si.json
new file mode 100644 (file)
index 0000000..f4b1dc1
--- /dev/null
@@ -0,0 +1,141 @@
+{
+    "@metadata": {
+        "authors": [
+            "Singhalawap",
+            "පසිඳු කාවින්ද"
+        ]
+    },
+    "config-desc": "මාධ්‍යවිකි සඳහා වූ ස්ථාපකය",
+    "config-title": "මාධ්‍යවිකි $1 ස්ථාපනය",
+    "config-information": "තොරතුරු",
+    "config-localsettings-key": "උසස්කිරීම් යතුර:",
+    "config-localsettings-badkey": "ඔබ ඉදිරිපත් කෙරූ යතුර වැරදිය.",
+    "config-session-error": "සැසිය ඇරඹීමේ දෝෂය: $1",
+    "config-your-language": "ඔබේ භාෂාව:",
+    "config-wiki-language": "විකි භාෂාව:",
+    "config-back": "← ආපසු",
+    "config-continue": "ඉදිරියට →",
+    "config-page-language": "භාෂාව",
+    "config-page-welcome": "මාධ්‍යවිකි වෙත පිළිගනිමු!",
+    "config-page-dbconnect": "දත්ත සංචිතයට සම්බන්ධ කරන්න",
+    "config-page-upgrade": "පවත්නා ස්ථාපනය උසස් කරන්න",
+    "config-page-dbsettings": "දත්ත සංචිත සැකසුම්",
+    "config-page-name": "නම",
+    "config-page-options": "විකල්ප",
+    "config-page-install": "ස්ථාපනය",
+    "config-page-complete": "සම්පූර්ණයි!",
+    "config-page-restart": "ස්ථාපනය යළි අරඹන්න",
+    "config-page-readme": "මාව කියවන්න",
+    "config-page-releasenotes": "නිකුතු සටහන්",
+    "config-page-copying": "පිටපත් කරමින්",
+    "config-page-upgradedoc": "උසස් කරමින්",
+    "config-page-existingwiki": "පවත්නා විකිය",
+    "config-env-php": "PHP $1 ස්ථාපිතයි.",
+    "config-db-type": "දත්ත සංචිත වර්ගය:",
+    "config-db-host": "දත්ත සංචිත ධාරක:",
+    "config-db-wiki-settings": "මෙම විකිය හඳුනා ගන්න",
+    "config-db-name": "දත්ත සංචිතයේ නම:",
+    "config-db-name-oracle": "දත්ත සංචිත සංක්ෂිප්ත නිරූපණය:",
+    "config-db-install-account": "ස්ථාපනය සඳහා පරිශීලක ගිණුම",
+    "config-db-username": "දත්ත සංචිතයේ පරිශීලක නාමය:",
+    "config-db-password": "දත්ත සංචිතයේ මුරපදය:",
+    "config-db-wiki-account": "සාමාන්‍ය ක්‍රියාකාරිත්වය සඳහා පරිශීලක ගිණුම",
+    "config-db-prefix": "දත්ත සංචිත වගු උපසර්ගය:",
+    "config-db-charset": "දත්ත සංචිත අක්ෂර කට්ටලය",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 ද්විමය",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 ආපස්සට-ගැළපෙන UTF-8",
+    "config-db-port": "දත්ත සංචිතයේ කවුළුව:",
+    "config-db-schema": "මාධ්‍යවිකි සඳහා සංක්ෂිප්ත නිරූපණය:",
+    "config-pg-test-error": "'''$1''' දත්ත සංචිතය වෙත සම්බන්ධ විය නොහැක: $2",
+    "config-sqlite-dir": "SQLite දත්ත නාමවලිය:",
+    "config-oracle-def-ts": "සාමාන්‍ය වගු අවකාශය:",
+    "config-oracle-temp-ts": "තාවකාලික වගු අවකාශය:",
+    "config-header-mysql": "MySQL සැකසුම්",
+    "config-header-postgres": "PostgreSQL සැකසුම්",
+    "config-header-sqlite": "SQLite සැකසුම්",
+    "config-header-oracle": "ඔරකල් සැකසුම්",
+    "config-invalid-db-type": "වලංගු නොවන දත්ත සංචිත වර්ගය",
+    "config-missing-db-name": "\"දත්ත සංචිත නාමය\" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ",
+    "config-missing-db-host": "\"දත්ත සංචිත ධාරකය\" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ",
+    "config-missing-db-server-oracle": "\"දත්ත සංචිත TNS\" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ",
+    "config-regenerate": "නැවත ජනිත කරන්න LocalSettings.php →",
+    "config-db-web-account": "ජාල ප්‍රවේශනය සඳහා දත්ත සංචිත ගිණුම",
+    "config-mysql-engine": "ආචයන එන්ජිම:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-binary": "ද්විමය",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "විකියෙහි නම:",
+    "config-site-name-blank": "අඩවි නාමයක් යොදන්න.",
+    "config-project-namespace": "ව්‍යාපෘතියේ නාමඅවකාශය:",
+    "config-ns-generic": "ව්‍යාපෘතිය",
+    "config-ns-site-name": "විකියෙහි නම ලෙසම: $1",
+    "config-ns-other": "වෙනත් (විශේෂණය කරන්න)",
+    "config-ns-other-default": "මගේවිකිය",
+    "config-admin-box": "පරිපාලක ගිණුම",
+    "config-admin-name": "ඔබේ නම:",
+    "config-admin-password": "මුරපදය:",
+    "config-admin-password-confirm": "මුරපදය නැවතත්:",
+    "config-admin-name-blank": "පරිපාලක පරිශීලක නාමය යොදන්න.",
+    "config-admin-password-blank": "පරිපාලක ගිණුම සඳහා මුරපදය යොදන්න.",
+    "config-admin-password-same": "මුරපදය හා පරිශීලක නාමය එක සමාන නොවිය යුතුය.",
+    "config-admin-password-mismatch": "ඔබ ඇතුළු කල මුරපද දෙක නොගැලපේ.",
+    "config-admin-email": "විද්‍යුත්-තැපැල් ලිපිනය:",
+    "config-admin-error-bademail": "ඔබ විසින් වලංගු නොවන විද්‍යුත්-ලිපිනයක් යොදා ඇත.",
+    "config-optional-continue": "මගෙන් තව ප්‍රශ්ණ අහන්න.",
+    "config-optional-skip": "මම දැනටමත් කම්මැලි වී ඇත, විකිය ස්ථාපනය කරන්න.",
+    "config-profile": "පරිශීලක හිමිකම් පැතිකඩ:",
+    "config-profile-wiki": "සාම්ප්‍රදායික විකිය",
+    "config-profile-no-anon": "ගිණුම් තැනීම අවශ්‍යයි",
+    "config-profile-fishbowl": "අවසරලත් සංස්කාරකවරුන් පමණි",
+    "config-profile-private": "පුද්ගලික විකිය",
+    "config-license": "කතුහිමිකම සහ බලපත්‍රය:",
+    "config-license-none": "බලපත්‍ර පාද තලයක් නොමැත",
+    "config-license-cc-by-sa": "නිර්මාණාත්මක පොදුජන ආරෝපණය හුවමාරුවට සමානව",
+    "config-license-cc-by": "නිර්මාණාත්මක පොදුජන ආරෝපණය",
+    "config-license-cc-by-nc-sa": "නිර්මාණාත්මක පොදුජන ආරෝපණය වාණිජ්‍ය-නොවන හුවමාරුවට සමානව",
+    "config-license-pd": "පොදු වසම",
+    "config-email-settings": "විද්‍යුත්-තැපැල් සැකසුම්",
+    "config-enable-email": "පිටතට යොමු වූ විද්‍යුත්-තැපෑල සක්‍රිය කරන්න",
+    "config-email-user": "පරිශීලක-වෙත-පරිශීලක විද්‍යුත්-තැපෑල සක්‍රිය කරන්න",
+    "config-email-usertalk": "පරිශීලක කතාබහ පිටු නිවේදනය සක්‍රිය කරන්න",
+    "config-email-watchlist": "මුරලැයිස්තු නිවේදනය සක්‍රිය කරන්න",
+    "config-email-auth": "විද්‍යුත්-තැපැල් සහතික කිරීම සක්‍රිය කරන්න",
+    "config-email-sender": "ප්‍රත්‍යාගමන විද්‍යුත්-තැපැල් ලිපිනය:",
+    "config-upload-settings": "පින්තූර සහ ගොනු උඩුගත කිරීම්",
+    "config-upload-enable": "ගොනු උඩුගත කිරීම් සක්‍රිය කරන්න",
+    "config-upload-deleted": "මැකූ ගොනු සඳහා නාමාවලිය:",
+    "config-logo": "ලාංඡනයේ URL:",
+    "config-instantcommons": "ක්ෂණික කොමන්ස් සක්‍රිය කරන්න",
+    "config-cc-again": "නැවත ඇහිඳගන්න...",
+    "config-advanced-settings": "උසස් වින්‍යාසගතකෙරුම",
+    "config-cache-options": "වස්තු කෑෂය සඳහා සැකසුම්:",
+    "config-memcached-servers": "මතකකෑෂිත සර්වරයන්:",
+    "config-extensions": "විස්තීර්ණ",
+    "config-install-step-done": "සිදුකලා",
+    "config-install-step-failed": "අසාර්ථකයි",
+    "config-install-extensions": "විස්තීර්ණ අඩංගු කරමින්",
+    "config-install-database": "දත්ත සංචිතය සකසමින්",
+    "config-install-schema": "සංක්ෂිප්ත නිරූපණය තනමින්",
+    "config-install-pg-schema-not-exist": "PostgreSQL සංක්ෂිප්ත නිරූපණය නොපවතියි.",
+    "config-install-pg-commit": "වෙනස්කම් ප්‍රයාපනය කරමින්",
+    "config-install-pg-plpgsql": "PL/pgSQL භාෂාව සඳහා පරික්ෂා කරමින්",
+    "config-install-user": "දත්ත සංචිත පරිශීලක තනමින්",
+    "config-install-user-alreadyexists": "\"$1\" පරිශීලක දැනටමත් පවතී",
+    "config-install-user-create-failed": "\"$1\" පරිශීලක තැනීම අසාර්ථකයි: $2",
+    "config-install-user-missing": "විශේෂණය කෙරූ \"$1\" පරිශීලකයා නොපවතියි.",
+    "config-install-tables": "වගු තනමින්",
+    "config-install-interwiki": "සාමාන්‍ය අන්තර්විකි වගුව ගහනය කරමින්",
+    "config-install-interwiki-list": "<code>interwiki.list</code> ගොනුව කියවිය නොහැක.",
+    "config-install-stats": "සංඛ්‍යානය අරඹමින්",
+    "config-install-keys": "රහස් යතුරු ජනිත කරමින්",
+    "config-install-sysop": "පරිපාලක පරිශීලක ගිණුම තනමින්",
+    "config-install-mainpage": "සාමාන්‍ය අන්තර්ගතය සමඟින් ප්‍රධාන පිටුව තනමින්",
+    "config-install-mainpage-failed": "ප්‍රධාන පිටුව ඇතුල් කල නොහැක: $1",
+    "config-download-localsettings": "<code>LocalSettings.php</code> බාගන්න",
+    "config-help": "උදව්",
+    "config-nofile": "\"$1\" ගොනුව සොයාගත නොහැක. එක මැකිලා ගියාවත්ද?",
+    "mainpagetext": "'''මීඩියාවිකි සාර්ථක ලෙස ස්ථාපනය කරන ලදි.'''",
+    "mainpagedocfooter": "විකි මෘදුකාංග භාවිතා කිරීම පිළිබඳ තොරතුරු සඳහා  [//meta.wikimedia.org/wiki/Help:Contents පරිශීලකයන් සඳහා නියමුව] හදාරන්න.\n\n== ඇරඹුම ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings වින්‍යාස සැකසුම්]\n* [//www.mediawiki.org/wiki/Manual:FAQ මීඩියාවිකි නිති-විමසන-පැන]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce මීඩියාවිකි නිකුතුව තැපැල් ලැයිස්තුව]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sk.json b/includes/installer/i18n/sk.json
new file mode 100644 (file)
index 0000000..d98409e
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "@metadata": {
+        "authors": [
+            "Kusavica"
+        ]
+    },
+    "config-your-language": "Váš jazyk:",
+    "config-wiki-language": "Wiki jazyk:",
+    "config-back": "← Späť",
+    "config-continue": "Pokračovať →",
+    "config-page-language": "Jazyk",
+    "config-download-localsettings": "Stiahnuť <code>LocalSettings.php</code>",
+    "config-nofile": "Súbor \"$1\" sa nenašiel. Bol zmazaný?",
+    "mainpagetext": "'''Softvér MediaWiki bol úspešne nainštalovaný.'''",
+    "mainpagedocfooter": "Informácie ako používať wiki softvér nájdete v [//meta.wikimedia.org/wiki/Help:Contents Používateľskej príručke].\n\n== Začíname ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Zoznam konfiguračných nastavení]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailing list nových verzií MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sl.json b/includes/installer/i18n/sl.json
new file mode 100644 (file)
index 0000000..b5afd87
--- /dev/null
@@ -0,0 +1,172 @@
+{
+    "@metadata": {
+        "authors": [
+            "Dbc334",
+            "Eleassar"
+        ]
+    },
+    "config-desc": "Namestitveni program za MediaWiki",
+    "config-title": "Namestitev MediaWiki $1",
+    "config-information": "Informacije",
+    "config-localsettings-cli-upgrade": "Zaznana je bila datoteka <code>LocalSettings.php</code>.\nZa nadgradnjo te namestitve zaženite <code>update.php</code>",
+    "config-localsettings-key": "Nadgraditveni ključ:",
+    "config-localsettings-badkey": "Naveden ključ je napačen.",
+    "config-upgrade-key-missing": "Zaznana je bila obstoječa namestitev MediaWiki.\nZa nadgradnjo te namestitve vstavite naslednjo vrstico na dno vaše <code>LocalSettings.php</code>:\n\n$1",
+    "config-session-error": "Napaka pri začenjanju seje: $1",
+    "config-session-expired": "Kot kaže, so vaši podatki seje potekli.\nSeje so konfigurirane za dobo $1.\nTo lahko povečate tako, da nastavite <code>session.gc_maxlifetime</code> v php.ini.\nPonovno zaženite postopek namestitve.",
+    "config-no-session": "Vaši podatki seje so bili izgubljeni!\nPreverite vaš php.ini in se prepričajte, da je <code>session.save_path</code> nastavljena na ustrezno mapo.",
+    "config-your-language": "Vaš jezik:",
+    "config-your-language-help": "Izberite jezik, ki bo uporabljen med postopkom namestitve.",
+    "config-wiki-language": "Jezik wikija:",
+    "config-wiki-language-help": "Izberite jezik, v katerem bo wiki večinoma pisan.",
+    "config-back": "← Nazaj",
+    "config-continue": "Nadaljuj →",
+    "config-page-language": "Jezik",
+    "config-page-welcome": "Dobrodošli na MediaWiki!",
+    "config-page-dbconnect": "Vzpostavi povezavo z zbirko podatkov",
+    "config-page-upgrade": "Nadgradi obstoječo namestitev",
+    "config-page-dbsettings": "Nastavitve zbirke podatkov",
+    "config-page-name": "Ime",
+    "config-page-options": "Možnosti",
+    "config-page-install": "Namesti",
+    "config-page-complete": "Končano!",
+    "config-page-restart": "Ponovno zaženi namestitev",
+    "config-page-readme": "Beri me",
+    "config-page-releasenotes": "Opombe ob izidu",
+    "config-page-copying": "Kopiranje",
+    "config-page-upgradedoc": "Nadgrajevanje",
+    "config-page-existingwiki": "Obstoječ wiki",
+    "config-help-restart": "Želite počistiti vse shranjene podatke, ki ste jih vnesti, in ponovno začeti s postopkom namestitve?",
+    "config-restart": "Da, ponovno zaženi",
+    "config-welcome": "=== Pregledi okolja ===\nIzvedli bomo osnovne preglede, da vidimo, če je okolje primerno za namestitev MediaWiki.\nPosredujte rezultate teh pregledov, če med namestitvijo potrebujete pomoč.",
+    "config-sidebar": "* [//www.mediawiki.org Domača stran MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents Vodnik za uporabnike]\n* [//www.mediawiki.org/wiki/Manual:Contents Vodnik za administratorje]\n* [//www.mediawiki.org/wiki/Manual:FAQ Pogosto zastavljena vprašanja]\n----\n* <doclink href=Readme>Beri me</doclink>\n* <doclink href=ReleaseNotes>Opombe ob izidu</doclink>\n* <doclink href=Copying>Kopiranje</doclink>\n* <doclink href=UpgradeDoc>Nadgrajevanje</doclink>",
+    "config-env-good": "Okolje je pregledano.\nLahko namestite MediaWiki.",
+    "config-env-bad": "Okolje je pregledano.\nNe morete namestiti MediaWiki.",
+    "config-env-php": "Nameščen je PHP $1.",
+    "config-env-php-toolow": "Nameščen je PHP $1.\nVendar pa MediaWiki zahteva PHP $2 ali višji.",
+    "config-unicode-using-utf8": "Uporaba utf8_normalize.so Briona Vibberja za normalizacijo unikoda.",
+    "config-unicode-using-intl": "Uporaba [http://pecl.php.net/intl razširitve PECL intl] za normalizacijo unikoda.",
+    "config-memory-raised": "PHP-jev <code>memory_limit</code> je $1, dvignjen na $2.",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] je nameščen",
+    "config-apc": "[http://www.php.net/apc APC] je nameščen",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] je nameščen",
+    "config-diff3-bad": "GNU diff3 ni bilo mogoče najti.",
+    "config-db-type": "Vrsta zbirke podatkov:",
+    "config-db-host": "Gostitelj zbirke podatkov:",
+    "config-db-host-oracle": "TNS zbirke podatkov:",
+    "config-db-wiki-settings": "Prepoznaj ta wiki:",
+    "config-db-name": "Ime zbirke podatkov:",
+    "config-db-name-oracle": "Shema zbirke podatkov:",
+    "config-db-username": "Uporabniško ime zbirke podatkov:",
+    "config-db-password": "Geslo zbirke podatkov:",
+    "config-db-prefix": "Predpona tabel zbirke podatkov:",
+    "config-db-charset": "Nabor znakov zbirke podatkov",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 dvojiško",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 nazaj združljiv UTF-8",
+    "config-mysql-old": "Potreben je MySQL $1 ali novejši; vi imate $2.",
+    "config-db-port": "Vrata zbirke podatkov:",
+    "config-db-schema": "Shema MediaWiki",
+    "config-db-schema-help": "Ta shema je po navadi v redu.\nSpremenite jo samo, če veste, da jo morate.",
+    "config-sqlite-dir": "Mapa podatkov SQLite:",
+    "config-support-info": "MediaWiki podpira naslednje sisteme zbirk podatkov:\n\n$1\n\nČe zgoraj ne vidite navedenega sistema zbirk podatkov, ki ga poskušate uporabiti, sledite navodilom na spodnji povezavi, da omogočite podporo.",
+    "config-header-mysql": "Nastavitve MySQL",
+    "config-header-postgres": "Nastavitve PostgreSQL",
+    "config-header-sqlite": "Nastavitve SQLite",
+    "config-header-oracle": "Nastavitve Oracle",
+    "config-invalid-db-type": "Neveljavna vrsta zbirke podatkov",
+    "config-missing-db-name": "Vnesti morate vrednost za »Ime zbirke podatkov«",
+    "config-missing-db-host": "Vnesti morate vrednost za »Gostitelj zbirke podatkov«",
+    "config-missing-db-server-oracle": "Vnesti morate vrednost za »TNS zbirke podatkov«",
+    "config-invalid-db-server-oracle": "Neveljaven TNS zbirke podatkov »$1«.\nUporabite ali \"ime TNS\" ali niz \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Načini poimenovanja Oracle])",
+    "config-invalid-db-name": "Neveljavno ime zbirke podatkov »$1«.\nUporabljajte samo črke ASCII (a-z, A-Z), številke (0-9), podčrtaje (_) in vezaje (-).",
+    "config-invalid-db-prefix": "Neveljavna predpona zbirke podatkov »$1«.\nUporabljajte samo črke ASCII (a-z, A-Z), številke (0-9), podčrtaje (_) in vezaje (-).",
+    "config-connection-error": "$1.\n\nPreverite gostitelja, uporabniško ime in geslo spodaj ter poskusite znova.",
+    "config-postgres-old": "Potreben je PostgreSQL $1 ali novejši; vi imate $2.",
+    "config-sqlite-connection-error": "$1.\n\nPreverite mapo podatkov in ime zbirke podatkov spodaj ter poskusite znova.",
+    "config-sqlite-readonly": "Datoteka <code>$1</code> ni zapisljiva.",
+    "config-sqlite-cant-create-db": "Ne morem ustvariti datoteke zbirke podatkov <code>$1</code>.",
+    "config-upgrade-done-no-regenerate": "Nadgradnja je končana.\n\nSedaj lahko [$1 začnete uporabljati vaš wiki].",
+    "config-regenerate": "Ponovno ustvari LocalSettings.php →",
+    "config-show-table-status": "Poizvedba <code>SHOW TABLE STATUS</code> ni uspela!",
+    "config-unknown-collation": "'''Opozorilo:''' Zbirke podatkov uporablja neprepoznano razvrščanje znakov.",
+    "config-db-web-account": "Račun zbirke podatkov za spletni dostop",
+    "config-db-web-account-same": "Uporabi enak račun kot za namestitev",
+    "config-db-web-create": "Ustvari račun, če že ne obstaja",
+    "config-mysql-engine": "Pogon skladiščenja:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-charset": "Nabor znakov zbirke podatkov:",
+    "config-mysql-binary": "Dvojiško",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "Ime wikija:",
+    "config-site-name-help": "To bo prikazano v naslovni vrstici brskalnika in na drugih različnih mestih.",
+    "config-site-name-blank": "Vnesite ime strani.",
+    "config-project-namespace": "Imenski prostor projekta:",
+    "config-ns-generic": "Projekt",
+    "config-ns-site-name": "Enako kot ime wikija: $1",
+    "config-ns-other": "Drugo (navedite)",
+    "config-ns-other-default": "MojWiki",
+    "config-ns-invalid": "Naveden imenski prostor »<nowiki>$1</nowiki>« ni veljaven.\nDoločite drug imenski prostor projekta.",
+    "config-ns-conflict": "Naveden imenski prostor »<nowiki>$1</nowiki>« je v sporu s privzetim imenskim prostorom MediaWiki.\nDoločite drug imenski prostor projekta.",
+    "config-admin-box": "Administratorski račun",
+    "config-admin-name": "Vaše ime:",
+    "config-admin-password": "Geslo:",
+    "config-admin-password-confirm": "Geslo, ponovno:",
+    "config-admin-help": "Tukaj vnesite želeno uporabniško ime, na primer »Janez Blog«.\nTo je ime, ki ga boste uporabljali za prijavo v wiki.",
+    "config-admin-name-blank": "Vnesite uporabniško ime administratorja.",
+    "config-admin-name-invalid": "Navedeno uporabniško ime »<nowiki>$1</nowiki>« ni veljavno.\nDoločite drugo uporabniško ime.",
+    "config-admin-password-blank": "Vnesite geslo za administratorski račun.",
+    "config-admin-password-same": "Geslo ne sme biti enako kot uporabniško ime.",
+    "config-admin-password-mismatch": "Vneseni gesli se ne ujemata.",
+    "config-admin-email": "E-poštni naslov:",
+    "config-admin-error-user": "Med ustvarjanjem administratorja »<nowiki>$1</nowiki>« je prišlo do notranje napake.",
+    "config-admin-error-password": "Med nastavljanjem gesla za administratorja »<nowiki>$1</nowiki>« je prišlo do notranje napake: <pre>$2</pre>",
+    "config-admin-error-bademail": "Vnesli ste neveljaven e-poštni naslov.",
+    "config-subscribe": "Naročite se na [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce poštni seznam obvestil o izdajah].",
+    "config-almost-done": "Skoraj ste že končali!\nPreostalo konfiguriranje lahko zdaj preskočite in wiki takoj namestite.",
+    "config-optional-continue": "Zastavi mi več vprašanj.",
+    "config-optional-skip": "Se že dolgočasim; samo namesti wiki.",
+    "config-profile": "Profil uporabniških pravic:",
+    "config-profile-wiki": "Odprti wiki",
+    "config-profile-no-anon": "Zahtevano je ustvarjanje računa",
+    "config-profile-fishbowl": "Samo pooblaščeni urejevalci",
+    "config-profile-private": "Zasebni wiki",
+    "config-license": "Avtorske pravice in licenca:",
+    "config-license-none": "Brez noge dovoljenja",
+    "config-license-cc-by-sa": "Creative Commons Priznanje avtorstva-Deljenje pod enakimi pogoji",
+    "config-license-cc-by": "Creative Commons Priznanje avtorstva",
+    "config-license-cc-by-nc-sa": "Creative Commons Priznanje avtorstva-Nekomercialno-Deljenje pod enakimi pogoji",
+    "config-license-cc-0": "Creative Commons Zero (javna last)",
+    "config-license-pd": "Javna last",
+    "config-license-cc-choose": "Izberite dovoljenje Creative Commons po meri",
+    "config-email-settings": "Nastavitve e-pošte",
+    "config-enable-email": "Omogoči odhodno e-pošto",
+    "config-email-user": "Omogoči e-pošto med uporabniki",
+    "config-email-auth": "Omogoči overitev preko e-pošte",
+    "config-email-sender": "E-poštni naslov za vrnjeno pošto:",
+    "config-upload-settings": "Nalaganje slike in datotek",
+    "config-upload-enable": "Omogoči nalaganje datotek",
+    "config-upload-deleted": "Mapa za izbrisane datoteke:",
+    "config-upload-deleted-help": "Izberite mapo za arhiviranje izbrisanih datotek.\nNajbolje je, da mapa ni dostopna preko spleta.",
+    "config-logo": "URL logotipa:",
+    "config-cc-error": "Izbirnik dovoljenja Creative Commons ni vrnil nobenih rezultatov.\nVnesite ime dovoljenja ročno.",
+    "config-cc-again": "Izberi ponovno ...",
+    "config-cc-not-chosen": "Izberite licenco Creative Commons, ki jo želite uporabiti, in kliknite »proceed«.",
+    "config-advanced-settings": "Napredna konfiguracija",
+    "config-cache-accel": "Predpomnjenje predmetov PHP (APC, XCache ali WinCache)",
+    "config-cache-memcached": "Uporabi Memcached (zahteva dodatno namestitev in konfiguracijo)",
+    "config-memcached-servers": "Strežniki Memcached:",
+    "config-memcache-badip": "Vnesli ste neveljaven IP-naslov za Memcached: $1",
+    "config-extensions": "Razširitve",
+    "config-install-step-done": "končano",
+    "config-install-step-failed": "spodletelo",
+    "config-install-database": "Vzpostavljanje zbirke podatkov",
+    "config-install-pg-schema-not-exist": "Shema PostgreSQL ne obstaja.",
+    "config-install-user-alreadyexists": "Uporabnik »$1« že obstaja",
+    "config-install-tables": "Ustvarjanje tabel",
+    "config-download-localsettings": "Prenesi <code>LocalSettings.php</code>",
+    "config-help": "pomoč",
+    "mainpagetext": "'''Programje MediaWiki je bilo uspešno nameščeno.'''",
+    "mainpagedocfooter": "Oglejte si [//meta.wikimedia.org/wiki/Help:Contents Uporabniški priročnik] za informacije o uporabi programja wiki.\n\n== Kako začeti ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Seznam konfiguracijskih nastavitev]\n* [//www.mediawiki.org/wiki/Manual:FAQ Poogsto zastavljena vprašanja MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Poštni seznam izdaj MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Prevedite MediaWiki v svoj jezik]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sli.json b/includes/installer/i18n/sli.json
new file mode 100644 (file)
index 0000000..4f82151
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Äberlausitzer"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki wourde erfolgreich installiert.'''",
+    "mainpagedocfooter": "Hilfe zur Benutzung und Konfiguration der Wiki-Software fendest du eim [//meta.wikimedia.org/wiki/Help:Contents Benutzerhandbichl].\n\n== Stoarthilfa ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Konfigurationsvariablen]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/so.json b/includes/installer/i18n/so.json
new file mode 100644 (file)
index 0000000..0344c5a
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Maax"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki Si fiican oo kuugu install gareeyay.'''",
+    "mainpagedocfooter": "Meeshaan ka akhriso sidii aad u isticmaali leheed brogramka wiki [//meta.wikimedia.org/wiki/Help:Contents User's Guide]  .\n== Bilaaw ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sq.json b/includes/installer/i18n/sq.json
new file mode 100644 (file)
index 0000000..a9ef652
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki software u instalua me sukses.'''",
+    "mainpagedocfooter": "Për më shumë informata rreth përdorimit të softwerit wiki , ju lutem shikoni [//meta.wikimedia.org/wiki/Help:Contents dokumentacionin përkatës].\n\n== Sa për fillim==\n* [//www.mediawiki.org/wiki/Help:Configuration_settings Parazgjedhjet e MediaWiki-t]\n* [//www.mediawiki.org/wiki/Help:FAQ Pyetjet e shpeshta rreth MediaWiki-t]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Njoftime rreth MediaWiki-t]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sr-ec.json b/includes/installer/i18n/sr-ec.json
new file mode 100644 (file)
index 0000000..87a119a
--- /dev/null
@@ -0,0 +1,38 @@
+{
+    "@metadata": {
+        "authors": [
+            "Rancher",
+            "Михајло Анђелковић"
+        ]
+    },
+    "config-session-error": "Грешка при започињању сесије: $1",
+    "config-session-expired": "Ваши подаци о сесији су истекли.\nСесије су подешене да трају $1.\nЊихов рок можете повећати постављањем <code>session.gc_maxlifetime</code> у php.ini.\nПоново покрените инсталацију.",
+    "config-no-session": "Ваши подаци о сесији су изгубљени!\nПроверите Ваш php.ini и обезбедите да је <code>session.save_path</code> постављен на одговарајући директоријум.",
+    "config-your-language": "Ваш језик:",
+    "config-your-language-help": "Изаберите језик који желите да користите током инсталације.",
+    "config-wiki-language": "Језик викија:",
+    "config-wiki-language-help": "Изаберите језик на ком ће бити садржај викија.",
+    "config-back": "← Назад",
+    "config-continue": "Настави →",
+    "config-page-language": "Језик",
+    "config-page-welcome": "Добро дошли на МедијаВики!",
+    "config-page-dbconnect": "Повезивање са базом података",
+    "config-page-upgrade": "Надоградња постојеће инсталације",
+    "config-page-dbsettings": "Подешавања базе података",
+    "config-page-name": "Назив",
+    "config-page-options": "Поставке",
+    "config-page-install": "Инсталирај",
+    "config-page-complete": "Завршено!",
+    "config-page-restart": "Поновно покретање инсталације",
+    "config-page-copying": "Умножавање",
+    "config-page-upgradedoc": "Надоградња",
+    "config-page-existingwiki": "Постојећи вики",
+    "config-help-restart": "Желите ли да обришете све сачуване податке које сте унели и поново покренете инсталацију?",
+    "config-restart": "Да, покрени поново",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "mainpagetext": "'''Медијавики је успешно инсталиран.'''",
+    "mainpagedocfooter": "Погледајте [//meta.wikimedia.org/wiki/Help:Contents кориснички водич] за коришћење програма.\n\n== Увод ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Помоћ у вези са подешавањима]\n* [//www.mediawiki.org/wiki/Manual:FAQ Често постављена питања]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописна листа о издањима Медијавикија]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sr-el.json b/includes/installer/i18n/sr-el.json
new file mode 100644 (file)
index 0000000..ef1c320
--- /dev/null
@@ -0,0 +1,35 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "config-session-error": "Greška pri započinjanju sesije: $1",
+    "config-session-expired": "Vaši podaci o sesiji su istekli.\nSesije su podešene da traju $1.\nNjihov rok možete povećati postavljanjem <code>session.gc_maxlifetime</code> u php.ini.\nPonovo pokrenite instalaciju.",
+    "config-no-session": "Vaši podaci o sesiji su izgubljeni!\nProverite Vaš php.ini i obezbedite da je <code>session.save_path</code> postavljen na odgovarajući direktorijum.",
+    "config-your-language": "Vaš jezik:",
+    "config-your-language-help": "Izaberite jezik koji želite da koristite tokom instalacije.",
+    "config-wiki-language": "Jezik vikija:",
+    "config-wiki-language-help": "Izaberite jezik na kom će biti sadržaj vikija.",
+    "config-back": "← Nazad",
+    "config-continue": "Nastavi →",
+    "config-page-language": "Jezik",
+    "config-page-welcome": "Dobro došli na MedijaViki!",
+    "config-page-dbconnect": "Povezivanje sa bazom podataka",
+    "config-page-upgrade": "Nadogradnja postojeće instalacije",
+    "config-page-dbsettings": "Podešavanja baze podataka",
+    "config-page-name": "Naziv",
+    "config-page-options": "Postavke",
+    "config-page-install": "Instaliraj",
+    "config-page-complete": "Završeno!",
+    "config-page-restart": "Ponovno pokretanje instalacije",
+    "config-page-copying": "Umnožavanje",
+    "config-page-upgradedoc": "Nadogradnja",
+    "config-page-existingwiki": "Postojeći viki",
+    "config-help-restart": "Želite li da obrišete sve sačuvane podatke koje ste uneli i ponovo pokrenete instalaciju?",
+    "config-restart": "Da, pokreni ponovo",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "mainpagetext": "'''MedijaViki je uspešno instaliran.'''",
+    "mainpagedocfooter": "Molimo vidite [//meta.wikimedia.org/wiki/Help:Contents korisnički vodič] za informacije o upotrebi viki softvera.\n\n== Za početak ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Pomoć u vezi sa podešavanjima]\n* [//www.mediawiki.org/wiki/Manual:FAQ Najčešće postavljena pitanja]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mejling lista o izdanjima MedijaVikija]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/srn.json b/includes/installer/i18n/srn.json
new file mode 100644 (file)
index 0000000..a535dcb
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki seti kon bun.'''",
+    "mainpagedocfooter": "Luku na ini a [//meta.wikimedia.org/wiki/Help:Yepi yepibuku] fu si fa fu kebrouki a wikisoftware.\n\n== Moro yepi ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Den seti]\n* [//www.mediawiki.org/wiki/Manual:FAQ Sani di ben aksi furu (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Boskopu grupu gi nyun meki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ss.json b/includes/installer/i18n/ss.json
new file mode 100644 (file)
index 0000000..ab02e91
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''i-MediaWiki seyifakeke ngalokuphelele.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/stq.json b/includes/installer/i18n/stq.json
new file mode 100644 (file)
index 0000000..abee1ef
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Maartenvdbent"
+        ]
+    },
+    "mainpagetext": "'''Ju MediaWiki Software wuude mäd Ärfoulch installierd.'''",
+    "mainpagedocfooter": "Sjuch ju [//meta.wikimedia.org/wiki/MediaWiki_localization Dokumentation tou de Anpaasenge fon dän Benutseruurfläche] un dät [//meta.wikimedia.org/wiki/Help:Contents Benutserhondbouk] foar Hälpe tou ju Benutsenge un Konfiguration."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/su.json b/includes/installer/i18n/su.json
new file mode 100644 (file)
index 0000000..920e7ab
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''''Software'' MediaWiki geus diinstal.'''",
+    "mainpagedocfooter": "Mangga tingal ''[//meta.wikimedia.org/wiki/MediaWiki_localisation documentation on customizing the interface]'' jeung [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Tungtunan Pamaké] pikeun pitulung maké jeung konfigurasi."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sv.json b/includes/installer/i18n/sv.json
new file mode 100644 (file)
index 0000000..48f9c68
--- /dev/null
@@ -0,0 +1,199 @@
+{
+    "@metadata": {
+        "authors": [
+            "Jopparn",
+            "Skalman",
+            "WikiPhoenix"
+        ]
+    },
+    "config-desc": "Installationsprogram för MediaWiki",
+    "config-title": "Installation av MediaWiki $1",
+    "config-information": "Information",
+    "config-localsettings-upgrade": "A <code>LocalSettings.php</code>-fil har upptäckts.\nFör att uppgradera den här installationen, vänligen ange värdet för <code>$wgUpgradeKey</code> i rutan nedan.\nDu hittar den i <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "En <code>LocalSettings.php</code>-fil har upptäckts.\nFör att uppgradera denna installation, kör <code>update.php</code> istället",
+    "config-localsettings-key": "Uppgraderingsnyckel:",
+    "config-localsettings-badkey": "Nyckeln du angav är inkorrekt.",
+    "config-upgrade-key-missing": "En nuvarande installerade av MediaWiki har upptäckts.\nFör att uppgradera installationen, lägg till följande rad i slutet av din <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "De befintliga <code>LocalSettings.php</code> verkar vara ofullständig.\nVariabeln $1 är inte inställd.\nÄndra <code>LocalSettings.php</code> så att denna variabel är inställd och klicka på \"{{int:Config-continue}}\".",
+    "config-session-error": "Fel vid uppstart av session: $1",
+    "config-your-language": "Ditt språk:",
+    "config-your-language-help": "Välj ett språk som ska användas under installationen.",
+    "config-wiki-language": "Wikispråk:",
+    "config-wiki-language-help": "Välj det språk som wikin främst kommer att skrivas i.",
+    "config-back": "← Tillbaka",
+    "config-continue": "Fortsätt →",
+    "config-page-language": "Språk",
+    "config-page-welcome": "Välkommen till MediaWiki!",
+    "config-page-dbconnect": "Anslut till databas",
+    "config-page-upgrade": "Uppgradera existerande installation",
+    "config-page-dbsettings": "Databasinställningar",
+    "config-page-name": "Namn",
+    "config-page-options": "Alternativ",
+    "config-page-install": "Installera",
+    "config-page-complete": "Slutfört!",
+    "config-page-restart": "Starta om installationen",
+    "config-page-readme": "Läs mig",
+    "config-page-releasenotes": "Utgivningsanteckningar",
+    "config-page-copying": "Kopiering",
+    "config-page-upgradedoc": "Uppgradering",
+    "config-page-existingwiki": "Befintlig wiki",
+    "config-help-restart": "Vill du rensa all sparad data som du har skrivit in och starta om installationen?",
+    "config-restart": "Ja, starta om",
+    "config-sidebar": "* [//www.mediawiki.org MediaWikis hemsida]\n* [//www.mediawiki.org/wiki/Help:Contents Användarguide]\n* [//www.mediawiki.org/wiki/Manual:Contents Administratörguide]\n* [//www.mediawiki.org/wiki/Manual:FAQ Frågor och svar]\n----\n* <doclink href=Readme>Läs mig</doclink>\n* <doclink href=ReleaseNotes>Utgivningsanteckningar</doclink>\n* <doclink href=Copying>Kopiering</doclink>\n* <doclink href=UpgradeDoc>Uppgradering</doclink>",
+    "config-env-good": "Miljön har kontrollerats.\nDu kan installera MediaWiki.",
+    "config-env-bad": "Miljön har kontrollerats.\nDu kan inte installera MediaWiki.",
+    "config-env-php": "PHP $1 är installerad.",
+    "config-env-php-toolow": "PHP $1 är installerad.\nMediaWiki kräver PHP $2 eller högre.",
+    "config-outdated-sqlite": "'''Varning:''' du har SQLite $1, vilket är lägre än minimikravet version $2. SQLite kommer inte att vara tillgänglig.",
+    "config-register-globals": "'''Varning: PHP:s <code>[http://php.net/register_globals register_globals]</code> tillval är aktiverat.'''\n'''Inaktivera den om du kan.'''\nMediaWiki kommer att fungera, men din server exponeras för potentiella säkerhetsluckor.",
+    "config-safe-mode": "''' Varning:''' PHP:s [http://www.php.net/features.safe-mode felsäkert läge] är aktivt.\nDet kan orsaka problem, särskilt om du använder filöverföringar och <code>math</code>-stöd.",
+    "config-xml-bad": "PHP:s XML-modul saknas.\nMediaWiki kräver funktioner i denna modul och kommer inte att fungera i den här konfigurationen.\nOm du kör Mandrake, installera php-xml-paketet.",
+    "config-memory-raised": "PHPs <code>memory_limit</code> är $1, ökar till $2.",
+    "config-memory-bad": "''' Varning:''' PHP:s <code>memory_limit</code> är $1.\nDetta är förmodligen för lågt.\nInstallationen kan misslyckas!",
+    "config-xcache": "[http://xcache.lighttpd.net/ XCache] är installerad",
+    "config-apc": "[http://www.php.net/apc APC] är installerad",
+    "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] är installerad",
+    "config-diff3-bad": "GNU diff3 hittades inte.",
+    "config-git-bad": "Git-versionen av kontrollmjukvaran hittades inte.",
+    "config-no-uri": "'''Fel:''' Kunde inte fastställa det nuvarande URI:et.\nInstallationen avbröts.",
+    "config-no-cli-uri": "'''Varning:''' inget --scriptpath är anget, med standarden: <code>$1</code> .",
+    "config-using-server": "Använder servernamn \"<nowiki>$1</nowiki>\".",
+    "config-using-uri": "Använder server-URL \"<nowiki>$1$2</nowiki>\".",
+    "config-no-cli-uploads-check": "'''Varning:''' Din standardkatalog för uppladdningar (<code>$1</code>) inte är kontrollerad för sårbarhet från godtyckliga skriptkörning under CLI-installationen.",
+    "config-db-type": "Databastyp:",
+    "config-db-host": "Databasvärd:",
+    "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-password-empty": "Ange ett lösenord för den nya databasanvändaren: $1.\nÄven om det kan vara möjligt att skapa användare utan lösenord är det inte säkert.",
+    "config-db-account-lock": "Använda samma användarnamn och lösenord under normal drift",
+    "config-db-wiki-account": "Användarkonto för normal drift",
+    "config-db-prefix": "Prefix för tabellerna i databasen:",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binär",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 bakåtkompatibel UTF-8",
+    "config-db-port": "Databasport:",
+    "config-db-schema": "Schema för MediaWiki",
+    "config-pg-test-error": "Kan inte ansluta till databas '''$1''': $2",
+    "config-sqlite-dir": "SQLite data-katalog:",
+    "config-header-mysql": "MySQL-inställningar",
+    "config-header-postgres": "PostgreSQL-inställningar",
+    "config-header-sqlite": "SQLite-inställningar",
+    "config-header-oracle": "Oracle-inställningar",
+    "config-invalid-db-type": "Ogiltig databastyp",
+    "config-missing-db-name": "Du måste ange ett värde för \"Databasnamn\"",
+    "config-missing-db-host": "Du måste ange ett värde för \"Databasvärd\"",
+    "config-missing-db-server-oracle": "Du måste ange ett värde för \"Databas TNS\"",
+    "config-invalid-db-name": "\"$1\" är ett ogiltigt databasnamn.\nAnvänd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).",
+    "config-invalid-db-prefix": "\"$1\" är ett ogiltigt databasprefix.\nAnvänd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).",
+    "config-connection-error": "$1.\n\nKontrollera värden, användarnamnet och lösenordet nedan och försök igen",
+    "config-invalid-schema": "\"$1\" är ett ogiltigt schema för MediaWiki.\nAnvänd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).",
+    "config-db-sys-create-oracle": "Installationsprogrammet stöder endast med ett SYSDBA-konto för att skapa ett nytt konto.",
+    "config-db-sys-user-exists-oracle": "Användarkontot \"$1\" finns redan. SYSDBA kan endast användas för att skapa ett nytt konto!",
+    "config-postgres-old": "PostgreSQL $1 eller senare krävs, du har $2.",
+    "config-sqlite-name-help": "Välja ett namn som identifierar din wiki.\nAnvänd inte mellanslag eller bindestreck.\nDetta kommer att användas för SQLite-data filnamnet.",
+    "config-sqlite-readonly": "Filen <code>$1</code> är inte skrivbar.",
+    "config-sqlite-cant-create-db": "Kunde inte skapa databasfilen <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "PHP saknar stöd för FTS3, nedgraderar tabeller",
+    "config-can-upgrade": "Det finns MediaWiki-tabeller i den här databasen.\nFör att uppgradera dem till MediaWiki $1, klicka på '''Fortsätt'''.",
+    "config-upgrade-done": "Uppgraderingen slutfördes.\n\nDu kan nu [$1 börja använda din wiki].\n\nOm du vill förnya din <code>LocalSettings.php</code>-fil, klicka på knappen nedan.\nDetta '''rekommenderas inte''' om du har problem med din wiki.",
+    "config-upgrade-done-no-regenerate": "Uppgraderingen slutfördes.\n\nDu kan nu [$1 börja använda din wiki].",
+    "config-regenerate": "Återskapa LocalSettings.php →",
+    "config-db-web-account": "Databaskonto för webbaccess",
+    "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.",
+    "config-ns-generic": "Projekt",
+    "config-ns-site-name": "Samma som wikinamnet: $1",
+    "config-ns-other": "Annan (specificera)",
+    "config-ns-invalid": "Den angivna namnrymden \"<nowiki>$1</nowiki>\" är ogiltig.\nAnge ett annat namnrymd för projektet.",
+    "config-ns-conflict": "Den angivna namnrymden \"<nowiki>$1</nowiki>\" står i konflikt med en standardnamnrymd för MediaWiki.\nAnge ett annat namnrymd för projektet.",
+    "config-admin-box": "Administratörskonto",
+    "config-admin-name": "Ditt namn:",
+    "config-admin-password": "Lösenord:",
+    "config-admin-password-confirm": "Lösenord igen:",
+    "config-admin-help": "Skriv in ditt föredragna användarnamn här, t.ex. \"Joe Bloggs\".\nDetta är namnet du kommer att använda för att logga in på wikin.",
+    "config-admin-name-blank": "Ange ett användarnamn för administratörskontot.",
+    "config-admin-name-invalid": "Det angivna användarnamnet \"<nowiki>$1</nowiki>\" är ogiltigt.\nAnge ett annat användarnamn.",
+    "config-admin-password-blank": "Ange ett lösenord för administratörskontot.",
+    "config-admin-password-same": "Lösenordet får inte vara samma som användarnamnet.",
+    "config-admin-password-mismatch": "De två lösenord du uppgett överensstämmer inte med varandra.",
+    "config-admin-email": "E-postadress:",
+    "config-admin-error-user": "Internt fel när du skapar en administratör med namnet \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Internt fel när du väljer ett lösenord för administratören \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+    "config-admin-error-bademail": "Du har angivit en felaktigt e-postadress.",
+    "config-subscribe": "Prenumerera på [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce e-postlistan för tillkännagivanden].",
+    "config-almost-done": "Du är nästan färdig!\nDu 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": "Öppen wiki",
+    "config-profile-no-anon": "Kontoskapande krävs",
+    "config-profile-fishbowl": "Endast auktoriserade redigerare",
+    "config-profile-private": "Privat wiki",
+    "config-license": "Upphovsrätt och licens:",
+    "config-license-none": "Ingen licenssidfot",
+    "config-license-cc-by-sa": "Creative Commons Erkännande Dela Lika",
+    "config-license-cc-by": "Creative Commons Erkännande",
+    "config-license-cc-by-nc-sa": "Creative Commons Erkännande Icke-Kommersiell Dela Lika",
+    "config-license-cc-0": "Creative Commons Zero (allmän egendom)",
+    "config-license-gfdl": "GNU Free Documentation License 1.3 eller senare",
+    "config-license-pd": "Allmän egendom",
+    "config-license-cc-choose": "Välj en anpassad Creative Commons-licens",
+    "config-email-settings": "E-postinställningar",
+    "config-enable-email": "Aktivera utgående e-post",
+    "config-email-user": "Aktivera e-post mellan användare",
+    "config-email-user-help": "Tillåta alla användare att skicka mail till varandra om de har aktiverat det i deras preferenser.",
+    "config-email-usertalk": "Aktivera underrättelse för användardiskussionssidan",
+    "config-email-watchlist": "Aktivera meddelanden för bevakningslistan",
+    "config-email-auth": "Aktivera autentisering via e-post",
+    "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-instantcommons": "Aktivera Instant Commons",
+    "config-cc-error": "Creative Commons-licens-väljaren gav inget resultat.\nAnge licensnamnet manuellt.",
+    "config-cc-again": "Välj igen...",
+    "config-cc-not-chosen": "Välj vilken Creative Commons-licens du vill ha och klicka på \"gå vidare\".",
+    "config-advanced-settings": "Avancerad konfiguration",
+    "config-extensions": "Tillägg",
+    "config-install-alreadydone": "''' Varning:''' Du verkar redan ha installerat MediaWiki och försöker installera det igen.\nVänligen fortsätt till nästa sida.",
+    "config-install-begin": "Genom att trycka på \"{{int:config-continue}}\", påbörjar du installationen av MediaWiki.\nOm du fortfarande vill göra ändringar trycker du på \"{{int:config-back}}\".",
+    "config-install-step-done": "klar",
+    "config-install-step-failed": "misslyckades",
+    "config-install-database": "Konfigurerar databas",
+    "config-install-schema": "Skapar schema",
+    "config-pg-no-plpgsql": "Du måste installera språket PL/pgSQL i databasen $1",
+    "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-grant-failed": "Beviljandet av behörighet till användaren \"$1\" misslyckades: $2",
+    "config-install-user-missing": "Den angivna användaren \"$1\" existerar inte.",
+    "config-install-user-missing-create": "Den angivna användaren \"$1\" existerar inte.\nVänligen klicka på kryssrutan \"skapa konto\" nedan om du vill skapa den.",
+    "config-install-tables": "Skapar tabeller",
+    "config-install-tables-exist": "''' Varning:''' MediaWiki-tabeller verkar redan finnas.\nHoppar över skapandet.",
+    "config-install-tables-failed": "''' Fel:''' Skapandet av tabell misslyckades med följande fel: $1",
+    "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-subscribe-fail": "Det gick inte att prenumerera på mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "cURL är inte installerad och allow_url_fopen är inte tillgänglig.",
+    "config-install-mainpage": "Skapa huvudsida med standardinnehåll",
+    "config-install-extension-tables": "Skapar tabeller för aktiverade tillägg",
+    "config-install-mainpage-failed": "Kunde inte infoga huvudsidan: $1",
+    "config-install-done": "'''Grattis!'''\nDu har installerat MediaWiki.\n\nInstallationsprogrammet har genererat filen <code>LocalSettings.php</code>.\nDet innehåller alla dina konfigurationer.\n\nDu kommer att behöva ladda ned den och placera den i botten av din wiki-installation (samma mapp som index.php). Nedladdningen borde ha startats automatiskt.\n\nOm ingen nedladdning erbjöds, eller om du har avbrutit det kan du starta om nedladdningen genom att klicka på länken nedan:\n\n$3\n\n'''OBS''': Om du inte gör detta nu, kommer denna genererade konfigurationsfil inte vara tillgänglig för dig senare om du avslutar installationen utan att ladda ned den.\n\nNär det är klart, kan du '''[$2 gå in på din wiki]'''.",
+    "config-download-localsettings": "Ladda ned <code>LocalSettings.php</code>",
+    "config-help": "hjälp",
+    "config-nofile": "Filen \"$1\" kunde inte hittas. Har den tagits bort?",
+    "mainpagetext": "'''MediaWiki har installerats utan problem.'''",
+    "mainpagedocfooter": "Information om hur wiki-programvaran används finns i [//meta.wikimedia.org/wiki/Help:Contents användarguiden].\n\n== Att komma igång ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista över konfigurationsinställningar]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mail list]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Lokalisera MediaWiki för ditt språk]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/sw.json b/includes/installer/i18n/sw.json
new file mode 100644 (file)
index 0000000..44dfedf
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Lloffiwr"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki imefanikiwa kuingizwa.'''",
+    "mainpagedocfooter": "Shauriana na [//meta.wikimedia.org/wiki/Help:Contents Mwongozo wa Mtumiaji] kwa habari juu ya utumiaji wa bidhaa pepe ya wiki.\n\n== Msaada wa kianzio ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Orodha ya mipangilio ya msingi]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ ya MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Orodha ya utoaji wa habari za MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/szl.json b/includes/installer/i18n/szl.json
new file mode 100644 (file)
index 0000000..1ecd8c5
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Djpalar"
+        ]
+    },
+    "mainpagetext": "'''Sztalowańy MediaWiki śe udoło.'''",
+    "mainpagedocfooter": "Uobezdrzij [//meta.wikimedia.org/wiki/Help:Contents przewodńik sprowjacza], kaj sům informacyje uo dźołańu uoprogramowańo MediaWiki.\n\n== Na sztart ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista sztalowań konfiguracyje]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Komuńikaty uo nowych wersyjach MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ta.json b/includes/installer/i18n/ta.json
new file mode 100644 (file)
index 0000000..6904e87
--- /dev/null
@@ -0,0 +1,90 @@
+{
+    "@metadata": {
+        "authors": [
+            "Karthi.dr",
+            "TRYPPN",
+            "மதனாஹரன்"
+        ]
+    },
+    "config-title": "மீடியாவிக்கி $1 நிறுவுதல்",
+    "config-information": "தகவல்",
+    "config-localsettings-key": "தரமுயர்த்தல் குறியீடு:",
+    "config-localsettings-badkey": "நீங்கள் தந்த குறியீடு தவறானது.",
+    "config-your-language": "தங்களது மொழி:",
+    "config-your-language-help": "நிறுவல் செயன்முறையின்போது பயன்படுத்துவதற்கு ஒரு மொழியைத் தெரிவு செய்யவும்.",
+    "config-wiki-language": "விக்கி மொழி:",
+    "config-back": "← முந்தைய",
+    "config-continue": "தொடரவும் →",
+    "config-page-language": "மொழி",
+    "config-page-welcome": "மீடியாவிக்கிக்கு வருக !",
+    "config-page-dbconnect": "தரவுத் தளத்துடன் தொடர்பு கொள்ளவும்",
+    "config-page-dbsettings": "தரவுத் தள அமைப்புகள்",
+    "config-page-name": "பெயர்",
+    "config-page-options": "விருப்பத்தேர்வுகள்",
+    "config-page-install": "நிறுவு",
+    "config-page-complete": "நிறைவு!",
+    "config-page-restart": "நிறுவலை மீண்டும் தொடங்கவும்",
+    "config-page-readme": "இதைப் படி",
+    "config-page-releasenotes": "வெளியீட்டு குறிப்புகள்",
+    "config-page-copying": "நகலெடுக்கப்படுகிறது",
+    "config-page-upgradedoc": "தரமுயர்த்தப்படுகிறது",
+    "config-page-existingwiki": "இருக்கின்ற விக்கி",
+    "config-restart": "ஆம், மறுமுறை துவங்கு",
+    "config-sidebar": "* [//www.mediawiki.org மீடியாவிக்கி முகப்பு]\n* [//www.mediawiki.org/wiki/Help:Contents பயனரின் கையேடு]\n* [//www.mediawiki.org/wiki/Manual:Contents மேலாளரின் கையேடு]\n* [//www.mediawiki.org/wiki/Manual:FAQ அகேகே]\n----\n* <doclink href=Readme>என்னை வாசிக்கவும்</doclink>\n* <doclink href=ReleaseNotes>வெளியீட்டுக் குறிப்புகள்</doclink>\n* <doclink href=Copying>படியெடுத்தல்</doclink>\n* <doclink href=UpgradeDoc>நிகழ்நிலைப்படுத்தல்</doclink>",
+    "config-db-type": "தரவுத்தள வகை:",
+    "config-db-wiki-settings": "இந்த விக்கியைக் கண்டுபிடி",
+    "config-db-name": "தரவுதளப் பெயர்:",
+    "config-db-install-account": "நிறுவலுக்கான பயனர் கணக்கு",
+    "config-db-username": "தரவுத்தள பயனர்பெயர்:",
+    "config-db-password": "தரவுத்தள கடவுச்சொல்:",
+    "config-db-prefix": "தரவுத் தள வரிசைப் பட்டியல் முன்னொட்டு:",
+    "config-db-charset": "தரவுத் தள வரியுருத் தொகுதி",
+    "config-invalid-db-type": "செல்லாத தரவுத்தள வகை",
+    "config-upgrade-done-no-regenerate": "தரமுயர்த்தல் முழுமையடைந்தது.\nநீங்கள் தற்போது [$1 உங்கள் விக்கியைப் பயன்படுத்தத் துவங்கலாம்].",
+    "config-db-web-account": "வலை அணுகலுக்கான தரவுத் தளக் கணக்கு",
+    "config-mysql-engine": "சேமிப்பு இயந்திரம்:",
+    "config-mysql-charset": "தரவுத் தள வரியுருத் தொகுதி:",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "விக்கியின் பெயர்:",
+    "config-site-name-blank": "ஒரு தளத்தின் பெயரை உள்ளிடுக.",
+    "config-ns-generic": "திட்டம்",
+    "config-ns-other": "ஏனையவை (குறிப்பிடவும்)",
+    "config-admin-box": "நிருவாகி கணக்கு",
+    "config-admin-name": "தங்களது பெயர்:",
+    "config-admin-password": "கடவுச்சொல்:",
+    "config-admin-password-confirm": "கடவுச்சொல் மறுமுறையும்:",
+    "config-admin-name-blank": "நிருவாக அணுக்கம் உள்ள பயனர் பெயரை இடுக.",
+    "config-admin-password-blank": "நிருவாகி கணக்குக்கு கடவுச்சொல் ஒன்றை உள்ளிடவும்.",
+    "config-admin-password-same": "பயனர் பெயரையே கடவுச்சொல்லாக வைத்துக் கொள்ள முடியாது.",
+    "config-admin-password-mismatch": "நீங்கள் பதிந்த கடவுச்சொற்கள் ஒன்றுக்கொன்று பொருந்தவில்லை.",
+    "config-admin-email": "மின்னஞ்சல் முகவரி:",
+    "config-admin-error-bademail": "நீங்கள் செல்லாத ஒரு மின்னஞ்சல் முகவரியைத் தந்துள்ளீர்கள்.",
+    "config-optional-continue": "என்னை இன்னும் அதிகமாக வினவு.",
+    "config-optional-skip": "நான் ஏற்கனவே சோர்வடைந்துள்ளேன், விக்கியை மட்டும் உருவாக்கு.",
+    "config-profile": "பயனர் உரிமைகள் சுயவிவரம்:",
+    "config-profile-wiki": "பாரம்பரிய விக்கி",
+    "config-profile-no-anon": "கணக்கு உருவாக்குதல் அவசியம்",
+    "config-profile-private": "தனியார் விக்கி",
+    "config-license": "பதிப்புரிமை மற்றும் உரிமம்:",
+    "config-license-pd": "பொதுக்களம்",
+    "config-email-settings": "மின்னஞ்சல் அமைப்புகள்",
+    "config-email-user": "பயனர்-பயனர் மின்னஞ்சலைச் செயற்படுத்தவும்",
+    "config-email-usertalk": "பயனர் பேச்சுப் பக்க அறிவிப்பைச் செயற்படுத்தவும்",
+    "config-email-watchlist": "கவனிப்புப் பட்டியல் அறிவிப்பைச் செயற்படுத்தவும்",
+    "config-upload-settings": "படிமம் மற்றும் கோப்பு பதிவேற்றங்கள்",
+    "config-upload-enable": "கோப்புப் பதிவேற்றங்களைச் செயற்படுத்தவும்",
+    "config-upload-deleted": "அழித்த கோப்புகளுக்கான அடைவு:",
+    "config-logo": "அடையாளச் சின்ன உரலி:",
+    "config-extensions": "நீட்சிகள்",
+    "config-install-step-done": "முடிந்தது",
+    "config-install-step-failed": "தோல்வியுற்றது",
+    "config-install-user": "தரவுத் தளப் பயனரை உருவாக்குகிறது",
+    "config-install-user-alreadyexists": "பயனர் \"$1\" ஏற்கனவே உள்ளது",
+    "config-install-tables": "வரிசைப் பட்டியல்களை உருவாக்குகிறது",
+    "config-install-mainpage": "இயல்புநிலை உள்ளடக்கத்துடன் முதற்பக்கத்தை உருவாக்குகிறது",
+    "config-install-extension-tables": "செயற்படுத்தப்பட்ட நீட்சிகளுக்கு வரிசைப் பட்டியல்களை உருவாக்குகிறது",
+    "config-download-localsettings": "<code>LocalSettings.php</code>ஐத் தரவிறக்கவும்",
+    "config-help": "உதவி",
+    "mainpagetext": "'''விக்கி மென்பொருள் வெற்றிகரமாக உள்ளிடப்பட்டது.'''",
+    "mainpagedocfooter": "விக்கி மென்பொருளைப் பயன்படுத்துவது தொடர்பாக [//meta.wikimedia.org/wiki/Help:Contents பயனர் வழிகாட்டியைப்] பார்க்க.\n\n== தொடக்கப்படிகள் ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings அமைப்புக்களை மாற்றம் செய்தல்]\n* [//www.mediawiki.org/wiki/Manual:FAQ மிடியாவிக்கி பொதுவான கேள்விகள்]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce மீடியாவிக்கி வெளியீடு மின்னஞ்சல் பட்டியல்]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/tcy.json b/includes/installer/i18n/tcy.json
new file mode 100644 (file)
index 0000000..cabe4e8
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''ಮೀಡಿಯವಿಕಿ ಯಶಸ್ವಿಯಾದ್ ಇನ್’ಸ್ಟಾಲ್ ಆಂಡ್.'''",
+    "mainpagedocfooter": "ವಿಕಿ ತಂತ್ರಾಂಶನ್ ಉಪಗೋಗ ಮನ್ಪುನ ಬಗ್ಗೆ ಮಾಹಿತಿಗ್ [//meta.wikimedia.org/wiki/Help:Contents ಸದಸ್ಯೆರ್ನ ನಿರ್ದೇಶನ ಪುಟ] ತೂಲೆ.\n\n== ಎಂಚ ಶುರು ಮಲ್ಪುನಿ ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ ಮೀಡಿಯವಿಕಿ FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/te.json b/includes/installer/i18n/te.json
new file mode 100644 (file)
index 0000000..c916986
--- /dev/null
@@ -0,0 +1,57 @@
+{
+    "@metadata": {
+        "authors": [
+            "Veeven"
+        ]
+    },
+    "config-desc": "మీడియావికీ కొరకై స్థాపకి",
+    "config-title": "మీడియావికీ $1స్థాపన",
+    "config-information": "సమాచారం",
+    "config-your-language": "మీ భాష:",
+    "config-wiki-language": "వికీ భాష:",
+    "config-back": "← వెనక్కి",
+    "config-continue": "కొనసాగించు →",
+    "config-page-language": "భాష",
+    "config-page-welcome": "మీడియావికీకి స్వాగతం!",
+    "config-page-dbsettings": "డాటాబేసు అమరికలు",
+    "config-page-name": "పేరు",
+    "config-page-options": "ఎంపికలు",
+    "config-page-install": "స్థాపించు",
+    "config-page-complete": "పూర్తయ్యింది!",
+    "config-page-readme": "నన్ను చదవండి",
+    "config-page-releasenotes": "విడుదల విశేషాలు",
+    "config-db-type": "డాటాబేసు రకం:",
+    "config-db-name": "డాటాబేసు పేరు:",
+    "config-db-install-account": "స్థాపనకి వాడుకరి ఖాతా",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-header-mysql": "MySQL అమరికలు",
+    "config-header-postgres": "PostgreSQL అమరికలు",
+    "config-header-sqlite": "SQLite అమరికలు",
+    "config-header-oracle": "Oracle అమరికలు",
+    "config-invalid-db-type": "తప్పుడు డాటాబేసు రకం",
+    "config-connection-error": "$1.\n\nక్రింది హోస్టు, వాడుకరిపేరు మరియు సంకేతపదాలను ఒకసారి సరిచూసుకుని అప్పుడు ప్రయత్నించండి.",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-utf8": "UTF-8",
+    "config-site-name": "వికీ యొక్క పేరు:",
+    "config-ns-other": "ఇతర (ఇవ్వండి)",
+    "config-ns-other-default": "నావికీ",
+    "config-admin-name": "మీ పేరు:",
+    "config-admin-password": "సంకేతపదం:",
+    "config-admin-password-confirm": "సంకేతపదం మళ్ళీ:",
+    "config-admin-email": "ఈ-మెయిలు చిరునామా:",
+    "config-optional-continue": "నన్ను మరిన్ని ప్రశ్నలు అడుగు.",
+    "config-profile-wiki": "సంప్రదాయ వికీ",
+    "config-profile-no-anon": "ఖాతా సృష్టింపు తప్పనిసరి",
+    "config-profile-private": "అంతరంగిక వికీ",
+    "config-license": "కాపీహక్కులు మరియు లైసెన్సు:",
+    "config-license-pd": "సార్వజనీనం",
+    "config-email-settings": "ఈ-మెయిల్ అమరికలు",
+    "config-upload-deleted": "తొలగించిన దస్త్రాల కొరకు సంచయం:",
+    "config-advanced-settings": "ఉన్నత స్వరూపణం",
+    "config-install-step-done": "పూర్తయింది",
+    "config-install-step-failed": "విఫలమైంది",
+    "config-help": "సహాయం",
+    "mainpagetext": "'''మీడియా వికీని విజయవంతంగా ప్రతిష్టించాం.'''",
+    "mainpagedocfooter": "వికీ సాఫ్టువేరును వాడటనికి కావలిసిన సమాచారం కోసం [//meta.wikimedia.org/wiki/Help:Contents వాడుకరుల గైడు]ను సందర్శించండి.\n\n== మొదలు పెట్టండి ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings మీడియావికీ పనితీరు, అమరిక మార్చుకునేందుకు వీలుకల్పించే చిహ్నాల జాబితా]\n* [//www.mediawiki.org/wiki/Manual:FAQ మీడియావికీపై తరుచుగా అడిగే ప్రశ్నలు]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce మీడియావికీ సాఫ్టువేరు కొత్త వెర్షను విడుదలల గురించి తెలిపే మెయిలింగు లిస్టు]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/tet.json b/includes/installer/i18n/tet.json
new file mode 100644 (file)
index 0000000..b2622bd
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "MF-Warburg"
+        ]
+    },
+    "config-page-language": "Lian",
+    "config-page-name": "Naran"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/tg-cyrl.json b/includes/installer/i18n/tg-cyrl.json
new file mode 100644 (file)
index 0000000..d60885b
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Нармафзори МедиаВики бо муваффақият насб шуд.'''",
+    "mainpagedocfooter": "Аз [//meta.wikimedia.org/wiki/Help:Contents Роҳнамои Корбарон] барои истифодаи нармафзори вики кӯмак бигиред.\n\n== Оғоз ба кор ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Феҳристи танзимоти пайгирбандӣ]\n* [//www.mediawiki.org/wiki/Manual:FAQ Пурсишҳои МедиаВики]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Феҳристи ройномаҳои нусхаҳои МедиаВики]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/tg-latn.json b/includes/installer/i18n/tg-latn.json
new file mode 100644 (file)
index 0000000..ca94e92
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Liangent"
+        ]
+    },
+    "mainpagetext": "'''Narmafzori MediaViki bo muvaffaqijat nasb şud.'''",
+    "mainpagedocfooter": "Az [//meta.wikimedia.org/wiki/Help:Contents Rohnamoi Korbaron] baroi istifodai narmafzori viki kūmak bigired.\n\n== Oƣoz ba kor ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Fehristi tanzimoti pajgirbandī]\n* [//www.mediawiki.org/wiki/Manual:FAQ Pursişhoi MediaViki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Fehristi rojnomahoi nusxahoi MediaViki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/th.json b/includes/installer/i18n/th.json
new file mode 100644 (file)
index 0000000..5b4dd80
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Korrawit"
+        ]
+    },
+    "mainpagetext": "'''ติดตั้งซอฟต์แวร์มีเดียวิกิเรียบร้อย'''",
+    "mainpagedocfooter": "ศึกษา[//meta.wikimedia.org/wiki/Help:Contents คู่มือการใช้งาน] สำหรับเริ่มต้นใช้งานซอฟต์แวร์วิกิ\n\n== เริ่มต้น ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings รายการการปรับแต่งระบบ] (ภาษาอังกฤษ)\n* [//www.mediawiki.org/wiki/Manual:FAQ คำถามที่ถามบ่อยในมีเดียวิกิ] (ภาษาอังกฤษ)\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce เมลลิงลิสต์ของมีเดียวิกิ]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/tk.json b/includes/installer/i18n/tk.json
new file mode 100644 (file)
index 0000000..4b0ddfc
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Hanberke"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki şowlulyk bilen guruldy.'''",
+    "mainpagedocfooter": "Wiki programmasynyň ulanylyşy hakynda maglumat almak üçin [//meta.wikimedia.org/wiki/Help:Contents ulanyjy gollanmasyna] serediň.\n\n== Öwrenjeler ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfigurasiýa sazlamalary]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki SSS]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-poçta sanawy]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/tl.json b/includes/installer/i18n/tl.json
new file mode 100644 (file)
index 0000000..93b0d8c
--- /dev/null
@@ -0,0 +1,307 @@
+{
+    "@metadata": {
+        "authors": [
+            "AnakngAraw",
+            "Sky Harbor",
+            "아라"
+        ]
+    },
+    "config-desc": "Ang tagapagluklok para sa MediaWiki",
+    "config-title": "Instalasyong $1 ng MediaWiki",
+    "config-information": "Kabatiran",
+    "config-localsettings-upgrade": "Napansin ang isang talaksang <code>LocalSettings.php</code>.\nUpang maitaas ang uri ng pagluluklok na ito, paki ipasok ang halaga ng <code>$wgUpgradeKey</code> sa loob ng kahong nasa ibaba.\nMatatagpuan mo ito sa loob ng <code>LocalSettings.php</code>.",
+    "config-localsettings-cli-upgrade": "Napansin ang isang talaksan ng <code>LocalSettings.php</code>.\nUpang isapanahon ang pagtatalagang ito, mangyaring patakbuhin sa halip ang <code>update.php</code>",
+    "config-localsettings-key": "Susi ng pagsasapanahon:",
+    "config-localsettings-badkey": "Hindi tama ang susing ibinigay mo.",
+    "config-upgrade-key-missing": "Napansin ang isang umiiral na pagtatalaga ng MediaWiki.\nUpang isapanahon ang katalagahang ito, mangyaring ilagay ang sumusunod na guhit sa ilalim ng iyong <code>LocalSettings.php</code>:\n\n$1",
+    "config-localsettings-incomplete": "Lumilitaw na hindi pa buo ang umiiral na <code>LocalSettings.php</code>.\nAng pabagu-bagong $1 ay hindi nakatakda.\nMangyaring baguhin ang  <code>LocalSettings.php</code> upang ang maitakda ang pagpapabagu-bagong ito, at pindutin ang \"{{int:Config-continue}}\".",
+    "config-localsettings-connection-error": "Isang kamalian ang nakatagpo noong kumakabit sa kalipunan ng dato na ginagamit ang tinukoy na mga katakdaan sa loob ng <code>LocalSettings.php</code> o\n<code>AdminSettings.php</code>. Paki kumpunihin ang mga katakdaang ito at subukang muli.\n\n$1",
+    "config-session-error": "Kamalian sa pagsisimula ng sesyon: $1",
+    "config-session-expired": "Tila nagwakas na ang inilaan sa iyong panahon ng dato.\nAng inilaang mga panahon ay iniayos para sa isang panahon ng buhay na $1.\nMapapataas mo ito sa pamamagitan ng pagtatakda ng <code>session.gc_maxlifetime</code> sa loob ng php.ini.\nMuling simulan ang proseso ng pagluluklok.",
+    "config-no-session": "Nawala ang iyong datos ng sesyon!\nSuriin ang iyong php.ini at tiyakin na ang <code>session.save_path</code> ay nakatakda sa angkop na direktoryo.",
+    "config-your-language": "Ang wika mo:",
+    "config-your-language-help": "Pumili ng isang wikang gagamitin habang isinasagawa ang pagtatalaga.",
+    "config-wiki-language": "Wika ng Wiki:",
+    "config-wiki-language-help": "Piliin ang wika kung saan mangingibabaw na isusulat ang wiki.",
+    "config-back": "← Bumalik",
+    "config-continue": "Magpatuloy →",
+    "config-page-language": "Wika",
+    "config-page-welcome": "Maligayang pagdating sa MediaWiki!",
+    "config-page-dbconnect": "Umugnay sa kalipunan ng datos",
+    "config-page-upgrade": "Itaas ng uri ang umiiral na pagkakatalaga",
+    "config-page-dbsettings": "Mga katakdaan ng kalipunan ng datos",
+    "config-page-name": "Pangalan",
+    "config-page-options": "Mga mapipili",
+    "config-page-install": "Italaga",
+    "config-page-complete": "Buo na!",
+    "config-page-restart": "Simulan muli ang pag-iinstala",
+    "config-page-readme": "Basahin ako",
+    "config-page-releasenotes": "Pakawalan ang mga tala",
+    "config-page-copying": "Kinokopya",
+    "config-page-upgradedoc": "Itinataas ang uri",
+    "config-page-existingwiki": "Umiiral na wiki",
+    "config-help-restart": "Nais mo bang hawiin ang lahat ng nasagip na datong ipinasok mo at muling simulan ang proseso ng pagluluklok?",
+    "config-restart": "Oo, muling simulan ito",
+    "config-welcome": "=== Pagsusuring pangkapaligiran ===\nIsinasagawa ang payak na mga pagsusuri upang makita kung ang kapaligirang ito ay angkop para sa pagluluklok ng MediaWiki.\nDapat mong ibigay ang mga kinalabasan ng mga pagsusuring ito kung kailangan mo ng tulong habang nagluluklok.",
+    "config-copyright": "=== Karapatang-ari at Tadhana ===\n\n$1\n\nAng programang ito ay malayang software; maaari mo itong ipamahagi at/o baguhin sa ilalim ng mga tadhana ng Pangkalahatang Pampublikong Lisensiyang GNU ayon sa pagkakalathala ng Free Software Foundation; na maaaring bersyong 2 ng Lisensiya, o (kung nais mo) anumang susunod na bersyon.\n\nIpinamamahagi ang programang ito na umaasang magiging gamitin, subaliut '''walang anumang katiyakan'''; na walang pahiwatig ng '''pagiging mabenta''' o '''kaangkupan para sa isang tiyak na layunin'''.\nTingnan ang Pangkalahatang Pampublikong Lisensiyang GNU para sa mas maraming detalye.\n\nDapat nakatanggap ka ng <doclink href=Copying>isang sipi ng Pangkalahatang Pampublikong Lisensiyang GNU</doclink> kasama ng programang ito; kung hindi, sumulat sa Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [http://www.gnu.org/licenses//gpl.html basahin ito sa Internet].",
+    "config-sidebar": "* [//www.mediawiki.org Tahanan ng MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents Gabay ng Tagagamit]\n* [//www.mediawiki.org/wiki/Manual:Contents Gabay ng Tagapangasiwa]\n* [//www.mediawiki.org/wiki/Manual:FAQ Mga Malimit Itanong]\n----\n* <doclink href=Readme>Basahin ako</doclink>\n* <doclink href=ReleaseNotes>Mga tala ng paglalabas</doclink>\n* <doclink href=Copying>Pagkopya</doclink>\n* <doclink href=UpgradeDoc>Pagsasapanahon</doclink>",
+    "config-env-good": "Nasuri na ang kapaligiran.\nMailuluklok mo ang MediaWiki.",
+    "config-env-bad": "Nasuri na ang kapaligiran.\nHindi mo mailuklok ang MediaWiki.",
+    "config-env-php": "Naitalaga ang PHP na $1.",
+    "config-env-php-toolow": "Naitalaga ang PHP $1.\nSubalit, nangangailangan ang MediaWiki ng PHP $2 o mas mataas pa.",
+    "config-unicode-using-utf8": "Ginagamit ang utf8_normalize.so ni Brion Vibber para sa pagpapanormal ng Unikodigo.",
+    "config-unicode-using-intl": "Ginagamit ang [http://pecl.php.net/intl intl dugtong na PECL] para sa pagsasanormal ng Unikodigo.",
+    "config-unicode-pure-php-warning": "'''Babala''': Ang [http://pecl.php.net/intl dugtong ng internasyunal na PECL] ay hindi makukuha upang makapanghawak ng pagpapanormal ng Unikodigo, na babagsak na pabalik sa mabagal na pagsasakatuparan ng dalisay na PHP.\nKapag nagpapatakbo ka ng isang pook na mataas ang trapiko, dapat kang bumasa ng kaunti hinggil sa [//www.mediawiki.org/wiki/Unicode_normalization_considerations pagpapanormal ng Unikodigo].",
+    "config-unicode-update-warning": "'''Babala''': Ang nakaluklok na bersiyon ng pambalot ng pagpapanormal ng Unikodigo ay gumagamit ng isang mas matandang bersiyon ng aklatan ng [http://site.icu-project.org/ proyekto ng ICU].\nDapat kang [//www.mediawiki.org/wiki/Unicode_normalization_considerations magtaas ng uri] kung may pag-aalala ka hinggil sa paggamit ng Unikodigo.",
+    "config-no-db": "Hindi matagpuan ang isang angkop na tagapagmaneho ng kalipunan ng datos! Kailangan mong magluklok ng isang tagapagmaneho ng kalipunan ng dato para sa PHP.\nTinatangkilik ang sumusunod na mga uri ng kalipunan ng dato: $1.\n\nKung ikaw ay nasa isang pinagsasaluhang pagpapasinaya, hilingin sa iyong tagapagbigay ng pagpapasinaya na iluklok ang isang angkop na tagapagmaneho ng kalipunan ng dato.\nKung ikaw mismo ang nangalap ng PHP, muling isaayos ito na pinagagana ang isang kliyente ng kalipunan ng dato, halimbawa na ang paggamit ng <code>./configure --with-mysql</code>.\nKung iniluklok mo ang PHP mula sa isang pakete ng Debian o Ubuntu, kung gayon kailangan mo ring magluklok ng modyul na php5-mysql.",
+    "config-outdated-sqlite": "'''Babala''': mayroong kang $1 ng SQLite, na mas mababa kaysa sa pinaka mababang kailangang bersiyon na $2. Magiging hindi makukuha ang SQLite.",
+    "config-no-fts3": "'''Warning''': Ang SQLite ay hindi itinala at tinipon na wala ang [//sqlite.org/fts3.html modulong FTS3], ang mga tampok na panghanap ay magiging hindi makukuha sa ibabaw ng panlikod na dulong ito.",
+    "config-register-globals": "'''Babala: Ang mapipili na <code>[http://php.net/register_globals register_globals]</code> ng PHP ay pinagagana.'''\n'''Huwag paganahin kung kaya mo.'''\nAandar ang MediaWiki, subalit ang tagapaghain mo ay nakalantad sa maaaring maganap na mga kahinaang pangkatiwasayan.",
+    "config-magic-quotes-runtime": "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!'''\nAng piniling ito ay hindi mahuhulaan na pipinsala sa lahok na dato.\nHindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na gumagana ang pinili na ito.",
+    "config-magic-quotes-sybase": "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''\nHindi mahuhulaan na sinisira ng napiling ito ang lahok na dato.\nHindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
+    "config-mbstring": "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''\nAng napiling ito ay nagdurulot ng mga kamalian at maaaring sumira nang hindi nahuhulaan ang dato.\nHindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
+    "config-ze1": "'''Malubha: Masigla ang [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]!'''\nAng napiling ito ay nagsasanhi ng karima-rimarim na mga sira sa MediaWiki.\nHindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
+    "config-safe-mode": "'''Babala:''' Masigla ang [http://www.php.net/features.safe-mode safe mode] ng PHP.\nMaaari itong magdulot ng mga suliranin, partikular na kung gumagamit ng mga ikinargang paitaas na talaksan at ng suporta sa <code>math</code>.",
+    "config-xml-bad": "Nawawala ang modulong XML ng PHP.\nNangangailangan ang MediaWiki ng mga tungkulin sa loob ng modulong ito at hindi aandar sa loob ng ganitong pagkakaayos.\nKung pinapatakbo mo ang Mandrake, iluklok ang pakete ng php-xml.",
+    "config-pcre": "Tila nawawala ang modyul na pangsuporta ng PCRE.\nNangangailangan ang MediaWiki ng nakaukol sa Perl na mga tungkulin ng karaniwang pagsasaad upang gumana.",
+    "config-pcre-no-utf8": "'''Malubha''': Tila tinipon ang modyul na PCRE ng PHP na wala ang suporta ng PCRE_UTF8.\nNangangailangan ang MediaWiki ng suporta ng UTF-8 upang maging tama ang pag-andar.",
+    "config-memory-raised": "Ang <code>hangganan_ng_alaala</code> ng PHP ay $1, itinaas sa $2.",
+    "config-memory-bad": "'''Babala:''' Ang <code>hangganan_ng_alaala</code> ng PHP ay $1.\nIto ay maaaring napakababa.\nMaaaring mabigo ang pagluluklok!",
+    "config-ctype": "'''Maluba''': Dapat na tipunin ang PHP na mayroong suporta para sa [http://www.php.net/manual/en/ctype.installation.php dugtong Ctype].",
+    "config-xcache": "Ininstala na ang [http://xcache.lighttpd.net/ XCache]",
+    "config-apc": "Ininstala na ang [http://www.php.net/apc APC]",
+    "config-wincache": "Ininstala na ang [http://www.iis.net/download/WinCacheForPhp WinCache]",
+    "config-no-cache": "'''Babala:''' Hindi mahanap ang [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].\nHindi pinapagana ang pagbabaon ng mga bagay.",
+    "config-mod-security": "'''Babala''': Ang tagapaghain mo ng sangkasaputan ay pinagana na mayroong [http://modsecurity.org/ mod_security]. Kung mali ang kaayusan, makapagdurulot ito ng mga suliranin para sa MediaWiki o ibang mga sopwer na nagpapahintulot sa mga tagagamit na magpaskil ng hindi makatwirang nilalaman.\nSumangguni sa [http://modsecurity.org/documentation/ mod_security kasulatan] o makipag-ugnayan sa suporta ng iyong tagapagpasinaya kapag nakatagpo ng alin mang mga kamalian.",
+    "config-diff3-bad": "Hindi natagpuan ang GNU diff3.",
+    "config-imagemagick": "Natagpuan ang ImageMagick: <code>$1</code>.\nPapaganahin ang pagkakagyat ng larawan kapag pinagana mo ang mga pagkakargang paitaas.",
+    "config-gd": "Natagpuan ang pinasadyang nakapaloob na grapiks ng GD.\nPapaganahin ang pagkakagyat ng larawan kapag pinagana mo ang mga pagkakargang paitaas.",
+    "config-no-scaling": "Hindi matagpuan ang aklatang GD o ImageMagick.\nHindi papaganahin ang pagkakagyat ng larawan.",
+    "config-no-uri": "'''Kamalian:''' Hindi matukoy ang kasalukuyang URI.\nPinigilan ang pag-iinstala.",
+    "config-no-cli-uri": "'''Babala''': Walang tinukoy na --landas ng panitik, ginagamit ang likas na katakdaan: <code>$1</code>.",
+    "config-using-server": "Ginagamit ang pangalan ng tagapaghain na \"<nowiki>$1</nowiki>\".",
+    "config-using-uri": "Ginagamit ang URL ng tagapaghain na \"<nowiki>$1$2</nowiki>\".",
+    "config-uploads-not-safe": "'''Babala:''' Ang iyong likas na nakatakdang direktoryo para sa paitaas na mga pagkakarga na <code>$1</code> ay may kahinaan laban sa pagsasagawa ng mga panitiki na hindi makatwiran. Bagaman sinisiyasat ng MediaWiki ang lahat ng paitaas na naikargang mga talaksan para sa mga panganib na pangkatiwasayan, mataas na iminumungkahi na [//www.mediawiki.org/wiki/Manual:Security#Upload_security isara ang kahinaang ito na pangkatiwasayan] bago paganahin ang paitaas na mga pagkakarga.",
+    "config-no-cli-uploads-check": "'''Babala:''' Ang iyong likas na nakatakdang direktoryo para sa paitaas na mga pagkakarga (<code>$1</code>) ay hindi nasuri para sa kahinaan laban sa pagsasagawa ng panitik na hindi makatwiran habang iniluluklok ang Ugnayang Mukha ng Guhit ng Kaataasan o Command-Line Interface (CLI).",
+    "config-brokenlibxml": "Ang sistema mo ay mayroong isang pagsasama ng mga bersiyon ng PHP at libxml2 na maaaring masurot at maaaring makapagsanhi ng pagkasira ng datong nakakubli sa loob ng MediaWiki at iba pang mga aplikasyon ng sangkasaputan.\nMagtaas ng uri upang maging PHP 5.2.9 o mas lalong huli at libxml2 2.7.3 o mas lalong huli ([//bugs.php.net/bug.php?id=45996 isinalansan ang surot o ''bug'' na mayroong PHP]). Binigo ang pagluluklok.",
+    "config-using531": "Hindi maaaring gamitin ang MediaWiki na kapiling ang PHP na $1 dahil sa isang surot na kinasasangkutan ng mga parametrong pangsangguni sa <code>__call()</code>. Magtaas ng uri upang maging PHP 5.3.2 o mas mataas, o magbaba ng uri upang maging PHP 5.3.0 upang malutas ito. Binigo ang pagluluklok.",
+    "config-suhosin-max-value-length": "Nakaluklok ang Suhosin at hinahanggahan ang haba ng parametro ng GET sa $1 mga byte. Ang sangkap na ResourceLoader ng MediaWiki ay gagana sa paligid ng hangganang ito, subalit pasasamain nito ang pagganap. Kung talagang maaari, dapat mong itakda ang <code>suhosin.get.max_value_length</code> upang maging 1024 o mas mataas sa loob ng <code>php.ini</code>, at itakda ang <code>$wgResourceLoaderMaxQueryLength</code> sa katulad na halaga sa loob ng LocalSettings.php.",
+    "config-db-type": "Uri ng kalipunan ng datos:",
+    "config-db-host": "Tagapagpasinaya ng kalipunan ng datos:",
+    "config-db-host-help": "Kung ang iyong tagapaghain ng kalipunan ng dato ay nasa ibabaw ng isang ibang tagapaghain, ipasok ang pangalan ng tagapagpasinaya o tirahan ng IP dito.\n\nKung gumagamit ka ng pinagsasaluhang pagpapasinaya ng sangkasaputan, dapat ibigay sa iyo ng iyong tagapagbigay ng pagpapasinaya ang tamang pangalan ng tagapagpasinaya sa loob ng kanilang kasulatan.\n\nKapag nagluluklok ka sa ibabaw ng isang tagapaghain ng Windows at gumagamit ng MySQL, maaaring hindi gumana ang paggamit ng \"localhost\" para sa pangalan ng tagapaghain. Kung hindi, subukan ang \"127.0.0.1\" para sa katutubong tirahan ng IP.\n\nKapag gumagamit ka ng PostgreSQL, iwanang walang laman ang hanay na ito upang kumabit sa pamamagitan ng bokilya ng Unix.",
+    "config-db-host-oracle": "TNS ng kalipunan ng dato:",
+    "config-db-host-oracle-help": "Magpasok ng isang katanggap-tanggap na [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Katutubong Pangalan ng Pagkabit]; dapat na nakikita ang isang talaksan ng tnsnames.ora sa pagluluklok na ito.<br />Kung gumagamit ka ng mga aklatan ng kliyente na 10g o mas bago, maaari mo ring gamitin ang pamamaraan ng pagpapangalan ng [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Maginhawang Pagkabit].",
+    "config-db-wiki-settings": "Kilalanin ang wiking ito",
+    "config-db-name": "Pangalan ng kalipunan ng dato:",
+    "config-db-name-help": "Pumili ng isang pangalan na pangkilala sa wiki mo.\nHindi ito dapat maglaman ng mga patlang.\n\nKung gumagamit ka ng pinagsasaluhang pagpapasinaya ng sangkasaputan, ang iyong tagapagbigay ng pagpapasinaya ay maaaring bigyan ka ng isang tiyak na pangalan ng kalipunan ng datong gagamitin o papayagan kang lumikha ng mga kalipunan ng dato sa pamamagitan ng isang entrepanyong pantaban.",
+    "config-db-name-oracle": "Balangkas ng kalipunan ng dato:",
+    "config-db-account-oracle-warn": "Mayroong tatlong tinatangkilik na tagpo para sa pagluluklok ng Oracle bilang panlikurang hulihan ng kalipunan ng dato:\n\nKung nais mong lumikha ng akawnt ng kalipunan ng dato bilang bahagi ng proseso ng pagluluklok, paki magbigay ng isang akawnt na mayroong gampanin ng SYSDBA bilang akawnt ng kalipunan ng dato para sa pagluluklok at tukuyin ang ninanais na mga kredensiyal para sa akawnt ng pagpunta sa sangkasaputan, o di kaya ay maaaring kinakamay na lumikha ng akawnt ng pagpunta sa sangkasaputan at ibigay lamang ang akawnt na iyan (kung mayroong ito ng kinakailangang mga pahintulot upang malikha ang mga bagay na pampagpapanukala) o magbigay ng dalawang magkaibang mga akawnt, isang mayroong pribilehiyo ng paglikha at isang may pagbabawal para sa pagpunta sa sangkasaputan.\n\nAng panitik sa paglikha ng isang akawnt na mayroon ng kinakailangang mga pribilehiyo ay matatagpuan sa loob ng direktoryong \"maintenance/oracle/\" ng pagluluklok na ito. Pakatandaan na ang paggamit ng isang akawnt na may pagbabawal ay hindi magpapagana isa lahat ng mga kakayahang pampananatili sa piling ng likas na nakatakdang akawnt.",
+    "config-db-install-account": "Akawnt ng tagagamit para sa pagluluklok",
+    "config-db-username": "Pangalang pangtagagamit ng kalipunan ng dato:",
+    "config-db-password": "Hudyat sa kalipunan ng dato:",
+    "config-db-password-empty": "Paki magpasok ng isang hudyat para sa bagong tagagamit ng kalipunan ng dato: $1.\nHabang maging maaari na makalikha ng mga tagagamit na walang mga hudyat, hindi ito ligtas.",
+    "config-db-install-username": "Ipasok ang pangalan ng tagagamit na gagamitin upang kumabit sa kalipunan ng dato habang isinasagawa ang pagluluklok.\nHindi ito ang pangalan ng tagagamit ng akawnt ng MediaWiki; ito ang pangalan ng tagagamit para sa iyong kalipunan ng dato.",
+    "config-db-install-password": "Ipasok ang hudyat na gagamitin upang kumabit sa kalipunan ng dato habang isinasagawa ang pagluluklok.\nHindi ito ang hudyat para sa akawnt ng MediaWiki; ito ang hudyat para sa iyong kalipunan ng dato.",
+    "config-db-install-help": "Ipasok ang pangalan ng tagagamit at hudyat na gagamitin upang umugnay sa kalipunan ng dato habang isinasagawa ang pagluluklok.",
+    "config-db-account-lock": "Gamitin ang gayun ding pangalan ng tagagamit at hudyat habang nasa normal na operasyon",
+    "config-db-wiki-account": "Akawnt ng tagagamit para sa pangkaraniwang pagpapaandar",
+    "config-db-wiki-help": "Ipasok ang pangalan ng tagagamit at hudyat na gagamitin upang kumabit sa kalipunan ng dato habang nasa karaniwang pagtakbo ng wiki.\nKung hindi umiiral ang akawnt, at ang akawnt ng pagluluklok ay mayroong sapat na mga pribilehiyo, ang akawnt na ito ng tagagamit ay lilikhain na mayroong pinaka mababang mga pribilehiyo na kailangan upang mapatakbo ang wiki.",
+    "config-db-prefix": "Unlapi ng talahanayan ng kalipunan ng dato:",
+    "config-db-prefix-help": "Kung kailangan mong ibahagi ang isang kalipunan ng dato sa pagitan ng maramihang mga wiki, o sa pagitan ng MediaWiki at ibang aplikasyon ng kasaputan, maaaring piliin mo na magdagdag ng isang unlapi sa lahat ng mga pangalan ng talahanayan upang maiwasan ang mga salungatan.\nHuwag gumamit ng mga patlang.\n\nAng hanay na ito ay karaniwang iniiwanang walang laman.",
+    "config-db-charset": "Pangkat ng panitik ng kalipunan ng dato",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 binaryo",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 paurong-kabagay UTF-8",
+    "config-charset-help": "'''Babala:''' Kapag ginamit mo ang '''backwards-compatible UTF-8''' o \"nauukol na pabalik na UTF-8\" sa MySQL 4.1+, at may kasunod na pagtatabi ng pansalong kopya ng kalipunan ng dato na mayroong <code>mysqldump</code>, maaaring wasakin nito ang lahat ng mga panitik na hindi ASCII, na hindi na mababawi pa ang mga pansalong kopya.\n\nSa '''gawi na nakahalo sa dalawa (binaryo)''', itinatabi ng MediaWiki ang tekstong UTF-8 sa kalipunan ng dato sa loob ng mga kahanayang binaryo.\nMas kapaki-pakinabang ito kaysa sa gawi na UTF-8 ng MySQL, at nagpapahintulot sa iyo na gamitin ang buong kasaklawan ng mga panitik na Unikodigo.\nSa '''gawi ng UTF-8''', malalaman ng MySQL kung anong pangkat ng panitik ang kinapapalooban ng iyong dato, at may kaangkupang maihaharap at mapapalitan ito, ngunit hindi ka nito papayagan na mag-imbak ng mga panitik sa ibabaw ng [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] o Saligang Patag na Kayas na Pangmaramihang Wika.",
+    "config-mysql-old": "Hindi kailangan ang MySQL na $1 o mas bago, mayroon kang $2.",
+    "config-db-port": "Daungan ng kalipunan ng dato:",
+    "config-db-schema": "Panukala para sa MediaWiki",
+    "config-db-schema-help": "Ang nasa itaas na panukala ay pangkaraniwang magiging maayos.\nBaguhin lamang ito kung alam mong kinakailangan.",
+    "config-pg-test-error": "Hindi makakabit sa kalipunan ng dato na '''$1''': $2",
+    "config-sqlite-dir": "Direktoryo ng dato ng SQLite:",
+    "config-sqlite-dir-help": "Iniimbak ng SQLite ang lahat ng dato sa loob ng isang nag-iisang talaksan.\n\nAng ibibigay mong direktoryo ay dapat na maging masusulatan ng tagapaghain ng kasaputan habang nagluluklok.\n\n'''Hindi''' ito dapat na mapuntahan sa pamamagitan ng kasaputan, ito ang dahilan kung bakit hindi namin ito inilalagay sa kung nasaan ang iyong mga talaksan ng PHP.\n\nAng tagapagluklok ay magsusulat ng isang talaksang <code>.htaccess</code> na kasama ito, subalit kapag nabigo iyon mayroong isang tao na maaaring makakuha ng pagka nakakapunta sa iyong hilaw na kalipunan ng dato.\nKasama riyan ang hilaw na dato ng tagagamit (mga tirahan ng e-liham, pinaghalong mga hudyat) pati na ang nabura nang mga pagbabago at iba pang may pagbabawal na dato sa ibabaw ng wiki.\n\nIsaalang-alang ang paglalagay na magkakasama ang kalipunan ng dato sa ibang lugar, halimbawa na ang sa loob ng <code>/var/lib/mediawiki/yourwiki</code>.",
+    "config-oracle-def-ts": "Likas na nakatakdang puwang ng talahanayan:",
+    "config-oracle-temp-ts": "Pansamantalang puwang ng talahanayan:",
+    "config-type-mysql": "MySQL",
+    "config-type-postgres": "PostgreSQL",
+    "config-type-sqlite": "SQLite",
+    "config-type-oracle": "Oracle",
+    "config-support-info": "Sinusuportahan ng MediaWiki ang sumusunod na mga sistema ng kalipunan ng dato:\n\n$1\n\nKung hindi mo makita ang sistema ng kalipunan ng dato na sinusubukan mong gamitin na nakatala sa ibaba, kung gayon ay sundi ang mga tagubilin na nakakawing sa itaas upang mapagana ang suporta,",
+    "config-support-mysql": "* Ang $1 ay ang pangunahing puntirya para sa MediaWiki at ang pinaka sinusuportahan ([http://www.php.net/manual/en/mysql.installation.php paano magtipon ng PHP na mayroong suporta ng MySQL])",
+    "config-support-postgres": "* Ang $1 ay isang bantog na sistema ng kalipunan ng dato na bukas ang pinagmulan na panghalili sa MySQL ([http://www.php.net/manual/en/pgsql.installation.php paano magtipon ng PHP na mayroong suporta ng PostgreSQL]). Maaaring mayroong ilang hindi pangunahing mga surot na natitira pa, at hindi iminumungkahi para gamitin sa loob ng isang kapaligiran ng produksiyon.",
+    "config-support-sqlite": "Ang $1 ay isang magaan ang timbang na sistema ng kalipunan ng dato na sinusuportahan nang napaka mainam. ([http://www.php.net/manual/en/pdo.installation.php Paano magtipon ng PHP na mayroong suporta ng SQLite], gumagamit ng PDO)",
+    "config-support-oracle": "* Ang $1 ay isang kalipunan ng dato ng kasigasigang pangkalakal. ([http://www.php.net/manual/en/oci8.installation.php Paano magtipunan ng PHP na mayroong suporta ng OCI8])",
+    "config-header-mysql": "Mga katakdaan ng MySQL",
+    "config-header-postgres": "Mga katakdaan ng PostgreSQL",
+    "config-header-sqlite": "Mga katakdaan ng SQLite",
+    "config-header-oracle": "Mga katakdaan ng Oracle",
+    "config-invalid-db-type": "Hindi tanggap na uri ng kalipunan ng dato",
+    "config-missing-db-name": "Dapat kang magpasok ng isang halaga para sa \"Pangalan ng kalipunan ng dato\"",
+    "config-missing-db-host": "Dapat kang magpasok ng isang halaga para sa \"Tagapagpasinaya ng kalipunan ng dato\"",
+    "config-missing-db-server-oracle": "Dapat kang magpasok ng isang halaga para sa \"TNS ng kalipunan ng dato\"",
+    "config-invalid-db-server-oracle": "Hindi katanggap-tanggap na pangalan ng TNSng kalipunan ng dato na \"$1\".\nGumamit lamang ng mga titik ng ASCII (a-z, A-Z), mga bilang (0-9), mga salungguhit (_) at mga tuldok (.).",
+    "config-invalid-db-name": "Hindi tanggap na pangalan ng kalipunan ng dato na \"$1\".\nGumamit lamang ng mga titik ng ASCII (a-z, A-Z), mga bilang (0-9), mga salungguhit (_) at mga gitling (-).",
+    "config-invalid-db-prefix": "Hindi tanggap na unlapi ng kalipunan ng dato na \"$1\".\nGamitin lamang ang mga titik na ASCII (a-z, A-Z), mga bilang (0-9), mga salungguhit (_) at mga gitling (-).",
+    "config-connection-error": "$1.\n\nSuriin ang punong-abala, pangalan ng tagagamit at hudyat na nasa ibaba at subukan ulit.",
+    "config-invalid-schema": "Hindi katanggap-tanggap na panukala para sa \"$1\" ng MediaWiki.\nGumamit lamang ng mga titik ng ASCII (a-z, A-Z), mga bilang (0-9), at mga salungguhit (_).",
+    "config-db-sys-create-oracle": "Ang panluklok ay tumatangkilik lamang sa paggamit ng isang akawnt ng SYSDBA para sa paglikha ng isang bagong akawnt.",
+    "config-db-sys-user-exists-oracle": "Umiiral na ang akawnt ng tagagamit na \"$1\". Magagamit lamang ang SYSDBA para sa paglikha ng isang bagong akawnt!",
+    "config-postgres-old": "Kailangan ang PostgreSQL $1 o mas bago, mayroon kang $2.",
+    "config-sqlite-name-help": "Pumili ng isang pangalan na pangkilala na wiki mo.\nHuwag gumamit ng mga puwang o mga gitling.\nGagamitin ito para sa pangalan ng talaksan ng dato ng SQLite.",
+    "config-sqlite-parent-unwritable-group": "Hindi malikha ang direktoryo ng dato na <code><nowiki>$1</nowiki></code>, sapagkat ang magulang na direktoryong <code><nowiki>$2</nowiki></code> ay hindi masulatan ng tagapaghain ng kasaputan.\n\nNapag-alaman ng tagapagluklok kung sinong tagagamit ang kinatatakbuhan ng iyong tagapaghain ng kasaputan.\nGawing nasusulatan nito ang <code><nowiki>$3</nowiki></code> ng direktoryo upang makapagpatuloy.\nIto ang gawin sa ibabaw ng isang sistema ng Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Hindi malikha ang direktoryo ng dato na <code><nowiki>$1</nowiki></code>, sapagkat ang magulang na direktoryong <code><nowiki>$2</nowiki></code> ay hindi masulatan ng tagapaghain ng kasaputan.\n\nHindi malaman ng tagapagluklok kung sinong tagagamit ang kinatatakbuhan ng iyong tagapaghain ng kasaputan.\nGawing nasusulatan nito (at ng mga iba pa) ang <code><nowiki>$3</nowiki></code> ng direktoryo upang makapagpatuloy.\nIto ang gawin sa ibabaw ng isang sistema ng Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Kamalian sa paglikha ng direktoryo ng datong \"$1\".\nSuriin ang kinalalagyan at subukang muli.",
+    "config-sqlite-dir-unwritable": "Hindi nagawang magsulat sa direktoryong \"$1\".\nBaguhin ang mga kapahintulutan nito upang makapagsulat dito ang tagapaghain ng sapot, at subukang muli.",
+    "config-sqlite-connection-error": "$1.\n\nSurrin ang direktoryo ng dato at pangalan ng kalipunan ng datong nasa ibaba at subukan uli.",
+    "config-sqlite-readonly": "Ang talaksang <code>$1</code> ay hindi maisusulat.",
+    "config-sqlite-cant-create-db": "Hindi malikha ang talaksang <code>$1</code> ng kalipunan ng dato.",
+    "config-sqlite-fts3-downgrade": "Nawawala ang suportang FTS3 ng PHP, ibinababa ang uri ng mga talahanayan",
+    "config-can-upgrade": "Mayroong mga talahanayan ng MediaWiki sa loob ng kalipunan ng datong ito.\nUpang maitaas ang uri ng mga ito upang maging MediaWiki na $1, pindutin ang '''Magpatuloy'''.",
+    "config-upgrade-done": "Buo na ang pagtataas ng uri.\n\nMaaari mo na ngayong [$1 gamitin ang iyong wiki].\n\nKung nais mong muling likhain ang iyong talaksang <code>LocalSettings.php</code>, lagitikin ang pindutang nasa ibaba.\n'''Hindi minumungkahi''' ito maliban na lamang kung nagkakaroon ka ng mga suliranin sa piling ng wiki mo.",
+    "config-upgrade-done-no-regenerate": "Buo na ang pagsasapanahon.\n\nMaaari ka na ngayong [$1 magsimula sa paggamit ng wiki mo].",
+    "config-regenerate": "Muling likhain ang LocalSettings.php →",
+    "config-show-table-status": "Nabigo ang pagtatanong na IPAKITA ANG KALAGAYAN NG TALAHANAYAN!",
+    "config-unknown-collation": "'''Babala:''' Ang kalipunan ng dato ay gumagagamit ng hindi nakikilalang pag-iipon.",
+    "config-db-web-account": "Akawnt ng kalipunan ng dato para sa pagpunta sa web",
+    "config-db-web-help": "Piliin ang pangalan ng tagagamit at hudyat na gagamitin ng tagapaghain ng web upang umugnay sa tagapaghain ng kalipunan ng dato, habang nasa pangkaraniwang pagtakbo ng wiki.",
+    "config-db-web-account-same": "Gamitin ang gayun din akawnt katulad ng sa pagluluklok",
+    "config-db-web-create": "Likhain ang akawnt kung hindi pa ito umiiral",
+    "config-db-web-no-create-privs": "Ang tinukoy mong akawnt na iluluklok ay walang sapat na mga pribilehiyo upang makalikha ng isang akawnt.\nAng akawnt na tutukuyin mo rito ay umiiral na dapat.",
+    "config-mysql-engine": "Makinang imbakan:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Babala''': Pinili mo ang MyISAM bilang makinang imbakan para sa MySQL, na hindi iminumungkahi para gamitin sa MediaWiki, sapagkat:\n* bahagya lamang itong sumusuporta ng pagkakasundu-sundo dahil sa pagkakandado ng talahanayan\n* mas malaki ang pagkakataon na kapitan ng sira kaysa sa ibang mga makina\n* ang himpilang kodigo ng MediaWiki ay hindi palaging humahawak ng MyISAM ayon sa nararapat\n\nKung ang iyong nakaluklok na MySQL ay sumusuporta ng InnoDB, higit na iminumungkahi na piliin mo iyon sa halip.\nKung ang iyong nakaluklok na MySQL ay hindi sumusuporta ng InnoDB, marahil ay panahon na para sa isang pagtataas ng uri.",
+    "config-mysql-engine-help": "Ang '''InnoDB''' ay ang halos palaging pinaka mainam na mapipili, dahil mayroon itong mabuting suporta ng pagkakasundu-sundo.\n\nMaaaring mas mabilis ang '''MyISAM''' sa mga pagluluklok na pang-isahang tagagamit o mababasa lamang.\nMay gawi ang mga kalipunan ng dato ng MyISAM na masira nang mas madalas kaysa sa mga kalipunan ng dato ng InnoDB.",
+    "config-mysql-charset": "Pangkat ng panitik ng kalipunan ng dato:",
+    "config-mysql-binary": "Binaryo",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "Sa '''gawi na binaryo''', iniimbak ng MediaWiki ang tekstong UTF-8 sa kalipunan ng dato sa loob ng mga hanay na binaryo.\nMas kapaki-pakinabang ito kaysa sa gawi na UTF-8 ng MySQL, at nagpapahintulot sa iyo upang magamit ang buong kasaklawan ng mga panitik ng Unikodigo.\n\nSa ''gawi na UTF-8''', malalaman ng MySQL kung sa anong pangkat ng panitik nakapaloob ang iyong dato, at angkop na makakapagharap at makapapagpalit nito, subalit hindi ka nito papayagan na mag-imbak ng mga panitik na nasa itaas ng [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] o Saligang Tapyas na Pangmaramihang Wika.",
+    "config-site-name": "Pangalan ng wiki:",
+    "config-site-name-help": "Lilitaw ito sa bareta ng pamagat ng pantingin-tingin at sa samu't saring ibang mga lugar.",
+    "config-site-name-blank": "Magpasok ng isang pangalan ng sityo.",
+    "config-project-namespace": "Puwang na pampangalan ng proyekto:",
+    "config-ns-generic": "Proyekto",
+    "config-ns-site-name": "Katulad ng sa pangalan ng wiki: $1",
+    "config-ns-other": "Iba pa (tukuyin)",
+    "config-ns-other-default": "Wiki Ko",
+    "config-project-namespace-help": "Bilang pagsunod sa halimbawa ng Wikipedia, maraming mga wiki ang nagpapanatili ng kanilang mga pahina ng patakaran na nakahiwalay magmula sa kanilang mga pahina ng nilalaman, na nasa loob ng isang \"'''puwang na pampangalan ng proyekto'''\".\nAng lahat ng mga pamagat ng pahina na nasa loob ng puwang ng pangalang ito ay nagsisimula na mayroong isang partikular na unlapi, na maaari mong tukuyin dito.\nSa nakaugalian, ang unlaping ito ay hinango mula sa pangalan ng wiki, subalit hindi ito maaaring maglaman ng mga panitik ng palabantasan na katulad ng \"#\" o \":\".",
+    "config-ns-invalid": "Ang tinukoy na puwang ng pangalan na \"<nowiki>$1</nowiki>\" ay hindi katanggap-tanggap.\nTumukoy ng isang ibang puwang ng pangalan ng proyekto.",
+    "config-ns-conflict": "Ang tinukoy na puwang ng pangalan na \"<nowiki>$1</nowiki>\" ay sumasalungat sa isang likas na nakatakdang puwang ng pangalan ng MediaWiki.\nTumukoy ng isang ibang puwang ng pangalan ng proyekto.",
+    "config-admin-box": "Akawnt ng tagapangasiwa",
+    "config-admin-name": "Pangalan mo:",
+    "config-admin-password": "Hudyat:",
+    "config-admin-password-confirm": "Hudyat uli:",
+    "config-admin-help": "Ipasok dito ang mas ninanais mong pangalan ng tagagamit, bilang halimbawa na ang \"Joe Bloggs\".\nIto ang pangalang gagamitin mo upang lumagdang papasok sa wiki.",
+    "config-admin-name-blank": "Magpasok ng isang pangalan ng tagagamit na tagapangasiwa.",
+    "config-admin-name-invalid": "Ang tinukoy na pangalan ng tagagamit na \"<nowiki>$1</nowiki>\" ay hindi tanggap.\nTumukoy ng ibang pangalan ng tagagamit.",
+    "config-admin-password-blank": "Magpasok ng isang hudyat para sa akawnt ng tagapangasiwa.",
+    "config-admin-password-same": "Ang hudyat ay hindi dapat na katulad ng pangalan ng tagagamit.",
+    "config-admin-password-mismatch": "Hindi magkatugma ang ipinasok mong dalawang mga hudyat.",
+    "config-admin-email": "Tirahan ng e-liham:",
+    "config-admin-email-help": "Magpasok dito ng isang tirahan ng e-liham upang mapahintulutan kang makatanggap ng e-liham mula sa iba pang mga tagagamit sa ibabaw ng wiki, itakdang muli ang hudyat mo, at mapabatiran ng mga pagbabago sa mga pahinang nasa ibabaw ng iyong tala ng mga binabantayan. Maiiwanan mo na walang laman ang hanay na ito.",
+    "config-admin-error-user": "Panloob na kamalian kapag nililikha ang isang tagapangasiwa na may pangalang \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Panloob na kamalian kapag nagtatakda ng isang hudyat na para sa tagapangasiwang \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+    "config-admin-error-bademail": "Nagpasok ka ng isang hindi katanggap-tanggap na tirahan ng e-liham.",
+    "config-subscribe": "Tumanggap mula sa [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce talaan ng mga pinadadalhan ng mga nilalabas na mga pabatid].",
+    "config-subscribe-help": "Isang itong tala ng pagliliham na mababa ang dami na ginagamit para sa pagpapakawala ng mga pahayag, kabilang na ang mahahalagang mga pahayag na pangkatiwasayan. Dapat kang magpasipi nito at isapanahon ang iyong nakaluklok na MediaWiki kapag lumalabas ang bagong mga bersiyon.",
+    "config-subscribe-noemail": "Sinubukan mong magpasipi sa tala ng nililihaman ng pagpapakawala ng mga pahayag na hindi nagbibigay ng isang tirahan ng -eliham. Paki magbigay ng isang tirahan ng e-liham kung nais mong magpasipi sa listahan ng pagliliham.",
+    "config-almost-done": "Halos tapos ka na!\nMaaari mo ngayong laktawan ang natitira pang pag-aayos at iluklok na ang wiki ngayon.",
+    "config-optional-continue": "Magtanong sa akin ng marami pang mga tanong.",
+    "config-optional-skip": "Naiinip na ako, basta iluklok na lang ang wiki.",
+    "config-profile": "Balangkas ng mga karapatan ng tagagamit:",
+    "config-profile-wiki": "Tradisyonal na wiki",
+    "config-profile-no-anon": "Kailangan ang paglikha ng akawnt",
+    "config-profile-fishbowl": "Pinahintulutang mga patnugot lamang",
+    "config-profile-private": "Pribadong wiki",
+    "config-profile-help": "Pinaka mahusay ang pagtakbo ng mga Wiki kapag pinapahintulutan mo ang pinaka maraming mga tao na makapamatnugot ng mga ito hanggang sa maaari.\nSa loob ng MediaWiki, maginhawang masusuring muli ang kamakailang mga pagbabago, at mapanauli sa dati ang anumang nasira na nagawa ng isang walang muwang o may masamang hangarin na mga tagagamit.\n\nSubalit, marami ang nakatagpo na nagagamit ang MediaWiki sa loob ng malawak na sari-saring mga gampanin, at kung minsan ay hindi madaling makumbinsi ang lahat ng mga tao hinggil sa kapakinabangan ng kaparaanan ng wiki.\nKung kaya't nasa iyo ang pagpili.\n\nAng isang '''{{int:config-profile-wiki}}''' ay nagpapahintulot sa sinuman upang makapagbago, na hindi kailangan ang paglagdang papasok.\nAng isang wiki na mayroong '''{{int:config-profile-no-anon}}''' ay nagbibigay ng karagdagang pananagutan, subalit maaaring pumigil sa nagkataon lamang na mga tagapag-ambag.\n\nAng tagpo na '''{{int:config-profile-fishbowl}}''' ay nagpapahintulot lamang sa pinayagang mga tagagamit na makatingin ng mga pahina, na kapiling ang pangkat na pinayagang  makapamatnugot.\nAng isang '''{{int:config-profile-private}}''' ay nagpapahintulot lamang sa pinayagang mga tagagamit na makatingin ng mga pahina, na kapiling ang pangkat na pinayagang makapamatnugot.\n\nAng mas masasalimuot na mga kaayusan ng mga karapatan ng tagagamit ay makukuha pagkaraan ng pagluluklok, tingnan ang [//www.mediawiki.org/wiki/Manual:User_rights may kaugnayang kinamay na lahok].",
+    "config-license": "Karapatang-ari at lisensiya:",
+    "config-license-none": "Walang talababa ng lisensiya",
+    "config-license-cc-by-sa": "Malikhaing Pangkaraniwang Pagtukoy Pamamahaging Magkatulad",
+    "config-license-cc-by": "Atribusyon ng Creative Commons",
+    "config-license-cc-by-nc-sa": "Malikhaing Pangkaraniwang Pagtukoy Hindi-Pangkalakal Pamamahaging Magkatulad",
+    "config-license-cc-0": "Sero na Creative Commons (Nasasakop ng Madla)",
+    "config-license-gfdl": "Lisensiyang 1.3 ng Malayang Dokumentasyon ng GNU o mas lalong huli",
+    "config-license-pd": "Nasasakupan ng Madla",
+    "config-license-cc-choose": "Pumili ng isang pasadyang Lisensiya ng Malikhaing mga Pangkaraniwan",
+    "config-license-help": "Maraming mga pangmadlang wiki ang naglalagay ng lahat ng mga ambag sa ilalim ng [http://freedomdefined.org/Definition lisensiyang malaya].\nNakakatulong ito sa paglikha ng isang diwa ng pagmamay-ari ng pamayanan at nakapanghihikayat ng ambag na pangmahabang panahon.\nSa pangkalahatan, hindi kailangan ang isang wiking pribado o pangsamahan.\n\nKung nais mong magamit ang teksto magmula sa Wikipedia, at nais mong makatanggap ang Wikipedia ng tekstong kinopya magmula sa wiki mo, dapat mong piliin ang '''Creative Commons Attribution Share Alike''' (Pagbanggit na Pinagsasaluhang Magkatulad ng Malikhaing Pangkaraniwan).\n\nDating ginamit ng Wikipedia ang Lisensiya ng Kasulatang Malaya ng GNU (GNU Free Documentation License o GFDL).\nIsang katanggap-tanggap na lisensiya ang GFDL, subalit mahirap itong maunawaan.\nMahirap din ang paggamit na muli ng nilalaman na nasa ilalim ng GFDL.",
+    "config-email-settings": "Mga katakdaan ng e-liham",
+    "config-enable-email": "Paganahin ang palabas na e-liham",
+    "config-enable-email-help": "Kung nais mong gumana ang e-liham, ang mga katakdaan ng liham ng [http://www.php.net/manual/en/mail.configuration.php PHP] ay kailangang maging wasto ang pagkakaayos.\nKung ayaw mo nang anumang mga katampukan ng e-liham, maaari mong huwag paganahin ang mga ito rito.",
+    "config-email-user": "Paganahin ang tagagamit-sa-tagagamit na e-liham",
+    "config-email-user-help": "Payagan ang lahat ng mga tagagamit na magpadala ng e-liham sa bawat isa kapag pinagana nila ito sa kanilang mga nais.",
+    "config-email-usertalk": "Paganahin ang pabatid na pampahina ng usapan ng tagagamit",
+    "config-email-usertalk-help": "Payagan ang mga tagagamit na tumanggap ng mga pabatid sa mga pagbabago ng pahina ng usapan ng tagagamit, kapag pinagana nila ito sa kanilang mga nais.",
+    "config-email-watchlist": "Paganahin ang pabatid ng talaan ng bantayan",
+    "config-email-watchlist-help": "Payagan ang mga tagagamit na tumanggap ng mga pabatid tungkol sa kanilang binabantayang mga pahina kapag pinagana nila ito sa kanilang mga nais.",
+    "config-email-auth": "Paganahin ang pagpapatunay ng e-liham",
+    "config-email-auth-help": "Kapag pinagagana ang mapipiling ito, dapat tiyakin ng mga tagagamit ang kanilang tirahan ng e-liham na ginagamit ang isang kawing na ipinadala sa kanila tuwing itinatakda o binabago nila ito.\nTanging napatunayang mga tirahan ng e-liham lamang ang makakatanggap ng mga e-liham magmula sa ibang mga tagagamit o makakapagbago ng mga e-liham ng pagpapabatid.\n'''Iminumungkahi''' ang mapipiling katakdaan na ito para sa mga wiking pangmadla dahil sa maaaring mangyaring pagmamalabis ng mga katampukan ng e-liham.",
+    "config-email-sender": "Pabalik na tirahan ng e-liham:",
+    "config-email-sender-help": "Ipasok ang tirahan ng e-liham na gagamitin bilang tirahang pagsasaulian ng e-liham na papalabas.\nDito ang kung saan ipapadala ang mga pagtalbog.\nMaraming mga tagapaghain ng liham ang nangangailangan ng kahit na bahagi lamang ng pangalan ng nasasakupan upang maging katanggap-tanggap.",
+    "config-upload-settings": "Mga pagkakarga ng mga larawan at talaksan",
+    "config-upload-enable": "Paganahin ang pagkakarga ng talaksan",
+    "config-upload-help": "Ang paitaas na mga pagkakarga ng mga talaksan ay maaaring makapaglantad ng iyong tagapaghain sa mga panganib na pangkatiwasayan.\nPara sa mas marami pang kabatiran, basahin ang [//www.mediawiki.org/wiki/Manual:Security seksiyon ng katiwasayan] sa loob ng gabay.\n\nUpang mapagana ang paitaas na mga pagkakarga ng talaksan, baguhin ang gawi roon sa subdirektoryo ng <code>mga imahe</code> sa ilalim ng ugat na direktoryo ng MediaWiki upang ang tagapaghain ng kasaputan ay makapagsulat dito.\nPagkaraan ay paganahin ang pipiliing ito.",
+    "config-upload-deleted": "Direktoryo para sa binurang mga talaksan:",
+    "config-upload-deleted-help": "Pumili ng isang direktoryong pagsusupnayan ng naburang mga talaksan.\nIdeyal na dapat itong  hindi mapupuntahan mula sa web.",
+    "config-logo": "URL ng logo:",
+    "config-logo-help": "Ang likas na nakatakdang pabalat ng MediaWiki ay nagsasama ng puwang para sa isang logong 135x160 ang piksel na nasa itaas ng menu ng panggilid na bareta.\nMagkargang papaitaas ng isang imahe na mayroong naaangkop na sukat, at ipasok dito ang URL.\n\nKung ayaw mo ng isang logo, iwanang walang laman ang kahong ito.",
+    "config-instantcommons": "Paganahin ang Mga Pangkaraniwang Biglaan",
+    "config-instantcommons-help": "Ang [//www.mediawiki.org/wiki/InstantCommons Instant Commons] ay isang tampok na nagpapahintulot sa mga wiki upang gumamit ng mga imahe, mga tunog at iba pang mga midyang matatagpuan sa pook ng [//commons.wikimedia.org/ Wikimedia Commons].\nUpang magawa ito, nangangailangan ang MediaWiki ng pagka nakakapunta sa Internet.\n\nPara sa mas marami pang kabatiran hinggil sa tampok na ito, kabilang na ang mga tagubilin sa kung paano ito itakda para sa mga wiki na bukod pa kaysa sa Wikimedia Commons, sumangguni sa [//mediawiki.org/wiki/Manual:$wgForeignFileRepos gabay].",
+    "config-cc-error": "Hindi nagbigay ng resulta ang pampili ng lisensiya ng Malikhaing Pangkaraniwan.\nIpasok na kinakamay ang pangalan ng lisensiya.",
+    "config-cc-again": "Pumili uli...",
+    "config-cc-not-chosen": "Piliin kung anong lisensiya ng Malikhaing mga Pangkaraniwan ang nais mo at pindutin ang \"magpatuloy\".",
+    "config-advanced-settings": "Mas masulong na pagkakaayos",
+    "config-cache-options": "Mga katakdaan para sa pagtatago ng bagay:",
+    "config-cache-help": "Ang pagtatago ng bagay ay ginagamit upang mapainam ang tulin ng MediaWiki sa pamamagitan ng pagtatago ng madalas gamiting dato.\nAng mga pook na bahagya hanggang malalaki ang sukat ay labis na hinihikayat na paganahin ito, at ang mga pook na maliliit ay makakakita rin ng mga kapakinabangan.",
+    "config-cache-none": "Walang pagtatago (tinanggal ang katungkulan, subalit maaaring maapektuhan ang tulin sa mas malalaking mga pook ng wiki)",
+    "config-cache-accel": "Pagtatago ng bagay ng PHP (APC, XCache o WinCache)",
+    "config-cache-memcached": "Gamitin ang Pagtatago sa Alaala (Memcached) (nangangailangan ng karagdagang kaayusan ng pagkakahanda at pagsasaayos)",
+    "config-memcached-servers": "Mga tagapaghaing itinago sa alaala:",
+    "config-memcached-help": "Listahan ng mga tirahan ng IP na gagamitin para sa Memcached o Itinagong Alaala.\nDapat na tukuyin na isa sa bawat guhit at tukuyin ang daungang gagamitin. Bilang halimbawa:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "Pinili mo ang Memcached bilang uri mo ng taguan ngunit hindi tumukoy ng anumang mga tagapaghain.",
+    "config-memcache-badip": "Nagpasok ka ng isang hindi tanggap na tirahan ng IP para sa Memcached: $1.",
+    "config-memcache-noport": "Hindi ka tumukoy ng isang daungan na gagamitin para sa tagapaghain ng Memcached: $1.\nKung hindi mo alam ang daungan, ang likas na nakatakda ay 11211.",
+    "config-memcache-badport": "Ang bilang ng daungan ng Memcached ay dapat na nasa pagitan ng $1 at $2.",
+    "config-extensions": "Mga dugtong",
+    "config-extensions-help": "Ang mga dugtong na nakalista sa ibabaw ay napansin sa loob ng iyong direktoryo ng <code>./extensions</code>.\n\nMaaaring mangailangan ang mga ito ng karagdagang kaayusan, subalit mapapagana mo ngayon ang mga ito",
+    "config-install-alreadydone": "'''Babala:''' Tila nailuklok mo na ang MediaWiki at tinatangka mong iluklok ito ulit.\nPaki magpatuloy sa susunod na pahina.",
+    "config-install-begin": "Sa pamamagitan ng pagpindot sa \"{{int:config-continue}}\", sisimulan mo ang pagluluklok ng MediaWiki.\nKung nais mo paring gumawa ng mga pagbabago, paki pindutin ang bumalik.",
+    "config-install-step-done": "nagawa na",
+    "config-install-step-failed": "nabigo",
+    "config-install-extensions": "Isinasama ang mga karugtong",
+    "config-install-database": "Inihahanda ang kalipunan ng dato",
+    "config-install-schema": "Nililikha ang panukala",
+    "config-install-pg-schema-not-exist": "Hindi umiiral ang panukala ng PostgreSQL.",
+    "config-install-pg-schema-failed": "Nabigo ang paglikha ng mga talahanayan.\nTiyakin na ang tagagamit na \"$1\" ay maaaring makasulat sa balangkas na \"$2\".",
+    "config-install-pg-commit": "Isinasagawa ang mga pagbabago",
+    "config-install-pg-plpgsql": "Sumusuri ng wikang PL/pgSQL",
+    "config-pg-no-plpgsql": "Kailangan mong magtalaga ng wikang PL/pgSQL sa loob ng kalipunan ng datong $1",
+    "config-pg-no-create-privs": "Ang tinukoy mong akawnt para sa pagtatalaga ay walang sapat na mga pribilehiyo upang makalikha ng isang akawnt.",
+    "config-pg-not-in-role": "Umiiral na ang akawnt na tinukoy mo para sa tagagamit ng sangkasaputan.\nAng tinukoy mong akawnt para sa pagluluklok ay hindi isang tagagamit na super at hindi isang kasapi sa gampanin ng tagagamit ng sangkasaputan, kung kaya't hindi nito nagawang makalikha ng mga bagay na pag-aari ng tagagamit ng sangkasaputan.\n\nSa kasalukuyan, nangangailangan ang MediaWiki na ang mga talahanayan ay maging pag-aari ng tagagamit ng sangkasaputan. Paki tumukoy ng isa pang pangalan ng akawnt na pangsangkasaputan, o pindutin ang \"bumalik\" at tumukoy ng isang tagagamit na may kaangkupang pribilehiyo ng pagluluklok.",
+    "config-install-user": "Nililikha ang tagagamit ng kalipunan ng dato",
+    "config-install-user-alreadyexists": "Umiiral na ang tagagamit na \"$1\"",
+    "config-install-user-create-failed": "Nabigo ang paglikha ng tagagamit na \"$1\": $2",
+    "config-install-user-grant-failed": "Nabigo ang pagbibigay ng pahintulot sa tagagamit na \"$1\": $2",
+    "config-install-user-missing": "Hindi umiiral ang tinukoy na tagagamit na si \"$1\".",
+    "config-install-user-missing-create": "Hindi umiiral ang tinukoy na tagagamit na si \"$1\".\nPaki lagitikin ang nasa ibabang kahong natsetsekan na \"likhain ang akawnt\" kung nais mong likhain ito.",
+    "config-install-tables": "Nililikha ang mga talahanayan",
+    "config-install-tables-exist": "'''Babala''': Tila umiiral na ang mga talahanayan ng MediaWiki.\nNilalaktawan ang paglikha.",
+    "config-install-tables-failed": "'''Kamalian''': Nabigo ang paglikha ng talahanayan na may sumusunod na kamalian: $1",
+    "config-install-interwiki": "Nilalagyan ng laman ang likas na nakatakdang talahanayan ng interwiki",
+    "config-install-interwiki-list": "Hindi matagpuan ang talaksang <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "'''Babala''': Tila may mga laman na ang talahanayan ng interwiki.\nNilalaktawan ang likas na nakatakdang talaan.",
+    "config-install-stats": "Sinisimulan ang estadistika",
+    "config-install-keys": "Ginagawa ang lihim na mga susi",
+    "config-insecure-keys": "'''Babala:''' Nalikha ang {{PLURAL:$2|A secure key|ligtas na mga susi}} ($1) habang ang pagluluklok {{PLURAL:$2|ay|ay}} hindi pa lubos na ligtas. Isaalang-alang ang kinakamay na pagbago {{PLURAL:$2|nito|ng mga ito}}.",
+    "config-install-sysop": "Nililikha ang akawnt ng tagagamit na tagapangasiwa",
+    "config-install-subscribe-fail": "Hindi nagawang magpasipi mula sa mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "Hindi nakalagak ang cURL at hindi makukuha ang allow_url_fopen",
+    "config-install-mainpage": "Nililikha ang pangunahing pahina na may likas na nakatakdang nilalaman",
+    "config-install-extension-tables": "Nililikha ang mga talahanayan para sa pinagaganang mga dugtong",
+    "config-install-mainpage-failed": "Hindi maisingit ang pangunahing pahina: $1",
+    "config-install-done": "'''Maligayang bati!'''\nMatagumpay mong nailuklok ang MediaWiki.\n\nAng tagapagluklok ay nakagawa ng isang talaksan ng <code>LocalSettings.php</code>.\nNaglalaman ito ng lahat ng iyong mga pagsasaayos.\n\nKailangan mo itong ikargang paibaba at ilagay ito sa lipon ng iyong pagluluklok ng wiki (katulad ng direktoryo ng index.php).  Ang pagkakargang paibaba ay dapat na kusang magsimula.\n\nKung ang pagkakargang paibaba ay hindi inialok, o kung hindi mo ito itinuloy, maaari mong muling simulan ang pagkakargang paibaba sa pamamagitan ng pagpindot sa kawing na nasa ibaba:\n\n$3\n\n'''Paunawa''': Kapag hindi mo ito ginawa ngayon, ang nagawang talaksang ito ng pagkakaayos ay hindi mo na makukuha mamaya kapag lumabas ka mula sa pagluluklok na hindi ikinakarga itong paibaba.\n\nKapag nagawa na iyan, maaari ka nang '''[$2 pumasok sa wiki mo]'''.",
+    "config-download-localsettings": "Ikargang paibaba ang <code>LocalSettings.php</code>",
+    "config-help": "saklolo",
+    "config-nofile": "Hindi matagpuan ang talaksang \"$1\". Binura na ba ito?",
+    "mainpagetext": "'''Matagumpay na ininstala ang MediaWiki.'''",
+    "mainpagedocfooter": "Silipin ang [//meta.wikimedia.org/wiki/Help:Contents Patnubay sa Tagagamit] (''\"User's Guide\"'') para sa kaalaman sa paggamit ng wiking ''software''.\n\n== Pagsisimula ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Tala ng mga nakatakdang kumpigurasyon]\n* [//www.mediawiki.org/wiki/Manual:FAQ Mga malimit itanong sa MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Tala ng mga pinadadalhan ng liham ng MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/tly.json b/includes/installer/i18n/tly.json
new file mode 100644 (file)
index 0000000..f8e1bcd
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Erdemaslancan"
+        ]
+    },
+    "config-page-options": "Кукон"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/tr.json b/includes/installer/i18n/tr.json
new file mode 100644 (file)
index 0000000..ec5a6b0
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki başarı ile kuruldu.'''",
+    "mainpagedocfooter": "Viki yazılımının kullanımı hakkında bilgi almak için [//meta.wikimedia.org/wiki/Help:Contents kullanıcı rehberine] bakınız.\n\n== Yeni Başlayanlar ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Yapılandırma ayarlarının listesi]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki SSS]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-posta listesi]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/tt-cyrl.json b/includes/installer/i18n/tt-cyrl.json
new file mode 100644 (file)
index 0000000..c9f4fcd
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "KhayR"
+        ]
+    },
+    "mainpagetext": "«MediaWiki» уңышлы куелды.",
+    "mainpagedocfooter": "Бу вики турында мәгълүматны [//meta.wikimedia.org/wiki/Ярдәм:Эчтәлек биредә] табып була.\n\n== Кайбер файдалы ресурслар ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Көйләнмәләр исемлеге (инг.)];\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki турында еш бирелгән сораулар һәм җаваплар (инг.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki'ның яңа версияләре турында хәбәрләр яздырып алу]."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/tt-latn.json b/includes/installer/i18n/tt-latn.json
new file mode 100644 (file)
index 0000000..21d9590
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Don Alessandro"
+        ]
+    },
+    "mainpagetext": "«MediaWiki» uñışlı quyıldı.",
+    "mainpagedocfooter": "Bu wiki turında mäğlümatnı [//meta.wikimedia.org/wiki/Yärdäm:Eçtälek biredä] tabıp bula.\n\n== Qayber faydalı resurslar ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Köylänmälär isemlege (ing.)];\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki turında yış birelgän sorawlar häm cawaplar (ing.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki'nıñ yaña versiäläre turında xäbärlär yazdırıp alu]."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/udm.json b/includes/installer/i18n/udm.json
new file mode 100644 (file)
index 0000000..28cd049
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Andrewboltachev"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki движок азинлыко пуктэмын.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ug-arab.json b/includes/installer/i18n/ug-arab.json
new file mode 100644 (file)
index 0000000..f7a8843
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Sahran"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki مۇۋەپپەقىيەتلىك قاچىلاندى.'''",
+    "mainpagedocfooter": "[//meta.wikimedia.org/wiki/Help:Contents ئىشلەتكۈچى قوللانمىسى] نى زىيارەت قىلىپ wiki يۇمشاق دېتالىنى ئىشلىتىش ئۇچۇرىغا ئېرىشىڭ.\n\n== دەسلەپكى ساۋات ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings سەپلىمە تەڭشەك تىزىملىكى]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki كۆپ ئۇچرايدىغان مەسىلىلەرگە جاۋاب]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki تارقاتقان ئېلخەت تىزىملىكى]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/uk.json b/includes/installer/i18n/uk.json
new file mode 100644 (file)
index 0000000..dd96f35
--- /dev/null
@@ -0,0 +1,314 @@
+{
+    "@metadata": {
+        "authors": [
+            "AS",
+            "Ahonc",
+            "Alex Khimich",
+            "Andriykopanytsia",
+            "Base",
+            "Diemon.ukr",
+            "Ата",
+            "Тест",
+            "아라"
+        ]
+    },
+    "config-desc": "Інсталятор MediaWiki",
+    "config-title": "Встановлення MediaWiki $1",
+    "config-information": "Інформація",
+    "config-localsettings-upgrade": "'''Увага''': було виявлено файл <code>LocalSettings.php</code>.\nВаше програмне забезпечення може бути оновлено.\nБудь-ласка, перемістіть файл <code>LocalSettings.php</code> в іншу безпечну директорію, а потім знову запустіть програму установки.",
+    "config-localsettings-cli-upgrade": "Виявлено файл <code>LocalSettings.php</code>.\nЩоб оновити наявну установку, запустіть <code>update.php</code>",
+    "config-localsettings-key": "Ключ оновлення:",
+    "config-localsettings-badkey": "Ви вказали неправильний ключ.",
+    "config-upgrade-key-missing": "Виявлено наявну установку MediaWiki.\nДля оновлення цієї установки, будь ласка, вставте такий рядок в кінець вашого <code>LocalSettings.php</code>:\n$1",
+    "config-localsettings-incomplete": "Існуючий файл <code>LocalSettings.php</code> виявився неповним.\nНе вказано змінну $1.\nБудь ласка, змініть <code>LocalSettings.php</code> так, щоб цю змінну було задано, і натисніть \"{{int:Config-continue}}\".",
+    "config-localsettings-connection-error": "Сталася помилка при підключення до бази даних з допомогою налаштувань на сторінці <code>LocalSettings.php</code> чи <code>AdminSettings.php</code>. Будь ласка, виплавте ці налаштування і спробуйте знову.\n\n$1",
+    "config-session-error": "Помилка початку сесії: $1",
+    "config-session-expired": "Час Вашої сесії минув.\nЗадана тривалість сесії — $1.\nВи можете збільшити її, змінивши <code>session.gc_maxlifetime</code> у php.ini.\nПерезапустіть процес встановлення.",
+    "config-no-session": "Дані сесії було втрачено!\nПеревірте Ваш php.ini і переконайтесь, що <code>session.save_path</code> встановлено у відповідну папку.",
+    "config-your-language": "Ваша мова:",
+    "config-your-language-help": "Оберіть мову для використання в процесі установки.",
+    "config-wiki-language": "Мова для вікі:",
+    "config-wiki-language-help": "Виберіть мову, якою буде відображатися вікі.",
+    "config-back": "← Назад",
+    "config-continue": "Далі →",
+    "config-page-language": "Мова",
+    "config-page-welcome": "Ласкаво просимо на MediaWiki!",
+    "config-page-dbconnect": "Підключення до бази даних",
+    "config-page-upgrade": "Оновлення існуючої установки",
+    "config-page-dbsettings": "Налаштування бази даних",
+    "config-page-name": "Назва",
+    "config-page-options": "Параметри",
+    "config-page-install": "Установка",
+    "config-page-complete": "Готово!",
+    "config-page-restart": "Перезапустити установку",
+    "config-page-readme": "Прочитай мене",
+    "config-page-releasenotes": "Інформація про версію",
+    "config-page-copying": "Копіювання",
+    "config-page-upgradedoc": "Оновлення",
+    "config-page-existingwiki": "Існуюча вікі",
+    "config-help-restart": "Ви бажаєте видалити всі введені та збережені вами дані і запустити процес установки спочатку?",
+    "config-restart": "Так, перезапустити установку",
+    "config-welcome": "=== Перевірка оточення ===\nБудуть проведені базові перевірки, щоб виявити, чи можлива установка MediaWiki у даній системі.\nНе забудьте включити цю інформацію, якщо ви звернетеся по підтримку, як завершити установку.",
+    "config-copyright": "=== Авторське право і умови ===\n\n$1\n\nЦя програма є вільним програмним забезпеченням; Ви можете розповсюджувати та/або змінювати її під ліцензією GNU General Public License, опублікованою Фондом вільного програмного забезпечення; версією 2 цієї ліцензії або будь-якою пізнішою на Ваш вибір.\n\nЦя програма поширюється з надією на те, що вона буде корисною, однак '''без жодних гарантій'''; навіть без неявної гарантії '''комерційної цінності''' або '''придатності для певних цілей'''.\nДив. GNU General Public License для детальної інформації.\n\nВи повинні були отримати <doclink href=Copying>копію GNU General Public License</doclink> разом із цією програмою; якщо ж ні, зверніться до Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. або [http://www.gnu.org/copyleft/gpl.html ознайомтесь з нею онлайн].",
+    "config-sidebar": "* [//www.mediawiki.org Сайт MediaWiki]\n* [//www.mediawiki.org/wiki/Help:Contents Посібник користувача]\n* [//www.mediawiki.org/wiki/Manual:Contents Посібник адміністратора]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Read me</doclink>\n* <doclink href=ReleaseNotes>Інформація про випуск</doclink>\n* <doclink href=Copying>Ліцензія</doclink>\n* <doclink href=UpgradeDoc>Оновлення</doclink>",
+    "config-env-good": "Перевірку середовища успішно завершено.\nВи можете встановити MediaWiki.",
+    "config-env-bad": "Було проведено перевірку середовища. Ви не можете встановити MediaWiki.",
+    "config-env-php": "Встановлено версію PHP: $1.",
+    "config-env-php-toolow": "Встановлено PHP $1.\nНатомість MediaWiki вимагає PHP $2 і вище.",
+    "config-unicode-using-utf8": "Використовувати utf8_normalize.so Брайона Віббера для нормалізації Юнікоду.",
+    "config-unicode-using-intl": "Використовувати [http://pecl.php.net/intl міжнародне розширення PECL] для нормалізації Юнікоду.",
+    "config-unicode-pure-php-warning": "'''Увага''': [http://pecl.php.net/intl міжнародне розширення PECL] не може провести нормалізацію Юнікоду.\nЯкщо ваш сайт має високий трафік, вам варто почитати про [//www.mediawiki.org/wiki/Unicode_normalization_considerations нормалізацію Юнікоду].",
+    "config-unicode-update-warning": "'''Увага''': Встановлена версія обгортки нормалізації Юнікоду використовує стару версію бібліотеки [http://site.icu-project.org/ проекту ICU].\nВи маєте [//www.mediawiki.org/wiki/Unicode_normalization_considerations оновити версію], якщо плануєте повноцінно використовувати Юнікод.",
+    "config-no-db": "Не вдалося знайти відповідний драйвер бази даних! Вам необхідно встановити драйвер бази даних для PHP. Підтримуються такі типи баз даних: $1.\n\nЯкщо ви користуєтесь віртуальним хостингом, попросіть вашого хостинг-провайдера інсталювати відповідний драйвер бази даних.\nЯкщо ви скомпілювали PHP самостійно, переналаштуйте його з включенням клієнта бази даних, наприклад за допомогою <code>./configure --with-mysql</code>.\nЯкщо установлено PHP з пакетів Debian або Ubuntu, тоді ви також повинні встановити php5-mysql модуль.",
+    "config-outdated-sqlite": "'''Увага''': у Вас встановлена версія SQLite $1, а це нижче, ніж мінімально необхідна версія $2. SQLite буде недоступним.",
+    "config-no-fts3": "'''Увага''': SQLite зібраний без [//sqlite.org/fts3.html модуля FTS3], функції пошуку не будуть працювати у цій системі.",
+    "config-register-globals": "'''Увага: Опція PHP <code>[http://php.net/register_globals register_globals]</code> увімкнена.'''\n'''Вимкніть її, якщо це можливо.'''\nMediaWiki буде працювати, але Ваш сервер буде більш вразливим до потенційного проникнення зовні.",
+    "config-magic-quotes-runtime": "'''Проблема: Опція PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] увімкнена!'''\nЦя опція призводить до непередбачуваного пошкодження даних.\nВи не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
+    "config-magic-quotes-sybase": "'''Проблема: Опція PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] увімкнена!'''\nЦя опція призводить до непередбачуваного пошкодження даних.\nВи не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
+    "config-mbstring": "'''Проблема: Опція PHP [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] увімкнена!'''\nЦя опція призводить до непередбачуваного пошкодження даних.\nВи не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
+    "config-ze1": "'''Проблема: Опція PHP [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] увімкнена!'''\nЦя опція призводить до непередбачуваного пошкодження даних.\nВи не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
+    "config-safe-mode": "'''Увага:''' Опція PHP [http://www.php.net/features.safe-mode «безпечний режим»] увімкнена.\nЦе може спричинити проблеми, зокрема із завантаженням файлів та вставкою математичних формул.",
+    "config-xml-bad": "XML-модуть PHP відсутній.\nMediaWiki необхідні його функції, без цього модуля вона працювати не буде.\nЯкщо Ви використовуєте Mandrake, встановіть php-xml пакет.",
+    "config-pcre": "Модуть підтримку PCRE не знайдено.\nДля роботи MediaWiki необхідна підтримка Perl-сумісних регулярних виразів.",
+    "config-pcre-no-utf8": "'''Помилка''': PCRE-модуть PHP, вочевидь, було зібрано без підтримки PCRE_UTF8.\nMediaWiki вимагає підтримку UTF-8 для коректної роботи.",
+    "config-memory-raised": "Обмеження пам'яті PHP (<code>memory_limit</code>) $1, піднято до $2.",
+    "config-memory-bad": "'''Увага:''' Розмір пам'яті PHP (<code>memory_limit</code>) становить $1.\nІмовірно, це замало.\nВстановлення може не вдатись!",
+    "config-ctype": "'''Помилка''': PHP має бути зібраним з підтримкою [http://www.php.net/manual/en/ctype.installation.php розширення Ctype].",
+    "config-json": "'''Fatal:''' PHP був скомпільований без підтримки JSON.\nВам потрібно встановити або розширення PHP JSON або розширення[http://pecl.php.net/package/jsonc PECL jsonc] перед встановлення Медіавікі.\n* Розширення PHP включено у Red Hat Enterprise Linux (CentOS) 5 та 6, хоча має бути доступним у  <code>/etc/php.ini</code> або <code>/etc/php.d/json.ini</code>.\n* Деякі дистрибутиви Лінукса, випущені після травня 2013, пропустили розширення PHP, натомість упакували розширення  PECL як <code>php5-json</code> або <code>php-pecl-jsonc</code>.",
+    "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].\nКешування об'єктів не ввімкнено.",
+    "config-mod-security": "'''Увага''': на Вашому веб-сервері увімкнено [http://modsecurity.org/ mod_security]. У разі неправильних налаштувать, він може викликати проблеми MediaWiki або іншого ПЗ, яке дозволяє користувачам надсилати довільний вміст.\nЗверніться до [http://modsecurity.org/documentation/ документації mod_security] або підтримки Вашого хостера, якщо під час роботи виникають незрозумілі помилки.",
+    "config-diff3-bad": "GNU diff3 не знайдено.",
+    "config-git": "Знайшов програму управління версіями Git: <code>$1</code>.",
+    "config-git-bad": "Програму управління версіями Git  не знайдено.",
+    "config-imagemagick": "Виявлено ImageMagick: <code>$1</code>.\nБуде ввімкнуто відображення мініатюр, якщо ви дозволите завантаження файлів.",
+    "config-gd": "Виявлено вбудовано графічну бібліотеку GD.\nБуде ввімкнуто відображення мініатюр, якщо ви дозволите завантаження файлів.",
+    "config-no-scaling": "Не вдалося виявити бібліотеку GD чи ImageMagick.\nВідображення мініатюр буде вимкнено.",
+    "config-no-uri": "'''Помилка:''' Не вдалося визначити поточний URI.\nВстановлення перервано.",
+    "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> вразлива до виконання довільних скриптів.\nХоча MediaWiki перевіряє усі завантажені файли на наявність загроз, наполегливо рекомендується [//www.mediawiki.org/wiki/Manual:Security#Upload_security закрити дану вразливість] перед тим, як дозволяти завантаження файлів.",
+    "config-no-cli-uploads-check": "'''Увага:''' Ваша типова папка для завантажень (<code>$1</code>) не перевірялась на вразливість до виконання довільних скриптів під час встановлення CLI.",
+    "config-brokenlibxml": "У Вашій системі невдале поєднання версій PHP і libxml2, яке може спричинити пошкодження прихованих даних у MediaWiki та інших веб-застосунках.\nОновіть PHP до версії 5.2.9 або пізнішої і libxml2 до 2.7.3 або пізнішої ([//bugs.php.net/bug.php?id=45996 відомості про помилку]).\nВстановлення перервано.",
+    "config-using531": "MediaWiki не можна використовувати разом з PHP $1 через помилку з параметрами-посиланнями <code>__call()</code>.\nОновіть PHP до версії 5.3.2 і вище або відкотіть до PHP 5.3.0 щоб уникнути цієї проблеми.\nВстановлення скасовано.",
+    "config-suhosin-max-value-length": "Suhosin встановлено і обмежує параметра GET  <code>length</code> до $1 байта. Компонент MediaWiki ResourceLoader буде обходити це обмеження, однак це зменшить продуктивність. Якщо це можливо, Вам варто встановити значення <code>suhosin.get.max_value_length</code> як 1024 і більше у <code>php.ini</code> і встановити таке ж значення <code>$wgResourceLoaderMaxQueryLength</code> у LocalSettings.php .",
+    "config-db-type": "Тип бази даних:",
+    "config-db-host": "Хост бази даних:",
+    "config-db-host-help": "Якщо сервер бази даних знаходиться на іншому сервері, введіть тут ім'я хосту і IP адресу.\n\nЯкщо Ви використовуєте віртуальний хостинг, Ваш хостинг-провайдер має надати Вам правильне ім'я хосту у його документації.\n\nЯкщо у Вас сервер із Windows Ви використовуєте MySQL, параметр \"localhost\" може не працювати для імені сервера. Якщо не працює, використайте \"127.0.0.1\" як локальну IP-адресу.\n\nЯкщо Ви використовуєте PostgreSQL, залиште це поле пустим, щоб під'єднатись через сокет Unix.",
+    "config-db-host-oracle": "TNS бази даних:",
+    "config-db-host-oracle-help": "Введіть допустиме [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; файл tnsnames.ora має бути видимим для цієї інсталяції. <br />Якщо Ви використовуєте бібліотеки 10g чи новіші, можна також використовувати метод іменування [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+    "config-db-wiki-settings": "Ідентифікувати цю вікі",
+    "config-db-name": "Назва бази даних:",
+    "config-db-name-help": "Виберіть назву, що ідентифікує Вашу вікі.\nВона не повинна містити пробілів.\n\nЯкщо Ви використовуєте віртуальний хостинг, Ваш хостинг-провайдер або надасть Вам конкретну назву бази даних, або дозволить створювати бази даних з допомогою панелі управління.",
+    "config-db-name-oracle": "Схема бази даних:",
+    "config-db-account-oracle-warn": "Є три підтримувані сценарії установки Oracle:\n\nЯкщо Ви хочете створити обліковий запис бази даних у процесі встановлення, будь ласка, вкажіть обліковий запис ролі SYSDBA для установки і бажані повноваження для облікового запису з веб-доступом. В протилежному випадку Ви можете або створити обліковий запис з веб-доступом вручну і вказати тільки цей обліковий запис (якщо він має необхідні дозволи на створення об'єктів-схем), або вказати два різні облікові записи, з яких в одного будуть права на створення, а в другого, обмеженого — права веб-доступу.\n\nСкрипт для створення облікового запису з необхідними повноваженнями можна знайти у папці \"maintenance/oracle/\" цієї інсталяції. Майте на увазі, що використання обмеженого облікового запису вимкне можливість використання технічного обслуговування з облікового запису за замовчуванням.",
+    "config-db-install-account": "Обліковий запис користувача для встановлення",
+    "config-db-username": "Ім'я користувача бази даних:",
+    "config-db-password": "Пароль бази даних:",
+    "config-db-password-empty": "Будь ласка, введіть пароль для нового користувача бази даних: $1.\nХоча можна створювати користувачів без паролів, це не є безпечним.",
+    "config-db-install-username": "Введіть ім'я користувача, яке буде використано для підключення до бази даних під час процесу встановлення.\nЦе не ім'я користувача облікового запису MediaWiki; це ім'я користувача для Вашої бази даних.",
+    "config-db-install-password": "Введіть пароль, який буде використано для підключення до бази даних під час процесу встановлення.\nЦе не пароль облікового запису MediaWiki; це пароль для Вашої бази даних.",
+    "config-db-install-help": "Введіть ім'я користувача і пароль, які буде використано для підключення до бази даних у процесі встановлення.",
+    "config-db-account-lock": "Використовувати ті ж ім'я користувача і пароль і для звичайної роботи",
+    "config-db-wiki-account": "Обліковий запис користувача для звичайної роботи",
+    "config-db-wiki-help": "Введіть ім'я користувача і пароль, які будуть використовуватись для з'єднання з базою даних під час звичайної роботи.\nЯкщо обліковий запис не існує, а в облікового запису інсталяції є достатні повноваження, цей обліковий запис користувача буде створено з мінімальними правами, що необхідні для роботи з вікі.",
+    "config-db-prefix": "Префікс таблиць бази даних:",
+    "config-db-prefix-help": "Якщо треба ділити одну базу даних між декількома вікі або між MediaWiki та іншим веб-застосунком, Ви можете додати префікс до усіх назв таблиць для уникнення конфліктів.\nНе використовуйте пробіли.\n\nЦе поле зазвичай залишають пустим.",
+    "config-db-charset": "Кодування бази даних",
+    "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 зворотно сумісна з UTF-8",
+    "config-charset-help": "'''Увага:''' Якщо Ви використовуєте '''зворотно сумісну UTF-8''' на MySQL 4.1+ і створюєте резервні копії бази даних з допомогою <code>mysqldump</code>, це може викривити усі не-ASCII символи, незворотно пошкодивши резервні копії!\n\nУ '''бінарному режимі''' MediaWiki зберігає текст UTF-8 у базі даних з бінарними полями.\nЦе більш ефективно, ніж UTF-8 режим MySQL, і дозволяє використовувати увесь набір символів Юнікоду.\nУ '''режимі UTF-8''' MySQL буде знати, якого символу стосуються Ваші дані, і могтиме відображати та конвертувати їх належним чином,\nале не дозволятиме зберігати символи, що виходять за межі [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
+    "config-mysql-old": "Необхідна MySQL $1 або пізніша, а у Вас $2.",
+    "config-db-port": "Порт бази даних:",
+    "config-db-schema": "Схема для MediaWiki",
+    "config-db-schema-help": "Ця схема зазвичай працює добре.\nЗмінюйте її тільки якщо знаєте, що Вам це потрібно.",
+    "config-pg-test-error": "Не вдається підключитися до бази даних '''$1''': $2",
+    "config-sqlite-dir": "Папка даних SQLite:",
+    "config-sqlite-dir-help": "SQLite зберігає усі дані в єдиному файлі.\n\nПапка, яку Ви вказуєте, має бути доступна серверу для запису під час встановлення.\n\nВона '''не''' повинна бути доступна через інтернет, тому ми і не поміщуємо її туди, де Ваші файли PHP.\n\nІнсталятор пропише у неї файл <code>.htaccess</code>, але якщо це не спрацює, хтось може отримати доступ до Вашої вихідної бази даних, яка містить вихідні дані користувача (адреси електронної пошти, хеші паролів), а також видалені версії та інші обмежені дані на вікі.\n\nЗа можливості розташуйте базу даних десь окремо, наприклад в <code>/var/lib/mediawiki/yourwiki</code>.",
+    "config-oracle-def-ts": "Простір таблиць за замовчуванням:",
+    "config-oracle-temp-ts": "Тимчасовий простір таблиць:",
+    "config-support-info": "MediaWiki підтримує таки системи баз даних:\n\n$1\n\nЯкщо Ви не бачите серед перерахованих систему баз даних, яку використовуєте, виконайте вказівки, вказані вище, щоб увімкнути підтримку.",
+    "config-support-mysql": "* $1 є основною для MediaWiki і найкраще підтримується ([http://www.php.net/manual/en/mysql.installation.php як зібрати PHP з допомогою MySQL])",
+    "config-support-postgres": "* $1 — популярна відкрита СУБД, альтернатива MySQL ([http://www.php.net/manual/en/pgsql.installation.php як зібрати PHP з допомогою PostgreSQL]). Можуть зустрічатись деякі невеликі невиправлені помилки, не рекомендується використовувати у робочій системі.",
+    "config-support-sqlite": "* $1 — легка система баз даних, яка дуже добре підтримується. ([http://www.php.net/manual/en/pdo.installation.php Як зібрати PHP з допомогою SQLite], що використовує PDO)",
+    "config-support-oracle": "* $1 — комерційна база даних масштабу підприємства. ([http://www.php.net/manual/en/oci8.installation.php Як зібрати PHP з підтримкою OCI8])",
+    "config-header-mysql": "Налаштування MySQL",
+    "config-header-postgres": "Налаштування PostgreSQL",
+    "config-header-sqlite": "Налаштування SQLite",
+    "config-header-oracle": "Налаштування Oracle",
+    "config-invalid-db-type": "Невірний тип бази даних",
+    "config-missing-db-name": "Ви повинні ввести значення параметру «Ім'я бази даних»",
+    "config-missing-db-host": "Ви повинні ввести значення параметру «Хост бази даних»",
+    "config-missing-db-server-oracle": "Ви повинні ввести значення параметру «TNS бази даних»",
+    "config-invalid-db-server-oracle": "Неприпустиме TNS бази даних \"$1\".\nВикористовуйте \"TNS Name\" або рядок \"Easy Connect\"  ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Методи найменування Oracle])",
+    "config-invalid-db-name": "Неприпустима назва бази даних \"$1\".\nВикористовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9), знаки підкреслення (_) і дефіси (-).",
+    "config-invalid-db-prefix": "Неприпустимий префікс бази даних \"$1\".\nВикористовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9), знаки підкреслення (_) і дефіси (-).",
+    "config-connection-error": "$1.\n\nПеревірте хост, ім'я користувача та пароль і спробуйте ще раз.",
+    "config-invalid-schema": "Неприпустима схема для MediaWiki \"$1\".\nВикористовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9) і знаки підкреслення(_).",
+    "config-db-sys-create-oracle": "Інсталятор підтримує лише використання облікового запису SYSDBA для створення нового облікового запису.",
+    "config-db-sys-user-exists-oracle": "Обліковий запис користувача \"$1\" уже існує. SYSDBA використовується лише для створення новий облікових записів!",
+    "config-postgres-old": "Необхідна PostgreSQL $1 або пізніша, а у Вас $2.",
+    "config-sqlite-name-help": "Виберіть назву, що ідентифікує Вашу вікі.\nНе використовуйте пробіли і дефіси.\nЦе буде використовуватись у назві файлу даних SQLite.",
+    "config-sqlite-parent-unwritable-group": "Не можна створити папку даних <code><nowiki>$1</nowiki></code>, оскільки батьківська папка <code><nowiki>$2</nowiki></code> не доступна веб-серверу для запису.\n\nІнсталятор виявив, під яким користувачем працює Ваш сервер.\nЗробіть папку <code><nowiki>$3</nowiki></code> доступною для запису, щоб продовжити.\nВ ОС Unix/Linux виконайте:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "Не можна створити папку даних <code><nowiki>$1</nowiki></code>, оскільки батьківська папка <code><nowiki>$2</nowiki></code> не доступна веб-серверу для запису.\n\nІнсталятор не зміг виявити, під яким користувачем працює Ваш сервер.\nЗробіть папку <code><nowiki>$3</nowiki></code> доступною для запису серверу (і всім!) глобально, щоб продовжити.\nВ ОС Unix/Linux виконайте:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "Помилка при створенні папки даних \"$1\".\nПеревірте розташування і спробуйте знову.",
+    "config-sqlite-dir-unwritable": "Не можливо записати до папки \"$1\".\nЗмініть налаштування доступу так, щоб веб-сервер міг писати до неї, і спробуйте ще раз.",
+    "config-sqlite-connection-error": "$1.\n\nПеревірте папку даних і назву бази даних нижче та спробуйте знову.",
+    "config-sqlite-readonly": "Файл <code>$1</code> недоступний для запису.",
+    "config-sqlite-cant-create-db": "Не вдалося створити файл бази даних <code>$1</code>.",
+    "config-sqlite-fts3-downgrade": "У PHP немає підтримки FTS3, скидаю таблиці",
+    "config-can-upgrade": "У цій базі даних є таблиці MediaWiki.\nЩоб оновити їх до MediaWiki $1, натисніть '''Продовжити'''.",
+    "config-upgrade-done": "Оновлення завершено.\n\nВи можете зараз [$1 починати використовувати свою вікі].\n\nЯкщо Ви хочете повторно згенерувати файл <code>LocalSettings.php</code>, натисніть на кнопку нижче.\nЦе '''не рекомендується''', якщо тільки у Вас не виникли проблеми з Вашою вікі.",
+    "config-upgrade-done-no-regenerate": "Оновлення завершено.\n\nВи можете зараз [$1 починати використовувати свою вікі].",
+    "config-regenerate": "Повторно згенерувати LocalSettings.php →",
+    "config-show-table-status": "Запит <code>SHOW TABLE STATUS</code> не виконано!",
+    "config-unknown-collation": "'''Увага:''' База даних використовує нерозпізнане сортування.",
+    "config-db-web-account": "Обліковий запис бази даних для інтернет-доступу",
+    "config-db-web-help": "Оберіть ім'я користувача і пароль, які веб-сервер буде використовувати для з'єднання із сервером бази даних під час звичайної роботи вікі.",
+    "config-db-web-account-same": "Використати той же обліковий запис для встановлення",
+    "config-db-web-create": "Створити обліковий запис, якщо його ще не існує",
+    "config-db-web-no-create-privs": "Обліковий запис, вказаний Вами для встановлення, не має достатніх повноважень для створення облікового запису.\nОбліковий запис, який Ви вказуєте тут, уже повинен існувати.",
+    "config-mysql-engine": "Двигун бази даних:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''Увага''': Ви обрали MyISAM для зберігання даних MySQL, що не рекомендовано для роботи з MediaWiki, оскільки:\n* він слабко підтримує паралелізм через блокування таблиць\n* він більш схильний до ушкоджень, ніж інші двигуни\n* база коду MediaWiki не завжди працює з MyISAM так, як мала б.\n\nЯкщо Ваша інсталяція MySQL підтримує InnoDB, дуже рекомендується вибрати цей двигун.\nЯкщо Ваша інсталяція MySQL не підтримує InnoDB, можливо настав час її оновити.",
+    "config-mysql-only-myisam-dep": "\"'Зауваження:\"' MyISAM є єдиним механізмом для зберігання MySQL, який не рекомендується для використання з MediaWiki, оскільки:\n* слабо підтримує паралелізм через блокування таблиць\n* більш схильний до пошкоджень, ніж інші двигуни\n* код MediaWiki не завжди розглядає MyISAM, як повинен\n\nТвоє встановлення MySQL не підтримує InnoDB, можливо, потрібно оновити.",
+    "config-mysql-engine-help": "'''InnoDB''' є завжди кращим вибором, оскільки краще підтримує паралельний доступ.\n\n'''MyISAM''' може бути швидшим для одного користувача або в інсталяціях read-only.\nБази даних MyISAM схильні псуватись частіше, ніж бази InnoDB.",
+    "config-mysql-charset": "Кодування бази даних:",
+    "config-mysql-binary": "Двійкове",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "У '''бінарному режимі''' MediaWiki зберігає текст UTF-8 у базі даних з бінарними полями.\nЦе більш ефективно, ніж UTF-8 режим MySQL, і дозволяє використовувати увесь набір символів Юнікоду.\n\nУ '''режимі UTF-8''' MySQL буде знати, якого символу стосуються Ваші дані, і могтиме відображати та конвертувати їх належним чином, але не дозволятиме зберігати символи, що виходять за межі [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
+    "config-site-name": "Назва вікі:",
+    "config-site-name-help": "Це буде відображатись у заголовку вікна браузера та у деяких інших місцях.",
+    "config-site-name-blank": "Введіть назву сайту.",
+    "config-project-namespace": "Простір назв проекту:",
+    "config-ns-generic": "Проект",
+    "config-ns-site-name": "Те ж саме, що й назва вікі: $1",
+    "config-ns-other": "Інше (вкажіть)",
+    "config-ns-other-default": "MyWiki",
+    "config-project-namespace-help": "За прикладом Вікіпедії, чимало вікі тримають свої сторінки правил окремо від сторінок основного вмісту, у \"'''просторі імен проекту'''\".\nУсі назви сторінок у цьому просторі імен починаються з певного префікса, який Ви можете вказати тут.\nТрадиційно цей префікс виводиться з назви вікі, але не може містити знаки пунктуація, як-то \"#\" чи \":\".",
+    "config-ns-invalid": "Вказаний простір імен \"<nowiki>$1</nowiki>\" не припустимий.\nВкажіть інший простір імен проекту.",
+    "config-ns-conflict": "Вказаний простір імен \"<nowiki>$1</nowiki>\" конфліктує зі стандартним простором імен MediaWiki.\nВкажіть інший простір імен проекту.",
+    "config-admin-box": "Обліковий запис адміністратора",
+    "config-admin-name": "Ваше ім'я:",
+    "config-admin-password": "Пароль:",
+    "config-admin-password-confirm": "Пароль ще раз:",
+    "config-admin-help": "Введіть бажане ім'я користувача тут, наприклад \"Павло НЛО\".\nЦе ім'я ви будете використовувати про вході у вікі.",
+    "config-admin-name-blank": "Введіть ім'я користувача адміністратора.",
+    "config-admin-name-invalid": "Вказане ім'я користувача \"<nowiki>$1</nowiki>\" не припустиме.\nВкажіть інше ім'я користувача.",
+    "config-admin-password-blank": "Введіть пароль до облікового запису адміністратора.",
+    "config-admin-password-same": "Пароль не може бути таким же, як ім'я користувача.",
+    "config-admin-password-mismatch": "Два введені вами паролі не збігаються.",
+    "config-admin-email": "Адреса електронної пошти:",
+    "config-admin-email-help": "Введіть адресу електронної пошти, щоб мати змогу отримувати електронну пошту від інших користувачів у вікі, відновити пароль і отримувати повідомлення про зміни, внесені до сторінок у Вашому списку спостереження. Ви можете залишити це поле пустим.",
+    "config-admin-error-user": "Внутрішня помилка під час створення адміністратора з ім'ям \"<nowiki>$1</nowiki>\".",
+    "config-admin-error-password": "Внутрішня помилка під час встановлення пароля для адміністратора \"<nowiki>$1</nowiki>\":<pre>$2</pre>",
+    "config-admin-error-bademail": "Ви ввели недопустиму адресу електронної пошти.",
+    "config-subscribe": "Підписатися на [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce розсилку анонсів нових версій MediaWiki].",
+    "config-subscribe-help": "Це список розсилки з малим обсягом повідомлень, що використовується для анонсування релізів, а також важливих повідомлень про безпеку.\nВам варто підписати і оновлювати інсталяцію MediaWiki, коли з'являтимуться нові версії.",
+    "config-subscribe-noemail": "Ви намагались підписатись на розсилку анонсів релізів, не вказавши адреси електронної пошти.\nБудь ласка, вкажіть адресу електронної пошти, якщо хочете підписатись на розсилку.",
+    "config-almost-done": "Майже готово!\nВи можете зараз пропустити налаштування, що залишилось, і встановити вікі прямо зараз.",
+    "config-optional-continue": "Запитуйте ще.",
+    "config-optional-skip": "Це вже втомлює, просто встановити вікі.",
+    "config-profile": "Профіль прав користувача:",
+    "config-profile-wiki": "Відкрита вікі",
+    "config-profile-no-anon": "Необхідно створити обліковий запис",
+    "config-profile-fishbowl": "Тільки для авторизованих редакторів",
+    "config-profile-private": "Приватна вікі",
+    "config-profile-help": "Вікі краще працюють, коли Ви дозволяєте їх редагувати якомога ширшому колу людей.\nУ MediaWiki легко переглядати останні зміни і відкочувати будь-яку шкоду, спричинену недосвідченими або зловмисними користувачами.\n\nОдначе, MediaWiki може бути корисна по-різному, й інколи важко переконати у вигідності відкритої вікі-роботи.\nТож у Вас є вибір.\n\nМодель '''{{int:config-profile-wiki}}''' дозволяє редагувати будь-кому, навіть без входження в систему.\nВікі з вимогою \"'''{{int:config-profile-no-anon}}'''\" дає певний облік, але може відвернути випадкових дописувачів.\nСпосіб \"'''{{int:config-profile-fishbowl}}'''\" дозволяє редагувати підтвердженим користувачам, а переглядати сторінки і історію можуть усі.\n'''{{int:config-profile-private}}''' дозволяє переглядати сторінки і редагувати лише підтвердженим користувачам.\n\nДетальніші конфігурації прав користувачів доступні після встановлення, див. [//www.mediawiki.org/wiki/Manual:User_rights відповідний розділ посібника].",
+    "config-license": "Авторські права і ліцензія:",
+    "config-license-none": "Без ліцензії у нижньому колонтитулі",
+    "config-license-cc-by-sa": "Creative Commons Attribution Share Alike",
+    "config-license-cc-by": "Creative Commons Attribution",
+    "config-license-cc-by-nc-sa": "Creative Commons Attribution Non-Commercial Share Alike",
+    "config-license-cc-0": "Creative Commons Zero (Суспільне надбання)",
+    "config-license-gfdl": "GNU Free Documentation License 1.3 або пізніша",
+    "config-license-pd": "Суспільне надбання (Public Domain)",
+    "config-license-cc-choose": "Виберіть одну з ліцензій Creative Commons",
+    "config-license-help": "Чимало загальнодоступних вікі публікують увесь свій вміст під [http://freedomdefined.org/Definition вільною ліцензією]. Це розвиває відчуття спільної власності і заохочує довготривалу участь. У загальному випадку для приватної чи корпоративної вікі у цьому немає необхідності.\n\nЯкщо Ви хочете мати змогу використовувати текст з Вікіпедії і дати Вікіпедії змогу використовувати текст, скопійований з Вашої вікі, вам необхідно обрати '''Creative Commons Attribution Share Alike'''.\n\nРаніше Вікіпедія використовувала GNU Free Documentation License.\nGFDL — допустима ліцензія, але у ній важко розібратися, а контент під GFDL важко використовувати повторно.",
+    "config-email-settings": "Налаштування електронної пошти",
+    "config-enable-email": "Увімкнути вихідну електронну пошту",
+    "config-enable-email-help": "Якщо Ви хочете, що електронна пошта працювала, необхідно виставити коректні [http://www.php.net/manual/en/mail.configuration.php налаштування пошти у PHP].\nЯкщо Вам не потрібні жодні можливості електронної пошти у вікі, можете тут їх відключити.",
+    "config-email-user": "Увімкнути електронну пошту користувач-користувачеві",
+    "config-email-user-help": "Дозволити усім користувачам надсилати один одному електронну пошту, якщо вони увімкнули цю можливість у своїх налаштуваннях.",
+    "config-email-usertalk": "Увімкнути сповіщення про повідомлення на сторінці обговорення користувача",
+    "config-email-usertalk-help": "Дозволити користувачам отримувати сповіщення про зміни на своїй сторінці обговорення, якщо вони увімкнули цю можливість у своїх налаштуваннях.",
+    "config-email-watchlist": "Увімкнути сповіщення про зміни у списку спостереження",
+    "config-email-watchlist-help": "Дозволити користувачам отримувати сповіщення про сторінки з їхнього списку спостереження, якщо вони увімкнули цю можливість у своїх налаштуваннях.",
+    "config-email-auth": "Увімкнути автентифікацію через електронну пошту",
+    "config-email-auth-help": "Якщо ця опція увімкнена, користувачам треба підтвердити свою адресу електронної пошти з допомогою надісланого їм посилання, коли вони встановлюють чи змінюють її.\nТільки автентифіковані адреси електронної пошти отримують листи від інших користувачів або змінювати поштові сповіщення.\nУвімкнення цієї опції '''рекомендується''' загальнодоступним вікі через можливі зловживання функціями електронної пошти.",
+    "config-email-sender": "Зворотна адреса електронної пошти:",
+    "config-email-sender-help": "Введіть адресу електронної пошти, що буде використовуватись як зворотна адреса для вихідної пошти.\nНа неї будуть надсилатись відмови.\nЧимало поштових серверів вимагають, щоб принаймні доменне ім'я було допустимим.",
+    "config-upload-settings": "Завантаження зображень і файлів",
+    "config-upload-enable": "Дозволити завантаження файлів",
+    "config-upload-help": "Завантаження файлів підставляє Ваш сервер під потенційні загрози.\nДетальнішу інформацію можна почитати у посібнику, [//www.mediawiki.org/wiki/Manual:Security розділ про безпеку].\n\nЩоб дозволити завантаження файлів, змініть режим підпапки <code>images</code> у кореневій папці MediaWiki так, щоб сервер міг у неї записувати.\nПотім увімкніть цю опцію.",
+    "config-upload-deleted": "Каталог для вилучених файлів:",
+    "config-upload-deleted-help": "Оберіть папку для архівації видалених файлів.\nВ ідеалі, вона не має бути доступною через інтернет.",
+    "config-logo": "URL логотипу:",
+    "config-logo-help": "Стандартна схема оформлення MediaWiki містить вільне для логотипу місце над бічною панеллю розміром 135x160 пікселів.\n\nЗавантажте зображення відповідного розміру і введіть тут його URL.\n\nВи можете використати <code>$wgStylePath</code> або <code>$wgScriptPath</code>, якщо ваш логотип пов'язаний з цими шляхами.\n\nЯкщо Вам не потрібен логотип, залиште це поле пустим.",
+    "config-instantcommons": "Увімкнути Instant Commons",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] це функція, що дозволяє вікі використовувати зображення, звуки та інші медіа, розміщені на [//commons.wikimedia.org/ Вікісховищі].\nДля цього MediaWiki необхідний доступ до інтернету.\n\nДодаткову інформацію стосовно цієї функції, включаючи інструкції, як її увімкнути у вікі, відмінних від Вікісховища, дивіться у [//mediawiki.org/wiki/Manual:$wgForeignFileRepos посібнику].",
+    "config-cc-error": "Механізм вибору ліцензії Creative Commons не дав результатів.\nВведіть назву ліцензії вручну.",
+    "config-cc-again": "Виберіть знову ...",
+    "config-cc-not-chosen": "Оберіть, яку ліцензію Creative Commons Ви хочете використовувати, і натисніть \"продовжити\".",
+    "config-advanced-settings": "Розширені налаштування",
+    "config-cache-options": "Налаштування кешування об'єктів:",
+    "config-cache-help": "Кешування об'єктів використовується для покращення швидкодії MediaWiki методом кешування часто використовуваних даних.\nЗаохочується увімкнення цієї можливості для середніх і великих сайтів, малі сайти також можуть відчути її перевагу.",
+    "config-cache-none": "Без кешування (жодні функції не втрачаються, але впливає на швидкодію великих вікі-сайтів)",
+    "config-cache-accel": "PHP кешування об'єктів (APC, XCache чи WinCache)",
+    "config-cache-memcached": "Використовувати Memcached (вимагає додаткової установки і налаштування)",
+    "config-memcached-servers": "Сервери Memcached:",
+    "config-memcached-help": "Список IP-адрес, що викоритовує Memcached.\nВкажіть по одному в рядку, разом з портами. Наприклад:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+    "config-memcache-needservers": "Ви обрали тип кешування Memcached, але не вказали ніяких серверів.",
+    "config-memcache-badip": "Ви ввели недопустиму IP-адресу для Memcached: $1.",
+    "config-memcache-noport": "Ви не вказали порт для сервера Memcached: $1.\nЯкщо Ви його не знаєте, за замовчуванням використовується 11211.",
+    "config-memcache-badport": "Номери портів Memcached повинні лежати в межах від $1 до $2.",
+    "config-extensions": "Розширення",
+    "config-extensions-help": "Розширення, перераховані вище, були знайдені у папці <code>./extensions</code>.\n\nВони можуть потребувати додаткових налаштувань, але Ви можете увімкнути їх зараз.",
+    "config-install-alreadydone": "'''Увага:''' Здається, Ви вже встановлювали MediaWiki і зараз намагаєтесь встановити її знову.\nБудь ласка, перейдіть на наступну сторінку.",
+    "config-install-begin": "Натискаючи \"{{int:config-continue}}\", Ви розпочинаєте встановлення MediaWiki.\nЯкщо Ви все ще хочете внести зміни, натисніть \"{{int:config-back}}\".",
+    "config-install-step-done": "виконано",
+    "config-install-step-failed": "не вдалося",
+    "config-install-extensions": "У тому числі розширення",
+    "config-install-database": "Налаштування бази даних",
+    "config-install-schema": "Створення схеми",
+    "config-install-pg-schema-not-exist": "Схеми PostgreSQL не існує.",
+    "config-install-pg-schema-failed": "Не вдалось створити таблиці.\nПереконайтесь, що користувач \"$1\" може писати до схеми \"$2\".",
+    "config-install-pg-commit": "Внесення змін",
+    "config-install-pg-plpgsql": "Перевірка мови PL/pgSQL",
+    "config-pg-no-plpgsql": "Вам необхідно встановити мову PL/pgSQL у базі даних $1",
+    "config-pg-no-create-privs": "Обліковий запис, вказаний для встановлення, має недостатньо прав для створення облікового запису.",
+    "config-pg-not-in-role": "Обліковий запис, який Ви вказали для веб-користувача, уже існує.\nОбліковий запис, який Ви вказали для встановлення не є суперюзером і не відноситься до ролі веб-користувача, тому неможливо створити об'єкти, що належать веб-користувачеві.\n\nУ даний час MediaWiki вимагає, щоб усі таблиці належали веб-користувачу. Будь ласка, вкажіть інше ім'я облікового запису або натисніть \"Назад\" та вкажіть користувача з достатніми правами.",
+    "config-install-user": "Створення користувача бази даних",
+    "config-install-user-alreadyexists": "Користувач \"$1\" уже існує",
+    "config-install-user-create-failed": "Не вдалося створити користувача \"$1\": $2",
+    "config-install-user-grant-failed": "Не вдалося надати права користувачеві \"$1\": $2",
+    "config-install-user-missing": "Зазначеного користувача \"$1\" не існує.",
+    "config-install-user-missing-create": "Зазначеного користувача \"$1\" не існує.\nБудь ласка, поставте галочку \"Створити обліковий запис\", якщо хочете його створити.",
+    "config-install-tables": "Створення таблиць",
+    "config-install-tables-exist": "'''Увага''': Таблиці MediaWiki уже, здається, існують.\nПропуск створення.",
+    "config-install-tables-failed": "'''Помилка''': Не вдалося створити таблицю внаслідок такої помилки: $1",
+    "config-install-interwiki": "Заповнення таблиці інтервікі значеннями за замовчуванням",
+    "config-install-interwiki-list": "Не вдалося знайти файл <code>interwiki.list</code>.",
+    "config-install-interwiki-exists": "'''Увага''': Таблиця інтервікі уже, здається, має записи.\nСтворення стандартного списку пропускається.",
+    "config-install-stats": "Ініціалізація статистики",
+    "config-install-keys": "Генерація секретних ключів",
+    "config-insecure-keys": "'''Увага:''' {{PLURAL:$2|Секретний ключ|Секретні ключі}} ($1), {{PLURAL:$2|згенерований в процесі встановлення, недостатньо надійний|згенеровані в процесі встановлення, недостатньо надійні}}. Розгляньте можливість {{PLURAL:$2|його|їх}} заміни вручку.",
+    "config-install-sysop": "Створення облікового запису адміністратора",
+    "config-install-subscribe-fail": "Не можливо підписатись на mediawiki-announce: $1",
+    "config-install-subscribe-notpossible": "cURL не встановлено і опція allow_url_fopen не доступна.",
+    "config-install-mainpage": "Створення головної сторінки із вмістом за замовчуванням",
+    "config-install-extension-tables": "Створення таблиць для увімкнених розширень",
+    "config-install-mainpage-failed": "Не вдається вставити головну сторінку: $1",
+    "config-install-done": "'''Вітаємо!'''\nВи успішно встановили MediaWiki.\n\nІнсталятор згенерував файл <code>LocalSettings.php</code>, який містить усі Ваші налаштування.\n\nВам необхідно завантажити його і помістити у кореневу папку Вашої вікі (туди ж, де index.php). Завантаження мало початись автоматично.\n\nЯкщо завантаження не почалось або Ви його скасували, можете заново його почати, натиснувши на посилання внизу:\n\n$3\n\n'''Примітка''': Якщо Ви не зробите цього зараз, цей файл не буде доступним пізніше, коли Ви вийдете з встановлення, не скачавши його.\n\nПісля виконання дій, описаних вище, Ви зможете '''[$2 увійти у свою вікі]'''.",
+    "config-download-localsettings": "Завантажити <code>LocalSettings.php</code>",
+    "config-help": "допомога",
+    "config-nofile": "Файл \"$1\" не знайдено. Його видалено?",
+    "config-extension-link": "Чи знаєте ви, що ваше вікі підтримує [//www.mediawiki.org/wiki/Manual:Extensions розширення]?\n\nВи можете переглядати [//www.mediawiki.org/wiki/Category:Extensions_by_category розширення по категорії] або в [//www.mediawiki.org/wiki/Extension_Matrix матрицю розширень] щоб побачити повний список розширень.",
+    "mainpagetext": "Програмне забезпечення «MediaWiki» успішно встановлене.",
+    "mainpagedocfooter": "Інформацію про роботу з цією вікі можна знайти в [//meta.wikimedia.org/wiki/Help:Contents посібнику користувача].\n\n== Деякі корисні ресурси ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Список налаштувань];\n* [//www.mediawiki.org/wiki/Manual:FAQ Часті питання з приводу MediaWiki];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Розсилка повідомлень про появу нових версій MediaWiki];\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Локалізуйте MediaWiki своєю мовою]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/ur.json b/includes/installer/i18n/ur.json
new file mode 100644 (file)
index 0000000..0837465
--- /dev/null
@@ -0,0 +1,34 @@
+{
+    "@metadata": {
+        "authors": [
+            "Noor2020",
+            "පසිඳු කාවින්ද"
+        ]
+    },
+    "config-information": "معلومات",
+    "config-git": "Git ورژن کنٹرول مصنع لطیف ملا: <code>$1</code> ۔",
+    "config-git-bad": "GIT ورژن کنٹرول مصنع لطیف نہيں ملا ۔",
+    "config-mysql-only-myisam-dep": "' ' تنبیہ: ' '[[MyISAM|مائ اسام]] واحد دستیاب 'ذخیرہ جاتی انجن' ہے جو مائی ایس کیو ایل کے لیے ہے ، جو کہ ناموزوں ہے میڈیا وکی کے لیے ،کیوں کہ :\n* یہ ہموار قطاروں کی سہولت بمشکل فراہم کرتا ہے\n* یہ دوسرے انجنوں کے مقابلے  زیادہ بگڑ جاتا ہے\n* میڈیا وکی کوڈ بیس ہمیشہ سنبھال نہيں پاتا مائی اسام کو ۔\n\nآپ کا مائی ایس کیو ایل کا نصب ہمیشہ اننو ڈی بی کی سہولت نہيں دے سکتا ، ہو سکتا ہے یہ مزید ترقیاتی کام چاہے",
+    "config-profile-fishbowl": "صرف مجاز ایڈیٹرز",
+    "config-license-pd": "پبلک ڈومین",
+    "config-email-settings": "ای میل کی ترتیبات",
+    "config-email-user-help": "تمام صارفین ای میل بھیجنے کیلئے ایک دوسرے اگر وہ یہ ان کی ترجیحات میں فعال ہے کی اجازت دیتے ہیں.",
+    "config-email-usertalk": "صارف بات صفحہ کی اطلاع فعال",
+    "config-email-usertalk-help": "اگر وہ یہ ان کی ترجیحات میں فعال ہے صارف بات صفحہ تبدیلی پر اطلاعات حاصل کرنے کے لئے صارفین کی اجازت دیں.",
+    "config-email-watchlist": "دیکھنی والی فہرست کی اطلاع فعال",
+    "config-email-auth": "فعال ای میل کی تصدیق",
+    "config-email-sender": "ای میل ایڈریس پر واپس:",
+    "config-upload-deleted": "ڈائرکٹری خارج کردہ فائلوں کے لیے:",
+    "config-advanced-settings": "اعلی درجے کی ترتیب",
+    "config-cache-options": "اعتراض کیش کے لئے ترتیب دینا:",
+    "config-extensions": "ملانے",
+    "config-install-step-done": "کیا کیا",
+    "config-install-step-failed": "میں ناکام رہے",
+    "config-install-extensions": "سمیت ملانے",
+    "config-install-database": "ڈیٹا بیس کی ترتیب",
+    "config-install-pg-commit": "تبدیلیوں کے ارتکاب",
+    "config-install-keys": "خفیہ چابیاں پیدا",
+    "config-install-sysop": "منتظم کے صارف کے اکاؤنٹ کی تشکیل",
+    "config-install-mainpage": "پہلے سے طے شدہ مواد کے ساتھ سب سے کامیاب کی تشکیل",
+    "mainpagetext": "'''میڈیاوکی کو کامیابی سے چالو کردیا گیا ہے۔.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/uz.json b/includes/installer/i18n/uz.json
new file mode 100644 (file)
index 0000000..f3f8f07
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Sociologist"
+        ]
+    },
+    "config-admin-password-blank": "Administrator hisob yozuvi uchun maxfiy soʻz kiriting.",
+    "mainpagetext": "'''MediaWiki muvaffaqiyatli o'rnatildi.'''",
+    "mainpagedocfooter": "Wiki dasturini ishlatish haqida ma'lumot olish uchun  [//meta.wikimedia.org/wiki/Help:Contents Foydalanuvchi qo'llanmasi] sahifasiga murojaat qiling.\n\n== Dastlabki qadamlar ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Moslamalar ro'yxati]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki haqida ko'p so'raladigan savollar]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki yangi versiyasi chiqqanda xabar berish ro'yxati]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/vec.json b/includes/installer/i18n/vec.json
new file mode 100644 (file)
index 0000000..8031239
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Vajotwo"
+        ]
+    },
+    "mainpagetext": "'''Instałasion de MediaWiki conpletà coretamente.'''",
+    "mainpagedocfooter": "Varda ła [//meta.wikimedia.org/wiki/Aiuto:Sommario Guida utente] par majori informasion so l'uso de sto software wiki.\n\n== Par scumisiar ==\n\nI seguenti cołegamenti i xé en łengua inglese:\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Inpostasion de configurasion]\n* [//www.mediawiki.org/wiki/Manual:FAQ Domande frequenti so MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list anunsi MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/vep.json b/includes/installer/i18n/vep.json
new file mode 100644 (file)
index 0000000..71fcf34
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Игорь Бродский"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki-likutim om seižutadud jügedusita.'''",
+    "mainpagedocfooter": "Kc. [//meta.wikimedia.org/wiki/Help:Kävutajan abukirj], miše sada informacijad wikin kävutamižes.\n\n== Erased tarbhaižed resursad ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Järgendusiden nimikirjutez]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce počtnimikirjutez]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/vi.json b/includes/installer/i18n/vi.json
new file mode 100644 (file)
index 0000000..340b643
--- /dev/null
@@ -0,0 +1,17 @@
+{
+    "@metadata": {
+        "authors": [
+            "පසිඳු කාවින්ද"
+        ]
+    },
+    "config-information": "Thông tin",
+    "config-page-language": "Ngôn ngữ",
+    "config-page-name": "Tên",
+    "config-page-options": "Tùy chọn",
+    "config-ns-generic": "Dự án",
+    "config-admin-password": "Mật khẩu:",
+    "config-admin-email": "Địa chỉ thư điện tử:",
+    "config-help": "Trợ giúp",
+    "mainpagetext": "'''MediaWiki đã được cài đặt thành công.'''",
+    "mainpagedocfooter": "Xin đọc [//meta.wikimedia.org/wiki/Help:Contents Hướng dẫn sử dụng] để biết thêm thông tin về cách sử dụng phần mềm wiki.\n\n== Để bắt đầu ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Danh sách các thiết lập cấu hình]\n* [//www.mediawiki.org/wiki/Manual:FAQ Các câu hỏi thường gặp MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Danh sách gửi thư về việc phát hành MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/vo.json b/includes/installer/i18n/vo.json
new file mode 100644 (file)
index 0000000..050adae
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''El MediaWiki pestiton benosekiko.'''",
+    "mainpagedocfooter": "Konsultolös [//meta.wikimedia.org/wiki/Help:Contents Gebanageidian] ad tuvön nünis dö geb programema vükik.\n\n== Nüdugot ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Parametalised]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki: SSP]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Potalised tefü fomams nulik ela MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/vro.json b/includes/installer/i18n/vro.json
new file mode 100644 (file)
index 0000000..a9c7a8e
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki tarkvara paika säet.'''",
+    "mainpagedocfooter": "Vikitarkvara pruukmisõ kotsilõ loeq mano:\n* [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide MediaWiki pruukmisoppus (inglüse keelen)].\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Säädmiisi oppus (inglüse keelen)]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki kõgõ küsütümbäq küsümiseq (inglüse keelen)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-postilist, minka andas teedäq MediaWiki vahtsist kujõst]."
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/wa.json b/includes/installer/i18n/wa.json
new file mode 100644 (file)
index 0000000..576d2db
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Srtxg"
+        ]
+    },
+    "mainpagetext": "'''Li programe MediaWiki a stî astalé a l' idêye.'''"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/war.json b/includes/installer/i18n/war.json
new file mode 100644 (file)
index 0000000..3c9f1b4
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Harvzsf"
+        ]
+    },
+    "mainpagetext": "'''Malinamposon an pag-instalar han MediaWiki.'''",
+    "mainpagedocfooter": "Kitaa an [//meta.wikimedia.org/wiki/Help:Contents User's Guide] para hin impormasyon ha paggamit han wiki nga softweyr.\n\n== Ha pagtikang==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/wo.json b/includes/installer/i18n/wo.json
new file mode 100644 (file)
index 0000000..44ffdf7
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''Campug MediaWiki gi sotti na . '''",
+    "mainpagedocfooter": "Saytul [//meta.wikimedia.org/wiki/Ndimbal:Ndefu Gindikaayu jëfandikukat bi] ngir yeneeni xibaar ci jëfandiku gu tëriin gi.\n\n== Tambali ak MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Limu jumtukaayi kocc-koccal gi]\n* [//www.mediawiki.org/wiki/Manual:FAQ FAQ MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Limu waxtaan ci liy-génn ci MediaWiki]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/wuu.json b/includes/installer/i18n/wuu.json
new file mode 100644 (file)
index 0000000..e7467bf
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Wu-chinese.com"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki安装成功哉!'''",
+    "mainpagedocfooter": "请访问[//meta.wikimedia.org/wiki/Help:Contents 用户手册]以获得使用此维基软件个信息!\n\n== 入门 ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki 配置设置列表]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 常见问题解答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 发布邮件列表]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/xal.json b/includes/installer/i18n/xal.json
new file mode 100644 (file)
index 0000000..9fe1a42
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Huuchin"
+        ]
+    },
+    "mainpagetext": "Йовудта Mediawiki гүүлһүдә тәвллһн.'''",
+    "mainpagedocfooter": "Тер бики закллһна теткүл ю кеһәд олзлх туск [//meta.wikimedia.org/wiki/Help:Contents көтлвр] дастн.\n\n== Туста заавр ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Көгүдә бүрткл]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki туск ЮмБи]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki шинҗллһнә бүрткл]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/yi.json b/includes/installer/i18n/yi.json
new file mode 100644 (file)
index 0000000..d1f27be
--- /dev/null
@@ -0,0 +1,32 @@
+{
+    "@metadata": {
+        "authors": [
+            "פוילישער",
+            "පසිඳු කාවින්ද"
+        ]
+    },
+    "config-desc": "דער אינסטאלירער פאר מעדיעוויקי",
+    "config-title": "מעדיעוויקי $1 אינסטאלירונג",
+    "config-information": "אינפֿארמאציע",
+    "config-wiki-language": "ווקי שפראך:",
+    "config-back": "→ צוריק",
+    "config-continue": "פֿארזעצן ←",
+    "config-page-language": "שפראַך",
+    "config-page-name": "נאָמען",
+    "config-page-options": "ברירות",
+    "config-db-type": "דאטנבאזע טיפ:",
+    "config-db-name": "דאטנבאזע נאָמען:",
+    "config-project-namespace": "פראיעקט נאָמענטייל:",
+    "config-ns-generic": "פראיעקט",
+    "config-admin-name": "אײַער נאָמען:",
+    "config-admin-password": "פאַסווארט:",
+    "config-admin-password-mismatch": "די צוויי פאסוועטרט איר האט איינגעגעבן שטימען נישט.",
+    "config-admin-email": "בליצפּאָסט אַדרעס:",
+    "config-install-tables": "שאפן טאבעלעס",
+    "config-install-tables-exist": "'''ווארענונג''': זעט אויס אז די מעדיעוויקי טאבעלעס עקזיסטירן שוין.\nאיבערהיפן שאפֿן.",
+    "config-download-localsettings": "אראפלאדן <code>LocalSettings.php</code>",
+    "config-help": "הילף",
+    "config-nofile": "מ'האט נישט געקענט טרעפן די טעקע \"$1\". צי האט מען זי אויסגעמעקט?",
+    "mainpagetext": "'''מעדיעוויקי אינסטאלירט מיט דערפאלג.'''",
+    "mainpagedocfooter": "גיט זיך אן עצה מיט [//meta.wikimedia.org/wiki/Help:Contents באניצער'ס וועגווײַזער] פֿאר אינפֿארמאציע וויאזוי זיך באנוצן מיט וויקי ווייכוואַרג.\n\n== נוצליכע וועבלינקען פֿאַר אנהייבערס ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings רשימה פון קאנפֿיגוראציעס]\n* [//www.mediawiki.org/wiki/Manual:FAQ אפֿט געפֿרעגטע שאלות]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce מעדיעוויקי באפֿרײַאונג פאסטליסטע]* [//www.mediawiki.org/wiki/Localisation#Translation_resources איבערזעצן מעדיעוויקי אין אײַער שפראך]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/yo.json b/includes/installer/i18n/yo.json
new file mode 100644 (file)
index 0000000..a575159
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Demmy"
+        ]
+    },
+    "mainpagetext": "'''MediaWiki ti jẹ́ gbígbékọ́sínú láyọrísírere.'''",
+    "mainpagedocfooter": "Ẹ ṣàbẹ̀wò sí [//meta.wikimedia.org/wiki/Help:Contents User's Guide] fún ìfitólétí nípa líló atòlànà wíkì.\n\n== Láti bẹ̀rẹ̀ ==\n*  [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/yue.json b/includes/installer/i18n/yue.json
new file mode 100644 (file)
index 0000000..18dbc25
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''MediaWiki已經裝好。'''",
+    "mainpagedocfooter": "參閱[//meta.wikimedia.org/wiki/Help:Contents 用戶指引](英),裏面有資料講點用wiki軟件。\n\n==開始使用==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings 配置設定清單](英)\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 常見問題](英)\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈郵件名單](英)"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/zea.json b/includes/installer/i18n/zea.json
new file mode 100644 (file)
index 0000000..14b15a6
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagetext": "'''De installaotie van MediaWiki is geslaegd.'''",
+    "mainpagedocfooter": "Raedpleeg de [//meta.wikimedia.org/wiki/ZEA_Ulpe:Inhoudsopgaeve andleidieng] voe informatie over 't gebruuk van de wikisoftware.\n\n== Meer ulpe over MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lieste mie instelliengen]\n* [//www.mediawiki.org/wiki/Manual:FAQ Veehestelde vraehen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailienglieste voe ankondigiengen van nieuwe versies]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/zh-hans.json b/includes/installer/i18n/zh-hans.json
new file mode 100644 (file)
index 0000000..06c7646
--- /dev/null
@@ -0,0 +1,315 @@
+{
+    "@metadata": {
+        "authors": [
+            "Anthony Fok",
+            "Cwek",
+            "Hydra",
+            "Hzy980512",
+            "Liangent",
+            "Makecat",
+            "PhiLiP",
+            "Xiaomingyan",
+            "Yfdyh000",
+            "乌拉跨氪",
+            "阿pp",
+            "아라"
+        ]
+    },
+    "config-desc": "MediaWiki安装程序",
+    "config-title": "MediaWiki $1配置",
+    "config-information": "信息",
+    "config-localsettings-upgrade": "已检测到<code>LocalSettings.php</code>文件。要升级该配置,请在下面的框中输入<code>$wgUpgradeKey</code>的值。您可以在<code>LocalSettings.php</code>中找到它。",
+    "config-localsettings-cli-upgrade": "已检测到<code>LocalSettings.php</code>文件。要升级该配置,请直接运行<code>update.php</code>。",
+    "config-localsettings-key": "升级密钥:",
+    "config-localsettings-badkey": "您提供的密钥不正确。",
+    "config-upgrade-key-missing": "检测到MediaWiki的配置已经存在。若要升级该配置,请将下面一行文本添加到<code>LocalSettings.php</code>的底部:\n\n$1",
+    "config-localsettings-incomplete": "当前的<code>LocalSettings.php</code>可能并不完整,因为变量$1没有设置。请在<code>LocalSettings.php</code>设置该变量,并单击“{{int:Config-continue}}”。",
+    "config-localsettings-connection-error": "在使用<code>LocalSettings.php</code>或<code>AdminSettings.php</code>中指定的设置连接数据库时发生错误。请修复相应设置并重试。\n\n$1",
+    "config-session-error": "启动会话出错:$1",
+    "config-session-expired": "您的会话数据可能已经过期,当前会话的使用期限被设定为$1。您可以在php.ini中设置<code>session.gc_maxlifetime</code>来延长此期限,并重新启动本配置程序。",
+    "config-no-session": "您的会话数据丢失了!请检查php.ini并确保<code>session.save_path</code>被设置为适当的目录。",
+    "config-your-language": "您使用的语言:",
+    "config-your-language-help": "选择在安装过程中使用的语言。",
+    "config-wiki-language": "Wiki使用的语言:",
+    "config-wiki-language-help": "选择将要安装的wiki在多数情况下使用的语言。",
+    "config-back": "← 后退",
+    "config-continue": "继续 →",
+    "config-page-language": "语言",
+    "config-page-welcome": "欢迎使用MediaWiki!",
+    "config-page-dbconnect": "连接到数据库",
+    "config-page-upgrade": "升级当前配置",
+    "config-page-dbsettings": "数据库设置",
+    "config-page-name": "名称",
+    "config-page-options": "选项",
+    "config-page-install": "安装",
+    "config-page-complete": "完成!",
+    "config-page-restart": "重新开始安装",
+    "config-page-readme": "自述",
+    "config-page-releasenotes": "发布说明",
+    "config-page-copying": "复制",
+    "config-page-upgradedoc": "更新",
+    "config-page-existingwiki": "已有wiki",
+    "config-help-restart": "是否要清除所有已输入且保存的数据,并重新启动安装过程吗?",
+    "config-restart": "是的,重启吧",
+    "config-welcome": "=== 环境检查 ===\n对当前环境是否适合安装MediaWiki作基本的检查。如果您在安装过程中需要帮助,请提供这些检查的结果。",
+    "config-copyright": "=== 版权和条款 ===\n\n$1\n\n本程序为自由软件;您可依据自由软件基金会所发表的GNU通用公共授权条款规定,就本程序再为发布与/或修改;无论您依据的是本授权的第二版或(您自行选择的)任一日后发行的版本。\n\n本程序是基于使用目的而加以发布,然而'''不负任何担保责任''';亦无对'''适售性'''或'''特定目的适用性'''所为的默示性担保。详情请参照GNU通用公共授权。\n\n您应已收到附随于本程序的<doclink href=\"Copying\">GNU通用公共授权的副本</doclink>;如果没有,请写信至自由软件基金会:59 Temple Place - Suite 330, Boston, Ma 02111-1307, USA,或[http://www.gnu.org/copyleft/gpl.html 在线阅读]。",
+    "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/zh-hans MediaWiki首页]\n* [//www.mediawiki.org/wiki/Help:Contents/zh-hans 用户指南]\n* [//www.mediawiki.org/wiki/Manual:Contents 管理员指南]\n* [//www.mediawiki.org/wiki/Manual:FAQ/zh-hans 常见问题解答]\n----\n* <doclink href=Readme>自述文件</doclink>\n* <doclink href=ReleaseNotes>发行说明</doclink>\n* <doclink href=Copying>协议副本</doclink>\n* <doclink href=UpgradeDoc>升级</doclink>",
+    "config-env-good": "环境检查已经完成。您可以安装MediaWiki。",
+    "config-env-bad": "环境检查已经完成。您不能安装MediaWiki。",
+    "config-env-php": "PHP $1已安装。",
+    "config-env-php-toolow": "已安装PHP $1;但是,MediaWiki需要PHP $2或更高版本。",
+    "config-unicode-using-utf8": "使用Brion Vibber的utf8_normalize.so实现Unicode正常化。",
+    "config-unicode-using-intl": "使用[http://pecl.php.net/intl intl PECL扩展]实现Unicode正常化。",
+    "config-unicode-pure-php-warning": "'''警告:'''因为尚未安装 [http://pecl.php.net/intl intl PECL 扩展]以处理 Unicode 正常化,故只能退而采用运行较慢的纯 PHP 实现的方法。\n如果您运行着一个高流量的站点,请参阅 [//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-no-db": "找不到合适的数据库驱动!您需要为PHP安装数据库驱动。目前支持以下数据库:$1。\n\n如果您正在使用共享主机,请向您的主机提供商申请安装合适的数据库驱动。如果您通过自行编译安装的PHP,请对其进行重新配置以启用数据库客户端,例如使用<code>./configure --with-mysql</code>。如果您通过Debian或Ubuntu包安装的PHP,您还需要安装php5-mysql模块。",
+    "config-outdated-sqlite": "'''警告''':您已安装SQLite $1,但是它的版本低于最低要求版本$2。因此您无法选择SQLite。",
+    "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]已启用!'''\n此选项会无法预测地破坏输入的数据,请将其禁用,否则您将不能安装或使用MediaWiki。",
+    "config-magic-quotes-sybase": "'''毁灭性错误:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase]已启用!'''\n此选项会无法预测地破坏输入的数据,请将其禁用,否则您将不能安装或使用MediaWiki。",
+    "config-mbstring": "'''毁灭性错误:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]已启用!'''\n此选项会导致错误并不可预测地破坏数据,请将其禁用,否则您将不能安装或使用MediaWiki。",
+    "config-ze1": "'''毁灭性错误:[http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]已启用!'''\n此选项将导致MediaWiki出现极其严重的故障,请将其禁用,否则您将不能安装或使用MediaWiki。",
+    "config-safe-mode": "'''警告:'''PHP的[http://www.php.net/features.safe-mode 安全模式]已启用。它可能会导致一些问题,尤其在对文件上传和数学公式<code>math</code>的支持方面。",
+    "config-xml-bad": "缺少PHP的XML模块。MediaWiki需要使用该模块提供的函数,在当前配置下将无法工作。如果您正在使用Mandrake Linux,请安装php-xml包。",
+    "config-pcre": "可能缺少PCRE的支持模块。MediaWiki的运行需要兼容于Perl的正则表达式函数。",
+    "config-pcre-no-utf8": "'''毁灭性错误''':PHP的PCRE模块在编译时可能没有包含PCRE_UTF8支持。MediaWiki需要UTF-8支持才能正常工作。",
+    "config-memory-raised": "PHP的内存使用上限<code>memory_limit</code>为$1,自动提升到$2。",
+    "config-memory-bad": "'''警告:'''PHP的内存使用上限<code>memory_limit</code>为$1。该设定可能过低,并导致安装失败!",
+    "config-ctype": "'''毁灭性错误''':PHP必须有[http://www.php.net/manual/en/ctype.installation.php Ctype 扩展]来支持编译。",
+    "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],无法启用对象缓存。\nObject caching is not enabled.",
+    "config-mod-security": "'''警告''':您的服务器已启动[http://modsecurity.org/ mod_security]。若其配置错误, 会导致MediaWiki和其他软件的错误并允许用户任意发布内容。如果您遇到任何错误,请查阅[http://modsecurity.org/documentation/ mod_security文档]或联系您的客服。",
+    "config-diff3-bad": "找不到GNU diff3。",
+    "config-git": "发现Git版本控制软件:<code>$1</code>",
+    "config-git-bad": "Git版本控制软件未找到。",
+    "config-imagemagick": "已找到ImageMagick:<code>$1</code>。如果你启用了上传功能,缩略图功能也将被启用。",
+    "config-gd": "已找到内建的GD图形库。如果你启用了上传功能,缩略图功能也将被启用。",
+    "config-no-scaling": "找不到GD库或ImageMagick。缩略图功能将不可用。",
+    "config-no-uri": "'''错误:'''无法确定当前的URI。安装已中断。",
+    "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>存在允许执行任意脚本的漏洞。尽管MediaWiki会对所有已上传的文件进行安全检查,但我们仍然强烈建议您在启用上传功能前[//www.mediawiki.org/wiki/Manual:Security#Upload_security 关闭该安全漏洞]。",
+    "config-no-cli-uploads-check": "'''警告''':在CLI安装过程中,没有对您的默认上传目录(<code>$1</code>)进行执行任意脚本的漏洞检查。",
+    "config-brokenlibxml": "您的系统安装的PHP和libxml2版本组合存在故障,并可能在MediaWiki和其他web应用程序中造成隐藏的数据损坏。请将PHP升级到5.2.9或以上,libxml2升级到2.7.3或以上([//bugs.php.net/bug.php?id=45996 PHP的故障报告])。安装已中断。",
+    "config-using531": "由于函数<code>__call()</code>的引用参数存在故障,PHP $1和MediaWiki无法兼容。请升级到PHP 5.3.2或更高版本,或降级到PHP 5.3.0以修复该问题。安装已中断。",
+    "config-suhosin-max-value-length": "Suhosin已经安装并将GET请求的参数长度限制在$1字节。MediaWiki的ResourceLoader部件可以在此限制下正常工作,但其性能会被降低。如果可能,请在<code>php.ini</code>中将<code>suhosin.get.max_value_length</code>设为1024或更高值,并在LocalSettings.php中将<code>$wgResourceLoaderMaxQueryLength</code>设为同一值。",
+    "config-db-type": "数据库类型:",
+    "config-db-host": "数据库主机:",
+    "config-db-host-help": "如果您的数据库在别的服务器上,请在这里输入它的域名或IP地址。\n\n如果您在使用共享网站套餐,您的网站商应该已在他们的控制面板中给您数据库信息了。\n\n如果您在Windows中安装并且使用MySQL,“localhost”可能无效。如果确实无效,请输入“127.0.0.1”作为IP地址。\n\n如果您在使用PostgreSQL,并且要用Unix socket来连接,请留空。",
+    "config-db-host-oracle": "数据库透明网络底层(TNS):",
+    "config-db-host-oracle-help": "请输入合法的[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 本地连接名],并确保tnsnames.ora文件对本安装程序可见。<br />如果您使用的客户端库为10g或更新的版本,您还可以使用[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 简单连接名方法](easy connect naming method)。",
+    "config-db-wiki-settings": "标识本wiki",
+    "config-db-name": "数据库名称:",
+    "config-db-name-help": "请输入一个可以标识您的wiki的名称。请勿使用空格。\n\n如果您正在使用共享web主机,您的主机提供商或会给您指定一个数据库名称,或会让您通过控制面板创建数据库。",
+    "config-db-name-oracle": "数据库模式:",
+    "config-db-account-oracle-warn": "现有三种已支持方案可以将Oracle设置为后端数据库:\n\n如果您希望在安装过程中创建数据库帐户,请为安装程序提供具有SYSDBA角色的数据库帐户,并为web访问帐户指定所需身份证明;否则您可以手动创建web访问的账户并仅须提供该帐户(确保帐户已有创建方案对象(schema object)的所需权限);或提供两个不同的帐户,其一具有创建权限,另一则被限制为web访问。\n\n具有所需权限账户的创建脚本存放于本程序的“maintenance/oracle/”目录下。请注意,使用受限制的帐户将禁用默认帐户的所有维护性功能。",
+    "config-db-install-account": "用于安装的用户帐号",
+    "config-db-username": "数据库用户名:",
+    "config-db-password": "数据库密码:",
+    "config-db-password-empty": "请为新数据库用户$1输入密码。尽管您可以创建不使用密码的用户,但这样做并不安全。",
+    "config-db-install-username": "请输入在安装过程中用于连接数据库的用户名。请勿输入MediaWiki帐号的用户名,请输入您数据库的用户名。",
+    "config-db-install-password": "请输入在安装过程中用于连接数据库的密码。请勿输入MediaWiki帐号的密码,请输入您数据库的密码。",
+    "config-db-install-help": "请输入在安装过程中用于连接数据库的用户名和密码。",
+    "config-db-account-lock": "在普通操作中使用相同的用户名和密码",
+    "config-db-wiki-account": "用于普通操作的用户帐号",
+    "config-db-wiki-help": "输入在普通的wiki操作中(安装完成后)将用于连接数据库的用户名和密码。如果该帐号并不存在,而安装帐号具有足够的权限,该用户帐号会被自动创建,并被赋予足以运行此wiki的最低权限。",
+    "config-db-prefix": "数据库表前缀:",
+    "config-db-prefix-help": "如果您需要在多个wiki之间(或在MediaWiki与其他web应用程序之间)共享一个数据库,您可以通过添加前缀的方式来避免出现表名称的冲突。请勿使用空格。\n\n此字段通常可留空。",
+    "config-db-charset": "数据库字符集",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 二进制",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 UTF-8(向后兼容)",
+    "config-charset-help": "'''警告:'''如果您在MySQL 4.1+中使用'''向后兼容的UTF-8'''字符集,并在之后使用<code>mysqldump</code>备份了数据库,则可能损坏所有的非ASCII字符,从而不可逆地破坏您的备份!\n\n在'''二进制模式'''下,MediaWiki会将UTF-8编码的文本存于数据库的二进制字段中。相对于MySQL的UTF-8模式,这种方法效率更高,并允许您使用全范围的Unicode字符。\n\n在'''UTF-8模式'''下,MySQL将知道您数据使用的字符集,并能适当地提供和转换内容。但这样做您将无法在数据库中存储[//zh.wikipedia.org/wiki/基本多文种平面 基本多文种平面]以外的字符。",
+    "config-mysql-old": "需要MySQL $1或更新的版本,您的版本为$2。",
+    "config-db-port": "数据库端口:",
+    "config-db-schema": "MediaWiki的数据库模式",
+    "config-db-schema-help": "此数据库模式通常是正确的,请在有明确需求时才改动之。",
+    "config-pg-test-error": "无法连接到数据库'''$1''':$2",
+    "config-sqlite-dir": "SQLite数据目录:",
+    "config-sqlite-dir-help": "SQLite会将所有的数据存储于单一文件中。\n\n您所提供的目录必须在安装过程中对网页服务器可写。\n\n该目录'''不应'''允许通过web访问,因此我们不会将数据文件和PHP文件放在一起。\n\n安装程序在创建数据文件时,亦会在相同目录下创建<code>.htaccess</code>以控制权限。假若此等控制失效,则可能会将您的数据文件暴露于公共空间,让他人可以获取用户数据(电子邮件地址、杂凑后的密码)、被删除的版本以及其他在wiki上被限制访问的数据。\n\n请考虑将数据库统一放置在某处,如<code>/var/lib/mediawiki/yourwiki</code>下。",
+    "config-oracle-def-ts": "默认表空间:",
+    "config-oracle-temp-ts": "临时表空间:",
+    "config-support-info": "MediaWiki支持以下数据库系统:\n\n$1\n\n如果您在下面列出的数据库系统中没有找到您希望使用的系统,请根据上方链向的指引启用支持。",
+    "config-support-mysql": "* $1是MediaWiki的首选数据库,对它的支持最为完备([http://www.php.net/manual/en/mysql.installation.php 如何将对MySQL的支持编译进PHP中])",
+    "config-support-postgres": "* $1是一种流行的开源数据库系统,可作为MySQL的替代([http://www.php.net/manual/en/pgsql.installation.php 如何将对PostgreSQL的支持编译进PHP中])。本程序中可能依然存在一些小而明显的错误,因此并不建议在生产环境中使用该数据库系统。",
+    "config-support-sqlite": "* $1是一种轻量级的数据库系统,能被良好地支持。([http://www.php.net/manual/en/pdo.installation.php 如何将对SQLite的支持编译进PHP中],须使用PDO)",
+    "config-support-oracle": "* $1是一种商用企业级的数据库。([http://www.php.net/manual/en/oci8.installation.php 如何将对OCI8的支持编译进PHP中])",
+    "config-header-mysql": "MySQL设置",
+    "config-header-postgres": "PostgreSQL设置",
+    "config-header-sqlite": "SQLite设置",
+    "config-header-oracle": "Oracle设置",
+    "config-invalid-db-type": "无效的数据库类型",
+    "config-missing-db-name": "您必须为“数据库名称”输入内容",
+    "config-missing-db-host": "您必须为“数据库主机”输入内容",
+    "config-missing-db-server-oracle": "您必须为“数据库透明网络底层(TNS)”输入内容",
+    "config-invalid-db-server-oracle": "无效的数据库TNS“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)、下划线(_)和点号(.)。",
+    "config-invalid-db-name": "无效的数据库名称“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)、下划线(_)和连字号(-)。",
+    "config-invalid-db-prefix": "无效的数据库前缀“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)、下划线(_)和连字号(-)。",
+    "config-connection-error": "$1。\n\n请检查下列的主机、用户名和密码设置后重试。",
+    "config-invalid-schema": "无效的MediaWiki数据库模式“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)和下划线(_)。",
+    "config-db-sys-create-oracle": "安装程序仅支持使用SYSDBA帐户创建新帐户。",
+    "config-db-sys-user-exists-oracle": "用户帐户“$1”已经存在。SYSDBA仅可用于创建新帐户!",
+    "config-postgres-old": "需要PostgreSQL $1或更新的版本,您的版本为$2。",
+    "config-sqlite-name-help": "请为您的wiki指定一个用于标识的名称。请勿使用空格或连字号,该名称将被用作SQLite的数据文件名。",
+    "config-sqlite-parent-unwritable-group": "由于父目录<code><nowiki>$2</nowiki></code>对网页服务器不可写,无法创建数据目录<code><nowiki>$1</nowiki></code>。\n\n安装程序已确定您网页服务器所使用的用户。请将<code><nowiki>$3</nowiki></code>目录设为对该用户可写以继续安装过程。在Unix/Linux系统中,您可以逐行输入下列命令:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "由于父目录<code><nowiki>$2</nowiki></code>对网页服务器不可写,无法创建数据目录<code><nowiki>$1</nowiki></code>。\n\n安装程序无法确定您网页服务器所使用的用户。请将<code><nowiki>$3</nowiki></code>目录设为全局可写(对所有用户)以继续安装过程。在Unix/Linux系统中,您可以逐行输入下列命令:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "创建数据目录“$1”时发生错误。请检查路径后重试。",
+    "config-sqlite-dir-unwritable": "无法写入目录“$1”。请修改该目录的权限,使其对网页服务器可写后重试。",
+    "config-sqlite-connection-error": "$1。\n\n请检查下列的数据目录和数据库名称后重试。",
+    "config-sqlite-readonly": "文件<code>$1</code>不可写。",
+    "config-sqlite-cant-create-db": "无法创建数据文件<code>$1</code>。",
+    "config-sqlite-fts3-downgrade": "PHP缺少FTS3支持,正在降级数据表",
+    "config-can-upgrade": "在数据库中发现了MediaWiki的数据表。要将它们升级至MediaWiki $1,请点击'''继续'''。",
+    "config-upgrade-done": "升级完成。\n\n现在您可以[$1 开始使用您的wiki]了。\n\n如果您需要重新生成<code>LocalSettings.php</code>文件,请点击下面的按钮。除非您的wiki出现了问题,我们'''不推荐'''您执行此操作。",
+    "config-upgrade-done-no-regenerate": "升级完成。\n\n现在您可以[$1 开始使用您的wiki]了。",
+    "config-regenerate": "重新生成LocalSettings.php →",
+    "config-show-table-status": "<code>SHOW TABLE STATUS</code>语句执行失败!",
+    "config-unknown-collation": "'''警告:'''数据库使用了无法识别的整理。",
+    "config-db-web-account": "供网页访问使用的数据库帐号",
+    "config-db-web-help": "请指定在wiki执行普通操作时,网页服务器用于连接数据库服务器的用户名和密码。",
+    "config-db-web-account-same": "使用和安装程序相同的帐号",
+    "config-db-web-create": "如果帐号不存在,则自动创建",
+    "config-db-web-no-create-privs": "您指定给安装程序的帐号缺少创建帐号的权限,因此您指定的帐号必须已经存在。",
+    "config-mysql-engine": "存储引擎:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''警告''':您选择了MyISAM作为MySQL的存储引擎,MediaWiki并不推荐您这么做,因为:\n* 它仅能通过表锁定来勉强支持并发\n* 与其他引擎相比,它更容易被损坏\n* MediaWiki代码库并不总会去处理MyISAM\n\n如果您的MySQL程序支持InnoDB,我们高度推荐您使用该引擎替代MyISAM。\n如果您的MySQL程序不支持InnoDB,请考虑升级。",
+    "config-mysql-only-myisam-dep": "''''警告:'''MyISAM是MySQL唯一可用的存储引擎,但不适合用于MediaWiki,是由于:\n*由于只支持表级锁定,几乎不支持并发。\n*它比其他引擎更容易损坏。\n*MediaWiki代码不能总是按照预设地操作MyISAM。\n\n你的MySQL不支持InnoDB,是时候升级了。",
+    "config-mysql-engine-help": "'''InnoDB'''通常是最佳选项,因为它对并发操作有着良好的支持。\n\n'''MyISAM'''在单用户或只读环境下可能会有更快的性能表现。但MyISAM数据库出错的概率一般要大于InnoDB数据库。",
+    "config-mysql-charset": "数据库字符集:",
+    "config-mysql-binary": "二进制",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "在'''二进制模式'''下,MediaWiki会将UTF-8编码的文本存于数据库的二进制字段中。相对于MySQL的UTF-8模式,这种方法效率更高,并允许您使用全范围的Unicode字符。\n\n在'''UTF-8模式'''下,MySQL将知道您数据使用的字符集,并能适当地提供和转换内容。但这样做您将无法在数据库中存储[//zh.wikipedia.org/wiki/基本多文种平面 基本多文种平面]以外的字符。",
+    "config-site-name": "Wiki的名称:",
+    "config-site-name-help": "填入的内容会出现在浏览器的标题栏以及其他多处位置中。",
+    "config-site-name-blank": "输入网站的名称。",
+    "config-project-namespace": "项目名字空间:",
+    "config-ns-generic": "项目",
+    "config-ns-site-name": "与wiki名称相同:$1",
+    "config-ns-other": "其他(自定义)",
+    "config-ns-other-default": "我的Wiki",
+    "config-project-namespace-help": "依循维基百科形成的惯例,许多wiki将他们的方针页面存放在与内容页面不同的“'''项目名字空间'''”中。所有位于该名字空间下的页面标题都会被冠以固定的前缀,您可以在此处指定这一前缀。传统上,这一前缀应与wiki的命名保持一致,但请勿在其中使用标点符号,如“#”或“:”。",
+    "config-ns-invalid": "指定的名字空间“<nowiki>$1</nowiki>”无效,请为项目名字空间指定其他名称。",
+    "config-ns-conflict": "指定的名字空间“<nowiki>$1</nowiki>”与默认的MediaWiki名字空间冲突。请指定一个不同的项目名字空间。",
+    "config-admin-box": "管理员帐号",
+    "config-admin-name": "您的名字:",
+    "config-admin-password": "密码:",
+    "config-admin-password-confirm": "确认密码:",
+    "config-admin-help": "在此输入您想使用的用户名,例如“乔帮主”。您将使用该名称登录本wiki。",
+    "config-admin-name-blank": "输入管理员的用户名。",
+    "config-admin-name-invalid": "指定的用户名“<nowiki>$1</nowiki>”无效,请指定其他用户名。",
+    "config-admin-password-blank": "输入管理员帐号的密码。",
+    "config-admin-password-same": "密码不能和用户名相同。",
+    "config-admin-password-mismatch": "两次输入的密码并不相同。",
+    "config-admin-email": "电子邮件地址:",
+    "config-admin-email-help": "输入电子邮件地址后,您可以收到此wiki上其他用户发来的电子邮件,并能重置您的密码,还可在监视列表中页面被更改时收到邮件通知。您可以将此字段留空。",
+    "config-admin-error-user": "在创建用户名为“<nowiki>$1</nowiki>”的管理员帐号时发生内部错误。",
+    "config-admin-error-password": "在为管理员“<nowiki>$1</nowiki>”设置密码时发生内部错误:<pre>$2</pre>",
+    "config-admin-error-bademail": "您输入了无效的电子邮件地址。",
+    "config-subscribe": "订阅[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 发行公告邮件列表]。",
+    "config-subscribe-help": "此低流量的邮件列表仅用于发行公告,其中包括重要安全公告。请订阅该列表以便在新的版本推出时升级您的MediaWiki。",
+    "config-subscribe-noemail": "您选择了订阅发行公告邮件列表,但没有提供电子邮件地址。请提供一个电子邮件地址以订阅邮件列表。",
+    "config-almost-done": "您几乎已经完成了!现在您可以跳过剩下的配置流程并立即安装wiki。",
+    "config-optional-continue": "多问我一些问题吧。",
+    "config-optional-skip": "我已经不耐烦了,赶紧安装我的wiki。",
+    "config-profile": "用户权限配置:",
+    "config-profile-wiki": "开放的wiki",
+    "config-profile-no-anon": "需要注册帐号",
+    "config-profile-fishbowl": "编辑受限",
+    "config-profile-private": "非公开wiki",
+    "config-profile-help": "如果您允许尽量多的人编写wiki,网站上的内容会更加丰富。在MediaWiki中,您可以轻松地审查最近更改,并轻易回退掉新手或破坏者造成的损害。\n\n然而,许多人觉得让MediaWiki存在多种角色将更加好用;同时,要说服所有人都愿以wiki的方式作贡献并非一件易事。因此,您可以有以下选择:\n\n'''{{int:config-profile-wiki}}'''允许包括未登录用户在内的所有人编辑。'''{{int:config-profile-no-anon}}'''的wiki需要额外的注册流程,这有可能会阻碍随意贡献者。\n\n'''{{int:config-profile-fishbowl}}'''模式只允许获批准的用户编辑,但对公众开放页面浏览(包括历史记录)。'''{{int:config-profile-private}}'''则只允许获批准的用户浏览、编辑页面。\n\n安装完成后,您还可以对用户权限进行更多、更复杂的配置,参见[//www.mediawiki.org/wiki/Manual:User_rights 相关的使用手册]。",
+    "config-license": "版权和许可证:",
+    "config-license-none": "页脚无许可证",
+    "config-license-cc-by-sa": "知识共享署名-相同方式分享",
+    "config-license-cc-by": "知识共享署名",
+    "config-license-cc-by-nc-sa": "知识共享署名-非商业性使用-相同方式共享",
+    "config-license-cc-0": "知识共享Zero(公有领域)",
+    "config-license-gfdl": "GNU自由文档许可证1.3或更高版本",
+    "config-license-pd": "公有领域",
+    "config-license-cc-choose": "选择自定义的知识共享许可证",
+    "config-license-help": "许多公共wiki会以[http://freedomdefined.org/Definition 自由许可证]的方式释放出编者的所有贡献。这有助于构建社区的主人翁意识,并能鼓励长期贡献。对于非公共wiki或公司wiki,这并非必要条件。\n\n如果您希望使用来自维基百科的内容,并希望维基百科能接受复制自您的wiki的内容,请选择'''知识共享署名-相同方式共享'''。\n\nGNU自由文档许可证是维基百科曾经使用过的许可证,并迄今有效。然而,该许可证难以理解,并会增加重用内容的难度。",
+    "config-email-settings": "电子邮件设置",
+    "config-enable-email": "启用出站电子邮件",
+    "config-enable-email-help": "如果您希望使用电子邮件功能,请正确配置[http://www.php.net/manual/en/mail.configuration.php PHP的邮件设定]。如果您不需要任何电子邮件功能,请在此处禁用它。",
+    "config-email-user": "启用用户到用户的电子邮件",
+    "config-email-user-help": "允许所有用户互发邮件,假若他们启用了该功能。",
+    "config-email-usertalk": "启用用户讨论页通知",
+    "config-email-usertalk-help": "允许用户收到用户讨论页被修改的通知,假若他们启用了该功能。",
+    "config-email-watchlist": "启用监视列表通知",
+    "config-email-watchlist-help": "允许用户收到与其监视列表有关的通知,假若他们启用了该功能。",
+    "config-email-auth": "启用电子邮件身份验证",
+    "config-email-auth-help": "如果启用此选项,在用户设置或修改电子邮件地址时,就会收到一封邮件,内含确认电子地址的链接。只有经过身份验证的电子邮件地址,才能收到来自其他用户的电子邮件,或任何修改通知的邮件。'''建议'''公开wiki启用本选项,以防对电子邮件功能的滥用。",
+    "config-email-sender": "回复电子邮件地址:",
+    "config-email-sender-help": "输入要用来发送出站电子邮件的地址,该地址将会收到被拒收的邮件。许多邮件服务器要求域名部分必须有效。",
+    "config-upload-settings": "图像和文件上传",
+    "config-upload-enable": "启用文件上传",
+    "config-upload-help": "文件上传可能会将您的服务器暴露在安全风险下。有关更多的信息,请参阅手册的[//www.mediawiki.org/wiki/Manual:Security 安全部分]。\n\n要启用文件上传,请先将MediaWiki根目录下的<code>images</code>子目录更改为对web服务器可写,然后再启用此选项。",
+    "config-upload-deleted": "已删除文件的目录:",
+    "config-upload-deleted-help": "指定用于存放被删除文件的目录。理想情况下,该目录不应能通过web访问。",
+    "config-logo": "标志URL:",
+    "config-logo-help": "在MediaWiki的默认外观中,左侧栏菜单之上有一块135x160像素的标志区。请上传一幅相应大小的图像,并在此输入URL。\n\n你可以用<code>$wgStylePath</code>或<code>$wgScriptPath</code>来表示相对于这些位置的路径。\n\n如果您不希望使用标志,请将本处留空。",
+    "config-instantcommons": "启用即时共享资源",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons 即时共享资源]可以让wiki使用来自[//commons.wikimedia.org/ 维基共享资源]网站的图像、音频和其他媒体文件。要启用该功能,MediaWiki必须能够访问互联网。\n\n有关此功能的详细信息,包括如何将其他wiki网站设为具有类似共享功能的方法,请参考[//mediawiki.org/wiki/Manual:$wgForeignFileRepos 手册]。",
+    "config-cc-error": "知识共享许可证挑选器无法找到结果,请手动输入许可证的名称。",
+    "config-cc-again": "重新挑选……",
+    "config-cc-not-chosen": "选择您希望使用的知识共享许可证,并点击“继续”。",
+    "config-advanced-settings": "高级设置",
+    "config-cache-options": "对象缓存设置:",
+    "config-cache-help": "对象缓存可通过缓存频繁使用的数据来提高MediaWiki的速度。高度推荐中到大型的网站启用该功能,小型网站亦能从其中受益。",
+    "config-cache-none": "无缓存(不影响功能,但对较大型的wiki网站会有速度影响)",
+    "config-cache-accel": "PHP对象缓存(APC、XCache或WinCache)",
+    "config-cache-memcached": "使用Memcached(需要另外安装并配置)",
+    "config-memcached-servers": "Memcached服务器:",
+    "config-memcached-help": "用于Memcached的IP地址列表。请保持每行一条,并指定要使用的端口。例如:\n127.0.0.1:11211\n192.168.1.25:1234",
+    "config-memcache-needservers": "您选择了Memcached作为您的缓存,但并未指定任何服务器。",
+    "config-memcache-badip": "您为Memcached输入了无效的IP地址:$1。",
+    "config-memcache-noport": "您没有指定Memcached服务器的端口:$1。如果您不清楚端口是多少,默认值为11211。",
+    "config-memcache-badport": "Memcached的端口号应该在$1到$2之间。",
+    "config-extensions": "扩展",
+    "config-extensions-help": "已在您的<code>./extensions</code>目录中发现下列扩展。\n\n您可能要对它们进行额外的配置,但您现在可以启用它们。",
+    "config-install-alreadydone": "'''警告:'''您似乎已经安装了MediaWiki,并试图重新安装它。请前往下一个页面。",
+    "config-install-begin": "点击“{{int:config-continue}}”后,您将开始安装MediaWiki。如果您还想对配置作一些修改,请点击“{{int:config-back}}”。",
+    "config-install-step-done": "完成",
+    "config-install-step-failed": "失败",
+    "config-install-extensions": "正在启用扩展",
+    "config-install-database": "正在配置数据库",
+    "config-install-schema": "创建架构",
+    "config-install-pg-schema-not-exist": "PostgreSQL 架构不存在",
+    "config-install-pg-schema-failed": "创建数据表失败。请确保用户“$1”拥有写入模式“$2”的权限。",
+    "config-install-pg-commit": "正在提交更改",
+    "config-install-pg-plpgsql": "正在检查PL/pgSQL语言",
+    "config-pg-no-plpgsql": "您需要为数据库$1安装PL/pgSQL语言",
+    "config-pg-no-create-privs": "为安装程序指定的帐号缺少创建帐号的权限。",
+    "config-pg-not-in-role": "您指定为web用户的帐户已经存在。\n您给本程序指定的帐户不是超级用户,也不是web用户角色的成员,所以它不能创建web用户所拥有的对象。\n\nMediaWiki当前需要使用由web用户所有的表。请指定另一个web帐户名称,或点击“后退”并指定具有适当权限的安装用户。",
+    "config-install-user": "正在创建数据库用户",
+    "config-install-user-alreadyexists": "用户“$1”已存在",
+    "config-install-user-create-failed": "创建用户“$1”失败:$2",
+    "config-install-user-grant-failed": "授予用户“$1”权限失败:$2",
+    "config-install-user-missing": "指定的用户“$1”不存在。",
+    "config-install-user-missing-create": "指定的用户“$1”不存在。如果您想要创建一名,请点选“创建帐户”下面的复选框。",
+    "config-install-tables": "正在创建数据表",
+    "config-install-tables-exist": "'''警告''':MediaWiki的数据表似乎已经存在,跳过创建。",
+    "config-install-tables-failed": "'''错误''':创建数据表出错,下为错误信息:$1",
+    "config-install-interwiki": "正在填充默认的跨wiki数据表",
+    "config-install-interwiki-list": "找不到文件<code>interwiki.list</code>。",
+    "config-install-interwiki-exists": "'''警告''':跨wiki数据表似乎已有内容,跳过默认列表。",
+    "config-install-stats": "初始化统计",
+    "config-install-keys": "生成密钥中",
+    "config-insecure-keys": "'''警告''':在安装过程中生成的{{PLURAL:$2|安全密钥|安全密钥}}($1){{PLURAL:$2|并|并}}不一定安全。请考虑手动更改{{PLURAL:$2|它|它们}}。",
+    "config-install-sysop": "正在创建管理员用户帐号",
+    "config-install-subscribe-fail": "无法订阅mediawiki-announce:$1",
+    "config-install-subscribe-notpossible": "没有安装cURL,allow_url_fopen也不可用。",
+    "config-install-mainpage": "正在创建显示默认内容的首页",
+    "config-install-extension-tables": "正在为已启用扩展创建数据表",
+    "config-install-mainpage-failed": "无法插入首页:$1",
+    "config-install-done": "'''恭喜!'''\n您已经成功地安装了MediaWiki。\n\n安装程序已经生成了<code>LocalSettings.php</code>文件,其中包含了您所有的配置。\n\n您需要下载该文件,并将其放在您wiki的根目录(index.php的同级目录)中。稍后下载将自动开始。\n\n如果浏览器没有提示您下载,或者您取消了下载,您可以点击下面的链接重新开始下载:\n\n$3\n\n'''注意''':如果您现在不完成本步骤,而是没有下载便退出了安装过程,此后您将无法获得自动生成的配置文件。\n\n当本步骤完成后,您可以 '''[$2 进入您的wiki]'''。",
+    "config-download-localsettings": "下载<code>LocalSettings.php</code>",
+    "config-help": "帮助",
+    "config-nofile": "找不到文件“$1”。它是否已被删除?",
+    "mainpagetext": "'''已成功安装MediaWiki。'''",
+    "mainpagedocfooter": "请查阅[//meta.wikimedia.org/wiki/Help:Contents 用户指南]以获取使用本wiki软件的信息!\n\n== 入门 ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki配置设置列表]\n* [//www.mediawiki.org/wiki/Manual:FAQ/zh-hans MediaWiki常见问题]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki发布邮件列表]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources 本地化MediaWiki到您的语言]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/zh-hant.json b/includes/installer/i18n/zh-hant.json
new file mode 100644 (file)
index 0000000..355e807
--- /dev/null
@@ -0,0 +1,308 @@
+{
+    "@metadata": {
+        "authors": [
+            "Anthony Fok",
+            "Hzy980512",
+            "Justincheng12345",
+            "Liangent",
+            "Mark85296341",
+            "Simon Shek",
+            "아라"
+        ]
+    },
+    "config-desc": "MediaWiki安裝程序",
+    "config-title": "MediaWiki $1配置",
+    "config-information": "資訊",
+    "config-localsettings-upgrade": "已檢測到<code>LocalSettings.php</code>文件。要升級該配置,請在下面的框中輸入<code>$wgUpgradeKey</code>的值。您可以在<code>LocalSettings.php</code>中找到它。",
+    "config-localsettings-cli-upgrade": "已檢測到<code>LocalSettings.php</code>文件。要升級該配置,請直接執行<code>update.php</code>。",
+    "config-localsettings-key": "升級密鑰:",
+    "config-localsettings-badkey": "您提供的密鑰不正確。",
+    "config-upgrade-key-missing": "檢測到MediaWiki的配置已經存在。若要升級該配置,請將下面一行文本添加到<code>LocalSettings.php</code>的底部:\n\n$1",
+    "config-localsettings-incomplete": "當前的<code>LocalSettings.php</code>可能並不完整,因為變量$1沒有設置。請在<code>LocalSettings.php</code>設置該變量,並單擊“{{int:Config-continue}}”。",
+    "config-localsettings-connection-error": "在使用<code>LocalSettings.php</code>或<code>AdminSettings.php</code>中指定的設置連接數據庫時發生錯誤。請修復相應設置並重試。\n\n$1",
+    "config-session-error": "啟動會話出錯:$1",
+    "config-session-expired": "您的會話數據可能已經過期,當前會話的使用期限被設定為$1。您可以在php.ini中設置<code>session.gc_maxlifetime</code>來延長此期限,並重新啟動本配置程序。",
+    "config-no-session": "您的會話數據丟失了!請檢查php.ini並確保<code>session.save_path</code>被設置為適當的目錄。",
+    "config-your-language": "您的語言:",
+    "config-your-language-help": "選擇一個要使用的語言在安裝過程中。",
+    "config-wiki-language": "Wiki 語言:",
+    "config-wiki-language-help": "選擇將要安裝的wiki在多數情況下使用的語言。",
+    "config-back": "←返回",
+    "config-continue": "繼續→",
+    "config-page-language": "語言",
+    "config-page-welcome": "歡迎您來到 MediaWiki!",
+    "config-page-dbconnect": "連接到資料庫",
+    "config-page-upgrade": "升級現有的安裝",
+    "config-page-dbsettings": "資料庫設定",
+    "config-page-name": "名稱",
+    "config-page-options": "選項",
+    "config-page-install": "安裝",
+    "config-page-complete": "完成!",
+    "config-page-restart": "重新安裝",
+    "config-page-readme": "讀我",
+    "config-page-releasenotes": "發布說明",
+    "config-page-copying": "複製",
+    "config-page-upgradedoc": "升級",
+    "config-page-existingwiki": "已有wiki",
+    "config-help-restart": "是否要清除所有已輸入且保存的數據,並重新啟動安裝過程嗎?",
+    "config-restart": "是的,重新啟動",
+    "config-welcome": "=== 環境檢查 ===\n對當前環境是否適合安裝MediaWiki作基本的檢查。如果您在安裝過程中需要幫助,請提供這些檢查的結果。",
+    "config-copyright": "=== 版權和條款 ===\n\n$1\n\n本程序為自由軟件;您可依據自由軟件基金會所發表的GNU通用公共授權條款規定,就本程序再為發布與/或修改;無論您依據的是本授權的第二版或(您自行選擇的)任一日後發行的版本。\n\n本程序是基於使用目的而加以發布,然而'''不負任何擔保責任''';亦無對'''適售性'''或'''特定目的適用性'''所為的默示性擔保。詳情請參照GNU通用公共授權。\n\n您應已收到附隨於本程序的<doclink href=\"Copying\">GNU通用公共授權的副本</doclink>;如果沒有,請寫信至自由軟件基金會:59 Temple Place - Suite 330, Boston, Ma 02111-1307, USA,或[http://www.gnu.org/copyleft/gpl.html 在線閱讀]。",
+    "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/zh-hans MediaWiki首頁]\n* [//www.mediawiki.org/wiki/Help:Contents/zh-hans 用戶指南]\n* [//www.mediawiki.org/wiki/Manual:Contents 管理員指南]\n* [//www.mediawiki.org/wiki/Manual:FAQ/zh-hans 常見問題解答]\n----\n* <doclink href=Readme>自述文件</doclink>\n* <doclink href=ReleaseNotes>發行說明</doclink>\n* <doclink href=Copying>協議副本</doclink>\n* <doclink href=UpgradeDoc>升級</doclink>",
+    "config-env-good": "環境檢查已經完成。您可以安裝MediaWiki。",
+    "config-env-bad": "環境檢查已經完成。您不能安裝MediaWiki。",
+    "config-env-php": "PHP $1 已安裝。",
+    "config-env-php-toolow": "已安裝 PHP $1;但是,MediaWiki 需要 PHP $2 或更高版本。",
+    "config-unicode-using-utf8": "將使用 Brion Vibber 的 utf8_normalize.so 以實作 Unicode 正規化。",
+    "config-unicode-using-intl": "將使用 [http://pecl.php.net/intl intl PECL 延伸函式庫]以實作 Unicode 正規化。",
+    "config-unicode-pure-php-warning": "'''警告:'''因為尚未安裝 [http://pecl.php.net/intl intl PECL 延伸函式庫]以處理 Unicode 正規化,故只能退而採用較慢的純 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-no-db": "找不到合適的數據庫驅動!您需要為PHP安裝數據庫驅動。目前支持以下數據庫:$1。\n\n如果您正在使用共享主機,請向您的主機提供商申請安裝合適的數據庫驅動。如果您通過自行編譯安裝的PHP,請對其進行重新配置以啟用數據庫客戶端,例如使用<code>./configure --with-mysql</code>。如果您通過Debian或Ubuntu包安裝的PHP,您還需要安裝php5-mysql模塊。",
+    "config-outdated-sqlite": "'''警告''':您已安裝SQLite $1,但是它的版本低於最低要求版本$2。因此您無法選擇SQLite。",
+    "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]被啟用!'''\n此選項會無法預測地破壞輸入的數據,請將其禁用,否則您將不能安裝或使用MediaWiki。",
+    "config-magic-quotes-sybase": "'''致命錯誤:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase]被啟用!'''\n此選項會無法預測地破壞輸入的數據,請將其禁用,否則您將不能安裝或使用MediaWiki。",
+    "config-mbstring": "'''致命錯誤:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]被啟用!'''\n此選項會導致錯誤並不可預測地破壞數據,請將其禁用,否則您將不能安裝或使用MediaWiki。",
+    "config-ze1": "'''致命錯誤:[http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]被啟用!'''\n此選項將導致MediaWiki出現極其嚴重的故障,請將其禁用,否則您將不能安裝或使用MediaWiki。",
+    "config-safe-mode": "'''警告:'''PHP的[http://www.php.net/features.safe-mode 安全模式]已啟用。它可能會導致一些問題,尤其在對文件上傳和數學公式<code>math</code>的支持方面。",
+    "config-xml-bad": "缺少PHP的XML模塊。MediaWiki需要使用該模塊提供的函數,在當前配置下將無法工作。如果您正在使用Mandrake Linux,請安裝php-xml包。",
+    "config-pcre": "可能缺少PCRE的支持模塊。MediaWiki的運行需要兼容於Perl的正則表達式函數。",
+    "config-pcre-no-utf8": "'''致命錯誤''':PHP的PCRE模塊在編譯時可能沒有包含PCRE_UTF8支持。MediaWiki需要UTF-8支持才能正常工作。",
+    "config-memory-raised": "PHP的內存使用上限<code>memory_limit</code>為$1,自動提升到$2。",
+    "config-memory-bad": "'''警告:'''PHP的內存使用上限<code>memory_limit</code>為$1。該設定可能過低,並導致安裝失敗!",
+    "config-ctype": "'''毀滅性錯誤''':PHP必須有[http://www.php.net/manual/en/ctype.installation.php Ctype 擴展]來支持編譯。",
+    "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],無法啟用對象緩存。\nObject caching is not enabled.",
+    "config-mod-security": "'''警告''':您的服務器已啟動[http://modsecurity.org/ mod_security]。若其配置錯誤, 會導致MediaWiki和其他軟件的錯誤並允許用戶任意發布內容。如果您遇到任何錯誤,請查閱[http://modsecurity.org/documentation/ mod_security文檔]或聯繫您的客服。",
+    "config-diff3-bad": "找不到GNU diff3。",
+    "config-git": "發現Git版本控制軟件:<code>$1</code>。",
+    "config-git-bad": "無法找到Git版本控制軟件。",
+    "config-imagemagick": "已找到ImageMagick:<code>$1</code>。如果你啟用了上傳功能,縮略圖功能也將被啟用。",
+    "config-gd": "已找到內建的GD圖形庫。如果你啟用了上傳功能,縮略圖功能也將被啟用。",
+    "config-no-scaling": "找不到GD庫或ImageMagick。縮略圖功能將不可用。",
+    "config-no-uri": "'''錯誤:'''無法確定當前的URI。安裝已中斷。",
+    "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>存在允許執行任意腳本的漏洞。儘管MediaWiki會對所有已上傳的文件進行安全檢查,但我們仍然強烈建議您在啟用上傳功能前[//www.mediawiki.org/wiki/Manual:Security#Upload_security 關閉該安全漏洞]。",
+    "config-no-cli-uploads-check": "'''警告''':在CLI安裝過程中,沒有對您的默認上傳目錄(<code>$1</code>)進行執行任意腳本的漏洞檢查。",
+    "config-brokenlibxml": "您的系統安裝的PHP和libxml2版本組合存在故障,並可能在MediaWiki和其他web應用程序中造成隱藏的數據損壞。請將PHP升級到5.2.9或以上,libxml2升級到2.7.3或以上([//bugs.php.net/bug.php?id=45996 PHP的故障報告])。安裝已中斷。",
+    "config-using531": "由於函數<code>__call()</code>的引用參數存在故障,PHP $1和MediaWiki無法兼容。請升級到PHP 5.3.2或更高版本,或降級到PHP 5.3.0以修復該問題。安裝已中斷。",
+    "config-suhosin-max-value-length": "Suhosin已經安裝並將GET請求的參數長度限制在$1字節。MediaWiki的ResourceLoader部件可以在此限制下正常工作,但其性能會被降低。如果可能,請在<code>php.ini</code>中將<code>suhosin.get.max_value_length</code>設為1024或更高值,並在LocalSettings.php中將<code>$wgResourceLoaderMaxQueryLength</code>設為同一值。",
+    "config-db-type": "資料庫類型:",
+    "config-db-host": "資料庫主機:",
+    "config-db-host-help": "如果您的數據庫在別的服務器上,請在這裡輸入它的域名或IP地址。\n\n如果您在使用共享網站套餐,您的網站商應該已在他們的控制面板中給您數據庫信息了。\n\n如果您在Windows中安裝並且使用MySQL,“localhost”可能無效。如果確實無效,請輸入“127.0.0.1”作為IP地址。\n\n如果您在使用PostgreSQL,並且要用Unix socket來連接,請留空。",
+    "config-db-host-oracle": "資料庫的 TNS:",
+    "config-db-host-oracle-help": "請輸入合法的[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 本地連接名],並確保tnsnames.ora文件對本安裝程序可見。<br />如果您使用的客戶端庫為10g或更新的版本,您還可以使用[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 簡單連接名方法](easy connect naming method)。",
+    "config-db-wiki-settings": "識別這個 Wiki",
+    "config-db-name": "資料庫名稱:",
+    "config-db-name-help": "請輸入一個可以標識您的wiki的名稱。請勿使用空格。\n\n如果您正在使用共享web主機,您的主機提供商或會給您指定一個數據庫名稱,或會讓您通過控制面板創建數據庫。",
+    "config-db-name-oracle": "資料庫架構:",
+    "config-db-account-oracle-warn": "現有三種已支持方案可以將Oracle設置為後端數據庫:\n\n如果您希望在安裝過程中創建數據庫帳戶,請為安裝程序提供具有SYSDBA角色的數據庫帳戶,並為web訪問帳戶指定所需身份證明;否則您可以手動創建web訪問的賬戶並僅須提供該帳戶(確保帳戶已有創建方案對象(schema object)的所需權限);或提供兩個不同的帳戶,其一具有創建權限,另一則被限制為web訪問。\n\n具有所需權限賬戶的創建腳本存放於本程序的“maintenance/oracle/”目錄下。請注意,使用受限制的帳戶將禁用默認帳戶的所有維護性功能。",
+    "config-db-install-account": "用於安裝的用戶帳號",
+    "config-db-username": "資料庫使用者名稱:",
+    "config-db-password": "資料庫密碼:",
+    "config-db-password-empty": "請為新數據庫用戶$1輸入密碼。儘管您可以創建不使用密碼的用戶,但這樣做並不安全。",
+    "config-db-install-username": "請輸入在安裝過程中用於連接數據庫的用戶名。請勿輸入MediaWiki帳號的用戶名,請輸入您數據庫的用戶名。",
+    "config-db-install-password": "請輸入在安裝過程中用於連接數據庫的密碼。請勿輸入MediaWiki帳號的密碼,請輸入您數據庫的密碼。",
+    "config-db-install-help": "請輸入在安裝過程中用於連接數據庫的用戶名和密碼。",
+    "config-db-account-lock": "在普通操作中使用相同的用戶名和密碼",
+    "config-db-wiki-account": "用於普通操作的用戶帳號",
+    "config-db-wiki-help": "輸入在普通的wiki操作中(安裝完成後)將用於連接數據庫的用戶名和密碼。如果該帳號並不存在,而安裝帳號具有足夠的權限,該用戶帳號會被自動創建,並被賦予足以運行此wiki的最低權限。",
+    "config-db-prefix": "數據庫表前綴:",
+    "config-db-prefix-help": "如果您需要在多個wiki之間(或在MediaWiki與其他web應用程序之間)共享一個數據庫,您可以通過添加前綴的方式來避免出現表名稱的衝突。請勿使用空格。\n\n此字段通常可留空。",
+    "config-db-charset": "數據庫字符集",
+    "config-charset-mysql5-binary": "MySQL 4.1/5.0 二進制",
+    "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+    "config-charset-mysql4": "MySQL 4.0 UTF-8(向後兼容)",
+    "config-charset-help": "'''警告:'''如果您在MySQL 4.1+中使用'''向後兼容的UTF-8'''字符集,並在之後使用<code>mysqldump</code>備份了數據庫,則可能損壞所有的非ASCII字符,從而不可逆地破壞您的備份!\n\n在'''二進制模式'''下,MediaWiki會將UTF-8編碼的文本存於數據庫的二進制字段中。相對於MySQL的UTF-8模式,這種方法效率更高,並允許您使用全範圍的Unicode字符。\n\n在'''UTF-8模式'''下,MySQL將知道您數據使用的字符集,並能適當地提供和轉換內容。但這樣做您將無法在數據庫中存儲[//zh.wikipedia.org/wiki/基本多文種平面 基本多文種平面]以外的字符。",
+    "config-mysql-old": "需要MySQL $1或更新的版本,您的版本為$2。",
+    "config-db-port": "數據庫端口:",
+    "config-db-schema": "MediaWiki的數據庫模式",
+    "config-db-schema-help": "此數據庫模式通常是正確的,請在有明確需求時才改動之。",
+    "config-pg-test-error": "無法連接到數據庫'''$1''':$2",
+    "config-sqlite-dir": "SQLite 的資料目錄:",
+    "config-sqlite-dir-help": "SQLite會將所有的數據存儲於單一文件中。\n\n您所提供的目錄必須在安裝過程中對網頁服務器可寫。\n\n該目錄'''不應'''允許通過web訪問,因此我們不會將數據文件和PHP文件放在一起。\n\n安裝程序在創建數據文件時,亦會在相同目錄下創建<code>.htaccess</code>以控制權限。假若此等控制失效,則可能會將您的數據文件暴露於公共空間,讓他人可以獲取用戶數據(電子郵件地址、雜湊後的密碼)、被刪除的版本以及其他在wiki上被限制訪問的數據。\n\n請考慮將數據庫統一放置在某處,如<code>/var/lib/mediawiki/yourwiki</code>下。",
+    "config-oracle-def-ts": "默認表空間:",
+    "config-oracle-temp-ts": "臨時表空間:",
+    "config-support-info": "MediaWiki支持以下數據庫系統:\n\n$1\n\n如果您在下面列出的數據庫系統中沒有找到您希望使用的系統,請根據上方鏈向的指引啟用支持。",
+    "config-support-mysql": "* $1是MediaWiki的首選數據庫,對它的支持最為完備([http://www.php.net/manual/en/mysql.installation.php 如何將對MySQL的支持編譯進PHP中])",
+    "config-support-postgres": "* $1是一種流行的開源數據庫系統,可作為MySQL的替代([http://www.php.net/manual/en/pgsql.installation.php 如何將對PostgreSQL的支持編譯進PHP中])。本程序中可能依然存在一些小而明顯的錯誤,因此並不建議在生產環境中使用該數據庫系統。",
+    "config-support-sqlite": "* $1是一種輕量級的數據庫系統,能被良好地支持。([http://www.php.net/manual/en/pdo.installation.php 如何將對SQLite的支持編譯進PHP中],須使用PDO)",
+    "config-support-oracle": "* $1是一種商用企業級的數據庫。([http://www.php.net/manual/en/oci8.installation.php 如何將對OCI8的支持編譯進PHP中])",
+    "config-header-mysql": "MySQL 的設定",
+    "config-header-postgres": "PostgreSQL設置",
+    "config-header-sqlite": "SQLite 的設定",
+    "config-header-oracle": "甲骨文設定",
+    "config-invalid-db-type": "無效的資料庫類型",
+    "config-missing-db-name": "您必須為“數據庫名稱”輸入內容",
+    "config-missing-db-host": "您必須為“數據庫主機”輸入內容",
+    "config-missing-db-server-oracle": "您必須為“數據庫透明網絡底層(TNS)”輸入內容",
+    "config-invalid-db-server-oracle": "無效的數據庫TNS「$1」。\n請只使用「TNS Name」或「Easy Connect」 字串([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle命名法])",
+    "config-invalid-db-name": "無效的數據庫名稱“$1”。請只使用ASCII字母(a-z、A-Z)、數字(0-9)、下劃線(_)和連字號(-)。",
+    "config-invalid-db-prefix": "無效的數據庫前綴“$1”。請只使用ASCII字母(a-z、A-Z)、數字(0-9)、下劃線(_)和連字號(-)。",
+    "config-connection-error": "$1。\n\n請檢查下列的主機、用戶名和密碼設置後重試。",
+    "config-invalid-schema": "無效的MediaWiki數據庫模式“$1”。請只使用ASCII字母(a-z、A-Z)、數字(0-9)和下劃線(_)。",
+    "config-db-sys-create-oracle": "安裝程序僅支持使用SYSDBA帳戶創建新帳戶。",
+    "config-db-sys-user-exists-oracle": "用戶帳戶“$1”已經存在。SYSDBA僅可用於創建新帳戶!",
+    "config-postgres-old": "需要PostgreSQL $1或更新的版本,您的版本為$2。",
+    "config-sqlite-name-help": "請為您的wiki指定一個用於標識的名稱。請勿使用空格或連字號,該名稱將被用作SQLite的數據文件名。",
+    "config-sqlite-parent-unwritable-group": "由於父目錄<code><nowiki>$2</nowiki></code>對網頁服務器不可寫,無法創建數據目錄<code><nowiki>$1</nowiki></code>。\n\n安裝程序已確定您網頁服務器所使用的用戶。請將<code><nowiki>$3</nowiki></code>目錄設為對該用戶可寫以繼續安裝過程。在Unix/Linux系統中,您可以逐行輸入下列命令:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+    "config-sqlite-parent-unwritable-nogroup": "由於父目錄<code><nowiki>$2</nowiki></code>對網頁服務器不可寫,無法創建數據目錄<code><nowiki>$1</nowiki></code>。\n\n安裝程序無法確定您網頁服務器所使用的用戶。請將<code><nowiki>$3</nowiki></code>目錄設為全局可寫(對所有用戶)以繼續安裝過程。在Unix/Linux系統中,您可以逐行輸入下列命令:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+    "config-sqlite-mkdir-error": "創建數據目錄“$1”時發生錯誤。請檢查路徑後重試。",
+    "config-sqlite-dir-unwritable": "無法寫入目錄“$1”。請修改該目錄的權限,使其對網頁服務器可寫後重試。",
+    "config-sqlite-connection-error": "$1。\n\n請檢查下列的數據目錄和數據庫名稱後重試。",
+    "config-sqlite-readonly": "文件<code>$1</code>不可寫。",
+    "config-sqlite-cant-create-db": "無法創建數據文件<code>$1</code>。",
+    "config-sqlite-fts3-downgrade": "PHP缺少FTS3支持,正在降級數據表",
+    "config-can-upgrade": "在數據庫中發現了MediaWiki的數據表。要將它們升級至MediaWiki $1,請點擊'''繼續'''。",
+    "config-upgrade-done": "升級完成。\n\n現在您可以[$1 開始使用您的wiki]了。\n\n如果您需要重新生成<code>LocalSettings.php</code>文件,請點擊下面的按鈕。除非您的wiki出現了問題,我們'''不推薦'''您執行此操作。",
+    "config-upgrade-done-no-regenerate": "升級完成。\n\n現在您可以[$1 開始使用您的wiki]了。",
+    "config-regenerate": "重新生成LocalSettings.php →",
+    "config-show-table-status": "查詢<code>SHOW TABLE STATUS</code>失敗!",
+    "config-unknown-collation": "'''警告:'''數據庫使用了無法識別的整理。",
+    "config-db-web-account": "供網頁訪問使用的數據庫帳號",
+    "config-db-web-help": "請指定在wiki執行普通操作時,網頁服務器用於連接數據庫服務器的用戶名和密碼。",
+    "config-db-web-account-same": "使用和安裝程序相同的帳號",
+    "config-db-web-create": "建立帳號,如果它不存在",
+    "config-db-web-no-create-privs": "您指定給安裝程序的帳號缺少創建帳號的權限,因此您指定的帳號必須已經存在。",
+    "config-mysql-engine": "存儲引擎:",
+    "config-mysql-innodb": "InnoDB",
+    "config-mysql-myisam": "MyISAM",
+    "config-mysql-myisam-dep": "'''警告''':您選擇了MyISAM作為MySQL的存儲引擎,MediaWiki並不推薦您這麼做,因為:\n* 它僅能通過表鎖定來勉強支持並發\n* 與其他引擎相比,它更容易被損壞\n* MediaWiki代碼庫並不總會去處理MyISAM\n\n如果您的MySQL程序支持InnoDB,我們高度推薦您使用該引擎替代MyISAM。\n如果您的MySQL程序不支持InnoDB,請考慮升級。",
+    "config-mysql-engine-help": "'''InnoDB'''通常是最佳選項,因為它對並發操作有着良好的支持。\n\n'''MyISAM'''在單用戶或只讀環境下可能會有更快的性能表現。但MyISAM數據庫出錯的概率一般要大於InnoDB數據庫。",
+    "config-mysql-charset": "資料庫字符集:",
+    "config-mysql-binary": "二進制",
+    "config-mysql-utf8": "UTF-8",
+    "config-mysql-charset-help": "在'''二進制模式'''下,MediaWiki會將UTF-8編碼的文本存於數據庫的二進制字段中。相對於MySQL的UTF-8模式,這種方法效率更高,並允許您使用全範圍的Unicode字符。\n\n在'''UTF-8模式'''下,MySQL將知道您數據使用的字符集,並能適當地提供和轉換內容。但這樣做您將無法在數據庫中存儲[//zh.wikipedia.org/wiki/基本多文種平面 基本多文種平面]以外的字符。",
+    "config-site-name": "Wiki的名稱:",
+    "config-site-name-help": "填入的內容會出現在瀏覽器的標題欄以及其他多處位置中。",
+    "config-site-name-blank": "輸入站點名稱。",
+    "config-project-namespace": "項目名字空間:",
+    "config-ns-generic": "項目",
+    "config-ns-site-name": "與wiki名稱相同:$1",
+    "config-ns-other": "其他(請註明)",
+    "config-ns-other-default": "我的Wiki",
+    "config-project-namespace-help": "依循維基百科形成的慣例,許多wiki將他們的方針頁面存放在與內容頁面不同的“'''項目名字空間'''”中。所有位於該名字空間下的頁面標題都會被冠以固定的前綴,您可以在此處指定這一前綴。傳統上,這一前綴應與wiki的命名保持一致,但請勿在其中使用標點符號,如“#”或“:”。",
+    "config-ns-invalid": "指定的名字空間“<nowiki>$1</nowiki>”無效,請為項目名字空間指定其他名稱。",
+    "config-ns-conflict": "指定的名字空間“<nowiki>$1</nowiki>”與默認的MediaWiki名字空間衝突。請指定一個不同的項目名字空間。",
+    "config-admin-box": "管理員帳號",
+    "config-admin-name": "您的名字:",
+    "config-admin-password": "密碼:",
+    "config-admin-password-confirm": "再次輸入密碼:",
+    "config-admin-help": "在此輸入您想使用的用戶名,例如“喬幫主”。您將使用該名稱登錄本wiki。",
+    "config-admin-name-blank": "輸入管理員的使用者名稱。",
+    "config-admin-name-invalid": "指定的用戶名“<nowiki>$1</nowiki>”無效,請指定其他用戶名。",
+    "config-admin-password-blank": "輸入管理員帳號密碼。",
+    "config-admin-password-same": "密碼不能與使用者名稱相同。",
+    "config-admin-password-mismatch": "兩次輸入的密碼並不相同。",
+    "config-admin-email": "電郵地址:",
+    "config-admin-email-help": "輸入電子郵件地址後,您可以收到此wiki上其他用戶發來的電子郵件,並能重置您的密碼,還可在監視列表中頁面被更改時收到郵件通知。您可以將此字段留空。",
+    "config-admin-error-user": "在創建用戶名為“<nowiki>$1</nowiki>”的管理員帳號時發生內部錯誤。",
+    "config-admin-error-password": "在為管理員“<nowiki>$1</nowiki>”設置密碼時發生內部錯誤:<pre>$2</pre>",
+    "config-admin-error-bademail": "你輸入了一個無效的電子郵件地址。",
+    "config-subscribe": "訂閱[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 發行公告郵件列表]。",
+    "config-subscribe-help": "此低流量的郵件列表僅用於發行公告,其中包括重要安全公告。請訂閱該列表以便在新的版本推出時升級您的MediaWiki。",
+    "config-subscribe-noemail": "您選擇了訂閱發行公告郵件列表,但沒有提供電子郵件地址。請提供一個電子郵件地址以訂閱郵件列表。",
+    "config-almost-done": "您幾乎已經完成了!現在您可以跳過剩下的配置流程並立即安裝wiki。",
+    "config-optional-continue": "多問我一些問題吧。",
+    "config-optional-skip": "我已經不耐煩了,趕緊安裝我的wiki。",
+    "config-profile": "用戶權限配置:",
+    "config-profile-wiki": "開放的wiki",
+    "config-profile-no-anon": "需要註冊帳號",
+    "config-profile-fishbowl": "編輯受限",
+    "config-profile-private": "非公開wiki",
+    "config-profile-help": "如果您允許盡量多的人編寫wiki,網站上的內容會更加豐富。在MediaWiki中,您可以輕鬆地審查最近更改,並輕易回退掉新手或破壞者造成的損害。\n\n然而,許多人覺得讓MediaWiki存在多種角色將更加好用;同時,要說服所有人都願以wiki的方式作貢獻並非一件易事。因此,您可以有以下選擇:\n\n'''{{int:config-profile-wiki}}'''允許包括未登錄用戶在內的所有人編輯。'''{{int:config-profile-no-anon}}'''的wiki需要額外的註冊流程,這有可能會阻礙隨意貢獻者。\n\n'''{{int:config-profile-fishbowl}}'''模式只允許獲批准的用戶編輯,但對公眾開放頁面瀏覽(包括歷史記錄)。'''{{int:config-profile-private}}'''則只允許獲批准的用戶瀏覽、編輯頁面。\n\n安裝完成後,您還可以對用戶權限進行更多、更複雜的配置,參見[//www.mediawiki.org/wiki/Manual:User_rights 相關的使用手冊]。",
+    "config-license": "版權和許可證:",
+    "config-license-none": "頁腳無許可證",
+    "config-license-cc-by-sa": "知識共享署名-相同方式分享",
+    "config-license-cc-by": "知識共享署名",
+    "config-license-cc-by-nc-sa": "知識共享署名-非商業性使用-相同方式共享",
+    "config-license-cc-0": "知識共享Zero(公有領域)",
+    "config-license-gfdl": "GNU自由文檔許可證1.3或更高版本",
+    "config-license-pd": "公共領域",
+    "config-license-cc-choose": "選擇自定義的知識共享許可證",
+    "config-license-help": "許多公共wiki會以[http://freedomdefined.org/Definition 自由許可證]的方式釋放出編者的所有貢獻。這有助於構建社區的主人翁意識,並能鼓勵長期貢獻。對於非公共wiki或公司wiki,這並非必要條件。\n\n如果您希望使用來自維基百科的內容,並希望維基百科能接受複製自您的wiki的內容,請選擇'''知識共享署名-相同方式共享'''。\n\nGNU自由文檔許可證是維基百科曾經使用過的許可證,並迄今有效。然而,該許可證難以理解,並會增加重用內容的難度。",
+    "config-email-settings": "E-mail 設定",
+    "config-enable-email": "啟用出站電子郵件",
+    "config-enable-email-help": "如果您希望使用電子郵件功能,請正確配置[http://www.php.net/manual/en/mail.configuration.php PHP的郵件設定]。如果您不需要任何電子郵件功能,請在此處禁用它。",
+    "config-email-user": "啟用用戶到用戶的電子郵件",
+    "config-email-user-help": "允許所有用戶互發郵件,假若他們啟用了該功能。",
+    "config-email-usertalk": "啟用用戶討論頁通知",
+    "config-email-usertalk-help": "允許用戶收到用戶討論頁被修改的通知,假若他們啟用了該功能。",
+    "config-email-watchlist": "啟用監視列表通知",
+    "config-email-watchlist-help": "允許用戶收到與其監視列表有關的通知,假若他們啟用了該功能。",
+    "config-email-auth": "啟用電子郵件認證",
+    "config-email-auth-help": "如果啟用此選項,在用戶設置或修改電子郵件地址時,就會收到一封郵件,內含確認電子地址的鏈接。只有經過身份驗證的電子郵件地址,才能收到來自其他用戶的電子郵件,或任何修改通知的郵件。'''建議'''公開wiki啟用本選項,以防對電子郵件功能的濫用。",
+    "config-email-sender": "返回電子郵件地址:",
+    "config-email-sender-help": "輸入要用來發送出站電子郵件的地址,該地址將會收到被拒收的郵件。許多郵件服務器要求域名部分必須有效。",
+    "config-upload-settings": "圖片和檔案上傳",
+    "config-upload-enable": "啟用檔案上傳",
+    "config-upload-help": "文件上傳可能會將您的服務器暴露在安全風險下。有關更多的信息,請參閱手冊的[//www.mediawiki.org/wiki/Manual:Security 安全部分]。\n\n要啟用文件上傳,請先將MediaWiki根目錄下的<code>images</code>子目錄更改為對web服務器可寫,然後再啟用此選項。",
+    "config-upload-deleted": "已刪除文件的目錄:",
+    "config-upload-deleted-help": "指定用於存放被刪除文件的目錄。理想情況下,該目錄不應能通過web訪問。",
+    "config-logo": "標誌URL:",
+    "config-logo-help": "在MediaWiki的默認外觀中,左側欄菜單之上有一塊135x160像素的標誌區。請上傳一幅相應大小的圖像,並在此輸入URL。\n\n如果您不希望使用標誌,請將本處留空。",
+    "config-instantcommons": "啟用即時共享資源",
+    "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons 即時共享資源]可以讓wiki使用來自[//commons.wikimedia.org/ 維基共享資源]網站的圖像、音頻和其他媒體文件。要啟用該功能,MediaWiki必須能夠訪問互聯網。\n\n有關此功能的詳細信息,包括如何將其他wiki網站設為具有類似共享功能的方法,請參考[//mediawiki.org/wiki/Manual:$wgForeignFileRepos 手冊]。",
+    "config-cc-error": "知識共享許可證挑選器無法找到結果,請手動輸入許可證的名稱。",
+    "config-cc-again": "重新選取......",
+    "config-cc-not-chosen": "選擇您希望使用的知識共享許可證,並點擊“繼續”。",
+    "config-advanced-settings": "進階配置",
+    "config-cache-options": "對象緩存設置:",
+    "config-cache-help": "對象緩存可通過緩存頻繁使用的數據來提高MediaWiki的速度。高度推薦中到大型的網站啟用該功能,小型網站亦能從其中受益。",
+    "config-cache-none": "無緩存(不影響功能,但對較大型的wiki網站會有速度影響)",
+    "config-cache-accel": "PHP對象緩存(APC、XCache或WinCache)",
+    "config-cache-memcached": "使用Memcached(需要另外安裝並配置)",
+    "config-memcached-servers": "Memcached服務器:",
+    "config-memcached-help": "用於Memcached的IP地址列表。請保持每行一條,並指定要使用的端口。例如:\n127.0.0.1:11211\n192.168.1.25:1234",
+    "config-memcache-needservers": "您選擇了Memcached作為您的緩存,但並未指定任何服務器。",
+    "config-memcache-badip": "您為Memcached輸入了無效的IP地址:$1。",
+    "config-memcache-noport": "您沒有指定Memcached服務器的端口:$1。如果您不清楚端口是多少,默認值為11211。",
+    "config-memcache-badport": "Memcached的端口號應該在$1到$2之間。",
+    "config-extensions": "擴充套件",
+    "config-extensions-help": "已在您的<code>./extensions</code>目錄中發現下列擴展。\n\n您可能要對它們進行額外的配置,但您現在可以啟用它們。",
+    "config-install-alreadydone": "'''警告:'''您似乎已經安裝了MediaWiki,並試圖重新安裝它。請前往下一個頁面。",
+    "config-install-begin": "點擊“{{int:config-continue}}”後,您將開始安裝MediaWiki。如果您還想對配置作一些修改,請點擊後退。",
+    "config-install-step-done": "完成",
+    "config-install-step-failed": "失敗",
+    "config-install-extensions": "正在啟用擴展",
+    "config-install-database": "正在配置數據庫",
+    "config-install-schema": "創建架構",
+    "config-install-pg-schema-not-exist": "PostgreSQL 架構不存在",
+    "config-install-pg-schema-failed": "創建數據表失敗。請確保用戶“$1”擁有寫入模式“$2”的權限。",
+    "config-install-pg-commit": "提交更改",
+    "config-install-pg-plpgsql": "正在檢查PL/pgSQL語言",
+    "config-pg-no-plpgsql": "您需要為數據庫$1安裝PL/pgSQL語言",
+    "config-pg-no-create-privs": "為安裝程序指定的帳號缺少創建帳號的權限。",
+    "config-pg-not-in-role": "您指定為web用戶的帳戶已經存在。\n您給本程序指定的帳戶不是超級用戶,也不是web用戶角色的成員,所以它不能創建web用戶所擁有的對象。\n\nMediaWiki當前需要使用由web用戶所有的表。請指定另一個web帳戶名稱,或點擊“後退”並指定具有適當權限的安裝用戶。",
+    "config-install-user": "正在創建數據庫用戶",
+    "config-install-user-alreadyexists": "用戶“$1”已存在",
+    "config-install-user-create-failed": "創建用戶“$1”失敗:$2",
+    "config-install-user-grant-failed": "授予用戶“$1”權限失敗:$2",
+    "config-install-user-missing": "指定的用戶“$1”不存在。",
+    "config-install-user-missing-create": "指定的用戶“$1”不存在。如果您想要創建一名,請點選“創建帳戶”下面的複選框。",
+    "config-install-tables": "正在創建數據表",
+    "config-install-tables-exist": "'''警告''':MediaWiki的數據表似乎已經存在,跳過創建。",
+    "config-install-tables-failed": "'''錯誤''':創建數據表出錯,下為錯誤信息:$1",
+    "config-install-interwiki": "正在填充默認的跨wiki數據表",
+    "config-install-interwiki-list": "找不到文件<code>interwiki.list</code>。",
+    "config-install-interwiki-exists": "'''警告''':跨wiki數據表似乎已有內容,跳過默認列表。",
+    "config-install-stats": "初始化統計",
+    "config-install-keys": "生成密鑰中",
+    "config-insecure-keys": "'''警告''':在安裝過程中生成的{{PLURAL:$2|安全密鑰|安全密鑰}}($1){{PLURAL:$2|並|並}}不一定安全。請考慮手動更改{{PLURAL:$2|它|它們}}。",
+    "config-install-sysop": "正在創建管理員用戶帳號",
+    "config-install-subscribe-fail": "無法訂閱mediawiki-announce:$1",
+    "config-install-subscribe-notpossible": "沒有安裝cURL,allow_url_fopen也不可用。",
+    "config-install-mainpage": "正在創建顯示默認內容的首頁",
+    "config-install-extension-tables": "正在為已啟用擴展創建數據表",
+    "config-install-mainpage-failed": "無法插入首頁:$1",
+    "config-install-done": "'''恭喜!'''\n您已經成功地安裝了MediaWiki。\n\n安裝程序已經生成了<code>LocalSettings.php</code>文件,其中包含了您所有的配置。\n\n您需要下載該文件,並將其放在您wiki的根目錄(index.php的同級目錄)中。稍後下載將自動開始。\n\n如果瀏覽器沒有提示您下載,或者您取消了下載,您可以點擊下面的鏈接重新開始下載:\n\n$3\n\n'''注意''':如果您現在不完成本步驟,而是沒有下載便退出了安裝過程,此後您將無法獲得自動生成的配置文件。\n\n當本步驟完成後,您可以 '''[$2 進入您的wiki]'''。",
+    "config-download-localsettings": "下載<code>LocalSettings.php</code>",
+    "config-help": "說明",
+    "mainpagetext": "'''已成功安裝MediaWiki。'''",
+    "mainpagedocfooter": "請參閱[//meta.wikimedia.org/wiki/Help:Contents 用戶手冊]以獲得使用此wiki軟體的訊息!\n\n== 入門 ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki配置設定清單]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki常見問題解答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki發佈郵件清單]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki界面本地化]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/zh-hk.json b/includes/installer/i18n/zh-hk.json
new file mode 100644 (file)
index 0000000..e8ed310
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Mark85296341"
+        ]
+    },
+    "mainpagedocfooter": "請參閱[//meta.wikimedia.org/wiki/Help:Contents 用戶手冊]以獲得使用此 wiki 軟件的訊息!\n\n== 入門 ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki 配置設定清單]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 常見問題解答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈郵件清單]"
+}
\ No newline at end of file
diff --git a/includes/installer/i18n/zh-tw.json b/includes/installer/i18n/zh-tw.json
new file mode 100644 (file)
index 0000000..881001d
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "@metadata": {
+        "authors": []
+    },
+    "mainpagedocfooter": "請參閱 [//meta.wikimedia.org/wiki/Help:Contents 使用者手冊] 以獲得使用此 wiki 軟體的訊息!\n\n== 入門 ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki 配置設定清單]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 常見問題解答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈郵件清單]"
+}
\ No newline at end of file
diff --git a/includes/job/Job.php b/includes/job/Job.php
deleted file mode 100644 (file)
index 5fc1e06..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-<?php
-/**
- * Job queue task base code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @defgroup JobQueue JobQueue
- */
-
-/**
- * Class to both describe a background job and handle jobs.
- * The queue aspects of this class are now deprecated.
- * Using the class to push jobs onto queues is deprecated (use JobSpecification).
- *
- * @ingroup JobQueue
- */
-abstract class Job implements IJobSpecification {
-       /** @var string */
-       public $command;
-
-       /** @var array|bool Array of job parameters or false if none */
-       public $params;
-
-       /** @var array Additional queue metadata */
-       public $metadata = array();
-
-       /** @var Title */
-       protected $title;
-
-       /** @var bool Expensive jobs may set this to true */
-       protected $removeDuplicates;
-
-       /** @var string Text for error that occurred last */
-       protected $error;
-
-       /*-------------------------------------------------------------------------
-        * Abstract functions
-        *------------------------------------------------------------------------*/
-
-       /**
-        * Run the job
-        * @return bool Success
-        */
-       abstract public function run();
-
-       /*-------------------------------------------------------------------------
-        * Static functions
-        *------------------------------------------------------------------------*/
-
-       /**
-        * Create the appropriate object to handle a specific job
-        *
-        * @param string $command Job command
-        * @param Title $title Associated title
-        * @param array|bool $params Job parameters
-        * @throws MWException
-        * @return Job
-        */
-       public static function factory( $command, Title $title, $params = false ) {
-               global $wgJobClasses;
-               if ( isset( $wgJobClasses[$command] ) ) {
-                       $class = $wgJobClasses[$command];
-
-                       return new $class( $title, $params );
-               }
-               throw new MWException( "Invalid job command `{$command}`" );
-       }
-
-       /**
-        * Batch-insert a group of jobs into the queue.
-        * This will be wrapped in a transaction with a forced commit.
-        *
-        * This may add duplicate at insert time, but they will be
-        * removed later on, when the first one is popped.
-        *
-        * @param array $jobs of Job objects
-        * @return bool
-        * @deprecated since 1.21
-        */
-       public static function batchInsert( $jobs ) {
-               return JobQueueGroup::singleton()->push( $jobs );
-       }
-
-       /**
-        * Insert a group of jobs into the queue.
-        *
-        * Same as batchInsert() but does not commit and can thus
-        * be rolled-back as part of a larger transaction. However,
-        * large batches of jobs can cause slave lag.
-        *
-        * @param array $jobs of Job objects
-        * @return bool
-        * @deprecated since 1.21
-        */
-       public static function safeBatchInsert( $jobs ) {
-               return JobQueueGroup::singleton()->push( $jobs, JobQueue::QOS_ATOMIC );
-       }
-
-       /**
-        * Pop a job of a certain type.  This tries less hard than pop() to
-        * actually find a job; it may be adversely affected by concurrent job
-        * runners.
-        *
-        * @param $type string
-        * @return Job|bool Returns false if there are no jobs
-        * @deprecated since 1.21
-        */
-       public static function pop_type( $type ) {
-               return JobQueueGroup::singleton()->get( $type )->pop();
-       }
-
-       /**
-        * Pop a job off the front of the queue.
-        * This is subject to $wgJobTypesExcludedFromDefaultQueue.
-        *
-        * @return Job|bool False if there are no jobs
-        * @deprecated since 1.21
-        */
-       public static function pop() {
-               return JobQueueGroup::singleton()->pop();
-       }
-
-       /*-------------------------------------------------------------------------
-        * Non-static functions
-        *------------------------------------------------------------------------*/
-
-       /**
-        * @param $command
-        * @param $title
-        * @param $params array|bool
-        */
-       public function __construct( $command, $title, $params = false ) {
-               $this->command = $command;
-               $this->title = $title;
-               $this->params = $params;
-
-               // expensive jobs may set this to true
-               $this->removeDuplicates = false;
-       }
-
-       /**
-        * @return string
-        */
-       public function getType() {
-               return $this->command;
-       }
-
-       /**
-        * @return Title
-        */
-       public function getTitle() {
-               return $this->title;
-       }
-
-       /**
-        * @return array
-        */
-       public function getParams() {
-               return $this->params;
-       }
-
-       /**
-        * @return int|null UNIX timestamp to delay running this job until, otherwise null
-        * @since 1.22
-        */
-       public function getReleaseTimestamp() {
-               return isset( $this->params['jobReleaseTimestamp'] )
-                       ? wfTimestampOrNull( TS_UNIX, $this->params['jobReleaseTimestamp'] )
-                       : null;
-       }
-
-       /**
-        * @return bool Whether only one of each identical set of jobs should be run
-        */
-       public function ignoreDuplicates() {
-               return $this->removeDuplicates;
-       }
-
-       /**
-        * @return bool Whether this job can be retried on failure by job runners
-        * @since 1.21
-        */
-       public function allowRetries() {
-               return true;
-       }
-
-       /**
-        * @return integer Number of actually "work items" handled in this job
-        * @see $wgJobBackoffThrottling
-        * @since 1.23
-        */
-       public function workItemCount() {
-               return 1;
-       }
-
-       /**
-        * Subclasses may need to override this to make duplication detection work.
-        * The resulting map conveys everything that makes the job unique. This is
-        * only checked if ignoreDuplicates() returns true, meaning that duplicate
-        * jobs are supposed to be ignored.
-        *
-        * @return array Map of key/values
-        * @since 1.21
-        */
-       public function getDeduplicationInfo() {
-               $info = array(
-                       'type' => $this->getType(),
-                       'namespace' => $this->getTitle()->getNamespace(),
-                       'title' => $this->getTitle()->getDBkey(),
-                       'params' => $this->getParams()
-               );
-               if ( is_array( $info['params'] ) ) {
-                       // Identical jobs with different "root" jobs should count as duplicates
-                       unset( $info['params']['rootJobSignature'] );
-                       unset( $info['params']['rootJobTimestamp'] );
-                       // Likewise for jobs with different delay times
-                       unset( $info['params']['jobReleaseTimestamp'] );
-               }
-
-               return $info;
-       }
-
-       /**
-        * @see JobQueue::deduplicateRootJob()
-        * @param string $key A key that identifies the task
-        * @return array Map of:
-        *   - rootJobSignature : hash (e.g. SHA1) that identifies the task
-        *   - rootJobTimestamp : TS_MW timestamp of this instance of the task
-        * @since 1.21
-        */
-       public static function newRootJobParams( $key ) {
-               return array(
-                       'rootJobSignature' => sha1( $key ),
-                       'rootJobTimestamp' => wfTimestampNow()
-               );
-       }
-
-       /**
-        * @see JobQueue::deduplicateRootJob()
-        * @return array
-        * @since 1.21
-        */
-       public function getRootJobParams() {
-               return array(
-                       'rootJobSignature' => isset( $this->params['rootJobSignature'] )
-                               ? $this->params['rootJobSignature']
-                               : null,
-                       'rootJobTimestamp' => isset( $this->params['rootJobTimestamp'] )
-                               ? $this->params['rootJobTimestamp']
-                               : null
-               );
-       }
-
-       /**
-        * @see JobQueue::deduplicateRootJob()
-        * @return bool
-        * @since 1.22
-        */
-       public function hasRootJobParams() {
-               return isset( $this->params['rootJobSignature'] )
-                       && isset( $this->params['rootJobTimestamp'] );
-       }
-
-       /**
-        * Insert a single job into the queue.
-        * @return bool true on success
-        * @deprecated since 1.21
-        */
-       public function insert() {
-               return JobQueueGroup::singleton()->push( $this );
-       }
-
-       /**
-        * @return string
-        */
-       public function toString() {
-               $paramString = '';
-               if ( $this->params ) {
-                       foreach ( $this->params as $key => $value ) {
-                               if ( $paramString != '' ) {
-                                       $paramString .= ' ';
-                               }
-                               if ( is_array( $value ) ) {
-                                       $value = "array(" . count( $value ) . ")";
-                               } elseif ( is_object( $value ) && !method_exists( $value, '__toString' ) ) {
-                                       $value = "object(" . get_class( $value ) . ")";
-                               }
-                               $value = (string)$value;
-                               if ( mb_strlen( $value ) > 1024 ) {
-                                       $value = "string(" . mb_strlen( $value ) . ")";
-                               }
-
-                               $paramString .= "$key=$value";
-                       }
-               }
-
-               if ( is_object( $this->title ) ) {
-                       $s = "{$this->command} " . $this->title->getPrefixedDBkey();
-                       if ( $paramString !== '' ) {
-                               $s .= ' ' . $paramString;
-                       }
-
-                       return $s;
-               } else {
-                       return "{$this->command} $paramString";
-               }
-       }
-
-       protected function setLastError( $error ) {
-               $this->error = $error;
-       }
-
-       public function getLastError() {
-               return $this->error;
-       }
-}
diff --git a/includes/job/JobQueue.php b/includes/job/JobQueue.php
deleted file mode 100644 (file)
index 52978b8..0000000
+++ /dev/null
@@ -1,745 +0,0 @@
-<?php
-/**
- * Job queue base code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @defgroup JobQueue JobQueue
- * @author Aaron Schulz
- */
-
-/**
- * Class to handle enqueueing and running of background jobs
- *
- * @ingroup JobQueue
- * @since 1.21
- */
-abstract class JobQueue {
-       /** @var string Wiki ID */
-       protected $wiki;
-
-       /** @var string Job type */
-       protected $type;
-
-       /** @var string Job priority for pop() */
-       protected $order;
-
-       /** @var int Time to live in seconds */
-       protected $claimTTL;
-
-       /** @var int Maximum number of times to try a job */
-       protected $maxTries;
-
-       /** @var bool Allow delayed jobs */
-       protected $checkDelay;
-
-       /** @var BagOStuff */
-       protected $dupCache;
-
-       const QOS_ATOMIC = 1; // integer; "all-or-nothing" job insertions
-
-       const ROOTJOB_TTL = 2419200; // integer; seconds to remember root jobs (28 days)
-
-       /**
-        * @param array $params
-        * @throws MWException
-        */
-       protected function __construct( array $params ) {
-               $this->wiki = $params['wiki'];
-               $this->type = $params['type'];
-               $this->claimTTL = isset( $params['claimTTL'] ) ? $params['claimTTL'] : 0;
-               $this->maxTries = isset( $params['maxTries'] ) ? $params['maxTries'] : 3;
-               if ( isset( $params['order'] ) && $params['order'] !== 'any' ) {
-                       $this->order = $params['order'];
-               } else {
-                       $this->order = $this->optimalOrder();
-               }
-               if ( !in_array( $this->order, $this->supportedOrders() ) ) {
-                       throw new MWException( __CLASS__ . " does not support '{$this->order}' order." );
-               }
-               $this->checkDelay = !empty( $params['checkDelay'] );
-               if ( $this->checkDelay && !$this->supportsDelayedJobs() ) {
-                       throw new MWException( __CLASS__ . " does not support delayed jobs." );
-               }
-               $this->dupCache = wfGetCache( CACHE_ANYTHING );
-       }
-
-       /**
-        * Get a job queue object of the specified type.
-        * $params includes:
-        *   - class      : What job class to use (determines job type)
-        *   - wiki       : wiki ID of the wiki the jobs are for (defaults to current wiki)
-        *   - type       : The name of the job types this queue handles
-        *   - order      : Order that pop() selects jobs, one of "fifo", "timestamp" or "random".
-        *                  If "fifo" is used, the queue will effectively be FIFO. Note that job
-        *                  completion will not appear to be exactly FIFO if there are multiple
-        *                  job runners since jobs can take different times to finish once popped.
-        *                  If "timestamp" is used, the queue will at least be loosely ordered
-        *                  by timestamp, allowing for some jobs to be popped off out of order.
-        *                  If "random" is used, pop() will pick jobs in random order.
-        *                  Note that it may only be weakly random (e.g. a lottery of the oldest X).
-        *                  If "any" is choosen, the queue will use whatever order is the fastest.
-        *                  This might be useful for improving concurrency for job acquisition.
-        *   - claimTTL   : If supported, the queue will recycle jobs that have been popped
-        *                  but not acknowledged as completed after this many seconds. Recycling
-        *                  of jobs simple means re-inserting them into the queue. Jobs can be
-        *                  attempted up to three times before being discarded.
-        *   - checkDelay : If supported, respect Job::getReleaseTimestamp() in the push functions.
-        *                  This lets delayed jobs wait in a staging area until a given timestamp is
-        *                  reached, at which point they will enter the queue. If this is not enabled
-        *                  or not supported, an exception will be thrown on delayed job insertion.
-        *
-        * Queue classes should throw an exception if they do not support the options given.
-        *
-        * @param array $params
-        * @return JobQueue
-        * @throws MWException
-        */
-       final public static function factory( array $params ) {
-               $class = $params['class'];
-               if ( !class_exists( $class ) ) {
-                       throw new MWException( "Invalid job queue class '$class'." );
-               }
-               $obj = new $class( $params );
-               if ( !( $obj instanceof self ) ) {
-                       throw new MWException( "Class '$class' is not a " . __CLASS__ . " class." );
-               }
-
-               return $obj;
-       }
-
-       /**
-        * @return string Wiki ID
-        */
-       final public function getWiki() {
-               return $this->wiki;
-       }
-
-       /**
-        * @return string Job type that this queue handles
-        */
-       final public function getType() {
-               return $this->type;
-       }
-
-       /**
-        * @return string One of (random, timestamp, fifo, undefined)
-        */
-       final public function getOrder() {
-               return $this->order;
-       }
-
-       /**
-        * @return bool Whether delayed jobs are enabled
-        * @since 1.22
-        */
-       final public function delayedJobsEnabled() {
-               return $this->checkDelay;
-       }
-
-       /**
-        * Get the allowed queue orders for configuration validation
-        *
-        * @return array Subset of (random, timestamp, fifo, undefined)
-        */
-       abstract protected function supportedOrders();
-
-       /**
-        * Get the default queue order to use if configuration does not specify one
-        *
-        * @return string One of (random, timestamp, fifo, undefined)
-        */
-       abstract protected function optimalOrder();
-
-       /**
-        * Find out if delayed jobs are supported for configuration validation
-        *
-        * @return bool Whether delayed jobs are supported
-        */
-       protected function supportsDelayedJobs() {
-               return false; // not implemented
-       }
-
-       /**
-        * Quickly check if the queue has no available (unacquired, non-delayed) jobs.
-        * Queue classes should use caching if they are any slower without memcached.
-        *
-        * If caching is used, this might return false when there are actually no jobs.
-        * If pop() is called and returns false then it should correct the cache. Also,
-        * calling flushCaches() first prevents this. However, this affect is typically
-        * not distinguishable from the race condition between isEmpty() and pop().
-        *
-        * @return bool
-        * @throws JobQueueError
-        */
-       final public function isEmpty() {
-               wfProfileIn( __METHOD__ );
-               $res = $this->doIsEmpty();
-               wfProfileOut( __METHOD__ );
-
-               return $res;
-       }
-
-       /**
-        * @see JobQueue::isEmpty()
-        * @return bool
-        */
-       abstract protected function doIsEmpty();
-
-       /**
-        * Get the number of available (unacquired, non-delayed) jobs in the queue.
-        * Queue classes should use caching if they are any slower without memcached.
-        *
-        * If caching is used, this number might be out of date for a minute.
-        *
-        * @return int
-        * @throws JobQueueError
-        */
-       final public function getSize() {
-               wfProfileIn( __METHOD__ );
-               $res = $this->doGetSize();
-               wfProfileOut( __METHOD__ );
-
-               return $res;
-       }
-
-       /**
-        * @see JobQueue::getSize()
-        * @return int
-        */
-       abstract protected function doGetSize();
-
-       /**
-        * Get the number of acquired jobs (these are temporarily out of the queue).
-        * Queue classes should use caching if they are any slower without memcached.
-        *
-        * If caching is used, this number might be out of date for a minute.
-        *
-        * @return int
-        * @throws JobQueueError
-        */
-       final public function getAcquiredCount() {
-               wfProfileIn( __METHOD__ );
-               $res = $this->doGetAcquiredCount();
-               wfProfileOut( __METHOD__ );
-
-               return $res;
-       }
-
-       /**
-        * @see JobQueue::getAcquiredCount()
-        * @return int
-        */
-       abstract protected function doGetAcquiredCount();
-
-       /**
-        * Get the number of delayed jobs (these are temporarily out of the queue).
-        * Queue classes should use caching if they are any slower without memcached.
-        *
-        * If caching is used, this number might be out of date for a minute.
-        *
-        * @return int
-        * @throws JobQueueError
-        * @since 1.22
-        */
-       final public function getDelayedCount() {
-               wfProfileIn( __METHOD__ );
-               $res = $this->doGetDelayedCount();
-               wfProfileOut( __METHOD__ );
-
-               return $res;
-       }
-
-       /**
-        * @see JobQueue::getDelayedCount()
-        * @return int
-        */
-       protected function doGetDelayedCount() {
-               return 0; // not implemented
-       }
-
-       /**
-        * Get the number of acquired jobs that can no longer be attempted.
-        * Queue classes should use caching if they are any slower without memcached.
-        *
-        * If caching is used, this number might be out of date for a minute.
-        *
-        * @return int
-        * @throws JobQueueError
-        */
-       final public function getAbandonedCount() {
-               wfProfileIn( __METHOD__ );
-               $res = $this->doGetAbandonedCount();
-               wfProfileOut( __METHOD__ );
-
-               return $res;
-       }
-
-       /**
-        * @see JobQueue::getAbandonedCount()
-        * @return int
-        */
-       protected function doGetAbandonedCount() {
-               return 0; // not implemented
-       }
-
-       /**
-        * Push one or more jobs into the queue.
-        * This does not require $wgJobClasses to be set for the given job type.
-        * Outside callers should use JobQueueGroup::push() instead of this function.
-        *
-        * @param Job|array $jobs A single job or an array of Jobs
-        * @param int $flags Bitfield (supports JobQueue::QOS_ATOMIC)
-        * @return bool Returns false on failure
-        * @throws JobQueueError
-        */
-       final public function push( $jobs, $flags = 0 ) {
-               return $this->batchPush( is_array( $jobs ) ? $jobs : array( $jobs ), $flags );
-       }
-
-       /**
-        * Push a batch of jobs into the queue.
-        * This does not require $wgJobClasses to be set for the given job type.
-        * Outside callers should use JobQueueGroup::push() instead of this function.
-        *
-        * @param array $jobs List of Jobs
-        * @param int $flags Bitfield (supports JobQueue::QOS_ATOMIC)
-        * @throws MWException
-        * @return bool Returns false on failure
-        */
-       final public function batchPush( array $jobs, $flags = 0 ) {
-               if ( !count( $jobs ) ) {
-                       return true; // nothing to do
-               }
-
-               foreach ( $jobs as $job ) {
-                       if ( $job->getType() !== $this->type ) {
-                               throw new MWException(
-                                       "Got '{$job->getType()}' job; expected a '{$this->type}' job." );
-                       } elseif ( $job->getReleaseTimestamp() && !$this->checkDelay ) {
-                               throw new MWException(
-                                       "Got delayed '{$job->getType()}' job; delays are not supported." );
-                       }
-               }
-
-               wfProfileIn( __METHOD__ );
-               $ok = $this->doBatchPush( $jobs, $flags );
-               wfProfileOut( __METHOD__ );
-
-               return $ok;
-       }
-
-       /**
-        * @see JobQueue::batchPush()
-        * @param array $jobs
-        * @param $flags
-        * @return bool
-        */
-       abstract protected function doBatchPush( array $jobs, $flags );
-
-       /**
-        * Pop a job off of the queue.
-        * This requires $wgJobClasses to be set for the given job type.
-        * Outside callers should use JobQueueGroup::pop() instead of this function.
-        *
-        * @throws MWException
-        * @return Job|bool Returns false if there are no jobs
-        */
-       final public function pop() {
-               global $wgJobClasses;
-
-               if ( $this->wiki !== wfWikiID() ) {
-                       throw new MWException( "Cannot pop '{$this->type}' job off foreign wiki queue." );
-               } elseif ( !isset( $wgJobClasses[$this->type] ) ) {
-                       // Do not pop jobs if there is no class for the queue type
-                       throw new MWException( "Unrecognized job type '{$this->type}'." );
-               }
-
-               wfProfileIn( __METHOD__ );
-               $job = $this->doPop();
-               wfProfileOut( __METHOD__ );
-
-               // Flag this job as an old duplicate based on its "root" job...
-               try {
-                       if ( $job && $this->isRootJobOldDuplicate( $job ) ) {
-                               JobQueue::incrStats( 'job-pop-duplicate', $this->type );
-                               $job = DuplicateJob::newFromJob( $job ); // convert to a no-op
-                       }
-               } catch ( MWException $e ) {
-                       // don't lose jobs over this
-               }
-
-               return $job;
-       }
-
-       /**
-        * @see JobQueue::pop()
-        * @return Job
-        */
-       abstract protected function doPop();
-
-       /**
-        * Acknowledge that a job was completed.
-        *
-        * This does nothing for certain queue classes or if "claimTTL" is not set.
-        * Outside callers should use JobQueueGroup::ack() instead of this function.
-        *
-        * @param Job $job
-        * @throws MWException
-        * @return bool
-        */
-       final public function ack( Job $job ) {
-               if ( $job->getType() !== $this->type ) {
-                       throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
-               }
-               wfProfileIn( __METHOD__ );
-               $ok = $this->doAck( $job );
-               wfProfileOut( __METHOD__ );
-
-               return $ok;
-       }
-
-       /**
-        * @see JobQueue::ack()
-        * @param Job $job
-        * @return bool
-        */
-       abstract protected function doAck( Job $job );
-
-       /**
-        * Register the "root job" of a given job into the queue for de-duplication.
-        * This should only be called right *after* all the new jobs have been inserted.
-        * This is used to turn older, duplicate, job entries into no-ops. The root job
-        * information will remain in the registry until it simply falls out of cache.
-        *
-        * This requires that $job has two special fields in the "params" array:
-        *   - rootJobSignature : hash (e.g. SHA1) that identifies the task
-        *   - rootJobTimestamp : TS_MW timestamp of this instance of the task
-        *
-        * A "root job" is a conceptual job that consist of potentially many smaller jobs
-        * that are actually inserted into the queue. For example, "refreshLinks" jobs are
-        * spawned when a template is edited. One can think of the task as "update links
-        * of pages that use template X" and an instance of that task as a "root job".
-        * However, what actually goes into the queue are potentially many refreshLinks2 jobs.
-        * Since these jobs include things like page ID ranges and DB master positions, and morph
-        * into smaller refreshLinks2 jobs recursively, simple duplicate detection (like job_sha1)
-        * for individual jobs being identical is not useful.
-        *
-        * In the case of "refreshLinks", if these jobs are still in the queue when the template
-        * is edited again, we want all of these old refreshLinks jobs for that template to become
-        * no-ops. This can greatly reduce server load, since refreshLinks jobs involves parsing.
-        * Essentially, the new batch of jobs belong to a new "root job" and the older ones to a
-        * previous "root job" for the same task of "update links of pages that use template X".
-        *
-        * This does nothing for certain queue classes.
-        *
-        * @param Job $job
-        * @throws MWException
-        * @return bool
-        */
-       final public function deduplicateRootJob( Job $job ) {
-               if ( $job->getType() !== $this->type ) {
-                       throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
-               }
-               wfProfileIn( __METHOD__ );
-               $ok = $this->doDeduplicateRootJob( $job );
-               wfProfileOut( __METHOD__ );
-
-               return $ok;
-       }
-
-       /**
-        * @see JobQueue::deduplicateRootJob()
-        * @param Job $job
-        * @throws MWException
-        * @return bool
-        */
-       protected function doDeduplicateRootJob( Job $job ) {
-               if ( !$job->hasRootJobParams() ) {
-                       throw new MWException( "Cannot register root job; missing parameters." );
-               }
-               $params = $job->getRootJobParams();
-
-               $key = $this->getRootJobCacheKey( $params['rootJobSignature'] );
-               // Callers should call batchInsert() and then this function so that if the insert
-               // fails, the de-duplication registration will be aborted. Since the insert is
-               // deferred till "transaction idle", do the same here, so that the ordering is
-               // maintained. Having only the de-duplication registration succeed would cause
-               // jobs to become no-ops without any actual jobs that made them redundant.
-               $timestamp = $this->dupCache->get( $key ); // current last timestamp of this job
-               if ( $timestamp && $timestamp >= $params['rootJobTimestamp'] ) {
-                       return true; // a newer version of this root job was enqueued
-               }
-
-               // Update the timestamp of the last root job started at the location...
-               return $this->dupCache->set( $key, $params['rootJobTimestamp'], JobQueueDB::ROOTJOB_TTL );
-       }
-
-       /**
-        * Check if the "root" job of a given job has been superseded by a newer one
-        *
-        * @param Job $job
-        * @throws MWException
-        * @return bool
-        */
-       final protected function isRootJobOldDuplicate( Job $job ) {
-               if ( $job->getType() !== $this->type ) {
-                       throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
-               }
-               wfProfileIn( __METHOD__ );
-               $isDuplicate = $this->doIsRootJobOldDuplicate( $job );
-               wfProfileOut( __METHOD__ );
-
-               return $isDuplicate;
-       }
-
-       /**
-        * @see JobQueue::isRootJobOldDuplicate()
-        * @param Job $job
-        * @return bool
-        */
-       protected function doIsRootJobOldDuplicate( Job $job ) {
-               if ( !$job->hasRootJobParams() ) {
-                       return false; // job has no de-deplication info
-               }
-               $params = $job->getRootJobParams();
-
-               $key = $this->getRootJobCacheKey( $params['rootJobSignature'] );
-               // Get the last time this root job was enqueued
-               $timestamp = $this->dupCache->get( $key );
-
-               // Check if a new root job was started at the location after this one's...
-               return ( $timestamp && $timestamp > $params['rootJobTimestamp'] );
-       }
-
-       /**
-        * @param string $signature Hash identifier of the root job
-        * @return string
-        */
-       protected function getRootJobCacheKey( $signature ) {
-               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
-
-               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, 'rootjob', $signature );
-       }
-
-       /**
-        * Deleted all unclaimed and delayed jobs from the queue
-        *
-        * @return bool Success
-        * @throws JobQueueError
-        * @since 1.22
-        */
-       final public function delete() {
-               wfProfileIn( __METHOD__ );
-               $res = $this->doDelete();
-               wfProfileOut( __METHOD__ );
-
-               return $res;
-       }
-
-       /**
-        * @see JobQueue::delete()
-        * @throws MWException
-        * @return bool Success
-        */
-       protected function doDelete() {
-               throw new MWException( "This method is not implemented." );
-       }
-
-       /**
-        * Wait for any slaves or backup servers to catch up.
-        *
-        * This does nothing for certain queue classes.
-        *
-        * @return void
-        * @throws JobQueueError
-        */
-       final public function waitForBackups() {
-               wfProfileIn( __METHOD__ );
-               $this->doWaitForBackups();
-               wfProfileOut( __METHOD__ );
-       }
-
-       /**
-        * @see JobQueue::waitForBackups()
-        * @return void
-        */
-       protected function doWaitForBackups() {
-       }
-
-       /**
-        * Return a map of task names to task definition maps.
-        * A "task" is a fast periodic queue maintenance action.
-        * Mutually exclusive tasks must implement their own locking in the callback.
-        *
-        * Each task value is an associative array with:
-        *   - name     : the name of the task
-        *   - callback : a PHP callable that performs the task
-        *   - period   : the period in seconds corresponding to the task frequency
-        *
-        * @return array
-        */
-       final public function getPeriodicTasks() {
-               $tasks = $this->doGetPeriodicTasks();
-               foreach ( $tasks as $name => &$def ) {
-                       $def['name'] = $name;
-               }
-
-               return $tasks;
-       }
-
-       /**
-        * @see JobQueue::getPeriodicTasks()
-        * @return array
-        */
-       protected function doGetPeriodicTasks() {
-               return array();
-       }
-
-       /**
-        * Clear any process and persistent caches
-        *
-        * @return void
-        */
-       final public function flushCaches() {
-               wfProfileIn( __METHOD__ );
-               $this->doFlushCaches();
-               wfProfileOut( __METHOD__ );
-       }
-
-       /**
-        * @see JobQueue::flushCaches()
-        * @return void
-        */
-       protected function doFlushCaches() {
-       }
-
-       /**
-        * Get an iterator to traverse over all available jobs in this queue.
-        * This does not include jobs that are currently acquired or delayed.
-        * Note: results may be stale if the queue is concurrently modified.
-        *
-        * @return Iterator
-        * @throws JobQueueError
-        */
-       abstract public function getAllQueuedJobs();
-
-       /**
-        * Get an iterator to traverse over all delayed jobs in this queue.
-        * Note: results may be stale if the queue is concurrently modified.
-        *
-        * @return Iterator
-        * @throws JobQueueError
-        * @since 1.22
-        */
-       public function getAllDelayedJobs() {
-               return new ArrayIterator( array() ); // not implemented
-       }
-
-       /**
-        * Do not use this function outside of JobQueue/JobQueueGroup
-        *
-        * @return string
-        * @since 1.22
-        */
-       public function getCoalesceLocationInternal() {
-               return null;
-       }
-
-       /**
-        * Check whether each of the given queues are empty.
-        * This is used for batching checks for queues stored at the same place.
-        *
-        * @param array $types List of queues types
-        * @return array|null (list of non-empty queue types) or null if unsupported
-        * @throws MWException
-        * @since 1.22
-        */
-       final public function getSiblingQueuesWithJobs( array $types ) {
-               $section = new ProfileSection( __METHOD__ );
-
-               return $this->doGetSiblingQueuesWithJobs( $types );
-       }
-
-       /**
-        * @see JobQueue::getSiblingQueuesWithJobs()
-        * @param array $types List of queues types
-        * @return array|null (list of queue types) or null if unsupported
-        */
-       protected function doGetSiblingQueuesWithJobs( array $types ) {
-               return null; // not supported
-       }
-
-       /**
-        * Check the size of each of the given queues.
-        * For queues not served by the same store as this one, 0 is returned.
-        * This is used for batching checks for queues stored at the same place.
-        *
-        * @param array $types List of queues types
-        * @return array|null (job type => whether queue is empty) or null if unsupported
-        * @throws MWException
-        * @since 1.22
-        */
-       final public function getSiblingQueueSizes( array $types ) {
-               $section = new ProfileSection( __METHOD__ );
-
-               return $this->doGetSiblingQueueSizes( $types );
-       }
-
-       /**
-        * @see JobQueue::getSiblingQueuesSize()
-        * @param array $types List of queues types
-        * @return array|null (list of queue types) or null if unsupported
-        */
-       protected function doGetSiblingQueueSizes( array $types ) {
-               return null; // not supported
-       }
-
-       /**
-        * Call wfIncrStats() for the queue overall and for the queue type
-        *
-        * @param string $key Event type
-        * @param string $type Job type
-        * @param int $delta
-        * @since 1.22
-        */
-       public static function incrStats( $key, $type, $delta = 1 ) {
-               wfIncrStats( $key, $delta );
-               wfIncrStats( "{$key}-{$type}", $delta );
-       }
-
-       /**
-        * Namespace the queue with a key to isolate it for testing
-        *
-        * @param string $key
-        * @return void
-        * @throws MWException
-        */
-       public function setTestingPrefix( $key ) {
-               throw new MWException( "Queue namespacing not supported for this queue type." );
-       }
-}
-
-/**
- * @ingroup JobQueue
- * @since 1.22
- */
-class JobQueueError extends MWException {
-}
-
-class JobQueueConnectionError extends JobQueueError {
-}
diff --git a/includes/job/JobQueueDB.php b/includes/job/JobQueueDB.php
deleted file mode 100644 (file)
index 6097d31..0000000
+++ /dev/null
@@ -1,848 +0,0 @@
-<?php
-/**
- * Database-backed job queue code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * Class to handle job queues stored in the DB
- *
- * @ingroup JobQueue
- * @since 1.21
- */
-class JobQueueDB extends JobQueue {
-       const CACHE_TTL_SHORT = 30; // integer; seconds to cache info without re-validating
-       const CACHE_TTL_LONG = 300; // integer; seconds to cache info that is kept up to date
-       const MAX_AGE_PRUNE = 604800; // integer; seconds a job can live once claimed
-       const MAX_JOB_RANDOM = 2147483647; // integer; 2^31 - 1, used for job_random
-       const MAX_OFFSET = 255; // integer; maximum number of rows to skip
-
-       /** @var BagOStuff */
-       protected $cache;
-
-       /** @var bool|string Name of an external DB cluster. False if not set */
-       protected $cluster = false;
-
-       /**
-        * 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 array $params
-        */
-       protected function __construct( array $params ) {
-               global $wgMemc;
-
-               parent::__construct( $params );
-
-               $this->cluster = isset( $params['cluster'] ) ? $params['cluster'] : false;
-               // Make sure that we don't use the SQL cache, which would be harmful
-               $this->cache = ( $wgMemc instanceof SqlBagOStuff ) ? new EmptyBagOStuff() : $wgMemc;
-       }
-
-       protected function supportedOrders() {
-               return array( 'random', 'timestamp', 'fifo' );
-       }
-
-       protected function optimalOrder() {
-               return 'random';
-       }
-
-       /**
-        * @see JobQueue::doIsEmpty()
-        * @return bool
-        */
-       protected function doIsEmpty() {
-               $key = $this->getCacheKey( 'empty' );
-
-               $isEmpty = $this->cache->get( $key );
-               if ( $isEmpty === 'true' ) {
-                       return true;
-               } elseif ( $isEmpty === 'false' ) {
-                       return false;
-               }
-
-               $dbr = $this->getSlaveDB();
-               try {
-                       $found = $dbr->selectField( // unclaimed job
-                               'job', '1', array( 'job_cmd' => $this->type, 'job_token' => '' ), __METHOD__
-                       );
-               } catch ( DBError $e ) {
-                       $this->throwDBException( $e );
-               }
-               $this->cache->add( $key, $found ? 'false' : 'true', self::CACHE_TTL_LONG );
-
-               return !$found;
-       }
-
-       /**
-        * @see JobQueue::doGetSize()
-        * @return int
-        */
-       protected function doGetSize() {
-               $key = $this->getCacheKey( 'size' );
-
-               $size = $this->cache->get( $key );
-               if ( is_int( $size ) ) {
-                       return $size;
-               }
-
-               try {
-                       $dbr = $this->getSlaveDB();
-                       $size = (int)$dbr->selectField( 'job', 'COUNT(*)',
-                               array( 'job_cmd' => $this->type, 'job_token' => '' ),
-                               __METHOD__
-                       );
-               } catch ( DBError $e ) {
-                       $this->throwDBException( $e );
-               }
-               $this->cache->set( $key, $size, self::CACHE_TTL_SHORT );
-
-               return $size;
-       }
-
-       /**
-        * @see JobQueue::doGetAcquiredCount()
-        * @return int
-        */
-       protected function doGetAcquiredCount() {
-               if ( $this->claimTTL <= 0 ) {
-                       return 0; // no acknowledgements
-               }
-
-               $key = $this->getCacheKey( 'acquiredcount' );
-
-               $count = $this->cache->get( $key );
-               if ( is_int( $count ) ) {
-                       return $count;
-               }
-
-               $dbr = $this->getSlaveDB();
-               try {
-                       $count = (int)$dbr->selectField( 'job', 'COUNT(*)',
-                               array( 'job_cmd' => $this->type, "job_token != {$dbr->addQuotes( '' )}" ),
-                               __METHOD__
-                       );
-               } catch ( DBError $e ) {
-                       $this->throwDBException( $e );
-               }
-               $this->cache->set( $key, $count, self::CACHE_TTL_SHORT );
-
-               return $count;
-       }
-
-       /**
-        * @see JobQueue::doGetAbandonedCount()
-        * @return int
-        * @throws MWException
-        */
-       protected function doGetAbandonedCount() {
-               global $wgMemc;
-
-               if ( $this->claimTTL <= 0 ) {
-                       return 0; // no acknowledgements
-               }
-
-               $key = $this->getCacheKey( 'abandonedcount' );
-
-               $count = $wgMemc->get( $key );
-               if ( is_int( $count ) ) {
-                       return $count;
-               }
-
-               $dbr = $this->getSlaveDB();
-               try {
-                       $count = (int)$dbr->selectField( 'job', 'COUNT(*)',
-                               array(
-                                       'job_cmd' => $this->type,
-                                       "job_token != {$dbr->addQuotes( '' )}",
-                                       "job_attempts >= " . $dbr->addQuotes( $this->maxTries )
-                               ),
-                               __METHOD__
-                       );
-               } catch ( DBError $e ) {
-                       $this->throwDBException( $e );
-               }
-               $wgMemc->set( $key, $count, self::CACHE_TTL_SHORT );
-
-               return $count;
-       }
-
-       /**
-        * @see JobQueue::doBatchPush()
-        * @param array $jobs
-        * @param $flags
-        * @throws DBError|Exception
-        * @return bool
-        */
-       protected function doBatchPush( array $jobs, $flags ) {
-               $dbw = $this->getMasterDB();
-
-               $that = $this;
-               $method = __METHOD__;
-               $dbw->onTransactionIdle(
-                       function () use ( $dbw, $that, $jobs, $flags, $method ) {
-                               $that->doBatchPushInternal( $dbw, $jobs, $flags, $method );
-                       }
-               );
-
-               return true;
-       }
-
-       /**
-        * This function should *not* be called outside of JobQueueDB
-        *
-        * @param IDatabase $dbw
-        * @param array $jobs
-        * @param int $flags
-        * @param string $method
-        * @throws DBError
-        * @return bool
-        */
-       public function doBatchPushInternal( IDatabase $dbw, array $jobs, $flags, $method ) {
-               if ( !count( $jobs ) ) {
-                       return true;
-               }
-
-               $rowSet = array(); // (sha1 => job) map for jobs that are de-duplicated
-               $rowList = array(); // list of jobs for jobs that are are not de-duplicated
-               foreach ( $jobs as $job ) {
-                       $row = $this->insertFields( $job );
-                       if ( $job->ignoreDuplicates() ) {
-                               $rowSet[$row['job_sha1']] = $row;
-                       } else {
-                               $rowList[] = $row;
-                       }
-               }
-
-               if ( $flags & self::QOS_ATOMIC ) {
-                       $dbw->begin( $method ); // wrap all the job additions in one transaction
-               }
-               try {
-                       // Strip out any duplicate jobs that are already in the queue...
-                       if ( count( $rowSet ) ) {
-                               $res = $dbw->select( 'job', 'job_sha1',
-                                       array(
-                                               // No job_type condition since it's part of the job_sha1 hash
-                                               'job_sha1' => array_keys( $rowSet ),
-                                               'job_token' => '' // unclaimed
-                                       ),
-                                       $method
-                               );
-                               foreach ( $res as $row ) {
-                                       wfDebug( "Job with hash '{$row->job_sha1}' is a duplicate.\n" );
-                                       unset( $rowSet[$row->job_sha1] ); // already enqueued
-                               }
-                       }
-                       // Build the full list of job rows to insert
-                       $rows = array_merge( $rowList, array_values( $rowSet ) );
-                       // Insert the job rows in chunks to avoid slave lag...
-                       foreach ( array_chunk( $rows, 50 ) as $rowBatch ) {
-                               $dbw->insert( 'job', $rowBatch, $method );
-                       }
-                       JobQueue::incrStats( 'job-insert', $this->type, count( $rows ) );
-                       JobQueue::incrStats(
-                               'job-insert-duplicate',
-                               $this->type,
-                               count( $rowSet ) + count( $rowList ) - count( $rows )
-                       );
-               } catch ( DBError $e ) {
-                       if ( $flags & self::QOS_ATOMIC ) {
-                               $dbw->rollback( $method );
-                       }
-                       throw $e;
-               }
-               if ( $flags & self::QOS_ATOMIC ) {
-                       $dbw->commit( $method );
-               }
-
-               $this->cache->set( $this->getCacheKey( 'empty' ), 'false', JobQueueDB::CACHE_TTL_LONG );
-
-               return true;
-       }
-
-       /**
-        * @see JobQueue::doPop()
-        * @return Job|bool
-        */
-       protected function doPop() {
-               if ( $this->cache->get( $this->getCacheKey( 'empty' ) ) === 'true' ) {
-                       return false; // queue is empty
-               }
-
-               $dbw = $this->getMasterDB();
-               try {
-                       $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
-                       $autoTrx = $dbw->getFlag( DBO_TRX ); // get current setting
-                       $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
-                       $scopedReset = new ScopedCallback( function () use ( $dbw, $autoTrx ) {
-                               $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore old setting
-                       } );
-
-                       $uuid = wfRandomString( 32 ); // pop attempt
-                       $job = false; // job popped off
-                       do { // retry when our row is invalid or deleted as a duplicate
-                               // Try to reserve a row in the DB...
-                               if ( in_array( $this->order, array( 'fifo', 'timestamp' ) ) ) {
-                                       $row = $this->claimOldest( $uuid );
-                               } else { // random first
-                                       $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 );
-                               }
-                               // Check if we found a row to reserve...
-                               if ( !$row ) {
-                                       $this->cache->set( $this->getCacheKey( 'empty' ), 'true', self::CACHE_TTL_LONG );
-                                       break; // nothing to do
-                               }
-                               JobQueue::incrStats( 'job-pop', $this->type );
-                               // Get the job object from the row...
-                               $title = Title::makeTitleSafe( $row->job_namespace, $row->job_title );
-                               if ( !$title ) {
-                                       $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
-                                       wfDebug( "Row has invalid title '{$row->job_title}'." );
-                                       continue; // try again
-                               }
-                               $job = Job::factory( $row->job_cmd, $title,
-                                       self::extractBlob( $row->job_params ), $row->job_id );
-                               $job->metadata['id'] = $row->job_id;
-                               break; // done
-                       } while ( true );
-               } catch ( DBError $e ) {
-                       $this->throwDBException( $e );
-               }
-
-               return $job;
-       }
-
-       /**
-        * Reserve a row with a single UPDATE without holding row locks over RTTs...
-        *
-        * @param string $uuid 32 char hex string
-        * @param $rand integer Random unsigned integer (31 bits)
-        * @param bool $gte Search for job_random >= $random (otherwise job_random <= $random)
-        * @return stdClass|bool Row|false
-        */
-       protected function claimRandom( $uuid, $rand, $gte ) {
-               $dbw = $this->getMasterDB();
-               // Check cache to see if the queue has <= OFFSET items
-               $tinyQueue = $this->cache->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 {
-                       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', self::selectFields(), // 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', self::selectFields(), // 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
-                                       $this->cache->set( $this->getCacheKey( 'small' ), 1, 30 );
-                                       continue; // use job_random
-                               }
-                       }
-
-                       if ( $row ) { // claim the job
-                               $dbw->update( 'job', // update by PK
-                                       array(
-                                               'job_token' => $uuid,
-                                               'job_token_timestamp' => $dbw->timestamp(),
-                                               'job_attempts = job_attempts+1' ),
-                                       array( 'job_cmd' => $this->type, 'job_id' => $row->job_id, 'job_token' => '' ),
-                                       __METHOD__
-                               );
-                               // This might get raced out by another runner when claiming the previously
-                               // selected row. The use of job_random should minimize this problem, however.
-                               if ( !$dbw->affectedRows() ) {
-                                       $row = false; // raced out
-                               }
-                       } else {
-                               break; // nothing to do
-                       }
-               } while ( !$row );
-
-               return $row;
-       }
-
-       /**
-        * Reserve a row with a single UPDATE without holding row locks over RTTs...
-        *
-        * @param string $uuid 32 char hex string
-        * @return stdClass|bool Row|false
-        */
-       protected function claimOldest( $uuid ) {
-               $dbw = $this->getMasterDB();
-
-               $row = false; // the row acquired
-               do {
-                       if ( $dbw->getType() === 'mysql' ) {
-                               // Per http://bugs.mysql.com/bug.php?id=6980, we can't use subqueries on the
-                               // same table being changed in an UPDATE query in MySQL (gives Error: 1093).
-                               // Oracle and Postgre have no such limitation. However, MySQL offers an
-                               // alternative here by supporting ORDER BY + LIMIT for UPDATE queries.
-                               $dbw->query( "UPDATE {$dbw->tableName( 'job' )} " .
-                                       "SET " .
-                                               "job_token = {$dbw->addQuotes( $uuid ) }, " .
-                                               "job_token_timestamp = {$dbw->addQuotes( $dbw->timestamp() )}, " .
-                                               "job_attempts = job_attempts+1 " .
-                                       "WHERE ( " .
-                                               "job_cmd = {$dbw->addQuotes( $this->type )} " .
-                                               "AND job_token = {$dbw->addQuotes( '' )} " .
-                                       ") ORDER BY job_id ASC LIMIT 1",
-                                       __METHOD__
-                               );
-                       } else {
-                               // Use a subquery to find the job, within an UPDATE to claim it.
-                               // This uses as much of the DB wrapper functions as possible.
-                               $dbw->update( 'job',
-                                       array(
-                                               'job_token' => $uuid,
-                                               'job_token_timestamp' => $dbw->timestamp(),
-                                               'job_attempts = job_attempts+1' ),
-                                       array( 'job_id = (' .
-                                               $dbw->selectSQLText( 'job', 'job_id',
-                                                       array( 'job_cmd' => $this->type, 'job_token' => '' ),
-                                                       __METHOD__,
-                                                       array( 'ORDER BY' => 'job_id ASC', 'LIMIT' => 1 ) ) .
-                                               ')'
-                                       ),
-                                       __METHOD__
-                               );
-                       }
-                       // Fetch any row that we just reserved...
-                       if ( $dbw->affectedRows() ) {
-                               $row = $dbw->selectRow( 'job', self::selectFields(),
-                                       array( 'job_cmd' => $this->type, 'job_token' => $uuid ), __METHOD__
-                               );
-                               if ( !$row ) { // raced out by duplicate job removal
-                                       wfDebug( "Row deleted as duplicate by another process." );
-                               }
-                       } else {
-                               break; // nothing to do
-                       }
-               } while ( !$row );
-
-               return $row;
-       }
-
-       /**
-        * @see JobQueue::doAck()
-        * @param Job $job
-        * @throws MWException
-        * @return Job|bool
-        */
-       protected function doAck( Job $job ) {
-               if ( !isset( $job->metadata['id'] ) ) {
-                       throw new MWException( "Job of type '{$job->getType()}' has no ID." );
-               }
-
-               $dbw = $this->getMasterDB();
-               try {
-                       $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
-                       $autoTrx = $dbw->getFlag( DBO_TRX ); // get current setting
-                       $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
-                       $scopedReset = new ScopedCallback( function () use ( $dbw, $autoTrx ) {
-                               $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore old setting
-                       } );
-
-                       // Delete a row with a single DELETE without holding row locks over RTTs...
-                       $dbw->delete( 'job',
-                               array( 'job_cmd' => $this->type, 'job_id' => $job->metadata['id'] ), __METHOD__ );
-               } catch ( DBError $e ) {
-                       $this->throwDBException( $e );
-               }
-
-               return true;
-       }
-
-       /**
-        * @see JobQueue::doDeduplicateRootJob()
-        * @param Job $job
-        * @throws MWException
-        * @return bool
-        */
-       protected function doDeduplicateRootJob( Job $job ) {
-               $params = $job->getParams();
-               if ( !isset( $params['rootJobSignature'] ) ) {
-                       throw new MWException( "Cannot register root job; missing 'rootJobSignature'." );
-               } elseif ( !isset( $params['rootJobTimestamp'] ) ) {
-                       throw new MWException( "Cannot register root job; missing 'rootJobTimestamp'." );
-               }
-               $key = $this->getRootJobCacheKey( $params['rootJobSignature'] );
-               // Callers should call batchInsert() and then this function so that if the insert
-               // fails, the de-duplication registration will be aborted. Since the insert is
-               // deferred till "transaction idle", do the same here, so that the ordering is
-               // maintained. Having only the de-duplication registration succeed would cause
-               // jobs to become no-ops without any actual jobs that made them redundant.
-               $dbw = $this->getMasterDB();
-               $cache = $this->dupCache;
-               $dbw->onTransactionIdle( function () use ( $cache, $params, $key, $dbw ) {
-                       $timestamp = $cache->get( $key ); // current last timestamp of this job
-                       if ( $timestamp && $timestamp >= $params['rootJobTimestamp'] ) {
-                               return true; // a newer version of this root job was enqueued
-                       }
-
-                       // Update the timestamp of the last root job started at the location...
-                       return $cache->set( $key, $params['rootJobTimestamp'], JobQueueDB::ROOTJOB_TTL );
-               } );
-
-               return true;
-       }
-
-       /**
-        * @see JobQueue::doDelete()
-        * @return bool
-        */
-       protected function doDelete() {
-               $dbw = $this->getMasterDB();
-               try {
-                       $dbw->delete( 'job', array( 'job_cmd' => $this->type ) );
-               } catch ( DBError $e ) {
-                       $this->throwDBException( $e );
-               }
-
-               return true;
-       }
-
-       /**
-        * @see JobQueue::doWaitForBackups()
-        * @return void
-        */
-       protected function doWaitForBackups() {
-               wfWaitForSlaves();
-       }
-
-       /**
-        * @return array
-        */
-       protected function doGetPeriodicTasks() {
-               return array(
-                       'recycleAndDeleteStaleJobs' => array(
-                               'callback' => array( $this, 'recycleAndDeleteStaleJobs' ),
-                               'period' => ceil( $this->claimTTL / 2 )
-                       )
-               );
-       }
-
-       /**
-        * @return void
-        */
-       protected function doFlushCaches() {
-               foreach ( array( 'empty', 'size', 'acquiredcount' ) as $type ) {
-                       $this->cache->delete( $this->getCacheKey( $type ) );
-               }
-       }
-
-       /**
-        * @see JobQueue::getAllQueuedJobs()
-        * @return Iterator
-        */
-       public function getAllQueuedJobs() {
-               $dbr = $this->getSlaveDB();
-               try {
-                       return new MappedIterator(
-                               $dbr->select( 'job', self::selectFields(),
-                                       array( 'job_cmd' => $this->getType(), 'job_token' => '' ) ),
-                               function ( $row ) use ( $dbr ) {
-                                       $job = Job::factory(
-                                               $row->job_cmd,
-                                               Title::makeTitle( $row->job_namespace, $row->job_title ),
-                                               strlen( $row->job_params ) ? unserialize( $row->job_params ) : false
-                                       );
-                                       $job->metadata['id'] = $row->job_id;
-                                       return $job;
-                               }
-                       );
-               } catch ( DBError $e ) {
-                       $this->throwDBException( $e );
-               }
-       }
-
-       public function getCoalesceLocationInternal() {
-               return $this->cluster
-                       ? "DBCluster:{$this->cluster}:{$this->wiki}"
-                       : "LBFactory:{$this->wiki}";
-       }
-
-       protected function doGetSiblingQueuesWithJobs( array $types ) {
-               $dbr = $this->getSlaveDB();
-               $res = $dbr->select( 'job', 'DISTINCT job_cmd',
-                       array( 'job_cmd' => $types ), __METHOD__ );
-
-               $types = array();
-               foreach ( $res as $row ) {
-                       $types[] = $row->job_cmd;
-               }
-
-               return $types;
-       }
-
-       protected function doGetSiblingQueueSizes( array $types ) {
-               $dbr = $this->getSlaveDB();
-               $res = $dbr->select( 'job', array( 'job_cmd', 'COUNT(*) AS count' ),
-                       array( 'job_cmd' => $types ), __METHOD__, array( 'GROUP BY' => 'job_cmd' ) );
-
-               $sizes = array();
-               foreach ( $res as $row ) {
-                       $sizes[$row->job_cmd] = (int)$row->count;
-               }
-
-               return $sizes;
-       }
-
-       /**
-        * Recycle or destroy any jobs that have been claimed for too long
-        *
-        * @return int Number of jobs recycled/deleted
-        */
-       public function recycleAndDeleteStaleJobs() {
-               $now = time();
-               $count = 0; // affected rows
-               $dbw = $this->getMasterDB();
-
-               try {
-                       if ( !$dbw->lock( "jobqueue-recycle-{$this->type}", __METHOD__, 1 ) ) {
-                               return $count; // already in progress
-                       }
-
-                       // Remove claims on jobs acquired for too long if enabled...
-                       if ( $this->claimTTL > 0 ) {
-                               $claimCutoff = $dbw->timestamp( $now - $this->claimTTL );
-                               // Get the IDs of jobs that have be claimed but not finished after too long.
-                               // These jobs can be recycled into the queue by expiring the claim. Selecting
-                               // the IDs first means that the UPDATE can be done by primary key (less deadlocks).
-                               $res = $dbw->select( 'job', 'job_id',
-                                       array(
-                                               'job_cmd' => $this->type,
-                                               "job_token != {$dbw->addQuotes( '' )}", // was acquired
-                                               "job_token_timestamp < {$dbw->addQuotes( $claimCutoff )}", // stale
-                                               "job_attempts < {$dbw->addQuotes( $this->maxTries )}" ), // retries left
-                                       __METHOD__
-                               );
-                               $ids = array_map(
-                                       function ( $o ) {
-                                               return $o->job_id;
-                                       }, iterator_to_array( $res )
-                               );
-                               if ( count( $ids ) ) {
-                                       // Reset job_token for these jobs so that other runners will pick them up.
-                                       // Set the timestamp to the current time, as it is useful to now that the job
-                                       // was already tried before (the timestamp becomes the "released" time).
-                                       $dbw->update( 'job',
-                                               array(
-                                                       'job_token' => '',
-                                                       'job_token_timestamp' => $dbw->timestamp( $now ) ), // time of release
-                                               array(
-                                                       'job_id' => $ids ),
-                                               __METHOD__
-                                       );
-                                       $count += $dbw->affectedRows();
-                                       JobQueue::incrStats( 'job-recycle', $this->type, $dbw->affectedRows() );
-                                       $this->cache->set( $this->getCacheKey( 'empty' ), 'false', self::CACHE_TTL_LONG );
-                               }
-                       }
-
-                       // Just destroy any stale jobs...
-                       $pruneCutoff = $dbw->timestamp( $now - self::MAX_AGE_PRUNE );
-                       $conds = array(
-                               'job_cmd' => $this->type,
-                               "job_token != {$dbw->addQuotes( '' )}", // was acquired
-                               "job_token_timestamp < {$dbw->addQuotes( $pruneCutoff )}" // stale
-                       );
-                       if ( $this->claimTTL > 0 ) { // only prune jobs attempted too many times...
-                               $conds[] = "job_attempts >= {$dbw->addQuotes( $this->maxTries )}";
-                       }
-                       // Get the IDs of jobs that are considered stale and should be removed. Selecting
-                       // the IDs first means that the UPDATE can be done by primary key (less deadlocks).
-                       $res = $dbw->select( 'job', 'job_id', $conds, __METHOD__ );
-                       $ids = array_map(
-                               function ( $o ) {
-                                       return $o->job_id;
-                               }, iterator_to_array( $res )
-                       );
-                       if ( count( $ids ) ) {
-                               $dbw->delete( 'job', array( 'job_id' => $ids ), __METHOD__ );
-                               $count += $dbw->affectedRows();
-                               JobQueue::incrStats( 'job-abandon', $this->type, $dbw->affectedRows() );
-                       }
-
-                       $dbw->unlock( "jobqueue-recycle-{$this->type}", __METHOD__ );
-               } catch ( DBError $e ) {
-                       $this->throwDBException( $e );
-               }
-
-               return $count;
-       }
-
-       /**
-        * @param IJobSpecification $job
-        * @return array
-        */
-       protected function insertFields( IJobSpecification $job ) {
-               $dbw = $this->getMasterDB();
-
-               return array(
-                       // Fields that describe the nature of the job
-                       'job_cmd' => $job->getType(),
-                       'job_namespace' => $job->getTitle()->getNamespace(),
-                       'job_title' => $job->getTitle()->getDBkey(),
-                       'job_params' => self::makeBlob( $job->getParams() ),
-                       // Additional job metadata
-                       'job_id' => $dbw->nextSequenceValue( 'job_job_id_seq' ),
-                       'job_timestamp' => $dbw->timestamp(),
-                       'job_sha1' => wfBaseConvert(
-                               sha1( serialize( $job->getDeduplicationInfo() ) ),
-                               16, 36, 31
-                       ),
-                       'job_random' => mt_rand( 0, self::MAX_JOB_RANDOM )
-               );
-       }
-
-       /**
-        * @throws JobQueueConnectionError
-        * @return DBConnRef
-        */
-       protected function getSlaveDB() {
-               try {
-                       return $this->getDB( DB_SLAVE );
-               } catch ( DBConnectionError $e ) {
-                       throw new JobQueueConnectionError( "DBConnectionError:" . $e->getMessage() );
-               }
-       }
-
-       /**
-        * @throws JobQueueConnectionError
-        * @return DBConnRef
-        */
-       protected function getMasterDB() {
-               try {
-                       return $this->getDB( DB_MASTER );
-               } catch ( DBConnectionError $e ) {
-                       throw new JobQueueConnectionError( "DBConnectionError:" . $e->getMessage() );
-               }
-       }
-
-       /**
-        * @param $index integer (DB_SLAVE/DB_MASTER)
-        * @return DBConnRef
-        */
-       protected function getDB( $index ) {
-               $lb = ( $this->cluster !== false )
-                       ? wfGetLBFactory()->getExternalLB( $this->cluster, $this->wiki )
-                       : wfGetLB( $this->wiki );
-
-               return $lb->getConnectionRef( $index, array(), $this->wiki );
-       }
-
-       /**
-        * @param $property
-        * @return string
-        */
-       private function getCacheKey( $property ) {
-               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
-               $cluster = is_string( $this->cluster ) ? $this->cluster : 'main';
-
-               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $cluster, $this->type, $property );
-       }
-
-       /**
-        * @param $params
-        * @return string
-        */
-       protected static function makeBlob( $params ) {
-               if ( $params !== false ) {
-                       return serialize( $params );
-               } else {
-                       return '';
-               }
-       }
-
-       /**
-        * @param $blob
-        * @return bool|mixed
-        */
-       protected static function extractBlob( $blob ) {
-               if ( (string)$blob !== '' ) {
-                       return unserialize( $blob );
-               } else {
-                       return false;
-               }
-       }
-
-       /**
-        * @param DBError $e
-        * @throws JobQueueError
-        */
-       protected function throwDBException( DBError $e ) {
-               throw new JobQueueError( get_class( $e ) . ": " . $e->getMessage() );
-       }
-
-       /**
-        * Return the list of job fields that should be selected.
-        * @since 1.23
-        * @return array
-        */
-       public static function selectFields() {
-               return array(
-                       'job_id',
-                       'job_cmd',
-                       'job_namespace',
-                       'job_title',
-                       'job_timestamp',
-                       'job_params',
-                       'job_random',
-                       'job_attempts',
-                       'job_token',
-                       'job_token_timestamp',
-                       'job_sha1',
-               );
-       }
-}
diff --git a/includes/job/JobQueueFederated.php b/includes/job/JobQueueFederated.php
deleted file mode 100644 (file)
index 9502148..0000000
+++ /dev/null
@@ -1,553 +0,0 @@
-<?php
-/**
- * Job queue code for federated queues.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * Class to handle enqueueing and running of background jobs for federated queues
- *
- * This class allows for queues to be partitioned into smaller queues.
- * A partition is defined by the configuration for a JobQueue instance.
- * For example, one can set $wgJobTypeConf['refreshLinks'] to point to a
- * JobQueueFederated instance, which itself would consist of three JobQueueRedis
- * instances, each using their own redis server. This would allow for the jobs
- * to be split (evenly or based on weights) accross multiple servers if a single
- * server becomes impractical or expensive. Different JobQueue classes can be mixed.
- *
- * The basic queue configuration (e.g. "order", "claimTTL") of a federated queue
- * is inherited by the partition queues. Additional configuration defines what
- * section each wiki is in, what partition queues each section uses (and their weight),
- * and the JobQueue configuration for each partition. Some sections might only need a
- * single queue partition, like the sections for groups of small wikis.
- *
- * If used for performance, then $wgMainCacheType should be set to memcached/redis.
- * Note that "fifo" cannot be used for the ordering, since the data is distributed.
- * One can still use "timestamp" instead, as in "roughly timestamp ordered". Also,
- * queue classes used by this should ignore down servers (with TTL) to avoid slowness.
- *
- * @ingroup JobQueue
- * @since 1.22
- */
-class JobQueueFederated extends JobQueue {
-       /** @var array (partition name => weight) reverse sorted by weight */
-       protected $partitionMap = array();
-
-       /** @var array (partition name => JobQueue) reverse sorted by weight */
-       protected $partitionQueues = array();
-
-       /** @var HashRing */
-       protected $partitionPushRing;
-
-       /** @var BagOStuff */
-       protected $cache;
-
-       /** @var int Maximum number of partitions to try */
-       protected $maxPartitionsTry;
-
-       const CACHE_TTL_SHORT = 30; // integer; seconds to cache info without re-validating
-       const CACHE_TTL_LONG = 300; // integer; seconds to cache info that is kept up to date
-
-       /**
-        * @params include:
-        *  - sectionsByWiki      : A map of wiki IDs to section names.
-        *                          Wikis will default to using the section "default".
-        *  - partitionsBySection : Map of section names to maps of (partition name => weight).
-        *                          A section called 'default' must be defined if not all wikis
-        *                          have explicitly defined sections.
-        *  - configByPartition   : Map of queue partition names to configuration arrays.
-        *                          These configuration arrays are passed to JobQueue::factory().
-        *                          The options set here are overriden by those passed to this
-        *                          the federated queue itself (e.g. 'order' and 'claimTTL').
-        *  - partitionsNoPush    : List of partition names that can handle pop() but not push().
-        *                          This can be used to migrate away from a certain partition.
-        *  - maxPartitionsTry    : Maximum number of times to attempt job insertion using
-        *                          different partition queues. This improves availability
-        *                          during failure, at the cost of added latency and somewhat
-        *                          less reliable job de-duplication mechanisms.
-        * @param array $params
-        * @throws MWException
-        */
-       protected function __construct( array $params ) {
-               parent::__construct( $params );
-               $section = isset( $params['sectionsByWiki'][$this->wiki] )
-                       ? $params['sectionsByWiki'][$this->wiki]
-                       : 'default';
-               if ( !isset( $params['partitionsBySection'][$section] ) ) {
-                       throw new MWException( "No configuration for section '$section'." );
-               }
-               $this->maxPartitionsTry = isset( $params['maxPartitionsTry'] )
-                       ? $params['maxPartitionsTry']
-                       : 2;
-               // Get the full partition map
-               $this->partitionMap = $params['partitionsBySection'][$section];
-               arsort( $this->partitionMap, SORT_NUMERIC );
-               // Get the partitions jobs can actually be pushed to
-               $partitionPushMap = $this->partitionMap;
-               if ( isset( $params['partitionsNoPush'] ) ) {
-                       foreach ( $params['partitionsNoPush'] as $partition ) {
-                               unset( $partitionPushMap[$partition] );
-                       }
-               }
-               // Get the config to pass to merge into each partition queue config
-               $baseConfig = $params;
-               foreach ( array( 'class', 'sectionsByWiki', 'maxPartitionsTry',
-                       'partitionsBySection', 'configByPartition', 'partitionsNoPush' ) as $o
-               ) {
-                       unset( $baseConfig[$o] ); // partition queue doesn't care about this
-               }
-               // Get the partition queue objects
-               foreach ( $this->partitionMap as $partition => $w ) {
-                       if ( !isset( $params['configByPartition'][$partition] ) ) {
-                               throw new MWException( "No configuration for partition '$partition'." );
-                       }
-                       $this->partitionQueues[$partition] = JobQueue::factory(
-                               $baseConfig + $params['configByPartition'][$partition] );
-               }
-               // Get the ring of partitions to push jobs into
-               $this->partitionPushRing = new HashRing( $partitionPushMap );
-               // Aggregate cache some per-queue values if there are multiple partition queues
-               $this->cache = count( $this->partitionMap ) > 1 ? wfGetMainCache() : new EmptyBagOStuff();
-       }
-
-       protected function supportedOrders() {
-               // No FIFO due to partitioning, though "rough timestamp order" is supported
-               return array( 'undefined', 'random', 'timestamp' );
-       }
-
-       protected function optimalOrder() {
-               return 'undefined'; // defer to the partitions
-       }
-
-       protected function supportsDelayedJobs() {
-               return true; // defer checks to the partitions
-       }
-
-       protected function doIsEmpty() {
-               $key = $this->getCacheKey( 'empty' );
-
-               $isEmpty = $this->cache->get( $key );
-               if ( $isEmpty === 'true' ) {
-                       return true;
-               } elseif ( $isEmpty === 'false' ) {
-                       return false;
-               }
-
-               $empty = true;
-               $failed = 0;
-               foreach ( $this->partitionQueues as $queue ) {
-                       try {
-                               $empty = $empty && $queue->doIsEmpty();
-                       } catch ( JobQueueError $e ) {
-                               ++$failed;
-                               MWExceptionHandler::logException( $e );
-                       }
-               }
-               $this->throwErrorIfAllPartitionsDown( $failed );
-
-               $this->cache->add( $key, $empty ? 'true' : 'false', self::CACHE_TTL_LONG );
-               return $empty;
-       }
-
-       protected function doGetSize() {
-               return $this->getCrossPartitionSum( 'size', 'doGetSize' );
-       }
-
-       protected function doGetAcquiredCount() {
-               return $this->getCrossPartitionSum( 'acquiredcount', 'doGetAcquiredCount' );
-       }
-
-       protected function doGetDelayedCount() {
-               return $this->getCrossPartitionSum( 'delayedcount', 'doGetDelayedCount' );
-       }
-
-       protected function doGetAbandonedCount() {
-               return $this->getCrossPartitionSum( 'abandonedcount', 'doGetAbandonedCount' );
-       }
-
-       /**
-        * @param string $type
-        * @param string $method
-        * @return int
-        */
-       protected function getCrossPartitionSum( $type, $method ) {
-               $key = $this->getCacheKey( $type );
-
-               $count = $this->cache->get( $key );
-               if ( is_int( $count ) ) {
-                       return $count;
-               }
-
-               $failed = 0;
-               foreach ( $this->partitionQueues as $queue ) {
-                       try {
-                               $count += $queue->$method();
-                       } catch ( JobQueueError $e ) {
-                               ++$failed;
-                               MWExceptionHandler::logException( $e );
-                       }
-               }
-               $this->throwErrorIfAllPartitionsDown( $failed );
-
-               $this->cache->set( $key, $count, self::CACHE_TTL_SHORT );
-
-               return $count;
-       }
-
-       protected function doBatchPush( array $jobs, $flags ) {
-               // Local ring variable that may be changed to point to a new ring on failure
-               $partitionRing = $this->partitionPushRing;
-               // Try to insert the jobs and update $partitionsTry on any failures.
-               // Retry to insert any remaning jobs again, ignoring the bad partitions.
-               $jobsLeft = $jobs;
-               for ( $i = $this->maxPartitionsTry; $i > 0 && count( $jobsLeft ); --$i ) {
-                       $jobsLeft = $this->tryJobInsertions( $jobsLeft, $partitionRing, $flags );
-               }
-               if ( count( $jobsLeft ) ) {
-                       throw new JobQueueError(
-                               "Could not insert job(s), {$this->maxPartitionsTry} partitions tried." );
-               }
-
-               return true;
-       }
-
-       /**
-        * @param array $jobs
-        * @param HashRing $partitionRing
-        * @param int $flags
-        * @throws JobQueueError
-        * @return array List of Job object that could not be inserted
-        */
-       protected function tryJobInsertions( array $jobs, HashRing &$partitionRing, $flags ) {
-               $jobsLeft = array();
-
-               // Because jobs are spread across partitions, per-job de-duplication needs
-               // to use a consistent hash to avoid allowing duplicate jobs per partition.
-               // When inserting a batch of de-duplicated jobs, QOS_ATOMIC is disregarded.
-               $uJobsByPartition = array(); // (partition name => job list)
-               /** @var Job $job */
-               foreach ( $jobs as $key => $job ) {
-                       if ( $job->ignoreDuplicates() ) {
-                               $sha1 = sha1( serialize( $job->getDeduplicationInfo() ) );
-                               $uJobsByPartition[$partitionRing->getLocation( $sha1 )][] = $job;
-                               unset( $jobs[$key] );
-                       }
-               }
-               // Get the batches of jobs that are not de-duplicated
-               if ( $flags & self::QOS_ATOMIC ) {
-                       $nuJobBatches = array( $jobs ); // all or nothing
-               } else {
-                       // Split the jobs into batches and spread them out over servers if there
-                       // are many jobs. This helps keep the partitions even. Otherwise, send all
-                       // the jobs to a single partition queue to avoids the extra connections.
-                       $nuJobBatches = array_chunk( $jobs, 300 );
-               }
-
-               // Insert the de-duplicated jobs into the queues...
-               foreach ( $uJobsByPartition as $partition => $jobBatch ) {
-                       /** @var JobQueue $queue */
-                       $queue = $this->partitionQueues[$partition];
-                       try {
-                               $ok = $queue->doBatchPush( $jobBatch, $flags | self::QOS_ATOMIC );
-                       } catch ( JobQueueError $e ) {
-                               $ok = false;
-                               MWExceptionHandler::logException( $e );
-                       }
-                       if ( $ok ) {
-                               $key = $this->getCacheKey( 'empty' );
-                               $this->cache->set( $key, 'false', JobQueueDB::CACHE_TTL_LONG );
-                       } else {
-                               $partitionRing = $partitionRing->newWithoutLocation( $partition ); // blacklist
-                               if ( !$partitionRing ) {
-                                       throw new JobQueueError( "Could not insert job(s), no partitions available." );
-                               }
-                               $jobsLeft = array_merge( $jobsLeft, $jobBatch ); // not inserted
-                       }
-               }
-
-               // Insert the jobs that are not de-duplicated into the queues...
-               foreach ( $nuJobBatches as $jobBatch ) {
-                       $partition = ArrayUtils::pickRandom( $partitionRing->getLocationWeights() );
-                       $queue = $this->partitionQueues[$partition];
-                       try {
-                               $ok = $queue->doBatchPush( $jobBatch, $flags | self::QOS_ATOMIC );
-                       } catch ( JobQueueError $e ) {
-                               $ok = false;
-                               MWExceptionHandler::logException( $e );
-                       }
-                       if ( $ok ) {
-                               $key = $this->getCacheKey( 'empty' );
-                               $this->cache->set( $key, 'false', JobQueueDB::CACHE_TTL_LONG );
-                       } else {
-                               $partitionRing = $partitionRing->newWithoutLocation( $partition ); // blacklist
-                               if ( !$partitionRing ) {
-                                       throw new JobQueueError( "Could not insert job(s), no partitions available." );
-                               }
-                               $jobsLeft = array_merge( $jobsLeft, $jobBatch ); // not inserted
-                       }
-               }
-
-               return $jobsLeft;
-       }
-
-       protected function doPop() {
-               $key = $this->getCacheKey( 'empty' );
-
-               $isEmpty = $this->cache->get( $key );
-               if ( $isEmpty === 'true' ) {
-                       return false;
-               }
-
-               $partitionsTry = $this->partitionMap; // (partition => weight)
-
-               $failed = 0;
-               while ( count( $partitionsTry ) ) {
-                       $partition = ArrayUtils::pickRandom( $partitionsTry );
-                       if ( $partition === false ) {
-                               break; // all partitions at 0 weight
-                       }
-
-                       /** @var JobQueue $queue */
-                       $queue = $this->partitionQueues[$partition];
-                       try {
-                               $job = $queue->pop();
-                       } catch ( JobQueueError $e ) {
-                               ++$failed;
-                               MWExceptionHandler::logException( $e );
-                               $job = false;
-                       }
-                       if ( $job ) {
-                               $job->metadata['QueuePartition'] = $partition;
-
-                               return $job;
-                       } else {
-                               unset( $partitionsTry[$partition] ); // blacklist partition
-                       }
-               }
-               $this->throwErrorIfAllPartitionsDown( $failed );
-
-               $this->cache->set( $key, 'true', JobQueueDB::CACHE_TTL_LONG );
-
-               return false;
-       }
-
-       protected function doAck( Job $job ) {
-               if ( !isset( $job->metadata['QueuePartition'] ) ) {
-                       throw new MWException( "The given job has no defined partition name." );
-               }
-
-               return $this->partitionQueues[$job->metadata['QueuePartition']]->ack( $job );
-       }
-
-       protected function doIsRootJobOldDuplicate( Job $job ) {
-               $params = $job->getRootJobParams();
-               $partitions = $this->partitionPushRing->getLocations( $params['rootJobSignature'], 2 );
-               try {
-                       return $this->partitionQueues[$partitions[0]]->doIsRootJobOldDuplicate( $job );
-               } catch ( JobQueueError $e ) {
-                       if ( isset( $partitions[1] ) ) { // check fallback partition
-                               return $this->partitionQueues[$partitions[1]]->doIsRootJobOldDuplicate( $job );
-                       }
-               }
-
-               return false;
-       }
-
-       protected function doDeduplicateRootJob( Job $job ) {
-               $params = $job->getRootJobParams();
-               $partitions = $this->partitionPushRing->getLocations( $params['rootJobSignature'], 2 );
-               try {
-                       return $this->partitionQueues[$partitions[0]]->doDeduplicateRootJob( $job );
-               } catch ( JobQueueError $e ) {
-                       if ( isset( $partitions[1] ) ) { // check fallback partition
-                               return $this->partitionQueues[$partitions[1]]->doDeduplicateRootJob( $job );
-                       }
-               }
-
-               return false;
-       }
-
-       protected function doDelete() {
-               $failed = 0;
-               /** @var JobQueue $queue */
-               foreach ( $this->partitionQueues as $queue ) {
-                       try {
-                               $queue->doDelete();
-                       } catch ( JobQueueError $e ) {
-                               ++$failed;
-                               MWExceptionHandler::logException( $e );
-                       }
-               }
-               $this->throwErrorIfAllPartitionsDown( $failed );
-               return true;
-       }
-
-       protected function doWaitForBackups() {
-               $failed = 0;
-               /** @var JobQueue $queue */
-               foreach ( $this->partitionQueues as $queue ) {
-                       try {
-                               $queue->waitForBackups();
-                       } catch ( JobQueueError $e ) {
-                               ++$failed;
-                               MWExceptionHandler::logException( $e );
-                       }
-               }
-               $this->throwErrorIfAllPartitionsDown( $failed );
-       }
-
-       protected function doGetPeriodicTasks() {
-               $tasks = array();
-               /** @var JobQueue $queue */
-               foreach ( $this->partitionQueues as $partition => $queue ) {
-                       foreach ( $queue->getPeriodicTasks() as $task => $def ) {
-                               $tasks["{$partition}:{$task}"] = $def;
-                       }
-               }
-
-               return $tasks;
-       }
-
-       protected function doFlushCaches() {
-               static $types = array(
-                       'empty',
-                       'size',
-                       'acquiredcount',
-                       'delayedcount',
-                       'abandonedcount'
-               );
-
-               foreach ( $types as $type ) {
-                       $this->cache->delete( $this->getCacheKey( $type ) );
-               }
-
-               /** @var JobQueue $queue */
-               foreach ( $this->partitionQueues as $queue ) {
-                       $queue->doFlushCaches();
-               }
-       }
-
-       public function getAllQueuedJobs() {
-               $iterator = new AppendIterator();
-
-               /** @var JobQueue $queue */
-               foreach ( $this->partitionQueues as $queue ) {
-                       $iterator->append( $queue->getAllQueuedJobs() );
-               }
-
-               return $iterator;
-       }
-
-       public function getAllDelayedJobs() {
-               $iterator = new AppendIterator();
-
-               /** @var JobQueue $queue */
-               foreach ( $this->partitionQueues as $queue ) {
-                       $iterator->append( $queue->getAllDelayedJobs() );
-               }
-
-               return $iterator;
-       }
-
-       public function getCoalesceLocationInternal() {
-               return "JobQueueFederated:wiki:{$this->wiki}" .
-                       sha1( serialize( array_keys( $this->partitionMap ) ) );
-       }
-
-       protected function doGetSiblingQueuesWithJobs( array $types ) {
-               $result = array();
-
-               $failed = 0;
-               /** @var JobQueue $queue */
-               foreach ( $this->partitionQueues as $queue ) {
-                       try {
-                               $nonEmpty = $queue->doGetSiblingQueuesWithJobs( $types );
-                               if ( is_array( $nonEmpty ) ) {
-                                       $result = array_unique( array_merge( $result, $nonEmpty ) );
-                               } else {
-                                       return null; // not supported on all partitions; bail
-                               }
-                               if ( count( $result ) == count( $types ) ) {
-                                       break; // short-circuit
-                               }
-                       } catch ( JobQueueError $e ) {
-                               ++$failed;
-                               MWExceptionHandler::logException( $e );
-                       }
-               }
-               $this->throwErrorIfAllPartitionsDown( $failed );
-
-               return array_values( $result );
-       }
-
-       protected function doGetSiblingQueueSizes( array $types ) {
-               $result = array();
-               $failed = 0;
-               /** @var JobQueue $queue */
-               foreach ( $this->partitionQueues as $queue ) {
-                       try {
-                               $sizes = $queue->doGetSiblingQueueSizes( $types );
-                               if ( is_array( $sizes ) ) {
-                                       foreach ( $sizes as $type => $size ) {
-                                               $result[$type] = isset( $result[$type] ) ? $result[$type] + $size : $size;
-                                       }
-                               } else {
-                                       return null; // not supported on all partitions; bail
-                               }
-                       } catch ( JobQueueError $e ) {
-                               ++$failed;
-                               MWExceptionHandler::logException( $e );
-                       }
-               }
-               $this->throwErrorIfAllPartitionsDown( $failed );
-
-               return $result;
-       }
-
-       /**
-        * Throw an error if no partitions available
-        *
-        * @param int $down The number of up partitions down
-        * @return void
-        * @throws JobQueueError
-        */
-       protected function throwErrorIfAllPartitionsDown( $down ) {
-               if ( $down >= count( $this->partitionQueues ) ) {
-                       throw new JobQueueError( 'No queue partitions available.' );
-               }
-       }
-
-       public function setTestingPrefix( $key ) {
-               /** @var JobQueue $queue */
-               foreach ( $this->partitionQueues as $queue ) {
-                       $queue->setTestingPrefix( $key );
-               }
-       }
-
-       /**
-        * @param $property
-        * @return string
-        */
-       private function getCacheKey( $property ) {
-               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
-
-               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, $property );
-       }
-}
diff --git a/includes/job/JobQueueGroup.php b/includes/job/JobQueueGroup.php
deleted file mode 100644 (file)
index 90742ce..0000000
+++ /dev/null
@@ -1,417 +0,0 @@
-<?php
-/**
- * Job queue base code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * Class to handle enqueueing of background jobs
- *
- * @ingroup JobQueue
- * @since 1.21
- */
-class JobQueueGroup {
-       /** @var array */
-       protected static $instances = array();
-
-       /** @var ProcessCacheLRU */
-       protected $cache;
-
-       /** @var string Wiki ID */
-       protected $wiki;
-
-       /** @var array Map of (bucket => (queue => JobQueue, types => list of types) */
-       protected $coalescedQueues;
-
-       const TYPE_DEFAULT = 1; // integer; jobs popped by default
-       const TYPE_ANY = 2; // integer; any job
-
-       const USE_CACHE = 1; // integer; use process or persistent cache
-
-       const PROC_CACHE_TTL = 15; // integer; seconds
-
-       const CACHE_VERSION = 1; // integer; cache version
-
-       /**
-        * @param string $wiki Wiki ID
-        */
-       protected function __construct( $wiki ) {
-               $this->wiki = $wiki;
-               $this->cache = new ProcessCacheLRU( 10 );
-       }
-
-       /**
-        * @param bool|string $wiki Wiki ID
-        * @return JobQueueGroup
-        */
-       public static function singleton( $wiki = false ) {
-               $wiki = ( $wiki === false ) ? wfWikiID() : $wiki;
-               if ( !isset( self::$instances[$wiki] ) ) {
-                       self::$instances[$wiki] = new self( $wiki );
-               }
-
-               return self::$instances[$wiki];
-       }
-
-       /**
-        * Destroy the singleton instances
-        *
-        * @return void
-        */
-       public static function destroySingletons() {
-               self::$instances = array();
-       }
-
-       /**
-        * Get the job queue object for a given queue type
-        *
-        * @param string $type
-        * @return JobQueue
-        */
-       public function get( $type ) {
-               global $wgJobTypeConf;
-
-               $conf = array( 'wiki' => $this->wiki, 'type' => $type );
-               if ( isset( $wgJobTypeConf[$type] ) ) {
-                       $conf = $conf + $wgJobTypeConf[$type];
-               } else {
-                       $conf = $conf + $wgJobTypeConf['default'];
-               }
-
-               return JobQueue::factory( $conf );
-       }
-
-       /**
-        * Insert jobs into the respective queues of with the belong.
-        *
-        * This inserts the jobs into the queue specified by $wgJobTypeConf
-        * and updates the aggregate job queue information cache as needed.
-        *
-        * @param Job|array $jobs A single Job or a list of Jobs
-        * @throws MWException
-        * @return bool
-        */
-       public function push( $jobs ) {
-               $jobs = is_array( $jobs ) ? $jobs : array( $jobs );
-               if ( !count( $jobs ) ) {
-                       return true;
-               }
-
-               $jobsByType = array(); // (job type => list of jobs)
-               foreach ( $jobs as $job ) {
-                       if ( $job instanceof IJobSpecification ) {
-                               $jobsByType[$job->getType()][] = $job;
-                       } else {
-                               throw new MWException( "Attempted to push a non-Job object into a queue." );
-                       }
-               }
-
-               $ok = true;
-               foreach ( $jobsByType as $type => $jobs ) {
-                       if ( $this->get( $type )->push( $jobs ) ) {
-                               JobQueueAggregator::singleton()->notifyQueueNonEmpty( $this->wiki, $type );
-                       } else {
-                               $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
-        *
-        * This pops a job off a queue as specified by $wgJobTypeConf and
-        * updates the aggregate job queue information cache as needed.
-        *
-        * @param int|string $qtype JobQueueGroup::TYPE_* constant or job type string
-        * @param int $flags Bitfield of JobQueueGroup::USE_* constants
-        * @param array $blacklist List of job types to ignore
-        * @return Job|bool Returns false on failure
-        */
-       public function pop( $qtype = self::TYPE_DEFAULT, $flags = 0, array $blacklist = array() ) {
-               $job = false;
-
-               if ( is_string( $qtype ) ) { // specific job type
-                       if ( !in_array( $qtype, $blacklist ) ) {
-                               $job = $this->get( $qtype )->pop();
-                               if ( !$job ) {
-                                       JobQueueAggregator::singleton()->notifyQueueEmpty( $this->wiki, $qtype );
-                               }
-                       }
-               } else { // any job in the "default" jobs types
-                       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 ( $qtype == self::TYPE_DEFAULT ) {
-                               $types = array_intersect( $types, $this->getDefaultQueueTypes() );
-                       }
-
-                       $types = array_diff( $types, $blacklist ); // avoid selected types
-                       shuffle( $types ); // avoid starvation
-
-                       foreach ( $types as $type ) { // for each queue...
-                               $job = $this->get( $type )->pop();
-                               if ( $job ) { // found
-                                       break;
-                               } else { // not found
-                                       JobQueueAggregator::singleton()->notifyQueueEmpty( $this->wiki, $type );
-                                       $this->cache->clear( 'queues-ready' );
-                               }
-                       }
-               }
-
-               return $job;
-       }
-
-       /**
-        * Acknowledge that a job was completed
-        *
-        * @param Job $job
-        * @return bool
-        */
-       public function ack( Job $job ) {
-               return $this->get( $job->getType() )->ack( $job );
-       }
-
-       /**
-        * Register the "root job" of a given job into the queue for de-duplication.
-        * This should only be called right *after* all the new jobs have been inserted.
-        *
-        * @param Job $job
-        * @return bool
-        */
-       public function deduplicateRootJob( Job $job ) {
-               return $this->get( $job->getType() )->deduplicateRootJob( $job );
-       }
-
-       /**
-        * Wait for any slaves or backup queue servers to catch up.
-        *
-        * This does nothing for certain queue classes.
-        *
-        * @return void
-        * @throws MWException
-        */
-       public function waitForBackups() {
-               global $wgJobTypeConf;
-
-               wfProfileIn( __METHOD__ );
-               // Try to avoid doing this more than once per queue storage medium
-               foreach ( $wgJobTypeConf as $type => $conf ) {
-                       $this->get( $type )->waitForBackups();
-               }
-               wfProfileOut( __METHOD__ );
-       }
-
-       /**
-        * Get the list of queue types
-        *
-        * @return array List of strings
-        */
-       public function getQueueTypes() {
-               return array_keys( $this->getCachedConfigVar( 'wgJobClasses' ) );
-       }
-
-       /**
-        * Get the list of default queue types
-        *
-        * @return array List of strings
-        */
-       public function getDefaultQueueTypes() {
-               global $wgJobTypesExcludedFromDefaultQueue;
-
-               return array_diff( $this->getQueueTypes(), $wgJobTypesExcludedFromDefaultQueue );
-       }
-
-       /**
-        * Get the list of job types that have non-empty queues
-        *
-        * @return array List of job types that have non-empty queues
-        */
-       public function getQueuesWithJobs() {
-               $types = array();
-               foreach ( $this->getCoalescedQueues() as $info ) {
-                       $nonEmpty = $info['queue']->getSiblingQueuesWithJobs( $this->getQueueTypes() );
-                       if ( is_array( $nonEmpty ) ) { // batching features supported
-                               $types = array_merge( $types, $nonEmpty );
-                       } else { // we have to go through the queues in the bucket one-by-one
-                               foreach ( $info['types'] as $type ) {
-                                       if ( !$this->get( $type )->isEmpty() ) {
-                                               $types[] = $type;
-                                       }
-                               }
-                       }
-               }
-
-               return $types;
-       }
-
-       /**
-        * Get the size of the queus for a list of job types
-        *
-        * @return array Map of (job type => size)
-        */
-       public function getQueueSizes() {
-               $sizeMap = array();
-               foreach ( $this->getCoalescedQueues() as $info ) {
-                       $sizes = $info['queue']->getSiblingQueueSizes( $this->getQueueTypes() );
-                       if ( is_array( $sizes ) ) { // batching features supported
-                               $sizeMap = $sizeMap + $sizes;
-                       } else { // we have to go through the queues in the bucket one-by-one
-                               foreach ( $info['types'] as $type ) {
-                                       $sizeMap[$type] = $this->get( $type )->getSize();
-                               }
-                       }
-               }
-
-               return $sizeMap;
-       }
-
-       /**
-        * @return array
-        */
-       protected function getCoalescedQueues() {
-               global $wgJobTypeConf;
-
-               if ( $this->coalescedQueues === null ) {
-                       $this->coalescedQueues = array();
-                       foreach ( $wgJobTypeConf as $type => $conf ) {
-                               $queue = JobQueue::factory(
-                                       array( 'wiki' => $this->wiki, 'type' => 'null' ) + $conf );
-                               $loc = $queue->getCoalesceLocationInternal();
-                               if ( !isset( $this->coalescedQueues[$loc] ) ) {
-                                       $this->coalescedQueues[$loc]['queue'] = $queue;
-                                       $this->coalescedQueues[$loc]['types'] = array();
-                               }
-                               if ( $type === 'default' ) {
-                                       $this->coalescedQueues[$loc]['types'] = array_merge(
-                                               $this->coalescedQueues[$loc]['types'],
-                                               array_diff( $this->getQueueTypes(), array_keys( $wgJobTypeConf ) )
-                                       );
-                               } else {
-                                       $this->coalescedQueues[$loc]['types'][] = $type;
-                               }
-                       }
-               }
-
-               return $this->coalescedQueues;
-       }
-
-       /**
-        * Execute any due periodic queue maintenance tasks for all queues.
-        *
-        * A task is "due" if the time ellapsed since the last run is greater than
-        * the defined run period. Concurrent calls to this function will cause tasks
-        * to be attempted twice, so they may need their own methods of mutual exclusion.
-        *
-        * @return int Number of tasks run
-        */
-       public function executeReadyPeriodicTasks() {
-               global $wgMemc;
-
-               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
-               $key = wfForeignMemcKey( $db, $prefix, 'jobqueuegroup', 'taskruns', 'v1' );
-               $lastRuns = $wgMemc->get( $key ); // (queue => task => UNIX timestamp)
-
-               $count = 0;
-               $tasksRun = array(); // (queue => task => UNIX timestamp)
-               foreach ( $this->getQueueTypes() as $type ) {
-                       $queue = $this->get( $type );
-                       foreach ( $queue->getPeriodicTasks() as $task => $definition ) {
-                               if ( $definition['period'] <= 0 ) {
-                                       continue; // disabled
-                               } elseif ( !isset( $lastRuns[$type][$task] )
-                                       || $lastRuns[$type][$task] < ( time() - $definition['period'] )
-                               ) {
-                                       try {
-                                               if ( call_user_func( $definition['callback'] ) !== null ) {
-                                                       $tasksRun[$type][$task] = time();
-                                                       ++$count;
-                                               }
-                                       } catch ( JobQueueError $e ) {
-                                               MWExceptionHandler::logException( $e );
-                                       }
-                               }
-                       }
-                       // The tasks may have recycled jobs or release delayed jobs into the queue
-                       if ( isset( $tasksRun[$type] ) && !$queue->isEmpty() ) {
-                               JobQueueAggregator::singleton()->notifyQueueNonEmpty( $this->wiki, $type );
-                       }
-               }
-
-               $wgMemc->merge( $key, function ( $cache, $key, $lastRuns ) use ( $tasksRun ) {
-                       if ( is_array( $lastRuns ) ) {
-                               foreach ( $tasksRun as $type => $tasks ) {
-                                       foreach ( $tasks as $task => $timestamp ) {
-                                               if ( !isset( $lastRuns[$type][$task] )
-                                                       || $timestamp > $lastRuns[$type][$task]
-                                               ) {
-                                                       $lastRuns[$type][$task] = $timestamp;
-                                               }
-                                       }
-                               }
-                       } else {
-                               $lastRuns = $tasksRun;
-                       }
-
-                       return $lastRuns;
-               } );
-
-               return $count;
-       }
-
-       /**
-        * @param $name string
-        * @return mixed
-        */
-       private function getCachedConfigVar( $name ) {
-               global $wgConf, $wgMemc;
-
-               if ( $this->wiki === wfWikiID() ) {
-                       return $GLOBALS[$name]; // common case
-               } else {
-                       list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
-                       $key = wfForeignMemcKey( $db, $prefix, 'configvalue', $name );
-                       $value = $wgMemc->get( $key ); // ('v' => ...) or false
-                       if ( is_array( $value ) ) {
-                               return $value['v'];
-                       } else {
-                               $value = $wgConf->getConfig( $this->wiki, $name );
-                               $wgMemc->set( $key, array( 'v' => $value ), 86400 + mt_rand( 0, 86400 ) );
-
-                               return $value;
-                       }
-               }
-       }
-}
diff --git a/includes/job/JobQueueRedis.php b/includes/job/JobQueueRedis.php
deleted file mode 100644 (file)
index e0641b5..0000000
+++ /dev/null
@@ -1,857 +0,0 @@
-<?php
-/**
- * Redis-backed job queue code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * Class to handle job queues stored in Redis
- *
- * This is faster, less resource intensive, queue that JobQueueDB.
- * All data for a queue using this class is placed into one redis server.
- *
- * There are eight main redis keys used to track jobs:
- *   - l-unclaimed  : A list of job IDs used for ready unclaimed jobs
- *   - z-claimed    : A sorted set of (job ID, UNIX timestamp as score) used for job retries
- *   - z-abandoned  : A sorted set of (job ID, UNIX timestamp as score) used for broken jobs
- *   - z-delayed    : A sorted set of (job ID, UNIX timestamp as score) used for delayed jobs
- *   - h-idBySha1   : A hash of (SHA1 => job ID) for unclaimed jobs used for de-duplication
- *   - h-sha1ById   : A hash of (job ID => SHA1) for unclaimed jobs used for de-duplication
- *   - h-attempts   : A hash of (job ID => attempt count) used for job claiming/retries
- *   - h-data       : A hash of (job ID => serialized blobs) for job storage
- * A job ID can be in only one of z-delayed, l-unclaimed, z-claimed, and z-abandoned.
- * If an ID appears in any of those lists, it should have a h-data entry for its ID.
- * If a job has a SHA1 de-duplication value and its ID is in l-unclaimed or z-delayed, then
- * there should be no other such jobs with that SHA1. Every h-idBySha1 entry has an h-sha1ById
- * entry and every h-sha1ById must refer to an ID that is l-unclaimed. If a job has its
- * ID in z-claimed or z-abandoned, then it must also have an h-attempts entry for its ID.
- *
- * Additionally, "rootjob:* keys track "root jobs" used for additional de-duplication.
- * Aside from root job keys, all keys have no expiry, and are only removed when jobs are run.
- * All the keys are prefixed with the relevant wiki ID information.
- *
- * This class requires Redis 2.6 as it makes use Lua scripts for fast atomic operations.
- * Additionally, it should be noted that redis has different persistence modes, such
- * as rdb snapshots, journaling, and no persistent. Appropriate configuration should be
- * made on the servers based on what queues are using it and what tolerance they have.
- *
- * @ingroup JobQueue
- * @ingroup Redis
- * @since 1.22
- */
-class JobQueueRedis extends JobQueue {
-       /** @var RedisConnectionPool */
-       protected $redisPool;
-
-       /** @var string Server address */
-       protected $server;
-
-       /** @var string Compression method to use */
-       protected $compression;
-
-       const MAX_AGE_PRUNE = 604800; // integer; seconds a job can live once claimed (7 days)
-
-       /** @var string Key to prefix the queue keys with (used for testing) */
-       protected $key;
-
-       /**
-        * @params include:
-        *   - redisConfig : An array of parameters to RedisConnectionPool::__construct().
-        *                   Note that the serializer option is ignored as "none" is always used.
-        *   - redisServer : A hostname/port combination or the absolute path of a UNIX socket.
-        *                   If a hostname is specified but no port, the standard port number
-        *                   6379 will be used. Required.
-        *   - compression : The type of compression to use; one of (none,gzip).
-        * @param array $params
-        */
-       public function __construct( array $params ) {
-               parent::__construct( $params );
-               $params['redisConfig']['serializer'] = 'none'; // make it easy to use Lua
-               $this->server = $params['redisServer'];
-               $this->compression = isset( $params['compression'] ) ? $params['compression'] : 'none';
-               $this->redisPool = RedisConnectionPool::singleton( $params['redisConfig'] );
-       }
-
-       protected function supportedOrders() {
-               return array( 'timestamp', 'fifo' );
-       }
-
-       protected function optimalOrder() {
-               return 'fifo';
-       }
-
-       protected function supportsDelayedJobs() {
-               return true;
-       }
-
-       /**
-        * @see JobQueue::doIsEmpty()
-        * @return bool
-        * @throws MWException
-        */
-       protected function doIsEmpty() {
-               return $this->doGetSize() == 0;
-       }
-
-       /**
-        * @see JobQueue::doGetSize()
-        * @return int
-        * @throws MWException
-        */
-       protected function doGetSize() {
-               $conn = $this->getConnection();
-               try {
-                       return $conn->lSize( $this->getQueueKey( 'l-unclaimed' ) );
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
-       }
-
-       /**
-        * @see JobQueue::doGetAcquiredCount()
-        * @return int
-        * @throws JobQueueError
-        */
-       protected function doGetAcquiredCount() {
-               if ( $this->claimTTL <= 0 ) {
-                       return 0; // no acknowledgements
-               }
-               $conn = $this->getConnection();
-               try {
-                       $conn->multi( Redis::PIPELINE );
-                       $conn->zSize( $this->getQueueKey( 'z-claimed' ) );
-                       $conn->zSize( $this->getQueueKey( 'z-abandoned' ) );
-
-                       return array_sum( $conn->exec() );
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
-       }
-
-       /**
-        * @see JobQueue::doGetDelayedCount()
-        * @return int
-        * @throws JobQueueError
-        */
-       protected function doGetDelayedCount() {
-               if ( !$this->checkDelay ) {
-                       return 0; // no delayed jobs
-               }
-               $conn = $this->getConnection();
-               try {
-                       return $conn->zSize( $this->getQueueKey( 'z-delayed' ) );
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
-       }
-
-       /**
-        * @see JobQueue::doGetAbandonedCount()
-        * @return int
-        * @throws JobQueueError
-        */
-       protected function doGetAbandonedCount() {
-               if ( $this->claimTTL <= 0 ) {
-                       return 0; // no acknowledgements
-               }
-               $conn = $this->getConnection();
-               try {
-                       return $conn->zSize( $this->getQueueKey( 'z-abandoned' ) );
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
-       }
-
-       /**
-        * @see JobQueue::doBatchPush()
-        * @param array $jobs
-        * @param $flags
-        * @return bool
-        * @throws JobQueueError
-        */
-       protected function doBatchPush( array $jobs, $flags ) {
-               // Convert the jobs into field maps (de-duplicated against each other)
-               $items = array(); // (job ID => job fields map)
-               foreach ( $jobs as $job ) {
-                       $item = $this->getNewJobFields( $job );
-                       if ( strlen( $item['sha1'] ) ) { // hash identifier => de-duplicate
-                               $items[$item['sha1']] = $item;
-                       } else {
-                               $items[$item['uuid']] = $item;
-                       }
-               }
-
-               if ( !count( $items ) ) {
-                       return true; // nothing to do
-               }
-
-               $conn = $this->getConnection();
-               try {
-                       // Actually push the non-duplicate jobs into the queue...
-                       if ( $flags & self::QOS_ATOMIC ) {
-                               $batches = array( $items ); // all or nothing
-                       } else {
-                               $batches = array_chunk( $items, 500 ); // avoid tying up the server
-                       }
-                       $failed = 0;
-                       $pushed = 0;
-                       foreach ( $batches as $itemBatch ) {
-                               $added = $this->pushBlobs( $conn, $itemBatch );
-                               if ( is_int( $added ) ) {
-                                       $pushed += $added;
-                               } else {
-                                       $failed += count( $itemBatch );
-                               }
-                       }
-                       if ( $failed > 0 ) {
-                               wfDebugLog( 'JobQueueRedis', "Could not insert {$failed} {$this->type} job(s)." );
-
-                               return false;
-                       }
-                       JobQueue::incrStats( 'job-insert', $this->type, count( $items ) );
-                       JobQueue::incrStats( 'job-insert-duplicate', $this->type,
-                               count( $items ) - $failed - $pushed );
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
-
-               return true;
-       }
-
-       /**
-        * @param RedisConnRef $conn
-        * @param array $items List of results from JobQueueRedis::getNewJobFields()
-        * @return int Number of jobs inserted (duplicates are ignored)
-        * @throws RedisException
-        */
-       protected function pushBlobs( RedisConnRef $conn, array $items ) {
-               $args = array(); // ([id, sha1, rtime, blob [, id, sha1, rtime, blob ... ] ] )
-               foreach ( $items as $item ) {
-                       $args[] = (string)$item['uuid'];
-                       $args[] = (string)$item['sha1'];
-                       $args[] = (string)$item['rtimestamp'];
-                       $args[] = (string)$this->serialize( $item );
-               }
-               static $script =
-<<<LUA
-               local kUnclaimed, kSha1ById, kIdBySha1, kDelayed, kData = unpack(KEYS)
-               if #ARGV % 4 ~= 0 then return redis.error_reply('Unmatched arguments') end
-               local pushed = 0
-               for i = 1,#ARGV,4 do
-                       local id,sha1,rtimestamp,blob = ARGV[i],ARGV[i+1],ARGV[i+2],ARGV[i+3]
-                       if sha1 == '' or redis.call('hExists',kIdBySha1,sha1) == 0 then
-                               if 1*rtimestamp > 0 then
-                                       -- Insert into delayed queue (release time as score)
-                                       redis.call('zAdd',kDelayed,rtimestamp,id)
-                               else
-                                       -- Insert into unclaimed queue
-                                       redis.call('lPush',kUnclaimed,id)
-                               end
-                               if sha1 ~= '' then
-                                       redis.call('hSet',kSha1ById,id,sha1)
-                                       redis.call('hSet',kIdBySha1,sha1,id)
-                               end
-                               redis.call('hSet',kData,id,blob)
-                               pushed = pushed + 1
-                       end
-               end
-               return pushed
-LUA;
-               return $conn->luaEval( $script,
-                       array_merge(
-                               array(
-                                       $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
-                                       $this->getQueueKey( 'h-sha1ById' ), # KEYS[2]
-                                       $this->getQueueKey( 'h-idBySha1' ), # KEYS[3]
-                                       $this->getQueueKey( 'z-delayed' ), # KEYS[4]
-                                       $this->getQueueKey( 'h-data' ), # KEYS[5]
-                               ),
-                               $args
-                       ),
-                       5 # number of first argument(s) that are keys
-               );
-       }
-
-       /**
-        * @see JobQueue::doPop()
-        * @return Job|bool
-        * @throws JobQueueError
-        */
-       protected function doPop() {
-               $job = false;
-
-               // Push ready delayed jobs into the queue every 10 jobs to spread the load.
-               // This is also done as a periodic task, but we don't want too much done at once.
-               if ( $this->checkDelay && mt_rand( 0, 9 ) == 0 ) {
-                       $this->recyclePruneAndUndelayJobs();
-               }
-
-               $conn = $this->getConnection();
-               try {
-                       do {
-                               if ( $this->claimTTL > 0 ) {
-                                       // Keep the claimed job list down for high-traffic queues
-                                       if ( mt_rand( 0, 99 ) == 0 ) {
-                                               $this->recyclePruneAndUndelayJobs();
-                                       }
-                                       $blob = $this->popAndAcquireBlob( $conn );
-                               } else {
-                                       $blob = $this->popAndDeleteBlob( $conn );
-                               }
-                               if ( $blob === false ) {
-                                       break; // no jobs; nothing to do
-                               }
-
-                               JobQueue::incrStats( 'job-pop', $this->type );
-                               $item = $this->unserialize( $blob );
-                               if ( $item === false ) {
-                                       wfDebugLog( 'JobQueueRedis', "Could not unserialize {$this->type} job." );
-                                       continue;
-                               }
-
-                               // If $item is invalid, recyclePruneAndUndelayJobs() will cleanup as needed
-                               $job = $this->getJobFromFields( $item ); // may be false
-                       } while ( !$job ); // job may be false if invalid
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
-
-               return $job;
-       }
-
-       /**
-        * @param RedisConnRef $conn
-        * @return array serialized string or false
-        * @throws RedisException
-        */
-       protected function popAndDeleteBlob( RedisConnRef $conn ) {
-               static $script =
-<<<LUA
-               local kUnclaimed, kSha1ById, kIdBySha1, kData = unpack(KEYS)
-               -- Pop an item off the queue
-               local id = redis.call('rpop',kUnclaimed)
-               if not id then return false end
-               -- Get the job data and remove it
-               local item = redis.call('hGet',kData,id)
-               redis.call('hDel',kData,id)
-               -- Allow new duplicates of this job
-               local sha1 = redis.call('hGet',kSha1ById,id)
-               if sha1 then redis.call('hDel',kIdBySha1,sha1) end
-               redis.call('hDel',kSha1ById,id)
-               -- Return the job data
-               return item
-LUA;
-               return $conn->luaEval( $script,
-                       array(
-                               $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
-                               $this->getQueueKey( 'h-sha1ById' ), # KEYS[2]
-                               $this->getQueueKey( 'h-idBySha1' ), # KEYS[3]
-                               $this->getQueueKey( 'h-data' ), # KEYS[4]
-                       ),
-                       4 # number of first argument(s) that are keys
-               );
-       }
-
-       /**
-        * @param RedisConnRef $conn
-        * @return array serialized string or false
-        * @throws RedisException
-        */
-       protected function popAndAcquireBlob( RedisConnRef $conn ) {
-               static $script =
-<<<LUA
-               local kUnclaimed, kSha1ById, kIdBySha1, kClaimed, kAttempts, kData = unpack(KEYS)
-               -- Pop an item off the queue
-               local id = redis.call('rPop',kUnclaimed)
-               if not id then return false end
-               -- Allow new duplicates of this job
-               local sha1 = redis.call('hGet',kSha1ById,id)
-               if sha1 then redis.call('hDel',kIdBySha1,sha1) end
-               redis.call('hDel',kSha1ById,id)
-               -- Mark the jobs as claimed and return it
-               redis.call('zAdd',kClaimed,ARGV[1],id)
-               redis.call('hIncrBy',kAttempts,id,1)
-               return redis.call('hGet',kData,id)
-LUA;
-               return $conn->luaEval( $script,
-                       array(
-                               $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
-                               $this->getQueueKey( 'h-sha1ById' ), # KEYS[2]
-                               $this->getQueueKey( 'h-idBySha1' ), # KEYS[3]
-                               $this->getQueueKey( 'z-claimed' ), # KEYS[4]
-                               $this->getQueueKey( 'h-attempts' ), # KEYS[5]
-                               $this->getQueueKey( 'h-data' ), # KEYS[6]
-                               time(), # ARGV[1] (injected to be replication-safe)
-                       ),
-                       6 # number of first argument(s) that are keys
-               );
-       }
-
-       /**
-        * @see JobQueue::doAck()
-        * @param Job $job
-        * @return Job|bool
-        * @throws MWException|JobQueueError
-        */
-       protected function doAck( Job $job ) {
-               if ( !isset( $job->metadata['uuid'] ) ) {
-                       throw new MWException( "Job of type '{$job->getType()}' has no UUID." );
-               }
-               if ( $this->claimTTL > 0 ) {
-                       $conn = $this->getConnection();
-                       try {
-                               static $script =
-<<<LUA
-                               local kClaimed, kAttempts, kData = unpack(KEYS)
-                               -- Unmark the job as claimed
-                               redis.call('zRem',kClaimed,ARGV[1])
-                               redis.call('hDel',kAttempts,ARGV[1])
-                               -- Delete the job data itself
-                               return redis.call('hDel',kData,ARGV[1])
-LUA;
-                               $res = $conn->luaEval( $script,
-                                       array(
-                                               $this->getQueueKey( 'z-claimed' ), # KEYS[1]
-                                               $this->getQueueKey( 'h-attempts' ), # KEYS[2]
-                                               $this->getQueueKey( 'h-data' ), # KEYS[3]
-                                               $job->metadata['uuid'] # ARGV[1]
-                                       ),
-                                       3 # number of first argument(s) that are keys
-                               );
-
-                               if ( !$res ) {
-                                       wfDebugLog( 'JobQueueRedis', "Could not acknowledge {$this->type} job." );
-
-                                       return false;
-                               }
-                       } catch ( RedisException $e ) {
-                               $this->throwRedisException( $this->server, $conn, $e );
-                       }
-               }
-
-               return true;
-       }
-
-       /**
-        * @see JobQueue::doDeduplicateRootJob()
-        * @param Job $job
-        * @return bool
-        * @throws MWException|JobQueueError
-        */
-       protected function doDeduplicateRootJob( Job $job ) {
-               if ( !$job->hasRootJobParams() ) {
-                       throw new MWException( "Cannot register root job; missing parameters." );
-               }
-               $params = $job->getRootJobParams();
-
-               $key = $this->getRootJobCacheKey( $params['rootJobSignature'] );
-
-               $conn = $this->getConnection();
-               try {
-                       $timestamp = $conn->get( $key ); // current last timestamp of this job
-                       if ( $timestamp && $timestamp >= $params['rootJobTimestamp'] ) {
-                               return true; // a newer version of this root job was enqueued
-                       }
-
-                       // Update the timestamp of the last root job started at the location...
-                       return $conn->set( $key, $params['rootJobTimestamp'], self::ROOTJOB_TTL ); // 2 weeks
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
-       }
-
-       /**
-        * @see JobQueue::doIsRootJobOldDuplicate()
-        * @param Job $job
-        * @return bool
-        * @throws JobQueueError
-        */
-       protected function doIsRootJobOldDuplicate( Job $job ) {
-               if ( !$job->hasRootJobParams() ) {
-                       return false; // job has no de-deplication info
-               }
-               $params = $job->getRootJobParams();
-
-               $conn = $this->getConnection();
-               try {
-                       // Get the last time this root job was enqueued
-                       $timestamp = $conn->get( $this->getRootJobCacheKey( $params['rootJobSignature'] ) );
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
-
-               // Check if a new root job was started at the location after this one's...
-               return ( $timestamp && $timestamp > $params['rootJobTimestamp'] );
-       }
-
-       /**
-        * @see JobQueue::doDelete()
-        * @return bool
-        * @throws JobQueueError
-        */
-       protected function doDelete() {
-               static $props = array( 'l-unclaimed', 'z-claimed', 'z-abandoned',
-                       'z-delayed', 'h-idBySha1', 'h-sha1ById', 'h-attempts', 'h-data' );
-
-               $conn = $this->getConnection();
-               try {
-                       $keys = array();
-                       foreach ( $props as $prop ) {
-                               $keys[] = $this->getQueueKey( $prop );
-                       }
-
-                       return ( $conn->delete( $keys ) !== false );
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
-       }
-
-       /**
-        * @see JobQueue::getAllQueuedJobs()
-        * @return Iterator
-        */
-       public function getAllQueuedJobs() {
-               $conn = $this->getConnection();
-               try {
-                       $that = $this;
-
-                       return new MappedIterator(
-                               $conn->lRange( $this->getQueueKey( 'l-unclaimed' ), 0, -1 ),
-                               function ( $uid ) use ( $that, $conn ) {
-                                       return $that->getJobFromUidInternal( $uid, $conn );
-                               },
-                               array( 'accept' => function ( $job ) {
-                                       return is_object( $job );
-                               } )
-                       );
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
-       }
-
-       /**
-        * @see JobQueue::getAllQueuedJobs()
-        * @return Iterator
-        */
-       public function getAllDelayedJobs() {
-               $conn = $this->getConnection();
-               try {
-                       $that = $this;
-
-                       return new MappedIterator( // delayed jobs
-                               $conn->zRange( $this->getQueueKey( 'z-delayed' ), 0, -1 ),
-                               function ( $uid ) use ( $that, $conn ) {
-                                       return $that->getJobFromUidInternal( $uid, $conn );
-                               },
-                               array( 'accept' => function ( $job ) {
-                                       return is_object( $job );
-                               } )
-                       );
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
-       }
-
-       public function getCoalesceLocationInternal() {
-               return "RedisServer:" . $this->server;
-       }
-
-       protected function doGetSiblingQueuesWithJobs( array $types ) {
-               return array_keys( array_filter( $this->doGetSiblingQueueSizes( $types ) ) );
-       }
-
-       protected function doGetSiblingQueueSizes( array $types ) {
-               $sizes = array(); // (type => size)
-               $types = array_values( $types ); // reindex
-               try {
-                       $conn = $this->getConnection();
-                       $conn->multi( Redis::PIPELINE );
-                       foreach ( $types as $type ) {
-                               $conn->lSize( $this->getQueueKey( 'l-unclaimed', $type ) );
-                       }
-                       $res = $conn->exec();
-                       if ( is_array( $res ) ) {
-                               foreach ( $res as $i => $size ) {
-                                       $sizes[$types[$i]] = $size;
-                               }
-                       }
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
-
-               return $sizes;
-       }
-
-       /**
-        * This function should not be called outside JobQueueRedis
-        *
-        * @param $uid string
-        * @param $conn RedisConnRef
-        * @return Job|bool Returns false if the job does not exist
-        * @throws MWException|JobQueueError
-        */
-       public function getJobFromUidInternal( $uid, RedisConnRef $conn ) {
-               try {
-                       $data = $conn->hGet( $this->getQueueKey( 'h-data' ), $uid );
-                       if ( $data === false ) {
-                               return false; // not found
-                       }
-                       $item = $this->unserialize( $conn->hGet( $this->getQueueKey( 'h-data' ), $uid ) );
-                       if ( !is_array( $item ) ) { // this shouldn't happen
-                               throw new MWException( "Could not find job with ID '$uid'." );
-                       }
-                       $title = Title::makeTitle( $item['namespace'], $item['title'] );
-                       $job = Job::factory( $item['type'], $title, $item['params'] );
-                       $job->metadata['uuid'] = $item['uuid'];
-
-                       return $job;
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
-       }
-
-       /**
-        * Recycle or destroy any jobs that have been claimed for too long
-        * and release any ready delayed jobs into the queue
-        *
-        * @return int Number of jobs recycled/deleted/undelayed
-        * @throws MWException|JobQueueError
-        */
-       public function recyclePruneAndUndelayJobs() {
-               $count = 0;
-               // For each job item that can be retried, we need to add it back to the
-               // main queue and remove it from the list of currenty claimed job items.
-               // For those that cannot, they are marked as dead and kept around for
-               // investigation and manual job restoration but are eventually deleted.
-               $conn = $this->getConnection();
-               try {
-                       $now = time();
-                       static $script =
-<<<LUA
-                       local kClaimed, kAttempts, kUnclaimed, kData, kAbandoned, kDelayed = unpack(KEYS)
-                       local released,abandoned,pruned,undelayed = 0,0,0,0
-                       -- Get all non-dead jobs that have an expired claim on them.
-                       -- The score for each item is the last claim timestamp (UNIX).
-                       local staleClaims = redis.call('zRangeByScore',kClaimed,0,ARGV[1])
-                       for k,id in ipairs(staleClaims) do
-                               local timestamp = redis.call('zScore',kClaimed,id)
-                               local attempts = redis.call('hGet',kAttempts,id)
-                               if attempts < ARGV[3] then
-                                       -- Claim expired and retries left: re-enqueue the job
-                                       redis.call('lPush',kUnclaimed,id)
-                                       redis.call('hIncrBy',kAttempts,id,1)
-                                       released = released + 1
-                               else
-                                       -- Claim expired and no retries left: mark the job as dead
-                                       redis.call('zAdd',kAbandoned,timestamp,id)
-                                       abandoned = abandoned + 1
-                               end
-                               redis.call('zRem',kClaimed,id)
-                       end
-                       -- Get all of the dead jobs that have been marked as dead for too long.
-                       -- The score for each item is the last claim timestamp (UNIX).
-                       local deadClaims = redis.call('zRangeByScore',kAbandoned,0,ARGV[2])
-                       for k,id in ipairs(deadClaims) do
-                               -- Stale and out of retries: remove any traces of the job
-                               redis.call('zRem',kAbandoned,id)
-                               redis.call('hDel',kAttempts,id)
-                               redis.call('hDel',kData,id)
-                               pruned = pruned + 1
-                       end
-                       -- Get the list of ready delayed jobs, sorted by readiness (UNIX timestamp)
-                       local ids = redis.call('zRangeByScore',kDelayed,0,ARGV[4])
-                       -- Migrate the jobs from the "delayed" set to the "unclaimed" list
-                       for k,id in ipairs(ids) do
-                               redis.call('lPush',kUnclaimed,id)
-                               redis.call('zRem',kDelayed,id)
-                       end
-                       undelayed = #ids
-                       return {released,abandoned,pruned,undelayed}
-LUA;
-                       $res = $conn->luaEval( $script,
-                               array(
-                                       $this->getQueueKey( 'z-claimed' ), # KEYS[1]
-                                       $this->getQueueKey( 'h-attempts' ), # KEYS[2]
-                                       $this->getQueueKey( 'l-unclaimed' ), # KEYS[3]
-                                       $this->getQueueKey( 'h-data' ), # KEYS[4]
-                                       $this->getQueueKey( 'z-abandoned' ), # KEYS[5]
-                                       $this->getQueueKey( 'z-delayed' ), # KEYS[6]
-                                       $now - $this->claimTTL, # ARGV[1]
-                                       $now - self::MAX_AGE_PRUNE, # ARGV[2]
-                                       $this->maxTries, # ARGV[3]
-                                       $now # ARGV[4]
-                               ),
-                               6 # number of first argument(s) that are keys
-                       );
-                       if ( $res ) {
-                               list( $released, $abandoned, $pruned, $undelayed ) = $res;
-                               $count += $released + $pruned + $undelayed;
-                               JobQueue::incrStats( 'job-recycle', $this->type, $released );
-                               JobQueue::incrStats( 'job-abandon', $this->type, $abandoned );
-                       }
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
-
-               return $count;
-       }
-
-       /**
-        * @return array
-        */
-       protected function doGetPeriodicTasks() {
-               $periods = array( 3600 ); // standard cleanup (useful on config change)
-               if ( $this->claimTTL > 0 ) {
-                       $periods[] = ceil( $this->claimTTL / 2 ); // avoid bad timing
-               }
-               if ( $this->checkDelay ) {
-                       $periods[] = 300; // 5 minutes
-               }
-               return array(
-                       'recyclePruneAndUndelayJobs' => array(
-                               'callback' => array( $this, 'recyclePruneAndUndelayJobs' ),
-                               'period'   => max( min( $periods ), 30 ) // sanity
-                       )
-               );
-       }
-
-       /**
-        * @param IJobSpecification $job
-        * @return array
-        */
-       protected function getNewJobFields( IJobSpecification $job ) {
-               return array(
-                       // Fields that describe the nature of the job
-                       'type' => $job->getType(),
-                       'namespace' => $job->getTitle()->getNamespace(),
-                       'title' => $job->getTitle()->getDBkey(),
-                       'params' => $job->getParams(),
-                       // Some jobs cannot run until a "release timestamp"
-                       'rtimestamp' => $job->getReleaseTimestamp() ?: 0,
-                       // Additional job metadata
-                       'uuid' => UIDGenerator::newRawUUIDv4( UIDGenerator::QUICK_RAND ),
-                       'sha1' => $job->ignoreDuplicates()
-                               ? wfBaseConvert( sha1( serialize( $job->getDeduplicationInfo() ) ), 16, 36, 31 )
-                               : '',
-                       'timestamp' => time() // UNIX timestamp
-               );
-       }
-
-       /**
-        * @param $fields array
-        * @return Job|bool
-        */
-       protected function getJobFromFields( array $fields ) {
-               $title = Title::makeTitleSafe( $fields['namespace'], $fields['title'] );
-               if ( $title ) {
-                       $job = Job::factory( $fields['type'], $title, $fields['params'] );
-                       $job->metadata['uuid'] = $fields['uuid'];
-
-                       return $job;
-               }
-
-               return false;
-       }
-
-       /**
-        * @param array $fields
-        * @return string Serialized and possibly compressed version of $fields
-        */
-       protected function serialize( array $fields ) {
-               $blob = serialize( $fields );
-               if ( $this->compression === 'gzip'
-                       && strlen( $blob ) >= 1024
-                       && function_exists( 'gzdeflate' )
-               ) {
-                       $object = (object)array( 'blob' => gzdeflate( $blob ), 'enc' => 'gzip' );
-                       $blobz = serialize( $object );
-
-                       return ( strlen( $blobz ) < strlen( $blob ) ) ? $blobz : $blob;
-               } else {
-                       return $blob;
-               }
-       }
-
-       /**
-        * @param string $blob
-        * @return array|bool Unserialized version of $blob or false
-        */
-       protected function unserialize( $blob ) {
-               $fields = unserialize( $blob );
-               if ( is_object( $fields ) ) {
-                       if ( $fields->enc === 'gzip' && function_exists( 'gzinflate' ) ) {
-                               $fields = unserialize( gzinflate( $fields->blob ) );
-                       } else {
-                               $fields = false;
-                       }
-               }
-
-               return is_array( $fields ) ? $fields : false;
-       }
-
-       /**
-        * Get a connection to the server that handles all sub-queues for this queue
-        *
-        * @return RedisConnRef
-        * @throws JobQueueConnectionError
-        */
-       protected function getConnection() {
-               $conn = $this->redisPool->getConnection( $this->server );
-               if ( !$conn ) {
-                       throw new JobQueueConnectionError( "Unable to connect to redis server." );
-               }
-
-               return $conn;
-       }
-
-       /**
-        * @param $server string
-        * @param $conn RedisConnRef
-        * @param $e RedisException
-        * @throws JobQueueError
-        */
-       protected function throwRedisException( $server, RedisConnRef $conn, $e ) {
-               $this->redisPool->handleException( $server, $conn, $e );
-               throw new JobQueueError( "Redis server error: {$e->getMessage()}\n" );
-       }
-
-       /**
-        * @param $prop string
-        * @param $type string|null
-        * @return string
-        */
-       private function getQueueKey( $prop, $type = null ) {
-               $type = is_string( $type ) ? $type : $this->type;
-               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
-               if ( strlen( $this->key ) ) { // namespaced queue (for testing)
-                       return wfForeignMemcKey( $db, $prefix, 'jobqueue', $type, $this->key, $prop );
-               } else {
-                       return wfForeignMemcKey( $db, $prefix, 'jobqueue', $type, $prop );
-               }
-       }
-
-       /**
-        * @param $key string
-        * @return void
-        */
-       public function setTestingPrefix( $key ) {
-               $this->key = $key;
-       }
-}
diff --git a/includes/job/JobSpecification.php b/includes/job/JobSpecification.php
deleted file mode 100644 (file)
index e074e5c..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-<?php
-/**
- * Job queue task description base code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup JobQueue
- */
-
-/**
- * Job queue task description interface
- *
- * @ingroup JobQueue
- * @since 1.23
- */
-interface IJobSpecification {
-       /**
-        * @return string Job type
-        */
-       public function getType();
-
-       /**
-        * @return array
-        */
-       public function getParams();
-
-       /**
-        * @return int|null UNIX timestamp to delay running this job until, otherwise null
-        */
-       public function getReleaseTimestamp();
-
-       /**
-        * @return bool Whether only one of each identical set of jobs should be run
-        */
-       public function ignoreDuplicates();
-
-       /**
-        * Subclasses may need to override this to make duplication detection work.
-        * The resulting map conveys everything that makes the job unique. This is
-        * only checked if ignoreDuplicates() returns true, meaning that duplicate
-        * jobs are supposed to be ignored.
-        *
-        * @return array Map of key/values
-        */
-       public function getDeduplicationInfo();
-
-       /**
-        * @return Title Descriptive title (this can simply be informative)
-        */
-       public function getTitle();
-}
-
-/**
- * Job queue task description base code
- *
- * Example usage:
- * <code>
- * $job = new JobSpecification(
- *             'null',
- *             array( 'lives' => 1, 'usleep' => 100, 'pi' => 3.141569 ),
- *             array( 'removeDuplicates' => 1 ),
- *             Title::makeTitle( NS_SPECIAL, 'nullity' )
- * );
- * JobQueueGroup::singleton()->push( $job )
- * </code>
- *
- * @ingroup JobQueue
- * @since 1.23
- */
-class JobSpecification implements IJobSpecification {
-       /** @var string */
-       protected $type;
-
-       /** @var array Array of job parameters or false if none */
-       protected $params;
-
-       /** @var Title */
-       protected $title;
-
-       /** @var bool Expensive jobs may set this to true */
-       protected $ignoreDuplicates;
-
-       /**
-        * @param string $type
-        * @param array $params Map of key/values
-        * @param array $opts Map of key/values
-        * @param Title $title Optional descriptive title
-        */
-       public function __construct(
-               $type, array $params, array $opts = array(), Title $title = null
-       ) {
-               $this->validateParams( $params );
-
-               $this->type = $type;
-               $this->params = $params;
-               $this->title = $title ?: Title::newMainPage();
-               $this->ignoreDuplicates = !empty( $opts['removeDuplicates'] );
-       }
-
-       /**
-        * @param array $params
-        */
-       protected function validateParams( array $params ) {
-               foreach ( $params as $p => $v ) {
-                       if ( is_array( $v ) ) {
-                               $this->validateParams( $v );
-                       } elseif ( !is_scalar( $v ) && $v !== null ) {
-                               throw new UnexpectedValueException( 'Job parameters are not JSON serializable.' );
-                       }
-               }
-       }
-
-       /**
-        * @return string
-        */
-       public function getType() {
-               return $this->type;
-       }
-
-       /**
-        * @return Title
-        */
-       public function getTitle() {
-               return $this->title;
-       }
-
-       /**
-        * @return array
-        */
-       public function getParams() {
-               return $this->params;
-       }
-
-       /**
-        * @return int|null UNIX timestamp to delay running this job until, otherwise null
-        */
-       public function getReleaseTimestamp() {
-               return isset( $this->params['jobReleaseTimestamp'] )
-                       ? wfTimestampOrNull( TS_UNIX, $this->params['jobReleaseTimestamp'] )
-                       : null;
-       }
-
-       /**
-        * @return bool Whether only one of each identical set of jobs should be run
-        */
-       public function ignoreDuplicates() {
-               return $this->ignoreDuplicates;
-       }
-
-       /**
-        * Subclasses may need to override this to make duplication detection work.
-        * The resulting map conveys everything that makes the job unique. This is
-        * only checked if ignoreDuplicates() returns true, meaning that duplicate
-        * jobs are supposed to be ignored.
-        *
-        * @return array Map of key/values
-        */
-       public function getDeduplicationInfo() {
-               $info = array(
-                       'type' => $this->getType(),
-                       'namespace' => $this->getTitle()->getNamespace(),
-                       'title' => $this->getTitle()->getDBkey(),
-                       'params' => $this->getParams()
-               );
-               if ( is_array( $info['params'] ) ) {
-                       // Identical jobs with different "root" jobs should count as duplicates
-                       unset( $info['params']['rootJobSignature'] );
-                       unset( $info['params']['rootJobTimestamp'] );
-                       // Likewise for jobs with different delay times
-                       unset( $info['params']['jobReleaseTimestamp'] );
-               }
-
-               return $info;
-       }
-}
diff --git a/includes/job/README b/includes/job/README
deleted file mode 100644 (file)
index c11d5a7..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*!
-\ingroup JobQueue
-\page jobqueue_design Job queue design
-
-Notes on the Job queuing system architecture.
-
-\section intro Introduction
-
-The data model consist of the following main components:
-* The Job object represents a particular deferred task that happens in the
-  background. All jobs subclass the Job object and put the main logic in the
-  function called run().
-* The JobQueue object represents a particular queue of jobs of a certain type.
-  For example there may be a queue for email jobs and a queue for squid purge
-  jobs.
-
-\section jobqueue Job queues
-
-Each job type has its own queue and is associated to a storage medium. One
-queue might save its jobs in redis while another one uses would use a database.
-
-Storage medium are defined in a queue class. Before using it, you must
-define in $wgJobTypeConf a mapping of the job type to a queue class.
-
-The factory class JobQueueGroup provides helper functions:
-- getting the queue for a given job
-- route new job insertions to the proper queue
-
-The following queue classes are available:
-* JobQueueDB (stores jobs in the `job` table in a database)
-* JobQueueRedis (stores jobs in a redis server)
-
-All queue classes support some basic operations (though some may be no-ops):
-* enqueueing a batch of jobs
-* dequeueing a single job
-* acknowledging a job is completed
-* checking if the queue is empty
-
-Some queue classes (like JobQueueDB) may dequeue jobs in random order while other
-queues might dequeue jobs in exact FIFO order. Callers should thus not assume jobs
-are executed in FIFO order.
-
-Also note that not all queue classes will have the same reliability guarantees.
-In-memory queues may lose data when restarted depending on snapshot and journal
-settings (including journal fsync() frequency).  Some queue types may totally remove
-jobs when dequeued while leaving the ack() function as a no-op; if a job is
-dequeued by a job runner, which crashes before completion, the job will be
-lost. Some jobs, like purging squid caches after a template change, may not
-require durable queues, whereas other jobs might be more important.
-
-\section aggregator Job queue aggregator
-
-The aggregators are used by nextJobDB.php, which is a script that will return a
-random ready queue (on any wiki in the farm) that can be used with runJobs.php.
-This can be used in conjunction with any scripts that handle wiki farm job queues.
-Note that $wgLocalDatabases defines what wikis are in the wiki farm.
-
-Since each job type has its own queue, and wiki-farms may have many wikis,
-there might be a large number of queues to keep track of. To avoid wasting
-large amounts of time polling empty queues, aggregators exists to keep track
-of which queues are ready.
-
-The following queue aggregator classes are available:
-* JobQueueAggregatorMemc (uses $wgMemc to track ready queues)
-* JobQueueAggregatorRedis (uses a redis server to track ready queues)
-
-Some aggregators cache data for a few minutes while others may be always up to date.
-This can be an important factor for jobs that need a low pickup time (or latency).
-
-\section jobs Jobs
-
-Callers should also try to make jobs maintain correctness when executed twice.
-This is useful for queues that actually implement ack(), since they may recycle
-dequeued but un-acknowledged jobs back into the queue to be attempted again. If
-a runner dequeues a job, runs it, but then crashes before calling ack(), the
-job may be returned to the queue and run a second time. Jobs like cache purging can
-happen several times without any correctness problems. However, a pathological case
-would be if a bug causes the problem to systematically keep repeating. For example,
-a job may always throw a DB error at the end of run(). This problem is trickier to
-solve and more obnoxious for things like email jobs, for example. For such jobs,
-it might be useful to use a queue that does not retry jobs.
diff --git a/includes/job/aggregator/JobQueueAggregator.php b/includes/job/aggregator/JobQueueAggregator.php
deleted file mode 100644 (file)
index 8600eed..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<?php
-/**
- * Job queue aggregator code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * Class to handle tracking information about all queues
- *
- * @ingroup JobQueue
- * @since 1.21
- */
-abstract class JobQueueAggregator {
-       /** @var JobQueueAggregator */
-       protected static $instance = null;
-
-       /**
-        * @param array $params
-        */
-       protected function __construct( array $params ) {
-       }
-
-       /**
-        * @throws MWException
-        * @return JobQueueAggregator
-        */
-       final public static function singleton() {
-               global $wgJobQueueAggregator;
-
-               if ( !isset( self::$instance ) ) {
-                       $class = $wgJobQueueAggregator['class'];
-                       $obj = new $class( $wgJobQueueAggregator );
-                       if ( !( $obj instanceof JobQueueAggregator ) ) {
-                               throw new MWException( "Class '$class' is not a JobQueueAggregator class." );
-                       }
-                       self::$instance = $obj;
-               }
-
-               return self::$instance;
-       }
-
-       /**
-        * Destroy the singleton instance
-        *
-        * @return void
-        */
-       final public static function destroySingleton() {
-               self::$instance = null;
-       }
-
-       /**
-        * Mark a queue as being empty
-        *
-        * @param string $wiki
-        * @param string $type
-        * @return bool Success
-        */
-       final public function notifyQueueEmpty( $wiki, $type ) {
-               wfProfileIn( __METHOD__ );
-               $ok = $this->doNotifyQueueEmpty( $wiki, $type );
-               wfProfileOut( __METHOD__ );
-
-               return $ok;
-       }
-
-       /**
-        * @see JobQueueAggregator::notifyQueueEmpty()
-        */
-       abstract protected function doNotifyQueueEmpty( $wiki, $type );
-
-       /**
-        * Mark a queue as being non-empty
-        *
-        * @param string $wiki
-        * @param string $type
-        * @return bool Success
-        */
-       final public function notifyQueueNonEmpty( $wiki, $type ) {
-               wfProfileIn( __METHOD__ );
-               $ok = $this->doNotifyQueueNonEmpty( $wiki, $type );
-               wfProfileOut( __METHOD__ );
-
-               return $ok;
-       }
-
-       /**
-        * @see JobQueueAggregator::notifyQueueNonEmpty()
-        */
-       abstract protected function doNotifyQueueNonEmpty( $wiki, $type );
-
-       /**
-        * Get the list of all of the queues with jobs
-        *
-        * @return array (job type => (list of wiki IDs))
-        */
-       final public function getAllReadyWikiQueues() {
-               wfProfileIn( __METHOD__ );
-               $res = $this->doGetAllReadyWikiQueues();
-               wfProfileOut( __METHOD__ );
-
-               return $res;
-       }
-
-       /**
-        * @see JobQueueAggregator::getAllReadyWikiQueues()
-        */
-       abstract protected function doGetAllReadyWikiQueues();
-
-       /**
-        * Purge all of the aggregator information
-        *
-        * @return bool Success
-        */
-       final public function purge() {
-               wfProfileIn( __METHOD__ );
-               $res = $this->doPurge();
-               wfProfileOut( __METHOD__ );
-
-               return $res;
-       }
-
-       /**
-        * @see JobQueueAggregator::purge()
-        */
-       abstract protected function doPurge();
-
-       /**
-        * Get all databases that have a pending job.
-        * This poll all the queues and is this expensive.
-        *
-        * @return array (job type => (list of wiki IDs))
-        */
-       protected function findPendingWikiQueues() {
-               global $wgLocalDatabases;
-
-               $pendingDBs = array(); // (job type => (db list))
-               foreach ( $wgLocalDatabases as $db ) {
-                       foreach ( JobQueueGroup::singleton( $db )->getQueuesWithJobs() as $type ) {
-                               $pendingDBs[$type][] = $db;
-                       }
-               }
-
-               return $pendingDBs;
-       }
-}
diff --git a/includes/job/aggregator/JobQueueAggregatorMemc.php b/includes/job/aggregator/JobQueueAggregatorMemc.php
deleted file mode 100644 (file)
index d733a42..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-/**
- * Job queue aggregator code that uses BagOStuff.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * Class to handle tracking information about all queues using BagOStuff
- *
- * @ingroup JobQueue
- * @since 1.21
- */
-class JobQueueAggregatorMemc extends JobQueueAggregator {
-       /** @var BagOStuff */
-       protected $cache;
-
-       protected $cacheTTL; // integer; seconds
-
-       /**
-        * @params include:
-        *   - objectCache : Name of an object cache registered in $wgObjectCaches.
-        *                   This defaults to the one specified by $wgMainCacheType.
-        *   - cacheTTL    : Seconds to cache the aggregate data before regenerating.
-        * @param array $params
-        */
-       protected function __construct( array $params ) {
-               parent::__construct( $params );
-               $this->cache = isset( $params['objectCache'] )
-                       ? wfGetCache( $params['objectCache'] )
-                       : wfGetMainCache();
-               $this->cacheTTL = isset( $params['cacheTTL'] ) ? $params['cacheTTL'] : 180; // 3 min
-       }
-
-       /**
-        * @see JobQueueAggregator::doNotifyQueueEmpty()
-        */
-       protected function doNotifyQueueEmpty( $wiki, $type ) {
-               $key = $this->getReadyQueueCacheKey();
-               // Delist the queue from the "ready queue" list
-               if ( $this->cache->add( "$key:lock", 1, 60 ) ) { // lock
-                       $curInfo = $this->cache->get( $key );
-                       if ( is_array( $curInfo ) && isset( $curInfo['pendingDBs'][$type] ) ) {
-                               if ( in_array( $wiki, $curInfo['pendingDBs'][$type] ) ) {
-                                       $curInfo['pendingDBs'][$type] = array_diff(
-                                               $curInfo['pendingDBs'][$type], array( $wiki ) );
-                                       $this->cache->set( $key, $curInfo );
-                               }
-                       }
-                       $this->cache->delete( "$key:lock" ); // unlock
-               }
-
-               return true;
-       }
-
-       /**
-        * @see JobQueueAggregator::doNotifyQueueNonEmpty()
-        */
-       protected function doNotifyQueueNonEmpty( $wiki, $type ) {
-               return true; // updated periodically
-       }
-
-       /**
-        * @see JobQueueAggregator::doAllGetReadyWikiQueues()
-        */
-       protected function doGetAllReadyWikiQueues() {
-               $key = $this->getReadyQueueCacheKey();
-               // If the cache entry wasn't present, is stale, or in .1% of cases otherwise,
-               // regenerate the cache. Use any available stale cache if another process is
-               // currently regenerating the pending DB information.
-               $pendingDbInfo = $this->cache->get( $key );
-               if ( !is_array( $pendingDbInfo )
-                       || ( time() - $pendingDbInfo['timestamp'] ) > $this->cacheTTL
-                       || mt_rand( 0, 999 ) == 0
-               ) {
-                       if ( $this->cache->add( "$key:rebuild", 1, 1800 ) ) { // lock
-                               $pendingDbInfo = array(
-                                       'pendingDBs' => $this->findPendingWikiQueues(),
-                                       'timestamp' => time()
-                               );
-                               for ( $attempts = 1; $attempts <= 25; ++$attempts ) {
-                                       if ( $this->cache->add( "$key:lock", 1, 60 ) ) { // lock
-                                               $this->cache->set( $key, $pendingDbInfo );
-                                               $this->cache->delete( "$key:lock" ); // unlock
-                                               break;
-                                       }
-                               }
-                               $this->cache->delete( "$key:rebuild" ); // unlock
-                       }
-               }
-
-               return is_array( $pendingDbInfo )
-                       ? $pendingDbInfo['pendingDBs']
-                       : array(); // cache is both empty and locked
-       }
-
-       /**
-        * @see JobQueueAggregator::doPurge()
-        */
-       protected function doPurge() {
-               return $this->cache->delete( $this->getReadyQueueCacheKey() );
-       }
-
-       /**
-        * @return string
-        */
-       private function getReadyQueueCacheKey() {
-               return "jobqueue:aggregator:ready-queues:v1"; // global
-       }
-}
diff --git a/includes/job/aggregator/JobQueueAggregatorRedis.php b/includes/job/aggregator/JobQueueAggregatorRedis.php
deleted file mode 100644 (file)
index c654933..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-<?php
-/**
- * Job queue aggregator code that uses PhpRedis.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * Class to handle tracking information about all queues using PhpRedis
- *
- * @ingroup JobQueue
- * @ingroup Redis
- * @since 1.21
- */
-class JobQueueAggregatorRedis extends JobQueueAggregator {
-       /** @var RedisConnectionPool */
-       protected $redisPool;
-
-       /** @var array List of Redis server addresses */
-       protected $servers;
-
-       /**
-        * @params include:
-        *   - redisConfig  : An array of parameters to RedisConnectionPool::__construct().
-        *   - redisServers : Array of server entries, the first being the primary and the
-        *                    others being fallback servers. Each entry is either a hostname/port
-        *                    combination or the absolute path of a UNIX socket.
-        *                    If a hostname is specified but no port, the standard port number
-        *                    6379 will be used. Required.
-        * @param array $params
-        */
-       protected function __construct( array $params ) {
-               parent::__construct( $params );
-               $this->servers = isset( $params['redisServers'] )
-                       ? $params['redisServers']
-                       : array( $params['redisServer'] ); // b/c
-               $this->redisPool = RedisConnectionPool::singleton( $params['redisConfig'] );
-       }
-
-       protected function doNotifyQueueEmpty( $wiki, $type ) {
-               $conn = $this->getConnection();
-               if ( !$conn ) {
-                       return false;
-               }
-               try {
-                       $conn->hDel( $this->getReadyQueueKey(), $this->encQueueName( $type, $wiki ) );
-
-                       return true;
-               } catch ( RedisException $e ) {
-                       $this->handleException( $conn, $e );
-
-                       return false;
-               }
-       }
-
-       protected function doNotifyQueueNonEmpty( $wiki, $type ) {
-               $conn = $this->getConnection();
-               if ( !$conn ) {
-                       return false;
-               }
-               try {
-                       $conn->hSet( $this->getReadyQueueKey(), $this->encQueueName( $type, $wiki ), time() );
-
-                       return true;
-               } catch ( RedisException $e ) {
-                       $this->handleException( $conn, $e );
-
-                       return false;
-               }
-       }
-
-       protected function doGetAllReadyWikiQueues() {
-               $conn = $this->getConnection();
-               if ( !$conn ) {
-                       return array();
-               }
-               try {
-                       $conn->multi( Redis::PIPELINE );
-                       $conn->exists( $this->getReadyQueueKey() );
-                       $conn->hGetAll( $this->getReadyQueueKey() );
-                       list( $exists, $map ) = $conn->exec();
-
-                       if ( $exists ) { // cache hit
-                               $pendingDBs = array(); // (type => list of wikis)
-                               foreach ( $map as $key => $time ) {
-                                       list( $type, $wiki ) = $this->dencQueueName( $key );
-                                       $pendingDBs[$type][] = $wiki;
-                               }
-                       } else { // cache miss
-                               // Avoid duplicated effort
-                               $rand = wfRandomString( 32 );
-                               $conn->multi( Redis::MULTI );
-                               $conn->setex( "{$rand}:lock", 3600, 1 );
-                               $conn->renamenx( "{$rand}:lock", $this->getReadyQueueKey() . ":lock" );
-                               if ( $conn->exec() !== array( true, true ) ) { // lock
-                                       $conn->delete( "{$rand}:lock" );
-                                       return array(); // already in progress
-                               }
-
-                               $pendingDBs = $this->findPendingWikiQueues(); // (type => list of wikis)
-
-                               $conn->delete( $this->getReadyQueueKey() . ":lock" ); // unlock
-
-                               $now = time();
-                               $map = array();
-                               foreach ( $pendingDBs as $type => $wikis ) {
-                                       foreach ( $wikis as $wiki ) {
-                                               $map[$this->encQueueName( $type, $wiki )] = $now;
-                                       }
-                               }
-                               $conn->hMSet( $this->getReadyQueueKey(), $map );
-                       }
-
-                       return $pendingDBs;
-               } catch ( RedisException $e ) {
-                       $this->handleException( $conn, $e );
-
-                       return array();
-               }
-       }
-
-       protected function doPurge() {
-               $conn = $this->getConnection();
-               if ( !$conn ) {
-                       return false;
-               }
-               try {
-                       $conn->delete( $this->getReadyQueueKey() );
-               } catch ( RedisException $e ) {
-                       $this->handleException( $conn, $e );
-
-                       return false;
-               }
-
-               return true;
-       }
-
-       /**
-        * Get a connection to the server that handles all sub-queues for this queue
-        *
-        * @return RedisConnRef|bool Returns false on failure
-        * @throws MWException
-        */
-       protected function getConnection() {
-               $conn = false;
-               foreach ( $this->servers as $server ) {
-                       $conn = $this->redisPool->getConnection( $server );
-                       if ( $conn ) {
-                               break;
-                       }
-               }
-
-               return $conn;
-       }
-
-       /**
-        * @param RedisConnRef $conn
-        * @param RedisException $e
-        * @return void
-        */
-       protected function handleException( RedisConnRef $conn, $e ) {
-               $this->redisPool->handleException( $conn->getServer(), $conn, $e );
-       }
-
-       /**
-        * @return string
-        */
-       private function getReadyQueueKey() {
-               return "jobqueue:aggregator:h-ready-queues:v1"; // global
-       }
-
-       /**
-        * @param string $type
-        * @param string $wiki
-        * @return string
-        */
-       private function encQueueName( $type, $wiki ) {
-               return rawurlencode( $type ) . '/' . rawurlencode( $wiki );
-       }
-
-       /**
-        * @param string $name
-        * @return string
-        */
-       private function dencQueueName( $name ) {
-               list( $type, $wiki ) = explode( '/', $name, 2 );
-
-               return array( rawurldecode( $type ), rawurldecode( $wiki ) );
-       }
-}
diff --git a/includes/job/jobs/AssembleUploadChunksJob.php b/includes/job/jobs/AssembleUploadChunksJob.php
deleted file mode 100644 (file)
index 19b0558..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-/**
- * Assemble the segments of a chunked upload.
- *
- * 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 Upload
- */
-
-/**
- * Assemble the segments of a chunked upload.
- *
- * @ingroup Upload
- */
-class AssembleUploadChunksJob extends Job {
-       public function __construct( $title, $params ) {
-               parent::__construct( 'AssembleUploadChunks', $title, $params );
-               $this->removeDuplicates = true;
-       }
-
-       public function run() {
-               $scope = RequestContext::importScopedSession( $this->params['session'] );
-               $context = RequestContext::getMain();
-               try {
-                       $user = $context->getUser();
-                       if ( !$user->isLoggedIn() ) {
-                               $this->setLastError( "Could not load the author user from session." );
-
-                               return false;
-                       }
-
-                       if ( count( $_SESSION ) === 0 ) {
-                               // Empty session probably indicates that we didn't associate
-                               // with the session correctly. Note that being able to load
-                               // the user does not necessarily mean the session was loaded.
-                               // Most likely cause by suhosin.session.encrypt = On.
-                               $this->setLastError( "Error associating with user session. " .
-                                       "Try setting suhosin.session.encrypt = Off" );
-
-                               return false;
-                       }
-
-                       UploadBase::setSessionStatus(
-                               $this->params['filekey'],
-                               array( 'result' => 'Poll', 'stage' => 'assembling', 'status' => Status::newGood() )
-                       );
-
-                       $upload = new UploadFromChunks( $user );
-                       $upload->continueChunks(
-                               $this->params['filename'],
-                               $this->params['filekey'],
-                               $context->getRequest()
-                       );
-
-                       // Combine all of the chunks into a local file and upload that to a new stash file
-                       $status = $upload->concatenateChunks();
-                       if ( !$status->isGood() ) {
-                               UploadBase::setSessionStatus(
-                                       $this->params['filekey'],
-                                       array( 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status )
-                               );
-                               $this->setLastError( $status->getWikiText() );
-
-                               return false;
-                       }
-
-                       // We have a new filekey for the fully concatenated file
-                       $newFileKey = $upload->getLocalFile()->getFileKey();
-
-                       // Remove the old stash file row and first chunk file
-                       $upload->stash->removeFileNoAuth( $this->params['filekey'] );
-
-                       // 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->params['filekey'],
-                               array(
-                                       'result' => 'Success',
-                                       'stage' => 'assembling',
-                                       'filekey' => $newFileKey,
-                                       'imageinfo' => $imageInfo,
-                                       'status' => Status::newGood()
-                               )
-                       );
-               } catch ( MWException $e ) {
-                       UploadBase::setSessionStatus(
-                               $this->params['filekey'],
-                               array(
-                                       'result' => 'Failure',
-                                       'stage' => 'assembling',
-                                       'status' => Status::newFatal( 'api-error-stashfailed' )
-                               )
-                       );
-                       $this->setLastError( get_class( $e ) . ": " . $e->getText() );
-
-                       return false;
-               }
-
-               return true;
-       }
-
-       public function getDeduplicationInfo() {
-               $info = parent::getDeduplicationInfo();
-               if ( is_array( $info['params'] ) ) {
-                       $info['params'] = array( 'filekey' => $info['params']['filekey'] );
-               }
-
-               return $info;
-       }
-
-       public function allowRetries() {
-               return false;
-       }
-}
diff --git a/includes/job/jobs/DoubleRedirectJob.php b/includes/job/jobs/DoubleRedirectJob.php
deleted file mode 100644 (file)
index 94b56ef..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-<?php
-/**
- * Job to fix double redirects after moving a page.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup JobQueue
- */
-
-/**
- * Job to fix double redirects after moving a page
- *
- * @ingroup JobQueue
- */
-class DoubleRedirectJob extends Job {
-       /** @var string Reason for the change, 'maintenance' or 'move'. Suffix fo
-        *    message key 'double-redirect-fixed-'.
-        */
-       private $reason;
-
-       /** @var Title The title which has changed, redirects pointing to this
-        *    title are fixed
-        */
-       private $redirTitle;
-
-       /** @var User */
-       private static $user;
-
-       /**
-        * Insert jobs into the job queue to fix redirects to the given title
-        * @param string $reason the reason for the fix, see message
-        *   "double-redirect-fixed-<reason>"
-        * @param $redirTitle Title: the title which has changed, redirects
-        *   pointing to this title are fixed
-        * @param bool $destTitle Not used
-        */
-       public static function fixRedirects( $reason, $redirTitle, $destTitle = false ) {
-               # Need to use the master to get the redirect table updated in the same transaction
-               $dbw = wfGetDB( DB_MASTER );
-               $res = $dbw->select(
-                       array( 'redirect', 'page' ),
-                       array( 'page_namespace', 'page_title' ),
-                       array(
-                               'page_id = rd_from',
-                               'rd_namespace' => $redirTitle->getNamespace(),
-                               'rd_title' => $redirTitle->getDBkey()
-                       ), __METHOD__ );
-               if ( !$res->numRows() ) {
-                       return;
-               }
-               $jobs = array();
-               foreach ( $res as $row ) {
-                       $title = Title::makeTitle( $row->page_namespace, $row->page_title );
-                       if ( !$title ) {
-                               continue;
-                       }
-
-                       $jobs[] = new self( $title, array(
-                               'reason' => $reason,
-                               'redirTitle' => $redirTitle->getPrefixedDBkey() ) );
-                       # Avoid excessive memory usage
-                       if ( count( $jobs ) > 10000 ) {
-                               JobQueueGroup::singleton()->push( $jobs );
-                               $jobs = array();
-                       }
-               }
-               JobQueueGroup::singleton()->push( $jobs );
-       }
-
-       /**
-        * @param Title $title
-        * @param array|bool $params
-        * @param int $id
-        */
-       function __construct( $title, $params = false ) {
-               parent::__construct( 'fixDoubleRedirect', $title, $params );
-               $this->reason = $params['reason'];
-               $this->redirTitle = Title::newFromText( $params['redirTitle'] );
-       }
-
-       /**
-        * @return bool
-        */
-       function run() {
-               if ( !$this->redirTitle ) {
-                       $this->setLastError( 'Invalid title' );
-
-                       return false;
-               }
-
-               $targetRev = Revision::newFromTitle( $this->title, false, Revision::READ_LATEST );
-               if ( !$targetRev ) {
-                       wfDebug( __METHOD__ . ": target redirect already deleted, ignoring\n" );
-
-                       return true;
-               }
-               $content = $targetRev->getContent();
-               $currentDest = $content ? $content->getRedirectTarget() : null;
-               if ( !$currentDest || !$currentDest->equals( $this->redirTitle ) ) {
-                       wfDebug( __METHOD__ . ": Redirect has changed since the job was queued\n" );
-
-                       return true;
-               }
-
-               // Check for a suppression tag (used e.g. in periodically archived discussions)
-               $mw = MagicWord::get( 'staticredirect' );
-               if ( $content->matchMagicWord( $mw ) ) {
-                       wfDebug( __METHOD__ . ": skipping: suppressed with __STATICREDIRECT__\n" );
-
-                       return true;
-               }
-
-               // Find the current final destination
-               $newTitle = self::getFinalDestination( $this->redirTitle );
-               if ( !$newTitle ) {
-                       wfDebug( __METHOD__ .
-                               ": skipping: single redirect, circular redirect or invalid redirect destination\n" );
-
-                       return true;
-               }
-               if ( $newTitle->equals( $this->redirTitle ) ) {
-                       // The redirect is already right, no need to change it
-                       // This can happen if the page was moved back (say after vandalism)
-                       wfDebug( __METHOD__ . " : skipping, already good\n" );
-               }
-
-               // Preserve fragment (bug 14904)
-               $newTitle = Title::makeTitle( $newTitle->getNamespace(), $newTitle->getDBkey(),
-                       $currentDest->getFragment(), $newTitle->getInterwiki() );
-
-               // Fix the text
-               $newContent = $content->updateRedirect( $newTitle );
-
-               if ( $newContent->equals( $content ) ) {
-                       $this->setLastError( 'Content unchanged???' );
-
-                       return false;
-               }
-
-               $user = $this->getUser();
-               if ( !$user ) {
-                       $this->setLastError( 'Invalid user' );
-
-                       return false;
-               }
-
-               // Save it
-               global $wgUser;
-               $oldUser = $wgUser;
-               $wgUser = $user;
-               $article = WikiPage::factory( $this->title );
-
-               // Messages: double-redirect-fixed-move, double-redirect-fixed-maintenance
-               $reason = wfMessage( 'double-redirect-fixed-' . $this->reason,
-                       $this->redirTitle->getPrefixedText(), $newTitle->getPrefixedText()
-               )->inContentLanguage()->text();
-               $article->doEditContent( $newContent, $reason, EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $user );
-               $wgUser = $oldUser;
-
-               return true;
-       }
-
-       /**
-        * Get the final destination of a redirect
-        *
-        * @param $title Title
-        *
-        * @return bool if the specified title is not a redirect, or if it is a circular redirect
-        */
-       public static function getFinalDestination( $title ) {
-               $dbw = wfGetDB( DB_MASTER );
-
-               // Circular redirect check
-               $seenTitles = array();
-               $dest = false;
-
-               while ( true ) {
-                       $titleText = $title->getPrefixedDBkey();
-                       if ( isset( $seenTitles[$titleText] ) ) {
-                               wfDebug( __METHOD__, "Circular redirect detected, aborting\n" );
-
-                               return false;
-                       }
-                       $seenTitles[$titleText] = true;
-
-                       if ( $title->isExternal() ) {
-                               // If the target is interwiki, we have to break early (bug 40352).
-                               // Otherwise it will look up a row in the local page table
-                               // with the namespace/page of the interwiki target which can cause
-                               // unexpected results (e.g. X -> foo:Bar -> Bar -> .. )
-                               break;
-                       }
-
-                       $row = $dbw->selectRow(
-                               array( 'redirect', 'page' ),
-                               array( 'rd_namespace', 'rd_title', 'rd_interwiki' ),
-                               array(
-                                       'rd_from=page_id',
-                                       'page_namespace' => $title->getNamespace(),
-                                       'page_title' => $title->getDBkey()
-                               ), __METHOD__ );
-                       if ( !$row ) {
-                               # No redirect from here, chain terminates
-                               break;
-                       } else {
-                               $dest = $title = Title::makeTitle(
-                                       $row->rd_namespace,
-                                       $row->rd_title,
-                                       '',
-                                       $row->rd_interwiki
-                               );
-                       }
-               }
-
-               return $dest;
-       }
-
-       /**
-        * Get a user object for doing edits, from a request-lifetime cache
-        * False will be returned if the user name specified in the
-        * 'double-redirect-fixer' message is invalid.
-        *
-        * @return User|bool
-        */
-       function getUser() {
-               if ( !self::$user ) {
-                       $username = wfMessage( 'double-redirect-fixer' )->inContentLanguage()->text();
-                       self::$user = User::newFromName( $username );
-                       # User::newFromName() can return false on a badly configured wiki.
-                       if ( self::$user && !self::$user->isLoggedIn() ) {
-                               self::$user->addToDatabase();
-                       }
-               }
-
-               return self::$user;
-       }
-}
diff --git a/includes/job/jobs/DuplicateJob.php b/includes/job/jobs/DuplicateJob.php
deleted file mode 100644 (file)
index b0a6ef7..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-/**
- * No-op job that does nothing.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Cache
- */
-
-/**
- * No-op job that does nothing. Used to represent duplicates.
- *
- * @ingroup JobQueue
- */
-final class DuplicateJob extends Job {
-       /**
-        * Callers should use DuplicateJob::newFromJob() instead
-        *
-        * @param Title $title
-        * @param array $params job parameters
-        */
-       function __construct( $title, $params ) {
-               parent::__construct( 'duplicate', $title, $params );
-       }
-
-       /**
-        * Get a duplicate no-op version of a job
-        *
-        * @param Job $job
-        * @return Job
-        */
-       public static function newFromJob( Job $job ) {
-               $djob = new self( $job->getTitle(), $job->getParams() );
-               $djob->command = $job->getType();
-               $djob->params = is_array( $djob->params ) ? $djob->params : array();
-               $djob->params = array( 'isDuplicate' => true ) + $djob->params;
-               $djob->metadata = $job->metadata;
-
-               return $djob;
-       }
-
-       public function run() {
-               return true;
-       }
-}
diff --git a/includes/job/jobs/EmaillingJob.php b/includes/job/jobs/EmaillingJob.php
deleted file mode 100644 (file)
index df8ae63..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/**
- * Old job for notification emails.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup JobQueue
- */
-
-/**
- * Old job used for sending single notification emails;
- * kept for backwards-compatibility
- *
- * @ingroup JobQueue
- */
-class EmaillingJob extends Job {
-       function __construct( $title, $params ) {
-               parent::__construct( 'sendMail', Title::newMainPage(), $params );
-       }
-
-       function run() {
-               $status = UserMailer::send(
-                       $this->params['to'],
-                       $this->params['from'],
-                       $this->params['subj'],
-                       $this->params['body'],
-                       $this->params['replyto']
-               );
-
-               return $status->isOK();
-       }
-}
diff --git a/includes/job/jobs/EnotifNotifyJob.php b/includes/job/jobs/EnotifNotifyJob.php
deleted file mode 100644 (file)
index 1ed99a5..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-/**
- * Job for notification emails.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup JobQueue
- */
-
-/**
- * Job for email notification mails
- *
- * @ingroup JobQueue
- */
-class EnotifNotifyJob extends Job {
-       function __construct( $title, $params ) {
-               parent::__construct( 'enotifNotify', $title, $params );
-       }
-
-       function run() {
-               $enotif = new EmailNotification();
-               // Get the user from ID (rename safe). Anons are 0, so defer to name.
-               if ( isset( $this->params['editorID'] ) && $this->params['editorID'] ) {
-                       $editor = User::newFromId( $this->params['editorID'] );
-               // B/C, only the name might be given.
-               } else {
-                       # @todo FIXME: newFromName could return false on a badly configured wiki.
-                       $editor = User::newFromName( $this->params['editor'], false );
-               }
-               $enotif->actuallyNotifyOnPageChange(
-                       $editor,
-                       $this->title,
-                       $this->params['timestamp'],
-                       $this->params['summary'],
-                       $this->params['minorEdit'],
-                       $this->params['oldid'],
-                       $this->params['watchers'],
-                       $this->params['pageStatus']
-               );
-
-               return true;
-       }
-}
diff --git a/includes/job/jobs/HTMLCacheUpdateJob.php b/includes/job/jobs/HTMLCacheUpdateJob.php
deleted file mode 100644 (file)
index a7c5dc0..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-<?php
-/**
- * HTML cache invalidation of all pages linking to a given title.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Cache
- */
-
-/**
- * Job to purge the cache for all pages that link to or use another page or file
- *
- * This job comes in a few variants:
- *   - a) Recursive jobs to purge caches for backlink pages for a given title.
- *        These jobs have have (recursive:true,table:<table>) set.
- *   - b) Jobs to purge caches for a set of titles (the job title is ignored).
- *           These jobs have have (pages:(<page ID>:(<namespace>,<title>),...) set.
- *
- * @ingroup JobQueue
- */
-class HTMLCacheUpdateJob extends Job {
-       function __construct( $title, $params = '' ) {
-               parent::__construct( 'htmlCacheUpdate', $title, $params );
-               // Base backlink purge jobs can be de-duplicated
-               $this->removeDuplicates = ( !isset( $params['range'] ) && !isset( $params['pages'] ) );
-       }
-
-       function run() {
-               global $wgUpdateRowsPerJob, $wgUpdateRowsPerQuery, $wgMaxBacklinksInvalidate;
-
-               static $expected = array( 'recursive', 'pages' ); // new jobs have one of these
-
-               $oldRangeJob = false;
-               if ( !array_intersect( array_keys( $this->params ), $expected ) ) {
-                       // B/C for older job params formats that lack these fields:
-                       // a) base jobs with just ("table") and b) range jobs with ("table","start","end")
-                       if ( isset( $this->params['start'] ) && isset( $this->params['end'] ) ) {
-                               $oldRangeJob = true;
-                       } else {
-                               $this->params['recursive'] = true; // base job
-                       }
-               }
-
-               // Job to purge all (or a range of) backlink pages for a page
-               if ( !empty( $this->params['recursive'] ) ) {
-                       // @TODO: try to use delayed jobs if possible?
-                       if ( !isset( $this->params['range'] ) && $wgMaxBacklinksInvalidate !== false ) {
-                               $numRows = $this->title->getBacklinkCache()->getNumLinks(
-                                       $this->params['table'], $wgMaxBacklinksInvalidate );
-                               if ( $numRows > $wgMaxBacklinksInvalidate ) {
-                                       return true;
-                               }
-                       }
-                       // Convert this into no more than $wgUpdateRowsPerJob HTMLCacheUpdateJob per-title
-                       // jobs and possibly a recursive HTMLCacheUpdateJob job for the rest of the backlinks
-                       $jobs = BacklinkJobUtils::partitionBacklinkJob(
-                               $this,
-                               $wgUpdateRowsPerJob,
-                               $wgUpdateRowsPerQuery, // jobs-per-title
-                               // Carry over information for de-duplication
-                               array( 'params' => $this->getRootJobParams() )
-                       );
-                       JobQueueGroup::singleton()->push( $jobs );
-               // Job to purge pages for for a set of titles
-               } elseif ( isset( $this->params['pages'] ) ) {
-                       $this->invalidateTitles( $this->params['pages'] );
-               // B/C for job to purge a range of backlink pages for a given page
-               } elseif ( $oldRangeJob ) {
-                       $titleArray = $this->title->getBacklinkCache()->getLinks(
-                               $this->params['table'], $this->params['start'], $this->params['end'] );
-
-                       $pages = array(); // same format BacklinkJobUtils uses
-                       foreach ( $titleArray as $tl ) {
-                               $pages[$tl->getArticleId()] = array( $tl->getNamespace(), $tl->getDbKey() );
-                       }
-
-                       $jobs = array();
-                       foreach ( array_chunk( $pages, $wgUpdateRowsPerJob ) as $pageChunk ) {
-                               $jobs[] = new HTMLCacheUpdateJob( $this->title,
-                                       array(
-                                               'table' => $this->params['table'],
-                                               'pages' => $pageChunk
-                                       ) + $this->getRootJobParams() // carry over information for de-duplication
-                               );
-                       }
-                       JobQueueGroup::singleton()->push( $jobs );
-               }
-
-               return true;
-       }
-
-       /**
-        * @param array $pages Map of (page ID => (namespace, DB key)) entries
-        */
-       protected function invalidateTitles( array $pages ) {
-               global $wgUpdateRowsPerQuery, $wgUseFileCache, $wgUseSquid;
-
-               // Get all page IDs in this query into an array
-               $pageIds = array_keys( $pages );
-               if ( !$pageIds ) {
-                       return;
-               }
-
-               $dbw = wfGetDB( DB_MASTER );
-
-               // The page_touched field will need to be bumped for these pages.
-               // Only bump it to the present time if no "rootJobTimestamp" was known.
-               // If it is known, it can be used instead, which avoids invalidating output
-               // that was in fact generated *after* the relevant dependency change time
-               // (e.g. template edit). This is particularily useful since refreshLinks jobs
-               // save back parser output and usually run along side htmlCacheUpdate jobs;
-               // their saved output would be invalidated by using the current timestamp.
-               if ( isset( $this->params['rootJobTimestamp'] ) ) {
-                       $touchTimestamp = $this->params['rootJobTimestamp'];
-               } else {
-                       $touchTimestamp = wfTimestampNow();
-               }
-
-               // Update page_touched (skipping pages already touched since the root job).
-               // Check $wgUpdateRowsPerQuery for sanity; batch jobs are sized by that already.
-               foreach ( array_chunk( $pageIds, $wgUpdateRowsPerQuery ) as $batch ) {
-                       $dbw->update( 'page',
-                               array( 'page_touched' => $dbw->timestamp( $touchTimestamp ) ),
-                               array( 'page_id' => $batch,
-                                       // don't invalidated pages that were already invalidated
-                                       "page_touched < " . $dbw->addQuotes( $dbw->timestamp( $touchTimestamp ) )
-                               ),
-                               __METHOD__
-                       );
-               }
-               // Get the list of affected pages (races only mean something else did the purge)
-               $titleArray = TitleArray::newFromResult( $dbw->select(
-                       'page',
-                       array( 'page_namespace', 'page_title' ),
-                       array( 'page_id' => $pageIds, 'page_touched' => $dbw->timestamp( $touchTimestamp ) ),
-                       __METHOD__
-               ) );
-
-               // Update squid
-               if ( $wgUseSquid ) {
-                       $u = SquidUpdate::newFromTitles( $titleArray );
-                       $u->doUpdate();
-               }
-
-               // Update file cache
-               if ( $wgUseFileCache ) {
-                       foreach ( $titleArray as $title ) {
-                               HTMLFileCache::clearFileCache( $title );
-                       }
-               }
-       }
-
-       public function workItemCount() {
-               return isset( $this->params['pages'] ) ? count( $this->params['pages'] ) : 1;
-       }
-}
diff --git a/includes/job/jobs/NullJob.php b/includes/job/jobs/NullJob.php
deleted file mode 100644 (file)
index b2d6a9a..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-/**
- * Degenerate job that does nothing.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Cache
- */
-
-/**
- * Degenerate job that does nothing, but can optionally replace itself
- * in the queue and/or sleep for a brief time period. These can be used
- * to represent "no-op" jobs or test lock contention and performance.
- *
- * @par Example:
- * Inserting a null job in the configured job queue:
- * @code
- * $ php maintenance/eval.php
- * > $queue = JobQueueGroup::singleton();
- * > $job = new NullJob( Title::newMainPage(), array( 'lives' => 10 ) );
- * > $queue->push( $job );
- * @endcode
- * You can then confirm the job has been enqueued by using the showJobs.php
- * maintenance utility:
- * @code
- * $ php maintenance/showJobs.php --group
- * null: 1 queue; 0 claimed (0 active, 0 abandoned)
- * $
- * @endcode
- *
- * @ingroup JobQueue
- */
-class NullJob extends Job {
-       /**
-        * @param Title $title
-        * @param array $params job parameters (lives, usleep)
-        */
-       function __construct( $title, $params ) {
-               parent::__construct( 'null', $title, $params );
-               if ( !isset( $this->params['lives'] ) ) {
-                       $this->params['lives'] = 1;
-               }
-               if ( !isset( $this->params['usleep'] ) ) {
-                       $this->params['usleep'] = 0;
-               }
-               $this->removeDuplicates = !empty( $this->params['removeDuplicates'] );
-       }
-
-       public function run() {
-               if ( $this->params['usleep'] > 0 ) {
-                       usleep( $this->params['usleep'] );
-               }
-               if ( $this->params['lives'] > 1 ) {
-                       $params = $this->params;
-                       $params['lives']--;
-                       $job = new self( $this->title, $params );
-                       JobQueueGroup::singleton()->push( $job );
-               }
-
-               return true;
-       }
-}
diff --git a/includes/job/jobs/PublishStashedFileJob.php b/includes/job/jobs/PublishStashedFileJob.php
deleted file mode 100644 (file)
index d7667f3..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-<?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 Upload
- */
-
-/**
- * Upload a file from the upload stash into the local file repo.
- *
- * @ingroup Upload
- */
-class PublishStashedFileJob extends Job {
-       public function __construct( $title, $params ) {
-               parent::__construct( 'PublishStashedFile', $title, $params );
-               $this->removeDuplicates = true;
-       }
-
-       public function run() {
-               $scope = RequestContext::importScopedSession( $this->params['session'] );
-               $context = RequestContext::getMain();
-               try {
-                       $user = $context->getUser();
-                       if ( !$user->isLoggedIn() ) {
-                               $this->setLastError( "Could not load the author user from session." );
-
-                               return false;
-                       }
-
-                       if ( count( $_SESSION ) === 0 ) {
-                               // Empty session probably indicates that we didn't associate
-                               // with the session correctly. Note that being able to load
-                               // the user does not necessarily mean the session was loaded.
-                               // Most likely cause by suhosin.session.encrypt = On.
-                               $this->setLastError( "Error associating with user session. " .
-                                       "Try setting suhosin.session.encrypt = Off" );
-
-                               return false;
-                       }
-
-                       UploadBase::setSessionStatus(
-                               $this->params['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->params['filekey'], $this->params['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->params['filekey'],
-                                       array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
-                               );
-                               $this->setLastError( "Could not verify upload." );
-
-                               return false;
-                       }
-
-                       // Upload the stashed file to a permanent location
-                       $status = $upload->performUpload(
-                               $this->params['comment'],
-                               $this->params['text'],
-                               $this->params['watch'],
-                               $user
-                       );
-                       if ( !$status->isGood() ) {
-                               UploadBase::setSessionStatus(
-                                       $this->params['filekey'],
-                                       array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
-                               );
-                               $this->setLastError( $status->getWikiText() );
-
-                               return false;
-                       }
-
-                       // 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->params['filekey'],
-                               array(
-                                       'result' => 'Success',
-                                       'stage' => 'publish',
-                                       'filename' => $upload->getLocalFile()->getName(),
-                                       'imageinfo' => $imageInfo,
-                                       'status' => Status::newGood()
-                               )
-                       );
-               } catch ( MWException $e ) {
-                       UploadBase::setSessionStatus(
-                               $this->params['filekey'],
-                               array(
-                                       'result' => 'Failure',
-                                       'stage' => 'publish',
-                                       'status' => Status::newFatal( 'api-error-publishfailed' )
-                               )
-                       );
-                       $this->setLastError( get_class( $e ) . ": " . $e->getText() );
-
-                       return false;
-               }
-
-               return true;
-       }
-
-       public function getDeduplicationInfo() {
-               $info = parent::getDeduplicationInfo();
-               if ( is_array( $info['params'] ) ) {
-                       $info['params'] = array( 'filekey' => $info['params']['filekey'] );
-               }
-
-               return $info;
-       }
-
-       public function allowRetries() {
-               return false;
-       }
-}
diff --git a/includes/job/jobs/RefreshLinksJob.php b/includes/job/jobs/RefreshLinksJob.php
deleted file mode 100644 (file)
index 3bcb4fc..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-<?php
-/**
- * Job to update link tables for pages
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup JobQueue
- */
-
-/**
- * Job to update link tables for pages
- *
- * This job comes in a few variants:
- *   - a) Recursive jobs to update links for backlink pages for a given title.
- *        These jobs have have (recursive:true,table:<table>) set.
- *   - b) Jobs to update links for a set of pages (the job title is ignored).
- *           These jobs have have (pages:(<page ID>:(<namespace>,<title>),...) set.
- *   - c) Jobs to update links for a single page (the job title)
- *        These jobs need no extra fields set.
- *
- * @ingroup JobQueue
- */
-class RefreshLinksJob extends Job {
-       const PARSE_THRESHOLD_SEC = 1.0;
-
-       function __construct( $title, $params = '' ) {
-               parent::__construct( 'refreshLinks', $title, $params );
-               // Base backlink update jobs and per-title update jobs can be de-duplicated.
-               // If template A changes twice before any jobs run, a clean queue will have:
-               //              (A base, A base)
-               // The second job is ignored by the queue on insertion.
-               // Suppose, many pages use template A, and that template itself uses template B.
-               // An edit to both will first create two base jobs. A clean FIFO queue will have:
-               //              (A base, B base)
-               // When these jobs run, the queue will have per-title and remnant partition jobs:
-               //              (titleX,titleY,titleZ,...,A remnant,titleM,titleN,titleO,...,B remnant)
-               // Some these jobs will be the same, and will automatically be ignored by
-               // the queue upon insertion. Some title jobs will run before the duplicate is
-               // inserted, so the work will still be done twice in those cases. More titles
-               // can be de-duplicated as the remnant jobs continue to be broken down. This
-               // works best when $wgUpdateRowsPerJob, and either the pages have few backlinks
-               // and/or the backlink sets for pages A and B are almost identical.
-               $this->removeDuplicates = !isset( $params['range'] )
-                       && ( !isset( $params['pages'] ) || count( $params['pages'] ) == 1 );
-       }
-
-       function run() {
-               global $wgUpdateRowsPerJob;
-
-               // Job to update all (or a range of) backlink pages for a page
-               if ( !empty( $this->params['recursive'] ) ) {
-                       // Carry over information for de-duplication
-                       $extraParams = $this->getRootJobParams();
-                       // Avoid slave lag when fetching templates.
-                       // When the outermost job is run, we know that the caller that enqueued it must have
-                       // committed the relevant changes to the DB by now. At that point, record the master
-                       // position and pass it along as the job recursively breaks into smaller range jobs.
-                       // Hopefully, when leaf jobs are popped, the slaves will have reached that position.
-                       if ( isset( $this->params['masterPos'] ) ) {
-                               $extraParams['masterPos'] = $this->params['masterPos'];
-                       } elseif ( wfGetLB()->getServerCount() > 1 ) {
-                               $extraParams['masterPos'] = wfGetLB()->getMasterPos();
-                       } else {
-                               $extraParams['masterPos'] = false;
-                       }
-                       // Convert this into no more than $wgUpdateRowsPerJob RefreshLinks per-title
-                       // jobs and possibly a recursive RefreshLinks job for the rest of the backlinks
-                       $jobs = BacklinkJobUtils::partitionBacklinkJob(
-                               $this,
-                               $wgUpdateRowsPerJob,
-                               1, // job-per-title
-                               array( 'params' => $extraParams )
-                       );
-                       JobQueueGroup::singleton()->push( $jobs );
-               // Job to update link tables for for a set of titles
-               } elseif ( isset( $this->params['pages'] ) ) {
-                       foreach ( $this->params['pages'] as $pageId => $nsAndKey ) {
-                               list( $ns, $dbKey ) = $nsAndKey;
-                               $this->runForTitle( Title::makeTitleSafe( $ns, $dbKey ) );
-                       }
-               // Job to update link tables for a given title
-               } else {
-                       $this->runForTitle( $this->title );
-               }
-
-               return true;
-       }
-
-       protected function runForTitle( Title $title = null ) {
-               $linkCache = LinkCache::singleton();
-               $linkCache->clear();
-
-               if ( is_null( $title ) ) {
-                       $this->setLastError( "refreshLinks: Invalid title" );
-                       return false;
-               }
-
-               // Wait for the DB of the current/next slave DB handle to catch up to the master.
-               // This way, we get the correct page_latest for templates or files that just changed
-               // milliseconds ago, having triggered this job to begin with.
-               if ( isset( $this->params['masterPos'] ) && $this->params['masterPos'] !== false ) {
-                       wfGetLB()->waitFor( $this->params['masterPos'] );
-               }
-
-               $page = WikiPage::factory( $title );
-
-               // Fetch the current revision...
-               $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
-               if ( !$revision ) {
-                       $this->setLastError( "refreshLinks: Article not found {$title->getPrefixedDBkey()}" );
-                       return false; // XXX: what if it was just deleted?
-               }
-               $content = $revision->getContent( Revision::RAW );
-               if ( !$content ) {
-                       // If there is no content, pretend the content is empty
-                       $content = $revision->getContentHandler()->makeEmptyContent();
-               }
-
-               $parserOutput = false;
-               $parserOptions = $page->makeParserOptions( 'canonical' );
-               // If page_touched changed after this root job (with a good slave lag skew factor),
-               // then it is likely that any views of the pages already resulted in re-parses which
-               // are now in cache. This can be reused to avoid expensive parsing in some cases.
-               if ( isset( $this->params['rootJobTimestamp'] ) ) {
-                       $skewedTimestamp = wfTimestamp( TS_UNIX, $this->params['rootJobTimestamp'] ) + 5;
-                       if ( $page->getLinksTimestamp() > wfTimestamp( TS_MW, $skewedTimestamp ) ) {
-                               // Something already updated the backlinks since this job was made
-                               return true;
-                       }
-                       if ( $page->getTouched() > wfTimestamp( TS_MW, $skewedTimestamp ) ) {
-                               $parserOutput = ParserCache::singleton()->getDirty( $page, $parserOptions );
-                               if ( $parserOutput && $parserOutput->getCacheTime() <= $skewedTimestamp ) {
-                                       $parserOutput = false; // too stale
-                               }
-                       }
-               }
-               // Fetch the current revision and parse it if necessary...
-               if ( $parserOutput == false ) {
-                       $start = microtime( true );
-                       // Revision ID must be passed to the parser output to get revision variables correct
-                       $parserOutput = $content->getParserOutput(
-                               $title, $revision->getId(), $parserOptions, false );
-                       $ellapsed = microtime( true ) - $start;
-                       // If it took a long time to render, then save this back to the cache to avoid
-                       // wasted CPU by other apaches or job runners. We don't want to always save to
-                       // cache as this cause cause high cache I/O and LRU churn when a template changes.
-                       if ( $ellapsed >= self::PARSE_THRESHOLD_SEC
-                               && $page->isParserCacheUsed( $parserOptions, $revision->getId() )
-                               && $parserOutput->isCacheable()
-                       ) {
-                               $ctime = wfTimestamp( TS_MW, (int)$start ); // cache time
-                               ParserCache::singleton()->save( $parserOutput, $page, $parserOptions, $ctime );
-                       }
-               }
-
-               $updates = $content->getSecondaryDataUpdates( $title, null, false, $parserOutput );
-               DataUpdate::runUpdates( $updates );
-
-               InfoAction::invalidateCache( $title );
-
-               return true;
-       }
-
-       public function getDeduplicationInfo() {
-               $info = parent::getDeduplicationInfo();
-               if ( is_array( $info['params'] ) ) {
-                       // Don't let highly unique "masterPos" values ruin duplicate detection
-                       unset( $info['params']['masterPos'] );
-                       // For per-pages jobs, the job title is that of the template that changed
-                       // (or similar), so remove that since it ruins duplicate detection
-                       if ( isset( $info['pages'] ) ) {
-                               unset( $info['namespace'] );
-                               unset( $info['title'] );
-                       }
-               }
-
-               return $info;
-       }
-
-       public function workItemCount() {
-               return isset( $this->params['pages'] ) ? count( $this->params['pages'] ) : 1;
-       }
-}
diff --git a/includes/job/jobs/RefreshLinksJob2.php b/includes/job/jobs/RefreshLinksJob2.php
deleted file mode 100644 (file)
index 77e3b3f..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-<?php
-/**
- * Job to update links for a given title.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup JobQueue
- */
-
-/**
- * Background job to update links for titles in certain backlink range by page ID.
- * Newer version for high use templates. This is deprecated by RefreshLinksPartitionJob.
- *
- * @ingroup JobQueue
- * @deprecated 1.23
- */
-class RefreshLinksJob2 extends Job {
-       function __construct( $title, $params ) {
-               parent::__construct( 'refreshLinks2', $title, $params );
-               // Base jobs for large templates can easily be de-duplicated
-               $this->removeDuplicates = !isset( $params['start'] ) && !isset( $params['end'] );
-       }
-
-       /**
-        * Run a refreshLinks2 job
-        * @return boolean success
-        */
-       function run() {
-               global $wgUpdateRowsPerJob;
-
-               $linkCache = LinkCache::singleton();
-               $linkCache->clear();
-
-               if ( is_null( $this->title ) ) {
-                       $this->error = "refreshLinks2: Invalid title";
-                       return false;
-               }
-
-               // Back compat for pre-r94435 jobs
-               $table = isset( $this->params['table'] ) ? $this->params['table'] : 'templatelinks';
-
-               // Avoid slave lag when fetching templates.
-               // When the outermost job is run, we know that the caller that enqueued it must have
-               // committed the relevant changes to the DB by now. At that point, record the master
-               // position and pass it along as the job recursively breaks into smaller range jobs.
-               // Hopefully, when leaf jobs are popped, the slaves will have reached that position.
-               if ( isset( $this->params['masterPos'] ) ) {
-                       $masterPos = $this->params['masterPos'];
-               } elseif ( wfGetLB()->getServerCount() > 1 ) {
-                       $masterPos = wfGetLB()->getMasterPos();
-               } else {
-                       $masterPos = false;
-               }
-
-               $tbc = $this->title->getBacklinkCache();
-
-               $jobs = array(); // jobs to insert
-               if ( isset( $this->params['start'] ) && isset( $this->params['end'] ) ) {
-                       # This is a partition job to trigger the insertion of leaf jobs...
-                       $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) );
-               } else {
-                       # This is a base job to trigger the insertion of partitioned jobs...
-                       if ( $tbc->getNumLinks( $table, $wgUpdateRowsPerJob + 1 ) <= $wgUpdateRowsPerJob ) {
-                               # Just directly insert the single per-title jobs
-                               $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) );
-                       } else {
-                               # Insert the partition jobs to make per-title jobs
-                               foreach ( $tbc->partition( $table, $wgUpdateRowsPerJob ) as $batch ) {
-                                       list( $start, $end ) = $batch;
-                                       $jobs[] = new RefreshLinksJob2( $this->title,
-                                               array(
-                                                       'table' => $table,
-                                                       'start' => $start,
-                                                       'end' => $end,
-                                                       'masterPos' => $masterPos,
-                                               ) + $this->getRootJobParams() // carry over information for de-duplication
-                                       );
-                               }
-                       }
-               }
-
-               if ( count( $jobs ) ) {
-                       JobQueueGroup::singleton()->push( $jobs );
-               }
-
-               return true;
-       }
-
-       /**
-        * @param $table string
-        * @param $masterPos mixed
-        * @return Array
-        */
-       protected function getSingleTitleJobs( $table, $masterPos ) {
-               # The "start"/"end" fields are not set for the base jobs
-               $start = isset( $this->params['start'] ) ? $this->params['start'] : false;
-               $end = isset( $this->params['end'] ) ? $this->params['end'] : false;
-               $titles = $this->title->getBacklinkCache()->getLinks( $table, $start, $end );
-               # Convert into single page refresh links jobs.
-               # This handles well when in sapi mode and is useful in any case for job
-               # de-duplication. If many pages use template A, and that template itself
-               # uses template B, then an edit to both will create many duplicate jobs.
-               # Roughly speaking, for each page, one of the "RefreshLinksJob" jobs will
-               # get run first, and when it does, it will remove the duplicates. Of course,
-               # one page could have its job popped when the other page's job is still
-               # buried within the logic of a refreshLinks2 job.
-               $jobs = array();
-               foreach ( $titles as $title ) {
-                       $jobs[] = new RefreshLinksJob( $title,
-                               array( 'masterPos' => $masterPos ) + $this->getRootJobParams()
-                       ); // carry over information for de-duplication
-               }
-               return $jobs;
-       }
-
-       /**
-        * @return Array
-        */
-       public function getDeduplicationInfo() {
-               $info = parent::getDeduplicationInfo();
-               // Don't let highly unique "masterPos" values ruin duplicate detection
-               if ( is_array( $info['params'] ) ) {
-                       unset( $info['params']['masterPos'] );
-               }
-               return $info;
-       }
-}
diff --git a/includes/job/jobs/UploadFromUrlJob.php b/includes/job/jobs/UploadFromUrlJob.php
deleted file mode 100644 (file)
index 2cdac57..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-<?php
-/**
- * Job for asynchronous upload-by-url.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup JobQueue
- */
-
-/**
- * Job for asynchronous upload-by-url.
- *
- * This job is in fact an interface to UploadFromUrl, which is designed such
- * that it does not require any globals. If it does, fix it elsewhere, do not
- * add globals in here.
- *
- * @ingroup JobQueue
- */
-class UploadFromUrlJob extends Job {
-       const SESSION_KEYNAME = 'wsUploadFromUrlJobData';
-
-       /** @var UploadFromUrl */
-       public $upload;
-
-       /** @var User */
-       protected $user;
-
-       public function __construct( $title, $params ) {
-               parent::__construct( 'uploadFromUrl', $title, $params );
-       }
-
-       public function run() {
-               global $wgCopyUploadAsyncTimeout;
-               # Initialize this object and the upload object
-               $this->upload = new UploadFromUrl();
-               $this->upload->initialize(
-                       $this->title->getText(),
-                       $this->params['url'],
-                       false
-               );
-               $this->user = User::newFromName( $this->params['userName'] );
-
-               # Fetch the file
-               $opts = array();
-               if ( $wgCopyUploadAsyncTimeout ) {
-                       $opts['timeout'] = $wgCopyUploadAsyncTimeout;
-               }
-               $status = $this->upload->fetchFile( $opts );
-               if ( !$status->isOk() ) {
-                       $this->leaveMessage( $status );
-
-                       return true;
-               }
-
-               # Verify upload
-               $result = $this->upload->verifyUpload();
-               if ( $result['status'] != UploadBase::OK ) {
-                       $status = $this->upload->convertVerifyErrorToStatus( $result );
-                       $this->leaveMessage( $status );
-
-                       return true;
-               }
-
-               # Check warnings
-               if ( !$this->params['ignoreWarnings'] ) {
-                       $warnings = $this->upload->checkWarnings();
-                       if ( $warnings ) {
-
-                               # Stash the upload
-                               $key = $this->upload->stashFile();
-
-                               // @todo FIXME: This has been broken for a while.
-                               // User::leaveUserMessage() does not exist.
-                               if ( $this->params['leaveMessage'] ) {
-                                       $this->user->leaveUserMessage(
-                                               wfMessage( 'upload-warning-subj' )->text(),
-                                               wfMessage( 'upload-warning-msg',
-                                                       $key,
-                                                       $this->params['url'] )->text()
-                                       );
-                               } else {
-                                       wfSetupSession( $this->params['sessionId'] );
-                                       $this->storeResultInSession( 'Warning',
-                                               'warnings', $warnings );
-                                       session_write_close();
-                               }
-
-                               return true;
-                       }
-               }
-
-               # Perform the upload
-               $status = $this->upload->performUpload(
-                       $this->params['comment'],
-                       $this->params['pageText'],
-                       $this->params['watch'],
-                       $this->user
-               );
-               $this->leaveMessage( $status );
-
-               return true;
-       }
-
-       /**
-        * Leave a message on the user talk page or in the session according to
-        * $params['leaveMessage'].
-        *
-        * @param Status $status
-        */
-       protected function leaveMessage( $status ) {
-               if ( $this->params['leaveMessage'] ) {
-                       if ( $status->isGood() ) {
-                               // @todo FIXME: user->leaveUserMessage does not exist.
-                               $this->user->leaveUserMessage( wfMessage( 'upload-success-subj' )->text(),
-                                       wfMessage( 'upload-success-msg',
-                                               $this->upload->getTitle()->getText(),
-                                               $this->params['url']
-                                       )->text() );
-                       } else {
-                               // @todo FIXME: user->leaveUserMessage does not exist.
-                               $this->user->leaveUserMessage( wfMessage( 'upload-failure-subj' )->text(),
-                                       wfMessage( 'upload-failure-msg',
-                                               $status->getWikiText(),
-                                               $this->params['url']
-                                       )->text() );
-                       }
-               } else {
-                       wfSetupSession( $this->params['sessionId'] );
-                       if ( $status->isOk() ) {
-                               $this->storeResultInSession( 'Success',
-                                       'filename', $this->upload->getLocalFile()->getName() );
-                       } else {
-                               $this->storeResultInSession( 'Failure',
-                                       'errors', $status->getErrorsArray() );
-                       }
-                       session_write_close();
-               }
-       }
-
-       /**
-        * Store a result in the session data. Note that the caller is responsible
-        * for appropriate session_start and session_write_close calls.
-        *
-        * @param string $result the result (Success|Warning|Failure)
-        * @param string $dataKey the key of the extra data
-        * @param mixed $dataValue The extra data itself
-        */
-       protected function storeResultInSession( $result, $dataKey, $dataValue ) {
-               $session =& self::getSessionData( $this->params['sessionKey'] );
-               $session['result'] = $result;
-               $session[$dataKey] = $dataValue;
-       }
-
-       /**
-        * Initialize the session data. Sets the intial result to queued.
-        */
-       public function initializeSessionData() {
-               $session =& self::getSessionData( $this->params['sessionKey'] );
-               $$session['result'] = 'Queued';
-       }
-
-       /**
-        * @param $key
-        * @return mixed
-        */
-       public static function &getSessionData( $key ) {
-               if ( !isset( $_SESSION[self::SESSION_KEYNAME][$key] ) ) {
-                       $_SESSION[self::SESSION_KEYNAME][$key] = array();
-               }
-
-               return $_SESSION[self::SESSION_KEYNAME][$key];
-       }
-}
diff --git a/includes/job/utils/BacklinkJobUtils.php b/includes/job/utils/BacklinkJobUtils.php
deleted file mode 100644 (file)
index c8e5df6..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-/**
- * Job to update links for a given title.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup JobQueue
- * @author Aaron Schulz
- */
-
-/**
- * Class with Backlink related Job helper methods
- *
- * @ingroup JobQueue
- * @since 1.23
- */
-class BacklinkJobUtils {
-       /**
-        * Break down $job into approximately ($bSize/$cSize) leaf jobs and a single partition
-        * job that covers the remaining backlink range (if needed). Jobs for the first $bSize
-        * titles are collated ($cSize per job) into leaf jobs to do actual work. All the
-        * resulting jobs are of the same class as $job. No partition job is returned if the
-        * range covered by $job was less than $bSize, as the leaf jobs have full coverage.
-        *
-        * The leaf jobs have the 'pages' param set to a (<page ID>:(<namespace>,<DB key>),...)
-        * map so that the run() function knows what pages to act on. The leaf jobs will keep
-        * the same job title as the parent job (e.g. $job).
-        *
-        * The partition jobs have the 'range' parameter set to a map of the format
-        * (start:<integer>, end:<integer>, batchSize:<integer>, subranges:((<start>,<end>),...)),
-        * the 'table' parameter set to that of $job, and the 'recursive' parameter set to true.
-        * This method can be called on the resulting job to repeat the process again.
-        *
-        * The job provided ($job) must have the 'recursive' parameter set to true and the 'table'
-        * parameter must be set to a backlink table. The job title will be used as the title to
-        * find backlinks for. Any 'range' parameter must follow the same format as mentioned above.
-        * This should be managed by recursive calls to this method.
-        *
-        * The first jobs return are always the leaf jobs. This lets the caller use push() to
-        * put them directly into the queue and works well if the queue is FIFO. In such a queue,
-        * the leaf jobs have to get finished first before anything can resolve the next partition
-        * job, which keeps the queue very small.
-        *
-        * $opts includes:
-        *   - params : extra job parameters to include in each job
-        *
-        * @param Job $job
-        * @param int $bSize BacklinkCache partition size; usually $wgUpdateRowsPerJob
-        * @param int $cSize Max titles per leaf job; Usually 1 or a modest value
-        * @param array $opts Optional parameter map
-        * @return Job[] List of Job objects
-        */
-       public static function partitionBacklinkJob( Job $job, $bSize, $cSize, $opts = array() ) {
-               $class = get_class( $job );
-               $title = $job->getTitle();
-               $params = $job->getParams();
-
-               if ( isset( $params['pages'] ) || empty( $params['recursive'] ) ) {
-                       $ranges = array(); // sanity; this is a leaf node
-                       wfWarn( __METHOD__ . " called on {$job->getType()} leaf job (explosive recursion)." );
-               } elseif ( isset( $params['range'] ) ) {
-                       // This is a range job to trigger the insertion of partitioned/title jobs...
-                       $ranges = $params['range']['subranges'];
-                       $realBSize = $params['range']['batchSize'];
-               } else {
-                       // This is a base job to trigger the insertion of partitioned jobs...
-                       $ranges = $title->getBacklinkCache()->partition( $params['table'], $bSize );
-                       $realBSize = $bSize;
-               }
-
-               $extraParams = isset( $opts['params'] ) ? $opts['params'] : array();
-
-               $jobs = array();
-               // Combine the first range (of size $bSize) backlinks into leaf jobs
-               if ( isset( $ranges[0] ) ) {
-                       list( $start, $end ) = $ranges[0];
-                       $titles = $title->getBacklinkCache()->getLinks( $params['table'], $start, $end );
-                       foreach ( array_chunk( iterator_to_array( $titles ), $cSize ) as $titleBatch ) {
-                               $pages = array();
-                               foreach ( $titleBatch as $tl ) {
-                                       $pages[$tl->getArticleId()] = array( $tl->getNamespace(), $tl->getDBKey() );
-                               }
-                               $jobs[] = new $class(
-                                       $title, // maintain parent job title
-                                       array( 'pages' => $pages ) + $extraParams
-                               );
-                       }
-               }
-               // Take all of the remaining ranges and build a partition job from it
-               if ( isset( $ranges[1] ) ) {
-                       $jobs[] = new $class(
-                               $title, // maintain parent job title
-                               array(
-                                       'recursive'     => true,
-                                       'table'         => $params['table'],
-                                       'range'         => array(
-                                               'start'     => $ranges[1][0],
-                                               'end'       => $ranges[count( $ranges ) - 1][1],
-                                               'batchSize' => $realBSize,
-                                               'subranges' => array_slice( $ranges, 1 )
-                                       ),
-                               ) + $extraParams
-                       );
-               }
-
-               return $jobs;
-       }
-}
diff --git a/includes/jobqueue/Job.php b/includes/jobqueue/Job.php
new file mode 100644 (file)
index 0000000..5fc1e06
--- /dev/null
@@ -0,0 +1,330 @@
+<?php
+/**
+ * Job queue task base code.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @defgroup JobQueue JobQueue
+ */
+
+/**
+ * Class to both describe a background job and handle jobs.
+ * The queue aspects of this class are now deprecated.
+ * Using the class to push jobs onto queues is deprecated (use JobSpecification).
+ *
+ * @ingroup JobQueue
+ */
+abstract class Job implements IJobSpecification {
+       /** @var string */
+       public $command;
+
+       /** @var array|bool Array of job parameters or false if none */
+       public $params;
+
+       /** @var array Additional queue metadata */
+       public $metadata = array();
+
+       /** @var Title */
+       protected $title;
+
+       /** @var bool Expensive jobs may set this to true */
+       protected $removeDuplicates;
+
+       /** @var string Text for error that occurred last */
+       protected $error;
+
+       /*-------------------------------------------------------------------------
+        * Abstract functions
+        *------------------------------------------------------------------------*/
+
+       /**
+        * Run the job
+        * @return bool Success
+        */
+       abstract public function run();
+
+       /*-------------------------------------------------------------------------
+        * Static functions
+        *------------------------------------------------------------------------*/
+
+       /**
+        * Create the appropriate object to handle a specific job
+        *
+        * @param string $command Job command
+        * @param Title $title Associated title
+        * @param array|bool $params Job parameters
+        * @throws MWException
+        * @return Job
+        */
+       public static function factory( $command, Title $title, $params = false ) {
+               global $wgJobClasses;
+               if ( isset( $wgJobClasses[$command] ) ) {
+                       $class = $wgJobClasses[$command];
+
+                       return new $class( $title, $params );
+               }
+               throw new MWException( "Invalid job command `{$command}`" );
+       }
+
+       /**
+        * Batch-insert a group of jobs into the queue.
+        * This will be wrapped in a transaction with a forced commit.
+        *
+        * This may add duplicate at insert time, but they will be
+        * removed later on, when the first one is popped.
+        *
+        * @param array $jobs of Job objects
+        * @return bool
+        * @deprecated since 1.21
+        */
+       public static function batchInsert( $jobs ) {
+               return JobQueueGroup::singleton()->push( $jobs );
+       }
+
+       /**
+        * Insert a group of jobs into the queue.
+        *
+        * Same as batchInsert() but does not commit and can thus
+        * be rolled-back as part of a larger transaction. However,
+        * large batches of jobs can cause slave lag.
+        *
+        * @param array $jobs of Job objects
+        * @return bool
+        * @deprecated since 1.21
+        */
+       public static function safeBatchInsert( $jobs ) {
+               return JobQueueGroup::singleton()->push( $jobs, JobQueue::QOS_ATOMIC );
+       }
+
+       /**
+        * Pop a job of a certain type.  This tries less hard than pop() to
+        * actually find a job; it may be adversely affected by concurrent job
+        * runners.
+        *
+        * @param $type string
+        * @return Job|bool Returns false if there are no jobs
+        * @deprecated since 1.21
+        */
+       public static function pop_type( $type ) {
+               return JobQueueGroup::singleton()->get( $type )->pop();
+       }
+
+       /**
+        * Pop a job off the front of the queue.
+        * This is subject to $wgJobTypesExcludedFromDefaultQueue.
+        *
+        * @return Job|bool False if there are no jobs
+        * @deprecated since 1.21
+        */
+       public static function pop() {
+               return JobQueueGroup::singleton()->pop();
+       }
+
+       /*-------------------------------------------------------------------------
+        * Non-static functions
+        *------------------------------------------------------------------------*/
+
+       /**
+        * @param $command
+        * @param $title
+        * @param $params array|bool
+        */
+       public function __construct( $command, $title, $params = false ) {
+               $this->command = $command;
+               $this->title = $title;
+               $this->params = $params;
+
+               // expensive jobs may set this to true
+               $this->removeDuplicates = false;
+       }
+
+       /**
+        * @return string
+        */
+       public function getType() {
+               return $this->command;
+       }
+
+       /**
+        * @return Title
+        */
+       public function getTitle() {
+               return $this->title;
+       }
+
+       /**
+        * @return array
+        */
+       public function getParams() {
+               return $this->params;
+       }
+
+       /**
+        * @return int|null UNIX timestamp to delay running this job until, otherwise null
+        * @since 1.22
+        */
+       public function getReleaseTimestamp() {
+               return isset( $this->params['jobReleaseTimestamp'] )
+                       ? wfTimestampOrNull( TS_UNIX, $this->params['jobReleaseTimestamp'] )
+                       : null;
+       }
+
+       /**
+        * @return bool Whether only one of each identical set of jobs should be run
+        */
+       public function ignoreDuplicates() {
+               return $this->removeDuplicates;
+       }
+
+       /**
+        * @return bool Whether this job can be retried on failure by job runners
+        * @since 1.21
+        */
+       public function allowRetries() {
+               return true;
+       }
+
+       /**
+        * @return integer Number of actually "work items" handled in this job
+        * @see $wgJobBackoffThrottling
+        * @since 1.23
+        */
+       public function workItemCount() {
+               return 1;
+       }
+
+       /**
+        * Subclasses may need to override this to make duplication detection work.
+        * The resulting map conveys everything that makes the job unique. This is
+        * only checked if ignoreDuplicates() returns true, meaning that duplicate
+        * jobs are supposed to be ignored.
+        *
+        * @return array Map of key/values
+        * @since 1.21
+        */
+       public function getDeduplicationInfo() {
+               $info = array(
+                       'type' => $this->getType(),
+                       'namespace' => $this->getTitle()->getNamespace(),
+                       'title' => $this->getTitle()->getDBkey(),
+                       'params' => $this->getParams()
+               );
+               if ( is_array( $info['params'] ) ) {
+                       // Identical jobs with different "root" jobs should count as duplicates
+                       unset( $info['params']['rootJobSignature'] );
+                       unset( $info['params']['rootJobTimestamp'] );
+                       // Likewise for jobs with different delay times
+                       unset( $info['params']['jobReleaseTimestamp'] );
+               }
+
+               return $info;
+       }
+
+       /**
+        * @see JobQueue::deduplicateRootJob()
+        * @param string $key A key that identifies the task
+        * @return array Map of:
+        *   - rootJobSignature : hash (e.g. SHA1) that identifies the task
+        *   - rootJobTimestamp : TS_MW timestamp of this instance of the task
+        * @since 1.21
+        */
+       public static function newRootJobParams( $key ) {
+               return array(
+                       'rootJobSignature' => sha1( $key ),
+                       'rootJobTimestamp' => wfTimestampNow()
+               );
+       }
+
+       /**
+        * @see JobQueue::deduplicateRootJob()
+        * @return array
+        * @since 1.21
+        */
+       public function getRootJobParams() {
+               return array(
+                       'rootJobSignature' => isset( $this->params['rootJobSignature'] )
+                               ? $this->params['rootJobSignature']
+                               : null,
+                       'rootJobTimestamp' => isset( $this->params['rootJobTimestamp'] )
+                               ? $this->params['rootJobTimestamp']
+                               : null
+               );
+       }
+
+       /**
+        * @see JobQueue::deduplicateRootJob()
+        * @return bool
+        * @since 1.22
+        */
+       public function hasRootJobParams() {
+               return isset( $this->params['rootJobSignature'] )
+                       && isset( $this->params['rootJobTimestamp'] );
+       }
+
+       /**
+        * Insert a single job into the queue.
+        * @return bool true on success
+        * @deprecated since 1.21
+        */
+       public function insert() {
+               return JobQueueGroup::singleton()->push( $this );
+       }
+
+       /**
+        * @return string
+        */
+       public function toString() {
+               $paramString = '';
+               if ( $this->params ) {
+                       foreach ( $this->params as $key => $value ) {
+                               if ( $paramString != '' ) {
+                                       $paramString .= ' ';
+                               }
+                               if ( is_array( $value ) ) {
+                                       $value = "array(" . count( $value ) . ")";
+                               } elseif ( is_object( $value ) && !method_exists( $value, '__toString' ) ) {
+                                       $value = "object(" . get_class( $value ) . ")";
+                               }
+                               $value = (string)$value;
+                               if ( mb_strlen( $value ) > 1024 ) {
+                                       $value = "string(" . mb_strlen( $value ) . ")";
+                               }
+
+                               $paramString .= "$key=$value";
+                       }
+               }
+
+               if ( is_object( $this->title ) ) {
+                       $s = "{$this->command} " . $this->title->getPrefixedDBkey();
+                       if ( $paramString !== '' ) {
+                               $s .= ' ' . $paramString;
+                       }
+
+                       return $s;
+               } else {
+                       return "{$this->command} $paramString";
+               }
+       }
+
+       protected function setLastError( $error ) {
+               $this->error = $error;
+       }
+
+       public function getLastError() {
+               return $this->error;
+       }
+}
diff --git a/includes/jobqueue/JobQueue.php b/includes/jobqueue/JobQueue.php
new file mode 100644 (file)
index 0000000..a537861
--- /dev/null
@@ -0,0 +1,745 @@
+<?php
+/**
+ * Job queue base code.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @defgroup JobQueue JobQueue
+ * @author Aaron Schulz
+ */
+
+/**
+ * Class to handle enqueueing and running of background jobs
+ *
+ * @ingroup JobQueue
+ * @since 1.21
+ */
+abstract class JobQueue {
+       /** @var string Wiki ID */
+       protected $wiki;
+
+       /** @var string Job type */
+       protected $type;
+
+       /** @var string Job priority for pop() */
+       protected $order;
+
+       /** @var int Time to live in seconds */
+       protected $claimTTL;
+
+       /** @var int Maximum number of times to try a job */
+       protected $maxTries;
+
+       /** @var bool Allow delayed jobs */
+       protected $checkDelay;
+
+       /** @var BagOStuff */
+       protected $dupCache;
+
+       const QOS_ATOMIC = 1; // integer; "all-or-nothing" job insertions
+
+       const ROOTJOB_TTL = 2419200; // integer; seconds to remember root jobs (28 days)
+
+       /**
+        * @param array $params
+        * @throws MWException
+        */
+       protected function __construct( array $params ) {
+               $this->wiki = $params['wiki'];
+               $this->type = $params['type'];
+               $this->claimTTL = isset( $params['claimTTL'] ) ? $params['claimTTL'] : 0;
+               $this->maxTries = isset( $params['maxTries'] ) ? $params['maxTries'] : 3;
+               if ( isset( $params['order'] ) && $params['order'] !== 'any' ) {
+                       $this->order = $params['order'];
+               } else {
+                       $this->order = $this->optimalOrder();
+               }
+               if ( !in_array( $this->order, $this->supportedOrders() ) ) {
+                       throw new MWException( __CLASS__ . " does not support '{$this->order}' order." );
+               }
+               $this->checkDelay = !empty( $params['checkDelay'] );
+               if ( $this->checkDelay && !$this->supportsDelayedJobs() ) {
+                       throw new MWException( __CLASS__ . " does not support delayed jobs." );
+               }
+               $this->dupCache = wfGetCache( CACHE_ANYTHING );
+       }
+
+       /**
+        * Get a job queue object of the specified type.
+        * $params includes:
+        *   - class      : What job class to use (determines job type)
+        *   - wiki       : wiki ID of the wiki the jobs are for (defaults to current wiki)
+        *   - type       : The name of the job types this queue handles
+        *   - order      : Order that pop() selects jobs, one of "fifo", "timestamp" or "random".
+        *                  If "fifo" is used, the queue will effectively be FIFO. Note that job
+        *                  completion will not appear to be exactly FIFO if there are multiple
+        *                  job runners since jobs can take different times to finish once popped.
+        *                  If "timestamp" is used, the queue will at least be loosely ordered
+        *                  by timestamp, allowing for some jobs to be popped off out of order.
+        *                  If "random" is used, pop() will pick jobs in random order.
+        *                  Note that it may only be weakly random (e.g. a lottery of the oldest X).
+        *                  If "any" is choosen, the queue will use whatever order is the fastest.
+        *                  This might be useful for improving concurrency for job acquisition.
+        *   - claimTTL   : If supported, the queue will recycle jobs that have been popped
+        *                  but not acknowledged as completed after this many seconds. Recycling
+        *                  of jobs simple means re-inserting them into the queue. Jobs can be
+        *                  attempted up to three times before being discarded.
+        *   - checkDelay : If supported, respect Job::getReleaseTimestamp() in the push functions.
+        *                  This lets delayed jobs wait in a staging area until a given timestamp is
+        *                  reached, at which point they will enter the queue. If this is not enabled
+        *                  or not supported, an exception will be thrown on delayed job insertion.
+        *
+        * Queue classes should throw an exception if they do not support the options given.
+        *
+        * @param array $params
+        * @return JobQueue
+        * @throws MWException
+        */
+       final public static function factory( array $params ) {
+               $class = $params['class'];
+               if ( !class_exists( $class ) ) {
+                       throw new MWException( "Invalid job queue class '$class'." );
+               }
+               $obj = new $class( $params );
+               if ( !( $obj instanceof self ) ) {
+                       throw new MWException( "Class '$class' is not a " . __CLASS__ . " class." );
+               }
+
+               return $obj;
+       }
+
+       /**
+        * @return string Wiki ID
+        */
+       final public function getWiki() {
+               return $this->wiki;
+       }
+
+       /**
+        * @return string Job type that this queue handles
+        */
+       final public function getType() {
+               return $this->type;
+       }
+
+       /**
+        * @return string One of (random, timestamp, fifo, undefined)
+        */
+       final public function getOrder() {
+               return $this->order;
+       }
+
+       /**
+        * @return bool Whether delayed jobs are enabled
+        * @since 1.22
+        */
+       final public function delayedJobsEnabled() {
+               return $this->checkDelay;
+       }
+
+       /**
+        * Get the allowed queue orders for configuration validation
+        *
+        * @return array Subset of (random, timestamp, fifo, undefined)
+        */
+       abstract protected function supportedOrders();
+
+       /**
+        * Get the default queue order to use if configuration does not specify one
+        *
+        * @return string One of (random, timestamp, fifo, undefined)
+        */
+       abstract protected function optimalOrder();
+
+       /**
+        * Find out if delayed jobs are supported for configuration validation
+        *
+        * @return bool Whether delayed jobs are supported
+        */
+       protected function supportsDelayedJobs() {
+               return false; // not implemented
+       }
+
+       /**
+        * Quickly check if the queue has no available (unacquired, non-delayed) jobs.
+        * Queue classes should use caching if they are any slower without memcached.
+        *
+        * If caching is used, this might return false when there are actually no jobs.
+        * If pop() is called and returns false then it should correct the cache. Also,
+        * calling flushCaches() first prevents this. However, this affect is typically
+        * not distinguishable from the race condition between isEmpty() and pop().
+        *
+        * @return bool
+        * @throws JobQueueError
+        */
+       final public function isEmpty() {
+               wfProfileIn( __METHOD__ );
+               $res = $this->doIsEmpty();
+               wfProfileOut( __METHOD__ );
+
+               return $res;
+       }
+
+       /**
+        * @see JobQueue::isEmpty()
+        * @return bool
+        */
+       abstract protected function doIsEmpty();
+
+       /**
+        * Get the number of available (unacquired, non-delayed) jobs in the queue.
+        * Queue classes should use caching if they are any slower without memcached.
+        *
+        * If caching is used, this number might be out of date for a minute.
+        *
+        * @return int
+        * @throws JobQueueError
+        */
+       final public function getSize() {
+               wfProfileIn( __METHOD__ );
+               $res = $this->doGetSize();
+               wfProfileOut( __METHOD__ );
+
+               return $res;
+       }
+
+       /**
+        * @see JobQueue::getSize()
+        * @return int
+        */
+       abstract protected function doGetSize();
+
+       /**
+        * Get the number of acquired jobs (these are temporarily out of the queue).
+        * Queue classes should use caching if they are any slower without memcached.
+        *
+        * If caching is used, this number might be out of date for a minute.
+        *
+        * @return int
+        * @throws JobQueueError
+        */
+       final public function getAcquiredCount() {
+               wfProfileIn( __METHOD__ );
+               $res = $this->doGetAcquiredCount();
+               wfProfileOut( __METHOD__ );
+
+               return $res;
+       }
+
+       /**
+        * @see JobQueue::getAcquiredCount()
+        * @return int
+        */
+       abstract protected function doGetAcquiredCount();
+
+       /**
+        * Get the number of delayed jobs (these are temporarily out of the queue).
+        * Queue classes should use caching if they are any slower without memcached.
+        *
+        * If caching is used, this number might be out of date for a minute.
+        *
+        * @return int
+        * @throws JobQueueError
+        * @since 1.22
+        */
+       final public function getDelayedCount() {
+               wfProfileIn( __METHOD__ );
+               $res = $this->doGetDelayedCount();
+               wfProfileOut( __METHOD__ );
+
+               return $res;
+       }
+
+       /**
+        * @see JobQueue::getDelayedCount()
+        * @return int
+        */
+       protected function doGetDelayedCount() {
+               return 0; // not implemented
+       }
+
+       /**
+        * Get the number of acquired jobs that can no longer be attempted.
+        * Queue classes should use caching if they are any slower without memcached.
+        *
+        * If caching is used, this number might be out of date for a minute.
+        *
+        * @return int
+        * @throws JobQueueError
+        */
+       final public function getAbandonedCount() {
+               wfProfileIn( __METHOD__ );
+               $res = $this->doGetAbandonedCount();
+               wfProfileOut( __METHOD__ );
+
+               return $res;
+       }
+
+       /**
+        * @see JobQueue::getAbandonedCount()
+        * @return int
+        */
+       protected function doGetAbandonedCount() {
+               return 0; // not implemented
+       }
+
+       /**
+        * Push one or more jobs into the queue.
+        * This does not require $wgJobClasses to be set for the given job type.
+        * Outside callers should use JobQueueGroup::push() instead of this function.
+        *
+        * @param Job|array $jobs A single job or an array of Jobs
+        * @param int $flags Bitfield (supports JobQueue::QOS_ATOMIC)
+        * @return bool Returns false on failure
+        * @throws JobQueueError
+        */
+       final public function push( $jobs, $flags = 0 ) {
+               return $this->batchPush( is_array( $jobs ) ? $jobs : array( $jobs ), $flags );
+       }
+
+       /**
+        * Push a batch of jobs into the queue.
+        * This does not require $wgJobClasses to be set for the given job type.
+        * Outside callers should use JobQueueGroup::push() instead of this function.
+        *
+        * @param array $jobs List of Jobs
+        * @param int $flags Bitfield (supports JobQueue::QOS_ATOMIC)
+        * @throws MWException
+        * @return bool Returns false on failure
+        */
+       final public function batchPush( array $jobs, $flags = 0 ) {
+               if ( !count( $jobs ) ) {
+                       return true; // nothing to do
+               }
+
+               foreach ( $jobs as $job ) {
+                       if ( $job->getType() !== $this->type ) {
+                               throw new MWException(
+                                       "Got '{$job->getType()}' job; expected a '{$this->type}' job." );
+                       } elseif ( $job->getReleaseTimestamp() && !$this->checkDelay ) {
+                               throw new MWException(
+                                       "Got delayed '{$job->getType()}' job; delays are not supported." );
+                       }
+               }
+
+               wfProfileIn( __METHOD__ );
+               $ok = $this->doBatchPush( $jobs, $flags );
+               wfProfileOut( __METHOD__ );
+
+               return $ok;
+       }
+
+       /**
+        * @see JobQueue::batchPush()
+        * @param array $jobs
+        * @param $flags
+        * @return bool
+        */
+       abstract protected function doBatchPush( array $jobs, $flags );
+
+       /**
+        * Pop a job off of the queue.
+        * This requires $wgJobClasses to be set for the given job type.
+        * Outside callers should use JobQueueGroup::pop() instead of this function.
+        *
+        * @throws MWException
+        * @return Job|bool Returns false if there are no jobs
+        */
+       final public function pop() {
+               global $wgJobClasses;
+
+               if ( $this->wiki !== wfWikiID() ) {
+                       throw new MWException( "Cannot pop '{$this->type}' job off foreign wiki queue." );
+               } elseif ( !isset( $wgJobClasses[$this->type] ) ) {
+                       // Do not pop jobs if there is no class for the queue type
+                       throw new MWException( "Unrecognized job type '{$this->type}'." );
+               }
+
+               wfProfileIn( __METHOD__ );
+               $job = $this->doPop();
+               wfProfileOut( __METHOD__ );
+
+               // Flag this job as an old duplicate based on its "root" job...
+               try {
+                       if ( $job && $this->isRootJobOldDuplicate( $job ) ) {
+                               JobQueue::incrStats( 'job-pop-duplicate', $this->type );
+                               $job = DuplicateJob::newFromJob( $job ); // convert to a no-op
+                       }
+               } catch ( MWException $e ) {
+                       // don't lose jobs over this
+               }
+
+               return $job;
+       }
+
+       /**
+        * @see JobQueue::pop()
+        * @return Job
+        */
+       abstract protected function doPop();
+
+       /**
+        * Acknowledge that a job was completed.
+        *
+        * This does nothing for certain queue classes or if "claimTTL" is not set.
+        * Outside callers should use JobQueueGroup::ack() instead of this function.
+        *
+        * @param Job $job
+        * @throws MWException
+        * @return bool
+        */
+       final public function ack( Job $job ) {
+               if ( $job->getType() !== $this->type ) {
+                       throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
+               }
+               wfProfileIn( __METHOD__ );
+               $ok = $this->doAck( $job );
+               wfProfileOut( __METHOD__ );
+
+               return $ok;
+       }
+
+       /**
+        * @see JobQueue::ack()
+        * @param Job $job
+        * @return bool
+        */
+       abstract protected function doAck( Job $job );
+
+       /**
+        * Register the "root job" of a given job into the queue for de-duplication.
+        * This should only be called right *after* all the new jobs have been inserted.
+        * This is used to turn older, duplicate, job entries into no-ops. The root job
+        * information will remain in the registry until it simply falls out of cache.
+        *
+        * This requires that $job has two special fields in the "params" array:
+        *   - rootJobSignature : hash (e.g. SHA1) that identifies the task
+        *   - rootJobTimestamp : TS_MW timestamp of this instance of the task
+        *
+        * A "root job" is a conceptual job that consist of potentially many smaller jobs
+        * that are actually inserted into the queue. For example, "refreshLinks" jobs are
+        * spawned when a template is edited. One can think of the task as "update links
+        * of pages that use template X" and an instance of that task as a "root job".
+        * However, what actually goes into the queue are range and leaf job subtypes.
+        * Since these jobs include things like page ID ranges and DB master positions,
+        * and can morph into smaller jobs recursively, simple duplicate detection
+        * for individual jobs being identical (like that of job_sha1) is not useful.
+        *
+        * In the case of "refreshLinks", if these jobs are still in the queue when the template
+        * is edited again, we want all of these old refreshLinks jobs for that template to become
+        * no-ops. This can greatly reduce server load, since refreshLinks jobs involves parsing.
+        * Essentially, the new batch of jobs belong to a new "root job" and the older ones to a
+        * previous "root job" for the same task of "update links of pages that use template X".
+        *
+        * This does nothing for certain queue classes.
+        *
+        * @param Job $job
+        * @throws MWException
+        * @return bool
+        */
+       final public function deduplicateRootJob( Job $job ) {
+               if ( $job->getType() !== $this->type ) {
+                       throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
+               }
+               wfProfileIn( __METHOD__ );
+               $ok = $this->doDeduplicateRootJob( $job );
+               wfProfileOut( __METHOD__ );
+
+               return $ok;
+       }
+
+       /**
+        * @see JobQueue::deduplicateRootJob()
+        * @param Job $job
+        * @throws MWException
+        * @return bool
+        */
+       protected function doDeduplicateRootJob( Job $job ) {
+               if ( !$job->hasRootJobParams() ) {
+                       throw new MWException( "Cannot register root job; missing parameters." );
+               }
+               $params = $job->getRootJobParams();
+
+               $key = $this->getRootJobCacheKey( $params['rootJobSignature'] );
+               // Callers should call batchInsert() and then this function so that if the insert
+               // fails, the de-duplication registration will be aborted. Since the insert is
+               // deferred till "transaction idle", do the same here, so that the ordering is
+               // maintained. Having only the de-duplication registration succeed would cause
+               // jobs to become no-ops without any actual jobs that made them redundant.
+               $timestamp = $this->dupCache->get( $key ); // current last timestamp of this job
+               if ( $timestamp && $timestamp >= $params['rootJobTimestamp'] ) {
+                       return true; // a newer version of this root job was enqueued
+               }
+
+               // Update the timestamp of the last root job started at the location...
+               return $this->dupCache->set( $key, $params['rootJobTimestamp'], JobQueueDB::ROOTJOB_TTL );
+       }
+
+       /**
+        * Check if the "root" job of a given job has been superseded by a newer one
+        *
+        * @param Job $job
+        * @throws MWException
+        * @return bool
+        */
+       final protected function isRootJobOldDuplicate( Job $job ) {
+               if ( $job->getType() !== $this->type ) {
+                       throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
+               }
+               wfProfileIn( __METHOD__ );
+               $isDuplicate = $this->doIsRootJobOldDuplicate( $job );
+               wfProfileOut( __METHOD__ );
+
+               return $isDuplicate;
+       }
+
+       /**
+        * @see JobQueue::isRootJobOldDuplicate()
+        * @param Job $job
+        * @return bool
+        */
+       protected function doIsRootJobOldDuplicate( Job $job ) {
+               if ( !$job->hasRootJobParams() ) {
+                       return false; // job has no de-deplication info
+               }
+               $params = $job->getRootJobParams();
+
+               $key = $this->getRootJobCacheKey( $params['rootJobSignature'] );
+               // Get the last time this root job was enqueued
+               $timestamp = $this->dupCache->get( $key );
+
+               // Check if a new root job was started at the location after this one's...
+               return ( $timestamp && $timestamp > $params['rootJobTimestamp'] );
+       }
+
+       /**
+        * @param string $signature Hash identifier of the root job
+        * @return string
+        */
+       protected function getRootJobCacheKey( $signature ) {
+               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
+
+               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, 'rootjob', $signature );
+       }
+
+       /**
+        * Deleted all unclaimed and delayed jobs from the queue
+        *
+        * @return bool Success
+        * @throws JobQueueError
+        * @since 1.22
+        */
+       final public function delete() {
+               wfProfileIn( __METHOD__ );
+               $res = $this->doDelete();
+               wfProfileOut( __METHOD__ );
+
+               return $res;
+       }
+
+       /**
+        * @see JobQueue::delete()
+        * @throws MWException
+        * @return bool Success
+        */
+       protected function doDelete() {
+               throw new MWException( "This method is not implemented." );
+       }
+
+       /**
+        * Wait for any slaves or backup servers to catch up.
+        *
+        * This does nothing for certain queue classes.
+        *
+        * @return void
+        * @throws JobQueueError
+        */
+       final public function waitForBackups() {
+               wfProfileIn( __METHOD__ );
+               $this->doWaitForBackups();
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * @see JobQueue::waitForBackups()
+        * @return void
+        */
+       protected function doWaitForBackups() {
+       }
+
+       /**
+        * Return a map of task names to task definition maps.
+        * A "task" is a fast periodic queue maintenance action.
+        * Mutually exclusive tasks must implement their own locking in the callback.
+        *
+        * Each task value is an associative array with:
+        *   - name     : the name of the task
+        *   - callback : a PHP callable that performs the task
+        *   - period   : the period in seconds corresponding to the task frequency
+        *
+        * @return array
+        */
+       final public function getPeriodicTasks() {
+               $tasks = $this->doGetPeriodicTasks();
+               foreach ( $tasks as $name => &$def ) {
+                       $def['name'] = $name;
+               }
+
+               return $tasks;
+       }
+
+       /**
+        * @see JobQueue::getPeriodicTasks()
+        * @return array
+        */
+       protected function doGetPeriodicTasks() {
+               return array();
+       }
+
+       /**
+        * Clear any process and persistent caches
+        *
+        * @return void
+        */
+       final public function flushCaches() {
+               wfProfileIn( __METHOD__ );
+               $this->doFlushCaches();
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * @see JobQueue::flushCaches()
+        * @return void
+        */
+       protected function doFlushCaches() {
+       }
+
+       /**
+        * Get an iterator to traverse over all available jobs in this queue.
+        * This does not include jobs that are currently acquired or delayed.
+        * Note: results may be stale if the queue is concurrently modified.
+        *
+        * @return Iterator
+        * @throws JobQueueError
+        */
+       abstract public function getAllQueuedJobs();
+
+       /**
+        * Get an iterator to traverse over all delayed jobs in this queue.
+        * Note: results may be stale if the queue is concurrently modified.
+        *
+        * @return Iterator
+        * @throws JobQueueError
+        * @since 1.22
+        */
+       public function getAllDelayedJobs() {
+               return new ArrayIterator( array() ); // not implemented
+       }
+
+       /**
+        * Do not use this function outside of JobQueue/JobQueueGroup
+        *
+        * @return string
+        * @since 1.22
+        */
+       public function getCoalesceLocationInternal() {
+               return null;
+       }
+
+       /**
+        * Check whether each of the given queues are empty.
+        * This is used for batching checks for queues stored at the same place.
+        *
+        * @param array $types List of queues types
+        * @return array|null (list of non-empty queue types) or null if unsupported
+        * @throws MWException
+        * @since 1.22
+        */
+       final public function getSiblingQueuesWithJobs( array $types ) {
+               $section = new ProfileSection( __METHOD__ );
+
+               return $this->doGetSiblingQueuesWithJobs( $types );
+       }
+
+       /**
+        * @see JobQueue::getSiblingQueuesWithJobs()
+        * @param array $types List of queues types
+        * @return array|null (list of queue types) or null if unsupported
+        */
+       protected function doGetSiblingQueuesWithJobs( array $types ) {
+               return null; // not supported
+       }
+
+       /**
+        * Check the size of each of the given queues.
+        * For queues not served by the same store as this one, 0 is returned.
+        * This is used for batching checks for queues stored at the same place.
+        *
+        * @param array $types List of queues types
+        * @return array|null (job type => whether queue is empty) or null if unsupported
+        * @throws MWException
+        * @since 1.22
+        */
+       final public function getSiblingQueueSizes( array $types ) {
+               $section = new ProfileSection( __METHOD__ );
+
+               return $this->doGetSiblingQueueSizes( $types );
+       }
+
+       /**
+        * @see JobQueue::getSiblingQueuesSize()
+        * @param array $types List of queues types
+        * @return array|null (list of queue types) or null if unsupported
+        */
+       protected function doGetSiblingQueueSizes( array $types ) {
+               return null; // not supported
+       }
+
+       /**
+        * Call wfIncrStats() for the queue overall and for the queue type
+        *
+        * @param string $key Event type
+        * @param string $type Job type
+        * @param int $delta
+        * @since 1.22
+        */
+       public static function incrStats( $key, $type, $delta = 1 ) {
+               wfIncrStats( $key, $delta );
+               wfIncrStats( "{$key}-{$type}", $delta );
+       }
+
+       /**
+        * Namespace the queue with a key to isolate it for testing
+        *
+        * @param string $key
+        * @return void
+        * @throws MWException
+        */
+       public function setTestingPrefix( $key ) {
+               throw new MWException( "Queue namespacing not supported for this queue type." );
+       }
+}
+
+/**
+ * @ingroup JobQueue
+ * @since 1.22
+ */
+class JobQueueError extends MWException {
+}
+
+class JobQueueConnectionError extends JobQueueError {
+}
diff --git a/includes/jobqueue/JobQueueDB.php b/includes/jobqueue/JobQueueDB.php
new file mode 100644 (file)
index 0000000..6097d31
--- /dev/null
@@ -0,0 +1,848 @@
+<?php
+/**
+ * Database-backed job queue code.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Class to handle job queues stored in the DB
+ *
+ * @ingroup JobQueue
+ * @since 1.21
+ */
+class JobQueueDB extends JobQueue {
+       const CACHE_TTL_SHORT = 30; // integer; seconds to cache info without re-validating
+       const CACHE_TTL_LONG = 300; // integer; seconds to cache info that is kept up to date
+       const MAX_AGE_PRUNE = 604800; // integer; seconds a job can live once claimed
+       const MAX_JOB_RANDOM = 2147483647; // integer; 2^31 - 1, used for job_random
+       const MAX_OFFSET = 255; // integer; maximum number of rows to skip
+
+       /** @var BagOStuff */
+       protected $cache;
+
+       /** @var bool|string Name of an external DB cluster. False if not set */
+       protected $cluster = false;
+
+       /**
+        * 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 array $params
+        */
+       protected function __construct( array $params ) {
+               global $wgMemc;
+
+               parent::__construct( $params );
+
+               $this->cluster = isset( $params['cluster'] ) ? $params['cluster'] : false;
+               // Make sure that we don't use the SQL cache, which would be harmful
+               $this->cache = ( $wgMemc instanceof SqlBagOStuff ) ? new EmptyBagOStuff() : $wgMemc;
+       }
+
+       protected function supportedOrders() {
+               return array( 'random', 'timestamp', 'fifo' );
+       }
+
+       protected function optimalOrder() {
+               return 'random';
+       }
+
+       /**
+        * @see JobQueue::doIsEmpty()
+        * @return bool
+        */
+       protected function doIsEmpty() {
+               $key = $this->getCacheKey( 'empty' );
+
+               $isEmpty = $this->cache->get( $key );
+               if ( $isEmpty === 'true' ) {
+                       return true;
+               } elseif ( $isEmpty === 'false' ) {
+                       return false;
+               }
+
+               $dbr = $this->getSlaveDB();
+               try {
+                       $found = $dbr->selectField( // unclaimed job
+                               'job', '1', array( 'job_cmd' => $this->type, 'job_token' => '' ), __METHOD__
+                       );
+               } catch ( DBError $e ) {
+                       $this->throwDBException( $e );
+               }
+               $this->cache->add( $key, $found ? 'false' : 'true', self::CACHE_TTL_LONG );
+
+               return !$found;
+       }
+
+       /**
+        * @see JobQueue::doGetSize()
+        * @return int
+        */
+       protected function doGetSize() {
+               $key = $this->getCacheKey( 'size' );
+
+               $size = $this->cache->get( $key );
+               if ( is_int( $size ) ) {
+                       return $size;
+               }
+
+               try {
+                       $dbr = $this->getSlaveDB();
+                       $size = (int)$dbr->selectField( 'job', 'COUNT(*)',
+                               array( 'job_cmd' => $this->type, 'job_token' => '' ),
+                               __METHOD__
+                       );
+               } catch ( DBError $e ) {
+                       $this->throwDBException( $e );
+               }
+               $this->cache->set( $key, $size, self::CACHE_TTL_SHORT );
+
+               return $size;
+       }
+
+       /**
+        * @see JobQueue::doGetAcquiredCount()
+        * @return int
+        */
+       protected function doGetAcquiredCount() {
+               if ( $this->claimTTL <= 0 ) {
+                       return 0; // no acknowledgements
+               }
+
+               $key = $this->getCacheKey( 'acquiredcount' );
+
+               $count = $this->cache->get( $key );
+               if ( is_int( $count ) ) {
+                       return $count;
+               }
+
+               $dbr = $this->getSlaveDB();
+               try {
+                       $count = (int)$dbr->selectField( 'job', 'COUNT(*)',
+                               array( 'job_cmd' => $this->type, "job_token != {$dbr->addQuotes( '' )}" ),
+                               __METHOD__
+                       );
+               } catch ( DBError $e ) {
+                       $this->throwDBException( $e );
+               }
+               $this->cache->set( $key, $count, self::CACHE_TTL_SHORT );
+
+               return $count;
+       }
+
+       /**
+        * @see JobQueue::doGetAbandonedCount()
+        * @return int
+        * @throws MWException
+        */
+       protected function doGetAbandonedCount() {
+               global $wgMemc;
+
+               if ( $this->claimTTL <= 0 ) {
+                       return 0; // no acknowledgements
+               }
+
+               $key = $this->getCacheKey( 'abandonedcount' );
+
+               $count = $wgMemc->get( $key );
+               if ( is_int( $count ) ) {
+                       return $count;
+               }
+
+               $dbr = $this->getSlaveDB();
+               try {
+                       $count = (int)$dbr->selectField( 'job', 'COUNT(*)',
+                               array(
+                                       'job_cmd' => $this->type,
+                                       "job_token != {$dbr->addQuotes( '' )}",
+                                       "job_attempts >= " . $dbr->addQuotes( $this->maxTries )
+                               ),
+                               __METHOD__
+                       );
+               } catch ( DBError $e ) {
+                       $this->throwDBException( $e );
+               }
+               $wgMemc->set( $key, $count, self::CACHE_TTL_SHORT );
+
+               return $count;
+       }
+
+       /**
+        * @see JobQueue::doBatchPush()
+        * @param array $jobs
+        * @param $flags
+        * @throws DBError|Exception
+        * @return bool
+        */
+       protected function doBatchPush( array $jobs, $flags ) {
+               $dbw = $this->getMasterDB();
+
+               $that = $this;
+               $method = __METHOD__;
+               $dbw->onTransactionIdle(
+                       function () use ( $dbw, $that, $jobs, $flags, $method ) {
+                               $that->doBatchPushInternal( $dbw, $jobs, $flags, $method );
+                       }
+               );
+
+               return true;
+       }
+
+       /**
+        * This function should *not* be called outside of JobQueueDB
+        *
+        * @param IDatabase $dbw
+        * @param array $jobs
+        * @param int $flags
+        * @param string $method
+        * @throws DBError
+        * @return bool
+        */
+       public function doBatchPushInternal( IDatabase $dbw, array $jobs, $flags, $method ) {
+               if ( !count( $jobs ) ) {
+                       return true;
+               }
+
+               $rowSet = array(); // (sha1 => job) map for jobs that are de-duplicated
+               $rowList = array(); // list of jobs for jobs that are are not de-duplicated
+               foreach ( $jobs as $job ) {
+                       $row = $this->insertFields( $job );
+                       if ( $job->ignoreDuplicates() ) {
+                               $rowSet[$row['job_sha1']] = $row;
+                       } else {
+                               $rowList[] = $row;
+                       }
+               }
+
+               if ( $flags & self::QOS_ATOMIC ) {
+                       $dbw->begin( $method ); // wrap all the job additions in one transaction
+               }
+               try {
+                       // Strip out any duplicate jobs that are already in the queue...
+                       if ( count( $rowSet ) ) {
+                               $res = $dbw->select( 'job', 'job_sha1',
+                                       array(
+                                               // No job_type condition since it's part of the job_sha1 hash
+                                               'job_sha1' => array_keys( $rowSet ),
+                                               'job_token' => '' // unclaimed
+                                       ),
+                                       $method
+                               );
+                               foreach ( $res as $row ) {
+                                       wfDebug( "Job with hash '{$row->job_sha1}' is a duplicate.\n" );
+                                       unset( $rowSet[$row->job_sha1] ); // already enqueued
+                               }
+                       }
+                       // Build the full list of job rows to insert
+                       $rows = array_merge( $rowList, array_values( $rowSet ) );
+                       // Insert the job rows in chunks to avoid slave lag...
+                       foreach ( array_chunk( $rows, 50 ) as $rowBatch ) {
+                               $dbw->insert( 'job', $rowBatch, $method );
+                       }
+                       JobQueue::incrStats( 'job-insert', $this->type, count( $rows ) );
+                       JobQueue::incrStats(
+                               'job-insert-duplicate',
+                               $this->type,
+                               count( $rowSet ) + count( $rowList ) - count( $rows )
+                       );
+               } catch ( DBError $e ) {
+                       if ( $flags & self::QOS_ATOMIC ) {
+                               $dbw->rollback( $method );
+                       }
+                       throw $e;
+               }
+               if ( $flags & self::QOS_ATOMIC ) {
+                       $dbw->commit( $method );
+               }
+
+               $this->cache->set( $this->getCacheKey( 'empty' ), 'false', JobQueueDB::CACHE_TTL_LONG );
+
+               return true;
+       }
+
+       /**
+        * @see JobQueue::doPop()
+        * @return Job|bool
+        */
+       protected function doPop() {
+               if ( $this->cache->get( $this->getCacheKey( 'empty' ) ) === 'true' ) {
+                       return false; // queue is empty
+               }
+
+               $dbw = $this->getMasterDB();
+               try {
+                       $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
+                       $autoTrx = $dbw->getFlag( DBO_TRX ); // get current setting
+                       $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
+                       $scopedReset = new ScopedCallback( function () use ( $dbw, $autoTrx ) {
+                               $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore old setting
+                       } );
+
+                       $uuid = wfRandomString( 32 ); // pop attempt
+                       $job = false; // job popped off
+                       do { // retry when our row is invalid or deleted as a duplicate
+                               // Try to reserve a row in the DB...
+                               if ( in_array( $this->order, array( 'fifo', 'timestamp' ) ) ) {
+                                       $row = $this->claimOldest( $uuid );
+                               } else { // random first
+                                       $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 );
+                               }
+                               // Check if we found a row to reserve...
+                               if ( !$row ) {
+                                       $this->cache->set( $this->getCacheKey( 'empty' ), 'true', self::CACHE_TTL_LONG );
+                                       break; // nothing to do
+                               }
+                               JobQueue::incrStats( 'job-pop', $this->type );
+                               // Get the job object from the row...
+                               $title = Title::makeTitleSafe( $row->job_namespace, $row->job_title );
+                               if ( !$title ) {
+                                       $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
+                                       wfDebug( "Row has invalid title '{$row->job_title}'." );
+                                       continue; // try again
+                               }
+                               $job = Job::factory( $row->job_cmd, $title,
+                                       self::extractBlob( $row->job_params ), $row->job_id );
+                               $job->metadata['id'] = $row->job_id;
+                               break; // done
+                       } while ( true );
+               } catch ( DBError $e ) {
+                       $this->throwDBException( $e );
+               }
+
+               return $job;
+       }
+
+       /**
+        * Reserve a row with a single UPDATE without holding row locks over RTTs...
+        *
+        * @param string $uuid 32 char hex string
+        * @param $rand integer Random unsigned integer (31 bits)
+        * @param bool $gte Search for job_random >= $random (otherwise job_random <= $random)
+        * @return stdClass|bool Row|false
+        */
+       protected function claimRandom( $uuid, $rand, $gte ) {
+               $dbw = $this->getMasterDB();
+               // Check cache to see if the queue has <= OFFSET items
+               $tinyQueue = $this->cache->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 {
+                       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', self::selectFields(), // 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', self::selectFields(), // 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
+                                       $this->cache->set( $this->getCacheKey( 'small' ), 1, 30 );
+                                       continue; // use job_random
+                               }
+                       }
+
+                       if ( $row ) { // claim the job
+                               $dbw->update( 'job', // update by PK
+                                       array(
+                                               'job_token' => $uuid,
+                                               'job_token_timestamp' => $dbw->timestamp(),
+                                               'job_attempts = job_attempts+1' ),
+                                       array( 'job_cmd' => $this->type, 'job_id' => $row->job_id, 'job_token' => '' ),
+                                       __METHOD__
+                               );
+                               // This might get raced out by another runner when claiming the previously
+                               // selected row. The use of job_random should minimize this problem, however.
+                               if ( !$dbw->affectedRows() ) {
+                                       $row = false; // raced out
+                               }
+                       } else {
+                               break; // nothing to do
+                       }
+               } while ( !$row );
+
+               return $row;
+       }
+
+       /**
+        * Reserve a row with a single UPDATE without holding row locks over RTTs...
+        *
+        * @param string $uuid 32 char hex string
+        * @return stdClass|bool Row|false
+        */
+       protected function claimOldest( $uuid ) {
+               $dbw = $this->getMasterDB();
+
+               $row = false; // the row acquired
+               do {
+                       if ( $dbw->getType() === 'mysql' ) {
+                               // Per http://bugs.mysql.com/bug.php?id=6980, we can't use subqueries on the
+                               // same table being changed in an UPDATE query in MySQL (gives Error: 1093).
+                               // Oracle and Postgre have no such limitation. However, MySQL offers an
+                               // alternative here by supporting ORDER BY + LIMIT for UPDATE queries.
+                               $dbw->query( "UPDATE {$dbw->tableName( 'job' )} " .
+                                       "SET " .
+                                               "job_token = {$dbw->addQuotes( $uuid ) }, " .
+                                               "job_token_timestamp = {$dbw->addQuotes( $dbw->timestamp() )}, " .
+                                               "job_attempts = job_attempts+1 " .
+                                       "WHERE ( " .
+                                               "job_cmd = {$dbw->addQuotes( $this->type )} " .
+                                               "AND job_token = {$dbw->addQuotes( '' )} " .
+                                       ") ORDER BY job_id ASC LIMIT 1",
+                                       __METHOD__
+                               );
+                       } else {
+                               // Use a subquery to find the job, within an UPDATE to claim it.
+                               // This uses as much of the DB wrapper functions as possible.
+                               $dbw->update( 'job',
+                                       array(
+                                               'job_token' => $uuid,
+                                               'job_token_timestamp' => $dbw->timestamp(),
+                                               'job_attempts = job_attempts+1' ),
+                                       array( 'job_id = (' .
+                                               $dbw->selectSQLText( 'job', 'job_id',
+                                                       array( 'job_cmd' => $this->type, 'job_token' => '' ),
+                                                       __METHOD__,
+                                                       array( 'ORDER BY' => 'job_id ASC', 'LIMIT' => 1 ) ) .
+                                               ')'
+                                       ),
+                                       __METHOD__
+                               );
+                       }
+                       // Fetch any row that we just reserved...
+                       if ( $dbw->affectedRows() ) {
+                               $row = $dbw->selectRow( 'job', self::selectFields(),
+                                       array( 'job_cmd' => $this->type, 'job_token' => $uuid ), __METHOD__
+                               );
+                               if ( !$row ) { // raced out by duplicate job removal
+                                       wfDebug( "Row deleted as duplicate by another process." );
+                               }
+                       } else {
+                               break; // nothing to do
+                       }
+               } while ( !$row );
+
+               return $row;
+       }
+
+       /**
+        * @see JobQueue::doAck()
+        * @param Job $job
+        * @throws MWException
+        * @return Job|bool
+        */
+       protected function doAck( Job $job ) {
+               if ( !isset( $job->metadata['id'] ) ) {
+                       throw new MWException( "Job of type '{$job->getType()}' has no ID." );
+               }
+
+               $dbw = $this->getMasterDB();
+               try {
+                       $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
+                       $autoTrx = $dbw->getFlag( DBO_TRX ); // get current setting
+                       $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
+                       $scopedReset = new ScopedCallback( function () use ( $dbw, $autoTrx ) {
+                               $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore old setting
+                       } );
+
+                       // Delete a row with a single DELETE without holding row locks over RTTs...
+                       $dbw->delete( 'job',
+                               array( 'job_cmd' => $this->type, 'job_id' => $job->metadata['id'] ), __METHOD__ );
+               } catch ( DBError $e ) {
+                       $this->throwDBException( $e );
+               }
+
+               return true;
+       }
+
+       /**
+        * @see JobQueue::doDeduplicateRootJob()
+        * @param Job $job
+        * @throws MWException
+        * @return bool
+        */
+       protected function doDeduplicateRootJob( Job $job ) {
+               $params = $job->getParams();
+               if ( !isset( $params['rootJobSignature'] ) ) {
+                       throw new MWException( "Cannot register root job; missing 'rootJobSignature'." );
+               } elseif ( !isset( $params['rootJobTimestamp'] ) ) {
+                       throw new MWException( "Cannot register root job; missing 'rootJobTimestamp'." );
+               }
+               $key = $this->getRootJobCacheKey( $params['rootJobSignature'] );
+               // Callers should call batchInsert() and then this function so that if the insert
+               // fails, the de-duplication registration will be aborted. Since the insert is
+               // deferred till "transaction idle", do the same here, so that the ordering is
+               // maintained. Having only the de-duplication registration succeed would cause
+               // jobs to become no-ops without any actual jobs that made them redundant.
+               $dbw = $this->getMasterDB();
+               $cache = $this->dupCache;
+               $dbw->onTransactionIdle( function () use ( $cache, $params, $key, $dbw ) {
+                       $timestamp = $cache->get( $key ); // current last timestamp of this job
+                       if ( $timestamp && $timestamp >= $params['rootJobTimestamp'] ) {
+                               return true; // a newer version of this root job was enqueued
+                       }
+
+                       // Update the timestamp of the last root job started at the location...
+                       return $cache->set( $key, $params['rootJobTimestamp'], JobQueueDB::ROOTJOB_TTL );
+               } );
+
+               return true;
+       }
+
+       /**
+        * @see JobQueue::doDelete()
+        * @return bool
+        */
+       protected function doDelete() {
+               $dbw = $this->getMasterDB();
+               try {
+                       $dbw->delete( 'job', array( 'job_cmd' => $this->type ) );
+               } catch ( DBError $e ) {
+                       $this->throwDBException( $e );
+               }
+
+               return true;
+       }
+
+       /**
+        * @see JobQueue::doWaitForBackups()
+        * @return void
+        */
+       protected function doWaitForBackups() {
+               wfWaitForSlaves();
+       }
+
+       /**
+        * @return array
+        */
+       protected function doGetPeriodicTasks() {
+               return array(
+                       'recycleAndDeleteStaleJobs' => array(
+                               'callback' => array( $this, 'recycleAndDeleteStaleJobs' ),
+                               'period' => ceil( $this->claimTTL / 2 )
+                       )
+               );
+       }
+
+       /**
+        * @return void
+        */
+       protected function doFlushCaches() {
+               foreach ( array( 'empty', 'size', 'acquiredcount' ) as $type ) {
+                       $this->cache->delete( $this->getCacheKey( $type ) );
+               }
+       }
+
+       /**
+        * @see JobQueue::getAllQueuedJobs()
+        * @return Iterator
+        */
+       public function getAllQueuedJobs() {
+               $dbr = $this->getSlaveDB();
+               try {
+                       return new MappedIterator(
+                               $dbr->select( 'job', self::selectFields(),
+                                       array( 'job_cmd' => $this->getType(), 'job_token' => '' ) ),
+                               function ( $row ) use ( $dbr ) {
+                                       $job = Job::factory(
+                                               $row->job_cmd,
+                                               Title::makeTitle( $row->job_namespace, $row->job_title ),
+                                               strlen( $row->job_params ) ? unserialize( $row->job_params ) : false
+                                       );
+                                       $job->metadata['id'] = $row->job_id;
+                                       return $job;
+                               }
+                       );
+               } catch ( DBError $e ) {
+                       $this->throwDBException( $e );
+               }
+       }
+
+       public function getCoalesceLocationInternal() {
+               return $this->cluster
+                       ? "DBCluster:{$this->cluster}:{$this->wiki}"
+                       : "LBFactory:{$this->wiki}";
+       }
+
+       protected function doGetSiblingQueuesWithJobs( array $types ) {
+               $dbr = $this->getSlaveDB();
+               $res = $dbr->select( 'job', 'DISTINCT job_cmd',
+                       array( 'job_cmd' => $types ), __METHOD__ );
+
+               $types = array();
+               foreach ( $res as $row ) {
+                       $types[] = $row->job_cmd;
+               }
+
+               return $types;
+       }
+
+       protected function doGetSiblingQueueSizes( array $types ) {
+               $dbr = $this->getSlaveDB();
+               $res = $dbr->select( 'job', array( 'job_cmd', 'COUNT(*) AS count' ),
+                       array( 'job_cmd' => $types ), __METHOD__, array( 'GROUP BY' => 'job_cmd' ) );
+
+               $sizes = array();
+               foreach ( $res as $row ) {
+                       $sizes[$row->job_cmd] = (int)$row->count;
+               }
+
+               return $sizes;
+       }
+
+       /**
+        * Recycle or destroy any jobs that have been claimed for too long
+        *
+        * @return int Number of jobs recycled/deleted
+        */
+       public function recycleAndDeleteStaleJobs() {
+               $now = time();
+               $count = 0; // affected rows
+               $dbw = $this->getMasterDB();
+
+               try {
+                       if ( !$dbw->lock( "jobqueue-recycle-{$this->type}", __METHOD__, 1 ) ) {
+                               return $count; // already in progress
+                       }
+
+                       // Remove claims on jobs acquired for too long if enabled...
+                       if ( $this->claimTTL > 0 ) {
+                               $claimCutoff = $dbw->timestamp( $now - $this->claimTTL );
+                               // Get the IDs of jobs that have be claimed but not finished after too long.
+                               // These jobs can be recycled into the queue by expiring the claim. Selecting
+                               // the IDs first means that the UPDATE can be done by primary key (less deadlocks).
+                               $res = $dbw->select( 'job', 'job_id',
+                                       array(
+                                               'job_cmd' => $this->type,
+                                               "job_token != {$dbw->addQuotes( '' )}", // was acquired
+                                               "job_token_timestamp < {$dbw->addQuotes( $claimCutoff )}", // stale
+                                               "job_attempts < {$dbw->addQuotes( $this->maxTries )}" ), // retries left
+                                       __METHOD__
+                               );
+                               $ids = array_map(
+                                       function ( $o ) {
+                                               return $o->job_id;
+                                       }, iterator_to_array( $res )
+                               );
+                               if ( count( $ids ) ) {
+                                       // Reset job_token for these jobs so that other runners will pick them up.
+                                       // Set the timestamp to the current time, as it is useful to now that the job
+                                       // was already tried before (the timestamp becomes the "released" time).
+                                       $dbw->update( 'job',
+                                               array(
+                                                       'job_token' => '',
+                                                       'job_token_timestamp' => $dbw->timestamp( $now ) ), // time of release
+                                               array(
+                                                       'job_id' => $ids ),
+                                               __METHOD__
+                                       );
+                                       $count += $dbw->affectedRows();
+                                       JobQueue::incrStats( 'job-recycle', $this->type, $dbw->affectedRows() );
+                                       $this->cache->set( $this->getCacheKey( 'empty' ), 'false', self::CACHE_TTL_LONG );
+                               }
+                       }
+
+                       // Just destroy any stale jobs...
+                       $pruneCutoff = $dbw->timestamp( $now - self::MAX_AGE_PRUNE );
+                       $conds = array(
+                               'job_cmd' => $this->type,
+                               "job_token != {$dbw->addQuotes( '' )}", // was acquired
+                               "job_token_timestamp < {$dbw->addQuotes( $pruneCutoff )}" // stale
+                       );
+                       if ( $this->claimTTL > 0 ) { // only prune jobs attempted too many times...
+                               $conds[] = "job_attempts >= {$dbw->addQuotes( $this->maxTries )}";
+                       }
+                       // Get the IDs of jobs that are considered stale and should be removed. Selecting
+                       // the IDs first means that the UPDATE can be done by primary key (less deadlocks).
+                       $res = $dbw->select( 'job', 'job_id', $conds, __METHOD__ );
+                       $ids = array_map(
+                               function ( $o ) {
+                                       return $o->job_id;
+                               }, iterator_to_array( $res )
+                       );
+                       if ( count( $ids ) ) {
+                               $dbw->delete( 'job', array( 'job_id' => $ids ), __METHOD__ );
+                               $count += $dbw->affectedRows();
+                               JobQueue::incrStats( 'job-abandon', $this->type, $dbw->affectedRows() );
+                       }
+
+                       $dbw->unlock( "jobqueue-recycle-{$this->type}", __METHOD__ );
+               } catch ( DBError $e ) {
+                       $this->throwDBException( $e );
+               }
+
+               return $count;
+       }
+
+       /**
+        * @param IJobSpecification $job
+        * @return array
+        */
+       protected function insertFields( IJobSpecification $job ) {
+               $dbw = $this->getMasterDB();
+
+               return array(
+                       // Fields that describe the nature of the job
+                       'job_cmd' => $job->getType(),
+                       'job_namespace' => $job->getTitle()->getNamespace(),
+                       'job_title' => $job->getTitle()->getDBkey(),
+                       'job_params' => self::makeBlob( $job->getParams() ),
+                       // Additional job metadata
+                       'job_id' => $dbw->nextSequenceValue( 'job_job_id_seq' ),
+                       'job_timestamp' => $dbw->timestamp(),
+                       'job_sha1' => wfBaseConvert(
+                               sha1( serialize( $job->getDeduplicationInfo() ) ),
+                               16, 36, 31
+                       ),
+                       'job_random' => mt_rand( 0, self::MAX_JOB_RANDOM )
+               );
+       }
+
+       /**
+        * @throws JobQueueConnectionError
+        * @return DBConnRef
+        */
+       protected function getSlaveDB() {
+               try {
+                       return $this->getDB( DB_SLAVE );
+               } catch ( DBConnectionError $e ) {
+                       throw new JobQueueConnectionError( "DBConnectionError:" . $e->getMessage() );
+               }
+       }
+
+       /**
+        * @throws JobQueueConnectionError
+        * @return DBConnRef
+        */
+       protected function getMasterDB() {
+               try {
+                       return $this->getDB( DB_MASTER );
+               } catch ( DBConnectionError $e ) {
+                       throw new JobQueueConnectionError( "DBConnectionError:" . $e->getMessage() );
+               }
+       }
+
+       /**
+        * @param $index integer (DB_SLAVE/DB_MASTER)
+        * @return DBConnRef
+        */
+       protected function getDB( $index ) {
+               $lb = ( $this->cluster !== false )
+                       ? wfGetLBFactory()->getExternalLB( $this->cluster, $this->wiki )
+                       : wfGetLB( $this->wiki );
+
+               return $lb->getConnectionRef( $index, array(), $this->wiki );
+       }
+
+       /**
+        * @param $property
+        * @return string
+        */
+       private function getCacheKey( $property ) {
+               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
+               $cluster = is_string( $this->cluster ) ? $this->cluster : 'main';
+
+               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $cluster, $this->type, $property );
+       }
+
+       /**
+        * @param $params
+        * @return string
+        */
+       protected static function makeBlob( $params ) {
+               if ( $params !== false ) {
+                       return serialize( $params );
+               } else {
+                       return '';
+               }
+       }
+
+       /**
+        * @param $blob
+        * @return bool|mixed
+        */
+       protected static function extractBlob( $blob ) {
+               if ( (string)$blob !== '' ) {
+                       return unserialize( $blob );
+               } else {
+                       return false;
+               }
+       }
+
+       /**
+        * @param DBError $e
+        * @throws JobQueueError
+        */
+       protected function throwDBException( DBError $e ) {
+               throw new JobQueueError( get_class( $e ) . ": " . $e->getMessage() );
+       }
+
+       /**
+        * Return the list of job fields that should be selected.
+        * @since 1.23
+        * @return array
+        */
+       public static function selectFields() {
+               return array(
+                       'job_id',
+                       'job_cmd',
+                       'job_namespace',
+                       'job_title',
+                       'job_timestamp',
+                       'job_params',
+                       'job_random',
+                       'job_attempts',
+                       'job_token',
+                       'job_token_timestamp',
+                       'job_sha1',
+               );
+       }
+}
diff --git a/includes/jobqueue/JobQueueFederated.php b/includes/jobqueue/JobQueueFederated.php
new file mode 100644 (file)
index 0000000..9502148
--- /dev/null
@@ -0,0 +1,553 @@
+<?php
+/**
+ * Job queue code for federated queues.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Class to handle enqueueing and running of background jobs for federated queues
+ *
+ * This class allows for queues to be partitioned into smaller queues.
+ * A partition is defined by the configuration for a JobQueue instance.
+ * For example, one can set $wgJobTypeConf['refreshLinks'] to point to a
+ * JobQueueFederated instance, which itself would consist of three JobQueueRedis
+ * instances, each using their own redis server. This would allow for the jobs
+ * to be split (evenly or based on weights) accross multiple servers if a single
+ * server becomes impractical or expensive. Different JobQueue classes can be mixed.
+ *
+ * The basic queue configuration (e.g. "order", "claimTTL") of a federated queue
+ * is inherited by the partition queues. Additional configuration defines what
+ * section each wiki is in, what partition queues each section uses (and their weight),
+ * and the JobQueue configuration for each partition. Some sections might only need a
+ * single queue partition, like the sections for groups of small wikis.
+ *
+ * If used for performance, then $wgMainCacheType should be set to memcached/redis.
+ * Note that "fifo" cannot be used for the ordering, since the data is distributed.
+ * One can still use "timestamp" instead, as in "roughly timestamp ordered". Also,
+ * queue classes used by this should ignore down servers (with TTL) to avoid slowness.
+ *
+ * @ingroup JobQueue
+ * @since 1.22
+ */
+class JobQueueFederated extends JobQueue {
+       /** @var array (partition name => weight) reverse sorted by weight */
+       protected $partitionMap = array();
+
+       /** @var array (partition name => JobQueue) reverse sorted by weight */
+       protected $partitionQueues = array();
+
+       /** @var HashRing */
+       protected $partitionPushRing;
+
+       /** @var BagOStuff */
+       protected $cache;
+
+       /** @var int Maximum number of partitions to try */
+       protected $maxPartitionsTry;
+
+       const CACHE_TTL_SHORT = 30; // integer; seconds to cache info without re-validating
+       const CACHE_TTL_LONG = 300; // integer; seconds to cache info that is kept up to date
+
+       /**
+        * @params include:
+        *  - sectionsByWiki      : A map of wiki IDs to section names.
+        *                          Wikis will default to using the section "default".
+        *  - partitionsBySection : Map of section names to maps of (partition name => weight).
+        *                          A section called 'default' must be defined if not all wikis
+        *                          have explicitly defined sections.
+        *  - configByPartition   : Map of queue partition names to configuration arrays.
+        *                          These configuration arrays are passed to JobQueue::factory().
+        *                          The options set here are overriden by those passed to this
+        *                          the federated queue itself (e.g. 'order' and 'claimTTL').
+        *  - partitionsNoPush    : List of partition names that can handle pop() but not push().
+        *                          This can be used to migrate away from a certain partition.
+        *  - maxPartitionsTry    : Maximum number of times to attempt job insertion using
+        *                          different partition queues. This improves availability
+        *                          during failure, at the cost of added latency and somewhat
+        *                          less reliable job de-duplication mechanisms.
+        * @param array $params
+        * @throws MWException
+        */
+       protected function __construct( array $params ) {
+               parent::__construct( $params );
+               $section = isset( $params['sectionsByWiki'][$this->wiki] )
+                       ? $params['sectionsByWiki'][$this->wiki]
+                       : 'default';
+               if ( !isset( $params['partitionsBySection'][$section] ) ) {
+                       throw new MWException( "No configuration for section '$section'." );
+               }
+               $this->maxPartitionsTry = isset( $params['maxPartitionsTry'] )
+                       ? $params['maxPartitionsTry']
+                       : 2;
+               // Get the full partition map
+               $this->partitionMap = $params['partitionsBySection'][$section];
+               arsort( $this->partitionMap, SORT_NUMERIC );
+               // Get the partitions jobs can actually be pushed to
+               $partitionPushMap = $this->partitionMap;
+               if ( isset( $params['partitionsNoPush'] ) ) {
+                       foreach ( $params['partitionsNoPush'] as $partition ) {
+                               unset( $partitionPushMap[$partition] );
+                       }
+               }
+               // Get the config to pass to merge into each partition queue config
+               $baseConfig = $params;
+               foreach ( array( 'class', 'sectionsByWiki', 'maxPartitionsTry',
+                       'partitionsBySection', 'configByPartition', 'partitionsNoPush' ) as $o
+               ) {
+                       unset( $baseConfig[$o] ); // partition queue doesn't care about this
+               }
+               // Get the partition queue objects
+               foreach ( $this->partitionMap as $partition => $w ) {
+                       if ( !isset( $params['configByPartition'][$partition] ) ) {
+                               throw new MWException( "No configuration for partition '$partition'." );
+                       }
+                       $this->partitionQueues[$partition] = JobQueue::factory(
+                               $baseConfig + $params['configByPartition'][$partition] );
+               }
+               // Get the ring of partitions to push jobs into
+               $this->partitionPushRing = new HashRing( $partitionPushMap );
+               // Aggregate cache some per-queue values if there are multiple partition queues
+               $this->cache = count( $this->partitionMap ) > 1 ? wfGetMainCache() : new EmptyBagOStuff();
+       }
+
+       protected function supportedOrders() {
+               // No FIFO due to partitioning, though "rough timestamp order" is supported
+               return array( 'undefined', 'random', 'timestamp' );
+       }
+
+       protected function optimalOrder() {
+               return 'undefined'; // defer to the partitions
+       }
+
+       protected function supportsDelayedJobs() {
+               return true; // defer checks to the partitions
+       }
+
+       protected function doIsEmpty() {
+               $key = $this->getCacheKey( 'empty' );
+
+               $isEmpty = $this->cache->get( $key );
+               if ( $isEmpty === 'true' ) {
+                       return true;
+               } elseif ( $isEmpty === 'false' ) {
+                       return false;
+               }
+
+               $empty = true;
+               $failed = 0;
+               foreach ( $this->partitionQueues as $queue ) {
+                       try {
+                               $empty = $empty && $queue->doIsEmpty();
+                       } catch ( JobQueueError $e ) {
+                               ++$failed;
+                               MWExceptionHandler::logException( $e );
+                       }
+               }
+               $this->throwErrorIfAllPartitionsDown( $failed );
+
+               $this->cache->add( $key, $empty ? 'true' : 'false', self::CACHE_TTL_LONG );
+               return $empty;
+       }
+
+       protected function doGetSize() {
+               return $this->getCrossPartitionSum( 'size', 'doGetSize' );
+       }
+
+       protected function doGetAcquiredCount() {
+               return $this->getCrossPartitionSum( 'acquiredcount', 'doGetAcquiredCount' );
+       }
+
+       protected function doGetDelayedCount() {
+               return $this->getCrossPartitionSum( 'delayedcount', 'doGetDelayedCount' );
+       }
+
+       protected function doGetAbandonedCount() {
+               return $this->getCrossPartitionSum( 'abandonedcount', 'doGetAbandonedCount' );
+       }
+
+       /**
+        * @param string $type
+        * @param string $method
+        * @return int
+        */
+       protected function getCrossPartitionSum( $type, $method ) {
+               $key = $this->getCacheKey( $type );
+
+               $count = $this->cache->get( $key );
+               if ( is_int( $count ) ) {
+                       return $count;
+               }
+
+               $failed = 0;
+               foreach ( $this->partitionQueues as $queue ) {
+                       try {
+                               $count += $queue->$method();
+                       } catch ( JobQueueError $e ) {
+                               ++$failed;
+                               MWExceptionHandler::logException( $e );
+                       }
+               }
+               $this->throwErrorIfAllPartitionsDown( $failed );
+
+               $this->cache->set( $key, $count, self::CACHE_TTL_SHORT );
+
+               return $count;
+       }
+
+       protected function doBatchPush( array $jobs, $flags ) {
+               // Local ring variable that may be changed to point to a new ring on failure
+               $partitionRing = $this->partitionPushRing;
+               // Try to insert the jobs and update $partitionsTry on any failures.
+               // Retry to insert any remaning jobs again, ignoring the bad partitions.
+               $jobsLeft = $jobs;
+               for ( $i = $this->maxPartitionsTry; $i > 0 && count( $jobsLeft ); --$i ) {
+                       $jobsLeft = $this->tryJobInsertions( $jobsLeft, $partitionRing, $flags );
+               }
+               if ( count( $jobsLeft ) ) {
+                       throw new JobQueueError(
+                               "Could not insert job(s), {$this->maxPartitionsTry} partitions tried." );
+               }
+
+               return true;
+       }
+
+       /**
+        * @param array $jobs
+        * @param HashRing $partitionRing
+        * @param int $flags
+        * @throws JobQueueError
+        * @return array List of Job object that could not be inserted
+        */
+       protected function tryJobInsertions( array $jobs, HashRing &$partitionRing, $flags ) {
+               $jobsLeft = array();
+
+               // Because jobs are spread across partitions, per-job de-duplication needs
+               // to use a consistent hash to avoid allowing duplicate jobs per partition.
+               // When inserting a batch of de-duplicated jobs, QOS_ATOMIC is disregarded.
+               $uJobsByPartition = array(); // (partition name => job list)
+               /** @var Job $job */
+               foreach ( $jobs as $key => $job ) {
+                       if ( $job->ignoreDuplicates() ) {
+                               $sha1 = sha1( serialize( $job->getDeduplicationInfo() ) );
+                               $uJobsByPartition[$partitionRing->getLocation( $sha1 )][] = $job;
+                               unset( $jobs[$key] );
+                       }
+               }
+               // Get the batches of jobs that are not de-duplicated
+               if ( $flags & self::QOS_ATOMIC ) {
+                       $nuJobBatches = array( $jobs ); // all or nothing
+               } else {
+                       // Split the jobs into batches and spread them out over servers if there
+                       // are many jobs. This helps keep the partitions even. Otherwise, send all
+                       // the jobs to a single partition queue to avoids the extra connections.
+                       $nuJobBatches = array_chunk( $jobs, 300 );
+               }
+
+               // Insert the de-duplicated jobs into the queues...
+               foreach ( $uJobsByPartition as $partition => $jobBatch ) {
+                       /** @var JobQueue $queue */
+                       $queue = $this->partitionQueues[$partition];
+                       try {
+                               $ok = $queue->doBatchPush( $jobBatch, $flags | self::QOS_ATOMIC );
+                       } catch ( JobQueueError $e ) {
+                               $ok = false;
+                               MWExceptionHandler::logException( $e );
+                       }
+                       if ( $ok ) {
+                               $key = $this->getCacheKey( 'empty' );
+                               $this->cache->set( $key, 'false', JobQueueDB::CACHE_TTL_LONG );
+                       } else {
+                               $partitionRing = $partitionRing->newWithoutLocation( $partition ); // blacklist
+                               if ( !$partitionRing ) {
+                                       throw new JobQueueError( "Could not insert job(s), no partitions available." );
+                               }
+                               $jobsLeft = array_merge( $jobsLeft, $jobBatch ); // not inserted
+                       }
+               }
+
+               // Insert the jobs that are not de-duplicated into the queues...
+               foreach ( $nuJobBatches as $jobBatch ) {
+                       $partition = ArrayUtils::pickRandom( $partitionRing->getLocationWeights() );
+                       $queue = $this->partitionQueues[$partition];
+                       try {
+                               $ok = $queue->doBatchPush( $jobBatch, $flags | self::QOS_ATOMIC );
+                       } catch ( JobQueueError $e ) {
+                               $ok = false;
+                               MWExceptionHandler::logException( $e );
+                       }
+                       if ( $ok ) {
+                               $key = $this->getCacheKey( 'empty' );
+                               $this->cache->set( $key, 'false', JobQueueDB::CACHE_TTL_LONG );
+                       } else {
+                               $partitionRing = $partitionRing->newWithoutLocation( $partition ); // blacklist
+                               if ( !$partitionRing ) {
+                                       throw new JobQueueError( "Could not insert job(s), no partitions available." );
+                               }
+                               $jobsLeft = array_merge( $jobsLeft, $jobBatch ); // not inserted
+                       }
+               }
+
+               return $jobsLeft;
+       }
+
+       protected function doPop() {
+               $key = $this->getCacheKey( 'empty' );
+
+               $isEmpty = $this->cache->get( $key );
+               if ( $isEmpty === 'true' ) {
+                       return false;
+               }
+
+               $partitionsTry = $this->partitionMap; // (partition => weight)
+
+               $failed = 0;
+               while ( count( $partitionsTry ) ) {
+                       $partition = ArrayUtils::pickRandom( $partitionsTry );
+                       if ( $partition === false ) {
+                               break; // all partitions at 0 weight
+                       }
+
+                       /** @var JobQueue $queue */
+                       $queue = $this->partitionQueues[$partition];
+                       try {
+                               $job = $queue->pop();
+                       } catch ( JobQueueError $e ) {
+                               ++$failed;
+                               MWExceptionHandler::logException( $e );
+                               $job = false;
+                       }
+                       if ( $job ) {
+                               $job->metadata['QueuePartition'] = $partition;
+
+                               return $job;
+                       } else {
+                               unset( $partitionsTry[$partition] ); // blacklist partition
+                       }
+               }
+               $this->throwErrorIfAllPartitionsDown( $failed );
+
+               $this->cache->set( $key, 'true', JobQueueDB::CACHE_TTL_LONG );
+
+               return false;
+       }
+
+       protected function doAck( Job $job ) {
+               if ( !isset( $job->metadata['QueuePartition'] ) ) {
+                       throw new MWException( "The given job has no defined partition name." );
+               }
+
+               return $this->partitionQueues[$job->metadata['QueuePartition']]->ack( $job );
+       }
+
+       protected function doIsRootJobOldDuplicate( Job $job ) {
+               $params = $job->getRootJobParams();
+               $partitions = $this->partitionPushRing->getLocations( $params['rootJobSignature'], 2 );
+               try {
+                       return $this->partitionQueues[$partitions[0]]->doIsRootJobOldDuplicate( $job );
+               } catch ( JobQueueError $e ) {
+                       if ( isset( $partitions[1] ) ) { // check fallback partition
+                               return $this->partitionQueues[$partitions[1]]->doIsRootJobOldDuplicate( $job );
+                       }
+               }
+
+               return false;
+       }
+
+       protected function doDeduplicateRootJob( Job $job ) {
+               $params = $job->getRootJobParams();
+               $partitions = $this->partitionPushRing->getLocations( $params['rootJobSignature'], 2 );
+               try {
+                       return $this->partitionQueues[$partitions[0]]->doDeduplicateRootJob( $job );
+               } catch ( JobQueueError $e ) {
+                       if ( isset( $partitions[1] ) ) { // check fallback partition
+                               return $this->partitionQueues[$partitions[1]]->doDeduplicateRootJob( $job );
+                       }
+               }
+
+               return false;
+       }
+
+       protected function doDelete() {
+               $failed = 0;
+               /** @var JobQueue $queue */
+               foreach ( $this->partitionQueues as $queue ) {
+                       try {
+                               $queue->doDelete();
+                       } catch ( JobQueueError $e ) {
+                               ++$failed;
+                               MWExceptionHandler::logException( $e );
+                       }
+               }
+               $this->throwErrorIfAllPartitionsDown( $failed );
+               return true;
+       }
+
+       protected function doWaitForBackups() {
+               $failed = 0;
+               /** @var JobQueue $queue */
+               foreach ( $this->partitionQueues as $queue ) {
+                       try {
+                               $queue->waitForBackups();
+                       } catch ( JobQueueError $e ) {
+                               ++$failed;
+                               MWExceptionHandler::logException( $e );
+                       }
+               }
+               $this->throwErrorIfAllPartitionsDown( $failed );
+       }
+
+       protected function doGetPeriodicTasks() {
+               $tasks = array();
+               /** @var JobQueue $queue */
+               foreach ( $this->partitionQueues as $partition => $queue ) {
+                       foreach ( $queue->getPeriodicTasks() as $task => $def ) {
+                               $tasks["{$partition}:{$task}"] = $def;
+                       }
+               }
+
+               return $tasks;
+       }
+
+       protected function doFlushCaches() {
+               static $types = array(
+                       'empty',
+                       'size',
+                       'acquiredcount',
+                       'delayedcount',
+                       'abandonedcount'
+               );
+
+               foreach ( $types as $type ) {
+                       $this->cache->delete( $this->getCacheKey( $type ) );
+               }
+
+               /** @var JobQueue $queue */
+               foreach ( $this->partitionQueues as $queue ) {
+                       $queue->doFlushCaches();
+               }
+       }
+
+       public function getAllQueuedJobs() {
+               $iterator = new AppendIterator();
+
+               /** @var JobQueue $queue */
+               foreach ( $this->partitionQueues as $queue ) {
+                       $iterator->append( $queue->getAllQueuedJobs() );
+               }
+
+               return $iterator;
+       }
+
+       public function getAllDelayedJobs() {
+               $iterator = new AppendIterator();
+
+               /** @var JobQueue $queue */
+               foreach ( $this->partitionQueues as $queue ) {
+                       $iterator->append( $queue->getAllDelayedJobs() );
+               }
+
+               return $iterator;
+       }
+
+       public function getCoalesceLocationInternal() {
+               return "JobQueueFederated:wiki:{$this->wiki}" .
+                       sha1( serialize( array_keys( $this->partitionMap ) ) );
+       }
+
+       protected function doGetSiblingQueuesWithJobs( array $types ) {
+               $result = array();
+
+               $failed = 0;
+               /** @var JobQueue $queue */
+               foreach ( $this->partitionQueues as $queue ) {
+                       try {
+                               $nonEmpty = $queue->doGetSiblingQueuesWithJobs( $types );
+                               if ( is_array( $nonEmpty ) ) {
+                                       $result = array_unique( array_merge( $result, $nonEmpty ) );
+                               } else {
+                                       return null; // not supported on all partitions; bail
+                               }
+                               if ( count( $result ) == count( $types ) ) {
+                                       break; // short-circuit
+                               }
+                       } catch ( JobQueueError $e ) {
+                               ++$failed;
+                               MWExceptionHandler::logException( $e );
+                       }
+               }
+               $this->throwErrorIfAllPartitionsDown( $failed );
+
+               return array_values( $result );
+       }
+
+       protected function doGetSiblingQueueSizes( array $types ) {
+               $result = array();
+               $failed = 0;
+               /** @var JobQueue $queue */
+               foreach ( $this->partitionQueues as $queue ) {
+                       try {
+                               $sizes = $queue->doGetSiblingQueueSizes( $types );
+                               if ( is_array( $sizes ) ) {
+                                       foreach ( $sizes as $type => $size ) {
+                                               $result[$type] = isset( $result[$type] ) ? $result[$type] + $size : $size;
+                                       }
+                               } else {
+                                       return null; // not supported on all partitions; bail
+                               }
+                       } catch ( JobQueueError $e ) {
+                               ++$failed;
+                               MWExceptionHandler::logException( $e );
+                       }
+               }
+               $this->throwErrorIfAllPartitionsDown( $failed );
+
+               return $result;
+       }
+
+       /**
+        * Throw an error if no partitions available
+        *
+        * @param int $down The number of up partitions down
+        * @return void
+        * @throws JobQueueError
+        */
+       protected function throwErrorIfAllPartitionsDown( $down ) {
+               if ( $down >= count( $this->partitionQueues ) ) {
+                       throw new JobQueueError( 'No queue partitions available.' );
+               }
+       }
+
+       public function setTestingPrefix( $key ) {
+               /** @var JobQueue $queue */
+               foreach ( $this->partitionQueues as $queue ) {
+                       $queue->setTestingPrefix( $key );
+               }
+       }
+
+       /**
+        * @param $property
+        * @return string
+        */
+       private function getCacheKey( $property ) {
+               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
+
+               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, $property );
+       }
+}
diff --git a/includes/jobqueue/JobQueueGroup.php b/includes/jobqueue/JobQueueGroup.php
new file mode 100644 (file)
index 0000000..90742ce
--- /dev/null
@@ -0,0 +1,417 @@
+<?php
+/**
+ * Job queue base code.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Class to handle enqueueing of background jobs
+ *
+ * @ingroup JobQueue
+ * @since 1.21
+ */
+class JobQueueGroup {
+       /** @var array */
+       protected static $instances = array();
+
+       /** @var ProcessCacheLRU */
+       protected $cache;
+
+       /** @var string Wiki ID */
+       protected $wiki;
+
+       /** @var array Map of (bucket => (queue => JobQueue, types => list of types) */
+       protected $coalescedQueues;
+
+       const TYPE_DEFAULT = 1; // integer; jobs popped by default
+       const TYPE_ANY = 2; // integer; any job
+
+       const USE_CACHE = 1; // integer; use process or persistent cache
+
+       const PROC_CACHE_TTL = 15; // integer; seconds
+
+       const CACHE_VERSION = 1; // integer; cache version
+
+       /**
+        * @param string $wiki Wiki ID
+        */
+       protected function __construct( $wiki ) {
+               $this->wiki = $wiki;
+               $this->cache = new ProcessCacheLRU( 10 );
+       }
+
+       /**
+        * @param bool|string $wiki Wiki ID
+        * @return JobQueueGroup
+        */
+       public static function singleton( $wiki = false ) {
+               $wiki = ( $wiki === false ) ? wfWikiID() : $wiki;
+               if ( !isset( self::$instances[$wiki] ) ) {
+                       self::$instances[$wiki] = new self( $wiki );
+               }
+
+               return self::$instances[$wiki];
+       }
+
+       /**
+        * Destroy the singleton instances
+        *
+        * @return void
+        */
+       public static function destroySingletons() {
+               self::$instances = array();
+       }
+
+       /**
+        * Get the job queue object for a given queue type
+        *
+        * @param string $type
+        * @return JobQueue
+        */
+       public function get( $type ) {
+               global $wgJobTypeConf;
+
+               $conf = array( 'wiki' => $this->wiki, 'type' => $type );
+               if ( isset( $wgJobTypeConf[$type] ) ) {
+                       $conf = $conf + $wgJobTypeConf[$type];
+               } else {
+                       $conf = $conf + $wgJobTypeConf['default'];
+               }
+
+               return JobQueue::factory( $conf );
+       }
+
+       /**
+        * Insert jobs into the respective queues of with the belong.
+        *
+        * This inserts the jobs into the queue specified by $wgJobTypeConf
+        * and updates the aggregate job queue information cache as needed.
+        *
+        * @param Job|array $jobs A single Job or a list of Jobs
+        * @throws MWException
+        * @return bool
+        */
+       public function push( $jobs ) {
+               $jobs = is_array( $jobs ) ? $jobs : array( $jobs );
+               if ( !count( $jobs ) ) {
+                       return true;
+               }
+
+               $jobsByType = array(); // (job type => list of jobs)
+               foreach ( $jobs as $job ) {
+                       if ( $job instanceof IJobSpecification ) {
+                               $jobsByType[$job->getType()][] = $job;
+                       } else {
+                               throw new MWException( "Attempted to push a non-Job object into a queue." );
+                       }
+               }
+
+               $ok = true;
+               foreach ( $jobsByType as $type => $jobs ) {
+                       if ( $this->get( $type )->push( $jobs ) ) {
+                               JobQueueAggregator::singleton()->notifyQueueNonEmpty( $this->wiki, $type );
+                       } else {
+                               $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
+        *
+        * This pops a job off a queue as specified by $wgJobTypeConf and
+        * updates the aggregate job queue information cache as needed.
+        *
+        * @param int|string $qtype JobQueueGroup::TYPE_* constant or job type string
+        * @param int $flags Bitfield of JobQueueGroup::USE_* constants
+        * @param array $blacklist List of job types to ignore
+        * @return Job|bool Returns false on failure
+        */
+       public function pop( $qtype = self::TYPE_DEFAULT, $flags = 0, array $blacklist = array() ) {
+               $job = false;
+
+               if ( is_string( $qtype ) ) { // specific job type
+                       if ( !in_array( $qtype, $blacklist ) ) {
+                               $job = $this->get( $qtype )->pop();
+                               if ( !$job ) {
+                                       JobQueueAggregator::singleton()->notifyQueueEmpty( $this->wiki, $qtype );
+                               }
+                       }
+               } else { // any job in the "default" jobs types
+                       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 ( $qtype == self::TYPE_DEFAULT ) {
+                               $types = array_intersect( $types, $this->getDefaultQueueTypes() );
+                       }
+
+                       $types = array_diff( $types, $blacklist ); // avoid selected types
+                       shuffle( $types ); // avoid starvation
+
+                       foreach ( $types as $type ) { // for each queue...
+                               $job = $this->get( $type )->pop();
+                               if ( $job ) { // found
+                                       break;
+                               } else { // not found
+                                       JobQueueAggregator::singleton()->notifyQueueEmpty( $this->wiki, $type );
+                                       $this->cache->clear( 'queues-ready' );
+                               }
+                       }
+               }
+
+               return $job;
+       }
+
+       /**
+        * Acknowledge that a job was completed
+        *
+        * @param Job $job
+        * @return bool
+        */
+       public function ack( Job $job ) {
+               return $this->get( $job->getType() )->ack( $job );
+       }
+
+       /**
+        * Register the "root job" of a given job into the queue for de-duplication.
+        * This should only be called right *after* all the new jobs have been inserted.
+        *
+        * @param Job $job
+        * @return bool
+        */
+       public function deduplicateRootJob( Job $job ) {
+               return $this->get( $job->getType() )->deduplicateRootJob( $job );
+       }
+
+       /**
+        * Wait for any slaves or backup queue servers to catch up.
+        *
+        * This does nothing for certain queue classes.
+        *
+        * @return void
+        * @throws MWException
+        */
+       public function waitForBackups() {
+               global $wgJobTypeConf;
+
+               wfProfileIn( __METHOD__ );
+               // Try to avoid doing this more than once per queue storage medium
+               foreach ( $wgJobTypeConf as $type => $conf ) {
+                       $this->get( $type )->waitForBackups();
+               }
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * Get the list of queue types
+        *
+        * @return array List of strings
+        */
+       public function getQueueTypes() {
+               return array_keys( $this->getCachedConfigVar( 'wgJobClasses' ) );
+       }
+
+       /**
+        * Get the list of default queue types
+        *
+        * @return array List of strings
+        */
+       public function getDefaultQueueTypes() {
+               global $wgJobTypesExcludedFromDefaultQueue;
+
+               return array_diff( $this->getQueueTypes(), $wgJobTypesExcludedFromDefaultQueue );
+       }
+
+       /**
+        * Get the list of job types that have non-empty queues
+        *
+        * @return array List of job types that have non-empty queues
+        */
+       public function getQueuesWithJobs() {
+               $types = array();
+               foreach ( $this->getCoalescedQueues() as $info ) {
+                       $nonEmpty = $info['queue']->getSiblingQueuesWithJobs( $this->getQueueTypes() );
+                       if ( is_array( $nonEmpty ) ) { // batching features supported
+                               $types = array_merge( $types, $nonEmpty );
+                       } else { // we have to go through the queues in the bucket one-by-one
+                               foreach ( $info['types'] as $type ) {
+                                       if ( !$this->get( $type )->isEmpty() ) {
+                                               $types[] = $type;
+                                       }
+                               }
+                       }
+               }
+
+               return $types;
+       }
+
+       /**
+        * Get the size of the queus for a list of job types
+        *
+        * @return array Map of (job type => size)
+        */
+       public function getQueueSizes() {
+               $sizeMap = array();
+               foreach ( $this->getCoalescedQueues() as $info ) {
+                       $sizes = $info['queue']->getSiblingQueueSizes( $this->getQueueTypes() );
+                       if ( is_array( $sizes ) ) { // batching features supported
+                               $sizeMap = $sizeMap + $sizes;
+                       } else { // we have to go through the queues in the bucket one-by-one
+                               foreach ( $info['types'] as $type ) {
+                                       $sizeMap[$type] = $this->get( $type )->getSize();
+                               }
+                       }
+               }
+
+               return $sizeMap;
+       }
+
+       /**
+        * @return array
+        */
+       protected function getCoalescedQueues() {
+               global $wgJobTypeConf;
+
+               if ( $this->coalescedQueues === null ) {
+                       $this->coalescedQueues = array();
+                       foreach ( $wgJobTypeConf as $type => $conf ) {
+                               $queue = JobQueue::factory(
+                                       array( 'wiki' => $this->wiki, 'type' => 'null' ) + $conf );
+                               $loc = $queue->getCoalesceLocationInternal();
+                               if ( !isset( $this->coalescedQueues[$loc] ) ) {
+                                       $this->coalescedQueues[$loc]['queue'] = $queue;
+                                       $this->coalescedQueues[$loc]['types'] = array();
+                               }
+                               if ( $type === 'default' ) {
+                                       $this->coalescedQueues[$loc]['types'] = array_merge(
+                                               $this->coalescedQueues[$loc]['types'],
+                                               array_diff( $this->getQueueTypes(), array_keys( $wgJobTypeConf ) )
+                                       );
+                               } else {
+                                       $this->coalescedQueues[$loc]['types'][] = $type;
+                               }
+                       }
+               }
+
+               return $this->coalescedQueues;
+       }
+
+       /**
+        * Execute any due periodic queue maintenance tasks for all queues.
+        *
+        * A task is "due" if the time ellapsed since the last run is greater than
+        * the defined run period. Concurrent calls to this function will cause tasks
+        * to be attempted twice, so they may need their own methods of mutual exclusion.
+        *
+        * @return int Number of tasks run
+        */
+       public function executeReadyPeriodicTasks() {
+               global $wgMemc;
+
+               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
+               $key = wfForeignMemcKey( $db, $prefix, 'jobqueuegroup', 'taskruns', 'v1' );
+               $lastRuns = $wgMemc->get( $key ); // (queue => task => UNIX timestamp)
+
+               $count = 0;
+               $tasksRun = array(); // (queue => task => UNIX timestamp)
+               foreach ( $this->getQueueTypes() as $type ) {
+                       $queue = $this->get( $type );
+                       foreach ( $queue->getPeriodicTasks() as $task => $definition ) {
+                               if ( $definition['period'] <= 0 ) {
+                                       continue; // disabled
+                               } elseif ( !isset( $lastRuns[$type][$task] )
+                                       || $lastRuns[$type][$task] < ( time() - $definition['period'] )
+                               ) {
+                                       try {
+                                               if ( call_user_func( $definition['callback'] ) !== null ) {
+                                                       $tasksRun[$type][$task] = time();
+                                                       ++$count;
+                                               }
+                                       } catch ( JobQueueError $e ) {
+                                               MWExceptionHandler::logException( $e );
+                                       }
+                               }
+                       }
+                       // The tasks may have recycled jobs or release delayed jobs into the queue
+                       if ( isset( $tasksRun[$type] ) && !$queue->isEmpty() ) {
+                               JobQueueAggregator::singleton()->notifyQueueNonEmpty( $this->wiki, $type );
+                       }
+               }
+
+               $wgMemc->merge( $key, function ( $cache, $key, $lastRuns ) use ( $tasksRun ) {
+                       if ( is_array( $lastRuns ) ) {
+                               foreach ( $tasksRun as $type => $tasks ) {
+                                       foreach ( $tasks as $task => $timestamp ) {
+                                               if ( !isset( $lastRuns[$type][$task] )
+                                                       || $timestamp > $lastRuns[$type][$task]
+                                               ) {
+                                                       $lastRuns[$type][$task] = $timestamp;
+                                               }
+                                       }
+                               }
+                       } else {
+                               $lastRuns = $tasksRun;
+                       }
+
+                       return $lastRuns;
+               } );
+
+               return $count;
+       }
+
+       /**
+        * @param $name string
+        * @return mixed
+        */
+       private function getCachedConfigVar( $name ) {
+               global $wgConf, $wgMemc;
+
+               if ( $this->wiki === wfWikiID() ) {
+                       return $GLOBALS[$name]; // common case
+               } else {
+                       list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
+                       $key = wfForeignMemcKey( $db, $prefix, 'configvalue', $name );
+                       $value = $wgMemc->get( $key ); // ('v' => ...) or false
+                       if ( is_array( $value ) ) {
+                               return $value['v'];
+                       } else {
+                               $value = $wgConf->getConfig( $this->wiki, $name );
+                               $wgMemc->set( $key, array( 'v' => $value ), 86400 + mt_rand( 0, 86400 ) );
+
+                               return $value;
+                       }
+               }
+       }
+}
diff --git a/includes/jobqueue/JobQueueRedis.php b/includes/jobqueue/JobQueueRedis.php
new file mode 100644 (file)
index 0000000..c785cb2
--- /dev/null
@@ -0,0 +1,874 @@
+<?php
+/**
+ * Redis-backed job queue code.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Class to handle job queues stored in Redis
+ *
+ * This is faster, less resource intensive, queue that JobQueueDB.
+ * All data for a queue using this class is placed into one redis server.
+ *
+ * There are eight main redis keys used to track jobs:
+ *   - l-unclaimed  : A list of job IDs used for ready unclaimed jobs
+ *   - z-claimed    : A sorted set of (job ID, UNIX timestamp as score) used for job retries
+ *   - z-abandoned  : A sorted set of (job ID, UNIX timestamp as score) used for broken jobs
+ *   - z-delayed    : A sorted set of (job ID, UNIX timestamp as score) used for delayed jobs
+ *   - h-idBySha1   : A hash of (SHA1 => job ID) for unclaimed jobs used for de-duplication
+ *   - h-sha1ById   : A hash of (job ID => SHA1) for unclaimed jobs used for de-duplication
+ *   - h-attempts   : A hash of (job ID => attempt count) used for job claiming/retries
+ *   - h-data       : A hash of (job ID => serialized blobs) for job storage
+ * A job ID can be in only one of z-delayed, l-unclaimed, z-claimed, and z-abandoned.
+ * If an ID appears in any of those lists, it should have a h-data entry for its ID.
+ * If a job has a SHA1 de-duplication value and its ID is in l-unclaimed or z-delayed, then
+ * there should be no other such jobs with that SHA1. Every h-idBySha1 entry has an h-sha1ById
+ * entry and every h-sha1ById must refer to an ID that is l-unclaimed. If a job has its
+ * ID in z-claimed or z-abandoned, then it must also have an h-attempts entry for its ID.
+ *
+ * Additionally, "rootjob:* keys track "root jobs" used for additional de-duplication.
+ * Aside from root job keys, all keys have no expiry, and are only removed when jobs are run.
+ * All the keys are prefixed with the relevant wiki ID information.
+ *
+ * This class requires Redis 2.6 as it makes use Lua scripts for fast atomic operations.
+ * Additionally, it should be noted that redis has different persistence modes, such
+ * as rdb snapshots, journaling, and no persistent. Appropriate configuration should be
+ * made on the servers based on what queues are using it and what tolerance they have.
+ *
+ * @ingroup JobQueue
+ * @ingroup Redis
+ * @since 1.22
+ */
+class JobQueueRedis extends JobQueue {
+       /** @var RedisConnectionPool */
+       protected $redisPool;
+
+       /** @var string Server address */
+       protected $server;
+
+       /** @var string Compression method to use */
+       protected $compression;
+
+       const MAX_AGE_PRUNE = 604800; // integer; seconds a job can live once claimed (7 days)
+
+       /** @var string Key to prefix the queue keys with (used for testing) */
+       protected $key;
+
+       /**
+        * @var null|int maximum seconds between execution of periodic tasks.  Used to speed up
+        * testing but should otherwise be left unset.
+        */
+       protected $maximumPeriodicTaskSeconds;
+
+       /**
+        * @params include:
+        *   - redisConfig : An array of parameters to RedisConnectionPool::__construct().
+        *                   Note that the serializer option is ignored as "none" is always used.
+        *   - redisServer : A hostname/port combination or the absolute path of a UNIX socket.
+        *                   If a hostname is specified but no port, the standard port number
+        *                   6379 will be used. Required.
+        *   - compression : The type of compression to use; one of (none,gzip).
+        *   - maximumPeriodicTaskSeconds : Maximum seconds between check periodic tasks.  Set to
+        *                   force faster execution of periodic tasks for inegration tests that
+        *                   rely on checkDelay.  Without this the integration tests are very very
+        *                   slow.  This really shouldn't be set in production.
+        * @param array $params
+        */
+       public function __construct( array $params ) {
+               parent::__construct( $params );
+               $params['redisConfig']['serializer'] = 'none'; // make it easy to use Lua
+               $this->server = $params['redisServer'];
+               $this->compression = isset( $params['compression'] ) ? $params['compression'] : 'none';
+               $this->redisPool = RedisConnectionPool::singleton( $params['redisConfig'] );
+               $this->maximumPeriodicTaskSeconds = isset( $params['maximumPeriodicTaskSeconds'] ) ?
+                       $params['maximumPeriodicTaskSeconds'] : null;
+       }
+
+       protected function supportedOrders() {
+               return array( 'timestamp', 'fifo' );
+       }
+
+       protected function optimalOrder() {
+               return 'fifo';
+       }
+
+       protected function supportsDelayedJobs() {
+               return true;
+       }
+
+       /**
+        * @see JobQueue::doIsEmpty()
+        * @return bool
+        * @throws MWException
+        */
+       protected function doIsEmpty() {
+               return $this->doGetSize() == 0;
+       }
+
+       /**
+        * @see JobQueue::doGetSize()
+        * @return int
+        * @throws MWException
+        */
+       protected function doGetSize() {
+               $conn = $this->getConnection();
+               try {
+                       return $conn->lSize( $this->getQueueKey( 'l-unclaimed' ) );
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+       }
+
+       /**
+        * @see JobQueue::doGetAcquiredCount()
+        * @return int
+        * @throws JobQueueError
+        */
+       protected function doGetAcquiredCount() {
+               if ( $this->claimTTL <= 0 ) {
+                       return 0; // no acknowledgements
+               }
+               $conn = $this->getConnection();
+               try {
+                       $conn->multi( Redis::PIPELINE );
+                       $conn->zSize( $this->getQueueKey( 'z-claimed' ) );
+                       $conn->zSize( $this->getQueueKey( 'z-abandoned' ) );
+
+                       return array_sum( $conn->exec() );
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+       }
+
+       /**
+        * @see JobQueue::doGetDelayedCount()
+        * @return int
+        * @throws JobQueueError
+        */
+       protected function doGetDelayedCount() {
+               if ( !$this->checkDelay ) {
+                       return 0; // no delayed jobs
+               }
+               $conn = $this->getConnection();
+               try {
+                       return $conn->zSize( $this->getQueueKey( 'z-delayed' ) );
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+       }
+
+       /**
+        * @see JobQueue::doGetAbandonedCount()
+        * @return int
+        * @throws JobQueueError
+        */
+       protected function doGetAbandonedCount() {
+               if ( $this->claimTTL <= 0 ) {
+                       return 0; // no acknowledgements
+               }
+               $conn = $this->getConnection();
+               try {
+                       return $conn->zSize( $this->getQueueKey( 'z-abandoned' ) );
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+       }
+
+       /**
+        * @see JobQueue::doBatchPush()
+        * @param array $jobs
+        * @param $flags
+        * @return bool
+        * @throws JobQueueError
+        */
+       protected function doBatchPush( array $jobs, $flags ) {
+               // Convert the jobs into field maps (de-duplicated against each other)
+               $items = array(); // (job ID => job fields map)
+               foreach ( $jobs as $job ) {
+                       $item = $this->getNewJobFields( $job );
+                       if ( strlen( $item['sha1'] ) ) { // hash identifier => de-duplicate
+                               $items[$item['sha1']] = $item;
+                       } else {
+                               $items[$item['uuid']] = $item;
+                       }
+               }
+
+               if ( !count( $items ) ) {
+                       return true; // nothing to do
+               }
+
+               $conn = $this->getConnection();
+               try {
+                       // Actually push the non-duplicate jobs into the queue...
+                       if ( $flags & self::QOS_ATOMIC ) {
+                               $batches = array( $items ); // all or nothing
+                       } else {
+                               $batches = array_chunk( $items, 500 ); // avoid tying up the server
+                       }
+                       $failed = 0;
+                       $pushed = 0;
+                       foreach ( $batches as $itemBatch ) {
+                               $added = $this->pushBlobs( $conn, $itemBatch );
+                               if ( is_int( $added ) ) {
+                                       $pushed += $added;
+                               } else {
+                                       $failed += count( $itemBatch );
+                               }
+                       }
+                       if ( $failed > 0 ) {
+                               wfDebugLog( 'JobQueueRedis', "Could not insert {$failed} {$this->type} job(s)." );
+
+                               return false;
+                       }
+                       JobQueue::incrStats( 'job-insert', $this->type, count( $items ) );
+                       JobQueue::incrStats( 'job-insert-duplicate', $this->type,
+                               count( $items ) - $failed - $pushed );
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+
+               return true;
+       }
+
+       /**
+        * @param RedisConnRef $conn
+        * @param array $items List of results from JobQueueRedis::getNewJobFields()
+        * @return int Number of jobs inserted (duplicates are ignored)
+        * @throws RedisException
+        */
+       protected function pushBlobs( RedisConnRef $conn, array $items ) {
+               $args = array(); // ([id, sha1, rtime, blob [, id, sha1, rtime, blob ... ] ] )
+               foreach ( $items as $item ) {
+                       $args[] = (string)$item['uuid'];
+                       $args[] = (string)$item['sha1'];
+                       $args[] = (string)$item['rtimestamp'];
+                       $args[] = (string)$this->serialize( $item );
+               }
+               static $script =
+<<<LUA
+               local kUnclaimed, kSha1ById, kIdBySha1, kDelayed, kData = unpack(KEYS)
+               if #ARGV % 4 ~= 0 then return redis.error_reply('Unmatched arguments') end
+               local pushed = 0
+               for i = 1,#ARGV,4 do
+                       local id,sha1,rtimestamp,blob = ARGV[i],ARGV[i+1],ARGV[i+2],ARGV[i+3]
+                       if sha1 == '' or redis.call('hExists',kIdBySha1,sha1) == 0 then
+                               if 1*rtimestamp > 0 then
+                                       -- Insert into delayed queue (release time as score)
+                                       redis.call('zAdd',kDelayed,rtimestamp,id)
+                               else
+                                       -- Insert into unclaimed queue
+                                       redis.call('lPush',kUnclaimed,id)
+                               end
+                               if sha1 ~= '' then
+                                       redis.call('hSet',kSha1ById,id,sha1)
+                                       redis.call('hSet',kIdBySha1,sha1,id)
+                               end
+                               redis.call('hSet',kData,id,blob)
+                               pushed = pushed + 1
+                       end
+               end
+               return pushed
+LUA;
+               return $conn->luaEval( $script,
+                       array_merge(
+                               array(
+                                       $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
+                                       $this->getQueueKey( 'h-sha1ById' ), # KEYS[2]
+                                       $this->getQueueKey( 'h-idBySha1' ), # KEYS[3]
+                                       $this->getQueueKey( 'z-delayed' ), # KEYS[4]
+                                       $this->getQueueKey( 'h-data' ), # KEYS[5]
+                               ),
+                               $args
+                       ),
+                       5 # number of first argument(s) that are keys
+               );
+       }
+
+       /**
+        * @see JobQueue::doPop()
+        * @return Job|bool
+        * @throws JobQueueError
+        */
+       protected function doPop() {
+               $job = false;
+
+               // Push ready delayed jobs into the queue every 10 jobs to spread the load.
+               // This is also done as a periodic task, but we don't want too much done at once.
+               if ( $this->checkDelay && mt_rand( 0, 9 ) == 0 ) {
+                       $this->recyclePruneAndUndelayJobs();
+               }
+
+               $conn = $this->getConnection();
+               try {
+                       do {
+                               if ( $this->claimTTL > 0 ) {
+                                       // Keep the claimed job list down for high-traffic queues
+                                       if ( mt_rand( 0, 99 ) == 0 ) {
+                                               $this->recyclePruneAndUndelayJobs();
+                                       }
+                                       $blob = $this->popAndAcquireBlob( $conn );
+                               } else {
+                                       $blob = $this->popAndDeleteBlob( $conn );
+                               }
+                               if ( $blob === false ) {
+                                       break; // no jobs; nothing to do
+                               }
+
+                               JobQueue::incrStats( 'job-pop', $this->type );
+                               $item = $this->unserialize( $blob );
+                               if ( $item === false ) {
+                                       wfDebugLog( 'JobQueueRedis', "Could not unserialize {$this->type} job." );
+                                       continue;
+                               }
+
+                               // If $item is invalid, recyclePruneAndUndelayJobs() will cleanup as needed
+                               $job = $this->getJobFromFields( $item ); // may be false
+                       } while ( !$job ); // job may be false if invalid
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+
+               return $job;
+       }
+
+       /**
+        * @param RedisConnRef $conn
+        * @return array serialized string or false
+        * @throws RedisException
+        */
+       protected function popAndDeleteBlob( RedisConnRef $conn ) {
+               static $script =
+<<<LUA
+               local kUnclaimed, kSha1ById, kIdBySha1, kData = unpack(KEYS)
+               -- Pop an item off the queue
+               local id = redis.call('rpop',kUnclaimed)
+               if not id then return false end
+               -- Get the job data and remove it
+               local item = redis.call('hGet',kData,id)
+               redis.call('hDel',kData,id)
+               -- Allow new duplicates of this job
+               local sha1 = redis.call('hGet',kSha1ById,id)
+               if sha1 then redis.call('hDel',kIdBySha1,sha1) end
+               redis.call('hDel',kSha1ById,id)
+               -- Return the job data
+               return item
+LUA;
+               return $conn->luaEval( $script,
+                       array(
+                               $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
+                               $this->getQueueKey( 'h-sha1ById' ), # KEYS[2]
+                               $this->getQueueKey( 'h-idBySha1' ), # KEYS[3]
+                               $this->getQueueKey( 'h-data' ), # KEYS[4]
+                       ),
+                       4 # number of first argument(s) that are keys
+               );
+       }
+
+       /**
+        * @param RedisConnRef $conn
+        * @return array serialized string or false
+        * @throws RedisException
+        */
+       protected function popAndAcquireBlob( RedisConnRef $conn ) {
+               static $script =
+<<<LUA
+               local kUnclaimed, kSha1ById, kIdBySha1, kClaimed, kAttempts, kData = unpack(KEYS)
+               -- Pop an item off the queue
+               local id = redis.call('rPop',kUnclaimed)
+               if not id then return false end
+               -- Allow new duplicates of this job
+               local sha1 = redis.call('hGet',kSha1ById,id)
+               if sha1 then redis.call('hDel',kIdBySha1,sha1) end
+               redis.call('hDel',kSha1ById,id)
+               -- Mark the jobs as claimed and return it
+               redis.call('zAdd',kClaimed,ARGV[1],id)
+               redis.call('hIncrBy',kAttempts,id,1)
+               return redis.call('hGet',kData,id)
+LUA;
+               return $conn->luaEval( $script,
+                       array(
+                               $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
+                               $this->getQueueKey( 'h-sha1ById' ), # KEYS[2]
+                               $this->getQueueKey( 'h-idBySha1' ), # KEYS[3]
+                               $this->getQueueKey( 'z-claimed' ), # KEYS[4]
+                               $this->getQueueKey( 'h-attempts' ), # KEYS[5]
+                               $this->getQueueKey( 'h-data' ), # KEYS[6]
+                               time(), # ARGV[1] (injected to be replication-safe)
+                       ),
+                       6 # number of first argument(s) that are keys
+               );
+       }
+
+       /**
+        * @see JobQueue::doAck()
+        * @param Job $job
+        * @return Job|bool
+        * @throws MWException|JobQueueError
+        */
+       protected function doAck( Job $job ) {
+               if ( !isset( $job->metadata['uuid'] ) ) {
+                       throw new MWException( "Job of type '{$job->getType()}' has no UUID." );
+               }
+               if ( $this->claimTTL > 0 ) {
+                       $conn = $this->getConnection();
+                       try {
+                               static $script =
+<<<LUA
+                               local kClaimed, kAttempts, kData = unpack(KEYS)
+                               -- Unmark the job as claimed
+                               redis.call('zRem',kClaimed,ARGV[1])
+                               redis.call('hDel',kAttempts,ARGV[1])
+                               -- Delete the job data itself
+                               return redis.call('hDel',kData,ARGV[1])
+LUA;
+                               $res = $conn->luaEval( $script,
+                                       array(
+                                               $this->getQueueKey( 'z-claimed' ), # KEYS[1]
+                                               $this->getQueueKey( 'h-attempts' ), # KEYS[2]
+                                               $this->getQueueKey( 'h-data' ), # KEYS[3]
+                                               $job->metadata['uuid'] # ARGV[1]
+                                       ),
+                                       3 # number of first argument(s) that are keys
+                               );
+
+                               if ( !$res ) {
+                                       wfDebugLog( 'JobQueueRedis', "Could not acknowledge {$this->type} job." );
+
+                                       return false;
+                               }
+                       } catch ( RedisException $e ) {
+                               $this->throwRedisException( $conn, $e );
+                       }
+               }
+
+               return true;
+       }
+
+       /**
+        * @see JobQueue::doDeduplicateRootJob()
+        * @param Job $job
+        * @return bool
+        * @throws MWException|JobQueueError
+        */
+       protected function doDeduplicateRootJob( Job $job ) {
+               if ( !$job->hasRootJobParams() ) {
+                       throw new MWException( "Cannot register root job; missing parameters." );
+               }
+               $params = $job->getRootJobParams();
+
+               $key = $this->getRootJobCacheKey( $params['rootJobSignature'] );
+
+               $conn = $this->getConnection();
+               try {
+                       $timestamp = $conn->get( $key ); // current last timestamp of this job
+                       if ( $timestamp && $timestamp >= $params['rootJobTimestamp'] ) {
+                               return true; // a newer version of this root job was enqueued
+                       }
+
+                       // Update the timestamp of the last root job started at the location...
+                       return $conn->set( $key, $params['rootJobTimestamp'], self::ROOTJOB_TTL ); // 2 weeks
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+       }
+
+       /**
+        * @see JobQueue::doIsRootJobOldDuplicate()
+        * @param Job $job
+        * @return bool
+        * @throws JobQueueError
+        */
+       protected function doIsRootJobOldDuplicate( Job $job ) {
+               if ( !$job->hasRootJobParams() ) {
+                       return false; // job has no de-deplication info
+               }
+               $params = $job->getRootJobParams();
+
+               $conn = $this->getConnection();
+               try {
+                       // Get the last time this root job was enqueued
+                       $timestamp = $conn->get( $this->getRootJobCacheKey( $params['rootJobSignature'] ) );
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+
+               // Check if a new root job was started at the location after this one's...
+               return ( $timestamp && $timestamp > $params['rootJobTimestamp'] );
+       }
+
+       /**
+        * @see JobQueue::doDelete()
+        * @return bool
+        * @throws JobQueueError
+        */
+       protected function doDelete() {
+               static $props = array( 'l-unclaimed', 'z-claimed', 'z-abandoned',
+                       'z-delayed', 'h-idBySha1', 'h-sha1ById', 'h-attempts', 'h-data' );
+
+               $conn = $this->getConnection();
+               try {
+                       $keys = array();
+                       foreach ( $props as $prop ) {
+                               $keys[] = $this->getQueueKey( $prop );
+                       }
+
+                       return ( $conn->delete( $keys ) !== false );
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+       }
+
+       /**
+        * @see JobQueue::getAllQueuedJobs()
+        * @return Iterator
+        */
+       public function getAllQueuedJobs() {
+               $conn = $this->getConnection();
+               try {
+                       $that = $this;
+
+                       return new MappedIterator(
+                               $conn->lRange( $this->getQueueKey( 'l-unclaimed' ), 0, -1 ),
+                               function ( $uid ) use ( $that, $conn ) {
+                                       return $that->getJobFromUidInternal( $uid, $conn );
+                               },
+                               array( 'accept' => function ( $job ) {
+                                       return is_object( $job );
+                               } )
+                       );
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+       }
+
+       /**
+        * @see JobQueue::getAllQueuedJobs()
+        * @return Iterator
+        */
+       public function getAllDelayedJobs() {
+               $conn = $this->getConnection();
+               try {
+                       $that = $this;
+
+                       return new MappedIterator( // delayed jobs
+                               $conn->zRange( $this->getQueueKey( 'z-delayed' ), 0, -1 ),
+                               function ( $uid ) use ( $that, $conn ) {
+                                       return $that->getJobFromUidInternal( $uid, $conn );
+                               },
+                               array( 'accept' => function ( $job ) {
+                                       return is_object( $job );
+                               } )
+                       );
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+       }
+
+       public function getCoalesceLocationInternal() {
+               return "RedisServer:" . $this->server;
+       }
+
+       protected function doGetSiblingQueuesWithJobs( array $types ) {
+               return array_keys( array_filter( $this->doGetSiblingQueueSizes( $types ) ) );
+       }
+
+       protected function doGetSiblingQueueSizes( array $types ) {
+               $sizes = array(); // (type => size)
+               $types = array_values( $types ); // reindex
+               $conn = $this->getConnection();
+               try {
+                       $conn->multi( Redis::PIPELINE );
+                       foreach ( $types as $type ) {
+                               $conn->lSize( $this->getQueueKey( 'l-unclaimed', $type ) );
+                       }
+                       $res = $conn->exec();
+                       if ( is_array( $res ) ) {
+                               foreach ( $res as $i => $size ) {
+                                       $sizes[$types[$i]] = $size;
+                               }
+                       }
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+
+               return $sizes;
+       }
+
+       /**
+        * This function should not be called outside JobQueueRedis
+        *
+        * @param $uid string
+        * @param $conn RedisConnRef
+        * @return Job|bool Returns false if the job does not exist
+        * @throws MWException|JobQueueError
+        */
+       public function getJobFromUidInternal( $uid, RedisConnRef $conn ) {
+               try {
+                       $data = $conn->hGet( $this->getQueueKey( 'h-data' ), $uid );
+                       if ( $data === false ) {
+                               return false; // not found
+                       }
+                       $item = $this->unserialize( $conn->hGet( $this->getQueueKey( 'h-data' ), $uid ) );
+                       if ( !is_array( $item ) ) { // this shouldn't happen
+                               throw new MWException( "Could not find job with ID '$uid'." );
+                       }
+                       $title = Title::makeTitle( $item['namespace'], $item['title'] );
+                       $job = Job::factory( $item['type'], $title, $item['params'] );
+                       $job->metadata['uuid'] = $item['uuid'];
+
+                       return $job;
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+       }
+
+       /**
+        * Recycle or destroy any jobs that have been claimed for too long
+        * and release any ready delayed jobs into the queue
+        *
+        * @return int Number of jobs recycled/deleted/undelayed
+        * @throws MWException|JobQueueError
+        */
+       public function recyclePruneAndUndelayJobs() {
+               $count = 0;
+               // For each job item that can be retried, we need to add it back to the
+               // main queue and remove it from the list of currenty claimed job items.
+               // For those that cannot, they are marked as dead and kept around for
+               // investigation and manual job restoration but are eventually deleted.
+               $conn = $this->getConnection();
+               try {
+                       $now = time();
+                       static $script =
+<<<LUA
+                       local kClaimed, kAttempts, kUnclaimed, kData, kAbandoned, kDelayed = unpack(KEYS)
+                       local released,abandoned,pruned,undelayed = 0,0,0,0
+                       -- Get all non-dead jobs that have an expired claim on them.
+                       -- The score for each item is the last claim timestamp (UNIX).
+                       local staleClaims = redis.call('zRangeByScore',kClaimed,0,ARGV[1])
+                       for k,id in ipairs(staleClaims) do
+                               local timestamp = redis.call('zScore',kClaimed,id)
+                               local attempts = redis.call('hGet',kAttempts,id)
+                               if attempts < ARGV[3] then
+                                       -- Claim expired and retries left: re-enqueue the job
+                                       redis.call('lPush',kUnclaimed,id)
+                                       redis.call('hIncrBy',kAttempts,id,1)
+                                       released = released + 1
+                               else
+                                       -- Claim expired and no retries left: mark the job as dead
+                                       redis.call('zAdd',kAbandoned,timestamp,id)
+                                       abandoned = abandoned + 1
+                               end
+                               redis.call('zRem',kClaimed,id)
+                       end
+                       -- Get all of the dead jobs that have been marked as dead for too long.
+                       -- The score for each item is the last claim timestamp (UNIX).
+                       local deadClaims = redis.call('zRangeByScore',kAbandoned,0,ARGV[2])
+                       for k,id in ipairs(deadClaims) do
+                               -- Stale and out of retries: remove any traces of the job
+                               redis.call('zRem',kAbandoned,id)
+                               redis.call('hDel',kAttempts,id)
+                               redis.call('hDel',kData,id)
+                               pruned = pruned + 1
+                       end
+                       -- Get the list of ready delayed jobs, sorted by readiness (UNIX timestamp)
+                       local ids = redis.call('zRangeByScore',kDelayed,0,ARGV[4])
+                       -- Migrate the jobs from the "delayed" set to the "unclaimed" list
+                       for k,id in ipairs(ids) do
+                               redis.call('lPush',kUnclaimed,id)
+                               redis.call('zRem',kDelayed,id)
+                       end
+                       undelayed = #ids
+                       return {released,abandoned,pruned,undelayed}
+LUA;
+                       $res = $conn->luaEval( $script,
+                               array(
+                                       $this->getQueueKey( 'z-claimed' ), # KEYS[1]
+                                       $this->getQueueKey( 'h-attempts' ), # KEYS[2]
+                                       $this->getQueueKey( 'l-unclaimed' ), # KEYS[3]
+                                       $this->getQueueKey( 'h-data' ), # KEYS[4]
+                                       $this->getQueueKey( 'z-abandoned' ), # KEYS[5]
+                                       $this->getQueueKey( 'z-delayed' ), # KEYS[6]
+                                       $now - $this->claimTTL, # ARGV[1]
+                                       $now - self::MAX_AGE_PRUNE, # ARGV[2]
+                                       $this->maxTries, # ARGV[3]
+                                       $now # ARGV[4]
+                               ),
+                               6 # number of first argument(s) that are keys
+                       );
+                       if ( $res ) {
+                               list( $released, $abandoned, $pruned, $undelayed ) = $res;
+                               $count += $released + $pruned + $undelayed;
+                               JobQueue::incrStats( 'job-recycle', $this->type, $released );
+                               JobQueue::incrStats( 'job-abandon', $this->type, $abandoned );
+                       }
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+
+               return $count;
+       }
+
+       /**
+        * @return array
+        */
+       protected function doGetPeriodicTasks() {
+               $periods = array( 3600 ); // standard cleanup (useful on config change)
+               if ( $this->claimTTL > 0 ) {
+                       $periods[] = ceil( $this->claimTTL / 2 ); // avoid bad timing
+               }
+               if ( $this->checkDelay ) {
+                       $periods[] = 300; // 5 minutes
+               }
+               $period = min( $periods );
+               $period = max( $period, 30 ); // sanity
+               // Support override for faster testing
+               if ( $this->maximumPeriodicTaskSeconds !== null ) {
+                       $period = min( $period, $this->maximumPeriodicTaskSeconds );
+               }
+               return array(
+                       'recyclePruneAndUndelayJobs' => array(
+                               'callback' => array( $this, 'recyclePruneAndUndelayJobs' ),
+                               'period'   => $period,
+                       )
+               );
+       }
+
+       /**
+        * @param IJobSpecification $job
+        * @return array
+        */
+       protected function getNewJobFields( IJobSpecification $job ) {
+               return array(
+                       // Fields that describe the nature of the job
+                       'type' => $job->getType(),
+                       'namespace' => $job->getTitle()->getNamespace(),
+                       'title' => $job->getTitle()->getDBkey(),
+                       'params' => $job->getParams(),
+                       // Some jobs cannot run until a "release timestamp"
+                       'rtimestamp' => $job->getReleaseTimestamp() ?: 0,
+                       // Additional job metadata
+                       'uuid' => UIDGenerator::newRawUUIDv4( UIDGenerator::QUICK_RAND ),
+                       'sha1' => $job->ignoreDuplicates()
+                               ? wfBaseConvert( sha1( serialize( $job->getDeduplicationInfo() ) ), 16, 36, 31 )
+                               : '',
+                       'timestamp' => time() // UNIX timestamp
+               );
+       }
+
+       /**
+        * @param $fields array
+        * @return Job|bool
+        */
+       protected function getJobFromFields( array $fields ) {
+               $title = Title::makeTitleSafe( $fields['namespace'], $fields['title'] );
+               if ( $title ) {
+                       $job = Job::factory( $fields['type'], $title, $fields['params'] );
+                       $job->metadata['uuid'] = $fields['uuid'];
+
+                       return $job;
+               }
+
+               return false;
+       }
+
+       /**
+        * @param array $fields
+        * @return string Serialized and possibly compressed version of $fields
+        */
+       protected function serialize( array $fields ) {
+               $blob = serialize( $fields );
+               if ( $this->compression === 'gzip'
+                       && strlen( $blob ) >= 1024
+                       && function_exists( 'gzdeflate' )
+               ) {
+                       $object = (object)array( 'blob' => gzdeflate( $blob ), 'enc' => 'gzip' );
+                       $blobz = serialize( $object );
+
+                       return ( strlen( $blobz ) < strlen( $blob ) ) ? $blobz : $blob;
+               } else {
+                       return $blob;
+               }
+       }
+
+       /**
+        * @param string $blob
+        * @return array|bool Unserialized version of $blob or false
+        */
+       protected function unserialize( $blob ) {
+               $fields = unserialize( $blob );
+               if ( is_object( $fields ) ) {
+                       if ( $fields->enc === 'gzip' && function_exists( 'gzinflate' ) ) {
+                               $fields = unserialize( gzinflate( $fields->blob ) );
+                       } else {
+                               $fields = false;
+                       }
+               }
+
+               return is_array( $fields ) ? $fields : false;
+       }
+
+       /**
+        * Get a connection to the server that handles all sub-queues for this queue
+        *
+        * @return RedisConnRef
+        * @throws JobQueueConnectionError
+        */
+       protected function getConnection() {
+               $conn = $this->redisPool->getConnection( $this->server );
+               if ( !$conn ) {
+                       throw new JobQueueConnectionError( "Unable to connect to redis server." );
+               }
+
+               return $conn;
+       }
+
+       /**
+        * @param $conn RedisConnRef
+        * @param $e RedisException
+        * @throws JobQueueError
+        */
+       protected function throwRedisException( RedisConnRef $conn, $e ) {
+               $this->redisPool->handleError( $conn, $e );
+               throw new JobQueueError( "Redis server error: {$e->getMessage()}\n" );
+       }
+
+       /**
+        * @param $prop string
+        * @param $type string|null
+        * @return string
+        */
+       private function getQueueKey( $prop, $type = null ) {
+               $type = is_string( $type ) ? $type : $this->type;
+               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
+               if ( strlen( $this->key ) ) { // namespaced queue (for testing)
+                       return wfForeignMemcKey( $db, $prefix, 'jobqueue', $type, $this->key, $prop );
+               } else {
+                       return wfForeignMemcKey( $db, $prefix, 'jobqueue', $type, $prop );
+               }
+       }
+
+       /**
+        * @param $key string
+        * @return void
+        */
+       public function setTestingPrefix( $key ) {
+               $this->key = $key;
+       }
+}
diff --git a/includes/jobqueue/JobSpecification.php b/includes/jobqueue/JobSpecification.php
new file mode 100644 (file)
index 0000000..9fa7747
--- /dev/null
@@ -0,0 +1,189 @@
+<?php
+/**
+ * Job queue task description base code.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup JobQueue
+ */
+
+/**
+ * Job queue task description interface
+ *
+ * @ingroup JobQueue
+ * @since 1.23
+ */
+interface IJobSpecification {
+       /**
+        * @return string Job type
+        */
+       public function getType();
+
+       /**
+        * @return array
+        */
+       public function getParams();
+
+       /**
+        * @return int|null UNIX timestamp to delay running this job until, otherwise null
+        */
+       public function getReleaseTimestamp();
+
+       /**
+        * @return bool Whether only one of each identical set of jobs should be run
+        */
+       public function ignoreDuplicates();
+
+       /**
+        * Subclasses may need to override this to make duplication detection work.
+        * The resulting map conveys everything that makes the job unique. This is
+        * only checked if ignoreDuplicates() returns true, meaning that duplicate
+        * jobs are supposed to be ignored.
+        *
+        * @return array Map of key/values
+        */
+       public function getDeduplicationInfo();
+
+       /**
+        * @return Title Descriptive title (this can simply be informative)
+        */
+       public function getTitle();
+}
+
+/**
+ * Job queue task description base code
+ *
+ * Example usage:
+ * <code>
+ * $job = new JobSpecification(
+ *             'null',
+ *             array( 'lives' => 1, 'usleep' => 100, 'pi' => 3.141569 ),
+ *             array( 'removeDuplicates' => 1 ),
+ *             Title::makeTitle( NS_SPECIAL, 'nullity' )
+ * );
+ * JobQueueGroup::singleton()->push( $job )
+ * </code>
+ *
+ * @ingroup JobQueue
+ * @since 1.23
+ */
+class JobSpecification implements IJobSpecification {
+       /** @var string */
+       protected $type;
+
+       /** @var array Array of job parameters or false if none */
+       protected $params;
+
+       /** @var Title */
+       protected $title;
+
+       /** @var bool Expensive jobs may set this to true */
+       protected $ignoreDuplicates;
+
+       /**
+        * @param string $type
+        * @param array $params Map of key/values
+        * @param array $opts Map of key/values
+        * @param Title $title Optional descriptive title
+        */
+       public function __construct(
+               $type, array $params, array $opts = array(), Title $title = null
+       ) {
+               $this->validateParams( $params );
+
+               $this->type = $type;
+               $this->params = $params;
+               $this->title = $title ?: Title::newMainPage();
+               $this->ignoreDuplicates = !empty( $opts['removeDuplicates'] );
+       }
+
+       /**
+        * @param array $params
+        */
+       protected function validateParams( array $params ) {
+               foreach ( $params as $p => $v ) {
+                       if ( is_array( $v ) ) {
+                               $this->validateParams( $v );
+                       } elseif ( !is_scalar( $v ) && $v !== null ) {
+                               throw new UnexpectedValueException( "Job parameter $p is not JSON serializable." );
+                       }
+               }
+       }
+
+       /**
+        * @return string
+        */
+       public function getType() {
+               return $this->type;
+       }
+
+       /**
+        * @return Title
+        */
+       public function getTitle() {
+               return $this->title;
+       }
+
+       /**
+        * @return array
+        */
+       public function getParams() {
+               return $this->params;
+       }
+
+       /**
+        * @return int|null UNIX timestamp to delay running this job until, otherwise null
+        */
+       public function getReleaseTimestamp() {
+               return isset( $this->params['jobReleaseTimestamp'] )
+                       ? wfTimestampOrNull( TS_UNIX, $this->params['jobReleaseTimestamp'] )
+                       : null;
+       }
+
+       /**
+        * @return bool Whether only one of each identical set of jobs should be run
+        */
+       public function ignoreDuplicates() {
+               return $this->ignoreDuplicates;
+       }
+
+       /**
+        * Subclasses may need to override this to make duplication detection work.
+        * The resulting map conveys everything that makes the job unique. This is
+        * only checked if ignoreDuplicates() returns true, meaning that duplicate
+        * jobs are supposed to be ignored.
+        *
+        * @return array Map of key/values
+        */
+       public function getDeduplicationInfo() {
+               $info = array(
+                       'type' => $this->getType(),
+                       'namespace' => $this->getTitle()->getNamespace(),
+                       'title' => $this->getTitle()->getDBkey(),
+                       'params' => $this->getParams()
+               );
+               if ( is_array( $info['params'] ) ) {
+                       // Identical jobs with different "root" jobs should count as duplicates
+                       unset( $info['params']['rootJobSignature'] );
+                       unset( $info['params']['rootJobTimestamp'] );
+                       // Likewise for jobs with different delay times
+                       unset( $info['params']['jobReleaseTimestamp'] );
+               }
+
+               return $info;
+       }
+}
diff --git a/includes/jobqueue/README b/includes/jobqueue/README
new file mode 100644 (file)
index 0000000..c11d5a7
--- /dev/null
@@ -0,0 +1,81 @@
+/*!
+\ingroup JobQueue
+\page jobqueue_design Job queue design
+
+Notes on the Job queuing system architecture.
+
+\section intro Introduction
+
+The data model consist of the following main components:
+* The Job object represents a particular deferred task that happens in the
+  background. All jobs subclass the Job object and put the main logic in the
+  function called run().
+* The JobQueue object represents a particular queue of jobs of a certain type.
+  For example there may be a queue for email jobs and a queue for squid purge
+  jobs.
+
+\section jobqueue Job queues
+
+Each job type has its own queue and is associated to a storage medium. One
+queue might save its jobs in redis while another one uses would use a database.
+
+Storage medium are defined in a queue class. Before using it, you must
+define in $wgJobTypeConf a mapping of the job type to a queue class.
+
+The factory class JobQueueGroup provides helper functions:
+- getting the queue for a given job
+- route new job insertions to the proper queue
+
+The following queue classes are available:
+* JobQueueDB (stores jobs in the `job` table in a database)
+* JobQueueRedis (stores jobs in a redis server)
+
+All queue classes support some basic operations (though some may be no-ops):
+* enqueueing a batch of jobs
+* dequeueing a single job
+* acknowledging a job is completed
+* checking if the queue is empty
+
+Some queue classes (like JobQueueDB) may dequeue jobs in random order while other
+queues might dequeue jobs in exact FIFO order. Callers should thus not assume jobs
+are executed in FIFO order.
+
+Also note that not all queue classes will have the same reliability guarantees.
+In-memory queues may lose data when restarted depending on snapshot and journal
+settings (including journal fsync() frequency).  Some queue types may totally remove
+jobs when dequeued while leaving the ack() function as a no-op; if a job is
+dequeued by a job runner, which crashes before completion, the job will be
+lost. Some jobs, like purging squid caches after a template change, may not
+require durable queues, whereas other jobs might be more important.
+
+\section aggregator Job queue aggregator
+
+The aggregators are used by nextJobDB.php, which is a script that will return a
+random ready queue (on any wiki in the farm) that can be used with runJobs.php.
+This can be used in conjunction with any scripts that handle wiki farm job queues.
+Note that $wgLocalDatabases defines what wikis are in the wiki farm.
+
+Since each job type has its own queue, and wiki-farms may have many wikis,
+there might be a large number of queues to keep track of. To avoid wasting
+large amounts of time polling empty queues, aggregators exists to keep track
+of which queues are ready.
+
+The following queue aggregator classes are available:
+* JobQueueAggregatorMemc (uses $wgMemc to track ready queues)
+* JobQueueAggregatorRedis (uses a redis server to track ready queues)
+
+Some aggregators cache data for a few minutes while others may be always up to date.
+This can be an important factor for jobs that need a low pickup time (or latency).
+
+\section jobs Jobs
+
+Callers should also try to make jobs maintain correctness when executed twice.
+This is useful for queues that actually implement ack(), since they may recycle
+dequeued but un-acknowledged jobs back into the queue to be attempted again. If
+a runner dequeues a job, runs it, but then crashes before calling ack(), the
+job may be returned to the queue and run a second time. Jobs like cache purging can
+happen several times without any correctness problems. However, a pathological case
+would be if a bug causes the problem to systematically keep repeating. For example,
+a job may always throw a DB error at the end of run(). This problem is trickier to
+solve and more obnoxious for things like email jobs, for example. For such jobs,
+it might be useful to use a queue that does not retry jobs.
diff --git a/includes/jobqueue/aggregator/JobQueueAggregator.php b/includes/jobqueue/aggregator/JobQueueAggregator.php
new file mode 100644 (file)
index 0000000..8600eed
--- /dev/null
@@ -0,0 +1,162 @@
+<?php
+/**
+ * Job queue aggregator code.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Class to handle tracking information about all queues
+ *
+ * @ingroup JobQueue
+ * @since 1.21
+ */
+abstract class JobQueueAggregator {
+       /** @var JobQueueAggregator */
+       protected static $instance = null;
+
+       /**
+        * @param array $params
+        */
+       protected function __construct( array $params ) {
+       }
+
+       /**
+        * @throws MWException
+        * @return JobQueueAggregator
+        */
+       final public static function singleton() {
+               global $wgJobQueueAggregator;
+
+               if ( !isset( self::$instance ) ) {
+                       $class = $wgJobQueueAggregator['class'];
+                       $obj = new $class( $wgJobQueueAggregator );
+                       if ( !( $obj instanceof JobQueueAggregator ) ) {
+                               throw new MWException( "Class '$class' is not a JobQueueAggregator class." );
+                       }
+                       self::$instance = $obj;
+               }
+
+               return self::$instance;
+       }
+
+       /**
+        * Destroy the singleton instance
+        *
+        * @return void
+        */
+       final public static function destroySingleton() {
+               self::$instance = null;
+       }
+
+       /**
+        * Mark a queue as being empty
+        *
+        * @param string $wiki
+        * @param string $type
+        * @return bool Success
+        */
+       final public function notifyQueueEmpty( $wiki, $type ) {
+               wfProfileIn( __METHOD__ );
+               $ok = $this->doNotifyQueueEmpty( $wiki, $type );
+               wfProfileOut( __METHOD__ );
+
+               return $ok;
+       }
+
+       /**
+        * @see JobQueueAggregator::notifyQueueEmpty()
+        */
+       abstract protected function doNotifyQueueEmpty( $wiki, $type );
+
+       /**
+        * Mark a queue as being non-empty
+        *
+        * @param string $wiki
+        * @param string $type
+        * @return bool Success
+        */
+       final public function notifyQueueNonEmpty( $wiki, $type ) {
+               wfProfileIn( __METHOD__ );
+               $ok = $this->doNotifyQueueNonEmpty( $wiki, $type );
+               wfProfileOut( __METHOD__ );
+
+               return $ok;
+       }
+
+       /**
+        * @see JobQueueAggregator::notifyQueueNonEmpty()
+        */
+       abstract protected function doNotifyQueueNonEmpty( $wiki, $type );
+
+       /**
+        * Get the list of all of the queues with jobs
+        *
+        * @return array (job type => (list of wiki IDs))
+        */
+       final public function getAllReadyWikiQueues() {
+               wfProfileIn( __METHOD__ );
+               $res = $this->doGetAllReadyWikiQueues();
+               wfProfileOut( __METHOD__ );
+
+               return $res;
+       }
+
+       /**
+        * @see JobQueueAggregator::getAllReadyWikiQueues()
+        */
+       abstract protected function doGetAllReadyWikiQueues();
+
+       /**
+        * Purge all of the aggregator information
+        *
+        * @return bool Success
+        */
+       final public function purge() {
+               wfProfileIn( __METHOD__ );
+               $res = $this->doPurge();
+               wfProfileOut( __METHOD__ );
+
+               return $res;
+       }
+
+       /**
+        * @see JobQueueAggregator::purge()
+        */
+       abstract protected function doPurge();
+
+       /**
+        * Get all databases that have a pending job.
+        * This poll all the queues and is this expensive.
+        *
+        * @return array (job type => (list of wiki IDs))
+        */
+       protected function findPendingWikiQueues() {
+               global $wgLocalDatabases;
+
+               $pendingDBs = array(); // (job type => (db list))
+               foreach ( $wgLocalDatabases as $db ) {
+                       foreach ( JobQueueGroup::singleton( $db )->getQueuesWithJobs() as $type ) {
+                               $pendingDBs[$type][] = $db;
+                       }
+               }
+
+               return $pendingDBs;
+       }
+}
diff --git a/includes/jobqueue/aggregator/JobQueueAggregatorMemc.php b/includes/jobqueue/aggregator/JobQueueAggregatorMemc.php
new file mode 100644 (file)
index 0000000..d733a42
--- /dev/null
@@ -0,0 +1,126 @@
+<?php
+/**
+ * Job queue aggregator code that uses BagOStuff.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Class to handle tracking information about all queues using BagOStuff
+ *
+ * @ingroup JobQueue
+ * @since 1.21
+ */
+class JobQueueAggregatorMemc extends JobQueueAggregator {
+       /** @var BagOStuff */
+       protected $cache;
+
+       protected $cacheTTL; // integer; seconds
+
+       /**
+        * @params include:
+        *   - objectCache : Name of an object cache registered in $wgObjectCaches.
+        *                   This defaults to the one specified by $wgMainCacheType.
+        *   - cacheTTL    : Seconds to cache the aggregate data before regenerating.
+        * @param array $params
+        */
+       protected function __construct( array $params ) {
+               parent::__construct( $params );
+               $this->cache = isset( $params['objectCache'] )
+                       ? wfGetCache( $params['objectCache'] )
+                       : wfGetMainCache();
+               $this->cacheTTL = isset( $params['cacheTTL'] ) ? $params['cacheTTL'] : 180; // 3 min
+       }
+
+       /**
+        * @see JobQueueAggregator::doNotifyQueueEmpty()
+        */
+       protected function doNotifyQueueEmpty( $wiki, $type ) {
+               $key = $this->getReadyQueueCacheKey();
+               // Delist the queue from the "ready queue" list
+               if ( $this->cache->add( "$key:lock", 1, 60 ) ) { // lock
+                       $curInfo = $this->cache->get( $key );
+                       if ( is_array( $curInfo ) && isset( $curInfo['pendingDBs'][$type] ) ) {
+                               if ( in_array( $wiki, $curInfo['pendingDBs'][$type] ) ) {
+                                       $curInfo['pendingDBs'][$type] = array_diff(
+                                               $curInfo['pendingDBs'][$type], array( $wiki ) );
+                                       $this->cache->set( $key, $curInfo );
+                               }
+                       }
+                       $this->cache->delete( "$key:lock" ); // unlock
+               }
+
+               return true;
+       }
+
+       /**
+        * @see JobQueueAggregator::doNotifyQueueNonEmpty()
+        */
+       protected function doNotifyQueueNonEmpty( $wiki, $type ) {
+               return true; // updated periodically
+       }
+
+       /**
+        * @see JobQueueAggregator::doAllGetReadyWikiQueues()
+        */
+       protected function doGetAllReadyWikiQueues() {
+               $key = $this->getReadyQueueCacheKey();
+               // If the cache entry wasn't present, is stale, or in .1% of cases otherwise,
+               // regenerate the cache. Use any available stale cache if another process is
+               // currently regenerating the pending DB information.
+               $pendingDbInfo = $this->cache->get( $key );
+               if ( !is_array( $pendingDbInfo )
+                       || ( time() - $pendingDbInfo['timestamp'] ) > $this->cacheTTL
+                       || mt_rand( 0, 999 ) == 0
+               ) {
+                       if ( $this->cache->add( "$key:rebuild", 1, 1800 ) ) { // lock
+                               $pendingDbInfo = array(
+                                       'pendingDBs' => $this->findPendingWikiQueues(),
+                                       'timestamp' => time()
+                               );
+                               for ( $attempts = 1; $attempts <= 25; ++$attempts ) {
+                                       if ( $this->cache->add( "$key:lock", 1, 60 ) ) { // lock
+                                               $this->cache->set( $key, $pendingDbInfo );
+                                               $this->cache->delete( "$key:lock" ); // unlock
+                                               break;
+                                       }
+                               }
+                               $this->cache->delete( "$key:rebuild" ); // unlock
+                       }
+               }
+
+               return is_array( $pendingDbInfo )
+                       ? $pendingDbInfo['pendingDBs']
+                       : array(); // cache is both empty and locked
+       }
+
+       /**
+        * @see JobQueueAggregator::doPurge()
+        */
+       protected function doPurge() {
+               return $this->cache->delete( $this->getReadyQueueCacheKey() );
+       }
+
+       /**
+        * @return string
+        */
+       private function getReadyQueueCacheKey() {
+               return "jobqueue:aggregator:ready-queues:v1"; // global
+       }
+}
diff --git a/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php b/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php
new file mode 100644 (file)
index 0000000..2aec3c9
--- /dev/null
@@ -0,0 +1,206 @@
+<?php
+/**
+ * Job queue aggregator code that uses PhpRedis.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Class to handle tracking information about all queues using PhpRedis
+ *
+ * @ingroup JobQueue
+ * @ingroup Redis
+ * @since 1.21
+ */
+class JobQueueAggregatorRedis extends JobQueueAggregator {
+       /** @var RedisConnectionPool */
+       protected $redisPool;
+
+       /** @var array List of Redis server addresses */
+       protected $servers;
+
+       /**
+        * @params include:
+        *   - redisConfig  : An array of parameters to RedisConnectionPool::__construct().
+        *   - redisServers : Array of server entries, the first being the primary and the
+        *                    others being fallback servers. Each entry is either a hostname/port
+        *                    combination or the absolute path of a UNIX socket.
+        *                    If a hostname is specified but no port, the standard port number
+        *                    6379 will be used. Required.
+        * @param array $params
+        */
+       protected function __construct( array $params ) {
+               parent::__construct( $params );
+               $this->servers = isset( $params['redisServers'] )
+                       ? $params['redisServers']
+                       : array( $params['redisServer'] ); // b/c
+               $this->redisPool = RedisConnectionPool::singleton( $params['redisConfig'] );
+       }
+
+       protected function doNotifyQueueEmpty( $wiki, $type ) {
+               $conn = $this->getConnection();
+               if ( !$conn ) {
+                       return false;
+               }
+               try {
+                       $conn->hDel( $this->getReadyQueueKey(), $this->encQueueName( $type, $wiki ) );
+
+                       return true;
+               } catch ( RedisException $e ) {
+                       $this->handleException( $conn, $e );
+
+                       return false;
+               }
+       }
+
+       protected function doNotifyQueueNonEmpty( $wiki, $type ) {
+               $conn = $this->getConnection();
+               if ( !$conn ) {
+                       return false;
+               }
+               try {
+                       $conn->hSet( $this->getReadyQueueKey(), $this->encQueueName( $type, $wiki ), time() );
+
+                       return true;
+               } catch ( RedisException $e ) {
+                       $this->handleException( $conn, $e );
+
+                       return false;
+               }
+       }
+
+       protected function doGetAllReadyWikiQueues() {
+               $conn = $this->getConnection();
+               if ( !$conn ) {
+                       return array();
+               }
+               try {
+                       $conn->multi( Redis::PIPELINE );
+                       $conn->exists( $this->getReadyQueueKey() );
+                       $conn->hGetAll( $this->getReadyQueueKey() );
+                       list( $exists, $map ) = $conn->exec();
+
+                       if ( $exists ) { // cache hit
+                               $pendingDBs = array(); // (type => list of wikis)
+                               foreach ( $map as $key => $time ) {
+                                       list( $type, $wiki ) = $this->dencQueueName( $key );
+                                       $pendingDBs[$type][] = $wiki;
+                               }
+                       } else { // cache miss
+                               // Avoid duplicated effort
+                               $rand = wfRandomString( 32 );
+                               $conn->multi( Redis::MULTI );
+                               $conn->setex( "{$rand}:lock", 3600, 1 );
+                               $conn->renamenx( "{$rand}:lock", $this->getReadyQueueKey() . ":lock" );
+                               if ( $conn->exec() !== array( true, true ) ) { // lock
+                                       $conn->delete( "{$rand}:lock" );
+                                       return array(); // already in progress
+                               }
+
+                               $pendingDBs = $this->findPendingWikiQueues(); // (type => list of wikis)
+
+                               $conn->delete( $this->getReadyQueueKey() . ":lock" ); // unlock
+
+                               $now = time();
+                               $map = array();
+                               foreach ( $pendingDBs as $type => $wikis ) {
+                                       foreach ( $wikis as $wiki ) {
+                                               $map[$this->encQueueName( $type, $wiki )] = $now;
+                                       }
+                               }
+                               $conn->hMSet( $this->getReadyQueueKey(), $map );
+                       }
+
+                       return $pendingDBs;
+               } catch ( RedisException $e ) {
+                       $this->handleException( $conn, $e );
+
+                       return array();
+               }
+       }
+
+       protected function doPurge() {
+               $conn = $this->getConnection();
+               if ( !$conn ) {
+                       return false;
+               }
+               try {
+                       $conn->delete( $this->getReadyQueueKey() );
+               } catch ( RedisException $e ) {
+                       $this->handleException( $conn, $e );
+
+                       return false;
+               }
+
+               return true;
+       }
+
+       /**
+        * Get a connection to the server that handles all sub-queues for this queue
+        *
+        * @return RedisConnRef|bool Returns false on failure
+        * @throws MWException
+        */
+       protected function getConnection() {
+               $conn = false;
+               foreach ( $this->servers as $server ) {
+                       $conn = $this->redisPool->getConnection( $server );
+                       if ( $conn ) {
+                               break;
+                       }
+               }
+
+               return $conn;
+       }
+
+       /**
+        * @param RedisConnRef $conn
+        * @param RedisException $e
+        * @return void
+        */
+       protected function handleException( RedisConnRef $conn, $e ) {
+               $this->redisPool->handleError( $conn, $e );
+       }
+
+       /**
+        * @return string
+        */
+       private function getReadyQueueKey() {
+               return "jobqueue:aggregator:h-ready-queues:v1"; // global
+       }
+
+       /**
+        * @param string $type
+        * @param string $wiki
+        * @return string
+        */
+       private function encQueueName( $type, $wiki ) {
+               return rawurlencode( $type ) . '/' . rawurlencode( $wiki );
+       }
+
+       /**
+        * @param string $name
+        * @return string
+        */
+       private function dencQueueName( $name ) {
+               list( $type, $wiki ) = explode( '/', $name, 2 );
+
+               return array( rawurldecode( $type ), rawurldecode( $wiki ) );
+       }
+}
diff --git a/includes/jobqueue/jobs/AssembleUploadChunksJob.php b/includes/jobqueue/jobs/AssembleUploadChunksJob.php
new file mode 100644 (file)
index 0000000..19b0558
--- /dev/null
@@ -0,0 +1,134 @@
+<?php
+/**
+ * Assemble the segments of a chunked upload.
+ *
+ * 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 Upload
+ */
+
+/**
+ * Assemble the segments of a chunked upload.
+ *
+ * @ingroup Upload
+ */
+class AssembleUploadChunksJob extends Job {
+       public function __construct( $title, $params ) {
+               parent::__construct( 'AssembleUploadChunks', $title, $params );
+               $this->removeDuplicates = true;
+       }
+
+       public function run() {
+               $scope = RequestContext::importScopedSession( $this->params['session'] );
+               $context = RequestContext::getMain();
+               try {
+                       $user = $context->getUser();
+                       if ( !$user->isLoggedIn() ) {
+                               $this->setLastError( "Could not load the author user from session." );
+
+                               return false;
+                       }
+
+                       if ( count( $_SESSION ) === 0 ) {
+                               // Empty session probably indicates that we didn't associate
+                               // with the session correctly. Note that being able to load
+                               // the user does not necessarily mean the session was loaded.
+                               // Most likely cause by suhosin.session.encrypt = On.
+                               $this->setLastError( "Error associating with user session. " .
+                                       "Try setting suhosin.session.encrypt = Off" );
+
+                               return false;
+                       }
+
+                       UploadBase::setSessionStatus(
+                               $this->params['filekey'],
+                               array( 'result' => 'Poll', 'stage' => 'assembling', 'status' => Status::newGood() )
+                       );
+
+                       $upload = new UploadFromChunks( $user );
+                       $upload->continueChunks(
+                               $this->params['filename'],
+                               $this->params['filekey'],
+                               $context->getRequest()
+                       );
+
+                       // Combine all of the chunks into a local file and upload that to a new stash file
+                       $status = $upload->concatenateChunks();
+                       if ( !$status->isGood() ) {
+                               UploadBase::setSessionStatus(
+                                       $this->params['filekey'],
+                                       array( 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status )
+                               );
+                               $this->setLastError( $status->getWikiText() );
+
+                               return false;
+                       }
+
+                       // We have a new filekey for the fully concatenated file
+                       $newFileKey = $upload->getLocalFile()->getFileKey();
+
+                       // Remove the old stash file row and first chunk file
+                       $upload->stash->removeFileNoAuth( $this->params['filekey'] );
+
+                       // 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->params['filekey'],
+                               array(
+                                       'result' => 'Success',
+                                       'stage' => 'assembling',
+                                       'filekey' => $newFileKey,
+                                       'imageinfo' => $imageInfo,
+                                       'status' => Status::newGood()
+                               )
+                       );
+               } catch ( MWException $e ) {
+                       UploadBase::setSessionStatus(
+                               $this->params['filekey'],
+                               array(
+                                       'result' => 'Failure',
+                                       'stage' => 'assembling',
+                                       'status' => Status::newFatal( 'api-error-stashfailed' )
+                               )
+                       );
+                       $this->setLastError( get_class( $e ) . ": " . $e->getText() );
+
+                       return false;
+               }
+
+               return true;
+       }
+
+       public function getDeduplicationInfo() {
+               $info = parent::getDeduplicationInfo();
+               if ( is_array( $info['params'] ) ) {
+                       $info['params'] = array( 'filekey' => $info['params']['filekey'] );
+               }
+
+               return $info;
+       }
+
+       public function allowRetries() {
+               return false;
+       }
+}
diff --git a/includes/jobqueue/jobs/DoubleRedirectJob.php b/includes/jobqueue/jobs/DoubleRedirectJob.php
new file mode 100644 (file)
index 0000000..94b56ef
--- /dev/null
@@ -0,0 +1,251 @@
+<?php
+/**
+ * Job to fix double redirects after moving a page.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup JobQueue
+ */
+
+/**
+ * Job to fix double redirects after moving a page
+ *
+ * @ingroup JobQueue
+ */
+class DoubleRedirectJob extends Job {
+       /** @var string Reason for the change, 'maintenance' or 'move'. Suffix fo
+        *    message key 'double-redirect-fixed-'.
+        */
+       private $reason;
+
+       /** @var Title The title which has changed, redirects pointing to this
+        *    title are fixed
+        */
+       private $redirTitle;
+
+       /** @var User */
+       private static $user;
+
+       /**
+        * Insert jobs into the job queue to fix redirects to the given title
+        * @param string $reason the reason for the fix, see message
+        *   "double-redirect-fixed-<reason>"
+        * @param $redirTitle Title: the title which has changed, redirects
+        *   pointing to this title are fixed
+        * @param bool $destTitle Not used
+        */
+       public static function fixRedirects( $reason, $redirTitle, $destTitle = false ) {
+               # Need to use the master to get the redirect table updated in the same transaction
+               $dbw = wfGetDB( DB_MASTER );
+               $res = $dbw->select(
+                       array( 'redirect', 'page' ),
+                       array( 'page_namespace', 'page_title' ),
+                       array(
+                               'page_id = rd_from',
+                               'rd_namespace' => $redirTitle->getNamespace(),
+                               'rd_title' => $redirTitle->getDBkey()
+                       ), __METHOD__ );
+               if ( !$res->numRows() ) {
+                       return;
+               }
+               $jobs = array();
+               foreach ( $res as $row ) {
+                       $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+                       if ( !$title ) {
+                               continue;
+                       }
+
+                       $jobs[] = new self( $title, array(
+                               'reason' => $reason,
+                               'redirTitle' => $redirTitle->getPrefixedDBkey() ) );
+                       # Avoid excessive memory usage
+                       if ( count( $jobs ) > 10000 ) {
+                               JobQueueGroup::singleton()->push( $jobs );
+                               $jobs = array();
+                       }
+               }
+               JobQueueGroup::singleton()->push( $jobs );
+       }
+
+       /**
+        * @param Title $title
+        * @param array|bool $params
+        * @param int $id
+        */
+       function __construct( $title, $params = false ) {
+               parent::__construct( 'fixDoubleRedirect', $title, $params );
+               $this->reason = $params['reason'];
+               $this->redirTitle = Title::newFromText( $params['redirTitle'] );
+       }
+
+       /**
+        * @return bool
+        */
+       function run() {
+               if ( !$this->redirTitle ) {
+                       $this->setLastError( 'Invalid title' );
+
+                       return false;
+               }
+
+               $targetRev = Revision::newFromTitle( $this->title, false, Revision::READ_LATEST );
+               if ( !$targetRev ) {
+                       wfDebug( __METHOD__ . ": target redirect already deleted, ignoring\n" );
+
+                       return true;
+               }
+               $content = $targetRev->getContent();
+               $currentDest = $content ? $content->getRedirectTarget() : null;
+               if ( !$currentDest || !$currentDest->equals( $this->redirTitle ) ) {
+                       wfDebug( __METHOD__ . ": Redirect has changed since the job was queued\n" );
+
+                       return true;
+               }
+
+               // Check for a suppression tag (used e.g. in periodically archived discussions)
+               $mw = MagicWord::get( 'staticredirect' );
+               if ( $content->matchMagicWord( $mw ) ) {
+                       wfDebug( __METHOD__ . ": skipping: suppressed with __STATICREDIRECT__\n" );
+
+                       return true;
+               }
+
+               // Find the current final destination
+               $newTitle = self::getFinalDestination( $this->redirTitle );
+               if ( !$newTitle ) {
+                       wfDebug( __METHOD__ .
+                               ": skipping: single redirect, circular redirect or invalid redirect destination\n" );
+
+                       return true;
+               }
+               if ( $newTitle->equals( $this->redirTitle ) ) {
+                       // The redirect is already right, no need to change it
+                       // This can happen if the page was moved back (say after vandalism)
+                       wfDebug( __METHOD__ . " : skipping, already good\n" );
+               }
+
+               // Preserve fragment (bug 14904)
+               $newTitle = Title::makeTitle( $newTitle->getNamespace(), $newTitle->getDBkey(),
+                       $currentDest->getFragment(), $newTitle->getInterwiki() );
+
+               // Fix the text
+               $newContent = $content->updateRedirect( $newTitle );
+
+               if ( $newContent->equals( $content ) ) {
+                       $this->setLastError( 'Content unchanged???' );
+
+                       return false;
+               }
+
+               $user = $this->getUser();
+               if ( !$user ) {
+                       $this->setLastError( 'Invalid user' );
+
+                       return false;
+               }
+
+               // Save it
+               global $wgUser;
+               $oldUser = $wgUser;
+               $wgUser = $user;
+               $article = WikiPage::factory( $this->title );
+
+               // Messages: double-redirect-fixed-move, double-redirect-fixed-maintenance
+               $reason = wfMessage( 'double-redirect-fixed-' . $this->reason,
+                       $this->redirTitle->getPrefixedText(), $newTitle->getPrefixedText()
+               )->inContentLanguage()->text();
+               $article->doEditContent( $newContent, $reason, EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $user );
+               $wgUser = $oldUser;
+
+               return true;
+       }
+
+       /**
+        * Get the final destination of a redirect
+        *
+        * @param $title Title
+        *
+        * @return bool if the specified title is not a redirect, or if it is a circular redirect
+        */
+       public static function getFinalDestination( $title ) {
+               $dbw = wfGetDB( DB_MASTER );
+
+               // Circular redirect check
+               $seenTitles = array();
+               $dest = false;
+
+               while ( true ) {
+                       $titleText = $title->getPrefixedDBkey();
+                       if ( isset( $seenTitles[$titleText] ) ) {
+                               wfDebug( __METHOD__, "Circular redirect detected, aborting\n" );
+
+                               return false;
+                       }
+                       $seenTitles[$titleText] = true;
+
+                       if ( $title->isExternal() ) {
+                               // If the target is interwiki, we have to break early (bug 40352).
+                               // Otherwise it will look up a row in the local page table
+                               // with the namespace/page of the interwiki target which can cause
+                               // unexpected results (e.g. X -> foo:Bar -> Bar -> .. )
+                               break;
+                       }
+
+                       $row = $dbw->selectRow(
+                               array( 'redirect', 'page' ),
+                               array( 'rd_namespace', 'rd_title', 'rd_interwiki' ),
+                               array(
+                                       'rd_from=page_id',
+                                       'page_namespace' => $title->getNamespace(),
+                                       'page_title' => $title->getDBkey()
+                               ), __METHOD__ );
+                       if ( !$row ) {
+                               # No redirect from here, chain terminates
+                               break;
+                       } else {
+                               $dest = $title = Title::makeTitle(
+                                       $row->rd_namespace,
+                                       $row->rd_title,
+                                       '',
+                                       $row->rd_interwiki
+                               );
+                       }
+               }
+
+               return $dest;
+       }
+
+       /**
+        * Get a user object for doing edits, from a request-lifetime cache
+        * False will be returned if the user name specified in the
+        * 'double-redirect-fixer' message is invalid.
+        *
+        * @return User|bool
+        */
+       function getUser() {
+               if ( !self::$user ) {
+                       $username = wfMessage( 'double-redirect-fixer' )->inContentLanguage()->text();
+                       self::$user = User::newFromName( $username );
+                       # User::newFromName() can return false on a badly configured wiki.
+                       if ( self::$user && !self::$user->isLoggedIn() ) {
+                               self::$user->addToDatabase();
+                       }
+               }
+
+               return self::$user;
+       }
+}
diff --git a/includes/jobqueue/jobs/DuplicateJob.php b/includes/jobqueue/jobs/DuplicateJob.php
new file mode 100644 (file)
index 0000000..b0a6ef7
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+/**
+ * No-op job that does nothing.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+/**
+ * No-op job that does nothing. Used to represent duplicates.
+ *
+ * @ingroup JobQueue
+ */
+final class DuplicateJob extends Job {
+       /**
+        * Callers should use DuplicateJob::newFromJob() instead
+        *
+        * @param Title $title
+        * @param array $params job parameters
+        */
+       function __construct( $title, $params ) {
+               parent::__construct( 'duplicate', $title, $params );
+       }
+
+       /**
+        * Get a duplicate no-op version of a job
+        *
+        * @param Job $job
+        * @return Job
+        */
+       public static function newFromJob( Job $job ) {
+               $djob = new self( $job->getTitle(), $job->getParams() );
+               $djob->command = $job->getType();
+               $djob->params = is_array( $djob->params ) ? $djob->params : array();
+               $djob->params = array( 'isDuplicate' => true ) + $djob->params;
+               $djob->metadata = $job->metadata;
+
+               return $djob;
+       }
+
+       public function run() {
+               return true;
+       }
+}
diff --git a/includes/jobqueue/jobs/EmaillingJob.php b/includes/jobqueue/jobs/EmaillingJob.php
new file mode 100644 (file)
index 0000000..df8ae63
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Old job for notification emails.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup JobQueue
+ */
+
+/**
+ * Old job used for sending single notification emails;
+ * kept for backwards-compatibility
+ *
+ * @ingroup JobQueue
+ */
+class EmaillingJob extends Job {
+       function __construct( $title, $params ) {
+               parent::__construct( 'sendMail', Title::newMainPage(), $params );
+       }
+
+       function run() {
+               $status = UserMailer::send(
+                       $this->params['to'],
+                       $this->params['from'],
+                       $this->params['subj'],
+                       $this->params['body'],
+                       $this->params['replyto']
+               );
+
+               return $status->isOK();
+       }
+}
diff --git a/includes/jobqueue/jobs/EnotifNotifyJob.php b/includes/jobqueue/jobs/EnotifNotifyJob.php
new file mode 100644 (file)
index 0000000..1ed99a5
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Job for notification emails.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup JobQueue
+ */
+
+/**
+ * Job for email notification mails
+ *
+ * @ingroup JobQueue
+ */
+class EnotifNotifyJob extends Job {
+       function __construct( $title, $params ) {
+               parent::__construct( 'enotifNotify', $title, $params );
+       }
+
+       function run() {
+               $enotif = new EmailNotification();
+               // Get the user from ID (rename safe). Anons are 0, so defer to name.
+               if ( isset( $this->params['editorID'] ) && $this->params['editorID'] ) {
+                       $editor = User::newFromId( $this->params['editorID'] );
+               // B/C, only the name might be given.
+               } else {
+                       # @todo FIXME: newFromName could return false on a badly configured wiki.
+                       $editor = User::newFromName( $this->params['editor'], false );
+               }
+               $enotif->actuallyNotifyOnPageChange(
+                       $editor,
+                       $this->title,
+                       $this->params['timestamp'],
+                       $this->params['summary'],
+                       $this->params['minorEdit'],
+                       $this->params['oldid'],
+                       $this->params['watchers'],
+                       $this->params['pageStatus']
+               );
+
+               return true;
+       }
+}
diff --git a/includes/jobqueue/jobs/HTMLCacheUpdateJob.php b/includes/jobqueue/jobs/HTMLCacheUpdateJob.php
new file mode 100644 (file)
index 0000000..a7c5dc0
--- /dev/null
@@ -0,0 +1,170 @@
+<?php
+/**
+ * HTML cache invalidation of all pages linking to a given title.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+/**
+ * Job to purge the cache for all pages that link to or use another page or file
+ *
+ * This job comes in a few variants:
+ *   - a) Recursive jobs to purge caches for backlink pages for a given title.
+ *        These jobs have have (recursive:true,table:<table>) set.
+ *   - b) Jobs to purge caches for a set of titles (the job title is ignored).
+ *           These jobs have have (pages:(<page ID>:(<namespace>,<title>),...) set.
+ *
+ * @ingroup JobQueue
+ */
+class HTMLCacheUpdateJob extends Job {
+       function __construct( $title, $params = '' ) {
+               parent::__construct( 'htmlCacheUpdate', $title, $params );
+               // Base backlink purge jobs can be de-duplicated
+               $this->removeDuplicates = ( !isset( $params['range'] ) && !isset( $params['pages'] ) );
+       }
+
+       function run() {
+               global $wgUpdateRowsPerJob, $wgUpdateRowsPerQuery, $wgMaxBacklinksInvalidate;
+
+               static $expected = array( 'recursive', 'pages' ); // new jobs have one of these
+
+               $oldRangeJob = false;
+               if ( !array_intersect( array_keys( $this->params ), $expected ) ) {
+                       // B/C for older job params formats that lack these fields:
+                       // a) base jobs with just ("table") and b) range jobs with ("table","start","end")
+                       if ( isset( $this->params['start'] ) && isset( $this->params['end'] ) ) {
+                               $oldRangeJob = true;
+                       } else {
+                               $this->params['recursive'] = true; // base job
+                       }
+               }
+
+               // Job to purge all (or a range of) backlink pages for a page
+               if ( !empty( $this->params['recursive'] ) ) {
+                       // @TODO: try to use delayed jobs if possible?
+                       if ( !isset( $this->params['range'] ) && $wgMaxBacklinksInvalidate !== false ) {
+                               $numRows = $this->title->getBacklinkCache()->getNumLinks(
+                                       $this->params['table'], $wgMaxBacklinksInvalidate );
+                               if ( $numRows > $wgMaxBacklinksInvalidate ) {
+                                       return true;
+                               }
+                       }
+                       // Convert this into no more than $wgUpdateRowsPerJob HTMLCacheUpdateJob per-title
+                       // jobs and possibly a recursive HTMLCacheUpdateJob job for the rest of the backlinks
+                       $jobs = BacklinkJobUtils::partitionBacklinkJob(
+                               $this,
+                               $wgUpdateRowsPerJob,
+                               $wgUpdateRowsPerQuery, // jobs-per-title
+                               // Carry over information for de-duplication
+                               array( 'params' => $this->getRootJobParams() )
+                       );
+                       JobQueueGroup::singleton()->push( $jobs );
+               // Job to purge pages for for a set of titles
+               } elseif ( isset( $this->params['pages'] ) ) {
+                       $this->invalidateTitles( $this->params['pages'] );
+               // B/C for job to purge a range of backlink pages for a given page
+               } elseif ( $oldRangeJob ) {
+                       $titleArray = $this->title->getBacklinkCache()->getLinks(
+                               $this->params['table'], $this->params['start'], $this->params['end'] );
+
+                       $pages = array(); // same format BacklinkJobUtils uses
+                       foreach ( $titleArray as $tl ) {
+                               $pages[$tl->getArticleId()] = array( $tl->getNamespace(), $tl->getDbKey() );
+                       }
+
+                       $jobs = array();
+                       foreach ( array_chunk( $pages, $wgUpdateRowsPerJob ) as $pageChunk ) {
+                               $jobs[] = new HTMLCacheUpdateJob( $this->title,
+                                       array(
+                                               'table' => $this->params['table'],
+                                               'pages' => $pageChunk
+                                       ) + $this->getRootJobParams() // carry over information for de-duplication
+                               );
+                       }
+                       JobQueueGroup::singleton()->push( $jobs );
+               }
+
+               return true;
+       }
+
+       /**
+        * @param array $pages Map of (page ID => (namespace, DB key)) entries
+        */
+       protected function invalidateTitles( array $pages ) {
+               global $wgUpdateRowsPerQuery, $wgUseFileCache, $wgUseSquid;
+
+               // Get all page IDs in this query into an array
+               $pageIds = array_keys( $pages );
+               if ( !$pageIds ) {
+                       return;
+               }
+
+               $dbw = wfGetDB( DB_MASTER );
+
+               // The page_touched field will need to be bumped for these pages.
+               // Only bump it to the present time if no "rootJobTimestamp" was known.
+               // If it is known, it can be used instead, which avoids invalidating output
+               // that was in fact generated *after* the relevant dependency change time
+               // (e.g. template edit). This is particularily useful since refreshLinks jobs
+               // save back parser output and usually run along side htmlCacheUpdate jobs;
+               // their saved output would be invalidated by using the current timestamp.
+               if ( isset( $this->params['rootJobTimestamp'] ) ) {
+                       $touchTimestamp = $this->params['rootJobTimestamp'];
+               } else {
+                       $touchTimestamp = wfTimestampNow();
+               }
+
+               // Update page_touched (skipping pages already touched since the root job).
+               // Check $wgUpdateRowsPerQuery for sanity; batch jobs are sized by that already.
+               foreach ( array_chunk( $pageIds, $wgUpdateRowsPerQuery ) as $batch ) {
+                       $dbw->update( 'page',
+                               array( 'page_touched' => $dbw->timestamp( $touchTimestamp ) ),
+                               array( 'page_id' => $batch,
+                                       // don't invalidated pages that were already invalidated
+                                       "page_touched < " . $dbw->addQuotes( $dbw->timestamp( $touchTimestamp ) )
+                               ),
+                               __METHOD__
+                       );
+               }
+               // Get the list of affected pages (races only mean something else did the purge)
+               $titleArray = TitleArray::newFromResult( $dbw->select(
+                       'page',
+                       array( 'page_namespace', 'page_title' ),
+                       array( 'page_id' => $pageIds, 'page_touched' => $dbw->timestamp( $touchTimestamp ) ),
+                       __METHOD__
+               ) );
+
+               // Update squid
+               if ( $wgUseSquid ) {
+                       $u = SquidUpdate::newFromTitles( $titleArray );
+                       $u->doUpdate();
+               }
+
+               // Update file cache
+               if ( $wgUseFileCache ) {
+                       foreach ( $titleArray as $title ) {
+                               HTMLFileCache::clearFileCache( $title );
+                       }
+               }
+       }
+
+       public function workItemCount() {
+               return isset( $this->params['pages'] ) ? count( $this->params['pages'] ) : 1;
+       }
+}
diff --git a/includes/jobqueue/jobs/NullJob.php b/includes/jobqueue/jobs/NullJob.php
new file mode 100644 (file)
index 0000000..b2d6a9a
--- /dev/null
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Degenerate job that does nothing.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+/**
+ * Degenerate job that does nothing, but can optionally replace itself
+ * in the queue and/or sleep for a brief time period. These can be used
+ * to represent "no-op" jobs or test lock contention and performance.
+ *
+ * @par Example:
+ * Inserting a null job in the configured job queue:
+ * @code
+ * $ php maintenance/eval.php
+ * > $queue = JobQueueGroup::singleton();
+ * > $job = new NullJob( Title::newMainPage(), array( 'lives' => 10 ) );
+ * > $queue->push( $job );
+ * @endcode
+ * You can then confirm the job has been enqueued by using the showJobs.php
+ * maintenance utility:
+ * @code
+ * $ php maintenance/showJobs.php --group
+ * null: 1 queue; 0 claimed (0 active, 0 abandoned)
+ * $
+ * @endcode
+ *
+ * @ingroup JobQueue
+ */
+class NullJob extends Job {
+       /**
+        * @param Title $title
+        * @param array $params job parameters (lives, usleep)
+        */
+       function __construct( $title, $params ) {
+               parent::__construct( 'null', $title, $params );
+               if ( !isset( $this->params['lives'] ) ) {
+                       $this->params['lives'] = 1;
+               }
+               if ( !isset( $this->params['usleep'] ) ) {
+                       $this->params['usleep'] = 0;
+               }
+               $this->removeDuplicates = !empty( $this->params['removeDuplicates'] );
+       }
+
+       public function run() {
+               if ( $this->params['usleep'] > 0 ) {
+                       usleep( $this->params['usleep'] );
+               }
+               if ( $this->params['lives'] > 1 ) {
+                       $params = $this->params;
+                       $params['lives']--;
+                       $job = new self( $this->title, $params );
+                       JobQueueGroup::singleton()->push( $job );
+               }
+
+               return true;
+       }
+}
diff --git a/includes/jobqueue/jobs/PublishStashedFileJob.php b/includes/jobqueue/jobs/PublishStashedFileJob.php
new file mode 100644 (file)
index 0000000..d7667f3
--- /dev/null
@@ -0,0 +1,147 @@
+<?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 Upload
+ */
+
+/**
+ * Upload a file from the upload stash into the local file repo.
+ *
+ * @ingroup Upload
+ */
+class PublishStashedFileJob extends Job {
+       public function __construct( $title, $params ) {
+               parent::__construct( 'PublishStashedFile', $title, $params );
+               $this->removeDuplicates = true;
+       }
+
+       public function run() {
+               $scope = RequestContext::importScopedSession( $this->params['session'] );
+               $context = RequestContext::getMain();
+               try {
+                       $user = $context->getUser();
+                       if ( !$user->isLoggedIn() ) {
+                               $this->setLastError( "Could not load the author user from session." );
+
+                               return false;
+                       }
+
+                       if ( count( $_SESSION ) === 0 ) {
+                               // Empty session probably indicates that we didn't associate
+                               // with the session correctly. Note that being able to load
+                               // the user does not necessarily mean the session was loaded.
+                               // Most likely cause by suhosin.session.encrypt = On.
+                               $this->setLastError( "Error associating with user session. " .
+                                       "Try setting suhosin.session.encrypt = Off" );
+
+                               return false;
+                       }
+
+                       UploadBase::setSessionStatus(
+                               $this->params['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->params['filekey'], $this->params['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->params['filekey'],
+                                       array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
+                               );
+                               $this->setLastError( "Could not verify upload." );
+
+                               return false;
+                       }
+
+                       // Upload the stashed file to a permanent location
+                       $status = $upload->performUpload(
+                               $this->params['comment'],
+                               $this->params['text'],
+                               $this->params['watch'],
+                               $user
+                       );
+                       if ( !$status->isGood() ) {
+                               UploadBase::setSessionStatus(
+                                       $this->params['filekey'],
+                                       array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
+                               );
+                               $this->setLastError( $status->getWikiText() );
+
+                               return false;
+                       }
+
+                       // 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->params['filekey'],
+                               array(
+                                       'result' => 'Success',
+                                       'stage' => 'publish',
+                                       'filename' => $upload->getLocalFile()->getName(),
+                                       'imageinfo' => $imageInfo,
+                                       'status' => Status::newGood()
+                               )
+                       );
+               } catch ( MWException $e ) {
+                       UploadBase::setSessionStatus(
+                               $this->params['filekey'],
+                               array(
+                                       'result' => 'Failure',
+                                       'stage' => 'publish',
+                                       'status' => Status::newFatal( 'api-error-publishfailed' )
+                               )
+                       );
+                       $this->setLastError( get_class( $e ) . ": " . $e->getText() );
+
+                       return false;
+               }
+
+               return true;
+       }
+
+       public function getDeduplicationInfo() {
+               $info = parent::getDeduplicationInfo();
+               if ( is_array( $info['params'] ) ) {
+                       $info['params'] = array( 'filekey' => $info['params']['filekey'] );
+               }
+
+               return $info;
+       }
+
+       public function allowRetries() {
+               return false;
+       }
+}
diff --git a/includes/jobqueue/jobs/RefreshLinksJob.php b/includes/jobqueue/jobs/RefreshLinksJob.php
new file mode 100644 (file)
index 0000000..3bcb4fc
--- /dev/null
@@ -0,0 +1,197 @@
+<?php
+/**
+ * Job to update link tables for pages
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup JobQueue
+ */
+
+/**
+ * Job to update link tables for pages
+ *
+ * This job comes in a few variants:
+ *   - a) Recursive jobs to update links for backlink pages for a given title.
+ *        These jobs have have (recursive:true,table:<table>) set.
+ *   - b) Jobs to update links for a set of pages (the job title is ignored).
+ *           These jobs have have (pages:(<page ID>:(<namespace>,<title>),...) set.
+ *   - c) Jobs to update links for a single page (the job title)
+ *        These jobs need no extra fields set.
+ *
+ * @ingroup JobQueue
+ */
+class RefreshLinksJob extends Job {
+       const PARSE_THRESHOLD_SEC = 1.0;
+
+       function __construct( $title, $params = '' ) {
+               parent::__construct( 'refreshLinks', $title, $params );
+               // Base backlink update jobs and per-title update jobs can be de-duplicated.
+               // If template A changes twice before any jobs run, a clean queue will have:
+               //              (A base, A base)
+               // The second job is ignored by the queue on insertion.
+               // Suppose, many pages use template A, and that template itself uses template B.
+               // An edit to both will first create two base jobs. A clean FIFO queue will have:
+               //              (A base, B base)
+               // When these jobs run, the queue will have per-title and remnant partition jobs:
+               //              (titleX,titleY,titleZ,...,A remnant,titleM,titleN,titleO,...,B remnant)
+               // Some these jobs will be the same, and will automatically be ignored by
+               // the queue upon insertion. Some title jobs will run before the duplicate is
+               // inserted, so the work will still be done twice in those cases. More titles
+               // can be de-duplicated as the remnant jobs continue to be broken down. This
+               // works best when $wgUpdateRowsPerJob, and either the pages have few backlinks
+               // and/or the backlink sets for pages A and B are almost identical.
+               $this->removeDuplicates = !isset( $params['range'] )
+                       && ( !isset( $params['pages'] ) || count( $params['pages'] ) == 1 );
+       }
+
+       function run() {
+               global $wgUpdateRowsPerJob;
+
+               // Job to update all (or a range of) backlink pages for a page
+               if ( !empty( $this->params['recursive'] ) ) {
+                       // Carry over information for de-duplication
+                       $extraParams = $this->getRootJobParams();
+                       // Avoid slave lag when fetching templates.
+                       // When the outermost job is run, we know that the caller that enqueued it must have
+                       // committed the relevant changes to the DB by now. At that point, record the master
+                       // position and pass it along as the job recursively breaks into smaller range jobs.
+                       // Hopefully, when leaf jobs are popped, the slaves will have reached that position.
+                       if ( isset( $this->params['masterPos'] ) ) {
+                               $extraParams['masterPos'] = $this->params['masterPos'];
+                       } elseif ( wfGetLB()->getServerCount() > 1 ) {
+                               $extraParams['masterPos'] = wfGetLB()->getMasterPos();
+                       } else {
+                               $extraParams['masterPos'] = false;
+                       }
+                       // Convert this into no more than $wgUpdateRowsPerJob RefreshLinks per-title
+                       // jobs and possibly a recursive RefreshLinks job for the rest of the backlinks
+                       $jobs = BacklinkJobUtils::partitionBacklinkJob(
+                               $this,
+                               $wgUpdateRowsPerJob,
+                               1, // job-per-title
+                               array( 'params' => $extraParams )
+                       );
+                       JobQueueGroup::singleton()->push( $jobs );
+               // Job to update link tables for for a set of titles
+               } elseif ( isset( $this->params['pages'] ) ) {
+                       foreach ( $this->params['pages'] as $pageId => $nsAndKey ) {
+                               list( $ns, $dbKey ) = $nsAndKey;
+                               $this->runForTitle( Title::makeTitleSafe( $ns, $dbKey ) );
+                       }
+               // Job to update link tables for a given title
+               } else {
+                       $this->runForTitle( $this->title );
+               }
+
+               return true;
+       }
+
+       protected function runForTitle( Title $title = null ) {
+               $linkCache = LinkCache::singleton();
+               $linkCache->clear();
+
+               if ( is_null( $title ) ) {
+                       $this->setLastError( "refreshLinks: Invalid title" );
+                       return false;
+               }
+
+               // Wait for the DB of the current/next slave DB handle to catch up to the master.
+               // This way, we get the correct page_latest for templates or files that just changed
+               // milliseconds ago, having triggered this job to begin with.
+               if ( isset( $this->params['masterPos'] ) && $this->params['masterPos'] !== false ) {
+                       wfGetLB()->waitFor( $this->params['masterPos'] );
+               }
+
+               $page = WikiPage::factory( $title );
+
+               // Fetch the current revision...
+               $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
+               if ( !$revision ) {
+                       $this->setLastError( "refreshLinks: Article not found {$title->getPrefixedDBkey()}" );
+                       return false; // XXX: what if it was just deleted?
+               }
+               $content = $revision->getContent( Revision::RAW );
+               if ( !$content ) {
+                       // If there is no content, pretend the content is empty
+                       $content = $revision->getContentHandler()->makeEmptyContent();
+               }
+
+               $parserOutput = false;
+               $parserOptions = $page->makeParserOptions( 'canonical' );
+               // If page_touched changed after this root job (with a good slave lag skew factor),
+               // then it is likely that any views of the pages already resulted in re-parses which
+               // are now in cache. This can be reused to avoid expensive parsing in some cases.
+               if ( isset( $this->params['rootJobTimestamp'] ) ) {
+                       $skewedTimestamp = wfTimestamp( TS_UNIX, $this->params['rootJobTimestamp'] ) + 5;
+                       if ( $page->getLinksTimestamp() > wfTimestamp( TS_MW, $skewedTimestamp ) ) {
+                               // Something already updated the backlinks since this job was made
+                               return true;
+                       }
+                       if ( $page->getTouched() > wfTimestamp( TS_MW, $skewedTimestamp ) ) {
+                               $parserOutput = ParserCache::singleton()->getDirty( $page, $parserOptions );
+                               if ( $parserOutput && $parserOutput->getCacheTime() <= $skewedTimestamp ) {
+                                       $parserOutput = false; // too stale
+                               }
+                       }
+               }
+               // Fetch the current revision and parse it if necessary...
+               if ( $parserOutput == false ) {
+                       $start = microtime( true );
+                       // Revision ID must be passed to the parser output to get revision variables correct
+                       $parserOutput = $content->getParserOutput(
+                               $title, $revision->getId(), $parserOptions, false );
+                       $ellapsed = microtime( true ) - $start;
+                       // If it took a long time to render, then save this back to the cache to avoid
+                       // wasted CPU by other apaches or job runners. We don't want to always save to
+                       // cache as this cause cause high cache I/O and LRU churn when a template changes.
+                       if ( $ellapsed >= self::PARSE_THRESHOLD_SEC
+                               && $page->isParserCacheUsed( $parserOptions, $revision->getId() )
+                               && $parserOutput->isCacheable()
+                       ) {
+                               $ctime = wfTimestamp( TS_MW, (int)$start ); // cache time
+                               ParserCache::singleton()->save( $parserOutput, $page, $parserOptions, $ctime );
+                       }
+               }
+
+               $updates = $content->getSecondaryDataUpdates( $title, null, false, $parserOutput );
+               DataUpdate::runUpdates( $updates );
+
+               InfoAction::invalidateCache( $title );
+
+               return true;
+       }
+
+       public function getDeduplicationInfo() {
+               $info = parent::getDeduplicationInfo();
+               if ( is_array( $info['params'] ) ) {
+                       // Don't let highly unique "masterPos" values ruin duplicate detection
+                       unset( $info['params']['masterPos'] );
+                       // For per-pages jobs, the job title is that of the template that changed
+                       // (or similar), so remove that since it ruins duplicate detection
+                       if ( isset( $info['pages'] ) ) {
+                               unset( $info['namespace'] );
+                               unset( $info['title'] );
+                       }
+               }
+
+               return $info;
+       }
+
+       public function workItemCount() {
+               return isset( $this->params['pages'] ) ? count( $this->params['pages'] ) : 1;
+       }
+}
diff --git a/includes/jobqueue/jobs/RefreshLinksJob2.php b/includes/jobqueue/jobs/RefreshLinksJob2.php
new file mode 100644 (file)
index 0000000..77e3b3f
--- /dev/null
@@ -0,0 +1,141 @@
+<?php
+/**
+ * Job to update links for a given title.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup JobQueue
+ */
+
+/**
+ * Background job to update links for titles in certain backlink range by page ID.
+ * Newer version for high use templates. This is deprecated by RefreshLinksPartitionJob.
+ *
+ * @ingroup JobQueue
+ * @deprecated 1.23
+ */
+class RefreshLinksJob2 extends Job {
+       function __construct( $title, $params ) {
+               parent::__construct( 'refreshLinks2', $title, $params );
+               // Base jobs for large templates can easily be de-duplicated
+               $this->removeDuplicates = !isset( $params['start'] ) && !isset( $params['end'] );
+       }
+
+       /**
+        * Run a refreshLinks2 job
+        * @return boolean success
+        */
+       function run() {
+               global $wgUpdateRowsPerJob;
+
+               $linkCache = LinkCache::singleton();
+               $linkCache->clear();
+
+               if ( is_null( $this->title ) ) {
+                       $this->error = "refreshLinks2: Invalid title";
+                       return false;
+               }
+
+               // Back compat for pre-r94435 jobs
+               $table = isset( $this->params['table'] ) ? $this->params['table'] : 'templatelinks';
+
+               // Avoid slave lag when fetching templates.
+               // When the outermost job is run, we know that the caller that enqueued it must have
+               // committed the relevant changes to the DB by now. At that point, record the master
+               // position and pass it along as the job recursively breaks into smaller range jobs.
+               // Hopefully, when leaf jobs are popped, the slaves will have reached that position.
+               if ( isset( $this->params['masterPos'] ) ) {
+                       $masterPos = $this->params['masterPos'];
+               } elseif ( wfGetLB()->getServerCount() > 1 ) {
+                       $masterPos = wfGetLB()->getMasterPos();
+               } else {
+                       $masterPos = false;
+               }
+
+               $tbc = $this->title->getBacklinkCache();
+
+               $jobs = array(); // jobs to insert
+               if ( isset( $this->params['start'] ) && isset( $this->params['end'] ) ) {
+                       # This is a partition job to trigger the insertion of leaf jobs...
+                       $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) );
+               } else {
+                       # This is a base job to trigger the insertion of partitioned jobs...
+                       if ( $tbc->getNumLinks( $table, $wgUpdateRowsPerJob + 1 ) <= $wgUpdateRowsPerJob ) {
+                               # Just directly insert the single per-title jobs
+                               $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) );
+                       } else {
+                               # Insert the partition jobs to make per-title jobs
+                               foreach ( $tbc->partition( $table, $wgUpdateRowsPerJob ) as $batch ) {
+                                       list( $start, $end ) = $batch;
+                                       $jobs[] = new RefreshLinksJob2( $this->title,
+                                               array(
+                                                       'table' => $table,
+                                                       'start' => $start,
+                                                       'end' => $end,
+                                                       'masterPos' => $masterPos,
+                                               ) + $this->getRootJobParams() // carry over information for de-duplication
+                                       );
+                               }
+                       }
+               }
+
+               if ( count( $jobs ) ) {
+                       JobQueueGroup::singleton()->push( $jobs );
+               }
+
+               return true;
+       }
+
+       /**
+        * @param $table string
+        * @param $masterPos mixed
+        * @return Array
+        */
+       protected function getSingleTitleJobs( $table, $masterPos ) {
+               # The "start"/"end" fields are not set for the base jobs
+               $start = isset( $this->params['start'] ) ? $this->params['start'] : false;
+               $end = isset( $this->params['end'] ) ? $this->params['end'] : false;
+               $titles = $this->title->getBacklinkCache()->getLinks( $table, $start, $end );
+               # Convert into single page refresh links jobs.
+               # This handles well when in sapi mode and is useful in any case for job
+               # de-duplication. If many pages use template A, and that template itself
+               # uses template B, then an edit to both will create many duplicate jobs.
+               # Roughly speaking, for each page, one of the "RefreshLinksJob" jobs will
+               # get run first, and when it does, it will remove the duplicates. Of course,
+               # one page could have its job popped when the other page's job is still
+               # buried within the logic of a refreshLinks2 job.
+               $jobs = array();
+               foreach ( $titles as $title ) {
+                       $jobs[] = new RefreshLinksJob( $title,
+                               array( 'masterPos' => $masterPos ) + $this->getRootJobParams()
+                       ); // carry over information for de-duplication
+               }
+               return $jobs;
+       }
+
+       /**
+        * @return Array
+        */
+       public function getDeduplicationInfo() {
+               $info = parent::getDeduplicationInfo();
+               // Don't let highly unique "masterPos" values ruin duplicate detection
+               if ( is_array( $info['params'] ) ) {
+                       unset( $info['params']['masterPos'] );
+               }
+               return $info;
+       }
+}
diff --git a/includes/jobqueue/jobs/UploadFromUrlJob.php b/includes/jobqueue/jobs/UploadFromUrlJob.php
new file mode 100644 (file)
index 0000000..2cdac57
--- /dev/null
@@ -0,0 +1,187 @@
+<?php
+/**
+ * Job for asynchronous upload-by-url.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup JobQueue
+ */
+
+/**
+ * Job for asynchronous upload-by-url.
+ *
+ * This job is in fact an interface to UploadFromUrl, which is designed such
+ * that it does not require any globals. If it does, fix it elsewhere, do not
+ * add globals in here.
+ *
+ * @ingroup JobQueue
+ */
+class UploadFromUrlJob extends Job {
+       const SESSION_KEYNAME = 'wsUploadFromUrlJobData';
+
+       /** @var UploadFromUrl */
+       public $upload;
+
+       /** @var User */
+       protected $user;
+
+       public function __construct( $title, $params ) {
+               parent::__construct( 'uploadFromUrl', $title, $params );
+       }
+
+       public function run() {
+               global $wgCopyUploadAsyncTimeout;
+               # Initialize this object and the upload object
+               $this->upload = new UploadFromUrl();
+               $this->upload->initialize(
+                       $this->title->getText(),
+                       $this->params['url'],
+                       false
+               );
+               $this->user = User::newFromName( $this->params['userName'] );
+
+               # Fetch the file
+               $opts = array();
+               if ( $wgCopyUploadAsyncTimeout ) {
+                       $opts['timeout'] = $wgCopyUploadAsyncTimeout;
+               }
+               $status = $this->upload->fetchFile( $opts );
+               if ( !$status->isOk() ) {
+                       $this->leaveMessage( $status );
+
+                       return true;
+               }
+
+               # Verify upload
+               $result = $this->upload->verifyUpload();
+               if ( $result['status'] != UploadBase::OK ) {
+                       $status = $this->upload->convertVerifyErrorToStatus( $result );
+                       $this->leaveMessage( $status );
+
+                       return true;
+               }
+
+               # Check warnings
+               if ( !$this->params['ignoreWarnings'] ) {
+                       $warnings = $this->upload->checkWarnings();
+                       if ( $warnings ) {
+
+                               # Stash the upload
+                               $key = $this->upload->stashFile();
+
+                               // @todo FIXME: This has been broken for a while.
+                               // User::leaveUserMessage() does not exist.
+                               if ( $this->params['leaveMessage'] ) {
+                                       $this->user->leaveUserMessage(
+                                               wfMessage( 'upload-warning-subj' )->text(),
+                                               wfMessage( 'upload-warning-msg',
+                                                       $key,
+                                                       $this->params['url'] )->text()
+                                       );
+                               } else {
+                                       wfSetupSession( $this->params['sessionId'] );
+                                       $this->storeResultInSession( 'Warning',
+                                               'warnings', $warnings );
+                                       session_write_close();
+                               }
+
+                               return true;
+                       }
+               }
+
+               # Perform the upload
+               $status = $this->upload->performUpload(
+                       $this->params['comment'],
+                       $this->params['pageText'],
+                       $this->params['watch'],
+                       $this->user
+               );
+               $this->leaveMessage( $status );
+
+               return true;
+       }
+
+       /**
+        * Leave a message on the user talk page or in the session according to
+        * $params['leaveMessage'].
+        *
+        * @param Status $status
+        */
+       protected function leaveMessage( $status ) {
+               if ( $this->params['leaveMessage'] ) {
+                       if ( $status->isGood() ) {
+                               // @todo FIXME: user->leaveUserMessage does not exist.
+                               $this->user->leaveUserMessage( wfMessage( 'upload-success-subj' )->text(),
+                                       wfMessage( 'upload-success-msg',
+                                               $this->upload->getTitle()->getText(),
+                                               $this->params['url']
+                                       )->text() );
+                       } else {
+                               // @todo FIXME: user->leaveUserMessage does not exist.
+                               $this->user->leaveUserMessage( wfMessage( 'upload-failure-subj' )->text(),
+                                       wfMessage( 'upload-failure-msg',
+                                               $status->getWikiText(),
+                                               $this->params['url']
+                                       )->text() );
+                       }
+               } else {
+                       wfSetupSession( $this->params['sessionId'] );
+                       if ( $status->isOk() ) {
+                               $this->storeResultInSession( 'Success',
+                                       'filename', $this->upload->getLocalFile()->getName() );
+                       } else {
+                               $this->storeResultInSession( 'Failure',
+                                       'errors', $status->getErrorsArray() );
+                       }
+                       session_write_close();
+               }
+       }
+
+       /**
+        * Store a result in the session data. Note that the caller is responsible
+        * for appropriate session_start and session_write_close calls.
+        *
+        * @param string $result the result (Success|Warning|Failure)
+        * @param string $dataKey the key of the extra data
+        * @param mixed $dataValue The extra data itself
+        */
+       protected function storeResultInSession( $result, $dataKey, $dataValue ) {
+               $session =& self::getSessionData( $this->params['sessionKey'] );
+               $session['result'] = $result;
+               $session[$dataKey] = $dataValue;
+       }
+
+       /**
+        * Initialize the session data. Sets the intial result to queued.
+        */
+       public function initializeSessionData() {
+               $session =& self::getSessionData( $this->params['sessionKey'] );
+               $$session['result'] = 'Queued';
+       }
+
+       /**
+        * @param $key
+        * @return mixed
+        */
+       public static function &getSessionData( $key ) {
+               if ( !isset( $_SESSION[self::SESSION_KEYNAME][$key] ) ) {
+                       $_SESSION[self::SESSION_KEYNAME][$key] = array();
+               }
+
+               return $_SESSION[self::SESSION_KEYNAME][$key];
+       }
+}
diff --git a/includes/jobqueue/utils/BacklinkJobUtils.php b/includes/jobqueue/utils/BacklinkJobUtils.php
new file mode 100644 (file)
index 0000000..c8e5df6
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+/**
+ * Job to update links for a given title.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup JobQueue
+ * @author Aaron Schulz
+ */
+
+/**
+ * Class with Backlink related Job helper methods
+ *
+ * @ingroup JobQueue
+ * @since 1.23
+ */
+class BacklinkJobUtils {
+       /**
+        * Break down $job into approximately ($bSize/$cSize) leaf jobs and a single partition
+        * job that covers the remaining backlink range (if needed). Jobs for the first $bSize
+        * titles are collated ($cSize per job) into leaf jobs to do actual work. All the
+        * resulting jobs are of the same class as $job. No partition job is returned if the
+        * range covered by $job was less than $bSize, as the leaf jobs have full coverage.
+        *
+        * The leaf jobs have the 'pages' param set to a (<page ID>:(<namespace>,<DB key>),...)
+        * map so that the run() function knows what pages to act on. The leaf jobs will keep
+        * the same job title as the parent job (e.g. $job).
+        *
+        * The partition jobs have the 'range' parameter set to a map of the format
+        * (start:<integer>, end:<integer>, batchSize:<integer>, subranges:((<start>,<end>),...)),
+        * the 'table' parameter set to that of $job, and the 'recursive' parameter set to true.
+        * This method can be called on the resulting job to repeat the process again.
+        *
+        * The job provided ($job) must have the 'recursive' parameter set to true and the 'table'
+        * parameter must be set to a backlink table. The job title will be used as the title to
+        * find backlinks for. Any 'range' parameter must follow the same format as mentioned above.
+        * This should be managed by recursive calls to this method.
+        *
+        * The first jobs return are always the leaf jobs. This lets the caller use push() to
+        * put them directly into the queue and works well if the queue is FIFO. In such a queue,
+        * the leaf jobs have to get finished first before anything can resolve the next partition
+        * job, which keeps the queue very small.
+        *
+        * $opts includes:
+        *   - params : extra job parameters to include in each job
+        *
+        * @param Job $job
+        * @param int $bSize BacklinkCache partition size; usually $wgUpdateRowsPerJob
+        * @param int $cSize Max titles per leaf job; Usually 1 or a modest value
+        * @param array $opts Optional parameter map
+        * @return Job[] List of Job objects
+        */
+       public static function partitionBacklinkJob( Job $job, $bSize, $cSize, $opts = array() ) {
+               $class = get_class( $job );
+               $title = $job->getTitle();
+               $params = $job->getParams();
+
+               if ( isset( $params['pages'] ) || empty( $params['recursive'] ) ) {
+                       $ranges = array(); // sanity; this is a leaf node
+                       wfWarn( __METHOD__ . " called on {$job->getType()} leaf job (explosive recursion)." );
+               } elseif ( isset( $params['range'] ) ) {
+                       // This is a range job to trigger the insertion of partitioned/title jobs...
+                       $ranges = $params['range']['subranges'];
+                       $realBSize = $params['range']['batchSize'];
+               } else {
+                       // This is a base job to trigger the insertion of partitioned jobs...
+                       $ranges = $title->getBacklinkCache()->partition( $params['table'], $bSize );
+                       $realBSize = $bSize;
+               }
+
+               $extraParams = isset( $opts['params'] ) ? $opts['params'] : array();
+
+               $jobs = array();
+               // Combine the first range (of size $bSize) backlinks into leaf jobs
+               if ( isset( $ranges[0] ) ) {
+                       list( $start, $end ) = $ranges[0];
+                       $titles = $title->getBacklinkCache()->getLinks( $params['table'], $start, $end );
+                       foreach ( array_chunk( iterator_to_array( $titles ), $cSize ) as $titleBatch ) {
+                               $pages = array();
+                               foreach ( $titleBatch as $tl ) {
+                                       $pages[$tl->getArticleId()] = array( $tl->getNamespace(), $tl->getDBKey() );
+                               }
+                               $jobs[] = new $class(
+                                       $title, // maintain parent job title
+                                       array( 'pages' => $pages ) + $extraParams
+                               );
+                       }
+               }
+               // Take all of the remaining ranges and build a partition job from it
+               if ( isset( $ranges[1] ) ) {
+                       $jobs[] = new $class(
+                               $title, // maintain parent job title
+                               array(
+                                       'recursive'     => true,
+                                       'table'         => $params['table'],
+                                       'range'         => array(
+                                               'start'     => $ranges[1][0],
+                                               'end'       => $ranges[count( $ranges ) - 1][1],
+                                               'batchSize' => $realBSize,
+                                               'subranges' => array_slice( $ranges, 1 )
+                                       ),
+                               ) + $extraParams
+                       );
+               }
+
+               return $jobs;
+       }
+}
index 5a52fc7..0063a9b 100644 (file)
@@ -102,7 +102,7 @@ class CSSJanus {
                $patterns['possibly_negative_quantity'] = "((?:-?{$patterns['quantity']})|(?:inherit|auto))";
                $patterns['color'] = "(#?{$patterns['nmchar']}+|(?:rgba?|hsla?)\([ \d.,%-]+\))";
                $patterns['url_chars'] = "(?:{$patterns['url_special_chars']}|{$patterns['nonAscii']}|{$patterns['escape']})*";
-               $patterns['lookahead_not_open_brace'] = "(?!({$patterns['nmchar']}|\r?\n|\s|#|\:|\.|\,|\+|>|\(|\))*?{)";
+               $patterns['lookahead_not_open_brace'] = "(?!({$patterns['nmchar']}|\r?\n|\s|#|\:|\.|\,|\+|>|\(|\)|\[|\]|=|\*=|~=|\^=|'[^']*'])*?{)";
                $patterns['lookahead_not_closing_paren'] = "(?!{$patterns['url_chars']}?{$patterns['valid_after_uri_chars']}\))";
                $patterns['lookahead_for_closing_paren'] = "(?={$patterns['url_chars']}?{$patterns['valid_after_uri_chars']}\))";
                $patterns['noflip_single'] = "/({$patterns['noflip_annotation']}{$patterns['lookahead_not_open_brace']}[^;}]+;?)/i";
index 3b79684..e3a3e2c 100644 (file)
@@ -61,23 +61,38 @@ class CSSMin {
        /**
         * Gets a list of local file paths which are referenced in a CSS style sheet
         *
+        * This function will always return an empty array if the second parameter is not given or null
+        * for backwards-compatibility.
+        *
         * @param string $source CSS data to remap
         * @param string $path File path where the source was read from (optional)
         * @return array List of local file references
         */
        public static function getLocalFileReferences( $source, $path = null ) {
+               if ( $path === null ) {
+                       return array();
+               }
+
+               $path = rtrim( $path, '/' ) . '/';
                $files = array();
+
                $rFlags = PREG_OFFSET_CAPTURE | PREG_SET_ORDER;
                if ( preg_match_all( '/' . self::URL_REGEX . '/', $source, $matches, $rFlags ) ) {
                        foreach ( $matches as $match ) {
-                               $file = ( isset( $path )
-                                       ? rtrim( $path, '/' ) . '/'
-                                       : '' ) . "{$match['file'][0]}";
+                               $url = $match['file'][0];
 
-                               // Only proceed if we can access the file
-                               if ( !is_null( $path ) && file_exists( $file ) ) {
-                                       $files[] = $file;
+                               // Skip fully-qualified and protocol-relative URLs and data URIs
+                               if ( substr( $url, 0, 2 ) === '//' || parse_url( $url, PHP_URL_SCHEME ) ) {
+                                       break;
                                }
+
+                               $file = $path . $url;
+                               // Skip non-existent files
+                               if ( file_exists( $file ) ) {
+                                       break;
+                               }
+
+                               $files[] = $file;
                        }
                }
                return $files;
@@ -240,8 +255,7 @@ class CSSMin {
                $url = $file . $query;
 
                // Skip fully-qualified and protocol-relative URLs and data URIs
-               $urlScheme = substr( $url, 0, 2 ) === '//' || parse_url( $url, PHP_URL_SCHEME );
-               if ( $urlScheme ) {
+               if ( substr( $url, 0, 2 ) === '//' || parse_url( $url, PHP_URL_SCHEME ) ) {
                        return $url;
                }
 
index 0675b38..00cd257 100644 (file)
@@ -1,9 +1,29 @@
 <?php
+/**
+ * HTTP service client
+ *
+ * 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 to handle concurrent HTTP requests
  *
- * HTTP request maps use the following format:
+ * HTTP request maps are arrays that use the following format:
  *   - method   : GET/HEAD/PUT/POST/DELETE
  *   - url      : HTTP/HTTPS URL
  *   - query    : <query parameter field/value associative array> (uses RFC 3986)
@@ -14,6 +34,7 @@
  *                array bodies are encoded as multipart/form-data and strings
  *                use application/x-www-form-urlencoded (headers sent automatically)
  *   - stream   : resource to stream the HTTP response body to
+ * Request maps can use integer index 0 instead of 'method' and 1 instead of 'url'.
  *
  * @author Aaron Schulz
  * @since 1.23
@@ -24,12 +45,20 @@ class MultiHttpClient {
        /** @var string|null SSL certificates path  */
        protected $caBundlePath;
        /** @var integer */
-       protected $connTimeout;
+       protected $connTimeout = 10;
        /** @var integer */
-       protected $reqTimeout;
+       protected $reqTimeout = 300;
+       /** @var bool */
+       protected $usePipelining = false;
+       /** @var integer */
+       protected $maxConnsPerHost = 50;
 
        /**
         * @param array $options
+        *   - connTimeout     : default connection timeout
+        *   - reqTimeout      : default request timeout
+        *   - usePipelining   : whether to use HTTP pipelining if possible (for all hosts)
+        *   - maxConnsPerHost : maximum number of concurrent connections (per host)
         */
        public function __construct( array $options ) {
                if ( isset( $options['caBundlePath'] ) ) {
@@ -38,9 +67,11 @@ class MultiHttpClient {
                                throw new Exception( "Cannot find CA bundle: " . $this->caBundlePath );
                        }
                }
-               static $defaults = array( 'connTimeout' => 10, 'reqTimeout' => 300 );
-               foreach ( $defaults as $key => $default ) {
-                       $this->$key = isset( $options[$key] ) ? $options[$key] : $default;
+               static $opts = array( 'connTimeout', 'reqTimeout', 'usePipelining', 'maxConnsPerHost' );
+               foreach ( $opts as $key ) {
+                       if ( isset( $options[$key] ) ) {
+                               $this->$key = $options[$key];
+                       }
                }
        }
 
@@ -58,15 +89,18 @@ class MultiHttpClient {
         *              list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $req;
         *  </code>
         * @param array $req HTTP request array
+        * @param array $opts
+        *   - connTimeout    : connection timeout per request
+        *   - reqTimeout     : post-connection timeout per request
         * @return array Response array for request
         */
-       public function run( array $req ) {
-               $req = $this->runMulti( array( $req ) );
+       final public function run( array $req, array $opts = array() ) {
+               $req = $this->runMulti( array( $req ), $opts );
                return $req[0]['response'];
        }
 
        /**
-        * Execute a set of HTTP(S) request concurrently
+        * Execute a set of HTTP(S) requests concurrently
         *
         * The maps are returned by this method with the 'response' field set to a map of:
         *   - code    : HTTP response code or 0 if there was a serious cURL error
@@ -79,13 +113,19 @@ class MultiHttpClient {
         *              list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $req;
         *  </code>
         * All headers in the 'headers' field are normalized to use lower case names.
-        * This is true for the request headers and the response headers.
+        * This is true for the request headers and the response headers. Integer-indexed
+        * method/URL entries will also be changed to use the corresponding string keys.
         *
         * @param array $req Map of HTTP request arrays
+        * @param array $opts
+        *   - connTimeout     : connection timeout per request
+        *   - reqTimeout      : post-connection timeout per request
+        *   - usePipelining   : whether to use HTTP pipelining if possible
+        *   - maxConnsPerHost : maximum number of concurrent connections (per host)
         * @return array $reqs With response array populated for each
         */
-       public function runMulti( array $reqs ) {
-               $multiHandle = $this->getCurlMulti();
+       public function runMulti( array $reqs, array $opts = array() ) {
+               $chm = $this->getCurlMulti();
 
                // Normalize $reqs and add all of the required cURL handles...
                $handles = array();
@@ -97,6 +137,14 @@ class MultiHttpClient {
                                'body'     => '',
                                'error'    => ''
                        );
+                       if ( isset( $req[0] ) ) {
+                               $req['method'] = $req[0]; // short-form
+                               unset( $req[0] );
+                       }
+                       if ( isset( $req[1] ) ) {
+                               $req['url'] = $req[1]; // short-form
+                               unset( $req[1] );
+                       }
                        if ( !isset( $req['method'] ) ) {
                                throw new Exception( "Request has no 'method' field set." );
                        } elseif ( !isset( $req['url'] ) ) {
@@ -114,34 +162,54 @@ class MultiHttpClient {
                                $req['body'] = '';
                                $req['headers']['content-length'] = 0;
                        }
-                       $handles[$index] = $this->getCurlHandle( $req );
+                       $handles[$index] = $this->getCurlHandle( $req, $opts );
                        if ( count( $reqs ) > 1 ) {
                                // https://github.com/guzzle/guzzle/issues/349
                                curl_setopt( $handles[$index], CURLOPT_FORBID_REUSE, true );
                        }
-                       curl_multi_add_handle( $multiHandle, $handles[$index] );
                }
+               unset( $req ); // don't assign over this by accident
 
-               // Execute the cURL handles concurrently...
-               $active = null; // handles still being processed
-               do {
-                       // Do any available work...
+               $indexes = array_keys( $reqs );
+               if ( function_exists( 'curl_multi_setopt' ) ) { // PHP 5.5
+                       if ( isset( $opts['usePipelining'] ) ) {
+                               curl_multi_setopt( $chm, CURLMOPT_PIPELINING, (int)$opts['usePipelining'] );
+                       }
+                       if ( isset( $opts['maxConnsPerHost'] ) ) {
+                               // Keep these sockets around as they may be needed later in the request
+                               curl_multi_setopt( $chm, CURLMOPT_MAXCONNECTS, (int)$opts['maxConnsPerHost'] );
+                       }
+               }
+
+               // @TODO: use a per-host rolling handle window (e.g. CURLMOPT_MAX_HOST_CONNECTIONS)
+               $batches = array_chunk( $indexes, $this->maxConnsPerHost );
+
+               foreach ( $batches as $batch ) {
+                       // Attach all cURL handles for this batch
+                       foreach ( $batch as $index ) {
+                               curl_multi_add_handle( $chm, $handles[$index] );
+                       }
+                       // Execute the cURL handles concurrently...
+                       $active = null; // handles still being processed
                        do {
-                               $mrc = curl_multi_exec( $multiHandle, $active );
-                       } while ( $mrc == CURLM_CALL_MULTI_PERFORM );
-                       // Wait (if possible) for available work...
-                       if ( $active > 0 && $mrc == CURLM_OK ) {
-                               if ( curl_multi_select( $multiHandle, 10 ) == -1 ) {
-                                       // PHP bug 63411; http://curl.haxx.se/libcurl/c/curl_multi_fdset.html
-                                       usleep( 5000 ); // 5ms
+                               // Do any available work...
+                               do {
+                                       $mrc = curl_multi_exec( $chm, $active );
+                               } while ( $mrc == CURLM_CALL_MULTI_PERFORM );
+                               // Wait (if possible) for available work...
+                               if ( $active > 0 && $mrc == CURLM_OK ) {
+                                       if ( curl_multi_select( $chm, 10 ) == -1 ) {
+                                               // PHP bug 63411; http://curl.haxx.se/libcurl/c/curl_multi_fdset.html
+                                               usleep( 5000 ); // 5ms
+                                       }
                                }
-                       }
-               } while ( $active > 0 && $mrc == CURLM_OK );
+                       } while ( $active > 0 && $mrc == CURLM_OK );
+               }
 
                // Remove all of the added cURL handles and check for errors...
                foreach ( $reqs as $index => &$req ) {
                        $ch = $handles[$index];
-                       curl_multi_remove_handle( $multiHandle, $ch );
+                       curl_multi_remove_handle( $chm, $ch );
                        if ( curl_errno( $ch ) !== 0 ) {
                                $req['error'] = "(curl error: " . curl_errno( $ch ) . ") " . curl_error( $ch );
                        }
@@ -158,19 +226,31 @@ class MultiHttpClient {
                                unset( $req['_closeHandle'] );
                        }
                }
+               unset( $req ); // don't assign over this by accident
+
+               // Restore the default settings
+               if ( function_exists( 'curl_multi_setopt' ) ) { // PHP 5.5
+                       curl_multi_setopt( $chm, CURLMOPT_PIPELINING, (int)$this->usePipelining );
+                       curl_multi_setopt( $chm, CURLMOPT_MAXCONNECTS, (int)$this->maxConnsPerHost );
+               }
 
                return $reqs;
        }
 
        /**
         * @param array $req HTTP request map
+        * @param array $opts
+        *   - connTimeout    : default connection timeout
+        *   - reqTimeout     : default request timeout
         * @return resource
         */
-       protected function getCurlHandle( array &$req ) {
+       protected function getCurlHandle( array &$req, array $opts = array() ) {
                $ch = curl_init();
 
-               curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $this->connTimeout );
-               curl_setopt( $ch, CURLOPT_TIMEOUT, $this->reqTimeout );
+               curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT,
+                       isset( $opts['connTimeout'] ) ? $opts['connTimeout'] : $this->connTimeout );
+               curl_setopt( $ch, CURLOPT_TIMEOUT,
+                       isset( $opts['reqTimeout'] ) ? $opts['reqTimeout'] : $this->reqTimeout );
                curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
                curl_setopt( $ch, CURLOPT_MAXREDIRS, 4 );
                curl_setopt( $ch, CURLOPT_HEADER, 0 );
@@ -290,7 +370,12 @@ class MultiHttpClient {
         */
        protected function getCurlMulti() {
                if ( !$this->multiHandle ) {
-                       $this->multiHandle = curl_multi_init();
+                       $cmh = curl_multi_init();
+                       if ( function_exists( 'curl_multi_setopt' ) ) { // PHP 5.5
+                               curl_multi_setopt( $cmh, CURLMOPT_PIPELINING, (int)$this->usePipelining );
+                               curl_multi_setopt( $cmh, CURLMOPT_MAXCONNECTS, (int)$this->maxConnsPerHost );
+                       }
+                       $this->multiHandle = $cmh;
                }
                return $this->multiHandle;
        }
diff --git a/includes/libs/ProcessCacheLRU.php b/includes/libs/ProcessCacheLRU.php
new file mode 100644 (file)
index 0000000..f2d9f42
--- /dev/null
@@ -0,0 +1,132 @@
+<?php
+/**
+ * Per-process memory cache for storing items.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+/**
+ * Handles per process caching of items
+ * @ingroup Cache
+ */
+class ProcessCacheLRU {
+       /** @var Array */
+       protected $cache = array(); // (key => prop => value)
+       /** @var Array */
+       protected $cacheTimes = array(); // (key => prop => UNIX timestamp)
+
+       protected $maxCacheKeys; // integer; max entries
+
+       /**
+        * @param $maxKeys integer Maximum number of entries allowed (min 1).
+        * @throws UnexpectedValueException When $maxCacheKeys is not an int or =< 0.
+        */
+       public function __construct( $maxKeys ) {
+               if ( !is_int( $maxKeys ) || $maxKeys < 1 ) {
+                       throw new UnexpectedValueException( __METHOD__ . " must be given an integer >= 1" );
+               }
+               $this->maxCacheKeys = $maxKeys;
+       }
+
+       /**
+        * Set a property field for a cache entry.
+        * This will prune the cache if it gets too large based on LRU.
+        * If the item is already set, it will be pushed to the top of the cache.
+        *
+        * @param $key string
+        * @param $prop string
+        * @param $value mixed
+        * @return void
+        */
+       public function set( $key, $prop, $value ) {
+               if ( isset( $this->cache[$key] ) ) {
+                       $this->ping( $key ); // push to top
+               } elseif ( count( $this->cache ) >= $this->maxCacheKeys ) {
+                       reset( $this->cache );
+                       $evictKey = key( $this->cache );
+                       unset( $this->cache[$evictKey] );
+                       unset( $this->cacheTimes[$evictKey] );
+               }
+               $this->cache[$key][$prop] = $value;
+               $this->cacheTimes[$key][$prop] = time();
+       }
+
+       /**
+        * Check if a property field exists for a cache entry.
+        *
+        * @param $key string
+        * @param $prop string
+        * @param $maxAge integer Ignore items older than this many seconds (since 1.21)
+        * @return bool
+        */
+       public function has( $key, $prop, $maxAge = 0 ) {
+               if ( isset( $this->cache[$key][$prop] ) ) {
+                       return ( $maxAge <= 0 || ( time() - $this->cacheTimes[$key][$prop] ) <= $maxAge );
+               }
+
+               return false;
+       }
+
+       /**
+        * Get a property field for a cache entry.
+        * This returns null if the property is not set.
+        * If the item is already set, it will be pushed to the top of the cache.
+        *
+        * @param $key string
+        * @param $prop string
+        * @return mixed
+        */
+       public function get( $key, $prop ) {
+               if ( isset( $this->cache[$key][$prop] ) ) {
+                       $this->ping( $key ); // push to top
+                       return $this->cache[$key][$prop];
+               } else {
+                       return null;
+               }
+       }
+
+       /**
+        * Clear one or several cache entries, or all cache entries
+        *
+        * @param $keys string|Array
+        * @return void
+        */
+       public function clear( $keys = null ) {
+               if ( $keys === null ) {
+                       $this->cache = array();
+                       $this->cacheTimes = array();
+               } else {
+                       foreach ( (array)$keys as $key ) {
+                               unset( $this->cache[$key] );
+                               unset( $this->cacheTimes[$key] );
+                       }
+               }
+       }
+
+       /**
+        * Push an entry to the top of the cache
+        *
+        * @param $key string
+        */
+       protected function ping( $key ) {
+               $item = $this->cache[$key];
+               unset( $this->cache[$key] );
+               $this->cache[$key] = $item;
+       }
+}
index 3dce961..57d45ed 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * lessphp v0.4.0@261f1bd28f
+ * lessphp v0.4.0@b7cd5c79e8
  * http://leafo.net/lessphp
  *
  * LESS CSS compiler, adapted from http://lesscss.org
@@ -1011,6 +1011,39 @@ class lessc {
                return $this->lib_rgbahex($color);
        }
 
+       /**
+        * Given an url, decide whether to output a regular link or the base64-encoded contents of the file
+        *
+        * @param  array  $value either an argument list (two strings) or a single string
+        * @return string        formatted url(), either as a link or base64-encoded
+        */
+       protected function lib_data_uri($value) {
+               $mime = ($value[0] === 'list') ? $value[2][0][2] : null;
+               $url = ($value[0] === 'list') ? $value[2][1][2][0] : $value[2][0];
+
+               $fullpath = $this->findImport($url);
+
+               if($fullpath && ($fsize = filesize($fullpath)) !== false) {
+                       // IE8 can't handle data uris larger than 32KB
+                       if($fsize/1024 < 32) {
+                               if(is_null($mime)) {
+                                       if(class_exists('finfo')) { // php 5.3+
+                                               $finfo = new finfo(FILEINFO_MIME);
+                                               $mime = explode('; ', $finfo->file($fullpath));
+                                               $mime = $mime[0];
+                                       } elseif(function_exists('mime_content_type')) { // PHP 5.2
+                                               $mime = mime_content_type($fullpath);
+                                       }
+                               }
+
+                               if(!is_null($mime)) // fallback if the mime type is still unknown
+                                       $url = sprintf('data:%s;base64,%s', $mime, base64_encode(file_get_contents($fullpath)));
+                       }
+               }
+
+               return 'url("'.$url.'")';
+       }
+
        // utility func to unquote a string
        protected function lib_e($arg) {
                switch ($arg[0]) {
@@ -1234,24 +1267,44 @@ class lessc {
        }
 
        protected function lib_contrast($args) {
-               if ($args[0] != 'list' || count($args[2]) < 3) {
-                       return array(array('color', 0, 0, 0), 0);
-               }
+           $darkColor  = array('color', 0, 0, 0);
+           $lightColor = array('color', 255, 255, 255);
+           $threshold  = 0.43;
 
-               list($inputColor, $darkColor, $lightColor) = $args[2];
+           if ( $args[0] == 'list' ) {
+               $inputColor = ( isset($args[2][0]) ) ? $this->assertColor($args[2][0])  : $lightColor;
+               $darkColor  = ( isset($args[2][1]) ) ? $this->assertColor($args[2][1])  : $darkColor;
+               $lightColor = ( isset($args[2][2]) ) ? $this->assertColor($args[2][2])  : $lightColor;
+               $threshold  = ( isset($args[2][3]) ) ? $this->assertNumber($args[2][3]) : $threshold;
+           }
+           else {
+               $inputColor  = $this->assertColor($args);
+           }
 
-               $inputColor = $this->assertColor($inputColor);
-               $darkColor = $this->assertColor($darkColor);
-               $lightColor = $this->assertColor($lightColor);
-               $hsl = $this->toHSL($inputColor);
+           $inputColor = $this->coerceColor($inputColor);
+           $darkColor  = $this->coerceColor($darkColor);
+           $lightColor = $this->coerceColor($lightColor);
 
-               if ($hsl[3] > 50) {
-                       return $darkColor;
-               }
+           //Figure out which is actually light and dark!
+           if ( $this->lib_luma($darkColor) > $this->lib_luma($lightColor) ) {
+               $t  = $lightColor;
+               $lightColor = $darkColor;
+               $darkColor  = $t;
+           }
 
-               return $lightColor;
+           $inputColor_alpha = $this->lib_alpha($inputColor);
+           if ( ( $this->lib_luma($inputColor) * $inputColor_alpha) < $threshold) {
+               return $lightColor;
+           }
+           return $darkColor;
        }
 
+       protected function lib_luma($color) {
+           $color = $this->coerceColor($color);
+           return (0.2126 * $color[0] / 255) + (0.7152 * $color[1] / 255) + (0.0722 * $color[2] / 255);
+       }
+
+
        public function assertColor($value, $error = "expected color value") {
                $color = $this->coerceColor($value);
                if (is_null($color)) $this->throwError($error);
@@ -1475,8 +1528,9 @@ class lessc {
 
                        list(, $name, $args) = $value;
                        if ($name == "%") $name = "_sprintf";
+
                        $f = isset($this->libFunctions[$name]) ?
-                               $this->libFunctions[$name] : array($this, 'lib_'.$name);
+                               $this->libFunctions[$name] : array($this, 'lib_'.str_replace('-', '_', $name));
 
                        if (is_callable($f)) {
                                if ($args[0] == 'list')
@@ -2338,7 +2392,7 @@ class lessc_parser {
                        $this->throwError();
 
                // TODO report where the block was opened
-               if (!is_null($this->env->parent))
+               if ( !property_exists($this->env, 'parent') || !is_null($this->env->parent) )
                        throw new exception('parse error: unclosed block');
 
                return $this->env;
index f0f297f..ad8710c 100644 (file)
@@ -3,7 +3,7 @@
  * Contain classes to list log entries
  *
  * Copyright © 2004 Brion Vibber <brion@pobox.com>, 2008 Aaron Schulz
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index f5798e2..0e8d1de 100644 (file)
@@ -3,7 +3,7 @@
  * Contain log classes
  *
  * Copyright © 2002, 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 900ece9..e27e28a 100644 (file)
@@ -3,7 +3,7 @@
  * Contain classes to list log entries
  *
  * Copyright © 2004 Brion Vibber <brion@pobox.com>, 2008 Aaron Schulz
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index a608657..607c4e5 100644 (file)
@@ -797,8 +797,7 @@ class BitmapHandler extends ImageHandler {
                                wfDebug( __METHOD__ . ": running ImageMagick: $cmd\n" );
                                wfProfileIn( 'convert' );
                                $retval = 0;
-                               // @todo FIXME: Undefined variable %env
-                               $err = wfShellExecWithStderr( $cmd, $retval, $env );
+                               $err = wfShellExecWithStderr( $cmd, $retval );
                                wfProfileOut( 'convert' );
                                if ( $retval !== 0 ) {
                                        $this->logErrorForExternalProcess( $retval, $err, $cmd );
index 1197552..e1e7992 100644 (file)
@@ -3,7 +3,7 @@
  * DjVu image handler.
  *
  * Copyright © 2006 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index ee7eff8..9ed626f 100644 (file)
@@ -80,8 +80,7 @@ class JpegHandler extends ExifBitmapHandler {
                        wfDebug( __METHOD__ . ": running jpgtran: $cmd\n" );
                        wfProfileIn( 'jpegtran' );
                        $retval = 0;
-                       // @todo FIXME Undefined variable $env
-                       $err = wfShellExecWithStderr( $cmd, $retval, $env );
+                       $err = wfShellExecWithStderr( $cmd, $retval );
                        wfProfileOut( 'jpegtran' );
                        if ( $retval !== 0 ) {
                                $this->logErrorForExternalProcess( $retval, $err, $cmd );
index 0602986..5dc9590 100644 (file)
@@ -5,7 +5,7 @@
  * difference. Will run forever until it finds one or you kill it.
  *
  * Copyright (C) 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index c5c1be5..61c315f 100644 (file)
@@ -4,7 +4,7 @@
  * http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
  *
  * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 5a091af..f6f7dbb 100644 (file)
@@ -3,7 +3,7 @@
  * Unicode normalization routines
  *
  * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 89de929..59a64a3 100644 (file)
@@ -3,7 +3,7 @@
  * Approximate benchmark for some basic operations.
  *
  * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index f392df5..676f8f7 100644 (file)
@@ -4,7 +4,7 @@
  * and supplementary files.
  *
  * Copyright (C) 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 9732d76..9ae6f23 100644 (file)
@@ -5,7 +5,7 @@
  * to test regression on mem usage (bug 28146)
  *
  * Copyright © 2004-2011 Brion Vibber <brion@wikimedia.org>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index ad913b1..7be5251 100644 (file)
@@ -4,7 +4,7 @@
  * http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt
  *
  * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index e8fec93..443516b 100644 (file)
@@ -4,7 +4,7 @@
  * Should probably merge them for consistency.
  *
  * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 857943e..4a27692 100644 (file)
@@ -3,7 +3,7 @@
  * Classes to cache objects in PHP accelerators, SQL database or DBA files
  *
  * Copyright © 2003-2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * 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
@@ -250,8 +250,10 @@ abstract class BagOStuff {
         * @param $value mixed
         * @param $exptime int
         * @return bool success
+        * @deprecated 1.23
         */
        public function replace( $key, $value, $exptime = 0 ) {
+               wfDeprecated( __METHOD__, '1.23' );
                if ( $this->get( $key ) !== false ) {
                        return $this->set( $key, $value, $exptime );
                }
index f1644ed..87acb53 100644 (file)
@@ -107,17 +107,6 @@ class MemcachedBagOStuff extends BagOStuff {
                        $this->fixExpiry( $exptime ) );
        }
 
-       /**
-        * @param $key string
-        * @param $value int
-        * @param $exptime
-        * @return Mixed
-        */
-       public function replace( $key, $value, $exptime = 0 ) {
-               return $this->client->replace( $this->encodeKey( $key ), $value,
-                       $this->fixExpiry( $exptime ) );
-       }
-
        /**
         * Get the underlying client object. This is provided for debugging
         * purposes.
index 0c3b228..18546d4 100644 (file)
@@ -176,17 +176,6 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
                return $this->checkResult( $key, parent::add( $key, $value, $exptime ) );
        }
 
-       /**
-        * @param $key string
-        * @param $value int
-        * @param $exptime
-        * @return Mixed
-        */
-       public function replace( $key, $value, $exptime = 0 ) {
-               $this->debugLog( "replace($key)" );
-               return $this->checkResult( $key, parent::replace( $key, $value, $exptime ) );
-       }
-
        /**
         * @param $key string
         * @param $value int
index 56f2128..f54726f 100644 (file)
@@ -84,7 +84,7 @@ class RedisBagOStuff extends BagOStuff {
                        $result = $this->unserialize( $value );
                } catch ( RedisException $e ) {
                        $result = false;
-                       $this->handleException( $server, $conn, $e );
+                       $this->handleException( $conn, $e );
                }
 
                $this->logRequest( 'get', $key, $server, $result );
@@ -108,7 +108,7 @@ class RedisBagOStuff extends BagOStuff {
                        }
                } catch ( RedisException $e ) {
                        $result = false;
-                       $this->handleException( $server, $conn, $e );
+                       $this->handleException( $conn, $e );
                }
 
                $this->logRequest( 'set', $key, $server, $result );
@@ -142,7 +142,7 @@ class RedisBagOStuff extends BagOStuff {
                        $result = ( $conn->exec() == array( true ) );
                } catch ( RedisException $e ) {
                        $result = false;
-                       $this->handleException( $server, $conn, $e );
+                       $this->handleException( $conn, $e );
                }
 
                $this->logRequest( 'cas', $key, $server, $result );
@@ -162,7 +162,7 @@ class RedisBagOStuff extends BagOStuff {
                        $result = true;
                } catch ( RedisException $e ) {
                        $result = false;
-                       $this->handleException( $server, $conn, $e );
+                       $this->handleException( $conn, $e );
                }
 
                $this->logRequest( 'delete', $key, $server, $result );
@@ -201,7 +201,7 @@ class RedisBagOStuff extends BagOStuff {
                                        }
                                }
                        } catch ( RedisException $e ) {
-                               $this->handleException( $server, $conn, $e );
+                               $this->handleException( $conn, $e );
                        }
                }
 
@@ -229,44 +229,13 @@ class RedisBagOStuff extends BagOStuff {
                        }
                } catch ( RedisException $e ) {
                        $result = false;
-                       $this->handleException( $server, $conn, $e );
+                       $this->handleException( $conn, $e );
                }
 
                $this->logRequest( 'add', $key, $server, $result );
                return $result;
        }
 
-       /**
-        * Non-atomic implementation of replace(). Could perhaps be done atomically
-        * with WATCH or scripting, but this function is rarely used.
-        */
-       public function replace( $key, $value, $expiry = 0 ) {
-               $section = new ProfileSection( __METHOD__ );
-
-               list( $server, $conn ) = $this->getConnection( $key );
-               if ( !$conn ) {
-                       return false;
-               }
-               if ( !$conn->exists( $key ) ) {
-                       return false;
-               }
-
-               $expiry = $this->convertToRelative( $expiry );
-               try {
-                       if ( !$expiry ) {
-                               $result = $conn->set( $key, $this->serialize( $value ) );
-                       } else {
-                               $result = $conn->setex( $key, $expiry, $this->serialize( $value ) );
-                       }
-               } catch ( RedisException $e ) {
-                       $result = false;
-                       $this->handleException( $server, $conn, $e );
-               }
-
-               $this->logRequest( 'replace', $key, $server, $result );
-               return $result;
-       }
-
        /**
         * Non-atomic implementation of incr().
         *
@@ -290,7 +259,7 @@ class RedisBagOStuff extends BagOStuff {
                        $result = $this->unserialize( $conn->incrBy( $key, $value ) );
                } catch ( RedisException $e ) {
                        $result = false;
-                       $this->handleException( $server, $conn, $e );
+                       $this->handleException( $conn, $e );
                }
 
                $this->logRequest( 'incr', $key, $server, $result );
@@ -352,8 +321,8 @@ class RedisBagOStuff extends BagOStuff {
         * not. The safest response for us is to explicitly destroy the connection
         * object and let it be reopened during the next request.
         */
-       protected function handleException( $server, RedisConnRef $conn, $e ) {
-               $this->redisPool->handleException( $server, $conn, $e );
+       protected function handleException( RedisConnRef $conn, $e ) {
+               $this->redisPool->handleError( $conn, $e );
        }
 
        /**
index a2eb698..cbc060a 100644 (file)
@@ -107,7 +107,7 @@ class CoreTagHooks {
         * Renders a thumbnail list of the given images, with optional captions.
         * Full syntax documented on the wiki:
         *
-        *   http://www.mediawiki.org/wiki/Help:Images#Gallery_syntax
+        *   https://www.mediawiki.org/wiki/Help:Images#Gallery_syntax
         *
         * @todo break Parser::renderImageGallery out here too.
         *
index 9157619..f2c4fbf 100644 (file)
@@ -1293,19 +1293,19 @@ class Parser {
                        if ( substr( $m[0], 0, 3 ) === 'RFC' ) {
                                $keyword = 'RFC';
                                $urlmsg = 'rfcurl';
-                               $CssClass = 'mw-magiclink-rfc';
+                               $cssClass = 'mw-magiclink-rfc';
                                $id = $m[4];
                        } elseif ( substr( $m[0], 0, 4 ) === 'PMID' ) {
                                $keyword = 'PMID';
                                $urlmsg = 'pubmedurl';
-                               $CssClass = 'mw-magiclink-pmid';
+                               $cssClass = 'mw-magiclink-pmid';
                                $id = $m[4];
                        } else {
                                throw new MWException( __METHOD__ . ': unrecognised match type "' .
                                        substr( $m[0], 0, 20 ) . '"' );
                        }
                        $url = wfMessage( $urlmsg, $id )->inContentLanguage()->text();
-                       return Linker::makeExternalLink( $url, "{$keyword} {$id}", true, $CssClass );
+                       return Linker::makeExternalLink( $url, "{$keyword} {$id}", true, $cssClass );
                } elseif ( isset( $m[5] ) && $m[5] !== '' ) {
                        # ISBN
                        $isbn = $m[5];
@@ -1684,6 +1684,7 @@ class Parser {
                wfProfileOut( __METHOD__ );
                return $s;
        }
+
        /**
         * Get the rel attribute for a particular external link.
         *
@@ -1703,6 +1704,7 @@ class Parser {
                }
                return null;
        }
+
        /**
         * Get an associative array of additional HTML attributes appropriate for a
         * particular external link.  This currently may include rel => nofollow
@@ -4594,14 +4596,13 @@ class Parser {
 
        /**
         * Pre-save transform helper function
-        * @private
         *
         * @param $text string
         * @param $user User
         *
         * @return string
         */
-       function pstPass2( $text, $user ) {
+       private function pstPass2( $text, $user ) {
                global $wgContLang;
 
                # Note: This is the timestamp saved as hardcoded wikitext to
@@ -5923,7 +5924,7 @@ class Parser {
 
                # Strip external link markup
                # @todo FIXME: Not tolerant to blank link text
-               # I.E. [http://www.mediawiki.org] will render as [1] or something depending
+               # I.E. [https://www.mediawiki.org] will render as [1] or something depending
                # on how many empty links there are on the page - need to figure that out.
                $text = preg_replace( '/\[(?i:' . $this->mUrlProtocols . ')([^ ]+?) ([^[]+)\]/', '$2', $text );
 
index 9eaa3e2..040c74f 100644 (file)
@@ -112,7 +112,14 @@ class ParserCache {
        }
 
        /**
-        * Used to provide a unique id for the PoolCounter.
+        * Generates a key for caching the given article considering
+        * the given parser options.
+        *
+        * @note Which parser options influence the cache key
+        * is controlled via ParserOutput::recordOption() or
+        * ParserOptions::addExtraKey().
+        *
+        * @note Used by Article to provide a unique id for the PoolCounter.
         * It would be preferable to have this code in get()
         * instead of having Article looking in our internals.
         *
@@ -141,6 +148,7 @@ class ParserCache {
                                return false;
                        }
 
+                       // $optionsKey->mUsedOptions is set by save() by calling ParserOutput::getUsedOptions()
                        $usedOptions = $optionsKey->mUsedOptions;
                        wfDebug( "Parser cache options found.\n" );
                } else {
index 8cd978b..d1e3e58 100644 (file)
@@ -41,6 +41,7 @@ class ParserOutput extends CacheTime {
                $mModuleScripts = array(),    # Modules of which only the JS will be loaded by the resource loader
                $mModuleStyles = array(),     # Modules of which only the CSSS will be loaded by the resource loader
                $mModuleMessages = array(),   # Modules of which only the messages will be loaded by the resource loader
+               $mJsConfigVars = array(),     # JavaScript config variable for mw.config combined with this page
                $mOutputHooks = array(),      # Hook tags as per $wgParserOutputHooks
                $mWarnings = array(),         # Warning text to be returned to the user. Wikitext formatted, in the key only
                $mSections = array(),         # Table of contents
@@ -134,6 +135,8 @@ class ParserOutput extends CacheTime {
        function getModuleScripts()          { return $this->mModuleScripts; }
        function getModuleStyles()           { return $this->mModuleStyles; }
        function getModuleMessages()         { return $this->mModuleMessages; }
+       /** @since 1.23 */
+       function getJsConfigVars()           { return $this->mJsConfigVars; }
        function getOutputHooks()            { return (array)$this->mOutputHooks; }
        function getWarnings()               { return array_keys( $this->mWarnings ); }
        function getIndexPolicy()            { return $this->mIndexPolicy; }
@@ -318,6 +321,24 @@ class ParserOutput extends CacheTime {
                $this->mModuleMessages = array_merge( $this->mModuleMessages, (array)$modules );
        }
 
+       /**
+        * Add one or more variables to be set in mw.config in JavaScript.
+        *
+        * @param $keys {String|Array} Key or array of key/value pairs.
+        * @param $value {Mixed} [optional] Value of the configuration variable.
+        * @since 1.23
+        */
+       public function addJsConfigVars( $keys, $value = null ) {
+               if ( is_array( $keys ) ) {
+                       foreach ( $keys as $key => $value ) {
+                               $this->mJsConfigVars[$key] = $value;
+                       }
+                       return;
+               }
+
+               $this->mJsConfigVars[$keys] = $value;
+       }
+
        /**
         * Copy items from the OutputPage object into this one
         *
@@ -328,6 +349,7 @@ class ParserOutput extends CacheTime {
                $this->addModuleScripts( $out->getModuleScripts() );
                $this->addModuleStyles( $out->getModuleStyles() );
                $this->addModuleMessages( $out->getModuleMessages() );
+               $this->addJsConfigVars( $out->getJsConfigVars() );
 
                $this->mHeadItems = array_merge( $this->mHeadItems, $out->getHeadItemsArray() );
        }
@@ -396,7 +418,7 @@ class ParserOutput extends CacheTime {
         * @note: Do not use setProperty() to set a property which is only used
         * in a context where the ParserOutput object itself is already available,
         * for example a normal page view. There is no need to save such a property
-        * in the database since it the text is already parsed. You can just hook
+        * in the database since the text is already parsed. You can just hook
         * OutputPageParserOutput and get your data out of the ParserOutput object.
         *
         * If you are writing an extension where you want to set a property in the
@@ -453,16 +475,23 @@ class ParserOutput extends CacheTime {
        }
 
        /**
-        * Callback passed by the Parser to the ParserOptions to keep track of which options are used.
-        * @access private
+        * Tags a parser option for use in the cache key for this parser output.
+        * Registered as a watcher at ParserOptions::registerWatcher() by Parser::clearState().
+        *
+        * @see ParserCache::getKey
+        * @see ParserCache::save
+        * @see ParserOptions::addExtraKey
+        * @see ParserOptions::optionsHash
         */
-       function recordOption( $option ) {
+       public function recordOption( $option ) {
                $this->mAccessedOptions[$option] = true;
        }
 
        /**
-        * Adds an update job to the output. Any update jobs added to the output will eventually bexecuted in order to
-        * store any secondary information extracted from the page's content.
+        * Adds an update job to the output. Any update jobs added to the output will
+        * eventually be executed in order to store any secondary information extracted
+        * from the page's content. This is triggered by calling getSecondaryDataUpdates()
+        * and is used for forward links updates on edit and backlink updates by jobs.
         *
         * @since 1.20
         *
@@ -629,4 +658,14 @@ class ParserOutput extends CacheTime {
        function setLimitReportData( $key, $value ) {
                $this->mLimitReportData[$key] = $value;
        }
+
+       /**
+        * Save space for for serialization by removing useless values
+        */
+       function __sleep() {
+               return array_diff(
+                       array_keys( get_object_vars( $this ) ),
+                       array( 'mSecondaryDataUpdates', 'mParseStartTime' )
+               );
+       }
 }
index 6b2a874..0e7d42a 100644 (file)
@@ -1144,14 +1144,12 @@ class PPFrame_DOM implements PPFrame {
                                                || ( $flags & PPFrame::STRIP_COMMENTS )
                                        ) {
                                                $out .= '';
-                                       }
-                                       # Add a strip marker in PST mode so that pstPass2() can run some old-fashioned regexes on the result
-                                       # Not in RECOVER_COMMENTS mode (extractSections) though
-                                       elseif ( $this->parser->ot['wiki'] && !( $flags & PPFrame::RECOVER_COMMENTS ) ) {
+                                       } elseif ( $this->parser->ot['wiki'] && !( $flags & PPFrame::RECOVER_COMMENTS ) ) {
+                                               # Add a strip marker in PST mode so that pstPass2() can run some old-fashioned regexes on the result
+                                               # Not in RECOVER_COMMENTS mode (extractSections) though
                                                $out .= $this->parser->insertStripItem( $contextNode->textContent );
-                                       }
-                                       # Recover the literal comment in RECOVER_COMMENTS and pre+no-remove
-                                       else {
+                                       } else {
+                                               # Recover the literal comment in RECOVER_COMMENTS and pre+no-remove
                                                $out .= $contextNode->textContent;
                                        }
                                } elseif ( $contextNode->nodeName == 'ignore' ) {
index c2ab54e..deaf288 100644 (file)
@@ -440,9 +440,7 @@ class Preprocessor_Hash implements Preprocessor {
                                        $extNode->addChild( PPNode_Hash_Tree::newWithText( 'close', $close ) );
                                }
                                $accum->addNode( $extNode );
-                       }
-
-                       elseif ( $found == 'line-start' ) {
+                       } elseif ( $found == 'line-start' ) {
                                // Is this the start of a heading?
                                // Line break belongs before the heading element in any case
                                if ( $fakeLineStart ) {
@@ -1065,14 +1063,12 @@ class PPFrame_Hash implements PPFrame {
                                                || ( $flags & PPFrame::STRIP_COMMENTS )
                                        ) {
                                                $out .= '';
-                                       }
-                                       # Add a strip marker in PST mode so that pstPass2() can run some old-fashioned regexes on the result
-                                       # Not in RECOVER_COMMENTS mode (extractSections) though
-                                       elseif ( $this->parser->ot['wiki'] && !( $flags & PPFrame::RECOVER_COMMENTS ) ) {
+                                       } elseif ( $this->parser->ot['wiki'] && !( $flags & PPFrame::RECOVER_COMMENTS ) ) {
+                                               # Add a strip marker in PST mode so that pstPass2() can run some old-fashioned regexes on the result
+                                               # Not in RECOVER_COMMENTS mode (extractSections) though
                                                $out .= $this->parser->insertStripItem( $contextNode->firstChild->value );
-                                       }
-                                       # Recover the literal comment in RECOVER_COMMENTS and pre+no-remove
-                                       else {
+                                       } else {
+                                               # Recover the literal comment in RECOVER_COMMENTS and pre+no-remove
                                                $out .= $contextNode->firstChild->value;
                                        }
                                } elseif ( $contextNode->name == 'ignore' ) {
@@ -1389,6 +1385,7 @@ class PPTemplateFrame_Hash extends PPFrame_Hash {
                $s .= '}';
                return $s;
        }
+
        /**
         * Returns true if there are no arguments in this frame
         *
index 235a5ad..a26ef68 100644 (file)
@@ -227,15 +227,17 @@ class Profiler {
                $bit = array_pop( $this->mWorkStack );
 
                if ( !$bit ) {
-                       $this->debug( "Profiling error, !\$bit: $functionname\n" );
+                       $this->debugGroup( 'profileerror', "Profiling error, !\$bit: $functionname" );
                } else {
                        if ( $functionname == 'close' ) {
-                               $message = "Profile section ended by close(): {$bit[0]}";
-                               $this->debug( "$message\n" );
-                               $this->mStack[] = array( $message, 0, 0.0, 0, 0.0, 0 );
+                               if ( $bit[0] != '-total' ) {
+                                       $message = "Profile section ended by close(): {$bit[0]}";
+                                       $this->debugGroup( 'profileerror', $message );
+                                       $this->mStack[] = array( $message, 0, 0.0, 0, 0.0, 0 );
+                               }
                        } elseif ( $bit[0] != $functionname ) {
                                $message = "Profiling error: in({$bit[0]}), out($functionname)";
-                               $this->debug( "$message\n" );
+                               $this->debugGroup( 'profileerror', $message );
                                $this->mStack[] = array( $message, 0, 0.0, 0, 0.0, 0 );
                        }
                        $bit[] = $time;
@@ -324,7 +326,7 @@ class Profiler {
                                        list( $method, $realtime ) = $info;
                                        $msg .= sprintf( "%d\t%.6f\t%s\n", $i, $realtime, $method );
                                }
-                               wfDebugLog( 'DBPerformance', $msg );
+                               $this->debugGroup( 'DBPerformance', $msg );
                        }
                        unset( $this->mDBTrxHoldingLocks[$name] );
                        unset( $this->mDBTrxMethodTimes[$name] );
@@ -720,6 +722,18 @@ class Profiler {
                }
        }
 
+       /**
+        * Add an entry in the debug log group
+        *
+        * @param string $group Group to send the message to
+        * @param string $s to output
+        */
+       function debugGroup( $group, $s ) {
+               if ( function_exists( 'wfDebugLog' ) ) {
+                       wfDebugLog( $group, $s );
+               }
+       }
+
        /**
         * Get the content type sent out to the client.
         * Used for profilers that output instead of store data.
index e81c6ec..5ecfc21 100644 (file)
@@ -90,7 +90,7 @@ class ProfilerMwprof extends Profiler {
                // Check for unbalanced profileIn / profileOut calls.
                // Bad entries are logged but not sent.
                if ( $inName !== $outName ) {
-                       wfDebugLog( 'ProfilerUnbalanced', json_encode( array( $inName, $outName ) ) );
+                       $this->debugGroup( 'ProfilerUnbalanced', json_encode( array( $inName, $outName ) ) );
                        return;
                }
 
index ee92c17..7d78e36 100644 (file)
@@ -102,17 +102,18 @@ class ProfilerSimple extends Profiler {
                list( $ofname, /* $ocount */, $ortime, $octime ) = array_pop( $this->mWorkStack );
 
                if ( !$ofname ) {
-                       $this->debug( "Profiling error: $functionname\n" );
+                       $this->debugGroup( 'profileerror', "Profiling error: $functionname" );
                } else {
                        if ( $functionname == 'close' ) {
-                               $message = "Profile section ended by close(): {$ofname}";
-                               $functionname = $ofname;
-                               $this->debug( "$message\n" );
-                               $this->mCollated[$message] = $this->errorEntry;
-                       }
-                       elseif ( $ofname != $functionname ) {
+                               if ( $ofname != '-total' ) {
+                                       $message = "Profile section ended by close(): {$ofname}";
+                                       $functionname = $ofname;
+                                       $this->debugGroup( 'profileerror', $message );
+                                       $this->mCollated[$message] = $this->errorEntry;
+                               }
+                       } elseif ( $ofname != $functionname ) {
                                $message = "Profiling error: in({$ofname}), out($functionname)";
-                               $this->debug( "$message\n" );
+                               $this->debugGroup( 'profileerror', $message );
                                $this->mCollated[$message] = $this->errorEntry;
                        }
                        $elapsedcpu = $this->getTime( 'cpu' ) - $octime;
index ddbb548..22ddfb8 100644 (file)
@@ -30,7 +30,7 @@ class IRCColourfulRCFeedFormatter implements RCFeedFormatter {
         * @see RCFeedFormatter::getLine
         */
        public function getLine( array $feed, RecentChange $rc, $actionComment ) {
-               global $wgUseRCPatrol, $wgUseNPPatrol, $wgLocalInterwiki,
+               global $wgUseRCPatrol, $wgUseNPPatrol, $wgLocalInterwikis,
                        $wgCanonicalServer, $wgScript;
                $attribs = $rc->getAttributes();
                if ( $attribs['rc_type'] == RC_LOG ) {
@@ -88,8 +88,9 @@ class IRCColourfulRCFeedFormatter implements RCFeedFormatter {
                        $flag .= ( $attribs['rc_type'] == RC_NEW ? "N" : "" ) . ( $attribs['rc_minor'] ? "M" : "" ) . ( $attribs['rc_bot'] ? "B" : "" );
                }
 
-               if ( $feed['add_interwiki_prefix'] === true && $wgLocalInterwiki !== false ) {
-                       $prefix = $wgLocalInterwiki;
+               if ( $feed['add_interwiki_prefix'] === true && $wgLocalInterwikis ) {
+                       // we use the first entry in $wgLocalInterwikis in recent changes feeds
+                       $prefix = $wgLocalInterwikis[0];
                } elseif ( $feed['add_interwiki_prefix'] ) {
                        $prefix = $feed['add_interwiki_prefix'];
                } else {
index 557c1f6..12c452a 100644 (file)
 /**
  * Dynamic JavaScript and CSS resource loading system.
  *
- * Most of the documention is on the MediaWiki documentation wiki starting at:
- *    http://www.mediawiki.org/wiki/ResourceLoader
+ * Most of the documentation is on the MediaWiki documentation wiki starting at:
+ *    https://www.mediawiki.org/wiki/ResourceLoader
  */
 class ResourceLoader {
 
-       /* Protected Static Members */
+       /**
+        * @var int
+        */
        protected static $filterCacheVersion = 7;
+       /**
+        * @var array
+        */
        protected static $requiredSourceProperties = array( 'loadScript' );
 
-       /** Array: List of module name/ResourceLoaderModule object pairs */
+       /**
+        * @var array Module name/ResourceLoaderModule object pairs
+        */
        protected $modules = array();
 
-       /** Associative array mapping module name to info associative array */
+       /**
+        * @var array Associative array mapping module name to info associative array
+        */
        protected $moduleInfos = array();
 
-       /** Associative array mapping framework ids to a list of names of test suite modules */
-       /** like array( 'qunit' => array( 'mediawiki.tests.qunit.suites', 'ext.foo.tests', .. ), .. ) */
+       /**
+        * @var array Associative array mapping framework ids to a list of names of test suite modules
+        *      like array( 'qunit' => array( 'mediawiki.tests.qunit.suites', 'ext.foo.tests', .. ), .. )
+        */
        protected $testModuleNames = array();
 
-       /** array( 'source-id' => array( 'loadScript' => 'http://.../load.php' ) ) **/
+       /**
+        * @var array e.g. array( 'source-id' => array( 'loadScript' => 'http://.../load.php' ) )
+        */
        protected $sources = array();
 
-       /** @var bool */
+       /**
+        * @var bool
+        */
        protected $hasErrors = false;
 
-       /* Protected Methods */
-
        /**
-        * Loads information stored in the database about modules.
+        * Load information stored in the database about modules.
         *
         * This method grabs modules dependencies from the database and updates modules
         * objects.
@@ -64,7 +77,7 @@ class ResourceLoader {
         * performance improvement.
         *
         * @param array $modules List of module names to preload information for
-        * @param $context ResourceLoaderContext: Context to load the information within
+        * @param ResourceLoaderContext $context Context to load the information within
         */
        public function preloadModuleInfo( array $modules, ResourceLoaderContext $context ) {
                if ( !count( $modules ) ) {
@@ -122,18 +135,19 @@ class ResourceLoader {
        }
 
        /**
-        * Runs JavaScript or CSS data through a filter, caching the filtered result for future calls.
+        * Run JavaScript or CSS data through a filter, caching the filtered result for future calls.
         *
         * Available filters are:
-        *  - minify-js \see JavaScriptMinifier::minify
-        *  - minify-css \see CSSMin::minify
+        *
+        *    - minify-js \see JavaScriptMinifier::minify
+        *    - minify-css \see CSSMin::minify
         *
         * If $data is empty, only contains whitespace or the filter was unknown,
         * $data is returned unmodified.
         *
         * @param string $filter Name of filter to run
         * @param string $data Text to filter, such as JavaScript or CSS text
-        * @return String: Filtered data, or a comment containing an error message
+        * @return string Filtered data, or a comment containing an error message
         */
        protected function filter( $filter, $data ) {
                global $wgResourceLoaderMinifierStatementsOnOwnLine, $wgResourceLoaderMinifierMaxLineLength;
@@ -193,7 +207,7 @@ class ResourceLoader {
        /* Methods */
 
        /**
-        * Registers core modules and runs registration hooks.
+        * Register core modules and runs registration hooks.
         */
        public function __construct() {
                global $IP, $wgResourceModules, $wgResourceLoaderSources, $wgLoadScript, $wgEnableJavaScriptTest;
@@ -220,17 +234,17 @@ class ResourceLoader {
        }
 
        /**
-        * Registers a module with the ResourceLoader system.
+        * Register a module with the ResourceLoader system.
         *
-        * @param $name Mixed: Name of module as a string or List of name/object pairs as an array
+        * @param mixed $name Name of module as a string or List of name/object pairs as an array
         * @param array $info Module info array. For backwards compatibility with 1.17alpha,
         *   this may also be a ResourceLoaderModule object. Optional when using
         *   multiple-registration calling style.
         * @throws MWException: If a duplicate module registration is attempted
         * @throws MWException: If a module name contains illegal characters (pipes or commas)
         * @throws MWException: If something other than a ResourceLoaderModule is being registered
-        * @return Boolean: False if there were any errors, in which case one or more modules were not
-        *     registered
+        * @return boolean False if there were any errors, in which case one or more modules were
+        *   not registered
         */
        public function register( $name, $info = null ) {
                wfProfileIn( __METHOD__ );
@@ -322,8 +336,8 @@ class ResourceLoader {
         * Source properties:
         * 'loadScript': URL (either fully-qualified or protocol-relative) of load.php for this source
         *
-        * @param $id Mixed: source ID (string), or array( id1 => props1, id2 => props2, ... )
-        * @param array $properties source properties
+        * @param mixed $id Source ID (string), or array( id1 => props1, id2 => props2, ... )
+        * @param array $properties Source properties
         * @throws MWException
         */
        public function addSource( $id, $properties = null ) {
@@ -354,9 +368,9 @@ class ResourceLoader {
        }
 
        /**
-        * Get a list of module names
+        * Get a list of module names.
         *
-        * @return Array: List of module names
+        * @return array List of module names
         */
        public function getModuleNames() {
                return array_keys( $this->moduleInfos );
@@ -364,11 +378,12 @@ class ResourceLoader {
 
        /**
         * Get a list of test module names for one (or all) frameworks.
+        *
         * If the given framework id is unknkown, or if the in-object variable is not an array,
         * then it will return an empty array.
         *
-        * @param string $framework Optional. Get only the test module names for one
-        * particular framework.
+        * @param string $framework Get only the test module names for one
+        *   particular framework (optional)
         * @return Array
         */
        public function getTestModuleNames( $framework = 'all' ) {
@@ -416,18 +431,18 @@ class ResourceLoader {
        }
 
        /**
-        * Get the list of sources
+        * Get the list of sources.
         *
-        * @return Array: array( id => array of properties, .. )
+        * @return array Like array( id => array of properties, .. )
         */
        public function getSources() {
                return $this->sources;
        }
 
        /**
-        * Outputs a response to a resource load-request, including a content-type header.
+        * Output a response to a load request, including the content-type header.
         *
-        * @param $context ResourceLoaderContext: Context in which a response should be formed
+        * @param ResourceLoaderContext $context Context in which a response should be formed
         */
        public function respond( ResourceLoaderContext $context ) {
                global $wgCacheEpoch, $wgUseFileCache;
@@ -551,7 +566,7 @@ class ResourceLoader {
 
        /**
         * Send content type and last modified headers to the client.
-        * @param $context ResourceLoaderContext
+        * @param ResourceLoaderContext $context
         * @param string $mtime TS_MW timestamp to use for last-modified
         * @param bool $errors Whether there are commented-out errors in the response
         * @return void
@@ -589,8 +604,11 @@ class ResourceLoader {
        }
 
        /**
+        * Respond with 304 Last Modified if appropiate.
+        *
         * If there's an If-Modified-Since header, respond with a 304 appropriately
         * and clear out the output buffer. If the client cache is too old then do nothing.
+        *
         * @param $context ResourceLoaderContext
         * @param string $mtime The TS_MW timestamp to check the header against
         * @return bool True if 304 header sent and output handled
@@ -624,10 +642,10 @@ class ResourceLoader {
        }
 
        /**
-        * Send out code for a response from file cache if possible
+        * Send out code for a response from file cache if possible.
         *
-        * @param $fileCache ResourceFileCache: Cache object for this request URL
-        * @param $context ResourceLoaderContext: Context in which to generate a response
+        * @param ResourceFileCache $fileCache Cache object for this request URL
+        * @param ResourceLoaderContext $context Context in which to generate a response
         * @return bool If this found a cache file and handled the response
         */
        protected function tryRespondFromFileCache(
@@ -675,10 +693,11 @@ class ResourceLoader {
        }
 
        /**
-        * Generate a CSS or JS comment block. Only use this for public data,
-        * not error message details.
+        * Generate a CSS or JS comment block.
+        *
+        * Only use this for public data, not error message details.
         *
-        * @param $text string
+        * @param string $text
         * @return string
         */
        public static function makeComment( $text ) {
@@ -687,7 +706,7 @@ class ResourceLoader {
        }
 
        /**
-        * Handle exception display
+        * Handle exception display.
         *
         * @param Exception $e to be shown to the user
         * @return string sanitized text that can be returned to the user
@@ -703,7 +722,7 @@ class ResourceLoader {
        }
 
        /**
-        * Generates code for a response
+        * Generate code for a response.
         *
         * @param $context ResourceLoaderContext Context in which to generate a response
         * @param array $modules List of module objects keyed by module name
@@ -887,17 +906,15 @@ class ResourceLoader {
        /* Static Methods */
 
        /**
-        * Returns JS code to call to mw.loader.implement for a module with
-        * given properties.
+        * Return JS code that calls mw.loader.implement with given module properties.
         *
         * @param string $name Module name
-        * @param $scripts Mixed: List of URLs to JavaScript files or String of JavaScript code
-        * @param $styles Mixed: Array of CSS strings keyed by media type, or an array of lists of URLs to
-        * CSS files keyed by media type
-        * @param $messages Mixed: List of messages associated with this module. May either be an
-        *     associative array mapping message key to value, or a JSON-encoded message blob containing
-        *     the same data, wrapped in an XmlJsCode object.
-        *
+        * @param mixed $scripts List of URLs to JavaScript files or String of JavaScript code
+        * @param mixed $styles Array of CSS strings keyed by media type, or an array of lists of URLs
+        *   to CSS files keyed by media type
+        * @param mixed $messages List of messages associated with this module. May either be an
+        *   associative array mapping message key to value, or a JSON-encoded message blob containing
+        *   the same data, wrapped in an XmlJsCode object.
         * @throws MWException
         * @return string
         */
@@ -927,22 +944,24 @@ class ResourceLoader {
        /**
         * Returns JS code which, when called, will register a given list of messages.
         *
-        * @param $messages Mixed: Either an associative array mapping message key to value, or a
-        *     JSON-encoded message blob containing the same data, wrapped in an XmlJsCode object.
-        *
+        * @param mixed $messages Either an associative array mapping message key to value, or a
+        *   JSON-encoded message blob containing the same data, wrapped in an XmlJsCode object.
         * @return string
         */
        public static function makeMessageSetScript( $messages ) {
-               return Xml::encodeJsCall( 'mw.messages.set', array( (object)$messages ) );
+               return Xml::encodeJsCall(
+                       'mw.messages.set',
+                       array( (object)$messages ),
+                       ResourceLoader::inDebugMode()
+               );
        }
 
        /**
         * Combines an associative array mapping media type to CSS into a
         * single stylesheet with "@media" blocks.
         *
-        * @param array $stylePairs Array keyed by media type containing (arrays of) CSS strings.
-        *
-        * @return Array
+        * @param array $stylePairs Array keyed by media type containing (arrays of) CSS strings
+        * @return array
         */
        private static function makeCombinedStyles( array $stylePairs ) {
                $out = array();
@@ -981,16 +1000,23 @@ class ResourceLoader {
         *    - ResourceLoader::makeLoaderStateScript( array( $name => $state, ... ) ):
         *         Set the state of modules with the given names to the given states
         *
-        * @param $name string
+        * @param string $name
         * @param $state
-        *
         * @return string
         */
        public static function makeLoaderStateScript( $name, $state = null ) {
                if ( is_array( $name ) ) {
-                       return Xml::encodeJsCall( 'mw.loader.state', array( $name ) );
+                       return Xml::encodeJsCall(
+                               'mw.loader.state',
+                               array( $name ),
+                               ResourceLoader::inDebugMode()
+                       );
                } else {
-                       return Xml::encodeJsCall( 'mw.loader.state', array( $name, $state ) );
+                       return Xml::encodeJsCall(
+                               'mw.loader.state',
+                               array( $name, $state ),
+                               ResourceLoader::inDebugMode()
+                       );
                }
        }
 
@@ -1001,19 +1027,20 @@ class ResourceLoader {
         * and $group as supplied.
         *
         * @param string $name Module name
-        * @param $version Integer: Module version number as a timestamp
+        * @param int $version Module version number as a timestamp
         * @param array $dependencies List of module names on which this module depends
         * @param string $group Group which the module is in.
         * @param string $source Source of the module, or 'local' if not foreign.
         * @param string $script JavaScript code
-        *
         * @return string
         */
        public static function makeCustomLoaderScript( $name, $version, $dependencies, $group, $source, $script ) {
                $script = str_replace( "\n", "\n\t", trim( $script ) );
                return Xml::encodeJsCall(
                        "( function ( name, version, dependencies, group, source ) {\n\t$script\n} )",
-                       array( $name, $version, $dependencies, $group, $source ) );
+                       array( $name, $version, $dependencies, $group, $source ),
+                       ResourceLoader::inDebugMode()
+               );
        }
 
        /**
@@ -1034,22 +1061,28 @@ class ResourceLoader {
         *        Registers modules with the given names and parameters.
         *
         * @param string $name Module name
-        * @param $version Integer: Module version number as a timestamp
+        * @param int $version Module version number as a timestamp
         * @param array $dependencies List of module names on which this module depends
-        * @param string $group group which the module is in.
-        * @param string $source source of the module, or 'local' if not foreign
-        *
+        * @param string $group Group which the module is in
+        * @param string $source Source of the module, or 'local' if not foreign
         * @return string
         */
        public static function makeLoaderRegisterScript( $name, $version = null,
                $dependencies = null, $group = null, $source = null
        ) {
                if ( is_array( $name ) ) {
-                       return Xml::encodeJsCall( 'mw.loader.register', array( $name ) );
+                       return Xml::encodeJsCall(
+                               'mw.loader.register',
+                               array( $name ),
+                               ResourceLoader::inDebugMode()
+                       );
                } else {
                        $version = (int)$version > 1 ? (int)$version : 1;
-                       return Xml::encodeJsCall( 'mw.loader.register',
-                               array( $name, $version, $dependencies, $group, $source ) );
+                       return Xml::encodeJsCall(
+                               'mw.loader.register',
+                               array( $name, $version, $dependencies, $group, $source ),
+                               ResourceLoader::inDebugMode()
+                       );
                }
        }
 
@@ -1065,14 +1098,21 @@ class ResourceLoader {
         *
         * @param string $id source ID
         * @param array $properties source properties (see addSource())
-        *
         * @return string
         */
        public static function makeLoaderSourcesScript( $id, $properties = null ) {
                if ( is_array( $id ) ) {
-                       return Xml::encodeJsCall( 'mw.loader.addSource', array( $id ) );
+                       return Xml::encodeJsCall(
+                               'mw.loader.addSource',
+                               array( $id ),
+                               ResourceLoader::inDebugMode()
+                       );
                } else {
-                       return Xml::encodeJsCall( 'mw.loader.addSource', array( $id, $properties ) );
+                       return Xml::encodeJsCall(
+                               'mw.loader.addSource',
+                               array( $id, $properties ),
+                               ResourceLoader::inDebugMode()
+                       );
                }
        }
 
@@ -1081,7 +1121,6 @@ class ResourceLoader {
         * present.
         *
         * @param string $script JavaScript code
-        *
         * @return string
         */
        public static function makeLoaderConditionalScript( $script ) {
@@ -1093,11 +1132,14 @@ class ResourceLoader {
         * the given value.
         *
         * @param array $configuration List of configuration values keyed by variable name
-        *
         * @return string
         */
        public static function makeConfigSetScript( array $configuration ) {
-               return Xml::encodeJsCall( 'mw.config.set', array( $configuration ), ResourceLoader::inDebugMode() );
+               return Xml::encodeJsCall(
+                       'mw.config.set',
+                       array( $configuration ),
+                       ResourceLoader::inDebugMode()
+               );
        }
 
        /**
@@ -1105,7 +1147,7 @@ class ResourceLoader {
         *
         * For example, array( 'foo.bar', 'foo.baz', 'bar.baz', 'bar.quux' )
         * becomes 'foo.bar,baz|bar.baz,quux'
-        * @param array $modules of module names (strings)
+        * @param array $modules List of module names (strings)
         * @return string Packed query string
         */
        public static function makePackedModulesString( $modules ) {
index 22ff6a7..b90ca44 100644 (file)
@@ -83,8 +83,6 @@ class ResourceLoaderContext {
         */
        public static function expandModuleNames( $modules ) {
                $retval = array();
-               // For backwards compatibility with an earlier hack, replace ! with .
-               $modules = str_replace( '!', '.', $modules );
                $exploded = explode( '|', $modules );
                foreach ( $exploded as $group ) {
                        if ( strpos( $group, ',' ) === false ) {
index eaff86f..68bfe59 100644 (file)
@@ -429,10 +429,11 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                foreach ( $styles as $styleFiles ) {
                        $files = array_merge( $files, $styleFiles );
                }
-               $skinFiles = self::tryForKey(
-                       self::collateFilePathListByOption( $this->skinStyles, 'media', 'all' ),
-                       $context->getSkin(),
-                       'default'
+
+               $skinFiles = self::collateFilePathListByOption(
+                       self::tryForKey( $this->skinStyles, $context->getSkin(), 'default' ),
+                       'media',
+                       'all'
                );
                foreach ( $skinFiles as $styleFiles ) {
                        $files = array_merge( $files, $styleFiles );
@@ -614,7 +615,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                return array_merge_recursive(
                        self::collateFilePathListByOption( $this->styles, 'media', 'all' ),
                        self::collateFilePathListByOption(
-                               self::tryForKey( $this->skinStyles, $context->getSkin(), 'default' ), 'media', 'all'
+                               self::tryForKey( $this->skinStyles, $context->getSkin(), 'default' ),
+                               'media',
+                               'all'
                        )
                );
        }
@@ -674,6 +677,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         *
         * @param bool $flip
         *
+        * @throws MWException
         * @return array: List of concatenated and remapped CSS data from $styles,
         *     keyed by media type
         */
@@ -683,14 +687,11 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                }
                foreach ( $styles as $media => $files ) {
                        $uniqueFiles = array_unique( $files );
-                       $styles[$media] = implode(
-                               "\n",
-                               array_map(
-                                       array( $this, 'readStyleFile' ),
-                                       $uniqueFiles,
-                                       array_fill( 0, count( $uniqueFiles ), $flip )
-                               )
-                       );
+                       $styleFiles = array();
+                       foreach ( $uniqueFiles as $file ) {
+                               $styleFiles[] = $this->readStyleFile( $file, $flip );
+                       }
+                       $styles[$media] = implode( "\n", $styleFiles );
                }
                return $styles;
        }
index d0c3068..64fafd7 100644 (file)
@@ -42,7 +42,8 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        $wgEnableAPI, $wgEnableWriteAPI, $wgDBname,
                        $wgSitename, $wgFileExtensions, $wgExtensionAssetsPath,
                        $wgCookiePrefix, $wgResourceLoaderMaxQueryLength,
-                       $wgResourceLoaderStorageEnabled, $wgResourceLoaderStorageVersion;
+                       $wgResourceLoaderStorageEnabled, $wgResourceLoaderStorageVersion,
+                       $wgSearchType;
 
                $mainPage = Title::newMainPage();
 
@@ -71,6 +72,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        'wgScriptPath' => $wgScriptPath,
                        'wgScriptExtension' => $wgScriptExtension,
                        'wgScript' => $wgScript,
+                       'wgSearchType' => $wgSearchType,
                        'wgVariantArticlePath' => $wgVariantArticlePath,
                        // Force object to avoid "empty" associative array from
                        // becoming [] instead of {} in JS (bug 34604)
@@ -149,24 +151,22 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        // seem to do that, and custom implementations might forget. Coerce it to TS_UNIX
                        $moduleMtime = wfTimestamp( TS_UNIX, $module->getModifiedTime( $context ) );
                        $mtime = max( $moduleMtime, wfTimestamp( TS_UNIX, $wgCacheEpoch ) );
-                       // Modules without dependencies, a group or a foreign source pass two arguments (name, timestamp) to
-                       // mw.loader.register()
+
                        if ( !count( $deps ) && $group === null && $source === 'local' ) {
+                               // Modules without dependencies, a group or a foreign source pass two arguments (name, timestamp) to
+                               // mw.loader.register()
                                $registrations[] = array( $name, $mtime );
-                       }
-                       // Modules with dependencies but no group or foreign source pass three arguments
-                       // (name, timestamp, dependencies) to mw.loader.register()
-                       elseif ( $group === null && $source === 'local' ) {
+                       } elseif ( $group === null && $source === 'local' ) {
+                               // Modules with dependencies but no group or foreign source pass three arguments
+                               // (name, timestamp, dependencies) to mw.loader.register()
                                $registrations[] = array( $name, $mtime, $deps );
-                       }
-                       // Modules with a group but no foreign source pass four arguments (name, timestamp, dependencies, group)
-                       // to mw.loader.register()
-                       elseif ( $source === 'local' ) {
+                       } elseif ( $source === 'local' ) {
+                               // Modules with a group but no foreign source pass four arguments (name, timestamp, dependencies, group)
+                               // to mw.loader.register()
                                $registrations[] = array( $name, $mtime, $deps, $group );
-                       }
-                       // Modules with a foreign source pass five arguments (name, timestamp, dependencies, group, source)
-                       // to mw.loader.register()
-                       else {
+                       } else {
+                               // Modules with a foreign source pass five arguments (name, timestamp, dependencies, group, source)
+                               // to mw.loader.register()
                                $registrations[] = array( $name, $mtime, $deps, $group, $source );
                        }
                }
@@ -185,6 +185,42 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                return true;
        }
 
+       /**
+        * Get the load URL of the startup modules.
+        *
+        * This is a helper for getScript(), but can also be called standalone, such
+        * as when generating an AppCache manifest.
+        *
+        * @param $context ResourceLoaderContext
+        * @return string
+        */
+       public static function getStartupModulesUrl( ResourceLoaderContext $context ) {
+               // The core modules:
+               $moduleNames = array( 'jquery', 'mediawiki' );
+               wfRunHooks( 'ResourceLoaderGetStartupModules', array( &$moduleNames ) );
+
+               // Get the latest version
+               $loader = $context->getResourceLoader();
+               $version = 0;
+               foreach ( $moduleNames as $moduleName ) {
+                       $version = max( $version,
+                               $loader->getModule( $moduleName )->getModifiedTime( $context )
+                       );
+               }
+
+               $query = array(
+                       'modules' => ResourceLoader::makePackedModulesString( $moduleNames ),
+                       'only' => 'scripts',
+                       'lang' => $context->getLanguage(),
+                       'skin' => $context->getSkin(),
+                       'debug' => $context->getDebug() ? 'true' : 'false',
+                       'version' => wfTimestamp( TS_ISO_8601_BASIC, $version )
+               );
+               // Ensure uniform query order
+               ksort( $query );
+               return  wfAppendQuery( wfScript( 'load' ), $query );
+       }
+
        /**
         * @param $context ResourceLoaderContext
         * @return string
@@ -195,30 +231,6 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                $out = file_get_contents( "$IP/resources/startup.js" );
                if ( $context->getOnly() === 'scripts' ) {
 
-                       // The core modules:
-                       $moduleNames = array( 'jquery', 'mediawiki' );
-                       wfRunHooks( 'ResourceLoaderGetStartupModules', array( &$moduleNames ) );
-
-                       // Get the latest version
-                       $loader = $context->getResourceLoader();
-                       $version = 0;
-                       foreach ( $moduleNames as $moduleName ) {
-                               $version = max( $version,
-                                       $loader->getModule( $moduleName )->getModifiedTime( $context )
-                               );
-                       }
-                       // Build load query for StartupModules
-                       $query = array(
-                               'modules' => ResourceLoader::makePackedModulesString( $moduleNames ),
-                               'only' => 'scripts',
-                               'lang' => $context->getLanguage(),
-                               'skin' => $context->getSkin(),
-                               'debug' => $context->getDebug() ? 'true' : 'false',
-                               'version' => wfTimestamp( TS_ISO_8601_BASIC, $version )
-                       );
-                       // Ensure uniform query order
-                       ksort( $query );
-
                        // Startup function
                        $configuration = $this->getConfig( $context );
                        $registrations = self::getModuleRegistrations( $context );
@@ -230,7 +242,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                                "};\n";
 
                        // Conditional script injection
-                       $scriptTag = Html::linkedScript( wfAppendQuery( wfScript( 'load' ), $query ) );
+                       $scriptTag = Html::linkedScript( self::getStartupModulesUrl( $context ) );
                        $out .= "if ( isCompatible() ) {\n" .
                                "\t" . Xml::encodeJsCall( 'document.write', array( $scriptTag ) ) .
                                "}\n" .
index 0509008..7992882 100644 (file)
@@ -687,6 +687,7 @@ class RevDel_FileItem extends RevDel_Item {
                }
                return '<span class="history-deleted">' . $link . '</span>';
        }
+
        /**
         * Generate a user tool link cluster if the current user is allowed to view it
         * @return string HTML
index 882919f..a96ade0 100644 (file)
@@ -439,6 +439,7 @@ class SearchEngine {
                $lc = $this->legalSearchChars();
                return trim( preg_replace( "/[^{$lc}]/", " ", $text ) );
        }
+
        /**
         * Load up the appropriate search engine class for the currently
         * active database backend, and return a configured instance.
@@ -561,174 +562,6 @@ class SearchEngine {
        }
 }
 
-/**
- * @ingroup Search
- */
-class SearchResultSet {
-       /**
-        * Fetch an array of regular expression fragments for matching
-        * the search terms as parsed by this engine in a text extract.
-        * STUB
-        *
-        * @return Array
-        */
-       function termMatches() {
-               return array();
-       }
-
-       function numRows() {
-               return 0;
-       }
-
-       /**
-        * Return true if results are included in this result set.
-        * STUB
-        *
-        * @return Boolean
-        */
-       function hasResults() {
-               return false;
-       }
-
-       /**
-        * Some search modes return a total hit count for the query
-        * in the entire article database. This may include pages
-        * in namespaces that would not be matched on the given
-        * settings.
-        *
-        * Return null if no total hits number is supported.
-        *
-        * @return Integer
-        */
-       function getTotalHits() {
-               return null;
-       }
-
-       /**
-        * Some search modes return a suggested alternate term if there are
-        * no exact hits. Returns true if there is one on this set.
-        *
-        * @return Boolean
-        */
-       function hasSuggestion() {
-               return false;
-       }
-
-       /**
-        * @return String: suggested query, null if none
-        */
-       function getSuggestionQuery() {
-               return null;
-       }
-
-       /**
-        * @return String: HTML highlighted suggested query, '' if none
-        */
-       function getSuggestionSnippet() {
-               return '';
-       }
-
-       /**
-        * Return information about how and from where the results were fetched,
-        * should be useful for diagnostics and debugging
-        *
-        * @return String
-        */
-       function getInfo() {
-               return null;
-       }
-
-       /**
-        * Return a result set of hits on other (multiple) wikis associated with this one
-        *
-        * @return SearchResultSet
-        */
-       function getInterwikiResults() {
-               return null;
-       }
-
-       /**
-        * Check if there are results on other wikis
-        *
-        * @return Boolean
-        */
-       function hasInterwikiResults() {
-               return $this->getInterwikiResults() != null;
-       }
-
-       /**
-        * Fetches next search result, or false.
-        * STUB
-        *
-        * @return SearchResult
-        */
-       function next() {
-               return false;
-       }
-
-       /**
-        * Frees the result set, if applicable.
-        */
-       function free() {
-               // ...
-       }
-
-       /**
-        * Did the search contain search syntax?  If so, Special:Search won't offer
-        * the user a link to a create a page named by the search string because the
-        * name would contain the search syntax.
-        */
-       public function searchContainedSyntax() {
-               return false;
-       }
-}
-
-/**
- * This class is used for different SQL-based search engines shipped with MediaWiki
- */
-class SqlSearchResultSet extends SearchResultSet {
-
-       protected $mResultSet;
-
-       function __construct( $resultSet, $terms ) {
-               $this->mResultSet = $resultSet;
-               $this->mTerms = $terms;
-       }
-
-       function termMatches() {
-               return $this->mTerms;
-       }
-
-       function numRows() {
-               if ( $this->mResultSet === false ) {
-                       return false;
-               }
-
-               return $this->mResultSet->numRows();
-       }
-
-       function next() {
-               if ( $this->mResultSet === false ) {
-                       return false;
-               }
-
-               $row = $this->mResultSet->fetchObject();
-               if ( $row === false ) {
-                       return false;
-               }
-
-               return SearchResult::newFromRow( $row );
-       }
-
-       function free() {
-               if ( $this->mResultSet === false ) {
-                       return false;
-               }
-
-               $this->mResultSet->free();
-       }
-}
-
 /**
  * @ingroup Search
  */
@@ -736,790 +569,6 @@ class SearchResultTooMany {
        # # Some search engines may bail out if too many matches are found
 }
 
-/**
- * @todo FIXME: This class is horribly factored. It would probably be better to
- * have a useful base class to which you pass some standard information, then
- * let the fancy self-highlighters extend that.
- * @ingroup Search
- */
-class SearchResult {
-
-       /**
-        * @var Revision
-        */
-       protected $mRevision = null;
-
-       /**
-        * @var File
-        */
-       protected $mImage = null;
-
-       /**
-        * @var Title
-        */
-       protected $mTitle;
-
-       /**
-        * @var String
-        */
-       protected $mText;
-
-       /**
-        * Return a new SearchResult and initializes it with a title.
-        *
-        * @param $title Title
-        * @return SearchResult
-        */
-       public static function newFromTitle( $title ) {
-               $result = new self();
-               $result->initFromTitle( $title );
-               return $result;
-       }
-       /**
-        * Return a new SearchResult and initializes it with a row.
-        *
-        * @param $row object
-        * @return SearchResult
-        */
-       public static function newFromRow( $row ) {
-               $result = new self();
-               $result->initFromRow( $row );
-               return $result;
-       }
-
-       public function __construct( $row = null ) {
-               if ( !is_null( $row ) ) {
-                       // Backwards compatibility with pre-1.17 callers
-                       $this->initFromRow( $row );
-               }
-       }
-
-       /**
-        * Initialize from a database row. Makes a Title and passes that to
-        * initFromTitle.
-        *
-        * @param $row object
-        */
-       protected function initFromRow( $row ) {
-               $this->initFromTitle( Title::makeTitle( $row->page_namespace, $row->page_title ) );
-       }
-
-       /**
-        * Initialize from a Title and if possible initializes a corresponding
-        * Revision and File.
-        *
-        * @param $title Title
-        */
-       protected function initFromTitle( $title ) {
-               $this->mTitle = $title;
-               if ( !is_null( $this->mTitle ) ) {
-                       $id = false;
-                       wfRunHooks( 'SearchResultInitFromTitle', array( $title, &$id ) );
-                       $this->mRevision = Revision::newFromTitle(
-                               $this->mTitle, $id, Revision::READ_NORMAL );
-                       if ( $this->mTitle->getNamespace() === NS_FILE ) {
-                               $this->mImage = wfFindFile( $this->mTitle );
-                       }
-               }
-       }
-
-       /**
-        * Check if this is result points to an invalid title
-        *
-        * @return Boolean
-        */
-       function isBrokenTitle() {
-               return is_null( $this->mTitle );
-       }
-
-       /**
-        * Check if target page is missing, happens when index is out of date
-        *
-        * @return Boolean
-        */
-       function isMissingRevision() {
-               return !$this->mRevision && !$this->mImage;
-       }
-
-       /**
-        * @return Title
-        */
-       function getTitle() {
-               return $this->mTitle;
-       }
-
-       /**
-        * Get the file for this page, if one exists
-        * @return File|null
-        */
-       function getFile() {
-               return $this->mImage;
-       }
-
-       /**
-        * @return float|null if not supported
-        */
-       function getScore() {
-               return null;
-       }
-
-       /**
-        * Lazy initialization of article text from DB
-        */
-       protected function initText() {
-               if ( !isset( $this->mText ) ) {
-                       if ( $this->mRevision != null ) {
-                               $this->mText = SearchEngine::create()
-                                       ->getTextFromContent( $this->mTitle, $this->mRevision->getContent() );
-                       } else { // TODO: can we fetch raw wikitext for commons images?
-                               $this->mText = '';
-                       }
-               }
-       }
-
-       /**
-        * @param array $terms terms to highlight
-        * @return String: highlighted text snippet, null (and not '') if not supported
-        */
-       function getTextSnippet( $terms ) {
-               global $wgAdvancedSearchHighlighting;
-               $this->initText();
-
-               // TODO: make highliter take a content object. Make ContentHandler a factory for SearchHighliter.
-               list( $contextlines, $contextchars ) = SearchEngine::userHighlightPrefs();
-               $h = new SearchHighlighter();
-               if ( $wgAdvancedSearchHighlighting ) {
-                       return $h->highlightText( $this->mText, $terms, $contextlines, $contextchars );
-               } else {
-                       return $h->highlightSimple( $this->mText, $terms, $contextlines, $contextchars );
-               }
-       }
-
-       /**
-        * @param array $terms terms to highlight
-        * @return String: highlighted title, '' if not supported
-        */
-       function getTitleSnippet( $terms ) {
-               return '';
-       }
-
-       /**
-        * @param array $terms terms to highlight
-        * @return String: highlighted redirect name (redirect to this page), '' if none or not supported
-        */
-       function getRedirectSnippet( $terms ) {
-               return '';
-       }
-
-       /**
-        * @return Title object for the redirect to this page, null if none or not supported
-        */
-       function getRedirectTitle() {
-               return null;
-       }
-
-       /**
-        * @return string highlighted relevant section name, null if none or not supported
-        */
-       function getSectionSnippet() {
-               return '';
-       }
-
-       /**
-        * @return Title object (pagename+fragment) for the section, null if none or not supported
-        */
-       function getSectionTitle() {
-               return null;
-       }
-
-       /**
-        * @return String: timestamp
-        */
-       function getTimestamp() {
-               if ( $this->mRevision ) {
-                       return $this->mRevision->getTimestamp();
-               } elseif ( $this->mImage ) {
-                       return $this->mImage->getTimestamp();
-               }
-               return '';
-       }
-
-       /**
-        * @return Integer: number of words
-        */
-       function getWordCount() {
-               $this->initText();
-               return str_word_count( $this->mText );
-       }
-
-       /**
-        * @return Integer: size in bytes
-        */
-       function getByteSize() {
-               $this->initText();
-               return strlen( $this->mText );
-       }
-
-       /**
-        * @return Boolean if hit has related articles
-        */
-       function hasRelated() {
-               return false;
-       }
-
-       /**
-        * @return String: interwiki prefix of the title (return iw even if title is broken)
-        */
-       function getInterwikiPrefix() {
-               return '';
-       }
-
-       /**
-        * Did this match file contents (eg: PDF/DJVU)?
-        */
-       function isFileMatch() {
-               return false;
-       }
-}
-/**
- * A SearchResultSet wrapper for SearchEngine::getNearMatch
- */
-class SearchNearMatchResultSet extends SearchResultSet {
-       private $fetched = false;
-       /**
-        * @param $match mixed Title if matched, else null
-        */
-       public function __construct( $match ) {
-               $this->result = $match;
-       }
-       public function hasResult() {
-               return (bool)$this->result;
-       }
-       public function numRows() {
-               return $this->hasResults() ? 1 : 0;
-       }
-       public function next() {
-               if ( $this->fetched || !$this->result ) {
-                       return false;
-               }
-               $this->fetched = true;
-               return SearchResult::newFromTitle( $this->result );
-       }
-}
-
-/**
- * Highlight bits of wikitext
- *
- * @ingroup Search
- */
-class SearchHighlighter {
-       var $mCleanWikitext = true;
-
-       function __construct( $cleanupWikitext = true ) {
-               $this->mCleanWikitext = $cleanupWikitext;
-       }
-
-       /**
-        * Default implementation of wikitext highlighting
-        *
-        * @param $text String
-        * @param array $terms terms to highlight (unescaped)
-        * @param $contextlines Integer
-        * @param $contextchars Integer
-        * @return String
-        */
-       public function highlightText( $text, $terms, $contextlines, $contextchars ) {
-               global $wgContLang;
-               global $wgSearchHighlightBoundaries;
-               $fname = __METHOD__;
-
-               if ( $text == '' ) {
-                       return '';
-               }
-
-               // spli text into text + templates/links/tables
-               $spat = "/(\\{\\{)|(\\[\\[[^\\]:]+:)|(\n\\{\\|)";
-               // first capture group is for detecting nested templates/links/tables/references
-               $endPatterns = array(
-                       1 => '/(\{\{)|(\}\})/', // template
-                       2 => '/(\[\[)|(\]\])/', // image
-                       3 => "/(\n\\{\\|)|(\n\\|\\})/" ); // table
-
-               // @todo FIXME: This should prolly be a hook or something
-               if ( function_exists( 'wfCite' ) ) {
-                       $spat .= '|(<ref>)'; // references via cite extension
-                       $endPatterns[4] = '/(<ref>)|(<\/ref>)/';
-               }
-               $spat .= '/';
-               $textExt = array(); // text extracts
-               $otherExt = array(); // other extracts
-               wfProfileIn( "$fname-split" );
-               $start = 0;
-               $textLen = strlen( $text );
-               $count = 0; // sequence number to maintain ordering
-               while ( $start < $textLen ) {
-                       // find start of template/image/table
-                       if ( preg_match( $spat, $text, $matches, PREG_OFFSET_CAPTURE, $start ) ) {
-                               $epat = '';
-                               foreach ( $matches as $key => $val ) {
-                                       if ( $key > 0 && $val[1] != - 1 ) {
-                                               if ( $key == 2 ) {
-                                                       // see if this is an image link
-                                                       $ns = substr( $val[0], 2, - 1 );
-                                                       if ( $wgContLang->getNsIndex( $ns ) != NS_FILE ) {
-                                                               break;
-                                                       }
-
-                                               }
-                                               $epat = $endPatterns[$key];
-                                               $this->splitAndAdd( $textExt, $count, substr( $text, $start, $val[1] - $start ) );
-                                               $start = $val[1];
-                                               break;
-                                       }
-                               }
-                               if ( $epat ) {
-                                       // find end (and detect any nested elements)
-                                       $level = 0;
-                                       $offset = $start + 1;
-                                       $found = false;
-                                       while ( preg_match( $epat, $text, $endMatches, PREG_OFFSET_CAPTURE, $offset ) ) {
-                                               if ( array_key_exists( 2, $endMatches ) ) {
-                                                       // found end
-                                                       if ( $level == 0 ) {
-                                                               $len = strlen( $endMatches[2][0] );
-                                                               $off = $endMatches[2][1];
-                                                               $this->splitAndAdd( $otherExt, $count,
-                                                                       substr( $text, $start, $off + $len - $start ) );
-                                                               $start = $off + $len;
-                                                               $found = true;
-                                                               break;
-                                                       } else {
-                                                               // end of nested element
-                                                               $level -= 1;
-                                                       }
-                                               } else {
-                                                       // nested
-                                                       $level += 1;
-                                               }
-                                               $offset = $endMatches[0][1] + strlen( $endMatches[0][0] );
-                                       }
-                                       if ( ! $found ) {
-                                               // couldn't find appropriate closing tag, skip
-                                               $this->splitAndAdd( $textExt, $count, substr( $text, $start, strlen( $matches[0][0] ) ) );
-                                               $start += strlen( $matches[0][0] );
-                                       }
-                                       continue;
-                               }
-                       }
-                       // else: add as text extract
-                       $this->splitAndAdd( $textExt, $count, substr( $text, $start ) );
-                       break;
-               }
-
-               $all = $textExt + $otherExt; // these have disjunct key sets
-
-               wfProfileOut( "$fname-split" );
-
-               // prepare regexps
-               foreach ( $terms as $index => $term ) {
-                       // manually do upper/lowercase stuff for utf-8 since PHP won't do it
-                       if ( preg_match( '/[\x80-\xff]/', $term ) ) {
-                               $terms[$index] = preg_replace_callback( '/./us', array( $this, 'caseCallback' ), $terms[$index] );
-                       } else {
-                               $terms[$index] = $term;
-                       }
-               }
-               $anyterm = implode( '|', $terms );
-               $phrase = implode( "$wgSearchHighlightBoundaries+", $terms );
-
-               // @todo FIXME: A hack to scale contextchars, a correct solution
-               // would be to have contextchars actually be char and not byte
-               // length, and do proper utf-8 substrings and lengths everywhere,
-               // but PHP is making that very hard and unclean to implement :(
-               $scale = strlen( $anyterm ) / mb_strlen( $anyterm );
-               $contextchars = intval( $contextchars * $scale );
-
-               $patPre = "(^|$wgSearchHighlightBoundaries)";
-               $patPost = "($wgSearchHighlightBoundaries|$)";
-
-               $pat1 = "/(" . $phrase . ")/ui";
-               $pat2 = "/$patPre(" . $anyterm . ")$patPost/ui";
-
-               wfProfileIn( "$fname-extract" );
-
-               $left = $contextlines;
-
-               $snippets = array();
-               $offsets = array();
-
-               // show beginning only if it contains all words
-               $first = 0;
-               $firstText = '';
-               foreach ( $textExt as $index => $line ) {
-                       if ( strlen( $line ) > 0 && $line[0] != ';' && $line[0] != ':' ) {
-                               $firstText = $this->extract( $line, 0, $contextchars * $contextlines );
-                               $first = $index;
-                               break;
-                       }
-               }
-               if ( $firstText ) {
-                       $succ = true;
-                       // check if first text contains all terms
-                       foreach ( $terms as $term ) {
-                               if ( ! preg_match( "/$patPre" . $term . "$patPost/ui", $firstText ) ) {
-                                       $succ = false;
-                                       break;
-                               }
-                       }
-                       if ( $succ ) {
-                               $snippets[$first] = $firstText;
-                               $offsets[$first] = 0;
-                       }
-               }
-               if ( ! $snippets ) {
-                       // match whole query on text
-                       $this->process( $pat1, $textExt, $left, $contextchars, $snippets, $offsets );
-                       // match whole query on templates/tables/images
-                       $this->process( $pat1, $otherExt, $left, $contextchars, $snippets, $offsets );
-                       // match any words on text
-                       $this->process( $pat2, $textExt, $left, $contextchars, $snippets, $offsets );
-                       // match any words on templates/tables/images
-                       $this->process( $pat2, $otherExt, $left, $contextchars, $snippets, $offsets );
-
-                       ksort( $snippets );
-               }
-
-               // add extra chars to each snippet to make snippets constant size
-               $extended = array();
-               if ( count( $snippets ) == 0 ) {
-                       // couldn't find the target words, just show beginning of article
-                       if ( array_key_exists( $first, $all ) ) {
-                               $targetchars = $contextchars * $contextlines;
-                               $snippets[$first] = '';
-                               $offsets[$first] = 0;
-                       }
-               } else {
-                       // if begin of the article contains the whole phrase, show only that !!
-                       if ( array_key_exists( $first, $snippets ) && preg_match( $pat1, $snippets[$first] )
-                               && $offsets[$first] < $contextchars * 2 ) {
-                               $snippets = array( $first => $snippets[$first] );
-                       }
-
-                       // calc by how much to extend existing snippets
-                       $targetchars = intval( ( $contextchars * $contextlines ) / count ( $snippets ) );
-               }
-
-               foreach ( $snippets as $index => $line ) {
-                       $extended[$index] = $line;
-                       $len = strlen( $line );
-                       if ( $len < $targetchars - 20 ) {
-                               // complete this line
-                               if ( $len < strlen( $all[$index] ) ) {
-                                       $extended[$index] = $this->extract( $all[$index], $offsets[$index], $offsets[$index] + $targetchars, $offsets[$index] );
-                                       $len = strlen( $extended[$index] );
-                               }
-
-                               // add more lines
-                               $add = $index + 1;
-                               while ( $len < $targetchars - 20
-                                               && array_key_exists( $add, $all )
-                                               && !array_key_exists( $add, $snippets ) ) {
-                                       $offsets[$add] = 0;
-                                       $tt = "\n" . $this->extract( $all[$add], 0, $targetchars - $len, $offsets[$add] );
-                                       $extended[$add] = $tt;
-                                       $len += strlen( $tt );
-                                       $add++;
-                               }
-                       }
-               }
-
-               // $snippets = array_map( 'htmlspecialchars', $extended );
-               $snippets = $extended;
-               $last = - 1;
-               $extract = '';
-               foreach ( $snippets as $index => $line ) {
-                       if ( $last == - 1 ) {
-                               $extract .= $line; // first line
-                       } elseif ( $last + 1 == $index && $offsets[$last] + strlen( $snippets[$last] ) >= strlen( $all[$last] ) ) {
-                               $extract .= " " . $line; // continous lines
-                       } else {
-                               $extract .= '<b> ... </b>' . $line;
-                       }
-
-                       $last = $index;
-               }
-               if ( $extract ) {
-                       $extract .= '<b> ... </b>';
-               }
-
-               $processed = array();
-               foreach ( $terms as $term ) {
-                       if ( ! isset( $processed[$term] ) ) {
-                               $pat3 = "/$patPre(" . $term . ")$patPost/ui"; // highlight word
-                               $extract = preg_replace( $pat3,
-                                       "\\1<span class='searchmatch'>\\2</span>\\3", $extract );
-                               $processed[$term] = true;
-                       }
-               }
-
-               wfProfileOut( "$fname-extract" );
-
-               return $extract;
-       }
-
-       /**
-        * Split text into lines and add it to extracts array
-        *
-        * @param array $extracts index -> $line
-        * @param $count Integer
-        * @param $text String
-        */
-       function splitAndAdd( &$extracts, &$count, $text ) {
-               $split = explode( "\n", $this->mCleanWikitext ? $this->removeWiki( $text ) : $text );
-               foreach ( $split as $line ) {
-                       $tt = trim( $line );
-                       if ( $tt ) {
-                               $extracts[$count++] = $tt;
-                       }
-               }
-       }
-
-       /**
-        * Do manual case conversion for non-ascii chars
-        *
-        * @param $matches Array
-        * @return string
-        */
-       function caseCallback( $matches ) {
-               global $wgContLang;
-               if ( strlen( $matches[0] ) > 1 ) {
-                       return '[' . $wgContLang->lc( $matches[0] ) . $wgContLang->uc( $matches[0] ) . ']';
-               } else {
-                       return $matches[0];
-               }
-       }
-
-       /**
-        * Extract part of the text from start to end, but by
-        * not chopping up words
-        * @param $text String
-        * @param $start Integer
-        * @param $end Integer
-        * @param $posStart Integer: (out) actual start position
-        * @param $posEnd Integer: (out) actual end position
-        * @return String
-        */
-       function extract( $text, $start, $end, &$posStart = null, &$posEnd = null ) {
-               if ( $start != 0 ) {
-                       $start = $this->position( $text, $start, 1 );
-               }
-               if ( $end >= strlen( $text ) ) {
-                       $end = strlen( $text );
-               } else {
-                       $end = $this->position( $text, $end );
-               }
-
-               if ( !is_null( $posStart ) ) {
-                       $posStart = $start;
-               }
-               if ( !is_null( $posEnd ) ) {
-                       $posEnd = $end;
-               }
-
-               if ( $end > $start ) {
-                       return substr( $text, $start, $end - $start );
-               } else {
-                       return '';
-               }
-       }
-
-       /**
-        * Find a nonletter near a point (index) in the text
-        *
-        * @param $text String
-        * @param $point Integer
-        * @param $offset Integer: offset to found index
-        * @return Integer: nearest nonletter index, or beginning of utf8 char if none
-        */
-       function position( $text, $point, $offset = 0 ) {
-               $tolerance = 10;
-               $s = max( 0, $point - $tolerance );
-               $l = min( strlen( $text ), $point + $tolerance ) - $s;
-               $m = array();
-               if ( preg_match( '/[ ,.!?~!@#$%^&*\(\)+=\-\\\|\[\]"\'<>]/', substr( $text, $s, $l ), $m, PREG_OFFSET_CAPTURE ) ) {
-                       return $m[0][1] + $s + $offset;
-               } else {
-                       // check if point is on a valid first UTF8 char
-                       $char = ord( $text[$point] );
-                       while ( $char >= 0x80 && $char < 0xc0 ) {
-                               // skip trailing bytes
-                               $point++;
-                               if ( $point >= strlen( $text ) ) {
-                                       return strlen( $text );
-                               }
-                               $char = ord( $text[$point] );
-                       }
-                       return $point;
-
-               }
-       }
-
-       /**
-        * Search extracts for a pattern, and return snippets
-        *
-        * @param string $pattern regexp for matching lines
-        * @param array $extracts extracts to search
-        * @param $linesleft Integer: number of extracts to make
-        * @param $contextchars Integer: length of snippet
-        * @param array $out map for highlighted snippets
-        * @param array $offsets map of starting points of snippets
-        * @protected
-        */
-       function process( $pattern, $extracts, &$linesleft, &$contextchars, &$out, &$offsets ) {
-               if ( $linesleft == 0 ) {
-                       return; // nothing to do
-               }
-               foreach ( $extracts as $index => $line ) {
-                       if ( array_key_exists( $index, $out ) ) {
-                               continue; // this line already highlighted
-                       }
-
-                       $m = array();
-                       if ( !preg_match( $pattern, $line, $m, PREG_OFFSET_CAPTURE ) ) {
-                               continue;
-                       }
-
-                       $offset = $m[0][1];
-                       $len = strlen( $m[0][0] );
-                       if ( $offset + $len < $contextchars ) {
-                               $begin = 0;
-                       } elseif ( $len > $contextchars ) {
-                               $begin = $offset;
-                       } else {
-                               $begin = $offset + intval( ( $len - $contextchars ) / 2 );
-                       }
-
-                       $end = $begin + $contextchars;
-
-                       $posBegin = $begin;
-                       // basic snippet from this line
-                       $out[$index] = $this->extract( $line, $begin, $end, $posBegin );
-                       $offsets[$index] = $posBegin;
-                       $linesleft--;
-                       if ( $linesleft == 0 ) {
-                               return;
-                       }
-               }
-       }
-
-       /**
-        * Basic wikitext removal
-        * @protected
-        * @return mixed
-        */
-       function removeWiki( $text ) {
-               $fname = __METHOD__;
-               wfProfileIn( $fname );
-
-               // $text = preg_replace( "/'{2,5}/", "", $text );
-               // $text = preg_replace( "/\[[a-z]+:\/\/[^ ]+ ([^]]+)\]/", "\\2", $text );
-               // $text = preg_replace( "/\[\[([^]|]+)\]\]/", "\\1", $text );
-               // $text = preg_replace( "/\[\[([^]]+\|)?([^|]]+)\]\]/", "\\2", $text );
-               // $text = preg_replace( "/\\{\\|(.*?)\\|\\}/", "", $text );
-               // $text = preg_replace( "/\\[\\[[A-Za-z_-]+:([^|]+?)\\]\\]/", "", $text );
-               $text = preg_replace( "/\\{\\{([^|]+?)\\}\\}/", "", $text );
-               $text = preg_replace( "/\\{\\{([^|]+\\|)(.*?)\\}\\}/", "\\2", $text );
-               $text = preg_replace( "/\\[\\[([^|]+?)\\]\\]/", "\\1", $text );
-               $text = preg_replace_callback( "/\\[\\[([^|]+\\|)(.*?)\\]\\]/", array( $this, 'linkReplace' ), $text );
-               // $text = preg_replace("/\\[\\[([^|]+\\|)(.*?)\\]\\]/", "\\2", $text);
-               $text = preg_replace( "/<\/?[^>]+>/", "", $text );
-               $text = preg_replace( "/'''''/", "", $text );
-               $text = preg_replace( "/('''|<\/?[iIuUbB]>)/", "", $text );
-               $text = preg_replace( "/''/", "", $text );
-
-               wfProfileOut( $fname );
-               return $text;
-       }
-
-       /**
-        * callback to replace [[target|caption]] kind of links, if
-        * the target is category or image, leave it
-        *
-        * @param $matches Array
-        */
-       function linkReplace( $matches ) {
-               $colon = strpos( $matches[1], ':' );
-               if ( $colon === false ) {
-                       return $matches[2]; // replace with caption
-               }
-               global $wgContLang;
-               $ns = substr( $matches[1], 0, $colon );
-               $index = $wgContLang->getNsIndex( $ns );
-               if ( $index !== false && ( $index == NS_FILE || $index == NS_CATEGORY ) ) {
-                       return $matches[0]; // return the whole thing
-               } else {
-                       return $matches[2];
-               }
-       }
-
-       /**
-        * Simple & fast snippet extraction, but gives completely unrelevant
-        * snippets
-        *
-        * @param $text String
-        * @param $terms Array
-        * @param $contextlines Integer
-        * @param $contextchars Integer
-        * @return String
-        */
-       public function highlightSimple( $text, $terms, $contextlines, $contextchars ) {
-               global $wgContLang;
-               $fname = __METHOD__;
-
-               $lines = explode( "\n", $text );
-
-               $terms = implode( '|', $terms );
-               $max = intval( $contextchars ) + 1;
-               $pat1 = "/(.*)($terms)(.{0,$max})/i";
-
-               $lineno = 0;
-
-               $extract = "";
-               wfProfileIn( "$fname-extract" );
-               foreach ( $lines as $line ) {
-                       if ( 0 == $contextlines ) {
-                               break;
-                       }
-                       ++$lineno;
-                       $m = array();
-                       if ( ! preg_match( $pat1, $line, $m ) ) {
-                               continue;
-                       }
-                       --$contextlines;
-                       // truncate function changes ... to relevant i18n message.
-                       $pre = $wgContLang->truncate( $m[1], - $contextchars, '...', false );
-
-                       if ( count( $m ) < 3 ) {
-                               $post = '';
-                       } else {
-                               $post = $wgContLang->truncate( $m[3], $contextchars, '...', false );
-                       }
-
-                       $found = $m[2];
-
-                       $line = htmlspecialchars( $pre . $found . $post );
-                       $pat2 = '/(' . $terms . ")/i";
-                       $line = preg_replace( $pat2, "<span class='searchmatch'>\\1</span>", $line );
-
-                       $extract .= "${line}\n";
-               }
-               wfProfileOut( "$fname-extract" );
-
-               return $extract;
-       }
-
-}
-
 /**
  * Dummy class to be used when non-supported Database engine is present.
  * @todo FIXME: Dummy class should probably try something at least mildly useful,
diff --git a/includes/search/SearchHighlighter.php b/includes/search/SearchHighlighter.php
new file mode 100644 (file)
index 0000000..4c8aea5
--- /dev/null
@@ -0,0 +1,534 @@
+<?php
+/**
+ * Basic search engine highlighting
+ *
+ * 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 Search
+ */
+
+/**
+ * Highlight bits of wikitext
+ *
+ * @ingroup Search
+ */
+class SearchHighlighter {
+       var $mCleanWikitext = true;
+
+       function __construct( $cleanupWikitext = true ) {
+               $this->mCleanWikitext = $cleanupWikitext;
+       }
+
+       /**
+        * Default implementation of wikitext highlighting
+        *
+        * @param $text String
+        * @param array $terms terms to highlight (unescaped)
+        * @param $contextlines Integer
+        * @param $contextchars Integer
+        * @return String
+        */
+       public function highlightText( $text, $terms, $contextlines, $contextchars ) {
+               global $wgContLang;
+               global $wgSearchHighlightBoundaries;
+               $fname = __METHOD__;
+
+               if ( $text == '' ) {
+                       return '';
+               }
+
+               // spli text into text + templates/links/tables
+               $spat = "/(\\{\\{)|(\\[\\[[^\\]:]+:)|(\n\\{\\|)";
+               // first capture group is for detecting nested templates/links/tables/references
+               $endPatterns = array(
+                       1 => '/(\{\{)|(\}\})/', // template
+                       2 => '/(\[\[)|(\]\])/', // image
+                       3 => "/(\n\\{\\|)|(\n\\|\\})/" ); // table
+
+               // @todo FIXME: This should prolly be a hook or something
+               if ( function_exists( 'wfCite' ) ) {
+                       $spat .= '|(<ref>)'; // references via cite extension
+                       $endPatterns[4] = '/(<ref>)|(<\/ref>)/';
+               }
+               $spat .= '/';
+               $textExt = array(); // text extracts
+               $otherExt = array(); // other extracts
+               wfProfileIn( "$fname-split" );
+               $start = 0;
+               $textLen = strlen( $text );
+               $count = 0; // sequence number to maintain ordering
+               while ( $start < $textLen ) {
+                       // find start of template/image/table
+                       if ( preg_match( $spat, $text, $matches, PREG_OFFSET_CAPTURE, $start ) ) {
+                               $epat = '';
+                               foreach ( $matches as $key => $val ) {
+                                       if ( $key > 0 && $val[1] != - 1 ) {
+                                               if ( $key == 2 ) {
+                                                       // see if this is an image link
+                                                       $ns = substr( $val[0], 2, - 1 );
+                                                       if ( $wgContLang->getNsIndex( $ns ) != NS_FILE ) {
+                                                               break;
+                                                       }
+
+                                               }
+                                               $epat = $endPatterns[$key];
+                                               $this->splitAndAdd( $textExt, $count, substr( $text, $start, $val[1] - $start ) );
+                                               $start = $val[1];
+                                               break;
+                                       }
+                               }
+                               if ( $epat ) {
+                                       // find end (and detect any nested elements)
+                                       $level = 0;
+                                       $offset = $start + 1;
+                                       $found = false;
+                                       while ( preg_match( $epat, $text, $endMatches, PREG_OFFSET_CAPTURE, $offset ) ) {
+                                               if ( array_key_exists( 2, $endMatches ) ) {
+                                                       // found end
+                                                       if ( $level == 0 ) {
+                                                               $len = strlen( $endMatches[2][0] );
+                                                               $off = $endMatches[2][1];
+                                                               $this->splitAndAdd( $otherExt, $count,
+                                                                       substr( $text, $start, $off + $len - $start ) );
+                                                               $start = $off + $len;
+                                                               $found = true;
+                                                               break;
+                                                       } else {
+                                                               // end of nested element
+                                                               $level -= 1;
+                                                       }
+                                               } else {
+                                                       // nested
+                                                       $level += 1;
+                                               }
+                                               $offset = $endMatches[0][1] + strlen( $endMatches[0][0] );
+                                       }
+                                       if ( ! $found ) {
+                                               // couldn't find appropriate closing tag, skip
+                                               $this->splitAndAdd( $textExt, $count, substr( $text, $start, strlen( $matches[0][0] ) ) );
+                                               $start += strlen( $matches[0][0] );
+                                       }
+                                       continue;
+                               }
+                       }
+                       // else: add as text extract
+                       $this->splitAndAdd( $textExt, $count, substr( $text, $start ) );
+                       break;
+               }
+
+               $all = $textExt + $otherExt; // these have disjunct key sets
+
+               wfProfileOut( "$fname-split" );
+
+               // prepare regexps
+               foreach ( $terms as $index => $term ) {
+                       // manually do upper/lowercase stuff for utf-8 since PHP won't do it
+                       if ( preg_match( '/[\x80-\xff]/', $term ) ) {
+                               $terms[$index] = preg_replace_callback( '/./us', array( $this, 'caseCallback' ), $terms[$index] );
+                       } else {
+                               $terms[$index] = $term;
+                       }
+               }
+               $anyterm = implode( '|', $terms );
+               $phrase = implode( "$wgSearchHighlightBoundaries+", $terms );
+
+               // @todo FIXME: A hack to scale contextchars, a correct solution
+               // would be to have contextchars actually be char and not byte
+               // length, and do proper utf-8 substrings and lengths everywhere,
+               // but PHP is making that very hard and unclean to implement :(
+               $scale = strlen( $anyterm ) / mb_strlen( $anyterm );
+               $contextchars = intval( $contextchars * $scale );
+
+               $patPre = "(^|$wgSearchHighlightBoundaries)";
+               $patPost = "($wgSearchHighlightBoundaries|$)";
+
+               $pat1 = "/(" . $phrase . ")/ui";
+               $pat2 = "/$patPre(" . $anyterm . ")$patPost/ui";
+
+               wfProfileIn( "$fname-extract" );
+
+               $left = $contextlines;
+
+               $snippets = array();
+               $offsets = array();
+
+               // show beginning only if it contains all words
+               $first = 0;
+               $firstText = '';
+               foreach ( $textExt as $index => $line ) {
+                       if ( strlen( $line ) > 0 && $line[0] != ';' && $line[0] != ':' ) {
+                               $firstText = $this->extract( $line, 0, $contextchars * $contextlines );
+                               $first = $index;
+                               break;
+                       }
+               }
+               if ( $firstText ) {
+                       $succ = true;
+                       // check if first text contains all terms
+                       foreach ( $terms as $term ) {
+                               if ( ! preg_match( "/$patPre" . $term . "$patPost/ui", $firstText ) ) {
+                                       $succ = false;
+                                       break;
+                               }
+                       }
+                       if ( $succ ) {
+                               $snippets[$first] = $firstText;
+                               $offsets[$first] = 0;
+                       }
+               }
+               if ( ! $snippets ) {
+                       // match whole query on text
+                       $this->process( $pat1, $textExt, $left, $contextchars, $snippets, $offsets );
+                       // match whole query on templates/tables/images
+                       $this->process( $pat1, $otherExt, $left, $contextchars, $snippets, $offsets );
+                       // match any words on text
+                       $this->process( $pat2, $textExt, $left, $contextchars, $snippets, $offsets );
+                       // match any words on templates/tables/images
+                       $this->process( $pat2, $otherExt, $left, $contextchars, $snippets, $offsets );
+
+                       ksort( $snippets );
+               }
+
+               // add extra chars to each snippet to make snippets constant size
+               $extended = array();
+               if ( count( $snippets ) == 0 ) {
+                       // couldn't find the target words, just show beginning of article
+                       if ( array_key_exists( $first, $all ) ) {
+                               $targetchars = $contextchars * $contextlines;
+                               $snippets[$first] = '';
+                               $offsets[$first] = 0;
+                       }
+               } else {
+                       // if begin of the article contains the whole phrase, show only that !!
+                       if ( array_key_exists( $first, $snippets ) && preg_match( $pat1, $snippets[$first] )
+                               && $offsets[$first] < $contextchars * 2 ) {
+                               $snippets = array( $first => $snippets[$first] );
+                       }
+
+                       // calc by how much to extend existing snippets
+                       $targetchars = intval( ( $contextchars * $contextlines ) / count ( $snippets ) );
+               }
+
+               foreach ( $snippets as $index => $line ) {
+                       $extended[$index] = $line;
+                       $len = strlen( $line );
+                       if ( $len < $targetchars - 20 ) {
+                               // complete this line
+                               if ( $len < strlen( $all[$index] ) ) {
+                                       $extended[$index] = $this->extract( $all[$index], $offsets[$index], $offsets[$index] + $targetchars, $offsets[$index] );
+                                       $len = strlen( $extended[$index] );
+                               }
+
+                               // add more lines
+                               $add = $index + 1;
+                               while ( $len < $targetchars - 20
+                                               && array_key_exists( $add, $all )
+                                               && !array_key_exists( $add, $snippets ) ) {
+                                       $offsets[$add] = 0;
+                                       $tt = "\n" . $this->extract( $all[$add], 0, $targetchars - $len, $offsets[$add] );
+                                       $extended[$add] = $tt;
+                                       $len += strlen( $tt );
+                                       $add++;
+                               }
+                       }
+               }
+
+               // $snippets = array_map( 'htmlspecialchars', $extended );
+               $snippets = $extended;
+               $last = - 1;
+               $extract = '';
+               foreach ( $snippets as $index => $line ) {
+                       if ( $last == - 1 ) {
+                               $extract .= $line; // first line
+                       } elseif ( $last + 1 == $index && $offsets[$last] + strlen( $snippets[$last] ) >= strlen( $all[$last] ) ) {
+                               $extract .= " " . $line; // continous lines
+                       } else {
+                               $extract .= '<b> ... </b>' . $line;
+                       }
+
+                       $last = $index;
+               }
+               if ( $extract ) {
+                       $extract .= '<b> ... </b>';
+               }
+
+               $processed = array();
+               foreach ( $terms as $term ) {
+                       if ( ! isset( $processed[$term] ) ) {
+                               $pat3 = "/$patPre(" . $term . ")$patPost/ui"; // highlight word
+                               $extract = preg_replace( $pat3,
+                                       "\\1<span class='searchmatch'>\\2</span>\\3", $extract );
+                               $processed[$term] = true;
+                       }
+               }
+
+               wfProfileOut( "$fname-extract" );
+
+               return $extract;
+       }
+
+       /**
+        * Split text into lines and add it to extracts array
+        *
+        * @param array $extracts index -> $line
+        * @param $count Integer
+        * @param $text String
+        */
+       function splitAndAdd( &$extracts, &$count, $text ) {
+               $split = explode( "\n", $this->mCleanWikitext ? $this->removeWiki( $text ) : $text );
+               foreach ( $split as $line ) {
+                       $tt = trim( $line );
+                       if ( $tt ) {
+                               $extracts[$count++] = $tt;
+                       }
+               }
+       }
+
+       /**
+        * Do manual case conversion for non-ascii chars
+        *
+        * @param $matches Array
+        * @return string
+        */
+       function caseCallback( $matches ) {
+               global $wgContLang;
+               if ( strlen( $matches[0] ) > 1 ) {
+                       return '[' . $wgContLang->lc( $matches[0] ) . $wgContLang->uc( $matches[0] ) . ']';
+               } else {
+                       return $matches[0];
+               }
+       }
+
+       /**
+        * Extract part of the text from start to end, but by
+        * not chopping up words
+        * @param $text String
+        * @param $start Integer
+        * @param $end Integer
+        * @param $posStart Integer: (out) actual start position
+        * @param $posEnd Integer: (out) actual end position
+        * @return String
+        */
+       function extract( $text, $start, $end, &$posStart = null, &$posEnd = null ) {
+               if ( $start != 0 ) {
+                       $start = $this->position( $text, $start, 1 );
+               }
+               if ( $end >= strlen( $text ) ) {
+                       $end = strlen( $text );
+               } else {
+                       $end = $this->position( $text, $end );
+               }
+
+               if ( !is_null( $posStart ) ) {
+                       $posStart = $start;
+               }
+               if ( !is_null( $posEnd ) ) {
+                       $posEnd = $end;
+               }
+
+               if ( $end > $start ) {
+                       return substr( $text, $start, $end - $start );
+               } else {
+                       return '';
+               }
+       }
+
+       /**
+        * Find a nonletter near a point (index) in the text
+        *
+        * @param $text String
+        * @param $point Integer
+        * @param $offset Integer: offset to found index
+        * @return Integer: nearest nonletter index, or beginning of utf8 char if none
+        */
+       function position( $text, $point, $offset = 0 ) {
+               $tolerance = 10;
+               $s = max( 0, $point - $tolerance );
+               $l = min( strlen( $text ), $point + $tolerance ) - $s;
+               $m = array();
+               if ( preg_match( '/[ ,.!?~!@#$%^&*\(\)+=\-\\\|\[\]"\'<>]/', substr( $text, $s, $l ), $m, PREG_OFFSET_CAPTURE ) ) {
+                       return $m[0][1] + $s + $offset;
+               } else {
+                       // check if point is on a valid first UTF8 char
+                       $char = ord( $text[$point] );
+                       while ( $char >= 0x80 && $char < 0xc0 ) {
+                               // skip trailing bytes
+                               $point++;
+                               if ( $point >= strlen( $text ) ) {
+                                       return strlen( $text );
+                               }
+                               $char = ord( $text[$point] );
+                       }
+                       return $point;
+
+               }
+       }
+
+       /**
+        * Search extracts for a pattern, and return snippets
+        *
+        * @param string $pattern regexp for matching lines
+        * @param array $extracts extracts to search
+        * @param $linesleft Integer: number of extracts to make
+        * @param $contextchars Integer: length of snippet
+        * @param array $out map for highlighted snippets
+        * @param array $offsets map of starting points of snippets
+        * @protected
+        */
+       function process( $pattern, $extracts, &$linesleft, &$contextchars, &$out, &$offsets ) {
+               if ( $linesleft == 0 ) {
+                       return; // nothing to do
+               }
+               foreach ( $extracts as $index => $line ) {
+                       if ( array_key_exists( $index, $out ) ) {
+                               continue; // this line already highlighted
+                       }
+
+                       $m = array();
+                       if ( !preg_match( $pattern, $line, $m, PREG_OFFSET_CAPTURE ) ) {
+                               continue;
+                       }
+
+                       $offset = $m[0][1];
+                       $len = strlen( $m[0][0] );
+                       if ( $offset + $len < $contextchars ) {
+                               $begin = 0;
+                       } elseif ( $len > $contextchars ) {
+                               $begin = $offset;
+                       } else {
+                               $begin = $offset + intval( ( $len - $contextchars ) / 2 );
+                       }
+
+                       $end = $begin + $contextchars;
+
+                       $posBegin = $begin;
+                       // basic snippet from this line
+                       $out[$index] = $this->extract( $line, $begin, $end, $posBegin );
+                       $offsets[$index] = $posBegin;
+                       $linesleft--;
+                       if ( $linesleft == 0 ) {
+                               return;
+                       }
+               }
+       }
+
+       /**
+        * Basic wikitext removal
+        * @protected
+        * @return mixed
+        */
+       function removeWiki( $text ) {
+               $fname = __METHOD__;
+               wfProfileIn( $fname );
+
+               // $text = preg_replace( "/'{2,5}/", "", $text );
+               // $text = preg_replace( "/\[[a-z]+:\/\/[^ ]+ ([^]]+)\]/", "\\2", $text );
+               // $text = preg_replace( "/\[\[([^]|]+)\]\]/", "\\1", $text );
+               // $text = preg_replace( "/\[\[([^]]+\|)?([^|]]+)\]\]/", "\\2", $text );
+               // $text = preg_replace( "/\\{\\|(.*?)\\|\\}/", "", $text );
+               // $text = preg_replace( "/\\[\\[[A-Za-z_-]+:([^|]+?)\\]\\]/", "", $text );
+               $text = preg_replace( "/\\{\\{([^|]+?)\\}\\}/", "", $text );
+               $text = preg_replace( "/\\{\\{([^|]+\\|)(.*?)\\}\\}/", "\\2", $text );
+               $text = preg_replace( "/\\[\\[([^|]+?)\\]\\]/", "\\1", $text );
+               $text = preg_replace_callback( "/\\[\\[([^|]+\\|)(.*?)\\]\\]/", array( $this, 'linkReplace' ), $text );
+               // $text = preg_replace("/\\[\\[([^|]+\\|)(.*?)\\]\\]/", "\\2", $text);
+               $text = preg_replace( "/<\/?[^>]+>/", "", $text );
+               $text = preg_replace( "/'''''/", "", $text );
+               $text = preg_replace( "/('''|<\/?[iIuUbB]>)/", "", $text );
+               $text = preg_replace( "/''/", "", $text );
+
+               wfProfileOut( $fname );
+               return $text;
+       }
+
+       /**
+        * callback to replace [[target|caption]] kind of links, if
+        * the target is category or image, leave it
+        *
+        * @param $matches Array
+        */
+       function linkReplace( $matches ) {
+               $colon = strpos( $matches[1], ':' );
+               if ( $colon === false ) {
+                       return $matches[2]; // replace with caption
+               }
+               global $wgContLang;
+               $ns = substr( $matches[1], 0, $colon );
+               $index = $wgContLang->getNsIndex( $ns );
+               if ( $index !== false && ( $index == NS_FILE || $index == NS_CATEGORY ) ) {
+                       return $matches[0]; // return the whole thing
+               } else {
+                       return $matches[2];
+               }
+       }
+
+       /**
+        * Simple & fast snippet extraction, but gives completely unrelevant
+        * snippets
+        *
+        * @param $text String
+        * @param $terms Array
+        * @param $contextlines Integer
+        * @param $contextchars Integer
+        * @return String
+        */
+       public function highlightSimple( $text, $terms, $contextlines, $contextchars ) {
+               global $wgContLang;
+               $fname = __METHOD__;
+
+               $lines = explode( "\n", $text );
+
+               $terms = implode( '|', $terms );
+               $max = intval( $contextchars ) + 1;
+               $pat1 = "/(.*)($terms)(.{0,$max})/i";
+
+               $lineno = 0;
+
+               $extract = "";
+               wfProfileIn( "$fname-extract" );
+               foreach ( $lines as $line ) {
+                       if ( 0 == $contextlines ) {
+                               break;
+                       }
+                       ++$lineno;
+                       $m = array();
+                       if ( ! preg_match( $pat1, $line, $m ) ) {
+                               continue;
+                       }
+                       --$contextlines;
+                       // truncate function changes ... to relevant i18n message.
+                       $pre = $wgContLang->truncate( $m[1], - $contextchars, '...', false );
+
+                       if ( count( $m ) < 3 ) {
+                               $post = '';
+                       } else {
+                               $post = $wgContLang->truncate( $m[3], $contextchars, '...', false );
+                       }
+
+                       $found = $m[2];
+
+                       $line = htmlspecialchars( $pre . $found . $post );
+                       $pat2 = '/(' . $terms . ")/i";
+                       $line = preg_replace( $pat2, "<span class='searchmatch'>\\1</span>", $line );
+
+                       $extract .= "${line}\n";
+               }
+               wfProfileOut( "$fname-extract" );
+
+               return $extract;
+       }
+}
index aec6a01..c3edf51 100644 (file)
@@ -3,7 +3,7 @@
  * MySQL search engine
  *
  * Copyright (C) 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index cea17d2..2603161 100644 (file)
@@ -3,7 +3,7 @@
  * Oracle search engine
  *
  * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * 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
@@ -230,6 +230,7 @@ class SearchOracle extends SearchDatabase {
                $t = preg_replace( '/([-&|])/', '\\\\$1', $t );
                return $t;
        }
+
        /**
         * Create or update the search index record for the given page.
         * Title and text should be pre-processed.
index c9f5466..142e5fd 100644 (file)
@@ -3,7 +3,7 @@
  * PostgreSQL search engine
  *
  * Copyright © 2006-2007 Greg Sabino Mullane <greg@turnstep.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * 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
@@ -140,8 +140,8 @@ class SearchPostgres extends SearchDatabase {
                $searchstring = $this->parseQuery( $term );
 
                ## We need a separate query here so gin does not complain about empty searches
-               $SQL = "SELECT to_tsquery($searchstring)";
-               $res = $this->db->query( $SQL );
+               $sql = "SELECT to_tsquery($searchstring)";
+               $res = $this->db->query( $sql );
                if ( !$res ) {
                        ## TODO: Better output (example to catch: one 'two)
                        die( "Sorry, that was not a valid search string. Please go back and try again" );
@@ -196,10 +196,10 @@ class SearchPostgres extends SearchDatabase {
 
        function update( $pageid, $title, $text ) {
                ## We don't want to index older revisions
-               $SQL = "UPDATE pagecontent SET textvector = NULL WHERE old_id IN " .
+               $sql = "UPDATE pagecontent SET textvector = NULL WHERE old_id IN " .
                                "(SELECT rev_text_id FROM revision WHERE rev_page = " . intval( $pageid ) .
                                " ORDER BY rev_text_id DESC OFFSET 1)";
-               $this->db->query( $SQL );
+               $this->db->query( $sql );
                return true;
        }
 
@@ -217,6 +217,7 @@ class PostgresSearchResult extends SearchResult {
                parent::__construct( $row );
                $this->score = $row->score;
        }
+
        function getScore() {
                return $this->score;
        }
diff --git a/includes/search/SearchResult.php b/includes/search/SearchResult.php
new file mode 100644 (file)
index 0000000..153590a
--- /dev/null
@@ -0,0 +1,274 @@
+<?php
+/**
+ * Search engine result
+ *
+ * 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 Search
+ */
+
+/**
+ * @todo FIXME: This class is horribly factored. It would probably be better to
+ * have a useful base class to which you pass some standard information, then
+ * let the fancy self-highlighters extend that.
+ * @ingroup Search
+ */
+class SearchResult {
+
+       /**
+        * @var Revision
+        */
+       protected $mRevision = null;
+
+       /**
+        * @var File
+        */
+       protected $mImage = null;
+
+       /**
+        * @var Title
+        */
+       protected $mTitle;
+
+       /**
+        * @var String
+        */
+       protected $mText;
+
+       /**
+        * Return a new SearchResult and initializes it with a title.
+        *
+        * @param $title Title
+        * @return SearchResult
+        */
+       public static function newFromTitle( $title ) {
+               $result = new self();
+               $result->initFromTitle( $title );
+               return $result;
+       }
+
+       /**
+        * Return a new SearchResult and initializes it with a row.
+        *
+        * @param $row object
+        * @return SearchResult
+        */
+       public static function newFromRow( $row ) {
+               $result = new self();
+               $result->initFromRow( $row );
+               return $result;
+       }
+
+       public function __construct( $row = null ) {
+               if ( !is_null( $row ) ) {
+                       // Backwards compatibility with pre-1.17 callers
+                       $this->initFromRow( $row );
+               }
+       }
+
+       /**
+        * Initialize from a database row. Makes a Title and passes that to
+        * initFromTitle.
+        *
+        * @param $row object
+        */
+       protected function initFromRow( $row ) {
+               $this->initFromTitle( Title::makeTitle( $row->page_namespace, $row->page_title ) );
+       }
+
+       /**
+        * Initialize from a Title and if possible initializes a corresponding
+        * Revision and File.
+        *
+        * @param $title Title
+        */
+       protected function initFromTitle( $title ) {
+               $this->mTitle = $title;
+               if ( !is_null( $this->mTitle ) ) {
+                       $id = false;
+                       wfRunHooks( 'SearchResultInitFromTitle', array( $title, &$id ) );
+                       $this->mRevision = Revision::newFromTitle(
+                               $this->mTitle, $id, Revision::READ_NORMAL );
+                       if ( $this->mTitle->getNamespace() === NS_FILE ) {
+                               $this->mImage = wfFindFile( $this->mTitle );
+                       }
+               }
+       }
+
+       /**
+        * Check if this is result points to an invalid title
+        *
+        * @return Boolean
+        */
+       function isBrokenTitle() {
+               return is_null( $this->mTitle );
+       }
+
+       /**
+        * Check if target page is missing, happens when index is out of date
+        *
+        * @return Boolean
+        */
+       function isMissingRevision() {
+               return !$this->mRevision && !$this->mImage;
+       }
+
+       /**
+        * @return Title
+        */
+       function getTitle() {
+               return $this->mTitle;
+       }
+
+       /**
+        * Get the file for this page, if one exists
+        * @return File|null
+        */
+       function getFile() {
+               return $this->mImage;
+       }
+
+       /**
+        * @return float|null if not supported
+        */
+       function getScore() {
+               return null;
+       }
+
+       /**
+        * Lazy initialization of article text from DB
+        */
+       protected function initText() {
+               if ( !isset( $this->mText ) ) {
+                       if ( $this->mRevision != null ) {
+                               $this->mText = SearchEngine::create()
+                                       ->getTextFromContent( $this->mTitle, $this->mRevision->getContent() );
+                       } else { // TODO: can we fetch raw wikitext for commons images?
+                               $this->mText = '';
+                       }
+               }
+       }
+
+       /**
+        * @param array $terms terms to highlight
+        * @return String: highlighted text snippet, null (and not '') if not supported
+        */
+       function getTextSnippet( $terms ) {
+               global $wgAdvancedSearchHighlighting;
+               $this->initText();
+
+               // TODO: make highliter take a content object. Make ContentHandler a factory for SearchHighliter.
+               list( $contextlines, $contextchars ) = SearchEngine::userHighlightPrefs();
+               $h = new SearchHighlighter();
+               if ( $wgAdvancedSearchHighlighting ) {
+                       return $h->highlightText( $this->mText, $terms, $contextlines, $contextchars );
+               } else {
+                       return $h->highlightSimple( $this->mText, $terms, $contextlines, $contextchars );
+               }
+       }
+
+       /**
+        * @return String: highlighted title, '' if not supported
+        */
+       function getTitleSnippet() {
+               return '';
+       }
+
+       /**
+        * @return String: highlighted redirect name (redirect to this page), '' if none or not supported
+        */
+       function getRedirectSnippet() {
+               return '';
+       }
+
+       /**
+        * @return Title object for the redirect to this page, null if none or not supported
+        */
+       function getRedirectTitle() {
+               return null;
+       }
+
+       /**
+        * @return string highlighted relevant section name, null if none or not supported
+        */
+       function getSectionSnippet() {
+               return '';
+       }
+
+       /**
+        * @return Title object (pagename+fragment) for the section, null if none or not supported
+        */
+       function getSectionTitle() {
+               return null;
+       }
+
+       /**
+        * @return String: timestamp
+        */
+       function getTimestamp() {
+               if ( $this->mRevision ) {
+                       return $this->mRevision->getTimestamp();
+               } elseif ( $this->mImage ) {
+                       return $this->mImage->getTimestamp();
+               }
+               return '';
+       }
+
+       /**
+        * @return Integer: number of words
+        */
+       function getWordCount() {
+               $this->initText();
+               return str_word_count( $this->mText );
+       }
+
+       /**
+        * @return Integer: size in bytes
+        */
+       function getByteSize() {
+               $this->initText();
+               return strlen( $this->mText );
+       }
+
+       /**
+        * @return Boolean if hit has related articles
+        */
+       function hasRelated() {
+               return false;
+       }
+
+       /**
+        * @return String: interwiki prefix of the title (return iw even if title is broken)
+        */
+       function getInterwikiPrefix() {
+               return '';
+       }
+
+       /**
+        * @return string interwiki namespace of the title (since we likely can't resolve it locally)
+        */
+       function getInterwikiNamespaceText() {
+               return '';
+       }
+
+       /**
+        * Did this match file contents (eg: PDF/DJVU)?
+        */
+       function isFileMatch() {
+               return false;
+       }
+}
diff --git a/includes/search/SearchResultSet.php b/includes/search/SearchResultSet.php
new file mode 100644 (file)
index 0000000..3c6c8d0
--- /dev/null
@@ -0,0 +1,221 @@
+<?php
+/**
+ * Search result sets
+ *
+ * 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 Search
+ */
+
+/**
+ * @ingroup Search
+ */
+class SearchResultSet {
+       /**
+        * Fetch an array of regular expression fragments for matching
+        * the search terms as parsed by this engine in a text extract.
+        * STUB
+        *
+        * @return Array
+        */
+       function termMatches() {
+               return array();
+       }
+
+       function numRows() {
+               return 0;
+       }
+
+       /**
+        * Return true if results are included in this result set.
+        * STUB
+        *
+        * @return Boolean
+        */
+       function hasResults() {
+               return false;
+       }
+
+       /**
+        * Some search modes return a total hit count for the query
+        * in the entire article database. This may include pages
+        * in namespaces that would not be matched on the given
+        * settings.
+        *
+        * Return null if no total hits number is supported.
+        *
+        * @return Integer
+        */
+       function getTotalHits() {
+               return null;
+       }
+
+       /**
+        * Some search modes return a suggested alternate term if there are
+        * no exact hits. Returns true if there is one on this set.
+        *
+        * @return Boolean
+        */
+       function hasSuggestion() {
+               return false;
+       }
+
+       /**
+        * @return String: suggested query, null if none
+        */
+       function getSuggestionQuery() {
+               return null;
+       }
+
+       /**
+        * @return String: HTML highlighted suggested query, '' if none
+        */
+       function getSuggestionSnippet() {
+               return '';
+       }
+
+       /**
+        * Return information about how and from where the results were fetched,
+        * should be useful for diagnostics and debugging
+        *
+        * @return String
+        */
+       function getInfo() {
+               return null;
+       }
+
+       /**
+        * Return a result set of hits on other (multiple) wikis associated with this one
+        *
+        * @return SearchResultSet
+        */
+       function getInterwikiResults() {
+               return null;
+       }
+
+       /**
+        * Check if there are results on other wikis
+        *
+        * @return Boolean
+        */
+       function hasInterwikiResults() {
+               return $this->getInterwikiResults() != null;
+       }
+
+       /**
+        * Fetches next search result, or false.
+        * STUB
+        *
+        * @return SearchResult
+        */
+       function next() {
+               return false;
+       }
+
+       /**
+        * Frees the result set, if applicable.
+        */
+       function free() {
+               // ...
+       }
+
+       /**
+        * Did the search contain search syntax?  If so, Special:Search won't offer
+        * the user a link to a create a page named by the search string because the
+        * name would contain the search syntax.
+        */
+       public function searchContainedSyntax() {
+               return false;
+       }
+}
+
+/**
+ * This class is used for different SQL-based search engines shipped with MediaWiki
+ * @ingroup Search
+ */
+class SqlSearchResultSet extends SearchResultSet {
+
+       protected $mResultSet;
+
+       function __construct( $resultSet, $terms ) {
+               $this->mResultSet = $resultSet;
+               $this->mTerms = $terms;
+       }
+
+       function termMatches() {
+               return $this->mTerms;
+       }
+
+       function numRows() {
+               if ( $this->mResultSet === false ) {
+                       return false;
+               }
+
+               return $this->mResultSet->numRows();
+       }
+
+       function next() {
+               if ( $this->mResultSet === false ) {
+                       return false;
+               }
+
+               $row = $this->mResultSet->fetchObject();
+               if ( $row === false ) {
+                       return false;
+               }
+
+               return SearchResult::newFromRow( $row );
+       }
+
+       function free() {
+               if ( $this->mResultSet === false ) {
+                       return false;
+               }
+
+               $this->mResultSet->free();
+       }
+}
+
+/**
+ * A SearchResultSet wrapper for SearchEngine::getNearMatch
+ */
+class SearchNearMatchResultSet extends SearchResultSet {
+       private $fetched = false;
+
+       /**
+        * @param $match mixed Title if matched, else null
+        */
+       public function __construct( $match ) {
+               $this->result = $match;
+       }
+
+       public function hasResult() {
+               return (bool)$this->result;
+       }
+
+       public function numRows() {
+               return $this->hasResults() ? 1 : 0;
+       }
+
+       public function next() {
+               if ( $this->fetched || !$this->result ) {
+                       return false;
+               }
+               $this->fetched = true;
+               return SearchResult::newFromTitle( $this->result );
+       }
+}
index b0d1f95..a7c196b 100644 (file)
@@ -46,6 +46,16 @@ class SiteList extends GenericArrayObject {
         */
        protected $byGlobalId = array();
 
+       /**
+        * Navigational site identifiers alias inter-language prefixes
+        * pointing to their sites offset value.
+        *
+        * @since 1.23
+        *
+        * @var array of string
+        */
+       protected $byNavigationId = array();
+
        /**
         * @see GenericArrayObject::getObjectType
         *
@@ -75,6 +85,11 @@ class SiteList extends GenericArrayObject {
                $this->byGlobalId[$site->getGlobalId()] = $index;
                $this->byInternalId[$site->getInternalId()] = $index;
 
+               $ids = $site->getNavigationIds();
+               foreach ( $ids as $navId ) {
+                       $this->byNavigationId[$navId] = $index;
+               }
+
                return true;
        }
 
@@ -94,6 +109,11 @@ class SiteList extends GenericArrayObject {
 
                        unset( $this->byGlobalId[$site->getGlobalId()] );
                        unset( $this->byInternalId[$site->getInternalId()] );
+
+                       $ids = $site->getNavigationIds();
+                       foreach ( $ids as $navId ) {
+                               unset( $this->byNavigationId[$navId] );
+                       }
                }
 
                parent::offsetUnset( $index );
@@ -196,6 +216,43 @@ class SiteList extends GenericArrayObject {
                $this->offsetUnset( $this->byInternalId[$id] );
        }
 
+       /**
+        * Returns if the list contains the site with the provided navigational site id.
+        *
+        * @param string $id
+        *
+        * @return boolean
+        */
+       public function hasNavigationId( $id ) {
+               return array_key_exists( $id, $this->byNavigationId );
+       }
+
+       /**
+        * Returns the Site with the provided navigational site id.
+        * The site needs to exist, so if not sure, call has first.
+        *
+        * @since 1.23
+        *
+        * @param string $id
+        *
+        * @return Site
+        */
+       public function getSiteByNavigationId( $id ) {
+               return $this->offsetGet( $this->byNavigationId[$id] );
+       }
+
+       /**
+        * Removes the site with the specified navigational site id.
+        * The site needs to exist, so if not sure, call has first.
+        *
+        * @since 1.23
+        *
+        * @param string $id
+        */
+       public function removeSiteByNavigationId( $id ) {
+               $this->offsetUnset( $this->byNavigationId[$id] );
+       }
+
        /**
         * Sets a site in the list. If the site was not there,
         * it will be added. If it was, it will be updated.
@@ -240,7 +297,7 @@ class SiteList extends GenericArrayObject {
         * @var string A string uniquely identifying the version of the serialization structure,
         *             not including any sub-structures.
         */
-       const SERIAL_VERSION_ID = '2013-02-07';
+       const SERIAL_VERSION_ID = '2014-03-17';
 
        /**
         * Returns the version ID that identifies the serialization structure used by
@@ -270,6 +327,7 @@ class SiteList extends GenericArrayObject {
                        array(
                                'internalIds' => $this->byInternalId,
                                'globalIds' => $this->byGlobalId,
+                               'navigationIds' => $this->byNavigationId
                        )
                );
        }
@@ -288,6 +346,7 @@ class SiteList extends GenericArrayObject {
 
                $this->byInternalId = $serializationData['internalIds'];
                $this->byGlobalId = $serializationData['globalIds'];
+               $this->byNavigationId = $serializationData['navigationIds'];
 
                return $serializationData;
        }
index 4e2556c..888829a 100644 (file)
  * @ingroup SpecialPage
  */
 abstract class ChangesListSpecialPage extends SpecialPage {
-       var $rcSubpage, $rcOptions; // @todo Rename these, make protected
-       protected $customFilters;
+       /** @var string */
+       protected $rcSubpage;
 
-       /**
-        * The feed format to output as (either 'rss' or 'atom'), or null if no
-        * feed output was requested
-        *
-        * @var string $feedFormat
-        */
-       protected $feedFormat;
+       /** @var FormOptions */
+       protected $rcOptions;
+
+       /** @var array */
+       protected $customFilters;
 
        /**
         * Main execution point
@@ -46,19 +44,13 @@ abstract class ChangesListSpecialPage extends SpecialPage {
         */
        public function execute( $subpage ) {
                $this->rcSubpage = $subpage;
-               $this->feedFormat = $this->including() ? null : $this->getRequest()->getVal( 'feed' );
-               if ( $this->feedFormat !== 'atom' && $this->feedFormat !== 'rss' ) {
-                       $this->feedFormat = null;
-               }
 
                $this->setHeaders();
                $this->outputHeader();
                $this->addModules();
 
+               $rows = $this->getRows();
                $opts = $this->getOptions();
-               // Fetch results, prepare a batch link existence check query
-               $conds = $this->buildMainQueryConds( $opts );
-               $rows = $this->doMainQuery( $conds, $opts );
                if ( $rows === false ) {
                        if ( !$this->including() ) {
                                $this->doHeader( $opts );
@@ -67,26 +59,30 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        return;
                }
 
-               if ( !$this->feedFormat ) {
-                       $batch = new LinkBatch;
-                       foreach ( $rows as $row ) {
-                               $batch->add( NS_USER, $row->rc_user_text );
-                               $batch->add( NS_USER_TALK, $row->rc_user_text );
-                               $batch->add( $row->rc_namespace, $row->rc_title );
-                       }
-                       $batch->execute();
-               }
-               if ( $this->feedFormat ) {
-                       list( $changesFeed, $formatter ) = $this->getFeedObject( $this->feedFormat );
-                       /** @var ChangesFeed $changesFeed */
-                       $changesFeed->execute( $formatter, $rows, $this->checkLastModified( $this->feedFormat ), $opts );
-               } else {
-                       $this->webOutput( $rows, $opts );
+               $batch = new LinkBatch;
+               foreach ( $rows as $row ) {
+                       $batch->add( NS_USER, $row->rc_user_text );
+                       $batch->add( NS_USER_TALK, $row->rc_user_text );
+                       $batch->add( $row->rc_namespace, $row->rc_title );
                }
+               $batch->execute();
+
+               $this->webOutput( $rows, $opts );
 
                $rows->free();
        }
 
+       /**
+        * Get the database result for this special page instance. Used by ApiFeedRecentChanges.
+        *
+        * @return bool|ResultWrapper Result or false
+        */
+       public function getRows() {
+               $opts = $this->getOptions();
+               $conds = $this->buildMainQueryConds( $opts );
+               return $this->doMainQuery( $conds, $opts );
+       }
+
        /**
         * Get the current FormOptions for this request
         *
@@ -461,30 +457,6 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                $out->addModules( 'mediawiki.special.changeslist.legend.js' );
        }
 
-       /**
-        * Return an array with a ChangesFeed object and ChannelFeed object.
-        *
-        * This is intentionally not abstract not to require subclasses which don't
-        * use feeds functionality to implement it.
-        *
-        * @param string $feedFormat Feed's format (either 'rss' or 'atom')
-        * @return array
-        */
-       public function getFeedObject( $feedFormat ) {
-               throw new MWException( "Not implemented" );
-       }
-
-       /**
-        * Get last-modified date, for client caching. Not implemented by default
-        * (returns current time).
-        *
-        * @param string $feedFormat
-        * @return string|bool
-        */
-       public function checkLastModified( $feedFormat ) {
-               return wfTimestampNow();
-       }
-
        protected function getGroupName() {
                return 'changes';
        }
index e5ce48f..91a2de2 100644 (file)
@@ -169,6 +169,7 @@ class SpecialPage {
        function isListed() {
                return $this->mListed;
        }
+
        /**
         * Set whether this page is listed in Special:Specialpages, at run-time
         * @since 1.3
@@ -178,6 +179,7 @@ class SpecialPage {
        function setListed( $listed ) {
                return wfSetVar( $this->mListed, $listed );
        }
+
        /**
         * Get or set whether this special page is listed in Special:SpecialPages
         * @since 1.6
index dea65f3..c6735e6 100644 (file)
@@ -165,6 +165,7 @@ class SpecialPageFactory {
                'PermanentLink'             => 'SpecialPermanentLink',
                'Redirect'                  => 'SpecialRedirect',
                'Revisiondelete'            => 'SpecialRevisionDelete',
+               'RunJobs'                   => 'SpecialRunJobs',
                'Specialpages'              => 'SpecialSpecialpages',
                'Userlogout'                => 'SpecialUserlogout',
        );
index 484e00c..47f5b1e 100644 (file)
@@ -30,6 +30,12 @@ class SpecialChangePassword extends FormSpecialPage {
 
        protected $mUserName, $mDomain;
 
+       // Optional Wikitext Message to show above the password change form
+       protected $mPreTextMessage = null;
+
+       // label for old password input
+       protected $mOldPassMsg = null;
+
        public function __construct() {
                parent::__construct( 'ChangePassword', 'editmyprivateinfo' );
                $this->listed( false );
@@ -52,13 +58,34 @@ class SpecialChangePassword extends FormSpecialPage {
                }
        }
 
+       /**
+        * Set a message at the top of the Change Password form
+        * @since 1.23
+        * @param Message $msg to parse and add to the form header
+        */
+       public function setChangeMessage( Message $msg ) {
+               $this->mPreTextMessage = $msg;
+       }
+
+       /**
+        * Set a message at the top of the Change Password form
+        * @since 1.23
+        * @param string $msg Message label for old/temp password field
+        */
+       public function setOldPasswordMessage( $msg ) {
+               $this->mOldPassMsg = $msg;
+       }
+
        protected function getFormFields() {
                global $wgCookieExpiration;
 
                $user = $this->getUser();
                $request = $this->getRequest();
 
-               $oldpassMsg = $user->isLoggedIn() ? 'oldpassword' : 'resetpass-temp-password';
+               $oldpassMsg = $this->mOldPassMsg;
+               if ( !isset( $oldpassMsg ) ) {
+                       $oldpassMsg = $user->isLoggedIn() ? 'oldpassword' : 'resetpass-temp-password';
+               }
 
                $fields = array(
                        'Name' => array(
@@ -116,6 +143,9 @@ class SpecialChangePassword extends FormSpecialPage {
                );
                $form->addButton( 'wpCancel',  $this->msg( 'resetpass-submit-cancel' )->text() );
                $form->setHeaderText( $this->msg( 'resetpass_text' )->parseAsBlock() );
+               if ( $this->mPreTextMessage instanceof Message ) {
+                       $form->addPreText( $this->mPreTextMessage->parseAsBlock() );
+               }
                $form->addHiddenFields(
                        $this->getRequest()->getValues( 'wpName', 'wpDomain', 'returnto', 'returntoquery' ) );
        }
@@ -211,17 +241,25 @@ class SpecialChangePassword extends FormSpecialPage {
                        );
                }
 
+               // @TODO Make these separate messages, since the message is written for both cases
+               if ( !$user->checkTemporaryPassword( $oldpass ) && !$user->checkPassword( $oldpass ) ) {
+                       wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'wrongpassword' ) );
+                       throw new PasswordError( $this->msg( 'resetpass-wrong-oldpass' )->text() );
+               }
+
+               // User is resetting their password to their old password
+               if ( $oldpass === $newpass ) {
+                       throw new PasswordError( $this->msg( 'resetpass-recycled' )->text() );
+               }
+
+               // Do AbortChangePassword after checking mOldpass, so we don't leak information
+               // by possibly aborting a new password before verifying the old password.
                $abortMsg = 'resetpass-abort-generic';
                if ( !wfRunHooks( 'AbortChangePassword', array( $user, $oldpass, $newpass, &$abortMsg ) ) ) {
                        wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'abortreset' ) );
                        throw new PasswordError( $this->msg( $abortMsg )->text() );
                }
 
-               if ( !$user->checkTemporaryPassword( $oldpass ) && !$user->checkPassword( $oldpass ) ) {
-                       wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'wrongpassword' ) );
-                       throw new PasswordError( $this->msg( 'resetpass-wrong-oldpass' )->text() );
-               }
-
                // Please reset throttle for successful logins, thanks!
                if ( $throttleCount ) {
                        LoginForm::clearLoginThrottle( $this->mUserName );
@@ -240,7 +278,7 @@ class SpecialChangePassword extends FormSpecialPage {
                        // changing the password also modifies the user's token.
                        $user->setCookies();
                }
-
+               $user->resetPasswordExpiration();
                $user->saveSettings();
        }
 
index c594807..3642750 100644 (file)
@@ -74,6 +74,7 @@ class SpecialContributions extends IncludableSpecialPage {
                $this->opts['limit'] = $request->getInt( 'limit', $user->getOption( 'rclimit' ) );
                $this->opts['target'] = $target;
                $this->opts['topOnly'] = $request->getBool( 'topOnly' );
+               $this->opts['newOnly'] = $request->getBool( 'newOnly' );
 
                $nt = Title::makeTitleSafe( NS_USER, $target );
                if ( !$nt ) {
@@ -140,6 +141,9 @@ class SpecialContributions extends IncludableSpecialPage {
                if ( $this->opts['topOnly'] ) {
                        $feedParams['toponly'] = true;
                }
+               if ( $this->opts['newOnly'] ) {
+                       $feedParams['newonly'] = true;
+               }
                if ( $this->opts['deletedOnly'] ) {
                        $feedParams['deletedonly'] = true;
                }
@@ -185,6 +189,7 @@ class SpecialContributions extends IncludableSpecialPage {
                                'month' => $this->opts['month'],
                                'deletedOnly' => $this->opts['deletedOnly'],
                                'topOnly' => $this->opts['topOnly'],
+                               'newOnly' => $this->opts['newOnly'],
                                'nsInvert' => $this->opts['nsInvert'],
                                'associated' => $this->opts['associated'],
                        ) );
@@ -318,6 +323,16 @@ class SpecialContributions extends IncludableSpecialPage {
                                array(),
                                array( 'page' => $userpage->getPrefixedText() )
                        );
+
+                       # Suppression log link (bug 59120)
+                       if ( $this->getUser()->isAllowed( 'suppressionlog' ) ) {
+                               $tools[] = Linker::linkKnown(
+                                       SpecialPage::getTitleFor( 'Log', 'suppress' ),
+                                       $this->msg( 'sp-contributions-suppresslog' )->escaped(),
+                                       array(),
+                                       array( 'offender' => $username )
+                               );
+                       }
                }
                # Uploads
                $tools[] = Linker::linkKnown(
@@ -404,6 +419,10 @@ class SpecialContributions extends IncludableSpecialPage {
                        $this->opts['topOnly'] = false;
                }
 
+               if ( !isset( $this->opts['newOnly'] ) ) {
+                       $this->opts['newOnly'] = false;
+               }
+
                $form = Html::openElement(
                        'form',
                        array(
@@ -423,6 +442,7 @@ class SpecialContributions extends IncludableSpecialPage {
                        'year',
                        'month',
                        'topOnly',
+                       'newOnly',
                        'associated'
                );
 
@@ -555,10 +575,21 @@ class SpecialContributions extends IncludableSpecialPage {
                                array( 'class' => 'mw-input' )
                        )
                );
+               $checkLabelNewOnly = Html::rawElement(
+                       'span',
+                       array( 'style' => 'white-space: nowrap' ),
+                       Xml::checkLabel(
+                               $this->msg( 'sp-contributions-newonly' )->text(),
+                               'newOnly',
+                               'mw-show-new-only',
+                               $this->opts['newOnly'],
+                               array( 'class' => 'mw-input' )
+                       )
+               );
                $extraOptions = Html::rawElement(
                        'td',
                        array( 'colspan' => 2 ),
-                       $deletedOnlyCheck . $checkLabelTopOnly
+                       $deletedOnlyCheck . $checkLabelTopOnly . $checkLabelNewOnly
                );
 
                $dateSelectionAndSubmit = Xml::tags( 'td', array( 'colspan' => 2 ),
@@ -642,6 +673,7 @@ class ContribsPager extends ReverseChronologicalPager {
 
                $this->deletedOnly = !empty( $options['deletedOnly'] );
                $this->topOnly = !empty( $options['topOnly'] );
+               $this->newOnly = !empty( $options['newOnly'] );
 
                $year = isset( $options['year'] ) ? $options['year'] : false;
                $month = isset( $options['month'] ) ? $options['month'] : false;
@@ -821,6 +853,10 @@ class ContribsPager extends ReverseChronologicalPager {
                        $condition[] = 'rev_id = page_latest';
                }
 
+               if ( $this->newOnly ) {
+                       $condition[] = 'rev_parent_id = 0';
+               }
+
                return array( $tables, $index, $condition, $join_conds );
        }
 
index d148a50..6c3cb95 100644 (file)
@@ -427,6 +427,15 @@ class DeletedContributionsPage extends SpecialPage {
                                                'page' => $nt->getPrefixedText()
                                        )
                                );
+                               # Suppression log link (bug 59120)
+                               if ( $this->getUser()->isAllowed( 'suppressionlog' ) ) {
+                                       $tools[] = Linker::linkKnown(
+                                               SpecialPage::getTitleFor( 'Log', 'suppress' ),
+                                               $this->msg( 'sp-contributions-suppresslog' )->escaped(),
+                                               array(),
+                                               array( 'offender' => $userObj->getName() )
+                                       );
+                               }
                        }
 
                        # Uploads
index bc0d7e3..77d2317 100644 (file)
@@ -46,7 +46,7 @@ class SpecialDiff extends RedirectSpecialPage {
                $parts = explode( '/', $subpage );
 
                // Try to parse the values given, generating somewhat pretty URLs if possible
-               if ( count( $parts ) === 1 ) {
+               if ( count( $parts ) === 1 && $parts[0] !== '' ) {
                        $this->mAddedRedirectParams['diff'] = $parts[0];
                } elseif ( count( $parts ) === 2 ) {
                        $this->mAddedRedirectParams['oldid'] = $parts[0];
index 6695c82..c867f06 100644 (file)
@@ -143,7 +143,7 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                        }
                        $out->addHTML( $this->userForm( $this->mTarget ) );
 
-                       return false;
+                       return;
                }
 
                $this->mTargetObj = $ret;
@@ -159,7 +159,7 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                $form->loadData();
 
                if ( !wfRunHooks( 'EmailUserForm', array( &$form ) ) ) {
-                       return false;
+                       return;
                }
 
                $result = $form->show();
index 2ac34eb..29722c8 100644 (file)
@@ -3,7 +3,7 @@
  * Implements Special:Import
  *
  * Copyright © 2003,2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 4548b63..8137651 100644 (file)
@@ -203,7 +203,7 @@ class SpecialPrefixindex extends SpecialAllpages {
 
                        $n = 0;
                        if ( $res->numRows() > 0 ) {
-                               $out = Xml::openElement( 'table', array( 'id' => 'mw-prefixindex-list-table' ) );
+                               $out = Xml::openElement( 'table', array( 'class' => 'mw-prefixindex-list-table' ) );
 
                                $prefixLength = strlen( $prefix );
                                while ( ( $n < $this->maxPerPage ) && ( $s = $res->fetchObject() ) ) {
index 09284d0..e505ecb 100644 (file)
@@ -38,6 +38,7 @@ class SpecialProtectedpages extends SpecialPage {
        public function execute( $par ) {
                $this->setHeaders();
                $this->outputHeader();
+               $this->getOutput()->addModuleStyles( 'mediawiki.special' );
 
                // Purge expired entries on one in every 10 queries
                if ( !mt_rand( 0, 10 ) ) {
@@ -81,7 +82,7 @@ class SpecialProtectedpages extends SpecialPage {
                if ( $pager->getNumRows() ) {
                        $this->getOutput()->addHTML(
                                $pager->getNavigationBar() .
-                                       '<ul>' . $pager->getBody() . '</ul>' .
+                                       $pager->getBody() .
                                        $pager->getNavigationBar()
                        );
                } else {
@@ -89,105 +90,6 @@ class SpecialProtectedpages extends SpecialPage {
                }
        }
 
-       /**
-        * Callback function to output a restriction
-        * @param Title $row Protected title
-        * @return string Formatted "<li>" element
-        */
-       public function formatRow( $row ) {
-               wfProfileIn( __METHOD__ );
-
-               static $infinity = null;
-
-               if ( is_null( $infinity ) ) {
-                       $infinity = wfGetDB( DB_SLAVE )->getInfinity();
-               }
-
-               $title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
-               if ( !$title ) {
-                       wfProfileOut( __METHOD__ );
-
-                       return Html::rawElement(
-                               'li',
-                               array(),
-                               Html::element(
-                                       'span',
-                                       array( 'class' => 'mw-invalidtitle' ),
-                                       Linker::getInvalidTitleDescription(
-                                               $this->getContext(),
-                                               $row->page_namespace,
-                                               $row->page_title
-                                       )
-                               )
-                       ) . "\n";
-               }
-
-               $link = Linker::link( $title );
-
-               $description_items = array();
-
-               // Messages: restriction-level-sysop, restriction-level-autoconfirmed
-               $protType = $this->msg( 'restriction-level-' . $row->pr_level )->escaped();
-
-               $description_items[] = $protType;
-
-               if ( $row->pr_cascade ) {
-                       $description_items[] = $this->msg( 'protect-summary-cascade' )->text();
-               }
-
-               $stxt = '';
-               $lang = $this->getLanguage();
-
-               $expiry = $lang->formatExpiry( $row->pr_expiry, TS_MW );
-               if ( $expiry != $infinity ) {
-                       $user = $this->getUser();
-                       $description_items[] = $this->msg(
-                               'protect-expiring-local',
-                               $lang->userTimeAndDate( $expiry, $user ),
-                               $lang->userDate( $expiry, $user ),
-                               $lang->userTime( $expiry, $user )
-                       )->escaped();
-               }
-
-               if ( !is_null( $size = $row->page_len ) ) {
-                       $stxt = $lang->getDirMark() . ' ' . Linker::formatRevisionSize( $size );
-               }
-
-               // Show a link to the change protection form for allowed users otherwise
-               // a link to the protection log
-               if ( $this->getUser()->isAllowed( 'protect' ) ) {
-                       $changeProtection = Linker::linkKnown(
-                               $title,
-                               $this->msg( 'protect_change' )->escaped(),
-                               array(),
-                               array( 'action' => 'unprotect' )
-                       );
-               } else {
-                       $ltitle = SpecialPage::getTitleFor( 'Log' );
-                       $changeProtection = Linker::linkKnown(
-                               $ltitle,
-                               $this->msg( 'protectlogpage' )->escaped(),
-                               array(),
-                               array(
-                                       'type' => 'protect',
-                                       'page' => $title->getPrefixedText()
-                               )
-                       );
-               }
-
-               $changeProtection = ' ' . $this->msg( 'parentheses' )->rawParams( $changeProtection )
-                       ->escaped();
-
-               wfProfileOut( __METHOD__ );
-
-               return Html::rawElement(
-                       'li',
-                       array(),
-                       $lang->specialList( $link . $stxt, $lang->commaList( $description_items ), false ) .
-                               $changeProtection
-               ) . "\n";
-       }
-
        /**
         * @param int $namespace
         * @param string $type Restriction type
@@ -388,7 +290,7 @@ class SpecialProtectedpages extends SpecialPage {
  * @todo document
  * @ingroup Pager
  */
-class ProtectedPagesPager extends AlphabeticPager {
+class ProtectedPagesPager extends TablePager {
        public $mForm, $mConds;
        private $type, $level, $namespace, $sizetype, $size, $indefonly, $cascadeonly, $noredirect;
 
@@ -408,19 +310,185 @@ class ProtectedPagesPager extends AlphabeticPager {
                parent::__construct( $form->getContext() );
        }
 
-       function getStartBody() {
+       function preprocessResults( $result ) {
                # Do a link batch query
                $lb = new LinkBatch;
-               foreach ( $this->mResult as $row ) {
+               $userids = array();
+
+               foreach ( $result as $row ) {
                        $lb->add( $row->page_namespace, $row->page_title );
+                       // field is nullable, maybe null on old protections
+                       if ( $row->log_user !== null ) {
+                               $userids[] = $row->log_user;
+                       }
+               }
+
+               // fill LinkBatch with user page and user talk
+               if ( count( $userids ) ) {
+                       $userCache = UserCache::singleton();
+                       $userCache->doQuery( $userids, array(), __METHOD__ );
+                       foreach ( $userids as $userid ) {
+                               $name = $userCache->getProp( $userid, 'name' );
+                               if ( $name !== false ) {
+                                       $lb->add( NS_USER, $name );
+                                       $lb->add( NS_USER_TALK, $name );
+                               }
+                       }
                }
+
                $lb->execute();
+       }
 
-               return '';
+       function getFieldNames() {
+               static $headers = null;
+
+               if ( $headers == array() ) {
+                       $headers = array(
+                               'log_timestamp' => 'protectedpages-timestamp',
+                               'pr_page' => 'protectedpages-page',
+                               'pr_expiry' => 'protectedpages-expiry',
+                               'log_user' => 'protectedpages-performer',
+                               'pr_params' => 'protectedpages-params',
+                               'log_comment' => 'protectedpages-reason',
+                       );
+                       foreach ( $headers as $key => $val ) {
+                               $headers[$key] = $this->msg( $val )->text();
+                       }
+               }
+
+               return $headers;
        }
 
-       function formatRow( $row ) {
-               return $this->mForm->formatRow( $row );
+       /**
+        * @param string $field
+        * @param string $value
+        * @return string
+        * @throws MWException
+        */
+       function formatValue( $field, $value ) {
+               /** @var $row object */
+               $row = $this->mCurrentRow;
+
+               $formatted = '';
+
+               switch ( $field ) {
+                       case 'log_timestamp':
+                               // when timestamp is null, this is a old protection row
+                               if ( $value === null ) {
+                                       $formatted = Html::rawElement(
+                                               'span',
+                                               array( 'class' => 'mw-protectedpages-unknown' ),
+                                               $this->msg( 'protectedpages-unknown-timestamp' )->escaped()
+                                       );
+                               } else {
+                                       $formatted = $this->getLanguage()->userTimeAndDate( $value, $this->getUser() );
+                               }
+                               break;
+
+                       case 'pr_page':
+                               $title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
+                               if ( !$title ) {
+                                       $formatted = Html::element(
+                                               'span',
+                                               array( 'class' => 'mw-invalidtitle' ),
+                                               Linker::getInvalidTitleDescription(
+                                                       $this->getContext(),
+                                                       $row->page_namespace,
+                                                       $row->page_title
+                                               )
+                                       );
+                               } else {
+                                       $formatted = Linker::link( $title );
+                               }
+                               if ( !is_null( $row->page_len ) ) {
+                                       $formatted .= $this->getLanguage()->getDirMark() .
+                                               ' ' . Html::rawElement(
+                                               'span',
+                                               array( 'class' => 'mw-protectedpages-length' ),
+                                               Linker::formatRevisionSize( $row->page_len )
+                                       );
+                               }
+                               break;
+
+                       case 'pr_expiry':
+                               $formatted = $this->getLanguage()->formatExpiry( $value, /* User preference timezone */true );
+                               $title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
+                               if ( $this->getUser()->isAllowed( 'protect' ) && $title ) {
+                                       $changeProtection = Linker::linkKnown(
+                                               $title,
+                                               $this->msg( 'protect_change' )->escaped(),
+                                               array(),
+                                               array( 'action' => 'unprotect' )
+                                       );
+                                       $formatted .= ' ' . Html::rawElement(
+                                               'span',
+                                               array( 'class' => 'mw-protectedpages-actions' ),
+                                               $this->msg( 'parentheses' )->rawParams( $changeProtection )->escaped()
+                                       );
+                               }
+                               break;
+
+                       case 'log_user':
+                               // when timestamp is null, this is a old protection row
+                               if ( $row->log_timestamp === null ) {
+                                       $formatted = Html::rawElement(
+                                               'span',
+                                               array( 'class' => 'mw-protectedpages-unknown' ),
+                                               $this->msg( 'protectedpages-unknown-performer' )->escaped()
+                                       );
+                               } else {
+                                       $username = UserCache::singleton()->getProp( $value, 'name' );
+                                       if ( LogEventsList::userCanBitfield( $row->log_deleted, LogPage::DELETED_USER, $this->getUser() ) ) {
+                                               if ( $username === false ) {
+                                                       $formatted = htmlspecialchars( $value );
+                                               } else {
+                                                       $formatted = Linker::userLink( $value, $username )
+                                                               . Linker::userToolLinks( $value, $username );
+                                               }
+                                       } else {
+                                               $formatted = $this->msg( 'rev-deleted-user' )->escaped();
+                                       }
+                                       if ( LogEventsList::isDeleted( $row, LogPage::DELETED_USER ) ) {
+                                               $formatted = '<span class="history-deleted">' . $formatted . '</span>';
+                                       }
+                               }
+                               break;
+
+                       case 'pr_params':
+                               $params = array();
+                               // Messages: restriction-level-sysop, restriction-level-autoconfirmed
+                               $params[] = $this->msg( 'restriction-level-' . $row->pr_level )->escaped();
+                               if ( $row->pr_cascade ) {
+                                       $params[] = $this->msg( 'protect-summary-cascade' )->text();
+                               }
+                               $formatted = $this->getLanguage()->commaList( $params );
+                               break;
+
+                       case 'log_comment':
+                               // when timestamp is null, this is a old protection row
+                               if ( $row->log_timestamp === null ) {
+                                       $formatted = Html::rawElement(
+                                               'span',
+                                               array( 'class' => 'mw-protectedpages-unknown' ),
+                                               $this->msg( 'protectedpages-unknown-reason' )->escaped()
+                                       );
+                               } else {
+                                       if ( LogEventsList::userCanBitfield( $row->log_deleted, LogPage::DELETED_COMMENT, $this->getUser() ) ) {
+                                               $formatted = Linker::formatComment( $value !== null ? $value : '' );
+                                       } else {
+                                               $formatted = $this->msg( 'rev-deleted-comment' )->escaped();
+                                       }
+                                       if ( LogEventsList::isDeleted( $row, LogPage::DELETED_COMMENT ) ) {
+                                               $formatted = '<span class="history-deleted">' . $formatted . '</span>';
+                                       }
+                               }
+                               break;
+
+                       default:
+                               throw new MWException( "Unknown field '$field'" );
+               }
+
+               return $formatted;
        }
 
        function getQueryInfo() {
@@ -455,14 +523,51 @@ class ProtectedPagesPager extends AlphabeticPager {
                }
 
                return array(
-                       'tables' => array( 'page_restrictions', 'page' ),
-                       'fields' => array( 'pr_id', 'page_namespace', 'page_title', 'page_len',
-                               'pr_type', 'pr_level', 'pr_expiry', 'pr_cascade' ),
-                       'conds' => $conds
+                       'tables' => array( 'page', 'page_restrictions', 'log_search', 'logging' ),
+                       'fields' => array(
+                               'pr_id',
+                               'page_namespace',
+                               'page_title',
+                               'page_len',
+                               'pr_type',
+                               'pr_level',
+                               'pr_expiry',
+                               'pr_cascade',
+                               'log_timestamp',
+                               'log_user',
+                               'log_comment',
+                               'log_deleted',
+                       ),
+                       'conds' => $conds,
+                       'join_conds' => array(
+                               'log_search' => array(
+                                       'LEFT JOIN', array(
+                                               'ls_field' => 'pr_id', 'ls_value = pr_id'
+                                       )
+                               ),
+                               'logging' => array(
+                                       'LEFT JOIN', array(
+                                               'ls_log_id = log_id'
+                                       )
+                               )
+                       )
                );
        }
 
+       public function getTableClass() {
+               return 'TablePager mw-protectedpages';
+       }
+
        function getIndexField() {
                return 'pr_id';
        }
+
+       function getDefaultSort() {
+               return 'pr_id';
+       }
+
+       function isFieldSortable( $field ) {
+               // no index for sorting exists
+               return false;
+       }
 }
index d266e3f..720d0a8 100644 (file)
  * @ingroup SpecialPage
  */
 class SpecialRecentChanges extends ChangesListSpecialPage {
-
+       // @codingStandardsIgnoreStart Needed "useless" override to change parameters.
        public function __construct( $name = 'Recentchanges', $restriction = '' ) {
                parent::__construct( $name, $restriction );
        }
+       // @codingStandardsIgnoreEnd
 
        /**
         * Main execution point
@@ -38,10 +39,19 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
         * @param string $subpage
         */
        public function execute( $subpage ) {
+               // Backwards-compatibility: redirect to new feed URLs
+               $feedFormat = $this->getRequest()->getVal( 'feed' );
+               if ( !$this->including() && $feedFormat ) {
+                       $query = $this->getFeedQuery();
+                       $query['feedformat'] = $feedFormat === 'atom' ? 'atom' : 'rss';
+                       $this->getOutput()->redirect( wfAppendQuery( wfScript( 'api' ), $query ) );
+                       return;
+               }
+
                // 10 seconds server-side caching max
                $this->getOutput()->setSquidMaxage( 10 );
                // Check if the client has a cached version
-               $lastmod = $this->checkLastModified( $this->feedFormat );
+               $lastmod = $this->checkLastModified();
                if ( $lastmod === false ) {
                        return;
                }
@@ -142,8 +152,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
        }
 
        public function validateOptions( FormOptions $opts ) {
-               global $wgFeedLimit;
-               $opts->validateIntBounds( 'limit', 0, $this->feedFormat ? $wgFeedLimit : 5000 );
+               $opts->validateIntBounds( 'limit', 0, 5000 );
                parent::validateOptions( $opts );
        }
 
@@ -244,16 +253,26 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                return $rows;
        }
 
+       public function outputFeedLinks() {
+               $this->addFeedLinks( $this->getFeedQuery() );
+       }
+
        /**
-        * Output feed links.
+        * Get URL query parameters for action=feedrecentchanges API feed of current recent changes view.
+        *
+        * @return array
         */
-       public function outputFeedLinks() {
-               $feedQuery = $this->getFeedQuery();
-               if ( $feedQuery !== '' ) {
-                       $this->getOutput()->setFeedAppendQuery( $feedQuery );
-               } else {
-                       $this->getOutput()->setFeedAppendQuery( false );
-               }
+       private function getFeedQuery() {
+               global $wgFeedLimit;
+               $query = array_filter( $this->getOptions()->getAllValues(), function ( $value ) {
+                       // API handles empty parameters in a different way
+                       return $value !== '';
+               } );
+               $query['action'] = 'feedrecentchanges';
+               if ( $query['limit'] > $wgFeedLimit ) {
+                       $query['limit'] = $wgFeedLimit;
+               }
+               return $query;
        }
 
        /**
@@ -267,7 +286,8 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
 
                $limit = $opts['limit'];
 
-               $showWatcherCount = $wgRCShowWatchingUsers && $this->getUser()->getOption( 'shownumberswatching' );
+               $showWatcherCount = $wgRCShowWatchingUsers
+                       && $this->getUser()->getOption( 'shownumberswatching' );
                $watcherCache = array();
 
                $dbr = $this->getDB();
@@ -316,7 +336,9 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
 
                if ( $rows->numRows() === 0 ) {
                        $this->getOutput()->addHtml(
-                               '<div class="mw-changeslist-empty">' . $this->msg( 'recentchanges-noresult' )->parse() . '</div>'
+                               '<div class="mw-changeslist-empty">' .
+                               $this->msg( 'recentchanges-noresult' )->parse() .
+                               '</div>'
                        );
                } else {
                        $this->getOutput()->addHTML( $rclistOutput );
@@ -465,64 +487,14 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
         * Don't use this if we are using the patrol feature, patrol changes don't
         * update the timestamp
         *
-        * @param string $feedFormat
         * @return string|bool
         */
-       public function checkLastModified( $feedFormat ) {
+       public function checkLastModified() {
                $dbr = $this->getDB();
                $lastmod = $dbr->selectField( 'recentchanges', 'MAX(rc_timestamp)', false, __METHOD__ );
-               if ( $feedFormat || !$this->getUser()->useRCPatrol() ) {
-                       if ( $lastmod && $this->getOutput()->checkLastModified( $lastmod ) ) {
-                               # Client cache fresh and headers sent, nothing more to do.
-                               return false;
-                       }
-               }
-
                return $lastmod;
        }
 
-       /**
-        * Return an array with a ChangesFeed object and ChannelFeed object.
-        *
-        * @param string $feedFormat Feed's format (either 'rss' or 'atom')
-        * @return array
-        */
-       public function getFeedObject( $feedFormat ) {
-               $changesFeed = new ChangesFeed( $feedFormat, 'rcfeed' );
-               $formatter = $changesFeed->getFeedObject(
-                       $this->msg( 'recentchanges' )->inContentLanguage()->text(),
-                       $this->msg( 'recentchanges-feed-description' )->inContentLanguage()->text(),
-                       $this->getPageTitle()->getFullURL()
-               );
-
-               return array( $changesFeed, $formatter );
-       }
-
-       /**
-        * Get the query string to append to feed link URLs.
-        *
-        * @return string
-        */
-       public function getFeedQuery() {
-               global $wgFeedLimit;
-
-               $options = $this->getOptions()->getChangedValues();
-
-               // wfArrayToCgi() omits options set to null or false
-               foreach ( $options as &$value ) {
-                       if ( $value === false ) {
-                               $value = '0';
-                       }
-               }
-               unset( $value );
-
-               if ( isset( $options['limit'] ) && $options['limit'] > $wgFeedLimit ) {
-                       $options['limit'] = $wgFeedLimit;
-               }
-
-               return wfArrayToCgi( $options );
-       }
-
        /**
         * Creates the choose namespace selection
         *
@@ -713,7 +685,6 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                $dl = $lang->pipeList( $dl );
 
                // show/hide links
-               $showhide = array( $this->msg( 'show' )->text(), $this->msg( 'hide' )->text() );
                $filters = array(
                        'hideminor' => 'rcshowhideminor',
                        'hidebots' => 'rcshowhidebots',
@@ -722,6 +693,9 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                        'hidepatrolled' => 'rcshowhidepatr',
                        'hidemyself' => 'rcshowhidemine'
                );
+
+               $showhide = array( 'show', 'hide' );
+
                foreach ( $this->getCustomFilters() as $key => $params ) {
                        $filters[$key] = $params['msg'];
                }
@@ -732,7 +706,18 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
 
                $links = array();
                foreach ( $filters as $key => $msg ) {
-                       $link = $this->makeOptionsLink( $showhide[1 - $options[$key]],
+                       // The following messages are used here:
+                       // rcshowhideminor-show, rcshowhideminor-hide, rcshowhidebots-show, rcshowhidebots-hide,
+                       // rcshowhideanons-show, rcshowhideanons-hide, rcshowhideliu-show, rcshowhideliu-hide,
+                       // rcshowhidepatr-show, rcshowhidepatr-hide, rcshowhidemine-show, rcshowhidemine-hide.
+                       $linkMessage = $this->msg( $msg . '-' . $showhide[1 - $options[$key]] );
+                       // Extensions can define additional filters, but don't need to define the corresponding
+                       // messages. If they don't exist, just fall back to 'show' and 'hide'.
+                       if ( !$linkMessage->exists() ) {
+                               $linkMessage = $this->msg( $showhide[1 - $options[$key]] );
+                       }
+
+                       $link = $this->makeOptionsLink( $linkMessage->text(),
                                array( $key => 1 - $options[$key] ), $nondefaults );
                        $links[] = $this->msg( $msg )->rawParams( $link )->escaped();
                }
@@ -740,13 +725,15 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                // show from this onward link
                $timestamp = wfTimestampNow();
                $now = $lang->userTimeAndDate( $timestamp, $user );
-               $tl = $this->makeOptionsLink(
-                       $now, array( 'from' => $timestamp ), $nondefaults
-               );
-
+               $timenow = $lang->userTime( $timestamp, $user );
+               $datenow = $lang->userDate( $timestamp, $user );
                $rclinks = $this->msg( 'rclinks' )->rawParams( $cl, $dl, $lang->pipeList( $links ) )
                        ->parse();
-               $rclistfrom = $this->msg( 'rclistfrom' )->rawParams( $tl )->parse();
+               $rclistfrom = $this->makeOptionsLink(
+                       $this->msg( 'rclistfrom' )->rawParams( $now, $timenow, $datenow )->parse(),
+                       array( 'from' => $timestamp ),
+                       $nondefaults
+               );
 
                return "{$note}$rclinks<br />$rclistfrom";
        }
index 7cc8d30..c4f40be 100644 (file)
@@ -27,7 +27,8 @@
  * @ingroup SpecialPage
  */
 class SpecialRecentChangesLinked extends SpecialRecentChanges {
-       var $rclTargetTitle;
+       /** @var bool|Title */
+       protected $rclTargetTitle;
 
        function __construct() {
                parent::__construct( 'Recentchangeslinked' );
@@ -55,7 +56,8 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
                $outputPage = $this->getOutput();
                $title = Title::newFromURL( $target );
                if ( !$title || $title->isExternal() ) {
-                       $outputPage->addHtml( '<div class="errorbox">' . $this->msg( 'allpagesbadtitle' )->parse() . '</div>' );
+                       $outputPage->addHtml( '<div class="errorbox">' . $this->msg( 'allpagesbadtitle' )
+                                       ->parse() . '</div>' );
                        return false;
                }
 
@@ -105,7 +107,9 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
                        $opts['tagfilter']
                );
 
-               if ( !wfRunHooks( 'SpecialRecentChangesQuery', array( &$conds, &$tables, &$join_conds, $opts, &$query_options, &$select ) ) ) {
+               if ( !wfRunHooks( 'SpecialRecentChangesQuery',
+                       array( &$conds, &$tables, &$join_conds, $opts, &$query_options, &$select ) )
+               ) {
                        return false;
                }
 
@@ -128,14 +132,20 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
                }
 
                // field name prefixes for all the various tables we might want to join with
-               $prefix = array( 'pagelinks' => 'pl', 'templatelinks' => 'tl', 'categorylinks' => 'cl', 'imagelinks' => 'il' );
+               $prefix = array(
+                       'pagelinks' => 'pl',
+                       'templatelinks' => 'tl',
+                       'categorylinks' => 'cl',
+                       'imagelinks' => 'il'
+               );
 
                $subsql = array(); // SELECT statements to combine with UNION
 
                foreach ( $link_tables as $link_table ) {
                        $pfx = $prefix[$link_table];
 
-                       // imagelinks and categorylinks tables have no xx_namespace field, and have xx_to instead of xx_title
+                       // imagelinks and categorylinks tables have no xx_namespace field,
+                       // and have xx_to instead of xx_title
                        if ( $link_table == 'imagelinks' ) {
                                $link_ns = NS_FILE;
                        } elseif ( $link_table == 'categorylinks' ) {
@@ -234,17 +244,6 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
                return $extraOpts;
        }
 
-       public function getFeedObject( $feedFormat ) {
-               $feed = new ChangesFeed( $feedFormat, false );
-               $feedObj = $feed->getFeedObject(
-                       $this->msg( 'recentchangeslinked-title', $this->getTargetTitle()->getPrefixedText() )
-                               ->inContentLanguage()->text(),
-                       $this->msg( 'recentchangeslinked-feed' )->inContentLanguage()->text(),
-                       $this->getPageTitle()->getFullURL()
-               );
-               return array( $feed, $feedObj );
-       }
-
        /**
         * @return Title
         */
index 3599dc6..05c8872 100644 (file)
@@ -63,29 +63,34 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
         */
        static $UILabels = array(
                'revision' => array(
-                       'check-label'   => 'revdelete-hide-text',
-                       'success'               => 'revdelete-success',
-                       'failure'               => 'revdelete-failure',
+                       'check-label' => 'revdelete-hide-text',
+                       'success' => 'revdelete-success',
+                       'failure' => 'revdelete-failure',
+                       'text' => 'revdelete-text-text',
                ),
                'archive' => array(
-                       'check-label'   => 'revdelete-hide-text',
-                       'success'               => 'revdelete-success',
-                       'failure'               => 'revdelete-failure',
+                       'check-label' => 'revdelete-hide-text',
+                       'success' => 'revdelete-success',
+                       'failure' => 'revdelete-failure',
+                       'text' => 'revdelete-text-text',
                ),
                'oldimage' => array(
-                       'check-label'   => 'revdelete-hide-image',
-                       'success'               => 'revdelete-success',
-                       'failure'               => 'revdelete-failure',
+                       'check-label' => 'revdelete-hide-image',
+                       'success' => 'revdelete-success',
+                       'failure' => 'revdelete-failure',
+                       'text' => 'revdelete-text-file',
                ),
                'filearchive' => array(
-                       'check-label'   => 'revdelete-hide-image',
-                       'success'               => 'revdelete-success',
-                       'failure'               => 'revdelete-failure',
+                       'check-label' => 'revdelete-hide-image',
+                       'success' => 'revdelete-success',
+                       'failure' => 'revdelete-failure',
+                       'text' => 'revdelete-text-file',
                ),
                'logging' => array(
-                       'check-label'   => 'revdelete-hide-name',
-                       'success'               => 'logdelete-success',
-                       'failure'               => 'logdelete-failure',
+                       'check-label' => 'revdelete-hide-name',
+                       'success' => 'logdelete-success',
+                       'failure' => 'logdelete-failure',
+                       'text' => 'logdelete-text',
                ),
        );
 
@@ -328,7 +333,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
         * which will allow the user to choose new visibility settings.
         */
        protected function showForm() {
-               $UserAllowed = true;
+               $userAllowed = true;
 
                if ( $this->typeName == 'logging' ) {
                        $this->getOutput()->addWikiMsg( 'logdelete-selected', $this->getLanguage()->formatNum( count( $this->ids ) ) );
@@ -348,7 +353,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                                if ( !$this->submitClicked ) {
                                        throw new PermissionsError( 'suppressrevision' );
                                }
-                               $UserAllowed = false;
+                               $userAllowed = false;
                        }
                        $numRevisions++;
                        $this->getOutput()->addHTML( $item->getHTML() );
@@ -363,7 +368,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                $this->addUsageText();
 
                // Normal sysops can always see what they did, but can't always change it
-               if ( !$UserAllowed ) {
+               if ( !$userAllowed ) {
                        return;
                }
 
@@ -431,7 +436,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
         * @todo FIXME: Wikimedia-specific policy text
         */
        protected function addUsageText() {
-               $this->getOutput()->addWikiMsg( 'revdelete-text' );
+               $this->getOutput()->wrapWikiMsg( "<strong>$1</strong>\n$2", $this->typeLabels['text'], 'revdelete-text-others' );
                if ( $this->getUser()->isAllowed( 'suppressrevision' ) ) {
                        $this->getOutput()->addWikiMsg( 'revdelete-suppress-text' );
                }
diff --git a/includes/specials/SpecialRunJobs.php b/includes/specials/SpecialRunJobs.php
new file mode 100644 (file)
index 0000000..ab2b16e
--- /dev/null
@@ -0,0 +1,157 @@
+<?php
+/**
+ * Implements Special:RunJobs
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ * @author Aaron Schulz
+ */
+
+/**
+ * Special page designed for running background tasks (internal use only)
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialRunJobs extends UnlistedSpecialPage {
+       public function __construct() {
+               parent::__construct( 'RunJobs' );
+       }
+
+       public function execute( $par = '' ) {
+               $this->getOutput()->disable();
+
+               if ( wfReadOnly() ) {
+                       header( "HTTP/1.0 423 Locked" );
+                       print 'Wiki is in read-only mode';
+                       return;
+               } elseif ( !$this->getRequest()->wasPosted() ) {
+                       header( "HTTP/1.0 400 Bad Request" );
+                       print 'Request must be POSTed';
+                       return;
+               }
+
+               $optional = array( 'maxjobs' => 0 );
+               $required = array_flip( array( 'title', 'tasks', 'signature', 'sigexpiry' ) );
+
+               $params = array_intersect_key( $this->getRequest()->getValues(), $required + $optional );
+               $missing = array_diff_key( $required, $params );
+               if ( count( $missing ) ) {
+                       header( "HTTP/1.0 400 Bad Request" );
+                       print 'Missing parameters: ' . implode( ', ', array_keys( $missing ) );
+                       return;
+               }
+
+               $squery = $params;
+               unset( $squery['signature'] );
+               $cSig = self::getQuerySignature( $squery ); // correct signature
+               $rSig = $params['signature']; // provided signature
+
+               // Constant-time signature verification
+               // http://www.emerose.com/timing-attacks-explained
+               // @todo: make a common method for this
+               if ( !is_string( $rSig ) || strlen( $rSig ) !== strlen( $cSig ) ) {
+                       $verified = false;
+               } else {
+                       $result = 0;
+                       for ( $i = 0; $i < strlen( $cSig ); $i++ ) {
+                               $result |= ord( $cSig[$i] ) ^ ord( $rSig[$i] );
+                       }
+                       $verified = ( $result == 0 );
+               }
+               if ( !$verified || $params['sigexpiry'] < time() ) {
+                       header( "HTTP/1.0 400 Bad Request" );
+                       print 'Invalid or stale signature provided';
+                       return;
+               }
+
+               // Apply any default parameter values
+               $params += $optional;
+
+               // Client will usually disconnect before checking the response,
+               // but it needs to know when it is safe to disconnect. Until this
+               // reaches ignore_user_abort(), it is not safe as the jobs won't run.
+               ignore_user_abort( true ); // jobs may take a bit of time
+               header( "HTTP/1.0 202 Accepted" );
+               ob_flush();
+               flush();
+               // Once the client receives this response, it can disconnect
+
+               // Do all of the specified tasks...
+               if ( in_array( 'jobs', explode( '|', $params['tasks'] ) ) ) {
+                       self::executeJobs( (int)$params['maxjobs'] );
+               }
+       }
+
+       /**
+        * @param array $query
+        * @return string
+        */
+       public static function getQuerySignature( array $query ) {
+               global $wgSecretKey;
+
+               ksort( $query ); // stable order
+               return hash_hmac( 'sha1', wfArrayToCgi( $query ), $wgSecretKey );
+       }
+
+       /**
+        * Run jobs from the job queue
+        *
+        * @note: also called from Wiki.php
+        *
+        * @param integer $maxJobs Maximum number of jobs to run
+        * @return void
+        */
+       public static function executeJobs( $maxJobs ) {
+               $n = $maxJobs; // number of jobs to run
+               if ( $n < 1 ) {
+                       return;
+               }
+               try {
+                       $group = JobQueueGroup::singleton();
+                       $count = $group->executeReadyPeriodicTasks();
+                       if ( $count > 0 ) {
+                               wfDebugLog( 'jobqueue', "Executed $count periodic queue task(s)." );
+                       }
+
+                       do {
+                               $job = $group->pop( JobQueueGroup::TYPE_DEFAULT, JobQueueGroup::USE_CACHE );
+                               if ( $job ) {
+                                       $output = $job->toString() . "\n";
+                                       $t = - microtime( true );
+                                       wfProfileIn( __METHOD__ . '-' . get_class( $job ) );
+                                       $success = $job->run();
+                                       wfProfileOut( __METHOD__ . '-' . get_class( $job ) );
+                                       $group->ack( $job ); // done
+                                       $t += microtime( true );
+                                       $t = round( $t * 1000 );
+                                       if ( $success === false ) {
+                                               $output .= "Error: " . $job->getLastError() . ", Time: $t ms\n";
+                                       } else {
+                                               $output .= "Success, Time: $t ms\n";
+                                       }
+                                       wfDebugLog( 'jobqueue', $output );
+                               }
+                       } while ( --$n && $job );
+               } catch ( MWException $e ) {
+                       // We don't want exceptions thrown during job execution to
+                       // be reported to the user since the output is already sent.
+                       // Instead we just log them.
+                       MWExceptionHandler::logException( $e );
+               }
+       }
+}
index 588a313..3659c48 100644 (file)
@@ -105,7 +105,6 @@ class SpecialSearch extends SpecialPage {
 
                if ( $request->getVal( 'fulltext' )
                        || !is_null( $request->getVal( 'offset' ) )
-                       || !is_null( $request->getVal( 'searchx' ) )
                ) {
                        $this->showResults( $search );
                } else {
@@ -120,7 +119,7 @@ class SpecialSearch extends SpecialPage {
         */
        public function load() {
                $request = $this->getRequest();
-               list( $this->limit, $this->offset ) = $request->getLimitOffset( 20, '', 500 );
+               list( $this->limit, $this->offset ) = $request->getLimitOffset( 20 );
                $this->mPrefix = $request->getVal( 'prefix', '' );
 
                $user = $this->getUser();
@@ -199,7 +198,7 @@ class SpecialSearch extends SpecialPage {
                if ( !is_null( $t ) ) {
                        global $wgGoToEdit;
                        wfRunHooks( 'SpecialSearchNogomatch', array( &$t ) );
-                       wfDebugLog( 'nogomatch', $t->getText(), 'private' );
+                       wfDebugLog( 'nogomatch', $t->getFullText(), 'private' );
 
                        # If the feature is enabled, go straight to the edit page
                        if ( $wgGoToEdit ) {
@@ -807,7 +806,7 @@ class SpecialSearch extends SpecialPage {
 
                $t = $result->getTitle();
 
-               $titleSnippet = $result->getTitleSnippet( $terms );
+               $titleSnippet = $result->getTitleSnippet();
 
                if ( $titleSnippet == '' ) {
                        $titleSnippet = null;
@@ -820,7 +819,7 @@ class SpecialSearch extends SpecialPage {
 
                // format redirect if any
                $redirectTitle = $result->getRedirectTitle();
-               $redirectText = $result->getRedirectSnippet( $terms );
+               $redirectText = $result->getRedirectSnippet();
                $redirect = '';
                if ( !is_null( $redirectTitle ) ) {
                        if ( $redirectText == '' ) {
index f26d1a6..56f3f41 100644 (file)
@@ -151,6 +151,7 @@ class SpecialStatistics extends SpecialPage {
                                                $this->getLanguage()->formatNum( $this->images ),
                                                array( 'class' => 'mw-statistics-files' ) );
        }
+
        private function getEditStats() {
                return Xml::openElement( 'tr' ) .
                        Xml::tags( 'th', array( 'colspan' => '2' ), $this->msg( 'statistics-header-edits' )->parse() ) .
index 27ba78e..35bbf0b 100644 (file)
@@ -315,6 +315,7 @@ class SpecialUpload extends SpecialPage {
                $form->setSubmitText( $this->msg( 'upload-tryagain' )->escaped() );
                $this->showUploadForm( $form );
        }
+
        /**
         * Stashes the upload, shows the main form, but adds a "continue anyway button".
         * Also checks whether there are actually warnings to display.
index eca1839..1c9fed7 100644 (file)
@@ -49,6 +49,7 @@ class LoginForm extends SpecialPage {
        var $mSkipCookieCheck, $mReturnToQuery, $mToken, $mStickHTTPS;
        var $mType, $mReason, $mRealName;
        var $mAbortLoginErrorMsg = null;
+       private $mTempPasswordUsed;
        private $mLoaded = false;
        private $mSecureLoginUrl;
 
@@ -171,8 +172,9 @@ class LoginForm extends SpecialPage {
                if ( $this->mRequest->getProtocol() !== 'https' ) {
                        $title = $this->getFullTitle();
                        $query = array(
-                               'returnto' => $this->mReturnTo,
-                               'returntoquery' => $this->mReturnToQuery,
+                               'returnto' => $this->mReturnTo !== '' ? $this->mReturnTo : null,
+                               'returntoquery' => $this->mReturnToQuery !== '' ?
+                                       $this->mReturnToQuery : null,
                                'title' => null,
                        ) + $this->mRequest->getQueryValues();
                        $url = $title->getFullURL( $query, false, PROTO_HTTPS );
@@ -400,9 +402,15 @@ class LoginForm extends SpecialPage {
                        return Status::newFatal( 'sorbs_create_account_reason' );
                }
 
+               // Normalize the name so that silly things don't cause "invalid username" errors.
+               // User::newFromName does some rather strict checking, rejecting e.g. leading/trailing/multiple spaces.
+               $title = Title::makeTitleSafe( NS_USER, $this->mUsername );
+               if ( !is_object( $title ) ) {
+                       return Status::newFatal( 'noname' );
+               }
+
                # Now create a dummy user ($u) and check if it is valid
-               $name = trim( $this->mUsername );
-               $u = User::newFromName( $name, 'creatable' );
+               $u = User::newFromName( $title->getText(), 'creatable' );
                if ( !is_object( $u ) ) {
                        return Status::newFatal( 'noname' );
                } elseif ( 0 != $u->idForName() ) {
@@ -632,6 +640,8 @@ class LoginForm extends SpecialPage {
                                // At this point we just return an appropriate code/ indicating
                                // that the UI should show a password reset form; bot inter-
                                // faces etc will probably just fail cleanly here.
+                               $this->mAbortLoginErrorMsg = 'resetpass-temp-emailed';
+                               $this->mTempPasswordUsed = true;
                                $retval = self::RESET_PASS;
                        } else {
                                $retval = ( $this->mPassword == '' ) ? self::EMPTY_PASS : self::WRONG_PASS;
@@ -639,6 +649,10 @@ class LoginForm extends SpecialPage {
                } elseif ( $wgBlockDisablesLogin && $u->isBlocked() ) {
                        // If we've enabled it, make it so that a blocked user cannot login
                        $retval = self::USER_BLOCKED;
+               } elseif ( $u->getPasswordExpired() == 'hard' ) {
+                       // Force reset now, without logging in
+                       $retval = self::RESET_PASS;
+                       $this->mAbortLoginErrorMsg = 'resetpass-expired';
                } else {
                        $wgAuth->updateUser( $u );
                        $wgUser = $u;
@@ -753,7 +767,8 @@ class LoginForm extends SpecialPage {
        }
 
        function processLogin() {
-               global $wgMemc, $wgLang, $wgSecureLogin, $wgPasswordAttemptThrottle;
+               global $wgMemc, $wgLang, $wgSecureLogin, $wgPasswordAttemptThrottle,
+                       $wgInvalidPasswordReset;
 
                switch ( $this->authenticateUserData() ) {
                        case self::SUCCESS:
@@ -792,7 +807,18 @@ class LoginForm extends SpecialPage {
                                        $this->getContext()->setLanguage( $userLang );
                                        // Reset SessionID on Successful login (bug 40995)
                                        $this->renewSessionId();
-                                       $this->successfulLogin();
+                                       if ( $this->getUser()->getPasswordExpired() == 'soft' ) {
+                                               $this->resetLoginForm( $this->msg( 'resetpass-expired-soft' ) );
+                                       } elseif ( $wgInvalidPasswordReset
+                                               && !$user->isValidPassword( $this->mPassword )
+                                       ) {
+                                               $status = $user->checkPasswordValidity( $this->mPassword );
+                                               $this->resetLoginForm(
+                                                       $status->getMessage( 'resetpass-validity-soft' )
+                                               );
+                                       } else {
+                                               $this->successfulLogin();
+                                       }
                                } else {
                                        $this->cookieRedirectCheck( 'login' );
                                }
@@ -836,7 +862,7 @@ class LoginForm extends SpecialPage {
                                break;
                        case self::RESET_PASS:
                                $error = $this->mAbortLoginErrorMsg ?: 'resetpass_announce';
-                               $this->resetLoginForm( $this->msg( $error )->text() );
+                               $this->resetLoginForm( $this->msg( $error ) );
                                break;
                        case self::CREATE_BLOCKED:
                                $this->userBlockedMessage( $this->getUser()->isBlockedFromCreateAccount() );
@@ -862,14 +888,20 @@ class LoginForm extends SpecialPage {
        }
 
        /**
-        * @param $error string
+        * Show the Special:ChangePassword form, with custom message
+        * @param Message $msg
         */
-       function resetLoginForm( $error ) {
-               $this->getOutput()->addHTML( Xml::element( 'p', array( 'class' => 'error' ), $error ) );
+       protected function resetLoginForm( Message $msg ) {
+               // Allow hooks to explain this password reset in more detail
+               wfRunHooks( 'LoginPasswordResetMessage', array( &$msg, $this->mUsername ) );
                $reset = new SpecialChangePassword();
                $derivative = new DerivativeContext( $this->getContext() );
                $derivative->setTitle( $reset->getPageTitle() );
                $reset->setContext( $derivative );
+               if ( !$this->mTempPasswordUsed ) {
+                       $reset->setOldPasswordMessage( 'oldpassword' );
+               }
+               $reset->setChangeMessage( $msg );
                $reset->execute( null );
        }
 
index b4757e0..a6b3602 100644 (file)
@@ -152,7 +152,10 @@ class UserrightsPage extends SpecialPage {
                        }
 
                        $targetUser = $status->value;
-                       $targetUser->clearInstanceCache();
+                       if ( $targetUser instanceof User ) { // UserRightsProxy doesn't have this method (bug 61252)
+                               $targetUser->clearInstanceCache(); // bug 38989
+                       }
+
 
                        if ( $request->getVal( 'conflictcheck-originalgroups' ) !== implode( ',', $targetUser->getGroups() ) ) {
                                $out->addWikiMsg( 'userrights-conflict' );
index c38b009..870fa11 100644 (file)
@@ -86,6 +86,9 @@ class SpecialVersion extends SpecialPage {
                                        $file = $this->getExtAuthorsFileName( dirname( $extNode['path'] ) );
                                        if ( $file ) {
                                                $wikiText = file_get_contents( $file );
+                                               if ( substr( $file, -4 ) === '.txt' ) {
+                                                       $wikiText = Html::element( 'pre', array(), $wikiText );
+                                               }
                                        }
                                }
 
index 3f9b98d..789ea76 100644 (file)
@@ -152,10 +152,6 @@ class SpecialWhatLinksHere extends SpecialPage {
                // Read an extra row as an at-end check
                $queryLimit = $limit + 1;
 
-               // Enforce join order, sometimes namespace selector may
-               // trigger filesorts which are far less efficient than scanning many entries
-               $options[] = 'STRAIGHT_JOIN';
-
                $options['LIMIT'] = $queryLimit;
                $fields = array( 'page_id', 'page_namespace', 'page_title', 'rd_from' );
 
index 3f49ed3..d5b8d8b 100644 (file)
@@ -75,16 +75,21 @@ if ( !function_exists( 'session_name' ) ) {
 
                <h1>MediaWiki <?php echo htmlspecialchars( $wgVersion ) ?></h1>
                <div class='error'>
-               <p>LocalSettings.php not found.</p>
-               <p>
-               <?php
-               if ( $installerStarted ) {
-                       echo "Please <a href=\"" . htmlspecialchars( $path ) . "mw-config/index." . htmlspecialchars( $ext ) . "\"> complete the installation</a> and download LocalSettings.php.";
-               } else {
-                       echo "Please <a href=\"" . htmlspecialchars( $path ) . "mw-config/index." . htmlspecialchars( $ext ) . "\"> set up the wiki</a> first.";
-               }
-               ?>
-               </p>
+               <?php if ( !file_exists( MW_CONFIG_FILE ) ) { ?>
+                       <p>LocalSettings.php not found.</p>
+                       <p>
+                       <?php
+                       if ( $installerStarted ) {
+                               echo "Please <a href=\"" . htmlspecialchars( $path ) . "mw-config/index." . htmlspecialchars( $ext ) . "\"> complete the installation</a> and download LocalSettings.php.";
+                       } else {
+                               echo "Please <a href=\"" . htmlspecialchars( $path ) . "mw-config/index." . htmlspecialchars( $ext ) . "\"> set up the wiki</a> first.";
+                       }
+                       ?>
+                       </p>
+               <?php } else { ?>
+                       <p>LocalSettings.php not readable.</p>
+                       <p>Please correct file permissions and try again.</p>
+               <?php } ?>
 
                </div>
        </body>
index 0cb83d5..d1aef1d 100644 (file)
@@ -58,15 +58,23 @@ class UsercreateTemplate extends BaseTemplate {
                        <section class="mw-form-header">
                                <?php $this->html( 'header' ); /* extensions such as ConfirmEdit add form HTML here */ ?>
                        </section>
+                       <!-- This element is used by the mediawiki.special.userlogin.signup.js module. -->
+                       <div
+                               id="mw-createacct-status-area"
+                               <?php if ( $this->data['message'] ) { ?>
+                                       class="<?php echo $this->data['messagetype']; ?>box"
+                               <?php } else { ?>
+                                       style="display: none;"
+                               <?php } ?>
+                       >
                        <?php if ( $this->data['message'] ) { ?>
-                               <div class="<?php $this->text( 'messagetype' ); ?>box">
                                        <?php if ( $this->data['messagetype'] == 'error' ) { ?>
                                                <strong><?php $this->msg( 'createacct-error' ); ?></strong>
                                                <br />
                                        <?php } ?>
                                        <?php $this->html( 'message' ); ?>
-                               </div>
                        <?php } ?>
+                       </div>
 
                        <div>
                                <label for='wpName2'>
@@ -212,7 +220,7 @@ class UsercreateTemplate extends BaseTemplate {
                                                                                echo 'checked="checked"';
                                                                        } ?>
                                                                >
-                                                               <?php $this->msg( $inputItem['msg'] ); ?>
+                                                               <?php $this->msgHtml( $inputItem['msg'] ); ?>
                                                        </label>
                                                <?php
                                                } else {
index 8ed15c0..29908d7 100644 (file)
@@ -146,16 +146,25 @@ class UserloginTemplate extends BaseTemplate {
 
                        <div>
                                <?php
-                               echo Html::input( 'wpLoginAttempt', $this->getMsg( 'login' )->text(), 'submit', array(
+                               echo Html::input( 'wpLoginAttempt', $this->getMsg( 'pt-login-button' )->text(), 'submit', array(
                                        'id' => 'wpLoginAttempt',
                                        'tabindex' => '6',
                                        'class' => 'mw-ui-button mw-ui-big mw-ui-block mw-ui-constructive'
                                ) );
                                ?>
                        </div>
-
                        <div id="mw-userlogin-help">
-                               <?php echo $this->getMsg( 'userlogin-helplink' )->parse(); ?>
+                               <?php
+                               echo Html::element(
+                                       'a',
+                                       array(
+                                               'href' => Skin::makeInternalOrExternalUrl(
+                                                       wfMessage( 'helplogin-url' )->inContentLanguage()->text()
+                                               ),
+                                       ),
+                                       $this->getMsg( 'userlogin-helplink2' )->text()
+                               );
+                               ?>
                        </div>
                        <?php if ( $this->haveData( 'createOrLoginHref' ) ) { ?>
                                <?php if ( $this->data['loggedin'] ) { ?>
index 67bffc3..6cce4ac 100644 (file)
@@ -42,7 +42,7 @@ abstract class UploadBase {
        protected $mFilteredName, $mFinalExtension;
        protected $mLocalFile, $mFileSize, $mFileProps;
        protected $mBlackListedExtensions;
-       protected $mJavaDetected;
+       protected $mJavaDetected, $mSVGNSError;
 
        protected static $safeXmlEncodings = array( 'UTF-8', 'ISO-8859-1', 'ISO-8859-2', 'UTF-16', 'UTF-32' );
 
@@ -786,7 +786,7 @@ abstract class UploadBase {
                        return $this->mTitle;
                } elseif ( $blackListedExtensions ||
                                ( $wgCheckFileExtensions && $wgStrictFileExtensions &&
-                                       !$this->checkFileExtensionList( $ext, $wgFileExtensions ) ) ) {
+                                       !$this->checkFileExtension( $this->mFinalExtension, $wgFileExtensions ) ) ) {
                        $this->mBlackListedExtensions = $blackListedExtensions;
                        $this->mTitleError = self::FILETYPE_BADTYPE;
                        $this->mTitle = null;
@@ -1168,6 +1168,7 @@ abstract class UploadBase {
         * @return mixed false of the file is verified (does not contain scripts), array otherwise.
         */
        protected function detectScriptInSvg( $filename ) {
+               $this->mSVGNSError = false;
                $check = new XmlTypeCheck(
                        $filename,
                        array( $this, 'checkSvgScriptCallback' ),
@@ -1178,6 +1179,9 @@ abstract class UploadBase {
                        // Invalid xml (bug 58553)
                        return array( 'uploadinvalidxml' );
                } elseif ( $check->filterMatch ) {
+                       if ( $this->mSVGNSError ) {
+                               return array( 'uploadscriptednamespace', $this->mSVGNSError );
+                       }
                        return array( 'uploadscripted' );
                }
                return false;
@@ -1204,7 +1208,51 @@ abstract class UploadBase {
         * @return bool
         */
        public function checkSvgScriptCallback( $element, $attribs ) {
-               $strippedElement = $this->stripXmlNamespace( $element );
+               list( $namespace, $strippedElement ) = $this->splitXmlNamespace( $element );
+
+               static $validNamespaces = array(
+                       '',
+                       'adobe:ns:meta/',
+                       'http://creativecommons.org/ns#',
+                       'http://inkscape.sourceforge.net/dtd/sodipodi-0.dtd',
+                       'http://ns.adobe.com/adobeillustrator/10.0/',
+                       'http://ns.adobe.com/adobesvgviewerextensions/3.0/',
+                       'http://ns.adobe.com/extensibility/1.0/',
+                       'http://ns.adobe.com/flows/1.0/',
+                       'http://ns.adobe.com/illustrator/1.0/',
+                       'http://ns.adobe.com/imagereplacement/1.0/',
+                       'http://ns.adobe.com/pdf/1.3/',
+                       'http://ns.adobe.com/photoshop/1.0/',
+                       'http://ns.adobe.com/saveforweb/1.0/',
+                       'http://ns.adobe.com/variables/1.0/',
+                       'http://ns.adobe.com/xap/1.0/',
+                       'http://ns.adobe.com/xap/1.0/g/',
+                       'http://ns.adobe.com/xap/1.0/g/img/',
+                       'http://ns.adobe.com/xap/1.0/mm/',
+                       'http://ns.adobe.com/xap/1.0/rights/',
+                       'http://ns.adobe.com/xap/1.0/stype/dimensions#',
+                       'http://ns.adobe.com/xap/1.0/stype/font#',
+                       'http://ns.adobe.com/xap/1.0/stype/manifestitem#',
+                       'http://ns.adobe.com/xap/1.0/stype/resourceevent#',
+                       'http://ns.adobe.com/xap/1.0/stype/resourceref#',
+                       'http://ns.adobe.com/xap/1.0/t/pg/',
+                       'http://purl.org/dc/elements/1.1/',
+                       'http://purl.org/dc/elements/1.1',
+                       'http://schemas.microsoft.com/visio/2003/svgextensions/',
+                       'http://sodipodi.sourceforge.net/dtd/sodipodi-0.dtd',
+                       'http://web.resource.org/cc/',
+                       'http://www.freesoftware.fsf.org/bkchem/cdml',
+                       'http://www.inkscape.org/namespaces/inkscape',
+                       'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
+                       'http://www.w3.org/2000/svg',
+               );
+
+               if ( !in_array( $namespace, $validNamespaces ) ) {
+                       wfDebug( __METHOD__ . ": Non-svg namespace '$namespace' in uploaded file.\n" );
+                       // @TODO return a status object to a closure in XmlTypeCheck, for MW1.21+
+                       $this->mSVGNSError = $namespace;
+                       return true;
+               }
 
                /*
                 * check for elements that can contain javascript
@@ -1226,6 +1274,13 @@ abstract class UploadBase {
                        return true;
                }
 
+               # Block iframes, in case they pass the namespace check
+               if ( $strippedElement == 'iframe' ) {
+                       wfDebug( __METHOD__ . ": iframe in uploaded file.\n" );
+                       return true;
+               }
+
+
                foreach ( $attribs as $attrib => $value ) {
                        $stripped = $this->stripXmlNamespace( $attrib );
                        $value = strtolower( $value );
@@ -1299,6 +1354,19 @@ abstract class UploadBase {
                return false; //No scripts detected
        }
 
+       /**
+        * Divide the element name passed by the xml parser to the callback into URI and prifix.
+        * @param $name string
+        * @return array containing the namespace URI and prefix
+        */
+       private static function splitXmlNamespace( $element ) {
+               // 'http://www.w3.org/2000/svg:script' -> array( 'http://www.w3.org/2000/svg', 'script' )
+               $parts = explode( ':', strtolower( $element ) );
+               $name = array_pop( $parts );
+               $ns = implode( ':', $parts );
+               return array( $ns, $name );
+       }
+
        /**
         * @param $name string
         * @return string
index ea11737..f50eb49 100644 (file)
@@ -483,6 +483,7 @@ class UploadStash {
                }
 
                $this->fileMetadata[$key] = (array)$row;
+               $this->fileMetadata[$key]['us_props'] = $dbr->decodeBlob( $row->us_props );
 
                return true;
        }
index 320688a..fcb0f09 100644 (file)
@@ -3075,8 +3075,7 @@ class Language {
         * wfMessage( 'message' )->numParams( $num )->text()
         * </code>
         *
-        * See LanguageGu.php for the Gujarati implementation and
-        * $separatorTransformTable on MessageIs.php for
+        * See $separatorTransformTable on MessageIs.php for
         * the , => . and . => , implementation.
         *
         * @todo check if it's viable to use localeconv() for the decimal
index bb5b49f..57e73da 100644 (file)
@@ -752,8 +752,7 @@ class LanguageConverter {
                        return;
                }
 
-               global $wgDisableLangConversion, $wgDisableTitleConversion, $wgRequest,
-                       $wgUser;
+               global $wgDisableLangConversion, $wgDisableTitleConversion, $wgRequest;
                $isredir = $wgRequest->getText( 'redirect', 'yes' );
                $action = $wgRequest->getText( 'action' );
                $linkconvert = $wgRequest->getText( 'linkconvert', 'yes' );
@@ -768,8 +767,7 @@ class LanguageConverter {
                                ( $isredir == 'no'
                                        || $action == 'edit'
                                        || $action == 'submit'
-                                       || $linkconvert == 'no'
-                                       || $wgUser->getOption( 'noconvertlink' ) == 1 ) ) ) {
+                                       || $linkconvert == 'no' ) ) ) {
                        return;
                }
 
index aa3e4f2..88d57de 100644 (file)
@@ -54,7 +54,8 @@ class UzConverter extends LanguageConverter {
                'ф' => 'f', 'Ф' => 'F',
                'ц' => 'c', 'Ц' => 'C',
                'ў' => 'oʻ', 'Ў' => 'Oʻ',
-               'ц' => 'ts', 'Ц' => 'Ts', // note: at the beginning of a word and right after a consonant, only "s" is used
+               // note: at the beginning of a word and right after a consonant, only "s" is used
+               'ц' => 'ts', 'Ц' => 'Ts',
                'қ' => 'q', 'Қ' => 'Q',
                'ё' => 'yo', 'Ё' => 'Yo',
                'ю' => 'yu', 'Ю' => 'Yu',
@@ -69,9 +70,9 @@ class UzConverter extends LanguageConverter {
                'a' => 'а', 'A' => 'А',
                'b' => 'б', 'B' => 'Б',
                'd' => 'д', 'D' => 'Д',
-               'e' => 'е', 'E' => 'Е',
-               ' e' => ' э', ' E' => ' Э', // "э" is used at the beginning of a word instead of "e"
-               'ye' => 'е', 'Ye' => 'Е',
+               // at the beginning of a word and after a vowel, "э" is used instead of "e"
+               // (see regex below)
+               'e' => 'э', 'E' => 'Э',
                'f' => 'ф', 'F' => 'Ф',
                'g' => 'г', 'G' => 'Г',
                'g‘' => 'ғ', 'G‘' => 'Ғ', 'gʻ' => 'ғ', 'Gʻ' => 'Ғ',
@@ -112,6 +113,18 @@ class UzConverter extends LanguageConverter {
                );
        }
 
+       function translate( $text, $toVariant ) {
+               if( $toVariant == 'uz-cyrl' ) {
+                       $text = str_replace( 'ye', 'е', $text );
+                       $text = str_replace( 'Ye', 'Е', $text );
+                       $text = str_replace( 'YE', 'Е', $text );
+                       // "е" after consonants, otherwise "э" (see above)
+                       $text = preg_replace( '/([BVGDJZYKLMNPRSTFXCWQʻ‘H])E/u', '$1Е', $text );
+                       $text = preg_replace( '/([bvgdjzyklmnprstfxcwqʻ‘h])e/ui', '$1е', $text );
+               }
+               return parent::translate( $text, $toVariant );
+       }
+
 }
 
 /**
index cb68eaa..98e7691 100644 (file)
@@ -126,7 +126,7 @@ $messages = array(
 'dec' => 'ҧхҷ',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Акатегориа|Акатегориақәа}}',
+'pagecategories' => '{{PLURAL:$1|1=Акатегориа|Акатегориақәа}}',
 
 'article' => 'Адаҟьа',
 'mytalk' => 'Сахцәажәара',
index a79079b..504e0fd 100644 (file)
@@ -326,7 +326,6 @@ $messages = array(
 'vector-action-protect' => 'Peulindông',
 'vector-action-undelete' => 'Bateuë sampôh',
 'vector-action-unprotect' => 'Gantoe neulindông',
-'vector-simplesearch-preference' => 'Peuudép beunteueng mita biasa (kulét Vèctor khöng)',
 'vector-view-create' => 'Peugöt',
 'vector-view-edit' => 'Andam',
 'vector-view-history' => 'Eu riwayat',
@@ -592,8 +591,6 @@ Bèk tuwo neuatô [[Special:Preferences|geunalak {{SITENAME}}]] droëneuh.',
 'gotaccountlink' => 'Tamöng',
 'userlogin-resetlink' => 'Tuwo rincian tamöng droëneuh?',
 'userlogin-resetpassword-link' => 'Tuwö lageuëm rahsia?',
-'helplogin-url' => 'Help:Tamöng',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Bantu tamöng]]',
 'userlogin-loggedin' => 'Droëneuh ka neutamöng seubagoë $1. Neungui blangko di yup keu neutamöng seubagoë ureuëng ngui la’én',
 'userlogin-createanother' => 'Peudapeuta nan barô',
 'createacct-join' => 'Neupasoë keutrangan bhaih droëneuh di yup nyoë',
index 5f75e99..12189b8 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Abanima
  * @author Csisc
+ * @author Kuwaity26
  * @author Malekbr
  */
 
@@ -165,7 +166,6 @@ $messages = array(
 'vector-action-protect' => 'احم',
 'vector-action-undelete' => 'استرجع الحذف',
 'vector-action-unprotect' => 'غير الحماية',
-'vector-simplesearch-preference' => 'مكّن مقترحات البحث المُحسّنة (لواجهة فكتور فقط)',
 'vector-view-create' => 'أنشئ',
 'vector-view-edit' => 'Baddel',
 'vector-view-history' => "Warri l'historique",
@@ -866,8 +866,6 @@ walla [{{fullurl:{{FULLPAGENAME}}|action=edit}} tbaddel essafħa hedhi]</span>',
 'revdelete-show-file-submit' => 'نعم',
 'revdelete-selected' => "'''{{PLURAL:$2|المراجعة المختارة|المراجعات المختارة}} ل[[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|حدث السجل المختار|أحداث السجل المختارة}}:'''",
-'revdelete-text' => "'''المراجعات والأحداث المحذوفة ستظل تظهر في تاريخ الصفحة والسجلات،'''
-لكن أجزاء من محتواها لن يكون مسموحا للعامة برؤيتها.",
 'revdelete-confirm' => 'الإداريون الآخرون في {{SITENAME}} سيظل بإمكانهم رؤية المحتوى المخفي ويمكنهم استرجاعه مجددا من خلال هذه الواجهة نفسها، مالم يتم وضع قيود إضافية.
 من فضلك أكد أنك تنوي فعل هذا، وأنك تفهم العواقب، وأنك تفعل هذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].',
 'revdelete-suppress-text' => "الإخفاء ينبغي أن يتم استخدامه '''فقط''' في الحالات التالية:
@@ -894,7 +892,7 @@ $1",
 'logdelete-failure' => "'''تعذر ضبط رؤية السجل:'''
 $1",
 'revdel-restore' => 'تغيير الرؤية',
-'pagehist' => 'تارÙ\8aØ® Ø§Ù\84صÙ\81حة',
+'pagehist' => 'تاريخ صفحة',
 'deletedhist' => 'التاريخ المحذوف',
 'revdelete-hide-current' => 'خطأ عند إحفاء العنصر المؤرخ في $2 $1: هذه هي المراجعة الحالية.
 لا يمكن إخفاؤها.',
index 224121e..abbe643 100644 (file)
@@ -371,7 +371,6 @@ $messages = array(
 'vector-action-protect' => 'Beskerm',
 'vector-action-undelete' => 'Ontskrap',
 'vector-action-unprotect' => 'Wysig beskerming',
-'vector-simplesearch-preference' => 'Aktiveer vereenvoudigde soekbalk (slegs vir die Vektor-omslag)',
 'vector-view-create' => 'Skep',
 'vector-view-edit' => 'Wysig',
 'vector-view-history' => 'Wys geskiedenis',
@@ -654,8 +653,6 @@ Moenie vergeet om u [[Special:Preferences|voorkeure vir {{SITENAME}}]] te stel n
 'gotaccountlink' => 'Meld aan',
 'userlogin-resetlink' => 'U besonderhede vergeet?',
 'userlogin-resetpassword-link' => 'Wagwoord vergeet?',
-'helplogin-url' => 'Help:Aanmelding',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hulp met aanmelding]]',
 'userlogin-loggedin' => "U is reeds aangemeld as {{GENDER:$1|$1}}.
 Gebruik die onderstaande vorm om as 'n ander gebruiker aan te meld.",
 'userlogin-createanother' => "Skep nog 'n rekening",
@@ -1146,8 +1143,6 @@ U kan wel hierdie verskil sien. Meer details kan in die [{{fullurl:{{#Special:Lo
 'revdelete-show-file-submit' => 'Ja',
 'revdelete-selected' => "'''Geselekteerde {{PLURAL:$2|wysiging|wysigings}} vir [[:$1]]:'''",
 'logdelete-selected' => "'''Geselekteerde {{PLURAL:$1|logboek aksie|logboek aksies}}:'''",
-'revdelete-text' => "'''Geskrapte wysigings en aksies sal in die geskiedenis en logboeke sigbaar bly, maar dele van die inhoud sal nie publiek toeganklik wees nie.'''
-Ander administrateurs van {{SITENAME}} kan steeds die verborge inhoud sien en die verwydering met behulp van die vorm ongedaan maak, tensy aanvullende beperkinge deur die stelseladministrateur opgelê is.",
 'revdelete-confirm' => 'Bevestig asseblief dat u dit wil doen, dat u die nagevolge verstaan en dat u dit doen in ooreenstemming met die [[{{MediaWiki:Policy-url}}|beleid]].',
 'revdelete-suppress-text' => "Verberging van weergawes mag '''slegs''' in die volgende gevalle gebruik word:
 * Potensieel lasterlike inligting
index d9b6d96..d7cb38f 100644 (file)
@@ -35,7 +35,6 @@ $namespaceNames = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Twa lenk nyina ase:',
-'tog-justify' => 'Gyastefae mparagraf',
 'tog-hideminor' => 'Suma nsesae a wɔakɔ so a wɔnnkyɛree koraa',
 'tog-hidepatrolled' => 'Suma nsesae a wɔapatrole wɔn ndansa yi ara',
 'tog-newpageshidepatrolled' => 'Suma nkrataafa a wɔapatrole wɔn fi krataafa-foforo lest no so',
index df60817..acb5d1d 100644 (file)
@@ -104,7 +104,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Më ço kopje të mesazheve qi ua dërgoj të tjerëve',
 'tog-diffonly' => 'Mos e trego përmbajtjen e faqes nën ndryshimin',
 'tog-showhiddencats' => 'Trego kategoritë e mshefta',
-'tog-noconvertlink' => 'Mos lejo konvertimin e titullit vegëz',
 'tog-norollbackdiff' => 'Trego ndryshimin mbas procedurës së kthimit mbrapa',
 'tog-useeditwarning' => 'Paralajmëron mua kur unë të lë një redakto faqe me ndryshimet e para shpëtimit',
 
@@ -216,7 +215,6 @@ $messages = array(
 'vector-action-protect' => 'Mbroj',
 'vector-action-undelete' => 'Kthe fshimjen mbrapsht',
 'vector-action-unprotect' => 'Hiq mbrojtjen',
-'vector-simplesearch-preference' => 'Aktivizo sugjerime të avancueme në kërkim (vetëm për Vector skin)',
 'vector-view-create' => 'Krijo',
 'vector-view-edit' => 'Redakto',
 'vector-view-history' => 'Shih historinë',
@@ -797,7 +795,6 @@ Shiko tek [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} regjistr
 'revdelete-no-file' => 'Skeda e dhënë nuk ekziston.',
 'revdelete-selected' => "'''{{PLURAL:$2|Versioni i zgjedhur i|Versionet e zgjedhura të}} [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Veprimi i zgjedhur në regjistër|Veprimet e zgjedhura në regjistër}}:'''",
-'revdelete-text' => "'''Përmbajtja dhe pjesët e tjera nuk janë të dukshme për të gjithë, por figurojnë në historikun e versioneve.''' Administratorët munden përmbajtjen e larguar ta shikojnë dhe restaurojnë, përveç në rastet kur një gjë e tillë është ndaluar ekstra.",
 'revdelete-legend' => 'Vendosni kufizimet për versionin:',
 'revdelete-hide-text' => 'Fshihe tekstin e versionit',
 'revdelete-hide-image' => 'Fshih përmbajtjen skedare',
index e26ae09..bba364c 100644 (file)
@@ -166,7 +166,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Recibir copias de os correus que ninvío ta atros usuarios',
 'tog-diffonly' => "No amostrar o conteniu d'a pachina debaixo d'as esferencias",
 'tog-showhiddencats' => 'Amostrar categorías amagatas',
-'tog-noconvertlink' => 'Desactivar a conversión de titol de vinclo',
 'tog-norollbackdiff' => 'No amostrar as diferencias dimpués de revertir',
 'tog-useeditwarning' => "Alvertir-me quan salga d'una pachina d'edición sin alzar os cambios",
 
@@ -279,7 +278,6 @@ $messages = array(
 'vector-action-protect' => 'Protecher',
 'vector-action-undelete' => 'Restaurar',
 'vector-action-unprotect' => 'Cambiar protección',
-'vector-simplesearch-preference' => "Habilitar socherencias de busca amilloradas (nomás ta l'apariencia Vector)",
 'vector-view-create' => 'Creyar',
 'vector-view-edit' => 'Editar',
 'vector-view-history' => "Amostrar l'historial",
@@ -586,7 +584,7 @@ Si a cuenta s\'ha creyato por error, simplament ignore iste mensache.',
 
 # Change password dialog
 'changepassword' => 'Cambiar a clau',
-'resetpass_announce' => 'Ha encetato una sesión con una clau temporal que se le ninvió por correu. Por favor, escriba aquí una nueva clau:',
+'resetpass_announce' => 'Ta rematar o inicio de sesión, ha de definir una nueva clau:',
 'resetpass_text' => '<!-- Adiba aquí o testo -->',
 'resetpass_header' => "Cambiar a clau d'a cuenta",
 'oldpassword' => 'Clau antiga:',
@@ -917,8 +915,6 @@ Encara puet veyer a comparanza; en trobará mas detalles en o [{{fullurl:{{#Spec
 'revdelete-show-file-submit' => 'Sí',
 'revdelete-selected' => "'''{{PLURAL:$2|Versión trigata|Versions trigatas}} de [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Escaicimiento d'o rechistro trigato|Escaicimientos d'o rechistro trigatos}}:'''",
-'revdelete-text' => "'''As versions y esdevenimientos borratos encara apareixerán en o historial d'a pachina y en os rechistros, pero bellas partes d'o suyo conteniu serán inaccesibles ta o publico.'''
-Atros admenistradors de {{SITENAME}} encara podrán acceder t'o conteniu amagato y podrán desfer o borrau a traviés d'ista mesma interfaz, fueras de si s'estableixen restriccions adicionals.",
 'revdelete-confirm' => "Por favor confirme que ye mirando de fer ísto, que entiende as conseqüencias, y que lo ye fendo d'alcuerdo con [[{{MediaWiki:Policy-url}}|as politicas]].",
 'revdelete-suppress-text' => "Os borraus de versions '''nomás''' s'habrían de fer en os siguients casos:
 * Información potencialment difamatoria o libelo grieu.
index 311aedc..7c14671 100644 (file)
@@ -80,7 +80,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Sendan mē gelīcnessa þāra spearcǣrenda þe ic ōðrum brūcendum sende',
 'tog-diffonly' => 'Nā īwan trametes innunge under scādungum',
 'tog-showhiddencats' => 'Īwan gehȳdede floccas',
-'tog-noconvertlink' => 'Ne lǣt hlencena titula āwendunge',
 'tog-norollbackdiff' => 'Forlǣtan scādunge siþþan edweorc sīe gedōn',
 'tog-useeditwarning' => 'Cȳðan mē þǣr ic afare fram adihtunge tramete þe gīet hæbbe unhordoda andwendunga.',
 'tog-prefershttps' => 'Brūc ā sicore þēodednesse þā þū sī inmeldod',
@@ -207,7 +206,6 @@ $messages = array(
 'vector-action-protect' => 'Beorgan',
 'vector-action-undelete' => 'Scieppan tramet eft',
 'vector-action-unprotect' => 'Andwendan beorgunge',
-'vector-simplesearch-preference' => 'Ānfealdlīc sēcunge mearc (synderlīce on Vector scinne)',
 'vector-view-create' => 'Scieppan',
 'vector-view-edit' => 'Adihtan',
 'vector-view-history' => 'Stǣr',
@@ -280,7 +278,7 @@ $1',
 'pool-errorunknown' => 'Uncūþ wōh',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => 'Gecȳþness ymbe {{SITENAME}}',
+'aboutsite' => 'Gecȳþness ymbe {{GRAMMAR:wrēgendlīc|{{SITENAME}}}}',
 'aboutpage' => 'Project:Gecȳþness',
 'copyright' => 'Man mæg innunge under $1 findan.',
 'copyrightpage' => '{{ns:project}}:Gelīcnessriht',
@@ -419,7 +417,6 @@ Cnāw þæt sume trametas mihten gīet wesan geīwde swā þū wǣre gīet inmel
 'gotaccount' => 'Hafast þū reccinge ǣr? $1.',
 'gotaccountlink' => 'Inmeldian',
 'userlogin-resetpassword-link' => 'Forgēate þū þīn gelēafword?',
-'helplogin-url' => 'Help:Inmeldung',
 'createaccountmail' => 'Notian sceortne tīman hlētlic þafungword and sendan hit to þǣm spearcǣrenda naman þe is niðer',
 'createaccountreason' => 'Racu:',
 'badretype' => 'Þā þafungword þe write þū, bēoþ ungelīc.',
index a51ca8c..8f1cf66 100644 (file)
@@ -16,7 +16,6 @@ $fallback = 'hi';
 $messages = array(
 # User preference toggles
 'tog-underline' => ' कड़ी अधोरेखित करना:',
-'tog-justify' => 'परिच्छेद समान करॊ',
 'tog-hideminor' => 'हाल के बदलाव सॆं छोटॊ बदलाव छुपाबॊ',
 'tog-hidepatrolled' => 'निगरानी मॆं करलॊ गेलॊ संपादनॊ कॆ हाल के बदलावॊ मॆं नै देखाबॊ',
 'tog-newpageshidepatrolled' => 'निगरानी वाला पन्ना कॆ नया पन्ने वाला सूची मॆं नै देखाबॊ',
@@ -25,9 +24,7 @@ $messages = array(
 'tog-numberheadings' => 'शीर्षक स्वयं-क्रमांकित करॊ',
 'tog-showtoolbar' => 'एडिट टूलबार दर्शाबॊ (जावास्क्रीप्ट)',
 'tog-editondblclick' => 'दू-बार क्लीक करी कॆ पन्ना संपादित करॊ (जावास्क्रीप्ट)',
-'tog-editsection' => '[संपादित करॊ] कड़ी द्वारा विभाग संपादन करै के अनुमती दहॊ',
 'tog-editsectiononrightclick' => 'विभाग शीर्षक पर दायाँ क्लीक करीकॆ संपादन करै के अनुमती दॆ (जावास्क्रीप्ट)',
-'tog-showtoc' => 'अनुक्रम दर्शाबॊ (जोन पन्ना पर तीन सॆं ज्यादा विभाग छै)',
 'tog-rememberpassword' => 'इ कंप्यूटर पर हमरॊ लॉग-इन सूचना याद रखॊ (अधिकतम $1 {{PLURAL:$1|दिन|दिन}} लेली)',
 'tog-watchcreations' => 'हमरॊ तैयार करलॊ पन्ना हमरॊ ध्यानसूचीमॆं रखियै',
 'tog-watchdefault' => 'हमरॊ संपादित करलॊ पन्ना हमरॊ ध्यानसूचीमॆं रखियै',
@@ -35,7 +32,6 @@ $messages = array(
 'tog-watchdeletion' => 'हमरॊ हटैलॊ पन्ना हमरॊ ध्यानसूचीमॆं रखियै',
 'tog-previewontop' => 'एडिट बॉक्स के उपर झलक दिखाबॊ',
 'tog-previewonfirst' => 'पहलॊ सम्पादन पर पूर्वावलोकन देखॊ',
-'tog-nocache' => 'ब्राउजर पन्ना केचिंग अक्षम करॊ',
 'tog-enotifwatchlistpages' => 'हमरॊ ध्यानसूची मॆं दर्ज़ पन्ना बदलला के बाद हमरा इ-मेल करॊ',
 'tog-enotifusertalkpages' => 'हमरॊ सदस्य वार्ता पृष्ठ पर बदलाव होला सॆं हमरा इ-मेल करॊ',
 'tog-enotifminoredits' => 'तनी-मनी बदलावॊ लेली भी हमरा इ-मेल भेजॊ',
@@ -320,7 +316,6 @@ Hindi (hi)फ़िलहाल इस पन्ने पर कोई सा
 'recentchanges' => 'हाल मॆं होलॊ बदलाव',
 'recentchanges-legend' => 'हाल केरॊ परिवर्तन संबंधी विकल्प',
 'recentchanges-feed-description' => 'इ फ़ीड मॆ होय वाला विकि पर हाल मॆ होलॊ बदलाव देखियै.',
-'rcnote' => "$5, $4 के पहले के {{PLURAL:$2|'''१''' दिन|'''$2''' दिनों}} मॆं  {{PLURAL:$1|होलॊ '''१''' बदलाव इ प्रकार छै.| होलॊ '''$1''' बदलाव इ प्रकार छै}}",
 'rclistfrom' => '$1 सॆं नया बदलाव देखलाबॊ',
 'rcshowhideminor' => 'छोटॊ बदलाव $1',
 'rcshowhidebots' => 'बोट सीनी $1',
index f2ec543..90d6e24 100644 (file)
@@ -15,6 +15,7 @@
  * @author Alexknight12
  * @author Ali1
  * @author Alnokta
+ * @author Amire80
  * @author Antime
  * @author Arjanizary
  * @author Asaifm
@@ -524,7 +525,6 @@ $messages = array(
 'tog-ccmeonemails' => 'أرسل إلي نسخا من الرسائل الإلكترونية التي أرسلها إلى المستخدمين الآخرين',
 'tog-diffonly' => 'لا تعرض محتوى الصفحة أسفل الفرق',
 'tog-showhiddencats' => 'أظهر التصنيفات المخفية',
-'tog-noconvertlink' => 'عطل تحويل عناوين الروابط',
 'tog-norollbackdiff' => 'أزل الفرق بعد إحداث استرجاع',
 'tog-useeditwarning' => 'حذّرني عندما أغادر تحرير صفحة فيها تغييرات لم أحفظها',
 'tog-prefershttps' => 'دائما استخدم اتصالا آمنا بعد الدخول',
@@ -651,7 +651,6 @@ $messages = array(
 'vector-action-protect' => 'احم',
 'vector-action-undelete' => 'ألغ الحذف',
 'vector-action-unprotect' => 'غير الحماية',
-'vector-simplesearch-preference' => 'تفعيل شريط البحث المبسط (لمظهر فكتور فقط)',
 'vector-view-create' => 'أنشئ',
 'vector-view-edit' => 'عدل',
 'vector-view-history' => 'اعرض التاريخ',
@@ -700,7 +699,7 @@ $messages = array(
 'articlepage' => 'اعرض صفحة المحتوى',
 'talk' => 'نقاش',
 'views' => 'معاينة',
-'toolbox' => 'اÙ\84أدÙ\88ات',
+'toolbox' => 'أدوات',
 'userpage' => 'طالع صفحة المستخدم',
 'projectpage' => 'طالع صفحة المشروع',
 'imagepage' => 'طالع صفحة الملف',
@@ -939,8 +938,6 @@ $2',
 'gotaccountlink' => 'تسجيل الدخول',
 'userlogin-resetlink' => 'نسيت تفاصيل الدخول؟',
 'userlogin-resetpassword-link' => 'نسيت كلمة مرورك؟',
-'helplogin-url' => 'Help:تسجيل الدخول',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|المساعدة في تسجيل الدخول]]',
 'userlogin-loggedin' => 'أنت {{GENDER:$1|مسجل|مسجلة}} الدخول مسبقًا باسم $1. {{GENDER:$1|استخدم|استخدمي}} النموذج بالأسفل لتسجيل الدخول بحساب آخر.',
 'userlogin-createanother' => 'إنشاء حساب آخر',
 'createacct-join' => 'قم بإدخال المعلومات الخاصة بك أدناه.',
@@ -1038,6 +1035,9 @@ $2',
 'suspicious-userlogout' => 'رفض طلب خروجك لأنه يبدو كأنه أرسل عن طريق متصفح معطوب أو وسيط تخزين.',
 'createacct-another-realname-tip' => 'الاسم الحقيقي اختياري.
 إذا اخترت توفيره فسيستخدم لنسبة عمل المستخدم إليه.',
+'pt-login' => 'دخول',
+'pt-createaccount' => 'إنشاء حساب',
+'pt-userlogout' => 'خروج',
 
 # Email sending
 'php-mail-error-unknown' => "خطأ غير معروف في وظيفة البريد PHP's mail()",
@@ -1046,8 +1046,7 @@ $2',
 
 # Change password dialog
 'changepassword' => 'غير كلمة السر',
-'resetpass_announce' => 'تم تسجيل دخولك بكلمة سر مؤقتة.
-للدخول بشكل نهائي، يجب عليك ضبط كلمة سر جديدة هنا:',
+'resetpass_announce' => 'لإنهاء عملية تسجيل الدخول، يجب تعيين كلمة سر جديدة.',
 'resetpass_text' => '<!-- أضف نصا هنا -->',
 'resetpass_header' => 'غير كلمة سر الحساب',
 'oldpassword' => 'كلمة السر القديمة:',
@@ -1055,14 +1054,19 @@ $2',
 'retypenew' => 'أعد كتابة كلمة السر الجديدة:',
 'resetpass_submit' => 'ضبط كلمة السر والدخول',
 'changepassword-success' => 'تم تغيير كلمة السر بنجاح!',
+'changepassword-throttled' => 'لديك محاولات تسجيل دخول كثيرة حديثة. من فضلك انتظر $1 قبل المحاولة ثانية.',
 'resetpass_forbidden' => 'كلمات السر لا يمكن تغييرها',
 'resetpass-no-info' => 'يجب أن تكون مسجل الدخول للوصول إلى هذه الصفحة مباشرة.',
 'resetpass-submit-loggedin' => 'تغيير كلمة السر',
 'resetpass-submit-cancel' => 'إلغاء',
 'resetpass-wrong-oldpass' => 'كلمة سر حالية أو مؤقتة غير صحيحة.
 ربما تكون غيرت كلمة السر الخاصة بك بنجاح أو طلبت كلمة سر مؤقتة جديدة.',
+'resetpass-recycled' => 'الرجاء إعادة تعيين كلمة السر الخاصة بك إلى تركيبة أخرى غير كلمة السر الحالية.',
+'resetpass-temp-emailed' => 'أنت مسجل الدخول حالياً بتركيبة مرسلة عبر البريد الإلكتروني. لإكمال عملية تسجيل الدخول‘ يجب إعادة تعيين كلمة السر هنا:',
 'resetpass-temp-password' => 'كلمة سر مؤقتة:',
 'resetpass-abort-generic' => 'منعت مُلحقة إتمام صيرورة تغيير كلمة السّر.',
+'resetpass-expired' => 'انتهت مدة صلاحية كلمة السر الخاصة بك. الرجاء تعيين كلمة سر جديدة لتسجيل الدخول.',
+'resetpass-expired-soft' => 'انتهت مدة صلاحية كلمة السر الخاصة بك. الرجاء تعيين كلمة سر جديدة الآن أو النقر على زر إلغاء لإعادة تعيين كلمة السر لاحقاً.',
 
 # Special:PasswordReset
 'passwordreset' => 'إعادة ضبط كلمة السر',
@@ -1106,6 +1110,8 @@ $2
 'changeemail-password' => 'كلمة سر {{SITENAME}} الخاصة بك:',
 'changeemail-submit' => 'غيّر البريد الإلكتروني',
 'changeemail-cancel' => 'إلغاء',
+'changeemail-throttled' => 'أنت قمت بمحاولات تسجيل دخول كثيرة.
+من فضلك انتظر $1 قبل المحاولة ثانية.',
 
 # Special:ResetTokens
 'resettokens' => 'غير المفاتيح',
@@ -1258,10 +1264,10 @@ $2
 في نص التعديل. تم رفض التعديل لمنع فساد نص المقالة.
 هذا يحدث أحيانا عندما تستخدم خدمة بروكسي مجهول معيبة مبنية على الوب.'''",
 'edit_form_incomplete' => "'''بعض أجزاء من نموذج التعديل لم تصل إلى الخادم؛ تأكد من أن تعديلاتك لم تمس وحاول مجددا.'''",
-'editing' => 'تحرÙ\8aر $1',
+'editing' => 'تعدÙ\8aÙ\84 $1',
 'creating' => 'إنشاء «$1»',
-'editingsection' => 'تحرÙ\8aر $1 (قسم)',
-'editingcomment' => 'تعدÙ\8aÙ\84 $1 (Ù\82سÙ\85 Ø¬Ø¯Ù\8aد)',
+'editingsection' => 'تعدÙ\8aÙ\84 $1 (قسم)',
+'editingcomment' => 'Ø¥Ù\86شاء Ù\82سÙ\85 Ù\85Ù\86 Â«$1»',
 'editconflict' => 'تضارب في التحرير: $1',
 'explainconflict' => "لقد عدل شخص آخر هذه الصفحة بعد أن بدأت أنت بتحريرها.
 صندوق النصوص العلوي يحتوي على النص الموجود حاليا في الصفحة.
@@ -1330,8 +1336,8 @@ $2
 'content-failed-to-parse' => 'فشل في تحليل $2 محتوى لـ $1 نموذج: $3',
 'invalid-content-data' => 'بيانات المحتوى غير صالحة',
 'content-not-allowed-here' => '"$1" المحتوى غير مسموح على صفحة [[$2]]',
-'editwarning-warning' => 'Ù\82د ØªØªØ³Ø¨Ø¨ Ù\85غادرة Ù\87Ø°Ù\87 Ø§Ù\84صÙ\81حة بخسارتك لأي تغييرات أجريتها.
-يمكنك تعطيل هذا التحذير إذا كنت والجًا في قسم "التحرير" في تفضيلاتك.',
+'editwarning-warning' => 'Ù\85غادرة Ù\87Ø°Ù\87 Ø§Ù\84صÙ\81حة Ù\82د ØªØªØ³Ø¨Ø¨ بخسارتك لأي تغييرات أجريتها.
+إذا كنت مسجل الدخول، فيمكنك تعطيل هذا التحذير في قسم "{{int:prefs-editing}}" في تفضيلاتك.',
 'editpage-notsupportedcontentformat-title' => 'تنسيق المحتوى غير مدعوم',
 'editpage-notsupportedcontentformat-text' => 'تنسيق المحتوى $1 غير مدعوم بواسطة نموذج المحتوى $2.',
 
@@ -1368,6 +1374,7 @@ $2
 تحقق من المقارنة بالأسفل للتأكد من أن هذا هو ما تريد أن تفعله، ثم احفظ التغييرات بالأسفل للانتهاء من استرجاع التعديل.',
 'undo-failure' => 'لم يمكن استرجاع التعديل بسبب تعديلات متعارضة تمت على الصفحة.',
 'undo-norev' => 'فشل في الرجوع عن التعديل حيث أنه غير موجود أو تم حذفه.',
+'undo-nochange' => 'التعديل يبدو أنه قد تم الترجع عنه بالفعل.',
 'undo-summary' => 'الرجوع عن التعديل $1 بواسطة [[Special:Contributions/$2|$2]] ([[User talk:$2|نقاش]])',
 'undo-summary-username-hidden' => 'الرجوع عن المراجعة $1 التي أجراها مستخدمي مخفي',
 
@@ -1376,9 +1383,9 @@ $2
 'cantcreateaccount-text' => "إنشاء الحسابات من عنوان الأيبي هذا ('''$1''') تم منعه بواسطة [[User:$3|$3]].
 
 السبب المعطى بواسطة $3 هو ''$2''",
-'cantcreateaccount-range-text' => "إنشاء الحسابات من عناوين الآيبي في النطاق '''$1'''، التي تحتوي على الآيبي الخاص بك ('''$4''')، قد حظرها [[مستخدم:$3|$3]].
+'cantcreateaccount-range-text' => "إنشاء الحسابات من عناوين الآيبي في النطاق '''$1'''، التي تحتوي على الآيبي الخاص بك ('''$4''')، قد منعها [[User:$3|$3]].
 
³Ø¨Ø¨ Ø§Ù\84حظر Ø§Ù\84Ø°Ù\8a Ù\82اÙ\84Ù\87 $3 هو ''$2''",
§Ù\84سبب Ø§Ù\84Ù\85عطÙ\89 Ø¨Ù\88اسطة $3 هو ''$2''",
 
 # History pages
 'viewpagelogs' => 'اعرض سجلات هذه الصفحة',
@@ -1453,8 +1460,6 @@ $2
 'revdelete-show-file-submit' => 'نعم',
 'revdelete-selected' => "'''{{PLURAL:$2|المراجعة المختارة|المراجعات المختارة}} ل[[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|حدث السجل المختار|أحداث السجل المختارة}}:'''",
-'revdelete-text' => "'''المراجعات والأحداث المحذوفة ستظل تظهر في تاريخ الصفحة والسجلات،'''
-لكن أجزاء من محتواها لن يكون مسموحا للعامة برؤيتها.",
 'revdelete-confirm' => 'الإداريون الآخرون في {{SITENAME}} سيظل بإمكانهم رؤية المحتوى المخفي ويمكنهم استرجاعه مجددا من خلال هذه الواجهة نفسها، مالم يتم وضع قيود إضافية.
 من فضلك أكد أنك تنوي فعل هذا، وأنك تفهم العواقب، وأنك تفعل هذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].',
 'revdelete-suppress-text' => "ينبغي للإخفاء أن يستخدم '''فقط''' في الحالات التالية:
@@ -1542,7 +1547,7 @@ $1",
 'mergelogpagetext' => 'بالأسفل قائمة بأحدث عمليات الدمج لتاريخ صفحة ما إلى أخرى.',
 
 # Diffs
-'history-title' => ' «$1»: تاريخ المراجعة',
+'history-title' => 'تاريخ "$1"',
 'difference-title' => '«$1»: الفرق بين المراجعتين',
 'difference-title-multipage' => '«$1» و«$2»: الفرق بين الصفحتين',
 'difference-multipage' => '(الفرق بين الصفحتين)',
@@ -1551,6 +1556,8 @@ $1",
 'showhideselectedversions' => 'أظهر/أخف المراجعات المختارة',
 'editundo' => 'رجوع',
 'diff-empty' => '(لا فرق)',
+'diff-multi-sameuser' => '({{PLURAL:$1|مراجعة متوسطة واحدة|$1 مراجعات متوسطة}} بواسطة نفس المستخدم غير معروضة)',
+'diff-multi-otherusers' => '({{PLURAL:$1|مراجعة متوسطة واحدة|$1 مراجعات متوسطة}} بواسطة {{PLURAL:$2|مستخدم واحد آخر|$2 مستخدما}} غير معروضة)',
 'diff-multi-manyusers' => '({{PLURAL:$1||مراجعة واحدة متوسطة غير معروضة أجراها|مراجعتان متوسطتان غير معروضتان أجراهما|$1 مراجعات متوسطة غير معروضة أجراها|$1 مراجعة متوسطة غير معروضة أجراها}} أكثر من {{PLURAL:$2||مستخدم واحد|مستخدمين|$2 مستخدمين|$2 مستخدمًا|$2 مستخدم}}.)',
 'difference-missing-revision' => '{{PLURAL:$2|مراجعة واحدة|$2 مراجعات}} لهذا الفرق ($1) {{PLURAL:$2|لم|لم}} يتم إيجادها.
 
@@ -1571,7 +1578,7 @@ $1",
 'shown-title' => 'عرض $1 {{PLURAL:$1|نتيجة|نتيجة}} لكل صفحة',
 'viewprevnext' => 'عرض ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''توجد صفحة اسمها \"[[:\$1]]\" على هذه الويكي.''' {{PLURAL:\$2|0=|انظر ايضا نتائج البحث الأخرى.}}",
-'searchmenu-new' => "'''أنشئ الصفحة \"[[:\$1]]\" على هذه الويكي!''' {{PLURAL:\$2|0=|انظر أيضا الصفحة التي تم العثور عليها من بحثك.|انظر ايضا نتائج البحث.}}",
+'searchmenu-new' => '<strong>أنشئ الصفحة "[[:$1]]" على هذه الويكي!</strong>  {{PLURAL:$2|0=|انظر أيضا الصفحة التي تم العثور عليها من بحثك.|انظر ايضا نتائج البحث.}}',
 'searchprofile-articles' => 'صفحات المحتوى',
 'searchprofile-project' => 'صفحات المساعدة والمشروع',
 'searchprofile-images' => 'الوسائط المتعددة',
@@ -1597,6 +1604,7 @@ $1",
 'searchrelated' => 'مرتبطة',
 'searchall' => 'الكل',
 'showingresults' => "معروض بالأسفل {{PLURAL:$1|'''1''' نتيجة|'''$1''' نتيجة}} بدءا من رقم '''$2'''.",
+'showingresultsinrange' => 'معروض بالأسفل حتى {{PLURAL:$1|<strong>1</strong> نتيجة|<strong>$1</strong> نتائج}} في النطاق #<strong>$2</strong> إلى #<strong>$3</strong>.',
 'showingresultsnum' => "معروض بالأسفل {{PLURAL:$3|'''نتيجة واحدة'''|'''$3''' نتيجة}} بدءا من رقم'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|النتيجة '''$1''' من'''$3'''|النتائج '''$1 - $2''' من'''$3'''}} ل'''$4'''",
 'search-nonefound' => 'لا توجد نتائج تطابق الاستعلام.',
@@ -1916,13 +1924,25 @@ $1",
 'recentchanges-legend-heading' => 'شرح',
 'recentchanges-legend-newpage' => '(راجع أيضا [[Special:NewPages|قائمة الصفحات الجديدة]])',
 'rcnotefrom' => "بالأسفل التغييرات منذ '''$2''' (إلى '''$1''' معروضة).",
-'rclistfrom' => 'أظهر التغييرات بدءا من $1',
+'rclistfrom' => 'أظهر التغييرات بدء من $1',
 'rcshowhideminor' => '$1 التعديلات الطفيفة',
+'rcshowhideminor-show' => 'أظهر',
+'rcshowhideminor-hide' => 'أخف',
 'rcshowhidebots' => '$1 البوتات',
+'rcshowhidebots-show' => 'أظهر',
+'rcshowhidebots-hide' => 'أخف',
 'rcshowhideliu' => '$1 {{GENDER:$1|مستخدمين مسجلين|مستخدمات مسجلات|مستخدمون مسجلون}}',
+'rcshowhideliu-show' => 'أظهر',
+'rcshowhideliu-hide' => 'أخف',
 'rcshowhideanons' => '$1 المستخدمين المجهولين',
+'rcshowhideanons-show' => 'أظهر',
+'rcshowhideanons-hide' => 'أخف',
 'rcshowhidepatr' => '$1 التعديلات المراجعة',
+'rcshowhidepatr-show' => 'أظهر',
+'rcshowhidepatr-hide' => 'أخف',
 'rcshowhidemine' => '$1 تعديلاتي',
+'rcshowhidemine-show' => 'أظهر',
+'rcshowhidemine-hide' => 'أخف',
 'rclinks' => 'أظهر آخر $1 تعديل في آخر $2 يوم<br />$3',
 'diff' => 'فرق',
 'hist' => 'تاريخ',
@@ -1944,7 +1964,7 @@ $1",
 'recentchangeslinked' => 'تغييرات ذات علاقة',
 'recentchangeslinked-feed' => 'تغييرات ذات علاقة',
 'recentchangeslinked-toolbox' => 'تغييرات ذات علاقة',
-'recentchangeslinked-title' => 'التغييرات المرتبطة ب "$1"',
+'recentchangeslinked-title' => 'التغييرات المرتبطة بصفحة «$1»',
 'recentchangeslinked-summary' => "هذه قائمة بالتغييرات التي تمت حديثا للصفحات الموصولة من صفحة معينة (أو إلى الأعضاء ضمن تصنيف معين).
 الصفحات في [[Special:Watchlist|قائمة مراقبتك]] '''مغلظة'''",
 'recentchangeslinked-page' => 'اسم الصفحة:',
@@ -2052,6 +2072,7 @@ $1",
 'uploaddisabledtext' => 'رفع الملفات معطل.',
 'php-uploaddisabledtext' => 'رفع ملفات PHP معطل. من فضلك تحقق من إعدادات رفع الملفات.',
 'uploadscripted' => 'هذا الملف يضم كود HTML أو كود آخر يمكن أن يفسره متصفح الوب بطريقة خاطئة.',
+'uploadinvalidxml' => 'تعذر تحليل XML في الملف المرفوع.',
 'uploadvirus' => 'الملف يحتوي على فيروس! التفاصيل: $1',
 'uploadjava' => 'يحتوي ملف ZIP هذا على ملفات جافا .class.
 لا يسمح برفع ملفات جافا لأنها تتيح تخطي القيود الأمنية.',
@@ -2428,10 +2449,20 @@ $1',
 'deadendpagestext' => 'الصفحات التالية لا تصل إلى صفحات أخرى في {{SITENAME}}.',
 'protectedpages' => 'صفحات محمية',
 'protectedpages-indef' => 'عمليات الحماية غير المحددة فقط',
+'protectedpages-summary' => 'تحتوي هذه الصفحة على أسماء العناوين المحمية حالياً. لمطالعة قائمة الصفحات التي تم فرض حماية على إنشائها انظر [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'الحماية المضمنة فقط',
 'protectedpages-noredirect' => 'أخفِ التحويلات',
 'protectedpagesempty' => 'لا توجد صفحات محمية حاليا بهذه المحددات.',
+'protectedpages-timestamp' => 'ختم زمني',
+'protectedpages-page' => 'الصفحة',
+'protectedpages-expiry' => 'ينتهي في',
+'protectedpages-performer' => 'حماية مستخدم',
+'protectedpages-params' => 'معاملات الحماية',
+'protectedpages-reason' => 'السبب',
+'protectedpages-unknown-timestamp' => 'غير معروف',
+'protectedpages-unknown-performer' => 'مستخدم غير معروف',
 'protectedtitles' => 'عناوين محمية',
+'protectedtitles-summary' => 'تحتوي هذه الصفحة على أسماء العناوين المحمية حالياً من الإنشاء. لمطالعة قائمة الصفحات التي تم إنشائها وحمايتها انظر [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'لا توجد عناوين محمية حاليا بهذه المحددات.',
 'listusers' => 'قائمة الأعضاء',
 'listusers-editsonly' => 'اعرض المستخدمين الذين أجروا تعديلات فقط',
@@ -2480,7 +2511,7 @@ $1',
 'alphaindexline' => '$1 إلى $2',
 'nextpage' => 'الصفحة التالية ($1)',
 'prevpage' => 'الصفحة السابقة ($1)',
-'allpagesfrom' => 'اعرض Ø§Ù\84صÙ\81حات Ø¨Ø¯Ø¡Ø§Ù\8b من:',
+'allpagesfrom' => 'اعرض Ø§Ù\84صÙ\81حات Ø§Ø¨ØªØ¯Ø§Ø¡ من:',
 'allpagesto' => 'اعرض الصفحات المنتهية عند:',
 'allarticles' => 'كل الصفحات',
 'allinnamespace' => 'كل الصفحات (في نطاق $1)',
@@ -2501,7 +2532,7 @@ $1',
 'categoriespagetext' => '{{PLURAL:$1|التصنيف التالي يحتوي|التصنيفات التالية تحتوي}} على صفحات أو وسائط.
 [[Special:UnusedCategories|التصنيفات غير المستخدمة]] غير معروضة هنا.
 انظر أيضاً [[Special:WantedCategories|التصنيفات المطلوبة]].',
-'categoriesfrom' => 'أظÙ\87ر Ø§Ù\84تصÙ\86Ù\8aÙ\81ات Ø¨Ø¯Ø¡Ø§Ù\8b من:',
+'categoriesfrom' => 'اعرض Ø§Ù\84تصÙ\86Ù\8aÙ\81ات Ø§Ø¨ØªØ¯Ø§Ø¡ من:',
 'special-categories-sort-count' => 'رتب بالعدد',
 'special-categories-sort-abc' => 'رتب هجائياً',
 
@@ -2531,7 +2562,7 @@ $1',
 'activeusers' => 'قائمة المستخدمين النشطين',
 'activeusers-intro' => 'هذه قائمة بالمستخدمين الذين مارسوا نوعاً من النشاط خلال {{PLURAL:$1||اليوم الماضي|اليومين الماضيين|ال$1 أيام الماضية|ال$1 يوماً ماضياً|ال$1 يوم ماضي}}.',
 'activeusers-count' => '{{PLURAL:$1|لا أفعال|فعل واحد|فعلان اثنان|$1 أفعال|$1 فعلاً|$1 فعل}} منذ {{PLURAL:$3||يوم|يومين|$3 أيام|$3 يوماً|$1 يوم}}',
-'activeusers-from' => 'اعرض Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø¨Ø¯Ø¡Ø§Ù\8b من:',
+'activeusers-from' => 'اعرض Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ø¨ØªØ¯Ø§Ø¡ من:',
 'activeusers-hidebots' => 'أخف البوتات',
 'activeusers-hidesysops' => 'أخف الإداريين',
 'activeusers-noresult' => 'لم يعثر على أي مستخدمين',
@@ -2619,6 +2650,7 @@ $1',
 'watchmethod-list' => 'فحص الصفحات المراقبة للتعديلات الحديثة',
 'watchlistcontains' => 'تحتوي قائمة مراقبتك على {{PLURAL:$1|لا صفحات|صفحة واحدة|صفحتان|$1 صفحات|$1 صفحة}}.',
 'iteminvalidname' => "مشكلة في المدخل '$1'، اسم غير صحيح...",
+'wlnote2' => 'فيما يلي تعرض التعديلات التي أجريت في آخر {{PLURAL:$1|ساعة|ساعتين|<strong>$1</strong> ساعات|<strong>$1</strong> ساعة}}، وذلك اعتبارا من $2، $3.',
 'wlshowlast' => 'عرض آخر $1 ساعات $2 أيام $3',
 'watchlist-options' => 'خيارات قائمة المراقبة',
 
@@ -2707,7 +2739,7 @@ $UNWATCHURL
 'delete-warning-toobig' => 'لهذه الصفحة تاريخ تعديل طويل، أكثر من {{PLURAL:$1||مراجعة واحدة|مراجعتين|$1 مراجعات|$1 مراجعة}}.
 قد يؤدي حذفها إلى اضطراب عمليات قاعدة البيانات في {{SITENAME}}؛
 استمر مع الحذر.',
-'deleting-backlinks-warning' => "'''تحذير:''' ترتبط صفحات أخرى بالصفحة التي أنت على وشك حذفها.",
+'deleting-backlinks-warning' => "'''تحذير:''' ترتبط [[Special:WhatLinksHere/{{FULLPAGENAME}}|صفحات أخرى]] بالصفحة التي أنت على وشك حذفها.",
 
 # Rollback
 'rollback' => 'استرجاع التعديلات',
@@ -2742,7 +2774,7 @@ $UNWATCHURL
 'modifiedarticleprotection' => 'غير مستوى حماية "[[$1]]"',
 'unprotectedarticle' => 'أزال الحماية من "[[$1]]"',
 'movedarticleprotection' => 'نقل إعدادات الحماية من "[[$2]]" إلى "[[$1]]"',
-'protect-title' => 'ضبط مستوى حماية "$1"',
+'protect-title' => 'ضبط حماية "$1"',
 'protect-title-notallowed' => 'عرض مستوى حماية "$1"',
 'prot_1movedto2' => 'نُقلت [[$1]] إلى [[$2]]',
 'protect-badnamespace-title' => 'نطاق لا يحمى',
@@ -2891,6 +2923,7 @@ $1',
 'sp-contributions-search' => 'بحث عن مساهمات',
 'sp-contributions-username' => 'عنوان أيبي أو اسم مستخدم:',
 'sp-contributions-toponly' => 'أظهر أعلى المراجعات فقط',
+'sp-contributions-newonly' => 'أظهر إنشاء الصفحات فقط',
 'sp-contributions-submit' => 'بحث',
 
 # What links here
@@ -2990,8 +3023,8 @@ $1',
 'change-blocklink' => 'تغيير المنع',
 'contribslink' => 'مساهمات',
 'emaillink' => 'أرسل بريدا إلكترونيا',
-'autoblocker' => 'تم منعك تلقائياً لأن الأيبي الخاص بك تم استخدامه مؤخراً بواسطة «[[User:$1|$1]]».
-السبب المعطى لمنع $1 هو: «$2»',
+'autoblocker' => 'تم منعك تلقائيا لأن الأيبي الخاص بك تم استخدامه مؤخرا بواسطة "[[User:$1|$1]]".
+السبب المعطى لمنع $1 هو: "$2"',
 'blocklogpage' => 'سجل المنع',
 'blocklog-showlog' => 'سبق منع هذا المستخدم.
 سجل المنع معروض بالأسفل كمرجع:',
@@ -3188,6 +3221,7 @@ $1',
 'allmessages-prefix' => 'رشح حسب البادئة:',
 'allmessages-language' => 'اللغة:',
 'allmessages-filter-submit' => 'اذهب',
+'allmessages-filter-translate' => 'ترجم',
 
 # Thumbnails
 'thumbnail-more' => 'كبّر',
@@ -3204,6 +3238,7 @@ $2',
 'thumbnail_image-type' => 'نوع الصورة غير مدعوم',
 'thumbnail_gd-library' => 'ضبط مكتبة GD غير مكتمل: دالة مفقودة $1',
 'thumbnail_image-missing' => 'الملف يبدو أنه مفقود: $1',
+'thumbnail_image-failure-limit' => 'هناك الكثير من المحاولات الفاشلة مؤخراً ($1 أو أكثر) لتَصْيير هذه الصورة المصغرة. الرجاء المحاولة مرة أخرى لاحقاً.',
 
 # Special:Import
 'import' => 'استيراد صفحات',
@@ -3241,7 +3276,7 @@ $2',
 هناك مجلد مؤقت مفقود.',
 'import-parse-failure' => 'فشل تحليل استيراد XML',
 'import-noarticle' => 'لا صفحة للاستيراد!',
-'import-nonewrevisions' => 'Ù\83Ù\84 Ø§Ù\84Ù\85راجعات ØªÙ\85 Ø§Ø³ØªÙ\8aرادÙ\87ا Ù\85Ù\86 Ù\82بÙ\84.',
+'import-nonewrevisions' => 'Ù\84ا Ù\85راجعات ØªÙ\85 Ø§Ø³ØªÙ\8aرادÙ\87ا (Ù\83Ù\84 Ø§Ù\84Ù\85راجعات Ø¥Ù\85ا Ø£Ù\86Ù\87ا Ù\83اÙ\86ت Ù\85Ù\88جÙ\88دة Ø¨Ø§Ù\84Ù\81عÙ\84Ø\8c Ù\88Ø£Ù\88 ØªÙ\85 ØªØ¬Ø§Ù\88زÙ\87ا Ù\86تÙ\8aجة Ø£Ø®Ø·Ø§Ø¡).',
 'xml-error-string' => '$1 عند السطر $2، العمود $3 (بايت $4): $5',
 'import-upload' => 'رفع بيانات XML',
 'import-token-mismatch' => 'فقد لبيانات الجلسة. من فضلك حاول مرة أخرى.',
@@ -3252,6 +3287,7 @@ $2',
 'import-error-special' => 'صفحة "$1" لم تستورد لأنها تنتمي إلى نطاق خاص يمنع الصفحات.',
 'import-error-invalid' => 'تعذر أستيراد الصفحة "$1" بسبب أن إسمها غير صحيح.',
 'import-error-unserialize' => 'مراجعة  $2  من صفحة " $1 " لا يمكن أن يكون أونسيرياليزيد. وأفيد المراجعة استخدام طراز المحتوى  $3  تسلسل ك  $4 .',
+'import-error-bad-location' => 'المراجعة $2 التي تستخدم نموذج المحتوى $3 لا يمكن تخزينها على "$1" على هذه الويكي، بما أن هذا النموذج غير مدعوم على هذه الصفحة.',
 'import-options-wrong' => 'خطأ {{PLURAL:$2|خيار|خيارات}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'إن عنوان الصفحة الجذر المعطاة هي ذات عنوان غير صالح.',
 'import-rootpage-nosubpage' => 'إن النطاق "$1" لصفحة الجذر لا يسمح بصفحات فرعية.',
@@ -4098,6 +4134,7 @@ $5
 # Separators for various lists, etc.
 'semicolon-separator' => '؛&#32;',
 'comma-separator' => '،&#32;',
+'quotation-marks' => '«$1»',
 
 # Multipage image navigation
 'imgmultipageprev' => '→ الصفحة السابقة',
@@ -4536,7 +4573,7 @@ $5
 'limitreport-ppvisitednodes' => 'زار المعالج عقدة إحصاء',
 'limitreport-ppgeneratednodes' => 'أحدث المعالج عقدة إحصاء',
 'limitreport-postexpandincludesize' => 'بعد توسيع المساحة الشاملة',
-'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|بايت|بايت}}',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|بايت}}',
 'limitreport-templateargumentsize' => 'حجم نقاش القالب',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|بايت}}',
 'limitreport-expansiondepth' => 'أكثر عمق توسعي',
@@ -4546,9 +4583,7 @@ $5
 'expandtemplates' => 'فرد القوالب',
 'expand_templates_intro' => 'تتعامل هذه الصفحة الخاصة مع نصوص الويكي وتقوم بفرد كل القوالب الموجودة به.
 وتقوم أيضا بفرد دوال القوالب مثل
-<nowiki>{{</nowiki>#language:...}}، والمتغيرات مثل
-<nowiki>{{</nowiki>يوم}}-- وتقوم التعامل مع كل ما بين الأقواس المزدوجة.
-تقوم بفعل هذا عن طريق استدعاء المعالج المناسب من الميدياويكي.',
+<code><nowiki>{{</nowiki>#language:…}}</code> and variables like <code><nowiki>{{</nowiki>CURRENTDAY}}</code>. حقيقةً، تقوم التعامل مع كل ما بين الأقواس المزدوجة.',
 'expand_templates_title' => 'عنوان صفحة هذا النص، لأجل معالجة {{FULLPAGENAME}} إلخ.:',
 'expand_templates_input' => 'النص المدخل:',
 'expand_templates_output' => 'النتيجة',
@@ -4561,6 +4596,4 @@ $5
 'expand_templates_generate_rawhtml' => 'أظهر خام HTML',
 'expand_templates_preview' => 'عرض مسبق',
 
-# Unknown messages
-'uploadinvalidxml' => 'تعذر تحليل XML في الملف المرفوع.',
 );
index 3d2810c..e293e45 100644 (file)
@@ -456,7 +456,6 @@ $1',
 'gotaccountlink' => 'ܥܘܠ',
 'userlogin-resetlink' => 'ܐܬܢܫܝܬ ܝܕ̈ܥܬܐ ܕܥܠܠܐ؟',
 'userlogin-resetpassword-link' => 'ܢܫܬ ܡܠܬܐ ܕܥܠܠܐ؟',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ܥܘܕܪܢܐ ܒܥܠܠܐ ܠܚܘܫܒܢܐ]]',
 'createacct-join' => 'ܐܥܠ ܝܕ̈ܥܬܐ ܕܝܠܟ ܠܬܚܬ',
 'createacct-emailrequired' => 'ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
 'createaccountmail' => 'ܐܦܠܚ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܢܝܬܐ ܘܫܕܪ ܠܗ ܥܠ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܬܘܚܡܐ ܠܬܚܬ',
index 31a4121..65b3eaf 100644 (file)
@@ -53,7 +53,6 @@ $messages = array(
 'tog-ccmeonemails' => 'sift liya noskha mn rasaail lbarid lelectroni likansiftha lmostkhdimin lkhrin',
 'tog-diffonly' => 'matbiynch mohtawa sfha tht lforoqat',
 'tog-showhiddencats' => 'biyn tsnifat lmkhfiya',
-'tog-noconvertlink' => 'aattl thwil anwan lwslat',
 'tog-norollbackdiff' => 'hiyd lfrq ila drt istirjaa',
 
 'underline-always' => 'Dima',
@@ -165,7 +164,6 @@ $messages = array(
 'vector-action-protect' => 'Ḫami',
 'vector-action-undelete' => 'rja lhadf',
 'vector-action-unprotect' => 'Ḫiyed l-ḫimaya',
-'vector-simplesearch-preference' => 'ĥddem qṫiraḫaṫ l-bḫṫ l-mḫssna (ġir mĝa Vector)',
 'vector-view-create' => 'Ĥṫareĝ',
 'vector-view-edit' => 'Ĝedel',
 'vector-view-history' => 'Ṫariĥ l-fiċyé',
index c8fc7a4..e374ac1 100644 (file)
@@ -339,7 +339,6 @@ $messages = array(
 'tog-ccmeonemails' => 'ابعتلى  نسخ من رسايل الايميل اللى بابعتها لليوزرز التانيين',
 'tog-diffonly' => 'ما تبين ش محتوى الصفحة تحت الفروقات',
 'tog-showhiddencats' => 'بين التّصنيفات المستخبية',
-'tog-noconvertlink' => 'عطل تحويل عناوين الوصلات',
 'tog-norollbackdiff' => 'الغى الاختلافات بعد ما تعمل الرول باك',
 'tog-useeditwarning' => 'حذّرنى لما اسيب صفحة تعديل فيها تغييرات مش متسييڤه',
 'tog-prefershttps' => 'إستخدم  وصله متأمنه بعد الدخول',
@@ -466,7 +465,6 @@ $messages = array(
 'vector-action-protect' => 'حمايه',
 'vector-action-undelete' => 'الغى المسح',
 'vector-action-unprotect' => 'غير الحمايه',
-'vector-simplesearch-preference' => ' تشغيل شريط التدوير  المبسط (لمظهر فيكتور بس)',
 'vector-view-create' => 'اعمل',
 'vector-view-edit' => 'تعديل',
 'vector-view-history' => 'استعراض التاريخ',
@@ -1104,8 +1102,6 @@ $2',
 'revdelete-show-file-submit' => 'ايوه',
 'revdelete-selected' => "'''{{PLURAL:$2|المراجعه المختاره|المراجعات المختاره}} بتاعة [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|حدث السجل المختار|أحداث السجل المختارة}}:'''",
-'revdelete-text' => "'''المراجعات و الاحداث الممسوحه ح تنيها تظهر فى تاريخ الصفحه و فى السجلات, بس فى اجزاء من محتواها مش ح تبقا متاحه لكل الناس .'''
-الاداريين التانيين فى  {{SITENAME}} ح يقدرو يوصول للمحتوى المخفىو كمان ممكن يرجعو المسح عن طريق نفس الواجه دى ، الا اذا اتحطت قيود اضافيه.",
 'revdelete-confirm' => 'لو سمحت اتأكدد انك ناوى تعمل كدا, و انك فاهم اللى ح يترتب على كدا, و انك بتعمل كدا بالتوافق مع مع [[{{MediaWiki:Policy-url}}|السياسه]].',
 'revdelete-suppress-text' => "الكبت لازم ييتعمل '''بس''' فى الحالات دى:
 * معلومات شخصيه مش مناسبه
index 2a609bb..3ea47ef 100644 (file)
@@ -344,7 +344,6 @@ $messages = array(
 'vector-action-protect' => 'সুৰক্ষিত কৰক',
 'vector-action-undelete' => 'পুনৰুদ্ধাৰ কৰক',
 'vector-action-unprotect' => 'সুৰক্ষা সলনি কৰক',
-'vector-simplesearch-preference' => 'সৰল সন্ধান দণ্ডিকা সক্ৰিয় কৰক (ভেক্টৰ স্কিনৰ বাবেহে)',
 'vector-view-create' => 'সৃষ্টি কৰক',
 'vector-view-edit' => 'সম্পাদনা',
 'vector-view-history' => 'ইতিহাস চাওক',
@@ -554,7 +553,7 @@ $1',
 'actionthrottled' => 'কাৰ্য লেহেম কৰা হৈছে',
 'actionthrottledtext' => 'স্পাম ৰোধ কৰিবলৈ এই ক্ৰিয়াতো কম সময়ৰ ভিতৰত বহু বেছি বাৰ কৰাতো ৰোধ কৰা হৈছে, আৰু আপুনি ইতিমধ্যে সেই সীমা অতিক্ৰম কৰিলে।
 অনুগ্ৰহ কৰি কিছু সময় পাছত চেষ্টা কৰক।',
-'protectedpagetext' => 'সমà§\8dপাদনা à§°à§\8bধ à¦\95ৰিবলà§\88 à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন সুৰক্ষিত কৰা হৈছে।',
+'protectedpagetext' => 'সমà§\8dপাদনা à§°à§\8bধ à¦\95ৰিবলà§\88 à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b সুৰক্ষিত কৰা হৈছে।',
 'viewsourcetext' => 'আপুনি এই পৃষ্ঠাটোৰ উৎস চাব আৰু নকল কৰিব পাৰে',
 'viewyourtext' => "আপুনি '''আপোনাৰ সম্পাদনাসমূহ'''ৰ উৎস চাব আৰু এই পৃষ্ঠালৈ নকল কৰিব পাৰে:",
 'protectedinterface' => 'এই পৃষ্ঠাই ৱিকি ছফ্টৱেৰৰ ইণ্টাৰফে’চ বাৰ্তা প্ৰদান কৰে আৰু ইয়াক সুৰক্ষিত কৰি ৰখা হৈছে।
@@ -562,7 +561,7 @@ $1',
 'editinginterface' => "'''সাৱধানবাণী:''' আপুনি যিখন পৃষ্ঠা সম্পাদনা কৰিছে সেইখন এই ছফ্টৱেৰৰ ইণ্টাৰফে’চ বাৰ্তা দিবলৈ ব্যৱহাৰ হয়।
 এই পৃষ্ঠাৰ সাল-সলনিয়ে আন ব্যৱহাৰকাৰীৰ বাবে ইণ্টাৰফে’চত প্ৰভাৱ পেলাব।
 সকলো ৱিকিৰ বাবে অনুবাদৰ বাবে অনুগ্ৰহ কৰি মিডিয়াৱিকি স্থানীয়কৰণ প্ৰকল্প [//translatewiki.net/ translatewiki.net] ব্যৱহাৰ কৰক ।",
-'cascadeprotected' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন সম্পাদনাৰ পৰা সুৰক্ষিত কাৰণ এই {{PLURAL:$1|পৃষ্ঠা, যিটো|পৃষ্ঠা, যিবোৰ}} "প্ৰপাতাকাৰ" (cascading) বিকল্পৰ সহযোগত সুৰক্ষিত কৰা হৈছে: 
+'cascadeprotected' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b সম্পাদনাৰ পৰা সুৰক্ষিত কাৰণ এই {{PLURAL:$1|পৃষ্ঠা, যিটো|পৃষ্ঠা, যিবোৰ}} "প্ৰপাতাকাৰ" (cascading) বিকল্পৰ সহযোগত সুৰক্ষিত কৰা হৈছে: 
 $2',
 'namespaceprotected' => "আপোনাৰ '''$1''' নামস্থানৰ পৃষ্ঠাসমূহ সম্পাদনা কৰাৰ অধিকাৰ নাই।",
 'customcssprotected' => 'এই CSS পৃষ্ঠা সম্পাদনা কৰাৰ অধিকাৰ আপোনাৰ নাই, কাৰণ ইয়াত আন সদস্যৰ ব্যক্তিগত পছন্দসমূহত আছে ।',
@@ -629,8 +628,6 @@ $2',
 'gotaccountlink' => 'প্ৰৱেশ',
 'userlogin-resetlink' => 'আপোনাৰ প্ৰৱেশ তথ্য পাহৰিছে?',
 'userlogin-resetpassword-link' => 'আপোনাৰ গুপ্তশব্দ পাহৰিছে?',
-'helplogin-url' => 'Help:প্ৰৱেশ/লগ্‌-ইন',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|প্ৰৱেশ সম্পৰ্কীয় সাহায্য]]',
 'userlogin-loggedin' => 'আপুনি ইতিমধ্যে {{GENDER:$1|$1}} হিচাপে প্ৰৱেশ কৰিছে। তলৰ আন সদস্যৰূপে প্ৰৱেশ কৰিবলৈ তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰক।',
 'userlogin-createanother' => 'আন এটা একাউণ্ট সৃষ্টি কৰক',
 'createacct-join' => 'আপোনাৰ তথ্যসমূহ তলত লিখক।',
@@ -949,11 +946,11 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 কোনো আসোঁৱাহপূৰ্ণ ৱেব-ভিত্তিক বেনামী প্ৰক্সী সেৱা ব্যৱহাৰ কৰিলে এনে হ’ব পাৰে ।",
 'edit_form_incomplete' => "'''এই সম্পাদনাৰ কিছু অংশ চাৰ্ভাৰলৈ নগ’ল; আপোনাৰ সম্পাদনা ঠিকে আছেনে পৰীক্ষা কৰি পুনৰ চেষ্টা কৰক ।'''",
 'editing' => '$1 সম্পাদনা',
-'creating' => '$1 à¦ªà§\83ষà§\8dঠাà¦\96ন আপুনি সৃষ্টি কৰি আছে',
+'creating' => '$1 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b আপুনি সৃষ্টি কৰি আছে',
 'editingsection' => '$1 (অনুচ্ছেদ) সম্পাদনা কৰি আছে',
 'editingcomment' => '$1 (নতুন অনুচ্ছেদ) সম্পাদনা কৰি আছে',
 'editconflict' => 'সম্পাদনা দ্বন্দ্ব: $1',
-'explainconflict' => "à¦\86পà§\81নি à¦¸à¦®à§\8dপাদনা à¦\86ৰমà§\8dভ à¦\95ৰাৰ à¦ªà¦¾à¦\9bত à¦\86ন à¦\95à§\8bনà§\8bবাà¦\87 à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন সলনি কৰিলে।
+'explainconflict' => "à¦\86পà§\81নি à¦¸à¦®à§\8dপাদনা à¦\86ৰমà§\8dভ à¦\95ৰাৰ à¦ªà¦¾à¦\9bত à¦\86ন à¦\95à§\8bনà§\8bবাà¦\87 à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b সলনি কৰিলে।
 পাঠ্য-স্থানৰ উপৰ ভাগত এই পৃষ্ঠাৰ প্ৰচলিত পাঠ্য দিয়া হৈছে।
 আপোনাৰ সলনিসমূহ পাঠ্য-স্থানৰ তলৰ ভাগত দেখুওৱা হৈছে।
 আপুনি আপোনাৰ সালসলনিসমূহ প্ৰচলিত পাঠ্যত অন্তৰ্ভুক্ত কৰিব পাৰে।
@@ -985,9 +982,9 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 আপোনাৰ সুবিধাৰ বাবে পৃষ্ঠাৰ সাম্প্ৰতিক ল'গ সংৰক্ষণ তলত দিয়া হ'ল ।",
 'semiprotectedpagewarning' => "টোকা: এই পৃষ্ঠা বন্ধ ৰখা হৈছে; কেৱল পঞ্জীভূত সদস্যই হে সম্পাদনা কৰিব পাৰিব ।
 আপোনাৰ সুবিধাৰ বাবে পৃষ্ঠাৰ সাম্প্ৰতিক ল'গ সংৰক্ষণ তলত দিয়া হ'ল ।",
-'cascadeprotectedwarning' => "'''সতৰà§\8dà¦\95বাণà§\80:''' à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন à¦¸à§\81ৰà¦\95à§\8dষিত à¦\95ৰি à§°à¦\96া à¦¹à§\88à¦\9bà§\87 à¦¯à¦¾à¦¤à§\87 à¦\95à§\87ৱল à¦ªà§\8dৰশাসনিà¦\95 à¦\95à§\8dষমতা à¦¥à¦\95া à¦¸à¦¦à¦¸à§\8dযà¦\87 à¦\87য়াà¦\95 à¦¸à¦®à§\8dপাদনা à¦\95ৰিব à¦ªà¦¾à§°à§\87, à¦\95াৰণ à¦\87 à¦ªà§\8dৰপাতাà¦\95াৰ-সà§\81ৰà¦\95à§\8dষিত  {{PLURAL:$1|পà§\83ষà§\8dঠাà¦\96নৰ|পৃষ্ঠাবোৰৰ}} অন্তৰ্ভুক্ত:",
-'titleprotectedwarning' => "'''সতৰà§\8dà¦\95বাণà§\80: à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন সুৰক্ষিত কৰা হৈছে যাতে কেৱল [[Special:ListGroupRights|specific rights]] সদস্যই ইয়াক তৈয়াৰ কৰিব পাৰে ।'''
-à¦\86পà§\8bনাৰ à¦¸à§\81বিধাৰà§\8dথà§\87 à¦²à¦\97ৰ à¦¶à§\87হতà§\80য়া à¦­à§°à§\8dতি à¦¤à¦²à¦¤ à¦¦à¦¿à¦¯à¦¼à¦¾ à¦¹â\80\99ল ।",
+'cascadeprotectedwarning' => "'''সতৰà§\8dà¦\95বাণà§\80:''' à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b à¦¸à§\81ৰà¦\95à§\8dষিত à¦\95ৰি à§°à¦\96া à¦¹à§\88à¦\9bà§\87 à¦¯à¦¾à¦¤à§\87 à¦\95à§\87ৱল à¦ªà§\8dৰশাসনিà¦\95 à¦\95à§\8dষমতা à¦¥à¦\95া à¦¸à¦¦à¦¸à§\8dযà¦\87 à¦\87য়াà¦\95 à¦¸à¦®à§\8dপাদনা à¦\95ৰিব à¦ªà¦¾à§°à§\87, à¦\95াৰণ à¦\87 à¦ªà§\8dৰপাতাà¦\95াৰ-সà§\81ৰà¦\95à§\8dষিত  {{PLURAL:$1|পà§\83ষà§\8dঠাà¦\9fà§\8bৰ|পৃষ্ঠাবোৰৰ}} অন্তৰ্ভুক্ত:",
+'titleprotectedwarning' => "'''সতৰà§\8dà¦\95বাণà§\80: à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b সুৰক্ষিত কৰা হৈছে যাতে কেৱল [[Special:ListGroupRights|specific rights]] সদস্যই ইয়াক তৈয়াৰ কৰিব পাৰে ।'''
+à¦\86পà§\8bনাৰ à¦¸à§\81বিধাৰà§\8dথà§\87 à¦\85ভিলà§\87à¦\96ৰ à¦¶à§\87হতà§\80য়া à¦­à§°à§\8dতি à¦¤à¦²à¦¤ à¦¦à¦¿à¦¯à¦¼à¦¾ à¦¹â\80\99ল।",
 'templatesused' => 'এই পৃষ্ঠাত ব্যৱহৃত {{PLURAL:$1|সাঁচ|সাঁচ সমূহ}}:',
 'templatesusedpreview' => 'এই খচৰাত ব্যৱহৃত {{PLURAL:$1|সাঁচ|সাঁচ সমূহ}}:',
 'templatesusedsection' => 'এই দফাত ব্যৱহৃত {{PLURAL:$1|সাঁচ|সাঁচ সমূহ}}:',
@@ -1144,8 +1141,6 @@ $3 য়ে আগবঢ়োৱা ইয়াৰ কাৰণ হৈছে
 'revdelete-show-file-submit' => 'হয়',
 'revdelete-selected' => "'''[[:$1]]-ৰ {{PLURAL:$2|নিৰ্বাচিত সংশোধন|নিৰ্বাচিত সংশোধনসমূহ}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|টা নিৰ্বাচিত ল’গ ভৰ্তি|টা নিৰ্বাচিত ল’গ ভৰ্তি}}:'''",
-'revdelete-text' => "'''বিলোপ কৰা সংশোধনবোৰ আৰু ঘটনাবোৰ পৃষ্ঠাৰ ইতিহাস আৰু ল’গত পোৱা যাব, কিন্তু তাৰ কিছু অংশ সৰ্বসাধাৰণৰ বাবে মুকলি নহ’ব ।''' 
-{{SITENAME}} ৰ অন্য প্ৰশাসকসকলে তথাপিও লুকুৱাই থোৱা বিষয়বস্তু দেখা পাব আৰু কোনো সীমাবদ্ধতা নাথাকিলে একেটা ইণ্টাৰফে’চৰ জৰিয়তে ইয়াক পুনৰুদ্ধাৰ কৰিব পাৰিব ।",
 'revdelete-confirm' => 'অনুগ্ৰহ কৰি সাব্যস্ত কৰক যে আপুনি ইয়াৰ পৰিণাম বুজি আৰু [[{{MediaWiki:Policy-url}}|the policy]] ৰ সৈতে সহমত হৈ এই কামটো কৰিব বিচাৰিছে |',
 'revdelete-suppress-text' => "নিবাৰণ '''কেৱল''' তলত দিয়া কাৰণসমূহত ব্যৱহৃত হ’ব:
 * সম্ভাব্য ক্ষতিকাৰক তথ্য 
@@ -1215,7 +1210,7 @@ $1",
 'mergehistory-submit' => 'সংস্কৰণসমূহ মিলাই দিয়ক',
 'mergehistory-empty' => 'কোনো সংস্কৰণ একত্ৰিত কৰিব নোৱাৰি ।',
 'mergehistory-success' => '[[:$1]] ৰ $3 {{PLURAL:$3| টা সংশোধন|টা সংশোধন}}  [[:$2]] ৰ লগত সফলতাৰে একত্ৰিত কৰা হ’ল ।',
-'mergehistory-fail' => 'ইতিহাস একত্ৰিত কৰিব পৰা নগ’ল । অনুগ্ৰহ কৰি পৃষ্ঠাখন আৰু সময়ৰ পাৰামিটাৰ পুনৰ পৰীক্ষা কৰক ।',
+'mergehistory-fail' => 'ইতিহাস একত্ৰিত কৰিব পৰা নগ’ল। অনুগ্ৰহ কৰি পৃষ্ঠাটো আৰু সময়ৰ পাৰামিটাৰ পুনৰ পৰীক্ষা কৰক।',
 'mergehistory-no-source' => '$1 নামৰ কোনো উৎস পৃষ্ঠৰ অস্তিত্ব নাই ।',
 'mergehistory-no-destination' => '$1 নামৰ কোনো গন্তব্য পৃষ্ঠাৰ অস্তিত্ব নাই ।',
 'mergehistory-invalid-source' => 'উৎস পৃষ্ঠাৰ অৱশ্যেই বৈধ শিৰোনামা থাকিব লাগিব ।',
@@ -1265,7 +1260,7 @@ $1",
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) চাওক।',
 'searchmenu-exists' => "'''এই ৱিকিত \"[[:\$1]]\" নামৰ এটা পৃষ্ঠা আছে।'''
 {{PLURAL:\$2|0=|আন সন্ধান ফলাফলবোৰ চাওক।}}",
-'searchmenu-new' => '<strong>à¦\8fà¦\87 à§±à¦¿à¦\95িত "[[:$1]]" à¦ªà§\83ষà§\8dঠাà¦\96ন সৃষ্টি কৰক!</strong> 
+'searchmenu-new' => '<strong>à¦\8fà¦\87 à§±à¦¿à¦\95িত "[[:$1]]" à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b সৃষ্টি কৰক!</strong> 
 {{PLURAL:$2|0=|আপোনাৰ সন্ধানত পোৱা পৃষ্ঠাবোৰো চাওক।|সন্ধান ফলাফলসমূহো চাওক।}}',
 'searchprofile-articles' => 'বিষয়বস্তুৰ পৃষ্ঠা',
 'searchprofile-project' => 'সহায় আৰু প্ৰকল্প পৃষ্ঠাসমূহ',
@@ -1505,7 +1500,7 @@ $1",
 'right-deletedhistory' => 'বিলোপ কৰা ইতিহাসৰ ভৰ্তি সংশ্লিষ্ট লেখা অবিহনে চাওক',
 'right-deletedtext' => 'বিলোপ কৰা লেখা আৰু বিলোপ কৰা সংশোধনসমূহৰ মাজত হোৱা সালসলনি চাওক',
 'right-browsearchive' => 'বিলোপ কৰা পৃষ্ঠা অনুসন্ধান কৰক',
-'right-undelete' => 'পà§\83ষà§\8dঠাà¦\96ন পুনৰুদ্ধাৰ কৰক',
+'right-undelete' => 'পà§\83ষà§\8dঠাà¦\9fà§\8b পুনৰুদ্ধাৰ কৰক',
 'right-suppressrevision' => 'প্ৰশাসকৰ পৰা লুকুৱাই ৰখা সংশোধনসমূহ পুনৰ্নিৰীক্ষণ কৰি আগৰ ঠাইলৈ পঠিয়াওক',
 'right-suppressionlog' => "ব্যক্তিগত ল'গবোৰ চাওক",
 'right-block' => 'আন সদস্যক সম্পাদনা কৰাৰ পৰা বাৰণ কৰক',
@@ -2078,8 +2073,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'nmemberschanged' => '$1 → $2 {{PLURAL:$2|জন সদস্য}}',
 'nrevisions' => '$1টা {{PLURAL:$1|সংশোধন|সংশোধন}}',
 'nviews' => '$1 {{PLURAL:$1|টা দৰ্শন|টা দৰ্শন}}',
-'nimagelinks' => '$1 {{PLURAL:$1|à¦\96ন à¦ªà§\83ষà§\8dঠাত|à¦\96ন পৃষ্ঠাত}} ব্যৱহৃত',
-'ntransclusions' => '$1 {{PLURAL:$1|à¦\96ন à¦ªà§\83ষà§\8dঠাত|à¦\96ন পৃষ্ঠাত}} ব্যৱহৃত',
+'nimagelinks' => '$1 {{PLURAL:$1|à¦\9fা পৃষ্ঠাত}} ব্যৱহৃত',
+'ntransclusions' => '$1 {{PLURAL:$1|à¦\9fা পৃষ্ঠাত}} ব্যৱহৃত',
 'specialpage-empty' => 'এই বিৱৰণৰ কোনো ফলাফল নাই ।',
 'lonelypages' => 'অনাথ পৃষ্ঠা',
 'lonelypagestext' => 'তলৰ পৃষ্ঠাসমূহ {{SITENAME}}ৰ কোনো পৃষ্ঠাৰ লগত সংযোগকৃত নহয় ।',
@@ -2139,7 +2134,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'pager-newer-n' => '{{PLURAL:$1|নতুনতৰ ১টি|নতুনতৰ $1টি}}',
 'pager-older-n' => '{{PLURAL:$1|পুৰণতৰ ১|পুৰণতৰ $1}}',
 'suppress' => 'অমনোযোগ',
-'querypage-disabled' => 'à¦\95াৰà§\8dযà§\8dযà¦\97ত à¦\95াৰণত à¦\8fà¦\87 à¦¬à¦¿à¦¶à§\87ষ à¦ªà§\83ষà§\8dঠাà¦\96ন à¦¨à¦¿à¦·à§\8dà¦\95à§\8dৰিয় à¦\95ৰা à¦¹à§\88à¦\9bà§\87 ।',
+'querypage-disabled' => 'à¦\95াৰà§\8dযà§\8dযà¦\97ত à¦\95াৰণত à¦\8fà¦\87 à¦¬à¦¿à¦¶à§\87ষ à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b à¦¨à¦¿à¦·à§\8dà¦\95à§\8dৰিয় à¦\95ৰা à¦¹à§\88à¦\9bà§\87।',
 
 # Book sources
 'booksources' => 'গ্ৰন্থৰ উৎস সমূহ',
@@ -2285,7 +2280,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'watchnologin' => 'প্ৰৱেশ কৰা নাই',
 'watchnologintext' => 'নিৰীক্ষণ তালিকা পৰিৱৰ্তন কৰিবলৈ আপুনি আগতে [[Special:UserLogin|প্ৰৱেশ]] কৰিব লাগিব ।',
 'addwatch' => 'লক্ষ্য-তালিকাত অন্তৰ্ভুক্ত কৰক',
-'addedwatchtext' => 'à¦\86পà§\8bনাৰ [[Special:Watchlist|লà¦\95à§\8dষà§\8dয à¦¤à¦¾à¦²à¦¿à¦\95াত ]] "[[:$1]]" à¦ªà§\83ষà§\8dঠাà¦\96ন অন্তৰ্ভুক্ত কৰা হ\'ল।
+'addedwatchtext' => 'à¦\86পà§\8bনাৰ [[Special:Watchlist|লà¦\95à§\8dষà§\8dয à¦¤à¦¾à¦²à¦¿à¦\95াত ]] "[[:$1]]" à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b অন্তৰ্ভুক্ত কৰা হ\'ল।
 ভৱিষ্যতে এই পৃষ্ঠা বা ইয়াৰ আলোচনা পৃষ্ঠাত হোৱা সাল-সলনি আপুনি আপোনাৰ লক্ষ্য তালিকাত দেখিব।',
 'removewatch' => 'লক্ষ্য-তালিকাৰ পৰা আঁতৰাওক',
 'removedwatchtext' => '"[[:$1]]" পৃষ্ঠাটো [[Special:Watchlist|আপোনাৰ লক্ষ্য-তালিকা]]ৰ পৰা আঁতৰোৱা হৈছে ।',
@@ -2300,7 +2295,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'wlheader-showupdated' => "আপোনাৰ শেষ পৰিদৰ্শনৰ পিছত সলনি হোৱা পৃষ্ঠাসমূহ '''গাঢ়''' আখৰত দেখুওৱা হৈছে।",
 'watchmethod-recent' => 'লক্ষ্য কৰা পৃষ্ঠাসমূহ শেহতীয়া সম্পাদনাৰ বাবে পৰীক্ষা কৰা হৈছে',
 'watchmethod-list' => 'লক্ষ্য কৰা পৃষ্ঠাসমূহ শেহতীয়া সম্পাদনাৰ বাবে পৰীক্ষা কৰা হৈছে',
-'watchlistcontains' => 'আপোনাৰ লক্ষ্য-তালিকাত $1 খন {{PLURAL:$1|পৃষ্ঠা|পৃষ্ঠা}} আছে ।',
+'watchlistcontains' => 'আপোনাৰ লক্ষ্য-তালিকাত $1টা {{PLURAL:$1|পৃষ্ঠা}} আছে ।',
 'iteminvalidname' => "'$1' আইটেমটোৰ লগত সমস্যা হৈছে, অবৈধ নাম...",
 'wlshowlast' => 'যোৱা $1 ঘণ্টা $2 দিন $3 চাওক',
 'watchlist-options' => 'লক্ষ্য-তালিকা পছন্দসমূহ',
@@ -2400,14 +2395,14 @@ $UNWATCHURL
 'rollbackfailed' => 'পূৰ্ববৎ ব্যৰ্থ',
 'cantrollback' => 'পূৰ্বৰ অৱস্থালৈ ঘূৰাই নিব নোৱাৰি;
 শেষৰ সম্পাদকজন এই পৃষ্ঠাৰ একমাত্ৰ লেখক ।',
-'alreadyrolled' => "[[User:$2|$2]] ([[User talk:$2|à¦\86লà§\8bà¦\9aনা]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])à¦\8f à¦\95ৰা [[:$1]]ৰ à¦¶à§\87ষ à¦¸à¦®à§\8dপাদনা à¦ªà§\82ৰà§\8dবাৱসà§\8dথালà§\88 à¦\98à§\82ৰাà¦\87 à¦¨à¦¿à¦¬ à¦¨à§\8bৱাৰি; à¦\95à§\8bনà§\8bবাà¦\87 à¦\87তিমধà§\8dযà§\87 à¦ªà§\83ষà§\8dঠাà¦\96ন সম্পাদনা বা ৰ'লবেক কৰিছে ।
+'alreadyrolled' => "[[User:$2|$2]] ([[User talk:$2|à¦\86লà§\8bà¦\9aনা]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])à¦\8f à¦\95ৰা [[:$1]]ৰ à¦¶à§\87ষ à¦¸à¦®à§\8dপাদনা à¦ªà§\82ৰà§\8dবাৱসà§\8dথালà§\88 à¦\98à§\82ৰাà¦\87 à¦¨à¦¿à¦¬ à¦¨à§\8bৱাৰি; à¦\95à§\8bনà§\8bবাà¦\87 à¦\87তিমধà§\8dযà§\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b সম্পাদনা বা ৰ'লবেক কৰিছে ।
 
 [[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' => 'এজন গোপন ব্যৱহাৰকাৰীয়ে কৰা সম্পাদনা {{GENDER:$1|[[User:$1|$1]]}}-য়ে কৰা শেষ সংশোধনীলৈ ঘূৰাই নিয়া হৈছে।',
 'rollback-success' => '$1 ৰ সম্পাদনাসমূহ পূৰ্বৰ অৱস্থালৈ ঘূৰাই নিয়া হৈছে;
-পà§\83ষà§\8dঠাà¦\96ন $2 য়ে কৰা শেষ সংশোধনীলৈ ঘূৰাই নিয়া হৈছে ।',
+পà§\83ষà§\8dঠাà¦\9fà§\8b $2 য়ে কৰা শেষ সংশোধনীলৈ ঘূৰাই নিয়া হৈছে ।',
 
 # Edit tokens
 'sessionfailure-title' => 'ছেছন বিফল',
@@ -2428,7 +2423,7 @@ $UNWATCHURL
 'prot_1movedto2' => '$1 ক $2 লৈ স্থানান্তৰিত কৰা হল',
 'protect-badnamespace-title' => 'অসুৰক্ষিত নামস্থান',
 'protect-badnamespace-text' => 'এই নামস্থানৰ পৃষ্ঠাসমূহ সুৰক্ষিত কৰিব নোৱাৰি।',
-'protect-norestrictiontypes-text' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন সুৰক্ষিত কৰিব নোৱাৰি কাৰণ কোনো বাধা প্ৰকাৰ নাই।',
+'protect-norestrictiontypes-text' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b সুৰক্ষিত কৰিব নোৱাৰি কাৰণ কোনো বাধা প্ৰকাৰ নাই।',
 'protect-norestrictiontypes-title' => 'সুৰক্ষা প্ৰযোজ্য নোহোৱা পৃষ্ঠা',
 'protect-legend' => 'সুৰক্ষা নিশ্চিত কৰক',
 'protectcomment' => 'কাৰণ:',
@@ -2443,7 +2438,7 @@ $UNWATCHURL
 '''$1''' পৃষ্ঠাৰ বৰ্তমান ছেটিং সমূহ ইয়াত দিয়া হ’ল:",
 'protect-locked-access' => "এই পৃষ্ঠাটোৰ সুৰক্ষা-স্তৰ সলনি কৰাৰ অনুমতি আপোনাক দিয়া হোৱা নাই ।
 '''$1''' পৃষ্ঠাখনৰ সুৰক্ষা-স্তৰৰ গাঁথনি ইয়াত আছে:",
-'protect-cascadeon' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন বৰ্তমান সুৰক্ষিত কাৰণ ই {{PLURAL:$1|খন পৃষ্ঠাৰ|খন পৃষ্ঠাৰ}} অন্তৰ্গত য’ত প্ৰপাতাকাৰ সুৰক্ষা সক্ৰিয় ।
+'protect-cascadeon' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b বৰ্তমান সুৰক্ষিত কাৰণ ই {{PLURAL:$1|খন পৃষ্ঠাৰ|খন পৃষ্ঠাৰ}} অন্তৰ্গত য’ত প্ৰপাতাকাৰ সুৰক্ষা সক্ৰিয় ।
 আপুনি এই পৃষ্ঠাৰ সুৰক্ষা স্তৰ সলাব পাৰে কিন্তু সি প্ৰপাতাকাৰ সুৰক্ষাত কোনো প্ৰভাৱ নেপেলায ।',
 'protect-default' => 'সকলো ব্যৱহাৰকাৰীৰ বাবে',
 'protect-fallback' => 'কেৱল "$1" অনুমতি থকা ব্যৱহাৰকাৰীকহে সুযোগ দিয়া হয়',
@@ -2489,17 +2484,17 @@ $UNWATCHURL
 'undeletepage' => 'বিলোপ কৰা পৃষ্ঠাসমূহ চাওক আৰু পুনৰুদ্ধাৰ কৰক',
 'undeletepagetitle' => "'''ইয়াত [[:$1|$1]]ৰ বিলোপ কৰা সংশোধনসমূহ পাব''' ।",
 'viewdeletedpage' => 'বিলোপ কৰা পৃষ্ঠাসমূহ চাওক',
-'undeletepagetext' => 'তলৰ {{PLURAL:$1|পà§\83ষà§\8dঠাà¦\96ন বিলোপ কৰা হৈছে কিন্তু সেয়া|$1 পৃষ্ঠাসমূহ বিলোপ কৰা হৈছে কিন্তু সেয়া}} এতিয়াও আৰ্কাইভত আছে আৰু পুনৰুদ্ধাৰ সম্ভৱ ।
+'undeletepagetext' => 'তলৰ {{PLURAL:$1|পà§\83ষà§\8dঠাà¦\9fà§\8b বিলোপ কৰা হৈছে কিন্তু সেয়া|$1 পৃষ্ঠাসমূহ বিলোপ কৰা হৈছে কিন্তু সেয়া}} এতিয়াও আৰ্কাইভত আছে আৰু পুনৰুদ্ধাৰ সম্ভৱ ।
 আৰ্কাইভটো সময়ে সময়ে পৰিষ্কাৰ কৰা হ’ব পাৰে ।',
 'undelete-fieldset-title' => 'সংশোধনসমূহ পুনৰুদ্ধাৰ কৰক',
 'undeleteextrahelp' => "পৃষ্ঠাখনৰ সম্পূৰ্ণ ইতিহাস পুনৰুদ্ধাৰ কৰিবলৈ সকলো ঘৰ টিক দিয়ক ৰাখক আৰু '''''{{int:undeletebtn}}'''''ত ক্লিক কৰক ।
 নিৰ্বাচিত পুনৰুদ্ধাৰ কৰিবলৈ বাছি লোৱা সংশোধনসমূহৰ কাষত থকা ঘৰবোৰত টিক দিয়ক আৰু '''''{{int:undeletebtn}}'''''ত ক্লিক কৰক ।",
 'undeleterevisions' => '$1 {{PLURAL:$1|টা সংশোধন|টা সংশোধন}} আৰ্কাইভত আছে',
-'undeletehistory' => 'যদি à¦\86পà§\81নি à¦ªà§\83ষà§\8dঠাà¦\96ন পুনৰুদ্ধাৰ কৰে, তাৰ সকলো সংশোধন ইতিহাসলৈ ঘূৰি যাব ।
+'undeletehistory' => 'যদি à¦\86পà§\81নি à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b পুনৰুদ্ধাৰ কৰে, তাৰ সকলো সংশোধন ইতিহাসলৈ ঘূৰি যাব ।
 যদি বিলোপৰ পিছত একে নামৰ নতুন পৃষ্ঠা সৃষ্টি কৰা হৈছে, তেন্তে পুনৰুদ্ধাৰ হোৱা সংশোধনসমূহ পূৰ্বৰ ইতিহাসত দেখা যাব ।',
 'undeleterevdel' => 'শীৰ্ষ পৃষ্ঠা বা ফাইল সংশোধন আংশিকভাৱে বিলোপ হোৱাৰ সম্ভাৱনা থাকিলে বিলোপ বাতিল কৰা নহ’ব ।
 তেনে ক্ষেত্ৰত আপুনি নতুনকৈ বিলোপ কৰা সংশোধন অনিৰ্বাচিত আৰু অগোপন কৰক ।',
-'undeletehistorynoadmin' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন বিলোপ কৰা হৈছে ।
+'undeletehistorynoadmin' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b বিলোপ কৰা হৈছে ।
 অৱলুপিৰ কাৰণ তলত দিয়া হ’ল । অৱলুপ্তিৰ আগতে যিজন সদস্যই ইয়াৰ সম্পাদনা কৰিছিল তেওঁৰো সবিশেষ তলত দিয়া হ’ল ।
 বিলোপ কৰা সংশোধনসমূহৰ প্ৰকৃত পাঠ কেৱল প্ৰশাসকেহে দেখা পাব ।',
 'undelete-revision' => '$3-এ কৰা $1ৰ সংশোধন ($4 তাৰিখ, $5 সময়ৰ) বিলোপ কৰা হৈছে:',
@@ -2740,7 +2735,7 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 
 # Move page
 'move-page' => '$1 স্থানান্তৰ কৰক',
-'move-page-legend' => 'পà§\83ষà§\8dঠাà¦\96ন স্থানান্তৰ কৰক',
+'move-page-legend' => 'পà§\83ষà§\8dঠাà¦\9fà§\8b স্থানান্তৰ কৰক',
 'movepagetext' => "তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰিলে এই পৃষ্ঠাৰ শিৰোনাম সলনি হ'ব, লগতে সমগ্ৰ ইতিহাস নতুন শিৰোনামলৈ স্থানান্তৰ কৰা হ'ব।
 পুৰণা শিৰোনামটো নতুন শিৰোনামালৈ এটা পুনৰ্নিৰ্দেশনা হৈ ৰ'ব।
 পুৰণা শিৰোনামলৈ পোনাৱা পুনৰ্নিৰ্দেশনাসমূহ আপুনি স্বয়ংক্ৰিয়ভাৱে আপডে'ট কৰিব পাৰিব।
@@ -2777,8 +2772,8 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 'cant-move-user-page' => 'সদস্য পৃষ্ঠা স্থানান্তৰ কৰিবলৈ আপুনাৰ অনুমতি নাই (উপ-পৃষ্ঠাৰ বাহিৰে)।',
 'cant-move-to-user-page' => 'সদস্যপৃষ্ঠালৈ কোনো পৃষ্ঠা স্থানান্তৰ কৰাৰ অনুমতি আপোনাৰ নাই (কেৱল সদস্য উপপৃষ্ঠাৰ বাহিৰে ) ।',
 'newtitle' => 'নতুন শিৰোনামালৈ:',
-'move-watch' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন লক্ষ্য কৰক',
-'movepagebtn' => 'পà§\83ষà§\8dঠাà¦\96ন স্থানান্তৰ কৰক',
+'move-watch' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b লক্ষ্য কৰক',
+'movepagebtn' => 'পà§\83ষà§\8dঠাà¦\9fà§\8b স্থানান্তৰ কৰক',
 'pagemovedsub' => 'স্থানান্তৰ সফল হ’ল',
 'movepage-moved' => "'''“$1”ক “$2”লৈ স্থানান্তৰ কৰা হৈছে'''",
 'movepage-moved-redirect' => 'এটি পুনৰ্নিদেশনা সৃষ্টি কৰা হৈছে',
@@ -2790,13 +2785,13 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 'move-subpages' => 'উপ-পৃষ্ঠাসমূহ স্থানান্তৰ কৰক ($1লৈ)',
 'move-talk-subpages' => 'আলোচনা পৃষ্ঠাৰ উপ-পৃষ্ঠাসমূহ স্থানান্তৰ কৰক ($1-লৈ)',
 'movepage-page-exists' => '$1 পৃষ্ঠাখন ইতিমধ্যেই আছে আৰু তাৰ ওপৰত স্বয়ংক্ৰিয়ভাৱে লিখিব নোৱাৰি ।',
-'movepage-page-moved' => "$1 à¦ªà§\83ষà§\8dঠাà¦\96ন $2লৈ স্থানান্তৰ কৰা হ'ল।",
-'movepage-page-unmoved' => '$1 à¦ªà§\83ষà§\8dঠাà¦\96ন $2লৈ স্থানান্তৰ কৰা সম্ভৱ নহয়',
+'movepage-page-moved' => "$1 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b $2লৈ স্থানান্তৰ কৰা হ'ল।",
+'movepage-page-unmoved' => '$1 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b $2লৈ স্থানান্তৰ কৰা সম্ভৱ নহয়',
 'movepage-max-pages' => 'সৰ্বোচ্চ $1 {{PLURAL:$1|পৃষ্ঠা|পৃষ্ঠা}} স্থানান্তৰ কৰা হৈছে আৰু ইয়াতকৈ অধিক স্বয়ংক্ৰিয়ভাৱে স্থানান্তৰ নহ’ব ।',
 'movelogpage' => 'স্থানান্তৰন অভিলেখ',
 'movelogpagetext' => 'সকলো পৃষ্ঠা স্থানান্তৰৰ এখন তালিকা তলত দিয়া হৈছে ।',
-'movesubpage' => '{{PLURAL:$1|à¦\96ন à¦\89পপà§\83ষà§\8dঠা|à¦\96ন উপপৃষ্ঠা}}',
-'movesubpagetext' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96নৰ à¦¤à¦²à¦¤ à¦¦à¦¿à¦¯à¦¼à¦¾ {{PLURAL:$1|à¦\96ন à¦\89পপà§\83ষà§\8dঠা|à¦\96ন উপপৃষ্ঠা}} আছে ।',
+'movesubpage' => '{{PLURAL:$1|à¦\9fা উপপৃষ্ঠা}}',
+'movesubpagetext' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96নৰ à¦¤à¦²à¦¤ à¦¦à¦¿à¦¯à¦¼à¦¾ {{PLURAL:$1|à¦\9fা উপপৃষ্ঠা}} আছে ।',
 'movenosubpage' => 'এই পৃষ্ঠাৰ কোনো উপপৃষ্ঠা নাই ।',
 'movereason' => 'কাৰণ:',
 'revertmove' => 'আগৰ অৱস্থালৈ ঘূৰি যাওক',
@@ -2804,14 +2799,14 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 'delete_and_move_text' => '== বিলোপন আৱশ্যক ==
 লক্ষ্য পৃষ্ঠা "[[:$1]]" ইতিমেধ্যে আছেই ।
 আপুনি স্থানান্তৰ কৰিবলৈ এইখন বিলোপ কৰিব খুজিছে নেকি ?',
-'delete_and_move_confirm' => 'হয়, à¦ªà§\83ষà§\8dঠাà¦\96ন বিলোপ কৰক',
+'delete_and_move_confirm' => 'হয়, à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b বিলোপ কৰক',
 'delete_and_move_reason' => '"[[$1]]"ৰ পৰা স্থানান্তৰৰ স্বাৰ্থত বিলোপ কৰা হৈছে',
 'selfmove' => 'উৎস আৰু লক্ষ্য শিৰোনামা একেই;
 কোনো পৃষ্ঠাক একেখন পৃষ্ঠালৈ স্থানান্তৰ কৰিব নোৱাৰি ।',
 'immobile-source-namespace' => '"$1" নামস্থানত পৃষ্ঠা স্থানান্তৰ কৰিব নোৱাৰি',
 'immobile-target-namespace' => '"$1" নামস্থানলৈ পৃষ্ঠা স্থানান্তৰ কৰিব নোৱাৰি',
 'immobile-target-namespace-iw' => 'পৃষ্ঠা স্থানান্তৰৰ বাবে আন্তঃৱিকি সংযোগ বৈধ গন্তব্যস্থল নহয় ।',
-'immobile-source-page' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন স্থানান্তৰ কৰিব নোৱাৰি ।',
+'immobile-source-page' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b স্থানান্তৰ কৰিব নোৱাৰি ।',
 'immobile-target-page' => 'গন্তব্য শিৰোনামালৈ স্থানান্তৰ কৰিব পৰা নাযাব ।',
 'bad-target-model' => 'কাংক্ষিত লক্ষ্যস্থানৰ সমলৰ মডেলৰ সতে মিলা নাই।   $1ৰ পৰা $2লৈ সলনি কৰিব পৰা নগ’ল।',
 'imagenocrossnamespace' => 'অনা-ফাইল নামস্থানলৈ ফাইল স্থানান্তৰ কৰিব নোৱাৰি',
@@ -2929,10 +2924,10 @@ $2',
 'import-token-mismatch' => 'ছেছন তথ্য হেৰাই গৈছে ।
 অনুগ্ৰহ কৰি পুনৰ চেষ্টা কৰক ।',
 'import-invalid-interwiki' => 'নিৰ্ধাৰিত ৱিকিৰ পৰা আমদানি কৰিব নোৱাৰি ।',
-'import-error-edit' => '"$1" à¦ªà§\83ষà§\8dঠাà¦\96ন আমদানি কৰা নহ\'ল কাৰণ ইয়াক সম্পাদনা কৰিবলৈ আপোনাৰ অনুমতি নাই।',
-'import-error-create' => '"$1" à¦ªà§\83ষà§\8dঠাà¦\96ন আমদানি কৰা নহ\'ল কাৰণ ইয়াক সৃষ্টি কৰিবলৈ আপোনাৰ অনুমতি নাই।',
-'import-error-interwiki' => '"$1" à¦ªà§\83ষà§\8dঠাà¦\96ন আমদানি কৰা নহ\'ল কাৰণ ইয়াৰ নামটো বাহিৰা সংযোগৰ (আন্তঃৱিকি) বাবে সংৰক্ষিত।',
-'import-error-special' => '"$1" à¦ªà§\83ষà§\8dঠাà¦\96ন আমদানি কৰা নহ\'ল কাৰণ ই পৃষ্ঠা অনুমোদন নকৰা এটা বিশেষ নামস্থানৰ অন্তৰ্গত।',
+'import-error-edit' => '"$1" à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b আমদানি কৰা নহ\'ল কাৰণ ইয়াক সম্পাদনা কৰিবলৈ আপোনাৰ অনুমতি নাই।',
+'import-error-create' => '"$1" à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b আমদানি কৰা নহ\'ল কাৰণ ইয়াক সৃষ্টি কৰিবলৈ আপোনাৰ অনুমতি নাই।',
+'import-error-interwiki' => '"$1" à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b আমদানি কৰা নহ\'ল কাৰণ ইয়াৰ নামটো বাহিৰা সংযোগৰ (আন্তঃৱিকি) বাবে সংৰক্ষিত।',
+'import-error-special' => '"$1" à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b আমদানি কৰা নহ\'ল কাৰণ ই পৃষ্ঠা অনুমোদন নকৰা এটা বিশেষ নামস্থানৰ অন্তৰ্গত।',
 'import-error-invalid' => '"$1" পৃষ্ঠাখন আমদানি কৰা নহ\'ল কাৰণ ইয়াৰ নামটো অবৈধ।',
 'import-error-unserialize' => ' "$1" পৃষ্ঠাৰ $2 সংশোধনৰ ক্ৰম আঁতৰ কৰিব পৰা নগ\'ল। এই সংশোধনে $4 ক্ৰমৰ সমল মডেল $3 ব্যৱহাৰ কৰা বুলি জনোৱা হৈছিল।',
 'import-options-wrong' => 'ভুল {{PLURAL:$2|বিকল্প|বিকল্পসমূহ}}: <nowiki>$1</nowiki>',
@@ -2950,7 +2945,7 @@ $2',
 # JavaScriptTest
 'javascripttest' => 'জাভাস্ক্ৰিপ্ট পৰীক্ষা।',
 'javascripttest-title' => '$1 পৰীক্ষাসমূহ চলোৱা হৈছে',
-'javascripttest-pagetext-noframework' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন à¦\9cাভালিপি পৰীক্ষা চলোৱাৰ বাবে সংৰক্ষিত।',
+'javascripttest-pagetext-noframework' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b à¦\9cাভাসà§\8dà¦\95à§\8dৰিপà§\8dà¦\9f পৰীক্ষা চলোৱাৰ বাবে সংৰক্ষিত।',
 'javascripttest-pagetext-unknownframework' => 'অজ্ঞাত সম্পৰীক্ষা ফ্ৰেমৱৰ্ক "$1"।',
 'javascripttest-pagetext-frameworks' => 'অনুগ্ৰহ কৰি তলৰ যিকোনো এটা সম্পৰীক্ষা ফ্ৰেমৱৰ্ক বাছনি কৰক: $1',
 'javascripttest-pagetext-skins' => 'পৰীক্ষা কৰিবলৈ আৱৰণ এখন বাছনি কৰক:',
@@ -2970,15 +2965,15 @@ $2',
 'tooltip-ca-talk' => 'সংশ্লিষ্ট প্ৰবন্ধ সম্পৰ্কীয় আলোচনা',
 'tooltip-ca-edit' => 'আপুনি এই পৃষ্ঠাটো সালসলনি কৰিব পাৰে, অনুগ্ৰহ কৰি সালসলনি সাচী থোৱাৰ আগতে খচৰা চাই লব',
 'tooltip-ca-addsection' => 'নতুন অনুচ্ছেদ আৰম্ভ কৰক',
-'tooltip-ca-viewsource' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন সুৰক্ষিত কৰা হৈছে, আপুনি ইয়াৰ উৎস চাব পাৰে।',
+'tooltip-ca-viewsource' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b সুৰক্ষিত কৰা হৈছে, আপুনি ইয়াৰ উৎস চাব পাৰে।',
 'tooltip-ca-history' => 'এই পৃষ্ঠাৰ যোৱা সংস্কৰণসমূহ',
-'tooltip-ca-protect' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন সুৰক্ষিত কৰক',
+'tooltip-ca-protect' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b সুৰক্ষিত কৰক',
 'tooltip-ca-unprotect' => 'এই পৃষ্ঠাৰ সুৰক্ষা সলনি কৰক',
-'tooltip-ca-delete' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন বিলোপ কৰক',
+'tooltip-ca-delete' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b বিলোপ কৰক',
 'tooltip-ca-undelete' => 'বিলোপ কৰাৰ আগেয়ে কৰা পৃষ্ঠাখনৰ সালসলনিসমূহ পুনঃসংস্থাপন কৰক',
-'tooltip-ca-move' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন স্থানান্তৰিত কৰক',
-'tooltip-ca-watch' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন আপোনাৰ লক্ষ্য-তালিকাত যোগ কৰক',
-'tooltip-ca-unwatch' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন আপোনাৰ লক্ষ্য-তালিকাৰ পৰা আঁতৰাওক',
+'tooltip-ca-move' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b স্থানান্তৰিত কৰক',
+'tooltip-ca-watch' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b আপোনাৰ লক্ষ্য-তালিকাত যোগ কৰক',
+'tooltip-ca-unwatch' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b আপোনাৰ লক্ষ্য-তালিকাৰ পৰা আঁতৰাওক',
 'tooltip-search' => '{{SITENAME}} -ত সন্ধানাৰ্থে',
 'tooltip-search-go' => 'যদি আছে, তেহে ঠিক সেই নামৰ পৃষ্ঠালৈ যাওক',
 'tooltip-search-fulltext' => 'এই পাঠ পৃষ্ঠাসমূহত বিচাৰক',
@@ -3002,7 +2997,7 @@ $2',
 'tooltip-t-permalink' => 'পৃষ্ঠাৰ এই সংস্কৰণৰ স্থায়ী সংযোগ',
 'tooltip-ca-nstab-main' => 'এই ৱিকিৰ সূচী চাওক',
 'tooltip-ca-nstab-user' => 'সভ্যৰ ব্যক্তিগত পৃষ্ঠালৈ',
-'tooltip-ca-nstab-media' => 'মিডিয়া à¦ªà§\83ষà§\8dঠাà¦\96ন চাওক',
+'tooltip-ca-nstab-media' => 'মিডিয়া à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b চাওক',
 'tooltip-ca-nstab-special' => 'এইটো এটা বিশেষ পৃষ্ঠা, আপুনি সম্পাদনা কৰিব নোৱাৰে',
 'tooltip-ca-nstab-project' => 'প্ৰকল্প পৃষ্ঠা চাওক',
 'tooltip-ca-nstab-image' => 'নথিৰ পৃষ্ঠা চাওক',
@@ -3015,10 +3010,10 @@ $2',
 'tooltip-preview' => 'আপুনি কৰা সালসলনিবোৰৰ খচৰা চাওক, অনুগ্ৰহ কৰি সালসলনি সাঁচি থোৱাৰ আগতে ব্যৱহাৰ কৰক!',
 'tooltip-diff' => 'ইয়াত আপুনি কৰা সালসলনিবোৰ দেখুৱাওক',
 'tooltip-compareselectedversions' => 'এই পৃষ্ঠাত নিৰ্বাচিত দুটা সংশোধনৰ মাজত পাৰ্থক্য দেখুৱাওক',
-'tooltip-watch' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন আপোনাৰ লক্ষ্য-তালিকাভুক্ত কৰক',
+'tooltip-watch' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b আপোনাৰ লক্ষ্য-তালিকাভুক্ত কৰক',
 'tooltip-watchlistedit-normal-submit' => 'শিৰোনামা আঁতৰাওক',
 'tooltip-watchlistedit-raw-submit' => 'লক্ষ্য-তালিকা আপডেট কৰক',
-'tooltip-recreate' => 'বিলà§\8bপ à¦\95ৰা à¦¸à¦¤à§\8dবà§\87à¦\93 à¦ªà§\83ষà§\8dঠাà¦\96ন পুনৰ সৃষ্টি কৰক',
+'tooltip-recreate' => 'বিলà§\8bপ à¦\95ৰা à¦¸à¦¤à§\8dবà§\87à¦\93 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b পুনৰ সৃষ্টি কৰক',
 'tooltip-upload' => "আপল'ড আৰম্ভ কৰক",
 'tooltip-rollback' => '"পূৰ্ববত" কৰিলে এটা ক্লিকত এই পৃষ্ঠাৰ শেষ অৱদানকাৰীৰ সম্পাদনা বাতিল কৰি ইয়াক পূৰ্বাৱস্থালৈ ঘূৰাই নিব।',
 'tooltip-undo' => '"বাতিল"এ এই সম্পাদনাক পূৰ্বাৱস্থালৈ ঘূৰাই নিব আৰু প্ৰাক্‌দৰ্শনৰ বাবে সম্পাদনাটো খুলিব। ই সম্পাদনা সাৰাংশত কাৰণ এটা লিখিবলৈ সুযোগ দিব।',
@@ -3032,7 +3027,7 @@ $2',
 'anonymous' => '{{SITENAME}}ৰ বেনামী {{PLURAL:$1|সদস্য|সদস্যসকল}}',
 'siteuser' => '{{SITENAME}} সদস্য $1',
 'anonuser' => '{{SITENAME}} বেনামী সদস্য $1',
-'lastmodifiedatby' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন শেষবাৰৰ কাৰণে $1 তাৰিখে $2 বজাত $3ৰ দ্বাৰা সলনি কৰা হৈছিল',
+'lastmodifiedatby' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b শেষবাৰৰ কাৰণে $1 তাৰিখে $2 বজাত $3ৰ দ্বাৰা সলনি কৰা হৈছিল',
 'othercontribs' => '$1ৰ কাৰ্যৰ ওপৰত ভিত্তি কৰি',
 'others' => 'অন্যান্য',
 'siteusers' => '{{SITENAME}} {{PLURAL:$2|সদস্য|সদস্যসমূহ}} $1',
@@ -3101,7 +3096,7 @@ $2',
 
 # Patrolling
 'markaspatrolleddiff' => 'নিৰীক্ষিত বুলি চিহ্নিত কৰক',
-'markaspatrolledtext' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন নিৰীক্ষিত বুলি চিহ্নিত কৰক',
+'markaspatrolledtext' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b নিৰীক্ষিত বুলি চিহ্নিত কৰক',
 'markedaspatrolled' => 'নিৰীক্ষিত বুলি চিহ্নিত কৰা হ’ল',
 'markedaspatrolledtext' => '[[:$1]] ৰ নিৰ্বাচিত সংশোধনীসমূহ নিৰীক্ষিত বুলি চিহ্নিত কৰা হৈছে ।',
 'rcpatroldisabled' => 'শেহতীয়া সালসলনিৰ নিৰীক্ষণ নিষ্ক্ৰিয় কৰা হৈছে',
@@ -3691,10 +3686,10 @@ $5
 'scarytranscludetoolong' => '[URL অত্যাধিক দীঘল]',
 
 # Delete conflict
-'deletedwhileediting' => "'''সতৰà§\8dà¦\95বাণà§\80''': à¦\86পà§\81নি à¦¸à¦®à§\8dপাদনা à¦\86ৰমà§\8dভ à¦\95ৰাৰ à¦ªà¦¿à¦\9bত à¦ªà§\83ষà§\8dঠাà¦\96ন বিলোপ কৰা হৈছে !",
-'confirmrecreate' => "à¦\86পà§\81নি à¦¸à¦®à§\8dপাদনা à¦\86ৰমà§\8dভ à¦\95ৰাৰ à¦ªà¦¿à¦\9bত à¦¸à¦¦à¦¸à§\8dয [[User:$1|$1]] ([[User talk:$1|à¦\86লà§\8bà¦\9aনা]])য়à§\87 à¦ªà§\83ষà§\8dঠাà¦\96ন বিলোপ কৰিছে, তাৰ কাৰণ:
+'deletedwhileediting' => "'''সতৰà§\8dà¦\95বাণà§\80''': à¦\86পà§\81নি à¦¸à¦®à§\8dপাদনা à¦\86ৰমà§\8dভ à¦\95ৰাৰ à¦ªà¦¾à¦\9bত à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b বিলোপ কৰা হৈছে !",
+'confirmrecreate' => "à¦\86পà§\81নি à¦¸à¦®à§\8dপাদনা à¦\86ৰমà§\8dভ à¦\95ৰাৰ à¦ªà¦¿à¦\9bত à¦¸à¦¦à¦¸à§\8dয [[User:$1|$1]] ([[User talk:$1|à¦\86লà§\8bà¦\9aনা]])য়à§\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b বিলোপ কৰিছে, তাৰ কাৰণ:
 : ''$2''
-à¦\86পà§\81নি à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন আকৌ সৃষ্টি কৰিব খোজাটো নিশ্চিত কৰক ।",
+à¦\86পà§\81নি à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b আকৌ সৃষ্টি কৰিব খোজাটো নিশ্চিত কৰক ।",
 'confirmrecreate-noreason' => 'আপুনি সম্পাদনা আৰম্ভ কৰাৰ পিছত সদস্য [[User:$1|$1]] ([[User talk:$1|আলোচনা]])য়ে পৃষ্ঠাখন বিলোপ কৰিছে । আপুনি এই পৃষ্ঠাখন আকৌ সৃষ্টি কৰিব খোজাটো অনুগ্ৰহ কৰি নিশ্চিত কৰক ।',
 'recreate' => 'পুনৰ সৃষ্টি কৰক',
 
@@ -3705,9 +3700,9 @@ $5
 
 # action=watch/unwatch
 'confirm-watch-button' => 'শুদ্ধ',
-'confirm-watch-top' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন à¦\86পà§\8bনাৰ à¦²à¦\95à§\8dষà§\8dয-তালিà¦\95াত à¦¯à§\8bà¦\97 à¦\95ৰà¦\95',
+'confirm-watch-top' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b à¦\86পà§\8bনাৰ à¦²à¦\95à§\8dষà§\8dয-তালিà¦\95াত à¦¯à§\8bà¦\97 à¦\95ৰিব?',
 'confirm-unwatch-button' => 'শুদ্ধ',
-'confirm-unwatch-top' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন à¦\86পà§\8bনাৰ à¦²à¦\95à§\8dষà§\8dয-তালিà¦\95াৰ à¦ªà§°à¦¾ à¦\86à¦\81তৰাà¦\93à¦\95',
+'confirm-unwatch-top' => 'à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b à¦\86পà§\8bনাৰ à¦²à¦\95à§\8dষà§\8dয-তালিà¦\95াৰ à¦ªà§°à¦¾ à¦\86à¦\81তৰাব?',
 
 # Multipage image navigation
 'imgmultipageprev' => '← পূৰ্বৱৰ্তী পৃষ্ঠা',
@@ -3732,7 +3727,7 @@ $5
 'table_pager_empty' => 'ফলাফল নাই',
 
 # Auto-summaries
-'autosumm-blank' => "পà§\83ষà§\8dঠাà¦\96ন খালী কৰা হ'ল",
+'autosumm-blank' => "পà§\83ষà§\8dঠাà¦\9fà§\8b খালী কৰা হ'ল",
 'autosumm-replace' => 'পৄষ্ঠাখনক "$1"ৰে সলনি কৰা হ\'ল',
 'autoredircomment' => "[[$1]]-ক পুনৰ্নিৰ্দেশ কৰা হ'ল",
 'autosumm-new' => '"$1" দি পৃষ্ঠা সৃষ্টি কৰা হ\'ল',
@@ -3939,7 +3934,7 @@ $5
 'sqlite-no-fts' => '$1 সম্পূৰ্ণ-পাঠ অনুসন্ধান সমৰ্থন অবিহনে',
 
 # New logging system
-'logentry-delete-delete' => " $3 পৃষ্ঠাখন $1ৰদ্বাৰা {{GENDER:$2|বিলোপ কৰা হ'ল}}",
+'logentry-delete-delete' => "$3 পৃষ্ঠাটো $1ৰদ্বাৰা {{GENDER:$2|বিলোপ কৰা হ'ল}}",
 'logentry-delete-restore' => "$3 পৃষ্ঠাখন $1 ৰদ্বাৰা {{GENDER:$2|পুনৰ্সংৰক্ষণ কৰা হ'ল}}",
 'logentry-delete-event' => '$3: $4 -ত {{PLURAL:$5|এটা লগ ঘটনা|$5 লগ ঘটনাসমূহ}} -ৰ $1 পৰিৱৰ্তন কৰা দৃশ্যমানতা',
 'logentry-delete-revision' => 'পৃষ্ঠা $3ত {{PLURAL:$5|এটা সংশোধন|$5 সংশোধনসমূহ}}ৰ দৃশ্যমানতা $1 {{GENDER:$2|য়ে সলালে}}: $4',
index 02862e8..1aa9719 100644 (file)
@@ -100,7 +100,6 @@ $messages = array(
 'tog-ccmeonemails' => "Mandame copies de los correos qu'unvio a otros usuarios",
 'tog-diffonly' => 'Nun amosar el conteníu de la páxina embaxo de les diferencies',
 'tog-showhiddencats' => 'Amosar categoríes anubríes',
-'tog-noconvertlink' => 'Desactivar la conversión del títulu del enllaz',
 'tog-norollbackdiff' => 'Desaniciar les diferencies depués de facer una restauración',
 'tog-useeditwarning' => "Avisame cuando salga d'una páxina d'edición con cambios ensin guardar",
 'tog-prefershttps' => 'Usar siempre una conexón segura en aniciando sesión',
@@ -227,7 +226,6 @@ $messages = array(
 'vector-action-protect' => 'Protexer',
 'vector-action-undelete' => 'Restaurar',
 'vector-action-unprotect' => 'Camudar la proteición',
-'vector-simplesearch-preference' => 'Activar la barra de búsqueda simplificada (namái tema Vector)',
 'vector-view-create' => 'Crear',
 'vector-view-edit' => 'Editar',
 'vector-view-history' => 'Ver historial',
@@ -239,7 +237,7 @@ $messages = array(
 
 'navigation-heading' => 'Menú de navegación',
 'errorpagetitle' => 'Error',
-'returnto' => 'Tornar a $1.',
+'returnto' => 'Volver a $1.',
 'tagline' => 'De {{SITENAME}}',
 'help' => 'Ayuda',
 'search' => 'Buscar',
@@ -288,7 +286,7 @@ $messages = array(
 'otherlanguages' => "N'otres llingües",
 'redirectedfrom' => '(Redirixío dende $1)',
 'redirectpagesub' => 'Páxina de redireición',
-'lastmodifiedat' => "Esta páxina camudóse la postrera vegada'l $1 a les $2.",
+'lastmodifiedat' => "L'últimu cambiu d'esta páxina foi el $1, a les $2.",
 'viewcount' => 'Esta páxina visitóse {{PLURAL:$1|una vegada|$1 vegaes}}.',
 'protectedpage' => 'Páxina protexida',
 'jumpto' => 'Saltar a:',
@@ -511,11 +509,10 @@ Nun t'escaezas de camudar les tos [[Special:Preferences|preferencies de {{SITENA
 'nologinlink' => 'Crear una cuenta',
 'createaccount' => 'Crear una cuenta',
 'gotaccount' => '¿Yá tienes una cuenta? $1.',
-'gotaccountlink' => 'Entrar',
+'gotaccountlink' => 'Aniciar sesión',
 'userlogin-resetlink' => "¿Escaeció los datos d'accesu?",
 'userlogin-resetpassword-link' => '¿Escaeció la contraseña?',
-'helplogin-url' => 'Help:Aniciar sesión',
-'userlogin-helplink' => "[[{{MediaWiki:helplogin-url}}|Ayuda p'aniciar sesión]]",
+'userlogin-helplink2' => 'Ayuda del aniciu de sesión',
 'userlogin-loggedin' => "Yá anició sesión como {{GENDER:$1|$1}}.
 Utilice'l formulariu de más abaxo p'aniciar sesión como otru usuariu.",
 'userlogin-createanother' => 'Crear otra cuenta',
@@ -617,6 +614,10 @@ Por favor espera $1 enantes d'intentalo otra vuelta.",
 'suspicious-userlogout' => "La to solicitú de zarrar sesión refugose porque paez qu'unvióla un restolador frañíu o un proxy de caché.",
 'createacct-another-realname-tip' => "El nome real ye opcional.
 Si decide conseñalu, va usase p'atribuir el trabayu al usuariu.",
+'pt-login' => 'Entrar',
+'pt-login-button' => 'Aniciar sesión',
+'pt-createaccount' => 'Crear una cuenta',
+'pt-userlogout' => 'Salir',
 
 # Email sending
 'php-mail-error-unknown' => 'Fallu desconocíu na función mail() de PHP.',
@@ -625,8 +626,7 @@ Si decide conseñalu, va usase p'atribuir el trabayu al usuariu.",
 
 # Change password dialog
 'changepassword' => 'Camudar la clave',
-'resetpass_announce' => "Aniciasti sesión con un códigu provisional unviáu per corréu electrónicu.
-P'acabar d'aniciar sesión, tienes de configurar equí una contraseña nueva:",
+'resetpass_announce' => "P'acabar d'aniciar sesión, tien de definir equí una contraseña nueva.",
 'resetpass_text' => '<!-- Amestar testu equí -->',
 'resetpass_header' => 'Camudar la contraseña de la cuenta',
 'oldpassword' => 'Contraseña antigua:',
@@ -642,8 +642,16 @@ Por favor espera $1 enantes d'intentalo otra vuelta.",
 'resetpass-submit-cancel' => 'Encaboxar',
 'resetpass-wrong-oldpass' => 'Contraseña temporal o actual inválida.
 Seique yá camudaras correutamente la contraseña o que pidieras una nueva contraseña temporal.',
+'resetpass-recycled' => 'Por favor, cambie la so contraseña por otra distinta de la actual.',
+'resetpass-temp-emailed' => "Anició sesión con un códigu temporal unviáu per corréu electrónicu.
+Pa completar l'aniciu de sesión, tien de definir una nueva contraseña equí:",
 'resetpass-temp-password' => 'Contraseña temporal:',
 'resetpass-abort-generic' => "Una estensión encaboxó'l cambiu de la contraseña.",
+'resetpass-expired' => "La so contraseña caducó. Defina una nueva contraseña p'aniciar sesión.",
+'resetpass-expired-soft' => 'La so contraseña caducó y tien de reaniciala. Escueya una contraseña nueva, o calque «{{int:resetpass-submit-cancel}}» pa reaniciala más sero.',
+'resetpass-validity-soft' => 'La so contraseña nun ye válida: $1
+
+Escueya una contraseña nueva, o calque «{{int:resetpass-submit-cancel}}» pa reaniciala más sero.',
 
 # Special:PasswordReset
 'passwordreset' => 'Reaniciar contraseña',
@@ -716,7 +724,7 @@ Tendría de facelo si los compartió con alguién de mou accidental o si la so c
 'link_tip' => 'Enllaz internu',
 'extlink_sample' => 'http://www.example.com títulu del enllaz',
 'extlink_tip' => "Enllaz esternu (recuerda'l prefixu http://)",
-'headline_sample' => 'Testu del titular',
+'headline_sample' => 'Testu de cabecera',
 'headline_tip' => 'Cabecera de nivel 2',
 'nowiki_sample' => 'Pon equí testu ensin formatu',
 'nowiki_tip' => 'Inorar el formatu wiki',
@@ -729,15 +737,15 @@ Tendría de facelo si los compartió con alguién de mou accidental o si la so c
 
 # Edit pages
 'summary' => 'Resume:',
-'subject' => 'Asuntu/titular:',
+'subject' => 'Asuntu/títulu:',
 'minoredit' => 'Esta ye una edición menor',
 'watchthis' => 'Vixilar esta páxina',
 'savearticle' => 'Guardar la páxina',
-'preview' => 'Previsualización',
+'preview' => 'Vista previa',
 'showpreview' => 'Amosar previsualización',
 'showlivepreview' => 'Vista rápida',
 'showdiff' => 'Amosar cambeos',
-'anoneditwarning' => "'''Avisu:''' Nun anició sesión.
+'anoneditwarning' => "<strong>Avisu:</strong> Nun anició sesión.
 La direición IP quedará grabada nel historial d'edición d'esta páxina.",
 'anonpreviewwarning' => "''Nun aniciasti sesión. Al guardar quedará rexistrada la to direición IP nel historial d'edición d'esta páxina.''",
 'missingsummary' => "'''Recordatoriu:''' Nun conseñasti un resume d'edición.
@@ -836,7 +844,7 @@ Les páxines personalizaes de .css y .js usen un títulu en minúscules, p. ex.
 ¡Los cambios entá nun se guardaron!",
 'continue-editing' => "Dir al área d'edición",
 'previewconflict' => "Esta vista previa amuesa'l testu del área d'edición d'arriba tal como apaecerá si escueyes guardar.",
-'session_fail_preview' => "'''¡Sentímoslo muncho! Nun pudimos procesar la to edición por aciu d'una perda de datos de la sesión.'''
+'session_fail_preview' => "'''¡Sentímoslo muncho! Nun pudimos procesar la to edición porque hebo una perda de datos de la sesión.'''
 Por favor, vuelvi a intentalo.
 Si inda nun funciona, intenta [[Special:UserLogout|colar]] y volver a aniciar sesión.",
 'session_fail_preview_html' => "'''¡Sentímoslo! Nun pudo procesase la to edición por aciu d'una perda de datos de la sesión.'''
@@ -863,9 +871,9 @@ Vas tener que fusionar los tos cambios dientro del testu esistente.
 'nonunicodebrowser' => "'''Avisu: El to navegador nun cumple la norma Unicode.''' Hai un sistema alternativu que te permite editar páxines de forma segura: los caráuteres non-ASCII apaecerán nel cuadru d'edición como códigos hexadecimales.",
 'editingold' => "'''AVISU: Tas editando una revisión vieya d'esta páxina. Si la grabes, los cambios que se ficieron dende esta revisión van perdese.'''",
 'yourdiff' => 'Diferencies',
-'copyrightwarning' => "Por favor, ten en cuenta que toles collaboraciones de {{SITENAME}} considerense espublizaes baxo la $2 (ver $1 pa más detalles). Si nun quies que'l to trabayu s'edite ensin midida y se distribuya al debalu, nun lu pongas equí.<br />
-Amás tas prometiendonos qu'escribisti esto tu mesmu o que copiastilo d'una fonte llibre de dominiu públicu o asemeyao.
-'''¡Nun unvies obres con drechos d'autor ensin permisu!'''",
+'copyrightwarning' => "Por favor, ten en cuenta que toles collaboraciones de {{SITENAME}} considérense espublizaes baxo la $2 (ver $1 pa más detalles). Si nun quies que'l to trabayu s'edite ensin midida y se distribuya al debalu, nun lu pongas equí.<br />
+Amás tas prometiéndonos qu'escribisti esto tu mesmu, o que lo copiasti d'una fonte llibre, de dominiu públicu o asemeyada.
+<strong>¡Nun unvies obres con drechos d'autor ensin permisu!</strong>",
 'copyrightwarning2' => "Por favor, ten en cuenta que toles contribuciones de {{SITENAME}} se puen editar, alterar o desaniciar por otros usuarios. Si nun quies que'l to trabayu s'edite ensin midida, nun lu pongas equí.<br />
 Amás tas dexándonos afitao qu'escribisti esto tu mesmu, o que lo copiasti d'una fonte llibre de dominiu públicu o asemeyao (ver $1 pa más detalles).
 '''¡Nun pongas trabayos con drechos d'autor ensin permisu!'''",
@@ -955,6 +963,7 @@ Estos parámetros s'omitieron.",
 Por favor comprueba la comparanza d'abaxo pa confirmar que ye eso lo que quies facer, y depués guarda los cambios p'acabar d'esfacer la edición.",
 'undo-failure' => "Nun pudo esfacese la edición por aciu d'ediciones intermedies conflictives.",
 'undo-norev' => 'Nun se pudo esfacer la edición porque nun esiste o se desanició.',
+'undo-nochange' => 'Paez que la edición yá ta desfecha.',
 'undo-summary' => 'Esfacer la revisión $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|alderique]])',
 'undo-summary-username-hidden' => "Desfacer la revisión $1 d'un usuariu tapecíu",
 
@@ -1039,8 +1048,10 @@ Pues ver el diff; los detalles s'alcuentren nel [{{fullurl:{{#Special:Log}}/supr
 'revdelete-show-file-submit' => 'Sí',
 'revdelete-selected' => "'''{{PLURAL:$2|Revisión seleicionada|Revisiones seleicionaes}} de [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Socesu del rexistru seleicionáu|Socesos del rexistru seleicionaos}}:'''",
-'revdelete-text' => "'''Les revisiones y socesos desaniciaos van siguir apaeciendo nel historial de la páxina y nos rexistros, pero parte del so conteníu nun va ser accesible pal públicu.'''
-Otros alministradores de {{SITENAME}} van siguir pudiendo acceder al conteníu anubríu y puen restauralu de nuevo al traviés d'esta mesma interfaz, a nun ser que s'establezan otres restricciones.",
+'revdelete-text-text' => 'Les revisiones desaniciaes inda apaecerán nel historial de la páxina, pero partes del conteníu nun sedrán accesibles al públicu.',
+'revdelete-text-file' => 'Les versiones del ficheru desaniciaes inda apaecerán nel historial del ficheru, pero partes del conteníu nun sedrán accesibles al públicu.',
+'logdelete-text' => 'Los socesos del rexistru desaniciaos inda apaecerán nos rexistros, pero partes del conteníu nun sedrán accesibles al públicu.',
+'revdelete-text-others' => "Otros alministradores de {{SITENAME}} inda tendrán accesu al conteníu anubríu y puen desfacer l'anubrimientu con esta mesma interfaz, mentanto nun se configuren otres torgues más.",
 'revdelete-confirm' => "Confirma que quies facer esto, qu'entiendes les consecuencies, y que vas facer esto d'alcuerdo [[{{MediaWiki:Policy-url}}|cola política]].",
 'revdelete-suppress-text' => "La supresión '''namái''' tendría d'usase nos casos darréu:
 * Información que pudiere ser bilordiosa
@@ -1084,7 +1095,7 @@ Comprueba los rexistros, por favor.",
 ** Violación del Copyright
 ** Información personal o comentariu non apropiáu
 ** Nome d'usuariu non apropiáu
-** Información potencialmente bilordiosa",
+** Información potencialmente falsa",
 'revdelete-otherreason' => 'Motivu distintu/adicional:',
 'revdelete-reasonotherlist' => 'Otru motivu',
 'revdelete-edit-reasonlist' => 'Editar motivos del desaniciu',
@@ -1175,13 +1186,14 @@ Se puen alcontrar más detalles nel [{{fullurl:{{#Special:Log}}/delete|page={{FU
 'search-file-match' => '(casa col conteníu del ficheru)',
 'search-suggest' => 'Quixisti dicir: $1',
 'search-interwiki-caption' => 'Proyeutos hermanos',
-'search-interwiki-default' => '$1 resultaos:',
+'search-interwiki-default' => 'Resultaos de $1:',
 'search-interwiki-more' => '(más)',
 'search-relatedarticle' => 'Rellacionáu',
 'searcheverything-enable' => 'Buscar en tolos espacios de nome',
 'searchrelated' => 'rellacionáu',
 'searchall' => 'toos',
 'showingresults' => "Abaxo {{PLURAL:$1|amuésase '''un''' resultáu|amuésense '''$1''' resultaos}}, entamando col #'''$2'''.",
+'showingresultsinrange' => "Más abaxo s'{{PLURAL:$1|amuesa|amuesen}} fasta {{PLURAL:$1|<strong>1</strong> resultáu|<strong>$1</strong> resultaos}} nel rangu ente #<strong>$2</strong> y #<strong>$3</strong>.",
 'showingresultsnum' => "Abaxo {{PLURAL:$3|amuésase '''un''' resultáu|amuésense '''$3''' resultaos}}, entamando col #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Resultáu '''$1''' de '''$3'''|Resultaos '''$1 - $2''' de '''$3'''}} pa '''$4'''",
 'search-nonefound' => 'Nun hebo resultaos que casaren cola consulta.',
@@ -1485,7 +1497,7 @@ Esta información sedrá pública.',
 'nchanges' => '{{PLURAL:$1|un cambiu|$1 cambios}}',
 'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|dende la última visita}}',
 'enhancedrc-history' => 'historial',
-'recentchanges' => 'Cambios recientes',
+'recentchanges' => 'Cambeos recientes',
 'recentchanges-legend' => 'Opciones de cambios recientes',
 'recentchanges-summary' => 'Sigui los cambios más recientes na wiki nesta páxina.',
 'recentchanges-noresult' => 'Nengún cambiu nel periodu conseñáu coincide con esos criterios.',
@@ -1498,15 +1510,27 @@ Esta información sedrá pública.',
 'recentchanges-legend-heading' => "'''Lleenda:'''",
 'recentchanges-legend-newpage' => '(ver tamién la  [[Special:NewPages|llista de páxines nueves]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "Abaxo tan los cambeos dende '''$2''' (s'amuesen fasta '''$1''').",
+'rcnotefrom' => "Abaxo tan los cambeos dende <strong>$2</strong> (s'amuesen fasta <strong>$1</strong>).",
 'rclistfrom' => 'Amosar los nuevos cambios dende $1',
 'rcshowhideminor' => '$1 ediciones menores',
+'rcshowhideminor-show' => 'Amosar',
+'rcshowhideminor-hide' => 'Anubrir',
 'rcshowhidebots' => '$1 bots',
+'rcshowhidebots-show' => 'Amosar',
+'rcshowhidebots-hide' => 'Anubrir',
 'rcshowhideliu' => '$1 los usuarios rexistraos',
+'rcshowhideliu-show' => 'Amosar',
+'rcshowhideliu-hide' => 'Anubrir',
 'rcshowhideanons' => '$1 usuarios anónimos',
+'rcshowhideanons-show' => 'Amosar',
+'rcshowhideanons-hide' => 'Anubrir',
 'rcshowhidepatr' => '$1 ediciones supervisaes',
+'rcshowhidepatr-show' => 'Amosar',
+'rcshowhidepatr-hide' => 'Anubrir',
 'rcshowhidemine' => '$1 les mios ediciones',
-'rclinks' => 'Amosar los caberos $1 cambios de los caberos $2 díes <br />$3',
+'rcshowhidemine-show' => 'Amosar',
+'rcshowhidemine-hide' => 'Anubrir',
+'rclinks' => 'Amosar los caberos $1 cambeos de los caberos $2 díes <br />$3',
 'diff' => 'dif',
 'hist' => 'hist',
 'hide' => 'Anubrir',
@@ -1524,7 +1548,7 @@ Esta información sedrá pública.',
 'rc-old-title' => 'creada orixinalmente como «$1»',
 
 # Recent changes linked
-'recentchangeslinked' => 'Cambios rellacionaos',
+'recentchangeslinked' => 'Cambeos rellacionaos',
 'recentchangeslinked-feed' => 'Cambios rellacionaos',
 'recentchangeslinked-toolbox' => 'Cambios rellacionaos',
 'recentchangeslinked-title' => 'Cambios rellacionaos con "$1"',
@@ -1637,6 +1661,8 @@ Deberíes revisar el historial de desaniciu del ficheru enantes de xubilu otra v
 'php-uploaddisabledtext' => 'Les xubíes de ficheros tan desactivaes en PHP.
 Por favor, comprueba la configuración de file_uploads.',
 'uploadscripted' => 'Esti ficheru contién códigu HTML o scripts que se puen interpretar equivocadamente por un navegador.',
+'uploadscriptednamespace' => "Esti ficheru SVG contién l'espaciu de nomes illegal «$1»",
+'uploadinvalidxml' => "Nun pudo interpretase'l XML del ficheru cargáu.",
 'uploadvirus' => '¡El ficheru tien un virus!
 Detalles: $1',
 'uploadjava' => 'El ficheru ye un archivu ZIP que contién un ficheru .class de Java.
@@ -1929,7 +1955,7 @@ Alcuérdate de comprobar otros enllaces a les plantíes enantes d'esborrales.",
 'statistics-edits' => "Ediciones de páxines dende qu'entamó {{SITENAME}}",
 'statistics-edits-average' => "Media d'ediciones por páxina",
 'statistics-views-total' => 'Visites totales',
-'statistics-views-total-desc' => "Les vistes de páxines non-esistentes y especiales nun s'incluyen",
+'statistics-views-total-desc' => "Nun s'incluyen les visites a les páxines inesistentes y especiales",
 'statistics-views-peredit' => 'Visites por edición',
 'statistics-users' => '[[Special:ListUsers|Usuarios]] rexistraos',
 'statistics-users-active' => 'Usuarios activos',
@@ -2008,10 +2034,20 @@ Les entraes <del>tachaes</del> tan resueltes.',
 'deadendpagestext' => 'Les páxines siguientes nun enllacien a páxina dala de {{SITENAME}}.',
 'protectedpages' => 'Páxines protexíes',
 'protectedpages-indef' => 'Namái les proteiciones permanentes',
+'protectedpages-summary' => 'Esta páxina llista les páxines esistentes que tan protexíes actualmente. Pa ver la llista de títulos que tienen torgada la creación, vea [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Namái proteiciones en cascada',
 'protectedpages-noredirect' => 'Anubrir redireiciones',
 'protectedpagesempty' => 'Nun hai páxines protexíes anguaño con estos parámetros.',
+'protectedpages-timestamp' => "Marca d'hora",
+'protectedpages-page' => 'Páxina',
+'protectedpages-expiry' => 'Caduca',
+'protectedpages-performer' => 'Usuariu que protexe',
+'protectedpages-params' => 'Parámetros de proteición',
+'protectedpages-reason' => 'Motivu',
+'protectedpages-unknown-timestamp' => 'Desconocida',
+'protectedpages-unknown-performer' => 'Usuariu desconocíu',
 'protectedtitles' => 'Títulos protexíos',
+'protectedtitles-summary' => 'Esta páxina llista los títulos que tienen torgada la creación. Pa ver una llista de les páxines protexíes esistentes, vea [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Nun hai títulos protexíos anguaño con estos parámetros.',
 'listusers' => "Llista d'usuarios",
 'listusers-editsonly' => 'Amosar namái usuarios con ediciones',
@@ -2044,8 +2080,8 @@ Date cuenta de qu'otros sitios web puen enllazar a un ficheru con una URL direut
 'booksources-invalid-isbn' => 'El códigu ISBN que puxisti nun paez que valga; mira que te vien copiáu de la fonte orixinal.',
 
 # Special:Log
-'specialloguserlabel' => 'Pol usuariu:',
-'speciallogtitlelabel' => 'Col títulu:',
+'specialloguserlabel' => 'Fecho por:',
+'speciallogtitlelabel' => 'Oxetivu (títulu o usuariu):',
 'log' => 'Rexistros',
 'all-logs-page' => 'Tolos rexistros públicos',
 'alllogstext' => "Visualización combinada de tolos rexistros disponibles de {{SITENAME}}.
@@ -2076,8 +2112,8 @@ Pues filtrar la visualización seleicionando una mena de rexistru, el nome d'usu
 
 # Special:Categories
 'categories' => 'Categoríes',
-'categoriespagetext' => "{{PLURAL:$1|La categoría darréu contién|Les categoríes darréu contienen}} páxines o ficheros multimedia.
-Les [[Special:UnusedCategories|categoríes non usaes]] nun s'amuesen equí.
+'categoriespagetext' => "{{PLURAL:$1|La siguiente categoría contién|Les siguientes categoríes contienen}} páxines o ficheros multimedia.
+Les [[Special:UnusedCategories|categoríes nun usaes]] nun s'amuesen equí.
 Ver tamién les [[Special:WantedCategories|categoríes más buscaes]].",
 'categoriesfrom' => "Amosar categoríes qu'emprimen por:",
 'special-categories-sort-count' => 'ordenar por tamañu',
@@ -2286,7 +2322,7 @@ Restrinxóse l'esborráu d'estes páxines pa evitar perturbaciones accidentales
 'delete-warning-toobig' => "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.
 Esborralu pue perturbar les operaciones de la base de datos de {{SITENAME}};
 obra con precaución.",
-'deleting-backlinks-warning' => "'''Avisu:''' Otres páxines enllacen a, o trescluyen de, la páxina que ta a piques de desaniciar.",
+'deleting-backlinks-warning' => "'''Avisu:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otres páxines]] enllacen a, o trescluyen de, la páxina que ta a piques de desaniciar.",
 
 # Rollback
 'rollback' => 'Revertir ediciones',
@@ -2463,8 +2499,10 @@ La cabera entrada del rexistru de bloqueos s'ufre darréu pa referencia:",
 'sp-contributions-blocked-notice-anon' => "Esta IP anguaño ta bloquiada.
 La cabera entrada del rexistru de bloqueos s'ufre darréu pa referencia:",
 'sp-contributions-search' => 'Buscar contribuciones',
+'sp-contributions-suppresslog' => 'collaboraciones del usuariu desaniciaes',
 'sp-contributions-username' => "Direición IP o nome d'usuariu:",
 'sp-contributions-toponly' => 'Amosar namái les ediciones que son les caberes revisiones',
+'sp-contributions-newonly' => 'Amosar namái les ediciones que son creaciones de páxines',
 'sp-contributions-submit' => 'Buscar',
 
 # What links here
@@ -2565,7 +2603,7 @@ Mira na [[Special:BlockList|llista de bloqueos]] pa revisar los bloqueos.',
 'change-blocklink' => 'camudar el bloquéu',
 'contribslink' => 'contribuciones',
 'emaillink' => 'unviar corréu',
-'autoblocker' => 'Bloquiáu automáticamente porque la to direición IP foi usada recién por "[[User:$1|$1]]". El motivu del bloquéu de $1 ye: "$2"',
+'autoblocker' => 'Bloquiáu automáticamente porque la so direición IP usóla de recién «[[User:$1|$1]]». El motivu del bloquéu de $1 ye «$2»',
 'blocklogpage' => 'Rexistru de bloqueos',
 'blocklog-showlog' => "Esti usuariu recibió un bloquéu previamente.
 El rexistru de bloqueos s'ufre darréu pa referencia:",
@@ -2772,6 +2810,7 @@ $2",
 'thumbnail_image-type' => "Triba d'imaxe ensin sofitu",
 'thumbnail_gd-library' => 'Configuración incompleta de la biblioteca GD: falta la función $1',
 'thumbnail_image-missing' => "Paez que falta'l ficheru: $1",
+'thumbnail_image-failure-limit' => 'Hebo demasiaos intentos recientes que fallaron ($1 o más) al representar esta miniatura. Vuelva a intentalo más sero.',
 
 # Special:Import
 'import' => 'Importar páxines',
@@ -2942,7 +2981,7 @@ Pues ver el so códigu fonte.',
 'anonymous' => '{{PLURAL:$1|Usuariu anónimu|Usuarios anónimos}} de {{SITENAME}}',
 'siteuser' => '{{SITENAME}} usuariu $1',
 'anonuser' => 'usuariu anónimu de {{SITENAME}} $1',
-'lastmodifiedatby' => "Esta páxina se camudó por cabera vegada'l $1 a les $2 por $3.",
+'lastmodifiedatby' => "L'últimu cambiu d'esta páxina foi el $1, a les $2, por $3.",
 'othercontribs' => 'Basao nel trabayu fechu por $1.',
 'others' => 'otros',
 'siteusers' => '{{SITENAME}} {{PLURAL:$2|usuariu|usuarios}} $1',
@@ -3049,8 +3088,8 @@ $1",
 # Media information
 'mediawarning' => "'''Avisu''': Esta triba de ficheru pue contener códigu maliciosu.
 Al executalu pues comprometer el to sistema.",
-'imagemaxsize' => "Llende del tamañu d'imaxe: <br />''(pa les páxines de descripción de ficheru)''",
-'thumbsize' => 'Tamañu de la muestra:',
+'imagemaxsize' => "Llende del tamañu d'imaxe: <br /><em>(pa les páxines de descripción de ficheru)</em>",
+'thumbsize' => 'Tamañu de la miniatura:',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|páxina|páxines}}',
 'file-info' => "tamañu d'archivu: $1, triba MIME: $2",
 'file-info-size' => '$1 × $2 píxels, tamañu de ficheru: $3, triba MIME: $4',
@@ -3644,8 +3683,8 @@ Por favor confirma que daveres quies volver a crear esta páxina.",
 'descending_abbrev' => 'desc',
 'table_pager_next' => 'Páxina siguiente',
 'table_pager_prev' => 'Páxina anterior',
-'table_pager_first' => 'Primer páxina',
-'table_pager_last' => 'Postrer páxina',
+'table_pager_first' => 'Primera páxina',
+'table_pager_last' => 'Última páxina',
 'table_pager_limit' => 'Amosar $1 elementos por páxina',
 'table_pager_limit_label' => 'Elementos por páxina:',
 'table_pager_limit_submit' => 'Dir',
@@ -3655,7 +3694,7 @@ Por favor confirma que daveres quies volver a crear esta páxina.",
 'autosumm-blank' => 'Desaniciáu el conteníu de la páxina',
 'autosumm-replace' => "Sustituyendo la páxina por '$1'",
 'autoredircomment' => 'Redirixendo a [[$1]]',
-'autosumm-new' => "Páxina creada con '$1'",
+'autosumm-new' => 'Páxina creada con «$1»',
 
 # Size units
 'size-gigabytes' => '$1 XB',
@@ -4006,7 +4045,4 @@ En realidá cuasi tolo qu'apaeza ente llaves dobles.",
 'expand_templates_generate_rawhtml' => 'Ver el HTML en bruto',
 'expand_templates_preview' => 'Vista previa',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
-'uploadinvalidxml' => "Nun pudo interpretase'l XML del ficheru cargáu.",
 );
index d3bc7b5..9252687 100644 (file)
@@ -18,7 +18,6 @@ $fallback = 'es';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Sipita siqiraña',
-'tog-justify' => "Tanta amuyanak purapt'ayaña",
 'tog-hideminor' => 'Jichha jaqukipawina sullka askiptawix imantaña',
 'tog-hidepatrolled' => "Jichhnaki jaqukipawina askiptawix unch'ukita imantaña",
 'tog-newpageshidepatrolled' => "Machaqa uñstawix waruchatat uñstawix unch'ukita imantaña",
@@ -27,9 +26,7 @@ $messages = array(
 'tog-numberheadings' => 'Titulun chinu achuraña',
 'tog-showtoolbar' => 'Turkawit irnaqañ täta tisi uñachayaña (JavaScript munawiwa)',
 'tog-editondblclick' => 'Uñstawi turkayaña päsuxuqiña (JavaScript munawiwa)',
-'tog-editsection' => '[Turkaña] sipitampi tuqitaki turkawi luräña',
 'tog-editsectiononrightclick' => '(JavaScript munawiwa) titulxat tuqina kupi suxuqiñampi tuqitaki turkawi luräña',
-'tog-showtoc' => 'Waruchataw uñachayaña (kimsa tituljampi uñstawitaki)',
 'tog-rememberpassword' => "Akax jasanchirin imt'awija amtaña (for a maximum of $1 {{PLURAL:$1|day|days}})",
 'tog-watchcreations' => "Unch'ukit waruchatajana nayaxa uñstawix uñstayawajata yapxataña",
 'tog-watchdefault' => "Unch'ukit waruchatajana nayaxa uñstawix turkajata yapxataña",
@@ -38,7 +35,6 @@ $messages = array(
 'tog-minordefault' => 'Sullka askiptawpacha chimpuriña',
 'tog-previewontop' => 'Askiptawit llataxa nayraxa uñtawikar uñachayaña',
 'tog-previewonfirst' => 'Mayïri askiptawina uñtawikar uñachayaña',
-'tog-nocache' => "Uñstawita kachiñar jark'aña",
 'tog-enotifwatchlistpages' => "Nayaru chaski jalayiriña ukja unch'ukit waruchatana mäuñstawi turkañäna",
 'tog-enotifusertalkpages' => 'Nayaru chaski jalayiriña ukja tuqisiwit uñstawija turkañäna',
 'tog-enotifminoredits' => 'Nayaru chaski jalayiriña uñstawina sullka askiptawimpiraki',
index f6ea06f..fa084a5 100644 (file)
@@ -15,6 +15,7 @@
  * @author Emperyan
  * @author Erdemaslancan
  * @author Gulmammad
+ * @author Interfase
  * @author Kaganer
  * @author Khan27
  * @author Matma Rex
@@ -204,7 +205,7 @@ $messages = array(
 'category_header' => '"$1" kateqoriyasındakı məqalələr',
 'subcategories' => 'Alt kateqoriyalar',
 'category-media-header' => '"$1" kateqoriyasında mediya',
-'category-empty' => "''Bu kateqoriyanın tərkibi hal-hazırda boşdur.''",
+'category-empty' => '"Bu kateqoriya hal-hazırda boşdur."',
 'hidden-categories' => '{{PLURAL:$1|Gizli kateqoriya|Gizli kateqoriyalar}}',
 'hidden-category-category' => 'Gizli kateqoriyalar',
 'category-subcat-count' => '{{PLURAL:$2|Bu kateqoriya yalnız aşağıdakı altkateqoriyadan ibarətdir.|Cəmi $2 kateqoriyadan {{PLURAL:$1|altkateqoriya|$1 altkateqoriya}} göstərilmişdir.}}',
@@ -225,7 +226,7 @@ $messages = array(
 'moredotdotdot' => 'Daha...',
 'morenotlisted' => 'Bu siyahı tam deyil.',
 'mypage' => 'Səhifə',
-'mytalk' => 'Danışıqlarım',
+'mytalk' => 'Müzakirə',
 'anontalk' => 'Bu IP-yə aid müzakirə',
 'navigation' => 'Naviqasiya',
 'and' => '&#32;və',
@@ -246,7 +247,6 @@ $messages = array(
 'vector-action-protect' => 'Mühafizə et',
 'vector-action-undelete' => 'Bərpa et',
 'vector-action-unprotect' => 'Mühafizəni kənarlaşdır',
-'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çəyə bax',
@@ -295,7 +295,7 @@ $messages = array(
 'articlepage' => 'Məqaləni nəzərdən keçir',
 'talk' => 'Müzakirə',
 'views' => 'Görünüş',
-'toolbox' => 'Alətlər qutusu',
+'toolbox' => 'Alətlər',
 'userpage' => 'İstifadəçi səhifəsini göstər',
 'projectpage' => 'Layihə səhifəsini göstər',
 'imagepage' => 'Fayl səhifəsini göstər',
@@ -353,10 +353,10 @@ Bax: [[Special:Version|Versiyalar]].',
 'pagetitle' => '$1 - {{SITENAME}}',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Mənbə — "$1"',
-'youhavenewmessages' => 'Hal-hazırda $1 var. ($2)',
+'youhavenewmessages' => '{{PLURAL:$3|$3}} $1 var ($2).',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|Başqa bir istifadəçidən|$3 istifadəçidən}} $1 var ($2).',
-'youhavenewmessagesmanyusers' => 'Bir çox istifadəçidən $1 var ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|yeni mesajınız|yeni mesajlarınız}}',
+'youhavenewmessagesmanyusers' => 'Bir neçə istifadəçidən $1 var ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|yeni mesaj|yeni mesaj}}',
 'newmessagesdifflinkplural' => 'son {{PLURAL:$1|dəyişiklik|dəyişikliklər}}',
 'youhavenewmessagesmulti' => '"$1"da yeni mesajınız var.',
 'editsection' => 'redaktə',
@@ -428,7 +428,7 @@ Bu vəziyyət səhifənin, silinmiş bir səhifənin keçmiş versiyası olması
 
 Əgər niyə bu deyilsə, proqramda bir səhv ilə qarşılaşmış ola bilərsiniz.
 Xahiş edirik bunu bir [[Special:ListUsers/sysop|İdarəçilərə]], URL not edərək göndərin.',
-'missingarticle-rev' => '(təftiş № $1)',
+'missingarticle-rev' => '(versiya №: $1)',
 'missingarticle-diff' => '(fərq: $1, $2)',
 'readonly_lag' => 'Məlumatlar bazasının ikinci dərəcəli serveri əsas serverlə əlaqə yaradanadək məlumatlar bazası avtomatik olaraq bloklanmışdır',
 'internalerror' => 'Daxili xəta',
@@ -508,7 +508,7 @@ Siz {{SITENAME}} saytını anonim olaraq istifadə etməyə davam edə bilər v
 'userlogin-yourpassword' => 'Parol',
 'userlogin-yourpassword-ph' => 'Parolunuzu daxil edin',
 'createacct-yourpassword-ph' => 'Parol daxil edin',
-'yourpasswordagain' => 'Parolu təkrar yazın:',
+'yourpasswordagain' => 'Parolu təkrar daxil edin:',
 'createacct-yourpasswordagain' => 'Parolu təsdiqlə',
 'createacct-yourpasswordagain-ph' => 'Parolu təkrar daxil edin',
 'remembermypassword' => 'Məni bu kompyuterdə xatırla (maksimum $1 {{PLURAL:$1|gün|gün}})',
@@ -527,15 +527,13 @@ Siz {{SITENAME}} saytını anonim olaraq istifadə etməyə davam edə bilər v
 'notloggedin' => 'Daxil olmamısınız',
 'userlogin-noaccount' => 'İstifadəçi hesabınız yoxdur?',
 'userlogin-joinproject' => '{{SITENAME}} qoşulun',
-'nologin' => "İstifadəçi hesabınız yoxdur? '''$1'''.",
-'nologinlink' => 'hesab açın',
+'nologin' => 'İstifadəçi hesabınız yoxdur? $1.',
+'nologinlink' => 'Hesab yaradın',
 'createaccount' => 'Hesab aç',
-'gotaccount' => "Giriş hesabınız varsa '''$1'''.",
+'gotaccount' => "İstifadəçi hesabınız varmı? '''$1'''.",
 'gotaccountlink' => 'Daxil olun',
 'userlogin-resetlink' => 'Daxilolma məlumatlarınızı unutmusunuz?',
 'userlogin-resetpassword-link' => 'Parolu unutdunuzmu?',
-'helplogin-url' => 'Help:Sistemə daxil ol',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|daxil olma haqqında yardım alın]]',
 'userlogin-loggedin' => 'Siz artıq {{GENDER:$1|$1}} kimi daxil olmusunuz.
 Aşağıdakı formadan istifadə edərək, bağqa bir istifadəçi kimi daxil ola bilərsiniz.',
 'userlogin-createanother' => 'Başqa bir istifadəçi hesabı yarat',
@@ -627,6 +625,9 @@ Yeni cəhd etməzdən əvvəl bir qədər gözləyin.',
 'suspicious-userlogout' => 'Sizin çıxış üçün cəhdiniz uğursuz alındı. Bu, brouzerin yaxud proksi-keşləmənin düzgün işləməməsindən qaynaqlanır.',
 'createacct-another-realname-tip' => 'Gərçək adınız istəyə bağlıdır.
 Əgər gərçək adınızı göstərsəniz, çalışmalarınıza müraciət etmək üçün istifadə ediləcəkdir.',
+'pt-login' => 'Daxil ol',
+'pt-createaccount' => 'Akkaunt yarat',
+'pt-userlogout' => 'Çıxış',
 
 # Email sending
 'php-mail-error-unknown' => 'PHP-nin mail() funksiyasında naməlum xəta',
@@ -643,7 +644,7 @@ Sistemə daxil olmanı yekunlaşdırmaq üçün yeni parolu bura yazmalısınız
 'newpassword' => 'Yeni parol:',
 'retypenew' => 'Yeni parolu təkrar yazın:',
 'resetpass_submit' => 'Parol yaradın və sistemə daxil olun',
-'changepassword-success' => 'Parolunuz dəyişdirldi! Hazırda sistemə daxil olursunuz...',
+'changepassword-success' => 'Sizin parol uğurla dəyişdirildi!',
 'resetpass_forbidden' => 'Parolu dəyişmək mümkün deyil',
 'resetpass-no-info' => 'Bu səhifəni birbaşa açmaq üçün sistemə daxil olmalısınız.',
 'resetpass-submit-loggedin' => 'Parolu dəyiş',
@@ -735,9 +736,8 @@ Belə IP ünvan bir neçə fərd tərəfindən istifadədə ola bilər.
 'noarticletext' => 'Hal-hazırda bu səhifə boşdur. Başqa səhifələrdə eyni adda səhifəni [[Special:Search/{{PAGENAME}}| axtara]], əlaqəli qeydlərə
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} baxa],
 və ya səhifəni [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaktə]</span> edə bilərsiniz.',
-'noarticletext-nopermission' => 'Hal-hazırda bu səhifə boşdur. Başqa səhifələrdə eyni adda səhifəni [[Special:Search/{{PAGENAME}}| axtara]], əlaqəli qeydlərə
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} baxa],
-və ya səhifəni [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaktə]</span> edə bilərsiniz.',
+'noarticletext-nopermission' => 'Hal-hazırda bu səhifə boşdur. Başqa səhifələrdə eyni adlı səhifəni [[Special:Search/{{PAGENAME}}| axtara]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} əlaqəli qeydlərə baxa],
+və ya səhifəni [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaktə edə bilərsiniz]</span>, lakin sizin bu məqaləni yaratmaq hüququnuz yoxdur.',
 'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" istifadəçi adı qeydiyyata alınmayıb.
 Əgər siz bu səhifəni yaratmaq/redaktə etmək istəyirsinizsə, xahiş edirik bunu yoxlayın.',
 'userpage-userdoesnotexist-view' => '"$1" istifadəçi hesabı qeydiyyatda deyil',
@@ -755,7 +755,7 @@ Bloklama qeydlərinin sonuncusu aşağıda göstərilmişdir:',
 '''Bu hələ yaddaşda saxlanılmayıb!'''",
 'updated' => '(yeniləndi)',
 'note' => "'''Qeyd:'''",
-'previewnote' => "'''Bu yalnız sınaq göstərişidir; dəyişikliklər hal-hazırda qeyd edilməmişdir!'''",
+'previewnote' => '<strong>Unutmayın ki, bu yalnız sınaq göstərişidir.</strong> Dəyişiklikləriniz hal-hazırda qeyd edilməmişdir!',
 'previewconflict' => 'Bu sınaq göstərişidir və yaddaşda saxlayacağınız təqdirdə mətnin redaktə səhifəsinin yuxarı hissəsində nəticənin necə olacağını göstərir.',
 'session_fail_preview' => "'''Üzr istəyirik! Sizin redaktəniz saxlanılmadı. Serverdə identifikasiyanızla bağlı problemlər yaranmışdır. Lütfən bir daha təkrar edin. Problem həll olunmazsa hesabınızdan çıxın və yenidən daxil olun.'''",
 'editing' => 'Redaktə $1',
@@ -816,6 +816,7 @@ Belə ki, bu adda səhifə artıq mövcuddur.',
 'post-expand-template-inclusion-warning' => "'''DİQQƏT!''' Daxil edilən şablonların həcmi həddindən artıq böyükdür.
 Bəzi şablonlar əlavə olunmayacaq.",
 'post-expand-template-inclusion-category' => 'Şablonun daxil olduğu səhifələrin ölçüsü böyükdür.',
+'post-expand-template-argument-warning' => '<strong>Diqqət:</strong> bu səhifədə açılma ölçüsü həddən artıq böyük olan ən azı bir şablon arqumenti var. Həmin arqumentlər buraxılıb.',
 'post-expand-template-argument-category' => 'Şablonlarda buraxılmış arqumentlərin mövcud olduğu səhifələr',
 'parser-template-loop-warning' => '[[$1]]: Şablonda düyün tapıldı',
 'parser-template-recursion-depth-warning' => '($1) Şablonda dərinlik limiti keçildi',
@@ -841,15 +842,13 @@ $3 tərəfindən verilən səbəb ''$2''",
 'revision-info' => '$2 tərəfindən yaradılmış $1 tarixli dəyişiklik',
 'previousrevision' => '←Əvvəlki versiya',
 'nextrevision' => 'Sonrakı versiya→',
-'currentrevisionlink' => 'Hal-hazırkı versiyanı göstər',
+'currentrevisionlink' => 'Hal-hazırkı versiya',
 'cur' => 'hh',
 'next' => 'sonrakı',
 'last' => 'son',
 'page_first' => 'birinci',
 'page_last' => 'sonuncu',
-'histlegend' => 'Fərqləri seçmə və göstərmə: müqayisə etmək istədiyiniz versiyaların yanındakı radio qutularına işarə qoyun və daxil etmə düyməsinə (enter+a) və ya "müqayisə et" düyməsinə vurun.
-
-Açıqlama: <strong>({{int:cur}})</strong> = hal-hazırkı versiya ilə olan fərqlər, <strong>({{int:last}})</strong> = əvvəlki versiya ilə olan fərqlər, <strong>{{int:minoreditletter}}</strong> = kiçik redaktələr.</span>',
+'histlegend' => "Fərqləri seç: müqayisə etmək istədiyiniz versiyaların yanındakı dairəyə işarə qoyun və Enter və ya '''{{int:compare-submit}}''' düyməsinə basın.<br />İzah: <strong>({{int:cur}})</strong> = hal-hazırkı versiya ilə olan fərqlər, <strong>({{int:last}})</strong> = əvvəlki versiya ilə olan fərqlər, <strong>{{int:minoreditletter}}</strong> = kiçik redaktələr.",
 'history-fieldset-title' => 'Tarixçəni nəzərdən keçir',
 'history-show-deleted' => 'Yalnız silinənlər',
 'histfirst' => 'Ən əvvəlki',
@@ -860,7 +859,7 @@ Açıqlama: <strong>({{int:cur}})</strong> = hal-hazırkı versiya ilə olan fə
 # Revision feed
 'history-feed-title' => 'Redaktə tarixçəsi',
 'history-feed-description' => 'Vikidə bu səhifənin dəyişikliklər tarixçəsi',
-'history-feed-item-nocomment' => '$1-dən $2-yə',
+'history-feed-item-nocomment' => '$1 $2-də',
 'history-feed-empty' => 'Axtardığınız səhifə mövcud deyil.
 Çox guman ki, bu səhifə silinib və ya onun adı dəyişdirilib.
 Vikidə buna bənzər səhifələri [[Special:Search|axtarmağa]] cəhd edin.',
@@ -949,6 +948,7 @@ $1",
 
 # Diffs
 'history-title' => '"$1" səhifəsinin tarixçəsi',
+'difference-title' => '"$1" səhifəsinin versiyaları arasındakı fərqlər',
 'difference-multipage' => '(Səhifələr arasında fərq)',
 'lineno' => 'Sətir $1:',
 'compareselectedversions' => 'Seçilən versiyaları müqayisə et',
@@ -970,7 +970,7 @@ $1",
 'shown-title' => 'Səhifə üçün $1 {{PLURAL:$1|nəticə|nəticəyə}} bax',
 'viewprevnext' => 'Göstər ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''Bu vikidə \"[[:\$1]]\" adında səhifə mövcuddur'''",
-'searchmenu-new' => "'''Bu vikidə \"[[:\$1]]\" səhifəsini yarat!'''",
+'searchmenu-new' => '<strong>Bu vikidə "[[:$1]]" səhifəsini yarat!</strong> {{PLURAL:$2|0=|Həmçinin, axtarışınız əsasında çıxan səhifəyə baxın.|Həmçinin, axtarışınız əsasında çıxan nəticələrə baxın.}}',
 'searchprofile-articles' => 'Məqalələr',
 'searchprofile-project' => 'Kömək və Layihə səhifələri',
 'searchprofile-images' => 'Multimedia',
@@ -992,7 +992,7 @@ $1",
 'search-interwiki-more' => '(yenə)',
 'search-relatedarticle' => 'əlaqədar',
 'searcheverything-enable' => 'Ad aralığında axtar:',
-'searchrelated' => 'əlaqədar',
+'searchrelated' => 'əlaqəli',
 'searchall' => 'bütün',
 'showingresults' => "Aşağıda #'''$2''' ilə başlayan {{PLURAL:$1|'''$1'''-ə qədər}} nəticə göstərilib.",
 'showingresultsnum' => "Aşağıda #'''$2''' ilə başlayan {{PLURAL:$3|'''$3'''}} nəticə göstərilib.",
@@ -1069,7 +1069,7 @@ $1",
 'prefs-custom-js' => 'Xüsusi JavaScript',
 'prefs-common-css-js' => 'Bütün skinlər üçün ümumi CSS/JavaScript:',
 'prefs-emailconfirm-label' => 'E-poçtun təsdiqlənməsi:',
-'youremail' => 'E-məktub *',
+'youremail' => 'E-məktub:',
 'username' => 'İstifadəçi adı:',
 'uid' => 'İstifadəçi ID:',
 'prefs-memberingroups' => 'Üzvü olduğu {{PLURAL:$1|qrup|qrup}}:',
@@ -1091,8 +1091,8 @@ HTML kodu yoxla.',
 'prefs-help-realname' => 'Həqiqi adınızı daxil etmək məcburi deyil.
 Bu seçimi etdiyiniz halda, adınız redaktələrinizə görə müəlliflik hüququnuzun tanınması üçün istifadə ediləcək.',
 'prefs-help-email' => 'E-poçt ünvanınızı daxil etmək məcburi deyil.
-Bu parolunuzu unutduğunuz halda Sizə yeni parol göndərməyə imkan verir.
-Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadəçi və ya istifadəçi müzakirəsi səhifələriniz vasitəsi ilə əlaqə yaratmalarını seçə bilərsiniz.',
+Bu, parolunuzu unutduğunuz halda, sizə yeni parol göndərməyə imkan verir.',
+'prefs-help-email-others' => 'Həmçinin, istifadəçi və ya müzakirə səhifənizdəki link vasitəsilə başqa istifadəçilərin sizinlə əlaqə yaratmasını seçə bilərsiniz. Bu halda sizin e-poçt ünvanınız heç kimə görünməyəcək.',
 'prefs-help-email-required' => 'Elektron ünvan tələb olunur.',
 'prefs-info' => 'Əsas məlumatlar',
 'prefs-i18n' => 'Beynəlxalqlaşdırma',
@@ -1265,18 +1265,18 @@ Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadə
 'recentchanges-label-bot' => 'Bu redaktə bot tərəfindən edilmişdir',
 'recentchanges-label-unpatrolled' => 'Bu redaktə hələ nəzərdən keçirilməmişdir',
 'recentchanges-legend-newpage' => '$1 - yeni səhifə',
-'rcnotefrom' => "Aşağıda '''$2'''-dən ('''$1'''-ə qədər) dəyişikliklər sadalanmışdır.",
+'rcnotefrom' => 'Aşağıda <strong>$2</strong>-dən bu yana olan dəyişikliklər göstərilib (<strong>$1</strong>-dən çox olmayaraq).',
 'rclistfrom' => '$1 vaxtından başlayaraq yeni dəyişiklikləri göstər',
 'rcshowhideminor' => 'Kiçik redaktələri $1',
 'rcshowhidebots' => 'Botları $1',
 'rcshowhideliu' => 'Qeydiyyatlı istifadəçiləri $1',
 'rcshowhideanons' => 'Anonim istifadəçiləri $1',
-'rcshowhidepatr' => 'Nəzarət edilən redaktələri $1',
+'rcshowhidepatr' => 'Yoxlanılmış redaktələri $1',
 'rcshowhidemine' => 'Mənim redaktələrimi $1',
 'rclinks' => 'Son $2 gün ərzindəki son $1 dəyişikliyi göstər <br />$3',
 'diff' => 'fərq',
 'hist' => 'tarixçə',
-'hide' => 'Gizlət',
+'hide' => 'Gizlə',
 'show' => 'Göstər',
 'minoreditletter' => 'k',
 'newpageletter' => 'Y',
@@ -1287,7 +1287,7 @@ Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadə
 'rc-change-size' => '$1',
 'rc-change-size-new' => '$1 üçün dəyişiklikdən sonrakı həcm: {{PLURAL:$1|bayt|bayt|bayt}}',
 'newsectionsummary' => '/* $1 */ yeni bölmə',
-'rc-enhanced-expand' => 'Detalları göstər (JavaScript istifadə edir)',
+'rc-enhanced-expand' => 'Ətraflı göstər',
 'rc-enhanced-hide' => 'Redaktələri gizlət',
 'rc-old-title' => 'Əvvəlcə "$1" kimi yaradılmış',
 
@@ -1325,7 +1325,7 @@ Məqaləyə fayl yerləşdirmək üçün aşağıdaki formalardan birini istifad
 'upload-preferred' => 'İcazə verilən fayl tipləri: $1.',
 'upload-prohibited' => 'İcazə verilməyən fayl tipləri: $1.',
 'uploadlog' => 'yükləmə qeydi',
-'uploadlogpage' => 'Yükləmə qeydi',
+'uploadlogpage' => 'Yükləmə qeydləri',
 'uploadlogpagetext' => 'Aşağıda ən yeni yükləmə jurnal qeydləri verilmişdir.',
 'filename' => 'Fayl adı',
 'filedesc' => 'Xülasə',
@@ -1359,7 +1359,7 @@ Lütfən <strong>[[:$1]]</strong> keçidini yoxlayın və bu faylı yükləmək
 [[$1|thumb]]',
 'uploadwarning' => 'Yükləmə xəbərdarlığı',
 'savefile' => 'Faylı qeyd et',
-'uploadedimage' => 'yükləndi "[[$1]]"',
+'uploadedimage' => '"[[$1]]" yükləndi',
 'overwroteimage' => '"[[$1]]"-in yeni versiyası yükləndi',
 'uploaddisabled' => 'Yükləmə baş tutmadı',
 'copyuploaddisabled' => 'URL-dən yükləmə baş tutmadı.',
@@ -1457,7 +1457,7 @@ $1',
 'filehist-help' => 'Faylın əvvəlki versiyasını görmək üçün gün/tarix bölməsindəki tarixləri tıqlayın.',
 'filehist-deleteall' => 'hamısını sil',
 'filehist-deleteone' => 'sil',
-'filehist-revert' => 'əvvəlki vəziyyətinə',
+'filehist-revert' => 'geri qaytar',
 'filehist-current' => 'indiki',
 'filehist-datetime' => 'Tarix/Vaxt',
 'filehist-thumb' => 'Kiçik şəkil',
@@ -1473,9 +1473,11 @@ $1',
 'nolinkstoimage' => 'Bu fayla keçid verən səhifə yoxdur.',
 'linkstoimage-redirect' => '$1 (fayl istiqamətləndirilir) $2',
 'sharedupload' => 'Bu fayl $1-dandır və ola bilsin ki, başqa layihələrdə də istifadə edilir.',
+'sharedupload-desc-here' => 'Bu fayl $1dandır və başqa layihələrdə də istifadə edilə bilər.
+Faylın [$2 təsvir səhifəsindəki] məlumat aşağıda göstərilib.',
 'uploadnewversion-linktext' => 'Bu faylın yeni versiyasını yüklə',
 'shared-repo-from' => '$1-dən',
-'shared-repo' => 'ümumi anbar',
+'shared-repo' => 'ümumi fayl anbarı',
 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
 
 # File reversion
@@ -1695,7 +1697,7 @@ Fərdi hüquqlar haqqında əlavə məlumatı [[{{MediaWiki:Listgrouprights-help
 'listgrouprights-group' => 'Qrup',
 'listgrouprights-rights' => 'Hüquqlar',
 'listgrouprights-helppage' => 'Help:Qrup hüquqları',
-'listgrouprights-members' => '(üzvləri)',
+'listgrouprights-members' => '(üzvlər)',
 'listgrouprights-right-display' => '<span class="listgrouprights-granted">$1 <code>($2)</code></span>',
 'listgrouprights-right-revoked' => '<span class="listgrouprights-revoked">$1 <code>($2)</code></span>',
 'listgrouprights-addgroup' => '{{PLURAL:$2|Qrupu}} əlavə et: $1',
@@ -1709,7 +1711,7 @@ Fərdi hüquqlar haqqında əlavə məlumatı [[{{MediaWiki:Listgrouprights-help
 
 # Email user
 'mailnologin' => 'Ünvan yoxdur',
-'emailuser' => 'İstifadəçiyə e-məktub yolla',
+'emailuser' => 'İstifadəçiyə e-məktub göndər',
 'emailpage' => 'İstifadəçiyə e-məktub yolla',
 'usermailererror' => 'Elektron poçtla məlumat göndərilən zaman xəta baş vermişdir:',
 'defemailsubject' => '"$1" adlı istifadəçidən {{SITENAME}} e-məktubu',
@@ -1737,8 +1739,8 @@ Fərdi hüquqlar haqqında əlavə məlumatı [[{{MediaWiki:Listgrouprights-help
 'usermessage-template' => 'MediaWiki:İstifadəçi müzakirəsi',
 
 # Watchlist
-'watchlist' => 'İzlədiyim səhifələr',
-'mywatchlist' => 'İzlədiyim səhifələr',
+'watchlist' => 'İzləmə siyahısı',
+'mywatchlist' => 'İzləmə siyahısı',
 'watchlistfor2' => '$1 $2 üçün',
 'nowatchlist' => 'İzləmə siyahınız böşdur.',
 'watchlistanontext' => 'Lütfən, izlədiyiniz səhifələri görmək və ya redaktə etmək üçün $1.',
@@ -1754,7 +1756,7 @@ Fərdi hüquqlar haqqında əlavə məlumatı [[{{MediaWiki:Listgrouprights-help
 'unwatchthispage' => 'İzləmə',
 'notanarticle' => 'Səhifə boşdur',
 'notvisiblerev' => 'Başqa istifadıçinin son dəyişikliyi silinib',
-'watchlist-details' => 'Müzakirə səhifələrini çıxmaq şərtilə {{PLURAL:$1|$1 səhifəni|$1 səhifəni}} izləyirsiniz.',
+'watchlist-details' => 'İzləmə siyahınızda, müzakirə səhifələrini çıxmaq şərtilə, {{PLURAL:$1|$1 səhifə|$1 səhifə}} var.',
 'wlheader-enotif' => ' E-məktubla bildiriş aktivdir.',
 'wlheader-showupdated' => "Son ziyarətinizdən sonra edilən dəyişikliklər '''qalın şriftlərlə''' göstərilmişdir.",
 'watchmethod-recent' => 'yeni dəyişikliklər izlənilən səhifələr üçün yoxlanılır',
@@ -1762,7 +1764,7 @@ Fərdi hüquqlar haqqında əlavə məlumatı [[{{MediaWiki:Listgrouprights-help
 'watchlistcontains' => 'İzləmə siyahınızda $1 {{PLURAL:$1|səhifə|səhifə}} var.',
 'iteminvalidname' => "'$1' ilə bağlı problem, adı düzgün deyil...",
 'wlshowlast' => 'Bunları göstər: son $1 saatı $2 günü $3',
-'watchlist-options' => 'İzlədiyim səhifələrin nizamlamaları',
+'watchlist-options' => 'İzləmə siyahısının nizamlamaları',
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'İzlənilir...',
@@ -1842,7 +1844,7 @@ Sonuncu silinmələrə bax: $2.',
 
 # Protect
 'protectlogpage' => 'Mühafizə etmə qeydləri',
-'protectedarticle' => 'mühafizə edildi "[[$1]]"',
+'protectedarticle' => '"[[$1]]" səhifəsi mühafizə edildi',
 'modifiedarticleprotection' => '"[[$1]]" səhifəsi üçün mühafizə səviyyəsi dəyişildi',
 'unprotectedarticle' => 'mühafizə kənarlaşdırıldı "[[$1]]"',
 'protect-title' => '"$1" üçün mühafizə səviyyəsinin dəyişdirilməsi',
@@ -1940,12 +1942,12 @@ $1',
 'blanknamespace' => '(Ana)',
 
 # Contributions
-'contributions' => 'İstifadəçi fəaliyyəti',
+'contributions' => '{{GENDER:$1|İstifadəçinin}} fəaliyyəti',
 'contributions-title' => '$1 istifadəçi fəaliyyətləri',
 'mycontris' => 'Fəaliyyətim',
-'contribsub2' => '$1 ($2)',
+'contribsub2' => '{{GENDER:$3|$1}} ($2) adlı istifadəçinin fəaliyyəti',
 'nocontribs' => 'Bu kriteriyaya uyğun redaktələr tapılmadı',
-'uctop' => '(son)',
+'uctop' => '(hal-hazırkı)',
 'month' => 'Ay',
 'year' => 'Axtarışa bu tarixdən etibarən başla:',
 
@@ -1964,7 +1966,7 @@ Bloklama qeydlərinin sonuncusu aşağıda göstərilmişdir:',
 Bloklama qeydlərinin sonuncusu aşağıda göstərilmişdir:',
 'sp-contributions-search' => 'Fəaliyyətləri axtar',
 'sp-contributions-username' => 'IP-ünvanı və ya istifadəçi adı:',
-'sp-contributions-toponly' => 'Yalnız ən son dəyişiklikləri göstər',
+'sp-contributions-toponly' => 'Son redaktə olan dəyişiklikləri göstər',
 'sp-contributions-submit' => 'Axtar',
 
 # What links here
@@ -1972,7 +1974,7 @@ Bloklama qeydlərinin sonuncusu aşağıda göstərilmişdir:',
 'whatlinkshere-title' => '"$1" məqaləsinə keçid verən səhifələr',
 'whatlinkshere-page' => 'Səhifə:',
 'linkshere' => "'''[[:$1]]''' səhifəsinə istinad edən səhifələr:",
-'nolinkshere' => "'''[[:$1]]''' səhifəsinə keçid verən səhifə yoxdur.",
+'nolinkshere' => '<strong>[[:$1]]</strong> səhifəsinə keçid verən səhifə yoxdur.',
 'nolinkshere-ns' => "Seçilmiş ad aralığında heç bir səhifə '''[[:$1]]''' səhifəsinə keçid vermir.",
 'isredirect' => 'İstiqamətləndirmə səhifəsi',
 'istemplate' => 'daxil olmuş',
@@ -2066,13 +2068,13 @@ $1 adlı istifadəçinin bloklanma səbəbi: "$2"',
 'blocklog-showlog' => 'Bu istifadəçi daha əvvəl bloklanmışdır. Bloklama gündəliyi referans üçün aşağıda göstərilib:',
 'blocklog-showsuppresslog' => 'Bu istifadəçi daha əvvəl bloklanmışdır. Bloklama gündəliyi referans üçün aşağıda göstərilib:',
 'blocklogentry' => 'tərəfindən [[$1]] bloklandı, blok müddəti: $2 $3',
-'reblock-logentry' => '[[$1]] üçün son tarixi $2 $3 olmaq üzərə blok parametrləri dəyişdirildi',
+'reblock-logentry' => '[[$1]] üçün bloklama parametrlərini, başa çatma tarixi $2 $3 olmaqla, dəyişdirdi',
 'blocklogtext' => 'İstifadəçilərin bloklanması və blokun götürülməsi siyahısı.
 Avtomatik bloklanmış IP-ünvanlar burada göstərilmir.
 Hal-hazırkı [[Special:BlockList|qadağaların və bloklamaların siyahısı]]na bax.',
 'unblocklogentry' => '$1 üzərindəki blok götürüldü',
 'block-log-flags-anononly' => 'yalnız qeydiyyatsız istifadəçilər',
-'block-log-flags-nocreate' => 'Yeni hesab yaratma bloklanıb',
+'block-log-flags-nocreate' => 'yeni hesab yaratma bloklanıb',
 'block-log-flags-noautoblock' => 'avtobloklama qeyri-mümkündür',
 'block-log-flags-noemail' => 'E-mail bloklanıb',
 'block-log-flags-nousertalk' => 'Müzakirə səhifəsini redaktə edə bilməz.',
@@ -2244,7 +2246,7 @@ Zəhmət olmasa başqa ad seçin.',
 'tooltip-ca-unprotect' => 'Bu səhifənin mühafizəsini kənarlaşdır',
 'tooltip-ca-delete' => 'Bu səhifəni sil',
 'tooltip-ca-undelete' => 'Bu səhifəni silinmədən əvvəlki halına qaytarın',
-'tooltip-ca-move' => 'Bu səhifənin adını dəyiş',
+'tooltip-ca-move' => 'Səhifənin adını dəyiş',
 'tooltip-ca-watch' => 'Bu səhifəni izlə',
 'tooltip-ca-unwatch' => 'Bu səhifənin izlənməsini bitir',
 'tooltip-search' => '{{SITENAME}} səhifəsində axtar',
@@ -2391,7 +2393,7 @@ $1',
 'file-info-size' => '$1 × $2 piksel, fayl həcmi: $3, MIME növü: $4',
 'file-nohires' => 'Daha dəqiq versiyası yoxdur.',
 'svg-long-desc' => 'SVG fayl, nominal olaraq $1 × $2 piksel, faylın ölçüsü: $3',
-'show-big-image' => 'Daha yüksək keyfiyyətli şəkil',
+'show-big-image' => 'Faylın əsli',
 'show-big-image-preview' => 'Sınaq göstərişi ölçüsü: $1.',
 'show-big-image-other' => "Dig'r {{PLURAL:$2|nəticə|nəticələr}}: $1.",
 'show-big-image-size' => '$1 × $2 piksel',
@@ -2795,7 +2797,7 @@ Variants for Chinese language
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'hamısını',
-'namespacesall' => 'bütün',
+'namespacesall' => 'hamısı',
 'monthsall' => 'hamısı',
 
 # Email address confirmation
@@ -2870,11 +2872,11 @@ Variants for Chinese language
 # Watchlist editing tools
 'watchlisttools-view' => 'Siyahıdakı səhifələrdə edilən dəyişikliklər',
 'watchlisttools-edit' => 'İzlədiyim səhifələri göstər və redaktə et',
-'watchlisttools-raw' => 'Mətn kimi redaktə et',
+'watchlisttools-raw' => 'Adi mətn kimi redaktə et',
 
 # Core parser functions
 'unknown_extension_tag' => '"$1" Naməlum ayırma teqi',
-'duplicate-defaultsort' => '\'\'\'Diqqət:\'\'\' Ehtimal edilən "$2" klassifikasiya açarı əvvəlki "$1" klassifikasiya açarını keçərsiz edir.',
+'duplicate-defaultsort' => '<strong>Diqqət:</strong> Susmaya görə "$2" çeşidləmə açarı susmaya görə əvvəlki "$1" çeşidləmə açarını inkar edir.',
 
 # Special:Version
 'version' => 'Versiya',
@@ -2926,6 +2928,16 @@ Variants for Chinese language
 'blankpage' => 'Boş səhifə',
 'intentionallyblankpage' => 'Bu səhifə xüsusilə boşdur.',
 
+# External image whitelist
+'external_image_whitelist' => ' #Bu sətiri olduğu kimi saxlayın<pre>
+#Burada ardıcıl ifadələrin fraqmentlərini yerləşdirin (// simvolları arasında yerləşən hissələri).
+#Onlar kənar şəkillərin URL ünvanları ilə tutuşdurulacaq.
+#Uyğun gələnlər şəkil kimi, yerdə qalanlar isə şəkillərə keçid kimi göstəriləcək.
+#Sətirlərdən # simvolu ilə başlayanlar şərh hesab ediləcək.
+#Sətirlər böyük-kiçik şriftə həsass deyillər.
+
+#Ardıcıl ifadələrin fraqmentlərini bu sətirdən yuxarıda yerləşdirin. Bu sətiri olduğu kimi saxlayın.</pre>',
+
 # Special:Tags
 'tags' => 'Mümkün dəyişiklik etiketləri',
 'tag-filter' => '[[Special:Tags|Etiket]] süzgəci:',
index 79d1e1d..9a693eb 100644 (file)
@@ -12,6 +12,7 @@
  * @author Calak
  * @author E THP
  * @author Ebrahimi-amir
+ * @author Ebraminio
  * @author Erdemaslancan
  * @author Mousa
  * @author Shirayuki
@@ -244,7 +245,6 @@ $messages = array(
 'vector-action-protect' => 'قورو',
 'vector-action-undelete' => 'سیلمگی قایتار',
 'vector-action-unprotect' => 'قوروماغی دَییشدیر',
-'vector-simplesearch-preference' => 'ساده‌لشدیریلمیش آختاریش چوبوغو (یالنیز Vector دَری‌سینده)',
 'vector-view-create' => 'یارات',
 'vector-view-edit' => 'دَییشدیر',
 'vector-view-history' => 'گئچمیشه باخ',
@@ -521,8 +521,6 @@ $2',
 'gotaccountlink' => 'گیریش',
 'userlogin-resetlink' => 'گیریش بیلگیلرینیزی اونوتموسونوز؟',
 'userlogin-resetpassword-link' => 'رمزینیزی صیفیرلایین',
-'helplogin-url' => 'Help:ایچری گیرمک',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ایچری گیرمگه یاردیم]]',
 'createacct-join' => 'آشاغیدا بیلگیلرینیزی داخیل ائدین.',
 'createacct-emailrequired' => 'ایمیل آدرسی',
 'createacct-emailoptional' => 'ایمیل آدرسی (ایستگه باغلی)',
@@ -992,8 +990,6 @@ $3 طرفین‌دن وئریلن سبب '$2",
 'revdelete-show-file-submit' => 'بلی',
 'revdelete-selected' => "[[:$1]] صحیفه‌سی‌نین {{PLURAL:$2|سئچیلمیش نوسخه لری|سئچیلمیش نوسخه لری }}:'",
 'logdelete-selected' => "'ژورنالین {{PLURAL:$1|سئچیلمیش قئیدی|سئچیلمیش قئیدلری}}:'",
-'revdelete-text' => "' 'سیلینئن رئویزیون‌لار و حادثه‌لر هله صحیفه کئچمیشینده و گونده‌لیک‌لرده گؤرونه‌جک، لاکین ترکیبین پارچا‌لاری عمومی اولا‌راق ائریشیلئمئیئجئکتیر.'
-{{SITENAME}} سایتین‌داکی دیگر ایداره‌چی‌لر گیزلی مزمونا چاتا بیلر و علاوه محدودیت‌لر آیارلانمادییسا بو اینتئرفئیس ایله گئری گتیره بیلر.",
 'revdelete-confirm' => 'خاهیش ائدیریک، بونو ائتمک ایستدیگینیزی، نتیجه‌لرینی آنلادیغینیزی، و بونو [[{{MediaWiki:Policy-url}}| پرینسیپ‌لره]] گؤره ائدیر اولدوغونوزو تسدیق ائدین.',
 'revdelete-suppress-text' => "ساخلاما 'یالنیز آشاغی‌داکی حال‌لار اوچون ایستیفاده ائدیلمه‌لی‌دیر:
 * اویگون‌سوز فردی معلومات
index ba84fc8..33d791e 100644 (file)
@@ -310,7 +310,6 @@ $messages = array(
 'vector-action-protect' => 'Һаҡларға',
 'vector-action-undelete' => 'Тергеҙергә',
 'vector-action-unprotect' => 'Һаҡлауҙы үҙгәртергә',
-'vector-simplesearch-preference' => 'Ябайлаштырылған эҙләү тәҡдимдәрен ҡулланырға ("Векторлы" күренеш өсөн генә)',
 'vector-view-create' => 'Яһау',
 'vector-view-edit' => 'Үҙгәртергә',
 'vector-view-history' => 'Тарихты ҡарау',
@@ -596,8 +595,6 @@ $2',
 'gotaccountlink' => 'Үҙегеҙ менән таныштырығыҙ',
 'userlogin-resetlink' => 'Танылыу мәғлүмәттәрен оноттоғоҙмо?',
 'userlogin-resetpassword-link' => 'Серһүҙҙе ҡабул итмәү',
-'helplogin-url' => 'Help:Системаға танылыу',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Help with logging in]]Системаға инеүҙә ярҙам',
 'userlogin-loggedin' => ' Һеҙ {{GENDER:$1|$1}} булараҡ индегеҙ инде. Башҡа файҙаланыусы булып инер өсөн аҫтағы ҡалыпты ҡулланығыҙ.',
 'userlogin-createanother' => 'Башҡа иҫәп яҙмаһын булдырырға',
 'createacct-join' => 'Аҫта мәғлүмәттәрегеҙҙе яҙығыҙ.',
@@ -1081,8 +1078,6 @@ $3 белдергән сәбәп: ''$2''",
 'revdelete-show-file-submit' => 'Эйе',
 'revdelete-selected' => "'''[[:$1]] битенең {{PLURAL:$2|1=һайланған версияһы|һайланған версиялары}}:'''",
 'logdelete-selected' => "'''Яҙманың {{PLURAL:$1|1=һайланған яҙыуы|һайланған яҙыуҙары}}:'''",
-'revdelete-text' => "'''Биттәрҙең юйылған версиялары һәм ваҡиғалар, бит тарихында һәм яҙмаларҙа күрһәтеләсәк, ләкин уларҙың эстәлектәренең бер өлөшө ябай ҡулланыусыларға асыҡ булмаясаҡ.'''
-{{SITENAME}} проектының хакимдәре йәшерен эстәлеккә керә һәм өҫтәмә сикләүҙәр ҡуйылған осраҡтарҙан тыш, ошо уҡ арайөҙ аша тергеҙә аласаҡтар.",
 'revdelete-confirm' => 'Зинһар, был ғәмәлде үтәргә теләүегеҙҙе, буласаҡ һөҙөмтәләрҙә аңлауығыҙҙы, [[{{MediaWiki:Policy-url}}|ҡағиҙәләр]] буйынса эшләүегеҙҙе раҫлағыҙ.',
 'revdelete-suppress-text' => "Йәшереү '''тик''' киләһе осраҡтарҙа ғына башҡарыла:
 
index 9df2e4d..4a880f2 100644 (file)
@@ -208,7 +208,6 @@ $messages = array(
 'vector-action-protect' => 'Schitzn',
 'vector-action-undelete' => 'Wiederherstön',
 'vector-action-unprotect' => 'freigeem',
-'vector-simplesearch-preference' => 'Daweiterte Suachvurschläg aktivirn (netter Vector)',
 'vector-view-create' => 'Aufbaun',
 'vector-view-edit' => 'Werkln',
 'vector-view-history' => 'Gschicht oschaugn',
@@ -647,8 +646,6 @@ Du kauhstas auhschauh, waunn du wüst. Nahernte Auhgoom steengern im [{{fullurl:
 Details stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].</div>',
 'rev-delundel' => 'zoagn / vastecka',
 'revdelete-nooldid-title' => 'Koa Version ogem',
-'revdelete-text' => "'''Der Inhalt oder andere Bestandteile gelöschter Versionen sind nicht mehr öffentlich einsehbar, erscheinen jedoch weiterhin als Einträge in der Versionsgeschichte.'''
-{{SITENAME}}-Administratoren können den entfernten Inhalt oder andere entfernte Bestandteile weiterhin einsehen und wiederherstellen, es sei denn, es wurde festgelegt, dass die Zugangsbeschränkungen auch für Administratoren gelten.",
 'revdel-restore' => 'Siachtborkeit endan',
 'pagehist' => 'Versiónsgschicht',
 'deletedhist' => 'Gléschde Versiónen',
index 4d671d7..719816b 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Daniel Harahap
+ * @author John Vandenberg
  * @author Marvel manalu
  * @author Naval Scene
  * @author Stephensuleeman
@@ -23,7 +24,6 @@ $fallback = 'id';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Ondolhon panait',
-'tog-justify' => 'Padasip paragrap',
 'tog-hideminor' => 'Tabunihon editing na metmet di parubaan na imbaru',
 'tog-hidepatrolled' => 'Bunihon panotaan na metmet di parubaan na imbaru',
 'tog-numberheadings' => 'Bahen nomor judul otomatis',
@@ -238,7 +238,7 @@ $messages = array(
 'nstab-mediawiki' => 'Tona',
 'nstab-template' => 'Templat',
 'nstab-help' => 'Alaman pangurupion',
-'nstab-category' => 'Hategori',
+'nstab-category' => 'Kategori',
 
 # General errors
 'error' => 'Hasesega',
@@ -438,7 +438,6 @@ Parubaan na binahenmu dang di simpan dope!",
 'recentchanges-label-minor' => 'Sada panotaan na metmet',
 'recentchanges-label-bot' => 'Panotaan on diulahon bot',
 'recentchanges-label-unpatrolled' => 'Panotaan on ndang dipamanat dope',
-'rcnote' => "Na di toru on ima {{PLURAL:$1|'''1'''|'''$1'''}} perubaan  di bagasan {{PLURAL:$2|'''1''' ari|'''$2''' ari}} na parpudi, olat ni $4 pukul $5.",
 'rclistfrom' => 'Patuduhon parubaan na imbaru mamungka sian $1',
 'rcshowhideminor' => '$1 panotaan na metmet',
 'rcshowhidebots' => '$1 bot',
index 8077ba6..9a0fa9e 100644 (file)
@@ -835,10 +835,6 @@ Legend: (cur) = تفاوتان گون هنوکین نسخه,
 'revdelete-show-file-submit' => 'بله',
 'revdelete-selected' => "'''{{PLURAL:$2|بازبینی انتخابی|بازبینی ان انتخابی}} چه [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|رویداد آمار انتخابی|رویداد ان آمار انتخابی}}:'''",
-'revdelete-text' => "'''حذفین بازبینی آن و رویداد ان هنگت ته تاریح و آمار صفحه جاه کاینت، بله لهتی چه محتوا آيان په عام قابل دسترسی نه بنت.'''
-
-دگه مدیران ته {{SITENAME}} هنگت نوننت په پناهین محتوا دسترسیش بیت و توننت آیء چه طریق همی دستبری آی> تریننت، مگر شی که گیشین محدودیت بلیت.
-لطفا تایید کنیت که شما لوٹیت ای کارءَ انجام دهید و چه آیی نتیجه سهی گیت و ای کار هم داب په [[{{MediaWiki:Policy-url}}|سیاست]]انجام دهید",
 'revdelete-suppress-text' => "فرونشانی بایدن '''فقط''' په جهلگین موارد استفاده بیت:
 * اطلاعات نامناسب شخصی
 *: ''نشانی لوگ، شماره تلفن، شماره تامین اجتماعی و دگه.''",
index dac65f5..583d8b6 100644 (file)
@@ -260,7 +260,6 @@ $messages = array(
 'vector-action-protect' => 'Protektaran',
 'vector-action-undelete' => 'Bawion sa pagkapara',
 'vector-action-unprotect' => 'Ribayan an proteksyon',
-'vector-simplesearch-preference' => 'Paganahon an pinagyanong panukod sa paghahanap (Pansolong kublit sana)',
 'vector-view-create' => 'Magmukna',
 'vector-view-edit' => 'Liwatón',
 'vector-view-history' => 'Tanawon sa historiya',
@@ -547,8 +546,6 @@ Dae malingaw na liwaton an saimong [[Special:Preferences|{{SITENAME}} mga kamuya
 'gotaccountlink' => 'Maglaog',
 'userlogin-resetlink' => 'Nakalingaw ka sa panlaog mong detalye?',
 'userlogin-resetpassword-link' => 'Nalingawan mo an saimong pasa-taramon?',
-'helplogin-url' => 'Help:Paglalaog',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Tabang sa paglalaog]]',
 'userlogin-loggedin' => 'Ika nakalaog na tabi bilang si {{GENDER:$1|$1}}.
 Gamita an porma sa ibaba sa paglaog bilang ibang paragamit.',
 'userlogin-createanother' => 'Magmukna nin ibang panindog',
@@ -641,6 +638,9 @@ Pakilaog sana tabi nin sarong tugmadong koreo o pabayae na mayong laman an surat
 'suspicious-userlogout' => 'An hinahagad mong magluwas pinagpundo nin huli ta ini gayod pinagpadara sa paagi nin sarong pasang kilyaw o proksing hilom.',
 'createacct-another-realname-tip' => 'An totoong pangaran opsyonal.
 Kun gustuhon mong itao ini, ini paggagamiton sa pagtatao nin pagkakabistohan kan paragamit para sa saindang mga kaggibohan.',
+'pt-login' => 'Maglaog',
+'pt-createaccount' => 'Magmukna nin panindog',
+'pt-userlogout' => 'Magluwas',
 
 # Email sending
 'php-mail-error-unknown' => 'Bakong bantog na kasalaan sa PHP mail() function.',
@@ -649,8 +649,7 @@ Kun gustuhon mong itao ini, ini paggagamiton sa pagtatao nin pagkakabistohan kan
 
 # Change password dialog
 'changepassword' => 'Ribayan an sekretong panlaog',
-'resetpass_announce' => 'Ika nakalaog na na igwang sarong temporaryong koda sa e-koreo.
-Tanganing tapuson an paglalaog, ika kaipong magkaag nin sarong baguhon na sekretong panlaog digdi:',
+'resetpass_announce' => 'Sa pagtapos kan paglalaog mo, ika kaipuhanan na magkaag nin sarong baguhong pasa-taramon.',
 'resetpass_text' => '<!-- Magdagdag nin teksto digdi -->',
 'resetpass_header' => 'Ribayan an panindog na sekretong panlaog',
 'oldpassword' => 'Dating sekretong panlaog:',
@@ -664,8 +663,12 @@ Tanganing tapuson an paglalaog, ika kaipong magkaag nin sarong baguhon na sekret
 'resetpass-submit-cancel' => 'I-kansela',
 'resetpass-wrong-oldpass' => 'Saláng temporaryo o presenteng sekretong panlaog.
 Matriumpo mo nang nailaog an sekretong panlaog o nakua an bàgong temporaryong sekretong panlaog.',
+'resetpass-recycled' => 'Tabi man pakibaguha an saimong pasa-taramon na magin sarong bagay na ibahon kesa sa ngunyan mong pasa-taramon.',
+'resetpass-temp-emailed' => 'Ika nakapaglaog na igwa nin sarong temporaryong koda na pinag-esurat saimo. Sa pagtapos kan paglalaog mo, ika kaipuhan na magkaag nin sarong baguhong pasa-taramon digde:',
 'resetpass-temp-password' => 'Temporaryong sekretong panlaog:',
 'resetpass-abort-generic' => 'Pagliwat kan sikretong panlaog ipinagpauntok kan sarong ekstensyon.',
+'resetpass-expired' => 'An saimong pasa-taramon nagpalso na. Tabi man pakikaag nin sarong baguhong pasa-taramon tanganing makalaog ka.',
+'resetpass-expired-soft' => 'An saimong pasa-taramon nagpalso na, asin kinakaipuhan na baguhan. Tabi man pakipili nin sarong baguhong pasa-taramon ngunyan, o i-klik an kanselaron sa pagbago kaini aro-atyan.',
 
 # Special:PasswordReset
 'passwordreset' => 'Pakibago kan sekretong panlaog',
@@ -1046,8 +1049,6 @@ Ika puwedeng makakatanaw kaining diff; mga detalye puwedeng mananagboan sa [{{fu
 'revdelete-show-file-submit' => 'Iyo tabi',
 'revdelete-selected' => "'''{{PLURAL:$2|Selected revision|Mga piniling pagbabago}} kan [[:$1]]'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Selected log event|Mga piniling talaan kan mga pangyayari}}:'''",
-'revdelete-text' => "'''Pinagpurang mga pagbabago asin mga pangyayari mahihiling pa man sa historiyang pahina asin mga talaan, pero an mga parte kan saindang laman dae puwedeng magamit kan publiko.'''
-An ibang administrador sa {{SITENAME}} puwede pa man makagamit sa pinagtagong laman asin balewalaon an pagpura kaini giraray sa paagi nin kaparehong panlaog-olay, laen lang kun may kadagdagang pangilin an inilapat.",
 'revdelete-confirm' => 'Pakikumpirma tabi na ika tuyong gumibo kaini, na saimong naintindihan an mga konsekuwensiya, asin ta ika pinaghihimo ini na uyon sa [[{{MediaWiki:Policy-url}}|an palisiya]].',
 'revdelete-suppress-text' => "An paglulubog dapat '''sana''' magagamit para sa minasunod na mga kaso:
 *Potensiyal na libeloso an impormasyon
index 0ac06c3..f4f0e30 100644 (file)
@@ -97,11 +97,11 @@ $messages = array(
 'tog-hidepatrolled' => 'Без паказу ўхваленых правак у нядаўніх змяненнях',
 'tog-newpageshidepatrolled' => 'Без паказу ўхваленых правак у пераліку новых старонак',
 'tog-extendwatchlist' => 'Паказваць усе змяненні, а не толькі апошнія',
-'tog-usenewrc' => 'Групаваць змены старонкі ў спісах апошніх зменаў і назіранняў (патрабуе JavaScript)',
+'tog-usenewrc' => 'Групаваць змены па старонках у апошніх зменах і спісе назірання',
 'tog-numberheadings' => 'Аўта-нумараваць падзагалоўкі',
-'tog-showtoolbar' => 'Паказваць рэдактарскую стужку (Яваскрыпт)',
-'tog-editondblclick' => 'Ð\9fÑ\80аÑ\9eка Ñ\81Ñ\82аÑ\80онак Ð¿Ð° Ð¿Ð°Ð´Ð²Ð¾Ð¹Ð½Ñ\8bм Ð¿Ñ\81Ñ\82Ñ\80Ñ\8bкÑ\83 (ЯваÑ\81кÑ\80Ñ\8bпÑ\82)',
-'tog-editsectiononrightclick' => 'Праўка падраздзелаў па правым пстрыку на загалоўку (Яваскрыпт)',
+'tog-showtoolbar' => 'Паказваць панэль інструментаў рэдактара',
+'tog-editondblclick' => 'Ð\9fÑ\80аÑ\9eка Ñ\81Ñ\82аÑ\80онак Ð¿Ð° Ð´Ð²Ð°Ð¹Ð½Ñ\8bм Ð¿Ñ\81Ñ\82Ñ\80Ñ\8bкÑ\83',
+'tog-editsectiononrightclick' => 'Правіць падраздзелы па правым пстрыку на загалоўку',
 'tog-rememberpassword' => 'Памятаць уваходныя даныя ў гэтым браўзеры (не даўжэй за $1 {{PLURAL:$1|дзень|дні|дзён}})',
 'tog-watchcreations' => 'Дабаўляць створаныя мною старонкі і файлы ў мой спіс назірання',
 'tog-watchdefault' => 'Дабаўляць старонкі і файлы пасля маіх правак у мой спіс назірання',
@@ -110,18 +110,18 @@ $messages = array(
 'tog-minordefault' => 'Пачынаць кожную праўку як дробную',
 'tog-previewontop' => 'Папярэдні паказ — над рэдактарскім полем',
 'tog-previewonfirst' => 'Папярэдні паказ пры першай праўцы',
-'tog-enotifwatchlistpages' => 'СлаÑ\86Ñ\8c Ð¼Ð½Ðµ Ñ\8dл.поÑ\88Ñ\82Ñ\83, ÐºÐ°Ð»Ñ\96 Ð¼Ñ\8fнÑ\8fеÑ\86Ñ\86а Ñ\81Ñ\82аÑ\80онка Ñ\9e Ð¼Ð°Ñ\96м Ñ\81пÑ\96Ñ\81е Ð½Ð°Ð·Ñ\96Ñ\80анага',
+'tog-enotifwatchlistpages' => 'СлаÑ\86Ñ\8c Ð¼Ð½Ðµ Ñ\8dл.поÑ\88Ñ\82Ñ\83, ÐºÐ°Ð»Ñ\96 Ð¼Ñ\8fнÑ\8fеÑ\86Ñ\86а Ñ\81Ñ\82аÑ\80онка Ñ\9e Ð¼Ð°Ñ\96м Ñ\81пÑ\96Ñ\81е Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
 'tog-enotifusertalkpages' => 'Слаць эл.пошту пра мены ў маёй размоўнай старонцы',
-'tog-enotifminoredits' => 'СлаÑ\86Ñ\8c Ñ\8dл.поÑ\88Ñ\82Ñ\83 Ð¿Ñ\80а Ð´Ñ\80обнÑ\8bÑ\8f Ð¿Ñ\80аÑ\9eкÑ\96',
+'tog-enotifminoredits' => 'Ð\9fаведамÑ\8fÑ\86Ñ\8c Ð¼Ð½Ðµ Ð½Ð° Ñ\8dл.поÑ\88Ñ\82Ñ\83 Ð¿Ñ\80а Ð´Ñ\80обнÑ\8bÑ\8f Ð¿Ñ\80аÑ\9eкÑ\96 Ñ\81Ñ\82аÑ\80онак Ñ\96 Ñ\84айлаÑ\9e',
 'tog-enotifrevealaddr' => 'Не скрываць майго адрасу эл.пошты ў паведамленнях',
 'tog-shownumberswatching' => 'Паказваць колькасць назіральнікаў',
 'tog-oldsig' => 'Існуючы подпіс:',
 'tog-fancysig' => 'Апрацоўваць подпіс як вікі-тэкст (без аўтаматычнай спасылкі)',
-'tog-uselivepreview' => 'Жывы перадпаказ (Яваскрыпт, эксперыментальн.)',
+'tog-uselivepreview' => 'Жывы перадпаказ (эксперыментальн.)',
 'tog-forceeditsummary' => 'Папярэджваць пра пустое поле тлумачэння праўкі',
-'tog-watchlisthideown' => 'Не паказваць у назіраным сваіх правак',
-'tog-watchlisthidebots' => 'Не паказваць у назіраным правак, зробленых робатамі',
-'tog-watchlisthideminor' => 'Не паказваць у назіраным дробных правак',
+'tog-watchlisthideown' => 'Не паказваць маіх правак са спіса назірання',
+'tog-watchlisthidebots' => 'Не паказваць праўкі ботаў са спіса назірання',
+'tog-watchlisthideminor' => 'Не паказваць дробных правак са спіса назірання',
 'tog-watchlisthideliu' => 'Не паказваць правак зарэгістраваных удзельнікаў у артыкулах са спіса назірання',
 'tog-watchlisthideanons' => 'Не паказваць ананімных правак у артыкулах са спіса назірання',
 'tog-watchlisthidepatrolled' => 'Не паказваць ухваленых правак у артыкулах са спіса назірання',
@@ -130,6 +130,7 @@ $messages = array(
 'tog-showhiddencats' => 'Паказаць схаваныя катэгорыі',
 'tog-norollbackdiff' => 'Не паказваць розніцу ў выніку адкату',
 'tog-useeditwarning' => 'Папярэдзіць мяне, калі я пакідаю старонку з незахаванымі праўкамі',
+'tog-prefershttps' => 'Заўсёды выкарыстоўваць абароненае злучэнне пасля ўваходу ў сістэму',
 
 'underline-always' => 'Заўсёды',
 'underline-never' => 'Ніколі',
@@ -230,8 +231,8 @@ $messages = array(
 'newwindow' => '(адкрыецца ў новым акне)',
 'cancel' => 'Нічога',
 'moredotdotdot' => 'Яшчэ...',
-'morenotlisted' => 'Ð\91олÑ\8cÑ\88 Ð½Ñ\96Ñ\87ога Ð½Ñ\8fма...',
-'mypage' => 'УлаÑ\81наÑ\8f Ñ\81таронка',
+'morenotlisted' => 'Ð\93Ñ\8dÑ\82Ñ\8b Ñ\81пÑ\96Ñ\81 Ð½Ðµ Ð¿Ð¾Ñ\9eнÑ\8b.',
+'mypage' => 'Старонка',
 'mytalk' => 'Размовы',
 'anontalk' => 'Размова для гэтага IP',
 'navigation' => 'Навігацыя',
@@ -253,7 +254,6 @@ $messages = array(
 'vector-action-protect' => 'Ахова',
 'vector-action-undelete' => 'Аднавіць',
 'vector-action-unprotect' => 'Змяніць ахову',
-'vector-simplesearch-preference' => 'Уключыць пашыраны пошук прапаноў (толькі для тэмы Vector)',
 'vector-view-create' => 'Стварыць',
 'vector-view-edit' => 'Правіць',
 'vector-view-history' => 'Паказаць гісторыю',
@@ -332,7 +332,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'Пра {{GRAMMAR:вінавальны|{{SITENAME}}}}',
 'aboutpage' => 'Project:Пра {{GRAMMAR:вінавальны|{{SITENAME}}}}',
-'copyright' => 'Матэрыял даступны на ўмовах $1.',
+'copyright' => 'Матэрыял даступны на ўмовах $1 (калі не пазначана іншае).',
 'copyrightpage' => '{{ns:project}}:Аўтарскія правы',
 'currentevents' => 'Актуальныя падзеі',
 'currentevents-url' => 'Project:Актуальныя падзеі',
@@ -453,7 +453,8 @@ $1',
 'protectedpagetext' => 'Старонка ахоўваецца, каб нельга было яе правіць.',
 'viewsourcetext' => 'Можна бачыць і капіраваць зыходны тэкст гэтай старонкі:',
 'viewyourtext' => "Вы можаце праглядзець і скапіяваць зыходны тэкст '''вашых правак''' на гэтай старонцы:",
-'protectedinterface' => 'Старонка ахоўваецца, таму што ўваходзіць у склад інтэрфейсу гэтай праграмы.',
+'protectedinterface' => 'Старонка ўтрымлівае інтэрфейснае паведамленне праграмнага забеспячэння гэтага вікі-праекта і ахоўваецца, каб прадухіліць вандалізм.
+Каб дабавіць ці змяніць пераклады ва ўсіх вікі-праектах, калі ласка, выкарыстоўвайце сайт лакалізацыі MediaWiki [//translatewiki.net/ translatewiki.net].',
 'editinginterface' => "'''Увага:''' Вы правіце старонку, якая ўтрымлівае тэкст карыстальніцкага інтэрфейсу.
 Яе змяненне паўплывае на вонкавы выгляд праграмы для ўсіх удзельнікаў.
 Праект лакалізацыі MediaWiki: [//translatewiki.net/wiki/Main_Page?setlang=be translatewiki.net].",
@@ -465,6 +466,7 @@ $2',
 'ns-specialprotected' => 'Не дазволена правіць старонкі ў прасторы назваў {{ns:special}}.',
 'titleprotected' => "Назва засцерагаецца ад стварэння; ахова пастаўлена ўдзельнікам: [[User:$1|$1]].
 Тлумачэнне пастаноўкі пад ахову: ''$2''.",
+'exception-nologin' => 'Вы не ўвайшлі ў сістэму',
 
 # Virus scanner
 'virus-badscanner' => "Некарэктная канфігурацыя: невядомы антывірусны сканер: ''$1''",
@@ -481,6 +483,7 @@ $2',
 'yourname' => 'Імя ўдзельніка',
 'userlogin-yourname' => 'Імя ўліковага запісу',
 'userlogin-yourname-ph' => 'Увядзіце імя вашага ўліковага запісу',
+'createacct-another-username-ph' => 'Увядзіце імя карыстальніка',
 'yourpassword' => 'Пароль',
 'userlogin-yourpassword' => 'Пароль',
 'userlogin-yourpassword-ph' => 'Увядзіце ваш пароль',
@@ -501,18 +504,28 @@ $2',
 'logout' => 'Выйсці з сістэмы',
 'userlogout' => 'Выйсці з сістэмы',
 'notloggedin' => 'Не ўвайшоў',
+'userlogin-noaccount' => 'Не маеце ўліковага запісу?',
 'nologin' => 'Не маеце рахунку? $1.',
 'nologinlink' => 'Завесці рахунак',
 'createaccount' => 'Стварыць рахунак',
 'gotaccount' => "Ужо маеце рахунак? '''$1'''.",
 'gotaccountlink' => 'Увайсці ў сістэму',
 'userlogin-resetlink' => 'Забыліся даныя для ўваходу?',
+'userlogin-resetpassword-link' => 'Забылі пароль?',
+'createacct-emailrequired' => 'Адрас электроннай пошты',
+'createacct-emailoptional' => 'Адрас электроннай пошты (неабавязкова)',
+'createacct-email-ph' => 'Увядзіце ваш адрас электроннай пошты',
+'createacct-another-email-ph' => 'Увядзіце адрас электроннай пошты',
 'createaccountmail' => 'праз эл.пошту',
 'createaccountreason' => 'Прычына:',
+'createacct-reason' => 'Прычына',
+'createacct-imgcaptcha-ph' => 'Увядзіце тэкст, які вы бачыце вышэй',
+'createacct-submit' => 'Стварыць уліковы запіс',
 'badretype' => 'Уведзеныя паролі не аднолькавыя.',
 'userexists' => 'Такое імя ўдзельніка ўжо занятае.
 Калі ласка, выбярыце іншае імя.',
 'loginerror' => 'Памылка ўваходу',
+'createacct-error' => 'Памылка стварэння ўліковага запісу',
 'createaccounterror' => 'Не ўдалося стварыць рахунак: $1',
 'nocookiesnew' => 'Рахунак быў створаны, але ў сістэму вы не ўвайшлі. {{SITENAME}} карыстаецца квіткамі (кукі), каб апрацоўваць уваходы ўдзельнікаў, а гэтая функцыянальнасць адключана ў вашым браўзеры. Уключыце квіткі ў браўзеры, тады ўваходзьце са сваімі новымі імем удзельніка і паролем.',
 'nocookieslogin' => '{{SITENAME}} карыстаецца квіткамі (кукі), каб пазнаваць удзельнікаў. У вашым браўзеры квіткі не дазволены. Дазвольце іх працу і паспрабуйце ізноў.',
@@ -530,7 +543,7 @@ $2',
 'passwordtooshort' => 'Трэба, каб у паролі было найменей {{PLURAL:$1|1 знак|$1 знакаў}}.',
 'password-name-match' => 'Ваш пароль павінен адрознівацца ад імя карыстальніка.',
 'password-login-forbidden' => 'Выкарыстанне гэтага імя карыстальніка і пароля было забаронена.',
-'mailmypassword' => 'Ð\90даÑ\81лаÑ\86Ñ\8c Ð½Ð¾Ð²Ñ\8b Ð¿Ð°Ñ\80олÑ\8c Ñ\8dл.поÑ\88Ñ\82ай',
+'mailmypassword' => 'СкÑ\96нÑ\83Ñ\86Ñ\8c Ð¿Ð°Ñ\80олÑ\8c',
 'passwordremindertitle' => 'Нагаданне пра пароль ад {{SITENAME}}',
 'passwordremindertext' => 'Нехта (магчыма, што вы, з адрасу IP $1) папрасіў выслаць новы пароль для пляцоўкі {{SITENAME}} ($4). Для ўдзельніка "$2" быў створаны тымчасовы пароль: "$3".
 Калі вы хацелі менавіта гэтага, то ўвайдзіце ў сістэму і выберыце сабе новы пароль. Тымчасовы пароль будзе дзейным на працягу {{PLURAL:$5|аднаго дня|$5 дзён}}.
@@ -564,6 +577,9 @@ $2',
 'login-abort-generic' => 'Няўдалая спроба ўвайсці ў сістэму',
 'loginlanguagelabel' => 'Мова: $1',
 'suspicious-userlogout' => 'Ваш запыт на выхад быў адмоўлены, паколькі ён выглядае як накіраваны са зламанага браўзера або кэшаванне проксі-сервераў.',
+'pt-login' => 'Увайсці',
+'pt-createaccount' => 'Стварыць уліковы запіс',
+'pt-userlogout' => 'Выйсці',
 
 # Email sending
 'php-mail-error-unknown' => 'Невядомая памылка ў функцыі PHP-пошты',
@@ -571,13 +587,13 @@ $2',
 
 # Change password dialog
 'changepassword' => 'Пароль',
-'resetpass_announce' => 'Ð\92Ñ\8b Ñ\9eвайÑ\88лÑ\96 Ñ\9e Ñ\81Ñ\96Ñ\81Ñ\82Ñ\8dмÑ\83 Ð¿Ð°Ð´ Ñ\82Ñ\8bмÑ\87аÑ\81овÑ\8bм Ð¿Ð°Ñ\80олем, Ð¿Ñ\80Ñ\8bÑ\81ланÑ\8bм Ñ\8dл.поÑ\88Ñ\82ай. Ð\9aаб Ð¿Ñ\80авÑ\96лÑ\8cна Ð°Ñ\84оÑ\80мÑ\96Ñ\86Ñ\8c Ñ\83ваÑ\85од, Ð½Ð°Ð»ÐµÐ¶Ñ\8bÑ\86Ñ\8c Ð²Ñ\8bзнаÑ\87Ñ\8bÑ\86Ñ\8c Ð½Ð¾Ð²Ñ\8b Ð¿Ð°Ñ\80олÑ\8c Ð²Ð¾Ñ\81Ñ\8c Ñ\82Ñ\83Ñ\82:',
+'resetpass_announce' => 'Ð\9aаб Ð·Ð°Ð²Ñ\8fÑ\80Ñ\88Ñ\8bÑ\86Ñ\8c Ñ\83ваÑ\85од Ñ\83 Ñ\81Ñ\96Ñ\81Ñ\82Ñ\8dмÑ\83, Ð\92Ñ\8b Ð¿Ð°Ð²Ñ\96ннÑ\8b Ñ\9eÑ\81Ñ\82анавÑ\96Ñ\86Ñ\8c Ð½Ð¾Ð²Ñ\8b Ð¿Ð°Ñ\80олÑ\8c.',
 'resetpass_header' => 'Змяніць пароль рахунку',
 'oldpassword' => 'Стары пароль:',
 'newpassword' => 'Новы пароль:',
 'retypenew' => 'Новы пароль паўторна:',
 'resetpass_submit' => 'Наставіць пароль і ўвайсці',
-'changepassword-success' => 'Ваш пароль паспяхова зменены! Цяпер уваходзім...',
+'changepassword-success' => 'Ваш пароль паспяхова зменены!',
 'resetpass_forbidden' => 'Не дазволена мяняць паролі',
 'resetpass-no-info' => 'Трэба ўвайсці ў сістэму, каб звяртацца да гэтай старонкі наўпрост.',
 'resetpass-submit-loggedin' => 'Змяніць пароль',
@@ -815,8 +831,8 @@ $2
 'postedit-confirmation' => 'Вашая праўка была захаваная.',
 'edit-already-exists' => 'Не ўдалося стварыць новую старонку.
 Такая ўжо існуе.',
-'editwarning-warning' => 'Ð\92Ñ\8bÑ\85ад Ð· Ð³Ñ\8dÑ\82ай Ñ\81Ñ\82аÑ\80онкÑ\96 Ð¿Ñ\80Ñ\8bвÑ\8fдзе Ð´Ð° Ñ\81Ñ\82Ñ\80аÑ\82Ñ\8b Ð¿Ñ\80авак, Ñ\8fкÑ\96Ñ\8f Ð²Ñ\8b Ð·Ñ\80абÑ\96лі. 
-Калі Вы зарэгістраваныя ў сістэме, Вы можаце адключыць гэта папярэджанне ў закладцы "Праца" Вашых настаўленняў.',
+'editwarning-warning' => 'Ð\9fеÑ\80аÑ\85од Ð½Ð° Ñ\96нÑ\88Ñ\83Ñ\8e Ñ\81Ñ\82аÑ\80онкÑ\83 Ð¼Ð¾Ð¶Ð° Ð¿Ñ\80Ñ\8bвеÑ\81Ñ\86Ñ\96 Ð´Ð° Ñ\81Ñ\82Ñ\80аÑ\82Ñ\8b Ð¿Ñ\80авак, Ð·Ñ\80обленÑ\8bÑ\85 Ð\92амі. 
+Калі Вы ўвайшлі ў сістэму, Вы можаце адключыць гэта папярэджанне ў раздзеле "{{int:prefs-editing}}" Вашых настроек.',
 
 # Content models
 'content-model-wikitext' => 'вікі-тэкст',
@@ -922,8 +938,6 @@ $2
 'revdelete-show-file-submit' => 'Так',
 'revdelete-selected' => "'''{{PLURAL:$2|Выбраная версія|Выбраныя версіі}} [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Выбраны запіс|Выбраныя запісы}} журналу:'''",
-'revdelete-text' => "'''Сцёртыя версіі і падзеі надалей будуць паказвацца ў гісторыі старонкі і ў журналах, але часткі іх зместу не будуць даступныя для публікі.'''
-Іншыя адміністратары пляцоўкі {{SITENAME}} надалей змогуць бачыць схаваны змест і аднаўляць яго праз гэты самы інтэрфейс, калі не будзе ўведзена дадатковых абмежаванняў.",
 'revdelete-confirm' => 'Пацвердзіце, што вы жадаеце гэта зрабіць, што вы разумееце наступствы, і што вы робіце гэта ў адпаведнасці з [[{{MediaWiki:Policy-url}}|арганізацыйнымі правіламі]].',
 'revdelete-suppress-text' => "Заглушэнне належыць ужываць '''выключна''' ў наступных выпадках:
 * Недапушчальная асабістая інфармацыя
@@ -1335,14 +1349,25 @@ $1",
 'recentchanges-label-bot' => 'Праўка была зробленая праграмай-робатам',
 'recentchanges-label-unpatrolled' => 'Праўка яшчэ не атрымала адзнакі ўхваленасці (за ёй не сочыць "патруль")',
 'recentchanges-legend-newpage' => '$1 - новая старонка',
-'rcnotefrom' => 'Ð\9dÑ\96жÑ\8dй Ð·Ð½Ð°Ñ\85одзÑ\8fÑ\86Ñ\86а Ð·Ð¼ÐµÐ½Ñ\8b Ð· <b>$2</b> (да <b>$1</b> Ð½Ð° Ñ\81Ñ\82аÑ\80онкÑ\83).',
+'rcnotefrom' => 'Ð\9dÑ\96жÑ\8dй Ð·Ð½Ð°Ñ\85одзÑ\8fÑ\86Ñ\86а Ð·Ð¼ÐµÐ½Ñ\8b Ð· <b>$2</b> (паказана Ð½Ðµ Ð±Ð¾Ð»Ñ\8cÑ\88 Ñ\87Ñ\8bм <b>$1</b>).',
 'rclistfrom' => 'Паказаць змены з $1',
-'rcshowhideminor' => '$1 дробных правак',
+'rcshowhideminor' => '$1 дробныя праўкі',
+'rcshowhideminor-hide' => 'Схаваць',
 'rcshowhidebots' => '$1 робатаў',
+'rcshowhidebots-show' => 'Паказаць',
+'rcshowhidebots-hide' => 'Схаваць',
 'rcshowhideliu' => '$1 пазнаных удзельнікаў',
+'rcshowhideliu-show' => 'Паказаць',
+'rcshowhideliu-hide' => 'Схаваць',
 'rcshowhideanons' => '$1 ананімных удзельнікаў',
-'rcshowhidepatr' => '$1 ухваленых правак',
-'rcshowhidemine' => '$1 ўласных правак',
+'rcshowhideanons-show' => 'Паказаць',
+'rcshowhideanons-hide' => 'Схаваць',
+'rcshowhidepatr' => '$1 ухваленыя праўкі',
+'rcshowhidepatr-show' => 'Паказаць',
+'rcshowhidepatr-hide' => 'Схаваць',
+'rcshowhidemine' => '$1 уласныя праўкі',
+'rcshowhidemine-show' => 'Паказаць',
+'rcshowhidemine-hide' => 'Схаваць',
 'rclinks' => 'Паказаць апошнія $1 змен за мінулыя $2 дзён<br />$3',
 'diff' => 'розн.',
 'hist' => 'гіст.',
@@ -1356,8 +1381,8 @@ $1",
 'rc_categories_any' => 'Усе',
 'rc-change-size-new' => '$1 {{PLURAL:$1|байт|байта|байтаў}} пасля змены',
 'newsectionsummary' => '/* $1 */ новы падраздзел',
-'rc-enhanced-expand' => 'Ð\9fаказваÑ\86Ñ\8c Ð¿Ð°Ð´Ñ\80абÑ\8fзнаÑ\81Ñ\86Ñ\96 (паÑ\82Ñ\80абÑ\83еÑ\86Ñ\86а Ð¯Ð²Ð°Ñ\81кÑ\80Ñ\8bпÑ\82)',
-'rc-enhanced-hide' => 'Не паказваць падрабязнасцяў',
+'rc-enhanced-expand' => 'Ð\9fаказаÑ\86Ñ\8c Ð¿Ð°Ð´Ñ\80абÑ\8fзнаÑ\81Ñ\86Ñ\96',
+'rc-enhanced-hide' => 'Не паказваць падрабязнасцей',
 
 # Recent changes linked
 'recentchangeslinked' => 'Звязаныя праўкі',
@@ -1585,8 +1610,7 @@ $1',
 'upload_source_file' => ' (файл на вашай машыне)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Гэтая службовая старонка паказвае ўсе загружаныя файлы.
-Пры адборы па ўдзельніку, паказваюцца толькі нядаўнія загрузкі гэтага ўдзельніка.',
+'listfiles-summary' => 'Гэтая службовая старонка паказвае ўсе загружаныя файлы.',
 'listfiles_search_for' => 'Знайсці назву выявы:',
 'imgfile' => 'файл',
 'listfiles' => 'Усе файлы',
@@ -1771,6 +1795,7 @@ $1',
 'protectedpages' => 'Старонкі пад аховай',
 'protectedpages-indef' => 'Толькі бестэрміновыя аховы',
 'protectedpages-cascade' => 'Толькі каскадныя засцераганні',
+'protectedpages-noredirect' => 'Схаваць перанакіраванні',
 'protectedpagesempty' => 'Ніякія старонкі такім чынам не ахоўваюцца.',
 'protectedtitles' => 'Назвы пад аховай',
 'protectedtitlesempty' => 'Няма назваў, якія зараз бы ахоўваліся з такімі параметрамі.',
@@ -1826,6 +1851,7 @@ $1',
 'allpagesprefix' => 'Паказваць старонкі з прэфіксам:',
 'allpagesbadtitle' => 'Гэтая назва старонкі недапушчальная або ўтрымлівае між-моўны або між-вікавы прэфікс. Магчыма, у назве ёсць знак ці знакі, якія нельга ўжываць у назвах.',
 'allpages-bad-ns' => 'На {{SITENAME}} прастора назваў "$1" не падтрымліваецца.',
+'allpages-hide-redirects' => 'Схаваць перанакіраванні',
 
 # Special:Categories
 'categories' => 'Катэгорыі',
@@ -1930,12 +1956,12 @@ $1',
 'watchlistanontext' => 'Каб паглядзець ці змяніць спіс назірання, трэба $1.',
 'watchnologin' => 'Без прадстаўлення',
 'watchnologintext' => 'Каб правіць свой спіс назірання, трэба [[Special:UserLogin|ўвайсці ў сістэму]].',
-'addwatch' => 'Дадаць у назіранае',
+'addwatch' => 'Дадаць у спіс назірання',
 'addedwatchtext' => "Старонка \"[[:\$1]]\" была дададзена да [[Special:Watchlist|назіраных]] вамі.
 Змяненні, якія адбудуцца з гэтай старонкай і з Размовай пра яе, будуць паказвацца там, і старонка будзе '''вылучацца шрыфтам''' у [[Special:RecentChanges|спісе нядаўніх змяненняў]], каб лягчэй пазнаваць яе.
 
 Калі вы не пажадаеце больш назіраць за гэтай старонкай, націсніце \"Не назіраць\" у бакоўцы.",
-'removewatch' => 'Выдаліць са спісу назірання',
+'removewatch' => 'Выдаліць са спіса назірання',
 'removedwatchtext' => 'Старонка "[[:$1]]" была вынята з вашага [[Special:Watchlist|спіса назірання]].',
 'watch' => 'Назіраць',
 'watchthispage' => 'Назіраць за гэтай старонкай',
@@ -2010,8 +2036,8 @@ $UNWATCHURL
 Пацвердзіце свой намер зрабіць гэта, сваё разуменне наступстваў, і што вы робіце гэта ў адпаведнасці з [[{{MediaWiki:Policy-url}}|палітыкай (асноўнымі правіламі)]].',
 'actioncomplete' => 'Завершана аперацыя',
 'actionfailed' => 'Памылка дзеяння',
-'deletedtext' => '"$1" было выдалена.
\91аÑ\87 $2 Ð¿Ð° Ð¶Ñ\83Ñ\80нал Ð½Ñ\8fдаÑ\9eнÑ\96Ñ\85 Ð²Ñ\8bдаленнÑ\8fÑ\9e.',
+'deletedtext' => 'Старонка "$1" была выдалена.
\97апÑ\96Ñ\81Ñ\8b Ð°Ð± Ð½Ñ\8fдаÑ\9eнÑ\96Ñ\85 Ð²Ñ\8bдаленнÑ\8fÑ\85 Ð³Ð». Ñ\9e $2.',
 'dellogpage' => 'Журнал сціранняў',
 'dellogpagetext' => 'Ніжэй паказаны спіс самых нядаўніх сціранняў.',
 'deletionlog' => 'журнал сціранняў',
@@ -2140,7 +2166,7 @@ $UNWATCHURL
 'undeletedpage' => "'''$1 была адноўлена'''
 
 Праверце пералік нядаўніх сціранняў і аднаўленняў у [[Special:Log/delete|журнале сціранняў]].",
-'undelete-header' => 'Ð\91аÑ\87 Ð½Ñ\8fдаÑ\9eна Ñ\81Ñ\86Ñ\91Ñ\80Ñ\82Ñ\8bÑ\8f Ñ\81Ñ\82аÑ\80онкÑ\96 Ñ\9e [[Special:Log/delete|журнале сціранняў]].',
+'undelete-header' => 'Ð\9dÑ\8fдаÑ\9eна Ñ\81Ñ\86Ñ\91Ñ\80Ñ\82Ñ\8bÑ\8f Ñ\81Ñ\82аÑ\80онкÑ\96 Ð¼Ð¾Ð¶Ð½Ð° Ð¿Ð°Ð³Ð»Ñ\8fдзеÑ\86Ñ\8c Ñ\83 [[Special:Log/delete|журнале сціранняў]].',
 'undelete-search-title' => 'Пошук выдаленых старонак',
 'undelete-search-box' => 'Знайсці ў сцёртых старонках',
 'undelete-search-prefix' => 'Паказаць старонкі, пачынаючы з:',
@@ -2296,7 +2322,7 @@ $1',
 'blocklog-showlog' => '{{GENDER:$1|Гэты ўдзельнік ужо блакіраваўся|Гэта ўдзельніца ўжо блакіравалася}} раней.
 Ніжэй прыведзены журнал блакіровак:',
 'blocklog-showsuppresslog' => 'Гэты ўдзельнік ужо заблакаваны і скрыты. Журнал утойвання прыведзены ніжэй:',
-'blocklogentry' => 'пастаўлены блок на "[[$1]]", з часам трывання $2 $3',
+'blocklogentry' => 'паставіў блок на "[[$1]]", з часам трывання $2 $3',
 'reblock-logentry' => 'змененыя настройкі блока для [[$1]] з часам згасання $2 $3',
 'blocklogtext' => 'Журнал пастаноўкі і здымання блокаў. Аўтаматычна блакаваныя адрасы IP тут не паказваюцца. Спіс актуальных забарон і блокаў бач у [[Special:BlockList|спісе блокаў IP]].',
 'unblocklogentry' => 'зняты блок з $1',
@@ -3287,15 +3313,15 @@ $5
 'watchlistedit-raw-legend' => 'Правіць нефарматаваны спіс назірання',
 'watchlistedit-raw-explain' => 'Назвы старонак з ліку назіраных паказаныя ніжэй, без афармлення, адна назва на адзін радок; такім чынам, спіс можна правіць як звычайны тэкст. Па сканчэнні націсніце "{{int:Watchlistedit-raw-submit}}". Таксама гэта можна зрабіць праз [[Special:EditWatchlist|стандартны інтэрфейс]].',
 'watchlistedit-raw-titles' => 'Назвы:',
-'watchlistedit-raw-submit' => 'Абнавіць Назіранае',
+'watchlistedit-raw-submit' => 'Абнавіць спіс назірання',
 'watchlistedit-raw-done' => 'Спіс назірання абноўлены.',
 'watchlistedit-raw-added' => 'Дапісаны{{PLURAL:$1| 1 складнік|я $1 складнікаў}}:',
 'watchlistedit-raw-removed' => 'Выняты{{PLURAL:$1| 1 складнік|я $1 складнікаў}}:',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Паказаць змяненні',
-'watchlisttools-edit' => 'Паказаць назіранае',
-'watchlisttools-raw' => 'Паказаць нефарматаванае назіранае',
+'watchlisttools-edit' => 'Паказаць спіс назірання',
+'watchlisttools-raw' => 'Паказаць нефарматаваны спіс назірання',
 
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|размовы]])',
index 42fcfb0..5007f97 100644 (file)
@@ -286,7 +286,7 @@ $messages = array(
 'tog-enotifrevealaddr' => 'Не хаваць мой адрас электроннай пошты ў паведамленьнях',
 'tog-shownumberswatching' => 'Паказваць колькасьць назіральнікаў',
 'tog-oldsig' => 'Цяперашні подпіс:',
-'tog-fancysig' => 'Апрацоўваць подпіс як вікі-тэкст (без аўтаматычнай спасылкі)',
+'tog-fancysig' => 'Апрацоўваць подпіс як вікітэкст (без аўтаматычнай спасылкі)',
 'tog-uselivepreview' => 'Выкарыстоўваць хуткі папярэдні прагляд (экспэрымэнтальна)',
 'tog-forceeditsummary' => 'Папярэджваць пра адсутнасьць кароткага апісаньня зьменаў',
 'tog-watchlisthideown' => 'Хаваць мае праўкі ў сьпісе назіраньня',
@@ -295,10 +295,9 @@ $messages = array(
 'tog-watchlisthideliu' => 'Хаваць праўкі зарэгістраваных удзельнікаў у сьпісе назіраньня',
 'tog-watchlisthideanons' => 'Хаваць праўкі ананімаў у сьпісе назіраньня',
 'tog-watchlisthidepatrolled' => 'Хаваць патруляваныя праўкі ў сьпісе назіраньня',
-'tog-ccmeonemails' => 'Ð\94аÑ\81Ñ\8bлаць мне копіі лістоў, якія я дасылаю іншым удзельнікам',
+'tog-ccmeonemails' => 'Ð\90дпÑ\80аÑ\9eлÑ\8fць мне копіі лістоў, якія я дасылаю іншым удзельнікам',
 'tog-diffonly' => 'Не паказваць зьмест старонкі пад параўнаньнем зьменаў',
 'tog-showhiddencats' => 'Паказваць схаваныя катэгорыі',
-'tog-noconvertlink' => 'Забараніць канвэртацыю назваў спасылак',
 'tog-norollbackdiff' => 'Не паказваць зьмены пасьля выкарыстаньня функцыі адкату',
 'tog-useeditwarning' => 'Папярэджваць мяне, калі я буду пакідаць старонку рэдагаваньня зь незахаванымі зьменамі',
 'tog-prefershttps' => 'Заўсёды карыстацца бясьпечным злучэньнем па ўваходзе ў сыстэму',
@@ -386,7 +385,7 @@ $messages = array(
 'category-empty' => "''Гэтая катэгорыя ня ўтрымлівае ні старонак, ні файлаў.''",
 'hidden-categories' => '{{PLURAL:$1|1=Схаваная катэгорыя|Схаваныя катэгорыі}}',
 'hidden-category-category' => 'Схаваныя катэгорыі',
-'category-subcat-count' => '{{PLURAL:$2|Гэтая катэгорыя зьмяшчае наступную падкатэгорыю.|Гэтая катэгорыя зьмяшчае {{PLURAL:$1|наступную $1 падкатэгорыю|наступныя $1 падкатэгорыі|наступныя $1 падкатэгорыяў}} з $2 агулам.}}',
+'category-subcat-count' => '{{PLURAL:$2|1=Гэтая катэгорыя зьмяшчае наступную падкатэгорыю.|Гэтая катэгорыя зьмяшчае {{PLURAL:$1|наступную $1 падкатэгорыю|наступныя $1 падкатэгорыі|наступныя $1 падкатэгорыяў}} з $2 агулам.}}',
 'category-subcat-count-limited' => 'У гэтай катэгорыі $1 {{PLURAL:$1|падкатэгорыя|падкатэгорыі|падкатэгорыяў}}.',
 'category-article-count' => '{{PLURAL:$2|1=Гэтая катэгорыя ўтрымлівае толькі адну старонку.|{{PLURAL:$1|Паказаная $1 старонка|Паказаныя $1 старонкі|Паказаныя $1 старонак}} гэтай катэгорыі з $2.}}',
 'category-article-count-limited' => 'У гэтай катэгорыі $1 {{PLURAL:$1|старонка|старонкі|старонак}}.',
@@ -425,7 +424,6 @@ $messages = array(
 'vector-action-protect' => 'Абараніць',
 'vector-action-undelete' => 'Аднавіць',
 'vector-action-unprotect' => 'Зьмяніць абарону',
-'vector-simplesearch-preference' => 'Уключыць спрошчанае поле пошуку (толькі для афармленьня «Вэктар»)',
 'vector-view-create' => 'Стварыць',
 'vector-view-edit' => 'Рэдагаваць',
 'vector-view-history' => 'Паказаць гісторыю',
@@ -709,8 +707,6 @@ $2',
 'gotaccountlink' => 'Увайдзіце',
 'userlogin-resetlink' => 'Забыліся на зьвесткі для ўваходу?',
 'userlogin-resetpassword-link' => 'Забылі пароль?',
-'helplogin-url' => 'Help:Уваход у сыстэму',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Дапамога па ўваходзе ў сыстэму]]',
 'userlogin-loggedin' => 'Вы ўжо ўвайшлі як {{GENDER:$1|$1}}.
 Для ўваходу пад іншым удзельнікам скарыстайцеся формай унізе.',
 'userlogin-createanother' => 'Стварыць іншы рахунак',
@@ -802,6 +798,10 @@ $2',
 'suspicious-userlogout' => 'Ваш запыт на выхад з сыстэмы быў адхілены, таму што выглядае, што ён быў дасланы пашкоджаным браўзэрам альбо кэшаваным проксі-сэрвэрам.',
 'createacct-another-realname-tip' => 'Сапраўднае імя паведамляць неабавязкова.
 Калі Вы яго пазначыце, яно будзе выкарыстоўвацца для пазначэньня Вашай працы.',
+'pt-login' => 'Увайсьці',
+'pt-login-button' => 'Увайсьці',
+'pt-createaccount' => 'Стварыць рахунак',
+'pt-userlogout' => 'Выйсьці',
 
 # Email sending
 'php-mail-error-unknown' => 'Узьнікла невядомая памылка ў функцыі PHP mail()',
@@ -810,13 +810,12 @@ $2',
 
 # Change password dialog
 'changepassword' => 'Зьмяніць пароль',
-'resetpass_announce' => 'Вы ўвайшлі з дапамогай часовага паролю, дасланага праз электронную пошту.
-Для завяршэньня ўваходу ў сыстэму Вы мусіце ўвесьці тут новы пароль:',
+'resetpass_announce' => 'Для завяршэньня ўваходу ў сыстэму Вы мусіце ўвесьці новы пароль.',
 'resetpass_header' => 'Зьмяніць пароль рахунку',
 'oldpassword' => 'Стары пароль:',
 'newpassword' => 'Новы пароль:',
 'retypenew' => 'Паўтарыце новы пароль:',
-'resetpass_submit' => 'Ð\9dаÑ\81Ñ\82авÑ\96Ñ\86Ñ\8c Ð¿Ð°Ñ\80олÑ\8c Ñ\96 Ñ\83вайсьці',
+'resetpass_submit' => 'Ð\97аÑ\85аваÑ\86Ñ\8c Ð¿Ð°Ñ\80олÑ\8c Ñ\96 Ñ\9eвайсьці',
 'changepassword-success' => 'Ваш пароль быў пасьпяхова зьменены!',
 'changepassword-throttled' => 'Вы зрабілі зашмат спробаў увайсьці ў сыстэму.
 Калі ласка, пачакайце $1 перад наступнай спробай.',
@@ -826,8 +825,16 @@ $2',
 'resetpass-submit-cancel' => 'Скасаваць',
 'resetpass-wrong-oldpass' => 'Няслушны часовы альбо цяперашні пароль.
 Магчыма Вы ўжо пасьпяхова зьмянілі Ваш пароль альбо запыталі новы часовы пароль.',
+'resetpass-recycled' => 'Калі ласка, зьмяніце ваш пароль на нешта адрознае ад вашага цяперашняга паролю.',
+'resetpass-temp-emailed' => 'Вы ўвашлі з дапамогай часовага коду, які быў дасланы праз электронную пошту.
+Каб завершыць уваход, вы мусіце ўвесьці новы пароль:',
 'resetpass-temp-password' => 'Часовы пароль:',
 'resetpass-abort-generic' => 'Зьмяненьне паролю было скасаванае пашырэньнем.',
+'resetpass-expired' => 'Тэрмін дзеяньня вашага паролю скончыўся. Калі ласка, пазначце новы пароль для ўваходу ў сыстэму.',
+'resetpass-expired-soft' => 'Тэрмін дзеяньня вашага паролю скончыўся і ён патрабуе замены. Калі ласка, абярыце новы пароль цяпер або націсьніце «{{int:resetpass-submit-cancel}}», каб зьмяніць яго пазьней.',
+'resetpass-validity-soft' => 'Ваш пароль зьяўляецца некарэктным: $1
+
+Калі ласка, абярыце зараз новы пароль або націсьніце «{{int:resetpass-submit-cancel}}», каб скінуць яго пазьней.',
 
 # Special:PasswordReset
 'passwordreset' => 'Ачыстка паролю',
@@ -1208,8 +1215,9 @@ $2
 'revdelete-show-file-submit' => 'Так',
 'revdelete-selected' => "'''{{PLURAL:$2|1=Выбраная вэрсія|Выбраныя вэрсіі}} старонкі [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|1=Выбраны запіс|Выбраныя запісы}} журнала:'''",
-'revdelete-text' => "'''Выдаленыя вэрсіі і падзеі будуць паказвацца ў гісторыі старонкі і журналах, але частка іх зьместу ня будзе даступная для звычайных удзельнікаў.'''
-Іншыя адміністратары {{GRAMMAR:родны|{{SITENAME}}}} будуць мець магчымасьць прагляду зьместу і аднаўленьня старонкі праз гэты інтэрфэйс, калі ня будуць уведзеныя дадатковыя абмежаваньні.",
+'revdelete-text-text' => 'Выдаленыя вэрсіі будуць па-ранейшаму бачныя ў гісторыі старонкі, але некаторыя часткі іх зьместу будуць недаступныя для ўдзельнікаў.',
+'revdelete-text-file' => 'Выдаленыя вэрсіі файла будуць па-ранейшаму бачныя ў гісторыі старонкі, але часткі іх зьместу будуць недаступныя для ўдзельнікаў.',
+'logdelete-text' => 'Выдаленыя падзеі ў журнале будуць па-ранейшаму даступныя ў журналах, але часткі іх зьместу будуць недаступныя ўдзельнікам.',
 'revdelete-confirm' => 'Калі ласка, пацьвердзіце, што Вы сапраўды жадаеце зрабіць гэта, разумееце наступствы і робіце гэта ў адпаведнасьці з [[{{MediaWiki:Policy-url}}|правіламі]].',
 'revdelete-suppress-text' => "Скрываньне можа выкарыстоўвацца '''толькі''' ў наступных выпадках:
 * патэнцыйна паклёпніцкая інфармацыя
@@ -1346,13 +1354,14 @@ $1",
 'search-file-match' => '(супадае зь зьмесьцівам файла)',
 'search-suggest' => 'Магчыма, вы мелі на ўвазе: $1',
 'search-interwiki-caption' => 'Сумежныя праекты',
-'search-interwiki-default' => 'вынікі з $1:',
+'search-interwiki-default' => 'Ð\92ынікі з $1:',
 'search-interwiki-more' => '(яшчэ)',
 'search-relatedarticle' => 'Зьвязаны',
 'searcheverything-enable' => 'Шукаць ва ўсіх прасторах назваў',
 'searchrelated' => 'зьвязаны',
 'searchall' => 'усе',
 'showingresults' => "Ніжэй {{PLURAL:$1|паданы|паданыя|паданыя}} да '''$1''' {{PLURAL:$1|выніку|вынікаў|вынікаў}}, пачынаючы з #<b>$2</b>.",
+'showingresultsinrange' => 'Ніжэй паказаныя да {{PLURAL:$1|<strong>$1</strong> выніку ў|<strong>$1</strong> вынікаў у}} дыяпазоне ад <strong>$2</strong> да <strong>$3</strong>.',
 'showingresultsnum' => "Ніжэй паказаны сьпіс з '''$3''' {{PLURAL:$3|выніка|вынікаў|вынікаў}}, пачынаючы ад № '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|1=Вынік '''$1''' з '''$3'''|Вынікі '''$1—$2''' з '''$3'''}} для '''$4'''",
 'search-nonefound' => 'Супадзеньняў па запыце ня знойдзена.',
@@ -1671,14 +1680,26 @@ $1",
 'recentchanges-label-plusminus' => 'Памер старонкі зьмяніўся на такую колькасьць байтаў',
 'recentchanges-legend-heading' => "'''Легенда:'''",
 'recentchanges-legend-newpage' => '(глядзіце таксама [[Special:NewPages|сьпіс новых старонак]])',
-'rcnotefrom' => "Ніжэй знаходзяцца зьмены з '''$2''' (да '''$1''' на старонку).",
+'rcnotefrom' => 'Ніжэй знаходзяцца зьмены з <strong>$2</strong> (да <strong>$1</strong> на старонку).',
 'rclistfrom' => 'Паказаць зьмены з $1',
 'rcshowhideminor' => '$1 дробныя праўкі',
+'rcshowhideminor-show' => 'Паказаць',
+'rcshowhideminor-hide' => 'Схаваць',
 'rcshowhidebots' => '$1 робатаў',
+'rcshowhidebots-show' => 'Паказаць',
+'rcshowhidebots-hide' => 'Схаваць',
 'rcshowhideliu' => '$1 зарэгістраваных карыстальнікаў',
+'rcshowhideliu-show' => 'Паказаць',
+'rcshowhideliu-hide' => 'Схаваць',
 'rcshowhideanons' => '$1 ананімаў',
+'rcshowhideanons-show' => 'Паказаць',
+'rcshowhideanons-hide' => 'Схаваць',
 'rcshowhidepatr' => '$1 патруляваныя праўкі',
+'rcshowhidepatr-show' => 'Паказаць',
+'rcshowhidepatr-hide' => 'Схаваць',
 'rcshowhidemine' => '$1 мае праўкі',
+'rcshowhidemine-show' => 'Паказаць',
+'rcshowhidemine-hide' => 'Схаваць',
 'rclinks' => 'Паказаць апошнія $1 зьменаў за мінулыя $2 дзён<br />$3',
 'diff' => 'розьн',
 'hist' => 'гіст',
@@ -1804,6 +1825,8 @@ $1",
 'uploaddisabledtext' => 'Загрузка файлаў забароненая.',
 'php-uploaddisabledtext' => 'Загрузка файлаў была адключаная ў парамэтрах канфігурацыі PHP. Калі ласка, праверце значэньне парамэтра «file_uploads».',
 'uploadscripted' => 'Гэты файл утрымлівае HTML-код альбо скрыпт, які можа памылкова апрацоўвацца браўзэрам.',
+'uploadscriptednamespace' => 'Гэты SVG-файл утрымлівае няслушную прастору назваў «$1»',
+'uploadinvalidxml' => 'Не атрымалася прааналізаваць XML у загружаным файле.',
 'uploadvirus' => 'Файл утрымлівае вірус! Падрабязнасьці: $1',
 'uploadjava' => 'Файл зьяўляецца ZIP-архівам, які зьмяшчае .class-файл Java.
 Загрузка Java-файлаў забароненая ў мэтах бясьпекі.',
@@ -2163,7 +2186,16 @@ $1',
 'protectedpages' => 'Абароненыя старонкі',
 'protectedpages-indef' => 'Толькі бестэрміновыя абароны',
 'protectedpages-cascade' => 'Толькі каскадныя абароны',
+'protectedpages-noredirect' => 'Схаваць перанакіраваньні',
 'protectedpagesempty' => 'Цяпер няма абароненых старонак з пазначанымі парамэтрамі.',
+'protectedpages-timestamp' => 'Дата і час',
+'protectedpages-page' => 'Старонка',
+'protectedpages-expiry' => 'Сканчаецца',
+'protectedpages-performer' => 'Хто абараніў',
+'protectedpages-params' => 'Парамэтры абароны',
+'protectedpages-reason' => 'Прычына',
+'protectedpages-unknown-timestamp' => 'Невядома',
+'protectedpages-unknown-performer' => 'Невядомы ўдзельнік',
 'protectedtitles' => 'Забароненыя старонкі',
 'protectedtitlesempty' => 'Цяпер няма абароненых назваў з пазначанымі парамэтрамі.',
 'listusers' => 'Сьпіс удзельнікаў і ўдзельніц',
@@ -2351,6 +2383,7 @@ $1',
 'watchmethod-list' => 'прагляд старонак са сьпісу назіраньня дзеля апошніх зьменах',
 'watchlistcontains' => 'Ваш сьпіс назіраньня зьмяшчае $1 {{PLURAL:$1|старонка|старонкі|старонак}}.',
 'iteminvalidname' => 'Праблема з элемэнтам «$1», няслушная назва…',
+'wlnote2' => 'Ніжэй паказаныя зьмены за {{PLURAL:$1|<strong>$1</strong> гадзіну|<strong>$1</strong> гадзіны|<strong>$1</strong> гадзінаў}} на $3 $2.',
 'wlshowlast' => 'Паказаць: за апошнія $1 гадзінаў, $2 дзён, $3',
 'watchlist-options' => 'Налады сьпісу назіраньня',
 
@@ -2382,10 +2415,10 @@ $PAGEINTRO $NEWPAGE
 Апісаньне зьменаў: $PAGESUMMARY $PAGEMINOREDIT
 
 Зьвязацца з рэдактарам:
-па электроннай пошце: $PAGEEDITOR_EMAIL
+праз электронную пошту: $PAGEEDITOR_EMAIL
 празь вікі-старонку: $PAGEEDITOR_WIKI
 
\9fаведамленÑ\8cнÑ\96 Ð½Ñ\8f Ð±Ñ\83дÑ\83Ñ\86Ñ\8c Ð´Ð°Ñ\81Ñ\8bлаÑ\86Ñ\86а Ñ\9e Ð²Ñ\8bпадкÑ\83 Ð¿Ð°Ñ\9eÑ\82оÑ\80нÑ\8bÑ\85 Ñ\80Ñ\8dдагаванÑ\8cнÑ\8fÑ\9e, Ð¿Ð°ÐºÑ\83лÑ\8c Ð\92Ñ\8b Ð½Ðµ Ð½Ð°Ð²ÐµÐ´Ð°ÐµÑ\86е Ð³Ñ\8dÑ\82Ñ\83Ñ\8e Ñ\81Ñ\82аÑ\80онкÑ\83. Ð\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ð¿Ð°Ð·Ð½Ð°Ñ\87Ñ\8bÑ\86Ñ\8c Ñ\81Ñ\8cÑ\86Ñ\8fжкÑ\96 Ð´Ð°Ñ\81Ñ\8bлкÑ\96 Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½Ñ\8cнÑ\8fÑ\9e Ð´Ð»Ñ\8f Ñ\9eÑ\81Ñ\96Ñ\85 Ñ\81Ñ\82аÑ\80онкаÑ\85 Ð½Ð°Ð·Ñ\96Ñ\80анÑ\8cнÑ\8f Вашага сьпісу назіраньня.
\9fаведамленÑ\8cнÑ\96 Ð½Ñ\8f Ð±Ñ\83дÑ\83Ñ\86Ñ\8c Ð´Ð°Ñ\81Ñ\8bлаÑ\86Ñ\86а Ñ\9e Ð²Ñ\8bпадкÑ\83 Ð½Ð¾Ð²Ñ\8bÑ\85 Ð´Ð·ÐµÑ\8fнÑ\8cнÑ\8fÑ\9e, Ð¿Ð°ÐºÑ\83лÑ\8c Ð\92Ñ\8b Ð½Ðµ Ð½Ð°Ð²ÐµÐ´Ð°ÐµÑ\86е Ð³Ñ\8dÑ\82Ñ\83Ñ\8e Ñ\81Ñ\82аÑ\80онкÑ\83 Ð¿Ð° Ñ\9eваÑ\85одзе Ñ\9e Ñ\81Ñ\8bÑ\81Ñ\82Ñ\8dмÑ\83. Ð\92Ñ\8b Ñ\82акÑ\81ама Ð¼Ð¾Ð¶Ð°Ñ\86е Ð°Ð´ÐºÐ»Ñ\8eÑ\87Ñ\8bÑ\86Ñ\8c Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½Ñ\8cнÑ\96 Ð¿Ñ\80а Ð·Ñ\8cменÑ\8b Ð´Ð»Ñ\8f Ñ\9eÑ\81Ñ\96Ñ\85 Ñ\81Ñ\82аÑ\80онак Ð· Вашага сьпісу назіраньня.
 
              Сыстэма паведамленьняў {{GRAMMAR:родны|{{SITENAME}}}}
 
@@ -2438,7 +2471,7 @@ $UNWATCHURL
 Выдаленьне такіх старонак было забароненае, каб пазьбегнуць праблемаў у працы {{GRAMMAR:родны|{{SITENAME}}}}.',
 'delete-warning-toobig' => 'Гэтая старонка мае доўгую гісторыю рэдагаваньняў, больш за $1 {{PLURAL:$1|вэрсію|вэрсіі|вэрсіяў}}.
 Яе выдаленьне можа выклікаць праблемы ў працы базы зьвестак {{GRAMMAR:родны|{{SITENAME}}}}; будзьце асьцярожны.',
-'deleting-backlinks-warning' => "'''Увага:''' іншыя старонкі спасылаюцца на старонку, якую вы зьбіраецеся выдаліць.",
+'deleting-backlinks-warning' => "'''Увага:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|іншыя старонкі]] ўключаюць або спасылаюцца на старонку, якую вы зьбіраецеся выдаліць.",
 
 # Rollback
 'rollback' => 'Адкаціць рэдагаваньні',
@@ -2537,7 +2570,7 @@ $UNWATCHURL
 'undeletepage' => 'Прагляд і аднаўленьне выдаленых старонак',
 'undeletepagetitle' => "'''Ніжэй паданыя выдаленыя вэрсіі [[:$1|$1]]'''.",
 'viewdeletedpage' => 'Паказаць выдаленыя старонкі',
-'undeletepagetext' => '{{PLURAL:$1|1=Ð\9dаÑ\81Ñ\82Ñ\83пнаÑ\8f Ñ\81Ñ\82аÑ\80онка Ð±Ñ\8bла Ð²Ñ\8bдаленаÑ\8f, Ð°Ð»Ðµ Ñ\8fна Ð·Ð½Ð°Ñ\85одзÑ\8fцца ў архіве і можа быць адноўленая|Наступныя старонкі былі выдаленыя, але яны знаходзяцца ў архіве і могуць быць адноўленыя}}.
+'undeletepagetext' => '{{PLURAL:$1|1=Ð\9dаÑ\81Ñ\82Ñ\83пнаÑ\8f Ñ\81Ñ\82аÑ\80онка Ð±Ñ\8bла Ð²Ñ\8bдаленаÑ\8f, Ð°Ð»Ðµ Ñ\8fна Ð·Ð½Ð°Ñ\85одзÑ\96цца ў архіве і можа быць адноўленая|Наступныя старонкі былі выдаленыя, але яны знаходзяцца ў архіве і могуць быць адноўленыя}}.
 Архіў пэрыядычна чысьціцца.',
 'undelete-fieldset-title' => 'Аднавіць вэрсіі',
 'undeleteextrahelp' => "Для поўнага аднаўленьня гісторыі рэдагаваньня старонкі, пакіньце ўсе адзнакі нявызначнымі і націсьніце '''''{{int:undeletebtn}}'''''.
@@ -2617,8 +2650,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Гэты IP-адрас у дадзены момант заблякаваны.
 Апошні запіс з журнала блякаваньняў пададзены ніжэй для даведкі:',
 'sp-contributions-search' => 'Пошук унёску',
+'sp-contributions-suppresslog' => 'выдалены ўнёсак удзельніка',
 'sp-contributions-username' => 'IP-адрас альбо імя ўдзельніка/ўдзельніцы:',
 'sp-contributions-toponly' => 'Паказваць толькі зьмены, якія зьяўляюцца апошнімі вэрсіямі',
+'sp-contributions-newonly' => 'Паказваць толькі праўкі, якімі былі створаныя старонкі',
 'sp-contributions-submit' => 'Шукаць',
 
 # What links here
@@ -2676,6 +2711,7 @@ $1',
 Глядзіце [[Special:BlockList|сьпіс блякаваньняў]] дзеля іх перагляду.',
 'ipb-blockingself' => 'Вы зьбіраецеся заблякаваць самога сябе! Вы ўпэўнены, што жадаеце гэта зрабіць?',
 'ipb-confirmhideuser' => 'Вы зьбіраецеся заблякаваць удзельніка са статусам «схаваны». Гэтае дзеяньне прывядзе да таго, што яго імя зьявіцца ва ўсіх сьпісах і журналах уваходу. Вы ўпэўнены, што жадаеце гэта зрабіць?',
+'ipb-confirmaction' => 'Калі вы ўпэўненыя, што сапраўды хочаце зрабіць гэта, калі ласка, адзначце поле «{{int:ipb-confirm}}» ніжэй.',
 'ipb-edit-dropdown' => 'Рэдагаваць прычыны блякіровак',
 'ipb-unblock-addr' => 'Разблякаваць $1',
 'ipb-unblock' => 'Разблякаваць рахунак ўдзельніка ці IP-адрас',
@@ -2717,7 +2753,8 @@ $1',
 'change-blocklink' => 'зьмяніць блякаваньне',
 'contribslink' => 'унёсак',
 'emaillink' => 'даслаць ліст',
-'autoblocker' => "Вы аўтаматычна заблякаваныя, таму што Ваш IP-адрас нядаўна ўжываўся «[[User:$1|$1]]». Прычына блякаваньня $1 наступная: «'''$2'''»",
+'autoblocker' => 'Вы аўтаматычна заблякаваныя, таму што Ваш IP-адрас нядаўна ўжываўся «[[User:$1|$1]]».
+Прычына блякаваньня $1 наступная: «$2»',
 'blocklogpage' => 'Журнал блякаваньняў',
 'blocklog-showlog' => 'Гэты ўдзельнік ужо заблякаваны. Журнал блякаваньняў пададзены ніжэй:',
 'blocklog-showsuppresslog' => 'Гэты ўдзельнік ужо заблякаваны і схаваны. Журнал хаваньняў пададзены ніжэй:',
@@ -2737,7 +2774,7 @@ $1',
 'range_block_disabled' => 'Адміністратарам забаронена блякаваць дыяпазоны.',
 'ipb_expiry_invalid' => 'Няслушны тэрмін блякаваньня.',
 'ipb_expiry_temp' => 'Блякаваньні са схаваньнем імя ўдзельніка павінны быць бестэрміновымі.',
-'ipb_hide_invalid' => 'Ð\9dемагÑ\87Ñ\8bма Ñ\81Ñ\85аваÑ\86Ñ\8c Ð³Ñ\8dÑ\82Ñ\8b Ñ\80аÑ\85Ñ\83нак; Ð²ÐµÑ\80агодна Ð·Ñ\8c Ñ\8fго Ð·Ñ\80облена Ð·Ð°Ñ\88маÑ\82 Ñ\80Ñ\8dдагаванÑ\8cнÑ\8fÑ\9e.',
+'ipb_hide_invalid' => 'Ð\9dемагÑ\87Ñ\8bма Ñ\81Ñ\85аваÑ\86Ñ\8c Ð³Ñ\8dÑ\82Ñ\8b Ñ\80аÑ\85Ñ\83нак; Ð·Ñ\8c Ñ\8fго Ð·Ñ\80облена Ð±Ð¾Ð»Ñ\8cÑ\88 Ñ\87Ñ\8bм {{PLURAL:$1|$1 Ñ\80Ñ\8dдагаванÑ\8cне|$1 Ñ\80Ñ\8dдагаванÑ\8cнÑ\96|$1 Ñ\80Ñ\8dдагаванÑ\8cнÑ\8fÑ\9e}}.',
 'ipb_already_blocked' => '«$1» ужо заблякаваны',
 'ipb-needreblock' => '$1 ужо заблякаваны. Вы жадаеце зьмяніць парамэтры?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|1=Іншае блякаваньне|Іншыя блякаваньні}}',
@@ -2908,6 +2945,7 @@ $1',
 'allmessages-prefix' => 'Фільтар па прэфіксе:',
 'allmessages-language' => 'Мова:',
 'allmessages-filter-submit' => 'Паказаць',
+'allmessages-filter-translate' => 'Перакласьці',
 
 # Thumbnails
 'thumbnail-more' => 'Павялічыць',
@@ -2924,6 +2962,7 @@ $2',
 'thumbnail_image-type' => 'Тып выявы не падтрымліваецца',
 'thumbnail_gd-library' => 'Няпоўная канфігурацыя бібліятэкі GD: няма функцыі $1',
 'thumbnail_image-missing' => 'Верагодна няма файла $1',
+'thumbnail_image-failure-limit' => 'Было зроблена зашмат няўдалых спробаў ($1 ці болей) сфармаваць гэтую мініятуру. Калі ласка, паспрабуйце пазьней.',
 
 # Special:Import
 'import' => 'Імпартаваць старонкі',
@@ -2962,7 +3001,7 @@ $2',
 Не стае часовай дырэкторыі.',
 'import-parse-failure' => 'Памылка разбору XML пры імпартаваньні',
 'import-noarticle' => 'Няма старонкі для імпартаваньня!',
-'import-nonewrevisions' => 'УÑ\81е Ð²Ñ\8dÑ\80Ñ\81Ñ\96Ñ\96 Ð±Ñ\8bлÑ\96 Ñ\96мпаÑ\80Ñ\82аванÑ\8bÑ\8f Ñ\80аней.',
+'import-nonewrevisions' => 'Ð\9dÑ\96Ñ\8fкÑ\96Ñ\8f Ð¿Ñ\80аÑ\9eкÑ\96 Ð½Ðµ Ð±Ñ\8bлÑ\96 Ñ\96мпаÑ\80Ñ\82аванÑ\8bÑ\8f (Ñ\83Ñ\81е Ñ\9eжо Ð°Ð±Ð¾ Ð±Ñ\8bлÑ\96 Ð°Ð¿Ñ\80аÑ\86аванÑ\8bÑ\8f, Ð°Ð±Ð¾ Ð¿Ñ\80апÑ\83Ñ\88Ñ\87анÑ\8bÑ\8f Ð¿Ñ\80аз Ð¿Ð°Ð¼Ñ\8bлкÑ\96).',
 'xml-error-string' => '$1 у радку $2, пазыцыі $3 (байт $4): $5',
 'import-upload' => 'Загрузіць XML-зьвесткі',
 'import-token-mismatch' => 'Страчаныя зьвесткі сэсіі. Калі ласка, паспрабуйце ізноў.',
@@ -2973,6 +3012,7 @@ $2',
 'import-error-special' => 'Старонка «$1» не была імпартаваная, таму што яна належыць да спэцыяльнай прасторы назваў, старонкі ў якой не дазволеныя.',
 'import-error-invalid' => 'Старонка «$1» не была імпартаваная з-за няслушнасьці назвы.',
 'import-error-unserialize' => 'Не атрымалася дэсэрыялізаваць вэрсію $2 старонкі «$1». Меркавалася, што вэрсія выкарыстоўвала мадэль зьвестак $3 і была сэрыялізавана ў фармаце $4.',
+'import-error-bad-location' => 'Праўка $2, якая выкарыстоўвае мадэль зьместу $3, ня можа быць захаваная ў «$1» гэтай вікі, таму што такая мадэль не падтрымліваецца на гэтай старонцы.',
 'import-options-wrong' => '{{PLURAL:$2|1=Няслушная налада|Няслушныя налады}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Пазначаная назва карнявой старонкі няслушная.',
 'import-rootpage-nosubpage' => 'Падстаронкі ў прасторы назваў «$1» карнявой старонкі не дазволеныя.',
@@ -3111,7 +3151,7 @@ $2',
 'pageinfo-robot-noindex' => 'Не дазволеная',
 'pageinfo-views' => 'Колькасьць праглядаў',
 'pageinfo-watchers' => 'Колькасьць назіральнікаў і назіральніц',
-'pageinfo-few-watchers' => 'Менш за $1 {{PLURAL:$1|1=назіральніка|назіральнікаў}}',
+'pageinfo-few-watchers' => 'Менш за $1 {{PLURAL:$1|назіральніка|назіральнікі|назіральнікаў}}',
 'pageinfo-redirects-name' => 'Перанакіраваньняў на гэтую старонку',
 'pageinfo-subpages-name' => 'Колькасьць падстаронак',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|перанакіраваньне|перанакіраваньні|перанакіраваньняў}}; $3 {{PLURAL:$3|звычайная|звычайныя|звычайных}})',
@@ -3873,9 +3913,9 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Пуць да скрыпту]',
 
 # Special:Redirect
-'redirect' => 'Перанакіраваньне да файла, удзельніка або вэрсіі старонкі',
+'redirect' => 'Перанакіраваньне да файла, удзельніка, старонкі або вэрсіі старонкі',
 'redirect-legend' => 'Перанакіраваньне да файла або старонкі',
-'redirect-summary' => 'Гэтая спэцыяльная старонка перанакіруе да файла (паводле імя файла), старонкі (паводле нумара вэрсіі) або старонкі ўдзельніка (паводле нумара ўдзельніка). Ужываньне: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] або [[{{#Special:Redirect}}/user/101]].',
+'redirect-summary' => 'Гэтая спэцыяльная старонка перанакіруе да файла (паводле імя файла), старонкі (паводле нумару вэрсіі або старонкі) або старонкі ўдзельніка (паводле нумару ўдзельніка). Ужываньне: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] або [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'Перайсьці',
 'redirect-lookup' => 'Шукаць паводле:',
 'redirect-value' => 'Значэньне:',
@@ -3988,12 +4028,12 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'logentry-delete-delete' => '$1 {{GENDER:$2|выдаліў|выдаліла}} старонку $3',
 'logentry-delete-restore' => '$1 {{GENDER:$2|аднавіў|аднавіла}} старонку $3',
 'logentry-delete-event' => '$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|1=падзеі ў журнале|падзеяў у журнале}} на $3: $4',
-'logentry-delete-revision' => '$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|1=вэрсіі|вэрсіяў}} старонкі $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|вэрсіі|вэрсіяў}} старонкі $3: $4',
 'logentry-delete-event-legacy' => '$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць падзеяў у журнале на $3',
 'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць вэрсіяў старонкі $3',
 'logentry-suppress-delete' => '$1 {{GENDER:$2|схаваў|схавала}} старонку $3',
-'logentry-suppress-event' => '$1 прыхавана {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|1=падзеі ў журнале|падзеяў у журнале}} на $3: $4',
-'logentry-suppress-revision' => '$1 прыхавана {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|1=вэрсіі|вэрсіяў}} старонкі $3: $4',
+'logentry-suppress-event' => '$1 прыхавана {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|падзеі ў журнале|падзеяў у журнале}} на $3: $4',
+'logentry-suppress-revision' => '$1 прыхавана {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|вэрсіі|вэрсіяў}} старонкі $3: $4',
 'logentry-suppress-event-legacy' => '$1 прыхавана {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць падзеяў у журнале на $3',
 'logentry-suppress-revision-legacy' => '$1 прыхавана {{GENDER:$2|зьмяніў|зьмяніоа}} бачнасьць вэрсіяў старонкі $3',
 'revdelete-content-hid' => 'зьмест схаваны',
@@ -4045,7 +4085,7 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'api-error-badtoken' => 'Унутраная памылка: няслушны ключ.',
 'api-error-copyuploaddisabled' => 'Загрузка з URL-адрасу забароненая на гэтым сэрвэры.',
 'api-error-duplicate' => 'Ужо {{PLURAL:$1|1=існуе [$2 іншы файл]|існуюць [$2 іншыя файлы]}} з такім жа зьместам.',
-'api-error-duplicate-archive' => 'Раней на сайце {{PLURAL:$1|1=ўжо быў [$2 файл]|былі [$2 файлы]}} з дакладна такім жа зьместам, але {{PLURAL:$1|1=ён быў выдалены|яны былі выдаленыя}}.',
+'api-error-duplicate-archive' => 'Раней на сайце {{PLURAL:$1|1=быў [$2 файл]|былі [$2 файлы]}} з дакладна такім жа зьместам, але {{PLURAL:$1|1=ён быў выдалены|яны былі выдаленыя}}.',
 'api-error-duplicate-archive-popup-title' => 'Дублікаты {{PLURAL:$1|1=файла, які ўжо быў выдалены|файлаў, якія ўжо былі выдаленыя}}',
 'api-error-duplicate-popup-title' => '{{PLURAL:$1|1=Ідэнтычны файл|Ідэнтычныя файлы}}',
 'api-error-empty-file' => 'Дасланы Вамі файл быў пусты.',
@@ -4128,6 +4168,4 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'expand_templates_generate_xml' => 'Паказаць дрэва аналізу XML',
 'expand_templates_preview' => 'Папярэдні прагляд',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
 );
index e8e3dec..6ed88fc 100644 (file)
@@ -16,6 +16,7 @@
  * @author Kaganer
  * @author MegaAlex
  * @author Milicevic01
+ * @author Mitzev
  * @author Simona
  * @author Spiritia
  * @author Stanqo
@@ -404,7 +405,6 @@ $messages = array(
 'vector-action-protect' => 'Защита',
 'vector-action-undelete' => 'Възстановяване',
 'vector-action-unprotect' => 'Промяна на защитата',
-'vector-simplesearch-preference' => 'Включване на опростена лента за търсене (само за облика Vector)',
 'vector-view-create' => 'Създаване',
 'vector-view-edit' => 'Редактиране',
 'vector-view-history' => 'История',
@@ -634,6 +634,7 @@ $2',
 
 Администраторът, който го е заключил, е посочил следната причина: „$3“.',
 'exception-nologin-text' => 'За досъп до желаната страница или действие уикито изисква [[Special:Userlogin|влизане в системата]].',
+'exception-nologin-text-manual' => 'За достъп до избраното действие или страница е необходимо $1 в системата.',
 
 # Virus scanner
 'virus-badscanner' => "Лоша конфигурация: непознат скенер за вируси: ''$1''",
@@ -643,8 +644,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Излязохте от системата.'''
 
-Можете да продължите да използвате {{SITENAME}} анонимно или да <span class='plainlinks'>[$1 влезете отново]</span> като друг потребител.
-Обърнете внимание, че някои страници все още ще се показват така, сякаш сте влезли, докато не изтриете кеш-паметта на браузъра.",
+Обърнете внимание, че някои страници все още ще се показват така, сякаш сте влезли, докато не изтриете кеша на браузъра.",
 'welcomeuser' => 'Здравейте, $1!',
 'welcomecreation-msg' => 'Вашата сметка беше създадена.
 Можете да промените [[Special:Preferences|настройките на {{SITENAME}}]] според предпочитанията си.',
@@ -660,6 +660,7 @@ $2',
 'createacct-yourpasswordagain' => 'Потвърждаване на паролата',
 'createacct-yourpasswordagain-ph' => 'Въвежда се паролата (повторно)',
 'remembermypassword' => 'Запомняне на паролата на този компютър (най-много за $1 {{PLURAL:$1|ден|дни}})',
+'userlogin-remembermypassword' => 'Запомняне',
 'userlogin-signwithsecure' => 'Използване на защитена връзка',
 'yourdomainname' => 'Домейн:',
 'password-change-forbidden' => 'Не можете да променяте пароли в това уики.',
@@ -683,8 +684,6 @@ $2',
 'gotaccountlink' => 'Влизане',
 'userlogin-resetlink' => 'Забравени данни за влизане в системата?',
 'userlogin-resetpassword-link' => 'Забравена парола?',
-'helplogin-url' => 'Help:Влизане',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Помощ за влизане]] в системата',
 'userlogin-loggedin' => 'Вече сте влезли в системата като {{GENDER:$1|$1}}.
 Чрез формуляра по-долу можете да влезете като друг потребител.',
 'userlogin-createanother' => 'Създаване на друга сметка',
@@ -692,6 +691,7 @@ $2',
 'createacct-another-join' => 'Попълване на информацията за новата сметка',
 'createacct-emailrequired' => 'Адрес за електронна поща',
 'createacct-emailoptional' => 'Адрес за електронна поща (незадължително)',
+'createacct-email-ph' => 'Въведете Вашия адрес за електронна поща',
 'createacct-another-email-ph' => 'Въвежда се електронна поща',
 'createaccountmail' => 'Използване на случайна временна парола, която се изпраща на електронната поща, посочена по-долу',
 'createacct-realname' => 'Истинско име (незадължително)',
@@ -768,6 +768,11 @@ $2',
 'login-abort-generic' => 'Влизането беше неуспешно - Прекратено',
 'loginlanguagelabel' => 'Език: $1',
 'suspicious-userlogout' => 'Заявката ви за излизане от системата беше отхвърлена, тъй като изглежда е била изпратена погрешка от браузъра или кеширащото прокси.',
+'createacct-another-realname-tip' => 'Истинското име е незадължително.
+В случай, че бъде избрабо да се попълни, ще бъде използвано за да му се приписват приносите в уикито.',
+'pt-login' => 'Влизане',
+'pt-createaccount' => 'Създаване на сметка',
+'pt-userlogout' => 'Излизане',
 
 # Email sending
 'php-mail-error-unknown' => 'Неизвестна грешка в mail() функцията на PHP',
@@ -775,7 +780,7 @@ $2',
 
 # Change password dialog
 'changepassword' => 'Смяна на парола',
-'resetpass_announce' => 'Ð\92лÑ\8fзоÑ\85Ñ\82е Ñ\81 Ð²Ñ\80еменен ÐºÐ¾Ð´, Ð¿Ð¾Ð»Ñ\83Ñ\87ен Ð¿Ð¾ ÐµÐ»ÐµÐºÑ\82Ñ\80оннаÑ\82а Ð¿Ð¾Ñ\89а. Ð¡ÐµÐ³Ð° Ðµ Ð½Ñ\83жно Ð´Ð° Ñ\81и Ð¸Ð·Ð±ÐµÑ\80еÑ\82е Ð½Ð¾Ð²Ð° Ð¿Ð°Ñ\80ола:',
+'resetpass_announce' => 'Ð\97а Ð´Ð° Ñ\81е Ð·Ð°Ð²Ñ\8aÑ\80Ñ\88и Ð¿Ñ\80оÑ\86еÑ\81а Ð½Ð° Ð²Ð»Ð¸Ð·Ð°Ð½Ðµ, Ð½ÐµÐ¾Ð±Ñ\85одимо Ðµ Ð´Ð° Ñ\81е Ð¸Ð·Ð±ÐµÑ\80е Ð½Ð¾Ð²Ð° Ð¿Ð°Ñ\80ола.',
 'resetpass_text' => '<!-- Тук добавете текст -->',
 'resetpass_header' => 'Промяна на парола',
 'oldpassword' => 'Стара парола:',
@@ -1148,8 +1153,6 @@ $2
 'revdelete-show-file-submit' => 'Да',
 'revdelete-selected' => "'''{{PLURAL:$2|Избрана версия|Избрани версии}} от '''$1:''''''",
 'logdelete-selected' => "'''{{PLURAL:$1|Избрано събитие|Избрани събития}}:'''",
-'revdelete-text' => "'''Изтритите версии ше се показват в историята на страницата, но тяхното съдържание ще бъде недостъпно за обикновенните потребители.'''
-Администраторите на {{SITENAME}} ще имат достъп до скритото съдържание и ще могат да го възстановят, с изключение на случаите, когато има наложено допълнително ограничение.",
 'revdelete-confirm' => 'Необходимо е да потвърдите, че велаете да извършите действието, разбирате последствията и го правите според [[{{MediaWiki:Policy-url}}|политиката]].',
 'revdelete-suppress-text' => "Премахването трябва да се използва '''само''' при следните случаи:
 *Неподходяща или неприемлива лична информация
@@ -1582,11 +1585,23 @@ $1",
 'rcnotefrom' => 'Дадени са промените от <strong>$2</strong> (до <strong>$1</strong> показани).',
 'rclistfrom' => 'Показване на промени, като се започва от $1.',
 'rcshowhideminor' => '$1 на малки промени',
+'rcshowhideminor-show' => 'Показване',
+'rcshowhideminor-hide' => 'Скриване',
 'rcshowhidebots' => '$1 на ботове',
+'rcshowhidebots-show' => 'Показване',
+'rcshowhidebots-hide' => 'Скриване',
 'rcshowhideliu' => '$1 на регистрирани потребители',
+'rcshowhideliu-show' => 'Показване',
+'rcshowhideliu-hide' => 'Скриване',
 'rcshowhideanons' => '$1 на анонимни потребители',
+'rcshowhideanons-show' => 'Показване',
+'rcshowhideanons-hide' => 'Скриване',
 'rcshowhidepatr' => '$1 на проверени редакции',
+'rcshowhidepatr-show' => 'Показване',
+'rcshowhidepatr-hide' => 'Скриване',
 'rcshowhidemine' => '$1 на моите приноси',
+'rcshowhidemine-show' => 'Показване',
+'rcshowhidemine-hide' => 'Скриване',
 'rclinks' => 'Показване на последните $1 промени за последните $2 дни<br />$3',
 'diff' => 'разл',
 'hist' => 'ист',
@@ -1707,6 +1722,7 @@ $1",
 'uploaddisabledtext' => 'Качването на файлове е забранено.',
 'php-uploaddisabledtext' => 'Качванията на файлове са спрени през PHP. Проверете настройката file_uploads.',
 'uploadscripted' => 'Файлът съдържа HTML или скриптов код, който може да бъде погрешно  интерпретиран от браузъра.',
+'uploadscriptednamespace' => 'Този SVG файл съдържа неправилно пространство на имената " $1 "',
 'uploadvirus' => 'Файлът съдържа вирус! Подробности: $1',
 'uploadjava' => 'Файлът е ZIP файл, който съдържа Java .class файл.
 Качването на Java файлове не е позволено, тъй като могат да причинят заобикаляне на ограниченията за сигурност.',
@@ -2007,6 +2023,7 @@ $1',
 'protectedpages-indef' => 'Само безсрочни защити',
 'protectedpages-cascade' => 'Само каскадни защити',
 'protectedpagesempty' => 'В момента няма защитени страници с тези параметри.',
+'protectedpages-reason' => 'Причина',
 'protectedtitles' => 'Защитени заглавия',
 'protectedtitlesempty' => 'В момента няма заглавия, защитени с тези параметри.',
 'listusers' => 'Списък на потребителите',
@@ -2433,6 +2450,7 @@ $1',
 'sp-contributions-search' => 'Търсене на приноси',
 'sp-contributions-username' => 'IP-адрес или потребителско име:',
 'sp-contributions-toponly' => 'Показване само на последните редакции',
+'sp-contributions-newonly' => 'Показване само на редакции свързани с началното създаване на страницата.',
 'sp-contributions-submit' => 'Търсене',
 
 # What links here
@@ -2715,6 +2733,7 @@ $1',
 'allmessages-prefix' => 'Филтриране по представка:',
 'allmessages-language' => 'Език:',
 'allmessages-filter-submit' => 'Отваряне',
+'allmessages-filter-translate' => 'Превеждане',
 
 # Thumbnails
 'thumbnail-more' => 'Увеличаване',
@@ -3573,7 +3592,13 @@ $5
 'version-hook-name' => 'Име на куката',
 'version-hook-subscribedby' => 'Ползвана от',
 'version-version' => '(Версия $1)',
-'version-license' => 'Лиценз',
+'version-license' => 'Лиценз на МедияУики',
+'version-ext-license' => 'Лиценз',
+'version-ext-colheader-version' => 'Версия',
+'version-ext-colheader-license' => 'Лиценз',
+'version-ext-colheader-description' => 'Описание',
+'version-ext-colheader-credits' => 'Автори',
+'version-license-title' => 'Лиценз за $1',
 'version-poweredby-credits' => "Това уики се задвиждва от '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'други',
 'version-poweredby-translators' => 'преводачи в translatewiki.net',
index bdaac16..c0c05f1 100644 (file)
@@ -209,7 +209,6 @@ $messages = array(
 'vector-action-protect' => 'संरक्षित करीं',
 'vector-action-undelete' => 'मत मिटाईं',
 'vector-action-unprotect' => 'सुरक्षा बदलीं',
-'vector-simplesearch-preference' => 'सरलीकृत खोज पट्टी सक्षम करीं (केवल वेक्टर स्कीन)',
 'vector-view-create' => 'बनाईं',
 'vector-view-edit' => 'सम्पादन',
 'vector-view-history' => 'इतिहास देखीं',
@@ -488,8 +487,6 @@ $2',
 'gotaccountlink' => 'खाता में प्रवेश',
 'userlogin-resetlink' => 'का रउआ आपन प्रवेश जानकारी भूला गइल बानी?',
 'userlogin-resetpassword-link' => 'आपन गुप्तशब्द के फिर से बहाल करीं',
-'helplogin-url' => 'Help:खाता प्रवेश',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|खाता प्रवेश में सहायता]]',
 'createacct-join' => 'अपना बारे में जानकारी नीचे लिखीं',
 'createacct-another-join' => 'नयका खाता के जानकारी नीचे लिखीं',
 'createacct-emailrequired' => 'ई-मेल पता',
index 91664e9..3845388 100644 (file)
@@ -293,7 +293,6 @@ $messages = array(
 'vector-action-protect' => 'Lindungi',
 'vector-action-undelete' => 'Pawalangan pahapusan',
 'vector-action-unprotect' => 'Palindungan',
-'vector-simplesearch-preference' => 'Kawa-akan saran panggagaian tingkat lanjut (Vector skin haja)',
 'vector-view-create' => 'Ulah',
 'vector-view-edit' => 'Babak',
 'vector-view-history' => 'Tiringi halam',
@@ -1000,8 +999,6 @@ Sawagai saurang pambakal Pian kawa nang balain ini; rarincian kawa diugai dalam
 'revdelete-show-file-submit' => 'Iya-ai',
 'revdelete-selected' => "'''{{PLURAL:$2|Ralatan tapilih|Raralatan tapilih}} matan [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Log kajadian tapilih|Log kakajadian tapilih}}:'''",
-'revdelete-text' => "'''Raralatan tahapus wan kakajadian akan magun cungul dalam halam tungkaran wan log, tagal hagian matan isinya akan kada kawa diungkai umum.'''
-Pambakal lain pada {{SITENAME}} akan magun kawa maungkai isi tasungkup wan kawa mambulikakan hapusan pulang mangguna'akan antarmuha sama, kacuali ada panambahan pahalatan lain nang disetél.",
 'revdelete-confirm' => 'Muhun yakinakan bahwasa Pian handak manggawi ini, bahwasa Pian paham sabab akibat, wan bahwasa Pian manggawi ini bapandal awan [[{{MediaWiki:Policy-url}}|kaaripan]].',
 'revdelete-suppress-text' => "Panikinan parlu dipuruk gasan kakasus baumpat ini:
 * Pina kawa jadi panjalasan pitnah
index da71fa0..cf451f2 100644 (file)
@@ -235,7 +235,6 @@ $messages = array(
 'vector-action-protect' => 'সুরক্ষা',
 'vector-action-undelete' => 'পুনরুদ্ধার',
 'vector-action-unprotect' => 'সুরক্ষা পরিবর্তন',
-'vector-simplesearch-preference' => 'সরল অনুসন্ধান সক্রিয় করুন (শুধুমাত্র ভেক্টর স্কিনের জন্য)',
 'vector-view-create' => 'তৈরি',
 'vector-view-edit' => 'সম্পাদনা',
 'vector-view-history' => 'ইতিহাস',
@@ -519,8 +518,6 @@ $2',
 'gotaccountlink' => 'প্রবেশ',
 'userlogin-resetlink' => 'আপনার লগইনের বিস্তারিত তথ্যাদি ভুলে গেছেন?',
 'userlogin-resetpassword-link' => 'শব্দচাবি ভুলে গেছেন?',
-'helplogin-url' => 'Help:প্রবেশ',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|লগইন সংক্রান্ত সাহায্য]]',
 'userlogin-loggedin' => 'আপনি বর্তমানে {{GENDER:$1|$1}} হিসাবে লগইন আছেন।
 অন্য ব্যবহারকারী নামে লগইন করতে চাইলে নিচের ফর্মটি ব্যবহার করুন।',
 'userlogin-createanother' => 'আরেকটি অ্যাকাউন্ট তৈরি করুন',
@@ -606,6 +603,9 @@ $2',
 'suspicious-userlogout' => 'আপনার প্রস্থানের অনুরোধ বাতিল হয়েছে কারণ অনুমিত যে আপনার ব্রাউজার অসম্পূর্ণ অথবা পূবর্বতী তথ্য প্রেরণ করেছে।',
 'createacct-another-realname-tip' => 'আসল নাম ঐচ্ছিক।
 আপনি যদি তা দিতে চান, তাহলে তা ব্যবহারকারীকে তাদের কাজের জন্য স্বীকৃতিদানে ব্যবহার করা হবে।',
+'pt-login' => 'প্রবেশ',
+'pt-createaccount' => 'অ্যাকাউন্ট তৈরি করুন',
+'pt-userlogout' => 'প্রস্থান',
 
 # Email sending
 'php-mail-error-unknown' => 'পিএইচপি এর মেইল () কার্যে অজ্ঞাত ভুল',
@@ -614,7 +614,7 @@ $2',
 
 # Change password dialog
 'changepassword' => 'শব্দচাবি পরিবর্তন',
-'resetpass_announce' => 'à¦\86পন à¦\87-মà§\87à¦\87লà¦\95à§\83ত à¦¸à¦\82à¦\95à§\87ত à¦¦à§\8dবারা à¦²à¦\97-à¦\87ন à¦\86à¦\9bà§\87ন। à¦²à¦\97-à¦\87ন à¦ªà¦¦à§\8dধতি à¦¸à¦®à§\8dপà§\82রà§\8dণ à¦\95রতà§\87 à¦\86পনাà¦\95à§\87 à¦\85বশà§\8dযà¦\87 à¦\8fà¦\95à¦\9fি à¦¨à¦¤à§\81ন à¦¶à¦¬à§\8dদà¦\9aাবি à¦\97à§\8dরহণ à¦\95রতà§\87 à¦¹à¦¬à§\87:',
+'resetpass_announce' => 'লà¦\97à¦\87ন à¦\95রার à¦\9cনà§\8dয à¦\86পনাà¦\95à§\87 à¦\85বশà§\8dযà¦\87 à¦\8fনà¦\9fি à¦¨à¦¤à§\81ন à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¨à¦¿à¦°à§\8dধারণ à¦\95রতà§\87 à¦¹à¦¬à§\87।',
 'resetpass_text' => '<!-- এখানে লেখা যোগ করুন -->',
 'resetpass_header' => 'শব্দচাবি পরিবর্তন করো',
 'oldpassword' => 'পুরনো শব্দচাবি',
@@ -629,8 +629,13 @@ $2',
 'resetpass-submit-cancel' => 'বাতিল',
 'resetpass-wrong-oldpass' => 'ভুল অস্থায়ী অথবা বর্তমান শব্দচাবি।
 সম্ভবতঃ আপনি ইতোমধ্যেই সফলভাবে আপনার শব্দচাবিটি পরিবর্তন করেছেন অথবা একটি নতুন অস্থায়ী শব্দচাবির জন্য অনুরোধ করেছেন।',
+'resetpass-recycled' => 'অনুগ্রহ করে বর্তমানে ব্যবহার করছেন এমন পাসওয়ার্ডের পরিবর্তে নতুন একটি পাসওয়ার্ড নির্ধারণ করুন।',
+'resetpass-temp-emailed' => 'সাময়িকভাবে ব্যবহার করার কোড দিয়ে আপনি লগইন করেছেন।
+লগইন করার জন্য আপনাকে অবশ্যই একটি নতুন পাসওয়ার্ড নির্ধারন করতে হবে:',
 'resetpass-temp-password' => 'অস্থায়ী শব্দচাবি:',
 'resetpass-abort-generic' => 'শব্দচাবি পরিবর্তন একটি এক্সটেনশনের কারণে স্থগিত করা হয়েছে।',
+'resetpass-expired' => 'আপনার পাসওয়ার্ডের মেয়াদ উত্তীর্ণ হয়েছে। অনুগ্রহ করে নতুন পাসওয়ার্ড নির্ধারণ করুন।',
+'resetpass-expired-soft' => 'আপনার পাসওয়ার্ডের মেয়াদ উত্তীর্ণ হয়েছে এবং আপনাকে একটি নতুন পাসওয়ার্ড নির্ধারণ করতে হবে। অনুগ্রহ করে এখনই একটি নতুন পাসওয়ার্ড নির্ধারণ করুন অথবা পরে পরিবর্তন করতে চাইলে "{{int:resetpass-submit-cancel}}" বাটনে ক্লিক করুন।',
 
 # Special:PasswordReset
 'passwordreset' => 'শব্দচাবি রিসেট',
@@ -894,6 +899,8 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 'content-not-allowed-here' => '"$1" কন্টেন্টটি [[$2]] পাতায় অনুমোদিত নয়',
 'editwarning-warning' => 'এই পাতাটি ত্যাগ করলে আপনার আপনার করা পরিবর্তনগুলো হারিয়ে যেতে পারে।
 আপনি যদি লগইন করা থাকেন, আপনি এই সতর্কীকরণ বার্তাটি আপনার পছন্দের "সম্পাদনা" অনুচ্ছেদ থেকে নিস্ক্রিয় করতে পারেন।',
+'editpage-notsupportedcontentformat-title' => 'উল্লেখিত পদ্ধতি সমর্থনযোগ্য নয়।',
+'editpage-notsupportedcontentformat-text' => '$1 লেখার ফরম্যাট, $2 কন্টেন্ট মডেলের উপযোগী নয়।',
 
 # Content models
 'content-model-wikitext' => 'উইকিটেক্সট',
@@ -927,6 +934,7 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 'undo-success' => 'সম্পাদনাটি বাতিল করা যাবে। অনুগ্রহ করে নিচের তুলনাটি পরীক্ষা করে দেখুন ও নিশ্চিত করুন যে এটাই আপনি করতে চান, এবং তারপর নিচের সম্পাদনাগুলি সংরক্ষণ করে সম্পাদনাটির বাতিল প্রক্রিয়া সমাপ্ত করুন।',
 'undo-failure' => 'এ সম্পাদনা মধ্যবর্তী সম্পাদনাসমূহের কারণে পূর্বাবস্থায় ফিরিয়ে নেওয়া যাবে না।',
 'undo-norev' => 'সম্পাদনাটি বাতিল করা যাচ্ছেনা কারণ এটি আর নেই বা মুছে ফেলা হয়েছে।',
+'undo-nochange' => 'সম্পাদনাটি পূর্বেই বাতিল করা হয়েছে।',
 'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|আলাপ]])-এর সম্পাদিত $1 নম্বর সংশোধনটি বাতিল করা হয়েছে',
 'undo-summary-username-hidden' => 'একজন লুকানো ব্যবহারকারী $1 রিভিশন পুনরায় ফিরিয়ে এনেছেন',
 
@@ -1008,9 +1016,6 @@ $3-এর দেয়া কারণ হল ''$2''",
 'revdelete-show-file-submit' => 'হ্যাঁ',
 'revdelete-selected' => "'''[[:$1]] পাতার {{PLURAL:$2|নির্বাচিত সংশোধন|নির্বাচিত সংশোধনসমূহ}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|টি নির্বাচিত লগ-ঘটনা|টি নির্বাচিত লগ-ঘটনা}}:'''",
-'revdelete-text' => "'''মুছে ফেলা সংশোধনগুলো এবং ঘটনাগুলি এখনও পাতার ইতিহাস ও লগগুলোতে দেখাবে, কিন্তু তাদের বিষয়বস্তুর অংশবিশেষ সর্বোসাধারণের জন্য উন্মুক্ত থাকবে না।'''
-
-{{SITENAME}} এর অন্যান্য প্রশাসকগণ লুকানো এই বিষয়বস্তু দেখতে পাবেন এবং বাড়তি কোনো সীমাবদ্ধতা না থাকলে একই ইন্টারফেসের মাধ্যমে এটি পুনরুদ্ধার করতে পারবেন।",
 'revdelete-confirm' => 'অনুগ্রহ করে নিশ্চিত করুন যে আপনি এটি করতে চাচ্ছিলেন, আপনি এর ফলাফল সম্পর্কে অবগত আছেন, এবং [[{{MediaWiki:Policy-url}}|নীতিমালার]] উপর ভিত্তি করেই এই কাজটি করছেন।',
 'revdelete-suppress-text' => "নিচের বিষয়গুলোর ক্ষেত্রেই '''কেবলমাত্র'''  চাপাচাপি করা যাবে:
 * সম্ভাব্য মানহানিকর তথ্য
@@ -1150,6 +1155,7 @@ $1",
 'searchrelated' => 'সম্পর্কিত',
 'searchall' => 'সমস্ত',
 'showingresults' => "নিচে '''$2''' নং থেকে শুরু করে {{PLURAL:$1|'''1''' ফলাফল|'''$1''' ফলাফলসমূহ}} দেখানো হল।",
+'showingresultsinrange' => '#<strong>$2</strong> থেকে #<strong>$3</strong> পরিসীমার মধ্যে {{PLURAL:$1|<strong>১টি</strong> ফলাফল|<strong>$1টি</strong> ফলাফল}} নিচে দেখানো হচ্ছে।',
 'showingresultsnum' => "নিম্নে {{PLURAL:$3|'''1''' ফলাফল|'''$3''' ফলাফলসমূহ}} দেখানো হয়েছে যা শুরু হয়েছে #'''$2''' দিয়ে।",
 'showingresultsheader' => "'''$4''' এর জন্য {{PLURAL:$5|ফলাফল '''$3''' এর '''$1'''|ফলাফলসমূহ '''$3''' এর মধ্যে '''$1 - $2'''}}",
 'search-nonefound' => 'খোঁজকৃত পাতার সাথে মিলে যায় এমন কোনো ফলাফল নেই।',
@@ -1465,14 +1471,26 @@ $1",
 'recentchanges-legend-heading' => "'''ব্যাখ্যামূলক বর্ণনা:'''",
 'recentchanges-legend-newpage' => '(আরও দেখুন [[Special:NewPages|নতুন পাতার তালিকা]])',
 'recentchanges-legend-plusminus' => "(''±১২৩'')",
-'rcnotefrom' => "'''$2'''-এর পরে সংঘটিত পরিবর্তনগুলো নিচে দেখানো হল ('''$1'''টি)।",
-'rclistfrom' => '$1-এর পর সংঘটিত নতুন পরিবর্তনগুলো দেখাও।',
+'rcnotefrom' => '<strong>$2</strong>টা থেকে সংঘটিত পরিবর্তনগুলি (সর্বোচ্চ <strong>$1টি</strong> দেখানো হয়েছে)',
+'rclistfrom' => '$2, $3 তারিখের পর সংঘটিত নতুন পরিবর্তনগুলো দেখাও',
 'rcshowhideminor' => 'অনুল্লেখ্য পরিবর্তনগুলো $1',
+'rcshowhideminor-show' => 'দেখাও',
+'rcshowhideminor-hide' => 'আড়াল করো',
 'rcshowhidebots' => 'বটগুলো $1',
+'rcshowhidebots-show' => 'দেখাও',
+'rcshowhidebots-hide' => 'আড়াল করো',
 'rcshowhideliu' => 'নিবন্ধিত ব্যবহারকারীদের $1',
+'rcshowhideliu-show' => 'দেখাও',
+'rcshowhideliu-hide' => 'আড়াল করো',
 'rcshowhideanons' => 'বেনামী ব্যবহারকারীদের $1',
+'rcshowhideanons-show' => 'দেখাও',
+'rcshowhideanons-hide' => 'আড়াল করো',
 'rcshowhidepatr' => 'পরীক্ষিত সম্পাদনা $1',
+'rcshowhidepatr-show' => 'দেখাও',
+'rcshowhidepatr-hide' => 'আড়াল করো',
 'rcshowhidemine' => 'আমার সম্পাদনাগুলো $1',
+'rcshowhidemine-show' => 'দেখাও',
+'rcshowhidemine-hide' => 'আড়াল করো',
 'rclinks' => "'''প্রদর্শনের ধরন'''<br />
 * বিগত ($2) দিনের শেষ ($1)টি পরিবর্তন দেখাও
 * $3",
@@ -1598,6 +1616,7 @@ $1",
 'php-uploaddisabledtext' => 'পিএইপি -এ ফাইল আপলোড নিস্ক্রিয় রয়েছে।
 অনুগ্রহ করে file_uploads সেটিং পরীক্ষা করুন।',
 'uploadscripted' => 'এই ফাইলে এমন HTML বা স্ক্রিপ্ট কোড আছে যা একটি ওয়েব ব্রাউজার ভুল বুঝতে পারে।',
+'uploadscriptednamespace' => 'এই SVG ফাইলে অবৈধ নামস্থান "$1" রয়েছে',
 'uploadvirus' => 'এই ফাইলটিতে ভাইরাস আছে! ব্যাখ্যা: $1',
 'uploadjava' => 'এটি একটি ZIP ফরম্যাটের ফাইল, যেখানে একটি জাভা .class ফরম্যাটের ফাইল রয়েছে।
 জাভা ফাইল আপলোডের কোনো অনুমতি নেই, কারণ এই ধরনের ফাইল সিস্টেমে নিরাপত্তা ত্রুটি তৈরী করতে পারে।',
@@ -1955,6 +1974,11 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 'protectedpages-cascade' => 'শুধুমাত্র প্রপাতাকার সুরক্ষা',
 'protectedpages-noredirect' => 'পুনর্নির্দেশনাগুলো লুকাও',
 'protectedpagesempty' => 'কোন পাতা বর্তমানে এই প্যারামিটারগুলিসহ সুরক্ষিত নয়।',
+'protectedpages-page' => 'পাতা',
+'protectedpages-params' => 'সুরক্ষা প্যারামিটার',
+'protectedpages-reason' => 'কারণ',
+'protectedpages-unknown-timestamp' => 'অজানা',
+'protectedpages-unknown-performer' => 'অজানা ব্যবহারকারী',
 'protectedtitles' => 'সুরক্ষিত শিরোনামগুলি',
 'protectedtitlesempty' => 'কোন শিরোনাম বর্তমানে এই প্যারামিটারগুলিসহ সুরক্ষিত নয়।',
 'listusers' => 'ব্যবহারকারীর তালিকা',
@@ -2142,6 +2166,7 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 'watchmethod-list' => 'নজরে রাখা পাতাগুলিতে সাম্প্রতিক পরিবর্তন পরীক্ষা করা হচ্ছে',
 'watchlistcontains' => 'আপনার নজরতালিকায় $1 টি {{PLURAL:$1|পাতা|পাতা}} রয়েছে।',
 'iteminvalidname' => "'$1'নং আইটেমে সমস্যা, অবৈধ নাম...",
+'wlnote2' => '$3, $2 অনুসারে, সর্বশেষ {{PLURAL:$1|ঘণ্টার|<strong>$1</strong> ঘণ্টার}} পরিবর্তন নিচে দেয়া হয়েছে।',
 'wlshowlast' => 'দেখাও সর্বশেষ  $1 ঘন্টা $2 দিন $3',
 'watchlist-options' => 'নজর তালিকা পছন্দসমূহ',
 
@@ -2229,7 +2254,7 @@ $UNWATCHURL
 'delete-warning-toobig' => 'এই পাতাটির একটি বৃহৎ সম্পাদনা ইতিহাস রয়েছে, যা $1 {{PLURAL:$1|সংস্করণেরও|সংস্করণেরও}} বেশি।
 এই পাতাটি মুছে ফেললে তা {{SITENAME}} সাইটের ডেটাবেজ সমস্যার কারণ হতে পারে;
 সাবধানতার সাথে এগিয়ে যান।',
-'deleting-backlinks-warning' => "'''সতর্কীকরণ:''' আপনি যেটি মুছে ফেলতে যাচ্ছেন তা অন্যান্য পাতাসমূহের সাথে সংযুক্ত অথবা অন্তর্ভুক্ত করা আছে।",
+'deleting-backlinks-warning' => "'''সতর্কীকরণ:''' আপনি যেটি মুছে ফেলতে যাচ্ছেন তা [[Special:WhatLinksHere/{{FULLPAGENAME}}|অন্যান্য পাতাসমূহে]] সংযুক্ত অথবা অন্তর্ভুক্ত রয়েছে।",
 
 # Rollback
 'rollback' => 'সম্পাদনা ফিরিয়ে নিন',
@@ -2402,8 +2427,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'এই আইপি ঠিকানাটি বর্তমানে বাধাদানকৃত অবস্থায় রয়েছে।
 তথ্যসূত্র হিসেবে সাম্প্রতিক বাধাদান লগের ভুক্তিটি নিচে দেওয়া হলো:',
 'sp-contributions-search' => 'অবদানসমূহের জন্য অনুসন্ধান',
+'sp-contributions-suppresslog' => 'মুছে ফেলা ব্যবহারকারী অবদান',
 'sp-contributions-username' => 'আইপি (IP) ঠিকানা অথবা ব্যবহারকারীর নাম:',
-'sp-contributions-toponly' => 'শুধুমাত্র সেই সম্পাদনাগুলি দেখাও যেগুলো সাম্প্রতিক সংস্করণের অন্তর্ভুক্ত।',
+'sp-contributions-toponly' => 'শুধুমাত্র সেই সম্পাদনাগুলি দেখাও যেগুলো সাম্প্রতিক সংস্করণের অন্তর্ভুক্ত',
+'sp-contributions-newonly' => 'শুধুমাত্র পাতা সৃষ্টি করা সম্পাদনাগুলি দেখাও',
 'sp-contributions-submit' => 'অনুসন্ধান',
 
 # What links here
@@ -2504,7 +2531,7 @@ $1',
 'change-blocklink' => 'ব্লক অবস্থার পরিবর্তন করুন',
 'contribslink' => 'অবদান',
 'emaillink' => 'ই-মেইল পাঠাও',
-'autoblocker' => 'আপনাকে স্বয়ংক্রিয়ভাবে বাধা দেওয়া হয়েছে, কারণ আপনার আইপি ঠিকানাটি সম্প্রতি "[[User:$1|$1]]" ব্যবহার করেছেন।   $1-কে বাধাদানের কারণ: "$2"',
+'autoblocker' => 'আপনাকে স্বয়ংক্রিয়ভাবে বাধা দেওয়া হয়েছে, কারণ আপনার আইপি ঠিকানাটি সম্প্রতি "[[User:$1|$1]]" ব্যবহার করেছেন। $1-কে বাধাদানের কারণ "$2"',
 'blocklogpage' => 'বাধা দানের লগ',
 'blocklog-showlog' => 'এই ব্যবহারকারীকে পূর্বেও বাধা প্রদান করা হয়েছিলো।
 তথ্যসূত্র হিসেবে তাই পূর্বের বাধাদানের লগটি নিচে প্রদর্শন করা হচ্ছে:',
index 155e30a..7669e88 100644 (file)
@@ -29,40 +29,53 @@ $digitTransformTable = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'འོà½\82à¼\8bà½\90ིà½\82à¼\8bའà½\90ེà½\93à¼\8bà½\94།',
-'tog-hideminor' => 'རྩོà½\98à¼\8bསà¾\92ྲིà½\82à¼\8bà½\86ུà½\84à¼\8bà½\9aà½\82སà¼\8bསྦསà¼\8bà½\96།',
-'tog-hidepatrolled' => 'ལà¾\9fà¼\8bà½\9eིà½\96à¼\8bà½\96ྱསà¼\8bà½\94འིà¼\8bརྩོà½\98à¼\8bསà¾\92ྲིà½\82à¼\8bསྦསà¼\8bà½\96།',
-'tog-newpageshidepatrolled' => 'ཤོà½\82à¼\8bà½\84ོསà¼\8bà½\82སརà¼\8bà½\96རà¼\8bལà¾\9fà¼\8bà½\9eིà½\96à¼\8bà½\96ྱསà¼\8bà½\94འིà¼\8bརྩོà½\98à¼\8bསà¾\92ྲིà½\82à¼\8bསྦསà¼\8bà½\96།',
-'tog-extendwatchlist' => 'à½\98à½\89à½\98à¼\8bའà½\87ོà½\82à¼\8bà½\90ོà¼\8bà½\96à½\80ྲà½\98ས་ཏེ་ཉེ་ལམ་ཙམ་མིན་པར་བཟོ་བཅོས་ཡོངས་རྫོགས་སྟོན་ཅིག',
-'tog-usenewrc' => 'ཡརà¼\8bརà¾\92ྱསà¼\8bà½\85à½\93à¼\8bà½\82ྱིà¼\8bà½\89ེà¼\8bà½\96འིà¼\8bà½\96à½\9fོà¼\8bà½\96à½\85ོསà¼\8bà½\96ེà½\91à¼\8bསྤྱོà½\91à¼\8bà½\94à¼\8d(Java à½¡à½²à¼\8bà½\96རྡà¼\8bà½\86à½\91à¼\8bà½\91à½\82ོས)',
+'tog-underline' => 'འོà½\82à¼\8bà½\90ིà½\82à¼\8bà½\85à½\93à¼\8bལà¼\8bསྦྲེལà¼\8bà½\98à½\90ུà½\91།',
+'tog-hideminor' => 'à½\89ེà¼\8bà½\91ུསà¼\8bà½\80ྱིà¼\8bརྩོà½\98à¼\8bསà¾\92ྲིà½\82à¼\8bà½\82ལà¼\8bà½\86ུà½\84à¼\8bà½\82ྱིà¼\8bའà½\82ྱུརà¼\8bལྡོà½\82à¼\8bརྣà½\98སà¼\8bསྦས།',
+'tog-hidepatrolled' => 'à½\89ེà¼\8bà½\91ུསà¼\8bà½\80ྱིà¼\8bལà¾\9fà¼\8bà½\9eིà½\96à¼\8bà½\96ྱསà¼\8bà½\94འིà¼\8bརྩོà½\98à¼\8bསà¾\92ྲིà½\82à¼\8bརྣà½\98སà¼\8bསྦས།',
+'tog-newpageshidepatrolled' => 'ཤོà½\82à¼\8bà½\84ོསà¼\8bà½\82སརà¼\8bà½\96རà¼\8bལà¾\9fà¼\8bà½\9eིà½\96à¼\8bà½\96ྱསà¼\8bà½\94འིà¼\8bརྩོà½\98à¼\8bསà¾\92ྲིà½\82à¼\8bà½\80ྱིà¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bསྦས།',
+'tog-extendwatchlist' => 'ལà¾\9fà¼\8bà½\9eིà½\96à¼\8bà½\90ོà¼\8bརà¾\92ྱà¼\8bསà¾\90ྱེà½\91་ཏེ་ཉེ་ལམ་ཙམ་མིན་པར་བཟོ་བཅོས་ཡོངས་རྫོགས་སྟོན་ཅིག',
+'tog-usenewrc' => 'à½\89ེà¼\8bà½\96འིà¼\8bà½\96à½\9fོà¼\8bà½\96à½\85ོསà¼\8bà½\91à½\84à¼\8bà½\91à½\82སà¼\8bའà½\91ེà½\98སà¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bà½\80ྱིà¼\8bà½\96à½\85ོསà¼\8bའà½\82ྱུརà¼\8bརà¾\90ྱེà½\93à¼\8bà½\94སà¼\8bསྡེà¼\8bà½\9aà½\93à¼\8bà½\96à½\85ོསà¼\8bའà½\82ྱུརà¼\8bà½\95ྱིà½\93à¼\8bའà½\91ུà½\82à¼\8d',
 'tog-numberheadings' => 'རང་སྒྲིག་ཨང་རྟགས་འགོ་བརྗོད།',
-'tog-showtoolbar' => 'རྩོམ་སྒྲིག་ལག་ཆ་སྟོན།(JavaScript ཡི་བརྡ་ཆད་དགོས།)',
-'tog-editondblclick' => 'ཤོག་ངོས་རྩོམ་སྒྲིག་བྱེད་པར་ལན་གཉིས་རྡེབ།(JavaScript ཡི་བརྡ་ཆད་དགོས།)',
-'tog-rememberpassword' => 'ངའི་ནང་འཛུལ་བཤར་ལྟ་ཆས་འདི་རུ་མང་མཐའ་ཉིན $1 {{PLURAL:$1}} དྲན་པར་མཛོད།',
-'tog-watchcreations' => 'ངའི་ལྟ་ཐོའི་གྲས་སུ་གསར་བཟོ་བྱས་པ་ལ་ཤོག་ངོས་ཁ་སྣོན།',
-'tog-watchdefault' => 'ངའི་ལྟ་ཐོའི་གྲས་སུ་རྩོམ་སྒྲིག་བྱས་པ་ལ་ཤོག་ངོས་ཁ་སྣོན།',
-'tog-watchmoves' => 'ངའི་ལྟ་ཐོའི་གྲས་སུ་སྤོར་བ་ལ་ཤོག་ངོས་ཁ་སྣོན།',
-'tog-watchdeletion' => 'ངའི་ལྟ་ཐོའི་གྲས་སུ་དོར་བ་ལ་ཤོག་ངོས་ཁ་སྣོན།',
-'tog-previewontop' => 'རྩོམ་སྒྲིག་སྒྲོམ་གྱི་སྔོན་དུ་དཔེ་གཟུགས་སྟོན་པ།',
-'tog-previewonfirst' => 'ཐོག་མའི་རྩོམ་སྒྲིག་སྟེང་དུ་དཔེ་གཟུགས་སྟོན་པ།',
-'tog-enotifwatchlistpages' => 'ངའི་ལྟ་ཐོའི་ཤོག་ངོས་ལ་བཟོ་བཅོས་བྱུང་ཚེ་གློག་འཕྲིན་གཏང་རོགས།',
+'tog-showtoolbar' => 'རྩོམ་སྒྲིག་ལག་ཆ་སྟོན། (JavaScript ཡི་བརྡ་ཆད་དགོས།)',
+'tog-editondblclick' => 'ཤོག་ངོས་རྩོམ་སྒྲིག་བྱེད་པར་ལན་གཉིས་རྡེབ།',
+'tog-editsectiononrightclick' => 'དུམ་འཚམས་ཀྱི་འགོ་འརྗོད་ལ་འཐེབ་གཞོང་གཡས་པ་གནོན་ཏེ་དུམ་འཚམས་བཟོ་འཅོས་བྱེད་རོགས།',
+'tog-rememberpassword' => 'ངའི་ནང་འཛུལ་བཤར་ཆས་འདི་སྟེང་(མང་མཐར་ཉིན $1 དྲན་པར་མཛོད། )',
+'tog-watchcreations' => 'ངས་གསར་བཟོ་བྱས་པའི་ཤོག་ངོས་དང་ཡིག་ཆ་ཡར་འཇུག་བྱས་པ་རྣམས་ངའི་དགའ་འདེམས་ཐོ་ལ་སྣོན་རོགས།',
+'tog-watchdefault' => 'ངས་ཁ་སྣོན་བྱས་པའི་ཤོག་ངོས་དང་ཡིག་ཆ་རྣམས་ངའི་ལྟ་ཞིབ་ཐོ་ནང་སྣོན་རོགས།',
+'tog-watchmoves' => 'ངས་ཤོག་ངོས་དང་ཡིག་ཆ་ཕན་ཚུན་སྤོར་བ་རྣམས་ངའི་ལྟ་ཞིབ་ཐོའི་ནང་སྣོན་རོགས།',
+'tog-watchdeletion' => 'ངས་ཤོག་ངོས་དང་ཡིག་ཆ་སུབ་འདོར་བྱས་པ་རྣམས་ངའི་ལྟ་ཞིབ་ཐོའི་ནང་སྣོན་རོགས།',
+'tog-minordefault' => 'ཁ་སྣོན་རྩོམ་སྒྲིག་རྣམས་རང་འགུལ་གྱིས་རྩོམ་སྒྲིག་ཕལ་པར་རྟགས་རྒྱོབ་རོགས།',
+'tog-previewontop' => 'རྩོམ་སྒྲིག་སྒྲོམ་གྱི་སྟེང་སྔོན་ལྟའི་དཔེ་གཟུགས་སྟོན།',
+'tog-previewonfirst' => 'ཐེངས་དང་པོའི་རྩོམ་སྒྲིག་སྟེང་དུ་སྔོན་ལྟའི་དཔེ་གཟུགས་སྟོན།',
+'tog-enotifwatchlistpages' => 'ངའི་ལྟ་ཞིབ་ཐོ་ནང་གི་ཤོག་ངོས་དང་ཡིག་ཆ་རྣམས་ལ་འགྱུར་ལྡོག་བྱུང་ཚེ་ང་ལ་གློག་འཕྲིན་གཏོང་རོགས།',
 'tog-enotifusertalkpages' => 'ངའི་སྤྱོད་མིའི་གླེང་མོལ་ལ་བཟོ་བཅོས་བྱུང་ཚེ་གློག་འཕྲིན་གཏང་རོགས།',
-'tog-enotifminoredits' => 'རྩོམ་སྒྲིག་ཆུང་ཚགས་རིགས་ལའང་གློག་འཕྲིན་གཏོང་རོགས།',
+'tog-enotifminoredits' => 'རྩོམ་སྒྲིག་དང་ཡིག་ཆར་བཟོ་བཅོས་ཆུང་ཚགས་རིགས་བྱུང་ན་ཡང་གློག་འཕྲིན་གཏོང་རོགས།',
+'tog-enotifrevealaddr' => 'ངའི་གློག་འཕྲིན་ཁ་བྱང་འདི་བརྡ་ཐོའི་ཁ་བྱང་ནང་གསལ་སྟོན་བྱེད་རོགས།',
 'tog-shownumberswatching' => 'ཤོག་ངོས་ལ་ལྟ་བཞིན་པའི་སྤྱོད་མིའི་ཁ་གྲངས་སྟོན།',
 'tog-oldsig' => 'ད་ཡོད་མིང་རྟགས།',
-'tog-watchlisthideown' => 'ངའི་རྩོམ་སྒྲིག་རྣམས་ལྟ་ཐོ་ལས་སྦས་རོགས།',
-'tog-watchlisthideminor' => 'རྩོམ་སྒྲིག་ཕལ་བ་རྣམས་ལྟ་ཐོ་ལས་སྦས་རོགས།',
+'tog-fancysig' => 'མིང་རྟགས་རྣམས་ཝེ་ཁེ་ཡི་གེར་བརྩིས་རོགས། (རང་འགུལ་གྱི་སྦྲེལ་མཐུད་མེད་པ།)',
+'tog-uselivepreview' => 'འཆར་བཞིན་པའི་སྔོན་ལྟ་སྟོན་རོགས། (ཚོད་ལྟའི་ཆེད།)',
+'tog-forceeditsummary' => 'རྩོམ་སྒྲིག་ཀྱི་བསྡུས་དོན་སྟོང་པ་ནང་འཇུག་བྱེད་སྐབས་ང་ལ་དྲན་སྐུལ་བྱེད་རོགས།',
+'tog-watchlisthideown' => 'ངའི་རྩོམ་སྒྲིག་རྣམས་ལྟ་ཞིབ་ཐོ་ལས་སྦས་རོགས།',
+'tog-watchlisthidebots' => 'རང་འགུལ་འཕྱུལ་ཆས་ཀྱི་བཟོ་འཅོས་བྱས་པ་རྣམས་ངའི་ལྟ་ཞིབ་ཐོ་ལས་སྦས་རོགས།',
+'tog-watchlisthideminor' => 'རྩོམ་སྒྲིག་ཕལ་བ་རྣམས་ལྟ་ཞིབ་ཐོ་ལས་སྦས་རོགས།',
 'tog-watchlisthideliu' => 'ཐོ་འཛུལ་སྤྱོད་མིའི་རྩོམ་སྒྲིག་རྣམས་ལྟ་ཐོ་ལས་སྦས་རོགས།',
+'tog-watchlisthideanons' => 'མིང་མེད་པའི་སྤྱོད་མིས་རྩོམ་སྒྲིག་བྱས་པ་རྣམས་ལྟ་ཐོ་ལས་སྦས་རོགས།',
+'tog-watchlisthidepatrolled' => 'མྱལ་ཞིབ་བྱས་པའི་རྩོམ་སྒྲིག་རྣམས་ལྟ་ཐོ་ལས་སྦས་རོགས།',
 'tog-ccmeonemails' => 'ངས་གཞན་ལ་བཏང་བའི་གློག་འཕྲིན་གྱི་འདྲ་བཤུས་སྐུར་རོགས།',
+'tog-diffonly' => 'ཁྱད་པར་འཚོལ་སྐབས་ཤོག་ངོས་གྱི་ནང་དོན་མ་སྟོན་རོགས།',
 'tog-showhiddencats' => 'སྦས་བའི་དཀར་ཆག་སྟོན་རོགས།',
+'tog-norollbackdiff' => 'སྒྲེ་ལོག་རྒྱག་སྐབས་ཁྱད་པར་རྣམས་སྐྱུར་རོགས།',
+'tog-useeditwarning' => 'ངས་རྩོམ་སྒྲིག་ཤོག་ངོས་གང་རུང་ཐོག་བཟོ་འཅོས་རྣམས་ཉར་གཆོག་མ་བྱས་པར་འདོར་ན་ཉེན་བརྡ་གཏོང་རོགས།',
+'tog-prefershttps' => 'རྒྱན་དུ་ནང་འཛུལ་བྱས་བའི་སྐབས་བདེ་འཇགས་འབྲེལ་ལམ་བརྒྱུད་རོགས།',
 
-'underline-always' => 'à½\93à½\98à¼\8bཡà½\84à¼\8bà¼\8d',
-'underline-never' => 'à½\93à½\98à¼\8bཡà½\84à¼\8bà½\98ིà½\93།',
-'underline-default' => 'རà¾\92ྱསà¼\8bà½\96à¼\8bའà½\91ྲེà½\93à¼\8bà½\94།',
+'underline-always' => 'à½\91ུསà¼\8bརà¾\92ྱུà½\93à¼\8bà½\91ུà¼\8b',
+'underline-never' => 'à½\82à½\8fà½\93à¼\8bà½\93སà¼\8bà½\98à¼\8bà½\96ྱེà½\91།',
+'underline-default' => 'འཤརà¼\8bà½\86སà¼\8bà½\91à½\84à¼\8bརà¾\92ྱà½\96à¼\8bལà¾\97ོà½\84སà¼\8bརྣà½\98སà¼\8bརà½\84à¼\8bསོརà¼\8bà½\96à½\9eà½\82à¼\8bརོà½\82ས།',
 
 # Font style option in Special:Preferences
-'editfont-style' => 'རྩོམ་སྒྲིག་ཡིག་གཟུགས།',
-'editfont-default' => 'རà¾\92ྱསà¼\8bà½\94à¼\8bའà½\91ྲེà½\93à¼\8bà½\94།',
+'editfont-style' => 'རྩོà½\98à¼\8bསà¾\92ྲིà½\82à¼\8bà½\96à½\9fོà¼\8bའà½\85ོསà¼\8bà½\81ུལà¼\8bà½\82ྱིà¼\8bཡིà½\82à¼\8bà½\82à½\9fུà½\82སà¼\8d',
+'editfont-default' => 'འཤརà¼\8bà½\86སà¼\8bརà½\84à¼\8bསོརà¼\8bà½\96à½\9eà½\82།',
 'editfont-monospace' => 'བར་ཚད་མཉམ་པའི་ཡིག་གཟུགས།',
 'editfont-sansserif' => 'ཡིག་གཟུགས་རྭ་མེད།',
 'editfont-serif' => 'ཡིག་གཟུགས་རྭ་ཅན།',
@@ -82,18 +95,18 @@ $messages = array(
 'thu' => 'གཟའ་ཕུར་བུ།',
 'fri' => 'གཟའ་པ་སངས།',
 'sat' => 'གཟའ་སྤེན་པ།',
-'january' => 'ཟླ་དང་པོ།',
-'february' => 'ཟླ་གཉིས་པ།',
-'march' => 'ཟླ་གསུམ་པ།',
-'april' => 'ཟླ་བཞི་བ།',
-'may_long' => 'ཟྮ་ལྔ་བ།',
-'june' => 'ཟླ་དྲུག་པ།',
-'july' => 'ཟླ་བདུན་པ།',
-'august' => 'ཟླ་བརྒྱད་པ།',
-'september' => 'ཟླ་དགུ་བ།',
-'october' => 'ཟླ་བཅུ་བ།',
-'november' => 'ཟླ་བཅུ་གཅིག་པ།',
-'december' => 'ཟླ་བཅུ་གཉིས་པ།',
+'january' => 'à½\9fླà¼\8bà½\96à¼\8bà½\91à½\84à¼\8bà½\94ོà¼\8d',
+'february' => 'à½\9fླà¼\8bà½\96à¼\8bà½\82à½\89ིསà¼\8bà½\94à¼\8d',
+'march' => 'à½\9fླà¼\8bà½\96à¼\8bà½\82སུà½\98à¼\8bà½\94à¼\8d',
+'april' => 'à½\9fླà¼\8bà½\96à¼\8bà½\96à½\9eིà¼\8bà½\96à¼\8d',
+'may_long' => 'à½\9fྮà¼\8bà½\96à¼\8bལà¾\94à¼\8bà½\96à¼\8d',
+'june' => 'à½\9fླà¼\8bà½\96à¼\8bà½\91ྲུà½\82à¼\8bà½\94à¼\8d',
+'july' => 'à½\9fླà¼\8bà½\96à¼\8bà½\96à½\91ུà½\93à¼\8bà½\94à¼\8d',
+'august' => 'à½\9fླà¼\8bà½\96à¼\8bà½\96རà¾\92ྱà½\91à¼\8bà½\94à¼\8d',
+'september' => 'à½\9fླà¼\8bà½\96à¼\8bà½\91à½\82ུà¼\8bà½\96à¼\8d',
+'october' => 'à½\9fླà¼\8bà½\96à¼\8bà½\96à½\85ུà¼\8bà½\96à¼\8d',
+'november' => 'à½\9fླà¼\8bà½\96à¼\8bà½\96à½\85ུà¼\8bà½\82à½\85ིà½\82à¼\8bà½\94à¼\8d',
+'december' => 'à½\9fླà¼\8bà½\96à¼\8bà½\96à½\85ུà¼\8bà½\82à½\89ིསà¼\8bà½\94à¼\8d',
 'january-gen' => 'ཟླ་དང་པོ།',
 'february-gen' => 'ཟླ་གཉིས་པ།',
 'march-gen' => 'ཟླ་གསུམ་པ།',
@@ -106,9 +119,9 @@ $messages = array(
 'october-gen' => 'ཟླ་བཅུ་བ།',
 'november-gen' => 'ཟླ་བཅུ་གཅིག་པ།',
 'december-gen' => 'ཟླ་བཅུ་གཉིས་པ།',
-'jan' => 'ཟླ་དང་པོ།',
-'feb' => 'ཟླ་གཉིས་པ།',
-'mar' => 'ཟླ་གསུམ་པ།',
+'jan' => 'à½\9fླà¼\8bà½\96à¼\8bà½\91à½\84à¼\8bà½\94ོà¼\8d',
+'feb' => 'à½\9fླà¼\8bà½\96à¼\8bà½\82à½\89ིསà¼\8bà½\94à¼\8d',
+'mar' => 'à½\9fླà¼\8bà½\96à¼\8bà½\82སུà½\98à¼\8bà½\94à¼\8d',
 'apr' => 'ཟླ་བཞི་བ།',
 'may' => 'ཟླ་ལྔ་བ།',
 'jun' => 'ཟླ་དྲུག་པ།',
@@ -118,24 +131,45 @@ $messages = array(
 'oct' => 'ཟླ་བཅུ་བ།',
 'nov' => 'ཟླ་བཅུ་གཅིག་པ།',
 'dec' => 'ཟླ་བཅུ་གཉིས་པ།',
+'january-date' => 'ཟླ་བ་དང་པོ། $1',
+'february-date' => 'ཟླ་བ་གཉིས་པ། $1',
+'march-date' => 'ཟླ་བ་གསུམ་པ། $1',
+'april-date' => 'ཟླ་བ་བཞི་པ། $1',
+'may-date' => 'ཟླ་བ་ལྔ་པ། $1',
+'june-date' => 'ཟླ་བ་དྲུག་པ། $1',
+'july-date' => 'ཟླ་བ་བདུན་པ། $1',
+'august-date' => 'ཟླ་བ་བརྒྱད་པ། $1',
+'september-date' => 'ཟླ་བ་དགུ་པ། $1',
+'october-date' => 'ཟླ་བ་བཅུ་པ། $1',
+'november-date' => 'ཟླ་བ་བཅུ་གཅིག་པ། $1',
+'december-date' => 'ཟླ་བ་བཅུ་གཉིས་པ། $1',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:|སྡེ་ཚན་|སྡེ་ཚན་ $1}}',
 'category_header' => '"$1"ནང་་གི་ཤོག་ངོས།',
 'subcategories' => 'རིགས་གཏོགས།',
 'category-media-header' => '"$1"ནང་་གི་ཆ་འཕྲིན།',
-'category-empty' => "''སྡེ་ཚན་འདིའི་ནང་དུ་བར་སྐབས་སུ་ཤོག་ངོས་སམ་ཆ་འཕྲིན་མི་འདུག ''",
+'category-empty' => '<em> སྡེ་ཚན་འདིའི་ནང་དུ་བར་སྐབས་སུ་ཤོག་ངོས་སམ་བརྙན་རིས་མི་འདུག། </em>',
 'hidden-categories' => '|སྦས་བའི་སྡེ་ཚན།|སྦས་བའི་སྡེ་ཚན།}}{{PLURAL:$1',
 'hidden-category-category' => 'སྦས་བའི་སྡེ་ཚན།',
+'category-subcat-count' => '{{PLURAL:$2|སྡེ་ཙན་འདི་ནང་ཁྱོན་སྡོམས་པས་ $2 ནས་ གཤམ་གྱི་བྱེ་བྲག་སྡེ་ཚན།{{PLURAL:$1|subcategory|$1 subcategories}}ཙམ་འདུག།}}',
 'category-subcat-count-limited' => 'སྡེ་ཚན་འདིར་གཤམ་གྱི་བྱེ་བྲག་སྡེ་ཚན་{{PLURAL:$1|subcategory|$1 subcategories}}ཡོད།',
 'category-article-count' => '{{PLURAL:$2|སྡེ་ཚན་འདིར་གཤམ་གྱི་ཤོག་ངོས་ཁོ་ན་བསྡུས་ཡོད། |The following {{PLURAL:$1|page is|$1 pages are}} in this category, out of $2 total.}}',
+'category-article-count-limited' => 'གཤམ་གྱི་{{PLURAL:$1|ཤོག་ངོས་འདི་|$1 ཤོག་ངོས་རྣམས་}}ད་གནས་སྡེ་ཚན་འདི་ནང་ཡོད།',
+'category-file-count' => '{{PLURAL:$2|སྡེ་ཚན་འདི་ནང་གཤམ་གྱི་ཡིག་ཆ་ཁོ་ན་ཡོད།|གཤམ་གྱི་ {{PLURAL:$1|ཡིག་ཆ་འདི་|$1 ཡིག་ཆ་རྣམས་}} སྡེ་ཚན་འདི་ནང་གི་,ཁྱོན་བསྡོམས་གྱི་ $2 ནས་ཡིན།}}',
+'category-file-count-limited' => 'གཤམ་གྱི་{{PLURAL:$1|ཡིག་ཆ་འདི་|$1ཡིག་ཆ་རྣམས་}}ད་གནས་སྡེ་ཚན་འདི་ནང་ཡོད།',
+'listingcontinuesabbrev' => 'མུ་འཐུད།',
+'index-category' => 'དཀར་ཆག་ཅན་གྱི་ཤོག་ངོས།',
+'noindex-category' => 'དཀར་ཆག་མེད་པའི་ཤོག་ངོས།',
+'broken-file-category' => 'ཡིག་ཆའི་སྦྲེལ་མཐུད་འབོར་བརླག་སོང་བའི་ཤོག་ངོས།',
 
 'about' => 'སྐོར།',
 'article' => 'ནང་དོན་ཤོག་ངོས།',
 'newwindow' => '(སྒེའུ་ཁུང་གསར་བར་ཕྱེ་བ།)',
 'cancel' => 'རྩིས་མེད།',
 'moredotdotdot' => 'དེ་ལས་མང་བ་་་',
-'mypage' => 'ངའི་ཤོག་ངོས།',
+'morenotlisted' => 'ཐོ་གཞུང་འདི་ཆ་ཚང་མེད།',
+'mypage' => 'ཤོག་ངོས།',
 'mytalk' => 'གཏམ་གླེང།',
 'anontalk' => 'IP གནས་ཡུལ་འདི་ལ་གླེང་མོལ།',
 'navigation' => 'ཕྱོགས་ཁྲིད།',
@@ -143,7 +177,8 @@ $messages = array(
 
 # Cologne Blue skin
 'qbfind' => 'འཚོལ་བ།',
-'qbedit' => 'རྩོམ་སྒྲིག',
+'qbbrowse' => 'བཤེར་འཚོལ།',
+'qbedit' => 'བཟོ་འཅོས།',
 'qbpageoptions' => 'ཤོག་ངོས་འདི།',
 'qbmyoptions' => 'ངའི་ཤོག་ངོས།',
 'faq' => 'རྒྱུན་ལྡན་དྲི་བ།',
@@ -153,30 +188,32 @@ $messages = array(
 'vector-action-addsection' => 'བརྗོད་གཞི་ཁ་སྣོན།',
 'vector-action-delete' => 'སུབས།',
 'vector-action-move' => 'སྤོར་བ།',
-'vector-action-protect' => 'སྲུà½\84à¼\8bསà¾\90ྱོà½\96།',
-'vector-action-undelete' => 'à½\96སུà½\96སà¼\8bà½\94à¼\8bà½\82སོà¼\8bà½\96à¼\8d',
+'vector-action-protect' => 'འà½\82ོà½\82à¼\8bསྲུà½\84།',
+'vector-action-undelete' => 'à½\98ིà¼\8bà½\96སུà½\96སà¼\8b',
 'vector-action-unprotect' => 'སྲུང་སྐྱོབ་གློད་པ།',
 'vector-view-create' => 'གསར་བཟོ།',
 'vector-view-edit' => 'རྩོམ་སྒྲིག',
 'vector-view-history' => 'ལོ་རྒྱུས་ལ་ལྟ་བ།',
 'vector-view-view' => 'ཀློག་པ།',
 'vector-view-viewsource' => 'ཁུངས་ལ་ལྟ་བ།',
-'actions' => 'བྱ་འགུལ།',
-'namespaces' => 'མིང་འགོད་ས།',
+'actions' => 'བྱ་སྤྱོད།',
+'namespaces' => 'མིང་གནས།',
+'variants' => 'འགྱུར་ཚད།',
 
+'navigation-heading' => 'ཕྱོགས་ཁྲིད་འདེམས་བྱང།',
 'errorpagetitle' => 'ནོར་འཁྲུལ།',
 'returnto' => '$1 ལ་བསྐྱར་ལོག་བྱེད་པ།',
 'tagline' => 'ཡོང་ཁུངས་{{SITENAME}}',
-'help' => 'རོà½\82སà¼\8bརà½\98།',
+'help' => 'à½\95à½\93à¼\8bà½\82ྲོà½\82ས།',
 'search' => 'འཚོལ་བ།',
-'searchbutton' => 'འà½\9aོལà¼\8bà½\96à¼\8d',
+'searchbutton' => 'འཚོལ།',
 'go' => 'སོང་།',
 'searcharticle' => 'འཚོལ།',
 'history' => 'ཤོག་ངོས་ལོ་རྒྱུས།',
 'history_short' => 'ལོ་རྒྱུས།',
 'updatedmarker' => 'ཐེངས་སྔོན་མའི་ལྟ་ཀློག་རྗེས་ཀྱི་བཟོ་བཅོས།',
-'printableversion' => 'à½\91à½\94རà¼\8bà½\90ུà½\96à¼\8bà½\94།',
-'permalink' => 'རà¾\9fà½\82à¼\8bà½\96རà¾\9fà½\93à¼\8bà½\82ྱིà¼\8bà½\91ྲà¼\8bའà½\96ྲེལ།',
+'printableversion' => 'à½\94རà¼\8bའà½\91ེà½\96སà¼\8bརུà½\84à¼\8bà½\96འིà¼\8bའà½\82ྱུར།',
+'permalink' => 'à½\96རà¾\9fà½\93à¼\8bའà½\87à½\82སà¼\8bà½\80ྱིà¼\8bསྦྲེལà¼\8bà½\98à½\90ུà½\91།',
 'print' => 'དཔར་བ།',
 'view' => 'ལྟ་བ།',
 'edit' => 'རྩོམ་སྒྲིག',
@@ -185,22 +222,23 @@ $messages = array(
 'create-this-page' => 'ཤོག་ངོས་འདི་སྐྲུན་པ།',
 'delete' => 'སུབས།',
 'deletethispage' => 'ཤོག་ངོས་འདི་འདོར་བ།',
-'undelete_short' => '{{PLURAL:$1|one edit|$1edits}} མ་འདོར་ཞིག',
+'undeletethispage' => 'ཤོག་ངོས་འདི་མི་སུབ་རོགས།',
+'undelete_short' => '{{PLURAL:$1|བཟོ་འཅོས་གཅིག་|བཟོ་འཅོས་ $1}}མ་བསུབ་རོགས།',
 'viewdeleted_short' => '{{བསུབས་པའི་རྩོམ་སྒྲིག PLURAL:$1|བསུབས་པའི་རྩོམ་སྒྲིག $1}}ལ་ལྟ་བ།',
-'protect' => 'སྲུà½\84à¼\8bà½\96།',
+'protect' => 'འà½\82ོà½\82à¼\8bསྲུà½\84།',
 'protect_change' => 'སྒྱུར་བཅོས།',
 'protectthispage' => 'ཤོག་ངོས་འདི་སྲུང་བ།',
 'unprotect' => 'སྲུང་སྐྱོབ་བཅོས་བསྒྱུར།',
 'unprotectthispage' => 'ངོ་ཤོག་འདིའི་སྲུང་སྐྱོབ་བཅོས་བསྒྱུར།',
 'newpage' => 'ཤོག་ངོས་གསར་བ།',
 'talkpage' => 'ཤོག་ངོས་འདིར་གྲོས་སྡུར།',
-'talkpagelinktext' => 'à½\82ླེà½\84à¼\8bà½\98ོལ།',
+'talkpagelinktext' => 'à½\82à½\8fà½\98à¼\8bà½\82ླེà½\84།',
 'specialpage' => 'དམིགས་གསལ་ཤོག་ངོས།',
 'personaltools' => 'སྒེར་ཀྱི་ལག་ཆ།',
 'postcomment' => 'སྡེ་ཚན་གསར་བ།',
 'articlepage' => 'ནང་དོན་ཤོག་ངོས་ལ་ལྟ་བ།',
 'talk' => 'གྲོས་བསྡུར།',
-'views' => 'à½\98à½\90ོà½\84à¼\8bརིས།',
+'views' => 'ལà¾\9fà¼\8bà½\9eིà½\96།',
 'toolbox' => 'ལག་ཆའི་སྒམ།',
 'userpage' => 'སྤྱོད་མིའི་ཤོག་ངོས་ལ་ལྟ་བ།',
 'projectpage' => 'ལས་འཆར་ཤོག་ངོས་ལ་ལྟ་བ།',
@@ -210,61 +248,83 @@ $messages = array(
 'viewhelppage' => 'རོགས་རམ་ཤོག་ངོས་ལ་ལྟ་བ།',
 'categorypage' => 'སྡེ་ཚན་ཤོག་ངོས་སྟོན་ཅིག',
 'viewtalkpage' => 'གྲོས་མོལ་ལ་ལྟ་བ།',
-'otherlanguages' => 'སྐད་རིགས་གཞན།',
+'otherlanguages' => 'སà¾\90à½\91à¼\8bརིà½\82སà¼\8bà½\82à½\9eà½\93à¼\8bà½\90ོà½\82à¼\8d',
 'redirectedfrom' => '$1 ནས་ཁ་ཕྱོགས་བསྐྱར་དུ་བཟོས་པ།',
 'redirectpagesub' => 'རིམ་འགྲེམ་ཤོག་ངོས།',
-'lastmodifiedat' => 'དྲ་ངོས་འདི་ཡི་བཟོ་བཅོས་མཐའ་མ་$1 $2 ལ་རེད།',
+'lastmodifiedat' => 'ཤོག་ངོས་འདི་ཡི་བཟོ་བཅོས་མཐའ་མ་$1 ཀྱི་ $2 ལ་རེད།',
+'viewcount' => 'ཤོགངོས་འདི་{{PLURAL:$1|ཐེངས་གཅིག་|ཐེངས་ $1}}བལྟས་འདུག།',
 'protectedpage' => 'སྲུང་སྐྱོབ་བྱས་པའི་ཤོག་ངོས།',
 'jumpto' => 'གནས་སྤོ།',
 'jumptonavigation' => 'ཕྱོགས་ཁྲིད།',
 'jumptosearch' => 'འཚོལ།',
+'view-pool-error' => 'དགོངས་པ་མ་ཚོམས་རོགས། སྤྱོད་མི་མང་དག་ཞིག་གི་ཤོག་ངོས་འདིར་གཟིགས་ཞིང་འདུག་པས། གནས་སྐབས་རིང་ཞབས་ཞུ་འཕྲུལ་ཆས་ཐེག་བརྒལ་བྱས་འདུག། 
+ཤོག་ངོས་འདིར་བསྐྱར་དུ་མ་གཟིགས་གོང་ཡུད་ཙམ་རིང་སྒུག་རོགས་གནང། $1',
+'pool-timeout' => 'ཟྭ་རྒྱག་སྒུག་ཡུན་གྱི་དུས་ཚོད་རྫོགས་སོང།',
+'pool-queuefull' => 'སྤྱི་པའི་ཐེབས་རྩའི་བསྟར་པ་ཁེངས་འདུག།',
 'pool-errorunknown' => 'ངོས་མ་ཟིན་པའི་ནོར་འཁྲུལ།',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => '{{SITENAME}}à½\84ེà½\91à¼\8bà½\80ྱི་སྐོར།',
-'aboutpage' => 'Project: ཡི་སྐོར།',
-'copyright' => 'à½\91ྲà¼\8bà½\96འིà¼\8bà½\93à½\84à¼\8bà½\91ོà½\93à¼\8b$1སྟེང་དུ་ཡོད།',
+'aboutsite' => '{{SITENAME}}ཡི་སྐོར།',
+'aboutpage' => 'Project:སྐོར།',
+'copyright' => 'à½\91ེà¼\8bà½\98ིà½\93à¼\8bà½\82ྱིà¼\8bà½\98à½\86à½\93à¼\8bའà½\82ྲེལà¼\8bཡོà½\91à¼\8bà½\93à¼\8bà½\98à¼\8bà½\82à½\8fོà½\82སà¼\8d à½\91ྲà¼\8bà½\96འིà¼\8bà½\93à½\84à¼\8bà½\91ོà½\93à¼\8b $1 སྟེང་དུ་ཡོད།',
 'copyrightpage' => '{{ns:project}}:པར་དབང་།',
-'currentevents' => 'à½\91à¼\8bལà¾\9fའིà¼\8bà½\96ྱà¼\8bà½\96།',
-'currentevents-url' => 'Project:à½\91à¼\8bལà¾\9fའིà¼\8bà½\96ྱà¼\8bà½\96།',
-'disclaimers' => 'à½\91à½\82à½\82à¼\8bà½\96ྱ།',
-'disclaimerpage' => 'Project:སྤྱིའིà¼\8bà½\91à½\82à½\82à¼\8bà½\96ྱ།',
+'currentevents' => 'à½\91à¼\8bལà¾\9fའིà¼\8bà½\91ོà½\93à¼\8bà½\82à½\93à½\91།',
+'currentevents-url' => 'Project:à½\91à¼\8bལà¾\9fའིà¼\8bà½\91ོà½\93à¼\8bà½\82à½\93à½\91།',
+'disclaimers' => 'à½\96à½\91à½\82à¼\8bསྤྲོà½\91à¼\8bའà½\91ོརà¼\8bà½\98à½\81à½\93།',
+'disclaimerpage' => 'Project:ཡོà½\84སà¼\8bà½\81ྱà½\96à¼\8bà½\80ྱིà¼\8bà½\96à½\91à½\82à¼\8bསྤྲོà½\91à¼\8bà½\81ེà¼\8bà½\91à½\96à½\84à¼\8bརྩོà½\91à¼\8bལེà½\93།',
 'edithelp' => 'རྩོམ་སྒྲིག་རོགས་རམ།',
-'helppage' => 'Help:à½\93à½\84à¼\8bà½\91ོà½\93à¼\8b',
-'mainpage' => 'གཙོ་ངོས།',
-'mainpage-description' => 'གཙོ་ངོས།',
+'helppage' => 'Help:à½\93à½\84à¼\8bà½\91ོà½\93à¼\8d',
+'mainpage' => 'à½\82à½\99ོà¼\8bà½\82à½\93à½\91à¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8d',
+'mainpage-description' => 'à½\82à½\99ོà¼\8bà½\82à½\93à½\91à¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8d',
 'policy-url' => 'Project: སྒྲིག་གཞི།',
-'portal' => 'ཁོངས་མི་འདུ་ར།',
-'privacy' => 'སྒེར་ཁྲིམས།',
-'privacypage' => 'Project: སྒེར་ཁྲིམས།',
+'portal' => 'ཁོངས་མི་གཞུང་སྒོ།',
+'portal-url' => 'Project:ཁོངས་མི་འདུ་རའི་གཞུང་སྒོ་',
+'privacy' => 'གསང་དོན་གན་རྒྱ།',
+'privacypage' => 'Project: གསང་དོན་གན་རྒྱ།',
 
 'badaccess' => 'ཆོག་ཆན་ལ་ནོར་འཁྲུལ།',
+'badaccess-group0' => 'ཁྱེད་ཀྱི་རེ་ཞུ་བྱས་པའི་བྱ་བ་འདི་ཁྱེད་ཉིད་ནས་ལག་ལེན་བསྟར་མི་ཆོག།',
+'badaccess-groups' => 'ཁྱེད་ཀྱི་རེ་ཞུ་བྱས་པའི་བྱ་བ་འདི་ {{PLURAL:$2|ཚོགས་པ་|ཚོགས་པ་གཅིག་}}: $1 གྱི་སྤྱིད་མི་ཚད་གཞི་ངེས་ཅན་རྣམས་ལ་ཡོད་',
+
+'versionrequired' => 'ཝེ་ཁེ་བརྒྱུད་ལམ་གྱི་འགྱུར།  MediaWiki Version $1 དེ་དགོས་འདུག།',
+'versionrequiredtext' => 'ཤོག་ངོས་འདི་བེད་སྤྱོད་པར་ཝེ་ཁེ་བརྒྱུད་ལམ་གྱི་འགྱུར་ $1 འདི་དགོས། [[Special:Version|version page]] འདིར་གཟིགས་རོགས།',
 
 'ok' => 'འགྲིག',
-'retrievedfrom' => '"$1"ལསà¼\8bརà¾\99ེà½\91à¼\8bà½\94།',
+'retrievedfrom' => '"$1"ལསà¼\8bསླརà¼\8bརà¾\99ེà½\91à¼\8bསོà½\84།',
 'youhavenewmessages' => 'ཁྱེད་ལ་འཕྲིན་གསར་$1($2)ཡོད།',
+'youhavenewmessagesmanyusers' => 'ཁྱེད་ལ་ $1 སྤྱོད་མི་མང་པོ་ཞིག་ནས་ ($2)འདུག།',
+'newmessageslinkplural' => '{{PLURAL:$1|འཕྲིན་ཐུང་གསར་པ་ཞིག་|999= འཕྲིན་ཐུང་གསར་པ།}}',
+'newmessagesdifflinkplural' => 'མཐའ་མའི་ {{PLURAL:$1|འགྱུར་བཅོས།|999=འགྱུར་བཅོས།}}',
 'youhavenewmessagesmulti' => 'ཁྱེད་ལ་ $1 སྟེང་དུ་འཕྲིན་ཡིག་འདུག',
-'editsection' => 'རྩོམ་སྒྲིག',
+'editsection' => 'རྩོམ་སྒྲིག',
 'editold' => 'རྩོམ་སྒྲིག',
 'viewsourceold' => 'ཁོངས་ལ་ལྟ་བ།',
 'editlink' => 'བཟོ་བཅོས།',
 'viewsourcelink' => 'ཁོངས་ལ་ལྟ་བ།',
-'editsectionhint' => 'རྩོམ་སྒྲིག་སྡེ་ཚན།$1',
-'toc' => 'à½\9fུརà¼\8bà½\98à½\86ན།',
+'editsectionhint' => 'རྩོམ་སྒྲིག་སྡེ་ཚན།$1',
+'toc' => 'à½\93à½\84à¼\8bà½\91ོན།',
 'showtoc' => 'སྟོན།',
 'hidetoc' => 'སྦས།',
 'collapsible-collapse' => 'རྡིབ་སྐྱོན།',
-'viewdeleted' => ' $1 ལ་ལྟའམ།',
+'collapsible-expand' => 'རྒྱ་སྐྱེད།',
+'thisisdeleted' => '$1 ལ་ལྟ་བའམ་རང་ལོགས་བྱེད་རོགས།',
+'viewdeleted' => ' $1 ལ་ལྟ་དགོས་སམ།',
+'restorelink' => '{{PLURAL:$1|བསུབས་པའི་རྩོམ་སྒྲིག|$1 བསུབས་པའི་རྩོམ་སྒྲིག}}',
+'feedlinks' => 'འདྲན་ཆས། :',
+'feed-invalid' => 'རྒྱུན་མངགས་ཡ་ལན་ཕན་མེད་རེད་འདུག།',
 'site-rss-feed' => '$1 ཡི་RSS འབྱུང་ཁུངས།',
-'site-atom-feed' => '$1 ཡི་Atom འབྱུང་ཁུངས།',
+'site-atom-feed' => '$1 ཡི་ཆ་ཤས་ཡ་ལན།',
 'page-rss-feed' => '$1 ཡི་RSS འབྱུང་ཁུངས།',
 'page-atom-feed' => '$1 ཡི་Atom འབྱུང་ཁུངས།',
-'red-link-title' => '$1 ( ཤོག་ངོས་མེད་པ།)',
+'red-link-title' => '$1 (ཤོག་ངོས་མེད་པ།)',
+'sort-descending' => 'མར་རིམ་སྒྲིགས་',
+'sort-ascending' => 'ཡར་རིམ་སྒྲིགས།',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'རྩོà½\98à¼\8bཡིà½\82',
+'nstab-main' => 'ཤོà½\82à¼\8bà½\84ོསà¼\8d',
 'nstab-user' => 'སྤྱོད་མིའི་ཤོག་ངོས།',
-'nstab-special' => 'དམིཊ་གསལ་ཤོག་ངོས།',
+'nstab-media' => 'འཕྲིན་ལམ་ཤོག་ངོས།',
+'nstab-special' => 'ཆེད་ལས་ཤོག་ངོས།',
 'nstab-project' => 'ལས་འཆར་ཤོག་ངོས།',
 'nstab-image' => 'ཡིག་ཆ།',
 'nstab-mediawiki' => 'སྐད་ཆ།',
@@ -274,16 +334,45 @@ $messages = array(
 
 # Main script and global functions
 'nosuchaction' => 'བྱ་འགུལ་འདི་འདྲ་མེད།',
+'nosuchactiontext' => 'དྲ་ཚིགས་གཞིར་གཟུངས་ཀྱི་བྱ་བ་ཕན་མེད་རེད་འདུག།
+ཁྱེད་ཀྱི་དྲ་ཚིགས་ཁ་བྱང་འབྲི་སྟངས་ནོར་བ་ཡིན་སྲིད། ཡང་ན་དྲ་ཚིགས་ཁ་བྱང་ནོར་བ་ཞིག་ལ་སྦྲེལ་མཐུད་བྱེད་འདུག།
+{{SITENAME}} འདིར་གཉེན་ཆས་ཀྱི་ལས་རྩོལ་ཡིན་སྲིད།',
 'nosuchspecialpage' => 'དམིགས་བསལ་ཤོག་ངོས་འདི་འདྲ་ཞིག་མི་འདུག',
+'nospecialpagetext' => '<strong>ཁྱེད་ཀྱི་ལུགས་མཐུན་མིན་པའི་དམིགས་བསལ་ཤོག་ངོས་ཞིག་ལ་རེ་ཞུ་བྱས་འདུག།</strong>
+ལུགས་མཐུན་གྱི་དམིགས་བསལ་ཤོག་ངོས་རྣམས་འདིར་གཟིགས་རོགས།
+[[Special:SpecialPages|{{int:specialpages}}]]',
 
 # General errors
 'error' => 'ནོར་འཁྲུལ།',
+'databaseerror' => 'རྨང་གཞིའི་གྲངས་མཛོད་ལ་ནོར་འཁྲུལ་འདུག།',
+'databaseerror-text' => 'རྨང་གཞིའི་གྲངས་མཛོད་ལ་ནོར་འཁྲུལ་འདོན་སོང།
+འདི་ཕལ་ཆེར་གཉེན་ཆས་ཀྱི་ལས་རྩོལ་ཡིན་སྲིད།',
+'databaseerror-textcl' => 'རྨང་གཞིའི་གྲངས་མཛོད་ལ་ནོར་འཁྲུལ་འདོན་སོང།',
+'databaseerror-query' => 'འཚོལ་འདྲི། $1',
+'databaseerror-function' => 'རྩོལ་ནུས། $1',
+'databaseerror-error' => 'ནོར་སྐྱོན། $1',
+'laggedslavemode' => '<strong>ཉེན་བརྡ།</strong> ཤོག་ངོས་འདི་ཐོག་ཉེ་ཆར་གྱི་དུས་བསྟུན་ཁ་གསབ་བྱས་མེད།',
 'readonly' => 'གཞི་གྲངས་མཛོད་ཟྭ་བརྒྱབ་པ།',
+'enterlockreason' => 'བཀག་སྡོམ་བྱས་དགོས་རྐྱེན་བཀོད་རོགས དེ་མིན་བཀག་སྡོམ་འདི་དུས་ཚོད་ནམ་ཞིག་ལ་བཀྲོལ་རྒྱུ་ཡིན་མིན་སོགས་བཀོད་རོགས།',
+'readonlytext' => 'རྨང་གཞི་གྲངས་མཛོད་འདི་གནས་སྐབས་བཀག་སྡོམ་བྱས་འདུག། ཕལ་ཆེར་རྨང་གཞི་གྲངས་མཛོད་འདི་ཉར་འཚག་བྱད་བཞིན་འདུག། 
+$1 རྒྱུ་རྐྱེན་འདི་འོག་དོ་དམ་པས་བཀག་སྡོམ་བྱས་འདུག།',
+'missing-article' => 'གཞི་གྲངས་མཛོད་ནང་ཤོག་ངོས་ཀྱི་ཡི་གེ་བཙལ་ཐུབ་ཀྱི་མི་འདུག་པས། "$1" $2 
+ཕལ་ཆེར་འདི་གཤམ་ཀྱི་འགོག་རྐྱེན་ལོ་རྒྱུས་སུབ་པ་འམ་དུས་ཡོལ་ཀྱི་ཁྱད་པར་སོགས་ཀྱི་རྒྱུ་རྐྱེན་ཡིན།
+གལ་སྲིད་དེ་ལྟར་མིན་ཚེ། ཕལ་ཆེར་ཁྱེད་ཀྱི་ནོར་སྐྱོན་འཙལ་རྙེད་བྱང་བས།  [[Special:ListUsers/sysop|administrator]], དྲ་རྒྱའི་ས་ཚིགས་འདི་ཐོག་ཞུ་ཡིག་འབུལ་གནང་ཡོང་བ་མཁྱེན།',
 'internalerror' => 'ནང་ལོག་ནོར་སྐྱོན།',
 'internalerror_info' => 'ནང་ལོགས་ནོར་སྐྱོན། $1',
 'filecopyerror' => '"$1" "$2"ལ་འདྲ་བཤུ་བྱེད་མ་ཐུབ།',
+'filerenameerror' => '"$1" ནས་ "$2" བར་མིང་བརྗེ་སྒྱུར་ཐུབ་མ་སོང།',
 'filedeleteerror' => '"$1"ཟེར་བ་སུབ་མ་ཐུབ།',
-'filenotfound' => '"$1"ཟེར་བའི་ཡིག་ཆ་མ་རྙེད་པ།',
+'directorycreateerror' => 'དཀར་ཆག་ "$1" འདི་བཟོ་ཐུབ་མ་སོང།',
+'filenotfound' => '"$1" ཟེར་བའི་ཡིག་ཆ་རྙེད་ཀྱི་མིན་འདུག།',
+'fileexistserror' => 'ཡིག་ཆ་ "$1" འདི་འབྲི་ཐུབ་ཀྱིན་མི་འདུག། ཡིག་ཆ་འདི་བཞིན་འདི་སྔ་ནས་འདུག།',
+'unexpected' => 'ཡོང་མི་སྲིད་པའི་ཁྱད་ཆོས། : "$1"="$2"',
+'formerror' => 'ནོར་འཁྲུལ།:འགེངས་ཤོག་འབུལ་ཐུབ་མ་སོང།',
+'badarticleerror' => 'ཤོག་ངོས་འདི་ཐོག་ལག་བསྟར་བྱེད་ཐུབ་ཀྱི་མ་རེད།',
+'cannotdelete' => 'ཤོག་ངོས་འམ་ཡིག་ཆ་ "$1" འདི་སུབས་ཐུབ་མ་ཀྱི་མིན་འདུག། ཕལ་ཆེར་གཞན་ཞིག་གི་སུབས་ཚར་འདུག།',
+'cannotdelete-title' => 'ཤོག་ངོས་ "$1" འདི་སུབས་ཐུབ་མ་སོང།',
+'delete-hook-aborted' => 'འབྲི་སུབས་འདི་བཀག་འགོག་བྱས་སོང། རྒྱུ་རྐྱེན་བྲིས་མིན་འདུག།',
 'badtitle' => 'ཁ་བྱང་སྐྱོན་ཅན།',
 'viewsource' => 'ཁོངས་ལ་ལྟ་བ།',
 'actionthrottled' => 'བྱ་འགུལ་ཁེགས་སོང་།',
@@ -296,7 +385,7 @@ $messages = array(
 # Login and logout pages
 'yourname' => 'སྤྱོད་མིང་།',
 'yourpassword' => 'ལམ་ཡིག',
-'yourpasswordagain' => 'ལà½\98à¼\8bཡིà½\82à¼\8bསà¾\90ྱརà¼\8bà½\82à½\8fà½\82སà¼\8bà½\96ྱོས།',
+'yourpasswordagain' => 'à½\82སà½\84à¼\8bà½\96འིà¼\8bཨà½\84à¼\8bà½\84ོསà¼\8bའà½\9bིà½\93à¼\8bà½\82à½\93à½\84à¼\8bརོà½\82ས།',
 'remembermypassword' => 'ངའི་ལམ་ཡིག་འདིར་(མང་མཐའ་ཉིན $1 {{PLURAL:$1}}) དྲན་པར་བྱས།',
 'login' => 'ནང་འཛུལ།',
 'nav-login-createaccount' => 'ནང་འཛུལ། / ཐོ་འགོད།',
@@ -307,11 +396,13 @@ $messages = array(
 'notloggedin' => 'ནང་འཛུལ་བྱས་མེད།',
 'nologinlink' => 'ཐོ་ཞིག་འགོད་པ།',
 'createaccount' => 'ཐོ་འགོད།',
+'gotaccount' => '$1 སྔོན་ཚུད་ནས་རྩིས་ཁྲ་ཡོད་དམ།',
 'gotaccountlink' => 'ནང་འཛུལ།',
-'createaccountmail' => 'གློག་འཕྲིན་སྤྱད་དེ།',
+'userlogin-resetlink' => 'ཁྱེད་ཀྱི་ནང་འཛུལ་ཀྱི་ཞིབ་ཕྲའི་གནད་དོན་བརྗེད་འདུག་གམ།',
+'createaccountmail' => 'སྐབས་འཕྲལ་རང་མོས་གྱི་གསང་བའི་ཨང་གྲངས་བེད་སྤྱད་པ་དང། ལྷན་དུ་གློག་འཕྲིན་ཁ་བྱང་ངེས་གཏན་ཞིག་ལ་བསྐུར་རོགས།',
 'createaccountreason' => 'རྒྱུ་མཚན།',
 'badretype' => 'ལམ་ཡིག་གང་བཅུག་པ་ཐོ་ཐུག་མ་བྱུང་།',
-'userexists' => 'à½\98ིà½\84à¼\8bའà½\91ིà¼\8bà½\96ེà½\91à¼\8bསྤྱོà½\91à¼\8bà½\96ྱསà¼\8bà½\9fིà½\93à¼\8bà½\94སà¼\8bà½\98ིà½\84à¼\8bà½\82à½\9eà½\93à¼\8bà½\9eིà½\82à¼\8bà½\82à½\91à½\98་རོགས།',
+'userexists' => 'སྤྱོà½\91à¼\8bà½\98ིà½\84à¼\8bའà½\91ིà¼\8bསà¾\94ོà½\93à¼\8bà½\9aུà½\91à¼\8bà½\93སà¼\8bà½\96ེà½\91à¼\8bསྤྱོà½\91à¼\8bà½\96ྱསà¼\8bà½\9fིà½\93à¼\8bའà½\91ུà½\82à¼\8bà½\94སà¼\8d à½\98ིà½\84à¼\8bà½\82à½\9eà½\93à¼\8bà½\9eིà½\82à¼\8bà½\82à½\91à½\98à¼\8bà½\82à½\93à½\84་རོགས།',
 'loginerror' => 'ནང་འཛུལ་ནོར་སྐྱོན།',
 'loginsuccesstitle' => 'ནང་འཛུལ་བདེ་བར་གྲུབ།',
 'nosuchusershort' => 'སྤྱོད་མི་"$1"ཟེར་བ་མི་འདུག དག་ཆར་བསྐྱར་ཞིབ་བྱོས།',
@@ -319,17 +410,18 @@ $messages = array(
 'login-userblocked' => 'སྤྱོད་མི་འདི་བཀག་འགོག་བྱས་པས་ནང་འཛུལ་གྱི་ཆོག་མཆན་མེད།',
 'wrongpassword' => 'ལམ་ཡིག་ནོར་འདུག བསྐྱར་དུ་ཚོད་ལྟ་བྱོས།',
 'wrongpasswordempty' => 'ལམ་ཡིག་སྟོང་པ་རེད། བསྐྱར་དུ་ཚོད་ལྟ་བྱོས།',
-'mailmypassword' => 'à½\82ློà½\82à¼\8bའà½\95ྲིà½\93à¼\8bལà½\98à¼\8bཡིà½\82à¼\8bà½\82སརà¼\8bà½\96།',
+'mailmypassword' => 'à½\82སà½\84à¼\8bà½\96འིà¼\8bཨà½\84à¼\8bà½\82ྲà½\84སà¼\8bà½\96སà¾\90ྱརà¼\8bà½\96à½\9fོà¼\8bà½\82à½\93à½\84à¼\8bརོà½\82ས།',
 'loginlanguagelabel' => 'སྐད་རིགས། $1',
+'pt-login-button' => 'ནང་འཛུལ།',
 
 # Change password dialog
 'changepassword' => 'ལམ་ཡིག་བརྗེ་བ།',
-'resetpass_announce' => 'à½\81ྱེà½\91à¼\8bà½\80ྱིསà¼\8bà½\84à¼\8bà½\9aོསà¼\8bà½\96à½\8fà½\84à¼\8bà½\96འིà¼\8bà½\82à½\93སà¼\8bསà¾\90à½\96སà¼\8bལà½\98à¼\8bཡིà½\82à¼\8bལà¼\8bà½\96རà¾\9fེà½\93à¼\8bà½\93སà¼\8bà½\93à½\84à¼\8bའà½\9bུལà¼\8bà½\96ྱསà¼\8bའà½\91ུà½\82 à½\93à½\84à¼\8bའà½\9bུལà¼\8bà½\86à¼\8bà½\9aà½\84à¼\8bà½\96à¼\8bà½\96ྱེà½\91à¼\8bà½\94རà¼\8bའà½\91ིརà¼\8bà½\84ེསà¼\8bà½\94རà¼\8bà½\91ུà¼\8bལà½\98à¼\8bཡིà½\82à¼\8bà½\82སརà¼\8bà½\96à¼\8bའà½\87ུà½\82à¼\8bà½\91à½\82ོས།',
+'resetpass_announce' => 'à½\93à½\84à¼\8bའà½\9bུལà¼\8bà½\96ྱེà½\91à¼\8bà½\94རà¼\8d à½\81ྱེà½\91à¼\8bà½\80ྱིསà¼\8bà½\82སà½\84à¼\8bà½\96འིà¼\8bཨà½\84à¼\8bà½\82སརà¼\8bà½\94à¼\8bà½\9eིà½\82à¼\8bའà½\87ུà½\82à¼\8bརོà½\82ས།',
 'oldpassword' => 'ལམ་ཡིག་རྙིང་བ།',
 'newpassword' => 'ལམ་ཡིག་གསར་བ།',
 'retypenew' => 'ལམ་ཡིག་གསར་བ་བསྐྱར་འཇུག་བྱོས།',
 'resetpass_submit' => 'ལམ་ཡིག་བསྒྲིགས་ནས་ནང་འཛུལ་བྱེད་པ།',
-'changepassword-success' => 'ལà½\98à¼\8bཡིà½\82à¼\8bà½\96à½\91ེà¼\8bལེà½\82སà¼\8bà½\84à½\84à¼\8bà½\96རà¾\97ེསà¼\8bà½\9fིà½\93à¼\8d à½\91à¼\8bà½\93ིà¼\8bà½\93à½\84à¼\8bའà½\9bུལà¼\8bà½\96ྱེà½\91à¼\8bà½\96à½\9eིà½\93à¼\8bà½\94à¼\8bà¼\8bà¼\8b',
+'changepassword-success' => 'à½\81ྱེà½\91à¼\8bà½\80ྱིà¼\8bà½\82སà½\84à¼\8bà½\96འིà¼\8bཨà½\84à¼\8bà½\96རà¾\97ེà¼\8bའà½\82ྱུརà¼\8bལེà½\82སà¼\8bà½\82ྲུà½\96à¼\8bà½\96ྱུà½\84à¼\8bསོà½\84à¼\8d',
 'resetpass_forbidden' => 'ལམ་ཡིག་བརྗེ་མི་ཐུབ།',
 'resetpass-submit-loggedin' => 'ལམ་ཡིག་བརྗེ་བ།',
 'resetpass-submit-cancel' => 'རྩིས་མེད་ཐོངས།',
@@ -360,6 +452,7 @@ $messages = array(
 'headline_tip' => 'རིམ་པ། ༢ འགོ་ཕྲེང་།',
 'nowiki_sample' => 'རྣམ་བཞག་མེད་པའི་ཡི་གེ་འདྲེན་པ།',
 'nowiki_tip' => 'ཝེ་ཁེའི་རྣམ་གཞག་དོར་བ།',
+'image_tip' => 'བཙུད་འཇུག་ཡིག་ཆ།',
 'media_tip' => 'ཡིག་ཆ་སྦྲེལ་མཐུད།',
 'sig_tip' => 'མིང་རྟགས་མཉམ་དུ་ཟླ་ཚེས་ཐེལ་ཙེ།',
 'hr_tip' => 'ཐད་ཐིག ༼ཆུད་ཟོས་མེད་པར།༽',
@@ -386,6 +479,10 @@ $messages = array(
 'loginreqpagetext' => 'ཤོག་ངོས་གཞན་རྣམས་ལྟ་བར་ངེས་པར་དུ་$1བྱ་དགོས།',
 'accmailtitle' => 'ལམ་ཡིག་བཏང་ཟིན།',
 'newarticle' => '(གསར་བ)',
+'noarticletext' => 'ཤོག་ངོས་འདི་ནང་ད་གནས་ཡིག་གེ་མིན་འདུག།
+ཁྱེད་ཀྱིས་ཤོགངོས་གཞན་ཁག་ནང་ [[Special:Search/{{PAGENAME}}|ཤོག་ངོས་འདིའི་འགོ་བརྗོད་འཚོལ་རོགས།]] <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} དེ་དང་འབྲེལ་བའི་དོ་ཟླའི་ཐོར་འཚོལ་རོགས།],',
+'noarticletext-nopermission' => 'ཤོག་ངོས་འདི་ནང་ད་གནས་ཡི་གེ་མིན་འདུག།
+ཁྱེད་ཀྱིས་ཤོགངོས་གཞན་ཁག་ནང་ [[Special:Search/{{PAGENAME}}|ཤོག་ངོས་འདིའི་འགོ་བརྗོད་འཚོལ་རོགས།]] དེ་མིན་ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} དེ་དང་འབྲེལ་བའི་དོ་ཟླའི་ཐོར་འཚོལ་རོགས།]</span> ཡིན་ནའང་ཁྱེད་ལ་ཤོག་ངོས་འདི་གསར་སྐྲུན་བྱེད་པའི་ཆོག་མཆན་མིན་འདུག།',
 'previewnote' => '"འདི་ནི་སྔོན་ལྟ་ཙམ་ཡིན་པ་ཡིད་ལ་འཇགས་རོགས། "ཁྱེད་ཀྱི་བཟོ་བཅོས་ད་དུང་ཉར་ཚགས་བྱས་མི་འདུག',
 'editing' => '$1རྩོམ་སྒྲིག་བྱེད་བཞིན་པ།',
 'editingsection' => ' $1 (སྡེ་ཚན) ལ་རྩོམ་སྒྲིག་བྱེད་བཞིན་པ།',
@@ -394,13 +491,21 @@ $messages = array(
 'templatesused' => 'ཤོག་ངོས་འདིར་སྤྱད་པའི་ {{PLURAL:$1|དཔེ་པང་།}}',
 'template-protected' => 'སྲུང་སྐྱོབ་འོག་ཡོད་པ།',
 'nocreate-loggedin' => 'ཤོག་ངོས་གསར་བཟོའི་ཆོག་མཆན་མི་འདུག',
+'permissionserrorstext-withaction' => 'གཤམ་ཀྱི་ {{PLURAL:$1|རྒྱུ་རྐྱེན་}}འོག་ཁྱེད་ལ་ $2 ཆོག་མཆན་མིན་འདུག་པས།',
 'recreate-moveddeleted-warn' => "'''ཉེན་བརྡ་:རང་གིས་སུབ་ཚར་བའི་ཤོག་ལེ་ཞིག་བསྐྱར་བཟོ་བྱེད་ཀྱི་འདུག་ '''
 ཁྱེད་རང་གལ་སྲིད་མུ་མཐུད་ཤོག་ལེ་འདི་བཟོ་ཅོས་བྱེད་འདོད་ན་སྟབས་བདེ་ཞིག་ལ་ང་ཚོས་སུབ་བཟིན་པའི་ཤོག་ལེ་འདིར་ཉར་ཡོད།",
 
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => '<strong> ཉེན་བརྡ།</strong> དཔེ་དཔང་གི་ཚད་གཞི་ཧ་ཅང་ཆེན་པོ་འདུག། དཔེ་དཔང་ཁ་ཅིག་ཚུད་ཐུབ་ཀྱི་མ་རེད།',
+'post-expand-template-inclusion-category' => 'དཔེ་དཔང་གི་ཚད་གཞི་བརྒལ་བའི་ཤོག་ངོས།',
+
 # History pages
 'viewpagelogs' => 'ཤོག་ངོས་འདིའི་ཉིན་ཐོ་ལ་ལྟ་བ།',
+'currentrev-asof' => 'མཐའ་འཇུག་ཀྱི་ཞིབ་བཤེར། $1',
 'revisionasof' => '$1 ལ་བཅོས་པ།',
 'previousrevision' => ' ← བཟོ་བཅོས་སྔ་མ།',
+'nextrevision' => 'ཞིབ་བཤེར་གསར་བ་ཁག།',
+'currentrevisionlink' => 'ཉེ་བའི་ཆར་གྱི་ཞིབ་བཤེར།',
 'cur' => 'ད་ལྟ།',
 'next' => 'རྗེས་མ།',
 'last' => 'མཐའ་མ།',
@@ -417,8 +522,12 @@ $messages = array(
 'rev-delundel' => 'སྟོན། / སྦས།',
 'rev-showdeleted' => 'སྟོན།',
 'revdelete-show-file-submit' => 'ཡིན།',
+'revdelete-text-text' => 'སུབས་ཚར་པའི་ལེགས་བཅོས་རྣམས་ད་དུང་ཡང་ཤོག་ངོས་གི་ལོ་རྒྱུས་ནང་འཆར་འདུག། ཡིན་ན་འང་ནང་དོན་ཆ་ཤས་རྣམས་ལ་ཚོགས་མི་གཞན་གྱི་མཐོང་མི་ཐུབ།',
+'revdelete-text-file' => 'སུབས་ཚར་པའི་ཡིག་ཆའི་འགྱུར་འདི་ད་དུང་ཡང་ཡིག་ཆའི་ལོ་རྒྱུས་ཐོག་གསལ་བཞིན་འདུག། ཡིན་ན་འང་འདི་ནང་དོན་རྣམས་སྤྱོད་མི་གཞན་རྣམས་ཀྱི་མཐོང་མི་ཐུབ།',
+'logdelete-text' => 'སུབས་ཚར་པའི་ཐོ་འགོད་རྣམས་ད་དུང་ཡང་ཐོ་འགོད་རེའུ་མིག་ནང་འཆར་འདུག། ཡིན་ན་འང་ནང་དོན་ཆ་ཤས་རྣམས་ལ་ཚོགས་མི་གཞན་གྱི་འཛུལ་ཞུགས་བྱེད་མི་ཐུབ།',
+'revdelete-text-others' => 'ནང་དོན་ལ་ཁ་སྣོན་གྱི་བཀག་སྡོམས་བྱས་ན་མ་གཏོགས།{{SITENAME}}ནང་ཡོད་པའི་དོ་དམ་པ་གཞན་རྣམས་ནས་སྦས་སྐུང་བྱས་པའི་ནང་དོན་ལ་ད་དུང་ཡང་འཛུལ་ཞུགས་བྱེད་ལ། མ་ཟད་བསྐྱར་དུ་མི་བསུབས་པ་འཟོ་ཐུབ།',
 'revdelete-radio-same' => 'བཟོ་བཅོས་མ་བྱེད།',
-'revdelete-radio-set' => 'ཡིà½\93།',
+'revdelete-radio-set' => 'à½\98à½\84ོà½\93à¼\8bà½\98ེà½\91à¼\8bà½\80ྱི།',
 'revdel-restore' => 'བཅོས་སུ་རུང་བ།',
 'pagehist' => 'ཤོག་ངོས་ལོ་རྒྱུས།',
 'revdelete-reasonotherlist' => 'རྒྱུ་མཚན་གཞན་པ།',
@@ -432,6 +541,7 @@ $messages = array(
 
 # Diffs
 'lineno' => 'ཐིག་ཕྲེང་$1:',
+'compareselectedversions' => 'འདེམས་བཞིན་པའི་བཟོ་འཅོས་དཔར་གཞིའི་ཁྱད་པར་སྟོན།',
 'editundo' => 'ཕྱིར་འཐེན།',
 
 # Search results
@@ -440,25 +550,32 @@ $messages = array(
 'notextmatches' => 'ཤོག་ངོས་ཡིག་འབྲུ་མཚུངས་པ་མི་འདུག',
 'prevn' => 'སྔོན་མ་{{PLURAL:$1|$1}}',
 'nextn' => 'རྗེས་མ་{{PLURAL:$1|$1}}',
+'prevn-title' => 'དེ་སྔོན་ $1{{PLURAL:$1|གྲུབ་འབྲས།}}',
+'nextn-title' => 'དེ་རྗེས་ཀྱི་ $1{{PLURAL:$1|གྲུབ་འབྲས།}}',
 'shown-title' => 'མིག་སྔར་སྟོན་པ། $1{{PLURAL:$1|གྲུབ་འབྲས།}}ཤོག་ངོས་ལྟར།',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3)ལ་ལྟ་བ།',
-'searchmenu-new' => 'ལྦེ་ཁེ་སྟེང་ལ་ཤོག་ལེ་ [[:$1]]བཟོས།',
+'searchmenu-new' => 'ཝེ་ཁི་སྟེང་ལ་ <strong>ཤོག་ངོས་གསར་པ་</strong> "[[:$1]]" བཟོས། {{PLURAL:$2|0=|ཁྱེད་ཀྱི་འཚོལ་ཞིབ་བྱས་པའི་ཤོག་ངོས་རྣམས་ལ་ཡང་གཟིགས་རོགས།.|མ་ཟད་འཚོལ་ཞིབ་བྱས་པའི་གྲུབ་འབྲས་གཞན་རྣམས་ལ་ཡང་གཟིགས་རོགས།}}',
+'searchprofile-articles' => 'ནང་དོན་ཤོག་ངོས།',
 'searchprofile-project' => 'རོགས་རམ་དང་འཆར་གཞིའི་ཤོག་ངོས་',
+'searchprofile-images' => 'སྨྱན་མང་བརྒྱུད་ལམ།',
 'searchprofile-everything' => 'ཚང་མ་',
 'searchprofile-advanced' => 'མཐོ་རིམ་',
 'searchprofile-articles-tooltip' => '$1ནང་དུ་འཚོལ་བ།',
 'searchprofile-project-tooltip' => '$1ནང་དུ་འཚོལ་བ།',
 'searchprofile-images-tooltip' => 'ཡིག་ཆ་འཚོལ་བ།',
 'searchprofile-everything-tooltip' => 'བརྗོད་དོན་ཚང་མ་འཚོལ་གཞིབ་བྱེད་(གྲོས་མེས་ཤོག་ངོས་ཡང་འཚུད་པ་)',
-'search-result-size' => '$1({{PLURAL:$2|1 word|$2 words}})',
+'searchprofile-advanced-tooltip' => 'རང་སྒྲུབ་མིང་བར་ནང་འཚོལ་རོགས།',
+'search-result-size' => '$1({{PLURAL:$2|1 ཚིག། |$2 ཚིག།}})',
 'search-redirect' => '($1རིམ་འགྲེམ།)',
 'search-section' => '(ཚན་པ $1)',
 'search-suggest' => '$1 ལ་ཟེར་བ་ཡིན་ནམ།',
 'search-interwiki-caption' => 'སྲིང་མོའི་ལས་འཆར།',
-'search-interwiki-default' => '$1ལས་རྙེད་པ།',
+'search-interwiki-default' => '$1 ནས་འབྱུང་བའི་གྲུབ་འབྲས།',
 'search-interwiki-more' => '(དེ་ལས་མང་བ།)',
 'search-relatedarticle' => 'འབྲེལ་ཡོད།',
+'searchrelated' => 'འབྲེལ་ཡོད།',
 'searchall' => 'ཚང་མ།',
+'showingresultsheader' => '{{PLURAL:$5|གྲུབ་འབྲས་ <strong>$1</strong> ཡི་<strong>$3</strong>གྲབ་འབྲས། <strong>$1 - $2</strong> ཡི་ <strong>$3</strong>}} ཆེད་དུ་ <strong>$4</strong>',
 'search-nonefound' => 'ཁྱེད་ཀྱི་འདྲི་ཞིབ་དང་མཐུན་པའི་ལན་མི་འདུག་',
 'powersearch-legend' => 'ཞིབ་ཏུ་འཚོལ་བ།',
 'powersearch-ns' => 'མིང་གནས་ནང་འཚོལ་བ།',
@@ -473,7 +590,7 @@ $messages = array(
 'prefs-personal' => 'སྤྱོད་མིའི་སྤྱི་ཁོག',
 'prefs-rc' => 'ཉེ་བའི་བཟོ་བཅོས།',
 'prefs-watchlist' => 'མཉམ་འཇོག་ཐོ།',
-'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max' => 'མང་མཐར་ཡང་ $1 {{PLURAL:$1|ཉིན།|ཉིན།}}',
 'prefs-watchlist-edits-max' => 'མང་ཚད་ཨང་གྲངས། ༡༠༠༠',
 'prefs-resetpass' => 'ལམ་ཡིག་བརྗེ་བ།',
 'prefs-changeemail' => 'དྲ་འཕྲིན་བརྗེ་བ།',
@@ -483,16 +600,18 @@ $messages = array(
 'searchresultshead' => 'འཚོལ།',
 'stub-threshold-disabled' => 'ནུས་མེད་དུ་བཟོས་ཟིན།',
 'timezoneregion-africa' => 'ཨ་ཧྥི་རི་ཀ',
-'youremail' => 'à½\91ྲà¼\8bའà½\95ྲིà½\93à¼\8d *:',
-'username' => 'དྲ་མིང་།:',
-'uid' => 'ནང་འཛུལ་ཐོ་མིང་།',
+'youremail' => 'à½\82ློà½\82à¼\8bའà½\95ྲིà½\93à¼\8d:',
+'username' => '{{GENDER:$1|དྲ་མིང་།}}:',
+'uid' => '{{GENDER:$1|སྤྱོད་མིའི་}}ནང་འཛུལ་ཐོ་མིང་།:',
 'yourrealname' => 'དངོས་མིང་།',
 'yourlanguage' => 'སྐད་རིགས།',
 'yournick' => 'མིང་རྟགས་སོ་མ།',
-'yourgender' => 'à½\95ོà¼\8bà½\98ོ།',
-'gender-male' => 'à½\95ོ།',
-'gender-female' => 'མོ།',
+'yourgender' => 'à½\81ྱེà½\91à¼\8bལà¼\8bà½\82à½\84à¼\8bའà½\91ྲà¼\8bà½\96ྱསà¼\8bà½\93སà¼\8bའà½\96ོà½\91à¼\8bà½\91à½\82ོསà¼\8bསà½\98།',
+'gender-male' => 'à½\81ོà¼\8bརà½\84à¼\8bà½\82ིསà¼\8bà½\9dེà¼\8bà½\81ེà¼\8bརྩོà½\98à¼\8bསà¾\92ྲིà½\82à¼\8bà½\96ྱསà¼\8bསོà½\84།',
+'gender-female' => 'à½\98ོà¼\8bརà½\84à¼\8bà½\82ིསà¼\8bà½\9dེà¼\8bà½\81ེà¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bà½\90ོà½\82à¼\8bརྩོà½\98à¼\8bསà¾\92ྲིà½\82à¼\8bà½\96ྱསà¼\8bསོà½\84à¼\8d',
 'email' => 'དྲ་འཕྲིན།',
+'prefs-help-email' => 'གློག་འཕྲིན་ཁ་བྱང་ནི་རང་མོས་ཡིན། ཡིན་ན་འང་གལ་སྲིད་ཁྱེད་ཀྱི་གསང་བའི་ཨང་གྲངས་འརྗེད་པ་སོགས་བྱུང་ཚེ། གསང་བའི་ཨང་བསྐྱར་སྒྲིག་སྐབས་ངེས་པར་དུ་དགོས།',
+'prefs-help-email-others' => 'ཁྱེད་ཀྱི་ཐད་ཀར་གློག་འཕྲིན་འམ་ཡང་ན་འགྲོ་གླེང་ཤོག་ངོས་བརྒྱུད་སྤྱོད་མི་གཞན་རྣམས་ཀྱི་ཁྱེད་ལ་འབྲེལ་བ་བྱེད་ཐུབ། ཁྱེད་རང་གི་གློག་འཕྲིན་ཁ་བྱང་སྤྱོད་མི་གཞན་གྱི་འབྲེལ་བ་བྱེད་སྐབས་གསང་གཏོལ་བྱེད་མི་སྲིད།',
 'prefs-info' => 'རྨང་གཞིའི་གནས་ཚུལ།',
 'prefs-signature' => 'མིང་རྟགས།',
 
@@ -523,7 +642,7 @@ $messages = array(
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ཤོག་ངོས་འདི་ཀློག་པ།',
-'action-edit' => 'ཤོà½\82à¼\8bà½\84ོསà¼\8bའà½\91ིà¼\8bརྩོà½\98à¼\8bསà¾\92ྲིà½\82à¼\8bà½\96ྱེà½\91à¼\8bà½\94།',
+'action-edit' => 'ཤོà½\82à¼\8bà½\84ོསà¼\8bའà½\91ིà¼\8bརྩོà½\98à¼\8bསà¾\92ྲིà½\82à¼\8bà½\96ྱེà½\91à¼\8bà½\91à½\84།',
 'action-createpage' => 'ཤོག་ངོས་གསར་བཟོ།',
 'action-move' => 'ཤོག་ངོས་འདི་སྤོར་ཅིག',
 'action-movefile' => 'ཡིག་ཆ་འདི་སྤོར་ཅིག',
@@ -532,20 +651,24 @@ $messages = array(
 'action-undelete' => 'ཤོག་ངོས་འདི་བསུབས་ཟིན་གསོ་བ།',
 'action-block' => 'སྤྱོད་མི་འདི་རྩོམ་སྒྲིག་ལ་ཁོག་ཅིག',
 'action-protect' => 'ཤོག་ངོས་འདིའི་སྲུང་སྐྱོབ་རིམ་པ་བསྒྱུར་བཅོས་གཏོང་བ།',
-'action-import' => 'ཤོà½\82à¼\8bà½\84ོསà¼\8bའà½\91ིà¼\8bà½\9dེà¼\8bà½\81ེà¼\8bà½\82à½\9eà½\93à¼\8bà½\93སà¼\8bà½\93à½\84à¼\8bའà½\91ྲེà½\93à¼\8bà½\96ྱེà½\91à¼\8bà½\94།',
-'action-importupload' => 'ཤོà½\82à¼\8bà½\84ོསà¼\8bའà½\91ིà¼\8bཡིà½\82à¼\8bà½\86à¼\8bཡརà¼\8bའà½\87ུà½\82à¼\8bལསà¼\8bà½\93à½\84à¼\8bའà½\91ྲེà½\93à¼\8bà½\96ྱེà½\91à¼\8bà½\94།',
+'action-import' => 'à½\9dེà¼\8bà½\81ེà¼\8bà½\82à½\9eà½\93à¼\8bà½\93སà¼\8bà½\93à½\84à¼\8bའà½\91ྲེà½\93à¼\8bà½\96ྱེà½\91à¼\8bà½\94འིà¼\8bཤོà½\82à¼\8bà½\84ོས།',
+'action-importupload' => 'ཡིà½\82à¼\8bà½\86à¼\8bཡརà¼\8bའà½\87ུà½\82à¼\8bལསà¼\8bà½\93à½\84à¼\8bའà½\91ྲེà½\93à¼\8bà½\96ྱེà½\91à¼\8bà½\94འིà¼\8bཤོà½\82à¼\8bà½\84ོས།',
 'action-unwatchedpages' => 'མ་བལྟས་ཤོག་ངོས་ཀྱི་ཐོ་ལ་ལྟ་བ།',
 'action-userrights' => 'སྤྱོད་མིའི་ཐོབ་ཐང་ཡོངས་ལ་རྩོམ་སྒྲིག་བྱེད་པ།',
 'action-userrights-interwiki' => 'ཝེ་ཁེ་གཞན་གྱི་སྤྱོད་མི་ཚོའི་སྤྱོད་མིའི་ཐོབ་ཐང་རྩོམ་སྒྲིག་བྱེད་པ།',
 
 # Recent changes
+'nchanges' => '$1 {{PLURAL:$1|འགྱུར་བཅོས།|འགྱུར་བཅོས།}}',
 'recentchanges' => 'ཉེ་བའི་བཟོ་བཅོས།',
 'recentchanges-legend' => 'ཉེ་བའི་བཟོ་བཅོས་འདེམས་ཚན།',
 'recentchanges-label-newpage' => 'རྩོམ་སྒྲིག་འདིས་ཤོག་ངོས་གསར་བ་ཞིག་བཟོས་འདུག',
 'recentchanges-label-minor' => 'འདི་ནི་རྩོམ་སྒྲིག་ཕལ་བ་ཞིག་ཡིན།',
+'recentchanges-label-bot' => 'བཟོ་འཅོས་འདི་རང་འགུལ་འཕྲུལ་ཆས་ཀྱིས་བྱས་སོང།',
+'recentchanges-label-unpatrolled' => 'རྩོམ་སྒྲིག་འདི་སྐོར་ཞིབ་བྱེད་རྒྱུ་རེད་འདུག།',
 'rclistfrom' => '$1 ལས་འགོ་བཙུགས་ཏེ་འགྱུར་བཅོས་གསར་བ་སྟོན་ཅིག',
 'rcshowhideminor' => '$1 རྩོམ་སྒྲིག་ཕལ་བ།',
-'rcshowhideliu' => 'ཐོ་འཛུལ་བྱས་པའི་སྤྱོད་མི་ $1',
+'rcshowhidebots' => '$1 རང་འགུལ་འཕྲུལ་ཆས།',
+'rcshowhideliu' => '$1 ཐོ་འགོད་སྤྱོད་མི།',
 'rcshowhideanons' => 'མིང་མེད་སྤྱོད་མི $1',
 'rcshowhidemine' => '$1ངའི་རྩོམ་སྒྲིག',
 'rclinks' => 'འདས་བའི་ཉིན་ $2 <br />$3 ནང་ཚུན་གྱི་བཟོ་བཅོས་གཞུག་མ་ $1 སྟོན་ཅིག',
@@ -555,6 +678,7 @@ $messages = array(
 'show' => 'སྟོན།',
 'minoreditletter' => 'སྒྲིག་ཆུང་།',
 'newpageletter' => 'ཤོག་གསར།',
+'boteditletter' => 'རང་འགུལ་འཕྲུལ་ཆས།',
 'rc_categories_any' => 'གང་རུང་།',
 'rc-enhanced-expand' => 'ཞིབ་ཕྲར་སྟོན།',
 'rc-enhanced-hide' => 'ཞིབ་ཕྲ་སྦས་བ།',
@@ -566,13 +690,14 @@ $messages = array(
 'recentchangeslinked-title' => '"$1" དང་འབྲེལ་བའི་འགྱུར་བཅོས།',
 'recentchangeslinked-summary' => "འདི་ནི་དམིགས་གསལ་ཤོག་ངོས་༼ཡང་ན་དམིགས་གསལ་རྣམ་གྲངས་ཀྱི་ཁོངས་མི་༽དང་འབྲེལ་བའི་ཉེ་བའི་བཟོ་བཅོས་རེད།[[Special:Watchlist|yourwatchlist]] ནང་གི་ཤོག་ངོས་རྣམས་'''ཡིག་གཟུགས་སྦོམ་པོ་'''ཡིན།",
 'recentchangeslinked-page' => 'ཤོག་ངོས་མིང་།',
+'recentchangeslinked-to' => 'ཤོག་ངོས་འདི་ཐོག་གི་བཟོ་འཅོས་རྣམས་ཤོག་ངོས་དེ་དང་འབྲེལ་བའི་འགྱུར་བ་སྟོན་རོགས།',
 
 # Upload
 'upload' => 'ཡིག་ཆ་ཡར་འཇུག',
 'uploadbtn' => 'ཡར་འཇོག',
 'reuploaddesc' => 'ཡར་འཇུག་དོར་ནས་ཡར་འཇུག་རེའུ་མིག་ཏུ་ཕྱིར་ལོག་པ།',
 'uploadnologin' => 'ནང་འཛུལ་བྱས་མེད།',
-'uploadlogpage' => 'རྩོà½\98à¼\8bཡིà½\82་ཡར་འཇུག',
+'uploadlogpage' => 'à½\89ིà½\93à¼\8bà½\90ོ་ཡར་འཇུག',
 'filename' => 'ཡིག་ཆའི་མིང་།',
 'filedesc' => 'བསྡུས་དོན།',
 'fileuploadsummary' => 'བསྡུས་དོན།:',
@@ -590,6 +715,9 @@ $messages = array(
 'uploaddisabled' => 'ཡར་འཇུག་ནུས་མེད་བཟོས་འདུག',
 'watchthisupload' => 'ཡིག་ཆ་འདི་ལ་གཟིགས།',
 
+'license' => 'གན་རྒྱ་ནང་ཞུགས་པ།',
+'license-header' => 'གན་རྒྱ་ནང་ཞུགས་པ།',
+
 # Special:ListFiles
 'imgfile' => 'བརྙན་རིས།',
 'listfiles' => 'ཡིག་ཆའི་ཐོ་གཞུང་།',
@@ -605,6 +733,7 @@ $messages = array(
 'filehist-help' => 'ཟླ་ཚེས་/དུས་ཚོད་གནུན་ཏེ་རྩོམ་ཡིག་ལ་ལྟ་བ།',
 'filehist-deleteall' => 'ཚང་མ་སུབས།',
 'filehist-deleteone' => 'གསུབས།',
+'filehist-revert' => 'ཕྱིར་ལྡོག།',
 'filehist-current' => 'ད་ལྟ།',
 'filehist-datetime' => 'ཚེས་གྲངས། / དུས་ཚོད།',
 'filehist-thumb' => 'བསྡུས་དོན།',
@@ -616,6 +745,8 @@ $messages = array(
 'filehist-missing' => 'ཡིག་ཆ་ཆད་པ།',
 'imagelinks' => 'ཡིག་ཆ་བེད་སྤྱོད་ཁུལ།',
 'linkstoimage' => '{{PLURAL:$1|pagelinks|$1pagelink}} འདི་ལ་སྦྲེལ་ཡོད།',
+'sharedupload-desc-here' => 'ཡིག་ཆ་འདི་ནས་$1 རེད་འདུག། ལས་འཆར་གཞན་ཁག་ནང་བེད་སྤྱོད་ཡོད་ངེས།
+[$2 འགྲེལ་བརྗོད་ཤོག་ངོས་]འདིའི་འགྲེལ་བརྗོད་གཤམ་དུ་འཁོད་ཡོད།',
 'shared-repo-from' => '$1 ནས།',
 
 # File deletion
@@ -633,13 +764,18 @@ $messages = array(
 'unusedtemplateswlh' => 'སྦྲེལ་མཐུད་གཞན་དག',
 
 # Random page
-'randompage' => 'རང་མོས་ཤོག་ངོས།',
+'randompage' => 'སྐམས་དོན་ཤོག་ངོས།',
+
+# Statistics
+'statistics' => 'བསྡོམས་རྩིས།',
 
 'brokenredirects-edit' => 'རྩོམ་སྒྲིག',
 'brokenredirects-delete' => 'གསུབ་པ།',
 
 # Miscellaneous special pages
-'nbytes' => '{{PLURAL:$1|ཡིག་ཚགས།}} $1',
+'nbytes' => '{{PLURAL:$1|ཡིག་ཚིགས།}} $1',
+'nmembers' => '$1 {{PLURAL:$1|ཚོགས་མི།|ཚོགས་མི།}}',
+'prefixindex' => 'སྔཽན་སྦྱོར་དང་ལྷན་དུ་ཤོག་ངོས་ཧྲིལ་པོ།',
 'shortpages' => 'ཤོག་ངོས་ཐུང་ངུ་།',
 'newpages' => 'ཤོག་ངོས་གསར་བ།',
 'newpages-username' => 'དྲ་མིང་།:',
@@ -663,15 +799,18 @@ $messages = array(
 'allarticles' => 'ཤོག་ངོས་ཆ་ཚང་།',
 'allpagessubmit' => 'སོང་།',
 
+# Special:Categories
+'categories' => 'སྡེ་ཚན།',
+
 # Special:LinkSearch
-'linksearch' => 'ཕྱི་རོལ་སྦྲེལ་མཐུད།',
+'linksearch' => 'à½\95ྱིà¼\8bརོལà¼\8bསྦྲེལà¼\8bà½\98à½\90ུà½\91à¼\8bའà½\9aོལà¼\8bà½\9eིà½\96à¼\8d',
 
 # Special:ListGroupRights
 'listgrouprights-members' => 'ཁོངས་མིའི་ཐོ་ཡིག',
 
 # Email user
 'emailuser' => 'སྤྱོད་མི་འདིར་གློག་འཕྲིན་སྐུར་བ།',
-'emailmessage' => 'སà¾\90à½\91à¼\8bà½\86།',
+'emailmessage' => 'à½\96རྡà¼\8bའà½\95ྲིà½\93།',
 
 # Watchlist
 'watchlist' => 'ལྟ་ཞིབ་ཐོ།',
@@ -709,15 +848,15 @@ $messages = array(
 'rollbacklink' => 'རྒྱབ་འགྲིལ་གཏོང་བ།',
 
 # Protect
-'protectedarticle' => 'སྲུà½\84à¼\8bསà¾\90ྱོà½\96་བྱས་ཟིན།"[[$1]]"',
+'protectedarticle' => 'འà½\82ོà½\82à¼\8bསྲུà½\84་བྱས་ཟིན།"[[$1]]"',
 'modifiedarticleprotection' => '"[[$1]]" ལ་སྲུང་སྐྱོབ་རིམ་པ་བཟོ་བཅོས་བྱས་བ།',
 'protectcomment' => 'རྒྱུ་མཚན།',
 'protectexpiry' => 'དུས་ཡུན་རྫོགས་ཚད།',
 'protect_expiry_invalid' => 'དུས་ཡུན་རྫོགས་ཚད་ནོར་བ།',
 'protect-default' => 'སྤྱོད་མི་ཡོངས་ལ་ཕྱེ་བ།',
-'protect-fallback' => '"$1" ཆོག་མཆན་དགོས།',
-'protect-level-autoconfirmed' => 'སྤྱོà½\91à¼\8bà½\98ིà¼\8bà½\82སརà¼\8bà½\96à¼\8bà½\91à½\84à¼\8bà½\90ོà¼\8bà½\98ེà½\91à¼\8bརྣà½\98སà¼\8bà½\96à½\80à½\82à¼\8bའà½\82ོà½\82',
-'protect-level-sysop' => 'དོ་དམ་པ་ཁོ་ནར།',
+'protect-fallback' => 'སྤྱོད་མི་ "$1" གྱི་ཆོག་མཆན་ཡོད་པ་ཁོ་ནར་བྱེད་དབང་ཡོད།',
+'protect-level-autoconfirmed' => 'རà½\84à¼\8bའà½\82ུལà¼\8bà½\84ོསà¼\8bའà½\9bིà½\93à¼\8bà½\96ྱསà¼\8bà½\94འིà¼\8bསྤྱོà½\91à¼\8bà½\98ིà¼\8bà½\81ོà¼\8bà½\93རà¼\8bà½\96ྱེà½\91à¼\8bà½\91à½\96à½\84à¼\8bཡོà½\91à¼\8d',
+'protect-level-sysop' => 'à½\91ོà¼\8bà½\91à½\98à¼\8bà½\94à¼\8bà½\81ོà¼\8bà½\93རà¼\8bà½\96ྱེà½\91à¼\8bà½\91à½\96à½\84à¼\8bཡོà½\91à¼\8d',
 'protect-cantedit' => 'ཁྱོད་ལ་ཤོག་ངོས་འདི་རྩོམ་སྒྲིག་གི་ཆོག་མཆན་མེད་པས་ངོས་འདི་ཡི་སྲུང་སྐྱོབ་རིམ་པ་ལ་བཟོ་བཅོས་བྱེད་མི་ཆོག',
 'restriction-type' => 'ཆོག་མཆན།',
 'restriction-level' => 'དམ་བསྒྲགས་ཚད་རིམ།',
@@ -734,10 +873,10 @@ $messages = array(
 # Namespace form on various pages
 'namespace' => 'མིང་གནས།',
 'invert' => 'གདམ་པའི་ལྡོག་ཕྱོགས།',
-'blanknamespace' => '༼གཙོ་ངོས།༽',
+'blanknamespace' => '(གཙོ་གནད།)',
 
 # Contributions
-'contributions' => 'མཐུན་འགྱུར།',
+'contributions' => '{{GENDER:$1|སྤྱོད་མི།}} མཐུན་འགྱུར།',
 'mycontris' => 'མཐུན་འགྱུར།',
 'month' => 'ཟླ་བ་འདི་ནས།',
 'year' => 'ལོ་འདི་ནས།',
@@ -750,20 +889,25 @@ $messages = array(
 'whatlinkshere-title' => '"$1" ལ སྦྲེལ་ཡོད་པའི་ཤོག་ངོས།',
 'whatlinkshere-page' => 'ཤོག་ངོས།',
 'linkshere' => "གཤམ་གྱི་ཤོག་ངོས་རྣམས་ '''[[:$1]]''': ལ་སྦྲེལ་ཡོད།",
+'nolinkshere' => '<strong>[[:$1]]</strong> ཤོག་ངོས་གཅིག་ཀྱང་སྦྲེལ་མཐུད་མི་འདུག།',
 'isimage' => 'ཡིག་རིས་སྦྲེལ་མཐུད།',
 'whatlinkshere-links' => '← སྦྲེལ་མཐུད།',
+'whatlinkshere-hideredirs' => '$1 ཁ་ཕྱོགས་བསྐྱར་སྟོན།',
 'whatlinkshere-hidelinks' => '$1 སྦྲེལ་མཐུད།',
+'whatlinkshere-hideimages' => '$1 ཡིག་ཆ་སྦྲེལ་མཐུད།',
 'whatlinkshere-filters' => 'ཡིག་ཚགས།',
 
 # Block/unblock
 'blockip' => 'སྤྱོད་མི་འགོག་སྡོམ།',
 'ipbreason' => 'རྒྱུ་མཚན།',
+'ipblocklist' => 'འགོག་སྡོམ་བྱས་པའི་སྤྱོད་མི།',
 'ipblocklist-submit' => 'འཚོལ།',
 'blocklink' => 'འགོག་པ།',
 'unblocklink' => 'བཀག་སྡོམ་གློད་པ།',
 'change-blocklink' => 'བཀག་སྡོམ་བསྒྱུར་བཅོས།',
-'contribslink' => 'à½\96ྱསà¼\8bརà¾\97ེས།',
+'contribslink' => 'à½\98à½\90ུà½\93à¼\8bའà½\82ྱུར།',
 'blocklogpage' => 'རྩོམ་ཡིག་བཀག་འགོག',
+'block-log-flags-nocreate' => 'རྩིས་ཁྲ་གསར་བཟོ་འགོག་འདུག།',
 
 # Move page
 'movearticle' => 'ཤོག་ངོས་སྤོར་བ།',
@@ -791,40 +935,40 @@ $messages = array(
 'tooltip-pt-preferences' => 'ཁྱེད་ཀྱི་ལེགས་སྒྲིག',
 'tooltip-pt-watchlist' => 'ཞུ་དག་གཏོང་བཞིན་པའི་ཤོག་ངོས།',
 'tooltip-pt-mycontris' => 'ངའི་བྱས་རྗེས་སྟོན་པ།',
-'tooltip-pt-login' => 'à½\93à½\84à¼\8bའà½\9bུལ།',
-'tooltip-pt-logout' => 'à½\95ྱིརà¼\8bའà½\96ུà½\91།',
-'tooltip-ca-talk' => 'གྲོས་མོལ།',
-'tooltip-ca-edit' => 'à½\81ྱེà½\91à¼\8bà½\80ྱིསà¼\8bà½\91ྲà¼\8bà½\84ོསà¼\8bའà½\91ིà¼\8bརྩོà½\98à¼\8bསà¾\92ྲིà½\82à¼\8bà½\96ྱེà½\91à¼\8bà½\86ོà½\82 à½\89རà¼\8bà½\9aà½\82སà¼\8bà½\96ྱེà½\91à¼\8bà½\94འིà¼\8bསà¾\94ོà½\93à¼\8bà½\91ུà¼\8bà½\98à½\90ེà½\96à¼\8bà½\82à½\85ུསà¼\8bསà¾\94ོà½\93à¼\8bà½\98à¼\8bསྤྱོà½\91་རོགས།',
+'tooltip-pt-login' => 'à½\81ྱེà½\91à¼\8bརà½\84à¼\8bà½\93à½\84à¼\8bའà½\9bུལà¼\8bà½\82à½\93à½\84à¼\8bà½\96རà¼\8bà½\91à½\82འà¼\8bà½\96སུà¼\8bà½\9eུà¼\8d à½ à½¼à½\93à¼\8bà½\80ྱà½\84à¼\8bའà½\91ིརà¼\8bའà½\82à½\93à¼\8bའà½\81ུརà¼\8bà½\96ྱེà½\91à¼\8bà½\98à½\81à½\93à¼\8bà½\98ེà½\91།',
+'tooltip-pt-logout' => 'à½\95ྱིརà¼\8bà½\91ོà½\93།',
+'tooltip-ca-talk' => 'ཤོà½\82à¼\8bà½\84ོསà¼\8bà½\80ྱིà¼\8bà½\93à½\84à¼\8bà½\91ོà½\93à¼\8bà½\82ྲོསà¼\8bà½\98ོལà¼\8d',
+'tooltip-ca-edit' => 'à½\81ྱེà½\91à¼\8bà½\80ྱིསà¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bའà½\91ིརà¼\8bརྩོà½\98à¼\8bསà¾\92ྲིà½\82à¼\8bà½\96ྱེà½\91à¼\8bà½\86ོà½\82à¼\8d à½\89རà¼\8bà½\9aà½\82སà¼\8bà½\98à¼\8bà½\96ྱེà½\91à¼\8bà½\82ོà½\84à¼\8bསà¾\94ོà½\93à¼\8bལà¾\9fའིà¼\8bà½\98à½\90ེà½\96à¼\8bà½\82à½\9eོà½\84à¼\8bà½\82à½\93ོà½\93་རོགས།',
 'tooltip-ca-addsection' => 'སྡེ་ཚན་གསར་བ་ཞིག་འགོ་འཛུགས་པ།',
-'tooltip-ca-viewsource' => 'ཤོà½\82à¼\8bà½\84ོསà¼\8bའà½\91ིà¼\8bསྲུà½\84à¼\8bསà¾\90ྱོà½\96à¼\8bའོà½\82à¼\8bཡོà½\91à¼\8d à½\81ྱེà½\91à¼\8bà½\80ྱིསà¼\8bའà½\91ིའིà¼\8bའà½\96ྱུà½\84à¼\8bà½\81ོà½\84སà¼\8bལà¾\9fà¼\8bà½\86ོà½\82',
-'tooltip-ca-history' => 'à½\96à½\9fོ་བཅོས་སྔ་མ།',
+'tooltip-ca-viewsource' => 'ཤོà½\82à¼\8bà½\84ོསà¼\8bའà½\91ིà¼\8bའà½\82ོà½\82à¼\8bསྲུà½\84à¼\8bà½\96ྱསà¼\8bཡོà½\91à¼\8d à½\81ྱེà½\91à¼\8bà½\80ྱིསà¼\8bའà½\91ིའིà¼\8bà½\81ུà½\84སà¼\8bལà¼\8bལà¾\9fà¼\8bà½\86ོà½\82à¼\8d',
+'tooltip-ca-history' => 'ཤོà½\82à¼\8bà½\84ོསà¼\8bའà½\91ིའིà¼\8bà½\96སà¾\90ྱར་བཅོས་སྔ་མ།',
 'tooltip-ca-protect' => 'ཤོག་ངོས་འདི་སྲུངས་ཤིག',
 'tooltip-ca-delete' => 'ཤོག་ངོས་འདི་དོར་ཅིག',
 'tooltip-ca-move' => 'ཤོག་ངོས་འདི་སྤོར་བ།',
 'tooltip-ca-watch' => 'ཤོག་ངོས་འདི་ཁྱོད་ཀྱི་མཉམ་འཇོག་ཐོ་རུ་འཇུག་པ།',
 'tooltip-ca-unwatch' => 'ཤོག་ངོས་འདི་མཉམ་འཇོག་ཐོ་ལས་ལེན་པ།',
-'tooltip-search' => 'ལà½\82à¼\8bà½\86à¼\8bའà½\9aོལà¼\8d',
+'tooltip-search' => 'འà½\9aོལà¼\8d {{SITENAME}}',
 'tooltip-search-go' => 'མིང་ཇི་བཞིན་པའི་ཤོག་ངོས་སྟེང་དུ་སྐྱོད་པ།',
-'tooltip-search-fulltext' => 'à½\9aིà½\82་འདི་འཚོལ།',
-'tooltip-p-logo' => 'à½\82à½\99ོà¼\8bà½\84ོས།',
-'tooltip-n-mainpage' => 'à½\82à½\99ོà¼\8bà½\84ོསà¼\8bལà¼\8bལà¾\9fà¼\8bà½\96།',
-'tooltip-n-mainpage-description' => 'à½\82à½\99ོà¼\8bà½\84ོསà¼\8bལà¼\8bལà¾\9fà¼\8bà½\96།',
-'tooltip-n-portal' => 'ལསà¼\8bའà½\86རà¼\8bསà¾\90ོརà¼\8bà½\91à½\84à¼\8bà½\81ྱེà½\91à¼\8bà½\80ྱིསà¼\8bà½\85ིà¼\8bà½\9eིà½\82à¼\8bà½\96ྱེà½\91à¼\8bà½\93ུསà¼\8bà½\94à¼\8d à½\82à½\84à¼\8bà½\91ུà¼\8bའà½\9aོལà¼\8bà½\91à½\82ོསà¼\8bà½\94།',
+'tooltip-search-fulltext' => 'ཤོà½\82à¼\8bà½\84ོསà¼\8bà½\90ོà½\82à¼\8bཡིà½\82à¼\8bརà¾\90ྱà½\84་འདི་འཚོལ།',
+'tooltip-p-logo' => 'à½\82à½\99ོà¼\8bà½\82à½\93à½\91à¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bལà¼\8bà½\82à½\9fིà½\82སà¼\8bརོà½\82ས།',
+'tooltip-n-mainpage' => 'à½\82à½\99ོà¼\8bà½\82à½\93à½\91à¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bལà¼\8bà½\82à½\9fིà½\82སà¼\8bརོà½\82ས།',
+'tooltip-n-mainpage-description' => 'à½\82à½\99ོà¼\8bà½\82à½\93à½\91à¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bལà¼\8bà½\82à½\9fིà½\82སà¼\8bརོà½\82ས།',
+'tooltip-n-portal' => 'ལསà¼\8bའà½\86རà¼\8bསà¾\90ོརà¼\8d à½\81ྱེà½\91à¼\8bà½\80ྱིསà¼\8bà½\82à½\84à¼\8bà½\96ྱེà½\91à¼\8bà½\90ུà½\96à¼\8bà½\96à½\98à¼\8d à½\82à½\84à¼\8bà½\91ུà¼\8bའà½\9aོལà¼\8bà½\91à½\82ོསà¼\8bསà½\98།',
 'tooltip-n-currentevents' => 'ཉེ་བའི་ལས་དོན་གྱི་རྒྱབ་ལྗོངས་གནས་ཚུལ་འཚོལ་བ།',
-'tooltip-n-recentchanges' => 'à½\9dེà¼\8bà½\81ེà¼\8bསà¾\9fེà½\84à¼\8bà½\82ིà¼\8bà½\89ེà¼\8bà½\96འིà¼\8bà½\96à½\9fོà¼\8bà½\96à½\85ོསà¼\8bà½\80ྱིà¼\8bà½\90ོà¼\8bà½\82à½\9eུà½\84à¼\8b།',
-'tooltip-n-randompage' => 'རà½\84à¼\8bà½\98ོསà¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bཤིà½\82à¼\8bལེà½\93à¼\8bà½\94།',
+'tooltip-n-recentchanges' => 'à½\9dེà¼\8bà½\81ེà¼\8bསà¾\9fེà½\84à¼\8bà½\82ིà¼\8bà½\89ེà¼\8bà½\86རà¼\8bà½\96à½\9fོà¼\8bà½\96à½\85ོསà¼\8bà½\80ྱིà¼\8bà½\90ོ།',
+'tooltip-n-randompage' => 'སà¾\90à½\96སà¼\8bà½\91ོà½\93à¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bཤིà½\82à¼\8bà½\95à½\96à¼\8bའà½\87ུà½\82།',
 'tooltip-n-help' => 'གང་དུ་འཚོལ་བའི་གནས།',
-'tooltip-t-whatlinkshere' => 'འà½\91ིà¼\8bལà¼\8bསྦྲེལà¼\8bà½\96འིà¼\8bà½\9dེà¼\8bà½\81ེà¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bཡོà½\84སà¼\8bརྫོà½\82ས།',
-'tooltip-t-recentchangeslinked' => 'à½\84ོསà¼\8bའà½\91ིà¼\8bà½\91à½\84à¼\8bའà½\96ྲེལà¼\8bà½\96འི་ཉེ་བའི་བཟོ་བཅོས།',
+'tooltip-t-whatlinkshere' => 'འà½\91ིརà¼\8bསྦྲེལà¼\8bཡོà½\91à¼\8bà½\94འིà¼\8bà½\9dེà¼\8bà½\81ེà¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bཧྲིལà¼\8bà½\94ོའིà¼\8bà½\90ོ།',
+'tooltip-t-recentchangeslinked' => 'ཤོà½\82à¼\8bà½\84ོསà¼\8bའà½\91ིà¼\8bà½\91à½\84à¼\8bསྤྲེལà¼\8bà½\96འིà¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bà½\82à½\9eà½\93à¼\8bà½\90ོà½\82à¼\8bà½\82ི་ཉེ་བའི་བཟོ་བཅོས།',
 'tooltip-feed-rss' => 'ཤོག་ངོས་འདིའི་RSS འབྱུང་ཁུངས།',
 'tooltip-feed-atom' => 'ཤོག་ངོས་འདིའི་Atom འབྱུང་ཁུངས།',
 'tooltip-t-contributions' => 'བཀོལ་མི་འདིའི་བྱས་རྗེས་སྟོན།',
-'tooltip-t-emailuser' => 'སྤྱོà½\91à¼\8bà½\98ིà¼\8bའà½\91ིརà¼\8bà½\91ྲà¼\8bའà½\95ྲིà½\93à¼\8bསà¾\90ུརà¼\8bà½\96།',
+'tooltip-t-emailuser' => 'སྤྱོà½\91à¼\8bà½\98ིà¼\8bའà½\91ིརà¼\8bà½\82ློà½\82à¼\8bའà½\95ྲིà½\93à¼\8bà½\96སà¾\90ུརà¼\8bརོà½\82ས།',
 'tooltip-t-upload' => 'ཡིག་ཆ་ཡར་འཇུག',
-'tooltip-t-specialpages' => 'à½\91à½\98ིà½\8aà¼\8bà½\82སལ་ཤོག་ངོས་ཀྱི་ཐོ་གཞུང་།',
-'tooltip-t-print' => 'à½\91à½\94རà¼\8bà½\90ུà½\96à¼\8bà½\94འིà¼\8bà½\98ིà¼\8bའà½\91ྲà¼\8bà½\86ོས།',
-'tooltip-t-permalink' => 'རà¾\9fà½\82à¼\8bà½\96རà¾\9fà½\93à¼\8bà½\82ྱིà¼\8bà½\91ྲà¼\8bà½\96རà¼\8bའà½\87ུà½\82à¼\8bà½\94།',
-'tooltip-ca-nstab-main' => 'à½\93à½\84à¼\8bà½\91ོà½\93à¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bལà¼\8bལà¾\9fà¼\8bà½\96།',
+'tooltip-t-specialpages' => 'à½\86ེà½\91à¼\8bལས་ཤོག་ངོས་ཀྱི་ཐོ་གཞུང་།',
+'tooltip-t-print' => 'ཤོà½\82à¼\8bà½\84ོསà¼\8bའà½\91ིའིà¼\8bà½\91à½\94རà¼\8bརུà½\84à¼\8bà½\96འིà¼\8bའà½\82ྱུར།',
+'tooltip-t-permalink' => 'à½\96à½\9fོà¼\8bའà½\85ོསà¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bའà½\91ིའིà¼\8bà½\96རà¾\9fà½\93à¼\8bའà½\87à½\82སà¼\8bà½\80ྱིà¼\8bསྦྲེལà¼\8bà½\98à½\90ུà½\91།',
+'tooltip-ca-nstab-main' => 'à½\93à½\84à¼\8bà½\91ོà½\93à¼\8bà½\80ྱིà¼\8bཤོà½\82à¼\8bà½\84ོསà¼\8bལà¼\8bà½\82à½\9fིà½\82སà¼\8bརོà½\82ས།',
 'tooltip-ca-nstab-user' => 'སྤྱོད་མིའི་ཤོག་ངོས་ལ་ལྟ་བ།',
 'tooltip-ca-nstab-special' => 'དྲ་ངོས་འདི་དམིགས་གསལ་བ་ཡིན་པས་བཟོ་བཅོས་རྒྱག་མི་ཆོག',
 'tooltip-ca-nstab-project' => 'ལས་འཆར་ཤོག་ངོས་ལ་ལྟ་བ།',
@@ -835,6 +979,9 @@ $messages = array(
 'tooltip-save' => 'བཟོ་བཅོས་ཉར་ཚགས་བྱོས།',
 'tooltip-preview' => 'ཉར་ཚགས་ཀྱི་སྔོན་དུ་བཟོ་བཅོས་ལ་བསྐྱར་ཞིབ་གནང་རོགས།',
 'tooltip-diff' => 'གང་ལ་བཟོ་བཅོས་བྱས་པའི་ཡིག་འབྲུ་སྟོན་པ།',
+'tooltip-compareselectedversions' => 'ཤོག་ངོས་འདེམས་བཞིན་བ་གཉིས་ཀྱི་བར་བཟོ་འཅོས་དཔར་གཞིའི་ཁྱད་པར་སྟོན།',
+'tooltip-rollback' => '"རྒྱབ་སྒྲིལ།" ཞེས་པ་འདིས་ཤོག་ངོས་སྟེང་གི་དེ་སྔོན་གི་རྩོམ་སྒྲིག་མཐུན་འགྱུར་རྣམས་མཐེབ་གཞོང་གནོན་ཐེངས་གཅིག་ལ་ཕྱིར་ལྡོག་བྱེད་རྒྱུ་ཡིན།',
+'tooltip-undo' => '"ཕྱིར་འཐེན།" ཞེས་པ་དེས་ཁྱེད་ཀྱི་རྩོམ་སྒྲིག་ཕྱིར་ལྡོག་པ་དང་སྔོན་འཚུད་བལྟ་ཞིབ་ཤོག་ངོས་ཁ་ཕྱེ་རྒྱུ་ཡིན། མཇུག་སྡོམ་ཀྱི་རྒྱུ་རྐྱེན་གླེང་འཇུག་རྒྱུ་ཡིན།',
 'tooltip-summary' => 'ཕྱོགས་བསྡོམས་ཐུང་ངུ་ཞིག་འབྲིས་',
 
 # Browsing diffs
@@ -842,11 +989,24 @@ $messages = array(
 'nextdiff' => 'རྩོམ་སྒྲིག་གསར་གྲས། →',
 
 # Media information
+'file-info-size' => '$1 × $2 བརྙན་རྒྱུ།, ཡིག་ཆ་ཆེ་ཆུང།: $3, རྣམ་གཞག།: $4',
 'show-big-image' => 'ཐོག་མའི་ཡིག་ཆ།',
 
 # Special:NewFiles
 'ilsubmit' => 'འཚོལ།',
 
+# Bad image list
+'bad_image_list' => 'གཤམ་གྱི་རྣམ་གཞག་ལྟར་རྗེས་སུ་འབྲང་རོགས།:
+རེའུ་མིག་ཡོད་པ་ཁོ་ན་ཆ་འཇོག་བྱེད་རྒྱ་ཡིན།',
+
+# Metadata
+'metadata' => 'རྒྱུ་གཞི་གྲངས།',
+'metadata-help' => 'ཡིག་ཆ་འདིར་ཆ་འཕྲིན་གཞན་དག་པ་ཁ་ཅིག་འདུག། ཕལ་ཆེར་གྲངས་འཛིན་དཔར་ཆས་འམ་འབེབས་ཆས་ལས་གྲངས་འཛིན་ཡོང་ཆེད་བཟོས་པ་ཡིན། 
+གལ་སྲིད་ཡིག་ཆ་འདིར་འགྱུར་བ་གཏོང་གནང་ན། དེ་སྔོན་གྱི་ལྟར་ཞིབས་ཚག་སྟོན་མི་ཐུབ།',
+'metadata-fields' => 'དཔར་རིས་ཀྱི་ནང་དོན་འདིར་ཡོད་པ་རྣམས་ནང་དོན་ཞིབ་ཕྲའི་སྐབས་སྟོན་རྒྱུ་ཡིན། དེ་མིན་རྣམས་རང་འགུལ་གྱི་འབས་ཞོགས་རྒྱུ་ཡིན།
+* བཟོ་སྐྲུན།
+* དབྱབས་གཟུགས།',
+
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ཚང་མ།',
 'namespacesall' => 'ཡོངས་རྫོགས།',
@@ -859,11 +1019,15 @@ $messages = array(
 'table_pager_limit_submit' => 'སོང་།',
 
 # Watchlist editing tools
+'watchlisttools-view' => 'འབྲེལ་ཡོད་འགྱུར་བཅོས་ལ་གཟིགས་རོགས།',
 'watchlisttools-edit' => 'མཉམ་འཇོག་ཐོར་ལྟ་བ་དང་བསྒྱུར་བཅོས་བྱེད་པ།',
 'watchlisttools-raw' => 'ལྟ་ཐོའི་གོ་རིམ་བཅོས་སྒྲིག',
 
 # Special:SpecialPages
-'specialpages' => 'དམིགས་གསལ་ཤོག་ངོས།',
+'specialpages' => 'ཆེད་ལས་ཤོག་ངོས།',
+
+# Special:Tags
+'tag-filter' => 'འདེམས་འཚག། [[Special:Tags|Tag]]',
 
 # New logging system
 'rightsnone' => '(སྟོང་པ།)',
index 2d95199..592e6bd 100644 (file)
@@ -195,7 +195,6 @@ $messages = array(
 'vector-action-protect' => 'লুকর',
 'vector-action-undelete' => 'নাপুসি',
 'vector-action-unprotect' => 'লুকরানিহান সিলকর',
-'vector-simplesearch-preference' => 'বিসারানির কা পরামর্শ থা করেই (হুদ্দা ভেক্টর স্কিনর কা)',
 'vector-view-create' => 'হঙকরিক',
 'vector-view-edit' => 'পতানি',
 'vector-view-history' => 'ইতিহাস চেইক',
index 16ef6ec..a015772 100644 (file)
@@ -22,16 +22,13 @@ $rtl = true;
 $messages = array(
 # User preference toggles
 'tog-underline' => 'لینکهای خط به زیر',
-'tog-justify' => 'فاصله نهادن سی پاراگرافها',
 'tog-hideminor' => 'من ته نبیدن تغییرات کوچیک',
 'tog-extendwatchlist' => 'گپ کردن لیستهای من ته سی دیدن همه تغییراتی که ابوه',
 'tog-usenewrc' => 'گپ کردن تغییرات آخری - جاوااسکریپت',
 'tog-numberheadings' => 'شماره وندن خودکار سی سرخط ها',
 'tog-showtoolbar' => 'نشو دادن تغییرات  تولبار  یا   جای نشودادن ابزارها- جاوااسکریپت',
 'tog-editondblclick' => 'اصلاح صفحات با دوبار کلیک - جاوااسکریپت',
-'tog-editsection' => 'امکان اصلاح یه قسمت زه راه لینکها',
 'tog-editsectiononrightclick' => 'امکان اصلاح یه قسمت زه راه راست کلیک کردن رو عنوان  اوقسمت- جاوااسکریپت',
-'tog-showtoc' => 'نشودادن فهرست محتوا سی صفحاتی که بیشتر زه سه سرخط دارن',
 'tog-rememberpassword' => 'به حافظه کامپیوتر دادن نحوه ورودی خوم (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'اضاف کردن اوصفحاتی که خوم درست کردم به فهرست نمایشی',
 'tog-watchdefault' => 'اضاف کردن اوصفحاتی که خوم اصلاح کردم به فهرست نمایشی',
@@ -40,7 +37,6 @@ $messages = array(
 'tog-minordefault' => 'علامت نهادن به اصلاحات ناقص',
 'tog-previewontop' => 'نشودادن پیش نمایش قبل از یوکه جعبه یا کادر اصلاح بوه',
 'tog-previewonfirst' => 'نشو دادن پیش نمایش  دراصلاح اول',
-'tog-nocache' => 'ناتوان کردن صفحه  درحال کچ',
 'tog-enotifwatchlistpages' => 'امیل به مو وقتی که  صفحه ای که منه فهرست نمایش مونه تغییر کرد',
 'tog-enotifusertalkpages' => 'امیل به مو وقتی که صفحه گفتگوی مو تغییر کرد',
 'tog-enotifminoredits' => 'امیل به مو سی صفحات ناقص اصلاح شده',
@@ -386,7 +382,6 @@ $1',
 'lineno' => 'سطر $1:',
 'compareselectedversions' => 'مقایسه نسخه‌های انتخاب‌ وابیده',
 'editundo' => 'لغو اصلاح آخر',
-'diff-multi' => '({{PLURAL:$1|یه اصلاح میانی|$1 اصلاحات میانی}} نشو داده نوابیده.)',
 
 # Search results
 'prevn' => 'قبلی {{PLURAL:$1|$1}}',
@@ -408,7 +403,6 @@ $1',
 'nchanges' => '$1 {{PLURAL:$1|تغییر|تغییرات}}',
 'recentchanges' => 'تغییرات اخیر',
 'recentchanges-feed-description' => 'ردیابی آخرین تغییرات  ویکی در ای خورد',
-'rcnote' => "در زیر {{PLURAL:$1|'''۱''' تغییر|آخرین '''$1''' تغییر}} در آخرین {{PLURAL:$2|روز|'''$2''' روز}} را، تا $5، $4 ابینین.",
 'rcnotefrom' => 'در زیر تغییرات زه تاریخ <b>$2</b> آمده‌اند (تا <b>$1</b> مورد نشو داده ابوه).',
 'rclistfrom' => 'نشودادن تغییرات تازه با شروع زه $1',
 'rcshowhideminor' => 'اصلاحات کوچیک $1',
index 9ee95a8..ce0821f 100644 (file)
@@ -216,7 +216,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Kas din un eilskrid eus ar posteloù a gasan da implijerien all',
 'tog-diffonly' => "Arabat diskouez danvez ar pennadoù dindan an diforc'hioù",
 'tog-showhiddencats' => 'Diskouez ar rummadoù kuzhet',
-'tog-noconvertlink' => 'Diweredekaat amdroadur an titloù',
 'tog-norollbackdiff' => 'Na ziskouez an diff goude un distaoladenn',
 'tog-useeditwarning' => 'Kas keloù din pa guitaan ur bajenn degaset kemmoù enni hep enrollañ',
 'tog-prefershttps' => "Implijout bepred ur c'hevreadur suraet pa vezit kevreet",
@@ -343,7 +342,6 @@ $messages = array(
 'vector-action-protect' => 'Gwareziñ',
 'vector-action-undelete' => 'Diziverkañ',
 'vector-action-unprotect' => 'Cheñch gwarez',
-'vector-simplesearch-preference' => "Aotren ar c'hinnigoù klask gwellaet (gant Vektor nemetken)",
 'vector-view-create' => 'Krouiñ',
 'vector-view-edit' => 'Kemmañ',
 'vector-view-history' => 'Gwelet an istor',
@@ -624,8 +622,8 @@ Na zisoñjit ket resisaat ho [[Special:Preferences|penndibaboù evit {{SITENAME}
 'gotaccountlink' => 'Kevreañ',
 'userlogin-resetlink' => "Ha disoñjet eo bet ho titouroù kevreañ ganeoc'h ?",
 'userlogin-resetpassword-link' => 'Ankouaet ho peus ho ker-tremen ?',
-'helplogin-url' => 'Help:Kevreañ',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Skoazell evit kevreañ]]',
+'userlogin-loggedin' => "Kevreet oc'h dija evel {{GENDER:$1|$1}}.
+Implijit ar furmskrid amañ dindan evit kevreañ evel un implijer all.",
 'userlogin-createanother' => 'Krouiñ ur gont all',
 'createacct-join' => 'Skrivit ho titouroù amañ dindan.',
 'createacct-another-join' => 'Ebarzhiñ titouroù ar gont nevez amañ dindan.',
@@ -729,6 +727,8 @@ Gortozit $1, mar plij, a-raok esaeañ en-dro.",
 'retypenew' => 'Adskrivañ ar ger-tremen nevez :',
 'resetpass_submit' => 'Cheñch ar ger-tremen ha kevreañ',
 'changepassword-success' => 'Cheñchet eo bet ho ker-tremen !',
+'changepassword-throttled' => "Betek re hoc'h heus klasket kevreañ en aner.
+Gortozit $1, mar plij, a-raok esaeañ en-dro.",
 'resetpass_forbidden' => "N'haller ket cheñch ar gerioù-termen",
 'resetpass-no-info' => "Ret eo deoc'h bezañ kevreet a-benn mont d'ar bajenn-se war-eeun.",
 'resetpass-submit-loggedin' => 'Cheñch ger-tremen',
@@ -779,6 +779,8 @@ Ger-tremen da c'hortoz : $2",
 'changeemail-password' => 'Ho ker-tremen war {{SITENAME}}:',
 'changeemail-submit' => "Cheñch chomlec'h postel",
 'changeemail-cancel' => 'Nullañ',
+'changeemail-throttled' => "Betek re hoc'h heus klasket kevreañ en aner.
+Gortozit $1, mar plij, a-raok esaeañ en-dro.",
 
 # Special:ResetTokens
 'resettokens' => 'Adderaouekaat ar jedoueroù',
@@ -1026,6 +1028,7 @@ A-gostez eo bet lezet an arventenn-se.',
 'undo-success' => "Gallout a reer dizober ar c'hemmoù-mañ. Gwiriit, mar plij, gant ar geñveriadenn a-is evit bezañ sur eo an dra-se a fell deoc'h ober; goude-se enrollit ar c'hemmoù a-is a-benn echuiñ disteurel ar c'hemmoù.",
 'undo-failure' => "N'eus ket bet tu da zisteuler ar c'hemm-mañ abalamour d'un tabut gant kemmoù degaset e-keit-se.",
 'undo-norev' => "N'eus ket bet gallet degas ar c'hemmoù-mañ rak pe n'eus ket anezho pe int bet diverket.",
+'undo-nochange' => "War a seblant eo bet nullet ar c'hemm dija.",
 'undo-summary' => 'Dizober kemmoù $1 a-berzh [[Special:Contributions/$2|$2]] ([[User talk:$2|kaozeal]])',
 'undo-summary-username-hidden' => 'Dizober ar reizhadenn $1 gant un implijer kuzhet',
 
@@ -1108,8 +1111,6 @@ Gallout a ri gwelet an diforc'h-mañ ; titouroù zo war [{{fullurl:{{#Special:Lo
 'revdelete-show-file-submit' => 'Ya',
 'revdelete-selected' => "'''{{PLURAL:$2|Stumm dibabet|Stummoù dibabet}} eus [[:$1]] :'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Darvoud eus ar marilh diuzet|Darvoud eus ar marilh diuzet}} :'''",
-'revdelete-text' => "'''Derc'hel a raio ar stummoù ha darvoudoù diverket da zont war wel war istor ar bajenn hag er marilhoù, met dazrn eus ar boued n'hallo ket bezañ gwelet gant an dud.'''
-Gouest e vo merourien all {{SITENAME}} da dapout krog en testennoù kuzhet ha da ziziverkañ anezho en-dro dre an hevelep etrefas, nemet e vije bet lakaet e plas strishadurioù ouzhpenn.",
 'revdelete-confirm' => "Kadarnait eo mat an dra-se a fell deoc'h ober, e komprenit mat ar pezh a empleg, hag en grit en ur zoujañ d'ar [[{{MediaWiki:Policy-url}}|reolennoù]].",
 'revdelete-suppress-text' => "Ne zlefe an dilemel bezañ implijet '''nemet''' abalamour d'an abegoù da-heul :
 * Titouroù personel dizere
@@ -1236,6 +1237,7 @@ Gallout a reot kavout munudoù e [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'search-result-score' => 'Klotadusted : $1%',
 'search-redirect' => '(adkas $1)',
 'search-section' => '(rann $1)',
+'search-file-match' => "(klotañ a ra gant endalc'had ar restr)",
 'search-suggest' => "N'hoc'h eus ket soñjet kentoc'h e : $1",
 'search-interwiki-caption' => 'Raktresoù kar',
 'search-interwiki-default' => "$1 disoc'h :",
@@ -1522,8 +1524,8 @@ Ma skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset g
 'action-block' => 'mirout ouzh an impplijer-mañ da zegas kemmoù',
 'action-protect' => 'kemmañ liveoù gwareziñ ar bajenn-mañ',
 'action-rollback' => 'disteuler prim kemmoù an implijer diwezhañ kemmet gantañ ur bajenn resis',
-'action-import' => 'Enporzhiañ ar bajenn-mañ adal ur wiki all',
-'action-importupload' => 'Enporzhiañ ar bajenn-mañ adal ur restr pellgarget',
+'action-import' => 'Enporzhiañ pajennoù eus ur wiki all',
+'action-importupload' => 'Enporzhiañ pajennoù eus ur restr pellgarget',
 'action-patrol' => 'merkañ kemmoù ar re all evel gwiriet',
 'action-autopatrol' => 'bezañ merket ho tegasadennoù evel gwiriet',
 'action-unwatchedpages' => "gwelet roll ar pajennoù n'int ket evezhiet",
@@ -2051,6 +2053,14 @@ $1 {{PLURAL:$1|rummad|rummad}}',
 'protectedpages-cascade' => 'Gwarez dre skalierad hepken',
 'protectedpages-noredirect' => 'Kuzhat an adkasoù',
 'protectedpagesempty' => "N'eus pajenn gwarezet ebet gant an arventennoù-mañ evit poent.",
+'protectedpages-timestamp' => 'Deiziad hag eur',
+'protectedpages-page' => 'Pajenn',
+'protectedpages-expiry' => "A ya d'e dermen",
+'protectedpages-performer' => 'Gwareziñ an implijer',
+'protectedpages-params' => 'Arventennoù gwareziñ',
+'protectedpages-reason' => 'Abeg',
+'protectedpages-unknown-timestamp' => 'Dianav',
+'protectedpages-unknown-performer' => 'Implijer dianav',
 'protectedtitles' => 'Titloù gwarezet',
 'protectedtitlesempty' => "N'eus bet gwarezet titl ebet dezhañ an arventennoù-se evit poent.",
 'listusers' => 'Roll an implijerien',
@@ -2787,6 +2797,7 @@ Kit da welet [https://www.mediawiki.org/wiki/Localisation Lec'heladur MediaWiki]
 'allmessages-prefix' => 'Silañ dre rakger',
 'allmessages-language' => 'Yezh :',
 'allmessages-filter-submit' => 'Mont',
+'allmessages-filter-translate' => 'Treiñ',
 
 # Thumbnails
 'thumbnail-more' => 'Brasaat',
@@ -3079,7 +3090,7 @@ Ma vez erounezet ganeoc'h e c'hallje tagañ ho reizhiad.",
 'svg-long-desc' => 'restr SVG file, pizhder $1 × $2 piksel, ment ar restr : $3',
 'svg-long-desc-animated' => 'Restr SVG bev, ment $1 × $2 piksel, ment ar restr: $3',
 'svg-long-error' => 'Restr SVG direizh : $1',
-'show-big-image' => 'Pizhder leun',
+'show-big-image' => 'Restr orin',
 'show-big-image-preview' => 'Ment ar rakweled-mañ : $1.',
 'show-big-image-other' => '{{PLURAL:$2|pizhder all|pizhderioù all}} : $1.',
 'show-big-image-size' => '$1 × $2 piksel',
@@ -3645,6 +3656,7 @@ Kadarnait mar plij e fell deoc'h krouiñ ar pennad-mañ da vat.",
 
 # Language selector for translatable SVGs
 'img-lang-default' => '(yezh dre ziouer)',
+'img-lang-info' => 'Diskouez ar skeudenn-mañ e $1. $2',
 'img-lang-go' => 'Mont',
 
 # Table pager
@@ -4005,9 +4017,8 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 'expandtemplates' => 'Emled ar patromoù',
 'expand_templates_intro' => "Kemer a ra ar bajenn dibar-mañ tammoù testenn hag astenn a ra an holl batromoù enni en un doare azkizat.
 Astenn a ra ivez an arc'hwelioù parser evel
-<nowiki>{{</nowiki>#language:…}}, hag an argemmoù evel
-<nowiki>{{</nowiki>CURRENTDAY}}&mdash; e gwirionez, koulz lavaret kement tra zo etre briataennoù.
-Ober a ra kement-mañ dre c'hervel ar bazenn a zegouezh digant parser MediaWiki e-unan.",
+<code><nowiki>{{</nowiki>#language:…}}</code>, hag an argemmoù evel
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code. E gwirionez, koulz lavaret kement tra zo etre briataennoù doubl.",
 'expand_templates_title' => 'Titl ar gendestenn, evit {{FULLPAGENAME}} h.a. :',
 'expand_templates_input' => 'Merkañ ho testenn amañ :',
 'expand_templates_output' => "Disoc'h",
index 8c5cfcc..80d1f47 100644 (file)
@@ -335,7 +335,6 @@ Ná radbadal ák deskáne atíko matano.",
 'recentchanges-label-newpage' => 'Dá radbadal aŧ panna sená biná mass',
 'recentchanges-label-minor' => 'Dá cunko radbadal as e',
 'recentchanges-label-bot' => 'Dá xudkár asená dú án maroko radbadal as e',
-'rcnote' => "Şefko {{PLURAL:$1|'''1''' radbadal e|guđđíko '''$1''' radbadal áko}}, gidrengoká {{PLURAL:$2|de aŧí|'''$2''' de teŧí}}, $5, $4 ná hisáb aŧ.",
 'rcnotefrom' => "Şefko raddobadal ák '''$2''' án maroko ('''$1''' iskán páş o)",
 'rclistfrom' => '$1 án púskuná radbadal áke nişán et',
 'rcshowhideminor' => 'Cunká radbadal áte $1',
index e14b5f5..270b609 100644 (file)
@@ -318,7 +318,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Pošalji mi kopije emailova koje pošaljem drugim korisnicima',
 'tog-diffonly' => 'Ne prikazuj sadržaj stranice ispod prikaza razlika',
 'tog-showhiddencats' => 'Prikaži skrivene kategorije',
-'tog-noconvertlink' => 'Onemogući konverziju naslova linkova',
 'tog-norollbackdiff' => 'Nakon vraćanja zanemari prikaz razlika',
 'tog-useeditwarning' => 'Upozori me kada napustim stranicu za izmjene bez spašenih promjena',
 'tog-prefershttps' => 'Uvijek koristi sigurnu konekciju kada sam prijavljen.',
@@ -445,7 +444,6 @@ $messages = array(
 'vector-action-protect' => 'Zaštiti',
 'vector-action-undelete' => 'Vrati obrisano',
 'vector-action-unprotect' => 'Promijeni zaštitu',
-'vector-simplesearch-preference' => 'Omogući pojednostavljenu traku pretrage (samo vektorski izgled)',
 'vector-view-create' => 'Napravi',
 'vector-view-edit' => 'Uredi',
 'vector-view-history' => 'Pregled historije',
@@ -522,7 +520,7 @@ $1',
 'pool-errorunknown' => 'Nepoznata greška',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => 'O projektu {{SITENAME}}',
+'aboutsite' => 'O {{GRAMMAR:dativ|{{SITENAME}}}}',
 'aboutpage' => 'Project:O_projektu_{{SITENAME}}',
 'copyright' => 'Sadržaj je dostupan pod licencom $1 osim ako je drugačije navedeno.',
 'copyrightpage' => '{{ns:project}}:Autorska_prava',
@@ -674,7 +672,7 @@ Iz razloga "\'\'$2\'\'".',
 'invalidtitle-knownnamespace' => 'Neispravan naslov s imenskim prostorom "$2" i tekstom "$3"',
 'invalidtitle-unknownnamespace' => 'Neispravan naslov s imenskim prostorom br. $1 i tekstom "$2"',
 'exception-nologin' => 'Niste prijavljeni',
-'exception-nologin-text' => 'Ova stranica ili aktivnost zahtijeva da budete prijavljeni na ovom wikiju.',
+'exception-nologin-text' => '[[Special:Userlogin|Prijavite se]] da biste pristupili ovoj stranici ili radnji.',
 
 # Virus scanner
 'virus-badscanner' => "Loša konfiguracija: nepoznati anti-virus program: ''$1''",
@@ -722,8 +720,6 @@ Ne zaboravite da prilagodite sebi svoja [[Special:Preferences|{{SITENAME}} pode
 'gotaccountlink' => 'Prijavi se',
 'userlogin-resetlink' => 'Zaboravili ste detalje vaše prijave?',
 'userlogin-resetpassword-link' => 'Zaboravili ste šifru/lozinku?',
-'helplogin-url' => 'Help:Prijavljivanje',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoć pri prijavljivanju]]',
 'userlogin-loggedin' => 'Već ste prijavljeni kao {{GENDER:$1|$1}}.
 Koristite donji obrazac da biste se prijavili kao drugi korisnik.',
 'userlogin-createanother' => 'Napravi još jedan račun',
@@ -814,6 +810,10 @@ Molimo Vas da sačekate $1 prije nego što pokušate ponovo.',
 'suspicious-userlogout' => 'Vaš zahtjev za odjavu je odbijen jer je poslan preko pokvarenog preglednika ili keširanog proksija.',
 'createacct-another-realname-tip' => 'Pravo ime nije obavezno.
 Ako izaberete da date ime, biće korišteno za pripisivanje za vaš rad.',
+'pt-login' => 'Prijavi me',
+'pt-login-button' => 'Prijavi me',
+'pt-createaccount' => 'Napravi korisnički račun',
+'pt-userlogout' => 'Odjavi me',
 
 # Email sending
 'php-mail-error-unknown' => 'Nepoznata greška u PHP funkciji mail()',
@@ -1215,8 +1215,6 @@ Vi možete vidjeti ovu razliku; detalji se mogu vidjeti u [{{fullurl:{{#Special:
 'revdelete-show-file-submit' => 'Da',
 'revdelete-selected' => "'''{{PLURAL:$2|Odabrana revizija|Odabrane revizije}} od [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Označena stavka zapisa|Označene stavke zapisa}}:'''",
-'revdelete-text' => "'''Obrisane revizije i događaji će i dalje biti vidljivi u historiji stranice i zapisima, ali dijelovi njenog sadržaja neće biti dostupni javnosti.'''
-Drugi administratori projekta {{SITENAME}} će i dalje moći pristupiti sakrivenom sadržaju i mogu ga ponovo vratiti kroz ovaj interfejs, osim ako nisu postavljena dodatna ograničenja.",
 'revdelete-confirm' => 'Molimo potvrdite da namjeravate ovo učiniti, da razumijete posljedice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].',
 'revdelete-suppress-text' => "Ograničenja bi trebala biti korištena '''samo''' u slijedećim slučajevima:
 * Osjetljive korisničke informacije
@@ -1662,14 +1660,26 @@ Ako izaberete da date ime, biće korišteno za pripisivanje za vaš rad.',
 'recentchanges-label-plusminus' => 'Veličina stranice promijenila se za ovoliko bajtova',
 'recentchanges-legend-heading' => "'''Legenda:'''",
 'recentchanges-legend-newpage' => '(također pogledajte [[Special:NewPages|spisak novih stranica]])',
-'rcnotefrom' => 'Ispod su izmjene od <b>$2</b> (do <b>$1</b> prikazano).',
+'rcnotefrom' => 'Ispod su izmjene od <strong>$2</strong> (do <strong>$1</strong> prikazano).',
 'rclistfrom' => 'Prikaži nove izmjene počev od $1',
 'rcshowhideminor' => '$1 male izmjene',
+'rcshowhideminor-show' => 'Pokaži',
+'rcshowhideminor-hide' => 'Sakrij',
 'rcshowhidebots' => '$1 botove',
+'rcshowhidebots-show' => 'Pokaži',
+'rcshowhidebots-hide' => 'Sakrij',
 'rcshowhideliu' => '$1 registrovanih korisnika',
+'rcshowhideliu-show' => 'Pokaži',
+'rcshowhideliu-hide' => 'Sakrij',
 'rcshowhideanons' => '$1 anonimne korisnike',
+'rcshowhideanons-show' => 'Pokaži',
+'rcshowhideanons-hide' => 'Sakrij',
 'rcshowhidepatr' => '$1 patrolirane izmjene',
+'rcshowhidepatr-show' => 'Pokaži',
+'rcshowhidepatr-hide' => 'Sakrij',
 'rcshowhidemine' => '$1 moje izmjene',
+'rcshowhidemine-show' => 'Pokaži',
+'rcshowhidemine-hide' => 'Sakrij',
 'rclinks' => 'Prikaži najskorijih $1 izmjena u posljednjih $2 dana<br />$3',
 'diff' => 'razl',
 'hist' => 'hist',
@@ -2146,7 +2156,12 @@ Svaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju tekst
 'protectedpages' => 'Zaštićene stranice',
 'protectedpages-indef' => 'Samo neograničena zaštićenja',
 'protectedpages-cascade' => 'Samo prenosive zaštite',
+'protectedpages-noredirect' => 'Sakrij preusmjerenja',
 'protectedpagesempty' => 'Trenutno nijedna stranica nije zaštićena s ovim parametrima.',
+'protectedpages-page' => 'Stranica',
+'protectedpages-expiry' => 'Ističe',
+'protectedpages-reason' => 'Razlog',
+'protectedpages-unknown-timestamp' => 'Nepoznato',
 'protectedtitles' => 'Zaštićeni naslovi',
 'protectedtitlesempty' => 'Nema naslova zaštićenih članaka sa ovim parametrima.',
 'listusers' => 'Spisak korisnika',
@@ -2699,7 +2714,7 @@ ili korisničkom imenu.',
 'contribslink' => 'doprinosi',
 'emaillink' => 'pošalji e-mail',
 'autoblocker' => 'Automatski ste blokirani jer dijelite IP adresu sa "[[User:$1|$1]]".
-Razlog za blokiranje je korisnika $1 je: \'\'$2\'\'',
+Razlog za blokiranje korisnika $1 je \'\'$2\'\'',
 'blocklogpage' => 'Evidencija blokiranja',
 'blocklog-showlog' => 'Ovaj korisnik je ranije blokiran. Zapisnik blokiranja je prikazan ispod kao referenca:',
 'blocklog-showsuppresslog' => 'Ovaj korisnik je ranije blokiran i sakriven. Zapisnik sakrivanja je prikazan ispod kao referenca:',
@@ -2892,6 +2907,7 @@ Molimo posjetite [https://www.mediawiki.org/wiki/Localisation MediaWiki lokaliza
 'allmessages-prefix' => 'Filter po prefiksu:',
 'allmessages-language' => 'Jezik:',
 'allmessages-filter-submit' => 'Idi',
+'allmessages-filter-translate' => 'Prevedi',
 
 # Thumbnails
 'thumbnail-more' => 'uvećajte',
@@ -3745,6 +3761,9 @@ Molimo Vas da potvrdite da stvarno želite da ponovo napravite ovaj članak.",
 'imgmultigo' => 'Idi!',
 'imgmultigoto' => 'Idi na stranicu $1',
 
+# Language selector for translatable SVGs
+'img-lang-go' => 'Idi',
+
 # Table pager
 'ascending_abbrev' => 'rast',
 'descending_abbrev' => 'opad',
@@ -3889,6 +3908,11 @@ Također možete [[Special:EditWatchlist|koristiti standardni uređivač]].',
 'version-hook-subscribedby' => 'Pretplaćeno od',
 'version-version' => '(Verzija $1)',
 'version-license' => 'Licenca',
+'version-ext-license' => 'Licenca',
+'version-ext-colheader-version' => 'Verzija',
+'version-ext-colheader-license' => 'Licenca',
+'version-ext-colheader-description' => 'Opis',
+'version-ext-colheader-credits' => 'Autori',
 'version-poweredby-credits' => "Ova wiki je zasnovana na '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
 'version-poweredby-others' => 'ostali',
 'version-credits-summary' => 'Željeli bismo se zahvaliti sljedećim ljudima na njihovom doprinosu [[Special:Version|MediaWikiju]].',
index 536d199..4217418 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Amire80
  * @author Bjargal
+ * @author Elvonudinium
  * @author Korol Bumi
  * @author Soul Train
  * @author Губин Михаил
@@ -78,8 +79,7 @@ $specialPageAliases = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Холбооһо доогуурнь зураха:',
-'tog-justify' => 'Мүр тэгшэлхэ',
-'tog-watchcreations' => 'Минии үүсхэһэн хуудаһа болон ашаалһан файлыем хинаха жагсаалтада оруула',
+'tog-watchcreations' => 'Минии үүдхэһэн хуудаһа болон ашаалһан файлыем хинаха жагсаалтада оруула',
 'tog-watchdefault' => 'Минии заһаһан хуудаһа болон файлыем хинаха жагсаалтада оруула',
 'tog-watchmoves' => 'Минии зөөһэн хуудаһа болон файлыем хинаха жагсаалтада оруула',
 'tog-watchdeletion' => 'Минии усадхаһан хуудаһа болон файлыем хинаха жагсаалтада оруула',
@@ -87,6 +87,9 @@ $messages = array(
 'tog-previewontop' => 'Уридшалан харахые заһабарилха талбарай урда үзүүлэ',
 'tog-previewonfirst' => 'Уридшалан харахые эхилжэ заһаха үедэ үзүүлэ',
 
+'underline-always' => 'хододоол',
+'underline-never' => 'хэзээшье',
+
 # Dates
 'sunday' => 'Няма',
 'monday' => 'Дабаа',
@@ -138,32 +141,64 @@ $messages = array(
 'oct' => '10 һара',
 'nov' => '11 һара',
 'dec' => '12 һара',
+'january-date' => '1 һарын $1',
+'february-date' => '2 һарын $1',
+'march-date' => '3 һарын $1',
+'april-date' => '4 һарын $1',
+'may-date' => '5 һарын $1',
+'june-date' => '6 һарын $1',
+'july-date' => '7 һарын $1',
+'august-date' => '8 һарын $1',
+'september-date' => '9 һарын $1',
+'october-date' => '10 һарын $1',
+'november-date' => '11 һарын $1',
+'december-date' => '12 һарын $1',
 
 # Categories related messages
-'category_header' => 'Категори "$1" үгүүллүүд',
+'category_header' => '"$1" категориин үгүүлэлнүүд',
 
 'cancel' => 'Болихо',
-'mytalk' => 'Минии хэлэлсэл',
-'navigation' => 'Залуур',
+'moredotdotdot' => 'Үшөө...',
+'morenotlisted' => 'Энэ жагсаалта дүүргэһэнгүй.',
+'mypage' => 'Хуудаһан',
+'mytalk' => 'Хэлэлсэл',
+'anontalk' => 'Энэ IP адресаарнь хэлэхэ',
+'navigation' => 'Залуурдалга',
+'and' => '&#32;ба',
+
+# Cologne Blue skin
+'qbfind' => 'Хайха',
+'qbedit' => 'Заһабарилха',
 
 # Vector skin
-'vector-action-addsection' => 'Шэнэ хэсэг',
+'vector-action-addsection' => 'Һэдэб нэмэхэ',
 'vector-action-delete' => 'Усадхаха',
-'vector-view-create' => 'Үүсхэхэ',
-'vector-view-edit' => 'Заһаха',
-'vector-view-history' => 'ТүүÑ\85Ñ\8d',
+'vector-view-create' => 'Үүдхэхэ',
+'vector-view-edit' => 'Заһабарилха',
+'vector-view-history' => 'ТүүÑ\85Ñ\8bе Ñ\85аÑ\80аÑ\85а',
 'vector-view-view' => 'Уншаха',
+'vector-view-viewsource' => 'эшэ үндэһэндэнь хандаха',
 'actions' => 'γйлэ',
+'variants' => 'Хубилбари',
 
-'navigation-heading' => 'Ð\97алÑ\83Ñ\83Ñ\80',
+'navigation-heading' => 'ТамаÑ\80алгÑ\8bн Ð¼ÐµÐ½Ñ\8e',
 'errorpagetitle' => 'Алдуу',
+'tagline' => '{{SITENAME}} сайтһаа мэдээлэл',
 'help' => 'Туһаламжа',
-'search' => 'Бэдэрхэ',
-'searchbutton' => 'Бэдэрхэ',
+'search' => 'Хайха',
+'searchbutton' => 'Хайлта',
+'go' => 'Ябаха',
+'searcharticle' => 'Ябаха',
+'history' => 'Хуудаһанай түүхэ',
 'history_short' => 'Түүхэ',
-'edit' => 'Заһаха',
-'create' => 'Үүсхэхэ',
-'protect' => 'Түһэл',
+'printableversion' => 'Хэблэхэ хубилбари',
+'permalink' => 'Үргэлжын холбооһон',
+'print' => 'Хэблэхэ',
+'view' => 'Харуулха',
+'edit' => 'Заһабарилха',
+'create' => 'Үүдхэхэ',
+'delete' => 'Усадхаха',
+'protect' => 'Хамгаалха',
 'protect_change' => 'Хубилалга',
 'newpage' => 'Шэнэ хуудаһан',
 'talkpage' => 'Тус хуудаһа хэлэлсэхэ',
@@ -173,90 +208,121 @@ $messages = array(
 'postcomment' => 'Шэнэ бүлэг',
 'talk' => 'Хэлэлсэхэ',
 'views' => 'Үзэһэн',
-'toolbox' => 'Багажын хайрсаг',
-'projectpage' => 'Түһэлэй хуудаһан',
+'toolbox' => 'Багажа зэбсэг',
+'projectpage' => 'Түлэблэлгын хуудаһые хараха',
 'otherlanguages' => 'Бусад хэлээр',
-'jumptosearch' => 'бэдэрхэ',
+'jumpto' => 'Шууд ошохо:',
+'jumptonavigation' => 'тамаралга',
+'jumptosearch' => 'хайха',
 'pool-errorunknown' => 'Танигдаагүй алдуу',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => '{{SITENAME}} тухай',
-'aboutpage' => 'Project:Түһэл тухай',
+'aboutpage' => 'Project:Түлэблэлгын тухай',
 'currentevents' => 'Мүнөө боложо байгаа үйлэ ябадал',
 'currentevents-url' => 'Project:Һонин мэдээн',
+'disclaimers' => 'Татагалзалнууд',
+'disclaimerpage' => 'Project:Ниитэ татагалзал',
 'helppage' => 'Help:Агуулга',
 'mainpage' => 'Нюур хуудаһан',
 'mainpage-description' => 'Нюур хуудаһан',
 'portal' => 'Хурал',
 'portal-url' => 'Project:Хурал',
+'privacy' => 'Хубиин мэдээлэлэй талаар баримталал',
+'privacypage' => 'Project:Хубиин мэдээлэлэй талаар баримталал',
 
 'ok' => 'За',
-'editsection' => 'заһаха',
-'editold' => 'заһаха',
-'viewsourcelink' => 'эхэ үүсэбэрииень үзэхэ',
+'retrievedfrom' => '"$1" холбооһоо абагдаһан',
+'editsection' => 'заһабарилха',
+'editold' => 'заһабарилха',
+'viewsourceold' => 'эшэ үндэһэндэнь хандаха',
+'editlink' => 'заһабарилха',
+'viewsourcelink' => 'эшэ үндэһэндэнь хандаха',
 'editsectionhint' => '$1 гэһэн бүлэг заһаха',
 'toc' => 'Агуулга',
+'showtoc' => 'харуулха',
+'hidetoc' => 'нюуха',
+'collapsible-collapse' => 'Нюуха',
+'collapsible-expand' => 'Дэлгээхэ',
+'site-atom-feed' => '$1 Атом фиид',
 'red-link-title' => '$1 (хуудаһан үгы байна)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Хуудаһан',
+'nstab-user' => 'Хэрэглэгшын хуудаһан',
+'nstab-media' => 'Медиагай хуудаһан',
 'nstab-special' => 'Тусхай хуудаһан',
-'nstab-project' => 'Түһэлэй хуудаһан',
+'nstab-project' => 'Түлэблэлгын хуудаһан',
 'nstab-image' => 'Файл',
 'nstab-mediawiki' => 'Бэшэг',
-'nstab-template' => 'Загвар',
-'nstab-category' => 'Ангилал',
+'nstab-template' => 'Загбар',
+'nstab-help' => 'Туһаламжын хуудаһан',
+'nstab-category' => 'Категори',
+
+# General errors
+'error' => 'Алдуу',
+'internalerror' => 'Доторой алдуу',
+'internalerror_info' => 'Доторой алдуу: $1',
 
 # Login and logout pages
-'login' => 'Орохо',
-'nav-login-createaccount' => 'Нэбтэржэ орохо / дансатай болохо',
-'userlogin' => 'Нэбтэржэ орохо / дансатай болохо',
+'welcomeuser' => 'Морилжо хайрлыт, $1!',
+'welcomecreation-msg' => 'Танай данса үүдхэһэн байна.
+Та танай {{SITENAME}} [[Special:Preferences|preferences]]-ые өөршэлхэ боломжотойт.',
+'yourname' => 'Хэрэглэгшын нэрэ:',
+'userlogin-yourname' => 'Хэрэглэгшын нэрэ:',
+'userlogin-yourname-ph' => 'Танай хэрэглэгшын нэрые оруулагты',
+'createacct-another-username-ph' => 'Хэрэглэгшын нэрые оруулагты',
+'yourpassword' => 'Нюуса үгэ:',
+'login' => 'Нэбтэрхэ',
+'nav-login-createaccount' => 'Нэбтэрхэ / данса үүдхэхэ',
+'userlogin' => 'Нэбтэрхэ / данса үүдхэхэ',
 'logout' => 'Гараха',
 'userlogout' => 'Гараха',
-'createaccount' => 'Данса үүсхэхэ',
-'gotaccountlink' => 'Нэбтэржэ орохо',
+'createaccount' => 'Данса үүдхэхэ',
+'gotaccountlink' => 'Нэбтэрхэ',
 'loginlanguagelabel' => 'Хэлэн: $1',
 
 # Edit pages
-'savearticle' => 'Хуудаһа хадагалха',
-'showpreview' => 'Уридшалан үзүүлхэ',
-'showdiff' => 'Хубилалта харуулха',
+'savearticle' => 'Хуудаһые хадагалха',
+'showpreview' => 'Уридшалан хараха',
+'showdiff' => 'Хубилалтые харуул',
 'newarticle' => '(Шэнэ)',
 'template-protected' => '(хамгаалалтатай)',
 'permissionserrorstext-withaction' => 'Та доро тодорхойлһон $1 ушар шалтагаанһаа боложо, $2 эрхэгүйт.',
 
 # Revision deletion
 'rev-delundel' => 'харуулха/нюуха',
-'revdel-restore' => 'Ñ\85аÑ\80агдаÑ\85Ñ\8bенÑ\8c Ð¾Ð½Ð´Ð¾Ð¾ Ð±Ð¾Ð»Ð³Ð¾Ñ\85о',
+'revdel-restore' => 'Ñ\85аÑ\80агдаÑ\81Ñ\8bенÑ\8c Ñ\85Ñ\83билгаÑ\85а',
 
 # Diffs
 'editundo' => 'болюулха',
 
 # Search results
-'searchmenu-new' => "'''Ð\91айгÑ\83Ñ\83лÑ\85а Ò¯Ð³Ò¯Ò¯Ð»Ñ\8dл \"[[:\$1]]\"!'''",
-'searchprofile-articles' => 'Үгүүллүүд',
-'searchprofile-images-tooltip' => 'Файл бэдэрхэ',
-'search-result-size' => '$1 ({{PLURAL:$2|1 word|$2 words}})',
+'searchmenu-new' => "'''ЭнÑ\8d Ð²Ð¸ÐºÐ¸Ð´Ñ\8d \"[[:\$1]]\" Ð³Ñ\8dÒ»Ñ\8dн Ñ\85Ñ\83Ñ\83даһа Ò¯Ò¯Ñ\81Ñ\85Ñ\8dÑ\85Ñ\8d!''' Ð\9cүн Ð¾Ð»Ð´Ð¾Ò»Ð¾Ð½ Ð¾Ð½Ð´Ð¾Ð¾ Ñ\85Ñ\83Ñ\83даһа Ñ\85аÑ\80агÑ\82Ñ\8b.\"",
+'searchprofile-articles' => 'Агуулгын хуудаһанууд',
+'searchprofile-images-tooltip' => 'Файл хайха',
+'search-result-size' => '$1 (ниитэ $2 үгэ�)',
 
 # Preferences page
-'mypreferences' => 'Ð\9cинии Ñ\82ааруулга',
-'prefs-datetime' => 'Ð\9eгноо Ð±Ð¾Ð»Ð¾Ð½ саг',
+'mypreferences' => 'Тааруулга',
+'prefs-datetime' => 'Ð\9eгноо Ð±Ð° саг',
 'youremail' => 'Сахим шуудан:',
 'yourrealname' => 'Бодото нэрэ:',
 'yourlanguage' => 'Хэлэн:',
-'yourgender' => 'ХүйһÑ\8dн:',
-'gender-male' => 'Эрэ',
+'yourgender' => 'ХүйһÑ\8bеÑ\82най Ñ\85Ñ\8dн Ð³Ñ\8dжÑ\8d Ð·Ð°Ð°Ð±Ð°Ð» Ð±Ð¾Ð»Ð¾Ñ\85об?',
+'gender-male' => 'Эрэ хүн',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-edit' => 'Хубилалга энэ үгүүлэл',
+'action-edit' => 'энэ хуудаһа заһабарилха',
 
 # Recent changes
 'recentchanges' => 'Һүүлшын хубилалта',
-'diff' => 'хубилалга',
-'hist' => 'Түүхэ',
+'diff' => 'илгаа',
+'hist' => 'түүхэ',
 'hide' => 'Нюуха',
 
 # Recent changes linked
+'recentchangeslinked' => 'Холбогдохо хубилалта',
 'recentchangeslinked-toolbox' => 'Холбогдохо хубилалта',
 
 # Upload
@@ -271,39 +337,44 @@ $messages = array(
 'filehist-user' => 'Хэрэглэгшэ',
 
 # Random page
-'randompage' => 'Санамсаргүй хуудас',
+'randompage' => 'Һанамсаргүй хуудаһан',
 
 # Statistics
 'statistics' => 'Тоо бүридхэл',
 
 # Miscellaneous special pages
-'newpages' => 'Шэнэ үгүүллүүд',
+'nbytes' => '$1 {{PLURAL:$1|байт|байтууд}}',
+'newpages' => 'Шэнэ хуудаһанууд',
 'ancientpages' => 'Хуушарһан хуудаһан',
-'move' => 'Ð\9dÑ\8dÑ\80Ñ\8dмжэ',
+'move' => 'ШÑ\8dлжүүлÑ\85э',
 
 # Special:Log
-'log' => 'Логууд',
+'log' => 'Логнууд',
 
 # Special:AllPages
-'allpages' => 'СооÑ\85и Ð±үхы хуудаһан',
-'allarticles' => 'Үгүүллүүд',
+'allpages' => 'Ð\91үхы хуудаһан',
+'allarticles' => 'Бүхы хуудаһан',
 
 # Special:Categories
-'categories' => 'Категори',
+'categories' => 'Категоринууд',
 
 # Watchlist
 'mywatchlist' => 'Ажаглаха зүйл',
-'watch' => 'ХаÑ\80ажа Ð±Ð°Ð¹ха',
+'watch' => 'Ð\90жаглаха',
 
 # Undelete
 'undeletelink' => 'хараха/һэргээхэ',
 
+# Namespace form on various pages
+'blanknamespace' => '(Гол)',
+
 # Contributions
 'mycontris' => 'Минии оруулһан зүйл',
 
 'sp-contributions-talk' => 'Хэлэлсэл',
 
 # What links here
+'whatlinkshere' => 'Эндэ холбогдоһон хуудаһанууд',
 'whatlinkshere-page' => 'Хуудаһан:',
 
 # Block/unblock
@@ -323,18 +394,30 @@ $messages = array(
 'thumbnail-more' => 'Томоруулха',
 
 # Tooltip help for the actions
+'tooltip-pt-login' => 'Бидэ та нэбтэрхые хүсэнэбди; гэбэшье, та заататай байна.',
 'tooltip-pt-logout' => 'Гараха',
-'tooltip-ca-talk' => 'Үгүүлэлынь хэлэлсэл',
-'tooltip-ca-addsection' => 'Шэнэ хэсэг',
-'tooltip-search' => 'Бэдэрхэ {{SITENAME}}',
-'tooltip-search-fulltext' => 'Бэдэрхэ үгүүллүүд',
-'tooltip-p-logo' => 'Нюур хуудаһан',
-'tooltip-n-mainpage' => 'Нюур хуудаһа руу шэлжэхэ',
-'tooltip-n-mainpage-description' => 'Нюур хуудаһа руу шэлжэхэ',
-'tooltip-n-recentchanges' => 'Энэ Википеэдийн сайтдахи хубилалтанууд',
-'tooltip-feed-atom' => 'Атом',
+'tooltip-ca-talk' => 'Агуулгын хуудаһанай хэлэлсэл',
+'tooltip-ca-edit' => 'Та энэ хуудаһа заһабарилжа боломжотой. "Уридшалан үзэлхэ" гэһэн тобшые хэрэглээрэй.',
+'tooltip-ca-addsection' => 'Шэнэ хэһэг эхилүүлхэ',
+'tooltip-ca-history' => 'Энэ хуудаһанай үмэнэхи заһабаринууд',
+'tooltip-ca-delete' => 'энэ хуудаһые усадхаха',
+'tooltip-search' => '{{SITENAME}} сайтһаа бэдэрхэ',
+'tooltip-search-fulltext' => 'Хуудаһанһаа бэдэрхэ бэшэбэри',
+'tooltip-p-logo' => 'Нюур хуудаһанда ошохо',
+'tooltip-n-mainpage' => 'Нюур хуудаһанда ошохо',
+'tooltip-n-mainpage-description' => 'Нюур хуудаһанда ошохо',
+'tooltip-n-portal' => 'Түһэл, өөрын оруулалта, туһалбари тухай мэдээлэл',
+'tooltip-n-currentevents' => 'Мүнөө боложо байгаа үйлэ ябадал тухай һониниие дуулаха',
+'tooltip-n-recentchanges' => 'Тус Викиин һүүлшын хубилалтанууд',
+'tooltip-n-randompage' => 'Гэнтын хуудаһые нээхэ',
+'tooltip-n-help' => 'Туһалалсалгые олохо газар',
+'tooltip-t-whatlinkshere' => 'Эндэ холбогдоһон хуудаһануудай жагсаалта',
+'tooltip-t-recentchangeslinked' => 'Энэ хуудаһаһаа холбоогдоһон хуудаһуудай шэнэ хубилалтууд',
+'tooltip-feed-atom' => 'Тус хуудаһанай Атом фиид',
 'tooltip-t-upload' => 'Файл ашаалха',
 'tooltip-t-specialpages' => 'Бүхы тусхай хуудаһанай жагсаалта',
+'tooltip-t-print' => 'Энэ хуудаһанай хэблэхэ хубилбари',
+'tooltip-ca-nstab-main' => 'Үгүүлэлэй хуудаһые үзэхэ',
 
 # Exif tags
 'exif-languagecode' => 'Хэлэн',
index 770b678..35b9880 100644 (file)
@@ -240,7 +240,6 @@ $messages = array(
 'tog-ccmeonemails' => "Envia'm còpia dels missatges que enviï als altres usuaris",
 'tog-diffonly' => 'Amaga el contingut de la pàgina davall de la taula de diferències',
 'tog-showhiddencats' => 'Mostra les categories ocultes',
-'tog-noconvertlink' => 'Inhabilita la conversió dels títols dels enllaços',
 'tog-norollbackdiff' => 'Omet la pàgina de diferències després de realitzar una reversió',
 'tog-useeditwarning' => "Avisa'm quan surti d'una pàgina d'edició amb canvis sense desar",
 'tog-prefershttps' => 'Utilitza sempre una connexió segura en iniciar una sessió',
@@ -368,7 +367,6 @@ $messages = array(
 'vector-action-protect' => 'Protegeix',
 'vector-action-undelete' => 'Restaura',
 'vector-action-unprotect' => 'Desprotegeix',
-'vector-simplesearch-preference' => 'Activar la barra de cerca simplificada (només aparença Vector)',
 'vector-view-create' => 'Crea',
 'vector-view-edit' => 'Modifica',
 'vector-view-history' => "Mostra l'historial",
@@ -618,7 +616,7 @@ No oblideu de canviar les vostres [[Special:Preferences|preferències de {{SITEN
 'yourname' => "Nom d'usuari",
 'userlogin-yourname' => 'Usuari',
 'userlogin-yourname-ph' => "Introduïu el vostre nom d'usuari",
-'createacct-another-username-ph' => "Introdueix el nom d'usuari",
+'createacct-another-username-ph' => "Introduïu el nom d'usuari",
 'yourpassword' => 'Contrasenya',
 'userlogin-yourpassword' => 'Contrasenya',
 'userlogin-yourpassword-ph' => 'Introduïu la vostra contrasenya',
@@ -649,17 +647,15 @@ No oblideu de canviar les vostres [[Special:Preferences|preferències de {{SITEN
 'gotaccountlink' => 'Inicia una sessió',
 'userlogin-resetlink' => "Heu oblidat les vostres dades d'accés?",
 'userlogin-resetpassword-link' => 'Has oblidat la teva contrasenya?',
-'helplogin-url' => 'Help:Registrar-se',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ajuda]]',
 'userlogin-loggedin' => 'Heu iniciat una sessió com {{GENDER:$1|$1}}.
 Feu servir el formulari de sota per iniciar la sessió com un altre usuari.',
 'userlogin-createanother' => 'Crea un altre compte',
 'createacct-join' => 'Introduïu les vostres dades.',
-'createacct-another-join' => 'Introdueix la informació del nou compte a continuació:',
+'createacct-another-join' => 'Introduïu la informació del nou compte a continuació:',
 'createacct-emailrequired' => 'Adreça de correu electrònic',
 'createacct-emailoptional' => 'Adreça de correu electrònic (opcional)',
 'createacct-email-ph' => 'Introduïu la vostra adreça de correu electrònic',
-'createacct-another-email-ph' => 'Introdueix una adreça de correu electrònic',
+'createacct-another-email-ph' => 'Introduïu una adreça de correu electrònic',
 'createaccountmail' => "Utilitza una contrasenya aleatòria temporal i envia-la a l'adreça de correu indicada",
 'createacct-realname' => 'Nom real (opcional)',
 'createaccountreason' => 'Motiu:',
@@ -738,6 +734,9 @@ Espereu $1 abans de tornar-ho a provar.",
 'suspicious-userlogout' => "S'ha denegat la vostra petició per tancar la sessió ja què sembla que va ser enviada per un navegador defectuós o un proxy cau.",
 'createacct-another-realname-tip' => "El nom real és opcional.
 Si decidiu proporcionar-lo, s'utilitzarà per a reconèixer a l'usuari el seu treball.",
+'pt-login' => 'Inicia la sessió',
+'pt-createaccount' => 'Crea un compte',
+'pt-userlogout' => 'Finalitza la sessió',
 
 # Email sending
 'php-mail-error-unknown' => 'Error desconegut en la funció mail() de PHP',
@@ -746,7 +745,7 @@ Si decidiu proporcionar-lo, s'utilitzarà per a reconèixer a l'usuari el seu tr
 
 # Change password dialog
 'changepassword' => 'Canvia la contrasenya',
-'resetpass_announce' => 'Heu iniciat la sessió amb un codi temporal enviat per correu electrònic. Per a finalitzar-la, heu de definir una nova contrasenya ací:',
+'resetpass_announce' => "Per tal de completar l'inici de sessió heu de definir una contrasenya nova.",
 'resetpass_text' => '<!-- Afegiu-hi un text -->',
 'resetpass_header' => 'Canvia la contrasenya del compte',
 'oldpassword' => 'Contrasenya antiga',
@@ -762,8 +761,13 @@ Espereu $1 abans de tornar-ho a provar.",
 'resetpass-submit-cancel' => 'Canceŀla',
 'resetpass-wrong-oldpass' => 'Contrasenya actual o temporal no vàlida.
 Deveu haver canviat la vostra contrasenya o demanat una nova contrasenya temporal.',
+'resetpass-recycled' => 'Restabliu la contrasenya amb un text diferent que el de la contrasenya actual.',
+'resetpass-temp-emailed' => "Heu iniciat una sessió amb un codi temporal enviat per correu.
+Per completar l'inici de sessió heu de definir una contrasenya nova a continuació:",
 'resetpass-temp-password' => 'Contrasenya temporal:',
 'resetpass-abort-generic' => 'Una extensió ha interromput el canvi de contrasenya.',
+'resetpass-expired' => 'La contrasenya ha vençut. Definiu una contrasenya nova per iniciar la sessió.',
+'resetpass-expired-soft' => 'La contrasenya ha vençut i cal restablir-la. Trieu una contrasenya nova ara, o feu clic a «{{int:resetpass-submit-cancel}}» per a restablir-la més endavant.',
 
 # Special:PasswordReset
 'passwordreset' => 'Restablir contrasenya',
@@ -1025,7 +1029,7 @@ Ja existeix.",
 'invalid-content-data' => 'Dades de contingut no vàlides',
 'content-not-allowed-here' => 'No és permés el contingut "$1" a la pàgina [[$2]]',
 'editwarning-warning' => "Si sortiu d'aquesta pàgina perdreu tots els canvis que hàgiu fet.
-Si teniu un compte d'usuari, podeu eliminar aquest avís a la secció «Caixa d'edició» de les vostres preferències.",
+Si teniu un compte d'usuari, podeu eliminar aquest avís a la secció «{{int:prefs-editing}}» de les vostres preferències.",
 'editpage-notsupportedcontentformat-title' => "No s'admet el format del contingut",
 'editpage-notsupportedcontentformat-text' => "No s'admet el format del contingut $1 pel model de contingut $2.",
 
@@ -1061,6 +1065,7 @@ Se n'han omès els arguments.",
 'undo-success' => "Pot desfer-se la modificació. Si us plau, reviseu la comparació de sota per a assegurar-vos que és el que voleu fer; llavors deseu els canvis per a finalitzar la desfeta de l'edició.",
 'undo-failure' => 'No pot desfer-se la modificació perquè hi ha edicions entre mig que hi entren en conflicte.',
 'undo-norev' => "No s'ha pogut desfer l'edició perquè no existeix o s'ha suprimit.",
+'undo-nochange' => "Sembla que ja s'ha desfet la modificació.",
 'undo-summary' => 'Es desfà la revisió $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussió]])',
 'undo-summary-username-hidden' => "Desfés la revisió $1 d'un usuari ocult",
 
@@ -1146,8 +1151,6 @@ funció, la revisió especificada no existeix, o bé esteu provant d'amagar l'ac
 'revdelete-show-file-submit' => 'Sí',
 'revdelete-selected' => "'''{{PLURAL:$2|Revisió seleccionada|Revisions seleccionades}} de [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Esdeveniment del registre seleccionat|Esdeveniments del registre seleccionats}}:'''",
-'revdelete-text' => "'''Les revisions esborrades es mostraran encara als historials de les pàgines i als registres, si bé part del seu contingut serà inaccessible al públic.'''
-Els altres administradors de {{SITENAME}} encara podran accedir al contingut amagat i restituir-lo de nou mitjançant aquesta mateixa interfície, si no hi ha cap altra restricció addicional.",
 'revdelete-confirm' => "Si us plau, confirmeu que és això el que desitgeu fer, que enteneu les conseqüències, i que esteu fent-ho d'acord amb [[{{MediaWiki:Policy-url}}|les polítiques acordades]].",
 'revdelete-suppress-text' => "Les supressions '''només''' han de ser portades a terme en els següents casos:
 * Informació potencialment difamatòria
@@ -1157,7 +1160,7 @@ Els altres administradors de {{SITENAME}} encara podran accedir al contingut ama
 'revdelete-hide-text' => 'Text de la revisió',
 'revdelete-hide-image' => 'Amaga el contingut del fitxer',
 'revdelete-hide-name' => "Acció d'amagar i objectiu",
-'revdelete-hide-comment' => 'Modifica el resum',
+'revdelete-hide-comment' => 'Resum de modificacions',
 'revdelete-hide-user' => "Nom d'usuari / adreça IP de l'editor",
 'revdelete-hide-restricted' => 'Suprimir les dades als administradors així com a la resta.',
 'revdelete-radio-same' => '(no modificar)',
@@ -1241,6 +1244,8 @@ Assegureu-vos que aquest canvi mantindrà la continuïtat històrica de la pàgi
 'showhideselectedversions' => 'Mostra/oculta les versions seleccionades',
 'editundo' => 'desfés',
 'diff-empty' => '(Cap diferència)',
+'diff-multi-sameuser' => '({{PLURAL:$1|Hi ha una revisió intermèdia|Hi ha $1 revisions intermèdies}} del mateix usuari que no es mostren)',
+'diff-multi-otherusers' => '({{PLURAL:$1|Una revisió intermèdia|$1 revisions intermèdies}} per {{PLURAL:$2|un altre usuari que no es mostra|$2 usuaris que no es mostren}})',
 'diff-multi-manyusers' => "({{PLURAL:$1|Hi ha una revisió intermèdia|Hi ha $1 revisions intermèdies}} sense mostrar fetes per més {{PLURAL:$2|d'un usuari|de $2 usuaris}})",
 'difference-missing-revision' => "{{PLURAL:$2|Una revisió|$2 revisions}} d'aquesta diferència ($1) no {{PLURAL:$2|s'ha|s'han}} trobat.
 
@@ -1261,7 +1266,7 @@ Es pot trobar més informació en el [{{fullurl:{{#Special:Log}}/delete|page={{F
 'shown-title' => 'Mostra $1 {{PLURAL:$1|resultat|resultats}} per pàgina',
 'viewprevnext' => 'Vés a ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''Hi ha una pàgina anomenada «[[:$1]]» en aquest wiki'''",
-'searchmenu-new' => "'''Creeu la pàgina «[[:$1]]» en aquest wiki!'''",
+'searchmenu-new' => '<strong>Crea la pàgina «[[:$1]]» en aquest wiki!</strong> {{PLURAL:$2|0=|Vegeu també la pàgina trobada amb la cerca.|Vegeu també els resultats de cerca trobats.}}',
 'searchprofile-articles' => 'Pàgines de contingut',
 'searchprofile-project' => "Pàgines d'ajuda i de projecte",
 'searchprofile-images' => 'Multimèdia',
@@ -1287,6 +1292,7 @@ Es pot trobar més informació en el [{{fullurl:{{#Special:Log}}/delete|page={{F
 'searchrelated' => 'relacionat',
 'searchall' => 'tots',
 'showingresults' => 'Tot seguit es {{PLURAL:$1|mostra el resultat|mostren els <b>$1</b> resultats començant pel número <b>$2</b>}}.',
+'showingresultsinrange' => 'Es mostren a continuació fins a {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resultats}} de #<strong>$2</strong> a #<strong>$3</strong>.',
 'showingresultsnum' => 'Tot seguit es {{PLURAL:$3|llista el resultat|llisten els <b>$3</b> resultats començant pel número <b>$2</b>}}.',
 'showingresultsheader' => "{{PLURAL:$5|Resultat '''$1''' de '''$3'''|Resultats '''$1 - $2''' de '''$3'''}} per '''$4'''",
 'search-nonefound' => 'La cerca no ha donat cap resultat.',
@@ -1602,14 +1608,26 @@ Ha de tenir com a molt {{PLURAL:$1|un caràcter|$1 caràcters}}.',
 'recentchanges-legend-heading' => "'''Llegenda:'''",
 'recentchanges-legend-newpage' => '(vegeu també la [[Special:NewPages|llista de pàgines noves]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => 'A sota hi ha els canvis des de <b>$2</b> (es mostren fins <b>$1</b>).',
+'rcnotefrom' => 'A sota hi ha els canvis des de <strong>$2</strong> (es mostren fins <strong>$1</strong>).',
 'rclistfrom' => 'Mostra els canvis nous des de $1',
 'rcshowhideminor' => '$1 edicions menors',
+'rcshowhideminor-show' => 'Mostra',
+'rcshowhideminor-hide' => 'Amaga',
 'rcshowhidebots' => '$1 bots',
+'rcshowhidebots-show' => 'Mostra',
+'rcshowhidebots-hide' => 'Amaga',
 'rcshowhideliu' => '$1 usuaris registrats',
+'rcshowhideliu-show' => 'Mostra',
+'rcshowhideliu-hide' => 'Amaga',
 'rcshowhideanons' => '$1 usuaris anònims',
+'rcshowhideanons-show' => 'Mostra',
+'rcshowhideanons-hide' => 'Amaga',
 'rcshowhidepatr' => '$1 edicions supervisades',
+'rcshowhidepatr-show' => 'Mostra',
+'rcshowhidepatr-hide' => 'Amaga',
 'rcshowhidemine' => '$1 edicions pròpies',
+'rcshowhidemine-show' => 'Mostra',
+'rcshowhidemine-hide' => 'Amaga',
 'rclinks' => 'Mostra els darrers $1 canvis en els darrers $2 dies<br />$3',
 'diff' => 'dif',
 'hist' => 'hist',
@@ -1732,6 +1750,8 @@ Si us plau, si encara desitgeu carregar el vostre fitxer, torneu enrera i carreg
 'uploaddisabledtext' => "S'ha inhabilitat la càrrega de fitxers.",
 'php-uploaddisabledtext' => 'La càrrega de fitxer està desactivada al PHP. Comproveu les opcions del fitxer file_uploads.',
 'uploadscripted' => 'Aquest fitxer conté codi HTML o de seqüències que pot ser interpretat equivocadament per un navegador.',
+'uploadscriptednamespace' => 'Aquest fitxer SVG conté un espai de noms "$1" no autoritzat',
+'uploadinvalidxml' => "No s'ha pogut analitzar l'XML del fitxer carregat.",
 'uploadvirus' => 'El fitxer conté un virus! Detalls: $1',
 'uploadjava' => 'El fitxer és un arxiu ZIP que conté un fitxer .class de Java. No està permesa la càrrega de fitxers Java, perquè poden passar per alt les restriccions de seguretat.',
 'upload-source' => 'Fitxer font',
@@ -2080,10 +2100,20 @@ Les entrades <del>ratllades</del> s\'han resolt.',
 'deadendpagestext' => "Aquestes pàgines no tenen enllaços a d'altres pàgines del projecte {{SITENAME}}.",
 'protectedpages' => 'Pàgines protegides',
 'protectedpages-indef' => 'Només proteccions indefinides',
+'protectedpages-summary' => "Aquesta pàgina llista les pàgines existents que estan protegides actualment. Per consultar la llista de títols protegits per tal que no puguin crear-se'n pàgines, vegeu [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
 'protectedpages-cascade' => 'Només proteccions en cascada',
 'protectedpages-noredirect' => 'Amaga redireccions',
 'protectedpagesempty' => 'No hi ha cap pàgina protegida per ara',
+'protectedpages-timestamp' => 'Marca horària',
+'protectedpages-page' => 'Pàgina',
+'protectedpages-expiry' => 'Venç',
+'protectedpages-performer' => "Protecció de l'usuari",
+'protectedpages-params' => 'Paràmetres de protecció',
+'protectedpages-reason' => 'Motiu',
+'protectedpages-unknown-timestamp' => 'Desconegut',
+'protectedpages-unknown-performer' => 'Usuari desconegut',
 'protectedtitles' => 'Títols protegits',
+'protectedtitles-summary' => "Aquesta pàgina llista títols protegits perquè no puguin crear-se'n pàgines. Per consultar una llista actual de pàgines protegides, vegeu [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
 'protectedtitlesempty' => 'No hi ha cap títol protegit actualment amb aquests paràmetres.',
 'listusers' => "Llista d'usuaris",
 'listusers-editsonly' => 'Mostra només usuaris amb edicions',
@@ -2269,6 +2299,7 @@ S\'hi mostraran els canvis futurs que tinguin lloc en aquesta pàgina i la corre
 'watchmethod-list' => "s'està comprovant si hi ha edicions recents en les pàgines vigilades",
 'watchlistcontains' => 'La vostra llista de seguiment conté {{PLURAL:$1|una única pàgina|$1 pàgines}}.',
 'iteminvalidname' => "Hi ha un problema amb l'element '$1': el nom no és vàlid...",
+'wlnote2' => "A continuació es presenten els canvis durant {{PLURAL:$1|l'última hora|les últimes <strong>$1</strong> hores}}, a partir de $2, $3.",
 'wlshowlast' => '<small>- Mostra les darreres $1 hores, els darrers $2 dies o $3</small>',
 'watchlist-options' => 'Opcions de la llista de seguiment',
 
@@ -2356,7 +2387,7 @@ Vegeu $2 per a un registre dels esborrats més recents.",
 'delete-edit-reasonlist' => "Edita els motius d'eliminació",
 'delete-toobig' => "Aquesta pàgina té un historial d'edicions molt gran, amb més de $1 {{PLURAL:$1|canvi|canvis}}. L'eliminació d'aquestes pàgines està restringida per a prevenir que hi pugui haver un desajustament seriós de la base de dades de tot el projecte {{SITENAME}} per accident.",
 'delete-warning-toobig' => "Aquesta pàgina té un historial d'edicions molt gran, amb més de $1 {{PLURAL:$1|canvi|canvis}}. Eliminar-la podria suposar un seriós desajustament de la base de dades de tot el projecte {{SITENAME}}; aneu en compte abans dur a terme l'acció.",
-'deleting-backlinks-warning' => "'''Avís:''' Altres pàgines enllacen o transclouen de la pàgina que esteu a punt de suprimir.",
+'deleting-backlinks-warning' => "'''Avís:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Altres pàgines]] enllacen o transclouen de la pàgina que esteu a punt de suprimir.",
 
 # Rollback
 'rollback' => 'Reverteix edicions',
@@ -2531,8 +2562,10 @@ Per més detalls, la última entrada del registre es mostra a continuació:",
 'sp-contributions-blocked-notice-anon' => 'En aquests moments, aquesta adreça IP es troba blocada.
 Per més detalls, la última entrada del registre es mostra a continuació:',
 'sp-contributions-search' => 'Cerca les contribucions',
+'sp-contributions-suppresslog' => "contribucions suprimides de l'usuari",
 'sp-contributions-username' => "Adreça IP o nom d'usuari:",
 'sp-contributions-toponly' => 'Mostra només revisions superiors',
+'sp-contributions-newonly' => 'Mostra només modificacions que són creacions de pàgina',
 'sp-contributions-submit' => 'Cerca',
 
 # What links here
@@ -2639,7 +2672,7 @@ l'accés a l'escriptura a una adreça IP o un usuari prèviament bloquejat.",
 'contribslink' => 'contribucions',
 'emaillink' => 'correu electrònic',
 'autoblocker' => "Se us ha blocat automàticament perquè la vostra adreça IP ha estat recentment utilitzada per l'usuari ''[[User:$1|$1]]''.
-El motiu del bloqueig de $1 és: ''$2''.",
+El motiu del bloqueig de $1 és: «$2».",
 'blocklogpage' => 'Registre de bloquejos',
 'blocklog-showlog' => "S'ha blocat aquest usuari prèviament.
 Per més detalls, a sota es mostra el registre de bloquejos:",
@@ -2826,6 +2859,7 @@ En el darrer cas, podeu fer servir un enllaç com ara [[{{#Special:Export}}/{{Me
 'allmessages-prefix' => 'Filtra per prefix:',
 'allmessages-language' => 'Idioma:',
 'allmessages-filter-submit' => 'Vés-hi',
+'allmessages-filter-translate' => 'Tradueix',
 
 # Thumbnails
 'thumbnail-more' => 'Amplia',
@@ -2842,6 +2876,8 @@ $2",
 'thumbnail_image-type' => "Tipus d'imatge no contemplat",
 'thumbnail_gd-library' => 'Configuració de la biblioteca GD incompleta: falta la funció $1',
 'thumbnail_image-missing' => 'Sembla que falta el fitxer: $1',
+'thumbnail_image-failure-limit' => 'Hi ha hagut massa intents fallits recents ($1 o més) per dibuixar aquesta miniatura.
+Torneu-ho a provar més endavant.',
 
 # Special:Import
 'import' => 'Importació de pàgines',
@@ -2888,6 +2924,7 @@ Deseu-lo al vostre ordinador i carregueu-ne una còpia ací.",
 'import-error-special' => "No s'importa la pàgina «$1» perquè el seu nom pertany a l'espai de noms especial que no permet pàgines.",
 'import-error-invalid' => "No s'importa la pàgina «$1» perquè el seu nom no és vàlid.",
 'import-error-unserialize' => 'La revisió $2 de la pàgina "$1" no pot ser desserialitzada. La revisió indica que utilitza el model de contingut $3 serialitzat com a $4.',
+'import-error-bad-location' => 'La revisió $2 que utilitza el model de contingut $3 no es pot emmagatzemar a «$1» en aquest wiki, perquè el model no és permès en la pàgina.',
 'import-options-wrong' => '{{PLURAL:$2|Opció equivocada|Opcions equivocades}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'La pàgina arrel donada és un títol no vàlid.',
 'import-rootpage-nosubpage' => 'L\'espai de noms "$1" de la pàgina arrel no permet subpàgines.',
@@ -4052,6 +4089,4 @@ També expandeix les funcions sintàctiques, com ara <code><nowiki>{{</nowiki>#l
 'expand_templates_generate_rawhtml' => "Mostra l'HTML sense filtrar",
 'expand_templates_preview' => 'Previsualitza',
 
-# Unknown messages
-'uploadinvalidxml' => "No s'ha pogut analitzar l'XML del fitxer carregat.",
 );
index a7e553a..b9ed1ea 100644 (file)
@@ -145,7 +145,6 @@ $dateFormats = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => '下劃綫鏈接',
-'tog-justify' => '調蜀調幾段',
 'tog-hideminor' => '藏起最近改變其過要修改',
 'tog-hidepatrolled' => '藏起最近改變其巡邏修改',
 'tog-numberheadings' => '自動編號其標題',
@@ -299,7 +298,6 @@ $messages = array(
 'vector-action-protect' => '保護',
 'vector-action-undelete' => '取消刪除',
 'vector-action-unprotect' => '改變保護',
-'vector-simplesearch-preference' => '允許簡化其搜索欄(儷有矢量皮膚才有)',
 'vector-view-create' => '創建',
 'vector-view-edit' => '修改',
 'vector-view-history' => '看歷史',
@@ -774,7 +772,6 @@ Sō̤ kī só-gé̤ṳ-kó gì guāng-lī-uòng cūng-kuāng gāi-sék: $1',
 'compareselectedversions' => '比並揀選版本',
 'showhideselectedversions' => '顯/藏揀選其調整',
 'editundo' => '取消',
-'diff-multi' => '{{PLURAL:$1}}(臺中有$2寫其$1萆版本無顯示)',
 
 # Search results
 'searchresults' => '討結果',
@@ -811,7 +808,6 @@ Sō̤ kī só-gé̤ṳ-kó gì guāng-lī-uòng cūng-kuāng gāi-sék: $1',
 'prefs-misc' => '其它',
 'saveprefs' => '保存',
 'searchresultshead' => '尋討',
-'resultsperpage' => '每頁訪問量:',
 'recentchangescount' => '這般改變其條目:',
 'savedprefs' => '汝其設定已經乞保存了。',
 'timezonelegend' => '時區:',
index b2cc8f6..b0b83db 100644 (file)
@@ -327,9 +327,9 @@ $messages = array(
 'tog-usenewrc' => 'Лелабе дика могӀам керла чу хийцамашна (оьшу JavaScript)',
 'tog-numberheadings' => 'Ша шех хlитто терахь корташна',
 'tog-showtoolbar' => 'Гайта лакхара гӀирсан дакъа нисйеш аттон оц тадар чохь (JavaScript)',
-'tog-editondblclick' => 'Нисйе агӀонаш шозза тӀетаӀийча (JavaScript)',
+'tog-editondblclick' => 'Нисъе агӀонаш шозза тӀетаӀийча (JavaScript)',
 'tog-editsectiononrightclick' => 'Нисде дакъа шозза бакъехьар дахка тӀетаӀийча оцу кортан (JavaScript)',
-'tog-rememberpassword' => 'Даглаца сан дӀаяздар хӀокху браузеран тӀяхь (цхьан $1 {{PLURAL:$1|де|динахь|ден}})',
+'tog-rememberpassword' => 'Даглаца сан дӀаяздар хӀокху браузеран тӀехь (цхьан $1 {{PLURAL:$1|дийнахь}})',
 'tog-watchcreations' => 'ТӀетоха ас кхоьллина агӀонаш тергаме могӀам чу',
 'tog-watchdefault' => 'ТӀетоха ас нисйина агӀонаш тергаме могӀам чу',
 'tog-watchmoves' => 'ТӀетоха ас цӀераш хийцина агӀонаш тергаме могӀам чу',
@@ -355,7 +355,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Дlадахьийта суна исанна кехат, аса дохьуьйтуш долу кхечу декъашхошна.',
 'tog-diffonly' => 'Ма гайта агlон чулацам шина башхонца цхьатерра йолуш',
 'tog-showhiddencats' => 'Гайта къайлаха йолу категореш',
-'tog-noconvertlink' => 'Хааман хьажораг кхуллу гӀирс дӀабайа',
 'tog-norollbackdiff' => 'Юха яккхиначул тӀаьхьа ма гайта версешан башхо',
 'tog-useeditwarning' => 'Хаамбе бина хийцамаш дӀаязцабеш аса болх дӀатосучу хенахь',
 'tog-prefershttps' => 'Даима лела йе лардина системин чудалар',
@@ -443,12 +442,12 @@ $messages = array(
 'category-empty' => "''ХӀара категори хӀинца йаьсса ю.''",
 'hidden-categories' => '{{PLURAL:$1|1=Къайлаха категори|Къайлаха йолу категореш}}',
 'hidden-category-category' => 'Къайлаха йолу категореш',
-'category-subcat-count' => '{{PLURAL:$2|1=ХӀокху категори чохь ю хӀокхуьна бухар категори.|ХӀокху категори чохь ю $1 {{PLURAL:$1|1=бухара категори|бухара категореш}} $2 массо нах.}}',
+'category-subcat-count' => '{{PLURAL:$2|ХӀокху категори чохь ю хӀокхуьнан бухара категори.|ХӀокху категори чохь ю $1 {{PLURAL:$1|бухара категори|бухара категореш}} $2 массо нах.}}',
 'category-subcat-count-limited' => 'Хlокх категори чохь {{PLURAL:$1|$1 бухар категори|$1 бухар категореш|$1 бухар категореша}}.',
-'category-article-count' => '{{PLURAL:$2|1=ХӀокху категори чохь яц цхьа агӀо бе.|{{PLURAL:$1|1=Гойташ $1 агӀо|Гойту $1 агӀонаш}} хӀокху категорешца кху $2.}}',
-'category-article-count-limited' => 'ХӀокх категори чохь {{PLURAL:$1|1=$1 агӀо|$1 агӀонаш}}.',
-'category-file-count' => '{{PLURAL:$2|ХӀокху категори чохь цхьа файл бе яц.|{{PLURAL:$1|Гойта $1 файл|Гойту $1 файлаш|Гойту $1 файл}} хӀокху категорешца кху $2.}}',
-'category-file-count-limited' => 'ХӀокх категори чохь {{PLURAL:$1|$1 файл|$1 файлаш|$1 файл}}.',
+'category-article-count' => '{{PLURAL:$2|ХӀокху категори чохь яц цхьа агӀо бе.|{{PLURAL:$1|Гойту $1 агӀо|Гойту $1 агӀонаш}} хӀокху категорешца кху $2.}}',
+'category-article-count-limited' => 'ХӀокху категори чохь {{PLURAL:$1|$1 агӀо|$1 агӀонаш}} цхьа агӀо бен яц.',
+'category-file-count' => '{{PLURAL:$2|ХӀокху категори чохь цхьа файл бе яц.|{{PLURAL:$1|Гойту $1 файл|Гойту $1 файлаш}} хӀокху категорешца кху $2.}}',
+'category-file-count-limited' => 'ХӀокху категори чохь {{PLURAL:$1|$1 файл|$1 файлаш|1=цхьаъ бен файл яц}}.',
 'listingcontinuesabbrev' => '(кхин дlа)',
 'index-category' => 'Меттигтерахьйо агlонаш',
 'noindex-category' => 'ДӀахьушйоцу агӀонаш',
@@ -470,7 +469,7 @@ $messages = array(
 # Cologne Blue skin
 'qbfind' => 'Лаха',
 'qbbrowse' => 'Хьажар',
-'qbedit' => 'Нисйé',
+'qbedit' => 'Нисъе',
 'qbpageoptions' => 'Агlо нисйар',
 'qbmyoptions' => 'Хьан нисдарш',
 'faq' => 'СиХХ',
@@ -483,9 +482,8 @@ $messages = array(
 'vector-action-protect' => 'Гlаролла дé',
 'vector-action-undelete' => 'Меттахlоттадé',
 'vector-action-unprotect' => 'ГӀароллех къаста',
-'vector-simplesearch-preference' => 'Атта лахаран хьехар лата де («Векторан» кечярна бен)',
 'vector-view-create' => 'Кхоллар',
-'vector-view-edit' => 'Нисйé',
+'vector-view-edit' => 'Нисъе',
 'vector-view-history' => 'АгӀона хийцамаш',
 'vector-view-view' => 'Éшар',
 'vector-view-viewsource' => 'Билглонашка хьажа',
@@ -509,9 +507,9 @@ $messages = array(
 'permalink' => 'Даиман йолу хьажораг',
 'print' => 'Зорба тоха',
 'view' => 'Хьажа',
-'edit' => 'Нисйé',
+'edit' => 'Нисъе',
 'create' => 'Кхолла',
-'editthispage' => 'Нисйé хlара агlо',
+'editthispage' => 'Нисъе хӀъара агӀо',
 'create-this-page' => 'Кхолла хlара агlо',
 'delete' => 'ДӀаяккха',
 'deletethispage' => 'ДӀаяккха хӀара агӀо',
@@ -575,8 +573,8 @@ $1',
 'policy-url' => 'Project:Бакъо',
 'portal' => 'Юкъараллин ков',
 'portal-url' => 'Project:Юкъараллин ков',
-'privacy' => 'Ð\9fолиÑ\82ика ÐºÑ\8aайлаÑ\85а',
-'privacypage' => 'Project:Ð\9fолиÑ\82ика ÐºÑ\8aайлаÑ\85а',
+'privacy' => 'Ð\9aÑ\8aайлаÑ\85а Ð¿Ð¾Ð»Ð¸Ñ\82ика',
+'privacypage' => 'Project:Ð\9aÑ\8aайлаÑ\85а Ð¿Ð¾Ð»Ð¸Ñ\82ика',
 
 'badaccess' => 'ТӀекхачарехь гӀалат',
 'badaccess-group0' => 'Шуьга кхочуш далур дац дехарца деш дерг',
@@ -595,17 +593,17 @@ $1',
 'newmessageslinkplural' => '{{PLURAL:$1|керла хаам|999=керла хаамаш}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|тӀаьхьара бина хийцам|999=тӀаьхьара бина хийцамаш}}',
 'youhavenewmessagesmulti' => 'Хьуна кхаьчна керла хаам оцу $1',
-'editsection' => 'нисйé',
-'editold' => 'нисйé',
+'editsection' => 'нисъе',
+'editold' => 'нисъе',
 'viewsourceold' => 'хьажа йолуш йолучу коде',
-'editlink' => 'нисйé',
+'editlink' => 'нисъе',
 'viewsourcelink' => 'хьажа йолуш йолучу коде',
 'editsectionhint' => 'Нисде дакъа: $1',
 'toc' => 'Чулацам',
 'showtoc' => 'гайта',
 'hidetoc' => 'къайлаяккха',
 'collapsible-collapse' => 'къайлаяккха',
-'collapsible-expand' => 'Ñ\85Ñ\8cайаста',
+'collapsible-expand' => 'Ñ\81Ñ\85Ñ\8cаÑ\8fста',
 'thisisdeleted' => 'Хьажа я меттахӀоттайé $1?',
 'viewdeleted' => 'Хьожий $1?',
 'restorelink' => '{{PLURAL:$1|1=$1 дӀадаьккхина нийсдар|$1 дӀадяхна нийсдарш}}',
@@ -626,7 +624,7 @@ $1',
 'nstab-main' => 'Яззам',
 'nstab-user' => 'Декъашхо',
 'nstab-media' => 'Медиа агӀо',
-'nstab-special' => 'Белха агlо',
+'nstab-special' => 'Белха агӀо',
 'nstab-project' => 'Проектах лаьцна',
 'nstab-image' => 'Файл',
 'nstab-mediawiki' => 'Хаам',
@@ -696,13 +694,15 @@ URL язъеш гӀалат даьлла хила мега.
 'viewsource-title' => 'Агӏона $1 дуьххьарлера йозане хьажар',
 'actionthrottled' => 'Сиххалин доза тохар',
 'actionthrottledtext' => 'Спам цахилийта хӀара дешдерг кӀезиг хенахь дукху ца дайта дихкина ду. Дехар до массийта минот яьлча гӀорта.',
-'protectedpagetext' => 'ХӀара агӀо дӀакъойлина йу рé цадаккхийта.',
+'protectedpagetext' => 'ХӀара агӀо дӀакъоьвлина ю тадарш ца дайта.',
 'viewsourcetext' => 'Хьоьга далундерг хьажар а дезахь хlокху агlон чура йоза хьаэцар:',
 'viewyourtext' => "Хьан йиш ю '''хьой нисдинчу''' дӀадолалун йозе хьажа а цуна копи ян а:",
 'protectedinterface' => 'ХӀара схьгайтарна гӀирса хаамаш латтош йолу агӀо ю. Куьйгалхошна бен иза хийца цало.',
 'editinginterface' => "'''Тергам бе:''' Ахьа таеш ю интерфейсан йоза долу агӀо програмин латторан.
 Цуна бина хийцам хьокху википедин кхечу декъашхошна гур бу.
 Хьокху хаамийн гочдар тӀетоха я хийца лела йе сайт MediaWiki [//translatewiki.net/ translatewiki.net].",
+'cascadeprotected' => 'АгӀо хийцам ца байта гӀоралла дина ю {{PLURAL:$1|хӀокху агӀона|хӀокху агӀонийн}} юкъа йогӀуш хилар бахьнехь:
+$2',
 'namespaceprotected' => 'ХӀан бакъо яц анна цӀераш чохь тадарш да «$1».',
 'customcssprotected' => 'Хьан бакъо яц хӀара CSS-агӀо тая, иза кхечу декъашхочун гӀерс болу дера.',
 'customjsprotected' => 'Хьан бакъо яц хӀара JavaScript-агӀо тая, иза кхечу декъашхочун гӀерс болу дера.',
@@ -711,9 +711,19 @@ URL язъеш гӀалат даьлла хила мега.
 'myprivateinfoprotected' => 'Хьайн долара хаамна хийцам ба хьа йиш яц',
 'mypreferencesprotected' => 'Хьай гӀирс нисбан хьа бакъо яц.',
 'ns-specialprotected' => 'ХӀокху «{{ns:special}}» цӀерийн меттигашан агӀонаш таян йиш яц.',
+'titleprotected' => "[[Декъашхочо:$1|$1]] дихкина ишта корта болуш агӀо кхоллар.
+Гайтина бахьна: ''$2''.",
+'filereadonlyerror' => "файл хийца цатарло «$1», «$2» Ӏалаш ечехь ешаран хьолехь хилар бахьнехь.
+
+ХӀара хьал хӀоттиначу куьйгалхочо битина хаам: «''$3''».",
+'invalidtitle-knownnamespace' => 'Магийна боцу коьртамогӀа цӀерийн меттигца «$2» йоза  «$3»',
+'invalidtitle-unknownnamespace' => 'Магийна боцу коьртамогӀа ца йовза меттигца $1 «$2» йозанца',
 'exception-nologin' => 'ХӀинца а ахьа системин чохь болх беш бац',
+'exception-nologin-text' => 'Иза дан [[Special:Userlogin|системин чугӀо]].',
+'exception-nologin-text-manual' => 'АгӀо тӀекхача луш хилийта оьшу $1.',
 
 # Virus scanner
+'virus-badscanner' => "Нисяран гӀалат. Ца йовза вирусийн сканер: ''$1''",
 'virus-scanfailed' => 'сканиран гӀалат (код $1)',
 'virus-unknownscanner' => 'йозуш йоцу антивирус:',
 
@@ -735,7 +745,7 @@ URL язъеш гӀалат даьлла хила мега.
 'yourpasswordagain' => 'Юха язъе пароль:',
 'createacct-yourpasswordagain' => 'Бакъ йе пароль',
 'createacct-yourpasswordagain-ph' => 'Кхин цкъа язъе пароль',
-'remembermypassword' => 'Даглаца сан дӀаяздар хӀокху компьютеран тӀехь (цхьан $1 {{PLURAL:$1|динахь}})',
+'remembermypassword' => 'Ð\94аглаÑ\86а Ñ\81ан Ð´Ó\80аÑ\8fздаÑ\80 Ñ\85Ó\80окÑ\85Ñ\83 ÐºÐ¾Ð¼Ð¿Ñ\8cÑ\8eÑ\82еÑ\80ан Ñ\82Ó\80еÑ\85Ñ\8c (Ñ\86Ñ\85Ñ\8cан $1 {{PLURAL:$1|дийнаÑ\85Ñ\8c}})',
 'userlogin-remembermypassword' => 'Дагахь латт ве/е со',
 'userlogin-signwithsecure' => 'Ларийна цхьаьнакхетар',
 'yourdomainname' => 'Хьан машан меттиг:',
@@ -757,8 +767,6 @@ URL язъеш гӀалат даьлла хила мега.
 'gotaccountlink' => 'Довзийта',
 'userlogin-resetlink' => 'Чуволу/йолу хаам биц бела?',
 'userlogin-resetpassword-link' => 'Пароль кхоссар?',
-'helplogin-url' => 'Help:Системин довзийтар',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Системин чудаха гӀодар]]',
 'userlogin-loggedin' => 'Хьо {{GENDER:$1|$1}} цӀарца чохь ву/ю.
 Лахара форманца кхин цӀарца чугӀо.',
 'userlogin-createanother' => 'Кхолла декъашхочун кхин дӀаяздар',
@@ -770,7 +778,7 @@ URL язъеш гӀалат даьлла хила мега.
 'createacct-another-email-ph' => 'ДӀаязде электронан почтан адрес',
 'createaccountmail' => 'хааман зӀене хула',
 'createacct-realname' => 'Хьан цӀе (ца язйича мега)',
-'createaccountreason' => 'Ð\91аÑ\85Ñ\8cан:',
+'createaccountreason' => 'Ð\91аÑ\85Ñ\8cна:',
 'createacct-reason' => 'Бахьна',
 'createacct-reason-ph' => 'Стен кхуллуш ду ахьа керла декъашхочун дӀаяздар',
 'createacct-captcha' => 'Кхерамзалла хьажар',
@@ -826,9 +834,19 @@ URL язъеш гӀалат даьлла хила мега.
 Дехар до, собар де $1 юха гӀортале.',
 'login-abort-generic' => 'Сестемин довзийта тарцаделира',
 'loginlanguagelabel' => 'Мотт: $1',
+'pt-login' => 'ЧугӀо',
+'pt-login-button' => 'ЧугӀо',
+'pt-createaccount' => 'Кхолла декъашхочун дӀаяздар',
+'pt-userlogout' => 'Болх дӀаберзор',
+
+# Email sending
+'php-mail-error-unknown' => 'PHP-функцин mail() доьвзуш доцу гӀалат',
+'user-mail-no-addy' => 'Электронан адрес доцуш гӀерта электронан хаам бахьийта',
+'user-mail-no-body' => 'Баьсса я тӀех боца электронан хаам бахьийта гӀерта.',
 
 # Change password dialog
 'changepassword' => 'Хийца пароль',
+'resetpass_announce' => 'Чудахар чекх далийта хӀотта йе керла пароль.',
 'resetpass_text' => '<!-- Кхузахь язъде хьай йоза -->',
 'resetpass_header' => 'Хийца дӀаяздаран пароль',
 'oldpassword' => 'Шираелла пароль:',
@@ -836,22 +854,52 @@ URL язъеш гӀалат даьлла хила мега.
 'retypenew' => 'Юха язъйе керла пароль:',
 'resetpass_submit' => 'Пароль дӀахӀоттийна системин чугӀо',
 'changepassword-success' => 'Хьан пароль кхиамца хийцина!',
+'changepassword-throttled' => 'Хьо дукха гӀиртира.
+Дехар до, собар де $1 юха гӀортале.',
 'resetpass_forbidden' => 'Пароль хийца йиш яц',
 'resetpass-no-info' => 'ХӀара агӀо лело системин чугӀо.',
 'resetpass-submit-loggedin' => 'Хийца пароль',
 'resetpass-submit-cancel' => 'Цаоьшу',
+'resetpass-wrong-oldpass' => 'Нийса йоцу я хана йолу карара пароль. Ахьа кхиамца пароль хийцина я керла хана йолу пароль ехна хила там бу.',
+'resetpass-recycled' => 'Дехар до, хӀинца йолччул башха пароль хӀотта йе.',
+'resetpass-temp-emailed' => 'Ахьа чугӀош язйина цкъачунна электронан почте яийтина пароль. Чудахар чекхдалийта язъян еза керла пароль.',
 'resetpass-temp-password' => 'Цхьан хана пароль:',
 'resetpass-abort-generic' => 'Пароль хийцар дӀахедар',
+'resetpass-expired' => 'Хьан паролан хан чекхелла. Дехар до керла пароль хӀоттаяр.',
+'resetpass-expired-soft' => 'Хьа паролан хан чекхелла. Дехар до, харжа керла пароль я тӀетаӀе «{{int:resetpass-submit-cancel}}», и тӀехо хица.',
+'resetpass-validity-soft' => 'Хьа пароль нийса яц: $1
+
+Дехар до, харжа керла пароль я тӀетаӀе  «{{int:resetpass-submit-cancel}}», и тӀехо кхосса.',
 
 # Special:PasswordReset
 'passwordreset' => 'Пароль кхоссар',
+'passwordreset-text-one' => 'Хьай пароль кхосса, юза хӀара форма.',
 'passwordreset-text-many' => '{{PLURAL:$1|Пароль кхосса юза лахара цхьа меттиг.}}',
 'passwordreset-legend' => 'Пароль кхоссар',
+'passwordreset-disabled' => 'ХӀокху вики чохь пароль кхоссар дӀадайина ду.',
+'passwordreset-emaildisabled' => 'Электронан почтан функцеш хӀокху вики чохь дӀаяйина ю.',
 'passwordreset-username' => 'Декъашхочун цӀе:',
 'passwordreset-domain' => 'Домен:',
 'passwordreset-capture' => 'Хьажа беанчу хааме?',
+'passwordreset-capture-help' => 'Ахьа хӀара билгало хӀотта яхь хьона гур бу декъашхочо баийта чохь хана пароль йолу хаам.',
 'passwordreset-email' => 'Электронан почтан адрес:',
 'passwordreset-emailtitle' => '{{SITENAME}}: декъашхочун дӀаяздарх лаьцна хаам',
+'passwordreset-emailtext-ip' => '{{SITENAME}} ($4) проектехь цхьам я ахьа хӀокху IP-адрес $1 тӀера хьа декъашхочун пароль кхоссар дехна,
+оьцу электронан адресца дихкина ду {{PLURAL:$3|1хӀара декъашхочун дӀаяздар|хӀара декъашхочун дӀаяздар}}:
+
+$2
+
+{{PLURAL:$3|ХӀара хана пароль|ХӀара хана паролаш}} лелар ю {{PLURAL:$5|$5 дийнахь}}.
+Системин чугӀой харжа керла пароль. 
+Хьой пароль кхоссар дехна дацахь я хьалхалера пароль дага еънехь хӀума цадеш Ӏад битта хӀара хаам хьа йиш ю шира пароль лелаян.',
+'passwordreset-emailtext-user' => '{{SITENAME}} ($4) проектера декъашхочо $1 хьа декъашхочун пароль кхоссар дехна,
+оьцу электронан адресца дихкина ду {{PLURAL:$3|1хӀара декъашхочун дӀаяздар|хӀара декъашхочун дӀаяздар}}:
+
+$2
+
+{{PLURAL:$3|ХӀара хана пароль|ХӀара хана паролаш}} лелар ю {{PLURAL:$5|$5 дийнахь}}.
+Системин чугӀой харжа керла пароль. 
+Хьой пароль кхоссар дехна дацахь я хьалхалера пароль дага еънехь хӀума цадеш Ӏад битта хӀара хаам хьа йиш ю шира пароль лелаян.',
 'passwordreset-emailelement' => 'Декъашхочун цӀе: $1
 Ханна йолу пароль: $2',
 'passwordreset-emailsent' => 'Электронан хаам баийтина кхоьссинчу паролах лаьцна хаам чохь болуш.',
@@ -1043,6 +1091,7 @@ URL язъеш гӀалат даьлла хила мега.
 'post-expand-template-argument-category' => 'Кепашан аргументаш юкъахь йитина агӀонаш',
 'parser-template-loop-warning' => 'Карийна кепаш юкъахь хилла шад: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Дозанал хьаладаьлла кӀоргенца юх юха дина кеп ($1)',
+'parser-unstrip-loop-warning' => 'ДӀачӀагӀанца pre карина',
 
 # "Undo" feature
 'undo-success' => 'Нисйинарг а тlе цалаца мега. Дехар до, хьажа цхьатерра йуй башхо, тешна хила, баккъалла иза хийцам буйте хьуна безарг, тlакха тlе таlайе «дlайазйе агlо», хийцам хlотта ба.',
@@ -1082,21 +1131,32 @@ URL язъеш гӀалат даьлла хила мега.
 'rev-deleted-comment' => '(нисдарах лаьцна хаам дӀабаьккхина)',
 'rev-deleted-user' => '(авторан цӏе дӏаяйина)',
 'rev-deleted-event' => '(дӀаяздар дӀаяьккхина)',
+'rev-deleted-user-contribs' => '[декъашхочун цӀе я IP-адрес дӀаяхина — къинхьегаман агӀонгара нисдар къайлаяьккхина]',
+'rev-deleted-text-permission' => "ХӀара агӀона верси '''дӀаяьккхина''' ю.
+Бахьна далина [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дӀаяьхнарш йолу тептар чохь].",
 'rev-deleted-text-unhide' => "ХӀара агӀона верси '''дӀаяьккхина''' ю.
 Бахьна далина [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дӀаяьхнарш йолу тептар чохь].
 Хьайна лаахь хьа йиш ю [$1 и верси хьажа].",
+'rev-suppressed-text-unhide' => "ХӀара агӀона верси '''къайлаяьккхина''' ю.
+Бахьна далина [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дӀаяьхнарш йолу тептар чохь].
+Хьайна лаахь хьа йиш ю [$1 и верси хьажа].",
 'rev-deleted-text-view' => "ХӀара агӀона верси '''дӀаяьккхина''' ю.
 Бахьна далина [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дӀаяьхнарш йолу тептар чохь].",
+'rev-suppressed-text-view' => "ХӀара агӀона верси '''къайлаяьккхина''' ю.
+Бахьна далина [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дӀаяьхнарш йолу тептар чохь].",
+'rev-deleted-no-diff' => "АгӀона цхьа верси '''дӀаяьккхина''' хилар бахьнехь, хӀуна версийн башхалла хьажа цало.
+Мадарра каро мега [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дӀаяккхаран тептар чохь].",
+'rev-suppressed-no-diff' => "Хьо хӀокху версешан башхала хьажа цало, царах цхьаъ '''дӀаяьккхина''' хилар бахьнехь.",
 'rev-delundel' => 'гайта/къайла',
 'rev-showdeleted' => 'гайта',
 'revisiondelete' => 'ДӀаяха / меттахӀотае агӀона версеш',
 'revdelete-nooldid-title' => 'Билгалйина яц Ӏалашонан верси',
 'revdelete-nooldid-text' => 'Ахьа хӀара функци кхочушъян билгалйина яц Ӏалашонан верси (я версеш).',
+'revdelete-no-file' => 'Иштта файл яц.',
+'revdelete-show-file-confirm' => 'Бакъалла лаьий хьуна дӀаяьккхина файлан версега хьажа «<nowiki>$1</nowiki>» $2 тӀера, $3?',
 'revdelete-show-file-submit' => 'Хlаъ',
 'revdelete-selected' => "'''АгӀона [[:$1]] {{PLURAL:$2|1=къастина верси|къастина версеш}}:'''",
-'logdelete-selected' => "'''Тептар чура {{PLURAL:$1|1=хаьржина дӀаяздар|хаьржина дӀаяздарш}}:'''",
-'revdelete-text' => "'''ДӀаяхна агӀонашан версеш а хелларш а гуш хир ду агӀона истори а тептаран а чохь, амма цара чулацам куьйгалхошна бен тӀекхочу чохь хир бац.'''
-{{SITENAME}} проектан куьйгалхойн йиш хир ю хӀокху интерфейс чухула дӀааьхинарш меттахӀотта я.",
+'logdelete-selected' => '<strong>Тептар чура {{PLURAL:$1|хаьржина дӀаяздар|хаьржина дӀаяздарш}}:</strong>',
 'revdelete-confirm' => 'Дехар до, бакъдар ахьа деш дерг [[{{MediaWiki:Policy-url}}|бакъонашца]] деш хилар.',
 'revdelete-legend' => 'Доза тохар',
 'revdelete-hide-text' => 'Къайладаккха хӀокху агӀона чура йоза',
@@ -1104,13 +1164,14 @@ URL язъеш гӀалат даьлла хила мега.
 'revdelete-hide-name' => 'Къайлаяккха дешдерг а цуна объект а',
 'revdelete-hide-comment' => 'Хийцамах лаьцнарг',
 'revdelete-hide-user' => 'Декъашхочун цӀе/IP-адрес',
+'revdelete-hide-restricted' => 'Къайлабаха хаамаш куьйгалхойх а',
 'revdelete-radio-same' => '(ма хийца)',
 'revdelete-radio-set' => 'Къайлаяьккхина',
 'revdelete-radio-unset' => 'Гуш ерг',
 'revdelete-suppress' => 'Къайлабаха хаамаш куьйгалхойх а',
 'revdelete-unsuppress' => 'МеттахӀоьттина версешан дихкар къайладаккха',
-'revdelete-log' => 'Ð\91аÑ\85Ñ\8cан:',
-'revdelete-submit' => 'Ð\9aÑ\85оÑ\87Ñ\83Ñ\88де {{PLURAL:$1|1=кÑ\8aаÑ\81Ñ\82ина Ð²ÐµÑ\80Ñ\81ин|кÑ\8aаÑ\81Ñ\82ина Ð²ÐµÑ\80Ñ\81еÑ\88ан}}',
+'revdelete-log' => 'Ð\91аÑ\85Ñ\8cна:',
+'revdelete-submit' => 'Ð\9aÑ\85оÑ\87Ñ\83Ñ\88де {{PLURAL:$1|1=кÑ\8aаÑ\81Ñ\82ина Ð²ÐµÑ\80Ñ\81ин|кÑ\8aаÑ\81Ñ\82ина Ð²ÐµÑ\80Ñ\81ийн}}',
 'revdelete-success' => "'''Версеш гуш хилар кхиамца хийцина.'''",
 'revdelete-failure' => "'''Версеш гуш хилар хийца йиш яц:'''
 $1",
@@ -1127,7 +1188,7 @@ $1",
 ** Бита йиш йоцу шех лаьцна хаам
 ** Бакъдоцург зуламан хаам',
 'revdelete-otherreason' => 'Кхин бахьна/тӀетохар:',
-'revdelete-reasonotherlist' => 'Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cан',
+'revdelete-reasonotherlist' => 'Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cна',
 'revdelete-edit-reasonlist' => 'Бахьанин список нисяр',
 'revdelete-offender' => 'АгӀона версен автор:',
 
@@ -1143,19 +1204,27 @@ $1",
 'mergehistory-go' => 'Гайта цхьаьнатухуш долу нисдарш',
 'mergehistory-submit' => 'Цхьаьнатоха нисдарш',
 'mergehistory-empty' => 'Цхьаьнатоха нисдарш цакарий.',
+'mergehistory-success' => '$3 {{PLURAL:$3|нисдар|нисдарш}} [[:$1]] чура кхиамца {{PLURAL:$3|дехьа даьккхина|дехьа дехна}} [[:$2]] чу.',
 'mergehistory-fail' => 'АгӀонийн истореш вовшахтоха цаделира, дехар до агӀона параметаршка а хене а хьажа.',
+'mergehistory-no-source' => 'Коьрта агӀо «$1» яц.',
+'mergehistory-no-destination' => 'Ӏалашон агӀо «$1» яц.',
 'mergehistory-invalid-source' => 'Хьостан нийса корта хила еза.',
 'mergehistory-invalid-destination' => 'Юзийна агӀона нийса корта хила еза.',
-'mergehistory-reason' => 'Бахьан:',
+'mergehistory-autocomment' => 'Дехьа яьккхина [[:$1]] [[:$2]] чу',
+'mergehistory-comment' => 'Дехьа яьккхина [[:$1]] [[:$2]] чу: $3',
+'mergehistory-reason' => 'Бахьна:',
 
 # Merge log
 'mergelog' => 'Цхьаьнатохаршан тептар',
+'pagemerge-logentry' => 'цхьаьнатоьхна [[$1]] а [[$2]] а ($3 кхаччалц)',
 'revertmerge' => 'Йекъа',
 'mergelogpagetext' => 'Лахахь гойту тӀеххьара вовшахтоьхна агӀонийн могӀам.',
 
 # Diffs
 'history-title' => '$1 — хийцаман истори',
 'difference-title' => '$1 — Версешан башхалла',
+'difference-title-multipage' => 'АгӀонийн башхалла «$1» а «$2» а',
+'difference-multipage' => '(АгӀонийн башхалла)',
 'lineno' => 'МогӀа $1:',
 'compareselectedversions' => 'Хаьржина версеш муха ю хьажа',
 'showhideselectedversions' => 'Гайта/къайлаяха хаьржина башхонаш',
@@ -1163,10 +1232,13 @@ $1",
 'diff-empty' => '(башхалла яц)',
 'diff-multi-sameuser' => '(ца {{PLURAL:$1|гайтина юккъера цхьа верси|гайтина юккъера цхьа версеш}} оьцу декъашхочун)',
 'diff-multi-otherusers' => '(ца {{PLURAL:$1|гайтина юккъера верси|гайтина юккъера версеш}} {{PLURAL:$2|кхин цхьан декъашхочун|$2 декъашхойн}})',
+'diff-multi-manyusers' => '({{PLURAL:$1|гайтина яц $1 юккъера верси, йина|не показаны $1 юккъера версеш, йина}} {{PLURAL:$2|$2 декъашхочо|$2 декъашхоша}})',
 
 # Search results
 'searchresults' => 'Лахарна хилам',
 'searchresults-title' => 'Лаха «$1»',
+'titlematches' => 'АгӀонийн цӀераш цхьаьнанисялар',
+'textmatches' => 'АгӀонийн йоза цхьаьнанисдалар',
 'notextmatches' => 'Агlонаш чура йозанашца цхьатера йогlуш яц',
 'prevn' => 'хьалхарнаш {{PLURAL:$1|$1}}',
 'nextn' => 'тӀаьхьйогӀурш {{PLURAL:$1|$1}}',
@@ -1188,16 +1260,20 @@ $1",
 'searchprofile-advanced-tooltip' => 'Лаха дехарца хlокху ана цlерашкахь',
 'search-result-size' => '$1 ({{PLURAL:$2|$2 дош|$2 дешнаш|$2 дешнаш}})',
 'search-result-category-size' => '$1 {{PLURAL:$1|юкъаяр}} ($2 {{PLURAL:$2|1=бухара категори|бухара категореш}}, $3 {{PLURAL:$3|1=файл|файлаш}}).',
+'search-result-score' => 'Релевант: $1%.',
 'search-redirect' => '(дlасахьажийна $1)',
 'search-section' => '(дакъа $1)',
+'search-file-match' => '(файлан чулацаме тера хилар)',
 'search-suggest' => 'Хила мега ахьа лоьхарг: $1',
 'search-interwiki-caption' => 'Гергара проекташ',
 'search-interwiki-default' => '$1 хилам.:',
 'search-interwiki-more' => '(кхин)',
+'search-relatedarticle' => 'ХӀоттаделларг',
 'searcheverything-enable' => 'Массо цIера анахь лахар',
 'searchrelated' => 'хlоттаделларг',
 'searchall' => 'массо',
 'showingresults' => 'Лахахьа {{PLURAL:$1|гойта|гойту|гойту}} <strong>$1</strong> {{PLURAL:$1|хилам|хиламаш|хиламаш}}, дlаболало кху № <strong>$2</strong>.',
+'showingresultsinrange' => 'Лахахь гайтина {{PLURAL:$1|<strong>1</strong> хилам}} диапазонехь <strong>$2</strong> тӀера <strong>$3</strong> кхаччалц.',
 'showingresultsheader' => "{{PLURAL:$5|1=Хилам '''$1''' кху '''$3'''|Хиламаш '''$1 — $2''' кху '''$3'''}} оцун '''$4'''",
 'search-nonefound' => 'Дехаре терра цхьа хӀума ца карийна.',
 'powersearch-legend' => 'Шуьро лахар',
@@ -1213,6 +1289,7 @@ $1",
 'preferences' => 'Гlирс нисбан',
 'mypreferences' => 'ГӀирс нисбан',
 'prefs-edits' => 'Нисдарши дукхалла:',
+'prefsnologintext2' => 'Оьшу $1, гӀирс дӀанисбан.',
 'prefs-skin' => 'Кечяран тема',
 'skin-preview' => 'Хьалха муха ю хьажа',
 'datedefault' => 'Iад йитарца',
@@ -1224,41 +1301,45 @@ $1",
 'prefs-rc' => 'Керла нисдарш',
 'prefs-watchlist' => 'Тергаме могӀам',
 'prefs-watchlist-days' => 'Денойн дукхалла:',
-'prefs-watchlist-days-max' => 'Къезиг  $1 {{PLURAL:$1|дена}}',
+'prefs-watchlist-days-max' => 'Къезиг $1 {{PLURAL:$1|дена}}',
 'prefs-watchlist-edits' => 'Тергаме могӀам чохь гойтучу нисдаршан максимальни дукхалла:',
 'prefs-watchlist-edits-max' => 'Уггар дукха: 1000',
 'prefs-watchlist-token' => 'Тергаме могӀанан токен:',
 'prefs-misc' => 'Кхин гlирсаш',
 'prefs-resetpass' => 'Хийца пароль',
 'prefs-changeemail' => 'Хийца электрони почт',
+'prefs-setemail' => 'Электронан почтан адрес дӀахӀоттор',
 'prefs-email' => 'Электронан почтан параметраш',
 'prefs-rendering' => 'Арахьара хатl',
-'saveprefs' => 'lалашдан',
+'saveprefs' => 'Ӏалашдан',
 'restoreprefs' => 'МеттахӀоттабе гӀирс Iад битарца',
 'prefs-editing' => 'Тадар',
 'rows' => 'МогӀанаш:',
 'columns' => 'БӀогӀамаш:',
 'searchresultshead' => 'Лаха',
 'stub-threshold' => 'Кеч яран доза <a href="#" class="stub">коьртамогӀамна хьажорагаш</a> (байташках):',
+'stub-threshold-disabled' => 'ДӀадайина',
 'recentchangesdays' => 'Керла нисдар гайта динахь:',
-'recentchangesdays-max' => 'Къезиг  $1 {{PLURAL:$1|дена}}',
+'recentchangesdays-max' => 'Къезиг $1 {{PLURAL:$1|дена}}',
 'recentchangescount' => 'Iад йитарца гойтуш долу нисдаршан дукхалла',
 'prefs-help-recentchangescount' => 'Гойту керла нисдарш, агӀонашан истори, тептарш.',
 'prefs-help-watchlist-token2' => 'Иза хьан тергаме могӀан къайла догӀа ду.
 Муьлха и хуучунна йиш ю хьан тергаме могӀам беша, цундела ма хаийта иза кхечаьрга. [[Special:ResetTokens|ТӀетаӀа йе кхуза и хьайга кхосса лууш делахь]].',
 'savedprefs' => 'Хьан гӀирс Ӏалашбина.',
-'timezonelegend' => 'Сахьатан аса:',
+'timezonelegend' => 'Сахьтан аса:',
 'localtime' => 'Меттигера хан:',
 'timezoneuseserverdefault' => 'Серверан ($1) гӀирс лелабе',
 'timezoneuseoffset' => 'Кхин (билгалде дӀахилар)',
 'servertime' => 'Сервера хан:',
 'guesstimezone' => 'Юза браузеран чура',
 'timezoneregion-asia' => 'Ази',
+'timezoneregion-atlantic' => 'Атлантикан океан',
 'timezoneregion-australia' => 'Австрали',
 'timezoneregion-indian' => 'Индин океан',
 'timezoneregion-pacific' => 'Тийна океан',
 'allowemail' => 'Магийта декъашхошна хьайга электрони почтехула кехат кхехьийта',
 'prefs-searchoptions' => 'Лаха',
+'prefs-namespaces' => 'ЦӀерийн ана',
 'defaultns' => 'Я лаха лахахь гайтинчу аннашкахь:',
 'default' => 'Iад йитарца',
 'prefs-files' => 'Файлаш',
@@ -1271,13 +1352,15 @@ $1",
 'youremail' => 'Кехат яздо зlе цlе:',
 'username' => '{{GENDER:$1|Декъашхочун цӀе}}:',
 'uid' => 'Декъашхочун {{GENDER:$1|код}}:',
-'prefs-memberingroups' => '{{GENDER:$2|Тобана|Тобана}} {{PLURAL:$1|1=декъашхо|декъашхо}}:',
+'prefs-memberingroups' => '{{GENDER:$1|Тобана|Тобаншан}} {{PLURAL:$2|декъашхо|декъашхой}}:',
 'prefs-registration' => 'ДӀаяздар кхолийна хан:',
 'yourrealname' => 'Хьан бакъ цlе:',
 'yourlanguage' => 'Мотт:',
-'yourvariant' => 'Метта башхо',
+'yourvariant' => 'Метта башхо:',
 'yournick' => 'Керла куьгтаӀор:',
 'prefs-help-signature' => 'Дийцаре агӀонаш чохь къуьгтаӀо деза символшца «<nowiki>~~~~</nowiki>», цара гойтур ду хьан къуьгтаӀор а хан а.',
+'badsiglength' => 'ТӀех деха куьг.
+Куьйган $1 {{PLURAL:$1|символ}} дукха хила цамега.',
 'yourgender' => 'Ву/Йу:',
 'gender-unknown' => 'хlоттийна яц',
 'gender-male' => 'борша',
@@ -1287,6 +1370,7 @@ $1",
 'email' => 'Email',
 'prefs-help-email' => 'Электронан почтан адрес цахӀоттийча а хӀумма дац, амма иза оьшар ю, нагахь хьуна хьай пароль йицлахь.',
 'prefs-help-email-others' => 'Кхин дӀа цо кхечу декъашхошна йиш хуьлуьйту хьога электронан кехат даийта хьан агӀона чохь йолу хьажориган гӀоьнца.',
+'prefs-help-email-required' => 'Электронан почтан адрес яздан деза.',
 'prefs-info' => 'Коьрта хаам',
 'prefs-i18n' => 'Юкъардекъа мотт',
 'prefs-signature' => 'КуьгтаӀор',
@@ -1305,6 +1389,9 @@ $1",
 'prefs-diffs' => 'Башхон верси',
 'prefs-help-prefershttps' => 'И хийцам болх байта юхугӀо системин чу.',
 
+# User preference: email validation using jQuery
+'email-address-validity-valid' => 'Го нийса',
+
 # User rights
 'userrights' => 'Декъашхочун бакъона урхалладар',
 'userrights-lookup-user' => 'Декъашхошан бакъонашан урхалладар',
@@ -1330,21 +1417,22 @@ $1",
 'group' => 'Тоба:',
 'group-user' => 'Декъашхой',
 'group-autoconfirmed' => 'Ша тӀелаьцболу декъашхой',
-'group-bot' => 'ШаболÑ\85Ñ\85ой',
+'group-bot' => 'Ð\91оÑ\82аÑ\88',
 'group-sysop' => 'Куьйгалхой',
 'group-bureaucrat' => 'Бюрократаш',
 'group-suppress' => 'Ревизораш',
 'group-all' => '(массо)',
 
 'group-user-member' => '{{GENDER:$1|декъашхо}}',
-'group-bot-member' => 'шаболххо',
+'group-autoconfirmed-member' => '{{GENDER:$1|шашеха тӀелаьцна декъашхо}}',
+'group-bot-member' => '{{GENDER:$1|бот}}',
 'group-sysop-member' => '{{GENDER:$1|куьйгалхо}}',
 'group-bureaucrat-member' => '{{GENDER:$1|бюрократхо}}',
-'group-suppress-member' => 'левисорхо',
+'group-suppress-member' => '{{GENDER:$1|ревизор}}',
 
 'grouppage-user' => '{{ns:project}}:Декъашхой',
 'grouppage-autoconfirmed' => '{{ns:project}}:Бакъонаш йолу декъашхой',
-'grouppage-bot' => '{{ns:project}}:ШаболÑ\85Ñ\85ой',
+'grouppage-bot' => '{{ns:project}}:Ð\91оÑ\82аÑ\88',
 'grouppage-sysop' => '{{ns:project}}:Куьйгалхой',
 'grouppage-bureaucrat' => '{{ns:project}}:Бюрократаш',
 'grouppage-suppress' => '{{ns:project}}:Ревизораш',
@@ -1376,8 +1464,8 @@ $1",
 'right-bigdelete' => 'еха хийцаман истори йолу агӀонаш дӀаяхар',
 'right-deletelogentry' => 'тептар чура билгала дӀаяздарш дӀадахар а меттахӀиттадар а.',
 'right-deleterevision' => 'агӀонийн билгала версеш дӀаяхар а меттахӀиттаяр а',
-'right-deletedhistory' => 'дӀаяхна агӀонийн исторега хьажар дӀадаьккхина йоза тӀекхочехь доцуш',
-'right-deletedtext' => 'дӀадаьккхина йозане а хийцамашка а хьажар агӀонийн дӀаяхна версин юккъахь',
+'right-deletedhistory' => 'дÓ\80аÑ\8fÑ\8cÑ\85на Ð°Ð³Ó\80онийн Ð¸Ñ\81Ñ\82оÑ\80ега Ñ\85Ñ\8cажаÑ\80 Ð´Ó\80адаÑ\8cккÑ\85ина Ð¹Ð¾Ð·Ð° Ñ\82Ó\80екÑ\85оÑ\87еÑ\85Ñ\8c Ð´Ð¾Ñ\86Ñ\83Ñ\88',
+'right-deletedtext' => 'дÓ\80адаÑ\8cккÑ\85ина Ð¹Ð¾Ð·Ð°Ð½Ðµ Ð° Ñ\85ийÑ\86амаÑ\88ка Ð° Ñ\85Ñ\8cажаÑ\80 Ð°Ð³Ó\80онийн Ð´Ó\80аÑ\8fÑ\8cÑ\85на Ð²ÐµÑ\80Ñ\81ин Ñ\8eккÑ\8aаÑ\85Ñ\8c',
 'right-browsearchive' => 'дӀаяхна агӀонаш лахар',
 'right-undelete' => 'АгӀонаш меттахӀоттор',
 'right-suppressrevision' => 'куьйгалхойх хьулйина йолу агӀонийн версеш меттахӀиттаяр а хьажар а',
@@ -1430,37 +1518,78 @@ $1",
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'хӀара агӀо ешар',
 'action-edit' => 'нисйа хlара агlо',
+'action-createpage' => 'агӀонаш кхолла',
+'action-createtalk' => 'дийцаре агӀонаш кхоллар',
+'action-createaccount' => 'хӀара декъашхочун дӀаяздар кхоллар',
+'action-minoredit' => 'жима нисдар сана билгало',
 'action-move' => 'хӀокху агӀон цӀе хийца',
+'action-move-subpages' => 'хӀокху агӀона цӀе хийцар цуна массо бухара агӀонийн а',
 'action-move-rootuserpages' => 'декъашхочун ораман агӀонийн цӀераш хийцар',
+'action-movefile' => 'хӀокху файлан цӀе хийца',
+'action-upload' => 'чуяккха хӀара файл',
+'action-reupload' => 'йолуш йолу файлан тӀехула дӀаязъяр',
+'action-upload_by_url' => 'URL адресан тӀера хӀара файл чуяккхар',
+'action-writeapi' => 'нисдеш лелойо API',
 'action-delete' => 'дӀаяккха хӀара агӀо',
+'action-deleterevision' => 'агӀона хӀара верси дӀаяккхар',
 'action-deletedhistory' => 'хӀокху агӀона дӀаяккхинцу исторега хьажар',
 'action-browsearchive' => 'ДӀаяхна агӀонаш лахар',
 'action-undelete' => 'хӀара агӀо меттахӀоттор',
+'action-suppressrevision' => 'хӀокху къайлаха йолу агӀон версеш хьажар а меттахӀоттор а',
+'action-suppressionlog' => 'хӀокху долара тептаре хьажар',
+'action-block' => 'хӀокху декъашхошка тадарш ца дайта дехкар хӀоттор',
+'action-protect' => 'хӀокху агӀона гӀоралин хьал хийцар',
+'action-rollback' => 'билгала агӀона тӀехьарчу декъашхочо дина нисдарш сиха юхадахар',
+'action-import' => 'кхечу википедешкара агӀонаш импорт ян',
+'action-importupload' => 'файлаш чуяхарца агӀонаш импорт ян',
 'action-patrol' => 'кхечера нисдарш хьаьжна сана билгалдар',
 'action-autopatrol' => 'шен нисдарш хьаьжна сана билгалдар',
+'action-unwatchedpages' => 'тергамехь йоцу агӀонийн могӀане хьажар',
+'action-mergehistory' => 'хӀокху агӀона хийцаман истори вовшахтохар',
+'action-userrights' => 'декъашхойн массо бакъонаш хийцар',
+'action-userrights-interwiki' => 'кхечу викеш чура декъашхойн бакъонаш хийцар',
 'action-siteadmin' => 'хаамийн гуламан блоктохар а блокдӀаяккхар а',
+'action-sendemail' => 'Электронан кехат дӀадахьийтар',
+'action-editmywatchlist' => 'хьан тергаме могӀам табар',
+'action-viewmywatchlist' => 'шен тергаме могӀане хьажар',
+'action-viewmyprivateinfo' => 'хьан долара хааме хьажар',
+'action-editmyprivateinfo' => 'хьан долара хаам табар',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|хийцам|хийцамаш|хийцамаш}}',
+'nchanges' => '$1 {{PLURAL:$1|хийцам|хийцамаш}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|тӀеххьара чудаларца}}',
+'enhancedrc-history' => 'истори',
 'recentchanges' => 'Керла нисдарш',
 'recentchanges-legend' => 'Гlирс нисбарна керла нисдарш',
 'recentchanges-summary' => 'Лахахь гайтина хене хьаьжна Википедин агӀонашкахь тӀаьхьара бина хийцамаш',
-'recentchanges-noresult' => 'Билгал йинчу хенахь цӀа хийцамаш бина бац.',
+'recentchanges-noresult' => 'Билгал йинчу хенахь цхьа хийцамаш бина бац.',
 'recentchanges-feed-description' => 'Тергам бе тlаьхьара вики хийцаман хlокху ларца.',
-'recentchanges-label-newpage' => 'Оцу нисдарца кхоллина керла агlо.',
+'recentchanges-label-newpage' => 'Оцу нисдарца кхоьллина керла агӀо.',
 'recentchanges-label-minor' => 'Хlара нисдинарг къастийна жимо долушсан',
 'recentchanges-label-bot' => 'ХӀара нисдар шаболх бечо дина',
 'recentchanges-label-unpatrolled' => 'ХӀара нисдар хӀинца цхьано патрулировать дина дац',
 'recentchanges-label-plusminus' => 'байташкахь барам хийцар',
 'recentchanges-legend-newpage' => '(хьажа кхин [[Special:NewPages|керла агӀонийн могӀа]])',
-'rcnotefrom' => "Лахахь гайтина тӀера '''$2''' хийцамаш ('''$1''' къезиг).",
+'rcnotefrom' => 'Лахахь гайтина тӀера <strong>$2</strong> (хийцамаш <strong>$1</strong> кӀезиг).',
 'rclistfrom' => 'Гайта хийцам оцу $1.',
 'rcshowhideminor' => '$1 кегийра нисдарш',
-'rcshowhidebots' => '$1 шабелхалой',
+'rcshowhideminor-show' => 'Гайта',
+'rcshowhideminor-hide' => 'Къайладаха',
+'rcshowhidebots' => '$1 боташ',
+'rcshowhidebots-show' => 'Гайта',
+'rcshowhidebots-hide' => 'Къайлабаха',
 'rcshowhideliu' => '$1 шайн цӀершца болу декъашхой',
+'rcshowhideliu-show' => 'Гайта',
+'rcshowhideliu-hide' => 'Къайлабаха',
 'rcshowhideanons' => '$1 цӀе хьулйина декъашхой',
+'rcshowhideanons-show' => 'Гайта',
+'rcshowhideanons-hide' => 'Къайлабаха',
 'rcshowhidepatr' => '$1 хьажжина нисдарш',
+'rcshowhidepatr-show' => 'Гайта',
+'rcshowhidepatr-hide' => 'Къайладаха',
 'rcshowhidemine' => '$1 айхьа нисдинарш',
+'rcshowhidemine-show' => 'Гайта',
+'rcshowhidemine-hide' => 'Къайладаха',
 'rclinks' => 'Гайта тlаьхьара $1 хийцамаш оцу $2 ден<br />$3',
 'diff' => 'тейп тайпнара',
 'hist' => 'истори',
@@ -1469,8 +1598,10 @@ $1",
 'minoreditletter' => 'ж',
 'newpageletter' => 'К',
 'boteditletter' => 'б',
+'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|тӀехьожу декъашхо|тӀехьожу декъашхой}}]',
+'rc_categories' => 'Категори чура бен (къасторг «|»)',
 'rc_categories_any' => 'Муьлхаа',
-'rc-change-size-new' => 'Хийцам бинчул тӀехьа болу барам: $1 {{PLURAL:$1|байт}}',
+'rc-change-size-new' => 'Хийцам бин чул тӀехьа болу барам: $1 {{PLURAL:$1|байт}}',
 'newsectionsummary' => '/* $1 */ Керла хьедар',
 'rc-enhanced-expand' => 'Гайта мадарра',
 'rc-enhanced-hide' => 'Ма дарра дерг къайладаккха',
@@ -1491,7 +1622,9 @@ $1",
 'uploadbtn' => 'Файл чуяккхар',
 'reuploaddesc' => 'Юху гӀо файл чуйоккху агӀоне',
 'upload-tryagain' => 'ДӀадахьийта хийцина файлах лаьцнарг',
+'uploadnologin' => 'Ахьа системин чохь болх беш бац',
 'uploadnologintext' => 'Серверан чу файлаш яха хьо $1.',
+'uploaderror' => 'Файл чуяккхаран гӀалат',
 'upload-recreate-warning' => "'''Тегам бе: иштта цӀе йолу файл дӀаяьккхина я цӀе хийцина.'''
 
 Лахахьа гойтуш ю хӀокху агӀона тептар:",
@@ -1503,19 +1636,36 @@ $1",
 * '''<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.',
+'uploadlog' => 'Чуяхаран тéптар',
 'uploadlogpage' => 'Чуяхаран тéптар',
-'uploadlogpagetext' => 'Лахахьа гойтуш бу тӀаьххьара чуяхна файлийн могӀам.
+'uploadlogpagetext' => 'Ð\9bаÑ\85аÑ\85Ñ\8cа Ð³Ð¾Ð¹Ñ\82Ñ\83Ñ\88 Ð±Ñ\83 Ñ\82Ó\80аÑ\8cÑ\85Ñ\85Ñ\8cаÑ\80а Ñ\87Ñ\83Ñ\8fÑ\8cÑ\85на Ñ\84айлийн Ð¼Ð¾Ð³Ó\80ам.
 Ишта хьажа [[Special:NewFiles|керлачу файлийн галерей]].',
 'filename' => 'Файлан цӀе',
 'filedesc' => 'Файлах лаьцна',
 'fileuploadsummary' => 'Файлах лаьцна:',
 'filereuploadsummary' => 'Файлан хийцамаш:',
+'filestatus' => 'Яржоран хьал:',
 'filesource' => 'Хьост:',
+'uploadedfiles' => 'Чуйаха файлаш',
 'ignorewarning' => 'ХӀума дац чуяккха файл',
 'ignorewarnings' => 'ДӀахедар тергал ца дан',
 'badfilename' => 'Файлан цӀе хийцина → $1.',
+'filetype-mime-mismatch' => 'Файлан шоръелла «.$1» оцунна MIME-тайпанца йогӀуш яц ($2).',
 'filetype-banned-type' => "'''«.$1»''' — {{PLURAL:$4|1=ца магийна файлан тайп|ца магийна файлийн тайпанаш}}.
 {{PLURAL:$3|1=Магийна файлан тайп ю|Магийна файлийн тайпанаш ю:}} $2.",
+'filetype-missing' => 'Файлан шоралла яц (масала, «.jpg»).',
+'empty-file' => 'Ахьа яхьийтина файл еса ю.',
+'file-too-large' => 'Ахьа яхьийтина файл тӀех йоккха ю.',
+'filename-tooshort' => 'Файлан цӀе тӀехь йоца ю.',
+'filetype-banned' => 'ХӀара файлийн тайп магийна яц.',
+'verification-error' => 'ХӀара файл хьаран чекх цаяьлла.',
+'illegal-filename' => 'Магийна йоцу файлан цӀе.',
+'overwrite' => 'йолуш йолу файл хийца магийна дац.',
+'unknown-error' => 'Ца довза гӀалат даьлла',
+'tmp-create-error' => 'Цатарло хана файл кхолла.',
+'tmp-write-error' => 'Хана файлан дӀаяздаран гӀалат',
 'emptyfile' => 'Ахьа чуйоккхуш йолу файл еса хийла там бу. Иза гӀалат хийла мега файлан цӀе нийса язйина йоцу дела. Дехар до хьажа бакъалла и юьй ахьа чуйоккхуш йолу файл.',
 'fileexists' => 'Иштта цӀе йолу файл йолуш ю. Дехар до, хьажа <strong>[[:$1]]</strong>, лаьий хьуна и хийца. 
 [[$1|thumb]]',
@@ -1539,10 +1689,17 @@ $1",
 'file-deleted-duplicate' => 'Иштта файл ([[:$1]]) хӀинцале дӀаяьккхина хилла. Дехар до, юху файл чуяккхале файл дӀаяккхаран историга хьажа.',
 'uploadwarning' => 'Дlахьедар',
 'uploadwarning-text' => 'Дехар до, лахара файлах лаьцнарг хийца а дай юху а гӀорта файл чуяккха.',
+'savefile' => 'ДӀаязе йе файл',
 'uploadedimage' => 'чуяьккхина «[[$1]]»',
 'overwroteimage' => 'Чуяьккхина файлан керла верси «[[$1]]»',
+'uploaddisabled' => 'Чуяккхар магийна дац',
+'copyuploaddisabled' => 'URL тӀера чуяккхар дӀадайина ду.',
+'uploadfromurl-queued' => 'Хьа чуяккхар рогӀехь ду.',
+'uploaddisabledtext' => 'Файлаш чуяхар дӀадайина ду.',
+'uploadscriptednamespace' => "ХӀокху SVG-файлан цӀерийн меттиг нийса яц '$1'",
 'upload-source' => 'ДIайолалун файл',
 'sourcefilename' => 'ДIайолалун файл:',
+'sourceurl' => 'Хьостан URL-адрес:',
 'destfilename' => 'Файлан керла цӀе:',
 'upload-maxfilesize' => 'Файлан: $1 максимальни барам',
 'upload-description' => 'Файлах лаьцна',
@@ -1564,16 +1721,54 @@ JD # Jenoptik
 MGP # Pentax
 PICT # тайп тайпан
  #</pre> <!-- битийша хlара могlа ша мабарра -->',
+'upload-success-subj' => 'Чуяккхар кхиамца чекхделира.',
+'upload-success-msg' => 'Хьа чуяккхар [$2] кхиамца чекхделира. Хиллачуьнга хьажа йиш ю кхузахь: [[:{{ns:file}}:$1]]',
+'upload-failure-subj' => 'Чуяккхаран бала',
+'upload-failure-msg' => 'Хьа чуяккхаран бала карина [$2]:
+
+$1',
+'upload-warning-subj' => 'ДӀахьедар',
+'upload-warning-msg' => 'Чуйоккхуш [$2] гӀалат даьлла. И нисдан юхагӀо [[Special:Upload/stash/$1|upload form]] чу.',
+
+'upload-proto-error' => 'Нийса йоцу протокол',
+'upload-file-error' => 'Чоьхьара гӀалат',
+'upload-unknown-size' => 'Хууш доцу барам',
+'upload-http-error' => 'Даьлла гӀалат HTTP: $1',
 
 # File backend
+'backend-fail-stream' => 'ДӀаяккха цатарло файл «$1».',
+'backend-fail-backup' => 'Таро яц файлан $1 тӀаьхьалонан копиян.',
+'backend-fail-notexists' => 'Файл $1 яц.',
+'backend-fail-hashes' => 'Башхо хьажа файлийн кэш схьаэца цаделира.',
+'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 чу яккха цаелира.',
+'backend-fail-move' => 'Файл $1 $2 чу дихьа яккха цаелира.',
+'backend-fail-opentemp' => 'Цатарло хана файл елла.',
+'backend-fail-writetemp' => 'Цатарло хана файл дӀаязъян.',
+'backend-fail-closetemp' => 'Цатарло хана файл дӀачӀагӀа.',
+'backend-fail-read' => 'Файл «$1» еша цаелира.',
+'backend-fail-create' => 'Файл $1 дӀаязъян цаелира.',
+'backend-fail-maxsize' => 'Файл $1 дӀаязъян цаелира, цуна барам $2 {{PLURAL:$2|байт}} сов хилар бахьнехь.',
 'backend-fail-readonly' => 'ХӀара «$1» хӀинца еша бен таро яц. Бахьна: «$2»',
 
+# Lock manager
+'lockmanager-notlocked' => 'БлокдӀаяккха цаелира "$1"; цуна блоктоьхна яц.',
+
+# Special:UploadStash
+'uploadstash' => 'Къайлаха чуяккхар',
+
 # HTTP errors
 'http-timed-out' => 'Хьежаран хан чекхели HTTP-жоп дехаран.',
 
 'license' => 'Бакъойалар:',
 'license-header' => 'Бакъойалар',
 'nolicense' => 'Яц',
+'license-nopreview' => '(Хьалха муха ю хьажа цало)',
 'upload_source_file' => ' (файл хьан компьютер чохь ю)',
 
 # Special:ListFiles
@@ -1582,6 +1777,7 @@ PICT # тайп тайпан
 'listfiles_search_for' => 'Лаха хIуман цIарца:',
 'imgfile' => 'файл',
 'listfiles' => 'Файлаш',
+'listfiles_thumb' => 'Жима',
 'listfiles_date' => 'Терахь',
 'listfiles_name' => 'Файлан цӀе',
 'listfiles_user' => 'Декъашхо',
@@ -1589,7 +1785,9 @@ PICT # тайп тайпан
 'listfiles_description' => 'Цуьнах лаьцна',
 'listfiles_count' => 'Верси',
 'listfiles-show-all' => 'Гайта суьртийн шира версеш',
+'listfiles-latestversion' => 'Карара верси',
 'listfiles-latestversion-yes' => 'ХӀаъ',
+'listfiles-latestversion-no' => 'ХӀахӀа',
 
 # File description page
 'file-anchor-link' => 'Файл',
@@ -1602,26 +1800,31 @@ PICT # тайп тайпан
 'filehist-datetime' => 'Терахь/Хан',
 'filehist-thumb' => 'Жима',
 'filehist-thumbtext' => 'Жимо башхо оцу $1',
+'filehist-nothumb' => 'Миниатюра яц',
 'filehist-user' => 'Декъашхо',
 'filehist-dimensions' => 'Файлан барам',
 'filehist-filesize' => 'Файлан барам',
 'filehist-comment' => 'Билгалдаккхар',
+'filehist-missing' => 'Файл яц',
 'imagelinks' => 'Файл лелор',
 'linkstoimage' => '{{PLURAL:$1|ТӀаьхьайогӀу $1 агӀо тӀетойжина|ТӀаьхьайогlу $1 агӀонаш тӀетойжина|ТӀаьхьайогӀу $1 агӀонаш тӀетойжина}} хӀокху файлан:',
 'nolinkstoimage' => 'АгӀонашчохь файл лелош яц.',
+'linkstoimage-redirect' => '$1 (файлан дӀасахьажораг) $2',
+'duplicatesoffile' => '{{PLURAL:$1|Лахара файл ю дубликат|Лахара $1 файлаш ю дубликаташ}} хӀокху файлан ([[Special:FileDuplicateSearch/$2|мадарра]]):',
 'sharedupload' => 'ХӀара хӀума оцун $1 чура ю иза хила мега лелош кхечу проекташкахь.',
 'sharedupload-desc-here' => 'ХӀара файл $1 чура ю и лело йиш ю массо проекташкахь.
 Цунна хаам гайтина лахахь. [$2 Файл Викигуламехь]',
 'filepage-nofile' => 'Иштта цӀе йолуш файл яц.',
 'filepage-nofile-link' => 'Ишта цӀе йолуш файл яц. Хьа йиш ю и [$1 чуяккха].',
 'uploadnewversion-linktext' => 'Чуяккха керла верси хӀокху файлан',
-'shared-repo-name-wikimediacommons' => 'Викидlайуллуче',
+'shared-repo-from' => '$1 чура',
+'shared-repo-name-wikimediacommons' => 'Викигулам',
 
 # File reversion
 'filerevert' => 'Тохарлера верси юхаерзор $1',
 'filerevert-legend' => 'Файлан верси юхаерзо',
 'filerevert-intro' => '<span class="plainlinks">Файл юхаерзош ю \'\'\'[[Media:$1|$1]]\'\'\' оцу [$4 верси $3, $2].</span>',
-'filerevert-comment' => 'Ð\91аÑ\85Ñ\8cан:',
+'filerevert-comment' => 'Ð\91аÑ\85Ñ\8cна:',
 'filerevert-defaultcomment' => 'Юхаерзош ю оцу $2, $1 хенахь хила верси',
 'filerevert-submit' => 'Юхаяккха',
 'filerevert-success' => "Юхаерзина файл '''[[Media:$1|$1]]''' оцу [$4 верси $3, $2].",
@@ -1631,13 +1834,13 @@ PICT # тайп тайпан
 'filedelete-legend' => 'ДӀаяккха файл',
 'filedelete-intro' => "Хьо файл '''[[Media:$1|$1]]''' дӀаяккха гӀерта цунна массо истори цхьан.",
 'filedelete-intro-old' => '<span class="plainlinks">Ахьа дӀайоккхуш ю верси \'\'\'[[Media:$1|$1]]\'\'\' цу [$4 $3, $2].</span>',
-'filedelete-comment' => 'Ð\91аÑ\85Ñ\8cан:',
+'filedelete-comment' => 'Ð\91аÑ\85Ñ\8cна:',
 'filedelete-submit' => 'ДӀаяккха',
 'filedelete-success' => '$1 дӀаяккхи.',
 'filedelete-success-old' => "Верси '''[[Media:$1|$1]]''' цу $3 $2 дӀаяьккхина.",
 'filedelete-nofile' => "'''$1''' яц.",
-'filedelete-otherreason' => 'Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cан:',
-'filedelete-reason-otherlist' => 'Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cан',
+'filedelete-otherreason' => 'Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cна:',
+'filedelete-reason-otherlist' => 'Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cна',
 'filedelete-reason-dropdown' => '* Даржина долу дӀаяккхаран баьхьанаш 
 ** Авторан бакъонаш талхор
 ** ЦхӀатера файлаш хилар',
@@ -1659,7 +1862,7 @@ PICT # тайп тайпан
 'unusedtemplates' => 'Лелош доцу кепаш',
 'unusedtemplatestext' => 'Кхузахь дагар йина «{{ns:template}}» цӀерийн меттиган агӀонаш, кхечу агӀонийн юкъа тоьхна йоцу.
 Диц ма делахь хьажа кеп агӀонашкахь лелош юй.',
-'unusedtemplateswlh' => 'кÑ\85ин Ñ\85Ñ\8cажоÑ\80агаÑ\88',
+'unusedtemplateswlh' => 'кхин хьажоргаш',
 
 # Random page
 'randompage' => 'Цахууш нисйелла агӀо',
@@ -1674,7 +1877,7 @@ PICT # тайп тайпан
 
 # Statistics
 'statistics' => 'Бухехьдерг',
-'statistics-header-pages' => 'Агlонашан жамlа',
+'statistics-header-pages' => 'АгӀонийн жамӀ',
 'statistics-header-edits' => 'Нисдаран жамӀ',
 'statistics-header-users' => 'Декъашхойн жамӀа',
 'statistics-header-hooks' => 'Кхин статистика',
@@ -1684,23 +1887,28 @@ PICT # тайп тайпан
 'statistics-files' => 'Чуйаьхна файлаш',
 'statistics-edits' => 'Нисдаран дукхалла {{grammar:genitive|{{SITENAME}}}} дlа йолайаларца',
 'statistics-edits-average' => 'Юккъера агӀонан нисдаран терахь',
+'statistics-views-total' => 'Массо хьажарш',
+'statistics-views-peredit' => 'Нисдаре хьажарш',
 'statistics-users' => '[[ВП:Дlаязвалар|Дlаязбелларш]] шаберигге декъашхой чохь болу [[Special:ListUsers|(могlам)]]',
 'statistics-users-active' => 'Жигара декъашхой',
 'statistics-users-active-desc' => 'Декъашхой, муьлха цхьа хlум дина болу, кху {{PLURAL:$1|1=тlаьххьара $1 динахь|тlаьххьара $1 дийнахь}}',
+'statistics-mostpopular' => 'Дукху хьоьжу агӀонаш',
 
 'pageswithprop' => 'АгӀонаш цхьадолу къастамашца',
 'pageswithprop-legend' => 'АгӀонаш цхьадолу къастамашца',
 'pageswithprop-text' => 'Кхузахь гойтуш ю агӀонаш цхьадолу къастамаш куьйга юху билгал даьхнарш.',
 'pageswithprop-prop' => 'Къастаман цӀе:',
+'pageswithprop-submit' => 'Лаха',
 
 'doubleredirects' => 'Шалха дIасахьажийнарш',
 'doubleredirectstext' => 'ХӀокху агӀонехь ю дӀасахьажорашан тӀе хьажийна йолу дӀасахьажораш.
 <del>ТӀехула сиз хаькхна </del>нисйина чарна.',
 'double-redirect-fixed-move' => 'АгӀон [[$1]] цӀе хийцина, хӀинца иза дӀахьажийна оцу [[$2]]',
+'double-redirect-fixer' => 'ДӀасахьажинарш нисерг',
 
 'brokenredirects' => 'ДIахаьдна долу дIасахьажораш',
 'brokenredirectstext' => 'Лахара дӀасахьажийнарш ю йоцучу агӀонийн тӀе хьажийна:',
-'brokenredirects-edit' => 'нисйé',
+'brokenredirects-edit' => 'нисъе',
 'brokenredirects-delete' => 'дӀаяккха',
 
 'withoutinterwiki' => 'Юкъарвики-хьажорагаш йоцу агӀонаш',
@@ -1711,12 +1919,15 @@ PICT # тайп тайпан
 
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|байт}}',
-'ncategories' => '$1 {{PLURAL:$1|категори|категореш|категореш}}',
-'ninterwikis' => '$1 {{PLURAL:$1|1=юкъарвики-хьажораг|юкъарвики-хьажорагаш}}',
-'nlinks' => '$1 {{PLURAL:$1|1=хьажораг|хьажорагаш}}',
-'nmembers' => '$1 {{PLURAL:$1|1=хӀума|хӀумнаш}}',
-'nimagelinks' => 'Лелош ю $1 {{PLURAL:$1|агӀоначохь|агӀонашкахь|агӀонашкахь}}',
-'ntransclusions' => 'лелош ю $1 {{PLURAL:$1|агӀоначохь|агӀонашкахь|агӀонашкахь}}',
+'ncategories' => '$1 {{PLURAL:$1|категори|категореш}}',
+'ninterwikis' => '$1 {{PLURAL:$1|1=юкъарвики-хьажораг|юкъарвики-хьажоргаш}}',
+'nlinks' => '$1 {{PLURAL:$1|1=хьажораг|хьажоргаш}}',
+'nmembers' => '$1 {{PLURAL:$1|хӀума|хӀумнаш}}',
+'nmemberschanged' => '$1 → $2 {{PLURAL:$2|хӀума|хӀумнаш}}',
+'nrevisions' => '$1 {{PLURAL:$1|верси|версеш}}',
+'nviews' => '$1 {{PLURAL:$1|хьажар}}',
+'nimagelinks' => 'Лелош ю $1 {{PLURAL:$1|агӀонгахь|агӀонашкахь}}',
+'ntransclusions' => 'лелош ю $1 {{PLURAL:$1|агӀонгахь|агӀонашкахь}}',
 'specialpage-empty' => 'Дехаро хӀумма ца елла.',
 'lonelypages' => 'Байлахь йисина агIонаш',
 'lonelypagestext' => 'Кхузахь ю {{grammar:genitive|{{SITENAME}}}} кхечу агӀонашкахь тӀе хьажийна хьажорагаш йоцу агӀонаш.',
@@ -1726,6 +1937,7 @@ PICT # тайп тайпан
 'uncategorizedtemplates' => 'Категореш йоцу кепаш',
 'unusedcategories' => 'Йаьсса категореш',
 'unusedimages' => 'Лелош доцу файлаш',
+'popularpages' => 'ГӀараяьлла агӀонаш',
 'wantedcategories' => 'Оьшуш йолу категореш',
 'wantedpages' => 'Оьшуш йолу агIонаш',
 'wantedfiles' => 'Оьшуш йолу файлаш',
@@ -1740,7 +1952,7 @@ PICT # тайп тайпан
 'mostimages' => 'Массарел дуккха лелайо файлаш',
 'mostinterwikis' => 'Дуккха юкъарвики хьажорагаш тӀе тоьхна йолу агӀонаш',
 'mostrevisions' => 'Сих сиха нисйина йолу агIонаш',
-'prefixindex' => 'Хьалха агlонашан цlераш хlотто йеза',
+'prefixindex' => 'Хьалха агӀонашан цӀераш хӀотто йеза',
 'prefixindex-namespace' => 'Хьалха агӀонашан цӀераш хӀотто еза («{{ns:$1}}»)',
 'prefixindex-strip' => 'Хиламийн могӀам чура префикс къайлаяккха',
 'shortpages' => 'Боцоа яззамаш',
@@ -1749,11 +1961,21 @@ PICT # тайп тайпан
 'protectedpages' => 'ГIаролла дина агIонаш',
 'protectedpages-indef' => 'Хан йоцуш гӀоралла динарш бен',
 'protectedpages-cascade' => 'Чахчарин гӀоралла бен',
+'protectedpages-noredirect' => 'Къайлаяха дӀасахьажийнарш',
+'protectedpages-timestamp' => 'Терахь/хан',
+'protectedpages-page' => 'АгӀо',
+'protectedpages-expiry' => 'Чекхйолу',
+'protectedpages-performer' => 'Декъашхо ларор',
+'protectedpages-params' => 'ГӀаролийн параметраш',
+'protectedpages-reason' => 'Бахьна',
+'protectedpages-unknown-timestamp' => 'Хууш дац',
+'protectedpages-unknown-performer' => 'Хууш доцу декъашхо',
 'protectedtitles' => 'ГIаролла дина цIераш',
 'listusers' => 'Декъашхой могlам',
 'listusers-editsonly' => 'Цхаъ мукъане а хийцам бина декъашхой гайта',
 'listusers-creationsort' => 'Кхоьллина хене хьаьжна нисъяр',
 'listusers-desc' => 'Харжа къезиг хиларца',
+'usereditcount' => '$1 {{PLURAL:$1|нисдар|нисдарш}}',
 'usercreated' => '{{GENDER:$3|дӀавазвелла|дӀаязелла}} $1 $2',
 'newpages' => 'Керла агlонаш',
 'newpages-username' => 'Декъашхо:',
@@ -1768,6 +1990,7 @@ PICT # тайп тайпан
 'nopagetext' => 'Ишта агӀо яц.',
 'pager-newer-n' => '{{PLURAL:$1|алсамо керла 1|алсамо керланаш $1}}',
 'pager-older-n' => '{{PLURAL:$1|алсамо шира 1|алсамо ширниш $1}}',
+'suppress' => 'Хьулдар',
 
 # Book sources
 'booksources' => 'Жайнан хьосташ',
@@ -1800,12 +2023,17 @@ PICT # тайп тайпан
 'allpages-bad-ns' => '{{SITENAME}} кху чохь ана цlераш яц «$1».',
 'allpages-hide-redirects' => 'Къайлаяха дӀасахьажийнарш',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'Хьажа тӀехьарчу версега.',
+
 # Special:Categories
 'categories' => 'Категореш',
 'categoriespagetext' => '{{PLURAL:$1|1=Лахара категореш чохь ю|Лахара категореш чохь ю}} агӀонаш я медиа-файлаш.
 Кхузахь гойтуш яц [[Special:UnusedCategories|лелош йоцу категореш]].
 Кхин дӀа [[Special:WantedCategories| хийла еза категореш]].',
 'categoriesfrom' => 'Гучé яха категореш, оцу:',
+'special-categories-sort-count' => 'нисъе дукхаллица',
+'special-categories-sort-abc' => 'нисъе абатца',
 
 # Special:DeletedContributions
 'deletedcontributions' => 'Декъашхочун дӀабяккхина къинхьегам',
@@ -1815,6 +2043,7 @@ PICT # тайп тайпан
 # Special:LinkSearch
 'linksearch' => 'Арахьара хьажораг',
 'linksearch-pat' => 'Лаха кеп:',
+'linksearch-ns' => 'ЦӀерийн ана:',
 'linksearch-ok' => 'Лаха',
 'linksearch-text' => 'Лело мега хӀоттош йолу символаш, масала, <code>*.wikipedia.org</code>.
 Лакхара даржан домен мукъа хила еза , масала<code>*.org</code><br />
@@ -1825,13 +2054,14 @@ PICT # тайп тайпан
 'listusersfrom' => 'Гучé баха декъашхой, болалуш болу тӀера:',
 'listusers-submit' => 'Гайта',
 'listusers-noresult' => 'Декъашхой цакарий.',
+'listusers-blocked' => '(блоктоьхна)',
 
 # Special:ActiveUsers
 'activeusers' => 'Жигар декъашхой могlам',
 'activeusers-intro' => 'Лахахь гойтуш бу  {{PLURAL:$1|1=тӀаьхьара $1 динахь|тӀаьхьара $1 деношкахь}} хийцамаш бина декъашхой.',
 'activeusers-count' => '{{PLURAL:$3|1=тӀаьхьарчу $3 динахь|тӀаьхьара $3 деношкахь}} $1 {{PLURAL:$1|1=нисдар|нисдарш}} дина',
 'activeusers-from' => 'Гучé баха декъашхой, болалуш болу тӀера:',
-'activeusers-hidebots' => 'Къайлабаха шабелхалой',
+'activeusers-hidebots' => 'Къайлабаха боташ',
 'activeusers-hidesysops' => 'Къайлабаха куьйгалхой',
 'activeusers-noresult' => 'Декъашхой цакарий.',
 
@@ -1845,13 +2075,17 @@ PICT # тайп тайпан
 'listgrouprights-rights' => 'Бакъонаш',
 'listgrouprights-helppage' => 'Help:Тобан бакъонаш',
 'listgrouprights-members' => '(тобан могlам)',
+'listgrouprights-addgroup' => '{{PLURAL:$2|тоба|тобанаш}} тӀетоха ло: $1',
+'listgrouprights-removegroup' => '{{PLURAL:$2|тобан чура дӀабаха|тобанаш чура дӀабаха}} ло: $1',
 'listgrouprights-addgroup-all' => 'массо тобанийн юкъатоха йиш ю',
+'listgrouprights-removegroup-all' => 'тобан чура дӀабаха ло',
 
 # Email user
 'mailnologintext' => 'Электронан кехаташ кхехьийта йиш хилийта [[Special:UserLogin|системин чугӀо]] кхин декъашхошка хаамаш кхехьийта хьа [[Special:Preferences|гӀирса чохь]] бакъалла долу электронан почтан адрес хила деза.',
 'emailuser' => 'Декъашхочун хааман кехат',
 'emailuser-title-target' => 'Декъашхочунга кехат яздар',
 'emailuser-title-notarget' => 'Декъашхочунга кехат яздар',
+'emailpage' => 'Декъашхочунга кехат яздар',
 'emailpagetext' => 'ХӀокху агӀона гӀоьнца йиш ю {{GENDER:$1|декъашхочун}} электронан почте хаам бахьийта.
 Хьоьга жоп лур ду ахьа [[Special:Preferences|хьайн гӀирса чу]] дӀаяздина долу адрес тӀе.',
 'defemailsubject' => 'Хаам {{grammar:genitive|{{SITENAME}}}} чура бу',
@@ -1863,14 +2097,20 @@ PICT # тайп тайпан
 'emailmessage' => 'Хаам:',
 'emailsend' => 'ДӀадахьийта',
 'emailccme' => 'Соьга а кхосса хааман копи.',
+'emailccsubject' => '$1: $2 бохьуьтучу хааман копи',
 'emailsent' => 'Кехат дӏадахьийтина',
 'emailsenttext' => 'Хьан электроннан хаам дӏабахьийтина.',
 'emailuserfooter' => 'ХӀара хаам бахийтинера $1 {{GENDER:$1|декъащхочо}} $2 {{GENDER:$2|декъащхочунга}} «декъашхочунга хаам» олучу функцин гӀоьнца {{SITENAME}} проектан.',
 
+# User Messenger
+'usermessage-summary' => 'Битта системан хаам.',
+'usermessage-editor' => 'Системан дӀакхачор',
+
 # Watchlist
 'watchlist' => 'Тергаме могӀам',
 'mywatchlist' => 'Тергаме могӀам',
 'watchlistfor2' => 'Цунна $1 $2',
+'nowatchlist' => 'Ха тергаме могӀа баьсса бу.',
 'watchlistanontext' => 'Тергаме могӀоме хьажа я тая кхочушде $1.',
 'watchnologin' => 'Системин чугӀо',
 'addwatch' => 'Тергаме могӀам юкъа тоха',
@@ -1881,11 +2121,14 @@ PICT # тайп тайпан
 'watch' => 'Тидам бе',
 'watchthispage' => 'Тергам бé хlокху агlон',
 'unwatch' => 'Тергамах къаста',
+'unwatchthispage' => 'ДӀадаккха терго яр',
 'notanarticle' => 'Бац яззам',
+'notvisiblerev' => 'Верси дӀаяьккхина хила',
 'watchlist-details' => 'Хьан тергаме могlамца $1 {{PLURAL:$1|агlо|агlонаш|агlонаш}} ю, дийцаре агlонаша йоцуш.',
+'wlheader-enotif' => 'Электронан почте хаамаш байтар латина ду.',
 'wlheader-showupdated' => "Хийцам бина агӀонаш '''Ӏаьржа''' шрифтцан билгальяха ю.",
 'wlnote2' => 'Лахахьа гайтина {{PLURAL:$1|тӀеххьара сахьт}} чохь бина хийцамаш $2 $3.',
-'wlshowlast' => 'Гайта тlаьххьара $1 сахьташ $2 денош $3',
+'wlshowlast' => 'Гайта тӀаьххьара $1 сахьт $2 де $3',
 'watchlist-options' => 'Тергаме могlаман гlирс нисбар',
 
 # Displayed when you click the "watch" button and it is in the process of watching
@@ -1893,6 +2136,17 @@ PICT # тайп тайпан
 'unwatching' => 'Тергаме могӀанан чура дӀаяккхар…',
 
 'enotif_reset' => 'Билгал йаь ерриге агӀонаш хьаьжна санна',
+'enotif_impersonal_salutation' => 'Декъашхо {{grammar:genitive|{{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 дӀаяьккхина, хьажа $3',
+'enotif_body_intro_created' => 'Проектан «{{SITENAME}}» агӀо «$1» $PAGEEDITDATE {{gender:$2|декъашхочо}} $2 кхоьллина, карара верси ю : $3',
+'enotif_body_intro_moved' => 'Проектан «{{SITENAME}}» агӀо «$1» $PAGEEDITDATE {{gender:$2|декъашхочо}} $2 цӀе хийцина, карара верси ю : $3',
+'enotif_body_intro_restored' => 'Проектан «{{SITENAME}}» агӀо «$1» $PAGEEDITDATE {{gender:$2|декъашхочо}} $2 кхоьллина, карара верси ю : $3',
+'enotif_body_intro_changed' => 'Проектан «{{SITENAME}}» агӀо «$1» $PAGEEDITDATE {{gender:$2|декъашхочо}} $2 хийцам бина, карара верси ю : $3',
 'changed' => 'хийцина',
 
 # Delete
@@ -1913,15 +2167,15 @@ PICT # тайп тайпан
 'dellogpage' => 'ДӀадаьхнарш долу тéптар',
 'dellogpagetext' => 'Лахахь гойтуш ду дӀадахаршан тептар.',
 'deletionlog' => 'дӀадаьхнарш долу тéптар',
-'deletecomment' => 'Ð\91аÑ\85Ñ\8cан:',
-'deleteotherreason' => 'Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cан/Ñ\82lетохар:',
-'deletereasonotherlist' => 'Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cан',
+'deletecomment' => 'Ð\91аÑ\85Ñ\8cна:',
+'deleteotherreason' => 'Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cна/Ñ\82Ó\80етохар:',
+'deletereasonotherlist' => 'Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cна',
 'deletereason-dropdown' => '* Даржина долу дӀаяккхаран баьхьанаш 
 ** зулма  
 ** авторан лаамца
 ** авторан бакъонаш талхор',
 'delete-edit-reasonlist' => 'Бахьанин список нисяр',
-'deleting-backlinks-warning' => "'''ДӀахьедар.''' Ахьа дӀайоккхуш йолчун тӀе товжийна кхин агӀонаш ю.",
+'deleting-backlinks-warning' => "'''ДӀахьедар:''' Ахьа дӀайоккхуш йолчун тӀе товжийна [[Special:WhatLinksHere/{{FULLPAGENAME}}|кхин агӀонаш]] ю.",
 
 # Rollback
 'rollback' => 'Юхабаккха хийцам',
@@ -1950,7 +2204,7 @@ PICT # тайп тайпан
 'protect-title' => 'Оцунна «$1» гӀоралла дар',
 'prot_1movedto2' => '«[[$1]]» цӀе хийцина оцу «[[$2]]»',
 'protect-legend' => 'Бакъде гӀоралла дар',
-'protectcomment' => 'Ð\91аÑ\85Ñ\8cан:',
+'protectcomment' => 'Ð\91аÑ\85Ñ\8cна:',
 'protectexpiry' => 'Чекхйолу:',
 'protect_expiry_invalid' => 'Нийса йоцу хан гlаролла дlайаларехь.',
 'protect_expiry_old' => 'Хан чаккхе — хьалхалера.',
@@ -1971,7 +2225,7 @@ PICT # тайп тайпан
 'protect-othertime' => 'Кхин хан:',
 'protect-othertime-op' => 'кхин хан',
 'protect-otherreason' => 'Кхин бахьна/тӀетохар:',
-'protect-otherreason-op' => 'Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cан',
+'protect-otherreason-op' => 'Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cна',
 'protect-dropdown' => '* ГӀоралла дарна баьхьаш 
 ** сих-сиха зулам дар 
 ** дуккха спам хилар
@@ -1996,10 +2250,10 @@ PICT # тайп тайпан
 'restriction-level-all' => 'массо барам',
 
 # Undelete
-'undelete' => 'ДӀаяхна агӀонашка хьажар',
-'undeletepage' => 'Ð\94Ó\80аÑ\8fÑ\85ина агӀонашка хьажар а меттахӀоттор а',
+'undelete' => 'Ð\94Ó\80аÑ\8fÑ\8cÑ\85на Ð°Ð³Ó\80онаÑ\88ка Ñ\85Ñ\8cажаÑ\80',
+'undeletepage' => 'Ð\94Ó\80аÑ\8fÑ\8cÑ\85на агӀонашка хьажар а меттахӀоттор а',
 'undeletepagetitle' => "'''Лахахь гайтина хӀокху [[:$1]] агӀона дӀаяхина версеш'''.",
-'viewdeletedpage' => 'ДӀаяхна йолу агӀонашка хьажар',
+'viewdeletedpage' => 'Ð\94Ó\80аÑ\8fÑ\8cÑ\85на Ð¹Ð¾Ð»Ñ\83 Ð°Ð³Ó\80онаÑ\88ка Ñ\85Ñ\8cажаÑ\80',
 'undelete-fieldset-title' => 'МеттахӀоттае версеш',
 'undeleteextrahelp' => "Ерриге агӀонан истори меттахӀоттая массо а билгалонаш еса а йити '''«{{int:undeletebtn}}»''' тӀетаӀае.
 ЦхӀайолу агӀонан версеш меттахӀоттая хьалха меттахӀоттош йолу версеш билгалъяьхна тӀетагӀе '''«{{int:undeletebtn}}»'''.",
@@ -2012,8 +2266,8 @@ PICT # тайп тайпан
 'undeletelink' => 'хьажа/меттахӀоттае',
 'undeleteviewlink' => 'хьажа',
 'undeleteinvert' => 'Къастае массо',
-'undeletecomment' => 'Ð\91аÑ\85Ñ\8cан:',
-'undeletedrevisions' => '$1 {{PLURAL:$1|хийцамаш|хийцамаш|хийцамаш}} меттахӀоттайина',
+'undeletecomment' => 'Ð\91аÑ\85Ñ\8cна:',
+'undeletedrevisions' => '{{PLURAL:$1|меттахӀоттайина}} $1 {{PLURAL:$1|хийцам}}',
 'undeletedfiles' => '$1 {{PLURAL:$1|файл меттахӀоттайина|файлаш меттахӀоттайина|файлаш меттахӀоттайина}}',
 'undeletedpage' => "'''МеттахӀоттайина агӀо «$1».'''
 
@@ -2056,26 +2310,28 @@ PICT # тайп тайпан
 'sp-contributions-blocked-notice-anon' => 'ХӀара IP-адрес хӀинца блоктоьхна ду.
 Лахахь гойту блоктохаршан тептар чура тӀаьхьарлера дӀаяздар:',
 'sp-contributions-search' => 'Къинхьегам лахар',
+'sp-contributions-suppresslog' => 'Декъашхочун дӀабаьккхина къинхьегам',
 'sp-contributions-username' => 'IP-адрес я декъашхочун цӀе:',
 'sp-contributions-toponly' => 'ТӀаьхьара бина хийцамаш гайта',
+'sp-contributions-newonly' => 'АгӀонаш кхоллар бен ма гайта',
 'sp-contributions-submit' => 'Лаха',
 
 # What links here
-'whatlinkshere' => 'Ð¥Ñ\8cажоÑ\80агаÑ\88 ÐºÑ\85Ñ\83зе',
+'whatlinkshere' => 'Хьажоргаш кхузе',
 'whatlinkshere-title' => 'ХӀокхунца «$1» йолу агӀонаш',
 'whatlinkshere-page' => 'Агlо:',
 'linkshere' => "ТӀаьхьайогӀу агӀонаш оцу '''[[:$1]]''': хьажорагца ю",
 'nolinkshere' => "ХӀокху '''[[:$1]]''' агӀона тӀе кхечу агӀонашкахь хьажорагаш яц.",
 'nolinkshere-ns' => "Хаьржинчу анахь яц '''[[:$1]]''' цӀе йолу агӀонаш",
-'isredirect' => 'агlо-дlасахьажайар',
+'isredirect' => 'агӀо-дӀасахьажайар',
 'istemplate' => 'лата йe',
 'isimage' => 'Файлан хьажораг',
 'whatlinkshere-prev' => '{{PLURAL:$1|1=хьалхайодарг|хьалхайодарш}} $1',
 'whatlinkshere-next' => '{{PLURAL:$1|тlаьхьайогlург|тlаьхьайогlурш|тlаьхьайогlурш}} $1',
-'whatlinkshere-links' => 'â\86\90 Ñ\85Ñ\8cажоÑ\80агаÑ\88',
-'whatlinkshere-hideredirs' => '$1 дlасахьажйар',
+'whatlinkshere-links' => '← хьажоргаш',
+'whatlinkshere-hideredirs' => '$1 дӀасахьажорш',
 'whatlinkshere-hidetrans' => '$1 латораш',
-'whatlinkshere-hidelinks' => '$1 Ñ\85Ñ\8cажоÑ\80агаÑ\88',
+'whatlinkshere-hidelinks' => '$1 хьажоргаш',
 'whatlinkshere-hideimages' => '$1 файлийн хьажорагаш',
 'whatlinkshere-filters' => 'Литтарш',
 
@@ -2089,7 +2345,7 @@ PICT # тайп тайпан
 Лахахь билгалде блоктохарна бахьна.',
 'ipadressorusername' => 'IP-адрес я декъашхочун цӀе:',
 'ipbexpiry' => 'Хан чекхйолу:',
-'ipbreason' => 'Ð\91аÑ\85Ñ\8cан:',
+'ipbreason' => 'Ð\91аÑ\85Ñ\8cна:',
 'ipbreason-dropdown' => '* Белхан некъ дӀакъовлар бахьанаш:
 ** Харца хаам бар
 ** АгӀонан чураниг дӀаяккхар
@@ -2134,8 +2390,10 @@ PICT # тайп тайпан
 'blocklist-expiry' => 'Чекхйолу',
 'blocklist-by' => 'Цунна блоктоьхана куьйгалхо',
 'blocklist-params' => 'Блоктохаран параметраш',
-'blocklist-reason' => 'Ð\91аÑ\85Ñ\8cан:',
+'blocklist-reason' => 'Ð\91аÑ\85Ñ\8cна:',
 'ipblocklist-submit' => 'Лаха',
+'ipblocklist-localblock' => 'Локальни блоктохар',
+'ipblocklist-otherblocks' => '{{PLURAL:$1|Кхин блоктохар|Кхин блоктохарш}}',
 'infiniteblock' => 'хан чаккхе йоцуш',
 'expiringblock' => 'чекхйолу $1 $2',
 'anononlyblock' => 'цӀе хьулйина декъашхойн бен',
@@ -2143,10 +2401,13 @@ PICT # тайп тайпан
 'createaccountblock' => 'цамагдо керла дӀаяздарш кхоллар',
 'emailblock' => 'цамаго кехаташ кхехӀита',
 'blocklist-nousertalk' => 'шин дийцаре агӀо тая лууш дац',
+'ipblocklist-empty' => 'Блоктохаран могӀам баьсса бу.',
+'ipblocklist-no-results' => 'И адрес блоктоьхна дац.',
 'blocklink' => 'блоктоха',
 'unblocklink' => 'дӀаякхаблок',
 'change-blocklink' => 'хийцам бе блоктохарна',
 'contribslink' => 'къинхьегам',
+'emaillink' => 'дӀадахьийта кехат',
 'blocklogpage' => 'Блоктоьхарш болу тептар',
 'blocklog-showlog' => '{{GENDER:$1|ХӀокху декъашхочун хьалхо блоктоьхна хила}}.
 Лахахь гойту блоктохарш долу тептар:',
@@ -2161,6 +2422,7 @@ PICT # тайп тайпан
 'block-log-flags-nousertalk' => 'шин дийцаре агӀо тая лууш дац',
 'block-log-flags-hiddenname' => 'декъашхочун цӀе къайлаяьккхина',
 'ipb-needreblock' => 'ХӀара $1 {{GENDER:$1|блоктоьхна ву|блоктоьхна ю}}. Лаьий хьуна блоктохаран параметраш хийца?',
+'ipb-otherblocks-header' => '{{PLURAL:$1|Кхин блоктохар|Кхин блоктохарш}}',
 'unblock-hideuser' => 'Декъашхочун тӀера блокдӀаяккха хьа таро яц, цуна цӀе хьулйина хилар бахьанехь.',
 
 # Move page
@@ -2219,7 +2481,7 @@ PICT # тайп тайпан
 'movesubpage' => '{{PLURAL:$1|1=Бухара агӀо|Бухара агӀонаш}}',
 'movesubpagetext' => 'ХӀокху агӀона $1 {{PLURAL:$1|1=бухара агӀо ю|бухара агӀонаш ю}}.',
 'movenosubpage' => 'ХӀокху агӀона бухара агӀонаш яц.',
-'movereason' => 'Ð\91аÑ\85Ñ\8cан:',
+'movereason' => 'Ð\91аÑ\85Ñ\8cна:',
 'revertmove' => 'юхаяккха',
 'delete_and_move' => 'Цle а хуьйцуш дӀаяккха',
 'delete_and_move_text' => '== ДӀаяккха хьокъ ю ==
@@ -2230,6 +2492,10 @@ PICT # тайп тайпан
 'selfmove' => 'АгӀона цӏе хийца йиш яц: и цӏе хӏокху агӏона йолуш ю.',
 'immobile-source-page' => 'ХӀокху агӏона цӏе хийца йиш яц.',
 'bad-target-model' => 'Йиш яц хийца $1 оцу $2: цхьаьна ца догӀу моделин хаамаш.',
+'imagenocrossnamespace' => 'Кхечу цӀерийн меттигийн чура цӀе файлан тилла йиш яц',
+'nonfile-cannot-move-to-file' => 'АгӀонийн цӀераш хийца йиш яц',
+'imagetypemismatch' => 'Файлан керла шоръелла оцунна тайпанца йогӀуш яц',
+'imageinvalidfilename' => 'Файлан цӀе гӀалате ю',
 'move-leave-redirect' => 'Ӏадйита дӀасахьажораг',
 'protectedpagemovewarning' => "'''ДӀахьедар.''' ХӀара агӀо гӀаролла йина ю; цӀе хийца я нисйа а бакъо йолуш куьйгалхой бе бац.
 Лахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
@@ -2271,14 +2537,22 @@ PICT # тайп тайпан
 
 # Thumbnails
 'thumbnail-more' => 'Доккха де',
+'filemissing' => 'Файл цакарий',
 'thumbnail_error' => 'Миниатюра кхолларна гӀалат: $1',
+'thumbnail_error_remote' => 'ГӀалатах хаам $1:
+$2',
 
 # Special:Import
 'import' => 'АгӀонаш чуяхар',
 'import-interwiki-source' => 'Вики-хьост/агlо:',
 'import-interwiki-templates' => 'Лата де массо кепаш',
+'import-interwiki-submit' => 'Импорт ян',
 'import-upload-filename' => 'Файлан цӀе:',
 'import-comment' => 'Билгалдаккхар:',
+'import-revision-count' => '$1 {{PLURAL:$1|верси|версеш}}',
+'importnopages' => 'Импорт ян агӀонаш яц.',
+'imported-log-entries' => '{{PLURAL:$1|Тептар чура импорт дина $1 дӀаяздар|Тептар чура импорт дина $1 дӀаяздарш}}.',
+'importfailed' => 'Импорт ян цаелира: $1',
 'importnosources' => 'Юкъаравики-импортан хьост хаьржина яцара, дуьхьала хийцамашан истори чуяккхар дӀадайина ду.',
 'import-error-special' => '«$1» агӀо импорт йина яц, и къастина цӀерийн меттигашан юкъайогӀуш хиларна.',
 
@@ -2290,7 +2564,7 @@ PICT # тайп тайпан
 'tooltip-pt-userpage' => 'Декъашхочуьна агlо',
 'tooltip-pt-mytalk' => 'Сан дийцаре агlо',
 'tooltip-pt-preferences' => 'Хьан гlирс нисбар',
-'tooltip-pt-watchlist' => 'Ахьа тергам бо агlонаши хийцаман могlам',
+'tooltip-pt-watchlist' => 'Ахьа тергам бо агӀонийн хийцаман могӀам',
 'tooltip-pt-mycontris' => 'Хьан нисдаран могlам',
 'tooltip-pt-login' => 'Хlокху гlирса чохь дlавазвала/яла мега, амма иза тlедожош дац.',
 'tooltip-pt-logout' => 'Дlадерзадо болх бар',
@@ -2320,10 +2594,10 @@ PICT # тайп тайпан
 'tooltip-t-recentchangeslinked' => 'Тlаьхьарлера хийцамаш хlокху агlонашкахь, мичхьа хьажийна хlара агlо',
 'tooltip-feed-rss' => 'Хьагайтар оцу RSS цани хlокху агlон',
 'tooltip-feed-atom' => 'Хьагайтар оцу Atom цани хlокху агlон',
-'tooltip-t-contributions' => 'Хlокху декъашхочо хийцина йолу агlонашан могlам',
+'tooltip-t-contributions' => 'ХӀокху декъашхочо хийцина йолу агӀонийн могӀам',
 'tooltip-t-emailuser' => 'ДӀабахьийта хаам оцу декъашхона',
 'tooltip-t-upload' => 'Чуйаха файлаш',
-'tooltip-t-specialpages' => 'Белха агlонаши могlам',
+'tooltip-t-specialpages' => 'Белха агӀонанийн могӀам',
 'tooltip-t-print' => 'Хlокху агlонна зорба туху башхо',
 'tooltip-t-permalink' => 'Даима йолу хьажораг хӀокху башха агӀонна',
 'tooltip-ca-nstab-main' => 'Яззамна чулацам',
@@ -2341,8 +2615,10 @@ PICT # тайп тайпан
 'tooltip-diff' => 'Гайта долуш долу йозанах бина болу хийцам.',
 'tooltip-compareselectedversions' => 'Хlокху шина хаьржина агlона башхо муха ю хьажа.',
 'tooltip-watch' => 'ТӀетоха хӀара агӀо сан тергаме могӀанан юкъа',
+'tooltip-watchlistedit-raw-submit' => 'Тергаме могӀам карлабаккха',
+'tooltip-upload' => 'Доладе чуяккхар',
 'tooltip-rollback' => 'Цхьоз тlетаlийча дlабаккха кхечо бина болу тlаьххьара хийцам',
-'tooltip-undo' => 'Дlабаккха бина болу хийцам а хьалхьажар гойтуш, дlайаккхарна бахьан гайта аьтту беш',
+'tooltip-undo' => 'ДӀабаккха бина болу хийцам а хьалхьажар гойтуш, дӀаяккхарна бахьна гайта аьтту беш',
 'tooltip-summary' => 'Язъе йоца цӀе',
 
 # Stylesheets
@@ -2359,17 +2635,39 @@ PICT # тайп тайпан
 'others' => 'кхин',
 'siteusers' => '{{PLURAL:$2|1=декъашхо|декъашхой}} {{grammar:genitive|{{SITENAME}}}} $1',
 'anonusers' => '{{PLURAL:$2|1=цӀе хьулйина декъашхо|цӀе хьулйина декъашхой}} {{grammar:genitive|{{SITENAME}}}} $1',
+'creditspage' => 'Баркаллаш',
 'nocredits' => 'Бац декъашхойн могlам хlокху яззамца',
 
 # Spam protection
 'spamprotectiontitle' => 'Совбиларна литтар',
 'spamprotectiontext' => 'Хьо дӀаязъян гӀерта агӀо спам-литтаро дӀакъоьвлина.
 Цуна бахьна хила там бу агӀона чохь зулам литтаран чутоьхна йолу хьажораг хилар.',
+'spambot_username' => 'Спам дӀацӀаняр',
 
 # Info page
 'pageinfo-header-basic' => 'Коьрта хаам',
+'pageinfo-header-edits' => 'Хийцаман истори',
+'pageinfo-header-restrictions' => 'АгӀона гӀоралла дар',
+'pageinfo-header-properties' => 'АгӀона билгало',
+'pageinfo-display-title' => 'Гушболу корта',
+'pageinfo-length' => 'АгӀона йохалла (байташкахь)',
+'pageinfo-article-id' => 'АгӀона ID',
 'pageinfo-language' => 'АгӀона мотт',
+'pageinfo-content-model' => 'АгӀона чулацаман модель',
+'pageinfo-robot-policy' => 'Лахарийн системийн индексаци',
+'pageinfo-robot-index' => 'Магийна',
+'pageinfo-robot-noindex' => 'Магийна дац',
+'pageinfo-views' => 'Хьажаран дукхалла',
+'pageinfo-watchers' => 'Хьоьжучера дукхалла',
+'pageinfo-few-watchers' => '{{PLURAL:$1|ТӀаьхьадогӀучерал}} $1 кӀезиг',
+'pageinfo-firstuser' => 'АгӀо кхуллург',
+'pageinfo-firsttime' => 'АгӀо кхоьллина терахь',
+'pageinfo-lastuser' => 'ТӀеххьара тадар дийнарг',
+'pageinfo-lasttime' => 'ТӀеххьара нисдар дина терахь',
+'pageinfo-edits' => 'Массо нисдарийн дукхалла',
+'pageinfo-authors' => 'Башха авторийн дукхалла',
 'pageinfo-toolboxlink' => 'Агlонах болу бовзам',
+'pageinfo-redirectsto' => 'ДӀасахьажорг',
 'pageinfo-redirectsto-info' => 'Хаам',
 'pageinfo-contentpage-yes' => 'ХӀаъ',
 'pageinfo-protect-cascading' => 'Чахчарин гӀоралла кхузара',
@@ -2383,7 +2681,7 @@ PICT # тайп тайпан
 'skinname-vector' => 'Векторни',
 
 # Patrolling
-'markaspatrolledtext' => 'Ð\9fайден Ð°Ð³Ó\8fо Ñ\85илаÑ\80 Ð±Ð¸Ð»Ð³Ð°Ð»Ð¾ Ñ\8fн',
+'markaspatrolledtext' => 'Ð\91илгала Ð¹Ðµ Ñ\85Ó\80аÑ\80а Ð°Ð³Ó\80о Ñ\85Ñ\8cаÑ\8cжна Ñ\81ана',
 'markedaspatrollednotify' => 'АгӀо «$1» пайдане хилар билгалдина',
 
 # Patrol log
@@ -2403,7 +2701,7 @@ PICT # тайп тайпан
 'file-info-size' => '$1 × $2 пиксель, файлан барам: $3, MIME-тайп: $4',
 'file-info-size-pages' => '$1 × $2 пиксель, файлан барам: $3, MIME-тайп: $4, $5 {{PLURAL:$5|1=агӀо|агӀонаш}}',
 'file-nohires' => 'Кхи йоккха гlоле башхо яц.',
-'svg-long-desc' => 'SVG-файл, лартӀахь ю $1 × $2 {{PLURAL:$2|пиксель|пикселш|пикселш}}, файлан барам: $3',
+'svg-long-desc' => 'SVG-файл, лартӀахь ю $1 × $2 пиксель, файлан барам: $3',
 'svg-long-desc-animated' => 'Анимироват йина SVG-файл, номиналан $1 × $2 пиксель, файлан барам: $3',
 'show-big-image' => 'Сурт цlанал лаккхара бакъонца',
 'show-big-image-preview' => 'Барам хьажале: $1.',
@@ -2414,7 +2712,8 @@ PICT # тайп тайпан
 'newimages' => 'Керлачу файлийн галерей',
 'newimages-summary' => 'ХӀокху белхан агӀона чохь гойтуш ю дукха хан йоццуш чуйаьхна файлаш.',
 'newimages-legend' => 'Литтар',
-'showhidebots' => '$1 шабелхалой',
+'showhidebots' => '$1 боташ',
+'noimages' => 'Суьрташ дац.',
 'ilsubmit' => 'Лаха',
 'bydate' => 'терахьашца',
 'sp-newimages-showfrom' => 'Гайта керла файлаш $2, $1 тӀера дуьйна',
@@ -2423,11 +2722,15 @@ PICT # тайп тайпан
 'seconds-abbrev' => '$1оцу',
 'minutes-abbrev' => '$1 мин',
 'hours-abbrev' => '$1 сахь.',
-'hours' => '{{PLURAL:$1|1 сахьт}}',
+'seconds' => '{{PLURAL:$1|$1 секунд}}',
+'minutes' => '{{PLURAL:$1|$1 минут}}',
+'hours' => '{{PLURAL:$1|сахьат}}',
 'days' => '{{PLURAL:$1|$1 де}}',
 'weeks' => '{{PLURAL:$1|$1 кӀира}}',
+'months' => '$1 {{PLURAL:$1|бутт}}',
 'years' => '$1 {{PLURAL:$1|шо}}',
 'ago' => '$1 хьалха',
+'just-now' => 'хӀинца',
 
 # Human-readable timestamps
 'hours-ago' => '$1 {{PLURAL:$1|сахьт}} хьалха',
@@ -2545,6 +2848,7 @@ PICT # тайп тайпан
 'exif-orientation-1' => 'Лартӏахь',
 
 'exif-xyresolution-i' => '$1 тӏадамаш дюйман',
+'exif-xyresolution-c' => '$1 тӀадамаш сантиметрна',
 
 'exif-meteringmode-5' => 'Матрин',
 
@@ -2593,6 +2897,10 @@ PICT # тайп тайпан
 
 # action=watch/unwatch
 'confirm-watch-top' => 'ТӀетоха хӀара агӀо хьан тергаме могӀам юкъа?',
+'confirm-unwatch-top' => 'ДӀаяккха хӀара агӀо хьай тергаме могӀанан юкъар?',
+
+# Separators for various lists, etc.
+'comma-separator' => ',&#32;',
 
 # Multipage image navigation
 'imgmultipageprev' => '← хьалхара агlо',
@@ -2663,6 +2971,7 @@ PICT # тайп тайпан
 'version-ext-colheader-credits' => 'Автораш',
 'version-poweredby-credits' => "ХӀара вики болх беш ю '''[https://www.mediawiki.org/ MediaWiki]''' движок тӀехь, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'кхин',
+'version-poweredby-translators' => 'гочдархой translatewiki.net',
 'version-license-info' => 'MediaWiki ю маьрша программин латораг, шу йиш ю фондас арахецна йолу GNU General Public License лицензица и яржо я хийца а.
 
 MediaWiki яржош ю и шуна пайдане хир яц те аьлла, амма  ЦХЬА ЮКЪАРАХИЛАР ДОЦУШ. Хь. кхин. лицензи мадарра GNU General Public License .
@@ -2671,6 +2980,9 @@ MediaWiki яржош ю и шуна пайдане хир яц те аьлла,
 'version-software' => 'ДӀахӀоттийна программин латтор',
 'version-software-version' => 'Верси',
 'version-entrypoints' => 'ЧугӀо адресин тӀадамаш',
+'version-entrypoints-header-entrypoint' => 'Яздаран тӀадам',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath АгӀона тӀе некъ]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Скриптан тӀе некъ]',
 
 # Special:Redirect
 'redirect' => 'Декъашхочун файлан тӀера дӀасхьажор',
@@ -2702,8 +3014,8 @@ MediaWiki яржош ю и шуна пайдане хир яц те аьлла,
 'specialpages-group-media' => 'Жамlаш оцу медиа-гlирсашан а чуяхарш',
 'specialpages-group-users' => 'Декъашхой а бакъонаш',
 'specialpages-group-highuse' => 'Уггаре дукха лелайо агlонаш',
-'specialpages-group-pages' => 'Агlонаши могlамаш',
-'specialpages-group-pagetools' => 'Гlирсаш оцу агlонашан',
+'specialpages-group-pages' => 'АгӀонийн могӀанаш',
+'specialpages-group-pagetools' => 'ГӀирсаш оцу агӀонашан',
 'specialpages-group-wiki' => 'Хаамаш а гӀирсаш а',
 'specialpages-group-redirects' => 'Дlасахьажош йолу гlуллакхан агlонаш',
 'specialpages-group-spam' => 'Спаман дуьхьала гӀирсаш',
@@ -2724,7 +3036,7 @@ MediaWiki яржош ю и шуна пайдане хир яц те аьлла,
 'tags-active-header' => 'Жигара?',
 'tags-hitcount-header' => 'Къастам бина нисдарш',
 'tags-active-yes' => 'ХӀаъ',
-'tags-edit' => 'нисйé',
+'tags-edit' => 'нисъе',
 'tags-hitcount' => '$1 {{PLURAL:$1|хийцам|хийцамаш|хийцамаш}}',
 
 # Special:ComparePages
index 8a7067e..0c0b317 100644 (file)
@@ -68,7 +68,6 @@ $specialPageAliases = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Binadlisan nga mga sumpay:',
-'tog-justify' => 'Ihusto ang mga parapo',
 'tog-hideminor' => 'Ipakita ang gamayng pag-usab sa mga bag-ong giusab',
 'tog-hidepatrolled' => 'Tagoa ang mga napatrol nga pag-usab sa mga bag-ong giusab',
 'tog-newpageshidepatrolled' => 'Tagoa ang napatrol nga mga panid gikan sa talaan sa mga bag-ong panid',
@@ -77,9 +76,7 @@ $messages = array(
 'tog-numberheadings' => 'Awtomatiko ang pagnumero sa mga heading',
 'tog-showtoolbar' => 'Ipakita ang toolbar sa pag-edit (JavaScript)',
 'tog-editondblclick' => 'I-edit ang panid inig dobol-klik (JavaScript)',
-'tog-editsection' => 'Mausab ang mga seksiyon gamit ang [usba] nga sumpay',
 'tog-editsectiononrightclick' => 'Mahimo ang pag-usab sa seksyon pinaagi sa pag-right click sa titulo sa seksyon (JavaScript kinahanglan)',
-'tog-showtoc' => 'Ipakita ang talaan sa sulod (alang sa mga panid nga may daghan pa sa 3 ka heading)',
 'tog-rememberpassword' => 'Hinumdomi ako sa kining kompyuter (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'Bantayi ang akong gisugdang mga panid',
 'tog-watchdefault' => 'Bantayi ang akong giusab nga mga panid',
@@ -729,7 +726,6 @@ Hinumdomi nga ang ilang indeks sa sulod sa {{SITENAME}} mahimong dugay-dugay na.
 'rows' => 'Mga row:',
 'columns' => 'Mga kolum:',
 'searchresultshead' => 'Pangitaa',
-'resultsperpage' => 'Mga hit matag panid:',
 'stub-threshold' => 'Threshold para sa <a href="#" class="stub">stub link</a> formatting (bytes):',
 'recentchangesdays' => 'Mga adlaw nga ipakita sa bag-ong giusab:',
 'recentchangesdays-max' => 'Maximum $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}}',
index 165e8bb..0a95d28 100644 (file)
@@ -36,7 +36,6 @@ $messages = array(
 'tog-hideminor' => "Nå'na' i mandikike' na tinilaika siha gi påhinan tinilaika gi halacha",
 'tog-extendwatchlist' => "Na'ladångkolu i listan pinilan para u na'annok i manaplikayon na tinilaika siha",
 'tog-usenewrc' => "I manmana'lamaolek na tinilaika (JavaScript)",
-'tog-showtoc' => "Na'annok i fañodda'an (annai guåha mas ki 3 na titulo gi påhina)",
 'tog-rememberpassword' => 'Hasso iyo-ku login gi este na komputadora (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => "Po'lo i påhina siha ni fina'tinas-hu gi iyo-ku listan pinilan.",
 'tog-watchdefault' => "Po'lo i påhina siha ni hu tulaika gi iyo-ku listan pinilan.",
@@ -612,7 +611,6 @@ Fanapunta na para u na'nuebu i kolumna anggen un usa i inachetton nabegasion.",
 'lineno' => 'Liña $1:',
 'compareselectedversions' => "Akompara i tinilaika siha ma'ayek",
 'editundo' => 'funas',
-'diff-multi' => "({{PLURAL:$1|Ti mana'a'annok unu na tinilaika gi talo'|Ti manmana'a'annok $1 na tinilaika siha gi talo'}}.)",
 
 # Search results
 'searchresults' => 'Humuyongña i inaligao',
@@ -664,7 +662,6 @@ Fanapunta na fana'an ti gus nuebu i listan-ñiha i guinahan {{SITENAME}}.",
 'rows' => 'Fila siha:',
 'columns' => 'Kolumna siha:',
 'searchresultshead' => 'Aligao',
-'resultsperpage' => 'Dinanche siha kada påhina:',
 'recentchangesdays' => "Diha siha na para u na'annok gi i tinilaika gi halacha:",
 'recentchangescount' => "Kunatu na tinilaika para u na'annok gi i tinilaika gi halacha:",
 'savedprefs' => "Manmaasåtba i ga'ña-mu siha.",
index 9af4e9b..2ebe419 100644 (file)
@@ -193,9 +193,9 @@ $messages = array(
 'tog-extendwatchlist' => 'لیستی چاودێری درێژبکەرەوە بۆ نیشان دانی ھەموو گۆڕانکارییەکان، نەک تەنھا دوایینەکان.',
 'tog-usenewrc' => 'گۆڕانکارییەکان لە دوایین گۆڕانکارییەکان و لیستی چاودێریدا بە پێی پەڕە پۆلێن بکە (پێویستی بە جاڤاسکریپتە)',
 'tog-numberheadings' => 'ژمارەکردنی خۆگەڕی سەردێڕەکان',
-'tog-showtoolbar' => 'شرÛ\8cتÛ\8c Ø¦Ø§Ù\85رازÛ\95کاÙ\86Û\8c Ø¯Û\95ستکارÛ\8c Ù\86Û\8cشاÙ\86 Ø¨Ø¯Û\95 (JavaScript Ù¾Û\8eÙ\88Û\8cستÛ\95)',
-'tog-editondblclick' => 'دەستکاریی پەڕە بە دووکلیک لەسەر دەق (JavaScript پێویستە)',
-'tog-editsectiononrightclick' => 'ڕێگە بدە بۆ دەستکاری کردنی بەشەکان لە ڕێگەی کلیکی ڕاست کردن لەسەر سەردێڕی بەشەکان (JavaScript پێویستە)',
+'tog-showtoolbar' => 'تÙ\88Ù\88ڵاÙ\85رازÛ\8c Ø¯Û\95ستکارÛ\8c Ù\86Û\8cشاÙ\86 Ø¨Ø¯Û\95',
+'tog-editondblclick' => 'دەستکاریی پەڕە بە دووکرتە',
+'tog-editsectiononrightclick' => 'دەستکاریی بەشەکان بە کرتەی ڕاست لەسەر سەردێڕی بەشەکان',
 'tog-rememberpassword' => 'چوونە ژوورەوەم لەسەر ئەم وێبگەڕە پاشەکەوت بکە (ئەو پەڕی $1 {{PLURAL:$1|ڕۆژ|ڕۆژ}}ە)',
 'tog-watchcreations' => 'ئەو پەڕانەی من دروستم کردوون و ئەو پەڕگانە من بارم کردوون زیاد بکە بە لیستی چاودێڕییەکەم',
 'tog-watchdefault' => 'ئەو پەڕانە  و ئەو پەڕگانە من دەستکاریان دەکەم زیاد بکە بە لیستی چاودێڕییەکەم',
@@ -211,7 +211,7 @@ $messages = array(
 'tog-shownumberswatching' => 'ژمارەی بەکارھێنەرە چاودێڕەکان نیشان بدە',
 'tog-oldsig' => 'واژووی ئێستا:',
 'tog-fancysig' => 'وەکوو ویکیدەق واژووەکە لەبەر چاو بگرە (بێ بەستەرێکی خۆگەڕ)',
-'tog-uselivepreview' => 'لە پێشبینینی زیندوو کەڵک وەرگرە (جاڤاسکریپت پێویستە) (تاقیکاری‌)',
+'tog-uselivepreview' => 'لە پێشبینینی زیندوو کەڵک وەربگرە (تاقیکاری‌)',
 'tog-forceeditsummary' => 'ئەگەر کورتەی دەستکاریم نەنووسی پێم بڵێ',
 'tog-watchlisthideown' => 'دەستکارییەکانم بشارەوە لە پێرستی چاودێری',
 'tog-watchlisthidebots' => 'دەستکارییەکانی بات بشارەوە لە لیستی چاودێری',
@@ -222,7 +222,6 @@ $messages = array(
 'tog-ccmeonemails' => 'کۆپییەک لەو ئیمەیلانە کە بۆ بەکارھێنەرانی تر دەنێرم بۆ خۆشم بنێرە',
 'tog-diffonly' => 'ناوەرۆکی پەڕە لە ژێرەوەی جیاوازییەکاندا نیشان مەدە',
 'tog-showhiddencats' => 'پۆلە شاردراوەکان نیشان بدە',
-'tog-noconvertlink' => 'لەکارخستنی ئاڵوگۆڕی سەرناوی بەستەر',
 'tog-norollbackdiff' => 'لە دوای گەڕاندنەوە جیاوازی نیشان مەدە',
 'tog-useeditwarning' => 'ھۆشیارم بکەوە کاتێک لە پەڕەیەکی دەستکاری بە گۆڕانکاریی پاشەکەوت‌نەکراو دەردەچم',
 
@@ -349,7 +348,6 @@ $messages = array(
 'vector-action-protect' => 'بیپارێزە',
 'vector-action-undelete' => 'سڕینەوە بگەڕێنەوە',
 'vector-action-unprotect' => 'پاراستنی بگۆڕە',
-'vector-simplesearch-preference' => 'گەڕانی ساکار چالاک بکە (تەنیا بۆ پێستەی ڤێکتۆر)',
 'vector-view-create' => 'دروستکردن',
 'vector-view-edit' => 'دەستکاریی بکە',
 'vector-view-history' => 'مێژووەکەی ببینە',
@@ -458,8 +456,8 @@ $1',
 'youhavenewmessages' => '$1ت ھەیە ($2).',
 'youhavenewmessagesfromusers' => 'لە {{PLURAL:$3|بەکارھێنەرێک|$3 بەکارھێنەران}} $1ت ھەیە ($2).',
 'youhavenewmessagesmanyusers' => '$1ت  لە ژمارەیەک بەکارھێنەر ھەیە ( $2 ).',
-'newmessageslinkplural' => '{{PLURAL:$1|پەیامێکی نوێ|پەیامی نوێ}}',
-'newmessagesdifflinkplural' => 'دوایین {{PLURAL:$1|گۆڕانکاری|گۆڕانکارییەکان}}',
+'newmessageslinkplural' => '{{PLURAL:$1|پەیامێکی نوێ|999=پەیامی نوێ}}',
+'newmessagesdifflinkplural' => 'دوایین {{PLURAL:$1|گۆڕانکاری|999=گۆڕانکارییەکان}}',
 'youhavenewmessagesmulti' => 'لە $1 دا پەیامی نوێت ھەیە',
 'editsection' => 'دەستکاری',
 'editold' => 'دەستکاری',
@@ -619,8 +617,6 @@ $2',
 'gotaccountlink' => 'بچۆ ژوورەوە',
 'userlogin-resetlink' => 'وردەکارییەکانی چوونەژوورەوەتت لە بیر کردووە؟',
 'userlogin-resetpassword-link' => 'تێپەڕوشە ڕیسێت بکەوە',
-'helplogin-url' => 'Help:چوونەژوورەوە',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|یارمەتی بۆ چوونەژوورەوە]]',
 'userlogin-loggedin' => 'تۆ ھەر ئێستا بە ناوی {{GENDER:$1|$1}} چوویتە ژوورەوە.
 فۆرمی ژێرەوە بەکاربھێنە بۆ چوونەژوورەوە وەک بەکارھێنەرێکی تر.',
 'userlogin-createanother' => 'ھەژمارێکی تر دروست بکە',
@@ -672,7 +668,7 @@ $2',
 تکایە هەوڵ بدەوە.',
 'passwordtooshort' => 'تێپەڕوشەکەت لانی کەم دەبێ {{PLURAL:$1|١ پیت|$1 پیت}} بێت.',
 'password-name-match' => 'تێپەڕوشەکەت ئەبێ جیاواز بێت لە ناوی بەکارهێنەریت.',
-'mailmypassword' => 'تێپەڕوشەیەکی نوێ بنێرە بۆ ئیمەیلەکەم',
+'mailmypassword' => 'تێپەڕوشەکە ڕێک بخەوە',
 'passwordremindertitle' => 'تێپەڕوشەیەکی نوێی کاتی بۆ  {{SITENAME}}',
 'passwordremindertext' => 'کەسێک (لەوانەیە خۆت، لە ئای‌پی ئەدرەسی $1) داوای تێپەڕوشەیەکی نوێی کردووە بۆ {{SITENAME}} ($4). تێپەڕوشەیەکی کاتی بۆ بەکارهێنەر «$2» دروستکراو و وەک «$3» دانراوه. ئەگەر ئەمە داخوازی تۆ بووە، پێویستت بەوەیە ئێستا بچیتە ژوورەوە و تێپەڕوشەیەکی نوێ هەڵبژێریت. ماوەی‌ تێپەڕوشە کاتییەکەت لە {{PLURAL:$5|یەک ڕۆژدا|$5 ڕۆژدا}} بەسەردەچێت.
 
@@ -682,16 +678,16 @@ $2',
 'passwordsent' => 'تێپەڕوشەیەکی نوێ ناردرا بۆ ئەدرەسی ئیمەیلی تۆمارکراوی «$1».
 تکایە دوای وەرگرتنی دیسان بچۆ ژوورەوە.',
 'blocked-mailpassword' => 'ئادرەسی ئای‌پی تۆ بۆ دەستکاری کردن بەستراوه بۆیە بۆ بەرگری لە بەکارهێنانی نابەجێ ئەنجامی گەڕانەوەی تێپەڕوشە ڕیگە نەدراوە.',
-'eauthentsent' => 'ئی‌مەیلێکی بڕواپێکردن ناردرا بۆ ئەدرەسی ئی‌مەیلی پاڵێوراو. <br />
-پێش ئەوەی ئی‌مەیلی‌تر بنێردرێ بۆ ئەم هەژمارە، بۆ ئەوەی بڕوات پێ‌بکرێ کە ئەو هەژمارە بەڕاستی هین تۆیە، دەبێ ڕێنوماییەکانی ناو ئەو ئی‌مەیلە هەنگاو بە هەنگاو ئەنجام بدەیت.',
+'eauthentsent' => 'ئیمەیلێکی پشتڕاستکردنەوە بۆ ناونیشانی ئیمەیلی دیاریکراو ناردرا.
+پێش ئەوەی ئیمەیلی تر بۆ ئەم هەژمارە بنێردرێ، بۆ پشتڕاستکردنەوەی ئەمەی ئەم هەژمارە بەڕاستی ھی تۆیە، دەبێ پەیڕەوی ڕێکارەکانی ناو ئیمەیلەکە بکەیت.',
 'throttled-mailpassword' => 'بیرهێنەرەوەیەکی وشەی نهێنی پێش ئەمە لە {{PLURAL:$1|کاتژمێر}}ی ڕابردوودا ناردراوە.
 بۆ بەرگری لە بەکارهێنانی خراپ، تاکە یەک بیرهێنەرەوەی وشەی نهێنی هەر {{PLURAL:$1|کاتژمێر}} دەنێردرێت.',
 'mailerror' => 'هەڵە ڕوویدا لە ناردنی ئیمەیل: $1',
 'acct_creation_throttle_hit' => 'بینەرانی ویکی بەکەڵک وەرگرتن لەم ئای‌پی ئەدرەسەی تۆ لە ڕۆژانی ڕابردوودا، دەستیان کردە بە درووست‌کردنی {{PLURAL:$1|هەژمارە}}، کە زۆرینە ڕیگەپێدان لە یەک ماوە‌دایە.
 وەک ئەنجامی ئەو ڕووداوە، ئەو بینەرانی لەم ئای‌پی ئەدرەسە کەڵک وەر دەگرن لەم کاتەدا ناتوانن هەژماری دیکە درووست‌بکەن.',
-'emailauthenticated' => 'ئیمەیلەکەت بە ڕاست ناسرا لە $3ی $2 دا',
-'emailnotauthenticated' => 'ئیمەیلەکەت ھێشتا نەناسراوە.
-Ú¾Û\8cÚ\86 Ø¦Û\8cÙ\85Û\95Û\8cÙ\84Û\8eÚ© Ø¨Û\86 Ø¦Û\95Ù\85 Ø¨Ø§Ø¨Û\95تاÙ\86Û\95Û\8c Ø®Ù\88ارەوە نانێردرێت.',
+'emailauthenticated' => 'ناونیشانی ئیمەیلەکەت پشتڕاست کرایەوە لە $3ی $2دا.',
+'emailnotauthenticated' => 'ناونیشانی ئیمەیلەکەت ھێشتا پشتڕاست نەکراوتەوە.
+Ú¾Û\8cÚ\86 Ø¦Û\8cÙ\85Û\95Û\8cÙ\84Û\8eÚ© Ø¨Û\86 Ø¦Û\95Ù\85 ØªØ§Û\8cبÛ\95تÙ\85Û\95Ù\86دÛ\8cÛ\8cاÙ\86Û\95Û\8c Ú\98Û\8eرەوە نانێردرێت.',
 'noemailprefs' => 'بۆ کەوتنە کاری ئەو تایبەتمەندیانە، لە هەڵبژاردەکانت ئەدرەسەکی ئی‌مێڵ دابین بکە.',
 'emailconfirmlink' => 'ئیمەیلەکەت پشت‌ڕاست بکەرەوە',
 'invalidemailaddress' => 'ناونیشانی ئیمەیل پەسند نەکرا، چون لەوە دەچێت شێوازێکی نادروستی ھەبێت.
@@ -707,6 +703,9 @@ $2',
 'login-throttled' => 'ژمارەیەکی زۆر هەوڵت داوە بۆ چوونە ژوورەوە.
 تکایە پێش هەوڵی دووبارە، نەختێک بوەستە.',
 'loginlanguagelabel' => 'زمان: $1',
+'pt-login' => 'بچۆ ژوورەوە',
+'pt-createaccount' => 'ھەژمار دروست بکە',
+'pt-userlogout' => 'بچۆ دەرەوە',
 
 # Change password dialog
 'changepassword' => 'تێپەڕوشە بگۆڕە',
@@ -1075,23 +1074,21 @@ $3 هۆکاری "$2" خستوەتەڕوو',
 'revdelete-show-file-submit' => 'بەڵێ',
 'revdelete-selected' => "'''{{PLURAL:$2|پێداچوونەوەی هەڵبژێراوی|پێداچوونەوەکانی هەڵبژێراوی}} [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|لۆگی ڕووداوەی هەڵبژێراو|لۆگی ڕووداوە هەڵبژێراوەکان}}:'''",
-'revdelete-text' => "'''پێداچوون و ڕووداوە سڕاوەکان هێشتا لە لاپەڕەی مێژوو و لۆگەکان دەست دەکەون، بەڵام ناوەڕۆکی ھێندێکیان بەرچاوی گشتیی ناکەون.'''<br />
-بەڕێوبەرانی دیکە لە {{SITENAME}}دا، هێشتا دەتوانن دەستکارییە شاراوەکان ببینن و لە ڕێگەی ھەر ئەم فۆڕمەوە بیانگەڕێننەوە، مەگەر ئەوەی بەربەستی دیکە داندرابێت.",
 'revdelete-confirm' => 'تکایە بەڵێن بدە کە دەتەوێ ئەوە بکەی و لە ئەنجامەکانی ئەوە ئاگاداریت و بە پێی [[{{MediaWiki:Policy-url}}|سیاسەتنامە]] ئەنجامی ئەدەی.',
 'revdelete-suppress-text' => "بەرگری دەبێ '''تەنها''' بۆ ئەم بابەتانە بەکاربهێندرێت:<br />
 * سووکایەتیکردن بە کەسایەتییەک<br />
 * بڵاوکردنەوەی زانیاریی تاکەکەسی نەگونجاو<br />
 *: '' ناونیشانی ماڵ یا ژمارە تەلەفۆن و وەک ئەمانە.''<br />",
 'revdelete-legend' => 'سنووردارکردنی دەرکەوتن',
-'revdelete-hide-text' => 'شاردÙ\86Û\95Ù\88Û\95Û\8c Ø¯Û\95Ù\82Û\8c Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95',
+'revdelete-hide-text' => 'دەقی پێداچوونەوە',
 'revdelete-hide-image' => 'ناوەڕۆکی پەڕگە بشارەوە',
 'revdelete-hide-name' => 'داشاردنی مەبەست و کردەوە',
-'revdelete-hide-comment' => 'شاردنەوەی کورتەی دەستکاری',
-'revdelete-hide-user' => 'شاردÙ\86Û\95Ù\88Û\95Û\8c Ù\86اÙ\88Û\8c Ø¨Û\95کارھÛ\8eÙ\86Û\95رÛ\8c/ئاÛ\8c\80\8cÙ¾Û\8c Ø¯Û\95ستکارÛ\8cÚ©Û\95ر',
+'revdelete-hide-comment' => 'کورتەی دەستکاری',
+'revdelete-hide-user' => 'Ù\86اÙ\88Û\8c Ø¨Û\95کارھÛ\8eÙ\86Û\95ر/Ù\86اÙ\88Ù\86Û\8cشاÙ\86Û\8c Ø¦Ø§Û\8cÙ¾Û\8c Ø¯Û\95ستکارÛ\8cÚ©Û\95ر',
 'revdelete-hide-restricted' => 'بەرگری دراوە لە بەڕێوبەران هەر وەک ئەوانی دیکە',
 'revdelete-radio-same' => '(مەیگۆڕە)',
-'revdelete-radio-set' => 'بÛ\95ÚµÛ\8e',
-'revdelete-radio-unset' => 'نا',
+'revdelete-radio-set' => 'شاردراÙ\88Û\95',
+'revdelete-radio-unset' => 'دیار',
 'revdelete-suppress' => 'بەرگری دراوە لە بەڕێوبەران هەر وەک ئەوانی دیکە',
 'revdelete-unsuppress' => 'لابردنی بەربەستەکان لە سەر پێداچوونەوە گەڕێندراوەکان',
 'revdelete-log' => 'هۆکار:',
@@ -1186,7 +1183,7 @@ $1",
 'shown-title' => 'لە هەر پەڕەیەک $1 {{PLURAL:$1|ئەنجام|ئەنجام}} نیشان‌ بدە',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) ببینە',
 'searchmenu-exists' => "'''پەڕەیەک بە ناوی «[[:$1]]» لەم ویکییەدا ھەیە.'''",
-'searchmenu-new' => "'''لەم ویکییەدا پەڕەی « [[:$1]] » دروست بکە!'''",
+'searchmenu-new' => '<strong>لەم ویکییەدا پەڕەی « [[:$1]] » دروست بکە!</strong> {{PLURAL:$2|0=|ھەروەھا بڕوانە پەڕەی دۆزراوەی گەڕانەکەت.|ھەروەھا بڕوانە ئاکامە دۆزراوەکانی گەڕانەکە.}}',
 'searchprofile-articles' => 'پەڕە بە ناوەڕۆکەکان',
 'searchprofile-project' => 'پەڕەکانی یارمەتی و پرۆژە',
 'searchprofile-images' => 'ڕەنگاڵە',
@@ -1251,7 +1248,7 @@ $1",
 'prefs-email' => 'ھەڵبژاردەکانی ئیمەیل',
 'prefs-rendering' => 'ڕواڵەت',
 'saveprefs' => 'پاشەکەوت',
-'restoreprefs' => 'ھەموو ڕێکخستنەکان ببەرەوە بۆ باری بنچینەیی',
+'restoreprefs' => 'ھەموو ڕێکخستنەکان ببەرەوە بۆ باری بنچینەیی (لە ھەموو بەشەکاندا)',
 'prefs-editing' => 'دەستکاریکردن',
 'rows' => 'ڕیزەکان:',
 'columns' => 'ستوونەکان:',
@@ -1304,8 +1301,8 @@ $1",
 'badsig' => 'ئیمزاكه‌ هه‌ڵه‌یه‌، ته‌ماشای كۆدی HTML بكه‌‌',
 'badsiglength' => 'واژووەکەت زۆر درێژە.
 واژوو نابێ لە $1 {{PLURAL:$1|نووسە}} درێژتر بێت.',
-'yourgender' => 'زایەند:',
-'gender-unknown' => 'ئاشکرا نەکراو',
+'yourgender' => 'پێت خۆشە چۆن وەسف بکرێیت؟',
+'gender-unknown' => 'پێم خۆشە باسی نەکەم',
 'gender-male' => 'پیاو',
 'gender-female' => 'ژن',
 'prefs-help-gender' => 'دڵخواز: بۆ بانگ کردنی دروست بە دەستی نەرمامێر.
@@ -1484,8 +1481,8 @@ $1",
 'action-block' => 'بەربەست کردنی ئەم بەکارهێنەرە بۆ دەستکاری‌کردن',
 'action-protect' => 'گۆڕانی ئاستی پارێزراوی بۆ ئەم لاپەڕە',
 'action-rollback' => 'گەڕاندنەوەی خێرای دەستکاریەکانی دوایین بەکارھێنەر کە پەڕەیەکی دیاریکراوی دەستکاری کردووە',
-'action-import' => 'هێنانەناوەی ئەم لاپەڕە لە ویکی‌یەکی دیکە',
-'action-importupload' => 'هێنانەناوەی ئەم لاپەڕە لە پەڕگەیەکی بارکراو',
+'action-import' => 'ھاوردنی پەڕەکان لە ویکییەکی ترەوە',
+'action-importupload' => 'ھاوردنی پەڕەکان لە پەڕگەیەکی بارکراو',
 'action-patrol' => 'نیشانکردنی دەستکاریەکانی کەسانی تر وەک پاس دراو',
 'action-autopatrol' => 'دەستکارییەکانت وەک پاس دراو نیشان بکرێ',
 'action-unwatchedpages' => 'دیتنی پێرستێک لە پەڕە چاودێری نەکراوەکان',
@@ -1500,6 +1497,7 @@ $1",
 'recentchanges' => 'دوایین گۆڕانکارییەکان',
 'recentchanges-legend' => 'ھەڵبژاردەکانی دوایین گۆڕانکارییەکان',
 'recentchanges-summary' => 'لەم پەڕەیەدا شوێنی دوایین گۆڕانکارییەکانی ویکی بکەوە.',
+'recentchanges-noresult' => 'ھیچ گۆڕانکارییەک لە نێوان ماوەی پێدراو لەگەڵ ئەم پێوەرانە وێک نەھاتەوە.',
 'recentchanges-feed-description' => 'دوای دوایین گۆڕانکارییەکانی ئەم ویکیە بکەوە لەم «فید»ەوە.',
 'recentchanges-label-newpage' => 'ئەم دەستکارییە پەڕەیەکی نوێی دروست کرد',
 'recentchanges-label-minor' => 'ئەمە دەستکارییەکی بچووکە',
@@ -1509,14 +1507,24 @@ $1",
 'recentchanges-legend-heading' => "'''کورتکراوەکان:'''",
 'recentchanges-legend-newpage' => '(ھەروەھا بڕوانە [[Special:NewPages|پێرستی پەڕە نوێکان]])',
 'recentchanges-legend-plusminus' => "(''±۱٢٣'')",
-'rcnotefrom' => "ئەوی‌ خوارەوە گۆڕانکارییەکانە لە '''$2'''ەوە (ھەتا '''$1''' نیشاندراو).",
+'rcnotefrom' => 'ژێرەوە گۆڕانکارییەکانە لە <strong>$2</strong>ەوە (ھەتا <strong>$1</strong> نیشان دراوە).',
 'rclistfrom' => 'گۆڕانکارییە نوێکان نیشان بدە بە دەستپێکردن لە $1',
 'rcshowhideminor' => 'دەستکارییە بچووکەکان $1',
+'rcshowhideminor-show' => 'نیشان بدە',
+'rcshowhideminor-hide' => 'بشارەوە',
 'rcshowhidebots' => 'بۆتەکان $1',
+'rcshowhidebots-show' => 'نیشان بدە',
+'rcshowhidebots-hide' => 'بشارەوە',
 'rcshowhideliu' => 'بەکارھێنەرە تۆمارکراوەکان $1',
+'rcshowhideliu-show' => 'نیشان بدە',
+'rcshowhideliu-hide' => 'بشارەوە',
 'rcshowhideanons' => 'بەکارھێنەرە نەناسراوەکان $1',
+'rcshowhideanons-show' => 'نیشان بدە',
+'rcshowhideanons-hide' => 'بشارەوە',
 'rcshowhidepatr' => 'گۆرانکارییە پاس دراوەکان $1',
 'rcshowhidemine' => 'دەستکارییەکانم $1',
+'rcshowhidemine-show' => 'نیشان بدە',
+'rcshowhidemine-hide' => 'بشارەوە',
 'rclinks' => 'دوایین $1 گۆڕانکاریی $2 ڕۆژی ڕابردوو نیشان بدە<br />$3',
 'diff' => 'جیاوازی',
 'hist' => 'مێژوو',
@@ -1530,7 +1538,7 @@ $1",
 'rc_categories_any' => 'هەرکام',
 'rc-change-size-new' => '$1 {{PLURAL:$1|بایت}} پاش گۆڕانکاری',
 'newsectionsummary' => '/* $1 */ بەشی نوێ',
-'rc-enhanced-expand' => 'Ù\88ردÛ\95کارÛ\8cÛ\8cÛ\95کاÙ\86 Ù¾Û\8cشاÙ\86 Ø¨Ø¯Û\95 (Ù¾Û\8eÙ\88Û\8cستÛ\8c Ø¨Û\95 Ø¬Ø§Ú¤Ø§Ø³Ú©Ø±Û\8cپتÛ\95)',
+'rc-enhanced-expand' => 'Ù\88ردÛ\95کارÛ\8cÛ\8cÛ\95کاÙ\86 Ù\86Û\8cشاÙ\86 Ø¨Ø¯Û\95',
 'rc-enhanced-hide' => 'وردەکارییەکان بشارەوە',
 'rc-old-title' => 'بە ناوی سەرەکیی «$1» دروست کراوە',
 
@@ -1709,8 +1717,7 @@ $1',
 'upload_source_file' => ' (پەڕگەیەک لەسەر کۆمپیوتەرەکەت)',
 
 # Special:ListFiles
-'listfiles-summary' => 'ئەم پەڕە تایبەتە هەموو پەڕگە بارکراوەکانت پێ نیشان دەدات.
-لە کاتی پاڵاوتن بۆ بەکارھێنەرێکی تایبەت، تەنیا ئەو پەڕگانە کە بەکارھێنەرەکە دوایین وەشانیانی بارکردبێت نیشان دەدرێن.',
+'listfiles-summary' => 'ئەم پەڕە تایبەتە ھەموو پەڕگە بارکراوەکان نیشان دەدات.',
 'listfiles_search_for' => 'بگەڕێ بۆ ناوی میدیای:',
 'imgfile' => 'پەڕگە',
 'listfiles' => 'پێرستی پەڕگەکان',
@@ -2317,7 +2324,7 @@ $1',
 'contributions' => 'بەشدارییەکانی {{GENDER:$1|بەکارھێنەر}}',
 'contributions-title' => 'بەشدارییەکانی بەکارھێنەر $1',
 'mycontris' => 'بەشدارییەکان',
-'contribsub2' => 'بۆ $1 ($2)',
+'contribsub2' => 'بۆ {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'هیچ گۆڕانکاریەکی هاوتای ئەم پێوەرانە نودۆزرایەوە',
 'uctop' => '(ھەنووکە)',
 'month' => 'لە مانگی (و پێشترەوە):',
@@ -2661,7 +2668,7 @@ $1',
 بوخچەیەکی کاتی بزر بووە.',
 'import-parse-failure' => 'سەرنەکەوتن لە شیکردنەوەی ھاوردنی XML',
 'import-noarticle' => 'ھیچ پەڕەیەک بۆ ھاوردن نییە!',
-'import-nonewrevisions' => 'Ú¾Û\95Ù\85Ù\88Ù\88 Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95کاÙ\86 Ù¾Û\8eشتر Ú¾Ø§Ù\88ردÛ\95 Ú©Ø±Ø§Ù\88Ù\86.',
+'import-nonewrevisions' => 'Ú¾Û\8cÚ\86 Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95Û\8cÛ\95Ú© Ú¾Ø§Ù\88ردÛ\95 Ù\86Û\95کراÙ\88Û\95 (Ú¾Û\95Ù\85Ù\88Ù\88Û\8c Û\8cا Ú¾Û\95ر Ø¦Û\8eستا Ú¾Û\95Û\8cÛ\95Ø\8c Û\8cاÙ\86 Ù\84Û\95بÛ\95ر Ú¾Û\95ÚµÛ\95کاÙ\86 Ú\86اÙ\88Ù¾Û\86Ø´Û\8c Ù\84Û\8e Ú©Ø±Ø§Ù\88Û\95).',
 'xml-error-string' => '$1 لە دێڕی $2، ستوونی $3 (بایت $4): $5',
 'import-upload' => 'بارکردنی دراوەی XML',
 'import-token-mismatch' => 'لەدەستدانی دراوەکانی کۆڕ.
@@ -2788,12 +2795,12 @@ $1',
 'pageinfo-article-id' => 'زنجیرەی پەڕە',
 'pageinfo-language' => 'زمانی ناوەرۆکی پەڕە',
 'pageinfo-robot-policy' => 'چۆنێتیی مۆتۆڕی گەڕان',
-'pageinfo-robot-index' => 'شیاو بۆ پێرستکردن',
-'pageinfo-robot-noindex' => 'نەشیاو بۆ پێرستکردن',
+'pageinfo-robot-index' => 'ڕێ پێدراو',
+'pageinfo-robot-noindex' => 'ڕێ پێنەدراوه',
 'pageinfo-views' => 'ژمارەی بینینەکان',
 'pageinfo-watchers' => 'ژمارەی چاودێرانی پەڕە',
 'pageinfo-few-watchers' => 'کەمتر لە $1 {{PLURAL:$1|چاودێر}}',
-'pageinfo-redirects-name' => 'ڕەوانەکەرەکان بۆ ئەم پەڕەیە',
+'pageinfo-redirects-name' => 'Ú\98Ù\85ارÛ\95Û\8c Ú\95Û\95Ù\88اÙ\86Û\95Ú©Û\95رÛ\95کاÙ\86 Ø¨Û\86 Ø¦Û\95Ù\85 Ù¾Û\95Ú\95Û\95Û\8cÛ\95',
 'pageinfo-subpages-name' => 'ژێرپەڕەکانی ئەم پەڕەیە',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ڕەوانەکەر}}; $3 {{PLURAL:$3|ڕەوانەنەکەر}})',
 'pageinfo-firstuser' => 'دروستکەری پەڕە',
@@ -2863,7 +2870,7 @@ $1',
 'file-nohires' => 'رەزۆلوشنی سەرتر لەمە لە بەردەست دا نیە.',
 'svg-long-desc' => 'پەڕگەی SVG، بە ناو $1 × $2 پیکسەڵ، قەبارەی پەڕگە: $3',
 'svg-long-error' => 'پەڕگەی SVGی نادروست: $1',
-'show-big-image' => 'گەورەکردنەوە',
+'show-big-image' => 'پەڕگەی سەرەکی',
 'show-big-image-preview' => 'قەبارەی ئەم پێشبینینە: $1.',
 'show-big-image-other' => '{{PLURAL:$2|ڕەزەلووشنی|ڕەزەلووشنەکانی}} تر: $1.',
 'show-big-image-size' => '$1 لە $2 پیکسەڵ',
@@ -3221,18 +3228,18 @@ $3
 $5
 
 ئەم کۆدی بڕواپێکردنە لە $4 ماوەی بەسەردێت.',
-'confirmemail_body_set' => 'کەسێک، لەوانەیە خۆت، لە ئای‌پی ئەدرەسی $1،
-ئەدرەسی ئەیمەیلی ھەژماری «$2» لە {{SITENAME}}دا کردووە بەم ئەدرەسە.
+'confirmemail_body_set' => 'کەسێک، لەوانەیە خۆت، لە ناونیشانی ئایپیی $1،
+ناونیشانیی ئەیمەیلی ھەژماری «$2» لە {{SITENAME}}دا کردووە بەم ناونیشانە.
 
-بۆ ئەوەی بڕوا بکرێت کە ئەم ھەژمارە لە ڕاستیدا بۆتۆیە و بۆ چالاککردنەوەی تایبەتمەندیەکانی ئیمەیل لە {{SITENAME}}دا، ئەم بەستەرەی خوارەوە لە وێبگەڕەکەتدا بکەوە:
+بۆ پشتڕاستکردنەوەی ئەمەی ئەم ھەژمارە بەڕاستی ھی تۆیە و بۆ چالاککردنی تایبەتمەندیەکانی ئیمەیل لە {{SITENAME}}دا، ئەم بەستەرە لە وێبگەڕەکەتدا بکەوە:
 
 $3
 
-ئەگەر ھەژمارە ھی تۆ *نییە*، بۆ هەڵوەشاندنەوەی بڕوا‌پێکردنی ئەدرەسی ئیمەیل بەدوای ئەم بەستەرە بکەوە:
+ئەگەر ھەژمارەکە ھی تۆ *نییە*، بۆ هەڵوەشاندنەوەی پشتڕاستکردنەوەی ناونیشانی ئیمەیل، شوێنی ئەم بەستەرە بکەوە:
 
 $5
 
-ئÛ\95Ù\85 Ú©Û\86دÛ\8c Ø¨Ú\95Ù\88اپÛ\8eکردÙ\86Û\95 Ù\84Û\95 $4 Ù\85اÙ\88Û\95Û\8c Ø¨Û\95سÛ\95ردێت.',
+ئÛ\95Ù\85 Ú©Û\86دÛ\95Û\8c Ù¾Ø´ØªÚ\95استکردÙ\86Û\95Ù\88Û\95Û\8cÛ\95 Ù\84Û\95 $4 Ù\85اÙ\88Û\95Û\8c Ø¨Û\95سÛ\95ر Ø¯Û\95Ú\86ێت.',
 'confirmemail_invalidated' => 'بڕواپی‌کردنی ناونیشانی ئی‌مەیل هەڵوەشێندراوە',
 'invalidateemail' => 'هەڵوەشاندنەوەی بڕواپێ‌کردنی ئی‌مەیل',
 
@@ -3378,7 +3385,7 @@ $5
 'version-hook-name' => 'ناوی قولاپ',
 'version-hook-subscribedby' => 'بەشداربوو لە لایەن',
 'version-version' => '(وەشانی $1)',
-'version-license' => 'مۆڵەت',
+'version-license' => 'مۆڵەتنامە',
 'version-poweredby-others' => 'دیکە',
 'version-software' => 'نەرمەکاڵای دامەزراو',
 'version-software-product' => 'بەرهەم',
index bdc9c53..173f523 100644 (file)
@@ -207,6 +207,7 @@ $messages = array(
 'toc' => 'Cuntenutu',
 'showtoc' => 'mustrà',
 'hidetoc' => 'piattà',
+'collapsible-collapse' => 'Cumprime',
 'feed-atom' => 'Atomu',
 'red-link-title' => '$1 (a pagina ùn esiste micca)',
 
@@ -295,6 +296,7 @@ $messages = array(
 'previewnote' => "'''Attentu: questa ùn hè ch'è una previsualisazzione.'''
 E to mudifiche ùn sò ancora state salvate!",
 'editing' => 'Mudifica di $1',
+'creating' => 'A pagina $1 hà da esse creata',
 'editingsection' => 'Mudifica di $1 (sezzione)',
 'editingcomment' => 'Mudifica di $1 (cummentu)',
 'editconflict' => 'Cunflittu di mudificazione: $1',
@@ -321,6 +323,7 @@ Parechji mudelli ùn seranu micca inclusi.",
 'revision-info' => 'Versione di e $4 à e $5 di $2',
 'previousrevision' => '← Versione menu ricente',
 'currentrevisionlink' => 'Ultima revisione',
+'cur' => 'att',
 'page_first' => 'prima',
 'history-fieldset-title' => 'Parcorre a cronolugia',
 'history-show-deleted' => 'Solu quelli cancellati',
@@ -369,6 +372,7 @@ Parechji mudelli ùn seranu micca inclusi.",
 'searchrelated' => 'currilati',
 'showingresultsheader' => "{{PLURAL:$5|Risultatu '''$1''' di '''$3'''|Risultati '''$1 - $2''' di '''$3'''}} per '''$4'''",
 'search-nonefound' => 'A ricerca ùn hà micca datu risultati.',
+'powersearch-ns' => 'Circà in u spaziu di nomi',
 
 # Preferences page
 'preferences' => 'Preferenze',
@@ -422,6 +426,7 @@ Parechji mudelli ùn seranu micca inclusi.",
 'recentchanges-label-bot' => 'Sta mudifica hè stata effettuata da un botu',
 'recentchanges-label-unpatrolled' => 'Sta mudifica ùn hè ancu stata verificata',
 'recentchanges-label-plusminus' => "A dimensione di a pagina hè stata cambiata di 'ssu numaru d'ottetti",
+'recentchanges-legend-newpage' => '(vede ancu [[Special:NewPages|a lista di e pagine nove]])',
 'rcnotefrom' => "Quì seguitanu e mudifiche dapoi u '''$2''' ('''$1''' à u massimu).",
 'rclistfrom' => 'Mustrà e mudifiche dapoi u $1',
 'rcshowhideminor' => '$1 i cambiamenti minori',
@@ -727,6 +732,9 @@ Parechji mudelli ùn seranu micca inclusi.",
 'anonymous' => '{{PLURAL:$1|Utilizatore anonimu|Utilizatori anonimi}} di {{SITENAME}}',
 'others' => 'altri',
 
+# Info page
+'pageinfo-toolboxlink' => 'Infurmazione annantu à a pagina',
+
 # Media information
 'file-nohires' => 'Una diversione incù una risoluzione più alta ùn hè micca dispunibile.',
 'show-big-image' => 'Schedariu originale',
@@ -794,6 +802,7 @@ Parechji mudelli ùn seranu micca inclusi.",
 'tags-edit' => 'mudificà',
 
 # New logging system
+'logentry-move-move' => '$1 {{GENDER:$2|hà spustatu}} a pagina $3 à $4',
 'rightsnone' => '(nessunu)',
 
 # Special:ExpandTemplates
index 1a71328..bca887e 100644 (file)
@@ -161,7 +161,6 @@ $messages = array(
 'vector-action-protect' => 'Protektahan',
 'vector-action-undelete' => 'Indi pag panason',
 'vector-action-unprotect' => 'Islan ang proteksyon',
-'vector-simplesearch-preference' => 'Paganahon ang ginpanami nga mga suhestiyon sa pagpangita (panit nga Vector lang)',
 'vector-view-create' => 'Ubrahon',
 'vector-view-edit' => 'Bag-uhon',
 'vector-view-history' => 'Ipakita ang kasaysayan',
index 6ee57e5..3b31fa7 100644 (file)
@@ -255,7 +255,6 @@ $messages = array(
 'vector-action-protect' => 'Къорчала',
 'vector-action-undelete' => 'Янъыдан ярат',
 'vector-action-unprotect' => 'Къорчалавны денъиштир',
-'vector-simplesearch-preference' => 'Саделештирильген къыдырув сатырыны ишлет (тек Вектор корюниши ичюн)',
 'vector-view-create' => 'Ярат',
 'vector-view-edit' => 'Денъиштир',
 'vector-view-history' => 'Кечмишини косьтер',
index 76fcec0..0f6c8c4 100644 (file)
@@ -249,7 +249,6 @@ $messages = array(
 'vector-action-protect' => 'Qorçala',
 'vector-action-undelete' => 'Yañıdan yarat',
 'vector-action-unprotect' => 'Qorçalavnı deñiştir',
-'vector-simplesearch-preference' => 'Sadeleştirilgen qıdıruv satırını işlet (tek Vektor körünişi içün)',
 'vector-view-create' => 'Yarat',
 'vector-view-edit' => 'Deñiştir',
 'vector-view-history' => 'Keçmişini köster',
index d69400c..a621d9a 100644 (file)
@@ -403,7 +403,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Zasílat mi kopie e-mailů, které pošlu jiným uživatelům',
 'tog-diffonly' => 'Nezobrazovat obsah stránky pod rozdílem verzí',
 'tog-showhiddencats' => 'Zobrazit skryté kategorie',
-'tog-noconvertlink' => 'Vypnout konverzi názvů',
 'tog-norollbackdiff' => 'Po vrácení změny nezobrazovat porovnání rozdílů',
 'tog-useeditwarning' => 'Upozornit, když budu opouštět editaci bez uložení změn',
 'tog-prefershttps' => 'Po přihlášení používat vždy zabezpečené spojení',
@@ -530,7 +529,6 @@ $messages = array(
 'vector-action-protect' => 'Zamknout',
 'vector-action-undelete' => 'Obnovit',
 'vector-action-unprotect' => 'Změnit zámek',
-'vector-simplesearch-preference' => 'Zapnout zjednodušené vyhledávání (pouze vzhled Vektor)',
 'vector-view-create' => 'Založit',
 'vector-view-edit' => 'Editovat',
 'vector-view-history' => 'Zobrazit historii',
@@ -707,7 +705,7 @@ Správce serveru, který databázi zamkl, poskytl toto zdůvodnění: $1',
 
 Toto je obvykle způsobeno tím, že jste následovali zastaralý odkaz na rozdíl verzí nebo historickou verzi stránky, jež byla smazána.
 
-Pokud toto není váš případ, možná jste nalezli chybu v software. Prosíme, ohlaste to [[Special:ListUsers/sysop|správcům]] spolu s URL této stránky.',
+Není-li toto váš případ, možná jste nalezli chybu v softwaru. Prosíme, ohlaste to [[Special:ListUsers/sysop|správcům]] spolu s URL této stránky.',
 'missingarticle-rev' => '(číslo revize: $1)',
 'missingarticle-diff' => '(Rozdíl: $1, $2)',
 'readonly_lag' => 'Databáze byla automaticky dočasně uzamčena kvůli zpoždění ostatních databázových serverů oproti hlavnímu',
@@ -812,8 +810,6 @@ Nezapomeňte si upravit své [[Special:Preferences|nastavení {{grammar:2sg|{{SI
 'gotaccountlink' => 'Přihlaste se',
 'userlogin-resetlink' => 'Zapomněli jste přihlašovací údaje?',
 'userlogin-resetpassword-link' => 'Zapomněli jste heslo?',
-'helplogin-url' => 'Help:Přihlášení',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Nápověda k přihlašování]]',
 'userlogin-loggedin' => 'Již jste {{GENDER:$1|přihlášen|přihlášena}} jako $1.
 Pomocí formuláře níže se můžete přihlásit jako jiný uživatel.',
 'userlogin-createanother' => 'Vytvořit jiný účet',
@@ -905,6 +901,10 @@ Než to zkusíte znovu, musíte počkat na vypršení lhůty $1.',
 'suspicious-userlogout' => 'Váš požadavek na odhlášení byl odmítnut, neboť to vypadá, že ho poslal rozbitý prohlížeč nebo cachující proxy.',
 'createacct-another-realname-tip' => 'Skutečné jméno je nepovinné.
 Pokud se ho rozhodnete uvést, bude použito pro označení autorství vaší práce.',
+'pt-login' => 'Přihlášení',
+'pt-login-button' => 'Přihlásit se',
+'pt-createaccount' => 'Vytvoření účtu',
+'pt-userlogout' => 'Odhlásit se',
 
 # Email sending
 'php-mail-error-unknown' => 'Neznámá chyba v PHP funkci mail()',
@@ -913,7 +913,7 @@ Pokud se ho rozhodnete uvést, bude použito pro označení autorství vaší pr
 
 # Change password dialog
 'changepassword' => 'Změna hesla',
-'resetpass_announce' => 'Přihlašujete se dočasným heslem zaslaným e-mailem. Přihlášení lze dokončit po nastavení nového trvalého hesla.',
+'resetpass_announce' => 'Abyste dokončili přihlášení, musíte si nastavit nové heslo.',
 'resetpass_text' => '<!-- Sem přidejte text -->',
 'resetpass_header' => 'Změna hesla',
 'oldpassword' => 'Staré heslo:',
@@ -929,8 +929,13 @@ Pokud se ho rozhodnete uvést, bude použito pro označení autorství vaší pr
 'resetpass-submit-cancel' => 'Storno',
 'resetpass-wrong-oldpass' => 'Nesprávné dočasné nebo aktuální heslo.
 Možná jste si již úspěšně heslo změnili, nebo jste si vyžádali nové dočasné heslo.',
+'resetpass-recycled' => 'Jako nové heslo si prosím nastavte něco jiného než stávající heslo.',
+'resetpass-temp-emailed' => 'Přihlašujete se dočasným heslem zaslaným e-mailem.
+Abyste dokončili přihlášení, nastavte si zde nové heslo:',
 'resetpass-temp-password' => 'Dočasné heslo:',
 'resetpass-abort-generic' => 'Změna hesla byla zablokována rozšířením.',
+'resetpass-expired' => 'Platnost vašeho hesla vypršela. Pro přihlášení si nastavte nové heslo.',
+'resetpass-expired-soft' => 'Platnost vašeho hesla vypršela, musíte si nastavit nové. Zvolte si nové heslo nebo klikněte na „{{int:resetpass-submit-cancel}}“ a nastavte si ho později.',
 
 # Special:PasswordReset
 'passwordreset' => 'Reset hesla',
@@ -1226,6 +1231,7 @@ Tyto argumenty byly vynechány.',
 'undo-success' => 'Editace může být zrušena. Zkontrolujte a pak potvrďte změny zobrazené níže.',
 'undo-failure' => 'Editace nemohla být zrušena kvůli konfliktu mezilehlých editací.',
 'undo-norev' => 'Tuto editaci není možné vrátit, protože neexistuje nebo byla smazána.',
+'undo-nochange' => 'Zdá se, že editace již byla zrušena.',
 'undo-summary' => 'Zrušena verze $1 od uživatele [[Special:Contributions/$2|$2]] ([[User talk:$2|diskuse]])',
 'undo-summary-username-hidden' => 'Zrušena verze $1 od skrytého uživatele',
 
@@ -1309,9 +1315,10 @@ Můžete si toto porovnání prohlédnout; podrobnosti jsou uvedeny v [{{fullurl
 'revdelete-show-file-submit' => 'Ano',
 'revdelete-selected' => "'''{{PLURAL:$2|Vybraná|Vybrané}} revize stránky [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Vybraná protokolovaná událost|Vybrané protokolované události}}:'''",
-'revdelete-text' => "'''Smazané verze a události budou nadále zobrazeny v historii stránky a protokolovacích záznamech, ale některé jejich části nebudou veřejně dostupné.'''
-Ostatní správci {{GRAMMAR:2sg|{{SITENAME}}}} si budou moci skrytý obsah prohlížet a pomocí stejného rozhraní jej také obnovit,
-pokud nebyla nastavena další omezení.",
+'revdelete-text-text' => 'Smazané editace se budou i nadále zobrazovat v historii stránky, ale části jejich obsahu nebudou veřejně přístupné.',
+'revdelete-text-file' => 'Smazané verze souborů se budou i nadále zobrazovat v historii stránky, ale části jejich obsahu nebudou veřejně přístupné.',
+'logdelete-text' => 'Smazané protokolovací záznamy se budou i nadále zobrazovat v historii stránky, ale části jejich obsahu nebudou veřejně přístupné.',
+'revdelete-text-others' => 'Ostatní správci {{grammar:2sg|{{SITENAME}}}} budou i nadále moci ke skrytému obsahu přistupovat a mohou ho pomocí stejného rozhraní obnovit, pokud nejsou nastavena dodatečná omezení.',
 'revdelete-confirm' => 'Prosím potvrďte, že to opravdu chcete učinit, že si uvědomujete důsledky a že je to v souladu s [[{{MediaWiki:Policy-url}}|pravidly]].',
 'revdelete-suppress-text' => "Utajování by se mělo používat '''pouze''' v následujících případech:
 * Potenciálně pomlouvačné informace
@@ -1321,7 +1328,7 @@ pokud nebyla nastavena další omezení.",
 'revdelete-hide-text' => 'Text revize',
 'revdelete-hide-image' => 'Skrýt obsah souboru',
 'revdelete-hide-name' => 'Skrýt událost a cíl',
-'revdelete-hide-comment' => 'Editační komentář',
+'revdelete-hide-comment' => 'Shrnutí editace',
 'revdelete-hide-user' => 'Uživatelské jméno / IP adresa',
 'revdelete-hide-restricted' => 'Utajit data i před správci',
 'revdelete-radio-same' => '(neměnit)',
@@ -1452,7 +1459,8 @@ Podrobnosti mohou být uvedeny v [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'searcheverything-enable' => 'Hledat ve všech jmenných prostorech',
 'searchrelated' => 'související',
 'searchall' => 'vše',
-'showingresults' => 'Zobrazuji <strong>$1</strong> {{PLURAL:$1|výsledek|výsledky|výsledků}} počínaje od <strong>$2</strong>.',
+'showingresults' => 'Níže zobrazuji nejvýše <strong>$1</strong> {{PLURAL:$1|výsledek|výsledky|výsledků}} počínaje od <strong>$2</strong>.',
+'showingresultsinrange' => 'Níže zobrazuji nejvýše <strong>$1</strong> {{PLURAL:$1|výsledek|výsledky|výsledků}} v rozsahu #<strong>$2</strong>–#<strong>$3</strong>.',
 'showingresultsnum' => 'Zobrazuji <strong>$3</strong> {{PLURAL:$3|výsledek|výsledky|výsledků}} počínaje od <strong>$2</strong>.',
 'showingresultsheader' => "{{PLURAL:$5|Výsledek '''$1''' z '''$3'''|Výsledky '''$1–$2''' z '''$3'''}} pro '''$4'''",
 'search-nonefound' => 'Na váš dotaz nebyly nalezeny žádné výsledky.',
@@ -1770,14 +1778,26 @@ Vaše adresa v takovém případě není prozrazena.',
 'recentchanges-legend-heading' => "'''Legenda:'''",
 'recentchanges-legend-newpage' => '(vizte též [[Special:NewPages|seznam nových stránek]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => 'Níže {{PLURAL:$1|je|jsou|je}} nejvýše <b>$1</b> {{PLURAL:$1|změna|změny|změn}} od <b>$2</b>.',
+'rcnotefrom' => 'Níže jsou změny od <strong>$2</strong> ({{PLURAL:$1|zobrazena|zobrazeny|zobrazeno}} nejvýše <strong>$1</strong>).',
 'rclistfrom' => 'Ukázat nové změny, počínaje od $1',
 'rcshowhideminor' => '$1 malé editace',
+'rcshowhideminor-show' => 'Zobrazit',
+'rcshowhideminor-hide' => 'Skrýt',
 'rcshowhidebots' => '$1 roboty',
+'rcshowhidebots-show' => 'Zobrazit',
+'rcshowhidebots-hide' => 'Skrýt',
 'rcshowhideliu' => '$1 registrované uživatele',
+'rcshowhideliu-show' => 'Zobrazit',
+'rcshowhideliu-hide' => 'Skrýt',
 'rcshowhideanons' => '$1 anonymní uživatele',
+'rcshowhideanons-show' => 'Zobrazit',
+'rcshowhideanons-hide' => 'Skrýt',
 'rcshowhidepatr' => '$1 prověřené editace',
+'rcshowhidepatr-show' => 'Zobrazit',
+'rcshowhidepatr-hide' => 'Skrýt',
 'rcshowhidemine' => '$1 moje editace',
+'rcshowhidemine-show' => 'Zobrazit',
+'rcshowhidemine-hide' => 'Skrýt',
 'rclinks' => 'Ukázat $1 posledních změn během posledních $2 dnů<br />
 $3',
 'diff' => 'rozdíl',
@@ -1899,6 +1919,8 @@ Před tím, než soubor znovu nahrajete, byste měli požádat někoho, kdo mů
 'uploaddisabledtext' => 'Načítání souborů je vypnuto.',
 'php-uploaddisabledtext' => 'V PHP je vypnuto načítání souborů. Prosím, zkontrolujte nastavení file_uploads.',
 'uploadscripted' => 'Tento soubor obsahuje HTML nebo kód skriptu, který by mohl být prohlížečem chybně interpretován.',
+'uploadscriptednamespace' => 'Tento SVG soubor obsahuje nedovolený jmenný prostor „$1“',
+'uploadinvalidxml' => 'XML v načteném souboru nelze zpracovat.',
 'uploadvirus' => 'Tento soubor obsahuje virus! Podrobnosti: $1',
 'uploadjava' => 'Tento soubor je ZIP, který obsahuje javový soubor .class.
 Načítání javových souborů není dovoleno, neboť by mohly umožnit obcházení bezpečnostních omezení.',
@@ -2265,10 +2287,20 @@ Každý řádek obsahuje odkaz na první a druhé přesměrování a k tomu cíl
 'deadendpagestext' => 'Následující stránky neodkazují na žádnou jinou stránku {{grammar:2sg|{{SITENAME}}}}.',
 'protectedpages' => 'Zamčené stránky',
 'protectedpages-indef' => 'Pouze zámky na neurčito',
+'protectedpages-summary' => 'Tato stránka obsahuje seznam existujících stránek, které jsou momentálně zamčeny. Seznam názvů zamčených proti založení najdete na stránce [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Pouze kaskádové zámky',
 'protectedpages-noredirect' => 'Skrýt přesměrování',
 'protectedpagesempty' => 'Žádná stránka není zamčena s těmito parametry.',
+'protectedpages-timestamp' => 'Datum a čas',
+'protectedpages-page' => 'Stránka',
+'protectedpages-expiry' => 'Vyprší',
+'protectedpages-performer' => 'Zamykající',
+'protectedpages-params' => 'Nastavení zámku',
+'protectedpages-reason' => 'Důvod',
+'protectedpages-unknown-timestamp' => 'Neznámé',
+'protectedpages-unknown-performer' => 'Neznámý uživatel',
 'protectedtitles' => 'Zamčené názvy stránek',
+'protectedtitles-summary' => 'Tato stránka obsahuje seznam názvů, které jsou momentálně zamčeny proti založení. Seznam existujících zamčených stránek najdete na stránce [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'S těmito parametry nejsou zamčeny žádné názvy.',
 'listusers' => 'Uživatelé',
 'listusers-editsonly' => 'Zobrazit pouze uživatele s editacemi',
@@ -2522,7 +2554,8 @@ Rady a kontakt:
 'confirmdeletetext' => 'Chystáte se smazat stránku s celou její historií. Prosím potvrďte, že to opravdu chcete učinit, že si uvědomujete důsledky a že je to v souladu s [[{{MediaWiki:Policy-url}}|pravidly]].',
 'actioncomplete' => 'Provedeno',
 'actionfailed' => 'Operace se nezdařila',
-'deletedtext' => 'Stránka nebo soubor „$1“ byl(a) smazán(a). $2 zaznamenává poslední smazání.',
+'deletedtext' => '„$1“ bylo smazáno.
+$2 zaznamenává poslední smazání.',
 'dellogpage' => 'Kniha smazaných stránek',
 'dellogpagetext' => 'Zde je seznam posledních smazaných stránek.',
 'deletionlog' => 'Kniha smazaných stránek',
@@ -2539,7 +2572,7 @@ Rady a kontakt:
 'delete-edit-reasonlist' => 'Editovat důvody smazání',
 'delete-toobig' => 'Tato stránka má velkou historii editací, přes $1 {{PLURAL:$1|verzi|verze|verzí}}. Mazání takových stránek je omezeno, aby se předešlo nechtěnému narušení {{grammar:2sg|{{SITENAME}}}}.',
 'delete-warning-toobig' => 'Tato stránka má velkou historii editací, přes $1 {{PLURAL:$1|verzi|verze|verzí}}. Mazání takových stránek může narušit databázové operace {{grammar:2sg|{{SITENAME}}}}; postupujte opatrně.',
-'deleting-backlinks-warning' => "'''Upozornění:''' Stránka, kterou se chystáte smazat, je na jiných stránkách odkazována nebo je do nich vložena.",
+'deleting-backlinks-warning' => "'''Upozornění:''' Stránka, kterou se chystáte smazat, je [[Special:WhatLinksHere/{{FULLPAGENAME}}|na jiných stránkách]] odkazována nebo je do nich vložena.",
 
 # Rollback
 'rollback' => 'Vrátit zpět editace',
@@ -2709,8 +2742,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Tato IP adresa je momentálně zablokována.
 Zde je pro přehled zobrazen nejnovější záznam z knihy zablokování:',
 'sp-contributions-search' => 'Zobrazení příspěvků',
+'sp-contributions-suppresslog' => 'utajené příspěvky uživatele',
 'sp-contributions-username' => 'IP adresa nebo uživatelské jméno:',
-'sp-contributions-toponly' => 'Zobrazit pouze aktuální revize',
+'sp-contributions-toponly' => 'Zobrazit pouze editace na aktuální revizi',
+'sp-contributions-newonly' => 'Zobrazovat pouze editace zakládající stránku',
 'sp-contributions-submit' => 'Zobrazit',
 
 # What links here
@@ -2812,7 +2847,8 @@ Můžete si prohlédnout [[Special:BlockList|seznam zablokovaných uživatelů]]
 'change-blocklink' => 'změnit blok',
 'contribslink' => 'příspěvky',
 'emaillink' => 'poslat e-mail',
-'autoblocker' => 'Byli jste automaticky zablokováni, protože sdílíte IP adresu s uživatelem „[[User:$1|$1]]“. Důvod zablokování tohoto uživatele: „$2“',
+'autoblocker' => '{{GENDER:|Byl jste automaticky zablokován|Byla jste automaticky zablokována|Byli jste automaticky zablokováni}}, protože vaši IP adresu nedávno {{GENDER:$1|používal uživatel|používala uživatelka}} „[[User:$1|$1]]“.
+Důvod zablokování {{GENDER:$1|uživatele $1|uživatelky $1}}: „$2“',
 'blocklogpage' => 'Kniha zablokování',
 'blocklog-showlog' => '{{GENDER:$1|Tento uživatel byl dříve blokován.|Tato uživatelka byla dříve blokována.|Tento uživatel byl dříve blokován.}}
 Zde je pro přehled zobrazen výpis z knihy zablokování:',
@@ -3012,6 +3048,7 @@ $2',
 'thumbnail_image-type' => 'Nepodporovaný typ obrázku',
 'thumbnail_gd-library' => 'Neúplná konfigurace knihovny GD: chybí funkce $1',
 'thumbnail_image-missing' => 'Soubor patrně chybí: $1',
+'thumbnail_image-failure-limit' => 'V poslední době došlo k příliš mnoha neúspěšným pokusům (nejméně $1) o vytvoření tohoto náhledu. Zkuste to později.',
 
 # Special:Import
 'import' => 'Import stránek',
@@ -3157,6 +3194,7 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'print.css' => '/* Zde uvedené CSS bude ovlivňovat tiskový výstup */',
 'noscript.css' => '/* Zde uvedené CSS bude ovlivňovat uživatele s vypnutým JavaScriptem */',
 'group-autoconfirmed.css' => '/* Zde uvedené CSS bude ovlivňovat pouze automaticky schválené uživatele */',
+'group-user.css' => '/* Zde uvedené CSS bude ovlivňovat pouze registrované uživatele */',
 'group-bot.css' => '/* Zde uvedené CSS bude ovlivňovat pouze boty */',
 'group-sysop.css' => '/* Zde uvedené CSS bude ovlivňovat pouze správce */',
 'group-bureaucrat.css' => '/* Zde uvedené CSS bude ovlivňovat pouze byrokraty */',
@@ -3168,6 +3206,7 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'modern.js' => '/* JavaScript pro uživatele používající vzhled „Moderní“ */',
 'vector.js' => '/* JavaScript pro uživatele používající vzhled „Vektor“ */',
 'group-autoconfirmed.js' => '/* Zde uvedený JavaScript bude použit pouze pro automaticky schválené uživatele */',
+'group-user.js' => '/* Zde uvedený JavaScript bude použit pouze pro registrované uživatele */',
 'group-bot.js' => '/* Zde uvedený JavaScript bude použit pouze pro boty */',
 'group-sysop.js' => '/* Zde uvedený JavaScript bude použit pouze pro správce */',
 'group-bureaucrat.js' => '/* Zde uvedený JavaScript bude použit pouze pro byrokraty */',
@@ -3553,6 +3592,7 @@ Obsahuje pouze seznam s odrážkami (řádka začíná s *). První odkaz na ř
 'exif-compression-2' => '1-rozměrné modifikované Huffmanovo kódování délky běhu CCITT Group 3',
 'exif-compression-3' => 'Kódování faxů CCITT Group 3',
 'exif-compression-4' => 'Kódování faxů CCITT Group 4',
+'exif-compression-6' => 'JPEG (starý)',
 
 'exif-copyrighted-true' => 'Chráněno autorským právem',
 'exif-copyrighted-false' => 'Bez informací o autorských právech',
@@ -4295,7 +4335,4 @@ V podstatě rozbalí prakticky všechno v dvojitých složených závorkách.',
 'expand_templates_generate_rawhtml' => 'Zobrazit surové HTML',
 'expand_templates_preview' => 'Náhled',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
-'uploadinvalidxml' => 'XML v načteném souboru nelze zpracovat.',
 );
index 3018965..e9ac3d5 100644 (file)
@@ -40,7 +40,6 @@ $namespaceNames = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Pòdsztrëchiwùjë lënczi:',
-'tog-justify' => 'Wërównanié (justifikacëjô) paragrafów',
 'tog-hideminor' => 'Zatacë môłi edicëje w slédnëch zmianach',
 'tog-hidepatrolled' => 'Zatacë sprôdzoné edicëje slédnych zjinakach',
 'tog-newpageshidepatrolled' => 'Zatacë sprôdzoné edicëje w lësce nowich starnów',
@@ -49,9 +48,7 @@ $messages = array(
 'tog-numberheadings' => 'Aùtomatné numerowanié nôgłówków',
 'tog-showtoolbar' => 'Wëskrzrni listwã nôrzãdzów edicëji (nót je JavaScript)',
 'tog-editondblclick' => 'Editëjë starnë przez dëbeltné klëkniãcé (nót je JavaScript)',
-'tog-editsection' => 'Włączô edicëjã dzélów starnë przez lënczi [edicëjô]',
 'tog-editsectiononrightclick' => 'Włączë edicëjã sekcëji bez klëkniãcé prawą knąpą mëszë<br />na titlu sekcëji (JavaScript)',
-'tog-showtoc' => 'Pòkażë spisënk zamkłoscë (dlô starnów z wicy jak 3 nôgłówkama)',
 'tog-rememberpassword' => 'Spamiãtôj mòją parolã na tim kòmpùtrze (maksymalno przez $1 {{PLURAL:$1|dzéń|dni|dniów}})',
 'tog-watchcreations' => 'Dodôwôj starnë, chtërné ùsôdzã, do mòji lëstë ùzérónëch artiklów',
 'tog-watchdefault' => 'Dodôwôj starnë, chtërné editëjã do mòji lëstë ùzérónëch artiklów',
@@ -78,7 +75,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Sélôj do mie kòpije e-mailów, chtërné sélóm do jinych brëkòwników',
 'tog-diffonly' => 'Nie wëskrzëniôj zamkłoscë starnë niżi przërónaniô zjinaków',
 'tog-showhiddencats' => 'Wëskrzëni zataconé kategòrëje',
-'tog-noconvertlink' => 'Wëłączë kònwersëjã titlów w lënkach',
 'tog-norollbackdiff' => 'Pòcësni wëskrzënianié zjinaków pò copniãcô sã',
 
 'underline-always' => 'Wiedno',
@@ -184,7 +180,6 @@ $messages = array(
 'vector-action-protect' => 'Zazychrëjë',
 'vector-action-undelete' => 'Doprowôdzë nazôd',
 'vector-action-unprotect' => 'Òdzychrëjë',
-'vector-simplesearch-preference' => 'Włączë awansowóné pòdpòwiescë szëkbë (blós dlô skórczi Wektor)',
 'vector-view-create' => 'Ùsôdzë',
 'vector-view-edit' => 'Edicëjô',
 'vector-view-history' => 'Historëjô lopka',
@@ -584,7 +579,6 @@ Administrator, chtëren jã zablokòwôł, pòdôł przëczënã: $1",
 'rows' => 'Régów:',
 'columns' => 'Kòlumnów:',
 'searchresultshead' => 'Szëkba',
-'resultsperpage' => 'Rezultatów na starnã:',
 'stub-threshold' => 'Greńca dlô fòrmatowaniô <a href="#" class="stub">lënków stubów</a>:',
 'recentchangesdays' => 'Kùli dni pòkazëwac w slédnëch edicëjach:',
 'recentchangescount' => 'Domëslnô wielëna wëskrzëniónych edicëjów',
@@ -888,7 +882,6 @@ Czej chcesz remôc starnã z lëste ùzéronëch artiklów, klikni ''Òprzestôj
 'wlheader-showupdated' => "Artiklë jakczé òsta zmienioné òd Twòji slédny wizytë są wëapratnioné '''pògrëbieniém'''",
 'watchmethod-list' => 'szëkba ùzérónëch artiklów westrzód pòslédnëch edicëjów',
 'watchlistcontains' => 'Na twòji lësce ùzérónëch artiklów {{PLURAL:$1|je 1 strana|są $1 starnë|je $1 starnów}}.',
-'wlnote' => "Niżi môsz wëskrzënioné {{PLURAL:$1|slédną zmianã|'''$1''' slédnëch zmianów}} zrobioné òb {{PLURAL:$2|gòdzënã|'''$2''' gòdzënë/gòdzënów}}.",
 'wlshowlast' => 'Wëskrzëni zjinaczi z $1 gòdzënów $2 dni $3',
 'watchlist-options' => 'Òptacëje ùzérónych',
 
index e86553c..6b11952 100644 (file)
@@ -767,7 +767,7 @@ $messages = array(
 'contributions' => '{{GENDER:$1|польꙃєватєлꙗ}} добродѣꙗниꙗ',
 'contributions-title' => 'польꙃєватєлꙗ ⁖ $1 ⁖ добродѣꙗниꙗ',
 'mycontris' => 'добродѣꙗниꙗ',
-'contribsub2' => 'польꙃєватєлꙗ имѧ ⁖ $1 ⁖ ѥстъ ($2)',
+'contribsub2' => 'польꙃєватєлꙗ имѧ ⁖ {{GENDER:$3|$1}} ⁖ ѥстъ ($2)',
 'uctop' => '(нꙑнѣщьн҄ь обраꙁъ)',
 
 'sp-contributions-blocklog' => 'ꙁаграждєниꙗ їсторїꙗ',
@@ -882,7 +882,7 @@ $messages = array(
 # Media information
 'file-info-size' => '$1 × $2 п҃ѯ · дѣла мѣра : $3 · MIME тѷпъ : $4',
 'svg-long-desc' => 'дѣло SVG · обꙑчьнъ обраꙁъ : $1 × $2 п҃ѯ · дѣла мѣра : $3',
-'show-big-image' => 'плÑ\8cнÑ\8a Ð²Ð¸Ð´а обраꙁъ',
+'show-big-image' => 'иÑ\81Ñ\82оÑ\87Ñ\8cнÑ\8a Ð´Ñ£Ð»а обраꙁъ',
 'show-big-image-size' => '$1 × $2 пиѯєлъ',
 
 # Special:NewFiles
index 4d52199..f97aec1 100644 (file)
@@ -47,16 +47,13 @@ $linkPrefixCharset = 'a-zA-Z"\\x{80}-\\x{10ffff}';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Ссылкăсене аялтан туртса палармалла:',
-'tog-justify' => 'Страницăри текста сарлакăшĕпе вырнаçтармалла',
 'tog-hideminor' => 'Юлашки улшăнусене кăтарнă страницăра пĕчĕк тӳрлетӳ çеç кĕртнисене кăтартмалла мар',
 'tog-extendwatchlist' => 'Пĕтĕм улшăнусене кăтартакан анлă сăнав списокĕ',
 'tog-usenewrc' => 'Юлашки улшăнусен лайăхлатнă списокĕ (JavaScript)',
 'tog-numberheadings' => 'Заголовоксене хăй тĕллĕн номерлесе пымалла.',
 'tog-showtoolbar' => 'Тӳрлетнĕ чухне çӳлти хатĕрсен хăмине кăтартмалла (JavaScript)',
 'tog-editondblclick' => 'Иккĕ пуссан статьяна тӳрлетмелле (JavaScript)',
-'tog-editsection' => '«Тӳрлет» ссылкăна кашни пайра кăтартмалла',
 'tog-editsectiononrightclick' => 'Шăшин сылтăм пускăчне пуссан статья пайне тӳрлетмелле (JavaScript)',
-'tog-showtoc' => 'Тупмаллине кăтартмалла (3, е ытларах заголовок пулсан)',
 'tog-rememberpassword' => 'Мана ку компьютер çинче астуса хăвармалла (for a maximum of $1 {{PLURAL:$1|1=day|days}})',
 'tog-watchcreations' => 'Эпĕ тунă страницăсене сăнав списокне кĕртмелле',
 'tog-watchdefault' => 'Тӳрлетнĕ страницăсене сăнав списокне кĕртмелле',
index 6c11cc1..7a17954 100644 (file)
@@ -281,7 +281,6 @@ $messages = array(
 'vector-action-protect' => 'Diogelu',
 'vector-action-undelete' => 'Adfer',
 'vector-action-unprotect' => 'Newid y diogelwch',
-'vector-simplesearch-preference' => 'Galluogi bar chwilio syml (gwedd Vector yn unig)',
 'vector-view-create' => 'Dechrau',
 'vector-view-edit' => 'Golygu',
 'vector-view-history' => 'Gweld yr hanes',
@@ -562,8 +561,6 @@ Sylwer y bydd rhai tudalennau yn parhau i ymddangos fel ag yr oeddent pan oeddec
 'gotaccountlink' => 'Mewngofnodi',
 'userlogin-resetlink' => 'Ydych chi wedi anghofio eich manylion mewngofnodi?',
 'userlogin-resetpassword-link' => 'Wedi anghofio eich cyfrinair?',
-'helplogin-url' => 'Help:Mewngofnodi',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Cymorth i fewngofnodi]]',
 'userlogin-loggedin' => 'Rydych eisoes wedi mewngofnodi wrth yr enw {{GENDER:$1|$1}}.
 Defnyddiwch y ffurflen isod i fewngofnodi wrth rhyw enw arall.',
 'userlogin-createanother' => 'Creu cyfrif ychwanegol',
@@ -648,6 +645,9 @@ Oedwch $1 cyn mentro eto.',
 'suspicious-userlogout' => 'Gwrthodwyd eich cais i allgofnodi oherwydd ei fod yn ymddangos mai gweinydd wedi torri neu ddirprwy gelc a anfonodd y cais.',
 'createacct-another-realname-tip' => "Gallwch ddewis roi eich enw go iawn.
 Os y gwnewch, fe gaiff yr enw go iawn ei defnyddio wrth dadogi'ch gwaith.",
+'pt-login' => 'Mewngofnodi',
+'pt-createaccount' => 'Creu cyfri',
+'pt-userlogout' => 'Allgofnodi',
 
 # Email sending
 'php-mail-error-unknown' => 'Gwall anhysbys yng ngweithrediad post() PHP',
@@ -656,22 +656,27 @@ Os y gwnewch, fe gaiff yr enw go iawn ei defnyddio wrth dadogi'ch gwaith.",
 
 # Change password dialog
 'changepassword' => 'Newid y cyfrinair',
-'resetpass_announce' => "Fe wnaethoch fewngofnodi gyda chôd dros dro oddi ar e-bost.
-Er mwyn cwblhau'r mewngofnodi, rhaid i chi osod cyfrinair newydd fel hyn:",
+'resetpass_announce' => 'I orffen mewngofnodi, rhaid i chi bennu cyfrinair newydd.',
 'resetpass_header' => 'Newid cyfrinair y cyfrif',
 'oldpassword' => 'Hen gyfrinair:',
 'newpassword' => 'Cyfrinair newydd:',
 'retypenew' => 'Ail-deipiwch y cyfrinair newydd:',
 'resetpass_submit' => 'Gosod y cyfrinair a mewngofnodi',
 'changepassword-success' => "Llwyddodd y newid i'ch cyfrinair!",
+'changepassword-throttled' => 'Rydych wedi ceisio logio mewn yn rhy aml.
+Arhoswch am $1 cyn trio eto.',
 'resetpass_forbidden' => 'Ni ellir newid cyfrineiriau',
 'resetpass-no-info' => 'Ni allwch fynd at y dudalen hon yn uniongyrchol heblaw eich bod wedi mewngofnodi.',
 'resetpass-submit-loggedin' => 'Newidier y cyfrinair',
 'resetpass-submit-cancel' => 'Diddymu',
 'resetpass-wrong-oldpass' => "Mae'r cyfrinair dros dro neu gyfredol yn annilys.
 Gall fod eich bod wedi llwyddo newid eich cyfrinair eisoes neu eich bod wedi gofyn am gyfrinair dros dro newydd.",
+'resetpass-recycled' => 'Ailosodwch eich cyfrinair os gwelwch yn dda i rywbeth heblaw eich cyfrinair cyfredol.',
+'resetpass-temp-emailed' => "Rydych wedi mewngofnodi gyda chod dros dro. I gwbwlhau hyn, mae'n rhaid i chi ailosod eich cyfrinair yma:",
 'resetpass-temp-password' => 'Cyfrinair dros dro:',
 'resetpass-abort-generic' => 'Mae estyniad wedi atal newid y cyfrinair.',
+'resetpass-expired' => 'Mae oes eich cyfrinair wedi dod i ben. Gosodwch gyfrinair newydd i fewngofnodi.',
+'resetpass-expired-soft' => 'Mae eich cyfrinair wedi dod i ben ac mae\'n rhaid ei ailosod. Dewisiwch gyfrinair newydd sbon nawr, neu cliciwch "{{int:resetpass-submit-cancel}}" a\'i ailosod rywdro eto.',
 
 # Special:PasswordReset
 'passwordreset' => 'Ailosod cyfrinair',
@@ -715,6 +720,8 @@ Y cyfrinair dros dro: $2",
 'changeemail-password' => 'Eich cyfrinair ar {{SITENAME}}:',
 'changeemail-submit' => 'Newidier y cyfeiriad e-bost',
 'changeemail-cancel' => 'Diddymer',
+'changeemail-throttled' => "'Da chi wedi trio mewngofnodi gormod o weithiau.
+Daliwch eich gafael am $1 cyn ceisio eto.",
 
 # Special:ResetTokens
 'resettokens' => 'Ailosod tocynnau',
@@ -927,7 +934,9 @@ Mae ar gael yn barod.',
 'invalid-content-data' => "Data annilys i'r cynnwys",
 'content-not-allowed-here' => 'Nid yw cynnwys ar ffurf "$1" yn cael ei ganiatau ar y dudalen [[$2]]',
 'editwarning-warning' => 'Os y gadewch y dudalen hon mae\'n bosib y collwch eich newidiadau iddi.
-Os ydych wedi mewngofnodi gallwch ddiddymu\'r rhybudd hwn yn yr adran "Golygu" yn eich dewisiadau.',
+Os ydych wedi mewngofnodi gallwch ddiddymu\'r rhybudd hwn yn yr adran "{{int:prefs-editing}}" yn eich dewisiadau.',
+'editpage-notsupportedcontentformat-title' => 'Dydy fformat y cynnwys hwn ddim yn cael ei gefnogi gennym.',
+'editpage-notsupportedcontentformat-text' => "Dydy'r fformat $1 ar y cynnwys ddim yn cael ei gefnogi gan y model $2.",
 
 # Content models
 'content-model-wikitext' => 'cystrawen wici',
@@ -961,6 +970,7 @@ Cafodd yr argiau hyn eu hepgor.",
 'undo-success' => "Gellir dadwneud y golygiad. Byddwch gystal â gwirio'r gymhariaeth isod i sicrhau mai dyma sydd arnoch eisiau gwneud, ac yna rhowch y newidiadau ar gadw i gwblhau'r gwaith o ddadwneud y golygiad.",
 'undo-failure' => 'Methwyd a dadwneud y golygiad oherwydd gwrthdaro â golygiadau cyfamserol.',
 'undo-norev' => "Ni ellid dadwneud y golygiad oherwydd nad yw'n bod neu iddo gael ei ddileu.",
+'undo-nochange' => 'Ymddengys fod y golygiad wedi ei ddadwneud yn barod.',
 'undo-summary' => 'Dadwneud y golygiad $1 gan [[Special:Contributions/$2|$2]] ([[User talk:$2|Sgwrs]] | [[Special:Contributions/$2|{{MediaWiki:Contribslink}}]])',
 'undo-summary-username-hidden' => 'Dadwneud y golygiad $1 gan ddefnyddiwr cudd',
 
@@ -1046,8 +1056,6 @@ Serch hyn, gallwch eu cymharu o hyd; cewch weld y manylion ar y [{{fullurl:{{#Sp
 'revdelete-show-file-submit' => 'Ydw',
 'revdelete-selected' => "'''Y {{PLURAL:$2|golygiad|golygiad|golygiadau|golygiadau|golygiadau|golygiadau}} dewisedig o [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Digwyddiad|Digwyddiad|Digwyddiadau|Digwyddiadau|Digwyddiadau|Digwyddiadau}} a ddewiswyd o'r lòg:'''",
-'revdelete-text' => "'''Fe fydd y golygiadau a'r digwyddiadau sydd wedi eu diddymu i'w gweld o hyd yn hanes y dudalen ac yn y logiau, ond ni fydd y cyhoedd yn gallu gweld y cynnwys i gyd.'''
-Fe fydd gweinyddwyr eraill {{SITENAME}} o hyd yn gallu gweld yr hyn a guddiwyd. Fe allant ei ddatguddio trwy ddefnyddio'r dudalen arbennig hon, cyhyd ag nad oes cyfyngiadau ychwanegol wedi eu gosod.",
 'revdelete-confirm' => "Byddwch gystal â chadarnhau eich bod yn bwriadu gwneud hyn, eich bod yn deall yr effaith a gaiff, a'ch bod yn ei wneud yn ôl y [[{{MediaWiki:Policy-url}}|y polisi]].",
 'revdelete-suppress-text' => "'''Dim ond''' yn yr achosion sy'n dilyn y dylech fentro cuddio gwybodaeth:
 * Gwybodaeth a all fod yn enllib
@@ -1141,6 +1149,8 @@ Pan yn gwneud hyn dylid sicrhau nad yw dilyniant hanes tudalennau yn cael ei ddi
 'showhideselectedversions' => 'Dangos/cuddio y diwygiadau dewisedig',
 'editundo' => 'dadwneud',
 'diff-empty' => '(Dim gwahaniaeth)',
+'diff-multi-sameuser' => '(Ni ddangosir y {{PLURAL:$1||golygiad|$1 olygiad|$1 golygiad}} yn y canol gan yr un defnyddiwr)',
+'diff-multi-otherusers' => '(Ni ddangosir y {{PLURAL:$1||golygiad|$1 olygiad|$1 golygiad}} yn y canol gan {{PLURAL:$2||ddefnyddiwr|$2 ddefnyddiwr|$2 defnyddiwr}} arall)',
 '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}}.
 
@@ -1161,7 +1171,7 @@ Mae manylion pellach i'w cael yn [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'shown-title' => 'Dangos $1 {{PLURAL:$1|canlyiad|canlyniad|ganlyniad|chanlyniad|chanlyniad|canlyniad}} y dudalen',
 'viewprevnext' => 'Dangos ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''Mae tudalen o'r enw \"[[\$1]]\" ar y wici hwn'''",
-'searchmenu-new' => "'''Creu'r dudalen \"[[:\$1]]\" ar y wici hwn!'''",
+'searchmenu-new' => "'''Creu'r dudalen \"[[:\$1]]\" ar y wici hwn!''' {{PLURAL:\$2||Gweler hefyd y dudalen a ganfyddwyd wrth chwilio.|Gweler hefyd y canlyniadau chwilio.}}",
 'searchprofile-articles' => 'Tudalennau pwnc (erthyglau/ffeiliau)',
 'searchprofile-project' => 'Tudalennau Cymorth a Phrosiect',
 'searchprofile-images' => 'Ffeiliau amlgyfrwng',
@@ -1186,6 +1196,7 @@ Mae manylion pellach i'w cael yn [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'searchrelated' => 'erthyglau eraill tebyg',
 'searchall' => 'oll',
 'showingresults' => "Yn dangos $1 {{PLURAL:$1|canlyniad|canlyniad|ganlyniad|chanlyniad|chanlyniad|canlyniad}} isod gan ddechrau gyda rhif '''$2'''.",
+'showingresultsinrange' => 'Yn dangos hyd at {{PLURAL:$1||<strong>1</strong> canlyniad|<strong>$1</strong> ganlyniad|$1 o ganlyniadau}} isod yn yr ystod #<strong>$2</strong> i #<strong>$3</strong>.',
 'showingresultsnum' => "Yn dangos $3 {{PLURAL:$3|canlyniad|canlyniad|ganlyniad|chanlyniad|chanlyniad|canlyniad}} isod gan ddechrau gyda rhif '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5||Canlyniad '''$1''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''}} ar gyfer '''$4'''",
 'search-nonefound' => "Ni chafwyd dim canlyniadau i'r ymholiad.",
@@ -1505,14 +1516,26 @@ Mae'r wybodaeth hon ar gael i'r cyhoedd.",
 'recentchanges-legend-heading' => "'''Allwedd:'''",
 'recentchanges-legend-newpage' => '(gweler hefyd [[Special:NewPages|restr y tudalennau newydd]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "Isod rhestrir pob newid ers '''$2''' (hyd at '''$1''' ohonynt).",
+'rcnotefrom' => "Isod rhestrir pob newid er <strong>'''$2'''</strong> (ymddengys hyd at <strong>'''$1'''</strong> ohonynt).",
 'rclistfrom' => 'Dangos newidiadau newydd, gan ddechrau ers $1',
 'rcshowhideminor' => '$1 golygiadau bychain',
+'rcshowhideminor-show' => 'Dangoser',
+'rcshowhideminor-hide' => 'Cuddier',
 'rcshowhidebots' => '$1 botiau',
+'rcshowhidebots-show' => 'Dangoser',
+'rcshowhidebots-hide' => 'Cuddier',
 'rcshowhideliu' => '$1 o ddefnyddwyr cofrestredig',
+'rcshowhideliu-show' => 'Dangoser',
+'rcshowhideliu-hide' => 'Cuddier',
 'rcshowhideanons' => '$1 defnyddwyr anhysbys',
+'rcshowhideanons-show' => 'Dangoser',
+'rcshowhideanons-hide' => 'Cuddier',
 'rcshowhidepatr' => '$1 golygiadau wedi derbyn ymweliad patrôl',
+'rcshowhidepatr-show' => 'Dangoser',
+'rcshowhidepatr-hide' => 'Cuddier',
 'rcshowhidemine' => '$1 fy ngolygiadau',
+'rcshowhidemine-show' => 'Dangoser',
+'rcshowhidemine-hide' => 'Cuddier',
 'rclinks' => 'Dangos y $1 newid diweddaraf yn ystod y(r) $2 diwrnod diwethaf<br />$3',
 'diff' => 'gwahan',
 'hist' => 'hanes',
@@ -1639,6 +1662,8 @@ Cyn i chi ail-lwytho'r ffeil, dylech holi i rywun â'r gallu ganddo i weld data
 'php-uploaddisabledtext' => 'Anablwyd uwchlwytho ffeiliau yn PHP.
 Gwiriwch y gosodiad ar file_uploads.',
 'uploadscripted' => "Mae'r ffeil hon yn cynnwys HTML neu sgript a all achosi problemau i borwyr gwe.",
+'uploadscriptednamespace' => "Mae'r ffeil SVG hon yn cynnwys yr enw '$1' sy'n enw annilys ar barth",
+'uploadinvalidxml' => "Ni ellid dosrannu'r XML yn y ffeil a uwchlwythwyd.",
 'uploadvirus' => 'Mae firws gan y ffeil hon! Manylion: $1',
 'uploadjava' => "Ffeil ZIP yw hwn sy'n cynnwys ffeil Java .class.
 Ni chaniateir uwchlwytho ffeiliau Java, oherwydd y gallant osgoi cyfyngiadau diogelwch.",
@@ -1999,6 +2024,14 @@ Gosodwyd <del>llinell</del> drwy'r eitemau sydd eisoes wedi eu datrys.",
 'protectedpages-cascade' => 'A sgydol-ddiogelwyd yn unig',
 'protectedpages-noredirect' => 'Cuddio ailgyfeiriadau',
 'protectedpagesempty' => "Does dim tudalennau wedi eu diogelu gyda'r paramedrau hyn.",
+'protectedpages-timestamp' => 'Stamp amser',
+'protectedpages-page' => 'Tudalen',
+'protectedpages-expiry' => 'Daw i ben',
+'protectedpages-performer' => 'Y diogelwr',
+'protectedpages-params' => "Paramedrau'r diogelu",
+'protectedpages-reason' => 'Rheswm',
+'protectedpages-unknown-timestamp' => 'Anhysbys',
+'protectedpages-unknown-performer' => 'Defnyddiwr anhysbys',
 'protectedtitles' => 'Teitlau wedi eu diogelu',
 'protectedtitlesempty' => "Ar hyn o bryd nid oes unrhyw deitlau wedi eu diogelu a'r paramedrau hyn.",
 'listusers' => 'Rhestr defnyddwyr',
@@ -2187,6 +2220,7 @@ Pan fydd y dudalen hon, neu ei thudalen sgwrs, yn newid, fe fyddant yn ymddangos
 'watchmethod-list' => "yn chwilio'r tudalennau ar y rhestr wylio am ddiwygiadau diweddar",
 'watchlistcontains' => '{{PLURAL:$1|Nid oes dim tudalennau|Mae $1 dudalen|Mae $1 dudalen|Mae $1 tudalen|Mae $1 thudalen|Mae $1 o dudalennau}} ar eich rhestr wylio.',
 'iteminvalidname' => "Problem gyda'r eitem '$1', enw annilys...",
+'wlnote2' => 'Isod, fe welwch y newidiadau yn ystod {{PLURAL:$1|yr awr|yr awr|y ddwyawr ddiwethaf|teirawr diwethaf|<strong>$1</strong> awr diwethaf}}, hyd at $2, $3.',
 'wlshowlast' => "Dangoser newidiadau'r $1 awr ddiwethaf neu'r $2 {{PLURAL:$2|diwrnod|diwrnod|ddiwrnod|diwrnod|diwrnod|diwrnod}} diwethaf neu'r $3 newidiadau.",
 'watchlist-options' => 'Dewisiadau ar gyfer y rhestr wylio',
 
@@ -2274,7 +2308,7 @@ Gwelwch y $2 am gofnod o\'r dileuon diweddar.',
 Cyfyngwyd ar y gallu i ddileu tudalennau sydd wedi eu golygu cymaint â hyn, er mwyn osgoi amharu ar weithrediad databas {{SITENAME}} yn ddamweiniol.",
 'delete-warning-toobig' => "Cafwyd dros $1 {{PLURAL:$1|o olygiadau}} i'r dudalen hon.
 Gallai dileu tudalen, gyda hanes golygu cymaint â hyn iddi, beri dryswch i weithrediadau'r databas ar {{SITENAME}}; ewch ati'n ofalus.",
-'deleting-backlinks-warning' => "'''Rhybudd:''' Mae tudalennau eraill yn cysylltu i'r dudalen yr ydych ar fin ei dileu.",
+'deleting-backlinks-warning' => "'''Rhybudd:''' Mae [[Special:WhatLinksHere/{{FULLPAGENAME}}|tudalennau eraill]] yn cysylltu i'r dudalen yr ydych ar fin ei dileu, neu'n trawsgynnwys y dudalen hon.",
 
 # Rollback
 'rollback' => 'Gwrthdroi golygiadau',
@@ -2451,6 +2485,7 @@ Mae'r cofnod diweddaraf yn y lòg blocio i'w weld isod:",
 'sp-contributions-search' => 'Chwilio am gyfraniadau',
 'sp-contributions-username' => 'Cyfeiriad IP neu enw defnyddiwr:',
 'sp-contributions-toponly' => "Dangos golygiadau sy'n olygiadau diweddaraf yn unig",
+'sp-contributions-newonly' => "Dangos y golygiadau hynny sy'n dechrau tudalen yn unig",
 'sp-contributions-submit' => 'Chwilier',
 
 # What links here
@@ -2575,7 +2610,7 @@ Gallwch weld rhestr y rhwystrau a'r gwaharddiadau sydd yn weithredol ar hyn o br
 'range_block_disabled' => 'Nid oes modd i weinyddwyr greu rhwystrau ystod.',
 'ipb_expiry_invalid' => 'Amser terfynu yn annilys.',
 'ipb_expiry_temp' => "Mae'n rhaid i rwystr ar ddefnyddiwr fod yn barhaus os am guddio'r enw.",
-'ipb_hide_invalid' => "Ddim yn gallu cuddio'r cyfrif hwn; efallai bod ganddo ormod o olygiadau.",
+'ipb_hide_invalid' => "Ddim yn gallu cuddio'r cyfrif hwn; mae mwy {{PLURAL:$1||nag 1 golygiad|na $1 olygiad|na $1 golygiad}} iddo.",
 'ipb_already_blocked' => 'Mae "$1" eisoes wedi\'i rwystro',
 'ipb-needreblock' => "Mae $1 wedi' rwystro'n barod. A ydych am newid y gosodiadau?",
 'ipb-otherblocks-header' => '{{PLURAL:$1|Rhwystr|Rhwystr|Rhwystrau|Rhwystrau|Rhwystrau|Rhwystrau}} eraill',
@@ -2745,6 +2780,7 @@ Os ydych am gyfrannu at y gwaith o gyfieithu ar gyfer holl prosiectau MediaWiki
 'allmessages-prefix' => 'Hidlo yn ôl rhagddodiad:',
 'allmessages-language' => 'Iaith:',
 'allmessages-filter-submit' => 'Eler',
+'allmessages-filter-translate' => 'Cyfieithu',
 
 # Thumbnails
 'thumbnail-more' => 'Chwyddo',
@@ -2761,6 +2797,7 @@ $2',
 'thumbnail_image-type' => "Nid yw'r math hwn o ddelwedd yn cael ei gynnal",
 'thumbnail_gd-library' => 'Mae ffurfwedd y llyfrgell GD yn anghyflawn: y ffwythiant $1 yn eisiau',
 'thumbnail_image-missing' => "Mae'n debyg bod y ffeil yn eisiau: $1",
+'thumbnail_image-failure-limit' => "'Da chi 'di methu gormod o weithiau ($1 neu fwy) i rendro'r ciplun. Ceisiwch eto nes ymlaen.",
 
 # Special:Import
 'import' => 'Mewnforio tudalennau',
@@ -2798,7 +2835,7 @@ Dim ond rhan o'r ffeil sydd wedi ei huwchlwytho.",
 Mae ffolder dros dro yn eisiau.',
 'import-parse-failure' => "Wedi methu dosrannu'r mewnforiad XML",
 'import-noarticle' => "Ni chafwyd tudalen i'w mewnforio!",
-'import-nonewrevisions' => "Mae'r holl ddiwygiadau eisoes wedi eu mewnforio.",
+'import-nonewrevisions' => 'Ni fewnforwyd unrhyw ddiwygiadau (y cwbl eisoes yn bresennol, neu wedi eu hepgor oherwydd eu bod yn wallus).',
 'xml-error-string' => '$1 ar linell $2, col $3 (beit $4): $5',
 'import-upload' => 'Uwchlwytho data XML',
 'import-token-mismatch' => "Collwyd data'r sesiwn. Ceisiwch eto.",
@@ -3946,6 +3983,7 @@ Defnydd:
 'expand_templates_ok' => 'Iawn',
 'expand_templates_remove_comments' => 'Peidio â dangos sylwadau',
 'expand_templates_remove_nowiki' => "Cuddio'r tagiau <nowiki> wrth ehangu",
+'expand_templates_generate_xml' => 'Dangos y goeden dosrannu XML',
 'expand_templates_generate_rawhtml' => 'Dangos HTML crai',
 'expand_templates_preview' => 'Rhagolwg',
 
index bb3aacc..689947b 100644 (file)
@@ -199,19 +199,19 @@ $messages = array(
 'tog-hidepatrolled' => 'Skjul patruljerede redigeringer i seneste ændringer',
 'tog-newpageshidepatrolled' => 'Skjul patruljerede sider på listen over nye sider',
 'tog-extendwatchlist' => 'Udvid overvågningslisten til at vise alle ændringer og ikke kun den nyeste',
-'tog-usenewrc' => 'Gruppér ændringerne per side i listen over seneste ændringer og i overvågningslisten',
+'tog-usenewrc' => 'Gruppér ændringer per side i listen over seneste ændringer og i overvågningslisten',
 'tog-numberheadings' => 'Automatisk nummerering af overskrifter',
 'tog-showtoolbar' => 'Vis værktøjslinje til redigering',
 'tog-editondblclick' => 'Redigér sider med dobbeltklik',
 'tog-editsectiononrightclick' => 'Redigér afsnit ved at højreklikke på deres titler',
-'tog-rememberpassword' => 'Husk mig i denne browser (i højst $1 {{PLURAL:$1|dag|dage}})',
+'tog-rememberpassword' => 'Husk min login i denne browser (i højst $1 {{PLURAL:$1|dag|dage}})',
 'tog-watchcreations' => 'Tilføj sider, jeg opretter, og filer, jeg lægger op, til min overvågningsliste',
 'tog-watchdefault' => 'Tilføj sider og filer, jeg redigerer, til min overvågningsliste',
 'tog-watchmoves' => 'Tilføj sider og filer, jeg flytter, til min overvågningsliste',
 'tog-watchdeletion' => 'Tilføj sider og filer, jeg sletter, til min overvågningsliste',
-'tog-minordefault' => 'Markér som standard alle redigeringer som mindre redigeringer',
+'tog-minordefault' => 'Markér som standard alle redigeringer som mindre',
 'tog-previewontop' => 'Vis forhåndsvisning over redigeringsboksen',
-'tog-previewonfirst' => 'Vis forhåndsvisning når du starter med at redigere',
+'tog-previewonfirst' => 'Vis forhåndsvisning ved første redigering',
 'tog-enotifwatchlistpages' => 'Send mig en e-mail ved ændringer til en side eller fil på min overvågningsliste',
 'tog-enotifusertalkpages' => 'Send mig en e-mail når min brugerdiskussionsside ændres',
 'tog-enotifminoredits' => 'Send mig også en e-mail ved mindre ændringer af sider og filer på min overvågningsliste',
@@ -228,9 +228,8 @@ $messages = array(
 'tog-watchlisthideanons' => 'Skjul anonyme brugeres redigeringer i overvågningslisten',
 'tog-watchlisthidepatrolled' => 'Skjul patrujerede ændringer fra overvågningslisten',
 'tog-ccmeonemails' => 'Send mig kopier af e-mails som jeg sender til andre brugere',
-'tog-diffonly' => 'Vis ved versionssammenligninger kun forskelle, ikke hele siden',
+'tog-diffonly' => 'Vis ikke sideindhold neden under versionssammenligninger',
 'tog-showhiddencats' => 'Vis skjulte kategorier',
-'tog-noconvertlink' => 'Slå konvertering af sidetitler fra',
 'tog-norollbackdiff' => 'Vis ikke forskel efter tilbagerulning',
 'tog-useeditwarning' => 'Advar mig, hvis jeg forlader en redigeringsside med ændringer, der ikke er gemt.',
 'tog-prefershttps' => 'Brug altid en sikker forbindelse, når du er logget ind',
@@ -357,7 +356,6 @@ $messages = array(
 'vector-action-protect' => 'Beskyt',
 'vector-action-undelete' => 'Gendan',
 'vector-action-unprotect' => 'Ændr beskyttelse',
-'vector-simplesearch-preference' => 'Aktivér forenklet søgefelt (kun Vector-udseendet)',
 'vector-view-create' => 'Opret',
 'vector-view-edit' => 'Redigér',
 'vector-view-history' => 'Se historik',
@@ -639,8 +637,6 @@ Glem ikke at ændre dine [[Special:Preferences|{{SITENAME}} indstillinger]].',
 'gotaccountlink' => 'Log på',
 'userlogin-resetlink' => 'Har du glemt dine login oplysninger?',
 'userlogin-resetpassword-link' => 'Glemt din adgangskode?',
-'helplogin-url' => 'Help:Logge på',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjælp til at logge på]]',
 'userlogin-loggedin' => 'Du er allerede logget på som {{GENDER:$1|$1}}.
 Brug formularen nedenfor til at logge på som en anden bruger.',
 'userlogin-createanother' => 'Opret en anden konto',
@@ -732,6 +728,9 @@ Vent venligst $1, før du prøver igen.',
 'suspicious-userlogout' => 'Din anmodning om at logge af blev nægtet, fordi det ser ud som den blev sendt af en ødelagt browser eller caching proxy.',
 'createacct-another-realname-tip' => 'Angivelse af rigtigt navn er valgfrit.
 Hvis du vælger at oplyse dit navn, vil det blive brugt til at tilskrive dig dit arbejde.',
+'pt-login' => 'Log på',
+'pt-createaccount' => 'Opret konto',
+'pt-userlogout' => 'Log af',
 
 # Email sending
 'php-mail-error-unknown' => 'Ukendt fejl i PHP funktionen mail()',
@@ -740,7 +739,7 @@ Hvis du vælger at oplyse dit navn, vil det blive brugt til at tilskrive dig dit
 
 # Change password dialog
 'changepassword' => 'Skift adgangskode',
-'resetpass_announce' => 'Du loggede på med den via e-mail tilsendte adgangskode. For at afslutte tilmeldingen, skal du nu vælge en ny adgangskode.',
+'resetpass_announce' => 'For at afslutte indlogningen skal du vælge en ny adgangskode.',
 'resetpass_text' => '<!-- Tilføj tekst her -->',
 'resetpass_header' => 'Skift adgangskode',
 'oldpassword' => 'Gammel adgangskode:',
@@ -748,14 +747,21 @@ Hvis du vælger at oplyse dit navn, vil det blive brugt til at tilskrive dig dit
 'retypenew' => 'Gentag ny adgangskode:',
 'resetpass_submit' => 'Gem adgangskode og log på',
 'changepassword-success' => 'Din adgangskode er nu ændret!',
+'changepassword-throttled' => 'Du har forsøgt at logge på for mange gange for nylig.
+Vent venligst $1, før du prøver igen.',
 'resetpass_forbidden' => 'Adgangskoder kan ikke ændres',
 'resetpass-no-info' => 'Du skal være logget på for at komme direkte til denne side.',
 'resetpass-submit-loggedin' => 'Skift adgangskode',
 'resetpass-submit-cancel' => 'Annuller',
 'resetpass-wrong-oldpass' => 'Ugyldig midlertidig eller gældende adgangskode.
 Du har muligvis allerede skiftet din adgangskode eller anmodet om en ny midlertidig kode.',
+'resetpass-recycled' => 'Vær venlig at ændre dit kodeord til et andet end dit nuværende kodeord.',
+'resetpass-temp-emailed' => 'Du loggede på med en midlertidig kode tilsendt på e-mail.
+For at afslutte indlogning, skal du oprette et nyt kodeord:',
 'resetpass-temp-password' => 'Midlertidig adgangskode',
 'resetpass-abort-generic' => 'Ændring af adgangskode er blevet afbrudt af en udvidelse',
+'resetpass-expired' => 'Dit kodeord er udløbet. Vær venlig at ændre det til et nyt.',
+'resetpass-expired-soft' => 'Dit kodeord er udløbet og skal ændres. Vær venlig at ændre det nu, eller tryk annuller for at ændre det senere.',
 
 # Special:PasswordReset
 'passwordreset' => 'Nulstil adgangskode',
@@ -799,6 +805,8 @@ Midlertidig adgangskode: $2',
 'changeemail-password' => 'Din adgangskode til {{SITENAME}}:',
 'changeemail-submit' => 'Ændre e-mail',
 'changeemail-cancel' => 'Afbryd',
+'changeemail-throttled' => 'Du har forsøgt at logge på for mange gange.
+Vent venligst $1, før du prøver igen.',
 
 # Special:ResetTokens
 'resettokens' => 'Nulstil nøgler',
@@ -1016,7 +1024,9 @@ Den ser du til at være slettet.',
 'invalid-content-data' => 'Ugyldig indholdsdata',
 'content-not-allowed-here' => '"$1" indhold er ikke tilladt på siden [[$2]]',
 'editwarning-warning' => 'Hvis du forlader siden nu, risikerer du at miste alle ændringer, som du har lavet.
-Denne advarsel kan slås fra under "Redigering" i dine indstillinger.',
+Denne advarsel kan slås fra under "{{int:prefs-editing}}" i dine indstillinger.',
+'editpage-notsupportedcontentformat-title' => 'Indholdsformatet understøttes ikke',
+'editpage-notsupportedcontentformat-text' => 'Indholdsformatet $1 understøttes ikke af indholdsmodellen $2',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
@@ -1049,6 +1059,7 @@ Der bør være færre end {{PLURAL:$2|$2 kald}}, lige nu er der {{PLURAL:$1|$1 k
 Kontroller venligst sammenligningen herunder for at bekræfte at det er hvad du ønsker at gøre, og gem så ændringerne for at fuldføre fjernelsen.',
 'undo-failure' => 'Redigeringen kunne ikke fjernes på grund af konflikter med efterfølgende redigeringer.',
 'undo-norev' => 'Redigeringen kunne ikke fjernes fordi den ikke findes eller er blevet slettet.',
+'undo-nochange' => 'Ændringen ser ud til allerede at være blevet fjernet.',
 'undo-summary' => 'Fjerner version $1 af [[Special:Contributions/$2|$2]] ([[User talk:$2|diskussion]])',
 'undo-summary-username-hidden' => 'Fortryde revision $1 af en skjult bruger',
 
@@ -1131,8 +1142,6 @@ Du kan se denne forskel; der kan findes detaljer i [{{fullurl:{{#Special:Log}}/s
 'revdelete-show-file-submit' => 'Ja',
 'revdelete-selected' => "'''{{PLURAL:$2|Valgte version|Valgte versioner}} af '''$1:''''''",
 'logdelete-selected' => "'''{{PLURAL:$1|Valgt logindførsel|Valgte logindførsler}}:'''",
-'revdelete-text' => "'''Slettede versioner vil fortsat vises i sidehistorik og på logsider, men dele af deres indhold vil ikke være offentligt tilgængeligt.'''
-Andre administratorer på {{SITENAME}} vil fortsat være i stand til at se det skjulte indhold og kan gendanne det igen, medmindre der laves yderligere restriktioner.",
 'revdelete-confirm' => 'Vær venlig at bekræfte at du vil gøre dette, at du forstår konsekvenserne, og at du gør det i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].',
 'revdelete-suppress-text' => "Der bør '''kun''' skjules i de følgende tilfælde:
 * Potentielt injurierende oplysninger
@@ -1228,6 +1237,8 @@ Vær opmæksom på at bevare kontinuiteten i sidehistorikken.
 'showhideselectedversions' => 'Vis/skjul udvalgte versioner',
 'editundo' => 'fjern redigering',
 'diff-empty' => '(Ingen forskel)',
+'diff-multi-sameuser' => '({{PLURAL:$1|En mellemliggende version|$1 mellemliggende versioner}} af den samme bruger vises ikke)',
+'diff-multi-otherusers' => '({{PLURAL:$1|En mellemliggende version|$1 mellemliggende versioner}} af {{PLURAL:$2|en anden bruger|$2 andre brugere}} ikke vist)',
 'diff-multi-manyusers' => '({{PLURAL:$1|En mellemliggende version|$1 mellemliggende versioner}} af mere end $2 {{PLURAL:$2|bruger|brugere}} ikke vist)',
 'difference-missing-revision' => '{{PLURAL:$2|En revision|$2 revisioner}} af denne forskel ($1) {{PLURAL:$2|blev|blev}} ikke fundet.
 
@@ -1248,7 +1259,7 @@ Detaljer kan findes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'shown-title' => 'Vis $1 {{PLURAL:$1|resultat|resultater}} per side',
 'viewprevnext' => 'Vis ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''Der er en side med navnet \"[[:\$1]]\" på denne wiki'''",
-'searchmenu-new' => "'''Opret siden \"[[:\$1]]\" i denne wiki'''",
+'searchmenu-new' => '<strong>Opret siden "[[:$1]]" på denne wiki!</strong> {{PLURAL:$2|0=|Se også siden der blev fundet for din søgning.|Se også de søgeresultater der blev fundet.}}',
 'searchprofile-articles' => 'Indholdssider',
 'searchprofile-project' => 'Hjælpe- og projektsider',
 'searchprofile-images' => 'Multimedia',
@@ -1594,11 +1605,23 @@ Vær venlig at gennemse og bekræft dine ændringer.',
 'rcnotefrom' => "Nedenfor er op til '''$1''' ændringer siden '''$2''' vist.",
 'rclistfrom' => 'Vis nye ændringer startende fra $1',
 'rcshowhideminor' => '$1 mindre ændringer',
+'rcshowhideminor-show' => 'Vis',
+'rcshowhideminor-hide' => 'Skjul',
 'rcshowhidebots' => '$1 robotter',
+'rcshowhidebots-show' => 'Vis',
+'rcshowhidebots-hide' => 'Skjul',
 'rcshowhideliu' => '$1 registrerede brugere',
+'rcshowhideliu-show' => 'Vis',
+'rcshowhideliu-hide' => 'Skjul',
 'rcshowhideanons' => '$1 anonyme brugere',
+'rcshowhideanons-show' => 'Vis',
+'rcshowhideanons-hide' => 'Skjul',
 'rcshowhidepatr' => '$1 kontrollerede ændringer',
+'rcshowhidepatr-show' => 'Vis',
+'rcshowhidepatr-hide' => 'Skjul',
 'rcshowhidemine' => '$1 egne bidrag',
+'rcshowhidemine-show' => 'Vis',
+'rcshowhidemine-hide' => 'Skjul',
 'rclinks' => 'Vis seneste $1 ændringer i de sidste $2 dage<br />$3',
 'diff' => 'forskel',
 'hist' => 'historik',
@@ -1723,6 +1746,7 @@ Du bør spørge en person med evnen til at se undertrykte fildata for at gennemg
 'uploaddisabledtext' => 'Oplægning af filer er deaktiveret.',
 'php-uploaddisabledtext' => 'Oplægning af filer er forhindret i PHP. Tjek indstillingen for file_uploads.',
 'uploadscripted' => 'Denne fil indeholder HTML eller script-kode, der i visse tilfælde can fejlfortolkes af en browser.',
+'uploadinvalidxml' => 'XML i den uploadede fil kunne ikke tolkes.',
 'uploadvirus' => 'Denne fil indeholder en virus! Virusnavn: $1',
 'uploadjava' => 'Denne fil er en ZIP-fil, der indeholder en Java .class-fil.
 Det er ikke tilladt at uploade Javafiler, da det kan forårsage, at sikkerhedsrestriktioner bliver sprunget over.',
@@ -2089,10 +2113,20 @@ Hver linje indeholder henvisninger til den første og den anden omdirigering, s
 'deadendpagestext' => 'De følgende sider henviser ikke til andre sider i denne wiki.',
 'protectedpages' => 'Skrivebeskyttede sider',
 'protectedpages-indef' => 'Kun beskyttelser på ubestemt tid',
+'protectedpages-summary' => 'Denne side indeholder en liste over eksisterende sider, der i øjeblikket er beskyttet. For en liste over titler, der er beskyttet fra oprettelse, se [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Kun nedarvende beskyttelser',
 'protectedpages-noredirect' => 'Skjul omdirigeringer',
 'protectedpagesempty' => 'I øjeblikket er ingen sider beskyttet på denne måde.',
+'protectedpages-timestamp' => 'Tidsstempel',
+'protectedpages-page' => 'Side',
+'protectedpages-expiry' => 'Udløber',
+'protectedpages-performer' => 'Beskyttende bruger',
+'protectedpages-params' => 'Beskyttelsesparametre',
+'protectedpages-reason' => 'Årsag',
+'protectedpages-unknown-timestamp' => 'Ukendt',
+'protectedpages-unknown-performer' => 'Ukendt bruger',
 'protectedtitles' => 'Beskyttede sidenavne',
+'protectedtitles-summary' => 'Denne side indeholder en liste over titler, der i øjeblikket er beskyttet fra oprettelse. For en liste over eksisterende sider, der er beskyttet, se [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Der er ingen sidetitler der er beskyttet med disse parametre.',
 'listusers' => 'Brugerliste',
 'listusers-editsonly' => 'Vis kun brugere med redigeringer',
@@ -2279,6 +2313,7 @@ Fremtidige ændringer af denne side og dens tilknyttede diskussionsside vil bliv
 'watchmethod-list' => 'Tjekker seneste ændringer for sider i din overvågningsliste',
 'watchlistcontains' => 'Din overvågningsliste indeholder $1 {{PLURAL:$1|side|sider}}.',
 'iteminvalidname' => "Problem med '$1', ugyldigt navn...",
+'wlnote2' => 'Nedenfor ses ændringerne i {{PLURAL:$1|den sidste time|de sidste <strong>$1</strong> timer}} op til den $2 kl. $3.',
 'wlshowlast' => 'Vis de seneste $1 timer $2 dage $3',
 'watchlist-options' => 'Indstillinger for overvågningslisten',
 
@@ -2363,7 +2398,7 @@ Bekræft venligst at du virkelig vil gøre dette, at du forstår konsekvenserne,
 'delete-edit-reasonlist' => 'Rediger sletningsårsager',
 'delete-toobig' => 'Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}}. Sletning af sådanne sider er begrænset, for at forhindre utilsigtet forstyrrelse af {{SITENAME}}.',
 'delete-warning-toobig' => 'Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}} versioner, slettes den kan det forstyrre driften af {{SITENAME}}, gå forsigtigt frem.',
-'deleting-backlinks-warning' => "'''Advarsel:''' Andre sider linker til den side, du er ved at slette.",
+'deleting-backlinks-warning' => "'''Advarsel:''' Andre sider linker til eller inkluderer den side, du er ved at slette.",
 
 # Rollback
 'rollback' => 'Fjern redigeringer',
@@ -2539,6 +2574,7 @@ Den seneste post i blokeringsloggen vises nedenfor:',
 'sp-contributions-search' => 'Søg efter bidrag',
 'sp-contributions-username' => 'IP-adresse eller brugernavn:',
 'sp-contributions-toponly' => 'Vis kun redigeringer, der er aktuelle versioner',
+'sp-contributions-newonly' => 'Vis kun redigeringer, der er sideoprettelser',
 'sp-contributions-submit' => 'Søg',
 
 # What links here
@@ -2598,6 +2634,7 @@ Angiv en konkret begrundelse herunder (for eksempel med angivelse af sider der h
 Se [[Special:BlockList|blokeringslisten]] for alle blokeringer.',
 'ipb-blockingself' => 'Du er ved at blokere dig selv! Er du sikker på, du vil gøre det?',
 'ipb-confirmhideuser' => 'Du er ved at blokere en bruger med "skjul bruger" aktiveret. Dette vil skjule brugerens navn på alle lister og logposter. Er du sikker på du vil gøre det?',
+'ipb-confirmaction' => 'Hvis du er sikker på, at du virkelig ønsker at gøre det, kan du markerer feltet "{{int:ipb-confirm}}" nederst.',
 'ipb-edit-dropdown' => 'Rediger blokeringsbegrundelser',
 'ipb-unblock-addr' => 'Ophæv blokeringen af "$1"',
 'ipb-unblock' => 'Frigive IP-adresse/bruger',
@@ -2639,8 +2676,8 @@ Se [[Special:BlockList|blokeringslisten]] for alle blokeringer.',
 'change-blocklink' => 'ændring af blokering',
 'contribslink' => 'bidrag',
 'emaillink' => 'send e-mail',
-'autoblocker' => 'Du er automatisk blokeret, fordi du deler IP-adresse med "[[User:$1|$1]]".
-Begrundelse: "$2".',
+'autoblocker' => 'Du er automatisk blokeret, fordi din IP-adresse for nylig er blevet brugt af "[[User:$1|$1]]".
+Begrundelsen for blokeringen af $1 er "$2".',
 'blocklogpage' => 'Blokeringslog',
 'blocklog-showlog' => 'Denne bruger har tidligere været blokeret.
 Blokeringsloggen vises nedenfor som reference:',
@@ -2662,7 +2699,7 @@ Se [[Special:BlockList|blokeringslisten]] for den nuværende liste med aktuelle
 'range_block_disabled' => 'Sysop-muligheden for at oprette blokeringsklasser er slået fra.',
 'ipb_expiry_invalid' => 'Udløbstiden er ugyldig.',
 'ipb_expiry_temp' => 'Brugernavnet kan kun skjules ved permanente blokeringer.',
-'ipb_hide_invalid' => 'Kan ikke skjule denne konto; den kan have for mange redigeringer.',
+'ipb_hide_invalid' => 'Kan ikke skjule denne konto; den har mere end {{PLURAL:$1|en redigering|$1 redigeringer}}.',
 'ipb_already_blocked' => '„$1“ er allerede blokeret',
 'ipb-needreblock' => '$1 er allerede blokeret. Vil du ændre indstillingerne?',
 'ipb-otherblocks-header' => 'Yderligere {{PLURAL:$1|blokering|blokeringer}}',
@@ -2824,6 +2861,7 @@ Besøg venligst [https://www.mediawiki.org/wiki/Localisation MediaWiki-lokaliser
 'allmessages-prefix' => 'Filtrér efter forstavelse:',
 'allmessages-language' => 'Sprog:',
 'allmessages-filter-submit' => 'Udfør',
+'allmessages-filter-translate' => 'Oversæt',
 
 # Thumbnails
 'thumbnail-more' => 'Forstør',
@@ -2874,7 +2912,7 @@ Alle Transwiki import-aktioner protokolleres i [[Special:Log/import|import-logge
 'importuploaderrortemp' => 'Upload af importfil mislykkedes da en midlertidig mappe mangler.',
 'import-parse-failure' => 'XML fortolkningsfejl under importering',
 'import-noarticle' => 'Der er ingen sider at importere!',
-'import-nonewrevisions' => 'Alle versioner er allerede importeret.',
+'import-nonewrevisions' => 'Ingen versioner importeret (alle var enten allerede til stede, eller blev sprunget over på grund af fejl).',
 'xml-error-string' => '$1 på linje $2, kolonne $3 (byte $4): $5',
 'import-upload' => 'Upload XML-data',
 'import-token-mismatch' => 'Sessionsdata er mistet. Prøv venligst igen.',
@@ -2885,6 +2923,7 @@ Alle Transwiki import-aktioner protokolleres i [[Special:Log/import|import-logge
 'import-error-special' => 'Siden "$1" importeres ikke, da den tilhører et særligt navnerum, der ikke tillader sider.',
 'import-error-invalid' => 'Siden "$1" importeres ikke, da dens navn er ugyldigt.',
 'import-error-unserialize' => 'Ændring $2 af siden "$1" kunne ikke afserialiseres. Ændringen brugte indholdsmodel $3 serialiseret som $4.',
+'import-error-bad-location' => 'Version $2 der bruger indholdsmodellen $3 kan ikke gemmes på "$1" på denne wiki, da denne model ikke understøttes på denne side.',
 'import-options-wrong' => '{{PLURAL:$2|Ugyldig indstilling|Ugyldige indstillinger}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Den rodside der er angivet har en ugyldig titel.',
 'import-rootpage-nosubpage' => 'Navnerummet "$1" tillader ikke undersider af rodsiderne.',
index 2d208ee..87963ac 100644 (file)
@@ -69,6 +69,7 @@
  * @author Tischbeinahe
  * @author UV
  * @author Umherirrender
+ * @author Useopensource tobias
  * @author Vogone
  * @author W (aka Wuzur)
  * @author Wikifan
@@ -429,7 +430,7 @@ $messages = array(
 'tog-hideminor' => 'Kleine Änderungen in den „Letzten Änderungen“ ausblenden',
 'tog-hidepatrolled' => 'Kontrollierte Änderungen in den „Letzten Änderungen“ ausblenden',
 'tog-newpageshidepatrolled' => 'Kontrollierte Seiten bei den „Neuen Seiten“ ausblenden',
-'tog-extendwatchlist' => 'Erweiterte Beobachtungsliste zur Anzeige aller Änderungen',
+'tog-extendwatchlist' => 'Beobachtungsliste erweitern, um statt nur der letzten Änderung alle Änderungen anzuzeigen.',
 'tog-usenewrc' => 'Änderungen auf „Letzte Änderungen“ und Beobachtungsliste nach Seite gruppieren',
 'tog-numberheadings' => 'Überschriften automatisch nummerieren',
 'tog-showtoolbar' => 'Bearbeiten-Werkzeugleiste anzeigen',
@@ -461,7 +462,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Schicke mir Kopien der E-Mails, die ich anderen Benutzern sende',
 'tog-diffonly' => 'Beim Versionsvergleich nur die Unterschiede und nicht die vollständige Seite anzeigen',
 'tog-showhiddencats' => 'Anzeige versteckter Kategorien',
-'tog-noconvertlink' => 'Konvertierung des Titels deaktivieren',
 'tog-norollbackdiff' => 'Unterschied nach dem Zurücksetzen unterdrücken',
 'tog-useeditwarning' => 'Warnen, sofern eine zur Bearbeitung geöffnete Seite verlassen wird, die nicht gespeicherte Änderungen enthält',
 'tog-prefershttps' => 'Wenn angemeldet, immer eine sichere Verbindung benutzen.',
@@ -588,7 +588,6 @@ $messages = array(
 'vector-action-protect' => 'Schützen',
 'vector-action-undelete' => 'Wiederherstellen',
 'vector-action-unprotect' => 'Seitenschutz ändern',
-'vector-simplesearch-preference' => 'Vereinfachte Suchleiste aktivieren (nur Vector)',
 'vector-view-create' => 'Erstellen',
 'vector-view-edit' => 'Bearbeiten',
 'vector-view-history' => 'Versionsgeschichte',
@@ -650,7 +649,7 @@ $messages = array(
 'redirectedfrom' => '(Weitergeleitet von $1)',
 'redirectpagesub' => 'Weiterleitung',
 'lastmodifiedat' => 'Diese Seite wurde zuletzt am $1 um $2 Uhr geändert.',
-'viewcount' => 'Diese Seite wurde bisher {{PLURAL:$1|einmal|$1-mal}} abgerufen.',
+'viewcount' => 'Diese Seite wurde bisher {{PLURAL:$1|einmal|$1 mal}} abgerufen.',
 'protectedpage' => 'Geschützte Seite',
 'jumpto' => 'Wechseln zu:',
 'jumptonavigation' => 'Navigation',
@@ -875,8 +874,7 @@ Vergiss nicht, deine [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ände
 'gotaccountlink' => 'Anmelden',
 'userlogin-resetlink' => 'Die Anmeldedaten vergessen?',
 'userlogin-resetpassword-link' => 'Passwort vergessen?',
-'helplogin-url' => 'Help:Anmelden',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hilfe beim Anmelden]]',
+'userlogin-helplink2' => 'Hilfe bei der Anmeldung',
 'userlogin-loggedin' => 'Du bist bereits als {{GENDER:$1|$1}} angemeldet.
 Benutze das unten stehende Formular, um dich unter einem anderen Benutzernamen anzumelden.',
 'userlogin-createanother' => 'Ein weiteres Benutzerkonto erstellen',
@@ -967,6 +965,10 @@ Bitte warte $1, bevor du es erneut probierst.',
 'suspicious-userlogout' => 'Deine Abmeldeanfrage wurde verweigert, da sie vermutlich von einem defekten Browser oder einem Cache-Proxy gesendet wurde.',
 'createacct-another-realname-tip' => 'Der bürgerliche Name ist optional.
 Wenn du ihn angibst, wird er für die Zuordnung der Beiträge verwendet.',
+'pt-login' => 'Anmelden',
+'pt-login-button' => 'Anmelden',
+'pt-createaccount' => 'Benutzerkonto erstellen',
+'pt-userlogout' => 'Abmelden',
 
 # Email sending
 'php-mail-error-unknown' => 'Unbekannter Fehler mit der Funktion mail() von PHP',
@@ -975,7 +977,7 @@ Wenn du ihn angibst, wird er für die Zuordnung der Beiträge verwendet.',
 
 # Change password dialog
 'changepassword' => 'Passwort ändern',
-'resetpass_announce' => 'Anmeldung mit dem per E-Mail zugesandten Code. Um die Anmeldung abzuschließen, musst du jetzt ein neues Passwort wählen.',
+'resetpass_announce' => 'Um die Anmeldung abzuschließen, musst du ein neues Passwort festlegen.',
 'resetpass_text' => '<!-- Ergänze den Text hier -->',
 'resetpass_header' => 'Passwort ändern',
 'oldpassword' => 'Altes Passwort:',
@@ -991,8 +993,16 @@ Bitte warte $1, bevor du es erneut versuchst.',
 'resetpass-submit-cancel' => 'Abbrechen',
 'resetpass-wrong-oldpass' => 'Ungültiges temporäres oder aktuelles Passwort.
 Möglicherweise hast du dein Passwort bereits erfolgreich geändert oder ein neues temporäres Passwort beantragt.',
+'resetpass-recycled' => 'Bitte setze dein Passwort auf ein anderes Passwort als dein aktuelles fest.',
+'resetpass-temp-emailed' => 'Du hast dich mit einem temporären E-Mail-Code angemeldet.
+Um die Anmeldung abzuschließen, musst du jetzt ein neues Passwort festlegen:',
 'resetpass-temp-password' => 'Temporäres Passwort:',
 'resetpass-abort-generic' => 'Die Passwortänderung wurde durch eine Erweiterung abgebrochen.',
+'resetpass-expired' => 'Dein Passwort ist abgelaufen. Bitte lege ein neues Passwort zur Anmeldung fest.',
+'resetpass-expired-soft' => 'Dein Passwort ist abgelaufen und muss zurückgesetzt werden. Bitte wähle jetzt ein neues Passwort aus oder klicke auf „{{int:resetpass-submit-cancel}}“, um es später zurückzusetzen.',
+'resetpass-validity-soft' => 'Dein Passwort ist nicht gültig: $1
+
+Bitte wähle jetzt ein neues Passwort oder klicke auf „{{int:resetpass-submit-cancel}}“, um es später zurückzusetzen.',
 
 # Special:PasswordReset
 'passwordreset' => 'Passwort zurücksetzen',
@@ -1235,8 +1245,7 @@ Zur Information folgt der aktuelle Logbucheintrag:",
 'sectioneditnotsupported-text' => 'Die Bearbeitung von Abschnitten wird auf dieser Bearbeitungsseite nicht unterstützt.',
 'permissionserrors' => 'Berechtigungsfehler',
 'permissionserrorstext' => 'Du bist nicht berechtigt, die Aktion auszuführen. {{PLURAL:$1|Grund|Gründe}}:',
-'permissionserrorstext-withaction' => 'Du bist nicht berechtigt, $2.
-{{PLURAL:$1|Grund|Gründe}}:',
+'permissionserrorstext-withaction' => 'Du bist aus {{PLURAL:$1|dem folgenden Grund|den folgenden Gründen}} nicht berechtigt, $2:',
 'recreate-moveddeleted-warn' => "'''Achtung: Du erstellst eine Seite, die bereits früher gelöscht wurde.'''
 
 Bitte prüfe sorgfältig, ob die erneute Seitenerstellung den Richtlinien entspricht.
@@ -1374,8 +1383,10 @@ Du kannst diesen Versionsunterschied einsehen, sofern du möchtest. Nähere Anga
 'revdelete-show-file-submit' => 'Ja',
 'revdelete-selected' => "'''{{PLURAL:$2|Gewählte Version|Gewählte Versionen}} von [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Gewählter Logbucheintrag|Gewählte Logbucheinträge}}:'''",
-'revdelete-text' => "'''Gelöschte Versionen und Aktionen verbleiben in der Versionsgeschichte und den Logbüchern, jedoch sind Teile davon für die Öffentlichkeit unzugänglich.'''
-Andere Administratoren auf {{SITENAME}} haben Zugriff auf den versteckten Inhalt und können ihn mit der gleichen Seite wiederherstellen, sofern nicht zusätzliche Einschränkungen bestehen.",
+'revdelete-text-text' => 'Gelöschte Versionen verbleiben noch in der Versionsgeschichte, jedoch sind Teile ihres Inhalts für die Öffentlichkeit nicht zugänglich.',
+'revdelete-text-file' => 'Gelöschte Dateiversionen verbleiben noch in der Datei-Versionsgeschichte, jedoch sind Teile ihres Inhalts für die Öffentlichkeit nicht zugänglich.',
+'logdelete-text' => 'Gelöschte Logbucheinträge verbleiben noch in den Logbüchern, jedoch sind Teile ihres Inhalts für die Öffentlichkeit nicht zugänglich.',
+'revdelete-text-others' => 'Andere Administratoren auf {{SITENAME}} haben noch Zugriff auf den versteckten Inhalt und können ihn auch mithilfe dieser Spezialseite wiederherstellen, solange keine zusätzlichen Beschränkungen festgelegt werden.',
 'revdelete-confirm' => 'Bitte bestätige, dass du beabsichtigst, dies zu tun, die Konsequenzen verstehst und es in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] tust.',
 'revdelete-suppress-text' => "Unterdrückungen sollten '''nur''' in den folgenden Fällen vorgenommen werden:
 * Potentiell beleidigende Informationen
@@ -1491,7 +1502,7 @@ Einzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'shown-title' => 'Zeige $1 {{PLURAL:$1|Ergebnis|Ergebnisse}} pro Seite',
 'viewprevnext' => 'Zeige ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''Es gibt eine Seite, die den Namen „[[:$1]]“ hat.'''",
-'searchmenu-new' => '<strong>Erstelle die Seite „[[:$1]]“ in diesem Wiki.</strong> {{PLURAL:$2|0=|Siehe auch die mit deiner Suche gefundene Seite.|Siehe auch die gefundenen Suchergebnisse.}}',
+'searchmenu-new' => '<strong>Erstelle die Seite „[[:$1]]“ in diesem Wiki.</strong> {{PLURAL:$2|0=|Siehe auch die über deine Suche gefundene Seite.|Siehe auch die gefundenen Suchergebnisse.}}',
 'searchprofile-articles' => 'Inhaltsseiten',
 'searchprofile-project' => 'Hilfe- und Projektseiten',
 'searchprofile-images' => 'Multimedia',
@@ -1510,13 +1521,14 @@ Einzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'search-file-match' => '(treffende Dateiinhalte)',
 'search-suggest' => 'Meintest du „$1“?',
 'search-interwiki-caption' => 'Schwesterprojekte',
-'search-interwiki-default' => '$1 Ergebnisse:',
+'search-interwiki-default' => 'Ergebnisse von $1:',
 'search-interwiki-more' => '(weitere)',
 'search-relatedarticle' => 'Verwandte',
 'searcheverything-enable' => 'In allen Namensräumen suchen',
 'searchrelated' => 'verwandt',
 'searchall' => 'alle',
 'showingresults' => "Hier {{PLURAL:$1|ist '''1''' Ergebnis|sind '''$1''' Ergebnisse}}, beginnend mit Nummer '''$2.'''",
+'showingresultsinrange' => 'Unten {{PLURAL:$1|wird <strong>ein</strong> Ergebnis|werden bis zu <strong>$1</strong> Ergebnisse}} im Bereich <strong>$2</strong> bis <strong>$3</strong> angezeigt.',
 'showingresultsnum' => "Hier {{PLURAL:$3|ist '''1''' Ergebnis|sind '''$3''' Ergebnisse}}, beginnend mit Nummer '''$2.'''",
 'showingresultsheader' => "{{PLURAL:$5|Ergebnis '''$1''' von '''$3'''|Ergebnisse '''$1–$2''' von '''$3'''}} für '''$4'''",
 'search-nonefound' => 'Zu deiner Suchanfrage wurden keine Ergebnisse gefunden.',
@@ -1644,7 +1656,7 @@ Diese Information ist öffentlich.',
 'prefs-displaywatchlist' => 'Anzeigeoptionen',
 'prefs-tokenwatchlist' => 'Token',
 'prefs-diffs' => 'Versionsvergleich',
-'prefs-help-prefershttps' => 'Diese Einstellung wird bei deiner nächsten Anmeldung wirksam',
+'prefs-help-prefershttps' => 'Diese Einstellung wird bei deiner nächsten Anmeldung wirksam.',
 'prefs-tabs-navigation-hint' => 'Tipp: Du kannst die linke und rechte Pfeiltasten benutzen, um zwischen den Registerkarten in der Reiterliste zu navigieren.',
 
 # User preference: email validation using jQuery
@@ -1836,14 +1848,26 @@ Diese Information ist öffentlich.',
 'recentchanges-legend-heading' => "'''Legende:'''",
 'recentchanges-legend-newpage' => '(siehe auch die [[Special:NewPages|Liste neuer Seiten]])',
 'recentchanges-legend-plusminus' => "''(±123)''",
-'rcnotefrom' => "Angezeigt werden die Änderungen seit '''$2''' (max. '''$1''' Einträge).",
-'rclistfrom' => 'Nur Änderungen seit $1 zeigen.',
+'rcnotefrom' => 'Angezeigt werden die Änderungen seit <strong>$2</strong> (max. <strong>$1</strong> Einträge).',
+'rclistfrom' => 'Nur Änderungen seit $3, $2 Uhr zeigen.',
 'rcshowhideminor' => 'Kleine Änderungen $1',
+'rcshowhideminor-show' => 'anzeigen',
+'rcshowhideminor-hide' => 'ausblenden',
 'rcshowhidebots' => 'Bots $1',
+'rcshowhidebots-show' => 'anzeigen',
+'rcshowhidebots-hide' => 'ausblenden',
 'rcshowhideliu' => 'Registrierte Benutzer $1',
+'rcshowhideliu-show' => 'anzeigen',
+'rcshowhideliu-hide' => 'ausblenden',
 'rcshowhideanons' => 'Unangemeldete Benutzer $1',
+'rcshowhideanons-show' => 'anzeigen',
+'rcshowhideanons-hide' => 'ausblenden',
 'rcshowhidepatr' => 'Kontrollierte Änderungen $1',
+'rcshowhidepatr-show' => 'anzeigen',
+'rcshowhidepatr-hide' => 'ausblenden',
 'rcshowhidemine' => 'Eigene Beiträge $1',
+'rcshowhidemine-show' => 'anzeigen',
+'rcshowhidemine-hide' => 'ausblenden',
 'rclinks' => 'Zeige die letzten $1 Änderungen der letzten $2 Tage.<br />$3',
 'diff' => 'Unterschied',
 'hist' => 'Versionen',
@@ -1968,6 +1992,8 @@ Du solltest jemanden fragen, der die Möglichkeit hat, die unterdrückten Dateid
 'php-uploaddisabledtext' => 'Das Hochladen von Dateien wurde in PHP deaktiviert.
 Bitte überprüfe die <code>file_uploads</code>-Einstellung.',
 'uploadscripted' => 'Diese Datei enthält HTML- oder Scriptcode, der irrtümlich von einem Webbrowser ausgeführt werden könnte.',
+'uploadscriptednamespace' => 'Diese SVG-Datei enthält den ungültigen Namensraum „$1“.',
+'uploadinvalidxml' => 'Das XML in der hochgeladenen Datei konnte nicht geparst werden.',
 'uploadvirus' => 'Diese Datei enthält einen Virus! Details: $1',
 'uploadjava' => 'Dies ist eine ZIP-Datei, die ein CLASS-Datei von Java enthält.
 Das Hochladen von Java-Dateien ist nicht gestattet, da sie die Umgehung von Sicherheitseinschränkungen ermöglichen könnten.',
@@ -2335,10 +2361,20 @@ Jede Zeile enthält Links zur ersten und zweiten Weiterleitung sowie dem Ziel de
 'deadendpagestext' => 'Die folgenden Seiten verweisen nicht auf andere Seiten von {{SITENAME}}.',
 'protectedpages' => 'Geschützte Seiten',
 'protectedpages-indef' => 'Nur unbeschränkt geschützte Seiten zeigen',
+'protectedpages-summary' => 'Diese Seite listet vorhandene Seiten auf, die derzeit geschützt sind. Für eine Liste vor Erstellung geschützter Titel, siehe „[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]“.',
 'protectedpages-cascade' => 'Nur Seiten mit Kaskadenschutz',
 'protectedpages-noredirect' => 'Weiterleitungen ausblenden',
 'protectedpagesempty' => 'Aktuell sind keine Seiten mit diesen Parametern geschützt.',
+'protectedpages-timestamp' => 'Zeitstempel',
+'protectedpages-page' => 'Seite',
+'protectedpages-expiry' => 'Gültig bis',
+'protectedpages-performer' => 'Geschützt von',
+'protectedpages-params' => 'Schutzparameter',
+'protectedpages-reason' => 'Grund',
+'protectedpages-unknown-timestamp' => 'Unbekannt',
+'protectedpages-unknown-performer' => 'Unbekannter Benutzer',
 'protectedtitles' => 'Geschützte Seitennamen',
+'protectedtitles-summary' => 'Diese Seite listet Titel auf, die derzeit vor der Erstellung geschützt sind. Für eine Liste vorhandener geschützter Seiten, siehe „[[{{#special:ProtectedPages}}|{{int:protectedpages}}]]“.',
 'protectedtitlesempty' => 'Zurzeit sind mit den angegebenen Parametern keine Seiten zur Neuerstellung gesperrt.',
 'listusers' => 'Benutzerverzeichnis',
 'listusers-editsonly' => 'Zeige nur Benutzer mit Beiträgen',
@@ -2512,7 +2548,7 @@ Spätere Änderungen an dieser Seite und der zugehörigen Diskussionsseite werde
 'removedwatchtext' => 'Die Seite „[[:$1]]“ wurde von deiner [[Special:Watchlist|Beobachtungsliste]] entfernt.',
 'watch' => 'Beobachten',
 'watchthispage' => 'Seite beobachten',
-'unwatch' => 'nicht mehr beobachten',
+'unwatch' => 'Nicht mehr beobachten',
 'unwatchthispage' => 'Nicht mehr beobachten',
 'notanarticle' => 'Keine Seite',
 'notvisiblerev' => 'Version wurde gelöscht',
@@ -2529,7 +2565,7 @@ Spätere Änderungen an dieser Seite und der zugehörigen Diskussionsseite werde
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'Beobachten …',
-'unwatching' => 'Nicht beobachten …',
+'unwatching' => 'Nicht mehr beobachten …',
 'watcherrortext' => 'Beim Ändern der Beobachtungslisteneinstellungen für „$1“ ist ein Fehler aufgetreten.',
 
 'enotif_mailer' => '{{SITENAME}}-E-Mail-Benachrichtigungsdienst',
@@ -2603,7 +2639,7 @@ Rückmeldungen und weitere Hilfe: {{canonicalurl:{{MediaWiki:Helppage}}}}',
 'delete-edit-reasonlist' => 'Löschgründe bearbeiten',
 'delete-toobig' => 'Diese Seite hat mit mehr als $1 {{PLURAL:$1|Version|Versionen}} eine sehr lange Versionsgeschichte. Das Löschen solcher Seiten wurde eingeschränkt, um eine versehentliche Überlastung der Server zu verhindern.',
 'delete-warning-toobig' => 'Diese Seite hat mit mehr als $1 {{PLURAL:$1|Version|Versionen}} eine sehr lange Versionsgeschichte. Das Löschen kann zu Störungen im Datenbankbetrieb führen.',
-'deleting-backlinks-warning' => "'''Warnung:''' Es verweisen noch andere Seiten auf die zu löschende Seite oder diese Seite ist noch woanders eingebunden.",
+'deleting-backlinks-warning' => "'''Warnung:''' Es verweisen noch [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere Seiten]] auf die zu löschende Seite oder diese Seite ist noch woanders eingebunden.",
 
 # Rollback
 'rollback' => 'Zurücksetzen der Änderungen',
@@ -2775,8 +2811,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Diese IP-Adresse ist zurzeit gesperrt.
 Zur Information folgt der aktuelle Auszug aus dem Sperr-Logbuch:',
 'sp-contributions-search' => 'Suche nach Benutzerbeiträgen',
+'sp-contributions-suppresslog' => 'Unterdrückte Benutzerbeiträge',
 'sp-contributions-username' => 'IP-Adresse oder Benutzername:',
 'sp-contributions-toponly' => 'Nur aktuelle Versionen zeigen',
+'sp-contributions-newonly' => 'Nur Seitenerstellungen anzeigen',
 'sp-contributions-submit' => 'Suchen',
 
 # What links here
@@ -2878,7 +2916,8 @@ Zur Aufhebung der Sperre siehe die [[Special:BlockList|Liste aller aktiven Sperr
 'change-blocklink' => 'Sperre ändern',
 'contribslink' => 'Beiträge',
 'emaillink' => 'E-Mail senden',
-'autoblocker' => 'Automatische Sperre, da du eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzt. Grund der Benutzersperre: „$2“.',
+'autoblocker' => 'Automatische Sperre, da du eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzt.
+Grund der Benutzersperre: „$2“',
 'blocklogpage' => 'Benutzersperr-Logbuch',
 'blocklog-showlog' => '{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} wurde schon früher gesperrt. Es folgt der Eintrag aus dem Benutzersperr-Logbuch:',
 'blocklog-showsuppresslog' => '{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} wurde schon früher gesperrt und versteckt.
@@ -3082,6 +3121,7 @@ $2',
 'thumbnail_image-type' => 'Bildtyp nicht unterstützt',
 'thumbnail_gd-library' => 'Unvollständige Konfiguration der GD-Bibliothek: Fehlende Funktion $1',
 'thumbnail_image-missing' => 'Datei scheint fehlend zu sein: $1',
+'thumbnail_image-failure-limit' => 'Es wurden in letzter Zeit zu viele Versuche ($1 oder mehr) unternommen, dieses Vorschaubild zu rendern. Bitte versuche es später erneut.',
 
 # Special:Import
 'import' => 'Seiten importieren',
@@ -3541,7 +3581,7 @@ Weitere werden standardmäßig nicht angezeigt.
 'exif-gpssatellites' => 'Für die Messung benutzte Satelliten',
 'exif-gpsstatus' => 'Empfängerstatus',
 'exif-gpsmeasuremode' => 'Messverfahren',
-'exif-gpsdop' => 'Maßpräzision',
+'exif-gpsdop' => 'Messgenauigkeit',
 'exif-gpsspeedref' => 'Geschwindigkeitseinheit',
 'exif-gpsspeed' => 'Geschwindigkeit des GPS-Empfängers',
 'exif-gpstrackref' => 'Referenz für Bewegungsrichtung',
@@ -4335,7 +4375,4 @@ faktisch alles was in doppelten geschweiften Klammern enthalten ist.',
 'expand_templates_generate_rawhtml' => 'Rohes HTML anzeigen',
 'expand_templates_preview' => 'Vorschau',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
-'uploadinvalidxml' => 'Das XML in der hochgeladenen Datei konnte nicht geparst werden.',
 );
index 6937ba7..eb6852e 100644 (file)
@@ -214,6 +214,7 @@ Du hast darauf keinen Zugriff.',
 'right-passwordreset' => 'Passwort eines Benutzers zurücksetzen und das dazu verschickte E-Mail einsehen',
 
 # Recent changes
+'recentchanges-label-plusminus' => 'Die Änderung der Seitengrösse in Bytes',
 'rc_categories' => 'Nur Seiten aus den Kategorien (getrennt mit «|»):',
 'rc-old-title' => 'ursprünglich erstellt als «$1»',
 
index 5ff6250..7299a59 100644 (file)
@@ -9,6 +9,8 @@
  *
  * @author *Surak*
  * @author ChrisiPK
+ * @author Das Schäfchen
+ * @author Filzstift
  * @author Geitost
  * @author Imre
  * @author Jimmy Collins <jimmy.collins@web.de>
@@ -35,7 +37,7 @@ $messages = array(
 'tog-enotifrevealaddr' => 'Ihre E-Mail-Adresse in Benachrichtigungs-E-Mails anzeigen',
 
 'view-pool-error' => 'Entschuldigung, die Server sind im Moment überlastet.
-Zu viele Benutzer versuchen diese Seite zu besuchen.
+Zu viele Benutzer versuchen, diese Seite zu besuchen.
 Bitte warten Sie einige Minuten, bevor Sie es noch einmal versuchen.
 
 $1',
@@ -74,12 +76,14 @@ Nutzen Sie bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungspro
 
 Beachten Sie, dass einige Seiten noch anzeigen können, dass Sie angemeldet sind, solange Sie nicht Ihren Browsercache geleert haben.",
 'welcomecreation-msg' => 'Ihr Benutzerkonto wurde erstellt.
-Vergissen Sie nicht, Ihre [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ändern.',
+Vergessen Sie nicht, Ihre [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ändern.',
 'yourdomainname' => 'Ihre Domain:',
 'password-change-forbidden' => 'Sie können auf diesem Wiki keine Passwörter ändern.',
 'externaldberror' => 'Entweder es liegt ein Fehler bei der externen Authentifizierung vor oder Sie dürfen Ihr externes Benutzerkonto nicht aktualisieren.',
 'nologin' => 'Sie haben kein Benutzerkonto? $1.',
 'gotaccount' => "Haben Sie bereits ein Benutzerkonto? '''$1'''.",
+'userlogin-loggedin' => 'Sie sind bereits als {{GENDER:$1|$1}} angemeldet.
+Benutzen Sie das unten stehende Formular, um sich unter einem anderen Benutzernamen anzumelden.',
 'userexists' => 'Dieser Benutzername ist schon vergeben.
 Bitte wählen Sie einen anderen.',
 'nocookiesnew' => 'Der Benutzerzugang wurde erstellt, aber Sie sind nicht angemeldet.
@@ -541,7 +545,6 @@ Bitte geben Sie den Grund für die Sperre an.',
 'autoblocker' => 'Automatische Sperre, da Sie eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzen. Grund der Benutzersperre: „$2“.',
 'ipb-needreblock' => '„$1“ ist bereits gesperrt. Möchten Sie die Sperrparameter ändern?',
 'proxyblockreason' => 'Ihre IP-Adresse wurde gesperrt, da sie ein offener Proxy ist. Bitte kontaktieren Sie Ihren Internet-Provider oder Ihre Systemadministratoren und informieren Sie sie über dieses mögliche Sicherheitsproblem.',
-'cant-block-while-blocked' => 'Sie können keine anderen Benutzer sperren, während Sie selbst gesperrt sind.',
 'cant-see-hidden-user' => 'Der Benutzer, den Sie versuchen zu sperren, wurde bereits gesperrt und verborgen. Da Sie das „hideuser“-Recht nicht haben, können Sie die Benutzersperre nicht sehen und nicht bearbeiten.',
 'ipbblocked' => 'Sie können keine anderen Benutzer sperren oder entsperren, da Sie selbst gesperrt sind',
 'ipbnounblockself' => 'Sie haben nicht die Berechtigung, sich selbst zu entsperren',
@@ -657,7 +660,6 @@ Rückmeldung des Mailservers: $1',
 'confirmemail_needlogin' => 'Sie müssen sich $1, um Ihre E-Mail-Adresse zu bestätigen.',
 'confirmemail_success' => 'Ihre E-Mail-Adresse wurde erfolgreich bestätigt. Sie können sich jetzt [[Special:UserLogin|anmelden]].',
 'confirmemail_loggedin' => 'Ihre E-Mail-Adresse wurde erfolgreich bestätigt.',
-'confirmemail_error' => 'Es gab einen Fehler bei der Bestätigung Ihrer E-Mail-Adresse.',
 'confirmemail_body' => 'Hallo,
 
 jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat das Benutzerkonto „$2“ bei {{SITENAME}} registriert.
index 15a0c02..2d25da3 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Amire80
  * @author Asmen
  * @author Aspar
  * @author Belekvor
@@ -354,7 +355,7 @@ $messages = array(
 'tog-enotifminoredits' => 'Pelan de vurnayışanê qıckekan u dosyan de ki mı rê e-mail bırışe',
 'tog-enotifrevealaddr' => 'Adresa e-posteyê mı posteyê xeberan de bımocne',
 'tog-shownumberswatching' => 'Amarê karberanê seyrkerdoğan bımocne',
-'tog-oldsig' => 'İmza mewcude:',
+'tog-oldsig' => 'İmzaya mewcude:',
 'tog-fancysig' => 'İmza rê mameleyê wikimeqaley bıke (bê gıreyo otomatik)',
 'tog-uselivepreview' => 'Verqayto giyane bıgureyne (cerrebane)',
 'tog-forceeditsummary' => 'Mı ke xulasa veng verdaye, hay a mı ser de',
@@ -367,7 +368,6 @@ $messages = array(
 'tog-ccmeonemails' => 'E-posteyanê ke ez karberanê binan rê rışenan, mı rê kopya inan bırışe',
 'tog-diffonly' => 'Qıyasê versiyonan de tek ferqan bımocne, pela butıne nê',
 'tog-showhiddencats' => 'Kategoriyanê dızdiye bımocne',
-'tog-noconvertlink' => 'Greyê sernami çerx kerdışi bıqefılne',
 'tog-norollbackdiff' => 'Peyserardışi ra dıme ferqi caverde',
 'tog-useeditwarning' => 'Wexto ke mı yew pela nizami be vurnayışanê nêqeydbiyayeyan caverdê, hay be mı ser de',
 'tog-prefershttps' => 'Ronışten akerden de  greyo itimadın bıkarne',
@@ -400,7 +400,7 @@ $messages = array(
 'sat' => 'Şem',
 'january' => 'Çele',
 'february' => 'Sıbate',
-'march' => 'Adar (Mart)',
+'march' => 'Adar',
 'april' => 'Nisane',
 'may_long' => 'Gulane',
 'june' => 'Heziran',
@@ -482,10 +482,10 @@ $messages = array(
 
 # Cologne Blue skin
 'qbfind' => 'Bıvêne',
-'qbbrowse' => 'Rovete',
+'qbbrowse' => 'Çım ra viyarne',
 'qbedit' => 'Bıvurne',
-'qbpageoptions' => 'Na per',
-'qbmyoptions' => 'Pe mı',
+'qbpageoptions' => 'Ena pele',
+'qbmyoptions' => 'Pe mı',
 'faq' => 'PZP (Persê ke zehf persiyenê)',
 'faqpage' => 'Project: PZP',
 
@@ -496,7 +496,6 @@ $messages = array(
 'vector-action-protect' => 'Bışevekne',
 'vector-action-undelete' => 'Esterıtışi peyser bıgê',
 'vector-action-unprotect' => 'Starkerdışi bıvurne',
-'vector-simplesearch-preference' => 'Çuweya cı geyreyış de rehater aktiv ke (Tenya vector skin de)',
 'vector-view-create' => 'Vıraze',
 'vector-view-edit' => 'Bıvurne',
 'vector-view-history' => 'Verênan bıvêne',
@@ -506,8 +505,8 @@ $messages = array(
 'namespaces' => 'Cayê namey',
 'variants' => 'Varyanti',
 
-'navigation-heading' => 'Menuya Navigasyoni',
-'errorpagetitle' => 'Ğeta',
+'navigation-heading' => 'Menuyê navigasyoni',
+'errorpagetitle' => 'Xeta',
 'returnto' => 'Peyser şo $1.',
 'tagline' => '{{SITENAME}} ra',
 'help' => 'Peşti',
@@ -516,12 +515,12 @@ $messages = array(
 'go' => 'Şo',
 'searcharticle' => 'Şo',
 'history' => 'Tarixê pele',
-'history_short' => 'Verén',
+'history_short' => 'Tarix',
 'updatedmarker' => 'cıkewtena mına peyêne ra dıme biyo rocane',
 'printableversion' => 'Asayışê çapkerdışi',
 'permalink' => 'Gıreyo jûqere',
-'print' => 'Nusten ke',
-'view' => 'Bıvin',
+'print' => 'Çap ke',
+'view' => 'Bıvêne',
 'edit' => 'Bıvurne',
 'create' => 'Vıraze',
 'editthispage' => 'Ena pele bıvurne',
@@ -634,15 +633,15 @@ $1',
 'feed-atom' => 'Atom',
 'feed-rss' => 'RSS',
 'red-link-title' => '$1 (çınya)',
-'sort-descending' => 'Ratnayışê qemeyayışi',
-'sort-ascending' => 'Ratnayışê Zeydnayışi',
+'sort-descending' => 'Rêzkerdışo kêmbiyaye',
+'sort-ascending' => 'Rêzkerdışo zêdiyaye',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Wesiqe',
 'nstab-user' => 'Pela karberi',
 'nstab-media' => 'Pera Medya',
 'nstab-special' => 'Pela xase',
-'nstab-project' => 'Pera proci',
+'nstab-project' => 'Pela procey',
 'nstab-image' => 'Dosya',
 'nstab-mediawiki' => 'Mesac',
 'nstab-template' => 'Şablon',
@@ -660,7 +659,7 @@ Keyepelê {{SITENAME}} eşkeno xeta eşkera bıkero.',
 Seba lista pelanê xasanê vêrdeyan reca kena: [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
-'error' => 'Ğeta',
+'error' => 'Xeta',
 'databaseerror' => 'Ğetay ardoği',
 'databaseerror-text' => 'Tabanda malumati de ğırabiya persayışi bi
 Na nusteber  zew ğırabin asınena.',
@@ -737,6 +736,7 @@ Xızmetkarê  kılitkerdışi wa bewni ro enay wa çımra ravyarno: "$3".',
 'invalidtitle-unknownnamespace' => 'Sernameye nêşınasiya yana amraiya canameyo  $1 u metno "$2" xırab',
 'exception-nologin' => 'Şıma cıkewtış nêvıraşto',
 'exception-nologin-text' => 'Na pera ya zi na karkerdışi de  na wiki de [[Special:Userlogin|cıkewtış]] icab keno.',
+'exception-nologin-text-manual' => 'Na pele resayışi re $1 bıgire.',
 
 # Virus scanner
 'virus-badscanner' => "Eyaro şaş: no virus-cıgerayox nêzanyeno: ''$1''",
@@ -779,13 +779,11 @@ Wexta ke verhafızayê cıgerayoxê şıma pak beno no benate de taye peli de he
 'userlogin-joinproject' => 'Cıkewe {{SITENAME}}',
 'nologin' => "Hesabê şıma çıniyo? '''$1'''.",
 'nologinlink' => 'Yew hesab ake',
-'createaccount' => 'Hesab vıraşten',
+'createaccount' => 'Hesab vıraze',
 'gotaccount' => "Hesabê şıma esto? '''$1'''.",
 'gotaccountlink' => 'Cı kewe',
 'userlogin-resetlink' => 'Melumatê cıkewtışi xo vira kerdê?',
 'userlogin-resetpassword-link' => 'Parola xo kerda xo vira?',
-'helplogin-url' => 'Help:Qeydbiyayış',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Peşti be qeydbiyayış ra]]',
 'userlogin-loggedin' => 'Tı xora namey {{GENDER:$1|$1}} ra kewtê/kewtay cı.
 Formê cêrêni bıgureyne ke namey karberio bin ra cı kewê.',
 'userlogin-createanother' => 'Zewbi hesab vıraz',
@@ -835,7 +833,7 @@ Nuştışê xo qonrol kerên, ya zi [[Special:UserLogin/signup|yew hesabo newe a
 'login-userblocked' => 'No karber/na karbere blokekerdeyo/blokekerdiya. Cıkewtışi rê musade çıniyo.',
 'wrongpassword' => 'Parola ğeleta. Rêna / fına bıcerrebne .',
 'wrongpasswordempty' => 'Parola tola, venga. tekrar bınuse.',
-'passwordtooshort' => 'Derganiya parola wa tewr tayn {{PLURAL:$1|1 karakter|$1 karakteran}} dı bo.',
+'passwordtooshort' => 'Paroley gani tewr senık be {{PLURAL:$1|1 karakter|$1 karakteran}} derg bê.',
 'password-name-match' => 'Parola u nameyê şıma gani zeypê (seypê) nêbo.',
 'password-login-forbidden' => 'No namey karberi u parola karkerdışê cı  kerdo xırab.',
 'mailmypassword' => 'Parola reset ke',
@@ -873,6 +871,12 @@ Bıne vındere u newe ra dest pê bıkere.',
 'login-abort-generic' => 'Dekewtışê şıma xırabo-terkneyayo',
 'loginlanguagelabel' => 'Zıwan: $1',
 'suspicious-userlogout' => 'Waştişê tu ya veciyayişi kebul nibiya cunki ihtimal o ke waştiş yew browser ya zi proksiyê heripiyaye ra ameya.',
+'createacct-another-realname-tip' => 'Nameyo raştıkên keyfiyo.
+Şıma nameyo xoyo raştıkên ke bımocnê, seba iştırakanê karberi be ney ra istıfade beno.',
+'pt-login' => 'Cı kewe',
+'pt-login-button' => 'Cı kewe',
+'pt-createaccount' => 'Hesab vıraze',
+'pt-userlogout' => 'Veciyayış',
 
 # Email sending
 'php-mail-error-unknown' => "PHP's mail() fonksiyoni de xırabin vıcyê.",
@@ -881,7 +885,7 @@ Bıne vındere u newe ra dest pê bıkere.',
 
 # Change password dialog
 'changepassword' => 'Parola bıvurne',
-'resetpass_announce' => 'Şıma pê yew parolayê muweqqet hesab kerd a, qey qedyayişe dekewtış newe yew parola bınuse:',
+'resetpass_announce' => 'Seba temamkerdışê cıkewtışi rê, şıma gani yew parolaya newiye bınusê.',
 'resetpass_text' => 'Parolayê hesab bıvurn',
 'resetpass_header' => 'Parola hesabi bıvurne',
 'oldpassword' => 'Parola kıhane:',
@@ -889,12 +893,14 @@ Bıne vındere u newe ra dest pê bıkere.',
 'retypenew' => 'Parola newiye tekrar ke:',
 'resetpass_submit' => 'Parola eyar kere u newe ra dekewe',
 'changepassword-success' => 'Parola şıma be serkewtış vuriye!',
+'changepassword-throttled' => 'Şıma zaf ronıştış akerdış ke.Kerem ke verdi dekewten $1 bıpawe.',
 'resetpass_forbidden' => 'parolayi nêvuryayi',
 'resetpass-no-info' => 'şıma gani hesab akere u hona bıeşke bırese cı',
 'resetpass-submit-loggedin' => 'Parola bıvurne',
 'resetpass-submit-cancel' => 'Bıtexelne',
 'resetpass-wrong-oldpass' => 'parolayo parola maqbul niyo.
 şıma ya parolaye xo vurnayo ya zi parolayo muwaqqat waşto.',
+'resetpass-recycled' => 'Parolaya şımaya newiye wa paroloya şımaya verêne ra ferqıne bo.',
 'resetpass-temp-password' => 'parolayo muweqet:',
 'resetpass-abort-generic' => 'Parola vurnayış jew derganey ra tepya ibtal biyo',
 
@@ -940,9 +946,14 @@ Parola vêrdiye: $2',
 'changeemail-password' => 'Parolay şımawa {{SITENAME}}i:',
 'changeemail-submit' => 'E-postay xo bıvırnên',
 'changeemail-cancel' => 'Bıtexelne',
+'changeemail-throttled' => 'Şıma zaf ronıştış akerdış ke.
+Kerem ke verdi dekewten $1 bıpawe.',
 
 # Special:ResetTokens
 'resettokens' => 'Nışanan reset ke',
+'resettokens-text' => 'Şıma tiya de hesabê şıma ra elaqedar tayê kılitê icazetê cıresayışê melumati şenê sıfır kerê.
+
+Şıma be ğeletiye ra ke nê kerdê vıla ya zi hesabê şıma de xırabiye ke esta, naye bıkerê.',
 'resettokens-no-tokens' => 'Nışanê reseti çıniyê',
 'resettokens-legend' => 'Nışanan reset ke',
 'resettokens-tokens' => 'Nışani:',
@@ -956,9 +967,9 @@ Parola vêrdiye: $2',
 'bold_tip' => 'Metno qalın',
 'italic_sample' => 'Metno çewt',
 'italic_tip' => 'Metno çewt',
-'link_sample' => 'Namey gırey',
-'link_tip' => 'Gırey miyani',
-'extlink_sample' => 'http://www.misal.com sernamey gırey',
+'link_sample' => 'Sernameyê gırey',
+'link_tip' => 'Gıreyê miyani',
+'extlink_sample' => 'http://www.misal.com sernameyê gırey',
 'extlink_tip' => 'Gırey teberi (xo vira mekerên http:// prefix)',
 'headline_sample' => 'metnê sernamey',
 'headline_tip' => 'Sewiya 2ıne sername',
@@ -967,7 +978,7 @@ Parola vêrdiye: $2',
 'image_sample' => 'Misal resim.jpg',
 'image_tip' => 'Dosya tewrkerdiye',
 'media_sample' => 'misal.jpg',
-'media_tip' => 'Gırey dosya',
+'media_tip' => 'Gıreyê dosya',
 'sig_tip' => 'İmzay şıma be morê zemani',
 'hr_tip' => 'Xeta verardiye (teserrufın bıgureyne/bıxebetne)',
 
@@ -1038,13 +1049,12 @@ Qey na hesabê newe parola, cıkewtış dıma şıma eşkeni na qısım de ''[[S
 Seba afernayışê pele ra, qutiya metnê cêrêni bıgurene (seba melumati qaytê [[{{MediaWiki:Helppage}}|pela peşti]] ke).
 Eke be ğeletine ameya tiya, wa gocega '''peyser'''i programê xo de bıtıkne.",
 'anontalkpagetext' => "----''No pel, pel o karbero hesab a nêkerdeyan o, ya zi karbero hesab akerdeyan o labele pê hesabê xo nêkewto de. No sebeb ra ma IP adres şuxulneni û ney IP adresan herkes eşkeno bıvino. Eke şıma qayil niye ina bo xo ri [[Special:UserLogin/signup|yew hesab bıvıraze]] veyaxut [[Special:UserLogin|hesab akere]].''",
-'noarticletext' => 'Na per enewke venga.
-Tı şenay na perer, peran de [[Special:Search/{{PAGENAME}}|binan miyan de bıgeyrè]],
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  qeyda miyande bıgeyre],
-ya na [{{fullurl:{{FULLPAGENAME}}|action=edit}} ena perer vırazé]</span>.',
-'noarticletext-nopermission' => 'Na pela dı eno metin enewke vengo
-Na sernuşteya şıma [[Special:Search/{{PAGENAME}}|pelanê binan de şeni bıgeyri]]
-ya zi <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} itara şeni bıgeyri cı].</span> feqet şıma nişeni biizın teba bıkeri.',
+'noarticletext' => 'Ena pele de hewna theba çıniyo.
+Tı şenay zerreyê pelanê binan de [[Special:Search/{{PAGENAME}}|seba sernameyê ena pele cı geyre]],
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} qeydan miyan de cı geyre],
+ya zi [{{fullurl:{{FULLPAGENAME}}|action=edit}} ena pele bıvurne]</span>.',
+'noarticletext-nopermission' => 'Ena pele de hewna theba çıniyo.
+Tı şenay zerreyê pelanê binan de [[Special:Search/{{PAGENAME}}|seba sernameyê na pele cı geyre]], ya zi <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} qeydan miyan de cı geyre]</span>, ema destur çıniyo ke na pele vırazê.',
 'missing-revision' => 'Rewizyonê name dê pela da #$1 "{{PAGENAME}}" dı çıniyo.
 
 No normal de tarix dê pelanê besterneyan dı ena xırabin asena.
@@ -1147,12 +1157,13 @@ Hewna kerde aseno.',
 'postedit-confirmation' => 'Vurnayışê to qeyd bi.',
 'edit-already-exists' => 'Pelo newe nêvıraziyeno.
 Pel ca ra esto.',
-'defaultmessagetext' => 'Hesıbyaye metne mesaci',
+'defaultmessagetext' => 'Metnê mesacê hesabiyayey',
 'content-failed-to-parse' => 'Qandê madela $3 zereyê $1, $2 sero nêagozyayo',
 'invalid-content-data' => 'Zerrey malumati nêravêrdeyo',
 'content-not-allowed-here' => '"$1" sero per da [[$2]] rê mısade nêdeyêno',
-'editwarning-warning' => 'ihtimal o ke wexta şıma peli ra bıveci, vurnayiş o ke şıma kerdo, hewna şiyêro .
-eke şıma kewtê hesabê xo, no hişyari tercihanê xo ra şıma eşkeni "{{int:prefs-editing}}" bıvındarnî .',
+'editwarning-warning' => 'Wexto ke şıma na pele ra veciyê, beno ke vurnayışê şıma vindi bê.
+Eke şıma kewtê hesabê xo, şıma şenê nê balantışi qısmê "{{int:prefs-editing}}"i de tercihanê xo ra bıvındarnê.',
+'editpage-notsupportedcontentformat-title' => 'Formatê zerreki qebul nêbeno',
 
 # Content models
 'content-model-wikitext' => 'wikimetin',
@@ -1266,8 +1277,6 @@ Eke şıma serkari u devam bıkeri [$1 no vurnayiş şıma eşkeni bıvini].",
 'revdelete-show-file-submit' => 'E',
 'revdelete-selected' => "'''[[:$1]]: ra {{PLURAL:$2|çımraviyarnayışo weçinıte|çımraviyarnayışê weçinıtey}}'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Qeydbiyayışo weçinıte|Qeydbiyayışê weçinıtey}}:'''",
-'revdelete-text' => "'''Çımraviyarnayışê esterıtey u kerdışi hewna tarixê pele u qeydan de asenê, hema parçeyê zerrekê dinan areze nêbenê.'''
-Eke şertê ilawekerdey ke niyê ro, idarekerê bini {{SITENAME}} de nêşenê hewna bıresê zerrekê nımıtey u şenê ey anciya na eyni miyanpele ra peyser biarê.",
 'revdelete-confirm' => 'Ma rica keno testiq bike ti ena hereket keno u ti zano neticeyanê herketanê xo u ti ena hereket pê ena [[{{MediaWiki:Policy-url}}|polici]] ra keno.',
 'revdelete-suppress-text' => "Wedardış gani '''tenya''' nê halanê cêrênan de bıxebıtiyo:
 * Melumatê kıfırio mıhtemel
@@ -1281,7 +1290,7 @@ Eke şertê ilawekerdey ke niyê ro, idarekerê bini {{SITENAME}} de nêşenê h
 'revdelete-hide-user' => 'IP asresa/namey  vırnoği',
 'revdelete-hide-restricted' => 'Malumatan pa serkaran u karberan ra bınım.',
 'revdelete-radio-same' => '(mevurne)',
-'revdelete-radio-set' => 'Nımnaye',
+'revdelete-radio-set' => 'Nımıte',
 'revdelete-radio-unset' => 'Aseno',
 'revdelete-suppress' => 'Hem ê binan ra hem zi serkaran ra malumatan bınım',
 'revdelete-unsuppress' => 'reizyonê ke tepiya anciye serbest ker',
@@ -1361,6 +1370,8 @@ no vurnayişo ke şıma keni kontrol bıkere yew pelo kehen nêbo.',
 'showhideselectedversions' => 'Revizyonanê weçinıtan bımocne/bınımne',
 'editundo' => 'peyser bıgê',
 'diff-empty' => '(Babetna niyo)',
+'diff-multi-sameuser' => '(Terefê eyni karberi ra {{PLURAL:$1|yew revizyono miyanên nêmocno|$1 revizyonê miyanêni nêmocnê}})',
+'diff-multi-otherusers' => '(Terefê {{PLURAL:$2|yew karberi|$2 karberan}} ra {{PLURAL:$1|yew revizyono miyanên nêmocno|$1 revizyonê miyanêni nêmocnê}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|jew timar kerdışo qıckeko|$1 timar kerdışo qıckeko}} timar kerdo, $2 {{PLURAL:$2|Karber|karberi}} memocne)',
 'difference-missing-revision' => 'Ferqê {{PLURAL:$2|Yew rewizyonê|$2 rewizyonê}} {{PLURAL:$2|dı|dı}} ($1) sero çıniyo.
 
@@ -1368,7 +1379,7 @@ No normal de werênayış dê pelanê besterneyan dı ena xırabin asena.
 Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} tiya dı] aseno.',
 
 # Search results
-'searchresults' => 'Neticeya geyrayışi',
+'searchresults' => 'Neticeyê geyrayışi',
 'searchresults-title' => 'Qandê "$1" neticeyê geyrayışi',
 'toomanymatches' => 'Zêde teki (zewci) peyser çarnay, şıma rê zehmet, be persê do bin ra bıcerrebnên.',
 'titlematches' => 'Tekê (zewcê) sernameyê pele',
@@ -1381,7 +1392,7 @@ Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'shown-title' => 'bimocne $1î  {{PLURAL:$1|netice|neticeyan}} ser her pel',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) bıvênên',
 'searchmenu-exists' => "''Ena 'Wikipediya de ser \"[[:\$1]]\" yew pel esto'''",
-'searchmenu-new' => "''Na Wiki de pelay \"[[:\$1]]\" vıraze!'''",
+'searchmenu-new' => '<strong>Na wiki de pela "[[:$1]]" vıraze!</strong> {{PLURAL:$2|0=|Sewbina pela ke şıma geyrayê cı aye bıvênê.|Yew zi neticanê cıgeyrayışê xo bıvênê.}}',
 'searchprofile-articles' => 'Pelê tedeestey',
 'searchprofile-project' => 'Pelê peşti û procey',
 'searchprofile-images' => 'Multimedya',
@@ -1397,27 +1408,29 @@ Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'search-result-score' => 'Eleqa: $1%',
 'search-redirect' => '($1 ra ardış)',
 'search-section' => '(qısmê $1)',
+'search-file-match' => '(zerreyê dosya yewbini gêno)',
 'search-suggest' => 'To va: $1',
-'search-interwiki-caption' => 'Projey Bıray',
+'search-interwiki-caption' => 'Proceyê bıray',
 'search-interwiki-default' => '$1 neticeyan:',
 'search-interwiki-more' => '(véşi)',
 'search-relatedarticle' => 'Eleqeyın',
 'searcheverything-enable' => 'cayê nameyê hemi de bigêre',
 'searchrelated' => 'eleqeyın',
 'searchall' => 'pêro',
-'showingresults' => "#$2 netican ra {{PLURAL:$1|'''1''' netica|'''$1''' neticey}} cêr deyê.",
-'showingresultsnum' => "'''$2''' netican ra {{PLURAL:$3|'''1''' netice|'''$3''' neticey}} cêr derê.",
+'showingresults' => '#<strong>$2</strong> netican ra {{PLURAL:$1|<strong>1</strong> netice cêr dero|<strong>$1</strong> neticey cêr derê}}.',
+'showingresultsinrange' => '{{PLURAL:$1|<strong>1</strong> netice|<strong>$1</strong> neticey}} be mabeynê #<strong>$2</strong> ra be #<strong>$3</strong> cêr asenê.',
+'showingresultsnum' => '#<strong>$2</strong> netican ra {{PLURAL:$3|<strong>1</strong> netice cêr dero|<strong>$3</strong> neticey cêr derê}}.',
 'showingresultsheader' => "{{PLURAL:$5|Neticeyê '''$1''' of '''$3'''|Neticeyanê '''$1 - $2''' hetê '''$3'''}} qe '''$4'''",
 'search-nonefound' => 'Zey perskerdışê şıma netice nêvêniya.',
 'powersearch-legend' => 'Cıgeyrayışo hera',
 'powersearch-ns' => 'Cayanê nameyan de cıgeyrayış:',
 'powersearch-redir' => 'Listeya hetenayışan',
-'powersearch-togglelabel' => 'Qontrol ke:',
+'powersearch-togglelabel' => 'Kontrol ke:',
 'powersearch-toggleall' => 'Pêro',
 'powersearch-togglenone' => 'Çıniyo',
 'search-external' => 'Cıgeyrayışê teberi',
 'searchdisabled' => '{{SITENAME}} no keyepel de cıgerayiş muweqqet bıryayo. no benatê de şıma pê Google eşkeni zerreyê {{SITENAME}} de cıgerayiş bıkeri.',
-'search-error' => 'Cı geyrayış de zu ğeta emé meydan:$1',
+'search-error' => 'Cıgeyrayış de yew xeta emê meydan: $1',
 
 # Preferences page
 'preferences' => 'Tercihi',
@@ -1447,7 +1460,7 @@ Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'prefs-rendering' => 'Asayış',
 'saveprefs' => 'Qeyd ke',
 'restoreprefs' => 'Sazanê hesıbyaya pêron newe ke',
-'prefs-editing' => 'Cay pela nustısi',
+'prefs-editing' => 'Vurnayış',
 'rows' => 'Xeti:',
 'columns' => 'Estûni:',
 'searchresultshead' => 'Cı geyre',
@@ -1500,12 +1513,12 @@ Na game tepeya nêerziyena.',
 'yourlanguage' => 'Zıwan:',
 'yourvariant' => 'Varyante miyandê zuwani:',
 'prefs-help-variant' => 'Zerrey ena viki mocnayışi rê varyant yana ortografi re şıre tercihan dê xo.',
-'yournick' => 'imza:',
+'yournick' => 'Leqebe:',
 'prefs-help-signature' => 'Peran de vatenana de vatışi"<nowiki>~~~~</nowiki>" ya do imza bé, no bahdo beno çerğé imza u wahdey zemani',
 'badsig' => 'Îmzayê tu raşt niyo.
 Etiketê HTMLî kontrol bike.',
-'badsiglength' => 'İmzayê şıma zaf dergo.
-$1 gani bınê no {{PLURAL:$1|karakter|karakter}} de bıbo.',
+'badsiglength' => 'İmzaya şıma zaf derga.
+A gani be $1 {{PLURAL:$1|karakter|karakteran}} ra zêde mebo.',
 'yourgender' => 'Çıçiy cı esto?',
 'gender-unknown' => 'Ez detay nivana',
 'gender-male' => 'Perané wiki camérd deyne ezo vırnena',
@@ -1563,6 +1576,8 @@ Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de moc
 'userrights-changeable-col' => 'Grubê ke şıma şenê bıvurnê',
 'userrights-unchangeable-col' => 'Grubê ke şıma nêşenê bıvurnê',
 'userrights-irreversible-marker' => '$1*',
+'userrights-conflict' => 'Heqan de karberi de dıbare vıcyayo! Kerem ke vurnayışane xo çımser ra ravyarne  u tesdiq keri.',
+'userrights-removed-self' => 'Heqi şıma usula hewadeyay. Qan de coy şıma hendana nişeni ena pela resi.',
 
 # Groups
 'group' => 'Grube:',
@@ -1714,7 +1729,7 @@ Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de moc
 'recentchanges' => 'Vurnayışê peyêni',
 'recentchanges-legend' => 'Tercihê vurnayışanê peyênan',
 'recentchanges-summary' => 'Ena pele de wiki sero vurnayışanê peyênan teqib ke.',
-'recentchanges-noresult' => 'Zey kiterandé şıma vırnayış névineya',
+'recentchanges-noresult' => 'Goreyê kriteranê kıfşkerdeyan ra qet yew vurnayış nêvêniya.',
 'recentchanges-feed-description' => 'Ena feed dı vurnayişanê tewr peniyan teqip bık.',
 'recentchanges-label-newpage' => 'Enê vurnayışi ra yew pela newiye vıraziye',
 'recentchanges-label-minor' => 'Eno yew vurnayışo werdiyo',
@@ -1727,11 +1742,23 @@ Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de moc
 'rcnotefrom' => "Cêr de '''$2''' ra nata vurnayışiyê asenê (tewr vêşi <b> '''$1'''</b> asenê).",
 'rclistfrom' => '$1 ra tepiya vurnayışanê neweyan bımocne',
 'rcshowhideminor' => 'Vurnayışanê werdiyan $1',
+'rcshowhideminor-show' => 'Bımocne',
+'rcshowhideminor-hide' => 'Bınımne',
 'rcshowhidebots' => 'Botan $1',
+'rcshowhidebots-show' => 'Bımocne',
+'rcshowhidebots-hide' => 'Bınımne',
 'rcshowhideliu' => 'Karberanê qeydbiyayeyan $1',
+'rcshowhideliu-show' => 'Bımocne',
+'rcshowhideliu-hide' => 'Bınımne',
 'rcshowhideanons' => 'Karberanê bênameyan $1',
+'rcshowhideanons-show' => 'Bımocne',
+'rcshowhideanons-hide' => 'Bınımne',
 'rcshowhidepatr' => '$1 vurnayışê ke dewriya geyrayê',
+'rcshowhidepatr-show' => 'Bımocne',
+'rcshowhidepatr-hide' => 'Bınımne',
 'rcshowhidemine' => 'Vurnayışanê mı $1',
+'rcshowhidemine-show' => 'Bımocne',
+'rcshowhidemine-hide' => 'Bınımne',
 'rclinks' => 'Peyniya $2 rocan de $1 vurnayışan bımocne <br />$3',
 'diff' => 'ferq',
 'hist' => 'verên',
@@ -1854,6 +1881,7 @@ Semedê ancia barkerdışi dewamkerdış ra ver tarixê esterışê dosya gani q
 'uploaddisabledtext' => 'Bar kerdişê dosyayî iptal biyo',
 'php-uploaddisabledtext' => 'barkerdışê dosyayê PHP nıka çino. kerem kere eyarê file_uploads korol bıkerê.',
 'uploadscripted' => 'Ena dosya de yew HTML ya zi kodê scriptî este ke belki browserê webî fam nikeno.',
+'uploadinvalidxml' => 'Dosyaya barkerdiye de XML nêgureniya.',
 'uploadvirus' => 'Ena dosya de yew virus estê: Qe detayan: $1',
 'uploadjava' => 'Dosya, zerre de cıdı jew Java .class dosyaya ZIP esta.
 Dosyayn de Java barkerdışi rê icazet nêdeyê, çıkı emeleya merduman nêbena.',
@@ -2017,7 +2045,7 @@ keyepel nıka zaf meşğulo yew dema herayi de newe ra tesel bıkerê.',
 'listfiles_name' => 'Name',
 'listfiles_user' => 'Karber',
 'listfiles_size' => 'Gırdiye',
-'listfiles_description' => 'Sılasnayış',
+'listfiles_description' => 'Şınasnayış',
 'listfiles_count' => 'Versiyoni',
 'listfiles-show-all' => 'Asayışa versiyonandé verénan',
 'listfiles-latestversion' => 'Versiyono verin',
@@ -2221,8 +2249,18 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'deadendpagestext' => 'Ena pelan ke {{SITENAME}} de zerrî ey de link çini yo.',
 'protectedpages' => 'Pelê pawıtiyey',
 'protectedpages-indef' => 'têna pawıteyê bêmuddeti',
+'protectedpages-summary' => 'têna pawıteyê têdimî',
 'protectedpages-cascade' => 'Kilit biyaye ke teyna cascadiye',
+'protectedpages-noredirect' => 'Hetenayışan bınımnê',
 'protectedpagesempty' => 'pê ney parametreyan pelê pawiteyi çinî',
+'protectedpages-timestamp' => 'Mareyê demi',
+'protectedpages-page' => 'Pele',
+'protectedpages-expiry' => 'Wextê qediyayışi',
+'protectedpages-performer' => 'Şeveknayışê karberi',
+'protectedpages-params' => 'Parametreyê şeveknayışi',
+'protectedpages-reason' => 'Sebeb',
+'protectedpages-unknown-timestamp' => 'Nêzanaye',
+'protectedpages-unknown-performer' => 'Karbero nêzanaye',
 'protectedtitles' => 'Sernameyê pawıtiyey',
 'protectedtitlesempty' => 'pê ney parametreyan sernuşteyê pawite çinê',
 'listusers' => 'Listeyê Karberan',
@@ -2268,7 +2306,7 @@ tipa rocaneyi, nameyê karberi (herfa pil u qıci re hessas a), ya zi peli (reyn
 'showhideselectedlogentries' => 'Qeydê weçinayışê bımocne/bınımne dekerê',
 
 # Special:AllPages
-'allpages' => 'Peri pêro',
+'allpages' => 'Peli pêro',
 'alphaindexline' => '$1 ra $2ine',
 'nextpage' => 'Pela badê cû ($1)',
 'prevpage' => 'Pela verêne ($1)',
@@ -2399,7 +2437,7 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 Ena deme ra, ma qe vurnayışan ser ena pele tı haberdar keni.',
 'removewatch' => 'Listedê mınê seyr kerdışi ra hewad',
 'removedwatchtext' => 'Ena pela "[[:$1]]" biya wedariya [[Special:Watchlist|listeyê seyr-kerdışi şıma]].',
-'watch' => 'Temaşe ke',
+'watch' => 'Seyr ke',
 'watchthispage' => 'Ena pele seyr ke',
 'unwatch' => 'Teqib mekerê',
 'unwatchthispage' => 'temaşa kerdışê peli vındarn.',
@@ -2412,6 +2450,7 @@ Ena deme ra, ma qe vurnayışan ser ena pele tı haberdar keni.',
 'watchmethod-list' => 'pel ê ke şıma temaşa kenî vuryayişê peyinê ey konrol beno',
 'watchlistcontains' => 'listeya seyrkerdışê şıma de $1 tene {{PLURAL:$1|peli|peli}} estî.',
 'iteminvalidname' => "pê no '$1' unsuri problem bı, nameyo nemeqbul...",
+'wlnote2' => 'Cêr vurnayışê {{PLURAL:$1|saeta|<strong>$1</strong> saetanê}} peyênan estê, $2 ra be hetan $3.',
 'wlshowlast' => 'Peyni de vurnayışan ra  $1 seata u $2 roca $3 bımocnê',
 'watchlist-options' => 'Tercihê liste da seyri',
 
@@ -2776,8 +2815,8 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 'change-blocklink' => 'kılitkerdışi bıvurne',
 'contribslink' => 'iştıraqi',
 'emaillink' => 'e-poste bırışe',
-'autoblocker' => 'Şıma otomatikmen kılit biy, çıke adresa şımawa \'\'IP\'\'y terefê "[[User:$1|$1]]" gureniyena.
-Sebebê kılit-biyayışê $1\'i: "$2"o',
+'autoblocker' => 'Şıma otomatikmen kılit biy, çıke adresa şımaya \'\'IP\'\'y terefê "[[User:$1|$1]]" gureniyena.
+Sebebê kılitbiyayışê $1\'i "$2"o',
 'blocklogpage' => 'Qeydê bloqi',
 'blocklog-showlog' => 'verniyê no/na karberi cıwa ver geriyayo/ya.',
 'blocklog-showsuppresslog' => 'verniyê no/na karberi cıwa ver geriyayo/ya.',
@@ -2797,7 +2836,7 @@ Seba lista karberanê ke heta nıka kılit biyê [[Special:BlockList|lista kıli
 'range_block_disabled' => 'Desturê administorî ke viraştişê blokê rangeyî kefiliyo.',
 'ipb_expiry_invalid' => 'Wextê qediyayışi nêvêreno.',
 'ipb_expiry_temp' => 'Kılitbiyayışê karberê nımıtey gani ebedi bo.',
-'ipb_hide_invalid' => 'hesabê karberi pinani nêbeno; belka semedê zaf vurnayişi ra yo.',
+'ipb_hide_invalid' => 'Hesabê karberi pinani nêbeno; belka semedê {{PLURAL:$1|yew vurnayışi|$1 vurnayışan}} ra yo.',
 'ipb_already_blocked' => '"$1" zaten blok biya',
 'ipb-needreblock' => '$1 xora engel biyo. Tı wazenay eyaran bıvurnê?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Kılitkerdışo bin|Kılitkerdışê bini}}',
@@ -2969,6 +3008,7 @@ eke şıma qayili paşt bıdi mahalli kerdışê wikimedyayi, kerem kerê pelê
 'allmessages-prefix' => 'pê prefiks filtre bıker',
 'allmessages-language' => 'Zıwan:',
 'allmessages-filter-submit' => 'Şo',
+'allmessages-filter-translate' => 'Açarnayış',
 
 # Thumbnails
 'thumbnail-more' => 'Gırd ke',
@@ -3021,7 +3061,7 @@ têna yew qısımê dosyayi ey bar bı',
 dosyaya emaneti vindbiyo',
 'import-parse-failure' => 'Împortê XML-parse nebiyo',
 'import-noarticle' => 'Pel çino ke împort bike!',
-'import-nonewrevisions' => 'Revizyonê hemi vernî de împort biyê.',
+'import-nonewrevisions' => 'Qet versiyoni nêardi (nê pêro ya vera biyê ya zi qandê xeteyan ra nayinan sera xıl diyayo).',
 'xml-error-string' => '$1 çizgi de $2 col $3 (bit $4): $5',
 'import-upload' => 'Dosyayê XML bar bike',
 'import-token-mismatch' => "vindibiyayişê ma'lumatê hesabi. kerem kerê newe ra tesel/cereb bıkerê.",
@@ -3065,7 +3105,7 @@ dosyaya emaneti vindbiyo',
 'tooltip-pt-login' => 'Mayê şıma ronıştış akerdışi rê dawet keme; labelê ronıştış mecburi niyo',
 'tooltip-pt-logout' => 'Sistem ra vıcyayış',
 'tooltip-ca-talk' => 'Zerrekê pele sero werênayış',
-'tooltip-ca-edit' => 'Tı şenay na perer bıvurné.Verdé qeyd kerdışi ver gocega verqayti bıkarné.',
+'tooltip-ca-edit' => 'Tı şenay na pele bıvurnê. Kerem ke, qeydkerdış ra ver gocega verqayti bıgurene.',
 'tooltip-ca-addsection' => 'Zu bınnusteya newi ak',
 'tooltip-ca-viewsource' => 'Ena pele kılit biya.
 Şıma şenê çımeyê aye bıvênê',
@@ -3076,14 +3116,14 @@ dosyaya emaneti vindbiyo',
 'tooltip-ca-undelete' => 'peli biyarê halê ver hewnakerdışi',
 'tooltip-ca-move' => 'Ena pele bere',
 'tooltip-ca-watch' => 'Ena pele lista xoya seyrkerdışi ke',
-'tooltip-ca-unwatch' => 'Ena pele listeya seyir-kerdışi xo ra bıvec',
+'tooltip-ca-unwatch' => 'Ena pele lista xoya seyrkerdışi ra vece',
 'tooltip-search' => '{{SITENAME}} miyan de bıvin',
 'tooltip-search-go' => 'Ebe nê namey tami şo yew pela ke esta',
 'tooltip-search-fulltext' => 'Nê  metni peran dı cı geyre',
 'tooltip-p-logo' => 'Şo pela seri',
 'tooltip-n-mainpage' => 'Şo pela seri',
 'tooltip-n-mainpage-description' => 'Şo pela seri',
-'tooltip-n-portal' => 'Heqa projey de, kes çı şeno bıkero, çıçiyo koti deyo',
+'tooltip-n-portal' => 'Heqa procey de, çı şenay bıkerê, çı koti vêniyeno',
 'tooltip-n-currentevents' => 'Vurnayışanê peyênan de melumatê pey bıvêne',
 'tooltip-n-recentchanges' => 'Wiki de lista vurnayışanê peyênan',
 'tooltip-n-randompage' => 'Perake raşt amé',
@@ -3102,9 +3142,9 @@ dosyaya emaneti vindbiyo',
 'tooltip-ca-nstab-user' => 'Pela karberi bıvêne',
 'tooltip-ca-nstab-media' => 'Pera medya bıvin',
 'tooltip-ca-nstab-special' => 'Na yew pela xasa, şıma nêşenê sero vurnayış bıkerê',
-'tooltip-ca-nstab-project' => 'Pera proci bıvin',
+'tooltip-ca-nstab-project' => 'Pela procey bıvêne',
 'tooltip-ca-nstab-image' => 'Pera dosyayer bıvin',
-'tooltip-ca-nstab-mediawiki' => 'Mesacané sistemi bıvin',
+'tooltip-ca-nstab-mediawiki' => 'Mesacê sistemi bıvêne',
 'tooltip-ca-nstab-template' => 'Şabloni bıvin',
 'tooltip-ca-nstab-help' => 'Pela peşti bıvêne',
 'tooltip-ca-nstab-category' => 'Pela kategoriye bıvêne',
@@ -3113,7 +3153,7 @@ dosyaya emaneti vindbiyo',
 'tooltip-preview' => 'Vurnayışané ğo çımra ravyarné. Verdé qeyd kerdışi eneri bıkarné!',
 'tooltip-diff' => 'Metni sero vurnayışan mocneno',
 'tooltip-compareselectedversions' => 'Ena per de ferqê rewziyonan de dı weçinaya bıvinê',
-'tooltip-watch' => 'Eno pele listey tıyo seyir-kerdişi ri dek',
+'tooltip-watch' => 'Ena pele lista xoya seyrkerdışi ke',
 'tooltip-watchlistedit-normal-submit' => 'Sernuşteya hewad',
 'tooltip-watchlistedit-raw-submit' => 'Listeyê seyri newen ke',
 'tooltip-recreate' => 'pel hewn a bışiyo zi tepiya biya',
@@ -3277,7 +3317,7 @@ Gurênayışê nae de, beno ke sistemê şıma zerar bıvêno.",
 'noimages' => 'Çik çini yo.',
 'ilsubmit' => 'Cı geyre',
 'bydate' => 'goreyê zemani',
-'sp-newimages-showfrom' => '$1, sehat $2 ra tepya dosyayané newan bıasné',
+'sp-newimages-showfrom' => 'Dosyayanê newiyanê ke be $1, $2 ra dest pêkenê bımocne',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'video-dims' => '$1, $2 × $3',
@@ -3927,7 +3967,7 @@ Ma rica keno tesdiq bike ke ti raştî wazeno eno pel bivirazo.",
 'percent' => '$1%',
 'parentheses' => '($1)',
 'brackets' => '[$1]',
-'quotation-marks' => '"$1".',
+'quotation-marks' => '"$1"',
 
 # Multipage image navigation
 'imgmultipageprev' => '← peleyê verin',
@@ -3936,7 +3976,7 @@ Ma rica keno tesdiq bike ke ti raştî wazeno eno pel bivirazo.",
 'imgmultigoto' => 'Şo pela da $1',
 
 # Language selector for translatable SVGs
-'img-lang-default' => '(hesıbyayi zıwan)',
+'img-lang-default' => '(zıwano hesabiyaye)',
 'img-lang-info' => 'Resimé $1, $2 ya teké pé ke.',
 'img-lang-go' => 'Bırş',
 
@@ -3945,7 +3985,7 @@ Ma rica keno tesdiq bike ke ti raştî wazeno eno pel bivirazo.",
 'descending_abbrev' => 'nızm',
 'table_pager_next' => 'Pela peyêne',
 'table_pager_prev' => 'Pela verêne',
-'table_pager_first' => 'Pela jûyıne',
+'table_pager_first' => 'Pela sıfteyêne',
 'table_pager_last' => 'Pela peyêne',
 'table_pager_limit' => 'her per de $1 unsuran bımocne',
 'table_pager_limit_label' => 'Her pele ra xacetan',
@@ -4099,10 +4139,18 @@ Ti hem zi eşkeno [[Special:EditWatchlist|use the standard editor]].',
 'version-parser-function-hooks' => 'Çengelê ekstensiyon ê parserî',
 'version-hook-name' => 'Nameyê çengelî',
 'version-hook-subscribedby' => 'Eza biyayoğ',
-'version-version' => '(Versiyon $1)',
+'version-version' => '($1)',
 'version-svn-revision' => '(r$2)',
-'version-license' => 'Lisans',
+'version-license' => 'Lisansê MediaWiki',
 'version-ext-license' => 'Lisans',
+'version-ext-colheader-name' => 'Dergiye',
+'version-ext-colheader-version' => 'Versiyon',
+'version-ext-colheader-license' => 'Lisans',
+'version-ext-colheader-description' => 'Şınasnayış',
+'version-ext-colheader-credits' => 'Nuştekari',
+'version-license-title' => 'Semedê $1 ra lisans',
+'version-license-not-found' => 'Seba na derganiye melumatê lisansê detayıni nêvêniya.',
+'version-credits-title' => 'Semedê $1 ra krediy',
 'version-poweredby-credits' => "Ena wiki, dezginda '''[https://www.mediawiki.org/ MediaWiki]''' ya piya vıraziyaya, heqê telifi © 2001-$1 $2.",
 'version-poweredby-others' => 'Zewmi',
 'version-poweredby-translators' => "Açernere translatewiki.net'i",
@@ -4272,7 +4320,7 @@ satır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.
 
 # 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.',
-'feedback-subject' => 'Mersel:',
+'feedback-subject' => 'Mewzu:',
 'feedback-message' => 'Mesac:',
 'feedback-cancel' => 'Bıtexelne',
 'feedback-submit' => 'Peyxeberdar Bırşe',
@@ -4322,6 +4370,7 @@ satır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.
 'api-error-overwrite' => 'Ser yew dosyayê ke hama esta, ser ey qeyd nibena.',
 'api-error-stashfailed' => 'Xırabiya zerrek:Wasteri idari dosyey kerdi vıni.',
 'api-error-publishfailed' => 'Xetaya zerrey: Cıgeyrayoği nêşiya dosyaya rocaniye akero.',
+'api-error-stasherror' => 'Dosya embari rê ke bar biye xeta veciye.',
 'api-error-timeout' => 'Cıwab dayışê wasteri peyra mend.',
 'api-error-unclassified' => 'Yew xeteyê nizanyeni biya.',
 'api-error-unknown-code' => "$1'dı jew xeta vıciye",
index 1d8d8f6..25cb50a 100644 (file)
@@ -322,7 +322,6 @@ $messages = array(
 'vector-action-protect' => 'Šćitaś',
 'vector-action-undelete' => 'Wótnowiś',
 'vector-action-unprotect' => 'Šćit změniś',
-'vector-simplesearch-preference' => 'Zjadnorjonu pytańsku lejstwu zmóžniś (jano drastwa Vector)',
 'vector-view-create' => 'Napóraś',
 'vector-view-edit' => 'Wobźěłaś',
 'vector-view-history' => 'Wersije a awtory',
@@ -601,8 +600,6 @@ Glědaj: Jo móžno, až někotare boki pokazuju se snaź tak, ako by ty hyšći
 'gotaccountlink' => 'Pśizjawiś se',
 'userlogin-resetlink' => 'Sy pśizjawjeńske daty zabył?',
 'userlogin-resetpassword-link' => 'Sy swójo gronidło zabył?',
-'helplogin-url' => 'Help:Pśizjawiś',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoc za pśizjawjenje]]',
 'userlogin-loggedin' => 'Sy južo ako {{GENDER:$1|$1 pśizjawjony|$1 pśizjawjona}}. Wužyj slědujucy formular, aby se ako drugi wužywaŕ pśizjawił.',
 'userlogin-createanother' => 'Druge konto załožyś',
 'createacct-join' => 'Zapódaj dołojce swóje informacije.',
@@ -683,6 +680,10 @@ Móžoš toś te zdźělenje ignorowaś, jolic toś te konto jo se jano zamólnj
 'suspicious-userlogout' => 'Twójo póžedanje za wótzjawjenim jo se wótpokazało, dokulaž zda se, až jo se pósłało pśez wobškóźony wobglědowak abo pufrowański proksy',
 'createacct-another-realname-tip' => 'Napšawdne mě jo opcionalne.
 Jolic jo pódajoš, buźo se to wužywaś, aby pśinoski pśirědowało.',
+'pt-login' => 'Pśizjawiś',
+'pt-login-button' => 'Pśizjawiś',
+'pt-createaccount' => 'Konto załožyś',
+'pt-userlogout' => 'Wótzjawiś',
 
 # Email sending
 'php-mail-error-unknown' => 'Njeznata zmólka w PHP-funkciji mail()',
@@ -691,7 +692,7 @@ Jolic jo pódajoš, buźo se to wužywaś, aby pśinoski pśirědowało.',
 
 # Change password dialog
 'changepassword' => 'Šćitne gronidło změniś',
-'resetpass_announce' => 'Sy z nachylnym e-mailowym šćitnym gronidłom pśizjawjony. Aby pśizjawjenje zakóńcył, zapódaj how nowe šćitne gronidło:',
+'resetpass_announce' => 'Aby pśizjawjenje skóńcył, musyš nowe gronidło póstajiś.',
 'resetpass_text' => '<!-- Dodaj how tekst -->',
 'resetpass_header' => 'Kontowe gronidło změniś',
 'oldpassword' => 'Stare šćitne gronidło:',
@@ -707,8 +708,12 @@ Pócakaj pšosym $1, nježli až wopytajoš znowego.',
 'resetpass-submit-cancel' => 'Pśetergnuś',
 'resetpass-wrong-oldpass' => 'Njepłaśiwe nachylne abo aktualne gronidło.
 Sy snaź swójo gronidło južo wuspěšnje změnił abo nowe nachylne gronidło pominał.',
+'resetpass-recycled' => 'Pšosym staj swójo gronidło na druge gronidło ako twójo aktualne gronidło.',
+'resetpass-temp-emailed' => 'Sy z nachylnym e-mailowym kodom pśizjawjony. Aby pśizjawjenje skóńcył, musyš how nowe gronidło póstajiś:',
 'resetpass-temp-password' => 'Nachylne gronidło:',
 'resetpass-abort-generic' => 'Změnjanje gronidła jo se pśez rozšyrjenje pśetergnuło.',
+'resetpass-expired' => 'Twójo gronidło jo pśepadnyło. Pšosym póstaj nowe gronidło za pśizjawjenje.',
+'resetpass-expired-soft' => 'Twójo gronidło jo pśepadnyło a musy se slědk stajiś. Pšosym wubjeŕ něnto druge gronidło abo klikni na "{{int:resetpass-submit-cancel}}", aby jo pózdźej slědk stajił.',
 
 # Special:PasswordReset
 'passwordreset' => 'Gronidło slědk stajiś',
@@ -956,7 +961,7 @@ Eksistěrujo južo.',
 'invalid-content-data' => 'Njepłaśiwe wopśimjeśowe daty',
 'content-not-allowed-here' => 'Wopśimjeśe "$1" njejo na boku [[$2]] dowólone',
 'editwarning-warning' => 'Gaž toś ten bok se spušća, mógu se změny zgubiś, kótarež sy pśewjadł.
-Jolic sy pśizjawjeny, móžoš toś to warnowanje we wótrězku „Wobźěłaś“ swójich nastajenjow znjemóžniś.',
+Jolic sy pśizjawjeny, móžoš toś to warnowanje we wótrězku „{{int:prefs-editing}}“ swójich nastajenjow znjemóžniś.',
 'editpage-notsupportedcontentformat-title' => 'Wopśimjeśowy format se njepódpěra.',
 'editpage-notsupportedcontentformat-text' => 'Wopśimjeśowy format $1 njepódpěra se pśez wopśimjeśowy model $2.',
 
@@ -990,6 +995,7 @@ Njesmějo daś wěcej nježli $2 {{PLURAL:$2|wołanja|wołanjowu|wołanjow|woła
 'undo-success' => 'Wobźěłanje móžo se wótpóraś. Pšosym pśeglěduj dołojcne pśirownowanje aby se wěsty był, až to wót wěrnosći coš, a pón składuj změny, aby se wobźěłanje doskóńcnje wótpórało.',
 'undo-failure' => 'Změna njejo se mógała wótpóraś, dokulaž jo něchten pótrjefjony wótrězk mjaztym změnił.',
 'undo-norev' => 'Změna njeda se wótwrośiś, dokulaž njeeksistěčujo abo jo se wulašowała.',
+'undo-nochange' => 'Zda se, až změna jo se južo anulěrowała.',
 'undo-summary' => 'Wersija $1 wót [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusija]]) jo se anulěrowała',
 'undo-summary-username-hidden' => 'Změna $1 schowanego wužywarja jo se anulěrowała',
 
@@ -1076,8 +1082,6 @@ Móžoš se toś ten rozdźěl woglědaś; drobnostki glědaj w [{{fullurl:{{#Sp
 'revdelete-show-file-submit' => 'Jo',
 'revdelete-selected' => "'''{{PLURAL:$2|Wuzwólona wersija|Wuzwólonej wersiji|Wuzwólone wersije}} wót [[:$1]].'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Wuzwólony protokolowe tšojenje|Wuzwólonej protokolowe tšojeni|wuzwólone protokolowe tšojenja}}:'''",
-'revdelete-text' => "'''Wulašowane wersije a tšojenja budu se dalej w stawiznach boka a w protokolach pokazaś, ale źěle jich wopśimjeśa njebudu pśistupne za zjawnosć.'''
-Dalšne administratory na {{GRAMMAR:lokatiw|{{SITENAME}}}} mógu ale pśecej hyšći pśistup na schowane wopśimjeśe měś a mógu jo pśez samki interfejs wótnowiś,  snaźkuli su pśidatne wobgranicowanja.",
 'revdelete-confirm' => 'Pšosym wobkšuś, až coš to cyniś, až rozmějoš konsekwence a až cyniš to pó [[{{MediaWiki:Policy-url}}|pšawidłach]].',
 'revdelete-suppress-text' => "Pódtłocenje by dejało se '''jano''' za slědujuce pady wužywaś:
 * Potencielnje ranjece informacije
@@ -1170,6 +1174,8 @@ Zaruc, až historija wersijow nastawka jo njepśetergnjona.',
 'showhideselectedversions' => 'Wubrane wersije pokazaś/schowaś',
 'editundo' => 'wótwrośiś',
 'diff-empty' => '(Žeden rozdźěl)',
+'diff-multi-sameuser' => '({{PLURAL:$1|Jadna mjazywersija|$1 mjazywersiji|$1 mjazywersije|$1 mjazywersijow}} wót togo samskego wužywarja {{PLURAL:$1|njepokazana|njepokazanej|njepokazane}})',
+'diff-multi-otherusers' => '({{PLURAL:$1|Jadna mjazywersija|$1 mjazywersiji|$1 mjazywersije|$1 mjazywersijow}} wót {{PLURAL:$2|jadnogo dalšnego wužywarja|$2 wužywarjow}} {{PLURAL:$1|njepokazana|njepokazanej|njepokazane}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|Jadna mjazywersija|$1 mjazywersiji|$1 mjazywersije|$1 mjazywersijow}} wót wěcej ako {{PLURAL:$2|jadnogo wužywarja|$2 wužywarjowu|$2 wužywarjow|$2 wužywarjow}} {{PLURAL:$1|njepokazana|njepokazanej|njepokazane|njepokazane}})',
 'difference-missing-revision' => '{{PLURAL:$2|Jadna wersija|$2 wersiji|$2 wersije|$2 wersijow}} toś togo rozdźěla ($1) {{PLURAL:$2|njejo se namakała|njejstej se namakałej|njejsu namakali|njejo se namakało}}.
 
@@ -1190,7 +1196,7 @@ Drobnostki móžoš w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'shown-title' => '$1 {{PLURAL:$1|wuslědk|wuslědka|wuslědki|wuslědkow}} na bok pokazaś',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) pokazaś',
 'searchmenu-exists' => "'''Jo bok z mjenim \"[[\$1]]\" na toś tom wikiju'''",
-'searchmenu-new' => "'''Napóraj bok \"[[:\$1|\$1]]\" na toś tom wikiju!'''",
+'searchmenu-new' => '<strong>Napóraj bok "[[:$1]]" na toś tom wikiju!</strong> {{PLURAL:$2|0=|Glej teke bok namakany z twójim pytanim.|Glej teke namakane pytańske wuslědki.}}',
 'searchprofile-articles' => 'Wopśimjeśowe boki',
 'searchprofile-project' => 'Pomoc a projektowe boki',
 'searchprofile-images' => 'Multimedia',
@@ -1209,13 +1215,14 @@ Drobnostki móžoš w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'search-file-match' => '(wótpowědujo datajowemu wopśimjeśeju)',
 'search-suggest' => 'Měnjašo $1?',
 'search-interwiki-caption' => 'Sotšine projekty',
-'search-interwiki-default' => '$1 wuslědki:',
+'search-interwiki-default' => 'Wuslědki z $1:',
 'search-interwiki-more' => '(wěcej)',
 'search-relatedarticle' => 'swójźbne',
 'searcheverything-enable' => 'We wšych mjenjowych rumach pytaś',
 'searchrelated' => 'swójźbne',
 'searchall' => 'wše',
 'showingresults' => "How {{PLURAL:|jo '''1''' wuslědk|stej '''$1''' wuslědka|su '''$1''' wuslědki}} wót cysła '''$2'''.",
+'showingresultsinrange' => 'Dołojce pokazujo se do {{PLURAL:$1|<strong>1</strong> wuslědka|<strong>$1</strong> wuslědkowu|<strong>$1</strong> wuslědkow}} we wobłuku <strong>$2</strong> až do <strong>$3</strong>.',
 'showingresultsnum' => "How {{PLURAL:$3|jo '''1''' wuslědk|stej '''$3''' wuslědka|su '''$3''' wuslědki}} wót cysła '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Wuslědk '''$1''' z '''$3'''|Wuslědki '''$1 - $2''' z '''$3'''}} za '''$4'''",
 'search-nonefound' => 'Njejsu se wuslědki namakali, kótarež wótpowěduju napšašowanjeju.',
@@ -1532,14 +1539,26 @@ Toś ta informacija buźo zjawna.',
 'recentchanges-legend-heading' => "'''Legenda:'''",
 'recentchanges-legend-newpage' => '(glej teke [[Special:NewPages|lisćinu nowych bokow]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "Dołojce pokazuju se změny wót '''$2''' (maks. '''$1''' zapisow).",
+'rcnotefrom' => 'Dołojce pokazuju se změny wót <strong>$2</strong> (maks. <strong>$1</strong> zapisow).',
 'rclistfrom' => 'Nowe změny wót $1 pokazaś.',
 'rcshowhideminor' => 'Snadne změny $1',
+'rcshowhideminor-show' => 'Pokazaś',
+'rcshowhideminor-hide' => 'Schowaś',
 'rcshowhidebots' => 'awtomatiske programy (boty) $1',
+'rcshowhidebots-show' => 'Pokazaś',
+'rcshowhidebots-hide' => 'Schowaś',
 'rcshowhideliu' => 'Zregistrěrowane wužywarje $1',
+'rcshowhideliu-show' => 'Pokazaś',
+'rcshowhideliu-hide' => 'Schowaś',
 'rcshowhideanons' => 'anonymne wužywarje $1',
+'rcshowhideanons-show' => 'Pokazaś',
+'rcshowhideanons-hide' => 'Schowaś',
 'rcshowhidepatr' => 'kontrolěrowane změny $1',
+'rcshowhidepatr-show' => 'Pokazaś',
+'rcshowhidepatr-hide' => 'Schowaś',
 'rcshowhidemine' => 'móje pśinoski $1',
+'rcshowhidemine-show' => 'Pokazaś',
+'rcshowhidemine-hide' => 'Schowaś',
 'rclinks' => 'Slědne $1 změny slědnych $2 dnjow pokazaś<br />$3',
 'diff' => 'rozdźěl',
 'hist' => 'wersije',
@@ -1663,6 +1682,8 @@ Jolic maš toś ten wobraz w połnem rozeznaśu, nagraj jen, howac změń pšosy
 'uploaddisabledtext' => 'Nagraśa datajow su znjemóžnjone.',
 'php-uploaddisabledtext' => 'Nagraśa PHP-datajow su znjemóžnjone. Pšosym pśekontrolěruj nastajenje file_uploads.',
 'uploadscripted' => 'Toś ta dataja wopśimjejo HTML abo script code, kótaryž móžo wót browsera se zamólnje wuwjasć.',
+'uploadscriptednamespace' => "Toś ta SVG-dataja wopśimujo njedowólony mjenjowy rum '$1'",
+'uploadinvalidxml' => 'XML w nagratej dataji njedajo se parsowaś.',
 'uploadvirus' => 'Toś ta dataja ma wirus! Nadrobnosći: $1',
 'uploadjava' => 'Toś ta dataja jo ZIP-dataja, kótaraž wopśimujo dataju .class z Javy.
 Nagrawanje datajow Javy njejo dowólone, dokulaž mógli wobjeźenje wěstotnych wobgranicowanjow zmóžniś.',
@@ -2024,10 +2045,20 @@ Kužda smužka wopśimjejo wótkaze na prědne a druge dalejpósrědnjenje a tek
 'deadendpagestext' => 'Slědujuce boki njewótkazuju na druge boki we {{GRAMMAR:lokatiw|{{SITENAME}}}}.',
 'protectedpages' => 'Šćitane boki',
 'protectedpages-indef' => 'Jano boki pokazaś, kótarež su na njewěsty cas šćitane',
+'protectedpages-summary' => 'Toś ten specialny bok pokazujo wšykne boki, kótarež njamgu se mimo wósebnych pšawow wobźěłowaś a pśesuwaś.',
 'protectedpages-cascade' => 'Jano boki z kaskadowym šćitom',
 'protectedpages-noredirect' => 'Dalejpósrědnjenja schowaś',
 'protectedpagesempty' => 'Z toś tymi parametrami njejsu tuchylu žedne boki šćitane.',
+'protectedpages-timestamp' => 'Casowy kołk',
+'protectedpages-page' => 'Bok',
+'protectedpages-expiry' => 'Płaśiwy až do',
+'protectedpages-performer' => 'Šćitajucy wužywaŕ',
+'protectedpages-params' => 'Šćitowe parametry',
+'protectedpages-reason' => 'Pśicyna',
+'protectedpages-unknown-timestamp' => 'Njeznaty',
+'protectedpages-unknown-performer' => 'Njeznaty wužywaŕ',
 'protectedtitles' => 'Šćitane titele',
+'protectedtitles-summary' => 'Toś ten bok nalicyjo titele, kótarež su tuchylu pśeśiwo napóranjoju šćitane. Za lisćinu eksistěrujucych bokow, kótarež su šćitane, glej [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Tuchylu njejsu žedne boki z pódanych parametrami šćitane.',
 'listusers' => 'Lisćina wužywarjow',
 'listusers-editsonly' => 'Jano wužywarjow ze změnami pokazaś',
@@ -2211,6 +2242,7 @@ Pózdźejšne změny na toś tom boku a w pśisłušecej diskusiji se tam nalicu
 'watchmethod-list' => 'Pśepytanje wobglědowanych bokow za aktualnymi změnami',
 'watchlistcontains' => 'Twója wobglědowańka wopśimujo $1 {{PLURAL:$1|bok|boka|boki|bokow}}.',
 'iteminvalidname' => 'Problem ze zapisom „$1“, njepłaśece mě.',
+'wlnote2' => 'Slěduju změny {{PLURAL:$1|zachadneje góźiny|zachadneju <strong>$1</strong> góźinowu|zachadnych <strong>$1</strong> góźinow}} Staw: $2, $3.',
 'wlshowlast' => 'Pokaž změny slědnych $1 góźinow, $2 dnjow abo $3 (w slědnych 30 dnjach).',
 'watchlist-options' => 'Opcije wobglědowańki',
 
@@ -2297,7 +2329,7 @@ Pšašanja a dalšna pomoc:
 'delete-toobig' => 'Toś ten bok ma z wěcej nježli $1 {{PLURAL:$1|wersiju|wersijomaj|wersijami|wersijami}} dłujku historiju. Lašowanje takich bokow bu wobgranicowane, aby wobškoźenju {{GRAMMAR:genitiw|{{SITENAME}}}} z pśigódy zajźowało.',
 'delete-warning-toobig' => 'Toś ten bok ma z wěcej ako $1 {{PLURAL:$1|wersiju|wersijomaj|wersijami|wersijami}} dłujke stawizny. Jich wulašowanje móžo źěło datoweje banki na {{SITENAME}} kazyś;
 póstupujśo z glědanim.',
-'deleting-backlinks-warning' => "'''Warnowanje:''' Druge boki wótkazuju k bokoju abo bok jo hynźi zapśěgnjony, kótaryž coš wulašowaś.",
+'deleting-backlinks-warning' => "'''Warnowanje:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druge boki]] wótkazuju k bokoju abo bok jo hynźi zapśěgnjony, kótaryž coš wulašowaś.",
 
 # Rollback
 'rollback' => 'Wobźěłanja slědk wześ',
@@ -2466,8 +2498,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Toś ta IP-adresa jo tuchylu zablokěrowana.
 Nejnowšy zapisk protokola blokěrowanjow pódawa se dołojce ako referenca:',
 'sp-contributions-search' => 'Pśinoski pytaś',
+'sp-contributions-suppresslog' => 'pódtłocone wužywarske pśinoski',
 'sp-contributions-username' => 'IP-adresa abo wužywarske mě:',
 'sp-contributions-toponly' => 'Jano wuše wersije pokazaś',
+'sp-contributions-newonly' => 'Jano změny pokazaś, kótarež su napóranja bokow',
 'sp-contributions-submit' => 'Pytaś',
 
 # What links here
@@ -2567,7 +2601,7 @@ Glědaj do [[Special:BlockList|lisćiny blokěrowanjow]], aby blokěrowanja pśe
 'change-blocklink' => 'Blokěrowanje změniś',
 'contribslink' => 'pśinoski',
 'emaillink' => 'E-mail pósłaś',
-'autoblocker' => 'Awtomatiski blokěrowany, dokulaž twója IP-adresa jo se rowno wót "[[User:$1|$1]]". Pśicyna za blokěrowanje wužywarja $1 jo: "$2".',
+'autoblocker' => 'Awtomatiski blokěrowany, dokulaž twója IP-adresa jo se rowno wót "[[User:$1|$1]]" wužyła. Pśicyna za blokěrowanje wužywarja $1 jo: "$2".',
 'blocklogpage' => 'Protokol blokěrowanjow',
 'blocklog-showlog' => 'Toś ten wužywaŕ jo se pjerwjej zablokěrował. Protokol blokěrowanjow pódawa se dołojce ako referenca:',
 'blocklog-showsuppresslog' => 'Toś ten wužywaŕ jo se pjerwjej zablokěrował a schował. Protokol pódtłocowanjow pódawa se dołojce ako referenca:',
@@ -2747,6 +2781,7 @@ Pšosym wobglědaj [https://www.mediawiki.org/wiki/Localisation lokalizaciju Med
 'allmessages-prefix' => 'Pó prefiksu filtrěrowaś:',
 'allmessages-language' => 'Rěc:',
 'allmessages-filter-submit' => 'Wótpósłaś',
+'allmessages-filter-translate' => 'Pśełožyś',
 
 # Thumbnails
 'thumbnail-more' => 'Pówětšyś',
@@ -2763,6 +2798,7 @@ $2',
 'thumbnail_image-type' => 'Wobrazy typ se njepódpěra',
 'thumbnail_gd-library' => 'Njedopołna konfiguracija GD-biblioteki: felujuca funkcija $1',
 'thumbnail_image-missing' => 'Zda se, až dataja felujo: $1',
+'thumbnail_image-failure-limit' => 'Njedawno jo pśewjele wopytow było, kótarež jo se njeraźiło ($1 abo wěcej), aby toś tu miniaturu kresliło. Pšosym wopytajśo pózdźej hyšći raz.',
 
 # Special:Import
 'import' => 'Boki importěrowaś',
@@ -2797,7 +2833,7 @@ Wšykne transwiki-importowe akcije protokolěruju se w [[Special:Log/import|log-
 'importuploaderrortemp' => 'Nagrawanje importoweje dataje njejo se raźiło. Temporarny zapis felujo.',
 'import-parse-failure' => 'Zmólka pśi XML-imporśe:',
 'import-noarticle' => 'Žeden bok za import!',
-'import-nonewrevisions' => 'Wšykne wersije buchu južo pjerwjej importowane.',
+'import-nonewrevisions' => 'Žedne wersije zaimportěrowane (wšykne pak su južo eksistěrowali pak su so zmólkow dla pśeskócyli).',
 'xml-error-string' => '$1 smužka $2, słup $3, (Byte $4): $5',
 'import-upload' => 'XML-daty nagraś',
 'import-token-mismatch' => 'Zgubjenje posejźeńskich datow. Pšosym wopytaj hyšći raz.',
@@ -2808,6 +2844,7 @@ Wšykne transwiki-importowe akcije protokolěruju se w [[Special:Log/import|log-
 'import-error-special' => 'Bok "$1" se njeimportěrujo, dokulaž słuša k wósebnemu mjenjowemu rumoju, kótaryž njedowólujo boki.',
 'import-error-invalid' => 'Bok "$1" se njeimportěrujo, dokulaž jogo mě jo njepłaśiwe.',
 'import-error-unserialize' => 'Wersija $2 boka "$1" njedajo se wótserializěrowaś. Wersija jo se za wužywanje wopśimjeśowego $3 k wěsći dała, kótaryž jo ako $4 serializěrowany.',
+'import-error-bad-location' => 'Wersija $2, kótaraž wužywa wopśimjeśowy model $3, njedajo se pód "$1" w toś tom wikiju składowaś, dokulaž model njepódpěra se na toś tom boku.',
 'import-options-wrong' => '{{PLURAL:$2|Wopacna opcija|Wopacnej opciji|Wopacne opcije|Wopacne opcije}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Pódany kórjenjowy bok jo njepłaśiwy.',
 'import-rootpage-nosubpage' => 'Mjenjowy rum "$1" kórjenjowego boka njedowólujo pódboki.',
@@ -3968,7 +4005,4 @@ Hować móžoš slědujucy jadnory formular wužywaś. Twój komentar pśidajo s
 'expand_templates_generate_rawhtml' => 'Gropny HTML pokazaś',
 'expand_templates_preview' => 'Pśeglěd',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
-'uploadinvalidxml' => 'XML w nagratej dataji njedajo se parsowaś.',
 );
index cf35434..bdc2bc8 100644 (file)
@@ -163,7 +163,6 @@ $messages = array(
 'vector-action-protect' => 'Tingoligai',
 'vector-action-undelete' => 'Kada pugaso',
 'vector-action-unprotect' => 'Alanai tingolig',
-'vector-simplesearch-preference' => 'Pasagao pogigihum bar noinsanangan (Pongulit tuntuduk nopo)',
 'vector-view-create' => 'Pomonsoi',
 'vector-view-edit' => 'Idito',
 'vector-view-history' => 'Intaai susuyan',
index 36ae3ea..16a1e62 100644 (file)
@@ -297,7 +297,6 @@ $messages = array(
 'lineno' => 'གྲལ་ཐིག་ $1:',
 'compareselectedversions' => 'སེལ་འཐུ་འབད་ཡོད་པའི་ཐོན་རིམ་ཚུ་ ག་བསྡུར་རྐྱབས།',
 'editundo' => 'འབད་བཤོལ།',
-'diff-multi' => '({{PLURAL:$1|བར་ནའི་བསྐྱར་ཞིབ་གཅིག་|$1 བར་ནའི་བསྐྱར་ཞིབ་ཚུ་}} མ་སྟོན་པས།)',
 
 # Search results
 'prevn' => 'ཧེ་མའི་ {{PLURAL:$1|$1}}',
@@ -319,7 +318,6 @@ $messages = array(
 'nchanges' => '$1 {{PLURAL:$1|བསྒྱུར་བཅོས་|བསྒྱུར་བཅོས་ཚུ}}',
 'recentchanges' => 'འཕྲལ་གྱི་བསྒྱུར་བཅོས',
 'recentchanges-feed-description' => 'འབྱུང་སའི་ནང་ ཝི་ཀི་ལུ་འཕྲལ་གྱི་བསྒྱུར་བཅོས་འབད་མི་འདི་ རྗེས་འཚོལ་འབད།',
-'rcnote' => "གཤམ་འཁོད་ཚུ་ $3 ཚུན་ཚོད་ཀྱི་ མཇུག་མཐའ {{PLURAL:$2|ཉིནམ་|'''$2''' ཉིནམ་}} གྱི་ {{PLURAL:$1|བསྒྱུར་བཅོས་ | '''$1''' བསྒྱུར་བཅོས་ཚུ་ }} ཨིན།",
 'rcnotefrom' => "འོག་གི་ཚུ་ '''$2''' (up to '''$1''' shown) ལས་ཚུར་གྱི་བསྒྱུར་བཅོས་ཨིན།",
 'rclistfrom' => '$1 ལས་ འགོ་བཟུང་སྟེ་ བསྒྱུར་བཅོས་གསརཔ་ཚུ་སྟོན་',
 'rcshowhideminor' => '$1 གལ་གནད་ཆུང་བའི་ཞུན་དག།',
index e3dbaab..191157f 100644 (file)
@@ -322,7 +322,6 @@ Zã [[Special:Search|nuwo didi le wiki sia dzi]] kpɔ na axa yeyeawo.',
 # Recent changes
 'recentchanges' => 'Tɔtrɔ yeyewo',
 'recentchanges-legend' => 'Tatiawo na tɔtrɔ yeyewo',
-'rcnote' => "Afisia wofia {{PLURAL:$1|tɔtrɔ '''1''' susue|tɔtrɔ '''$1''' susuewo}} le {{PLURAL:$2|ŋkeke si|ŋkeke '''$2''' mamleawo siwo}} vayi la me, le $5, $4.",
 'rcnotefrom' => "Tɔtrɔwo siwo wowɔ tso '''$2''' (wofia vaseɖe '''$1''') le afii.",
 'rclistfrom' => 'Fia tɔtrɔ yeyewo tso $1',
 'rcshowhideminor' => '$1 tɔtrɔ suewo',
@@ -421,7 +420,6 @@ Zã [[Special:Search|nuwo didi le wiki sia dzi]] kpɔ na axa yeyeawo.',
 # Watchlist
 'watch' => 'Le ŋku ɖe eŋu',
 'watchthispage' => 'Le ŋku ɖe axa sia ŋu',
-'wlnote' => "Afisia wofia {{PLURAL:$1|tɔtrɔ '''1''' mamlea|tɔtrɔ '''$1''' mamleawo}} le {{PLURAL:$2|gaƒoƒo mamlea si|gaƒoƒo '''$2''' mamleawo siwo}} vayi la me.",
 'wlshowlast' => 'Fia gaƒoƒo $1 ŋkeke $2 mamleawo. $3',
 
 # Delete
index 5536a42..7b4d80f 100644 (file)
@@ -131,7 +131,7 @@ $messages = array(
 'december-date' => 'Dicèmber $1',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Categoréia!Categoréi}}',
+'pagecategories' => '{{PLURAL:$1|Categoréia|Categoréi}}',
 'category_header' => "Pàgini 'd la categoréia $1",
 'subcategories' => 'Sòt-categoréi',
 'category-media-header' => "File int la categoréia ''$1''",
@@ -177,7 +177,6 @@ $messages = array(
 'vector-action-protect' => 'Prutēz',
 'vector-action-undelete' => 'Fà al recóper',
 'vector-action-unprotect' => 'Câmbia la prutesiòun',
-'vector-simplesearch-preference' => 'Drōva la bâra per la sērca pió fâcila (sōl per la skin Vector)',
 'vector-view-create' => 'Invèinta',
 'vector-view-edit' => 'Mudéfica',
 'vector-view-history' => 'Guêrda la stôria',
@@ -452,8 +451,6 @@ Guêrda che soquânti pàgini a prén vèdres incòra cme s'ét fós incòra col
 'gotaccountlink' => 'Và dèinter',
 'userlogin-resetlink' => "T'ét scurdê j elemèint p'r al tó ingrès?",
 'userlogin-resetpassword-link' => "T' ét scurdê la cêva 'd ingrès?",
-'helplogin-url' => "Help: Per l'ingrès",
-'userlogin-helplink' => "[[{{MediaWiki:helplogin-url}}|Ajót cun l' ingrès]]",
 'userlogin-loggedin' => "T'ét bèle coleghê {{GENDER:$1|$1}}. 
 Drōva al mōdul ché sòta cme un êter utèint.",
 'userlogin-createanother' => "Fà 'n' êtra utèinsa.",
@@ -529,6 +526,10 @@ Se l'inscrisiòun l'é stêda fâta per şbâli, es pōl scanşlêr sté mesâg.
 'loginlanguagelabel' => 'Léngva: $1',
 'suspicious-userlogout' => "La tó dmânda per destachêret l'é stēda rifiutêda perchè la sèmbra spidîda da un navigadōr ch' al funsiòuna mìa o da un proxy di caching.",
 'createacct-another-realname-tip' => "Druvêr al nòm vèira l'é 'na siēlta personêla; s' es pèinsa 'd ruvêrel al gnirâ uşê per dêr la paternitê di lavōr spidî.",
+'pt-login' => 'Và dèinter',
+'pt-login-button' => 'Và dèinter',
+'pt-createaccount' => 'Fà la tó inscrisiòun',
+'pt-userlogout' => 'Và fōra',
 
 # Email sending
 'php-mail-error-unknown' => 'Erōr mìa cngusû int la funsiòun PHP mail().',
@@ -537,7 +538,7 @@ Se l'inscrisiòun l'é stêda fâta per şbâli, es pōl scanşlêr sté mesâg.
 
 # Change password dialog
 'changepassword' => "Câmbia la cêva 'd ingrès",
-'resetpass_announce' => "L'ingrès l'é stê fâ cun un côdis pruvişôri, spidî cun la pôsta eletrônica. Per finîr l'ingrès l'é necesâri impustêr 'na nōva cêva 'd ingrès.",
+'resetpass_announce' => "Per finîr l'ingrès, l'é necesâri impustêr 'na nōva cêva 'd ingrès.",
 'resetpass_header' => "Câmbia la cêva 'd ingrès ed l'inscrisiòun.",
 'oldpassword' => "Cêva 'd ingès vècia:",
 'newpassword' => "Nōva cêva 'd ingrès:",
@@ -551,8 +552,12 @@ Se l'inscrisiòun l'é stêda fâta per şbâli, es pōl scanşlêr sté mesâg.
 'resetpass-submit-cancel' => 'Scanşèla',
 'resetpass-wrong-oldpass' => "Cêva 'd ingrès pruvişôria o còla 'd adès mìa vâlida.
 La cêva 'd ingrès la pré èser stêda bèle cambiêda, opór n'in pré èser stê dmandê 'na nōva pruvişôria.",
+'resetpass-recycled' => "Mèt dèinter 'na cêva 'd ingrès divêrsa da còla 'd adès.",
+'resetpass-temp-emailed' => "L'ingrès l'é stê fât cun un côdis pruvişôri. Per finîr la registrasiòun, l'é necesâri impustêr 'na nōva cêva 'd ingrès ché:",
 'resetpass-temp-password' => "Cêva 'd ingrès pruvişôria:",
 'resetpass-abort-generic' => "La mudéfica 'd la cêva 'd ingrès l'é stêda fermêda da un şlungamèint.",
+'resetpass-expired' => "La cêva 'd ingrès l'é scadûda. Mèt dèinter 'na cêva 'd ingrès nōva per fêr l'ingrès.",
+'resetpass-expired-soft' => "La tó cêva 'd ingrès l'é scadûda. T'é perghê ed siēlier 'na nōva o clichêr insém a \"{{int:resetpass-submit-cancel}}\" per turnêrla a mèter dèinter in sègvit.",
 
 # Special:PasswordReset
 'passwordreset' => "Câmbia la cêva 'd ingrès",
@@ -605,6 +610,7 @@ Cêva 'd ingrès pruvişôria: $2",
 'resettokens-text' => "Ché 't pō turnêr a impustêr al cêvi ch'ét permèten l'ingrès a precîşi infurmasiòun privêdi lighêdi a la tó utèinsa. Ét duvrés fêrel se per chêş ét j ê spartîdi cun quelchidûn o se al j infurmasiòun ed la tó utèinsa în  in perécol.",
 'resettokens-no-tokens' => "An gh'é mìa di token da turnêr a impustêr.",
 'resettokens-legend' => "Tōrna 'd impustêr la cêva",
+'resettokens-tokens' => ' Token:',
 'resettokens-token-label' => "$1 (valōr 'd adèsa: $2)",
 'resettokens-watchlist-token' => "Token p'r al feed web (Atom/RSS) dal [[Special:Watchlist|mudéfichi al pàgini ch'ét tîn sòt' ôc]]",
 'resettokens-done' => 'Token turnê a impustêr.',
@@ -640,20 +646,94 @@ Cêva 'd ingrès pruvişôria: $2",
 'showdiff' => 'Guêrda i cambiamèint',
 'anoneditwarning' => "'''Atensiòun:''' Ingrès mìa fât. Al tó indirés IP al srà sgnê int la stòria ed cla pàgina chè.",
 'anonpreviewwarning' => "\"An n'é mìa stê fât l'ingrès. Mèinter es sêlva la pàgina, l'indirés IP al srà sgnê int la stòria 'd la pàgina.\"",
+'missingsummary' => "'''Atensiòun:''' an n'é mìa stê precişê al mutîv de sté mudéfica. S'es tōrna a clichêr insém a \"{{int:savearticle}}\" la mudéfica la gnirà salvêda cun al mutîv vōd.",
+'missingcommenttext' => 'Scréver un cumèint ché sòta.',
+'missingcommentheader' => "'''Atensiòun:''' an n'é mìa stê precişê al mutîv/al tétol de sté mudéfica. S'es tōrna a clichêr insém a \"{{int:savearticle}}\" la mudéfica la gnirà salvêda sèinsa tétol.",
+'summary-preview' => 'Guêrda préma sûnt:',
+'subject-preview' => 'Guêrda préma argumèint/tétol:',
 'blockedtitle' => 'Utèint bluchê',
+'blockedtext' => " '''Al tō nòm utèint o indirés IP l'é stê bluchê.'''
+
+Al blôch l'é stê fât da $1. Al mutîv dal blôch l'é còst:  ''$2''.
+
+*Inési dal blôch: $8
+*Scadèinsa dal blôch: $6
+*Intervâl ed blôch: $7
+
+S' ét vō, l'é pusébil mètres in cuntât cun $1 o 'n êter [[{{MediaWiki:Grouppage-sysop}}|aministradōr]] per discóter dal blôch.
+
+Guêrda che la funsiòun 'Scrév a l'utèint' an n'é mìa in ôvra s' an n'é mìa stê registrtê un indirés ed pôsta eletrônica vâlid int al tō [[Special:Preferences| preferèinsi]] o se sté funsiòun l'é stêda bluchêda. L'indirés IP 'd adèsa l'é $3, al nóme ID dal blôch l'é #$5. T'é perghê ed precişêr tót j elemèint ed préma per ògni dmânda de spiegasiòun",
+'autoblockedtext' => "Cl'indirés IP ché l'è stê bluchê in avtomâtich perché spartî cun 'n êter utèint, bluchê ânca ló da $1. Al mutîv dal blôch l'é còst:
+
+''$2''
+*Inési dal blôch: $8 
+*Scadèinsa dal blôch: $6 
+*Intervâl ed blôch: $7
+S' ét vō, l'é pusébil mètres in cuntât cun $1 o 'n êter [[{{MediaWiki:Grouppage-sysop}}|aministradōr]] per dmandêr spiegasiòun insém al blôch. Guêrda che la funsiòun 'Scrév a l'utèint' an n'é mìa in ôvra s' an n'é mìa stê registrtê un indirés ed pôsta eletrônica vâlid int al tō [[Special:Preferences| preferèinsi]] e, in tót al manēri, se int al tachêr al blôch, sté funsiòun l'é stêda bluchêda. L'indirés IP 'd adèsa l'é $3, al nóme ID dal blôch l'é #$5. T'é perghê ed precişêr tót j elemèint ed préma per ògni dmânda de spiegasiòun",
+'blockednoreason' => 'nisûn mutîv sgnê',
+'whitelistedittext' => 'Per mudifichêr al pàgini è necesâri $1.',
+'confirmedittext' => "Per avèir al permès ed mudufichêr dal pàgini l'è necesâri cunfermêr al tó indirés ed pôsta eletrônica.
+Per impustêr e cunfermêr l'indirés dervîres dal [[Special:Preferences|preferèinsi]].",
+'nosuchsectiontitle' => 'Impusébil catêr la sesiòun',
+'nosuchsectiontext' => "A  t' é pruvê 'd mudifichêr 'na sesiòun ch' l' an gh'è mìa. La pré èser stêda spustêda e scanşlêda mèinter t'ēr adrē vèder la pàgina.",
+'loginreqtitle' => 'Ingrès e-dmandê',
+'loginreqlink' => "fêr l'ingrès",
+'loginreqpagetext' => 'Per vèder dal j êtri pàgini è necesâri $1.',
+'accmailtitle' => "Cêva 'd ingrès spidîda.",
+'accmailtext' => "'Na cêva 'd ingrés l'è stêda fâta a chêş per [[User talk:$1|$1]] e l'è stêda spidîda a $2. Cla cêva 'd ingrès ché la pōl èser cambiêda int la pàgina per ''[[Special:ChangePassword|cambiêr la cêva 'd ingrès]]'' subét dôp avèir fât l'ingrès.",
 'newarticle' => '(Nōv)',
 'newarticletext' => "Al colegamèint apèina fât al cumbîna cun 'na pàgina ch' an n'é mìa incòra stêda fâta. S'ét vō fêr la pàgina adès, l'é asê cumincêr a scréver al tèst int la caşèla ché sòt (per vedèr infurmasiòun pió precîşi guêrda la [[{{MediaWiki:Helppage}}|pàgina 'd ajót]]). Se al colegamèint  l'é stê avêrt per erōr, l'é asê clichêr al pulsânt \"Indrē\" dal tó navigadōr.",
+'anontalkpagetext' => "----'' Còsta l'è la pàgina 'd discusiòun ed 'n utèint sèinsa nòm, ch' an n' à mìa incòra fât 'n' utèinsa o in tót al manēri an n'è mìa drē druvêrla. Per arcgnòsrel l'è dòunca necesâri druvê al só indirés IP. J indirés IP a pōlen èser spartî cun êter utèint. Se t'è un utèint sèinsa nòm e 't pèins che i cumèint in cla pàgina ché an riguêrden mìa tè, [[Special:UserLogin/signup|fa 'n' utèinsa nōva]] o [[Special:UserLogin|vîn dèinter cun còla ch' ét gh'ê bèle]] per schivşêr, in futûr,  'd èser cunfûş cun 'd j êter utèint sèinsa nòm.''",
 'noarticletext' => 'In cól mumèint ché la pàgina serchêda l\'é vōda. L\'é pusébil [[Special:Search/{{PAGENAME}}|serchêr sté tétol]] int al j êtri pàgini dal sît, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serchêr int i regéster coleghê] opór  [{{fullurl:{{FULLPAGENAME}}|action=edit}} mudifichêr la pàgina adèsa]</span>.',
 'noarticletext-nopermission' => "In cól mumèint ché la pàgina serchêda l'é vōda. L'é pusébil [[Special:Search/{{PAGENAME}}|serchêr sté tétol]] int al j êtri pàgini dal sît o<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serchêr int i regéster coleghê] <span>, mó an 't gh'ê mìa al permès ed fêr cla pàgina ché.",
+'missing-revision' => "La revişiòun #\$1 'd la pagina \"{{PAGENAME}}\" l' an gh'è mìa. Còst, ed sôlit, a sucēd mèint'r as va drē a 'n colegamèint a 'na pàgina scanşlêda, in 'na stòria, di lavōr fât, mìa arnuvêda. I particulêr a 's pōlen catêr int al [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} regéster dal scanşladûri].",
+'userpage-userdoesnotexist' => 'L\'inscrisiòun "<nowiki>$1</nowiki>" la cumbîna mìa cun \'n utèint registrê. Ét sicûr ed vrèir fêr o mudifichêr cla pàgina ché.',
+'userpage-userdoesnotexist-view' => 'L\'utèin "$1" an n\'à mìa fât l\'inscrisiòun.',
+'blocked-notice-logextract' => "Cl'utèint ché adèsa l'é bluchê. 
+Per infurmasiòun l'ûltem elemèint dal regéster di blôch l'é scrét ché sòta:",
+'clearyourcache' => "'''Nôta:''' dôpa vèir salvê a pré èser necesâri pulîr la memôria pruvişôria dal navigadôr per vèder i cambiamèint.
+*'''Firefox / Safari''': tgnîr cucê al tâst dal lètri grândi e clichêr insém a \"Ricarica\" opór cucêr i tâst ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' insém a un Mac)
+*'''Google Chrome''': cucêr i tâst ''Ctrl-Shift-R'' (''⌘-Shift-R'' insém a un Mac) 
+*'''Internet Explorer''': tgnîr cucê al tâst ''Ctrl'' mènter es fà cléch insém a ''Refresh'', opór cucêr ''Ctrl-F5'' 
+*'''Opera''': svudêr dal tót la memôria pruvişôria 'd la lésta ''Strumenti → Preferenze''",
+'usercssyoucanpreview' => "'''Cunséli:''' drōva al tâst 'Guêrda préma' per pruvêr al tó nōv CSS préma 'd salvêrel'''",
+'userjsyoucanpreview' => "'''Cunséli:''' drōva al tâst 'Guêrda préma' per pruvêr al tó nōv  JavaScript préma 'd salvêrel'''",
+'usercsspreview' => "'''Còsta l'é sōl 'na guardêda al tó CSS préma 'd salvêr al mudéfichi ch'în stêdi fâti.Ricôrdet che al mudéfichi în mìa incòra stêdi salvêdi!'''",
+'userjspreview' => "'''Còsta l'é sōl 'na guardêda préma 'd salvêr al mudéfichi per pruvêr al tó JavaScript personêl. Ricôrdet che al mudéfichi în mìa incòra stêdi salvêdi!'''",
+'sitecsspreview' => "'''Còsta l'é sōl 'na guardêda 'l CSS préma 'd salvêrel. Ricôrdet che al mudéfichi în mìa incòra stêdi salvêdi!'''",
+'sitejspreview' => "'''Còsta l'é sōl 'na guardêda préma per pruvêr al JavaScript. Ricôrdet che al mudéfichi în mìa incòra stêdi salvêdi!'''",
+'userinvalidcssjstitle' => "'''Atensiòun:''' An gh'é nisóna skin cun al nòm \"\$1\". As fà nutêr che al pàgini per i .css e .js personêl a gh'àn la préma lètra dal tétol in céch, per eşèimpi {{ns:user}}:Eşèimpi/vector.css e non {{ns:user}}:Eşèimpi/Vector.css.",
+'updated' => '(Arnuvê)',
 'note' => "'''Nôta:'''",
 'previewnote' => "'''Ricôrdet che còsta l'é sōl 'na guardêda préma 'd salvêr.'''
 Al tō mudéfichi în MIA incòra stêdi salvêdi.",
+'continue-editing' => "Và int la zôna 'd mudéfica",
+'previewconflict' => "La vésta la cumbîna cun al tèst int la zôna 'd mudéfica tèst ché d'ed sōver e l'é cme la srà la pàgina s'ed decéd ed clichêr insém a \"Sêlva la pàgina\" in cól mumèint ché.",
+'session_fail_preview' => "'''An n'é mìa stê pusébil registrêr la mudéfica perchè a s' în pêrsi al j infurmasiòun relatîvi a la sesiòun. Tōrna a pruvêr. Se al prublēma al cunténva, a 's pōl pruvêr [[Special:UserLogout|ed coleghêres]] e fêr un ingrès nōv.'''",
+'session_fail_preview_html' => "'''An n'é mìa stê pusébil registrêr la mudéfica perchè în andêdi persi al j infurmasiòun relatîvi a la sesiòun.'''
+
+''Pôst che in {{SITENAME}} a gh'é al permès ed druvêr l' HTML sèinsa lémit, an 's pōl mìa guardêr préma la pàgina mudifichêda; a 's trâta ed 'n'amzûra 'd sicurèsa cûntra j atâch JavaScript.''
+
+''' Se còst l'é un tentatîv legétim ed mudéfica, pruvêr incòra. Se al prublēma l'armâgn, a 's pōl pruvêr a [[Special:UserLogout|sarêr al colegamèint]] e fêr un nōv ingrès.'''",
+'token_suffix_mismatch' => "'''La mudéfica an n'é mìa stêda salvêda perchè al ''client'' l'à fât vèder ed gestîr in môd e-sbaliê i carâter di pûn e dal virgûli int al ''token'' lighê a la mudéfica. Per schivşêr di pusébil erōr int al tèst ed la pàgina, è stê rifiutê tóta la mudéfica. Dla vôlti cla situasiòun ché la pōl sucēder quând a vînen druvê soquânt servési ''proxy'' sèinsa nòm via internèt che preşèinten di ''bug''.'''",
+'edit_form_incomplete' => "'''Soquânti pêrt dal môdul ed mudéfica în mìa rivêdi al ''server''; controlêr che al mudéfichi sién intâti e turnêr a pruvêr'''",
 'editing' => 'Mudéfica ed $1',
+'creating' => "T'é drē fêr $1",
 'editingsection' => 'Mudéfica ed $1 (sesiòun)',
 'editingcomment' => 'Mudéfica e $1 (sesiòun nōva)',
 'editconflict' => "Cuntrâst 'd edisiòun só $1",
+'explainconflict' => "Un êter utèint l'à salvê 'na nōva versiòun ed la pàgina mèinter t'ēr adrē fêr dal mudéfichi. Int la caşèla 'd mudéfica ché 'd sōver a gh'é al tèst ed la pàgina che adès l'é in lénia, acsé cme l'é stêda salvêda da cl'êter utèint. La versiòun cun al tō mudéfichi invēci l'é int la caşèla dal mudéfichi ché sòta. S' ét vō cunfermêri, ét dēv purtêr al tō mudéfichi int al tèst che gh'é bèle (caşèla ché 'd sōver). Se té schés al ptòun '{{int:savearticle}}', a gnirà salvê '''sōl''' al tèst dèinter a la caşèla 'd mudéfica ché 'd sōver.",
 'yourtext' => 'Al tó tèst',
+'storedversion' => 'La versiòun in memôria',
+'nonunicodebrowser' => "'''Atèinti: a s'é drē druvêr un navigadōr ch' al và mìa d' acôrdi cun i carâter ''Unicode''. Per permèter la mudéfica dal pàgini sèinsa fêr d' incunveniĵnt, int la caşèla ed mudéfica i carâter mia ASCII a vînen fât vèder cme côdis eşadecimêl.'''",
+'editingold' => "<strong>Atèinti: a s'é drē mudifichêr 'na versiòun mìa arnuvêda 'd la pàgina.</strong> 
+S'es pèinsa ed salvêrla, tót i cambiamèint fât dōp cla mudéfica ché andrân pêrs.",
 'yourdiff' => 'Diferèinsi',
+'copyrightwarning' => "Per piaşèir tîn cûnt che tót al colaborasiòun a {{SITENAME}} a vînen cunsidrêdi publichêdi sòta la licèinsa $2 (per i particulêr guêrda $1). S' an 't vō mìa che i tō tèst a pôsen èser cambiê e turnê a publichêr da tót sèinsa lémit, an publichêri mìa ché.<br /> In pió, se 't  i póblich ché, a 't dichiâr, sòta la tó responsabilitê, che còl ch' è stê scrét a 't l'ê scrét té personalmèint opór l'é ste cupiê da documèint sèinsa ch' al sìa quacê da nisûn dirét 'd autōr. <strong> Ché insém an pubblichêr mìa materiêl quacê da dirét 'd autōr sèinsa autorişâsiòun! </strong>",
+'copyrightwarning2' => "Per piaşèir tîn cûnt che tót al colaborasiòun a {{SITENAME}} a pōlen èser mudifichê, arversê o scanşlê da êtra gînta cla dà 'na mân. S' an 't vō mìa che i tō tèst a pôsen èser cambiê alōra an publichêri mìa ché.<br />In pió, se 't  i póblich ché, a 't dichiâr, sòta la tó responsabilitê, che còl ch' è stê scrét a 't l'ê scrét té personalmèint opór l'é ste cupiê da documèint sèinsa ch' al sìa quacê da nisûn dirét 'd autōr (per i particulêr guêrda $1). <strong> Ché insém an pubblichêr mìa materiêl quacê da dirét 'd autōr sèinsa autorişâsiòun! </strong>",
+'longpageerror' => "<strong> Erōr: al tèst spidî l'é lòngh {{PLURAL:$1|1|$1}} kilobyte, ch'l'é pió grôs ed l'amzûra mâsima permésa ({{PLURAL:$2|1|$2}} kilobyte). </strong> Al tèst al pôl mìa èser salvê.",
 'templatesused' => '{{PLURAL:$1|Mudèl druvê|Mudē druvê}} in cla pàgina ché:',
 'template-protected' => '(prutèt)',
 'template-semiprotected' => '(mèz-prutèt)',
@@ -723,7 +803,7 @@ Per cumditê còst l'é l'èlèinch dal scanşladûri e di spustamèint relatîv
 'viewprevnext' => 'Guêrda ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''Int al sît a gh'é 'na pàgina cun al nòm [[:$1]].'''
 {{PLURAL:$2|0=|Guêrda ânca chiêter ch'în stê catê.}}",
-'searchmenu-new' => "'''Şvilópa la pàgina \"[[:\$1]]\" insém a cól sît ché! '''{{PLURAL:\$2|0=|Guêrda ânch i rişultêt catê}}.",
+'searchmenu-new' => '<strong>Şvilópa la pàgina "[[:$1]]" insém a cól sît ché!</strong> {{PLURAL:$2|0=|Guêrda ânch la pàgina che t\'é serchê|Guêrda ânch i rişultêt catê}}.',
 'searchprofile-articles' => "Pàgini 'd j argumèint",
 'searchprofile-project' => "Pàgini 'd ajót e relatîvi al prugèt.",
 'searchprofile-images' => 'Multimèdia',
@@ -831,7 +911,7 @@ Per cumditê còst l'é l'èlèinch dal scanşladûri e di spustamèint relatîv
 'recentchanges-label-minor' => "Còsta l'é 'na mudéfica céca",
 'recentchanges-label-bot' => "Cla mudéfica ché l'é stêda fâta da un bot.",
 'recentchanges-label-unpatrolled' => "Cla mudéfica ché an n'é mìa incòra stêda verifichêda.",
-'rcnotefrom' => "Ché sòt a gh'é la lésta dal mudéfichi fâti a partîr da '''$2''' (fîn a '''$1''').",
+'rcnotefrom' => "Ché sòt a gh'é la lésta dal mudéfichi fâti a partîr da <strong>$2</strong>(fîn a <strong>$1</strong>).",
 'rclistfrom' => 'Fà vèder al mudéfichi fâti a partîr da $1.',
 'rcshowhideminor' => '$1 al mudéfichi céchi',
 'rcshowhidebots' => '$1 i bot',
index 2398c4b..95a057a 100644 (file)
@@ -11,6 +11,7 @@
  * @author Aitolos
  * @author Assassingr
  * @author Astralnet
+ * @author Axil
  * @author Azimout
  * @author Badseed
  * @author Chomwitt
@@ -376,7 +377,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Απόκρυψη ελεγμένων επεξεργασιών στις πρόσφατες αλλαγές',
 'tog-newpageshidepatrolled' => 'Απόκρυψη ελεγμένων σελίδων από τον κατάλογο νέων σελίδων',
 'tog-extendwatchlist' => 'Επέκταση της λίστας παρακολούθησης ώστε να δείχνει όλες τις αλλαγές, όχι μόνο τις πιο πρόσφατες',
-'tog-usenewrc' => 'Ομαδοποίηση αλλαγών ανά σελίδα στις πρόσφατες αλλαγές και στη λίστα παρακολούθησης (απαιτεί JavaScript)',
+'tog-usenewrc' => 'Ομαδοποίηση αλλαγών ανά σελίδα στις πρόσφατες αλλαγές και στη λίστα παρακολούθησης',
 'tog-numberheadings' => 'Αυτόματη αρίθμηση επικεφαλίδων',
 'tog-showtoolbar' => 'Εμφάνιση μπάρας εργαλείων επεξεργασίας',
 'tog-editondblclick' => 'Επεξεργασία σελίδων με διπλό κλικ',
@@ -396,7 +397,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Εμφάνιση του αριθμού των συνδεδεμένων χρηστών',
 'tog-oldsig' => 'Υπάρχουσα υπογραφή:',
 'tog-fancysig' => 'Μεταχείριση υπογραφής ως κώδικα wiki (χωρίς αυτόματο σύνδεσμο)',
-'tog-uselivepreview' => 'Χρήση ζωντανής προεπισκόπησης (απαιτεί JavaScript) (πειραματικό)',
+'tog-uselivepreview' => 'Χρήση ζωντανής προεπισκόπησης (πειραματικό)',
 'tog-forceeditsummary' => 'Να ειδοποιούμαι κατά την εισαγωγή κενής σύνοψης επεξεργασίας',
 'tog-watchlisthideown' => 'Απόκρυψη των επεξεργασιών μου από τη λίστα παρακολούθησης',
 'tog-watchlisthidebots' => 'Απόκρυψη των επεξεργασιών των bot από τη λίστα παρακολούθησης',
@@ -407,7 +408,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Να μου αποστέλλονται αντίγραφα των μηνυμάτων ηλεκτρονικού ταχυδρομείου που στέλνω σε άλλους χρήστες',
 'tog-diffonly' => 'Να μην εμφανίζεται περιεχόμενο σελίδων κάτω από τις διαφορές των εκδόσεων',
 'tog-showhiddencats' => 'Εμφάνιση κρυμμένων κατηγοριών',
-'tog-noconvertlink' => 'Απενεργοποίησε την μετατροπή τίτλου συνδέσμου',
 'tog-norollbackdiff' => 'Παράλειψη διαφοράς μετά την εκτέλεση επαναφοράς',
 'tog-useeditwarning' => 'Προειδοποίηση όταν εγκαταλείπω μία σελίδα επεξεργασίας χωρίς να έχω πρώτα αποθηκεύσει τις αλλαγές',
 'tog-prefershttps' => 'Να γίνεται πάντα χρήση ασφαλούς σύνδεσης όταν ο χρήστης είναι συνδεδεμένος',
@@ -534,7 +534,6 @@ $messages = array(
 'vector-action-protect' => 'Προστασία',
 'vector-action-undelete' => 'Επαναφορά',
 'vector-action-unprotect' => 'Αλλαγή προστασίας',
-'vector-simplesearch-preference' => 'Ενεργοποίηση απλοποιημένης μπάρας αναζήτησης (μόνον για skin Vector)',
 'vector-view-create' => 'Δημιουργία',
 'vector-view-edit' => 'Επεξεργασία',
 'vector-view-history' => 'Προβολή ιστορικού',
@@ -613,7 +612,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'Σχετικά με {{SITENAME}}',
 'aboutpage' => 'Project:Σχετικά',
-'copyright' => 'Το περιεχόμενο είναι διαθέσιμο σύμφωνα με την $1.',
+'copyright' => 'Το περιεχόμενο είναι διαθέσιμο σύμφωνα με την $1 εκτός αν αναφέρεται διαφορετικά.',
 'copyrightpage' => '{{ns:project}}:Πνευματικά Δικαιώματα',
 'currentevents' => 'Τρέχοντα γεγονότα',
 'currentevents-url' => 'Project:Τρέχοντα γεγονότα',
@@ -641,8 +640,8 @@ $1',
 'youhavenewmessages' => 'Έχετε $1 ($2).',
 'youhavenewmessagesfromusers' => 'Έχετε $1 από {{PLURAL:$3|έναν άλλο χρήστη|$3 χρήστες}} ($2).',
 'youhavenewmessagesmanyusers' => 'Έχετε $1 από πολλούς χρήστες ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|ένα νέο μήνυμα|νέα μηνύματα}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|τελευταία αλλαγή|τελευταίες αλλαγές}}',
+'newmessageslinkplural' => '{{PLURAL:$1|ένα νέο μήνυμα|999=νέα μηνύματα}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|τελευταία αλλαγή|999=τελευταίες αλλαγές}}',
 'youhavenewmessagesmulti' => 'Έχετε νέα μηνύματα στο $1',
 'editsection' => 'επεξεργασία',
 'editold' => 'επεξεργασία',
@@ -663,8 +662,8 @@ $1',
 'feed-unavailable' => 'Οι ροές δεδομένων δεν είναι διαθέσιμες',
 'site-rss-feed' => '$1 ροή RSS',
 'site-atom-feed' => '$1 ροή Atom',
-'page-rss-feed' => '«$1» ροή RSS',
-'page-atom-feed' => '«$1» ροή Atom',
+'page-rss-feed' => 'Ροή RSS «$1»',
+'page-atom-feed' => 'Ροή Atom «$1»',
 'red-link-title' => '$1 (η σελίδα δεν υπάρχει)',
 'sort-descending' => 'Φθίνουσα ταξινόμηση',
 'sort-ascending' => 'Αύξουσα ταξινόμηση',
@@ -694,6 +693,11 @@ $1',
 # General errors
 'error' => 'Σφάλμα',
 'databaseerror' => 'Σφάλμα στη βάση δεδομένων',
+'databaseerror-text' => 'Παρουσιάστηκε ένα σφάλμα ερωτήματος βάσης δεδομένων.
+Αυτό μπορεί να υποδεικνύει ένα σφάλμα στο λογισμικό.',
+'databaseerror-textcl' => 'Παρουσιάστηκε ένα σφάλμα ερωτήματος βάσης δεδομένων.',
+'databaseerror-query' => 'Ερώτημα: $1',
+'databaseerror-function' => 'Λειτουργία: $1',
 'databaseerror-error' => 'Σφάλμα: $1',
 'laggedslavemode' => "'''Προειδοποίηση:''' Η σελίδα μπορεί να μην περιέχει πρόσφατες ενημερώσεις.",
 'readonly' => 'Κλειδωμένη βάση δεδομένων',
@@ -701,7 +705,7 @@ $1',
 'readonlytext' => 'Η βάση δεδομένων είναι επί του παρόντος κλειδωμένη απέναντι σε νέες καταχωρίσεις και άλλες τροποποιήσεις, πιθανότατα λόγω συντήρησης ρουτίνας, μετά την οποία θα επανέλθει σε κανονική λειτουργία.  
 
 Ο διαχειριστής που την κλείδωσε έδωσε την ακόλουθη εξήγηση: $1',
-'missing-article' => 'Η βάση δεδομένων δεν βρήκε κείμενο μιας σελίδας που θα έπρεπε να βρεθεί, με όνομα "$1" $2.
+'missing-article' => 'Η βάση δεδομένων δεν βρήκε κείμενο μιας σελίδας που θα έπρεπε να βρεθεί, με όνομα «$1» $2.
 
 Αυτό συνήθως προκαλείται ακολουθώντας ένα σύνδεσμο "διαφοράς" ή σύνδεσμο προς ιστορικό μιας σελίδας που έχει διαγραφεί.
 
@@ -712,20 +716,20 @@ $1',
 'readonly_lag' => 'Η βάση δεδομένων έχει κλειδωθεί αυτόματα για να μπορέσουν οι επιμέρους servers των αντιγράφων της βάσης δεδομένων (slaves) να καλύψουν τη διαφορά με τον κεντρικό server του πρωτοτύπου της βάσης (master).',
 'internalerror' => 'Εσωτερικό σφάλμα',
 'internalerror_info' => 'Εσωτερικό σφάλμα: $1',
-'fileappenderrorread' => 'Δεν ήταν δυνατή η ανάγνωση του "$1" κατά τη διάρκεια της επισύναψης.',
-'fileappenderror' => 'Δεν ήταν δυνατή η προσάρτηση του αρχείου "$1" στο "$2".',
-'filecopyerror' => 'Δεν ήταν δυνατή η αντιγραφή του αρχείου "$1" στο "$2".',
-'filerenameerror' => 'Δεν είναι δυνατή η μετονομασία του αρχείου "$1" σε "$2".',
-'filedeleteerror' => 'Δεν ήταν δυνατή η διαγραφή του αρχείου "$1".',
-'directorycreateerror' => 'Δεν μπορούσε να δημιουργηθεί η κατηγορία "$1".',
-'filenotfound' => 'Δεν είναι δυνατή η ανεύρεση του αρχείου "$1".',
-'fileexistserror' => 'Αδύνατον να εγγραφεί στο αρχείο "$1": το αρχείο υπάρχει',
-'unexpected' => 'Μη προσδοκώμενη τιμή: "$1"="$2"',
+'fileappenderrorread' => 'Δεν ήταν δυνατή η ανάγνωση του «$1» κατά τη διάρκεια της επισύναψης.',
+'fileappenderror' => 'Δεν ήταν δυνατή η προσάρτηση του αρχείου «$1» στο «$2».',
+'filecopyerror' => 'Δεν ήταν δυνατή η αντιγραφή του αρχείου «$1» στο «$2».',
+'filerenameerror' => 'Δεν είναι δυνατή η μετονομασία του αρχείου «$1» σε «$2».',
+'filedeleteerror' => 'Δεν ήταν δυνατή η διαγραφή του αρχείου «$1».',
+'directorycreateerror' => 'Δεν μπορούσε να δημιουργηθεί η κατηγορία «$1».',
+'filenotfound' => 'Δεν είναι δυνατή η ανεύρεση του αρχείου «$1».',
+'fileexistserror' => 'Αδύνατον να εγγραφεί στο αρχείο «$1»: το αρχείο υπάρχει',
+'unexpected' => 'Μη προσδοκώμενη τιμή: «$1»=«$2».',
 'formerror' => 'Σφάλμα: Δεν ήταν δυνατή η υποβολή της φόρμας!',
 'badarticleerror' => 'Η ενέργεια αυτή δεν μπορεί να εκτελεσθεί στη συγκεκριμένη σελίδα.',
 'cannotdelete' => 'Η σελίδα ή το αρχείο «$1» δεν μπόρεσε να διαγραφεί.
 Ενδεχομένως να έχει ήδη διαγραφεί από κάποιον άλλον.',
-'cannotdelete-title' => 'Αδύνατη η διαγραφή της σελίδας "$1"',
+'cannotdelete-title' => 'Αδύνατη η διαγραφή της σελίδας «$1»',
 'delete-hook-aborted' => 'Η επεξεργασία ματαιώθηκε από το άγκιστρο του συντακτικού αναλυτή.
 Δεν έδωσε εξήγηση.',
 'badtitle' => 'Ακατάλληλος τίτλος',
@@ -755,15 +759,16 @@ $2',
 'myprivateinfoprotected' => 'Δεν έχετε άδεια για να επεξεργαστείτε τα προσωπικά σας στοιχεία.',
 'mypreferencesprotected' => 'Δεν έχετε άδεια για να επεξεργαστείτε τις προτιμήσεις σας.',
 'ns-specialprotected' => 'Σελίδες στον τομέα {{ns:special}} δεν γίνεται να επεξεργαστούν.',
-'titleprotected' => "Αυτός ο τίτλος έχει προστατευθεί από την δημιουργία από τον [[User:$1|$1]].
-Ο λόγος που δίνεται είναι ''$2''.",
-'filereadonlyerror' => 'Δεν είναι δυνατή η τροποποίηση του αρχείου " $1 " επειδή το αποθετήριο αρχείων " $2 " είναι σε κατάσταση λειτουργίας μόνο για ανάγνωση.
+'titleprotected' => 'Αυτός ο τίτλος έχει προστατευθεί από την δημιουργία από τον [[User:$1|$1]].
+Ο λόγος που δίνεται είναι «$2».',
+'filereadonlyerror' => 'Δεν είναι δυνατή η τροποποίηση του αρχείου «$1» επειδή το αποθετήριο αρχείων «$2» είναι σε κατάσταση λειτουργίας μόνο για ανάγνωση.
 
-Ο διαχειριστής που το κλείδωσε προσφέρει αυτή την αιτιολόγηση: " $3 ".',
+Ο διαχειριστής που το κλείδωσε προσφέρει αυτή την αιτιολόγηση: «$3».',
 'invalidtitle-knownnamespace' => 'Μη έγκυρος τίτλος με χώρο ονομάτων «$2» και κείμενο «$3»',
 'invalidtitle-unknownnamespace' => 'Μη έγκυρος τίτλος με άγνωστο αριθμό χώρου ονομάτων $1 και κείμενο «$2»',
 'exception-nologin' => 'Δεν έχετε συνδεθεί.',
-'exception-nologin-text' => 'Αυτή η σελίδα ή η ενέργεια απαιτεί να είστε {{GENDER:|συνδεμένος|συνδεμένη}} στο wiki.',
+'exception-nologin-text' => 'Παρακαλούμε να [[Special:Userlogin|συνδεθείτε]] για να μπορείτε να αποκτήσετε πρόσβαση σε αυτήν τη σελίδα ή την ενέργεια.',
+'exception-nologin-text-manual' => 'Παρακαλούμε $1 για να μπορείτε να έχετε πρόσβαση σε αυτή τη σελίδα ή ενέργεια.',
 
 # Virus scanner
 'virus-badscanner' => "Λάθος ρύθμιση: άγνωστος ανιχνευτής ιών: ''$1''",
@@ -811,8 +816,9 @@ $2',
 'gotaccountlink' => 'Είσοδος',
 'userlogin-resetlink' => 'Ξεχάσατε τα στοιχεία εισόδου σας;',
 'userlogin-resetpassword-link' => 'Ξεχάσατε τον κωδικό πρόσβασης;',
-'helplogin-url' => 'Help:Σύνδεση',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Βοήθεια για τη σύνδεσή σας]]',
+'userlogin-loggedin' => 'Είστε ήδη {{GENDER:$1|συνδεδεμένος|συνδεδεμένη}} ως $1.
+Χρησιμοποιήστε την παρακάτω φόρμα για να συνδεθείτε ως άλλος χρήστης.',
+'userlogin-createanother' => 'Δημιουργήσετε έναν άλλο λογαριασμό',
 'createacct-join' => 'Εισάγετε τα στοιχεία σας παρακάτω.',
 'createacct-another-join' => 'Εισάγετε τα στοιχεία του νέου λογαριασμού παρακάτω.',
 'createacct-emailrequired' => 'Διεύθυνση ηλεκτρονικού ταχυδρομείου',
@@ -856,7 +862,7 @@ $2',
 'passwordtooshort' => 'Οι κωδικοί πρέπει να περιέχουν τουλάχιστον {{PLURAL:$1|1 χαρακτήρα|$1 χαρακτήρες}}.',
 'password-name-match' => 'Ο κωδικός σου θα πρέπει να είναι διαφορετικός από το όνομα χρήστη σου.',
 'password-login-forbidden' => 'Η χρήση αυτού του ονόματος χρήστη και συνθηματικού έχουν  απαγορευτεί.',
-'mailmypassword' => 'Î\91Ï\80οÏ\83Ï\84ολή Î½Î­Î¿Ï\85 ÎºÏ\89δικοÏ\8d Î¼Îµ Î·Î»ÎµÎºÏ\84Ï\81ονικÏ\8c Ï\84αÏ\87Ï\85δÏ\81ομείο',
+'mailmypassword' => 'Î\95Ï\80αναÏ\86οÏ\81ά ÎºÏ\89δικοÏ\8d',
 'passwordremindertitle' => 'Καινούργιος προσωρινός κωδικός για το {{SITENAME}}',
 'passwordremindertext' => 'Κάποιος (πιθανώς εσείς, από την διεύθυνση IP $1) ζήτησε να σας στείλουμε ένα νέο κωδικό πρόσβασης για τον ιστότοπο {{SITENAME}} ($4). Ο κωδικός πρόσβασης για το χρήστη "$2" είναι τώρα "$3". Αν το κάνατε εσείς, θα πρέπει να συνδεθείτε και να αλλάξετε τον κωδικό πρόσβασης σας τώρα. Ο προσωρινός σας κωδικός πρόσβασης θα λήξει σε {{PLURAL:$5|μια ημέρα|$5 ημέρες}}.
 
@@ -867,7 +873,8 @@ $2',
 Σας παρακαλούμε να ξανασυνδεθείτε μόλις τον λάβετε.',
 'blocked-mailpassword' => 'Η διεύθυνση IP σας είναι αποκλεισμένη από επεξεργασία, και έτσι
 δεν επιτρέπεται να χρησιμοποιήσει την λειτουργία ανάκτησης κωδικού πρόσβασης, για την αποφυγή κατάχρησης.',
-'eauthentsent' => 'Ένα μήνυμα επαλήθευσης έχει σταλεί στην ηλεκτρονική διεύθυνση που έχετε δηλώσει στο σύστημα. Πριν αρχίσει η αποστολή μηνυμάτων στη συγκεκριμένη διεύθυνση, πρέπει να ακολουθήσετε τις οδηγίες που βρίσκονται στο μήνυμα που σας έχει σταλεί για να επαληθεύσετε ότι η συγκεκριμένη ηλεκτρονική διεύθυνση ανήκει πραγματικά σε εσάς.',
+'eauthentsent' => 'Ένα μήνυμα επαλήθευσης έχει σταλεί στην ηλεκτρονική διεύθυνση που έχετε δηλώσει.
+Πριν αρχίσει η αποστολή μηνυμάτων στη συγκεκριμένη διεύθυνση, πρέπει να ακολουθήσετε τις οδηγίες που βρίσκονται στο μήνυμα που σας έχει σταλεί, για να επαληθεύσετε ότι η συγκεκριμένη ηλεκτρονική διεύθυνση ανήκει πραγματικά σε εσάς.',
 'throttled-mailpassword' => 'Ένα email επαναφοράς κωδικού έχει ήδη αποσταλεί, μέσα {{PLURAL:$1|στην τελευταία ώρα|στις τελευταίες $1 ώρες}}.
 Για την αποφυγή κατάχρησης, μόνο ένα email επαναφοράς κωδικού θα στέλνεται ανά {{PLURAL:$1|ώρα|$1 ώρες}}.',
 'mailerror' => 'Σφάλμα στην αποστολή του μηνύματος: $1',
@@ -903,7 +910,7 @@ $2',
 
 # Change password dialog
 'changepassword' => 'Αλλαγή κωδικού',
-'resetpass_announce' => 'ΣÏ\85νδεθήκαÏ\84ε Î¼Îµ Î­Î½Î± Ï\80Ï\81οÏ\83Ï\89Ï\81ινÏ\8c ÎºÏ\89δικÏ\8c, Ï\83Ï\84αλμένο Î¼Îµ e-mail. Î\93ια Î½Î± Î¿Î»Î¿ÎºÎ»Î·Ï\81Ï\8eÏ\83εÏ\84ε Ï\84ην Ï\83Ï\8dνδεÏ\83η, Ï\80Ï\81έÏ\80ει Î½Î± Ï\83Ï\84είλεÏ\84ε Î­Î½Î± Î½Î­Î¿ ÎºÏ\89δικÏ\8c ÎµÎ´Ï\8e:',
+'resetpass_announce' => 'Για να ολοκληρώσετε την σύνδεση, πρέπει να στείλετε ένα νέο κωδικό εδώ:',
 'resetpass_text' => '<!-- Προσθέστε κείμενο εδώ -->',
 'resetpass_header' => 'Αλλαγή κωδικού πρόσβασης',
 'oldpassword' => 'Παλιός κωδικός',
@@ -911,12 +918,15 @@ $2',
 'retypenew' => 'Πληκτρολογήστε ξανά το νέο κωδικό.',
 'resetpass_submit' => 'Δώστε κωδικό πρόσβασης και συνδεθείτε',
 'changepassword-success' => 'Ο κωδικός πρόσβασής σας άλλαξε επιτυχώς!',
+'changepassword-throttled' => 'Κάνατε πάρα πολλές πρόσφατες απόπειρες σύνδεσης.
+Παρακαλούμε περιμένετε $1 προτού ξαναδοκιμάσετε.',
 'resetpass_forbidden' => 'Οι κωδικοί πρόσβασης δεν μπορούν να αλλαχθούν',
 'resetpass-no-info' => 'Πρέπει να είστε συνδεδεμένος για να δείτε αυτήν την σελίδα απευθείας',
 'resetpass-submit-loggedin' => 'Αλλαγή κωδικού',
 'resetpass-submit-cancel' => 'Ακύρωση',
 'resetpass-wrong-oldpass' => 'Λάθος προσωρινός ή κανονικός κωδικός.
 Μπορεί να έχετε ήδη αλλάξει επιτυχώς τον κωδικό σας ή να έχετε ζητήσει έναν νέο προσωρινό κωδικό.',
+'resetpass-recycled' => 'Παρακαλούμε επαναφέρετε τον κωδικό πρόσβασής σας σε κάτι διαφορετικό από τον τρέχοντα κωδικό πρόσβασης.',
 'resetpass-temp-password' => 'Προσωρινός κωδικός:',
 'resetpass-abort-generic' => 'Η αλλαγή του κωδικού έχει απορριφθεί από μια προέκταση.',
 
@@ -962,6 +972,8 @@ $2
 'changeemail-password' => 'Ο κωδικός πρόσβασής σας στο εγχείρημα {{SITENAME}}:',
 'changeemail-submit' => 'Αλλαγή διεύθυνσης ηλεκτρονικού ταχυδρομείου',
 'changeemail-cancel' => 'Ακύρωση',
+'changeemail-throttled' => 'Κάνατε πάρα πολλές απόπειρες σύνδεσης.
+Παρακαλούμε περιμένετε $1 προτού ξαναδοκιμάσετε.',
 
 # Special:ResetTokens
 'resettokens' => 'Επαναφορά των κλειδιών',
@@ -972,7 +984,7 @@ $2
 'resettokens-legend' => 'Επαναφορά των κλειδιών',
 'resettokens-tokens' => 'Κλειδιά:',
 'resettokens-token-label' => '$1 (τρέχουσα τιμή: $2)',
-'resettokens-watchlist-token' => 'Κλειδί ροής της λίστα παρακολούθησης',
+'resettokens-watchlist-token' => 'Κλειδί για την δικτυακή ροή (Atom/RSS) των [[Special:Watchlist|αλλαγών σε σελίδες στη λίστα παρακολούθησής σας]]',
 'resettokens-done' => 'Επαναφορά κλειδιών.',
 'resettokens-resetbutton' => 'Επαναφορά επιλεγμένων κλειδιών',
 
@@ -1069,7 +1081,7 @@ $2
 Αυτό συνήθως προκαλείται από παλιό σύνδεσμο ιστορικού προς σελίδα που έχει διαγραφεί.
 Λεπτομέρειες θα βρείτε στο [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ημερολόγιο καταγραφής διαγραφών].',
 'userpage-userdoesnotexist' => 'Ο Λογαριασμός του χρήστη "<nowiki>$1</nowiki>" δεν είναι καταχωρημένος. Παρακαλώ δείτε αν θα θέλατε να δημιουργήσετε/επεξεργαστείτε αυτή τη σελίδα.',
-'userpage-userdoesnotexist-view' => 'Ο λογαριασμός χρήστη "$1" δεν είναι εγγεγραμμένος.',
+'userpage-userdoesnotexist-view' => 'Ο λογαριασμός χρήστη «$1» δεν είναι εγγεγραμμένος.',
 'blocked-notice-logextract' => 'Επί του παρόντος, αυτός ο χρήστης έχει υποστεί φραγή. Παρακάτω παρέχεται για αναφορά η πιο πρόσφατη καταχώρηση του αρχείου φραγών.',
 'clearyourcache' => "''' Σημείωση:''' μετά την αποθήκευση, ίσως χρειαστεί να παρακάμψετε την προσωρινή μνήμη του προγράμματος περιήγησής σας για να δείτε τις αλλαγές.
  * '''Firefox / Safari:''' Κρατήστε πατημένο το ''Shift'' κάνοντας ταυτόχρονα κλικ στο κουμπί ''Ανανέωση'' ή πιέστε ''Ctrl-F5'' ή ''Ctrl-R'' ('' ⌘-R'' σε Mac)
@@ -1175,9 +1187,11 @@ $2
 'content-not-allowed-here' => 'Το περιεχόμενο «$1» δεν επιτρέπεται στη σελίδα [[$2]]',
 'editwarning-warning' => 'Αφήνοντας αυτή τη σελίδα μπορεί να έχει ως συνέπεια να χαθούν κάποιες αλλαγές που έχετε κάνει.
 Αν έχετε συνδεθεί, μπορείτε να απενεργοποιήσετε αυτή την προειδοποίηση στην  ενότητα "{{int:prefs-editing}}"  των προτιμήσεών σας.',
+'editpage-notsupportedcontentformat-title' => 'Μορφή περιεχομένου που δεν υποστηρίζεται',
+'editpage-notsupportedcontentformat-text' => 'Η μορφή του περιεχομένου $1 δεν υποστηρίζεται από το μοντέλο περιεχομένου $2.',
 
 # Content models
-'content-model-wikitext' => 'βικικείμενο',
+'content-model-wikitext' => 'κείμενο wiki',
 'content-model-text' => 'απλό κείμενο',
 'content-model-javascript' => 'JavaScript',
 'content-model-css' => 'CSS',
@@ -1208,6 +1222,7 @@ $2
 'undo-success' => 'Η επεξεργασία μπορεί να αναστραφεί. Παρακαλώ ελέγξτε την σύγκριση παρακάτω για να επιβεβαιώσετε ότι αυτό είναι το οποίο θέλετε να κάνετε, και έπειτα αποθηκεύστε τις αλλαγές παρακάτω για να τελειώσετε την αναστροφή της επεξεργασίας.',
 'undo-failure' => 'Η επεξεργασία δεν μπορούσε να αναστραφεί λόγω αντικρουόμενων ενδιάμεσων επεξεργασιών.',
 'undo-norev' => 'Η ανάκληση αυτής της επεξεργασίας δεν ηταν δυνατό να πραγματοποιηθεί επειδή δεν υπάρχει ή επειδή έχει διαγραφεί.',
+'undo-nochange' => 'Η επεξεργασία φαίνεται να έχει ήδη αναιρεθεί.',
 'undo-summary' => 'Αναίρεση αναθεώρησης $1 υπό τον/την [[Special:Contributions/$2|$2]] ([[User talk:$2|Συζήτηση]])',
 'undo-summary-username-hidden' => 'Αναίρεση αναθεώρησης $1 από ένα κρυμμένο χρήστη',
 
@@ -1216,6 +1231,9 @@ $2
 'cantcreateaccount-text' => "Η δημιουργία λογαριασμού από αυτή τη διεύθυνση IP ('''$1''') έχει αποτραπεί από τον [[User:$3|$3]].
 
 Ο λόγος που δόθηκε από τον $3 είναι ''$2''",
+'cantcreateaccount-range-text' => "Η δημιουργία λογαριασμού από διευθύνσεις IP στην περιοχή  '''\$1''', που περιλαμβάνει τη δική σας διεύθυνση IP ('''\$4'''), έχει αποκλειστεί από τον [[User:\$3|\$3]].
+
+Η αιτιολογία που δόθηκε από τον \$3 είναι \"\$2\"",
 
 # History pages
 'viewpagelogs' => 'Προβολή αρχείων καταγραφών για αυτήν τη σελίδα',
@@ -1289,22 +1307,21 @@ Mπορείτε να δείτε αυτή την διαφορά. Λεπτομέρ
 'revdelete-show-file-submit' => 'Ναι',
 'revdelete-selected' => "'''{{PLURAL:$2|Επιλεγμένη έκδοση|Επιλεγμένες εκδόσεις}} της [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Επιλεγμένο γεγονός αρχείου καταγραφής|Επιλεγμένα γεγονότα αρχείου καταγραφής}}:'''",
-'revdelete-text' => "'''Οι διεγραμμένες αναθεωρήσεις και τα γεγονότα θα εμφανίζονται ακόμα στο ιστορικό της σελίδας και στα αρχεία καταγραφών, αλλά μέρη του περιεχομένου τους θα είναι απροσπέλαστα στο κοινό.'''
-Άλλοι διαχειριστές στον ιστότοπο {{SITENAME}} θα είναι ακόμα ικανοί να προσπελάσουν το κρυμμένο περιεχόμενο και μπορούν να το επαναφέρουν ξανά μέσω αυτής της διεπαφής, εκτός αν τεθούν πρόσθετοι περιορισμοί.",
 'revdelete-confirm' => 'Παρακαλούμε επιβεβαιώστε ότι σκοπεύετε να το κάνετε αυτό, ότι αντιλαμβάνεσθε τις συνέπειες, και ότι το κάνετε σύμφωνα με την [[{{MediaWiki:Policy-url}}|πολιτική]].',
-'revdelete-suppress-text' => "Η καταστολή μπορεί να χρησιμοποιηθεί ''' μόνο ''' για τις ακόλουθες περιπτώσεις:
+'revdelete-suppress-text' => 'Η καταστολή μπορεί να χρησιμοποιηθεί <strong> μόνο </strong> για τις ακόλουθες περιπτώσεις:
+* Ενδεχόμενη συκοφαντική δυσφήμιση
 * Ακατάλληλες προσωπικές πληροφορίες
-*: ''διευθύνσεις κατοικίας και αριθμοί τηλεφώνου, αριθμοί ταυτότητας, κλπ. ''",
+*: <em>διευθύνσεις κατοικίας και αριθμοί τηλεφώνου, αριθμοί ταυτότητας, κλπ. </em>',
 'revdelete-legend' => 'Θέστε περιορισμούς ορατότητας',
-'revdelete-hide-text' => 'Κρύψε κείμενο αναθεώρησης',
+'revdelete-hide-text' => 'Κείμενο αναθεώρησης',
 'revdelete-hide-image' => 'Κρύψε περιεχόμενο αρχείου',
 'revdelete-hide-name' => 'Κρύψε ενέργεια και στόχο',
-'revdelete-hide-comment' => 'Î\9aÏ\81Ï\8dÏ\88ε Ï\83Ï\87Ï\8cλιο επεξεργασίας',
-'revdelete-hide-user' => 'Î\9aÏ\81Ï\8dÏ\88ε Ï\8cνομα Ï\87Ï\81ήÏ\83Ï\84η/IP Ï\83Ï\85νÏ\84άκÏ\84η',
+'revdelete-hide-comment' => 'ΣÏ\8dνοÏ\88η επεξεργασίας',
+'revdelete-hide-user' => 'Όνομα χρήστη/IP συντάκτη',
 'revdelete-hide-restricted' => 'Απόκρυψη δεδομένων από διαχειριστές καθώς και από άλλους',
 'revdelete-radio-same' => '(μην αλλάξετε)',
-'revdelete-radio-set' => 'Î\95μÏ\86ανέÏ\82',
-'revdelete-radio-unset' => 'Î\9aÏ\81Ï\85Ï\86Ï\8c',
+'revdelete-radio-set' => 'Î\9aÏ\81Ï\85μμένο',
+'revdelete-radio-unset' => 'Î\95μÏ\86ανέÏ\82',
 'revdelete-suppress' => 'Απόκρυψε δεδομένα από διαχειριστές όπως και από άλλους',
 'revdelete-unsuppress' => 'Αφαίρεσε περιορισμούς στις αποκατεστημένες αναθεωρήσεις',
 'revdelete-log' => 'Αιτία:',
@@ -1382,6 +1399,7 @@ $1",
 'showhideselectedversions' => 'Εμφάνιση/απόκρυψη των επιλεγμένων εκδοχών',
 'editundo' => 'αναίρεση',
 'diff-empty' => '(Καμία διαφορά)',
+'diff-multi-sameuser' => '({{PLURAL:$1|Μία ενδιάμεση αναθεώρηση|$1 ενδιάμεσες αναθεωρήσεις}} από τον ίδιο χρήστη δεν εμφανίζεται)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Μία ενδιάμεση αναθεώρηση|$1 ενδιάμεσες αναθεωρήσεις}} από περισσότερο από $2 {{PLURAL:$2|χρήστη|χρήστες}} δεν εμφανίζ{{PLURAL:$1|εται|ονται}})',
 'difference-missing-revision' => '{{PLURAL:$2|Μία αναθεώρηση|$2 αναθεωρήσεις}} αυτής της διαφοράς ($1) δεν {{PLURAL:$2|μπόρεσε να βρεθεί|μπόρεσαν να βρεθούν}}.
 
@@ -1418,6 +1436,7 @@ $1",
 'search-result-score' => 'Σχετικότητα: $1%',
 'search-redirect' => '(ανακατεύθυνση $1)',
 'search-section' => '(ενότητα $1)',
+'search-file-match' => '(ταιριάζει με το περιεχόμενο του αρχείου)',
 'search-suggest' => 'Μήπως εννοούσατε: $1',
 'search-interwiki-caption' => 'Αδελφικά εγχειρήματα',
 'search-interwiki-default' => '$1 αποτελέσματα:',
@@ -1444,6 +1463,7 @@ $1",
 'preferences' => 'Προτιμήσεις',
 'mypreferences' => 'Προτιμήσεις',
 'prefs-edits' => 'Αριθμός επεξεργασιών:',
+'prefsnologintext2' => 'Παρακαλούμε $1 για να αλλάξετε τις προτιμήσεις σας.',
 'prefs-skin' => 'Οπτική οργάνωση (skin)',
 'skin-preview' => 'Προεπισκόπηση',
 'datedefault' => 'Χωρίς προτίμηση',
@@ -1466,7 +1486,7 @@ $1",
 'prefs-email' => 'Επιλογές e-mail',
 'prefs-rendering' => 'Εμφάνιση',
 'saveprefs' => 'Αποθήκευση',
-'restoreprefs' => 'Επαναφορά όλων των προεπιλεγμένων ρυθμίσεων',
+'restoreprefs' => 'Επαναφορά όλων των προεπιλεγμένων ρυθμίσεων (σε όλα τα τμήματα)',
 'prefs-editing' => 'Επεξεργασία',
 'rows' => 'Σειρές',
 'columns' => 'Στήλες',
@@ -1479,7 +1499,7 @@ $1",
 'prefs-help-recentchangescount' => 'Αυτό περιλαμβάνει τις πρόσφατες αλλαγές, τα ιστορικά των σελίδων, και τα αρχεία διαγραφών.',
 'prefs-help-watchlist-token2' => 'Αυτό είναι το μυστικό κλειδί για την web τροφοδοσία  της λίστας παρακολούθησής σας.
 Όποιος το γνωρίζει θα είναι σε θέση να διαβάσει την λίστα παρακολούθησης σας, οπότε μην τον μοιράζεστε.
-[[Special: ResetTokens|Κάνε κλικ εδώ εάν θέλετε να τον επαναφέρετε]].',
+[[Special:ResetTokens|Κάνε κλικ εδώ εάν θέλετε να τον επαναφέρετε]].',
 'savedprefs' => 'Οι προτιμήσεις σας έχουν αποθηκευτεί.',
 'timezonelegend' => 'Ζώνη ώρας:',
 'localtime' => 'Εμφάνιση τοπικής ώρας:',
@@ -1552,6 +1572,7 @@ $1",
 'prefs-tokenwatchlist' => 'Κλειδί',
 'prefs-diffs' => 'Διαφορές',
 'prefs-help-prefershttps' => 'Αυτή η προτίμηση θα τεθεί σε ισχύ στην επόμενή σας σύνδεση.',
+'prefs-tabs-navigation-hint' => 'Συμβουλή: Μπορείτε να χρησιμοποιήσετε τα πλήκτρα διευθύνσεων αριστερά και δεξιά για να πλοηγηθείτε μεταξύ των καρτελών στη λίστα καρτελών.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'Η διεύθυνση ηλεκτρονικού ταχυδρομείου φαίνεται έγκυρη',
@@ -1706,8 +1727,8 @@ $1",
 'action-block' => 'να φράξετε τις επεξεργασίες αυτού του χρήστη',
 'action-protect' => 'να αλλάξετε τα επίπεδα προστασίας για αυτή τη σελίδα',
 'action-rollback' => 'γρήγορη επαναφορά των επεξεργασιών του τελευταίου χρήστη που επεξεργάστηκε μια συγκεκριμένη σελίδα',
-'action-import' => 'να ÎµÎ¹Ï\83άγεÏ\84ε Î±Ï\85Ï\84ή Ï\84η Ï\83ελίδα από άλλο wiki',
-'action-importupload' => 'να ÎµÎ¹Ï\83άγεÏ\84ε Î±Ï\85Ï\84ή Ï\84η Ï\83ελίδα Î±Ï\80Ï\8c Ï\86Ï\8cÏ\81Ï\84Ï\89Ï\83η Î±Ï\81Ï\87είοÏ\85',
+'action-import' => 'ειÏ\83άγεÏ\84ε Ï\83ελίδεÏ\82 από άλλο wiki',
+'action-importupload' => 'εισάγετε αυτή τη σελίδα από φόρτωση αρχείου',
 'action-patrol' => 'να επισημάνετε τις επεξεργασίες άλλων ως ελεγμένες',
 'action-autopatrol' => 'να επισημάνετε την επεξεργασία σας ως ελεγμένη',
 'action-unwatchedpages' => 'να εμφανίσετε τον κατάλογο μη παρακολουθούμενων σελίδων',
@@ -1728,6 +1749,7 @@ $1",
 'recentchanges' => 'Πρόσφατες αλλαγές',
 'recentchanges-legend' => 'Επιλογές πρόσφατων αλλαγών',
 'recentchanges-summary' => 'Παρακολουθήστε σε αυτή τη σελίδα τις πιο πρόσφατες αλλαγές στο Wiki.',
+'recentchanges-noresult' => 'Χωρίς αλλαγές κατά τη διάρκεια της συγκεκριμένης χρονικής περιόδου, με αυτά τα κριτήρια.',
 'recentchanges-feed-description' => 'Παρακολούθηση των πιο πρόσφατων αλλαγών στο wiki σε αυτή τη ροή.',
 'recentchanges-label-newpage' => 'Αυτή η επεξεργασία δημιούργησε μια νέα σελίδα',
 'recentchanges-label-minor' => 'Αυτή είναι μια μικροαλλαγή',
@@ -1739,8 +1761,10 @@ $1",
 'rcnotefrom' => "Παρακάτω είναι οι αλλαγές από τις '''$2''' (εμφανίζονται μέχρι '''$1''').",
 'rclistfrom' => 'Εμφάνιση νέων αλλαγών αρχίζοντας από $1',
 'rcshowhideminor' => '$1 μικροεπεξεργασιών',
+'rcshowhideminor-show' => 'Εμφάνιση',
+'rcshowhideminor-hide' => 'Απόκρυψη',
 'rcshowhidebots' => '$1 ρομπότ',
-'rcshowhideliu' => '$1 συνδεδεμένων χρηστών',
+'rcshowhideliu' => '$1 εγγεγραμμένων χρηστών',
 'rcshowhideanons' => '$1 ανωνύμων χρηστών',
 'rcshowhidepatr' => '$1 ελεγμένων επεξεργασιών',
 'rcshowhidemine' => '$1 των επεξεργασιών μου',
@@ -1757,7 +1781,7 @@ $1",
 'rc_categories_any' => 'Οποιαδήποτε',
 'rc-change-size-new' => '$1 {{PLURAL:$1|byte|bytes}} μετά από την αλλαγή',
 'newsectionsummary' => '/* $1 */ νέα ενότητα',
-'rc-enhanced-expand' => 'Εμφάνιση λεπτομερειών (απαιτείται JavaScript)',
+'rc-enhanced-expand' => 'Εμφάνιση λεπτομερειών',
 'rc-enhanced-hide' => 'Απόκρυψη λεπτομερειών',
 'rc-old-title' => 'αρχικά δημιουργήθηκε ως " $1 "',
 
@@ -1777,7 +1801,7 @@ $1",
 'reuploaddesc' => 'Επιστροφή στη φόρμα φόρτωσης',
 'upload-tryagain' => 'Η καταχώρηση άλλαξε την περιγραφή αρχείου',
 'uploadnologin' => 'Δεν έχετε συνδεθεί!',
-'uploadnologintext' => 'Î\93ια Î½Î± Ï\86οÏ\81Ï\84Ï\8eÏ\83εÏ\84ε Î±Ï\81Ï\87εία Ï\80Ï\81έÏ\80ει Ï\80Ï\81Ï\8eÏ\84α Î½Î± [[Special:UserLogin|Ï\83Ï\85νδεθείÏ\84ε]].',
+'uploadnologintext' => 'ΠαÏ\81ακαλÏ\8e $1 Î³Î¹Î± Î½Î± ÎµÏ\80ιÏ\86οÏ\81Ï\84Ï\8eÏ\83εÏ\84ε Î±Ï\81Ï\87εία.',
 'upload_directory_missing' => 'Λείπει το αποθηκευτήριο επιφορτώσεων ($1) και δεν μπορεί να δημιουργηθεί από τον webserver.',
 'upload_directory_read_only' => 'Δεν είναι δυνατή η εγγραφή στον κατάλογο ($1) από τον server.',
 'uploaderror' => 'Σφάλμα στη φόρτωση αρχείου',
@@ -2010,8 +2034,7 @@ $1',
 'upload_source_file' => ' (ένα αρχείο στον υπολογιστή σας)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Αυτή η ειδική σελίδα δείχνει όλα τα αρχεία που έχουν φορτωθεί.
-Όταν γίνεται φιλτράρισμα από τον χρήστη, εμφανίζονται μόνο οι πιο πρόσφατες εκδόσεις των αρχείων που αυτός έχει φορτώσει.',
+'listfiles-summary' => 'Αυτή η ειδική σελίδα δείχνει όλα τα επιφορτωμένα αρχεία.',
 'listfiles_search_for' => 'Αναζήτηση για όνομα πολυμέσου:',
 'imgfile' => 'αρχείο',
 'listfiles' => 'Κατάλογος εικόνων',
@@ -2218,12 +2241,20 @@ $1',
 'protectedpages' => 'Προστατευμένες σελίδες',
 'protectedpages-indef' => 'Προστασίες επαόριστον μόνο',
 'protectedpages-cascade' => 'Μόνο διαδοχικές προστασίες',
+'protectedpages-noredirect' => 'Απόκρυψη ανακατευθύνσεων',
 'protectedpagesempty' => 'Καμία σελίδα με αυτές τις παραμέτρους δεν είναι προς το παρόν προστατευμένη.',
+'protectedpages-timestamp' => 'Χρονική σήμανση',
+'protectedpages-page' => 'Σελίδα',
+'protectedpages-expiry' => 'Λήγει',
+'protectedpages-performer' => 'Προστασία χρήστη',
+'protectedpages-unknown-timestamp' => 'Άγνωστο',
+'protectedpages-unknown-performer' => 'Άγνωστος χρήστης',
 'protectedtitles' => 'Προστατευμένοι τίτλοι',
 'protectedtitlesempty' => 'Δεν υπάρχουν προστατευμένοι τίτλοι με αυτές τις παραμέτρους.',
 'listusers' => 'Κατάλογος χρηστών',
 'listusers-editsonly' => 'Εμφάνιση μόνο των χρηστών με επεξεργασίες',
 'listusers-creationsort' => 'Ταξινόμηση κατά ημερομηνία δημιουργίας',
+'listusers-desc' => 'Η ταξινόμηση κατά φθίνουσα σειρά',
 'usereditcount' => '$1 {{PLURAL:$1|επεξεργασία|επεξεργασίες}}',
 'usercreated' => '{{GENDER:$3|Δημιουργήθηκε}} στις $1 στις $2',
 'newpages' => 'Νέες σελίδες',
@@ -2505,7 +2536,7 @@ $UNWATCHURL
 Τελευταία αλλαγή από το χρήστη ([[User:$3|$3]] ([[User talk:$3|Συζήτηση]]){{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Το σχόλιο της επεξεργασίας ήταν: \"''\$1''\".",
 'revertpage' => 'Ανάκληση των αλλαγών $2 (επιστροφή στην προηγούμενη αναθεώρηση $1)',
-'revertpage-nouser' => 'Αναστράφηκαν οι επεξεργασίες από τον (όνομα χρήστη αφαιρέθηκε) στη τελευταία έκδοση από τον/την [[User:$1|$1]]',
+'revertpage-nouser' => 'Αναστράφηκαν οι επεξεργασίες από τον (όνομα χρήστη αφαιρέθηκε) στη τελευταία έκδοση από τον/την {{GENDER:$1|[[User:$1|$1]]}}φ',
 'rollback-success' => 'Ανεστραμμένες εκδόσεις από $1, αλλάχθηκαν στην προηγούμενη έκδοση από $2.',
 
 # Edit tokens
@@ -2643,7 +2674,7 @@ $1',
 'contributions' => 'Συνεισφορές {{GENDER:$1|χρήστη|χρήστριας}}',
 'contributions-title' => 'Συνεισφορές χρήστη για {{GENDER:$1|τον|την}} $1',
 'mycontris' => 'Συνεισφορές',
-'contribsub2' => 'Για {{GENDER:$1|τον|την}} $1 ($2)',
+'contribsub2' => 'Για {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Δεν βρέθηκαν αλλαγές με αυτά τα κριτήρια.',
 'uctop' => '(τρέχουσα)',
 'month' => 'Από το μήνα (και νωρίτερα):',
@@ -2764,7 +2795,8 @@ $1',
 'change-blocklink' => 'αλλαγή φραγής',
 'contribslink' => 'συνεισφορές',
 'emaillink' => 'αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου',
-'autoblocker' => 'Έχετε υποστεί αυτόματα φραγή από το σύστημα επειδή χρησιμοποιείτε την ίδια διεύθυνση IP με το χρήστη "[[User:$1|$1]]". Η αιτιολογία για την φραγή του $1 είναι "$2".',
+'autoblocker' => 'Έχετε υποστεί αυτόματα φραγή από το σύστημα επειδή η διεύθυνση IP σας έχει πρόσφατα χρησιμοποιηθεί από το χρήστη "[[User:$1|$1]]". 
+Η αιτιολογία για την φραγή του $1 είναι "$2".',
 'blocklogpage' => 'Αρχείο καταγραφών φραγών',
 'blocklog-showlog' => 'Αυτός ο χρήστης έχει φραγεί προηγουμένως.
 Το αρχείο γραφής παράσχεται παρακάτω για παραπομπή:',
@@ -2786,7 +2818,7 @@ $1',
 'range_block_disabled' => 'Η δυνατότητα του διαχειριστή να δημιουργεί περιοχές φραγής είναι απενεργοποιημένη.',
 'ipb_expiry_invalid' => 'Άκυρος χρόνος λήξης',
 'ipb_expiry_temp' => 'Οι κρυμμένες φραγές ονομάτων χρηστών πρέπει να είναι μόνιμες.',
-'ipb_hide_invalid' => 'Î\9cη ÎµÏ\86ικÏ\84ή ÎºÎ±Ï\84αÏ\83Ï\84ολή Î±Ï\85Ï\84οÏ\8d Ï\84οÏ\85 Î»Î¿Î³Î±Ï\81ιαÏ\83μοÏ\8d. Î\9cÏ\80οÏ\81εί Î½Î± Î­Ï\87ει Ï\80άÏ\81α Ï\80ολλέÏ\82 ÎµÏ\80εξεÏ\81γαÏ\83ίεÏ\82.',
+'ipb_hide_invalid' => 'Î\9cη ÎµÏ\86ικÏ\84ή ÎºÎ±Ï\84αÏ\83Ï\84ολή Î±Ï\85Ï\84οÏ\8d Ï\84οÏ\85 Î»Î¿Î³Î±Ï\81ιαÏ\83μοÏ\8d. Î\9cÏ\80οÏ\81εί Î½Î± Î­Ï\87ει Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81εÏ\82 Î±Ï\80Ï\8c {{PLURAL:$1|μια ÎµÏ\80εξεÏ\81γαÏ\83ία|$1 ÎµÏ\80εξεÏ\81γαÏ\83ίεÏ\82}}.',
 'ipb_already_blocked' => 'Η διεύθυνση IP "$1" είναι ήδη φραγμένη',
 'ipb-needreblock' => '$1 είναι ήδη αποκλεισμένη. Θέλετε να αλλάξετε τις ρυθμίσεις?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Άλλη φραγή|Άλλες φραγές}}',
@@ -2952,6 +2984,7 @@ $1',
 'allmessages-prefix' => 'Φίλτρο κατά πρόθεμα:',
 'allmessages-language' => 'Γλώσσα:',
 'allmessages-filter-submit' => 'Μετάβαση',
+'allmessages-filter-translate' => 'Μετάφραση',
 
 # Thumbnails
 'thumbnail-more' => 'Μεγέθυνση',
@@ -3003,7 +3036,7 @@ $2',
 'importuploaderrortemp' => 'Η επιφόρτωση του εισαγόμενου αρχείου απέτυχε. Λείπει ένας προσωρινός φάκελος.',
 'import-parse-failure' => 'Σφάλμα παραμέτρου XML κατά την  εισαγωγή',
 'import-noarticle' => 'Καμία σελίδα για εισαγωγή!',
-'import-nonewrevisions' => 'Î\8cλεÏ\82 Î¿Î¹ Î±Î½Î±Î¸ÎµÏ\89Ï\81ήÏ\83ειÏ\82 ÎµÎ¹Ï\83άÏ\87θηκαν Ï\80Ï\81οηγοÏ\85μένÏ\89Ï\82.',
+'import-nonewrevisions' => 'Î\9aαμία Î±Î½Î±Î¸ÎµÏ\8eÏ\81ηÏ\83η Î´ÎµÎ½ ÎµÎ¹Ï\83ήÏ\87θει (Ï\8cλεÏ\82 ÎµÎ¯Ï\84ε Î®Ï\84αν Î®Î´Î· Ï\80αÏ\81οÏ\8dÏ\83εÏ\82, Î® Ï\80αÏ\81αλήÏ\86θηκαν Î»Ï\8cγÏ\89 Ï\83Ï\86αλμάÏ\84Ï\89ν).',
 'xml-error-string' => '$1 στη γραμμή $2, στήλη $3 (byte $4): $5',
 'import-upload' => 'Επιφόρτωση δεδομένων XML',
 'import-token-mismatch' => 'Απώλεια των στοιχείων της συνόδου. Παρακαλούμε προσπαθήστε ξανά.',
@@ -3142,8 +3175,8 @@ $2',
 'spam_reverting' => 'Επαναφορά στην τελευταία έκδοση που δεν περιέχει συνδέσμους στο $1',
 'spam_blanking' => 'Όλες οι αναθεωρήσεις περιείχαν συνδέσμους προς το $1, εξάλειψη',
 'spam_deleting' => 'Διαγραφή όλων των αναθεωρήσεων που περιείχαν συνδέσμους προς το $1',
-'simpleantispam-label' => "Έλεγχος anti-spam.
-'''ΜΗΝ''' το συμπληρώσετε αυτό!",
+'simpleantispam-label' => 'Έλεγχος για spam.
+<strong>ΜΗΝ</strong> το συμπληρώσετε αυτό!',
 
 # Info page
 'pageinfo-title' => 'Πληροφορίες για "$1"',
@@ -3157,7 +3190,8 @@ $2',
 'pageinfo-length' => 'Μήκος σελίδας (σε bytes)',
 'pageinfo-article-id' => 'Αναγνωριστικό σελίδας',
 'pageinfo-language' => 'Γλώσσα σελίδας περιεχομένου',
-'pageinfo-robot-policy' => 'Στάτους μηχανής αναζήτησης',
+'pageinfo-content-model' => 'Μοντέλο περιεχομένου σελίδας',
+'pageinfo-robot-policy' => 'Ευρετηρίαση από ρομπότ',
 'pageinfo-robot-index' => 'Επιτρεπτό',
 'pageinfo-robot-noindex' => 'Μη επιτρεπτό',
 'pageinfo-views' => 'Αριθμός προβολών',
@@ -3241,7 +3275,7 @@ $1',
 'svg-long-desc' => 'Αρχείο SVG, ονομαστικό μέγεθος $1 × $2 εικονοστοιχεία, μέγεθος αρχείου: $3',
 'svg-long-desc-animated' => 'Κινούμενο αρχείο SVG, ονομαστικό μέγεθος σε pixels: $1 × $2, μέγεθος αρχείου: $3',
 'svg-long-error' => 'Μη έγκυρο αρχείο SVG: $1',
-'show-big-image' => 'ΠλήÏ\81ηÏ\82 Î±Î½Î¬Î»Ï\85Ï\83η',
+'show-big-image' => 'Î\91Ï\81Ï\87ικÏ\8c Î±Ï\81Ï\87είο',
 'show-big-image-preview' => 'Μέγεθος αυτής της προεπισκόπησης: $1 .',
 'show-big-image-other' => 'Άλλες {{PLURAL:$2|ανάλυση|αναλύσεις}}: $1.',
 'show-big-image-size' => '$1 × $2 εικονοστοιχεία',
@@ -3764,7 +3798,7 @@ $5
 όρισε αυτήν τη διεύθυνση ηλεκτρονικού ταχυδρομείου ως διεύθυνση ηλεκτρονικού ταχυδρομείου
 του λογαριασμού χρήστη «$2» στον ιστότοπο {{SITENAME}}.
 
-Για να επιβεβαιώσετε ότι αυτός ο λογαριασμός χρήστη ανήκει πραγματικά σε σας και να ενεργοποιήσετε πάλι
+Για να επιβεβαιώσετε ότι αυτός ο λογαριασμός χρήστη ανήκει πραγματικά σε σας και να ενεργοποιήσετε 
 τις δυνατότητες ηλεκτρονικού ταχυδρομείου στον ιστότοπο {{SITENAME}}, ανοίξτε στον περιηγητή σας αυτόν το σύνδεσμο:
 
 $3
@@ -3774,7 +3808,7 @@ $3
 
 $5
 
-Αυτός ο κωδικός επιβεβαίωσης θα λήξει στις $6, στις $7.',
+Αυτός ο κωδικός επιβεβαίωσης θα λήξει στις $4.',
 'confirmemail_invalidated' => 'Η επιβεβαίωσης της διεύθυνσης e-mail ακυρώθηκε',
 'invalidateemail' => 'Ακύρωση επιβεβαίωσης της διεύθυνσης e-mail',
 
@@ -3810,6 +3844,11 @@ $5
 'imgmultigo' => 'Πήγαινε!',
 'imgmultigoto' => 'Μετάβαση στη σελίδα $1',
 
+# Language selector for translatable SVGs
+'img-lang-default' => '(προεπιλεγμένη γλώσσα)',
+'img-lang-info' => 'Απόδοση της εικόνας στα $1. $2',
+'img-lang-go' => 'Μετάβαση',
+
 # Table pager
 'ascending_abbrev' => 'αυξ',
 'descending_abbrev' => 'φθιν',
@@ -3887,12 +3926,14 @@ $5
 'version-hook-name' => 'Όνομα άγκιστρου',
 'version-hook-subscribedby' => 'Υπογεγραμμένο από',
 'version-version' => '(Έκδοση $1)',
-'version-license' => 'Άδεια χρήσης',
+'version-license' => 'Άδεια MediaWiki',
 'version-ext-license' => 'Άδεια χρήσης',
 'version-ext-colheader-name' => 'Επέκταση',
 'version-ext-colheader-version' => 'Έκδοση',
 'version-ext-colheader-license' => 'Άδεια χρήσης',
 'version-ext-colheader-description' => 'Περιγραφή',
+'version-ext-colheader-credits' => 'Δημιουργοί',
+'version-license-title' => 'Άδεια χρήσης για $1',
 'version-poweredby-credits' => "Αυτό το wiki λειτουργεί με το λογισμικό '''[https://www.mediawiki.org/ MediaWiki]''', πνευματική ιδιοκτησία © 2001-$1 $2.",
 'version-poweredby-others' => 'άλλοι',
 'version-poweredby-translators' => 'translatewiki.net μεταφραστές',
@@ -3910,11 +3951,13 @@ $5
 'version-entrypoints-header-url' => 'URL',
 
 # Special:Redirect
+'redirect' => 'Ανακατεύθυνση κατά αρχείο, χρήστη, σελίδα ή αναγνωριστικό αναθεώρησης',
 'redirect-legend' => 'Ανακατεύθυνση σε ένα αρχείο ή μια σελίδα',
 'redirect-submit' => 'Μετάβαση',
 'redirect-lookup' => 'Αναζήτηση:',
 'redirect-value' => 'Τιμή:',
 'redirect-user' => 'Αναγνωριστικό χρήση',
+'redirect-page' => 'Αναγνωριστικό σελίδας',
 'redirect-revision' => 'Αναθεώρηση σελίδας',
 'redirect-file' => 'Όνομα αρχείου',
 'redirect-not-exists' => 'Η τιμή δε βρέθηκε',
@@ -3932,9 +3975,9 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'Ειδικές σελίδες',
+'specialpages-note-top' => 'Υπόμνημα',
 'specialpages-note' => '* Κανονικές ειδικές σελίδες.
-* <span class="mw-specialpagerestricted">Ειδικές σελίδες με περιορισμούς.</span>
-* <span class="mw-specialpagecached">Ειδικές σελίδες αποθηκευμένες προσωρινά (μπορεί να είναι παρωχημένες).</span>',
+* <span class="mw-specialpagerestricted">Ειδικές σελίδες με περιορισμούς.</span>',
 'specialpages-group-maintenance' => 'Αναφορές συντήρησης',
 'specialpages-group-other' => 'Άλλες ειδικές σελίδες',
 'specialpages-group-login' => 'Σύνδεση / δημιουργία λογαριασμού',
@@ -3966,11 +4009,13 @@ $5
 'tags' => 'Έγκυρες ετικέτες αλλαγής',
 'tag-filter' => 'Φίλτρο [[Special:Tags|ετικετών]]:',
 'tag-filter-submit' => 'Φίλτρο',
+'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Ετικέτα|Ετικέτες}}]]: $2)',
 'tags-title' => 'Ετικέτες',
 'tags-intro' => 'Η σελίδα συγκαταλέγει τις ετικέτες (καθώς και το τι σημαίνει η κάθε μία) με τις οποίες το software μπορεί να μαρκάρει μία επεξεργασία.',
 'tags-tag' => 'Όνομα ετικέτας',
 'tags-display-header' => 'Εμφάνιση στις λίστες αλλαγής',
 'tags-description-header' => 'Πλήρης περιγραφή του νοήματος',
+'tags-active-header' => 'Ενεργή;',
 'tags-hitcount-header' => 'Αλλαγές με ετικέτα',
 'tags-active-yes' => 'Ναι',
 'tags-active-no' => 'Όχι',
@@ -3993,6 +4038,7 @@ $5
 'dberr-problems' => 'Λυπούμαστε! Αυτός ο ιστότοπος αντιμετωπίζει τεχνικές δυσκολίες.',
 'dberr-again' => 'Δοκιμάστε να περιμενένετε λίγα λεπτά και να ανανεώσετε.',
 'dberr-info' => '(Δεν μπορεί να επικοινωνήσει με τον εξυπηρετητή της βάσης δεδομένων: $1)',
+'dberr-info-hidden' => '(Δεν είναι δυνατή η επικοινωνία με τον εξυπηρετητή της βάσης δεδομένων)',
 'dberr-usegoogle' => 'Μπορείτε να δοκιμάσετε να ψάξετε στο Google εν τω μεταξύ.',
 'dberr-outofdate' => 'Σημειώστε ότι οι ενδείξεις τους περί του περιεχομένου μας ενδέχεται να μην είναι ενημερωμένες.',
 'dberr-cachederror' => 'Το ακόλουθο είναι ένα αντίγραφο από την μνήμη της σελίδας που ζητήσατε και ενδέχεται να μην είναι ενημερωμένο.',
@@ -4131,7 +4177,9 @@ $5
 # Limit report
 'limitreport-title' => 'Δεδομένα που σκιαγραφούν το προφίλ του συντακτικού αναλυτή:',
 'limitreport-cputime' => 'Χρόνος χρήσης CPU',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|δευτερόλεπτο|δευτερόλεπτα}}',
 'limitreport-walltime' => 'Χρήση πραγματικού χρόνου',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|δευτερόλεπτο|δευτερόλεπτα}}',
 'limitreport-ppvisitednodes' => 'Καταμέτρηση κόμβων επισκεφθέντων από τον προεπεξεργαστή',
 'limitreport-ppgeneratednodes' => 'Καταμέτρηση κόμβων παραχθέντων από τον προεπεξεργαστή',
 'limitreport-postexpandincludesize' => 'Μέγεθος συμπερίληψης πριν την ανάπτυξη',
@@ -4150,10 +4198,12 @@ $5
 'expand_templates_input' => 'Κείμενο εισόδου:',
 'expand_templates_output' => 'Αποτέλεσμα',
 'expand_templates_xml_output' => 'Έξοδος XML',
+'expand_templates_html_output' => 'Ανεπεξέργαστη έξοδος HTML',
 'expand_templates_ok' => 'Εντάξει',
 'expand_templates_remove_comments' => 'Αφαίρεση σχολίων',
 'expand_templates_remove_nowiki' => 'Απόκρυψη της ετικέτας <nowiki> στο αποτέλεσμα',
 'expand_templates_generate_xml' => 'Εμφάνιση δέντρου συντακτικής ανάλυσης XML',
+'expand_templates_generate_rawhtml' => 'Εμφάνιση ανεπεξέργαστης HTML',
 'expand_templates_preview' => 'Προεπισκόπηση',
 
 );
index ee84b91..ddff3ed 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Lévi
  * @author Ottaviano II
  * @author Timichal
  * @author Tèstaquêdra
@@ -23,141 +24,141 @@ $messages = array(
 'thursday' => 'Giuvidè',
 'friday' => 'Venerdè',
 'saturday' => 'Sâbet',
-'january' => 'Znèr',
-'february' => 'Febrèr',
-'march' => 'Mèrz',
+'january' => 'Znêr',
+'february' => 'Fervêr',
+'march' => 'Mêrs',
 'april' => 'Avrîl',
 'june' => 'Zógn',
 'july' => 'Lój',
 'august' => 'Agòst',
-'september' => 'Setàmber',
-'october' => 'Utóber',
-'november' => 'Nuvàmber',
-'december' => 'Dzèmber',
-'may' => 'Mâz',
+'september' => 'Setèmber',
+'october' => 'Utòber',
+'november' => 'Nuvèmber',
+'december' => 'Dicèmber',
+'may' => 'Mâg',
 
-'mytalk' => 'I mê discussiòun',
+'mytalk' => 'Al mē discusiòun',
 
-'returnto' => 'Tórna a $1.',
+'returnto' => 'Tōrna a $1.',
 'help' => 'Per quî rivê da pôch',
 'history_short' => 'Stôria',
-'printableversion' => 'Versiòun stampàbil',
-'permalink' => 'Link permanèint',
-'edit' => 'Mudifichèr',
-'delete' => 'Dscanzèla',
-'protect' => 'Prutèzz',
-'specialpage' => 'Pàgina specla',
-'talk' => 'Discussiòun',
-'jumptosearch' => 'Zerca',
+'printableversion' => "Versiòun ch'la 's pōl stampêr",
+'permalink' => 'Colegamèint fés',
+'edit' => 'Mudéfica',
+'delete' => 'Scanşèla',
+'protect' => 'Prutēz',
+'specialpage' => 'Pàgina specêla',
+'talk' => 'Discusiòun',
+'jumptosearch' => 'Sèirca',
 
 # 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).
 'currentevents' => 'Fât e prugèt ed tót',
 'currentevents-url' => 'Project:Prugèt_ed_tót',
-'helppage' => 'Help:Introduzione',
+'helppage' => 'Help:Introdusiòun',
 'portal' => 'Discóter e quistiunêr',
 'portal-url' => 'Project:Bar',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Artéccol',
-'nstab-template' => 'Modèl',
+'nstab-main' => 'Artécol',
+'nstab-template' => 'Mudèl',
 
 # Login and logout pages
-'logouttext' => "'''Adèsa s'et discunnês.'''
-
-Putiv cuntinuèr ad usèr {{SITENAME}} anonimamèint, o putiv cunnètterv dòp cun al stèss nàmm o cun un èter.
-Nutêv ca alcuni pàgini i putrèbber cuntinuèr a cràdder ca vueter a-sîv discunnès, finchè non purghê la cache dal vòster browser.",
-'userlogin' => 'Entrèr / Argistrères',
-'logout' => 'va fôra',
-'userlogout' => 'Va fôra',
-'userexists' => "Al nòmm ch'èt scélt l'è stê bèle usê: càten un èter, per piasêr.",
-'loginsuccess' => "'''Adèsa sèt cunês in {{SITENAME}} cun al nàmm d'utèint \"\$1\".'''",
-'wrongpassword' => "La password ch'et méss l'è sbajèda. Pròva ancàrra.",
-'blocked-mailpassword' => "Al tô indirézz IP l'an pôl più feèr di cambiamèint, e l'en brisa abilitê par user la funziòun ed recópper ed password par evitèr di abûs.",
-'accountcreated' => 'Et criê un nôv account',
+'logouttext' => "''An té pió coleghê''
+Ét pō cuntinvêr a druvêr {{SITENAME}} sèina nòm, o ét pō coleghêret dôp cun l'istès nòm o cun 'n êter.
+Guêrda che soquânti pàgini a 's prén vèder incòra cme s'ét fós coleghê fîn a che an vîn mia pulî la 'cache' dal tó  'browser'.",
+'userlogin' => 'Ingrès / regéstret',
+'logout' => 'Và fōra',
+'userlogout' => 'Và fōra',
+'userexists' => "Al nòm utèint ch'èt siēlt l'è bèle stê druvê.
+Câten un èter, per piaşèir.",
+'loginsuccess' => "'''Adèsa t'é coleghê in {{SITENAME}} cun al nòm utèint \"\$1\".'''",
+'wrongpassword' => "La 'password' che t'é més l'è sbaliêda. Prōva incòra.",
+'blocked-mailpassword' => "Per anticipêr abûş, an n'é mía permès druvêr  'n' êtra 'password' da 'n indirés 'IP' bluchê.",
+'accountcreated' => "T'é fât un nōv 'account'.",
 
 # Edit pages
 'summary' => "Mutîv d'al cambiamèint:",
-'minoredit' => "Còst cambiamèint ché l'é un gnînt in tót",
-'watchthis' => "Tîn a drê a c'la pàgina chè",
-'savearticle' => 'Salva',
-'showpreview' => 'Anteprémma',
-'showdiff' => 'Guèrda al differèinzi',
-'anoneditwarning' => "'''Attenziòun:''' An sîv ménga vgnû dèinter. Al vòster indirézz IP al vrà signê in d'la stòria d'i cambiamèint ed sta pagina chè..",
-'anontalkpagetext' => "----''Sta chè l'éla pàgina ed discussiòun d'un utèint anònim c'al n'à brisa criê un sô account o c'an l'usa ménga. Bsògna quindi usêr al sô indirézz IP par identifichèrel. L'istèss indirézz IP al pôl èsser usê da di mòndi utèint. Se sèt un utèint anònim e pèinset c'a-t in sun stèdi fâti di cummèint irrilevànt, per piasér [[Special:UserLogin|criêt un account o fê al log-in]] par evitèr confusiòuni futuri cun di èter utèint anònim.''",
+'minoredit' => "Cól cambiamèint ché l'é un gnînt in tót",
+'watchthis' => 'Tîn a drē a cla pàgina chè',
+'savearticle' => 'Sêlva la pàgina',
+'showpreview' => "Guêrda préma 'd salvêr",
+'showdiff' => 'Guêrda al diferèinsi',
+'anoneditwarning' => "'''Atensiòun''': l'ingrès an n'é mía stê fât. Al tó indirés 'IP' al gnirà scrét int la stòria di cambiamèint ed cla pàgina ché.",
+'anontalkpagetext' => "''Còsta  l'é la pàgina 'd discusiòun 'd un utèint sèinsa nòm  ch' an n'à mìa incòra fât un utèinsa o che in tót al manēri l' al drōva mìa.''
+Per arcgnòsrel l'é dòunca necesâri druvêr al nómer dal só indirés IP. J indirés IP a pōlen èser spartî da pió utèint. Se  t'é un utèint sèinsa nòm e 't pèins che i cumèint preşèint in cla pàgina ché an 't riguêrden mìa [[Special:UserLogin/signup|fà 'na nōva utèinsa]] o [[Special:UserLogin|vîn dèinter cun còla ch' ét gh' ê bèle]] per fêr in môd 'd an èser mìa cunfûş in futûr cun êter utèint sèinsa nòm.",
 'editing' => 'Cambiamèint ed $1',
-'yourdiff' => 'Differèinzi',
-'templatesused' => '{{PLURAL:$1|Modêl|Modêl}} usèdi in sta pàgina:',
+'yourdiff' => 'Diferèinsi',
+'templatesused' => '{{PLURAL:$1|Modèl druvê|ModÄ\93 druvê}} in cla pàgina ché:',
 
 # Preferences page
-'mypreferences' => 'AL mê preferèinzi',
-'yourrealname' => 'Al tô vér nàmm:',
+'mypreferences' => 'preferèinzi',
+'yourrealname' => 'Al tō nòm vèira:',
 'yourlanguage' => 'Léngua:',
 
 # Special:Log/newusers
-'newuserlogpage' => 'Regestér di nōv utèint',
+'newuserlogpage' => 'Regéster di nōv utèint',
 
 # Recent changes
 'recentchanges' => 'Ûltem cambiamèint',
-'diff' => 'diferèinzi',
+'diff' => 'diferèinsi',
 'hist' => 'stôria',
 
 # Recent changes linked
-'recentchangeslinked' => 'Mudéffic curelèdi',
-'recentchangeslinked-feed' => 'Mudéffic curelèdi',
-'recentchangeslinked-toolbox' => 'Mudéffic curelèdi',
+'recentchangeslinked' => 'Mudéfichi coleghêdi',
+'recentchangeslinked-feed' => 'Mudéfichi coleghêdi',
+'recentchangeslinked-toolbox' => 'Mudéfichi coleghêdi',
 
 # Upload
-'upload' => 'Carghèr un file',
-'filedesc' => "Ugêt d'al cambiamèint",
-'fileuploadsummary' => "Ugêt d'al cambiamèint:",
+'upload' => "Carghèr un 'file'",
+'filedesc' => 'Sûnt',
+'fileuploadsummary' => "Sûnt dal 'file':",
 
 # Special:ListFiles
-'listfiles_size' => 'Dimensiòun (bytes)',
+'listfiles_size' => "Dimensiòun in 'bytes'",
 
 # Random page
-'randompage' => 'Una pàgina a chès',
+'randompage' => "'Na pàgina a chêş",
 
 # Miscellaneous special pages
-'move' => 'Môv',
+'move' => 'Spôsta',
 
 # Special:Log
-'specialloguserlabel' => 'Utèint:',
+'specialloguserlabel' => 'Asiòun fâta da:',
 
 # Special:AllPages
-'allpages' => 'Tôt al pàgin',
+'allpages' => 'Tót al pàgini',
 
 # Watchlist
-'watchlist' => 'Al còsi ca guèrd',
-'watch' => 'Tîn a drê',
-'watchthispage' => "Tîn a drê a c'la pàgina chè",
+'watchlist' => 'I lavōr che guêrd',
+'watch' => 'Tîn a drē',
+'watchthispage' => 'Tîn a drē  a cla pàgina ché',
 
 # Delete
-'excontent' => "al cointgnû l'éra: '$1'",
-'excontentauthor' => "al cointgnû l'éra: '$1' (e l'ónic cuntribudôr l'éra '[[Special:Contributions/$2|$2]]')",
-'confirmdeletetext' => "Stèt per scanzlèr 'na pàgina o n'imàgin, insìmma a tòt la sô crunolugî dal database.
-Cunfermèr per piasèr ca saîv quàl che stèv par fêr, ca capîv al pussìbil counseguèinzi e ca stèv facènd quàst in confurmitê cun [[{{MediaWiki:Policy-url}}]].",
-'deletedtext' => '"$1" l\'è stê scanzlê.
-Guèrda $2 par vèdder la lésta d\'al pàgin ch\'i sun stèdi scanzlèdi di recèint.',
-'dellogpage' => 'Regestér dal scanzladûri',
-'deletionlog' => 'regéster dal scanzladûri',
+'excontent' => "al contgnû l'ēra: '$1'",
+'excontentauthor' => "al cuntgnû l'ēra: '$1' (e l'ónich avtōr l'ēra '[[Special:Contributions/$2|$2]]')",
+'confirmdeletetext' => "T'é drē scanşlêr 'na pàgina o na figûra, insèm a tóta la só stòria dal 'database'. Per piaşèir cunfērma ch'ét vō scanşlêrla, ch'ét sê j efèt ed la tó decişiòun e ch' la cumbîna cun al léni guîda dal [[{{MediaWiki:Policy-url}}]].",
+'deletedtext' => '"$1" l\'é stê scanşlê.
+Guèrda $2 per vèder la lésta d\'al pàgini ch\' în stèdi scanşlèdi da pôch tèimp.',
+'dellogpage' => 'Regéster dal scanşladûri',
+'deletionlog' => 'regéster dal scanşladûri',
 
 # Contributions
-'mycontris' => 'I mê cuntribùdi',
+'mycontris' => 'i mē lavōr',
 
 # What links here
-'whatlinkshere' => 'I pùnten chè',
+'whatlinkshere' => 'A pûnten ché',
 
 # Block/unblock
-'blocklink' => 'blòchel',
+'blocklink' => 'blôca',
 'contribslink' => "còl ch'l'à scrét",
 
 # Move page
-'movelogpage' => 'Regestér di muvimèint',
+'movelogpage' => 'Regéster di muvimèint',
 
 # Special:NewFiles
-'ilsubmit' => 'Zerca',
+'ilsubmit' => 'rca',
 
 # Special:SpecialPages
-'specialpages' => 'Pàgin specièli',
+'specialpages' => 'Pàgini specêli',
 
 );
index 88b729d..a00d2df 100644 (file)
@@ -460,6 +460,7 @@ $specialPageAliases = array(
        'Redirect'                  => array( 'Redirect' ),
        'ResetTokens'               => array( 'ResetTokens' ),
        'Revisiondelete'            => array( 'RevisionDelete' ),
+       'RunJobs'                   => array( 'RunJobs' ),
        'Search'                    => array( 'Search' ),
        'Shortpages'                => array( 'ShortPages' ),
        'Specialpages'              => array( 'SpecialPages' ),
@@ -694,7 +695,6 @@ future releases. Also note that since each list value is wrapped in a unique
 'tog-ccmeonemails'            => 'Send me copies of emails I send to other users',
 'tog-diffonly'                => 'Do not show page content below diffs',
 'tog-showhiddencats'          => 'Show hidden categories',
-'tog-noconvertlink'           => 'Disable link title conversion', # only translate this message to other languages if you have to change it
 'tog-norollbackdiff'          => 'Omit diff after performing a rollback',
 'tog-useeditwarning'          => 'Warn me when I leave an edit page with unsaved changes',
 'tog-prefershttps'            => 'Always use a secure connection when logged in',
@@ -808,32 +808,31 @@ future releases. Also note that since each list value is wrapped in a unique
 'and'           => '&#32;and',
 
 # Cologne Blue skin
-'qbfind'         => 'Find',
-'qbbrowse'       => 'Browse',
-'qbedit'         => 'Edit',
-'qbpageoptions'  => 'This page',
-'qbmyoptions'    => 'My pages',
-'faq'            => 'FAQ',
-'faqpage'        => 'Project:FAQ',
-'sitetitle'      => '{{SITENAME}}', # do not translate or duplicate this message to other languages
-'sitesubtitle'   => '', # do not translate or duplicate this message to other languages
+'qbfind'        => 'Find',
+'qbbrowse'      => 'Browse',
+'qbedit'        => 'Edit',
+'qbpageoptions' => 'This page',
+'qbmyoptions'   => 'My pages',
+'faq'           => 'FAQ',
+'faqpage'       => 'Project:FAQ',
+'sitetitle'     => '{{SITENAME}}', # do not translate or duplicate this message to other languages
+'sitesubtitle'  => '', # do not translate or duplicate this message to other languages
 
 # Vector skin
-'vector-action-addsection'       => 'Add topic',
-'vector-action-delete'           => 'Delete',
-'vector-action-move'             => 'Move',
-'vector-action-protect'          => 'Protect',
-'vector-action-undelete'         => 'Undelete',
-'vector-action-unprotect'        => 'Change protection',
-'vector-simplesearch-preference' => 'Enable simplified search bar (Vector skin only)',
-'vector-view-create'             => 'Create',
-'vector-view-edit'               => 'Edit',
-'vector-view-history'            => 'View history',
-'vector-view-view'               => 'Read',
-'vector-view-viewsource'         => 'View source',
-'actions'                        => 'Actions',
-'namespaces'                     => 'Namespaces',
-'variants'                       => 'Variants',
+'vector-action-addsection' => 'Add topic',
+'vector-action-delete'     => 'Delete',
+'vector-action-move'       => 'Move',
+'vector-action-protect'    => 'Protect',
+'vector-action-undelete'   => 'Undelete',
+'vector-action-unprotect'  => 'Change protection',
+'vector-view-create'       => 'Create',
+'vector-view-edit'         => 'Edit',
+'vector-view-history'      => 'View history',
+'vector-view-view'         => 'Read',
+'vector-view-viewsource'   => 'View source',
+'actions'                  => 'Actions',
+'namespaces'               => 'Namespaces',
+'variants'                 => 'Variants',
 
 'navigation-heading' => 'Navigation menu',
 'errorpagetitle'     => 'Error',
@@ -972,8 +971,6 @@ See [[Special:Version|version page]].',
 'red-link-title'               => '$1 (page does not exist)',
 'sort-descending'              => 'Sort descending',
 'sort-ascending'               => 'Sort ascending',
-'interlanguage-link-title'     => '$1 – $2', # only translate this message to other languages if you have to change it
-'interlanguage-link-title-langonly' => '$1', # do not translate or duplicate this message to other languages
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main'      => 'Page',
@@ -1063,7 +1060,7 @@ Changes to this page will affect the appearance of the user interface for other
 To add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.',
 'cascadeprotected'              => 'This page has been protected from editing because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the "cascading" option turned on:
 $2',
-'namespaceprotected'            => "You do not have permission to edit pages in the <strong>$1</strong> namespace.",
+'namespaceprotected'            => 'You do not have permission to edit pages in the <strong>$1</strong> namespace.',
 'customcssprotected'            => "You do not have permission to edit this CSS page because it contains another user's personal settings.",
 'customjsprotected'             => "You do not have permission to edit this JavaScript page because it contains another user's personal settings.",
 'mycustomcssprotected'          => 'You do not have permission to edit this CSS page.',
@@ -1083,14 +1080,14 @@ The administrator who locked it offered this explanation: "$3".',
 'exception-nologin-text-manual' => 'Please $1 to be able to access this page or action.',
 
 # Virus scanner
-'virus-badscanner'     => "Bad configuration: Unknown virus scanner: <em>$1</em>",
+'virus-badscanner'     => 'Bad configuration: Unknown virus scanner: <em>$1</em>',
 'virus-scanfailed'     => 'scan failed (code $1)',
 'virus-unknownscanner' => 'unknown antivirus:',
 
 # Login and logout pages
-'logouttext'                      => "<strong>You are now logged out.</strong>
+'logouttext'                      => '<strong>You are now logged out.</strong>
 
-Note that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
+Note that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.',
 'welcomeuser'                     => 'Welcome, $1!',
 'welcomecreation-msg'             => 'Your account has been created.
 You can change your {{SITENAME}} [[Special:Preferences|preferences]] if you wish.',
@@ -1130,8 +1127,8 @@ You can change your {{SITENAME}} [[Special:Preferences|preferences]] if you wish
 'gotaccountlink'                  => 'Log in',
 'userlogin-resetlink'             => 'Forgotten your login details?',
 'userlogin-resetpassword-link'    => 'Forgot your password?',
-'helplogin-url'                   => 'Help:Logging in',
-'userlogin-helplink'              => '[[{{MediaWiki:helplogin-url}}|Help with logging in]]',
+'helplogin-url'                   => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Logging_in',
+'userlogin-helplink2'              => 'Help with logging in',
 'userlogin-loggedin'              => 'You are already logged in as {{GENDER:$1|$1}}.
 Use the form below to log in as another user.',
 'userlogin-createanother'         => 'Create another account',
@@ -1179,7 +1176,7 @@ Ensure you have cookies enabled, reload this page and try again.',
 'nocookiesforlogin'               => '{{int:nocookieslogin}}', # only translate this message to other languages if you have to change it
 'noname'                          => 'You have not specified a valid username.',
 'loginsuccesstitle'               => 'Login successful',
-'loginsuccess'                    => "<strong>You are now logged in to {{SITENAME}} as \"\$1\".</strong>",
+'loginsuccess'                    => '<strong>You are now logged in to {{SITENAME}} as "$1".</strong>',
 'nosuchuser'                      => 'There is no user by the name "$1".
 Usernames are case sensitive.
 Check your spelling, or [[Special:UserLogin/signup|create a new account]].',
@@ -1255,6 +1252,10 @@ Please wait $1 before trying again.',
 'suspicious-userlogout'           => 'Your request to log out was denied because it looks like it was sent by a broken browser or caching proxy.',
 'createacct-another-realname-tip' => 'Real name is optional.
 If you choose to provide it, this will be used for giving the user attribution for their work.',
+'pt-login'                        => 'Log in',
+'pt-login-button'                 => 'Log in',
+'pt-createaccount'                => 'Create account',
+'pt-userlogout'                   => 'Log out',
 
 # Email sending
 'pear-mail-error'        => '$1', # do not translate or duplicate this message to other languages
@@ -1266,10 +1267,7 @@ If you choose to provide it, this will be used for giving the user attribution f
 # Change password dialog
 'changepassword'            => 'Change password',
 'changepassword-summary'    => '', # do not translate or duplicate this message to other languages
-'changepassword-throttled'  => 'You have made too many recent login attempts.
-Please wait $1 before trying again.',
-'resetpass_announce'        => 'You logged in with a temporary emailed code.
-To finish logging in, you must set a new password here:',
+'resetpass_announce'        => 'To finish logging in, you must set a new password.',
 'resetpass_text'            => '<!-- Add text here -->', # only translate this message to other languages if you have to change it
 'resetpass_header'          => 'Change account password',
 'oldpassword'               => 'Old password:',
@@ -1277,14 +1275,24 @@ To finish logging in, you must set a new password here:',
 'retypenew'                 => 'Retype new password:',
 'resetpass_submit'          => 'Set password and log in',
 'changepassword-success'    => 'Your password has been changed successfully!',
+'changepassword-throttled'  => 'You have made too many recent login attempts.
+Please wait $1 before trying again.',
 'resetpass_forbidden'       => 'Passwords cannot be changed',
 'resetpass-no-info'         => 'You must be logged in to access this page directly.',
 'resetpass-submit-loggedin' => 'Change password',
 'resetpass-submit-cancel'   => 'Cancel',
 'resetpass-wrong-oldpass'   => 'Invalid temporary or current password.
 You may have already successfully changed your password or requested a new temporary password.',
+'resetpass-recycled'        => 'Please reset your password to something other than your current password.',
+'resetpass-temp-emailed'    => 'You logged in with a temporary emailed code.
+To finish logging in, you must set a new password here:',
 'resetpass-temp-password'   => 'Temporary password:',
 'resetpass-abort-generic'   => 'Password change has been aborted by an extension.',
+'resetpass-expired'         => 'Your password has expired. Please set a new password to log in.',
+'resetpass-expired-soft'    => 'Your password has expired and needs to be reset. Please choose a new password now, or click "{{int:resetpass-submit-cancel}}" to reset it later.',
+'resetpass-validity-soft'     => 'Your password is not valid: $1
+
+Please choose a new password now, or click "{{int:resetpass-submit-cancel}}" to reset it later.',
 
 # Special:PasswordReset
 'passwordreset'                    => 'Reset password',
@@ -1327,17 +1335,17 @@ Temporary password: $2',
 'passwordreset-emailerror-capture' => 'A password reset email was generated, which is shown below, but sending it to the {{GENDER:$2|user}} failed: $1',
 
 # Special:ChangeEmail
-'changeemail'          => 'Change email address',
-'changeemail-summary'  => '', # do not translate or duplicate this message to other languages
-'changeemail-header'   => 'Change account email address',
-'changeemail-text'     => 'Complete this form to change your email address. You will need to enter your password to confirm this change.',
-'changeemail-no-info'  => 'You must be logged in to access this page directly.',
-'changeemail-oldemail' => 'Current email address:',
-'changeemail-newemail' => 'New email address:',
-'changeemail-none'     => '(none)',
-'changeemail-password' => 'Your {{SITENAME}} password:',
-'changeemail-submit'   => 'Change email',
-'changeemail-cancel'   => 'Cancel',
+'changeemail'           => 'Change email address',
+'changeemail-summary'   => '', # do not translate or duplicate this message to other languages
+'changeemail-header'    => 'Change account email address',
+'changeemail-text'      => 'Complete this form to change your email address. You will need to enter your password to confirm this change.',
+'changeemail-no-info'   => 'You must be logged in to access this page directly.',
+'changeemail-oldemail'  => 'Current email address:',
+'changeemail-newemail'  => 'New email address:',
+'changeemail-none'      => '(none)',
+'changeemail-password'  => 'Your {{SITENAME}} password:',
+'changeemail-submit'    => 'Change email',
+'changeemail-cancel'    => 'Cancel',
 'changeemail-throttled' => 'You have made too many login attempts.
 Please wait $1 before trying again.',
 
@@ -1376,27 +1384,27 @@ You should do it if you accidentally shared them with someone or if your account
 'hr_tip'          => 'Horizontal line (use sparingly)',
 
 # Edit pages
-'summary'                          => 'Summary:',
-'subject'                          => 'Subject/headline:',
-'minoredit'                        => 'This is a minor edit',
-'watchthis'                        => 'Watch this page',
-'savearticle'                      => 'Save page',
-'preview'                          => 'Preview',
-'showpreview'                      => 'Show preview',
-'showlivepreview'                  => 'Live preview',
-'showdiff'                         => 'Show changes',
-'anoneditwarning'                  => "<strong>Warning:</strong> You are not logged in.
+'summary'                                  => 'Summary:',
+'subject'                                  => 'Subject/headline:',
+'minoredit'                                => 'This is a minor edit',
+'watchthis'                                => 'Watch this page',
+'savearticle'                              => 'Save page',
+'preview'                                  => 'Preview',
+'showpreview'                              => 'Show preview',
+'showlivepreview'                          => 'Live preview',
+'showdiff'                                 => 'Show changes',
+'anoneditwarning'                          => "<strong>Warning:</strong> You are not logged in.
 Your IP address will be recorded in this page's edit history.",
-'anonpreviewwarning'               => "<em>You are not logged in. Saving will record your IP address in this page's edit history.</em>",
-'missingsummary'                   => "<strong>Reminder:</strong> You have not provided an edit summary.
-If you click \"{{int:savearticle}}\" again, your edit will be saved without one.",
-'missingcommenttext'               => 'Please enter a comment below.',
-'missingcommentheader'             => "<strong>Reminder:</strong> You have not provided a subject/headline for this comment.
-If you click \"{{int:savearticle}}\" again, your edit will be saved without one.",
-'summary-preview'                  => 'Summary preview:',
-'subject-preview'                  => 'Subject/headline preview:',
-'blockedtitle'                     => 'User is blocked',
-'blockedtext'                      => "<strong>Your username or IP address has been blocked.</strong>
+'anonpreviewwarning'                       => "<em>You are not logged in. Saving will record your IP address in this page's edit history.</em>",
+'missingsummary'                           => '<strong>Reminder:</strong> You have not provided an edit summary.
+If you click "{{int:savearticle}}" again, your edit will be saved without one.',
+'missingcommenttext'                       => 'Please enter a comment below.',
+'missingcommentheader'                     => '<strong>Reminder:</strong> You have not provided a subject/headline for this comment.
+If you click "{{int:savearticle}}" again, your edit will be saved without one.',
+'summary-preview'                          => 'Summary preview:',
+'subject-preview'                          => 'Subject/headline preview:',
+'blockedtitle'                             => 'User is blocked',
+'blockedtext'                              => '<strong>Your username or IP address has been blocked.</strong>
 
 The block was made by $1.
 The reason given is <em>$2</em>.
@@ -1406,10 +1414,10 @@ The reason given is <em>$2</em>.
 * Intended blockee: $7
 
 You can contact $1 or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the block.
-You cannot use the \"email this user\" feature unless a valid email address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.
+You cannot use the "email this user" feature unless a valid email address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.
 Your current IP address is $3, and the block ID is #$5.
-Please include all above details in any queries you make.",
-'autoblockedtext'                  => "Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.
+Please include all above details in any queries you make.',
+'autoblockedtext'                          => 'Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.
 The reason given is:
 
 :<em>$2</em>
@@ -1420,168 +1428,168 @@ The reason given is:
 
 You may contact $1 or one of the other [[{{MediaWiki:Grouppage-sysop}}|administrators]] to discuss the block.
 
-Note that you may not use the \"email this user\" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]] and you have not been blocked from using it.
+Note that you may not use the "email this user" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]] and you have not been blocked from using it.
 
 Your current IP address is $3, and the block ID is #$5.
-Please include all above details in any queries you make.",
-'blockednoreason'                  => 'no reason given',
-'whitelistedittext'                => 'Please $1 to edit pages.',
-'confirmedittext'                  => 'You must confirm your email address before editing pages.
+Please include all above details in any queries you make.',
+'blockednoreason'                          => 'no reason given',
+'whitelistedittext'                        => 'Please $1 to edit pages.',
+'confirmedittext'                          => 'You must confirm your email address before editing pages.
 Please set and validate your email address through your [[Special:Preferences|user preferences]].',
-'nosuchsectiontitle'               => 'Cannot find section',
-'nosuchsectiontext'                => 'You tried to edit a section that does not exist.
+'nosuchsectiontitle'                       => 'Cannot find section',
+'nosuchsectiontext'                        => 'You tried to edit a section that does not exist.
 It may have been moved or deleted while you were viewing the page.',
-'loginreqtitle'                    => 'Login required',
-'loginreqlink'                     => 'log in',
-'loginreqpagetext'                 => 'Please $1 to view other pages.',
-'accmailtitle'                     => 'Password sent',
-'accmailtext'                      => "A randomly generated password for [[User talk:$1|$1]] has been sent to $2. It can be changed on the <em>[[Special:ChangePassword|change password]]</em> page upon logging in.",
-'newarticle'                       => '(New)',
-'newarticletext'                   => "You have followed a link to a page that does not exist yet.
+'loginreqtitle'                            => 'Login required',
+'loginreqlink'                             => 'log in',
+'loginreqpagetext'                         => 'Please $1 to view other pages.',
+'accmailtitle'                             => 'Password sent',
+'accmailtext'                              => 'A randomly generated password for [[User talk:$1|$1]] has been sent to $2. It can be changed on the <em>[[Special:ChangePassword|change password]]</em> page upon logging in.',
+'newarticle'                               => '(New)',
+'newarticletext'                           => "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 [[{{MediaWiki:Helppage}}|help page]] for more info).
 If you are here by mistake, click your browser's <strong>back</strong> button.",
-'newarticletextanon'               => '{{int:newarticletext}}', # do not translate or duplicate this message to other languages
-'talkpagetext'                     => '<!-- MediaWiki:talkpagetext -->', # do not translate or duplicate this message to other languages
-'anontalkpagetext'                 => "----
+'newarticletextanon'                       => '{{int:newarticletext}}', # do not translate or duplicate this message to other languages
+'talkpagetext'                             => '<!-- MediaWiki:talkpagetext -->', # do not translate or duplicate this message to other languages
+'anontalkpagetext'                         => '----
 <em>This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.</em>
 We therefore have to use the numerical IP address to identify him/her.
 Such an IP address can be shared by several users.
-If you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:UserLogin/signup|create an account]] or [[Special:UserLogin|log in]] to avoid future confusion with other anonymous users.",
-'noarticletext'                    => 'There is currently no text in this page.
+If you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:UserLogin/signup|create an account]] or [[Special:UserLogin|log in]] to avoid future confusion with other anonymous users.',
+'noarticletext'                            => 'There is currently no text in this page.
 You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],
 or [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]</span>.',
-'noarticletext-nopermission'       => 'There is currently no text in this page.
+'noarticletext-nopermission'               => 'There is currently no text in this page.
 You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages, or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>, but you do not have permission to create this page.',
-'noarticletextanon'                => '{{int:noarticletext}}', # do not translate or duplicate this message to other languages
-'missing-revision'                 => 'The revision #$1 of the page named "{{PAGENAME}}" does not exist.
+'noarticletextanon'                        => '{{int:noarticletext}}', # do not translate or duplicate this message to other languages
+'missing-revision'                         => 'The revision #$1 of the page named "{{PAGENAME}}" does not exist.
 
 This is usually caused by following an outdated history link to a page that has been deleted.
 Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].',
-'userpage-userdoesnotexist'        => 'User account "$1" is not registered.
+'userpage-userdoesnotexist'                => 'User account "$1" is not registered.
 Please check if you want to create/edit this page.',
-'userpage-userdoesnotexist-view'   => 'User account "$1" is not registered.',
-'blocked-notice-logextract'        => 'This user is currently blocked.
+'userpage-userdoesnotexist-view'           => 'User account "$1" is not registered.',
+'blocked-notice-logextract'                => 'This user is currently blocked.
 The latest block log entry is provided below for reference:',
-'clearyourcache'                   => "<strong>Note:</strong> After saving, you may have to bypass your browser's cache to see the changes.
+'clearyourcache'                           => "<strong>Note:</strong> After saving, you may have to bypass your browser's cache to see the changes.
 * <strong>Firefox / Safari:</strong> Hold <em>Shift</em> while clicking <em>Reload</em>, or press either <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> on a Mac)
 * <strong>Google Chrome:</strong> Press <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> on a Mac)
 * <strong>Internet Explorer:</strong> Hold <em>Ctrl</em> while clicking <em>Refresh</em>, or press <em>Ctrl-F5</em>
 * <strong>Opera:</strong> Clear the cache in <em>Tools → Preferences</em>",
-'usercssyoucanpreview'             => "<strong>Tip:</strong> Use the \"{{int:showpreview}}\" button to test your new CSS before saving.",
-'userjsyoucanpreview'              => "<strong>Tip:</strong> Use the \"{{int:showpreview}}\" button to test your new JavaScript before saving.",
-'usercsspreview'                   => "<strong>Remember that you are only previewing your user CSS.
-It has not yet been saved!</strong>",
-'userjspreview'                    => "<strong>Remember that you are only testing/previewing your user JavaScript.
-It has not yet been saved!</strong>",
-'sitecsspreview'                   => "<strong>Remember that you are only previewing this CSS.
-It has not yet been saved!</strong>",
-'sitejspreview'                    => "<strong>Remember that you are only previewing this JavaScript code.
-It has not yet been saved!</strong>",
-'userinvalidcssjstitle'            => "<strong>Warning:</strong> There is no skin \"\$1\".
-Custom .css and .js pages use a lowercase title, e.g. {{ns:user}}:Foo/vector.css as opposed to {{ns:user}}:Foo/Vector.css.",
-'updated'                          => '(Updated)',
-'note'                             => "<strong>Note:</strong>",
-'previewnote'                      => "<strong>Remember that this is only a preview.</strong>
-Your changes have not yet been saved!",
-'continue-editing'                 => 'Go to editing area',
-'previewconflict'                  => 'This preview reflects the text in the upper text editing area as it will appear if you choose to save.',
-'session_fail_preview'             => "<strong>Sorry! We could not process your edit due to a loss of session data.</strong>
+'usercssyoucanpreview'                     => '<strong>Tip:</strong> Use the "{{int:showpreview}}" button to test your new CSS before saving.',
+'userjsyoucanpreview'                      => '<strong>Tip:</strong> Use the "{{int:showpreview}}" button to test your new JavaScript before saving.',
+'usercsspreview'                           => '<strong>Remember that you are only previewing your user CSS.
+It has not yet been saved!</strong>',
+'userjspreview'                            => '<strong>Remember that you are only testing/previewing your user JavaScript.
+It has not yet been saved!</strong>',
+'sitecsspreview'                           => '<strong>Remember that you are only previewing this CSS.
+It has not yet been saved!</strong>',
+'sitejspreview'                            => '<strong>Remember that you are only previewing this JavaScript code.
+It has not yet been saved!</strong>',
+'userinvalidcssjstitle'                    => '<strong>Warning:</strong> There is no skin "$1".
+Custom .css and .js pages use a lowercase title, e.g. {{ns:user}}:Foo/vector.css as opposed to {{ns:user}}:Foo/Vector.css.',
+'updated'                                  => '(Updated)',
+'note'                                     => '<strong>Note:</strong>',
+'previewnote'                              => '<strong>Remember that this is only a preview.</strong>
+Your changes have not yet been saved!',
+'continue-editing'                         => 'Go to editing area',
+'previewconflict'                          => 'This preview reflects the text in the upper text editing area as it will appear if you choose to save.',
+'session_fail_preview'                     => '<strong>Sorry! We could not process your edit due to a loss of session data.</strong>
 Please try again.
-If it still does not work, try [[Special:UserLogout|logging out]] and logging back in.",
-'session_fail_preview_html'        => "<strong>Sorry! We could not process your edit due to a loss of session data.</strong>
+If it still does not work, try [[Special:UserLogout|logging out]] and logging back in.',
+'session_fail_preview_html'                => '<strong>Sorry! We could not process your edit due to a loss of session data.</strong>
 
 <em>Because {{SITENAME}} has raw HTML enabled, the preview is hidden as a precaution against JavaScript attacks.</em>
 
 <strong>If this is a legitimate edit attempt, please try again.</strong>
-If it still does not work, try [[Special:UserLogout|logging out]] and logging back in.",
-'token_suffix_mismatch'            => "<strong>Your edit has been rejected because your client mangled the punctuation characters in the edit token.</strong>
+If it still does not work, try [[Special:UserLogout|logging out]] and logging back in.',
+'token_suffix_mismatch'                    => '<strong>Your edit has been rejected because your client mangled the punctuation characters in the edit token.</strong>
 The edit has been rejected to prevent corruption of the page text.
-This sometimes happens when you are using a buggy web-based anonymous proxy service.",
-'edit_form_incomplete'             => "<strong>Some parts of the edit form did not reach the server; double-check that your edits are intact and try again.</strong>",
-'editing'                          => 'Editing $1',
-'creating'                         => 'Creating $1',
-'editingsection'                   => 'Editing $1 (section)',
-'editingcomment'                   => 'Editing $1 (new section)',
-'editconflict'                     => 'Edit conflict: $1',
-'explainconflict'                  => "Someone else has changed this page since you started editing it.
+This sometimes happens when you are using a buggy web-based anonymous proxy service.',
+'edit_form_incomplete'                     => '<strong>Some parts of the edit form did not reach the server; double-check that your edits are intact and try again.</strong>',
+'editing'                                  => 'Editing $1',
+'creating'                                 => 'Creating $1',
+'editingsection'                           => 'Editing $1 (section)',
+'editingcomment'                           => 'Editing $1 (new section)',
+'editconflict'                             => 'Edit conflict: $1',
+'explainconflict'                          => 'Someone else has changed this page since you started editing it.
 The upper text area contains the page text as it currently exists.
 Your changes are shown in the lower text area.
 You will have to merge your changes into the existing text.
-<strong>Only</strong> the text in the upper text area will be saved when you press \"{{int:savearticle}}\".",
-'yourtext'                         => 'Your text',
-'storedversion'                    => 'Stored revision',
-'nonunicodebrowser'                => "<strong>Warning: Your browser is not Unicode compliant.</strong>
-A workaround is in place to allow you to safely edit pages: Non-ASCII characters will appear in the edit box as hexadecimal codes.",
-'editingold'                       => "<strong>Warning: You are editing an out-of-date revision of this page.</strong>
-If you save it, any changes made since this revision will be lost.",
-'yourdiff'                         => 'Differences',
-'copyrightwarning'                 => "Please note that all contributions to {{SITENAME}} are considered to be released under the $2 (see $1 for details).
+<strong>Only</strong> the text in the upper text area will be saved when you press "{{int:savearticle}}".',
+'yourtext'                                 => 'Your text',
+'storedversion'                            => 'Stored revision',
+'nonunicodebrowser'                        => '<strong>Warning: Your browser is not Unicode compliant.</strong>
+A workaround is in place to allow you to safely edit pages: Non-ASCII characters will appear in the edit box as hexadecimal codes.',
+'editingold'                               => '<strong>Warning: You are editing an out-of-date revision of this page.</strong>
+If you save it, any changes made since this revision will be lost.',
+'yourdiff'                                 => 'Differences',
+'copyrightwarning'                         => 'Please note that all contributions to {{SITENAME}} are considered to be released under the $2 (see $1 for details).
 If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.<br />
 You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
-<strong>Do not submit copyrighted work without permission!</strong>",
-'copyrightwarning2'                => "Please note that all contributions to {{SITENAME}} may be edited, altered, or removed by other contributors.
+<strong>Do not submit copyrighted work without permission!</strong>',
+'copyrightwarning2'                        => 'Please note that all contributions to {{SITENAME}} may be edited, altered, or removed by other contributors.
 If you do not want your writing to be edited mercilessly, then do not submit it here.<br />
 You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see $1 for details).
-<strong>Do not submit copyrighted work without permission!</strong>",
-'editpage-head-copy-warn'          => '-', # do not translate or duplicate this message to other languages
-'editpage-tos-summary'             => '-', # do not translate or duplicate this message to other languages
-'longpage-hint'                    => '-', # do not translate or duplicate this message to other languages
-'longpageerror'                    => "<strong>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}}.</strong>
-It cannot be saved.",
-'readonlywarning'                  => "<strong>Warning: The database has been locked for maintenance, so you will not be able to save your edits right now.</strong>
+<strong>Do not submit copyrighted work without permission!</strong>',
+'editpage-head-copy-warn'                  => '-', # do not translate or duplicate this message to other languages
+'editpage-tos-summary'                     => '-', # do not translate or duplicate this message to other languages
+'longpage-hint'                            => '-', # do not translate or duplicate this message to other languages
+'longpageerror'                            => '<strong>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}}.</strong>
+It cannot be saved.',
+'readonlywarning'                          => '<strong>Warning: The database has been locked for maintenance, so you will not be able to save your edits right now.</strong>
 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'             => "<strong>Warning: This page has been protected so that only users with administrator privileges can edit it.</strong>
-The latest log entry is provided below for reference:",
-'semiprotectedpagewarning'         => "<strong>Note:</strong> This page has been protected so that only registered users can edit it.
-The latest log entry is provided below for reference:",
-'cascadeprotectedwarning'          => "<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can edit it because it is included in the following cascade-protected {{PLURAL:$1|page|pages}}:",
-'titleprotectedwarning'            => "<strong>Warning: This page has been protected so that [[Special:ListGroupRights|specific rights]] are needed to create it.</strong>
-The latest log entry is provided below for reference:",
-'templatesused'                    => '{{PLURAL:$1|Template|Templates}} used on this page:',
-'templatesusedpreview'             => '{{PLURAL:$1|Template|Templates}} used in this preview:',
-'templatesusedsection'             => '{{PLURAL:$1|Template|Templates}} used in this section:',
-'template-protected'               => '(protected)',
-'template-semiprotected'           => '(semi-protected)',
-'hiddencategories'                 => 'This page is a member of {{PLURAL:$1|1 hidden category|$1 hidden categories}}:',
-'edittools'                        => '<!-- Text here will be shown below edit and upload forms. -->', # only translate this message to other languages if you have to change it
-'edittools-upload'                 => '-', # only translate this message to other languages if you have to change it
-'nocreatetext'                     => '{{SITENAME}} has restricted the ability to create new pages.
+The administrator who locked it offered this explanation: $1',
+'protectedpagewarning'                     => '<strong>Warning: This page has been protected so that only users with administrator privileges can edit it.</strong>
+The latest log entry is provided below for reference:',
+'semiprotectedpagewarning'                 => '<strong>Note:</strong> This page has been protected so that only registered users can edit it.
+The latest log entry is provided below for reference:',
+'cascadeprotectedwarning'                  => '<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can edit it because it is included in the following cascade-protected {{PLURAL:$1|page|pages}}:',
+'titleprotectedwarning'                    => '<strong>Warning: This page has been protected so that [[Special:ListGroupRights|specific rights]] are needed to create it.</strong>
+The latest log entry is provided below for reference:',
+'templatesused'                            => '{{PLURAL:$1|Template|Templates}} used on this page:',
+'templatesusedpreview'                     => '{{PLURAL:$1|Template|Templates}} used in this preview:',
+'templatesusedsection'                     => '{{PLURAL:$1|Template|Templates}} used in this section:',
+'template-protected'                       => '(protected)',
+'template-semiprotected'                   => '(semi-protected)',
+'hiddencategories'                         => 'This page is a member of {{PLURAL:$1|1 hidden category|$1 hidden categories}}:',
+'edittools'                                => '<!-- Text here will be shown below edit and upload forms. -->', # only translate this message to other languages if you have to change it
+'edittools-upload'                         => '-', # only translate this message to other languages if you have to change it
+'nocreatetext'                             => '{{SITENAME}} has restricted the ability to create new pages.
 You can go back and edit an existing page, or [[Special:UserLogin|log in or create an account]].',
-'nocreate-loggedin'                => 'You do not have permission to create new pages.',
-'sectioneditnotsupported-title'    => 'Section editing not supported',
-'sectioneditnotsupported-text'     => 'Section editing is not supported in this page.',
-'permissionserrors'                => 'Permission error',
-'permissionserrorstext'            => 'You do not have permission to do that, for the following {{PLURAL:$1|reason|reasons}}:',
-'permissionserrorstext-withaction' => 'You do not have permission to $2, for the following {{PLURAL:$1|reason|reasons}}:',
-'recreate-moveddeleted-warn'       => "<strong>Warning: You are recreating a page that was previously deleted.</strong>
+'nocreate-loggedin'                        => 'You do not have permission to create new pages.',
+'sectioneditnotsupported-title'            => 'Section editing not supported',
+'sectioneditnotsupported-text'             => 'Section editing is not supported in this page.',
+'permissionserrors'                        => 'Permission error',
+'permissionserrorstext'                    => 'You do not have permission to do that, for the following {{PLURAL:$1|reason|reasons}}:',
+'permissionserrorstext-withaction'         => 'You do not have permission to $2, for the following {{PLURAL:$1|reason|reasons}}:',
+'recreate-moveddeleted-warn'               => '<strong>Warning: You are recreating a page that was previously deleted.</strong>
 
 You should consider whether it is appropriate to continue editing this page.
-The deletion and move log for this page are provided here for convenience:",
-'moveddeleted-notice'              => 'This page has been deleted.
+The deletion and move log for this page are provided here for convenience:',
+'moveddeleted-notice'                      => 'This page has been deleted.
 The deletion and move log for the page are provided below for reference.',
-'log-fulllog'                      => 'View full log',
-'edit-hook-aborted'                => 'Edit aborted by hook.
+'log-fulllog'                              => 'View full log',
+'edit-hook-aborted'                        => 'Edit aborted by hook.
 It gave no explanation.',
-'edit-gone-missing'                => 'Could not update the page.
+'edit-gone-missing'                        => 'Could not update the page.
 It appears to have been deleted.',
-'edit-conflict'                    => 'Edit conflict.',
-'edit-no-change'                   => 'Your edit was ignored because no change was made to the text.',
-'postedit-confirmation'            => 'Your edit was saved.',
-'edit-already-exists'              => 'Could not create a new page.
+'edit-conflict'                            => 'Edit conflict.',
+'edit-no-change'                           => 'Your edit was ignored because no change was made to the text.',
+'postedit-confirmation'                    => 'Your edit was saved.',
+'edit-already-exists'                      => 'Could not create a new page.
 It already exists.',
-'addsection-preload'               => '', # do not translate or duplicate this message to other languages
-'addsection-editintro'             => '', # do not translate or duplicate this message to other languages
-'defaultmessagetext'               => 'Default message text',
-'content-failed-to-parse'          => 'Failed to parse $2 content for $1 model: $3',
-'invalid-content-data'             => 'Invalid content data',
-'content-not-allowed-here'         => '"$1" content is not allowed on page [[$2]]',
-'editwarning-warning'              => 'Leaving this page may cause you to lose any changes you have made.
+'addsection-preload'                       => '', # do not translate or duplicate this message to other languages
+'addsection-editintro'                     => '', # do not translate or duplicate this message to other languages
+'defaultmessagetext'                       => 'Default message text',
+'content-failed-to-parse'                  => 'Failed to parse $2 content for $1 model: $3',
+'invalid-content-data'                     => 'Invalid content data',
+'content-not-allowed-here'                 => '"$1" content is not allowed on page [[$2]]',
+'editwarning-warning'                      => 'Leaving this page may cause you to lose any changes you have made.
 If you are logged in, you can disable this warning in the "{{int:prefs-editing}}" section of your preferences.',
-'editpage-notsupportedcontentformat-title'=> 'Content format not supported',
-'editpage-notsupportedcontentformat-text' => 'The content format $1 is not supported by the content model $2.',
+'editpage-notsupportedcontentformat-title' => 'Content format not supported',
+'editpage-notsupportedcontentformat-text'  => 'The content format $1 is not supported by the content model $2.',
 
 # Content models
 'content-model-wikitext'   => 'wikitext',
@@ -1590,15 +1598,15 @@ If you are logged in, you can disable this warning in the "{{int:prefs-editing}}
 'content-model-css'        => 'CSS',
 
 # Parser/template warnings
-'expensive-parserfunction-warning'        => "<strong>Warning:</strong> This page contains too many expensive parser function calls.
+'expensive-parserfunction-warning'        => '<strong>Warning:</strong> This page contains too many expensive parser function calls.
 
-It should have less than $2 {{PLURAL:$2|call|calls}}, there {{PLURAL:$1|is now $1 call|are now $1 calls}}.",
+It should have less than $2 {{PLURAL:$2|call|calls}}, there {{PLURAL:$1|is now $1 call|are now $1 calls}}.',
 'expensive-parserfunction-category'       => 'Pages with too many expensive parser function calls',
-'post-expand-template-inclusion-warning'  => "<strong>Warning:</strong> Template include size is too large.
-Some templates will not be included.",
+'post-expand-template-inclusion-warning'  => '<strong>Warning:</strong> Template include size is too large.
+Some templates will not be included.',
 'post-expand-template-inclusion-category' => 'Pages where template include size is exceeded',
-'post-expand-template-argument-warning'   => "<strong>Warning:</strong> This page contains at least one template argument that has a too large expansion size.
-These arguments have been omitted.",
+'post-expand-template-argument-warning'   => '<strong>Warning:</strong> This page contains at least one template argument that has a too large expansion size.
+These arguments have been omitted.',
 'post-expand-template-argument-category'  => 'Pages containing omitted template arguments',
 'parser-template-loop-warning'            => 'Template loop detected: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Template recursion depth limit exceeded ($1)',
@@ -1621,14 +1629,14 @@ Please check the comparison below to verify that this is what you want to do, an
 'undo-summary-username-hidden' => 'Undo revision $1 by a hidden user',
 
 # Account creation failure
-'cantcreateaccounttitle' => 'Cannot create account',
+'cantcreateaccounttitle'       => 'Cannot create account',
+'cantcreateaccount-text'       => 'Account creation from this IP address (<strong>$1</strong>) has been blocked by [[User:$3|$3]].
+
+The reason given by $3 is <em>$2</em>',
 'cantcreateaccount-range-text' => "Account creation from IP addresses in the range '''$1''', which includes your IP address ('''$4'''), has been blocked by [[User:$3|$3]].
 
 The reason given by $3 is ''$2''",
-'cantcreateaccount-text' => "Account creation from this IP address (<strong>$1</strong>) has been blocked by [[User:$3|$3]].
-
-The reason given by $3 is <em>$2</em>",
-'createaccount-hook-aborted' => '$1', # do not translate or duplicate this message to other languages
+'createaccount-hook-aborted'   => '$1', # do not translate or duplicate this message to other languages
 
 # History pages
 'viewpagelogs'           => 'View logs for this page',
@@ -1647,8 +1655,8 @@ The reason given by $3 is <em>$2</em>",
 'last'                   => 'prev',
 'page_first'             => 'first',
 'page_last'              => 'last',
-'histlegend'             => "Diff selection: Mark the radio boxes of the revisions to compare and hit enter or the button at the bottom.<br />
-Legend: <strong>({{int:cur}})</strong> = difference with latest revision, <strong>({{int:last}})</strong> = difference with preceding revision, <strong>{{int:minoreditletter}}</strong> = minor edit.",
+'histlegend'             => 'Diff selection: Mark the radio boxes of the revisions to compare and hit enter or the button at the bottom.<br />
+Legend: <strong>({{int:cur}})</strong> = difference with latest revision, <strong>({{int:last}})</strong> = difference with preceding revision, <strong>{{int:minoreditletter}}</strong> = minor edit.',
 'history-fieldset-title' => 'Browse history',
 'history-show-deleted'   => 'Deleted only',
 'history_copyright'      => '-', # do not translate or duplicate this message to other languages
@@ -1670,31 +1678,31 @@ Try [[Special:Search|searching on the wiki]] for relevant new pages.',
 'rev-deleted-user'            => '(username removed)',
 'rev-deleted-event'           => '(log action removed)',
 'rev-deleted-user-contribs'   => '[username or IP address removed - edit hidden from contributions]',
-'rev-deleted-text-permission' => "This page revision has been <strong>deleted</strong>.
-Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-'rev-deleted-text-unhide'     => "This page revision has been <strong>deleted</strong>.
+'rev-deleted-text-permission' => 'This page revision has been <strong>deleted</strong>.
+Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].',
+'rev-deleted-text-unhide'     => 'This page revision has been <strong>deleted</strong>.
 Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].
-You can still [$1 view this revision] if you wish to proceed.",
-'rev-suppressed-text-unhide'  => "This page revision has been <strong>suppressed</strong>.
+You can still [$1 view this revision] if you wish to proceed.',
+'rev-suppressed-text-unhide'  => 'This page revision has been <strong>suppressed</strong>.
 Details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].
-You can still [$1 view this revision] if you wish to proceed.",
-'rev-deleted-text-view'       => "This page revision has been <strong>deleted</strong>.
-You can view it; details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-'rev-suppressed-text-view'    => "This page revision has been <strong>suppressed</strong>.
-You can view it; details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
-'rev-deleted-no-diff'         => "You cannot view this diff because one of the revisions has been <strong>deleted</strong>.
-Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-'rev-suppressed-no-diff'      => "You cannot view this diff because one of the revisions has been <strong>deleted</strong>.",
-'rev-deleted-unhide-diff'     => "One of the revisions of this diff has been <strong>deleted</strong>.
+You can still [$1 view this revision] if you wish to proceed.',
+'rev-deleted-text-view'       => 'This page revision has been <strong>deleted</strong>.
+You can view it; details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].',
+'rev-suppressed-text-view'    => 'This page revision has been <strong>suppressed</strong>.
+You can view it; details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].',
+'rev-deleted-no-diff'         => 'You cannot view this diff because one of the revisions has been <strong>deleted</strong>.
+Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].',
+'rev-suppressed-no-diff'      => 'You cannot view this diff because one of the revisions has been <strong>deleted</strong>.',
+'rev-deleted-unhide-diff'     => 'One of the revisions of this diff has been <strong>deleted</strong>.
 Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].
-You can still [$1 view this diff] if you wish to proceed.",
-'rev-suppressed-unhide-diff'  => "One of the revisions of this diff has been <strong>suppressed</strong>.
+You can still [$1 view this diff] if you wish to proceed.',
+'rev-suppressed-unhide-diff'  => 'One of the revisions of this diff has been <strong>suppressed</strong>.
 Details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].
-You can still [$1 view this diff] if you wish to proceed.",
-'rev-deleted-diff-view'       => "One of the revisions of this diff has been <strong>deleted</strong>.
-You can view this diff; details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-'rev-suppressed-diff-view'    => "One of the revisions of this diff has been <strong>suppressed</strong>.
-You can view this diff; details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
+You can still [$1 view this diff] if you wish to proceed.',
+'rev-deleted-diff-view'       => 'One of the revisions of this diff has been <strong>deleted</strong>.
+You can view this diff; details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].',
+'rev-suppressed-diff-view'    => 'One of the revisions of this diff has been <strong>suppressed</strong>.
+You can view this diff; details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].',
 'rev-delundel'                => 'change visibility',
 'rev-showdeleted'             => 'show',
 'revisiondelete'              => 'Delete/undelete revisions',
@@ -1704,15 +1712,17 @@ function, the specified revision does not exist, or you are attempting to hide t
 'revdelete-no-file'           => 'The file specified does not exist.',
 'revdelete-show-file-confirm' => 'Are you sure you want to view a deleted revision of the file "<nowiki>$1</nowiki>" from $2 at $3?',
 'revdelete-show-file-submit'  => 'Yes',
-'revdelete-selected'          => "<strong>{{PLURAL:$2|Selected revision|Selected revisions}} of [[:$1]]:</strong>",
-'logdelete-selected'          => "<strong>{{PLURAL:$1|Selected log event|Selected log events}}:</strong>",
-'revdelete-text'              => "<strong>Deleted revisions and events will still appear in the page history and logs, but parts of their content will be inaccessible to the public.</strong>
-Other administrators on {{SITENAME}} will still be able to access the hidden content and can undelete it again through this same interface, unless additional restrictions are set.",
+'revdelete-selected'          => '<strong>{{PLURAL:$2|Selected revision|Selected revisions}} of [[:$1]]:</strong>',
+'logdelete-selected'          => '<strong>{{PLURAL:$1|Selected log event|Selected log events}}:</strong>',
+'revdelete-text-text'         => 'Deleted revisions will still appear in the page history, but parts of their content will be inaccessible to the public.',
+'revdelete-text-file'         => 'Deleted file versions will still appear in the file history, but parts of their content will be inaccessible to the public.',
+'logdelete-text'              => 'Deleted log events will still appear in the logs, but parts of their content will be inaccessible to the public.',
+'revdelete-text-others'       => 'Other administrators on {{SITENAME}} will still be able to access the hidden content and can undelete it again through this same interface, unless additional restrictions are set.',
 'revdelete-confirm'           => 'Please confirm that you intend to do this, that you understand the consequences, and that you are doing this in accordance with [[{{MediaWiki:Policy-url}}|the policy]].',
-'revdelete-suppress-text'     => "Suppression should <strong>only</strong> be used for the following cases:
+'revdelete-suppress-text'     => 'Suppression should <strong>only</strong> be used for the following cases:
 * potentially libelous information
 * inappropriate personal information
-*: <em>home addresses and telephone numbers, national identification numbers, etc.</em>",
+*: <em>home addresses and telephone numbers, national identification numbers, etc.</em>',
 'revdelete-legend'            => 'Set visibility restrictions',
 'revdelete-hide-text'         => 'Revision text',
 'revdelete-hide-image'        => 'Hide file content',
@@ -1727,12 +1737,12 @@ Other administrators on {{SITENAME}} will still be able to access the hidden con
 'revdelete-unsuppress'        => 'Remove restrictions on restored revisions',
 'revdelete-log'               => 'Reason:',
 'revdelete-submit'            => 'Apply to selected {{PLURAL:$1|revision|revisions}}',
-'revdelete-success'           => "<strong>Revision visibility successfully updated.</strong>",
-'revdelete-failure'           => "<strong>Revision visibility could not be updated:</strong>
-$1",
-'logdelete-success'           => "<strong>Log visibility successfully set.</strong>",
-'logdelete-failure'           => "<strong>Log visibility could not be set:</strong>
-$1",
+'revdelete-success'           => '<strong>Revision visibility successfully updated.</strong>',
+'revdelete-failure'           => '<strong>Revision visibility could not be updated:</strong>
+$1',
+'logdelete-success'           => '<strong>Log visibility successfully set.</strong>',
+'logdelete-failure'           => '<strong>Log visibility could not be set:</strong>
+$1',
 'revdel-restore'              => 'change visibility',
 'pagehist'                    => 'Page history',
 'deletedhist'                 => 'Deleted history',
@@ -1743,7 +1753,7 @@ You do not have access to it.',
 'revdelete-modify-no-access'  => 'Error modifying the item dated $2, $1: This item has been marked "restricted".
 You do not have access to it.',
 'revdelete-modify-missing'    => 'Error modifying item ID $1: It is missing from the database!',
-'revdelete-no-change'         => "<strong>Warning:</strong> The item dated $2, $1 already had the requested visibility settings.",
+'revdelete-no-change'         => '<strong>Warning:</strong> The item dated $2, $1 already had the requested visibility settings.',
 'revdelete-concurrent-change' => 'Error modifying the item dated $2, $1: Its status appears to have been changed by someone else while you attempted to modify it.
 Please check the logs.',
 'revdelete-only-restricted'   => 'Error hiding the item dated $2, $1: You cannot suppress items from view by administrators without also selecting one of the other visibility options.',
@@ -1826,8 +1836,8 @@ Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENA
 'nextn-title'                      => 'Next $1 {{PLURAL:$1|result|results}}',
 'shown-title'                      => 'Show $1 {{PLURAL:$1|result|results}} per page',
 'viewprevnext'                     => 'View ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-exists'                => "<strong>There is a page named \"[[:\$1]]\" on this wiki.</strong> {{PLURAL:$2|0=|See also the other search results found.}}",
-'searchmenu-new'                   => "<strong>Create the page \"[[:\$1]]\" on this wiki!</strong> {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
+'searchmenu-exists'                => '<strong>There is a page named "[[:$1]]" on this wiki.</strong> {{PLURAL:$2|0=|See also the other search results found.}}',
+'searchmenu-new'                   => '<strong>Create the page "[[:$1]]" on this wiki!</strong> {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}',
 'searchmenu-new-nocreate'          => '', # do not translate or duplicate this message to other languages
 'searchprofile-articles'           => 'Content pages',
 'searchprofile-project'            => 'Help and Project pages',
@@ -1847,17 +1857,17 @@ Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENA
 'search-file-match'                => '(matches file content)',
 'search-suggest'                   => 'Did you mean: $1',
 'search-interwiki-caption'         => 'Sister projects',
-'search-interwiki-default'         => '$1 results:',
+'search-interwiki-default'         => 'Results from $1:',
 'search-interwiki-custom'          => '', # do not translate or duplicate this message to other languages
 'search-interwiki-more'            => '(more)',
 'search-relatedarticle'            => 'Related',
 'searcheverything-enable'          => 'Search in all namespaces',
 'searchrelated'                    => 'related',
 'searchall'                        => 'all',
-'showingresults'                   => "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} starting with #<strong>$2</strong>.",
-'showingresultsinrange'            => "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} in range #<strong>$2</strong> to #<strong>$3</strong>.",
-'showingresultsnum'                => "Showing below {{PLURAL:$3|<strong>1</strong> result|<strong>$3</strong> results}} starting with #<strong>$2</strong>.",
-'showingresultsheader'             => "{{PLURAL:$5|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 - $2</strong> of <strong>$3</strong>}} for <strong>$4</strong>",
+'showingresults'                   => 'Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} starting with #<strong>$2</strong>.',
+'showingresultsinrange'            => 'Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} in range #<strong>$2</strong> to #<strong>$3</strong>.',
+'showingresultsnum'                => 'Showing below {{PLURAL:$3|<strong>1</strong> result|<strong>$3</strong> results}} starting with #<strong>$2</strong>.',
+'showingresultsheader'             => '{{PLURAL:$5|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 - $2</strong> of <strong>$3</strong>}} for <strong>$4</strong>',
 'search-nonefound'                 => 'There were no results matching the query.',
 'powersearch-legend'               => 'Advanced search',
 'powersearch-ns'                   => 'Search in namespaces:',
@@ -1928,7 +1938,7 @@ Note that their indexes of {{SITENAME}} content may be out of date.',
 'prefs-help-recentchangescount' => 'This includes recent changes, page histories, and logs.',
 'prefs-help-watchlist-token2'   => 'This is the secret key to the web feed of your watchlist.
 Anyone who knows it will be able to read your watchlist, so do not share it.
-[[Special:ResetTokens|Click here if you need to reset it]].',
+If you need to, [[Special:ResetTokens|you can reset it]].',
 'savedprefs'                    => 'Your preferences have been saved.',
 'timezonelegend'                => 'Time zone:',
 'localtime'                     => 'Local time:',
@@ -2019,7 +2029,7 @@ Your email address is not revealed when other users contact you.',
 'userrights-lookup-user'         => 'Manage user groups',
 'userrights-user-editname'       => 'Enter a username:',
 'editusergroup'                  => 'Edit user groups',
-'editinguser'                    => "Changing user rights of user <strong>[[User:$1|$1]]</strong> $2",
+'editinguser'                    => 'Changing user rights of user <strong>[[User:$1|$1]]</strong> $2',
 'userrights-editusergroup'       => 'Edit user groups',
 'saveusergroups'                 => 'Save user groups',
 'userrights-groupsmember'        => 'Member of:',
@@ -2201,15 +2211,27 @@ Your email address is not revealed when other users contact you.',
 'recentchanges-label-plusminus'     => 'The page size changed by this number of bytes',
 'recentchanges-legend-heading'      => "'''Legend:'''",
 'recentchanges-legend-newpage'      => '(also see [[Special:NewPages|list of new pages]])',
-'recentchanges-legend-plusminus'    => "(<em>±123</em>)",
-'rcnotefrom'                        => "Below are the changes since <strong>$2</strong> (up to <strong>$1</strong> shown).",
-'rclistfrom'                        => 'Show new changes starting from $1',
+'recentchanges-legend-plusminus'    => '(<em>±123</em>)', # only translate this message to other languages if you have to change it
+'rcnotefrom'                        => 'Below are the changes since <strong>$2</strong> (up to <strong>$1</strong> shown).',
+'rclistfrom'                        => 'Show new changes starting from $2, $3',
 'rcshowhideminor'                   => '$1 minor edits',
+'rcshowhideminor-show'              => 'Show',
+'rcshowhideminor-hide'              => 'Hide',
 'rcshowhidebots'                    => '$1 bots',
+'rcshowhidebots-show'               => 'Show',
+'rcshowhidebots-hide'               => 'Hide',
 'rcshowhideliu'                     => '$1 registered users',
+'rcshowhideliu-show'                => 'Show',
+'rcshowhideliu-hide'                => 'Hide',
 'rcshowhideanons'                   => '$1 anonymous users',
+'rcshowhideanons-show'              => 'Show',
+'rcshowhideanons-hide'              => 'Hide',
 'rcshowhidepatr'                    => '$1 patrolled edits',
+'rcshowhidepatr-show'               => 'Show',
+'rcshowhidepatr-hide'               => 'Hide',
 'rcshowhidemine'                    => '$1 my edits',
+'rcshowhidemine-show'               => 'Show',
+'rcshowhidemine-hide'               => 'Hide',
 'rclinks'                           => 'Show last $1 changes in last $2 days<br />$3',
 'diff'                              => 'diff',
 'hist'                              => 'hist',
@@ -2235,139 +2257,140 @@ Your email address is not revealed when other users contact you.',
 'recentchangeslinked-feed'    => 'Related changes',
 'recentchangeslinked-toolbox' => 'Related changes',
 'recentchangeslinked-title'   => 'Changes related to "$1"',
-'recentchangeslinked-summary' => "This is a list of changes made recently to pages linked from a specified page (or to members of a specified category).
-Pages on [[Special:Watchlist|your watchlist]] are <strong>bold</strong>.",
+'recentchangeslinked-summary' => 'This is a list of changes made recently to pages linked from a specified page (or to members of a specified category).
+Pages on [[Special:Watchlist|your watchlist]] are <strong>bold</strong>.',
 'recentchangeslinked-page'    => 'Page name:',
 'recentchangeslinked-to'      => 'Show changes to pages linked to the given page instead',
 
 # Upload
-'upload'                      => 'Upload file',
-'uploadbtn'                   => 'Upload file',
-'reuploaddesc'                => 'Cancel upload and return to the upload form',
-'upload-tryagain'             => 'Submit modified file description',
-'uploadnologin'               => 'Not logged in',
-'uploadnologintext'           => 'Please $1 to upload files.',
-'upload_directory_missing'    => 'The upload directory ($1) is missing and could not be created by the webserver.',
-'upload_directory_read_only'  => 'The upload directory ($1) is not writable by the webserver.',
-'uploaderror'                 => 'Upload error',
-'upload-summary'              => '', # do not translate or duplicate this message to other languages
-'upload-recreate-warning'     => "<strong>Warning: A file by that name has been deleted or moved.</strong>
-
-The deletion and move log for this page are provided here for convenience:",
-'uploadtext'                  => "Use the form below to upload files.
+'upload'                         => 'Upload file',
+'uploadbtn'                      => 'Upload file',
+'reuploaddesc'                   => 'Cancel upload and return to the upload form',
+'upload-tryagain'                => 'Submit modified file description',
+'uploadnologin'                  => 'Not logged in',
+'uploadnologintext'              => 'Please $1 to upload files.',
+'upload_directory_missing'       => 'The upload directory ($1) is missing and could not be created by the webserver.',
+'upload_directory_read_only'     => 'The upload directory ($1) is not writable by the webserver.',
+'uploaderror'                    => 'Upload error',
+'upload-summary'                 => '', # do not translate or duplicate this message to other languages
+'upload-recreate-warning'        => '<strong>Warning: A file by that name has been deleted or moved.</strong>
+
+The deletion and move log for this page are provided here for convenience:',
+'uploadtext'                     => 'Use the form below to upload files.
 To view or search previously uploaded files go to the [[Special:FileList|list of uploaded files]], (re)uploads are also logged in the [[Special:Log/upload|upload log]], deletions in the [[Special:Log/delete|deletion log]].
 
 To include a file in a page, use a link in one of the following forms:
 * <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> to use the full version of the file
-* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> to use a 200 pixel wide rendition in a box in the left margin with \"alt text\" as description
-* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> for directly linking to the file without displaying the file",
-'upload-permitted'            => 'Permitted file types: $1.',
-'upload-preferred'            => 'Preferred file types: $1.',
-'upload-prohibited'           => 'Prohibited file types: $1.',
-'uploadfooter'                => '-', # do not translate or duplicate this message to other languages
-'upload-default-description'  => '-', # do not translate or duplicate this message to other languages
-'uploadlog'                   => 'upload log',
-'uploadlogpage'               => 'Upload log',
-'uploadlogpagetext'           => 'Below is a list of the most recent file uploads.
+* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> to use a 200 pixel wide rendition in a box in the left margin with "alt text" as description
+* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> for directly linking to the file without displaying the file',
+'upload-permitted'               => 'Permitted file types: $1.',
+'upload-preferred'               => 'Preferred file types: $1.',
+'upload-prohibited'              => 'Prohibited file types: $1.',
+'uploadfooter'                   => '-', # do not translate or duplicate this message to other languages
+'upload-default-description'     => '-', # do not translate or duplicate this message to other languages
+'uploadlog'                      => 'upload log',
+'uploadlogpage'                  => 'Upload log',
+'uploadlogpagetext'              => 'Below is a list of the most recent file uploads.
 See the [[Special:NewFiles|gallery of new files]] for a more visual overview.',
-'filename'                    => 'Filename',
-'filedesc'                    => 'Summary',
-'fileuploadsummary'           => 'Summary:',
-'filereuploadsummary'         => 'File changes:',
-'filestatus'                  => 'Copyright status:',
-'filesource'                  => 'Source:',
-'uploadedfiles'               => 'Uploaded files',
-'ignorewarning'               => 'Ignore warning and save file anyway',
-'ignorewarnings'              => 'Ignore any warnings',
-'minlength1'                  => 'Filenames must be at least one letter.',
-'illegalfilename'             => 'The filename "$1" contains characters that are not allowed in page titles.
+'filename'                       => 'Filename',
+'filedesc'                       => 'Summary',
+'fileuploadsummary'              => 'Summary:',
+'filereuploadsummary'            => 'File changes:',
+'filestatus'                     => 'Copyright status:',
+'filesource'                     => 'Source:',
+'uploadedfiles'                  => 'Uploaded files',
+'ignorewarning'                  => 'Ignore warning and save file anyway',
+'ignorewarnings'                 => 'Ignore any warnings',
+'minlength1'                     => 'Filenames must be at least one letter.',
+'illegalfilename'                => 'The filename "$1" contains characters that are not allowed in page titles.
 Please rename the file and try uploading it again.',
-'filename-toolong'            => 'Filenames may not be longer than 240 bytes.',
-'badfilename'                 => 'Filename has been changed to "$1".',
-'filetype-mime-mismatch'      => 'File extension ".$1" does not match the detected MIME type of the file ($2).',
-'filetype-badmime'            => 'Files of the MIME type "$1" are not allowed to be uploaded.',
-'filetype-bad-ie-mime'        => 'Cannot upload this file because Internet Explorer would detect it as "$1", which is a disallowed and potentially dangerous file type.',
-'filetype-unwanted-type'      => "<strong>\".\$1\"</strong> is an unwanted file type.
-Preferred {{PLURAL:\$3|file type is|file types are}} \$2.",
-'filetype-banned-type'        => '<strong>".$1"</strong> {{PLURAL:$4|is not a permitted file type|are not permitted file types}}.
+'filename-toolong'               => 'Filenames may not be longer than 240 bytes.',
+'badfilename'                    => 'Filename has been changed to "$1".',
+'filetype-mime-mismatch'         => 'File extension ".$1" does not match the detected MIME type of the file ($2).',
+'filetype-badmime'               => 'Files of the MIME type "$1" are not allowed to be uploaded.',
+'filetype-bad-ie-mime'           => 'Cannot upload this file because Internet Explorer would detect it as "$1", which is a disallowed and potentially dangerous file type.',
+'filetype-unwanted-type'         => '<strong>".$1"</strong> is an unwanted file type.
+Preferred {{PLURAL:$3|file type is|file types are}} $2.',
+'filetype-banned-type'           => '<strong>".$1"</strong> {{PLURAL:$4|is not a permitted file type|are not permitted file types}}.
 Permitted {{PLURAL:$3|file type is|file types are}} $2.',
-'filetype-missing'            => 'The file has no extension (like ".jpg").',
-'empty-file'                  => 'The file you submitted was empty.',
-'file-too-large'              => 'The file you submitted was too large.',
-'filename-tooshort'           => 'The filename is too short.',
-'filetype-banned'             => 'This type of file is banned.',
-'verification-error'          => 'This file did not pass file verification.',
-'hookaborted'                 => 'The modification you tried to make was aborted by an extension.',
-'illegal-filename'            => 'The filename is not allowed.',
-'overwrite'                   => 'Overwriting an existing file is not allowed.',
-'unknown-error'               => 'An unknown error occurred.',
-'tmp-create-error'            => 'Could not create temporary file.',
-'tmp-write-error'             => 'Error writing temporary file.',
-'large-file'                  => 'It is recommended that files are no larger than $1;
+'filetype-missing'               => 'The file has no extension (like ".jpg").',
+'empty-file'                     => 'The file you submitted was empty.',
+'file-too-large'                 => 'The file you submitted was too large.',
+'filename-tooshort'              => 'The filename is too short.',
+'filetype-banned'                => 'This type of file is banned.',
+'verification-error'             => 'This file did not pass file verification.',
+'hookaborted'                    => 'The modification you tried to make was aborted by an extension.',
+'illegal-filename'               => 'The filename is not allowed.',
+'overwrite'                      => 'Overwriting an existing file is not allowed.',
+'unknown-error'                  => 'An unknown error occurred.',
+'tmp-create-error'               => 'Could not create temporary file.',
+'tmp-write-error'                => 'Error writing temporary file.',
+'large-file'                     => 'It is recommended that files are no larger than $1;
 this file is $2.',
-'largefileserver'             => 'This file is bigger than the server is configured to allow.',
-'emptyfile'                   => 'The file you uploaded seems to be empty.
+'largefileserver'                => 'This file is bigger than the server is configured to allow.',
+'emptyfile'                      => 'The file you uploaded seems to be empty.
 This might be due to a typo in the filename.
 Please check whether you really want to upload this file.',
-'windows-nonascii-filename'   => 'This wiki does not support filenames with special characters.',
-'fileexists'                  => 'A file with this name exists already, please check <strong>[[:$1]]</strong> if you are not sure if you want to change it.
+'windows-nonascii-filename'      => 'This wiki does not support filenames with special characters.',
+'fileexists'                     => 'A file with this name exists already, please check <strong>[[:$1]]</strong> if you are not sure if you want to change it.
 [[$1|thumb]]',
-'filepageexists'              => 'The description page for this file has already been created at <strong>[[:$1]]</strong>, but no file with this name currently exists.
+'filepageexists'                 => 'The description page for this file has already been created at <strong>[[:$1]]</strong>, but no file with this name currently exists.
 The summary you enter will not appear on the description page.
 To make your summary appear there, you will need to manually edit it.
 [[$1|thumb]]',
-'fileexists-extension'        => 'A file with a similar name exists: [[$2|thumb]]
+'fileexists-extension'           => 'A file with a similar name exists: [[$2|thumb]]
 * Name of the uploading file: <strong>[[:$1]]</strong>
 * Name of the existing file: <strong>[[:$2]]</strong>
 Please choose a different name.',
-'fileexists-thumbnail-yes'    => "The file seems to be an image of reduced size <em>(thumbnail)</em>.
+'fileexists-thumbnail-yes'       => 'The file seems to be an image of reduced size <em>(thumbnail)</em>.
 [[$1|thumb]]
 Please check the file <strong>[[:$1]]</strong>.
-If the checked file is the same image of original size it is not necessary to upload an extra thumbnail.",
-'file-thumbnail-no'           => "The filename begins with <strong>$1</strong>.
+If the checked file is the same image of original size it is not necessary to upload an extra thumbnail.',
+'file-thumbnail-no'              => 'The filename begins with <strong>$1</strong>.
 It seems to be an image of reduced size <em>(thumbnail)</em>.
-If you have this image in full resolution upload this one, otherwise change the filename please.",
-'fileexists-forbidden'        => 'A file with this name already exists, and cannot be overwritten.
+If you have this image in full resolution upload this one, otherwise change the filename please.',
+'fileexists-forbidden'           => 'A file with this name already exists, and cannot be overwritten.
 If you still want to upload your file, please go back and use a new name.
 [[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => 'A file with this name exists already in the shared file repository.
+'fileexists-shared-forbidden'    => 'A file with this name exists already in the shared file repository.
 If you still want to upload your file, please go back and use a new name.
 [[File:$1|thumb|center|$1]]',
-'file-exists-duplicate'       => 'This file is a duplicate of the following {{PLURAL:$1|file|files}}:',
-'file-deleted-duplicate'      => "A file identical to this file ([[:$1]]) has previously been deleted.
+'file-exists-duplicate'          => 'This file is a duplicate of the following {{PLURAL:$1|file|files}}:',
+'file-deleted-duplicate'         => "A file identical to this file ([[:$1]]) has previously been deleted.
 You should check that file's deletion history before proceeding to re-upload it.",
-'file-deleted-duplicate-notitle' => "A file identical to this file has previously been deleted, and the title has been suppressed.
-You should ask someone with the ability to view suppressed file data to review the situation before proceeding to re-upload it.",
-'uploadwarning'               => 'Upload warning',
-'uploadwarning-text'          => 'Please modify the file description below and try again.',
-'savefile'                    => 'Save file',
-'uploadedimage'               => 'uploaded "[[$1]]"',
-'overwroteimage'              => 'uploaded a new version of "[[$1]]"',
-'uploaddisabled'              => 'Uploads disabled.',
-'copyuploaddisabled'          => 'Upload by URL disabled.',
-'uploadfromurl-queued'        => 'Your upload has been queued.',
-'uploaddisabledtext'          => 'File uploads are disabled.',
-'php-uploaddisabledtext'      => 'File uploads are disabled in PHP.
+'file-deleted-duplicate-notitle' => 'A file identical to this file has previously been deleted, and the title has been suppressed.
+You should ask someone with the ability to view suppressed file data to review the situation before proceeding to re-upload it.',
+'uploadwarning'                  => 'Upload warning',
+'uploadwarning-text'             => 'Please modify the file description below and try again.',
+'savefile'                       => 'Save file',
+'uploadedimage'                  => 'uploaded "[[$1]]"',
+'overwroteimage'                 => 'uploaded a new version of "[[$1]]"',
+'uploaddisabled'                 => 'Uploads disabled.',
+'copyuploaddisabled'             => 'Upload by URL disabled.',
+'uploadfromurl-queued'           => 'Your upload has been queued.',
+'uploaddisabledtext'             => 'File uploads are disabled.',
+'php-uploaddisabledtext'         => 'File uploads are disabled in PHP.
 Please check the file_uploads setting.',
-'uploadscripted'              => 'This file contains HTML or script code that may be erroneously interpreted by a web browser.',
-'uploadinvalidxml'            => 'The XML in the uploaded file could not be parsed.',
-'uploadvirus'                 => 'The file contains a virus!
+'uploadscripted'                 => 'This file contains HTML or script code that may be erroneously interpreted by a web browser.',
+'uploadscriptednamespace'        => 'This SVG file contains an illegal namespace "$1"',
+'uploadinvalidxml'               => 'The XML in the uploaded file could not be parsed.',
+'uploadvirus'                    => 'The file contains a virus!
 Details: $1',
-'uploadjava'                  => 'The file is a ZIP file that contains a Java .class file.
+'uploadjava'                     => 'The file is a ZIP file that contains a Java .class file.
 Uploading Java files is not allowed because they can cause security restrictions to be bypassed.',
-'upload-source'               => 'Source file',
-'sourcefilename'              => 'Source filename:',
-'sourceurl'                   => 'Source URL:',
-'destfilename'                => 'Destination filename:',
-'upload-maxfilesize'          => 'Maximum file size: $1',
-'upload-description'          => 'File description',
-'upload-options'              => 'Upload options',
-'watchthisupload'             => 'Watch this file',
-'filewasdeleted'              => 'A file of this name has been previously uploaded and subsequently deleted.
+'upload-source'                  => 'Source file',
+'sourcefilename'                 => 'Source filename:',
+'sourceurl'                      => 'Source URL:',
+'destfilename'                   => 'Destination filename:',
+'upload-maxfilesize'             => 'Maximum file size: $1',
+'upload-description'             => 'File description',
+'upload-options'                 => 'Upload options',
+'watchthisupload'                => 'Watch this file',
+'filewasdeleted'                 => 'A file of this name has been previously uploaded and subsequently deleted.
 You should check the $1 before proceeding to upload it again.',
-'filename-bad-prefix'         => "The name of the file you are uploading begins with <strong>\"\$1\"</strong>, which is a non-descriptive name typically assigned automatically by digital cameras.
-Please choose a more descriptive name for your file.",
-'filename-prefix-blacklist'   => ' #<!-- leave this line exactly as it is --> <pre>
+'filename-bad-prefix'            => 'The name of the file you are uploading begins with <strong>"$1"</strong>, which is a non-descriptive name typically assigned automatically by digital cameras.
+Please choose a more descriptive name for your file.',
+'filename-prefix-blacklist'      => ' #<!-- leave this line exactly as it is --> <pre>
 # Syntax is as follows:
 #   * Everything from a "#" character to the end of the line is a comment
 #   * Every non-blank line is a prefix for typical filenames assigned automatically by digital cameras
@@ -2381,14 +2404,14 @@ JD # Jenoptik
 MGP # Pentax
 PICT # misc.
  #</pre> <!-- leave this line exactly as it is -->', # only translate this message to other languages if you have to change it
-'upload-success-subj'         => 'Successful upload',
-'upload-success-msg'          => 'Your upload from [$2] was successful. It is available here: [[:{{ns:file}}:$1]]',
-'upload-failure-subj'         => 'Upload problem',
-'upload-failure-msg'          => 'There was a problem with your upload from [$2]:
+'upload-success-subj'            => 'Successful upload',
+'upload-success-msg'             => 'Your upload from [$2] was successful. It is available here: [[:{{ns:file}}:$1]]',
+'upload-failure-subj'            => 'Upload problem',
+'upload-failure-msg'             => 'There was a problem with your upload from [$2]:
 
 $1',
-'upload-warning-subj'         => 'Upload warning',
-'upload-warning-msg'          => 'There was a problem with your upload from [$2]. You may return to the [[Special:Upload/stash/$1|upload form]] to correct this problem.',
+'upload-warning-subj'            => 'Upload warning',
+'upload-warning-msg'             => 'There was a problem with your upload from [$2]. You may return to the [[Special:Upload/stash/$1|upload form]] to correct this problem.',
 
 'upload-proto-error'                => 'Incorrect protocol',
 'upload-proto-error-text'           => 'Remote upload requires URLs beginning with <code>http://</code> or <code>ftp://</code>.',
@@ -2575,24 +2598,24 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 # File reversion
 'filerevert'                => 'Revert $1',
 'filerevert-legend'         => 'Revert file',
-'filerevert-intro'          => "You are about to revert the file <strong>[[Media:$1|$1]]</strong> to the [$4 version as of $3, $2].",
+'filerevert-intro'          => 'You are about to revert the file <strong>[[Media:$1|$1]]</strong> to the [$4 version as of $3, $2].',
 'filerevert-comment'        => 'Reason:',
 'filerevert-defaultcomment' => 'Reverted to version as of $2, $1',
 'filerevert-submit'         => 'Revert',
-'filerevert-success'        => "<strong>[[Media:$1|$1]]</strong> has been reverted to the [$4 version as of $3, $2].",
+'filerevert-success'        => '<strong>[[Media:$1|$1]]</strong> has been reverted to the [$4 version as of $3, $2].',
 'filerevert-badversion'     => 'There is no previous local version of this file with the provided timestamp.',
 
 # File deletion
 'filedelete'                   => 'Delete $1',
 'filedelete-legend'            => 'Delete file',
-'filedelete-intro'             => "You are about to delete the file <strong>[[Media:$1|$1]]</strong> along with all of its history.",
-'filedelete-intro-old'         => "You are deleting the version of <strong>[[Media:$1|$1]]</strong> as of [$4 $3, $2].",
+'filedelete-intro'             => 'You are about to delete the file <strong>[[Media:$1|$1]]</strong> along with all of its history.',
+'filedelete-intro-old'         => 'You are deleting the version of <strong>[[Media:$1|$1]]</strong> as of [$4 $3, $2].',
 'filedelete-comment'           => 'Reason:',
 'filedelete-submit'            => 'Delete',
-'filedelete-success'           => "<strong>$1</strong> has been deleted.",
-'filedelete-success-old'       => "The version of <strong>[[Media:$1|$1]]</strong> as of $3, $2 has been deleted.",
-'filedelete-nofile'            => "<strong>$1</strong> does not exist.",
-'filedelete-nofile-old'        => "There is no archived version of <strong>$1</strong> with the specified attributes.",
+'filedelete-success'           => '<strong>$1</strong> has been deleted.',
+'filedelete-success-old'       => 'The version of <strong>[[Media:$1|$1]]</strong> as of $3, $2 has been deleted.',
+'filedelete-nofile'            => '<strong>$1</strong> does not exist.',
+'filedelete-nofile-old'        => 'There is no archived version of <strong>$1</strong> with the specified attributes.',
 'filedelete-otherreason'       => 'Other/additional reason:',
 'filedelete-reason-otherlist'  => 'Other reason',
 'filedelete-reason-dropdown'   => '*Common delete reasons
@@ -2697,104 +2720,113 @@ It now redirects to [[$2]].',
 'fewestrevisions-summary' => '', # do not translate or duplicate this message to other languages
 
 # Miscellaneous special pages
-'nbytes'                          => '$1 {{PLURAL:$1|byte|bytes}}',
-'ncategories'                     => '$1 {{PLURAL:$1|category|categories}}',
-'ninterwikis'                     => '$1 {{PLURAL:$1|interwiki|interwikis}}',
-'nlinks'                          => '$1 {{PLURAL:$1|link|links}}',
-'nmembers'                        => '$1 {{PLURAL:$1|member|members}}',
-'nmemberschanged'                 => '$1 → $2 {{PLURAL:$2|member|members}}',
-'nrevisions'                      => '$1 {{PLURAL:$1|revision|revisions}}',
-'nviews'                          => '$1 {{PLURAL:$1|view|views}}',
-'nimagelinks'                     => 'Used on $1 {{PLURAL:$1|page|pages}}',
-'ntransclusions'                  => 'used on $1 {{PLURAL:$1|page|pages}}',
-'specialpage-empty'               => 'There are no results for this report.',
-'lonelypages'                     => 'Orphaned pages',
-'lonelypages-summary'             => '', # do not translate or duplicate this message to other languages
-'lonelypagestext'                 => 'The following pages are not linked from or transcluded into other pages in {{SITENAME}}.',
-'uncategorizedpages'              => 'Uncategorized pages',
-'uncategorizedpages-summary'      => '', # do not translate or duplicate this message to other languages
-'uncategorizedcategories'         => 'Uncategorized categories',
-'uncategorizedcategories-summary' => '', # do not translate or duplicate this message to other languages
-'uncategorizedimages'             => 'Uncategorized files',
-'uncategorizedimages-summary'     => '', # do not translate or duplicate this message to other languages
-'uncategorizedtemplates'          => 'Uncategorized templates',
-'uncategorizedtemplates-summary'  => '', # do not translate or duplicate this message to other languages
-'unusedcategories'                => 'Unused categories',
-'unusedcategories-summary'        => '', # do not translate or duplicate this message to other languages
-'unusedimages'                    => 'Unused files',
-'unusedimages-summary'            => '', # do not translate or duplicate this message to other languages
-'popularpages'                    => 'Popular pages',
-'popularpages-summary'            => '', # do not translate or duplicate this message to other languages
-'wantedcategories'                => 'Wanted categories',
-'wantedcategories-summary'        => '', # do not translate or duplicate this message to other languages
-'wantedpages'                     => 'Wanted pages',
-'wantedpages-summary'             => '', # do not translate or duplicate this message to other languages
-'wantedpages-badtitle'            => 'Invalid title in result set: $1',
-'wantedfiles'                     => 'Wanted files',
-'wantedfiles-summary'             => '', # do not translate or duplicate this message to other languages
-'wantedfiletext-cat'              => 'The following files are used but do not exist. Files from foreign repositories may be listed despite existing. Any such false positives will be <del>struck out</del>. Additionally, pages that embed files that do not exist are listed in [[:$1]].',
-'wantedfiletext-nocat'            => 'The following files are used but do not exist. Files from foreign repositories may be listed despite existing. Any such false positives will be <del>struck out</del>.',
-'wantedtemplates'                 => 'Wanted templates',
-'wantedtemplates-summary'         => '', # do not translate or duplicate this message to other languages
-'mostlinked'                      => 'Most linked-to pages',
-'mostlinked-summary'              => '', # do not translate or duplicate this message to other languages
-'mostlinkedcategories'            => 'Most linked-to categories',
-'mostlinkedcategories-summary'    => '', # do not translate or duplicate this message to other languages
-'mostlinkedtemplates'             => 'Most linked-to templates',
-'mostlinkedtemplates-summary'     => '', # do not translate or duplicate this message to other languages
-'mostcategories'                  => 'Pages with the most categories',
-'mostcategories-summary'          => '', # do not translate or duplicate this message to other languages
-'mostimages'                      => 'Most linked-to files',
-'mostimages-summary'              => '', # do not translate or duplicate this message to other languages
-'mostinterwikis'                  => 'Pages with the most interwikis',
-'mostinterwikis-summary'          => '', # do not translate or duplicate this message to other languages
-'mostrevisions'                   => 'Pages with the most revisions',
-'mostrevisions-summary'           => '', # do not translate or duplicate this message to other languages
-'prefixindex'                     => 'All pages with prefix',
-'prefixindex-namespace'           => 'All pages with prefix ($1 namespace)',
-'prefixindex-summary'             => '', # do not translate or duplicate this message to other languages
-'prefixindex-strip'               => 'Strip prefix in list',
-'shortpages'                      => 'Short pages',
-'shortpages-summary'              => '', # do not translate or duplicate this message to other languages
-'longpages'                       => 'Long pages',
-'longpages-summary'               => '', # do not translate or duplicate this message to other languages
-'deadendpages'                    => 'Dead-end pages',
-'deadendpages-summary'            => '', # do not translate or duplicate this message to other languages
-'deadendpagestext'                => 'The following pages do not link to other pages in {{SITENAME}}.',
-'protectedpages'                  => 'Protected pages',
-'protectedpages-indef'            => 'Indefinite protections only',
-'protectedpages-summary'          => '', # do not translate or duplicate this message to other languages
-'protectedpages-cascade'          => 'Cascading protections only',
-'protectedpages-noredirect'       => 'Hide redirects',
-'protectedpagesempty'             => 'No pages are currently protected with these parameters.',
-'protectedtitles'                 => 'Protected titles',
-'protectedtitles-summary'         => '', # do not translate or duplicate this message to other languages
-'protectedtitlesempty'            => 'No titles are currently protected with these parameters.',
-'listusers'                       => 'User list',
-'listusers-summary'               => '', # do not translate or duplicate this message to other languages
-'listusers-editsonly'             => 'Show only users with edits',
-'listusers-creationsort'          => 'Sort by creation date',
-'listusers-desc'                  => 'Sort in descending order',
-'usereditcount'                   => '$1 {{PLURAL:$1|edit|edits}}',
-'usercreated'                     => '{{GENDER:$3|Created}} on $1 at $2',
-'newpages'                        => 'New pages',
-'newpages-summary'                => '', # do not translate or duplicate this message to other languages
-'newpages-username'               => 'Username:',
-'ancientpages'                    => 'Oldest pages',
-'ancientpages-summary'            => '', # do not translate or duplicate this message to other languages
-'move'                            => 'Move',
-'movethispage'                    => 'Move this page',
-'unusedimagestext'                => 'The following files exist but are not embedded in any page.
+'nbytes'                           => '$1 {{PLURAL:$1|byte|bytes}}',
+'ncategories'                      => '$1 {{PLURAL:$1|category|categories}}',
+'ninterwikis'                      => '$1 {{PLURAL:$1|interwiki|interwikis}}',
+'nlinks'                           => '$1 {{PLURAL:$1|link|links}}',
+'nmembers'                         => '$1 {{PLURAL:$1|member|members}}',
+'nmemberschanged'                  => '$1 → $2 {{PLURAL:$2|member|members}}',
+'nrevisions'                       => '$1 {{PLURAL:$1|revision|revisions}}',
+'nviews'                           => '$1 {{PLURAL:$1|view|views}}',
+'nimagelinks'                      => 'Used on $1 {{PLURAL:$1|page|pages}}',
+'ntransclusions'                   => 'used on $1 {{PLURAL:$1|page|pages}}',
+'specialpage-empty'                => 'There are no results for this report.',
+'lonelypages'                      => 'Orphaned pages',
+'lonelypages-summary'              => '', # do not translate or duplicate this message to other languages
+'lonelypagestext'                  => 'The following pages are not linked from or transcluded into other pages in {{SITENAME}}.',
+'uncategorizedpages'               => 'Uncategorized pages',
+'uncategorizedpages-summary'       => '', # do not translate or duplicate this message to other languages
+'uncategorizedcategories'          => 'Uncategorized categories',
+'uncategorizedcategories-summary'  => '', # do not translate or duplicate this message to other languages
+'uncategorizedimages'              => 'Uncategorized files',
+'uncategorizedimages-summary'      => '', # do not translate or duplicate this message to other languages
+'uncategorizedtemplates'           => 'Uncategorized templates',
+'uncategorizedtemplates-summary'   => '', # do not translate or duplicate this message to other languages
+'unusedcategories'                 => 'Unused categories',
+'unusedcategories-summary'         => '', # do not translate or duplicate this message to other languages
+'unusedimages'                     => 'Unused files',
+'unusedimages-summary'             => '', # do not translate or duplicate this message to other languages
+'popularpages'                     => 'Popular pages',
+'popularpages-summary'             => '', # do not translate or duplicate this message to other languages
+'wantedcategories'                 => 'Wanted categories',
+'wantedcategories-summary'         => '', # do not translate or duplicate this message to other languages
+'wantedpages'                      => 'Wanted pages',
+'wantedpages-summary'              => '', # do not translate or duplicate this message to other languages
+'wantedpages-badtitle'             => 'Invalid title in result set: $1',
+'wantedfiles'                      => 'Wanted files',
+'wantedfiles-summary'              => '', # do not translate or duplicate this message to other languages
+'wantedfiletext-cat'               => 'The following files are used but do not exist. Files from foreign repositories may be listed despite existing. Any such false positives will be <del>struck out</del>. Additionally, pages that embed files that do not exist are listed in [[:$1]].',
+'wantedfiletext-nocat'             => 'The following files are used but do not exist. Files from foreign repositories may be listed despite existing. Any such false positives will be <del>struck out</del>.',
+'wantedtemplates'                  => 'Wanted templates',
+'wantedtemplates-summary'          => '', # do not translate or duplicate this message to other languages
+'mostlinked'                       => 'Most linked-to pages',
+'mostlinked-summary'               => '', # do not translate or duplicate this message to other languages
+'mostlinkedcategories'             => 'Most linked-to categories',
+'mostlinkedcategories-summary'     => '', # do not translate or duplicate this message to other languages
+'mostlinkedtemplates'              => 'Most linked-to templates',
+'mostlinkedtemplates-summary'      => '', # do not translate or duplicate this message to other languages
+'mostcategories'                   => 'Pages with the most categories',
+'mostcategories-summary'           => '', # do not translate or duplicate this message to other languages
+'mostimages'                       => 'Most linked-to files',
+'mostimages-summary'               => '', # do not translate or duplicate this message to other languages
+'mostinterwikis'                   => 'Pages with the most interwikis',
+'mostinterwikis-summary'           => '', # do not translate or duplicate this message to other languages
+'mostrevisions'                    => 'Pages with the most revisions',
+'mostrevisions-summary'            => '', # do not translate or duplicate this message to other languages
+'prefixindex'                      => 'All pages with prefix',
+'prefixindex-namespace'            => 'All pages with prefix ($1 namespace)',
+'prefixindex-summary'              => '', # do not translate or duplicate this message to other languages
+'prefixindex-strip'                => 'Strip prefix in list',
+'shortpages'                       => 'Short pages',
+'shortpages-summary'               => '', # do not translate or duplicate this message to other languages
+'longpages'                        => 'Long pages',
+'longpages-summary'                => '', # do not translate or duplicate this message to other languages
+'deadendpages'                     => 'Dead-end pages',
+'deadendpages-summary'             => '', # do not translate or duplicate this message to other languages
+'deadendpagestext'                 => 'The following pages do not link to other pages in {{SITENAME}}.',
+'protectedpages'                   => 'Protected pages',
+'protectedpages-indef'             => 'Indefinite protections only',
+'protectedpages-summary'           => 'This page lists existing pages that are currently protected. For a list of titles that are protected from creation, see [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
+'protectedpages-cascade'           => 'Cascading protections only',
+'protectedpages-noredirect'        => 'Hide redirects',
+'protectedpagesempty'              => 'No pages are currently protected with these parameters.',
+'protectedpages-timestamp'         => 'Timestamp',
+'protectedpages-page'              => 'Page',
+'protectedpages-expiry'            => 'Expires',
+'protectedpages-performer'         => 'Protecting user',
+'protectedpages-params'            => 'Protection parameters',
+'protectedpages-reason'            => 'Reason',
+'protectedpages-unknown-timestamp' => 'Unknown',
+'protectedpages-unknown-performer' => 'Unknown user',
+'protectedpages-unknown-reason'    => '—', # do not translate or duplicate this message to other languages
+'protectedtitles'                  => 'Protected titles',
+'protectedtitles-summary'          => 'This page lists titles that are currently protected from creation. For a list of existing pages that are protected, see [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
+'protectedtitlesempty'             => 'No titles are currently protected with these parameters.',
+'listusers'                        => 'User list',
+'listusers-summary'                => '', # do not translate or duplicate this message to other languages
+'listusers-editsonly'              => 'Show only users with edits',
+'listusers-creationsort'           => 'Sort by creation date',
+'listusers-desc'                   => 'Sort in descending order',
+'usereditcount'                    => '$1 {{PLURAL:$1|edit|edits}}',
+'usercreated'                      => '{{GENDER:$3|Created}} on $1 at $2',
+'newpages'                         => 'New pages',
+'newpages-summary'                 => '', # do not translate or duplicate this message to other languages
+'newpages-username'                => 'Username:',
+'ancientpages'                     => 'Oldest pages',
+'ancientpages-summary'             => '', # do not translate or duplicate this message to other languages
+'move'                             => 'Move',
+'movethispage'                     => 'Move this page',
+'unusedimagestext'                 => 'The following files exist but are not embedded in any page.
 Please note that other web sites may link to a file with a direct URL, and so may still be listed here despite being in active use.',
-'unusedcategoriestext'            => 'The following category pages exist, although no other page or category makes use of them.',
-'notargettitle'                   => 'No target',
-'notargettext'                    => 'You have not specified a target page or user to perform this function on.',
-'nopagetitle'                     => 'No such target page',
-'nopagetext'                      => 'The target page you have specified does not exist.',
-'pager-newer-n'                   => '{{PLURAL:$1|newer 1|newer $1}}',
-'pager-older-n'                   => '{{PLURAL:$1|older 1|older $1}}',
-'suppress'                        => 'Oversight',
-'querypage-disabled'              => 'This special page is disabled for performance reasons.',
+'unusedcategoriestext'             => 'The following category pages exist, although no other page or category makes use of them.',
+'notargettitle'                    => 'No target',
+'notargettext'                     => 'You have not specified a target page or user to perform this function on.',
+'nopagetitle'                      => 'No such target page',
+'nopagetext'                       => 'The target page you have specified does not exist.',
+'pager-newer-n'                    => '{{PLURAL:$1|newer 1|newer $1}}',
+'pager-older-n'                    => '{{PLURAL:$1|older 1|older $1}}',
+'suppress'                         => 'Oversight',
+'querypage-disabled'               => 'This special page is disabled for performance reasons.',
 
 # Book sources
 'booksources'               => 'Book sources',
@@ -2969,12 +3001,12 @@ Future changes to this page and its associated talk page will be listed there.',
 'notvisiblerev'        => 'The last revision by a different user has been deleted',
 'watchlist-details'    => '{{PLURAL:$1|$1 page|$1 pages}} on your watchlist, not counting talk pages.',
 'wlheader-enotif'      => 'Email notification is enabled.',
-'wlheader-showupdated' => "Pages that have been changed since you last visited them are shown in <strong>bold</strong>.",
+'wlheader-showupdated' => 'Pages that have been changed since you last visited them are shown in <strong>bold</strong>.',
 'watchmethod-recent'   => 'checking recent edits for watched pages',
 'watchmethod-list'     => 'checking watched pages for recent edits',
 'watchlistcontains'    => 'Your watchlist contains $1 {{PLURAL:$1|page|pages}}.',
 'iteminvalidname'      => 'Problem with item "$1", invalid name...',
-'wlnote2'              => "Below are the changes in the last {{PLURAL:$1|hour|<strong>$1</strong> hours}}, as of $2, $3.",
+'wlnote2'              => 'Below are the changes in the last {{PLURAL:$1|hour|<strong>$1</strong> hours}}, as of $2, $3.',
 'wlshowlast'           => 'Show last $1 hours $2 days $3',
 'watchlist-options'    => 'Watchlist options',
 
@@ -3029,41 +3061,41 @@ Feedback and further assistance:
 'changed'                      => 'changed', # only translate this message to other languages if you have to change it
 
 # Delete
-'deletepage'             => 'Delete page',
-'confirm'                => 'Confirm',
-'excontent'              => 'content was: "$1"',
-'excontentauthor'        => 'content was: "$1" (and the only contributor was "[[Special:Contributions/$2|$2]]")',
-'exbeforeblank'          => 'content before blanking was: "$1"',
-'exblank'                => 'page was empty',
-'delete-confirm'         => 'Delete "$1"',
-'delete-legend'          => 'Delete',
-'historywarning'         => "<strong>Warning:</strong> The page you are about to delete has a history with approximately $1 {{PLURAL:$1|revision|revisions}}:",
-'confirmdeletetext'      => 'You are about to delete a page along with all of its history.
+'deletepage'                 => 'Delete page',
+'confirm'                    => 'Confirm',
+'excontent'                  => 'content was: "$1"',
+'excontentauthor'            => 'content was: "$1" (and the only contributor was "[[Special:Contributions/$2|$2]]")',
+'exbeforeblank'              => 'content before blanking was: "$1"',
+'exblank'                    => 'page was empty',
+'delete-confirm'             => 'Delete "$1"',
+'delete-legend'              => 'Delete',
+'historywarning'             => '<strong>Warning:</strong> The page you are about to delete has a history with approximately $1 {{PLURAL:$1|revision|revisions}}:',
+'confirmdeletetext'          => 'You are about to delete a page along with all of its history.
 Please confirm that you intend to do this, that you understand the consequences, and that you are doing this in accordance with [[{{MediaWiki:Policy-url}}|the policy]].',
-'deleting-backlinks-warning' => "'''Warning:''' Other pages link to or transclude from the page you are about to delete.",
-'actioncomplete'         => 'Action complete',
-'actionfailed'           => 'Action failed',
-'deletedtext'            => '"$1" has been deleted.
+'actioncomplete'             => 'Action complete',
+'actionfailed'               => 'Action failed',
+'deletedtext'                => '"$1" has been deleted.
 See $2 for a record of recent deletions.',
-'dellogpage'             => 'Deletion log',
-'dellogpagetext'         => 'Below is a list of the most recent deletions.',
-'deletionlog'            => 'deletion log',
-'reverted'               => 'Reverted to earlier revision',
-'deletecomment'          => 'Reason:',
-'deleteotherreason'      => 'Other/additional reason:',
-'deletereasonotherlist'  => 'Other reason',
-'deletereason-dropdown'  => '* Common delete reasons
+'dellogpage'                 => 'Deletion log',
+'dellogpagetext'             => 'Below is a list of the most recent deletions.',
+'deletionlog'                => 'deletion log',
+'reverted'                   => 'Reverted to earlier revision',
+'deletecomment'              => 'Reason:',
+'deleteotherreason'          => 'Other/additional reason:',
+'deletereasonotherlist'      => 'Other reason',
+'deletereason-dropdown'      => '* Common delete reasons
 ** Spam
 ** Vandalism
 ** Copyright violation
 ** Author request
 ** Broken redirect',
-'delete-edit-reasonlist' => 'Edit deletion reasons',
-'delete-toobig'          => 'This page has a large edit history, over $1 {{PLURAL:$1|revision|revisions}}.
+'delete-edit-reasonlist'     => 'Edit deletion reasons',
+'delete-toobig'              => 'This page has a large edit history, over $1 {{PLURAL:$1|revision|revisions}}.
 Deletion of such pages has been restricted to prevent accidental disruption of {{SITENAME}}.',
-'delete-warning-toobig'  => 'This page has a large edit history, over $1 {{PLURAL:$1|revision|revisions}}.
+'delete-warning-toobig'      => 'This page has a large edit history, over $1 {{PLURAL:$1|revision|revisions}}.
 Deleting it may disrupt database operations of {{SITENAME}};
 proceed with caution.',
+'deleting-backlinks-warning' => "'''Warning:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Other pages]] link to or transclude the page you are about to delete.",
 
 # Rollback
 'rollback'                   => 'Roll back edits',
@@ -3111,15 +3143,15 @@ See the [[Special:ProtectedPages|protected pages list]] for the list of currentl
 '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 <strong>$1</strong>.",
-'protect-locked-blocked'           => "You cannot change protection levels while blocked.
-Here are the current settings for the page <strong>$1</strong>:",
-'protect-locked-dblock'            => "Protection levels cannot be changed due to an active database lock.
-Here are the current settings for the page <strong>$1</strong>:",
-'protect-locked-access'            => "Your account does not have permission to change page protection levels.
-Here are the current settings for the page <strong>$1</strong>:",
+'protect-text'                     => 'Here you may view and change the protection level for the page <strong>$1</strong>.',
+'protect-locked-blocked'           => 'You cannot change protection levels while blocked.
+Here are the current settings for the page <strong>$1</strong>:',
+'protect-locked-dblock'            => 'Protection levels cannot be changed due to an active database lock.
+Here are the current settings for the page <strong>$1</strong>:',
+'protect-locked-access'            => 'Your account does not have permission to change page protection levels.
+Here are the current settings for the page <strong>$1</strong>:',
 '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.",
+Changes to this page's protection level will not affect the cascading protection.",
 'protect-default'                  => 'Allow all users',
 'protect-fallback'                 => 'Allow only users with "$1" permission',
 'protect-level-autoconfirmed'      => 'Allow only autoconfirmed users',
@@ -3164,7 +3196,7 @@ You can change this page's protection level, but it will not affect the cascadin
 'undelete'                     => 'View deleted pages',
 'undelete-summary'             => '', # do not translate or duplicate this message to other languages
 'undeletepage'                 => 'View and restore deleted pages',
-'undeletepagetitle'            => "<strong>The following consists of deleted revisions of [[:$1|$1]]</strong>.",
+'undeletepagetitle'            => '<strong>The following consists of deleted revisions of [[:$1|$1]]</strong>.',
 'viewdeletedpage'              => 'View deleted pages',
 'undeletepagetext'             => 'The following {{PLURAL:$1|page has been deleted but is|$1 pages have been deleted but are}} still in the archive and can be restored.
 The archive may be periodically cleaned out.',
@@ -3193,9 +3225,9 @@ You may have a bad link, or the revision may have been restored or removed from
 'undeletedfiles'               => '{{PLURAL:$1|1 file|$1 files}} restored',
 'cannotundelete'               => 'Undelete failed:
 $1',
-'undeletedpage'                => "<strong>$1 has been restored</strong>
+'undeletedpage'                => '<strong>$1 has been restored</strong>
 
-Consult the [[Special:Log/delete|deletion log]] for a record of recent deletions and restorations.",
+Consult the [[Special:Log/delete|deletion log]] for a record of recent deletions and restorations.',
 'undelete-header'              => 'See [[Special:Log/delete|the deletion log]] for recently deleted pages.',
 'undelete-search-title'        => 'Search deleted pages',
 'undelete-search-box'          => 'Search deleted pages',
@@ -3214,7 +3246,7 @@ It may have already been undeleted.',
 $1',
 'undelete-show-file-confirm'   => 'Are you sure you want to view the deleted revision of the file "<nowiki>$1</nowiki>" from $2 at $3?',
 'undelete-show-file-submit'    => 'Yes',
-'undelete-revision-row'         => '$1 $2 ($3) $4 . . $5 $6 $7 $8 $9', # only translate this message to other languages if you have to change it
+'undelete-revision-row'        => '$1 $2 ($3) $4 . . $5 $6 $7 $8 $9', # only translate this message to other languages if you have to change it
 
 # Namespace form on various pages
 'namespace'                     => 'Namespace:',
@@ -3239,6 +3271,7 @@ $1',
 'sp-contributions-newbies-sub'         => 'For new accounts',
 'sp-contributions-newbies-title'       => 'User contributions for new accounts',
 'sp-contributions-blocklog'            => 'block log',
+'sp-contributions-suppresslog'         => 'suppressed user contributions',
 'sp-contributions-deleted'             => 'deleted user contributions',
 'sp-contributions-uploads'             => 'uploads',
 'sp-contributions-logs'                => 'logs',
@@ -3251,6 +3284,7 @@ The latest block log entry is provided below for reference:',
 'sp-contributions-search'              => 'Search for contributions',
 'sp-contributions-username'            => 'IP address or username:',
 'sp-contributions-toponly'             => 'Only show edits that are latest revisions',
+'sp-contributions-newonly'             => 'Only show edits that are page creations',
 'sp-contributions-submit'              => 'Search',
 'sp-contributions-explain'             => '', # only translate this message to other languages if you have to change it
 'sp-contributions-footer'              => '-', # do not translate or duplicate this message to other languages
@@ -3262,9 +3296,9 @@ The latest block log entry is provided below for reference:',
 'whatlinkshere-title'      => 'Pages that link to "$1"',
 'whatlinkshere-summary'    => '', # do not translate or duplicate this message to other languages
 'whatlinkshere-page'       => 'Page:',
-'linkshere'                => "The following pages link to <strong>[[:$1]]</strong>:",
-'nolinkshere'              => "No pages link to <strong>[[:$1]]</strong>.",
-'nolinkshere-ns'           => "No pages link to <strong>[[:$1]]</strong> in the chosen namespace.",
+'linkshere'                => 'The following pages link to <strong>[[:$1]]</strong>:',
+'nolinkshere'              => 'No pages link to <strong>[[:$1]]</strong>.',
+'nolinkshere-ns'           => 'No pages link to <strong>[[:$1]]</strong> in the chosen namespace.',
 'isredirect'               => 'redirect page',
 'istemplate'               => 'transclusion',
 'isimage'                  => 'file link',
@@ -3432,7 +3466,7 @@ To lock or unlock the database, this needs to be writable by the web server.',
 'move-page'                    => 'Move $1',
 'movepage-summary'             => '', # do not translate or duplicate this message to other languages
 'move-page-legend'             => 'Move page',
-'movepagetext'                 => "Using the form below will rename a page, moving all of its history to the new name.
+'movepagetext'                 => 'Using the form below will rename a page, moving all of its history to the new name.
 The old title will become a redirect page to the new title.
 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]].
@@ -3443,8 +3477,8 @@ This means that you can rename a page back to where it was renamed from if you m
 
 <strong>Warning!</strong>
 This can be a drastic and unexpected change for a popular page;
-please be sure you understand the consequences of this before proceeding.",
-'movepagetext-noredirectfixer' => "Using the form below will rename a page, moving all of its history to the new name.
+please be sure you understand the consequences of this before proceeding.',
+'movepagetext-noredirectfixer' => 'Using the form below will rename a page, moving all of its history to the new name.
 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.
@@ -3454,14 +3488,14 @@ This means that you can rename a page back to where it was renamed from if you m
 
 <strong>Warning!</strong>
 This can be a drastic and unexpected change for a popular page;
-please be sure you understand the consequences of this before proceeding.",
-'movepagetalktext'             => "The associated talk page will be automatically moved along with it <strong>unless:</strong>
+please be sure you understand the consequences of this before proceeding.',
+'movepagetalktext'             => 'The associated talk page will be automatically moved along with it <strong>unless:</strong>
 *A non-empty talk page already exists under the new name, or
 *You uncheck the box below.
 
-In those cases, you will have to move or merge the page manually if desired.",
+In those cases, you will have to move or merge the page manually if desired.',
 'movearticle'                  => 'Move page:',
-'moveuserpage-warning'         => "<strong>Warning:</strong> You are about to move a user page. Please note that only the page will be moved and the user will <em>not</em> be renamed.",
+'moveuserpage-warning'         => '<strong>Warning:</strong> You are about to move a user page. Please note that only the page will be moved and the user will <em>not</em> be renamed.',
 'movenologintext'              => 'You must be a registered user and [[Special:UserLogin|logged in]] to move a page.',
 'movenotallowed'               => 'You do not have permission to move pages.',
 'movenotallowedfile'           => 'You do not have permission to move files.',
@@ -3512,10 +3546,10 @@ cannot move a page over itself.',
 'imageinvalidfilename'         => 'The target filename is invalid',
 'fix-double-redirects'         => 'Update any redirects that point to the original title',
 'move-leave-redirect'          => 'Leave a redirect behind',
-'protectedpagemovewarning'     => "<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can move it.
-The latest log entry is provided below for reference:",
-'semiprotectedpagemovewarning' => "<strong>Note:</strong> This page has been protected so that only registered users can move it.
-The latest log entry is provided below for reference:",
+'protectedpagemovewarning'     => '<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can move it.
+The latest log entry is provided below for reference:',
+'semiprotectedpagemovewarning' => '<strong>Note:</strong> This page has been protected so that only registered users can move it.
+The latest log entry is provided below for reference:',
 'move-over-sharedrepo'         => '== File exists ==
 [[:$1]] exists on a shared repository. Moving a file to this title will override the shared file.',
 'file-exists-sharedrepo'       => 'The filename chosen is already in use on a shared repository.
@@ -3532,8 +3566,8 @@ To export pages, enter the titles in the text box below, one title per line, and
 In the latter case you can also use a link, for example [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] for the page "[[{{MediaWiki:Mainpage}}]]".',
 'exportall'         => 'Export all pages',
 'exportcuronly'     => 'Include only the current revision, not the full history',
-'exportnohistory'   => "----
-<strong>Note:</strong> Exporting the full history of pages through this form has been disabled due to performance reasons.",
+'exportnohistory'   => '----
+<strong>Note:</strong> Exporting the full history of pages through this form has been disabled due to performance reasons.',
 'exportlistauthors' => 'Include a full list of contributors for each page',
 'export-submit'     => 'Export',
 'export-addcattext' => 'Add pages from category:',
@@ -3551,7 +3585,7 @@ In the latter case you can also use a link, for example [[{{#Special:Export}}/{{
 'allmessagescurrent'            => 'Current message text',
 'allmessagestext'               => 'This is a list of system messages available in the MediaWiki namespace.
 Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
-'allmessagesnotsupportedDB'     => "This page cannot be used because <strong>\$wgUseDatabaseMessages</strong> has been disabled.",
+'allmessagesnotsupportedDB'     => 'This page cannot be used because <strong>$wgUseDatabaseMessages</strong> has been disabled.',
 'allmessages-filter-legend'     => 'Filter',
 'allmessages-filter'            => 'Filter by customization state:',
 'allmessages-filter-unmodified' => 'Unmodified',
@@ -3563,20 +3597,21 @@ Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation
 'allmessages-filter-translate'  => 'Translate',
 
 # Thumbnails
-'thumbnail-more'           => 'Enlarge',
-'filemissing'              => 'File missing',
-'thumbnail_error'          => 'Error creating thumbnail: $1',
-'thumbnail_error_remote'   => 'Error message from $1:
+'thumbnail-more'                => 'Enlarge',
+'filemissing'                   => 'File missing',
+'thumbnail_error'               => 'Error creating thumbnail: $1',
+'thumbnail_error_remote'        => 'Error message from $1:
 $2',
-'djvu_page_error'          => 'DjVu page out of range',
-'djvu_no_xml'              => 'Unable to fetch XML for DjVu file',
-'thumbnail-temp-create'    => 'Unable to create temporary thumbnail file',
-'thumbnail-dest-create'    => 'Unable to save thumbnail to destination',
-'thumbnail_invalid_params' => 'Invalid thumbnail parameters',
-'thumbnail_dest_directory' => 'Unable to create destination directory',
-'thumbnail_image-type'     => 'Image type not supported',
-'thumbnail_gd-library'     => 'Incomplete GD library configuration: Missing function $1',
-'thumbnail_image-missing'  => 'File seems to be missing: $1',
+'djvu_page_error'               => 'DjVu page out of range',
+'djvu_no_xml'                   => 'Unable to fetch XML for DjVu file',
+'thumbnail-temp-create'         => 'Unable to create temporary thumbnail file',
+'thumbnail-dest-create'         => 'Unable to save thumbnail to destination',
+'thumbnail_invalid_params'      => 'Invalid thumbnail parameters',
+'thumbnail_dest_directory'      => 'Unable to create destination directory',
+'thumbnail_image-type'          => 'Image type not supported',
+'thumbnail_gd-library'          => 'Incomplete GD library configuration: Missing function $1',
+'thumbnail_image-missing'       => 'File seems to be missing: $1',
+'thumbnail_image-failure-limit' => 'There have been too many recent failed attempts ($1 or more) to render this thumbnail. Please try again later.',
 
 # Special:Import
 'import'                     => 'Import pages',
@@ -3790,6 +3825,8 @@ You can view its source',
 'tooltip-undo'                        => '"Undo" reverts this edit and opens the edit form in preview mode. It allows adding a reason in the summary.',
 'tooltip-preferences-save'            => 'Save preferences',
 'tooltip-summary'                     => 'Enter a short summary',
+'interlanguage-link-title'            => '$1 – $2', # only translate this message to other languages if you have to change it
+'interlanguage-link-title-langonly'   => '$1', # do not translate or duplicate this message to other languages
 
 # Stylesheets
 'common.css'              => '/* CSS placed here will be applied to all skins */', # only translate this message to other languages if you have to change it
@@ -3833,16 +3870,16 @@ You can view its source',
 'nocredits'        => 'There is no credits info available for this page.',
 
 # Spam protection
-'spamprotectiontitle' => 'Spam protection filter',
-'spamprotectiontext'  => 'The text you wanted to save was blocked by the spam filter.
+'spamprotectiontitle'  => 'Spam protection filter',
+'spamprotectiontext'   => 'The text you wanted to save was blocked by the spam filter.
 This is probably caused by a link to a blacklisted external site.',
-'spamprotectionmatch' => 'The following text is what triggered our spam filter: $1',
-'spambot_username'    => 'MediaWiki spam cleanup',
-'spam_reverting'      => 'Reverting to last revision not containing links to $1',
-'spam_blanking'       => 'All revisions contained links to $1, blanking',
-'spam_deleting'       => 'All revisions contained links to $1, deleting',
-'simpleantispam-label' => "Anti-spam check.
-Do <strong>NOT</strong> fill this in!",
+'spamprotectionmatch'  => 'The following text is what triggered our spam filter: $1',
+'spambot_username'     => 'MediaWiki spam cleanup',
+'spam_reverting'       => 'Reverting to last revision not containing links to $1',
+'spam_blanking'        => 'All revisions contained links to $1, blanking',
+'spam_deleting'        => 'All revisions contained links to $1, deleting',
+'simpleantispam-label' => 'Anti-spam check.
+Do <strong>NOT</strong> fill this in!',
 
 # Info page
 'pageinfo-header'                 => '-', # do not translate or duplicate this message to other languages
@@ -3935,9 +3972,9 @@ $1',
 'nextdiff'     => 'Newer edit →',
 
 # Media information
-'mediawarning'                => "<strong>Warning:</strong> This file type may contain malicious code.
-By executing it, your system may be compromised.",
-'imagemaxsize'                => "Image size limit:<br /><em>(for file description pages)</em>",
+'mediawarning'                => '<strong>Warning:</strong> This file type may contain malicious code.
+By executing it, your system may be compromised.',
+'imagemaxsize'                => 'Image size limit:<br /><em>(for file description pages)</em>',
 'thumbsize'                   => 'Thumbnail size:',
 'widthheight'                 => '$1 × $2', # only translate this message to other languages if you have to change it
 'widthheightpage'             => '$1 × $2, $3 {{PLURAL:$3|page|pages}}',
@@ -3957,12 +3994,12 @@ By executing it, your system may be compromised.",
 'file-info-png-looped'        => 'looped',
 'file-info-png-repeat'        => 'played $1 {{PLURAL:$1|time|times}}',
 'file-info-png-frames'        => '$1 {{PLURAL:$1|frame|frames}}',
-'file-no-thumb-animation'     => "<strong>Note: Due to technical limitations, thumbnails of this file will not be animated.</strong>",
-'file-no-thumb-animation-gif' => "<strong>Note: Due to technical limitations, thumbnails of high resolution GIF images such as this one will not be animated.</strong>",
+'file-no-thumb-animation'     => '<strong>Note: Due to technical limitations, thumbnails of this file will not be animated.</strong>',
+'file-no-thumb-animation-gif' => '<strong>Note: Due to technical limitations, thumbnails of high resolution GIF images such as this one will not be animated.</strong>',
 
 # Special:NewFiles
 'newimages'             => 'Gallery of new files',
-'imagelisttext'         => "Below is a list of <strong>$1</strong> {{PLURAL:$1|file|files}} sorted $2.",
+'imagelisttext'         => 'Below is a list of <strong>$1</strong> {{PLURAL:$1|file|files}} sorted $2.',
 'newimages-summary'     => 'This special page shows the last uploaded files.',
 'newimages-legend'      => 'Filter',
 'newimages-label'       => 'Filename (or a part of it):',
@@ -4083,7 +4120,7 @@ Others will be hidden by default.
 * gpslatitude
 * gpslongitude
 * gpsaltitude',
-'metadata-langitem'         => "<strong>$2:</strong> $1", # only translate this message to other languages if you have to change it
+'metadata-langitem'         => '<strong>$2:</strong> $1', # only translate this message to other languages if you have to change it
 'metadata-langitem-default' => '$1', # only translate this message to other languages if you have to change it
 
 # Exif tags
@@ -4601,10 +4638,10 @@ This confirmation code will expire at $4.',
 'scarytranscludetoolong'           => '[URL is too long]',
 
 # Delete conflict
-'deletedwhileediting'      => "<strong>Warning:</strong> This page was deleted after you started editing!",
-'confirmrecreate'          => "User [[User:$1|$1]] ([[User talk:$1|talk]]) deleted this page after you started editing with reason:
+'deletedwhileediting'      => '<strong>Warning:</strong> This page was deleted after you started editing!',
+'confirmrecreate'          => 'User [[User:$1|$1]] ([[User talk:$1|talk]]) deleted this page after you started editing with reason:
 : <em>$2</em>
-Please confirm that you really want to recreate this page.",
+Please confirm that you really want to recreate this page.',
 'confirmrecreate-noreason' => 'User [[User:$1|$1]] ([[User talk:$1|talk]]) deleted this page after you started editing. Please confirm that you really want to recreate this page.',
 'recreate'                 => 'Recreate',
 
@@ -4640,10 +4677,11 @@ Please confirm that you really want to recreate this page.",
 'imgmultigo'       => 'Go!',
 'imgmultigoto'     => 'Go to page $1',
 
-'img-lang-opt' => '$2 ($1)',
+# Language selector for translatable SVGs
+'img-lang-opt'     => '$2 ($1)', # only translate this message to other languages if you have to change it
 'img-lang-default' => '(default language)',
-'img-lang-info' => 'Render this image in $1. $2',
-'img-lang-go' => 'Go',
+'img-lang-info'    => 'Render this image in $1. $2',
+'img-lang-go'      => 'Go',
 
 # Table pager
 'ascending_abbrev'         => 'asc',
@@ -4833,20 +4871,20 @@ You can also [[Special:EditWatchlist|use the standard editor]].',
 'version-parser-function-hooks'         => 'Parser function hooks',
 'version-hook-name'                     => 'Hook name',
 'version-hook-subscribedby'             => 'Subscribed by',
-'version-version'                       => '($1)',
+'version-version'                       => '($1)', # only translate this message to other languages if you have to change it
 'version-svn-revision'                  => 'r$1', # only translate this message to other languages if you have to change it
 'version-license'                       => 'MediaWiki License',
-'version-license-title'                 => 'License for $1',
-'version-license-not-found'             => 'No detailed license information was found for this extension.',
-'version-credits-title'                 => 'Credits for $1',
-'version-credits-not-found'             => 'No detailed credits information was found for this extension.',
 'version-ext-license'                   => 'License',
 'version-ext-colheader-name'            => 'Extension',
 'version-ext-colheader-version'         => 'Version',
 'version-ext-colheader-license'         => 'License',
 'version-ext-colheader-description'     => 'Description',
 'version-ext-colheader-credits'         => 'Authors',
-'version-poweredby-credits'             => "This wiki is powered by <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.",
+'version-license-title'                 => 'License for $1',
+'version-license-not-found'             => 'No detailed license information was found for this extension.',
+'version-credits-title'                 => 'Credits for $1',
+'version-credits-not-found'             => 'No detailed credits information was found for this extension.',
+'version-poweredby-credits'             => 'This wiki is powered by <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.',
 'version-poweredby-others'              => 'others',
 'version-poweredby-translators'         => 'translatewiki.net translators',
 'version-credits-summary'               => 'We would like to recognize the following persons for their contribution to [[Special:Version|MediaWiki]].',
@@ -4883,8 +4921,8 @@ You should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU Gen
 'redirect-lookup'     => 'Lookup:',
 'redirect-value'      => 'Value:',
 'redirect-user'       => 'User ID',
-'redirect-revision'   => 'Page revision',
 'redirect-page'       => 'Page ID',
+'redirect-revision'   => 'Page revision',
 'redirect-file'       => 'File name',
 'redirect-not-exists' => 'Value not found',
 
@@ -4973,13 +5011,13 @@ You should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU Gen
 'dberr-cachederror' => 'This is a cached copy of the requested page, and may not be up to date.',
 
 # HTML forms
-'htmlform-invalid-input'       => 'There are problems with some of your input',
+'htmlform-invalid-input'       => 'There are problems with some of your input.',
 'htmlform-select-badoption'    => 'The value you specified is not a valid option.',
 'htmlform-int-invalid'         => 'The value you specified is not an integer.',
 'htmlform-float-invalid'       => 'The value you specified is not a number.',
-'htmlform-int-toolow'          => 'The value you specified is below the minimum of $1',
-'htmlform-int-toohigh'         => 'The value you specified is above the maximum of $1',
-'htmlform-required'            => 'This value is required',
+'htmlform-int-toolow'          => 'The value you specified is below the minimum of $1.',
+'htmlform-int-toohigh'         => 'The value you specified is above the maximum of $1.',
+'htmlform-required'            => 'This value is required.',
 'htmlform-submit'              => 'Submit',
 'htmlform-reset'               => 'Undo changes',
 'htmlform-selectorother-other' => 'Other',
@@ -5105,6 +5143,7 @@ Otherwise, you can use the easy form below. Your comment will be added to the pa
 '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-stasherror'                    => 'There was an error while uploading the file to stash.',
 '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".',
@@ -5113,7 +5152,6 @@ Otherwise, you can use the easy form below. Your comment will be added to the pa
 'api-error-unknownerror'                  => 'Unknown error: "$1".',
 'api-error-uploaddisabled'                => 'Uploading is disabled on this wiki.',
 'api-error-verification-error'            => 'This file might be corrupt, or have the wrong extension.',
-'api-error-stasherror'                    => 'There was an error while uploading the file to stash.',
 
 # Durations
 'duration-seconds'   => '$1 {{PLURAL:$1|second|seconds}}',
@@ -5148,7 +5186,7 @@ Otherwise, you can use the easy form below. Your comment will be added to the pa
 'limitreport-expensivefunctioncount'       => 'Expensive parser function count',
 'limitreport-expensivefunctioncount-value' => '$1/$2', # only translate this message to other languages if you have to change it
 
-# ExpandTemplates
+# Special:ExpandTemplates
 'expandtemplates'                   => 'Expand templates',
 'expand_templates_intro'            => 'This special page takes text and expands all templates in it recursively.
 It also expands supported parser functions like
@@ -5166,4 +5204,5 @@ In fact, it expands pretty much everything in double-braces.',
 'expand_templates_generate_xml'     => 'Show XML parse tree',
 'expand_templates_generate_rawhtml' => 'Show raw HTML',
 'expand_templates_preview'          => 'Preview',
+
 );
index 78fcac1..c741f02 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Dantman
  * @author FrigidNinja
+ * @author Nemo bis
  * @author Shirayuki
  * @author Techman224
  * @author គីមស៊្រុន
@@ -19,7 +20,7 @@ $messages = array(
 'talk' => 'Discussion',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => 'អំពី {{SITENAME}}',
+'aboutsite' => 'About {{SITENAME}}',
 'mainpage' => 'Main Page',
 
 'editsection' => 'edit',
index 34713f8..ff6b02c 100644 (file)
@@ -152,7 +152,11 @@ If the file has been modified from its original state, some details may not full
 'confirmemail_invalidated' => 'Email address confirmation cancelled',
 
 # Special:Version
-'version-license' => 'Licence',
+'version-license' => 'MediaWiki Licence',
+'version-ext-license' => 'Licence',
+'version-ext-colheader-license' => 'Licence',
+'version-license-title' => 'Licence for $1',
+'version-license-not-found' => 'No detailed licence information was found for this extension.',
 'version-credits-summary' => 'We would like to recognise the following persons for their contribution to [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version.
 
index 525ebdb..e6f31a9 100644 (file)
@@ -330,22 +330,22 @@ $messages = array(
 'tog-hidepatrolled' => 'Kaŝi patrolitajn redaktojn en lastaj ŝanĝoj',
 'tog-newpageshidepatrolled' => 'Kaŝi patrolitajn paĝojn de listo de novaj paĝoj',
 'tog-extendwatchlist' => 'Etendi la atentaron por montri ĉiujn ŝanĝojn, ne nur la plej lastajn',
-'tog-usenewrc' => 'Grupigi ŝanĝoj laŭ paĝo en "Lastaj ŝanĝoj" kaj "Atentaro" (bezonas Ĝavaskripton)',
+'tog-usenewrc' => 'Grupigi ŝanĝojn laŭ paĝo en "Lastaj ŝanĝoj" kaj "Atentaro" (bezonas Ĝavaskripton)',
 'tog-numberheadings' => 'Aŭtomate numerigi sekciojn',
-'tog-showtoolbar' => 'Montri redakto-breton (per JavaScript)',
-'tog-editondblclick' => 'Redakti per duobla alklako (per JavaScript)',
-'tog-editsectiononrightclick' => 'Ŝalti sekcian redaktadon per dekstra musklako de sekciaj titoloj (kun JavaScript)',
-'tog-rememberpassword' => 'Memori mian ensalutadon ĉe ĉi tiu retumilo (daŭrante maksimume $1 {{PLURAL:$1|tagon|tagojn}})',
-'tog-watchcreations' => 'Aldoni miajn kreatajn paĝojn al mia atentaro',
-'tog-watchdefault' => 'Aldoni al mia atentaro paĝojn redaktitajn de mi',
-'tog-watchmoves' => 'Aldoni paĝojn, kiujn mi movas, al mia atentaro',
-'tog-watchdeletion' => 'Aldoni paĝojn, kiujn mi forigas, al mia atentaro',
+'tog-showtoolbar' => 'Montri redakto-breton (per Ĝavaskripto)',
+'tog-editondblclick' => 'Redakti per duobla alklako (per Ĝavaskripto)',
+'tog-editsectiononrightclick' => 'Ŝalti sekcian redaktadon per dekstra musklako de sekciaj titoloj (per Ĝavaskripto)',
+'tog-rememberpassword' => 'Memori mian ensalutadon en ĉi tiu retumilo (daŭrante maksimume $1 {{PLURAL:$1|tagon|tagojn}})',
+'tog-watchcreations' => 'Aldoni miajn kreatajn paĝojn kaj miajn alŝutaĵojn al mia atentaro',
+'tog-watchdefault' => 'Aldoni al mia atentaro paĝojn kaj dosierojn redaktitajn de mi',
+'tog-watchmoves' => 'Aldoni paĝojn kaj dosierojn, kiujn mi movas, al mia atentaro',
+'tog-watchdeletion' => 'Aldoni paĝojn kaj dosierojn, kiujn mi forigas, al mia atentaro',
 'tog-minordefault' => 'Marki defaŭlte ĉiujn redaktojn kiel etajn',
 'tog-previewontop' => 'Montri antaŭrigardon antaŭ redaktilo',
 'tog-previewonfirst' => 'Montri antaŭrigardon je unua redakto',
-'tog-enotifwatchlistpages' => 'Sendi al mi retmesaĝon kiam tiu paĝo en mia atentaro estas ŝanĝita',
+'tog-enotifwatchlistpages' => 'Sendi al mi retmesaĝon kiam paĝo aŭ dosiero en mia atentaro estas ŝanĝita',
 'tog-enotifusertalkpages' => 'Sendi al mi retmesaĝon kiam mia diskutpaĝo estas ŝanĝita',
-'tog-enotifminoredits' => 'Sendi al mi ankaŭ retmesaĝojn pro malgrandaj redaktoj de paĝoj',
+'tog-enotifminoredits' => 'Sendi al mi ankaŭ retmesaĝojn pro malgrandaj redaktoj de paĝoj kaj dosieroj',
 'tog-enotifrevealaddr' => 'Malkaŝi mian retadreson en informaj retpoŝtaĵoj',
 'tog-shownumberswatching' => 'Montri la nombron da priatentaj uzantoj',
 'tog-oldsig' => 'Ekzistanta subskribo:',
@@ -353,16 +353,17 @@ $messages = array(
 'tog-uselivepreview' => 'Uzi tujan antaŭrigardon (per ĜavaSkripto) (Eksperimenta)',
 'tog-forceeditsummary' => 'Averti min kiam mi konservas malplenan redaktoresumon',
 'tog-watchlisthideown' => 'Kaŝi miajn redaktojn de la atentaro',
-'tog-watchlisthidebots' => 'Kaŝi bot-redaktojn de la atentaro',
+'tog-watchlisthidebots' => 'Kaŝi robotajn redaktojn de la atentaro',
 'tog-watchlisthideminor' => 'Kaŝi malgrandajn redaktojn de la atentaro',
 'tog-watchlisthideliu' => 'Kaŝi redaktojn de ensalutitaj uzantoj de la atentaro',
 'tog-watchlisthideanons' => 'Kaŝi redaktojn de anonimuloj de la atentaro',
 'tog-watchlisthidepatrolled' => 'Kaŝi patrolitajn redaktojn de la atentaro',
 'tog-ccmeonemails' => 'Sendi al mi kopiojn de retpoŝtaĵoj, kiujn mi sendis al aliaj uzantoj.',
-'tog-diffonly' => 'Ne montri paĝan enhavon sub la ŝanĝoj',
+'tog-diffonly' => 'Ne montri paĝan enhavon sub la ŝanĝmontrilo',
 'tog-showhiddencats' => 'Montri kaŝitajn kategoriojn',
 'tog-norollbackdiff' => 'Preterlasi ŝanĝoelmontron post malfaro',
 'tog-useeditwarning' => 'Averti min kiam mi forlasas redaktan paĝon kun nekonservitaj ŝanĝoj',
+'tog-prefershttps' => 'Ĉiam uzu sekuran konekton ensalutite',
 
 'underline-always' => 'Ĉiam',
 'underline-never' => 'Neniam',
@@ -447,7 +448,7 @@ $messages = array(
 'category-empty' => "''Ĉi tiu kategorio momente ne enhavas artikolojn aŭ mediojn.''",
 'hidden-categories' => '{{PLURAL:$1|Kaŝita kategorio|Kaŝitaj kategorioj}}',
 'hidden-category-category' => 'Kaŝitaj kategorioj',
-'category-subcat-count' => '{{PLURAL:$2|Ĉi tiu kategorio havas nur la suban subkategorion.|Ĉi tiu kategorio havas la {{PLURAL:$1|suban subkategorion|$1 subajn subkategoriojn}}, el $2 entute.}}',
+'category-subcat-count' => '{{PLURAL:$2|Ĉi tiu kategorio havas nur la jenan subkategorion.|Ĉi tiu kategorio havas la {{PLURAL:$1|jenan subkategorion|$1 jenajn subkategoriojn}}, el $2 entute.}}',
 'category-subcat-count-limited' => 'Ĉi tiu kategorio havas la {{PLURAL:$1|jenan subkategorion|jenajn $1 subkategoriojn}}.',
 'category-article-count' => '{{PLURAL:$2|Ĉi tiu kategorio enhavas nur la jenan paĝon.|La {{PLURAL:$1|jena paĝo|jenaj $1 paĝoj}} estas en ĉi tiu kategorio, el $2 entute.}}',
 'category-article-count-limited' => 'La {{PLURAL:$1|jena paĝo|jenaj $1 paĝoj}} estas en la nuna kategorio.',
@@ -458,7 +459,7 @@ $messages = array(
 'noindex-category' => 'Neindeksitaj paĝoj',
 'broken-file-category' => 'Paĝoj kun eraraj dosierligiloj',
 
-'about' => 'Enkonduko',
+'about' => 'Pri',
 'article' => 'Artikolo',
 'newwindow' => '(en nova fenestro)',
 'cancel' => 'Nuligi',
@@ -466,7 +467,7 @@ $messages = array(
 'morenotlisted' => 'Ĉi tiu listo ne estas kompleta.',
 'mypage' => 'Paĝo',
 'mytalk' => 'Diskuto',
-'anontalk' => 'Diskutpaĝo por tiu ĉi IP',
+'anontalk' => 'Diskutpaĝo por tiu ĉi IP-adreso',
 'navigation' => 'Navigado',
 'and' => '&#32;kaj',
 
@@ -474,8 +475,8 @@ $messages = array(
 'qbfind' => 'Trovi',
 'qbbrowse' => 'Foliumi',
 'qbedit' => 'Redakti',
-'qbpageoptions' => 'Paĝagado',
-'qbmyoptions' => 'Personaĵoj',
+'qbpageoptions' => 'Ĉi tiu paĝo',
+'qbmyoptions' => 'Miaj paĝoj',
 'faq' => 'Oftaj demandoj',
 'faqpage' => 'Project:Oftaj demandoj',
 
@@ -486,7 +487,6 @@ $messages = array(
 'vector-action-protect' => 'Protekti',
 'vector-action-undelete' => 'Malforigi',
 'vector-action-unprotect' => 'Ŝanĝi protektadon',
-'vector-simplesearch-preference' => 'Ebligi simpligitan serĉan strion (nur Vektora etoso)',
 'vector-view-create' => 'Krei',
 'vector-view-edit' => 'Redakti',
 'vector-view-history' => 'Vidi historion',
@@ -507,7 +507,7 @@ $messages = array(
 'searcharticle' => 'Ek!',
 'history' => 'Historio de versioj',
 'history_short' => 'Historio',
-'updatedmarker' => 'ĝisdatita de post mia lasta vizito',
+'updatedmarker' => 'ĝisdatigita de post mia lasta vizito',
 'printableversion' => 'Presebla versio',
 'permalink' => 'Konstanta ligilo',
 'print' => 'Printi',
@@ -555,7 +555,7 @@ $messages = array(
 'jumptosearch' => 'serĉi',
 'view-pool-error' => 'Bedaŭrinde la serviloj estas tro uzataj ĉi-momente.
 Tro da uzantoj provas vidi ĉi tiun paĝon.
-Bonvolu atendi iom antaŭ provi atingi ĝin denove.
+Bonvolu atendi iom antaŭ ol provi atingi ĝin denove.
 
 $1',
 'pool-timeout' => 'Tempolimo atingita dum atendo de ŝlosado',
@@ -581,7 +581,7 @@ $1',
 'privacy' => 'Regularo pri respekto de la privateco',
 'privacypage' => 'Project:Respekto de la privateco',
 
-'badaccess' => 'Vi ne havas sufiĉe da redaktorajtoj por tiu paĝo.',
+'badaccess' => 'Vi ne havas sufiĉe da redaktorajtoj por ĉi tiu paĝo.',
 'badaccess-group0' => 'Vi ne rajtas plenumi la agon, kiun vi petis.',
 'badaccess-groups' => 'La ago, kiun vi petis, estas limigita al uzantoj en {{PLURAL:$2|la grupo|unu el la grupoj}}: $1.',
 
@@ -590,7 +590,7 @@ $1',
 
 'ok' => 'Ek!',
 'retrievedfrom' => 'Elŝutita el  "$1"',
-'youhavenewmessages' => 'Por vi estas $1 ($2).',
+'youhavenewmessages' => '{{PLURAL:$3|Vi havas}} $1 ($2).',
 'youhavenewmessagesfromusers' => 'Riceviĝis $1 de {{PLURAL:$3|alia uzanto|$3 uzantoj}} ($2).',
 'youhavenewmessagesmanyusers' => 'Riceviĝis $1 de multaj uzantoj ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|nova mesaĝo|999=novaj mesaĝoj}}',
@@ -635,9 +635,9 @@ $1',
 
 # Main script and global functions
 'nosuchaction' => 'Ne ekzistas tia ago',
-'nosuchactiontext' => "La ago ('action') nomita de la URL estas malvalida.
+'nosuchactiontext' => 'La ago nomita de la URL estas malvalida.
 Eble vi mistajpis la URL-on, aŭ sekvis malvalidan ligilon.
-Eble ankaŭ ĉi tiel indikus problemon de la programaro de {{SITENAME}}.",
+Eble ankaŭ ĉi tiel indikus problemon de la programaro de {{SITENAME}}.',
 'nosuchspecialpage' => 'Ne ekzistas tia speciala paĝo',
 'nospecialpagetext' => '<strong>Vi petis malvalidan specialan paĝon.</strong>
 
@@ -653,20 +653,20 @@ Listo de validaj specialaj paĝoj estas trovebla ĉe [[Special:SpecialPages|{{in
 'databaseerror-function' => 'Funkcio: $1',
 'databaseerror-error' => 'Eraro: $1',
 'laggedslavemode' => 'Avertu: la paĝo eble ne enhavas lastatempajn ĝisdatigojn.',
-'readonly' => 'Datumaro ŝlosita, nurlega',
-'enterlockreason' => 'Bonvolu klarigi, kial oni ŝlosas la datumaron, kaj
+'readonly' => 'Datumbazo ŝlosita, nurlega',
+'enterlockreason' => 'Bonvolu klarigi, kial oni ŝlosas la datumbazon, kaj
 la estimatan tempon de malŝlosado.',
-'readonlytext' => 'La datumaro de {{SITENAME}} estas nun ŝlosita kontraŭ
-novaj aldonaj kaj aliaj ŝanĝoj, verŝajne pro laŭkutima flegado de la datumaro.
+'readonlytext' => 'La datumbazo de {{SITENAME}} estas nun ŝlosita kontraŭ
+novaj aldonaj kaj aliaj ŝanĝoj, verŝajne pro laŭkutima flegado de la datumbazo.
 Bonvolu reprovi post iom da tempo.
 
 La ŝlosinta administranto lasis la jenan klarigon:
 <p>$1</p>',
 'missing-article' => 'La datumbazo ne trovis la tekston de paĝo kiun ĝi devas trovi, nomita "$1" $2.
 
-Ĉi tiel ofte estas kaŭzite de sekvado de malfreŝa \'\'diff\'\' aŭ historia ligilo al paĝo kiu estis forigita.
+Ĉi tio ofte estas kaŭzita de sekvado de malfreŝa \'\'diff\'\' aŭ historia ligilo al paĝo kiu estis forigita.
 
-Se ĉi tiel ne okazis, verŝajne vi trovis cimon en la softvaro.
+Se ĉi tio ne okazis, verŝajne vi trovis cimon en la softvaro.
 Bonvolu raporti ĉi tiun al [[Special:ListUsers/sysop|administranto]], notante la TTT-adreson.',
 'missingarticle-rev' => '(versio#: $1)',
 'missingarticle-diff' => '(Diferenco inter versioj: $1, $2)',
@@ -676,60 +676,63 @@ Bonvolu raporti ĉi tiun al [[Special:ListUsers/sysop|administranto]], notante l
 'fileappenderrorread' => 'Ne eblis legi "$1" dum postaldonado.',
 'fileappenderror' => 'Ne eblis postaldoni "$1" al "$2".',
 'filecopyerror' => 'Ne povis kopii dosieron  "$1" al "$2".',
-'filerenameerror' => 'Neeblis alinomi dosieron "$1" al "$2".',
+'filerenameerror' => 'Ne eblis alinomigi dosieron "$1" al "$2".',
 'filedeleteerror' => 'Neeblis forigi dosieron "$1".',
 'directorycreateerror' => 'Ne povis krei dosierujon "$1".',
-'filenotfound' => 'Neeblis trovi dosieron "$1".',
+'filenotfound' => 'Ne eblis trovi dosieron "$1".',
 'fileexistserror' => 'Ne povas skribi en la dosieron "$1": dosiero ekzistas',
 'unexpected' => 'Neatendita valoro: "$1"="$2".',
-'formerror' => 'Eraro: neeblis liveri formulon',
+'formerror' => 'Eraro: ne eblis liveri formulon',
 'badarticleerror' => 'Tiun ĉi agon oni ne povas apliki al tiu ĉi artikolo.',
 'cannotdelete' => 'Ne eblis forigi la elektitan paĝon aŭ dosieron "$1".
 Eble ĝi estis jam forigita de iu alia.',
 'cannotdelete-title' => 'Ne eblas forigi paĝon "$1"',
-'delete-hook-aborted' => 'Forigo ĉesigis per hoko.
+'delete-hook-aborted' => 'Forigo estis ĉesigita per programa etendaĵo de MediaWiki.
 Ĝi ne donis eksplikon.',
+'no-null-revision' => 'Ne eblis krei novan nulan revizion por paĝo "$1"',
 'badtitle' => 'Fuŝa titolo',
 'badtitletext' => 'La petita paĝotitolo estis malvalida, malplena, aŭ malĝuste ligita interlingva aŭ intervikia titolo.
-Ĝi eble enhavas unu aŭ pliaj signoj kiu ne povas esti uzata en titoloj.',
+Ĝi eble enhavas unu aŭ pliaj signoj, kiuj ne povas esti uzataj en titoloj.',
 'perfcached' => 'La sekvantaj informoj venas el kaŝmemoro kaj eble ne estas ĝisdataj. Maksimumo de {{PLURAL:$1|unu rezulto estas disponebla|$1 rezultoj estas disponeblaj}} en la kaŝmemoro.',
 'perfcachedts' => 'La jenaj datumoj estas el kaŝmemoro kaj estis laste ĝisdatigitaj $1. Maksimumo de {{PLURAL:$4|unu rezulto estas disponebla|$4 rezultoj estas disponeblaj}} en la kaŝmemoro.',
-'querypage-no-updates' => 'Ĝisdatigoj por ĉi paĝo estas nune neebligitaj.
-Datenoj ĉi tie ne estos nune refreŝigitaj.',
+'querypage-no-updates' => 'Ĝisdatigoj por ĉi tiu paĝo estas nune neebligitaj.
+Datumoj ĉi tie ne estos nune refreŝigitaj.',
 'viewsource' => 'Rigardi vikitekston',
 'viewsource-title' => 'Vidi fonton por $1',
 'actionthrottled' => 'Agado limigita',
-'actionthrottledtext' => 'Por kontraŭigi spamon, vi estas limigita farante ĉi tiun agon tro pluroble en mallonga tempdaŭro, kaj vi plialtigis ĉi tiun limon. Bonvolu refaru post kelkaj minutoj.',
+'actionthrottledtext' => 'Por kontraŭigi spamon, vi estas limigita farante ĉi tiun agon tro pluroble en mallonga tempdaŭro, kaj vi transpasis ĉi tiun limon. Bonvolu refaru post kelkaj minutoj.',
 'protectedpagetext' => 'Tiu ĉi paĝo estas ŝlosita por malebligi redaktadon.',
 'viewsourcetext' => 'Vi povas rigardi kaj kopii la fonton de la paĝo:',
 'viewyourtext' => "Vi povas vidi kaj kopii la fonton de '''viaj redaktoj''' al ĉi tiu paĝo:",
 'protectedinterface' => 'Ĉi tiu paĝo provizas interfacan tekston por la programaro, kaj estas ŝlosita por malebligi misuzon.
-Por aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [//translatewiki.net/ translatewiki.net], la projekto por provizi tradukojn por MediaWiki.',
+Por aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [//translatewiki.net/ translatewiki.net], la projekton por provizi tradukojn por MediaWiki.',
 'editinginterface' => "'''Atentu:''' Vi redaktas paĝon, kiu provizas interfacan tekston por la programaro.
 Ŝanĝoj de ĉi tiu teksto ŝanĝos aspekton de la interfaco por aliaj uzantoj de ĉi tiu vikio.
 Por aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [//translatewiki.net/ translatewiki.net], la projekton por provizi tradukojn por MediaWiki.",
-'cascadeprotected' => 'Ĉi tiu paĝo estas protektita kontraŭ redaktado, ĉar ĝi estas inkludita en la {{PLURAL:$1|sekvan paĝon, kiu|sekvajn paĝojn, kiuj}} estas {{PLURAL:$1|protektata|protektataj}} kun la "kaskada" opcio turnita sur:
+'cascadeprotected' => 'Ĉi tiu paĝo estas protektita kontraŭ redaktado, ĉar ĝi estas inkludita en la {{PLURAL:$1|sekvan paĝon, kiu|sekvajn paĝojn, kiuj}} estas {{PLURAL:$1|protektata|protektataj}} kun la "kaskada" opcio ŝaltita sur:
 $2',
 'namespaceprotected' => "Vi ne rajtas redakti paĝojn en la '''$1''' nomspaco.",
 'customcssprotected' => 'Vi ne rajtas redakti ĉi tiun CSS-paĝon, ĉar ĝi enhavas personajn alĝustigojn de alia uzanto.',
-'customjsprotected' => 'Vi ne rajtas redakti ĉi tiun JavaScript-paĝon, ĉar ĝi enhavas personajn alĝustigojn de alia uzanto.',
+'customjsprotected' => 'Vi ne rajtas redakti ĉi tiun Ĝavaskriptan paĝon, ĉar ĝi enhavas personajn alĝustigojn de alia uzanto.',
 'mycustomcssprotected' => 'Vi ne havas la rajton redakti tiun ĉi CSS-paĝon.',
 'mycustomjsprotected' => 'Vi ne havas la rajton redakti tiun ĉi JavaScript-paĝon.',
+'myprivateinfoprotected' => 'Vi ne havas permeson por redakti vian privatan informon.',
+'mypreferencesprotected' => 'Vi ne havas permeson por redakti viajn preferojn.',
 'ns-specialprotected' => 'Paĝoj en la {{ns:special}} nomspaco ne povas esti redaktataj.',
-'titleprotected' => "Ĉi titolo estas protektita de kreado de [[User:$1|$1]].
+'titleprotected' => "Ĉi tiu titolo estas protektita de kreado de [[User:$1|$1]].
 La kialo donata estis ''$2''.",
 'filereadonlyerror' => 'La dosiero "$1" ne estas modifebla, ĉar la datumbazujo "$2" estas en nurlegebla modo.
 
-La administranto kiu ŝlosis ĝin proponis tiun klarigon: "$3".',
+La administranto, kiu ŝlosis ĝin, proponis tiun klarigon: "$3".',
 'invalidtitle-knownnamespace' => 'Nevalida titolo kun nomspaco "$2" kaj teksto "$3"',
 'invalidtitle-unknownnamespace' => 'Nevalida titolo kun nekonata nomspaca numero $1 kaj teksto "$2"',
-'exception-nologin' => 'Ne ensalutita',
+'exception-nologin' => 'Ne ensalutinta',
 'exception-nologin-text' => 'Bonvolu [[Special:Userlogin|ensaluti]] por atingi ĉi tiun paĝon aŭ agon.',
 
 # Virus scanner
 'virus-badscanner' => "Malbona konfiguro: nekonata virusa skanilo: ''$1''",
 'virus-scanfailed' => 'skano malsukcesis (kun kodo $1)',
-'virus-unknownscanner' => 'nekonata kontraŭviruso:',
+'virus-unknownscanner' => 'nekonata kontraŭvirusilo:',
 
 # Login and logout pages
 'logouttext' => "'''Vi nun estas elsalutinta.'''
@@ -741,6 +744,7 @@ Ne forgesu ŝanĝi viajn [[Special:Preferences|{{SITENAME}}-preferojn]]',
 'yourname' => 'Salutnomo:',
 'userlogin-yourname' => 'Uzantonomo',
 'userlogin-yourname-ph' => 'Enigu vian uzantonomon',
+'createacct-another-username-ph' => 'Enigu la salutnomon:',
 'yourpassword' => 'Pasvorto:',
 'userlogin-yourpassword' => 'Pasvorto',
 'userlogin-yourpassword-ph' => 'Enigu vian pasvorton',
@@ -771,12 +775,15 @@ Ne forgesu ŝanĝi viajn [[Special:Preferences|{{SITENAME}}-preferojn]]',
 'gotaccountlink' => 'Ensaluti',
 'userlogin-resetlink' => 'Ĉu vi forgesis ensalutajn detalojn?',
 'userlogin-resetpassword-link' => 'Ĉu vi forgesis vian pasvorton?',
-'helplogin-url' => 'Help:Ensalutado',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Helpo pri ensalutado]]',
+'userlogin-loggedin' => 'Vi jam estas ensalutita kiel {{GENDER:$1|$1}}.
+Uzu la formularon suben por ensaluti kiel alia uzanto.',
+'userlogin-createanother' => 'Krei alian konton',
 'createacct-join' => 'Suben enigu informojn pri vi',
+'createacct-another-join' => 'Enigu la informon de la nova konto suben.',
 'createacct-emailrequired' => 'Retpoŝta adreso',
 'createacct-emailoptional' => 'Retpoŝta adreso (nedeviga)',
 'createacct-email-ph' => 'Enigu vian retpoŝtan adreson',
+'createacct-another-email-ph' => 'Enigu la retpoŝtan adreson',
 'createaccountmail' => 'Uzi provizoran hazardsignan pasvorton kaj sendi ĝin al la retpoŝta adreso ĉi-suba',
 'createacct-realname' => 'Vera nomo (nedeviga)',
 'createaccountreason' => 'Kialo:',
@@ -790,75 +797,78 @@ Ne forgesu ŝanĝi viajn [[Special:Preferences|{{SITENAME}}-preferojn]]',
 'createacct-benefit-body1' => '{{PLURAL:$1|redakto|redaktoj}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|paĝo|paĝoj}}',
 'createacct-benefit-body3' => '{{PLURAL:$1|lasta kontribuanto|lastaj kontribuantoj}}',
-'badretype' => 'La pasvortojn kiujn vi tajpis ne egalas.',
+'badretype' => 'La pasvortoj, kiujn vi tajpis, ne egalas.',
 'userexists' => 'Salutnomo enigita jam estas uzata.
 Bonvolu elekti alian nomon.',
 'loginerror' => 'Ensaluta eraro',
 'createacct-error' => 'Eraro pri kreado de konto',
 'createaccounterror' => 'Ne eblis krei konton: $1',
-'nocookiesnew' => 'La uzantokonto estis kreita sed vi ne estas ensalutinta. *** E-igo lcfirst {{SITENAME}} uzas kuketojn por akcepti uzantojn. Kuketoj esta malaktivigitaj ĉe vi. Bonvolu aktivigi ilin kaj ensalutu per viaj novaj salutnomo kaj pasvorto.',
+'nocookiesnew' => 'La uzantokonto estis kreita sed vi ne estas ensalutinta. {{SITENAME}} uzas kuketojn por akcepti uzantojn. Kuketoj esta malaktivigitaj ĉe vi. Bonvolu aktivigi ilin kaj ensalutu per viaj novaj salutnomo kaj pasvorto.',
 'nocookieslogin' => '{{SITENAME}} uzas kuketojn por akcepti uzantojn. Kuketoj esta malaktivigitaj ĉe vi. Bonvolu aktivigi ilin kaj provu denove.',
-'nocookiesfornew' => 'La uzantokonto ne estis kreita, ĉar ne konfirmeblas ĝia fonto. Certiginte ke kuketoj estas ebligitaj, reŝargu tiun ĉi pagon kaj reprovu.',
+'nocookiesfornew' => 'La uzantokonto ne estis kreita, ĉar ne konfirmeblas ĝia fonto. Certiginte ke kuketoj estas ebligitaj, reŝargu tiun ĉi paĝon kaj reprovu.',
 'noname' => 'Vi ne tajpis validan salutnomon.',
 'loginsuccesstitle' => 'Ensalutado sukcesis',
 'loginsuccess' => 'Vi ensalutis ĉe {{SITENAME}} kiel uzanto "$1".',
 'nosuchuser' => 'Neniu uzanto havas nomon "$1".
-Nomoj por uzantoj estas usklecodistinga.
+Nomoj por uzantoj estas usklecodistingaj.
 Kontrolu vian literumadon, aŭ [[Special:UserLogin/signup|kreu novan konton]].',
 'nosuchusershort' => 'Ne ekzistas uzanto kun la nomo "$1". Bonvolu kontroli vian ortografion.',
 'nouserspecified' => 'Vi devas entajpi salutnomon.',
 'login-userblocked' => 'Ĉi tiu uzanto estas forbarita. Ensalutado ne estas permesita.',
 'wrongpassword' => 'Vi tajpis malĝustan pasvorton. Bonvolu provi denove.',
 'wrongpasswordempty' => 'Vi tajpis malplenan pasvorton. Bonvolu provi denove.',
-'passwordtooshort' => 'Pasvortoj devas esti almenaŭ  $1 {{PLURAL:$1|1 signon|$1 signojn}}.',
+'passwordtooshort' => 'Pasvortoj devas esti longaj almenaŭ  $1 {{PLURAL:$1|1 signon|$1 signojn}}.',
 'password-name-match' => 'Via pasvorto devas nepre malsami vian salutnomon.',
 'password-login-forbidden' => 'Estas malpermesite uzi tiun ĉi salutnomon kaj pasvorton.',
 'mailmypassword' => 'Refari pasvorton',
-'passwordremindertitle' => 'Rememorigo el {{SITENAME}} pri perdita pasvorto',
+'passwordremindertitle' => 'Nova provizora pasvorto por {{SITENAME}}',
 'passwordremindertext' => 'Iu (probable vi, el IP-adreso $1) petis novan
 pasvorton por {{SITENAME}} ($4). Provizora pasvorto por uzanto
 "$2" estis kreita kaj estis farita al "$3". Se ĉi tiu estis via
-intencio, vi devos ensaluti kaj elekti novan pasvorton nun. Via provizora pasvorto malvalidiĝos post  {{PLURAL:$5|unu tago|$5 tagoj}}.
+intenco, vi devos ensaluti kaj elekti novan pasvorton nun. Via provizora pasvorto malvalidiĝos post  {{PLURAL:$5|unu tago|$5 tagoj}}.
 
-Se iu alia faris ĉi tiun peton, aŭ se vi estas rememorita vian pasvorton,
+Se iu alia faris ĉi tiun peton, aŭ se vi estas rememorinta vian pasvorton,
 kaj ne plu volas ŝanĝi ĝin, vi povas ignori ĉi tiun mesaĝon kaj
 kontinui uzante vian malnovan pasvorton.',
 'noemail' => 'Retpoŝtadreso ne estas registrita por uzanto "$1".',
 'noemailcreate' => 'Vi devas provizi validan retadreson',
 'passwordsent' => 'Oni sendis novan pasvorton al la retpoŝtadreso
 registrita por "$1".
-Bonvolu saluti denove ricevinte ĝin.',
-'blocked-mailpassword' => 'Via IP adreso estas forbarita de redaktado, kaj tial
+Bonvolu ensaluti denove ricevinte ĝin.',
+'blocked-mailpassword' => 'Via IP-adreso estas forbarita de redaktado, kaj tial
 ne rajtas uzi la pasvorto-rekovran funkcion por malebligi misuzon.',
 'eauthentsent' => 'Konfirma retmesaĝo estis sendita al la nomita retadreso. Antaŭ ol iu ajn alia mesaĝo estos sendita al la konto, vi devos sekvi la instrukciojn en la mesaĝo por konfirmi ke la konto ja estas via.',
 'throttled-mailpassword' => 'Retpoŝto kun reŝargita pasvorto estis jam sendita ene de la {{PLURAL:$1|lasta horo|lastaj $1 horoj}}.
 Por preventi misuzon, nur unu reŝargita pasvorto estos sendita dum {{PLURAL:$1|horo|$1 horoj}}.',
 'mailerror' => 'Okazis eraro sendante retpoŝtaĵon: $1',
-'acct_creation_throttle_hit' => 'Vizitintoj al ĉi tiu vikio uzintaj vian IP-adreson kreis {{PLURAL:$1|1 konton|$1 kontojn}} dum la lasta tago, kiu estas la maksimume permesita en ĉi tiu tempoperiodo.
-Tial, vizitantoj kun ĉi tiu IP-adreso ne povas krei pluajn kontojn ĉi-momente.',
-'emailauthenticated' => 'Via retadreso estis konfirmita ekde $2 $3.',
+'acct_creation_throttle_hit' => 'Vizitintoj al ĉi tiu vikio uzintaj vian IP-adreson kreis {{PLURAL:$1|1 konton|$1 kontojn}} dum la lasta tago, {{PLURAL:$1|kiu|kiuj}} estas la maksimume permesita en ĉi tiu tempoperiodo.
+Tial, vizitantoj kun ĉi tiu IP-adreso ne povas krei pliajn kontojn ĉi-momente.',
+'emailauthenticated' => 'Via retadreso estis konfirmita ekde $2 je $3.',
 'emailnotauthenticated' => 'Via retadreso ne jam estas aŭtentigata.
-Neniu retpoŝto estos sendita pro iuj jenaj kialoj.',
-'noemailprefs' => 'Specifu retpoŝtan adreson por ĉi tiuj ecoj funkcii.',
+Neniu retpoŝto estos sendita por iu el la jenaj funkcioj.',
+'noemailprefs' => 'Donu retpoŝtan adreson en viaj preferoj, por ke ĉi tiuj funkcioj estu je dispono.',
 'emailconfirmlink' => 'Konfirmu vian retpoŝtan adreson',
 'invalidemailaddress' => 'La retadreso ne povas esti akceptita, ĉar ĝi verŝajne havas malvalidan formaton.
-Enigi bone formatita adreso aŭ malplenigi tiun kampon.',
-'cannotchangeemail' => 'Kontaj retpoŝtadresoj ne povas esti ŝanĝita en ĉi tiu vikio.',
+Bonvolu enigi bone formatitan adreson aŭ malplenigi tiun kampon.',
+'cannotchangeemail' => 'Kontaj retpoŝtadresoj ne povas esti ŝanĝitaj en ĉi tiu vikio.',
 'emaildisabled' => 'Ĉi tiu paĝaro ne povas sendi retpoŝtojn.',
 'accountcreated' => 'Konto kreita',
 'accountcreatedtext' => 'La uzanto-konto por [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|diskuto]])  estas kreita.',
 'createaccount-title' => 'Konto-kreado por {{SITENAME}}',
 'createaccount-text' => 'Iu kreis konton por via retadreso en {{SITENAME}} ($4) nomata "$2", kun pasvorto "$3". Vi ensalutu kaj ŝanĝu vian pasvorton nun.
 
-Vi povas ignori ĉi mesaĝon, se ĉi konto estis kreita erare.',
-'usernamehasherror' => 'Salutnomo ne povas enhavi kriphaketaĵajn signojn',
+Vi povas ignori ĉi tiun mesaĝon, se ĉi tiu konto estis kreita erare.',
+'usernamehasherror' => 'Salutnomo ne povas enhavi signojn de kriptaj haketaĵoj',
 'login-throttled' => 'Vi ĵus tro ofte provis ensaluti.
 Bonvolu ĝisatendi $1 antaŭ reprovi.',
 'login-abort-generic' => 'Via ensaluto malsukcesis - Ĉesigita',
 'loginlanguagelabel' => 'Lingvo: $1',
-'suspicious-userlogout' => 'Via peto por elsaluti estis malpermesita ĉar verŝajne ĝi estis sendita de trompita retumilo aŭ kaŝiganta proksima servilo.',
+'suspicious-userlogout' => 'Via peto por elsaluti estis malpermesita, ĉar verŝajne ĝi estis sendita de trompita retumilo aŭ kaŝiĝanta prokura servilo.',
 'createacct-another-realname-tip' => 'La vera nomo estas nenecesa.
 Se vi decidas indiki ĝin, ĝi estos uzata por montri atribuadon de viaj kontribuoj.',
+'pt-login' => 'Ensaluti',
+'pt-createaccount' => 'Krei novan konton',
+'pt-userlogout' => 'Elsaluti',
 
 # Email sending
 'php-mail-error-unknown' => 'Nekonata eraro en la funkcio mail() de PHP',
@@ -867,7 +877,7 @@ Se vi decidas indiki ĝin, ĝi estos uzata por montri atribuadon de viaj kontrib
 
 # Change password dialog
 'changepassword' => 'Ŝanĝi pasvorton',
-'resetpass_announce' => 'Vi ensalutis kun provizora retpoŝtita pasvorto. Por kompleti ensalutadon, vi devas fari novan pasvorton ĉi tien:',
+'resetpass_announce' => 'Por kompleti ensaluton vi devas agordi novan pasvorton.',
 'resetpass_text' => '<!-- Aldonu tekston ĉi tien -->',
 'resetpass_header' => 'Ŝanĝi kontan pasvorton',
 'oldpassword' => 'Malnova pasvorto',
@@ -875,25 +885,29 @@ Se vi decidas indiki ĝin, ĝi estos uzata por montri atribuadon de viaj kontrib
 'retypenew' => 'Retajpi novan pasvorton',
 'resetpass_submit' => 'Fari pasvorton kaj ensaluti',
 'changepassword-success' => 'Via pasvorto estis sukcese ŝanĝita!',
+'changepassword-throttled' => 'Vi tro ofte provis ensaluti al ĉi tiu konto.
+Bonvolu atendi $1 antaŭ ol reprovi.',
 'resetpass_forbidden' => 'Pasvortoj ne estas ŝanĝeblaj',
 'resetpass-no-info' => 'Vi devas ensaluti por atingi ĉi tiun paĝon rekte.',
 'resetpass-submit-loggedin' => 'Ŝanĝi pasvorton',
 'resetpass-submit-cancel' => 'Nuligi',
 'resetpass-wrong-oldpass' => 'Malvalida provizora aŭ nuna pasvorto.
 Vi eble jam ŝanĝis vian pasvorton aŭ petis novan provizoran pasvorton.',
+'resetpass-recycled' => 'Bonvolu agordi vian novan pasvorton, kiu estu alia ol via nuntempa pasvorto.',
 'resetpass-temp-password' => 'Provizora pasvorto:',
 'resetpass-abort-generic' => 'Ŝanĝo de pasvorto estis nuligita per kromprogramo.',
 
 # Special:PasswordReset
 'passwordreset' => 'Restarigo de pasvorto',
 'passwordreset-text-one' => 'Plenigu ĉi tiun formularon por renovigi vian pasvorton.',
+'passwordreset-text-many' => '{{PLURAL:$1|Plenumu unu el la kampoj por restarigi vian pasvorton.}}',
 'passwordreset-legend' => 'Refari pasvorton',
 'passwordreset-disabled' => 'Pasvortaj restarigoj estis malŝaltitaj en ĉi tiu vikio.',
 'passwordreset-emaildisabled' => 'Retpoŝtaj funkcioj estas malfunkciigitaj en tiu ĉi vikio.',
 'passwordreset-username' => 'Salutnomo:',
 'passwordreset-domain' => 'Domajno:',
 'passwordreset-capture' => 'Vidi la rezultan retpoŝton?',
-'passwordreset-capture-help' => 'Se vi marki ĉi tiun skatoleton, la retpoŝto (kun provizora pasvorto) estos montrita al vi kaj estos sendita al la uzanto.',
+'passwordreset-capture-help' => 'Se vi markis ĉi tiun skatoleton, la retpoŝto (kun provizora pasvorto) estos montrita al vi kaj estos sendita al la uzanto.',
 'passwordreset-email' => 'Retpoŝtadreso:',
 'passwordreset-emailtitle' => 'Kontaj detaloj en {{SITENAME}}',
 'passwordreset-emailtext-ip' => 'Iu (verŝajne vi, de IP-adreso $1) petis restarigon de via pasvorto por {{SITENAME}} ($4). La {{PLURAL:$3|jena uzanto-konto estas asociita|jenaj uzanto-kontoj estas asociitaj}} kun ĉi tiu retpoŝtadreso:
@@ -917,7 +931,7 @@ aŭ se vi memoris vian originalan pasvorton, kaj vi ne plu volas ŝanĝi
 'passwordreset-emailelement' => 'Salutnomo: $1
 Provizora pasvorto: $2',
 'passwordreset-emailsent' => 'Renovigita pasvorto estis retpoŝte sendita.',
-'passwordreset-emailsent-capture' => 'Retpoŝto kun renovigita pasvorto estis sendita, kiu estas montrata sube.',
+'passwordreset-emailsent-capture' => 'Retpoŝto kun renovigita pasvorto estis sendita, kiu estas montrata malsupre.',
 'passwordreset-emailerror-capture' => 'Retpoŝto kun renovigita pasvorto estis generita, montrata sube, sed sendado al la {{GENDER:$2|uzanto}} malsukcesis: $1',
 
 # Special:ChangeEmail
@@ -933,6 +947,7 @@ Provizora pasvorto: $2',
 'changeemail-cancel' => 'Nuligi',
 
 # Special:ResetTokens
+'resettokens' => 'Renovigi ŝlosilojn',
 'resettokens-no-tokens' => 'Ne estas ŝlosiloj renovigeblaj.',
 'resettokens-legend' => 'Renovigi ŝlosilojn',
 'resettokens-tokens' => 'Ŝlosiloj:',
@@ -946,18 +961,18 @@ Provizora pasvorto: $2',
 'italic_sample' => 'Kursiva teksto',
 'italic_tip' => 'Kursiva teksto',
 'link_sample' => 'Ligtitolo',
-'link_tip' => 'Interna ligo',
+'link_tip' => 'Interna ligilo',
 'extlink_sample' => 'http://www.example.com ligtitolo',
-'extlink_tip' => 'Ekstera ligo (memoru http:// prefikson)',
+'extlink_tip' => 'Ekstera ligilo (memoru http:// prefikson)',
 'headline_sample' => 'Titola teksto',
 'headline_tip' => 'Titololinio je dua nivelo',
-'nowiki_sample' => 'Enigi ne formatitan tekston ĉi tien',
+'nowiki_sample' => 'Enigi ne formatitan tekston ĉi tie',
 'nowiki_tip' => 'Ignori vikiformatadon',
 'image_sample' => 'Ekzemplo.jpg',
-'image_tip' => 'Enŝutita bildo',
+'image_tip' => 'Enigita dosiero',
 'media_sample' => 'Ekzemplo.ogg',
-'media_tip' => 'Ligo al dosiero sona ...',
-'sig_tip' => 'Via subskribo kun tempstampo',
+'media_tip' => 'Ligilo al dosiero',
+'sig_tip' => 'Via subskribo kun tempindiko',
 'hr_tip' => 'Horizontala linio (uzu ŝpareme)',
 
 # Edit pages
@@ -972,7 +987,7 @@ Provizora pasvorto: $2',
 'showdiff' => 'Montri ŝanĝojn',
 'anoneditwarning' => "'''Averto:''' Vi ne estas ensalutinta.
 Via IP-adreso enregistriĝos en la redakta historio de tiu ĉi paĝo.",
-'anonpreviewwarning' => "''Vi ne estas ensalutita. La konservo de la paĝo registros vian IP-adreson en kronologio de ĉi tiu paĝo.''",
+'anonpreviewwarning' => "''Vi ne estas ensalutita. La konservo de la paĝo registros vian IP-adreson en redakta historio de ĉi tiu paĝo.''",
 'missingsummary' => "'''Rememorigilo:''' Vi ne provizis redaktan resumon. Se vi alklakos denove la konservan butonon, via redaktaĵo estos konservita sen resumo.",
 'missingcommenttext' => 'Bonvolu entajpi komenton malsupre.',
 'missingcommentheader' => "'''Atenton:''' Vi ne provizis temon aŭ subtitolon por ĉi tiu komento.
@@ -991,7 +1006,7 @@ La skribita kialo estas ''$2''.
 
 Vi rajtas kontakti $1 aŭ alian [[{{MediaWiki:Grouppage-sysop}}|administranton]] por pridiskuti la forbaradon.
 Vi ne povas uzi la 'retpoŝtan' funkcion, escepte se vi indikis validan retpoŝtan adreson en viaj [[Special:Preferences|kontaj agordoj]] kaj vi ne estas blokita uzi ĝin.
-Via IP-adreso estas $3 kaj la ID de la forbarado ests $5.
+Via IP-adreso estas $3 kaj la ID de la forbarado estas $5.
 Bonvolu mencii jenajn indikojn en viaj ĉi-temaj kontaktoj.",
 'autoblockedtext' => 'Via IP-adreso estas aŭtomate forbarita, ĉar uzis ĝin alia uzanto, kiun baris $1.
 La donita kialo estas:
@@ -1022,7 +1037,7 @@ Bonvolu inkluzivi tiujn detalojn en iuj ajn demandoj kiun vi farus.',
 
 La pasvorto por ĉi tiu nova konto povas esti ŝanĝita en la paĝo ''[[Special:ChangePassword|ŝanĝi pasvorton]]'' dum ensalutado.",
 'newarticle' => '(Nova)',
-'newarticletext' => 'Vi sekvis ligilon al paĝo ankoraŭ ne ekzistanta. Se vi volas krei ĝin, ektajpu sube (vidu la [[{{MediaWiki:Helppage}}|helpopaĝon]] por klarigoj.) Se vi malintence alvenis ĉi tien, simple alklaku la retrobutonon de via retumilo.',
+'newarticletext' => 'Vi sekvis ligilon al paĝo ankoraŭ ne ekzistanta. Se vi volas krei ĝin, ektajpu malsupre (vidu la [[{{MediaWiki:Helppage}}|helpopaĝon]] por klarigoj.) Se vi malintence alvenis ĉi tien, simple alklaku la retrobutonon de via retumilo.',
 'anontalkpagetext' => "---- ''Jen diskutopaĝo por anonima kontribuanto kiu ne jam kreis konton aŭ ne uzas ĝin.
 Ni tial devas uzi la cifran IP-adreson por identigi lin/ŝin.
 Ĉi tia IP-adreso povas esti uzata de pluraj uzantoj.
@@ -1036,8 +1051,8 @@ Vi povas [[Special:Search/{{PAGENAME}}|serĉi ĉi tiun paĝan titolon]] en aliaj
 aŭ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serĉi la rilatajn protokolojn]</span>, sed vi ne rajtas krei ĉi tiun paĝon.',
 'missing-revision' => 'La revizio n-ro $1 de la paĝo nomata "{{PAGENAME}}" ne ekzistas.
 
-La kutima kaŭzo estas sekvi malaktualan historio-ligilon al paĝo forviŝita.
-Detaloj troveblos en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de forviŝoj].',
+Tio kutime estas kaŭzata per sekvado de malaktuala historio-ligilo al paĝo forigita.
+Detaloj troveblos en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de forigoj].',
 'userpage-userdoesnotexist' => 'Uzantokonto "<nowiki>$1</nowiki>" ne estas registrita. Bonvolu konfirmi se vi volas krei/redakti ĉi tiun paĝon.',
 'userpage-userdoesnotexist-view' => 'Uzanto-konto "$1" ne estas registrita.',
 'blocked-notice-logextract' => 'Ĉi tiu uzanto estas ĉi-momente forbarita.
@@ -1048,10 +1063,10 @@ La lasta protokolero estas jene montrata por via referenco:',
 * '''Interreta Esplorilo''': Premu ''Stir'' klakante ''Refreŝu'', aŭ premu ''Stir-F5'' 
 * '''Opera:''' Nuligi la kaŝmemoro en ''Iloj → Preferoj''",
 'usercssyoucanpreview' => "'''Konsileto:''' Uzu la butonon \"Antaŭrigardi\" por provi vian novan CSS-kodon antaŭ konservado.",
-'userjsyoucanpreview' => "'''Konsileto:''' Uzu la butonon \"{{int:showpreview}}\" por provi vian novan JS-kodon antaŭ konservado.",
+'userjsyoucanpreview' => "'''Konsileto:''' Uzu la butonon \"{{int:showpreview}}\" por provi vian novan Ĝavaskriptan kodon antaŭ konservado.",
 'usercsspreview' => "'''Notu ke vi nur antaŭvidas vian uzanto-CSS.
 Ĝi ne jam estis konservita!'''",
-'userjspreview' => "'''Memoru ke vi nun nur provas kaj antaŭrigardas vian uzantan javaskripton, ĝi ne estas jam konservita'''",
+'userjspreview' => "'''Memoru ke vi nun nur provas kaj antaŭrigardas vian uzantan Ĝavaskripton, ĝi ne estas jam konservita'''",
 'sitecsspreview' => "'''Konsciu ke vi nur antaŭrigardas tiun ĉi CSS.'''
 '''Ĝi ne jam estis savita!''",
 'sitejspreview' => "'''Konsciu ke vi nur antaŭrigardas tiun ĉi Ĝavaskripta kodon''. ''Ĝi ne jam estis konservita''.",
@@ -1067,15 +1082,15 @@ kiel ĝi aperos se vi elektos konservi la paĝon.',
 'session_fail_preview' => "'''Ni ne povas procezi vian redakton pro perdo de seancaj datenoj.
 Bonvolu reprovi.
 Se ankoraŭ ne funkcios, provu [[Special:UserLogout|elsaluti]] kaj reensaluti.'''",
-'session_fail_preview_html' => "'''Bedaŭrinde, ne povas trakti vian redakton pro manko de seancaj datenoj.'''
+'session_fail_preview_html' => "'''Bedaŭrinde, ni ne povas trakti vian redakton pro manko de seancaj datenoj.'''
 
-''Ĉar {{SITENAME}} ebligas krudan HTML-kodon, ĉi tiu antaŭrigardo estas kaŝita kiel prevento kontraŭ Javascript-atakoj.''
+''Ĉar {{SITENAME}} ebligas krudan HTML-kodon, ĉi tiu antaŭrigardo estas kaŝita kiel prevento kontraŭ Ĝavaskriptaj atakoj.''
 
 '''Se ĉi tiu estas taŭga provo por redakti, bonvolu reprovi.'''
 Se ankoraŭ ne funkcias, provu [[Special:UserLogout|elsaluti]] kaj reensaluti.",
-'token_suffix_mismatch' => "'''Via redakto estis malpermesita ĉar via klienta fuŝis la interpunkcio en la redakto-signo.
-La redakto estis malpermesita por preventi koruptado de la teksto de la paĝo.
-Ĉi tiel malofte okazas kiam vi uzas fuŝan TTT-an anoniman prokurilon.'''",
+'token_suffix_mismatch' => "'''Via redakto estis malpermesita ĉar via kliento fuŝis la interpunkcion en la redakto-signo.
+La redakto estis malpermesita por preventi koruptadon de la teksto de la paĝo.
+Ĉi tio kelkfoje okazas, kiam vi uzas fuŝan retbazan anoniman prokuran servon.'''",
 'edit_form_incomplete' => "'''Kelkaj partoj de la redaktada formo ne atingis la servilon; rekontrolu ke via redakto estas ĝusta kaj reprovu.'''",
 'editing' => 'Redaktado de $1',
 'creating' => 'Kreado de $1',
@@ -1096,7 +1111,7 @@ Se vi konservos vian redakton, ĉiuj ŝanĝoj faritaj post tiu versio perdiĝos.
 'copyrightwarning' => "Bonvolu noti, ke ĉiu kontribuaĵo al la {{SITENAME}} estu rigardata kiel eldonita laŭ \$2 (vidu je \$1). Se vi volas, ke via verkaĵo ne estu redaktota senkompate kaj disvastigota laŭvole, ne alklaku \"Konservi\".<br />
 Vi ankaŭ ĵuras, ke vi mem verkis la tekston, aŭ ke vi kopiis ĝin el fonto senkopirajta.
 '''NE UZU AŬTORRAJTE PROTEKTATAJN VERKOJN SENPERMESE!'''",
-'copyrightwarning2' => "Bonvolu noti ke ĉiuj kontribuoj al {{SITENAME}} povas esti reredaktita, ŝanĝita aŭ forigita de aliaj kontribuantoj. Se vi ne deziras ke viaj verkoj estu senkompate reredaktitaj, ne publikigu ilin ĉi tie.<br />
+'copyrightwarning2' => "Bonvolu noti ke ĉiuj kontribuoj al {{SITENAME}} povas esti reredaktitaj, ŝanĝitaj aŭ forigitaj de aliaj kontribuantoj. Se vi ne deziras, ke viaj verkoj estu senkompate reredaktitaj, ne publikigu ilin ĉi tie.<br />
 Vi ankaŭ promesu al ni ke vi verkis tion mem aŭ kopiis el publika domajno aŭ simila libera fonto (vidu $1 por detaloj).
 '''NE PROPONU KOPIRAJTITAJN VERKOJN SEN PERMESO!'''",
 'longpageerror' => "'''Eraro: La teksto, kiun vi prezentis, longas {{PLURAL:$1|$1 kilobajton|$1 kilobajtojn}}, kio estas pli longa ol la maksimumo de {{PLURAL:$2|$2 kilobajto|$2 kilobajtoj}}.'''
@@ -1112,9 +1127,9 @@ Jen la lasta protokolero por via referenco:",
 'cascadeprotectedwarning' => "'''Averto:''' Ĉi tiu paĝo estas ŝlosita tiel ke nur uzantoj kun administrantaj privilegioj povas redakti ĝin, ĉar ĝi estas inkludita en la {{PLURAL:$1|sekvan kaskade protektitan paĝon|sekvajn kaskade protektitajn paĝojn}}:",
 'titleprotectedwarning' => "'''Averto: Ĉi tiu paĝo estis ŝlosita tial nur [[Special:ListGroupRights|specifaj rajtoj]] estas bezonaj por krei ĝin.'''
 Jen la lasta protokolero por via referenco:",
-'templatesused' => '{{PLURAL:$1|Ŝablono uzataj|Ŝablonoj uzataj}} en ĉi tiu paĝo:',
+'templatesused' => '{{PLURAL:$1|Ŝablono uzata|Ŝablonoj uzataj}} en ĉi tiu paĝo:',
 'templatesusedpreview' => '{{PLURAL:$1|Ŝablono uzata|Ŝablonoj uzataj}} en ĉi tiu antaŭrigardo:',
-'templatesusedsection' => '{{PLURAL:$1|Ŝablono uzata|Ŝablonojuzataj}} en ĉi tiu sekcio:',
+'templatesusedsection' => '{{PLURAL:$1|Ŝablono uzata|Ŝablonoj uzataj}} en ĉi tiu sekcio:',
 'template-protected' => '(protektita)',
 'template-semiprotected' => '(duone protektita)',
 'hiddencategories' => 'Ĉi tiu paĝo estas membro de {{PLURAL:$1|1 kaŝita kategorio|$1 kaŝitaj kategorioj}}:',
@@ -1133,7 +1148,7 @@ Jen la protokolo de forigoj kaj alinomigado por via oportuno:",
 'moveddeleted-notice' => 'Ĉi tiu paĝo estis forigita.
 Jen la protokolo pri forigado kaj alinomigado por via referenco.',
 'log-fulllog' => 'Vidi kompletan protokolon',
-'edit-hook-aborted' => 'Redakto ĉesigis per hoko.
+'edit-hook-aborted' => 'Redakto estis ĉesigita per etendaĵo de la Vikia softvaro.
 Ĝi ne donis eksplikon.',
 'edit-gone-missing' => 'Ne eblis ĝisdatigi la paĝon.
 Verŝajne ĝi estis forigita.',
@@ -1147,7 +1162,7 @@ Verŝajne ĝi estis forigita.',
 'invalid-content-data' => 'Enhavo estas malvalida',
 'content-not-allowed-here' => 'Enhavo de $1 ne estas permesita en paĝo [[$2]]',
 'editwarning-warning' => 'Forlaso de ĉi tiu paĝo kaŭzos al vi perdi iun ajn ŝanĝojn kiujn vi faris.
-Se vi ensalutas, vi povas malŝalti ĉi tiun averton en la sekcio "{{int:prefs-editing}}" de viaj preferoj.',
+Se vi estas ensalutinta, vi povas malŝalti ĉi tiun averton en la sekcio "{{int:prefs-editing}}" de viaj preferoj.',
 
 # Content models
 'content-model-wikitext' => 'vikiteksto',
@@ -1163,11 +1178,11 @@ Se vi ensalutas, vi povas malŝalti ĉi tiun averton en la sekcio "{{int:prefs-e
 'post-expand-template-inclusion-warning' => 'Averto: Inkluziva pezo de ŝablonoj estas tro granda.
 Iuj ŝablonoj ne estos inkluzivitaj.',
 'post-expand-template-inclusion-category' => 'Paĝoj kie inkluziva pezo de ŝablonoj estas tro granda.',
-'post-expand-template-argument-warning' => 'Averto: Ĉit tiu paĝo enhavas almenaŭ unu ŝablonan argumenton kiu havas tro grandan etendan pezon.
+'post-expand-template-argument-warning' => 'Averto: Ĉi tiu paĝo enhavas almenaŭ unu ŝablonan argumenton, kiu havas tro grandan etendan pezon.
 Ĉi tiuj argumentoj estis forlasitaj.',
 'post-expand-template-argument-category' => 'Paĝoj enhavantaj forlasitajn argumentojn de ŝablonoj',
 'parser-template-loop-warning' => 'Rekursiva ŝablono estis trovita: [[$1]]',
-'parser-template-recursion-depth-warning' => 'Limo de ŝablona profundeco pligrandiĝis ($1)',
+'parser-template-recursion-depth-warning' => 'Ŝablona profundeco transpasis limon ($1)',
 'language-converter-depth-warning' => 'Profundo de lingvo-konvertilo preterpasis limon ($1)',
 'node-count-exceeded-category' => 'Paĝoj kie la nombro da nodoj estas preterpasita',
 'node-count-exceeded-warning' => 'Paĝo preterpasis la nombron da nodoj.',
@@ -1179,9 +1194,9 @@ Iuj ŝablonoj ne estos inkluzivitaj.',
 
 # "Undo" feature
 'undo-success' => 'La redakto estas malfarebla.
-Bonvolu konfirmi la jenan komparaĵon por verigi ĉi tiel vi volas, kaj konservi la ŝanĝojn suben fini malfarante la redakton.',
+Bonvolu kontroli la jenan komparaĵon por certiĝi ĉu tio estas tio, kion vi volas, kaj konservi la ŝanĝojn malsupre por fine malfari la redakton.',
 'undo-failure' => 'Ne povis nuligi redakton pro konfliktaj intermezaj redaktoj.',
-'undo-norev' => 'La redakto ne eblis esti malfarita ĉar ĝi aŭ ne ekzistas aŭ estis forigita.',
+'undo-norev' => 'La redakto ne povis esti malfarita ĉar ĝi aŭ ne ekzistas aŭ estis forigita.',
 'undo-summary' => 'Nuligis version $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskuto]] | [[Special:Contributions/$2|{{MediaWiki:Contribslink}}]])',
 'undo-summary-username-hidden' => 'Malfari ŝanĝon $1 de kaŝita uzulo',
 
@@ -1202,13 +1217,13 @@ La kialo donata de $3 estas ''$2''.",
 'nextrevision' => 'Sekva versio →',
 'currentrevisionlink' => 'Rigardi nunan version',
 'cur' => 'nuna',
-'next' => 'sekv',
+'next' => 'sekva',
 'last' => 'antaŭa',
 'page_first' => 'unua',
 'page_last' => 'lasta',
 'histlegend' => 'Klarigo: (nuna) = vidu malsamojn kompare kun la nuna versio, (antaŭa) = malsamojn kompare kun la antaŭa versio, <strong>E</strong> = malgranda redakteto',
 'history-fieldset-title' => 'Traserĉi historion',
-'history-show-deleted' => 'Forigitaĵoj nur',
+'history-show-deleted' => 'Nur forigitaĵoj',
 'histfirst' => 'plej malnova',
 'histlast' => 'plej nova',
 'historysize' => '({{PLURAL:$1|1 bajto|$1 bajtoj}})',
@@ -1263,8 +1278,6 @@ funkcion, la specifita versio ne ekzistas, aŭ vi estas provanta kaŝi la nunan
 'revdelete-show-file-submit' => 'Jes',
 'revdelete-selected' => "'''{{PLURAL:$2|Selektata versio|Selektataj versioj}} de [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Selektata protokola evento|Selektataj protokolaj eventoj}}:'''",
-'revdelete-text' => "'''Forigitaj versioj kaj eventoj plu aperos en la historipaĝoj, sed iliaj tekstoj ne estos alireblaj de la publiko.'''
-Aliaj administrantoj ĉe {{SITENAME}} plu povos aliri la kaŝitan entenon kaj restarigi ĝin per la sama interfaco, krom se plia limigo estas metita de la paĝaradministrantoj.",
 'revdelete-confirm' => 'Bonvolu konfirmi ke vi intencias fari ĉi tion, ke vi komprenas la konsekvencojn kaj ke vi faras ĉi tion laŭ [[{{MediaWiki:Policy-url}}|la regularo]].',
 'revdelete-suppress-text' => "Subpremo '''nur''' estu uzata por la jenaj kazoj:
 * Ebla kalumnia informo
@@ -1378,7 +1391,7 @@ Detaloj troveblos en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}
 'shown-title' => 'Montri {{PLURAL:$1|$1 rezulton|$1 rezultojn}} en paĝo',
 'viewprevnext' => 'Montri ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''Estas paĝo nomita \"[[:\$1]]\" en ĉi tiu vikio'''",
-'searchmenu-new' => "'''Krei la paĝon \"[[:\$1]]\" en ĉi tiu vikio!'''",
+'searchmenu-new' => '<strong>Krei la paĝon "[[:$1]]" en ĉi tiu vikio!</strong>{{PLURAL:$2|0=|Vidu ankaŭ la paĝon trovitan per via serĉo.|Vidu ankaŭ la trovitajn serĉrezultojn.}}',
 'searchprofile-articles' => 'Enhavaj paĝoj',
 'searchprofile-project' => 'Paĝoj pri Helpo kaj Projektoj',
 'searchprofile-images' => 'Plurmedio',
@@ -1618,6 +1631,7 @@ indekso pro troŝarĝita servilo. Intertempe, vi povas serĉi per <i>guglo</i> a
 'right-unblockself' => 'Malforbari oni mem',
 'right-protect' => 'Ŝanĝi protektniveloj kaj redakti protektitajn paĝojn',
 'right-editprotected' => 'Redakti protektitajn paĝojn (sen kaskada protektado)',
+'right-editsemiprotected' => 'Redakti paĝojn protektitajn kiel "{{int:protect-level-autoconfirmed}}"',
 'right-editinterface' => 'Redakti la uzantointerfacon',
 'right-editusercssjs' => 'Redaktu CSS- kaj JS-dosierojn de aliaj uzantoj',
 'right-editusercss' => 'Redaktu CSS-dosierojn de aliaj uzantoj',
@@ -1627,6 +1641,7 @@ indekso pro troŝarĝita servilo. Intertempe, vi povas serĉi per <i>guglo</i> a
 'right-viewmywatchlist' => 'Rigardi vian atentaron',
 'right-viewmyprivateinfo' => 'Vidi viajn proprajn privatajn informojn (ekz. retpoŝtan adreson, veran nomon)',
 'right-editmyprivateinfo' => 'Redakti viajn proprajn privatajn informojn (ekz. retpoŝtan adreson, veran nomon)',
+'right-editmyoptions' => 'Redakti proprajn preferojn',
 'right-rollback' => 'Tuj malfari la redaktojn de la lasta uzanto kiu redaktis specifan paĝon',
 'right-markbotedits' => 'Marki restarigitajn redaktojn kiel robotajn redaktojn',
 'right-noratelimit' => 'Ne influita de po-limoj',
@@ -1695,6 +1710,7 @@ indekso pro troŝarĝita servilo. Intertempe, vi povas serĉi per <i>guglo</i> a
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|ŝanĝo|ŝanĝoj}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|ekde lasta vizito}}',
 'enhancedrc-history' => 'historio',
 'recentchanges' => 'Lastaj ŝanĝoj',
 'recentchanges-legend' => 'Opcioj pri lastaj ŝanĝoj',
@@ -1705,15 +1721,28 @@ indekso pro troŝarĝita servilo. Intertempe, vi povas serĉi per <i>guglo</i> a
 'recentchanges-label-minor' => 'Ĉi tiu estas eta redakto',
 'recentchanges-label-bot' => 'Ĉi tiu redakto estis farita per roboto.',
 'recentchanges-label-unpatrolled' => 'Ĉi tiu redakto ne jam estis patrolata.',
+'recentchanges-legend-heading' => "'''Klarigo:'''",
 'recentchanges-legend-newpage' => '(vidu ankaŭ [[Special:NewPages|liston de novaj paĝoj]])',
 'rcnotefrom' => "Jen la ŝanĝoj ekde '''$2''' (lastaj ĝis '''$1''').",
 'rclistfrom' => 'Montri novajn ŝanĝojn ekde "$1"',
 'rcshowhideminor' => '$1 redaktetojn',
+'rcshowhideminor-show' => 'Montri',
+'rcshowhideminor-hide' => 'Kaŝi',
 'rcshowhidebots' => '$1 robotojn',
+'rcshowhidebots-show' => 'Montri',
+'rcshowhidebots-hide' => 'Kaŝi',
 'rcshowhideliu' => '$1 registriĝintojn',
+'rcshowhideliu-show' => 'Montri',
+'rcshowhideliu-hide' => 'Kaŝi',
 'rcshowhideanons' => '$1 anonimajn redaktojn',
+'rcshowhideanons-show' => 'Montri',
+'rcshowhideanons-hide' => 'Kaŝi',
 'rcshowhidepatr' => '$1 patrolitajn redaktojn',
+'rcshowhidepatr-show' => 'Montri',
+'rcshowhidepatr-hide' => 'Kaŝi',
 'rcshowhidemine' => '$1 miajn redaktojn',
+'rcshowhidemine-show' => 'Montri',
+'rcshowhidemine-hide' => 'Kaŝi',
 'rclinks' => 'Montri $1 lastajn ŝanĝojn dum la $2 lastaj tagoj.<br />$3',
 'diff' => 'malsamoj',
 'hist' => 'historio',
@@ -1839,6 +1868,7 @@ Se vi ankoraŭ volas alŝuti vian dosieron, bonvolu retroigi kaj uzi novan nomon
 'uploaddisabledtext' => 'Alŝutado de dosieroj estas malebligita.',
 'php-uploaddisabledtext' => 'Dosiera alŝutado estas malŝalta en PHP. Bonvolu kontroli la preferon file_uploads.',
 'uploadscripted' => 'HTML-aĵo aŭ skriptokodaĵo troviĝas en tiu ĉi tiu dosiero, kiun TTT-foliumilo eble interpretus erare.',
+'uploadinvalidxml' => 'Ne eblas interpreti la XML-sintakson en la alŝutita dosiero',
 'uploadvirus' => 'Viruso troviĝas en la dosiero! Detaloj: $1',
 'uploadjava' => 'La dosiero estas ZIP-dosiero kiu enhavas .class-dosieron de Java.
 Alŝutante Java-dosieron estas malpermesita, ĉar ili povas kaŭzi sekureco-limigojn esti preterpasitaj.',
@@ -1989,6 +2019,8 @@ Kiam oni filtras ĝin laŭ uzanto, nur la aktuala versio de la dosiero estos mon
 'listfiles_size' => 'Grandeco',
 'listfiles_description' => 'Priskribo',
 'listfiles_count' => 'Versioj',
+'listfiles-show-all' => 'Inkluzivi malaktualajn versiojn de bildoj',
+'listfiles-latestversion' => 'Nuna versio',
 'listfiles-latestversion-yes' => 'Jes',
 'listfiles-latestversion-no' => 'Ne',
 
@@ -2086,6 +2118,13 @@ Bonvolu kontroli aliajn ligilojn al la ŝablonoj antaŭ ol forigi ilin.',
 'randompage' => 'Hazarda paĝo',
 'randompage-nopages' => 'Ne ekzistas paĝoj en la {{PLURAL:$2|nomspaco|nomspacoj}}: "$1".',
 
+# Random page in category
+'randomincategory' => 'Hazarda paĝo en kategorio',
+'randomincategory-invalidcategory' => '"$1" ne estas valida kategoria nomo.',
+'randomincategory-nopages' => 'Ne estas paĝoj en la kategorio [[:Category:$1|$1]].',
+'randomincategory-selectcategory' => 'Iri al hazarda paĝo el kategorio: $1 $2.$1',
+'randomincategory-selectcategory-submit' => 'Ek!',
+
 # Random redirect
 'randomredirect' => 'Hazarda alidirekto',
 'randomredirect-nopages' => 'Estas neniuj alidirektiloj en la nomspaco "$1".',
@@ -2113,6 +2152,7 @@ Bonvolu kontroli aliajn ligilojn al la ŝablonoj antaŭ ol forigi ilin.',
 
 'pageswithprop' => 'Paĝoj kun paĝa atributo',
 'pageswithprop-legend' => 'Paĝoj kun paĝa atributo',
+'pageswithprop-text' => 'Ĉi tiu paĝo listigas paĝoj kiu uzas iajn paĝajn ecojn.',
 'pageswithprop-prop' => 'Nomo de la atributo:',
 'pageswithprop-submit' => 'Ek',
 
@@ -2172,6 +2212,7 @@ Bonvolu kontroli aliajn ligilojn al la ŝablonoj antaŭ ol forigi ilin.',
 'mostrevisions' => 'Artikoloj kun la plej multaj versioj',
 'prefixindex' => 'Ĉiuj paĝoj kun prefikso',
 'prefixindex-namespace' => 'Ĉiuj paĝoj kun prefikso ($1 nomspaco)',
+'prefixindex-strip' => 'Ne montri prefikson en listo',
 'shortpages' => 'Mallongaj paĝoj',
 'longpages' => 'Longaj paĝoj',
 'deadendpages' => 'Paĝoj sen interna ligilo',
@@ -2179,7 +2220,13 @@ Bonvolu kontroli aliajn ligilojn al la ŝablonoj antaŭ ol forigi ilin.',
 'protectedpages' => 'Protektitaj paĝoj',
 'protectedpages-indef' => 'Nur ĉiamaj protektaĵoj',
 'protectedpages-cascade' => 'Nur kaskadaj protektoj',
+'protectedpages-noredirect' => 'Kaŝi alidirektilojn',
 'protectedpagesempty' => 'Neniuj paĝoj estas momente protektitaj kun ĉi tiuj parametroj.',
+'protectedpages-timestamp' => 'Tempindiko',
+'protectedpages-page' => 'Paĝo',
+'protectedpages-reason' => 'Kialo',
+'protectedpages-unknown-timestamp' => 'Nekonata',
+'protectedpages-unknown-performer' => 'Nekonata uzanto',
 'protectedtitles' => 'Protektitaj titoloj',
 'protectedtitlesempty' => 'Neniuj titoloj estas nune protektitaj kun ĉi parametroj.',
 'listusers' => 'Uzantaro',
@@ -2365,6 +2412,7 @@ La retadreso kiun vi enigis en [[Special:Preferences|viaj preferoj]] aperos kiel
 'watchmethod-list' => 'traserĉas priatentitajn',
 'watchlistcontains' => 'Via atentaro enhavas $1 {{PLURAL:$1|paĝon|paĝojn}}.',
 'iteminvalidname' => 'Ia eraro pri "$1", nevalida titolo...',
+'wlnote2' => 'Malsupre estas la ŝanĝoj en la {{PLURAL:$1|lasta horo|lastaj <strong>$1</strong> horoj}}, ekde $2, $3.',
 'wlshowlast' => 'Montri el lastaj $1 horoj $2 tagoj $3',
 'watchlist-options' => 'Opcioj por atentaro',
 
@@ -2726,7 +2774,7 @@ forbarita IP-adreso/nomo la povon enskribi en la vikio.',
 'change-blocklink' => 'ŝanĝi forbaron',
 'contribslink' => 'kontribuoj',
 'emaillink' => 'sendi retpoŝton',
-'autoblocker' => 'Aŭtomate forbarita ĉar via IP-adreso estis lastatempe uzita de "[[User:$1|$1]]".
+'autoblocker' => 'Aŭtomate forbarita, ĉar via IP-adreso estis lastatempe uzita de "[[User:$1|$1]]".
 La kialo donita por la forbaro de $1 estis: "$2"',
 'blocklogpage' => 'Protokolo pri forbaroj',
 'blocklog-showlog' => 'Ĉi tiu uzanto estis forbarita antaŭe. Jen la forbara protokolo por referenco:',
@@ -2745,7 +2793,7 @@ La kialo donita por la forbaro de $1 estis: "$2"',
 'range_block_disabled' => 'La ebleco de administranto krei forbaritajn intervalojn da IP-adresoj estas malebligita.',
 'ipb_expiry_invalid' => 'Nevalida blokdaŭro.',
 'ipb_expiry_temp' => 'Kaŝitaj salutnomaj blokoj estu daŭraj.',
-'ipb_hide_invalid' => 'Ne povas subpremi ĉi tiun konton; ĝi eble havas tro multajn redaktojn.',
+'ipb_hide_invalid' => 'Ne povas subpremi ĉi tiun konton; ĝi havas {{PLURAL:$1|unu redakton|$1 redaktojn}}.',
 'ipb_already_blocked' => '"$1" estas jam forbarita',
 'ipb-needreblock' => '$1 estas jam forbarita. Ĉu vi volas ŝanĝi la opciojn?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Alia forbaro|Aliaj forbaroj}}',
@@ -2918,11 +2966,14 @@ se vi volus kontribui al la komuna MediaWiki-asimilado.',
 'allmessages-prefix' => 'Filtri laŭ prefikso:',
 'allmessages-language' => 'Lingvo:',
 'allmessages-filter-submit' => 'Ek!',
+'allmessages-filter-translate' => 'Traduki',
 
 # Thumbnails
 'thumbnail-more' => 'Pligrandigi',
 'filemissing' => 'Mankanta dosiero',
 'thumbnail_error' => 'Okazis eraro ĉe kreado de antaŭvida bildeto: $1',
+'thumbnail_error_remote' => 'Eraro-mesaĝo de $1:
+$2',
 'djvu_page_error' => 'DjVu-a paĝo el intervalo',
 'djvu_no_xml' => 'Ne povas akiri XML por DjVu dosiero',
 'thumbnail-temp-create' => 'Ne povas krei provizoran bildetan dosieron',
@@ -2966,7 +3017,7 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj.
 'importuploaderrortemp' => 'Alŝutigo de import-dosiero malsukcesis. Labor-dosierujo ne estas trovita.',
 'import-parse-failure' => 'sintaksa fuŝo de XML-importo',
 'import-noarticle' => 'Neniu paĝo por importi!',
-'import-nonewrevisions' => 'Ĉiuj versioj estis antaŭe importitaj.',
+'import-nonewrevisions' => 'Neniuj versioj estis antaŭe importitaj. Aŭ ili ĉiuj jam ekzistis aŭ estis ellasitaj pro eraroj.',
 'xml-error-string' => '$1 ĉe linio $2, kolumno $3 (bitiko $4): $5',
 'import-upload' => 'Alŝuti XML-datenojn',
 'import-token-mismatch' => 'Seancaj datenoj perdiĝis. Bonvolu reprovi.',
@@ -3066,6 +3117,7 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj.
 'tooltip-undo' => '"Malfari" malfaris ĉi tiun redakton kaj malfermas la redakto-paĝon en antaŭvida reĝimo. Permesas aldoni kialon en la resumo.',
 'tooltip-preferences-save' => 'Konservi preferojn',
 'tooltip-summary' => 'Enigu mallongan resumon',
+'interlanguage-link-title' => '$1 — $2',
 
 # Stylesheets
 'common.css' => '/* La jena CSS influos la aspekton de ĉiaj temoj. */',
@@ -3150,6 +3202,7 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj.
 'pageinfo-magic-words' => '{{PLURAL:$1|Magia vorto|Magiaj vortoj}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Kaŝita kategorio|Kaŝitaj kategorioj}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Inkluzivita ŝablono|Inkluzivitaj ŝablonoj}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Paĝo transinkluzivita|Paĝoj transinkluzivitaj}} en ($1)',
 'pageinfo-toolboxlink' => 'Informoj pri la paĝo',
 'pageinfo-redirectsto' => 'Alidirektas al',
 'pageinfo-redirectsto-info' => 'Informo',
@@ -3253,6 +3306,14 @@ $1',
 'hours-ago' => 'antaŭ $1 {{PLURAL:$1|horo|horoj}}',
 'minutes-ago' => 'antaŭ $1 {{PLURAL:$1|minuto|minutoj}}',
 'seconds-ago' => 'antaŭ $1 {{PLURAL:$1|sekundo|sekundoj}}',
+'monday-at' => 'Lundo je $1',
+'tuesday-at' => 'Mardo je $1',
+'wednesday-at' => 'Merkredo je $1',
+'thursday-at' => 'Ĵaŭdo je $1',
+'friday-at' => 'Vendredo je $1',
+'saturday-at' => 'Sabato je $1',
+'sunday-at' => 'Dimanĉo je $1',
+'yesterday-at' => 'Hieraŭ je $1',
 
 # Bad image list
 'bad_image_list' => 'La formato estas jen:
@@ -3772,6 +3833,10 @@ Bonvolu konfirmi ke vi ja volas rekrei la paĝon.',
 'imgmultigo' => 'Ek!',
 'imgmultigoto' => 'Iri al paĝo $1',
 
+# Language selector for translatable SVGs
+'img-lang-default' => '(defaŭlta lingvo)',
+'img-lang-go' => 'Ek',
+
 # Table pager
 'ascending_abbrev' => 'sprn',
 'descending_abbrev' => 'subn',
@@ -3907,8 +3972,16 @@ Vi povas ankaŭ [[Special:EditWatchlist|redakti norme]].',
 'version-hook-subscribedby' => 'Abonita de',
 'version-version' => '($1)',
 'version-license' => 'Permesilo de MediaWiki',
+'version-ext-license' => 'Permesilo',
+'version-ext-colheader-version' => 'Versio',
+'version-ext-colheader-license' => 'Permesilo',
+'version-ext-colheader-description' => 'Priskribo',
+'version-ext-colheader-credits' => 'Aŭtoroj',
+'version-license-title' => 'Permesilo por $1',
+'version-credits-title' => 'Agnosko por $1',
 'version-poweredby-credits' => "Ĉi tiu vikio funkcias per '''[https://www.mediawiki.org/ MediaWiki]''', aŭtorrajto ©&thinsp;2001–$1 $2.",
 'version-poweredby-others' => 'aliaj',
+'version-poweredby-translators' => 'tradukantoj de translatewiki.net',
 'version-credits-summary' => 'Ni ŝatus agnoski la sekvajn personojn pro siaj kontribuoj al [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki estas libera programaro. Vi povas redistribui ĝin kaj/aŭ modifi ĝin sub la kondiĉoj de la GNU General Public Licens (GNU Ĝenerala Publika Permesilo) en ties eldono de la Free Software Foundation (Libera Softvara Fondaĵo) - aŭ versio 2 de la Permesilo, aŭ (laŭ via elekto) iu ajn posta versio.
 
@@ -3923,7 +3996,15 @@ Oni devis doni al vi [{{SERVER}}{{SCRIPTPATH}}/COPYING ekzempleron de la GNU Gen
 'version-entrypoints-header-url' => 'Retadreso',
 
 # Special:Redirect
+'redirect-legend' => 'Alidirektilo al dosiero aŭ paĝo',
 'redirect-submit' => 'Ek',
+'redirect-lookup' => 'Traserĉi:',
+'redirect-value' => 'Valoro:',
+'redirect-user' => 'Salutnomo',
+'redirect-page' => 'Paĝa identigo',
+'redirect-revision' => 'Revizio de la paĝo',
+'redirect-file' => 'Dosiernomo',
+'redirect-not-exists' => 'Valoro ne trovita',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => 'Serĉu duplikatajn dosierojn',
@@ -3938,6 +4019,7 @@ Oni devis doni al vi [{{SERVER}}{{SCRIPTPATH}}/COPYING ekzempleron de la GNU Gen
 
 # Special:SpecialPages
 'specialpages' => 'Specialaj paĝoj',
+'specialpages-note-top' => 'Klarigo',
 'specialpages-note' => '* Normaj specialaj paĝoj.
 * <span class="mw-specialpagerestricted">Limigitaj specialaj paĝoj.</span>',
 'specialpages-group-maintenance' => 'Raportoj pri prizorgado',
@@ -3971,12 +4053,16 @@ Oni devis doni al vi [{{SERVER}}{{SCRIPTPATH}}/COPYING ekzempleron de la GNU Gen
 'tags' => 'Validaj ŝanĝaj etikedoj',
 'tag-filter' => '[[Special:Tags|Etikeda]] filtrilo:',
 'tag-filter-submit' => 'Filtrilo',
+'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Etikedo|Etikedoj}}]]: $2)',
 'tags-title' => 'Etikedoj',
 'tags-intro' => 'Ĉi tiu paĝo montras la etikedojn kun kiuj la programaro markus redakton, kaj iliaj signifoj.',
 'tags-tag' => 'Etikeda nomo',
 'tags-display-header' => 'Aspekto en ŝanĝaj listoj',
 'tags-description-header' => 'Plena priskribo pri signifo',
+'tags-active-header' => 'Aktiva',
 'tags-hitcount-header' => 'Markitaj ŝanĝoj',
+'tags-active-yes' => 'Jes',
+'tags-active-no' => 'Ne',
 'tags-edit' => 'redakti',
 'tags-hitcount' => '$1 {{PLURAL:$1|ŝanĝo|ŝanĝoj}}',
 
@@ -3995,7 +4081,8 @@ Oni devis doni al vi [{{SERVER}}{{SCRIPTPATH}}/COPYING ekzempleron de la GNU Gen
 'dberr-header' => 'Ĉi tiu vikio havas problemon',
 'dberr-problems' => 'Bedaŭrinde, ĉi tiu retejo suferas pro teknikaj problemoj.',
 'dberr-again' => 'Bonvolu atendi kelkajn minutojn kaj reŝargi.',
-'dberr-info' => '(Ne povas kontakti la datenbazan servilon: $1)',
+'dberr-info' => '(Ne eblas kontakti la datenbazan servilon: $1)',
+'dberr-info-hidden' => '(Ne eblas kontakti la datenbazan servilon)',
 'dberr-usegoogle' => 'Vi povas serĉi Guglon dume.',
 'dberr-outofdate' => 'Notu ke iliaj indeksoj de nia enhavo eble ne estas ĝisdatigaj.',
 'dberr-cachederror' => 'Jen kaŝmemorigita kopio de la petita paĝo, kaj eble ne estas ĝisdatigita.',
@@ -4013,6 +4100,7 @@ Oni devis doni al vi [{{SERVER}}{{SCRIPTPATH}}/COPYING ekzempleron de la GNU Gen
 'htmlform-selectorother-other' => 'Alia',
 'htmlform-no' => 'Ne',
 'htmlform-yes' => 'Jes',
+'htmlform-chosen-placeholder' => 'Elektu opcion',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 kun tut-teksta subteno',
@@ -4127,6 +4215,19 @@ Aŭ vi povas uzi la facilan formularon sube. Via komento estos aldonita al la pa
 'duration-centuries' => '$1 {{PLURAL:$1|jarcento|jarcentoj}}',
 'duration-millennia' => '$1 {{PLURAL:$1|jarmilo|jarmiloj}}',
 
+# Image rotation
+'rotate-comment' => 'Bildo pivotita $1 {{PLURAL:$1|gradon|gradojn}} dekstren',
+
+# Limit report
+'limitreport-cputime' => 'Uzo de procesora tempo',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|sekundo|sekundoj}}',
+'limitreport-walltime' => 'Uzo de reala tempo',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekundo|sekundoj}}',
+'limitreport-ppvisitednodes' => 'Nombro da nodoj vizititaj de antaŭtraktilo',
+'limitreport-ppgeneratednodes' => 'Nombro da nodoj kreitaj de antaŭtraktilo',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bitoko|bitokoj}}',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bitoko|bitokoj}}',
+
 # Special:ExpandTemplates
 'expandtemplates' => 'Ampleksigi ŝablonojn',
 'expand_templates_intro' => 'Ĉi tiu speciala paĝo traktas tekston kaj ampleksigas ĉiujn ŝablonojn en ĝi rekursie.
@@ -4137,10 +4238,12 @@ Aŭ vi povas uzi la facilan formularon sube. Via komento estos aldonita al la pa
 'expand_templates_input' => 'Enigita teksto:',
 'expand_templates_output' => 'Rezulto',
 'expand_templates_xml_output' => 'XML-eligo',
+'expand_templates_html_output' => 'Kruda eliga HTML',
 'expand_templates_ok' => 'Ek!',
 'expand_templates_remove_comments' => 'Forigi komentojn',
 'expand_templates_remove_nowiki' => 'Nuligi <nowiki> etikedojn en rezulto',
 'expand_templates_generate_xml' => 'Montri XML-sintaksarbon',
+'expand_templates_generate_rawhtml' => 'Montri krudan HTML-n',
 'expand_templates_preview' => 'Antaŭrigardo',
 
 );
index 158b882..0e8cddf 100644 (file)
@@ -26,6 +26,7 @@
  * @author Candalua
  * @author Capmo
  * @author Carlitosag
+ * @author Carlosz22
  * @author Cerealito
  * @author Ciencia Al Poder
  * @author Clerc
@@ -94,6 +95,7 @@
  * @author Sethladan
  * @author Shirayuki
  * @author Spacebirdy
+ * @author Sporeunai
  * @author Stephensuleeman
  * @author Technorum
  * @author The Evil IP address
@@ -315,7 +317,7 @@ $magicWords = array(
        'img_link'                  => array( '1', 'vínculo=$1', 'vinculo=$1', 'enlace=$1', 'link=$1' ),
        'sitename'                  => array( '1', 'NOMBREDELSITIO', 'SITENAME' ),
        'ns'                        => array( '0', 'EN:', 'NS:' ),
-       'localurl'                  => array( '0', 'URLLOCAL', 'LOCALURL:' ),
+       'localurl'                  => array( '0', 'URLLOCAL:', 'LOCALURL:' ),
        'localurle'                 => array( '0', 'URLLOCALC:', 'LOCALURLE:' ),
        'server'                    => array( '0', 'SERVIDOR', 'SERVER' ),
        'servername'                => array( '0', 'NOMBRESERVIDOR', 'SERVERNAME' ),
@@ -340,11 +342,11 @@ $magicWords = array(
        'fullurle'                  => array( '0', 'URLCOMPLETAC:', 'FULLURLE:' ),
        'canonicalurl'              => array( '0', 'URLCANONICA:', 'CANONICALURL:' ),
        'canonicalurle'             => array( '0', 'URLCANONICAC:', 'CANONICALURLE:' ),
-       'lcfirst'                   => array( '0', 'PRIMEROMINUS;', 'PRIMEROMINÚS:', 'LCFIRST:' ),
-       'ucfirst'                   => array( '0', 'PRIMEROMAYUS;', 'PRIMEROMAYÚS:', 'UCFIRST:' ),
+       'lcfirst'                   => array( '0', 'PRIMEROMINUS:', 'PRIMEROMINÚS:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'PRIMEROMAYUS:', 'PRIMEROMAYÚS:', 'UCFIRST:' ),
        'lc'                        => array( '0', 'MINUS:', 'MINÚS:', 'LC:' ),
        'uc'                        => array( '0', 'MAYUS:', 'MAYÚS:', 'UC:' ),
-       'raw'                       => array( '0', 'SINFORMATO', 'SINPUNTOS', 'RAW:' ),
+       'raw'                       => array( '0', 'SINFORMATO:', 'SINPUNTOS:', 'RAW:' ),
        'displaytitle'              => array( '1', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
        'rawsuffix'                 => array( '1', 'SF', 'R' ),
        'newsectionlink'            => array( '1', '__VINCULARANUEVASECCION__', '__ENLACECREARSECCIÓN__', '__NEWSECTIONLINK__' ),
@@ -422,7 +424,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Recibir copias de los correos que envío a otros usuarios',
 'tog-diffonly' => "No mostrar bajo las ''diferencias'' el contenido de la página",
 'tog-showhiddencats' => 'Mostrar las categorías escondidas',
-'tog-noconvertlink' => 'Desactivar la conversión de título de enlace',
 'tog-norollbackdiff' => 'Omitir la diferencia después de revertir',
 'tog-useeditwarning' => 'Advertirme cuando abandone una página editada con cambios sin grabar',
 'tog-prefershttps' => 'Utiliza una conexión segura siempre que haya iniciado una sesión',
@@ -508,7 +509,7 @@ $messages = array(
 'subcategories' => 'Subcategorías',
 'category-media-header' => 'Archivos multimedia en la categoría «$1»',
 'category-empty' => "''La categoría no contiene ninguna página o archivo.''",
-'hidden-categories' => '{{PLURAL:$1|Categoría escondida|Categorías escondidas}}',
+'hidden-categories' => '{{PLURAL:$1|Categoría oculta|Categorías ocultas}}',
 'hidden-category-category' => 'Categorías ocultas',
 'category-subcat-count' => '{{PLURAL:$2|Esta categoría solo contiene la siguiente subcategoría.|Esta categoría contiene {{PLURAL:$1|la siguiente subcategoría|las siguientes $1 subcategorías}}, de un total de $2.}}',
 'category-subcat-count-limited' => 'Esta categoría contiene {{PLURAL:$1|la siguiente subcategoría|las siguientes $1 subcategorías}}.',
@@ -549,7 +550,6 @@ $messages = array(
 'vector-action-protect' => 'Proteger',
 'vector-action-undelete' => 'Restaurar',
 'vector-action-unprotect' => 'Cambiar protección',
-'vector-simplesearch-preference' => 'Activar la barra de búsqueda simplificada (sólo con la apariencia Vector)',
 'vector-view-create' => 'Crear',
 'vector-view-edit' => 'Editar',
 'vector-view-history' => 'Ver historial',
@@ -679,7 +679,7 @@ $1',
 'site-rss-feed' => 'Canal RSS de $1',
 'site-atom-feed' => 'Canal Atom de $1',
 'page-rss-feed' => 'Canal RSS «$1»',
-'page-atom-feed' => 'Canal Atom «$1»',
+'page-atom-feed' => 'Canal Atom de «$1»',
 'red-link-title' => '$1 (la página no existe)',
 'sort-descending' => 'Orden descendente',
 'sort-ascending' => 'Orden ascendente',
@@ -831,8 +831,7 @@ No olvides personalizar tus [[Special:Preferences|preferencias de {{SITENAME}}]]
 'gotaccountlink' => 'Iniciar sesión',
 'userlogin-resetlink' => '¿Olvidaste tus datos de acceso?',
 'userlogin-resetpassword-link' => '¿Has olvidado tu contraseña?',
-'helplogin-url' => 'Help:Inicio de sesión',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ayuda]]',
+'userlogin-helplink2' => 'Ayuda con el registro',
 'userlogin-loggedin' => 'Ya estás conectado como {{GENDER:$1|$1}}.
 Usa el formulario de abajo para iniciar sesión como otro usuario.',
 'userlogin-createanother' => 'Crear otra cuenta',
@@ -926,6 +925,10 @@ Puedes ignorar este mensaje si esta cuenta fue creada por error.',
 'suspicious-userlogout' => 'Tu solicitud de desconexión ha sido denegada, pues parece haber sido enviada desde un navegador defectuoso o un proxy caché.',
 'createacct-another-realname-tip' => 'El nombre real es opcional.
 Si se proporciona, se usará para dar al usuario la atribución de su trabajo.',
+'pt-login' => 'Iniciar sesión',
+'pt-login-button' => 'Iniciar sesión',
+'pt-createaccount' => 'Crear una cuenta',
+'pt-userlogout' => 'Cerrar sesión',
 
 # Email sending
 'php-mail-error-unknown' => 'Error desconocido en la función mail() de PHP.',
@@ -934,8 +937,7 @@ Si se proporciona, se usará para dar al usuario la atribución de su trabajo.',
 
 # Change password dialog
 'changepassword' => 'Cambiar contraseña',
-'resetpass_announce' => 'Has iniciado sesión con una contraseña temporal que fue enviada por correo electrónico.
-Establece una contraseña nueva aquí:',
+'resetpass_announce' => 'Para completar el inicio de sesión, debes definir una contraseña nueva.',
 'resetpass_text' => '<!-- Añada texto aquí -->',
 'resetpass_header' => 'Cambiar la contraseña de la cuenta',
 'oldpassword' => 'Contraseña antigua:',
@@ -951,8 +953,16 @@ Espera $1 antes de intentarlo de nuevo.',
 'resetpass-submit-cancel' => 'Cancelar',
 'resetpass-wrong-oldpass' => 'La contraseña antigua no es correcta.
 Puede que ya hayas cambiado la contraseña o que hayas pedido una temporal.',
+'resetpass-recycled' => 'Por favor, restablece tu contraseña a algo distinto de tu contraseña actual.',
+'resetpass-temp-emailed' => 'Has iniciado sesión con un código temporal por correo electrónico.
+Para terminar la sesión, debes establecer una nueva contraseña aquí:',
 'resetpass-temp-password' => 'Contraseña temporal:',
 'resetpass-abort-generic' => 'Una extensión ha cancelado el cambio de la contraseña.',
+'resetpass-expired' => 'Tu contraseña ha caducado. Por favor, establece una nueva contraseña para iniciar sesión.',
+'resetpass-expired-soft' => 'Su contraseña ha caducado y necesita reajustarse. Elija una nueva contraseña ahora, o haga clic en "{{int:resetpass-enviar-cancelar}}" para restaurarla más adelante.',
+'resetpass-validity-soft' => 'Tu contraseña no es válida: $1
+
+Por favor cambiela por una nueva ahora, o haga clic "{{int:resetpass-submit-cancel}}" para cambiarla más tarde.',
 
 # Special:PasswordReset
 'passwordreset' => 'Restablecimiento de contraseña',
@@ -1220,8 +1230,8 @@ Ya existe.',
 'content-failed-to-parse' => 'No se pudo analizar el contenido $2 del modelo $1: $3',
 'invalid-content-data' => 'Datos de contenido inválidos',
 'content-not-allowed-here' => 'El contenido "$1" no está permitido en la página [[$2]]',
-'editwarning-warning' => 'Si abandonas esta página perderás tus cambios.
-Si estás identificado, puedes deshabilitar esta advertencia en la sección "Edición" de tus preferencias.',
+'editwarning-warning' => 'Se perderán los cambios si se cierra esta página.
+Si has iniciado sesión, puedes desactivar este aviso en la sección «{{int:prefs-editing}}» de las preferencias.',
 'editpage-notsupportedcontentformat-title' => 'Formato de contenido no admitido',
 'editpage-notsupportedcontentformat-text' => 'El formato de contenido $1 no es compatible con el modelo de contenido  $2.',
 
@@ -1257,6 +1267,7 @@ Ese o esos parámetros han sido omitidos.',
 'undo-success' => 'La edición puede deshacerse. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así deshacer la edición.',
 'undo-failure' => 'No se puede deshacer la edición ya que otro usuario ha realizado una edición intermedia.',
 'undo-norev' => 'La edición no puede ser deshecha porque no existe o ha sido borrada.',
+'undo-nochange' => 'Parece que ya se ha deshecho la modificación.',
 'undo-summary' => 'Deshecha la revisión $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc.]])',
 'undo-summary-username-hidden' => 'Deshacer revisión $1 por usuario oculto',
 
@@ -1342,8 +1353,10 @@ Aún tiene la posibilidad de verla; puede ampliar los detalles en el [{{fullurl:
 'revdelete-show-file-submit' => 'Sí',
 'revdelete-selected' => "'''{{PLURAL:$2|Revisión seleccionada|Revisiones seleccionadas}} de [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Seleccionado un evento|Seleccionados eventos}}:'''",
-'revdelete-text' => "Las revisiones borradas aún aparecerán en el historial de la página y en los registros, pero sus contenidos no serán accesibles al público.'''
-Otros administradores de {{SITENAME}} aún podrán acceder al contenido oculto y podrán deshacer el borrado a través de la misma interfaz, a menos que se establezcan restricciones adicionales.",
+'revdelete-text-text' => 'Las revisiones eliminadas aún aparecerán en el historial de la página, pero parte de su contenido será inaccesible para el público.',
+'revdelete-text-file' => 'Las versiones de los archivos eliminados aún aparecerán en el historial del archivo, pero partes de su contenido será inaccesible por el público.',
+'logdelete-text' => 'Las revisiones eliminadas aún aparecerán en el historial de la página, pero parte de su contenido será inaccesible para el público.',
+'revdelete-text-others' => 'Otros administradores en {{SITENAME}} serán capaces de acceder a los contenidos ocultos y pueden restaurarlos a través de esta interfaz, a menos que se establescan restricciones adicionales.',
 'revdelete-confirm' => 'Por favor confirma que deseas realizar la operación, que entiendes las consecuencias y que estás ejecutando dicha acción acorde con [[{{MediaWiki:Policy-url}}|las políticas]].',
 'revdelete-suppress-text' => "La herramienta de supresión '''solo''' debería usarse en los siguientes casos:
 * información potencialmente injuriosa o calumniante.
@@ -1438,6 +1451,8 @@ Nota que usar los enlaces de navegación borrará las selecciones de esta column
 'showhideselectedversions' => 'Mostrar/ocultar versiones seleccionadas',
 'editundo' => 'deshacer',
 'diff-empty' => '(Sin diferencias)',
+'diff-multi-sameuser' => '({{PLURAL:$1|Una revisión intermedia|$1 revisiones intermedias}} por el mismo usuario no mostrado)',
+'diff-multi-otherusers' => '(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} de {{PLURAL:$2|un usuario|$2 usuarios}})',
 'diff-multi-manyusers' => '(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} de {{PLURAL:$2|un usuario|$2 usuarios}})',
 'difference-missing-revision' => 'No {{PLURAL:$2|se ha encontrado|se han encontrado}} {{PLURAL:$2|una revisión|$2 revisiones}} de esta diferencia ($1).
 
@@ -1458,7 +1473,7 @@ Los detalles pueden encontrarse en el [{{fullurl:{{#Special:Log}}/delete|page={{
 'shown-title' => 'Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página',
 'viewprevnext' => 'Ver ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''Hay una página llamada \"[[:\$1]]\" en esta wiki.'''",
-'searchmenu-new' => "'''¡Crea la página «[[:$1]]» en este wiki!'''",
+'searchmenu-new' => '<strong>Crear la página «[[:$1]]» en este wiki.</strong> {{PLURAL:$2|0=|Véase también la página encontrada con la búsqueda.|Véanse también los resultados de la búsqueda.}}',
 'searchprofile-articles' => 'Páginas de contenido',
 'searchprofile-project' => 'Páginas de ayuda y de proyecto',
 'searchprofile-images' => 'Multimedia',
@@ -1484,6 +1499,7 @@ Los detalles pueden encontrarse en el [{{fullurl:{{#Special:Log}}/delete|page={{
 'searchrelated' => 'relacionado',
 'searchall' => 'todos',
 'showingresults' => "Abajo se {{PLURAL:$1|muestra '''1''' resultado|muestran hasta '''$1''' resultados}} comenzando por el n.º '''$2'''.",
+'showingresultsinrange' => 'Abajo se muestran hasta {{PLURAL:$1|<strong>1</strong> resultado|<strong>$1</strong> resultados}} en el rango #<strong>$2</strong> hasta #<strong>$3</strong>.',
 'showingresultsnum' => "Abajo se {{PLURAL:$3|muestra '''1''' resultado|muestran los '''$3''' resultados}} comenzando por el n.º '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1-$2''' de '''$3'''}} para '''$4'''",
 'search-nonefound' => 'No hay resultados que cumplan los criterios de búsqueda.',
@@ -1800,14 +1816,26 @@ Tu dirección de correo no se revela cuando otros usuarios te contactan.',
 'recentchanges-label-plusminus' => 'El tamaño de la página cambió esta cantidad de bytes',
 'recentchanges-legend-heading' => "'''Leyenda:'''",
 'recentchanges-legend-newpage' => '(véase también la [[Special:NewPages|lista de páginas nuevas]])',
-'rcnotefrom' => 'A continuación se muestran los cambios desde <b>$2</b> (hasta <b>$1</b>).',
+'rcnotefrom' => 'A continuación se presentan los cambios desde <strong> $2 </strong> (hasta <strong> $1 </strong> se muestra).',
 'rclistfrom' => 'Mostrar nuevos cambios desde $1',
 'rcshowhideminor' => '$1 ediciones menores',
+'rcshowhideminor-show' => 'Mostrar',
+'rcshowhideminor-hide' => 'Ocultar',
 'rcshowhidebots' => '$1 bots',
+'rcshowhidebots-show' => 'Mostrar',
+'rcshowhidebots-hide' => 'Ocultar',
 'rcshowhideliu' => '$1 usuarios registrados',
+'rcshowhideliu-show' => 'Mostrar',
+'rcshowhideliu-hide' => 'Ocultar',
 'rcshowhideanons' => '$1 usuarios anónimos',
+'rcshowhideanons-show' => 'Mostrar',
+'rcshowhideanons-hide' => 'Ocultar',
 'rcshowhidepatr' => '$1 ediciones patrulladas',
+'rcshowhidepatr-show' => 'Mostrar',
+'rcshowhidepatr-hide' => 'Ocultar',
 'rcshowhidemine' => '$1 mis ediciones',
+'rcshowhidemine-show' => 'Mostrar',
+'rcshowhidemine-hide' => 'Ocultar',
 'rclinks' => 'Ver los últimos $1 cambios en los últimos $2 días.<br />$3',
 'diff' => 'dif',
 'hist' => 'hist',
@@ -1930,6 +1958,8 @@ Si todavía quiere subir su archivo, por favor, regrese a la página anterior y
 'uploaddisabledtext' => 'No es posible subir archivos.',
 'php-uploaddisabledtext' => 'La subida de archivos está deshabilitada en PHP. Por favor compruebe <code>file_uploads</code> en php.ini.',
 'uploadscripted' => 'Este archivo contiene script o código HTML que puede ser interpretado erróneamente por un navegador web.',
+'uploadscriptednamespace' => "Este archivo SVG contiene un espacio de nombre no permitido '$1'",
+'uploadinvalidxml' => 'No se pudo analizar el XML del archivo cargado.',
 'uploadvirus' => '¡El archivo contiene un virus!
 Detalles: $1',
 'uploadjava' => 'El archivo es un ZIP que contiene un archivo .class de Java.
@@ -2301,10 +2331,20 @@ Las entradas <del>tachadas</del> han sido resueltas.',
 'deadendpagestext' => 'Las siguientes páginas no enlazan a otras páginas de {{SITENAME}}.',
 'protectedpages' => 'Páginas protegidas',
 'protectedpages-indef' => 'Sólo protecciones indefinidas',
+'protectedpages-summary' => 'Esta página enumera las páginas existentes que actualmente están protegidas. Para obtener una lista de títulos que están protegidos desde su creación, véase [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Sólo protecciones en cascada',
 'protectedpages-noredirect' => 'Ocultar redirecciones',
 'protectedpagesempty' => 'Actualmente no hay ninguna página protegida con esos parámetros.',
+'protectedpages-timestamp' => 'Fecha y hora',
+'protectedpages-page' => 'Página',
+'protectedpages-expiry' => 'Expira',
+'protectedpages-performer' => 'Protección de usuario',
+'protectedpages-params' => 'Parámetros de protección',
+'protectedpages-reason' => 'Motivo',
+'protectedpages-unknown-timestamp' => 'Desconocido',
+'protectedpages-unknown-performer' => 'Usuario desconocido',
 'protectedtitles' => 'Títulos protegidos',
+'protectedtitles-summary' => 'Esta página enumera títulos que actualmente están protegidos desde su creación. Para una lista de las páginas existentes que están protegidos, véase [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Actualmente no existen entradas protegidas con esos parámetros.',
 'listusers' => 'Lista de usuarios',
 'listusers-editsonly' => 'Muestra sólo usuarios con ediciones',
@@ -2489,6 +2529,7 @@ La dirección de correo electrónico que indicaste en [[Special:Preferences|tus
 'watchmethod-list' => 'revisando las páginas vigiladas en busca de cambios recientes',
 'watchlistcontains' => 'Tu lista de seguimiento posee $1 {{PLURAL:$1|página|páginas}}.',
 'iteminvalidname' => "Problema con el artículo '$1', nombre inválido...",
+'wlnote2' => 'A continuación se muestran los cambios de  {{PLURAL:$1|la última hora|las últimas <strong>$1</strong> horas}}, a partir del $2, $3.',
 'wlshowlast' => 'Ver los cambios de las últimas $1 horas, $2 días  $3',
 'watchlist-options' => 'Opciones de la lista de seguimiento',
 
@@ -2575,7 +2616,7 @@ Véase $2 para un registro de los borrados recientes.',
 'delete-edit-reasonlist' => 'Editar razones de borrado',
 'delete-toobig' => 'Esta página tiene un historial muy grande, con más de $1 {{PLURAL:$1|revisión|revisiones}}. Borrar este tipo de páginas ha sido restringido para prevenir posibles problemas en {{SITENAME}}.',
 'delete-warning-toobig' => 'Esta página tiene un historial de más de $1 {{PLURAL:$1|revisión|revisiones}}. Eliminarla puede perturbar las operaciones de la base de datos de {{SITENAME}}. Ten cuidado al borrar.',
-'deleting-backlinks-warning' => "'''Advertencia:''' Otras páginas están enlazadas o son inclusión desde la página que estás por eliminar.",
+'deleting-backlinks-warning' => "'''Advertencia:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otras páginas]] están enlazadas o transcluídas de la página que está por eliminar.",
 
 # Rollback
 'rollback' => 'Revertir ediciones',
@@ -2749,8 +2790,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Esta dirección IP se encuentra actualmente bloqueada.
 A continuación se muestra la última entrada del registro de bloqueos para mayor referencia.',
 'sp-contributions-search' => 'Buscar contribuciones',
+'sp-contributions-suppresslog' => 'Contribuciones borradas de usuario',
 'sp-contributions-username' => 'Dirección IP o nombre de usuario:',
 'sp-contributions-toponly' => 'Solo mostrar últimas ediciones de página',
+'sp-contributions-newonly' => 'Mostrar solo ediciones que son creaciones de páginas',
 'sp-contributions-submit' => 'Buscar',
 
 # What links here
@@ -2852,7 +2895,8 @@ Véase la [[Special:BlockList|lista de bloqueos]] para revisarlo.',
 'change-blocklink' => 'cambiar bloqueo',
 'contribslink' => 'contribuciones',
 'emaillink' => 'enviar correo electrónico',
-'autoblocker' => 'Has sido bloqueado automáticamente porque tu dirección IP ha sido usada recientemente por «[[User:$1|$1]]». La razón dada para bloquear a «[[User:$1|$1]]» fue «$2».',
+'autoblocker' => 'Has sido bloqueado automáticamente porque tu dirección IP ha sido usada recientemente por «[[User:$1|$1]]».
+El motivo por el que se bloqueó a [[User:$1|$1]] es «$2».',
 'blocklogpage' => 'Registro de bloqueos',
 'blocklog-showlog' => 'Este usuario ha sido bloqueado previamente. Debajo se provee el registro de bloqueos para mayor referencia:',
 'blocklog-showsuppresslog' => 'Este usuario ha sido bloqueado y ocultado. Se provee el registro de supresiones para más detalle:',
@@ -3056,6 +3100,7 @@ $2',
 'thumbnail_image-type' => 'Tipo de imagen no contemplado',
 'thumbnail_gd-library' => 'Configuración de la librería GD incompleta: falta la función $1',
 'thumbnail_image-missing' => 'El fichero parece no existir: $1',
+'thumbnail_image-failure-limit' => 'Ha habido muchos intentos recientes ($1 o más) para representar esta miniatura. Inténtalo de nuevo más tarde.',
 
 # Special:Import
 'import' => 'Importar páginas',
@@ -3104,6 +3149,7 @@ No hay un directorio temporal.',
 'import-error-special' => 'La página "$1" no se ha importado porque pertenece a un espacio de nombres especial que no admite páginas.',
 'import-error-invalid' => 'La página "$1" no se ha importado porque su nombre no es válido.',
 'import-error-unserialize' => 'La revisión $2 de la página "$1" no pudo dejar de hacerse en serie. Se informó de la revisión para utilizar el modelo de contenidos $3 ejecutado en serie como $4.',
+'import-error-bad-location' => 'La revisión $2 utilizando el modelo de contenido $3 no se pueden almacenar en "$1" en este wiki, ya que ese modelo no es compatible en esa página.',
 'import-options-wrong' => '{{PLURAL:$2|Opción errónea|Opciones erróneas}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'La página raíz dada es un título inválido.',
 'import-rootpage-nosubpage' => 'El espacio de nombres "$1" de la página raíz no permite subpáginas.',
@@ -3138,7 +3184,7 @@ No hay un directorio temporal.',
 'tooltip-pt-logout' => 'Salir de la sesión',
 'tooltip-ca-talk' => 'Discusión acerca del artículo',
 'tooltip-ca-edit' => 'Puedes editar esta página. Utiliza el botón de previsualización antes de guardar',
-'tooltip-ca-addsection' => 'Inicia una nueva sección',
+'tooltip-ca-addsection' => 'Iniciar una sección nueva',
 'tooltip-ca-viewsource' => 'Esta página está protegida.
 Puedes ver su código fuente',
 'tooltip-ca-history' => 'Versiones anteriores de esta página y sus autores',
@@ -3161,7 +3207,7 @@ Puedes ver su código fuente',
 'tooltip-n-randompage' => 'Cargar una página al azar',
 'tooltip-n-help' => 'El lugar para aprender',
 'tooltip-t-whatlinkshere' => 'Lista de todas las páginas del wiki que enlazan aquí',
-'tooltip-t-recentchangeslinked' => 'Cambios recientes en las páginas que enlazan con ésta',
+'tooltip-t-recentchangeslinked' => 'Cambios recientes en las páginas que enlazan con esta',
 'tooltip-feed-rss' => 'Sindicación RSS de esta página',
 'tooltip-feed-atom' => 'Sindicación Atom de esta página',
 'tooltip-t-contributions' => 'Lista de contribuciones de este usuario',
@@ -4289,6 +4335,4 @@ También expande las funciones sintácticas como <code><nowiki>{{</nowiki>#langu
 'expand_templates_generate_rawhtml' => 'Mostrar HTML en crudo',
 'expand_templates_preview' => 'Previsualización',
 
-# Unknown messages
-'uploadinvalidxml' => 'No se pudo analizar el XML del archivo cargado.',
 );
index 109a586..25d4572 100644 (file)
@@ -18,6 +18,7 @@
  * @author KaidoKikkas
  * @author KalmerE.
  * @author Ker
+ * @author Kristian.kankainen
  * @author Kyng
  * @author Morel
  * @author Nemo bis
@@ -448,7 +449,7 @@ $messages = array(
 'morenotlisted' => 'See loend pole täielik.',
 'mypage' => 'Minu lehekülg',
 'mytalk' => 'Arutelu',
-'anontalk' => 'Selle IP-aadressi artuelu',
+'anontalk' => 'Selle IP-aadressi arutelu',
 'navigation' => 'Navigeerimine',
 'and' => '&#32;ja',
 
@@ -468,7 +469,6 @@ $messages = array(
 'vector-action-protect' => 'Kaitse',
 'vector-action-undelete' => 'Taasta',
 'vector-action-unprotect' => 'Muuda kaitset',
-'vector-simplesearch-preference' => 'Kasuta lihtsustatud otsiriba (ainult Vektori-kujunduses)',
 'vector-view-create' => 'Loo',
 'vector-view-edit' => 'Muuda',
 'vector-view-history' => 'Näita ajalugu',
@@ -751,8 +751,6 @@ Pane tähele, et seni kuni sa pole oma võrgulehitseja puhvrit tühjendanud, võ
 'gotaccountlink' => 'logi sisse',
 'userlogin-resetlink' => 'Kas oled unustanud oma sisselogimisandmed?',
 'userlogin-resetpassword-link' => 'Kas unustasid parooli?',
-'helplogin-url' => 'Help:Sisselogimine',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Sisselogimisabi]]',
 'userlogin-loggedin' => 'Oled juba sisse logitud nimega {{GENDER:$1|$1}}.
 Kasuta allolevat vormi, et logida sisse teise kasutajaga.',
 'userlogin-createanother' => 'Loo teine konto',
@@ -839,6 +837,9 @@ Palun oota $1, enne kui uuesti proovid.',
 'suspicious-userlogout' => 'Sinu väljalogimiskatse nurjus, sest see näis olevat katkise veebilehitseja või puhverserveri saadetud.',
 'createacct-another-realname-tip' => 'Tegelik nimi on valikuline.
 Kui otsustad selle sisestada, kasutatakse seda kasutaja töö temale omistamiseks.',
+'pt-login' => 'Logi sisse',
+'pt-createaccount' => 'Loo konto',
+'pt-userlogout' => 'Logi välja',
 
 # Email sending
 'php-mail-error-unknown' => 'Tundmatu tõrge PHP funktsioonis mail().',
@@ -847,8 +848,7 @@ Kui otsustad selle sisestada, kasutatakse seda kasutaja töö temale omistamisek
 
 # Change password dialog
 'changepassword' => 'Muuda parool',
-'resetpass_announce' => 'Logisid sisse e-posti teel saadud ajutise koodiga.
-Sisselogimise lõpetamiseks pead siia uue parooli sisestama:',
+'resetpass_announce' => 'Pead määrama uue parooli, et sisselogimine lõpule viia.',
 'resetpass_text' => '<!-- Lisa tekst siia -->',
 'resetpass_header' => 'Konto parooli muutmine',
 'oldpassword' => 'Vana parool:',
@@ -865,8 +865,13 @@ Palun oota $1, enne kui uuesti proovid.',
 'resetpass-submit-cancel' => 'Loobu',
 'resetpass-wrong-oldpass' => 'Vigane ajutine või praegune salasõna.
 Võib-olla oled juba edukalt muudnud oma salasõna või taotlenud uut ajutist salasõna.',
+'resetpass-recycled' => 'Palun vali uus salasõna, mis erineb praegusest.',
+'resetpass-temp-emailed' => 'Logisid sisse e-posti teel saadud ajutise koodiga.
+Et sisselogimine lõpule viia, pead määrama siin uue parooli:',
 'resetpass-temp-password' => 'Ajutine parool:',
 'resetpass-abort-generic' => 'Tarkvaralisa on paroolimuudatuse abortinud.',
+'resetpass-expired' => 'Sinu parool on iganenud. Palun määra uus parool, et sisse logida.',
+'resetpass-expired-soft' => 'Sinu parool on iganenud ja tuleb uuesti määrata. Palun vali kohe uus parool või klõpsa "{{int:resetpass-submit-cancel}}", et määrata see hiljem.',
 
 # Special:PasswordReset
 'passwordreset' => 'Parooli lähtestamine',
@@ -1162,6 +1167,7 @@ Need argumendid on välja jäetud.",
 'undo-success' => 'Selle redaktsiooni käigus tehtud muudatusi saab eemaldada. Palun kontrolli allolevat võrdlust veendumaks, et tahad need muudatused tõepoolest eemaldada. Seejärel saad lehekülje salvestada.',
 'undo-failure' => 'Muudatust ei saa vahapeal tehtud redigeerimiste tõttu tühistada.',
 'undo-norev' => 'Muudatust ei saanud tühistada, kuna seda ei ole või see kustutati.',
+'undo-nochange' => 'Paistab, et see muudatus on juba eemaldatud.',
 'undo-summary' => 'Eemaldatud muudatus $1, mille tegi [[Special:Contributions/$2|$2]] ([[User talk:$2|arutelu]])',
 'undo-summary-username-hidden' => 'Eemaldatud redaktsioon $1, mille tegi peidetud kasutaja',
 
@@ -1246,8 +1252,6 @@ Saad seda muudatust vaadata. [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAG
 'revdelete-show-file-submit' => 'Jah',
 'revdelete-selected' => "'''Valitud {{PLURAL:$2|redaktsioon|redaktsioonid}} leheküljest [[:$1]]:'''",
 'logdelete-selected' => "'''Valitud {{PLURAL:$1|logisissekanne|logisissekanded}}:'''",
-'revdelete-text' => "'''Kustutatud redaktsioonid ja sündmused kajastuvad endiselt lehekülje ajaloos ja logides, kuid osa nende sisust pole avalikult nähtav.'''
-{{GRAMMAR:genitive|{{SITENAME}}}} administraatorid saavad peidetud sisu siiski vaadata ning seda vajadusel selle liidese kaudu taastada, kui see pole just täiendavalt keelatud.",
 'revdelete-confirm' => 'Kinnita, et soovid tõesti seda teha ning et saad aru tagajärgedest ja tegevus on kooskõlas [[{{MediaWiki:Policy-url}}|siinsete kokkulepetega]].',
 'revdelete-suppress-text' => "Andmed tuleks varjata '''ainult''' järgmistel juhtudel:
 * võimalik laim
@@ -1384,13 +1388,14 @@ Harilikult tähendab see seda, et sind siia juhatanud link on vananenud ja siin
 'search-file-match' => '(vastab faili sisule)',
 'search-suggest' => 'Kas mõtlesid: $1',
 'search-interwiki-caption' => 'Sõsarprojektid',
-'search-interwiki-default' => '$1 tulemused:',
+'search-interwiki-default' => 'Tulemused asukohast $1:',
 'search-interwiki-more' => '(veel)',
 'search-relatedarticle' => 'Seotud',
 'searcheverything-enable' => 'Otsi kõigist nimeruumidest',
 'searchrelated' => 'seotud',
 'searchall' => 'kõik',
 'showingresults' => "Allpool näidatakse '''{{PLURAL:$1|ühte|$1}}''' tulemust alates '''$2'''. tulemusest.",
+'showingresultsinrange' => 'Allpool näidatakse {{PLURAL:$1|<strong>üht</strong>|<strong>$1</strong>}} tulemust vahemikus <strong>$2</strong>–<strong>$3</strong>.',
 'showingresultsnum' => "Allpool näitame {{PLURAL:$3|'''ühte''' tulemit|'''$3''' tulemit}} alates tulemist #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|'''$1''' '''$3'''-st vastest|Vasted '''$1–$2''' '''$3'''-st}} päringule '''$4'''",
 'search-nonefound' => 'Päringule ei leitud vasteid.',
@@ -1709,14 +1714,26 @@ See teave on avalik.',
 'recentchanges-label-unpatrolled' => 'Seda muudatust ei ole veel kontrollitud',
 'recentchanges-label-plusminus' => 'Lehekülje suuruse muutus baitides',
 'recentchanges-legend-newpage' => '(vaata ka [[Special:NewPages|uute lehekülgede loendit]])',
-'rcnotefrom' => "Allpool on toodud muudatused alates: '''$2''' (näidatakse kuni '''$1''' muudatust)",
+'rcnotefrom' => 'Allpool on toodud muudatused alates: <strong>$2</strong> (näidatakse kuni <strong>$1</strong> muudatust)',
 'rclistfrom' => 'Näita muudatusi alates: $1',
 'rcshowhideminor' => 'Pisiparandused ($1)',
+'rcshowhideminor-show' => 'näita',
+'rcshowhideminor-hide' => 'peida',
 'rcshowhidebots' => 'Robotid ($1)',
+'rcshowhidebots-show' => 'näita',
+'rcshowhidebots-hide' => 'peida',
 'rcshowhideliu' => 'Registreeritud kasutajad ($1)',
+'rcshowhideliu-show' => 'näita',
+'rcshowhideliu-hide' => 'peida',
 'rcshowhideanons' => 'Anonüümsed kasutajad ($1)',
+'rcshowhideanons-show' => 'näita',
+'rcshowhideanons-hide' => 'peida',
 'rcshowhidepatr' => 'Kontrollitud muudatused ($1)',
+'rcshowhidepatr-show' => 'näita',
+'rcshowhidepatr-hide' => 'peida',
 'rcshowhidemine' => 'Minu parandused ($1)',
+'rcshowhidemine-show' => 'näita',
+'rcshowhidemine-hide' => 'peida',
 'rclinks' => 'Näita viimast $1 muudatust viimase $2 päeva jooksul<br />$3',
 'diff' => 'erin',
 'hist' => 'ajal',
@@ -1846,6 +1863,8 @@ Enne kui jätkad uuesti üleslaadimisega, peaksid paluma olukorda hinnata kellel
 'php-uploaddisabledtext' => 'Failide üleslaadmine on PHP seadetes keelatud.
 Palun vaata <code>file_uploads</code> sätet.',
 'uploadscripted' => 'See fail sisaldab HTML- või skriptikoodi, mida veebilehitseja võib valesti kuvada.',
+'uploadscriptednamespace' => 'See SVG-fail sisaldab keelatud nimeruumi "$1".',
+'uploadinvalidxml' => 'Üleslaaditud failis sisalduvat XMLi ei õnnestunud liigendada.',
 'uploadvirus' => 'Fail sisaldab viirust! Täpsemalt: $1',
 'uploadjava' => 'See fail on ZIP-fail, milles on Java .class-fail.
 Java failide üleslaadimine on keelatud, kuna nende kaudu võidaks turvapiiranguist mööda minna.',
@@ -2187,10 +2206,20 @@ Igal real on ära toodud esimene ja teine ümbersuunamisleht ning samuti teise 
 'deadendpagestext' => 'Järgmised leheküljed ei viita ühelegi teisele {{GRAMMAR:genitive|{{SITENAME}}}} leheküljele.',
 'protectedpages' => 'Kaitstud leheküljed',
 'protectedpages-indef' => 'Ainult määramata ajani kaitstud',
+'protectedpages-summary' => 'Siin on loetletud olemasolevad leheküljed, mis on praegu kaitstud. Loomise eest kaitstud pealkirjade loendi leiad leheküljelt [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Ainult kaskaadkaitsega',
 'protectedpages-noredirect' => 'Peida ümbersuunamised',
 'protectedpagesempty' => 'Selliste parameetritega ei ole praegu ühtegi lehekülge kaitstud.',
+'protectedpages-timestamp' => 'Ajatempel',
+'protectedpages-page' => 'Lehekülg',
+'protectedpages-expiry' => 'Aegumistähtaeg',
+'protectedpages-performer' => 'Kaitsja',
+'protectedpages-params' => 'Kaitse parameetrid',
+'protectedpages-reason' => 'Põhjus',
+'protectedpages-unknown-timestamp' => 'Teadmata',
+'protectedpages-unknown-performer' => 'Teadmata kasutaja',
 'protectedtitles' => 'Kaitstud pealkirjad',
+'protectedtitles-summary' => 'Siin on loetletud pealkirjad, mis on praegu loomise eest kaitstud. Olemasolevate kaitstud lehekülgede loendi leiad leheküljelt [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Hetkel pole ükski pealkiri kaitstud.',
 'listusers' => 'Kasutajad',
 'listusers-editsonly' => 'Näita vaid kasutajaid, kes on teinud muudatusi',
@@ -2463,7 +2492,7 @@ Palun kinnita, et tahad seda tõepoolest teha, et sa mõistad tagajärgi ja et s
 Selle kustutamine on keelatud, et ära hoida ekslikku {{GRAMMAR:genitive|{{SITENAME}}}} töö häirimist.',
 'delete-warning-toobig' => 'See lehekülg on pika redigeerimislooga – üle {{PLURAL:$1|ühe muudatuse|$1 muudatuse}}.
 Ettevaatust, selle kustutamine võib esile kutsuda häireid {{GRAMMAR:genitive|{{SITENAME}}}} andmebaasi töös.',
-'deleting-backlinks-warning' => "'''Hoiatus:''' Teised leheküljed viitavad leheküljele, mida oled kustutamas, või see lehekülg on kasutuses mallina.",
+'deleting-backlinks-warning' => "'''Hoiatus:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Teised leheküljed]] viitavad leheküljele, mida oled kustutamas, või see lehekülg on kasutuses mallina.",
 
 # Rollback
 'rollback' => 'Tühista muudatused',
@@ -2641,8 +2670,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'See IP-aadress on parajasti blokeeritud.
 Allpool on toodud viimane blokeerimislogi sissekanne:',
 'sp-contributions-search' => 'Kaastöö otsimine',
+'sp-contributions-suppresslog' => 'varjatud kaastöö',
 'sp-contributions-username' => 'IP-aadress või kasutajanimi:',
 'sp-contributions-toponly' => 'Ainult uusimad redaktsioonid',
+'sp-contributions-newonly' => 'Näita ainult uute lehekülgedega alustamist',
 'sp-contributions-submit' => 'Otsi',
 
 # What links here
@@ -2743,7 +2774,8 @@ Kehtivaid blokeeringuid vaata [[Special:BlockList|blokeerimisnimekirjast]].',
 'change-blocklink' => 'muuda blokeeringut',
 'contribslink' => 'kaastöö',
 'emaillink' => 'saada e-kiri',
-'autoblocker' => 'Automaatselt blokeeritud, kuna [[User:$1|$1]] on hiljuti sinu IP-aadressi kasutanud. Põhjus: $2',
+'autoblocker' => 'Automaatselt blokeeritud, kuna [[User:$1|$1]] on hiljuti sinu IP-aadressi kasutanud.
+Põhjus: $2',
 'blocklogpage' => 'Blokeerimislogi',
 'blocklog-showlog' => 'See kasutaja on varem blokeeritud. Allpool on toodud blokeerimislogi sissekanne:',
 'blocklog-showsuppresslog' => 'See kasutaja on varem blokeeritud ja peidetud. Allpool on toodud varjamislogi:',
@@ -2951,6 +2983,7 @@ $2',
 'thumbnail_image-type' => 'Selline pildi tüüp ei ole toetatav',
 'thumbnail_gd-library' => 'GD teegi häälestus on poolik: funktsioon $1 puudub',
 'thumbnail_image-missing' => 'Fail näib puuduvat: $1',
+'thumbnail_image-failure-limit' => 'Selle pisipildi viimistlemine on hiljuti liiga palju kordi ($1 või rohkem) ebaõnnestunud. Palun proovi hiljem uuesti.',
 
 # Special:Import
 'import' => 'Lehekülgede import',
@@ -4156,6 +4189,4 @@ Samuti hõrendab see parserifunktsioonid nagu
 'expand_templates_generate_rawhtml' => 'Näita toor-HTMLi',
 'expand_templates_preview' => 'Eelvaade',
 
-# Unknown messages
-'uploadinvalidxml' => 'Üleslaaditud failis sisalduvat XMLi ei õnnestunud liigendada.',
 );
index c849ed5..07760c9 100644 (file)
@@ -17,6 +17,7 @@
  * @author Malafaya
  * @author Nemo bis
  * @author Reedy
+ * @author Subi
  * @author Theklan
  * @author Unai Fdz. de Betoño
  * @author Urhixidur
@@ -288,10 +289,9 @@ $messages = array(
 'vector-action-protect' => 'Babestu',
 'vector-action-undelete' => 'Berreskuratu',
 'vector-action-unprotect' => 'Babesa aldatu',
-'vector-simplesearch-preference' => 'Bilaketa barra sinplifikatua gaitu (Vector itxurarekin bakarrik)',
 'vector-view-create' => 'Sortu',
 'vector-view-edit' => 'Aldatu',
-'vector-view-history' => 'Historia ikusi',
+'vector-view-history' => 'Ikusi historia',
 'vector-view-view' => 'Irakurri',
 'vector-view-viewsource' => 'Kodea ikusia',
 'actions' => 'Ekintzak',
@@ -573,8 +573,6 @@ Ez ezazu ahaztu zure [[Special:Preferences|{{SITENAME}} hobespenak]] aldatzea.',
 'gotaccountlink' => 'Saioa hasi',
 'userlogin-resetlink' => 'Saioa hasteko datuak ahaztu dituzu?',
 'userlogin-resetpassword-link' => 'Zure pasahitza ahaztu duzu?',
-'helplogin-url' => 'Help:Sarrera',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Barrura sartzeko laguntza]]',
 'userlogin-loggedin' => 'Dagoeneko izena emana zaude {{GENDER:$1|$1}}.
 Beheko formularioa erabil ezazu beste erabiltzaile baten izenean sartzeko.',
 'userlogin-createanother' => 'Beste kontu bat sortu',
@@ -818,10 +816,10 @@ Baliteke orrialdea begiratzen zenuen bitartean norbaitek ezabatu edo izenburua a
 Bere IP helbidea erabili beharko da beraz identifikatzeko.
 Erabiltzaile batek baino gehiagok IP bera erabil dezakete ordea.
 Erabiltzaile anonimoa bazara eta zurekin zerikusirik ez duten mezuak jasotzen badituzu, mesedez [[Special:UserLogin/signup|Izena eman]] edo [[Special:UserLogin|saioa hasi]] etorkizunean horrelakoak gerta ez daitezen.''",
-'noarticletext' => 'Oraindik ez dago testurik orrialde honetan.
-Beste orrialde batzuetan [[Special:Search/{{PAGENAME}}|bilatu dezakezu izenburu hau]],
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} bilatu lotutako logak],
-edo [{{fullurl:{{FULLPAGENAME}}|action=edit}} berau aldatu ere egin dezakezu]</span>.',
+'noarticletext' => 'Oraindik ez dago testurik orri honetan.
+Edukiz hornitzeko, aukera hauek dituzu: beste orri batzuetan [[Special:Search/{{PAGENAME}}|orri izenburu hau bilatzea]],
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} lotutako logak bilatzea],
+edo [{{fullurl:{{FULLPAGENAME}}|action=edit}} orri hau editatzea]</span>.',
 'noarticletext-nopermission' => 'Une honetan ez dago testurik orrialde honetan.
 Beste orrialdeetan [[Special:Search/{{PAGENAME}}|izenburu hau bilatu dezakezu]],
 edo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} erlazionatutako erregistroak bilatu]</span>, baina ez duzu orrialde hau sortzeko baimenik.',
@@ -860,10 +858,10 @@ Zure aldaketak ez dira oraindik gorde!",
 Aldaketa ezeztatua izan da testuaren galtzea galarazteko.
 Hau batzuetan gertatzen da buggyan oinarritutako web proxy zerbitzua erabiltzean.'''",
 'edit_form_incomplete' => "'''Aldaketa formularioaren atal batzuk ez dira iritsi zerbitzarira; bi aldiz ziurtatu zure aldaketak osorik daudela eta berriro saiatu.'''",
-'editing' => '$1 aldatzen',
+'editing' => '«$1» aldatzen',
 'creating' => '$1 sortzen',
-'editingsection' => '$1 aldatzen (atala)',
-'editingcomment' => '$1 aldatzen (atal berria)',
+'editingsection' => '«$1» aldatzen (atala)',
+'editingcomment' => '«$1» aldatzen (atal berria)',
 'editconflict' => 'Aldaketa gatazka: $1',
 'explainconflict' => "Zu orrialdea aldatzen hasi ondoren beste norbaitek ere aldaketak egin ditu.
 Goiko testu koadroan ikus daiteke orrialdeak uneotan duen edukia.
@@ -1043,8 +1041,6 @@ Administratzailea zarenez, diff hau ikus dezakezu. Xehetasunak ikusgai daude [{{
 'revdelete-show-file-submit' => 'Bai',
 'revdelete-selected' => "'''{{PLURAL:$2|[[:$1]](r)en hautatutako berrikuspena:|[[:$1]](r)en hautatutako berrikuspenak}}'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Aukeratutako log gertakaria|Aukeratutako log gertakariak}}:'''",
-'revdelete-text' => "'''Ezabatutako berrikuspenek orrialdearen historian agertzen jarraituko dute, baina bere edukiak ez dira publikoki eskuratu ahal izango.'''
-{{SITENAME}}ko administratzaileek ezkutuko eduki hau ikusteko aukera izango dute, eta baita leheneratzeko ere, gunearen arduradunek beste mugapenen bat ezartzen ez badute behintzat.",
 'revdelete-confirm' => 'Baiezta ezazu hori dela zure asmoa, ulertzen dituzula ondorioak, eta [[{{MediaWiki:Policy-url}}|irizpideak]] errespetatuz egiten ari zarela hau.',
 'revdelete-suppress-text' => "Ezabaketa '''bakarrik''' arrazoi hauek direla eta erabili beharko litzateke:
 * Informazio pertsonal desegokia
@@ -1454,7 +1450,7 @@ Informazio hau publikoa da.',
 'action-writeapi' => 'idazteko APIa erabili',
 'action-delete' => 'orrialde hau ezabatu',
 'action-deleterevision' => 'berrikuspen hau ezabatu',
-'action-deletedhistory' => 'orrialde honetako ezabatutako historia ikusi',
+'action-deletedhistory' => 'ikusi orri honen historia ezabatua',
 'action-browsearchive' => 'ezabatutako orrialdeak bilatu',
 'action-undelete' => 'ezabatutako orrialde hau bergaitu',
 'action-suppressrevision' => 'izkutuko berrikuspen hau berrikusi eta gaitu',
@@ -2237,7 +2233,7 @@ Ikus [[Special:ProtectedPages|orri babestuen zerrenda]], orain indarrean dauden
 'movedarticleprotection' => 'babes hobespenak "[[$2]]"tik "[[$1]]"(e)ra mugitu dira',
 'protect-title' => '«$1» babesten',
 'protect-title-notallowed' => '"$1"en babes maila ikusi',
-'prot_1movedto2' => '$1 izenburua $2(r)engatik aldatu da',
+'prot_1movedto2' => '«[[$1]]» orria «[[$2]]» izenera aldatu da',
 'protect-badnamespace-title' => 'Izen-tarte ez babesgarria',
 'protect-badnamespace-text' => 'Izen-tarte honetako orrialdeak ezin dira babestu.',
 'protect-norestrictiontypes-text' => 'Orrialde hau ezin da babestu ez daudelako mugapen mota eskuragarririk.',
@@ -2248,7 +2244,7 @@ Ikus [[Special:ProtectedPages|orri babestuen zerrenda]], orain indarrean dauden
 'protect_expiry_invalid' => 'Babesaldiaren bukaerako data ez da baliozkoa.',
 'protect_expiry_old' => 'Babesaldiaren bukaera iraganekoa da.',
 'protect-unchain-permissions' => 'Babes aukerak desblokeatu',
-'protect-text' => "'''$1''' orrialdearen babes maila ikusi eta aldatu egin beharko zenuke.",
+'protect-text' => '«$1» orriaren babes maila ikusi eta aldatu egin beharko zenuke.',
 'protect-locked-blocked' => "Babes-mailak ezin dira aldatu blokeatuta dagoen bitartean.
 Hemen daude '''$1''' orrialdearen egungo ezarpenak:",
 'protect-locked-dblock' => "Babes-mailak ezin dira aldatu, datu-basea blokeatuta baitago.
@@ -2531,18 +2527,24 @@ Hala ere, $2-(r)en parte denez, blokeoa kendu daiteke.',
 # Move page
 'move-page' => 'Mugitu «$1»',
 'move-page-legend' => 'Orrialdea mugitu',
-'movepagetext' => "Beheko formularioa erabiliz orrialde baten izena aldatuko da, historia osoa izen berrira mugituz.
-Izenburu zaharra izenburu berrira daraman birbideratze bilakatuko da.
-Jatorrizko izenburura doazen birbideratzeak automatikoki egunera ditzakezu.
-Ezetz aukeratzen baduzu, egiazta itzazu birbideratze [[Special:DoubleRedirects|bikoitz]] edo [[Special:BrokenRedirects|apurtuak]].
-Loturak modu zuzenean mantentzea zure erantzukizuna da.
-
-Konturatu zaitez orrialdea '''ez''' dela mugituko izenburu berria duen orrialde bat badago jadanik, ez bada aldaketa-historiarik gabeko orrialde huts edo birbideratze bat.
+'movepagetext' => "Konturatu zaitez orrialdea '''ez''' dela mugituko izenburu berria duen orrialde bat badago jadanik, ez bada aldaketa-historiarik gabeko orrialde huts edo birbideratze bat.
 Horrek esan nahi du hanka sartzekotan orrialde baten jatorrizko izenburua berreskuratu daitekeela, baina ezin dela jada existitzen den orrialde baten gainean idatzi.
 
 '''Oharra!'''
 Aldaketa hau drastikoa eta ustekabekoa izan daiteke orrialde oso ezagunetan;
-mesedez, egiazta ezazu honen ondorioak ulertzen dituzula, jarraitu baino lehen.",
+mesedez, egiazta ezazu honen ondorioak ulertzen dituzula, jarraitu baino lehen.
+Inprimaki hau erabiliz, orri baten izena aldatuko da, eta haren historia izen berrira eraman.
+Izenburu zaharra izenburu berrirantz birzuzendutako orri bihurtuko da.
+Jatorrizko izenburura doazen birzuzenketak automatikoki egunera ditzakezu.
+Halako eguneratze automatikorik ez egitea aukeratzen baduzu, egiazta itzazu birbideratze [[Special:DoubleRedirects|bikoitzak]] eta [[Special:BrokenRedirects|apurtuak]].
+Zure ardura da loturak behar den tokirantz bideratzea.
+
+Gogoan izan ezazu ezazu: orriaren izena <strong>ez</strong> da aldatuko baldin jarri nahi duzun izenburua duen orria dagoeneko sortuta badago, salbu eta historiarik gabeko birzuzenketa orri bat bada.
+Hau da, nahasten baldin bazara, mugitu duzun orria lehengo izenburura itzultzeko modua badago, eta ezin duzun lehendik sortuta dagoen orri bat gainidatzi.
+
+<strong>Kontuz!</strong>
+Oso erabilia den orri batean, aldaketa hau bat-batekoa eta ustekabekoa izan liteke;
+zalantzarik baldin baduzu, lehenbizi adieraz ezazu zure asmoa eztabaida orrian, beste wikilarien iritziak jasotzeko.",
 'movepagetalktext' => "Dagokion eztabaida orrialdea berarekin batera mugitu da, honako kasu hauetan '''ezik:'''
 * Hutsik ez dagoen eztabaida orrialde bat existitzen bada izen berrian.
 * Beheko koadroa hautatzen ez baduzu.
@@ -2638,6 +2640,7 @@ Mesedez bisitatu [https://www.mediawiki.org/wiki/Localisation MediaWiki] eta [//
 'allmessages-prefix' => 'Aurrizkiaren arabera iragazi:',
 'allmessages-language' => 'Hizkuntza:',
 'allmessages-filter-submit' => 'Joan',
+'allmessages-filter-translate' => 'Itzuli',
 
 # Thumbnails
 'thumbnail-more' => 'Handitu',
@@ -3548,7 +3551,13 @@ Halaber [[Special:EditWatchlist|aldatzaile estandarra]] erabil dezakezu.',
 'version-hook-name' => 'Estentsioaren izena',
 'version-hook-subscribedby' => 'Hauen harpidetzarekin',
 'version-version' => '(Bertsioa $1)',
-'version-license' => 'Lizentzia',
+'version-license' => 'MediaWiki Lizentzia',
+'version-ext-license' => 'Lizentzia',
+'version-ext-colheader-name' => 'Luzapena',
+'version-ext-colheader-version' => 'Bertsioa',
+'version-ext-colheader-license' => 'Lizentzia',
+'version-ext-colheader-description' => 'Deskribapena',
+'version-ext-colheader-credits' => 'Egileak',
 'version-poweredby-credits' => "Wiki hau '''[https://www.mediawiki.org/ MediaWiki]'''k sustatzen du (copyright © 2001-$1 $2).",
 'version-poweredby-others' => 'beste batzuk',
 'version-poweredby-translators' => 'translatewiki.net itzultzaileak',
index 8a40873..bc78731 100644 (file)
@@ -665,9 +665,6 @@ puei bel detallis nel [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}
 'revdelete-show-file-submit' => 'Sí',
 'revdelete-selected' => "'''{{PLURAL:$2|Revisión aseñalá e|Revisionis aseñalás de}} '''[[:$1]]''':'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Eventu el rustrihu aseñalau|Eventus del rustrihu aseñalaus}}:'''",
-'revdelete-text' => "'''Las revisionis esborrás entovia apaicirán nel estorial la páhina, peru el su continiu nu sedrá acesibri pal púbricu.'''
-
-El restu e çahorilis desti güiqui sí tendrán premisu pa visoreal el continiu açonchau, i revertil el esborrau si es mestel, a nu sel que los alministraoris del güiqui crein una restrición aicional.",
 'revdelete-legend' => 'Establecel restricionis de visibiliá',
 'revdelete-hide-text' => 'Açonchal el testu la revisión',
 'revdelete-hide-image' => 'Açonchal el continiu el archivu',
index 2514d6b..0d03802 100644 (file)
@@ -15,6 +15,7 @@
  * @author Asoxor
  * @author Baqeri
  * @author Behdarvandyani
+ * @author Calak
  * @author Dalba
  * @author E THP
  * @author Ebraminio
@@ -454,7 +455,7 @@ $imageFiles = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'پیوند خط کشی شده در زیر:',
+'tog-underline' => 'خط کشیدن زیر پیوندها:',
 'tog-hideminor' => 'تغییرات جزئی از فهرست تغییرات اخیر پنهان شوند',
 'tog-hidepatrolled' => 'ویرایش‌های گشت‌خورده از فهرست تغییرات اخیر پنهان شوند',
 'tog-newpageshidepatrolled' => 'صفحه‌های گشت‌خورده از فهرست صفحه‌های تازه پنهان شوند',
@@ -490,7 +491,6 @@ $messages = array(
 'tog-ccmeonemails' => 'رونوشتی از نامه‌ای که به دیگران ارسال می‌کنم برای خودم هم فرستاده شود',
 'tog-diffonly' => 'محتوای صفحه، زیر تفاوت نمایش داده نشود',
 'tog-showhiddencats' => 'رده‌های پنهان نمایش داده شود',
-'tog-noconvertlink' => 'تبدیل عنوان پیوند غیرفعال شود',
 'tog-norollbackdiff' => 'بعد از واگردانی تفاوت نشان داده نشود',
 'tog-useeditwarning' => 'زمان خروج از صفحهٔ ویرایش در صورت داشتن ویرایش‌های‌ ذخیره‌نشده به من هشدار داده شود',
 'tog-prefershttps' => 'در حالت ورود به سامانه همواره از اتصال امن استفاده شود',
@@ -617,7 +617,6 @@ $messages = array(
 'vector-action-protect' => 'محافظت',
 'vector-action-undelete' => 'احیا',
 'vector-action-unprotect' => 'تغییر سطح حفاظت',
-'vector-simplesearch-preference' => 'فعال‌کردن نوار جستجوی ساده‌شده (فقط در پوستهٔ برداری)',
 'vector-view-create' => 'ایجاد',
 'vector-view-edit' => 'ویرایش',
 'vector-view-history' => 'نمایش تاریخچه',
@@ -907,9 +906,7 @@ $2',
 'gotaccountlink' => 'به سامانه وارد شوید',
 'userlogin-resetlink' => 'جزئیات ورود را فراموش کرده‌اید؟',
 'userlogin-resetpassword-link' => 'گذرواژه‌تان را فراموش کردید؟',
-'helplogin-url' => 'Help:ورود به سامانه',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|راهنمای ورود به سامانه]]',
-'userlogin-loggedin' => 'شما در حال حاضر به‌عنوان {{GENDER:$1|$1}} وارد سیستم شده‌اید.
+'userlogin-loggedin' => 'شما در حال حاضر به‌عنوان {{GENDER:$1|$1}} وارد شده‌اید.
 از فرم پایین برای ورود به‌عنوان یک کاربر دیگر استفاده کنید.',
 'userlogin-createanother' => 'ایجاد یک حساب کاربری دیگر',
 'createacct-join' => 'اطلاعاتتان را در زیر وارد کنید',
@@ -918,7 +915,7 @@ $2',
 'createacct-emailoptional' => 'نشانی رایانامه (اختیاری)',
 'createacct-email-ph' => 'نشانی رایانامه را وارد کنید',
 'createacct-another-email-ph' => 'نشانی رایانامه را وارد کنید',
-'createaccountmail' => 'استÙ\81ادÙ\87 Ø§Ø² Ø±Ù\85ز Ø¹Ø¨Ù\88ر Ù\85Ù\88Ù\82ت ØªØµØ§Ø¯Ù\81Û\8c Ù\88 Ù\81رستادÙ\86 Ø¢Ù\86 Ø¨Ù\87 Ù\86شاÙ\86Û\8c Ø§Û\8cÙ\85Û\8cÙ\84 مشخص‌شده',
+'createaccountmail' => 'استÙ\81ادÙ\87 Ø§Ø² Ø±Ù\85ز Ø¹Ø¨Ù\88ر Ù\85Ù\88Ù\82ت ØªØµØ§Ø¯Ù\81Û\8c Ù\88 Ù\81رستادÙ\86 Ø¢Ù\86 Ø¨Ù\87 Ù\86شاÙ\86Û\8c Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 مشخص‌شده',
 'createacct-realname' => 'نام واقعی (اختیاری)',
 'createaccountreason' => 'دلیل:',
 'createacct-reason' => 'دلیل',
@@ -1002,11 +999,15 @@ $2',
 'usernamehasherror' => 'نام کاربری نمی‌تواند شامل نویسه‌های درهم باشد',
 'login-throttled' => 'شما به تازگی چندین‌بار برای ثبت ورود تلاش کرده‌اید.
 لطفاً پیش از آنکه دوباره تلاش کنید $1 صبر کنید.',
-'login-abort-generic' => 'ورود شما به سیستم ناموفق بود - خاتمهٔ ناگهانی داده شد',
+'login-abort-generic' => 'ورود شما ناموفق بود - خاتمهٔ ناگهانی داده شد',
 'loginlanguagelabel' => 'زبان: $1',
 'suspicious-userlogout' => 'درخواست شما برای خروج از سامانه رد شد زیرا به نظر می‌رسد که این درخواست توسط یک مرورگر معیوب یا پروکسی میانگیر ارسال شده باشد.',
 'createacct-another-realname-tip' => 'نام واقعی اختیاری است.
 اگر آن را وارد کنید هنگام ارجاع به آثارتان و انتساب آن‌ها به شما از نام واقعی‌تان استفاده خواهد شد.',
+'pt-login' => 'ورود',
+'pt-login-button' => 'ورود به سامانه',
+'pt-createaccount' => 'ایجاد حساب کاربری',
+'pt-userlogout' => 'خروج',
 
 # Email sending
 'php-mail-error-unknown' => 'خطای ناشناخته در تابع  mail()‎ پی‌اچ‌پی',
@@ -1015,8 +1016,7 @@ $2',
 
 # Change password dialog
 'changepassword' => 'تغییر گذرواژه',
-'resetpass_announce' => 'شما با کد موقتی ارسال شده وارد شده‌اید.
-برای انجام فرایند ورود به سامانه باید گذروازهٔ جدیدی وارد کنید:',
+'resetpass_announce' => 'شما باید برای پایان ورود به سامانه، گذرواژهٔ جدیدی را تنظیم کنید.',
 'resetpass_text' => '<!-- اینجا متن اضافه کنید -->',
 'resetpass_header' => 'تغییر گذرواژهٔ حساب کاربری',
 'oldpassword' => 'گذرواژهٔ پیشین:',
@@ -1032,8 +1032,13 @@ $2',
 'resetpass-submit-cancel' => 'لغو',
 'resetpass-wrong-oldpass' => 'گذرواژهٔ موقت یا اخیر نامعتبر.
 ممکن است که شما همینک گذرواژه‌تان را با موفقیت تغییر داده باشید یا درخواست یک گذرواژهٔ موقت جدید کرده باشید.',
+'resetpass-recycled' => 'لطفاً رمز عبور خود را به چیز دیگری غیر از رمز عبور فعلی تنظیم کنید.',
+'resetpass-temp-emailed' => 'شما با یک کد رایانامه شدهٔ موقت وارد شده‌اید.
+برای پایان ورود، شما باید رمز عبور جدیدی اینجا وارد کنید:',
 'resetpass-temp-password' => 'گذرواژهٔ موقت:',
 'resetpass-abort-generic' => 'تغییر گذرواژه به دست یکی از افزونه‌ها لغو شده است.',
+'resetpass-expired' => 'رمز عبور شما منقضی شده‌است. لطفاً برای ورود رمز عبور جدیدی را تنظیم کنید.',
+'resetpass-expired-soft' => 'رمز عبور شما منقضی شده‌است، و نیاز به تنظیم مجدد دارد. لطفاً اکنون رمز عبور جدیدی را انتخاب کنید، یا برای تنظیم مجدد آن بعدآً، دکمه "{{int:resetpass-submit-cancel}}" را کلیک کنید.',
 
 # Special:PasswordReset
 'passwordreset' => 'بازنشانی گذرواژه',
@@ -1185,7 +1190,7 @@ $2
 'noarticletext-nopermission' => 'این صفحه هم‌اکنون متنی ندارد.
 شما می‌توانید در دیگر صفحه‌ها [[Special:Search/{{PAGENAME}}|این عنوان را جستجو کنید]]،
 یا <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} سیاهه‌های مرتبط را بگردید]</span> ولی شما اجازه ایجاد این صفحه را ندارید.',
-'missing-revision' => 'ویرایش #$1 از صفحهٔ "{{PAGENAME}}" موجود نیست.
+'missing-revision' => 'ویرایش #$1 از صفحهٔ «{{PAGENAME}}» موجود نیست.
 
 معمولاً در اثر پیوند به تاریخچهٔ به‌روز نشدهٔ صفحهٔ حذف شده است.
 می‌توانید جزئیات بیشتر را در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] بیابید.',
@@ -1199,8 +1204,8 @@ $2
 *'''گوگل کروم:'''کلیدهای ''Ctrl+Shift+R'' را با هم فشار دهید. (در رایانه‌های اپل مکینتاش کلید‌های ''⌘-Shift-R'')
 *'''اینترنت اکسپلورر:''' کلید ''Ctrl'' را نگه‌دارید و روی دکمهٔ ''Refresh'' کلیک کنید، یا کلید‌های ''Ctrl-F5'' را با هم فشار دهید
 *'''اپرا:''' حافظهٔ نهانی مرورگر را از طریق منوی ''Tools &rarr; Preferences'' پاک کنید",
-'usercssyoucanpreview' => "'''Ù\86کتÙ\87:''' Ù¾Û\8cØ´ Ø§Ø² Ø°Ø®Û\8cرÙ\87â\80\8cکردÙ\86 Ù\81اÛ\8cÙ\84 سی‌اس‌اس خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
-'userjsyoucanpreview' => "'''Ù\86کتÙ\87:''' Ù¾Û\8cØ´ Ø§Ø² Ø°Ø®Û\8cرÙ\87â\80\8cکردÙ\86 Ù\81اÛ\8cÙ\84 جاوااسکریپت خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
+'usercssyoucanpreview' => "'''Ù\86کتÙ\87:''' Ù¾Û\8cØ´ Ø§Ø² Ø°Ø®Û\8cرÙ\87â\80\8cکردÙ\86 Ù¾Ø±Ù\88Ù\86دÙ\87 سی‌اس‌اس خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
+'userjsyoucanpreview' => "'''Ù\86کتÙ\87:''' Ù¾Û\8cØ´ Ø§Ø² Ø°Ø®Û\8cرÙ\87â\80\8cکردÙ\86 Ù¾Ø±Ù\88Ù\86دÙ\87Ù\94 جاوااسکریپت خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
 'usercsspreview' => "'''فراموش مکنید که شما فقط دارید پیش‌نمایش سی‌اس‌اس کاربری‌تان را می‌بینید.'''
 '''این سی‌اس‌اس هنوز ذخیره نشده‌است!'''",
 'userjspreview' => "'''به یاد داشته باشید که شما فقط دارید جاوااسکریپت کاربری‌تان را امتحان می‌کنید/پیش‌نمایش آن را می‌بینید.'''
@@ -1220,7 +1225,7 @@ $2
 'session_fail_preview' => "'''شرمنده! به علت از دست رفتن اطلاعات نشست کاربری نمی‌توانیم ویرایش شما را پردازش کنیم.'''
 لطفاً دوباره سعی کنید.
 اگر دوباره به همین پیام برخوردید از سامانه [[Special:UserLogout|خارج شوید]] و دوباره وارد شوید.",
-'session_fail_preview_html' => "'''Ù\85تاسفانه امکان ثبت ویرایش شما به خاطر از دست رفتن اطلاعات نشست کاربری وجود ندارد.'''
+'session_fail_preview_html' => "'''Ù\85تأسفانه امکان ثبت ویرایش شما به خاطر از دست رفتن اطلاعات نشست کاربری وجود ندارد.'''
 
 ''با توجه به این که در {{SITENAME}} امکان درج اچ‌تی‌ام‌ال خام فعال است، پیش‌نمایش صفحه پنهان شده تا امکان حملات مبتنی بر جاوااسکریپت وجود نداشته باشد.''
 
@@ -1303,8 +1308,8 @@ $2
 'content-failed-to-parse' => 'عدم موفقیت در تجزیه محتوای $2 برای مدل $1: $3',
 'invalid-content-data' => 'داده محتوای نامعتبر',
 'content-not-allowed-here' => 'محتوای «$1» در صفحهٔ [[$2]] مجاز نیست',
-'editwarning-warning' => 'خروج از این صفحه ممکن است باعث شود که شما هر شانسی که به وجود آورده اید را از دست بدهید.
-اگر شما وارد سیستم شده‌اید، می‌توانید این هشدار را در بخش «در حال ویرایش» ترجیحاتتان غیرفعال کنید.',
+'editwarning-warning' => 'خروج از این صفحه ممکن است باعث شود که شما هر شانسی که به وجود آوردهاید را از دست بدهید.
+اگر شما وارد سامانه شده‌اید، می‌توانید این هشدار را در بخش «{{int:prefs-editing}}» ترجیحاتتان غیرفعال کنید.',
 'editpage-notsupportedcontentformat-title' => 'فرمت محتوا پشتیبانی نشده',
 'editpage-notsupportedcontentformat-text' => 'فرمت محتوای $1 توسط مدل محتوای $2 پشتیبانی نشده‌است.',
 
@@ -1341,6 +1346,7 @@ $2
 لطفاً تفاوت زیر را بررسی کنید تا تأیید کنید که این چیزی است که می‌خواهید انجام دهید، سپس تغییرات زیر را ذخیره کنید تا خنثی‌سازی ویرایش را به پایان ببرید.',
 'undo-failure' => 'به علت تعارض با ویرایش‌های میانی، این ویرایش را نمی‌توان خنثی کرد.',
 'undo-norev' => 'این ویرایش را نمی‌توان خنثی کرد چون وجود ندارد یا حذف شده‌است.',
+'undo-nochange' => 'به نظر می‌رسد ویرایش در حال حاضر باطل بوده است.',
 'undo-summary' => 'خنثی‌سازی ویرایش $1 توسط [[Special:Contributions/$2|$2]] ([[User talk:$2|بحث]])',
 'undo-summary-username-hidden' => 'خنثی‌سازی نسخهٔ $1 به دست یک کاربر پنهان‌شده',
 
@@ -1424,8 +1430,6 @@ $2
 'revdelete-show-file-submit' => 'بله',
 'revdelete-selected' => "'''{{PLURAL:$2|نسخهٔ|نسخه‌های}} انتخاب شده از [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|مورد|موارد}} انتخاب شده از سیاهه:'''",
-'revdelete-text' => "'''نسخه‌ها و موارد حذف شده کماکان از طریق تاریخچهٔ صفحه و سیاهه‌ها قابل مشاهده هستند، اما بخش‌هایی از محتوای آن‌ها توسط عموم قابل مشاهده نخواهد بود.'''
-سایر مدیران {{SITENAME}} هنوز می‌توانند این محتوای پنهان را ببینند و از همین طریق موارد حذف شده را احیا کنند، مگر آن که محدودیت‌های دیگری اعمال گردد.",
 'revdelete-confirm' => 'لطفاً تأیید کنید که می‌خواهید این کار را انجام دهید، عواقب آن را درک می‌کنید و این کار را طبق [[{{MediaWiki:Policy-url}}|سیاست‌ها]] انجام می‌دهید.',
 'revdelete-suppress-text' => "فرونشانی باید '''تنها''' برای موارد زیر استفاده شود:
 * اطلاعات به طور بالقوه افتراآمیز
@@ -1455,11 +1459,11 @@ $1",
 'pagehist' => 'تاریخچهٔ صفحه',
 'deletedhist' => 'تاریخچهٔ حذف‌شده',
 'revdelete-hide-current' => 'خطا در پنهان‌کردن مورد مورخ $2 ساعت $1: این نسخه، نسخهٔ اخیر است و قابل پنهان‌کردن نیست.',
-'revdelete-show-no-access' => 'خطا در پنهان کردن مورد مورخ $2 ساعت $1: این نسخه علامت «محدودیت» دارد و شما به آن دسترسی ندارید.',
-'revdelete-modify-no-access' => 'خطا در پنهان کردن مورد مورخ $2 ساعت $1: این نسخه علامت «محدودیت» دارد و شما به آن دسترسی ندارید.',
-'revdelete-modify-missing' => 'خطا در پنهان کردن مورد شمارهٔ $1: این نسخه در پایگاه داده وجود ندارد!',
+'revdelete-show-no-access' => 'خطا در پنهانکردن مورد مورخ $2 ساعت $1: این نسخه علامت «محدودیت» دارد و شما به آن دسترسی ندارید.',
+'revdelete-modify-no-access' => 'خطا در پنهانکردن مورد مورخ $2 ساعت $1: این نسخه علامت «محدودیت» دارد و شما به آن دسترسی ندارید.',
+'revdelete-modify-missing' => 'خطا در پنهانکردن مورد شمارهٔ $1: این نسخه در پایگاه داده وجود ندارد!',
 'revdelete-no-change' => "'''هشدار:''' مورد مورخ $2 ساعت $1 از قبل تنظیمات پیدایی درخواست شده را دارا بود.",
-'revdelete-concurrent-change' => 'خطا در پنهان کردن مورد مورخ $2 ساعت $1: به نظر می‌رسد که در مدتی که شما برای تغییر وضعیت آن تلاش می‌کردید وضعیت آن توسط فرد دیگری تغییر یافته است.
+'revdelete-concurrent-change' => 'خطا در پنهانکردن مورد مورخ $2 ساعت $1: به نظر می‌رسد که در مدتی که شما برای تغییر وضعیت آن تلاش می‌کردید وضعیت آن توسط فرد دیگری تغییر یافته است.
 لطفاً سیاهه‌ها را بررسی کنید.',
 'revdelete-only-restricted' => 'خطا در پنهان کردن مورد مورخ $2 ساعت $1: شما نمی‌توانید موارد را از دید مدیران پنهان کنید مگر آن که یکی دیگر از گزینه‌های پنهان‌سازی را نیز انتخاب کنید.',
 'revdelete-reason-dropdown' => '*دلایل متداول حذف
@@ -1540,7 +1544,7 @@ $1",
 'shown-title' => 'نمایش $1 {{PLURAL:$1|نتیجه|نتیجه}} در هر صفحه',
 'viewprevnext' => 'نمایش ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''صفحه‌ای با عنوان «[[:$1]]» در این ویکی وجود دارد.'''",
-'searchmenu-new' => '<strong>ایجاد صفحه "[[:$1]]" در این ویکی!</strong> {{PLURAL:$2|0=|همچنین مشاهدهٔ صفحهٔ پیدا شده با جستجوی شما.|همچنین مشاهدهٔ جستجوی نتایج پیدا شده.}}',
+'searchmenu-new' => '<strong>ایجاد صفحهٔ «[[:$1]]» در این ویکی!</strong> {{PLURAL:$2|0=|همچنین مشاهدهٔ صفحهٔ پیدا شده با جستجوی شما.|همچنین مشاهدهٔ جستجوی نتایج پیدا شده.}}',
 'searchprofile-articles' => 'صفحه‌های محتوایی',
 'searchprofile-project' => 'صفحه‌های راهنما و پروژه',
 'searchprofile-images' => 'چندرسانه‌ای',
@@ -1559,13 +1563,14 @@ $1",
 'search-file-match' => '(تشابه محتوی پرونده)',
 'search-suggest' => 'آیا منظورتان این بود: $1',
 'search-interwiki-caption' => 'پروژه‌های خواهر',
-'search-interwiki-default' => '$1 نتیجه:',
+'search-interwiki-default' => 'نتایج از $1 :',
 'search-interwiki-more' => '(بیشتر)',
 'search-relatedarticle' => 'مرتبط',
 'searcheverything-enable' => 'جستجو در تمام فضاهای نام',
 'searchrelated' => 'مرتبط',
 'searchall' => 'همه',
 'showingresults' => "نمایش حداکثر {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} در پایین، آغاز از شماره '''$2'''.",
+'showingresultsinrange' => 'نمایش در پائین تا {{PLURAL:$1|<strong>1</strong> نتیجه|<strong>$1</strong> نتیجه}} in range #<strong>$2</strong> تا #<strong>$3</strong>.',
 'showingresultsnum' => "نمایش حداکثر '''$3''' {{PLURAL:$3|نتیجه|نتیجه}} در پایین، آغاز از شماره '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|نتیجهٔ '''$1''' از '''$3'''|نتایج '''$1 تا $2''' از '''$3'''}} برای '''$4'''",
 'search-nonefound' => 'نتیجه‌ای منطبق با درخواست پیدا نشد.',
@@ -1786,7 +1791,7 @@ $1",
 'right-suppressionlog' => 'مشاهدهٔ سیاهه‌های خصوصی',
 'right-block' => 'قطع دسترسی ویرایشی دیگر کاربران',
 'right-blockemail' => 'قطع دسترسی دیگر کاربران برای ارسال رایانامه',
-'right-hideuser' => 'قطع دسترسی کاربر و پنهان کردن آن از دید عموم',
+'right-hideuser' => 'قطع دسترسی کاربر و پنهانکردن آن از دید عموم',
 'right-ipblock-exempt' => 'تاثیر نپذیرفتن از قطع دسترسی‌های آی‌پی، خودکار یا فاصله‌ای',
 'right-proxyunbannable' => 'تاثیر نپذیرفتن از قطع دسترسی خودکار پروکسی‌ها',
 'right-unblockself' => 'بازکردن دسترسی خود',
@@ -1864,7 +1869,7 @@ $1",
 'action-userrights' => 'ویرایش همهٔ اختیارات کاربری',
 'action-userrights-interwiki' => 'ویرایش اختیارات کاربری کاربران یک ویکی دیگر',
 'action-siteadmin' => 'قفل‌کردن و بازکردن پایگاه داده‌ها',
-'action-sendemail' => 'ارساÙ\84 Ø§Û\8cÙ\85Û\8cÙ\84',
+'action-sendemail' => 'ارساÙ\84 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87',
 'action-editmywatchlist' => 'فهرست پیگیری‌های خود را ویرایش کنید',
 'action-viewmywatchlist' => 'فهرست پیگیری‌های خود را ببینید',
 'action-viewmyprivateinfo' => 'اطلاعات خصوصی خود را ببینید',
@@ -1887,14 +1892,26 @@ $1",
 'recentchanges-legend-heading' => "'''اختصارها:'''",
 'recentchanges-legend-newpage' => '(همچنین به [[Special:NewPages|فهرست صفحات جدید]] نگاه کنید)',
 'recentchanges-legend-plusminus' => "('' ±۱۲۳'')",
-'rcnotefrom' => 'در زیر تغییرات از تاریخ <b>$2</b> آمده‌اند (تا <b>$1</b> مورد نشان داده می‌شود).',
+'rcnotefrom' => 'در زیر تغییرات از <strong>$2</strong> (تا <strong>$1</strong> نشان داده شده‌است).',
 'rclistfrom' => 'نمایش تغییرات جدید با شروع از $1',
 'rcshowhideminor' => '$1 ویرایش‌های جزئی',
+'rcshowhideminor-show' => 'نمایش',
+'rcshowhideminor-hide' => 'پنهان‌ کردن',
 'rcshowhidebots' => '$1 ربات‌ها',
-'rcshowhideliu' => 'کاربران نسخهٔ $1 ثبت‌نام‌ کردند',
+'rcshowhidebots-show' => 'نمایش',
+'rcshowhidebots-hide' => 'پنهان‌کردن',
+'rcshowhideliu' => '$1 کاربران ثبت‌نام‌کردە',
+'rcshowhideliu-show' => 'نمایش',
+'rcshowhideliu-hide' => 'پنهان‌کردن',
 'rcshowhideanons' => '$1 کاربران ناشناس',
+'rcshowhideanons-show' => 'نمایش',
+'rcshowhideanons-hide' => 'پنهان‌کردن',
 'rcshowhidepatr' => '$1 ویرایش‌های گشت‌خورده',
+'rcshowhidepatr-show' => 'نمایش',
+'rcshowhidepatr-hide' => 'پنهان‌کردن',
 'rcshowhidemine' => '$1 ویرایش‌های من',
+'rcshowhidemine-show' => 'نمایش',
+'rcshowhidemine-hide' => 'پنهان‌کردن',
 'rclinks' => 'نمایش آخرین $1 تغییر در $2 روز اخیر<br />$3',
 'diff' => 'تفاوت',
 'hist' => 'تاریخچه',
@@ -2015,8 +2032,8 @@ $1",
 'file-exists-duplicate' => 'به نظر می‌رسد این پرونده نسخه‌ای تکراری از {{PLURAL:$1|پروندهٔ|پرونده‌های}} زیر باشد:',
 'file-deleted-duplicate' => 'یک پرونده نظیر این پرونده ([[:$1]]) قبلاً حذف شده‌است.
 شما باید تاریخچهٔ حذف آن پرونده را قبل از بارگذاری مجدد آن ببینید.',
-'file-deleted-duplicate-notitle' => 'یک پرونده یکسان بااین پرونده قبلا حذف شده است و عنوان متوقف شده‌است.
-Ø´Ù\85ا Ø¨Ø§Û\8cد Ø§Ø² Ú©Ø³Û\8c Ú©Ù\87 Ø¯Ø³ØªØ±Ø³Û\8c Ù\85شاÙ\87دÙ\87Ù\94 Ù\81اÛ\8cÙ\84 متوقف شده را دارد، درخواست کنید تا شرایط را قبل از بارگذاری مجدد بررسی کند.',
+'file-deleted-duplicate-notitle' => 'یک پرونده یکسان بااین پرونده قبلاً حذف شده است و عنوان متوقف شده‌است.
+Ø´Ù\85ا Ø¨Ø§Û\8cد Ø§Ø² Ú©Ø³Û\8c Ú©Ù\87 Ø¯Ø³ØªØ±Ø³Û\8c Ù\85شاÙ\87دÙ\87Ù\94 Ù¾Ø±Ù\88Ù\86دÙ\87 متوقف شده را دارد، درخواست کنید تا شرایط را قبل از بارگذاری مجدد بررسی کند.',
 'uploadwarning' => 'هشدار بارگذاری',
 'uploadwarning-text' => 'لطفاً توضیحات پرونده را در زیر تغییر دهید و دوباره تلاش کنید.',
 'savefile' => 'ذخیرهٔ پرونده',
@@ -2029,6 +2046,8 @@ $1",
 'php-uploaddisabledtext' => 'بارگذاری پرونده‌های پی‌اچ‌پی غیرفعال است.
 لطفاً تنظیمات file_uploads را بررسی کنید.',
 'uploadscripted' => 'این صفحه حاوی کد اچ‌تی‌ام‌ال یا اسکریپتی است که ممکن است به‌نادرست توسط مرورگر وب تفسیر شود.',
+'uploadscriptednamespace' => "این پوشه اس‌وی‌جی شامل فضای نام غیرقانونی '$1' است",
+'uploadinvalidxml' => 'XML در پروندهٔ بارگذاری‌شده نمی‌تواند تجزیه شود.',
 'uploadvirus' => 'این پرونده ویروس دارد!
 جزئیات : $1',
 'uploadjava' => 'این پرونده یک پرونده زیپ است که حاوی پرونده‌ای از نوع ‎‎.class جاوا است.
@@ -2231,7 +2250,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'shared-repo-from' => 'از $1',
 'shared-repo' => 'یک مخزن مشترک',
 'shared-repo-name-wikimediacommons' => 'ویکی‌انبار',
-'upload-disallowed-here' => 'Ù\85تاسÙ\81اÙ\86Ù\87 Ø´Ù\85ا Ù\86Ù\85Û\8c توانید این پرونده را بازنویس کنید.',
+'upload-disallowed-here' => 'Ù\85تأسÙ\81اÙ\86Ù\87 Ø´Ù\85ا Ù\86Ù\85Û\8câ\80\8cتوانید این پرونده را بازنویس کنید.',
 
 # File reversion
 'filerevert' => 'واگردانی $1',
@@ -2390,10 +2409,20 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'deadendpagestext' => 'صفحه‌های زیر به هیچ صفحهٔ دیگری در {{SITENAME}} پیوند ندارند.',
 'protectedpages' => 'صفحه‌های محافظت‌شده',
 'protectedpages-indef' => 'فقط محافظت‌های بی‌پایان',
+'protectedpages-summary' => 'در این صفحه فهرست صفحات موجود است که در حال حاضر محافظت شده اند. برای فهرست عنوان‌هایی که از ایجاد محافظت شده‌اند، به [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] مراجعه کنید.',
 'protectedpages-cascade' => 'فقط محافظت‌های آبشاری',
 'protectedpages-noredirect' => 'پنهان‌کردن تغییر مسیرها',
 'protectedpagesempty' => 'در حال حاضر هیچ‌صفحه‌ای محافظت نشده‌است.',
+'protectedpages-timestamp' => 'برچسب زمان',
+'protectedpages-page' => 'صفحه',
+'protectedpages-expiry' => 'انقضا',
+'protectedpages-performer' => 'در حال حفاظت از کاربر',
+'protectedpages-params' => 'پارامترهای حفاظت',
+'protectedpages-reason' => 'دلیل',
+'protectedpages-unknown-timestamp' => 'ناشناس',
+'protectedpages-unknown-performer' => 'کاربر ناشناس',
 'protectedtitles' => 'عنوان‌های محافظت‌شده',
+'protectedtitles-summary' => 'این صفحه فهرست صفحات موجود است که در حال حاضر محافظت از ساخت شده‌اند. برای فهرست عنوان‌هایی که محافظت از ویرایش شده‌اند، به [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] مراجعه کنید.',
 'protectedtitlesempty' => 'در حال حاضر هیچ عنوانی با این پارامترها محافظت نشده‌است.',
 'listusers' => 'فهرست کاربران',
 'listusers-editsonly' => 'فقط کاربرانی که ویرایش دارند را نشان بده',
@@ -2520,7 +2549,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'mailnologin' => 'نشانی‌ای از فرستنده موجود نیست',
 'mailnologintext' => 'برای فرستادن رایانامه به کاربران دیگر باید [[Special:UserLogin|به سامانه وارد شوید]] و نشانی رایانامهٔ معتبری در [[Special:Preferences|ترجیحات]] خود داشته باشید.',
 'emailuser' => 'فرستادن نامه به این کاربر',
-'emailuser-title-target' => 'اÛ\8cÙ\85Û\8cÙ\84 Ø§Û\8cÙ\86 {{GENDER:$1| کاربر}}',
+'emailuser-title-target' => 'راÛ\8cاÙ\86اÙ\85Ù\87 Ø¨Ù\87 {{GENDER:$1|کاربر}}',
 'emailuser-title-notarget' => 'رایانامه به کاربر',
 'emailpage' => 'رایانامه به کاربر',
 'emailpagetext' => 'شما می‌توانید از فرم زیر برای ارسال یک رایانامه به این {{GENDER:$1|کاربر}} استفاده کنید.
@@ -2615,7 +2644,7 @@ $PAGEINTRO $NEWPAGE
 نامه: $PAGEEDITOR_EMAIL
 ویکی: $PAGEEDITOR_WIKI
 
-تا هنگامی که به صفحه سر نزده‌اید، در صورت رخ‌دادنِ احتمالیِ فعالیت بیشتر، تا زمانی که در با کاربریتان در سیستم هستید، اعلانیه‌ای برای شما فرستاده نخواهد شد.
+تا هنگامی که به صفحه سر نزده‌اید، در صورت رخ‌دادنِ احتمالیِ فعالیت بیشتر، تا زمانی که در با کاربریتان در سامانه هستید، اعلانیه‌ای برای شما فرستاده نخواهد شد.
 شما همچنین می‌توانید در صفحهٔ پی‌گیری‌های خود پرچم‌های مربوط به آگاهی‌رسانی را صفر کنید همچنین می‌توانید پرچم‌های آگاهی‌سازی را بازنشانی کنید.
 
 دوستدار شما، سامانهٔ آگاهی‌رسانی {{SITENAME}}
@@ -2668,7 +2697,7 @@ $PAGEINTRO $NEWPAGE
 'delete-warning-toobig' => 'این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است.
 حذف آن ممکن است که عملکرد پایگاه دادهٔ {{SITENAME}} را مختل کند;
 با احتیاط ادامه دهید.',
-'deleting-backlinks-warning' => "''' هشدار:''' صفحات دیگر پیوند یا تراگنجایش به صفحه شما  برای حذف هستند.",
+'deleting-backlinks-warning' => "''' هشدار:''' پیوند [[Special:WhatLinksHere/{{FULLPAGENAME}}|صفحات دیگر]] یا تراگنجایش صفحهٔ شما برای حذف.",
 
 # Rollback
 'rollback' => 'واگردانی ویرایش‌ها',
@@ -2850,8 +2879,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'این نشانی آی‌پی در حال حاضر بسته است.
 آخرین سیاههٔ بسته شدن در زیر آمده‌است:',
 'sp-contributions-search' => 'جستجوی مشارکت‌ها',
+'sp-contributions-suppresslog' => 'کمک‌های کاربر متوقف شده',
 'sp-contributions-username' => 'نشانی آی‌پی یا نام کاربری:',
 'sp-contributions-toponly' => 'فقط ویرایش‌هایی که آخرین نسخه‌اند نمایش داده شود',
+'sp-contributions-newonly' => 'فقط نمایش ویرایش‌هایی که تولید‌های صفحه هستند',
 'sp-contributions-submit' => 'جستجو',
 
 # What links here
@@ -2954,7 +2985,7 @@ $1',
 'contribslink' => 'مشارکت‌ها',
 'emaillink' => 'ارسال رایانامه',
 'autoblocker' => 'به طور خودکار بسته شد چون آی‌پی شما به تازگی توسط کاربر «[[User:$1|$1]]» استفاده شده‌است.
-دلیل قطع دسترسی $1 چنین است: «$2»',
+دلیل قطع دسترسی $1 چنین است "$2"',
 'blocklogpage' => 'سیاههٔ بسته‌شدن‌ها',
 'blocklog-showlog' => 'دسترسی این کاربر در گذشته بسته شده‌است.
 سیاههٔ قطع دسترسی در زیر نمایش یافته است:',
@@ -2993,7 +3024,7 @@ $1',
 'sorbs_create_account_reason' => 'نشانی آی‌پی شما توسط DNSBL مورد استفاده {{SITENAME}} به عنوان یک پروکسی باز گزارش شده‌است.
 شما اجازهٔ ساختن حساب کاربری ندارید.',
 'xffblockreason' => 'نشانی آی‌پی در X-Forwarded-For header موجود است و پروکسی شما یا سروری که از آن استفاده می‌کنید بسته‌شده‌است. دلیل بسته‌شدن: $1',
-'cant-see-hidden-user' => 'کاربری که می‌خواهید ببندید قبلاً بسته شده و پنهان گردیده است. چون شما دسترسی پنهان کردن کاربران را ندارید، نمی‌توانید قطع دسترسی کاربر را ببینید یا ویرایش کنید.',
+'cant-see-hidden-user' => 'کاربری که می‌خواهید ببندید قبلاً بسته شده و پنهان گردیده‌است. چون شما دسترسی پنهان‌کردن کاربران را ندارید، نمی‌توانید قطع دسترسی کاربر را ببینید یا ویرایش کنید.',
 'ipbblocked' => 'شما نمی‌توانید دسترسی دیگر کاربران را ببندید یا باز کنید زیرا دسترسی خودتان بسته است.',
 'ipbnounblockself' => 'شما مجاز به باز کردن دسترسی خود نیستید.',
 
@@ -3166,6 +3197,7 @@ $2',
 'thumbnail_image-type' => 'تصویر از نوع پشتیبانی نشده',
 'thumbnail_gd-library' => 'تنظیمات ناقص کتابخانهٔ GD: عملکرد $1 وجود ندارد',
 'thumbnail_image-missing' => 'پرونده به نظر گم شده‌است: $1',
+'thumbnail_image-failure-limit' => 'تلاش‌های ناموفق اخیر بسیاری ($1 یا بیشتر) برای ارائهٔ این تصویر کوچک وجود داشته‌ است. لطفأ بعداً دوباره تلاش کنید.',
 
 # Special:Import
 'import' => 'درون‌ریزی صفحه‌ها',
@@ -3340,7 +3372,7 @@ $2',
 
 # Info page
 'pageinfo-title' => 'اطلاعات در مورد «$1»',
-'pageinfo-not-current' => 'Ù\85تاسفانه تهیه اطلاعات ویرایش‌های قدیمی غیرممکن است.',
+'pageinfo-not-current' => 'Ù\85تأسفانه تهیه اطلاعات ویرایش‌های قدیمی غیرممکن است.',
 'pageinfo-header-basic' => 'اطلاعات اولیه',
 'pageinfo-header-edits' => 'ویرایش تاریخچه',
 'pageinfo-header-restrictions' => 'حفاظت از صفحه',
@@ -3917,7 +3949,7 @@ $1',
 
 # Email address confirmation
 'confirmemail' => 'تأیید نشانی رایانامه',
-'confirmemail_noemail' => 'شما در صفحهٔ [[Special:Preferences|ترجیحات کاربری]] خود نشانی رایانامه معتبری وارد نکرده‌اید.',
+'confirmemail_noemail' => 'شما در صفحهٔ [[Special:Preferences|ترجیحات کاربری]] خود نشانی رایانامهٔ معتبری وارد نکرده‌اید.',
 'confirmemail_text' => 'این ویکی شما را ملزم به تأیید اعتبار رایانامه خود، پیش از استفاده از خدمات رایانامه در اینجا می‌کند. دکمهٔ زیرین را فعال کنید تا نامهٔ تأییدی به نشانی رایانامهٔ شما فرستاده شود. این نامه دربردارندهٔ پیوندی خواهد بود که حاوی یک کد است. پیوند را در مرورگر خود بار کنید (اجرا) کنید تا اعتبار نشانی رایانامهٔ شما تایید شود.',
 'confirmemail_pending' => 'یک کد تأییدی پیشتر برای شما به صورت نامه فرستاده شده‌است. اگر همین اواخر حساب خود را باز کرده‌اید شاید بد نباشد که پیش از درخواست یک کد جدید چند دقیقه درنگ کنید تا شاید نامهٔ قبلی برسد.',
 'confirmemail_send' => 'پُست‌کردن یک کد تأیید',
@@ -4003,7 +4035,7 @@ $5
 'semicolon-separator' => '؛&#32;',
 'comma-separator' => '،&#32;',
 'percent' => '$1٪',
-'quotation-marks' => '$1',
+'quotation-marks' => '«$1»',
 
 # Multipage image navigation
 'imgmultipageprev' => '&rarr; صفحهٔ پیشین',
@@ -4330,7 +4362,7 @@ $5
 'logentry-newusers-newusers' => 'حساب کاربری $1 {{GENDER:$2|ایجاد شد}}',
 'logentry-newusers-create' => 'حساب کاربری $1 {{GENDER:$2|ایجاد شد}}',
 'logentry-newusers-create2' => 'حساب کاربری $3 توسط $1 {{GENDER:$2|ایجاد شد}}',
-'logentry-newusers-byemail' => 'حساب کاربری  $3  توسط $1 {{GENDER:$2|ایجاد شد}} و رمز عبور به وسیلهٔ ایمیل ارسال شد',
+'logentry-newusers-byemail' => 'حساب کاربری $3 توسط $1 {{GENDER:$2|ایجاد شد}} و رمز عبور به‌وسیلهٔ رایانامه ارسال شد',
 'logentry-newusers-autocreate' => 'حساب $1  به شکل خودکار {{GENDER:$2|ایجاد شد}}',
 'logentry-rights-rights' => '$1 عضویت $3 را از گروه $4 به $5 {{GENDER:$2|تغییر داد}}',
 'logentry-rights-rights-legacy' => '$1 گروه عضویت $3 را {{GENDER:$2|تغییر داد}}',
@@ -4443,7 +4475,4 @@ $5
 'expand_templates_generate_rawhtml' => 'نمایش اچ‌تی‌ام‌ال خام',
 'expand_templates_preview' => 'پیش‌نمایش',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
-'uploadinvalidxml' => 'XML در پروندهٔ بارگذاری‌شده نمی‌تواند تجزیه شود.',
 );
index 034cc40..29cf006 100644 (file)
@@ -21,7 +21,6 @@ $namespaceGenderAliases = array();
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Diidtol jokke',
-'tog-justify' => 'Fonndito lelnanɗe',
 'tog-hideminor' => 'Duuɗ taƴtanɗe pamare e bayle cakkitiiɗe',
 'tog-hidepatrolled' => 'Suuɗ taƴtanɗe deenaaɗe ɗee e bayle cakkitiiɗe',
 'tog-newpageshidepatrolled' => 'Suuɗ kelle deenaaɗe e doggol kelle kese',
index a8d101a..94ab0b3 100644 (file)
@@ -356,7 +356,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Lähetä minulle kopio MediaWikin kautta lähetetyistä sähköposteista',
 'tog-diffonly' => 'Älä näytä sivun sisältöä eroavaisuusvertailun alapuolella',
 'tog-showhiddencats' => 'Näytä piilotetut luokat',
-'tog-noconvertlink' => 'Älä muunna linkkien otsikoita toiseen kirjoitusjärjestelmään',
 'tog-norollbackdiff' => 'Älä näytä eroavaisuuksia, kun olet palauttanut muokkauksen palauta-työkalulla',
 'tog-useeditwarning' => 'Varoita minua, kun poistun muokkaussivulta tallentamatta muutoksia',
 'tog-prefershttps' => 'Käytä aina suojattua yhteyttä, kun olet kirjautunut sisään',
@@ -445,7 +444,7 @@ $messages = array(
 'hidden-categories' => '{{PLURAL:$1|Piilotettu luokka|Piilotetut luokat}}',
 'hidden-category-category' => 'Piilotetut luokat',
 'category-subcat-count' => '{{PLURAL:$2|Tässä luokassa on seuraava alaluokka.|{{PLURAL:$1|Seuraava alaluokka kuuluu|Seuraavat $1 alaluokkaa kuuluvat}} tähän luokkaan. Alaluokkien kokonaismäärä luokassa on $2.}}',
-'category-subcat-count-limited' => 'Tässä luokassa on {{PLURAL:$1|yksi alaluokka|$1 alaluokkaa}}.',
+'category-subcat-count-limited' => 'Tässä luokassa on {{PLURAL:$1|yksi alaluokka|seuraavat $1 alaluokkaa}}.',
 'category-article-count' => '{{PLURAL:$2|Tässä luokassa on seuraava sivu.|{{PLURAL:$1|Seuraava sivu kuuluu|Seuraavat $1 sivua kuuluvat}} tähän luokkaan. Sivujen kokonaismäärä luokassa on $2.}}',
 'category-article-count-limited' => '{{PLURAL:$1|Tämä sivu kuuluu|Nämä $1 sivua kuuluvat}} nykyiseen luokkaan.',
 'category-file-count' => '{{PLURAL:$2|Tässä luokassa on seuraava tiedosto.|{{PLURAL:$1|Seuraava tiedosto kuuluu|Seuraavat $1 tiedostoa kuuluvat}} tähän luokkaan. Tiedostoja luokassa on yhteensä $2.}}',
@@ -483,7 +482,6 @@ $messages = array(
 'vector-action-protect' => 'Suojaa',
 'vector-action-undelete' => 'Palauta',
 'vector-action-unprotect' => 'Muuta suojausta',
-'vector-simplesearch-preference' => 'Ota käyttöön yksinkertaistettu hakupalkki (vain Vector-ulkoasu)',
 'vector-view-create' => 'Luo',
 'vector-view-edit' => 'Muokkaa',
 'vector-view-history' => 'Näytä historia',
@@ -596,7 +594,7 @@ $1',
 'youhavenewmessagesmulti' => 'Sinulla on uusia viestejä sivuilla $1',
 'editsection' => 'muokkaa',
 'editold' => 'muokkaa',
-'viewsourceold' => 'näytä lähdekoodi',
+'viewsourceold' => 'näytä wikiteksti',
 'editlink' => 'muokkaa',
 'viewsourcelink' => 'näytä lähdekoodi',
 'editsectionhint' => 'Muokkaa osiota $1',
@@ -768,8 +766,6 @@ Huomaa, että jotkut sivut saattavat näkyä edelleen kuin olisit kirjautunut si
 'gotaccountlink' => 'kirjautua sisään',
 'userlogin-resetlink' => 'Unohditko salasanasi?',
 'userlogin-resetpassword-link' => 'Unohditko salasanasi?',
-'helplogin-url' => 'Help:Sisäänkirjautuminen',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Auta sisäänkirjautumisessa]]',
 'userlogin-loggedin' => 'Olet jo kirjautunut sisään tunnuksella {{GENDER:$1|$1}}.
 Käytä alla olevaa lomaketta kirjautuaksesi sisään toisena käyttäjänä.',
 'userlogin-createanother' => 'Luo toinen käyttäjätunnus',
@@ -854,6 +850,10 @@ Odota $1 ennen kuin yrität uudelleen.',
 'suspicious-userlogout' => 'Pyyntösi kirjautua ulos evättiin, koska se näytti rikkinäisen selaimen tai välimuistipalvelimen lähettämältä.',
 'createacct-another-realname-tip' => 'Vapaaehtoinen.
 Nimesi näytetään käyttäjätunnuksesi sijasta sivun tekijäluettelossa.',
+'pt-login' => 'Kirjaudu sisään',
+'pt-login-button' => 'Kirjaudu sisään',
+'pt-createaccount' => 'Luo tunnus',
+'pt-userlogout' => 'Kirjaudu ulos',
 
 # Email sending
 'php-mail-error-unknown' => 'Tuntematon virhe PHP:n mail()-funktiossa',
@@ -862,7 +862,7 @@ Nimesi näytetään käyttäjätunnuksesi sijasta sivun tekijäluettelossa.',
 
 # Change password dialog
 'changepassword' => 'Salasanan vaihto',
-'resetpass_announce' => 'Kirjauduit sisään sähköpostitse lähetetyllä väliaikaissalasanalla. Päätä sisäänkirjautuminen asettamalla uusi salasana.',
+'resetpass_announce' => 'Jotta sisäänkirjautuminen onnistuu, sinun pitää asettaa uusi salasana.',
 'resetpass_text' => '<!-- Lisää tekstiä tähän -->',
 'resetpass_header' => 'Muuta tunnuksen salasana',
 'oldpassword' => 'Vanha salasana:',
@@ -878,8 +878,13 @@ Odota $1 ennen kuin yrität uudelleen.',
 'resetpass-submit-cancel' => 'Peruuta',
 'resetpass-wrong-oldpass' => 'Virheellinen väliaikainen tai nykyinen salasana.
 Olet saattanut jo onnistuneesti vaihtaa salasanasi tai pyytää uutta väliaikaista salasanaa.',
+'resetpass-recycled' => 'Sinun täytyy valita uudeksi salasanaksi jokin muu kuin nykyinen salasanasi.',
+'resetpass-temp-emailed' => 'Olet kirjautunut sisään väliaikaisella sähköpostitse toimitetulla koodilla.
+Jotta pääset kirjautumaan sisään kunnolla, sinun on nyt asetettava uusi salasana tässä:',
 'resetpass-temp-password' => 'Väliaikainen salasana:',
 'resetpass-abort-generic' => 'Laajennus keskeytti salasanan vaihdon.',
+'resetpass-expired' => 'Salasanasi on vanhentunut. Valitse uusi salasana, jotta pääset kirjautumaan sisään.',
+'resetpass-expired-soft' => 'Salasanasi on vanhentunut ja se pitää uudistaa. Valitse uusi salasana nyt tai paina "{{int:resetpass-submit-cancel}}", niin voit uudistaa salasanan myöhemmin.',
 
 # Special:PasswordReset
 'passwordreset' => 'Salasanan uudistus',
@@ -1134,8 +1139,9 @@ Se on jo olemassa.',
 'invalid-content-data' => 'Virheellinen sisältö',
 'content-not-allowed-here' => 'Sivun [[$2]] sisältö ei voi olla tyyppiä $1.',
 'editwarning-warning' => 'Tältä sivulta poistuminen saattaa aiheuttaa kaikkien tekemiesi muutosten katoamisen.
-Jos olet kirjautuneena sisään, voit poistaa tämän varoituksen käytöstä asetuksissa osiossa "Muokkaus".',
+Jos olet kirjautunut sisään, voit poistaa tämän varoituksen käytöstä omien asetuksien osiossa "{{int:prefs-editing}}".',
 'editpage-notsupportedcontentformat-title' => 'Sisällön muotoa ei tueta',
+'editpage-notsupportedcontentformat-text' => 'Sisällön muotoa $1 ei tueta sisältömallilla $2.',
 
 # Content models
 'content-model-wikitext' => 'wikiteksti',
@@ -1169,6 +1175,7 @@ Nämä muuttujat on jätetty käsittelemättä.",
 Varmista alla olevasta vertailusta, että haluat saada aikaan tämän lopputuloksen, ja sen jälkeen tallenna alla näkyvät muutokset.',
 'undo-failure' => 'Muokkausta ei voi kumota välissä olevien ristiriitaisten muutosten vuoksi.',
 'undo-norev' => 'Muokkausta ei voida kumota, koska sitä ei ole olemassa tai se on poistettu.',
+'undo-nochange' => 'Tämä muokkaus näyttää olevan jo kumottu.',
 'undo-summary' => 'Kumottu muokkaus $1, jonka teki [[Special:Contributions/$2|$2]] ([[User talk:$2|keskustelu]])',
 'undo-summary-username-hidden' => 'Kumottu muokkaus $1, jonka on tehnyt piilotettu käyttäjä',
 
@@ -1253,8 +1260,6 @@ Voit silti nähdä tämän muutoksen. Lisätietoja löytyy [{{fullurl:{{#Special
 'revdelete-show-file-submit' => 'Kyllä',
 'revdelete-selected' => "'''{{PLURAL:$2|Valittu versio|Valitut versiot}} sivusta [[:$1]]'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Valittu lokimerkintä|Valitut lokimerkinnät}}:'''",
-'revdelete-text' => "'''Poistetut versiot ja lokitapahtumat näkyvät edelleen sivun historiassa ja lokeissa, mutta osa niiden sisällöstä ei ole julkisesti saatavilla.'''
-Muut ylläpitäjät {{GRAMMAR:inessive|{{SITENAME}}}} voivat silti tarkastella piilotettua sisältöä, ja he voivat palauttaa sen näkyviin tämän käyttöliittymän kautta, ellei tätä ole erikseen rajoitettu.",
 'revdelete-confirm' => 'Varmista, että haluat tehdä tämän – ymmärrät seuraukset ja teet tämän [[{{MediaWiki:Policy-url}}|käytäntöjen]] mukaisesti.',
 'revdelete-suppress-text' => "Häivytystä pitäisi käyttää '''vain''' seuraavissa tapauksissa:
 * Mahdollisesti henkilön kunniaa loukkaavia tietoja
@@ -1348,6 +1353,8 @@ Uuden ja vanhan sivun muutoksien pitää muodostaa jatkumo – ne eivät saa men
 'showhideselectedversions' => 'Näytä tai piilota valitut versiot',
 'editundo' => 'kumoa',
 'diff-empty' => '(ei eroavaisuuksia)',
+'diff-multi-sameuser' => '({{PLURAL:$1|Yhtä välissä olevaa versiota|$1 välissä olevaa versiota}} samalta käyttäjältä ei näytetä)',
+'diff-multi-otherusers' => '({{PLURAL:$1|Yhtä välissä olevaa versiota|$1 välissä olevaa versiota}} {{PLURAL:$2|toisen käyttäjän tekemänä|$2 käyttäjän tekeminä}} ei näytetä)',
 'diff-multi-manyusers' => '(Versioiden välissä on {{PLURAL:$1|yksi muu muokkaus|$1 muuta muokkausta, jotka on tehnyt {{PLURAL:$2|yksi käyttäjä|yli $2 eri käyttäjää}}}}.)',
 'difference-missing-revision' => '{{PLURAL:$2|Yhtä versiota|$2 versiota}} tästä vertailusta ($1) {{PLURAL:$2|ei}} löytynyt.
 
@@ -1370,7 +1377,8 @@ Lisätietoja löytyy [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 
 $1 {{int:pipe-separator}} $2',
 'searchmenu-exists' => "'''Tässä wikissä on sivu nimellä [[:$1]].'''",
-'searchmenu-new' => "'''Luo sivu ''[[:$1]]'' tähän wikiin.'''",
+'searchmenu-new' => '<strong>Luo sivu "[[:$1]]" tähän wikiin.</strong> {{PLURAL:$2|0=|Katso myös sivua, joka löytyi hakutoiminnolla.
+|Katso myös hakutuloksia.}}',
 'searchprofile-articles' => 'Sisältösivut',
 'searchprofile-project' => 'Ohje- ja projektisivut',
 'searchprofile-images' => 'Kuvat ja tiedostot',
@@ -1395,7 +1403,8 @@ $1 {{int:pipe-separator}} $2',
 'searcheverything-enable' => 'Hae kaikista nimiavaruuksista',
 'searchrelated' => 'samankaltainen',
 'searchall' => 'kaikki',
-'showingresults' => "{{PLURAL:$1|'''Yksi''' tulos|'''$1''' tulosta}} tuloksesta '''$2''' alkaen.",
+'showingresults' => '{{PLURAL:$1|<strong>Yksi</strong> tulos|<strong>$1</strong> tulosta}} tuloksesta <strong>$2</strong> alkaen.',
+'showingresultsinrange' => 'Alla näytetään {{PLURAL:$1|<strong>1</strong> tulos|<strong>$1</strong> tulosta}} väliltä <strong>$2</strong> – <strong>$3</strong>.',
 'showingresultsnum' => "Alla on {{PLURAL:$3|'''Yksi''' hakutulos|'''$3''' hakutulosta}} alkaen '''$2.''' tuloksesta.",
 'showingresultsheader' => "{{PLURAL:$5|Tulokset '''$1'''–'''$3'''|Tulokset '''$1'''–'''$2''' kaikkiaan '''$3''' osuman joukosta}} haulle '''$4'''",
 'search-nonefound' => 'Hakusi ei tuottanut tulosta.',
@@ -1714,11 +1723,23 @@ Tämä tieto on julkinen.',
 'rcnotefrom' => 'Alla on muutokset <b>$2</b> lähtien. Enintään <b>$1</b> merkintää näytetään.',
 'rclistfrom' => 'Näytä uudet muutokset $1 alkaen',
 'rcshowhideminor' => '$1 pienet muutokset',
+'rcshowhideminor-show' => 'Näytä',
+'rcshowhideminor-hide' => 'Piilota',
 'rcshowhidebots' => '$1 botit',
+'rcshowhidebots-show' => 'Näytä',
+'rcshowhidebots-hide' => 'Piilota',
 'rcshowhideliu' => '$1 rekisteröityneet käyttäjät',
+'rcshowhideliu-show' => 'Näytä',
+'rcshowhideliu-hide' => 'Piilota',
 'rcshowhideanons' => '$1 anonyymit käyttäjät',
+'rcshowhideanons-show' => 'Näytä',
+'rcshowhideanons-hide' => 'Piilota',
 'rcshowhidepatr' => '$1 tarkastetut muutokset',
+'rcshowhidepatr-show' => 'Näytä',
+'rcshowhidepatr-hide' => 'Piilota',
 'rcshowhidemine' => '$1 omat muutokset',
+'rcshowhidemine-show' => 'Näytä',
+'rcshowhidemine-hide' => 'Piilota',
 'rclinks' => 'Näytä $1 tuoretta muutosta viimeisten $2 päivän ajalta.<br />$3',
 'diff' => 'ero',
 'hist' => 'historia',
@@ -1824,6 +1845,8 @@ Jos sinulla on tämän kuvan alkuperäinen versio, tallenna se. Muussa tapaukses
 'fileexists-shared-forbidden' => 'Samanniminen tiedosto on jo olemassa jaetussa mediavarastossa. Tallenna tiedosto jollakin toisella nimellä. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Tämä tiedosto on kaksoiskappale {{PLURAL:$1|seuraavasta tiedostosta|seuraavista tiedostoista}}:',
 'file-deleted-duplicate' => 'Tiedosto, joka on identtinen tämän tiedoston kanssa ([[:$1]]) on aiemmin poistettu. Katso kyseisen tiedoston poistoloki ennen kuin jatkat uudelleentallentamista.',
+'file-deleted-duplicate-notitle' => 'Tämän tiedoston kanssa samanlainen tiedosto on aikaisemmin poistettu ja tiedoston nimi on häivytetty.
+Sinun on syytä pyytää jotakuta häivytettyjen tietojen näkemiseen oikeutettua käyttäjää katsomaan tiedoston tiedot asian arvioimiseksi ennen kuin jatkat tiedoston lataamista tietokantaan.',
 'uploadwarning' => 'Tallennusvaroitus',
 'uploadwarning-text' => 'Muuta alla olevaa tiedostokuvausta ja yritä uudelleen.',
 'savefile' => 'Tallenna',
@@ -1835,6 +1858,8 @@ Jos sinulla on tämän kuvan alkuperäinen versio, tallenna se. Muussa tapaukses
 'uploaddisabledtext' => 'Tiedostojen tallennus on poistettu käytöstä.',
 'php-uploaddisabledtext' => 'PHP:n tiedostojen lähetys ei ole käytössä. Tarkista asetukset kohdasta file_uploads.',
 'uploadscripted' => 'Tämä tiedosto sisältää HTML-koodia tai skriptejä, jotka selain saattaa virheellisesti suorittaa.',
+'uploadscriptednamespace' => 'Tämä SVG-tiedosto sisältää nimiavaruuden ”$1”, joka ei ole sallittu.',
+'uploadinvalidxml' => 'Ladatun tiedoston XML-koodia ei voitu jäsentää kunnolla.',
 'uploadvirus' => 'Tiedosto sisältää viruksen. Tarkemmat tiedot: $1',
 'uploadjava' => 'Tämä tiedosto on ZIP-tiedosto, joka sisältää Java .class-tiedoston.
 Java-tiedostojen tallentaminen ei ole sallittua, sillä ne saattavat aiheuttaa tietoturvariskejä.',
@@ -2195,10 +2220,20 @@ Jokaisella rivillä on linkit ensimmäiseen ja toiseen ohjaukseen sekä toisen o
 'deadendpagestext' => 'Seuraavat sivut eivät linkitä muihin sivuihin wikissä.',
 'protectedpages' => 'Suojatut sivut',
 'protectedpages-indef' => 'Vain ikuisesti suojatut',
+'protectedpages-summary' => 'Tällä sivulla on lueteltu tällä hetkellä suojatut sivut. Nähdäksesi luettelon sivuista, jotka on suojattu uudelleenluonnilta, katso  [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Vain tarttuvasti suojatut',
 'protectedpages-noredirect' => 'Piilota ohjaukset',
 'protectedpagesempty' => 'Mitään sivuja ei ole tällä hetkellä suojattu näillä asetuksilla.',
+'protectedpages-timestamp' => 'Aikaleima',
+'protectedpages-page' => 'Sivu',
+'protectedpages-expiry' => 'Vanhentuu',
+'protectedpages-performer' => 'Suojauksen asettanut',
+'protectedpages-params' => 'Suojauksen asetukset',
+'protectedpages-reason' => 'Syy',
+'protectedpages-unknown-timestamp' => 'Tuntematon',
+'protectedpages-unknown-performer' => 'Tuntematon käyttäjä',
 'protectedtitles' => 'Suojatut sivunimet',
+'protectedtitles-summary' => 'Tällä sivulla on lueteltu ne sivut, jotka on tällä hetkellä suojattu uudelleenluonnilta. Nähdäksesi luettelon olemassaolevista suojatuista sivuista katso [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Ei suojattuja sivunimiä näillä hakuehdoilla.',
 'listusers' => 'Käyttäjälista',
 'listusers-editsonly' => 'Näytä vain käyttäjät, joilla on muokkauksia',
@@ -2384,6 +2419,7 @@ Tulevaisuudessa sivuun ja sen keskustelusivuun tehtävät muutokset listataan t
 'watchmethod-list' => 'tarkistetaan tarkkailtujen sivujen tuoreimmat muutokset',
 'watchlistcontains' => 'Tarkkailulistallasi on {{PLURAL:$1|yksi sivu|$1 sivua}}.',
 'iteminvalidname' => 'Sivun $1 kanssa oli ongelmia. Sivun nimessä on vikaa.',
+'wlnote2' => 'Alla on muutokset viimeisen {{PLURAL:$1|tunnin|<strong>$1</strong> tunnin}} ajalta $2 kello $3 asti.',
 'wlshowlast' => 'Näytä viimeiset $1 tuntia tai $2 päivää, $3',
 'watchlist-options' => 'Tarkkailulistan asetukset',
 
@@ -2537,8 +2573,8 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 ** Suuri näkyvyys',
 'protect-edit-reasonlist' => 'Muokkaa suojaussyitä',
 'protect-expiry-options' => '1 tunti:1 hour,1 päivä:1 day,1 viikko:1 week,2 viikkoa:2 weeks,1 kuukausi:1 month,3 kuukautta:3 months,6 kuukautta:6 months,1 vuosi:1 year,ikuinen:infinite',
-'restriction-type' => 'Rajoitus',
-'restriction-level' => 'Suojaus',
+'restriction-type' => 'Rajoitus:',
+'restriction-level' => 'Suojaustaso:',
 'minimum-size' => 'Vähimmäiskoko',
 'maximum-size' => 'Enimmäiskoko',
 'pagesize' => 'tavua',
@@ -2552,7 +2588,7 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 # Restriction levels
 'restriction-level-sysop' => 'täysin suojattu',
 'restriction-level-autoconfirmed' => 'osittaissuojattu',
-'restriction-level-all' => 'mikä tahansa suojaus',
+'restriction-level-all' => 'kaikki tasot',
 
 # Undelete
 'undelete' => 'Tarkastele poistettuja sivuja',
@@ -2636,8 +2672,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Tämä IP-osoite on tällä hetkellä estetty.
 Alla on viimeisin estolokin tapahtuma:',
 'sp-contributions-search' => 'Etsi muokkauksia',
+'sp-contributions-suppresslog' => 'häivytetyt käyttäjän muokkaukset',
 'sp-contributions-username' => 'IP-osoite tai käyttäjätunnus',
 'sp-contributions-toponly' => 'Näytä vain muokkaukset, jotka ovat viimeisimpiä versioita',
+'sp-contributions-newonly' => 'Näytä vain muokkaukset, joilla on luotu sivu',
 'sp-contributions-submit' => 'Hae',
 
 # What links here
@@ -2740,7 +2778,7 @@ Voimassa olevat estot näkyvät [[Special:BlockList|estolistasta]].',
 'contribslink' => 'muokkaukset',
 'emaillink' => 'lähetä sähköpostia',
 'autoblocker' => 'Olet automaattisesti estetty, koska jaat IP-osoitteen käyttäjän [[User:$1|$1]] kanssa. 
-Käyttäjän $1 saaman eston syy on: $2.',
+Käyttäjän $1 saaman eston syy on: "$2".',
 'blocklogpage' => 'Estoloki',
 'blocklog-showlog' => 'Tämä käyttäjä on ollut aiemmin estettynä.
 Alla on ote estolokista.',
@@ -2939,6 +2977,7 @@ $2',
 'thumbnail_image-type' => 'Kuvamuoto ei ole tuettu',
 'thumbnail_gd-library' => 'GD-kirjastoa ei ole asennettu oikein. Funktio $1 puuttuu.',
 'thumbnail_image-missing' => 'Tiedosto näyttää puuttuvan: $1',
+'thumbnail_image-failure-limit' => 'Tätä kuvaketta on yritetty tulkita epäonnistuneesti liian monta kertaa ($1 tai enemmän). Ole hyvä ja yritä myöhemmin uudelleen.',
 
 # Special:Import
 'import' => 'Tuo sivuja',
@@ -2974,7 +3013,7 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 'importuploaderrortemp' => 'Tuontitiedoston tallennus epäonnistui. Väliaikaistiedostojen kansio puuttuu.',
 'import-parse-failure' => 'XML-tuonti epäonnistui jäsennysvirheen takia.',
 'import-noarticle' => 'Ei sivua tuotavaksi!',
-'import-nonewrevisions' => 'Kaikki versiot on tuotu aiemmin.',
+'import-nonewrevisions' => 'Ei tuotu yhtään versiota, koska kaikki versiot ovat jo täällä tai ne on ohitettu virheiden vuoksi.',
 'xml-error-string' => '$1 rivillä $2, sarakkeessa $3 (tavu $4): $5',
 'import-upload' => 'Tallenna XML-tiedosto',
 'import-token-mismatch' => 'Istuntotiedot ovat kadonneet. Yritä uudelleen.',
@@ -2985,6 +3024,7 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 'import-error-special' => 'Sivua $1 ei tuotu, koska se kuuluu erityiseen nimiavaruuteen, joka ei salli sivuja.',
 'import-error-invalid' => 'Sivua $1 ei tuotu, koska sen nimi ei kelpaa.',
 'import-error-unserialize' => 'Versiota $2 sivusta $1 ei voida jakaa osiin. Version ilmoitettiin käyttävän sisältömallia $3 ja sarjoitusmuotoilua $4.',
+'import-error-bad-location' => 'Sivun versiota $2, joka käyttää sisällön mallia $3, ei voi tallettaa kohteeseen "$1" tässä wikissä, koska tuota mallia ei tueta kyseisellä sivulla.',
 'import-options-wrong' => '{{PLURAL:$2|Väärä asetus|Väärät asetukset}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Annettu perussivun nimi ei kelpaa.',
 'import-rootpage-nosubpage' => 'Annetun perussivun nimiavaruus "$1" ei salli alasivuja.',
@@ -4062,7 +4102,7 @@ Muussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi
 'feedback-error3' => 'Virhe: Ohjelmointirajapinta ei vastaa',
 'feedback-thanks' => 'Kiitos. Palautteesi on jätetty sivulle [$2 $1].',
 'feedback-close' => 'Valmis',
-'feedback-bugcheck' => 'Hyvä! Varmista, että ohjelmointivirhe ei vielä löydy [$1 tästä listasta].',
+'feedback-bugcheck' => 'Hyvä! Varmista vielä, että ohjelmointivirhettä ei löydy [$1 tunnettujen virheiden luettelosta].',
 'feedback-bugnew' => 'Olen varmistanut. Ilmoitan uuden ohjelmointivirheen',
 
 # Search suggestions
@@ -4106,7 +4146,7 @@ Muussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi
 'api-error-timeout' => 'Palvelin ei vastannut odotetun ajan kuluessa.',
 'api-error-unclassified' => 'Tapahtui tuntematon virhe.',
 'api-error-unknown-code' => 'Tuntematon virhe: $1.',
-'api-error-unknown-error' => 'Sisäinen virhe: Jotain meni vikaan kun tiedostosi yritettiin tallentaa.',
+'api-error-unknown-error' => 'Sisäinen virhe: Jotain meni vikaan kun tiedostoasi yritettiin tallentaa.',
 'api-error-unknown-warning' => 'Tuntematon varoitus: $1.',
 'api-error-unknownerror' => 'Tuntematon virhe: $1.',
 'api-error-uploaddisabled' => 'Tiedostojen tallentaminen ei ole käytössä.',
@@ -4141,10 +4181,11 @@ Muussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi
 
 # Special:ExpandTemplates
 'expandtemplates' => 'Mallineiden laajennus',
-'expand_templates_intro' => 'Tämä toimintosivu ottaa syötteekseen tekstiä ja laajentaa kaikki mallineet rekursiivisesti sekä jäsenninfunktiot, kuten
-<code><nowiki>{{</nowiki>#language:...}}</code>, ja -muuttujat, kuten
+'expand_templates_intro' => 'Tämä toimintosivu ottaa syötteeksi tekstiä ja laajentaa kaikki siinä olevat mallineet rekursiivisesti.
+Se myös laajentaa tuetut parserifunktiot kuten
+<code><nowiki>{{</nowiki>#language:...}}</code> ja -muuttujat kuten
 <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
-Toisin sanoen melkein kaiken, joka on kaksoisaaltosulkeiden sisällä.',
+Käytännössä se laajentaa melkein kaiken, joka on kaksoisaaltosulkeiden sisällä.',
 'expand_templates_title' => 'Otsikko (esimerkiksi muuttujaa {{FULLPAGENAME}} varten)',
 'expand_templates_input' => 'Teksti',
 'expand_templates_output' => 'Tulos',
index 2d43914..643b357 100644 (file)
@@ -16,7 +16,6 @@ $fallback = 'fi';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Linkitten alleviivaus',
-'tog-justify' => 'Tassaa kappalheet',
 'tog-hideminor' => 'Piilota pienet muutokset vereksen muutoksitten listasta',
 'tog-hidepatrolled' => 'Piilota tarkastetut muutokset vereksen muutoksitten listasta',
 'tog-newpageshidepatrolled' => 'Piilota tarkastetut sivut uusitten sivuitten listalta',
@@ -25,9 +24,7 @@ $messages = array(
 'tog-numberheadings' => 'Nymreeraa rypriikit',
 'tog-showtoolbar' => 'Näytä työneuvopalkki (JavaScript)',
 'tog-editondblclick' => 'Mookkaa sivuja kaksoisknapituksella (JavaScript)',
-'tog-editsection' => 'Aktiveeraa seksuuni mookkaus [mookkaus]-linkilä',
 'tog-editsectiononrightclick' => 'Aktiveeraa seksuuni mookkaus oikeapuolen klikkauksella seksuuni tittelhiin (JavaScript)',
-'tog-showtoc' => 'Näytä sisältölista (sivuile, joila on yli 3 rypriikkiä)',
 'tog-rememberpassword' => 'Muista minun lokkauksen tässä weppilukijassa (eninthään $1 {{PLURAL:$1|päivä|päivää}})',
 'tog-watchcreations' => 'Lissää sivut mitä luon valvontasivule',
 'tog-watchdefault' => 'Lissää sivut mitä mie mookkaan valvontasivule',
@@ -36,7 +33,6 @@ $messages = array(
 'tog-minordefault' => 'Markeeraa auttomaattisesti kaikki muutokset pieneks',
 'tog-previewontop' => 'Näytä esitarkastelu mookkauspaikan yläpuolela',
 'tog-previewonfirst' => 'Näytä esitarkastelu kun mookkaus alethaan',
-'tog-nocache' => 'Älä säästä sivuja weppilukijan välimuisthiin',
 'tog-enotifwatchlistpages' => 'Lähätä e-postipreivi mulle kun sivu minun valvontalistala on muutettu',
 'tog-enotifusertalkpages' => 'Lähätä sähköposti, kun käyttäjäsivun keskustelusivu muuttuu',
 'tog-enotifminoredits' => 'Lähätä epostieto pienistäki muutoksista',
@@ -130,7 +126,6 @@ $messages = array(
 'vector-action-protect' => 'Suojaa',
 'vector-action-undelete' => 'Pane takashiin',
 'vector-action-unprotect' => 'Muuta suojaa',
-'vector-simplesearch-preference' => 'Ota käythöön paranetut hakuehotukset (vain Vector-ulkoasu)',
 'vector-view-create' => 'Luo',
 'vector-view-edit' => 'Mookkaa',
 'vector-view-history' => 'Näytä histuuria',
@@ -331,7 +326,6 @@ Merkinät: (nyk.) = eroavaisuuet nykyisheen versuunhiin, (eel.) = eroavaisuuet e
 'lineno' => 'Rivi $1:',
 'compareselectedversions' => 'Vertaile valittuja sivu versuunia',
 'editundo' => 'kumota',
-'diff-multi' => '(Näytetyitten versuunitten välissä on {{PLURAL:$1|yks mookkaus|$1 versuunit, jokka on {{PLURAL:$2|yhen käyttäjän tekemiä|$2 eri käyttäjän tekemiä}}}}.)',
 
 # Search results
 'searchresults' => 'Hakutulokset',
@@ -387,7 +381,6 @@ Merkinät: (nyk.) = eroavaisuuet nykyisheen versuunhiin, (eel.) = eroavaisuuet e
 'recentchanges-label-minor' => 'Tämä on pieni muutos',
 'recentchanges-label-bot' => 'Tämän muutoksen teki botti',
 'recentchanges-label-unpatrolled' => 'Tätä muutosta ei ole vielä tarkistettu',
-'rcnote' => 'Alla on {{PLURAL:$1|yks muutos|$1 vereksimät muutokset}} {{PLURAL:$2|yhen päivän|$2 viimi päivän}} ajalta $4 kello $5 asti.',
 'rcnotefrom' => "Alla on muutokset '''$2'''lähtien. (korkeinthaans '''$1''' näytethään).",
 'rclistfrom' => 'Näytä uuet muutokset jälkhiin $1',
 'rcshowhideminor' => '$1 pienet muutokset',
index 5533ae7..c2d6d30 100644 (file)
@@ -274,7 +274,6 @@ $messages = array(
 'vector-action-protect' => 'Friða',
 'vector-action-undelete' => 'Endurstovna',
 'vector-action-unprotect' => 'Broyt verju',
-'vector-simplesearch-preference' => 'Ger lættari leititeig virknan (bert Vector útsjónd)',
 'vector-view-create' => 'Stovna',
 'vector-view-edit' => 'Rætta',
 'vector-view-history' => 'Vís søgu',
@@ -559,8 +558,6 @@ Gloym ikki at broyta tínar [[Special:Preferences|{{SITENAME}}-innstillingar]].'
 'gotaccountlink' => 'Rita inn',
 'userlogin-resetlink' => 'Hevur tú gloymt tínar logg inn upplýsingar',
 'userlogin-resetpassword-link' => 'Hevur tú gloymt títt loyniorð?',
-'helplogin-url' => 'Help:Innritan',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjálp til innritan]]',
 'userlogin-loggedin' => 'Tú ert longu innritað/ur sum {{GENDER:$1|$1}}.
 Nýt formularin niðanfyri fyri at rita inn sum ein annar brúkari.',
 'userlogin-createanother' => 'Stovna eina aðra kontu',
@@ -612,7 +609,7 @@ Eftirkanna um tú hevur stavað rætt, ella [[Special:UserLogin/signup|stovna ei
 'passwordtooshort' => 'Loyniorð mugu vera í minsta lagi {{PLURAL:$1|1 bókstav, tal, tekn|$1 bókstavir, tøl og tekn}}.',
 'password-name-match' => 'Loyniorðið hjá tær má vera annarleiðis enn títt brúkaranavn.',
 'password-login-forbidden' => 'Tað er ikki loyvt at brúka hetta brúkaranavnið og loyniorðið.',
-'mailmypassword' => 'Send mær eitt nýtt loyniorð við t-posti',
+'mailmypassword' => 'Nullstilla loyniorðið',
 'passwordremindertitle' => 'Nýtt fyribils loyniorð fyri {{SITENAME}}',
 'passwordremindertext' => 'Onkur (óivað tú, frá IP adressu $1) hevur umbiðið eitt nýtt loyniorð fyri {{SITENAME}}  $4. Eitt fyribils loyniorð fyri brúkara "$2" er nú gjørt og er sent til "$3". Um hetta var tað tú vildi, so mást tú rita inn og velja eitt nýtt loyniorð nú. 
 Títt fyribils loyniorð gongur út um {{PLURAL:$5|ein dag|$5 dagar}}.
@@ -673,6 +670,8 @@ Fyri at gera innritanina lidna, mást tú velja tær eitt nýtt loyniorð her:',
 'retypenew' => 'Skriva nýtt loyniorð umaftur:',
 'resetpass_submit' => 'Vel loyniorð og rita inn',
 'changepassword-success' => 'Títt loyniorð er nú broytt!',
+'changepassword-throttled' => 'Tú hevur roynt at rita inn ov nógvar ferðir nýliga.
+Vinarliga bíða $1 áðrenn tú roynir aftur.',
 'resetpass_forbidden' => 'Loyniorð kunnu ikki broytast',
 'resetpass-no-info' => 'Tú mást vera loggaður á fyri at fáa beinleiðis atgongd til hesa síðu.',
 'resetpass-submit-loggedin' => 'Broyt loyniorð',
@@ -685,7 +684,7 @@ Møguliga hevur tú longu broytt títt loyniorð ella biðið um eitt nýtt fyri
 # Special:PasswordReset
 'passwordreset' => 'Nullstilla loyniorðið',
 'passwordreset-text-one' => 'Útfyll henda teigin fyri at nullstilla títt loyniorð.',
-'passwordreset-text-many' => '{{PLURAL:$1|Útfyll ein av teigunum fyri at nullstilla títt loyniorð.}}',
+'passwordreset-text-many' => '{{PLURAL:$1|Útfyll í ein av teigunum fyri at móttaka eitt fyribils loyniorð við telduposti.}}',
 'passwordreset-legend' => 'Nulstilla loyniorðið',
 'passwordreset-disabled' => 'Tað ber ikki til at nullstilla loyniorðið á hesi wiki.',
 'passwordreset-emaildisabled' => 'Teldupost funksjónir eru óvirknar á hesi wiki.',
@@ -726,6 +725,8 @@ Fyribils loyniorð: $2',
 'changeemail-password' => 'Títt {{SITENAME}} loyniorð:',
 'changeemail-submit' => 'Broyt t-post',
 'changeemail-cancel' => 'Ógilda',
+'changeemail-throttled' => 'Tú hevur roynt at rita inn ov nógvar ferðir.
+Vinarliga bíða $1 áðrenn tú roynir aftur.',
 
 # Special:ResetTokens
 'resettokens' => 'Nullstilla lyklar',
@@ -950,7 +951,7 @@ Síðan er longu til.',
 'invalid-content-data' => 'Ógyldug innihalds dáta',
 'content-not-allowed-here' => '"$1" innihald er ikki loyvt á síðu [[$2]]',
 'editwarning-warning' => 'Um tú fert frá hesi síðuni, so kanst tú missa tær broytingar ið tú hevur gjørt.
-Um tú hevur ritað inn, so kanst tú sláa hesa ávaring frá í "Rættingar" partinum í tínum innstillingum.',
+Um tú hevur ritað inn, so kanst tú sláa hesa ávaring frá í "{{int:prefs-editing}}" partinum í tínum innstillingum.',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
@@ -1157,7 +1158,7 @@ Tryggja tær, at henda broyting fer at varðveita framhaldssøguna hjá síðuni
 'shown-title' => 'Vís $1 {{PLURAL:$1|úrslit|úrslit}} á hvørjari síðu',
 'viewprevnext' => 'Vís ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''Tað er longu ein síða sum eitur \"[[:\$1]]\" á hesi wiki.'''",
-'searchmenu-new' => "'''Stovna síðuna \"[[:\$1]]\" á hesi wiki!'''",
+'searchmenu-new' => '<strong>\'\'\'Stovna síðuna "[[:$1]]" á hesi wiki!</strong> {{PLURAL:$2|0=|Sí eisini síðuna sum varð funnin við tínari leiting.|Sí eisini leitiúrslitini ið funnin vóru.}}',
 'searchprofile-articles' => 'Innihaldssíður',
 'searchprofile-project' => 'Hjálpar og verkætlanar síður',
 'searchprofile-images' => 'Fjølmiðlar - multimedia',
@@ -1486,12 +1487,13 @@ Tín t-post adressa verður ikki avdúkað, tá aðrir brúkarir seta seg í sam
 'recentchanges-label-minor' => 'Hetta er ein lítil rætting',
 'recentchanges-label-bot' => 'Henda rætting varð gjørd av einum botti',
 'recentchanges-label-unpatrolled' => 'Henda rætting er ikki blivin eftirkannað enn',
+'recentchanges-legend-heading' => "'''Teknfrágreiðing:'''",
 'recentchanges-legend-newpage' => '(sí eisini [[Special:NewPages|yvirlit yvir nýggjar síður]])',
 'rcnotefrom' => "Niðanfyri standa broytingarnar síðani '''$2''', (upp til '''$1''' er sýndar).",
 'rclistfrom' => 'Sýn nýggjar broytingar byrjandi við $1',
 'rcshowhideminor' => '$1 minni rættingar',
 'rcshowhidebots' => '$1 bottar',
-'rcshowhideliu' => '$1 skrásettar brúkarar',
+'rcshowhideliu' => '$1 skrásettir brúkarar',
 'rcshowhideanons' => '$1 navnleysar brúkarar',
 'rcshowhidepatr' => '$1 eftirhugdar rættingar',
 'rcshowhidemine' => '$1 mínar rættingar',
@@ -2184,6 +2186,10 @@ Sí $2 fyri fulla skráseting av strikingum.',
 'delete-edit-reasonlist' => 'Rætta orsøkir til striking',
 'delete-toobig' => 'Henda síðan hevur eina langa rættingar søgu, meira enn $1 {{PLURAL:$1|versjón|versjónir}}. 
 Striking av slíkum síðum er avmarkað fyri at forða fyri at onkur av óvart kemur til at forstýra {{SITENAME}}.',
+'delete-warning-toobig' => 'Henda síðan hevur eina langa rættingarsøgu, yvir $1 {{PLURAL:$1|versjón|versjónir}}.
+Um tú slettar hana kann tað órógva virksemi hjá dátugrunninum {{SITENAME}};
+far varliga fram.',
+'deleting-backlinks-warning' => "'''Ávaring:''' Aðrar síður slóða til ella hava síðuna við, ið tú ert í ferð við at sletta.",
 
 # Rollback
 'rollback' => 'Rulla broytingar aftur',
@@ -2227,6 +2233,8 @@ Sí [[Special:ProtectedPages|listan fyri vardar síður]] fyri at síggja listan
 'protect-legend' => 'Vátta friðing',
 'protectcomment' => 'Orsøk:',
 'protectexpiry' => 'Gongur út:',
+'protect_expiry_invalid' => 'Útloypstíðin er ógyldug.',
+'protect_expiry_old' => 'Útgongutíðin er longu farin.',
 'protect-text' => "Her kanst tú síggja og broyta verjustøðuna fyri síðuna '''$1'''.",
 'protect-locked-blocked' => "Tú kanst ikki broyta verjustøðu á síðu, meðan tú ert sperrað/ur.
 Her er aktuella innstillingin hjá síðuni '''$1''':",
@@ -2432,7 +2440,7 @@ Sí [[Special:BlockList|sperringarlistan]] fyri at síggja allar sperringar.',
 'contribslink' => 'íkøst',
 'emaillink' => 'send teldupost',
 'autoblocker' => 'Sjálvvirkandi sperring tí at tín IP adressa nýliga er blivin brúkt av "[[User:$1|$1]]".
-Orsøkin ið varð nevnd fyri at sperra $1 er "\'\'$2\'\'"',
+Orsøkin ið varð nevnd fyri at sperra $1 er "$2"',
 'blocklogpage' => 'Bannagerðabók',
 'blocklog-showlog' => 'Hesin brúkarin hevur fyrr verið sperraður.
 Sperringarloggurin er vístur niðanfyri til kunningar:',
@@ -2594,6 +2602,7 @@ Vinarliga vitja [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisat
 'allmessages-prefix' => 'Filtrera eftir forstavilsi:',
 'allmessages-language' => 'Mál:',
 'allmessages-filter-submit' => 'Far',
+'allmessages-filter-translate' => 'Týð',
 
 # Thumbnails
 'thumbnail-more' => 'Víðka',
@@ -2608,6 +2617,7 @@ $2',
 'thumbnail_invalid_params' => 'Ógyldug thumbnail parametur',
 'thumbnail_dest_directory' => 'Tað bar ikki til at upprætta málmappu',
 'thumbnail_image-type' => 'Myndaslagið verður ikki stuðlað',
+'thumbnail_gd-library' => 'Ófullkomin GD bókasavns konfigurasjón: manglar funksjón $1',
 'thumbnail_image-missing' => 'Fílan sær út til at mangla: $1',
 
 # Special:Import
@@ -2639,7 +2649,7 @@ Goym hana á tínari teldu og legg hana so út her.",
 'importuploaderrorsize' => 'Útleggjan av innflutningsfílu miseydnaðist.
 Fílan er størri enn mest loyvda upload-støddin.',
 'import-noarticle' => 'Ongin síða at innflyta!',
-'import-nonewrevisions' => 'Allar versjónir eru longu innfluttar.',
+'import-nonewrevisions' => 'Ongar versjónir vóru innfluttar (allar vóru antin longu tilstaðar, ella koyrdar burtur orsakað av feilum).',
 'xml-error-string' => '$1 á linju $2, rekkju $3 (byte $4): $5',
 'import-upload' => 'Legg út XML dáta',
 'import-token-mismatch' => 'Misti setunardáta (sesjónsdáta).
@@ -2962,11 +2972,23 @@ Onnur metadáta verða fjald sum standard.
 
 'exif-meteringmode-0' => 'Ókent',
 'exif-meteringmode-1' => 'Miðal',
+'exif-meteringmode-255' => 'Annað',
 
+'exif-lightsource-0' => 'Ókent',
 'exif-lightsource-1' => 'Dagsljós',
+'exif-lightsource-2' => 'Ljósrør',
+'exif-lightsource-3' => 'Gløðilampa',
+'exif-lightsource-4' => 'Blits',
 'exif-lightsource-9' => 'Gott veður',
 'exif-lightsource-10' => 'Skýggjað veður',
 'exif-lightsource-11' => 'Skuggi',
+'exif-lightsource-12' => 'Dagsljós ljósrør (D 5700 – 7100K)',
+'exif-lightsource-13' => 'Dagshvítt ljósrør (N 4600 – 5400K)',
+'exif-lightsource-14' => 'Kalthvítt ljósrør (W 3900 – 4500K)',
+'exif-lightsource-15' => 'Hvítt ljósrør (WW 3200 – 3700K)',
+'exif-lightsource-17' => 'Standardljós A',
+'exif-lightsource-18' => 'Standardljós B',
+'exif-lightsource-19' => 'Standardljós C',
 
 'exif-scenecapturetype-1' => 'Landsskap',
 'exif-scenecapturetype-2' => 'Portrett',
@@ -3098,8 +3120,8 @@ Hendan váttanarkoda fer úr gildi tann $4.',
 'version-other' => 'Annað',
 'version-hooks' => 'Krókur',
 'version-hook-name' => 'Krókurnavn',
-'version-version' => '(Útgáva $1)',
-'version-license' => 'Lisensur',
+'version-version' => '(Versjón $1)',
+'version-license' => 'MediaWiki Lisensur',
 'version-poweredby-credits' => "Henda wiki verður rikin av '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'onnur',
 'version-poweredby-translators' => 'translatewiki.net týðarar',
index 367748e..e453ec5 100644 (file)
@@ -20,6 +20,7 @@
  * @author Crochet.david
  * @author Csisc
  * @author Damouns
+ * @author Darkdadaah
  * @author DavidL
  * @author Delhovlyn
  * @author Dereckson
  * @author Lucyin
  * @author Manohisoa
  * @author Mattho69
+ * @author Maxim21
+ * @author Maxime Corbin
  * @author McDutchie
  * @author Meithal
  * @author Metroitendo
+ * @author Momo50WM
  * @author Moyg
  * @author Nicolas NALLET
  * @author Nicolas Raoul
@@ -75,6 +79,7 @@
  * @author Nobody
  * @author Od1n
  * @author Omnipaedista
+ * @author Orlodrim
  * @author Peter17
  * @author PieRRoMaN
  * @author ProgVal
@@ -425,20 +430,20 @@ $messages = array(
 'tog-extendwatchlist' => 'Étendre la liste de suivi pour afficher toutes les modifications et pas uniquement les plus récentes',
 'tog-usenewrc' => 'Grouper les changements par page dans les modifications récentes et la liste de suivi (nécessite JavaScript)',
 'tog-numberheadings' => 'Numéroter automatiquement les titres de section',
-'tog-showtoolbar' => "Montrer la barre d'outils de modification (nécessite JavaScript)",
+'tog-showtoolbar' => "Afficher la barre d'outils de modification (nécessite JavaScript)",
 'tog-editondblclick' => 'Modifier des pages sur double-clic (nécessite JavaScript)',
 'tog-editsectiononrightclick' => 'Activer la modification de sections par clic droit sur les titres (nécessite JavaScript)',
-'tog-rememberpassword' => 'Se souvenir de mon identification avec ce navigateur (au maximum $1 {{PLURAL:$1|jour|jours}})',
+'tog-rememberpassword' => 'Me reconnecter automatiquement lors des prochaines visites avec ce navigateur (au maximum $1&nbsp;{{PLURAL:$1|jour|jours}})',
 'tog-watchcreations' => "Ajouter les pages que je crée et les fichiers que j'importe à ma liste de suivi",
 'tog-watchdefault' => 'Ajouter les pages et les fichiers que je modifie à ma liste de suivi',
 'tog-watchmoves' => 'Ajouter les pages et les fichiers que je renomme à ma liste de suivi',
 'tog-watchdeletion' => 'Ajouter les pages et les fichiers que je supprime à ma liste de suivi',
-'tog-minordefault' => 'Marquer mes modifications comme mineures par défaut',
+'tog-minordefault' => 'Marquer toutes mes modifications comme mineures par défaut',
 'tog-previewontop' => 'Afficher la prévisualisation au-dessus de la zone de modification',
 'tog-previewonfirst' => 'Afficher la prévisualisation lors de la première modification',
 'tog-enotifwatchlistpages' => "M'avertir par courriel lorsqu'une page ou un fichier de ma liste de suivi est modifiée",
 'tog-enotifusertalkpages' => "M'avertir par courriel si ma page de discussion est modifiée",
-'tog-enotifminoredits' => "M'avertir par courriel pour les modifications mineures de pages ou de fichiers également",
+'tog-enotifminoredits' => "M'avertir par courriel également lors des modifications mineures de pages ou de fichiers",
 'tog-enotifrevealaddr' => 'Afficher mon adresse de courriel dans les courriels de notification',
 'tog-shownumberswatching' => "Afficher le nombre d'utilisateurs qui suivent la page",
 'tog-oldsig' => 'Signature existante :',
@@ -454,10 +459,9 @@ $messages = array(
 'tog-ccmeonemails' => "M'envoyer une copie des courriels que j'envoie aux autres utilisateurs",
 'tog-diffonly' => 'Ne pas afficher le contenu des pages sous les diffs',
 'tog-showhiddencats' => 'Afficher les catégories cachées',
-'tog-noconvertlink' => 'Désactiver la conversion des titres',
 'tog-norollbackdiff' => "Ne pas afficher le diff lors d'une révocation",
 'tog-useeditwarning' => "M'avertir quand je quitte une page de modification sans publier les changements",
-'tog-prefershttps' => 'Toujours utiliser une connexion sécurisée en étant connecté(e)',
+'tog-prefershttps' => 'Toujours utiliser une connexion sécurisée en étant connecté',
 
 'underline-always' => 'Toujours',
 'underline-never' => 'Jamais',
@@ -467,8 +471,8 @@ $messages = array(
 'editfont-style' => 'Style de police de la zone de modification :',
 'editfont-default' => 'Police par défaut du navigateur',
 'editfont-monospace' => 'Police à chasse fixe',
-'editfont-sansserif' => 'Police sans empattement',
-'editfont-serif' => 'Police avec empattement',
+'editfont-sansserif' => 'Police sans-serif',
+'editfont-serif' => 'Police serif',
 
 # Dates
 'sunday' => 'dimanche',
@@ -478,13 +482,13 @@ $messages = array(
 'thursday' => 'jeudi',
 'friday' => 'vendredi',
 'saturday' => 'samedi',
-'sun' => 'dim',
-'mon' => 'lun',
-'tue' => 'mar',
-'wed' => 'mer',
-'thu' => 'jeu',
-'fri' => 'ven',
-'sat' => 'sam',
+'sun' => 'Dim.',
+'mon' => 'Lun.',
+'tue' => 'Mar.',
+'wed' => 'Mer.',
+'thu' => 'Jeu.',
+'fri' => 'Ven.',
+'sat' => 'Sam.',
 'january' => 'janvier',
 'february' => 'février',
 'march' => 'mars',
@@ -539,7 +543,7 @@ $messages = array(
 'category_header' => 'Pages dans la catégorie « $1 »',
 'subcategories' => 'Sous-catégories',
 'category-media-header' => 'Fichiers multimédias dans la catégorie « $1 »',
-'category-empty' => "''Cette catégorie ne contient aucune page, sous-catégorie ou fichier multimédia.''",
+'category-empty' => '<em>Cette catégorie ne contient aucune page, sous-catégorie ou fichier multimédia.</em>',
 'hidden-categories' => '{{PLURAL:$1|Catégorie cachée|Catégories cachées}}',
 'hidden-category-category' => 'Catégories cachées',
 'category-subcat-count' => 'Cette catégorie comprend {{PLURAL:$2|la sous-catégorie|$2 sous-catégories, dont {{PLURAL:$1|celle|les $1}}}} ci-dessous.',
@@ -581,7 +585,6 @@ $messages = array(
 'vector-action-protect' => 'Protéger',
 'vector-action-undelete' => 'Rétablir',
 'vector-action-unprotect' => 'Changer la protection',
-'vector-simplesearch-preference' => "Activer la barre de recherche simplifiée (seulement pour l'habillage Vector)",
 'vector-view-create' => 'Créer',
 'vector-view-edit' => 'Modifier',
 'vector-view-history' => "Afficher l'historique",
@@ -614,7 +617,7 @@ $messages = array(
 'delete' => 'Supprimer',
 'deletethispage' => 'Supprimer cette page',
 'undeletethispage' => 'Annuler la suppression de cette page',
-'undelete_short' => 'Restaurer $1 modification{{PLURAL:$1||s}}',
+'undelete_short' => 'Restaurer {{PLURAL:$1|une modification|$1 modifications}}',
 'viewdeleted_short' => 'Voir {{PLURAL:$1|une modification supprimée|$1 modifications supprimées}}',
 'protect' => 'Protéger',
 'protect_change' => 'modifier',
@@ -631,30 +634,30 @@ $messages = array(
 'talk' => 'Discussion',
 'views' => 'Affichages',
 'toolbox' => 'Outils',
-'userpage' => 'Page utilisateur',
-'projectpage' => 'Page méta',
+'userpage' => 'Voir la page utilisateur',
+'projectpage' => 'Voir la page du projet',
 'imagepage' => 'Voir la page du fichier',
 'mediawikipage' => 'Voir la page du message',
 'templatepage' => 'Voir la page du modèle',
 'viewhelppage' => "Voir la page d'aide",
 'categorypage' => 'Voir la page de catégorie',
-'viewtalkpage' => 'Page de discussion',
+'viewtalkpage' => 'Voir la page de discussion',
 'otherlanguages' => 'Autres langues',
 'redirectedfrom' => '(Redirigé depuis $1)',
 'redirectpagesub' => 'Page de redirection',
 'lastmodifiedat' => 'Dernière modification de cette page le $1 à $2.<br />',
-'viewcount' => 'Cette page a été consultée $1 fois.',
+'viewcount' => 'Cette page a été consultée {{PLURAL:$1|une fois|$1 fois}}.',
 'protectedpage' => 'Page protégée',
 'jumpto' => 'Aller à :',
-'jumptonavigation' => 'Navigation',
+'jumptonavigation' => 'navigation',
 'jumptosearch' => 'rechercher',
 'view-pool-error' => "Désolé, les serveurs sont surchargés en ce moment.
 Trop d'utilisateurs cherchent à consulter cette page.
 Veuillez attendre un moment avant de retenter l'accès à cette page.
 
 $1",
-'pool-timeout' => "Délai dépassé durant l'attente du verrou",
-'pool-queuefull' => 'La file de travail est pleine',
+'pool-timeout' => "Délai d'attente dépassé",
+'pool-queuefull' => "La file d'attente est pleine",
 'pool-errorunknown' => 'Erreur inconnue',
 
 # 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).
@@ -678,7 +681,7 @@ $1",
 
 'badaccess' => 'Erreur de permissions',
 'badaccess-group0' => 'Vous n’avez pas les droits suffisants pour réaliser l’action demandée.',
-'badaccess-groups' => 'L’action que vous essayez de réaliser n’est permise qu’aux utilisateurs {{PLURAL:$2|du groupe|des groupes}} : $1.',
+'badaccess-groups' => "L’action que vous essayez de réaliser n’est permise qu’aux utilisateurs {{PLURAL:$2|du groupe|d'un des groupes}} : $1.",
 
 'versionrequired' => 'Version $1 de MediaWiki nécessaire',
 'versionrequiredtext' => 'La version $1 de MediaWiki est nécessaire pour utiliser cette page. Consultez [[Special:Version|la page des versions]]',
@@ -815,7 +818,7 @@ Le motif avancé est « ''$2'' ».",
 L'administrateur qui l'a verrouillé a fourni ce motif : « $3 ».",
 'invalidtitle-knownnamespace' => "Titre invalide avec l'espace de noms « $2 » et l'intitulé « $3 »",
 'invalidtitle-unknownnamespace' => "Titre invalide avec le numéro d'espace de noms $1 et l'intitulé « $2 » inconnus",
-'exception-nologin' => 'Non connecté(e)',
+'exception-nologin' => 'Non connecté',
 'exception-nologin-text' => 'Veuillez [[Special:Userlogin|vous connecter]] pour pouvoir accéder à cette page ou cette action.',
 'exception-nologin-text-manual' => 'Veuillez $1 pour pouvoir accéder à cette page ou cette action.',
 
@@ -865,9 +868,8 @@ N'oubliez pas de modifier [[Special:Preferences|vos préférences pour {{SITENAM
 'gotaccountlink' => 'Connectez-vous',
 'userlogin-resetlink' => 'Vous avez oublié vos détails de connexion ?',
 'userlogin-resetpassword-link' => 'Mot de passe oublié ?',
-'helplogin-url' => 'Help:Connexion',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Aide à la connexion]]',
-'userlogin-loggedin' => 'Vous êtes déjà connecté{{GENDER:$1||e|(e)}} en tant que {{GENDER:$1|$1}}.
+'userlogin-helplink2' => 'Aide à la connexion',
+'userlogin-loggedin' => 'Vous êtes déjà connecté{{GENDER:$1||e}} en tant que {{GENDER:$1|$1}}.
 Utilisez le formulaire ci-dessous pour vous connecter avec un autre compte utilisateur.',
 'userlogin-createanother' => 'Créer un autre compte',
 'createacct-join' => 'Entrez vos informations ci-dessous.',
@@ -957,6 +959,10 @@ Veuillez attendre $1 avant d'essayer à nouveau.",
 'suspicious-userlogout' => "Votre demande de déconnexion a été refusée car il semble qu'elle a été envoyée par un navigateur cassé ou la mise en cache d'un proxy.",
 'createacct-another-realname-tip' => 'Le vrai nom est optionnel.
 Si vous décidez de le fournir, il sera utilisé pour attribuer à l’utilisateur ses travaux.',
+'pt-login' => 'Se connecter',
+'pt-login-button' => 'Se connecter',
+'pt-createaccount' => 'Créer un compte',
+'pt-userlogout' => 'Se déconnecter',
 
 # Email sending
 'php-mail-error-unknown' => 'Erreur inconnue dans la fonction mail() de PHP.',
@@ -965,7 +971,7 @@ Si vous décidez de le fournir, il sera utilisé pour attribuer à l’utilisate
 
 # Change password dialog
 'changepassword' => 'Changer de mot de passe',
-'resetpass_announce' => "Vous vous êtes enregistré{{GENDER:||e|(e)}} avec un mot de passe temporaire envoyé par courriel. Pour terminer l'enregistrement, vous devez entrer un nouveau mot de passe ici :",
+'resetpass_announce' => "Pour terminer l'enregistrement, vous devez fournir un nouveau mot de passe.",
 'resetpass_text' => '<!-- Ajoutez le texte ici -->',
 'resetpass_header' => 'Changer le mot de passe du compte',
 'oldpassword' => 'Ancien mot de passe :',
@@ -976,13 +982,21 @@ Si vous décidez de le fournir, il sera utilisé pour attribuer à l’utilisate
 'changepassword-throttled' => 'Vous avez fait trop de tentatives de connexion récemment.
 Veuillez attendre $1 avant de réessayer.',
 'resetpass_forbidden' => 'Les mots de passe ne peuvent pas être changés',
-'resetpass-no-info' => 'Vous devez être connecté(e) pour avoir accès à cette page.',
+'resetpass-no-info' => 'Vous devez être connecté pour avoir accès à cette page.',
 'resetpass-submit-loggedin' => 'Changer de mot de passe',
 'resetpass-submit-cancel' => 'Annuler',
 'resetpass-wrong-oldpass' => 'Mot de passe actuel ou temporaire invalide.
 Vous avez peut-être déjà changé votre mot de passe ou demandé un nouveau mot de passe temporaire.',
+'resetpass-recycled' => 'Veuillez réinitialiser votre mot de passe à quelque chose d’autre que l’actuel.',
+'resetpass-temp-emailed' => 'Vous êtes connecté avec un code temporaire fourni par courriel.
+Pour terminer la connexion, vous devez fournir un nouveau mot de passe ici :',
 'resetpass-temp-password' => 'Mot de passe temporaire :',
 'resetpass-abort-generic' => 'La modification du mot de passe a été annulée par une extension.',
+'resetpass-expired' => 'Votre mot de passe a expiré. Veuillez en fournir un nouveau pour vous connecter.',
+'resetpass-expired-soft' => 'Votre mot de passe a expiré, et doit être réinitialisé. Veuillez en choisir un nouveau maintenant, ou cliquer sur « {{int:resetpass-submit-cancel}} » pour le faire plus tard.',
+'resetpass-validity-soft' => 'Votre mot de passe n’est pas valide : $1
+
+Veuillez choisir un nouveau mot de passe maintenant, ou cliquez sur « {{int:resetpass-submit-cancel}} » pour le réinitialiser plus tard.',
 
 # Special:PasswordReset
 'passwordreset' => 'Remise à zéro du mot de passe',
@@ -1017,7 +1031,7 @@ Mot de passe temporaire : $2",
 'changeemail' => 'Changer l’adresse de courriel',
 'changeemail-header' => 'Changer l’adresse de courriel du compte',
 'changeemail-text' => 'Remplissez ce formulaire pour changer votre adresse de courriel. Vous devrez entrer votre mot de passe pour confirmer ce changement.',
-'changeemail-no-info' => 'Vous devez être connecté(e) pour pouvoir accéder directement à cette page.',
+'changeemail-no-info' => 'Vous devez être connecté pour pouvoir accéder directement à cette page.',
 'changeemail-oldemail' => 'Adresse de courriel actuelle :',
 'changeemail-newemail' => 'Nouvelle adresse de courriel :',
 'changeemail-none' => '(aucune)',
@@ -1071,7 +1085,7 @@ Vous devriez le faire si vous les avez partagés accidentellement avec quelqu'un
 'showlivepreview' => 'Aperçu rapide',
 'showdiff' => 'Voir les modifications',
 'anoneditwarning' => "'''Attention :''' vous n'êtes pas identifié(e). Votre adresse IP sera enregistrée dans l'historique de cette page.",
-'anonpreviewwarning' => "''Vous n'êtes pas identifié(e). Sauvegarder enregistrera votre adresse IP dans l'historique des modifications de la page.''",
+'anonpreviewwarning' => "''Vous n'êtes pas identifié. Sauvegarder enregistrera votre adresse IP dans l'historique des modifications de la page.''",
 'missingsummary' => "'''Rappel :''' vous n'avez pas encore fourni le résumé de votre modification.
 Si vous cliquez de nouveau sur le bouton « {{int:savearticle}} », la publication sera faite sans nouvel avertissement.",
 'missingcommenttext' => 'Veuillez entrer un commentaire ci-dessous.',
@@ -1120,7 +1134,7 @@ Elle a peut-être été déplacée ou supprimée depuis que vous avez lu cette p
 'loginreqpagetext' => 'Vous devez vous $1 pour voir les autres pages.',
 'accmailtitle' => 'Mot de passe envoyé.',
 'accmailtext' => "Un mot de passe généré aléatoirement pour [[User talk:$1|$1]] a été envoyé à $2.
-Il peut être modifié sur la page ''[[Special:ChangePassword|Changement de mot de passe]]'' après s’être connecté{{GENDER:$1||e|(e)}}.",
+Il peut être modifié sur la page ''[[Special:ChangePassword|Changement de mot de passe]]'' après connexion.",
 'newarticle' => '(Nouveau)',
 'newarticletext' => "Vous avez suivi un lien vers une page qui n’existe pas encore ou qui a été [{{fullurl:Special:Log|type=delete&page={{FULLPAGENAMEE}}}} effacée]. 
 Pour créer cette page, entrez votre texte dans la boîte ci-après (vous pouvez consulter [[{{MediaWiki:Helppage}}|la page d’aide]] pour plus d’informations). 
@@ -1277,7 +1291,7 @@ Il devrait y avoir moins de $2 appel{{PLURAL:$2||s}}, alors qu'il y en a mainten
 'undo-success' => 'Cette modification va être défaite. Veuillez vérifier les modifications ci-dessous, puis publier si c’est bien ce que vous voulez faire.',
 'undo-failure' => 'Cette modification ne peut pas être défaite : cela entrerait en conflit avec les modifications intermédiaires.',
 'undo-norev' => 'La modification n’a pas pu être défaite parce qu’elle est inexistante ou qu’elle a été supprimée.',
-'undo-nochange' => 'Il semble que la modification aie déjà été annulée.',
+'undo-nochange' => 'Il semblerait que la modification ait déjà été annulée.',
 'undo-summary' => 'Annulation des modifications $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussion]])',
 'undo-summary-username-hidden' => 'Annuler la révision $1 par un utilisateur masqué',
 
@@ -1361,8 +1375,10 @@ Vous pouvez voir ce diff ; des détails sont disponibles dans le [{{fullurl:{{#S
 'revdelete-show-file-submit' => 'Oui',
 'revdelete-selected' => "'''{{PLURAL:$2|Version sélectionnée|Versions sélectionnées}} de '''[[:$1]]''' :'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Événement d'historique sélectionné|Événements d'historique sélectionnés}} :'''",
-'revdelete-text' => "'''Les versions et événements supprimés seront encore présents dans l'historique de la page et dans les journaux, mais leur contenu textuel sera inaccessible au public.'''
-Les autres administrateurs de {{SITENAME}} pourront toujours accéder au contenu caché et le restaurer à travers cette même interface, à moins que des restrictions supplémentaires ne soient mises en place.",
+'revdelete-text-text' => "Les révisions supprimées continueront à apparaître dans l'historique de la page, mais une partie de leur contenu sera inaccessible au public.",
+'revdelete-text-file' => "Les versions de fichier supprimées continueront à apparaître dans l'historique des fichiers, mais une partie de leur contenu sera indisponible au public.",
+'logdelete-text' => 'Les évènements du journal supprimés continueront à apparaître dans les journaux, mais une partie de leur contenu sera indisponible au public.',
+'revdelete-text-others' => "Les autres administrateurs de {{SITENAME}} seront toujours capables d'accéder au contenu caché et peuvent le restaurer à nouveau par cette interface, à moins que des restrictions additionnelles soient définies.",
 'revdelete-confirm' => 'Confirmez que vous voulez effectuer cette action, que vous en comprenez les conséquences, et que vous le faites en accord avec [[{{MediaWiki:Policy-url}}|les règles]].',
 'revdelete-suppress-text' => "La suppression ne doit être utilisée '''que''' dans les cas suivants :
 * Informations potentiellement diffamatoires
@@ -1497,13 +1513,14 @@ Vous pouvez trouver des détails dans le [{{fullurl:{{#Special:Log}}/delete|page
 'search-file-match' => '(correspond au contenu du fichier)',
 'search-suggest' => 'Essayez avec cette orthographe : $1',
 'search-interwiki-caption' => 'Projets frères',
-'search-interwiki-default' => 'Résultats sur $1 :',
+'search-interwiki-default' => 'Résultats de $1 :',
 'search-interwiki-more' => '(plus)',
 'search-relatedarticle' => 'Reliés',
 'searcheverything-enable' => 'Rechercher dans tous les espaces de noms',
 'searchrelated' => 'reliés',
 'searchall' => 'tout',
 'showingresults' => 'Affichage de <b>$1</b> résultat{{PLURAL:$1||s}} à partir du n°<b>$2</b>.',
+'showingresultsinrange' => 'Afficher ci-dessous jusqu’à {{PLURAL:$1|<strong>1</strong> résultat|<strong>$1</strong> résultats}} dans la série #<strong>$2</strong> à #<strong>$3</strong>.',
 'showingresultsnum' => 'Affichage de <b>$3</b> résultat{{PLURAL:$3||s}} à partir du n°<b>$2</b>.',
 'showingresultsheader' => "{{PLURAL:$5|Résultat '''$1'''|Résultats '''$1–$2'''}} de '''$3''' pour '''$4'''",
 'search-nonefound' => "Il n'y a aucun résultat correspondant à la requête.",
@@ -1583,7 +1600,7 @@ Toute personne la connaissant pourra lire votre liste de suivi, ne la communique
 'prefs-files' => 'Fichiers',
 'prefs-custom-css' => 'CSS personnalisé',
 'prefs-custom-js' => 'JavaScript personnalisé',
-'prefs-common-css-js' => 'JavaScript et CSS partagé pour tous les habillages :',
+'prefs-common-css-js' => 'CSS et JavaScript communs à tous les habillages :',
 'prefs-reset-intro' => 'Vous pouvez utiliser cette page pour restaurer vos préférences aux valeurs par défaut du site. Ceci ne peut pas être défait.',
 'prefs-emailconfirm-label' => 'Confirmation du courriel :',
 'youremail' => 'Courriel :',
@@ -1760,7 +1777,7 @@ Cette information sera publique.',
 'newuserlogpagetext' => "Cette page affiche l'historique des créations de comptes utilisateur.",
 
 # User rights log
-'rightslog' => "Journal des modifications de droits d'utilisateurs",
+'rightslog' => 'Journal des modifications de droits d’utilisateurs',
 'rightslogtext' => "Voici l'historique des modifications des droits des utilisateurs.",
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -1821,14 +1838,26 @@ Cette information sera publique.',
 'recentchanges-legend-heading' => "'''Légende :'''",
 'recentchanges-legend-newpage' => '(voir aussi la [[Special:NewPages|liste des nouvelles pages]]).',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "Voici les modifications effectuées depuis le '''$2''' ('''$1''' au maximum).",
+'rcnotefrom' => 'Ci-dessous les modifications effectuées depuis le <strong>$2</strong> (jusqu’à <strong>$1</strong> affichés).',
 'rclistfrom' => 'Afficher les nouvelles modifications depuis le $1.',
 'rcshowhideminor' => '$1 les modifications mineures',
+'rcshowhideminor-show' => 'Afficher',
+'rcshowhideminor-hide' => 'Masquer',
 'rcshowhidebots' => '$1 les robots',
+'rcshowhidebots-show' => 'Afficher',
+'rcshowhidebots-hide' => 'Masquer',
 'rcshowhideliu' => '$1 les utilisateurs enregistrés',
+'rcshowhideliu-show' => 'Afficher',
+'rcshowhideliu-hide' => 'Masquer',
 'rcshowhideanons' => '$1 les utilisateurs anonymes',
+'rcshowhideanons-show' => 'Afficher',
+'rcshowhideanons-hide' => 'Masquer',
 'rcshowhidepatr' => '$1 les modifications surveillées',
+'rcshowhidepatr-show' => 'Afficher',
+'rcshowhidepatr-hide' => 'Masquer',
 'rcshowhidemine' => '$1 mes modifications',
+'rcshowhidemine-show' => 'Afficher',
+'rcshowhidemine-hide' => 'Masquer',
 'rclinks' => 'Afficher les $1 dernières modifications effectuées au cours des $2 derniers jours<br />$3.',
 'diff' => 'diff',
 'hist' => 'hist',
@@ -1860,7 +1889,7 @@ Cette information sera publique.',
 'uploadbtn' => 'Importer le fichier',
 'reuploaddesc' => "Annuler et retourner au formulaire d'import",
 'upload-tryagain' => 'Envoyer la description du fichier modifiée',
-'uploadnologin' => 'Non connecté{{GENDER:||e|(e)}}',
+'uploadnologin' => 'Pas connecté',
 'uploadnologintext' => 'Vous devez $1 pour importer des fichiers.',
 'upload_directory_missing' => 'Le répertoire d’import de fichier ($1) est introuvable et n’a pas pu être créé par le serveur web.',
 'upload_directory_read_only' => 'Le répertoire d’import de fichier ($1) n’est pas accessible en écriture depuis le serveur web.',
@@ -1955,6 +1984,8 @@ Vous devriez demander à quelqu'un la possibilité de vérifier le journal de ce
 'uploaddisabledtext' => 'L’import de fichiers est désactivé sur ce wiki.',
 'php-uploaddisabledtext' => "L'import de fichiers a été désactivé dans PHP. Vérifiez l'option de configuration file_uploads.",
 'uploadscripted' => 'Ce fichier contient du code HTML ou un script qui pourrait être interprété de façon incorrecte par un navigateur web.',
+'uploadscriptednamespace' => "Ce fichier SVG contient un espace de noms '$1' non autorisé.",
+'uploadinvalidxml' => 'Le XML dans le fichier importé n’a pas pu être analysé.',
 'uploadvirus' => 'Ce fichier contient un virus ! Pour plus de détails, consultez : $1',
 'uploadjava' => 'C’est un fichier ZIP qui contient un fichier Java .class.
 Le téléchargement de fichiers Java n’est pas autorisé, car ils peuvent contourner certaines restrictions de sécurité.',
@@ -2258,7 +2289,7 @@ N’oubliez pas de vérifier s’il n’y a pas d’autres liens vers les modèl
 'pageswithprop-legend' => 'Pages avec une propriété de page',
 'pageswithprop-text' => 'Cette page liste les pages qui utilisent une propriété de page particulière.',
 'pageswithprop-prop' => 'Nom de la propriété :',
-'pageswithprop-submit' => 'Aller',
+'pageswithprop-submit' => 'Lister',
 'pageswithprop-prophidden-long' => 'valeur de propriété de texte long masquée ($1)',
 'pageswithprop-prophidden-binary' => 'valeur de propriété binaire masquée ($1)',
 
@@ -2326,10 +2357,20 @@ Les entrées <del>barrées</del> ont été résolues.',
 'deadendpagestext' => "Les pages suivantes ne contiennent aucun lien vers d'autres pages du wiki.",
 'protectedpages' => 'Pages protégées',
 'protectedpages-indef' => 'Uniquement les protections permanentes',
+'protectedpages-summary' => 'Cette page liste les pages existantes actuellement protégées. Pour une liste des titres protégés contre la création, voir [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Uniquement les protections en cascade',
 'protectedpages-noredirect' => 'Masquer les redirections',
 'protectedpagesempty' => "Aucune page n'est protégée de cette façon.",
+'protectedpages-timestamp' => 'Horodatage',
+'protectedpages-page' => 'Page',
+'protectedpages-expiry' => 'Expire le',
+'protectedpages-performer' => 'Protection de l’utilisateur',
+'protectedpages-params' => 'Paramètres de protection',
+'protectedpages-reason' => 'Motif',
+'protectedpages-unknown-timestamp' => 'Inconnu',
+'protectedpages-unknown-performer' => 'Utilisateur inconnu',
 'protectedtitles' => 'Titres protégés',
+'protectedtitles-summary' => 'Cette page liste les titres actuellement protégés contre la création. Pour une liste des pages protégées existantes, voir [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => "Aucun titre n'est actuellement protégé avec ces paramètres.",
 'listusers' => 'Liste des utilisateurs',
 'listusers-editsonly' => 'Ne montrer que les utilisateurs ayant au moins une contribution',
@@ -2347,7 +2388,7 @@ Veuillez noter que d’autres sites peuvent avoir un lien direct vers un fichier
 'unusedcategoriestext' => 'Les catégories suivantes existent mais aucune page ou catégorie ne les utilise.',
 'notargettitle' => 'Pas de cible',
 'notargettext' => "Vous n'avez pas indiqué une page ou un utilisateur sur lequel vous souhaitez effectuer cette action.",
-'nopagetitle' => 'Aucune telle page cible',
+'nopagetitle' => 'Page cible inexistante',
 'nopagetext' => "La page cible que vous avez indiquée n'existe pas.",
 'pager-newer-n' => '{{PLURAL:$1|plus récente|$1 plus récentes}}',
 'pager-older-n' => '{{PLURAL:$1|plus ancienne|$1 plus anciennes}}',
@@ -2365,7 +2406,7 @@ Veuillez noter que d’autres sites peuvent avoir un lien direct vers un fichier
 # Special:Log
 'specialloguserlabel' => 'Auteur :',
 'speciallogtitlelabel' => 'Cible (titre ou utilisateur):',
-'log' => "Journaux d'opérations",
+'log' => 'Journaux d’opérations',
 'all-logs-page' => 'Tous les journaux publics',
 'alllogstext' => "Affichage combiné de tous les journaux disponibles sur {{SITENAME}}.<br />
 Vous pouvez personnaliser l'affichage en sélectionnant le type de journal, le nom d'utilisateur ou la page concernée (ces deux derniers étant sensibles à la casse).",
@@ -2496,8 +2537,8 @@ L'adresse électronique que vous avez indiquée dans [[Special:Preferences|vos p
 'watchlistfor2' => 'Pour $1 $2',
 'nowatchlist' => 'Votre liste de suivi ne référence aucune page.',
 'watchlistanontext' => 'Veuillez vous $1 pour visualiser ou modifier les éléments de votre liste de suivi.',
-'watchnologin' => 'Non connecté(e)',
-'watchnologintext' => 'Vous devez être [[Special:UserLogin|identifié(e)]] pour modifier votre liste de suivi.',
+'watchnologin' => 'Non connecté',
+'watchnologintext' => 'Vous devez être [[Special:UserLogin|identifié]] pour modifier votre liste de suivi.',
 'addwatch' => 'Ajouter à la liste de suivi',
 'addedwatchtext' => 'La page « [[:$1]] » a été ajoutée à votre [[Special:Watchlist|liste de suivi]].
 Les prochaines modifications de cette page et de la page de discussion associée y seront répertoriées.',
@@ -2604,7 +2645,7 @@ La suppression de telles pages a été restreinte pour prévenir des perturbatio
 'delete-warning-toobig' => "Cette page possède un historique important de modifications, dépassant $1 version{{PLURAL:$1||s}}.
 La supprimer peut perturber le fonctionnement de la base de données de {{SITENAME}} ;
 veuiller ne procéder qu'avec prudence.",
-'deleting-backlinks-warning' => "'''Attention :''' D’autres pages ont un lien vers ou incorporent la page que vous allez supprimer.",
+'deleting-backlinks-warning' => "'''Attention :''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|D’autres pages]] ont un lien vers ou incorporent la page que vous allez supprimer.",
 
 # Rollback
 'rollback' => 'Révoquer les modifications',
@@ -2651,7 +2692,7 @@ Consultez la [[Special:ProtectedPages|liste des pages protégées]] pour la list
 'protectexpiry' => 'Date d’expiration :',
 'protect_expiry_invalid' => "La date d'expiration est invalide.",
 'protect_expiry_old' => "La date d'expiration est déjà passée.",
-'protect-unchain-permissions' => "Déverrouiller davantage d'options de protection",
+'protect-unchain-permissions' => 'Déverrouiller davantage d’options de protection',
 'protect-text' => "Vous pouvez consulter et modifier le niveau de protection de la page '''$1'''.",
 'protect-locked-blocked' => "Vous ne pouvez pas modifier les niveaux de protection tant que vous êtes bloqué{{GENDER:||e|(e)}}.
 Voici les réglages actuels de la page '''$1''' :",
@@ -2785,8 +2826,10 @@ $1',
 '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-suppresslog' => 'contributions des utilisateurs supprimées',
 '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-newonly' => 'Afficher uniquement les modifications qui sont des créations de page',
 'sp-contributions-submit' => 'Rechercher',
 
 # What links here
@@ -2844,7 +2887,7 @@ Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont ét
 'blockipsuccesssub' => 'Blocage réussi',
 '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{{GENDER:||e|(e)}} de vouloir faire cela ?',
+'ipb-blockingself' => 'Vous êtes sur le point de bloquer votre propre compte ! Êtes-vous certain{{GENDER:||e}} 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-confirmaction' => 'Si vous êtes sûr de vraiment vouloir le faire, veuillez cocher le champ « {{int:ipb-confirm}} » en bas.',
 'ipb-edit-dropdown' => 'Modifier les motifs de blocage par défaut',
@@ -2855,8 +2898,8 @@ Consultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.'
 'unblockip' => 'Débloquer un utilisateur ou une adresse IP',
 'unblockiptext' => 'Utilisez le formulaire ci-dessous pour redonner les droits d’écriture à une adresse IP ou un nom d’utilisateur.',
 'ipusubmit' => 'Supprimer ce blocage',
-'unblocked' => '[[User:$1|$1]] a été débloqué{{GENDER:$1||e|(e)}}',
-'unblocked-range' => '$1 a été débloqué{{GENDER:$1||e|(e)}}',
+'unblocked' => '[[User:$1|$1]] a été débloqué{{GENDER:$1||e}}',
+'unblocked-range' => 'Le compte $1 a été débloqué',
 'unblocked-id' => 'Le blocage $1 a été enlevé',
 'blocklist' => 'Utilisateurs bloqués',
 'ipblocklist' => 'Utilisateurs bloqués',
@@ -2888,8 +2931,8 @@ Consultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.'
 'change-blocklink' => 'modifier le blocage',
 'contribslink' => 'contributions',
 'emaillink' => 'Envoyer un courriel',
-'autoblocker' => 'Vous avez été bloqué automatiquement parce que votre adresse IP a été récemment utilisée par « [[User:$1|$1]] ».
-Le motif fourni pour le blocage de $1 est : « $2 ».',
+'autoblocker' => 'Vous avez été bloqué automatiquement parce que votre adresse IP a été récemment utilisée par « [[User:$1|$1]] ».
+Le motif fourni pour le blocage de $1 est « $2 »',
 'blocklogpage' => 'Journal des blocages',
 'blocklog-showlog' => 'Cet utilisateur a été bloqué précédemment. Le journal des blocages est disponible ci-dessous :',
 'blocklog-showsuppresslog' => 'Cet utilisateur a été bloqué et caché précédemment. Le journal des suppressions est disponible ci-dessous :',
@@ -2929,7 +2972,7 @@ Vous ne pouvez pas créer un compte.',
 'xffblockreason' => "Une adresse IP dans l'en-tête X-Forwarded-For, soit la vôtre ou celle d'un serveur proxy que vous utilisez, a été bloquée. La raison du blocage initial est : $1",
 'cant-see-hidden-user' => "L’utilisateur que vous tentez de bloquer a déjà été bloqué et masqué. N’ayant pas le droit ''hideuser'', vous ne pouvez pas voir ou modifier le blocage de cet utilisateur.",
 'ipbblocked' => "Vous ne pouvez pas bloquer ou débloquer d'autres utilisateurs, parce que vous êtes vous-même bloqué",
-'ipbnounblockself' => "Vous n'êtes pas autorisé{{GENDER:||e|(e)}} à vous débloquer vous-même",
+'ipbnounblockself' => "Vous n'êtes pas autorisé{{GENDER:||e}} à vous débloquer vous-même",
 
 # Developer tools
 'lockdb' => 'Verrouiller la base de données',
@@ -3090,6 +3133,7 @@ $2",
 'thumbnail_image-type' => "Type d'image non supporté",
 'thumbnail_gd-library' => 'Configuration incomplète de la bibliothèque GD : fonction $1 introuvable',
 'thumbnail_image-missing' => 'Le fichier suivant est introuvable : $1',
+'thumbnail_image-failure-limit' => 'Il y a eu récemment trop de tentatives échouées ($1 ou plus) pour restituer cette vignette. Veuillez réessayer ultérieurement.',
 
 # Special:Import
 'import' => 'Importer des pages',
@@ -4451,6 +4495,4 @@ En fait, elle réalise l'expansion de pratiquement tout ce qui est encadré par
 'expand_templates_generate_rawhtml' => 'Afficher le HTML brut',
 'expand_templates_preview' => 'Aperçu du rendu',
 
-# Unknown messages
-'uploadinvalidxml' => 'Le XML dans le fichier importé n’a pas pu être analysé.',
 );
index 2f80584..7e7c262 100644 (file)
@@ -21,7 +21,6 @@ $fallback = 'fr';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Souligner les liens:',
-'tog-justify' => 'Égalisez les paragraphes',
 'tog-hideminor' => 'Cachez les petits changements dans la liste des derniers changements',
 'tog-hidepatrolled' => '↓ Cachez les petits changements dans la liste des derniers changements',
 'tog-newpageshidepatrolled' => '↓Cache pages patrollés de la list des pages nouveau',
@@ -30,9 +29,7 @@ $messages = array(
 'tog-numberheadings' => 'Mettre les numéros sus les en-têtes',
 'tog-showtoolbar' => "Montrer la barre d'outils des changements (JavaScript)",
 'tog-editondblclick' => 'Faire un clic-double pour changer la page (JavaScript)',
-'tog-editsection' => 'Changer une section avec les liens [changer]',
 'tog-editsectiononrightclick' => 'Changer une section en faisant un clic droit sus son nom (JavaScript)',
-'tog-showtoc' => 'Montrer la table des matières (pour les pages avec plus que 3 têtes)',
 'tog-rememberpassword' => 'Garder mon mot de passe (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'Additionner les pages que je crée à ma liste des pages guettées',
 'tog-watchdefault' => 'Additionner les pages que je change à ma liste des pages guettées',
@@ -41,7 +38,6 @@ $messages = array(
 'tog-minordefault' => "Marquer tous les petits changements d'après le réglage",
 'tog-previewontop' => "Montrer la vue d'avance au-dessus la boëte de changement",
 'tog-previewonfirst' => "Montrer la vue d'avance au temps du premier changement",
-'tog-nocache' => 'Arrêter le cache des pages',
 'tog-enotifwatchlistpages' => 'Envoyer un e-mail quand une de mes pages guettées est changée',
 'tog-enotifusertalkpages' => 'Envoyer un e-mail quand ma page de discussion est changée',
 'tog-enotifminoredits' => 'Envoyer un e-mail même pour les petits changements',
@@ -567,7 +563,6 @@ Des autres administrateurs sus ce wiki ont la permission de voir et de rétablir
 'lineno' => 'Ligne $1:',
 'compareselectedversions' => 'Comparer les versions choisies',
 'editundo' => 'renverser',
-'diff-multi' => '({{PLURAL:$1|Un changement moyen caché|$1 changements moyens cachés}})',
 
 # Search results
 'searchresults' => 'Résultats de la charche',
index 0b222ce..89c9c03 100644 (file)
@@ -348,7 +348,6 @@ $messages = array(
 '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 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 la dif pendent na rèvocacion',
 'tog-useeditwarning' => 'M’avèrtir quand quito una pâge de changement sen sôvar los changements',
 
@@ -474,7 +473,6 @@ $messages = array(
 'vector-action-protect' => 'Protègiér',
 'vector-action-undelete' => 'Refâre',
 'vector-action-unprotect' => 'Changiér la protèccion',
-'vector-simplesearch-preference' => 'Activar la bârra de rechèrche simplifiâye (solament por l’habelyâjo « Vèctor »)',
 'vector-view-create' => 'Fâre',
 'vector-view-edit' => 'Changiér',
 'vector-view-history' => 'Vêre l’historico',
@@ -523,7 +521,7 @@ $messages = array(
 'articlepage' => 'Vêde la pâge de contegnu',
 'talk' => 'Discussion',
 'views' => 'Vues',
-'toolbox' => 'Bouèta d’outils',
+'toolbox' => 'Outils',
 'userpage' => 'Vêde la pâge utilisator',
 'projectpage' => 'Vêde la pâge projèt',
 'imagepage' => 'Vêde la pâge du fichiér',
@@ -755,8 +753,6 @@ Oubliâd pas de changiér voutres [[Special:Preferences|prèferences dessus {{SI
 'gotaccountlink' => 'Branchiéd-vos',
 'userlogin-resetlink' => 'Vos éd oubliâ voutros dètalys de branchement ?',
 'userlogin-resetpassword-link' => 'Rebetar a zérô lo contresegno',
-'helplogin-url' => 'Help:Branchement',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Éde u branchement]]',
 'createacct-join' => 'Buchiéd voutres enformacions ce-desot.',
 'createacct-another-join' => 'Buchiéd les enformacions sur lo compto novél ce-desot.',
 'createacct-emailrequired' => 'Adrèce èlèctronica',
@@ -806,7 +802,7 @@ Se vos plét, tornâd èprovar.',
 'passwordtooshort' => 'Voutron contresegno dêt contegnir por lo muens $1 caractèro{{PLURAL:$1||s}}.',
 'password-name-match' => 'Voutron contresegno dêt étre difèrent de voutron nom d’utilisator.',
 'password-login-forbidden' => 'L’usâjo de cél nom d’utilisator et de cél contresegno est étâ dèfendu.',
-'mailmypassword' => 'Recêvre un contresegno novél per mèssageria èlèctronica',
+'mailmypassword' => 'Rebetar a zérô lo contresegno',
 'passwordremindertitle' => 'Contresegno temporèro novél por {{SITENAME}}',
 'passwordremindertext' => 'Yon (probâblament vos, dês l’adrèce IP $1) at demandâ un contresegno
 novél por {{SITENAME}} ($4). Un contresegno temporèro est étâ fêt por
@@ -1262,8 +1258,6 @@ fonccion, la vèrsion spècifiâye ègziste pas ou ben vos èprovâd de cachiér
 'revdelete-show-file-submit' => 'Ouè',
 'revdelete-selected' => "'''{{PLURAL:$2|Vèrsion chouèsia|Vèrsions chouèsies}} de [[:$1]] :'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Èvènement du jornal chouèsi|Èvènements du jornal chouèsis}} :'''",
-'revdelete-text' => "'''Les vèrsions et los èvènements suprimâ(ye)s aparètront adés dedens l’historico de la pâge et pués sur los jornals, mas quârques parties de lor contegnu seront inaccèssibles u publico.'''
-Los ôtros administrators de {{SITENAME}} porront tojorn arrevar u contegnu cachiê et lo refâre per cela mém’entèrface, du muens que des rèstriccions de ples seyont pas dèfenies.",
 'revdelete-confirm' => 'Se vos plét, confirmâd qu’o est franc cen que vos voléd fâre, que vos en compregnéd les consèquences et pués que vos o féte en acôrd avouéc les [[{{MediaWiki:Policy-url}}|règlles de dedens]].',
 'revdelete-suppress-text' => "La rèprèssion dêt étre empleyêe '''ren que''' dens cetos câs :
 * Enformacions que pôvont étre difamatouères
@@ -1716,7 +1710,7 @@ Se vos chouèsésséd de lo balyér, serat empleyê por vos atribuar voutres ôv
 'rc_categories_any' => 'Totes',
 'rc-change-size-new' => '$1 octèt{{PLURAL:$1||s}} aprés changement',
 'newsectionsummary' => '/* $1 */ novèla sèccion',
-'rc-enhanced-expand' => 'Montrar los dètalys (at fôta de JavaScript)',
+'rc-enhanced-expand' => 'Fâre vêre los dètalys',
 'rc-enhanced-hide' => 'Cachiér los dètalys',
 'rc-old-title' => 'fêta avouéc lo titro originâl « $1 »',
 
@@ -2633,9 +2627,9 @@ $1',
 'contributions' => 'Contribucions de l’utilisat{{GENDER:$1|or|rice}}',
 'contributions-title' => 'Lista de les contribucions a l’usanciér $1',
 'mycontris' => 'Contribucions',
-'contribsub2' => 'Por $1 ($2)',
+'contribsub2' => 'Por {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Y at gins de changement que corrèspond a cetos critèros.',
-'uctop' => '(dèrriére)',
+'uctop' => '(d’ora)',
 'month' => 'Dês lo mês (et devant) :',
 'year' => 'Dês l’an (et devant) :',
 
@@ -3235,7 +3229,7 @@ Se vos l’ègzécutâd, voutron sistèmo pôt étre compromês.",
 'file-nohires' => 'Gins de rèsolucion ples hôta disponibla.',
 'svg-long-desc' => 'Fichiér SVG, rèsolucion de $1 × $2 pixèls, talye : $3',
 'svg-long-error' => 'Fichiér SVG envalido : $1',
-'show-big-image' => 'Émâge en rèsolucion ples hôta',
+'show-big-image' => 'Fichiér d’origina',
 'show-big-image-preview' => 'Talye de ceti apèrçu : $1.',
 'show-big-image-other' => '{{PLURAL:$2|Ôtra rèsolucion|Ôtres rèsolucions}} : $1.',
 'show-big-image-size' => '$1 × $2 pixèls',
index 5bd1ca0..8959ea0 100644 (file)
@@ -183,7 +183,6 @@ $messages = array(
 'vector-action-protect' => 'Seekre',
 'vector-action-undelete' => 'Weder iinstel',
 'vector-action-unprotect' => 'Sidjenseekerhaid',
-'vector-simplesearch-preference' => 'Ianfacher schüklist iinstel (bluas bi Vector)',
 'vector-view-create' => 'Maage',
 'vector-view-edit' => 'Bewerke',
 'vector-view-history' => 'Ferluup uunluke',
@@ -471,8 +470,6 @@ Ferjid det ei, an aachte üüb din [[Special:Preferences|{{SITENAME}} iinstelang
 'gotaccountlink' => 'Uunmelde',
 'userlogin-resetlink' => 'Heest dü din login dooten ferjiden?',
 'userlogin-resetpassword-link' => 'Paaswurd ferjiden?',
-'helplogin-url' => 'Help:Uunmelde',
-'userlogin-helplink' => "[[{{MediaWiki:helplogin-url}}|Halep bi't uunmeldin]]",
 'userlogin-loggedin' => 'Du beest al üs {{GENDER:$1|$1}} uunmeldet.
 Brük det formulaar diar oner, am di mä en öödern nööm uuntumeldin.',
 'userlogin-createanother' => 'En ööder brükerkonto iinracht',
@@ -887,6 +884,7 @@ Diar mut ei muar üs {{PLURAL:$2|1|$2}} brükt wurd. Nü {{PLURAL:$1|woort diar
 Luke oner, of dü det uk würelk du wel, an do seekre din feranrangen.',
 'undo-failure' => 'Det feranrang küd ei stregen wurd, auer di kirew uuntesken feranert wurden as.',
 'undo-norev' => 'Det feranrang küd ei turagsaat wurd, auer diar niks as of auer det sidj stregen wurden as.',
+'undo-nochange' => 'Detdiar feranrang as wel al ans turagsaat wurden.',
 'undo-summary' => 'Feranrang $1 faan [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusjuun]]) turagsaat.',
 'undo-summary-username-hidden' => 'Feranrang $1 faan en ferbürgenen brüker turagsaat',
 
@@ -966,9 +964,6 @@ Dü könst di ferskeel uunluke. Wan dü muar wed wel, luke iin uun't [{{fullurl:
 'revdelete-show-file-submit' => 'Ja',
 'revdelete-selected' => "'''{{PLURAL:$2|Ütjsoocht werjuun|Ütjsoocht werjuunen}} faan [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Ütjsoocht logbukiindrach|Ütjsoocht logbukiindracher}}:'''",
-'revdelete-text' => "'''Stregen werjuunen an aktjuunen bliiw uun di ferluup an uun a logbuken, man det koon ei arken efterlees.'''
-
-Ööder administratooren üüb {{SITENAME}} kön oober üüb di ferbürgen ferluup tugrip an tu nuad en ual werjuun weder iinstel.",
 'revdelete-confirm' => 'Ferseekre noch ans, dat dü det würelk du wel, dat dü witjst, wat dü dääst, an dat det mä a [[{{MediaWiki:Policy-url}}|bestemangen]] auerian stemet.',
 'revdelete-suppress-text' => "Det skul '''bluas''' onertrakt wurd bi:
 * Persöönelk informatsjuunen, diar näämen wat uungung
@@ -1108,6 +1103,7 @@ Dü könst det uun't [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'searchrelated' => 'ferbünjen',
 'searchall' => 'aaltumaal',
 'showingresults' => "Heer {{PLURAL:$1|as '''1''' resultaat|san '''$1''' resultaaten}}, jo began mä numer '''$2.'''",
+'showingresultsinrange' => 'Oner {{PLURAL:$1|woort <strong>ian</strong> resultaat|wurd bit tu <strong>$1</strong> resultaaten}} tesken <strong>$2</strong> an <strong>$3</strong> uunwiset.',
 'showingresultsnum' => "Heer {{PLURAL:$3|as '''1''' resultaat|san '''$3''' resultaaten}}, jo began mä numer '''$2.'''",
 'showingresultsheader' => "{{PLURAL:$5|resultaat '''$1''' faan '''$3'''|resultaaten '''$1-$2''' faan '''$3'''}}, för '''$4.'''",
 'search-nonefound' => 'För din uunfraag san nian resultaaten fünjen wurden.',
@@ -1554,6 +1550,7 @@ Dü skulst hoker fraage, di ferbürgen nöömer uunluke koon, am tu besnaakin, w
 'php-uploaddisabledtext' => 'Det huuchschüüren faan datein as uun PHP ei aktiwiaret.
 Luke di det iinstelang faan <code>file_uploads</code> uun.',
 'uploadscripted' => 'Uun detdiar datei stäänt HTML- of Scriptcode, an küd ütj fersen faan en browser ütjfeerd wurd.',
+'uploadinvalidxml' => "Det XML uun det huuchschüürd datei küd ei ''parset'' wurd.",
 'uploadvirus' => 'Uun detdiar datei as en wiirus! Details: $1',
 'uploadjava' => 'Detdiar as en ZIP-datei mä en CLASS-datei faan Java.
 Java-datein kön ei tuläät wurd, auer jo det seekerhaid uun fraag stel küd.',
@@ -1906,6 +1903,14 @@ Uun arke rä stun ferwisangen tu't iarst an ööder widjerfeerang an uk tu det s
 'protectedpages-cascade' => 'Bluas sidjen mä kaskaaden-seekerhaid',
 'protectedpages-noredirect' => 'Widjerfeerangen fersteeg',
 'protectedpagesempty' => 'Uun uugenblak san sok sidjen ei seekert.',
+'protectedpages-timestamp' => 'Tidjstempel',
+'protectedpages-page' => 'Sidj',
+'protectedpages-expiry' => 'Lääpt uf di',
+'protectedpages-performer' => 'Seekert faan',
+'protectedpages-params' => 'Seekerangsdooten',
+'protectedpages-reason' => 'Grünj',
+'protectedpages-unknown-timestamp' => 'Ünbekäänd',
+'protectedpages-unknown-performer' => 'Ünbekäänd brüker',
 'protectedtitles' => 'Seekert sidjennöömer',
 'protectedtitlesempty' => 'Uun uugenblak san sok sidjen ei speret.',
 'listusers' => 'Brükerfertiaknis',
@@ -2644,6 +2649,7 @@ $2',
 'thumbnail_image-type' => 'Sok bilen kön ei brükt wurd',
 'thumbnail_gd-library' => 'GD-bibleteek ei gans diar: Det funktjuun $1 waant',
 'thumbnail_image-missing' => 'Det datei as wel ei diar: $1',
+'thumbnail_image-failure-limit' => 'Detdiar föörskaubil as uun a leetst tidj tufölsis ($1 of muarsis) feranert wurden. Ferschük det leeder man noch ans.',
 
 # Special:Import
 'import' => 'Sidjen importiare',
@@ -3324,7 +3330,7 @@ Ferwisangen uun det salew rä wurd üs ütjnoomen uunsen, huar det datei dach uu
 'exif-gpsdirection-t' => 'Rochtwisin kurs',
 'exif-gpsdirection-m' => 'Magneetisk kurs',
 
-'exif-ycbcrpositioning-1' => 'Sentriaret',
+'exif-ycbcrpositioning-1' => 'Uun a maden',
 'exif-ycbcrpositioning-2' => 'Uun naiberskap',
 
 'exif-dc-contributor' => 'Bidracher faan',
@@ -3828,7 +3834,4 @@ Uk parser-funktjuunen liküs <code><nowiki>{{</nowiki>#language:…}}</code> an
 'expand_templates_generate_rawhtml' => 'Rä HTML uunwise',
 'expand_templates_preview' => 'Föörskau',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
-'uploadinvalidxml' => "Det XML uun det huuchschüürd datei küd ei ''parset'' wurd.",
 );
index c26557c..1bfd79a 100644 (file)
@@ -281,7 +281,6 @@ $messages = array(
 'vector-action-protect' => 'Protêç',
 'vector-action-undelete' => 'Recupere',
 'vector-action-unprotect' => 'Gambie la protezion',
-'vector-simplesearch-preference' => 'Abilite la bare di ricjerche semplificade (dome pe Vector Skin)',
 'vector-view-create' => 'Cree',
 'vector-view-edit' => 'Cambie',
 'vector-view-history' => 'Cjale il storic',
index 7eb33c5..53c3a3b 100644 (file)
@@ -532,7 +532,6 @@ Guon siden kinne noch foar it ljocht komme, krekt as wiesto noch oanmeld. Asto d
 'gotaccountlink' => 'Oanmelde',
 'userlogin-resetlink' => 'Ynlochdata fergetten?',
 'userlogin-resetpassword-link' => 'Wachtwurd fergetten?',
-'helplogin-url' => 'Help:Oanmelde',
 'createacct-emailrequired' => 'E-mailadres',
 'createacct-emailoptional' => 'E-mailadres (net ferplichte)',
 'createacct-email-ph' => 'E-mailadres ynfiere',
@@ -873,8 +872,6 @@ der kinne details wêze yn it [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPA
 'revdelete-show-file-submit' => 'Ja',
 'revdelete-selected' => "'''Spesifisearre {{PLURAL:$2|ferzje|ferzjes}} fan [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|keazen lochboekregel|keazen lochboekregels}}:'''",
-'revdelete-text' => "'''Fuorthelle bewurkings binne sichtber yn 'e skiednis, mar de ynhâld is net langer publyk tagonklik.'''
-Oare behearders fan {{SITENAME}} kinne de ferburgen ynhâld benaderje en it fuortheljen ûngedien meitsje mei help fan dit skerm, of der moatte oanfoljende beheinings jilde dy't ynsteld binne troch de systeembehearder.",
 'revdelete-legend' => 'Sichtberensbeheinings ynstelle.',
 'revdelete-hide-text' => 'De bewurke tekst ferskûlje',
 'revdelete-hide-image' => 'Triem ynhâld ferskûlje',
index 26c001d..0b11a8f 100644 (file)
@@ -98,16 +98,13 @@ $magicWords = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Baalantıların altını çiz',
-'tog-justify' => 'Paragrafları düz',
 'tog-hideminor' => 'Küçük diişmäkleri "Bitki diişmäkler" sayfasında sakla',
 'tog-extendwatchlist' => 'İlerlemiş bakmaa listası',
 'tog-usenewrc' => 'İlerlemiş bitki diişmäkler listası (JavaScript uymêêr)',
 'tog-numberheadings' => 'Başlıklara avtomatik nomer yaz',
 'tog-showtoolbar' => 'Diişmäk yapar känä yardımcı tuşları göster. (JavaScript)',
 'tog-editondblclick' => 'Sayfayı çift tuşlayarak diiştirmää başla (JavaScript)',
-'tog-editsection' => 'Bölümleri [diiştir] baalantılarılan diiştirmää hakkı ver',
 'tog-editsectiononrightclick' => 'Bölüm başlıına saa tuşla basarak bölümü düzmää izin ver.(JavaScript)',
-'tog-showtoc' => 'İçindäkiler tablițasını düz<br />(3-tän çok başlıı olan sayfalar için)',
 'tog-rememberpassword' => 'Parolu hatırla (en fazla $1 {{PLURAL:$1|gün|gün}})',
 'tog-watchcreations' => 'Yarattıım sayfaları bakmaa listama ekle',
 'tog-watchdefault' => 'Diişmäk yapılan sayfayı bakmaa listasına ekle',
@@ -554,7 +551,6 @@ Nışannar: (bitki) = şindiki versiyalan aradaki fark,
 'lineno' => '$1. liniya:',
 'compareselectedversions' => 'Karşılaştır versiyaları ani seçildi',
 'editundo' => 'geeri al',
-'diff-multi' => '({{PLURAL:$1|Ara versiya|$1 ara versiyalar}} gösterilmedi.)',
 
 # Search results
 'searchresults' => 'Aaramak rezultatları',
index 778b3f6..afc7c85 100644 (file)
@@ -40,6 +40,6 @@ $messages = array(
 # Variants for Gan language
 'variantname-gan-hans' => '简体',
 'variantname-gan-hant' => '繁體',
-'variantname-gan'      => '贛語原文',
+'variantname-gan' => '贛語原文',
 
 );
index 62b8e38..ee6a2ff 100644 (file)
@@ -651,9 +651,6 @@ $2',
 'revdelete-nooldid-text' => '倷冇话个只操作𠮶目标修改。',
 'revdelete-selected' => "'''拣[[:$1]]𠮶$2回修订:'''",
 'logdelete-selected' => "'''拣'''$1'''𠮶$2只日志事件:'''",
-'revdelete-text' => "'''删吥𠮶改动哈会到页面历史里头显示, 但公众浏览伓正佢𠮶内容。'''
-
-个站别𠮶管理员哈系能眵吖弆到𠮶内容,同到通过同佢一样𠮶界面恢复删除,除非设正嘞附加𠮶限制。",
 'revdelete-legend' => '设置可见性𠮶限制',
 'revdelete-hide-text' => '弆到修改内容',
 'revdelete-hide-image' => '弆到档内容',
index cc3c174..1636f61 100644 (file)
@@ -672,9 +672,6 @@ $2',
 'revdelete-nooldid-text' => '倷冇话箇隻操作嗰目标修改。',
 'revdelete-selected' => "'''揀[[:$1]]嗰$2回修訂:'''",
 'logdelete-selected' => "'''揀'''$1'''嗰$2隻日誌事件:'''",
-'revdelete-text' => "'''刪吥嗰改動哈會到頁面歷史裡頭顯示, 但公眾瀏覽伓正佢嗰內容。'''
-
-箇站別嗰管理員哈係能眵吖弆到嗰內容,同到通過同佢一樣嗰界面恢復刪除,除非設正嘞附加嗰限制。",
 'revdelete-legend' => '設置可見性嗰限制',
 'revdelete-hide-text' => '弆到修改內容',
 'revdelete-hide-image' => '弆到檔內容',
index 85066a6..1cc2762 100644 (file)
@@ -198,7 +198,6 @@ $messages = array(
 'vector-action-protect' => 'Dìon',
 'vector-action-undelete' => 'Neo-dhèan an sguabadh às',
 'vector-action-unprotect' => 'Atharraich an dìon',
-'vector-simplesearch-preference' => 'Cuir an comas am bàr-luirg simplidh (craiceann vector a-mhàin)',
 'vector-view-create' => 'Cruthaich',
 'vector-view-edit' => 'Deasaich',
 'vector-view-history' => 'Seall an eachdraidh',
@@ -483,8 +482,6 @@ Na dìochuimhnich na [[Special:Preferences|roghainnean agad air {{SITENAME}}]] a
 'gotaccountlink' => 'Log a-steach',
 'userlogin-resetlink' => "Na dhìochuimhnich thu d' ainm is facal-faire?",
 'userlogin-resetpassword-link' => 'Na dhìochuimhnich thu am facal-faire agad?',
-'helplogin-url' => "Help:A' clàradh a-steach",
-'userlogin-helplink' => "[[{{MediaWiki:helplogin-url}}|Cobhair leis a' chlàradh a-steach]]",
 'userlogin-loggedin' => 'Chaidh do chlàradh mar {{GENDER:$1|$1}} mu thràth.
 Cleachd am foirm gu h-ìosal airson clàradh a-steach mar chleachdaiche eile.',
 'userlogin-createanother' => 'Cruthaich cunntas eile',
@@ -995,8 +992,6 @@ Gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FUL
 'revdelete-show-file-submit' => 'Tha',
 'revdelete-selected' => "'''{{PLURAL:$2|Lèirmheas|Lèirmheasan}} de [[:$1]] a thagh thu:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|An tachartas loga|Na tachartasan loga}} a thagh thu:'''",
-'revdelete-text' => "'''Nochdaidh lèirmheasan is tachartasan fhathast ann an eachdraidh 's logaichean na duilleige ach bidh cuid a shusbaint ann nach fhaic am poball.'''
-Gheibh rianairean eile air {{SITENAME}} greim fhathast air an t-susbaint fhalaichte agus gabhaidh an sguabadh às a neo-dhèanamh a-rithist san aon eadar-aghaidh mur an deach cuingeachaidhean eile a shuidheachadh.",
 'revdelete-confirm' => "Dearbh gu bheil thu airson seo a dhèanamh, gu bheil thu a' tuigsinn na thachras ri linn agus gu bheil thu a' dèanamh seo a-rèir [[{{MediaWiki:Policy-url}}|a' phoileasaidh]].",
 'revdelete-suppress-text' => "Cha bu chòir dhut mùchadh a chleachdadh '''ach''' ann an suidheachaidhean mar seo:
 * Fiosrachadh a dh'fhaodadh a bhith dìteachail
index cc30c65..fbfee76 100644 (file)
@@ -321,7 +321,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Enviádeme ao meu enderezo unha copia das mensaxes de correo electrónico que envíe a outros usuarios',
 'tog-diffonly' => 'Non mostrar o contido da páxina debaixo das diferenzas entre edicións',
 'tog-showhiddencats' => 'Mostrar as categorías ocultas',
-'tog-noconvertlink' => 'Desactivar a conversión dos títulos de ligazón',
 'tog-norollbackdiff' => 'Omitir as diferenzas despois de levar a cabo unha reversión de edicións',
 'tog-useeditwarning' => 'Avisádeme cando deixe unha páxina de edición cos cambios sen gardar',
 'tog-prefershttps' => 'Utilizar unha conexión segura sempre que acceda ao sistema',
@@ -448,7 +447,6 @@ $messages = array(
 'vector-action-protect' => 'Protexer',
 'vector-action-undelete' => 'Restaurar',
 'vector-action-unprotect' => 'Cambiar a protección',
-'vector-simplesearch-preference' => 'Activar a barra de procuras simplificada (soamente na aparencia Vector)',
 'vector-view-create' => 'Crear',
 'vector-view-edit' => 'Editar',
 'vector-view-history' => 'Ver o historial',
@@ -734,8 +732,6 @@ Non esqueza personalizar as súas [[Special:Preferences|preferencias de {{SITENA
 'gotaccountlink' => 'Acceda ao sistema',
 'userlogin-resetlink' => 'Esqueceu os seus datos de rexistro?',
 'userlogin-resetpassword-link' => 'Esqueceu o contrasinal?',
-'helplogin-url' => 'Help:Rexistro',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Axuda co rexistro]]',
 'userlogin-loggedin' => 'Xa accedeu ao sistema como {{GENDER:$1|$1}}.
 Utilice o formulario inferior para acceder como outro usuario.',
 'userlogin-createanother' => 'Crear outra conta',
@@ -837,6 +833,9 @@ Por favor, agarde $1 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.',
 'createacct-another-realname-tip' => 'O nome real é opcional.
 Se escolle dalo utilizarase para atribuír ao usuario o seu traballo.',
+'pt-login' => 'Acceder ao sistema',
+'pt-createaccount' => 'Crear unha conta',
+'pt-userlogout' => 'Saír',
 
 # Email sending
 'php-mail-error-unknown' => 'Erro descoñecido na función mail() do PHP.',
@@ -845,7 +844,7 @@ Se escolle dalo utilizarase para atribuír ao usuario o seu traballo.',
 
 # Change password dialog
 'changepassword' => 'Cambiar o contrasinal',
-'resetpass_announce' => 'Debe rexistrarse co código temporal que recibiu por correo electrónico. Para finalizar o rexistro debe indicar un novo contrasinal aquí:',
+'resetpass_announce' => 'Para finalizar o rexistro debe indicar un novo contrasinal.',
 'resetpass_text' => '<!-- Engadir texto aquí -->',
 'resetpass_header' => 'Cambiar o contrasinal da conta',
 'oldpassword' => 'Contrasinal antigo:',
@@ -861,8 +860,13 @@ Por favor, agarde $1 antes de probar outra vez.',
 'resetpass-submit-cancel' => 'Cancelar',
 'resetpass-wrong-oldpass' => 'O contrasinal temporal ou actual é incorrecto.
 Pode ser que xa cambiase o seu contrasinal ou que solicitase un novo contrasinal temporal.',
+'resetpass-recycled' => 'Cambie o seu contrasinal por un distinto do actual.',
+'resetpass-temp-emailed' => 'Accedeu cun código temporal.
+Para completar o acceso, defina un novo contrasinal aquí:',
 'resetpass-temp-password' => 'Contrasinal temporal:',
 'resetpass-abort-generic' => 'Unha extensión cancelou a modificación do contrasinal.',
+'resetpass-expired' => 'O seu contrasinal caducou. Defina un novo contrasinal para acceder.',
+'resetpass-expired-soft' => 'O seu contrasinal caducou e debe restablecelo. Escolla un novo contrasinal ou prema en "{{int:resetpass-submit-cancel}}" para restablecelo máis tarde.',
 
 # Special:PasswordReset
 'passwordreset' => 'Restablecer o contrasinal',
@@ -1136,7 +1140,7 @@ Esta xa existe.',
 'invalid-content-data' => 'Datos de contido inválidos',
 'content-not-allowed-here' => 'O contido "$1" non está permitido na páxina "[[$2]]"',
 'editwarning-warning' => 'Deixar esta páxina pode causar a perda de calquera cambio feito.
-Se accedeu ao sistema, pode desactivar esta mensaxe de advertencia na sección "Edición" das súas preferencias.',
+Se accedeu ao sistema, pode desactivar esta mensaxe de advertencia na sección "{{int:prefs-editing}}" das súas preferencias.',
 'editpage-notsupportedcontentformat-title' => 'Formato de contido non admitido',
 'editpage-notsupportedcontentformat-text' => 'O formato de contido $1 non é compatible co modelo de contido $2.',
 
@@ -1173,6 +1177,7 @@ Estes argumentos foron omitidos.",
 Comprobe a comparación que aparece a continuación para confirmar que isto é o que desexa facer; despois, garde os cambios para desfacer a edición.',
 'undo-failure' => 'Non se pode desfacer a edición debido a un conflito con algunha das edicións intermedias.',
 'undo-norev' => 'A edición non se pode desfacer porque non existe ou foi eliminada.',
+'undo-nochange' => 'Semella que alguén xa desfixo a edición.',
 'undo-summary' => 'Desfíxose a edición $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|conversa]])',
 'undo-summary-username-hidden' => 'Desfíxose a edición $1 dun usuario agochado',
 
@@ -1202,7 +1207,7 @@ A razón que deu $3 foi ''$2''.",
 'page_last' => 'derradeira',
 'histlegend' => "Selección de diferenzas: Marque as versións que queira comparar e prema no botón ao final.<br />
 Lenda: '''({{int:cur}})''' = diferenza coa versión actual, '''({{int:last}})''' = diferenza coa versión precedente, '''{{int:minoreditletter}}''' = edición pequena.",
-'history-fieldset-title' => 'Navegar polo historial',
+'history-fieldset-title' => 'Explorar o historial',
 'history-show-deleted' => 'Borrados soamente',
 'histfirst' => 'as máis antigas',
 'histlast' => 'as máis novas',
@@ -1258,8 +1263,6 @@ función, a revisión especificada non existe ou está intentando agochar a revi
 'revdelete-show-file-submit' => 'Si',
 'revdelete-selected' => "'''{{PLURAL:\$2|Revisión seleccionada|Revisións seleccionadas}} de \"[[:\$1]]\":'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Rexistro de evento seleccionado|Rexistro de eventos seleccionados}}:'''",
-'revdelete-text' => "'''As revisións borradas seguirán aparecendo no historial da páxina e nos rexistros, pero partes do seu contido serán inaccesibles de cara ao público.'''
-Os demais administradores de {{SITENAME}} poderán acceder ao contido agochado e poderán restaurar a páxina de novo a través desta mesma interface, a non ser que se estableza algunha restrición adicional.",
 'revdelete-confirm' => 'Por favor, confirme que quere levar a cabo esta acción, que comprende as consecuencias e que o fai de acordo [[{{MediaWiki:Policy-url}}|coas políticas]].',
 'revdelete-suppress-text' => "A eliminación '''unicamente''' debería utilizarse nos seguintes casos:
 * Información potencialmente difamatoria
@@ -1401,6 +1404,7 @@ O [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rexistro de borrad
 'searchrelated' => 'relacionado',
 'searchall' => 'todo',
 'showingresults' => "{{PLURAL:$1|Móstrase '''1''' resultado|Móstranse '''$1''' resultados}}, comezando polo número '''$2'''.",
+'showingresultsinrange' => '{{PLURAL:$1|Móstrase <strong>1</strong> resultado|Móstranse <strong>$1</strong> resultados}}, comezando polo número <strong>$2</strong> e rematando polo número <strong>$3</strong>.',
 'showingresultsnum' => "A continuación {{PLURAL:$3|móstrase '''1''' resultado|móstranse '''$3''' resultados}}, comezando polo número '''$2'''.",
 'showingresultsheader' => "{{PLURAL:\$5|Resultado '''\$1''' de '''\$3'''|Resultados do '''\$1''' ao '''\$2''', dun total de '''\$3''',}} para \"'''\$4'''\"",
 'search-nonefound' => 'Non se atopou ningún resultado que coincidise coa procura.',
@@ -1721,14 +1725,26 @@ Se escolle dalo utilizarase para atribuírlle o seu traballo.',
 'recentchanges-legend-heading' => "'''Lenda:'''",
 'recentchanges-legend-newpage' => '(véxase tamén a [[Special:NewPages|lista de páxinas novas]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "A continuación móstranse os cambios feitos desde o '''$3''' ás '''$4''' (móstranse '''$1''' como máximo).",
-'rclistfrom' => 'Mostrar os cambios novos desde o $1',
+'rcnotefrom' => 'A continuación móstranse os cambios feitos desde o <strong>$3</strong> ás <strong>$4</strong> (móstranse <strong>$1</strong> como máximo).',
+'rclistfrom' => 'Mostrar os cambios novos desde o $3 ás $2',
 'rcshowhideminor' => '$1 as edicións pequenas',
+'rcshowhideminor-show' => 'Mostrar',
+'rcshowhideminor-hide' => 'Agochar',
 'rcshowhidebots' => '$1 os bots',
+'rcshowhidebots-show' => 'Mostrar',
+'rcshowhidebots-hide' => 'Agochar',
 'rcshowhideliu' => '$1 os usuarios rexistrados',
+'rcshowhideliu-show' => 'Mostrar',
+'rcshowhideliu-hide' => 'Agochar',
 'rcshowhideanons' => '$1 os usuarios anónimos',
+'rcshowhideanons-show' => 'Mostrar',
+'rcshowhideanons-hide' => 'Agochar',
 'rcshowhidepatr' => '$1 as edicións revisadas',
+'rcshowhidepatr-show' => 'Mostrar',
+'rcshowhidepatr-hide' => 'Agochar',
 'rcshowhidemine' => '$1 as edicións propias',
+'rcshowhidemine-show' => 'Mostrar',
+'rcshowhidemine-hide' => 'Agochar',
 'rclinks' => 'Mostrar os últimos $1 cambios nos últimos $2 días.<br />$3',
 'diff' => 'dif',
 'hist' => 'hist',
@@ -1859,6 +1875,8 @@ Debería contactar con alguén capaz de ver os datos de ficheiros borrados para
 'uploaddisabledtext' => 'A carga de ficheiros está desactivada.',
 'php-uploaddisabledtext' => 'As cargas de ficheiros PHP están desactivadas. Por favor, comprobe a característica file_uploads.',
 'uploadscripted' => 'Este ficheiro contén código HTML ou script que pode producir erros ao ser interpretado polo navegador.',
+'uploadscriptednamespace' => 'Este ficheiro SVG contén o espazo de nomes non permitido "$1"',
+'uploadinvalidxml' => 'Non se puido analizar o XML do ficheiro cargado.',
 'uploadvirus' => 'O ficheiro contén un virus! Detalles: $1',
 'uploadjava' => 'O ficheiro é un ZIP que contén un ficheiro .class de Java.
 Non están permitidas as cargas de ficheiros Java, dado que poden causar restricións de seguridade.',
@@ -2233,10 +2251,20 @@ As entradas <del>riscadas</del> xa foron resoltas.',
 'deadendpagestext' => 'Estas páxinas non ligan con ningunha outra páxina de {{SITENAME}}.',
 'protectedpages' => 'Páxinas protexidas',
 'protectedpages-indef' => 'Só as proteccións indefinidas',
+'protectedpages-summary' => 'Esta páxina lista as páxinas existentes que están protexidas actualmente. Para obter unha lista de páxinas cuxa creación está prohibida, consulte [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Só as proteccións en serie',
 'protectedpages-noredirect' => 'Agochar as redireccións',
 'protectedpagesempty' => 'Actualmente non hai ningunha páxina protexida con eses parámetros.',
+'protectedpages-timestamp' => 'Data e hora',
+'protectedpages-page' => 'Páxina',
+'protectedpages-expiry' => 'Caduca',
+'protectedpages-performer' => 'Protector',
+'protectedpages-params' => 'Parámetros da protección',
+'protectedpages-reason' => 'Motivo',
+'protectedpages-unknown-timestamp' => 'Descoñecido',
+'protectedpages-unknown-performer' => 'Usuario descoñecido',
 'protectedtitles' => 'Títulos protexidos',
+'protectedtitles-summary' => 'Esta páxina lista os títulos que están protexidos actualmente fronte á creación. Para obter unha lista de páxinas existentes protexidas, consulte [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Actualmente non hai ningún título protexido con eses parámetros.',
 'listusers' => 'Lista de usuarios',
 'listusers-editsonly' => 'Mostrar só os usuarios con edicións',
@@ -2513,7 +2541,7 @@ Limitouse a eliminación destas páxinas para previr problemas de funcionamento
 'delete-warning-toobig' => 'Esta páxina conta cun historial de edicións longo, de máis {{PLURAL:$1|dunha revisión|de $1 revisións}}.
 Ao eliminala pódense provocar problemas de funcionamento nas operacións da base de datos de {{SITENAME}};
 proceda con coidado.',
-'deleting-backlinks-warning' => "'''Atención:''' Outras páxinas conteñen unha ligazón ou unha transclusión da páxina que está a piques de borrar.",
+'deleting-backlinks-warning' => "'''Atención:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Outras páxinas]] conteñen unha ligazón ou unha transclusión da páxina que está a piques de borrar.",
 
 # Rollback
 'rollback' => 'Reverter as edicións',
@@ -2690,8 +2718,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Este enderezo IP está bloqueado.
 Velaquí está a última entrada do rexistro de bloqueos, por se quere consultala:',
 'sp-contributions-search' => 'Busca de contribucións',
+'sp-contributions-suppresslog' => 'contribucións borradas do usuario',
 'sp-contributions-username' => 'Enderezo IP ou nome de usuario:',
 'sp-contributions-toponly' => 'Mostrar só as últimas revisións',
+'sp-contributions-newonly' => 'Mostrar só as edicións que crearon páxinas',
 'sp-contributions-submit' => 'Procurar',
 
 # What links here
@@ -2793,7 +2823,7 @@ Olle a [[Special:BlockList|lista de bloqueos]] para revisalo.',
 'change-blocklink' => 'cambiar o bloqueo',
 'contribslink' => 'contribucións',
 'emaillink' => 'enviar un correo',
-'autoblocker' => 'Foi autobloqueado porque "[[User:$1|$1]]" usou recentemente o seu  mesmo enderezo IP.
+'autoblocker' => 'Foi bloqueado automaticamente porque "[[User:$1|$1]]" usou recentemente o seu mesmo enderezo IP.
 O motivo do bloqueo de $1 é: "$2"',
 'blocklogpage' => 'Rexistro de bloqueos',
 'blocklog-showlog' => 'Este usuario xa foi bloqueado con anterioridade. Velaquí está o rexistro de bloqueos por se quere consultalo:',
@@ -3000,6 +3030,7 @@ $2',
 'thumbnail_image-type' => 'Tipo de imaxe non soportado',
 'thumbnail_gd-library' => 'Configuración da libraría GD incompleta: Falta a función $1',
 'thumbnail_image-missing' => 'Parece que falta o ficheiro: $1',
+'thumbnail_image-failure-limit' => 'Producíronse demasiados ($1 ou máis) intentos fallidos recentes de renderizar esta miniatura. Inténteo de novo máis tarde.',
 
 # Special:Import
 'import' => 'Importar páxinas',
@@ -3957,7 +3988,7 @@ Tamén pode [[Special:EditWatchlist|empregar o editor normal]].',
 'version-ext-colheader-credits' => 'Autores',
 'version-license-title' => 'Licenza para $1',
 'version-license-not-found' => 'Non se atopou información detallada de licenza para esta extensión.',
-'version-credits-title' => 'Receñecemento para $1',
+'version-credits-title' => 'Recoñecemento para $1',
 'version-credits-not-found' => 'Non se atopou información detallada de recoñecemento para esta extensión.',
 'version-poweredby-credits' => "Este wiki está desenvolvido por '''[https://www.mediawiki.org/wiki/MediaWiki/gl MediaWiki]''', dereitos de autoría © 2001-$1 $2.",
 'version-poweredby-others' => 'outros',
@@ -4237,6 +4268,4 @@ De feito, expande case calquera cousa entre dúas chaves.',
 'expand_templates_generate_rawhtml' => 'Mostrar o HTML en bruto',
 'expand_templates_preview' => 'Vista previa',
 
-# Unknown messages
-'uploadinvalidxml' => 'Non se puido analizar o XML do ficheiro cargado.',
 );
index 7de827d..8865d9b 100644 (file)
@@ -38,7 +38,6 @@ $namespaceGenderAliases = array();
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Haiguy joajuha',
-'tog-justify' => 'embojoja haipyvo',
 'tog-hideminor' => 'Eñomi ñemyatyrõ michĩva «ñemoambue pyahúpe»',
 'tog-extendwatchlist' => 'Eipyso tembiapo rapykueho rysýi opaite ñemoambue ikatúvape',
 'tog-usenewrc' => "Ñemoambue ojejapo ramóva (ndoikói opaite 'navegador'-pe)",
@@ -247,7 +246,6 @@ Reikotevẽvérõ marandu, emoñe'ẽ kuatiarogue ñepytyvõ rehegua. Oiméramo
 # Diffs
 'lineno' => 'Jehai $1:',
 'editundo' => 'embyai',
-'diff-multi' => '($1 ediciones intermedias no se muestran.)',
 
 # Search results
 'searchresults' => 'Ojejuhúva jeheka',
@@ -283,7 +281,6 @@ Reikotevẽvérõ marandu, emoñe'ẽ kuatiarogue ñepytyvõ rehegua. Oiméramo
 # Recent changes
 'nchanges' => '$1 ñemoambue',
 'recentchanges' => 'Oñemoambue pyahúva',
-'rcnote' => "Iguýpe oĩ umi {{PLURAL:$1|'''1'''|$1}} oñemoambue pyahúva ko ara{{PLURAL:$2|'''1'''|$2}}ndýpe, hekopyahúva $5, $4.",
 'rclistfrom' => 'Tojehechauka oñemoambue pyahúva $1 guive',
 'rcshowhideminor' => '$1 jehaijey michĩva',
 'rcshowhideliu' => '$1 puruhára ohejáva teraguapy',
index ea1c5b5..6c71d69 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Bleakgh
  * @author Jocke Pirat
  * @author Michawiki
  * @author Node ue
@@ -35,306 +36,363 @@ $specialPageAliases = array(
 
 $messages = array(
 'underline-always' => 'Sinteino',
-'underline-never'  => 'Niu',
+'underline-never' => 'Niu',
 
 # Dates
-'sunday'        => 'Sunnonsdags',
-'monday'        => 'Meninsdags',
-'tuesday'       => 'Tiwisdags',
-'wednesday'     => 'Midiwiko',
-'thursday'      => 'Þeiƕonsdags',
-'friday'        => 'Fraujonsdags',
-'saturday'      => '𐌸𐍅𐌰𐌷𐌻𐌹𐍃𐌳𐌰𐌲𐍃',
-'sun'           => 'Sun',
-'mon'           => 'Men',
-'tue'           => 'Tiw',
-'wed'           => 'Mid',
-'thu'           => 'Þei',
-'fri'           => 'Fra',
-'sat'           => 'Þwa',
-'january'       => '𐌰𐍆𐍄𐌿𐌼𐌰 𐌾𐌹𐌿𐌻𐌴𐌹𐍃',
-'february'      => '𐍆𐌰𐌽𐌹𐌼𐌴𐌽𐍉𐌸𐍃',
-'march'         => '𐌺𐌰𐌻𐌳𐌼𐌴𐌽𐍉𐌸𐍃',
-'april'         => '𐌲𐍂𐌰𐍃𐌼𐌴𐌽𐍉𐌸𐍃',
-'may_long'      => '𐌱𐌻𐍉𐌼𐌰𐌼𐌴𐌽𐍉𐌸𐍃',
-'june'          => '𐍅𐌰𐍂𐌼𐌼𐌴𐌽𐍉𐌸𐍃',
-'july'          => '𐌷𐌰𐍅𐌹𐌼𐌴𐌽𐍉𐌸𐍃',
-'august'        => '𐌰𐍃𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐍃',
-'september'     => '𐌰𐌺𐍂𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐍃',
-'october'       => '𐍅𐌴𐌹𐌽𐌼𐌴𐌽𐍉𐌸𐍃',
-'november'      => '𐍆𐍂𐌿𐌼𐌰 𐌾𐌹𐌿𐌻𐌴𐌹𐍃',
-'december'      => '𐌾𐌹𐌿𐌻𐌴𐌹𐍃',
-'january-gen'   => '𐌰𐍆𐍄𐌿𐌼𐌹𐌽𐍃 𐌾𐌹𐌿𐌻𐌴𐌹𐍃',
-'february-gen'  => '𐍆𐌰𐌽𐌹𐌼𐌴𐌽𐍉𐌸𐌹𐍃',
-'march-gen'     => 'Kaldmenoþis',
-'april-gen'     => '𐌲𐍂𐌰𐍃𐌼𐌴𐌽𐍉𐌸𐌹𐍃',
-'may-gen'       => '𐌱𐌻𐍉𐌼𐌰𐌼𐌴𐌽𐍉𐌸𐌹𐍃',
-'june-gen'      => 'Warmmenoþis',
-'july-gen'      => 'Hawimenoþis',
-'august-gen'    => '𐌰𐍃𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃',
+'sunday' => 'Sunnonsdags',
+'monday' => 'Meninsdags',
+'tuesday' => 'Tiwisdags',
+'wednesday' => 'Midiwiko',
+'thursday' => 'Þeiƕonsdags',
+'friday' => 'Fraujonsdags',
+'saturday' => '𐌸𐍅𐌰𐌷𐌻𐌹𐍃𐌳𐌰𐌲𐍃',
+'sun' => '𐍃𐌿𐌽',
+'mon' => '𐌼𐌴𐌽',
+'tue' => '𐌰𐍂𐌴',
+'wed' => '𐍅𐍉𐌳',
+'thu' => '𐍀𐌰𐌹',
+'fri' => '𐍆𐍂𐌹',
+'sat' => '𐍃𐌰𐌼',
+'january' => '𐌰𐍆𐍄𐌿𐌼𐌰 𐌾𐌹𐌿𐌻𐌴𐌹𐍃',
+'february' => '𐍆𐌰𐌽𐌹𐌼𐌴𐌽𐍉𐌸𐍃',
+'march' => '𐌺𐌰𐌻𐌳𐌼𐌴𐌽𐍉𐌸𐍃',
+'april' => '𐌲𐍂𐌰𐍃𐌼𐌴𐌽𐍉𐌸𐍃',
+'may_long' => '𐌱𐌻𐍉𐌼𐌰𐌼𐌴𐌽𐍉𐌸𐍃',
+'june' => '𐍅𐌰𐍂𐌼𐌼𐌴𐌽𐍉𐌸𐍃',
+'july' => '𐌷𐌰𐍅𐌹𐌼𐌴𐌽𐍉𐌸𐍃',
+'august' => '𐌰𐍃𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐍃',
+'september' => '𐌰𐌺𐍂𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐍃',
+'october' => '𐍅𐌴𐌹𐌽𐌼𐌴𐌽𐍉𐌸𐍃',
+'november' => '𐍆𐍂𐌿𐌼𐌰 𐌾𐌹𐌿𐌻𐌴𐌹𐍃',
+'december' => '𐌾𐌹𐌿𐌻𐌴𐌹𐍃',
+'january-gen' => '𐌰𐍆𐍄𐌿𐌼𐌹𐌽𐍃 𐌾𐌹𐌿𐌻𐌴𐌹𐍃',
+'february-gen' => '𐍆𐌰𐌽𐌹𐌼𐌴𐌽𐍉𐌸𐌹𐍃',
+'march-gen' => '𐌺𐌰𐌻𐌳𐌼𐌴𐌽𐍉𐌸𐌹𐍃',
+'april-gen' => '𐌲𐍂𐌰𐍃𐌼𐌴𐌽𐍉𐌸𐌹𐍃',
+'may-gen' => '𐌱𐌻𐍉𐌼𐌰𐌼𐌴𐌽𐍉𐌸𐌹𐍃',
+'june-gen' => '𐍅𐌰𐍂𐌼𐌼𐌴𐌽𐍉𐌸𐌹𐍃',
+'july-gen' => '𐌷𐌰𐍅𐌹𐌼𐌴𐌽𐍉𐌸𐌹𐍃',
+'august-gen' => '𐌰𐍃𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃',
 'september-gen' => '𐌰𐌺𐍂𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃',
-'october-gen'   => '𐍅𐌴𐌹𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃',
-'november-gen'  => '𐍆𐍂𐌿𐌼𐌹𐌽𐍃 𐌾𐌹𐌿𐌻𐌴𐌹𐍃',
-'december-gen'  => '𐌾𐌹𐌿𐌻𐌴𐌹𐍃',
-'jan'           => '𐌰𐍆𐍄',
-'feb'           => 'Fan',
-'mar'           => 'Kal',
-'apr'           => '𐌲𐍂𐌰',
-'may'           => '𐌱𐌻𐍉',
-'jun'           => 'War',
-'jul'           => 'Haw',
-'aug'           => '𐌰𐍃𐌰',
-'sep'           => '𐌰𐌺𐍂',
-'oct'           => '𐍅𐌴𐌹',
-'nov'           => '𐍆𐍂𐌿',
-'dec'           => '𐌾𐌹𐌿',
+'october-gen' => '𐍅𐌴𐌹𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃',
+'november-gen' => '𐍆𐍂𐌿𐌼𐌹𐌽𐍃 𐌾𐌹𐌿𐌻𐌴𐌹𐍃',
+'december-gen' => '𐌾𐌹𐌿𐌻𐌴𐌹𐍃',
+'jan' => '𐌰𐍆𐍄',
+'feb' => '𐍆𐌰𐌽',
+'mar' => '𐌺𐌰𐌻',
+'apr' => '𐌲𐍂𐌰',
+'may' => '𐌱𐌻𐍉',
+'jun' => '𐍅𐌰𐍂',
+'jul' => '𐌷𐌰𐍅',
+'aug' => '𐌰𐍃𐌰',
+'sep' => '𐌰𐌺𐍂',
+'oct' => '𐍅𐌴𐌹',
+'nov' => '𐍆𐍂𐌿',
+'dec' => '𐌾𐌹𐌿',
 
 # Categories related messages
-'pagecategories'        => '{{PLURAL:$1|𐌺𐌿𐌽𐌾𐌰|𐌺𐌿𐌽𐌾𐍉𐍃}}',
-'category_header'       => '𐍃𐌴𐌹𐌳𐍉𐍃 𐌹𐌽𐌽 𐌺𐌿𐌽𐌾𐌰 "$1"',
-'subcategories'         => 'Dalaþkunjos',
+'pagecategories' => '{{PLURAL:$1|𐌷𐌰𐌽𐍃𐌰|𐌷𐌰𐌽𐍃𐍉𐍃}}',
+'category_header' => '𐍃𐌴𐌹𐌳𐍉𐍃 𐌹𐌽𐌽 𐌺𐌿𐌽𐌾𐌰 "$1"',
+'subcategories' => 'Dalaþkunjos',
 'category-media-header' => '𐌼𐌴𐌳𐌾𐌰 𐌹𐌽𐌽 𐌺𐌿𐌽𐌾𐌰 "$1"',
+'hidden-categories' => '{{PLURAL:$1|𐍆𐌿𐌻𐌲𐌹𐌽𐍃 𐌺𐌰𐍄𐌴𐌲𐍉𐍂𐌹|𐍆𐌿𐌻𐌲𐌹𐌽𐌰𐌹 𐌺𐌰𐍄𐌴𐌲𐍉𐍂𐌾𐍉𐍃}}',
 
-'about'         => '𐌿𐍆𐌰𐍂',
-'article'       => '𐍃𐌰𐌸𐍃𐍃𐌴𐌹𐌳𐍉',
-'newwindow'     => '(𐌰𐌽𐌳𐌷𐌿𐌻𐌾𐌹𐌸 𐌹𐌽𐌽 𐌽𐌹𐌿𐌾𐌰 𐌰𐌿𐌲𐌰𐌳𐌰𐌿𐍂𐍉)',
-'cancel'        => '𐌷𐌰𐌻𐍄𐍃',
+'about' => '𐌿𐍆𐌰𐍂',
+'article' => '𐍃𐌰𐌸𐍃𐍃𐌴𐌹𐌳𐍉',
+'newwindow' => '(𐌰𐌽𐌳𐌷𐌿𐌻𐌾𐌹𐌸 𐌹𐌽𐌽 𐌽𐌹𐌿𐌾𐌰 𐌰𐌿𐌲𐌰𐌳𐌰𐌿𐍂𐍉)',
+'cancel' => '𐌷𐌰𐌻𐍄𐍃',
 'moredotdotdot' => '𐌼𐌰𐌹𐍃...',
-'mypage'        => '𐌼𐌴𐌹𐌽 𐍃𐌴𐌹𐌳𐍉',
-'mytalk'        => '𐌼𐌴𐌹𐌽𐌰 𐌼𐌰𐌸𐌻𐌴𐌹',
-'navigation'    => '𐍃𐌴𐌹𐌳𐍉𐌲𐌰𐍅𐌹𐍃𐍃',
-'and'           => '𐌾𐌰𐌷',
+'mypage' => '𐌼𐌴𐌹𐌽 𐍃𐌴𐌹𐌳𐍉',
+'mytalk' => '𐌼𐌴𐌹𐌽𐌰 𐌼𐌰𐌸𐌻𐌴𐌹',
+'navigation' => '𐍅𐌹𐌲𐌰𐍄𐌰𐌿𐌷𐍄𐍃',
+'and' => '𐌾𐌰𐌷',
 
 # Cologne Blue skin
-'qbfind'         => '𐍃𐍉𐌺𐌴𐌹𐌸',
-'qbedit'         => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽',
-'qbmyoptions'    => '𐌼𐌴𐌹𐌽𐌰 𐍃𐌴𐌹𐌳𐍉𐍃',
-'qbspecialpages' => '𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐍃',
+'qbfind' => '𐍃𐍉𐌺𐌴𐌹𐌸',
+'qbedit' => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽',
+'qbmyoptions' => '𐌼𐌴𐌹𐌽𐌰 𐍃𐌴𐌹𐌳𐍉𐍃',
 
 # Vector skin
 'vector-action-delete' => '𐍄𐌰𐌹𐍂𐌰𐌽',
-'vector-view-create'   => 'Skapjan',
-'vector-view-edit'     => 'Máidjan',
-'vector-view-view'     => 'Lisan',
-
-'errorpagetitle'    => '𐍆𐌰𐌹𐍂𐌹𐌽𐌰 𐌳𐍅𐌰𐌻𐌹𐍃',
-'returnto'          => '𐌲𐌰𐍅𐌰𐌽𐌳𐌾𐌰𐌽 𐌰𐍄 $1.',
-'tagline'           => 'Fram {{SITENAME}}',
-'help'              => '𐌷𐌹𐌻𐍀𐌰',
-'search'            => '𐍃𐍉𐌺𐌴𐌹𐌸',
-'searchbutton'      => '𐍃𐍉𐌺𐌴𐌹𐌸',
-'go'                => '𐌲𐌰𐌲𐌲𐌰',
-'searcharticle'     => '𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽',
-'history'           => '𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐍉',
-'history_short'     => '𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃',
-'printableversion'  => '𐌳𐍂𐌹𐌿𐍃𐌰𐌽 𐍃𐌴𐌹𐌳𐍉',
-'permalink'         => '𐌰𐍅𐌴𐌹𐌽𐍃 𐍄𐌰𐌹𐌺𐌽𐌾𐌰𐌱𐌰𐌽𐌳𐌹',
-'view'              => 'Saíhvan',
-'edit'              => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽',
-'create'            => 'Skapjan',
-'editthispage'      => '𐌼𐌰𐌹𐌳𐌾𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉',
-'create-this-page'  => 'Skapja þo seido',
-'delete'            => '𐍄𐌰𐌹𐍂𐌰𐌽',
-'deletethispage'    => '𐍄𐌰𐌹𐍂𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉',
-'protect'           => '𐌱𐌰𐌹𐍂𐌲𐌰𐌽',
-'protectthispage'   => 'Baírga þo siedo',
-'unprotect'         => '𐌽𐌹𐌱𐌰𐌹𐍂𐌲𐌰',
+'vector-view-create' => '𐍃𐌺𐌰𐍀𐌾𐌰𐌽',
+'vector-view-edit' => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽',
+'vector-view-history' => '𐍃𐌰𐌹𐍈𐌰𐌽 𐍅𐌰𐌿𐍂𐌸𐌰𐌽𐌽𐌰',
+'vector-view-view' => '𐌰𐌽𐌰𐌺𐌿𐌽𐌽𐌰𐌹𐍃',
+'vector-view-viewsource' => '𐍃𐌰𐌹𐍈𐌹𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽',
+'actions' => '𐍅𐌰𐌿𐍂𐍃𐍄𐍅𐌴𐌹𐌽𐍃',
+'namespaces' => '𐍃𐌴𐌹𐌳𐍉𐍃𐍄𐌰𐌸𐌴𐌹𐍃',
+'variants' => '𐌼𐌹𐍃𐍃𐌰𐌻𐌴𐌹𐌽𐍃',
+
+'errorpagetitle' => '𐍆𐌰𐌹𐍂𐌹𐌽𐌰 𐌳𐍅𐌰𐌻𐌹𐍃',
+'returnto' => '𐌲𐌰𐍅𐌰𐌽𐌳𐌾𐌰𐌽 𐌰𐍄 $1.',
+'tagline' => '𐍆𐍂𐌰𐌼 {{SITENAME}}',
+'help' => '𐌷𐌹𐌻𐍀𐌰',
+'search' => '𐍃𐍉𐌺𐌾𐌰𐌽',
+'searchbutton' => '𐍃𐍉𐌺𐌾𐌰𐌽',
+'go' => '𐌲𐌰𐌲𐌲𐌰',
+'searcharticle' => '𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽',
+'history' => '𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐍉',
+'history_short' => '𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃',
+'printableversion' => '𐍅𐍂𐌴𐌹𐍄𐌼𐌰𐌷𐍄𐌴𐌹𐌲 𐍃𐌴𐌹𐌳𐍉',
+'permalink' => '𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉 𐍃𐍄𐌰𐌽𐌳𐌰𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐌰',
+'view' => 'Saíhvan',
+'edit' => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽',
+'create' => '𐍃𐌺𐌰𐍀𐌾𐌰𐌽',
+'editthispage' => '𐌼𐌰𐌹𐌳𐌾𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉',
+'create-this-page' => 'Skapja þo seido',
+'delete' => '𐍄𐌰𐌹𐍂𐌰𐌽',
+'deletethispage' => '𐍄𐌰𐌹𐍂𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉',
+'protect' => '𐌱𐌰𐌹𐍂𐌲𐌰𐌽',
+'protect_change' => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽',
+'protectthispage' => 'Baírga þo siedo',
+'unprotect' => '𐌽𐌹𐌱𐌰𐌹𐍂𐌲𐌰',
 'unprotectthispage' => 'Nibaírga þo siedo',
-'newpage'           => '𐌽𐌹𐌿𐌾𐌰 𐍃𐌴𐌹𐌳𐍉',
-'talkpage'          => '𐌼𐌰𐌸𐌻𐌴𐌹𐍃𐌴𐌹𐌳𐍉',
-'talkpagelinktext'  => '𐌼𐌰𐌸𐌻𐌴𐌹𐍃𐌴𐌹𐌳𐍉',
-'specialpage'       => '𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐍃',
-'personaltools'     => '𐍅𐌰𐌹𐍂𐌻𐌴𐌹𐌺𐍃 𐌱𐍂𐌿𐌺𐍅𐌰𐌹𐌷𐍄𐍃',
-'talk'              => '𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
-'views'             => '𐍃𐌹𐌿𐌽𐌴𐌹𐍃',
-'toolbox'           => '𐍄𐌰𐌿𐌹 𐌰𐍂𐌺𐌰',
-'otherlanguages'    => '𐌰𐌽𐌸𐌰𐍂 𐍂𐌰𐌶𐌳𐍉𐍃',
-'redirectedfrom'    => '(Náuþjan framis $1)',
-'redirectpagesub'   => '𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉',
-'jumpto'            => 'Gaggan at:',
-'jumptonavigation'  => '𐍃𐌴𐌹𐌳𐍉𐌲𐌰𐍅𐌹𐍃𐍃',
-'jumptosearch'      => 'sokeiþ',
-
-# 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:𐌿𐍆𐌰𐍂',
-'copyrightpage'        => '{{ns:project}}:Manleikawitoþa',
-'currentevents'        => 'Niuja waíhts',
-'currentevents-url'    => 'Project:𐌽𐌹𐌿𐌾𐌰 𐍅𐌰𐌹𐌷𐍄𐍃',
-'disclaimers'          => '𐌰𐍆𐌰𐌹𐌺𐌰𐌽 𐍅𐌹𐍄𐍉𐌸',
-'disclaimerpage'       => 'Project:𐌰𐍆𐌰𐌹𐌺𐌰𐌽 𐍅𐌹𐍄𐍉𐌸',
-'edithelp'             => '𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌷𐌹𐌻𐍀𐌰',
-'edithelppage'         => 'Help:𐌼𐌰𐌹𐌳𐌾𐌰',
-'helppage'             => 'Hilpa:Háubidaseido',
-'mainpage'             => '𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉',
+'newpage' => '𐌽𐌹𐌿𐌾𐌰 𐍃𐌴𐌹𐌳𐍉',
+'talkpage' => '𐌼𐌰𐌸𐌻𐌴𐌹𐍃𐌴𐌹𐌳𐍉',
+'talkpagelinktext' => '𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
+'specialpage' => '𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐍃',
+'personaltools' => '𐍅𐌰𐌹𐍂𐌻𐌴𐌹𐌺𐍃 𐌱𐍂𐌿𐌺𐍅𐌰𐌹𐌷𐍄𐍃',
+'talk' => '𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
+'views' => '𐌷𐌹𐍅𐌾𐍉𐍃',
+'toolbox' => '𐍄𐌰𐌿𐌹 𐌰𐍂𐌺𐌰',
+'otherlanguages' => '𐌰𐌽𐌸𐌰𐍂 𐍂𐌰𐌶𐌳𐍉𐍃',
+'redirectedfrom' => '(𐌽𐌰𐌿𐌸𐌾𐌰𐌽 𐍆𐍂𐌰𐌼𐌹𐍃 $1)',
+'redirectpagesub' => '𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉',
+'lastmodifiedat' => '𐌸𐌰𐍄𐌰 𐍃𐌴𐌹𐌳𐍉 𐍃𐌹𐌽𐌳 𐌼𐌰𐌽𐌰𐌲𐌹𐍃𐍄𐍃 𐌽𐌹𐌿𐌾𐌰 𐌼𐌰𐌹𐌳𐌾𐌹𐌸𐍃 ($2) ($1)',
+'jumpto' => '𐌲𐌰𐌲𐌲𐌰𐌽 𐌰𐍄:',
+'jumptonavigation' => '𐍃𐌴𐌹𐌳𐍉𐌲𐌰𐍅𐌹𐍃𐍃',
+'jumptosearch' => '𐍃𐍉𐌺𐌴𐌹𐌸',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
+'aboutsite' => '𐍆𐍂𐌰𐌼 {{SITENAME}}',
+'aboutpage' => 'Project:𐌿𐍆𐌰𐍂',
+'copyrightpage' => '{{ns:project}}:𐌼𐌰𐌽𐌻𐌴𐌹𐌺𐌰𐍅𐌹𐍄𐍉𐌸𐌰',
+'currentevents' => '𐌽𐌹𐌿𐌾𐌰 𐍅𐌰𐌹𐌷𐍄𐍃',
+'currentevents-url' => 'Project:𐌽𐌹𐌿𐌾𐌰 𐍅𐌰𐌹𐌷𐍄𐍃',
+'disclaimers' => '𐍅𐌰𐌳𐌾𐍉𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃',
+'disclaimerpage' => 'Project:𐍅𐌰𐌳𐌾𐌹𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃',
+'edithelp' => '𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌷𐌹𐌻𐍀𐌰',
+'helppage' => 'Help:𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉',
+'mainpage' => '𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉',
 'mainpage-description' => '𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉',
-'portal'               => '𐌱𐌰𐌿𐍂𐌲𐍃 𐌲𐌰𐍅𐌹',
-'portal-url'           => 'Project:𐌱𐌰𐌿𐍂𐌲𐍃 𐌲𐌰𐍅𐌹',
-'privacy'              => '𐌰𐌽𐌰𐍃𐌹𐌻𐌰 𐍅𐌹𐍄𐍉𐌸',
-'privacypage'          => 'Project:𐌰𐌽𐌰𐍃𐌹𐌻𐌰 𐍅𐌹𐍄𐍉𐌸',
-
-'retrievedfrom'       => 'Niman fram "$1"',
-'youhavenewmessages'  => '𐌸𐌿 𐌷𐌰𐌱𐌹𐍃 $1 ($2).',
-'newmessageslink'     => '𐌽𐌹𐌿𐌾𐍉 𐌼𐌰𐌸𐌻𐌴𐌹',
-'newmessagesdifflink' => '𐍃𐍀𐌴𐌳𐌿𐌼𐌹𐍃𐍄𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃',
-'editsection'         => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽',
-'editold'             => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽',
-'editlink'            => 'máidjan',
-'editsectionhint'     => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 𐍆𐌴𐍂𐌰: $1',
-'toc'                 => '𐌹𐌽𐌽𐌰𐌽𐌰',
-'showtoc'             => '𐌰𐌿𐌲𐌾𐌰',
-'hidetoc'             => '𐍆𐌹𐌻𐌷𐌰𐌽',
-'site-rss-feed'       => '$1 RSS Miþnatifodjan',
-'site-atom-feed'      => '$1 Atom Miþnatifodjan',
+'portal' => '𐌱𐌰𐌿𐍂𐌲𐌹𐍃 𐌲𐌰𐍅𐌹',
+'portal-url' => 'Project:𐌱𐌰𐌿𐍂𐌲𐌹𐍃 𐌲𐌰𐍅𐌹',
+'privacy' => '𐍃𐌿𐌽𐌳𐍂𐌰𐍅𐌿𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃',
+'privacypage' => 'Project:𐍃𐌿𐌽𐌳𐍂𐌰𐍅𐌴𐌹𐌽𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃',
+
+'retrievedfrom' => '𐌲𐌰𐌽𐌰𐌼 𐍆𐍂𐌰𐌼 "$1"',
+'youhavenewmessages' => '𐌸𐌿 𐌷𐌰𐌱𐌹𐍃 $1 ($2).',
+'editsection' => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽',
+'editold' => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽',
+'editlink' => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽',
+'viewsourcelink' => '𐍃𐌰𐌹𐍈𐌹𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽',
+'editsectionhint' => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌳𐌰𐌹𐌻: $1',
+'toc' => '𐌹𐌽𐌽𐌰𐌽𐌰',
+'showtoc' => '𐌰𐌿𐌲𐌾𐌰',
+'hidetoc' => '𐍆𐌹𐌻𐌷𐌰𐌽',
+'site-rss-feed' => '$1 RSS Miþnatifodjan',
+'site-atom-feed' => '$1 𐌰𐍄𐍉𐌼 𐌼𐌹𐌸𐌽𐌰𐍄𐌹𐍆𐍉𐌳𐌾𐌰𐌽',
+'page-atom-feed' => '"$1" 𐌰𐍄𐍉𐌼 𐍂𐌹𐌽𐌽𐍉',
+'red-link-title' => '$1 (𐍃𐌴𐌹𐌳𐍉 𐍃𐌹𐌽𐌳 𐌽𐌹𐍃𐍄)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => '𐍃𐌴𐌹𐌳𐍉',
-'nstab-user'     => '𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉',
-'nstab-special'  => '𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉',
-'nstab-project'  => '𐍂𐌴𐌹𐌺𐌹𐍃𐌴𐌹𐌳𐍉',
-'nstab-image'    => '𐌼𐌰𐌽𐌻𐌴𐌹𐌺𐌰',
-'nstab-template' => 'ð\90\8c¼ð\90\8c°ð\90\8d\82ð\90\8cºð\90\8c°',
-'nstab-help'     => '𐌷𐌹𐌻𐍀𐌰',
-'nstab-category' => 'ð\90\8cºð\90\8c¿ð\90\8c½ð\90\8c¾𐌰',
+'nstab-main' => '𐍃𐌴𐌹𐌳𐍉',
+'nstab-user' => '𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉',
+'nstab-special' => '𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉',
+'nstab-project' => '𐍂𐌴𐌹𐌺𐌹𐍃𐌴𐌹𐌳𐍉',
+'nstab-image' => '𐍆𐌴𐌹𐌻𐌰',
+'nstab-template' => 'ð\90\8d\86ð\90\8c°ð\90\8c¿ð\90\8d\82ð\90\8c°ð\90\8c¼ð\90\8c´ð\90\8c»ð\90\8c´ð\90\8c¹ð\90\8c½ð\90\8d\83',
+'nstab-help' => '𐌷𐌹𐌻𐍀𐌰',
+'nstab-category' => 'ð\90\8c·ð\90\8c°ð\90\8c½ð\90\8d\83𐌰',
 
 # General errors
-'viewsource' => '𐍃𐌰𐌹𐍈𐌰 𐌹𐌽𐌽𐌰𐌽𐌰',
+'missing-article' => '𐍃𐌰 𐌳𐌰𐍄𐌰𐌱𐌿𐍃 𐌽𐌹 𐌲𐌰𐌽𐌰𐌼 𐌸𐌰𐌽𐌰 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌽 𐌴𐌹 𐌹𐍄𐌰 𐍃𐌺𐌰𐌻 𐌱𐌹𐌲𐌹𐍄𐌰𐌽: "$1" $2
+
+(The data base did not find the text of a page that it should have found, named "$1" $2.
+
+This is usually caused by following an outdated diff or history link to a page that has been deleted.
+
+If this is not the case, you may have found a bug in the software.
+Please report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.)',
+'viewsource' => '𐍃𐌰𐌹𐍈𐌹𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽',
 
 # Login and logout pages
-'yourname'                => '𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐌽𐌰𐌼𐍉:',
-'yourpassword'            => '𐌰𐌽𐌰𐌻𐌰𐌿𐌲𐌽𐍃 𐍅𐌰𐌿𐍂𐌳𐌰:',
-'login'                   => 'Atgaggan',
+'yourname' => '𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐌽𐌰𐌼𐍉:',
+'yourpassword' => '𐌰𐌽𐌰𐌻𐌰𐌿𐌲𐌽𐍃 𐍅𐌰𐌿𐍂𐌳𐌰:',
+'login' => 'Atgaggan',
 'nav-login-createaccount' => '𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽 / 𐌲𐌰𐌻𐌰𐌽𐌲𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃',
-'userlogin'               => 'Atgaggan / gaskapjan niutandis',
-'logout'                  => '𐌻𐌴𐌹𐌸𐌰𐌽',
-'userlogout'              => '𐌻𐌴𐌹𐌸𐌰𐌽',
-'nologinlink'             => 'Gaskapjan þein niutandis',
-'createaccount'           => '𐌲𐌰𐌻𐌰𐌲𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃',
-'gotaccount'              => "Habiþ þu niutandis? '''$1'''",
-'gotaccountlink'          => 'Atgaggan',
-'loginlanguagelabel'      => 'Razda: $1',
+'userlogin' => 'Atgaggan / gaskapjan niutandis',
+'logout' => '𐌻𐌴𐌹𐌸𐌰𐌽',
+'userlogout' => '𐌻𐌴𐌹𐌸𐌰𐌽',
+'nologinlink' => 'Gaskapjan þein niutandis',
+'createaccount' => '𐌲𐌰𐌻𐌰𐌲𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃',
+'gotaccount' => "Habiþ þu niutandis? '''$1'''",
+'gotaccountlink' => 'Atgaggan',
+'loginlanguagelabel' => 'Razda: $1',
 
 # Edit page toolbar
-'bold_sample'     => '𐌰𐌱𐍂𐍃 𐌱𐍉𐌺𐌰',
-'bold_tip'        => '𐌰𐌱𐍂 𐍅𐌰𐌿𐍂𐌳𐌰',
-'italic_sample'   => 'Wráiqs waúrda',
-'italic_tip'      => 'Driuso boka',
-'link_sample'     => 'Táikjanbandi namo',
-'link_tip'        => 'táikjanbandi innana',
-'extlink_sample'  => 'http://www.example.com Táikjandandi namo',
-'extlink_tip'     => 'Uta táikjabandi (maúdjan http://)',
-'headline_sample' => 'Háubidawaúrda',
-'headline_tip'    => 'Háuhs háubidaboka 2',
-'media_tip'       => 'Táikjabandjis feilanis',
-'hr_tip'          => 'Ráihtsbáurd (brukjan miþ niufarussus)',
+'bold_sample' => '𐌰𐌱𐍂𐍃 𐌱𐍉𐌺𐌰',
+'bold_tip' => '𐌰𐌱𐍂 𐍅𐌰𐌿𐍂𐌳𐌰',
+'italic_sample' => '𐍅𐍂𐌰𐌹𐌵𐍃 𐍅𐌰𐌿𐍂𐌳𐌰',
+'italic_tip' => '𐌳𐍂𐌹𐌿𐍃𐍉 𐌱𐍉𐌺𐌰',
+'link_sample' => '𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌱𐌰𐌽𐌳𐌹 𐌽𐌰𐌼𐍉',
+'link_tip' => '𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌱𐌰𐌽𐌳𐌹 𐌹𐌽𐌽𐌰𐌽𐌰',
+'extlink_sample' => 'http://www.example.com 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌳𐌰𐌽𐌳𐌹 𐌽𐌰𐌼𐍉',
+'extlink_tip' => 'Uta táikjabandi (maúdjan http://)',
+'headline_sample' => '𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍅𐌰𐌿𐍂𐌳𐌰',
+'headline_tip' => '𐌷𐌰𐌿𐌷𐍃 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐌱𐍉𐌺𐌰 •𐌱•',
+'nowiki_sample' => '𐍃𐌰𐍄𐌾𐌴𐌹 𐌿𐌽𐍃𐌽𐌴𐌹𐌸𐌾𐌰𐌽𐌳𐍃 𐍄𐌴𐌺𐍃𐍄 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌼 𐌷𐌹𐍄',
+'nowiki_tip' => '𐌿𐌽𐍅𐌹𐍄𐌾𐌹𐍃 𐍅𐌹𐌺𐌹𐍃𐌽𐌴𐌹𐌸𐌾𐌰𐌽𐌳𐍃',
+'image_tip' => '𐌹𐌽𐌽𐌱𐍉𐌳𐌰𐌽𐍃 𐍆𐌴𐌹𐌻𐌰',
+'media_tip' => '𐍄𐌰𐌹𐌺𐌾𐌰𐌱𐌰𐌽𐌳𐌾𐌹𐍃 𐍆𐌴𐌹𐌻𐌰𐌽𐌹𐍃',
+'sig_tip' => '𐌿𐌽𐌳𐌰𐍂𐌼𐌴𐌻 𐌸𐌴𐌹𐌽𐌰 𐌼𐌹𐌸 𐍃𐍄𐌿𐌽𐌳𐌰𐌼𐌴𐌻𐌰',
+'hr_tip' => '𐍂𐌰𐌹𐌷𐍄𐍃𐌱𐌰𐌿𐍂𐌳 (𐌱𐍂𐌿𐌺𐌾𐌰𐌽 𐌼𐌹𐌸 𐌽𐌹𐌿𐍆𐌰𐍂𐌿𐍃𐍃𐌿𐍃)',
 
 # Edit pages
-'summary'                => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽𐍃𐍀𐌹𐌻𐌻𐍉𐌽:',
-'subject'                => '𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐌱𐍉𐌺𐌰:',
-'minoredit'              => '𐍃𐌰 𐌹𐍃𐍄 𐌻𐌴𐌹𐍄𐌹𐌻𐌰 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃',
-'watchthis'              => '𐍅𐌰𐍂𐌰𐌽 𐍃𐌴𐌹𐌳𐍉',
-'savearticle'            => '𐌼𐌴𐌻𐌾𐌰 𐍃𐌴𐌹𐌳𐍉',
-'preview'                => '𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰 𐍃𐌴𐌹𐌳𐍉',
-'showpreview'            => '𐍅𐌹𐍄𐌰𐌽 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰',
-'showdiff'               => '𐍅𐌹𐍄𐌰𐌽 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃',
-'newarticle'             => '(Niu)',
-'updated'                => '(Nuwisan)',
-'previewnote'            => "'''𐍃𐌰𐌷 𐌹𐍃𐍄 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰. 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌲𐌰𐌼𐌴𐌻𐌾𐌹𐌸 𐌽𐌹 𐌰𐍆 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐍃!'''",
-'editing'                => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1',
-'editingsection'         => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1 (𐍆𐌴𐍂𐌰)',
-'editingcomment'         => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1 (𐍂𐍉𐌳𐌾𐌰𐍆𐌴𐍂𐌰)',
-'yourdiff'               => 'Missalieks',
-'template-protected'     => '(gabaírgan)',
+'summary' => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽𐍃𐍀𐌹𐌻𐌻𐍉𐌽:',
+'subject' => '𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐌱𐍉𐌺𐌰:',
+'minoredit' => '𐍃𐌰 𐌹𐍃𐍄 𐌻𐌴𐌹𐍄𐌹𐌻𐌰 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃',
+'watchthis' => '𐍅𐌰𐍂𐌰𐌽 𐍃𐌴𐌹𐌳𐍉',
+'savearticle' => '𐌼𐌴𐌻𐌾𐌰 𐍃𐌴𐌹𐌳𐍉',
+'preview' => '𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰 𐍃𐌴𐌹𐌳𐍉',
+'showpreview' => '𐍅𐌹𐍄𐌰𐌽 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰',
+'showdiff' => '𐍅𐌹𐍄𐌰𐌽 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃',
+'newarticle' => '(Niu)',
+'updated' => '(Nuwisan)',
+'previewnote' => "'''𐍃𐌰𐌷 𐌹𐍃𐍄 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰. 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌲𐌰𐌼𐌴𐌻𐌾𐌹𐌸 𐌽𐌹 𐌰𐍆 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐍃!'''",
+'editing' => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1',
+'editingsection' => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1 (𐍆𐌴𐍂𐌰)',
+'editingcomment' => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1 (𐍂𐍉𐌳𐌾𐌰𐍆𐌴𐍂𐌰)',
+'yourdiff' => 'Missalieks',
+'template-protected' => '(𐌲𐌰𐌱𐌰𐌹𐍂𐌲𐌾𐌰𐌽)',
 'template-semiprotected' => '(halb-gabaírgjan)',
 
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => "'''𐌷𐍅𐍉𐍄𐌾𐌰𐌽𐌳𐍃:''' 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃 𐍃𐌹𐌽𐌳 𐌿𐍆𐌰𐍂𐌼𐌹𐌺𐌹𐌻𐍃. 𐍃𐌿𐌼𐍃 𐍆𐌰𐌿𐍂𐌴𐌼𐌴𐌻𐌴𐌹𐌽𐍉𐍃 𐌽𐌹 𐌼𐌰𐌲 𐍅𐌹𐍃𐌰𐌽 𐌸𐌰𐍂",
+'post-expand-template-inclusion-category' => '𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌸𐌰𐍂 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃 𐍃𐌹𐌽𐌳 𐌿𐍆𐌰𐍂𐌼𐌹𐌺𐌹𐌻𐍃',
+
 # History pages
-'currentrev'          => '𐌽𐌿 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃',
-'revisionasof'        => '𐌲𐌰𐌼𐌴𐌻𐌹𐌳𐍉 𐌿𐍃 $1',
-'revision-info'       => 'Máideins fram $1 bi $2',
-'previousrevision'    => '←𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃',
-'nextrevision'        => 'Iftuma máideins→',
+'currentrev' => '𐌽𐌿 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃',
+'currentrev-asof' => '𐌰𐍆𐍄𐌿𐌼𐍃𐍄𐍃 𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐍆𐍂𐌰𐌼 $1',
+'revisionasof' => '𐌲𐌰𐌼𐌰𐌳𐌾𐌴𐌹 𐍆𐍂𐌰𐌼 $1',
+'revision-info' => 'Máideins fram $1 bi $2',
+'previousrevision' => '←𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃',
+'nextrevision' => 'Iftuma máideins→',
 'currentrevisionlink' => '𐌽𐌿𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃',
-'cur'                 => '𐌽𐌿',
-'next'                => '𐌹𐍆𐍄𐌿𐌼𐌰',
-'last'                => '𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍃',
-'page_first'          => 'frumists',
-'page_last'           => '𐍃𐍀𐌴𐌳𐌿𐌼𐌹𐍃𐍄𐍃',
-'histfirst'           => '𐍆𐌰𐌿𐍂𐌸𐌹𐍃',
-'histlast'            => '𐍃𐍀𐌴𐌳𐌿𐌼𐌹𐍃𐍄𐍃',
+'cur' => '𐌽𐌿',
+'next' => '𐌹𐍆𐍄𐌿𐌼𐌰',
+'last' => '𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍃',
+'page_first' => 'frumists',
+'page_last' => '𐍃𐍀𐌴𐌳𐌿𐌼𐌹𐍃𐍄𐍃',
+'histfirst' => '𐍆𐌰𐌿𐍂𐌸𐌹𐍃',
+'histlast' => '𐍃𐍀𐌴𐌳𐌿𐌼𐌹𐍃𐍄𐍃',
 
 # Revision feed
 'history-feed-item-nocomment' => '$1 at $2',
 
+# Revision deletion
+'revdel-restore' => '𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌹𐍃 𐌰𐌽𐌰𐍃𐌹𐌿𐌽𐌼𐌰𐌷𐍄𐌴𐌹𐌲𐍃',
+
+# Merge log
+'revertmerge' => '𐌿𐌽𐌲𐌰𐍄𐌹𐌻𐍉𐍃',
+
 # Diffs
 'history-title' => '𐌰𐍂𐌹𐍃𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌰𐍆 "$1"',
-'lineno'        => '𐌱𐍉𐌺𐌰𐍂𐌹𐌲𐌹𐌻𐍉 $1:',
-'editundo'      => '𐌽𐌹𐌿𐍃𐌺𐌰𐍀𐌾𐌰𐌽',
+'lineno' => '𐌱𐍉𐌺𐌰𐍂𐌹𐌲𐌹𐌻𐍉 $1:',
+'editundo' => '𐌽𐌹𐌿𐍃𐌺𐌰𐍀𐌾𐌰𐌽',
 
 # Search results
-'prevn'              => 'aftuma {{PLURAL:$1|$1}}',
-'nextn'              => 'iftuma {{PLURAL:$1|$1}}',
-'viewprevnext'       => '𐍃𐌹𐌿𐌽𐌴𐌹𐍃 ($1 {{int:pipe-separator}} $2) ($3)',
-'searchhelp-url'     => 'Hilpa:Háubidaseido',
-'powersearch'        => 'Sokeiþ',
+'searchresults' => '𐍃𐍉𐌺𐌽𐌹𐍃 𐍄𐌰𐌿𐌾𐍉𐍃',
+'searchresults-title' => '𐍃𐍉𐌺𐌽𐌹𐍃 𐍄𐌰𐌿𐌾𐍉𐍃 𐍆𐌰𐌿𐍂 "$1"',
+'prevn' => '𐌰𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}}',
+'nextn' => '𐌹𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}}',
+'prevn-title' => '𐍆𐌰𐌹𐍂𐌽𐌰 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}}',
+'nextn-title' => '𐌰𐍆𐍄𐌿𐌼𐌰 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}}',
+'shown-title' => '𐌰𐌿𐌾𐌰𐌽𐌳 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}} 𐌸𐌰𐌹𐍂𐌷 𐍃𐌴𐌹𐌳𐍉',
+'viewprevnext' => '𐍃𐌹𐌿𐌽𐌴𐌹𐍃 ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-new' => "'''𐍃𐌺𐌰𐍀𐌾𐌹𐍃 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉𐌽 \"[[:\$1]]\" 𐌸𐌹𐌶𐍉𐍃 𐍅𐌹𐌺𐌾𐍉𐍃!'''",
+'searchprofile-articles' => '𐌲𐌰𐌷𐌰𐌱𐌾𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃',
+'searchprofile-project' => '𐌷𐌹𐌻𐍀𐍉𐍃 𐌾𐌰𐌷 𐍀𐍂𐍉𐍃𐌾𐌴𐌺𐍄𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃',
+'searchprofile-images' => '𐌼𐌰𐌽𐌰𐌲𐍃𐌼𐌴𐌳𐌹𐌰',
+'searchprofile-everything' => '𐌰𐌻𐌻',
+'searchprofile-advanced' => '𐍆𐌰𐌹𐍂𐍂𐌰𐍆𐍂𐌰𐌼𐌰',
+'searchprofile-articles-tooltip' => '𐍃𐍉𐌺 𐌹𐌽𐌽𐌰 $1',
+'searchprofile-project-tooltip' => '𐍃𐍉𐌺𐌾𐌹𐍃 𐌹𐌽𐌽𐌰 $1',
+'searchprofile-images-tooltip' => '𐍃𐍉𐌺𐌾𐌹𐍃 𐍆𐌴𐌹𐌻𐌰𐌽𐍃',
+'searchprofile-everything-tooltip' => '𐍃𐍉𐌺𐌾𐌹𐍃 𐌰𐌻𐌻 𐌲𐌰𐌷𐌰𐌱𐌾𐍉𐍃 (𐌸𐌹𐌶𐌴𐌴𐌹 𐌹𐍃𐍄 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌹𐍃)',
+'searchprofile-advanced-tooltip' => '𐍃𐌺𐍉𐌾𐌹𐍃 𐌹𐌽𐌽𐌰 𐍃𐌹𐌻𐌱𐌰𐍃𐌺𐌰𐍀𐌹𐌸𐍃 𐌽𐌰𐌼𐌰𐌽𐍃𐍄𐌰𐌸',
+'search-result-size' => '$1 ({{PLURAL:$2|•𐌰• 𐍅𐌰𐌿𐍂𐌳|•$2• 𐍅𐌰𐌿𐍂𐌳𐌰}})',
+'search-redirect' => '(𐌰𐍆𐍄𐍂𐌰𐍅𐌴𐌹𐍄𐍃 𐍆𐍂𐌰𐌼 𐌸𐌰𐌼𐌼𐌰 $1)',
+'search-section' => '(𐍆𐌴𐍂𐌰 $1)',
+'search-suggest' => '𐍄𐌰𐌹𐌺𐌽𐌹𐌳𐌰 𐌸𐌿: $1',
+'searchall' => '𐌰𐌻𐌻𐍃',
+'showingresultsheader' => "{{PLURAL:$5|𐍄𐌰𐌿𐌹 '''$1''' 𐌸𐌹𐍃 '''$3'''|𐍄𐌰𐌿𐌾𐍉𐍃 '''$1 - $2''' 𐌸𐌹𐍃 '''$3'''}} 𐌱𐌹 𐌸𐌰𐌼𐌼𐌰 '''$4'''",
+'search-nonefound' => '𐌽𐌹 𐌰𐌹𐌽𐌷𐌿𐌽 𐌲𐌰𐌲𐌹𐌱𐌾𐍉 𐍆𐌿𐌻𐌻𐌾𐌹𐌸 𐍃𐍉𐌺𐌴𐌹𐌽',
 'powersearch-legend' => '𐍃𐍉𐌺𐌴𐌹𐌸',
-'powersearch-redir'  => '𐍄𐌰𐌻𐌰 𐌰𐍆 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐍃𐌴𐌹𐌳𐍉𐍃',
+'powersearch-redir' => '𐍄𐌰𐌻𐌰 𐌰𐍆 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐍃𐌴𐌹𐌳𐍉𐍃',
 
 # Preferences page
-'preferences'       => '𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃',
-'mypreferences'     => '𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰',
-'prefs-skin'        => 'Seidofill',
-'skin-preview'      => 'Faúrsaiƕa',
-'saveprefs'         => 'Melja',
+'preferences' => '𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃',
+'mypreferences' => '𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰',
+'prefs-skin' => 'Seidofill',
+'skin-preview' => 'Faúrsaiƕa',
+'saveprefs' => 'Melja',
 'searchresultshead' => 'Sokeiþ',
 
 'grouppage-sysop' => '{{ns:project}}:𐍃𐌴𐌹𐌳𐍉𐍆𐌰𐌸𐍃',
 
 # User rights log
-'rightslog'  => 'Niutandis stutjanlog',
-'rightsnone' => '(ni áinshun)',
+'rightslog' => 'Niutandis stutjanlog',
 
 # Recent changes
-'nchanges'        => '$1 {{PLURAL:$1|máidein|máideins}}',
-'recentchanges'   => '𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃',
+'nchanges' => '$1 {{PLURAL:$1|máidein|máideins}}',
+'recentchanges' => '𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃',
 'rcshowhideminor' => '$1 lietila máideins',
-'rcshowhidebots'  => '$1 bota',
-'rcshowhideliu'   => '$1 niutandis',
+'rcshowhidebots' => '$1 bota',
+'rcshowhideliu' => '$1 niutandis',
 'rcshowhideanons' => '$1 gasteis',
-'rcshowhidemine'  => '$1 mein máideins',
-'diff'            => '𐌻𐌴𐌹𐌺𐍃',
-'hist'            => '𐌰𐌹𐍂𐌹𐍃',
-'hide'            => 'Filhan',
-'show'            => 'Huljan',
+'rcshowhidemine' => '$1 mein máideins',
+'diff' => '𐌻𐌴𐌹𐌺𐍃',
+'hist' => '𐍆𐍂𐌼𐌵',
+'hide' => '𐍆𐌹𐌻𐌷𐌰𐌽',
+'show' => '𐌷𐌿𐌻𐌾𐌰𐌽',
 'minoreditletter' => 'l',
-'newpageletter'   => 'N',
-'boteditletter'   => 'b',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
 
 # Recent changes linked
-'recentchangeslinked'         => '𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌻𐌹𐌴𐌺𐍃',
-'recentchangeslinked-feed'    => 'Máideinlieks',
+'recentchangeslinked' => '𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌻𐌹𐌴𐌺𐍃',
+'recentchangeslinked-feed' => 'Máideinlieks',
 'recentchangeslinked-toolbox' => '𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌻𐌹𐌴𐌺𐍃',
+'recentchangeslinked-summary' => "𐍃𐍉 𐌹𐍃𐍄 𐌻𐌴𐌹𐍃𐍄𐌰 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍃 𐍃𐌺𐍉𐍀 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳 𐌿𐍃 𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 (𐌰𐌹𐌸𐌸𐌰𐌿 𐌻𐌹𐌸𐌰𐌿𐍃 𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐌹𐌶𐍉𐍃 𐌷𐌰𐌽𐍃𐍉𐍃). 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 [[Special:Watchlist|𐍅𐌹𐍄𐌰𐌽𐌳𐌻𐌴𐌹𐍃𐍄𐍉𐍃 𐌸𐌴𐌹𐌽𐍉𐍃]] 𐍃𐌹𐌽𐌳 '''𐌳𐌹𐌲𐍂𐍃𐍄𐌰𐍆𐍃'''.",
 
 # Upload
-'upload'          => '𐌿𐍃𐌷𐌻𐌰𐌸𐌰𐌹𐌸 𐍆𐌴𐌹𐌻𐌰𐌽𐍃',
-'uploadbtn'       => 'Ushlaþaiþ Feilans',
-'uploadlogpage'   => 'Log af Ushlaþan',
-'uploadedimage'   => 'ushlaþiþ "[[$1]]"',
+'upload' => '𐌿𐍃𐌷𐌻𐌰𐌸𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽𐍃',
+'uploadbtn' => 'Ushlaþaiþ Feilans',
+'uploadlogpage' => 'Log af Ushlaþan',
+'uploadedimage' => 'ushlaþiþ "[[$1]]"',
 'watchthisupload' => 'Witan so seido',
 
 # Special:ListFiles
-'imgfile'   => 'Feilans',
+'imgfile' => 'Feilans',
 'listfiles' => 'Feilans tala',
 
 # File description page
-'file-anchor-link'    => 'Feilans',
-'filehist'            => 'Feilans áiris',
-'filehist-current'    => 'nu',
-'filehist-datetime'   => 'Ƕeila',
-'filehist-user'       => 'Niutandis',
-'filehist-dimensions' => 'Wahstus',
-'filehist-filesize'   => 'Feilans wahstus',
-'filehist-comment'    => 'Leitilaspillon',
-'imagelinks'          => 'Táiknjabandja',
+'file-anchor-link' => '𐍆𐌴𐌹𐌻𐌰𐌽𐍃',
+'filehist' => '𐍆𐌴𐌹𐌻𐌰𐌽𐍃 𐌰𐌹𐍂𐌹𐍃',
+'filehist-help' => '𐌺𐌻𐌹𐌺𐍉𐍃 𐌰𐌽𐌰 𐌳𐌰𐍄𐌰𐌹/𐍈𐌴𐌹𐌻𐌰𐌹 𐍃𐌰𐌹𐍈𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽 𐍃𐍅𐌴 𐌰𐍄𐌰𐌿𐌲𐌾𐌹𐌳𐌰 𐍃𐌹𐌺 𐌸𐌰𐌽.',
+'filehist-current' => '𐌽𐌿',
+'filehist-datetime' => '𐍈𐌴𐌹𐌻𐌰',
+'filehist-thumb' => '𐍆𐍉𐍂𐍃𐌾𐌰𐌿',
+'filehist-thumbtext' => '𐍆𐍉𐍂𐍃𐌾𐌰𐌿 𐍆𐌰𐌿𐍂 𐌿𐍃𐌲𐌰𐌱𐌰 𐍆𐍂𐌰𐌼 $1',
+'filehist-user' => '𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃',
+'filehist-dimensions' => '𐍅𐌰𐌷𐍃𐍄𐌿𐍃',
+'filehist-filesize' => 'Feilans wahstus',
+'filehist-comment' => '𐌻𐌴𐌹𐍄𐌻𐌰𐍃𐍀𐌹𐌻𐌻𐍉𐌽',
+'imagelinks' => '𐍆𐌴𐌹𐌻𐌹𐌽𐍃 𐌱𐍂𐌿𐌺𐌹𐍃',
+'linkstoimage' => '𐌰𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|𐍃𐍉 𐍃𐌴𐌹𐌳𐍉 𐌻𐌴𐌹𐌽𐌺𐍉𐌸|𐌸𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳}} 𐌸𐌹𐌶𐍉𐌶𐌿𐌷 𐍆𐌴𐌹𐌻𐍉𐍃',
+'sharedupload-desc-here' => '𐍃𐌰 𐍆𐌴𐌹𐌻𐌰 𐌹𐍃𐍄 𐍆𐍂𐌰𐌼 $1 𐌾𐌰𐌷 𐌼𐌰𐌲 𐍅𐌹𐍃𐌰𐌽 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐍃 𐍆𐍂𐌰𐌼 𐌰𐌻𐌾𐌰𐌹𐌼 𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐍉𐌼.
+𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌾𐌰𐌽𐌳𐍃 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐌰𐌹 𐍆𐌴𐌹𐌻𐌰𐌽𐍃𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌾𐌰𐌽𐌳𐌹𐍃 𐌸𐌰𐍂 𐌹𐍃𐍄 𐌳𐌰𐌻𐌰𐌸𐌰 𐌿𐍃𐌲𐌹𐌱𐌰𐌽𐍃.',
 
 # File deletion
 'filedelete-submit' => 'Taíran',
@@ -351,34 +409,34 @@ $messages = array(
 # Statistics
 'statistics' => '𐍃𐌴𐌹𐌳𐍉𐍃𐍄𐌰𐍄𐌹𐍃𐍄𐌹𐌺',
 
-'brokenredirects-edit'   => '(𐌼𐌰𐌹𐌳𐌾𐌰𐌽)',
+'brokenredirects-edit' => '(𐌼𐌰𐌹𐌳𐌾𐌰𐌽)',
 'brokenredirects-delete' => '(𐍄𐌰𐌹𐍂𐌰𐌽)',
 
 # Miscellaneous special pages
-'nbytes'       => '$1 {{PLURAL:$1|𐌱𐌰𐌹𐍄|𐌱𐌰𐌹𐍄𐌰}}',
-'ncategories'  => '$1 {{PLURAL:$1|𐌺𐌿𐌽𐌾𐌰|𐌺𐌿𐌽𐌾𐍉𐍃}}',
-'nlinks'       => '$1 {{PLURAL:$1|táikjanbandi|táikjanbandja}}',
-'nmembers'     => '$1 {{PLURAL:$1|niutand|niutanda}}',
-'wantedpages'  => 'Gaírnedum seidam',
-'shortpages'   => '𐌻𐌴𐌹𐍄𐌹𐌻𐌰 𐍃𐌴𐌹𐌳𐍉𐍃',
-'longpages'    => '𐌻𐌰𐌲𐌲𐌰 𐍃𐌴𐌹𐌳𐍉𐍃',
-'listusers'    => '𐍂𐌴𐌲𐌹𐍃𐍄𐍂𐌴𐍂𐌰𐌳𐌴 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌳𐍃',
-'newpages'     => '𐌽𐌹𐌿𐌾𐌰 𐍃𐌴𐌹𐌳𐍉𐍃',
-'move'         => '𐌽𐌰𐌼𐌾𐌰𐌽 𐌰𐍆𐍄𐍂𐌰',
+'nbytes' => '$1 {{PLURAL:$1|𐌱𐌰𐌹𐍄|𐌱𐌰𐌹𐍄𐌰}}',
+'ncategories' => '$1 {{PLURAL:$1|𐌺𐌿𐌽𐌾𐌰|𐌺𐌿𐌽𐌾𐍉𐍃}}',
+'nlinks' => '$1 {{PLURAL:$1|táikjanbandi|táikjanbandja}}',
+'nmembers' => '$1 {{PLURAL:$1|niutand|niutanda}}',
+'wantedpages' => 'Gaírnedum seidam',
+'shortpages' => '𐌻𐌴𐌹𐍄𐌹𐌻𐌰 𐍃𐌴𐌹𐌳𐍉𐍃',
+'longpages' => '𐌻𐌰𐌲𐌲𐌰 𐍃𐌴𐌹𐌳𐍉𐍃',
+'listusers' => '𐍂𐌴𐌲𐌹𐍃𐍄𐍂𐌴𐍂𐌰𐌳𐌴 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌳𐍃',
+'newpages' => '𐌽𐌹𐌿𐌾𐌰 𐍃𐌴𐌹𐌳𐍉𐍃',
+'move' => '𐌽𐌰𐌼𐌾𐌰𐌽 𐌰𐍆𐍄𐍂𐌰',
 'movethispage' => '𐍃𐌺𐌹𐌿𐌱𐌰𐌽 𐍃𐌰 𐍃𐌴𐌹𐌳𐍉',
 
 # Special:Log
-'specialloguserlabel'  => 'Niutand:',
+'specialloguserlabel' => 'Niutand:',
 'speciallogtitlelabel' => 'Namo:',
-'log'                  => '𐌻𐍉𐌲𐌱𐍉𐌺𐍉𐍃',
-'all-logs-page'        => '𐌰𐌻𐌻𐌰 𐌻𐍉𐌲𐍉𐍃',
+'log' => '𐌻𐍉𐌲𐌱𐍉𐌺𐍉𐍃',
+'all-logs-page' => '𐌰𐌻𐌻𐌰 𐌻𐍉𐌲𐍉𐍃',
 
 # Special:AllPages
-'allpages'       => '𐌰𐌻𐌻𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐍃',
+'allpages' => '𐌰𐌻𐌻𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐍃',
 'alphaindexline' => '$1 du $2',
-'nextpage'       => '𐌹𐍆𐍄𐌿𐌼𐌰 𐍃𐌴𐌹𐌳𐍉 ($1)',
-'prevpage'       => '𐌰𐍆𐍄𐌿𐌼𐌰 𐍃𐌴𐌹𐌳𐍉 ($1)',
-'allarticles'    => '𐌰𐌻𐌾𐌰 𐍃𐌴𐌹𐌳𐍉𐍃',
+'nextpage' => '𐌹𐍆𐍄𐌿𐌼𐌰 𐍃𐌴𐌹𐌳𐍉 ($1)',
+'prevpage' => '𐌰𐍆𐍄𐌿𐌼𐌰 𐍃𐌴𐌹𐌳𐍉 ($1)',
+'allarticles' => '𐌰𐌻𐌾𐌰 𐍃𐌴𐌹𐌳𐍉𐍃',
 'allpagessubmit' => '𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽',
 
 # Special:Categories
@@ -387,135 +445,171 @@ $messages = array(
 # Special:LinkSearch
 'linksearch-ns' => '𐍃𐌴𐌹𐌳𐍉𐍆𐌴𐍂𐌰:',
 
-# E-mail user
+# Email user
 'emailuser' => '𐍃𐌰𐌽𐌳𐌾𐌰𐌽 𐌸𐍉 𐌽𐌹𐌿𐍄𐌰𐌽𐌳 𐌱𐍉𐌺𐍉𐌼',
 
 # Watchlist
-'watchlist'         => '𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰',
-'mywatchlist'       => '𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰',
-'watch'             => '𐍅𐌰𐍂𐌰𐌽',
-'watchthispage'     => '𐍅𐌰𐍂𐌰𐌽 𐍃𐌴𐌹𐌳𐍉',
-'unwatch'           => '𐌽𐌹𐍅𐌰𐍂𐌰𐌽',
+'watchlist' => '𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰',
+'mywatchlist' => '𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰',
+'watch' => '𐍅𐌰𐍂𐌰𐌽',
+'watchthispage' => '𐍅𐌰𐍂𐌰𐌽 𐍃𐌴𐌹𐌳𐍉',
+'unwatch' => '𐌽𐌹𐍅𐌰𐍂𐌰𐌽',
 'watchlist-details' => '{{PLURAL:$1|$1 seido|$1 seidona}} witáiþs inu maþleiseidam.',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Wita...',
+'watching' => 'Wita...',
 'unwatching' => 'Niwita...',
 
 'created' => '𐌲𐌰𐍃𐌺𐌰𐍀𐌾𐌰𐌽',
 
 # Delete
-'deletepage'            => '𐍄𐌰𐌹𐍂𐌰 𐍃𐌴𐌹𐌳𐍉',
-'delete-legend'         => '𐍄𐌰𐌹𐍂𐌰𐌽',
-'actioncomplete'        => '𐍅𐌰𐍃𐌿𐌷 𐌹𐍄𐌰 𐌲𐌰𐌿𐍃𐍄𐌹𐌿𐌷𐌰𐌽',
-'dellogpage'            => '𐍄𐌰𐌹𐍂𐌰 𐌰𐌹𐍂𐍅𐌱𐍉𐌺𐌰',
-'deleteotherreason'     => '𐌰𐌽𐌸𐌰𐍂/𐌼𐌰𐌹𐍃 𐌼𐌹𐍄𐍉𐌽𐍃:',
+'deletepage' => '𐍄𐌰𐌹𐍂𐌰 𐍃𐌴𐌹𐌳𐍉',
+'delete-legend' => '𐍄𐌰𐌹𐍂𐌰𐌽',
+'actioncomplete' => '𐍅𐌰𐍃𐌿𐌷 𐌹𐍄𐌰 𐌲𐌰𐌿𐍃𐍄𐌹𐌿𐌷𐌰𐌽',
+'dellogpage' => '𐍄𐌰𐌹𐍂𐌰 𐌰𐌹𐍂𐍅𐌱𐍉𐌺𐌰',
+'deleteotherreason' => '𐌰𐌽𐌸𐌰𐍂/𐌼𐌰𐌹𐍃 𐌼𐌹𐍄𐍉𐌽𐍃:',
 'deletereasonotherlist' => '𐌰𐌽𐌸𐌰𐍂 𐌼𐌹𐍄𐍉𐌽𐍃',
 
 # Rollback
 'rollbacklink' => '𐌰𐍆𐍅𐌰𐌻𐍅𐌾𐌰𐌽',
 
 # Protect
-'protectlogpage'      => 'Log af Baírgjan',
-'prot_1movedto2'      => '[[$1]] skiubiþ du [[$2]]',
+'protectlogpage' => 'Log af Baírgjan',
+'prot_1movedto2' => '[[$1]] skiubiþ du [[$2]]',
 'protect-level-sysop' => '𐍃𐌴𐌹𐌳𐍉𐍆𐌰𐌸𐍃 𐌰𐌹𐌽𐌰𐌷𐌰',
-'protect-expiring'    => 'bláuþiþ $1 (UTC)',
-'restriction-type'    => 'Freihals:',
+'protect-expiring' => 'bláuþiþ $1 (UTC)',
+'restriction-type' => 'Freihals:',
 
 # Restrictions (nouns)
 'restriction-edit' => '𐌼𐌰𐌹𐌳𐌾𐌰𐌽',
 'restriction-move' => '𐍃𐌺𐌹𐌿𐌱𐌰𐌽',
 
 # Undelete
-'undeletebtn'            => '𐌰𐍆𐍄𐍂𐌰 𐌲𐌰𐌱𐍉𐍄𐌾𐌰𐌽',
+'undeletebtn' => '𐌰𐍆𐍄𐍂𐌰 𐌲𐌰𐌱𐍉𐍄𐌾𐌰𐌽',
+'undeletelink' => '𐍃𐌰𐌹𐍈𐌰𐌽/𐌰𐍆𐍄𐍂𐌰𐌲𐌰𐍃𐌰𐍄𐌾𐌰𐌽',
+'undeleteviewlink' => '𐍃𐌰𐌹𐍈𐌹𐍃',
 'undelete-search-submit' => 'Sokeiþ',
 
 # Namespace form on various pages
-'namespace'      => '𐍃𐌴𐌹𐌳𐍉𐍆𐌴𐍂𐌰:',
-'invert'         => 'Afwandjan kustus',
+'namespace' => '𐍃𐌴𐌹𐌳𐍉𐍆𐌴𐍂𐌰:',
+'invert' => 'Afwandjan kustus',
 'blanknamespace' => '(𐍆𐍂𐌿𐌼𐌹𐍃𐍄𐍃)',
 
 # Contributions
 'contributions' => '𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃 𐌰𐌹𐍅𐌻𐌰𐌲𐌹𐍉𐍃',
-'mycontris'     => '𐌼𐌴𐌹𐌽𐍉𐍃 𐌰𐌹𐍅𐌻𐌰𐌲𐌹𐍉𐍃',
-'contribsub2'   => '𐍆𐌰𐌿𐍂 $1 ($2)',
-'uctop'         => '(háubiþ)',
-'month'         => '𐍆𐍂𐌰𐌼 𐌼𐌴𐌽𐍉𐌸𐍃 (𐌾𐌰𐌷 𐌰𐍆𐍄𐌿𐌼𐌰):',
-'year'          => '𐍆𐍂𐌰𐌼 𐌾𐌴𐍂𐌰 (𐌾𐌰𐌷 𐌰𐍆𐍄𐌿𐌼𐌰):',
+'mycontris' => '𐌼𐌴𐌹𐌽𐍉𐍃 𐌰𐌹𐍅𐌻𐌰𐌲𐌹𐍉𐍃',
+'contribsub2' => '𐍆𐌰𐌿𐍂 $1 ($2)',
+'uctop' => '(háubiþ)',
+'month' => '𐍆𐍂𐌰𐌼 𐌼𐌴𐌽𐍉𐌸𐍃 (𐌾𐌰𐌷 𐌰𐍆𐍄𐌿𐌼𐌰):',
+'year' => '𐍆𐍂𐌰𐌼 𐌾𐌴𐍂𐌰 (𐌾𐌰𐌷 𐌰𐍆𐍄𐌿𐌼𐌰):',
 
 'sp-contributions-newbies-sub' => 'Faúr niujis niutandis',
-'sp-contributions-blocklog'    => 'Logboka af afdraúsjan',
-'sp-contributions-talk'        => 'Maþleiseido',
+'sp-contributions-blocklog' => 'Logboka af afdraúsjan',
+'sp-contributions-talk' => 'Maþleiseido',
 
 # What links here
-'whatlinkshere'       => '𐍈𐌰𐍂𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐌰 𐌷𐌻𐌰𐌲𐌺𐌾𐌰𐌽𐌳 𐌷𐌹𐌳𐍂𐌴',
+'whatlinkshere' => '𐍈𐌰𐍂𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌷𐌻𐌰𐌲𐌺𐌾𐌰𐌽𐌳 𐌷𐌹𐌳𐍂𐌴',
 'whatlinkshere-title' => 'Seidos hwarjis du $1 táiknjan',
-'isredirect'          => '𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉',
-'istemplate'          => 'ináukan',
-'whatlinkshere-prev'  => '{{PLURAL:$1|aftuma|aftumans $1}}',
-'whatlinkshere-next'  => '{{PLURAL:$1|iftuma|iftumans $1}}',
+'isredirect' => '𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉',
+'istemplate' => 'ináukan',
+'whatlinkshere-prev' => '{{PLURAL:$1|aftuma|aftumans $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|iftuma|iftumans $1}}',
 'whatlinkshere-links' => '← táikajanbandja',
 
 # Block/unblock
-'blockip'            => '𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃',
-'ipbreason'          => '𐍆𐌰𐌹𐍂𐌹𐌽𐌰:',
-'ipbotheroption'     => 'anþar',
+'blockip' => '𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃',
+'ipbreason' => '𐍆𐌰𐌹𐍂𐌹𐌽𐌰:',
+'ipboptions' => '𐌱 𐌰𐍅𐍂𐌰:2 hours, 𐌰 𐌳𐌰𐌲𐍃:1 day, 𐌲 𐌳𐌰𐌲𐍉𐍃:3 days, 𐌰 𐍅𐌹𐌺𐍉:1 week, 𐌱 𐍅𐌹𐌺𐍉𐌽𐍃:2 weeks, 𐌰 𐌼𐌴𐌽𐍉𐌸𐍃:1 month, 𐌲 𐌼𐌴𐌽𐍉𐌸𐍉𐍃:3 months, 𐌵 𐌼𐌴𐌽𐍉𐌸𐍉𐍃:6 months, 𐌰 𐌾𐌴𐍂:1 year, 𐌹𐌽𐌿𐍄𐍂𐌹𐌲𐌲𐌴𐌽𐌳𐌴𐌹𐍃:infinite',
 'ipblocklist-submit' => 'Sokeiþ',
-'infiniteblock'      => 'ajukduþs',
-'blocklink'          => '𐍅𐌰𐍂𐌲𐌾𐌰𐌽',
-'unblocklink'        => '𐍅𐌰𐌽𐌳𐌾𐌰𐌽',
-'contribslink'       => '𐌲𐌹𐌱𐍉𐍃',
-'blocklogpage'       => '𐌻𐍉𐌲𐌱𐍉𐌺𐌰 𐌰𐍆 𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌾𐌰𐌽',
-'blocklogentry'      => '𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌹𐌸 [[$1]] 𐍆𐌰𐌿𐍂 $2 $3',
+'infiniteblock' => 'ajukduþs',
+'blocklink' => '𐍅𐌰𐍂𐌲𐌾𐌰𐌽',
+'unblocklink' => '𐍅𐌰𐌽𐌳𐌾𐌰𐌽',
+'change-blocklink' => '𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐍅𐌰𐌿𐍂𐌾𐌰𐍅𐌰𐌳𐌳𐌾𐌿𐍃',
+'contribslink' => '𐌲𐌹𐌱𐍉𐍃',
+'blocklogpage' => '𐌻𐍉𐌲𐌱𐍉𐌺𐌰 𐌰𐍆 𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌾𐌰𐌽',
+'blocklogentry' => '𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌹𐌸 [[$1]] 𐍆𐌰𐌿𐍂 $2 $3',
 
 # Move page
 'movearticle' => '𐍃𐌺𐌹𐌿𐌱𐌰 𐍃𐌴𐌹𐌳𐍉:',
-'newtitle'    => '𐌳𐌿 𐌽𐌹𐌿𐌾𐌹𐍃 𐌽𐌰𐌼𐍉𐍃:',
-'move-watch'  => '𐍅𐌹𐍄𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉',
+'newtitle' => '𐌳𐌿 𐌽𐌹𐌿𐌾𐌹𐍃 𐌽𐌰𐌼𐍉𐍃:',
+'move-watch' => '𐍅𐌹𐍄𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉',
 'movepagebtn' => '𐍃𐌺𐌹𐌿𐌱𐌰 𐍃𐌴𐌹𐌳𐍉',
-'movedto'     => 'skiubiþ du',
 'movelogpage' => 'Log af skiubans',
-'movereason'  => '𐍆𐌰𐌹𐍂𐌹𐌽𐌰:',
-'revertmove'  => 'ráidjan',
+'movereason' => '𐍆𐌰𐌹𐍂𐌹𐌽𐌰:',
+'revertmove' => '𐍂𐌰𐌹𐌳𐌾𐌰𐌽',
+
+# Export
+'export' => '𐌿𐍄𐌼𐌹𐌸𐍃𐌰𐍄𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃',
 
 # Thumbnails
-'thumbnail-more' => 'Biáuknan',
+'thumbnail-more' => '𐌱𐌹𐌰𐌿𐌺𐌰𐌽',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'            => 'Meina niutandisseido',
-'tooltip-pt-mytalk'              => 'Meina maþleiseido',
-'tooltip-pt-preferences'         => 'Meinos brukjamaideineis',
-'tooltip-pt-mycontris'           => 'Tala af meina gibom',
-'tooltip-pt-logout'              => 'leiþan',
-'tooltip-ca-protect'             => '𐌱𐌰𐌹𐍂𐌲𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉',
-'tooltip-ca-delete'              => '𐍄𐌰𐌹𐍂𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉',
-'tooltip-ca-move'                => 'Skiuban so seido',
-'tooltip-search'                 => '𐍃𐍉𐌺𐌴𐌹𐌸 {{SITENAME}}',
-'tooltip-p-logo'                 => 'Háubidaseido',
-'tooltip-n-mainpage'             => '𐍃𐌰𐌹𐍈𐌰𐌽 𐍃𐌰 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉',
-'tooltip-n-mainpage-description' => '𐍃𐌰𐌹𐍈𐌰𐌽 𐍃𐌰 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉',
-'tooltip-t-upload'               => '𐌿𐍃𐌷𐌻𐌰𐌸𐌰𐌹𐌸 𐍆𐌴𐌹𐌻𐌰𐌽𐍃',
-'tooltip-t-specialpages'         => 'Findiþ alla ussindseidos',
-'tooltip-ca-nstab-user'          => '𐍃𐌰𐌹𐍈𐌰𐌽 𐍃𐌰 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉',
-'tooltip-save'                   => 'Skreiban þein máideins',
+'tooltip-pt-userpage' => '𐌸𐌴𐌹𐌽𐌰 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉',
+'tooltip-pt-mytalk' => '𐌸𐌴𐌹𐌽𐌰 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰𐍃𐌴𐌹𐌳𐍉',
+'tooltip-pt-preferences' => '𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃',
+'tooltip-pt-watchlist' => '𐌻𐌴𐌹𐍃𐍄𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌴𐌹 𐌸𐌿 𐌰𐍄𐍅𐌹𐍄𐌰𐌹𐍃 𐍆𐌰𐌿𐍂 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌽𐍃',
+'tooltip-pt-mycontris' => '𐍄𐌰𐌻𐌰 𐌰𐍆 𐌸𐌴𐌹𐌽 𐌲𐌹𐌱𐍉𐌽𐍃',
+'tooltip-pt-login' => '𐌸𐌿 𐌹𐍃 𐌲𐌰𐍈𐌰𐍄𐌾𐌰𐌽𐌳𐍃 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽; 𐌰𐌸𐌸𐌰𐌽, 𐌽𐌹𐍃𐍄 𐌸𐌰𐌿𐍂𐌱𐌰𐌽𐍃',
+'tooltip-pt-logout' => '𐌻𐌴𐌹𐌸𐌰𐌽',
+'tooltip-ca-talk' => '𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌹 𐌱𐌹 𐌲𐌰𐌷𐌰𐌱𐌾𐌰 𐍃𐌴𐌹𐌳𐍉',
+'tooltip-ca-edit' => '𐌸𐌿 𐌼𐌰𐌲𐍄 𐌼𐌰𐌹𐌳𐌾𐌹𐍃 𐌸𐌰𐍄𐌰 𐍃𐌴𐌹𐌳𐍉. 𐌾𐌰𐌱𐌰𐌹 𐍅𐌹𐌻𐌴𐌹𐍃, 𐌱𐍂𐌿𐌺𐌾𐌹𐍃 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐍆𐍂𐌿𐌼𐌰.',
+'tooltip-ca-addsection' => '𐌰𐌽𐌰𐍃𐍄𐍉𐌳𐌾𐌹𐍃 𐌽𐌹𐌿𐌾𐌰 𐌳𐌰𐌹𐌻',
+'tooltip-ca-viewsource' => '𐍃𐍉 𐍃𐌴𐌹𐌳𐍉 𐌹𐍃𐍄 𐌷𐌻𐌴𐌹𐌱𐌾𐌰𐌽𐌳𐍃
+𐌸𐌿 𐌼𐌰𐌲𐍄 𐍃𐌰𐌹𐍈𐌹𐍃 𐌹𐌶𐍉𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽',
+'tooltip-ca-history' => '𐍆𐌰𐌿𐍂𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌸𐌹𐌶𐌿𐌷 𐍃𐌴𐌹𐌳𐍉𐌽𐍃',
+'tooltip-ca-protect' => '𐌱𐌰𐌹𐍂𐌲𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉',
+'tooltip-ca-delete' => '𐍄𐌰𐌹𐍂𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉',
+'tooltip-ca-move' => '𐍃𐌺𐌹𐌿𐌱𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉',
+'tooltip-ca-watch' => '𐌰𐌽𐌰𐌰𐌿𐌺𐌹𐍃 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 𐌰𐌽𐌰 𐌸𐌴𐌹𐌽𐌰 𐍅𐌹𐍄𐌰𐌽𐌳𐌻𐌴𐌹𐍃𐍄𐌰',
+'tooltip-search' => '𐍃𐍉𐌺𐌾𐌰𐌽 {{SITENAME}}',
+'tooltip-search-go' => '𐍆𐌰𐍂𐌹𐍃 𐌳𐌿 𐍃𐌴𐌹𐌳𐍉𐌽 𐌼𐌹𐌸 𐌲𐌻𐌰𐌲𐌲𐌿𐌾𐌰𐌼𐌰 𐌽𐌰𐌼𐌹𐌽 𐌾𐌰𐌱𐌰𐌹 𐌹𐍃𐍄',
+'tooltip-search-fulltext' => '𐍃𐍉𐌺𐌾𐌰𐌽 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐍆𐌰𐌿𐍂 𐌸𐌰𐌽𐌰 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌽',
+'tooltip-p-logo' => '𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉',
+'tooltip-n-mainpage' => '𐍃𐌰𐌹𐍈𐌰𐌽 𐍃𐌰 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉',
+'tooltip-n-mainpage-description' => '𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐍃𐌰 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉',
+'tooltip-n-portal' => '𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐌰𐌹, 𐍈𐌰𐍃 𐌸𐌿 𐌼𐌰𐌲 𐍄𐌰𐌿𐌾𐌰, 𐍈𐌰𐍃 𐍃𐍄𐌰𐌸𐍃 𐌱𐌹𐌲𐌹𐍄𐌰𐌽 𐌹𐌽𐍃',
+'tooltip-n-currentevents' => '𐌱𐌹𐌲𐌹𐌸𐌹𐍃 𐌱𐌰𐌺𐌲𐌰𐌷𐌰𐌱𐌹 𐌱𐌹 𐌽𐌹𐌿𐌾𐌰𐌽𐍃 𐍅𐌰𐌹𐌷𐍄𐌰𐌽𐍃',
+'tooltip-n-recentchanges' => '𐌻𐌴𐌹𐍃𐍄𐌰 𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐌴 𐌽𐌿 𐌰𐌽𐌰 𐌸𐌰𐌼𐌼𐌰 𐍅𐌹𐌺𐌾𐌰',
+'tooltip-n-randompage' => '𐌿𐍃𐌻𐌰𐌸𐌰𐌹𐌸 𐍃𐌻𐌿𐌼𐍀𐌼𐌰𐍃𐍃𐌹𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉',
+'tooltip-n-help' => '𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐍆𐌹𐌽𐌸𐌰𐌽',
+'tooltip-t-whatlinkshere' => '𐌻𐌴𐌹𐍃𐍄𐌰 𐌰𐌻𐌻𐌹𐍃 𐍅𐌹𐌺𐌾𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍉 𐌴𐌹 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳 𐌷𐌹𐌳𐍂𐌴',
+'tooltip-t-recentchangeslinked' => '𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌽𐌿 𐍅𐌹𐌸𐍂𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌸𐌰𐍄𐌴𐌹 𐍃𐌹𐌽𐌳 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐍃 𐌿𐍃 𐌸𐌰𐌼𐌼𐌰 𐍃𐌴𐌹𐌳𐍉𐌽',
+'tooltip-feed-atom' => '𐌰𐍄𐍉𐌼 𐍂𐌹𐌽𐌽𐍉 𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽',
+'tooltip-t-upload' => '𐌿𐍃𐌷𐌻𐌰𐌸𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽𐍃',
+'tooltip-t-specialpages' => '𐌻𐌴𐌹𐍃𐍄𐌰 𐌸𐌹𐌶𐍉 𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐌽𐍉',
+'tooltip-t-print' => '𐍅𐍂𐌴𐌹𐍄𐌼𐌰𐌷𐍄𐌴𐌹𐌲 𐌿𐍃𐌲𐌰𐌱𐍉𐍃 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃',
+'tooltip-t-permalink' => '𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉 𐍃𐍄𐌰𐌽𐌳𐌰𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐌰 𐍅𐌹𐌸𐍂𐌰 𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃',
+'tooltip-ca-nstab-main' => '𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐌸𐌰𐍄𐌰 𐌲𐌰𐌷𐌰𐌱𐌾𐌰 𐍃𐌴𐌹𐌳𐍉',
+'tooltip-ca-nstab-user' => '𐍃𐌰𐌹𐍈𐌰𐌽 𐍃𐌰 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉',
+'tooltip-ca-nstab-image' => '𐍃𐌰𐌹𐍈𐌰𐌽 𐌸𐍉 𐍆𐌴𐌹𐌻𐌰𐍃𐌴𐌹𐌳𐍉𐌽',
+'tooltip-ca-nstab-template' => '𐍃𐌰𐌹𐍈𐌹𐍃 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽',
+'tooltip-ca-nstab-category' => '𐍃𐌰𐌹𐍈𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽 𐌷𐌰𐌽𐍃𐍉',
+'tooltip-save' => '𐍃𐌺𐍂𐌴𐌹𐌱𐌰𐌹𐌽 𐌸𐌴𐌹𐌽 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃',
+'tooltip-preview' => '𐍆𐌰𐌿𐍂𐍃𐌰𐍈𐌹𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍉𐍃 𐌸𐌴𐌹𐌽𐌰, 𐌱𐌹𐌳𐌾𐌰 𐌸𐌿𐌺 𐌱𐍂𐌿𐌺𐌾𐌰𐌽 𐌸𐌰𐍄𐌰 𐍆𐌰𐌿𐍂𐌰 𐌼𐌴𐌻𐌾𐌹𐍃!',
+'tooltip-diff' => '𐍃𐌰𐌹𐍈𐌹𐌸 𐌸𐌰𐌽𐌶𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍉𐍃 𐌸𐌰𐍄𐌴𐌹 𐌱𐍂𐌿𐌺𐌾𐌹𐍃 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌹𐌽𐍃',
+'tooltip-rollback' => '"𐌰𐍆𐍅𐌰𐌻𐍅𐌾𐌰𐌽" 𐌱𐌰𐌺𐌼𐌰𐌹𐌳𐌾𐌹𐌸 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 𐍅𐌹𐍃𐌰𐌽 𐍃𐍉 𐌲𐌰𐌼𐌰𐌳𐌾𐌴𐌹 𐌼𐌰𐌽𐌰𐌲𐌹𐍃𐍄𐍃 𐌽𐌹𐌿𐌾𐌰 𐌲𐌹𐌱𐌰𐌾𐌹𐌽𐍃 𐍆𐍂𐌰𐌼 𐌰𐌹𐌽𐍃 𐌺𐌻𐌹𐌺',
+'tooltip-undo' => '"𐌽𐌹𐌿𐍃𐌺𐌰𐍀𐌾𐌰𐌽" 𐌱𐌰𐌺𐌼𐌰𐌹𐌳𐌾𐌹𐌸 𐌹𐌽𐌼𐌰𐌹𐌳𐌲𐌴𐌹𐌽𐍃 𐌾𐌰𐌷 𐌿𐍃𐌻𐌿𐌺𐍉𐌸 𐌼𐌰𐌹𐌳𐌾𐌰𐍆𐍉𐍂𐌼𐍉𐌽 𐍃𐍅𐌴 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰 𐌷𐌹𐍅𐌾𐌰. 𐌸𐌰𐍄𐌰 𐌻𐌴𐍄 𐌰𐌽𐌰𐌿𐌺𐌰𐌽𐌰𐌽 𐍃𐌰𐌿𐌸𐌰 𐌹𐌽 𐌹𐌽𐌽𐌰𐌷𐌰𐌻𐌳𐌰𐌰𐌽𐌲𐌰𐌱𐌰.',
+'tooltip-summary' => '𐌰𐍄𐌲𐌰𐌲𐌲𐌹𐍃 𐌹𐌽𐌽𐌰𐌷𐌰𐌻𐌳𐌰𐌰𐌽𐌲𐌰𐌱𐌰 𐌼𐌰𐌿𐍂𐌲𐌾𐌰',
 
 # Browsing diffs
 'previousdiff' => '← 𐌰𐍆𐍄𐌿𐌼𐌰 𐌰𐌹𐍂𐌹𐍃',
-'nextdiff'     => 'Iftuma áiris →',
+'nextdiff' => 'Iftuma áiris →',
 
 # Media information
+'file-info-size' => '$1 × $2 𐍀𐌹𐌺𐍃𐌴𐌻𐌰, 𐍆𐌴𐌹𐌻𐍅𐌰𐌷𐍃𐍄𐌿𐍃: $3, 𐌼𐌹𐌼𐌴 𐌺𐌿𐌽𐌹: $4',
 'show-big-image' => 'Fullis wahstus',
 
 # Special:NewFiles
 'ilsubmit' => 'Sokeiþ',
 
 # Metadata
-'metadata' => 'Ufardata',
+'metadata' => '𐌿𐍆𐌰𐍂𐌳𐌰𐍄𐌰',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'allis',
-'namespacesall' => 'allis',
-'monthsall'     => '𐌰𐌻𐌻𐌹𐍃',
+'namespacesall' => '𐌰𐌻𐌻𐌹𐍃',
+'monthsall' => '𐌰𐌻𐌻𐌹𐍃',
 
 # Multipage image navigation
 'imgmultigo' => 'Afgaggan!',
@@ -526,10 +620,13 @@ $messages = array(
 # Special:Version
 'version-other' => 'Anþar',
 
-# Special:FilePath
-'filepath-page' => 'Feilans:',
-
 # Special:SpecialPages
 'specialpages' => '𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐍃',
 
+# Special:Tags
+'tag-filter' => '[[Special:Tags|𐍄𐌰𐌹𐌺𐌽𐍉𐍃]] 𐍆𐌹𐌻𐌷𐌰',
+
+# New logging system
+'rightsnone' => '(ni áinshun)',
+
 );
index e5c248c..722e27c 100644 (file)
@@ -675,8 +675,6 @@ $2',
 'revdelete-show-file-submit' => 'Ναί',
 'revdelete-selected' => "'''{{PLURAL:$2|Ἐπειλεγμένη ἀναθεώρησις|Ἐπειλεγμέναι ἀναθεωρήσεις}} τοῦ [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Ἐπειλεγμένον γεγονὸς καταλόγου|Ἐπειλεγμένα γεγονὀτα καταλόγου}}:'''",
-'revdelete-text' => "'''Αἱ διαγεγραμμέναι ἀναθεωρήσεις καὶ τὰ γεγονότα ἐμφανίσονται ἐν τῷ ἱστορικῷ τῆς δέλτου καὶ τοῖς καταλόγοις, ὰλλὰ μέρη τοῦ περιεχομένου σφῶν ἔσονται δημοσίως ἀπροσπέλαστα.'''
-Ἐξέσται δὲ ἑτέροις ἐπιτρόποις ἐν τῷ ἱστοτόπῳ {{SITENAME}} προσπελάζειν τῷ κρυμμένῳ περιεχομένῳ καὶ ἐπανιστάναι τόδε δία αὐτῆς τῆς διεπαφῆς ἐὰν μὴ θῶνται πρόσθετοι περιορισμοί τινές.",
 'revdelete-legend' => 'Θέτειν περιορισμοῦς ὁρατότητος',
 'revdelete-hide-text' => 'Κρύπτειν κείμενον ἀναθεωρήσεως',
 'revdelete-hide-image' => 'Κρύπτειν περιεχόμενον ἀρχείου',
index d058211..8c4187b 100644 (file)
@@ -170,7 +170,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Schick mr Kopie vo de E-Mails, won i andere schick.',
 'tog-diffonly' => 'Numme Versionsunterschiid aazeige, ohni d Syte',
 'tog-showhiddencats' => 'Zeig di versteckte Kategorie',
-'tog-noconvertlink' => 'Konvertierig vum Titel deaktiviere',
 'tog-norollbackdiff' => 'Unterschid noch em Zrucksetze unterdrucke',
 'tog-useeditwarning' => 'Warn mi, wänn I ne Syte verloss mit Bearbeitige, wu nonig gspycheret sin',
 'tog-prefershttps' => 'Wänn aagmäldet, alliwyl e sicheri Verbindig bruuche',
@@ -297,7 +296,6 @@ $messages = array(
 'vector-action-protect' => 'Schitze',
 'vector-action-undelete' => 'Widerhärstelle',
 'vector-action-unprotect' => 'Syteschutz ändere',
-'vector-simplesearch-preference' => 'Vereifachti Suechvorschleg aktiviere (nume Vector)',
 'vector-view-create' => 'Aalege',
 'vector-view-edit' => 'Bearbeite',
 'vector-view-history' => 'Versionsgschicht',
@@ -576,8 +574,6 @@ Vergiss nit, Dyni [[Special:Preferences|{{SITENAME}}-Yystellige]] z ändere.',
 'gotaccountlink' => '»Login fir Benutzer, wu scho aagmäldet sin«',
 'userlogin-resetlink' => 'Hesch Dyy Aamäldedate vergässe?',
 'userlogin-resetpassword-link' => 'Passwort vergässe?',
-'helplogin-url' => 'Help:Aamälde',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hilf bim Aamälde]]',
 'userlogin-loggedin' => 'Du bisch scho as {{GENDER:$1|$1}} aagmäldet.
 Bruuch s Formular unte go Di unter eme andere Benutzername aamälde.',
 'userlogin-createanother' => 'En ander Benutzerkonto aalege',
@@ -1070,8 +1066,6 @@ Du chasch dää Unterschid allno aaluege; Details het's im [{{fullurl:{{#Special
 'revdelete-show-file-submit' => 'Jo',
 'revdelete-selected' => "'''{{PLURAL:$2|Usgwehlti Version|Usgwehlti Versione}} vu [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Usgwehlte Logbuechyytrag|Usgwehlti Logbuechyytreg}}:'''",
-'revdelete-text' => "'''Dr Inhalt oder anderi Bstandteil vu gleschte Versione chenne nimi aagluegt wäre, si erschyyne aber alno as Yytreg in dr Versiongschicht.'''
-{{SITENAME}}-Ammanne chenne dr Inhalt, wu glescht isch, oder di andre gleschte Bstandteil alno aaluege un au widerherstelle, user s isch feschtgleit, ass d Zuegangsbschränkige au fir Ammanne gälte.",
 'revdelete-confirm' => 'Bitte tue bstetige, ass Du vor hesch, des z mache, d Konsequänze drus verstohsch un s machsch in Inbereinstimmig mit dr [[{{MediaWiki:Policy-url}}|Richtlinie]].',
 'revdelete-suppress-text' => "Unterdruckige sotte '''nume''' in däne Fäll bruucht wäre:
 * Nit aabrochti Informatione
@@ -1630,6 +1624,7 @@ Wänn Du die Datei einewäg wit uffelade, gang bitte zruck un ändere dr Name.
 'uploaddisabledtext' => 'S Uffelade vu Dateie isch deaktiviert.',
 'php-uploaddisabledtext' => 'S Uffelade vu PHP-Dateie isch deaktiviert wore. Bitte iberprief d file_uploads-Yystellig.',
 'uploadscripted' => 'In däre Datei git s HTML- oder Scriptcode, wu fälschligerwyys vun eme Webbrowser usgfiert chennt were.',
+'uploadinvalidxml' => 'S XML in dr uffegladene Datei het nit chenne parst wäre.',
 'uploadvirus' => 'In däre Datei het s e Virus! Detail: $1',
 'uploadjava' => 'Des isch e ZIP-Datei, wu s e CLASS-Datei vu Java din het.
 S Uffelade vu Java-Dateien isch nit gstattet, wel si s Umgoh vu Sicherheitsyyschränkige chennte megli mache.',
@@ -3800,6 +3795,4 @@ Sunscht chasch au s eifach Formular unte nutze. Dyy Kommentar wird, zämme mit D
 'expand_templates_generate_xml' => 'Zeig XML-Parser-Baum',
 'expand_templates_preview' => 'Vorschou',
 
-# Unknown messages
-'uploadinvalidxml' => 'S XML in dr uffegladene Datei het nit chenne parst wäre.',
 );
index 56334a6..4ff89cd 100644 (file)
@@ -188,7 +188,6 @@ $messages = array(
 'tog-ccmeonemails' => 'મે અન્યોને મોકલેલા ઇમેલની નકલ મને મોકલો',
 'tog-diffonly' => 'તફાવતની નીચે લેખ ન બતાવશો',
 'tog-showhiddencats' => 'છુપી શ્રેણીઓ દર્શાવો',
-'tog-noconvertlink' => 'Disable link title conversion',
 'tog-norollbackdiff' => 'રોલબેક કર્યા પછીના તફાવતો છુપાવો',
 'tog-useeditwarning' => 'સાચવ્યા વગર જો હું પૃષ્ઠ છોડું તો મને ચેતવણી આપો',
 'tog-prefershttps' => 'સભ્યનામથી પ્રવેશ કર્યો હોય ત્યારે સુરક્ષિત જોડાણ (https) જ વાપરો',
@@ -316,7 +315,6 @@ $messages = array(
 'vector-action-protect' => 'સુરક્ષિત કરો',
 'vector-action-undelete' => 'રદ કરેલું પાછું વાળો',
 'vector-action-unprotect' => 'સુરક્ષા બદલો',
-'vector-simplesearch-preference' => 'સરળ શોધ પટ્ટી સક્રીય કરો (માત્ર વેક્ટર સ્કિન)',
 'vector-view-create' => 'બનાવો',
 'vector-view-edit' => 'ફેરફાર કરો',
 'vector-view-history' => 'ઇતિહાસ જુઓ',
@@ -364,7 +362,7 @@ $messages = array(
 'postcomment' => 'નવો વિભાગ',
 'articlepage' => 'લેખનું પાનું જુઓ',
 'talk' => 'ચર્ચા',
-'views' => 'દેખાવ',
+'views' => 'દેખાવ',
 'toolbox' => 'સાધનો',
 'userpage' => 'સભ્યનું પાનું જુઓ',
 'projectpage' => 'પ્રકલ્પનું પાનું જુઓ',
@@ -435,7 +433,7 @@ $1',
 'viewsourceold' => 'સ્રોત જુઓ',
 'editlink' => 'ફેરફાર',
 'viewsourcelink' => 'સ્રોત જુઓ',
-'editsectionhint' => 'ફà«\87રફાર àª\95રà«\8b - àªªàª°àª¿àª\9aà«\8dàª\9bà«\87દ: $1',
+'editsectionhint' => 'પરિàª\9aà«\8dàª\9bà«\87દ àª«à«\87રફાર àª\95રà«\8b: $1',
 'toc' => 'અનુક્રમણિકા',
 'showtoc' => 'બતાવો',
 'hidetoc' => 'છુપાવો',
@@ -456,7 +454,7 @@ $1',
 'sort-ascending' => 'ચડતા ક્રમમાં ગોઠવો',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'લà«\87àª\96',
+'nstab-main' => 'પાનà«\81àª\82',
 'nstab-user' => 'સભ્ય પાનું',
 'nstab-media' => 'મિડીયા પાનું',
 'nstab-special' => 'ખાસ પાનું',
@@ -602,8 +600,6 @@ $2',
 'gotaccountlink' => 'પ્રવેશ કરો',
 'userlogin-resetlink' => 'પોતાની પ્રવેશ માહિતી ભૂલી ગયા છો?',
 'userlogin-resetpassword-link' => 'તમારો પાસવર્ડ ભૂલી ગયા છો?',
-'helplogin-url' => 'Help:પ્રવેશ માટે',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|પ્રવેશવા માટેની મદદ]]',
 'userlogin-loggedin' => 'તમે પહેલેથી {{GENDER:$1|$1}} તરીકે પ્રવેશ કરેલો જ છે.
 બીજા સભ્ય તરીકે પ્રવેશ કરવા માટે નીચેનું ફોર્મ વાપરો.',
 'userlogin-createanother' => 'બીજું ખાતું બનાવો',
@@ -703,6 +699,9 @@ $2',
 'suspicious-userlogout' => 'લોગ આઉટ કરવાની તમારી વિનંતિ પૂરી ન કરી શકાઇ. એમ લાગે છે કે તેને તૃટિ પામેલ બ્રાઉઝર કે પ્રોક્સી દ્વારા મોકલાઈ હતી.',
 'createacct-another-realname-tip' => 'સાચું નામ મરજીયાત છે.
 જો તમે તે આપવાનું પસંદ કરશો, તો તેનો ઉપયોગ તમે કરેલ યોગદાનનું શ્રેય આપવા માટે થશે.',
+'pt-login' => 'પ્રવેશ કરો',
+'pt-createaccount' => 'ખાતું બનાવો',
+'pt-userlogout' => 'બહાર નીકળો',
 
 # Email sending
 'php-mail-error-unknown' => 'PHPની મેલ() કામગીરીમાં અજ્ઞાત ત્રુટિ',
@@ -711,8 +710,7 @@ $2',
 
 # Change password dialog
 'changepassword' => 'ગુપ્તસંજ્ઞા બદલો',
-'resetpass_announce' => 'તમે હંગામી ઇમેઇલ કોડ સાથે લોગ ઇન કર્યું.
-લોગીંગ પુરૂં કરવા માટે તમારે નવી ગુપ્ત સંજ્ઞા (પાસવર્ડ) આપવો પડશે:',
+'resetpass_announce' => 'પ્રવેશ પૂર્ણ કરવા માટે, તમારે નવો પાસવર્ડ ગોઠવવો જ પડશે.',
 'resetpass_text' => '<!-- અહીં ટેક્સટ ઉમેરો -->',
 'resetpass_header' => 'ખાતાની ગુપ્તસંજ્ઞા બદલો',
 'oldpassword' => 'જુની ગુપ્તસંજ્ઞા:',
@@ -1096,8 +1094,6 @@ $3 દ્વારા અપાયેલ કારણ છે ''$2''",
 'revdelete-show-file-submit' => 'હા',
 'revdelete-selected' => "''' [[:$1]] ના {{PLURAL:$2|પસંદ કરેલ ફેરફાર |પસંદ કરેલ ફેરફારો}}: '''",
 'logdelete-selected' => "'''{{PLURAL:$1|પસંદગી કરેલ લોગ ઘટના | પસંદગી કરેલ લોગ ઘટનાઓ }}:'''",
-'revdelete-text' => "''' રદ્દ કરાયેલ ફેરફારો અને ઘટનાઓ પાનાના ઈતિહાસ અને લોગમાં દેખાશે , પણ તેની અંદરની માહિતી જન સમુદાયથી અદ્રશ્ય રહેશે. '''
-{{SITENAME}} પરના અન્ય પ્રબંધકો આ અદ્રશ્ય માહિતે જોઇ શકશે અને તેને પુનઃ જીવિત કરી શકશે સિવાય કે તેના પર વધારાની પાબંદી ન મુકાઇ હોય.",
 'revdelete-confirm' => 'કૃપયા પુષ્ટિ કરો કે તમે શું કરી રહ્યા છો તેની અને તેના પરિણામોની તમને જાણ છે અને તમે આ બધું  [[{{MediaWiki:Policy-url}}|the policy]] અ6તર્ગત કરી રહ્યાં છો.',
 'revdelete-suppress-text' => "બળ પૂર્વક છુપાવવું \"માત્ર\" આજ સંજોગોમાં કરી શકાશે:
 * સંભવતઃ ભયાજનક માહિતી 
@@ -1209,7 +1205,7 @@ $1",
 'shown-title' => 'પ્રતિ પાને $1 {{PLURAL:$1|પરિણામ|પરિણામો}} બતાવો',
 'viewprevnext' => 'જુઓ: ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "''' આ વિકિ પર  \"[[:\$1]]\" નામે પાનું પહેલેથી અસ્તિત્વમાં છે.'''",
-'searchmenu-new' => "'''આ વિકિ પર \"[[:\$1]]\" નામે પાનું બનાવો!'''",
+'searchmenu-new' => '<strong>આ વિકિ પર "[[:$1]]" પાનું બનાવો!</strong> {{PLURAL:$2|0=|તમારી શોધમાં મળેલ પાનું પણ જુઓ.|તમારી શોધમાં મળેલ પરિણામો પણ જુઓ.}}',
 'searchprofile-articles' => 'લેખનું પાનું',
 'searchprofile-project' => 'મદદ અને યોજના પાનું',
 'searchprofile-images' => 'દ્રશ્ય શ્રાવ્ય માધ્યમ',
@@ -1220,14 +1216,14 @@ $1",
 'searchprofile-images-tooltip' => 'ફાઇલ શોધો',
 'searchprofile-everything-tooltip' => 'બધે જ શોધો (ચર્ચાનાં પાના સહિત)',
 'searchprofile-advanced-tooltip' => 'સ્થાનીય નામસ્થળોમાં શોધો:',
-'search-result-size' => '$1 ({{PLURAL:$2|1 શબ્દ|$2 શબ્દો}})',
+'search-result-size' => '$1 ({{PLURAL:$2| શબ્દ|$2 શબ્દો}})',
 'search-result-category-size' => '{{PLURAL:$1|1 સભ્ય|$1 સભ્યો}} ({{PLURAL:$2|1 ઉપ શ્રેણી|$2 ઉપ શ્રેણીઓ}}, {{PLURAL:$3|1 ફાઇલ|$3 ફાઇલો}})',
 'search-result-score' => 'પ્રસ્તુતિ: $1%',
 'search-redirect' => '(અન્યત્ર પ્રસ્થાન $1)',
 'search-section' => '(વિભાગ $1)',
 'search-suggest' => 'શું તમે $1 કહેવા માંગો છો?',
 'search-interwiki-caption' => 'બંધુ પ્રકલ્પ',
-'search-interwiki-default' => '$1 પરીણામો:',
+'search-interwiki-default' => '$1 àª®àª¾àª\82થà«\80 àªªàª°à«\80ણામà«\8b:',
 'search-interwiki-more' => '(વધુ)',
 'search-relatedarticle' => 'શોધ સંબંધિત',
 'searcheverything-enable' => 'નામસ્થળોમાં શોધો:',
@@ -1544,14 +1540,26 @@ HTML નાકું ચકાસો',
 'recentchanges-label-unpatrolled' => 'આ ફેરફાર હજી ચકાસાયો નથી',
 'recentchanges-label-plusminus' => 'પાનાનું કદ આપેલા અંકો જેટલાં બાઈટ્સ જેટલું બદલ્યુ છે.',
 'recentchanges-legend-newpage' => '([[Special:NewPages|નવા પાનાઓની યાદી]] પણ જુઓ)',
-'rcnotefrom' => "નીચે '''$2'''થી થયેલાં '''$1''' ફેરફારો દર્શાવ્યાં છે.",
+'rcnotefrom' => 'નીચે <strong>$2</strong> થી ફેરફારો દર્શાવેલ છે (<strong>$1</strong> સુધી દર્શાવલે છે).',
 'rclistfrom' => '$1 બાદ થયેલા નવા ફેરફારો બતાવો',
 'rcshowhideminor' => 'નાના ફેરફારો $1',
+'rcshowhideminor-show' => 'બતાવો',
+'rcshowhideminor-hide' => 'છુપાવો',
 'rcshowhidebots' => 'બૉટો $1',
-'rcshowhideliu' => 'લૉગ ઇન થયેલાં સભ્યો $1',
+'rcshowhidebots-show' => 'બતાવો',
+'rcshowhidebots-hide' => 'છુપાવો',
+'rcshowhideliu' => '$1 નોંધણી કરેલ સભ્યો',
+'rcshowhideliu-show' => 'બતાવો',
+'rcshowhideliu-hide' => 'છુપાવો',
 'rcshowhideanons' => 'અનામી સભ્યો $1',
+'rcshowhideanons-show' => 'બતાવો',
+'rcshowhideanons-hide' => 'છુપાવો',
 'rcshowhidepatr' => '$1 ચોકીયાત ફેરફારો',
+'rcshowhidepatr-show' => 'બતાવો',
+'rcshowhidepatr-hide' => 'છુપાવો',
 'rcshowhidemine' => 'મારા ફેરફારો $1',
+'rcshowhidemine-show' => 'બતાવો',
+'rcshowhidemine-hide' => 'છુપાવો',
 'rclinks' => 'છેલ્લાં $2 દિવસમાં થયેલા છેલ્લાં $1 ફેરફારો દર્શાવો<br />$3',
 'diff' => 'ભેદ',
 'hist' => 'ઇતિહાસ',
@@ -1994,7 +2002,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'nimagelinks' => '$1 {{PLURAL:$1|પાના|પાનાઓ}} પર વપરાયો',
 'ntransclusions' => '$1 {{PLURAL:$1|પાના|પાનાઓ}} પર વપરાયો',
 'specialpage-empty' => 'આ પાનું ખાલી છે.',
-'lonelypages' => 'અનાથ પાના',
+'lonelypages' => 'અનાથ પાનાંઓ',
 'lonelypagestext' => 'નીચે બતાવેલા પાના {{SITENAME}} પર કે થી કડી દ્વારા જોડાયેલ નથી',
 'uncategorizedpages' => 'અવર્ગીકૃત પાનાં',
 'uncategorizedcategories' => 'અવર્ગીકૃત શ્રેણીઓ',
@@ -2027,6 +2035,10 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'protectedpages-indef' => 'ફક્ત અનિશ્ચિત સુરક્ષા ધરાવતા પાના',
 'protectedpages-cascade' => 'માત્ર પગથિયામય સુરક્ષા વાળા પગ',
 'protectedpagesempty' => 'આ વિકલ્પો દ્વારા કોઈ પાના સુરક્ષિત કરાયા નથી.',
+'protectedpages-page' => 'પાનું',
+'protectedpages-reason' => 'કારણ',
+'protectedpages-unknown-timestamp' => 'અજ્ઞાત',
+'protectedpages-unknown-performer' => 'અજ્ઞાત સભ્ય',
 'protectedtitles' => 'સંરક્ષિત શીર્ષકો',
 'protectedtitlesempty' => 'આ પરિબળો દ્વારા કોઇ પણ શીર્ષકો સચવાયા નથી.',
 'listusers' => 'સભ્યોની યાદી',
@@ -2586,8 +2598,9 @@ $1',
 'change-blocklink' => 'પ્રતિબંધમાં ફેરફાર કરો',
 'contribslink' => 'યોગદાન',
 'emaillink' => 'ઈ-મેલ મોકલો',
-'autoblocker' => 'તમારા પર સ્વયંચાલિત રીતે રોક લગાવાઇ છે કેમકે તમારો IP હાલમાં "[[User:$1|$1]]" સભ્ય દ્વારા વપરાયો છે.
-તેનું કારણ આ છે : "$2"',
+'autoblocker' => 'તમારા પર સ્વયંચાલિત રીતે રોક લગાવાઇ છે કેમ કે તમારું IP સરનામું હાલમાં "[[User:$1|$1]]" સભ્ય દ્વારા વપરાયેલ છે.
+
+$1નાં પ્રતિબંધનું કારણ "$2" છે',
 'blocklogpage' => 'પ્રતિબંધ સૂચિ',
 'blocklog-showlog' => 'આ સભ્ય પર પહેલા રોક લગાવાઈ છે.
 રોકા લગાવાયેલા સભ્યોની યાદિ આ મુજબ છે',
@@ -2609,7 +2622,7 @@ $1',
 'range_block_disabled' => 'પ્રબંધકના સમૂહીક રોક લગાડવાનો અધિકાર નીષ્ક્રિય',
 'ipb_expiry_invalid' => 'સમાપ્તિનો સમય માન્ય નથી.',
 'ipb_expiry_temp' => 'સંતાડેલા સભ્યનામ પ્રતિબંધનો કાયમી જ હોવા જોઇએ.',
-'ipb_hide_invalid' => 'àª\86 àªªàª¾àª¨àª¾àª¨à«\87 àª\9bà«\81પાવવà«\8b àª¸àª\82ભવ àª¨àª¥à«\80 àª¤à«\87માàª\82 àª\98ણા àª¬àª§àª¾àª\82 àª«à«\87રફારà«\8b àª\9bà«\87',
+'ipb_hide_invalid' => 'àª\86 àª\96ાતાàª\82નà«\87 àª\9bà«\81પાવવાàª\82 àª\85સàª\95à«\8dષમ; àª¤à«\87માàª\82 {{PLURAL:$1|àª\8fàª\95 àª«à«\87રફાર|$1 àª«à«\87રફારà«\8b}} àª\9bà«\87.',
 'ipb_already_blocked' => ' "$1" પહેલેથી પ્રતિબંધિત છે',
 'ipb-needreblock' => '$1 પહેલેથી પ્રતિબંધિત છે.
 તમારે આ સેટીંગ બદલવી છે?',
@@ -2782,6 +2795,7 @@ $1',
 'allmessages-prefix' => 'ઉપસર્ગ દ્વારા અલગ તારવો',
 'allmessages-language' => 'ભાષા:',
 'allmessages-filter-submit' => 'કરો',
+'allmessages-filter-translate' => 'ભાષાંતર કરો',
 
 # Thumbnails
 'thumbnail-more' => 'વિસ્તૃત કરો',
@@ -2873,7 +2887,7 @@ $2',
 'tooltip-pt-preferences' => 'તમારી પસંદગીઓ',
 'tooltip-pt-watchlist' => 'તમે દેખરેખ રાખી રહ્યાં હોવ તેવા પાનાઓની યાદી',
 'tooltip-pt-mycontris' => 'તમારા યોગદાનની યાદી',
-'tooltip-pt-login' => 'àª\86પનà«\87 àª²à«\8bàª\97 àª\87ન કરવા ભલામણ કરવામાં આવે છે, જોકે તે આવશ્યક નથી',
+'tooltip-pt-login' => 'àª\86પનà«\87 àªªà«\8dરવà«\87શ કરવા ભલામણ કરવામાં આવે છે, જોકે તે આવશ્યક નથી',
 'tooltip-pt-logout' => 'બહાર નીકળો/લૉગ આઉટ કરો',
 'tooltip-ca-talk' => 'અનુક્રમણિકાનાં પાના વિષે ચર્ચા',
 'tooltip-ca-edit' => "આપ આ પાનામાં ફેરફાર કરી શકો છો, કાર્ય સુરક્ષિત કરતાં પહેલાં 'ઝલક' બટન ઉપર ક્લિક કરીને જોઇ લેશો",
@@ -2885,12 +2899,12 @@ $2',
 'tooltip-ca-delete' => 'આ પાનું હટાવો',
 'tooltip-ca-undelete' => 'આ પાનું હટાવાયું તે પહેલાના ફેરફારો હટાવો.',
 'tooltip-ca-move' => 'આ પાનું ખસેડો',
-'tooltip-ca-watch' => 'આ પાનું તમારી ધ્યાનસૂચીમા ઉમેરો',
-'tooltip-ca-unwatch' => 'આ પાનું તમારી ધ્યાનસૂચીમાથી કાઢી નાખો',
+'tooltip-ca-watch' => 'આ પાનું તમારી ધ્યાનસૂચીમા ઉમેરો',
+'tooltip-ca-unwatch' => 'àª\86 àªªàª¾àª¨à«\81àª\82 àª¤àª®àª¾àª°à«\80 àª§à«\8dયાનસà«\82àª\9aà«\80માàª\82થà«\80 àª\95ાઢà«\80 àª¨àª¾àª\96à«\8b',
 'tooltip-search' => '{{SITENAME}} શોધો',
 'tooltip-search-go' => 'આ ચોક્કસ જોડણી વાળુ પાનુ જો અસ્તિત્વમાં હોય તો તેના પર જાવ',
-'tooltip-search-fulltext' => 'àª\86 àª²àª\96ાણ àªµàª¾àª³àª¾ પાનાઓ શોધો',
-'tooltip-p-logo' => 'મુખપૃષ્ઠ',
+'tooltip-search-fulltext' => 'àª\86 àª²àª\96ાણ àª§àª°àª¾àªµàª¤àª¾àª\82 પાનાઓ શોધો',
+'tooltip-p-logo' => 'મુખપૃષ્ઠની મુલાકાત લો',
 'tooltip-n-mainpage' => 'મુખપૃષ્ઠ પર જાઓ',
 'tooltip-n-mainpage-description' => 'મુખ્ય પાના પર જાઓ',
 'tooltip-n-portal' => 'પરિયોજના વિષે, આપ શું કરી શકો અને વસ્તુઓ ક્યાં શોધશો',
@@ -2905,7 +2919,7 @@ $2',
 'tooltip-t-contributions' => 'આ સભ્યનાં યોગદાનોની યાદી જુઓ',
 'tooltip-t-emailuser' => 'આ સભ્યને ઇ-મેલ મોકલો',
 'tooltip-t-upload' => 'ફાઇલ ચડાવો',
-'tooltip-t-specialpages' => 'બધા àª\96ાસ àªªàª¾àª¨àª¾àª\93નà«\80 àª¸à«\82àª\9aિ',
+'tooltip-t-specialpages' => 'બધા àª\96ાસ àªªàª¾àª¨àª¾àª\82àª\93નà«\80 àª¯àª¾àª¦à«\80',
 'tooltip-t-print' => 'આ પાનાની છાપવા માટેની આવૃત્તિ',
 'tooltip-t-permalink' => 'પાનાનાં આ પુનરાવર્તનની સ્થાયી કડી',
 'tooltip-ca-nstab-main' => 'સૂચિ વાળું પાનુ જુઓ',
@@ -2968,7 +2982,7 @@ $2',
 'pageinfo-header-properties' => 'પાનાંના ગુણધર્મો',
 'pageinfo-display-title' => 'દેખાવ શિર્ષક',
 'pageinfo-default-sort' => 'મૂળભૂત ગોઠવણી કળ',
-'pageinfo-length' => 'પà«\83ષà«\8dઠની લંબાઇ (બાઇટમાં)',
+'pageinfo-length' => 'પાનાàª\82ની લંબાઇ (બાઇટમાં)',
 'pageinfo-article-id' => 'પાનાં ઓળખ',
 'pageinfo-language' => 'પાનાંની વિગતની ભાષા',
 'pageinfo-robot-policy' => 'રોબોટ્સ દ્વારા અનુક્રમિત',
@@ -2989,7 +3003,7 @@ $2',
 'pageinfo-magic-words' => 'ચમત્કારી {{PLURAL:$1|શબ્દ|શબ્દો}} ($1)',
 'pageinfo-hidden-categories' => 'છુપી {{PLURAL:$1|શ્રેણી|શ્રેણીઓ}} ($1)',
 'pageinfo-templates' => 'પ્રયુક્ત {{PLURAL:$1|ઢાંચો|ઢાંચાઓ}} ($1)',
-'pageinfo-toolboxlink' => 'પà«\83ષà«\8dઠમાહિતી',
+'pageinfo-toolboxlink' => 'પાનાàª\82નà«\80 માહિતી',
 'pageinfo-redirectsto' => 'તરફ દિશાનિર્દેશન',
 'pageinfo-redirectsto-info' => 'માહિતી',
 'pageinfo-contentpage-yes' => 'હા',
@@ -3507,7 +3521,7 @@ $2',
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'બધા',
 'namespacesall' => 'બધા',
-'monthsall' => 'બધા',
+'monthsall' => 'બધા',
 
 # Email address confirmation
 'confirmemail' => 'તમારા ઇ-મેઇલ સરનામાની પુષ્ટિ કરો',
@@ -3600,6 +3614,10 @@ $5
 'imgmultigo' => 'જાઓ!',
 'imgmultigoto' => 'પાના  $1 પર જાવ',
 
+# Language selector for translatable SVGs
+'img-lang-default' => '(મૂળભુત ભાષા)',
+'img-lang-go' => 'જાઓ',
+
 # Table pager
 'ascending_abbrev' => 'ચડતો ક્ર્મ',
 'descending_abbrev' => 'ઉતરતો ક્ર્મ',
@@ -3680,7 +3698,14 @@ $5
 'version-hook-name' => 'ખૂંટાનું નામ્',
 'version-hook-subscribedby' => 'દ્વ્રારા લાભાન્વીત',
 'version-version' => '(આવૃત્તિ $1)',
-'version-license' => 'પરવાનો',
+'version-license' => 'મીડિઆવિકિ લાયસન્સ',
+'version-ext-license' => 'લાયસન્સ',
+'version-ext-colheader-version' => 'આવૃત્તિ',
+'version-ext-colheader-license' => 'લાયસન્સ',
+'version-ext-colheader-description' => 'વર્ણન',
+'version-ext-colheader-credits' => 'લેખકો',
+'version-license-title' => '$1 માટે લાયસન્સ',
+'version-credits-title' => '$1 માટે યશ',
 'version-poweredby-credits' => "આ વિકિ  '''[https://www.mediawiki.org/ MediaWiki]''' દ્વારા ચાલે છે, પ્રકાશનાધિકાર © 2001-$1 $2.",
 'version-poweredby-others' => 'અન્યો',
 'version-poweredby-translators' => 'ટ્રાન્સલેટવિકિ.નેટ ભાષાંતરકર્તાઓ',
@@ -3717,7 +3742,7 @@ $5
 'fileduplicatesearch-noresults' => ' "$1" નામ ધરાવતી કોઇ ફાઇલ ન મળી',
 
 # Special:SpecialPages
-'specialpages' => 'ખાસ પાનાં',
+'specialpages' => 'ખાસ પાનાં',
 'specialpages-note' => '* નિયમિત ખાસ પાનાં.
 * <span class="mw-specialpagerestricted">પ્રતિબંધિત ખાસ પાનાં.</span>',
 'specialpages-group-maintenance' => 'સમારકામ અહેવાલ',
index 653336c..462462c 100644 (file)
@@ -13,7 +13,6 @@
 $messages = array(
 # User preference toggles
 'tog-underline' => 'A shaya zaruruwa',
-'tog-justify' => 'A daidaita sakin layuka',
 'tog-hideminor' => 'A ɓoye ƙananan gyare-gyare na baya-bayan nan',
 'tog-hidepatrolled' => 'A ɓoye gyare-gyaren kan ido a cikin gyare-gyare bayan-bayan nan',
 'tog-newpageshidepatrolled' => 'A ɓoye shafuna kan ido a cikin sabbin shafuna',
@@ -22,9 +21,7 @@ $messages = array(
 'tog-numberheadings' => 'A lambace kanun matani kai tsaye',
 'tog-showtoolbar' => 'A nuna sandar kayan aiki ta gyarawa (ana buƙatar JavaScript)',
 'tog-editondblclick' => 'A gyara shafuna da dabar-kiliki (ana buƙatar JavaScript)',
-'tog-editsection' => 'A lamunta gyara sashe ta hanyar zaruruwan [gyarawa]',
 'tog-editsectiononrightclick' => 'A lamunta gyara shashe da kilikin dama a kan kanun shashe (ana buƙatar JavaScript)',
-'tog-showtoc' => 'A nuna jadawalin kanu (cikin shafuna masu fiye da kanu 3)',
 'tog-rememberpassword' => 'A adana bayanan loginkina a wannan kwamfyuta (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'A daɗa shafunan da na ƙirƙira a cikin jerina na kan ido',
 'tog-watchdefault' => 'A daɗa shafunan da na gyara a cikin jerina na kan ido',
@@ -33,7 +30,6 @@ $messages = array(
 'tog-minordefault' => 'A alamta gyare-gyarena a matsayin ƙanana bisa manufa',
 'tog-previewontop' => 'A nuna filin rigya-gani sama ga filin gyare-gyare',
 'tog-previewonfirst' => 'A nuna rigya-gani tun gyaran farin',
-'tog-nocache' => 'A tsayar da kacin shafi',
 'tog-enotifwatchlistpages' => 'A shaida mani ta Imel idan wani shafin jeerina na bin-sau ya sauya',
 'tog-enotifusertalkpages' => 'A shaida mani ta Imel idan shafina na muhawara ya sauya',
 'tog-enotifminoredits' => 'A shaida mani ta Imel game da ko da ƙaramin gyara ne',
@@ -373,7 +369,6 @@ Fasali: '''({{int:cur}})''' = bambanci da zubi na yanzu, '''({{int:last}})''' =
 'recentchanges' => 'Sauye-sauyen baya-bayan nan',
 'recentchanges-legend' => 'Zaɓi na sauye-sauyen baya-bayan nan',
 'recentchanges-feed-description' => 'Bi sawun sauye-sauyen ƙarshe na wikin da ke cikin wannan kwarare',
-'rcnote' => "A nan ƙasa an nuna {{PLURAL:$1|sauyi '''1'''|sauye-sauyen ƙarshe '''$1'''}} a cikin {{PLURAL:$2|awowi 24 da suka shige|'''$2''' kwanaki}}, har zuwa $5, $4.",
 'rclistfrom' => 'Nuna sabbin sauye-sauye tun daga $1',
 'rcshowhideminor' => '$1 ƙananen sauye-sauye',
 'rcshowhidebots' => 'Rabuwat $1',
@@ -582,7 +577,6 @@ Kuna iya sake wa wannan shafi matakin kariya, amma hakan ba zai yi tasiri ga kar
 # Block/unblock
 'blockip' => "Hana ma'aikaci",
 'ipbreason' => 'Dalili:',
-'ipbreasonotherlist' => 'Wani dalili',
 'ipboptions' => 'awa 2:2 hours,kwana 1:1 day,kwana 3:3 days,mako 1:1 week,mako 2:2 weeks,wata 1:1 month,wata 3:3 months,wata 6:6 months,shekara 1:1 year,illa masha allahu:infinite',
 'ipblocklist' => "Adireshin IP da ma'aikatan da aka hana",
 'ipblocklist-submit' => 'Nema',
index e328159..fd09659 100644 (file)
@@ -183,7 +183,6 @@ $messages = array(
 'vector-action-protect' => '保護',
 'vector-action-undelete' => '恢復',
 'vector-action-unprotect' => '更改保護',
-'vector-simplesearch-preference' => '啟用簡化搜尋欄(僅限Vector外皮)',
 'vector-view-create' => '建立',
 'vector-view-edit' => '編寫',
 'vector-view-history' => '查看歷史',
@@ -216,8 +215,8 @@ $messages = array(
 'delete' => '刪除',
 'deletethispage' => '刪除本頁',
 'undeletethispage' => '取消刪除邇頁',
-'undelete_short' => '恢復$1隻分删除编寫',
-'viewdeleted_short' => '查看$1項已刪除修訂',
+'undelete_short' => '恢復$1隻分删除编寫',
+'viewdeleted_short' => '查看$1項已刪除修訂',
 'protect' => '保護',
 'protect_change' => '更改',
 'protectthispage' => '保護本頁',
@@ -461,8 +460,6 @@ $2',
 'gotaccountlink' => '登入',
 'userlogin-resetlink' => '毋記得汝嘅登入信息?',
 'userlogin-resetpassword-link' => '重置爾嘅密碼',
-'helplogin-url' => 'Help:登入',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|登入説明]]',
 'createacct-join' => '輸入汝嘅基本資料:',
 'createacct-emailrequired' => '電郵地址:',
 'createacct-emailoptional' => '電郵地址(可選)',
@@ -801,7 +798,6 @@ Liá-chhṳ chhà-fûng he yù $1 só fûng ke. Tông-chûng ke ngièn-yîn he '
 'revdelete-show-file-submit' => '係',
 'revdelete-selected' => "'''選取[[:$1]]嘅$2次修訂:'''",
 'logdelete-selected' => "'''Chhí-chhṳ '''$1''' ke $2-ke ngit-ki hong-muk:'''",
-'revdelete-text' => "'''Chhù-thet ke siû-thin yìn-yèn chiông-voi hién-sṳ chhai vùn-chông li̍t-sṳ́ chûng, than vùn-sṳ nui-yùng yí-kîn put-nèn pûn chung-ngìn fóng-mun.''' Chhai chhṳ́ miong-chham ke khì-thâ kón-lî-yèn chiông chhòi-nèn fóng-mun yún-chhòng ke nui-yùng pin theu-ko siông-thùng ke kie-mien fî-fu̍k chhù-hi, chhù-fî miong-chham kûng-chok-chá chin-hàng han-chṳ.",
 'revdelete-legend' => 'Sat-thin siû-thin han-chṳ:',
 'revdelete-hide-text' => '隱藏修訂版本文字',
 'revdelete-hide-image' => '隱藏文件內容',
index 7ba43b1..4da5e39 100644 (file)
@@ -89,32 +89,55 @@ $magicWords = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Kahalalo i nā loulou:',
-'tog-justify' => 'Ho‘okaulihi i nā paukū',
-'tog-hideminor' => 'E hūnā i nā ho‘opololei iki ma nā loli hou',
-'tog-editondblclick' => 'Ho‘opololei i nā ‘ao‘ao ma ke kōmi pālua (JavaScript)',
-'tog-showtoc' => 'Hō‘ike i ka papa kuhikuhi',
-'tog-rememberpassword' => 'Hoʻomanaʻo iaʻu ma kēia lolo uila (no ka palena nui o $1 {{PLURAL:$1|lā|mau lā}})',
-'tog-watchcreations' => 'Ho‘ohui i nā ‘ao‘ao i hana ai au i ka‘u papa nānā pono',
-'tog-watchdefault' => 'Ho‘ohui i nā ‘ao‘ao i ho‘opololei ai au i ka‘u papa nānā pono',
-'tog-watchmoves' => 'Ho‘ohui i nā ‘ao‘ao i ne‘e ai au i ka‘u papa nānā pono',
-'tog-watchdeletion' => 'Ho‘ohui i nā ‘ao‘ao i kāpae ai au i ka‘u papa nānā pono',
-'tog-previewontop' => 'Hō‘ike i ka nāmua mamua o ke kau ho‘opololei',
-'tog-previewonfirst' => 'Hō‘ike i ka nāmua ma ka ho‘ololi mua',
-'tog-enotifwatchlistpages' => 'Ke loli kekahi ‘ao‘ao ma ka‘u papa nānā pono, leka uila ia‘u',
-'tog-enotifusertalkpages' => 'Ke loli ka‘u ʻaoʻao kūkākūkā, leka uila ia‘u',
-'tog-enotifminoredits' => 'No nā ho‘opololei ‘ana, leka uila ia‘u',
-'tog-enotifrevealaddr' => 'Hō‘ike i ko‘u leka uila ma nā leka uila hō‘ike',
-'tog-shownumberswatching' => 'Hō‘ike i ka heluna o nā mea ho‘ohana e nānā ai',
-'tog-fancysig' => 'Nā kākau inoa kūlohelohe (‘a‘ole me ka loulou hana nona iho)',
-'tog-forceeditsummary' => 'Ke kāhuakomo au i kekahi ho‘ulu‘ulu mana‘o ‘ole, ha‘i mai iaʻu',
-'tog-watchlisthideown' => 'Hūnā i ko‘u mau ho‘ololi ma ka papa nānā pono',
-'tog-watchlisthidebots' => 'Hūnā i nā ho‘opololei ‘ana o nā lopako mai ka papa nānā pono',
-'tog-watchlisthideminor' => 'E hūnā i nā ho‘ololi iki ma ka papa nānā pono',
-'tog-ccmeonemails' => 'Hā‘awi mai i nā kope o nā leka uila i hā‘awi ai au i kekahi mau mea ho‘ohana.',
-'tog-showhiddencats' => 'Hō‘ike i nā mahele huna',
-
-'underline-always' => 'Mau',
+'tog-hideminor' => 'E hoʻohūnā i nā ho‘ololi iki ma nā loli hou',
+'tog-hidepatrolled' => 'E hoʻohūnā i nā loli kiaʻi kaʻahele ma nā loli hou',
+'tog-newpageshidepatrolled' => 'E hoʻohūnā i nā ʻaoʻao kiaʻi kaʻahele mai ka papahelu ʻaoʻao hou',
+'tog-extendwatchlist' => 'E hoʻākea i ka papakiaʻi no ka hōʻike ʻana i nā loli apau, ʻaʻole nā mea hanawale wale nō',
+'tog-usenewrc' => 'Nā loli hui mao ka ʻaoʻao ma loko o ka loli hou a me ka papakiaʻi',
+'tog-numberheadings' => 'E hikahelu i nā poʻo',
+'tog-showtoolbar' => 'E hōʻike i ka pahu hāmeʻa hoʻololi',
+'tog-editondblclick' => 'E ho‘ololi i nā ‘ao‘ao me ke kōmi pālua',
+'tog-editsectiononrightclick' => 'E hoʻokuʻu i ka hoʻololi mahele mao ka paʻina ʻākau ma nā poʻoinoa māhele',
+'tog-rememberpassword' => 'E hoʻomanaʻo iaʻu ma kēia lolo uila (no ka palena nui o $1 {{PLURAL:$1|lā|mau lā}})',
+'tog-watchcreations' => 'E ho‘ohui i nā ‘ao‘ao aʻu i hana ai a me nā waihona aʻu i hoʻouka ai i ka‘u papakiaʻi',
+'tog-watchdefault' => 'E ho‘ohui i nā ‘ao‘ao a me nā waihona aʻu e hoʻololi ai i ka‘u papakiaʻi',
+'tog-watchmoves' => 'E ho‘ohui i nā ‘ao‘ao a me nā waihona aʻu e ne‘e ai i ka‘u papakiaʻi',
+'tog-watchdeletion' => 'E ho‘ohui i nā ‘ao‘ao a me nā waihona aʻu e holoi ai i ka‘u papakiaʻi',
+'tog-minordefault' => 'E kaha i nā loli apau i ka loli iki mao ka paʻamau',
+'tog-previewontop' => 'E hō‘ike i ka nāmua mamua o ka pahu hoʻololi',
+'tog-previewonfirst' => 'E hō‘ike i ka nāmua ma ka ho‘ololi mua',
+'tog-enotifwatchlistpages' => 'E leka uila iaʻu i ka loli ʻana o kekahi waihona aiʻole kekahi ʻaoʻao ma kaʻu papakiaʻi',
+'tog-enotifusertalkpages' => 'E leka uila iaʻu i ka loli ʻana o kaʻu ʻaoʻao walaʻau',
+'tog-enotifminoredits' => 'E leka uila iaʻu no nā loli iki o nā ʻaoʻao a me nā waihona',
+'tog-enotifrevealaddr' => 'E hō‘ike i kaʻu wahinoho lekauila ma nā lekauila notikala',
+'tog-shownumberswatching' => 'E hō‘ike i ka helu o nā mea ho‘ohana e nānā nei',
+'tog-oldsig' => 'Pūlima hananei:',
+'tog-fancysig' => 'E hana i ka pūlima me he wikitext (me ʻole i ka loulou hanawale)',
+'tog-uselivepreview' => 'E hana i ka nāmua ʻānō (hoʻokolohua)',
+'tog-forceeditsummary' => 'E kono iaʻu i ka hoʻokomo ʻana i kekahi hōʻuluʻulu manaʻo hoʻololi hou',
+'tog-watchlisthideown' => 'E hoʻohūnā i ko‘u mau ho‘ololi mai ka papakiaʻi',
+'tog-watchlisthidebots' => 'E hoʻohūnā i nā loli o nā lopako mai ka papakiaʻi',
+'tog-watchlisthideminor' => 'E hoʻohūnā i nā loli iki mai ka papakiaʻi',
+'tog-watchlisthideliu' => 'E hoʻohūnā i nā loli e nā mea hoʻohana ʻeʻeia mai ka papakiaʻi',
+'tog-watchlisthideanons' => 'E hoʻohūnā i nā loli e nā mea hoʻohana inoaʻole mai ka papakiaʻi',
+'tog-watchlisthidepatrolled' => 'E hoʻohūnā i nā loli kiaʻi kaʻahele mai ka papakiaʻi',
+'tog-ccmeonemails' => 'E hoʻouna mai i nā kope o nā lekauila aʻu i hāʻawi ai i kekahi mau mea hoʻohana ʻē aʻe.',
+'tog-diffonly' => 'Mai hōʻike i nā mealoko ʻaoʻao ma lalo o ka ʻokoʻa',
+'tog-showhiddencats' => 'E hōʻike i nā māhele hūnā',
+'tog-norollbackdiff' => 'E waiho i ka ʻokoʻa ma hope o ka hana hoʻihoʻi',
+'tog-useeditwarning' => 'E aʻo mai iaʻu i kaʻu haʻalele ʻana i ka ʻaoʻao hoʻololi inā loaʻa i nā loli mālama ʻia ʻole',
+'tog-prefershttps' => 'E hana mau i ka hoʻokuʻi paʻa ma loko o ka ʻeʻe ʻana',
+
+'underline-always' => 'I nā manawa apau',
 'underline-never' => '‘A‘ole loa',
+'underline-default' => 'Paʻamau ʻike aiʻole pōlamu pūnaewele',
+
+# Font style option in Special:Preferences
+'editfont-style' => 'E hoʻololi i kahi kaila hua:',
+'editfont-default' => 'Pōlamu pūnaewele paʻamau',
+'editfont-monospace' => 'Hua pukakahi',
+'editfont-sansserif' => 'Hua Sanā-selifa',
+'editfont-serif' => 'Hua Selifa',
 
 # Dates
 'sunday' => 'Lāpule',
@@ -124,13 +147,13 @@ $messages = array(
 'thursday' => 'Pō‘ahā',
 'friday' => 'Pō‘alima',
 'saturday' => 'Pō‘aono',
-'sun' => 'Lāpule',
-'mon' => 'Pōʻakahi',
-'tue' => 'Pō‘alua',
-'wed' => 'Pō‘akolu',
-'thu' => 'Pō‘ahā',
-'fri' => 'Pō‘alima',
-'sat' => 'Pō‘aono',
+'sun' => 'LP',
+'mon' => 'P1',
+'tue' => 'P2',
+'wed' => 'P3',
+'thu' => 'P4',
+'fri' => 'P5',
+'sat' => 'P6',
 'january' => 'Ianuali',
 'february' => 'Pepeluali',
 'march' => 'Malaki',
@@ -158,7 +181,7 @@ $messages = array(
 'jan' => 'Ian',
 'feb' => 'Pep',
 'mar' => 'Mal',
-'apr' => 'ʻAp',
+'apr' => 'ʻApe',
 'may' => 'Mei',
 'jun' => 'Iun',
 'jul' => 'Iul',
@@ -167,40 +190,69 @@ $messages = array(
 'oct' => 'ʻOk',
 'nov' => 'Now',
 'dec' => 'Kek',
+'january-date' => '$1 Ianuali',
+'february-date' => '$1 Pepeluali',
+'march-date' => '$1 Malaki',
+'april-date' => '$1 ʻApelila',
+'may-date' => '$1 Mei',
+'june-date' => '$1 Iune',
+'july-date' => '$1 Iulai',
+'august-date' => '$1 ʻAukake',
+'september-date' => '$1 Kepakemapa',
+'october-date' => '$1 ʻOkakopa',
+'november-date' => '$1 Nowemapa',
+'december-date' => '$1 Kēkēmapa',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Mahele|Nā mahele}}',
+'pagecategories' => '{{PLURAL:$1|Mahele| mau Māhele}}',
 'category_header' => 'Nā ʻaoʻao i loko o ka mahele "$1"',
-'subcategories' => 'Nā māhele lalo',
-'category-media-header' => 'Nā pāpaho i loko o ka mahele "$1"',
-'category-empty' => "''‘A‘ohe mo‘olelo a me pāpaho o kēia mahele i kēia manawa.''",
-'hidden-categories' => '{{PLURAL:$1|Mahele hūnā|Nā mahele hūnā}}',
-'hidden-category-category' => 'Nā mahele hūnā',
-'listingcontinuesabbrev' => '(ho‘omau ‘ia)',
-
-'about' => 'E pili ana',
-'newwindow' => '(wehe i loko o kekahi pukaaniani ʻē aʻe)',
+'subcategories' => 'Nā Māhele kūloko',
+'category-media-header' => 'Nā Pāpaho i loko o ka mahele "$1"',
+'category-empty' => "''ʻAʻohe ʻaoʻao a me pāpaho a kēia mahele i kēia manawa.''",
+'hidden-categories' => '{{PLURAL:$1|mahele hūnā|mau māhele hūnā}}',
+'hidden-category-category' => 'Nā māhele hūnā',
+'category-subcat-count' => '{{PLURAL:$2|Hoʻokahi mahele kūloko wale nō o kēia mahele.|Aia {{PLURAL:$1|i kēia mahele kūloko|$1 mau māhele kūloko}} i loko o kēia mahele, $2 ka huina.}}',
+'category-article-count' => '{{PLURAL:$2|Hoʻokahi ʻaoʻao wale nō o kēia mahele.|Aia {{PLURAL:$1|i kēia ʻaoʻao|$1 mau ʻaoʻao}} i loko o kēia mahele, $2 ka huina.}}',
+'category-file-count' => '{{PLURAL:$2|Hoʻokahi waihona wale nō o kēia mahele.|Aia {{PLURAL:$1|i kēia waihona|$1 mau waihona}} i loko o kēia mahele, $2 ka huina.}}',
+'listingcontinuesabbrev' => '(homaʻia)',
+'noindex-category' => 'Nā ʻAoʻao i hoʻopapakuhikuhi kikoʻī ʻia',
+
+'about' => 'No ia',
+'newwindow' => '(wehe ʻia i loko o kekahi pukaaniani hou)',
 'cancel' => 'Ho‘ōki',
-'moredotdotdot' => 'Hou...',
-'mypage' => 'Ko‘u ‘ao‘ao',
-'mytalk' => 'Ka‘u kūkākūkā',
-'anontalk' => 'Ke kūkākūkā no kēia IP',
-'navigation' => 'Ka hoʻokele ʻana',
+'moredotdotdot' => 'Nā mea ʻē aʻe...',
+'mypage' => 'Ka‘u ‘ao‘ao',
+'mytalk' => 'Ka‘u walaʻau',
+'anontalk' => 'Walaʻau no kēia IP',
+'navigation' => 'Kelena',
 'and' => '&#32;a me',
 
 # Cologne Blue skin
-'qbfind' => 'Loa‘a',
-'qbedit' => 'E ho‘ololi',
+'qbfind' => 'Loa‘a iā',
+'qbbrowse' => 'Kele',
+'qbedit' => 'Hoʻololi',
 'qbpageoptions' => 'Kēia ‘ao‘ao',
 'qbmyoptions' => 'Ka‘u mau ‘ao‘ao',
+'faq' => 'NNP',
+'faqpage' => 'Project:NNP',
 
 # Vector skin
-'vector-action-delete' => 'E holoi',
-'vector-action-move' => 'Neʻe',
-'vector-action-protect' => 'Hoʻomalu',
-'vector-view-edit' => 'E hoʻololi',
+'vector-action-addsection' => 'Hoʻohui kumuhana',
+'vector-action-delete' => 'Holoi',
+'vector-action-move' => 'E hoʻoneʻe',
+'vector-action-protect' => 'E hoʻomalu',
+'vector-action-undelete' => 'Holoiʻole',
+'vector-action-unprotect' => 'E hoʻololi i ka hoʻomalu',
+'vector-view-create' => 'Haku',
+'vector-view-edit' => 'Hoʻololi',
+'vector-view-history' => 'Nānā i ka mōʻaukala',
 'vector-view-view' => 'Heluhelu',
+'vector-view-viewsource' => 'Nānā i ke kumu',
+'actions' => 'Nā Hana',
+'namespaces' => 'Lewainoa',
+'variants' => 'Nā Lolina',
 
+'navigation-heading' => 'Papa kelena',
 'errorpagetitle' => 'Hewa',
 'returnto' => 'Ho‘i iā $1.',
 'tagline' => 'Mai {{SITENAME}}',
@@ -208,159 +260,256 @@ $messages = array(
 'search' => 'Huli',
 'searchbutton' => 'Huli',
 'go' => 'E huli',
-'searcharticle' => 'Hele',
-'history' => 'Mo‘olelo o ka ‘ao‘ao',
+'searcharticle' => 'E huli',
+'history' => 'Mōʻaukala ʻaoʻao',
 'history_short' => 'Mōʻaukala',
 'printableversion' => 'Mana paʻi pono',
-'permalink' => 'Ka loulou paʻa',
+'permalink' => 'Loulou paʻa',
 'print' => 'Pa‘i',
 'view' => 'Nānā',
-'edit' => 'E ho‘ololi',
-'create' => 'Hana',
-'editthispage' => 'E ho‘opololei i kēia ‘ao‘ao',
-'create-this-page' => 'Hana i keia ‘ao‘ao',
-'delete' => 'E kāpae',
-'deletethispage' => 'E kāpae i kēia mo‘olelo',
-'undelete_short' => 'Wehe-kāpae i {{PLURAL:$1|kekahi ho‘opololei|$1 ho‘opololei}}',
-'protect' => 'E ho‘omalu',
+'edit' => 'Hoʻololi',
+'create' => 'Haku',
+'editthispage' => 'E hoʻololi i kēia ‘ao‘ao',
+'create-this-page' => 'E haku i keia ‘ao‘ao',
+'delete' => 'Holoi',
+'deletethispage' => 'E holoi i kēia ʻaoʻao',
+'undeletethispage' => 'E holoiʻole i kēia ʻaoʻao',
+'undelete_short' => 'E holoiʻole i {{PLURAL:$1|hoʻokahi loli|$1 mau loli}}',
+'viewdeleted_short' => 'E ʻike i {{PLURAL:$1|hoʻokahi loli holoi|$1 mau loli holoi}}',
+'protect' => 'Hoʻomalu',
 'protect_change' => 'hoʻololi',
 'protectthispage' => 'E ho‘omalu i kēia ‘ao‘ao',
-'unprotect' => 'E wehe ho‘omalu',
+'unprotect' => 'E hoʻololi i ka ho‘omalu',
+'unprotectthispage' => 'E hoʻololi i ka hoʻomalu o kēia ʻaoʻao',
 'newpage' => '‘Ao‘ao hou',
 'talkpage' => 'Kūkākūkā i keia ‘ao‘ao',
-'talkpagelinktext' => 'Kūkākūkā',
+'talkpagelinktext' => 'Walaʻau',
 'specialpage' => '‘Ao‘ao kūikawā',
-'personaltools' => 'Nā mea hana ponoʻī',
+'personaltools' => 'Hāmeʻa ponoʻī',
 'postcomment' => 'Māhele hou',
-'talk' => 'Kūkākūkā',
-'views' => 'Nā nānaina',
-'toolbox' => 'Pahu mea hana',
-'userpage' => 'Nānā i ka ‘ao‘ao-mea ho‘ohana',
+'articlepage' => 'Nānā i ka ʻaoʻao mealoko',
+'talk' => 'walaʻau',
+'views' => 'Nānaina',
+'toolbox' => 'Hāmeʻa',
+'userpage' => 'Nānā i ka ‘ao‘ao mea ho‘ohana',
 'projectpage' => 'Nānā i ka ‘ao‘ao papahana',
-'imagepage' => 'Nānā i ka ‘ao‘ao pāpaho',
-'mediawikipage' => 'Nānā i ka ‘ao‘ao memo',
+'imagepage' => 'Nānā i ka ‘ao‘ao waihona',
+'mediawikipage' => 'Nānā i ka ‘ao‘ao pūlono',
 'templatepage' => 'Nānā i ka ‘ao‘ao anakuhi',
 'viewhelppage' => 'Nānā i ka ‘ao‘ao kōkua',
 'categorypage' => 'Nānā i ka ‘ao‘ao mahele',
 'viewtalkpage' => 'Nānā i ke kūkākūkā',
 'otherlanguages' => 'Ma nā leo ʻē aʻe',
-'redirectedfrom' => '(Hoʻoili mai $1)',
-'redirectpagesub' => '‘Ao‘ao e alaka‘i ai',
-'lastmodifiedat' => 'Ua hoʻololi ʻia kēia ʻaoʻao ma ka lā $1, i ka manawa $2.',
+'redirectedfrom' => '(Kia hou mai $1)',
+'redirectpagesub' => 'ʻAoʻao kia hou',
+'lastmodifiedat' => 'Ua kāloli ʻia kēia ʻaoʻao i ka lā $1, ma ka hola $2.',
+'viewcount' => 'Ua komo ʻia kēia ʻaoʻao i {{PLURAL:$1|hoʻokahi manawa|$1 mau manawa}}',
 'protectedpage' => '‘Ao‘ao ho‘omalu',
-'jumpto' => 'Lele i:',
-'jumptonavigation' => 'ka ho‘okele ‘ana',
+'jumpto' => 'Lele iā:',
+'jumptonavigation' => 'kelena',
 'jumptosearch' => 'huli',
+'view-pool-error' => 'E kala mai, ua hoʻoili nui ʻino nā pūnaewele i kēia manawa. Hoʻāʻo nā mea hoʻohana nui kā e ʻike i kēia ʻaoʻao. E ʻoluʻolu, e kali no kekahi mau minuke a hana hou. 
+
+$1',
+'pool-errorunknown' => 'Hewa ʻikeʻole',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => 'E pili ana iā {{SITENAME}}',
-'aboutpage' => 'Project:E pili ana',
-'copyrightpage' => '{{ns:project}}:Palapala ho‘okuleana',
-'currentevents' => 'Ka nū hou',
-'currentevents-url' => 'Project:Ka nū hou',
-'disclaimers' => 'Palapala hoʻokuʻu kuleana',
-'disclaimerpage' => 'Project:Palapala hoʻokuʻu kuleana',
-'edithelp' => 'Kōkua me ka ho‘ololi ‘ana',
-'helppage' => 'Help:Papa kuhikuhi',
-'mainpage' => "Kahua pa'a",
-'mainpage-description' => 'Ka papa kinohi',
-'policy-url' => 'Project:Palapala',
-'portal' => 'Ka hui kaiaulu',
-'portal-url' => 'Project:Ka hui kaiaulu',
-'privacy' => 'Kulekele palekana ʻikepili pilikino',
-'privacypage' => 'Project:Palapala pilikino',
-
-'badaccess' => 'Hewa me ka ‘ae',
+'aboutsite' => 'No {{SITENAME}}',
+'aboutpage' => 'Project:No translatewiki.net',
+'copyrightpage' => '{{ns:project}}:Kūleana kope',
+'currentevents' => 'hou',
+'currentevents-url' => 'Project:hou',
+'disclaimers' => 'Nā Akahele',
+'disclaimerpage' => 'Project:Akahele Laulaha',
+'edithelp' => 'Kōkua ho‘ololi',
+'helppage' => 'Help:Papakuhikuhi',
+'mainpage' => 'Papa Kinohi',
+'mainpage-description' => 'Papa Kinohi',
+'policy-url' => 'Project:Kulekele',
+'portal' => 'Puka Kaiāulu',
+'portal-url' => 'Project:Puka Kaiāulu',
+'privacy' => 'Kulekele pilikino',
+'privacypage' => 'Project:Kulekele pilikino',
+
+'badaccess' => 'Hewa ‘aena',
 
 'ok' => 'Hiki nō',
 'retrievedfrom' => 'Kiʻi ʻia mai "$1"',
-'youhavenewmessages' => 'He $1 ($2) kāu.',
-'youhavenewmessagesmulti' => 'He mau memo kou ma $1',
-'editsection' => 'e ho‘ololi',
-'editold' => 'e ho‘ololi',
-'viewsourceold' => 'nānā i ke kumu kanawai',
+'youhavenewmessages' => '$1 {{PLURAL:$3|kāu}} ($2).',
+'youhavenewmessagesfromusers' => '$1 {{PLURAL:$4|kāu}} mai {{PLURAL:$3|kekahi mea hoʻohana ʻē aʻe|$3 mau mea hoʻohana}} ($2).',
+'youhavenewmessagesmanyusers' => '$1 kāu mai nā mea hoʻohana he nui ($2).',
+'newmessageslinkplural' => '{{PLURAl:$1|Hoʻokahi leka|999=He mau leka}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|loli|999=mau loli}}',
+'youhavenewmessagesmulti' => '$1 kāu',
+'editsection' => 'ho‘ololi',
+'editold' => 'ho‘ololi',
+'viewsourceold' => 'nānā i ke kumu',
 'editlink' => 'hoʻololi',
-'viewsourcelink' => 'nānā i ka molekumu',
+'viewsourcelink' => 'nānā i kkumu',
 'editsectionhint' => 'E hoʻololi i ka paukū: $1',
-'toc' => 'Papa kuhikuhi',
+'toc' => 'Nā Mealoko',
 'showtoc' => 'hō‘ike',
-'hidetoc' => 'hūnā',
-'thisisdeleted' => 'Nānā ai‘ole hō‘āla i $1?',
-'viewdeleted' => 'Nānā i $1?',
-'restorelink' => '{{PLURAL:$1|kekahi ho‘opololei kāpae|nā ho‘opololei kāpae $1}}',
-'site-rss-feed' => 'Hulu RSS o $1',
-'site-atom-feed' => 'Hulu Atom o $1',
-'page-rss-feed' => 'Hulu RSS o "$1"',
-'page-atom-feed' => 'Hulu Atom o "$1"',
-'red-link-title' => '$1 (ʻaʻole i kākau ʻia)',
+'hidetoc' => 'hoʻohūnā',
+'collapsible-collapse' => 'Hoʻoliʻi',
+'collapsible-expand' => 'Hoʻākea',
+'thisisdeleted' => 'Nānā ai‘ole hō‘āla iā $1?',
+'viewdeleted' => 'Nānā iā $1?',
+'restorelink' => '{{PLURAL:$1|kekahi loli holoi|$1 mau loli holoi}}',
+'feedlinks' => 'Hānaīke:',
+'site-rss-feed' => 'Hānaīke RSS o $1',
+'site-atom-feed' => 'Hānaīke Atom o $1',
+'page-rss-feed' => 'Hānaīke RSS o "$1"',
+'page-atom-feed' => 'Hānaīke Atom o "$1"',
+'red-link-title' => '$1 (haku ʻia ʻole)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'ʻAoʻao',
-'nstab-user' => 'Inoa mea ho‘ohana',
-'nstab-media' => 'Pāpaho',
-'nstab-special' => 'Papa nui',
-'nstab-project' => 'Papahana',
+'nstab-user' => 'ʻAoʻao mea ho‘ohana',
+'nstab-media' => 'ʻAoʻao Pāpaho',
+'nstab-special' => 'ʻAoʻao kūikawā',
+'nstab-project' => 'ʻAoʻao papahana',
 'nstab-image' => 'Waihona',
-'nstab-mediawiki' => 'Memo',
+'nstab-mediawiki' => 'Pūlono',
 'nstab-template' => 'Anakuhi',
 'nstab-help' => 'Kōkua',
 'nstab-category' => 'Mahele',
 
+# Main script and global functions
+'nosuchaction' => 'ʻAʻohe hana',
+'nosuchspecialpage' => 'ʻAʻohe ʻaoʻao kūikawā',
+
 # General errors
 'error' => 'Hewa',
+'databaseerror' => 'Hewa hōkeo ʻikepili',
+'databaseerror-query' => 'Nīnau: $1',
+'databaseerror-function' => 'Hana: $1',
+'databaseerror-error' => 'Hewa: $1',
+'laggedslavemode' => '<strong>E akahele:</strong> ʻAʻole loaʻa paha i ka ʻaoʻao na hoʻouka hou hou.',
 'readonly' => 'Laka ‘ia ka hōkeo ‘ikepili',
-'missingarticle-diff' => '(Loli hope: $1, $2)',
-'filedeleteerror' => '‘A‘ole hiki ke kāpae i ka waihona "$1".',
-'filenotfound' => '‘A‘ole hiki ke loa‘a waihona "$1".',
-'badtitle' => 'Inoa ‘ino',
-'viewsource' => 'E nānā i ka molekumu',
+'missing-article' => 'Loaʻa ʻole i ka hōkeo ʻikepili ke kikokikona o ka ʻaoʻao i pono e loaʻa ʻia i kapa ʻia ʻo "$1" $2.
+
+Hana ʻia kēia pilikia e ka hāhai ʻana o kekahi ʻokoʻa kahiko aiʻole i kekahi loulou mōʻaukala i kekahi ʻaoʻao i holoi ʻia.
+
+Inā ʻaʻole ka hana, ua loaʻa paha iā ʻoe i kekahi mū i loko o ka lako pōlamu.
+E ʻoluʻolu, e lono  kēia pilikia i kekahi [[Special:ListUsers/sysop|kahu]], mai poina i ka URL.',
+'missingarticle-rev' => '(kāmua#: $1)',
+'missingarticle-diff' => '(ʻOkoʻa: $1, $2)',
+'internalerror' => 'Hewa koloko',
+'internalerror_info' => 'Hewa koloko:$1',
+'fileappenderrorread' => 'ʻAʻole hiki ke heluhelu iā "$1" ma loko o ka pākuʻi ʻana.',
+'fileappenderror' => 'ʻAʻole hiki ke pākuʻi "$1" iā "$2".',
+'filecopyerror' => 'ʻAʻole hiki ke kope ka waihona "$1" iā "$2".',
+'filerenameerror' => 'ʻAʻole hiki ke hōʻinoa hou ka waihona "$1" iā "$2".',
+'filedeleteerror' => '‘A‘ole hiki ke holoi i ka waihona "$1".',
+'directorycreateerror' => 'ʻAʻole hiki ke haku ka papakuhi waihona "$1"',
+'filenotfound' => '‘A‘ole hiki ke loa‘a ka waihona "$1".',
+'fileexistserror' => 'ʻAʻole hiki ke kākau i ka waihona "$1": Aia no ia.',
+'badtitle' => 'Inoa ʻohe',
+'badtitletext' => 'ʻAʻohe paha, hakahaka paha aiʻole loulou hewa paha ka poʻoinoa ʻaoʻao.
+Loaʻa paha nā hua kikokikona e hiki ʻole ke hana i nā poʻoinoa.',
+'viewsource' => 'Nānā i ke kumu',
+'viewsource-title' => 'Nānā i ke kumu no $1',
 'cascadeprotected' => 'Ho‘omalu ‘ia kēia ‘ao‘ao mai e ho‘opololei ana, no ka mea, hoʻokomo pū ‘ia ‘oia ma aia {{PLURAL:$1|‘ao‘ao|nā ‘ao‘ao}} i lalo, ho‘omalu ‘ia me ka "e wailele ana" koho:
 $2',
-'ns-specialprotected' => '‘A‘ole hiki ke ho‘opololei i nā ‘ao‘ao kūikawā',
+'ns-specialprotected' => '‘A‘ole hiki ke ho‘ololi i nā ‘ao‘ao kūikawā',
+'exception-nologin' => 'ʻE‘e ʻole',
 
 # Login and logout pages
-'yourname' => "Inoa mea ho'ohana",
+'welcomeuser' => 'Welina mai e $1!',
+'yourname' => "Inoa mea ho'ohana:",
+'userlogin-yourname' => 'Inoa mea hoʻohana',
+'userlogin-yourname-ph' => 'E kikokiko i kāu inoa mea hoʻohana',
+'createacct-another-username-ph' => 'E kikokiko i ka inoa mea hoʻohana',
 'yourpassword' => 'ʻŌlelo hūnā:',
-'yourpasswordagain' => "Hua'ōlelo huna hou",
+'userlogin-yourpassword' => 'ʻŌlelo hūnā',
+'userlogin-yourpassword-ph' => 'Kikokiko i kāu ʻōlelo hūnā',
+'createacct-yourpassword-ph' => 'Kikokiko i kekahi ʻōlelo hūnā',
+'yourpasswordagain' => 'E kikokiko hou i ka ʻōlelo hūnā:',
+'createacct-yourpasswordagain' => 'E hōʻoia i ka ʻōlelo hūnā',
+'createacct-yourpasswordagain-ph' => 'E kikokiko hou i ka ʻōlelo hūnā',
 'remembermypassword' => 'Hoʻomanaʻo iaʻu ma kēia lolo uila (no ka palena nui o $1 {{PLURAL:$1|lā|mau lā}})',
+'userlogin-remembermypassword' => 'Hoʻomanaʻo iaʻu',
 'login' => 'ʻEʻe',
-'nav-login-createaccount' => 'ʻEʻe / E kāinoa',
-'loginprompt' => 'Pono ʻoe e hoʻā i nā makana (cookies) no ka ʻeʻe ʻana i {{SITENAME}}.',
-'userlogin' => 'ʻEʻe / E kāinoa',
+'nav-login-createaccount' => 'ʻEʻe / Kāinoa',
+'loginprompt' => 'Pono ʻoe e hoʻā i nā makana no ka ʻeʻe ʻana iā {{SITENAME}}.',
+'userlogin' => 'ʻEʻe / Kāinoa',
 'userloginnocreate' => 'ʻEʻe',
-'logout' => 'E haʻalele',
-'userlogout' => 'E haʻalele',
-'notloggedin' => 'Mai ‘e‘e',
+'logout' => 'Haʻalele',
+'userlogout' => 'Haʻalele',
+'notloggedin' => 'ʻE‘e ʻole',
+'userlogin-noaccount' => 'ʻAʻohe āu moʻokāki?',
+'userlogin-joinproject' => 'E komo mai iā {{SITENAME}}',
 'nologin' => "ʻAʻohe āu moʻokāki? '''$1'''.",
-'nologinlink' => 'E kāinoa',
-'createaccount' => 'E hana',
+'nologinlink' => 'E Kāinoa',
+'createaccount' => 'E Kāinoa',
 'gotaccount' => "He moʻokāki kāu? '''$1'''.",
 'gotaccountlink' => 'ʻEʻe',
-'createaccountmail' => 'no ka leka uila',
+'userlogin-resetlink' => 'Ua poina i kāu ʻike ʻeʻe?',
+'userlogin-resetpassword-link' => 'Ua poina i kāu ʻōlelo hūnā?',
+'userlogin-createanother' => 'E kāinoa i kekahi moʻokāki ʻē aʻe',
+'createacct-join' => 'E kikokiko i kāu ʻike i lalo.',
+'createacct-another-join' => 'E kikokiko i ka ʻike o ka moʻokāki hou i lalo.',
+'createacct-emailrequired' => 'Wahinoho lekauila',
+'createacct-emailoptional' => 'Wahinoho lekauila (kāpae)',
+'createacct-email-ph' => 'E kikokiko i kāu wahinoho lekauila',
+'createacct-another-email-ph' => 'E kikokiko i ka wahinoho lekauila',
+'createaccountmail' => 'Hana i kekahi ʻōlelo hūnā ponokoho kūikawā a hoʻouna ia i ka wahinoho lekauila i kikokiko ʻia',
+'createacct-realname' => 'Inoa ʻoiaʻiʻo (kāpae)',
 'createaccountreason' => 'Kumu:',
+'createacct-reason' => 'Kumu',
+'createacct-reason-ph' => 'No ke aha mai ke kāinoa nei i kekahi moʻokāki ʻē aʻe',
+'createacct-imgcaptcha-ph' => 'E kikokiko i ke kikokikona  i luna',
+'createacct-submit' => 'Kāinoa',
+'createacct-another-submit' => 'Kāinoa hou',
 'badretype' => 'ʻAʻole like nā ʻōlelo hūnā āu i hoʻokomo ai',
-'userexists' => 'Lilo ka inoa mea ho‘ohana.
-E koho i kekahi inoa, ke ‘olu‘olu.',
+'userexists' => 'Ua kāinoa ʻia ka inoa mea ho‘ohana.
+E koho i kekahi inoa ʻē aʻe, ke ‘olu‘olu.',
 'loginerror' => 'Hewa ʻeʻe',
+'createacct-error' => 'Hewa kāinoa',
+'createaccounterror' => 'ʻAʻole hiki ke kāinoa: $1',
 'loginsuccesstitle' => 'ʻEʻe kūleʻa',
-'loginsuccess' => "'''ʻEʻe ʻia ʻoe, ʻo \"\$1\", iā {{SITENAME}}.'''",
-'nouserspecified' => 'Pono ʻoe e kāhuakomo i ka ʻōlelo ʻeʻe.',
+'loginsuccess' => '<strong>Ua ʻeʻe ʻo "$1" iā {{SITENAME}}.</strong>',
+'nouserspecified' => 'Pono ʻoe e kāhuakomo i ka inoa mea hoʻohana.',
 'wrongpassword' => 'Hewa ka ʻōlelo hūnā.
-E ʻoluʻolu, e kūlia hou.',
+E ʻoluʻolu, e hana hou.',
 'wrongpasswordempty' => 'Hakahaka ka ʻōlelo hūnā.
-E ʻoluʻolu, e kūlia hou.',
-'mailmypassword' => 'Leka uila i ka huaʻōlelo hūnā hou',
+E ʻoluʻolu, e hana hou.',
+'mailmypassword' => 'Kāinoa hou i ka ʻōlelo hūnā',
 'passwordremindertitle' => "He 'ōlelo hūnā kūikawā no {{SITENAME}}",
-'emailauthenticated' => 'Ua hō‘oia ‘ia kāu leka uila ma ka lā $2 i ka hola $3.',
-'emailconfirmlink' => 'E hō‘oia i kāu leka uila',
-'accountcreated' => 'Ua lilo ‘ia ka mea ho‘ohana',
-'accountcreatedtext' => 'Ua lilo ‘ia ka mea ho‘ohana no $1.',
-'loginlanguagelabel' => "Kou 'ōlelo: $1",
+'emailauthenticated' => 'Ua hō‘oia ‘ia kāu wahinoho lekauila ma ka lā $2 i ka hola $3.',
+'emailnotauthenticated' => 'ʻAʻole hōʻoia ʻia kāu wahinoho lekauila.
+Hoʻouna ʻole i kekahi lekauila no kēia mau helena.',
+'emailconfirmlink' => 'E hō‘oia i kāu wahinoho lekauila',
+'accountcreated' => 'Ua kāinoa',
+'accountcreatedtext' => 'Ua kāinoa ka moʻokāki no [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|walaʻau]])',
+'createaccount-title' => 'Kāinoa moʻokāki no {{SITENAME}}',
+'loginlanguagelabel' => 'ʻŌlelo: $1',
+'pt-login' => 'ʻEʻe',
+'pt-createaccount' => 'Kāinoa',
+'pt-userlogout' => 'Haʻalele',
 
 # Change password dialog
-'changepassword' => 'E loli i ka palapala hua‘ōlelo',
+'changepassword' => 'E hoʻololi i ka ʻōlelo hūnā',
+'oldpassword' => 'ʻŌlelo hūnā kahiko:',
 'newpassword' => 'ʻŌlelo hūnā hou:',
-'changepassword-success' => 'Ua loli ‘ia kāu hua‘ōlelo huna! E ‘e‘e iā‘oe...',
+'retypenew' => 'E kikokiko hou i ka ʻōlelo hūnā hou:',
+'resetpass_submit' => 'Kau i ka ʻōlelo hūnā a ʻeʻe',
+'changepassword-success' => 'Ua hoʻololi ‘ia kāu hua‘ōlelo huna!',
+'resetpass-submit-cancel' => 'Hoʻōki',
+'resetpass-temp-password' => 'ʻŌlelo hūnā kūikawā:',
+
+# Special:PasswordReset
+'passwordreset' => 'Kāinoa hou i ka ʻōlelo hūnā',
+'passwordreset-legend' => 'Kāinoa hou i ka ʻōlelo hūnā',
+'passwordreset-username' => "Inoa mea ho'ohana:",
+'passwordreset-email' => 'Wahinoho lekauila:',
+
+# Special:ChangeEmail
+'changeemail-oldemail' => 'Wahinoho lekauila hananei:',
+'changeemail-newemail' => 'Wahinoho lekauila hou:',
+'changeemail-none' => '(ʻaʻohe)',
+'changeemail-password' => 'Kāu ʻōlelo hūnā {{SITENAME}}:',
+'changeemail-cancel' => 'Hoʻōki',
 
 # Edit page toolbar
 'bold_sample' => 'Ho‘okā‘ele',
@@ -368,102 +517,184 @@ E ʻoluʻolu, e kūlia hou.',
 'italic_sample' => 'Ho‘ohiō',
 'italic_tip' => 'Ho‘ohiō',
 'link_sample' => 'Inoa loulou',
-'link_tip' => 'Loulou loko wahi',
+'link_tip' => 'Loulou kūloko',
+'extlink_sample' => 'http://www.example.com inoa loulou',
 'extlink_tip' => 'Loulou kūwaho (e ho‘omana‘o i ka poʻo pāʻālua http://)',
 'headline_sample' => 'Po‘o‘ōlelo',
+'headline_tip' => 'Poʻomanaʻo kau 2',
+'nowiki_sample' => 'Hoʻokomo i nā kikokikona huluʻole ma ʻaneʻi',
+'nowiki_tip' => 'Nānaʻole i ka hulu wiki',
+'image_tip' => 'Waihona kauloko',
 'media_tip' => 'Loulou waihona',
-'sig_tip' => 'Kou kākau inoa a me ka manawa',
-'hr_tip' => 'Laina ‘ilikai (e ho‘ohana pākiko)',
+'sig_tip' => 'Kau pūlima me ka manawa',
+'hr_tip' => 'Laina ‘ilikai (e hana pākiko)',
 
 # Edit pages
 'summary' => 'Hōʻuluʻulu manaʻo:',
 'subject' => 'Kumumanaʻo/poʻo laina:',
-'minoredit' => "He mea i ho'opololei iki 'ia",
-'watchthis' => 'E nānā pono i kēia mea',
-'savearticle' => 'E mālama i ka mea',
+'minoredit' => 'He hoʻololi iki kēia',
+'watchthis' => 'E kiaʻi i kēia ʻaoʻao',
+'savearticle' => 'E mālama i ka ʻaoʻao',
 'preview' => 'Nāmua',
 'showpreview' => "E hō'ike i ka nāmua",
-'showdiff' => "E hō'ike hou",
-'anoneditwarning' => "'''Ke aʻo ʻana:''' ʻAʻole ʻoe ʻeʻe.
-E hoʻopaʻa ʻia ana kou IP ma ko kēia ʻaoʻao mōʻaukala.",
-'blockedtitle' => 'Ua ke‘a ‘ia ka mea ho‘ohana',
+'showlivepreview' => 'Nāmua ʻānō',
+'showdiff' => "E hō'ike i nā loli",
+'anoneditwarning' => '<strong>E akahele:</strong> ʻAʻole ʻoe ʻeʻe nei.
+E hoʻopaʻa ʻia ana kāu IP ma ko kēia ʻaoʻao mōʻaukala hoʻololi.',
+'blockedtitle' => 'Ua pale ‘ia ka mea ho‘ohana',
 'blockednoreason' => '‘a‘ohe kumu',
 'loginreqlink' => 'ʻeʻe',
-'accmailtitle' => 'Ua ho‘ouna ‘ia ka hua‘ōlelo huna',
+'accmailtitle' => 'Ua ho‘ouna ‘ia ka ‘ōlelo hūnā',
 'newarticle' => '(Hou)',
-'anontalkpagetext' => "----''‘O kēia ka ʻaoʻao kūkākūkā no kekahi mea ho‘ohana me ka moʻokāki ʻole. No laila, pono mākou e ho‘ohana i ka wahi noho IP no ka hōʻoia ʻana iā ia.
-Hiki i kekahi mau mea hoʻohana ke hoʻokaʻana i kēia wahi noho IP.
-Inā he mea ho‘ohana ʻoe a ua haʻi ʻia kekahi manaʻo iā ʻoe, [[Special:UserLogin/signup|e hoʻokumu ʻia kekahi moʻokāki]] a i ʻole [[Special:UserLogin|e ʻeʻe]].''",
+'newarticletext' => 'Ua hāhai ʻoe i kekahi loulou i kekahi ʻaoʻao e haku ʻole.
+No ka haku ʻana i ka ʻaoʻao, kikokiko i loko o ka pahu i lalo (ʻike i ka [[{{MediaWiki:Helppage}}|ʻaoʻao kōkua]] no nā ʻike ʻē aʻe).
+Inā hewa kou hele ʻana, kāomi i ka pihi <strong>hoʻi</strong>.',
+'anontalkpagetext' => "----
+<em>ʻO kēia ka ʻaoʻao kūkākūkā no kekahi mea ho‘ohana me ka inoa ʻole.</em>
+No laila, pono mākou e ho‘ohana i ka IP no ka hōʻoia ʻana iā ia a hiki i kekahi mau mea hoʻohana ke hoʻokaʻana i kēia  IP.
+Inā he mea ho‘ohana inoa ʻole ʻoe a loaʻa kekahi mau manaʻo nāuʻole, e ʻoluʻolu [[Special:UserLogin/signup|e kāinoa]] a i ʻole [[Special:UserLogin|e ʻeʻe]].''",
 'noarticletext' => 'ʻAʻohe kikokikona a kēia ʻaoʻao.
 Hiki iā ʻoe ke [[Special:Search/{{PAGENAME}}|huli no kēia inoa ʻaoʻao]] i nā ʻaoʻao ʻē aʻe, <span class="plainlinks">[{{fullurl:SpecialLog|page={{FULLPAGENAMEE}}}} huli i nā moʻolelo pili], a i ʻole [{{fullurl:{{FULLPAGENAME}}|action=edit}} hoʻololi i kēia ʻaoʻao]</span>.',
-'previewnote' => "'''‘O keia ka nāmua;
-‘a‘ole i mālama ‘ia ka ho‘ololi!'''",
+'noarticletext-nopermission' => 'ʻAʻohe kikokikona a kēia ʻaoʻao.
+Hiki iā ʻoe ke [[Special:Search/{{PAGENAME}}|huli no kēia inoa ʻaoʻao]] i nā ʻaoʻao ʻē aʻe aiʻole <span class="plainlinks">[{{fullurl:SpecialLog|page={{FULLPAGENAMEE}}}} huli i nā moʻolelo pili]</span>, akā hiki ʻole iā ʻoe ke hoʻololi i kēia ʻaoʻao.',
+'previewnote' => '<strong>ʻO kēia ka nāmua wale nō.</strong>
+‘A‘ole mālama ‘ia nā ho‘ololi!',
+'continue-editing' => 'Kele i kahi hoʻololi',
 'editing' => 'Ke ho‘ololi nei iā $1',
-'editingsection' => 'Ke ho‘opololei nei iā $1 (mahele)',
+'creating' => 'Ke haku nei iā $1',
+'editingsection' => 'Hoʻololi nei iā $1 (mahele)',
 'editingcomment' => 'Ke ho‘ololi nei iā $1 (paukū hou)',
-'yourtext' => 'Ko‘u ‘ōlelo',
+'editconflict' => 'He pilikia hoʻololi: $1',
+'yourtext' => 'Kāu kikokikona',
+'storedversion' => 'Loihape waiho ʻia',
 'yourdiff' => 'Nā mea ‘oko‘a',
-'copyrightwarning' => "Hoʻokuʻu ʻia nā mea lūlū iā {{SITENAME}} ma lalo o ka $2 (no nā mea kikoʻī, kele iā $1).
-Inā ʻaʻole ʻoe makemake i ka hoʻololi ʻana kūnoa i kou kākau ʻana a ʻaʻole ʻoe makemake i ka hoʻomalele ʻana i kāu mau loli, inā mai kākau ma ʻaneʻi.<br />
-Ke hoʻohiki nei ʻoe iā kākou: nou i kākau i kēia kikokikona a i ʻole nou i kope i kēia kikokikona mai ke kūmole kūʻokoʻa.
-'''MAI KĀKAU I NĀ KIKOKIKONA PONOKOPE E NELE AI KA ʻAE!'''",
-'protectedpagewarning' => "'''A‘o ‘ana:  Ua laka ‘ia kēia ‘ao‘ao, pēlā, hiki i nā \"kahu\" ke ho‘opololei wale nō.'''",
+'copyrightwarning' => 'E ʻoluʻolu, hoʻokuʻu ʻia nā mea lūlū iā {{SITENAME}} ma lalo o ka laikini $2 (no nā mea kikoʻī, kele iā $1).
+Inā ʻaʻole ʻoe makemake i ka hoʻololi ʻana kūnoa o kou kākau ʻana a ʻaʻole ʻoe makemake i ka hoʻomalele ʻana i kāu mau loli, a laila mai kākau ma ʻaneʻi.<br />
+Ke hoʻohiki nei ʻoe iā kākou: nāu i kākau i kēia kikokikona aiʻole nau i kope i kēia kikokikona mai ke kūmole kūʻokoʻa.
+<strong>Mai waiho i nā kikokikona ponokope me ka ʻae ʻole!</strong>',
+'protectedpagewarning' => '<strong>E akahele:  Ua hoʻomalu ‘ia kēia ‘ao‘ao, pēlā, hiki i nā "kahu" ke ho‘ololi wale nō.</strong>
+Aia nā loli hanalohi i lalo no ka ʻikena:',
+'templatesused' => '{{PLURAL:$1|anakuhi|mau anakuhi}} e hana ʻia ma kēia ʻaoʻao:',
 'templatesusedpreview' => 'Hoʻohana ʻia kēia {{PLURAL:$1|anakuhi|mau anakuhi}} i kēia nāmua:',
 'template-protected' => '(ho‘omalu ‘ia)',
 'template-semiprotected' => '(hapa-ho‘omalu ‘ia)',
+'hiddencategories' => 'ʻO kēia ʻaoʻao he lālā o {{PLURAL:$1|1 mahele hūnā|$1 mau māhele hūnā}}:',
 'edittools' => '<!-- Eia ka ‘ōlelo e hō‘ike ‘ia malalo o nā palapala ho‘ololi ame nā palapala ho‘ohui. -->',
-'permissionserrorstext-withaction' => 'ʻAʻohe ou ʻae no $2, no {{PLURAL:$1|ia mea|no ia mau mea}}:',
+'permissionserrorstext-withaction' => 'ʻAʻohe āu ʻae no $2, no {{PLURAL:$1|kumu| mau kumu}}:',
+'recreate-moveddeleted-warn' => '<strong>E akahele: Ke haku nei ʻoe i kekahi ʻaoʻao i holoi ʻia.</strong>
+
+Pono ʻoe e noʻonoʻo e pili ana ka pono o ka hoʻomau ʻana o ka hoʻololi ʻana o kēia ʻaoʻao.
+Aia ka moʻolelo holoi a hoʻoneʻe no kēia ʻaoʻao ma ʻaneʻi:',
+'moveddeleted-notice' => 'Ua holoi ʻia kēia ʻaoʻao.
+Hoʻolako ʻia ka moʻolelo holoi a hoʻoneʻe no kēia ʻaoʻao i lalo no ke kūmole.',
+
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => '<strong>E akahele:</strong> Hoʻokela ʻia ka palena nui o ke anakuhi.
+Hoʻohui ʻole i kekahi mau anakuhi.',
+'post-expand-template-inclusion-category' => 'Nā ʻaoʻao me nā anakuhi e hoʻokela i ka palenanui',
+'post-expand-template-argument-warning' => '<strong>E akahele:</strong> Aia ma kēia ʻaoʻao i kekahi a ʻoi pilikia anakuhi e loaʻa i kekahi nui hoʻonui nunui loa.
+Ua waiho ʻia kēia mau pilikia.',
+'post-expand-template-argument-category' => 'Nā ʻAoʻao e loaʻa nā pilikia anakuhi i waiho ʻia',
 
 # "Undo" feature
-'undo-success' => 'Hiki iā ʻoe ke hoʻihoʻi mai i kēia loli ʻana.
-E ʻoluʻolu, e hōʻoia i ka hoʻokūkū ʻana i lalo, a laila, e mālama i nā loli i lalo no ka hoʻopau ʻana i ka hoʻihoʻi mai ʻana i ka loli.',
-'undo-summary' => 'Hoʻihoʻi mai i ke kāmua $1 na [[Special:Contributions/$2|$2]] ([[User talk:$2|kūkākūkā]])',
+'undo-success' => 'Hiki iā ʻoe ke hoʻihoʻi i kēia loli.
+E ʻoluʻolu, e hōʻoia i ka hoʻokūkū ʻana i lalo, a laila, e mālama i nā loli i lalo no ka hoʻopau ʻana o ka hoʻihoʻi o ka loli.',
+'undo-summary' => 'Hoʻihoʻi mai i ke kāmua $1 na [[Special:Contributions/$2|$2]] ([[User talk:$2|walaʻau]])',
 
 # History pages
+'viewpagelogs' => 'Nānā i nā moʻolelo no kēia ʻaoʻao',
 'currentrev' => 'Kāmua hou',
-'revisionasof' => 'Ka loli ʻana ma $1',
-'previousrevision' => '← Kāmua mua',
+'currentrev-asof' => 'Ke Kāmua houloa ma $1',
+'revisionasof' => 'Kāmua ʻia ma $1',
+'revision-info' => 'Kāmua ma $1 na $2',
+'previousrevision' => '← Kāmua kahiko',
 'nextrevision' => 'Kāmua hou →',
-'currentrevisionlink' => 'Kāmua hou',
-'cur' => 'hou',
-'last' => 'hope',
-'page_first' => 'mua',
-'page_last' => 'hope',
-'histfirst' => 'Kahiko loa',
-'histlast' => 'Hou loa',
-'historysize' => '({{PLURAL:$1|1 ‘ai|$1 ‘ai}})',
-'historyempty' => '(‘ole)',
+'currentrevisionlink' => 'Kāmua houloa',
+'cur' => 'okawā',
+'next' => 'hou aʻe',
+'last' => 'aku nei',
+'page_first' => 'mua loa',
+'page_last' => 'hope loa',
+'histlegend' => 'Koho ʻokoʻa: Kaha i nā pahu lekiō o nā kāmua no ka hoʻokūkū ʻana a kāomi ke kāhoʻi aiʻole ka pihi ma ka lalo.<br />
+Pahu hōʻailona: <strong>({{int:cur}})</strong> = ka ʻokoʻa me ke kāmua houloa, <strong>({{int:last}})</strong> = ka ʻokoʻa me ke kāmua i hana mua, <strong>{{int:minoreditletter}}</strong> = he hoʻololi iki ia.',
+'history-fieldset-title' => 'Mōʻaukaki Pūnaewele',
+'history-show-deleted' => 'Holoi wale nō',
+'histfirst' => 'kahiko loa',
+'histlast' => 'hou loa',
+'historysize' => '({{PLURAL:$1|1 ‘ai|$1 mau ‘ai}})',
+'historyempty' => '(ʻaʻohe)',
 
 # Revision feed
-'history-feed-item-nocomment' => '$1 ma $2',
+'history-feed-title' => 'Mōʻaukala kāmua',
+'history-feed-description' => 'Mōʻaukala kāmua no kēia ʻaoʻao ma ka wiki',
+'history-feed-item-nocomment' => '$1 ma $3 ma ka hola $4',
 
 # Revision deletion
-'rev-delundel' => 'hō‘ike/hūnā',
+'rev-delundel' => 'hoʻololi ka nānā ʻana',
+'revdelete-show-file-submit' => 'ʻAe',
 'revdelete-radio-same' => '(mai hoʻololi)',
 'revdelete-radio-set' => 'ʻAe',
 'revdelete-radio-unset' => 'ʻAʻole',
-'revdel-restore' => 'hoʻololi ka nānā ʻana',
+'revdelete-log' => 'Kumu:',
+'revdel-restore' => 'hoʻololi i ka nānā ʻana',
+'pagehist' => 'Mōʻaukala ʻaoʻao',
+'deletedhist' => 'Mōʻaukala holoi',
+'revdelete-otherreason' => 'Nā kumu ʻē aʻe',
+'revdelete-reasonotherlist' => 'Nā kumu ʻē aʻe',
+'revdelete-offender' => 'Mea kākau kāmua:',
+
+# History merging
+'mergehistory-from' => 'ʻAoʻao kūmole:',
+'mergehistory-into' => 'ʻAoʻao helewahi:',
+'mergehistory-reason' => 'Kumu:',
 
 # Merge log
-'revertmerge' => 'Mai hoʻokuʻi pū',
+'revertmerge' => 'Hoʻokuʻipū ʻole',
 
 # Diffs
+'history-title' => 'Mōʻaukala kāmua o "$1"',
 'lineno' => 'Laina $1:',
-'editundo' => 'hoʻihoʻi mai',
+'compareselectedversions' => 'Hoʻohālikelike i nā kāmua i koho ʻia',
+'editundo' => 'hoʻihoʻi',
+'diff-empty' => '(ʻaʻohe like ʻole)',
 
 # Search results
-'searchresults' => 'Nā hualoaʻa',
+'searchresults' => 'Nā Hualoaʻa',
 'searchresults-title' => 'Nā hualoaʻa no "$1"',
-'prevn' => '{{PLURAL:$1|$1}} ma mua',
-'nextn' => '{{PLURAL:$1|$1}} ma hope',
-'viewprevnext' => 'Nānā i nā ($1 {{int:pipe-separator}} $2) ($3)',
-'search-result-size' => '$1 ({{PLURAL:$2|1 huaʻōlelo|$2 huaʻōlelo}})',
-'search-section' => '(māhele $1)',
+'prevn' => '{{PLURAL:$1|$1}} mamua',
+'nextn' => '{{PLURAL:$1|$1}} hou aʻe',
+'prevn-title' => '$1 {{PLURAL:$1|hualoaʻa|mau hualoaʻa}} aku nei',
+'nextn-title' => '$1 {{PLURAL:$1|hualoaʻa|mau hualoaʻa}} hou aʻe',
+'shown-title' => 'Hōʻike $1 {{PLURAL:$1|hualoaʻa|mau hualoaʻa}} i kekahi ʻaoʻao',
+'viewprevnext' => 'Nānā i ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-exists' => '<strong>Aia kekahi ʻaoʻao i kapa ʻia o "[[:$1]]" ma kēia wiki.</strong> {{PLURAL:$2|0=|ʻIke hoʻi i na hualoaʻa huli ʻē aʻe i loaʻa ʻia.}}',
+'searchmenu-new' => '<strong>Haku i ka ʻaoʻao "[[:$1]]" ma kēia wiki!</strong> {{PLURAL:$2|0=|"ʻIke hoʻi i ka ʻaoʻao i loaʻa ʻia ma kou huli ʻana.|ʻIke hoʻi nā hualoaʻa huli i loaʻa ʻia.}}',
+'searchprofile-articles' => 'Nā ʻAoʻao mealoko',
+'searchprofile-project' => 'Nā ʻaoʻao Kōkua a me Papahana',
+'searchprofile-images' => 'Laupāpaho',
+'searchprofile-everything' => 'Nā mea apau',
+'searchprofile-advanced' => 'Kiʻelē',
+'searchprofile-articles-tooltip' => 'Huli i loko o $1',
+'searchprofile-project-tooltip' => 'Huli i loko o $1',
+'searchprofile-images-tooltip' => 'Huli no nā waihona',
+'searchprofile-everything-tooltip' => 'Huli i nā mea apau (nā walaʻau nō hoʻi)',
+'searchprofile-advanced-tooltip' => 'Huli iā lewainoa pilikino',
+'search-result-size' => '$1 ({{PLURAL:$2|1 huaʻōlelo|$2 mau huaʻōlelo}})',
+'search-result-category-size' => '{{PLURAL:$1|1 mea hoʻohana|$1 mau mea hoʻohana}} ({{PLURAL:$2|1 mahele kūloko|$2 mau māhele kūloko}}, {{PLURAL:$3|1 wahihona|$3 mau waihona}})',
+'search-redirect' => '(kia hou $1)',
+'search-section' => '(pauku $1)',
 'search-suggest' => 'ʻO kēia paha kou manaʻo: $1',
 'search-interwiki-caption' => 'Nā pāhana ʻē aʻe',
-'searchall' => 'apau',
+'search-interwiki-more' => '(hou aʻe)',
+'searchrelated' => 'na mea ʻālike',
+'searchall' => 'nā mea apau',
+'showingresultsheader' => '{{PLURAL:$5|<strong>$1</strong> hualoaʻa o <strong>$3</strong> mau hualoaʻa|<strong$1-$2</strong> mau hualoaʻa o <strong>$3</strong> mau hualoaʻa}} no <strong>$4</strong>',
+'search-nonefound' => 'ʻAʻohe hualoaʻa no kēia huli.',
 'powersearch-legend' => 'Hulina kūlana kiʻekiʻe',
 'powersearch-ns' => 'Huli i loko o nā wahi inoa:',
+'powersearch-toggleall' => 'Nā mea apau',
+'powersearch-togglenone' => 'ʻAʻohe',
+'search-external' => 'Huli kūwaho',
 
 # Preferences page
 'preferences' => 'Kaʻu makemake',
@@ -471,17 +702,28 @@ E ʻoluʻolu, e hōʻoia i ka hoʻokūkū ʻana i lalo, a laila, e mālama i nā
 'prefs-skin' => 'ʻIli',
 'skin-preview' => 'Nāmua',
 'datedefault' => 'ʻAʻohe makemake',
+'prefs-beta' => 'Helena Beta',
 'prefs-datetime' => 'Ka lā a me ka hola',
-'prefs-personal' => 'ʻAoʻao ʻike mea hoʻohana',
+'prefs-personal' => 'ʻAoʻao mea hoʻohana',
 'prefs-rc' => 'Nā loli hou',
-'prefs-watchlist' => 'Helu nānā',
-'prefs-watchlist-days' => 'Nā lā e hōʻike ana i ka helu nānā:',
-'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist' => 'Papakiaʻi',
+'prefs-watchlist-days' => 'Nā lā e hōʻike i ka papakiaʻi:',
+'prefs-watchlist-days-max' => 'He palenanui o $1 {{PLURAL:$1|lā|mau lā}}',
+'prefs-email' => 'Koho lekauila',
+'prefs-rendering' => 'Helena',
 'saveprefs' => 'Mālama',
+'restoreprefs' => 'Hōʻala i nā makemake paʻamau (apau)',
+'prefs-editing' => 'Hoʻololi',
+'rows' => 'Lālani:',
+'columns' => 'Koloma:',
 'searchresultshead' => 'Huli',
 'savedprefs' => 'Ua mālama ‘ia kāu makemake',
+'timezonelegend' => 'Kāʻei hola:',
+'localtime' => 'Hola kamaʻāina:',
+'servertime' => 'Hola pūnaewele:',
+'guesstimezone' => 'Piha mai ka pōlamu pūnaewele',
 'timezoneregion-africa' => 'ʻApelika',
-'timezoneregion-america' => 'Amelika',
+'timezoneregion-america' => 'ʻAmelika',
 'timezoneregion-antarctica' => 'ʻAneʻālika',
 'timezoneregion-arctic' => 'ʻĀlika',
 'timezoneregion-asia' => 'ʻĀkia',
@@ -490,356 +732,548 @@ E ʻoluʻolu, e hōʻoia i ka hoʻokūkū ʻana i lalo, a laila, e mālama i nā
 'timezoneregion-europe' => 'ʻEulopa',
 'timezoneregion-indian' => 'Moana ʻIniana',
 'timezoneregion-pacific' => 'Moana Pakipika',
+'prefs-searchoptions' => 'Huli',
+'prefs-namespaces' => 'Lewainoa',
 'default' => 'paʻamau',
-'youremail' => 'Leka uila:',
-'username' => "Inoa mea ho'ohana:",
-'yourrealname' => 'Inoa maoli:',
-'yourlanguage' => 'Kou ʻōlelo:',
-'yournick' => 'Inoa kapakapa:',
+'prefs-files' => 'Waihona',
+'youremail' => 'Lekauila:',
+'username' => '{{GENDER:$1|Inoa mea hoʻohana}}:',
+'uid' => '{{GENDER:$1|Mea hoʻohana}} ID:',
+'prefs-memberingroups' => '{{GENDER:$2|He lālā}} o {{PLURAL:$1|hui|mau hui}}:',
+'prefs-registration' => 'Hola kāinoa:',
+'yourrealname' => 'Inoa ʻoiaʻiʻo:',
+'yourlanguage' => 'Kāu ʻōlelo:',
+'yournick' => 'Pūlima hou:',
 'yourgender' => 'Keka:',
+'gender-unknown' => 'Kāpae',
 'gender-male' => 'Kāne',
 'gender-female' => 'Wahine',
-'email' => 'Leka uila',
-'prefs-help-email-required' => 'Koina ka leka uila.',
+'email' => 'Lekauila',
+'prefs-help-email' => 'Koi ʻole i ka wahinoho lekauila, akā pono ia nō ke kāinoa ʻana o ka ʻōlelo hūnā inā poina ʻoe i kāu ʻōlelo hūnā.',
+'prefs-help-email-others' => 'Hiki iā ʻoe ke koho i ka ʻae ʻana i nā mea ʻē aʻe e hoʻokaʻaʻike iā ʻoe mao ka lekauila mao kekahi loulou ma kāu ʻaoʻao mea hoʻohana aiʻole kāu ʻaoʻao walaʻau.
+ʻAʻole hōʻike ʻia kāu wahinoho lekauila i nā mea ʻē aʻe e hoʻokaʻaʻike iā ʻoe.',
+'prefs-help-email-required' => 'Koi i ka lekauila.',
+'prefs-signature' => 'Pūlima',
+'prefs-advancedediting' => 'Koho paʻamau',
+'prefs-editor' => 'Luna Hoʻoponopono:',
+'prefs-preview' => 'Nāmua',
 
 # User rights
 'userrights' => 'Ho‘oponopono ‘ana o nā kuleana',
+'userrights-groupsmember' => 'He lālā o:',
+'userrights-reason' => 'Kumu:',
 
 # Groups
-'group-sysop' => 'Nā kahu',
-'group-bureaucrat' => 'Nā kuhina',
-'group-all' => '(āpau)',
-
-'group-sysop-member' => 'Kahu',
-'group-bureaucrat-member' => 'Kuhina',
-
-'grouppage-sysop' => '{{ns:project}}:Nā kahu',
+'group' => 'Hui:',
+'group-user' => 'Mea hoʻohana',
+'group-bot' => 'Lopako',
+'group-sysop' => 'Nā Kahu',
+'group-bureaucrat' => 'Nā Kuhina',
+'group-all' => '(Nā mea apau)',
+
+'group-user-member' => '{{GENDER:$1|ka mea hoʻohana}}',
+'group-bot-member' => '{{GENDER:$1|ka lopako}}',
+'group-sysop-member' => '{{GENDER:$1|ke kahu}}',
+'group-bureaucrat-member' => '{{GENDER:$1|ke kuhina}}',
+
+'grouppage-user' => '{{ns:project}}:Mea hoʻohana',
+'grouppage-bot' => '{{ns:project}}:Lopako',
+'grouppage-sysop' => '{{ns:project}}:Nā Kahu',
+'grouppage-bureaucrat' => '{{ns:project}}:Nā Kuhina',
+
+# Rights
+'right-read' => 'Heluhelu i nā ʻaoʻao',
+'right-edit' => 'Hoʻololi i nā ʻaoʻao',
+'right-createpage' => 'Haku i nā ʻaoʻao (he kūkākūkā ʻole)',
+'right-createtalk' => 'Haku i ka ʻaoʻao kūkākūkā',
+'right-createaccount' => 'Kāinoa i nā moʻokāki hou',
+'right-minoredit' => 'Kaha i nā loli me he hoʻololi iki',
+'right-move' => 'Hoʻoneʻe i nā ʻaoʻao',
+'right-move-subpages' => 'Hoʻoneʻe i nā ʻaoʻao me nā ʻaoʻao lokoiho',
+'right-movefile' => 'Hoʻoneʻe i nā waihona',
+'right-upload' => 'Hoʻouka i nā waihona',
+'right-upload_by_url' => 'Hoʻouka i nā waihona mai kekahi URL',
+'right-delete' => 'Holoi i nā ʻaoʻao',
+'right-bigdelete' => 'Holoi i nā ʻaoʻao me he mōʻaukala nui',
+'right-browsearchive' => 'Huli i nā ʻaoʻao holoi',
+'right-undelete' => 'Holoi ʻole i kekahi ʻaoʻao',
+'right-block' => 'Pale i nā mea hoʻohana ʻē aʻe mai ka hoʻololi ʻana',
+'right-blockemail' => 'Pale i nā mea hoʻohana ʻē aʻe mai ka lekauila ʻana',
+'right-hideuser' => 'Pale i ka inoa mea hoʻohana, no laila ʻaʻole hōʻike i ka lehulehu',
+'right-unblockself' => 'Paleʻole i kāuiho',
+
+# Special:Log/newusers
+'newuserlogpage' => 'Moʻolelo haku mea hoʻohana',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'ka hoʻololi ʻana i kēia ʻaoʻao',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|loli|mau loli}}',
-'recentchanges' => 'Nā loli hou',
-'rcshowhideminor' => '$1 i nā ho‘opololei iki',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|mai kāu kipana aku nei}}',
+'enhancedrc-history' => 'mōʻaukala',
+'recentchanges' => 'Loli Hou',
+'recentchanges-legend' => 'Nā Koho loli hou',
+'recentchanges-feed-description' => 'Hāhai i nā loli houloa i ka wiki ma kēia hānaīke.',
+'recentchanges-label-newpage' => 'Ua haku kēia hoʻololi i kēia ʻaoʻao hou',
+'recentchanges-label-minor' => 'He hoʻololi iki kēia',
+'recentchanges-label-bot' => 'Ua hana ʻia kēia hoʻololi e kekahi pako',
+'recentchanges-label-unpatrolled' => 'ʻAʻole kiaʻi kaʻa ʻia kēia hoʻololi',
+'rcnotefrom' => 'Aia i lalo nā loli mai <strong>$2</strong> (hōʻike a <strong>$1</strong>)',
+'rclistfrom' => 'Hōʻike i nā loli hou mai ka hola $2, $3',
+'rcshowhideminor' => '$1 i nā ho‘ololi iki',
+'rcshowhideminor-show' => 'Hōʻike',
+'rcshowhideminor-hide' => 'Hoʻohūnā',
 'rcshowhidebots' => '$1 i nā lopako',
-'rcshowhideliu' => '$1 i nā mea hoʻohana i ʻeʻe ai',
-'rcshowhideanons' => '$1 i nā mea hoʻohana i nele ai ka inoa',
+'rcshowhidebots-show' => 'Hōʻike',
+'rcshowhidebots-hide' => 'Hoʻohūnā',
+'rcshowhideliu' => '$1 i nā mea hoʻohana i kāinoa ʻia',
+'rcshowhideliu-show' => 'Hōʻike',
+'rcshowhideliu-hide' => 'Hoʻohūnā',
+'rcshowhideanons' => '$1 i nā mea hoʻohana inoa ʻole',
+'rcshowhideanons-show' => 'Hōʻike',
+'rcshowhideanons-hide' => 'Hoʻohūnā',
+'rcshowhidepatr' => '$1 i nā hoʻololi kiaʻi kaʻahele',
+'rcshowhidepatr-show' => 'Hōʻike',
+'rcshowhidepatr-hide' => 'Hoʻohūnā',
 'rcshowhidemine' => '$1 i ka‘u mau hoʻololi',
-'diff' => '‘oko‘a',
-'hist' => 'loli',
-'hide' => 'hūnā',
-'show' => 'hō‘ike',
+'rcshowhidemine-show' => 'Hōʻike',
+'rcshowhidemine-hide' => 'Hoʻohūnā',
+'rclinks' => 'E hōʻike i nā loli $1 hou, mai $2 (mau) lā aku nei<br />$3',
+'diff' => 'ʻokoʻa',
+'hist' => 'mōkala',
+'hide' => 'Hoʻohūnā',
+'show' => 'Hō‘ike',
 'minoreditletter' => 'iki',
-'newpageletter' => 'hou',
-'boteditletter' => 'lopako',
-'rc-enhanced-expand' => 'Hō‘ike i nā ‘ikepili (me JavaScript)',
-'rc-enhanced-hide' => 'Hūnā i nā ‘ikepili',
+'newpageletter' => 'ʻAHou',
+'boteditletter' => 'pako',
+'rc-enhanced-expand' => 'Hō‘ike i nā kikoʻī',
+'rc-enhanced-hide' => 'Hoʻohūnā i nā kikoʻī',
 
 # Recent changes linked
 'recentchangeslinked' => 'Nā loli hou ʻālike',
+'recentchangeslinked-feed' => 'Nā loli hou ʻālike',
+'recentchangeslinked-toolbox' => 'Nā loli hou ʻālike',
+'recentchangeslinked-title' => 'Nā loli e ʻālike me "$1"',
+'recentchangeslinked-summary' => 'He papahelu o nā loli i hana wale i nā ʻaoʻao loulou ʻia e kekahi ʻaoʻao kikoʻī (aiʻole i nā lālā o kekahi mahele kikoʻī) kēia.
+<strong>Hoʻokāʻele</strong> nā ʻaoʻao ma [[Special:Watchlist|kāu papakiaʻi]].',
 'recentchangeslinked-page' => 'Inoa ʻaoʻao:',
+'recentchangeslinked-to' => 'Hōʻike i nā loli i nā ʻaoʻao e loulou ʻia ma kahi o ka ʻaoʻao i hāʻawi ʻia',
 
 # Upload
-'upload' => 'Hoʻouka i ka waihona',
+'upload' => 'Hoʻouka waihona',
 'uploadbtn' => 'Hoʻouka i ka waihona',
+'uploadnologin' => 'ʻE‘e ʻole',
+'uploaderror' => 'Hewa hoʻouka',
+'uploadlogpage' => 'Moʻolelo hoʻouka',
+'filename' => 'Inoa waihona',
 'filedesc' => 'Hōʻuluʻulu manaʻo',
 'fileuploadsummary' => 'Hōʻuluʻulu manaʻo:',
-'uploadedimage' => 'hoʻouka ʻia iā "[[$1]]"',
+'filesource' => 'Kumu:',
+'uploadedfiles' => 'Waihona hoʻouka ʻia',
+'savefile' => 'Waihona mālama',
+'uploadedimage' => 'ua hoʻouka iā "[[$1]]"',
+'upload-source' => 'Waihona kūmole',
+'sourcefilename' => 'Inoa waihona kūmole:',
+'sourceurl' => 'URL kūmole:',
+
+'license' => 'Laikini:',
+'license-header' => 'Laikini',
 
 # Special:ListFiles
 'listfiles_name' => 'Inoa',
 
 # File description page
 'file-anchor-link' => 'Waihona',
-'filehist' => 'Mo‘olelo o ka waihona',
-'filehist-current' => 'o kēia manawa',
-'filehist-datetime' => 'Manawa',
-'filehist-thumb' => 'Kiʻiliʻiliʻi',
+'filehist' => 'Mōʻaukala waihona',
+'filehist-help' => 'Kāomi ma ka lā/hola no ka nānā ʻana i ka waihona ma kēlā manawa.',
+'filehist-revert' => 'hoʻihoʻi',
+'filehist-current' => 'okamanawa',
+'filehist-datetime' => 'Lā/Hola',
+'filehist-thumb' => 'Kiʻiliʻi',
+'filehist-thumbtext' => 'Ke kiʻiliʻi no ka mana ma $1',
 'filehist-user' => 'Mea ho‘ohana',
-'filehist-dimensions' => 'Nā nui',
+'filehist-dimensions' => 'Nā Nui',
 'filehist-filesize' => 'Nui o ka waihona',
-'filehist-comment' => 'Manaʻo',
-'imagelinks' => 'Nā loulou faila',
+'filehist-comment' => 'Kaumanaʻo',
+'imagelinks' => 'Nā Hana waihona',
 'linkstoimage' => 'Loulou {{PLURAL:$1|kekahi ‘ao‘ao|kēia mau ‘ao‘ao $1}} i kēia waihona:',
+'nolinkstoimage' => 'ʻAʻohe ʻaoʻao e loulou i kēia waihona.',
+'sharedupload-desc-here' => 'ʻO kēia waihona mai $1 a hiki paha ke hana ʻia mai nā papahana ʻē aʻe.
+Aia i lalo ka hōʻike ʻano [mai ka ʻaoʻao hōʻike ʻano waihona $2].',
 
 # File deletion
 'filedelete-comment' => 'Kumu:',
 
 # Random page
-'randompage' => 'He akikala kaulele',
+'randompage' => 'ʻAtikala Kaulele',
 
 # Statistics
-'statistics' => 'Papa helu',
+'statistics' => 'ʻIkepilihelu',
 
-'brokenredirects-edit' => 'ho‘ololi',
-'brokenredirects-delete' => 'e kāpae',
+'brokenredirects-edit' => 'ho‘ololi',
+'brokenredirects-delete' => 'holoi',
 
 'withoutinterwiki-submit' => 'Hō‘ike',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|‘ai|‘ai}}',
+'nbytes' => '$1 {{PLURAL:$1|‘ai|mau ‘ai}}',
 'nlinks' => '$1 {{PLURAL:$1|loulou|loulou}}',
-'nmembers' => '$1 {{PLURAL:$1|lālā|lālā}}',
+'nmembers' => '$1 {{PLURAL:$1|lālā|mau lālā}}',
 'wantedcategories' => 'Nā māhele makemake',
+'prefixindex' => 'Nā ʻAoʻao apau me ka pākuʻina kau mua',
 'shortpages' => 'Nā ʻaoʻao pōkole',
 'longpages' => 'Nā ʻaoʻao lōʻihi',
-'newpages' => 'Nā ‘ao‘ao hou',
+'usercreated' => '{{GENDER:$3|Haku ʻia}} i ka lā $1 ma ka hola $2',
+'newpages' => 'Nā ‘Ao‘ao hou',
 'newpages-username' => "Inoa mea ho'ohana:",
 'ancientpages' => 'Nā ‘ao‘ao kahiko loa',
-'move' => 'E ho‘ololi i ka inoa',
+'move' => 'E hoʻoneʻe',
 'movethispage' => 'E hoʻoneʻe i kēia ʻaoʻao',
 'pager-newer-n' => '{{PLURAL:$1|1 hou aku|$1 hou aku}}',
-'pager-older-n' => '{{PLURAL:$1|1 kekahi iho|$1 kekahi iho}}',
+'pager-older-n' => '{{PLURAL:$1|1 aku nei|$1 aku nei}}',
 
 # Book sources
 'booksources' => 'Kumu puke',
+'booksources-search-legend' => 'Huli i nā kūmole  puke',
 'booksources-go' => 'E huli',
 
 # Special:Log
-'log' => 'Nā mo‘olelo',
-'all-logs-page' => 'Nā moʻolelo āpau',
+'log' => 'Nā Mo‘olelo',
+'all-logs-page' => 'Nā Moʻolelo lehulehu apau',
 
 # Special:AllPages
-'allpages' => 'Nā ‘ao‘ao loa apau',
+'allpages' => 'Nā ‘Ao‘ao apau',
 'alphaindexline' => '$1 i $2',
 'nextpage' => 'Mea aʻe ($1)',
 'prevpage' => 'Mea ma mua aʻe ($1)',
-'allarticles' => 'Nā mo‘olelo apau loa',
+'allarticles' => 'Nā ʻAoʻao apau',
 'allpagessubmit' => 'E huli',
 
 # Special:Categories
-'categories' => 'Nā mahele',
+'categories' => 'Nā hele',
 
 # Special:DeletedContributions
-'deletedcontributions' => 'Nā ha‘awina o ka inoa mea ho‘ohana i kāpae ‘ia ai',
-'deletedcontributions-title' => 'Nā ha‘awina o ka inoa mea ho‘ohana i kāpae ‘ia ai',
+'deletedcontributions' => 'Nā ha‘awina mea ho‘ohana i holoi ‘ia',
+'deletedcontributions-title' => 'Nā ha‘awina mea ho‘ohana i holoi ‘ia',
 
 # Special:LinkSearch
-'linksearch' => 'Loulou waho wahi',
+'linksearch' => 'Huli loulou kūwaho',
 'linksearch-ok' => 'Huli',
+'linksearch-line' => 'Loulou ʻia ʻo $1 mai $2',
 
 # Special:ListUsers
 'listusers-submit' => 'Hō‘ike',
 
 # Special:ListGroupRights
-'listgrouprights-members' => '(papa o nā lālā)',
+'listgrouprights-members' => '(papainoa o nā lālā)',
 
 # Email user
 'emailuser' => 'E leka uila i kēia mea ho‘ohana',
-'emailmessage' => 'Memo:',
+'emailmessage' => 'Pūlono:',
 
 # Watchlist
-'watchlist' => 'Kaʻu papa nānā pono',
-'mywatchlist' => 'Ka‘u papa nānā pono',
+'watchlist' => 'Kaʻu papakiaʻi',
+'mywatchlist' => 'Ka‘u papakiaʻi',
+'watchlistfor2' => 'No $1 $2',
 'removedwatchtext' => 'Wehe ʻia ʻo "[[:$1]]" mai [[Special:Watchlist|kāu papa nānā pono]].',
 'watch' => 'E kia‘i',
 'watchthispage' => 'E nānā pono i kēia mea',
-'unwatch' => 'E wehe ke kia‘i',
-'watchlist-details' => '{{PLURAL:$1|$1|$1}} a kāu papa nānā pono ʻaoʻao, me ke koe ʻana o nā ʻaoʻao kūkākūkā.',
-'wlshowlast' => 'Hōʻike $1 hola hope $2 lā hope $3',
+'unwatch' => 'Kiaʻi ʻole',
+'watchlist-details' => '{{PLURAL:$1|$1 ʻaoʻao|$1 mau ʻaoʻao}} a kāu papakiaʻi, me ʻole ke koe ʻana o nā ʻaoʻao walaʻau.',
+'wlshowlast' => 'Hōʻike $1 hola aku nei $2 lā aku nei $3',
+'watchlist-options' => 'Nā Koho papakiaʻi',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching' => 'Ke kia‘i nei...',
+'watching' => 'Kia‘i nei...',
 'unwatching' => 'Ke wehe nei i ke kiaʻi...',
 
 'changed' => 'ua loli ‘ia',
 
 # Delete
-'deletepage' => 'Kāpae ʻaoʻao',
-'actioncomplete' => 'Ua pau',
-'deletedtext' => 'Ua kāpae ʻia ʻo "$1".
-E ʻike iā $2 no ka papa o nā kāpae ʻana hou.',
-'dellogpage' => 'Mo‘olelo kāpae',
-'dellogpagetext' => 'He helu o nā mea i kāpae ʻia hou i lalo.',
-'deletionlog' => 'mo‘olelo kāpae',
+'deletepage' => 'Holoi ʻaoʻao',
+'actioncomplete' => 'Hana kūleʻa',
+'actionfailed' => 'Hana pohō',
+'deletedtext' => 'Ua holoi ʻia ʻo "$1".
+E ʻike iā $2 no ka papa o nā holoi hou.',
+'dellogpage' => 'Mo‘olelo holoi',
+'dellogpagetext' => 'He papahelu o nā holoi hou i lalo.',
+'deletionlog' => 'mo‘olelo holoi',
 'deletecomment' => 'Kumu:',
 'deleteotherreason' => 'Kumu ʻē aʻe/hoʻokomo',
 'deletereasonotherlist' => 'Kumu ʻē aʻe',
-'delete-edit-reasonlist' => 'Ho‘opololei i nā kumu no ke kāpae ‘ana',
+'delete-edit-reasonlist' => 'Hoʻololi i nā kumu holoi',
 
 # Rollback
-'rollbacklink' => 'ho‘i',
+'rollbacklink' => 'ho‘ihoʻi',
 
 # Protect
-'protectedarticle' => 'ua pale ʻia "[[$1]]"',
+'protectlogpage' => 'Moʻolelo palekana',
+'protectedarticle' => 'ua hoʻomalu iā "[[$1]]"',
 'prot_1movedto2' => 'Ua hoʻoneʻe ʻo [[$1]] iā [[$2]]',
 'protectcomment' => 'Kumu:',
-'protect-default' => 'ʻAe nā mea hoʻohana a pau',
-'protect-level-sysop' => 'Nā kahu wale nō',
+'protect-default' => 'ʻAe nā mea hoʻohana a pau',
+'protect-level-sysop' => 'Nā Kahu wale nō',
 'protect-cantedit' => 'ʻAʻole hiki iā ʻoe ke hoʻololi i nā kūlana māmalu o kēia ʻaoʻao, no ka mea, ʻaʻohe āu ʻae no ka hoʻololi ʻana.',
 'protect-expiry-options' => '1 hola:1 hour,1 lā:1 day,1 pule:1 week,2 pule:2 weeks,1 mahina:1 month,3 mahina:3 months,6 mahina:6 months,1 makahiki:1 year,pau ʻole:infinite',
 'restriction-type' => 'ʻAe ʻia:',
 
 # Restrictions (nouns)
-'restriction-edit' => 'E ho‘ololi',
-'restriction-move' => "E ho'ololi i ka inoa",
+'restriction-edit' => 'Hoʻololi',
+'restriction-move' => 'Hoʻoneʻe',
 
 # Undelete
 'undeletebtn' => 'Ho‘āla',
 'undeletelink' => 'nānā/ho‘āla',
+'undeleteviewlink' => 'hōʻike',
 'undelete-search-submit' => 'Huli',
 
 # Namespace form on various pages
-'namespace' => 'Wahi inoa',
+'namespace' => 'Lewainoa:',
+'invert' => 'Kuapo i ke koho',
 'blanknamespace' => '(‘ano nui)',
 
 # Contributions
-'contributions' => 'Nā ha‘awina o kēia mea ho‘ohana',
-'mycontris' => 'Koʻu mau haʻawina',
-'contribsub2' => 'No $1 ($2)',
-'uctop' => '(wēkiu)',
-'month' => 'Mai ka mahina (me mua):',
-'year' => 'Mai ka makahiki (me mua):',
-
-'sp-contributions-deleted' => 'Nā ha‘awina o ka inoa mea ho‘ohana i kāpae ‘ia ai',
-'sp-contributions-talk' => 'Kūkākūkā',
-'sp-contributions-userrights' => 'Ho‘oponopono ‘ana o nā kuleana',
+'contributions' => 'Nā haʻawina o ka {{GENDER:$1|mea hoʻohana}}',
+'contributions-title' => 'Nā Hāʻawina mea hoʻohana no $1',
+'mycontris' => 'Kaʻu mau haʻawina',
+'contribsub2' => 'No {{GENDER:$3|$1}} ($2)',
+'uctop' => '(okamanawa)',
+'month' => 'Mai ka mahina (mamua aku nei nō hoʻi):',
+'year' => 'Mai ka makahiki (mamua aku nei nō hoʻi):',
+
+'sp-contributions-newbies' => 'Hōʻike i nā hāʻawina o nā moʻokāki hou wale nō',
+'sp-contributions-blocklog' => 'moʻolelo hoʻopale',
+'sp-contributions-deleted' => 'nā ha‘awina o ka inoa mea ho‘ohana i holoi ‘ia',
+'sp-contributions-uploads' => 'nā hoʻouka',
+'sp-contributions-logs' => 'nā moʻolelo',
+'sp-contributions-talk' => 'walaʻau',
+'sp-contributions-userrights' => 'ka hoʻoponopono ʻana o nā kūleana mea hoʻohana',
 'sp-contributions-search' => 'Huli no nā haʻawina',
+'sp-contributions-username' => 'Wahinoho IP aiʻole inoa mea hoʻohana:',
+'sp-contributions-toponly' => 'Hōʻike wale nō i nā hoʻololi kāmua hou loa',
 'sp-contributions-submit' => 'Huli',
 
 # What links here
-'whatlinkshere' => 'Nā mea e loulou iho ai',
+'whatlinkshere' => 'He aha ka mea e loulou iho ai',
+'whatlinkshere-title' => 'Nā ʻAoʻao e loulou iā "$1"',
 'whatlinkshere-page' => '‘Ao‘ao:',
-'nolinkshere' => "‘A‘ole he ‘ao‘ao e loulou ai iā '''[[:$1]]'''.",
-'isredirect' => 'ʻaoʻao hoʻoili ʻana',
-'whatlinkshere-prev' => '{{PLURAL:$1|mua|mua $1}}',
-'whatlinkshere-next' => '{{PLURAL:$1|hope|hope $1}}',
+'linkshere' => 'Loulou kēia mau ʻaoʻao iā <strong>[[:$1]]</strong>:',
+'nolinkshere' => "ʻAʻohe ‘ao‘ao e loulou iā '''[[:$1]]'''.",
+'isredirect' => 'ʻaoʻao kia hou',
+'istemplate' => 'kumo',
+'isimage' => 'loulou waihona',
+'whatlinkshere-prev' => '{{PLURAL:$1|mua aku nei|$1 mua aku nei}}',
+'whatlinkshere-next' => '{{PLURAL:$1|hou aʻe|$1 hou aʻe}}',
 'whatlinkshere-links' => '← nā loulou',
+'whatlinkshere-hideredirs' => '$1 i nā kiahou',
+'whatlinkshere-hidetrans' => '$1 i nā kumo',
 'whatlinkshere-hidelinks' => '$1 i nā loulou',
+'whatlinkshere-hideimages' => '$1 i nā loulou waihona',
 'whatlinkshere-filters' => 'Kānana',
 
 # Block/unblock
-'blockip' => 'E ke‘a i kēia mea ho‘ohana',
+'blockip' => 'Pale i kēia mea ho‘ohana',
 'ipbexpiry' => 'Pau āhea:',
 'ipbreason' => 'Kumu:',
-'ipbsubmit' => 'E ke‘a i kēia mea ho‘ohana',
-'ipbother' => 'ʻĒ aʻe manawa:',
-'ipboptions' => '2 hola:2 hours,1 lā:1 day,3 lā:3 days,1 pule:1 week,2 pule:2 weeks,1 mahina:1 month,3 mahina:3 months,6 mahina:6 months,1 makahiki:1 year,pau ʻole:infinite',
-'badipaddress' => 'Mana ‘ole ka wahi noho IP',
+'ipbsubmit' => 'Pale i kēia mea ho‘ohana',
+'ipbother' => 'Manawa ʻē aʻe:',
+'ipboptions' => '2 mau hola:2 hours,1 lā:1 day,3 mau lā:3 days,1 pule:1 week,2 mau pule:2 weeks,1 mahina:1 month,3 mau mahina:3 months,6 mau mahina:6 months,1 makahiki:1 year,wā pau ʻole:infinite',
+'badipaddress' => 'Wahinoho IP hewa',
+'ipblocklist' => 'Nā Mea hoʻohana pale ʻia',
 'ipblocklist-submit' => 'Huli',
 'infiniteblock' => 'pau ʻole',
-'anononlyblock' => '‘A‘ohe i hō‘ike‘ia ka inoa wale nō',
-'blocklink' => 'e keʻa',
-'unblocklink' => 'mai pale',
-'change-blocklink' => 'hoʻololi ka palena',
-'contribslink' => 'nā ha‘awina',
+'anononlyblock' => 'nā inoaʻole wale nō',
+'blocklink' => 'hoʻopale',
+'unblocklink' => 'hoʻopale ʻole',
+'change-blocklink' => 'hoʻololi i ka palena',
+'contribslink' => 'ha‘awina',
+'blocklogpage' => 'Moʻolelo hoʻopale',
+'blocklogentry' => 'ua hoʻopale ʻia ʻo [[$1]] no ka manawa o $2 $3',
+'block-log-flags-nocreate' => 'ua hoʻopale ʻia ke kāinoa moʻokāki ʻana',
 
 # Move page
 'move-page-legend' => 'Hoʻoneʻe i ka ʻaoʻao',
 'movearticle' => 'E hoʻoneʻe i ka ʻaoʻao:',
 'newtitle' => 'I ka inoa hou:',
-'move-watch' => 'E nānā pono i kēia mea',
+'move-watch' => 'Kiaʻi i ka ʻaoʻao kumu a me ka ʻaoʻao māka',
 'movepagebtn' => 'Hoʻoneʻe i ka ʻaoʻao',
 'pagemovedsub' => 'Kūleʻa ka hoʻoneʻe ʻana',
 'movepage-moved' => '\'\'\'Ua hoʻoneʻe ʻia ʻo "$1" iā "$2"\'\'\'',
+'movelogpage' => 'Hoʻoneʻe i ka moʻolelo',
 'movereason' => 'Kumu:',
-'delete_and_move' => 'E kāpae a e ho‘ololi i ka inoa',
-'delete_and_move_confirm' => '‘Ae, e kāpae i ka ‘ao‘ao',
+'revertmove' => 'hoʻihoʻi',
+'delete_and_move' => 'Holoi a hoʻoneʻe',
+'delete_and_move_confirm' => '‘Ae, e holoi i ka ‘ao‘ao',
 
 # Export
+'export' => 'Kāpuka ʻaoʻao',
 'export-addcat' => 'Ho‘ohui',
 
 # Namespace 8 related
-'allmessages' => 'Nā kauoha o ke kahua',
+'allmessages' => 'Pūlono ʻōnaehana',
 'allmessagesname' => 'Inoa',
 'allmessagesdefault' => 'Kikokikona pa‘amau',
 'allmessagescurrent' => 'Kikokikona i kēia manawa',
 
 # Thumbnails
-'thumbnail-more' => 'ho‘onui',
+'thumbnail-more' => 'Ho‘onui',
+'thumbnail_error' => 'Loaʻa i ka hewa ka haku ʻana o ke kiʻiliʻi: $1',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'Kāu inoa mea ho‘ohana',
-'tooltip-pt-mytalk' => 'Kāu ‘aoʻao ʻōlelo',
-'tooltip-pt-preferences' => 'ka‘u makemake',
-'tooltip-pt-watchlist' => 'Ka papa o nā ʻaoʻao o kou nānā ʻana no nā loli',
+'tooltip-pt-userpage' => 'Kāu ʻaoʻao mea hoʻohana',
+'tooltip-pt-mytalk' => 'Kāu walaʻau',
+'tooltip-pt-preferences' => 'u makemake',
+'tooltip-pt-watchlist' => 'He papahelu o nā ʻaoʻao āu e kiaʻi nei no nā loli',
 'tooltip-pt-mycontris' => 'Kāu mau ha‘awina',
 'tooltip-pt-login' => 'Pai ‘ia ‘oe e ‘e‘e, akā, ‘a‘ole ia he koina',
-'tooltip-pt-logout' => 'E ha‘alele',
-'tooltip-ca-talk' => 'Kūkākūkā e pili ana i kēia ‘ao‘ao',
+'tooltip-pt-logout' => 'Ha‘alele',
+'tooltip-ca-talk' => 'Kūkākūkā e pili ana i ka ʻaoʻao mealoko',
 'tooltip-ca-edit' => 'Hiki iā ‘oe ke ho‘ololi i kēia ‘ao‘ao. Ma mua o ka mālama ʻia ʻana, e ho‘ohana i ke pihi nāmua, ke ‘olu‘olu.',
-'tooltip-ca-addsection' => 'Hoʻomaka i kekahi māhele hou',
-'tooltip-ca-viewsource' => 'Pale ʻia kēia ʻaoʻao.
-Hiki iā ʻoe ke ʻikena i kāna molekumu.',
-'tooltip-ca-history' => 'Ko kēia ʻaoʻao mau kāmua hope',
-'tooltip-ca-protect' => 'Ho‘omalu i keia ‘ao‘ao',
-'tooltip-ca-delete' => 'E kāpae i kēia mo‘olelo',
+'tooltip-ca-addsection' => 'Hoʻomaka i kekahi pauku hou',
+'tooltip-ca-viewsource' => 'Hoʻomalu ʻia kēia ʻaoʻao.
+Hiki iā ʻoe ke ʻike i kāna kūmole.',
+'tooltip-ca-history' => 'Nā kāmua mamua o kēia ʻaoʻao',
+'tooltip-ca-protect' => 'E ho‘omalu i keia ‘ao‘ao',
+'tooltip-ca-delete' => 'E holoi i kēia ʻaoʻao',
 'tooltip-ca-move' => 'E hoʻoneʻe i kēia ʻaoʻao',
-'tooltip-ca-watch' => 'E nānā pono i kēia mea',
+'tooltip-ca-watch' => 'Hoʻohui i kāu papakiʻai',
+'tooltip-ca-unwatch' => 'Hoʻowehe i kēia ʻaoʻao mai kāu papakiaʻi',
 'tooltip-search' => 'Huli iā {{SITENAME}}',
 'tooltip-search-go' => 'Kele i kekahi ʻaoʻao me kēia inoa inā hiki ke loaʻa',
 'tooltip-search-fulltext' => 'Huli i nā ʻaoʻao no kēia kikokikona',
 'tooltip-p-logo' => 'Kele i ka papa kinohi',
 'tooltip-n-mainpage' => 'Kele i ka papa kinohi',
 'tooltip-n-mainpage-description' => 'Kele i ka papa kinohi',
-'tooltip-n-portal' => 'E pili ana ka pāhana, nā hana hiki, nā wahi no ka loaʻa ʻana',
-'tooltip-n-currentevents' => 'ʻIke i nā nū hou',
+'tooltip-n-portal' => 'No ka papahana, nā hana hiki, nāhi no ka loaʻa ʻana',
+'tooltip-n-currentevents' => 'Loaʻa nā ʻike kūmole e pili ana i nā nūhou',
 'tooltip-n-recentchanges' => 'Nā loli hou ma ka wiki',
-'tooltip-n-randompage' => 'Hōʻike kekahi ʻaoʻao kaulele',
-'tooltip-n-help' => 'Ka wahi e kōkua ai iā ‘oe',
-'tooltip-t-whatlinkshere' => 'Nā ‘ao‘ao a pau i loulou mai ai',
+'tooltip-n-randompage' => 'Hoʻouka i kekahi ʻaoʻao kaulele',
+'tooltip-n-help' => 'Kahi e aʻo mai',
+'tooltip-t-whatlinkshere' => 'He papahelu o nā ʻaoʻao wiki apau e loulou i ʻaneʻi',
+'tooltip-t-recentchangeslinked' => 'Nā loli hou i nā ʻaoʻao i loulou ʻia mai kēia ʻaoʻao',
+'tooltip-feed-atom' => 'Hānaīke Atom no kēia ʻaoʻao',
+'tooltip-t-contributions' => 'He papahelu o nā hāʻawina o ka mea hoʻohana',
 'tooltip-t-emailuser' => 'Leka uila i kēia mea hoʻohana',
 'tooltip-t-upload' => 'Ho‘ouka i nā waihona',
-'tooltip-t-specialpages' => 'Papa inoa o nā ʻaoʻao nui apau',
+'tooltip-t-specialpages' => 'He papainoa o nā ʻaoʻao kūikawā apau',
 'tooltip-t-print' => 'Mana paʻi pono o kēia ʻaoʻao',
 'tooltip-t-permalink' => 'Loulou paʻa no kēia kāmua o ka ʻaoʻao',
-'tooltip-ca-nstab-special' => 'He papa nui kēia; ʻaʻole hiki iā ʻoe ke hoʻololi',
+'tooltip-ca-nstab-main' => 'Nānā i ka ʻaoʻao mealoko',
+'tooltip-ca-nstab-user' => 'Nānā i ka ʻaoʻao mea hoʻohana',
+'tooltip-ca-nstab-special' => 'He ʻaoʻao kūikawā kēia; ʻaʻole hiki iā ʻoe ke hoʻololi',
 'tooltip-ca-nstab-project' => 'Nānā i ka ‘ao‘ao papahana',
-'tooltip-ca-nstab-image' => 'Nānā i ka ʻaoʻao faila',
+'tooltip-ca-nstab-image' => 'Nānā i ka ʻaoʻao waihona',
+'tooltip-ca-nstab-template' => 'Nānā i ke anakuhi',
 'tooltip-ca-nstab-help' => 'Nānaina i ka ʻaoʻao kōkua',
-'tooltip-minoredit' => 'Wae i kēia hoʻopololei me he hoʻopololei iki',
-'tooltip-save' => 'Mālama i kāu ho‘opololei',
-'tooltip-watch' => 'E nānā pono i kēia mea',
+'tooltip-ca-nstab-category' => 'Nānā i ka ‘ao‘ao mahele',
+'tooltip-minoredit' => 'Kaha i kēia me he hoʻololi iki',
+'tooltip-save' => 'Mālama i kāu mau loli',
+'tooltip-preview' => 'E nāmua i kāu mau loli ma mua o ka mālama ʻana ke ʻoluʻolu!',
+'tooltip-diff' => 'Hōʻike i nā loli āu i hana ai i kēia kikokikona',
+'tooltip-compareselectedversions' => 'E ʻike i na ʻokoʻa ma waena o nā kāmua ʻelua i koho ʻia o kēia ʻaoʻao',
+'tooltip-watch' => 'Hoʻohui i kāu papakiʻai',
+'tooltip-rollback' => 'Hoʻihoʻi ʻo "Hoʻihoʻi" i nā hoʻololi i kēia ʻaoʻao o ka mea hāʻawi hopeloa i hoʻokahi kāomi',
+'tooltip-undo' => 'Hoʻihoʻi ʻo "Hōʻole" i kēia hoʻololi a wehe ia i ka ʻaoʻao hoʻololi i ke ʻano nāmua. ʻAe ia i ka hoʻohui ʻana i kekahi kumu i loko o ka hōʻuluʻulu manaʻo.',
+'tooltip-summary' => 'Kikokiko i kekahi hōʻuluʻulu manaʻo pōkole',
 
 # Browsing diffs
+'previousdiff' => '← Hoʻololi aku nei',
 'nextdiff' => 'Hoʻololi hou aʻe →',
 
 # Media information
-'file-info-size' => '$1 x $2 kiʻiʻuku, nui faila: $3, ʻano MIME: $4',
-'show-big-image' => 'Miomio piha',
+'file-info-size' => '$1 x $2 kiʻiʻuku, nui waihona: $3, ʻano MIME: $4',
+'file-nohires' => 'Loaʻa ʻole ka miomio aʻe.',
+'svg-long-desc' => 'Waihona SVG, $1 x $2 mau pikela, nui waihona: $3',
+'show-big-image' => 'Waihona kumu',
 
 # Special:NewFiles
 'ilsubmit' => 'Huli',
 
+# Bad image list
+'bad_image_list' => 'ʻO kēia ka hulu:
+
+Noʻonoʻo pono wale no i nā ʻikamu papahelu (nā laina e hoʻomaka ʻia me *).
+Pono ka loulou mua loa ma kekahi laina e loulou i kekahi waihona ʻino.
+Noʻonoʻo ʻia nā loulou heleiho ma kēlā laina like i nā kūʻē lula, he laʻana kēia, nā ʻaoʻao e loaʻa i ka waihona i loko o ka laina.',
+
+# Metadata
+'metadata' => 'ʻIkepiliMeta',
+'metadata-help' => 'Loaʻa i kēia waihona nā ʻike ʻē aʻe i hoʻohui ʻia paha mai kekahi pahupaʻakiʻi aiʻole kekahi mīkinikopekiʻi i hana ʻia no ka haku ʻana aiʻole ka hoʻokamepiuila ʻana o ia.
+Inā ua kāloli ʻia ka waihona mai kona ʻano kumu, hōʻike piha ʻole i kekahi o nā kikoʻī o ka waihona i kāloli ʻia.',
+'metadata-fields' => 'E hoʻokomo ʻia ana nā kula ʻikepiliMeta kiʻi i loko o kēia pūlono ma ka hōʻike ʻaoʻao kiʻi oiai ka hoʻoliʻi ʻana o ke pākaukau ʻikepiliMeta.
+Hoʻohuna paʻamau i nā mea ʻē aʻe
+* kahana lōkō
+* kaʻano
+* kalāholakumu
+* holahuʻena
+* heluf
+* kūlanawikiiso
+* loaaniani
+* meahana
+* kūleanakope
+* hōʻikeʻanokiʻi
+* lakikūgps
+* lonikūgps
+* kiʻekiʻegps',
+
 # 'all' in various places, this might be different for inflected languages
-'watchlistall2' => 'apau',
-'namespacesall' => 'apau',
-'monthsall' => 'āpau',
+'watchlistall2' => 'nā mea apau',
+'namespacesall' => 'nā mea apau',
+'monthsall' => 'nā mea apau',
 
 # action=purge
 'confirm_purge_button' => 'Hiki nō',
 
 # Multipage image navigation
-'imgmultipageprev' => '← mea ma mua aʻe',
-'imgmultipagenext' => 'mea aʻe →',
+'imgmultipageprev' => '← ʻaoʻao aku nei',
+'imgmultipagenext' => 'ʻaoʻao hou aʻe →',
 
 # Table pager
-'table_pager_next' => 'Mea aʻe',
-'table_pager_prev' => 'Mea ma mua aʻe',
+'table_pager_next' => 'ʻAoʻao hou aʻe',
+'table_pager_prev' => 'ʻAoʻao aku nei',
 
 # Auto-summaries
-'autosumm-replace' => "Ke pani nei i ka ‘ao‘ao me '$1'",
-'autoredircomment' => 'Ke alaka‘i nei hou i [[$1]]',
+'autosumm-replace' => "Ke pani nei i ka mealoko me '$1'",
+'autoredircomment' => 'Kiahou i ka ʻaoʻao iā [[$1]]',
 'autosumm-new' => "Ua hoʻokumu ʻia kekahi ʻaoʻao me '$1'",
 
 # Live preview
 'livepreview-loading' => 'Ke ho‘ouka nei…',
 
 # Watchlist editor
-'watchlistedit-normal-title' => 'E ho‘opololei i ka‘u papa nānā pono',
+'watchlistedit-normal-title' => 'Hoʻololi i ka papakiaʻi',
+
+# Watchlist editing tools
+'watchlisttools-view' => 'Nānā i nā loli ʻālike',
+'watchlisttools-edit' => 'Nānā a hoʻololi i ka papakiaʻi',
+'watchlisttools-raw' => 'Hoʻololi i ka papakiaʻi maka',
+
+# Core parser functions
+'duplicate-defaultsort' => '<strong>E akahele:</strong> Mauʻaʻe ke kī kaʻalike paʻamau "$2" i ke kī kaʻalike paʻamau "$1" mai ka wā mua.',
 
 # Special:Version
-'version-specialpages' => 'Nā ‘ao‘ao kūikawā',
+'version-specialpages' => 'Nā ‘Ao‘ao kūikawā',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch-submit' => 'Huli',
 
 # Special:SpecialPages
-'specialpages' => 'Nā ‘ao‘ao kūikawā',
+'specialpages' => 'Nā ‘Ao‘ao kūikawā',
+
+# External image whitelist
+'external_image_whitelist' => ' #Waiho i kēia laina<pre>
+#Kau i nā hapa haʻi maʻamau (nā hapa e kau ʻia ma waena o nā //) i lalo
+#Hoʻohālikelike ia mea me nā URL o nā kiʻi kūwaho (loulouhūnāloko)
+#Hōʻike ʻia ia mea e hoʻohālikelike me he mau kiʻi, inā ʻaʻole pēlā e hōʻike wale me he loulou no ke kiʻi wale nō
+#Mālama ʻia nā laina e hoʻomaka me ka # e like me nā kaumanaʻo
+#Kākau wale, mai hopohopo e pili ana nā ʻaui
+
+#Kau i nā hapa ligaka apau ma luna o kēia laina. Wahiho i kēia laina</pre>',
 
 # Special:Tags
-'tags-edit' => 'e hoʻololi',
+'tag-filter' => 'Kānana [[Special:Tags|lepili]]:',
+'tags-edit' => 'hoʻololi',
 
 # Special:ExpandTemplates
 'expand_templates_ok' => 'Hiki nō',
index 22b09ba..757fee1 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Agbad
  * @author Amire80
+ * @author Crazy Ivan
  * @author Dekel E
  * @author Drorsnir
  * @author Guycn1
@@ -25,6 +26,7 @@
  * @author YaronSh
  * @author Yona b
  * @author אור שפירא
+ * @author איתן96
  * @author דולב
  * @author ערן
  * @author פדיחה
@@ -403,7 +405,6 @@ $messages = array(
 'tog-ccmeonemails' => 'לשלוח אליי העתקים של הודעות דואר אלקטרוני ששלחתי למשתמשים אחרים',
 'tog-diffonly' => 'ביטול הצגת תוכן הדף מתחת להשוואות הגרסאות',
 'tog-showhiddencats' => 'הצגת קטגוריות מוסתרות',
-'tog-noconvertlink' => 'ביטול המרת קישורים לכותרות',
 'tog-norollbackdiff' => 'השמטת ההבדלים בין הגרסאות לאחר ביצוע שחזור',
 'tog-useeditwarning' => 'הצגת אזהרה בעת עזיבת דף עריכה עם שינויים שטרם נשמרו',
 'tog-prefershttps' => 'תמיד להשתמש בתקשורת מאובטחת לאחר הכניסה לחשבון',
@@ -491,11 +492,11 @@ $messages = array(
 'category-empty' => "'''קטגוריה זו אינה כוללת דפים או קובצי מדיה.'''",
 'hidden-categories' => '{{PLURAL:$1|קטגוריה מוסתרת|קטגוריות מוסתרות}}',
 'hidden-category-category' => 'קטגוריות מוסתרות',
-'category-subcat-count' => '{{PLURAL:$2|קטגוריה זו כוללת את קטגוריית המשנה הבאה בלבד|דף קטגוריה זה כולל את {{PLURAL:$1|קטגוריית המשנה הבאה|$1 קטגוריות המשנה הבאות}}, מתוך $2 בקטגוריה כולה}}.',
+'category-subcat-count' => '{{PLURAL:$2|קטגוריה זו כוללת את קטגוריית המשנה הבאה בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|קטגוריית המשנה המוצגת להלן|$1 קטגוריות המשנה המוצגות להלן}}, וכוללת בסך הכול $2 קטגוריות משנה.}}',
 'category-subcat-count-limited' => 'קטגוריה זו כוללת את {{PLURAL:$1|קטגוריית המשנה הבאה|$1 קטגוריות המשנה הבאות}}.',
-'category-article-count' => '{{PLURAL:$2|קטגוריה זו כוללת את הדף הבא בלבד|דף קטגוריה זה כולל את {{PLURAL:$1|הדף הבא|$1 הדפים הבאים}}, מתוך $2 בקטגוריה כולה}}.',
+'category-article-count' => '{{PLURAL:$2|קטגוריה זו כוללת את הדף הבא בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|הדף המוצג להלן|$1 הדפים המוצגים להלן}}, וכוללת בסך הכול $2 דפים.}}',
 'category-article-count-limited' => 'קטגוריה זו כוללת את {{PLURAL:$1|הדף הבא|$1 הדפים הבאים}}.',
-'category-file-count' => '{{PLURAL:$2|קטגוריה זו כוללת את הקובץ הבא בלבד|קטגוריה זו כוללת את {{PLURAL:$1|הקובץ הבא|$1 הקבצים הבאים}}, מתוך $2 בקטגוריה כולה}}.',
+'category-file-count' => '{{PLURAL:$2|קטגוריה זו כוללת את הקובץ הבא בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|הקובץ המוצג להלן|$1 הקבצים המוצגים להלן}}, וכוללת בסך הכול $2 קבצים.}}',
 'category-file-count-limited' => 'קטגוריה זו כוללת את {{PLURAL:$1|הקובץ הבא|$1 הקבצים הבאים}}.',
 'listingcontinuesabbrev' => '(המשך)',
 'index-category' => 'דפים המופיעים במנועי חיפוש',
@@ -530,7 +531,6 @@ $messages = array(
 'vector-action-protect' => 'הגנה',
 'vector-action-undelete' => 'ביטול מחיקה',
 'vector-action-unprotect' => 'שינוי הגנה',
-'vector-simplesearch-preference' => 'הפעלת סרגל חיפוש מפושט (בעיצוב וקטור בלבד)',
 'vector-view-create' => 'יצירה',
 'vector-view-edit' => 'עריכה',
 'vector-view-history' => 'הצגת היסטוריה',
@@ -817,8 +817,7 @@ $2',
 'gotaccountlink' => 'כניסה לחשבון',
 'userlogin-resetlink' => 'שכחת את פרטי הכניסה?',
 'userlogin-resetpassword-link' => 'שכחת את הסיסמה?',
-'helplogin-url' => 'Help:כניסה לחשבון',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|עזרה בכניסה לחשבון]]',
+'userlogin-helplink2' => 'עזרה בכניסה לחשבון',
 'userlogin-loggedin' => 'אתם כבר מחוברים לחשבון {{GENDER:$1|$1}}.
 השתמשו בטופס שלהלן כדי להתחבר לחשבון אחר.',
 'userlogin-createanother' => 'יצירת חשבון אחר',
@@ -916,6 +915,10 @@ $2',
 'suspicious-userlogout' => 'בקשתך לצאת מהחשבון נדחתה כיוון שנראה שהיא נשלחה על־ידי דפדפן שבור או שרת פרוקסי עם זיכרון מטמון.',
 'createacct-another-realname-tip' => 'השם האמיתי הוא אופציונאלי.
 אם תבחרו לספקו, הוא ישמש לייחוס עבודת המשתמש אליו.',
+'pt-login' => 'כניסה לחשבון',
+'pt-login-button' => 'כניסה לחשבון',
+'pt-createaccount' => 'יצירת חשבון',
+'pt-userlogout' => 'יציאה מהחשבון',
 
 # Email sending
 'php-mail-error-unknown' => 'שגיאה לא ידועה בפונקציה mail()‎ של PHP',
@@ -924,8 +927,7 @@ $2',
 
 # Change password dialog
 'changepassword' => 'שינוי סיסמה',
-'resetpass_announce' => 'נכנסתם באמצעות סיסמה זמנית שנשלחה אליכם בדוא"ל.
-כדי לסיים את הכניסה, עליכם לקבוע כאן סיסמה חדשה:',
+'resetpass_announce' => 'כדי לסיים את הכניסה, עליכם להגדיר סיסמה חדשה.',
 'resetpass_text' => '<!-- הוסיפו טקסט כאן -->',
 'resetpass_header' => 'שינוי סיסמת החשבון',
 'oldpassword' => 'סיסמה ישנה:',
@@ -941,8 +943,16 @@ $2',
 'resetpass-submit-cancel' => 'ביטול',
 'resetpass-wrong-oldpass' => 'הסיסמה הזמנית או הנוכחית אינה תקינה.
 ייתכן שכבר שינית את סיסמתך או שכבר ביקשת סיסמה זמנית חדשה.',
+'resetpass-recycled' => 'אנא אפסו את הסיסמה לסיסמה שונה מסיסמתכם הנוכחית.',
+'resetpass-temp-emailed' => 'נכנסתם באמצעות סיסמה זמנית שנשלחה אליכם בדוא"ל.
+כדי לסיים את הכניסה, עליכם להגדיר כאן סיסמה חדשה:',
 'resetpass-temp-password' => 'סיסמה זמנית:',
 'resetpass-abort-generic' => 'שינוי הסיסמה בוטל על־ידי הרחבה.',
+'resetpass-expired' => 'סיסמתכם פקעה. אנא הגדירו סיסמה חדשה כדי להיכנס.',
+'resetpass-expired-soft' => 'סיסמתכם פקעה ויש לאפס אותה. אנא בחרו סיסמה חדשה כעת, או לחצו על "{{int:resetpass-submit-cancel}}" כדי לאפס אותה מאוחר יותר.',
+'resetpass-validity-soft' => 'סיסמתך אינה תקינה: $1
+
+יש לבחור סיסמה חדשה עכשיו או ללחוץ "{{int:resetpass-submit-cancel}}" כדי לאפס את הסיסמה מאוחר יותר.',
 
 # Special:PasswordReset
 'passwordreset' => 'איפוס סיסמה',
@@ -1249,6 +1259,7 @@ $2
 'undo-success' => 'ניתן לבטל את העריכה. אנא בִדקו את השוואת הגרסאות למטה כדי לוודא שזה מה שאתם רוצים לעשות, ואז שמרו את השינויים למטה כדי לבצע את ביטול העריכה.',
 'undo-failure' => 'לא ניתן היה לבטל את העריכה עקב התנגשות עם עריכות מאוחרות יותר.',
 'undo-norev' => 'לא ניתן היה לבטל את העריכה כי היא אינה קיימת או כי היא נמחקה.',
+'undo-nochange' => 'נראה שהעריכה כבר בוטלה.',
 'undo-summary' => 'ביטול גרסה $1 של [[Special:Contributions/$2|$2]] ([[User talk:$2|שיחה]])',
 'undo-summary-username-hidden' => 'ביטול גרסה $1 של משתמש מוסתר',
 
@@ -1333,8 +1344,10 @@ $2
 'revdelete-show-file-submit' => 'כן',
 'revdelete-selected' => "'''ה{{PLURAL:$2|גרסה שנבחרה|גרסאות שנבחרו}} מתוך הדף [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|פעולת היומנים שנבחרה|פעולות היומנים שנבחרו}}:'''",
-'revdelete-text' => "'''גרסאות ופעולות יומנים שנמחקו עדיין תופענה בהיסטוריית הדף ובדפי היומנים, אך חלקים מהתוכן שלהן לא יהיה זמין לציבור.'''
-מפעילי מערכת אחרים באתר עדיין יוכלו לגשת לתוכן הנסתר ויוכלו לשחזר אותו שוב דרך הממשק הזה, אלא אם כן תוגדרנה הגבלות נוספות.",
+'revdelete-text-text' => 'גרסאות שנמחקו עדיין תופענה בהיסטוריית הדף, אך חלקים מהתוכן שלהן לא יהיו זמינים לציבור.',
+'revdelete-text-file' => 'גרסאות קבצים שנמחקו עדיין תופענה בהיסטוריית הקובץ, אך חלקים מהתוכן שלהן לא יהיו זמינים לציבור.',
+'logdelete-text' => 'פעולות יומנים שנמחקו עדיין תופענה בדפי היומנים, אך חלקים מהתוכן שלהן לא יהיו זמינים לציבור.',
+'revdelete-text-others' => 'מפעילי מערכת אחרים באתר עדיין יוכלו לגשת לתוכן הנסתר ויוכלו לשחזר אותו שוב דרך הממשק הזה, אלא אם כן תוגדרנה הגבלות נוספות.',
 'revdelete-confirm' => 'אנא אשרו שזה אכן מה שאתם מתכוונים לעשות, שאתם מבינים את התוצאות של מעשה כזה, ושהמעשה מבוצע בהתאם ל[[{{MediaWiki:Policy-url}}|נוהלי האתר]].',
 'revdelete-suppress-text' => "יש להשתמש בהסתרה מלאה '''אך ורק''' במקרים הבאים:
 * מידע שעלול להיות לשון הרע
@@ -1430,8 +1443,8 @@ $1",
 'showhideselectedversions' => 'הצגת/הסתרת הגרסאות שנבחרו',
 'editundo' => 'ביטול',
 'diff-empty' => '(אין הבדלים)',
-'diff-multi-sameuser' => '({{PLURAL:$1|×\92רסת ×\91×\99× ×\99×\99×\9d ×\90×\97ת|$1 ×\92רס×\90×\95ת ×\91×\99× ×\99×\99×\9d}} ×\9e×\9eשת×\9eש ×\90×\97×\93 ×\90×\99× ×\9f ×\9e×\95צ×\92×\95ת',
-'diff-multi-otherusers' => '({{PLURAL:$1|גרסת ביניים אחת|$1 גרסאות ביניים}}  {{PLURAL:$2|ממשתמש אחד|מ-$2 משתמשים}}  אינן מוצגות)',
+'diff-multi-sameuser' => '({{PLURAL:$1|×\92רסת ×\91×\99× ×\99×\99×\9d ×\90×\97ת|$1 ×\92רס×\90×\95ת ×\91×\99× ×\99×\99×\9d}} ×©×\9c ×\90×\95ת×\95 ×\9eשת×\9eש {{PLURAL:$1|×\90×\99× ×\94 ×\9e×\95צ×\92ת|×\90×\99× ×\9f ×\9e×\95צ×\92×\95ת}})',
+'diff-multi-otherusers' => '({{PLURAL:$1|גרסת ביניים אחת|$1 גרסאות ביניים}} של {{PLURAL:$2|משתמש אחר אחד|$2 משתמשים}} {{PLURAL:$1|אינה מוצגת|אינן מוצגות}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|גרסת ביניים אחת|$1 גרסאות ביניים}} של יותר {{PLURAL:$2|ממשתמש אחד|מ־$2 משתמשים}} {{PLURAL:$1|אינה מוצגת|אינן מוצגות}})',
 'difference-missing-revision' => '{{PLURAL:$2|גרסה אחת|$2 גרסאות}} של ההבדל הזה בין שתי גרסאות ($1) {{PLURAL:$2|לא נמצאה|לא נמצאו}}.
 
@@ -1472,13 +1485,14 @@ $1",
 'search-file-match' => '(התאמה בתוכן הקובץ)',
 'search-suggest' => 'האם התכוונת ל: $1',
 'search-interwiki-caption' => 'מיזמי אחות',
-'search-interwiki-default' => 'ת×\95צ×\90×\95ת ×\91{{GRAMMAR:תחילית|$1}}:',
+'search-interwiki-default' => 'ת×\95צ×\90×\95ת ×\9e{{GRAMMAR:תחילית|$1}}:',
 'search-interwiki-more' => '(עוד)',
 'search-relatedarticle' => 'קשור',
 'searcheverything-enable' => 'חיפוש בכל מרחבי השם',
 'searchrelated' => 'קשור',
 'searchall' => 'הכול',
-'showingresults' => "{{PLURAL:$1|מוצגת תוצאה '''אחת'''|מוצגות עד '''$1''' תוצאות}} החל ממספר '''$2''':",
+'showingresults' => '{{PLURAL:$1|מוצגת תוצאה <strong>אחת</strong>|מוצגות עד <strong>$1</strong> תוצאות}} החל ממספר <strong>$2</strong>:',
+'showingresultsinrange' => '{{PLURAL:$1|מוצגת תוצאה <strong>אחת</strong>|מוצגות עד <strong>$1</strong> תוצאות}} בין המספרים <strong>$2</strong> ו‏‏־<strong>$3</strong>:',
 'showingresultsnum' => "{{PLURAL:$3|מוצגת תוצאה '''אחת'''|מוצגות '''$3''' תוצאות}} החל ממספר '''$2''':",
 'showingresultsheader' => "{{PLURAL:$5|תוצאה '''$1''' מתוך '''$3'''|תוצאות '''$1 - $2''' מתוך '''$3'''}} עבור '''$4'''",
 'search-nonefound' => 'לא נמצאו תוצאות המתאימות לחיפוש.',
@@ -1797,18 +1811,30 @@ $1",
 'recentchanges-label-minor' => 'זוהי עריכה משנית',
 'recentchanges-label-bot' => 'עריכה זו בוצעה על־ידי בוט',
 'recentchanges-label-unpatrolled' => 'עריכה זו טרם נבדקה',
-'recentchanges-label-plusminus' => '×\9eספר ×\94×\91ת×\99×\9d ×©×\91×\95 ×\94שתנ×\94 ×\92×\95×\93×\9c ×\94×\93×£',
+'recentchanges-label-plusminus' => '×\92×\95×\93×\9c ×\94×\93×£ ×\94שתנ×\94 ×\91×\9eספר ×\96×\94 ×©×\9c ×\91ת×\99×\9d',
 'recentchanges-legend-heading' => "'''מקרא:'''",
 'recentchanges-legend-newpage' => '(ראו גם [[Special:NewPages|רשימת דפים חדשים]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => 'להלן <b>$1</b> השינויים האחרונים שבוצעו החל מתאריך <b>$2</b>:',
-'rclistfrom' => 'הצגת שינויים חדשים החל מ־$1',
+'rcnotefrom' => 'להלן השינויים שבוצעו החל מ‏‏֫־<b>$2</b> (עד <b>$1</b> מוצגים).',
+'rclistfrom' => 'הצגת שינויים חדשים החל מ־$2, $3',
 'rcshowhideminor' => '$1 שינויים משניים',
+'rcshowhideminor-show' => 'הצגת',
+'rcshowhideminor-hide' => 'הסתרת',
 'rcshowhidebots' => '$1 בוטים',
+'rcshowhidebots-show' => 'הצגת',
+'rcshowhidebots-hide' => 'הסתרת',
 'rcshowhideliu' => '$1 משתמשים רשומים',
+'rcshowhideliu-show' => 'הצגת',
+'rcshowhideliu-hide' => 'הסתרת',
 'rcshowhideanons' => '$1 משתמשים אנונימיים',
+'rcshowhideanons-show' => 'הצגת',
+'rcshowhideanons-hide' => 'הסתרת',
 'rcshowhidepatr' => '$1 עריכות בדוקות',
+'rcshowhidepatr-show' => 'הצגת',
+'rcshowhidepatr-hide' => 'הסתרת',
 'rcshowhidemine' => '$1 עריכות שלי',
+'rcshowhidemine-show' => 'הצגת',
+'rcshowhidemine-hide' => 'הסתרת',
 'rclinks' => 'הצגת $1 שינויים אחרונים ב־$2 הימים האחרונים.<br /> $3',
 'diff' => 'הבדל',
 'hist' => 'היסטוריה',
@@ -1936,6 +1962,8 @@ $1",
 'uploaddisabledtext' => 'אפשרות העלאת הקבצים מבוטלת.',
 'php-uploaddisabledtext' => 'אפשרות העלאת הקבצים מבוטלת ברמת PHP. אנא בדקו את ההגדרה file_uploads.',
 'uploadscripted' => 'הקובץ כולל קוד סקריפט או HTML שעשוי להתפרש או להתבצע בטעות על ידי הדפדפן.',
+'uploadscriptednamespace' => "קובץ ה‏‏֫־SVG הזה כולל מרחב שם בלתי חוקי: '$1'",
+'uploadinvalidxml' => 'לא ניתן לפרש את ה־XML בקובץ שהועלה.',
 'uploadvirus' => 'הקובץ מכיל וירוס!
 פרטים:
 <div dir="ltr">$1</div>',
@@ -2298,7 +2326,7 @@ $1',
 'mostcategories' => 'הדפים עם המספר הרב ביותר של קטגוריות',
 'mostimages' => 'הקבצים המקושרים ביותר',
 'mostinterwikis' => 'הדפים עם המספר הרב ביותר של קישורי בינוויקי',
-'mostrevisions' => '×\94×\93פ×\99×\9d ×\91×¢×\9c×\99 מספר העריכות הגבוה ביותר',
+'mostrevisions' => '×\94×\93פ×\99×\9d ×¢×\9d מספר העריכות הגבוה ביותר',
 'prefixindex' => 'רשימת הדפים המתחילים ב…',
 'prefixindex-namespace' => 'רשימת הדפים המתחילים ב… (במרחב השם $1)',
 'prefixindex-strip' => 'הסתרת התחילית ברשימה',
@@ -2308,15 +2336,25 @@ $1',
 'deadendpagestext' => 'הדפים הבאים אינם מקשרים לדפים אחרים באתר {{SITENAME}}.',
 'protectedpages' => 'דפים מוגנים',
 'protectedpages-indef' => 'הגנות לזמן בלתי מוגבל בלבד',
+'protectedpages-summary' => 'בדף זה רשומים הדפים הקיימים שמוגנים כרגע. לרשימת הכותרות שמוגנות מפני יצירה, ראו [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'הגנות מדורגות בלבד',
 'protectedpages-noredirect' => 'הסתרת הפניות',
 'protectedpagesempty' => 'אין כרגע דפים מוגנים עם הפרמטרים הללו.',
+'protectedpages-timestamp' => 'תאריך ושעה',
+'protectedpages-page' => 'דף',
+'protectedpages-expiry' => 'זמן פקיעה',
+'protectedpages-performer' => 'הוגן על ידי',
+'protectedpages-params' => 'פרמטרים להגנה',
+'protectedpages-reason' => 'סיבה',
+'protectedpages-unknown-timestamp' => 'לא ידוע',
+'protectedpages-unknown-performer' => 'משתמש לא ידוע',
 'protectedtitles' => 'כותרות מוגנות',
+'protectedtitles-summary' => 'בדף זה רשומות הכותרות שמוגנות כעת מפני יצירה. לרשימת הדפים הקיימים שמוגנים, ראו [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'אין כרגע כותרות מוגנות עם הפרמטרים האלה.',
 'listusers' => 'רשימת משתמשים',
 'listusers-editsonly' => 'הצגת משתמשים עם עריכות בלבד',
-'listusers-creationsort' => 'ס×\99×\93×\95ר לפי תאריך היצירה',
-'listusers-desc' => 'ס×\99×\93×\95ר בסדר יורד',
+'listusers-creationsort' => '×\9e×\99×\95×\9f לפי תאריך היצירה',
+'listusers-desc' => '×\9e×\99×\95×\9f בסדר יורד',
 'usereditcount' => '{{PLURAL:$1|עריכה אחת|$1 עריכות}}',
 'usercreated' => '{{GENDER:$3|נוצר|נוצרה}} ב־$2, $1',
 'newpages' => 'דפים חדשים',
@@ -2499,7 +2537,7 @@ $1',
 'watchmethod-list' => 'בודק את העריכות האחרונות בדפים שברשימת המעקב',
 'watchlistcontains' => 'רשימת המעקב כוללת {{PLURAL:$1|דף אחד|$1 דפים}}.',
 'iteminvalidname' => 'בעיה עם $1, שם שגוי…',
-'wlnote2' => 'להלן השינויים האחרונים ב{{PLURAL:$1|שעה האחרונה|-<strong> $1 </strong> שעות האחרונות}}, מ-$2, $3.',
+'wlnote2' => 'להלן השינויים האחרונים {{PLURAL:$1|בשעה האחרונה|בשעתיים האחרונות|ב‏‏־<strong>$1</strong> השעות האחרונות}}, עד $3, $2.',
 'wlshowlast' => '(הצגת $1 שעות אחרונות | $2 ימים אחרונים | $3)',
 'watchlist-options' => 'אפשרויות ברשימת המעקב',
 
@@ -2557,7 +2595,7 @@ $UNWATCHURL
 'deletepage' => 'מחיקה',
 'confirm' => 'אישור',
 'excontent' => 'התוכן היה: "$1"',
-'excontentauthor' => 'התוכן היה: "$1" (וה{{gender:$2|תורם היחיד היה|תורמת היחידה הייתה}} "[[Special:Contributions/$2|$2]]")',
+'excontentauthor' => 'התוכן היה: "$1" ({{GENDER:$2|והתורם היחיד היה|והתורמת היחידה הייתה}} "[[Special:Contributions/$2|$2]]")',
 'exbeforeblank' => 'התוכן לפני שרוקן היה: "$1"',
 'exblank' => 'הדף היה ריק',
 'delete-confirm' => 'מחיקת $1',
@@ -2586,7 +2624,7 @@ $UNWATCHURL
 'delete-edit-reasonlist' => 'עריכת סיבות המחיקה',
 'delete-toobig' => 'דף זה כולל מעל {{PLURAL:$1|גרסה אחת|$1 גרסאות}} בהיסטוריית העריכות שלו. מחיקת דפים כאלה הוגבלה כדי למנוע פגיעה בביצועי האתר.',
 'delete-warning-toobig' => 'דף זה כולל מעל {{PLURAL:$1|גרסה אחת|$1 גרסאות}} בהיסטוריית העריכות שלו. מחיקה שלו עלולה להפריע לפעולות בבסיס הנתונים; אנא שקלו שנית את המחיקה.',
-'deleting-backlinks-warning' => "'''אזהרה:''' דפים אחרים מקשרים לדף שאתם עומדים למחוק או מכלילים אותו.",
+'deleting-backlinks-warning' => "'''אזהרה:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|דפים אחרים]] מקשרים לדף שאתם עומדים למחוק או מכלילים אותו.",
 
 # Rollback
 'rollback' => 'שחזור עריכות',
@@ -2760,8 +2798,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'כתובת IP זו חסומה כרגע.
 הפעולה האחרונה ביומן החסימות מוצגת להלן:',
 'sp-contributions-search' => 'חיפוש תרומות',
+'sp-contributions-suppresslog' => 'תרומות משתמש מוסתרות',
 'sp-contributions-username' => 'שם משתמש או כתובת IP:',
 'sp-contributions-toponly' => 'הצגת עריכות שהן הגרסאות האחרונות בלבד',
+'sp-contributions-newonly' => 'הצגת עריכות שהן יצירות של דפים בלבד',
 'sp-contributions-submit' => 'חיפוש',
 
 # What links here
@@ -2865,7 +2905,7 @@ $1',
 'contribslink' => 'תרומות',
 'emaillink' => 'שליחת דוא"ל',
 'autoblocker' => 'נחסמתם באופן אוטומטי משום שאתם חולקים את כתובת ה־IP שלכם עם [[User:$1|$1]].
-הסיבה שניתנה לחסימת $1 היא "\'\'\'$2\'\'\'"',
+הסיבה שניתנה לחסימת $1 היא "$2"',
 'blocklogpage' => 'יומן חסימות',
 'blocklog-showlog' => 'משתמש זה נחסם בעבר.
 יומן החסימות מוצג להלן:',
@@ -3075,6 +3115,7 @@ $2',
 'thumbnail_image-type' => 'סוג התמונה אינו נתמך',
 'thumbnail_gd-library' => 'הגדרת הספריה GD אינה שלמה: חסרה הפונקציה $1',
 'thumbnail_image-missing' => 'נראה שהקובץ הבא חסר: $1',
+'thumbnail_image-failure-limit' => 'היו לאחרונה ניסיונות רבים מדי ($1 או יותר) ליצור את התמונה הממוזערת הזו. אנו נסו שוב מאוחר יותר.',
 
 # Special:Import
 'import' => 'ייבוא דפים',
@@ -3122,6 +3163,7 @@ $2',
 'import-error-special' => 'לא ניתן לייבא את הדף "$1" כיוון שהוא שייך למרחב שם מיוחד שלא יכול להכיל דפים.',
 'import-error-invalid' => 'לא ניתן לייבא את הדף "$1" כיוון ששמו אינו תקין.',
 'import-error-unserialize' => 'לא ניתן היה לפענח את הגרסה $2 של הדף "$1". הגרסה מסומנת כאילו היא משתמשת במודל התוכן $3, אך קודדה כ{{GRAMMAR:תחילית|$4}}.',
+'import-error-bad-location' => 'גרסה $2 המשתמשת במודל התוכן $3 אינה ניתנת לשמירה ב‏‏֫דף "$1" באתר ויקי זה, כיוון שהמודל אינו נתמך בדף זה.',
 'import-options-wrong' => '{{PLURAL:$2|אפשרות שגויה|אפשרויות שגויות}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'לדף הבסיס שניתן יש כותרת לא תקינה.',
 'import-rootpage-nosubpage' => 'מרחב השם "$1" של דף הבסיס אינו מאפשר דפי־משנה.',
@@ -3199,7 +3241,7 @@ $2',
 'tooltip-ca-nstab-help' => 'צפייה בדף העזרה',
 'tooltip-ca-nstab-category' => 'צפייה בדף הקטגוריה',
 'tooltip-minoredit' => 'סימון עריכה זו כמשנית',
-'tooltip-save' => 'ש×\9e×\99רת ×\94ש×\99× ×\95×\99×\99×\9d ×©×\91×\99צעת',
+'tooltip-save' => 'ש×\9e×\99רת ×\94ש×\99× ×\95×\99×\99×\9d ×©×\9c×\9a',
 'tooltip-preview' => 'תצוגה מקדימה, אנא השתמשו באפשרות זו לפני השמירה!',
 'tooltip-diff' => 'צפייה בשינויים שערכתם בטקסט',
 'tooltip-compareselectedversions' => 'צפייה בהשוואת שתי גרסאות של דף זה',
@@ -3930,6 +3972,9 @@ $5
 'confirm-unwatch-button' => 'אישור',
 'confirm-unwatch-top' => 'להסיר דף זה מרשימת המעקב שלך?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '"$1"',
+
 # Multipage image navigation
 'imgmultipageprev' => '→ לדף הקודם',
 'imgmultipagenext' => 'לדף הבא ←',
@@ -4375,6 +4420,4 @@ $5
 'expand_templates_generate_rawhtml' => 'הצגת HTML גולמי',
 'expand_templates_preview' => 'תצוגה מקדימה',
 
-# Unknown messages
-'uploadinvalidxml' => 'לא ניתן לפרש את ה־XML בקובץ שהועלה.',
 );
index 9351ece..e8d234e 100644 (file)
  * @author Shyam
  * @author Shyam123.ckp
  * @author Siddhartha Ghai
+ * @author Smtchahal
  * @author Subhashkataria21.90
  * @author Sunil Mohan
  * @author Taxman
  * @author Venky2834
  * @author Vibhijain
+ * @author Vivek Rai
  * @author Wikiconference
  * @author לערי ריינהארט
  * @author आलोक
@@ -354,7 +356,6 @@ $messages = array(
 'vector-action-protect' => 'सुरक्षित करें',
 'vector-action-undelete' => 'हटाना वापस लें',
 'vector-action-unprotect' => 'सुरक्षा बदलें',
-'vector-simplesearch-preference' => 'सरलीकृत खोजपट्टी सुझाव सक्षम करें। (केवल वॅक्टर त्वचा हेतु)',
 'vector-view-create' => 'बनाएँ',
 'vector-view-edit' => 'सम्पादन',
 'vector-view-history' => 'इतिहास देखें',
@@ -473,7 +474,7 @@ $1',
 'editsectionhint' => 'अनुभाग सम्पादन: $1',
 'toc' => 'विषय सूची',
 'showtoc' => 'दिखाएँ',
-'hidetoc' => 'à¤\9bिपाएँ',
+'hidetoc' => 'à¤\9bà¥\81पाएँ',
 'collapsible-collapse' => 'छोटा करें',
 'collapsible-expand' => 'विस्तार करें',
 'thisisdeleted' => '$1 देखें या वापिस लाएँ?',
@@ -642,8 +643,6 @@ $2',
 'gotaccountlink' => 'लॉग इन',
 'userlogin-resetlink' => 'अपनी प्रवेश जानकारी भूल गए हैं?',
 'userlogin-resetpassword-link' => 'अपना पासवर्ड भूल गए?',
-'helplogin-url' => 'Help:लॉगिंग इन',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|लॉग इन करने में सहायता]]',
 'userlogin-loggedin' => 'आप {{GENDER:$1|$1}} के रूप में पहले से लॉग्ड इन हैं।
 किसी अन्य सदस्य के रूप में लॉग इन करने के लिए निम्नलिखित फ़ॉर्म का प्रयोग करें।',
 'userlogin-createanother' => 'एक अन्य खाता खोलें',
@@ -739,6 +738,9 @@ $2',
 'suspicious-userlogout' => 'अपका लॉग आउट करने का अनुरोध अस्वीकृत कर दिया गया है क्योंकि ऐसा प्रतीत होता है कि यह किसी खराब ब्राउज़र या कैश करने वाली प्रॉक्सी द्वारा भेजा गया था।',
 'createacct-another-realname-tip' => 'असली नाम देना आवश्यक नहीं है।
 यदि आप प्रदान करते हैं तो इसका प्रयोग सदस्य के योगदानों के लिये उनको श्रेय (attribution) देने के लिये किया जायेगा।',
+'pt-login' => 'लॉग इन',
+'pt-createaccount' => 'खाता बनाएँ',
+'pt-userlogout' => 'लॉगआउट',
 
 # Email sending
 'php-mail-error-unknown' => 'PHP के mail() फ़ंक्शन में अज्ञात त्रुटि हुई।',
@@ -747,8 +749,7 @@ $2',
 
 # Change password dialog
 'changepassword' => 'कूटशब्द बदलें',
-'resetpass_announce' => 'आप ई-मेल से प्राप्त अस्थायी कोड से लॉग इन हुए हैं।
-लॉग इन को पूरा करने के लिये आपको यहाँ एक नया कूटशब्द देना होगा:',
+'resetpass_announce' => 'लॉग इन सम्पूर्ण करने के लिये आपको एक नया पासवर्ड देना होगा।',
 'resetpass_text' => '<!-- पाठ यहाँ लिखें -->',
 'resetpass_header' => 'खाते का कूटशब्द बदलें',
 'oldpassword' => 'पुराना कूटशब्द:',
@@ -764,8 +765,13 @@ $2',
 'resetpass-submit-cancel' => 'रद्द करें',
 'resetpass-wrong-oldpass' => 'अवैध अस्थायी या वर्तमान कूटशब्द।
 संभव है कि या तो आपने पहले ही सफलतापूर्वक अपना कूटशब्द बदल लिया हो, या आपने एक नए अस्थायी कूटशब्द का अनुरोध किया हो।',
+'resetpass-recycled' => 'रीसेट करने के लिए नये पासवर्ड में कृपया अपने वर्तमान पासवर्ड के अलावा किसी अन्य पासवर्ड का प्रयोग करें।',
+'resetpass-temp-emailed' => 'आपने एक अस्थायी ईमेल किये गये कोड के साथ लॉग इन किया।
+लॉग इन सम्पूर्ण करने के लिए आपको यहाँ एक नया पासवर्ड सेट करना होगा:',
 'resetpass-temp-password' => 'अस्थायी कूटशब्द:',
 'resetpass-abort-generic' => 'कूटशब्द में बदलाव किसी एक्सटेंशन द्वारा रोक दिया गया है।',
+'resetpass-expired' => 'आपके पासवर्ड की वैधता अवधि समाप्त हो चुकी है। कृपया लॉग इन करने के लिए एक नया पासवर्ड सेट करें।',
+'resetpass-expired-soft' => "आपका पासवर्ड की वैधता अवधि समाप्त हो गयी है, और उसे रीसेट करने की ज़रूरत है। कृपया एक नया पासवर्ड चुनें, या बाद में रीसेट करने के लिए 'रद्द करें' पर क्लिक करें।",
 
 # Special:PasswordReset
 'passwordreset' => 'कूटशब्द रीसेट',
@@ -1039,7 +1045,7 @@ $2
 'invalid-content-data' => 'अवैध डाटा सामग्री',
 'content-not-allowed-here' => '[[$2]] पृष्ठ पर "$1" सामग्री मना है।',
 'editwarning-warning' => 'इस पृष्ठ को छोड़ने पर आपके द्वारा किये गए कोई भी बदलाव गायब हो जाएँगे।
-यदि आपने लॉग इन किया हुआ है तो आप इस सूचना का दिखना अपनी वरीयताओं के "संपादन" भाग में बंद कर सकते हैं।',
+यदि आपने लॉग इन किया हुआ है तो आप इस सूचना का दिखना अपनी वरीयताओं के "{{int:prefs-editing}}" भाग में बंद कर सकते हैं।',
 'editpage-notsupportedcontentformat-title' => 'सामग्री स्वरूप समर्थित नहीं है',
 'editpage-notsupportedcontentformat-text' => '$1 सामग्री स्वरूप $2 सामग्री मॉडल द्वारा समर्थित नहीं है।',
 
@@ -1076,8 +1082,9 @@ $2
 ऐसा करने के लिये कृपया निम्नलिखित पाठ को ध्यान से देखकर बदलाव संजोयें।',
 'undo-failure' => 'इस बीच अन्य बदलाव होने के कारण यह संपादन पूर्ववत करना संभव नहीं है।',
 'undo-norev' => 'यह बदलाव वापिस नहीं कर पाये हैं क्योंकि या तो इसे पहले से पलटा दिया गया है या फिर पृष्ठ हटा दिया गया है।',
-'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|वार्ता]]) द्वारा किए बदलाव $1 को पूर्ववत किये',
-'undo-summary-username-hidden' => 'छुपाए गए सदस्य द्वारा किये संशोधन $1 को पूर्ववत किया',
+'undo-nochange' => 'ऐसा लगता है कि इस सम्पादन को पहले ही पूर्ववत कर दिया गया है।',
+'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|वार्ता]]) द्वारा किए बदलाव $1 को पूर्ववत किया',
+'undo-summary-username-hidden' => 'छुपाए गए सदस्य द्वारा किये बदलाव $1 को पूर्ववत किया',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'खाता खोल नहीं सकते',
@@ -1125,7 +1132,7 @@ $2
 'rev-deleted-comment' => '(सम्पादन सारांश हटाया)',
 'rev-deleted-user' => '(सदस्यनाम हटाया)',
 'rev-deleted-event' => '(लॉग कार्य हटाया)',
-'rev-deleted-user-contribs' => 'संशोधन उपयोगकर्ता योगदान नष्ट',
+'rev-deleted-user-contribs' => '[सदस्यनाम अथवा आइ॰पी पता छुपाया गया - सम्पादन योगदानों में से छुपाया गया]',
 'rev-deleted-text-permission' => 'यह पृष्ठ अवतरण हटाया गया है।
 इसकी अधिक जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटाने की लॉग] में पाई जा सकती है।',
 'rev-deleted-text-unhide' => 'यह पृष्ठ अवतरण हटाया गया है।
@@ -1160,8 +1167,6 @@ $2
 'revdelete-show-file-submit' => 'हाँ',
 'revdelete-selected' => "'''[[:$1]] {{PLURAL:$2|का चुना हुआ|के चुने हुए}} अवतरण:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|चुना हुआ|चुने हुए}} लॉग इवेंट:'''",
-'revdelete-text' => "'''हटाए गए अवतरण और इवेंट पृष्ठ इतिहास और लॉग में दिखेंगे, लेकिन उनकी कुछ सामग्री सार्वजनिक नहीं होगी।'''
-{{SITENAME}} के अन्य प्रबंधक छिपी हुई सामग्री को देख पाएँगे, और इसी अंतरापृष्ठ के जरिए वे इसकी पुनर्स्थापना भी कर सकते हैं, बशर्ते कि अतिरिक्त प्रतिबंध न लगाए गए हों।",
 'revdelete-confirm' => 'पुष्टि करें कि आप यह कार्य करना चाहते हैं, आप इसका परिणाम समझते हैं, और आप ये [[{{MediaWiki:Policy-url}}|नीति]] के अनुसार कर रहे हैं।',
 'revdelete-suppress-text' => 'छिपाने का प्रयोग <strong>केवल</strong> इन परिस्थितियों में होना चाहिए:
 * संभावित अपमानजनक जानकारी
@@ -1257,6 +1262,8 @@ $1",
 'showhideselectedversions' => 'चयनित अवतरण दिखाएँ/छिपाएँ',
 'editundo' => 'पूर्ववत करें',
 'diff-empty' => '(कोई अंतर नहीं)',
+'diff-multi-sameuser' => '(इसी सदस्य द्वारा {{PLURAL:$1|किया गया बीच का एक अवतरण नहीं दर्शाया गया|किये गये बीच के $1 अवतरण नहीं दर्शाए गए}})',
+'diff-multi-otherusers' => '({{PLURAL:$2|एक अन्य सदस्य|$2 सदस्यों}} द्वारा {{PLURAL:$1|किया गया बीच का एक अवतरण नहीं दर्शाया गया|किये गये बीच के $1 अवतरण नहीं दर्शाए गए}})',
 'diff-multi-manyusers' => '({{PLURAL:$2|एक योगदानकर्ता|$2 योगदानकर्ताओं}} द्वारा {{PLURAL:$1|किया बीच का एक|किए बीच के $1}} अवतरण दर्शाए नहीं हैं।)',
 'difference-missing-revision' => 'इस अंतर {{PLURAL:$2|का एक अवतरण|के $2 अवतरण}} ($1) नहीं {{PLURAL:$2|पाया गया|पाए गए}}।
 
@@ -1276,7 +1283,7 @@ $1",
 'shown-title' => 'हर पृष्ठ पर $1 {{PLURAL:$1|परिणाम}} दिखाएँ',
 'viewprevnext' => 'देखें ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''इस विकि पर \"[[:\$1]]\" नाम का एक पृष्ठ है'''",
-'searchmenu-new' => "'''इस विकि पर \"[[:\$1]]\" नाम का पृष्ठ बनाएँ!'''",
+'searchmenu-new' => '<strong>इस विकि पर "[[:$1]]" नाम का पृष्ठ बनाएँ!</strong>{{PLURAL:$2|0=|आपकी खोज से मिला पृष्ठ भी देखें।|खोज परिणाम भी देखें।}}',
 'searchprofile-articles' => 'सामग्री पृष्ठ',
 'searchprofile-project' => 'सहायता और परियोजना पृष्ठ',
 'searchprofile-images' => 'मल्टीमीडिया',
@@ -1295,7 +1302,7 @@ $1",
 'search-file-match' => '(फ़ाइल सामग्री से मेल खाता है)',
 'search-suggest' => 'कहीं आपका मतलब $1 तो नहीं था?',
 'search-interwiki-caption' => 'अन्य प्रकल्प',
-'search-interwiki-default' => '$1 à¤\95े परिणाम:',
+'search-interwiki-default' => '$1 à¤¸े परिणाम:',
 'search-interwiki-more' => '(और)',
 'search-relatedarticle' => 'सम्बंधित',
 'searcheverything-enable' => 'सभी नामस्थानों में खोजें',
@@ -1325,7 +1332,7 @@ $1",
 'prefs-skin' => 'त्वचा',
 'skin-preview' => 'झलक',
 'datedefault' => 'खा़स पसंद नहीं',
-'prefs-beta' => 'बà¥\80à¤\9fा à¤µà¤¿à¤¶à¥\87षताएँ',
+'prefs-beta' => 'बà¥\80à¤\9fा à¤¸à¥\81विधाएँ',
 'prefs-datetime' => 'दिनांक तथा समय',
 'prefs-labs' => 'लैब विशेषताएँ',
 'prefs-user-pages' => 'सदस्य पृष्ठ',
@@ -1621,19 +1628,31 @@ HTML टैग की जाँच करें।',
 'recentchanges-label-unpatrolled' => 'यह संपादन अभी जाँचा नहीं गया है',
 'recentchanges-label-plusminus' => 'पृष्ठ आकार इस बाइट संख्या से बदला',
 'recentchanges-legend-heading' => "'''कुंजी:'''",
-'recentchanges-legend-newpage' => '([[विशेष:NewPages|नए पन्नों की सूची]] को भी देखें)',
-'rcnotefrom' => "नीचे '''$2''' के बाद से ('''$1''' तक) हुए बदलाव दर्शाए गये हैं।",
+'recentchanges-legend-newpage' => '([[Special:NewPages|नए पन्नों की सूची]] को भी देखें)',
+'rcnotefrom' => 'नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) हुए बदलाव दर्शाए गये हैं।',
 'rclistfrom' => '$1 से नये बदलाव दिखाएँ',
 'rcshowhideminor' => 'छोटे बदलाव $1',
+'rcshowhideminor-show' => 'दिखाएँ',
+'rcshowhideminor-hide' => 'छुपाएँ',
 'rcshowhidebots' => 'बॉट $1',
-'rcshowhideliu' => '$1 पंजीकृत सदस्य',
+'rcshowhidebots-show' => 'दिखाएँ',
+'rcshowhidebots-hide' => 'छुपाएँ',
+'rcshowhideliu' => 'पंजीकृत सदस्य $1',
+'rcshowhideliu-show' => 'दिखाएँ',
+'rcshowhideliu-hide' => 'छुपाएँ',
 'rcshowhideanons' => 'आइ॰पी सदस्यों के बदलाव $1',
+'rcshowhideanons-show' => 'दिखाएँ',
+'rcshowhideanons-hide' => 'छुपाएँ',
 'rcshowhidepatr' => 'परीक्षित सम्पादन $1',
+'rcshowhidepatr-show' => 'दिखाएँ',
+'rcshowhidepatr-hide' => 'छुपाएँ',
 'rcshowhidemine' => 'मेरे बदलाव $1',
+'rcshowhidemine-show' => 'दिखाएँ',
+'rcshowhidemine-hide' => 'छुपाएँ',
 'rclinks' => 'पिछले $2 दिनों में हुए $1 बदलाव दिखाएँ<br />$3',
 'diff' => 'अंतर',
 'hist' => 'इतिहास',
-'hide' => 'à¤\9bिपाएँ',
+'hide' => 'à¤\9bà¥\81पाएँ',
 'show' => 'दिखाएँ',
 'minoreditletter' => 'छो',
 'newpageletter' => 'न',
@@ -1760,6 +1779,7 @@ HTML टैग की जाँच करें।',
 'php-uploaddisabledtext' => 'पी॰एच॰पी में फ़ाइल अपलोड बंद हैं।
 कृपया file_uploads जमाव की जाँच करें।',
 'uploadscripted' => 'इस फ़ाइल में एच॰टी॰एम॰एल या स्क्रिप्ट कोड है, जो वेब ब्राउज़र द्वारा गलत पढ़ा जा सकता है।',
+'uploadinvalidxml' => 'अपलोड की गई फ़ाइल में स्थित XML पार्स नहीं की जा सकी।',
 'uploadvirus' => 'इस फ़ाइल में व्हाईरस हैं! अधिक जानकारी: $1',
 'uploadjava' => 'यह फ़ाइल एक ज़िप फ़ाइल है जिसमें एक जावा .class फ़ाइल है।
 जावा फ़ाइलों को अपलोड करना वर्जित है, क्योंकि इनके कारण सुरक्षा बाधाएँ पार की जा सकती हैं।',
@@ -2133,8 +2153,18 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'protectedpages' => 'सुरक्षित पृष्ठ',
 'protectedpages-indef' => 'केवल अनिश्चितकालीन सुरक्षाएँ',
 'protectedpages-cascade' => 'केवल सोपानी सुरक्षा',
+'protectedpages-noredirect' => 'पुनर्निर्देश छुपाएँ',
 'protectedpagesempty' => 'इस समय इन नियमों द्वारा कोई पृष्ठ सुरक्षित नहीं हैं।',
+'protectedpages-timestamp' => 'समय मुहर',
+'protectedpages-page' => 'पृष्ठ',
+'protectedpages-expiry' => 'समाप्ति',
+'protectedpages-performer' => 'सुरक्षित करने वाला सदस्य',
+'protectedpages-params' => 'सुरक्षा प्राचल',
+'protectedpages-reason' => 'कारण',
+'protectedpages-unknown-timestamp' => 'अज्ञात',
+'protectedpages-unknown-performer' => 'अज्ञात सदस्य',
 'protectedtitles' => 'सुरक्षित शीर्षक',
+'protectedtitles-summary' => 'यह पृष्ठ उन पृष्ठ शीर्षकों की सूची देता है जिन्हें अभी बनाने से सुरक्षित किया गया है। सुरक्षित मौजूदा पृष्ठों की सूची देखने के लिए [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] देखें।',
 'protectedtitlesempty' => 'इन नियमों द्वारा कोई भी शीर्षक सुरक्षित नहीं हैं।',
 'listusers' => 'सदस्यसूची',
 'listusers-editsonly' => 'केवल संपादन कर चुके सदस्य दिखाएँ',
@@ -2320,7 +2350,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'watchmethod-list' => 'ध्यानसूची में दिये गये पृष्ठों में हाल में हुए बदलाव देख रहे हैं',
 'watchlistcontains' => 'आपकी ध्यानसूची में $1 {{PLURAL:$1|पृष्ठ}} हैं।',
 'iteminvalidname' => "'$1' के साथ समस्या, अवैध नाम...",
-'wlnote2' => '$2,$3 तक आखरी {{PLURAL:$1|घंटे|<strong>$1</strong>घंटों}} में बदलाव निम्नलिखित हैं।',
+'wlnote2' => '$2,$3 तक आखरी {{PLURAL:$1|घंटे|<strong>$1</strong> घंटों}} में बदलाव निम्नलिखित हैं।',
 'wlshowlast' => 'पिछले $1 घंटे $2 दिन $3 देखें',
 'watchlist-options' => 'ध्यानसूची विकल्प',
 
@@ -2355,7 +2385,7 @@ $PAGEINTRO $NEWPAGE
 ई-मेल: $PAGEEDITOR_EMAIL
 विकि: $PAGEEDITOR_WIKI
 
-जब तक आप इस पृष्ठ पर फिर से नहीं जाते, तब तक और बदलाव होने पर भी आपको फिर से सूचना नहीं भेजी जाएगी।
+à¤\9cब à¤¤à¤\95 à¤\86प à¤\87स à¤ªà¥\83षà¥\8dठ à¤ªà¤° à¤²à¥\89à¤\97िन à¤\95र à¤\95à¥\87 à¤«à¤¿à¤° à¤¸à¥\87 à¤¨à¤¹à¥\80à¤\82 à¤\9cातà¥\87, à¤¤à¤¬ à¤¤à¤\95 à¤\94र à¤¬à¤¦à¤²à¤¾à¤µ à¤¹à¥\8bनà¥\87 à¤ªà¤° à¤­à¥\80 à¤\86पà¤\95à¥\8b à¤«à¤¿à¤° à¤¸à¥\87 à¤¸à¥\82à¤\9aना à¤¨à¤¹à¥\80à¤\82 à¤­à¥\87à¤\9cà¥\80 à¤\9cाà¤\8fà¤\97à¥\80।
 आप चाहें तो अपनी ध्यानसूची में मौजूद सभी पन्नों के लिए सूचना चिन्ह को भी बदल सकते हैं।
 
 आपकी सहायिका, {{SITENAME}} की सूचक प्रणाली
@@ -2410,6 +2440,7 @@ $UNWATCHURL
 'delete-warning-toobig' => 'इस पृष्ठ का संपादन इतिहास $1 से अधिक {{PLURAL:$1|अवतरण}} होने की वजह से बहुत बड़ा है।
 इसे हटाने से {{SITENAME}} के डाटाबेस की गतिविधियों में व्यवधान आ सकता है;
 कृपया सोच समझ कर आगे बढ़ें।',
+'deleting-backlinks-warning' => "'''चेतावनी:''' जो पृष्ठ आप हटाने जा रहे हैं उससे [[विशेष:कड़ियाँ|अन्य पृष्ठ]] जुड़ते हैं अथवा उसे ट्रांसक्लूड करते हैं।",
 
 # Rollback
 'rollback' => 'संपादन वापिस लें',
@@ -2449,6 +2480,7 @@ $2 द्वारा संपादित अन्तिम अवतरण 
 'prot_1movedto2' => '[[$1]] का नाम बदलकर [[$2]] कर दिया गया है',
 'protect-badnamespace-title' => 'सुरक्षाहीन नामस्थान',
 'protect-badnamespace-text' => 'इस नामस्थान में पृष्ठ सुरक्षित नहीं किये जा सकते हैं।',
+'protect-norestrictiontypes-text' => 'यह पृष्ठ सुरक्षित नहीं किया जा सकता क्योंकि कोई सुरक्षा प्रकार उपलब्ध नहीं हैं।',
 'protect-legend' => 'सुरक्षा निर्धारित करें',
 'protectcomment' => 'कारण:',
 'protectexpiry' => 'समाप्ति:',
@@ -2665,7 +2697,7 @@ $1',
 'blocklist-tempblocks' => 'अस्थाई अवरोध छिपाएं',
 'blocklist-addressblocks' => 'एकल आईपी अवरोध छिपाएं',
 'blocklist-rangeblocks' => 'श्रेणी ब्लॉक छुपाएँ',
-'blocklist-timestamp' => 'à¤\9fाà¤\87मसà¥\8dà¤\9fà¥\88मà¥\8dप',
+'blocklist-timestamp' => 'समय à¤®à¥\81हर',
 'blocklist-target' => 'लक्ष्य',
 'blocklist-expiry' => 'अवसान',
 'blocklist-by' => 'प्रशासक अवरुद्ध',
@@ -2688,8 +2720,8 @@ $1',
 'change-blocklink' => 'विभाग बदलें',
 'contribslink' => 'योगदान',
 'emaillink' => 'ई-मेल भेजें',
-'autoblocker' => 'आपका IP पता स्वत: बाध्य है, जो की हाल ही में "[[User:$1|$1]]" द्वारा प्रयोग किया गया है।
-$1 à¤\95à¥\8b à¤¬à¤¾à¤§à¥\8dय करने का कारण है: "$2"',
+'autoblocker' => 'आपका आइ॰पी पता स्वतः अवरुद्ध है, चूँकि इसे हाल ही में "[[User:$1|$1]]" द्वारा प्रयोग किया गया है।
+$1 à¤\95à¥\8b à¤\85वरà¥\8bधित करने का कारण है: "$2"',
 'blocklogpage' => 'ब्लॉक सूची',
 'blocklog-showlog' => 'इस प्रयोक्ता को पहले भी अवरोधित किया जा चुका है। 
 सन्दर्भ के लिए अवरोधन अभिलेख नीचे दिया गया है:',
@@ -2711,7 +2743,7 @@ $1 को बाध्य करने का कारण है: "$2"',
 'range_block_disabled' => 'प्रबंधकोंको अब रेंज ब्लॉक करने की अनुमति नहीं हैं।',
 'ipb_expiry_invalid' => 'अवैध समाप्ति कालावधी।',
 'ipb_expiry_temp' => 'छुपायें हुए सदस्यनाम ब्लॉक्स हमेशा के लिये होने चाहिये।',
-'ipb_hide_invalid' => 'à¤\87स à¤\96ातà¥\87 à¤\95à¥\8b à¤\9bिपा à¤¨à¤¹à¥\80à¤\82 à¤ªà¤¾à¤\8f; à¤¸à¤\82भव à¤¹à¥\88 à¤\95ि à¤\87समà¥\87à¤\82 à¤¬à¤¹à¥\81त à¤\85धिà¤\95 à¤¸à¤\82पादन à¤¹à¥\81à¤\8f à¤¹à¥\8bà¤\82।',
+'ipb_hide_invalid' => 'à¤\87स à¤\96ातà¥\87 à¤\95à¥\8b à¤\9bिपा à¤¨à¤¹à¥\80à¤\82 à¤ªà¤¾à¤\8f; à¤\87स à¤¸à¥\87 {{PLURAL:$1|à¤\8fà¤\95 à¤¸à¤®à¥\8dपादन à¤\95िया à¤\97या à¤¹à¥\88|$1 à¤¸à¤®à¥\8dपादन à¤\95ियà¥\87 à¤\97यà¥\87 à¤¹à¥\88à¤\82}}।',
 'ipb_already_blocked' => '"$1" को पहलेसे ब्लॉक हैं',
 'ipb-needreblock' => '$1 पहले ही अवरोधित है।
 क्या आप अवरोध के जमाव बदलना चाहेंगे?',
@@ -2727,7 +2759,8 @@ $1 को बाध्य करने का कारण है: "$2"',
 कृपया आप अपने इंटरनेट सेवा प्रदान करने वाले से या तकनीकी सहायक से सम्पर्क करें अथवा उन्हें इस भयावह सुरक्षा समस्या के बारे में सूचित करें।',
 'sorbsreason' => '{{SITENAME}} द्वारा इस्तेमालमें लाये जाने वाले DNSBL में आपके आईपी एड्रेसको ओपन प्रॉक्सीमें दर्शाया गया हैं।',
 'sorbs_create_account_reason' => '{{SITENAME}} के DNSBL ने आपका आईपी एड्रेस ओपन प्रोक्सी करके सूचित किया हैं। आप खाता खोल नहीं सकतें।',
-'cant-see-hidden-user' => 'कठबोली छुपा उपयोगकर्ता देखना',
+'cant-see-hidden-user' => 'जिस सदस्य को आप अवरोधित करने की कोशिश कर रहे हैं उसे पहले ही अवरोधित कर के छुपाया जा चुका है।
+चूँकि आपके पास hideuser अधिकार नहीं है, आप इस सदस्य का अवरोधन ना देख सकते हैं और ना ही सम्पादित कर सकते हैं।',
 'ipbblocked' => 'आप अन्य प्रयोक्ताओं को अवरोधित या अनवरोधित नहीं कर सकते, क्योंकि आप स्वयं अवरोधित हैं',
 'ipbnounblockself' => 'आपको स्वयं को अनवरोधित करने की अनुमति नहीं है',
 
@@ -2791,7 +2824,7 @@ $1 को बाध्य करने का कारण है: "$2"',
 
 इन मामलोंमे आपको स्वयं यह पृष्ठ जोडने पड़ सकते है ।",
 'movearticle' => 'पृष्ठ का नाम बदलें',
-'moveuserpage-warning' => 'चाल उपयोगकर्ता चेतावनी पृष्ठ',
+'moveuserpage-warning' => '<strong>चेतावनी:</strong> आप एक सदस्य पृष्ठ स्थानांतरित करने जा रहे हैं। कृपया ध्यान दें कि केवल पृष्ठ का नाम बदला जाएगा और सदस्यनाम <em>नहीं</em> बदलेगा।',
 'movenologintext' => 'लेख स्थानान्तरित करने के लिये आपका [[Special:UserLogin|लॉग इन]] किया होना आवश्यक हैं।',
 'movenotallowed' => 'आपको पृष्ठ स्थानांतरित करने की अनुमति नहीं है।',
 'movenotallowedfile' => 'आपको फ़ाइलें स्थानांतरित करने की अनुमति नहीं है।',
@@ -2845,7 +2878,8 @@ $1 को बाध्य करने का कारण है: "$2"',
 नवीनतम लॉग प्रविष्टि संदर्भ के लिये नीचे दी है:",
 'move-over-sharedrepo' => '== फ़ाइल मौजूद है ==
 [[:$1]] एक साझे भंडार पर मौजूद है। इस नाम पर स्थानांतरण से नई फ़ाइल साझा फ़ाइल को ओवरराइड करेगी।',
-'file-exists-sharedrepo' => 'फ़ाइल रेपो साझा मौजूद',
+'file-exists-sharedrepo' => 'चयनित फ़ाइल नाम पहले ही एक साझा भण्डार में प्रयुक्त है।
+कृपया अन्य नाम चुनें।',
 
 # Export
 'export' => 'पन्नों का निर्यात करें',
@@ -2935,7 +2969,7 @@ $1 को बाध्य करने का कारण है: "$2"',
 'importuploaderrortemp' => 'आयात फ़ाईल अपलोड हुई नहीं। एक अस्थायी डाइरेक्टरी नहीं मिल रहीं।',
 'import-parse-failure' => 'XML आयात पार्स पूरा नहीं हुआ',
 'import-noarticle' => 'आयात करने के लिये पृष्ठ नहीं!',
-'import-nonewrevisions' => 'सभà¥\80 à¤\85वतरण à¤ªà¤¹à¤²à¥\87 à¤¹à¥\80 à¤\86यात à¤\95र à¤¦à¤¿à¤¯à¥\87 à¤\97यà¥\87 à¤¹à¥\88à¤\82।',
+'import-nonewrevisions' => 'à¤\95à¥\8bà¤\88 à¤\85वतरण à¤\86यात à¤¨à¤¹à¥\80à¤\82 à¤\95ियà¥\87 à¤\97यà¥\87 (या à¤¤à¥\8b à¤¸à¤­à¥\80 à¤\85वतरण à¤ªà¤¹à¤²à¥\87 à¤¸à¥\87 à¤®à¥\8cà¤\9cà¥\82द à¤¹à¥\88à¤\82, à¤¯à¤¾ à¤¤à¥\8dरà¥\81à¤\9fियà¥\8bà¤\82 à¤\95à¥\87 à¤\95ारण à¤\9bà¥\8bड़à¥\87 à¤\97यà¥\87)।',
 'xml-error-string' => '$1 पंक्ति $2 में, कॉलम $3 (बाईट $4): $5',
 'import-upload' => 'XML डाटा अपलोड करें',
 'import-token-mismatch' => 'सत्र सामग्री खो गई है। 
@@ -3070,8 +3104,8 @@ $1 को बाध्य करने का कारण है: "$2"',
 'spam_reverting' => '$1 को कड़ी ना होने वाले पुराने अवतरण को पुनर्स्थापित कर रहें हैं',
 'spam_blanking' => 'सभी अवतरणोंमें $1 को कड़ियां हैं, पूरा पाठ निकाल रहें हैं',
 'spam_deleting' => 'सभी अवतरणों में $1 की कड़ी थी, हटाया जा रहा है',
-'simpleantispam-label' => "ऍन्टी-स्पैम जाँच.
-इसे भरें '''नहीं'''!",
+'simpleantispam-label' => 'ऐन्टी-स्पैम जाँच।
+इसे <strong>नहीं</strong> भरें!',
 
 # Info page
 'pageinfo-title' => '"$1" के लिये जानकारी',
@@ -3151,7 +3185,8 @@ $1',
 'nextdiff' => 'ताज़ा संपादन →',
 
 # Media information
-'mediawarning' => 'चेतावनी मीडिया',
+'mediawarning' => '<strong>चेतावनी:</strong> इस फ़ाइल प्रकार में हानिकारक कोड हो सकता है।
+संभव है कि इसे चलाने से आपका सिस्टम हैक हो जाये।',
 'imagemaxsize' => "छवि आकार सीमा:<br />''(संचिका वर्णन पन्नों के लिए)''",
 'thumbsize' => 'अंगूठानख आकार:',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|पृष्ठ|पृष्ठ}}',
@@ -3727,6 +3762,9 @@ $5
 'imgmultigo' => 'जायें!',
 'imgmultigoto' => '$1 पृष्ठ पर जायें',
 
+# Language selector for translatable SVGs
+'img-lang-default' => '(डिफ़ॉल्ट भाषा)',
+
 # Table pager
 'ascending_abbrev' => 'asc',
 'descending_abbrev' => 'ज़ानकारी',
@@ -3854,16 +3892,29 @@ $5
 'version-parser-function-hooks' => 'पार्सर कार्य हूक',
 'version-hook-name' => 'हूक नाम',
 'version-hook-subscribedby' => 'ने सदस्यत्व लिया',
-'version-version' => '(अवतरण $1)',
-'version-license' => 'अनुज्ञापत्र',
+'version-version' => '($1)',
+'version-license' => 'मीडियाविकि अनुज्ञापत्र',
+'version-ext-license' => 'लाइसेंस',
+'version-ext-colheader-name' => 'एक्सटेंशन',
+'version-ext-colheader-version' => 'संस्करण',
+'version-ext-colheader-license' => 'लाइसेंस',
+'version-ext-colheader-description' => 'विवरण',
+'version-ext-colheader-credits' => 'लेखक',
+'version-license-title' => '$1 के लिए लाइसेंस',
+'version-license-not-found' => 'इस एक्सटेंशन के लिए कोई विस्तृत लाइसेंस जानकारी नहीं पायी गयी।',
+'version-credits-title' => '$1 के लिए श्रेय',
+'version-credits-not-found' => 'इस एक्सटेंशन के लिए कोई विस्तृत श्रेय जानकारी नहीं पायी गयी।',
 'version-poweredby-credits' => "यह विकि  '''[https://www.mediawiki.org/ MediaWiki]''' द्वारा संचालित है, कॉपीराइट © 2001 - $1  $2 ।",
 'version-poweredby-others' => 'अन्य',
+'version-poweredby-translators' => 'translatewiki.net अनुवादक',
 'version-software' => 'इन्स्टॉल की हुई प्रणाली',
 'version-software-product' => 'प्रोडक्ट',
 'version-software-version' => 'अवतरण',
 'version-entrypoints-header-url' => 'यू॰आर॰एल',
 
 # Special:Redirect
+'redirect-submit' => 'जायें',
+'redirect-lookup' => 'ढूँढें:',
 'redirect-user' => 'सदस्य आई॰डी',
 'redirect-revision' => 'पृष्ठ अवतरण संख्या',
 'redirect-file' => 'फ़ाइल नाम',
@@ -3920,7 +3971,10 @@ $5
 'tags-tag' => 'चिप्पी का नाम',
 'tags-display-header' => 'बदलाव सूचियों में प्रदर्शन',
 'tags-description-header' => 'अर्थ का पूरा वर्णन',
+'tags-active-header' => 'सक्रिय?',
 'tags-hitcount-header' => 'चिप्पी वाले बदलाव',
+'tags-active-yes' => 'हाँ',
+'tags-active-no' => 'नहीं',
 'tags-edit' => 'सम्पादन',
 'tags-hitcount' => '$1 {{PLURAL:$1|बदलाव|बदलाव}}',
 
@@ -3940,6 +3994,7 @@ $5
 'dberr-problems' => 'क्षमा करें! इस जालस्थल को कुछ तकनीकी परेशानियों का सामना करना पड़ रहा है।',
 'dberr-again' => 'कुछ मिनट रुकने के बाद फिर से चढ़ाएँ।',
 'dberr-info' => '(आँकड़ाकोष सेवक से संपर्क नहीं हो पा रहा:$1)',
+'dberr-info-hidden' => '(डाटाबेस सर्वर से संपर्क नहीं किया जा सका)',
 'dberr-usegoogle' => 'इस बीच आप गूगल से खोज करने की कोशिश कर सकते हैं।',
 'dberr-outofdate' => 'ध्यान दे, हो सकता है कि हमारी सामग्री से संबंधित उनकी सूची बासी हो।',
 'dberr-cachederror' => 'यह अनुरोधित पन्ने की संचित प्रति है, हो सकता है यह ताज़ी न हो।',
@@ -4071,6 +4126,16 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|शताब्दी}}',
 'duration-millennia' => '$1 {{PLURAL:$1|सहस्राब्दी}}',
 
+# Limit report
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|सॅकेंड}}',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|सॅकेंड}}',
+'limitreport-postexpandincludesize' => 'विस्तार उपरांत विकिपाठ आकार',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|बाइट}}',
+'limitreport-templateargumentsize' => 'साँचा प्राचल आकार',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|बाइट}}',
+'limitreport-expansiondepth' => 'उच्चतम विस्तार गहराई',
+'limitreport-expensivefunctioncount' => 'महंगे पार्सर फंक्शनों की संख्या',
+
 # Special:ExpandTemplates
 'expandtemplates' => 'साँचा विस्तार',
 'expand_templates_intro' => 'यह विशेष पृष्ठ पाठ इनपुट लेता है और सभी साँचों को विस्तृत करता है।
@@ -4087,6 +4152,4 @@ $5
 'expand_templates_generate_xml' => 'XML का पार्स (parse) वृक्ष दर्शायें',
 'expand_templates_preview' => 'झलक',
 
-# Unknown messages
-'uploadinvalidxml' => 'अपलोड की गई फ़ाइल में स्थित XML पार्स नहीं की जा सकी।',
 );
index 860a64f..ae91e74 100644 (file)
@@ -198,7 +198,6 @@ $messages = array(
 'vector-action-protect' => 'Bachao',
 'vector-action-undelete' => 'Pahile jaise karo',
 'vector-action-unprotect' => 'Surakchha ke badlo',
-'vector-simplesearch-preference' => 'Aur achchhaa se khoje ke salah do (Khaali vector skin)',
 'vector-view-create' => 'Banao',
 'vector-view-edit' => 'Badlo',
 'vector-view-history' => 'Itihaas dekho',
@@ -480,8 +479,6 @@ Aapan [[Special:Preferences|{{SITENAME}} pasand]]  ke badle nai bhulna.',
 'gotaccountlink' => 'Log in',
 'userlogin-resetlink' => 'Ka aap aapan login kare waala jaankari ke bhulae gaya hae?',
 'userlogin-resetpassword-link' => 'Aapan password ke reset karo',
-'helplogin-url' => 'Help:Logging in',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Aap ke login khatir madat]]',
 'createacct-join' => 'Aapan jankari niche likho',
 'createacct-another-join' => 'Account ke baare me jaankari niche likho',
 'createacct-emailrequired' => 'Email address',
@@ -983,8 +980,6 @@ Aap ii diff ke dekhe saktaa hae: iske baare me aur jaan kaari [{{fullurl:{{#Spec
 'revdelete-show-file-submit' => 'Haan',
 'revdelete-selected' => "'''{{PLURAL:$2|Selected badlao|Selected badlao}} of [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Chuna gais log event|Chuna gais log events}}:'''",
-'revdelete-text' => "'''Mitawa gae badlao aur ghatna panna ke itihaas me dekhai, lekin content ke kuch part janta nai access kare saki.'''
-Duusra admins {{SITENAME}} me, lukawa gais content ke khole sake aur iske mitae bhi sake hai interface use kar ke, jab tak ki aur rukawat nai lagawa jaae.",
 'revdelete-confirm' => 'Meharbani kar ke aap ii confirm karo ki aap ii kare mangta hae, aap iske asar ke samajhta hae, aur iske aap [[{{MediaWiki:Policy-url}}|the policy]] ke anusar karta hae.',
 'revdelete-suppress-text' => "Suppression ke '''khaali''' ii chij ke khatir kaam me lawa jaae sake hai:
 * Aapan baare me jaankari thik nai hai
index 6368b57..05318ec 100644 (file)
@@ -168,7 +168,6 @@ $messages = array(
 'vector-action-protect' => 'Pangapinan',
 'vector-action-undelete' => 'Dulaon ang pagpanas',
 'vector-action-unprotect' => 'Ilisan ang pagpangapin',
-'vector-simplesearch-preference' => 'Sugdan ang mas ginpamaayo nga suhestiyon sa pagpangita (Para sa vector nga panit lamang)',
 'vector-view-create' => 'Himuon',
 'vector-view-edit' => 'Ilisan',
 'vector-view-history' => 'Lantawon ang kasaysayan',
@@ -908,8 +907,6 @@ ang ini nga buluhaton wala, ukon gahimakas ka nga taguon ang karon nga pagbag-o.
 'revdelete-show-file-submit' => 'Huo',
 'revdelete-selected' => "'''{{PLURAL:$2|Ginpili nga pagbag-o|Ginpili nga mga pagbag-o}} ni [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Ginpili nga hinatabo sa log|Ginpili nga mga hinatabo sa log}}:'''",
-'revdelete-text' => "'''Ang mga ginpanas nga pagbag-o kag hinatabo magapakita sa gihapon sa kasaysayan sang panid kag mga log, apang ang mga parte sang ila kaundan indi na mahimo nga masudlan sang publiko.'''
-Ang iban nga administrador sa {{SITENAME}} mahimo sa gihapon nga makasulod sa nakatago nga kaundan kag mapaiway nga mapanas ini liwat sa amo sa gihapon nga interface, luwas na lang kon may dugang pa nga pagpangbawal ang ibutang.",
 'revdelete-confirm' => 'Palihog konpermar nga luyag mo ini himuon, nga imo naintiendihan ang mga konsekwensya, kag ginahimo mo ini suno sa [[{{MediaWiki:Policy-url}}|polisiya]].',
 'revdelete-suppress-text' => "Ang pagpahugot nagakadapat '''lamang''' nga pagagamiton sa masunod nga kaso:
 * Nagapang-guba sang dignindad nga impormasyon
index 2dee074..97e151b 100644 (file)
@@ -20,6 +20,7 @@
  * @author Geitost
  * @author Herr Mlinka
  * @author Kaganer
+ * @author Kolega2357
  * @author Luka Krstulovic
  * @author MaGa
  * @author MayaSimFan
@@ -479,7 +480,6 @@ $messages = array(
 'vector-action-protect' => 'Zaštiti',
 'vector-action-undelete' => 'Vrati',
 'vector-action-unprotect' => 'Promijeni zaštitu',
-'vector-simplesearch-preference' => 'Omogući traku za pretraživanje (samo izgled Vector)',
 'vector-view-create' => 'Započni',
 'vector-view-edit' => 'Uredi',
 'vector-view-history' => 'Vidi stare izmjene',
@@ -500,7 +500,7 @@ $messages = array(
 'searcharticle' => 'Kreni',
 'history' => 'Stare izmjene',
 'history_short' => 'Stare izmjene',
-'updatedmarker' => 'obnovljeno od zadnjeg posjeta',
+'updatedmarker' => 'obnovljeno od posljednjeg posjeta',
 'printableversion' => 'Inačica za ispis',
 'permalink' => 'Trajna poveznica',
 'print' => 'Ispiši',
@@ -540,7 +540,7 @@ $messages = array(
 'otherlanguages' => 'Drugi jezici',
 'redirectedfrom' => '(Preusmjereno s $1)',
 'redirectpagesub' => 'Preusmjeravanje',
-'lastmodifiedat' => 'Datum zadnje promjene na ovoj stranici: $2, $1',
+'lastmodifiedat' => 'Vrijeme i datum posljednje promjene na ovoj stranici: $2, $1',
 'viewcount' => 'Ova stranica je pogledana {{PLURAL:$1|$1 put|$1 puta}}.',
 'protectedpage' => 'Zaštićena stranica',
 'jumpto' => 'Skoči na:',
@@ -587,7 +587,7 @@ $1',
 'youhavenewmessagesfromusers' => 'Imate $1 {{PLURAL:$3||od $3 suradnika|od $3 suradnika}} ($2).',
 'youhavenewmessagesmanyusers' => 'Imate $1 od više suradnika ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|novu poruku|$1 nove poruke|$1 novih poruka}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|zadnje uređivanje|zadnja $1 uređivanja|zadnjih $1 uređivanja}} na stranici za razgovor',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|posljednje uređivanje|posljednja $1 uređivanja|posljednjih $1 uređivanja}} na stranici za razgovor',
 'youhavenewmessagesmulti' => 'Imate nove poruke na $1',
 'editsection' => 'uredi',
 'editold' => 'uredi',
@@ -675,7 +675,9 @@ Nema obrazloženja ili poruke o pogrješci.',
 'badtitle' => 'Loš naslov',
 'badtitletext' => 'Navedeni naslov stranice nepravilan ili loše formirana interwiki poveznica.',
 'perfcached' => 'Sljedeći podaci su iz međuspremnika i možda nisu najsvježiji. Međuspremnik sadrži $1 {{PLURAL:$1|rezultat|rezultata}} pretraživanja.',
-'perfcachedts' => 'Sljedeći podaci su iz međuspremnika i zadnji puta su ažurirani u $1. Međuspremnik sadrži $4 {{PLURAL:$4|rezultat|rezultata}} pretraživanja.',
+'perfcachedts' => 'Sljedeći podaci su iz međuspremnika i posljednji puta su ažurirani u $1. Međuspremnik sadrži $4 {{PLURAL:$4|rezultat|rezultata}} pretraživanja.
+
+Više o ovoj [[Wikipedija:Posebne stranice|posebnoj stranici]] na [[Razgovor Wikipedija:Special:{{PAGENAME}}]].',
 'querypage-no-updates' => 'Osvježavanje ove stranice je trenutačno onemogućeno. Nove promjene neće biti vidljive.',
 'viewsource' => 'Vidi izvornik',
 'viewsource-title' => 'Vidi kôd stranice $1',
@@ -752,7 +754,6 @@ Ne zaboravite prilagoditi Vaše [[Special:Preferences|{{SITENAME}} postavke]].',
 'gotaccountlink' => 'Prijavite se',
 'userlogin-resetlink' => 'Zaboravili ste detalje vaše prijave?',
 'userlogin-resetpassword-link' => 'Zaboravili ste zaporku?',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoć pri prijavi]]',
 'userlogin-loggedin' => 'Već ste prijavljeni kao {{GENDER:$1|$1}}.
 Rabite donji obrazac da biste se prijavili kao drugi suradnik.',
 'userlogin-createanother' => 'Stvori još jedan račun',
@@ -815,7 +816,7 @@ koristiti staru lozinku.',
 'blocked-mailpassword' => 'Vašoj IP adresi je blokirano uređivanje stranica, a da bi se spriječila nedopuštena radnja, mogućnost zahtijevanja nove lozinke je također onemogućena.',
 'eauthentsent' => 'Na navedenu adresu poslana je e-poruka s potvrdom.
 Prije nego što pošaljemo daljnje poruke, molimo Vas otvorite e-poruku i slijedite u njemu sadržana uputstva kako biste potvrdili da je adresa e-pošte zaista Vaša.',
-'throttled-mailpassword' => 'Već Vam je poslan e-mail za promjenu zaporke, u {{PLURAL:$1|zadnjih sat vremena|zadnja $1 sata|zadnjih $1 sati}}.
+'throttled-mailpassword' => 'Već Vam je poslan e-mail za promjenu zaporke, u {{PLURAL:$1|posljednjih sat vremena|posljednja $1 sata|posljednjih $1 sati}}.
 Da bi spriječili zloupotrebu, moguće je poslati samo jedan e-mail za promjenu zaporke {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.',
 'mailerror' => 'Pogrješka pri slanju e-pošte: $1',
 'acct_creation_throttle_hit' => 'Posjetitelji ovog wikija koji rabe Vašu IP adresu napravili su {{PLURAL:$1|1 račun|$1 računa}} u posljednjem danu, što je najveći dopušteni broj u tom vremenskom razdoblju.
@@ -843,6 +844,9 @@ Molimo Vas pričekajte $1 prije nego što pokušate ponovno.',
 'suspicious-userlogout' => 'Vaš zahtjev za odjavu je odbijen jer to izgleda kao da je poslan preko pokvarenog preglednika ili keširanog posrednika (proxyja).',
 'createacct-another-realname-tip' => 'Pravo ime nije obvezno. 
 Ako ga navedete, bit će korišteno za pripisivanje Vaših doprinosa.',
+'pt-login' => 'Prijavi se',
+'pt-createaccount' => 'Otvori novi suradnički račun',
+'pt-userlogout' => 'odjavi se',
 
 # Email sending
 'php-mail-error-unknown' => 'Nepoznata pogrješka u funkciji PHP-poruke()',
@@ -1144,7 +1148,7 @@ Neki predlošci neće biti uključeni.',
 'converter-manual-rule-error' => 'Pronađena je pogrješka u pravilu ručnog prijevoda',
 
 # "Undo" feature
-'undo-success' => 'Izmjena je uklonjena (tekst u okviru ispod ne sadrži zadnju izmjenu). Molim sačuvajte stranicu (provjerite sažetak).',
+'undo-success' => 'Izmjena je uklonjena (tekst u okviru ispod ne sadrži posljednju izmjenu). Molim sačuvajte stranicu (provjerite sažetak).',
 'undo-failure' => 'Ova izmjena ne može biti uklonjena zbog postojanja međuinačica.',
 'undo-norev' => 'Izmjena nije mogla biti uklonjena jer ne postoji ili je obrisana.',
 'undo-summary' => 'Uklanjanje izmjene $1 što ju je unio/unijela [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]])',
@@ -1227,8 +1231,6 @@ Možete ju pregledati; više podataka možete vidjeti u [{{fullurl:{{#Special:Lo
 'revdelete-show-file-submit' => 'Da',
 'revdelete-selected' => "'''{{PLURAL:$2|Odabrana izmjena|Odabrane izmjene|Odabrane izmjene}} stranice [[$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Odabrani zapis u evidenciji|Odabrani zapisi u evidenciji}}:'''",
-'revdelete-text' => "'''Obrisane će se izmjene i dalje nalaziti u javnom popisu izmjena, ali njihov sadržaj neće biti dostupan javnosti.'''
-Drugi administratori ovoga projekta ({{SITENAME}}) moći će i dalje pristupiti skrivenom sadržaju i vratiti ga u javni pristup putem ovog sučelja, osim ako operateri na projektu nisu postavili dodatna ograničenja.",
 'revdelete-confirm' => 'Molimo potvrdite da namjeravate ovo učiniti, da razumijete posljedice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].',
 'revdelete-suppress-text' => "Sklanjanje uređivanja treba raditi '''iznimno''' u slijedećih par slučajeva:
 * Privatne informacije neprilične javnom mediju tipa
@@ -1321,6 +1323,8 @@ Primijetite da uporaba navigacijskih poveznica resetira Vaše izbore u stupcu.',
 'showhideselectedversions' => 'Otkrij/sakrij odabrane izmjene',
 'editundo' => 'ukloni ovu izmjenu',
 'diff-empty' => 'Nema razlike inačica',
+'diff-multi-sameuser' => '{{PLURAL:$1|Nije prikazana jedna međuinačica|Nisu prikazane $1 međuinačice|Nije prikazano $1 međuinačica}} istog suradnika',
+'diff-multi-otherusers' => '({{PLURAL:$1|Nije prikazana jedna međuinačica|Nisu prikazane $1 međuinačice|Nije prikazano $1 međuinačica}} {{PLURAL:$2|jednog|$2}} suradnika)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Nije prikazana jedna međuinačica|Nisu prikazane $1 međuinačice|Nije prikazano $1 međuinačica}} više od {{PLURAL:$2|jednog|$2|$2}} suradnika)',
 'difference-missing-revision' => '{{PLURAL:$2|Uređivanje|$2 uređivanja}} sljedeće šifre ($1) ne {{PLURAL:$2|postoji|postoje}}.
 
@@ -1366,6 +1370,7 @@ Više informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{F
 'searchrelated' => 'povezano',
 'searchall' => 'sve',
 'showingresults' => "Dolje {{PLURAL:$1|je prikazan '''$1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}}, počevši od '''$2'''.",
+'showingresultsinrange' => "Dolje {{PLURAL:$1|je prikazan '''$1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}}, u rasponu od '''$2''' do '''$3'''.",
 'showingresultsnum' => "Dolje {{PLURAL:$3|je prikazan '''$3''' rezultat|su prikazana '''$3''' rezultata|je prikazano '''$3''' rezultata}}, počevši s brojem '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Rezultat '''$1''' od '''$3'''|Rezultati '''$1 - $2''' od '''$3'''}} za '''$4'''",
 'search-nonefound' => 'Ne postoje rezultati koji se podudaraju s upitom.',
@@ -1462,7 +1467,7 @@ Ne smije biti duži od $1 {{PLURAL:$1|znaka|znaka|znakova}}.',
 'gender-unknown' => 'Neodređeni',
 'gender-male' => 'Muški',
 'gender-female' => 'Ženski',
-'prefs-help-gender' => 'Mogućnost softvera da ispravno oslovljava razlikujući spol. Ovaj podatak bit će javan.',
+'prefs-help-gender' => 'Mogućnost softvera da ispravno oslovljava razlikujući spol. Ovaj će podatak biti javan.',
 'email' => 'Adresa elektroničke pošte *',
 'prefs-help-realname' => 'Pravo ime nije obvezno. Ako ga navedete, bit će korišteno za pravnu atribuciju Vaših doprinosa.',
 'prefs-help-email' => 'E-mail adresa nije obvezna, ali je potrebna za obnovu lozinke u slučaju da ju zaboravite.',
@@ -1585,7 +1590,7 @@ Ne smije biti duži od $1 {{PLURAL:$1|znaka|znaka|znakova}}.',
 'right-viewmyprivateinfo' => 'Vidite svoje privatne podatke (npr. adresu e-pošte, stvarno ime)',
 'right-editmyprivateinfo' => 'Uredite svoje privatne podatke (npr. adresa e-pošte, stvarno ime)',
 'right-editmyoptions' => 'Uredite svoje postavke',
-'right-rollback' => 'Brzo uklanjanje izmjena zadnjeg suradnika na određenoj stranici',
+'right-rollback' => 'Brzo uklanjanje izmjena posljednjeg suradnika na određenoj stranici',
 'right-markbotedits' => 'Označavanje uklonjenih izmjena kao izmjenu bota',
 'right-noratelimit' => 'Bez vremenskog ograničenja uređivanja',
 'right-import' => 'Uvoženje stranica s drugih wikija',
@@ -1669,12 +1674,24 @@ Ne smije biti duži od $1 {{PLURAL:$1|znaka|znaka|znakova}}.',
 'rcnotefrom' => 'Slijede promjene od <b>$2</b> (prikazano ih je do <b>$1</b>).',
 'rclistfrom' => 'Prikaži nove promjene počevši od $1',
 'rcshowhideminor' => '$1 manje promjene',
+'rcshowhideminor-show' => 'prikaži',
+'rcshowhideminor-hide' => 'sakrij',
 'rcshowhidebots' => '$1 botove',
+'rcshowhidebots-show' => 'prikaži',
+'rcshowhidebots-hide' => 'sakrij',
 'rcshowhideliu' => '$1 prijavljene suradnike',
+'rcshowhideliu-show' => 'prikaži',
+'rcshowhideliu-hide' => 'sakrij',
 'rcshowhideanons' => '$1 neprijavljene suradnike',
+'rcshowhideanons-show' => 'prikaži',
+'rcshowhideanons-hide' => 'sakrij',
 'rcshowhidepatr' => '$1 provjerene promjene',
+'rcshowhidepatr-show' => 'prikaži',
+'rcshowhidepatr-hide' => 'sakrij',
 'rcshowhidemine' => '$1 moje promjene',
-'rclinks' => 'Prikaži zadnjih $1 promjena u zadnjih $2 dana; $3',
+'rcshowhidemine-show' => 'prikaži',
+'rcshowhidemine-hide' => 'sakrij',
+'rclinks' => 'Prikaži posljednjih $1 promjena {{PLURAL:$2|prethodni dan|u posljednja $2 dana|u posljednjih $2 dana}}<br />$3',
 'diff' => 'razl',
 'hist' => 'pov',
 'hide' => 'sakrij',
@@ -2230,7 +2247,7 @@ Podržani {{PLURAL:$2|protokol|protokoli}}: <code>$1</code> (default je http://
 
 # Special:ActiveUsers
 'activeusers' => 'Popis aktivnih suradnika',
-'activeusers-intro' => 'Ovo je popis suradnika koji su napravili neku aktivnost u {{PLURAL:$1|zadnji $1 dan|zadnja $1 dana|zadnjih $1 dana}}.',
+'activeusers-intro' => 'Ovo je popis suradnika koji su napravili neku aktivnost u {{PLURAL:$1|posljednji $1 dan|posljednja $1 dana|posljednjih $1 dana}}.',
 'activeusers-count' => '{{PLURAL:$1|nedavna $1 izmjena|nedavne $1 izmjene|nedavnih $1 izmjena}} u {{PLURAL:$3|posljednji $3 dan|posljednja $3 dana|posljednjih $3 dana}}',
 'activeusers-from' => 'Prikaži suradnike počevši od:',
 'activeusers-hidebots' => 'Sakrij botove',
@@ -2317,12 +2334,12 @@ Promjene na toj stranici i njenoj stranici za razgovor bit će prikazane na popi
 'notvisiblerev' => 'Izmjena je obrisana',
 'watchlist-details' => '{{PLURAL:$1|$1 stranica|$1 stranice|$1 stranica}} se nalazi na popisu praćenja, ne brojeći stranice za razgovor.',
 'wlheader-enotif' => 'Uključeno je izvješćivanje e-poštom.',
-'wlheader-showupdated' => "Stranice koje su promijenjene od Vašeg zadnjeg posjeta prikazane su '''podebljano'''",
+'wlheader-showupdated' => "Stranice koje su promijenjene od Vašeg posljednjeg posjeta prikazane su '''podebljano'''",
 'watchmethod-recent' => 'provjera nedavnih promjena praćenih stranica',
 'watchmethod-list' => 'provjera praćanih stranica za nedavne promjene',
 'watchlistcontains' => 'Vaš popis praćenja sadrži $1 {{PLURAL:$1|stranicu|stranice|stranica}}.',
 'iteminvalidname' => "Problem s izborom '$1', ime nije valjano...",
-'wlshowlast' => 'Prikaži zadnjih $1 sati $2 dana $3',
+'wlshowlast' => 'Prikaži posljednjih $1 sati $2 dana $3',
 'watchlist-options' => 'Izbornik popisa praćenja',
 
 # Displayed when you click the "watch" button and it is in the process of watching
@@ -2352,11 +2369,11 @@ $PAGEINTRO $NEWPAGE
 
 Sažetak urednika: $PAGESUMMARY $PAGEMINOREDIT
 
-Možete kontaktirati suradnika koji je zadnji uređivao stranicu:
+Možete kontaktirati suradnika koji je posljednji uređivao stranicu:
 mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Do Vašeg ponovnog posjeta stranici nećete dobivati nove obavijesti. Postavke za izvješćivanje možete resetirati za sve praćene stranice svog popisa praćenja.
+Do Vašeg ponovnog posjeta stranici nećete dobivati nove obavijesti. Postavke za izvješćivanje možete vratiti na prvotno zadane za sve praćene stranice svog popisa praćenja.
 
 Vaš sustav izvješćivanja {{SITENAME}}.
 
@@ -2420,9 +2437,10 @@ Sva vremena su prema poslužiteljevom vremenu.',
 
 Posljednju promjenu napravio je [[User:$3|$3]] ([[User talk:$3|Razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Sažetak promjene je bio: \"''\$1''\".",
-'revertpage' => 'Uklonjena promjena suradnika $2, vraćeno na zadnju inačicu suradnika $1',
+'revertpage' => 'Uklonjena promjena suradnika $2, vraćeno na posljednju inačicu suradnika $1',
 'revertpage-nouser' => 'Vraćene izmjene suradnika (suradničko ime uklonjeno) na posljednju inačicu suradnika [[User:$1|$1]]',
-'rollback-success' => 'Uklonjeno uređivanje suradnika $1; vraćeno na zadnju inačicu suradnika $2.',
+'rollback-success' => 'Uklonjeno uređivanje {{GENDER:$1|suradnika|suradnice}} $1
+vraćeno na posljednju inačicu {{GENDER:$2|suradnika|suradnice}} $2.',
 
 # Edit tokens
 'sessionfailure-title' => 'Prekid sesije',
@@ -2507,7 +2525,7 @@ Baza se povremeno čisti od ovakvih stranica.',
 Ako želite vratiti određene izmjene, označite ih i kliknite '''''{{int:undeletebtn}}'''''.",
 'undeleterevisions' => '$1 {{PLURAL:$1|inačica je arhivirana|inačice su arhivirane|inačica je arhivirano}}',
 'undeletehistory' => 'Ako vratite izbrisanu stranicu, bit će vraćene i sve prijašnje promjene. Ako je u međuvremenu stvorena nova stranica s istim imenom, vraćena stranica bit će upisana kao prijašnja promjena sadašnje.',
-'undeleterevdel' => 'Vraćanje stranice neće biti izvršeno ako je rezultat toga djelomično brisanje zadnjeg uređivanja.
+'undeleterevdel' => 'Vraćanje stranice neće biti izvršeno ako je rezultat toga djelomično brisanje posljednjeg uređivanja.
 U takvim slučajevima morate isključiti ili otkriti najnovije obrisane promjene.',
 'undeletehistorynoadmin' => 'Ovaj je članak izbrisan. Razlog za brisanje prikazan je u donjem sažetku, zajedno s
 detaljima o suradnicima koji su uređivali ovu stranicu prije brisanja.
@@ -2568,7 +2586,7 @@ $1',
 'sp-contributions-newbies' => 'Prikaži samo doprinose novih suradnika',
 'sp-contributions-newbies-sub' => 'Za nove suradnike',
 'sp-contributions-newbies-title' => 'Doprinosi novih suradnika',
-'sp-contributions-blocklog' => 'Evidencija blokiranja',
+'sp-contributions-blocklog' => 'evidencija blokiranja',
 'sp-contributions-deleted' => 'obrisani suradnički doprinosi',
 'sp-contributions-uploads' => 'postavljene datoteke',
 'sp-contributions-logs' => 'evidencije',
@@ -3014,7 +3032,7 @@ Snimite je na svoje računalo i postavite je ovdje.',
 'tooltip-watchlistedit-raw-submit' => 'Osvježi popis praćenja',
 'tooltip-recreate' => 'Vrati stranicu unatoč tome što je obrisana',
 'tooltip-upload' => "Pokreni snimanje (''upload'')",
-'tooltip-rollback' => '"Ukloni" uklanja uređivanja zadnjeg suradnika na ovoj stranici.',
+'tooltip-rollback' => '"Ukloni" uklanja uređivanja posljednjeg suradnika na ovoj stranici.',
 'tooltip-undo' => '"Ukloni ovu izmjenu" uklanja ovu izmjenu i otvara okvir za uređivanje. Omogućava unošenje razloga u sažetak.',
 'tooltip-preferences-save' => 'Spremi postavke',
 'tooltip-summary' => 'Unesite kratki sažetak',
@@ -3034,7 +3052,7 @@ Snimite je na svoje računalo i postavite je ovdje.',
 'anonymous' => 'Neprijavljeni {{PLURAL:$1|suradnik|suradnici}} projekta {{SITENAME}}',
 'siteuser' => 'Suradnik $1 na projektu {{SITENAME}}',
 'anonuser' => '{{SITENAME}} anonimni suradnik $1',
-'lastmodifiedatby' => 'Ovu je stranicu zadnji put mijenjao dana $2, $1 suradnik $3.',
+'lastmodifiedatby' => 'Ovu je stranicu posljednji put {{GENDER:$4|mijenjao suradnik|mijenjala suradnica}} $3 dana $1 u $2.',
 'othercontribs' => 'Temelji se na doprinosu suradnika $1.',
 'others' => 'drugih',
 'siteusers' => '{{SITENAME}} {{PLURAL:$2|suradnik|suradnici}} $1',
@@ -3048,7 +3066,7 @@ Snimite je na svoje računalo i postavite je ovdje.',
 Razlog je vjerojatno vanjska poveznica koja se nalazi na crnom popisu.',
 'spamprotectionmatch' => 'Naš filtar spama reagirao je na sljedeći tekst: $1',
 'spambot_username' => 'MediaWiki zaštita od spama',
-'spam_reverting' => 'Vraćam na zadnju inačicu koja ne sadrži poveznice na $1',
+'spam_reverting' => 'Vraćam na posljednju inačicu koja ne sadrži poveznice na $1',
 'spam_blanking' => 'Sve inačice sadrže poveznice na $1, brišem cjelokupni sadržaj',
 'spam_deleting' => 'Sve inačice sadržale su poveznice na $1, brišem cjelokupni sadržaj',
 'simpleantispam-label' => "Anti-spam provjera.
@@ -3077,10 +3095,10 @@ Razlog je vjerojatno vanjska poveznica koja se nalazi na crnom popisu.',
 'pageinfo-firstuser' => 'Suradnik koji je stvorio stranicu',
 'pageinfo-firsttime' => 'Datum stvaranja stranice',
 'pageinfo-lastuser' => 'Posljednji urednik stranice',
-'pageinfo-lasttime' => 'Datum zadnjeg uređivanja',
+'pageinfo-lasttime' => 'Datum posljednjeg uređivanja',
 'pageinfo-edits' => 'Ukupan broj uređivanja',
 'pageinfo-authors' => 'Broj različitih autora',
-'pageinfo-recent-edits' => 'Broj uređivanja (u zadnjih $1)',
+'pageinfo-recent-edits' => 'Broj uređivanja (u posljednjih $1)',
 'pageinfo-recent-authors' => 'Broj različitih autora u gornjem razdoblju',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magična riječ - varijabla|Magične riječi - varijable}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Postoji|Postoje|Postoji}} $1 {{PLURAL:$1|skrivena kategorija|skrivene kategorije|skrivenih kategorija}}',
@@ -3163,7 +3181,7 @@ Njegovim izvršavanjem mogli biste oštetiti svoj sustav.",
 # Special:NewFiles
 'newimages' => 'Galerija novih datoteka',
 'imagelisttext' => 'Ispod je popis {{PLURAL:$1|$1 slike|$1 slike|$1 slika}} složen $2.',
-'newimages-summary' => 'Ova posebna stranica pokazuje zadnje nedavno postavljene datoteke.',
+'newimages-summary' => 'Ova posebna stranica pokazuje posljednje nedavno postavljene datoteke.',
 'newimages-legend' => 'Filtar',
 'newimages-label' => 'Naziv datoteke (ili njen dio):',
 'showhidebots' => '($1 botova)',
@@ -3240,7 +3258,7 @@ Svaka sljedeća poveznica u istom retku je izuzetak, npr. kod stranica gdje se s
 'exif-primarychromaticities' => 'Kromaticitet primarnih boja',
 'exif-ycbcrcoefficients' => 'Matrični koeficijenti preobrazbe kolor prostora',
 'exif-referenceblackwhite' => 'Mjesto bijele i crne točke',
-'exif-datetime' => 'Datum zadnje promjene datoteke',
+'exif-datetime' => 'Datum posljednje promjene datoteke',
 'exif-imagedescription' => 'Ime slike',
 'exif-make' => 'Proizvođač kamere',
 'exif-model' => 'Model kamere',
@@ -3370,7 +3388,7 @@ Svaka sljedeća poveznica u istom retku je izuzetak, npr. kod stranica gdje se s
 'exif-serialnumber' => 'Serijski broj kamere',
 'exif-cameraownername' => 'Vlasnik kamere',
 'exif-label' => 'Oznaka',
-'exif-datetimemetadata' => 'Datum zadnje promjene metapodataka',
+'exif-datetimemetadata' => 'Datum posljednje promjene metapodataka',
 'exif-nickname' => 'Neformalni naziv slike',
 'exif-rating' => 'Ocjena (od 5)',
 'exif-rightscertificate' => 'Certifikat za upravljanje pravima',
@@ -3732,8 +3750,8 @@ Potvrdite namjeru vraćanja ovog članka.",
 'livepreview-error' => 'Spajanje nije uspjelo: $1 "$2". Pokušajte normalni pretpregled.',
 
 # Friendlier slave lag warnings
-'lag-warn-normal' => 'Moguće je da izmjene nastale zadnjih $1 {{PLURAL:$1|sekundu|sekundi}} neće biti vidljive na ovom popisu.',
-'lag-warn-high' => 'Zbog kašnjenja baze podataka, moguće je da promjene napravljene u zadnjih $1 {{PLURAL:$1|sekundu|sekunde|sekundi}} nisu prikazane u popisu.',
+'lag-warn-normal' => 'Moguće je da izmjene nastale posljednjih $1 {{PLURAL:$1|sekundu|sekundi}} neće biti vidljive na ovom popisu.',
+'lag-warn-high' => 'Zbog kašnjenja baze podataka, moguće je da promjene napravljene u posljednjih $1 {{PLURAL:$1|sekundu|sekunde|sekundi}} nisu prikazane u popisu.',
 
 # Watchlist editor
 'watchlistedit-numitems' => 'Vaš popis praćenja sadrži {{PLURAL:$1|1 stranicu|$1 stranica}}, bez stranica za razgovor.',
index 9ce19c4..52a5eae 100644 (file)
@@ -191,7 +191,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Mi kopije e-mejlkow pósłać, kotrež druhim wužiwarjam pósćelu',
 'tog-diffonly' => 'Jenož rozdźěle pokazać (nic pak zbytny wobsah)',
 'tog-showhiddencats' => 'Schowane kategorije pokazać',
-'tog-noconvertlink' => 'Konwertowanje wotkazoweho titula znjemóžnić',
 'tog-norollbackdiff' => 'Rozdźěl po wróćostajenju zanjechać',
 'tog-useeditwarning' => 'Warnować, hdyž so wobdźěłowanska strona z njeskładowanymi změnami wopušća',
 'tog-prefershttps' => 'Po přizjewjenju přeco wěsty zwisk wužiwać',
@@ -318,7 +317,6 @@ $messages = array(
 'vector-action-protect' => 'škitać',
 'vector-action-undelete' => 'Wobnowić',
 'vector-action-unprotect' => 'Škit wotstronić',
-'vector-simplesearch-preference' => 'Zjednorjenu pytansku lajstu zmóžnić (jenož drasta Vector)',
 'vector-view-create' => 'Wutworić',
 'vector-view-edit' => 'Wobdźěłać',
 'vector-view-history' => 'Stawizny',
@@ -600,8 +598,6 @@ Njezabudź swoje [[Special:Preferences|nastajenja za {{GRAMMAR:akuzatiw|{{SITENA
 'gotaccountlink' => 'Přizjewić',
 'userlogin-resetlink' => 'Přizjewjenske daty zabył?',
 'userlogin-resetpassword-link' => 'Sy swoje hesło zabył?',
-'helplogin-url' => 'Help:Přizjewić',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoc za přizjewjenje]]',
 'userlogin-loggedin' => 'Sy hižo jako {{GENDER:$1|$1 přizjewjeny|$1 přizjewjena}}. Wužij slědowacy formular, zo by so jako druhi wužiwar přizjewił.',
 'userlogin-createanother' => 'Dalše konto załožić',
 'createacct-join' => 'Zapodaj deleka swoje informacije.',
@@ -684,6 +680,10 @@ Móžeš tutu zdźělenku ignorować, jeli so wužiwarske konto zmylnje wutwori
 'suspicious-userlogout' => 'Twoje naprašowanje za wotzjewjenje bu wotpokazane, dokelž zda so, jako by so přez wobškodźeny wobhladowak abo pufrowacy proksy pósłało',
 'createacct-another-realname-tip' => '* Woprawdźite mjeno je opcionalne.
 Jeli jo podaš, budźe so to wužiwać, zo by přinoški přirjadowało.',
+'pt-login' => 'Přizjewić',
+'pt-login-button' => 'Přizjewić',
+'pt-createaccount' => 'Konto załožić',
+'pt-userlogout' => 'Wotzjewić',
 
 # Email sending
 'php-mail-error-unknown' => 'Njeznaty zmylk w PHP-funkciji mail()',
@@ -692,7 +692,7 @@ Jeli jo podaš, budźe so to wužiwać, zo by přinoški přirjadowało.',
 
 # Change password dialog
 'changepassword' => 'Hesło změnić',
-'resetpass_announce' => 'Sy so z nachwilnym e-mejlowanym kodom přizjewił. Zo by přizjewjenje zakónčił, dyrbiš nětko nowe hesło postajić:',
+'resetpass_announce' => 'Zo by přizjewjenje skónčił, dyrbiš nowe hesło postajić.',
 'resetpass_text' => '<!-- Tu tekst zasunyć -->',
 'resetpass_header' => 'Kontowe hesło změniś',
 'oldpassword' => 'Stare hesło:',
@@ -707,8 +707,13 @@ Jeli jo podaš, budźe so to wužiwać, zo by přinoški přirjadowało.',
 'resetpass-submit-cancel' => 'Přetorhnyć',
 'resetpass-wrong-oldpass' => 'Njepłaćiwe nachwilne abo aktualne hesło.
 Snano sy swoje hesło hižo wuspěšnje změnił abo nowe nachwilne hesło požadał.',
+'resetpass-recycled' => 'Prošu staj swoje hesło na druhe hesło hač twoje aktualne hesło.',
+'resetpass-temp-emailed' => 'Sy so z nachwilnym e-mejlowym kodom přizjewił.
+Zo by přizjewjenje skónčił, dyrbiš tu nowe hesło postajić:',
 'resetpass-temp-password' => 'Nachwilne hesło:',
 'resetpass-abort-generic' => 'Měnjenje hesła je so přez rozšěrjenje přetorhnyło.',
+'resetpass-expired' => 'Twoje hesło je spadnyło. Prošu postaj nowe hesło za přizjewjenje.',
+'resetpass-expired-soft' => 'Twoje hesło je spadnyło a dyrbi so wróćo stajić. Prošu wubjer nětko druhe hesło abo klikń na "{{int:resetpass-submit-cancel}}", zo by jo pozdźišo wróćo stajił.',
 
 # Special:PasswordReset
 'passwordreset' => 'Hesło wróćo stajić',
@@ -959,7 +964,7 @@ Eksistuje hižo.',
 'content-failed-to-parse' => 'Parsowanje wobsaha $2 za model $1 je so njeporadźiło: $3',
 'invalid-content-data' => 'Njepłaćiwe wobsahowe daty',
 'content-not-allowed-here' => 'Wobsah "$1" njeje na stronje [[$2]] dowoleny',
-'editwarning-warning' => 'Hdyž so strona wopušća, móža so změny zhubić, kotrež sy přewjedł. Jeli sy přizjewjeny, móžeš tute warnowanje we wotrězku "Wobdźěłowanje" swojich nastajenjow znjemóžnić.',
+'editwarning-warning' => 'Hdyž so strona wopušća, móža so změny zhubić, kotrež sy přewjedł. Jeli sy přizjewjeny, móžeš tute warnowanje we wotrězku "{{int:prefs-editing}}" swojich nastajenjow znjemóžnić.',
 'editpage-notsupportedcontentformat-title' => 'Wobsahowy format so njepodpěruje',
 'editpage-notsupportedcontentformat-text' => 'Wobsahowy format $1 so přez wobsahowy model $2 njepodpěruje.',
 
@@ -993,6 +998,7 @@ Dyrbjała mjenje hač $2 {{PLURAL:$2|wołanje|wołanjej|wołanja|wołanjow}} mě
 'undo-success' => 'Wersija je so wuspěšnje wotstroniła. Prošu přepruwuj deleka w přirunanskim napohledźe, hač twoja změna bu přewzata a klikń potom na „Składować”, zo by změnu składował.',
 'undo-failure' => 'Wobdźěłanje njehodźeše so wotstronić, dokelž wotpowědny wotrězk bu mjeztym změnjeny.',
 'undo-norev' => 'Změna njeda so cofnyć, dokelž njeeksistuje abo bu wušmórnjena.',
+'undo-nochange' => 'Zda so, zo změna je so hižo cofnyła.',
 'undo-summary' => 'Změna $1 [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusija]]) bu cofnjena.',
 'undo-summary-username-hidden' => 'Změna $1 schowaneho wužiwarja je so anulowała',
 
@@ -1076,8 +1082,10 @@ Móžeš sej tutón rozdźěl wobhladać; podrobnosće namakaš w [{{fullurl:{{#
 'revdelete-show-file-submit' => 'Haj',
 'revdelete-selected' => "'''{{PLURAL:$2|Wubrana wersija|Wubranej wersiji|Wubrane wersije|Wubranych wersijow}} wot [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Wubrany zapisk z protokola|Wubranej zapiskaj z protokola|Wubrane zapiski z protokola|Wubrane zapiski z protokola}} za '''$1:''''''",
-'revdelete-text' => "'''Wušmórnjene wersije a podawki so w stawiznach a protokolach dale jewja, ale dźěle jich wobsaha budu njepřistupne za zjawnosć.'''
-Druzy administratorojo na {{GRAMMAR:lokatiw|{{SITENAME}}}} móža hišće na schowany tekst přistup měć a jón z pomocu samsneho interfejsa wobnowić, chibazo tež přidatne prawa su wobmjezowane.",
+'revdelete-text-text' => 'Zhašane wersije wostanu hišće we wersijowej historiji, ale dźěle jeje wobsaha njebudu přistupne zjawnosći.',
+'revdelete-text-file' => 'Zhašane datajowe wersije wostanu w datajowej historiji, ale dźěle jeje wobsaha njebudu přistupne zjawnosći.',
+'logdelete-text' => 'Zhašane protokolowe zapiski wostanu hišće w protokolach, ale dźěle jich wobsaha njebudu přistupne zjawnosći.',
+'revdelete-text-others' => 'Druzy administratorojo na {{GRAMMAR:lokatiw|{{SITENAME}}}} móža hišće na schowany wobsah přistup měć a móža jón zaso přez samsny wužiwarski powjerch wobnowić, chibazo su přidatne wobmjezowanja.',
 'revdelete-confirm' => 'Prošu potwjerdź, zo chceš to činić, zo rozumiš konsekwency a zo činiš to po [[{{MediaWiki:Policy-url}}|prawidłach]].',
 'revdelete-suppress-text' => "Potłóčenje dyrbjało so '''jenož''' za slědowace pady wužiwać:
 * Potencielnje křiwdźace informacije
@@ -1171,6 +1179,8 @@ Zawěsć, zo tuta změna stawiznisku kontinuitu strony wobchowuje.',
 'showhideselectedversions' => 'Wubrane wersije pokazać/schować',
 'editundo' => 'cofnyć',
 'diff-empty' => '(Žadyn rozdźěl)',
+'diff-multi-sameuser' => '({{PLURAL:$1|Jedna mjezywersija|$1 mjezywersiji|$1 mjezywersije|$1 mjezywersijow}} wot samsneho wužiwarja {{PLURAL:$1|njepokazana|njepokazanej|njepokazane|njepokazanych}})',
+'diff-multi-otherusers' => '({{PLURAL:$1|Jedna mjezywersija|$1 mjezywersiji|$1 mjezywersije|$1 mjezywersijow}} wot {{PLURAL:$2|jednoho dalšeho wužiwarja|$2 wužiwarjow}} {{PLURAL:$1|njepokazana|njepokazanej|njepokazane|njepokazanych}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|Jedna mjezywersija|$1 mjezywersiji|$1 mjezywersije|$1 mjezywersijow}} wot wjace hač {{PLURAL:$2|jednoho wužiwarja|$2 wužiwarjow|$2 wužiwarjow|$2 wužiwarjow}} {{PLURAL:$1|njepokazana|njepokazanej|njepokazane|njepokazane}})',
 'difference-missing-revision' => '{{PLURAL:$2|Jedna wersija|$2 wersiji|$2 wersije|$2 wersijow}} tutoho rozdźěla ($1) {{PLURAL:$2|njeje so namakała|njejstej so namakałoj|njejsu namakali|njeje so namakało}}.
 
@@ -1191,7 +1201,7 @@ Podrobnosće móžeš w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}
 'shown-title' => '$1 {{PLURAL:$1|wuslědk|wuslědkaj|wuslědki|wuslědkow}} na stronu pokazać',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) pokazać',
 'searchmenu-exists' => "'''Je strona z mjenom \"[[\$1]]\" na tutym wikiju'''",
-'searchmenu-new' => "'''Wutwor stronu \"[[:\$1|\$1]]\" na tutym wikiju!'''",
+'searchmenu-new' => '<strong>Wutwor stronu "[[:$1]]" na tutym wikiju!</strong> {{PLURAL:$2|0=|Hlej tež stronu namakanu z twojim pytanjom.|Hlej tež namakane pytanske wuslědki.}}',
 'searchprofile-articles' => 'Wobsahowe strony',
 'searchprofile-project' => 'Pomoc a projektowe strony',
 'searchprofile-images' => 'Multimedia',
@@ -1210,13 +1220,14 @@ Podrobnosće móžeš w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}
 'search-file-match' => '(wotpowěduje datajowemu wobsahej)',
 'search-suggest' => 'Měnješe ty $1?',
 'search-interwiki-caption' => 'Sotrowske projekty',
-'search-interwiki-default' => '$1 wuslědki:',
+'search-interwiki-default' => 'Wuslědki z $1:',
 'search-interwiki-more' => '(dalše)',
 'search-relatedarticle' => 'Přiwuzne',
 'searcheverything-enable' => 'We wšěch mjenowych rumach pytać',
 'searchrelated' => 'přiwuzny',
 'searchall' => 'wšě',
 'showingresults' => "Deleka so hač {{PLURAL:$1|'''1''' wuslědk pokazuje|'''$1''' wuslědkaj pokazujetej|'''$1''' wuslědki pokazuja|'''$1''' wuslědkow pokazuje}}, započinajo z #'''$2'''.",
+'showingresultsinrange' => 'Deleka so do {{PLURAL:$1|<strong>1</strong> wuslědka|<strong>$1</strong> wuslědkow}} we wobłuku <strong>$2</strong> hač do <strong>$3</strong> pokazuje.',
 'showingresultsnum' => "Deleka so {{PLURAL:$3|'''1''' wuslědk pokazuje|'''$3''' wuslědkaj pokazujetej|'''$3''' wuslědki pokazuja|'''$3''' wuslědkow pokazuje}}, započinajo z #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Wuslědk '''$1''' z '''$3'''|Wuslědki '''$1 - $2''' z '''$3'''}} za '''$4'''",
 'search-nonefound' => 'Njebuchu wuslědki namakane, kotrež naprašowanju wotpowěduja.',
@@ -1534,14 +1545,26 @@ Tuta informacija budźe zjawna.',
 'recentchanges-legend-heading' => "'''Legenda:'''",
 'recentchanges-legend-newpage' => '(hlej tež [[Special:NewPages|lisćinu nowych stronow]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "Deleka so změny wot '''$2''' pokazuja (hač k '''$1''').",
+'rcnotefrom' => 'Deleka so změny wot <strong>$2</strong> pokazuja (hač k <strong>$1</strong>).',
 'rclistfrom' => 'Nowe změny pokazać, započinajo z $1',
 'rcshowhideminor' => 'snadne změny $1',
+'rcshowhideminor-show' => 'Pokazać',
+'rcshowhideminor-hide' => 'Schować',
 'rcshowhidebots' => 'Boćiki $1',
+'rcshowhidebots-show' => 'Pokazać',
+'rcshowhidebots-hide' => 'Schować',
 'rcshowhideliu' => 'Zregistrowani wužiwarjo $1',
+'rcshowhideliu-show' => 'Pokazać',
+'rcshowhideliu-hide' => 'Schować',
 'rcshowhideanons' => 'Anonymni wužiwarjo $1',
+'rcshowhideanons-show' => 'Pokazać',
+'rcshowhideanons-hide' => 'Schować',
 'rcshowhidepatr' => 'Dohladowane změny $1',
+'rcshowhidepatr-show' => 'Pokazać',
+'rcshowhidepatr-hide' => 'Schować',
 'rcshowhidemine' => 'moje změny $1',
+'rcshowhidemine-show' => 'Pokazać',
+'rcshowhidemine-hide' => 'Schować',
 'rclinks' => 'Poslednje $1 změnow poslednich $2 dnjow pokazać<br />$3',
 'diff' => 'rozdźěl',
 'hist' => 'wersije',
@@ -1667,6 +1690,8 @@ Jeli maš tutón wobraz z połnym rozeznaćom, nahraj tutón, hewak změń proš
 'uploaddisabledtext' => 'Nahraće datajow je znjemóžnjene.',
 'php-uploaddisabledtext' => 'Nahraća PHP-datajow su znjemóžnjene. Prošu skontroluj nastajenje file_uploads.',
 'uploadscripted' => 'Dataja wobsahuje HTML- abo skriptowy kod, kotryž móhł so mylnje přez wobhladowak wuwjesć.',
+'uploadscriptednamespace' => "Tuta SVG-dataja wobsahuje njedowoleny mjenowy rum '$1'",
+'uploadinvalidxml' => 'XML w nahratej dataji njeda so parsować.',
 'uploadvirus' => 'Dataja wirus wobsahuje! Podrobnosće: $1',
 'uploadjava' => 'Tuta dataja je ZIP-dataja, kotraž .class-dataju z Javy wobsahuje.
 Nahraće datajow Javy njeje dowolene, dokelž móhli wobeńdźenje wěstotnych wobmjezowanjow zmóžnić.',
@@ -2028,10 +2053,20 @@ Kóžda rjadka wobsahuje wotkazy k prěnjemu a druhemu daleposrědkowanju kaž t
 'deadendpagestext' => 'Slědowace strony njejsu z druhimi stronami w tutym wikiju zwjazane.',
 'protectedpages' => 'Škitane strony',
 'protectedpages-indef' => 'Jenož strony z njewobmjezowanym škitom',
+'protectedpages-summary' => 'Tuta specialna strona naliči wšě strony, kotrež su přećiwo přesunjenju abo wobdźěłowanju škitane.',
 'protectedpages-cascade' => 'Jenož strony z kaskadowym škitom',
 'protectedpages-noredirect' => 'Dalesposrědkowanja schować',
 'protectedpagesempty' => 'Tuchwilu žane.',
+'protectedpages-timestamp' => 'Časowy kołk',
+'protectedpages-page' => 'Strona',
+'protectedpages-expiry' => 'Płaćiwy hač do',
+'protectedpages-performer' => 'Škitacy wužiwar',
+'protectedpages-params' => 'Škitowe parametry',
+'protectedpages-reason' => 'Přičina',
+'protectedpages-unknown-timestamp' => 'Njeznaty',
+'protectedpages-unknown-performer' => 'Njeznaty wužiwar',
 'protectedtitles' => 'Škitane titule',
+'protectedtitles-summary' => 'Tuta strona nalistuje titule, kotrež su tuchwilu přećiwo wutworjenju škitane. Za lisćinu eksistowacych stronow, kotrež su škitane, hlej [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Žane titule njejsu tuchwilu z tutymi parametrami škitane.',
 'listusers' => 'Lisćina wužiwarjow',
 'listusers-editsonly' => 'Jenož wužiwarjow ze změnami pokazać',
@@ -2215,6 +2250,7 @@ Přichodne změny tuteje strony a přisłušneje diskusijneje strony budu so tam
 'watchmethod-list' => 'Wobkedźbowanki za aktualnymi změnami přepruwować',
 'watchlistcontains' => 'Maš $1 {{PLURAL:$1|stronu|stronje|strony|stronow}} w swojich wobkedźbowankach.',
 'iteminvalidname' => 'Problem ze zapiskom „$1“, njepłaćiwe mjeno.',
+'wlnote2' => 'Slěduja změny {{PLURAL:$1|zańdźeneje hodźiny|zańdźeneju <strong>$1</strong> hodźinow|zańdźenych <strong>$1</strong> hodźin}} Staw: $2, $3.',
 'wlshowlast' => 'Poslednje $1 hodź. - $2 dnjow - $3 pokazać',
 'watchlist-options' => 'Opcije wobkedźbowankow',
 
@@ -2302,7 +2338,7 @@ Prošu potwjerdź, zo maš wotpohlad to činić, zo rozumiš sćěwki a zo to wo
 'delete-edit-reasonlist' => 'Přičiny za wušmórnjenje wobdźěłać',
 'delete-toobig' => 'Tuta strona ma z wjace hač $1 {{PLURAL:$1|wersiju|wersijomaj|wersijemi|wersijemi}} wulke wobdźěłanske stawizny. Wušmórnjenje tajkich stronow bu wobmjezowane, zo by připadne přetorhnjenje {{SITENAME}} wobešło.',
 'delete-warning-toobig' => 'Tuta strona ma z wjace hač $1 {{PLURAL:$1|wersiju|wersijomaj|wersijemi|wersijemi}} wulke wobdźěłanske stawizny. Wušmórnjenje móže operacije datoweje banki {{SITENAME}} přetorhnyć; pokročuj z kedźbliwosću.',
-'deleting-backlinks-warning' => "'''Warnowanje:''' Druhe strony wotkazuja k stronje abo strona je druhdźe zapřijata, kotruž chceš zhašeć.",
+'deleting-backlinks-warning' => "'''Warnowanje:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druhe strony]] wotkazuja k stronje abo strona je druhdźe zapřijata, kotruž chceš zhašeć.",
 
 # Rollback
 'rollback' => 'Změny cofnyć',
@@ -2469,8 +2505,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Tuta IP-adresa je tuchwilu zablokowana.
 Najnowši zapisk w protokolu blokowanjow so deleka jako referenca podawa:',
 'sp-contributions-search' => 'Přinoški pytać',
+'sp-contributions-suppresslog' => 'potłóčene wužiwarske přinoški',
 'sp-contributions-username' => 'IP-adresa abo wužiwarske mjeno:',
 'sp-contributions-toponly' => 'Jenož wyše wersije pokazać',
+'sp-contributions-newonly' => 'Jenož změny pokazać, kotrež su wutworjenja stronow',
 'sp-contributions-submit' => 'OK',
 
 # What links here
@@ -2745,6 +2783,7 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'allmessages-prefix' => 'Po prefiksu filtrować:',
 'allmessages-language' => 'Rěč:',
 'allmessages-filter-submit' => 'Wotesłać',
+'allmessages-filter-translate' => 'Přełožić',
 
 # Thumbnails
 'thumbnail-more' => 'powjetšić',
@@ -2761,6 +2800,7 @@ $2',
 'thumbnail_image-type' => 'Wobrazowy typ so njepodpěruje',
 'thumbnail_gd-library' => 'Njedospołna konfiguracija GD-biblioteki: falowaca funkcija $1',
 'thumbnail_image-missing' => 'Zda so, zo dataja faluje: $1',
+'thumbnail_image-failure-limit' => 'Njedawno je přewjele pospytow było, kotrež je so nimokuliło ($1 abo wjace), zo by tutu miniaturu rysowało. Prošu spytajće pozdźišo hišće raz.',
 
 # Special:Import
 'import' => 'Strony importować',
@@ -2793,7 +2833,7 @@ $2',
 'importuploaderrortemp' => 'Nahraće importoweje dataje je so njeporadźiło. Temporarny zapis faluje.',
 'import-parse-failure' => 'Zmylk za XML-import:',
 'import-noarticle' => 'Žadyn nastawk za import!',
-'import-nonewrevisions' => 'Wšě wersije buchu hižo prjedy importowane.',
+'import-nonewrevisions' => 'Žane wersije zaimportowane (wšě pak su hižo eksistowali pak su so zmylkow dla přeskočili).',
 'xml-error-string' => '$1 linka $2, špalta $3, (bajt $4): $5',
 'import-upload' => 'XML-daty nahrać',
 'import-token-mismatch' => 'Strata posedźenskich datow. Prošu spytaj hišće raz.',
@@ -2804,6 +2844,7 @@ $2',
 'import-error-special' => 'Strona "$1" so njeimportuje, dokelž k wosebitemu mjenowemu rumej słuša, kotryž strony njedowola.',
 'import-error-invalid' => 'Strona "$1" so njeimportuje, dokelž jeje mjeno je njepłaćiwe.',
 'import-error-unserialize' => 'Wersija $2 strony "$1" njeda so wotserializować. Wersija je so zdźěliła za wužiwanje wobsahoweho modela $3, kotryž je jako $4 serializowany.',
+'import-error-bad-location' => 'Wersija $2, kotraž wobsahowy model $3 wužiwa, njeda so pod "$1" w tutym wikiju składować, dokelž so model na tutej stronje njepodpěruje.',
 'import-options-wrong' => '{{PLURAL:$2|Wopačna opcija|Wopačnej opciji|Wopačne opcije|Wopačne opcije}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Podata korjenjowa strona je njepłaćiwa.',
 'import-rootpage-nosubpage' => 'Mjenowy rum "$1" korjenjoweje strony njedowola podstrony.',
@@ -3957,7 +3998,4 @@ Hewak móžeš slědowacy jednory formular wužiwać. Twój komentar přida so s
 'expand_templates_generate_rawhtml' => 'Hruby HTML pokazać',
 'expand_templates_preview' => 'Přehlad',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
-'uploadinvalidxml' => 'XML w nahratej dataji njeda so parsować.',
 );
index 6fb69f7..e4e8feb 100644 (file)
@@ -146,7 +146,6 @@ $linkTrail = '/^([a-zàèòÀÈÒ]+)(.*)$/sDu';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Souliyen lyen yo :',
-'tog-justify' => 'Aliyen paragraf yo',
 'tog-hideminor' => 'Kache tout modifikasyon resan yo ki tou piti',
 'tog-hidepatrolled' => 'Kache modifikasyon yo ki fèk fèt pou moun ki ap veye yo',
 'tog-newpageshidepatrolled' => 'Kache paj ki siveye yo nan mitan lis nouvo paj yo',
@@ -155,9 +154,7 @@ $messages = array(
 'tog-numberheadings' => 'Nimewote otomatikman tit yo',
 'tog-showtoolbar' => 'Montre meni modifikasyon an (sa mande JavaScript)',
 'tog-editondblclick' => 'Klike de fwa pou modifye yon paj (sa mande JavaScript)',
-'tog-editsection' => 'Pemèt modifye yon seksyon grasa lyen [modifye] yo',
 'tog-editsectiononrightclick' => 'Pemèt modifye yon seksyon lè ou klike a dwat sou tit seksyon an (sa mande JavaScript)',
-'tog-showtoc' => 'Montre tab de matyè yo (pou tout paj ki gen plis pase 3 tit)',
 'tog-rememberpassword' => 'Sonje mopas mwen nan òdinatè sa (pou $1 {{PLURAL:$1|jou|jou}} maximum)',
 'tog-watchcreations' => 'Mete paj mwen kreye yo nan lis swivi mwen.',
 'tog-watchdefault' => 'Mete paj mwen edite yo nan lis swivi mwen',
@@ -294,7 +291,6 @@ $messages = array(
 'vector-action-protect' => 'Pwoteje',
 'vector-action-undelete' => 'Retabli',
 'vector-action-unprotect' => 'Pa pwoteje',
-'vector-simplesearch-preference' => 'Aktive sijèsyon rechèch ranfòse yo (pou estil Vector sèlman)',
 'vector-view-create' => 'Kreye',
 'vector-view-edit' => 'Modifye',
 'vector-view-history' => 'Gade istorik',
@@ -855,7 +851,6 @@ Lejand : ({{MediaWiki:Cur}}) = diferans ak vèsyon kounye a, ({{MediaWiki:Last}}
 'lineno' => 'Liy $1 :',
 'compareselectedversions' => 'Konpare vèsyon ki seleksyone yo',
 'editundo' => 'Revoke',
-'diff-multi' => '(Genyen {{PLURAL:$1|yon revizyon|$1 revizyon yo}} ki te fèt pa {{PLURAL:$2|yon itilizatè|$2 itilizatè yo}} nan mitan evolisyon ki kache)',
 
 # Search results
 'searchresults' => 'Rezilta yo pou rechèch la',
index 6edd190..a5663ce 100644 (file)
@@ -20,6 +20,7 @@
  * @author Dani
  * @author Dj
  * @author Dorgan
+ * @author Einstein2
  * @author Enbéká
  * @author Geitost
  * @author Glanthor Reviol
@@ -477,7 +478,6 @@ $messages = array(
 'vector-action-protect' => 'Lapvédelem',
 'vector-action-undelete' => 'Visszaállítás',
 'vector-action-unprotect' => 'Védelem módosítása',
-'vector-simplesearch-preference' => 'Egyszerűsített keresési sáv engedélyezése (csak Vector felületen)',
 'vector-view-create' => 'Létrehozás',
 'vector-view-edit' => 'Szerkesztés',
 'vector-view-history' => 'Laptörténet',
@@ -758,8 +758,6 @@ Ne felejtsd el módosítani a [[Special:Preferences|{{SITENAME}} beállításaid
 'gotaccountlink' => 'Bejelentkezés',
 'userlogin-resetlink' => 'Elfelejtetted a bejelentkezési adataidat?',
 'userlogin-resetpassword-link' => 'Elfelejtetted a jelszavad?',
-'helplogin-url' => 'Help:Bejelentkezés',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Segítség a bejelentkezéshez]]',
 'userlogin-loggedin' => 'Már be vagy jelentkezve mint {{GENDER:$1|$1}}. Ha más néven akarsz belépni, alább megteheted.',
 'userlogin-createanother' => 'Felhasználói fiók létrehozása',
 'createacct-join' => 'Add meg az alábbi információkat.',
@@ -848,6 +846,9 @@ Várj $1, mielőtt újra próbálkozol.',
 'loginlanguagelabel' => 'Nyelv: $1',
 'suspicious-userlogout' => 'A kijelentkezési kérésed vissza lett utasítva, mert úgy tűnik, hogy egy hibás böngésző vagy gyorsítótárazó proxy küldte.',
 'createacct-another-realname-tip' => 'A valódi nevet nem kötelező megadni, de ha úgy döntesz, hogy megadod, azzal leszel feltüntetve a munkád szerzőjeként.',
+'pt-login' => 'Bejelentkezés',
+'pt-createaccount' => 'Fiók létrehozása',
+'pt-userlogout' => 'Kijelentkezés',
 
 # Email sending
 'php-mail-error-unknown' => 'Ismeretlen hiba a PHP mail() függvényében',
@@ -856,7 +857,7 @@ Várj $1, mielőtt újra próbálkozol.',
 
 # Change password dialog
 'changepassword' => 'Jelszócsere',
-'resetpass_announce' => 'Az e-mailben elküldött ideiglenes kóddal jelentkeztél be. A bejelentkezés befejezéséhez meg kell adnod egy új jelszót:',
+'resetpass_announce' => 'Az ideiglenes kóddal jelentkeztél be. A bejelentkezés befejezéséhez meg kell adnod egy új jelszót:',
 'resetpass_text' => '<!-- Ide írd a szöveget -->',
 'resetpass_header' => 'A fiókhoz tartozó jelszó megváltoztatása',
 'oldpassword' => 'Régi jelszó:',
@@ -864,14 +865,20 @@ Várj $1, mielőtt újra próbálkozol.',
 'retypenew' => 'Új jelszó ismét:',
 'resetpass_submit' => 'Add meg a jelszót és jelentkezz be',
 'changepassword-success' => 'A jelszavad megváltoztatása sikeresen befejeződött!',
+'changepassword-throttled' => 'Túl sok hibás bejelentkezés.
+Várj $1, mielőtt újra próbálkozol.',
 'resetpass_forbidden' => 'A jelszavak nem változtathatók meg',
 'resetpass-no-info' => 'Be kell jelentkezned, hogy közvetlenül elérd ezt a lapot.',
 'resetpass-submit-loggedin' => 'Jelszó megváltoztatása',
 'resetpass-submit-cancel' => 'Mégse',
 'resetpass-wrong-oldpass' => 'Nem megfelelő ideiglenes vagy jelenlegi jelszó.
 Lehet, hogy már sikeresen megváltoztattad a jelszavad, vagy pedig időközben új ideiglenes jelszót kértél.',
+'resetpass-recycled' => 'Kérlek más jelszót adjál meg, mint a jelenlegi jelszavad.',
+'resetpass-temp-emailed' => 'Emailben kapott ideiglenes kóddal jelentkeztél be. A végleges bejelentkezéshez új jelszót kell beállítanod itt:',
 'resetpass-temp-password' => 'Ideiglenes jelszó:',
 'resetpass-abort-generic' => 'A jelszómódosítást megszakította egy kiterjesztés.',
+'resetpass-expired' => 'A jelszavad lejárt. Adjál meg egy új jelszót a bejelentkezéshez!',
+'resetpass-expired-soft' => 'A jelszavad lejárt, ezért újat kell beállítanod. Válassz most egy új jelszót, vagy kattints a {{int:resetpass-submit-cancel}} gombra, ha később akarod csak beállítani.',
 
 # Special:PasswordReset
 'passwordreset' => 'Jelszó törlése',
@@ -913,6 +920,17 @@ Ideiglenes jelszó: $2',
 'changeemail-password' => 'A {{SITENAME}} jelszavad:',
 'changeemail-submit' => 'E-mail cím megváltoztatása',
 'changeemail-cancel' => 'Mégse',
+'changeemail-throttled' => 'Túl sok hibás bejelentkezés.
+Várj $1, mielőtt újra próbálkozol.',
+
+# Special:ResetTokens
+'resettokens' => 'Tokenek törlése',
+'resettokens-no-tokens' => 'Nincs újragenerálható token.',
+'resettokens-legend' => 'Tokenek újragenerálása',
+'resettokens-tokens' => 'Tokenek:',
+'resettokens-token-label' => '$1 (jelenlegi érték: $2)',
+'resettokens-done' => 'Tokenek újragenerálva.',
+'resettokens-resetbutton' => 'Kijelőlt tokenek újragenerálása',
 
 # Edit page toolbar
 'bold_sample' => 'Félkövér szöveg',
@@ -1116,7 +1134,8 @@ Már létezik.',
 'invalid-content-data' => 'Érvénytelen tartalom adat',
 'content-not-allowed-here' => '"$1" tartalom nem engedélyezett a [[$2]] oldalon',
 'editwarning-warning' => 'A lap elhagyásával az összes itt végzett változtatás elveszhet.
-Ha be vagy jelentkezve letilthatod ezt a figyelmeztetést a beállításaid „Szerkesztés” szakaszában.',
+Ha be vagy jelentkezve letilthatod ezt a figyelmeztetést a beállításaid „{{int:prefs-editing}}” szakaszában.',
+'editpage-notsupportedcontentformat-title' => 'Nem támogatott tartalom formátum',
 
 # Content models
 'content-model-wikitext' => 'wikiszöveg',
@@ -1149,6 +1168,7 @@ Néhány sablon nem fog megjelenni.',
 'undo-success' => 'A szerkesztés visszavonható. Kérlek ellenőrizd alább a változásokat, hogy valóban ezt szeretnéd-e tenni, majd kattints a lap mentése gombra a visszavonás véglegesítéséhez.',
 'undo-failure' => 'A szerkesztést nem lehet automatikusan visszavonni vele ütköző későbbi szerkesztések miatt.',
 'undo-norev' => 'A szerkesztés nem állítható vissza, mert nem létezik vagy törölve lett.',
+'undo-nochange' => 'A szerkesztés már vissza lett állítva.',
 'undo-summary' => 'Visszavontam [[Special:Contributions/$2|$2]] ([[User talk:$2|vita]] | [[Special:Contributions/$2|{{MediaWiki:Contribslink}}]]) szerkesztését (oldid: $1)',
 
 # Account creation failure
@@ -1230,15 +1250,12 @@ vagy a legutolsó változatot próbáltad meg elrejteni.',
 'revdelete-show-file-submit' => 'Igen',
 'revdelete-selected' => "'''A(z) [[:$1]] lap {{PLURAL:$2|kiválasztott változata|kiválasztott változatai}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Kiválasztott naplóesemény|Kiválasztott naplóesemények}}:'''",
-'revdelete-text' => "'''A törölt változatok és események továbbra is megjelennek a laptörténetben és a naplókban,
-azonban a tartalmuk nem lesz mindenki számára hozzáférhető.'''
-A(z) {{SITENAME}} adminisztrátorai továbbra is meg tudják tekinteni az elrejtett tartalmat, és helyre tudják állítani ugyanezen a felületen keresztül, amennyiben nincs további korlátozás beállítva.",
 'revdelete-confirm' => 'Kérlek erősítsd meg, hogy valóban ezt szeretnéd tenni; megértetted a következményeket, és amit teszel, az összhangban van [[{{MediaWiki:Policy-url}}|az irányelvekkel]].',
 'revdelete-suppress-text' => "Az elrejtés '''csak''' a következő esetekben használható:
 * Illetlen személyes információk
 *: ''otthoni cím, telefonszámok, társadalombiztosítási számok stb.''",
 'revdelete-legend' => 'Korlátozások megadása:',
-'revdelete-hide-text' => 'Változat szövegének elrejtése',
+'revdelete-hide-text' => 'Változat szövege',
 'revdelete-hide-image' => 'A fájl tartalmának elrejtése',
 'revdelete-hide-name' => 'Művelet és cél elrejtése',
 'revdelete-hide-comment' => 'Szerkesztési összefoglaló',
@@ -1583,6 +1600,8 @@ A műveletet nem lehet visszavonni.',
 'right-editusercssjs' => 'más felhasználók CSS és JS fájljainak szerkesztése',
 'right-editusercss' => 'más felhasználók CSS fájljainak szerkesztése',
 'right-edituserjs' => 'más felhasználók JS fájljainak szerkesztése',
+'right-editmyusercss' => 'A saját szerkesztői CSS-fájlok szerkesztése',
+'right-editmyuserjs' => 'Saját szerkesztői JavaScript-fájlok szerkesztése',
 'right-rollback' => 'a lap utolsó szerkesztésének gyors visszaállítása',
 'right-markbotedits' => 'visszaállított szerkesztések botként való jelölése',
 'right-noratelimit' => 'sebességkorlát figyelmen kívül hagyása',
@@ -1661,14 +1680,26 @@ A műveletet nem lehet visszavonni.',
 'recentchanges-label-plusminus' => 'Az oldal mérete ennyi bájttal módosult',
 'recentchanges-legend-heading' => 'Jelmagyarázat:',
 'recentchanges-legend-newpage' => '(lásd még: [[Special:NewPages|Új lapok]])',
-'rcnotefrom' => 'Alább a <b>$2</b> óta történt változtatások láthatóak (<b>$1</b> db).',
+'rcnotefrom' => 'Alább a <b>$2</b> óta történt változtatások láthatóak (legfeljebb <b>$1</b> db).',
 'rclistfrom' => '$1 után történt változtatások megtekintése',
 'rcshowhideminor' => 'apró szerkesztések $1',
+'rcshowhideminor-show' => 'megjelenítése',
+'rcshowhideminor-hide' => 'elrejtése',
 'rcshowhidebots' => 'botok szerkesztéseinek $1',
-'rcshowhideliu' => '$1 bejelentkezett felhasználó',
+'rcshowhidebots-show' => 'megjelenítése',
+'rcshowhidebots-hide' => 'elrejtése',
+'rcshowhideliu' => 'bejelentkezett szerkesztők szerkesztéseinek $1',
+'rcshowhideliu-show' => 'megjelenítése',
+'rcshowhideliu-hide' => 'elrejtése',
 'rcshowhideanons' => 'névtelen szerkesztések $1',
+'rcshowhideanons-show' => 'megjelenítése',
+'rcshowhideanons-hide' => 'elrejtése',
 'rcshowhidepatr' => 'ellenőrzött szerkesztések $1',
+'rcshowhidepatr-show' => 'megjelenítése',
+'rcshowhidepatr-hide' => 'elrejtése',
 'rcshowhidemine' => 'saját szerkesztések $1',
+'rcshowhidemine-show' => 'megjelenítése',
+'rcshowhidemine-hide' => 'elrejtése',
 'rclinks' => 'Az elmúlt $2 nap utolsó $1 változtatása legyen látható<br />$3',
 'diff' => 'eltér',
 'hist' => 'történet',
@@ -1954,6 +1985,7 @@ Ez a wiki publikus, így a biztonság miatt az img_auth.php ki van kapcsolva.',
 'listfiles_size' => 'Méret',
 'listfiles_description' => 'Leírás',
 'listfiles_count' => 'Változatok',
+'listfiles-latestversion' => 'Aktuális változat',
 'listfiles-latestversion-yes' => 'Igen',
 'listfiles-latestversion-no' => 'Nem',
 
@@ -2310,8 +2342,8 @@ Feladóként a [[Special:Preferences|beállításaid]]nál megadott e-mail-címe
 'watchnologin' => 'Nem vagy bejelentkezve',
 'watchnologintext' => 'Ahhoz, hogy figyelőlistád lehessen, [[Special:UserLogin|be kell lépned]].',
 'addwatch' => 'Hozzáadás a figyelőlistához',
-'addedwatchtext' => "A(z) „[[:$1]]” lapot hozzáadtam a [[Special:Watchlist|figyelőlistádhoz]].
-Ezután minden, a lapon vagy annak vitalapján történő változást ott fogsz látni, és a lap '''vastagon''' fog szerepelni a [[Special:RecentChanges|friss változtatások]] lapon, hogy könnyen észrevehető legyen.",
+'addedwatchtext' => 'A(z) „[[:$1]]” lapot hozzáadtam a [[Special:Watchlist|figyelőlistádhoz]].
+Ezután minden, a lapon vagy annak vitalapján történő változást ott fogsz látni.',
 'removewatch' => 'Eltávolítás a figyelőlistáról',
 'removedwatchtext' => 'A(z) „[[:$1]]” lapot eltávolítottam a [[Special:Watchlist|figyelőlistáról]].',
 'watch' => 'Lap figyelése',
@@ -2327,6 +2359,7 @@ Ezután minden, a lapon vagy annak vitalapján történő változást ott fogsz
 'watchmethod-list' => 'a legfrissebb szerkesztésekben található figyelt lapok',
 'watchlistcontains' => 'A figyelőlistádon {{PLURAL:$1|egy|$1}} lap szerepel.',
 'iteminvalidname' => "Probléma a '$1' elemmel: érvénytelen név...",
+'wlnote2' => 'Alább az utolsó {{PLURAL:$1| <strong> $1 </strong> óra}} változásai láthatók. A lista frissítésének ideje  $2 $3',
 'wlshowlast' => 'Az elmúlt $1 órában | $2 napon | $3 történt változtatások legyenek láthatóak',
 'watchlist-options' => 'A figyelőlista beállításai',
 
@@ -2360,9 +2393,9 @@ A szerkesztő elérhetősége:
 e-mail küldése: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Amíg nem keresed fel az oldalt, addig nem érkeznek újabb értesítések az oldal változásaival kapcsolatban. A figyelőlistádon is beállíthatod, hogy újból kapj értesítéseket, az összes lap után.
+Amíg nem keresed fel az oldalt bejelentkezve, addig nem érkeznek újabb értesítések az oldal változásaival kapcsolatban. A figyelőlistádon is beállíthatod, hogy újból kapj értesítéseket, az összes lap után.
 
-             Baráti üdvözlettel: a(z) {{SITENAME}} értesítő rendszere
+Baráti üdvözlettel: a(z) {{SITENAME}} értesítő rendszere
 
 --
 Az e-mail értesítéseid módosításához keresd fel a 
@@ -2693,7 +2726,7 @@ Add meg a blokkolás okát is (például idézd a blokkolandó személy által v
 'blocklogpage' => 'Blokkolási napló',
 'blocklog-showlog' => 'Ez a felhasználó már blokkolva volt korábban. A blokkolási napló ide vonatkozó része alább látható:',
 'blocklog-showsuppresslog' => 'Ez a felhasználó korábban blokkot kapott, és a naplóbejegyzés el lett rejtve. Az elrejtési napló alább látható tájékoztatásként:',
-'blocklogentry' => '„[[$1]]” blokkolva $2 $3 időtartamra',
+'blocklogentry' => '„[[$1]]” blokkolva $2 időtartamra $3',
 'reblock-logentry' => 'megváltoztatta [[$1]] blokkjának beállításait, a blokk lejárta: $2 $3',
 'blocklogtext' => 'Ez a felhasználókra helyezett blokkoknak és azok feloldásának listája. Az automatikus blokkolt IP címek nem szerepelnek a listában. Lásd még [[Special:BlockList|a jelenleg életben lévő blokkok listáját]].',
 'unblocklogentry' => '„$1” blokkolása feloldva',
@@ -2707,7 +2740,7 @@ Add meg a blokkolás okát is (például idézd a blokkolandó személy által v
 'range_block_disabled' => 'A rendszerfelelős tartományblokkolás létrehozási képessége letiltott.',
 'ipb_expiry_invalid' => 'Hibás lejárati dátum.',
 'ipb_expiry_temp' => 'A láthatatlan felhasználóinév-blokkok lehetnek állandóak.',
-'ipb_hide_invalid' => 'A felhasználói fiókot nem lehet elrejteni; lehet, hogy túl sok szerkesztése van.',
+'ipb_hide_invalid' => 'A felhasználói fiókot nem lehet elrejteni; több mint $1 szerkesztése van.',
 'ipb_already_blocked' => '"$1" már blokkolva',
 'ipb-needreblock' => '$1 már blokkolva van. Meg szeretnéd változtatni a beállításokat?',
 'ipb-otherblocks-header' => 'További {{PLURAL:$1|blokk|blokkok}}',
@@ -2930,7 +2963,7 @@ Mentsd el a számítógépedre, majd töltsd fel ide.',
 'importuploaderrortemp' => 'Az importálandó fájl feltöltése nem sikerült. Nem létezik ideiglenes mappa.',
 'import-parse-failure' => 'XML elemzési hiba importáláskor',
 'import-noarticle' => 'Nincs importálandó lap!',
-'import-nonewrevisions' => 'A korábban importált összes változat.',
+'import-nonewrevisions' => 'Nincs változat importálva (mindet korábban importálták vagy a hiba miatt program kihagyta).',
 'xml-error-string' => '$1 a(z) $2. sorban, $3. oszlopban ($4. bájt): $5',
 'import-upload' => 'XML-adatok feltöltése',
 'import-token-mismatch' => 'Elveszett a session adat, próbálkozz újra.',
@@ -3099,7 +3132,7 @@ Ez valószínűleg egy olyan link miatt van, ami egy feketelistán lévő oldalr
 'pageinfo-views' => 'Megtekintések száma',
 'pageinfo-watchers' => 'Figyelők száma',
 'pageinfo-few-watchers' => 'Kevesebb mint $1 szerkesztő figyeli',
-'pageinfo-redirects-name' => 'Átirányítások erre a lapra',
+'pageinfo-redirects-name' => 'Átirányítások száma erre a lapra',
 'pageinfo-subpages-name' => 'A lap allapjai',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|átirányítás}}; $3 {{PLURAL:$3|nem átirányítás}})',
 'pageinfo-firstuser' => 'A lap létrehozója',
@@ -3821,7 +3854,7 @@ minden egyes sor egy figyelt lap címe. Ha kész vagy, kattints a lista alatt ta
 'version-hook-name' => 'Hook neve',
 'version-hook-subscribedby' => 'Használja',
 'version-version' => '(verzió: $1)',
-'version-license' => 'Licenc',
+'version-license' => 'MediaWiki licenc',
 'version-poweredby-credits' => "Ez a wiki '''[https://www.mediawiki.org/ MediaWiki]''' szoftverrel működik, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'mások',
 'version-poweredby-translators' => 'translatewiki.net fordítók',
@@ -3891,6 +3924,7 @@ A MediaWikit abban a reményben terjesztjük, hogy hasznos lesz, de GARANCIA NÉ
 'tags' => 'Érvényes módosítási címkék',
 'tag-filter' => '[[Special:Tags|Címke]]szűrő:',
 'tag-filter-submit' => 'Szűrő',
+'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Címke|Címkék}}]]: $2)',
 'tags-title' => 'Címkék',
 'tags-intro' => 'Ez a lap azokat a címkéket és jelentéseiket tartalmazza, amikkel a szoftver megjelölhet egy szerkesztést.',
 'tags-tag' => 'Címke neve',
@@ -3946,14 +3980,14 @@ A MediaWikit abban a reményben terjesztjük, hogy hasznos lesz, de GARANCIA NÉ
 'logentry-delete-delete' => '$1 törölte a következő lapot: $3',
 'logentry-delete-restore' => '$1 helyreállította a következő lapot: $3',
 'logentry-delete-event' => '$1 megváltoztatta {{PLURAL:$5|egy napló bejegyzés|$5 napló bejegyzés}} láthatóságát a(z) $3 című lapon: $4',
-'logentry-delete-revision' => '$1 módosította a(z) $3 című lap {{PLURAL:$5|egy|$1}} lapváltozatának láthatóságát: $4',
-'logentry-delete-event-legacy' => '$1 módosította a(z) $3 című lap naplóbejegyzéseinek láthatóságát',
-'logentry-delete-revision-legacy' => '$1 módosította a(z) $3 című lap lapváltozatainak láthatóságát',
-'logentry-suppress-delete' => '$1 elrejtette a következő lapot: $3',
-'logentry-suppress-event' => '$1 rejtetten megváltoztatta {{PLURAL:$5|egy napló bejegyzés|$5 napló bejegyzés}} láthatóságát a(z) $3 című lapon: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|módosította}} a(z) $3 című lap {{PLURAL:$5|egy|$5}} lapváltozatának láthatóságát: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|módosította}} a(z) $3 című lap naplóbejegyzéseinek láthatóságát',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|módosította}} a(z) $3 című lap lapváltozatainak láthatóságát',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|elrejtette}} a következő lapot: $3',
+'logentry-suppress-event' => '$1 rejtetten {{GENDER:$2|megváltoztatta}} {{PLURAL:$5|egy|$5}} naplóbejegyzés láthatóságát a(z) $3 című lapon: $4',
 'logentry-suppress-revision' => '$1 rejtetten megváltoztatta {{PLURAL:$5|egy változat|$5 változat}} láthatóságát a(z) $3 című lapon: $4',
-'logentry-suppress-event-legacy' => '$1 rejtetten megváltoztatta napló bejegyzések láthatóságát a(z) $3 című lapon',
-'logentry-suppress-revision-legacy' => '$1 rejtetten megváltoztatta változatok láthatóságát a(z) $3 lapon',
+'logentry-suppress-event-legacy' => '$1 rejtetten {{GENDER:$2|megváltoztatta}} napló bejegyzések láthatóságát a(z) $3 című lapon',
+'logentry-suppress-revision-legacy' => '$1 rejtetten {{GENDER:$2|megváltoztatta}} változatok láthatóságát a(z) $3 lapon',
 'revdelete-content-hid' => 'tartalom elrejtve',
 'revdelete-summary-hid' => 'szerkesztési összefoglaló elrejtve',
 'revdelete-uname-hid' => 'szerkesztő elrejtve',
@@ -3966,13 +4000,13 @@ A MediaWikit abban a reményben terjesztjük, hogy hasznos lesz, de GARANCIA NÉ
 'logentry-move-move-noredirect' => '$1 átnevezte a(z) $3 lapot $4 lapra átirányítás nélkül',
 'logentry-move-move_redir' => '$1 átnevezte a(z) $3 lapot $4 lapra az átirányítást felülírva',
 'logentry-move-move_redir-noredirect' => '$1 átnevezte a(z) $3 lapot $4 lapra az átirányítást felülírva, átirányítás nélkül',
-'logentry-patrol-patrol' => '$1 a(z) $3 lap $4 változatát ellenőrzöttnek jelölte',
-'logentry-patrol-patrol-auto' => '$1 a(z) $3 lap $4 változatát automatikusan ellenőrzöttnek jelölte',
-'logentry-newusers-newusers' => '$1 felhasználói fiók létrehozva',
+'logentry-patrol-patrol' => '$1 a(z) $3 lap $4 változatát ellenőrzöttnek {{GENDER:$2|jelölte}}',
+'logentry-patrol-patrol-auto' => '$1 a(z) $3 lap $4 változatát automatikusan ellenőrzöttnek {{GENDER:$2|jelölte}}',
+'logentry-newusers-newusers' => '$1 felhasználói fiók {{GENDER:$2|létrehozva}}',
 'logentry-newusers-create' => '$1 felhasználói fiók létrehozva',
 'logentry-newusers-create2' => '$1 létrehozta $3 felhasználói fiókját',
 'logentry-newusers-byemail' => 'Szerkesztői lap $3 néven létrehozva $1 által, jelszó kiküldve emailben.',
-'logentry-newusers-autocreate' => '$1 fiók automatikusan létrehozva',
+'logentry-newusers-autocreate' => '$1 felhasználói fiók automatikusan létrehozva',
 'logentry-rights-rights' => '$1 megváltoztatta $3 csoporttagságát erről: $4 erre: $5',
 'logentry-rights-rights-legacy' => '$1 megváltoztatta $3 csoporttagságát',
 'logentry-rights-autopromote' => '$1 automatikusan előléptetve erről: $4 erre: $5',
@@ -4053,10 +4087,14 @@ A MediaWikit abban a reményben terjesztjük, hogy hasznos lesz, de GARANCIA NÉ
 # Image rotation
 'rotate-comment' => 'Elforgattam a képet $1 fokkal, az óramutató járásával megegyező irányban',
 
+# Limit report
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bájt}}',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bájt}}',
+
 # Special:ExpandTemplates
 'expandtemplates' => 'Sablonok kibontása',
 'expand_templates_intro' => 'Ez a speciális lap a bevitt szövegekben megkeresi a sablonokat és rekurzívan kibontja őket.
-Kibontja az elemző függvényeket (pl. <nowiki>{{</nowiki>#language:...}}), és a változókat (pl. <nowiki>{{</nowiki>CURRENTDAY}}) is – mindent, ami a kettős kapcsos zárójelek között van.',
+Kibontja a támogatott elemző függvényeket (pl. <code><nowiki>{{</nowiki>#language:...}}</code>), és a változókat (pl. <code><nowiki>{{</nowiki>CURRENTDAY}}</code>) is – mindent, ami a kettős kapcsos zárójelek között van.',
 'expand_templates_title' => 'Szöveg címe, például {{FULLPAGENAME}} sablonhoz:',
 'expand_templates_input' => 'Vizsgálandó szöveg',
 'expand_templates_output' => 'Eredmény',
index 6138e69..79e2567 100644 (file)
@@ -301,7 +301,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Ցույց տալ էջ հսկող մասնակիցների թիվը',
 'tog-oldsig' => 'Ներկայիս ստորագրությունն է․',
 'tog-fancysig' => 'Ստորագրությունը վիքիտեքստի տեսքով (առանց ավտոմատ հղման)',
-'tog-uselivepreview' => 'Õ\95Õ£Õ¿Õ¡Õ£Õ¸Ö\80Õ®Õ¥Õ¬ Õ¸Ö\82Õ²Õ«Õ² Õ¶Õ¡Õ­Õ¡Õ¤Õ«Õ¿Õ¸Ö\82Õ´ (JavaScript) (Õ\93որձնական)',
+'tog-uselivepreview' => 'Õ\95Õ£Õ¿Õ¡Õ£Õ¸Ö\80Õ®Õ¥Õ¬ Õ¡Õ¶Õ´Õ«Õ»Õ¡Õ¯Õ¡Õ¶ Õ¶Õ¡Õ­Õ¡Õ¤Õ«Õ¿Õ¸Ö\82Õ´, Õ¡Õ¼Õ¡Õ¶Ö\81 Õ§Õ»Õ¨ Õ¾Õ¥Ö\80Õ¢Õ¥Õ¼Õ¶Õ¥Õ¬Õ¸Ö\82 (Ö\83որձնական)',
 'tog-forceeditsummary' => 'Նախազգուշացնել խմբագրման ամփոփումը դատարկ թողնելու դեպքում',
 'tog-watchlisthideown' => 'Թաքցնել իմ խմբագրումները հսկացանկից',
 'tog-watchlisthidebots' => 'Թաքցնել բոտերի խմբագրումները հսկացանկից',
@@ -317,7 +317,7 @@ $messages = array(
 
 'underline-always' => 'Միշտ',
 'underline-never' => 'Երբեք',
-'underline-default' => 'Օգտագործել զննարկիչի նախընտրությունները',
+'underline-default' => 'Դիտարկչի կամ թեմայի լռելյայն ոճով',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Խմբագրման շրջանի տառատեսակի ձևը.',
@@ -437,7 +437,6 @@ $messages = array(
 'vector-action-protect' => 'Պաշտպանել',
 'vector-action-undelete' => 'Վերականգնել',
 'vector-action-unprotect' => 'Փոխել պաշտպանումը',
-'vector-simplesearch-preference' => 'Միացնել պարզեցված որոնման դաշտը (միայն Վեկտոր թեմայի դեպքում)',
 'vector-view-create' => 'Ստեղծել',
 'vector-view-edit' => 'Խմբագրել',
 'vector-view-history' => 'Դիտել պատմությունը',
@@ -514,7 +513,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => '{{grammar:genitive|{{SITENAME}}}} մասին',
 'aboutpage' => 'Project:Էությունը',
-'copyright' => 'Ô¿Õ¡ÕµÖ\84Õ« Õ¢Õ¸Õ¾Õ¡Õ¶Õ¤Õ¡Õ¯Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶Õ¨ Õ£Õ¿Õ¶Õ¾Õ¸Ö\82Õ´ Õ§ Â«$1» Õ¡Ö\80Õ¿Õ¸Õ¶Õ¡Õ£Ö\80Õ« Õ¿Õ¡Õ¯։',
+'copyright' => 'Ô¿Õ¡ÕµÖ\84Õ« Õ¢Õ¸Õ¾Õ¡Õ¶Õ¤Õ¡Õ¯Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶Õ¨ Õ©Õ¸Õ²Õ¡Ö\80Õ¯Õ¾Õ¡Õ® Õ§ $1 Õ©Õ¸Ö\82ÕµÕ¬Õ¡Õ¿Ö\80Õ¡Õ£Ö\80Õ¸Õ¾, Õ¥Õ©Õ¥ Õ¡ÕµÕ¬ Õ¢Õ¡Õ¶ Õ¶Õ·Õ¾Õ¡Õ® Õ¹Õ§։',
 'copyrightpage' => '{{ns:project}}:Հեղինակային իրավունքներ',
 'currentevents' => 'Ընթացիկ իրադարձություններ',
 'currentevents-url' => 'Project:Ընթացիկ իրադարձություններ',
@@ -635,7 +634,7 @@ $1',
 'cannotdelete-title' => 'Հնարավոր չէ ջնջել $1 էջը',
 'badtitle' => 'Անընդունելի անվանում',
 'badtitletext' => 'Հարցված էջի անվանումը անընդունելի է, դատարկ է կամ սխալ միջ-լեզվական կամ ինտերվիքի անվանում է։ Հնարավոր է, որ այն պարունակում է անթույլատրելի սիմվոլներ։',
-'perfcached' => 'Õ\80Õ¥Õ¿Ö\87ÕµÕ¡Õ¬ Õ¿Õ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö\80Õ¨ Õ¾Õ¥Ö\80Ö\81Õ¾Õ¡Õ® Õ¥Õ¶ Ö\84Õ¥Õ·Õ«Ö\81 և հնարավոր է չարտացոլեն վերջին փոփոխությունները։ Առավելագույն {{PLURAL:$1|արդյունք|$1 արդյունք}} է հասանելի քեշում։',
+'perfcached' => 'Õ\8dÕ¿Õ¸Ö\80Ö\87 Õ¿Õ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö\80Õ¨ ÕºÕ¡Õ°Õ¸Ö\82Õ½Õ¿Õ¡Õ¾Õ¸Ö\80Õ¾Õ¡Õ® Õ¥Õ¶ և հնարավոր է չարտացոլեն վերջին փոփոխությունները։ Առավելագույն {{PLURAL:$1|արդյունք|$1 արդյունք}} է հասանելի քեշում։',
 'perfcachedts' => 'Հետևյալ տվյալները վերցված են քեշից և վերջին անգամ թարմացվել են $1։ A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
 'querypage-no-updates' => 'Այս էջի փոփոխությունները ներկայումս արգելված են։ Այստեղի տվյալները այժմ չեն թարմացվի։',
 'viewsource' => 'Դիտել վիքիկոդը',
@@ -783,6 +782,9 @@ $2',
 'login-throttled' => 'Դուք կատարել եք չափից շատ մուտքի փորձ։
 Խնդրում ենք սպասել որոշ ժամանակ կրկին փորձելուց առաջ։',
 'loginlanguagelabel' => 'Լեզու՝ $1',
+'pt-login' => 'Մտնել',
+'pt-createaccount' => 'Ստեղծել մասնակցի հաշիվ',
+'pt-userlogout' => 'Դուրս գալ',
 
 # Email sending
 'php-mail-error-unknown' => 'Անհայտ սխալ PHP-ի mail() ֆունկցիայում',
@@ -912,9 +914,9 @@ $2',
 Համակարգ մուտք գործելուն պես կարող եք ''[[Special:ChangePassword|փոխել գաղտնաբառը]]''։",
 'newarticle' => '(Նոր)',
 'newarticletext' => "Դուք հղվել եք դեռևս գոյություն չունեցող էջի։ 
\86Õ¸Ö\80 Õ§Õ» Õ½Õ¿Õ¥Õ²Õ®Õ¥Õ¬Õ¸Ö\82 Õ°Õ¡Õ´Õ¡Ö\80 Õ¶Õ¥Ö\80Ö\84Ö\87Õ¸Ö\82Õ´ Õ£Õ¿Õ¶Õ¾Õ¸Õ² Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ´Õ¡Õ¶ Õ¤Õ¡Õ·Õ¿Õ¸Ö\82Õ´ Õ¡Õ¾Õ¥Õ¬Õ¡Ö\81Ö\80Õ¥Ö\84 Õ±Õ¥Ö\80 Õ¿Õ¥Ö\84Õ½Õ¿Õ¨, այնուհետև սեղմեք '''Հիշել էջը''' (այցելեք [[{{MediaWiki:Helppage}}|օգնության էջը]]՝ մանրամասն տեղեկությունների համար)։ 
\86Õ¸Ö\80 Õ§Õ» Õ½Õ¿Õ¥Õ²Õ®Õ¥Õ¬Õ¸Ö\82 Õ°Õ¡Õ´Õ¡Ö\80 Õ½Õ¿Õ¸Ö\80Ö\87 Õ£Õ¿Õ¶Õ¾Õ¸Õ² Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ´Õ¡Õ¶ Õ¤Õ¡Õ·Õ¿Õ¸Ö\82Õ´ Õ¡Õ¾Õ¥Õ¬Õ¡Ö\81Ö\80Õ¥Ö\84 Õ¿Õ¥Ö\84Õ½Õ¿, այնուհետև սեղմեք '''Հիշել էջը''' (այցելեք [[{{MediaWiki:Helppage}}|օգնության էջը]]՝ մանրամասն տեղեկությունների համար)։ 
 
-ÔµÕ©Õ¥ Õ¤Õ¸Ö\82Ö\84 Õ½Õ­Õ¡Õ¬Õ´Õ¡Õ´Õ¢ Õ¥Ö\84 Õ¡ÕµÕ½Õ¿Õ¥Õ² Õ°Õ¡ÕµÕ¿Õ¶Õ¾Õ¥Õ¬, Õ¡ÕºÕ¡ Õ½Õ¥Õ²Õ´Õ¥Ö\84 Õ±Õ¥Ö\80 Õ¦Õ¶Õ¶Õ¡Ö\80Õ¯Õ«չի '''հետ''' (back) կոճակը։",
+ÔµÕ©Õ¥ Õ¤Õ¸Ö\82Ö\84 Õ½Õ­Õ¡Õ¬Õ´Õ¡Õ´Õ¢ Õ¥Ö\84 Õ¡ÕµÕ½Õ¿Õ¥Õ² Õ°Õ¡ÕµÕ¿Õ¶Õ¾Õ¥Õ¬, Õ¡ÕºÕ¡ Õ½Õ¥Õ²Õ´Õ¥Ö\84 Õ±Õ¥Ö\80 Õ¤Õ«Õ¿Õ¡Ö\80Õ¯չի '''հետ''' (back) կոճակը։",
 'anontalkpagetext' => "----
 ''Այս քննարկման էջը պատկանում է անանուն մասնակցին, որը դեռ չի ստեղծել մասնակցային հաշիվ կամ չի մտել համակարգ մասնակցի անունով։''
 Այդ իսկ պատճառով օգտագործվում է թվային IP-հասցեն։
@@ -1075,8 +1077,8 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 (նախ) = համեմատել նախորդ տարբերակի հետ,<br />'''չ''' = չնչին խմբագրում",
 'history-fieldset-title' => 'Դիտել պատմությունը',
 'history-show-deleted' => 'Միայն ջնջված',
-'histfirst' => 'Առաջին',
-'histlast' => 'Õ\8eÕ¥Ö\80Õ»Õ«Õ¶',
+'histfirst' => 'ամենահին',
+'histlast' => 'Õ¡Õ´Õ¥Õ¶Õ¡Õ©Õ¡Ö\80Õ´',
 'historysize' => '({{PLURAL:$1|1 բայթ|$1 բայթ}})',
 'historyempty' => '(դատարկ)',
 
@@ -1089,9 +1091,10 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 Փորձեք [[Special:Search|որոնել վիքիում]] նոր համանման էջեր։',
 
 # Revision deletion
-'rev-deleted-comment' => '(Õ´Õ¥Õ¯Õ¶Õ¡Õ¢Õ¡Õ¶Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶ը հեռացված է)',
+'rev-deleted-comment' => '(Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ´Õ¡Õ¶ Õ¡Õ´Ö\83Õ¸Ö\83Õ¸Ö\82Õ´ը հեռացված է)',
 'rev-deleted-user' => '(մասնակցի անունը ջնջված է)',
 'rev-deleted-event' => '(գրությունը հեռացված է)',
+'rev-deleted-user-contribs' => '[մասնակցի անունը կամ ԱյՊի հասցեն հեռացված է, խմբագրումը թաքցված է ներդրումներից]',
 'rev-deleted-text-permission' => 'Էջի այս տարբերակը հեռացված է։
 Հնարավոր է մանրամասնություններ լինեն [{{fullurl:{{ns:special}}:Log/delete|page={{PAGENAMEE}}}} ջնջման տեղեկամատյանում]։',
 'rev-deleted-text-view' => "Էջի այս տարբերակը '''ջնջված''' է։
@@ -1112,9 +1115,6 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'revdelete-show-file-submit' => 'Այո',
 'revdelete-selected' => "'''[[:$1]] էջի ընտրված {{PLURAL:$2|տարբերակը|տարբերակները}}.'''",
 'logdelete-selected' => "'''Տեղեկամատյանի ընտրված {{PLURAL:$1|գրառումը|գրառումները}}.'''",
-'revdelete-text' => "'''Ջնջված տարբերակները երևալու են էջերի պատմության մեջ և տեղեկամատյաններում, բայց դրանց պարունակության մի մասը հասարակ այցելուներին չի ցուցադրվելու։'''
-
-Ադմինիստրատորները հնարավորություն կունենան դիտել թաքցված պարունակությունը, ինչպես նաև վերականգնել այն այս նույն ինտերֆեյսի միջոցով, բացառությամբ ավելորդ սահմանափակումների դեպքում։",
 'revdelete-legend' => 'Սահմանել տեսանելիության սահմանափակումներ',
 'revdelete-hide-text' => 'Թաքցնել տարբերակի տեքստը',
 'revdelete-hide-image' => 'Թաքցնել նիշքի պարունակությունը',
@@ -1123,13 +1123,15 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'revdelete-hide-user' => 'Թաքցնել հեղինակի մասնակցի անունը/IP',
 'revdelete-hide-restricted' => 'Թաքցնել տվյալները և՛ ադմինիստրատորներից, և՛ այլ մասնակիցներից',
 'revdelete-radio-same' => '(չի կարելի խմբագրել)',
-'revdelete-radio-set' => 'Ô±ÕµÕ¸',
-'revdelete-radio-unset' => 'Õ\88Õ¹',
+'revdelete-radio-set' => 'Ô¹Õ¡Ö\84Ö\81Õ¾Õ¡Õ®',
+'revdelete-radio-unset' => 'Õ\8fÕ¥Õ½Õ¡Õ¶Õ¥Õ¬Õ«',
 'revdelete-suppress' => 'Թաքցնել տվյալները ադմինիստրատորներից և մյուսներից նոյնպես',
 'revdelete-unsuppress' => 'Հանել սահմանափակումները վերականգնված տարբերակներից',
 'revdelete-log' => 'Պատճառ.',
 'revdelete-submit' => 'Կիրառել ընտրված {{PLURAL:$1|տարբերակի|տարբերակների}} վրա',
 'revdelete-success' => "'''Տարբերակի տեսանելիությունը բարեհաջող թարմացված է։'''",
+'revdelete-failure' => '<strong>Խմբագրման տեսանելիություն հնարավոր չէր փոփոխել՝</strong>
+$1',
 'logdelete-success' => "'''Իրադարձության տեսանելիությունը փոփոխված է։'''",
 'revdel-restore' => 'Փոխել տեսանելիությունը',
 'pagehist' => 'Էջի պատմություն',
@@ -1154,6 +1156,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'compareselectedversions' => 'Համեմատել ընտրած տարբերակները',
 'showhideselectedversions' => 'Ցուցադրել/թաքցնել ընտրված խմբագրումները',
 'editundo' => 'հետ շրջել',
+'diff-empty' => '(Տարբերություն չկա)',
 
 # Search results
 'searchresults' => 'Որոնման արդյունքներ',
@@ -1255,7 +1258,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'timezoneregion-indian' => 'Հնդկական Օվկիանոս',
 'timezoneregion-pacific' => 'Խաղաղ օվկիանոս',
 'allowemail' => 'Թույլատրել էլ-նամակներ մյուս մասնակիցներից',
-'prefs-searchoptions' => 'Õ\88Ö\80Õ¸Õ¶Õ´Õ¡Õ¶ Õ¨Õ¶Õ¿Ö\80Õ¡Õ¶Ö\84Õ¶Õ¥Ö\80',
+'prefs-searchoptions' => 'Õ\88Ö\80Õ¸Õ¶Õ¸Ö\82Õ´',
 'prefs-namespaces' => 'Անվանատարածք',
 'defaultns' => 'Հակառակ դեպքում, որոնել այս անվանատարծքներում․',
 'default' => 'լռությամբ',
@@ -1393,11 +1396,23 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'rcnotefrom' => "Ստորև բերված են փոփոխությունները սկսած՝ '''$2''' (մինչև՝ '''$1''')։",
 'rclistfrom' => 'Ցույց տալ նոր փոփոխությունները սկսած $1',
 'rcshowhideminor' => '$1 չնչին խմբագրումները',
+'rcshowhideminor-show' => 'Ցուցադրել',
+'rcshowhideminor-hide' => 'Թաքցնել',
 'rcshowhidebots' => '$1 բոտերին',
+'rcshowhidebots-show' => 'Ցուցադրել',
+'rcshowhidebots-hide' => 'Թաքցնել',
 'rcshowhideliu' => '$1 մուտք գործած մասնակիցներին',
+'rcshowhideliu-show' => 'Ցուցադրել',
+'rcshowhideliu-hide' => 'Թաքցնել',
 'rcshowhideanons' => '$1 անանուն մասնակիցներին',
+'rcshowhideanons-show' => 'Ցուցադրել',
+'rcshowhideanons-hide' => 'Թաքցնել',
 'rcshowhidepatr' => '$1 ստուգված խմբագրումները',
+'rcshowhidepatr-show' => 'Ցուցադրել',
+'rcshowhidepatr-hide' => 'Թաքցնել',
 'rcshowhidemine' => '$1 իմ խմբագրումները',
+'rcshowhidemine-show' => 'Ցուցադրել',
+'rcshowhidemine-hide' => 'Թաքցնել',
 'rclinks' => 'Ցույց տալ վերջին $1 փոփոխությունները վերջին $2 օրվա ընթացքում<br />$3',
 'diff' => 'տարբ',
 'hist' => 'պատմ',
@@ -1411,8 +1426,9 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'rc_categories_any' => 'Բոլոր',
 'rc-change-size-new' => '$1 {{PLURAL:$1|բայթ|բայթ}} փոփոխությունից հետո',
 'newsectionsummary' => '/* $1 */ Նոր բաժին',
-'rc-enhanced-expand' => 'Ցույց տալ մանրամասներ (պահանջում է JavaScript)',
+'rc-enhanced-expand' => 'Ցուցադրել մանրամասներ (պահանջում է ՋավաՍկրիպտ)',
 'rc-enhanced-hide' => 'Թաքցնել մանրամասները',
+'rc-old-title' => 'Ի սկզբանե ստեղծված էր որպես «$1»',
 
 # Recent changes linked
 'recentchangeslinked' => 'Կապված փոփոխություններ',
@@ -1546,11 +1562,13 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'linkstoimage' => 'Հետևյալ {{PLURAL:$1|էջը հղվում է|$1 էջերը հղվում են}} այս նիշքին՝',
 'nolinkstoimage' => 'Այս նիշքին հղվող էջեր չկան։',
 'sharedupload' => 'Այս նիշքը $1 զետեղարանից է և կարող է օգտագործվել այլ նախագծերում։',
-'sharedupload-desc-here' => 'Այս նիշքը $1-ից է և թուլատրելի է այլ նախագծերի կողմից օգտագործվել։ [$2 Նիշքի նկարագրման էջի] նկարագրությունը ներկայացված է ներքո։',
+'sharedupload-desc-here' => 'Այս նիշքը տեղադրված է $1ում է և այն կարող է օգտագործվել այլ նախագծերի կողմից։
+$1ում [$2 նիշքի մասին տեղեկությունների] հիմնական մասը ներկայացված է ստորև։',
 'filepage-nofile' => 'Այս անունով նիշք գոյություն չունի։',
 'filepage-nofile-link' => 'Այս անունով նիշք գոյություն չունի, դուք կարող եք [$1 բեռնել այն]:',
 'uploadnewversion-linktext' => 'Բեռնել այս նիշքի նոր տարբերակ',
 'shared-repo-from' => '$1-ից',
+'shared-repo-name-wikimediacommons' => 'Վիքիպահեստ',
 
 # File reversion
 'filerevert' => 'Հետ շրջել $1-ը',
@@ -2469,7 +2487,7 @@ $1',
 'widthheightpage' => '$1 × $2, $3 էջեր',
 'file-info' => 'նիշքի չափ՝ $1, MIME-տեսակ՝ $2',
 'file-info-size' => '$1 × $2 փիքսել, նիշքի չափը՝ $3, MIME-տեսակը՝ $4',
-'file-nohires' => 'Ô²Õ¡Ö\80Õ±Ö\80 Õ©Õ¸Ö\82ÕµÕ¬Õ¡Õ¿Õ¾Õ¸Ö\82Õ©ÕµÕ¡Õ´Õ¢ տարբերակ չկա։',
+'file-nohires' => 'Ô±Õ¾Õ¥Õ¬Õ« Õ¢Õ¡Ö\80Õ±Ö\80 Õ¯Õ¥Õ¿Õ¡Õ¹Õ¡Ö\83Õ¸Õ¾ տարբերակ չկա։',
 'svg-long-desc' => 'SVG-նիշք, անվանապես $1 × $2 փիքսել, նիշքի չափը՝ $3',
 'show-big-image' => 'Լրիվ թույլատվությամբ',
 
index 7280706..00a2aab 100644 (file)
@@ -182,7 +182,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Inviar me copias del messages de e-mail que io invia a altere usatores',
 'tog-diffonly' => 'Non monstrar le contento del pagina sub le comparation de duo versiones',
 'tog-showhiddencats' => 'Monstrar categorias celate',
-'tog-noconvertlink' => 'Disactivar conversion de titulos de ligamines',
 'tog-norollbackdiff' => 'Omitter le diff post le execution de un revocation',
 'tog-useeditwarning' => 'Advertir me quando io quita un pagina de modification sin publicar le cambiamentos',
 'tog-prefershttps' => 'Sempre usar un connexion secur in session aperte',
@@ -309,7 +308,6 @@ $messages = array(
 'vector-action-protect' => 'Proteger',
 'vector-action-undelete' => 'Restaurar',
 'vector-action-unprotect' => 'Cambiar protection',
-'vector-simplesearch-preference' => 'Activar le barra de recerca simplificate (solmente in apparentia Vector)',
 'vector-view-create' => 'Crear',
 'vector-view-edit' => 'Modificar',
 'vector-view-history' => 'Vider historia',
@@ -595,8 +593,6 @@ Non oblida personalisar tu [[Special:Preferences|preferentias in {{SITENAME}}]].
 'gotaccountlink' => 'Aperir session',
 'userlogin-resetlink' => 'Datos de authentication oblidate?',
 'userlogin-resetpassword-link' => 'Contrasigno oblidate?',
-'helplogin-url' => 'Help:Aperir session',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Adjuta a aperir session]]',
 'userlogin-loggedin' => 'Tu ha jam aperite session como {{GENDER:$1|$1}}.
 Usa le formulario sequente pro aperir session como altere usator.',
 'userlogin-createanother' => 'Crear un altere conto',
@@ -697,6 +693,9 @@ Per favor attende $1 ante de probar lo novemente.',
 'suspicious-userlogout' => 'Le requesta de clauder le session ha essite refusate proque illo pare haber essite inviate per un navigator o proxy de cache defectuose.',
 'createacct-another-realname-tip' => 'Le nomine real es optional.
 Si tu opta pro dar lo, isto essera usate pro dar al usator attribution pro su contributiones.',
+'pt-login' => 'Aperir session',
+'pt-createaccount' => 'Crear conto',
+'pt-userlogout' => 'Clauder session',
 
 # Email sending
 'php-mail-error-unknown' => 'Error incognite in le function mail() de PHP',
@@ -722,8 +721,13 @@ Per favor attende $1 ante de probar lo novemente.',
 'resetpass-submit-cancel' => 'Cancellar',
 'resetpass-wrong-oldpass' => 'Le contrasigno temporari o actual es invalide.
 Es possibile que tu ha ja cambiate tu contrasigno o requestate un nove contrasigno temporari.',
+'resetpass-recycled' => 'Redefini tu contrasigno a un differente del actual, per favor.',
+'resetpass-temp-emailed' => 'Tu ha aperite session con un codice temporari que tu recipeva in e-mail.
+Pro completar le accesso, tu debe definir un nove contrasigno hic:',
 'resetpass-temp-password' => 'Contrasigno temporari:',
 'resetpass-abort-generic' => 'Le cambio del contrasigno ha essite abortate per un extension.',
+'resetpass-expired' => 'Le contrasigno ha expirate. Per favor defini un nove contrasigno pro aperir session.',
+'resetpass-expired-soft' => 'Le contrasigno ha expirate e debe esser redefinite. Per favor elige un nove contrasigno ora, o clicca sur "{{int:resetpass-submit-cancel}}" pro redefinir lo plus tarde.',
 
 # Special:PasswordReset
 'passwordreset' => 'Reinitialisar contrasigno',
@@ -1005,7 +1009,7 @@ Illo existe ja.',
 'invalid-content-data' => 'Datos de contento invalide',
 'content-not-allowed-here' => 'Le contento "$1" non es permittite in le pagina [[$2]]',
 'editwarning-warning' => 'Quitar iste pagina pote causar le perdita de omne modificationes que tu ha facite.
-Si tu ha aperite un session, tu pote disactivar iste aviso in le section "Modification" de tu preferentias.',
+Si tu ha aperite un session, tu pote disactivar iste aviso in le section "{{int:prefs-editing}}" de tu preferentias.',
 'editpage-notsupportedcontentformat-title' => 'Formato de contento non supportate',
 'editpage-notsupportedcontentformat-text' => 'Le formato de contento $1 non es supportate per le modello de contento $2.',
 
@@ -1042,6 +1046,7 @@ Iste parametros ha essite omittite.",
 Per favor controla le comparation infra pro verificar que tu vole facer isto, e postea salveguarda le modificationes infra pro assi disfacer le modification.',
 'undo-failure' => 'Le modification non poteva esser annullate a causa de conflicto con modificationes intermedie.',
 'undo-norev' => 'Impossibile annullar le modification proque illo non existe o esseva delite.',
+'undo-nochange' => 'Pare que iste modification ha jam essite disfacite.',
 'undo-summary' => 'Annullava le version $1 per [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussion]] | [[Special:Contributions/$2|{{MediaWiki:Contribslink}}]])',
 'undo-summary-username-hidden' => 'Disfacer le revision $1 facite per un usator celate',
 
@@ -1129,8 +1134,6 @@ function, o le version specificate non existe, o tu essaya celar le version actu
 'revdelete-show-file-submit' => 'Si',
 'revdelete-selected' => "'''{{PLURAL:$2|Version seligite|Versiones seligite}} de [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Evento|Eventos}} de registro seligite:'''",
-'revdelete-text' => "'''Le versiones e eventos delite continuara a apparer in le historia e registro del pagina, sed partes de lor contento essera inaccessibile al publico.'''
-Altere administratores in {{SITENAME}} continuara a poter acceder al contento celate e pote restaurar lo per medio de iste mesme interfacie, si non se ha definite restrictiones additional.",
 'revdelete-confirm' => 'Per favor confirma que tu ha le intention de facer isto, que tu comprende le consequentias, e que tu face isto in accordo con [[{{MediaWiki:Policy-url}}|le politica]].',
 'revdelete-suppress-text' => "Le suppression debe '''solmente''' esser usate pro le sequente casos:
 * Information potentialmente diffamatori
@@ -1226,6 +1229,8 @@ Nota que le uso del ligamines de navigation causara le perdita de tote cambios i
 'showhideselectedversions' => 'Revelar/celar le versiones seligite',
 'editundo' => 'disfacer',
 'diff-empty' => '(Nulle differentia)',
+'diff-multi-sameuser' => '({{PLURAL:$1|Un version intermedie|$1 versiones intermedie}} facite per le mesme usator non es monstrate)',
+'diff-multi-otherusers' => '({{PLURAL:$1|Un version intermedie|$1 versiones intermedie}} facite per {{PLURAL:$2|un altere usator|$2 usatores}} non es monstrate)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Un version intermedie|$1 versiones intermedie}} facite per plus de $2 {{PLURAL:$2|usator|usatores}} non es monstrate)',
 'difference-missing-revision' => '{{PLURAL:$2|Un version|$2 versiones}} de iste differentia ($1) non ha essite trovate.
 
@@ -1246,7 +1251,7 @@ Detalios se trova in le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}
 'shown-title' => 'Monstrar $1 {{PLURAL:$1|resultato|resultatos}} per pagina',
 'viewprevnext' => 'Vider ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''Existe un pagina nominate \"[[\$1]]\" in iste wiki'''",
-'searchmenu-new' => "'''Crea le pagina \"[[:\$1]]\" in iste wiki!'''",
+'searchmenu-new' => '<strong>Crea le pagina "[[:$1]]" in iste wiki!</strong> {{PLURAL:$2|0=|Vide etiam le pagina trovate con le recerca.|Vide etiam le resultatos del recerca.}}',
 'searchprofile-articles' => 'Paginas de contento',
 'searchprofile-project' => 'Paginas de adjuta e del projecto',
 'searchprofile-images' => 'Multimedia',
@@ -1272,6 +1277,7 @@ Detalios se trova in le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}
 'searchrelated' => 'connexe',
 'searchall' => 'totes',
 'showingresults' => "Infra se monstra non plus de {{PLURAL:$1|'''1''' resultato|'''$1''' resultatos}} a partir del numero '''$2'''.",
+'showingresultsinrange' => 'In basso es monstrate usque a {{PLURAL:$1|<strong>1</strong> resultato|<strong>$1</strong> resultatos}} inter #<strong>$2</strong> e #<strong>$3</strong>.',
 'showingresultsnum' => "Infra se monstra {{PLURAL:$3|'''1''' resultato|'''$3''' resultatos}} a partir del numero '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Resultato '''$1'''|Resultatos '''$1 - $2'''}} de '''$3''' pro '''$4'''",
 'search-nonefound' => 'Le recerca non ha producite resultatos.',
@@ -1595,11 +1601,23 @@ Si tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contribut
 'rcnotefrom' => 'infra es le modificationes a partir de <b>$2</b> (usque a <b>$1</b>).',
 'rclistfrom' => 'Monstrar nove modificationes a partir de $1',
 'rcshowhideminor' => '$1 modificationes minor',
+'rcshowhideminor-show' => 'Monstrar',
+'rcshowhideminor-hide' => 'Celar',
 'rcshowhidebots' => '$1 bots',
+'rcshowhidebots-show' => 'Monstrar',
+'rcshowhidebots-hide' => 'Celar',
 'rcshowhideliu' => '$1 usatores registrate',
+'rcshowhideliu-show' => 'Monstrar',
+'rcshowhideliu-hide' => 'Celar',
 'rcshowhideanons' => '$1 usatores anonyme',
+'rcshowhideanons-show' => 'Monstrar',
+'rcshowhideanons-hide' => 'Celar',
 'rcshowhidepatr' => '$1 modificationes patruliate',
+'rcshowhidepatr-show' => 'Monstrar',
+'rcshowhidepatr-hide' => 'Celar',
 'rcshowhidemine' => '$1 mi modificationes',
+'rcshowhidemine-show' => 'Monstrar',
+'rcshowhidemine-hide' => 'Celar',
 'rclinks' => 'Monstrar le $1 ultime modificationes in le $2 ultime dies<br />$3',
 'diff' => 'diff',
 'hist' => 'hist',
@@ -1729,6 +1747,8 @@ Si tu vole totevia incargar iste file, per favor retorna e usa un nove nomine. [
 'uploaddisabledtext' => 'Le incargamento de files es disactivate.',
 'php-uploaddisabledtext' => 'Le incargamento de files PHP es disactivate. Per favor verifica le configuration file_uploads.',
 'uploadscripted' => 'Iste file contine codice de HTML o de script que pote esser interpretate erroneemente per un navigator del web.',
+'uploadscriptednamespace' => 'Iste file SVG contine un spatio de nomines invalide: "$1"',
+'uploadinvalidxml' => 'Le codice XML in le file incargate non pote esser interpretate.',
 'uploadvirus' => 'Le file contine un virus! Detalios: $1',
 'uploadjava' => 'Iste file es un archivo ZIP que contine un file .class de Java.
 Non es permittite incargar files Java, proque istes pote contornar le restrictiones de securitate.',
@@ -2102,10 +2122,20 @@ Le entratas <del>cancellate</del> ha essite resolvite.',
 'deadendpagestext' => 'Le sequente paginas non ha ligamines a altere paginas in {{SITENAME}}.',
 'protectedpages' => 'Paginas protegite',
 'protectedpages-indef' => 'Solmente protectiones infinite',
+'protectedpages-summary' => 'Iste pagina lista paginas existente que es actualmente protegite. Pro un lista de titulos protegite contra creation, vide [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Protectiones in cascada solmente',
 'protectedpages-noredirect' => 'Celar redirectiones',
 'protectedpagesempty' => 'Nulle paginas es actualmente protegite con iste parametros.',
+'protectedpages-timestamp' => 'Data e hora',
+'protectedpages-page' => 'Pagina',
+'protectedpages-expiry' => 'Expira',
+'protectedpages-performer' => 'Protegite per',
+'protectedpages-params' => 'Parametros de protection',
+'protectedpages-reason' => 'Motivo',
+'protectedpages-unknown-timestamp' => 'Incognite',
+'protectedpages-unknown-performer' => 'Usator incognite',
 'protectedtitles' => 'Titulos protegite',
+'protectedtitles-summary' => 'Iste pagina lista titulos actualmente protegite contra creation. Pro un lista de paginas existente que ha essite protegite, vide [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Nulle titulos es actualmente protegite con iste parametros.',
 'listusers' => 'Lista de usatores',
 'listusers-editsonly' => 'Monstrar solmente usatores con modificationes',
@@ -2443,10 +2473,10 @@ Ecce le configurationes actual del pagina '''$1''':",
 Ecce le configurationes actual del pagina '''$1''':",
 'protect-cascadeon' => 'Iste pagina es actualmente protegite proque illo es includite in le sequente {{PLURAL:$1|pagina, le qual|paginas, le quales}} ha activate le protection in cascada.
 Tu pote cambiar le nivello de protection de iste pagina, ma isto non cambiara le effecto del protection in cascada.',
-'protect-default' => 'Permitter tote le usatores',
-'protect-fallback' => 'Permitter solmente usatores con le permission de "$1"',
-'protect-level-autoconfirmed' => 'Permitter solmente usatores autoconfirmate',
-'protect-level-sysop' => 'Permitter solmente administratores',
+'protect-default' => 'Permitter tote le usatores',
+'protect-fallback' => 'Permitter solmente al usatores con le privilegio de "$1"',
+'protect-level-autoconfirmed' => 'Permitter solmente al usatores autoconfirmate',
+'protect-level-sysop' => 'Permitter solmente al administratores',
 'protect-summary-cascade' => 'in cascada',
 'protect-expiring' => 'expira le $1 (UTC)',
 'protect-expiring-local' => 'expira le $1',
@@ -2570,6 +2600,7 @@ Le ultime entrata del registro de blocadas es reproducite hic infra pro informat
 'sp-contributions-search' => 'Cercar contributiones',
 'sp-contributions-username' => 'Adresse IP o nomine de usator:',
 'sp-contributions-toponly' => 'Monstrar solmente le versiones recente',
+'sp-contributions-newonly' => 'Monstrar solmente le modificationes que es creationes de pagina',
 'sp-contributions-submit' => 'Cercar',
 
 # What links here
@@ -2675,8 +2706,8 @@ a un adresse IP blocate previemente.',
 'change-blocklink' => 'cambiar blocada',
 'contribslink' => 'contributiones',
 'emaillink' => 'inviar e-mail',
-'autoblocker' => 'Automaticamente blocate proque tu adresse IP ha recentemente essite usate per "[[User:$1|$1]]".
-Le motivo specificate pro le blocada de $1 es: "$2"',
+'autoblocker' => 'Automaticamente blocate perque tu adresse IP ha recentemente essite usate per "[[User:$1|$1]]".
+Le motivo specificate pro blocar $1 es "\'\'$2\'\'"',
 'blocklogpage' => 'Registro de blocadas',
 'blocklog-showlog' => 'Iste usator ha essite blocate previemente. Le registro de blocadas es providite ci infra pro referentia:',
 'blocklog-showsuppresslog' => 'Iste usator ha essite blocate e celate previemente. Le registro de suppressiones es providite ci infra pro referentia:',
@@ -2888,6 +2919,7 @@ $2',
 'thumbnail_image-type' => 'typo de imagine non supportate',
 'thumbnail_gd-library' => 'le configuration del bibliotheca GD es incomplete: manca le function $1',
 'thumbnail_image-missing' => 'le file pare mancar: $1',
+'thumbnail_image-failure-limit' => 'Il ha habite recentemente troppo de tentativas fallite ($1 o plus) de generar iste miniatura. Per favor reproba plus tarde.',
 
 # Special:Import
 'import' => 'Importar paginas',
@@ -3071,7 +3103,7 @@ Le causa es probabilemente un ligamine verso un sito externe que es presente in
 '''NON''' completa isto!",
 
 # Info page
-'pageinfo-title' => 'Informationes pro "$1"',
+'pageinfo-title' => 'Information sur "$1"',
 'pageinfo-not-current' => 'Regrettabilemente, il es impossibile fornir iste information pro versiones ancian.',
 'pageinfo-header-basic' => 'Information de base',
 'pageinfo-header-edits' => 'Historia de modificationes',
@@ -4114,6 +4146,4 @@ De facto, illo expande quasi toto inter accolladas duple.',
 'expand_templates_generate_rawhtml' => 'Monstrar HTML brute',
 'expand_templates_preview' => 'Previsualisation',
 
-# Unknown messages
-'uploadinvalidxml' => 'Le codice XML in le file incargate non pote esser interpretate.',
 );
index 0e024e7..807652a 100644 (file)
@@ -383,7 +383,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Kirimkan saya salinan surel yang saya kirimkan ke orang lain',
 'tog-diffonly' => 'Jangan tampilkan isi halaman di bawah perbedaan suntingan',
 'tog-showhiddencats' => 'Tampilkan kategori tersembunyi',
-'tog-noconvertlink' => 'Matikan konversi judul pranala',
 'tog-norollbackdiff' => 'Jangan tampilkan perbedaan setelah melakukan pengembalian',
 'tog-useeditwarning' => 'Ingatkan saya bila meninggalkan halaman penyuntingan sebelum menyimpan perubahan',
 'tog-prefershttps' => 'Selalu gunakan koneksi aman ketika masuk log',
@@ -511,7 +510,6 @@ $messages = array(
 'vector-action-protect' => 'Lindungi',
 'vector-action-undelete' => 'Pembatalan penghapusan',
 'vector-action-unprotect' => 'Ubah perlindungan',
-'vector-simplesearch-preference' => 'Aktifkan bilah pencarian sederhana (hanya kulit Vector)',
 'vector-view-create' => 'Buat',
 'vector-view-edit' => 'Sunting',
 'vector-view-history' => 'Versi terdahulu',
@@ -793,8 +791,6 @@ Ingatlah bahwa beberapa halaman mungkin masih menampilkan anda seperti masih mas
 'gotaccountlink' => 'Masuk log',
 'userlogin-resetlink' => 'Lupa detail info masuk Anda?',
 'userlogin-resetpassword-link' => 'Lupa kata sandi?',
-'helplogin-url' => 'Help:Masuk log',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Bantuan masuk log]]',
 'userlogin-loggedin' => 'Andan telah masuk log sebagai $1.
 Gunakan formulir di bawah untuk masuk log sebagai pengguna lain.',
 'userlogin-createanother' => 'Buat akun lain',
@@ -860,7 +856,8 @@ Untuk menghindari penyalahgunaan, hanya satu kata sandi yang akan dikirimkan set
 'acct_creation_throttle_hit' => 'Pengunjung wiki ini dengan alamat IP yang sama dengan Anda telah membuat {{PLURAL:$1|1 akun|$1 akun}} dalam satu hari terakhir, hingga jumlah maksimum yang diijinkan.
 Karenanya, pengunjung dengan alamat IP ini tidak dapat lagi membuat akun lain untuk sementara.',
 'emailauthenticated' => 'Alamat surel Anda telah dikonfirmasi pada $3, $2.',
-'emailnotauthenticated' => 'Alamat surel Anda belum dikonfirmasi. Sebelum dikonfirmasi Anda tidak bisa menggunakan fitur surel.',
+'emailnotauthenticated' => 'Alamat surel Anda belum dikonfirmasi.
+Sebelum dikonfirmasi Anda tidak akan menerima surel dari fitur berikut.',
 'noemailprefs' => 'Anda harus memasukkan alamat surel di preferensi Anda untuk dapat menggunakan fitur-fitur ini.',
 'emailconfirmlink' => 'Konfirmasikan alamat surel Anda',
 'invalidemailaddress' => 'Alamat surel ini tidak dapat diterima karena formatnya tidak sesuai.
@@ -897,6 +894,8 @@ Jika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan
 'retypenew' => 'Ketik ulang kata sandi baru:',
 'resetpass_submit' => 'Atur kata sandi dan masuk log',
 'changepassword-success' => 'Kata sandi Anda telah berhasil diubah!',
+'changepassword-throttled' => 'Anda terlalu sering mencoba masuk log.
+Mohon tunggu $1 sebelum mencoba lagi.',
 'resetpass_forbidden' => 'Kata sandi tidak dapat diubah',
 'resetpass-no-info' => 'Anda harus masuk log untuk mengakses halaman ini secara langsung.',
 'resetpass-submit-loggedin' => 'Ganti kata sandi',
@@ -1173,6 +1172,8 @@ karena telah ada.',
 'content-not-allowed-here' => 'Konten "$1" tidak diizinkan di halaman [[$2]]',
 'editwarning-warning' => 'Meninggalkan halaman ini dapat menyebabkan semua perubahan yang belum tersimpan hilang.
 Jika Anda telah masuk log, Anda dapat mematikan peringatan ini lewat bagian "Penyuntingan" pada halaman preferensi Anda.',
+'editpage-notsupportedcontentformat-title' => 'Format konten tidak didukung',
+'editpage-notsupportedcontentformat-text' => 'Format konten $1 tidak didukung oleh model konten $2.',
 
 # Content models
 'content-model-wikitext' => 'teks wiki',
@@ -1205,6 +1206,7 @@ Beberapa templat akan diabaikan.',
 'undo-success' => 'Suntingan ini dapat dibalikkan. Silakan periksa perbandingan di bawah untuk meyakinkan bahwa benar itu yang Anda ingin lakukan, lalu simpan perubahan tersebut untuk menyelesaikan pembalikkan suntingan.',
 'undo-failure' => 'Suntingan ini tidak dapat dibalikkan karena konflik penyuntingan antara.',
 'undo-norev' => 'Suntingan ini tidak dapat dibalikkan karena halaman tidak ditemukan atau telah dihapuskan.',
+'undo-nochange' => 'Suntingan ini nampaknya telah dibatalkan.',
 'undo-summary' => 'Membalikkan revisi $1 oleh [[Special:Contributions/$2|$2]] ([[User talk:$2|bicara]])',
 'undo-summary-username-hidden' => 'Batalkan revisi $1 oleh seorang pengguna tersembunyi',
 
@@ -1213,6 +1215,9 @@ Beberapa templat akan diabaikan.',
 'cantcreateaccount-text' => "Pembuatan akun dari alamat IP ini (<strong>$1</strong>) telah diblokir oleh [[User:$3|$3]].
 
 Alasan yang diberikan oleh $3 adalah ''$2''",
+'cantcreateaccount-range-text' => "Pembuatan akun dari alamat IP dalam rentang '''$1''', yang mencakup alamat IP anda ('''$4'''), telah diblokir oleh [[Pengguna:$3|$3]].
+
+Alasan yang diberikan oleh  $3  adalah ''$2''",
 
 # History pages
 'viewpagelogs' => 'Lihat log halaman ini',
@@ -1285,8 +1290,6 @@ Sebagai seorang pengurus, Anda dapat melihat perbedaan ini; detail mungkin terse
 'revdelete-show-file-submit' => 'Ya',
 'revdelete-selected' => "'''{{PLURAL:$2|Revisi|Revisi-revisi}} pilihan dari '''$1''''''",
 'logdelete-selected' => "'''{{PLURAL:$1|Log|Log-log}} pilihan untuk:'''",
-'revdelete-text' => "'''Revisi dan tindakan yang telah dihapus akan tetap muncul di versi terdahulu dan log halaman, tapi bagian dari isinya tidak bisa diakses publik.'''
-Pengurus {{SITENAME}} lain akan tetap dapat mengakses isi yang tersembunyi ini dan dapat membatalkan penghapusannya menggunakan antarmuka yang sama, kecuali ada pembatasan lain yang dibuat oleh operator situs.",
 'revdelete-confirm' => 'Tolong konfirmasi bahwa Anda memang bermaksud melakukan ini, memahami konsekuensinya, dan bahwa Anda melakukannya sesuai dengan [[{{MediaWiki:Policy-url}}|kebijakan]].',
 'revdelete-suppress-text' => "Penyembunyian revisi '''hanya''' boleh digunakan untuk kasus-kasus berikut:
 * Informasi yang berpotensi memfitnah
@@ -1417,6 +1420,7 @@ Rinciannya dapat ditemukan di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGE
 'search-result-score' => 'Relevansi: $1%',
 'search-redirect' => '(pengalihan $1)',
 'search-section' => '(bagian $1)',
+'search-file-match' => '(cocok dengan isi berkas)',
 'search-suggest' => 'Mungkin maksud Anda adalah: $1',
 'search-interwiki-caption' => 'Proyek lain',
 'search-interwiki-default' => 'Hasil $1:',
@@ -1747,6 +1751,7 @@ Jika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan
 'recentchanges-label-bot' => 'Suntingan ini dilakukan oleh bot',
 'recentchanges-label-unpatrolled' => 'Suntingan ini belum terpatroli',
 'recentchanges-label-plusminus' => 'Perubahan ukuran halaman dalam bita',
+'recentchanges-legend-heading' => "'''Legenda:'''",
 'recentchanges-legend-newpage' => '(lihat pula [[Special:NewPages|daftar halaman baru]])',
 'rcnotefrom' => 'Di bawah ini adalah perubahan sejak <strong>$2</strong> (ditampilkan sampai <strong>$1</strong> perubahan).',
 'rclistfrom' => 'Perlihatkan perubahan terbaru sejak $1',
@@ -1867,6 +1872,8 @@ Jika Anda masih ingin memuat berkas Anda, silakan kembali dan gunakan nama baru.
 Jika Anda tetap ingin memuatkan berkas Anda, harap kembali dan gunakan nama lain. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Berkas ini berduplikasi dengan {{PLURAL:$1|berkas|berkas-berkas}} berikut:',
 'file-deleted-duplicate' => 'Sebuah berkas yang identik dengan berkas ini ([[:$1]]) sudah pernah dihapuskan sebelumnya. Anda harus memeriksa sejarah penghapusan berkas tersebut sebelum melanjutkan memuat ulang berkas ini.',
+'file-deleted-duplicate-notitle' => 'Sebuah berkas yang identik dengan berkas ini sebelumnya telah dihapus, dan judul yang digunakan telah ditahan.
+Anda harus meminta bantuan seseorang dengan kemampuan untuk melihat data berkas yang ditahan untuk meninjau situasi sebelum anda mengunggah kembali.',
 'uploadwarning' => 'Peringatan pemuatan',
 'uploadwarning-text' => 'Mohon perbaiki keterangan berkas di bawah dan coba lagi.',
 'savefile' => 'Simpan berkas',
@@ -1878,6 +1885,7 @@ Jika Anda tetap ingin memuatkan berkas Anda, harap kembali dan gunakan nama lain
 'uploaddisabledtext' => 'Pemuatan berkas tidak diizinkan.',
 'php-uploaddisabledtext' => 'Pemuatan berkas dimatikan di PHP. Silakan cek pengaturan file_uploads.',
 'uploadscripted' => 'Berkas ini mengandung HTML atau kode yang dapat diinterpretasikan dengan keliru oleh penjelajah web.',
+'uploadinvalidxml' => 'XML dalam berkas yang diunggah tidak bisa diuraikan.',
 'uploadvirus' => 'Berkas tersebut mengandung virus! Rincian: $1',
 'uploadjava' => 'Berkas ini adalah berkas ZIP yang mengnadung berkas .class Java.
 Penggunggahan berkas Java tidak diperbolehkan karena dapat menyebabkan pengabaian batasan keamanan.',
@@ -2247,7 +2255,16 @@ Nama yang telah <del>dicoret</del> berarti telah dibetulkan.',
 'protectedpages' => 'Halaman yang dilindungi',
 'protectedpages-indef' => 'Hanya untuk pelindungan dengan jangka waktu tak terbatas',
 'protectedpages-cascade' => 'Hanya pelindungan runtun',
+'protectedpages-noredirect' => 'Sembunyikan pengalihan',
 'protectedpagesempty' => 'Saat ini tidak ada halaman yang sedang dilindungi dengan parameter-parameter tersebut.',
+'protectedpages-timestamp' => 'Stempel waktu',
+'protectedpages-page' => 'Halaman',
+'protectedpages-expiry' => 'Kedaluwarsa',
+'protectedpages-performer' => 'Melindungi pengguna',
+'protectedpages-params' => 'Parameter perlindungan',
+'protectedpages-reason' => 'Alasan',
+'protectedpages-unknown-timestamp' => 'Tidak diketahui',
+'protectedpages-unknown-performer' => 'Pengguna yang tidak diketahui',
 'protectedtitles' => 'Judul yang dilindungi',
 'protectedtitlesempty' => 'Tidak ada judul yang dilindungi.',
 'listusers' => 'Daftar pengguna',
@@ -2979,6 +2996,7 @@ Silakan kunjungi [https://www.mediawiki.org/wiki/Localisation Pelokalan MediaWik
 'allmessages-prefix' => 'Saring dengan awalan:',
 'allmessages-language' => 'Bahasa:',
 'allmessages-filter-submit' => 'Tuju ke',
+'allmessages-filter-translate' => 'Terjemahkan',
 
 # Thumbnails
 'thumbnail-more' => 'Perbesar',
@@ -3030,7 +3048,7 @@ Simpan ke komputer Anda dan unggah ke sini.',
 'importuploaderrortemp' => 'Pemuatan berkas gagal. Sebuah direktori sementara dibutuhkan.',
 'import-parse-failure' => 'Proses impor XML gagal',
 'import-noarticle' => 'Tak ada halaman yang dapat diimpor!',
-'import-nonewrevisions' => 'Semua revisi telah pernah diimpor sebelumnya.',
+'import-nonewrevisions' => 'Tidak ada revisi yang diimpor (semua revisi telah ada atau dilewatkan karena kesalahan).',
 'xml-error-string' => '$1 pada baris $2, kolom $3 (bita $4): $5',
 'import-upload' => 'Memuat data XML',
 'import-token-mismatch' => 'Kehilangan data sesi. Silakan mencoba kembali.',
@@ -3041,6 +3059,7 @@ Simpan ke komputer Anda dan unggah ke sini.',
 'import-error-special' => 'Halaman " $1 " tidak diimpor karena milik ruang nama khusus yang tidak mengizinkan adanya halaman.',
 'import-error-invalid' => 'Halaman "$1" tidak diimpor karena namanya tidak valid.',
 'import-error-unserialize' => 'Revisi  $2  halaman " $1 " tidak bisa diurutkan. Revisi dilaporkan untuk menggunakan konten model $3 urutan sebagai $4 .',
+'import-error-bad-location' => 'Revisi $2 menggunakan konten model $3 tidak dapat disimpan di "$1" di wiki ini karena model tidak didukung pada halaman tersebut.',
 'import-options-wrong' => '{{PLURAL:$2|Opsi|Opsi}} salah: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Halaman turunan yang diberikan adalah judul yang salah.',
 'import-rootpage-nosubpage' => 'Ruang nama "$1" di halaman turunan tidak mengizinkan subhalaman.',
@@ -3935,6 +3954,7 @@ Silakan konfirmasi jika Anda ingin membuat ulang halaman ini.",
 'imgmultigoto' => 'Pergi ke halaman $1',
 
 # Language selector for translatable SVGs
+'img-lang-default' => '(bahasa default)',
 'img-lang-go' => 'Tuju ke',
 
 # Table pager
@@ -4060,7 +4080,17 @@ Anda juga dapat [[Special:EditWatchlist|menggunakan penyunting standar Anda]].',
 'version-hook-subscribedby' => 'Dilanggani oleh',
 'version-version' => '(Versi $1)',
 'version-svn-revision' => '(r$2)',
-'version-license' => 'Lisensi',
+'version-license' => 'Lisensi MediaWiki',
+'version-ext-license' => 'Lisensi',
+'version-ext-colheader-name' => 'Ekstensi',
+'version-ext-colheader-version' => 'Versi',
+'version-ext-colheader-license' => 'Lisensi',
+'version-ext-colheader-description' => 'Deskripsi',
+'version-ext-colheader-credits' => 'Pembuat',
+'version-license-title' => 'Lisensi untuk $1',
+'version-license-not-found' => 'Tidak ada detail informasi lisensi untuk ekstensi ini.',
+'version-credits-title' => 'Kredit untuk $1',
+'version-credits-not-found' => 'Tidak ada detail informasi kredit untuk ekstensi ini.',
 'version-poweredby-credits' => "Wiki ini didukung oleh '''[https://www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
 'version-poweredby-others' => 'lainnya',
 'version-poweredby-translators' => 'penerjemah translatewiki.net',
@@ -4080,13 +4110,14 @@ Anda seharusnya telah menerima [{{SERVER}}{{SCRIPTPATH}}/COPYING salinan Lisensi
 'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Skrip path]',
 
 # Special:Redirect
-'redirect' => 'Pengalihan oleh berkas, pengguna atau ID revisi',
+'redirect' => 'Pengalihan berdasarkan ID berkas, pengguna, halaman atau revisi',
 'redirect-legend' => 'Pengalihan ke sebuah berkas atau halaman',
 'redirect-summary' => 'Halaman istimewa ini beralih ke berkas (sesuai nama berkasnya), halaman (sesuai ID revisinya), atau halaman pengguna (sesuai ID numerik penggunanya). Penggunaan: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], atau [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'Lanjut',
 'redirect-lookup' => 'Pencarian:',
 'redirect-value' => 'Nilai:',
 'redirect-user' => 'ID pengguna',
+'redirect-page' => 'ID Halaman',
 'redirect-revision' => 'Revisi halaman',
 'redirect-file' => 'Nama berkas',
 'redirect-not-exists' => 'Nilai tidak ditemukan',
@@ -4279,6 +4310,7 @@ Jika tidak, Anda dapat menggunakan formulir mudah di bawah ini. Komentar Anda ak
 'api-error-overwrite' => 'Tidak diizinkan untuk menimpa berkas yang sudah ada.',
 'api-error-stashfailed' => 'Kesalahan internal: server gagal menyimpan berkas sementara.',
 'api-error-publishfailed' => 'Kesalahan internal: server gagal menyimpan berkas sementara.',
+'api-error-stasherror' => 'Terjadi kesalahan saat mengunggah berkas ke penyimpanan.',
 'api-error-timeout' => 'Peladen tidak merespons dalam waktu yang diharapkan.',
 'api-error-unclassified' => 'Terjadi galat yang tidak diketahui',
 'api-error-unknown-code' => 'Kesalahan tidak dikenal: "$1"',
@@ -4308,7 +4340,9 @@ Jika tidak, Anda dapat menggunakan formulir mudah di bawah ini. Komentar Anda ak
 'limitreport-walltime' => 'Penggunaan waktu riil',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|detik|detik}}',
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bita|bita}}',
+'limitreport-templateargumentsize' => 'Ukuran argumen temlat',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bita|bita}}',
+'limitreport-expansiondepth' => 'Kedalaman ekspansi tertinggi',
 'limitreport-expensivefunctioncount' => 'Perhitungan fungsi parser yang mahal',
 
 # Special:ExpandTemplates
@@ -4318,10 +4352,12 @@ Jika tidak, Anda dapat menggunakan formulir mudah di bawah ini. Komentar Anda ak
 'expand_templates_input' => 'Teks masukan:',
 'expand_templates_output' => 'Hasil',
 'expand_templates_xml_output' => 'Hasil XML',
+'expand_templates_html_output' => 'Keliaran HTML mentah',
 'expand_templates_ok' => 'OK',
 'expand_templates_remove_comments' => 'Buang komentar',
 'expand_templates_remove_nowiki' => 'Tidak menampilkan tag <nowiki> pada hasilnya',
 'expand_templates_generate_xml' => 'Tampilkan pohon parser XML',
+'expand_templates_generate_rawhtml' => 'Tampilkan HTML mentah',
 'expand_templates_preview' => 'Pratayang',
 
 );
index e84cf6b..d37bbee 100644 (file)
@@ -170,7 +170,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Inviar me copies de e-mailes que yo invia por altri usatores',
 'tog-diffonly' => 'Ne monstrar li contenete de págine in infra del changes',
 'tog-showhiddencats' => 'Monstrar categories ne visibil',
-'tog-noconvertlink' => 'Desvalidar conversion de titul de catenun',
 'tog-norollbackdiff' => 'Omisser change pos de efectuar un rollback',
 'tog-useeditwarning' => 'Averti me, si yo abandona un págine con ínconservat changes',
 'tog-prefershttps' => 'Sempre usar un secur connection, si tui session es activ.',
@@ -296,7 +295,6 @@ $messages = array(
 'vector-action-protect' => 'Gardar',
 'vector-action-undelete' => 'Restituer',
 'vector-action-unprotect' => 'Desgardar',
-'vector-simplesearch-preference' => 'Simplificat serch-liste (solmen Vector)',
 'vector-view-create' => 'Crear',
 'vector-view-edit' => 'Redacter',
 'vector-view-history' => 'Historie de versiones',
index 4d39d69..f626f54 100644 (file)
@@ -222,7 +222,6 @@ $messages = array(
 'vector-action-protect' => 'Cẹdolu',
 'vector-action-undelete' => 'Á gbàkashikwà',
 'vector-action-unprotect' => 'Nchẹdo mgbanwe',
-'vector-simplesearch-preference' => 'Kwe okwu ụmá nchöwa di (akpụkpọ Vector náni)',
 'vector-view-create' => 'Ké',
 'vector-view-edit' => 'Mèzi',
 'vector-view-history' => 'Zí ịta',
index 39705c5..db4744d 100644 (file)
@@ -190,7 +190,6 @@ $messages = array(
 'history-title' => 'ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ "$1"',
 'lineno' => 'ᑐᑭᖅᓯᖅ $1:',
 'editundo' => 'ᐃᐱᐅᑦᔮᐹ',
-'diff-multi' => '({{PLURAL:$1|ᐊᑕᐅᓯᖅ ᑭᒻᒥᐅᕗᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ|$1 ᑭᒻᒥᐅᕗᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ}} ᐊᔪᖅᑐᖅ ᐅᕝᕙ.)',
 
 # Search results
 'nextn' => 'ᑕᒡᒐ {{PLURAL:$1|$1}}',
index a884787..02fb562 100644 (file)
@@ -169,7 +169,6 @@ $messages = array(
 'history-title' => 'titiraqtaugiarngarut mappitaq kingunittinni "$1"',
 'lineno' => 'tukiqsiq $1:',
 'editundo' => 'ipiutjaapaa',
-'diff-multi' => '({{PLURAL:$1|atausiq kimmiuvuq titiraqtaugiarngarut|$1 kimmiuvuq titiraqtaugiarngarut}} ajuqtuq uvva.)',
 
 # Search results
 'nextn' => 'tagga {{PLURAL:$1|$1}}',
index 6beb469..fde2ed7 100644 (file)
@@ -198,7 +198,6 @@ $messages = array(
 'vector-action-protect' => 'Salakniban',
 'vector-action-undelete' => 'Isubli ti inikkat',
 'vector-action-unprotect' => 'Sukatan ti salaknib',
-'vector-simplesearch-preference' => 'Pakabaelan ti napalaka a baras ti panagbiruk (Kudil a Vector laeng)',
 'vector-view-create' => 'Agaramid',
 'vector-view-edit' => 'Urnosen',
 'vector-view-history' => 'Kitaen ti pakasaritaan',
@@ -227,7 +226,7 @@ $messages = array(
 'edit' => 'Urnosen',
 'create' => 'Agaramid',
 'editthispage' => 'Urnosen daytoy a panid',
-'create-this-page' => 'Aramidem daytoy a panid',
+'create-this-page' => 'Partuaten daytoy a panid',
 'delete' => 'Ikkaten',
 'deletethispage' => 'Ikkaten daytoy a panid',
 'undeletethispage' => 'Isubli ti pannakaikkat daytoy a panid',
@@ -487,8 +486,6 @@ Dimo liplipatan a sukatan dagiti kakaykayatam idiay [[Special:Preferences|{{SITE
 'gotaccountlink' => 'Sumrek',
 'userlogin-resetlink' => 'Nalipatam dagiti salaysay ti pagserrekmo?',
 'userlogin-resetpassword-link' => 'Nalipatam ti kontraseniasmo?',
-'helplogin-url' => 'Help:Panagserrek',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Tulong iti panagserrek]]',
 'userlogin-loggedin' => 'Nakastrekkan a kas ni {{GENDER:$1|$1}}.
 Usaren ti porma dita baba tapno sumrek a kas sabali nga agar-aramat.',
 'userlogin-createanother' => 'Agaramid pay ti sabali a pakabilangan',
@@ -590,6 +587,10 @@ Pangngaasi nga agurayka ti $1 sakbay a padasem manen.',
 'suspicious-userlogout' => 'Naiparit ti panagkiddawmo a rummuar ngamin ket kasla inpatulod ti nadadael a panagbasabasa wenno pannakaidulin a pannakbagi.',
 'createacct-another-realname-tip' => 'Saan a nasken ti pudno a nagan.
 No kayatmo nga ited, mausarto daytoy para iti panangited ti pammadayaw para kadagiti obrada.',
+'pt-login' => 'Sumrek',
+'pt-login-button' => 'Sumrek',
+'pt-createaccount' => 'Agaramid ti pakabilangan',
+'pt-userlogout' => 'Rummuar',
 
 # Email sending
 'php-mail-error-unknown' => 'Di ammo a biddut ti surat ti PHP() nga annong.',
@@ -598,22 +599,28 @@ No kayatmo nga ited, mausarto daytoy para iti panangited ti pammadayaw para kada
 
 # Change password dialog
 'changepassword' => 'Baliwan ti kontrasenias',
-'resetpass_announce' => 'Simrekka a nagus-usar ti temporario a kodigo ti esurat.
-Tapno malpaska a makastrek, nasken a mangikabilka ti baro a kontrasenias ditoy:',
+'resetpass_announce' => 'Tapno malpas ti panagserrek, nasken a mangiyasentarka ti baro a kontrasenias.',
 'resetpass_header' => 'Sukatan ti kontrasenias ti pakabilangan',
 'oldpassword' => 'Daan a kontrasenias:',
 'newpassword' => 'Baro a kontrasenias:',
 'retypenew' => 'Imakinilya manen ti baro a kontrasenias:',
 'resetpass_submit' => 'Ikabil ti kontrasenias ken sumrek',
 'changepassword-success' => 'Balligi a nasukatan ti kontraseniasmo!',
+'changepassword-throttled' => 'Nakaaramidka kadagiti adu unay a nabiit a panangipadas ti panagserrek.
+Pangngaasi nga aguray ti $1 sakbay a padasen manen.',
 'resetpass_forbidden' => 'Saan a masukatan dagiti kontrasenias',
 'resetpass-no-info' => 'Masapul a nakastrekka tapno dagus a makapanka iti daytoy a panid.',
 'resetpass-submit-loggedin' => 'Sukatan ti kontrasenias',
 'resetpass-submit-cancel' => 'Ukasen',
 'resetpass-wrong-oldpass' => 'Imbalido ti temporario wenno agdama a kontrasenias.
 Mabalin a nagballigi ti panagsukatmo ti kontrasenias wenno nagkiddaw ti baro a temporario a kontrasenias.',
+'resetpass-recycled' => 'Pangngaasi nga iyasentar manen ti kontrasenias iti sabali ngem ti agdama a kontraseniasmo.',
+'resetpass-temp-emailed' => 'Simrekka a nagusar ti temporario a naipatulod a kodigo.
+Tapno malpas ti panagserrek, nasken a mangiyasentarka ti baro a kontrasenias ditoy:',
 'resetpass-temp-password' => 'Temporario a kontrasenias:',
 'resetpass-abort-generic' => 'Ti panagsukat ti kontrasenias ket pinasardeng babaen ti maysa a pagpaatiddog.',
+'resetpass-expired' => 'Nagpason ti kontraseniasmo. Pangngaasi a mangiyasentar ti baro a kontrasenias tapno makastrek.',
+'resetpass-expired-soft' => 'Nagpason ti kontraseniasmo, ken nasken a maiyasentar manen. Pangngaasi nga agpili tattan ti baro a kontrasenias, wenno pinduten ti "{{int:resetpass-submit-cancel}}"  tapno maiyasentarto intono madamdama.',
 
 # Special:PasswordReset
 'passwordreset' => 'Iyasentar manen ti kontrasenias',
@@ -664,6 +671,8 @@ Temporario a kontrasenias: $2',
 'changeemail-password' => 'Ti bukodmo a kontrasenias ti {{SITENAME}}:',
 'changeemail-submit' => 'Sukatan ti esurat',
 'changeemail-cancel' => 'Ukasen',
+'changeemail-throttled' => 'Adu unay ti panagpadasmo a sumrek.
+Pangngaasi nga aguray ti $1 sakbay a padasen manen.',
 
 # Special:ResetTokens
 'resettokens' => 'Iyasentar manen dagiti tandaan',
@@ -758,9 +767,9 @@ Mabalin a naiyalis wenno naikkat bayat idi kitkitaem ti panid.',
 'accmailtext' => "Ti pugto a napartuat a kontrasenias para kenni [[User talk:$1|$1]] ket naipatuloden idiay $2. Mabalin a masukatan idiay
 ''[[Special:ChangePassword|pagsukatan ti kontrasenias]]'' a panid no sumrekka.",
 'newarticle' => '(Baro)',
-'newarticletext' => "Nasurotmo ti maysa a silpo iti awan pay a panid. 
-Tapno mapartuat daytoy a panid, rugiamon ti agikur-it wenno agisurat iti pagsuratan a kahon dita baba (kitaen ti [[{{MediaWiki:Helppage}}|panid ti tulong]] para iti ad-adu pay a pakaammo). 
-No addaka ditoy babaen ti biddut, ipidutmo ti '''agsubli''' a buton ti pabasabasam tapno makasublika iti naggapuam a panid.",
+'newarticletext' => 'Nasurotmo ti silpo ti awan pay a panid. 
+Ti mangpartuat ti panid, rugiamon ti agmakinilia iti kahon dita baba (kitaen ti [[{{MediaWiki:Helppage}}|panid ti tulong]] para iti adu pay a pakaammo). 
+No addaka ditoy babaen ti biddut, pindutem ti buton ti <strong>agsubli</strong> ti pagbasabasam.',
 'anontalkpagetext' => "----
 ''Daytoy ti pakitungtungan a panid para iti di am-ammo nga agar-aramat a saan pay a nakaaramid ti pakabilangan, wenno saanna nga us-usaren.
 Dakami ket agusar kami ti numero nga IP a pagtaengan ti panangilasin dagiti lalaki/babai.
@@ -870,7 +879,7 @@ Mabalinmo ti agsubli ken urnosen ti adda a panid, wenno [[Special:UserLogin|sumr
 'sectioneditnotsupported-text' => 'Saan a nasuportaran ti panag-urnos ti paset iti daytoy a panid.',
 'permissionserrors' => 'Biddut ti pammalubos',
 'permissionserrorstext' => 'Awan ti pammalubosmo nga agaramid iti dayta, gapu ti sumaganad {{PLURAL:$1|a rason|a rasrason}}:',
-'permissionserrorstext-withaction' => 'Awan ti pammalubosmo nga $2, gapu ti sumaganad {{PLURAL:$1|a rason|rasrason}}:',
+'permissionserrorstext-withaction' => 'Awan ti pammalubosmo nga $2, gapu ti sumaganad a {{PLURAL:$1|rason|rasrason}}:',
 'recreate-moveddeleted-warn' => "'''Ballaag: Agparpartuatka manen ti dati a naikkat a panid'''
 
 Nasken a siguraduem no maikanatad nga ituloymo nga urnosen daytoy a panid.
@@ -891,8 +900,10 @@ Adda met daytoyen.',
 'content-failed-to-parse' => 'Napaay a nausig ti $2 a linaon para iti $1 a modelo: $3',
 'invalid-content-data' => 'Imbalido a datos ti linaon',
 'content-not-allowed-here' => 'Ti "$1" a linaon ket saan a maipalubos idiay panid ti [[$2]]',
-'editwarning-warning' => 'Ti ipapanaw ti daytoy a panid ket makapataud ti panakapukaw kadagiti aniaman a binalbaliwam.
-No nakastrekka, mabalinmo nga ibaldado daytoy a ballaag idiay "Panagurnos" a paset kadagiti kakaykayatam.',
+'editwarning-warning' => 'Ti ipapanaw iti daytoy a panid ket makapataud ti pannakapukaw kadagiti aniaman a binalbaliwam.
+No nakastrekka, mabalinmo nga ibaldado daytoy a ballaag idiay "{{int:prefs-editing}}" a paset kadagiti kakaykayatam.',
+'editpage-notsupportedcontentformat-title' => 'Ti pormat ti linaon ket saan a nasuportaran',
+'editpage-notsupportedcontentformat-text' => 'Ti pormat ti linaon ti $1 ket saan a nasuportaran babaen ti modelo ti linaon ti $2.',
 
 # Content models
 'content-model-wikitext' => 'wikitext',
@@ -927,6 +938,7 @@ Dagitoy a panangipalawag ket naikkaten.",
 Pangngaasi a kitaen ti pagipadaan dita baba tapno maamuan no agpaypayso ti kayatmo nga aramiden, ken idulin dagiti sinukatan dita baba tapno malpas ti panagsubli ti inurnos.',
 'undo-failure' => 'Ti inurnos ket saan a maipasubli gaputa adda dagiti nakisinnungat a patingnga a naurnos.',
 'undo-norev' => 'Saan a maibabawi ti naurnos ngamin ket awan daytoy wenno mabalin a naikkaten.',
+'undo-nochange' => 'Ti inurnos ket kasla naibabawin.',
 'undo-summary' => 'Ibabawi ti $1 a binaliwan babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]])',
 'undo-summary-username-hidden' => 'Isubli ti $1 a binaliwan babaen ti nailemmeng nga agar-aramat',
 
@@ -934,6 +946,9 @@ Pangngaasi a kitaen ti pagipadaan dita baba tapno maamuan no agpaypayso ti kayat
 'cantcreateaccounttitle' => 'Saan a makaaramid ti pakabilangan',
 'cantcreateaccount-text' => "Ti panagaramid ti pakabilangan manipud ti daytoy nga IP a pagtaengan ('''$1''') ket sinerraan babaen ni [[User:$3|$3]].
 
+Ti inted a rason babaen ni $3 ket ''$2''",
+'cantcreateaccount-range-text' => "Ti pannakapartuat ti pakabilangan manipud kadagiti pagtaengan ti IP iti sakop ti '''$1''', a mairaman ti IP a pagtaengam ('''$4'''), ket sinerraan babaen ni [[User:$3|$3]].
+
 Ti inted a rason babaen ni $3 ket ''$2''",
 
 # History pages
@@ -951,8 +966,8 @@ Ti inted a rason babaen ni $3 ket ''$2''",
 'last' => 'naudi',
 'page_first' => 'umuna',
 'page_last' => 'naudi',
-'histlegend' => "Panagpili ti sabali: Markaan dagiti kahon ti radio dagiti panagbaliwan tapno maipada ken pesselen ti serrek wenno ti buton dita baba.<br />
-Sarita: '''({{int:cur}})''' = naggidiatan ti kinaudi a panagbaliw, '''({{int:last}})''' = naggidiatan ti sarsarunuen a panagbaliw , '''{{int:minoreditletter}}''' = bassit a panagbaliw.",
+'histlegend' => 'Panagpili ti diperensia: Markaan dagiti kahon ti radio kadagiti panagbaliw tapno maipada ken pinduten ti serrek wenno ti buton dita baba.<br />
+Leyenda: <strong>({{int:cur}})</strong> = naggidiatan ti kinaudi a panagbaliw, <strong>({{int:last}})</strong> = naggidiatan ti sarsarunuen a panagbaliw , <strong>{{int:minoreditletter}}</strong> = bassit a panagbaliw.',
 'history-fieldset-title' => 'Agbasabasa ti pakasaritaan',
 'history-show-deleted' => 'Naikkat laeng',
 'histfirst' => 'kadaanan',
@@ -1009,8 +1024,10 @@ awan ti naibaga a panagbaliw, wenno padpadasem nga ilemlemmeng ti agdama a panag
 'revdelete-show-file-submit' => 'Wen',
 'revdelete-selected' => "'''{{PLURAL:$2|Napili a nabaliwan|Dagiti napili a nabaliwan}} iti [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Ti napili a listaan ti napasamak|Dagiti napili a listaan ti napasamak}}:'''",
-'revdelete-text' => "'''Dagiti naikkat a binaliwan ken dagiti napasamak ket agparang idiay panid ti pakasaritaan ken dagiti listaan, ngem addaan dagiti paset ti nagyanda a saan a maserrekan ti publiko.'''
-Dagiti sabsabali nga administrador idiay {{SITENAME}} ket mabalinda a serrekan ti nailemmeng a nagyan ken isubli ti panakaikkatda manen idiay dati nga interface, ngem saan no adda dagiti nainayon a naikabil a panagparit.",
+'revdelete-text-text' => 'Dagiti naikkat a rebision ket agparangto pay laeng iti panid ti pakasaritaan, ngem dagiti paset ti linaonda ket saanton a publiko a maserrekan.',
+'revdelete-text-file' => 'Dagiti naikkat a bersion ti papeles ket agparangto pay laeng iti pakasaritaan ti papeles, ngem dagiti paset ti linaonda ket saanton a publiko a maserrekan.',
+'logdelete-text' => 'Dagiti naikkat a listaan ti pasamak ket agparangto pay laeng kadagiti listaan, ngem dagiti paset ti linaonda ket saanton a publiko a maserrekan.',
+'revdelete-text-others' => 'Dagiti sabali nga administrador iti {{SITENAME}} ket mabalindanto pay laeng a maserrekan ti nailemmeng a linaon ken mabalindanto manen ti mangisubli ti pannakaikkat babaen iti daytoy nga isu met laeng nga interface, malaksid no adda dagiti maipatinayon a maisaad a panangigawid.',
 'revdelete-confirm' => 'Pangngaasi a pasingkedam a kayatmo nga aramiden daytoy, a maawatam dagiti pagbanagan, ket araramidem daytoy a segun iti [[{{MediaWiki:Policy-url}}|ti annuroten]].',
 'revdelete-suppress-text' => "Ti panagdepdep ket usaren '''laeng''' kadagiti sumaganad a kaso;
 * Makapataud ti libelo a pakaammo
@@ -1105,6 +1122,8 @@ Usaren ti radio a buton a tukol ti pinagtipon iti laeng panagbaliw a naaramid id
 'showhideselectedversions' => 'Ipakita/ilemmeng dagiti napili a nabaliwan',
 'editundo' => 'ibabawi',
 'diff-empty' => '(Awan ti paggiddiatan)',
+'diff-multi-sameuser' => '({{PLURAL:$1|Maysa nga agtengnga a panagbaliw|Dagiti $1 nga agtengnga a panagbaliw}} babaen ti isu met laeng nga agar-aramat a saan a naipakita)',
+'diff-multi-otherusers' => '({{PLURAL:$1|Maysa nga agtengnga a panagbaliw|Dagiti $1 nga agtengnga a panagbaliw}} babaen {{PLURAL:$2|ti maysa a sabali nga agar-aramat|dagiti $2 nga agar-aramat}} a saan a naipakita)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Maysa nga agtengnga a panangbalbaliw|Dagiti $1 nga agtengnga a panangbalbaliw}} babaen ti ad-adu ngem $2 {{PLURAL:$2|nga agar-aramat|kadagiti agar-aramat}} ti saan a naipakita)',
 'difference-missing-revision' => '{{PLURAL:$2|Maysa a panagbalbaliw|$2 kadagiti panagbalbaliw}} iti daytoy a paggiddiatan ($1) {{PLURAL:$2|ket ti|ket dagiti}} saan a naburikan.
 
@@ -1125,7 +1144,7 @@ Dagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete
 'shown-title' => 'Ipakita ti $1 {{PLURAL:$1|a nagbanagan|kadagiti nagbanagan}}  ti tunggal maysa a panid',
 'viewprevnext' => 'Kitaen ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''Adda panid a nanaganan ti \"[[:\$1]]\" iti daytoy a wiki.'''",
-'searchmenu-new' => "'''Partuaten ti panid ti \"[[:\$1]]\" iti daytoy a wiki!'''",
+'searchmenu-new' => '<strong>Partuaten ti panid ti "[[:$1]]" iti daytoy a wiki!</strong> {{PLURAL:$2|0=|Kitaen pay ti panid a nabirukan ti panagbirukmo.|Kitaen pay dagiti resulta a nabirukan ti panagbiruk.}}',
 'searchprofile-articles' => 'Dagiti naglaon a panid',
 'searchprofile-project' => 'Tulong ken Gandat a pampanid',
 'searchprofile-images' => 'Sabsabali a midia',
@@ -1141,15 +1160,17 @@ Dagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete
 'search-result-score' => 'Kaitutopan: $1%',
 'search-redirect' => '(ibaw-ing ti $1)',
 'search-section' => '(paset $1)',
+'search-file-match' => '(maipada ti linaon a papeles)',
 'search-suggest' => 'Daytoy kadi: $1',
 'search-interwiki-caption' => 'Dagiti kakabsat a gandat',
-'search-interwiki-default' => '$1 dagiti nagbanagan:',
+'search-interwiki-default' => 'Dagiti resulta manipud ti $1:',
 'search-interwiki-more' => '(adu pay)',
 'search-relatedarticle' => 'Mainaig',
 'searcheverything-enable' => 'Agbirukka kadagiti amin a nagan ti espasio',
 'searchrelated' => 'mainaig',
 'searchall' => 'amin',
 'showingresults' => "Maiparang dita baba agingga {{PLURAL:$1|iti '''1''' a nagbanagan|dagiti '''$1''' a nagbanagan}} a mangrugi iti #'''$2'''.",
+'showingresultsinrange' => 'Mangipakpakita aginggana {{PLURAL:$1|iti <strong>1</strong> a resulta|dagiti <strong>$1</strong> a resulta}} iti sakop ti #<strong>$2</strong> aginggana ti #<strong>$3</strong>.',
 'showingresultsnum' => "Maipakpakita dita baba  {{PLURAL:$3|iti '''1''' a nagbanagan|dagiti '''$3''' a nagbanagan}} a mangrugi iti #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Nagbanagan a '''$1''' iti '''$3'''|Dagiti Nagbanagan a '''$1 - $2''' iti '''$3'''}} para iti '''$4'''",
 'search-nonefound' => 'Awan ti nagbanagan a kapadpada ti sinapul.',
@@ -1416,7 +1437,7 @@ Ti esurat a pagtaengam ket saan a maipakita kadagiti agar-aramat nga agkontak ke
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'basaen datoy a panid',
-'action-edit' => 'urnosen datoy a panid',
+'action-edit' => 'agurnos iti datoy a panid',
 'action-createpage' => 'agpartuat kadagiti panid',
 'action-createtalk' => 'agaramid kadagiti pagtungtungan a panid',
 'action-createaccount' => 'agpartuat ti pakabilangan daytoy nga agar-aramat',
@@ -1469,15 +1490,28 @@ Ti esurat a pagtaengam ket saan a maipakita kadagiti agar-aramat nga agkontak ke
 'recentchanges-label-bot' => 'Daytoy a panag-urnos ket inaramid babaen ti maysa a bot',
 'recentchanges-label-unpatrolled' => 'Daytoy a panag-urnos ket saan pay a napatruliaan',
 'recentchanges-label-plusminus' => 'Ti panagbaliw ti kadakkel ti panid babaen ti bilang dagiti byte',
+'recentchanges-legend-heading' => "'''Leyenda:'''",
 'recentchanges-legend-newpage' => '(kitaen pay ti [[Special:NewPages|listaan ti baro a pampanid]])',
-'rcnotefrom' => "Dita baba ket dagiti sinukatan manipud idi '''$2''' (agingga iti '''$1''' a naipakita).",
+'rcnotefrom' => 'Dita baba ket dagiti sinukatan manipud idi strong>$2</strong> (agingga iti <strong>$1</strong> a naipakita).',
 'rclistfrom' => 'Ipakita dagiti kabarbaro a sinukatan a mangrugi manipud idi $1',
 'rcshowhideminor' => '$1 dagiti bassit a panag-urnos',
+'rcshowhideminor-show' => 'Ipakita',
+'rcshowhideminor-hide' => 'Ilemmeng',
 'rcshowhidebots' => '$1 dagiti bot',
-'rcshowhideliu' => '$1 dagiti nakastrek nga agar-aramat',
+'rcshowhidebots-show' => 'Ipakita',
+'rcshowhidebots-hide' => 'Ilemmeng',
+'rcshowhideliu' => '$1 dagiti nakarehistro nga agar-aramat',
+'rcshowhideliu-show' => 'Ipakita',
+'rcshowhideliu-hide' => 'Ilemmeng',
 'rcshowhideanons' => '$1 dagiti di am-ammo nga agar-aramat',
+'rcshowhideanons-show' => 'Ipakita',
+'rcshowhideanons-hide' => 'Ilemmeng',
 'rcshowhidepatr' => '$1 dagiti napatrulian a panag-urnos',
+'rcshowhidepatr-show' => 'Ipakita',
+'rcshowhidepatr-hide' => 'Ilemmeng',
 'rcshowhidemine' => '$1 dagiti inurnosko',
+'rcshowhidemine-show' => 'Ipakita',
+'rcshowhidemine-hide' => 'Ilemmeng',
 'rclinks' => 'Ipakita dagiti naudi a $1 a sinukatan iti kallabes a $2 nga al-aldaw<br />$3',
 'diff' => 'sabali',
 'hist' => 'saritaan',
@@ -1598,6 +1632,8 @@ No kayatmo pay latta nga ipan ti papeles, pangngaasi nga agsublika ken usarem ti
 'file-exists-duplicate' => 'Daytoy a papeles ket duplikado kadagiti sumaganad a {{PLURAL:$1|papeles|pappapeles}}:',
 'file-deleted-duplicate' => 'Ti papeles a kapadpada ti papeles a ([[:$1]]) ket naikkat idin.
 Kitaem koma ti pakasaritaan a panakaikkat ti papeles sakbay a mangirugika ti pinag-ipan.',
+'file-deleted-duplicate-notitle' => 'Ti papales a kapada ti daytoy a papeles ket dati a naikkat, ken nalapdan ti titulo.
+Nasken nga agdamagka ti addaan ti abilidad a mangkita ti nalapdan a datos ti papeles tapno marepaso ti kasasaad sakbay a mapan nga ikarga manen daytoy.',
 'uploadwarning' => 'Ballaag iti pinag-ipan',
 'uploadwarning-text' => 'Pangngaasi a baliwam ti deskripsion ti papeles ken padasem manen.',
 'savefile' => 'Idulin ti papeles',
@@ -1610,6 +1646,8 @@ Kitaem koma ti pakasaritaan a panakaikkat ti papeles sakbay a mangirugika ti pin
 'php-uploaddisabledtext' => 'Ti pinag-ipan ti papeles ket naiddep idiay PHP.
 Panngaasi a kitaem ti pannakaikabil ti pinag-ipan ti papeles.',
 'uploadscripted' => 'Daytoy a papeles ket adda nagyanna a HTML wenno panagsurat a kodigo a mabalin nga agpakamali ti panagbasa ti sapot a pagbasabasa.',
+'uploadscriptednamespace' => 'Daytoy a papeles ti SVG ket aglaon ti maysa a saan a mabalin a nagan ti espasio ti "$1"',
+'uploadinvalidxml' => 'Ti XML iti naikarga a papeles ket saan a maiwaswas.',
 'uploadvirus' => 'Addaan ti birus daytoy a papeles! Salaysay: $1',
 'uploadjava' => 'Daytoy a papeles ket ZIP a papeles nga adda nagyanna a Java .a kita ti papeles.
 Saan a mabalin ti pinag-ipan ti Java a papeles, ngamin ket palabsanda dagiti seguridad a pangrestrikto.',
@@ -1969,9 +2007,20 @@ Tattan ket naibaw-ing idiay [[$2]].',
 'deadendpagestext' => 'Dagitoy a pampanid ket saan a nakasilpo ti sabali a pampanid ditoy {{SITENAME}} .',
 'protectedpages' => 'Dagiti nasalakniban a panid',
 'protectedpages-indef' => 'Inggat ingana a salakniban laeng',
+'protectedpages-summary' => 'Daytoy a panid ket ilistana dagiti adda a panid nga agdama a nasalakniban. Para iti listaan dagiti titulo a nasalakniban manipud ti pannakapartuat, kitaen ti [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Dagiti sariap a salaknib laeng',
+'protectedpages-noredirect' => 'Ilemmeng dagiti baw-ing',
 'protectedpagesempty' => 'Awan ti pampanid nga agdama a nasalakniban babaen kadagitoy a parametro.',
+'protectedpages-timestamp' => 'Petsa ken oras',
+'protectedpages-page' => 'Panid',
+'protectedpages-expiry' => 'Agpaso',
+'protectedpages-performer' => 'Salakniban ti agar-aramat',
+'protectedpages-params' => 'Dagiti parametro ti panagsalaknib',
+'protectedpages-reason' => 'Rason',
+'protectedpages-unknown-timestamp' => 'Di ammo',
+'protectedpages-unknown-performer' => 'Di ammo nga agar-aramat',
 'protectedtitles' => 'Dagiti nasalakniban a titulo',
+'protectedtitles-summary' => 'Daytoy a panid ket ilistana dagiti titulo nga agdama a nasalakniban manipud ti pannakapartuat. Para iti listaan dagiti adda a panid a nasalakniban, kitaen ti [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Awan dagiti titulo nga agdama a nasalakniban iti dagitoy a parametro.',
 'listusers' => 'Listaan dagiti agar-aramat',
 'listusers-editsonly' => 'Ipakita laeng dagiti agar-aramat nga adda inurnosda',
@@ -2157,6 +2206,7 @@ Dagiti masakbayan a panagsukat iti daytoy a panid ken dagiti mainaig a tungtunga
 'watchmethod-list' => 'kitkitaen dagiti bambantayan a panid kadagiti kinaudi nga inurnos',
 'watchlistcontains' => 'Ti listaan ti bambantayam ket aglaon ti $1 {{PLURAL:$1|a panid|a pampanid}}.',
 'iteminvalidname' => "Parikut iti banag '$1', imbalido a nagan...",
+'wlnote2' => 'Dita baba ket dagiti binalbaliwan {{PLURAL:$1|iti napalabas nga oras|kadagiti napalabas a <strong>$1</strong> nga oras}}, manipud idi $2, $3.',
 'wlshowlast' => 'Ipakita dagiti naudi a $1 nga or-oras $2 nga al-aldaw $3',
 'watchlist-options' => 'Dagiti pagpilian ti listaan a bambantayan',
 
@@ -2245,6 +2295,7 @@ Ti panagikkat ti kastoy a pammpanid ket naparitan tapno mapawilan ti saan nga in
 'delete-warning-toobig' => 'Daytoy a panid ket adda ti dakkel unay a pakasaritaan ti panag-urnos, ti kaadu nga $1 {{PLURAL:$1|panagbaliw|dagiti panagbaliw}}.
 Ti panagikkat ket madisturbo ti panagpataray ti database ti {{SITNAME}};
 agal-aluadka a mangrugi.',
+'deleting-backlinks-warning' => "'''Ballaag:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Dagiti dadduma a panid]] ket naisilpo wenno nailak-am manipud ti panid a gangani nga ikkatem.",
 
 # Rollback
 'rollback' => 'Isubli dagiti panag-urnos',
@@ -2426,8 +2477,10 @@ Ti naudi a listaan ti pannakaserra ket adda dita baba tapno mausar a reperensia:
 'sp-contributions-blocked-notice-anon' => 'Daytoy nga IP a pagtaengan ket naserraan.
 Ti naudi a listaan ti pannakaserra ket adda dita baba tapno mausar a reperensia:',
 'sp-contributions-search' => 'Agsapul para kadagiti naar-aramid',
+'sp-contributions-suppresslog' => 'pasardengen dagiti kontribusion ti agar-aramat',
 'sp-contributions-username' => 'IP a pagtaengan wenno nagan ti agar-aramat:',
 'sp-contributions-toponly' => 'Ipakita laeng dagiti inurnos a kinaudian a panagbaliw',
+'sp-contributions-newonly' => 'Ipakita laeng dagiti inurnos a pannakapartuat ti pampanid',
 'sp-contributions-submit' => 'Biruken',
 
 # What links here
@@ -2487,6 +2540,7 @@ Ikkan ti naisangayan a rason dita baba (kas pagarigan, dakamaten ti maysa a pani
 Kitaen ti [[Special:BlockList|listaan ti lapden nga IP ]] tapno marepaso dagiti serra.',
 'ipb-blockingself' => 'Mangrugrugika nga agserra kenka! Sigurado a kayatmo nga aramiden daytoy?',
 'ipb-confirmhideuser' => 'Mangrugrugika ti mangserra ti agar-aramat nga adda ti napabalinna nga "ilemmeng ti agar-aramat". Iddeppenna ti nagan daytoy nga agar-aramat kadagiti amin a listaan ken dagiti naikabkabil ti listaan. Siguradoka a kasta ti kayatmo?',
+'ipb-confirmaction' => 'No segurado a kayatmo nga aramiden daytoy, pangngaasi a kitaen ti "{{int:ipb-confirm}}" a pagikabilan dita baba.',
 'ipb-edit-dropdown' => 'Urnosen dagiti rason ti panagserra',
 'ipb-unblock-addr' => 'Lukatan ti serra ni $1',
 'ipb-unblock' => 'Lukatan ti serra ti nagan ti agar-aramat wenno IP a pagtaengan',
@@ -2528,8 +2582,8 @@ Kitaen ti [[Special:BlockList|listaan ti lapden nga IP ]] tapno marepaso dagiti
 'change-blocklink' => 'baliwan  ti serra',
 'contribslink' => 'aramid',
 'emaillink' => 'ipatulod ti esurat',
-'autoblocker' => 'Automatiko a naserraan ngamin ket ti IP a pagtaengan ket damdama nga inusar ni "[[User:$1|$1]]".
-Ti rason nga inted ti $1\'s serra ket: "$2"',
+'autoblocker' => 'Automatiko a naserraan ngamin ket ti IP a pagtaengam ket naudi nga inusar babaen ni "[[User:$1|$1]]".
+Ti inted a rason para iti serra ni $1 ket: "$2"',
 'blocklogpage' => 'Listaan ti naserraan',
 'blocklog-showlog' => 'Daytoy nga agar-aramat ket dati a naserraan.
 Ti listaan ti serra ket naikabil dita baba tapno mausar a reperensia:',
@@ -2551,7 +2605,7 @@ Kitaen ti [[Special:BlockList|Listaan ti lapden nga IP]] para iti listaan kadagi
 'range_block_disabled' => 'Ti abilidad ti administrador nga agaramid ti nasakupan a serra ket naiddep.',
 'ipb_expiry_invalid' => 'Imbalido ti oras a panagpaso.',
 'ipb_expiry_temp' => 'Ti serra ti nagan ti agar-aramat ket masapul a permanente.',
-'ipb_hide_invalid' => 'Saan a mapasardeng daytoy a pakabilangan; adda ngata adu unay nga inurnosna.',
+'ipb_hide_invalid' => 'Saan a mapasardeng daytoy a pakabilangan; daytoy ket addaan ti ad-adu ngem {{PLURAL:$1|maysa nga inurnos|dagiti $1 nga inurnos}}.',
 'ipb_already_blocked' => ' "$1" ket naserraan',
 'ipb-needreblock' => '$1 ket naseraan. Kayatmo a sukatan ti serrana?',
 'ipb-otherblocks-header' => 'Sabali {{PLURAL:$1|a naserraan|kadagiti naserraan}}',
@@ -2724,6 +2778,7 @@ Pangngaasi a bisitaen ti [https://www.mediawiki.org/wiki/Localisation Lokalisasi
 'allmessages-prefix' => 'Sagaten babaen ti pasaruno:',
 'allmessages-language' => 'Pagsasao:',
 'allmessages-filter-submit' => 'Inkan',
+'allmessages-filter-translate' => 'Ipatarus',
 
 # Thumbnails
 'thumbnail-more' => 'Padakkelen',
@@ -2740,6 +2795,7 @@ $2',
 'thumbnail_image-type' => 'Daytoy a kita ti ladawan ket saan a nasuportaran.',
 'thumbnail_gd-library' => 'Saan a kompleto a GD biblioteka a pannakaaramid: Awan ti opisio ti $1',
 'thumbnail_image-missing' => 'Daytoy a papeles ket kasla napukaw: $1',
+'thumbnail_image-failure-limit' => 'Adu unayen dagiti nabiit a napaay a panagipadas ($1 wenno ad-adu) a panangiparamg daytoy bassit a ladawan. Pangngaasi a padasen manen intono madamdama.',
 
 # Special:Import
 'import' => 'Agala kadagiti panid',
@@ -2777,7 +2833,7 @@ Paset laeng ti papeles ti napag-ipan.',
 Awan ti saan nga agnayon a polder.',
 'import-parse-failure' => 'Napaay ti pinagala ti XML parse',
 'import-noarticle' => 'Awan ti panid a maaala!',
-'import-nonewrevisions' => 'Amin a panagbalbaliw ket dati a naala.',
+'import-nonewrevisions' => 'Awan dagiti naala panagbalbaliw (mabalin nga adda amin dagitoyen, wenno nalabsan gapu kadagiti biddut).',
 'xml-error-string' => '$1 iti linia $2, tukol $3 (byte $4): $5',
 'import-upload' => 'Ipan ti XML data',
 'import-token-mismatch' => 'Napukaw ti gimong ti datos.
@@ -2789,6 +2845,7 @@ Pangngaasi a padasem manen.',
 'import-error-special' => 'Ti panid ti "$1" ket saan a naala ngamin ket bukod ti  espesial a nagan a lugar a saan nga agpalubos ti pampanid.',
 'import-error-invalid' => 'Ti panid ti "$1" ket saan a naala ngamin ket ti nagan ket imbalido.',
 'import-error-unserialize' => 'Ti panagbaliw ti $2 iti panid ti "$1" ket di maipagsasaruno. Ti panagbalbaliw ket naireporta idi nga agus-usar ti modelo ti $3 a naipagsasaruno a kas $4.',
+'import-error-bad-location' => 'Ti panagbaliw ti $2 nga agus-usar ti modelo a linaon ti $3 ket saan a maipenpen iti "$1" iti daytoy a wiki, gapu ta dayta a modelo ket saan a nasuportaran iti dayta a panid.',
 'import-options-wrong' => 'Saan a husto {{PLURAL:$2|a pagpilian|a pagpilpilian}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Ti naited a ramut ti panid ket imbalido a titulo.',
 'import-rootpage-nosubpage' => 'Ti nagan ti lugar ti "$1" iti ramut ti panid ket saan amangpalubos kadagiti apo ti panid.',
@@ -3568,7 +3625,7 @@ Pangngaasi a pasingkedam nga agpayso a kayatmo a partuten manen daytoy a panid."
 
 # Language selector for translatable SVGs
 'img-lang-default' => '(kasisigud a pagsasao)',
-'img-lang-info' => 'Ipaay daytoy a ladawan iti $1 $2.',
+'img-lang-info' => 'Ipaay daytoy a ladawan iti $1. $2',
 'img-lang-go' => 'Inkan',
 
 # Table pager
@@ -3649,8 +3706,18 @@ Mabalinmo pay nga [[Special:EditWatchlist|usaren ti dati a panagurnos]].',
 'version-parser-function-hooks' => 'Parser a pamay-an dagiti kawit',
 'version-hook-name' => 'Nagan ti kawit',
 'version-hook-subscribedby' => 'Umanamong babaen ti',
-'version-version' => '(Bersion $1)',
-'version-license' => 'Lisensia',
+'version-version' => '($1)',
+'version-license' => 'Lisensia ti MediaWiki',
+'version-ext-license' => 'Lisensia',
+'version-ext-colheader-name' => 'Pagpaatiddog',
+'version-ext-colheader-version' => 'Bersion',
+'version-ext-colheader-license' => 'Lisensia',
+'version-ext-colheader-description' => 'Deskripsion',
+'version-ext-colheader-credits' => 'Dagiti mannurat',
+'version-license-title' => 'Lisensia para iti $1',
+'version-license-not-found' => 'Awan ti nabirukan a naisalaysay a pakaammo ti lisensia para iti daytoy a pagpaatiddog.',
+'version-credits-title' => 'Dagiti pammadayaw para iti $1',
+'version-credits-not-found' => 'Awan dagiti nabirukan a naisalaysay a pammadayaw para iti daytoy a pagpaatiddog.',
 'version-poweredby-credits' => "Daytoy a wiki ket pinaandar ti '''[https://www.mediawiki.org/ MediaWiki]''', karbengan a kopia © 2001-$1 $2.",
 'version-poweredby-others' => 'dadduma pay',
 'version-poweredby-translators' => 'agipatpatarus ti translatewiki.net',
@@ -3668,16 +3735,18 @@ Naka-awatka koman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU Sapasap a
 'version-entrypoints-header-url' => 'URL',
 
 # Special:Redirect
-'redirect' => 'Ibaw-ing babaen ti papeles, agar-aramat, wenno ID ti panagbaliw',
+'redirect' => 'Ibaw-ing babaen ti papeles, agar-aramat, panid wenno ID ti panagbaliw',
 'redirect-legend' => 'Ibaw-ing iti papeles wenno panid',
-'redirect-summary' => 'Daytoy nga espesial a panid ket maibaw-ing iti papeles (iti nagan ti papeles), ti panid (iti ID ti panagbaliw), wenno ti panid ti agar-aramat (iti numeriko nga ID ti agar-aramat). Panag-usar:
+'redirect-summary' => 'Daytoy nga espesial a panid ket maibaw-ing iti papeles (iti nagan ti papeles), ti panid (iti ID wenno panid ti panagbaliw), wenno ti panid ti agar-aramat (iti numeriko nga ID ti agar-aramat). Panag-usar:
 [[{{#Special:Redirect}}/file/Example.jpg]], 
+[[{{#Special:Redirect}}/page/64308]], 
 [[{{#Special:Redirect}}/revision/328429]], wenno
 [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'Inkan',
 'redirect-lookup' => 'Kitaen:',
 'redirect-value' => 'Pateg:',
 'redirect-user' => 'ID ti agar-aramat',
+'redirect-page' => 'ID ti panid',
 'redirect-revision' => 'Panagbaliw ti panid',
 'redirect-file' => 'Nagan ti papeles',
 'redirect-not-exists' => 'Saan a nabirukan ti pateg',
@@ -3695,7 +3764,7 @@ Naka-awatka koman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU Sapasap a
 
 # Special:SpecialPages
 'specialpages' => 'Espesial a pampanid',
-'specialpages-note-top' => 'Sarita',
+'specialpages-note-top' => 'Leyenda',
 'specialpages-note' => '* Kadawyan nga espesial a pampanid.
 * <span class="mw-specialpagerestricted">Nagawidan nga espesial a pampanid.</span>',
 'specialpages-group-maintenance' => 'Dagiti padamag ti panagtaripato',
@@ -3871,6 +3940,7 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'api-error-overwrite' => 'Saan a mabalin a suratan manen iti papeles nga adda ditan.',
 'api-error-stashfailed' => 'Kinauneg a biddut: Napaay ti server ti agidulin ti temporario a papeles',
 'api-error-publishfailed' => 'Kinauneg a biddut: Napaay ti server a nagipablaak ti temporario a papeles.',
+'api-error-stasherror' => 'Adda maysa a biddut bayat nga agikarkarga ti papeles iti stash.',
 'api-error-timeout' => 'Saan a simmungbat ti server iti nanamnama nga oras.',
 'api-error-unclassified' => 'Adda di amammo a biddut a rumsua.',
 'api-error-unknown-code' => 'Di am-ammo a biddut: "$1".',
@@ -3920,10 +3990,12 @@ Iti kinapudno, palawaenna amin dagiti adda ti doble a tukol.',
 'expand_templates_input' => 'Maikabil a testo:',
 'expand_templates_output' => 'Nagbanagan',
 'expand_templates_xml_output' => 'XML a maiparang',
+'expand_templates_html_output' => 'Naata a maiparuar a HTML',
 'expand_templates_ok' => 'OK',
 'expand_templates_remove_comments' => 'Ikkaten dagiti komentario',
 'expand_templates_remove_nowiki' => 'Parmeken dagiti <nowiki> nga etiketa kadagiti nagbanagan',
 'expand_templates_generate_xml' => 'Iparang ti XML parse a kayo',
+'expand_templates_generate_rawhtml' => 'Ipakita ti naata a HTML',
 'expand_templates_preview' => 'Pamadasan',
 
 );
index 64194fe..428f654 100644 (file)
@@ -161,7 +161,6 @@ $messages = array(
 'vector-action-protect' => 'Лораде',
 'vector-action-undelete' => 'Юхаоттаде',
 'vector-action-unprotect' => 'Лорам хувца',
-'vector-simplesearch-preference' => 'Яьржа лахарий довзамаш чуяьккха (Vector skin only)',
 'vector-view-create' => 'Кхолларле',
 'vector-view-edit' => 'Хувцам',
 'vector-view-history' => 'Искар',
index 3753680..895bd5d 100644 (file)
@@ -394,7 +394,6 @@ $messages = array(
 'vector-action-protect' => 'Vernda',
 'vector-action-undelete' => 'Hætta við eyðingu',
 'vector-action-unprotect' => 'Breyta verndunarstigi',
-'vector-simplesearch-preference' => 'Virkja einfaldaða leitarstiku (Vector-þemað eingöngu)',
 'vector-view-create' => 'Skapa',
 'vector-view-edit' => 'Breyta',
 'vector-view-history' => 'Breytingaskrá',
@@ -669,8 +668,6 @@ Ekki gleyma að breyta [[Special:Preferences|{{SITENAME}} stillingunum]] þínum
 'gotaccountlink' => 'Skráðu þig inn',
 'userlogin-resetlink' => 'Gleymdir þú notendaupplýsingunum þínum?',
 'userlogin-resetpassword-link' => 'Gleymdiru lykilorðinu þínu?',
-'helplogin-url' => 'Help:Innskráning',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjálp við innskráningu]]',
 'userlogin-loggedin' => 'Þú ert búin(n) að skrá þig inn sem {{GENDER:$1|$1}}.
 Notaðu eyðablaðið fyrir neðan til að skrá þig inn sem annar notandi.',
 'userlogin-createanother' => 'Stofna annan aðgang',
@@ -763,6 +760,7 @@ Vinsamlegast bíðið $1 áður en þú reynir aftur.',
 'loginlanguagelabel' => 'Tungumál: $1',
 'suspicious-userlogout' => 'Beiðni um útskráningu hafnað því hún var líklegast send frá biluðum vafra eða vefseli sem hefur vistað vefsíðuna í flýtiminni.',
 'createacct-another-realname-tip' => 'Alvöru nafn er valfrjálst. Ef þú kýst að gefa það upp, verður það notað til að gefa þér heiður af verkum þínum.',
+'pt-createaccount' => 'Stofna aðgang',
 
 # Email sending
 'php-mail-error-unknown' => 'Óþekkt villa í PHP mail() aðgerð.',
@@ -1165,8 +1163,6 @@ Frekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGE
 'revdelete-show-file-submit' => 'Já',
 'revdelete-selected' => "'''{{PLURAL:$2|Valin breyting|Valdar breytingar}} fyrir [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Valin aðgerð|Valdar aðgerðir}}:'''",
-'revdelete-text' => "'''Eyddar útgáfur og breytingar munu birtast áfram í breytingarskrá síðunnar og í aðgerðarskrám, en hluti upplýsingana verða falin almenningi.'''
-Önnur möppudýr á {{SITENAME}} hafa aðgang að földu upplýsingunum og geta endurvakið upplýsingarnar í gegnum sama viðmót, nema sérstakar takmarkanir séu virkar.",
 'revdelete-confirm' => 'Vinsamlegast staðfestu að þú viljir gera þetta, að þú skiljir afleiðingarnar og að þú sért að gera þetta í samræmi við  [[{{MediaWiki:Policy-url}}]].',
 'revdelete-suppress-text' => "Bælingu á '''eingöngu''' að nota í eftirfarandi tilfellum:
 * Mögulegar ærumleiðandi upplýsingar
@@ -1282,7 +1278,8 @@ Frekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENA
 'shown-title' => 'Sýna $1 {{PLURAL:$1|niðurstöðu|niðurstöður}} á hverri síðu',
 'viewprevnext' => 'Skoða ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''Það er síða að nafni „[[:$1]]“ á þessum wiki'''",
-'searchmenu-new' => "'''Skapaðu síðuna \"[[:\$1]]\" á þessum wiki!'''",
+'searchmenu-new' => '<strong>Skapaðu síðuna "[[:$1]]" á þessum wiki!<strong>
+Sjá einnig {{PLURAL:$2|0=|leitarniðurstöðuna|leitarniðurstöðurnar}}.',
 'searchprofile-articles' => 'Efnissíður',
 'searchprofile-project' => 'Hjálpar- og verkefnasíður',
 'searchprofile-images' => 'Margmiðlanir',
@@ -1621,11 +1618,23 @@ Tölvupóstfang þitt er ekki gefið upp þegar aðrir notendur hafa samband vi
 'rcnotefrom' => "Að neðan eru breytingar síðan '''$2''' (allt að '''$1''' sýndar).",
 'rclistfrom' => 'Sýna breytingar frá og með $1',
 'rcshowhideminor' => '$1 minniháttar breytingar',
+'rcshowhideminor-show' => 'Sýna',
+'rcshowhideminor-hide' => 'Fela',
 'rcshowhidebots' => '$1 vélmenni',
-'rcshowhideliu' => '$1 innskráða notendur',
+'rcshowhidebots-show' => 'Sýna',
+'rcshowhidebots-hide' => 'Fela',
+'rcshowhideliu' => '$1 skráðir notendur',
+'rcshowhideliu-show' => 'Sýna',
+'rcshowhideliu-hide' => 'Fela',
 'rcshowhideanons' => '$1 óinnskráða notendur',
+'rcshowhideanons-show' => 'Sýna',
+'rcshowhideanons-hide' => 'Fela',
 'rcshowhidepatr' => '$1 vaktaðar breytingar',
+'rcshowhidepatr-show' => 'Sýna',
+'rcshowhidepatr-hide' => 'Fela',
 'rcshowhidemine' => '$1 mínar breytingar',
+'rcshowhidemine-show' => 'Sýna',
+'rcshowhidemine-hide' => 'Fela',
 'rclinks' => 'Sýna síðustu $1 breytingar síðustu $2 daga<br />$3',
 'diff' => 'breyting',
 'hist' => 'breytingaskrá',
@@ -3041,8 +3050,8 @@ Vinsamlegast reyndu aftur.',
 'spam_reverting' => 'Tek aftur síðustu breytingu sem inniheldur ekki tengil á $1',
 'spam_blanking' => 'Allar útgáfur innihéldu tengla á $1, tæmi síðuna',
 'spam_deleting' => 'Allar útgáfur innihéldu tengla á $1, eyði síðunni',
-'simpleantispam-label' => "Kæfuvörn.
-'''EKKI''' fylla þetta út!",
+'simpleantispam-label' => 'Kæfuvörn.
+<strong>EKKI</strong> fylla þetta út!',
 
 # Info page
 'pageinfo-title' => 'Upplýsingar um $1',
index e2710fa..4fcdad9 100644 (file)
@@ -11,6 +11,7 @@
  * @author Airon90
  * @author Amire80
  * @author Andria
+ * @author Ankabel
  * @author Aushulz
  * @author Beta16
  * @author Blaisorblade
@@ -26,6 +27,7 @@
  * @author Danmaz74
  * @author Darth Kule
  * @author DexterMorgan
+ * @author Diana
  * @author F. Cosoleto
  * @author FRacco
  * @author Felis
@@ -37,6 +39,7 @@
  * @author Kaganer
  * @author Klutzy
  * @author Marco 27
+ * @author Maria victoria
  * @author Martorell
  * @author Marzedu
  * @author McDutchie
@@ -330,7 +333,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Inviami una copia dei messaggi spediti agli altri utenti',
 'tog-diffonly' => 'Non visualizzare il contenuto della pagina dopo il confronto tra versioni',
 'tog-showhiddencats' => 'Mostra le categorie nascoste',
-'tog-noconvertlink' => 'Disattiva la conversione dei titoli dei link',
 'tog-norollbackdiff' => 'Non mostrare il confronto tra versioni dopo aver effettuato un rollback',
 'tog-useeditwarning' => 'Avvisa quando si esce da una pagina di modifica con modifiche non salvate',
 'tog-prefershttps' => "Usa sempre una connessione sicura quando si effettua l'accesso",
@@ -455,9 +457,8 @@ $messages = array(
 'vector-action-delete' => 'Cancella',
 'vector-action-move' => 'Sposta',
 'vector-action-protect' => 'Proteggi',
-'vector-action-undelete' => 'Recupera',
+'vector-action-undelete' => 'Ripristina',
 'vector-action-unprotect' => 'Cambia la protezione',
-'vector-simplesearch-preference' => 'Abilita la barra per la ricerca semplificata (solo per la skin Vector)',
 'vector-view-create' => 'Crea',
 'vector-view-edit' => 'Modifica',
 'vector-view-history' => 'Cronologia',
@@ -741,8 +742,6 @@ Non dimenticare di personalizzare le [[Special:Preferences|preferenze di {{SITEN
 'gotaccountlink' => 'Entra',
 'userlogin-resetlink' => 'Hai dimenticato i tuoi dati di accesso?',
 'userlogin-resetpassword-link' => 'Hai dimenticato la password?',
-'helplogin-url' => 'Help:Login',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Aiuto con il login]]',
 'userlogin-loggedin' => 'Sei già connesso come {{GENDER:$1|$1}}.
 Usa il modulo sottostante per accedere come altro utente.',
 'userlogin-createanother' => "Crea un'altra utenza",
@@ -828,6 +827,10 @@ Attendi $1 e riprova in seguito.',
 'loginlanguagelabel' => 'Lingua: $1',
 'suspicious-userlogout' => 'La tua richiesta di disconnessione è stata negata perché sembra inviata da un browser non funzionante o un proxy di caching.',
 'createacct-another-realname-tip' => "L'indicazione del proprio nome vero è opzionale; se si sceglie di inserirlo, verrà utilizzato per attribuire la paternità dei contenuti inviati.",
+'pt-login' => 'Entra',
+'pt-login-button' => 'Entra',
+'pt-createaccount' => 'Registrati',
+'pt-userlogout' => 'Esci',
 
 # Email sending
 'php-mail-error-unknown' => 'Errore sconosciuto nella funzione PHP mail()',
@@ -836,7 +839,7 @@ Attendi $1 e riprova in seguito.',
 
 # Change password dialog
 'changepassword' => 'Cambia password',
-'resetpass_announce' => "L'accesso è stato effettuato con un codice temporaneo, inviato via e-mail. Per completare l'accesso è necessario impostare una nuova password:",
+'resetpass_announce' => "Per completare l'accesso, è necessario impostare una nuova password.",
 'resetpass_text' => '<!-- Aggiungere il testo qui -->',
 'resetpass_header' => "Cambia la password dell'account",
 'oldpassword' => 'Vecchia password:',
@@ -852,8 +855,15 @@ Attendi $1 e riprova in seguito.',
 'resetpass-submit-cancel' => 'Annulla',
 'resetpass-wrong-oldpass' => 'Password temporanea o attuale non valida.
 La password potrebbe essere stata già cambiata, oppure potrebbe essere stata richiesta una nuova password temporanea.',
+'resetpass-recycled' => 'Si prega di reimpostare con una password diversa dalla password attuale.',
+'resetpass-temp-emailed' => "L'accesso è stato effettuato con un codice temporaneo, inviato via email. Per completare la registrazione, è necessario impostare una nuova password qui:",
 'resetpass-temp-password' => 'Password temporanea:',
 'resetpass-abort-generic' => "La modifica della password è stata interrotta da un'estensione.",
+'resetpass-expired' => "La password è scaduta. Si prega di impostare una nuova password per effettuare l'accesso.",
+'resetpass-expired-soft' => 'La tua password è scaduta e deve essere reimpostata. Si prega di scegliere una nuova password o fare clic su "{{int:resetpass-submit-cancel}}" per reimpostarla successivamente.',
+'resetpass-validity-soft' => 'La tua password non è valida: $1
+
+Si prega di scegliere una nuova password o fare clic su "{{int:resetpass-submit-cancel}}" per reimpostarla successivamente.',
 
 # Special:PasswordReset
 'passwordreset' => 'Reimposta password',
@@ -891,15 +901,15 @@ Password temporanea: $2',
 'passwordreset-emailerror-capture' => "È stata generata una email di reimpostazione della password, riportata di seguito. L'invio {{GENDER:$2|all'utente}} non è riuscito: $1",
 
 # Special:ChangeEmail
-'changeemail' => "Modifica l'indirizzo e-mail",
-'changeemail-header' => "Modifica l'indirizzo e-mail dell'account",
-'changeemail-text' => 'Completa questo modulo per cambiare il tuo indirizzo e-mail. Sarà necessario inserire la password per confermare la modifica.',
+'changeemail' => 'Modifica indirizzo email',
+'changeemail-header' => "Modifica l'indirizzo email dell'account",
+'changeemail-text' => 'Completa questo modulo per cambiare il tuo indirizzo email. Sarà necessario inserire la password per confermare la modifica.',
 'changeemail-no-info' => "Devi aver effettuato l'accesso per accedere a questa pagina direttamente.",
-'changeemail-oldemail' => 'Indirizzo e-mail attuale:',
-'changeemail-newemail' => 'Nuovo indirizzo e-mail:',
+'changeemail-oldemail' => 'Indirizzo email attuale:',
+'changeemail-newemail' => 'Nuovo indirizzo email:',
 'changeemail-none' => '(nessuno)',
 'changeemail-password' => 'La password su {{SITENAME}}:',
-'changeemail-submit' => 'Modifica e-mail',
+'changeemail-submit' => 'Modifica email',
 'changeemail-cancel' => 'Annulla',
 'changeemail-throttled' => 'Sono stati effettuati troppi tentativi di accesso.
 Attendi $1 e riprova in seguito.',
@@ -1230,8 +1240,10 @@ In quanto amministratore puoi visualizzare questo confronto di versioni; potrebb
 'revdelete-show-file-submit' => 'Sì',
 'revdelete-selected' => "'''{{PLURAL:$2|Versione selezionata|Versioni selezionate}} di [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Evento del registro selezionato|Eventi del registro selezionati}}:'''",
-'revdelete-text' => "'''Le versioni cancellate restano visibili nella cronologia della pagina, mentre il testo contenuto non è accessibile al pubblico.'''
-Gli altri amministratori di {{SITENAME}} potranno accedere comunque ai contenuti nascosti e ripristinarli attraverso questa stessa interfaccia, se non sono state impostate altre limitazioni in fase di installazione del sito.",
+'revdelete-text-text' => 'Le versioni cancellate appariranno ancora nella cronologia della pagina, ma parti del loro contenuto sarà inaccessibile al pubblico.',
+'revdelete-text-file' => 'Le versioni di file cancellati appariranno ancora nella cronologia del file, ma parti del loro contenuto sarà inaccessibile al pubblico.',
+'logdelete-text' => 'Gli eventi cancellati appariranno ancora nei registri, ma parti del loro contenuto sarà inaccessibile al pubblico.',
+'revdelete-text-others' => 'Altri amministratori di {{SITENAME}} saranno ancora in grado di accedere ai contenuti nascosti e potranno ripristinarli nuovamente attraverso questa stessa interfaccia, se non sono state impostate restrizioni aggiuntive.',
 'revdelete-confirm' => 'Per favore conferma che questo è quanto intendi fare, che sei consapevole delle conseguenze, e che stai facendo questo nel rispetto delle [[{{MediaWiki:Policy-url}}|linee guida]].',
 'revdelete-suppress-text' => "La rimozione dovrebbe essere utilizzata '''unicamente''' nei seguenti casi:
 * informazioni potenzialmente diffamatorie
@@ -1369,6 +1381,7 @@ I dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{
 'searchrelated' => 'correlati',
 'searchall' => 'tutti',
 'showingresults' => "Di seguito {{PLURAL:$1|viene presentato al massimo '''1''' risultato|vengono presentati al massimo '''$1''' risultati}} a partire dal numero '''$2'''.",
+'showingresultsinrange' => '{{PLURAL:$1|Viene mostrato|Vengono mostrati}} sotto {{PLURAL:$1|<strong>1</strong> risultato|<strong>$1</strong> risultati}} dal <strong>$2</strong> al <strong>$3</strong>.',
 'showingresultsnum' => "Di seguito {{PLURAL:$3|viene presentato '''1''' risultato|vengono presentati '''$3''' risultati}} a partire dal numero '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Risultato '''$1''' di '''$3'''|Risultati '''$1 - $2''' di '''$3'''}} per '''$4'''",
 'search-nonefound' => 'La ricerca non ha prodotto risultati.',
@@ -1404,8 +1417,8 @@ I dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{
 'prefs-watchlist-token' => 'Token osservati speciali:',
 'prefs-misc' => 'Varie',
 'prefs-resetpass' => 'Cambia password',
-'prefs-changeemail' => 'Modifica e-mail',
-'prefs-setemail' => 'Imposta un indirizzo e-mail',
+'prefs-changeemail' => 'Modifica email',
+'prefs-setemail' => 'Imposta un indirizzo email',
 'prefs-email' => 'Opzioni email',
 'prefs-rendering' => 'Aspetto',
 'saveprefs' => 'Salva le preferenze',
@@ -1473,10 +1486,10 @@ Il software utilizza questo valore per rivolgersi a te e menzionarti agli altri
 Questa informazione sarà pubblica.",
 'email' => 'Indirizzo email',
 'prefs-help-realname' => "L'indicazione del proprio nome vero è opzionale; se si sceglie di inserirlo, verrà utilizzato per attribuire la paternità dei contenuti inviati.",
-'prefs-help-email' => "L'inserimento del proprio indirizzo e-mail è facoltativo, ma permette di ricevere la propria password qualora venisse dimenticata.",
+'prefs-help-email' => "L'inserimento del proprio indirizzo email è facoltativo, ma permette di ricevere la propria password qualora venisse dimenticata.",
 'prefs-help-email-others' => 'Puoi anche scegliere di lasciare che gli altri ti contattino via posta elettronica con un collegamento dalla tua pagina utente o di discussione.
 Il tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.',
-'prefs-help-email-required' => 'Indirizzo e-mail obbligatorio.',
+'prefs-help-email-required' => "L'indirizzo email è obbligatorio.",
 'prefs-info' => 'Informazioni di base',
 'prefs-i18n' => 'Internazionalizzazione',
 'prefs-signature' => 'Firma',
@@ -1685,14 +1698,26 @@ Il tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.',
 'recentchanges-legend-heading' => "'''Legenda:'''",
 'recentchanges-legend-newpage' => "(vedi anche [[Special:NewPages|l'elenco delle nuove pagine]])",
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "Di seguito sono elencate le modifiche apportate a partire da '''$2''' (fino a '''$1''').",
+'rcnotefrom' => 'Di seguito sono elencate le modifiche apportate a partire da <strong>$2</strong> (mostrate fino a <strong>$1</strong>).',
 'rclistfrom' => 'Mostra le modifiche apportate a partire da $1',
 'rcshowhideminor' => '$1 le modifiche minori',
+'rcshowhideminor-show' => 'Mostra',
+'rcshowhideminor-hide' => 'Nascondi',
 'rcshowhidebots' => '$1 i bot',
+'rcshowhidebots-show' => 'Mostra',
+'rcshowhidebots-hide' => 'Nascondi',
 'rcshowhideliu' => '$1 gli utenti registrati',
+'rcshowhideliu-show' => 'Mostra',
+'rcshowhideliu-hide' => 'Nascondi',
 'rcshowhideanons' => '$1 gli utenti anonimi',
+'rcshowhideanons-show' => 'Mostra',
+'rcshowhideanons-hide' => 'Nascondi',
 'rcshowhidepatr' => '$1 le modifiche verificate',
+'rcshowhidepatr-show' => 'Mostra',
+'rcshowhidepatr-hide' => 'Nascondi',
 'rcshowhidemine' => '$1 le mie modifiche',
+'rcshowhidemine-show' => 'Mostra',
+'rcshowhidemine-hide' => 'Nascondi',
 'rclinks' => 'Mostra le $1 modifiche più recenti apportate negli ultimi $2 giorni<br />$3',
 'diff' => 'diff',
 'hist' => 'cron',
@@ -1809,6 +1834,8 @@ Se si dispone dell'immagine nella risoluzione originale, si prega di caricarla.
 'uploaddisabledtext' => 'Il caricamento dei file non è attivo.',
 'php-uploaddisabledtext' => 'Il caricamento di file tramite PHP è disabilitato. Controlla la configurazione di file_uploads.',
 'uploadscripted' => 'Questo file contiene codice HTML o di script, che potrebbe essere interpretato erroneamente da un browser web.',
+'uploadscriptednamespace' => "Questo file SVG contiene un namespace '$1' non consentito",
+'uploadinvalidxml' => 'Il codice XML nel file caricato non può essere elaborato.',
 'uploadvirus' => 'Questo file contiene un virus! Dettagli: $1',
 'uploadjava' => "Questo file è un file ZIP che contiene un file .class Java.
 Carica i file Java non è consentito, perché possono causare l'aggiramento delle restrizioni di sicurezza.",
@@ -2173,10 +2200,20 @@ I redirect <del>cancellati</del> sono stati corretti.',
 'deadendpagestext' => 'Le pagine indicate di seguito sono prive di collegamenti verso altre pagine di {{SITENAME}}.',
 'protectedpages' => 'Pagine protette',
 'protectedpages-indef' => 'Solo protezioni infinite',
+'protectedpages-summary' => "Questa pagina elenca le pagine esistenti che sono attualmente protette. Per un'elenco di titoli protetti dalla creazione, vedi [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
 'protectedpages-cascade' => 'Solo protezioni ricorsive',
 'protectedpages-noredirect' => 'Nascondi redirect',
 'protectedpagesempty' => 'Al momento non vi sono pagine protette',
+'protectedpages-timestamp' => 'Data e ora',
+'protectedpages-page' => 'Pagina',
+'protectedpages-expiry' => 'Scadenza',
+'protectedpages-performer' => "Protetta dall'utente",
+'protectedpages-params' => 'Parametri di protezione',
+'protectedpages-reason' => 'Motivo',
+'protectedpages-unknown-timestamp' => 'Sconosciuto',
+'protectedpages-unknown-performer' => 'Utente sconosciuto',
 'protectedtitles' => 'Titoli protetti',
+'protectedtitles-summary' => "Questa pagina elenca i titoli che sono attualmente protetti dalla creazione. Per un'elenco di pagine esistenti che sono protette, vedi [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
 'protectedtitlesempty' => 'Al momento non esistono titoli protetti con i parametri specificati.',
 'listusers' => 'Elenco degli utenti',
 'listusers-editsonly' => 'Mostra solo utenti con dei contributi',
@@ -2448,7 +2485,7 @@ Consultare il log delle $2 per un elenco delle pagine cancellate di recente.',
 'delete-edit-reasonlist' => 'Modifica i motivi di cancellazione',
 'delete-toobig' => 'La cronologia di questa pagina è molto lunga (oltre $1 {{PLURAL:$1|revisione|revisioni}}). La sua cancellazione è stata limitata per evitare di creare accidentalmente dei problemi di funzionamento al database di {{SITENAME}}.',
 'delete-warning-toobig' => 'La cronologia di questa pagina è molto lunga (oltre $1 {{PLURAL:$1|revisione|revisioni}}). La sua cancellazione può creare dei problemi di funzionamento al database di {{SITENAME}}; procedere con cautela.',
-'deleting-backlinks-warning' => "'''Attenzione:''' altre pagine contengono collegamenti o inclusioni alla pagina che stai per cancellare.",
+'deleting-backlinks-warning' => "'''Attenzione:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|altre pagine]] contengono collegamenti o inclusioni alla pagina che stai per cancellare.",
 
 # Rollback
 'rollback' => 'Annulla le modifiche',
@@ -2617,8 +2654,10 @@ $1',
 'sp-contributions-blocked-notice' => "Questo utente è attualmente bloccato. L'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:",
 'sp-contributions-blocked-notice-anon' => "Questo indirizzo IP è attualmente bloccato. Di seguito è riportato l'ultimo elemento del registro dei blocchi:",
 'sp-contributions-search' => 'Ricerca contributi',
+'sp-contributions-suppresslog' => 'contributi utente soppressi',
 'sp-contributions-username' => 'Indirizzo IP o nome utente:',
 'sp-contributions-toponly' => 'Mostra solo i contributi che sono le ultime revisioni per la pagina',
+'sp-contributions-newonly' => 'Visualizza solo le modifiche che sono creazioni di pagina',
 'sp-contributions-submit' => 'Ricerca',
 
 # What links here
@@ -2914,6 +2953,7 @@ $2',
 'thumbnail_image-type' => 'Tipo di immagine non supportato',
 'thumbnail_gd-library' => 'Configurazione incompleta della libreria GD: funzione $1 mancante',
 'thumbnail_image-missing' => 'Sembra essere mancante il file: $1',
+'thumbnail_image-failure-limit' => 'Ci sono stati recentemente troppi tentativi falliti ($1 o più) di generare questa miniatura. Riprova più tardi.',
 
 # Special:Import
 'import' => 'Importa pagine',
@@ -3049,6 +3089,7 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'tooltip-undo' => '"Annulla" permette di annullare questa modifica e apre il modulo di modifica in modalità di anteprima. Permette di inserire una motivazione nell\'oggetto della modifica.',
 'tooltip-preferences-save' => 'Salva le preferenze',
 'tooltip-summary' => 'Inserire una breve sintesi',
+'interlanguage-link-title' => '$1 - $2',
 
 # Stylesheets
 'common.css' => '/* Gli stili CSS inseriti qui si applicano a tutte le skin */',
@@ -4152,6 +4193,4 @@ vale a dire praticamente tutto ciò che si trova tra doppie parentesi graffe.',
 'expand_templates_generate_rawhtml' => 'Mostra HTML',
 'expand_templates_preview' => 'Anteprima',
 
-# Unknown messages
-'uploadinvalidxml' => 'Il codice XML nel file caricato non può essere elaborato.',
 );
index ee9eb39..a059fc8 100644 (file)
@@ -14,6 +14,7 @@
  * @author Aotake
  * @author Aphaia
  * @author Broad-Sky
+ * @author Burthsceh
  * @author Chatama
  * @author Chinneeb
  * @author Emk
  * @author Mizusumashi
  * @author Muttley
  * @author Mzm5zbC3
+ * @author Ochaochaocha3
  * @author Ohgi
  * @author Ort43v
  * @author Penn Station
  * @author Reedy
  * @author Schu
  * @author Shirayuki
+ * @author Sonicarts
  * @author Suisui
  * @author VZP10224
  * @author Vigorous action
  * @author W.CC
  * @author Web comic
+ * @author What here area team
  * @author Whym
  * @author Yanajin66
  * @author לערי ריינהארט
@@ -405,7 +409,6 @@ $messages = array(
 'tog-ccmeonemails' => '他の利用者に送信したメールの控えを自分にも送信',
 'tog-diffonly' => '差分の下にページ内容を表示しない',
 'tog-showhiddencats' => '隠しカテゴリを表示',
-'tog-noconvertlink' => 'リンクタイトル変換を無効にする',
 'tog-norollbackdiff' => '巻き戻し後の差分を表示しない',
 'tog-useeditwarning' => '変更を保存せずに編集画面から離れようとしたら警告',
 'tog-prefershttps' => 'ログインする際、常に SSL (https) 接続を使用する',
@@ -532,7 +535,6 @@ $messages = array(
 'vector-action-protect' => '保護',
 'vector-action-undelete' => '復元',
 'vector-action-unprotect' => '保護再設定',
-'vector-simplesearch-preference' => '簡素化した検索バーを有効にする (ベクター外装のみ)',
 'vector-view-create' => '作成',
 'vector-view-edit' => '編集',
 'vector-view-history' => '履歴表示',
@@ -822,8 +824,6 @@ $2',
 'gotaccountlink' => 'ログインしてください',
 'userlogin-resetlink' => 'ログイン情報をお忘れですか?',
 'userlogin-resetpassword-link' => 'パスワードをお忘れですか?',
-'helplogin-url' => 'Help:ログイン',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ログインのヘルプ]]',
 'userlogin-loggedin' => '{{GENDER:$1|$1}} として既にログインしています。
 別の利用者としてログインするには下のフォームを使用してください。',
 'userlogin-createanother' => '別アカウントを作成',
@@ -925,6 +925,10 @@ $1待ってから再度試してください。',
 'suspicious-userlogout' => '壊れたブラウザーまたはキャッシュプロキシによって送信された可能性があるため、ログアウト要求は拒否されました。',
 'createacct-another-realname-tip' => '本名は省略できます。
 入力すると、その利用者の著作物の帰属表示に使われます。',
+'pt-login' => 'ログイン',
+'pt-login-button' => 'ログイン',
+'pt-createaccount' => 'アカウント作成',
+'pt-userlogout' => 'ログアウト',
 
 # Email sending
 'php-mail-error-unknown' => 'PHPのmail()関数での不明なエラーです。',
@@ -933,8 +937,7 @@ $1待ってから再度試してください。',
 
 # Change password dialog
 'changepassword' => 'パスワードの変更',
-'resetpass_announce' => 'メールでお送りした仮パスワードでログインしました。
-ログインを完了するには、ここで新しいパスワードを設定する必要があります:',
+'resetpass_announce' => 'ログインを完了するには、新しいパスワードを設定する必要があります。',
 'resetpass_text' => '<!-- ここに文を挿入 -->',
 'resetpass_header' => 'アカウントのパスワードの変更',
 'oldpassword' => '古いパスワード:',
@@ -950,8 +953,13 @@ $1待ってから再度試してください。',
 'resetpass-submit-cancel' => '中止',
 'resetpass-wrong-oldpass' => '仮パスワードまたは現在のパスワードが正しくありません。
 パスワードを既に変更した、または新しい仮パスワードを依頼した可能性があります。',
+'resetpass-recycled' => '現在のパスワードとは異なるパスワードを設定してください。',
+'resetpass-temp-emailed' => 'メールでお送りした一時的なコードでログインしています。
+ログインを完了するには、新しいパスワードをここで設定してください:',
 'resetpass-temp-password' => '仮パスワード:',
 'resetpass-abort-generic' => '拡張機能により、パスワードの変更は取り消されました。',
+'resetpass-expired' => 'パスワードの有効期限が切れました。ログインするには新しいパスワードを設定してください。',
+'resetpass-expired-soft' => 'パスワードの有効期限が切れたため、再設定する必要があります。新しいパスワードを今すぐ設定するか、または「{{int:resetpass-submit-cancel}}」をクリックしてあとで再設定してください。',
 
 # Special:PasswordReset
 'passwordreset' => 'パスワードの再設定',
@@ -1272,6 +1280,7 @@ $1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこのブロッ
 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。',
 'undo-failure' => '中間の版での編集と競合したため、取り消せませんでした。',
 'undo-norev' => '取り消そうとした編集が存在しないか削除済みのため取り消せませんでした。',
+'undo-nochange' => '指定した編集は既に取り消されたようです。',
 'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|トーク]]) による版 $1 を取り消し',
 'undo-summary-username-hidden' => '秘匿された利用者による版 $1 を取り消し',
 
@@ -1356,8 +1365,7 @@ $3 が示した理由: ''$2''",
 'revdelete-show-file-submit' => 'はい',
 'revdelete-selected' => '<strong>[[:$1]] の{{PLURAL:$2|選択された版}}:</strong>',
 'logdelete-selected' => '<strong>{{PLURAL:$1|選択された記録項目}}:</strong>',
-'revdelete-text' => '<strong>削除された版や記録項目は引き続きページの履歴や記録に表示されますが、一般利用者はその内容の一部を取得できなくなります。</strong>
-追加の制限がかけられない限り、{{SITENAME}}の他の管理者は同じインターフェイスを使って非表示の内容の取得や復元ができます。',
+'revdelete-text-others' => '追加の制限を設定しない限り、{{SITENAME}} の他の管理者は非表示コンテンツにまだアクセスでき、この同じインターフェースを通してそれを復元することができます。',
 'revdelete-confirm' => 'この操作を行おうとしていること、その結果を理解していること、[[{{MediaWiki:Policy-url}}|方針]]に従っていること、を確認してください。',
 'revdelete-suppress-text' => '秘匿は、<strong>以下の場合に限って</strong>使用すべきです:
 * 名誉毀損のおそれがある記述
@@ -1494,13 +1502,14 @@ $1',
 'search-file-match' => '(ファイルの内容との一致)',
 'search-suggest' => 'もしかして: $1',
 'search-interwiki-caption' => '姉妹プロジェクト',
-'search-interwiki-default' => '$1の結果:',
+'search-interwiki-default' => '$1ã\81\8bã\82\89ã\81®çµ\90æ\9e\9c:',
 'search-interwiki-more' => '(続き)',
 'search-relatedarticle' => '関連',
 'searcheverything-enable' => 'すべての名前空間を検索',
 'searchrelated' => '関連',
 'searchall' => 'すべて',
 'showingresults' => '<strong>$2</strong> 件目以降の最大 {{PLURAL:$1|<strong>$1</strong> 件の結果}}を表示しています。',
+'showingresultsinrange' => '<strong>$2</strong> 件目から<strong>$3</strong> 件目までの範囲内で最大 {{PLURAL:$1|<strong>$1</strong> 件の結果}}を表示しています。',
 'showingresultsnum' => '<strong>$2</strong> 件目以降の {{PLURAL:$3|<strong>$3</strong> 件の結果}}を表示しています。',
 'showingresultsheader' => '「<strong>$4</strong>」の検索結果 {{PLURAL:$5|<strong>$3</strong> 件中の <strong>$1</strong> 件目|<strong>$3</strong> 件中の <strong>$1</strong> 件目から <strong>$2</strong> 件目}}',
 'search-nonefound' => '問い合わせに合致する検索結果はありませんでした。',
@@ -1830,11 +1839,23 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'rcnotefrom' => '以下は<strong>$2</strong>以降の更新です (最大 <strong>$1</strong> 件)。',
 'rclistfrom' => '$1以降の更新を表示する',
 'rcshowhideminor' => '細部の編集を$1',
+'rcshowhideminor-show' => '表示',
+'rcshowhideminor-hide' => '非表示',
 'rcshowhidebots' => 'ボットを$1',
+'rcshowhidebots-show' => '表示',
+'rcshowhidebots-hide' => '非表示',
 'rcshowhideliu' => '登録利用者を$1',
+'rcshowhideliu-show' => '表示',
+'rcshowhideliu-hide' => '非表示',
 'rcshowhideanons' => '匿名利用者を$1',
+'rcshowhideanons-show' => '表示',
+'rcshowhideanons-hide' => '非表示',
 'rcshowhidepatr' => '巡回された編集を$1',
+'rcshowhidepatr-show' => '表示',
+'rcshowhidepatr-hide' => '非表示',
 'rcshowhidemine' => '自分の編集を$1',
+'rcshowhidemine-show' => '表示',
+'rcshowhidemine-hide' => '非表示',
 'rclinks' => '最近 $2 日間の更新を最大 $1 件表示<br />$3',
 'diff' => '差分',
 'hist' => '履歴',
@@ -1972,6 +1993,8 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'php-uploaddisabledtext' => 'ファイルのアップロードがPHPで無効化されています。
 file_uploadsの設定を確認してください。',
 'uploadscripted' => 'このファイルは、ウェブブラウザーが誤って解釈してしまうおそれがあるHTMLまたはスクリプトコードを含んでいます。',
+'uploadscriptednamespace' => 'この SVG ファイルは無効な名前空間「$1」を含んでいます',
+'uploadinvalidxml' => 'アップロードされたファイルに含まれる XML が構文解析できませんでした。',
 'uploadvirus' => 'このファイルはウイルスを含んでいます!
 詳細: $1',
 'uploadjava' => 'このファイルは、Javaの.classファイルを含むZIPファイルです。
@@ -2349,10 +2372,20 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'deadendpagestext' => '以下のページは、{{SITENAME}}の他のページにリンクしていません。',
 'protectedpages' => '保護されているページ',
 'protectedpages-indef' => '無期限保護のみ',
+'protectedpages-summary' => 'このページでは、現時点で保護されている既存のページを列挙します。新規作成が禁止されているページ名の一覧は、[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] を参照してください。',
 'protectedpages-cascade' => 'カスケード保護のみ',
 'protectedpages-noredirect' => 'リダイレクトを隠す',
 'protectedpagesempty' => '指定した条件で保護中のページは現在ありません。',
+'protectedpages-timestamp' => '日時',
+'protectedpages-page' => 'ページ',
+'protectedpages-expiry' => '有効期限',
+'protectedpages-performer' => '保護の実行者',
+'protectedpages-params' => '保護のパラメーター',
+'protectedpages-reason' => '理由',
+'protectedpages-unknown-timestamp' => '不明',
+'protectedpages-unknown-performer' => '不明な利用者',
 'protectedtitles' => '作成保護されているページ名',
+'protectedtitles-summary' => 'このページでは、現時点で新規作成が禁止されているページ名を列挙します。保護されている既存のページの一覧は、[[{{#special:ProtectedPages}}|{{int:protectedpages}}]] を参照してください。',
 'protectedtitlesempty' => 'これらの引数で現在保護されているページはありません。',
 'listusers' => '利用者一覧',
 'listusers-editsonly' => '投稿記録のある利用者のみを表示',
@@ -2631,7 +2664,7 @@ $UNWATCHURL
 'delete-warning-toobig' => 'このページには、 $1版を超える編集履歴があります。
 削除すると、{{SITENAME}}のデータベース処理に大きな負荷がかかります。
 十分に注意してください。',
-'deleting-backlinks-warning' => "'''警告:''' 削除しようとしているページは、他のページからリンクまたは参照読み込みされています。",
+'deleting-backlinks-warning' => "'''警告:''' 削除しようとしているページは、[[Special:WhatLinksHere/{{FULLPAGENAME}}|他のページ]]からリンクまたは参照読み込みされています。",
 
 # Rollback
 'rollback' => '編集を巻き戻し',
@@ -2814,8 +2847,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'このIPアドレスは現在ブロックされています。
 参考のために最近のブロック記録項目を以下に表示します:',
 'sp-contributions-search' => '投稿の検索',
+'sp-contributions-suppresslog' => '利用者の秘匿された投稿',
 'sp-contributions-username' => 'IPアドレスまたは利用者名:',
 'sp-contributions-toponly' => '最新版の編集のみを表示',
+'sp-contributions-newonly' => 'ページ作成を伴う編集のみを表示',
 'sp-contributions-submit' => '検索',
 
 # What links here
@@ -2909,7 +2944,7 @@ $1',
 'noautoblockblock' => '自動ブロック無効',
 'createaccountblock' => 'アカウント作成の禁止',
 'emailblock' => 'メール送信の禁止',
-'blocklist-nousertalk' => 'è\87ªå\88\86ã\81®ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\81®編集禁止',
+'blocklist-nousertalk' => 'è\87ªå\88\86ã\81®ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\82\82編集禁止',
 'ipblocklist-empty' => 'ブロック一覧は空です。',
 'ipblocklist-no-results' => '指定されたIPアドレスまたは利用者名はブロックされていません。',
 'blocklink' => 'ブロック',
@@ -2918,22 +2953,22 @@ $1',
 'contribslink' => '投稿記録',
 'emaillink' => 'メールを送信',
 'autoblocker' => 'この IP アドレスを「[[User:$1|$1]]」が最近使用したため、自動ブロックされています。
-$1 のブロックの理由は「<em>$2</em>」です。',
+$1 のブロックの理由は「$2」です。',
 'blocklogpage' => 'ブロック記録',
 'blocklog-showlog' => 'この利用者は以前にブロックされたことがあります。
 参考のため、ブロック記録を以下に示します:',
 'blocklog-showsuppresslog' => 'この利用者は以前にブロックされ、隠されたことがあります。
 参考のため、秘匿記録を以下に示します:',
-'blocklogentry' => 'が [[$1]] を$2ブロックしました。ブロックの詳細: $3',
+'blocklogentry' => 'が [[$1]] を$2ブロックしました。追加事項: $3',
 'reblock-logentry' => 'が [[$1]] のブロック設定を$2に変更しました。ブロックの詳細: $3',
 'blocklogtext' => 'このページは利用者のブロックと解除の記録です。
 自動的にブロックされたIPアドレスは表示されていません。
 現時点で有効なブロックは[[Special:BlockList|ブロックの一覧]]をご覧ください。',
 'unblocklogentry' => '$1のブロックを解除しました',
 'block-log-flags-anononly' => '匿名利用者のみ',
-'block-log-flags-nocreate' => 'アカウント作成のブロック',
+'block-log-flags-nocreate' => 'アカウント作成禁止',
 'block-log-flags-noautoblock' => '自動ブロック無効',
-'block-log-flags-noemail' => 'メール送信のブロック',
+'block-log-flags-noemail' => 'メール送信禁止',
 'block-log-flags-nousertalk' => '自分のトークページの編集禁止',
 'block-log-flags-angry-autoblock' => '拡張自動ブロック有効',
 'block-log-flags-hiddenname' => '利用者名の秘匿',
@@ -3169,7 +3204,7 @@ $2',
 一時フォルダーがありません。',
 'import-parse-failure' => 'XML取り込みの構文解析に失敗しました',
 'import-noarticle' => '取り込むページがありません!',
-'import-nonewrevisions' => 'すべての版は以前に取り込み済みです。',
+'import-nonewrevisions' => '版のインポートはされませんでした(すべての版が以前に取り込み済みだったか、エラーにより飛ばされたため)。',
 'xml-error-string' => '$1、$2 行の $3 文字目 ($4バイト目): $5',
 'import-upload' => 'XMLデータをアップロード',
 'import-token-mismatch' => 'セッションデータを損失しました。
@@ -4344,13 +4379,13 @@ MediaWikiは、有用であることを期待して配布されていますが
 'dberr-cachederror' => 'これは要求されたページをキャッシュした複製であり、古くなっている可能性があります。',
 
 # HTML forms
-'htmlform-invalid-input' => '入力に何らかの問題があります',
+'htmlform-invalid-input' => '入力に何らかの問題があります',
 'htmlform-select-badoption' => '指定した値は有効な選択肢ではありません。',
 'htmlform-int-invalid' => '指定した値は整数ではありません。',
 'htmlform-float-invalid' => '指定した値は数値ではありません。',
-'htmlform-int-toolow' => '指定した値は、最小値 $1 より小さい値です',
-'htmlform-int-toohigh' => '指定した値は、最大値 $1 を超えています',
-'htmlform-required' => 'この値は必須です',
+'htmlform-int-toolow' => '指定した値は、最小値 $1 より小さい値です',
+'htmlform-int-toohigh' => '指定した値は、最大値 $1 を超えています',
+'htmlform-required' => 'この値は必須です',
 'htmlform-submit' => '送信',
 'htmlform-reset' => '変更を取り消す',
 'htmlform-selectorother-other' => 'その他',
@@ -4508,6 +4543,4 @@ MediaWikiは、有用であることを期待して配布されていますが
 'expand_templates_generate_rawhtml' => 'HTML ソースを表示',
 'expand_templates_preview' => 'プレビュー',
 
-# Unknown messages
-'uploadinvalidxml' => 'アップロードされたファイルに含まれる XML が構文解析できませんでした。',
 );
index 14c4d26..3f56622 100644 (file)
@@ -16,7 +16,6 @@
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Lingk andalainin',
-'tog-justify' => 'Jostifai paragraaf',
 'tog-hideminor' => 'Aid maina edit ina riisant chienj',
 'tog-hidepatrolled' => 'Aid pachruol edit ina riisant chienj',
 'tog-newpageshidepatrolled' => 'Aid pachruol piej frahn nyuu piej lis',
@@ -25,9 +24,7 @@ $messages = array(
 'tog-numberheadings' => 'Aato-nomba edndem',
 'tog-showtoolbar' => 'Shuo edit tuulbaar (rikwaya JavaScript)',
 'tog-editondblclick' => 'Edit piej pahn dobl klik (rikwaya JavaScript)',
-'tog-editsection' => 'Eniebl sekshan editin vaya [edit] lingk',
 'tog-editsectiononrightclick' => 'Eniebl sekshan editin bai rait klikin pahn sekshan taikl (rikwaya JavaScript)',
-'tog-showtoc' => 'Shuo tiebl a kantent (fi piej wid muo dan 3 edn)',
 'tog-rememberpassword' => 'Memba mi lagiin pahn dis brouza (fi a maximom a $1 {{PLURAL:$1|die|die}})',
 'tog-watchcreations' => 'Ad piej mi kriet tu mi wachlis',
 'tog-watchdefault' => 'Ad piej mi edit tu mi wachlis',
@@ -164,7 +161,6 @@ Lef aaf dif afta pofaamin ruolbak',
 'vector-action-protect' => 'Protek',
 'vector-action-undelete' => 'Andiliit',
 'vector-action-unprotect' => 'Neu protektian',
-'vector-simplesearch-preference' => 'Eniebl enans saach sojeshan (Vekta skin onli)',
 'vector-view-create' => 'Kriet',
 'vector-view-edit' => 'Hedit',
 'vector-view-history' => 'Vyuu ischri',
index a0968b9..887d06a 100644 (file)
@@ -18,9 +18,6 @@
  */
 
 $messages = array(
-# User preference toggles
-'tog-justify' => 'jufmei co mulno selkuspe',
-
 'underline-always' => 'roroi',
 'underline-never' => 'noroi',
 
@@ -85,6 +82,7 @@ $messages = array(
 'listingcontinuesabbrev' => "co'unai",
 
 'about' => 've skicu',
+'cancel' => 'naljetnygau',
 'moredotdotdot' => '.au zmadu',
 'mytalk' => 'lo casnu be mi',
 'navigation' => 'ckupau',
@@ -112,6 +110,7 @@ $messages = array(
 'variants' => 'loi jutsi',
 
 'errorpagetitle' => 'fliba',
+'returnto' => "xrugau fi la'e zoi gy. $1 .gy",
 'tagline' => "ra'i {{SITENAME}}",
 'help' => 'sidju ckupau',
 'search' => 'sisku',
@@ -146,7 +145,7 @@ $messages = array(
 'jumptosearch' => 'sisku',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => 'អំពី {{SITENAME}}',
+'aboutsite' => "skicu la'e zoi gy.{{SITENAME}}.gy",
 'aboutpage' => "Project:sera'a",
 'copyright' => "lo selvau cu gubni ja'i la'o gy. $1 .gy.",
 'copyrightpage' => "{{ns:project}}:fukyzifpo'e",
@@ -173,7 +172,7 @@ $messages = array(
 'editsectionhint' => "stika lo te fendi noi du la'oi $1",
 'toc' => 'ckupau pagbu',
 'showtoc' => 'jarco',
-'hidetoc' => 'toljarco',
+'hidetoc' => 'cancygau',
 'thisisdeleted' => 'View or restore $1?',
 'viewdeleted' => 'View $1?',
 'restorelink' => '{{PLURAL:$1|one deleted edit|$1 deleted edits}}',
@@ -186,7 +185,7 @@ $messages = array(
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'lo ckupau',
-'nstab-user' => 'pilno kibypapri',
+'nstab-user' => 'lo pilno kibypapri',
 'nstab-media' => 'Media page',
 'nstab-special' => 'steci ckupau',
 'nstab-project' => 'gungunma ckupau',
@@ -212,10 +211,17 @@ $messages = array(
 'gotaccountlink' => "co'a se jaspu",
 'loginlanguagelabel' => 'to bangu toi $1',
 
+# Change password dialog
+'resetpass-submit-cancel' => 'naljetnygau',
+
 # Special:PasswordReset
 'passwordreset-username' => 'to pilno cmene toi',
 
+# Special:ChangeEmail
+'changeemail-cancel' => 'naljetnygau',
+
 # Edit page toolbar
+'link_tip' => 'lo nenri judri',
 'extlink_sample' => 'http://www.example.com link title',
 'media_tip' => 'judri lo vreji',
 
@@ -225,7 +231,7 @@ $messages = array(
 'watchthis' => 'zgana ti',
 'savearticle' => 'stogau lo ckupau',
 'showpreview' => 'zganygau lo jai se troci',
-'showdiff' => 'jarco lo te frica',
+'showdiff' => 'catlu lo jai te frica',
 'loginreqlink' => "co'a se jaspu",
 'newarticle' => 'to cnino toi',
 'previewnote' => "'''do o'i morji lo du'u di'e jai se troci se zgana po'o'''
@@ -237,6 +243,7 @@ $messages = array(
 
 # History pages
 'revisionasof' => "ve farvi soi se detri la'oi $1",
+'previousrevision' => 'lo laldo zmadu versio',
 'cur' => 'cab',
 'last' => "prula'i",
 'page_first' => 'pamoi',
@@ -258,7 +265,9 @@ $messages = array(
 'prevn' => 'lo lidne {{PLURAL:$1|$1}}',
 'nextn' => 'lo se lidne {{PLURAL:$1|$1}}',
 'prevn-title' => 'lo lidne $1 {{PLURAL:$1|result|results}}',
+'shown-title' => 'zganygau $1 lo {{PLURAL:$1|danfu}} fau ro papri',
 'searchprofile-articles' => 'lo se vasru papri',
+'searchprofile-images' => 'tarti vreji',
 'searchprofile-everything' => "ro co'e",
 'searchprofile-advanced' => 'lo tcila',
 'searchprofile-articles-tooltip' => "sisku fi la'oi $1",
@@ -272,7 +281,7 @@ $messages = array(
 # Preferences page
 'preferences' => 'lo se nelci',
 'mypreferences' => 'lo se nelci',
-'prefs-rc' => 'puzi nu stika',
+'prefs-rc' => 'lo nu puzi stika',
 'prefs-editing' => "ca'o stika",
 'searchresultshead' => "tu'a le se sisku",
 'savedprefs' => 'le do zmaselnei pu vreji',
@@ -282,17 +291,18 @@ $messages = array(
 'action-edit' => 'stika lo vi ckupau',
 
 # Recent changes
-'recentchanges' => 'puzi nunstika',
+'recentchanges' => 'lo nu puzi stika',
 'recentchanges-summary' => 'liste loi nu puzi galfi la .uikis.',
 'rcshowhidebots' => '$1 lo zmiku',
-'rcshowhideliu' => '$1 lo samyzva',
+'rcshowhideliu' => '$1 lo se jaspu pilno',
 'diff' => 'te frica',
 'hist' => 'galfi plivei',
-'hide' => 'Toljarco',
+'hide' => 'cancygau',
 'show' => 'Jarco',
 'minoreditletter' => 'm',
 'newpageletter' => 'n',
 'boteditletter' => 'z',
+'rc-enhanced-expand' => 'zganygau lo tcila',
 
 # Recent changes linked
 'recentchangeslinked' => 'lo srana nu gasnu',
@@ -300,8 +310,8 @@ $messages = array(
 'recentchangeslinked-page' => 'to ckupau cmene toi',
 
 # Upload
-'upload' => 'benji pa vreji',
-'uploadbtn' => 'benji pa vreji',
+'upload' => 'benji lo pa vreji',
+'uploadbtn' => 'benji lo pa vreji',
 'filedesc' => 'to ve skicu toi',
 
 # File description page
@@ -401,6 +411,8 @@ $messages = array(
 'tooltip-pt-login' => "e'u do co'a pilno lo jaspu ije ku'i do na bilga",
 'tooltip-pt-logout' => "co'u se jaspu",
 'tooltip-ca-talk' => 'lo nu casnu lo se vasru be lo dei ckupau',
+'tooltip-ca-history' => 'lo purci versio be lo dei papri',
+'tooltip-ca-protect' => 'bandu lo dei papri',
 'tooltip-ca-delete' => 'vimcu lo vi ckupau',
 'tooltip-ca-move' => 'ko galfi lo cmene be lo vi ckupau',
 'tooltip-ca-watch' => 'jmive lo dei ckupau lo se zgana liste pe do',
@@ -411,14 +423,15 @@ $messages = array(
 'tooltip-n-mainpage' => 'vitke lo ralju ckupau',
 'tooltip-n-mainpage-description' => 'vitke lo ralju ckupau',
 'tooltip-n-portal' => "srana lo dei proiekto je zo'e noi ka'e se zukte do vau je lo stuzi be lo plixau info",
-'tooltip-n-recentchanges' => "liste lo puzi nunstika vreji be bu'u lo vi uitke",
+'tooltip-n-recentchanges' => "liste lo vreji be lo nu puzi stika bu'u lo dei uitki",
 'tooltip-n-randompage' => 'jarco lo cunso ckupau',
 'tooltip-n-help' => 'sidju kibypapri',
 'tooltip-t-whatlinkshere' => "nu liste lo zifyga'ikibjudri poi ke'a kibjorne le vi ckupau",
 'tooltip-t-recentchangeslinked' => "lo puzi nunga'i pe lo kibypapri poi kibjorne le vi ckupau",
-'tooltip-t-upload' => 'benji lo vreji',
+'tooltip-t-upload' => 'benji lo pa vreji',
 'tooltip-t-specialpages' => 'liste ro steci ckupau',
 'tooltip-t-print' => 'lo prina versio be lo dei ckupau',
+'tooltip-t-permalink' => 'lo stodi judri be lo dei versio be lo dei papri',
 'tooltip-ca-nstab-main' => 'catlu lo se vasru ckupau',
 'tooltip-ca-nstab-project' => 'cpacu lo gungunma ckupau',
 'tooltip-ca-nstab-image' => 'catlu lo ckupau pe lo vreji',
@@ -429,6 +442,13 @@ $messages = array(
 # Info page
 'pageinfo-toolboxlink' => 'lo info be lo ckupau',
 
+# Bad image list
+'bad_image_list' => "lo formate cu jai ve ciksi do'e di'e
+
+i lo po'o liste cmima (to lo linji poi zo'oi * cu pamoi lerfu ke'a) cu se pilno
+i lo pamoi ke linji judrysni cu ei judrysni lo jai se curmi nai fail
+i ro lo se lidne judrysni pe lo bi'unai linji cu nai jai se javni vau je va'i me lo papri poi lo fail sinxa ka'e zvati lo bi'unai linji",
+
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => "ro co'e",
 'namespacesall' => "ro co'e",
@@ -437,4 +457,7 @@ $messages = array(
 # Special:SpecialPages
 'specialpages' => 'steci ckupau',
 
+# Feedback
+'feedback-cancel' => 'naljetnygau',
+
 );
index ad51c0e..9b61005 100644 (file)
@@ -19,16 +19,13 @@ $fallback = 'da';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Understreg henvesnenger',
-'tog-justify' => 'Ves ertikler ve lege margener',
 'tog-hideminor' => "Skjul mendre ændrenger i'n liste åver seneste ændrenger",
 'tog-extendwatchlist' => 'Udvedet liste ve seneste ændrenger',
 'tog-usenewrc' => 'Førbedret liste åver seneste ændrenger (JavaScript)',
 'tog-numberheadings' => 'Åtåmatisk nåmererenge åf åverskrefter',
 'tog-showtoolbar' => 'Ves værktøjslenje til redigærenge (JavaScript)',
 'tog-editondblclick' => 'Redigær sider ve dåbeltklik (JavaScript)',
-'tog-editsection' => 'Redigær åfsnet ve hjælp åf [redigær]-henvesnenger',
 'tog-editsectiononrightclick' => 'Redigær åfsnet ve at klikke på deres titler (JavaScript)',
-'tog-showtoc' => 'Ves endholtsførtegnelse (i artikler ve mære end tre åfsnet)',
 'tog-rememberpassword' => 'Husk adgengskode til næste besøĝ frå denne kompjuter (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'Tilføj sider a åpretter til miin åvervågnengsliste',
 'tog-watchdefault' => 'Tilføj sider a redigærer til miin åvervågnengsliste',
@@ -37,7 +34,6 @@ $messages = array(
 'tog-minordefault' => 'Markær søm standård ål redigærenge søm mendre',
 'tog-previewontop' => 'Ves førhåndsvesnenge åver æ rædigerengsboks',
 'tog-previewonfirst' => 'Ves førhåndsvesnenge når du stårtst ve at redigære',
-'tog-nocache' => 'Slå caching åf sider frå',
 'tog-enotifwatchlistpages' => 'Send mig en e-mail ve sideændrenger',
 'tog-enotifusertalkpages' => 'Send mig en e-mail når miin brugerdiskusjeside ændres',
 'tog-enotifminoredits' => 'Send mig også en e-mail ve mendre ændrenger åf åvervågede sider',
@@ -416,7 +412,6 @@ hersenenge, (førge) = førskel til den førge hersenenge, l = lile til mendre 
 'lineno' => 'Lenje $1:',
 'compareselectedversions' => 'Sammenlign valgte hersenenger',
 'editundo' => 'baĝgøt',
-'diff-multi' => '(Æ hersenengssammenlegnenge vetåger {{PLURAL:$1|en mellemleggende hersenenge|$1 mellemleggende hersenenger}}.)',
 
 # Search results
 'prevn' => 'førge {{PLURAL:$1|$1}}',
@@ -445,7 +440,6 @@ hersenenge, (førge) = førskel til den førge hersenenge, l = lile til mendre 
 'nchanges' => '$1 {{PLURAL:$1|ændrenge|ændrenger}}',
 'recentchanges' => 'Seneste ændrenger',
 'recentchanges-feed-description' => 'Ve dette fiid ken du følge de seneste ændrenger på {{SITENAME}}.',
-'rcnote' => "Herunder ses {{PLURAL:$1|'''1''' ændrenge|de sedste '''$1''' ændrenger}} frå {{PLURAL:$2|i dåg|de sedste '''$2''' dåg}}, søm i $3.",
 'rcnotefrom' => "Nedenfør ses ændrengerne frå '''$2''' til '''$1''' vest.",
 'rclistfrom' => 'Ves nye ændrenger startende frå $1',
 'rcshowhideminor' => '$1 lile ændrenger',
index 0fabb56..f6bba6c 100644 (file)
@@ -215,7 +215,6 @@ $messages = array(
 'vector-action-protect' => 'Reksa',
 'vector-action-undelete' => 'Batalna pambusakan',
 'vector-action-unprotect' => 'Owahi pangreksan',
-'vector-simplesearch-preference' => 'Urubaké wilah panggolèkan ringkes (namung kulit Vèktor)',
 'vector-view-create' => 'Gawé',
 'vector-view-edit' => 'Sunting',
 'vector-view-history' => 'Sajarah kaca',
@@ -492,8 +491,6 @@ Cathet yèn sapérangan kaca mungkin isih nampilaké kayata sampéyan isih mlebu
 'gotaccountlink' => 'Mlebu',
 'userlogin-resetlink' => 'Lali rincian mlebu log Sampéyan?',
 'userlogin-resetpassword-link' => 'Sampéyan kélangan tembung sandhi?',
-'helplogin-url' => 'Help:Mlebet log',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pitulung kangge mlebet log]]',
 'userlogin-loggedin' => 'Sampeyan sampun mlebet log dadi {{GENDER:$1|$1}}.
 Gunakna formulir ing ngisor iki kanggo mlebet log dadi panganggo liyane.',
 'userlogin-createanother' => 'Gawé akun anyar',
@@ -968,8 +965,6 @@ Sampéyan isih bisa ndelok prabédan iki; rincian bisa ditemokaké nèng [{{full
 'revdelete-show-file-submit' => 'Ya',
 'revdelete-selected' => "'''{{PLURAL:$2|Revisi kapilih|Revisi kapilih}} dari '''$1''''''",
 'logdelete-selected' => "'''{{PLURAL:$1|Log kapilih|Log kapilih}} kanggo:'''",
-'revdelete-text' => "'''Revisi lan tindhakan sing wis kabusak bakal tetep muncul ing kaca versi sadurungé lan log, nanging bagéyan isiné ora bisa diaksès déning publik.'''
-Pangurus {{SITENAME}} liyané bakal tetep bisa ngaksès isi sing kadhelikaké iku lan bisa mbatalaké pambusakan ngliwati antarmuka sing padha, kajaba ana pawatesan liya saka operator situs.",
 'revdelete-confirm' => 'Mangga pesthèkaké yèn Sampéyan pancèn kudu nglakoni iki, yèn Sampéyan ngerti akibaté, lan yèn Sampéyan ngakoni iki cocok karo [[{{MediaWiki:Policy-url}}|kawicakan]].',
 'revdelete-suppress-text' => "Pandhelikan révisi '''mung''' bisa dipigunakaké kanggo kasus ing ngisor:
 * Informasi sing kagolong pitnah
@@ -2465,7 +2460,7 @@ Delok [[Special:BlockList|daptar blokir]] kanggo ninjo blokiran.',
 Log blokiran sumadhiya nèng ngisor kanggo rujukan:',
 'blocklog-showsuppresslog' => 'Panganggo iki wis tau diblokir lan didhelikaké sakdurungé.
 Log brèdèlan sumadhiya nèng ngisor kanggo rujukan:',
-'blocklogentry' => 'mblokir "[[$1]]" dipun watesi wedalipun $2 $3',
+'blocklogentry' => 'mblokir "[[$1]]" dipun watesi wekdalipun $2 $3',
 'reblock-logentry' => 'Ngowahi sèting pamblokiran [[$1]] kanthi wektu daluwarsa $2 $3',
 'blocklogtext' => 'Ing ngisor iki kapacak log pamblokiran lan panjabelan blokir panganggo.
 Alamat IP sing diblokir sacara otomatis ora ana ing daftar iki.
index 37d7ea0..abfe923 100644 (file)
  * @author Malafaya
  * @author Nemo bis
  * @author Nodar Kherkheulidze
+ * @author Otogi
  * @author Reedy
  * @author Sopho
  * @author Temuri rajavi
+ * @author Tokoko
  * @author ka.wikipedia.org sysops
  * @author לערי ריינהארט
  * @author გიორგიმელა
@@ -204,7 +206,6 @@ $messages = array(
 'tog-ccmeonemails' => 'გამომიგზავნე ელფოსტების ასლები, რომლებსაც მე სხვა მომხმარებლებს ვუგზავნი',
 'tog-diffonly' => 'დამალე გვერდის შიგთავსი ცვლილების ქვევით',
 'tog-showhiddencats' => 'დამალული კატეგორიების ჩვენება',
-'tog-noconvertlink' => 'სათაურის გარდაქმნის ბმულის გამორთვა',
 'tog-norollbackdiff' => 'გაუქმებისას გამოტოვეთ ცვლილებათა განსხვავება',
 'tog-useeditwarning' => 'გამაფრთხილე, როდესაც დავტოვებ რედაქტირებად გვერდს, დაუმახსოვრებელი ცვლილებებით',
 'tog-prefershttps' => 'უსაფრთხო კავშირის მუდამ გამოყენება ავტორიზაციის შემდეგ',
@@ -332,7 +333,6 @@ $messages = array(
 'vector-action-protect' => 'დაცვა',
 'vector-action-undelete' => 'აღდგენა',
 'vector-action-unprotect' => 'დაცვის შეცვლა',
-'vector-simplesearch-preference' => 'ძიების გაფართოებული ველის ჩართვა (მხოლოდ ვექტორული იერსახისთვის)',
 'vector-view-create' => 'შექმნა',
 'vector-view-edit' => 'რედაქტირება',
 'vector-view-history' => 'ისტორია',
@@ -614,8 +614,6 @@ $2',
 'gotaccountlink' => 'შესვლა',
 'userlogin-resetlink' => 'ავტორიზაციის მონაცემები დაგავიწყდათ?',
 'userlogin-resetpassword-link' => 'დაგავიწყდათ პაროლი?',
-'helplogin-url' => 'Help:შესვლა',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|დახმარება სისტემაში შესასვლელად]]',
 'userlogin-createanother' => 'სხვა ანგარიშის შექმნა',
 'createacct-join' => 'ქვემოთ მიუთითეთ ინფორმაცია თქვენ შესახებ.',
 'createacct-another-join' => 'ქვემოთ შეიყვანეთ ახალი ანგარიშის ინფორმაცია.',
@@ -706,6 +704,9 @@ Please wait $1 before trying again.',
 'login-abort-generic' => 'თქვენი ავტორიზაცია წარუმატებელია – გაუქმდა',
 'loginlanguagelabel' => 'ენა: $1',
 'suspicious-userlogout' => 'თქვენი მოთხოვნა გასვლის შესახებ გაუქმებულია, რადგანაც იგი გავს ქეშირებადი პროქსის ან არაკორექტული ბრაუზერის მოთხოვნას.',
+'pt-login' => 'შესვლა',
+'pt-createaccount' => 'ანგარიშის შექმნა',
+'pt-userlogout' => 'გასვლა',
 
 # Email sending
 'php-mail-error-unknown' => 'ამოუცნობი შეცდომა PHP-ის mail() ფუნქციაში',
@@ -722,6 +723,7 @@ Please wait $1 before trying again.',
 'retypenew' => 'ახალი პაროლი განმეორებით:',
 'resetpass_submit' => 'მიუთითეთ პაროლი და დარეგისტრირდით',
 'changepassword-success' => 'თქვენი პაროლი წარმატებით შეიცვალა!',
+'changepassword-throttled' => 'თქვენ განახორციელეთ ანგარიშში შესვლის ზედმეტად ბევრი მცდელობა. გამორებით შეყვანამდე გთხოვთ დაიცადოთ $1.',
 'resetpass_forbidden' => 'პაროლის შეცვლა შეუძლებელია',
 'resetpass-no-info' => 'კონკრეტულად ამ გვერდთან სამუშაოდ თქვენ უნდა წარადგინოთ თავი სისტემისადმი.',
 'resetpass-submit-loggedin' => 'პაროლის შეცვლა',
@@ -730,6 +732,7 @@ Please wait $1 before trying again.',
 შესაძლოა თქვენ წარმატებით შეცვალეთ პაროლი ან მოითხოვეთ ახალი.',
 'resetpass-temp-password' => 'დროებითი პაროლი:',
 'resetpass-abort-generic' => 'პაროლის შეცვლა შეჩერდა გაფართოების მიერ.',
+'resetpass-expired' => 'თქვენს პაროლს ვადა გაუვიდა. გთხოვთ, დააყენოთ ახალი.',
 
 # Special:PasswordReset
 'passwordreset' => 'პაროლის აღდგენა',
@@ -935,7 +938,7 @@ $2
 ზედა ტექსტური ველი შეიცავს გვერდის შიგთავსს მისი ამჟამინდელი სახით.
 თქვენი ცვლილებები ნაჩვენებია ქვედა ტექსტურ ველში.
 თქვენ მოგიწევთ თქვენი ცვლილებების შერწყმა არსებულ ტექსტთან.
-'''მხოლოდ''' ზედა ველში არსებული ტექსტი იქნება შენახული, როდესაც \"{{int:savearticle}}\" დააჭერთ.",
+'''მხოლოდ''' ზედა ველში არსებული ტექსტი იქნება შენახული, როდესაც „{{int:savearticle}}“ დააჭერთ.",
 'yourtext' => 'თქვენი ტექსტი',
 'storedversion' => 'შენახული ვერსია',
 'nonunicodebrowser' => "'''გაფრთხილება: თქვენი ბრაუზერი უნიკოდთან თავსებადი არ არის. ჩვენ ვცდილობთ ამ პრობლემის გადაჭრას, რათა თქვენ შეძლოთ უსაფრთხოდ შეიტანოთ ცვლილებები გვერდებზე: არა-ASCII ნიშნები რედაქტირების ფანჯარაში გამოჩნდება როგორც ჰექსადეციმალური კოდები.'''",
@@ -1109,8 +1112,6 @@ $3 -ემ ამგვარი ახსნა : ''$2''",
 'revdelete-show-file-submit' => 'ჰო',
 'revdelete-selected' => "'''[[:$1]]-ის {{PLURAL:$2|მონიშნული ცვლილება|მონიშნული ცვლილებები}}:'''",
 'logdelete-selected' => "'''ჟურნალის {{PLURAL:$1|არჩეული ჩანაწერი|არჩეული ჩანაწერები}}:'''",
-'revdelete-text' => "'''გვერდებისა და მოქმედებების წაშლილი ნაწილები დარჩება ისტორიაში და ჟურნალებში, მაგრამ მათ ნაწილს ვერ ნახავენ ჩვეულებრივი მომხმარებლები.'''
-პროექტის ადმინისტრატორებს ექნებათ შესაძლებლობა {{SITENAME}}ში დაინახონ ღია და არწაშლილი ნაწილი, და შეძლებენ აღადგინონ იგივე ინტერფეისის მეშვეობით, გარდა იმ შემთხვევებისა, როდესაც დამატებითი შეზღუდვა მოქმედებს.",
 'revdelete-confirm' => 'გთხოვთ დაადასტუროთ, რომ გსურთ ქმედების განხორციელება. ასევე ვიმედოვნებთ, რომ ყველაფერს აკეთებთ  [[{{MediaWiki:Policy-url}}|წესებთან შესაბამისობაში]].',
 'revdelete-suppress-text' => "დამალვა შეიძლება განხორციელდეს '''მხოლოდ''' შემდეგ შემთხვევებში:
 * პოტენციურად ცილისმწამებლური ინფორმაცია
@@ -1210,7 +1211,7 @@ $1",
 
 # Search results
 'searchresults' => 'ძიების შედეგები',
-'searchresults-title' => 'ძიების შედეგები "$1"',
+'searchresults-title' => 'ძიების შედეგები „$1“',
 'toomanymatches' => 'ნაპოვნია ძალიან ბევრი შესაბამისობა, ეცადეთ სხვა მოთხოვნა',
 'titlematches' => 'სტატიის სათაური შეესაბამება',
 'textmatches' => 'გვერდის ტექსტი შესაბამისია',
@@ -1222,7 +1223,7 @@ $1",
 'shown-title' => 'აჩვენეთ $1 {{PLURAL:$1|რეზულტატი|რეზულტატი}} გვერდზე',
 'viewprevnext' => 'იხილე  ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''ამ ვიკიპროექტში არის გვერდი „[[:$1]]“'''",
-'searchmenu-new' => "'''შექმენით გვერდი „[[:$1]]“ ამ ვიკიში!'''",
+'searchmenu-new' => "'''შექმენით გვერდი „[[:$1]]“ ამ ვიკიში!''' {{PLURAL:$2|0=|აგრეთვე იხილე ძიები შედეგი.|აგრეთვე იხილე ძიების შედეგები.}}",
 'searchprofile-articles' => 'ძირითადი გვერდები',
 'searchprofile-project' => 'დახმარების და პროექტის გვერდები',
 'searchprofile-images' => 'მულტიმედია',
@@ -2041,6 +2042,11 @@ $1',
 'protectedpages-indef' => 'მხოლოდ უვადო დაცვები',
 'protectedpages-cascade' => 'მხოლოდ კასკადური დაცვა',
 'protectedpagesempty' => 'ამ დროისთვის არ არსებობს დაცული გვერდები მოთხოვნილი პარამეტრებით.',
+'protectedpages-page' => 'გვერდი',
+'protectedpages-expiry' => 'ვადა გასდის',
+'protectedpages-reason' => 'მიზეზი',
+'protectedpages-unknown-timestamp' => 'უცნობი',
+'protectedpages-unknown-performer' => 'უცნობი მომხმარებელი',
 'protectedtitles' => 'დაცული სათაურები',
 'protectedtitlesempty' => 'ამ დროისთვის არ არსებობს მოთხოვნილი გვერდები მოცემული პარამეტრებით.',
 'listusers' => 'მომხმარებლების სია',
@@ -2784,6 +2790,7 @@ $1',
 'allmessages-prefix' => 'წინსართის ფილტრი:',
 'allmessages-language' => 'ენა:',
 'allmessages-filter-submit' => 'გადასვლა',
+'allmessages-filter-translate' => 'თარგმნა',
 
 # Thumbnails
 'thumbnail-more' => 'გაზარდე',
@@ -3697,6 +3704,9 @@ $5
 'imgmultigo' => 'გადასვლა',
 'imgmultigoto' => 'გადასვლა გვერდზე $1',
 
+# Language selector for translatable SVGs
+'img-lang-go' => 'წინ',
+
 # Table pager
 'ascending_abbrev' => 'დაბრ',
 'descending_abbrev' => 'აღწერა',
@@ -3801,6 +3811,12 @@ $5
 'version-version' => '(ვერსია $1)',
 'version-svn-revision' => '(r$2)',
 'version-license' => 'მედიავიკის ლიცენზია',
+'version-ext-license' => 'ლიცენზია',
+'version-ext-colheader-name' => 'გაფართოებები',
+'version-ext-colheader-version' => 'ვერსია',
+'version-ext-colheader-license' => 'ლიცენზია',
+'version-ext-colheader-description' => 'აღწერა',
+'version-ext-colheader-credits' => 'ავტორები',
 'version-poweredby-credits' => "ეს ვიკი მუშაობს '''[https://www.mediawiki.org/ MediaWiki]'''-ს ძრავზე, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'სხვები',
 'version-poweredby-translators' => 'translatewiki.net-ის მთარგმნელები',
@@ -3826,6 +3842,7 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'redirect-lookup' => 'ძიება:',
 'redirect-value' => 'მნიშვნელობა:',
 'redirect-user' => 'მომხმარებლის იდენტიფიკატორი',
+'redirect-page' => 'გვერდის ID',
 'redirect-revision' => 'გვერდის ვერსია',
 'redirect-file' => 'ფაილის სახელი',
 'redirect-not-exists' => 'მნიშვნელობა ვერ მოიძებნა',
@@ -4040,11 +4057,18 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'rotate-comment' => 'სურათი მოტრიალებულია $1 {{PLURAL:$1|გრადუსით|გრადუსით}} საათის ისრის მიმართულებით',
 
 # Limit report
+'limitreport-title' => 'მონაცემების პროფილური ანალიზატორი:',
+'limitreport-cputime' => 'პროცესორის დროის გამოყენება',
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|წამი}}',
 'limitreport-walltime' => 'რეალურ დროში გამოყენება',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|წამი}}',
+'limitreport-ppvisitednodes' => 'პრეპროცესორის მიერ მონახულებადი კვანძების რაოდენობა',
+'limitreport-postexpandincludesize' => 'ღია ჩართვების ზომა',
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|ბაიტი}}',
+'limitreport-templateargumentsize' => 'თარგის არგუმენტის ზომა',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|ბაიტი}}',
+'limitreport-expansiondepth' => 'გაფართოების უდიდესი სიღრმე',
+'limitreport-expensivefunctioncount' => 'ანალიზატორის „ძვირი“ ფუნქციის რაოდენობა',
 
 # Special:ExpandTemplates
 'expandtemplates' => 'გაშლილი თარგები',
index e4ce6a0..bd25e42 100644 (file)
@@ -206,7 +206,6 @@ $messages = array(
 'vector-action-protect' => 'Mmesten',
 'vector-action-undelete' => 'Uɣaled',
 'vector-action-unprotect' => 'Beddel amesten',
-'vector-simplesearch-preference' => 'Sermed tafeggast taḥerfit n unadi (i "Vector" kan)',
 'vector-view-create' => 'Snulfu',
 'vector-view-edit' => 'Ẓẓiẓreg',
 'vector-view-history' => 'Ẓeṛ amazray',
@@ -483,8 +482,6 @@ Tzemreḍ ad beddeleḍ {{SITENAME}} [[Special:Preferences|ismenyifen]] inek(em)
 'gotaccountlink' => 'Kcem',
 'userlogin-resetlink' => 'Ettuḍ tilɣa n tuqqna ?',
 'userlogin-resetpassword-link' => 'Ettuḍ awal n uɛaddi ?',
-'helplogin-url' => 'Help:Tuqqna',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Tallalt i tuqqna]]',
 'userlogin-loggedin' => 'Teqqneḍ yakan am {{GENDER:$1|$1}}. Seqdec tiferkit ddaw-agi iwakken ad teqqneḍ s umiḍan nniḍen.',
 'userlogin-createanother' => 'Snulfud amiḍan nniḍen',
 'createacct-join' => 'Sekcem tilɣa inek(m) ddaw-agi.',
@@ -962,8 +959,6 @@ Tzemreḍ att ẓṛeḍ ; tilɣa llant deg [{{fullurl:{{#Special:Log}}/delete|p
 'revdelete-show-file-submit' => 'Ih',
 'revdelete-selected' => "'''{{PLURAL:$2|Tasiwelt tettwafren|Tisiwal ttwafernen}} n [[:$1]]'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Tamirt n uɣmis tettwafren|Isallen n uɣmis ttwafernen}}:'''",
-'revdelete-text' => 'Ileqman d tidyanin yettumḥan ad qqimen deg umezruy n usebter dɣa deg iɣmisen, maca agbur nsen ur i sɛu ara tuffart i uzayez."
-Inedbalen wiyaḍ deg {{SITENAME}} zemren ad ẓṛen imuren i yettwafren u zemren a ten-mḥan, ḥaca ma llan icekkilen.',
 'revdelete-confirm' => 'Sergeg ma tebɣiḍ ad xedmeḍ tigawt agi, fehmeḍ inalkamen, dɣa temtawiḍ s [[{{MediaWiki:Policy-url}}|ilugan]].',
 'revdelete-suppress-text' => "Ilaq tukksa att illi \"kan\" deg tijṛa agi :
 * Tilɣa ahat tinergamin
@@ -1551,6 +1546,7 @@ Ilaq ad ssutereḍ i yiwen aterras ma yezmer ad yessenqed aɣmis n ufaylu agi ye
 'uploaddisabledtext' => 'Azen n ifuyla yettwakkes deg wiki agi.',
 'php-uploaddisabledtext' => 'Taktert n ifuyla tensa deg PHP. Selken taxtiṛit n tawila  file_uploads.',
 'uploadscripted' => 'Afaylu-yagi yesɛa angal n HTML/script i yexdem agula deg browser/explorateur.',
+'uploadinvalidxml' => 'XML deg ufaylu yekteren ur d-yetwesleḍ ara.',
 'uploadvirus' => 'Afaylu-nni yesɛa anfafad asenselkim (virus)! Ẓer kter: $1',
 'uploadjava' => 'Wagi d afaylu ZIP yesɛan afaylu Java .class.
 Azdam n ifuyla Java ur yesɛa ara turagt, acku zemren ad zizdewen ikyafen n taɣellist.',
@@ -3869,6 +3865,4 @@ Yetexddem aderrec n akkw ayen yella yesegrer s <nowiki>'''{{ }}'''</nowiki>.",
 'expand_templates_generate_rawhtml' => 'Beqqeḍ HTML aneṣli',
 'expand_templates_preview' => 'Azaraskan',
 
-# Unknown messages
-'uploadinvalidxml' => 'XML deg ufaylu yekteren ur d-yetwesleḍ ara.',
 );
index 8679a96..0ed5351 100644 (file)
@@ -56,7 +56,6 @@ $namespaceGenderAliases = array();
 $messages = array(
 # User preference toggles
 'tog-underline' => 'ТехьэпӀэхэр щӀэтхъэн:',
-'tog-justify' => 'БгъуагъкӀэ напэкӀуэцӀыр зэгъэзэхуэн',
 'tog-hideminor' => 'Гъэтэрэзыгъуэ цӀыкӀухэр гъэпшкӀун, щӀэуэ яхъуэжахэм я тхылъым',
 'tog-hidepatrolled' => 'Гъэтэрэзыгъуэ зыщӀэлъыплъахэр гъэпшкӀун, щӀэуэ яхъуэжахэм я тхылъым',
 'tog-newpageshidepatrolled' => 'НапэкӀуэцӀ зыщӀэлъыплъахэр гъэпшкӀун, напэкӀуэцӀ щӀэхэм я тхылъым',
@@ -65,9 +64,7 @@ $messages = array(
 'tog-numberheadings' => 'Псалъащхьэхэм автоматику номер ятын',
 'tog-showtoolbar' => 'Гъэтэрэзыным идежь ищхьэ пэнелыр гъэлъэгъуэн (JavaScript)',
 'tog-editondblclick' => 'ТӀуанэ текъузэгъуэкӀэ напэкӀуэцӀхэр гъэтэрэзын (requires JavaScript)',
-'tog-editsection' => 'Лъэныкъуэ къэс техьэпӀэ [гъэтэрэзын] гъэлъэгъуэн',
 'tog-editsectiononrightclick' => 'Псалъашъхьэм, дзыгъуэм и ижырабгъу текъузэгъуэмкӀэ секциэхэр гъэтэрэзын (JavaScript)',
-'tog-showtoc' => 'Зэхэлъыгъуэр гъэлъэгъуэн (псэлъашъхьищ нэхъыбу зиӀэ напэкӀуэцӀхэм)',
 'tog-rememberpassword' => 'Компутерым си логиныр щыхъумэн (мы нэхъыбу $1 {{PLURAL:$1|махуэ|маху}})',
 'tog-watchcreations' => 'Сэ сщIа напэкIуэцIхэр сызыкIэлъыплъ тхылъым хэлъхьэн',
 'tog-watchdefault' => 'Сэ схъуэжа напэкIуэцIхэр сызыкIэлъыплъ тхылъым хэлъхьэн',
@@ -205,7 +202,6 @@ $messages = array(
 'vector-action-protect' => 'Хъумэн',
 'vector-action-undelete' => 'ЗыфӀэгъэувэжын',
 'vector-action-unprotect' => 'Хъумэныр техыжын',
-'vector-simplesearch-preference' => 'Лъыхъуэгъуэ нэхъ зэхэхауэ дэӀэпыкъуэгъухэр хэгъэнэн (Векторым шъхьэкӀэ къуэдей)',
 'vector-view-create' => 'ЩӀын',
 'vector-view-edit' => 'Гъэтэрэзын',
 'vector-view-history' => 'Тхыдэм еплъын',
@@ -827,8 +823,6 @@ $3 ар зтеухуауэ къитхыр: ''$2''",
 'revdelete-show-file-submit' => 'НытӀэ',
 'revdelete-selected' => "'''{{PLURAL:$2|Версиэ хэхар|Версиэ хэхахэр}} напэкӀуэцӀ [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Тхылъ хэхар|Тхылъ хэхахэр}} тхыгъэм:'''",
-'revdelete-text' => 'НапэкӀуэцӀхэм я версиэ ихахэмрэ хъыбар щекӀуэкӀахэмрэ напэкӀуэцӀым и тхыдэмрэ тхыгъэмрэ гъэлъэгъуауэ щытынущ, абыхэм я лъэныкъуэгъу гуэрэхэр цӀыхухэтхэм щхьэкӀэ теубыдауэ щытынущ.
-Тхьэмадэ {{SITENAME}} проэктым щыщхэм пӀалъэ яӀэнущ теубыда тхыгъэхэм екӀуэлъэн, а интерфейсымкӀи зэфӀагъувэжын, теубыдыгъэ нэхъ ину ятемылъу щымыт къуэдеймэ.',
 'revdelete-confirm' => 'Арэзыгъуэ ет, быщӀэр зэр уи гугъэр, къыхэкӀынур къызэрыбгурыӀуэр, быщӀу хъуамкӀэ [[{{MediaWiki:Policy-url}}|хабзэм]] узэремыбакъуэр.',
 'revdelete-suppress-text' => "ГъэпшкӀугъэр щекӀуэкӀыфыну '''къуэдер''' мыбым хуэдэм:
 
@@ -917,7 +911,6 @@ $1",
 'compareselectedversions' => 'Хэха версиэхэр зэгъэпщэн',
 'showhideselectedversions' => 'Гъэлъэгъуэн/гъэпшкӀун версиэ хэхахэр',
 'editundo' => 'щӀегъуэжын',
-'diff-multi' => '({{PLURAL:$1|курыт версиэ $1-м ер гъэлъэгъуакъым|курыт версиэхэр $1-м ер гъэлъэгъуакъым}} {{PLURAL:$2|цӀыхухэт 2$|цӀыхухэтхэм 2$}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|курыт версиэ $1-м ер гъэлъэгъуащ|курыт версиэхэр $1-м ер гъэлъэгъуащ}}, щӀахэщ $2 нэхъыбэу {{PLURAL:$2|цӀыхухэт|цӀыхухэтхэм}})',
 
 # Search results
index 0359aad..5b18ce2 100644 (file)
@@ -202,7 +202,6 @@ $messages = array(
 'vector-action-protect' => 'Bısevekne',
 'vector-action-undelete' => 'Esterıtene peyser bıcê',
 'vector-action-unprotect' => 'Rake',
-'vector-simplesearch-preference' => 'Tewsiyunê cıcêraişiê raverberdu rake (Teyna vector skin de)',
 'vector-view-create' => 'Vıraze',
 'vector-view-edit' => 'Bıvurne',
 'vector-view-history' => 'Tarixi basne',
@@ -468,7 +467,7 @@ Nustena cı qontrol ke.',
 Kerem ke, oncia bıcerrebne.',
 'wrongpasswordempty' => 'Parola thale kota cı.
 Kerem ke, oncia bıcerrebne.',
-'passwordtooshort' => 'Paroley tewr senık ebe {{PLURAL:$1|1 karakter|$1 karakteru}} gunê derg bê.',
+'passwordtooshort' => 'Paroley gunê tewr senık ebe {{PLURAL:$1|1 karakter|$1 karakteru}} derg bê.',
 'password-name-match' => 'Parola sıma namê sımaê karberi ra gunê ferqın bo.',
 'password-login-forbidden' => 'Namê nê karberi u gurenaena parola qedeğen biya.',
 'mailmypassword' => 'E-mail sera parola newiye bırusne',
@@ -652,8 +651,6 @@ Sıma be idarekerênia ho ra şikinê hona [$1 nê ferqi bıvênê], eke wazenê
 'revdelete-show-file-confirm' => 'Sıma eminê ke wazenê çımraviarnaena esterıtiya na dosya "<nowiki>$1</nowiki>" $2 ra $3 de bıvênê?',
 'revdelete-show-file-submit' => 'Heya',
 'revdelete-selected' => "'''[[:$1]]: ra {{PLURAL:$2|Çımraviarnaiso weçinıte|Çımraviarnaisê weçinıtey}}'''",
-'revdelete-text' => "Çımraviarnaişê esterıtey u kerdişi hewna tarixê pele u qeydan de asenê, hama parçê zerrekê dine areze nêbenê.'''
-Eke şertê ilawekerdey ke niyê ro, idarekerê bini {{SITENAME}} de nêşikinê hona bıresê zerrekê nımıtey u şikinê ey oncia na eyni mianpele ra peyser biarê.",
 'revdelete-suppress-text' => "Wedardene gunê '''teyna''' nê halunê cêrênu de bıguriyo:
 * Melumatê kıfırio mıhtemel
 * Melumatê şexsio bêmınasıb
@@ -665,7 +662,7 @@ Eke şertê ilawekerdey ke niyê ro, idarekerê bini {{SITENAME}} de nêşikinê
 'revdelete-hide-comment' => 'Xulasa measne',
 'revdelete-hide-user' => 'Namê karberiê/Adresa IPya vurnaoği bınımne',
 'revdelete-radio-same' => '(mevurne)',
-'revdelete-radio-set' => 'Heya',
+'revdelete-radio-set' => 'Nımıte',
 'revdelete-radio-unset' => 'Nê',
 'revdelete-log' => 'Sebeb:',
 'revdelete-submit' => '{{PLURAL:$1|Çımraviarnaiso ke çiniyo|Çımraviarnaisê ke çiniyê}} we tetbiq ke',
@@ -790,11 +787,11 @@ Diqet kerê, beno ke tedeestê {{SITENAME}} uza endi rozane niyê.",
 'yourrealname' => 'Namo rastıkên:',
 'yourlanguage' => 'Zon:',
 'yourvariant' => 'Varyant:',
-'yournick' => 'İmza:',
+'yournick' => 'Leqeme:',
 'badsig' => "İmza kala nêvêrdiye.
 Etiketê ''HTML''i qontrol ke.",
 'badsiglength' => 'İmza to zaf derga.
-Gunê $1 {{PLURAL:$1|herfe|herfun}} ra senık bo.',
+A gunê ebe $1 {{PLURAL:$1|herfe|herfu}} ra jêde mebo.',
 'yourgender' => 'Cınsiyet:',
 'gender-male' => 'Cüamêrd',
 'gender-female' => 'Cüanıke',
@@ -1250,7 +1247,7 @@ Tı şikina sewiya sevekiyaena na pele bıvurnê, hema yê nae sevekiyaena qedem
 'contribslink' => 'iştıraqi',
 'emaillink' => 'e-poste bırusne',
 'autoblocker' => 'Sıma otomatikmen kılit biy, çıke adresa sımawa \'\'IP\'\'y terefê "[[User:$1|$1]]" gurenina.
-Sebebê kılit-biyaena $1\'i: "$2"o',
+Sebebê kılitbiyaena $1\'i "$2"o',
 'blocklogpage' => 'Protokolê kilıti',
 'blocklogentry' => '[[$1]] hata peyê $2 $3ine kilıt bi',
 'reblock-logentry' => 'kilıt-kerdena [[$1]]i hata peyê $2 $3ine vurnê',
index f76e23d..2ca7a4e 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Kazakh (Ò\9aазақша)
+/** Kazakh (Ò\9bазақша)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -19,31 +19,36 @@ $messages = array(
 'nstab-main' => 'Мақала',
 
 # Edit pages
-'edittools' => '<!-- Мындағы мәтін өңдеу және қотару пішіндердің астында көрсетіледі. -->',
+'edittools' => '<!-- Мындағы мәтін өңдеу және жүктеу пішіндердің астында көрсетіледі. -->',
+'editwarning-warning' => 'Басқа бетке өтсеңіз сіздің жазған соңғы өңдемелеріңіз жойылуы мүмкін. 
+Егер сiз жүйеде тiркелсеңiз, онда сiз баптауларыңыздағы «{{int:prefs-editing}}» бөлігіне кіріп, бұл ескертуді өшіре аласыз.',
 
 # Search results
 'searchmenu-new' => "'''\"[[:\$1]]\" осындай атпен бетті бастау'''",
 
 # Statistics
-'statistics-header-pages'      => 'Беттер бойынша статистика',
-'statistics-header-edits'      => 'Өңдеулер статистикасы',
-'statistics-articles'          => 'Мақалалар саны',
-'statistics-pages'             => 'Беттер',
-'statistics-pages-desc'        => 'Уикидегі барлық беттер, талқылау беттерді, айдатқыштарды қосқандағы және тағы басқалары.',
-'statistics-files'             => 'Жүктелген файлдар',
-'statistics-edits'             => 'Барлық өңдеулер саны',
-'statistics-edits-average'     => 'Әр бетке шаққанда өңдеулердің орташа саны',
-'statistics-users'             => 'Тіркелген қатысушылар',
-'statistics-users-active'      => 'Белсенді қатысушылар',
+'statistics-header-pages' => 'Беттер бойынша статистика',
+'statistics-header-edits' => 'Өңдеулер статистикасы',
+'statistics-articles' => 'Мақалалар саны',
+'statistics-pages' => 'Беттер',
+'statistics-pages-desc' => 'Уикидегі барлық беттер, талқылау беттерді, айдатқыштарды қосқандағы және тағы басқалары.',
+'statistics-files' => 'Жүктелген файлдар',
+'statistics-edits' => 'Барлық өңдеулер саны',
+'statistics-edits-average' => 'Әр бетке шаққанда өңдеулердің орташа саны',
+'statistics-users' => 'Тіркелген қатысушылар',
+'statistics-users-active' => 'Белсенді қатысушылар',
 'statistics-users-active-desc' => 'Соңғы {{PLURAL:$1|күнде|$1 күнде}} қандай да бір іс-әрекет жасаған қатысушылар',
 
 # Variants for Kazakh language
-'variantname-kk-kz'   => 'disable',
-'variantname-kk-tr'   => 'disable',
-'variantname-kk-cn'   => 'disable',
+'variantname-kk-kz' => 'disable',
+'variantname-kk-tr' => 'disable',
+'variantname-kk-cn' => 'disable',
 'variantname-kk-cyrl' => 'Кирил',
 'variantname-kk-latn' => 'Latın',
 'variantname-kk-arab' => 'توتە',
-'variantname-kk'      => 'disable',
+'variantname-kk' => 'disable',
+
+# New logging system
+'logentry-delete-delete' => '$1 $3 бетін жойды',
 
 );
index 6bfe265..be4303c 100644 (file)
@@ -1011,9 +1011,6 @@ $3 كەلتىرىلگەن سەبەبى: ''$2''",
 كەلتىرىلگەن تۇزەتۋ جوق, نە اعىمدىق تۇزەتۋدى جاسىرۋ ٴۇشىن ارەكەتتەنىپ كوردىڭىز.',
 'revdelete-selected' => "'''[[:$1]] دەگەننىڭ بولەكتەنگەن {{PLURAL:$2|تۇزەتۋى|تۇزەتۋلەرى}}:'''",
 'logdelete-selected' => "'''بولەكتەنگەن {{PLURAL:$1|جۋرنال وقىيعاسى|جۋرنال وقىيعالارى}}:'''",
-'revdelete-text' => "'''جويىلعان تۇزەتۋلەر مەن وقىيعالاردى ٴالى دە بەت تارىيحىندا جانە جۋرنالداردا تابۋعا بولادى, بىراق ولاردىڭ ماعلۇمات بولشەكتەرى بارشاعا قاتىنالمايدى.'''
-
-{{SITENAME}} جوباسىنىڭ باسقا اكىمشىلەرى جاسىرىن ماعلۇماتقا قاتىناي الادى, جانە قوسىمشا تىيىمدار قويىلعانشا دەيىن, وسى تىلدەسۋ ارقىلى جويۋدى بولدىرماۋى مۇمكىن.",
 'revdelete-legend' => 'كورىنىس تىيىمدارىن قويۋ:',
 'revdelete-hide-text' => 'تۇزەتۋ ٴماتىنىن جاسىر',
 'revdelete-hide-image' => 'فايل ماعلۇماتىن جاسىر',
index e3c08bc..3d1df58 100644 (file)
@@ -388,18 +388,18 @@ $messages = array(
 'tog-fancysig' => 'Қолтаңбаны уикимәтін ретінде қарастыру (автоматты сілтеме қойылмайды)',
 'tog-uselivepreview' => 'Тура қарап шығуды қолдану (сынақтық)',
 'tog-forceeditsummary' => 'Өңдеменің қысқаша мазмұндамасы бос қалғанда маған ескерт',
-'tog-watchlisthideown' => 'Өңдемелерімді бақылау тізімінен жасыр',
-'tog-watchlisthidebots' => 'Бот өңдемелерін бақылау тізімінен жасыр',
+'tog-watchlisthideown' => 'Өңдемелерімді бақылау тізімінен жасыру',
+'tog-watchlisthidebots' => 'Бот өңдемелерін бақылау тізімінен жасыру',
 'tog-watchlisthideminor' => 'Шағын өңдемелерді бақылау тізімінде көрсетпеу',
 'tog-watchlisthideliu' => 'Бақылау тізіміндегі қатысушылардың өңдеулерін көрсетпеу',
 'tog-watchlisthideanons' => 'Бақылау тізіміндегі жасырын қатысушылардың өңдеулерін көрсетпеу',
 'tog-watchlisthidepatrolled' => 'Бақылау тізімінде тексерілген өңдеулерді көрсетпеу',
 'tog-ccmeonemails' => 'Басқа қатысушыға жіберген хатымның көшірмесін маған да жөнелт',
-'tog-diffonly' => 'Ð\90йÑ\8bÑ\80ма Ð°Ñ\81Ñ\82Ñ\8bнда Ð±ÐµÑ\82 Ð¼Ð°Ò\93лұмаÑ\82Ñ\8bн ÐºÓ©Ñ\80Ñ\81еÑ\82пе',
+'tog-diffonly' => 'Ð\9dÒ±Ñ\81Ò\9bалаÑ\80 Ð°Ð¹Ñ\8bÑ\80маÑ\88Ñ\8bлÑ\8bÒ\9bÑ\82аÑ\80Ñ\8bнÑ\8bÒ£ Ð°Ñ\81Ñ\82Ñ\8bнда Ð±ÐµÑ\82 Ð¼Ð°Ò\93лұмаÑ\82Ñ\8bн ÐºÓ©Ñ\80Ñ\81еÑ\82пеÑ\83',
 'tog-showhiddencats' => 'Жасырын санаттарды көрсету',
-'tog-noconvertlink' => 'Сілтеме атауларын ауыстырма',
 'tog-norollbackdiff' => 'Шегіндіруден кейін нұсқалардың айырмашылығын көрсетпеу',
 'tog-useeditwarning' => 'Өңдемесі сақталмаған парақшадан шығар кезде ескерту',
+'tog-prefershttps' => 'Кірген кезде қауіпсіз байланысуды әрқашан қолдану',
 
 'underline-always' => 'Әрқашан',
 'underline-never' => 'Ешқашан',
@@ -523,10 +523,9 @@ $messages = array(
 'vector-action-protect' => 'Қорғау',
 'vector-action-undelete' => 'Жоймау',
 'vector-action-unprotect' => 'Қорғанысты өзгерту',
-'vector-simplesearch-preference' => 'Кеңейтілген іздеу құралын қосу (Векторлық безендіру үшін ғана)',
 'vector-view-create' => 'Бастау',
 'vector-view-edit' => 'Өңдеу',
-'vector-view-history' => 'Тарихын қарау',
+'vector-view-history' => 'Өңделу тарихы',
 'vector-view-view' => 'Оқу',
 'vector-view-viewsource' => 'Қайнарын қарау',
 'actions' => 'Әрекеттер',
@@ -735,8 +734,8 @@ $1',
 'protectedpagetext' => 'Бұл бет өңдеу немесе басқа өзгерістер енгізілмес үшін қорғалған.',
 'viewsourcetext' => 'Бұл беттің қайнарын қарауыңызға және көшіріп алуыңызға болады:',
 'viewyourtext' => 'Осы бет арқылы "өзіңіз жасаған өңдеулердің" бастапқы мәтінін көруге және көшіруге мүмкіндігіңіз болады.',
-'protectedinterface' => 'Бұл MediaWiki-дің [[Уикипедия:Интерфейсті аудару|жүйе хабарламасы]], оны тек жоба [[Уикипедия:Әкімшілер|әкімшілер]] ғана өзгерте алады. 
-Кейбір хабарламалар [[translatewiki:{{FULLPAGENAME}}/qqq|құжаттамада]] [[mw:Manual:Interface/{{PAGENAME}}|бар]].',
+'protectedinterface' => 'This page provides interface text for the software on this wiki, and is protected to prevent abuse.
+To add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.',
 'editinginterface' => "'''Ескерту:''' Бағдарламалық жасақтаманың тілдесу мәтінін жетістіретін бетін өңдеп жатырсыз.
 Бұл беттің өзгертуі басқа қатысушыларға пайдаланушылық тілдесуі қалай көрінетіне әсер етеді.
 Барлық уикилер үшін аудармаларды өзгерту немесе қосу үшін [//translatewiki.net/ translatewiki.net] МедиаУики жерлестіру жобасын пайдаланыңыз.",
@@ -806,8 +805,6 @@ $2',
 'gotaccountlink' => 'Кіріңіз',
 'userlogin-resetlink' => 'Қатысушы атын не құпия сөзді ұмыттыңыз ба?',
 'userlogin-resetpassword-link' => 'Құпия сөздіңізді ұмыттыңыз ба?',
-'helplogin-url' => 'Help:Тіркелу',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Тіркелуге көмек]]',
 'userlogin-loggedin' => '{{GENDER:$1|$1}} ретінде әлдеқашан кіргенсіз.
 Төмендегі пішінді басқа қатысушы кіруі ретінде қолданыңыз.',
 'userlogin-createanother' => 'Басқа тіркелгі жасау',
@@ -823,7 +820,7 @@ $2',
 'createacct-reason' => 'Себебі:',
 'createacct-reason-ph' => 'Неге басқа тіркегі жасамақшысыз',
 'createacct-captcha' => 'Құпиялық тексеруі',
-'createacct-imgcaptcha-ph' => 'Жоғарғыдағы көріп тұрған мәтінді енгізіңіз',
+'createacct-imgcaptcha-ph' => 'Жоғарыдағы мәтінді енгізіңіз',
 'createacct-submit' => 'Тіркелгіңізді жасаңыз',
 'createacct-another-submit' => 'Басқа тіркелгі жасау',
 'createacct-benefit-heading' => '{{SITENAME}} сіз сияқты қызығатын адамдар арқылы жасалады.',
@@ -899,6 +896,10 @@ $2',
 'login-abort-generic' => 'Жүйеге кіру үшін сәтсіз талпыныс жасадыңыз.',
 'loginlanguagelabel' => 'Тіл: $1',
 'suspicious-userlogout' => 'Сіздің жүйеден шығу сұранымыңыз қабылданбады, өйткені, бұл жарамсыз браузер немесе кэштеуші проксидің сұранымына ұқсайды.',
+'pt-login' => 'Кіру',
+'pt-login-button' => 'Кіру',
+'pt-createaccount' => 'Тіркелгі жасау',
+'pt-userlogout' => 'Шығу',
 
 # Email sending
 'php-mail-error-unknown' => 'Mail() PHP-функциясындағы белгісіз қате.',
@@ -1228,9 +1229,6 @@ $3 келтірілген себебі: ''$2''",
 'revdelete-show-file-submit' => 'Иә',
 'revdelete-selected' => "'''[[:$1]] дегеннің бөлектенген {{PLURAL:$2|түзетуі|түзетулері}}:'''",
 'logdelete-selected' => "'''Бөлектенген {{PLURAL:$1|журнал оқиғасы|журнал оқиғалары}}:'''",
-'revdelete-text' => "'''Жойылған түзетулер мен оқиғаларды әлі де бет тарихында және журналдарда табуға болады, бірақ олардың мағлұмат бөлшектері баршаға қатыналмайды.'''
-
-{{SITENAME}} жобасының басқа әкімшілері жасырын мағлұматқа қатынай алады, және қосымша тиымдар қойылғанша дейін, осы тілдесу арқылы жоюды болдырмауы мүмкін.",
 'revdelete-legend' => 'Көрініс тиымдарын қою:',
 'revdelete-hide-text' => 'Түзету мәтінін жасыр',
 'revdelete-hide-image' => 'Файл мағлұматын жасыр',
@@ -1303,6 +1301,9 @@ $1",
 'showhideselectedversions' => 'Бөлектенген нұсқаларды көрсет/жасыр',
 'editundo' => 'жоққа шығару',
 'diff-empty' => '(айырмашылығы жоқ)',
+'diff-multi-sameuser' => '(Жоғарыда көрсетілген қатысушының (бір ғана қатысушының) арадағы {{PLURAL:$1|бір түзетуі|$1 түзетуі}} көрсетілмеген)',
+'diff-multi-otherusers' => '({{PLURAL:$2|басқа бір қатысуышының|$2 қатысушының}} арадағы {{PLURAL:$1|бір түзетуі|$1 түзетуі}} көрсетілмеген)',
+'diff-multi-manyusers' => '($2-(ден<sup>4</sup>) көп {{PLURAL:$2|қатысуышының|қатысушының}} арадағы {{PLURAL:$1|бір түзетуі|$1 түзетуі}} көрсетілмеген)',
 'difference-missing-revision' => 'Бұл ($1) {{PLURAL:$2|нұсқа|$2 нұсқалар}} айырмашылығы табылмады.
 
 
@@ -1434,6 +1435,7 @@ $1",
 'yourrealname' => 'Нақты атыңыз:',
 'yourlanguage' => 'Тіліңіз:',
 'yourvariant' => 'Жазба тілінің нұсқалары:',
+'prefs-help-variant' => 'Қалаған нұсқаңыз немесе орфография бұл уикидің контент беттерінде көрсетіледі.',
 'yournick' => 'Жаңа қолтаңбаңыз:',
 'prefs-help-signature' => 'Талқылау беттерінде хабарыңыздан кейін "<nowiki>~~~~</nowiki>" белгісін қалдырсаңыз, бұл қолтаңбаңызбен сол кездегі датаға ауыстырылады.',
 'badsig' => 'Қам қолтаңбаңыз жарамсыз; HTML белгішелерін тексеріңіз.',
@@ -1449,6 +1451,8 @@ $1",
 'prefs-help-realname' => 'Нақты атыңыз міндетті емес.
 Егер бұны жетістіруді таңдасаңыз, бұл түзетуіңіздің ауторлығын анықтау үшін қолданылады.',
 'prefs-help-email' => 'Электронды поштаңыздың мекенжайын көрсету міндетті емес, бірақ құпия сөзіңізді ұмытқан жағдайда керек болады.',
+'prefs-help-email-others' => 'Кейде қатысушы немесе талқылау бетіңізге е-пошта мекенжайы сілтемесін көрсету арқылы басқалармен байланыса аласыз.
+Е-пошта мекенжайыныңыз басқа қатысушылар сізбен байланысқан кезде көрсетілмейді',
 'prefs-help-email-required' => 'Е-пошта мекенжайы керек.',
 'prefs-info' => 'Негізгі мәлімет',
 'prefs-i18n' => 'Тіл туралы мәлімет',
@@ -1466,6 +1470,7 @@ $1",
 'prefs-displaysearchoptions' => 'Көрсету бапталымдары',
 'prefs-displaywatchlist' => 'Көрсету бапталымдары',
 'prefs-diffs' => 'Айырмашылықтар',
+'prefs-help-prefershttps' => 'Бұл баптауды келесі кіргеніңізде әсерін көре аласыз.',
 
 # User preference: email validation using jQuery
 'email-address-validity-invalid' => 'Жарамсыз электронды пошта мекен-жайын енгізіңіз',
@@ -1653,11 +1658,16 @@ $1",
 'rcnotefrom' => "Төменде '''$2''' кезінен бергі ('''$1''' жеткенше дейін) өзгерістер көрсетіледі.",
 'rclistfrom' => '$1 кезінен бергі жаңа өзгерістерді көрсет.',
 'rcshowhideminor' => 'Шағын өңдемелерді $1',
+'rcshowhideminor-hide' => 'жасыру',
 'rcshowhidebots' => 'Боттарды $1',
+'rcshowhidebots-show' => 'көрсету',
 'rcshowhideliu' => 'Тіркелгендерді $1',
+'rcshowhideliu-hide' => 'жасыру',
 'rcshowhideanons' => 'Кірмегендерді $1',
+'rcshowhideanons-hide' => 'жасыру',
 'rcshowhidepatr' => 'Зерттелген өңдемелерді $1',
 'rcshowhidemine' => 'Өңдемелерімді $1',
+'rcshowhidemine-hide' => 'жасыру',
 'rclinks' => 'Соңғы $2 күнде болған, соңғы $1 өзгерісті көрсет<br />$3',
 'diff' => 'айырм.',
 'hist' => 'тарихы',
@@ -1873,14 +1883,14 @@ URL дұрыс екендігін және торап істеп тұрғаны
 'linkstoimage-redirect' => '$1 (файл айдатылуы) $2',
 'duplicatesoffile' => 'Келесі {{PLURAL:$1|файл бұл файлдың телнұсқасы|$1 файл бұл файлдың телнұсқалары}} ([[Special:FileDuplicateSearch/$2|толығырақ көру]]):',
 'sharedupload' => 'Бұл файл $1 жобасынан сондықтан басқа жобаларда қолдануы мүмкін.',
-'sharedupload-desc-there' => 'Бұл файл $1 жобасынан және сондықтан басқа жобаларда қолдануы мүмкін.
+'sharedupload-desc-there' => 'Бұл файл $1 жобасынан, сондықтан басқа жобаларда lf қолдануы мүмкін.
 Қосымша мәліметтер үшін [$2 файл сипаттама бетін] қараңыз.',
-'sharedupload-desc-here' => 'Бұл файл $1 жобасынан және сондықтан басқа жобаларда қолдануы мүмкін.
+'sharedupload-desc-here' => 'Бұл файл $1 жобасынан сондықтан басқа жобаларда қолдануы мүмкін.
 Бұның сипатамасы [$2 файл сипаттама беті] төменде көрсетілген.',
-'sharedupload-desc-edit' => 'Бұл файл $1 жобасынан және сондықтан басқа жобаларда қолдануы мүмкін.
-СипаÑ\82Ñ\82амаÑ\81Ñ\8bн Ó©Ò£Ð´ÐµÐ³Ñ\96Ò£Ñ\96з ÐºÐµÐ»Ñ\81е Ð¼Ò±Ð½Ð´Ð° [$2 Ñ\84айл Ñ\81ипаÑ\82Ñ\82ама Ð±ÐµÑ\82Ñ\96].',
-'sharedupload-desc-create' => 'Бұл файл $1 жобасынан және сондықтан басқа жобаларда қолдануы мүмкін.
-Сипаттамасын өңдегіңіз келсе мұнда [$2 файл сипаттама беті].',
+'sharedupload-desc-edit' => 'Бұл файл $1 жобасынан, сондықтан басқа жобаларда да қолдануы мүмкін.
+СипаÑ\82Ñ\82амаÑ\81Ñ\8bн Ó©Ò£Ð´ÐµÐ³Ñ\96Ò£Ñ\96з ÐºÐµÐ»Ñ\81е Ð¾Ð» [$2 Ñ\84айл Ñ\81ипаÑ\82Ñ\82ама Ð±ÐµÑ\82Ñ\96нде].',
+'sharedupload-desc-create' => 'Бұл файл $1 жобасынан, сондықтан басқа жобаларда да қолдануы мүмкін.
+Сипаттамасын өңдегіңіз келсе [$2 файл сипаттама бетіне] өтіңіз.',
 'filepage-nofile' => 'Бұл атаумен файл жоқ.',
 'filepage-nofile-link' => 'Бұл атаумен файл жоқ, бірақ сіз оны [$1 жүктей аласыз].',
 'uploadnewversion-linktext' => 'Бұл файлдың жаңа нұсқасын жүктеу',
@@ -1997,7 +2007,7 @@ URL дұрыс екендігін және торап істеп тұрғаны
 'nbytes' => '$1 {{PLURAL:$1|байт|байт}}',
 'ncategories' => '$1 {{PLURAL:$1|Санат|Санаттар}}',
 'ninterwikis' => '$1 {{PLURAL:$1|интеруики|интеруикилер}}',
-'nlinks' => '$1 {{PLURAL:$1|сілтеме|сілтемелер}}',
+'nlinks' => '$1 сілтеме',
 'nmembers' => '$1 {{PLURAL:$1|мүше|мүше}}',
 'nmemberschanged' => '$1 → $2 {{PLURAL:$2|мүше|мүше}}',
 'nrevisions' => '$1 {{PLURAL:$1|түзету|түзету}}',
@@ -2027,6 +2037,7 @@ URL дұрыс екендігін және торап істеп тұрғаны
 'mostrevisions' => 'Ең көп түзетілген беттер',
 'prefixindex' => 'Атау бастауыш тізімі',
 'prefixindex-namespace' => 'Атау бастауыш тізімі ($1 есім кеңістігі)',
+'prefixindex-strip' => 'Префиксті тізімнен қысқарту',
 'shortpages' => 'Ең қысқа беттер',
 'longpages' => 'Ең ұзын беттер',
 'deadendpages' => 'Еш бетке сілтемейтін беттер',
@@ -2040,6 +2051,7 @@ URL дұрыс екендігін және торап істеп тұрғаны
 'listusers' => 'Қатысушы тізімі',
 'listusers-editsonly' => 'Тек қатысушы өңдемелерін көрсету',
 'listusers-creationsort' => 'Басталған уақытына қарай іріктеу',
+'listusers-desc' => 'Кемуі бойынша ретке келтіру',
 'usereditcount' => '$1 {{PLURAL:$1|өңдеме|өңдемелер}}',
 'usercreated' => '$1 $2-та {{GENDER:$3|басталған}}',
 'newpages' => 'Ең жаңа беттер',
@@ -2209,6 +2221,7 @@ URL дұрыс екендігін және торап істеп тұрғаны
 'watchmethod-list' => 'жуықтағы өзгерістер үшін бақылаулы беттерді тексеру',
 'watchlistcontains' => 'Бақылау тізіміңізде $1 бет бар.',
 'iteminvalidname' => "'$1' данада ақау бар — жарамсыз атау…",
+'wlnote2' => 'Төменде $2, $3 кезіне дейінгі соңғы {{PLURAL:$1|сағаттағы|<strong>$1</strong> сағаттағы}} өзгерістер көрсетілген.',
 'wlshowlast' => 'Соңғы $1 сағаттағы, $2 күндегі, $3 болған өзгерісті көрсету',
 'watchlist-options' => 'Бақылау тізімінің баптаулары',
 
@@ -2474,6 +2487,7 @@ $1',
 'sp-contributions-search' => 'Үлес үшін іздеу',
 'sp-contributions-username' => 'IP-мекенжайы немесе қатысушы аты:',
 'sp-contributions-toponly' => 'Өңдемелердің тек соңғы нұсқаларын көрсету',
+'sp-contributions-newonly' => 'Бет бастау өңдемелерін ғана көрсету',
 'sp-contributions-submit' => 'Ізде',
 
 # What links here
@@ -2947,7 +2961,7 @@ $2',
 
 # Skin names
 'skinname-cologneblue' => 'Көк зеңгірлігі (cologneblue)',
-'skinname-monobook' => 'Ð\94аÑ\80а кітап (monobook)',
+'skinname-monobook' => 'Ð\96еке кітап (monobook)',
 'skinname-modern' => 'Заманауи (modern)',
 
 # Patrolling
@@ -3537,7 +3551,7 @@ $5
 'iranian-calendar-m9' => 'азар',
 'iranian-calendar-m10' => 'ди',
 'iranian-calendar-m11' => 'бемін',
-'iranian-calendar-m12' => 'аспанд',
+'iranian-calendar-m12' => 'аспанд (Иран күнтізбесі)',
 
 # Hebrew month names
 'hebrew-calendar-m1' => 'тішри',
@@ -3547,7 +3561,7 @@ $5
 'hebrew-calendar-m5' => 'шыбат',
 'hebrew-calendar-m6' => 'адар',
 'hebrew-calendar-m6a' => 'адар',
-'hebrew-calendar-m6b' => 'уадар',
+'hebrew-calendar-m6b' => 'Адар II (иврит күнтізбесі)',
 'hebrew-calendar-m7' => 'нисан',
 'hebrew-calendar-m8' => 'аяр',
 'hebrew-calendar-m9' => 'сиуан',
index 0df6226..6593320 100644 (file)
@@ -974,9 +974,6 @@ Mında [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} joyw jwrnalı
 keltirilgen tüzetw joq, ne ağımdıq tüzetwdi jasırw üşin ärekettenip kördiñiz.',
 'revdelete-selected' => "'''[[:$1]] degenniñ bölektengen {{PLURAL:$2|tüzetwi|tüzetwleri}}:'''",
 'logdelete-selected' => "'''Bölektengen {{PLURAL:$1|jwrnal oqïğası|jwrnal oqïğaları}}:'''",
-'revdelete-text' => "'''Joýılğan tüzetwler men oqïğalardı äli de bet tarïxında jäne jwrnaldarda tabwğa boladı, biraq olardıñ mağlumat bölşekteri barşağa qatınalmaýdı.'''
-
-{{SITENAME}} jobasınıñ basqa äkimşileri jasırın mağlumatqa qatınaý aladı, jäne qosımşa tïımdar qoýılğanşa deýin, osı tildesw arqılı joywdı boldırmawı mümkin.",
 'revdelete-legend' => 'Körinis tïımdarın qoyw:',
 'revdelete-hide-text' => 'Tüzetw mätinin jasır',
 'revdelete-hide-image' => 'Faýl mağlumatın jasır',
index c6285a8..8f4f8dd 100644 (file)
@@ -424,7 +424,6 @@ $messages = array(
 'vector-action-protect' => 'ការពារ',
 'vector-action-undelete' => 'ឈប់លុបចោល',
 'vector-action-unprotect' => 'ប្ដូរការការពារ',
-'vector-simplesearch-preference' => 'ប្រើរបារស្វែងរកសាមញ្ញ (សំរាប់តែសំបកវ៉ិចទ័រប៉ុណ្ណោះ)',
 'vector-view-create' => 'បង្កើត​',
 'vector-view-edit' => 'កែប្រែ​',
 'vector-view-history' => 'មើល​ប្រវត្តិ​',
@@ -661,6 +660,7 @@ $2',
 'invalidtitle-unknownnamespace' => 'ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះមិនស្គាល់លេខ $1 និងអត្ថបទ "$2"',
 'exception-nologin' => 'មិនទាន់កត់ឈ្មោះចូលទេ',
 'exception-nologin-text' => 'សូម[[Special:Userlogin|lកត់ឈ្មោះចូល]]ដើម្បីចូលអានទំព័រឬធ្វើសកម្មភាពនេះ។',
+'exception-nologin-text-manual' => 'សូម $1 ដើម្បីអាចចូលមើលទំព័រនេះឬធ្វើសកម្មភាពអ្វីមួយ។',
 
 # Virus scanner
 'virus-badscanner' => "ការ​កំណត់​រចនា​សម្ព័ន្ធ​មិន​ល្អ​៖ កម្មវិធី​ស្កេន​មេរោគមិន​ស្គាល់​៖ ''$1''",
@@ -709,8 +709,8 @@ $2',
 'gotaccountlink' => 'កត់ឈ្មោះចូល',
 'userlogin-resetlink' => 'តើអ្នកភ្លេចព័ត៌មានលម្អិតសម្រាប់កត់ឈ្មោះចូលហើយ?',
 'userlogin-resetpassword-link' => 'អ្នកភ្លេចពាក្យសម្ងាត់ហើយ?',
-'helplogin-url' => 'Help:ការកត់ឈ្មោះចូល',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ជំនួយក្នុងការកត់ឈ្មោះចូល]]',
+'userlogin-loggedin' => 'អ្នកបានកត់ឈ្មោះចូលជា {{GENDER:$1|$1}} ហើយ។
+ប្រើសំណុំបែបបទខាងក្រោមដើម្បីកត់ឈ្មោះចូលជាអ្នកប្រើប្រាស់ផ្សេងម្នាក់ទៀត។',
 'userlogin-createanother' => 'បង្កើតគណនីមួយទៀត',
 'createacct-join' => 'បំពេញព័ត៌មានរបស់អ្នកខាងក្រោម។',
 'createacct-another-join' => 'បញ្ចូលព័ត៌មានគណនីថ្មីខាងក្រោម។',
@@ -819,6 +819,9 @@ $2',
 'login-abort-generic' => 'អ្នកចុះឈ្មោះចូលមិនបានសម្រេចទេ។ ការចុះឈ្មោះចូលត្រូវបានបោះបង់។',
 'loginlanguagelabel' => 'ភាសា៖ $1',
 'createacct-another-realname-tip' => 'អ្នកអាចផ្ដល់ឈ្មោះពិតរបស់អ្នកក៏បានមិនផ្ដល់ក៏បាន។ បើអ្នកផ្ដល់ឱ្យ វានឹងត្រូវបានប្រើប្រាស់់ដើម្បីបញ្ជាក់ភាពជាម្ចាស់​លើការរួមចំណែក​នានា​របស់អ្នក។',
+'pt-login' => 'កត់ឈ្មោះចូល',
+'pt-createaccount' => 'បង្កើតគណនី',
+'pt-userlogout' => 'កត់ឈ្មោះចេញ',
 
 # Email sending
 'php-mail-error-unknown' => 'កំហុសមិនស្គាល់នៅក្នុងអនុគមន៍ mail() របស់ PHP',
@@ -827,9 +830,7 @@ $2',
 
 # Change password dialog
 'changepassword' => 'ប្តូរពាក្យសម្ងាត់',
-'resetpass_announce' => 'អ្នកបានកត់ឈ្មោះចូលដោយ​អក្សរកូដ​បណ្តោះអាសន្ន​មួយដែលយើងខ្ញុំបានអ៊ីមែលទៅឱ្យ​។
-
-ដើម្បី​បញ្ចប់​ការកត់ឈ្មោះចូល អ្នកត្រូវតែ​កំណត់​ពាក្យសម្ងាត់ថ្មី​មួយនៅទីនេះ៖',
+'resetpass_announce' => 'ដើម្បី​បញ្ចប់​ការកត់ឈ្មោះចូល អ្នកត្រូវតែ​កំណត់​ពាក្យសម្ងាត់ថ្មី​មួយ។',
 'resetpass_text' => '<!-- បន្ថែមឃ្លានៅទីនេះ -->',
 'resetpass_header' => 'ប្ដូរ​ពាក្យសម្ងាត់​គណនី',
 'oldpassword' => 'ពាក្យសម្ងាត់ចាស់៖',
@@ -837,6 +838,8 @@ $2',
 'retypenew' => 'សូមវាយពាក្យសម្ងាត់ថ្មី​ម្តងទៀត៖',
 'resetpass_submit' => 'ដាក់ប្រើពាក្យសម្ងាត់និង​កត់ឈ្មោះចូល',
 'changepassword-success' => 'ពាក្យសម្ងាត់របស់អ្នកត្រូវបានផ្លាស់ប្តូរបានសំរេចហើយ!',
+'changepassword-throttled' => 'អ្នកបានព្យាយាមកត់ឈ្មោះចូលជាប់ៗគ្នាច្រើនដងពេកហើយ។​
+សូមរង់ចាំរយៈពេល$1 មុនពេលសាកល្បងម្ដងទៀត។',
 'resetpass_forbidden' => 'ពាក្យសម្ងាត់មិនអាចផ្លាស់ប្តូរបានទេ',
 'resetpass-no-info' => 'អ្នក​ចាំបាច់​ត្រូវតែ​កត់ឈ្មោះចូល ដើម្បី​ចូលទៅកាន់​ទំព័រ​នេះ​ដោយផ្ទាល់​។',
 'resetpass-submit-loggedin' => 'ប្តូរពាក្យសម្ងាត់',
@@ -844,7 +847,12 @@ $2',
 'resetpass-wrong-oldpass' => 'ពាក្យ​សម្ងាត់​បណ្ដោះ​អាសន្ន​ ឬ​បច្ចុប្បន្នមិន​ត្រឹមត្រូវ​។
 
 អ្នក​​ប្រហែល​ជា​បាន​ផ្លាស់​ប្ដូរ​ពាក្យសម្ងាត់​រួចហើយ ឬ​បានស្នើ​សុំ​ពាក្យ​សម្ងាត់​​បណ្ដោះ​អាសន្ន​​ថ្មី​មួយ​ហើយ។',
+'resetpass-recycled' => 'សូមកំណត់ពាក្យសម្ងាត់ថ្មីរបស់អ្នក ដែលខុសពីពាក្យសម្ងាត់បច្ចុប្បន្នរបស់អ្នក។',
+'resetpass-temp-emailed' => 'អ្នកបានកត់ឈ្មោះចូលដោយប្រើលេខកូដបណ្ដោះអាសន្នផ្ញើតាមអ៊ីមែល។
+ដើម្បីបញ្ចប់ការកត់ឈ្មោះចូល អ្នកចាំបាច់ត្រូវតែកំណត់ពាក្យសម្ងាត់ថ្មីនៅទីនេះ៖',
 'resetpass-temp-password' => 'ពាក្យសម្ងាត់បណ្តោះអាសន្ន:',
+'resetpass-expired' => 'ពាក្យសម្ងាត់របស់អ្នកហួសសុពលភាពហើយ។ សូមកំណត់ពាក្យសម្ងាត់ថ្មីដើម្បីកត់ឈ្មោះចូល។',
+'resetpass-expired-soft' => 'ពាក្យសម្ងាត់របស់អ្នកហួសសុពលភាពហើយ ហើយអ្នកត្រូវតែកំណត់វាឡើងវិញ។ សូមជ្រើសរើសពាក្យសម្ងាត់ថ្មីឥឡូវនេះ ឬចុចបោះបង់ដើម្បីកំណត់វានៅពេលក្រោយ។',
 
 # Special:PasswordReset
 'passwordreset' => 'កំណត់​ពាក្យសម្ងាត់​សាឡើងវិញ',
@@ -894,6 +902,8 @@ $2
 'changeemail-password' => 'ពាក្យសំងាត់{{SITENAME}}របស់អ្នក:',
 'changeemail-submit' => 'ផ្លាស់ប្ដូរអ៊ីមែល',
 'changeemail-cancel' => 'បោះបង់',
+'changeemail-throttled' => 'អ្នកបានព្យាយាមកត់ឈ្មោះចូលច្រើនដងពេកហើយ។​
+សូមរង់ចាំរយៈពេល$1 មុនពេលសាកល្បងម្ដងទៀត។',
 
 # Edit page toolbar
 'bold_sample' => 'អក្សរដិត',
@@ -1112,7 +1122,7 @@ $2
 'invalid-content-data' => 'ខ្លឹមសារទិន្នន័យគ្មានសុពលភាព',
 'content-not-allowed-here' => 'មិនអនុញ្ញាតិអោយសរសេរខ្លឹមសារ"$1" នៅលើទំព័រ [[$2]] ទេ។',
 'editwarning-warning' => 'ចាកចេញពីទំព័រនេះ នឹងធ្វើឲ្យអ្នកបាត់បង់កំណែប្រែដែលអ្នកបានធ្វើ។
-ប្រសិនបើអ្នកបាន​កត់ឈ្មោះចូលរួចហើយ អ្នកអាច​បិទ​បម្រាម​នេះ​នៅ​ក្នុងផ្នែក​ "កែប្រែ" នៃ​ចំណង់ចំណូល​ចិត្ត​របស់​អ្នក​។',
+ប្រសិនបើអ្នកបាន​កត់ឈ្មោះចូលរួចហើយ អ្នកអាច​បិទ​បម្រាម​នេះ​នៅ​ក្នុងផ្នែក​ "{{int:prefs-editing}}" នៃ​ចំណង់ចំណូល​ចិត្ត​របស់​អ្នក​។',
 
 # Content models
 'content-model-wikitext' => 'អត្ថបទវិគី',
@@ -1379,7 +1389,7 @@ $1",
 'prefs-labs' => 'មុខងារពិសេសថ្មីៗដែលស្ថិតក្រោមការពិសោធន៍នៅឡើយ',
 'prefs-user-pages' => 'ទំព័រអ្នកប្រើប្រាស់',
 'prefs-personal' => 'ប្រវត្តិរូប',
-'prefs-rc' => 'á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aថ្មីៗ',
+'prefs-rc' => 'á\9e\94á\9e\93á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bថ្មីៗ',
 'prefs-watchlist' => 'បញ្ជីតាមដាន',
 'prefs-watchlist-days' => 'ចំនួនថ្ងៃត្រូវបង្ហាញក្នុងបញ្ជីតាមដាន៖',
 'prefs-watchlist-days-max' => 'អតិបរមា $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}}',
@@ -1666,11 +1676,23 @@ $1",
 'rcnotefrom' => "ខាងក្រោមនេះជាបន្លាស់ប្ដូរនានាគិតចាប់តាំងពី '''$2''' (បង្ហាញអតិបរមាចំនួន '''$1''')។",
 'rclistfrom' => 'បង្ហាញបន្លាស់ប្ដូរថ្មីៗចាប់តាំងពី $1',
 'rcshowhideminor' => '$1កំណែប្រែ​តិចតួច',
+'rcshowhideminor-show' => 'បង្ហាញ​',
+'rcshowhideminor-hide' => 'លាក់',
 'rcshowhidebots' => '$1រូបយន្ត',
+'rcshowhidebots-show' => 'បង្ហាញ​',
+'rcshowhidebots-hide' => 'លាក់',
 'rcshowhideliu' => '$1អ្នកប្រើប្រាស់ដែលបានចុះឈ្មោះរួច',
+'rcshowhideliu-show' => 'បង្ហាញ',
+'rcshowhideliu-hide' => 'លាក់',
 'rcshowhideanons' => '$1អ្នកប្រើប្រាស់អនាមិក',
+'rcshowhideanons-show' => 'បង្ហាញ',
+'rcshowhideanons-hide' => 'លាក់',
 'rcshowhidepatr' => '$1កំណែប្រែដែលបានល្បាត',
+'rcshowhidepatr-show' => 'បង្ហាញ',
+'rcshowhidepatr-hide' => 'លាក់',
 'rcshowhidemine' => '$1កំណែប្រែរបស់ខ្ញុំ',
+'rcshowhidemine-show' => 'បង្ហាញ',
+'rcshowhidemine-hide' => 'លាក់',
 'rclinks' => 'បង្ហាញបន្លាស់ប្ដូរ$1ចុងក្រោយធ្វើឡើងក្នុងរយៈពេល$2ថ្ងៃចុងក្រោយ<br />$3',
 'diff' => 'ប្រៀបធៀប',
 'hist' => 'ប្រវត្តិ',
@@ -2120,9 +2142,20 @@ $1',
 'deadendpagestext' => 'ទំព័រដូចតទៅនេះមិនតភ្ជាប់ទៅទំព័រដទៃទៀតក្នុង {{SITENAME}} ទេ។',
 'protectedpages' => 'ទំព័រដែលត្រូវបានការពារ',
 'protectedpages-indef' => 'សំរាប់តែការការពារដែលមិនកំណត់ប៉ុណ្ណោះ',
+'protectedpages-summary' => 'ទំព័រនេះរាយបញ្ជីទំព័រដែលកំពុងត្រូវបានការពារ។ សម្រាប់បញ្ជីចំណងជើងទាំងឡាយដែលស្ថិននៅក្រោមការការពារមិនអោយបង្កើត សូមមើលនៅ [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]។',
 'protectedpages-cascade' => 'សំរាប់ការការពារជាថ្នាក់ប៉ុណ្ណោះ​',
+'protectedpages-noredirect' => 'លាក់ការបញ្ជូនបន្ត',
 'protectedpagesempty' => '​មិន​មាន​ទំព័រ​ណា​ដែល​ត្រូវបាន​ការពារ ជាមួយប៉ារ៉ាម៉ែត​ទាំងនេះទេ។',
+'protectedpages-timestamp' => 'ត្រាពេលវេលា',
+'protectedpages-page' => 'ទំព័រ',
+'protectedpages-expiry' => 'ផុតកំណត់',
+'protectedpages-performer' => 'អ្នកប្រើប្រាស់កំពុងការពារ',
+'protectedpages-params' => 'ប៉ារ៉ាម៉ែត្រនៃការការពារ',
+'protectedpages-reason' => 'មូល​ហេតុ',
+'protectedpages-unknown-timestamp' => 'មិនស្គាល់',
+'protectedpages-unknown-performer' => 'អ្នកប្រើប្រាស់មិនស្គាល់',
 'protectedtitles' => 'ចំណងជើងត្រូវបានការពារ',
+'protectedtitles-summary' => 'ទំព័រនេះរាយបញ្ជីចំណងជើងទាំងឡាយដែលស្ថិននៅក្រោមការការពារមិនអោយបង្កើត។ សម្រាប់បញ្ជីទំព័រដែលកំពុងត្រូវបានការពារ សូមមើលនៅ [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]។',
 'protectedtitlesempty' => 'មិន​មាន​ចំណងជើង​ណា​ដែល​ត្រូវ​បាន​ការពារ​ជាមួយនឹង​ប៉ារ៉ាម៉ែត​ទាំងនេះ​ទេ​នាពេលថ្មីៗនេះ។',
 'listusers' => 'បញ្ជីអ្នកប្រើប្រាស់',
 'listusers-editsonly' => 'បង្ហាញតែអ្នកប្រើប្រាស់ដែលបានកែប្រែអត្ថបទប៉ុណ្ណោះ',
@@ -2813,6 +2846,7 @@ $1',
 'exportall' => 'នាំចេញទំព័រទាំងអស់',
 'exportnohistory' => "----
 '''សម្គាល់​:''' ការ​នាំ​ចេញ​នូវ​ប្រវត្តិ​នៃ​ទំព័រ​តាម​រយៈ​សំនុំ​បែប​បទ​នេះ​ មិនត្រូវ​បានអនុញ្ញាត​ដោយ​មូល​ហេតុ​ប៉ះ​ពាល់​ដល់​គុណភាព​ដំឡើរ​ការ​។",
+'exportlistauthors' => 'រួមបញ្ចូលបញ្ជីពេញលេញនៃអ្នករួមចំណែកសម្រាប់ទំព័រនីមួយៗ',
 'export-submit' => 'នាំចេញ',
 'export-addcattext' => 'បន្ថែមទំព័រនានាពីចំណាត់ថ្នាក់ក្រុម៖',
 'export-addcat' => 'បន្ថែម',
@@ -2835,13 +2869,17 @@ $1',
 'allmessages-prefix' => 'តម្រង​តាម​បុព្វបទ​៖',
 'allmessages-language' => 'ភាសា៖',
 'allmessages-filter-submit' => 'ទៅ',
+'allmessages-filter-translate' => 'បកប្រែ',
 
 # Thumbnails
 'thumbnail-more' => 'ពង្រីក',
 'filemissing' => 'ឯកសារបាត់បង់',
 'thumbnail_error' => 'កំហុស​បង្កើត​កូនរូបភាព៖ $1',
+'thumbnail_error_remote' => 'សារប្រាប់បញ្ហាបានពី $1: $2',
 'djvu_page_error' => 'ទំព័រ DjVu ក្រៅដែនកំណត់',
 'djvu_no_xml' => 'មិនអាចនាំយក XML សម្រាប់ឯកសារ DjVu',
+'thumbnail-temp-create' => 'មិនអាចបង្កើតឯកសារកូនរូបភាពបណ្ដោះអាសន្ន',
+'thumbnail-dest-create' => 'មិនអាចរក្សាទុកកូនរូបភាពនៅទីតាំងគោលដៅបានទេ',
 'thumbnail_invalid_params' => 'តួលេខ កូនទំព័រ គ្មានសុពលភាព',
 'thumbnail_dest_directory' => 'មិនអាចបង្កើតថតឯកសារតាមគោលដៅបានទេ',
 'thumbnail_image-type' => 'មិនស្គាល់ប្រើជាមួយឯកសារប្រភេទនេះទេ',
@@ -3712,6 +3750,7 @@ $5
 'logentry-newusers-newusers' => 'គណនីអ្នកប្រើប្រាស់ $1 {{GENDER:$2|ត្រូវបានបង្កើត}}',
 'logentry-newusers-create' => 'គណនីអ្នកប្រើប្រាស់ $1 {{GENDER:$2|ត្រូវបានបង្កើត}}',
 'logentry-newusers-create2' => 'គណនីអ្នកប្រើប្រាស់ $3 {{GENDER:$2|ត្រូវបានបង្កើត}} ដោយ $1',
+'logentry-newusers-byemail' => 'គណនីអ្នកប្រើប្រាស់ $3 ត្រូវបាន {{GENDER:$2|បង្កើត}} ដោយ $1 ហើយពាក្យសម្ងាត់ត្រូវបានផ្ញើរតាមអ៊ីមែល',
 'logentry-newusers-autocreate' => 'គណនីអ្នកប្រើប្រាស់ $1 {{GENDER:$2|ត្រូវបានបង្កើត}} ដោយស្វ័យប្រវត្តិ',
 'logentry-rights-rights' => '$1 {{GENDER:$2|បានផ្លាស់ប្ដូរ}}សមាជិកភាពរបស់ $3 ពី $4 ទៅជា $5',
 'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|បានផ្លាស់ប្ដូរ}}សមាជិកភាពរបស់ $3',
@@ -3724,6 +3763,9 @@ $5
 'feedback-cancel' => 'បោះបង់​',
 'feedback-submit' => 'ដាក់ស្នើមតិយោបល់',
 'feedback-adding' => 'កំពុងបន្ថែមមតិយោបល់ទៅលើទំព័រ...',
+'feedback-error1' => 'បញ្ហា៖ លទ្ធផលមិនស្គាល់ពី API',
+'feedback-error2' => 'បញ្ហា៖ កែប្រែមិនបានសម្រេច',
+'feedback-error3' => 'បញ្ហា៖ គ្មានចម្លើយតបពី API',
 'feedback-thanks' => 'សូមអរគុណ! មតិយោបល់របស់អ្នកត្រូវបានដាក់ផ្សាយនៅលើទំព័រ "[$2 $1]"។',
 'feedback-close' => 'រួចរាល់',
 
@@ -3770,6 +3812,12 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|សតវត្សរ៍|សតវត្សរ៍}}',
 'duration-millennia' => '$1 {{PLURAL:$1|សហសវត្សរ៍|សហសវត្សរ៍}}',
 
+# Limit report
+'limitreport-cputime' => 'រយៈពេលប្រើប្រាស់ CPU',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|វិនាទី|វិនាទី}}',
+'limitreport-walltime' => 'រយៈពេលប្រើប្រាស់ពិតប្រាកដ',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|វិនាទី|វិនាទី}}',
+
 # Special:ExpandTemplates
 'expandtemplates' => 'ពង្រីកទំព័រគំរូ',
 'expand_templates_input' => 'សរសេរឃ្លា',
index ac54233..8488642 100644 (file)
@@ -228,7 +228,6 @@ $messages = array(
 'vector-action-protect' => 'ಸಂರಕ್ಷಿಸು',
 'vector-action-undelete' => 'ಅಳಿಸಬೇಡ',
 'vector-action-unprotect' => 'ರಕ್ಷಣೆಯನ್ನು ಬದಲಾವಣೆ',
-'vector-simplesearch-preference' => 'ವರ್ಧಿಸಿದ ಹುಡುಕು ಸಲಹೆಗಳನ್ನು (ಕೇವಲ ವೆಕ್ಟರ್ ಚರ್ಮ) ಸಕ್ರಿಯಗೊಳಿಸಿ',
 'vector-view-create' => 'ಸೃಷ್ಟಿಸು',
 'vector-view-edit' => 'ಸಂಪಾದಿಸಿ',
 'vector-view-history' => 'ಇತಿಹಾಸವನ್ನು ನೋಡಿ',
@@ -469,7 +468,7 @@ $2',
 'welcomecreation-msg' => 'ನಿಮ್ಮ ಖಾತೆ ತೆರೆಯಲಾಗಿದೆ.ನಿಮ್ಮ [[Special:Preferences|{{SITENAME}} preferences]]ಬದಲಾಯಿಸಲು ಮರೆಯಬೇಡಿ.',
 'yourname' => 'ನಿಮ್ಮ ಬಳಕೆಯ ಹೆಸರು',
 'userlogin-yourname' => 'ಬಳಕೆದಾರ ಹೆಸರು',
-'userlogin-yourname-ph' => 'ನಿಮ್ಮ ಸದಸ್ಯನಾಮ ("ಯೋಸರ್ನೇಮ್") ಬರಿರಿ',
+'userlogin-yourname-ph' => 'ನಿಮ್ಮ ಸದಸ್ಯನಾಮ ಬರೆಯಿರಿ',
 'createacct-another-username-ph' => 'ಸದಸ್ಯನಾಮ ("ಯೋಸರ್ನೇಮ್") ಬರಿರಿ',
 'yourpassword' => 'ನಿಮ್ಮ ಪ್ರವೇಶಪದ',
 'userlogin-yourpassword' => 'ಪ್ರವೇಶಪದ',
@@ -479,7 +478,7 @@ $2',
 'createacct-yourpasswordagain' => 'ಪ್ರವೇಶಪದವನ್ನು ಧೃಡೀಕರಿಸಿ',
 'createacct-yourpasswordagain-ph' => 'ಪ್ರವೇಶಪದವನ್ನು ಮತ್ತೊಮ್ಮೆ ನಮೂದಿಸಿ',
 'remembermypassword' => 'ಈ ಗಣಕಯಂತ್ರದಲ್ಲಿ ನನ್ನ ಲಾಗಿನ್ ನೆನಪಿನಲ್ಲಿಟ್ಟುಕೊ (ಗರಿಷ್ಠ $1 {{PLURAL:$1|ದಿನದ|ದಿನಗಳ}}ವರೆಗೆ)',
-'userlogin-remembermypassword' => 'ನನ್ನನ್ನ ಲೋಗ್ಗೆದ್ ಇನ್ ಎ ಇಡಿ.',
+'userlogin-remembermypassword' => 'ನನ್ನನ್ನು ಲಾಗಿನ್ ಆಗಿಯೇ ಇಡಿ',
 'userlogin-signwithsecure' => 'ಸುರಕ್ಷಿತವಾದ ಕನೆಕ್ಷನ್ ಉಪಯೋಗಿಸಿ.',
 'yourdomainname' => 'ನಿಮ್ಮ ಕ್ಷೇತ್ರ:',
 'password-change-forbidden' => 'ನೀವು ಈ ವಿಕಿಯಲ್ಲಿ ಪ್ರವೇಶಪದವನ್ನು ಬದಲಾಯಿಸಲು ಸಾದ್ಯವಿಲ್ಲ.',
@@ -499,7 +498,7 @@ $2',
 'gotaccount' => "ಈಗಾಗಲೇ ಖಾತೆಯಿದೆಯೇ? '''$1'''.",
 'gotaccountlink' => 'ಲಾಗ್ ಇನ್',
 'userlogin-resetlink' => 'ನಿಮ್ಮ ಲಾಗಿನ್ ವಿವರಗಳನ್ನು ಮರೆತಿದ್ದೀರಾ?',
-'userlogin-resetpassword-link' => 'à²\97à³\81ಪà³\8dತಪದವನà³\8dನà³\81 à²®à²°à²¿à²¤à³\81 à²¹à³\8aಯಿತ ?',
+'userlogin-resetpassword-link' => 'ನಿಮà³\8dಮ à²ªà³\8dರವà³\87ಶಪದ à²®à²°à³\86ತಿರà³\87?',
 'createacct-join' => 'ನಿಮ್ಮ ಮಾಹಿತಿಯನ್ನು ಕೆಳಗೆ ನಮೂದಿಸಿ',
 'createacct-emailrequired' => 'ಇ-ಮೇಲ್ ವಿಳಾಸ:',
 'createacct-email-ph' => 'ನಿಮ್ಮ ಇ-ಅಂಚೆ ವಿಳಾಸವನ್ನು ನಮೂದಿಸಿ',
@@ -813,9 +812,6 @@ $2',
 'rev-showdeleted' => 'ತೋರಿಸು',
 'revdelete-show-file-submit' => 'ಹೌದು',
 'revdelete-selected' => "'''[[:$1]]ರ ಆಯ್ಕೆಯಾಗಿರುವ {{PLURAL:$2|ಆವೃತ್ತಿ|ಆವೃತ್ತಿಗಳು}}:'''",
-'revdelete-text' => "'''ಅಳಿಸಲ್ಪಟ್ಟಿರುವ ಬದಲಾವಣೆಗಳು ಮತ್ತು ಘಟನೆಗಳು ಪುಟದ ಇತಿಹಾಸದಲ್ಲಿ ತೋರುತ್ತದೆ, ಆದರೆ ಅದರಲ್ಲಿನ ಮಾಹಿತಿಯು ಸಾರ್ವಜನಿಕರಿಗೆ ದೊರೆಯುವುದಿಲ್ಲ.'''
-
-{{SITENAME}} ಅಲ್ಲಿನ ಇತರ ನಿರ್ವಾಹಕರು ಹೀಗೆ ಅಡಗಿಸಲ್ಪಟ್ಟ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಬಹುದು ಮತ್ತು ಅದರ ಅಳಿಸುವಿಕೆಯನ್ನು ಇದೇ ವ್ಯವಸ್ಥೆಯ ಪ್ರಕಾರ ರದ್ದುಮಾಡಬಹುದು. ಹೆಚ್ಚುವರಿ ನಿಬಂಧನಗಳಿದ್ದರೆ ಹಾಗೆ ಮಾಡಲಾಗುವುದಿಲ್ಲ.",
 'revdelete-legend' => 'ಕಾಣಿಸುವಿಕೆಯ ನಿಬಂಧನೆಗಳನ್ನು ನಿಶ್ಚಯಿಸು',
 'revdelete-hide-text' => 'ಬದಲಾವಣೆಯ ಪಠ್ಯವನ್ನು ಅಡಗಿಸು',
 'revdelete-hide-image' => 'ಫೈಲಿನಲ್ಲಿರುವ ಮಾಹಿತಿಯನ್ನು ಅಡಗಿಸು',
index eb17238..3396154 100644 (file)
@@ -399,7 +399,6 @@ $messages = array(
 'tog-ccmeonemails' => '이메일을 보낼 때 내 이메일로 복사본을 보내기',
 'tog-diffonly' => '편집 차이를 비교할 때 문서 내용을 보지 않기',
 'tog-showhiddencats' => '숨은 분류 보이기',
-'tog-noconvertlink' => '링크 제목 변환을 비활성화',
 'tog-norollbackdiff' => '되돌리기 후 차이를 보지 않기',
 'tog-useeditwarning' => '바꾼 내용을 저장하지 않고 편집 페이지를 벗어날 때 알림',
 'tog-prefershttps' => '로그인할 때 항상 보안 연결 사용',
@@ -526,7 +525,6 @@ $messages = array(
 'vector-action-protect' => '보호',
 'vector-action-undelete' => '되살리기',
 'vector-action-unprotect' => '보호 설정 바꾸기',
-'vector-simplesearch-preference' => '단순한 검색 막대 사용하기 (벡터 스킨 전용)',
 'vector-view-create' => '만들기',
 'vector-view-edit' => '편집',
 'vector-view-history' => '역사',
@@ -731,7 +729,7 @@ URL을 잘못 입력하였거나, 잘못된 링크를 따라갔을 수 있습니
 'badtitletext' => '요청한 문서 제목이 잘못되었거나, 비어있거나, 잘못된 인터위키 제목으로 링크했습니다.
 문서 제목에 사용할 수 없는 문자를 사용했을 수 있습니다.',
 'perfcached' => '다음 자료는 캐시된 것이므로 새로 바뀐 내용을 반영하지 못할 수도 있습니다. 캐시에 최대 {{PLURAL:$1|$1개의 결과}}가 있습니다.',
-'perfcachedts' => '다음 자료는 캐시된 것으로, $1에 마지막으로 새로 고쳐졌습니다.  캐시에 최대 {{PLURAL:$4|결과 $4개}}가 있습니다.',
+'perfcachedts' => '다음 자료는 캐시된 것으로, $1에 마지막으로 새로 고쳐졌습니다. 캐시에 최대 {{PLURAL:$4|결과 $4개}}가 있습니다.',
 'querypage-no-updates' => '이 문서의 새로 고침이 현재 비활성화되어 있습니다.
 이 문서의 자료를 잠시 동안 새로 고치지 않을 것입니다.',
 'viewsource' => '원본 보기',
@@ -781,9 +779,9 @@ $2',
 'welcomecreation-msg' => '계정이 만들어졌습니다.
 [[Special:Preferences|{{SITENAME}} 사용자 환경 설정]]을 바꿀 수 있습니다.',
 'yourname' => '사용자 이름:',
-'userlogin-yourname' => '사용자 이름',
-'userlogin-yourname-ph' => '사용자 이름을 입력하세요',
-'createacct-another-username-ph' => '사용자 이름을 입력하세요',
+'userlogin-yourname' => '사용자 계정 이름',
+'userlogin-yourname-ph' => '사용자 계정 이름을 입력하세요',
+'createacct-another-username-ph' => '사용자 계정 이름을 입력하세요',
 'yourpassword' => '비밀번호:',
 'userlogin-yourpassword' => '비밀번호',
 'userlogin-yourpassword-ph' => '비밀번호를 입력하세요',
@@ -812,10 +810,8 @@ $2',
 'createaccount' => '계정 만들기',
 'gotaccount' => '계정이 이미 있다면, $1.',
 'gotaccountlink' => '로그인하세요',
-'userlogin-resetlink' => '사용자 이름이나 비밀번호를 잊으셨나요?',
+'userlogin-resetlink' => '로그인 정보를 잊으셨나요?',
 'userlogin-resetpassword-link' => '비밀번호를 잊으셨나요?',
-'helplogin-url' => 'Help:로그인',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|로그인에 관한 도움말]]',
 'userlogin-loggedin' => '이미 $1로 로그인되어 있습니다. 아래의 양식을 사용하여 다른 계정으로 로그인하세요.',
 'userlogin-createanother' => '다른 계정 만들기',
 'createacct-join' => '아래에 정보를 입력하세요.',
@@ -833,12 +829,12 @@ $2',
 'createacct-imgcaptcha-ph' => '위에 보이는 텍스트를 입력하세요',
 'createacct-submit' => '계정 만들기',
 'createacct-another-submit' => '다른 계정 만들기',
-'createacct-benefit-heading' => '{{SITENAME}}(은)는 여러분과 같은 사람으로 이루어집니다.',
+'createacct-benefit-heading' => '{{SITENAME}} 프로젝트는 여러분과 같은 사람들이 만듭니다.',
 'createacct-benefit-body1' => '{{PLURAL:$1|편집}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|문서}}',
 'createacct-benefit-body3' => '최근 {{PLURAL:$1|기여자}}',
 'badretype' => '입력한 비밀번호가 일치하지 않습니다.',
-'userexists' => 'ì\9e\85ë ¥í\95\98ì\8b  ì\82¬ì\9a©ì\9e\90 ì\9d´ë¦\84ì\9d´ ì\9d´ë¯¸ ë\93±ë¡\9dë\90\98ì\96´ 있습니다.
+'userexists' => 'ì\9e\85ë ¥í\95\9c ì\82¬ì\9a©ì\9e\90 ê³\84ì \95 ì\9d´ë¦\84ì\9d´ ì\9d´ë¯¸ ì\82¬ì\9a©ë\90\98ê³  있습니다.
 다른 이름을 선택하세요.',
 'loginerror' => '로그인 오류',
 'createacct-error' => '계정 만들기 오류',
@@ -852,23 +848,23 @@ $2',
 쿠키 사용을 활성화한 다음 다시 시도하세요.',
 'nocookiesfornew' => '요청의 출처를 확인할 수 없기 때문에 사용자 계정이 만들어지지 않았습니다.
 쿠키를 허용한 것을 확인한 후에 이 문서를 새로 고치고 나서 다시 시도하세요.',
-'noname' => '사용자 이름이 올바르지 않습니다.',
+'noname' => '사용자 계정 이름이 올바르지 않습니다.',
 'loginsuccesstitle' => '로그인 성공',
 'loginsuccess' => "'''{{SITENAME}}에 \"\$1\" 계정으로 로그인했습니다.'''",
 'nosuchuser' => '"$1" 사용자가 존재하지 않습니다.
-사용자 이름은 대소문자를 구별합니다.
+사용자 계정 이름은 대소문자를 구별합니다.
 철자가 맞는지 확인해주세요. [[Special:UserLogin/signup|새 계정을 만들 수도 있습니다]].',
 'nosuchusershort' => '이름이 "$1"인 사용자는 없습니다.
 철자가 맞는지 확인하세요.',
-'nouserspecified' => '사용자 이름을 입력하지 않았습니다.',
+'nouserspecified' => '사용자 계정 이름을 입력하지 않았습니다.',
 'login-userblocked' => '이 사용자는 차단되었습니다. 로그인할 수 없습니다.',
 'wrongpassword' => '입력한 비밀번호가 잘못되었습니다.
 다시 시도하세요.',
 'wrongpasswordempty' => '비밀번호를 입력하지 않았습니다.
 다시 시도하세요.',
 'passwordtooshort' => '비밀번호는 {{PLURAL:$1|$1 글자}} 이상이어야 합니다.',
-'password-name-match' => '비밀번호는 사용자 이름과 반드시 달라야 합니다.',
-'password-login-forbidden' => '이 사용자 이름과 비밀번호는 사용할 수 없습니다.',
+'password-name-match' => '비밀번호는 사용자 계정 이름과 반드시 달라야 합니다.',
+'password-login-forbidden' => '이 사용자 계정 이름과 비밀번호는 사용할 수 없습니다.',
 'mailmypassword' => '비밀번호 재설정',
 'passwordremindertitle' => '{{SITENAME}}의 새 임시 비밀번호',
 'passwordremindertext' => '$1 IP 주소에서 누군가가 아마 자신이 {{SITENAME}} ($4)의 새 비밀번호를 요청했습니다.
@@ -906,7 +902,7 @@ $2',
 지금 로그인하여 비밀번호를 바꾸십시오.
 
 실수로 계정을 잘못 만들었다면 이 메시지는 무시해도 됩니다.',
-'usernamehasherror' => '사용자 이름에는 해시 문자가 들어갈 수 없습니다',
+'usernamehasherror' => '사용자 계정 이름에는 해시 문자가 들어갈 수 없습니다',
 'login-throttled' => '로그인에 연속으로 실패하였습니다.
 $1 기다렸다가 다시 시도하세요.',
 'login-abort-generic' => '로그인에 실패했습니다 - 중지됨',
@@ -914,6 +910,10 @@ $1 기다렸다가 다시 시도하세요.',
 'suspicious-userlogout' => '브라우저에 이상이 있거나 캐싱 프록시에서 로그아웃을 요청했기 때문에 로그아웃이 거부되었습니다.',
 'createacct-another-realname-tip' => '실명은 선택 사항입니다.
 실명을 입력하면 문서 기여에 사용자의 이름이 들어가게 됩니다.',
+'pt-login' => '로그인',
+'pt-login-button' => '로그인',
+'pt-createaccount' => '계정 만들기',
+'pt-userlogout' => '로그아웃',
 
 # Email sending
 'php-mail-error-unknown' => 'PHP의 mail() 함수에서 알 수 없는 오류가 발생했습니다.',
@@ -922,8 +922,7 @@ $1 기다렸다가 다시 시도하세요.',
 
 # Change password dialog
 'changepassword' => '비밀번호 바꾸기',
-'resetpass_announce' => '이메일로 받은 임시 비밀번호로 로그인했습니다.
-로그인을 마치려면 새 비밀번호를 여기에서 설정해야 합니다:',
+'resetpass_announce' => '로그인을 마치려면 새 비밀번호를 여기에서 설정해야 합니다:',
 'resetpass_text' => '<!-- 여기에 텍스트를 추가하세요 -->',
 'resetpass_header' => '비밀번호 바꾸기',
 'oldpassword' => '이전 비밀번호:',
@@ -931,16 +930,21 @@ $1 기다렸다가 다시 시도하세요.',
 'retypenew' => '새 비밀번호 재입력:',
 'resetpass_submit' => '비밀번호를 설정하고 로그인하기',
 'changepassword-success' => '비밀번호가 성공적으로 바뀌었습니다!',
-'changepassword-throttled' => '로그인에 연속으로 실패하였습니다.
-$1 기다렸다가 다시 시도하세요.',
+'changepassword-throttled' => '최근 너무 많이 로그인을 시도했습니다.
+$1 뒤에 다시 시도하세요.',
 'resetpass_forbidden' => '비밀번호를 바꿀 수 없습니다',
 'resetpass-no-info' => '이 특수 문서에 직접 접근하려면 반드시 로그인해야 합니다.',
 'resetpass-submit-loggedin' => '비밀번호 바꾸기',
 'resetpass-submit-cancel' => '취소',
 'resetpass-wrong-oldpass' => '비밀번호가 잘못되었거나 현재의 비밀번호와 같습니다.
 이미 비밀번호를 성공적으로 바꾸었거나 새 임시 비밀번호를 요청했을 수 있습니다.',
+'resetpass-recycled' => '현재 비밀번호와 다른 비밀번호로 재설정해주세요.',
+'resetpass-temp-emailed' => '임시 이메일 코드로 로그인되어 있습니다.
+로그인을 마치려면 여기서 새로운 비밀번호를 설정해야 합니다:',
 'resetpass-temp-password' => '임시 비밀번호:',
 'resetpass-abort-generic' => '비밀번호 바꾸기가 확장 기능에 의해 중단되었습니다.',
+'resetpass-expired' => '비밀번호가 만료되었습니다. 로그인하려면 새로운 비밀번호를 설정해야 합니다.',
+'resetpass-expired-soft' => '비밀번호가 만료되어 재설정해야 합니다. 지금 새로운 비밀번호를 선택하거나, "{{int:resetpass-submit-cancel}}"를 클릭하고 나중에 재설정해주세요.',
 
 # Special:PasswordReset
 'passwordreset' => '비밀번호 재설정',
@@ -949,7 +953,7 @@ $1 기다렸다가 다시 시도하세요.',
 'passwordreset-legend' => '비밀번호 재설정',
 'passwordreset-disabled' => '이 위키에서는 비밀번호를 재설정할 수 없습니다.',
 'passwordreset-emaildisabled' => '이 위키에서 이메일 기능이 비활성화되어 있습니다.',
-'passwordreset-username' => '사용자 이름:',
+'passwordreset-username' => '사용자 계정 이름:',
 'passwordreset-domain' => '도메인:',
 'passwordreset-capture' => '발송 결과 이메일을 보시겠습니까?',
 'passwordreset-capture-help' => '이 상자에 체크하면 이메일이 발송된 즉시 임시 비밀번호가 담긴 이메일을 볼 수 있습니다.',
@@ -1012,7 +1016,7 @@ $1 기다렸다가 다시 시도하세요.',
 'italic_sample' => '기울인 글씨',
 'italic_tip' => '기울인 글씨',
 'link_sample' => '링크 제목',
-'link_tip' => 'ë\82´ë¶\80 ê³ ë¦¬',
+'link_tip' => 'ì\95\88쪽 ë§\81í\81¬',
 'extlink_sample' => 'http://www.example.com 사이트 이름',
 'extlink_tip' => '바깥 링크 (주소 앞에 http://가 있어야 합니다)',
 'headline_sample' => '제목',
@@ -1192,7 +1196,7 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 'nocreatetext' => '{{SITENAME}}에서 새로운 문서를 만드는 것은 제한되어 있습니다.
 이미 존재하는 다른 문서를 편집하거나, [[Special:UserLogin|로그인하거나 계정을 만들]] 수 있습니다.',
 'nocreate-loggedin' => '새 문서를 만들 권한이 없습니다.',
-'sectioneditnotsupported-title' => '부분 편집 지원 안 됨',
+'sectioneditnotsupported-title' => '부분 편집이 지원되지 않음',
 'sectioneditnotsupported-text' => '이 문서에서는 문단 편집을 지원하지 않습니다.',
 'permissionserrors' => '권한 오류',
 'permissionserrorstext' => '해당 명령을 수행할 권한이 없습니다. 다음 {{PLURAL:$1|이유}}를 확인해보세요:',
@@ -1219,8 +1223,8 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 'content-not-allowed-here' => '"$1" 내용은 [[$2]] 문서예 허용하지 않습니다',
 'editwarning-warning' => '이 페이지에서 벗어나면 저장하지 않은 바뀜이 모두 사라집니다.
 로그인을 했다면, 환경 설정의 "{{int:편집 상자}}"에서 이 경고를 띄우지 않도록 설정할 수 있습니다.',
-'editpage-notsupportedcontentformat-title' => '지원하지 않는 컨텐츠 형식',
-'editpage-notsupportedcontentformat-text' => '컨텐츠 모델 $2 에서는 컨텐츠형식 $1을 지원하지 않습니다.',
+'editpage-notsupportedcontentformat-title' => '지원하지 않는 내용 형식',
+'editpage-notsupportedcontentformat-text' => '내용 형식 $1(은)는 $2 내용 모델에서 지원하지 않습니다.',
 
 # Content models
 'content-model-wikitext' => '위키텍스트',
@@ -1255,6 +1259,7 @@ $2개 보다 적게 {{PLURAL:$2|써야}} 하지만 {{PLURAL:$1|지금은 $1개
 편집 되돌리기를 완료하려면 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.',
 'undo-failure' => '중간의 다른 편집과 충돌하여 이 편집을 되돌릴 수 없습니다.',
 'undo-norev' => '문서가 없거나 삭제되었기 때문에 편집을 되돌릴 수 없습니다.',
+'undo-nochange' => '편집이 이미 되돌려진 것으로 나타납니다.',
 'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|토론]])의 $1판 편집을 되돌림',
 'undo-summary-username-hidden' => '숨겨진 사용자가 $1 판을 되돌림',
 
@@ -1339,15 +1344,13 @@ $2개 보다 적게 {{PLURAL:$2|써야}} 하지만 {{PLURAL:$1|지금은 $1개
 '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-legend' => '보이기 제한을 설정',
-'revdelete-hide-text' => 'í\8c\90 ë\82´ì\9a©',
+'revdelete-hide-text' => 'í\8c\90 ë¬¸ì\9e\90ì\97´',
 'revdelete-hide-image' => '파일을 숨기기',
 'revdelete-hide-name' => '명령 내용과 대상을 숨기기',
 'revdelete-hide-comment' => '편집 요약',
@@ -1468,7 +1471,7 @@ $1",
 'searchprofile-articles-tooltip' => '$1에서 검색',
 'searchprofile-project-tooltip' => '$1에서 검색',
 'searchprofile-images-tooltip' => '파일 검색',
-'searchprofile-everything-tooltip' => '모ë\93  ë¬¸ì\84\9c ê²\80ì\83\89\86 ë¡  ë¬¸ì\84\9c를 í\8f¬í\95¨)',
+'searchprofile-everything-tooltip' => '모ë\93  ë\82´ì\9a© (í\86 ë¡  ë¬¸ì\84\9c를 í\8f¬í\95¨) ê²\80ì\83\89',
 '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개}}',
@@ -1478,14 +1481,15 @@ $1",
 'search-file-match' => '(내용이 일치하는 파일 있음)',
 'search-suggest' => '$1 문서를 찾고 있으신가요?',
 'search-interwiki-caption' => '자매 프로젝트',
-'search-interwiki-default' => '$1 결과:',
+'search-interwiki-default' => '$1 로부터의 결과:',
 'search-interwiki-more' => '(더 보기)',
 'search-relatedarticle' => '관련',
 'searcheverything-enable' => '모든 이름공간에서 검색',
 'searchrelated' => '관련',
 'searchall' => '모두',
 'showingresults' => "'''$2'''번 부터의 {{PLURAL:$1|결과 '''1'''개|결과 '''$1'''개}}입니다.",
-'showingresultsnum' => "'''$2'''번 부터의 {{PLURAL:$3|결과 '''1'''개|결과 '''$3'''개}} 입니다.",
+'showingresultsinrange' => '#<strong>$2</strong>부터 #<strong>$3</strong>까지의 범위에서 <strong>$1</strong>개의 {{PLURAL:$1|결과}}가 아래에 보입니다.',
+'showingresultsnum' => "'''$2'''번 부터의 {{PLURAL:$3|결과 '''1'''개|결과 '''$3'''개}}입니다.",
 'showingresultsheader' => "'''$4''' 검색어에 대한 {{PLURAL:$5|결과 '''$3'''개 중 '''$1'''개|결과 '''$3'''개 중 '''$1 - $2'''번째}}",
 'search-nonefound' => '검색어와 일치하는 결과가 없습니다.',
 'powersearch-legend' => '고급 검색',
@@ -1544,7 +1548,7 @@ $1",
 'savedprefs' => '설정을 저장했습니다.',
 'timezonelegend' => '시간대:',
 'localtime' => '현지 시각:',
-'timezoneuseserverdefault' => '위키 기본 값($1)을 사용',
+'timezoneuseserverdefault' => '위키 기본값 사용 ($1)',
 'timezoneuseoffset' => '기타 (시차를 입력해주세요)',
 'servertime' => '서버 시각:',
 'guesstimezone' => '웹 브라우저 설정에서 가져오기',
@@ -1562,7 +1566,7 @@ $1",
 'prefs-searchoptions' => '검색',
 'prefs-namespaces' => '이름공간',
 'defaultns' => '다음 이름공간에서 검색:',
-'default' => '기본 값',
+'default' => '기본값',
 'prefs-files' => '파일',
 'prefs-custom-css' => '사용자 CSS',
 'prefs-custom-js' => '사용자 자바스크립트',
@@ -1586,7 +1590,7 @@ HTML 태그를 확인하세요.',
 'badsiglength' => '서명이 너무 깁니다.
 서명은 $1 {{PLURAL:$1|글자}}보다 짧아야 합니다.',
 'yourgender' => '어떤 성별로 표시되는 것을 선호합니까?',
-'gender-unknown' => '밝히고 싶지 않습니다.',
+'gender-unknown' => '밝히고 싶지 않습니다',
 'gender-male' => '위키 문서를 편집하는 남자입니다',
 'gender-female' => '위키 문서를 편집하는 여자입니다',
 'prefs-help-gender' => '이 항목은 선택 사항입니다.
@@ -1682,7 +1686,7 @@ HTML 태그를 확인하세요.',
 'right-move-subpages' => '문서와 하위 문서 이동하기',
 'right-move-rootuserpages' => '최상위 사용자 문서 이동',
 'right-movefile' => '파일 옮기기',
-'right-suppressredirect' => '문서 이동할 때 이전 이름으로 된 넘겨주기를 만들지 않기',
+'right-suppressredirect' => '문서을 옮길 때 원래 문서 이름으로 된 넘겨주기를 만들지 않기',
 'right-upload' => '파일 올리기',
 'right-reupload' => '이미 존재하는 파일을 다시 올리기',
 'right-reupload-own' => '자신이 이미 올린 파일 덮어쓰기',
@@ -1757,7 +1761,7 @@ HTML 태그를 확인하세요.',
 'action-createaccount' => '새 계정 만들기',
 'action-minoredit' => '이 편집을 사소한 편집으로 표시하기',
 'action-move' => '이 문서 옮기기',
-'action-move-subpages' => '하위 문서를 함께 옮길',
+'action-move-subpages' => '이 문서와 하위 문서를 함께 옮기기',
 'action-move-rootuserpages' => '최상위 사용자 문서를 이동할',
 'action-movefile' => '이 파일을 옮기기',
 'action-upload' => '이 파일을 올리기',
@@ -1799,7 +1803,7 @@ HTML 태그를 확인하세요.',
 'recentchanges-summary' => '위키의 최근 바뀜이 나와 있습니다.',
 'recentchanges-noresult' => '지정한 조건과 일치하는 주어진 기간 동안 바뀜이 없습니다.',
 'recentchanges-feed-description' => '위키의 최근 바뀜이 나와 있습니다.',
-'recentchanges-label-newpage' => '새 문서',
+'recentchanges-label-newpage' => '새로 만든 문서',
 'recentchanges-label-minor' => '사소한 편집',
 'recentchanges-label-bot' => '봇의 편집',
 'recentchanges-label-unpatrolled' => '아직 순찰하지 않은 편집',
@@ -1807,14 +1811,26 @@ HTML 태그를 확인하세요.',
 'recentchanges-legend-heading' => "'''범례:'''",
 'recentchanges-legend-newpage' => '([[Special:NewPages|새 문서 목록]]도 보세요)',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "다음은 '''$2'''에서부터 바뀐 문서 '''$1'''개입니다.",
+'rcnotefrom' => '다음은 <strong>$2</strong>에서부터 바뀐 문서 <strong>$1</strong>개입니다.',
 'rclistfrom' => '$1 이래로 새로 바뀐 문서 보기',
 'rcshowhideminor' => '사소한 편집을 $1',
+'rcshowhideminor-show' => '보이기',
+'rcshowhideminor-hide' => '숨기기',
 'rcshowhidebots' => '봇을 $1',
+'rcshowhidebots-show' => '보이기',
+'rcshowhidebots-hide' => '숨기기',
 'rcshowhideliu' => '등록된 사용자를 $1',
+'rcshowhideliu-show' => '보이기',
+'rcshowhideliu-hide' => '숨기기',
 'rcshowhideanons' => '익명 사용자를 $1',
+'rcshowhideanons-show' => '보이기',
+'rcshowhideanons-hide' => '숨기기',
 'rcshowhidepatr' => '순찰된 편집을 $1',
+'rcshowhidepatr-show' => '보이기',
+'rcshowhidepatr-hide' => '숨기기',
 'rcshowhidemine' => '내 편집을 $1',
+'rcshowhidemine-show' => '보이기',
+'rcshowhidemine-hide' => '숨기기',
 'rclinks' => '최근 $2일간의 $1개 바뀐 문서 보기<br />$3',
 'diff' => '비교',
 'hist' => '역사',
@@ -1946,6 +1962,8 @@ $2 {{PLURAL:$3|형식만 사용할 수 있습니다}}.',
 'uploaddisabledtext' => '파일 올리기 기능이 비활성화되어 있습니다.',
 'php-uploaddisabledtext' => 'PHP 파일 올리기가 비활성화되었습니다. 파일 올리기 설정을 확인하십시오.',
 'uploadscripted' => '이 파일에는 HTML이나 다른 스크립트 코드가 포함되어 있어, 웹 브라우저에서 오류를 일으킬 수 있습니다.',
+'uploadscriptednamespace' => "이 SVG 파일은 사용할 수 없는 이름공간 '$1'을 포함하고 있습니다.",
+'uploadinvalidxml' => '업로드된 파일의 XML의 구문을 분석할 수 없습니다.',
 'uploadvirus' => '파일이 바이러스를 포함하고 있습니다!
 자세한 설명: $1',
 'uploadjava' => '이 ZIP 파일은 자바의 .class 파일을 포함하고 있습니다.
@@ -2254,7 +2272,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'pageswithprop-legend' => '문서 속성이 있는 문서',
 'pageswithprop-text' => '이 문서는 특정 문서 속성을 사용한 문서를 나타냅니다.',
 'pageswithprop-prop' => '속성 이름:',
-'pageswithprop-submit' => '기',
+'pageswithprop-submit' => '기',
 'pageswithprop-prophidden-long' => '숨겨진 긴 텍스트 속성 값 ($1)',
 'pageswithprop-prophidden-binary' => '숨겨진 이진 속성 값 ($1)',
 
@@ -2323,10 +2341,20 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'deadendpagestext' => '{{SITENAME}} 내의 다른 문서로 나가는 링크가 없는 문서의 목록입니다.',
 'protectedpages' => '보호된 문서 목록',
 'protectedpages-indef' => '오른쪽 조건에 맞는 보호만 보기',
+'protectedpages-summary' => '이 문서는 현재 보호된 기존 문서를 나열합니다. 만들기 보호된 문서 제목 목록을 보려면 [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]를 참조하세요.',
 'protectedpages-cascade' => '연쇄적 보호만 보기',
-'protectedpages-noredirect' => '넘겨주기 숨김',
+'protectedpages-noredirect' => '넘겨주기를 숨기기',
 'protectedpagesempty' => '보호되어 있는 문서가 없습니다.',
+'protectedpages-timestamp' => '시간 기록',
+'protectedpages-page' => '문서',
+'protectedpages-expiry' => '만료 기한',
+'protectedpages-performer' => '사용자를 보호',
+'protectedpages-params' => '보호 매개변수',
+'protectedpages-reason' => '이유',
+'protectedpages-unknown-timestamp' => '알 수 없음',
+'protectedpages-unknown-performer' => '알 수 없는 사용자',
 'protectedtitles' => '만들기 보호된 표제어 목록',
+'protectedtitles-summary' => '이 문서는 현재 만들기 보호가 설정되어 있는 문서 제목을 나열합니다. 보호된 기존 문서들의 목록을 보려면 [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]을 참조하세요.',
 'protectedtitlesempty' => '해당 조건에 맞는 만들기 금지 표제어가 없습니다.',
 'listusers' => '사용자 목록',
 'listusers-editsonly' => '기여가 있는 사용자만 보기',
@@ -2469,7 +2497,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'nowikiemailtitle' => '이메일이 허용되지 않음',
 'nowikiemailtext' => '이 사용자는 다른 사용자로부터의 이메일을 받지 않도록 설정하였습니다.',
 'emailnotarget' => '없는 사용자를 받는 이로 지정하였거나 사용자 이름이 잘못되었습니다.',
-'emailtarget' => '수신자 사용자 이름 입력',
+'emailtarget' => '받는 사용자 이름 입력',
 'emailusername' => '사용자 이름:',
 'emailusernamesubmit' => '확인',
 'email-legend' => '{{SITENAME}}의 다른 사용자에게 이메일을 보내기',
@@ -2515,7 +2543,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'watchmethod-list' => '최근 편집을 확인하고자 주시된 문서 확인',
 'watchlistcontains' => '{{PLURAL:$1|문서 $1개}}를 주시하고 있습니다.',
 'iteminvalidname' => "'$1' 항목에 문제가 발생했습니다. 이름이 잘못되었습니다...",
-'wlnote2' => '아래는 $2, $3 기준으로 지난 {{PLURAL:$1|hour|<strong>$1</strong> 시간}} 동안의 바뀜입니다.',
+'wlnote2' => '아래는 $2, $3 기준으로 지난 {{PLURAL:$1|한 시간|<strong>$1</strong>시간}} 동안의 바뀜입니다.',
 'wlshowlast' => '최근 $1시간 $2일 또는 $3 동안에 바뀐 문서 보기',
 'watchlist-options' => '주시문서 목록 설정',
 
@@ -2604,7 +2632,7 @@ $UNWATCHURL
 'delete-warning-toobig' => '이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 있습니다.
 편집 역사가 긴 문서를 삭제하면 {{SITENAME}} 데이터베이스 동작에 큰 영향을 줄 수 있습니다.
 주의해 주세요.',
-'deleting-backlinks-warning' => "'''경고:''' 삭제하려는 문서가 다른 문서에 연결되거나 삽입되어 있습니다.",
+'deleting-backlinks-warning' => "'''경고:''' 삭제하려는 문서가 [[Special:WhatLinksHere/{{FULLPAGENAME}}다른 문서에 연결]]되거나 삽입되어 있습니다.",
 
 # Rollback
 'rollback' => '편집 되돌리기',
@@ -2785,8 +2813,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => '이 IP 주소는 현재 차단되어 있습니다.
 차단 기록은 다음과 같습니다:',
 'sp-contributions-search' => '기여 검색',
+'sp-contributions-suppresslog' => '삭제된 사용자 기여',
 'sp-contributions-username' => 'IP 주소 또는 사용자 이름:',
 'sp-contributions-toponly' => '최신판만 보기',
+'sp-contributions-newonly' => '새 글인 기여만 보기',
 'sp-contributions-submit' => '검색',
 'sp-contributions-explain' => '',
 
@@ -3101,6 +3131,8 @@ $2',
 'thumbnail_image-type' => '그림 형식이 지원되지 않습니다',
 'thumbnail_gd-library' => 'GD 라이브러리 설정이 잘못되었습니다: $1 함수를 찾을 수 없습니다.',
 'thumbnail_image-missing' => '파일을 찾을 수 없습니다: $1',
+'thumbnail_image-failure-limit' => '여기에 이 섬네일을 렌더하는 데 최근에 너무 많이 실패한 시도($1 이상)가 있습니다.
+나중에 다시 시도하세요.',
 
 # Special:Import
 'import' => '문서 가져오기',
@@ -3425,7 +3457,7 @@ $1',
 'hours' => '$1시간',
 'days' => '$1일',
 'weeks' => '$1주',
-'months' => '$1',
+'months' => '$1개월',
 'years' => '$1년',
 'ago' => '$1 전',
 'just-now' => '방금',
@@ -4013,7 +4045,7 @@ $5
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => '최근 $1{{PLURAL:$1|초}} 안에 바뀐 문서는 이 목록에서 빠졌을 수 있습니다.',
-'lag-warn-high' => 'ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ ì\84\9cë²\84ì\9d\98 ê³¼ë\8f\84í\95\9c ë¶\80í\95\98 ë\95\8c문ì\97\90 ìµ\9cê·¼ $1{{PLURAL:$1|ì´\88}} ì\95\88ì\97\90 ë°\94ë\80\90 ë¬¸ì\84\9c ëª©ë¡\9dì\9d\80 ë³´ì\97¬ì§\80지 않을 수 있습니다.',
+'lag-warn-high' => 'ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ ì\84\9cë²\84ì\9d\98 ê³¼ë\8f\84í\95\9c ë¶\80í\95\98 ë\95\8c문ì\97\90 ìµ\9cê·¼ $1{{PLURAL:$1|ì´\88}} ì\95\88ì\97\90 ë°\94ë\80\90 ë¬¸ì\84\9c ëª©ë¡\9dì\9d\80 ë³´ì\9d´지 않을 수 있습니다.',
 
 # Watchlist editor
 'watchlistedit-numitems' => '토론 문서를 제외하고 {{PLURAL:$1|문서 1개|문서 $1개}}를 주시하고 있습니다.',
@@ -4312,7 +4344,7 @@ $5
 'duration-hours' => '$1{{PLURAL:$1|시간}}',
 'duration-days' => '$1{{PLURAL:$1|일}}',
 'duration-weeks' => '$1{{PLURAL:$1|주}}',
-'duration-years' => '$1{{PLURAL:$1|년}}',
+'duration-years' => '$1',
 'duration-decades' => '$1{{PLURAL:$1|0년}}',
 'duration-centuries' => '$1{{PLURAL:$1|세기}}',
 'duration-millennia' => '$1{{PLURAL:$1|천년}}',
@@ -4353,7 +4385,4 @@ $5
 'expand_templates_generate_rawhtml' => '원본 HTML 보이기',
 'expand_templates_preview' => '미리 보기',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
-'uploadinvalidxml' => '업로드된 파일의 XML의 구문을 분석할 수 없습니다.',
 );
index aeffcb8..777ac81 100644 (file)
@@ -70,12 +70,12 @@ $messages = array(
 'dec' => 'дек',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Категория|Категория}}',
+'pagecategories' => '{{PLURAL:$1|1=Категория|Категория}}',
 'category_header' => '"$1" категорияын листбоккез',
 'subcategories' => 'Поснитжык категорияэз',
 'category-media-header' => '"$1" категорияись файллэз',
 'category-empty' => 'Этiя категорияын öнi нем абу',
-'hidden-categories' => '{{PLURAL:$1|Сайöвтöм категория|Сайöвтöм категорияэз}}',
+'hidden-categories' => '{{PLURAL:$1|1=Сайöвтöм категория|Сайöвтöм категорияэз}}',
 'hidden-category-category' => 'Сайöвтöм категорияэз',
 'category-subcat-count' => '{{PLURAL:$2|Этiя категорияын дзир öтiк субкатегория.|{{PLURAL:$1|Мыччалöма $1 субкатегория}}  $2-ись.}}',
 'category-subcat-count-limited' => 'Этiя категорияын {{PLURAL:$1|$1 субкатегория|$1 субкатегория|$1 субкатегория}}',
@@ -206,7 +206,7 @@ $messages = array(
 'yourname' => 'Уджкерисьлöн пыран ним:',
 'yourpassword' => 'Пароль:',
 'yourpasswordagain' => 'Мöдпöвсьöтны пароль',
-'remembermypassword' => 'Видзны менчим пыран ним этiя компьютер тöдвылын (не дыржык {{PLURAL:$1| лунся|лунся}})',
+'remembermypassword' => 'Видзны менчим пыран ним этiя компьютер тöдвылын (не дыржык {{PLURAL:$1|1= лунся|лунся}})',
 'login' => 'Пырны ним увтын',
 'nav-login-createaccount' => 'Пыран / гижöтчан',
 'userlogin' => 'Висьтасьны нето гижöтчыны',
@@ -274,12 +274,12 @@ $messages = array(
 'yourtext' => 'Текстыт',
 'yourdiff' => 'Неöткодьыс',
 'copyrightwarning' => "Тöд: текстас быдöс содтöттэз нето мöдкодьсьöтöммез  йöзöтсьöны лэдзöг $2 под вылын (видзöт $1). Он ко мöд,  медбы тексттэтö унаöтлiсö нето мöдкодьсьöтлiсö йöзыс,  эн и пукты нiйö татчö.   <br /> Этася тэ кыв сетан миянлö,  ачым пö лоа авторöн пыртан содтöттэзлiсь, нето босьта пö нiйö öшмöсiсь, кöда оз öв пытшкöссö одзлань йöзöтöмись да мöдкодьсьöтöмись.  <br /> '''ЭН ПУКТЫ ЮАСЬТÖГ ТАТЧÖ  АВТОРЛÖ ПОЗЬÖМ СЬÖРТI ДОРЙÖМ МАТЕРИАЛЛЭЗ!'''",
-'templatesused' => 'Этiя листбок вылiсь {{PLURAL:$1|шаблон|шаблоннэз}}:',
-'templatesusedpreview' => 'Одзвыв нёджалан листбок вылiсь {{PLURAL:$1|шаблон|шаблоннэз}}:',
+'templatesused' => 'Этiя листбок вылiсь {{PLURAL:$1|1=шаблон|шаблоннэз}}:',
+'templatesusedpreview' => 'Одзвыв нёджалан листбок вылiсь {{PLURAL:$1|1=шаблон|шаблоннэз}}:',
 'template-protected' => '(дорйöм)',
 'template-semiprotected' => '(мымдакö дорйöм)',
-'hiddencategories' => 'Этiя листбок пырö $1 {{PLURAL:$1|сайöвтöм категория|сайöвтöм категория|сайöвтöм категорияэз}} коласö:',
-'permissionserrorstext-withaction' => 'Тэныт оз позь керны $2 то {{PLURAL:$1|мыля|мыля}}:',
+'hiddencategories' => 'Этiя листбок пырö $1 {{PLURAL:$1|сайöвтöм категория|сайöвтöм категорияэз|сайöвтöм категория}} коласö:',
+'permissionserrorstext-withaction' => 'Тэныт оз позь керны $2 то {{PLURAL:$1|1=мыля|мыля}}:',
 
 # History pages
 'viewpagelogs' => 'Мыччавны журналлэз этiя листбок понда',
@@ -327,7 +327,7 @@ $messages = array(
 'searchprofile-everything' => 'Быдлаись',
 'searchprofile-articles-tooltip' => 'Кошшан $1ын',
 'searchprofile-project-tooltip' => 'Кошшан $1ын',
-'search-result-size' => '$1 ({{PLURAL:$2|1 кыв|$2 кыв}})',
+'search-result-size' => '$1 ({{PLURAL:$2|1=1 кыв|$2 кыв}})',
 'search-redirect' => '(иньдöтöм $1 вылiсь)',
 'search-section' => '(юкöт № $1)',
 'search-suggest' => 'Поди  колö $1',
@@ -361,7 +361,7 @@ $messages = array(
 'yourlanguage' => 'Кыв:',
 'yournick' => 'Виль кырымпас:',
 'badsiglength' => 'Кырымпасыт кузьöв.
-Сылö оз туй лоны $1 {{PLURAL:$1|шыпасся|шыпасся}} кузьжык.',
+Сылö оз туй лоны $1 {{PLURAL:$1|1=шыпасся|шыпасся}} кузьжык.',
 'gender-unknown' => 'Мыччавтöм',
 'gender-male' => 'Айка',
 'gender-female' => 'Инька',
@@ -427,7 +427,7 @@ $messages = array(
 'filehist-dimensions' => 'Ыжда',
 'filehist-comment' => 'Пасйöт',
 'imagelinks' => 'Файл дынö ыстöттэз',
-'linkstoimage' => '{{PLURAL:$1|Сэтшöм листбок|$1 Сэтшöм листбоккез}} ыстiсьö(ны) этiя файл вылö:',
+'linkstoimage' => '{{PLURAL:$1|1=Сэтшöм листбок|$1 Сэтшöм листбоккез}} ыстiсьö(ны) этiя файл вылö:',
 'sharedupload' => 'Этiя файл $1-ись да вермас овны и мöдiк проекттэзын',
 'uploadnewversion-linktext' => 'Кышавны этiя файллiсь виль версия',
 
@@ -443,7 +443,7 @@ $messages = array(
 'brokenredirects-delete' => 'чышкыны',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|байт|байт}}',
+'nbytes' => '$1 {{PLURAL:$1|1=байт|байт}}',
 'nmembers' => '$1 {{PLURAL:$1|объект|объект|объект}}',
 'prefixindex' => 'Листбок ниммезлiсь пондöтчаннэз мыччалан',
 'shortpages' => 'Дженыт листбоккез',
@@ -453,8 +453,8 @@ $messages = array(
 'ancientpages' => 'Медваж листбоккез',
 'move' => 'Вежны ним',
 'movethispage' => 'Вежны листбокыслiсь ним',
-'pager-newer-n' => '{{PLURAL:$1|вильжык 1|вильжык $1}}',
-'pager-older-n' => '{{PLURAL:$1|важжык 1|важжык $1}}',
+'pager-newer-n' => '{{PLURAL:$1|1=вильжык 1|вильжык $1}}',
+'pager-older-n' => '{{PLURAL:$1|1=важжык 1|важжык $1}}',
 
 # Book sources
 'booksources' => 'Небöггез-öшмöссэз',
@@ -531,7 +531,7 @@ $messages = array(
 'protect-text' => "Татöн тэ верман видзöтны да вежны '''$1''' листбок понда дорьян тшупöт.",
 'protect-locked-access' => "Уджкерисьлöн нимыт оз тырмы, мед вежны листбокыслiсь дорьян тшупöт.
 Öння лöсьöтаннэз '''$1''' листбок понда:",
-'protect-cascadeon' => 'Этiя листбокыс дорйöм, мыля сiя пыртöм улынжык висьталöм {{PLURAL:$1|листбокö|листбокö}}, кытчö лöсьöтöм каскад нёж дорьян.
+'protect-cascadeon' => 'Этiя листбокыс дорйöм, мыля сiя пыртöм улынжык висьталöм {{PLURAL:$1|1=листбокö|листбокö}}, кытчö лöсьöтöм каскад нёж дорьян.
 Тэ верман вежны этiя листбоклiсь дорьян тшупöт, но каскад нёж дорьян сысянь оз вежсьы.',
 'protect-default' => 'Дорйытöм',
 'protect-fallback' => 'Колö мед лэдзис «$1»',
index b6ae1bb..c113156 100644 (file)
@@ -273,7 +273,6 @@ $messages = array(
 'vector-action-protect' => 'Джакъла',
 'vector-action-undelete' => 'Къайтар',
 'vector-action-unprotect' => 'Джакълауну тюрлендир',
-'vector-simplesearch-preference' => 'Тынч излеуде болушлукъланы джандыр (къуру «Вектор» мотив ючюн)',
 'vector-view-create' => 'Къура',
 'vector-view-edit' => 'Тюрлендир',
 'vector-view-history' => 'Тарихин кёргюз',
@@ -543,8 +542,7 @@ $2',
 'gotaccountlink' => 'Системагъа кир',
 'userlogin-resetlink' => 'Кирир ючюн билгилеригизни унутхан этгенмисиз?',
 'userlogin-resetpassword-link' => 'Паролну джибериу',
-'helplogin-url' => 'Help:Кириу',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Системагъа кириуде болушлукъ]]',
+'userlogin-createanother' => 'Башха аккаунт къурау',
 'createacct-join' => 'Билгилеринги тюбюрекде джаз.',
 'createacct-emailrequired' => 'Электрон почтаны адреси',
 'createacct-emailoptional' => 'Электрон почтаны адреси (амалсыз тюлдю)',
@@ -557,6 +555,7 @@ $2',
 'createacct-captcha' => 'Къоркъуусузлукъну тинтиу',
 'createacct-imgcaptcha-ph' => 'Башыракъда кёрюннген текстни джаз',
 'createacct-submit' => 'Тергеу джазыуну къура',
+'createacct-another-submit' => 'Энтда бир аккаунт къурау',
 'createacct-benefit-heading' => '{{SITENAME}} сизнича адамла бла къуралгъанды.',
 'createacct-benefit-body1' => '{{PLURAL:$1|тюрлениу}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|бет}}',
@@ -621,6 +620,9 @@ $2',
 'login-abort-generic' => 'Системагъа кириу джетишимсиз болду',
 'loginlanguagelabel' => 'Тил: $1',
 'suspicious-userlogout' => 'Терс браузер неда кэш этиучу прокси берген соруугъа ушагъаны ючюн, Сизни чыгъаргъа сорууугъуз алынмагъанды.',
+'pt-login' => 'Кириу',
+'pt-createaccount' => 'Аккаунт къурау',
+'pt-userlogout' => 'Чыгъыу',
 
 # Email sending
 'php-mail-error-unknown' => "PHP's mail() функцияда белгили болмагъан халат",
@@ -982,8 +984,6 @@ $3 джанындан берилген сылтау: ''$2''",
 'revdelete-show-file-submit' => 'Хоу',
 'revdelete-selected' => "'''[[:$1]] бетни {{PLURAL:$2|1=Сайланнган версия|сайланнган версиялары}}:'''",
 'logdelete-selected' => "'''Журналны {{PLURAL:$1|1=Сайланнган джазыу|сайланнган джазыулары}}:'''",
-'revdelete-text' => "'''Кетерилге версияла бла болуула алкъын бетни тарихи бла журналлада кёрюннюкдю, алай а бир кесеги тюз кириучюледен джашырыллыкъды.'''
-{{SITENAME}} сайтдагъы башха администраторла джашырылгъан ичге кирирге эмда аны ызына салыргъа боллукъдула.",
 'revdelete-confirm' => 'Тилейбиз, буну этерге излегенигизни, эсеблерин ангылагъаныгъызны, эм буну [[{{MediaWiki:Policy-url}}|джорукълагъа]] кёре этгенигизни билдиригиз.',
 'revdelete-suppress-text' => "Джашырыу '''джангыз''' бу турумлада этиледи:
 * Келишмеген энчи информация
index 7911f3e..6e1eba9 100644 (file)
 
 $messages = array(
 # User preference toggles
-'tog-justify' => 'jostifai di paragraf-dem',
-'tog-hideminor' => 'Haid di lili chenj-dem na di risent chenj list',
-'tog-extendwatchlist' => 'Big di wachlist fo sho ol di chenj-dem,  pas di risent chenj-dem nomo',
+'tog-hideminor' => 'Haid dhi lili chenjdèm na dhi risent chenj list',
+'tog-extendwatchlist' => 'Big dhi wachlist fòrsho òll dhi chenjdèm,  pas dhi risènt chenjdèm nòmòr',
 
 # Dates
-'sunday' => 'Sonde',
-'monday' => 'Monde',
-'tuesday' => 'Tyuzde',
-'wednesday' => 'Wenzde',
-'thursday' => 'Tozde',
-'friday' => 'Fraide',
-'saturday' => 'Satide',
-'sun' => 'Son',
-'mon' => 'Mon',
-'tue' => 'Tyu',
-'wed' => 'Wen',
-'thu' => 'Toz',
-'fri' => 'Frai',
+'sunday' => 'Sandey',
+'monday' => 'Mundey',
+'tuesday' => 'Tyrdey',
+'wednesday' => 'Wodèndey',
+'thursday' => 'Thòrdey',
+'friday' => 'Freyadey',
+'saturday' => 'Satùrndey',
+'sun' => 'San',
+'mon' => 'Mun',
+'tue' => 'Tyr',
+'wed' => 'Wod',
+'thu' => 'T',
+'fri' => 'Fre',
 'sat' => 'Sat',
-'january' => 'Janyuari',
-'february' => 'Febyuari',
-'march' => 'Mach',
-'april' => 'Epril',
+'january' => 'Januari',
+'february' => 'Februari',
+'march' => 'March',
+'april' => 'April',
 'may_long' => 'Mey',
 'june' => 'Jun',
-'july' => 'Julai',
-'august' => 'Ogost',
-'september' => 'Septemba',
-'october' => 'Oktoba',
-'november' => 'Novemba',
-'december' => 'Disemba',
-'january-gen' => 'Janyuari',
-'february-gen' => 'Febyuari',
-'march-gen' => 'Mach',
-'april-gen' => 'Epril',
+'july' => 'Julay',
+'august' => 'Augùst',
+'september' => 'Sèptèmbar',
+'october' => 'Òktobar',
+'november' => 'Novèmbar',
+'december' => 'Dèsèmbar',
+'january-gen' => 'Januari',
+'february-gen' => 'Fèbruari',
+'march-gen' => 'March',
+'april-gen' => 'April',
 'may-gen' => 'Mey',
 'june-gen' => 'Jun',
-'july-gen' => 'Julai',
-'august-gen' => 'Ogost',
-'september-gen' => 'Septemba',
-'october-gen' => 'Oktoba',
-'november-gen' => 'Novemba',
-'december-gen' => 'Disemba',
+'july-gen' => 'Julay',
+'august-gen' => 'Augùst',
+'september-gen' => 'Sèptèmbar',
+'october-gen' => 'Òktobar',
+'november-gen' => 'Novèmbar',
+'december-gen' => 'Dèsèmbar',
 'jan' => 'Jan',
-'feb' => 'Feb',
-'mar' => 'Mach',
-'apr' => 'Epr',
+'feb' => 'Fèb',
+'mar' => 'Mar',
+'apr' => 'Apr',
 'may' => 'Mey',
 'jun' => 'Jun',
 'jul' => 'Jul',
-'aug' => 'Og',
-'sep' => 'Sep',
-'oct' => 'Okt',
+'aug' => 'Aug',
+'sep' => 'Sèp',
+'oct' => 'Òkt',
 'nov' => 'Nov',
-'dec' => 'Dis',
+'dec' => 'Dès',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Katigori|Katigori-dem}}',
-'category_header' => 'Pej-dehm we de na katigori "$1"',
-'subcategories' => 'Sobkatigori-dem',
-'category-media-header' => 'Midya we de na katigori "$1"',
-'category-empty' => "''Dis katigori-ya no get no pej o midya fo naw.''",
-'hidden-categories' => '{{PLURAL:$1|Katigori we dem don haid|Katigori-dem we dehm don haid}}',
+'pagecategories' => '{{PLURAL:$1|Katigori|Katigorim}}',
+'category_header' => 'Pejdèm we de na katègòri "$1"',
+'subcategories' => 'Ùndarkatègòridèm',
+'category-media-header' => 'Media na katègòri "$1"',
+'category-empty' => "''Dhis katègòri hyar nò gèt nò pej òr media fòr naw.''",
+'hidden-categories' => '{{PLURAL:$1|Katègòri dèndònhaid|Katègòridèm dèndònhaid}}',
 
 'cancel' => 'Kansul',
 'mytalk' => 'Mi Tok',
-'navigation' => 'Navigeshon',
+'navigation' => 'Navigatio',
 
 # Cologne Blue skin
-'qbedit' => 'Edit',
-'faq' => 'Kwestyon we dem de aks boku',
-'faqpage' => 'Project:Kwehstyohn-dehm we ohlman de aks',
+'qbedit' => 'Èdit',
+'faq' => 'Kwèstiòn dèndeaks bòku',
+'faqpage' => 'Projèkt:Kuèstiòndèm we òllman de ask',
 
 # Vector skin
 'vector-action-move' => 'Muf',
 'vector-view-edit' => 'Chenj',
-'vector-view-history' => 'Luk histri',
+'vector-view-history' => 'Luk historia',
 'vector-view-view' => 'Rid',
-'vector-view-viewsource' => 'Luk di sos',
-'actions' => 'Akshon-dem',
-'namespaces' => 'Nemspes-dem',
-
-'errorpagetitle' => 'Problem',
-'returnto' => 'Go bak tu $1.',
-'tagline' => 'Dis komot {{SITENAME}}',
-'help' => 'Hep',
-'search' => 'Luk fo',
-'searchbutton' => 'Luk fo',
+'vector-view-viewsource' => 'Luk dhi sòrs',
+'actions' => 'Actiòndèm',
+'namespaces' => 'Nemspasiodèm',
+
+'errorpagetitle' => 'Èrròr',
+'returnto' => 'Go bak $1.',
+'tagline' => 'Dhis kòmòt {{SITENAME}}',
+'help' => 'Hèp',
+'search' => 'Luk fòr',
+'searchbutton' => 'Luk fòr',
 'go' => 'Go',
 'searcharticle' => 'Go',
-'history' => 'Pej-im histri',
-'history_short' => 'Histri',
-'updatedmarker' => 'wetin dem don opdet from we A las vizit',
-'printableversion' => 'Vazhon fo Print',
-'permalink' => 'Pamanent link',
+'history' => 'Pejim historia',
+'history_short' => 'Historia',
+'updatedmarker' => 'wethin dèndònùpdat fròm we a las visit',
+'printableversion' => 'Printebul versiòn',
+'permalink' => 'Pèrmanènt link',
 'print' => 'Print',
-'edit' => 'Edit',
-'create' => 'Mek',
-'editthispage' => 'Edit dis pej-ya',
-'create-this-page' => 'Mek dis pej-ya',
-'delete' => 'Dilit',
-'deletethispage' => 'Dilit dis pej-ya',
-'protect' => 'Protekt',
+'edit' => 'Èdit',
+'create' => 'Kreat',
+'editthispage' => 'Èdit dhis pej',
+'create-this-page' => 'Mek dhis pej',
+'delete' => 'Dèlet',
+'deletethispage' => 'Dèlet dhis pej hyar',
+'protect' => 'Protèkt',
 'protect_change' => 'chenj',
-'protectthispage' => 'Protekt dis pej-ya',
-'talkpagelinktext' => 'Tok',
-'specialpage' => 'Speshal Pej',
-'personaltools' => 'Pasonal tul-dèm',
-'postcomment' => 'Nyu sekshon',
-'articlepage' => 'Luk kontent pej',
-'talk' => 'Diskoshon',
-'views' => 'Vyu-dem',
+'protectthispage' => 'Protèkt dhis pej',
+'talkpagelinktext' => 'Tòk',
+'specialpage' => 'Spèsial Pej',
+'personaltools' => 'Pèrsònal tuldèm',
+'postcomment' => 'Nyu sèktiòn',
+'articlepage' => 'Luk kòntènt pej',
+'talk' => 'Diskùssiòn',
+'views' => 'Vyum',
 'toolbox' => 'Tulboks',
-'userpage' => 'Luk dis yuza-im pej',
-'otherlanguages' => 'Na oda langwej-dem',
-'jumpto' => 'Jomp go:',
-'jumptonavigation' => 'navigeshon',
-'jumptosearch' => 'Luk fo',
+'userpage' => 'Luk dhis yuzmanim pej',
+'otherlanguages' => 'Na òdhar Tòkdèm',
+'jumpto' => 'Jùmp go:',
+'jumptonavigation' => 'Navigatio',
+'jumptosearch' => 'Luk fòr',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => 'Na bot {{SITENAME}}',
-'aboutpage' => 'Project:Na bot',
+'aboutsite' => 'Na bòt {{SITENAME}}',
+'aboutpage' => 'Project:Na bòt',
 'copyright' => 'Dis kontent de onda $1 .',
-'currentevents' => 'Korent ivent-dem',
-'currentevents-url' => 'Project:Korent ivent-dem',
-'disclaimers' => 'Disklema-dem',
-'disclaimerpage' => 'Project:Jeneral disklema',
-'edithelp' => 'Advais foh we yu wan fo edit',
-'helppage' => 'Help:Kontent-dem',
+'currentevents' => 'Kùrrènt evèntdèm',
+'currentevents-url' => 'Projèkt:Kùrrènt evèntdèm',
+'disclaimers' => 'Disklamardèm',
+'disclaimerpage' => 'Projèkt:Jènèral disklamar',
+'edithelp' => 'Èdithèp',
+'helppage' => 'Help:Kòntèntdèm',
 'mainpage' => 'Men Pej',
 'mainpage-description' => 'Men Pej',
-'policy-url' => 'Project:Polisi',
-'portal' => 'Mitin-ples fo yuza-dem',
-'portal-url' => 'Project:Mitin-ples fo yuza-dem',
-'privacy' => 'Polisi fo Praivesi',
-'privacypage' => 'Project:Polisi fo praivesi',
-
-'badaccess' => 'Pamishon problem',
-'badaccess-group0' => 'Yu no get pamishon foh du wetin yu jos chuz',
-'badaccess-groups' => 'Na di yuza-dem we don join {{PLURAL:$2|di grup|wan pa di grup-dem}}: $1 nomo ebul du wetin yu jos chuz.',
-
-'versionrequired' => 'Yu nid MediaWiki Vazhon $1',
-'versionrequiredtext' => 'Yu nid MediaWiki Vazhon $1 foh yuz dis pej-ya.
+'policy-url' => 'Project:Pòlisia',
+'portal' => 'Kòmmunitaspòrtal',
+'portal-url' => 'Project:Kòmmunitaspòrtal',
+'privacy' => 'Privasiapòlisia',
+'privacypage' => 'Project:Privasiapòlisia',
+
+'badaccess' => 'Permisshòn problèm',
+'badaccess-group0' => 'Yu nò gèt permisshòn fòdu wetin yu jùs chuz',
+'badaccess-groups' => 'Na dhi yuzmandèm we dònjoin {{PLURAL:$2|dhi grup|wan pan dhi grupdèm}}: $1 nòmòr ebul du wetin yu jùs chuz.',
+
+'versionrequired' => 'Yu nid MediaWiki Version $1',
+'versionrequiredtext' => 'Yu nid MediaWiki Versiòn $1 fòyuz dhis pej.
 Luk [[Special:Version|version page]].',
 
 'ok' => 'OK',
 'pagetitle-view-mainpage' => ' 
 {{SAITNEM}}',
-'retrievedfrom' => 'Dem ritriv am na"$1"',
-'youhavenewmessages' => 'Yu get $1 ($2).',
-'editsection' => 'edit',
-'editold' => 'chenj',
-'viewsourceold' => 'Luk di sos',
-'editlink' => 'edit',
-'viewsourcelink' => 'luk di sos',
-'editsectionhint' => 'edit sekshon: $1',
-'toc' => 'Kontent-dem',
+'retrievedfrom' => 'Dèndònritriv am na"$1"',
+'youhavenewmessages' => 'Yu gèt $1 ($2).',
+'editsection' => 'èdit',
+'editold' => 'èdit',
+'viewsourceold' => 'Luk dhi sòrs',
+'editlink' => 'èdit',
+'viewsourcelink' => 'luk dhi sòrs',
+'editsectionhint' => 'Èditsektiòn: $1',
+'toc' => 'Kòntèntdèm',
 'showtoc' => 'sho',
 'hidetoc' => 'haid',
-'thisisdeleted' => 'Luk wetin i bi naw o tohn am bak tu wetin i bin bi bifo $1?',
+'thisisdeleted' => 'Luk wetin i bi naw òr tùrn am bak tu wetin i binbi bifor $1?',
 'viewdeleted' => 'Luk am $1?',
-'restorelink' => '{{PLURAL:$1|wan chenj we dehm dohn ires|$1 chenj-dehm we dehm dohn ires}}',
-'feedlinks' => 'Feed:',
+'restorelink' => '{{PLURAL:$1|wan chenj we dèndònires|$1 chenjdèm we dèndònires}}',
+'feedlinks' => 'Fid:',
 'site-rss-feed' => '$1 RSS Fid',
 'site-atom-feed' => '$1 Atom Fid',
-'red-link-title' => '$1 (pej no de)',
+'red-link-title' => '$1 (pej nò de)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Pej',
-'nstab-user' => 'Yuza-im Pej',
-'nstab-media' => 'Midya Pej',
-'nstab-special' => 'Speshal Pej',
-'nstab-project' => 'Projekt Pej',
+'nstab-user' => 'Yuzmanim Pej',
+'nstab-media' => 'Media Pej',
+'nstab-special' => 'Speshial Pej',
+'nstab-project' => 'Projèkt Pej',
 'nstab-image' => 'Fail',
-'nstab-mediawiki' => 'Mesej',
-'nstab-template' => 'Templet',
-'nstab-help' => 'Advais pej',
-'nstab-category' => 'Katigori',
+'nstab-mediawiki' => 'Mèssej',
+'nstab-template' => 'Tèmplat',
+'nstab-help' => 'Hèppej',
+'nstab-category' => 'Katègòri',
 
 # Main script and global functions
-'nosuchaction' => 'Da kain akshon no de',
-'nosuchactiontext' => 'Di wiki no de ondastan di akshon we di URL tel am fo du',
-'nosuchspecialpage' => 'Da kain spehshal pej noh de',
+'nosuchaction' => 'Dha kain aktiòn nò de',
+'nosuchactiontext' => 'Dhi wiki nò de ùndarstan dhi aktiòn we dhi URL tèll am fòdu',
+'nosuchspecialpage' => 'Dha kain spèshial pej nò de',
 
 # General errors
-'viewsource' => 'Luk di sos',
+'viewsource' => 'Luk dhi sòrs',
 
 # Login and logout pages
-'yourname' => 'Yuzanem:',
-'login' => 'Login',
-'nav-login-createaccount' => 'Login / Mek yu-yon akaunt',
-'loginprompt' => 'Yu get fo de yuz kuki-dem foh ebul fo login {{SITENAME}}.',
-'userlogin' => 'Login / Mek yu-yon akaunt',
-'logout' => 'Komot na di sait',
-'userlogout' => 'Komot na di sait',
-'notloggedin' => 'Yu no login yet',
-'nologin' => "Yu don mek yu akaunt? '''$1'''.",
-'nologinlink' => 'Mek yu-yon akaunt',
-'createaccount' => 'Mek yu-yon akaunt',
-'gotaccount' => "Yu dohn mek yu yuza login? '''$1'''.",
-'gotaccountlink' => 'Login',
+'yourname' => 'Yuzmannem:',
+'login' => 'Lògin',
+'nav-login-createaccount' => 'Lògin / Mek yu yon akkaunt',
+'loginprompt' => 'Yu gèt fòde yuz kukidèm fòr ebul fòrlogin {{SITENAME}}.',
+'userlogin' => 'Lògin / Mek yu yon akkaunt',
+'logout' => 'Lòg-kòmòt',
+'userlogout' => 'Lòg-kòmòt',
+'notloggedin' => 'Yu nò lògin yet',
+'nologin' => "Yu dònmek yu akkaunt? '''$1'''.",
+'nologinlink' => 'Mek yu yon akkaunt',
+'createaccount' => 'Mek yu yon akkaunt',
+'gotaccount' => "Yu dònmek yu akkaunt? '''$1'''.",
+'gotaccountlink' => 'Lògin',
 'createaccountmail' => 'wit imel',
-'badretype' => 'Di paswohd-dehm we yu taip mach.',
-'userexists' => 'Oda pohsin de yuz da yuzanem de.
-Yu go geht fo pik difren wan.',
+'badretype' => 'Dhi passwòrddèm we yu taip nò mach.',
+'userexists' => 'Odhar pòrsin de yuz da yuzmannem.
+Yu gogèt fòrpik differènt wan.',
 
 # Edit pages
-'summary' => 'Somari:',
-'minoredit' => 'Dis na lili edit',
-'watchthis' => 'Wach dis pej-ya',
-'savearticle' => 'Sev dis pej-ya',
-'preview' => 'Privyu',
-'showpreview' => 'Luk di privyu',
-'showlivepreview' => 'Luk di laiv privyu',
-'showdiff' => 'Sho wetin don chenj',
-'anoneditwarning' => "'''Tek tem:''' Yu noh login yet.
-So dem go sev yu IP address na di pej-im editin histri",
-'missingsummary' => "'''Mehmba se:''' yu noh mek editin somari.
-If yu pres Sev bak, dem go sev yu edit nomo.",
-'missingcommenttext' => 'Rait yu koment onda ya',
+'summary' => 'Sùmmari:',
+'minoredit' => 'Dhis na lili èdit',
+'watchthis' => 'Wach dis pej',
+'savearticle' => 'Sev dis pej',
+'preview' => 'Prevyu',
+'showpreview' => 'Luk dhi prevyu',
+'showlivepreview' => 'Luk dhi laiv prevyu',
+'showdiff' => 'Sho wetin dònchenj',
+'anoneditwarning' => "'''Tek tèm o:''' Yu nò lògin yet.
+So dhèm go sev yu IP addrèss na dhi pejim èdithistoria",
+'missingsummary' => "'''Mèmbar se:''' yu nò mek èditsùmmari.
+If yu prèss sev bak, dhèm go sev yu èdit nòmor.",
+'missingcommenttext' => 'Rait yu kòmmènt ùndar hyar',
 'permissionserrorstext-withaction' => 'Yu no get pamishon fo $2, bikoz {{PLURAL:$1|rizin|rizin-dem}}:',
-'recreate-moveddeleted-warn' => "'''Tek tem!!: Yu de mek bak wan pej we dehm bin dohn ires.'''
+'recreate-moveddeleted-warn' => "'''Tek tèm o!!: Yu de mek bak wan pej we dhèm bin dòn ires.'''
 
-Yu sabi if yu foh wok pan dis pej-ya.
-Di log we dem kip foh dis pej-in dilishon de ya:",
+Yu sabi if yu fò work pan dhis pej ya.
+Dhi lòg we kip fòr dhis pejim delet de hyar:",
 'moveddeleted-notice' => 'Dehm dohn ires dis pej-ya.
 Di log we dehm kip foh dis pej-in dilishohn de ya:',
 'edit-hook-aborted' => 'Wan Hook don blok yu Edit.
@@ -247,6 +246,7 @@ I no eksplen wetin-mek.',
 Somtem dem don dilit am.',
 'edit-conflict' => 'Edit konflikt',
 'edit-no-change' => 'Wi no luk wetin yu chenj, bicoh yu no chenj wetin rait de.',
+'editwarning-warning' => 'If yu lèf dhis pej hyar sòmtèm yu go lòss òll dhi chenjdèm we yu dòn mek. If yu dòn lògin yu kin disebul dhis wòrnthin hyar na dhi "{{int:prefss-editing}}" sèkshòn na yu prèfèrèntiadèm',
 
 # History pages
 'last' => 'prev',
@@ -262,7 +262,6 @@ Somtem dem don dilit am.',
 
 # Diffs
 'editundo' => 'rivas wetin yu jos do',
-'diff-multi' => '({{PLURAL:$1|Wan intamidyet vazhon|$1 intamidyet vazhon-dem}} no de sho)',
 
 # Search results
 'searchresults' => 'Sach rizolt-dem',
@@ -423,7 +422,6 @@ Di [[Special:WhatLinksHere/$2|ful list]] de yah.',
 'tooltip-pt-preferences' => 'Yu prefrens-dem',
 'tooltip-pt-mycontris' => 'List ov yu kontribyushon-dem',
 'tooltip-pt-login' => 'I go bete if yu login, bot noto obligeshon',
-'tooltip-pt-anonlogin' => 'I go bete if yu login, bot noto obligeshon',
 'tooltip-pt-logout' => 'Log komot',
 'tooltip-ca-talk' => 'Diskoshon bot kontent pej',
 'tooltip-ca-edit' => 'Yu ebul fo edit dis pej-ya
index 263a6a0..f9219ee 100644 (file)
@@ -17,7 +17,6 @@
 $messages = array(
 # User preference toggles
 'tog-underline' => "Koritan ang dalum kang manga ''link'':",
-'tog-justify' => 'Tururupungun ang kilid kang manga paragraph',
 'tog-hideminor' => "Tagoon ang gagmay nga ''edit'' sa mga bag-o nga ilis",
 'tog-extendwatchlist' => "Palapadun ang ''watchlist'' agud nga mapakita ang tanan nga ginasogtan nga pag-ilis",
 'tog-numberheadings' => "Automatiko nga togroan kang nomero ang manga ''heading''",
@@ -28,7 +27,6 @@ $messages = array(
 'tog-watchmoves' => "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghalin ko",
 'tog-watchdeletion' => "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpamara ko",
 'tog-previewonfirst' => 'Ipakita ang preview sa ona nga ilis',
-'tog-nocache' => "Ontatun ang ''page caching''",
 'tog-enotifwatchlistpages' => 'Padarhan ako kang e-mail kon may nag-ilis kang pahina nga akun ginabantayan',
 'tog-enotifminoredits' => "Padarhan man ako kang ''e-mail'' tohay sa manga gagmay nga pag-ilis sa manga pahina",
 'tog-shownumberswatching' => "Ipakita ang karakuun kang manga ''user'' nga galantaw",
index 7a846a6..48a1ab3 100644 (file)
@@ -248,7 +248,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Scheck mer en Kopie, wann ich en <i lang="en">e-mail</i> an ene andere Metmaacher scheck',
 'tog-diffonly' => 'Zeich beim Versione Verjliche nur de Ungerscheide aan (ävver pack nit noch de janze Sigg dodronger)',
 'tog-showhiddencats' => 'Donn de verstoche Saachjroppe aanzeije',
-'tog-noconvertlink' => 'Don de Tittele nit ömwandelle',
 'tog-norollbackdiff' => 'Donn noh „{{int:Rollback}}“ de Ungerscheide nit aanzeije',
 'tog-useeditwarning' => 'Donn mesch warne, wann esch vun en Sigg fott jonn, ih dat esch all ming Änderunge avjeschpeischert hann.',
 'tog-prefershttps' => 'Jangk emmer övver en verschlößelte Verbendong bei Enlogge',
@@ -375,7 +374,6 @@ $messages = array(
 'vector-action-protect' => 'Schöze!',
 'vector-action-undelete' => 'Zerökholle!',
 'vector-action-unprotect' => 'Schoz ändere!',
-'vector-simplesearch-preference' => 'Donn et eijfachere Söke aanschallde (bloß mem Ußsinn „Vektor“ zesamme ze hann)',
 'vector-view-create' => 'Neu Schriive!',
 'vector-view-edit' => 'Ändere!',
 'vector-view-history' => 'Versione zeije!',
@@ -571,6 +569,7 @@ un doht em och de URL vun dä Sigg heh sage.',
 'cannotdelete-title' => 'Mer künne di Sigg „$1“ nit fott schmiiße.',
 'delete-hook-aborted' => 'Et Fottschmiiße wood affjebroche övver ene sujenannte „Hoke“ en de ẞoffwäer.
 Ene Jrond weße mer nit.',
+'no-null-revision' => 'Mer kunnte kein onveränderte neue Väsjohn vun dä Sigg „$1“ aanlääje.',
 'badtitle' => 'Verkihrte Üvverschreff',
 'badtitletext' => 'De Üvverschreff es esu nit en Odenung. Et muss jet dren stonn.
 Et künnt sin, dat ein vun de speziell Zeiche dren steiht,
@@ -623,7 +622,7 @@ Dä Wiki_Köbes dovun hät beim Deeschmaache als Jrond aanjejovve: „$3“',
 'invalidtitle-knownnamespace' => '„$3“ es ene onjöltijje Tittel för em Appachtemang „$2“',
 'invalidtitle-unknownnamespace' => '„$2“ es ene onjöltijje Tittel för e Appachtemang met dä verkehte Nommer $1.',
 'exception-nologin' => 'Nit enjelogg',
-'exception-nologin-text' => 'Heh di Sigg udder heh dä Opdraach jeiht blooß, wann De heh em Wiki enjelogg bes.',
+'exception-nologin-text' => 'Heh di Sigg udder heh dä Opdraach jeiht blooß, wann De heh [[Special:Userlogin|em Wiki enjelogg]] bes.',
 'exception-nologin-text-manual' => 'De mööds ald $1, öm heh di Sigg udder di Axjuhn zohjriife ze dörve.',
 
 # Virus scanner
@@ -672,9 +671,7 @@ Wann De wells, künnts De Ding [[Special:Preferences|Enschtällonge aanpaße]].'
 'gotaccountlink' => 'Enlogge',
 'userlogin-resetlink' => 'Häß De Ding Daate för et Enlogge verjäße?',
 'userlogin-resetpassword-link' => 'Paßwoot verjäße?',
-'helplogin-url' => 'Help:Övver et Enlogge',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hölp bem Enlogge]]',
-'userlogin-loggedin' => 'Do bes ald als {{GENDER:$1|Metmaacher|Metmaacherėn|Metmaacher|Metmaacherėn|Metmaacher}} [[User:$1]] enjelogg. Met heh dämm Fommolaa kanns De jäz onger enem andere Nahme enlogge.',
+'userlogin-loggedin' => 'Do bes ald als {{GENDER:$1|dä Metmaacher|de Metmaacherėn|dä Metmaacher|de Metmaacherėn|däMetmaacher}} [[User:$1|$1]] enjelogg. Met heh dämm Fommolaa kanns De jäz ävver onger enem andere Nahme enlogge.',
 'userlogin-createanother' => 'Donn ene zohsäzlejje Zohjang aanlääje',
 'createacct-join' => 'Jiv Ding Daate en:',
 'createacct-another-join' => 'Maach de nüüdeje Aanjaabe för dä neue Zohjaang.',
@@ -801,6 +798,9 @@ Et süht us, wi wann ene kappodde Brauser udder <i lang=\"en\">proxy</i>ẞööv
 'createacct-another-realname-tip' => 'Dä reschteje Nahme kam_mer fott lohße.
 
 Wann dä aanjejovve es, weet_e jebruch, öm öffentlesch de Schriiver för Beidrääsch ze nänne.',
+'pt-login' => 'Enlogge',
+'pt-createaccount' => 'Ene neue Zohjang aanmälde',
+'pt-userlogout' => 'Ußlogge',
 
 # Email sending
 'php-mail-error-unknown' => 'Nit bekannte Fähler met dä Funxjohn <code lang="en">mail()</code> vum PHP',
@@ -809,7 +809,7 @@ Wann dä aanjejovve es, weet_e jebruch, öm öffentlesch de Schriiver för Beidr
 
 # Change password dialog
 'changepassword' => 'Passwood *',
-'resetpass_announce' => 'De beß jez enjelogg med ennem Zweschepasswoot, wat De övver e-mail krääje häs. Dat kanns De nit einfar_esu behallde. Alsu donn jetz e neu Passwoot för op Duur aanjevve.',
+'resetpass_announce' => 'Do moß jäz e neu Paßwoot för op Duur aanjevve.',
 'resetpass_text' => '<!-- Donn der Täx hee dobei -->',
 'resetpass_header' => 'Neu Passwood faßlääje',
 'oldpassword' => 'Et ahle Passwood:',
@@ -817,6 +817,7 @@ Wann dä aanjejovve es, weet_e jebruch, öm öffentlesch de Schriiver för Beidr
 'retypenew' => 'Noch ens dat neue Passwood:',
 'resetpass_submit' => 'E neu Zweschepasswood övvermeddele un aanmellde',
 'changepassword-success' => 'Et Paßwood es jeändert.',
+'changepassword-throttled' => 'Do häs zoh öff versöhk, enzelogge. Waat $1 Ih dat De es widder probeers.',
 'resetpass_forbidden' => 'E Passwoot kann nit jeändert wääde.',
 'resetpass-no-info' => 'Do mööts ad enjelogg sin, öm tiräk op di Sigg jonn ze dörve',
 'resetpass-submit-loggedin' => 'Passwood tuusche',
@@ -824,8 +825,12 @@ Wann dä aanjejovve es, weet_e jebruch, öm öffentlesch de Schriiver för Beidr
 'resetpass-wrong-oldpass' => 'Dat Zweschepaßwood udder dat aktoälle Paßwood stemmp nit.
 Möjjelesch, Do häs Ding Paßwood ald jetuusch, künnt och sin,
 Do häs Der enzwesche e neu Zweschepaßwood jehollt.',
+'resetpass-recycled' => 'Donn för Ding neu Paßwoot jät anders aanjävve, wi Ding Paßwoot vun jäz.',
+'resetpass-temp-emailed' => 'Do beß jez enjelogg med ennem Zweschepasswoot, wat De övver e-mail krääje häs. Dat kanns De nit einfar_esu behallde. Alsu donn jetz e neu Passwoot för op Duur aanjevve.',
 'resetpass-temp-password' => 'Zweschepasswood:',
 'resetpass-abort-generic' => 'E Zohsazprojramm häd_et nit zohjelohße, et Paßwoot ze ändere.',
+'resetpass-expired' => 'Di Paßwood es afjeloufe. Donn jetz e neu Passwoot för et Enlogg faßlääje.',
+'resetpass-expired-soft' => 'Ding Paßwood es afjeloufe un moß neu jesaz wääde. Bes esu jood_un donn e neu Paßwoot ußsöhke, udder jangk op {{int:resetpass-submit-cancel}}, öm et schpääder ze säze.',
 
 # Special:PasswordReset
 'passwordreset' => 'Et Paßwoot zeröck säze',
@@ -882,9 +887,20 @@ Do moß Ding Paßwoot enjävve, öm Ding Änderong ze bschtäätejje.',
 'changeemail-password' => 'Ding Passwoot {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}}:',
 'changeemail-submit' => 'Lohß jonn!',
 'changeemail-cancel' => 'Ophüre',
+'changeemail-throttled' => 'Do häs zoh öff versöhk, enzelogge. Waat $1 Ih dat De es widder probeers.',
 
 # Special:ResetTokens
+'resettokens' => 'Neue Schlößel maache',
+'resettokens-text' => 'Do kanns neue Schlößel maache lohße för op beschtemmpte päsöhnlesche Daate uohjriife ze künne, di met Dingem Zohjang heh ze donn han.
+
+Donn dat op jeede Fall, wann se enem Andere bikannt jewoode sin, udder wann Dinge Zohjang jeknack woode es.',
+'resettokens-no-tokens' => 'Et sin kein Schlößele doh, för neu ze maache.',
+'resettokens-legend' => 'Neue Schlößel maache',
+'resettokens-tokens' => 'Schlößele:',
 'resettokens-token-label' => '$1 (Em Momang es et: $2)',
+'resettokens-watchlist-token' => 'ä schlößel för dä <i lang="en" xml:lang="en">Atom</i>- udder <i lang="en" xml:lang="en">RSS</i>-Kanaal met de [[Special:Watchlist|Änderonge aan Sigge en Dinger Oppaßleß]]',
+'resettokens-done' => 'Schlößel neu jemaat.',
+'resettokens-resetbutton' => 'Lohß Jonn!',
 
 # Edit page toolbar
 'bold_sample' => 'Fätte Schreff',
@@ -994,7 +1010,7 @@ zwesche de ungerscheidlichste IP Adresse wähßele, womöchlich ohne dat hä et
 Metmaacher bes, un fings, dat heh Saache an Dich jeschrevve wääde, wo Do jar nix met am Hot häs, dann bes Do
 wahrscheinlich och nit jemeint. Denk villeich ens drüvver noh, datte Dich [[Special:UserLogin/signup|anmelde]] deis,
 domet De dann donoh nit mieh met esu en Ömständ ze dun häs, wie de andere namenlose Metmaacher heh. Wann de aanjemelldt bes un deis [[Special:UserLogin|enlogge]], dann kam_mer Desch och fun alle andere Metmaacher ongerschejde.</i>',
-'noarticletext' => '<span class="plainlinks">Em Momang es keine Tex op dä Sigg. Jangk en de Texte vun ander Sigge [[Special:Search/{{PAGENAME}}|noh däm Titel söke]], odder [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} donn en de Logböcher donoh loore], oder [{{FULLURL:{{FULLPAGENAME}}|action=edit}} fang die Sigg aan] ze schrieve, oder jangk zeröck wo de her koms. Do hät Dinge Brauser ene Knopp för.</span>',
+'noarticletext' => '<span class="plainlinks">Em Momang es keine Täx op heh dä Sigg. Jangk en de Täxte vun ander Sigge [[Special:Search/{{PAGENAME}}|noh däm Titel söhke]], udder [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} donn en de Logböscher donoh loore], udder [{{FULLURL:{{FULLPAGENAME}}|action=edit}} fang di Sigg aan] ze schrieve, udder jangk zeröck woh De heer kohms. Do hät Dinge Brauser ene Knopp för.</span>',
 'noarticletext-nopermission' => 'Op dä Sigg es em Momang nix drop.
 Do kanns noh däm Tittel vun heh dä Sigg [[Special:Search/{{PAGENAME}}|em Tex op ander Sigge söhke]],
 udder en dä zopaß <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Logbööscher nohloore]</span>.',
@@ -1137,6 +1153,8 @@ Ene Jrond weße mer nit.',
 'content-not-allowed-here' => 'Ene Enhalld vun dä Zoot „$1“ es op dä Sigg „[[$2]]“ nit zohjelohße.',
 'editwarning-warning' => 'Wann de vun hee dä Sigg fott jeihß, doh künnte all Ding Änderonge aan dä Sigg verschött jonn.
 Do kanns heh di Warnung affschallde, wann de aanjemelldt un enjelogg bes, dann kriß de se nieh mieh wider. Jangk doför en dä Afschnett „{{int:prefs-editing}}“ en Dinge Enschtellonge.',
+'editpage-notsupportedcontentformat-title' => 'Dat Fommat vun enem Enhalld künne mer nit.',
+'editpage-notsupportedcontentformat-text' => 'Dat Fommat $1 vun enem Enhalld künne mer nit mem Modäll $2.',
 
 # Content models
 'content-model-wikitext' => 'Wikitäx',
@@ -1168,6 +1186,7 @@ Do kanns heh di Warnung affschallde, wann de aanjemelldt un enjelogg bes, dann k
 'undo-success' => 'De Änderung könnte mer zeröck nämme. Beloor Der de Ungerscheid un dann donn di Sigg avspeichere, wann De dengks, et es en Oodenung esu.',
 'undo-failure' => 'Dat kunnt mer nit zeröck nämme, dä Afschnedd wood enzwesche ald widder beärbeidt.',
 'undo-norev' => "Do ka'mer nix zeröck nämme. Di Version jidd_et nit, odder se es verstoche odder fottjeschmesse woode.",
+'undo-nochange' => 'Di Änderong schingk ald retuur jemaat woode ze sin.',
 'undo-summary' => 'De Änderung $1 fum [[Special:Contributions/$2|$2]] ([[User talk:$2|Klaaf]]) zeröck jenomme.',
 'undo-summary-username-hidden' => 'Nemm di Väsjohn $1 vun enem verschtoche Metmaacher widder retuur.',
 
@@ -1176,6 +1195,10 @@ Do kanns heh di Warnung affschallde, wann de aanjemelldt un enjelogg bes, dann k
 'cantcreateaccount-text' => "Dä [[User:$3|$3]] hät verbodde, dat mer sich vun dä IP-Adress '''$1''' uß als ene neue Metmaacher aanmelde könne soll.
 
 Als Jrund för et Sperre es enjedraare: ''$2''",
+'cantcreateaccount-range-text' => 'Ne neue Metmacher aanmälde vun <i lang="en" xml:lang="en">IP</i>-Adräße em Berett vun <strong>$1</strong>, woh de Dinge dren es, wood vum {{GENDER:$3|vum|vum|vumm Metmaacher|vun dä|vum}} [[User:$3|$3]] verbodde.
+Der Jrond: <em><$2</em>
+
+Ding <i lang="en" xml:lang="en">IP</i>-Adräß es: <strong>$4</strong>',
 
 # History pages
 'viewpagelogs' => 'De Logböcher för heh di Sigg beloore',
@@ -1255,20 +1278,17 @@ Als ene Wiki_Köbes kanns De de Ungerscheide ävver aankike wann De wells.",
 'revdelete-show-file-submit' => 'Lohß Jonn!',
 'revdelete-selected' => "'''{{PLURAL:$2|Ein usjewählte Version|$2 usjewählte Versione|Kein Version usjewählt}} vun [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Dä ußjewählte Logboch-Endrach|De Ußjewählte Logboch-Endrähsch}}:'''",
-'revdelete-text' => "'''Dä fottjeschmesse Sigge ehre Enhald kanns De nit mieh aanluure. Se blieve ävver en de Liss met de Versione un en de Logböcher dren.'''
-Ene Wiki Köbes kann de fottjeschmessene Krom immer noch aanluere un kann en och widder herholle, usser wann bei
-dem Wiki singe Installation dat anders fassjelaht woode es.",
 'revdelete-confirm' => 'Bes esu joot un doon dat beschtääteje, un donn domet ongerschriive, dat De dat donn wells, dat De weiß, wat dobei eruß kütt, un dat De dat och noh de [[{{MediaWiki:Policy-url}}|Rääjelle]] deihß.',
 'revdelete-suppress-text' => "Dat sullt '''blooß''' jedonn wäde för:
 * onjesäzlesche Aanjaabe
 * unjenehmesch persöhnlesch Daate
 *: ''Aanschreffte, Tellefoon- un ander Nummere, <span lang=\"en\" xml:lang=\"en\">e-mail</span> Adräß, uew.''",
 'revdelete-legend' => 'Dä öffentlije Zojang enschränke',
-'revdelete-hide-text' => 'Dä Tex vun dä Version versteiche',
+'revdelete-hide-text' => 'dä Täx vun dä Väsjohn',
 'revdelete-hide-image' => 'De Enhallt vun däm Beld versteiche',
 'revdelete-hide-name' => 'Der Förjang, un och der Enndraach uss_em Logboch, versteiche',
-'revdelete-hide-comment' => 'Dä Enhald vun „Koot Zosammejefass, Quell“ ußblände',
-'revdelete-hide-user' => 'Däm Bearbeider sing IP Adress oder Metmaacher Name versteiche',
+'revdelete-hide-comment' => 'dä Enhald vun „Koot Zosammejefass, Quell“',
+'revdelete-hide-user' => 'däm Bearbeider sing <i lang="en" xml:lang="en"IP</i>-Adress oder Metmaacher-Name',
 'revdelete-hide-restricted' => 'Dun dat och för de Wiki-Köbesse esu maache wie för jede Andere',
 'revdelete-radio-same' => '(lohß wi_t eß)',
 'revdelete-radio-set' => 'Jo',
@@ -1346,6 +1366,8 @@ Donn de Version makeere bes wohen (inklusive) dat övverdraare wäde sull. Donn
 'showhideselectedversions' => 'De ußjewählte Versione aanzeije udder vershteiche',
 'editundo' => 'De letzte Änderung zeröck nämme',
 'diff-empty' => '(Keine Ongerscheid)',
+'diff-multi-sameuser' => '(Mer don hee {{PLURAL:$1|eij Väsjohn|$1 Väsjohne|keij Väsjohn}} dozwesche nit zeije.   Se {{PLURAL:$1|es|sin|wöhr}} vum sällve Metmaacher)',
+'diff-multi-otherusers' => '(Mer don hee {{PLURAL:$1|eij Väsjohn|$1 Väsjohne|keij Väsjohn}} dozwesche vun {{PLURAL:$2|einem|$2 ongerscheidlijje|keinem}} Metmaacher nit zeije)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Ein Version|$1 Versione|kei Version}} dozwesche vun mieh wi {{PLURAL:$2|einem Metmaacher|$2 Metmaachere|keinem Metmaacher}} wääde nit jezeish)',
 'difference-missing-revision' => '{{PLURAL:$2|Ein Version|$2 Versione}} vun heh däm Verjlisch zwesche Versione ($1) {{PLURAL:$2|hammer}} nit jefonge.
 
@@ -1366,7 +1388,8 @@ Mieh doh drövver fengk mer em [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAG
 'shown-title' => 'Zeisch {{PLURAL:$1|ein|$1|nix}} pro Sigg',
 'viewprevnext' => 'Bläddere: ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "*Sigg '''[[$1]]'''",
-'searchmenu-new' => "'''Donn de Sigg „[[:$1|$1]]“ hee em Wiki aanlääje'''",
+'searchmenu-new' => '<strong>Donn de Sigg „[[:$1|$1]]“ hee em Wiki aanlääje.</strong>
+{{PLURAL:$2|Beloor Der ävver och die Sigg, di beim Söhke jefonge wood.|Beloor Der ävver och die Sigge, di beim Söhke jefonge woode sin.|}}',
 'searchprofile-articles' => 'Sigge vum Enhalt',
 'searchprofile-project' => 'Hülp- ov Projäk-Sigge',
 'searchprofile-images' => 'Dateie met Medije',
@@ -1382,6 +1405,7 @@ Mieh doh drövver fengk mer em [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAG
 'search-result-score' => 'Jeweesch: $1%',
 'search-redirect' => '(Ömleitung $1)',
 'search-section' => '(Avschnett $1)',
+'search-file-match' => '(en dä Dattei dren)',
 'search-suggest' => 'Häß De „$1“ jemeint?',
 'search-interwiki-caption' => 'Schwesterprojekte',
 'search-interwiki-default' => '$1 hät heh di Träffer jefonge:',
@@ -1391,6 +1415,7 @@ Mieh doh drövver fengk mer em [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAG
 'searchrelated' => 'ähnlesch',
 'searchall' => 'all',
 'showingresults' => 'Onge {{PLURAL:$1|weed <strong>eine</strong>|wääde bes <strong>$1</strong>|weed <strong>keine</strong>}} vun de jefonge Endrähsch jezeisch, vun de Nommer <strong>$2</strong> av.',
+'showingresultsinrange' => '{{PLURAL:$1|<strong>Ein</strong> Saachjropp|<strong>$1</strong> Saachjroppe|Kein Saachjropp}}, vun Nommer <strong>$2</strong> bes Nommer <strong>$3</strong> {{PLURAL:$1|weed|wääde|weed}} heh opjeleß.',
 'showingresultsnum' => 'Onge {{PLURAL:$3|es ein|sin <strong>$3</strong>|sin <strong>kein</strong>}} vun de jefonge Endrähsch opjeleß, vun de Nommer <strong>$2</strong> av.',
 'showingresultsheader' => "Jefonge un aanjezeisch: {{PLURAL:$5|'''$1''' vun '''$3'''|'''$1''' beß '''$2''' vun '''$3'''|nix}} för '''$4'''",
 'search-nonefound' => 'Mer han nix zopaß jefonge för Ding Aanfrohch.',
@@ -1450,6 +1475,9 @@ dat dänne ehr Daate topaktoell sin,
 'recentchangesdays-max' => '(Nit mieh wie {{PLURAL:$1|eine Daach|$1 Dääsh|keine Daach}})',
 'recentchangescount' => 'Aanzahl Änderunge en de Leß, als Shtandad:',
 'prefs-help-recentchangescount' => 'Dat ömfaß de „{{int:recentchanges}}“, de Versione uß de Fojangeheit, un de Logbööcher.',
+'prefs-help-watchlist-token2' => 'Dat heh es dä jeheime Schlößel för dä <i lang="en" xml:lang="en">Atom</i>- udder <i lang="en" xml:lang="en">RSS</i>-Kanaal met de Änderonge aan Sigge en Dinger Oppaßleß
+Wä dä kännt, kann Ding Oppaßleß lässe, alsu halld_en för Desch.
+Do kann Der [[Special:ResetTokens|ene neue Schlößel maache lohße]], wann nüüdesch.',
 'savedprefs' => 'Ding Enstellunge sin jetz jesechert.',
 'timezonelegend' => 'Ziggzohn:',
 'localtime' => 'De Zigg op Dingem Kompjuter:',
@@ -1517,8 +1545,10 @@ dat dänne ehr Daate topaktoell sin,
 'prefs-displayrc' => 'Ußwahle för et Leßte Aanzeje',
 'prefs-displaysearchoptions' => 'Enstellunge för et Aanzeje',
 'prefs-displaywatchlist' => 'Enstellunge för et Aanzeje',
+'prefs-tokenwatchlist' => 'Schlößel',
 'prefs-diffs' => 'Ongerscheide un Verjliische',
 'prefs-help-prefershttps' => 'Di Enschtällong kütt eets zom drahre, wann De nähksde Mohl enloggs.',
+'prefs-tabs-navigation-hint' => 'Opjepaß: Met dä Piel-Knöppe kanns de noh rääds un lenks op de Rigger jonn un se ußsöhke.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'De Addräß fö de <i lang="en">e-mail</i> schingk en Odenung',
@@ -1546,7 +1576,8 @@ dat dänne ehr Daate topaktoell sin,
 'userrights-changeable-col' => '{{PLURAL:$1:Di Jropp|Jroppe|kein Jropp doh}}, di De ändere kanns',
 'userrights-unchangeable-col' => '{{PLURAL:$1:Di Jropp|Jroppe|kein Jropp doh}}, di De nit ändere kanns',
 'userrights-irreversible-marker' => '$1 *',
-'userrights-conflict' => 'Ene Andere hät di Rääschde ald verändert. Loor, wad_eruß kohm un versöhg_et norr-ens, wann nüüdesch.',
+'userrights-conflict' => 'Ene Andere hät di Rääschde ald verändert. Loor, wad_eruß kohm un versöhg_et norr_ens, wann nüüdesch.',
+'userrights-removed-self' => 'Do häs Dng Rääsch dohzoh jraad drannjejovve, dröm kanns De heh di Sigg nit mieh oproofe.',
 
 # Groups
 'group' => 'Jrupp:',
@@ -1711,11 +1742,23 @@ dat dänne ehr Daate topaktoell sin,
 'rcnotefrom' => 'Hee {{PLURAL:$1|es ein|sin bes op <strong>$1</strong>|es keine}} fun de Änderunge zick dem <strong>$3</strong> öm <strong>$4</strong> Uhr opjelėß.',
 'rclistfrom' => 'Zeich de Änderunge vum $1 aan',
 'rcshowhideminor' => '$1 klein Mini-Änderunge',
+'rcshowhideminor-show' => 'Zeisch',
+'rcshowhideminor-hide' => 'Verschteihsch',
 'rcshowhidebots' => '$1 de Bots ehr Änderunge',
+'rcshowhidebots-show' => 'Zeisch',
+'rcshowhidebots-hide' => 'Verschteihsch',
 'rcshowhideliu' => 'De aanjemeldte Metmaacher ehr Änderunge: $1',
+'rcshowhideliu-show' => 'Zeisch',
+'rcshowhideliu-hide' => 'Verschteihsch',
 'rcshowhideanons' => '$1 de namenlose Metmaacher ehr Änderunge',
+'rcshowhideanons-show' => 'Zeisch',
+'rcshowhideanons-hide' => 'Verschteihsch',
 'rcshowhidepatr' => '$1 de nohjeluurte Änderunge',
+'rcshowhidepatr-show' => 'Zeisch',
+'rcshowhidepatr-hide' => 'Verschteihsch',
 'rcshowhidemine' => '$1 ming eije Änderunge',
+'rcshowhidemine-show' => 'Zeisch',
+'rcshowhidemine-hide' => 'Verschteihsch',
 'rclinks' => 'Zeich de letzte {{int:pipe-separator}}$1{{int:pipe-separator}} Änderunge us de letzte {{int:pipe-separator}}$2{{int:pipe-separator}} Däch, un dun {{int:pipe-separator}}$3',
 'diff' => 'Ungerscheid',
 'hist' => 'Versione',
@@ -1844,6 +1887,7 @@ Jangk zeröck un lad Ding Datei unger enem andere Name huh,
 wann De se noch han wells.',
 'file-exists-duplicate' => 'Di Dattei hät dersellve Enhallt wi hee di {{PLURAL:$1|Datei|Dateie|}}:',
 'file-deleted-duplicate' => 'En Datei mem sellve Enhallt wi „[[:$1]]“ es ens fottjeschmeße woode. Donn dä Zosammehang em „{{int:dellogpage}}“ nokike, ih dat De se widder huhläds.',
+'file-deleted-duplicate-notitle' => 'En Datei mem sellve Enhallt wi di heh es ens fottjeschmeße woode, un dä iehre Tettel es verschtoche. Donn en däm Zosammehang eine froore, dä fottjeschmeße un verstoche Datteije beloore kann, ih dat De se widder huhläds.',
 'uploadwarning' => 'Warnung beim Huhlade',
 'uploadwarning-text' => 'Donn onge dä Täx övver di Dattei ändere, un versöhg_et norr_ens.',
 'savefile' => 'Datei avspeichere',
@@ -1856,6 +1900,8 @@ wann De se noch han wells.',
 'php-uploaddisabledtext' => 'Et Dateie Huhlade es en PHP affjeschalldt.
 Bes esu joot un donn noh de Enshtellung <i lang="en">file_uploads</i> loore.',
 'uploadscripted' => 'En dä Datei es HTML dren oder Code vun enem Skripp, dä künnt Dinge Brauser en do verkihrte Hals krije un usführe.',
+'uploadscriptednamespace' => 'De aanjejovve <i lang="en" xml:lang="en">SVG</i>-Dattei benöds dä verbodde Nahme-Roum „$1“',
+'uploadinvalidxml' => 'Dat <i lang="en" xml:lang="en">XML</i> en dä huh jelaade Dattei kunnt wohr nit en Oodenong beim Ongersöhke.',
 'uploadvirus' => 'Esu ene Dress:
 <br />
 En dä Datei stich e Kompjutervirus!
@@ -2166,7 +2212,7 @@ All de Sigge em Wiki, och Klaafsigge, Ömleitunge, un esu jet',
 'statistics-views-peredit' => 'Sigge affjeroofe, pro Änderung',
 'statistics-users' => '[[Special:ListUsers|Metmaacher]] aajemelldt',
 'statistics-users-active' => 'Aktive Metmaacher',
-'statistics-users-active-desc' => 'Metmaacher, die {{PLURAL:$1|hück un jesterre|en de läzte $1 Dääsh|hück}} jät jemaat han.',
+'statistics-users-active-desc' => 'Aktiv sin Metmaacher, di {{PLURAL:$1|hück un jesterre|en de läzte $1 Dääsch|hück}} jät jemaat han.',
 'statistics-mostpopular' => 'De miets affjeroofe Sigge',
 
 'pageswithprop' => 'Sigge med en beschtemmpte Eijeschaff',
@@ -2203,6 +2249,7 @@ Tipp: Merk Der dä Tittel vun dä Sigg dovör.',
 'ninterwikis' => '{{PLURAL:$1|Eine Engerwikilengk|$1 Engerwikilengks|Keine Engerwikilengk}}',
 'nlinks' => '{{PLURAL:$1|eine Link|$1 Links}}',
 'nmembers' => 'met {{PLURAL:$1|ein Sigg|$1 Sigge}} dren',
+'nmemberschanged' => 'met&nbsp;$1&nbsp;→&nbsp;{{PLURAL:$2|eine Sigg|$2&nbsp;Sigge|keine Sigg}}',
 'nrevisions' => '{{PLURAL:$1|Ein Änderung|$1 Änderunge|Keij Änderung}}',
 'nviews' => '{{PLURAL:$1|Eine Avrof|$1 Avrofe|Keine Avrof}}',
 'nimagelinks' => 'Weed op {{PLURAL:$1|eine Sigg|$1 Sigge|keine Sigg}} jebruch',
@@ -2238,16 +2285,27 @@ Di sin dann <del>dorschjeschtresche</del>.',
 'mostrevisions' => 'Atikkele met de miehste Änderunge',
 'prefixindex' => 'All Sigge, dänne ehr Name met enem bestemmte Wood oder Tex aanfängk',
 'prefixindex-namespace' => 'All Sigge med enem beschtemmpte Aanfang (Appachtemang $1 )',
+'prefixindex-strip' => 'Donn der jemeinsamme Aanfang vun dä Tetelle en dä Leß fottlohße.',
 'shortpages' => 'Atikele zoteet vun koot noh lang',
 'longpages' => 'Atikele zoteet vun lang noh koot',
 'deadendpages' => 'Atikele ohne Links dren',
 'deadendpagestext' => 'De Atikele hee han kein Links op ander Atikele em Wiki.',
 'protectedpages' => 'Jeschötzte Sigge',
 'protectedpages-indef' => 'Nor de Sigge zeije, woh alleins de Wiki-Köbesse draan dörrve',
+'protectedpages-summary' => 'He sin Sigge opjeliss, wo jäje Veränderunge un/odde jäje et Ömnenne jeschötz sin, su dat nit einfach Jede jet draan don kann.',
 'protectedpages-cascade' => 'Nur Sigge en ener Schotz-Kaskad',
 'protectedpages-noredirect' => 'Ömleidonge verschteische',
 'protectedpagesempty' => 'Op di Aat sin jrad kein Sigge jeschötz.',
+'protectedpages-timestamp' => 'Dattum un Zigg',
+'protectedpages-page' => 'Sigg',
+'protectedpages-expiry' => 'Bes',
+'protectedpages-performer' => 'Jeschöz vum Metmaacher',
+'protectedpages-params' => 'De Zoot Schpär',
+'protectedpages-reason' => 'Der Jrond',
+'protectedpages-unknown-timestamp' => 'Onbikannt',
+'protectedpages-unknown-performer' => 'Onbikannte Metmaacher',
 'protectedtitles' => 'Verbodde Titele för Sigge',
+'protectedtitles-summary' => "Hee sin verbodde Sigge-Tittele opjelis, unger dä Name ka'mer kein neu Sigge aanläje.",
 'protectedtitlesempty' => 'Op di Aat sin jrad kein Sigge jäje et neu Aanlääje jeschötz.',
 'listusers' => 'De Metmaacherleß',
 'listusers-editsonly' => 'Donn nor Metmaacher zeije, di och ens jät jeschrevve han.',
@@ -2455,6 +2513,7 @@ Wann di Sigg udder ier Klaafsigg verändert weed, kütt dat af jäz heh en di Op
 'watchmethod-list' => 'Ben de Oppassliss am pröfe, noh de letzte Änderung',
 'watchlistcontains' => 'En dä Oppassliss {{PLURAL:$1|es ein Sigg|sinner <strong>$1</strong> Sigge|sinner <strong>kein</strong> Sigge}}.',
 'iteminvalidname' => 'Dä Endrach „$1“ hät ene kapodde Name.',
+'wlnote2' => 'Heh sin de Änderonge us de läzde {{PLURAL:$1|Schtond|<strong>$1</strong> Schtonde|kein Schtond}} bes zom $2 öm $3 Uhr.',
 'wlshowlast' => 'Zeich de letzte | $1 | Stunde | $2 | Dage | $3 | aan, dun',
 'watchlist-options' => 'Eijeschaffte fun de Oppassless',
 
@@ -2464,7 +2523,7 @@ Wann di Sigg udder ier Klaafsigg verändert weed, kütt dat af jäz heh en di Op
 'watcherrortext' => 'Ene Fähler es opjetrodde beim Ändere vun de Enshtällonge för Ding Oppaßleß för „$1“',
 
 'enotif_mailer' => '{{ucfirst:{{GRAMMAR:Genitive singe male|{{SITENAME}}}}}} Nohreechte-Versand',
-'enotif_reset' => 'Setz all Änderunge op „Aanjeluurt“ un Erledich.',
+'enotif_reset' => 'Saz all Änderonge op „Aanjeluurt“, un fäädesch.',
 'enotif_impersonal_salutation' => 'Metmaacher {{GRAMMAR:Genitiv vun|{{SITENAME}}}}',
 'enotif_subject_deleted' => '{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} fott jeschmeße.',
 'enotif_subject_created' => '{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} aanjelaat.',
@@ -2485,27 +2544,30 @@ $PAGEINTRO $NEWPAGE
 
 {{int:summary}} „$PAGESUMMARY“ $PAGEMINOREDIT
 
-Do kanns dä Metmaacher „$PAGEEDITOR“ aanspreche:
+Do kanns dä Metmaacher „$PAGEEDITOR“ aanspräsche:
 * Övver e-mail: $PAGEEDITOR_EMAIL
 * Em Wiki: $PAGEEDITOR_WIKI
 
-Do kriss vun jetz aan kein e-mail mieh, bes dat Do Der di Sigg aanjeluurt häs,
-och wann se norr_ens verändert weed. Do kanns ävver och all die Merker för 
-e-mail för die Sigge en Dinger Oppassliss op eimol ändere.
+Do kreß vun jetz aan kein e-mail mieh, bes dat Do
+Der di Sigg aanjeluurt häs wann De enjelogg bes,
+och wann se norr_ens verändert weed. Do kanns ävver
+och all die Merker för e-mail för die Sigge en Dinger
+Oppaßleß op eimol ändere.
 
-Ene schöne Jroß {{GRAMMAR:vun|{{SITENAME}}}}.
+Ene schöne Jrohß {{GRAMMAR:vun|{{SITENAME}}}}.
 
 -- 
-Öm de Enshtällonge för Nohreeschet aan Desch ze ändere, jangk op:
+Öm de Enschtällonge för Nohreeschte aan Desch ze ändere,
+jangk op:
 {{canonicalurl:{{#special:Preferences}}}}
 
-Do kanns hee Ding Oppassleß ändere:
+Do kanns heh Ding Oppaßleß ändere:
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Öm di Sigg vun Dinger Oppassleß ze schmieße:
+Öm di Sigg vun Dinger Oppaßleß ze schmieße:
 $UNWATCHURL
 
-Do kanns hee noh Hölp luure:
+Do kanns heh noh Hölp luure:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
 'created' => 'neu aanjelaht',
 'changed' => 'jeändert',
@@ -2522,7 +2584,7 @@ Do kanns hee noh Hölp luure:
 'historywarning' => '<strong>Opjepass:</strong> Die Sigg, di De fott schmiiße wells, hät {{PLURAL:$1|ein ällder Version|ald Stöcker $1 ällder Versione|jaa kei ällder Versione}}.',
 'confirmdeletetext' => 'Do bes koot dovör, en Sigg för iwich fottzeschmieße. Dobei verschwind och de janze Verjangenheit vun dä Sigg us de Daatebank, met all ehr Änderunge un Metmaacher Name, un all dä Opwand, dä do dren stich. Do muss heh jetz bestätije, dat de versteihs, wat dat bedügg, un dat De weiß, wat Do do mähs.
 <strong>Dun et nor, wann dat met de [[{{MediaWiki:Policy-url}}|Rejelle]] wirklich zosamme jeiht!</strong>',
-'actioncomplete' => 'Erledich',
+'actioncomplete' => 'Jedonn!',
 'actionfailed' => 'Dat es donevve jejange',
 'deletedtext' => 'De Sigg „$1“ es jetz fottjeschmesse woode. Luur Der „$2“ aan, do häs De en Liss met de Neuste fottjeschmesse Sigge.',
 'dellogpage' => 'Logboch met de fottjeschmesse Sigge',
@@ -2541,6 +2603,7 @@ Do kanns hee noh Hölp luure:
 'delete-edit-reasonlist' => 'De Jrönde för et Fottschmieße beärbeide',
 'delete-toobig' => 'Di Sigg hät {{PLURAL:$1|ein Version|$1 Versione|jaa kein Version}}. Dat sinn_er ärsch fill. Domet unsere ẞööver do nit draan en de Kneen jeit, dom_mer esu en Sigg nit fottschmieße.',
 'delete-warning-toobig' => 'Di Sigg hät {{PLURAL:$1|ein Version|$1 Versione|jakein Version}}. Dat sinn_er ärsch fill. Wann De die all fottschmieße wells, dat kann dem Wiki sing Datenbangk schwer ußbremse.',
+'deleting-backlinks-warning' => '<strong>Opjepaß:</strong> Es jitt Sigge met Lenks noh heh doh, udder Sigge, di heh di Sigg enbenge!',
 
 # Rollback
 'rollback' => 'Em Letzte sing Änderunge zeröcknemme',
@@ -2714,8 +2777,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Heh di <i lang="en">IP</i>-Address es em Momang jesperrt.
 De neuste Sperr ier Enndraach em Logbooch es:',
 'sp-contributions-search' => 'Söök noh Metmaacher ier Beidräg',
+'sp-contributions-suppresslog' => 'verschtoche Beidrääch',
 'sp-contributions-username' => 'Metmaachername odder IP-Address:',
 'sp-contributions-toponly' => 'Bloß neuste Versione zeije',
+'sp-contributions-newonly' => 'Blohß neu aanjelaate Sigge zeije.',
 'sp-contributions-submit' => 'Söhke',
 
 # What links here
@@ -2782,6 +2847,7 @@ un och, wann De se ändere wells.',
 'ipb-confirmhideuser' => 'Do bes om bäßte Wääsch ene Metaacher ze sperre met „Vershteishe“ ußjewählt.
 Domet weed dä Name vun däm Metmaacher uß alle Leßte un Logbööscher eruß jelohße.
 Wells De dat?',
+'ipb-confirmaction' => 'Wann De sescher bes, dat De dat donn wells, donn e Krüzje nävve <em>{{int:ipb-confirm}}</em> maache.',
 'ipb-edit-dropdown' => 'De Jründ för et Sperre beärrbejde',
 'ipb-unblock-addr' => '„$1“ widder zohlohße',
 'ipb-unblock' => 'En IP-Addräß ov ene Metmaacher widder zohlohße',
@@ -2823,7 +2889,7 @@ Wells De dat?',
 'change-blocklink' => 'Sperr ändere',
 'contribslink' => 'Beidräch',
 'emaillink' => 'Scheck en <span lang="en">e-mail</span>',
-'autoblocker' => 'Automattisch jesperrt. Ding IP_Adress wood vör kootem vun däm Metmaacher „[[User:$1|$1]]“ jebruch. Dä es jesperrt woode wäje: „$2“',
+'autoblocker' => 'Bes automattisch jesperrt. Ding <i lang="en" xml:lang="en">IP</i>_Adress wood vör kootem noch vun däm Metmaacher „[[User:$1|$1]]“ jebruch. Dä es jesperrt woode wäje: „$2“',
 'blocklogpage' => 'Logboch met Metmaacher-Sperre',
 'blocklog-showlog' => 'Heh dä Metmaacher es ald fröjer jeshperrt woode. Dat Logbooch vum Metmaacher-Sperre onge künnt doh jät mieh zoh saare.',
 'blocklog-showsuppresslog' => 'Heh dä Metmaacher es ald fröjer jeshperrt un vershtoche woode. Dat Logbooch vum Metmaacher-Vershteishe onge künnt doh jät mieh zoh saare.',
@@ -2842,7 +2908,7 @@ Automattesch jesperrte <i lang="en>IP</i>-Addräße sin nit heh, ävver en de [[
 'range_block_disabled' => 'Adresse Jebeede ze sperre, es nit erlaub.',
 'ipb_expiry_invalid' => 'De Duur es Dress. Jevv se richtich aan.',
 'ipb_expiry_temp' => 'Sperre för Metmaacher met verstoche Name mößße för iewish doore.',
-'ipb_hide_invalid' => 'Kann dä Metmaacher nit vershteishe. Müjjelesch, dat dä zoh vill Änderunge jemaat hät.',
+'ipb_hide_invalid' => 'Mer künne dä Metmaacher nit verschteische. Dä hät övver {{PLURAL:$1|ein Änderong|$1 Änderong|kein Änderong}} jemaat.',
 'ipb_already_blocked' => '„$1“ es ald jesperrt',
 'ipb-needreblock' => 'Dä Metmaacher „$1“ es ald jesperrt. Wellß De de Enstellunge för di Spär ändere?',
 'ipb-otherblocks-header' => 'Ander {{PLURAL:$1|Sperr|Sperre|-nix-}}',
@@ -3021,6 +3087,7 @@ Wenn De jenerell aan [https://www.mediawiki.org/wiki/Localisation MediaWiki sing
 'allmessages-prefix' => 'Name fängk aan met:',
 'allmessages-language' => 'Schprooch:',
 'allmessages-filter-submit' => 'Lohß Jonn!',
+'allmessages-filter-translate' => 'Övversäze!',
 
 # Thumbnails
 'thumbnail-more' => 'Jrößer aanzeije',
@@ -3037,6 +3104,7 @@ $2',
 'thumbnail_image-type' => 'Di Zoot Beld künne mer nit met ömjonn',
 'thumbnail_gd-library' => 'Vun dä <i lang="en">GD</i> Projramm_Biplijotheek fäählt en Funkßuhn: „$1“',
 'thumbnail_image-missing' => 'Di Datei schingk nit doh ze sin: <code>$1</code>',
+'thumbnail_image-failure-limit' => 'Mieh wi {{PLURAL:$1|eine Versohch|$1 Versohche|keine Versohch}} dat Minnibelldsche ze zeije. Versöhg_et schpääder widder.',
 
 # Special:Import
 'import' => 'Sigge Emporteere',
@@ -3072,7 +3140,7 @@ Dat ahle Versione Huhlade es avjeschalt, un es nit müjjelich.',
 'importuploaderrortemp' => 'De Import-Datei huhzelade jingk scheif, weil e Zwescheverzeichnis fäählt.',
 'import-parse-failure' => 'Fäähler bem Import per XML:',
 'import-noarticle' => 'Kein Sigge do, för ze Emporteere!',
-'import-nonewrevisions' => 'Et sin kein neue Versione do, för ze Importeere, weil all de Versione vun heh ald fröjer empotteet wodte.',
+'import-nonewrevisions' => 'Et sin kein neue Väsjohne för ze emporteere doh, weil alle Väsjonhe vun heh ald fröjer empotteet wodte.',
 'xml-error-string' => '$1 — en {{PLURAL:$2|eetz|$2-}}te Reih en de {{PLURAL:$3|eetz|$3-}}te Spalde, dat ess_et {{PLURAL:$4|eetz|$4-}}te Byte: $5',
 'import-upload' => 'En XML-Datei impochteere',
 'import-token-mismatch' => 'Schadt. Et senn nit alle Date heh aanjekumme.
@@ -3175,6 +3243,7 @@ fun dä Sigg op, zom Beärbeide un widder Afspeichere.
 Esu kam_mer noch en Aanmärkong en „{{int:summary}}“ maache.',
 'tooltip-preferences-save' => 'Enstellunge faßhallde',
 'tooltip-summary' => 'Jif en koote Zesammefassung en',
+'interlanguage-link-title' => '$1 ($2)',
 
 # Stylesheets
 'common.css' => '/* CSS heh aan dä Stell hät Uswirkunge op all Ovverflääsche */',
@@ -3237,6 +3306,7 @@ Esu kam_mer noch en Aanmärkong en „{{int:summary}}“ maache.',
 'pageinfo-length' => 'Bytes en dä Sigg',
 'pageinfo-article-id' => 'Dä Sigg ier Nommer en dä Daatebangk',
 'pageinfo-language' => 'De Schprooch vum Sigge-Enhallt',
+'pageinfo-content-model' => 'Et Modäll för der Enhalld vun dä Sigg',
 'pageinfo-robot-policy' => 'Et opnämme es för Söhkmaschiine',
 'pageinfo-robot-index' => 'zohjelohße',
 'pageinfo-robot-noindex' => 'verbodde',
@@ -4068,6 +4138,9 @@ Dä Shtanndat-Zoot-Schlößel „$1“ övverschriif dä älldere Zoot-Schlöße
 'version-ext-colheader-description' => 'Beschrevve',
 'version-ext-colheader-credits' => 'Schriiver',
 'version-license-title' => '‎Lėzänz för $1',
+'version-license-not-found' => 'Mer han kein Lezänzenfommazjuhne för heh dat Zohsazprojramm jefonge.',
+'version-credits-title' => 'Dank för dat Projramm „$1“',
+'version-credits-not-found' => 'Schahd, mer han kein Aanjaabe drövver, wämm mer heh för ze danke hätte.',
 'version-poweredby-credits' => "Dat Wiki heh löp met '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'sönß wää',
 'version-poweredby-translators' => 'de Övversäzer em translatewiki.net',
@@ -4089,11 +4162,12 @@ Do sullts en [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie vun dä <i lang="en">GNU Ge
 # Special:Redirect
 'redirect' => 'Ömleide op en Dattei, ene Metmaacher udder de Väsjohn vun ener Sigg',
 'redirect-legend' => 'Ömleide ob_en Dattei udder Sigg',
-'redirect-summary' => 'Heh di {{int:specialpage}} leidt öm ob_en Dattei — doh mößd_Er ene Nahme aanjävve — udder en Sigg — doh mößd_Er en Kännong för en Väsjoh aanjävve — udder en Metmaachersigg — doh mößd_Er enem Metmaacher sing Kännong aanjävve.',
+'redirect-summary' => 'Heh di {{int:specialpage}} leidt öm ob_en Dattei — doh mößd_Er ene Nahme aanjävve, för e Beischpell:[[{{#Special:Redirect}}/file/Example.jpg]] — udder en Sigg — doh mößd_Er en Kännong för, udder en Väsjuhn aanjävve, för e Beischpell esu: [[{{#Special:Redirect}}/page/64308]] udder [[{{#Special:Redirect}}/revision/328429]] — udder en Metmaachersigg — doh mößd_Er enem Metmaacher sing Kännong aanjävve, för e Beischpell: [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'Lohß Jonn!',
 'redirect-lookup' => 'Söhk noh:',
 'redirect-value' => 'Kännong udder Nahme:',
 'redirect-user' => 'Enem Metmaacher sing Kännong',
+'redirect-page' => 'Dä Sigg ier Nummer en de Datebank',
 'redirect-revision' => 'Ener Sigg ier Väsjohn ier Kännong',
 'redirect-file' => 'Ener Dattei iehre Nahme',
 'redirect-not-exists' => 'Nit jefonge',
@@ -4112,9 +4186,8 @@ Do sullts en [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie vun dä <i lang="en">GNU Ge
 # Special:SpecialPages
 'specialpages' => '{{int:nstab-special}}e',
 'specialpages-note-top' => 'Lejänd',
-'specialpages-note' => '* {{int:nstab-special}}e för jede Metmaacher.
-* <span class="mw-specialpagerestricted">{{int:nstab-special}}e för Metmaacher met besönder Räächde.</span>
-* <span class="mw-specialpagecached">Em Zwescheshpeisher jehallde {{int:nstab-special}}e. Di künnte ovverhollt sind.</span>',
+'specialpages-note' => '* Jewöhnlejje {{int:nstab-special}}e för jede Metmaacher.
+* <span class="mw-specialpagerestricted">{{int:nstab-special}}e bloß för Metmaacher met besönder Räächde.</span>',
 'specialpages-group-maintenance' => 'Waadungsleste',
 'specialpages-group-other' => 'Ander {{int:nstab-special}}e',
 'specialpages-group-login' => 'Enlogge udder Aanmälde',
@@ -4331,9 +4404,9 @@ Wat De doh enjiß, kütt met Dingem Metmaachername un Dingem Brauser op die Sigg
 'limitreport-walltime-value' => '{{PLURAL:$1|ein&nbsp;Sekond|$1&nbsp;Sekonde|kein&nbsp;Sekond}}',
 'limitreport-ppvisitednodes-value' => '$1 vun $2',
 'limitreport-ppgeneratednodes-value' => '$1 vun $2',
-'limitreport-postexpandincludesize-value' => '$1 vun $2 {{PLURAL:$2|Byte|Bytes|Bytes}}',
+'limitreport-postexpandincludesize-value' => '{{PLURAL:$1|ein|$1|kein}} vun {{PLURAL:$2|einem Byte|$2 Bytes|keinem Byte}}',
 'limitreport-templateargumentsize' => 'Der Ömvang vun de Parrameeterre vun Schablohne',
-'limitreport-templateargumentsize-value' => '$1 vun $2 {{PLURAL:$2|Byte|Bytes|Bytes}}',
+'limitreport-templateargumentsize-value' => '{{PLURAL:$1|ein|$1|kein}} vun {{PLURAL:$2|einem Byte|$2 Bytes|keinem Byte}}',
 'limitreport-expansiondepth-value' => '$1 vun $2',
 'limitreport-expensivefunctioncount' => 'Oproofe vun „düüre“ Fonxjuhne em Paaser',
 'limitreport-expensivefunctioncount-value' => '$1 vun $2',
index 9680f2a..04be9de 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** ‫كوردي (عەرەبی)‬ (‫كوردي (عەرەبی)‬)
+/** كوردي (عەرەبی)‏ (كوردي (عەرەبی)‏)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -9,8 +9,10 @@
  *
  * @author Arastein
  * @author Asoxor
+ * @author Bonevarluri
  * @author George Animal
  * @author Marmzok
+ * @author Muhammed taha
  */
 
 $fallback = 'ckb';
@@ -37,16 +39,19 @@ $messages = array(
 
 # Dates
 'january' => 'کانوونی دووەم',
+'january-gen' => 'کانوونی دووەم',
 
 # Categories related messages
 'hidden-category-category' => 'هاوپۆلە شاردراوەکان',
 
 'talkpagelinktext' => 'لێدوان',
 
-# 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).
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'دەربارەی {{SITENAME}}',
-'mainpage'  => 'دەستپێک',
+'mainpage' => 'دەستپێک',
+'mainpage-description' => 'دەستپێک',
 
+'youhavenewmessagesmulti' => 'شما یه گل پیغوم تازه د $1 داریتو',
 'red-link-title' => '$1 (پەڕە بوونی نییە)',
 
 );
index 93a5fef..045f612 100644 (file)
@@ -476,7 +476,6 @@ Bila di bîra te de be ku gengaz e hin rûpel mîna ku tu hîn bi navê xwe qeyd
 'gotaccountlink' => 'Têkeve',
 'userlogin-resetlink' => 'Te agahiyên hesabê xwe ji bîr kirin?',
 'userlogin-resetpassword-link' => 'Şîfreyê ji nû ve çêke',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Alîkariya têketinê]]',
 'createacct-emailrequired' => 'E-name',
 'createaccountmail' => 'Use a temporary random password and send it to the email address specified below',
 'createaccountreason' => 'Sedem:',
index f204e22..6c4c8f6 100644 (file)
@@ -81,7 +81,7 @@ $messages = array(
 'december-gen' => 'ӧшым',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Категория|Категория}}',
+'pagecategories' => '{{PLURAL:$1|1=Категория|Категория}}',
 
 'article' => 'Гижӧд',
 'cancel' => 'Дугӧдны',
index fcd700f..14156c0 100644 (file)
@@ -549,8 +549,6 @@ Na ankevewgh dhe janjya agas [[Special:Preferences|dewisyansow {{SITENAME}}]].',
 'gotaccountlink' => 'Omgelmi',
 'userlogin-resetlink' => 'A ankevsowgh hwi agas manylyon omgelmi?',
 'userlogin-resetpassword-link' => 'Dassettya agas ger tremena',
-'helplogin-url' => 'Help:Omgelmi',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Gweres gans omgelmi]]',
 'createacct-join' => 'Entrewgh agas kedhlow a-woles.',
 'createacct-emailrequired' => 'Trigva ebost',
 'createacct-emailoptional' => 'Trigva ebost (a-dhewis)',
index 6ce7abd..e4e977c 100644 (file)
@@ -188,7 +188,6 @@ $messages = array(
 'vector-action-protect' => 'Коргоо',
 'vector-action-undelete' => 'Калыбына келтирүү',
 'vector-action-unprotect' => 'Коргоону өзгөртүү',
-'vector-simplesearch-preference' => 'Жөнөкөйлөтүлгөн издөө сабын жандыруу («Вектор» темасында гана)',
 'vector-view-create' => 'Түзүү',
 'vector-view-edit' => 'Оңдоо',
 'vector-view-history' => 'Тарыхын кароо',
@@ -419,8 +418,6 @@ $1',
 'gotaccountlink' => 'Кирүү',
 'userlogin-resetlink' => 'Кирүүчү маалыматарыңызды эсиңизден чыгардыңызбы?',
 'userlogin-resetpassword-link' => 'Сырсөздү алмаштыруу',
-'helplogin-url' => 'Help:Эсепке кирүү',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Системге кирүүгө жардам]]',
 'createacct-join' => 'Маалыматыңызды төмөнгө териңиз.',
 'createacct-emailrequired' => 'Эмейл дарек',
 'createacct-emailoptional' => 'Эмейл дарек (милдеттүү эмес)',
index 6d0db12..8803261 100644 (file)
@@ -533,7 +533,6 @@ Noli oblivisci [[Special:Preferences|praeferentias]] tuas apud {{grammar:accusat
 'gotaccount' => "Habesne iam rationem? '''$1'''.",
 'gotaccountlink' => 'Conventum aperi',
 'userlogin-resetlink' => 'Num tesserae tuae oblitus es?',
-'helplogin-url' => 'Help:Conventum aperire',
 'createacct-emailrequired' => 'Inscriptio electronica',
 'createacct-emailoptional' => 'Inscriptio electronica (non necesse)',
 'createacct-email-ph' => 'Inscriptionem electronicam tuam inscribe',
index 6bb6baf..ed1b127 100644 (file)
@@ -234,7 +234,7 @@ $messages = array(
 'editfont-serif' => 'Tipografía serif',
 
 # Dates
-'sunday' => 'Alkhad',
+'sunday' => 'Alad',
 'monday' => 'Lunes',
 'tuesday' => 'Martes',
 'wednesday' => 'Miércoles',
@@ -305,9 +305,9 @@ $messages = array(
 'category-empty' => "''Esta kategoría oy día, no contiene ni hojas ni dosyas de multimedya''",
 'hidden-categories' => '{{PLURAL:$1|Kategoría escondida|Kategorías escondidas}}',
 'hidden-category-category' => 'Katēggorías escondidas',
-'category-subcat-count' => '{{PLURAL:$2|Esta katēggoría contiene sólo una baxo-katēggoría:|Esta katēggoría contiene {{PLURAL:$1|esta baxo-katēggoría aquí abaxo|$1 baxo-katēggorías aquí abaxo}}, de un total de $2 baxo-katēggorías:}}',
+'category-subcat-count' => '{{PLURAL:$2|Esta kategoría contiene sólo la su-kategoría venidera.|Esta kategoría contiene {{PLURAL:$1|la su-kategoría venidera|$1 su-kategorías venideras}}, de un total de $2 su-kategorías.}}',
 'category-subcat-count-limited' => 'Esta katēggoría contiene {{PLURAL:$1|la baxo-katēggoría venidera|$1 baxo-katēggorías venideras}}.',
-'category-article-count' => '{{PLURAL:$2|Esta katēggoría contiene sólo la hoja venidera.|{{PLURAL:$1|La hoja venidera apartiene|Las $1 hojas venideras apartienen}} a esta katēggoría, de un total de $2.}}',
+'category-article-count' => '{{PLURAL:$2|Esta kategoría contiene sólo la hoja venidera.|{{PLURAL:$1|La hoja venidera apartiene|Las $1 hojas venideras apartienen}} a esta kategoría, de un total de $2.}}',
 'category-article-count-limited' => '{{PLURAL:$1|La hoja venidera apartiene|Las $1 hojas venideras apartienen}} a esta katēggoría.',
 'category-file-count' => '{{PLURAL:$2|Esta katēggoría contiene sólo la dosya venidera.|{{PLURAL:$1|La dosya venidera apartiene|Las $1 dosyas venideras apartienen}} a esta katēggoría, de un total de $2.}}',
 'category-file-count-limited' => '{{PLURAL:$1|La dosya venidera apartiene|Las $1 dosyas venideras apartienen}} a esta katēggoría.',
@@ -318,12 +318,12 @@ $messages = array(
 
 'about' => 'Encima de',
 'article' => 'Artícůlo de contenido',
-'newwindow' => '(Se avre en una mueva ventana)',
+'newwindow' => '(se avre en una mueva ventana)',
 'cancel' => 'Anular',
 'moredotdotdot' => 'Mas...',
 'morenotlisted' => 'Esta lista no esta kompleta',
 'mypage' => 'Hoja',
-'mytalk' => 'Mi diskusyon',
+'mytalk' => 'Diskusyón',
 'anontalk' => 'Diskusyón para este adresso de IP',
 'navigation' => 'Navigación',
 'and' => '&#32;i',
@@ -334,7 +334,7 @@ $messages = array(
 'qbedit' => 'Trocar',
 'qbpageoptions' => 'Esta hoja',
 'qbmyoptions' => 'Mis hojas',
-'faq' => 'DAD',
+'faq' => 'DDS',
 'faqpage' => 'Project:DDS',
 
 # Vector skin
@@ -344,7 +344,6 @@ $messages = array(
 'vector-action-protect' => 'Guadrar',
 'vector-action-undelete' => 'Traer atrás',
 'vector-action-unprotect' => 'Trocar proteksyon',
-'vector-simplesearch-preference' => 'Aktivar barra de buskida simplifikada (solamente kon aspekto Vector)',
 'vector-view-create' => 'Criar',
 'vector-view-edit' => 'Trocar',
 'vector-view-history' => 'Ver la istoria',
@@ -352,7 +351,7 @@ $messages = array(
 'vector-view-viewsource' => 'Ver su manadero',
 'actions' => 'Aksiones',
 'namespaces' => 'Espacios de nombres',
-'variants' => 'Formas diferentes',
+'variants' => 'Variantes',
 
 'navigation-heading' => 'Menu de navigasyon',
 'errorpagetitle' => 'Yerro',
@@ -403,9 +402,9 @@ $messages = array(
 'categorypage' => 'Ver la hoja de la katēggoría',
 'viewtalkpage' => 'Ver la diskusyón',
 'otherlanguages' => 'En otras linguas',
-'redirectedfrom' => '(Redirigido desde $1)',
+'redirectedfrom' => '(Redirijado de $1)',
 'redirectpagesub' => 'Hoja redirigida',
-'lastmodifiedat' => 'Esta hoja fue trocada por la vez dalcavo en el $1, a las $2.',
+'lastmodifiedat' => 'Esta hoja fue trocada por la vez dalcavo en el $1, a las $2 la ora.',
 'viewcount' => 'Este pajina fue vijitado {{PLURAL:$1|una vez|$1 vezes}}.',
 'protectedpage' => 'Hoja guardada',
 'jumpto' => 'Saltar a:',
@@ -424,7 +423,7 @@ $1',
 'aboutsite' => 'Encima de {{SITENAME}}',
 'aboutpage' => 'Project:Encima de',
 'copyright' => 'El kontenido se puede topar debasho de la $1 salvo ke indika al kontrario.',
-'copyrightpage' => '{{ns:project}}:Derechos de autor',
+'copyrightpage' => '{{ns:project}}:Derechos del otor',
 'currentevents' => 'Novedades',
 'currentevents-url' => 'Project:Novedades',
 'disclaimers' => 'Refuzo de responsabilitá',
@@ -474,17 +473,17 @@ $1',
 'site-rss-feed' => 'Fuente de RSS de $1',
 'site-atom-feed' => 'Canal Atomo de $1',
 'page-rss-feed' => '"$1" Fuente RSS',
-'page-atom-feed' => '"$1" Subscripción Atom',
+'page-atom-feed' => 'Canal Atomo de $1',
 'red-link-title' => '$1 (la hoja no egziste)',
 'sort-descending' => 'Atakanar en orden desendente',
 'sort-ascending' => 'Atakanar en orden asendente',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Hoja',
-'nstab-user' => 'Hoja de kullaneador',
+'nstab-user' => 'Hoja de usador',
 'nstab-media' => 'Hoja de Meddia',
 'nstab-special' => 'Hoja especial',
-'nstab-project' => 'Hoja del proyecto',
+'nstab-project' => 'Hoja del projeto',
 'nstab-image' => 'Dosya',
 'nstab-mediawiki' => 'Messaj',
 'nstab-template' => 'Şablón',
@@ -663,30 +662,30 @@ Kontrasenya temporal: $2',
 'italic_sample' => 'Teksto aladado',
 'italic_tip' => 'Teksto aladado',
 'link_sample' => 'Títolo del atamiento',
-'link_tip' => 'Link interno',
+'link_tip' => 'Atamiento (link) interno',
 'extlink_sample' => 'http://www.example.com Títolo del atamiento',
-'extlink_tip' => 'Link eksterno (acόrdate de ajustar el prefiks http://)',
-'headline_sample' => 'Escritura de títolo',
-'headline_tip' => 'Titular de nivel 2',
-'nowiki_sample' => 'Escribid aquí texto sin formato',
-'nowiki_tip' => 'Iñorar el formato wiki',
-'image_tip' => 'Imagen incorporada',
+'extlink_tip' => 'Atamiento esterno (link de afuera: acόdrate de ajustar el prefikso http://)',
+'headline_sample' => 'Teksto del títolo',
+'headline_tip' => 'Títolo de nivel 2',
+'nowiki_sample' => 'El teksto sin formato, escrívelo aquí',
+'nowiki_tip' => 'Iñora el formato viki',
+'image_tip' => 'Dosya encaxada',
 'media_tip' => 'Atamiento de la dosya',
-'sig_tip' => 'Firma, data i ora',
-'hr_tip' => 'Liña orizontala (úsala de vez en cuando)',
+'sig_tip' => 'Tu firma con la data y la ora',
+'hr_tip' => 'Liña orizontal (kulanea poco)',
 
 # Edit pages
-'summary' => 'Resumido:',
+'summary' => 'Rezümé:',
 'subject' => 'Tema/título:',
-'minoredit' => 'Esta es una edición chiquitica',
+'minoredit' => 'Esto es un trocamiento chiquitico',
 'watchthis' => 'Cudia esta hoja',
 'savearticle' => 'Enrejistra la hoja',
 'preview' => 'Echar una ojada',
-'showpreview' => 'Mostrar la previsualización',
+'showpreview' => 'Echar una ojada',
 'showlivepreview' => 'Previsteo bivo',
 'showdiff' => 'Amostrar los trocamientos',
-'anoneditwarning' => "'''Noticia:''' La sesyón no empeçó con un cuento de usuario.
-Tu adresso de IP va ser enrejjistrado en la istoria de la hoja.",
+'anoneditwarning' => '<strong>Aviso:</strong> No entrates a tu cuento.
+Tu adresso de IP se va a enrejistrar en la istoria de trocamientos de la hoja.',
 'summary-preview' => 'Previsualización del resumen:',
 'blockedtitle' => 'El usador está blokeado',
 'blockednoreason' => 'La razόn no se diό',
@@ -705,9 +704,9 @@ Si venites aquí por yerro, torna a la hoja de antes.',
 Puedes [[Special:Search/{{PAGENAME}}|buxcar el títolo desta hoja]] en otras hojas,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buxcar en los rejistros],
 u [{{fullurl:{{FULLPAGENAME}}|action=edit}} trocar esta hoja]</span>.',
-'noarticletext-nopermission' => 'No ay teksto en esta oja.
-Puedes [[Special:Search/{{PAGENAME}}|bushkar este titolo de oja]] en otras pajinas,
-o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} bushkar en los rejistros relasyonados]</span>.',
+'noarticletext-nopermission' => 'En este momento no ay teksto en esta hoja.
+Puedes [[Special:Search/{{PAGENAME}}|buxcar el títolo desta hoja]] en otras hojas,
+u <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buxcar en los rejistros]</span>, ma no tienes la permissión de criar esta hoja.',
 'userpage-userdoesnotexist-view' => 'El cuento del usador $1 no está enrejistrado.',
 'updated' => '(Aktualizado)',
 'note' => "'''Nota:'''",
@@ -742,9 +741,9 @@ Ya egziste.',
 'content-model-css' => 'CSS',
 
 # Parser/template warnings
-'post-expand-template-inclusion-warning' => "'''Avizo:''' La contenencia de xablon está muy grande.
-Algunos xablones no van á ser comprendidos.",
-'post-expand-template-inclusion-category' => 'Hojas ande la contenencia de xablones está sovrepassada',
+'post-expand-template-inclusion-warning' => "'''Aviso:''' Ay munchos şablones y kaji no quedó lugar.
+Algunos şablones no van a caver.",
+'post-expand-template-inclusion-category' => 'Hojas con sovrecarga de şablones',
 'post-expand-template-argument-warning' => "'''Aviso:''' Esta oja tiene kuanto menos un kampo enel xablon muy lungo.
 Este o estos kampos no van ser amostrados",
 'post-expand-template-argument-category' => 'Ojas ke tienen xablones kon parametros no uzados',
@@ -755,15 +754,15 @@ Este o estos kampos no van ser amostrados",
 # History pages
 'viewpagelogs' => 'Ver los registros de esta hoja',
 'currentrev' => "Enderechamiento d'al cavo",
-'currentrev-asof' => 'Enderechamiento de alcavo á las $1',
-'revisionasof' => 'Enderechamiento a las $1',
+'currentrev-asof' => 'Enderechamiento dalcavo de $2 a las $3 la ora',
+'revisionasof' => 'Enderechamiento de $2 a las $3 la ora',
 'revision-info' => 'Revision en data $1 por $2',
 'previousrevision' => '← Enderechamiento de antes',
 'nextrevision' => 'Revizión venidera →',
 'currentrevisionlink' => 'Revisión actual',
-'cur' => 'act',
+'cur' => 'cor',
 'next' => 'venidero',
-'last' => 'de alcavo',
+'last' => 'ant',
 'page_first' => 'primeras',
 'page_last' => 'de alcabo',
 'histlegend' => "Selección de diferencias: marca los selectores de las versiones a comparar y pulsa ''enter'' o el botón de abajo.<br />
@@ -782,7 +781,7 @@ Leyenda: (act) = diferencias con la versión actual,
 
 # Revision deletion
 'rev-deleted-user' => '(se kito el nombre de usuario)',
-'rev-delundel' => 'mostra/esconde',
+'rev-delundel' => 'amostrar/esconder',
 'rev-showdeleted' => 'mostra',
 'revdelete-show-file-submit' => 'Si',
 'revdelete-hide-image' => 'Eskonder el kontenido de archivo',
@@ -833,7 +832,7 @@ Leyenda: (act) = diferencias con la versión actual,
 'searchprofile-advanced-tooltip' => 'Buxcar en espacios de nombres partikolares',
 'search-result-size' => '$1 ({{PLURAL:$2|1 biervo|$2 biervos}})',
 'search-result-category-size' => '{{PLURAL:$1|1 miembro|$1 miembros}} ({{PLURAL:$2|1 basho-kateggoria|$2 basho-kateggoria}}, {{PLURAL:$3|1 dossia|$3 dossias}})',
-'search-redirect' => '(redireksión de la hoja $1)',
+'search-redirect' => '(redireksión de $1)',
 'search-section' => '(kapítolo $1)',
 'search-suggest' => 'Quijites dezir: $1',
 'search-interwiki-caption' => 'Proyectos hermanos',
@@ -842,7 +841,7 @@ Leyenda: (act) = diferencias con la versión actual,
 'searchrelated' => 'lisionado',
 'searchall' => 'todos',
 'showingresultsheader' => "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1-$2''' de '''$3'''}} parâ '''$4'''",
-'search-nonefound' => 'No ay resultados que acumplan los criterios de la búxquida.',
+'search-nonefound' => 'No ay resultados por esta búxquida.',
 'powersearch-legend' => 'Búsqueda adelantada',
 'powersearch-ns' => 'Busca en los espacios de nombres:',
 'powersearch-redir' => 'Mostra las redirecciones',
@@ -950,49 +949,49 @@ Leyenda: (act) = diferencias con la versión actual,
 'nchanges' => '$1 {{PLURAL:$1|trocamiento|trocamientos}}',
 'enhancedrc-history' => 'istoria',
 'recentchanges' => 'Trocamientos freskos',
-'recentchanges-legend' => 'Opciones encima de los trocamientos frescos',
+'recentchanges-legend' => 'Escojimientos de los trocamientos freskos',
 'recentchanges-summary' => 'Perseguid en esta hoja, los trocamientos de alcabo realizados en la Viki.',
 'recentchanges-feed-description' => 'Perseguir los trocamientos más nuevos en el viki en este feed.',
 'recentchanges-label-newpage' => 'Este trocamiento crió una mueva hoja',
-'recentchanges-label-minor' => 'Esta es un trocamiento chiquitico',
-'recentchanges-label-bot' => 'Este trokamiento fue echo por un bot',
-'recentchanges-label-unpatrolled' => 'Este trocamiento no está akavidado',
+'recentchanges-label-minor' => 'Esto es un trocamiento chiquitico',
+'recentchanges-label-bot' => 'Este trocamiento era hecho por la parte de un bot',
+'recentchanges-label-unpatrolled' => 'Este trocamiento no fue patrullado daínda',
 'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnotefrom' => "Debasho se amostran los trokamientos desde '''$2''' (amostrados fina <b>$1</b>)",
-'rclistfrom' => 'Mostra los trocamientos nuevos empeçando desde $1',
+'rclistfrom' => 'Amostrar los trocamientos muevos empeçando el $1',
 'rcshowhideminor' => '$1 trocamientos chiquiticos',
-'rcshowhidebots' => '$1 bots',
-'rcshowhideliu' => '$1 kullaneadores enrezhistrados',
-'rcshowhideanons' => '$1 kullaneadores anonimes',
+'rcshowhidebots' => '$1 botes',
+'rcshowhideliu' => '$1 usadores enrejistrados',
+'rcshowhideanons' => '$1 usadores anónimos',
 'rcshowhidepatr' => '$1 trocamientos akavidados',
-'rcshowhidemine' => '$1 mis ediciones',
-'rclinks' => 'Ver los dal cavo $1 trocamientos en los dal cavo $2 días.<br />$3',
+'rcshowhidemine' => '$1 mis trocamientos',
+'rclinks' => 'Ver los $1 trocamientos dalcavo en los $2 días dalcavo<br />$3',
 'diff' => 'dif',
 'hist' => 'ist',
 'hide' => 'Esconder',
 'show' => 'Amostrar',
 'minoreditletter' => 'ch',
-'newpageletter' => 'N',
+'newpageletter' => 'M',
 'boteditletter' => 'b',
 'rc_categories_any' => 'Kualkyer',
-'rc-enhanced-expand' => 'Amostrar los detalyos',
-'rc-enhanced-hide' => 'Guarda los detalyos',
+'rc-enhanced-expand' => 'Amostrar los detalios',
+'rc-enhanced-hide' => 'Esconder los detalios',
 
 # Recent changes linked
-'recentchangeslinked' => 'Trocamientos conectados',
+'recentchangeslinked' => 'Trocamientos atados',
 'recentchangeslinked-feed' => 'Trocamientos conectados',
 'recentchangeslinked-toolbox' => 'Trocamientos atados',
-'recentchangeslinked-title' => 'Los trocamientos relacionados con "$1"',
+'recentchangeslinked-title' => 'Los trocamientos atados a "$1"',
 'recentchangeslinked-summary' => "Esto es una lista de trocamientos dalcavo en las hojas atadas de una hoja partikolara (u en los miembros de una kategoría partikolara).
 Las hojas en tu [[Special:Watchlist|lista de acavidamiento]] son '''reforçadas'''.",
-'recentchangeslinked-page' => 'Nombre de la hoja',
-'recentchangeslinked-to' => 'Amostra los trocamientos freskos en lugar de la hoja indicada',
+'recentchangeslinked-page' => 'Nombre de la hoja:',
+'recentchangeslinked-to' => 'Al lugar de la hoja indikada, amostra los trocamientos en las hojas atadas a esta hoja',
 
 # Upload
 'upload' => 'Suvir una dosya',
 'uploadlogpage' => 'Subidas de arxivos',
 'filename' => 'Nombre de archivo',
-'filedesc' => 'Somario',
+'filedesc' => 'Rezümé',
 'filereuploadsummary' => 'Kambios de archivo:',
 'filesource' => 'Fuente:',
 'filename-tooshort' => 'El nombre del archivo es muy kurto.',
@@ -1023,24 +1022,24 @@ Las hojas en tu [[Special:Watchlist|lista de acavidamiento]] son '''reforçadas'
 # File description page
 'file-anchor-link' => 'Dosya',
 'filehist' => 'La istoria de la dosya',
-'filehist-help' => 'Klika encima de una data/ora para vel la dosya desta data.',
+'filehist-help' => 'Taquea (pisa con el ratón) encima de una data/ora parâ ver como era la dosya en esta data.',
 'filehist-revert' => 'aboltar',
-'filehist-current' => 'actual',
+'filehist-current' => 'corriente',
 'filehist-datetime' => 'Data/Ora',
-'filehist-thumb' => 'Minyatura',
-'filehist-thumbtext' => 'Minyatura de la versión á las $1',
+'filehist-thumb' => 'Miniatura',
+'filehist-thumbtext' => 'Miniatura de la versión de $1',
 'filehist-nothumb' => 'Sin minyatura',
-'filehist-user' => 'Kullaneador',
-'filehist-dimensions' => 'Dimensiones',
+'filehist-user' => 'Usador',
+'filehist-dimensions' => 'Boy',
 'filehist-filesize' => 'El boy de la dosya',
-'filehist-comment' => 'Comentario',
+'filehist-comment' => 'Esplicación',
 'filehist-missing' => 'No se topa el archivo',
 'imagelinks' => 'Usos de la dosya',
-'linkstoimage' => '{{PLURAL:$1|La hoja venidera da link|Las hojas venideras dan link}} a esta dosya:',
+'linkstoimage' => '{{PLURAL:$1|La hoja venidera se ata|Las hojas venideras se atan}} a esta dosya:',
 'nolinkstoimage' => 'No ay hojas con atamientos a esta dosya.',
 'sharedupload' => 'Este arxivo es de $1 i puede ser usado por otros proyectos.',
-'sharedupload-desc-here' => 'Esta hoja es de $1 y puede ser usado por otros projetos.
-La descripción en su [$2 hoja de descripción del arxivo] está amostrada debaxo.',
+'sharedupload-desc-here' => 'Esta hoja es de $1 y se puede kulanear en otros projetos.
+La esplicación en su [$2 hoja de esplicacíon de la dosya] se ve abaxo.',
 'filepage-nofile' => 'No egziste dingun archivo de este nombre.',
 'uploadnewversion-linktext' => 'Subir una nueva versión de este arxivo',
 'shared-repo-from' => 'de $1',
@@ -1099,7 +1098,7 @@ La descripción en su [$2 hoja de descripción del arxivo] está amostrada debax
 'newpages' => 'Hojas muevas',
 'newpages-username' => 'Nombre de usuario:',
 'ancientpages' => 'Artikolos mas viejos',
-'move' => 'taşirear',
+'move' => 'Taşirear',
 'movethispage' => 'Tashirea esta hoja',
 'pager-newer-n' => '{{PLURAL:$1|1 venidero|$1 venideros}}',
 'pager-older-n' => '{{PLURAL:$1|1 de antes|$1 de antes}}',
@@ -1114,14 +1113,14 @@ La descripción en su [$2 hoja de descripción del arxivo] está amostrada debax
 
 # Special:AllPages
 'allpages' => 'Todas las hojas',
-'alphaindexline' => '$1 a $2',
+'alphaindexline' => 'De $1 fina $2',
 'nextpage' => 'La sigiente pajina ($1)',
 'prevpage' => 'Hoja de antés ($1)',
 'allpagesfrom' => 'Mostrar hojas que empecen por:',
 'allpagesto' => 'Mostrar hojas escapadas con:',
 'allarticles' => 'Todas las hojas',
 'allinnamespace' => 'Todas las pajinas (espasio $1)',
-'allpagessubmit' => 'Amostrar la lista',
+'allpagessubmit' => 'Ir',
 
 # Special:Categories
 'categories' => 'Kategorías',
@@ -1168,7 +1167,7 @@ La descripción en su [$2 hoja de descripción del arxivo] está amostrada debax
 
 # Watchlist
 'watchlist' => 'Lista de akavidamiento',
-'mywatchlist' => 'Mi lista de akavidamientos',
+'mywatchlist' => 'Lista de acavidamientos',
 'watchlistfor2' => 'Para $1 $2',
 'addedwatchtext' => 'La pajina "[[:$1]]" fue anyadido a tu [[Special:Watchlist|lista de escogidas]]. Los trocamientos venideros en esta pajina i en tu pajina de diskusyon assosiada va apareser ayi.',
 'removedwatchtext' => 'La hoja «[[:$1]]» fue eliminada de tu [[Special:Watchlist|lista de escogidas]].',
@@ -1248,13 +1247,13 @@ A continuación se mostran las opciones actuales de la hoja '''$1''':",
 
 # Namespace form on various pages
 'namespace' => 'Espacio de nombres:',
-'invert' => 'Invertir selección',
+'invert' => 'Aboltar escojimiento',
 'blanknamespace' => '(Prencipal)',
 
 # Contributions
 'contributions' => 'Ajustamientos {{GENDER:$1|del kullaneador|de la kullaneadera}}',
 'contributions-title' => 'Ajustamientos {{GENDER:$1|del usuario|de la usuaria}} $1',
-'mycontris' => 'Mis donos',
+'mycontris' => 'Kontribüsyones',
 'contribsub2' => 'Para {{GENDER:$3|$1}}($2)',
 'uctop' => '(korriente)',
 'month' => 'Desde el mes (i antes):',
@@ -1292,7 +1291,7 @@ A continuación se mostran las opciones actuales de la hoja '''$1''':",
 'blockip' => 'Bloquear usuario',
 'ipadressorusername' => 'Adreso de IP o nombre de usuario:',
 'ipbreason' => 'Razon:',
-'ipboptions' => '2 oras:2 hours,1 día:1 day,3 días:3 days,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 año:1 year,para siempre:infinite',
+'ipboptions' => '2 oras:2 hours,1 día:1 day,3 días:3 days,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 año:1 year,parâ siempre:infinite',
 'badipaddress' => 'Adreso de IP invalido',
 'ipblocklist' => 'Usuarios blokeados',
 'blocklist-reason' => 'Razon',
@@ -1378,17 +1377,17 @@ Si puede ser, escoge otro nombre.',
 'tooltip-pt-logout' => 'Sal de tu cuento',
 'tooltip-ca-talk' => 'Diskusyón encima del artíkolo',
 'tooltip-ca-edit' => 'Puedes trocar esta hoja. Ma te rogamos para que eches una ojada (previsteo) antes de enrejistrarla.',
-'tooltip-ca-addsection' => 'Empeça a un muevo kapítolo',
+'tooltip-ca-addsection' => 'Ajusta un kapítolo muevo',
 'tooltip-ca-viewsource' => 'Esta hoja está guadrada.
 Puedes ver su manadero',
 'tooltip-ca-history' => 'Enderechamientos passados desta hoja',
 'tooltip-ca-protect' => 'Guardar esta hoja',
 'tooltip-ca-delete' => 'Efassar esta hoja',
-'tooltip-ca-move' => 'Taxirea (renombra) esta hoja',
+'tooltip-ca-move' => 'Taşirea esta hoja (troca el nombre desta hoja)',
 'tooltip-ca-watch' => 'Ajusta esta hoja a tu lista de acavidamientos',
-'tooltip-ca-unwatch' => 'Quita esta hoja de tu lista de escojidos',
+'tooltip-ca-unwatch' => 'Quita esta hoja de tu lista de acavidamientos',
 'tooltip-search' => 'Buxca en {{SITENAME}}',
-'tooltip-search-go' => 'Ir a la hoja con este nombre egzakto, si egziste.',
+'tooltip-search-go' => 'Vate a la hoja con este nombre egzakto, si egziste.',
 'tooltip-search-fulltext' => 'Buxca este teksto en las hojas',
 'tooltip-p-logo' => 'Vijita la primera hoja',
 'tooltip-n-mainpage' => 'Vijita la primera hoja',
@@ -1402,28 +1401,28 @@ Puedes ver su manadero',
 'tooltip-t-recentchangeslinked' => 'Los trocamientos dalcavo en las hojas atadas a la ésta',
 'tooltip-feed-rss' => 'Sindicación RSS de esta hoja',
 'tooltip-feed-atom' => 'Canal Atomo parâ esta hoja',
-'tooltip-t-contributions' => 'Ver la lista de ajustamientos de este usuario',
+'tooltip-t-contributions' => 'Lista de kontribüsyón (ajustamientos) deste usador',
 'tooltip-t-emailuser' => 'A este usuario, mándale una letra electrόnica (ímey)',
 'tooltip-t-upload' => 'Suve dosyas',
 'tooltip-t-specialpages' => 'Lista de todas las hojas especiales',
 'tooltip-t-print' => 'La forma apropiada parâ imprimir esta hoja',
 'tooltip-t-permalink' => 'Atamiento permanente (fikso) a este enderechamiento de la hoja',
 'tooltip-ca-nstab-main' => 'Ve el artíkolo',
-'tooltip-ca-nstab-user' => 'Ver la pajina de usuario',
+'tooltip-ca-nstab-user' => 'Ver la hoja del usador',
 'tooltip-ca-nstab-special' => 'Esta es una hoja especial, la hoja ya no se puede trocar',
 'tooltip-ca-nstab-project' => 'Ver la hoja del prodjekto',
 'tooltip-ca-nstab-image' => 'Ver la hoja de la dosya',
 'tooltip-ca-nstab-template' => 'Ve el şablón',
-'tooltip-ca-nstab-category' => 'Ve la hoja de categoría',
+'tooltip-ca-nstab-category' => 'Ve la hoja de kategoría',
 'tooltip-minoredit' => 'Márcalo como un trocamiento chiquitico',
-'tooltip-save' => 'Guadrar los trocamientos',
-'tooltip-preview' => 'Que previzualize sus trocamientos, ¡si puede ser, que use esto antes de enregistrar!',
-'tooltip-diff' => 'Mostra los trocamientos que él/ella hizo en el texhto.',
+'tooltip-save' => 'Enrejistra los trocamientos que hizites',
+'tooltip-preview' => 'Echa una ojada a tus trocamientos y assibivas házelo antes de enrejistrar!',
+'tooltip-diff' => 'Te amostra los trocamientos que hizites en el teksto',
 'tooltip-compareselectedversions' => 'Ve las diferencias entre las dos versiones escogidas de esta hoja.',
 'tooltip-watch' => 'Ajusta esta hoja a tu lista de escojidas',
 'tooltip-rollback' => '«Hazer aboltar» haze aboltar todos los trocamientos del usador dalcavo, sólo en klikando una vez.',
-'tooltip-undo' => '«Des-hazer» abolta este trocamiento y lo avre en el modo de previsteo. Permete ajustar una razón en el somario.',
-'tooltip-summary' => 'Entrar un somario curto',
+'tooltip-undo' => '«Des-hazer» abolta este trocamiento y lo avre en el modo de previsteo. Permete escrivir una razón en el rezümé.',
+'tooltip-summary' => 'Esplica en pocos biervos',
 
 # Attribution
 'anonymous' => '{{PLURAL:$1|Uzuario anonimo|Uzuarios anonimos}} de {{SITENAME}}',
@@ -1479,8 +1478,9 @@ El primer atamiento de cada liña se deve de atar a una dosya negra (la dosya qu
 Los atamientos venideros que están en la misma liña se konsidheran como eksepsiones (hojas, ande la dosya puede aparecer en la liña, ande se puede kulanear la dosya).',
 
 # Metadata
-'metadata' => 'Metadatos',
-'metadata-help' => 'Esta dosya contiene mas información (metadatos), probablemente ajustada por la kamera dizhital, el eskáner o la proǵrama kullaneado para criarlo o dizhitalizarlo. Si la dosya fue trocada de su estado orizhinal, puede aver pèryido algunos detalyos.',
+'metadata' => 'Metadados',
+'metadata-help' => 'Esta dosya contiene información ajustada (metadados), que la ajustó puede ser la kamerá dijital u el eskáner en cavso si se kulaneó parâ criar u dijitalizar la dosya. 
+Si la dosya fue trocada, algunos detalios pueden amostrar no la dosya trocada, ma la dosya orijinal.',
 'metadata-expand' => 'Mostra los detalyos ekstendidos',
 'metadata-collapse' => 'Esconder los detalyos ekstendidos',
 'metadata-fields' => 'Los campos de metadatos que se listan en este messaje se van a amostrar en la hoja de la deskripsión de la foto daínda cuando la tabla de metadatos está cerrada.
index 9fd9fa4..5564e5a 100644 (file)
@@ -222,7 +222,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Schéck mir eng Kopie vun de Mailen, déi ech anere Benotzer schécken.',
 'tog-diffonly' => "Weis bei Versiounsvergläicher just d'Ënnerscheeder an net déi ganz Säit",
 'tog-showhiddencats' => 'Verstoppt Kategorië weisen',
-'tog-noconvertlink' => 'Ëmwandlung vum Titel desaktivéieren',
 'tog-norollbackdiff' => 'Ënnerscheed nom Zrécksetzen ënnerdrécken',
 'tog-useeditwarning' => "Mech warne wann ech d'Ännerung vun enger Säit verloossen, ouni Ännerunge gespäichert ze hunn",
 'tog-prefershttps' => 'Ëmmer eng sécher Verbindung benotze wann ageloggt',
@@ -349,7 +348,6 @@ $messages = array(
 'vector-action-protect' => 'Spären',
 'vector-action-undelete' => 'Restauréieren',
 'vector-action-unprotect' => 'Spär änneren',
-'vector-simplesearch-preference' => 'Vereinfacht Sichleescht aktivéieren (nëmme beim Ausgesinn Vector)',
 'vector-view-create' => 'Uleeën',
 'vector-view-edit' => 'Änneren',
 'vector-view-history' => 'Versioune weisen',
@@ -633,8 +631,6 @@ Vergiesst net fir Är [[Special:Preferences|{{SITENAME}} Astellungen]] z'ännere
 'gotaccountlink' => 'Umellen',
 'userlogin-resetlink' => "Hutt Dir d'Detailer vun Ärem Login vergiess?",
 'userlogin-resetpassword-link' => 'Hutt Dir Äert Passwuert vergiess?',
-'helplogin-url' => 'Help:Aloggen',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hëllef beim Aloggen]]',
 'userlogin-loggedin' => 'Dir sidd schonn als {{GENDER:$1|$1}} ageloggt.
 Benotzt de Formulaire hei drënner fir Iech als een anere Benotzer anzeloggen.',
 'userlogin-createanother' => 'Maacht een anere Benotzerkont op',
@@ -731,6 +727,10 @@ Waart w.e.g. $1 ier Dir et nach eng Kéier probéiert.',
 'createacct-another-realname-tip' => "De richtegen Numm ass fakultativ.
 
 Wann Dir en ugitt, gëtt e benotzt fir d'Benotzerattributiounen fir Är Aarbecht zouzeuerdnen.",
+'pt-login' => 'Aloggen',
+'pt-login-button' => 'Aloggen',
+'pt-createaccount' => 'Benotzerkont opmaachen',
+'pt-userlogout' => 'Ausloggen',
 
 # Email sending
 'php-mail-error-unknown' => 'Onbekannte Feeler an der PHP-Mail-Funktioun',
@@ -739,8 +739,7 @@ Wann Dir en ugitt, gëtt e benotzt fir d'Benotzerattributiounen fir Är Aarbecht
 
 # Change password dialog
 'changepassword' => 'Passwuert änneren',
-'resetpass_announce' => 'Dir sidd mat engem temporären , per E-Mail geschéckte Code ageloggt.
-Fir är Umeldung ofzeschléissen, musst Dir elo hei een neit Passwuert uginn:',
+'resetpass_announce' => 'Fir är Umeldung ofzeschléissen, musst Dir elo hei een neit Passwuert uginn.',
 'resetpass_text' => '<!-- Schreiwt ären Text heihin-->',
 'resetpass_header' => 'Passwuert vum Benotzerkont änneren',
 'oldpassword' => 'Aalt Passwuert:',
@@ -756,8 +755,12 @@ Waart w.e.g. $1 ier Dir et nach eng Kéier probéiert.',
 'resetpass-submit-cancel' => 'Annulléieren',
 'resetpass-wrong-oldpass' => 'Net valabelt temporäert oder aktuellt Passwuert.
 Vläicht hutt Dir Äert Passwuert scho geännert oder en neit temporäert Passwuert ugefrot.',
+'resetpass-recycled' => 'Ännert Äert Passwuert w.e.g. op een anert Passwuert wéi Äert aktuellt Passwuert.',
+'resetpass-temp-emailed' => "Dir hutt Iech mat engem temporären E-Mail-Code ageloggt. Fir d'Aloggen ofzeschléisse musst Dir hei en neit Passwuert astellen:",
 'resetpass-temp-password' => 'Temporäert Passwuert:',
 'resetpass-abort-generic' => "D'Ännere vum Passwuert gouf duerch eng Erweiderung ofgebrach.",
+'resetpass-expired' => 'Äert Passwuert ass ofgelaf. Gitt w.e.g. en neit Passwuert u fir Iech anzeloggen.',
+'resetpass-expired-soft' => 'Äert Passwuert ass ofgelaf a muss zeréckgesat. Sicht w.e.g. elo en neit Passwuert eraus oder klickt  "{{int:resetpass-submit-cancel}}" fir et spéider zeréckzesetzen.',
 
 # Special:PasswordReset
 'passwordreset' => 'Passwuert zrécksetzen',
@@ -812,6 +815,7 @@ Waart w.e.g. $1 ier Dir et nach eng Kéier probéiert.',
 'resettokens-legend' => 'Token zrécksetzen',
 'resettokens-tokens' => 'Token:',
 'resettokens-token-label' => '$1 (aktuelle Wäert: $2)',
+'resettokens-watchlist-token' => 'Token fir de Webfeed (Atom/RSS) vun den [[Special:Watchlist|Ännerungen op Säite vun Ärer Iwwerwaachungslëscht]]',
 'resettokens-done' => 'Token zréckgesat.',
 'resettokens-resetbutton' => 'Selectionéiert Tokens zrécksetzen',
 
@@ -1136,8 +1140,7 @@ Dir kënnt dësen Ënnerscheed gesinn; Detailer fannt Dir am [{{fullurl:{{#Speci
 'revdelete-show-file-submit' => 'Jo',
 'revdelete-selected' => "'''{{PLURAL:$2|Gewielt Versioun|Gewielt Versioune}} vu(n) [[:$1]] :'''",
 'logdelete-selected' => "'''Ausgewielten {{PLURAL:$1|Evenement|Evenementer}} aus dem Logbuch:'''",
-'revdelete-text' => "'''Geläscht Versiounen oder aner geläscht Bestanddeeler sinn net méi ëffentlech zougänglech, si stinn awer weiderhin an der Versiounsgeschicht vun der Säit.'''
-Aner {{SITENAME}}-Administrateure kënnen de geläschten Inhalt oder aner geläscht Bestanddeeler weiderhi gesinn a restauréieren, et sief, et gouf festgeluecht, datt déi Limitatioune vum Accès och fir Administrateure gëllen.",
+'revdelete-text-others' => 'Aner Administrateuren op {{SITENAME}} kënnen nach ëmmer de verstoppten Inhalt gesinn an en iwwer deeselwechten Interface nees restauréieren, ausser wann zousätzlech Limitatiounen agestallt sinn.',
 'revdelete-confirm' => "Confirméiert w.e.g. datt Dir dat maache wëllt, datt Dir d'Konsequenze verstitt an datt Dir dëst an Aklang mat de [[{{MediaWiki:Policy-url}}|Richtlinne]] maacht.",
 'revdelete-suppress-text' => "Ënnerdréckung sollt '''nëmmen''' an dëse Fäll benotzt ginn:
 * Informatiounen déi beleidege kéinten
@@ -1231,7 +1234,7 @@ Denkt w.e.g drunn datt d'Navigatiounslinken d'Wiel vun de Versiounen nees zréck
 'difference-title-multipage' => '$1 a(n) $2: Ënnerscheed tëscht de Säiten',
 'difference-multipage' => '(Ënnerscheed tëscht Säiten)',
 'lineno' => 'Linn $1:',
-'compareselectedversions' => 'Ausgewielte Versioune vergläichen',
+'compareselectedversions' => 'Ausgewielt Versioune vergläichen',
 'showhideselectedversions' => 'Erausgesicht Versioune weisen/verstoppen',
 'editundo' => 'zréck',
 'diff-empty' => '(Keen Ënnerscheed)',
@@ -1273,9 +1276,10 @@ Detailer fannt Dir am [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'search-result-score' => 'Relevanz: $1 %',
 'search-redirect' => '(Viruleedung $1)',
 'search-section' => '(Abschnitt $1)',
+'search-file-match' => '(Inhalt vum Fichier passt)',
 'search-suggest' => 'Mengt Dir: $1',
 'search-interwiki-caption' => 'Schwësterprojeten',
-'search-interwiki-default' => '$1 Resultater:',
+'search-interwiki-default' => 'Resultater vu(n) $1:',
 'search-interwiki-more' => '(méi)',
 'search-relatedarticle' => 'A Verbindung',
 'searcheverything-enable' => 'An allen Nummraim sichen',
@@ -1374,7 +1378,7 @@ Dëst kann net réckgängeg gemaach ginn.",
 'prefs-help-variant' => 'Är léifste Variant oder Orthographie an där Inhaltssäite vun dëser Wiki gewise solle ginn.',
 'yournick' => 'Ënnerschrëft:',
 'prefs-help-signature' => 'Bemierkungen op Diskussiounssäite solle mat "<nowiki>~~~~</nowiki>" ënnerschriwwe ginn. Dëst gëtt dann an Är Ënnerschrëft an en Zäitstempel ëmgewandelt.',
-'badsig' => "D'Syntax vun Ã¤rer Ã\8bnnerschëft ass net korrekt; iwwerpréift w.e.g. Ã¤ren HTML Code.",
+'badsig' => "D'Syntax vun Ã\84rer Ã\8bnnerschrëft ass net korrekt; iwwerpréift w.e.g. den HTML Code.",
 'badsiglength' => 'Är Ënnerschrëft ass ze laang.
 Si muss manner wéi $1 {{PLURAL:$1|Zeechen|Zeechen}} hunn.',
 'yourgender' => 'Wéi wëllt Dir beschriwwe ginn?',
@@ -1598,14 +1602,26 @@ Dës Informatioun ass ëffentlech.",
 'recentchanges-legend-heading' => "'''Legend:'''",
 'recentchanges-legend-newpage' => '(kuckt och [[Special:NewPages|Lëscht vun den neie Säiten]])',
 'recentchanges-legend-plusminus' => "''(±123)''",
-'rcnotefrom' => "Ugewise ginn d'Ännerunge vum '''$2''' un (maximal '''$1''' Ännerunge gi gewisen).",
+'rcnotefrom' => "Ugewise ginn d'Ännerunge vum <strong>$2</strong> un (maximal <strong>$1</strong> Ännerunge gi gewisen).",
 'rclistfrom' => 'Nei Ännerunge vu(n) $1 u weisen',
 'rcshowhideminor' => 'Kleng Ännerunge $1',
+'rcshowhideminor-show' => 'Weisen',
+'rcshowhideminor-hide' => 'Verstoppen',
 'rcshowhidebots' => 'Botte $1',
+'rcshowhidebots-show' => 'Weisen',
+'rcshowhidebots-hide' => 'Verstoppen',
 'rcshowhideliu' => 'Ugemellt Benotzer $1',
+'rcshowhideliu-show' => 'Weisen',
+'rcshowhideliu-hide' => 'Verstoppen',
 'rcshowhideanons' => 'Anonym Benotzer $1',
+'rcshowhideanons-show' => 'Weisen',
+'rcshowhideanons-hide' => 'Verstoppen',
 'rcshowhidepatr' => 'iwwerwaacht Ännerunge $1',
+'rcshowhidepatr-show' => 'Weisen',
+'rcshowhidepatr-hide' => 'Verstoppen',
 'rcshowhidemine' => 'Meng Ännerunge $1',
+'rcshowhidemine-show' => 'Weisen',
+'rcshowhidemine-hide' => 'Verstoppen',
 'rclinks' => 'Déi lescht $1 Ännerunge vun de leschten $2 Deeg weisen.<br />$3',
 'diff' => 'Ënnerscheed',
 'hist' => 'Versiounen',
@@ -1732,6 +1748,8 @@ Wann Dir dëse Fichier trotzdeem eropluede wëllt da gitt w.e.g. zréck a luet d
 'uploaddisabledtext' => "D'Eropluede vu Fichieren ass ausgeschalt.",
 'php-uploaddisabledtext' => "D'Eropluede vu Fichieren ass am PHP desaktivéiert. Kuckt w.e.g. d'Astellung ''file_uploads'' no.",
 'uploadscripted' => 'An dësem Fichier ass HTML- oder Scriptcode, dee vun engem Webbrowser falsch interpretéiert kéint ginn.',
+'uploadscriptednamespace' => 'An dësem SVG-Fichier ass en illegalen Nummraum "$1"',
+'uploadinvalidxml' => 'Den XML am eropgelueden Fichier konnt net verschafft ginn.',
 'uploadvirus' => 'An dësem Fichier ass ee Virus! Detailer: $1',
 'uploadjava' => "An dësem ZIP-Fichier ass e JAVA CLASS-Fichier dran.
 D'Eropluede vu JAVA-Fichieren ass net erlaabt, well si d'Ëmgoe vu Sécherheetsmoossnamen erméigleche kënnen.",
@@ -1935,7 +1953,7 @@ Dir kënnt seng Beschreiwung op senger [$2 Beschreiwungssäit] änneren.',
 'filerevert-defaultcomment' => "zréckgesat op d'Versioun vum $1, $2 Auer",
 'filerevert-submit' => 'Zrécksetzen',
 'filerevert-success' => "'''[[Media:$1|$1]]''' gouf op d'[$4 Versioun vum $2, $3 Auer] zréckgesat.",
-'filerevert-badversion' => 'Et gëtt keng Versioun vun deem Fichier mat der Zäitinformatioun déi Dir uginn hutt.',
+'filerevert-badversion' => 'Et gëtt keng vireg lokal Versioun vun deem Fichier mat der Zäitinformatioun déi Dir uginn hutt.',
 
 # File deletion
 'filedelete' => 'Läsch "$1"',
@@ -2057,7 +2075,7 @@ An all Rei sti Linken zur éischter an zweeter Viruleedung, souwéi d\'Zil vun d
 'uncategorizedimages' => 'Biller ouni Kategorie',
 'uncategorizedtemplates' => 'Schablounen ouni Kategorie',
 'unusedcategories' => 'Net benotzt Kategorien',
-'unusedimages' => 'Net benotzt Biller',
+'unusedimages' => 'Net benotzt Fichieren',
 'popularpages' => 'Populär Säiten',
 'wantedcategories' => 'Gewënscht Kategorien',
 'wantedpages' => 'Gewënscht Säiten',
@@ -2075,17 +2093,28 @@ An all Rei sti Linken zur éischter an zweeter Viruleedung, souwéi d\'Zil vun d
 'mostrevisions' => 'Säite mat de meeschte Versiounen',
 'prefixindex' => 'All Säite mat Prefix',
 'prefixindex-namespace' => 'All Säite mat Prefix (Nummraum $1)',
+'prefixindex-strip' => 'Prefix an der Lëscht ewechhuelen',
 'shortpages' => 'Kuerz Säiten',
 'longpages' => 'Laang Säiten',
 'deadendpages' => 'Sakgaasse-Säiten',
 'deadendpagestext' => 'Dës Säite si mat kenger anerer Säit op {{SITENAME}} verlinkt.',
 'protectedpages' => 'Gespaart Säiten',
 'protectedpages-indef' => 'Nëmme onbegrenzt-gespaarte Säite weisen',
+'protectedpages-summary' => "Op dëser Säit stinn all déi Säiten déi elo protegéiert sinn. Fir d'Lëscht vun de Säiten déi fir d'Uleeë gespaart sinn, kuckt [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
 'protectedpages-cascade' => 'Nëmme Säiten déi duerch Kaskade gespaart sinn',
 'protectedpages-noredirect' => 'Viruleedunge verstoppen',
 'protectedpagesempty' => 'Elo si keng Säite mat dëse Parameteren gespaart.',
+'protectedpages-timestamp' => 'Zäitstempel',
+'protectedpages-page' => 'Säit',
+'protectedpages-expiry' => 'Spär bis',
+'protectedpages-performer' => 'Spär duerch de Benotzer',
+'protectedpages-params' => 'Parameter vun der Spär',
+'protectedpages-reason' => 'Grond',
+'protectedpages-unknown-timestamp' => 'Onbekannt',
+'protectedpages-unknown-performer' => 'Onbekannte Benotzer',
 'protectedtitles' => 'Gespaarten Titel',
-'protectedtitlesempty' => 'Zur Zäit si mat de Parameteren déi Dir uginn hutt keng Säite fir neit Uleeë gespaart.',
+'protectedtitles-summary' => 'Dës Titele goufe gespaart an et ka keng Säit mat esou engem Titel gemaach ginn.',
+'protectedtitlesempty' => 'Elo si mat de Parameteren déi Dir uginn hutt keng Säite fir neit Uleeë gespaart.',
 'listusers' => 'Benotzerlëscht',
 'listusers-editsonly' => 'Nëmme Benotzer mat Ännerunge weisen',
 'listusers-creationsort' => 'Nom Datum vum Uleeën zortéieren',
@@ -2153,7 +2182,7 @@ Dir kënnt d'Siche limitéieren wann Dir e Log-Typ, e Benotzernumm (case-senisit
 [[Special:UnusedCategories|Netbenotzt Kategorië]] ginn hei net gewisen.
 Kuckt och [[Special:WantedCategories|Gewënscht Kategorien]].',
 'categoriesfrom' => 'Weis Kategorien ugefaange bei:',
-'special-categories-sort-count' => 'No der Zuel zortéieren',
+'special-categories-sort-count' => 'no der Zuel zortéieren',
 'special-categories-sort-abc' => 'alphabetesch zortéieren',
 
 # Special:DeletedContributions
@@ -2197,7 +2226,7 @@ Et ginn [[{{MediaWiki:Listgrouprights-helppage}}|zousätzlech Informatiounen]] i
 'listgrouprights-rights' => 'Rechter',
 'listgrouprights-helppage' => 'Help:Grupperechter',
 'listgrouprights-members' => '(Lëscht vun de Memberen)',
-'listgrouprights-addgroup' => 'Kann {{PLURAL:$2|dës Grupp|dës Gruppen}} derbäisetzen: $1',
+'listgrouprights-addgroup' => 'Dës {{PLURAL:$2|Grupp|Gruppen}} derbäisetzen: $1',
 'listgrouprights-removegroup' => 'Kann {{PLURAL:$2|dëse Gruppe|dës Gruppen}} ewechhuelen: $1',
 'listgrouprights-addgroup-all' => 'Kann all Gruppen derbäisetzen',
 'listgrouprights-removegroup-all' => 'Ka Benotzer aus alle Gruppen eraushuelen',
@@ -2208,7 +2237,7 @@ Et ginn [[{{MediaWiki:Listgrouprights-helppage}}|zousätzlech Informatiounen]] i
 
 # Email user
 'mailnologin' => 'Keng E-Mailadress',
-'mailnologintext' => 'Dir musst [[Special:UserLogin|ugemellt]] sinn an eng gëlteg E-Mail Adress an Äre [[Special:Preferences|Astellungen]] aginn hunn, fir engem anere Benotzer eng E-Mail ze schécken.',
+'mailnologintext' => 'Dir musst [[Special:UserLogin|ageloggt]] sinn an eng gëlteg E-Mail Adress an Ären [[Special:Preferences|Astellungen]] aginn hunn, fir engem anere Benotzer eng E-Mail ze schécken.',
 'emailuser' => 'Dësem Benotzer eng E-Mail schécken',
 'emailuser-title-target' => '{{GENDER:$1|Dëser Benotzerin|Dësem Benotzer}} eng Mail schécken',
 'emailuser-title-notarget' => 'Dem Benotzer eng E-Mail schécken',
@@ -2305,7 +2334,7 @@ E-Mail: $PAGEEDITOR_EMAIL
 Wiki: $PAGEEDITOR_WIKI
 
 Et gi soulaang keng weider Maile geschéckt, bis Dir d\'Säit nees emol besicht hutt wärend deem Dir ageloggt sidd.
-Op Ärer Iwwerwaachungslëscht kënnt Dir all Benoorichtigungsmarkeren zesummen zErécksetzen.
+Op Ärer Iwwerwaachungslëscht kënnt Dir all Benoorichtigungsmarkeren zesummen zrécksetzen.
 
 
 Äre frëndleche {{SITENAME}} Benoriichtigungssystem
@@ -2363,14 +2392,14 @@ D'Läsche vu sou Säite gouf limitéiert fir ongewollte Stéierungen op {{SITENA
 'delete-warning-toobig' => "Dës Säit huet eng laang Versiounsgeschicht, méi wéi $1 {{PLURAL:$1|Versioun|Versiounen}}.
 D'Läschen dovu kann zu Stéierungen am Fonctionnement vun {{SITENAME}} féieren;
 dës Aktioun soll mat Virsiicht gemaach ginn.",
-'deleting-backlinks-warning' => "'''Opgepasst:''' Aner Säite linken op déi Säit déi Dir am Gaang sidd ze läschen oder déi säit Déi Dir am Gaang sidd ze läschen ass an aner Säiten agebonn.",
+'deleting-backlinks-warning' => "'''Opgepasst:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Aner Säite]] linken op déi Säit déi Dir am Gaang sidd ze läschen oder déi Säit Déi Dir am Gaang sidd ze läschen ass an aner Säiten agebonn.",
 
 # Rollback
 'rollback' => 'Ännerungen zrécksetzen',
 'rollback_short' => 'Zrécksetzen',
 'rollbacklink' => 'Zrécksetzen',
-'rollbacklinkcount' => '{{PLURAL:$1|Eng Ännerung|$1 Ännerungen}} zerécksetzen',
-'rollbacklinkcount-morethan' => 'méi wéi {{PLURAL:$1|Eng Ännerung|$1 Ännerungen}} zerécksetzen',
+'rollbacklinkcount' => '{{PLURAL:$1|Eng Ännerung|$1 Ännerungen}} zrécksetzen',
+'rollbacklinkcount-morethan' => 'méi wéi {{PLURAL:$1|Eng Ännerung|$1 Ännerungen}} zrécksetzen',
 'rollbackfailed' => 'Zrécksetzen huet net geklappt',
 'cantrollback' => 'Lescht Ännerung kann net zréckgesat ginn. De leschten Auteur ass deen eenzegen Auteur vun dëser Säit.',
 'alreadyrolled' => 'Déi lescht Ännerung vun der Säit [[:$1]] vum [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);; kann net zeréckgesat ginn;
@@ -2538,6 +2567,7 @@ $1',
 'sp-contributions-search' => 'No Kontributioune sichen',
 'sp-contributions-username' => 'IP-Adress oder Benotzernumm:',
 'sp-contributions-toponly' => 'Nëmmen Ännerunge weisen déi déi lescht Versioun sinn',
+'sp-contributions-newonly' => 'Nëmmen Ännerunge weisen déi Säiten uleeën',
 'sp-contributions-submit' => 'Sichen',
 
 # What links here
@@ -2638,7 +2668,7 @@ Kuckt d'[[Special:BlockList|Spär-Lëscht]] fir all Spären nozekucken.",
 'change-blocklink' => 'Spär änneren',
 'contribslink' => 'Kontributiounen',
 'emaillink' => 'Mail schécken',
-'autoblocker' => 'Dir sidd automatesch gespaart well dir eng IP Adress mam "[[User:$1|$1]]" deelt.
+'autoblocker' => 'Dir sidd automatesch gespaart well Är IP-Adress rezent vum "[[User:$1|$1]]" benotzt gouf.
 De Grond dee fir d\'Spär vum $1 ugi gouf ass: "$2".',
 'blocklogpage' => 'Spärlëscht',
 'blocklog-showlog' => "Dëse Benotzer war virdru gespaart. D'Lëscht vun de Späre ass als Referenz hei ënnendrënner:",
@@ -4026,6 +4056,4 @@ Faktesch alles wat tëscht duebelen Accolade steet gëtt ausgewäert.',
 'expand_templates_generate_rawhtml' => 'HTML-Format weisen',
 'expand_templates_preview' => 'Kucken ouni ofzespäicheren',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
 );
index abf4cfc..845c41d 100644 (file)
@@ -191,7 +191,6 @@ $messages = array(
 'vector-action-protect' => 'Хуьн',
 'vector-action-undelete' => 'ТуькӀуьр хъувун',
 'vector-action-unprotect' => 'Хуьн дегишарун',
-'vector-simplesearch-preference' => 'Гегьенш жагъурунин рикӀел гъун кутун (кьилди «Вектор» акунар патал)',
 'vector-view-create' => 'ТуькӀуьрун',
 'vector-view-edit' => 'Дуьзарин',
 'vector-view-history' => 'Тарихдиз килигун',
@@ -238,7 +237,7 @@ $messages = array(
 'articlepage' => 'Къене авайбурун ччиндиз килигун',
 'talk' => 'Веревирд авун',
 'views' => 'Килигунар',
-'toolbox' => 'Алатрин кьвати',
+'toolbox' => 'Алатар',
 'userpage' => 'Уртахдин ччиниз килигун',
 'projectpage' => 'Проектдин ччиниз килигун',
 'imagepage' => 'Файлдин ччиниз килигун',
@@ -509,7 +508,7 @@ $messages = array(
 'history-fieldset-title' => 'Тарихдиз килигун',
 'history-show-deleted' => 'Анжах алуднавайбур',
 'histfirst' => 'Виридалайни цIуру',
-'histlast' => 'Ð\9cÑ\83кÑ\8cваÑ\80а Ñ\85Ñ\8cайи',
+'histlast' => 'Ð\93илан Ñ\86lийига',
 'historyempty' => '(ичIи)',
 
 # Revision feed
@@ -565,7 +564,7 @@ $messages = array(
 'nextn' => 'Гуьгъуьнин {{PLURAL:$1|$1}}',
 'prevn-title' => 'Вилик фейи  $1 {{PLURAL:$1|1=нетижа|нетижаяр}}',
 'nextn-title' => 'КЪведай $1 {{PLURAL:$1|1=нетижа|нетижаяр}}',
-'shown-title' => 'ЧÑ\87ина $1 {{PLURAL:$1|1=неÑ\82ижа|неÑ\82ижа}} ÐºÑ\8aалÑ\83Ñ\80Ñ\83н',
+'shown-title' => 'Ð\9aÑ\8aалÑ\83Ñ\80ин $1 {{PLURAL:$1|1=неÑ\82ижа|неÑ\82ижаÑ\8fÑ\80}} Ñ\87Ñ\8aина',
 'viewprevnext' => 'Килигун ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''И вики-проектда \"[[:\$1]]\" тlвар алай ччин ава.'''",
 'searchmenu-new' => "'''И вики-проектда «[[:$1]]» ччин туькӀуьрун!'''",
@@ -579,7 +578,7 @@ $messages = array(
 'searchprofile-images-tooltip' => 'Файлар жугъура',
 'searchprofile-everything-tooltip' => 'Вири ччинра къекъуьгъ (веревирдрин ччинар кваз)',
 'searchprofile-advanced-tooltip' => 'Ганвай тlварарин генгвилера къекъуьгъ',
-'search-result-size' => '$1 ({{PLURAL:$2|1=1 гаф|$2 гаф}})',
+'search-result-size' => '$1 ({{PLURAL:$2|1=1 гаф|$2 гафap}})',
 'search-result-category-size' => '{{PLURAL:$1|1=1 элемент|$1 элементар}} ({{PLURAL:$2|1=1 агъакатегория|$2 агъакатегорияр}}, {{PLURAL:$3|1=1 файл|$3 файлар}})',
 'search-redirect' => '(рахкъурун $1)',
 'search-section' => '(пай $1)',
@@ -738,7 +737,7 @@ $messages = array(
 'hide' => 'Чуьнуьхун',
 'show' => 'Къалурун',
 'minoreditletter' => 'гъ',
-'newpageletter' => 'ЦI',
+'newpageletter' => 'Цl',
 'boteditletter' => 'б',
 'rc_categories_any' => 'ГЬар са',
 'rc-enhanced-expand' => 'Куьлуь-шуьлуьяр къалурун (JavaScript герекзава)',
@@ -817,7 +816,7 @@ $messages = array(
 'filehist-user' => 'Уртах',
 'filehist-dimensions' => 'Кьадарар',
 'filehist-filesize' => 'Файлдин кьадар',
-'filehist-comment' => 'Ð\9aÑ\8aейд',
+'filehist-comment' => 'Ð\92еÑ\80евиÑ\80д',
 'filehist-missing' => 'Файл авачиз я',
 'imagelinks' => 'Файл кардик кутун',
 'linkstoimage' => 'Къведай {{PLURAL:$1 | ччин | $1 ччинар}} гьа и файлдиз элячlзава',
index d527c94..27e4dc2 100644 (file)
@@ -38,16 +38,13 @@ $specialPageAliases = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Sulinia lias:',
-'tog-justify' => 'Ajusta paragrafes',
 'tog-hideminor' => 'Asconda editas minor en cambias resente',
 'tog-extendwatchlist' => 'Grandi la lista oservada per mostra tota cambias aplicable',
 'tog-usenewrc' => 'Aumenta cambias resente (JavaScript)',
 'tog-numberheadings' => 'Dona automatica numeros a titula',
 'tog-showtoolbar' => 'Mostra la bara de utiles per edita (JavaScript)',
 'tog-editondblclick' => 'Edita pajes a du clicas (JavaScript)',
-'tog-editsection' => 'Engrana la edita de sesion via lias de {edita}.',
 'tog-editsectiononrightclick' => 'Engrana la edita de sesion par clica a la destra a titulos de sesion (JavaScript)',
-'tog-showtoc' => 'Mostra la table de contenis (per pajes con plu ce tre titulos)',
 'tog-rememberpassword' => 'Memora me sinia per entra a esta computador (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'Junta la pajes ce me ia creada a me lista de pajes oservada',
 'tog-watchdefault' => 'Junta pajes ce me ia edita a me lista de pajes oservada',
@@ -424,7 +421,6 @@ La arcivo de sutraes per esta paje es asi per conveni:",
 'lineno' => 'Linia $1:',
 'compareselectedversions' => 'Compare varias elejeda',
 'editundo' => 'desfa',
-'diff-multi' => '({{PLURAL:$1|$1 revise|$1 revises}} medial no mostrada.)',
 
 # Search results
 'searchresults' => 'Resultas de xerca',
index 2e17eb7..7f36196 100644 (file)
@@ -158,7 +158,6 @@ $messages = array(
 'vector-action-protect' => 'Ssiba',
 'vector-action-undelete' => 'Zawo',
 'vector-action-unprotect' => 'Kyusa ebikugizo',
-'vector-simplesearch-preference' => "Wiki esobole okukuwa amagezi ku by'onoonya (kino kikolera mu ndabika ya Vector yokka)",
 'vector-view-create' => 'Lukolewo',
 'vector-view-edit' => 'Kyusa',
 'vector-view-history' => 'Ennanda ya fayiro eno',
index 7cfb993..891b0cf 100644 (file)
@@ -304,7 +304,6 @@ $messages = array(
 'vector-action-protect' => 'Besjirm',
 'vector-action-undelete' => 'Plaats trök',
 'vector-action-unprotect' => 'Anger beveiliging',
-'vector-simplesearch-preference' => "Sjakel nuuj zeuksuggesties in (allein veur 't vectoroeterlik)",
 'vector-view-create' => 'Maak aan',
 'vector-view-edit' => 'Bewirk',
 'vector-view-history' => 'Bekiek de gesjiedenis',
@@ -972,8 +971,6 @@ achtergrönj zeen meugelik te vinjen in 't [{{fullurl:{{#Special:Log}}/suppress|
 'revdelete-show-file-submit' => 'Jao',
 'revdelete-selected' => "'''Geselecteerde {{PLURAL:$2|bewerking|bewerkinge}} van '''[[:$1]]''':'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Geselecteerde log gebeurtenis|Geselecteerde log gebeurtenisse}}:'''",
-'revdelete-text' => "'''Gewisjde bewerkinge zeen zichbaar in de gesjiedenis, maar de inhoud is neet langer publiek toegankelik.'''
-Anger beheerders van {{SITENAME}} kinne de verborge inhoud benäöjere en de verwiedering ongedaon make mit behölp van dit sjerm, tenzij d'r additionele restricties gelje die zeen ingesteld door de systeembeheerder.",
 'revdelete-confirm' => "Bevestig des se dit wils doon, des se de consequenties begrieps en des se dit deis in euvereinstömming mit 't geljendj [[{{MediaWiki:Policy-url}}|beleid]].",
 'revdelete-suppress-text' => "Versies verbèrge deentj '''allein''' gebroek te waere in de volgende gevalle:
 * Ongepaste perseunlike informatie
index 81afd0f..0c839f6 100644 (file)
@@ -307,7 +307,6 @@ Legend: '''({{int:cur}})''' = vaiţīd līdzinţõmizõks lǟndz redaktsijõks,,
 'lineno' => 'Rīnda $1:',
 'compareselectedversions' => 'Līdzinţ vēļdõt redaktsijḑi',
 'editundo' => 'kištānt jarā',
-'diff-multi' => '({{PLURAL:$1|Īdtõ|$1}} vail-vȯlbizt {{PLURAL:$2|īd|$2}} kȭlbatijiz redaktsijõ äb nägţõbõd.)',
 
 # Search results
 'searchresults' => 'Vȯtšimiz rezultātõd',
index ee15cd9..4e66e64 100644 (file)
@@ -114,7 +114,6 @@ $messages = array(
 'vector-action-protect' => 'Kobátela',
 'vector-action-undelete' => 'Kolímwisa tɛ̂',
 'vector-action-unprotect' => ' Kobátela tɛ̂',
-'vector-simplesearch-preference' => 'Kolamusa bokáni bwa boluki bobakísámí (káka na Vector)',
 'vector-view-create' => 'Kokela',
 'vector-view-edit' => 'Kobɔngisa',
 'vector-view-history' => 'Komɔ́nisa mokóló',
@@ -416,7 +415,6 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'recentchanges-legend' => 'Mapɔni ma mbóngwana ya nsúka',
 'recentchanges-feed-description' => 'Kolanda mbóngwana ya nsúka ya wiki o ebale eye.',
 'recentchanges-label-minor' => 'Ezalí mbóngwana ya mokɛ́',
-'rcnote' => "Áwa o nsé {{PLURAL:$1|ezalí mbóngwana '''1''' ya nsúka|izalí mbóngwana '''$1''' ya nsúka}} o {{PLURAL:$2|mokɔlɔ|mikɔlɔ '''$2'''}} ya nsúka, o ntángo $5 o mokɔlɔ $4.",
 'rcshowhideminor' => '$1 mbóngwana ya mokɛ́',
 'rcshowhidebots' => '$1 barobot',
 'rcshowhideliu' => '$1 basáleli bamíkitólí',
@@ -529,7 +527,6 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'watchthispage' => 'Kolanda lonkásá óyo',
 'unwatch' => 'Kolanda tɛ́',
 'watchlist-details' => '{{PLURAL:$1|Lonkásá $1 elandámí|Nkásá $1 bilandámí}}, longola nkásá ya ntembe.',
-'wlnote' => "Áwa o nsé {{PLURAL:$1|ezalí mbóngwana ya nsúka|izalí mbóngwana '''$1''' ya nsúka}} o {{PLURAL:$2|ngonga|ngonga '''$2'''}} ya nsúka.",
 'wlshowlast' => 'Komɔ́nisa ngónga $1 ya nsúka, mikɔlɔ $2 mya nsúka tǒ $3',
 
 # Displayed when you click the "watch" button and it is in the process of watching
index 1e5de0f..2298a61 100644 (file)
@@ -104,9 +104,7 @@ $messages = array(
 'tog-numberheadings' => 'ໜາຍເລກຫົວຂໍ້ແບບອັດຕະໂນມັດ',
 'tog-showtoolbar' => 'ສະແດງ ທູລບາດັດແກ້ (JavaScript)',
 'tog-editondblclick' => 'ໃຫ້ສາມາດດັດແກ້ ໂດຍ ດັບເບິລ໌ ຄລິກ (JavaScript)',
-'tog-editsection' => 'ໃຫ້ສາມາດ ດັດແກ້ເປັນພາກ ໂດຍ ກົດລິ້ງຄ໌ [ດັດແກ້]',
 'tog-editsectiononrightclick' => 'ໃຫ້ສາມາດ ດັດແກ້ ໂດຍກົດປຸ່ມຂວາ ຂອງເມົາສ໌ ຢູ່ <br /> ຫົວຂໍ້ຂອງພາກ (JavaScript)',
-'tog-showtoc' => 'ສະແດງເນື້ອໃນ (ຂອງ ໝ້າທີ່ມີຫຼາຍກວ່າ 3 ໜາຍເລກຫົວຂໍ້)',
 'tog-rememberpassword' => 'ຈົດຈໍາການເຊັນເຂົ້າຂອງຂ້ອຍ ຢູ່ ຄອມພິວເຕີໜ່ວຍນີ້ (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'ເພີ່ມ ໜ້າທີ່ຂ້ອຍສ້າງ ເຂົ້າໃນ ລາຍການຕິດຕາມ ຂອງ ຂ້ອຍ',
 'tog-watchdefault' => 'ເພີ່ມໜ້າ ທີ່ ຂ້ອຍດັດແກ້ ໃສ່ ລາຍຕິດຕາມ ຂອງ ຂ້ອຍ',
@@ -495,7 +493,6 @@ $messages = array(
 'rows' => 'ແຖວ:',
 'columns' => 'ຖັນ:',
 'searchresultshead' => 'ຊອກຫາ',
-'resultsperpage' => 'ຈຳນວນຜົນການຊອກເຫັນ ຕໍ່ ໜ້າ:',
 'recentchangesdays' => 'ຈຳນວນມື້ສະແດງໃນການປ່ຽນແປງຫຼ້າສຸດ:',
 'recentchangescount' => 'ຈຳນວນການດັດແກ້ສະແດງໃນການປ່ຽນແປງຫຼ້າສຸດ:',
 'savedprefs' => 'ການຕັ້ງຄ່າຂອງທ່ານໄດ້ຖືກບັນທຶກແລ້ວ.',
index 10a15a4..324eb4f 100644 (file)
 $messages = array(
 # User preference toggles
 'tog-underline' => "Tumana ling'ko:",
-'tog-justify' => 'Singanyekile silamina',
 'tog-usenewrc' => 'Inenset petuho nca (JavaScript)',
 'tog-numberheadings' => 'Auto-palo mukunguna',
 'tog-showtoolbar' => "Kamukile hloli ye ng'i toolbar (bulukezi JavaScript)",
 'tog-editondblclick' => "Hloli ye ng'i petulo di 'klik' dubo (JavaScript)",
-'tog-editsection' => "Nyembulisize [hloli ye ng'i] di akes di lyangutukezi ling'ki",
 'tog-rememberpassword' => 'Askevusize zwa menuhile kwa bye kompyuta (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'Pusize petulo a hloli di zwa mukoloko di kentezi',
 'tog-watchdefault' => "Pusize petulo a hloli ye ng'i di zwa mukoloko di kentezi",
@@ -429,7 +427,6 @@ Informasi: (bye) = petuho a nca selt,
 'lineno' => 'Lani $1:',
 'compareselectedversions' => 'Bapisize',
 'editundo' => "afi hloli ye ng'i",
-'diff-multi' => '({{PLURAL:$1|1 selt amebusilize|$1 selt amebusilize}} ni kamukile.)',
 
 # Search results
 'searchresults' => 'Fatukile kamukile',
@@ -458,7 +455,6 @@ Informasi: (bye) = petuho a nca selt,
 'rows' => 'Roo:',
 'columns' => 'Kalom:',
 'searchresultshead' => 'Fatukile',
-'resultsperpage' => 'Hit di petulo:',
 'default' => 'auto',
 'prefs-files' => 'Imegini',
 'youremail' => 'Imeli:',
index bb38c2c..63b9f04 100644 (file)
@@ -177,7 +177,6 @@ $messages = array(
 'vector-action-protect' => 'حمايت بكيد',
 'vector-action-undelete' => 'حذف نبيئني',
 'vector-action-unprotect' => 'حمايت آلشت بكيد',
-'vector-simplesearch-preference' => 'یه گل اوزار پی جوری ساده نه دروس بکید',
 'vector-view-create' => 'راس كردن',
 'vector-view-edit' => 'ويرايشت',
 'vector-view-history' => 'ديئن ويرگار',
@@ -262,8 +261,8 @@ $messages = array(
 'mainpage' => 'سرآسونه',
 'mainpage-description' => 'سرآسونه',
 'policy-url' => 'پروجه:خط و مش',
-'portal' => 'تÙ\84Ú¯Ù\87 Ø¬Ù\85ی',
-'portal-url' => 'پروجه:تلگه جمی',
+'portal' => 'درآسÙ\88Ù\86Ù\87 Ú©Ù\88Ù\85Ù\84Ù\87 Û\8cÚ©ی',
+'portal-url' => 'پروجه:تلگه کومله یکی',
 'privacy' => 'رهبرد رازداری',
 'privacypage' => 'پروجه: خط مشی راز واداشتن',
 
@@ -423,8 +422,6 @@ $1',
 'gotaccountlink' => 'اومائن',
 'userlogin-resetlink' => 'جزییات وامین اومائن تونه د ویر بردیته',
 'userlogin-resetpassword-link' => 'پاسورد د ویرتو رئته؟',
-'helplogin-url' => 'هومياری:د حالت اومائن د سيستم',
-'userlogin-helplink' => '[[{{مدیاویکی:هومیاری وامئن اومائن-یو آر ال}}|هومیاری وا مئن اومائن]]',
 'userlogin-createanother' => 'يه گل حساوهنی راست بكيد',
 'createacct-join' => 'دونسمنيا دباره خوتونه د هار وارد بكيد',
 'createacct-another-join' => 'دونسمنیا یه گل حساو د هار وارد بکید',
@@ -1072,6 +1069,7 @@ $2',
 'copyuploaddisabled' => 'سوار کردن وا یو آر ال د کار نئ.',
 'uploadfromurl-queued' => 'سوارکرد تو ها د گئ.',
 'uploaddisabledtext' => 'سوار کرد فایلیا د کار نئ.',
+'uploadinvalidxml' => 'ایکس ام الی که سوار بیه نبوئه نوتیج با.',
 'upload-source' => 'سرچشمه فایل',
 'sourcefilename' => 'سرچشمه نوم جانیا:',
 'sourceurl' => 'سرچشمه يو آر ال:',
@@ -1293,6 +1291,7 @@ $2',
 
 # Special:LinkSearch
 'linksearch-ns' => 'نوم جا:',
+'linksearch-ok' => 'پی جوری',
 'linksearch-line' => '$1 داره د $2 هوم پیوند بوئه',
 
 # Special:ListUsers
@@ -1309,6 +1308,7 @@ $2',
 'emailuser' => 'ای كارور نه ايميل كو',
 'emailuser-title-target' => 'ایمیل سی ای {{جنس:$1|کارور}}',
 'emailpage' => 'ایمیل کارور',
+'defemailsubject' => '{{نوم سیل جا}} ایمیل د کارور "$1"',
 'emailusername' => 'نوم كاروری:',
 
 # Watchlist
@@ -1322,11 +1322,14 @@ $2',
 'notanarticle' => 'مینونه هیچ بلگه ای نئ',
 'watchlist-details' => '{{جمی:$1|$1 بلگه|$1 بلگیا}} د سیل برگتو هیش بلگه قسه کردن نی .',
 'wlheader-enotif' => 'وارسیاری ایمیل فعال بیه.',
+'wlheader-showupdated' => 'بلگه یایی که د آخرین کرتی که شما دشو دیئن کردیته آلشت بینه د <strong>توپر</strong>نشون دئه بینه',
 'wlshowlast' => 'آخرین$1 ساعتیا $2و روزیا $3 نشو بیئه',
 'watchlist-options' => 'گزینیا سیل برگ',
 
 'enotif_mailer' => '{{نوم سیلجا}} وارسیاری ایمیل زننه',
+'enotif_reset' => 'همه بلگه یا دیئه بینه نشودار بکید',
 'enotif_impersonal_salutation' => '{{نوم سیلجا}} کارور',
+'enotif_lastvisited' => 'همه آلشتیا$1 د اوسه که شما د آخرین بار دیئته بوینیت.',
 
 # Delete
 'excontent' => 'مینونه :"$1" بی',
@@ -1364,6 +1367,8 @@ $2',
 'undeletelink' => 'بوين/دوواره آماده با',
 'undeleteviewlink' => 'ديئن',
 'cannotundelete' => 'زنه کردن انجوم نبی:$1',
+'undelete-search-title' => 'بلگه یا پاک بیه نه پی جوری کو',
+'undelete-search-submit' => 'پی جوری',
 'undelete-error-short' => 'خطا پاک نبیئن جانیا:$1',
 
 # Namespace form on various pages
@@ -1419,6 +1424,7 @@ $2',
 'ipblocklist' => 'كاروريا منع بيه',
 'ipblocklist-legend' => 'یه گل کارور منع بیه بجوریت',
 'blocklist-timestamp' => 'چسب ون وخت',
+'ipblocklist-submit' => 'پی جوری',
 'blocklist-nousertalk' => 'نبوئه بلگه چک چنه خوتونه ویرایشت بکید',
 'ipblocklist-empty' => 'جاگه نوم گه حالیه',
 'blocklink' => 'بسته بوئه',
@@ -1525,6 +1531,11 @@ $2',
 'tooltip-summary' => 'يه چكسته كؤچك وارد بكيد',
 'interlanguage-link-title' => '$1-$2',
 
+# Attribution
+'anonymous' => 'ناشناس {{جمی:$1|کارور|کاروریا}}  {{سیل جا}}',
+'anonuser' => '{{سیل جا}}  کارور ناشناس $1',
+'siteusers' => '{{نوم سیل جا}} {{جمی:$2|کارور|کاروریا}} $1',
+
 # Info page
 'pageinfo-language' => 'بلگه مینونه زون',
 'pageinfo-content-model' => 'شلگ مینونه بلگه',
@@ -1551,10 +1562,12 @@ $2',
 'newimages' => 'عسگدونی جانیایا تازه',
 'newimages-summary' => 'ای بلگه یا ویجه همه جانیایا سوار بیه نه نشو می ئین.',
 'newimages-label' => 'نوم جانیا(یا بشقی د وه):',
+'ilsubmit' => 'پی جوری',
 'sp-newimages-showfrom' => 'جانیایا تازه نه که $2 ، $2 شرو بینه نشو بیه',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'days' => '{{جمی:$1|1$ روز|$1 روز}}',
+'months' => '{{جمی:$1|$1 ما|$1 مایا}}',
 'years' => '{{جمی:$1|$1 سال|$1 سال}}',
 
 # Human-readable timestamps
@@ -1595,6 +1608,7 @@ $2',
 'exif-jpegfilecomment' => 'ویر و باور فایل پی ان جی',
 'exif-citycreated' => 'شهری که عسگ دش گرته بیه',
 'exif-citydest' => 'شهر دیار بیه',
+'exif-fixtureidentifier' => 'نوم ثاوت',
 'exif-languagecode' => 'زون',
 'exif-datetimeexpires' => 'وا نها دش استفاده نبوئه',
 'exif-pngfilecomment' => 'ویر و باور فایل جی پی ان جی',
@@ -1682,6 +1696,9 @@ $2',
 # Feedback
 'feedback-close' => 'انجوم بی',
 
+# Search suggestions
+'searchsuggest-search' => 'پی جوری',
+
 # API errors
 'api-error-badaccess-groups' => 'شما سی سوار کرد جانیایا د ای ویکی اجازه ناریت.',
 'api-error-copyuploaddisabled' => 'سوار کردن وا یو آر ال دی ای سرور غیرفعال بیه.',
@@ -1696,6 +1713,4 @@ $2',
 # Special:ExpandTemplates
 'expand_templates_remove_comments' => 'جا وه جا بیئن ویر و باوریا',
 
-# Unknown messages
-'uploadinvalidxml' => 'ایکس ام الی که سوار بیه نبوئه نوتیج با.',
 );
index ea39edf..9f26b5c 100644 (file)
@@ -25,6 +25,7 @@
  * @author Pdxx
  * @author Perkunas
  * @author Pėstininkas
+ * @author Reedy
  * @author Siggis
  * @author Tomasdd
  * @author Urhixidur
@@ -347,7 +348,6 @@ $messages = array(
 'vector-action-protect' => 'Užrakinti',
 'vector-action-undelete' => 'Atkurti',
 'vector-action-unprotect' => 'Keisti apsaugą',
-'vector-simplesearch-preference' => 'Supaprastinta paieška (tik „Vector“ išvaizda)',
 'vector-view-create' => 'Kurti',
 'vector-view-edit' => 'Redaguoti',
 'vector-view-history' => 'Istorija',
@@ -624,8 +624,6 @@ Nepamirškite pakeisti savo [[Special:Preferences|{{SITENAME}} nustatymų]].',
 'gotaccountlink' => 'Prisijunkite',
 'userlogin-resetlink' => 'Pamiršote savo prisijungimo duomenis?',
 'userlogin-resetpassword-link' => 'Nustatykite slaptažodį iš naujo',
-'helplogin-url' => 'Help:Prisijungimas',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Prisijungimo pagalba]]',
 'userlogin-createanother' => 'Sukurti kitą paskyrą',
 'createacct-join' => 'Įveskite savo informaciją žemiau.',
 'createacct-another-join' => 'Įveskite naujos paskyros informaciją žemiau.',
@@ -717,6 +715,10 @@ Palaukite prieš bandant vėl.',
 'login-abort-generic' => 'Jūsų prisijungimas buvo nesėkmingas - Nutraukta',
 'loginlanguagelabel' => 'Kalba: $1',
 'suspicious-userlogout' => 'Jūsų prašymas atsijungti buvo atmestas, nes, atrodo, jį klaidingai išsiuntė naršyklė arba spartinantysis tarpinis serveris.',
+'pt-login' => 'Prisijungti',
+'pt-login-button' => 'Prisijungti',
+'pt-createaccount' => 'Sukurti paskyrą',
+'pt-userlogout' => 'Atsijungti',
 
 # Email sending
 'php-mail-error-unknown' => 'Nežinoma klaida PHP mail() funkcijoje',
@@ -1086,22 +1088,20 @@ Kaip administratorius, jūs galite ją pamatyti; daugiau detalių gali būti [{{
 'revdelete-show-file-submit' => 'Taip',
 'revdelete-selected' => "'''{{PLURAL:$2|Pasirinkta [[:$1]] versija|Pasirinktos [[:$1]] versijos}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Pasirinktas istorijos įvykis|Pasirinkti istorijos įvykiai}}:'''",
-'revdelete-text' => "'''Ištrintos versijos bei įvykiai vis tiek dar bus rodomi puslapio istorijoje ir specialiųjų veiksmų sąraše, bet jų turinio dalys nebus viešai prieinamos.'''
-Kiti administratoriai iš {{SITENAME}} vis tiek galės pasiekti paslėptą turinį ir galės jį atkurti per tą pačią sąsają, nebent yra nustatyti papildomi apribojimai.",
 'revdelete-confirm' => 'Prašome patvirtinti, kad jūs tai ketinate padaryti, kad jūs suprantate padarinius, ir kad jūs tai darote pagal [[{{MediaWiki:Policy-url}}|politiką]].',
 'revdelete-suppress-text' => "Ištrynimas turėtų būti taikomas '''tik''' šiais atvejais:
 * Netinkama asmeninė informacija
 *: ''namų adresai, telefonų numeriai, asmens kodai ir t. t.''",
 'revdelete-legend' => 'Nustatyti matomumo apribojimus:',
-'revdelete-hide-text' => 'Slėpti versijos tekstą',
+'revdelete-hide-text' => 'Versijos tekstas',
 'revdelete-hide-image' => 'Slėpti failo turinį',
 'revdelete-hide-name' => 'Slėpti veiksmą ir paskirtį',
-'revdelete-hide-comment' => 'Slėpti redagavimo komentarą',
-'revdelete-hide-user' => 'Slėpti redagavusiojo naudotojo vardą ar IP adresą',
+'revdelete-hide-comment' => 'Keitimo komentaras',
+'revdelete-hide-user' => 'Redagavusiojo naudotojo vardas/IP adresas',
 'revdelete-hide-restricted' => 'Nuslėpti duomenis nuo adminstratorių kaip ir nuo kitų',
 'revdelete-radio-same' => '(nekeisti)',
-'revdelete-radio-set' => 'Taip',
-'revdelete-radio-unset' => 'Ne',
+'revdelete-radio-set' => 'Paslėpta',
+'revdelete-radio-unset' => 'Matoma',
 'revdelete-suppress' => 'Slėpti duomenis nuo administratorių kaip ir nuo kitų',
 'revdelete-unsuppress' => 'Šalinti apribojimus atkurtose versijose',
 'revdelete-log' => 'Priežastis:',
@@ -1180,6 +1180,7 @@ Prašome patikrinti sąrašus.',
 'compareselectedversions' => 'Palyginti pasirinktas versijas',
 'showhideselectedversions' => 'Rodyti/slėpti pasirinktas versijas',
 'editundo' => 'atšaukti',
+'diff-empty' => '(Jokio skirtumo)',
 'diff-multi-manyusers' => '(daugiau nei $2 {{PLURAL:$2|naudotojo|naudotojų|naudotojų}} $1 {{PLURAL:$1|tarpinis keitimas nėra rodomas|tarpiniai keitimai nėra rodomi|tarpinių keitimų nėra rodoma}})',
 
 # Search results
@@ -1196,7 +1197,7 @@ Prašome patikrinti sąrašus.',
 'shown-title' => 'Rodyti $1 {{PLURAL:$1|rezultatą|rezultatus|rezultatus}} puslapyje',
 'viewprevnext' => 'Žiūrėti ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''Puslapis pavadinimu „[[$1]]“ šioje wiki'''",
-'searchmenu-new' => "'''Sukurti puslapį „[[:$1]]“ šioje wiki!'''",
+'searchmenu-new' => '<strong>Sukurti puslapį „[[:$1]]“ šioje wiki!</strong> {{PLURAL:$2|0=|Taip pat peržiūrėkite šį rastą puslapį.|Taip pat peržiūrėkite šiuos paieškos rezultatus.}}',
 'searchprofile-articles' => 'Turinio puslapiai',
 'searchprofile-project' => 'Pagalbos ir projekto puslapiai',
 'searchprofile-images' => 'Daugialypės terpės failai',
@@ -1214,7 +1215,7 @@ Prašome patikrinti sąrašus.',
 'search-section' => '(skyrius $1)',
 'search-suggest' => 'Galbūt norėjote $1',
 'search-interwiki-caption' => 'Dukteriniai projektai',
-'search-interwiki-default' => '$1 rezultatai:',
+'search-interwiki-default' => 'Rezultatai iš $1:',
 'search-interwiki-more' => '(daugiau)',
 'search-relatedarticle' => 'Susiję',
 'searcheverything-enable' => 'Ieškoti visose vardų srityse',
@@ -1521,14 +1522,26 @@ teisės",
 'recentchanges-label-unpatrolled' => 'Šis keitimas dar nebuvo patikrintas',
 'recentchanges-label-plusminus' => 'Šiuo baitų skaičiumi pakeista puslapio apimtis',
 'recentchanges-legend-newpage' => '$1 - naujas puslapis',
-'rcnotefrom' => "Žemiau yra pakeitimai pradedant '''$2''' (rodoma iki '''$1''' pakeitimų).",
+'rcnotefrom' => 'Žemiau yra pakeitimai pradedant <strong>$2</strong> (rodoma iki <strong>$1</strong> pakeitimų).',
 'rclistfrom' => 'Rodyti naujus pakeitimus pradedant $1',
 'rcshowhideminor' => '$1 smulkius keitimus',
+'rcshowhideminor-show' => 'Rodyti',
+'rcshowhideminor-hide' => 'Slėpti',
 'rcshowhidebots' => '$1 robotus',
-'rcshowhideliu' => '$1 prisijungusius naudotojus',
+'rcshowhidebots-show' => 'Rodyti',
+'rcshowhidebots-hide' => 'Slėpti',
+'rcshowhideliu' => '$1 registruotus naudotojus',
+'rcshowhideliu-show' => 'Rodyti',
+'rcshowhideliu-hide' => 'Slėpti',
 'rcshowhideanons' => '$1 anoniminius naudotojus',
+'rcshowhideanons-show' => 'Rodyti',
+'rcshowhideanons-hide' => 'Slėpti',
 'rcshowhidepatr' => '$1 patikrintus keitimus',
+'rcshowhidepatr-show' => 'Rodyti',
+'rcshowhidepatr-hide' => 'Slėpti',
 'rcshowhidemine' => '$1 mano keitimus',
+'rcshowhidemine-show' => 'Rodyti',
+'rcshowhidemine-hide' => 'Slėpti',
 'rclinks' => 'Rodyti paskutinius $1 pakeitimų per paskutiniąsias $2 dienų<br />$3',
 'diff' => 'skirt',
 'hist' => 'ist',
@@ -1652,6 +1665,7 @@ Jei visvien norite įkelti savo failą, prašome eiti atgal ir įkelti šį fail
 'php-uploaddisabledtext' => "Failų įkėlimai uždrausti PHP nustatymuose.
 Patikrinkite ''file_uploads'' nustatą.",
 'uploadscripted' => 'Šis failas turi HTML arba programinį kodą, kuris gali būti klaidingai suprastas interneto naršyklės.',
+'uploadscriptednamespace' => "Šis SVG failas turi neteisėtą vietą vardui '$1'",
 'uploadvirus' => 'Šiame faile yra virusas! Smulkiau: $1',
 'uploadjava' => 'Failas yra ZIP failas, kuriame yra Java .class failas.
 Įkelti Java failus neleidžiama, nes jie gali padėti apeiti saugumo apribojimus.',
@@ -1978,6 +1992,9 @@ Kiekvienoje eilutėje yra nuorodos į pirmąjį ir antrąjį peradresavimą, tai
 'protectedpages-indef' => 'Tik neapibrėžtos apsaugos',
 'protectedpages-cascade' => 'Tik pakopinė apsauga',
 'protectedpagesempty' => 'Šiuo metu nėra apsaugotas joks failas su šiais parametrais.',
+'protectedpages-page' => 'Puslapis',
+'protectedpages-expiry' => 'Galioja iki',
+'protectedpages-reason' => 'Priežastis',
 'protectedtitles' => 'Apsaugoti pavadinimai',
 'protectedtitlesempty' => 'Šiuo metu nėra jokių pavadinimų apsaugotų šiais parametrais.',
 'listusers' => 'Naudotojų sąrašas',
index 835d153..1e51344 100644 (file)
@@ -162,7 +162,6 @@ $messages = array(
 'vector-action-protect' => 'Venhimna',
 'vector-action-undelete' => 'Lak kir lehna',
 'vector-action-unprotect' => 'Venhimna dinhmun tidanglam rawh',
-'vector-simplesearch-preference' => 'Zawn awlsam lehzualna rawtna awmtir rawh (Vektawr vun tan chauh)',
 'vector-view-create' => 'Siamna',
 'vector-view-edit' => 'Siamţhatna',
 'vector-view-history' => 'Hunhlui-chanchin',
index 4bdcf8c..bcdb383 100644 (file)
@@ -22,6 +22,7 @@
  * @author Marozols
  * @author Papuass
  * @author Reedy
+ * @author Srolanh
  * @author Xil
  * @author Yyy
  * @author לערי ריינהארט
@@ -216,7 +217,6 @@ $messages = array(
 'vector-action-protect' => 'Aizsargāt',
 'vector-action-undelete' => 'Atjaunot',
 'vector-action-unprotect' => 'Mainīt aizsardzību',
-'vector-simplesearch-preference' => 'Ieslēgt vienkāršoto meklēšanas joslu (tikai Vector apdarē)',
 'vector-view-create' => 'Izveidot',
 'vector-view-edit' => 'Labot',
 'vector-view-history' => 'Hronoloģija',
@@ -429,6 +429,7 @@ Lai pievienotu izmaiņas tulkojumā visās ''wiki'', lūdzam izmantot ''MediaWik
 'ns-specialprotected' => 'Nevar izmainīt īpašās lapas.',
 'titleprotected' => "Šī lapa ir aizsargāta pret izveidošanu. To aizsargāja [[User:$1|$1]].
 Norādītais iemesls bija ''$2''.",
+'exception-nologin' => 'Neesat pieslēdzies',
 
 # Virus scanner
 'virus-badscanner' => "Nekorekta konfigurācija: nezināms vīrusu skeneris: ''$1''",
@@ -473,7 +474,6 @@ Vari turpināt to izmantot anonīmi, vari <span class='plainlinks'>[$1 atgriezti
 'gotaccount' => "Tev jau ir lietotājvārds? '''$1'''!",
 'gotaccountlink' => 'Dodies iekšā',
 'userlogin-resetlink' => 'Esat aizmirsis savu pieslēgšanās informāciju?',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Palīdzība ar pieslēgšanos]]',
 'userlogin-createanother' => 'Izveidot citu kontu',
 'createacct-join' => 'Ievadiet savu informāciju zemāk.',
 'createacct-another-join' => 'Ievadiet jaunā konta informāciju zemāk.',
@@ -549,9 +549,15 @@ Tādēļ šobrīd no šīs IP adreses vairs nevar izveidot jaunus kontus.',
 Lūdzu, uzgaidiet $1 pirms mēģiniet vēlreiz.',
 'login-abort-generic' => 'Jūsu pieteikšanās bija neveiksmīga — Darbība pārtraukta',
 'loginlanguagelabel' => 'Valoda: $1',
+'pt-login' => 'Pieslēgties',
+'pt-login-button' => 'Pieslēgties',
+'pt-createaccount' => 'Reģistrēties',
+'pt-userlogout' => 'Iziet',
 
 # Email sending
 'php-mail-error-unknown' => 'Nezināma kļūda PHP mail() funkcijā',
+'user-mail-no-addy' => 'Mēģināja sūtīt e-pastu bez e-pasta adreses.',
+'user-mail-no-body' => 'Mēģināja sūtīt e-pastu ar tukšu vai nepamatoti īsu pamata daļu.',
 
 # Change password dialog
 'changepassword' => 'Mainīt paroli',
@@ -597,6 +603,7 @@ Pagaidu parole: $2',
 'changeemail-cancel' => 'Atcelt',
 
 # Special:ResetTokens
+'resettokens-tokens' => 'Žetoni:',
 'resettokens-token-label' => '$1 (šībrīža vērtība: $2)',
 
 # Edit page toolbar
@@ -884,7 +891,6 @@ Sīkāku informāciju var atrast [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'revdelete-show-file-submit' => 'Jā',
 'revdelete-selected' => "'''[[:$1]] {{PLURAL:$2|izvēlētā versija|izvēlētās versijas}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Izvēlētais reģistra ieraksts|Izvēlētie reģistra ieraksti}}:'''",
-'revdelete-text' => "'''Lapu hronoloģijā un reģistros izdzēstās versijas vēl joprojām būs redzamas, tomēr daļa informācijas nebūs pieejama publiski.''' Citi {{SITENAME}} administratori varēs apskatīt spēlto saturu un varēs to atslēpt, ja vien nav papildu ierobežojumi.",
 'revdelete-confirm' => 'Lūdzu apstiprini, ka Tu zini, ko dari, Tu apzinies sekas, tāpat Tu to dari saskaņā ar vadlīnijām.',
 'revdelete-suppress-text' => "Paslēpšanu izmantot vienīgi šādos gadījumos:
 * potenciāli apmelojoša informācija
index dca9f2c..3265237 100644 (file)
@@ -187,7 +187,6 @@ $messages = array(
 'tog-ccmeonemails' => '凡所遺書,請存副本。',
 'tog-diffonly' => '異下無示頁',
 'tog-showhiddencats' => '示隱類',
-'tog-noconvertlink' => '非轉鍵題',
 'tog-norollbackdiff' => '轉後略異',
 'tog-useeditwarning' => '離而未存,示吾',
 
@@ -313,7 +312,6 @@ $messages = array(
 'vector-action-protect' => '緘',
 'vector-action-undelete' => '覽刪',
 'vector-action-unprotect' => '啟',
-'vector-simplesearch-preference' => '增尋之案(限Vector皮)',
 'vector-view-create' => '立',
 'vector-view-edit' => '纂',
 'vector-view-history' => '覽史',
@@ -564,7 +562,6 @@ $2',
 'gotaccountlink' => '登簿',
 'userlogin-resetlink' => '君忘登簿所需爾?',
 'userlogin-resetpassword-link' => '輸子符節',
-'helplogin-url' => 'Help:登簿',
 'createacct-emailrequired' => '電郵',
 'createacct-emailoptional' => '電郵 (可選)',
 'createaccountmail' => '同郵',
@@ -921,7 +918,6 @@ $2',
 'revdelete-show-file-submit' => '善',
 'revdelete-selected' => "'''審[[:$1]]已擇$2:'''",
 'logdelete-selected' => "'''已擇誌$1:'''",
-'revdelete-text' => "'''刪審雖見誌,其文摒公眾,惟有秩可得之。'''無規則有秩可復還焉。",
 'revdelete-confirm' => '爾確作之,解之果焉,合之[[{{MediaWiki:Policy-url}}|策]]矣。',
 'revdelete-suppress-text' => "'''限'''於此壓:
 * 無適之個訊
index 737ea88..f013289 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Bombola
+ * @author Ceas08
  * @author Dato deutschland
  * @author Dawid Deutschland
  * @author Erdemaslancan
@@ -150,9 +151,11 @@ $messages = array(
 
 # Vector skin
 'vector-action-delete' => 'Jili',
+'vector-action-move' => 'Tori',
 'vector-action-protect' => 'İçvi',
 'vector-view-create' => 'dokʼidi',
 'vector-view-edit' => 'Doktiri',
+'vector-view-view' => 'İǩitxi',
 'variants' => "Variant'epe",
 
 'errorpagetitle' => 'Çilata',
@@ -242,6 +245,7 @@ Muşeni? Çunki am butʼkʼa, jileri na ren a butʼkʼaşi golaxteri versiyoni r
 Eger sebebi aya na va renna, pʼrogramis ar çilata z*irit.
 Mu iqʼven! Aya, a [[Special:ListUsers/sysop|adminis]], URL-ti çʼareli şekʼilite rapʼortʼi doçʼarit.',
 'missingarticle-rev' => '(revizyoni#: $1)',
+'badtitle' => 'Varixmarinen boxoxia',
 'badtitletext' => 'Na içʼaren butʼkʼaşi coxo ya çilatoni ren ya boşi ren varna inter-nena do inter-vikʼişi kʼontʼaktʼis na uğutʼu şeni mtini varen.
 Dudicoxopes oxmaruşi yasaği na ren ar, varna daha dido kʼarakʼtʼeri uğun.',
 'viewsource' => 'Odudes o3ʼkʼedi',
@@ -257,8 +261,10 @@ Dudicoxopes oxmaruşi yasaği na ren ar, varna daha dido kʼarakʼtʼeri uğun.'
 'userlogout' => 'Siteşen Kogamaxti',
 'nologin' => "Hesabi va giğuni? '''$1'''",
 'nologinlink' => 'Hesabi dokʼidi.',
+'createaccount' => 'Hesabi dokʼidi',
 'gotaccountlink' => 'Sitʼeşa amaxti',
 'mailmypassword' => 'Ağne pʼarola-çkimi moncğoni',
+'loginlanguagelabel' => 'Nena: $1',
 
 # Change password dialog
 'oldpassword' => "Mcveşi p'arola:",
@@ -328,6 +334,7 @@ Edo amuş metʼi, ak mxuciş meçamu ginonna, meşvelape ti-skani kʼala oçʼar
 Oxo3ʼonapape: (a3ʼineri) = a3ʼineri versiyoni kʼala na ren farkʼi,
 (iptineri) = iptineri versiyoni kʼala na ren farkʼi, Çʼ = çʼitʼa oktiroba.',
 'history-fieldset-title' => 'Golaxteris o3ʼkʼedi',
+'history-show-deleted' => 'Xvala nijilenepe',
 'histfirst' => 'irişen mcveşi',
 'histlast' => 'irişen ağani',
 
@@ -405,7 +412,6 @@ Oxo3ʼonapape: (a3ʼineri) = a3ʼineri versiyoni kʼala na ren farkʼi,
 'recentchanges' => 'Çodinaşi oktirobape',
 'recentchanges-legend' => 'Çodinaşi oktirobape tercihepe',
 'recentchanges-feed-description' => 'Am feedis vikiʼs na ixvenu irişen sonni oktirobape gatxozi.',
-'rcnote' => "$4 tarixi do saatʼi $5 şakis, çodinaşi {{PLURAL:$2|1 ndğas|'''$2''' ndğas}} na ixvenu, {{PLURAL:$1|'''1''' oktiroba|'''$1''' oktiroba}}, tude ren.",
 'rclistfrom' => '$1 tarixişen doni na ixvenu oktirobape ko3ʼiri',
 'rcshowhideminor' => 'çʼitʼa oktirobape $1',
 'rcshowhidebots' => 'botʼepe $1',
@@ -445,6 +451,7 @@ Oxo3ʼonapape: (a3ʼineri) = a3ʼineri versiyoni kʼala na ren farkʼi,
 'filehist-help' => 'Dosyaşi tarixi oz*iru şeni Ndğa/Ora burme-muşis na renan tarixepes o3ʼkʼedi.',
 'filehist-deleteall' => 'mteli jili',
 'filehist-deleteone' => 'jili',
+'filehist-revert' => 'komoiği',
 'filehist-current' => 'A3ʼineri',
 'filehist-datetime' => 'Dğa/Ora',
 'filehist-thumb' => 'Mçʼitʼa sureti',
@@ -571,10 +578,10 @@ Am butʼkʼaşi oçvuşi sinori gaktirinen; ama am oktiroba, kʼademoni oçvalu
 'blanknamespace' => '(Dudi)',
 
 # Contributions
-'contributions' => 'Maxmareşi meşvelape',
+'contributions' => '{{GENDER:$1|User}} işi meşvelape',
 'contributions-title' => '$1 şeni maxmareş meşvelape',
 'mycontris' => 'Çkimi meşvelape',
-'contribsub2' => '$1 ($2)',
+'contribsub2' => '{{GENDER:$3|$1}} ($2) işen',
 'uctop' => '(dudi)',
 'month' => 'Tuta:',
 'year' => '3ʼana:',
@@ -674,6 +681,7 @@ Mu iqʼven başka coxo doçʼari.',
 'tooltip-search' => '{{SITENAME}}-iş doloxe mgori',
 'tooltip-search-go' => 'Eger korenna, am coxos na uğun ar butʼkʼaşa idi',
 'tooltip-search-fulltext' => 'Am nçʼara şeni butʼkʼape mgori',
+'tooltip-p-logo' => 'Dudi but̆ǩaşa idi',
 'tooltip-n-mainpage' => 'Dudi butʼkʼaşa idi',
 'tooltip-n-mainpage-description' => 'Dudi butʼkʼaşa idi',
 'tooltip-n-portal' => 'Proje şeni, şeyepe so gaz*iren, mu gaxvenen',
index 3905585..dc2fc1f 100644 (file)
@@ -176,7 +176,6 @@ $messages = array(
 'vector-action-protect' => 'रक्षण करू',
 'vector-action-undelete' => 'आपस लाउ',
 'vector-action-unprotect' => 'सुरक्षा बदलू',
-'vector-simplesearch-preference' => 'परिष्कृत खोज सुझाव समर्थ करू (सदिश स्वरूप मात्र)',
 'vector-view-create' => 'बनाउ',
 'vector-view-edit' => 'सम्पादन करू',
 'vector-view-history' => 'इतिहास देखू',
@@ -843,8 +842,6 @@ $3 द्वारा देल कारण अछि ''$2''",
 'revdelete-show-file-submit' => 'हँ',
 'revdelete-selected' => "'''{{PLURAL:$2|चुनल संशोधन|चुनल संशोधन सभ}} एकर [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|चुनल वृत्तलेख घटना|चुनल वृत्तलेख घटना सभ}}:'''",
-'revdelete-text' => "'''मेटाएल संशोधन सभ आ घटना सभ पन्नाक इतिहास आ वृत्तलेखमे आएत, मुदा ओकर सूचीक किछु भाग सामान्य लोक लेल उपलब्ध नै रहत।'''
-{{अन्तर्जाल}} पर दोसर संचालक लग अखनो नुकाएल सूची उपलब्ध छन्हि आ ओ ओकरा फेरसँ आनि सकै छथि अही मध्यस्थक द्वारा, आ से हएत जँ अतिरिक्त प्रतिबन्ध लागू रहत।",
 'revdelete-confirm' => 'कृपा कऽ आश्वस्त भऽ जाउ जे अहाँ ई करऽ चाहै छी, अहाँकेँ एकर परिणामक जनतब अछि, आ अहाँ एकरा [[{{MediaWiki:Policy-url}}|निअम]] क अनुसार कऽ रहल छी।',
 'revdelete-suppress-text' => "दबाबैबला काज '''मात्र''' ऐ सभ स्थितिमे प्रयोग करू:
 * मानहानिक सम्भावनाबला सूचना
index 97cb4ec..8d5f8c3 100644 (file)
@@ -178,7 +178,6 @@ $messages = array(
 'vector-action-protect' => 'Reksa',
 'vector-action-undelete' => 'Batalna pambusakan',
 'vector-action-unprotect' => 'Owahi pangreksan',
-'vector-simplesearch-preference' => 'Aktifna bilah panggoletan sing wis deringkes (nang kulit Vector thok)',
 'vector-view-create' => 'Gawe',
 'vector-view-edit' => 'Sunting',
 'vector-view-history' => 'Sajarah kaca',
@@ -459,8 +458,6 @@ Aja kelalen ngowaih [[Special:Preferences|preferensi {{SITENAME}}]] Rika.',
 'gotaccountlink' => 'Mlebu log',
 'userlogin-resetlink' => 'Apa Rika kelalen info detil nggo mlebune?',
 'userlogin-resetpassword-link' => 'Setel maning tembung sandhine Rika',
-'helplogin-url' => 'Pitulung:Mlebu log',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pitulung mlebu log]]',
 'createacct-join' => 'Lebokna informasine Rika nang ngisor kiye.',
 'createacct-another-join' => 'Lebokna informasi akun anyar nang ngisor kiye.',
 'createacct-emailrequired' => 'Alamat imel',
index 7ecbf46..d217830 100644 (file)
@@ -289,7 +289,6 @@ $messages = array(
 'vector-action-protect' => 'Араламс',
 'vector-action-undelete' => 'Мърдафтомс',
 'vector-action-unprotect' => 'Араламать полафтомс',
-'vector-simplesearch-preference' => 'Нодамс тевс тёждялгтотф кядьёнксонь седяфксть (аньцек векторонь лангакс)',
 'vector-view-create' => 'Тиемс',
 'vector-view-edit' => 'Петнемс',
 'vector-view-history' => 'История няфтемс',
@@ -882,8 +881,6 @@ $3 макссь туфталсь - ''$2''",
 'revdelete-show-file-submit' => 'Ина',
 'revdelete-selected' => "''''''$1:'''-нь {{PLURAL:$2|Кочкаф верзиец|Кочкаф верзиенза}}'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Кочкаф сёрматфтомась|кочкаф сёрматфтоматне}}:'''",
-'revdelete-text' => "'''Нардаф верзиетне илядыхть няевикс лопать историясонза ди нардамань лувомава, интай сонь потмоснон пакшенза кармайхть аф сембонди сатовихть.'''
-Иля {{SITENAME}}нь оцюнятненди кяшф потмоснон ули кода ваномс эди мърдафтомс тяка програмонь ванфть вельде мъзярс иля кардафксне исть путов.",
 'revdelete-legend' => 'Арафтомс няемга оторхне',
 'revdelete-hide-text' => 'Кяшемс тя лопать верзиенц',
 'revdelete-hide-image' => 'Кяшемс файлхнень потмосна',
index ba0244e..06c3113 100644 (file)
@@ -339,7 +339,7 @@ $messages = array(
 'category_header' => 'Ireo lahatsoratra ao amin\'ny sokajy "$1"',
 'subcategories' => 'Zana-tsokajy',
 'category-media-header' => "Fisy multimedia anatin'ny sokajy « $1 »",
-'category-empty' => "''Tsy misy pejy, sokajy ambany na sary ao anatin'io sokajy io''",
+'category-empty' => "''Tsy misy pejy, zana-tsokajy na sary ao anatin'io sokajy io''",
 'hidden-categories' => '{{PLURAL:$1|Sokajy misitrika|Sokajy misitrika}} $1',
 'hidden-category-category' => 'Sokajy misitrika',
 'category-subcat-count' => '{{PLURAL:$2|Ity sokajy ity|Ireo sokajy ireo}} dia manana {{PLURAL:$1|zana-tsokajy|zana-tsokajy}} $1 . Ny taotaliny dia $2',
@@ -381,7 +381,6 @@ $messages = array(
 'vector-action-protect' => 'Arovy',
 'vector-action-undelete' => 'Avereno',
 'vector-action-unprotect' => 'Hanala ny fiarovana',
-'vector-simplesearch-preference' => "Hampiasa ny bara fikarohana notsorina (ho an'ny skin Vector ihany)",
 'vector-view-create' => 'Foronona',
 'vector-view-edit' => 'Hanova',
 'vector-view-history' => 'Hijery ny tantara',
@@ -620,6 +619,7 @@ Ny antony nomen\'ny mpandrindra nanidy azy: "$3".',
 'invalidtitle-unknownnamespace' => 'Lohateny tsy ekena miaraka amin\'ny laharana anaran-tsehatra $1 ary soratra "$2"',
 'exception-nologin' => 'Tsy tafiditra',
 'exception-nologin-text' => '[[Special:Userlogin|Midira]]  mba hahafahanao manao ilay asa na hahafahanao mijery ity pejy ity',
+'exception-nologin-text-manual' => "$1 ianao mba ho tonga eo amin'ilay pejy na hanatanteraka ilay asa.",
 
 # Virus scanner
 'virus-badscanner' => "Diso : Tsy fantatray ny mpitady virus ''$1''",
@@ -668,8 +668,6 @@ Mila manaiky cookies ianao raha te hiditra amin'ny {{SITENAME}}.",
 'gotaccountlink' => 'Midira',
 'userlogin-resetlink' => "Adinonavo ve ny antsipihan'ny fidiranao ?",
 'userlogin-resetpassword-link' => 'Hadino ny tenimiafina?',
-'helplogin-url' => 'Help:Fidirana',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Fanoroana mikasika ny fidirana]]',
 'userlogin-loggedin' => "Efa tafiditra amin'ny anaran'i {{GENDER:$1|$1}} ianao. Ampiasao ny fôrmiolera eo ambany raha hiditra amin'ny anaran'ny mpikambana hafa.",
 'userlogin-createanother' => 'Hamorona kaonty hafa',
 'createacct-join' => 'Atsofohy eo ambany ny fampahalalana momba anao.',
@@ -765,6 +763,9 @@ Andraso $1 alohan'ny mamerina.",
 'suspicious-userlogout' => "Ny fangataham-pialanao dia tsy nekena satria ohatry ny nalfan'ny mpizahan-tsehatra simba izy na kasy ny proxy.",
 'createacct-another-realname-tip' => "Azo tsy atsofoka ny tena anarana.
 Raha misafidy ny hanome azy ianao, ho ampiasaina amin'ny fanehoana ny anjara asan'ilay mpikambana ilay izy.",
+'pt-login' => 'Hiditra',
+'pt-createaccount' => 'Hamorona kaonty',
+'pt-userlogout' => 'Hivoaka',
 
 # Email sending
 'php-mail-error-unknown' => "Hadisoana tsy fantatra tao amin'ny tao mial() an'i PHP.",
@@ -773,21 +774,28 @@ Raha misafidy ny hanome azy ianao, ho ampiasaina amin'ny fanehoana ny anjara asa
 
 # Change password dialog
 'changepassword' => 'Hanova tenimiafina',
-'resetpass_announce' => "Nihiditra tenimiafina mailaka nalefanay tamin'ny imailaka ianao. Ampidiro ity tenimiafina ity mba hanapitra ny fampidirana.",
+'resetpass_announce' => 'Tsy maintsy mametraka tenimiafina ianao mba hamarananan ny fidirana.',
 'resetpass_header' => "Hanova ny tenimiafin'ny kaonty",
 'oldpassword' => 'Tenimiafina taloha:',
 'newpassword' => 'Tenimiafina vaovao:',
 'retypenew' => 'Avereno ampidirina ny tenimiafina vaovao:',
 'resetpass_submit' => 'Ovay ny tenimiafina ary midira',
 'changepassword-success' => 'Voaova soa aman-tsara ny tenimiafinao!',
+'changepassword-throttled' => 'Betsaka loatra ny andram-pidirana nataonao.
+Andraso $1 aloha ny mamerina.',
 'resetpass_forbidden' => 'Tsy afaka ovaina ny tenimiafina',
 'resetpass-no-info' => "Tsy maintsy tafiditra ao amin'ny kaontinao ianao vao afaka mijery ity pejy ity.",
 'resetpass-submit-loggedin' => 'Ovay ny tenimiafina',
 'resetpass-submit-cancel' => 'Aoka ihany',
 'resetpass-wrong-oldpass' => 'Tsy izy ny tenimiafinao (tsotra na miserana)
 Mety efa nanova tenimiafina na nanontany tenimiafina miserana angamba ianao.',
+'resetpass-recycled' => "Avereno amy zavatra hafa nohon'ny tenimiafinao ankehitriny ny tenimiafinao.",
+'resetpass-temp-emailed' => "Niditra tamin'ny alalan'ny tenimiafina vonjimaika nalefa mailaka ianao.
+Mba hamaranana ny fidirana, dia tsy maintsy mampiditra tenimiafina vaovao eto ianao :",
 'resetpass-temp-password' => 'Tenimiafina miserana :',
 'resetpass-abort-generic' => "Nosakanan'ny itatra (extension) iray ny fanovana tenimiafina.",
+'resetpass-expired' => 'Efa nitsahatra ny tenimiafinao. Mampidira tenimiafina vaovao hahafahanao miditra.',
+'resetpass-expired-soft' => 'Efa nitsahatra ny tenimiafinao, ary tsy maintsy averina ilay izy. Safidio avy hatrany ny tenimiafina, na tsindrio "Aoka aloha" raha tsy hanao izany androany',
 
 # Special:PasswordReset
 'passwordreset' => 'Famafana ary famerenana ny tenimiafina',
@@ -830,6 +838,8 @@ Tenimiafina miserana : $2',
 'changeemail-password' => "Tenimiafinao eo amin'i {{SITENAME}}:",
 'changeemail-submit' => 'Hanova ny adiresy imailaka',
 'changeemail-cancel' => 'Adinoy',
+'changeemail-throttled' => "Betsaka loatra ny andrana nidiranao.
+Miandrasa $1 alohan'ny manandrana indray.",
 
 # Special:ResetTokens
 'resettokens' => 'Hamerina ny token',
@@ -1045,6 +1055,7 @@ Efa misy izy.',
 'content-not-allowed-here' => "Votoatiny ''$1'' voarara eo amin'ny pejy [[$2]]",
 'editwarning-warning' => "Mety hahavery ny fanovana nataonao ny fialanao amin'ity pejy ity.
 Raha tafiditra ianao dia azonao esorina ity fampitandremana ity ao amin'ny fizarana \"{{int:prefs-editing}}\" ao amin'ny safidinao.",
+'editpage-notsupportedcontentformat-title' => 'Tsy zaka io andrefim-botoatiny io',
 
 # Content models
 'content-model-wikitext' => 'wiki-soratra',
@@ -1162,8 +1173,6 @@ tsy misy ilay izy, na ny santiôna ankehitriny no andramana asitrika.',
 'revdelete-show-file-submit' => 'Eny',
 'revdelete-selected' => "'''{{PLURAL:$2|Votoatiny nosafidiana|Votoatiny nosafidiana}}n'i '''[[:$1]]''' :'''",
 'logdelete-selected' => "'''{{PLURAL:$1||}}Laogy voafidy :'''",
-'revdelete-text' => "'''Mbola ho ao amin'ny laogim-pejy ary ao amin'ny logy ny versiona ary zava-nitranga voaesotra, fa tsy ho hitan'ny mason'ny vahoaka ny votoatin'izy ireo.'''
-Mbola afaka jeren'ireo mpandrindran'i {{SITENAME}} foana ny votoatiny voafina  ary azony atao ho hitan'ny vahoaka indray ilay izy amin'ny alalan'ity pejy fanaovan-tsafidy ity, raha tsy misy fepetra apetraka.",
 'revdelete-confirm' => 'Amafiso eto ny hevitrao raha hanao io ianao, raha azonao sary an-tsaina ny mety ho vokany, ary raha araka ny [[{{MediaWiki:Policy-url}}|fepetra mihatra]] ny zavatra ataonao.',
 'revdelete-suppress-text' => "Ny famafàna pejy dia ampiasaina rehefa :
 * Fampahalalana mampiely lainga
@@ -1255,6 +1264,9 @@ Marino raha manohy ny tantaram-pejy ity asa ity.",
 'editundo' => 'esory',
 'diff-empty' => '(Tsy misy mahasamihafa)',
 'diff-multi-manyusers' => "Tsy naseho ny antiôna $1{{PLURAL:}} nataon'ny mpikambana $2.",
+'difference-missing-revision' => "Tsy hita ny versiona $2{{PLURAL:$2||}} ny fahasamihafanna ($1) an'ity pejy ity.
+
+Vokatry ny fanarahana rohy fampitahana lany daty mankany amy pejy efa voafafa izan . Ho hita eo amin'ny [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} laogim-pamafàna] ny antsipirihany.",
 
 # Search results
 'searchresults' => 'Valim-pikarohana',
@@ -1270,7 +1282,7 @@ Marino raha manohy ny tantaram-pejy ity asa ity.",
 'shown-title' => 'Aseho valiny $1 isaky ny pejy iray{{PLURAL:}}',
 'viewprevnext' => 'Hijery ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''Misy pejy mitondra anarana « [[:$1]] » eto amin'ity wiki ity'''",
-'searchmenu-new' => "'''Hamorona ny pejy \"[[:\$1]]\" eto amin'ity wiki ity!'''",
+'searchmenu-new' => '<strong>Hamorona ny pejy "[[:$1]]" eto amin\'ity wiki ity!</strong> {{PLURAL:$2|0=|Jereo koa ny pejy hita tamin\'ny karokao.|Jereo koa ny valim-pikarohana hita.}}',
 'searchprofile-articles' => 'Pejy misy votoatiny',
 'searchprofile-project' => 'Pejy fanampiana sy pejy tetikasa',
 'searchprofile-images' => 'Multimedia',
@@ -1286,6 +1298,7 @@ Marino raha manohy ny tantaram-pejy ity asa ity.",
 'search-result-score' => 'Fifanarahana : $1%',
 'search-redirect' => "(redirect avy amin'ny/amin'i $1)",
 'search-section' => '(fizaràna $1)',
+'search-file-match' => "(miady amin'ny votoatin-drakitra)",
 'search-suggest' => 'Andramo : $1',
 'search-interwiki-caption' => 'zandri-tetikasa',
 'search-interwiki-default' => "Valiny amin'ny $1 :",
@@ -1312,6 +1325,7 @@ Marino raha manohy ny tantaram-pejy ity asa ity.",
 'preferences' => 'Ny momba anao',
 'mypreferences' => 'Safidy',
 'prefs-edits' => 'isa ny fanovàna :',
+'prefsnologintext2' => '$1 ianao hahafahanao mamaritra ny safidim-pikambana',
 'prefs-skin' => 'Endrika',
 'skin-preview' => 'Tsipalotra',
 'datedefault' => 'Tsy misy safidy',
@@ -1602,15 +1616,29 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'recentchanges-label-minor' => 'Kely fotsiny ity fanovana ity',
 'recentchanges-label-bot' => "Nataon'ny rôbô ity fanovana ity.",
 'recentchanges-label-unpatrolled' => 'Ity fanovana ity dia mbola tsy voamarina',
-'recentchanges-legend-newpage' => '$1 - pejy vaovao',
+'recentchanges-label-plusminus' => "IO ny isan'ny oktety niova tamin'ilay pejy",
+'recentchanges-legend-heading' => "'''Maribolana:'''",
+'recentchanges-legend-newpage' => '(jereo koa ny [[Special:NewPage|lisitry ny pejy vaovao]])',
 'rcnotefrom' => "Ity eto ambany ity ny lisitry ny vao niova manomboka ny <b>$2</b> (hatramin'ny <b>$1</b> no miseho).",
 'rclistfrom' => 'Asehoy izay vao niova manomboka ny $1',
 'rcshowhideminor' => '$1 ny fanovàna kely',
+'rcshowhideminor-show' => 'Haneho',
+'rcshowhideminor-hide' => 'Hanafina',
 'rcshowhidebots' => '$1 ny mpikambana rôbô',
+'rcshowhidebots-show' => 'Haneho',
+'rcshowhidebots-hide' => 'Hanafina',
 'rcshowhideliu' => '$1 ny mpikambana nisoratra anarana',
+'rcshowhideliu-show' => 'Haneho',
+'rcshowhideliu-hide' => 'Hanadina',
 'rcshowhideanons' => '$1 ny mpikambana tsy nisoratra anarana',
+'rcshowhideanons-show' => 'Haneho',
+'rcshowhideanons-hide' => 'Hanafina',
 'rcshowhidepatr' => '$1 ny fanovana voaambina',
+'rcshowhidepatr-show' => 'Haneho',
+'rcshowhidepatr-hide' => 'Hanafina',
 'rcshowhidemine' => '$1 ny fanovàko',
+'rcshowhidemine-show' => 'Haneho',
+'rcshowhidemine-hide' => 'Hanafina',
 'rclinks' => "Asehoy ny $1 niova farany tato anatin'ny $2 andro<br />$3",
 'diff' => 'Fampitahana',
 'hist' => 'tant.',
@@ -1737,6 +1765,7 @@ Raha mbola te-hampiditra io rakitra io foana ianao, miverena any aoriana ary mam
 Marino ny option configuration file_uploads.",
 'uploadscripted' => "
 Misy kialo HTML na fango script mety tsy ho hain'ny navigateur sasany haseho ity rakitra ity.",
+'uploadinvalidxml' => "Tsy afaka vakiana ny XML tao anatin'ilay rakitra nafaranao.",
 'uploadvirus' => 'Misy viriosy io rakitra io! Toy izao ny antsipirihany: $1',
 'uploadjava' => 'Ny rakitra dia rakitra ZIP ahitana rakitra .class Java.
 Voarara ny mandefa rakitra Java satria mety hahavaky ny fepetra mikasika ny antoka ireo rakitra ireo.',
@@ -1867,8 +1896,7 @@ ity wiki ity dia no-regler-na ho sarababem-bahoaka.",
 'upload_source_file' => " (rakitra eo amin'ny milinao)",
 
 # Special:ListFiles
-'listfiles-summary' => "Ahitana ny rakitra rehetra nampidirina ity pejy manokana ity.
-Rehefa sivanin'ny mpikambana iray izy ity, ny rakitra izay ahitana santiôna vaovao indrindra izay nalefan'io mpikamana io no aseho.",
+'listfiles-summary' => 'Ahitana ny rakitra rehetra nampidirina ity pejy manokana ity.',
 'listfiles_search_for' => 'Hitady anarana media :',
 'imgfile' => 'rakitra',
 'listfiles' => "Lisitran'ny rakitra",
@@ -2068,7 +2096,16 @@ Aza manadino manamarina raha tsy misy rohy makany amin'ny endrika hafa alohan'ny
 'protectedpages' => 'Pejy voaaro',
 'protectedpages-indef' => 'Ny fiarovana maharitra ihany',
 'protectedpages-cascade' => 'Ny fanovana an-driana ihany',
+'protectedpages-noredirect' => 'Hanafina ny fihodinana',
 'protectedpagesempty' => 'Tsy misy pejy voaaro ankehitriny.',
+'protectedpages-timestamp' => 'Dasy sy ora',
+'protectedpages-page' => 'Pejy',
+'protectedpages-expiry' => 'Mitsahatra ny',
+'protectedpages-performer' => 'Fiarovana ny mpikambana',
+'protectedpages-params' => 'Parametatry ny fiavorana',
+'protectedpages-reason' => 'Antony',
+'protectedpages-unknown-timestamp' => 'Tsy fantatra',
+'protectedpages-unknown-performer' => 'Mpikambana tsy fantatra',
 'protectedtitles' => 'Lohateny voaaro',
 'protectedtitlesempty' => "Tsy misy lohateny voaaro miaraka amin'ireo mpihazaka ireo.",
 'listusers' => 'Lisitry ny mpikambana',
@@ -2319,10 +2356,12 @@ Jereo amin\'ny $2 ny lisitry ny famafana pejy faramparany.',
 'deletecomment' => 'Antony :',
 'deleteotherreason' => 'antony hafa miampyy:',
 'deletereasonotherlist' => 'antony',
-'deletereason-dropdown' => "* Antom-pamafana matetika miasa
+'deletereason-dropdown' => "* Antom-pamafàna miverimberina matetika
+** Rohy fandotoana
+** Fanimbana pejy
+** Tsy fanajana zom-pamorona
 ** Hataka avy amin'ny tompony
-** Tsi-fanajana ny zom-pamorona
-** Fandotoana",
+** Fihodinana tapaka",
 'delete-edit-reasonlist' => 'Hanova ny antony amafana pejy',
 'delete-toobig' => "Ity pejy ity dia manana tantaram-panovana lava be, izany hoe manana versiona {{PLURAL:$1}} $1.
 Noferana mba tsy hikorontana ny fandehanan'i {{SITENAME}} ny famafana ireo pejy ireo.{{PLURAL:$1|}}",
@@ -2598,7 +2637,7 @@ mihatra amin'ny adiresy IP na solonanarana iray.",
 'change-blocklink' => 'ovay ny fanakanana',
 'contribslink' => "fandraisan'anjara",
 'emaillink' => 'Handefa imailaka',
-'autoblocker' => "Voasakana satria ny adiresy IP-nao dia vao avy nampiasain'i \"[[User:\$1|\$1]]\". Ny anton'ny fanakanana dia: \"'''\$2'''\"",
+'autoblocker' => 'Voasakana satria ny adiresy IP-nao dia vao avy nampiasain\'i "[[User:$1|$1]]". Ny antony nomena ho an\'ny fanakananan an\'i $1 dia "$2"',
 'blocklogpage' => "Tantaran'ny sakana",
 'blocklog-showlog' => 'Efa voasakana ity mpikambana ity taloha.
 Eo ambany ny laogim-panakanana.',
@@ -2829,7 +2868,7 @@ Singam-botoatiny fotsiny no nalefa.',
 Tsy hita ny rakitra miserana.',
 'import-parse-failure' => 'Tsy fetezana teo am-pandinihana ny XML ho ampidirina',
 'import-noarticle' => 'Tsy misy pejy ho ampidirina !',
-'import-nonewrevisions' => 'Efa nampidirina taloha daholo ny versiona rehetra.',
+'import-nonewrevisions' => "Tsy misy versiona nafarana (efa teo daholo izy ireo, na nisy tsy noraharahiana nohon'ny hadisoana).",
 'xml-error-string' => "$1 eo amin'ny andininy faha $2, tsanganana faha $3 (oktety $4) : $5",
 'import-upload' => 'Fandrefasana data XML',
 'import-token-mismatch' => 'Very ny fampahalalàna momba ny kaonty.
@@ -2960,6 +2999,7 @@ Mamerina ny version taloha io asa io ary afaka manometraka ny antony anatin'ny a
 'pageinfo-length' => 'Halavam-pejy (oktety)',
 'pageinfo-article-id' => 'Laharam-pejy',
 'pageinfo-language' => "Tenin'ny votoatiny",
+'pageinfo-content-model' => 'Môdelim-botoatim-pejy',
 'pageinfo-robot-policy' => "Fanondroana ataon'ny rôbô",
 'pageinfo-robot-index' => 'Azo atao',
 'pageinfo-robot-noindex' => 'Tsy azo tondroina',
@@ -3166,12 +3206,14 @@ Tokony sary tsy misy na sary tsy izy ny rohy voalohany anaty andalana iray .
 'exif-gpsaltituderef' => 'Haambo tsiahy',
 'exif-gpsaltitude' => 'Haambo',
 'exif-gpstimestamp' => 'Ora GPS (famantaranandro atômika)',
+'exif-gpssatellites' => "Zanabolana mampiasaina ho an'ilay refy",
 'exif-gpsmeasuremode' => 'Fomba fandrefesana',
 'exif-gpsdop' => 'Hatsiko ny fandrefesana',
 'exif-gpsspeedref' => 'Mari-drefi-kafainganana',
 'exif-gpsspeed' => 'Hafaingam-pandray GPS',
 'exif-gpsimgdirection' => "Fitodihan'ny sary",
 'exif-gpsdestlatitude' => 'Laharam-pehintany tanjona',
+'exif-gpsdestlongitude' => 'Laharan-jarahasina tanjona',
 'exif-gpsareainformation' => 'Anaram-paritra GPS',
 'exif-gpsdatestamp' => 'Daty GPS',
 'exif-worldregioncreated' => 'Faritany nangalana ity ilay sary',
@@ -3281,12 +3323,34 @@ Tokony sary tsy misy na sary tsy izy ny rohy voalohany anaty andalana iray .
 'exif-flash-fired-1' => 'Nirehitra ny flash',
 'exif-flash-return-0' => 'Tsy misy stirôbôskôpy mamerina lefa fahitana',
 'exif-flash-mode-3' => 'Toetra aotômatika',
+'exif-flash-function-1' => "Tsy misy lefan'ny flash",
+'exif-flash-redeye-1' => 'Fanoherana ny fisiana maso mena',
 
 'exif-focalplaneresolutionunit-2' => 'Posy',
 
 'exif-sensingmethod-1' => 'Tsy voafaritra',
 
+'exif-gaincontrol-0' => 'Tsy misy',
+'exif-gaincontrol-1' => 'Fahazoana miabo kely',
+'exif-gaincontrol-2' => 'Fitomboana miabo be',
+'exif-gaincontrol-3' => 'Fitomboana miiba kely',
+'exif-gaincontrol-4' => 'Fitomboana miiba be',
+
+'exif-contrast-0' => 'Tsotra',
+'exif-contrast-1' => 'Kely',
+'exif-contrast-2' => 'Ambony',
+
+'exif-saturation-0' => 'Tsotra',
+'exif-saturation-1' => 'Ambany',
+'exif-saturation-2' => 'Ambony',
+
+'exif-sharpness-0' => 'Tsotra',
+'exif-sharpness-1' => 'Malefaka',
+
+'exif-subjectdistancerange-0' => 'Tsy fantatra',
 'exif-subjectdistancerange-1' => 'Makrô',
+'exif-subjectdistancerange-2' => 'Fijerena akaiky',
+'exif-subjectdistancerange-3' => 'Fijerena lavitra',
 
 # Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
 'exif-gpslatitude-n' => 'Avaratra',
@@ -3306,9 +3370,57 @@ Tokony sary tsy misy na sary tsy izy ny rohy voalohany anaty andalana iray .
 'exif-gpsspeed-m' => "Maily isak'ora",
 'exif-gpsspeed-n' => 'Knot',
 
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => 'Kilometatra',
+'exif-gpsdestdistance-m' => 'Mile',
+'exif-gpsdestdistance-n' => 'Mile naotika',
+
+'exif-gpsdop-excellent' => 'Tena tsara ($1)',
+'exif-gpsdop-good' => 'Tsara ($1)',
+'exif-gpsdop-moderate' => 'Eo ho eo ihany ($1)',
+'exif-gpsdop-fair' => 'Tsara ihany ($1)',
+'exif-gpsdop-poor' => 'Kely ($1)',
+
+'exif-objectcycle-a' => 'Maraina ihany',
+'exif-objectcycle-p' => 'Hariva ihany',
+'exif-objectcycle-b' => 'Sady maraina no hariva',
+
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Tena avaratra',
 'exif-gpsdirection-m' => "Avaratra arak'andriamby",
 
+'exif-dc-contributor' => 'Mpandray anjara',
+'exif-dc-date' => 'Daty',
+'exif-dc-publisher' => 'Mpamoaka',
+'exif-dc-rights' => 'Zo',
+'exif-dc-source' => 'Haino aman-jery niaviana',
+'exif-dc-type' => 'Karazana baino aman-jery',
+
+'exif-rating-rejected' => 'Nolavina',
+
+'exif-isospeedratings-overflow' => 'Mahery ny 65535',
+
+'exif-iimcategory-ace' => 'Kanto, kolontsaina ary fialam-boly',
+'exif-iimcategory-clj' => 'Heloka aman-jo',
+'exif-iimcategory-dis' => 'Voina aman-doza',
+'exif-iimcategory-fin' => 'Toe-karena',
+'exif-iimcategory-edu' => 'Fanabeazana',
+'exif-iimcategory-evn' => 'Tontolo iainana',
+'exif-iimcategory-hth' => 'Fahasalamana',
+'exif-iimcategory-lab' => 'Asa',
+'exif-iimcategory-lif' => 'Fomba fiainana sy fialam-boly',
+'exif-iimcategory-pol' => 'Politika',
+'exif-iimcategory-rel' => 'Finoana',
+'exif-iimcategory-sci' => 'Siansa sy teknôlôjia',
+'exif-iimcategory-soi' => 'Olana ara-tsosialy',
+'exif-iimcategory-spo' => 'Fanatanjahan-tena',
+'exif-iimcategory-war' => 'Ady, tsy fandriampahalemana',
+'exif-iimcategory-wea' => "Toetr'andro",
+
+'exif-urgency-normal' => 'Tsotra ($1)',
+'exif-urgency-low' => 'Ambany ($1)',
+'exif-urgency-high' => 'Ambony ($1)',
+
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'rehetra',
 'namespacesall' => 'rehetra',
@@ -3367,6 +3479,7 @@ Azafady hamafiso fa tena irinao averina hoforonina tokoa ity lahatsoratra ity.",
 'confirm-purge-top' => "Fafana ve ny cache-n'ity pejy ity?",
 
 # action=watch/unwatch
+'confirm-watch-button' => 'OK',
 'confirm-watch-top' => 'Hanaraka ity pejy ity?',
 'confirm-unwatch-button' => 'OK',
 'confirm-unwatch-top' => "Hanala ity pejy ity amin'ny lisitry ny pejy arahinao?",
@@ -3439,8 +3552,8 @@ Azonao atao ihany koa ny [[Special:EditWatchlist/raw|manova ilay lisitra amin'ny
 'version-variables' => 'Miova',
 'version-other' => 'Samihafa',
 'version-hook-subscribedby' => "Nalefan'i",
-'version-version' => '(Santiôna $1)',
-'version-license' => 'Lisansy',
+'version-version' => '($1)',
+'version-license' => 'Lisansa Mediawiki',
 'version-poweredby-others' => 'hafa',
 'version-software' => 'Rindrankahy voapetraka',
 'version-software-product' => 'Vokatra',
@@ -3528,7 +3641,13 @@ Azonao atao ihany koa ny [[Special:EditWatchlist/raw|manova ilay lisitra amin'ny
 
 # New logging system
 'logentry-delete-delete' => "nofafan'i $1 ny pejy $3",
-'logentry-suppress-delete' => "nofafan'i $1 ny pejy $3",
+'logentry-suppress-delete' => "{{GENDER:$2|nofafan'i}} $1 ny pejy $3",
+'revdelete-content-hid' => 'votoatiny nafenina',
+'revdelete-summary-hid' => 'ambangovangom-panovana nafenina',
+'revdelete-uname-hid' => 'anaram-pikambana nafenina',
+'revdelete-content-unhid' => 'votoatiny naseho',
+'revdelete-summary-unhid' => 'ambangovangom-panovana naseho',
+'revdelete-uname-unhid' => 'anaram-pikambana naseho',
 'revdelete-restricted' => "nametraka fanerena ho an'ny mpandrindra",
 'revdelete-unrestricted' => "fanerena nesorina tamin'ny mpandrindra",
 'logentry-move-move' => "nanova ny anaran'i $3 ho $4 i $1",
@@ -3552,8 +3671,16 @@ Azonao atao ihany koa ny [[Special:EditWatchlist/raw|manova ilay lisitra amin'ny
 'feedback-error3' => "Hadisoana: Tsy nisy valiny avy amin'ny API",
 'feedback-thanks' => "Misaotra! lanefa tany amin'ilay pejy ''[$2 $1]'' ilay fanehoan-kevitrao.",
 'feedback-close' => 'Vita',
+'feedback-bugnew' => 'Efa nomariniko. Hitory baogy iray',
+
+# Search suggestions
+'searchsuggest-search' => 'Karohy',
+'searchsuggest-containing' => 'misy...',
 
 # API errors
+'api-error-badaccess-groups' => "Tsy afaka mampiditra rakitra eto amin'ity wiki ity ianao.",
+'api-error-badtoken' => 'Hadisoana anaty : "token" diso.',
+'api-error-copyuploaddisabled' => "Tsy avela atao eto amin'ity lohamilina ity ny fampidiran-drakitra amin'ny alalan'ny URL.",
 'api-error-empty-file' => 'Tsy misy na inona na inna ilay rakitra nalefanao.',
 'api-error-emptypage' => 'Tsy azo atao ny mamorona pejy vaovao tsy misy votoatiny.',
 'api-error-fetchfileerror' => 'Hadisoana naaty : misy hadisoana nitranga teo am-pangalana ilay rakitra.',
index 7335319..7740be1 100644 (file)
@@ -325,7 +325,6 @@ $messages = array(
 'vector-action-protect' => 'Linduangkan',
 'vector-action-undelete' => 'Pambatalan pangapuihan',
 'vector-action-unprotect' => 'Tuka palinduangan',
-'vector-simplesearch-preference' => 'Aktipan kotak pancarian sadarano (hanyo kulik Vector)',
 'vector-view-create' => 'Buek',
 'vector-view-edit' => 'Suntiang',
 'vector-view-history' => 'Riwayaik',
@@ -594,8 +593,6 @@ Parhatian bahawa bara laman mungkin masih taruih manunjukkan bahawa Sanak masih
 'gotaccountlink' => 'Masuak log',
 'userlogin-resetlink' => 'Lupo rincian info masuak Sanak?',
 'userlogin-resetpassword-link' => 'Buek ulang kato sandi',
-'helplogin-url' => 'Help:Masuak log',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Bantuan untuak masuak log]]',
 'createacct-join' => 'Masuakan informasi Sanak di bawah ko.',
 'createacct-emailrequired' => 'Alamaik surel',
 'createacct-emailoptional' => 'Alamaik surel (opsional)',
@@ -1065,8 +1062,6 @@ Sanak dapek malieknyo; rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/del
 'revdelete-show-file-submit' => 'Yo',
 'revdelete-selected' => "'''{{PLURAL:$2|Revisi piliahan}} dari [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Log piliahan}}:'''",
-'revdelete-text' => "'''Revisi jo tindakan nan alah dihapuih akan tetap muncua di versi tadaulu dan laman log, tapi bagian dari isinyo indak dapek diakses publik.'''
-Panguruih {{SITENAME}} lain tetap dapek mangakses isi nan tasuruak ko dan dapek mambatalan pangapuihannyo manggunoan antarmuko nan samo, kacuali ado pambatehan lain nan dibuek.",
 'revdelete-confirm' => 'Tolong konfirmasi baso Sanak samemang bamakasuik malakuan iko, mamahami konsekuensinyo, dan baso Sanak malakuannyo sasuai jo [[{{MediaWiki:Policy-url}}|kabijakan]].',
 'revdelete-suppress-text' => "Panyambunyian revisi '''hanyo''' buliah digunoan untuak kasus-kasus barikuik:
 * Informasi paribadi nan indak patuik
index 29a6edf..e0e6df2 100644 (file)
@@ -390,7 +390,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Испраќај ми мои примероци од писмата што ги праќам на другите корисници',
 'tog-diffonly' => 'Не ја покажувај содржината на страницата под разликите',
 'tog-showhiddencats' => 'Прикажи скриени категории',
-'tog-noconvertlink' => 'Оневозможи претворање на наслов на врска',
 'tog-norollbackdiff' => 'Изостави ја разликата по извршено отповикување',
 'tog-useeditwarning' => 'Предупреди ме кога сакам да напуштам страница за уредување без да ги имам зачувано промените',
 'tog-prefershttps' => 'Секогаш најавувај ме преку безбедна врска',
@@ -517,7 +516,6 @@ $messages = array(
 'vector-action-protect' => 'Заштити',
 'vector-action-undelete' => 'Врати',
 'vector-action-unprotect' => 'Измени заштита',
-'vector-simplesearch-preference' => 'Овозможи упростено поле за пребарување (само за рувото „Векторско“)',
 'vector-view-create' => 'Создај',
 'vector-view-edit' => 'Уреди',
 'vector-view-history' => 'Историја',
@@ -577,7 +575,7 @@ $messages = array(
 'viewtalkpage' => 'Видете го разговорот',
 'otherlanguages' => 'На други јазици',
 'redirectedfrom' => '(Пренасочено од $1)',
-'redirectpagesub' => 'СÑ\82Ñ\80аниÑ\86а Ð·Ð° Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aе',
+'redirectpagesub' => 'Ð\9fÑ\80енаÑ\81оÑ\87Ñ\83ваÑ\87ка Ñ\81Ñ\82Ñ\80аниÑ\86а',
 'lastmodifiedat' => 'Последната промена на страницава е извршена на $1 г. во $2 ч.',
 'viewcount' => 'Оваа страница била посетена {{PLURAL:$1|еднаш|$1 пати}}.',
 'protectedpage' => 'Заштитена страница',
@@ -723,8 +721,8 @@ $1',
 'badtitle' => 'Неисправен наслов',
 'badtitletext' => 'Бараниот наслов е грешен, празен или неисправно поврзан меѓујазичен или меѓувики наслов. 
 Може да содржи недопуштени знаци.',
-'perfcached' => 'СледниÑ\82е Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и Ñ\81е ÐºÐµÑ\88иÑ\80ани Ð¸ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð½Ðµ Ñ\81е Ñ\82ековни. Ð\92о ÐºÐµÑ\88от {{PLURAL:$1|е достапен највеќе еден резултат|се достапни највеќе $1 резултати}}.',
-'perfcachedts' => 'СледниÑ\82е Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и Ñ\81е ÐºÐµÑ\88иÑ\80ани, Ð¿Ð¾Ñ\81леден Ð¿Ð°Ñ\82 Ð¿Ð¾Ð´Ð½Ð¾Ð²ÐµÐ½Ð¸ Ð½Ð° $1. Ð\92о ÐºÐµÑ\88от {{PLURAL:$4|е достапен највеќе еден резултат|се достапни највеќе $4 резултати}}.',
+'perfcached' => 'СледниÑ\82е Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и Ñ\81е Ð¼ÐµÑ\93Ñ\83Ñ\81кладиÑ\80ани Ð¸ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð½Ðµ Ñ\81е Ñ\82ековни. Ð\92о Ð¼ÐµÑ\93Ñ\83Ñ\81кладот {{PLURAL:$1|е достапен највеќе еден резултат|се достапни највеќе $1 резултати}}.',
+'perfcachedts' => 'СледниÑ\82е Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и Ñ\81е Ð¼ÐµÑ\93Ñ\83Ñ\81кладиÑ\80ани, Ð¿Ð¾Ñ\81леден Ð¿Ð°Ñ\82 Ð¿Ð¾Ð´Ð½Ð¾Ð²ÐµÐ½Ð¸ Ð½Ð° $1. Ð\92о Ð¼ÐµÑ\93Ñ\83Ñ\81кладот {{PLURAL:$4|е достапен највеќе еден резултат|се достапни највеќе $4 резултати}}.',
 'querypage-no-updates' => 'Подновите на оваа страница моментално се оневозможени.
 Податоците овде во моментов нема да се подновуваат.',
 'viewsource' => 'Преглед',
@@ -747,7 +745,7 @@ $2',
 'customjsprotected' => 'Немате дозвола да ја менувате оваа страница со JavaScript  бидејќи содржи туѓи лични нагодувања.',
 'mycustomcssprotected' => 'Немате дозвола да ја уредувате оваа каскадна стилска страница (CSS).',
 'mycustomjsprotected' => 'Немате дозвола да ја уредувате оваа страница со JavaScript.',
-'myprivateinfoprotected' => 'Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ð° Ð´Ð° Ð³Ð¸ Ñ\83Ñ\80едÑ\83ваÑ\82е Ð²Ð°Ñ\88иÑ\82е Ð¿Ñ\80иваÑ\82ни информации.',
+'myprivateinfoprotected' => 'Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ð° Ð´Ð° Ð³Ð¸ Ñ\83Ñ\80едÑ\83ваÑ\82е Ð²Ð°Ñ\88иÑ\82е Ð»Ð¸Ñ\87ни информации.',
 'mypreferencesprotected' => 'Немате дозвола да ги уредувате вашите нагодувања.',
 'ns-specialprotected' => 'Специјални страници не може да се уредуваат.',
 'titleprotected' => "Овој наслов од страна на [[User:$1|$1]] е заштитен и не може да се создаде.
@@ -767,9 +765,9 @@ $2',
 'virus-unknownscanner' => 'непознат антивирус:',
 
 # Login and logout pages
-'logouttext' => "'''Сега сте одјавени.'''
+'logouttext' => '<strong>Сега сте одјавени.</strong>
 
-Да напоменеме дека некои страници може да продолжат да се прикажуваат како да сте најавени, се додека не го исчистите кешот на вашиот прелистувач.",
+Да напоменеме дека некои страници може да продолжат да се прикажуваат како да сте најавени, сè додека не го исчистите меѓускладот на вашиот прелистувач.',
 'welcomeuser' => 'Добр едојдовте, $1!',
 'welcomecreation-msg' => 'Вашата корисничка сметка е создадена.
 Не заборавајте да ги измените вашите [[Special:Preferences|{{SITENAME}} нагодувања]].',
@@ -807,8 +805,6 @@ $2',
 'gotaccountlink' => 'Најавете се',
 'userlogin-resetlink' => 'Си ги заборавивте податоците за најава?',
 'userlogin-resetpassword-link' => 'Ја заборавивте лозинката?',
-'helplogin-url' => 'Help:Најава',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Помош со најавата]]',
 'userlogin-loggedin' => 'Веќе сте најавени како {{GENDER:$1|$1}}.
 Со образецот подолу можете да се најавите како друг корисник.',
 'userlogin-createanother' => 'Направи нова сметка',
@@ -906,6 +902,10 @@ $2',
 'suspicious-userlogout' => 'Вашето барање за одјава е одбиено бидејќи се чини дека е испратено од расипан прелистувач или кеширачки застапник (proxy).',
 'createacct-another-realname-tip' => 'Вистинското име е незадолжително.
 Доколку изберете да го внесете, тоа може да се искористи за оддавање на заслуги за Вашата работа.',
+'pt-login' => 'Најава',
+'pt-login-button' => 'Најава',
+'pt-createaccount' => 'Направи сметка',
+'pt-userlogout' => 'Одјава',
 
 # Email sending
 'php-mail-error-unknown' => 'Непозната грешка во функцијата mail() на PHP',
@@ -914,8 +914,7 @@ $2',
 
 # Change password dialog
 'changepassword' => 'Смени лозинка',
-'resetpass_announce' => 'Најавени сте со привремена лозинка пратена по е-пошта.
-За да го завршите пријавувањето, мора да поставите нова лозинка овде:',
+'resetpass_announce' => 'За да го завршите пријавувањето, мора да зададете нова лозинка.',
 'resetpass_text' => '<!-- Тука внесете текст -->',
 'resetpass_header' => 'Промена на корисничка лозинка',
 'oldpassword' => 'Стара лозинка:',
@@ -931,8 +930,16 @@ $2',
 'resetpass-submit-cancel' => 'Откажи',
 'resetpass-wrong-oldpass' => 'Погрешна привремена или тековна лозинка.
 Можеби веќе ја имате успешно променето вашата лизинка или сте побарале нова привремена лозинка.',
+'resetpass-recycled' => 'Задајте друга лозинка, поинаква од сегашната.',
+'resetpass-temp-emailed' => 'Се највивте со привремен код што ви го дадовме по е-пошта.
+За да ја довршите најавата, ќе мора тука да зададете нова лозинка:',
 'resetpass-temp-password' => 'Привремена лозинка:',
 'resetpass-abort-generic' => 'Смената на лозинката е откажана од додаток.',
+'resetpass-expired' => 'Лозинката ви е истечена. Задајте нова лозинка за да се најавите.',
+'resetpass-expired-soft' => 'Лозинката ви е истечена и ќе мора да зададете друга. Изберете ја сега, или пак стиснете на „{{int:resetpass-submit-cancel}}“ за да ја зададете подоцна.',
+'resetpass-validity-soft' => 'Лозинката ви е неважечка: $1
+
+Изберете друга сега, или пак стиснете на „{{int:resetpass-submit-cancel}}“ за да ја зададете подоцна.',
 
 # Special:PasswordReset
 'passwordreset' => 'Менување на лозинка',
@@ -988,7 +995,7 @@ $2
 
 # Special:ResetTokens
 'resettokens' => 'Врати одново шифри',
-'resettokens-text' => 'Ð\9cожеÑ\82е Ñ\88иÑ\84Ñ\80иÑ\82е Ð´Ð° Ð³Ð¸ Ð²Ñ\80аÑ\82иÑ\82е Ð¾Ð´Ð½Ð¾Ð²Ð¾ Ñ\88Ñ\82о Ð¾Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ñ\83ва Ð¿Ñ\80иÑ\81Ñ\82ап Ð´Ð¾ Ð¸Ð·Ð²ÐµÑ\81ни Ð¿Ñ\80иваÑ\82ни податоци што се однесуваат на вашата овдешна сметка.
+'resettokens-text' => 'Ð\9cожеÑ\82е Ñ\88иÑ\84Ñ\80иÑ\82е Ð´Ð° Ð³Ð¸ Ð²Ñ\80аÑ\82иÑ\82е Ð¾Ð´Ð½Ð¾Ð²Ð¾ Ñ\88Ñ\82о Ð¾Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ñ\83ва Ð¿Ñ\80иÑ\81Ñ\82ап Ð´Ð¾ Ð¸Ð·Ð²ÐµÑ\81ни Ð»Ð¸Ñ\87ни податоци што се однесуваат на вашата овдешна сметка.
 
 Ова треба да се направи ако по грешка сте споделиле нешто со некого или ако сметката ви е изложена на опасност.',
 'resettokens-no-tokens' => 'Нема шифри за враќање.',
@@ -1101,12 +1108,11 @@ $2
 'userpage-userdoesnotexist-view' => 'Корисничката сметка „$1“ не е регистрирана.',
 'blocked-notice-logextract' => 'Овој корисник е моментално блокиран.
 Подолу е прикажан последниот дневнички запис:',
-'clearyourcache' => "'''Напомена: По зачувувањето морате да го исчистите кешот на прелистувачот за да можете ги видите промените.'''
-* '''Firefox / Safari:''' Држете ''Shift'' и стиснете на ''Reload'' или притиснете ''Ctrl-F5'' или ''Ctrl-R'' (''⌘-R'' на Mac);
-* '''Google Chrome:''' Притиснете ''Ctrl-Shift-R'' (''⌘-R'' на Mac)
-* '''Internet Explorer:''' Држете ''Ctrl'' додека притискате на ''Refresh'' или притиснете ''Ctrl-F5''.
-* '''Konqueror:''' Стиснете на „Превчитај“ или на ''F5'';
-* '''Opera:''' Исчистете го кешот во ''Tools → Preferences'';",
+'clearyourcache' => "<strong>Напомена:</strong>  По зачувувањето морате да го исчистите меѓускладот (кеш) на прелистувачот за да можете ги видите промените.
+* <strong>Firefox / Safari:</strong> Држете <em>Shift</em> и стиснете на <em>Превчитај</em> (<em>Reload</em>) или притиснете <em>Ctrl-F5</em> или <em>Ctrl-R</em> (''⌘-R'' на Mac);
+* <strong>Google Chrome:</strong> Притиснете <em>Ctrl-Shift-R</em> (<em>⌘-R</em> на Mac)
+* <strong>Internet Explorer:</strong> Држете <em>Ctrl</em> додека притискате на <em>Refresh</em> или притиснете <em>Ctrl-F5</em>.
+* <strong>Opera:</strong> Исчистете го меѓускладот во <em>Tools → Preferences</em>",
 'usercssyoucanpreview' => "'''Совет:''' Употребете го копчето „{{int:showpreview}}“ за да го испробате вашиот нов CSS пред да зачувате.",
 'userjsyoucanpreview' => "'''Совет:''' Употребете го копчето „{{int:showpreview}}“ за да ја испробате вашата нова JavaScript  пред да зачувате.",
 'usercsspreview' => "'''Запомнете дека ова е само преглед на вашиот кориснички CSS код, страницата сè уште не е зачувана!'''",
@@ -1230,7 +1236,7 @@ $2
 Некои шаблони нема да бидат вклучени.",
 'post-expand-template-inclusion-category' => 'Страници каде што големината на вклучените шаблони е пречекорена',
 'post-expand-template-argument-warning' => "'''Предупредување:''' Оваа страница содржи најмалку еден шаблонски аргумент кој е со преголема должина.
-Таквите аргументи ќе бидат изземени при парсирањето.",
+Таквите аргументи ќе бидат изземени при расчленувањето.",
 'post-expand-template-argument-category' => 'Страници кои содржат изземени аргументи на шаблони',
 'parser-template-loop-warning' => 'Пронајдена е јамка во шаблонот: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Пречекорена е границата на длабочината на рекурзијата во шаблонот ($1)',
@@ -1333,8 +1339,10 @@ $3 ја наведе следнава причина: ''$2''",
 'revdelete-show-file-submit' => 'Да',
 'revdelete-selected' => "'''{{PLURAL:$2|Избрана ревизија|Избрани ревизии}} од [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Одбран настан од дневник|Одбрани настани од дневник}}:'''",
-'revdelete-text' => "'''Избришаните измени и настани сѐ уште ќе се појавуваат во историјата на страницата и дневниците, но делови од нивната содржина ќе бидат недостапни за јавноста.'''
-Други администратори на {{SITENAME}} сѐ уште ќе имаат пристап до скриената содржина и ќе можат да ја вратат преку истиот посредник, освен ако не се поставени дополнителни ограничувања.",
+'revdelete-text-text' => 'Избришаните ревизии сепак се појавуваат во историјата, но делови од нивната содржина ќе бидат недостапни за јавноста.',
+'revdelete-text-file' => 'Избришаните верзии на податотеките сепак се појавуваат во нејзината историја, но делови од нивната содржина ќе бидат недостапни за јавноста.',
+'logdelete-text' => 'Избришаните дневнички ставки сепак се појавуваат во дневниците, но делови од нивната содржина ќе бидат недостапни за јавноста.',
+'revdelete-text-others' => 'Другите администратори на {{SITENAME}} сепак ќе имаат пристап до скриените содржини и ќе можат да го повратат избришаното преку овој ист посредник, доколку не ставите дополнителни ограничувања.',
 'revdelete-confirm' => 'Потврдете дека сакате да го направите ова, дека ги сфаќате последиците, и дека тоа го правите во согласност со [[{{MediaWiki:Policy-url}}|правилата]].',
 'revdelete-suppress-text' => "Притајувањето се користи '''само''' во следниве случаи:
 * Потенцијално клеветнички информации
@@ -1459,7 +1467,7 @@ $1",
 'searchprofile-images-tooltip' => 'Пребарување на податотеки',
 'searchprofile-everything-tooltip' => 'Пребарување по сета содржина (вклучувајќи страници за разговор)',
 'searchprofile-advanced-tooltip' => 'Пребарување во именски простори по избор',
-'search-result-size' => '$1 ({{PLURAL:$2|1 збор|$2 збора}})',
+'search-result-size' => '$1 ({{PLURAL:$2|еден збор|$2 збора}})',
 'search-result-category-size' => '{{PLURAL:$1|1 член|$1 члена}} ({{PLURAL:$2|1 поткатегорија|$2 поткатегории}}, {{PLURAL:$3|1 податотека|$3 податотеки}})',
 'search-result-score' => 'Релевантност: $1%',
 'search-redirect' => '(пренасочување $1)',
@@ -1474,6 +1482,7 @@ $1",
 'searchrelated' => 'поврзано',
 'searchall' => 'сè',
 'showingresults' => "Подолу {{PLURAL:$1|е прикажан '''1''' резултат|се прикажани '''$1''' резултати}} почнувајќи од бр. '''$2'''.",
+'showingresultsinrange' => 'Долу {{PLURAL:$1|е прикажан до <strong>еден</strong> резултат|се прикажани до <strong>$1</strong> резултати}} во опсег од <strong>$2</strong> до <strong>$3</strong>.',
 'showingresultsnum' => "Подолу {{PLURAL:$3|е прикажан '''1''' резултат|се прикажани '''$3''' резултати}} почнувајќи од '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Резултат '''$1''' од '''$3'''|Резултати '''$1 - $2''' од '''$3'''}} за '''$4'''",
 'search-nonefound' => 'Нема резултати што одговараат на бараното.',
@@ -1524,7 +1533,7 @@ $1",
 'stub-threshold' => 'Праг за <a href="#" class="stub">никулци</a> (бајти):',
 'stub-threshold-disabled' => 'Оневозможено',
 'recentchangesdays' => 'Денови за приказ во скорешните промени:',
-'recentchangesdays-max' => '(највеќе $1 {{PLURAL:$1|ден|дена}})',
+'recentchangesdays-max' => '(највеќе {{PLURAL:$1|еден ден|$1 дена}})',
 'recentchangescount' => 'Број на уредувања кои ќе се прикажуваат по основно:',
 'prefs-help-recentchangescount' => 'Подразбира скорешни промени, истории на страници и дневници.',
 'prefs-help-watchlist-token2' => 'Ова е тајна шифра за вашиот канализиран список на набљудувања.
@@ -1676,7 +1685,7 @@ $1",
 'right-reupload-own' => 'Преснимување на постоечка податотека подигната од вас',
 'right-reupload-shared' => 'Презапис на едни податотеки врз други на заедничкото мултимедијално складиште локално',
 'right-upload_by_url' => 'Подигање на податотека од URL-адреса',
-'right-purge' => 'Ð\91Ñ\80иÑ\88еÑ\9aе Ð¾Ð´ Ð¾Ð¿Ñ\81лÑ\83жÑ\83ваÑ\87ки ÐºÐµÑ\88 на страницата без барање потврда за тоа',
+'right-purge' => 'Ð\91Ñ\80иÑ\88еÑ\9aе Ð¾Ð´ Ð¾Ð¿Ñ\81лÑ\83жÑ\83ваÑ\87ки Ð¼ÐµÑ\93Ñ\83Ñ\81клад на страницата без барање потврда за тоа',
 'right-autoconfirmed' => 'Без ограничувања на стапки за IP-адреса',
 'right-bot' => 'Третиран како автоматски процес',
 'right-nominornewtalk' => 'Ситните уредувања да не поттикнуваат потсетник за нова порака',
@@ -1691,7 +1700,7 @@ $1",
 'right-browsearchive' => 'Пребарување на избришани страници',
 'right-undelete' => 'Обновување избришана страница',
 'right-suppressrevision' => 'Прегледување и враќање на ревизии скриени од администратори',
-'right-suppressionlog' => 'Ð\93ледаÑ\9aе Ð½Ð° Ð¿Ñ\80иваÑ\82ни дневници',
+'right-suppressionlog' => 'Ð\93ледаÑ\9aе Ð½Ð° Ð»Ð¸Ñ\87ни дневници',
 'right-block' => 'Оневозможување на останати корисници да уредуваат',
 'right-blockemail' => 'Оневозможување корисници да праќаат е-пошта',
 'right-hideuser' => 'Блокирање корисници, сокривање од јавноста',
@@ -1709,8 +1718,8 @@ $1",
 'right-editmyuserjs' => 'Уредување на сопствени кориснички податотеки со JavaScript',
 'right-viewmywatchlist' => 'Преглед на вашиот список на набљудувања',
 'right-editmywatchlist' => 'Уредување на вашиот список на набљудувања. Извесни дејства сепак ќе ставаат страници во списокот и без да го имате ова право.',
-'right-viewmyprivateinfo' => 'Ð\9fÑ\80еглед Ð½Ð° Ñ\81опÑ\81Ñ\82вениÑ\82е Ð¿Ñ\80иваÑ\82ни податоци (на пр. е-пошта, вистинско име и презиме)',
-'right-editmyprivateinfo' => 'УÑ\80едÑ\83ваÑ\9aе Ð½Ð° Ñ\81опÑ\81Ñ\82вениÑ\82е Ð¿Ñ\80иваÑ\82ни податоци (на пр. е-пошта, вистинско име и презиме)',
+'right-viewmyprivateinfo' => 'Ð\9fÑ\80еглед Ð½Ð° Ñ\81опÑ\81Ñ\82вениÑ\82е Ð»Ð¸Ñ\87ни податоци (на пр. е-пошта, вистинско име и презиме)',
+'right-editmyprivateinfo' => 'УÑ\80едÑ\83ваÑ\9aе Ð½Ð° Ñ\81опÑ\81Ñ\82вениÑ\82е Ð»Ð¸Ñ\87ни податоци (на пр. е-пошта, вистинско име и презиме)',
 'right-editmyoptions' => 'Уредување на вашите нагодувања',
 'right-rollback' => 'Брзо отповикување на уредувањата на последниот корисник што уредувал одредена страница',
 'right-markbotedits' => 'Означување на вратени уредувања како ботовски уредувања',
@@ -1759,7 +1768,7 @@ $1",
 'action-browsearchive' => 'барање на избришани страници',
 'action-undelete' => 'обнови ја оваа страница',
 'action-suppressrevision' => 'прегледај ја и обнови ја оваа скриена ревизија',
-'action-suppressionlog' => 'преглед на овој приватен дневник',
+'action-suppressionlog' => 'преглед на овој li;en дневник',
 'action-block' => 'оневозможи го овој корисник да уредува',
 'action-protect' => 'измени го степенот на заштита на оваа страница',
 'action-rollback' => 'брзо отповикување на измени направени од последниот уредник на страницата',
@@ -1775,8 +1784,8 @@ $1",
 'action-sendemail' => 'испраќање на е-пошта',
 'action-editmywatchlist' => 'уредување на вашиот список на набљудувања',
 'action-viewmywatchlist' => 'преглед на вашиот список на набљудувања',
-'action-viewmyprivateinfo' => 'пÑ\80еглед Ð½Ð° Ð²Ð°Ñ\88иÑ\82е Ð¿Ñ\80иваÑ\82ни податоци',
-'action-editmyprivateinfo' => 'Ñ\83Ñ\80едÑ\83ваÑ\9aе Ð½Ð° Ð²Ð°Ñ\88иÑ\82е Ð¿Ñ\80иваÑ\82ни податоци',
+'action-viewmyprivateinfo' => 'пÑ\80еглед Ð½Ð° Ð²Ð°Ñ\88иÑ\82е Ð»Ð¸Ñ\87ни податоци',
+'action-editmyprivateinfo' => 'Ñ\83Ñ\80едÑ\83ваÑ\9aе Ð½Ð° Ð²Ð°Ñ\88иÑ\82е Ð»Ð¸Ñ\87ни податоци',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|промена|промени}}',
@@ -1795,14 +1804,26 @@ $1",
 'recentchanges-legend-heading' => "'''Легенда:'''",
 'recentchanges-legend-newpage' => '(погл. и [[Special:NewPages|списокот на нови страници]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => 'Ð\9fодолÑ\83 Ñ\81е Ð¿Ñ\80омениÑ\82е Ð¾Ð´ <b>$2</b> (се прикажуваат до <b>$1</b>).',
+'rcnotefrom' => 'Ð\9fодолÑ\83 Ñ\81е Ð¿Ñ\80омениÑ\82е Ð½Ð°Ð¿Ñ\80авени Ð¾Ð´ <strong>$2</strong> Ð½Ð°Ð²Ð°Ð¼Ñ\83 (се прикажуваат до <b>$1</b>).',
 'rclistfrom' => 'Прикажи нови промени почнувајќи од $1',
 'rcshowhideminor' => '$1 ситни промени',
+'rcshowhideminor-show' => 'Прикажи',
+'rcshowhideminor-hide' => 'Скриј',
 'rcshowhidebots' => '$1 ботови',
+'rcshowhidebots-show' => 'Прикажи',
+'rcshowhidebots-hide' => 'Скриј',
 'rcshowhideliu' => '$1 најавени корисници',
+'rcshowhideliu-show' => 'Прикажи',
+'rcshowhideliu-hide' => 'Скриј',
 'rcshowhideanons' => '$1 анонимни корисници',
+'rcshowhideanons-show' => 'Прикажи',
+'rcshowhideanons-hide' => 'Скриј',
 'rcshowhidepatr' => '$1 проверени уредувања',
+'rcshowhidepatr-show' => 'Прикажи',
+'rcshowhidepatr-hide' => 'Скриј',
 'rcshowhidemine' => '$1 мои уредувања',
+'rcshowhidemine-show' => 'Прикажи',
+'rcshowhidemine-hide' => 'Скриј',
 'rclinks' => 'Прикажи скорешни $1 промени во последните $2 дена<br />$3',
 'diff' => 'разл',
 'hist' => 'истор',
@@ -1934,6 +1955,8 @@ $1",
 'php-uploaddisabledtext' => 'Подигањето на податотеки е оневозможено во PHP. 
 Проверете го нагодувањето file_uploads.',
 'uploadscripted' => 'Податотеката содржи HTML-код или сценарио што може погрешно да се протолкува во прелистувачот.',
+'uploadscriptednamespace' => 'Овааа SVG-податотека го содржи недопуштениот именски простор „$1“',
+'uploadinvalidxml' => 'Не можев да го расчленам XML-от што се наоѓа во подигнатата податотека.',
 'uploadvirus' => 'Оваа податотека содржи вирус! Повеќе подробности: $1',
 'uploadjava' => 'Податотеката е од типот ZIP што содржи податотека со наставка .class за Java.
 Подигањето на податотеки за Java не е дозволено, бидејќи со нив можат да се заобиколуваат безбедносните ограничувања.',
@@ -2060,7 +2083,7 @@ $1',
 'img-auth-isdir' => 'Се обидувате да пристапите до именикот „$1“.
 Допуштен е само податотечен пристап.',
 'img-auth-streaming' => 'Емитување „$1“.',
-'img-auth-public' => 'ФÑ\83нкÑ\86иÑ\98аÑ\82а Ð½Ð° img_auth.php Ñ\81лÑ\83жи Ð·Ð° Ð¸Ð·Ð»ÐµÐ· Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ð¾Ð´ Ð¿Ñ\80иваÑ\82ни викија.
+'img-auth-public' => 'ФÑ\83нкÑ\86иÑ\98аÑ\82а Ð½Ð° img_auth.php Ñ\81лÑ\83жи Ð·Ð° Ð¸Ð·Ð»ÐµÐ· Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ð¾Ð´ Ð»Ð¸Ñ\87ни викија.
 Ова вики е нагодено како јавно вики.
 Од причини на оптимална сигурност, img_auth.php е оневозможен.',
 'img-auth-noread' => 'Корисникот нема пристап за читање на „$1“.',
@@ -2310,10 +2333,20 @@ $1',
 'deadendpagestext' => 'Следните страници немаат врски кон ниту една друга страница на ова вики.',
 'protectedpages' => 'Заштитени страници',
 'protectedpages-indef' => 'Само бесконечни заштити',
+'protectedpages-summary' => 'На страницата се наведени постоечки страници што се моментално под заштита. За список на наслови што се заштитени од создавање, погледајте [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Само каскадни заштити',
 'protectedpages-noredirect' => 'Скриј пренасочувања',
 'protectedpagesempty' => 'Во моментов нема заштитени страници со параметрите кои ги зададовте.',
+'protectedpages-timestamp' => 'Време и датум',
+'protectedpages-page' => 'Страница',
+'protectedpages-expiry' => 'Истекува',
+'protectedpages-performer' => 'Заштитувач',
+'protectedpages-params' => 'Параметри на заштитата',
+'protectedpages-reason' => 'Причина',
+'protectedpages-unknown-timestamp' => 'Непознато',
+'protectedpages-unknown-performer' => 'Непознат корисник',
 'protectedtitles' => 'Заштитени наслови',
+'protectedtitles-summary' => 'На страницата се наведени наслови што се моментално заштитени од создавање. За список на постоечки страници што се заштитени, погледајте [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Во овој момент нема заштитени наслови кои ги задоволуваат наведените критериуми.',
 'listusers' => 'Список на корисници',
 'listusers-editsonly' => 'Прикажи само корисници кои уредувале',
@@ -2342,7 +2375,7 @@ $1',
 'booksources' => 'Печатени извори',
 'booksources-search-legend' => 'Пребарување на извори за книга',
 'booksources-isbn' => 'ISBN:',
-'booksources-go' => 'Ð\9eди',
+'booksources-go' => 'Ð\9dаÑ\98ди',
 'booksources-text' => 'Ова е список на врски кон други мрежни места кои продаваат нови и користени книги, и тие може
 да имаат повеќе информации за книгите што ги баравте:',
 'booksources-invalid-isbn' => 'Наведениот ISBN се чини неправилен. Проверете да не настанала некоја грешка при копирањето од изворот.',
@@ -2411,7 +2444,7 @@ $1',
 
 # Special:ActiveUsers
 'activeusers' => 'Список на активни корисници',
-'activeusers-intro' => 'Ова е список на корисници кои биле на некој начин активни во последните $1 {{PLURAL:$1|ден|дена}}.',
+'activeusers-intro' => 'Ова е список на корисници кои биле на некој начин активни во последните {{PLURAL:$1|еден ден|$1 дена}}.',
 'activeusers-count' => '$1 {{PLURAL:$1|дејство|дејства}} {{PLURAL:$3|денес|во последните $3 дена}}',
 'activeusers-from' => 'Прикажи корисници почнувајќи од:',
 'activeusers-hidebots' => 'Скриј ботови',
@@ -2592,7 +2625,7 @@ $UNWATCHURL
 'delete-warning-toobig' => 'Оваа страница има долга историја на уредување, преку $1 {{PLURAL:$1|ревизија|ревизии}}.
 Бришењето може да предизвика проблеми при работењето на базата на податоци на {{SITENAME}};
 продолжете доколку сте сигруни дека треба тоа да го сторите.',
-'deleting-backlinks-warning' => "'''Предупредување:''' До страницата што сакате да ја избришете водат други страници или се превметнуваат во неа.",
+'deleting-backlinks-warning' => "'''Предупредување:''' До страницата што сакате да ја избришете водат [[Special:WhatLinksHere/{{FULLPAGENAME}}|други страници]] или пак се превметнуваат во неа.",
 
 # Rollback
 'rollback' => 'Отповикај промени',
@@ -2668,6 +2701,7 @@ $UNWATCHURL
 ** Зачестен спам
 ** Непродуктивна уредувачка војна
 ** Страница со зачестена посета
+** Сеприсутност на шаблонот/превметнувањето
 ** Административна постапка',
 'protect-edit-reasonlist' => 'Уреди причини за заштита',
 'protect-expiry-options' => '1 час: 1 hour,1 ден:1 day,1 недела:1 week,2 недели:2 weeks,1 месец:1 month,3 месеци:3 months,6 месеци:6 months,1 година:1 year,бесконечно:infinite',
@@ -2773,8 +2807,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Оваа IP-адреса е моментално блокирана.
 Подолу е наведен најновиот дневнички запис на блокирање:',
 'sp-contributions-search' => 'Пребарување на придонеси',
+'sp-contributions-suppresslog' => 'притаени придонеси на корисникот',
 'sp-contributions-username' => 'IP-адреса или корисничко име:',
 'sp-contributions-toponly' => 'Прикажувај само последни ревизии',
+'sp-contributions-newonly' => 'Прикажувај само новосоздадени страници',
 'sp-contributions-submit' => 'Пребарај',
 
 # What links here
@@ -2877,7 +2913,7 @@ $1',
 'contribslink' => 'придонеси',
 'emaillink' => 'испрати е-пошта',
 'autoblocker' => 'Автоматски сте блокирани бидејќи вашата IP-адреса била скоро користена од „[[User:$1|$1]]“.
\9fÑ\80иÑ\87инаÑ\82а Ð·Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aе Ð½Ð° $1 Ð±Ð¸Ð»Ð°: „$2“',
\9dаведенаÑ\82а Ð¿Ñ\80иÑ\87ина Ð·Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aе Ð½Ð° $1 Ð³Ð»Ð°Ñ\81и: „$2“',
 'blocklogpage' => 'Дневник на блокирања',
 'blocklog-showlog' => 'Овој корисник бил претходно блокиран.
 Дневникот на блокирања, за ваша информација е прикажан подолу:',
@@ -2912,7 +2948,7 @@ $1',
 'ip_range_toolarge' => 'Не се дозволени опсежни блокирања поголеми од /$1.',
 'proxyblocker' => 'Блокер на застапници (proxy)',
 'proxyblockreason' => 'Вашата IP-адреса е блокирана бидејќи претставува отворен застапник (proxy).
-Ве молиме контактирајте со вашиот доставувач на Интернет услуги или техничката поддршка и информирајте ги за овој сериозен безбедносен проблем.',
+Ве молиме контактирајте со вашиот семрежен услужник и или техничката поддршка и информирајте ги за овој сериозен безбедносен проблем.',
 'sorbs' => 'DNSBL',
 'sorbsreason' => 'Вашата IP-адреса е запишана како отворен застапник (proxy) во DNSBL кој го користи {{SITENAME}}..',
 'sorbs_create_account_reason' => 'Вашата IP-адреса е наведена како отворен застапникот (proxy) во DNSBL користена од {{SITENAME}}.
@@ -2948,7 +2984,7 @@ $1',
 'move-page' => 'Премести $1',
 'move-page-legend' => 'Премести страница',
 'movepagetext' => "Со користењето на овој образец можете да преименувате страница, преместувајќи ја целата нејзина историја под ново име.
-Стариот наслов ќе стане страница за пренасочување кон новиот наслов.
+Стариот наслов ќе стане пренасочувачка страница кон новиот наслов.
 Автоматски можете да ги подновите пренасочувањата кои покажуваат кон првобитниот наслов.
 Ако не изберете автоматско подновување, проверете на [[Special:DoubleRedirects|двојни]] или [[Special:BrokenRedirects|прекинати пренасочувања]].
 На вас е одговорноста да се осигурате дека врските ќе продолжат да насочуваат таму за каде се предвидени.
@@ -2959,7 +2995,7 @@ $1',
 Ова може да биде драстична и неочекувана промена за популарна страница;
 осигурајте се дека сте ги разбрале последиците од ова пред да продолжите.",
 'movepagetext-noredirectfixer' => "Со користењето на овој образец можете да преименувате страница, преместувајќи ја целата нејзина историја под ново име.
-Стариот наслов ќе стане страница за пренасочување кон новиот наслов.
+Стариот наслов ќе стане пренасочувачка страница кон новиот наслов.
 Автоматски можете да ги подновите пренасочувањата кои покажуваат кон првобитниот наслов.
 Не заборавајте да проверите [[Special:DoubleRedirects|двојни]] и [[Special:BrokenRedirects|прекинати пренасочувања]].
 На вас е одговорноста да се осигурате дека врските ќе продолжат да насочуваат таму за каде се предвидени.
@@ -3089,6 +3125,7 @@ $2',
 'thumbnail_image-type' => 'Неподдржан тип на слика',
 'thumbnail_gd-library' => 'Нецелосни поставки на графичката библиотека: недостасува функцијата $1',
 'thumbnail_image-missing' => 'Изгледа дека податотеката недостасува: $1',
+'thumbnail_image-failure-limit' => 'Направив премногу обиди ($1 или повеќе) за да ја прикажам минијатурава. Обидете се подоцна.',
 
 # Special:Import
 'import' => 'Увезување на страници',
@@ -3125,7 +3162,7 @@ $2',
 Податотеката е само делумно подигната.',
 'importuploaderrortemp' => 'Неуспешно подигање на увозна податотека.
 Проблеми со привремена папка за податотеки.',
-'import-parse-failure' => 'Ð\9fогÑ\80еÑ\88но XML Ð¿Ð°Ñ\80Ñ\81иÑ\80аÑ\9aе',
+'import-parse-failure' => 'Ð\93Ñ\80еÑ\88ка Ð²Ð¾ Ñ\80аÑ\81Ñ\87ленÑ\83ваÑ\9aеÑ\82о Ð¿Ñ\80и Ñ\83возоÑ\82 Ð½Ð° XML',
 'import-noarticle' => 'Нема страница за увоз!',
 'import-nonewrevisions' => 'Не увезов ниедна ревизија (сите се веќе присутни или изоставени поради грешки)',
 'xml-error-string' => '$1 во ред $2, колона $3 (бајт $4): $5',
@@ -3380,13 +3417,13 @@ $1',
 'file-info' => 'големина: $1, MIME-тип: $2',
 'file-info-size' => '$1 × $2 пиксели, големина: $3, MIME-тип: $4',
 'file-info-size-pages' => '$1 × $2 пиксели, големина: $3, MIME-тип: $4, $5 {{PLURAL:$5|страница|страници}}',
-'file-nohires' => 'Не е достапна поголема резолуција.',
+'file-nohires' => 'Нема верзија со поголема разложеност.',
 'svg-long-desc' => 'SVG податотека, номинално $1 × $2 пиксели, големина: $3',
 'svg-long-desc-animated' => 'Анимирана SVG-податотека, номинално: $1 × $2 пиксели, големина: $3',
 'svg-long-error' => 'Неважечка SVG-податотека: $1',
 'show-big-image' => 'Изворна податотека',
 'show-big-image-preview' => 'Големина на овој преглед: $1.',
-'show-big-image-other' => '{{PLURAL:$2|Ð\94Ñ\80Ñ\83га Ñ\80езолÑ\83Ñ\86иÑ\98а|Ð\94Ñ\80Ñ\83ги Ñ\80езолÑ\83Ñ\86ии}}: $1.',
+'show-big-image-other' => '{{PLURAL:$2|Ð\94Ñ\80Ñ\83га Ñ\80азложеноÑ\81Ñ\82\94Ñ\80Ñ\83ги Ñ\80азложеноÑ\81Ñ\82и}}: $1.',
 'show-big-image-size' => '$1 × $2 пиксели',
 'file-info-gif-looped' => 'кружно',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|кадар|кадри}}',
@@ -3394,7 +3431,7 @@ $1',
 'file-info-png-repeat' => 'пуштено {{PLURAL:$1|еднаш|$1 пати}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|кадар|кадри}}',
 'file-no-thumb-animation' => "'''Напомена: Поради технички ограничувања, минијатурите на оваа податотека нема да се анимираат.'''",
-'file-no-thumb-animation-gif' => "'''Ð\9dапомена: Ð\9fоÑ\80ади Ñ\82еÑ\85ниÑ\87ки Ð¾Ð³Ñ\80аниÑ\87Ñ\83ваÑ\9aа, Ð¼Ð¸Ð½Ð¸Ñ\98аÑ\82Ñ\83Ñ\80иÑ\82е Ð½Ð° GIF-Ñ\81лики Ñ\81о Ð²Ð¸Ñ\81ока Ñ\80езолÑ\83Ñ\86иÑ\98а како оваа нема да се анимираат.'''",
+'file-no-thumb-animation-gif' => "'''Ð\9dапомена: Ð\9fоÑ\80ади Ñ\82еÑ\85ниÑ\87ки Ð¾Ð³Ñ\80аниÑ\87Ñ\83ваÑ\9aа, Ð¼Ð¸Ð½Ð¸Ñ\98аÑ\82Ñ\83Ñ\80иÑ\82е Ð½Ð° GIF-Ñ\81лики Ñ\81о Ð²Ð¸Ñ\81ока Ñ\80азложеноÑ\81Ñ\82 како оваа нема да се анимираат.'''",
 
 # Special:NewFiles
 'newimages' => 'Галерија на нови податотеки',
@@ -3414,10 +3451,10 @@ $1',
 'minutes-abbrev' => '$1 м',
 'hours-abbrev' => '$1 ч',
 'days-abbrev' => '$1 д',
-'seconds' => '{{PLURAL:$1|$1 секунда|$1 секунди}}',
-'minutes' => '{{PLURAL:$1|$1 минута|$1 минути}}',
-'hours' => '{{PLURAL:$1|$1 час|$1 часа}}',
-'days' => '{{PLURAL:$1|$1 ден|$1 дена}}',
+'seconds' => '{{PLURAL:$1|една секунда|$1 секунди}}',
+'minutes' => '{{PLURAL:$1|една минута|$1 минути}}',
+'hours' => '{{PLURAL:$1|еден час|$1 часа}}',
+'days' => '{{PLURAL:$1|еден ден|$1 дена}}',
 'weeks' => '{{PLURAL:$1|$1 недела|$1 недели}}',
 'months' => '{{PLURAL:$1|$1 месец|$1 месеци}}',
 'years' => '{{PLURAL:$1|$1 година|$1 години}}',
@@ -3425,9 +3462,9 @@ $1',
 'just-now' => 'Штотуку',
 
 # Human-readable timestamps
-'hours-ago' => 'пред $1 {{PLURAL:$1|час|часа}}',
-'minutes-ago' => 'пред $1 {{PLURAL:$1|минута|минути}}',
-'seconds-ago' => 'пред $1 {{PLURAL:$1|секунда|секунди}}',
+'hours-ago' => 'пред {{PLURAL:$1|еден час|$1 часа}}',
+'minutes-ago' => 'пред {{PLURAL:$1|една минута|$1 минути}}',
+'seconds-ago' => 'пред {{PLURAL:$1|една секунда|$1 секунди}}',
 'monday-at' => 'понеделникот во $1',
 'tuesday-at' => 'вторникот во $1',
 'wednesday-at' => 'средата во $1',
@@ -3519,8 +3556,8 @@ Variants for Chinese language
 'exif-planarconfiguration' => 'Распоред на податоците',
 'exif-ycbcrsubsampling' => 'Однос на величината на Y спрема C',
 'exif-ycbcrpositioning' => 'Положби на Y и C',
-'exif-xresolution' => 'ХоÑ\80изонÑ\82ална Ñ\80езолÑ\83Ñ\86иÑ\98а',
-'exif-yresolution' => 'Ð\92еÑ\80Ñ\82икална Ñ\80езолÑ\83Ñ\86иÑ\98а',
+'exif-xresolution' => 'ХоÑ\80изонÑ\82ална Ñ\80азложеноÑ\81Ñ\82',
+'exif-yresolution' => 'Ð\92еÑ\80Ñ\82икална Ñ\80азложеноÑ\81Ñ\82',
 'exif-stripoffsets' => 'Положба на податоците',
 'exif-rowsperstrip' => 'Број на редови по блок',
 'exif-stripbytecounts' => 'Бајти по набиен блок',
@@ -3571,9 +3608,9 @@ Variants for Chinese language
 'exif-focallength-format' => '$1 мм',
 'exif-subjectarea' => 'Положба и површина на објектот',
 'exif-flashenergy' => 'Енергија на блицот',
-'exif-focalplanexresolution' => 'РезолÑ\83Ñ\86иÑ\98а Ð½Ð° Ñ\84окÑ\83Ñ\81наÑ\82а Ñ\80амнина  X',
-'exif-focalplaneyresolution' => 'РезолÑ\83Ñ\86иÑ\98а Ð½Ð° Ñ\84окÑ\83Ñ\81ната рамнина Y',
-'exif-focalplaneresolutionunit' => 'Ð\95диниÑ\86а Ð·Ð° Ñ\80езолÑ\83Ñ\86иÑ\98а Ð½Ð° Ñ\84окÑ\83Ñ\81ната рамнина',
+'exif-focalplanexresolution' => 'РазложеноÑ\81Ñ\82 Ð½Ð° Ð¶Ð°Ñ\80иÑ\88наÑ\82а Ñ\80амнина X',
+'exif-focalplaneyresolution' => 'РазложеноÑ\81Ñ\82 Ð½Ð° Ð¶Ð°Ñ\80иÑ\88ната рамнина Y',
+'exif-focalplaneresolutionunit' => 'Ð\95диниÑ\86а Ð·Ð° Ñ\80азложеноÑ\81Ñ\82 Ð½Ð° Ð¶Ð°Ñ\80иÑ\88ната рамнина',
 'exif-subjectlocation' => 'Положба на субјектот',
 'exif-exposureindex' => 'Индекс на експозицијата',
 'exif-sensingmethod' => 'Метод на сензорот',
@@ -4005,8 +4042,8 @@ $5
 
 # action=purge
 'confirm_purge_button' => 'OK',
-'confirm-purge-top' => 'Ð\98Ñ\81Ñ\87иÑ\81Ñ\82и Ð³Ð¾ ÐºÐµÑ\88оÑ\82 Ð½Ð° Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а?',
-'confirm-purge-bottom' => 'Со Ð¾Ð²Ð°Ð° Ð¾Ð¿ÐµÑ\80аÑ\86иÑ\98а Ñ\81е Ñ\87иÑ\81Ñ\82и Ð¾Ð¿Ñ\81лÑ\83жÑ\83ваÑ\87иоÑ\82 ÐºÐµÑ\88 и се прикажува најновата верзија.',
+'confirm-purge-top' => 'Ð\94а Ð³Ð¾ Ð¸Ñ\81Ñ\87иÑ\81Ñ\82ам Ð¼ÐµÑ\93Ñ\83Ñ\81кладоÑ\82 Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86ава?',
+'confirm-purge-bottom' => 'Со Ð¾Ð²Ð°Ð° Ð¾Ð¿ÐµÑ\80аÑ\86иÑ\98а Ñ\81е Ñ\87иÑ\81Ñ\82и Ð¾Ð¿Ñ\81лÑ\83жÑ\83ваÑ\87киоÑ\82 Ð¼ÐµÑ\93Ñ\83Ñ\81клад и се прикажува најновата верзија.',
 
 # action=watch/unwatch
 'confirm-watch-button' => 'ОК',
@@ -4079,7 +4116,7 @@ $5
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => 'Промените во {{PLURAL:$1|последната секунда|последните $1 секунди}} може да не бидат прикажани во списокот.',
-'lag-warn-high' => 'Поради преоптовареност на податочниот опслужувач, промените понови од $1 {{PLURAL:$1|секунда|секунди}}
+'lag-warn-high' => 'Поради преоптовареност на податочниот опслужувач, промените понови од {{PLURAL:$1|една секунда|$1 секунди}}
 може да не бидат прикажани во списокот.',
 
 # Watchlist editor
@@ -4178,7 +4215,7 @@ $5
 'version' => 'Верзија',
 'version-extensions' => 'Воспоставени додатоци',
 'version-specialpages' => 'Специјални страници',
-'version-parserhooks' => 'Ð\9fаÑ\80Ñ\81еÑ\80Ñ\81ки куки',
+'version-parserhooks' => 'РаÑ\81Ñ\87ленÑ\83ваÑ\87ки куки',
 'version-variables' => 'Променливи',
 'version-antispam' => 'Спречување на спам',
 'version-skins' => 'Рува',
@@ -4186,8 +4223,8 @@ $5
 'version-other' => 'Друго',
 'version-mediahandlers' => 'Ракувачи со мултимедијални содржини',
 'version-hooks' => 'Куки',
-'version-parser-extensiontags' => 'Ознаки за парсерски додатоци',
-'version-parser-function-hooks' => 'Куки на парсерските функции',
+'version-parser-extensiontags' => 'Ознаки за расчленувачки додатоци',
+'version-parser-function-hooks' => 'Куки на расчленувачки функции',
 'version-hook-name' => 'Име на кука',
 'version-hook-subscribedby' => 'Претплатено од',
 'version-version' => '(Верзија $1)',
@@ -4433,10 +4470,10 @@ $5
 'api-error-verification-error' => 'Податотеката е оштетена или има погрешна наставка.',
 
 # Durations
-'duration-seconds' => '$1 {{PLURAL:$1|секунда|секунди}}',
-'duration-minutes' => '$1 {{PLURAL:$1|минута|минути}}',
-'duration-hours' => '$1 {{PLURAL:$1|час|часа}}',
-'duration-days' => '$1 {{PLURAL:$1|ден|дена}}',
+'duration-seconds' => '{{PLURAL:$1|една секунда|$1 секунди}}',
+'duration-minutes' => '{{PLURAL:$1|една минута|$1 минути}}',
+'duration-hours' => '{{PLURAL:$1|еден час|$1 часа}}',
+'duration-days' => '{{PLURAL:$1|еден ден|$1 дена}}',
 'duration-weeks' => '$1 {{PLURAL:$1|недела|недели}}',
 'duration-years' => '{{PLURAL:$1|година|години}}',
 'duration-decades' => '$1 {{PLURAL:$1|деценија|децении}}',
@@ -4447,11 +4484,11 @@ $5
 'rotate-comment' => 'Сликата е завртена за $1 {{PLURAL:$1|степен|степени}} вдесно',
 
 # Limit report
-'limitreport-title' => 'Профилни парсерски податоци:',
+'limitreport-title' => 'Профилни расчленувачки податоци:',
 'limitreport-cputime' => 'Употреба на обработувачко време',
-'limitreport-cputime-value' => '$1 {{PLURAL:$1|секунда|секунди}}',
+'limitreport-cputime-value' => '{{PLURAL:$1|една секунда|$1 секунди}}',
 'limitreport-walltime' => 'Употреба на вистинско време',
-'limitreport-walltime-value' => '$1 {{PLURAL:$1|секунда|секунди}}',
+'limitreport-walltime-value' => '{{PLURAL:$1|една секунда|$1 секунди}}',
 'limitreport-ppvisitednodes' => 'Бр. на пројдени јазли од предобработувачот',
 'limitreport-ppgeneratednodes' => 'Бр. на создадени јазли од предобработувачот',
 'limitreport-postexpandincludesize' => 'Големина на вклученото по проширувањето',
@@ -4459,12 +4496,12 @@ $5
 'limitreport-templateargumentsize' => 'Големина на аргументот во шаблонот',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|бајт|бајти}}',
 'limitreport-expansiondepth' => 'Најголема длабочина на проширувањето',
-'limitreport-expensivefunctioncount' => 'Бр. на сложени парсерски функции',
+'limitreport-expensivefunctioncount' => 'Бр. на сложени расчленувачки функции',
 
 # Special:ExpandTemplates
 'expandtemplates' => 'Прошири шаблони',
 'expand_templates_intro' => 'Оваа специјална страница зема еден текст и рекурзивно ги проширува сите шаблони во него.
-Исто така проширува и парсерски функции како
+Исто така проширува и расчленувачки функции како
 <code><nowiki>{{</nowiki>#language:…}}</code> и променливи како
 <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
 Всушност, го проширува сето она што стои во двојни аглести загради.',
@@ -4476,10 +4513,8 @@ $5
 'expand_templates_ok' => 'ОК',
 'expand_templates_remove_comments' => 'Отстрани коментари',
 'expand_templates_remove_nowiki' => 'Притаи <nowiki> ознаки во резултатот',
-'expand_templates_generate_xml' => 'Прикажи XML дрво на парсирање',
+'expand_templates_generate_xml' => 'Прикажи XML-дрво на расчленувањето',
 'expand_templates_generate_rawhtml' => 'Прикажувај сиров HTML',
 'expand_templates_preview' => 'Преглед',
 
-# Unknown messages
-'uploadinvalidxml' => 'Не можев да го парсирам XML-от што се наоѓа во подигнатата податотека.',
 );
index 51308ec..c6e6032 100644 (file)
@@ -383,7 +383,7 @@ $messages = array(
 'tog-uselivepreview' => 'തത്സമയ പ്രിവ്യൂ ഉപയോഗപ്പെടുത്തുക (പരീക്ഷണാടിസ്ഥാനം)',
 'tog-forceeditsummary' => 'തിരുത്തുകളുടെ ചുരുക്കം നൽകിയില്ലെങ്കിൽ എന്നെ ഓർമ്മിപ്പിക്കുക',
 'tog-watchlisthideown' => 'ഞാൻ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽനിന്ന് എന്റെ തിരുത്തുകൾ മറയ്ക്കുക',
-'tog-watchlisthidebots' => 'à´\9eാൻ à´¶àµ\8dà´°à´¦àµ\8dധിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95à´³àµ\81à´\9fàµ\86 à´ªà´\9fàµ\8dà´\9fà´¿à´\95യിൽനിനàµ\8dà´¨àµ\8d à´¯à´¨àµ\8dà´¤àµ\8dà´°à´\99àµ\8dà´\99ൾ à´µà´°àµ\81à´¤àµ\8dതിയ à´¤à´¿à´°àµ\81à´¤àµ\8dതലàµ\81à´\95ൾ à´®à´±à´¯àµ\8dà´\95àµ\8dà´\95àµ\81à´\95',
+'tog-watchlisthidebots' => 'ഞാൻ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽനിന്ന് യന്ത്രങ്ങൾ വരുത്തിയ തിരുത്തുകൾ മറയ്ക്കുക',
 'tog-watchlisthideminor' => 'ഞാൻ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽനിന്ന് ചെറുതിരുത്തുകൾ മറയ്ക്കുക',
 'tog-watchlisthideliu' => 'ഞാൻ ശ്രദ്ധിക്കുന്ന താളുകളിലെ മാറ്റങ്ങളിൽ നിന്നും ലോഗിൻ ചെയ്തിട്ടുള്ളവരുടെ തിരുത്തുകൾ മറയ്ക്കുക',
 'tog-watchlisthideanons' => 'ഞാൻ ശ്രദ്ധിക്കുന്ന താളുകളിലെ മാറ്റങ്ങളിൽ നിന്നും അജ്ഞാത ഉപയോക്താക്കളുടെ തിരുത്തുകൾ മറയ്ക്കുക',
@@ -517,7 +517,6 @@ $messages = array(
 'vector-action-protect' => 'സം‌രക്ഷിക്കുക',
 'vector-action-undelete' => 'മായ്ക്കപ്പെട്ടത് പുനഃസ്ഥാപിക്കുക',
 'vector-action-unprotect' => 'സംരക്ഷണത്തിൽ മാറ്റംവരുത്തുക',
-'vector-simplesearch-preference' => 'ലളിതമായ തിരച്ചിൽ സൗകര്യം സജ്ജമാക്കുക (വെക്റ്റർ ദൃശ്യരൂപത്തിൽ മാത്രം)',
 'vector-view-create' => 'സൃഷ്ടിക്കുക',
 'vector-view-edit' => 'തിരുത്തുക',
 'vector-view-history' => 'നാൾവഴി കാണുക',
@@ -800,9 +799,7 @@ $2',
 'gotaccount' => "താങ്കൾക്ക് അംഗത്വമുണ്ടോ? '''$1'''.",
 'gotaccountlink' => 'പ്രവേശിക്കുക',
 'userlogin-resetlink' => 'താങ്കളുടെ ലോഗിൻ വിവരങ്ങൾ മറന്നു പോയോ?',
-'userlogin-resetpassword-link' => 'താങ്കളുടെ രഹസ്യവാക്ക് മറന്നോ?',
-'helplogin-url' => 'Help:പ്രവേശനം',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|പ്രവേശന സഹായം]]',
+'userlogin-resetpassword-link' => 'താങ്കൾ രഹസ്യവാക്ക് മറന്നോ?',
 'userlogin-loggedin' => 'താങ്കൾ ഇപ്പോൾ തന്നെ {{GENDER:$1|$1}} ആയി പ്രവേശിച്ചിരിക്കുന്നു.
 താഴെ ഉള്ള ഫോം ഉപയോഗിച്ച് മറ്റൊരു ഉപയോക്താവായി പ്രവേശിക്കാവുന്നതാണ്.',
 'userlogin-createanother' => 'മറ്റൊരു അംഗത്വമെടുക്കുക',
@@ -887,6 +884,10 @@ $2',
 'createacct-another-realname-tip' => 'താങ്കളുടെ യഥാർത്ഥ പേര്‌ നൽകണമെന്നു നിർബന്ധമില്ല.
 
 എങ്കിലും അങ്ങനെ ചെയ്താൽ, ഉപയോക്താക്കൾക്ക് അവരരവരുടെ പേരിൽ തന്നെ തങ്ങളുടെ സൃഷ്ടിക്ക് കടപ്പാട് ലഭിക്കുന്നതാണ്.',
+'pt-login' => 'പ്രവേശിക്കുക',
+'pt-login-button' => 'പ്രവേശിക്കുക',
+'pt-createaccount' => 'അംഗത്വമെടുക്കുക',
+'pt-userlogout' => 'ലോഗൗട്ട്',
 
 # Email sending
 'php-mail-error-unknown' => 'പി.എച്ച്.പി.യുടെ main() ഫങ്ഷനിൽ അപരിചിതമായ പിഴവ്',
@@ -895,7 +896,7 @@ $2',
 
 # Change password dialog
 'changepassword' => 'രഹസ്യവാക്ക് മാറ്റുക',
-'resetpass_announce' => 'താà´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95àµ\8d à´\87à´®àµ\86യിൽ à´\86യി à´\95à´¿à´\9fàµ\8dà´\9fà´¿à´¯ à´¤à´¾àµ½à´\95àµ\8dà´\95ാലിà´\95 à´\95àµ\8bà´¡àµ\8d à´\89പയàµ\8bà´\97à´¿à´\9aàµ\8dà´\9aാണàµ\8dâ\80\8c à´\87à´ªàµ\8dà´ªàµ\8bൾ à´²àµ\8bà´\97ിൻ à´\9aàµ\86à´¯àµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dനതàµ\81àµ\8dâ\80\8c. à´²àµ\8bà´\97ിൻ à´ªàµ\8dà´°à´\95àµ\8dà´°à´¿à´¯ à´ªàµ\82ർതàµ\8dതിയാà´\95àµ\81വാൻ à´ªàµ\81തിയàµ\8aà´°àµ\81 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´\87വിà´\9fàµ\86 à´\95àµ\8aà´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´\95:',
+'resetpass_announce' => 'à´ªàµ\8dà´°à´µàµ\87ശിà´\95àµ\8dà´\95ൽ à´ªàµ\82ർതàµ\8dതിയാà´\95àµ\8dà´\95ാൻ, à´ªàµ\81തിയàµ\8aà´°àµ\81 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95ിയിരിà´\95àµ\8dà´\95à´£à´\82.',
 'resetpass_text' => '<!-- എഴുത്ത് ഇവിടെ ചേർക്കുക -->',
 'resetpass_header' => 'അംഗത്വത്തിന്റെ രഹസ്യവാക്ക് മാറ്റുക',
 'oldpassword' => 'പഴയ രഹസ്യവാക്ക്:',
@@ -911,8 +912,13 @@ $2',
 'resetpass-submit-cancel' => 'റദ്ദാക്കുക',
 'resetpass-wrong-oldpass' => 'താത്കാലികമായി ലഭിച്ച അല്ലെങ്കിൽ നിലവിലുള്ളതായി നൽകിയ രഹസ്യവാക്ക് അസാധുവാണ്.
 താങ്കൾ രഹസ്യവാക്ക് വിജയകരമായി മാറ്റിയിട്ടുണ്ടാകാം അല്ലെങ്കിൽ പുതിയ താത്കാലിക രഹസ്യവാക്ക് അഭ്യർത്ഥിച്ചിട്ടുണ്ടാകാം.',
+'resetpass-recycled' => 'താങ്കളുടെ രഹസ്യവാക്ക് നിലവിലുള്ളതിൽ നിന്നും വ്യത്യസ്തമായതാക്കുക.',
+'resetpass-temp-emailed' => 'ഇമെയിൽ വഴി ലഭിച്ച താൽക്കാലിക കോഡ് ഉപയോഗിച്ചാണ് താങ്കൾ പ്രവേശിച്ചിരിക്കുന്നത്.
+പ്രവേശനം പൂർത്തിയാക്കാൻ, ഇവിടെ പുതിയ രഹസ്യവാക്ക് സജ്ജമാക്കുക:',
 'resetpass-temp-password' => 'താത്കാലിക രഹസ്യവാക്ക്:',
 'resetpass-abort-generic' => 'രഹസ്യവാക്ക് മാറ്റുന്നത് ഒരു അനുബന്ധം തടഞ്ഞിരിക്കുന്നു.',
+'resetpass-expired' => 'താങ്കളുടെ രഹസ്യവാക്ക് കാലഹരണപ്പെട്ടിരിക്കുന്നു. പ്രവേശിക്കാനായി പുതിയ രഹസ്യവാക്ക് സജ്ജമാക്കുക.',
+'resetpass-expired-soft' => 'താങ്കളുടെ രഹസ്യവാക്ക് കാലഹരണപ്പെട്ടിരിക്കുന്നതിനാൽ പുനഃസജ്ജീകരിക്കേണ്ടതുണ്ട്. ഇപ്പോൾ തന്നെ പുതിയ രഹസ്യവാക്ക് തിരഞ്ഞെടുക്കുക അല്ലെങ്കിൽ പിന്നീട് പുനഃസജ്ജീകരിക്കാനായി "{{int:resetpass-submit-cancel}}" ഞെക്കുക.',
 
 # Special:PasswordReset
 'passwordreset' => 'രഹസ്യവാക്ക് പുനഃക്രമീകരിക്കുക',
@@ -1199,6 +1205,7 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 'undo-success' => 'ഈ തിരുത്ത് താങ്കൾക്ക് തിരസ്ക്കരിക്കാവുന്നതാണ്‌. താഴെ കൊടുത്തിരിക്കുന്ന പതിപ്പുകൾ തമ്മിലുള്ള താരതമ്യം ഒന്നുകൂടി പരിശോധിച്ച് ഈ പ്രവൃത്തി ചെയ്യണോ എന്ന് ഒന്നുകൂടി ഉറപ്പാക്കുക. ഉറപ്പാണെങ്കിൽ തിരുത്ത് തിരസ്ക്കരിക്കുവാൻ താൾ സേവ് ചെയ്യുക.',
 'undo-failure' => 'ഇടയ്ക്കുള്ള തിരുത്തുകൾ തമ്മിൽ സമരസപ്പെടാത്തതു കാരണം ഈ തിരുത്ത് തിരസ്ക്കരിക്കുവാനാവില്ല.',
 'undo-norev' => 'ഈ തിരുത്തൽ നിലവിലില്ലാത്തതിനാലോ മായ്ക്കപ്പെട്ടതിനാലോ പൂർവസ്ഥിതിയിലാക്കുവാൻ സാധിക്കുകയില്ല.',
+'undo-nochange' => 'തിരുത്ത് മുമ്പേ തന്നെ ഒഴിവാക്കിയതായി കാണുന്നു.',
 'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|സംവാദം]]) ചെയ്ത നാൾപ്പതിപ്പ് $1 നീക്കം ചെയ്യുന്നു',
 'undo-summary-username-hidden' => 'മറയ്ക്കപ്പെട്ട ഉപയോക്താവ് ചെയ്ത നാൾപ്പതിപ്പ് $1 തിരസ്കരിക്കുക',
 
@@ -1285,9 +1292,10 @@ $3 നൽകിയിരിക്കുന്ന കാരണം ''$2'' എന
 'revdelete-show-file-submit' => 'അതെ',
 'revdelete-selected' => "'''[[:$1]] എന്ന താളിന്റെ {{PLURAL:$2|തിരഞ്ഞെടുത്ത പതിപ്പ്|തിരഞ്ഞെടുത്ത പതിപ്പുകൾ}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|തിരഞ്ഞെടുത്ത രേഖയിലുള്ളത്|തിരഞ്ഞെടുത്ത രേഖയിലുള്ളവ}}:'''",
-'revdelete-text' => "'''മായ്ക്കപ്പെട്ട നാൾപ്പതിപ്പുകളും സംഭവങ്ങളും താളിന്റെ നാൾവഴിയിലും രേഖകളിലും ഉണ്ടായിരിക്കും, പക്ഷേ ആ ഉള്ളടക്കം പൊതുജനത്തിനു ലഭ്യമായിരിക്കില്ല.'''
-
-മറ്റു സം‌രക്ഷണ പരിമിതികൾ സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ {{SITENAME}} സം‌രംഭത്തിലെ മറ്റു കാര്യനിർവാഹകർക്ക്, ഇതേ സമ്പർക്കമുഖം ഉപയോഗിച്ചു തന്നെ, ഈ മറഞ്ഞിരിക്കുന്ന ഉള്ളടക്കം പരിശോധിക്കുവാനും താങ്കൾ മായ്ച്ചതു തിരസ്കരിക്കുവാനും സാധിക്കും.",
+'revdelete-text-text' => 'മായ്ക്കപ്പെട്ട നാൾപ്പതിപ്പുകൾ താളിന്റെ നാൾവഴിയിൽ കാണാവുന്നതായിരിക്കുമെങ്കിലും, അവയുടെ ഉള്ളടക്കത്തിന്റെ ചില ഭാഗങ്ങൾ പൊതുജനങ്ങൾക്ക് ലഭ്യമായിരിക്കണമെന്നില്ല.',
+'revdelete-text-file' => 'പ്രമാണത്തിന്റെ മായ്ക്കപ്പെട്ട പതിപ്പുകൾ താളിന്റെ നാൾവഴിയിൽ കാണാവുന്നതായിരിക്കുമെങ്കിലും, അവയുടെ ഉള്ളടക്കത്തിന്റെ ചില ഭാഗങ്ങൾ പൊതുജനങ്ങൾക്ക് ലഭ്യമായിരിക്കണമെന്നില്ല.',
+'logdelete-text' => 'മായ്ക്കപ്പെട്ട പ്രവൃത്തികൾ പ്രവർത്തന രേഖകളിൽ കാണാവുന്നതായിരിക്കുമെങ്കിലും, അവയുടെ ഉള്ളടക്കത്തിന്റെ ചില ഭാഗങ്ങൾ പൊതുജനങ്ങൾക്ക് ലഭ്യമായിരിക്കണമെന്നില്ല.',
+'revdelete-text-others' => '{{SITENAME}} സംരംഭത്തിലെ മറ്റ് കാര്യനിർവ്വാഹകർക്ക് മറയ്ക്കപ്പെട്ട ഉള്ളടക്കം ഇപ്പോഴും എടുക്കാവുന്നതും ആവശ്യമെങ്കിൽ ഇതേ സമ്പർക്കമുഖം ഉപയോഗിച്ച് പുനഃസ്ഥാപിക്കാനോ അല്ലെങ്കിൽ കൂടുതൽ നിബന്ധനകൾ ചേർക്കാനോ കഴിയുന്നതുമാണ്.',
 'revdelete-confirm' => 'ഇതിന്റെ അനന്തരഫലങ്ങളെക്കുറിച്ചറിയാമെന്നും, [[{{MediaWiki:Policy-url}}|നയങ്ങൾ]] പാലിച്ചാണ് താങ്കളിത് ചെയ്യുന്നതെന്നും ഉറപ്പാക്കുക.',
 'revdelete-suppress-text' => "താഴെ പറയുന്ന സാഹചര്യങ്ങളിൽ '''മാത്രമേ''' ഒതുക്കൽ ഉപയോഗിക്കാവൂ:
 * അപകീർത്തികരമായ വിവരങ്ങൾ അടങ്ങിയവ
@@ -1422,13 +1430,14 @@ $1",
 'search-file-match' => '(പ്രമാണ ഉള്ളടക്കവുമായി ഒത്തുപോകുന്നുണ്ട്)',
 'search-suggest' => 'താങ്കൾ ഉദ്ദേശിച്ചത് $1 എന്നാണോ',
 'search-interwiki-caption' => 'സഹോദര സംരംഭങ്ങൾ',
-'search-interwiki-default' => '$1 ഫലങ്ങൾ:',
+'search-interwiki-default' => '$1 à´µà´¿à´\95àµ\8dà´\95ിയിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´³àµ\8dà´³ à´«à´²à´\99àµ\8dà´\99ൾ:',
 'search-interwiki-more' => '(കൂടുതൽ)',
 'search-relatedarticle' => 'ബന്ധപ്പെട്ടവ',
 'searcheverything-enable' => 'എല്ലാ നാമമേഖലകളും തിരയുക',
 'searchrelated' => 'ബന്ധപ്പെട്ടവ',
 'searchall' => 'എല്ലാം',
 'showingresults' => "'''$2''' മുതലുള്ള {{PLURAL:$1|'''ഒരു''' ഫലം|'''$1''' ഫലങ്ങൾ}} താഴെ പ്രദർശിപ്പിക്കുന്നു.",
+'showingresultsinrange' => '#<strong>$2</strong> മുതൽ #<strong>$3</strong> വരെയുള്ള പരിധിയിലെ {{PLURAL:$1|<strong>ഒരു</strong> ഫലം|<strong>$1</strong> ഫലങ്ങൾ}} താഴെ പ്രദർശിപിക്കുന്നു.',
 'showingresultsnum' => "'''$2''' മുതലുള്ള {{PLURAL:$3|'''ഒരു''' ഫലം|'''$3''' ഫലങ്ങൾ}} താഴെ പ്രദർശിപ്പിക്കുന്നു.",
 'showingresultsheader' => "'''$4''' എന്ന പദത്തിനു ആകെ ലഭിച്ച {{PLURAL:$5| '''$3''' ഫലത്തിൽ '''$1''' എണ്ണം|'''$3''' ഫലത്തിൽ '''$1 മുതൽ $2''' വരെയുള്ളവ}}",
 'search-nonefound' => 'താങ്കൾ തിരഞ്ഞ പദത്തിനു യോജിച്ച ഫലങ്ങളൊന്നും ലഭിച്ചില്ല.',
@@ -1746,14 +1755,26 @@ $1",
 'recentchanges-label-plusminus' => 'താളിന്റെ വലിപ്പം ഇത്രയും ബൈറ്റുകൾ മാറിയിരിക്കുന്നു',
 'recentchanges-legend-heading' => "'''സൂചന:'''",
 'recentchanges-legend-newpage' => '([[Special:NewPages|പുതിയ താളുകളുടെ പട്ടികയും]] കാണുക)',
-'rcnotefrom' => '<b>$2</b> മുതലുള്ള മാറ്റങ്ങൾ (<b>$1</b> എണ്ണം വരെ കാണാം).',
+'rcnotefrom' => '<strong>$2</strong> മുതലുള്ള മാറ്റങ്ങൾ (<strong>$1</strong> എണ്ണം വരെ കാണാം).',
 'rclistfrom' => '$1 മുതലുള്ള മാറ്റങ്ങൾ പ്രദർശിപ്പിക്കുക',
 'rcshowhideminor' => 'ചെറുതിരുത്തലുകൾ $1',
+'rcshowhideminor-show' => 'പ്രദർശിപ്പിക്കുക',
+'rcshowhideminor-hide' => 'മറയ്ക്കുക',
 'rcshowhidebots' => 'യന്ത്രങ്ങളെ $1',
+'rcshowhidebots-show' => 'പ്രദർശിപ്പിക്കുക',
+'rcshowhidebots-hide' => 'മറയ്ക്കുക',
 'rcshowhideliu' => 'അംഗത്വമെടുത്തിട്ടുള്ളവരെ $1',
+'rcshowhideliu-show' => 'പ്രദർശിപ്പിക്കുക',
+'rcshowhideliu-hide' => 'മറയ്ക്കുക',
 'rcshowhideanons' => 'അജ്ഞാത ഉപയോക്താക്കളെ $1',
+'rcshowhideanons-show' => 'പ്രദർശിപ്പിക്കുക',
+'rcshowhideanons-hide' => 'മറയ്ക്കുക',
 'rcshowhidepatr' => 'റോന്തു ചുറ്റിയ മാറ്റങ്ങൾ $1',
+'rcshowhidepatr-show' => 'പ്രദർശിപ്പിക്കുക',
+'rcshowhidepatr-hide' => 'മറയ്ക്കുക',
 'rcshowhidemine' => 'എന്റെ തിരുത്തലുകൾ $1',
+'rcshowhidemine-show' => 'പ്രദർശിപ്പിക്കുക',
+'rcshowhidemine-hide' => 'മറയ്ക്കുക',
 'rclinks' => 'കഴിഞ്ഞ $2 ദിവസങ്ങൾക്കുള്ളിലുണ്ടായ $1 മാറ്റങ്ങൾ പ്രദർശിപ്പിക്കുക<br />$3',
 'diff' => 'മാറ്റം',
 'hist' => 'നാൾവഴി',
@@ -1883,6 +1904,8 @@ $2 {{PLURAL:$3|തരത്തിലുള്ള പ്രമാണം|തരങ
 'php-uploaddisabledtext' => 'പി.എച്ച്.പി.യിൽ പ്രമാണ അപ്‌‌ലോഡുകൾ സാദ്ധ്യമല്ലാതാക്കിയിരിക്കുന്നു.
 ദയവായി file_uploads ക്രമീകരണങ്ങൾ പരിശോധിക്കുക.',
 'uploadscripted' => 'ഈ പ്രമാണത്തിൽ വെബ് ബ്രൗസർ തെറ്റായി വ്യാഖ്യാനിച്ചേക്കാവുന്ന എച്ച്.റ്റി.എം.എൽ. അല്ലെങ്കിൽ സ്ക്രിപ്റ്റ് കോഡ് ഉണ്ട്.',
+'uploadscriptednamespace' => 'ഈ എസ്.വി.ജി. പ്രമാണത്തിൽ ഉപയോഗിക്കാൻ പാടില്ലാത്ത നാമമേഖലയായ "$1" ഉണ്ട്',
+'uploadinvalidxml' => 'അപ്‌ലോഡ് ചെയ്ത പ്രമാണത്തിലെ എക്സ്.എം.എൽ. പാഴ്സ് ചെയ്യാൻ കഴിയില്ല.',
 'uploadvirus' => 'പ്രമാണത്തിൽ വൈറസുണ്ട്! വിശദാംശങ്ങൾ: $1',
 'uploadjava' => 'ഇത്, ജാവ .class പ്രമാണങ്ങൾ അടക്കം ചെയ്തിട്ടുള്ള ഒരു സിപ് (ZIP) പ്രമാണം ആണ്.
 സുരക്ഷാതടയലുകൾ മറികടക്കാൻ കഴിയുമെന്ന കാരണത്താൽ ജാവ പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യുന്നത് അനുവദിച്ചിട്ടില്ല.',
@@ -2236,10 +2259,20 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'deadendpagestext' => 'താഴെക്കാണുന്ന താളുകളിൽനിന്ന് {{SITENAME}} സം‌രംഭത്തിലെ മറ്റൊരു താളിലേയ്ക്കും കണ്ണി ചേർത്തിട്ടില്ല.',
 'protectedpages' => 'സംരക്ഷിക്കപ്പെട്ടിരിക്കുന്ന താളുകൾ',
 'protectedpages-indef' => 'അനന്തകാലത്തേയ്ക്ക് സംരക്ഷിക്കപ്പെട്ടവ മാത്രം',
+'protectedpages-summary' => 'ഇപ്പോൾ നിലവിലുള്ള സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ള താളുകളുടെ പട്ടിക ഈ താളിൽ കാണാം. സൃഷ്ടിക്കുന്നതിൽ നിന്നും സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ള തലക്കെട്ടുകൾക്കായി [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] കാണുക.',
 'protectedpages-cascade' => 'നിർഝരിത സംരക്ഷണങ്ങൾ മാത്രം',
 'protectedpages-noredirect' => 'തിരിച്ചുവിടലുകൾ മറയ്ക്കുക',
 'protectedpagesempty' => 'ഈ ചരങ്ങൾ ഉപയോഗിച്ചു താളുകൾ ഒന്നും തന്നെ സം‌രക്ഷിക്കപ്പെട്ടിട്ടില്ല.',
+'protectedpages-timestamp' => 'സമയമുദ്ര',
+'protectedpages-page' => 'താൾ',
+'protectedpages-expiry' => 'കാലാവധി',
+'protectedpages-performer' => 'ഉപയോക്താവിനെ സംരക്ഷിക്കുന്നു',
+'protectedpages-params' => 'സംരക്ഷണ ചരങ്ങൾ',
+'protectedpages-reason' => 'കാരണം',
+'protectedpages-unknown-timestamp' => 'അജ്ഞാതം',
+'protectedpages-unknown-performer' => 'അജ്ഞാത ഉപയോക്താവ്',
 'protectedtitles' => 'സംരക്ഷിക്കപ്പെട്ടിരിക്കുന്ന തലക്കെട്ടുകൾ',
+'protectedtitles-summary' => 'സൃഷ്ടിക്കുന്നതിൽ നിന്നും സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ള താളുകളുടെ പട്ടിക ഇവിടെ കാണാം. സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ളതും എന്നാൽ നിലവിലുള്ളതുമായ താളുകൾക്കായി [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] കാണുക.',
 'protectedtitlesempty' => 'ഈ ചരങ്ങൾ ഉപയോഗിച്ചു തലക്കെട്ടുകൾ ഒന്നും തന്നെ സം‌രക്ഷിക്കപ്പെട്ടിട്ടില്ല.',
 'listusers' => 'ഉപയോക്താക്കളുടെ പട്ടിക',
 'listusers-editsonly' => 'തിരുത്തലുകൾ ചെയ്തിട്ടുള്ള ഉപയോക്താക്കളെ മാത്രം കാണിക്കുക',
@@ -2513,7 +2546,7 @@ $UNWATCHURL
 'delete-edit-reasonlist' => 'മായ്ക്കലിന്റെ കാരണം തിരുത്തുക',
 'delete-toobig' => 'ഈ താളിനു വളരെ വിപുലമായ തിരുത്തൽ ചരിത്രമുണ്ട്. $1 മേൽ {{PLURAL:$1|പതിപ്പുണ്ട്|പതിപ്പുകളുണ്ട്}}. ഇത്തരം താളുകൾ മായ്ക്കുന്നതു {{SITENAME}} സം‌രംഭത്തിന്റെ നിലനില്പ്പിനെ തന്നെ ബാധിക്കുമെന്നതിനാൽ ഈ താൾ മായ്ക്കുന്നതിനുള്ള അവകാശം പരിമിതപ്പെടുത്തിയിരിക്കുന്നു.',
 'delete-warning-toobig' => 'ഈ താളിനു വളരെ വിപുലമായ തിരുത്തൽ ചരിത്രമുണ്ട്. അതായത്, ഇതിനു് $1 മേൽ {{PLURAL:$1|പതിപ്പുണ്ട്|പതിപ്പുകളുണ്ട്}}. ഇത്തരം താളുകൾ മായ്ക്കുന്നതു {{SITENAME}} സം‌രംഭത്തിന്റെ ഡാറ്റാബേസ് ഓപ്പറേഷനെ ബാധിച്ചേക്കാം. അതിനാൽ വളരെ ശ്രദ്ധാപൂർവ്വം തുടർനടപടികളിലേക്കു നീങ്ങുക.',
-'deleting-backlinks-warning' => "'''മുന്നറിയിപ്പ്:''' മറ്റു താളുകളിൽ നിന്നും താളിലേയ്ക്കുള്ള കണ്ണികൾ അല്ലെങ്കിൽ ഉൾപ്പെടുത്തിയിട്ടുള്ള താളുകൾ താങ്കൾ മായ്ക്കാൻ പോവുകയാണ്.",
+'deleting-backlinks-warning' => "'''മുന്നറിയിപ്പ്:''' മറ്റു താളുകളിൽ നിന്നും [[Special:WhatLinksHere/{{FULLPAGENAME}}|താളിലേയ്ക്കുള്ള കണ്ണികൾ]] അല്ലെങ്കിൽ ഉൾപ്പെടുത്തിയിട്ടുള്ള താളുകൾ താങ്കൾ മായ്ക്കാൻ പോവുകയാണ്.",
 
 # Rollback
 'rollback' => 'തിരുത്തലുകൾ റോൾബാക്ക് ചെയ്യുക',
@@ -2688,8 +2721,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'ഈ ഐ.പി. വിലാസം ഇപ്പോൾ തടയപ്പെട്ടിരിക്കുകയാണ്.
 അവലംബമായി തടയൽ രേഖയുടെ പുതിയഭാഗം താഴെ കൊടുത്തിരിക്കുന്നു:',
 'sp-contributions-search' => 'ചെയ്ത സേവനങ്ങൾ',
+'sp-contributions-suppresslog' => 'ഒതുക്കപ്പെട്ട ഉപയോക്തൃസംഭാവനകൾ',
 'sp-contributions-username' => 'ഐ.പി. വിലാസം അഥവാ ഉപയോക്തൃനാമം:',
 'sp-contributions-toponly' => 'ഒടുവിലത്തെ നാൾപ്പതിപ്പുകൾ മാത്രം പ്രദർശിപ്പിക്കുക',
+'sp-contributions-newonly' => 'താൾ സൃഷ്ടിക്കാനുള്ള തിരുത്തുകൾ മാത്രം പ്രദർശിപ്പിക്കുക',
 'sp-contributions-submit' => 'തിരയൂ',
 
 # What links here
@@ -2791,7 +2826,7 @@ $1',
 'change-blocklink' => 'തടയലിൽ മാറ്റം വരുത്തുക',
 'contribslink' => 'സംഭാവനകൾ',
 'emaillink' => 'ഇമെയിൽ അയയ്ക്കുക',
-'autoblocker' => 'താങ്കളുടെ ഐ.പി. വിലാസം "[[User:$1|$1]]" എന്ന ഉപയോക്താവ് ഈ അടുത്ത് ഉപയോഗിക്കുകയും പ്രസ്തുത ഉപയോക്താവിനെ വിക്കിയിൽ നിന്നു തടയുകയും ചെയ്തിട്ടുള്ളതാണ്‌. അതിനാൽ താങ്കളും യാന്ത്രികമായി തടയപ്പെട്ടിരിക്കുന്നു. $1 എന്ന ഉപയോക്താവിന്റെ തടയലിനു സൂചിപ്പിക്കപ്പെട്ട കാരണം "$2" എന്നാണ്‌.',
+'autoblocker' => 'താങ്കളുടെ ഐ.പി. വിലാസം "[[User:$1|$1]]" എന്ന ഉപയോക്താവ് ഈ അടുത്ത് ഉപയോഗിക്കുകയും പ്രസ്തുത ഉപയോക്താവിനെ വിക്കിയിൽ നിന്നു തടയുകയും ചെയ്തിട്ടുള്ളതാണ്‌. അതിനാൽ താങ്കളും യാന്ത്രികമായി തടയപ്പെട്ടിരിക്കുന്നു. $1 എന്ന ഉപയോക്താവിന്റെ തടയലിനു സൂചിപ്പിക്കപ്പെട്ട കാരണം "$2" എന്നാണ്‌',
 'blocklogpage' => 'തടയൽ രേഖ',
 'blocklog-showlog' => 'ഈ ഉപയോക്താവ് മുമ്പേ തടയപ്പെട്ടതാണ്.
 തടയൽ രേഖ അവലംബമായി താഴെ കൊടുത്തിരിക്കുന്നു:',
@@ -2999,6 +3034,7 @@ $1',
 'thumbnail_image-type' => 'ചിത്രത്തിന്റെ തരം പിന്തുണക്കപ്പെട്ടതല്ല',
 'thumbnail_gd-library' => 'അപൂർണ്ണമായ ജി.ഡി. ലൈബ്രറി ക്രമീകരണം: ഫങ്ഷൻ $1 ലഭ്യമല്ല',
 'thumbnail_image-missing' => 'പ്രമാണം ലഭ്യമല്ലെന്നു കാണുന്നു: $1',
+'thumbnail_image-failure-limit' => 'ഈ ലഘുചിത്രം സൃഷ്ടിക്കാൻ നിരവധി പരാജയപ്പെട്ട ശ്രമങ്ങൾ ($1 അല്ലെങ്കിൽ കൂടുതൽ) നടന്നിട്ടുണ്ട്. ദയവായി പിന്നീട് ശ്രമിക്കുക.',
 
 # Special:Import
 'import' => 'താളുകൾ ഇറക്കുമതി ചെയ്യുക',
@@ -3026,7 +3062,7 @@ $1',
 'importbadinterwiki' => 'മോശമായ അന്തർവിക്കി കണ്ണി',
 'importnotext' => 'ശൂന്യം അല്ലെങ്കിൽ ഉള്ളടക്കം ഒന്നുമില്ല',
 'importsuccess' => 'ഇറക്കുമതി ചെയ്തുകഴിഞ്ഞു!',
-'importhistoryconflict' => 'പതിപàµ\8dà´ªàµ\81à´\95à´³àµ\81à´\9fàµ\86 à´\9aà´°à´¿à´¤àµ\8dà´°à´¤àµ\8dതിൽ à´ªàµ\8aà´°àµ\81à´¤àµ\8dà´¤à´\95àµ\8dà´\95àµ\87ട് (ഈ താൾ ഇതിനു മുൻപ് ഇറക്കുമതി ചെയ്തിട്ടുണ്ടാവാം)',
+'importhistoryconflict' => 'നാൾപàµ\8dപതിപàµ\8dà´ªàµ\81à´\95ളിൽ à´ªàµ\8aà´°àµ\81à´¤àµ\8dà´¤à´\95àµ\8dà´\95àµ\87à´\9fàµ\81à´£àµ\8dട് (ഈ താൾ ഇതിനു മുൻപ് ഇറക്കുമതി ചെയ്തിട്ടുണ്ടാവാം)',
 'importnosources' => 'ട്രാൻസ്‌‌വിക്കി ഇറക്കുമതി സ്രോതസ്സുകളൊന്നും നിർവചിച്ചിട്ടില്ല, നേരിട്ടുള്ള നാൾവഴി അപ്‌‌ലോഡുകൾ പ്രവർത്തനരഹിതവുമാക്കിയിരിക്കുന്നു.',
 'importnofile' => 'ഇറക്കുമതി പ്രമാണങ്ങളൊന്നും അപ്‌‌ലോഡ് ചെയ്തിട്ടില്ല.',
 'importuploaderrorsize' => 'ഇറക്കുമതി ചെയ്ത പ്രമാണത്തിന്റെ അപ്‌‌ലോഡ് പരാജയപ്പെട്ടു.
@@ -3056,7 +3092,7 @@ $1',
 'importlogpagetext' => 'മറ്റു വിക്കികളിൽ നിന്ന് താളുകൾ നാൾവഴിയടക്കം എടുക്കുന്ന കാര്യനിർവാഹക ഇറക്കുമതി.',
 'import-logentry-upload' => 'പ്രമാണ അപ്‌‌ലോഡ് വഴി [[$1]] ഇറക്കുമതി ചെയ്തിരിക്കുന്നു',
 'import-logentry-upload-detail' => '{{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}}',
-'import-logentry-interwiki' => 'അന്തർവിക്കി ഇറക്കുമതി $1',
+'import-logentry-interwiki' => '$1 അന്തർവിക്കി ഇറക്കുമതി ചെയ്തു',
 'import-logentry-interwiki-detail' => '$2 എന്നതിൽ നിന്ന് {{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}}',
 
 # JavaScriptTest
@@ -4222,6 +4258,4 @@ $5
 'expand_templates_generate_rawhtml' => 'അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ. പ്രദർശിപ്പിക്കുക',
 'expand_templates_preview' => 'എങ്ങനെയുണ്ടെന്നു കാണുക',
 
-# Unknown messages
-'uploadinvalidxml' => 'അപ്‌ലോഡ് ചെയ്ത പ്രമാണത്തിലെ എക്സ്.എം.എൽ. പാഴ്സ് ചെയ്യാൻ കഴിയില്ല.',
 );
index effdc8a..66582fe 100644 (file)
@@ -7,10 +7,12 @@
  * @ingroup Language
  * @file
  *
+ * @author Boldbdd
  * @author Chinneeb
  * @author E.shijir
  * @author Kaganer
  * @author Meno25
+ * @author Mongol
  * @author MongolWiki
  * @author Wisdom
  * @author Zorigt
@@ -82,6 +84,8 @@ $messages = array(
 'tog-diffonly' => 'Өөрчлөлтөөс доогуурх хуудсын агуулгыг үзүүлэхгүй байх',
 'tog-showhiddencats' => 'Нуугдсан ангиллуудыг үзүүлэх',
 'tog-norollbackdiff' => 'Буцаасны дараа өөрчлөлтийг орхигдуулах',
+'tog-useeditwarning' => 'Засварын хуудсаа хадгалалгүй гарах үед сануул',
+'tog-prefershttps' => 'Нэвтэрсэн үедээ үргэлж найдвартай сүлжээ хэрэглэнэ үү',
 
 'underline-always' => 'Байнга',
 'underline-never' => 'Хэзээ ч үгүй',
@@ -160,15 +164,17 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Анги|Ангилал}}',
-'category_header' => '"$1" Ð°Ð½Ð³Ð¸Ð¹Ð½ Ð±Ò¯Ñ\80Ñ\8dлдÑ\8dÑ\85үүн',
+'category_header' => '"$1" Ð°Ð½Ð³Ð¸Ð»Ð°Ð» Ð´Ð°Ñ\85Ñ\8c Ñ\85Ñ\83Ñ\83даÑ\81нÑ\83Ñ\83д',
 'subcategories' => 'Ангийн бүлэг',
 'category-media-header' => '"$1" ангийн файл',
 'category-empty' => "''Одоогийн байдлаар энэ ангилалд хуудас, медиа файл байхгүй байна.''",
 'hidden-categories' => '{{PLURAL:$1|Нуугдсан ангилал|Нуугдсан ангиллууд}}',
 'hidden-category-category' => 'Нуугдсан ангиллууд',
-'category-subcat-count' => '{{PLURAL:$2|Энэ ангилалд дараах дэд ангилал л байна.|Энэ анги дотроо $2 анги, бүлэгтэй. Үүнээс $1 доор харагдаж байна.}}',
+'category-subcat-count' => '{{PLURAL:$2|Энэ ангилалд дараах дэд ангилал л байна.|Энэ ангилалд нийт $2-с дараах $1 дэд ангилал байна.}}',
 'category-subcat-count-limited' => 'Энэ ангилалд {{PLURAL:$1| дэд ангилал|$1-н дэд ангилалууд}} байна.',
-'category-article-count' => '{{PLURAL:$2|Энд нэг хуудас байна.|Энд $2 хуудас байна. Үүнээс $1 доор харагдаж байна.}}',
+'category-article-count' => '{{PLURAL:$2|Энд нэг хуудас байна.|Энэ ангид $2 хуудас байна.}}
+
+{{PLURAL:$2|Энэ ангилалд дараах хуудас л байна.|Энэ ангилалд нийт $2-с дараах $1 хуудас байна.}}',
 'category-article-count-limited' => 'Энэ ангилалд дараах {{PLURAL:$1|хуудас|$1 хуудаснууд}} байна.',
 'category-file-count' => '{{PLURAL:$2|Энэ ангилалд дараах файл л байна.|Энэ ангилалд нийт $2-с дараах $1 файл байна.}}',
 'category-file-count-limited' => 'Энэ ангилалд дараах {{PLURAL:$1|файл|$1 файлнууд}} байна.',
@@ -205,10 +211,9 @@ $messages = array(
 'vector-action-protect' => 'Хамгаалах',
 'vector-action-undelete' => 'Үл устгах',
 'vector-action-unprotect' => 'Хамгаалалтаа солих',
-'vector-simplesearch-preference' => 'Хялбарчилсан хайлтын талбарыг идэвхижүүлэх (зөвхөн Вектор скин)',
 'vector-view-create' => 'Үүсгэх',
 'vector-view-edit' => 'Засварлах',
-'vector-view-history' => 'Түүхийг үзэх',
+'vector-view-history' => 'Түүх',
 'vector-view-view' => 'Унших',
 'vector-view-viewsource' => 'Кодыг харах',
 'actions' => 'Үйлдлүүд',
@@ -222,8 +227,8 @@ $messages = array(
 'help' => 'Тусламж',
 'search' => 'Хайлт',
 'searchbutton' => 'Хайх',
-'go' => 'Явах',
-'searcharticle' => 'Явах',
+'go' => 'Үзэх',
+'searcharticle' => 'Үзэх',
 'history' => 'Хуудасны түүх',
 'history_short' => 'Түүх',
 'updatedmarker' => 'сүүлд зочилсноос хойш шинэчлэгдсэн',
@@ -237,6 +242,7 @@ $messages = array(
 'create-this-page' => 'Энэ хуудсыг үүсгэх',
 'delete' => 'Устгах',
 'deletethispage' => 'Энэ хуудсыг устга',
+'undeletethispage' => 'Энэ хуудсыг бүү устга',
 'undelete_short' => 'Устгагдсан {{PLURAL:$1|нэг засварыг|$1 засваруудыг}} сэргээх',
 'viewdeleted_short' => '{{PLURAL:$1|арилгасан засварыг|арилгасан $1 засваруудыг}} харах',
 'protect' => 'Хамгаалах',
@@ -253,7 +259,7 @@ $messages = array(
 'articlepage' => 'Өгүүллийг үзэх',
 'talk' => 'Хэлэлцүүлэг',
 'views' => 'Харагдацууд',
-'toolbox' => 'Ð\91агаж Ñ\85Ñ\8dÑ\80Ñ\8dгÑ\81лүүд',
+'toolbox' => 'Ð¥Ñ\8dÑ\80Ñ\8dглүүÑ\80',
 'userpage' => 'Хэрэглэгчийн хуудсыг үзэх',
 'projectpage' => 'Төслийн хуудсыг үзэх',
 'imagepage' => 'Файлын хуудсыг үзэх',
@@ -265,7 +271,7 @@ $messages = array(
 'otherlanguages' => 'Өөр хэлээр',
 'redirectedfrom' => '($1-с чиглүүлэгдэв)',
 'redirectpagesub' => 'Хуудсыг чиглүүлэх',
-'lastmodifiedat' => 'Энэ хуудсыг хамгийн сүүлд өөрчилсөн нь $2, $1.',
+'lastmodifiedat' => 'Энэ хуудас хамгийн сүүлд $1-ы $2-д өөрчлөгдсөн.',
 'viewcount' => 'Энэ хуудсанд {{PLURAL:$1|ганцхан удаа|$1 удаа}} хандсан байна.',
 'protectedpage' => 'Хамгаалагдсан хуудас',
 'jumpto' => 'Шууд очих:',
@@ -287,7 +293,7 @@ $1',
 'copyrightpage' => '{{ns:project}}:Зохиогчийн эрх',
 'currentevents' => 'Сүүлийн үеийн мэдээ',
 'currentevents-url' => 'Project:Сүүлийн үеийн мэдээ',
-'disclaimers' => 'ТаÑ\82галзлÑ\83Ñ\83д',
+'disclaimers' => 'ТаÑ\82галзал',
 'disclaimerpage' => 'Project:Ерөнхий татгалзал',
 'edithelp' => 'Засвар хийх тухай тусламж',
 'helppage' => 'Help:Агуулга',
@@ -296,7 +302,7 @@ $1',
 'policy-url' => 'Project:Бодлого баримтлал',
 'portal' => 'Бүлгэмийн портал',
 'portal-url' => 'Project:Бүлгэмийн портал',
-'privacy' => 'Ð¥Ñ\83вийн Ð¼Ñ\8dдÑ\8dÑ\8dллийн Ñ\82алааÑ\80Ñ\85 Ð±Ð°Ñ\80имÑ\82лал',
+'privacy' => 'Ð\9dÑ\83Ñ\83Ñ\86лалÑ\8bн Ð±Ð¾Ð´Ð»Ð¾Ð³Ð¾',
 'privacypage' => 'Project:Хувийн мэдээллийн талаарх баримтлал',
 
 'badaccess' => 'Зөвшөөрлийн алдаа',
@@ -309,23 +315,23 @@ $1',
 'ok' => 'OK',
 'pagetitle' => '$1 - {{SITENAME}}',
 'retrievedfrom' => '"$1" хуудаснаас авсан',
-'youhavenewmessages' => 'Таньд $1 ($2) байна.',
+'youhavenewmessages' => '{{PLURAL:$3|Танд}} $1 ($2) байна.',
 'youhavenewmessagesfromusers' => 'Танд {{PLURAL:$3|өөр нэгэн хэрэглэгчээс |$3 хэрэглэгчээс}} $1 ирсэн байна ($2).',
-'youhavenewmessagesmanyusers' => 'Танд ($2) Ð¾Ð»Ð¾Ð½ Ñ\85Ñ\8dÑ\80Ñ\8dглÑ\8dгÑ\87идÑ\8dÑ\8dÑ\81 $1.',
+'youhavenewmessagesmanyusers' => 'Танд ($2) олон хэрэглэгчдээс $1.',
 'newmessageslinkplural' => '{{PLURAL:$1|шинэ зурвас}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|сүүлд хийгдсэн өөрчлөлт}}',
-'youhavenewmessagesmulti' => 'Таньд $1 дээр шинэ мессеж ирсэн байна',
+'youhavenewmessagesmulti' => 'Танд $1 дээр шинэ зурвас ирсэн байна',
 'editsection' => 'засварлах',
 'editold' => 'засварлах',
 'viewsourceold' => 'кодыг харах',
 'editlink' => 'загварыг засах',
 'viewsourcelink' => 'кодыг харах',
 'editsectionhint' => 'Хэсгийг засварлах: $1',
-'toc' => 'Ð\90гÑ\83Ñ\83лга',
-'showtoc' => 'үзүүлэх',
-'hidetoc' => 'нуух',
-'collapsible-collapse' => 'Буулгах',
-'collapsible-expand' => 'ТÑ\8dлэх',
+'toc' => 'Ð\93аÑ\80Ñ\87иг',
+'showtoc' => 'дэлгэх',
+'hidetoc' => 'хумих',
+'collapsible-collapse' => 'хумих',
+'collapsible-expand' => 'дÑ\8dлгэх',
 'thisisdeleted' => '$1-г харах эсвэл сэргээх үү?',
 'viewdeleted' => '$1-г харах уу?',
 'restorelink' => '{{PLURAL:$1|арилгасан засвар|арилгасан $1 засварууд}}',
@@ -337,12 +343,12 @@ $1',
 'page-rss-feed' => '"$1"-н RSS фийд',
 'page-atom-feed' => '"$1"-н Atom фийд',
 'feed-atom' => 'Атом',
-'red-link-title' => '$1 (хуудас бичигдээгүй байна)',
+'red-link-title' => '$1 (ийм хуудас байхгүй)',
 'sort-descending' => 'Буурахаар эрэмбэлэх',
 'sort-ascending' => 'Өсөхөөр эрэмбэлэх',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Хуудас',
+'nstab-main' => 'Өгүүлэл',
 'nstab-user' => 'Хэрэглэгчийн хуудас',
 'nstab-media' => 'Медиа хуудас',
 'nstab-special' => 'Тусгай хуудас',
@@ -366,6 +372,8 @@ $1',
 # General errors
 'error' => 'Aлдаа',
 'databaseerror' => 'Өгөгдлийн сангийн алдаа',
+'databaseerror-function' => 'Функц: $1',
+'databaseerror-error' => 'Алдаа: $1',
 'laggedslavemode' => 'Анхаар: Энэ хуудас нь хамгийн сүүлийн өөрчлөлтүүдийг хамруулаагүй байж болно.',
 'readonly' => 'Мэдээллийн сан түгжигдсэн байна',
 'enterlockreason' => 'Түгжих болсон шалтгаан болон хэзээ уг түгжээ нь тайлагдах тухай оруулна уу.',
@@ -399,7 +407,7 @@ $1',
 'cannotdelete-title' => '"$1" хуудсыг устгаж чадсангүй',
 'delete-hook-aborted' => 'Хүк устгалыг зогсоолоо.
 Шалтгаан өгөгдсөнгүй.',
-'badtitle' => 'Ð\91олоÑ\85гүй Ð³Ð°Ñ\80Ñ\87иг',
+'badtitle' => 'Ð¥Ò¯Ñ\87ингүй Ñ\85Ñ\83Ñ\83даÑ\81нÑ\8b Ð½Ñ\8dÑ\80 Ð±Ð°Ð¹Ð½Ð°',
 'badtitletext' => 'Оруулсан хуудасны нэр тань хүчингүй, хоосон, эсвэл буруу холбосон интер-хэл буюу интер-викигийн нэр байна. Нэрэнд хэрэглэгдэж болохгүй тэмдэгт орсон байж болзошгүй.',
 'perfcached' => 'Дараах тоо баримт нь нөөц хуулбар учраас хуучирсан мэдээлэлтэй байж магадгүй. Дээд тал нь {{PLURAL:$1|нэг илэрц|$1 илэрцүүд}} нөөцөд бэлэн байна.',
 'perfcachedts' => 'Дараах тоо баримт нь нөөц хуулбар учраас хуучирсан мэдээлэлтэй байж магадгүй. Дээд тал нь {{PLURAL:$1|нэг илэрц|$1 илэрцүүд}} нөөцөд бэлэн байна.',
@@ -420,6 +428,8 @@ $2',
 'namespaceprotected' => "Таньд '''$1''' нэрний зай дахь хуудсуудыг засварлах зөвшөөрөл байхгүй байна.",
 'customcssprotected' => 'Энэхүү CSS хуудас өөр хэрэглэгчийн хувийн тохиргоог агуулдаг тул та засварлах эрхгүй.',
 'customjsprotected' => 'Энэхүү JavaScript хуудас өөр хэрэглэгчийн хувийн тохиргоог агуулдаг тул та засварлах эрхгүй.',
+'mycustomjsprotected' => 'Танд энэхүү ЖаваСкрипт хуудсыг засварлах эрх байхгүй байна.',
+'myprivateinfoprotected' => 'Танд хувийн мэдээллээ засварлах эрх байхгүй байна.',
 'ns-specialprotected' => 'Тусгай хуудсуудыг засварлах боломжгүй.',
 'titleprotected' => "[[User:$1|$1]] нь энэ хуудсыг үүсгэх явдыг хорьжээ.
 Шалтгаан нь: ''$2''.",
@@ -456,6 +466,7 @@ $2',
 'createacct-yourpasswordagain' => 'Нууц үгээ баталгаажуулна уу',
 'createacct-yourpasswordagain-ph' => 'Нууц үгээ дахиж оруулна уу',
 'remembermypassword' => 'Энэ компьютер дээрх миний нэвтрэлтийг сана (хамгийн дээд талдаа $1 {{PLURAL:$1|өдрийн|өдрийн}} туршид)',
+'userlogin-signwithsecure' => 'Хамгаалалттай сүлжээ хэрэглэнэ үү',
 'yourdomainname' => 'Таны домэйн:',
 'password-change-forbidden' => 'Та энэ вики дээрх нууц үгээ сольж болохгүй.',
 'externaldberror' => 'Нэг бол гадны баталгаажуулах мэдээллийн сангийн алдаа гарсан, эсвэл та өөрийн гадны бүртгэлээ шинэчлэх эрхгүй байна.',
@@ -467,26 +478,31 @@ $2',
 'logout' => 'Гарах',
 'userlogout' => 'Гарах',
 'notloggedin' => 'Нэвтрээгүй байна',
+'userlogin-noaccount' => 'Бүртгүүлж амжаагүй юу?',
 'userlogin-joinproject' => '{{SITENAME}}-д бүртгүүлэх',
-'nologin' => "Бүртгэлгүй юу? '''$1'''.",
+'nologin' => "Бүртгүүлж амжаагүй юу? '''$1'''.",
 'nologinlink' => 'Бүртгүүлэх',
 'createaccount' => 'Бүртгүүлэх',
 'gotaccount' => "Та бүртгэлтэй юу? '''$1'''",
 'gotaccountlink' => 'Нэвтрэх',
 'userlogin-resetlink' => 'Нэвтрэх мэдээллээ мартаа юу?',
 'userlogin-resetpassword-link' => 'Нууц үгээ мартсан уу?',
-'helplogin-url' => 'Help:Нэвтрэх',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Нэвтрэхэд тусламж]]',
 'userlogin-loggedin' => 'Та {{GENDER:$1|$1}} нэрээр нэвтэрсэн байна.
 Өөр нэрээр нэвтрэх бол доорх маягтыг ашиглана уу.',
 'userlogin-createanother' => 'Өөр бүртгэл үүсгэх',
 'createacct-join' => 'Мэдээллээ оруулна уу.',
 'createacct-another-join' => 'Шинэ бүртгэлийн мэдээллээ оруулна уу.',
+'createacct-emailrequired' => 'Цахим шуудангийн хаяг',
+'createacct-email-ph' => 'Цахим шуудангийн хаягаа оруулна уу',
+'createacct-another-email-ph' => 'Цахим шуудангийн хаяг оруулна уу',
 'createaccountmail' => 'Мэйлээр илгээх',
 'createacct-realname' => 'Жинхэнэ нэр (хоосон орхиж болно)',
 'createaccountreason' => 'Шалтгаан:',
 'createacct-reason' => 'Шалтгаан',
 'createacct-reason-ph' => 'Өөр бүртгэл үүсгэх шалтгаан',
+'createacct-captcha' => 'Аюулгүй байдлын хяналт',
+'createacct-imgcaptcha-ph' => 'Дээр харагдаж буй бичвэрийг оруулна уу',
+'createacct-submit' => 'Бүртгүүлэх',
 'createacct-benefit-heading' => '{{SITENAME}}-г тан шиг хүмүүс хийж байна.',
 'createacct-benefit-body1' => '{{PLURAL:$1|засвар}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|хуудас}}',
@@ -494,6 +510,7 @@ $2',
 'userexists' => 'Хэрэглэгчийн нэр ашиглагдаж байна.
 Өөр нэрээр нэвтэрнэ үү.',
 'loginerror' => 'Нэвтрэхэд алдаа гарлаа',
+'createacct-error' => 'Бүртгүүлэхэд гарсан алдаа',
 'createaccounterror' => 'Бүртгэлийг үүсгэж чадсангүй: $1',
 'nocookiesnew' => 'Таны хэрэглэгчийн бүртгэл үүсгэгдсэн боловч нэвтрээгүй байна.
 {{SITENAME}}-д холбогдоход күүкиг хэрэглэдэг.
@@ -531,15 +548,15 @@ $2',
 'passwordsent' => '"$1"-н бүртгүүлсэн мэйл хаяг руу шинэ нууц үг илгээгдлээ.
 Мэйлээ авсныхаа дараа дахин нэвтрээрэй.',
 'blocked-mailpassword' => 'Таны IP хаягаас засвар хийх эрхийг түгжсэн байгаа тул буруугаар ашиглахаас сэргийлэх үүднээс нууц үгийг сэргээхийг зөвшөөрөхгүй.',
-'eauthentsent' => 'Баталгаажуулах мэйл бүртгүүлсэн мэйл хаяг руу илгээгдлээ.
-Өөрийнхөө бүртгэлийг баталгаажуулахын тулд, өөр ямар нэг мэйл таны мэйл хаяг руу явуулагдахын өмнө тухай бүрийнхээ мэйл дэх зааврыг дагана уу.',
+'eauthentsent' => 'Баталгаажуулах мэйл бүртгүүлсэн цахим шуудангийн хаяг руу илгээгдлээ.
+Өөрийнхөө бүртгэлийг баталгаажуулахын тулд өөр ямар нэг цахим шуудан таны цахим шуудангийн хаяг руу илгээгдэхээс өмнө, цахим шуудан дахь зааврыг даган баталгаажуулна уу.',
 'throttled-mailpassword' => 'Сүүлийн {{PLURAL:$1|1 цагт|$1 цагт}} нууц үгийг сануулах мэйлийг явуулсан байгаа.
 Буруугаар ашиглахаас сэргийлэх үүднээс {{PLURAL:$1|цагт|$1 цагт}} нэг л сануулах мэйлийг явуулах боломжтой.',
 'mailerror' => 'Мэйл илгээхэд алдаа гарлаа: $1',
 'acct_creation_throttle_hit' => 'Сүүлийн өдөрт таны IP хаягийг ашиглан хүмүүс энэ викид тухайн хугацаа дахь шинэ бүртгэлийн дээд хязгаар болох {{PLURAL:$1|1 бүртгэл|$1 бүртгэл}} үүсгэжээ.
 Ийнхүү энэ IP хаягийг ашигласан хүмүүс одоогийн байдлаар дахин бүртгэл үүсгэх боломжгүй байна.',
-'emailauthenticated' => 'Таны мэйл хаяг $2-ний $3 цагт баталгаажлаа.',
-'emailnotauthenticated' => 'Таны мэйл хаяг баталгаажаагүй байна.
+'emailauthenticated' => 'Таны цахим шуудангийн хаяг $2-ы/ий $3 цагт баталгаажлаа.',
+'emailnotauthenticated' => 'Таны цахим шуудангийн хаяг хараахан баталгаажаагүй байна.
 Иймд доорх функцуудын алинд нь ч мэйл илгээгдэхгүй.',
 'noemailprefs' => 'Эдгээр функцуудыг ашиглахад мэйл хаягаа өгөх хэрэгтэй.',
 'emailconfirmlink' => 'Мэйл хаягаа баталгаажуулах',
@@ -556,14 +573,20 @@ $2',
 Хэрэв буруугаар бүртгүүлсэн бол энэ мэдэгдлийг үл ойшоож болно.',
 'usernamehasherror' => 'Хэрэглэгчийн нэрэнд хаш тэмдэгт орж болохгүй',
 'login-throttled' => 'Та хэт олон удаа нэвтрэх гэж оролдсон байна.
-Хүлээж байгаад дахин оролдого уу.',
+$1 хүлээж байгаад дахин оролдоно уу.',
 'login-abort-generic' => 'Та нэвтэрч чадсангүй',
 'loginlanguagelabel' => 'Хэл: $1',
 'suspicious-userlogout' => 'Таны гарах хүсэлт нь эвдэрхий хөтөч буюу кэшлэгч проксигоор явуулсан мэт харагдаж байгаа тул зөвшөөрсөнгүй.',
+'createacct-another-realname-tip' => 'Жинхэнэ нэрээ заавал оруулах албагүй.
+Оруулбал таны хийсэн бүтээлийг түүгээр хаяглана.',
+'pt-login' => 'Нэвтрэх',
+'pt-createaccount' => 'Бүртгүүлэх',
+'pt-userlogout' => 'Гарах',
 
 # Email sending
 'php-mail-error-unknown' => "PHP's mail() функцэд үл танигдах алдаа гарлаа.",
 'user-mail-no-addy' => 'Цахин шуудангийн хаягийг оруулалгүйгээр шуудан явуулахыг оролдлоо.',
+'user-mail-no-body' => 'Хоосон аль эсвэл хэт богино цахим шуудан илгээх гэж оролдлоо.',
 
 # Change password dialog
 'changepassword' => 'Нууц үгээ солих',
@@ -575,7 +598,9 @@ $2',
 'newpassword' => 'Шинэ нууц үг:',
 'retypenew' => 'Шинэ нууц үгээ дахин оруулах:',
 'resetpass_submit' => 'Нууц үгээ тогтоож нэвтрэх',
-'changepassword-success' => 'Таны нууц үг амжилттай солигдлоо! Та одоо нэвтэрч байна...',
+'changepassword-success' => 'Таны нууц үг амжилттай солигдлоо!',
+'changepassword-throttled' => 'Та хэт олон удаа нэвтрэх гэж оролдсон байна.
+$1 хүлээж байгаад дахин оролдоно уу.',
 'resetpass_forbidden' => 'Нууц үг өөрчлөх боломжгүй',
 'resetpass-no-info' => 'Энэ хуудсыг шууд үзэхийн тулд нэвтэрч орсон байх шаардлагатай.',
 'resetpass-submit-loggedin' => 'Нууц үгээ солих',
@@ -583,6 +608,7 @@ $2',
 'resetpass-wrong-oldpass' => 'Хүчингүй түр зуурын эсвэл одоогийн нууц үг байна.
 Та аль хэдийнээ нууц үгээ сольсон эсвэл түр зуурын нууц үг хүссэн байна.',
 'resetpass-temp-password' => 'Түр зуурын нууц үг:',
+'resetpass-expired' => 'Нууц үгийн хугацаа дууссан байна. Шинэ нууц үг оруулж нэвтрэнэ үү.',
 
 # Special:PasswordReset
 'passwordreset' => 'Нууц үгийг сэргээх',
@@ -638,7 +664,7 @@ $2
 'link_tip' => 'Дотоод холбоос',
 'extlink_sample' => 'http://www.example.com холбоосны нэр',
 'extlink_tip' => 'Гадны холбоос (эхэнд нь http:// бичихээ мартуузай)',
-'headline_sample' => 'Ð\93аÑ\80Ñ\87игийн Ñ\82екÑ\81Ñ\82',
+'headline_sample' => 'Гарчгийн текст',
 'headline_tip' => '2-р түвшний гарчиг',
 'nowiki_sample' => 'Энд хэлбэршүүлээгүй текстээ оруулна уу',
 'nowiki_tip' => 'Вики форматыг хэрэглэхгүй байх',
@@ -874,15 +900,15 @@ $3-н тодорхойлсон шалтгаан нь ''$2''",
 'previousrevision' => '←Хуучны засвар',
 'nextrevision' => 'Дараагийн засвар→',
 'currentrevisionlink' => 'Одоогийн засвар',
-'cur' => 'одоогийн',
+'cur' => 'одоо',
 'next' => 'дараагийн',
 'last' => 'сүүлийн',
 'page_first' => 'эхний',
 'page_last' => 'сүүлийн',
-'histlegend' => 'Өөрчлөлтүүдийг сонгох: харьцуулж үзэхийн тулд хувилбаруудын өмнөх хайрцагыг сонгож нэг бол "enter" товчлуурыг, эсвэл доорх товчлуурыг дараарай.<br />
-Тэмдэг: (одоогийн) = одоогийн засвартай харьцуулах
-(сүүлчийн) = өмнөх засвартай харьцуулах, Б = бага зэргийн засвар',
-'history-fieldset-title' => 'Түүх сөхөе',
+'histlegend' => 'Радио товчлууруудыг сонгож дарсаны дараа enter товчлуурыг, эсвэл хуудасны доод талд байгаа товчлуур дээр дарж засваруудыг хооронд нь харьцуулна уу.<br />
+
+Тайлбар: <strong>({{int:cur}})</strong> = одоогийн хувилбартай харьцуулах, <strong>({{int:last}})</strong> = өмнөх хувилбартай нь харьцуулах, <strong>{{int:minoreditletter}}</strong> = бага хэмжээний засвар',
+'history-fieldset-title' => 'Түүх сөхье',
 'history-show-deleted' => 'Зөвхөн устгагдсаныг',
 'histfirst' => 'хамгийн эхэнд',
 'histlast' => 'хамгийн шинэ',
@@ -890,7 +916,7 @@ $3-н тодорхойлсон шалтгаан нь ''$2''",
 'historyempty' => '(хоосон байна)',
 
 # Revision feed
-'history-feed-title' => 'Ð\97аÑ\81ваÑ\80Ñ\8bн Ñ\82үүх',
+'history-feed-title' => 'Түүх',
 'history-feed-description' => 'Вики дэх энэ хуудасны засварын түүх',
 'history-feed-item-nocomment' => '$2 дээрх $1',
 'history-feed-empty' => 'Таны үзэх гэсэн хуудас байхгүй байна.
@@ -937,8 +963,6 @@ $3-н тодорхойлсон шалтгаан нь ''$2''",
 'revdelete-show-file-submit' => 'Тийм',
 'revdelete-selected' => "'''[[:$1]]-н {{PLURAL:$2|сонгосон засвар|сонгосон засварууд}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Сонгосон логийн үйл явдал|Сонгосон логийн үйл явдлууд}}:'''",
-'revdelete-text' => "'''Устгагдсан засварууд ба үйл явдлууд нь хуудасны түүх болон логт харагдах хэвээр үлдэх ч эдгээрийн зарим агуулга нийтэд үл харагдана.'''
-Давхар хязгаарууд тавигдаагүй тохиолдолд {{SITENAME}}-н бусад администраторууд нуугдсан агуулгыг энэ талбараар харж үл арилгах боломжтой хэвээр үлдэнэ.",
 'revdelete-confirm' => 'Та энэхүү үйлдлийг хийх гэж байгаа, үр дагаварыг ойлгож байгаа, [[{{MediaWiki:Policy-url}}|дүрмийн дагуу]] хийж байгаа гэдгээ батална уу.',
 'revdelete-suppress-text' => "'''Зөвхөн'' дараах тохиолдлуудад л далдалгааг хэрэглэнэ:
 *Гүтгэсэн, матсан байж болох мэдээлэл
@@ -1029,8 +1053,8 @@ $1",
 'difference-title-multipage' => '"$1", "$2" хоёр хуудасны ялгаа',
 'difference-multipage' => '(Хуудсууд хоорондын ялгаа)',
 'lineno' => '$1-р мөр:',
-'compareselectedversions' => 'Сонгосон хувилбаруудыг харьцуулах',
-'showhideselectedversions' => 'СонгоÑ\81он Ñ\85Ñ\83вилбаÑ\80Ñ\83Ñ\83дÑ\8bг Ò¯Ð·Ò¯Ò¯Ð»Ñ\8dÑ\85/нÑ\83Ñ\83х',
+'compareselectedversions' => 'Сонгосон хоёр хувилбарыг харьцуулах',
+'showhideselectedversions' => 'Ð\9eлон Ñ\85Ñ\83вилбаÑ\80Ñ\8bг Ñ\85аÑ\80Ñ\83Ñ\83лаÑ\85/болих',
 'editundo' => 'цуцлах',
 'diff-multi-manyusers' => '($2 гаруй {{PLURAL:$2|хэрэглэгчийн}} {{PLURAL:$1|дундын нэг засварыг|дундын $1 засварыг}} үзүүлсэнгүй)',
 
@@ -1048,7 +1072,7 @@ $1",
 'shown-title' => 'Хуудас бүрд $1 {{PLURAL:$1|үр дүн}} гаргах',
 'viewprevnext' => 'Үзэх: ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''Энэ викид \"[[:\$1]]\" гэсэн хуудас байна'''",
-'searchmenu-new' => "'''Энэ викид \"[[:\$1]]\" гэсэн хуудсыг үүсгэх!'''",
+'searchmenu-new' => '<strong> Энэ викид "[[:$1]]" хуудсыг үүсгэх!</strong> {{PLURAL:$2|0=|Мөн хайлтаар олдсон хуудсаа харна.|Мөн хайлтаар олдсон хуудсаа харна.}}',
 'searchprofile-articles' => 'Агуулгын хуудсууд',
 'searchprofile-project' => 'Тусламжийн болон төслийн хуудсууд',
 'searchprofile-images' => 'Мультмедиа',
@@ -1320,7 +1344,7 @@ $1 тэмдэгтээс богино байх ёстой.',
 'action-createtalk' => 'ярианы хуудас үүсгэх',
 'action-createaccount' => 'энэ хэрэглэгчийн бүртгэлийг үүсгэх',
 'action-minoredit' => 'энэ засварыг бага зэргийн гэж тэмдэглэх',
-'action-move' => 'хуудсыг зөөх',
+'action-move' => 'нэр солих',
 'action-move-subpages' => 'энэ хуудас болон түүний дэд хуудсуудыг зөөх',
 'action-move-rootuserpages' => 'хэрэглэгчийн үндсэн хуудсуудыг зөөх',
 'action-movefile' => 'энэ файлыг зөөх',
@@ -1353,20 +1377,26 @@ $1 тэмдэгтээс богино байх ёстой.',
 # Recent changes
 'nchanges' => '$1 өөрчлөлт',
 'recentchanges' => 'Сүүлийн өөрчлөлтүүд',
-'recentchanges-legend' => 'Сүүлийн өөрчлөлтүүдийн сонголтууд',
+'recentchanges-legend' => 'Сар өдөр, шинж төрлөөр шүүх хүснэгт',
 'recentchanges-summary' => 'Энэхүү хуудсанд викид хийсэн хамгийн сүүлийн өөрчлөлтүүдийг үзүүлж байна.',
 'recentchanges-feed-description' => 'Вики дахь хамгийн сүүлийн өөрчлөлтүүдийг хянах.',
-'recentchanges-label-newpage' => 'ЭнÑ\8d Ð·Ð°Ñ\81ваÑ\80 Ñ\88инÑ\8d Ñ\85Ñ\83Ñ\83дÑ\81Ñ\8bг Ò¯Ò¯Ñ\81гÑ\8dсэн байна',
-'recentchanges-label-minor' => 'ЭнÑ\8d Ð½Ñ\8c Ð±Ð°Ð³Ð° Ð·Ñ\8dÑ\80гийн Ð·Ð°Ñ\81ваÑ\80 Ð±Ð°Ð¹Ð½Ð°',
-'recentchanges-label-bot' => 'ЭнÑ\8d Ð·Ð°Ñ\81ваÑ\80Ñ\8bг Ð±Ð¾Ñ\82 Ð³Ò¯Ð¹Ñ\86Ñ\8dÑ\82гÑ\8dÑ\81Ñ\8dн Ð±Ð°Ð¹Ð½Ð°',
+'recentchanges-label-newpage' => 'ШинÑ\8d Ñ\85Ñ\83Ñ\83даÑ\81 Ò¯Ò¯Ñ\81сэн байна',
+'recentchanges-label-minor' => 'Ð\91ага Ð·Ñ\8dÑ\80гийн Ð·Ð°Ñ\81ваÑ\80',
+'recentchanges-label-bot' => 'РобоÑ\82 Ð³Ò¯Ð¹Ñ\86Ñ\8dÑ\82гÑ\8dÑ\81Ñ\8dн Ð·Ð°Ñ\81ваÑ\80',
 'recentchanges-label-unpatrolled' => 'Энэ засварыг одоогийн байдлаар манаагүй байна',
-'recentchanges-legend-newpage' => '([[Special:NewPages|Шинэ хуудсуудын жагсаалтыг]] бас үзнэ үү.',
+'recentchanges-label-plusminus' => 'Өөрчлөгдсөн байт хэмжээ',
+'recentchanges-legend-heading' => "'''Таних үсэг:'''",
+'recentchanges-legend-newpage' => '([[Special:NewPages|жагсааж харах]])',
 'rcnotefrom' => "Доорх нь '''$2'''-с хойших өөрчлөлтүүд ('''$1''' хүртэлхийг харуулав) юм.",
 'rclistfrom' => '$1-с хойших шинэ засваруудыг үзүүлэх',
 'rcshowhideminor' => 'Бага зэргийн засваруудыг $1',
 'rcshowhidebots' => 'Роботуудыг $1',
-'rcshowhideliu' => 'Бүртгэлтэй хэрэглэгчдийг $1',
+'rcshowhideliu' => 'Нийт $1 бүртгэгдсэн хэрэглэгчид',
+'rcshowhideliu-show' => 'үзүүлэх',
+'rcshowhideliu-hide' => 'нуух',
 'rcshowhideanons' => 'Бүртгэлгүй хэрэглэгчдийг $1',
+'rcshowhideanons-show' => 'үзүүлэх',
+'rcshowhideanons-hide' => 'нуух',
 'rcshowhidepatr' => 'Хянагдаж буй засваруудыг $1',
 'rcshowhidemine' => 'Миний засваруудыг $1',
 'rclinks' => 'Сүүлийн $2 өдрийн турших $1 засварыг үзүүлэх<br />$3',
@@ -1830,6 +1860,7 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'protectedpages-indef' => 'Зөвхөн хугацаагүй хамгаалалтууд',
 'protectedpages-cascade' => 'Зөвхөн давхар хамгаалалтууд',
 'protectedpagesempty' => 'Эдгээр параметрээр хамгаалагдсан хуудас байхгүй байна.',
+'protectedpages-page' => 'Хуудас',
 'protectedtitles' => 'Хамгаалагдсан гарчигууд',
 'protectedtitlesempty' => 'Эдгээр параметрээр хамгаалагдсан гарчиг байхгүй байна.',
 'listusers' => 'Хэрэглэгчдийн жагсаалт',
@@ -1840,7 +1871,7 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'newpages' => 'Шинэ хуудсууд',
 'newpages-username' => 'Хэрэглэгчийн нэр:',
 'ancientpages' => 'Хамгийн хуучин хуудсууд',
-'move' => 'Ð\97Ó©Ó©х',
+'move' => 'Ð\9eндоогооÑ\80 Ð½Ñ\8dÑ\80лÑ\8dх',
 'movethispage' => 'Энэ хуудсыг зөөх',
 'unusedimagestext' => 'Дараах файлууд нь байгаа ч гэсэн ямар ч хуудсанд эмбэдлэгдээгүй байна.
 Бусад вэб хуудаснуудаас зураг руу шууд URL-р нь холбогдож болох учраас идэвхтэй хэрэглэгдэж буй эсэхээс үл хамааран энд жагсагдсан байж болно гэдгийг анхаарна уу.</p>',
@@ -1856,7 +1887,7 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 # Book sources
 'booksources' => 'Номон эх сурвалжууд',
 'booksources-search-legend' => 'Номын эх сурвалж хайх',
-'booksources-go' => 'Явах',
+'booksources-go' => 'Үзэх',
 'booksources-text' => 'Доорх нь шинэ, хуучин ном зардаг өөр сайт руу очих холбоосуудын жагсаалт бөгөөд таны хайж буй номнуудын тухай дэлгэрэнгүй мэдээлэл байх магадлалтай:',
 'booksources-invalid-isbn' => 'Өгөгдсөн ISBN хүчингүй юм шиг байна; эх сурвалжаас зөв хуулсан эсэхээ шалгана уу.',
 
@@ -1889,7 +1920,7 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'cachedspecial-refresh-now' => 'Саяханы хуудсыг харах',
 
 # Special:Categories
-'categories' => 'Анги',
+'categories' => 'Ангиллууд',
 'categoriespagetext' => 'Дараах {{PLURAL:$1|ангилалд|ангиллуудад}} хуудас эсвэл медиа файл агуулагдаж байна.
 [[Special:UnusedCategories|Хэрэглэгдэхгүй байгаа]] ангиллуудыг энд харуулсангүй.
 [[Special:WantedCategories|Хэрэгтэй ангиллууд]] гэдгийг харна уу.',
@@ -1905,7 +1936,7 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 # Special:LinkSearch
 'linksearch' => 'Гадаад холбоос хайлт',
 'linksearch-pat' => 'Хэв маягийг хайх:',
-'linksearch-ns' => 'Ð\9dÑ\8dÑ\80ний Ð·Ð°Ð¹:',
+'linksearch-ns' => 'Ð¥Ñ\83Ñ\83дÑ\81Ñ\8bн Ñ\82Ó©Ñ\80өл:',
 'linksearch-ok' => 'Хайх',
 'linksearch-text' => '"*.wikipedia.org" зэрэг орлуулагч тэмдэгт хэрэглэх боломжтой.<br />
 Дор хаяж дээд түвшиний домайн хэрэгтэй байна, жишээ нь "*.org".<br />
@@ -1924,7 +1955,7 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'activeusers-intro' => 'Энэ нь сүүлийн $1 {{PLURAL:$1|өдөрт|өдөрт}} ямар нэг байдлаар үйлдэл хийсэн хэрэглэгчдийн жагсаалт юм.',
 'activeusers-count' => 'Сүүлийн {{PLURAL:$3|нэг өдөрт|$3 өдөрт}} $1 {{PLURAL:$1|засвар|засвар}}',
 'activeusers-from' => 'Хамгийн эхэлж харуулах хэрэглэгч:',
-'activeusers-hidebots' => 'Ботуудыг нуух',
+'activeusers-hidebots' => 'роботуудыг нуух',
 'activeusers-hidesysops' => 'Администраторуудыг нуух',
 'activeusers-noresult' => 'Хэрэглэгч олдсонгүй.',
 
@@ -2201,7 +2232,7 @@ $UNWATCHURL
 'undeletebtn' => 'Сэргээх',
 'undeletelink' => 'үзэх/сэргээх',
 'undeleteviewlink' => 'харах',
-'undeleteinvert' => 'ЭÑ\81Ñ\80Ñ\8dгÑ\8dÑ\8dÑ\80 Ð½Ñ\8c Ð±Ð¾Ð»Ð³Ð¾Ñ\85',
+'undeleteinvert' => 'Ð\97ааÑ\81нааÑ\81 Ð±Ñ\83Ñ\81ад',
 'undeletecomment' => 'Шалтгаан:',
 'undeletedrevisions' => '{{PLURAL:$1|1 хувилбар|$1 хувилбар}}  сэргээгдлээ',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 засвар|$1 засвар}} ба {{PLURAL:$2|1 файл|$2 файл}} сэргээгдлээ',
@@ -2232,18 +2263,19 @@ $1',
 
 # Namespace form on various pages
 'namespace' => 'Нэрний зай:',
-'invert' => 'Эсрэгээр нь болгох',
+'invert' => 'Зааснаас бусад',
+'namespace_association' => 'Заасан төрлөөс',
 'blanknamespace' => '(Гол)',
 
 # Contributions
 'contributions' => '{{GENDER:$1|Хэрэглэгчийн }} оруулсан хувь нэмэр',
 'contributions-title' => '$1 хэрэглэгчийн хувь нэмэр',
 'mycontris' => 'Оруулсан хувь нэмэр',
-'contribsub2' => 'Хэрэглэгч: $1 ($2)',
+'contribsub2' => 'Хэрэглэгч: {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Энэ шалгуурт тохирох өөрчилсөн зүйлүүд олдсонгүй.',
 'uctop' => '(одоох)',
-'month' => 'Дараах сараас (өмнөх засварууд нь ч орно):',
-'year' => 'Ð\94аÑ\80ааÑ\85 Ð¶Ð¸Ð»Ñ\8dÑ\8dÑ\81 ï¼\88өмнөÑ\85 Ð·Ð°Ñ\81ваÑ\80Ñ\83Ñ\83д Ð½Ñ\8c Ñ\87 Ð¾Ñ\80ноï¼\89:',
+'month' => 'Дараах сараас урагш:',
+'year' => 'Ð\90Ñ\80Ñ\8bн Ð¾Ð½:',
 
 'sp-contributions-newbies' => 'Зөвхөн шинэ бүртгэлүүдийн хувь нэмрийг харуулах',
 'sp-contributions-newbies-sub' => 'Шинээр бүртгүүлсэн хэрэглэгчид',
@@ -2259,6 +2291,7 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Энэхүү IP хаягыг одоогоор түгжигдсэн байна.
 Лавлагааны зориулалтаар түгжээний лог дээрх хамгийн сүүлийн нэмэлтийг доор оруулав:',
 'sp-contributions-search' => 'Хувь нэмрийг хайх',
+'sp-contributions-suppresslog' => 'Хориглосон хэрэглэгчийн оролцоо',
 'sp-contributions-username' => 'IP хаяг эсвэл хэрэглэгчийн нэр:',
 'sp-contributions-toponly' => 'Хамгийн сүүлийн засваруудыг л үзүүлэх',
 'sp-contributions-submit' => 'Хайх',
@@ -2357,7 +2390,7 @@ $1',
 'blocklink' => 'түгжих',
 'unblocklink' => 'түгжээг тайлах',
 'change-blocklink' => 'түгжээг өөрчлөх',
-'contribslink' => 'хувь нэмэр',
+'contribslink' => 'оруулсан хувь нэмэр',
 'emaillink' => 'цахим шуудан явуулах',
 'autoblocker' => 'Автоматаар түгжигдлээ. Учир нь таны IP хаягийг "[[User:$1|$1]]" нь хэрэглэж байжээ. "$1"-г түгжих болсон шалтгаан нь: "\'\'\'$2\'\'\'"',
 'blocklogpage' => 'Түгжээний лог',
@@ -2424,7 +2457,7 @@ $1',
 
 # Move page
 'move-page' => '$1-г зөөх',
-'move-page-legend' => 'Ð¥Ñ\83Ñ\83дÑ\81Ñ\8bг Ð·Ó©Ó©х',
+'move-page-legend' => 'Ð¥Ñ\83Ñ\83дÑ\81Ñ\8bг Ð¾Ð½Ð´Ð¾Ð¾Ð³Ð¾Ð¾Ñ\80 Ð½Ñ\8dÑ\80лÑ\8dх',
 'movepagetext' => "Доорх маягтыг ашигласнаар хуудасны нэр солигдож, түүний бүх түүх шинэ нэр лүү зөөгдөх болно.
 Хуучин гарчиг нь шинэ гарчиг руух чиглүүлэгч болно.
 Та чиглүүлэгчийг эх бичвэр лүү автоматаар заахаар шинэчлэх боломжтой.
@@ -2439,7 +2472,7 @@ $1',
 *Доорх дөрвөлжинг хоосон болгосон
 
 Эдгээр тохиолдлуудад уг хуудсыг гар аргаар зөөх эсвэл нэгтгэх шаардлагатай болно.",
-'movearticle' => 'Ð¥Ñ\83Ñ\83дÑ\81Ñ\8bг Ð·Ó©Ó©х:',
+'movearticle' => 'Ð¥Ñ\83Ñ\83дÑ\81Ñ\8bн Ð½Ñ\8dÑ\80ийг Ñ\81олих:',
 'moveuserpage-warning' => "'''Анхаар:''' Та хэрэглэгчийн хуудсыг зөөх гэж байна. Зөвхөн хуудас нь л зөөгдөнө, харин хэрэглэгчийн нэр ''солигдохгүй'' гэдгийг анхаарана уу.",
 'movenologintext' => 'Та хуудсыг зөөхийн тулд бүртгэлтэй бөгөөд [[Special:UserLogin|холбогдсон]] байх ёстой.',
 'movenotallowed' => 'Таньд хуудас зөөх зөвшөөрөл байхгүй байна.',
@@ -2613,11 +2646,11 @@ $1',
 'tooltip-pt-mycontris' => 'Таны оруулсан хувь нэмрийн жагсаалт',
 'tooltip-pt-login' => 'Заавал хийх ёстой зүйл биш боловч таныг нэвтрэхийг зөвлөж байна.',
 'tooltip-pt-logout' => 'Гарах',
-'tooltip-ca-talk' => 'Хуудасны талаарх хэлэлцүүлэг',
-'tooltip-ca-edit' => 'Та энэ хуудсыг засварлах боломжтой. Хадгалахынхаа өмнө "Урьдчилан харах" товчлуурыг хэрэглэнэ үү.',
-'tooltip-ca-addsection' => 'ШинÑ\8d Ñ\85Ñ\8dÑ\81Ñ\8dг Ò¯Ò¯Ñ\81гэх',
+'tooltip-ca-talk' => 'Хуудсыг зөвшин хэлэлцэх',
+'tooltip-ca-edit' => 'Та энэ хуудсыг засч янзалж болно. Хадгалахаасаа өмнө урьдчилан харах товчийг дардаг юм шүү.',
+'tooltip-ca-addsection' => 'ШинÑ\8d Ñ\81Ñ\8dдвÑ\8dÑ\8dÑ\80 Ñ\8fÑ\80Ñ\8cж Ñ\8dÑ\85лэх',
 'tooltip-ca-viewsource' => 'Энэ хуудас хамгаалагдсан байна. Та зөвхөн кодыг нь харах боломжтой.',
-'tooltip-ca-history' => 'Энэ хуудасны өмнөх засварууд.',
+'tooltip-ca-history' => 'Энэ хуудсыг зассан түүхийг сөхөн нягтлах',
 'tooltip-ca-protect' => 'Энэ хуудсыг хамгаалах',
 'tooltip-ca-unprotect' => 'Энэ хуудасны хамгаалалтыг солих',
 'tooltip-ca-delete' => 'Энэ хуудсыг устгах',
@@ -2626,9 +2659,9 @@ $1',
 'tooltip-ca-watch' => 'Энэ хуудсыг хянах жагсаалтандаа нэмэх',
 'tooltip-ca-unwatch' => 'Энэ хуудсыг өөрийн хянаж буй хуудсуудын жагсаалтаас хасах',
 'tooltip-search' => '{{SITENAME}}-с хайх',
-'tooltip-search-go' => 'Яг Ð¸Ð¹Ð¼ Ð½Ñ\8dÑ\80Ñ\82Ñ\8dй Ñ\85Ñ\83Ñ\83даÑ\81 Ð±Ð°Ð¹Ð³Ð°Ð° Ð±Ð¾Ð» Ñ\82үүн Ñ\80Ò¯Ò¯ Ñ\8fваÑ\85',
+'tooltip-search-go' => 'Ð\98йм Ð½Ñ\8dÑ\80Ñ\82Ñ\8dй Ñ\85Ñ\83Ñ\83даÑ\81 Ð±Ð°Ð¹Ð³Ð°Ð° Ñ\8dÑ\81Ñ\8dÑ\85ийг Ò¯Ð·Ñ\8cе',
 'tooltip-search-fulltext' => 'Энэ текстийг хуудсуудаас хайх',
-'tooltip-p-logo' => 'Нүүр хуудас',
+'tooltip-p-logo' => 'Нүүр хуудаст зочлох',
 'tooltip-n-mainpage' => 'Нүүр хуудаст зочлох',
 'tooltip-n-mainpage-description' => 'Нүүр хуудаст зочлох',
 'tooltip-n-portal' => 'Энэ төслийн тухай, түүн дээр юу хийж болох, ба хаана зүйлсийг мэдэж авах тухай',
@@ -2646,7 +2679,7 @@ $1',
 'tooltip-t-specialpages' => 'Тусгай хуудаснуудын жагсаалт',
 'tooltip-t-print' => 'Энэ хуудасны хувилж болох хувилбар',
 'tooltip-t-permalink' => 'Хуудасны одоогийн хувилбар луу очих тогтмол линк',
-'tooltip-ca-nstab-main' => 'Өгүүллийн хуудсыг үзэх',
+'tooltip-ca-nstab-main' => 'Өгүүлсэн хуудас',
 'tooltip-ca-nstab-user' => 'Хэрэглэгчийн хуудсыг үзэх',
 'tooltip-ca-nstab-media' => 'Медиа хуудсыг үзэх.',
 'tooltip-ca-nstab-special' => 'Энэ бол тусгай хуудас, та үүнийг шууд засварлах боломжгүй.',
@@ -2655,12 +2688,12 @@ $1',
 'tooltip-ca-nstab-mediawiki' => 'Системийн мэдэгдлийг үзэх.',
 'tooltip-ca-nstab-template' => 'Загварыг үзэх',
 'tooltip-ca-nstab-help' => 'Тусламжийн хуудсыг үзэх',
-'tooltip-ca-nstab-category' => 'Ангиллын хуудсыг үзэх',
+'tooltip-ca-nstab-category' => 'Анги, бүлгийн хуудас',
 'tooltip-minoredit' => 'Бага зэргийн засвар гэж тэмдэглэх',
 'tooltip-save' => 'Засваруудаа хадгалах',
 'tooltip-preview' => 'Өөрийн оруулах гэж буй өөрчлөлтүүдийг урьдчилан харах. Үүнийг ашиглана уу!',
 'tooltip-diff' => 'Таны бичлэгт үйлдсэн өөрчлөлтүүдийг харуул.',
-'tooltip-compareselectedversions' => 'Энэ хуудасны сонгосон хоёр хувилбарын ялгааг харна уу.',
+'tooltip-compareselectedversions' => 'Энд дарж сонгосон хоёр хувилбарын ялгааг хараарай.',
 'tooltip-watch' => 'Энэ хуудсыг өөрийн хянах жагсаалтандаа нэмэх',
 'tooltip-watchlistedit-normal-submit' => 'Гарчигийг устгах',
 'tooltip-watchlistedit-raw-submit' => 'Хянаж буй хуудсуудын жагсаалтыг шинэчлэх',
@@ -3147,7 +3180,7 @@ $1',
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'бүгдийг',
 'namespacesall' => 'бүгдийг',
-'monthsall' => 'бүгдийг',
+'monthsall' => 'бүх сар',
 
 # Email address confirmation
 'confirmemail' => 'Мэйл хаягийг баталгаажуулах',
@@ -3327,6 +3360,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'Тусгай хуудсууд',
+'specialpages-note-top' => 'Томъёолбор',
 'specialpages-note' => '* Ердийн тусгай хуудсууд.
 * <strong class="mw-specialpagerestricted">Хориотой тусгай хуудсууд.</strong>',
 'specialpages-group-maintenance' => 'Засвар үйлчилгээний тайлангууд',
@@ -3358,7 +3392,7 @@ $5
 
 # Special:Tags
 'tags' => 'Хүчинтэй өөрчлөлтийн тагууд',
-'tag-filter' => '[[Special:Tags|Тагийн]] шүүлтүүр:',
+'tag-filter' => '[[Special:Tags|Үгээр]] шүүх:',
 'tag-filter-submit' => 'Шүүлтүүр',
 'tags-title' => 'Тагууд',
 'tags-intro' => 'Энэхүү хуудсанд програм хангамжийн засвар гэж тэмдэглэх боломжтой тагууд болон тэдний тайлбарыг жагсаан бичив.',
@@ -3424,6 +3458,23 @@ $5
 # API errors
 'api-error-filename-tooshort' => 'Файлын нэр хэтэрхий урт байна.',
 'api-error-filetype-banned' => 'Ийм төрлийн файлыг хорьсон байна.',
+'api-error-illegal-filename' => 'Ийм хэрэглэгчийн нэр өгөх боломжгүй.',
+'api-error-internal-error' => 'Өөрийн алдаа: файлыг чинь upload хийх явцад алдаа гарлаа.',
+'api-error-mustbeloggedin' => 'файлаа upload хийхийн тулд эхлээд хэрэглэгчээр нэвтэр.',
+'api-error-mustbeposted' => 'Өөрийн алдаа: HTTP POST төрлийн хандалт шаардлагатай.',
+'api-error-noimageinfo' => 'upload хийгдсэн боловч файлын талаар ямарч мэдээлэл сервер өгсөнгүй.',
+'api-error-nomodule' => 'Өөрийн алдаа: upload хийх модулийг зааж өгөөгүй байна.',
+'api-error-ok-but-empty' => 'Өөрийн алдаа: Серверээс хариу ирсэнгүй.',
+'api-error-overwrite' => 'Ижил нэртэй файл оруулах хориотой.',
+'api-error-stashfailed' => 'Өөрийн алдаа: Серверт түр файл хадгалахад алдаа гарлаа.',
+'api-error-timeout' => 'Сервер хариу өгөлгүй удлаа.',
+'api-error-unclassified' => 'Тодорхойгүй алдаа гарлаа.',
+'api-error-unknown-code' => 'Тодорхойгүй алдаа: "$1".',
+'api-error-unknown-error' => 'Өөрийн алдаа: upload хийх үед алдаа гарлаа.',
+'api-error-unknown-warning' => 'Тодорхойгүй сануулга: $1',
+'api-error-unknownerror' => 'Тодорхойгүй алдаа: $1',
+'api-error-uploaddisabled' => 'Энэ викид upload хийхийг хориглосон.',
+'api-error-verification-error' => 'Файлын төрөл буруу, эсвэл дутуу татагдсан.',
 
 # Durations
 'duration-seconds' => '$1 {{PLURAL:$1|секунд|секунд}}',
index 0fa1bf3..daf1676 100644 (file)
@@ -45,6 +45,7 @@
  * @author कोलࣿहापࣿरी
  * @author कोल्हापुरी
  * @author प्रणव कुलकर्णी
+ * @author प्रतिमा
  * @author शࣿरीहरि
  * @author संतोष दहिवळ
  */
@@ -492,7 +493,6 @@ $messages = array(
 'vector-action-protect' => 'सुरक्षित करा',
 'vector-action-undelete' => 'वगळलेले पुनर्स्थापित करा',
 'vector-action-unprotect' => 'सुरक्षितता बदला',
-'vector-simplesearch-preference' => 'सोपा शोधपट्टी विकल्प सक्रिय करा (फक्त व्हेक्टर त्वचेसाठी)',
 'vector-view-create' => 'तयार करा',
 'vector-view-edit' => 'संपादन',
 'vector-view-history' => 'इतिहास पहा',
@@ -725,6 +725,7 @@ $2',
 'invalidtitle-unknownnamespace' => 'अनोळखी नामविश्वाच्या आकड्यासह अवैध मथळा $1 व मजकूर "$2"',
 'exception-nologin' => 'सनोंद-प्रवेशित नाही',
 'exception-nologin-text' => 'हे पान किंवा क्रिया करण्यासाठी आपल्याला या विकिवर [[Special:Userlogin|सनोंद- प्रवेशित]] असावयास हवे.',
+'exception-nologin-text-manual' => 'हे पान किंवा क्रियेस पोचण्यास कृपया $1 करा.',
 
 # Virus scanner
 'virus-badscanner' => "खराब विन्यास (कॉन्फिगरेशन): अनोळखी व्हायरस स्कॅनर: ''$1''",
@@ -773,8 +774,6 @@ $2',
 'gotaccountlink' => 'सनोंद-प्रवेश करा',
 'userlogin-resetlink' => 'सनोंद-प्रवेश तपशील विसरला असाल तर येथे टिचकी मारा.',
 'userlogin-resetpassword-link' => 'आपला परवलीचा शब्द विसरलात?',
-'helplogin-url' => 'Help:सनोंद प्रवेशासाठी(लॉगिंग-ईन)',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|सनोंद-प्रवेशासाठी(लॉग-ईन) सहाय्य]]',
 'userlogin-loggedin' => 'आपण पुर्वीच {{GENDER:$1|$1}} म्हणून सनोंद प्रवेशित आहात.वेगळ्या सदस्यनावाने सनोंद प्रवेशासाठी खालील आवेदन वापरा.',
 'userlogin-createanother' => 'दुसरे नवीन खाते तयार करा',
 'createacct-join' => 'खाली आपली माहिती भरा',
@@ -857,6 +856,8 @@ $2',
 'suspicious-userlogout' => 'तुमच्या सनोंद-निर्गमनास नकार दिल्या गेला कारण असे दिसते की ती विनंती अन-अनुबंधित(डिसकनेक्टेड) न्याहाळकाद्वारे पाठवल्या गेली.',
 'createacct-another-realname-tip' => 'आपले खरे नाव टाकणे वैकल्पिक आहे.
 जर आपण ते द्यायचे ठरविले तर,ते आपल्या कामाचा मूळ स्रोत म्णून देण्यास वापरले जाईल.',
+'pt-login' => 'सनोंद-प्रवेश करा',
+'pt-userlogout' => 'सनोंद-निर्गम',
 
 # Email sending
 'php-mail-error-unknown' => 'पीएचपीच्या विपत्र() पर्यायात अज्ञात चूक',
@@ -865,7 +866,7 @@ $2',
 
 # Change password dialog
 'changepassword' => 'परवलीचा शब्द बदला',
-'resetpass_announce' => 'तà¥\81मà¥\8dहà¥\80 à¤\88-मà¥\87ल à¤®à¤§à¥\82न à¤¦à¤¿à¤²à¥\87लà¥\8dया à¤¤à¤¾à¤¤à¥\8dपà¥\81रतà¥\8dया à¤¶à¤¬à¥\8dदाà¤\82à¤\95ानà¥\87 à¤¸à¤¨à¥\8bà¤\82द à¤ªà¥\8dरवà¥\87शित à¤\86हात. à¤\86पला à¤¸à¤¨à¥\8bà¤\82द-पà¥\8dरवà¥\87श à¤ªà¥\82रà¥\8dण à¤\95रणà¥\8dयासाठà¥\80, à¤\95à¥\83पया à¤¯à¥\87थà¥\87 à¤¨à¤µà¥\80न à¤ªà¤°à¤µà¤²à¥\80à¤\9aा à¤¶à¤¬à¥\8dद à¤¦à¥\8dया:',
+'resetpass_announce' => 'à¤\96ातà¥\8dयामधà¥\8dयà¥\87 à¤ªà¥\8dरविषà¥\8dà¤\9f à¤¹à¥\8bणà¥\87 à¤¥à¤¾à¤\82बविणà¥\8dयाà¤\95रिता à¤\95à¥\83पया à¤\86पलà¥\8dया à¤\96ातà¥\8dयाà¤\9aा à¤\95à¥\82à¤\9fशबà¥\8dद à¤¬à¤¦à¤²à¤¾.',
 'resetpass_text' => '<!-- मजकूर इथे लिहा -->',
 'resetpass_header' => 'खात्याचा परवलीचा शब्द बदला',
 'oldpassword' => 'जुना परवलीचा शब्दः',
@@ -873,6 +874,8 @@ $2',
 'retypenew' => 'पुन्हा एकदा परवलीचा शब्द टंका:',
 'resetpass_submit' => 'परवलीचा शब्द टाका आणि सनोंद-प्रवेश करा',
 'changepassword-success' => 'तुमचा परवलीचा शब्द यशस्वीरित्या बदललेला आहे!',
+'changepassword-throttled' => 'तुम्ही नुकतेच सनोंद- प्रवेशासाठी अनेकानेक प्रयत्न केले आहेत.
+कृपया, पुन्हा प्रयत्न करण्याआधी $1 थोडी उसंत घ्या.',
 'resetpass_forbidden' => 'परवलीचे शब्द बदलता येत नाहीत.',
 'resetpass-no-info' => 'या पानामध्ये थेट जाण्यासाठी तुम्हास  सनोंद-प्रवेशित असावयास हवे.',
 'resetpass-submit-loggedin' => 'परवलीचा शब्द बदला',
@@ -922,6 +925,8 @@ $2',
 'changeemail-password' => 'तुमचा {{SITENAME}} संकेतांक:',
 'changeemail-submit' => 'ईमेल बदला',
 'changeemail-cancel' => 'रद्द करा',
+'changeemail-throttled' => 'तुम्ही नुकतेच सनोंद- प्रवेशासाठी अनेक प्रयत्न केले आहेत.
+कृपया, पुन्हा प्रयत्न करण्याआधी $1 थोडी उसंत घ्या.',
 
 # Special:ResetTokens
 'resettokens' => 'ओळखचिन्ह(टोकन) पुनर्स्थापित करा',
@@ -1120,7 +1125,7 @@ $2',
 'invalid-content-data' => 'अवैध माहिती',
 'content-not-allowed-here' => '"$1" हा आशय [[$2]] लेखावर टाकण्याची अनुमती नाही.',
 'editwarning-warning' => "या पानावरुन दुसर्‍या पानावर गेल्यास, तुम्ही येथे केलेले बदल जतन होणार नाहीत.
-जर आपण सनोंद-प्रवेशित असाल तर, ही सूचना घालवण्यासाठी ''माझ्या पसंती'' मधील संपादनपसंतीत बदल करा.",
+जर आपण सनोंद-प्रवेशित असाल तर, ही सूचना घालवण्यासाठी ''{{int:prefs-editing}}'' मधील संपादनपसंतीत बदल करा.",
 
 # Content models
 'content-model-wikitext' => 'विकिमजकूर',
@@ -1133,10 +1138,10 @@ $2',
 
 ते $2{{PLURAL:$2|कॉल|कॉल्स}} पेक्षा कमी असायला हवेत, सध्या $1{{PLURAL:$1| $1 कॉल| $1 कॉल्स}} एवढे आहेत.',
 'expensive-parserfunction-category' => 'खूप सारे खर्चीक पार्सर क्रिया कॉल्स असणारी पाने',
-'post-expand-template-inclusion-warning' => 'सूचना: साचे वाढविण्याची मर्यादा संपलेली आहे.
+'post-expand-template-inclusion-warning' => '<strong>ईशारा:</strong> साचे वाढविण्याची मर्यादा संपलेली आहे.
 काही साचे वगळले जातील.',
 'post-expand-template-inclusion-category' => 'अशी पाने ज्यांच्यावर साचे चढविण्याची मर्यादा संपलेली आहे',
-'post-expand-template-argument-warning' => 'सूचना: या पानावर असा एकतरी साचा आहे जो वाढविल्यास खूप मोठा होईल.
+'post-expand-template-argument-warning' => '<strong>ईशारा:</strong> या पानावर असा एकतरी साचा आहे जो वाढविल्यास खूप मोठा होईल.
 असे साचे वगळण्यात आलेले आहेत.',
 'post-expand-template-argument-category' => 'अशी पाने ज्यांच्यामध्ये साचे वगळलेले आहेत',
 'parser-template-loop-warning' => 'साचा चक्र मिळाले: [[$1]]',
@@ -1154,6 +1159,7 @@ $2',
 'undo-success' => 'संपादन परतवले जाऊ शकते.कृपया, आपण नेमके हेच करू इच्छिता तर ते खाली दिलेली तुलना पाहू निश्चित करा,आणि नंतर संपादन परतवण्याचे काम पूर्ण करण्याकरिता इच्छित बदल जतन करा.',
 'undo-failure' => 'विसंवादी आंतरवर्ती संपादने झाल्यामुळे आपण हे संपादन परतवू शकत नाही.',
 'undo-norev' => 'हे संपादन परतविता आलेले नाही कारण ते अगोदरच उलटविलेले किंवा वगळलेले आहे.',
+'undo-nochange' => 'असे दिसते कि हे संपादन पूर्ववत केल्या गेले आहे.',
 'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|चर्चा]])यांची आवृत्ती $1 परतवली.',
 'undo-summary-username-hidden' => 'अज्ञात सदस्याची $1 आवृत्ती परतवा',
 
@@ -1234,9 +1240,6 @@ $3ने ''$2'' कारण दिले आहे.",
 'revdelete-show-file-submit' => 'होय',
 'revdelete-selected' => "'''[[:$1]] {{PLURAL:$2|ची निवडलेली आवृत्ती|च्या निवडलेल्या आवृत्त्या}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|निवडलेली नोंदीकृत घटना|निवडलेल्या नोंदीकृत घटना}}:'''",
-'revdelete-text' => "'''वगळलेल्या नोंदी आणि घटना अजूनही पानाच्या इतिहासात आणि नोंदीत आढळेल,परंतु मजकुराचा भाग सार्वजनिक स्वरूपात उपलब्ध राहणार नाही.'''
-
-अजून इतर  प्रतिबंध घातल्याशिवाय {{SITENAME}}चे इतर प्रबंधक लपविलेला मजकूर याच दुव्याने परतवू शकतील.",
 'revdelete-confirm' => "कृपया '''याची खात्री करा''' की तुम्ही जे करीत आहात, त्याचे परिणाम आपण जाणत आहात आणि, ते काम [[{{MediaWiki:Policy-url}}|मीडियाविकीच्या नीती]]नुसार आहे.",
 'revdelete-suppress-text' => "लपवण्याचा वापर '''फक्त''' पुढील बाबतीत होतो:
 * उच्च दर्जाची बदनामीकारक माहिती
@@ -1347,7 +1350,7 @@ $1",
 'shown-title' => '$1 {{PLURAL:$1|निकाल}} प्रतिपान पहा',
 'viewprevnext' => 'पहा ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''या विकिवर \"[[:\$1]]\" या नावाचे पान आहे.'''",
-'searchmenu-new' => "'''या विकिवर \"[[:\$1]]\" हे पान तयार करा!'''",
+'searchmenu-new' => '<strong>या विकिवर "[[:$1]]" हे पान तयार करा!</strong> {{PLURAL:$2|0=|See also the page found with your search.|सापडलेले शोध निकालही पहा.}}',
 'searchprofile-articles' => 'आशय-पाने',
 'searchprofile-project' => 'साहाय्य व प्रकल्प पाने',
 'searchprofile-images' => 'बहुमाध्यमे',
@@ -1372,6 +1375,7 @@ $1",
 'searchrelated' => 'संबंधित',
 'searchall' => 'सर्व',
 'showingresults' => "#'''$2'''पासून {{PLURAL:$1|'''1'''पर्यंतचा निकाल|'''$1'''पर्यंतचे निकाल}} खाली दाखवले आहे.",
+'showingresultsinrange' => 'खाली #<strong>$2</strong> ते #<strong>$3</strong> पर्यंतच्या कक्षेतील {{PLURAL:$1|<strong>१</strong> निकाल दाखविला आहे|<strong>$1</strong> निकाल दाखविले आहेत}}.',
 'showingresultsnum' => "खाली दिलेले #'''$2'''पासून सुरू होणारे  {{PLURAL:$3|'''1''' निकाल|'''$3''' निकाल}}.",
 'showingresultsheader' => "'''$4''' साठी {{PLURAL:$5|'''$3'''पैकी '''$1''' निकाल|'''$3''' पैकी '''$1 - $2''' निकाल}}",
 'search-nonefound' => 'दिलेल्या पृच्छेशी जुळणारे निकाल नाहीत.',
@@ -1686,16 +1690,28 @@ $1",
 'rcnotefrom' => "खाली <b>$2</b> पासूनचे ('''$1''' पर्यंत) बदल दाखविले आहेत.",
 'rclistfrom' => '$1 नंतर केले गेलेले बदल दाखवा.',
 'rcshowhideminor' => 'छोटे बदल $1',
+'rcshowhideminor-show' => 'दाखवा',
+'rcshowhideminor-hide' => 'लपवा',
 'rcshowhidebots' => 'सांगकामे(बॉट्स) $1',
+'rcshowhidebots-show' => 'दाखवा',
+'rcshowhidebots-hide' => 'लपवा',
 'rcshowhideliu' => '$1नोंदणीकृत सदस्य',
+'rcshowhideliu-show' => 'दाखवा',
+'rcshowhideliu-hide' => 'लपवा',
 'rcshowhideanons' => 'अनामिक सदस्य $1',
+'rcshowhideanons-show' => 'दाखवा',
+'rcshowhideanons-hide' => 'लपवा',
 'rcshowhidepatr' => '$1 पहारा असलेली संपादने',
+'rcshowhidepatr-show' => 'दाखवा',
+'rcshowhidepatr-hide' => 'लपवा',
 'rcshowhidemine' => 'माझे बदल $1',
+'rcshowhidemine-show' => 'दाखवा',
+'rcshowhidemine-hide' => 'लपवा',
 'rclinks' => 'मागील $2 दिवसांतील $1 बदल पहा.<br />$3',
 'diff' => 'फरक',
 'hist' => 'इति',
 'hide' => 'लपवा',
-'show' => 'पहा',
+'show' => 'दाà¤\96वा',
 'minoreditletter' => 'छो',
 'newpageletter' => 'न',
 'boteditletter' => 'सां',
@@ -1808,6 +1824,7 @@ $1",
 'php-uploaddisabledtext' => 'PHP मध्ये संचिका चढवणे प्रतिबंधित केले आहे.
 कृपया file_uploads मांडणी (setting) तपासावी.',
 'uploadscripted' => 'या संचिकेत HTML किंवा स्क्रिप्ट कोडचा आंतर्भाव आहे, त्याचा एखाद्या विचरकाकडून विचित्र अर्थ लावला जाऊ शकतो.',
+'uploadinvalidxml' => 'अपभारीत संचिकेतील XML पार्स करता आले नाही.',
 'uploadvirus' => 'ह्या संचिकेत व्हायरस आहे. अधिक माहिती: $1',
 'uploadjava' => 'ही फाईल झीप ह्या प्रकारातील आहे ज्यामधे जावा .क्लास फाईल. आहे,जावा फाईलचे अपभारणास परवानगी नाही कारण त्याने सुरक्षा-बंधने टाळल्या जाऊ शकतात.',
 'upload-source' => 'स्रोत संचिका',
@@ -1859,7 +1876,7 @@ $1',
 'backend-fail-read' => '$1 ही संचिका वाचता आली नाही.',
 'backend-fail-create' => '$1 ही संचिका लिहिता आली नाही.',
 'backend-fail-maxsize' => '$1 ही संचिका लिहिता आली नाही कारण ती {{PLURAL:$2|एक बाइट|$2 बाइट्स}} पेक्षा मोठी आहे.',
-'backend-fail-readonly' => 'पारà¥\8dशà¥\8dवभà¥\8cमà¥\80à¤\95 à¤¸à¤¾à¤ à¤µà¤£ "$1" â\80\9cफà¤\95à¥\8dत à¤µà¤¾à¤\9aाâ\80\9d à¤\85सà¥\87 à¤\86हà¥\87. à¤¦à¤¿à¤²à¥\87लà¥\87 à¤\95ारण "$2" à¤\86हà¥\87.',
+'backend-fail-readonly' => 'पारà¥\8dशà¥\8dवभà¥\8cमà¥\80à¤\95 à¤¸à¤¾à¤ à¤µà¤£ "$1" â\80\9cफà¤\95à¥\8dत à¤µà¤¾à¤\9aाâ\80\9d à¤\85शà¥\80 à¤\86हà¥\87. à¤¦à¤¿à¤²à¥\87लà¥\87 à¤\95ारण à¤\86हà¥\87: "<em>$2</em>"',
 'backend-fail-synced' => 'अंतर्गत पार्श्वभौमीक साठवणीतील फाईल "$1" विसंगत आहे.',
 'backend-fail-connect' => 'पार्श्वभौमीक साठा "$1"शी संबंध जोडू शकत नाही.',
 'backend-fail-internal' => 'पार्श्वभौमीक साठा "$1" यात अज्ञात चूक झाली आहे.',
@@ -2002,24 +2019,24 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization कृपया हे
 # File reversion
 'filerevert' => '$1 पूर्वपद',
 'filerevert-legend' => 'संचिका पूर्वपदास',
-'filerevert-intro' => 'तुम्ही [$3, $2 प्रमाणे आवर्तन$4 कडे] [[Media:$1|$1]]  उलटवत आहात.',
+'filerevert-intro' => 'तुम्ही [$3, $2 प्रमाणे आवर्तन$4 कडे]<strong>[[Media:$1|$1]]</strong>  उलटवत आहात.',
 'filerevert-comment' => 'कारण:',
 'filerevert-defaultcomment' => '$2, $1 च्या आवृत्तीत पूर्वपदास',
 'filerevert-submit' => 'पूर्वपद',
-'filerevert-success' => "[$3, $2 प्रमाणे आवर्तन $4]कडे '''[[Media:$1|$1]]''' उलटवण्यात आली.",
+'filerevert-success' => '[$3, $2 प्रमाणे आवर्तन $4]कडे<strong>[[Media:$1|$1]]</strong>उलटवण्यात आली.',
 'filerevert-badversion' => 'दिलेलेल्या वेळ मापनानुसार,या संचिकेकरिता कोणतीही पूर्वीची स्थानिक आवृत्ती नाही.',
 
 # File deletion
 'filedelete' => '$1 वगळा',
 'filedelete-legend' => 'संचिका वगळा',
-'filedelete-intro' => "तुम्ही '''[[Media:$1|$1]]''' वगळत आहात.",
-'filedelete-intro-old' => "[$4 $3, $2]च्या वेळेचे '''[[Media:$1|$1]]'''चे आवर्तन तुम्ही वगळत आहात.",
+'filedelete-intro' => 'तुम्ही<strong>[[Media:$1|$1]]</strong>त्याच्या सर्व इतिहासासह,वगळण्याच्या तयारीत आहात.',
+'filedelete-intro-old' => '[$4 $3, $2]च्या वेळेचे<strong>[[Media:$1|$1]]</strong>चे आवर्तन तुम्ही वगळत आहात.',
 'filedelete-comment' => 'कारण:',
 'filedelete-submit' => 'वगळा',
-'filedelete-success' => "'''$1'''वगळण्यात आले.",
-'filedelete-success-old' => '<span class="plainlinks">$3, $2 वेळी \'\'\'[[Media:$1|$1]]\'\'\' चे आवर्तन वगळण्यात आले आहे .</span>',
-'filedelete-nofile' => "'''$1''' अस्तित्वात नाही.",
-'filedelete-nofile-old' => "सांगितलेल्या गुणधर्मानुसार  '''$1'''चे कोणतेही विदा आवर्तन संचित नाही.",
+'filedelete-success' => '<strong>$1</strong>वगळण्यात आले.',
+'filedelete-success-old' => '$3चे<strong>[[Media:$1|$1]]</strong> आवर्तन, $2वगळण्यात आले आहे .',
+'filedelete-nofile' => '<strong>$1</strong>अस्तित्वात नाही.',
+'filedelete-nofile-old' => 'सांगितलेल्या गुणधर्मानुसार<strong>$1</strong>चे कोणतेही विदा आवर्तन संचित नाही.',
 'filedelete-otherreason' => 'दुसरे/अतिरिक्त कारण:',
 'filedelete-reason-otherlist' => 'इतर कारण',
 'filedelete-reason-dropdown' => '*वगळण्याची सामान्य कारणे
@@ -2157,10 +2174,20 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'deadendpagestext' => 'या पानांवर या विकिवरील इतर कुठल्याही पानाला जोडणारा दुवा नाही.',
 'protectedpages' => 'सुरक्षित पाने',
 'protectedpages-indef' => 'फक्त अनंत काळासाठी सुरक्षित केलेले',
+'protectedpages-summary' => 'या पानात,अस्तित्वात असणाऱ्या संरक्षित अशा पानाची यादी आहे.नवनिर्माणापासून संरक्षित शीर्षकांच्या यादीसाठी [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] बघा.',
 'protectedpages-cascade' => 'केवळ एकामेकांवर अवलंबून कास्केडींग सुरक्षा (सुरक्षा शिडी)',
 'protectedpages-noredirect' => 'पुनर्निर्देशने लपवा',
 'protectedpagesempty' => 'सध्या या नियमावलीने कोणतीही पाने सुरक्षित केलेली नाहीत.',
+'protectedpages-timestamp' => 'वेळशिक्का',
+'protectedpages-page' => 'पान',
+'protectedpages-expiry' => 'संपण्याचा कालावधी',
+'protectedpages-performer' => 'सदस्याचे रक्षण करीत आहे',
+'protectedpages-params' => 'रक्षणाची प्राचले',
+'protectedpages-reason' => 'कारण',
+'protectedpages-unknown-timestamp' => 'अज्ञात',
+'protectedpages-unknown-performer' => 'अनामिक सदस्य',
 'protectedtitles' => 'सुरक्षीत शीर्षके',
+'protectedtitles-summary' => 'या पानात अशा शीर्षकांची यादी आहे, जी नविन तयार करता येउ  शकणार नाहीत.अस्तित्वात असणाऱ्या संरक्षित पानांच्या यादीसाठी [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] बघा.',
 'protectedtitlesempty' => 'या नियमावलीने सध्या कोणतीही शीर्षके सुरक्षित केलेली नाहीत.',
 'listusers' => 'सदस्यांची यादी',
 'listusers-editsonly' => 'फक्त संपादनांसहित सदस्य दाखवा',
@@ -2406,7 +2433,7 @@ $UNWATCHURL
 'exblank' => 'पान रिकामे होते',
 'delete-confirm' => '"$1" वगळा',
 'delete-legend' => 'वगळा',
-'historywarning' => 'सूचना: तुम्ही वगळत असलेल्या पानाला $1 {{PLURAL:$1|आवर्तनाचा|आवर्तनांचा}} इतिहास आहे:',
+'historywarning' => '<strong>ईशारा:</strong> तुम्ही वगळत असलेल्या पानाला $1 {{PLURAL:$1|आवर्तनाचा|आवर्तनांचा}} इतिहास आहे:',
 'confirmdeletetext' => 'तुम्ही एक लेखपान त्याच्या सर्व इतिहासासोबत वगळण्याच्या तयारीत आहात.
 कृपया, तुम्ही करीत असलेली कृती ही मीडियाविकीच्या [[{{MediaWiki:Policy-url}}|नीतीनुसार]] आहे ह्याची खात्री करा. तसेच, तुम्ही करीत असलेल्या कृतीचे परिणाम, कृती करण्यापूर्वी जाणून घ्या.',
 'actioncomplete' => 'काम पूर्ण',
@@ -2471,11 +2498,11 @@ $UNWATCHURL
 'protect_expiry_invalid' => 'संपण्याचा कालावधी चुकीचा आहे.',
 'protect_expiry_old' => 'संपण्याचा कालावधी उलटून गेलेला आहे.',
 'protect-unchain-permissions' => 'पुढील संरक्षित विकल्प उघडा.',
-'protect-text' => "'''$1''' या पानाची सुरक्षापातळी तुम्ही इथे पाहू शकता अथवा बदलू शकता.",
-'protect-locked-blocked' => "तुम्ही प्रतिबंधित असताना सुरक्षा पातळी बदलू शकत नाही.येथे '''$1''' पानाकरिता सध्याची मांडणावळ आहे:",
-'protect-locked-dblock' => "विदागारास ताळे लागलेले असताना सुरक्षा पातळी बदलता येत नाही.येथे '''$1''' पानाकरिता सध्याची मांडणावळ आहे:",
-'protect-locked-access' => "तुम्हाला या पानाची सुरक्षा पातळी बदलण्याचे अधिकार नाहीत.
-'''$1''' या पानाची सुरक्षा पातळी पुढीलप्रमाणे:",
+'protect-text' => '<strong>$1</strong> या पानाची सुरक्षापातळी तुम्ही इथे पाहू शकता अथवा बदलू शकता.',
+'protect-locked-blocked' => 'तुम्ही प्रतिबंधित असताना सुरक्षा पातळी बदलू शकत नाही.येथे <strong>$1</strong> पानाकरिता सध्याची मांडणावळ आहे:',
+'protect-locked-dblock' => 'विदागारास ताळे लागलेले असताना सुरक्षा पातळी बदलता येत नाही.येथे <strong>$1</strong> पानाकरिता सध्याची मांडणावळ आहे:',
+'protect-locked-access' => 'तुम्हाला या पानाची सुरक्षा पातळी बदलण्याचे अधिकार नाहीत.
+<strong>$1</strong> या पानाची सुरक्षा पातळी पुढीलप्रमाणे:',
 'protect-cascadeon' => 'हे पान सध्या सुरक्षित आहे कारण ते {{PLURAL:$1|या पानाच्या|या पानांच्या}} सुरक्षा शिडीवर आहे. तुम्ही या पानाची सुरक्षा पातळी बदलू शकता, पण त्याने सुरक्षाशिडी मध्ये बदल होणार नाहीत.',
 'protect-default' => 'सर्व सदस्यांना परवानगी द्या',
 'protect-fallback' => 'फक्त "$1" परवानगी असणाऱ्यांनाच परवानगी द्या',
@@ -2519,7 +2546,7 @@ $UNWATCHURL
 # Undelete
 'undelete' => 'वगळलेली पाने पहा',
 'undeletepage' => 'वगळलेली पाने पहा आणि पुनर्स्थापित करा',
-'undeletepagetitle' => "'''खाली [[:$1]] च्या वगळलेल्या आवृत्त्या समाविष्ट केलेल्या आहेत'''.",
+'undeletepagetitle' => '<strong>खाली [[:$1]] च्या वगळलेल्या आवृत्त्या समाविष्ट केलेल्या आहेत</strong>.',
 'viewdeletedpage' => 'काढून टाकलेले लेख पहा',
 'undeletepagetext' => 'खालील {{PLURAL:$1|पान वगळले आहे तरीसुद्धा विदागारात जतन आहे आणि पुनर्स्थापित करणे शक्य आहे|$1 पाने वगळली आहेत तरी सुद्धा विदागारात जतन आहेत आणि पुनर्स्थापित करणे शक्य आहेत}}. विदागारातील साठवण ठरावीक कालावधीने स्वच्छ करता येते.',
 'undelete-fieldset-title' => 'आवर्तने पुनर्स्थापित करा',
@@ -2543,9 +2570,9 @@ $UNWATCHURL
 'undeletedrevisions-files' => '{{PLURAL:$1|1 आवर्तन|$1 आवर्तने}}आणि {{PLURAL:$2|1 संचिका|$2 संचिका}} पुनर्स्थापित',
 'undeletedfiles' => '{{PLURAL:$1|1 संचिका|$1 संचिका}} पुनर्स्थापित',
 'cannotundelete' => 'उलटवणे फसले:$1',
-'undeletedpage' => "'''$1ला पुनर्स्थापित केले'''
+'undeletedpage' => '<strong>$1ला पुनर्स्थापित केले</strong>
 
-अलिकडिल वगळलेल्या आणि पुनर्स्थापितांच्या नोंदीकरिता [[Special:Log/delete|वगळल्याच्या नोंदी]] पहा .",
+अलिकडिल वगळलेल्या आणि पुनर्स्थापितांच्या नोंदीकरिता [[Special:Log/delete|वगळल्याच्या नोंदी]] पहा .',
 'undelete-header' => 'अलीकडील वगळलेल्या पानांकरिता [[Special:Log/delete|वगळलेल्या नोंदी]] पहा.',
 'undelete-search-title' => 'वगळलेली पाने शोधा',
 'undelete-search-box' => 'वगळलेली पाने शोधा',
@@ -2606,7 +2633,7 @@ $1',
 'whatlinkshere-page' => 'पान:',
 'linkshere' => "खालील लेख '''[[:$1]]''' या पानाशी जोडले आहेत:",
 'nolinkshere' => "'''[[:$1]]''' येथे कोणत्याही पानांचे दुवे नाहीत.",
-'nolinkshere-ns' => "निवडलेल्या नामविश्वातील कोणतीही पाने '''[[:$1]]'''ला दुवा देत नाहीत .",
+'nolinkshere-ns' => 'निवडलेल्या नामविश्वातील कोणतीही पाने <strong>[[:$1]]</strong>ला दुवा देत नाहीत .',
 'isredirect' => 'पुनर्निर्देशित पान',
 'istemplate' => 'मिळवा',
 'isimage' => 'संचिका दुवा',
@@ -2698,7 +2725,7 @@ $1',
 'change-blocklink' => 'रोध बदला',
 'contribslink' => 'योगदान',
 'emaillink' => 'ई-मेल पाठवा.',
-'autoblocker' => 'स्वयंचलित प्रतिबंधन केले गेले कारण तुमचा अंकपत्ता अलीकडे "[[User:$1|$1]]"ने वापरला होता. $1 च्या प्रतिबंधनाकरिता दिलेले कारण: "$2" आहे.',
+'autoblocker' => 'स्वयंचलित प्रतिबंधन केले गेले कारण तुमचा अंकपत्ता अलीकडे "[[User:$1|$1]]"ने वापरला होता. $1च्या प्रतिबंधनाकरिता दिलेले कारण "$2" आहे',
 'blocklogpage' => 'रोध नोंदी',
 'blocklog-showlog' => 'हा सदस्य पूर्वी प्रतिबंधित अथवा लपविल्या गेला होता.
 लपविलेल्या नोंदी  संदर्भाकरिता खाली उपलब्ध आहेत.',
@@ -2784,7 +2811,7 @@ $1',
 
 जर नवीन शीर्षकाचा लेख अस्तित्वात असेल तर स्थानांतरण होणार '''नाही'''.
 पण जर नवीन शीर्षकाचा लेख हा रिकामा असेल अथवा पुनर्निर्देशन असेल (म्हणजेच त्या लेखाला जर संपादन इतिहास नसेल) तर स्थानांतरण होईल. याचा अर्थ असा की जर काही चूक झाली तर तुम्ही पुन्हा जुन्या शीर्षकाकडे स्थानांतरण करू शकता.
-'''सूचना!'''
+<strong>ईशारा!</strong>
 असे केल्याने एखाद्या महत्वाच्या/लोकप्रीय लेखामध्ये अनपेक्षित आणि महत्वाचे बदल होऊ शकतात. तुम्हाला विनंती आहे की तुम्ही पूर्ण काळजी घ्या व होणारे परिणाम समजावून घ्या.
 जर तुम्हाला शंका असेल तर प्रचालक/प्रबंधकांशी संपर्क करा.",
 'movepagetalktext' => "संबंधित चर्चा पृष्ठ याबरोबर स्थानांतरीत होणार नाही '''जर:'''
@@ -2804,7 +2831,7 @@ $1',
 'move-watch' => 'स्रोत पान व लक्ष  पानांवर निगराणी ठेवा',
 'movepagebtn' => 'स्थानांतरण करा',
 'pagemovedsub' => 'स्थानांतरण यशस्वी',
-'movepage-moved' => '\'\'\'"$1" ला "$2" मथळ्याखाली स्थानांतरीत केले\'\'\'',
+'movepage-moved' => '<strong>"$1" ला "$2" मथळ्याखाली स्थानांतरीत केले</strong>',
 'movepage-moved-redirect' => 'एक पुनर्निर्देशन तयार केले आहे.',
 'movepage-moved-noredirect' => 'पुनर्निर्देशन तयार करणे दडपण्यात आले आहे.',
 'articleexists' => 'त्या नावाचे पृष्ठ अगोदरच अस्तित्वात आहे, किंवा तुम्ही निवडलेले नाव योग्य नाही.
@@ -2844,9 +2871,9 @@ $1',
 'imageinvalidfilename' => 'लक्ष्यसंचिका अवैध आहे',
 'fix-double-redirects' => 'मुळ शीर्षक दर्शविणारे फेरे अद्ययावत करा',
 'move-leave-redirect' => 'मागे एक पुनर्निर्देशन ठेवा',
-'protectedpagemovewarning' => "'''सूचना:''' हे पान सुरक्षित आहे. फक्त प्रशासकीय अधिकार असलेले सदस्य याच्यात बदल करू शकतात.",
-'semiprotectedpagemovewarning' => "'''सूचना:''' हे पान सुरक्षित आहे. फक्त नोंदणीकृत सदस्य याच्यात बदल करू शकतात.
-सरà¥\8dवाà¤\82त à¤¤à¤¾à¤\9cà¥\80 à¤¯à¤¾à¤¦à¥\80 à¤\96ालà¥\80 à¤¸à¤\82दरà¥\8dभासाठà¥\80 à¤¦à¤¿à¤²à¥\80 à¤\86हà¥\87:",
+'protectedpagemovewarning' => '<strong>ईशारा:</strong> हे पान सुरक्षित आहे. फक्त प्रशासकीय अधिकार असलेले सदस्य याच्यात बदल करू शकतात.',
+'semiprotectedpagemovewarning' => '<strong>नोंद:</strong> हे पान सुरक्षित आहे. फक्त नोंदणीकृत सदस्य याचे स्थानांतरण करू शकतात.
+सरà¥\8dवाà¤\82त à¤¤à¤¾à¤\9cà¥\80 à¤¨à¥\8bà¤\82द à¤\96ालà¥\80 à¤¸à¤\82दरà¥\8dभासाठà¥\80 à¤¦à¤¿à¤²à¥\80 à¤\86हà¥\87:',
 'move-over-sharedrepo' => '== संचिका अस्तित्वात आहे ==
 सामायिक भांडारात [[:$1]] नाव आधी पासून अस्तित्वात आहे. संचिका या नावावर स्थानांतरीत केल्यास सामायिक संचिकेवर चढेल.',
 'file-exists-sharedrepo' => 'धीरिकेसाठी तुम्ही निवडलेले नाव हे सामूहिक संग्राहलयात आधीपासून वापरात असल्याने कृपया दुसरे नाव निवडा.',
@@ -2860,8 +2887,8 @@ $1',
 तुम्ही नंतरच्या बाबतीत एखादा दुवा सुद्धा वापरू शकता, उदाहरणार्थ "[[{{MediaWiki:Mainpage}}]]" पाना करिता [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] .',
 'exportall' => 'सर्व पान एक्सपोर्ट करा',
 'exportcuronly' => 'संपूर्ण इतिहास नको,केवळ आताचे आवर्तन आंर्तभूत करा',
-'exportnohistory' => "----
-'''सूचना:''' या फॉर्मचा वापर करून पानाचा पूर्ण इतिहास निर्यात करण्याची सुविधा कार्यकुशलतेच्या कारणंनी अनुपल्ब्ढ ठेवली आहे.",
+'exportnohistory' => '----
+<strong>नोंद:</strong> या फॉर्मचा वापर करून पानाचा पूर्ण इतिहास निर्यात करण्याची सुविधा कार्यकुशलतेच्या कारणांनी अनुपलब्ध ठेवली आहे.',
 'exportlistauthors' => 'प्रत्येक पानासाठी योगदात्यांच्या  पूर्ण सूचीचा(यादीचा) समावेश करावा',
 'export-submit' => 'निर्यात करा',
 'export-addcattext' => 'वर्गीकरणातून पाने भरा:',
@@ -2878,7 +2905,7 @@ $1',
 'allmessagesdefault' => 'अविचल संदेश मजकूर',
 'allmessagescurrent' => 'सध्याचा मजकूर',
 'allmessagestext' => 'मीडियाविकी नामविश्वातील सर्व प्रणाली संदेशांची यादी',
-'allmessagesnotsupportedDB' => "हे पान संपादित करता येत नाही कारण'''\$wgUseDatabaseMessages''' मालवला आहे.",
+'allmessagesnotsupportedDB' => 'हे पान संपादित करता येत नाही कारण<strong>$wgUseDatabaseMessages</strong>अक्षम  आहे.',
 'allmessages-filter-legend' => 'गाळक',
 'allmessages-filter' => 'कस्टमायझेशन स्टेटनुसार गाळणी लावा :',
 'allmessages-filter-unmodified' => 'असंपादित',
@@ -2903,6 +2930,7 @@ $1',
 'thumbnail_image-type' => 'चित्रप्रकार समर्थित नाही',
 'thumbnail_gd-library' => '$1 जी.डी. ग्रंथालयाची बांधणी अपूर्ण आहे.',
 'thumbnail_image-missing' => 'संचिका सापडत नाही: $1',
+'thumbnail_image-failure-limit' => 'हे नखुले देण्यासाठी नुकतेच अनेक अयशस्वी प्रयत्न($1 किंवा अधिक) केल्या गेले आहेत.कृपया नंतर पुन्हा प्रयत्न करा.',
 
 # Special:Import
 'import' => 'पाने आयात करा',
@@ -3154,8 +3182,8 @@ $1',
 'nextdiff' => 'पुढील संपादन →',
 
 # Media information
-'mediawarning' => "'''सावधान''': या संचिकेत डंखी संकेत असू शकतो, जो वापरल्याने तुमच्या संचालन प्रणालीस नाजूक परिस्थितीस सामोरे जावे लागू शकते.",
-'imagemaxsize' => 'सà¤\82à¤\9aिà¤\95ा à¤µà¤°à¥\8dणन à¤ªà¤¾à¤¨à¤¾à¤\82वरà¥\80ल à¤\9aितà¥\8dराà¤\82ना à¤®à¤°à¥\8dयादा à¤\98ाला:',
+'mediawarning' => '<strong>सावधान</strong>: या संचिकेत डंखी संकेत असू शकतो, जो वापरल्याने तुमच्या संचालन प्रणालीस नाजूक परिस्थितीस सामोरे जावे लागू शकते.',
+'imagemaxsize' => 'सà¤\82à¤\9aिà¤\95ा à¤\86à¤\95ार à¤®à¤°à¥\8dयादा:<br /><em>(सà¤\82à¤\9aिà¤\95ा à¤µà¤°à¥\8dणन à¤ªà¤¾à¤¨à¤¾à¤\82साठà¥\80)</em>',
 'thumbsize' => 'इवलासा आकार:',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|पान|पाने}}',
 'file-info' => 'संचिकेचा आकार:$1,विविधामापमाईमप्रकार: $2',
@@ -3179,7 +3207,7 @@ $1',
 
 # Special:NewFiles
 'newimages' => 'नवीन संचिकांची यादी',
-'imagelisttext' => "खाली '''$1''' संचिका {{PLURAL:$1|दिली आहे.|$2 क्रमाने दिल्या आहेत.}}",
+'imagelisttext' => 'खाली <strong>$1</strong> संचिका {{PLURAL:$1|दिली आहे.|$2 क्रमाने दिल्या आहेत.}}',
 'newimages-summary' => 'हे विशेष पान शेवटी चढविलेल्या संचिका दर्शविते.',
 'newimages-legend' => 'गाळक',
 'newimages-label' => 'संचिकानाम (किंवा त्याचा भाग):',
@@ -3699,10 +3727,10 @@ $5
 'scarytranscludetoolong' => '[आंतरजालपत्ता खूप लांब आहे]',
 
 # Delete conflict
-'deletedwhileediting' => '”’सूचना:”’ तुम्ही संपादन सुरू केल्यानंतर हे पान वगळले गेले आहे.',
-'confirmrecreate' => "तुम्ही संपादन सुरू केल्यानंतर सदस्य [[User:$1|$1]] ([[User talk:$1|चर्चा]])ने हे पान पुढील कारणाने वगळले:
-: ''$2''
-कृपया हे पान खरेच पुन्हा निर्मित करून हवे आहे का हे निश्चित करा.",
+'deletedwhileediting' => '<strong>सूचना:</strong> तुम्ही संपादन सुरू केल्यानंतर हे पान वगळले गेले आहे.',
+'confirmrecreate' => 'तुम्ही संपादन सुरू केल्यानंतर सदस्य [[User:$1|$1]] ([[User talk:$1|चर्चा]])ने हे पान पुढील कारणाने वगळले:
+: <em>$2</em>
+कृपया हे पान खरेच पुन्हा निर्मित करून हवे आहे का हे निश्चित करा.',
 'confirmrecreate-noreason' => 'तुम्ही संपादन सुरू केल्यानंतर सदस्य [[User:$1|$1]] ([[User talk:$1|चर्चा]])ने हे पान  वगळले. तुम्हाला हे पान खरेच पुन्हा निर्मित करून हवे आहे का हे निश्चित करा.',
 'recreate' => 'पुनर्निर्माण',
 
@@ -4080,6 +4108,4 @@ $5
 'expand_templates_generate_xml' => 'XML चा पार्स (parse) वृक्ष दाखवा',
 'expand_templates_preview' => 'झलक',
 
-# Unknown messages
-'uploadinvalidxml' => 'अपभारीत संचिकेतील XML पार्स करता आले नाही.',
 );
index 0e9b35d..f44bb0a 100644 (file)
@@ -47,7 +47,6 @@ $namespaceGenderAliases = array();
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Ажедмӓшвлӓм ыдыралаш',
-'tog-justify' => 'Текстӹм ӹлӹштӓш кымдык тӧрлӓш',
 'tog-hideminor' => 'Изи тӧрлӹмӓшвлӓм у вашталтымашвлӓ лошты шӹлташ, анжыкташ агыл',
 'tog-hidepatrolled' => 'Патрулируйымы тӧрлӹмӓшвлӓм у вашталтымашвлӓ лошты шӹлташ, анжыкташ агыл',
 'tog-newpageshidepatrolled' => 'Патрулирыйымы ӹлӹшташвлӓм у вашталтымашвлӓ лошты шӹлташ, анжыкташ агыл',
@@ -56,10 +55,8 @@ $messages = array(
 'tog-numberheadings' => 'Артикль лӹмвлӓм автоматически нумеруяш',
 'tog-showtoolbar' => 'Текстӹм тӧрлӹмӹ годым кӱшӹл панельӹм анжыкташ (JavaScript)',
 'tog-editondblclick' => 'Ӹлӹшташвлӓм кок гӓнӓ темдӓл, тӧрлӓш (JavaScript)',
-'tog-editsection' => '«Тӧрлӓш» ажедмӓшӹм м цилӓ секцилӓнок анжыкташ',
 'tog-editsectiononrightclick' => 'Секцим тӧрлӹмӹ годым артикль лӹмӹм каля доно вургымлашты темдӓлӓш (JavaScript)',
-'tog-showtoc' => 'Кӧргӹштӹш лӹмвлӓм анжыкташ (3 гӹц шукырак артикль лӹмӓн ӹлӹштӓшвлӓштӹ)',
-'tog-rememberpassword' => 'Мӹньӹн шотыш нӓлмӹ сирмӓшем ти компьютерӹштӹ ӓштӓш (максимум $1 {{PLURAL:$1|кечы|кечы}})',
+'tog-rememberpassword' => 'Мӹньӹн шотыш нӓлмӹ сирмӓшем ти компьютерӹштӹ ӓштӓш (максимум $1 {{PLURAL:$1|1=кечы|кечы}})',
 'tog-watchcreations' => 'Мӹньӹн ӹштӹмӹ ӹлӹштӓшвлӓэм вӓнгӹмӹ списокыш пырташ',
 'tog-watchdefault' => 'Мӹньӹн вашталтымы ӹлӹштӓшвлӓэм вӓнгӹмӹ списокыш пырташ',
 'tog-watchmoves' => 'Мӹньӹн лӹмӹм вашталтымы ӹлӹштӓшвлӓэм вӓнгӹмӹ списокыш пырташ',
@@ -67,7 +64,6 @@ $messages = array(
 'tog-minordefault' => 'Пäлдӹртӹмӹ агыл тöрлӹмäшвлäм когонжок керäлеш шотлаш агыл',
 'tog-previewontop' => 'Текстӹм анзыц анжен лӓкмӹм тӧрлӹмӹ окня анзыкы шӹндӓш',
 'tog-previewonfirst' => 'Текстӹм анзыц анжен лӓкмӹм тӧрлӓш тӹнгӓлмӹ анзыц анжыкташ',
-'tog-nocache' => 'Ӹлӹштӓшвлӓн кешированим цӓрӓш',
 'tog-enotifwatchlistpages' => 'Мам вӓнгӹмӹ списокын ӹлӹштӓшӹштӹ вашталтымы, тӹдӹм эл. почта доно увертӓрӓш',
 'tog-enotifusertalkpages' => 'Мам персональный ӹлӹштӓшӹштӹ дискуссилӓн пачмы, тӹ вашталтмашым эл. почта доно увертӓрӓш',
 'tog-enotifminoredits' => 'Изи вашталтымашвлӓ гишӓнӓт эл. почта доно увертӓрӓш',
@@ -151,12 +147,12 @@ $messages = array(
 'dec' => 'дек',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Категори|Категоривлӓ}}',
+'pagecategories' => '{{PLURAL:$1|1=Категори|Категоривлӓ}}',
 'category_header' => 'Категори «$1» ӹлӹштӓшвлӓ',
 'subcategories' => 'Лӹвӓл категоривлӓ',
-'hidden-categories' => '{{PLURAL:$1|Шӹлтӹмӹ категори| Шӹлтӹмӹ категоривлӓ}}',
-'category-subcat-count' => '{{PLURAL:$2|Ти ÐºÐ°Ñ\82егоÑ\80иÑ\88Ñ\82Ó¹ Ð»Ð°Ñ\87 Ñ\82и Ð»Ó¹Ð²Ó\93л ÐºÐ°Ñ\82егоÑ\80и Ð²ÐµÐ»Ðµ.|{{PLURAL:$1|Ð\9bӹвÓ\93л ÐºÐ°Ñ\82егоÑ\80им $1 Ð°Ð½Ð¶Ñ\8bкÑ\82Ñ\8bмÑ\8b\9bӹвÓ\93л ÐºÐ°Ñ\82егоÑ\80ивлÓ\93м $1 Ð°Ð½Ð¶Ñ\8bкÑ\82Ñ\8bмÑ\8b\9bӹвÓ\93л ÐºÐ°Ñ\82егоÑ\80им $1}} анжыктымы $2.}}',
-'category-article-count' => '{{PLURAL:$2|Ти категориштӹ ик ӹлыштӓш веле. |{{PLURAL:$1|Анжыктымы$1 ӹлӹшташ|Анжыктымы$1 ӹлӹштӓшӹм|Анжыктымы$1 ӹлыштӓшвлӓм}}ти категори гӹц$2.}}',
+'hidden-categories' => '{{PLURAL:$1|1=Шӹлтӹмӹ категори| Шӹлтӹмӹ категоривлӓ}}',
+'category-subcat-count' => '{{PLURAL:$2|Ти ÐºÐ°Ñ\82егоÑ\80иÑ\88Ñ\82Ó¹ Ð»Ð°Ñ\87 Ñ\82и Ð»Ó¹Ð²Ó\93л ÐºÐ°Ñ\82егоÑ\80и Ð²ÐµÐ»Ðµ.|{{PLURAL:$1|Ð\9bӹвÓ\93л ÐºÐ°Ñ\82егоÑ\80им $1 Ð°Ð½Ð¶Ñ\8bкÑ\82Ñ\8bмÑ\8b\9bӹвÓ\93л ÐºÐ°Ñ\82егоÑ\80им $1|Ð\9bӹвÓ\93л ÐºÐ°Ñ\82егоÑ\80ивлÓ\93м $1 Ð°Ð½Ð¶Ñ\8bкÑ\82Ñ\8bмÑ\8b}} анжыктымы $2.}}',
+'category-article-count' => '{{PLURAL:$2|Ти категориштӹ ик ӹлыштӓш веле.|{{PLURAL:$1|Анжыктымы$1 ӹлӹшташ|Анжыктымы$1 ӹлыштӓшвлӓм|Анжыктымы$1 ӹлӹштӓшӹм}}ти категори гӹц$2.}}',
 'listingcontinuesabbrev' => '(пакыла)',
 
 'newwindow' => '(у окняшты)',
@@ -264,7 +260,7 @@ $messages = array(
 # Login and logout pages
 'yourname' => 'Сирӹшӹн лӹмжӹ:',
 'yourpassword' => 'Пароль:',
-'remembermypassword' => 'Ти компьютерӹштӹ мӹньӹн учетный сирмӓшем ӓштӓш (максимум $1 {{PLURAL:$1|кечы|кечы}})',
+'remembermypassword' => 'Ти компьютерӹштӹ мӹньӹн учетный сирмӓшем ӓштӓш (максимум $1 {{PLURAL:$1|1=кечы|кечы}})',
 'login' => 'Системыш сирӓлтдӓ',
 'nav-login-createaccount' => 'Коргӹшкӹ сирӓлтдӓ/регистрируялтда',
 'userlogin' => 'Кӧргӹшкӹ сирӓлтдӓ ӓль регистрируялтда',
@@ -313,12 +309,12 @@ $messages = array(
 'copyrightwarning' => 'Пуры лидӓ, ӓшӹшкӹдӓ пиштӹда! Цилӓ мам тӧрлӹмӹ, ушештӹмӹ дӓ вашталтымы, $2 (см. $1) негӹцеш ӹштӹмы семӹнь анжымы лиэш. Мам сиредӓ, тӹдӹм кычылтмы  дӓ тӧрлӹмӹ ваштареш ылыда гӹнь пуры лидӓ, тишӓк идӓ сирӹ.<br /> Тенгеок мам сиредӓ  тӹдӹн авторжы ылыда дӓ мам копируедӓ, тидӹ ирӹкӓн кычылтмашты лишӓшлык<br />.
 
 Автор пӓшӓлӓнжӹ публикаяш разрешеним пуде гӹнь, тишӓк идӓ сирӹ!!!',
-'templatesused' => '{{PLURAL:$1|Кычылтмы шаблон|Кычылтмы шаблонвлӓ}} ӹлӹштӓшӹн ти версиштӹжӹ:',
-'templatesusedpreview' => '{{PLURAL:$1|Кычылтмы шаблон|Кычылтмы шаблонвлӓ }} анзыц анжымы ӹлӹштӓшӹштӹ:',
+'templatesused' => '{{PLURAL:$1|1=Кычылтмы шаблон|Кычылтмы шаблонвлӓ}} ӹлӹштӓшӹн ти версиштӹжӹ:',
+'templatesusedpreview' => '{{PLURAL:$1|1=Кычылтмы шаблон|Кычылтмы шаблонвлӓ }} анзыц анжымы ӹлӹштӓшӹштӹ:',
 'template-protected' => '(ӹшӹклӓлтеш, перегӓлтеш)',
 'template-semiprotected' => '(лаштыкын-лыштыкын ӹшӹклӓлтеш)',
-'hiddencategories' => 'Ти ӹлӹштӓш $1 {{PLURAL:$1|шӹлтӹмӹ категориш|шӹлтӹмӹ  категоривлӓш|шӹлтӹмӹ категориш пыра}}:',
-'permissionserrorstext-withaction' => "Тидӹм (действим) ӹштӓш манын  тӓмдӓн разрешенидӓ уке«'''$2'''» семеш {{PLURAL:$1|ти ӓмӓл|ӓмӓлвлӓ доно}}:",
+'hiddencategories' => 'Ти ӹлӹштӓш $1 {{PLURAL:$1|шӹлтӹмӹ категориш|шӹлтӹмӹ категориш пыра|шӹлтӹмӹ  категоривлӓш}}:',
+'permissionserrorstext-withaction' => "Тидӹм (действим) ӹштӓш манын  тӓмдӓн разрешенидӓ уке«'''$2'''» семеш {{PLURAL:$1|1=ти ӓмӓл|ӓмӓлвлӓ доно}}:",
 
 # History pages
 'viewpagelogs' => 'Ти ӹлӹштӓшлӓн журналвлӓм анжыкташ',
@@ -354,7 +350,7 @@ $messages = array(
 'prevn' => '{{PLURAL:$1|анзылнышы $1|анзылнышывлӓ $1|анзылнышывлӓ $1}}',
 'nextn' => '{{PLURAL:$1|паштек кешӹ $1|паштек кешӹвлӓ $1|паштек кешӹвлӓ $1}}',
 'viewprevnext' => 'Анжен лӓктӓш ($1 {{int:pipe-separator}} $2) ($3)',
-'search-result-size' => '$1 ({{PLURAL:$2|$2 шамак|$2 шамаквлӓ|$2 шамак}})',
+'search-result-size' => '$1 ({{PLURAL:$2|$2 шамак|$2 шамак|$2 шамаквлӓ}})',
 'search-redirect' => '(вес вӓрӹш ажед колташ $1)',
 'search-section' => '(кӹдеж $1)',
 'search-suggest' => 'Анят тӓ $1 шанендӓ:',
@@ -384,11 +380,10 @@ $messages = array(
 'action-edit' => 'ти ӹлӹштӓшӹм тӧрлӹмӓш',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|вашталтымаш|вашталтымашвлӓ|вашталтымаш}}',
+'nchanges' => '$1 {{PLURAL:$1|вашталтымаш|вашталтымаш|вашталтымашвлӓ}}',
 'recentchanges' => 'У тӧрлӹмӓшвлӓ',
 'recentchanges-legend' => 'У тӧрлӹмашвлӓн настройкышты',
 'recentchanges-feed-description' => 'Ти лиништӹ Викиштӹш вашталтмашвлӓм анжалаш.',
-'rcnote' => "{{PLURAL:$1|Пӹтӓртӹш вашталтымаш'''$1''' вашталтымаш|Пӹтӓртыш '''$1''' вашталтымашвлӓ|Пӹтӓртӹш '''$1''' вашталтымашвлӓ}}  '''$2''' {{PLURAL:$2|кечӹштӹ|кечӹштӹ|кечӹвлӓштӹ}}, ти моментеш $5 $4.",
 'rclistfrom' => '$1 доно вашталтмашвлӓм анжыкташ',
 'rcshowhideminor' => '$1 изи тӧрлӹмаш',
 'rcshowhidebots' => '$1 бот',
@@ -430,7 +425,7 @@ $messages = array(
 'filehist-dimensions' => 'Объектӹн размержӹ',
 'filehist-comment' => 'Пӓлӹквлӓ',
 'imagelinks' => 'Файлышкы ажедмӓшвлӓ',
-'linkstoimage' => '{{PLURAL:$1|Паштек $1 вес ӹлӹштӓш ажедеш| $1 вес ӹлӹштӓшвлӓ ажедӹт|Вес  $1 ӹлӹштӓшвлӓ ти файлыш}} ажедӹт:',
+'linkstoimage' => '{{PLURAL:$1|Паштек $1 вес ӹлӹштӓш ажедеш|Вес  $1 ӹлӹштӓшвлӓ ти файлыш| $1 вес ӹлӹштӓшвлӓ ажедӹт}} ажедӹт:',
 'sharedupload' => 'Ти $1 файлым вес проектвлӓштӹ кычылташ лиэш',
 'uploadnewversion-linktext' => 'Файлын у версижӹм темӓш',
 
@@ -441,14 +436,14 @@ $messages = array(
 'statistics' => 'Статистика',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|байÑ\82|байÑ\82ан|байÑ\82влÓ\93}}',
-'nmembers' => '$1 {{PLURAL:$1|объект|объектӹн|объект}}',
+'nbytes' => '$1 {{PLURAL:$1|байÑ\82|байÑ\82влÓ\93|байÑ\82ан}}',
+'nmembers' => '$1 {{PLURAL:$1|объект|объект|объектӹн}}',
 'prefixindex' => 'Ӹлыштӓшвлӓн лӹмӹштӹн тӹнгӓлтӹш доно анжыктымы',
 'newpages' => 'У ӹлӹштӓшвлӓ',
 'move' => 'Вес лӹмӹм пуаш',
 'movethispage' => 'Ти ӹлыштӓшӹн лӹмжӹм вашталташ',
-'pager-newer-n' => '{{PLURAL:$1|урак|ураквлӓ|ураквлӓ гӹц}} $1',
-'pager-older-n' => '{{PLURAL:$1|тоштырак|тоштыраквлӓ|тоштыраквлӓ гӹц}} $1',
+'pager-newer-n' => '{{PLURAL:$1|урак|ураквлӓ гӹц|ураквлӓ}} $1',
+'pager-older-n' => '{{PLURAL:$1|тоштырак|тоштыраквлӓ гӹц|тоштыраквлӓ}} $1',
 
 # Book sources
 'booksources' => 'Книгӓн кӹлвлӓжӹ (источник)',
@@ -484,7 +479,7 @@ $messages = array(
 'watch' => 'Вӓнгӓш',
 'watchthispage' => 'Ти ӹлӹштӓшӹм вӓнгӓш',
 'unwatch' => 'Вӓнгӓш агыл',
-'watchlist-details' => 'Тӓмдӓн вӓнгӹмӹ списокыштыда $1 {{PLURAL:$1|ӹлӹштӓш|ӹлӹштӓшвлӓ|ӹлӹштӓш}}, Кӓнгӓшӹмӓш ӹлыштӓшвлӓ гӹц пасна.',
+'watchlist-details' => 'Тӓмдӓн вӓнгӹмӹ списокыштыда $1 {{PLURAL:$1|ӹлӹштӓш|ӹлӹштӓш|ӹлӹштӓшвлӓ}}, Кӓнгӓшӹмӓш ӹлыштӓшвлӓ гӹц пасна.',
 'wlshowlast' => 'Анжыкташ эртӹш  $1 час $2 кечӹвлӓн $3',
 'watchlist-options' => 'Вӓнгӹмӹ списокын настройкыжы',
 
@@ -516,7 +511,7 @@ $messages = array(
 'protect_expiry_old' => 'Пӹтӹм жепшӹ эртен',
 'protect-text' => "Тиштӹ тӓ ӹлӹштӓшӹн ӹшӹклӹмӹ кӱкшӹцшӹм анжал дӓ вашталтен кердӹдӓ'''$1'''.",
 'protect-locked-access' => "Тӓмдӓн учетный карточкыдан ӹшӹклӹмӓш кӱкшӹцӹм вашталташ манын ситӓлык праважы уке. Ти ӹлӹштӓшӹм шӹндӹдӓ'''$1''':",
-'protect-cascadeon' => 'Ти ӹлӹштӓшӹм {{PLURAL:$1|-шкы пыртымат, ӹшӹклӓлтеш, кыды ӱлнӹрӓк ылшы ӹлӹштӓшӹш|ӹлӹштӓшвлӓшкӹ ажедеш, кышкы }} каскадан ӹшӹклӹмашӹм шӹндӹмӹ. Тӓ ти ӹлӹштӓшӹн ӹшӹклӹмӹ кӱкшӹцшӹм вашталтен кердӹдӓ, но тидӹ каскадан ӹшӹклӹмашӹм ак тӹкӓл лиэш.',
+'protect-cascadeon' => 'Ти ӹлӹштӓшӹм {{PLURAL:$1|1=-шкы пыртымат, ӹшӹклӓлтеш, кыды ӱлнӹрӓк ылшы ӹлӹштӓшӹш|ӹлӹштӓшвлӓшкӹ ажедеш, кышкы }} каскадан ӹшӹклӹмашӹм шӹндӹмӹ. Тӓ ти ӹлӹштӓшӹн ӹшӹклӹмӹ кӱкшӹцшӹм вашталтен кердӹдӓ, но тидӹ каскадан ӹшӹклӹмашӹм ак тӹкӓл лиэш.',
 'protect-default' => 'Ӹшӹклӹмӹ агыл',
 'protect-fallback' => 'Разрешени келеш «$1»',
 'protect-level-autoconfirmed' => 'У дӓ регистрируялтшы агыл сирӹшӹвла гӹц ӹшӹклӓш',
@@ -559,7 +554,7 @@ $messages = array(
 'isredirect' => 'вес вӓре колтымым анжыктышы ӹлӹштӓш',
 'istemplate' => 'кӧргӹш пыртымы',
 'isimage' => 'изображени докы ажедмӓш',
-'whatlinkshere-prev' => '{{PLURAL:$1|анзылнышы|анзылнышывлӓ|анзылнышывла}} $1',
+'whatlinkshere-prev' => '{{PLURAL:$1|анзылнышы|анзылнышывла|анзылнышывлӓ}} $1',
 'whatlinkshere-next' => '{{PLURAL:$1|пакылашы|пакылашывлӓ|пакылашывлӓ}} $1',
 'whatlinkshere-links' => '← ажедмӓшвлӓ',
 'whatlinkshere-hideredirs' => '$1 вес вӓрӹш колтымаш',
index b669b60..d77acd1 100644 (file)
@@ -235,7 +235,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Kirimkan saya salinan e-mel yang saya hantar kepada pengguna lain',
 'tog-diffonly' => 'Jangan tunjukkan kandungan laman di bawah perbezaan',
 'tog-showhiddencats' => 'Tunjukkan kategori tersembunyi',
-'tog-noconvertlink' => 'Lumpuhkan penukaran tajuk pautan',
 'tog-norollbackdiff' => 'Abaikan perbezaan selepas melakukan pengunduran suntingan.',
 'tog-useeditwarning' => 'Beri saya amaran apabila saya meninggalkan sesebuah laman penyuntingan tanpa menyimpan perubahan.',
 'tog-prefershttps' => 'Sentiasa gunakan sambungan terlindung apabila log masuk',
@@ -362,7 +361,6 @@ $messages = array(
 'vector-action-protect' => 'Lindungi',
 'vector-action-undelete' => 'Batal hapus',
 'vector-action-unprotect' => 'Ubah perlindungan',
-'vector-simplesearch-preference' => 'Bolehkan bar carian ringkas (kulit Vector sahaja)',
 'vector-view-create' => 'Cipta',
 'vector-view-edit' => 'Sunting',
 'vector-view-history' => 'Lihat sejarah',
@@ -647,8 +645,6 @@ Jangan lupa untuk mengubah [[Special:Preferences|keutamaan anda di {{SITENAME}}]
 'gotaccountlink' => 'Log masuk',
 'userlogin-resetlink' => 'Lupa nama pengguna/kata laluan anda?',
 'userlogin-resetpassword-link' => 'Lupa kata laluan anda?',
-'helplogin-url' => 'Help:Log masuk',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Bantuan untuk log masuk]]',
 'userlogin-loggedin' => 'Anda sudah log masuk sebagai {{GENDER:$1|$1}}. Gunakan borang di bawah untuk log masuk sebagai pengguna lain.',
 'userlogin-createanother' => 'Buka satu lagi akaun',
 'createacct-join' => 'Isikan keterangan anda di bawah.',
@@ -1013,7 +1009,7 @@ Log penghapusan bagi laman ini dilampirkan di bawah untuk rujukan.',
 'invalid-content-data' => 'Data kandungan tidak sah',
 'content-not-allowed-here' => 'Kandungan "$1" tidak dibenarkan di halaman [[$2]]',
 'editwarning-warning' => 'Meninggalkan laman ini mungkin akan menyebabkan sebarang perubahan yang telah anda lakukan hilang.
-Jika anda sudah log masuk, anda boleh melumpuhkan amaran ini di bahagian "Menyunting" dalam keutamaan anda.',
+Jika anda sudah log masuk, anda boleh melumpuhkan amaran ini di bahagian "{{int:prefs-editing}}" dalam keutamaan anda.',
 'editpage-notsupportedcontentformat-title' => 'Format kandungan tidak disokong',
 'editpage-notsupportedcontentformat-text' => 'Format kandungan $1 tidak disokong oleh model kandungan $2.',
 
@@ -1049,6 +1045,7 @@ Argumen-argumen ini telah ditinggalkan.',
 'undo-success' => 'Suntingan ini boleh dibatalkan. Sila semak perbandingan di bawah untuk mengesahkan bahawa anda betul-betul mahu melakukan tindakan ini, kemudian simpan perubahan tersebut.',
 'undo-failure' => 'Suntingan tersebut tidak boleh dibatalkan kerana terdapat suntingan pertengahan yang bercanggah.',
 'undo-norev' => 'Suntingan tersebut tidak boleh dibatalkan kerana tidak wujud atau telah dihapuskan.',
+'undo-nochange' => 'Suntingan itu nampaknya sudah dibatalkan.',
 'undo-summary' => 'Membatalkan semakan $1 oleh [[Special:Contributions/$2|$2]] ([[User talk:$2|Perbincangan]])',
 'undo-summary-username-hidden' => 'Buat asal semakan $1 oleh pengguna tersembunyi',
 
@@ -1134,8 +1131,6 @@ Anda boleh melihat perbezaan ini; butiran boleh didapati di [{{fullurl:{{#Specia
 'revdelete-show-file-submit' => 'Ya',
 'revdelete-selected' => "'''{{PLURAL:$2|Versi|Versi-versi}} '''$1''' yang dipilih:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Peristiwa|Peristiwa-peristiwa}} log yang dipilih:'''",
-'revdelete-text' => "'''Semakan dan peristiwa yang dihapuskan akan tetap muncul dalam sejarah laman dan log, tetapi kandungannya tidak boleh diakses awam.'''
-Pentadbir {{SITENAME}} boleh melihat kandungan tersebut dan menyahhapuskannya semula melalui laman ini melainkan mempunyai batasan.",
 'revdelete-confirm' => 'Sila sahkan bahawa anda bertujuan melakukan ini, bahawa anda faham akibatnya, dan anda melakukannya menurut [[{{MediaWiki:Policy-url}}| polisi]].',
 'revdelete-suppress-text' => "Sekatan seharusnya digunakan '''hanya''' untuk kes-kes berikut:
 * maklumat yang mungkin berunsur fitnah
@@ -1231,6 +1226,8 @@ Sila pastikan bahawa perubahan ini akan mengekalkan kesinambungan sejarah laman.
 'showhideselectedversions' => 'Tunjukkan/sorokkan versi yang dipilih',
 'editundo' => 'batal',
 'diff-empty' => '(Tiada perbezaan)',
+'diff-multi-sameuser' => '({{PLURAL:$1|Satu semakan pertengahan|$1 semakan pertengahan}} oleh pengguna yang sama tidak dipaparkan)',
+'diff-multi-otherusers' => '({{PLURAL:$1|Satu semakan pertengahan|$1 semakan pertengahan}} oleh {{PLURAL:$2|seorang pengguna lain|$2 orang pengguna}} tidak dipaparkan)',
 'diff-multi-manyusers' => '($1 {{PLURAL:$1|semakan pertengahan|semakan pertengahan}} oleh lebih daripada $2 {{PLURAL:$2|pengguna|pengguna}} tidak dipaparkan)',
 'difference-missing-revision' => '{{PLURAL:$2|Satu semakan|$2 semakan}} bagi perbezaan ini ($1) tidak ditemui.
 
@@ -1251,7 +1248,8 @@ Butirannya boleh didapati di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGEN
 'shown-title' => 'Papar $1 hasil setiap laman',
 'viewprevnext' => 'Lihat ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "* Laman '''[[$1]]'''",
-'searchmenu-new' => "'''Cipta laman \"[[:\$1]]\" di wiki ini!'''",
+'searchmenu-new' => '<strong>Cipta laman "[[:$1]]" di wiki ini!</strong>
+{{PLURAL:$2|0=|Lihat juga halaman yang ditemui dalam pencarian anda.|Lihat juga hasil pencarian yang ditemui.}}',
 'searchprofile-articles' => 'Laman kandungan',
 'searchprofile-project' => 'Laman bantuan dan projek',
 'searchprofile-images' => 'Multimedia',
@@ -1277,6 +1275,7 @@ Butirannya boleh didapati di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGEN
 'searchrelated' => 'berkaitan',
 'searchall' => 'semua',
 'showingresults' => "Yang berikut ialah '''$1''' hasil bermula daripada yang {{PLURAL:$2|pertama|ke-'''$2'''}}.",
+'showingresultsinrange' => 'Yang berikut adalah {{PLURAL:$1|<strong>satu</strong> hasil|sebanyak <strong>$1</strong> hasil}} dalam julat #<strong>$2</strong> hingga #<strong>$3</strong>.',
 'showingresultsnum' => "Yang berikut ialah '''$3''' hasil bermula daripada yang {{PLURAL:$2|pertama|ke-'''$2'''}}.",
 'showingresultsheader' => "{{PLURAL:$5|Keputusan '''$1''' daripada '''$3'''|Keputusan '''$1 - $2''' daripada '''$3'''}} untuk '''$4'''",
 'search-nonefound' => 'Tiada hasil yang sepadan dengan pertanyaan.',
@@ -1720,6 +1719,7 @@ Jika anda memiliki imej ini dalam leraian penuh, sila muat naik fail tersebut. J
 'uploaddisabledtext' => 'Ciri muat naik fail dimatikan.',
 'php-uploaddisabledtext' => 'Pemuatnaikan fail PHP dilumpuhkan. Sila semak tetapan file_uploads.',
 'uploadscripted' => 'Fail ini mengandungi kod HTML atau skrip yang boleh disalahtafsirkan oleh pelayar web.',
+'uploadinvalidxml' => 'XML dalam fail yang dimuat naik ini tidak dapat dihuraikan.',
 'uploadvirus' => 'Fail tersebut mengandungi virus! Butiran: $1',
 'uploadjava' => 'Fail ini ialah fail ZIP yang mengandungi fail .class Java.
 Memuat naik fail Java tidak dibenarkan, kerana boleh menyebabkan sekatan keselamatan dipintas.',
@@ -2277,6 +2277,7 @@ Perubahan-perubahan pada halaman ini dan halaman perbualannya pada masa akan dat
 'watchmethod-list' => 'menyemak suntingan terkini pada laman-laman yang dipantau',
 'watchlistcontains' => 'Terdapat $1 laman dalam senarai pantau anda.',
 'iteminvalidname' => "Terdapat masalah dengan item '$1', nama tidak sah...",
+'wlnote2' => 'Yang berikut adalah perubahan dalam {{PLURAL:$1|sejam|<strong>$1</strong> jam}} yang lepas, setakat $2, $3.',
 'wlshowlast' => 'Tunjukkan $1 jam / $2 hari yang lalu / $3.',
 'watchlist-options' => 'Pilihan senarai pantau',
 
@@ -2641,7 +2642,7 @@ dirosakkan).',
 'change-blocklink' => 'ubah sekatan',
 'contribslink' => 'sumb.',
 'emaillink' => 'hantar e-mel',
-'autoblocker' => 'Disekat secara automatik kerana baru-baru ini alamat IP anda digunakan oleh "[[User:$1|$1]]". Sebab sekatan $1 ialah: "$2"',
+'autoblocker' => 'Disekat secara automatik kerana alamat IP anda baru digunakan oleh "[[User:$1|$1]]". Sebab yang diberi adalah: "$2"',
 'blocklogpage' => 'Log sekatan',
 'blocklog-showlog' => 'Pengguna ini pernah disekat sebelum ini. Log sekatan disediakan di bawah sebagai rujukan:',
 'blocklog-showsuppresslog' => 'Pengguna ini pernah disekat dan tersembunyi sebelum ini.
@@ -2836,6 +2837,7 @@ Sila lawat [https://www.mediawiki.org/wiki/Localisation Penyetempatan MediaWiki]
 'allmessages-prefix' => 'Tapis berdasarkan awalan:',
 'allmessages-language' => 'Bahasa:',
 'allmessages-filter-submit' => 'Pergi',
+'allmessages-filter-translate' => 'Terjemah',
 
 # Thumbnails
 'thumbnail-more' => 'Besarkan',
@@ -2886,7 +2888,7 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 'importuploaderrortemp' => 'Fail import tidak dapat dimuat naik kerana tiada direktori sementara.',
 'import-parse-failure' => 'Gagal menghurai fail XML yang diimport',
 'import-noarticle' => 'Tiada laman untuk diimport!',
-'import-nonewrevisions' => 'Semua semakan telah pun diimport sebelum ini.',
+'import-nonewrevisions' => 'Tiada semakan yang diimport (semuanya sama ada sudah sedia ada atau dilangkau disebabkan ralat).',
 'xml-error-string' => '$1 pada baris $2, lajur $3 (bait $4): $5',
 'import-upload' => 'Muat naik data XML',
 'import-token-mismatch' => 'Data sesi telah hilang. Sila cuba lagi.',
@@ -2897,6 +2899,7 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 'import-error-special' => 'Laman "$1" tidak diimport kerana ia tergolong dalam ruang nama khas yang tidak membenarkan laman.',
 'import-error-invalid' => 'Laman "$1" tidak diimport kerana namanya tidak sah.',
 'import-error-unserialize' => 'Semakan $2 dari halaman "$1" tidak dapat dinyahsirikan. Semakan ini dilaporkan telah menggunakan model kandungan $3 yang disirikan sebagai $4.',
+'import-error-bad-location' => 'Semakan $2 yang menggunakan model kandungan $3 tidak boleh disimpan pada "$1" di wiki ini kerana model itu tidak disokong pada halaman tersebut.',
 'import-options-wrong' => '{{PLURAL:$2|Pilihan|Pilihan-pilihan}} salah: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Halaman akar yang dinyatakan adalah tidak sah.',
 'import-rootpage-nosubpage' => 'Ruang nama "$1" halaman akar tidak membenarkan subhalaman.',
@@ -4067,6 +4070,4 @@ Sebenarnya, ia mengembangkan segalanya dalam tanda kurung panah berganda.',
 'expand_templates_generate_rawhtml' => 'Paparkan HTML mentah',
 'expand_templates_preview' => 'Pralihat',
 
-# Unknown messages
-'uploadinvalidxml' => 'XML dalam fail yang dimuat naik ini tidak dapat dihuraikan.',
 );
index a312ca6..a93249e 100644 (file)
@@ -436,7 +436,6 @@ $messages = array(
 'vector-action-protect' => 'Ipproteġi',
 'vector-action-undelete' => 'Irkupra',
 'vector-action-unprotect' => 'Biddel il-protezzjoni',
-'vector-simplesearch-preference' => 'Ippermetti suġġerimenti għat-tfittxija avvanzata (disponibbli biss għall-aspett grafiku Vector)',
 'vector-view-create' => 'Oħloq',
 'vector-view-edit' => 'Editja',
 'vector-view-history' => 'Ara l-kronoloġija',
@@ -689,8 +688,6 @@ Kun af li ċerti paġni jistgħu jkomplu jidhru bħallikieku l-illogjar 'l barra
 'gotaccountlink' => 'Idħol',
 'userlogin-resetlink' => 'Insejt kif tidħol fil-kont tiegħek?',
 'userlogin-resetpassword-link' => 'Irrisettja l-password',
-'helplogin-url' => 'Help:Kif tirreġistra',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Għajnuna kif tillogja]]',
 'createacct-join' => 'Daħħal l-informazzjoni tiegħek hawn taħt.',
 'createacct-emailrequired' => 'Indirizz elettroniku',
 'createacct-emailoptional' => 'Indirizz elettroniku (fakultattiv)',
@@ -1138,8 +1135,6 @@ Bħala amministratur inti xorta waħda tista' tarah dan il-konfront; ikkonsulta
 'revdelete-show-file-submit' => 'Iva',
 'revdelete-selected' => "'''{{PLURAL:$2|Reviżjoni magħżula|Reviżjonijiet magħżula}} ta' [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Avveniment tar-reġistru magħżul|Avvenimenti tar-reġistri magħżula}}:'''",
-'revdelete-text' => "'''Reviżjonijiet u azzjonijiet imħassra xorta waħda jidhru fil-kronoloġija tal-paġna, filwaqt li partijiet tal-kontenut jiġu inaċċessibli għall-pubbliku.'''
-L-amminstraturi l-oħrajn fuq {{SITENAME}} xorta jkunu jistgħu jidħlu fuq il-kontenut moħbi u jistgħu jirkuprawh minn din l-istess interfaċċa, sakemm restrizzjonijiet ulterjuri jiġu definiti.",
 'revdelete-confirm' => 'Jekk jogħġbok ikkonferma li dan hu dak li tixtieq tagħmel, li tifhem il-konsegwenzi, u li qed tagħmel dan skont il-[[{{MediaWiki:Policy-url}}|politika]].',
 'revdelete-suppress-text' => "It-trażżin għandu jintuża '''biss''' għall-każijiet segwenti:
 * Potenzjal ta' kontenut libelluż
index f6f056a..4cd2a50 100644 (file)
@@ -80,7 +80,6 @@ $magicWords = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Sublinhar lhigaçones:',
-'tog-justify' => 'Justeficar parágrafos',
 'tog-hideminor' => 'Scunder eidiçones mais pequeinhas nas redadeiras altaraçones',
 'tog-hidepatrolled' => 'Scunder eidiçones patrulhadas nas redadeiras altaraçones',
 'tog-newpageshidepatrolled' => 'Scunder  páiginas patrulhadas na lhista de páiginas nuobas',
@@ -89,9 +88,7 @@ $messages = array(
 'tog-numberheadings' => 'Outo-numerar cabeçalhos',
 'tog-showtoolbar' => "Amostrar barra d'eidiçon (JavaScrit)",
 'tog-editondblclick' => 'Eiditar páiginas quando houbir un clique duplo (JavaScrit)',
-'tog-editsection' => "Possiblitar l'eidiçon de cachos cun lhigaçones [eiditar]",
 'tog-editsectiononrightclick' => "Posseblitar l'eidiçon de cachos por clique cul boton dreito ne l títalo de la seçon (JavaScrit)",
-'tog-showtoc' => 'Amostrar índice (para páiginas cun mais de trés cachos)',
 'tog-rememberpassword' => 'Recordar la mie palabra-chabe antre sessones (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'Ajuntar las páiginas que you criar a las minhas páiginas begiadas',
 'tog-watchdefault' => 'Ajuntar las páiginas que you eiditar a las minhas páiginas begiadas',
@@ -533,7 +530,6 @@ Legenda: (atu) = defrénças de la berson atual,
 'compareselectedversions' => 'Cumparar las bersones marcadas',
 'showhideselectedversions' => 'Amostrar/ocultar bersones selecionadas',
 'editundo' => 'çfazer',
-'diff-multi' => '({{PLURAL:$1|ua eidiçon antermédia nun stá a ser amostrada|$1 eidiçones antermédias nun stan a ser amostradas}}.)',
 
 # Search results
 'searchresults' => 'Resultados de la percura',
index 3e3c459..f2d1008 100644 (file)
@@ -220,7 +220,6 @@ $messages = array(
 'vector-action-protect' => 'ထိမ်း​သိမ်း​ပါ​',
 'vector-action-undelete' => 'မဖျက်တော့ရန်',
 'vector-action-unprotect' => 'ကာကွယ်ခြင်းကို ပြောင်းလဲရန်',
-'vector-simplesearch-preference' => 'ရိုးရှင်းသော ရှာဖွေမှုဘားကို အသုံးပြုရန် (Vector skin သာ)',
 'vector-view-create' => 'စတင်ရေးသားရန်',
 'vector-view-edit' => 'ပြင်ရန်',
 'vector-view-history' => 'ရာဇဝင်ကြည့်ရန်',
index 2327fe7..4d343ad 100644 (file)
@@ -197,7 +197,7 @@ $messages = array(
 'tog-showtoolbar' => 'Невтемс кедьёнкслазнэнть сёрмадома шкасто',
 'tog-editondblclick' => 'Кавксть лепштязь совамс сёрмадовксонь витнеме-петнеме',
 'tog-editsectiononrightclick' => 'Витнемс секциятнень-пелькстнэнь, лепштямс сёрмадовксонть лемензэ лангс чеерень витьёнсе повнесэ',
-'tog-rememberpassword' => 'Ð\9bедÑ\81Ñ\82емÑ\81 Ñ\81овамо Ð²Ð°Ð»Ð¾Ð¼ Ñ\82е Ð±Ñ\80авзеÑ\80Ñ\81Ñ\8dнÑ\82Ñ\8c (Ñ\81еÑ\85 ÐºÑ\83ваÑ\82Ñ\8c $1 {{PLURAL:$1|1=чи|чить}})',
+'tog-rememberpassword' => 'Ð\9aиÑ\80демÑ\81 Ð¼ÐµÐ»Ñ\8cÑ\81Ñ\8d Ñ\81овамо Ð²Ð°Ð»Ð¾Ð¼ Ñ\82е Ð±Ñ\80авзеÑ\80Ñ\81Ñ\8dнÑ\82Ñ\8c (Ñ\81еÑ\85 ÐºÑ\83ваÑ\82Ñ\8c $1 {{PLURAL:$1|чи|чить}})',
 'tog-watchcreations' => 'Совавтомс ванома лемрисьмезэнь монь теевть лопатнень ды сень, мезе йовкстан',
 'tog-watchdefault' => 'Совавтомс монь витевть лопатнень ванома лемрисьмезэнь',
 'tog-watchmoves' => 'Совавтомс монь одов лемдявт лопатнень-керьмазтнэнь ванома лемрисьмезэнь',
@@ -300,19 +300,19 @@ $messages = array(
 'december-date' => 'Ацамков $1',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|1=Категория|Категорият}}',
+'pagecategories' => '{{PLURAL:$1|Категория|Категорият}}',
 'category_header' => '"$1" категориясонть лопатне',
 'subcategories' => 'Алкскатегорият',
 'category-media-header' => '"$1" категориясонть медиясь',
 'category-empty' => "''Те категориясонть арасть лопат-медият.''",
-'hidden-categories' => '{{PLURAL:$1|1=Кекшень категория|Кекшень категорият}}',
+'hidden-categories' => '{{PLURAL:$1|Кекшезь категория|Кекшезь категорият}}',
 'hidden-category-category' => 'Кекшень категорият',
-'category-subcat-count' => '{{PLURAL:$2|Те категориясонть вейкине явкс категория.|Те категориясонть  {{PLURAL:$1|1=явкс категория|$1 явкс категорият}}, $2 -тнень эйстэ.}}',
-'category-subcat-count-limited' => 'Те категориясонть {{PLURAL:$1|1=алкс категория|$1 алкс категорият}}.',
-'category-article-count' => '{{PLURAL:$2|Те категориясонть вейкине лопась вана косо.|{{PLURAL:$1|1=Те лопась кандови|$1 Не лопатне кандовить}} те категориянтень, категориясонть лопатнеде весемезэ $2.}}',
-'category-article-count-limited' => '{{PLURAL:$1|1=Те лопась|$1 Не лопатне}} те категориясонть.',
-'category-file-count' => '{{PLURAL:$2|Те категориясонть вейкине файлась вана косо.|{{PLURAL:$1|1=Те файлась кандови|$1 Не файлатне кандовить}} те категориянтень, категориясонть файлатнеде весемезэ $2.}}',
-'category-file-count-limited' => '{{PLURAL:$1|1=Те файлась|$1 Не файлатне}} вановиця категориянтень кандови.',
+'category-subcat-count' => '{{PLURAL:$2|Те категориясонть вейкине явкс категория.|Те категориясонть  {{PLURAL:$1|явкс категория|$1 явкс категорият}}, $2 -тнень эйстэ.}}',
+'category-subcat-count-limited' => 'Те категориясонть {{PLURAL:$1|явкс категория|$1 явкс категорият}}.',
+'category-article-count' => '{{PLURAL:$2|Те категориясонть вейкине лопась вана косо.|{{PLURAL:$1|Те лопась кандови|$1 Неть лопатне кандовить}} те категориянтень, категориясонть лопатнеде весемезэ $2.}}',
+'category-article-count-limited' => '{{PLURAL:$1|Те лопась|Неть $1 лопатне}} те категориясонть.',
+'category-file-count' => '{{PLURAL:$2|Те категориясонть вейкине файлась вана косо.|{{PLURAL:$1|Те файлась кандови|Неть $1 файлатне кандовить}} те категориянтень, категориясонть файлатнеде весемезэ $2.}}',
+'category-file-count-limited' => '{{PLURAL:$1|Те файлась|Неть $1 файлатне}} вановиця категориянтень кандови.',
 'listingcontinuesabbrev' => 'поладксозо моли',
 'index-category' => 'Индекс марто лопатне',
 'noindex-category' => 'Индекстэме лопатне',
@@ -547,7 +547,7 @@ $1',
 'yourpasswordagain' => 'Омбоцеде сёрмадык кирдицянь леметь:',
 'createacct-yourpasswordagain' => 'Кемекстык салававалонть',
 'createacct-yourpasswordagain-ph' => 'Совавтык салававалонть одов',
-'remembermypassword' => 'Ð\9bедÑ\81Ñ\82емÑ\81 Ñ\81овамом Ñ\82е Ð±Ñ\80авзеÑ\80Ñ\81Ñ\8dнÑ\82Ñ\8c (Ñ\81еÑ\85 ÐºÑ\83ваÑ\82Ñ\8c $1 {{PLURAL:$1|1=чи|чить}})',
+'remembermypassword' => 'Ð\9aиÑ\80демÑ\81 Ð¼ÐµÐ»Ñ\8cÑ\81Ñ\8d Ñ\81овамо Ð²Ð°Ð»Ð¾Ð¼ Ñ\82е Ð±Ñ\80авзеÑ\80Ñ\81Ñ\8dнÑ\82Ñ\8c (Ñ\81еÑ\85 ÐºÑ\83ваÑ\82Ñ\8c $1 {{PLURAL:$1|чи|чить}})',
 'userlogin-remembermypassword' => 'Кирдемизь совавтозекс',
 'userlogin-signwithsecure' => 'Нолдак тевс ванстозь сюлмавкс',
 'yourdomainname' => 'Эсеть доменэть:',
@@ -599,7 +599,7 @@ $1',
 'passwordtooshort' => 'Совамо валонть кувалмозо  {{PLURAL:$1|1=улезэ 1 тешкс| улезт $1 тешкст}}, аволь седе аламо.',
 'password-name-match' => 'Салава валонтень эряви явовомс теицянь леметь эйстэ.',
 'password-login-forbidden' => 'Те теицянь лемесь ды салававалось а мерить нолдамс тевс.',
-'mailmypassword' => 'Ð\9aÑ\83Ñ\87Ñ\82 Ðµ-Ñ\81Ñ\91Ñ\80маÑ\81о Ð¾Ð´ салававал',
+'mailmypassword' => 'Ð\9eдов Ð»Ð°Ð´Ñ\8fмÑ\81 салававал',
 'passwordremindertitle' => '{{SITENAME}} туртов акуватень од совамо вал',
 'passwordremindertext' => 'Кие-бути (кода неяви тон IP-тешксстэнть $1) вешсь,<br />
 кедьстэнек кучомс теицянь од совамо вал {{SITENAME}} ($4) сайтс совамга.<br />
@@ -745,12 +745,12 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 '''ИЛЯ МАКСО ВАНСТОНЬ ВИДЕЧИСЭ ЛОМАНЕНЬ ВАЖОДЕМАНТЬ АПАК КЕВКСТНЕ!'''",
 'titleprotectedwarning' => "'''ВАНОК:  Те лопась сёлгозь, сонзэ шкамга-теемга [[Special:ListGroupRights|башка видечыть]] эрявить.'''
 Журналонь меельсе сёрмадовксось максозь ало, эрявиндеряй сонзэ ваномс.",
-'templatesused' => 'Те лопасонть тевс нолдазь {{PLURAL:$1|1=лопа парцун|лопа парцунт}}:',
+'templatesused' => 'Те лопасонть тевс нолдазь {{PLURAL:$1|лопапарцун|лопапарцунт}}:',
 'templatesusedpreview' => 'Те икелькс вановкссонть тевс нолдазь  {{PLURAL:$1|1=лопа парцун|лопа парцунт}}:',
 'templatesusedsection' => 'Те пелькссэнть тевс нолдазь {{PLURAL:$1|1=лопа парцунось|лопа парцунтнэ}}:',
 'template-protected' => '(ванстозь)',
 'template-semiprotected' => '(пельс ванстозь)',
-'hiddencategories' => 'Те лопась совавтови {{PLURAL:$1|1=кекшень 1 категорияс|кекшень $1 категорияс}}:',
+'hiddencategories' => 'Те лопась совавтови {{PLURAL:$1|кекшень 1 категорияс|кекшень $1 категорияс}}:',
 'nocreatetext' => 'Те {{SITENAME}} лопасонть пирязь од лопань теемась. Тонь ули мелеть велявтомс удалов ды  питнемензе-витнемензе улиця лопанть, али [[Special:UserLogin|совамс али теемс од совама]].',
 'nocreate-loggedin' => 'Тонеть а мерить теемс-шкамс од лопат.',
 'permissionserrorstext' => 'Тонеть а мерить теемс тень, вана {{PLURAL:$1|1=тувталось|тувталтнэ}}:',
@@ -867,12 +867,12 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'notextmatches' => 'Лопанть сёрмадсткэнзэ марто вейтьс прамот арасть',
 'prevn' => 'седе икелень {{PLURAL:$1|$1}}',
 'nextn' => 'сы {{PLURAL:$1|$1}}',
-'prevn-title' => 'Седе икелень $1 {{PLURAL:$1|1=савкс|савкст}}',
-'nextn-title' => 'Седе меелень $1 {{PLURAL:$1|1=савкс|савкст}}',
-'shown-title' => 'Невтть лопазонзо $1 {{PLURAL:$1|1=савкс|савкст}}',
+'prevn-title' => 'Седе икелень $1 {{PLURAL:$1|савкс|савкст}}',
+'nextn-title' => 'Сыця $1 {{PLURAL:$1|савкс|савкст}}',
+'shown-title' => 'Невтть лопазонзо $1 {{PLURAL:$1|савкс|савкст}}',
 'viewprevnext' => 'Ванномс ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''Те викисэнть ули \"[[\$1]]\" лем марто лопа'''",
-'searchmenu-new' => "'''Шкик \"[[:\$1]]\" лопанть те викисэнть!'''",
+'searchmenu-new' => '<strong>Шкик "[[:$1]]" лопанть те викисэнть!</strong> {{PLURAL:$2|0=|Ваномс лопантькак, конань муик вешнемасонть.|Ваномс савкстнэньгак, конатне вешнемасонть муевсть.}}',
 'searchprofile-articles' => 'Потмокс лопат',
 'searchprofile-project' => 'Лезкс ды проекттэ лопат',
 'searchprofile-images' => 'Мультимедия',
@@ -883,7 +883,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'searchprofile-images-tooltip' => 'Вешнемс файлат',
 'searchprofile-everything-tooltip' => 'Вешнемс весе лопатнева (кортнема лопатневаяк)',
 'searchprofile-advanced-tooltip' => 'Вешнемс башка теезь лемпотмотнестэ',
-'search-result-size' => '$1 ({{PLURAL:$2|1=1 вал|$2 валт}})',
+'search-result-size' => '$1 ({{PLURAL:$2|1 вал|$2 валт}})',
 'search-result-category-size' => '{{PLURAL:$1|1=1 совицязо|$1 совицянзо}} ({{PLURAL:$2|1=1 явкскатегориязо|$2 явкскатегориянзо}}, {{PLURAL:$3|1=1 файла|$3 файлат}})',
 'search-redirect' => '(йутавтт $1-с)',
 'search-section' => '(пелькс $1)',
@@ -895,7 +895,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'searcheverything-enable' => 'Вешнемс весе лем потмотнестэ',
 'searchrelated' => 'малавикс',
 'searchall' => 'весе',
-'showingresultsheader' => "{{PLURAL:$5|1=муевсь '''$1''' вана '''$3'''-тнень эйстэ|муевсть '''$1 - $2''' '''$3'''-тнень эйстэ}} '''$4''' вешнеманть лангс",
+'showingresultsheader' => '{{PLURAL:$5|муевсь <strong>$1</strong> вана <strong>$3</strong>-тнень эйстэ|муевсть <strong>$1 - $2</strong> <strong>$3</strong>-тнень эйстэ}} <strong>$4</strong> вешнеманть лангс',
 'search-nonefound' => 'Те вешнема лангс мезеяк эзь муеве.',
 'powersearch-legend' => 'Седе келейстэ вешнема',
 'powersearch-ns' => 'Вешнемс не лемпотмотнестэ:',
@@ -1076,7 +1076,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'action-sendemail' => 'кучомс е-сёрмат',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|1=полавтнема|полавтнемат}}',
+'nchanges' => '$1 {{PLURAL:$1|полавтнема|полавтнемат}}',
 'recentchanges' => 'Чыяконь полавтнемат-лиякстомтомат',
 'recentchanges-legend' => 'Улконь полавтнематнень аравтнемаст',
 'recentchanges-summary' => '',
@@ -1090,7 +1090,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'rclistfrom' => 'Невтемс од витьнематнень $1-нть эйстэ саезь.',
 'rcshowhideminor' => '$1 апокшкэ витнемат-петнемат',
 'rcshowhidebots' => '$1 ботт',
-'rcshowhideliu' => '$1 Ñ\81овазÑ\8c Ñ\83Ñ\81Ñ\8cкекиÑ\80дийÑ\82не',
+'rcshowhideliu' => '$1 Ñ\81овавÑ\82озÑ\8c Ñ\82еиÑ\86Ñ\8fÑ\82',
 'rcshowhideanons' => '$1 лемтеме теицят',
 'rcshowhidepatr' => '$1 кона патрульсэ витьни-петни',
 'rcshowhidemine' => '$1 мезе мон витнинь-петнинь',
@@ -1223,7 +1223,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'filehist-comment' => 'Мельполадкс',
 'filehist-missing' => 'Файлась арась',
 'imagelinks' => 'Ков файлась нолдави тевс',
-'linkstoimage' => 'Те файланть марто сюлмавозь вана {{PLURAL:$1|1=истямо сюлмавома пене|$1 истят сюлмавома пенеть}}:',
+'linkstoimage' => 'Те файланть марто сюлмавозь вана {{PLURAL:$1|истямо сюлмавома пене|$1 истят сюлмавома пенеть}}:',
 'nolinkstoimage' => 'Арась вейкеяк лопа, кона сюлмавови те файланть марто.',
 'sharedupload' => 'Те файлась саезь "$1" файлань пусмосто, сон нолдави тевс лия проектсэяк.',
 'sharedupload-desc-here' => 'Те файлась сась истямо $1 таркасто, паряк сон нолдави тевс лия проектсэ.
@@ -1304,10 +1304,10 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'fewestrevisions' => 'Лопат, конатнесэ весемеде аламо лиякстомтомат',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|1=байт|байтт}}',
+'nbytes' => '$1 {{PLURAL:$1|байт|байтт}}',
 'ncategories' => '$1 {{PLURAL:$1|1=категория|категорият}}',
 'nlinks' => '$1 {{PLURAL:$1|невтевкс|невтевкснедэ|невтевкст}}',
-'nmembers' => '$1 {{PLURAL:$1|1=теиця|теицятне}}',
+'nmembers' => 'куронь $1 {{PLURAL:$1|ломань|ломанть}}',
 'nrevisions' => '$1 {{PLURAL:$1|1=лиякстомтома|лиякстомтомат}}',
 'nviews' => '$1 {{PLURAL:$1|1=ванома потмо|ванома потмот}}',
 'lonelypages' => 'Лопаурозкэть',
@@ -1349,7 +1349,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'notargettitle' => 'Совавтома лопа арась',
 'nopagetitle' => 'Истямо вешема лопа арась',
 'nopagetext' => 'Истямо лопа, конань вешить, арась.',
-'pager-newer-n' => '{{PLURAL:$1|1=седе од 1|седе одт $1}}',
+'pager-newer-n' => '$1 седе {{PLURAL:$1|од|одт}}',
 'pager-older-n' => '{{PLURAL:$1|1=седе ташто 1|седе таштт $1}}',
 'suppress' => 'А ванома',
 
@@ -1447,7 +1447,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'unwatch' => 'А ванстнемс тень мельга',
 'unwatchthispage' => 'Лоткамс ванстомадонзо',
 'notvisiblerev' => 'Лиякстомтомась нардазь',
-'watchlist-details' => 'Ванома лемрисьмесэть {{PLURAL:$1|1=$1 лопа|$1 лопат}}, апак лово кортнема лопатнень.',
+'watchlist-details' => 'Ванома лемрисьмесэть $1 {{PLURAL:$1|лопа|лопат}}, кортнема лопатнень лангс апак вано.',
 'wlshowlast' => 'Невтемс мельсе $1 цяст $2 чить $3',
 'watchlist-options' => 'Ванома потмонь аравтнемат',
 
@@ -1568,7 +1568,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'contributions-title' => 'Теицянть путовксонзо $1 таркантень',
 'mycontris' => 'Монь путовкстнэ',
 'contribsub2' => '$1 ($2) туртов',
-'uctop' => '(меельцесь)',
+'uctop' => '(течеме чинь)',
 'month' => 'Ковстонть (ды седе икеле):',
 'year' => 'Иестэнть (ды седе икеле):',
 
index 83fafcb..37046bf 100644 (file)
@@ -274,7 +274,6 @@ $messages = array(
 'vector-action-protect' => 'زلفن بزوئن',
 'vector-action-undelete' => 'دباره بنویشته بیّن',
 'vector-action-unprotect' => 'زلفن عوض هاکردن',
-'vector-simplesearch-preference' => 'فعال هاکردن پیشنهادون بگردستن پیشرفته (فقط پوسته برداری دله)',
 'vector-view-create' => 'بساتن',
 'vector-view-edit' => 'دچی‌ین',
 'vector-view-history' => 'تاریخچه ره بَدی‌ین',
index 081ec4d..85e0ad2 100644 (file)
@@ -28,7 +28,6 @@ $dateFormats = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Liân-kiat oē té-sûn:',
-'tog-justify' => 'pâi-chê  tōaⁿ-lo̍h',
 'tog-hideminor' => 'Am chòe-kīn ê sió kái-piàn',
 'tog-hidepatrolled' => 'Am chòe-kīn sûn koè--ê  kái-piàn',
 'tog-newpageshidepatrolled' => 'Sin-ia̍h ê chheng-toaⁿ am sûn koè--ê',
@@ -37,9 +36,7 @@ $messages = array(
 'tog-numberheadings' => 'Phiau-tê chū-tōng pian-hō',
 'tog-showtoolbar' => 'Hián-sī pian-chi̍p ke-si-tiâu (su-iàu JavaScript)',
 'tog-editondblclick' => 'Siang-ji̍h ia̍h-bīn to̍h ē-tàng pian-chi̍p (su-iàu JavaScript)',
-'tog-editsection' => 'Ji̍h [siu-kái] chit-ê liân-kiat to̍h ē-tàng pian-chi̍p toāⁿ-lo̍h',
 'tog-editsectiononrightclick' => 'Chiàⁿ-ji̍h (right click) toāⁿ-lo̍h (section) phiau-tê to̍h ē-tàng pian-chi̍p toāⁿ-lo̍h (su-iàu JavaScript)',
-'tog-showtoc' => 'Hián-sī bo̍k-chhù (3-ê phiau-tê í-siōng ê ia̍h)',
 'tog-rememberpassword' => 'Kì tiâu bi̍t-bé, āu-chōa iōng (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'Kā goá khui ê ia̍h ka-ji̍p kàm-sī-toaⁿ lāi-té',
 'tog-watchdefault' => 'Kā goá pian-chi̍p kòe ê ia̍h ka-ji̍p kàm-sī-toaⁿ lāi-té',
@@ -177,7 +174,6 @@ $messages = array(
 'vector-action-protect' => 'Pó-hō·',
 'vector-action-undelete' => 'chhú-siau thâi tiàu',
 'vector-action-unprotect' => 'Chhú-siau pó-hō·',
-'vector-simplesearch-preference' => 'Chhái-iōng ka-kiông-pán ê chhiau-soh kiàn-gī ( chí hān tī Vector bīn-phoê)',
 'vector-view-create' => 'Khai-sí siá',
 'vector-view-edit' => 'Siu-kái',
 'vector-view-history' => 'khoàⁿ le̍k-sú',
@@ -224,7 +220,7 @@ $messages = array(
 'articlepage' => 'Khoàⁿ loē-iông ia̍h',
 'talk' => 'thó-lūn',
 'views' => 'Khoàⁿ',
-'toolbox' => 'Ke-si kheh-á',
+'toolbox' => 'Ke-si',
 'userpage' => 'Khoàⁿ iōng-chiá ê Ia̍h',
 'projectpage' => 'Khoàⁿ sū-kang ia̍h',
 'imagepage' => 'Khoàⁿ tóng-àn ia̍h',
@@ -500,6 +496,9 @@ Lîm-sî ê bi̍t-bé: $2',
 'newarticle' => '(Sin)',
 'newarticletext' => "Lí tòe 1 ê liân-kiat lâi kàu 1 bīn iáu-bōe chûn-chāi ê ia̍h. Beh khai-sí pian-chi̍p chit ia̍h, chhiáⁿ tī ē-kha ê bûn-jī keh-á lāi-té phah-jī. ([[{{MediaWiki:Helppage}}|Bo̍k-lio̍k]] kà lí án-choáⁿ chìn-hêng.) Ká-sú lí bô-tiuⁿ-tî lâi kàu chia, ē-sai chhi̍h liû-lám-khì ê '''téng-1-ia̍h''' tńg--khì.",
 'anontalkpagetext' => "----''Pún thó-lūn-ia̍h bô kò·-tēng ê kháu-chō/hō·-thâu, kan-na ū 1 ê IP chū-chí (chhin-chhiūⁿ 123.456.789.123). In-ūi bô kāng lâng tī bô kāng sî-chūn ū khó-lêng tú-hó kong-ke kāng-ê IP, lâu tī chia ê oē ū khó-lêng hō· bô kāng lâng ê! Beh pī-bián chit khoán būn-tê, ē-sái khì [[Special:UserLogin|khui 1 ê hō·-thâu a̍h-sī teng-ji̍p]].''",
+'noarticletext' => '這頁這馬無內容,你會使佇別頁[[Special:Search/{{PAGENAME}}|揣這頁標題]],
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 揣相關日誌],
+抑[{{fullurl:{{FULLPAGENAME}}|action=edit}} 改這頁]</span>。',
 'clearyourcache' => "'''Chù-ì:''' Pó-chûn liáu-āu, tio̍h ē-kì leh kā liû-lám-khì ê cache piàⁿ tiāu chiah khoàⁿ-ē-tio̍h kái-piàn: *'''Firefox / Safari:''' chhi̍h tiâu \"Shift\" kâng-sî-chūn tiám-kik ''Reload/têng-sin chài-ji̍p'' a̍h-sī chhi̍h ''Ctrl-F5'' \"Ctrl-R\" kî-tiong chi̍t ê (''Command-R'' tī Mac) 
 * '''Google Chrome:''' chhi̍h ''Ctrl-Shift-R'' (''Command-Shift-R'' tī Mac)
 '''Internet Explorer :'''chhi̍h tiâu \"Ctrl\" kâng-sî-chūn tiám-kek ''Refresh/têng-sin chài-ji̍p'' a̍h-sī chhi̍h \"Ctrl-F5\" 
@@ -567,6 +566,12 @@ Lí ê kái-piàn tī ē-kha ê bûn-jī-keh. Lí su-iàu chiōng lí chò ê k
 # Revision feed
 'history-feed-item-nocomment' => '$1 tī $2',
 
+# Revision deletion
+'revdel-restore' => '改會當看無',
+
+# Merge log
+'revertmerge' => '取消合併',
+
 # Diffs
 'history-title' => '"$1"的歷史版本',
 'lineno' => 'Tē $1 chōa:',
@@ -584,16 +589,22 @@ Lí ê kái-piàn tī ē-kha ê bûn-jī-keh. Lí su-iàu chiōng lí chò ê k
 'shown-title' => 'Múi ia̍h hián-sī $1 {{PLURAL:$1|kiat-kó|kiat-kó}}',
 'viewprevnext' => 'Khoàⁿ ($1 {{int:pipe-separator}} $2) ($3)',
 'searchprofile-articles' => 'Loē-iông ia̍h',
+'searchprofile-project' => '幫助佮事工的頁',
 'searchprofile-images' => 'To-mûi-thé',
 'searchprofile-everything' => 'Só͘-ū ê',
 'searchprofile-advanced' => 'chìn-chi̍t-pō͘',
 'searchprofile-articles-tooltip' => 'Tī $1 chhoé',
+'searchprofile-project-tooltip' => 'Tī $1 chhoé',
 'searchprofile-images-tooltip' => 'Chhoé tóng-àn',
+'searchprofile-everything-tooltip' => '揣全部(包括討論頁)',
+'searchprofile-advanced-tooltip' => '佇你家己設的名空間內底揣',
 'search-result-size' => '$1 ({{PLURAL:$2|1 jī-goân|$2 jī-goân}})',
+'search-redirect' => '(轉去 $1)',
 'search-section' => '(toān-lo̍h $1)',
 'searchall' => 'choân-pō·',
 'showingresults' => 'Ē-kha tùi #<b>$2</b> khai-sí hián-sī <b>$1</b> hāng kiat-kó.',
 'showingresultsnum' => 'Ē-kha tùi #<b>$2</b> khai-sí hián-sī <b>$3</b> hāng kiat-kó.',
+'showingresultsheader' => "對'''$4'''的{{PLURAL:$5|第 '''$1''' 到第 '''$3''' 項結果|第 '''$1 - $2''' 項,總共 '''$3''' 項結果}}",
 'powersearch-legend' => 'Kiám-sek',
 
 # Preferences page
@@ -713,7 +724,7 @@ Tī pat-lâng liân-lo̍k lí ê sî-chūn bē kā e-mail tsū-tsí siá chhut--
 'filehist-datetime' => 'Ji̍t-kî/ Sî-kan',
 'filehist-thumb' => '細張圖',
 'filehist-user' => 'Iōng-chiá',
-'imagelinks' => 'Iáⁿ-siōng liân-kiat',
+'imagelinks' => 'tóng-àn sù-iōng ê chōng-hòng',
 'linkstoimage' => 'Í-hā ê ia̍h liân kàu chit ê iáⁿ-siōng:',
 'nolinkstoimage' => 'Bô poàⁿ ia̍h liân kàu chit tiuⁿ iáⁿ-siōng.',
 
@@ -851,7 +862,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'watchmethod-recent' => 'tng teh kíam-cha choè-kīn ê siu-kái, khoàⁿ ū kàm-sī ê ia̍h bô',
 'watchmethod-list' => 'tng teh kiám-cha kàm-sī ê ia̍h khoàⁿ chòe-kīn ū siu-kái bô',
 'watchlistcontains' => 'Lí ê kàm-sī-toaⁿ siu $1 ia̍h.',
-'wlnote' => "Ē-kha sī '''$2''' tiám-cheng í-lāi siōng sin ê $1 ê kái-piàn.",
 'wlshowlast' => 'Hián-sī chêng $1 tiám-cheng $2 ji̍t $3',
 
 # Delete
@@ -893,6 +903,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Undelete
 'undelete' => 'Kiù thâi tiāu ê ia̍h',
 'undeletepage' => 'Khoàⁿ kap kiù thâi tiāu ê ia̍h',
+'undeletelink' => '看/復原',
 'undeleteviewlink' => 'Khoàⁿ',
 
 # Namespace form on various pages
@@ -937,6 +948,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'ipusubmit' => 'Chhú-siau hong-só chit ê chū-chí',
 'ipblocklist' => 'Siū hong-só ê IP chū-chí kap iōng-chiá miâ-chheng',
 'blocklink' => 'hong-só',
+'unblocklink' => '廢除封鎖',
+'change-blocklink' => '改封鎖',
 'contribslink' => 'kòng-hiàn',
 'autoblocker' => 'Chū-tōng kìm-chí lí sú-iōng, in-ūi lí kap "$1" kong-ke kāng 1 ê IP chū-chí (kìm-chí lí-iû "$2").',
 'blocklogentry' => 'hong-só [[$1]], siat kî-hān chì $2 $3',
@@ -972,6 +985,7 @@ Liâu--lo̍h-khì chìn-chêng, chhiáⁿ seng khak-tēng lí ū liáu-kái chia
 'movepage-page-moved' => '$1 í-keng sóa khì tī $2.',
 'movelogpagetext' => 'Ē-kha lia̍t-chhut hông soá-ūi ê ia̍h.',
 'movereason' => 'Lí-iû:',
+'revertmove' => 'hôe-tńg',
 'selfmove' => 'Goân piau-tê kap sin piau-tê sio-siâng; bô hoat-tō· sóa.',
 'protectedpagemovewarning' => "'''KÉNG-KÒ: Pún ia̍h só tiâu leh. Kan-taⁿ ū hêng-chèng te̍k-koân ê iōng-chiá (sysop) ē-sái soá tín-tāng.'''
 Ē-kha ū choè-kīn ê kì-lio̍k thang chham-khó:",
@@ -998,9 +1012,9 @@ Liâu--lo̍h-khì chìn-chêng, chhiáⁿ seng khak-tēng lí ū liáu-kái chia
 'tooltip-pt-userpage' => 'Lí chit ê iōng-chiá ê ia̍h',
 'tooltip-pt-mytalk' => 'Lí ê thó-lūn ia̍h',
 'tooltip-pt-preferences' => 'Lí ê siat-tēng',
+'tooltip-pt-watchlist' => '你監視的頁有改過的清單',
 'tooltip-pt-mycontris' => 'Lí ê kòng-hiàn lia̍t-toaⁿ',
 'tooltip-pt-login' => 'Hi-bāng lí teng-ji̍p; m̄-ko bô kiông-chè',
-'tooltip-pt-anonlogin' => 'Hi-bāng lí teng-ji̍p; m̄-ko bô kiông-chè',
 'tooltip-pt-logout' => 'Teng-chhut',
 'tooltip-ca-talk' => 'Loē-iông ê thó-lūn',
 'tooltip-ca-edit' => 'Lí ē-sái kái chit ia̍h. Beh chhûn chìn-chiân, chhiáⁿ chhi̍h  sing-khoàⁿ-māi ê liú-á',
@@ -1009,6 +1023,7 @@ Lí ē-sái khoàⁿ i ê goân-sú-bé.',
 'tooltip-ca-history' => 'Chit ia̍h ê chá-chêng pán-pún',
 'tooltip-ca-delete' => 'Thâi chit ia̍h',
 'tooltip-ca-move' => '徙這頁',
+'tooltip-ca-watch' => '共這頁加入去你的監視單',
 'tooltip-ca-unwatch' => 'Lí ê kàm-sī-toaⁿ soá tiàu chit ia̍h.',
 'tooltip-search' => 'Chhoé {{SITENAME}}',
 'tooltip-search-fulltext' => 'Chhoé ū chia-ê jī ê ia̍h',
@@ -1022,6 +1037,7 @@ Lí ē-sái khoàⁿ i ê goân-sú-bé.',
 'tooltip-n-help' => 'Beh chhoé ê só͘-chāi',
 'tooltip-t-whatlinkshere' => 'Só͘-ū liân kàu chia ê liat-toaⁿ',
 'tooltip-t-recentchangeslinked' => 'Liân kàu chit ia̍h koh choè-kīn ū kái koè--ê',
+'tooltip-feed-atom' => '訂看這頁的修改',
 'tooltip-t-contributions' => 'Khoàⁿ chit ê iōng-chiá ê kòng-hiàn lia̍t-toaⁿ',
 'tooltip-t-upload' => 'Í-keng sàng chiūⁿ-bāng ê tóng-àn',
 'tooltip-t-specialpages' => 'Só͘-ū te̍k-sû-ia̍h ê lia̍t-toaⁿ',
index 3f5268e..d580427 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author C.R.
  * @author Carmine Colacino
  * @author Chelin
  * @author Cryptex
@@ -281,7 +282,7 @@ $messages = array(
 'feedlinks' => 'Feed:',
 'site-atom-feed' => "Feed Atom 'e $1",
 'page-atom-feed' => 'Feed Atom ppe "$1"',
-'red-link-title' => '$1 (a paggena nun esiste)',
+'red-link-title' => "$1 ('a paggena nun esiste)",
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Articulo',
@@ -637,6 +638,7 @@ Vere anche 'e [[Special:WantedCategories|categurìe richieste]].",
 'sp-contributions-blocklog' => 'blocche',
 'sp-contributions-logs' => 'registre',
 'sp-contributions-talk' => 'Chiàcchiera',
+'sp-contributions-suppresslog' => 'contribbute utente scancellate',
 'sp-contributions-username' => 'Nnerizzo IP o nomme utente',
 'sp-contributions-submit' => 'Truova',
 
@@ -718,7 +720,7 @@ Vere anche 'e [[Special:WantedCategories|categurìe richieste]].",
 'tooltip-p-logo' => 'Visita a paggena prencepale',
 'tooltip-n-mainpage' => 'Visita a paggena prencepale',
 'tooltip-n-mainpage-description' => 'Visita a paggena prencepale',
-'tooltip-n-portal' => 'Descrizione ddo prugietto, che pou fa, addo truova e cose',
+'tooltip-n-portal' => "Descrizione d&#39;'o prugietto, che po' ffa, addò truvà 'e ccose",
 'tooltip-n-recentchanges' => 'Ennece dde urdeme cagnamiénte ddo sito',
 'tooltip-n-randompage' => 'Na paggena qualsiase',
 'tooltip-n-help' => "Paggena 'e ajùto",
index 893be59..df09acd 100644 (file)
@@ -481,7 +481,6 @@ $messages = array(
 'vector-action-protect' => 'Beskytt',
 'vector-action-undelete' => 'Gjenopprett',
 'vector-action-unprotect' => 'Endre beskyttelse',
-'vector-simplesearch-preference' => 'Aktiver forenklet søkefelt (kun for drakten Vector)',
 'vector-view-create' => 'Opprett',
 'vector-view-edit' => 'Rediger',
 'vector-view-history' => 'Vis historikk',
@@ -765,8 +764,6 @@ Ikke glem å endre [[Special:Preferences|innstillingene dine]] på {{SITENAME}}.
 'gotaccountlink' => 'Logg inn',
 'userlogin-resetlink' => 'Har du glemt påloggingsdetaljene dine?',
 'userlogin-resetpassword-link' => 'Glemt passordet?',
-'helplogin-url' => 'Help:Innlogging',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjelp med innlogging]]',
 'userlogin-loggedin' => 'Du er allerede logget inn som {{GENDER:$1|$1}}.
 Bruk skjemaet nedenfor for å logge inn som en annen bruker.',
 'userlogin-createanother' => 'Opprett ny konto',
@@ -864,7 +861,7 @@ Hvis du velger å oppgi det, vil det blir anvendt for å gi deg som bruker anerk
 
 # Change password dialog
 'changepassword' => 'Endre passord',
-'resetpass_announce' => 'Du logget inn med en midlertidig e-postkode. For å fullføre innloggingen må du oppgi et nytt passord her:',
+'resetpass_announce' => 'For å fullføre innloggingen må du angi et nytt passord.',
 'resetpass_text' => '<!-- Legg til tekst her -->',
 'resetpass_header' => 'Endre passord',
 'oldpassword' => 'Gammelt passord:',
@@ -880,8 +877,13 @@ Vær vennlig å vente $1 før du prøver igjen.',
 'resetpass-submit-cancel' => 'Avbryt',
 'resetpass-wrong-oldpass' => 'Ugyldig midlertidig eller nåværende passord.
 Du kan ha allerede byttet passordet, eller bedt om et nytt midlertidig passord.',
+'resetpass-recycled' => 'Vær vennlig å endre passordet til noe annen enn gjeldende passord.',
+'resetpass-temp-emailed' => 'Du logget inn med en midlertidig kode sendt på e-post.
+For å avslutte innloggingen må du angi et nytt passord her:',
 'resetpass-temp-password' => 'Midlertidig passord:',
 'resetpass-abort-generic' => 'Endring av passord har blitt avbrutt av en utvidelse.',
+'resetpass-expired' => 'Passordet ditt har utløpt. Vær vennlig å angi et nytt passord for å logge inn.',
+'resetpass-expired-soft' => 'Passordet ditt har utløpt og må endres. Vær vennlig å angi et nytt passord, eller klikk avbryt for å endre det senere.',
 
 # Special:PasswordReset
 'passwordreset' => 'Tilbakestilling av passord',
@@ -1188,6 +1190,7 @@ Disse parameterne har blitt utelatt.',
 '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-nochange' => 'Det ser ut til at redigeringen allerede er tilbakestilt.',
 'undo-summary' => 'Fjerner revisjon $1 av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]])',
 'undo-summary-username-hidden' => 'Fjern revisjon $1 av en skjult bruker',
 
@@ -1272,8 +1275,6 @@ Du kan se denne diffen; det kan finnes detaljer i [{{fullurl:{{#Special:Log}}/su
 '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
@@ -1366,6 +1367,8 @@ Forsikre deg om at denne endringen vil opprettholde historisk sidekontinuitet.',
 'showhideselectedversions' => 'Vis/skjul valgte versjoner',
 'editundo' => 'fjern',
 'diff-empty' => '(Ingen forskjell)',
+'diff-multi-sameuser' => '({{PLURAL:$1|En midlertidig revisjon|$1 midlertidige revisjoner}} av samme bruker vises ikke)',
+'diff-multi-otherusers' => '({{PLURAL:$1|En midlertidig revisjon|$1 midlertidige revisjoner}} av {{PLURAL:$2|en annen bruker|$2 brukere}} er ikke vist)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} av mer enn $2 {{PLURAL:$2|bruker|brukere}} vises ikke)',
 'difference-missing-revision' => '{{PLURAL:$2|En revisjon|$2 revisjoner}} av denne forskjellen ($1) {{PLURAL:$2|ble|ble}} ikke funnet.
 
@@ -1386,7 +1389,8 @@ Detaljer kan finnes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'shown-title' => 'Vis $1 {{PLURAL:$1|resultat|resultater}} per side',
 'viewprevnext' => 'Vis ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "* Siden '''[[$1]]'''",
-'searchmenu-new' => "'''Opprett siden ''[[:$1]]'' på denne wikien.'''",
+'searchmenu-new' => "'''Opprett siden ''[[:\$1]]'' på denne wikien.'''
+<strong>Opprett siden \"[[:\$1]]\" på denne wikien!</strong> {{PLURAL:\$2|0=|Se også siden oppnådd gjennom søket ditt.|Se også de oppnådde søkeresultatene.}}",
 'searchprofile-articles' => 'Innholdssider',
 'searchprofile-project' => 'Hjelp- og prosjektsider',
 'searchprofile-images' => 'Multimedia',
@@ -1412,6 +1416,7 @@ Detaljer kan finnes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'searchrelated' => 'relatert',
 'searchall' => 'alle',
 'showingresults' => "Nedenfor vises opptil {{PLURAL:$1|'''ett''' resultat|'''$1''' resultater}} fra og med nummer <b>$2</b>.",
+'showingresultsinrange' => 'Nedenfor vises opptil {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resulter}} i området #<strong>$2</strong> til #<strong>$3</strong>.',
 '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'''",
 'search-nonefound' => 'Ingen resultater passet til søket.',
@@ -1730,7 +1735,7 @@ Informasjonen vil være offentlig.',
 'recentchanges-legend-heading' => "'''Tegnforklaring:'''",
 'recentchanges-legend-newpage' => '(se også [[Special:NewPages|liste av nye sider]])',
 'recentchanges-legend-plusminus' => '«(±123)»',
-'rcnotefrom' => "Nedenfor er endringene siden '''$2''' (opp til '''$1''' vises).",
+'rcnotefrom' => 'Nedenfor er endringene gjort siden <strong>$2</strong> (frem til <strong>$1</strong> vises).',
 'rclistfrom' => 'Vis nye endringer med start fra $1',
 'rcshowhideminor' => '$1 mindre endringer',
 'rcshowhidebots' => '$1 roboter',
@@ -1861,6 +1866,7 @@ Om du fortsatt ønsker å laste opp filen, gå tilbake og last den opp under et
 '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.',
+'uploadinvalidxml' => 'XML-en i den opplastede filen kunne ikke tolkes.',
 '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.',
@@ -2226,10 +2232,20 @@ Hver rad inneholder lenker til første og andre omdirigering, samt målet for de
 'deadendpagestext' => 'Følgende sider lenker ikke til andre sider på {{SITENAME}}.',
 'protectedpages' => 'Låste sider',
 'protectedpages-indef' => 'Kun beskyttelser på ubestemt tid',
+'protectedpages-summary' => 'Denne siden viser en liste av eksisterende sider som for tiden er beskyttet. For å se en liste av sider som er beskyttet mot opprettelse, se [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Kun dypbeskyttelse',
 'protectedpages-noredirect' => 'Skjul omdirigeringer',
 'protectedpagesempty' => 'Ingen sider er for øyeblikket låst med disse paramterne.',
+'protectedpages-timestamp' => 'Tidsstempel',
+'protectedpages-page' => 'Side',
+'protectedpages-expiry' => 'Utløper',
+'protectedpages-performer' => 'Beskytter bruker',
+'protectedpages-params' => 'Beskyttelsesparametre',
+'protectedpages-reason' => 'Årsak',
+'protectedpages-unknown-timestamp' => 'Ukjent',
+'protectedpages-unknown-performer' => 'Ukjent bruker',
 'protectedtitles' => 'Beskyttede titler',
+'protectedtitles-summary' => 'Denne siden viser en liste av eksisterende sider som for tiden er beskyttet mot opprettelse. For å se en liste av sider som er beskyttet, se [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Ingen titler beskyttes med disse parameterne for øyeblikket.',
 'listusers' => 'Brukerliste',
 'listusers-editsonly' => 'Vis bare brukere med redigeringer',
@@ -2772,7 +2788,7 @@ Se [[Special:BlockList|blokkeringslisten]] for alle blokkeringer.',
 'change-blocklink' => 'endre blokkering',
 'contribslink' => 'bidrag',
 'emaillink' => 'send e-post',
-'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».',
+'autoblocker' => 'Du ble automatisk blokkert fordi din IP-adresse nylig ble brukt av «[[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.',
@@ -2979,6 +2995,7 @@ $2',
 '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',
+'thumbnail_image-failure-limit' => 'Det har vært for mange nylige forsøk ($1 eller flere) på å gjengi dette miniatyrbildet. Vennligst prøv igjen senere.',
 
 # Special:Import
 'import' => 'Importer sider',
@@ -3012,7 +3029,7 @@ Lagre den på din egen datamaskin og last den opp her.',
 '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.',
+'import-nonewrevisions' => 'Ingen revisjoner ble importert: De var enten allerede på plass, eller hoppet over pga. feil.',
 '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.',
@@ -3023,6 +3040,7 @@ Lagre den på din egen datamaskin og last den opp her.',
 '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-error-bad-location' => 'Revisjon $2 som bruker innholdsmodell $3 kan ikke lagres til "$1" på denne wikien siden denne modellen ikke støttes på den siden.',
 '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.',
@@ -3113,6 +3131,7 @@ Du kan se på kildeteksten',
 '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',
+'interlanguage-link-title' => '$1 &ndash; $2',
 
 # Stylesheets
 'common.css' => '/* CSS plassert i denne fila vil gjelde for alle utseender. */',
@@ -4214,6 +4233,4 @@ Faktisk utvider den det meste innkapslet i doble krøllparenteser.',
 'expand_templates_generate_rawhtml' => 'Vis ubehandlet HTML',
 'expand_templates_preview' => 'Forhåndsvisning',
 
-# Unknown messages
-'uploadinvalidxml' => 'XML-en i den opplastede filen kunne ikke tolkes.',
 );
index d35d71a..1c3edd8 100644 (file)
@@ -362,7 +362,6 @@ $messages = array(
 'vector-action-protect' => 'Schulen',
 'vector-action-undelete' => 'Wedderhalen',
 'vector-action-unprotect' => 'Siedenschuul ännern',
-'vector-simplesearch-preference' => 'Verbeterte Söökvörslääg anstellen (blot mit’n Skin Vector)',
 'vector-view-create' => 'Opstellen',
 'vector-view-edit' => 'Ännern',
 'vector-view-history' => 'Historie bekieken',
@@ -962,8 +961,6 @@ As Administrater kannst du [$1 mit dissen Lenk] den Ünnerscheed ankieken.',
 'revdelete-show-file-submit' => 'Jo',
 'revdelete-selected' => "'''{{PLURAL:$2|Wählte Version|Wählte Versionen}} vun [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Wählt Logbook-Indrag|Wählte Logbook-Indrääg}}:'''",
-'revdelete-text' => "'''Wegsmetene Versionen un Akschonen staht noch jümmer in de Versionsgeschicht un Logböker, sünd aver nich mehr apen intosehn.'''
-{{SITENAME}}-Administraters köönt de Sieden noch jümmer sehn un ok wedderhalen, solang dat nich extra fastleggt is, dat ok Administraters dat nich mehr mehr dröfft.",
 'revdelete-suppress-text' => "Ünnerdrücken schull '''blot''' bi disse Fäll bruukt warrn:
 * Nich passliche persönliche Information
 *: ''Adressen, Telefonnummern, Sozialversekerungsnummern etc.''",
index d895307..7251ab3 100644 (file)
@@ -360,7 +360,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Stuur mien kopieën van berichten an aandere gebrukers',
 'tog-diffonly' => 'Laot de inhoud van ziejen niet onder de an-egeven wiezigingen zien.',
 'tog-showhiddencats' => 'Laot verbörgen kategorieën zien',
-'tog-noconvertlink' => 'Ziednaamkonversie uutschakelen',
 'tog-norollbackdiff' => 'Wiezigingen vortlaoten nao t weerummedreien',
 'tog-useeditwarning' => "Waorschuw mien a'k n bewörken zied aof wil sluten die nog niet op-esleugen is",
 'tog-prefershttps' => "Altied n beveiligde verbiending gebruken a'j an-emeld bin",
@@ -487,7 +486,6 @@ $messages = array(
 'vector-action-protect' => 'Beveiligen',
 'vector-action-undelete' => 'Weerummeplaotsen',
 'vector-action-unprotect' => 'Beveiliging wiezigen',
-'vector-simplesearch-preference' => 'Vereenvoudigd zeuken anzetten (allinnig mit Vector-vormgeving)',
 'vector-view-create' => 'Anmaken',
 'vector-view-edit' => 'Bewarken',
 'vector-view-history' => 'Geschiedenisse bekieken',
@@ -766,8 +764,6 @@ Vergeet niet joew [[Special:Preferences|veurkeuren veur {{SITENAME}}]] an te pas
 'gotaccountlink' => 'Anmelden',
 'userlogin-resetlink' => "Bi'j de anmeldgegevens kwiet?",
 'userlogin-resetpassword-link' => 'Joew wachtwoord vergeten?',
-'helplogin-url' => 'Help:Anmelden',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hulpe bie t anmelden]]',
 'userlogin-loggedin' => 'Je bin al an-emeld as {{GENDER:$1|$1}}.
 Gebruuk t onderstaonde formulier um an te melden as n aandere gebruker.',
 'userlogin-createanother' => 'n Aandere gebrukerskonto anmaken',
@@ -1257,8 +1253,6 @@ Je kunnen disse verschillen bekieken. Misschien steet der over in t [{{fullurl:{
 'revdelete-show-file-submit' => 'Ja',
 'revdelete-selected' => "'''{{PLURAL:$2|Ekeuzen bewarking|Ekeuzen bewarkingen}} van '''[[:$1]]''':'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Ekeuzen logboekboekaksie|Ekeuzen logboekaksies}}:'''",
-'revdelete-text' => "'''Vortedaone bewarkingen staon nog altied in de geschiedenisse en in logboeken, mer niet iederene kan de inhoud zo mer bekieken.'''
-Beheerders van {{SITENAME}} kunnen de verbörgen inhoud bekieken en t weerummeplaotsen deur dit scharm te gebruken, behalven as der aandere beparkingen in-esteld bin.",
 'revdelete-confirm' => "Bevestig da'j dit doon wollen, da'j de gevolgen dervan begriepen en da'j t doon in overeenstemming mit t geldende [[{{MediaWiki:Policy-url}}|beleid]].",
 'revdelete-suppress-text' => "Onderdrokken ma'j '''allinnig''' gebruken in de volgende gevallen:
 * Ongepassen persoonlike informasie
index 3f7b6cc..8a73ad0 100644 (file)
@@ -92,7 +92,6 @@ $messages = array(
 'tog-ccmeonemails' => 'मैले अरु प्रयोगकर्ताहरुलाई पठाउने इ-मेल को प्रतिलिपि मलाई पठाउने',
 'tog-diffonly' => 'तलका पृष्टहरुको diffहरु सामग्री नदेखाउने',
 'tog-showhiddencats' => 'लुकाइएको प्रकारहरु देखाउने',
-'tog-noconvertlink' => 'सम्बन्ध शीर्षक रुपान्तरण निस्क्रिय पार्ने',
 'tog-norollbackdiff' => 'पूर्वस्थितिमा फर्काएपछि  diff हटाउने',
 'tog-useeditwarning' => 'सम्पादनहरू सङ्ग्रह गरिनसकेको अवस्थामा अर्को पृष्ठमा जान खोज्दा चेतावनी देखाउने',
 'tog-prefershttps' => 'प्रवेश गर्दा जहिले पनि सुरक्षित जडान प्रयोग गर्ने',
@@ -219,7 +218,6 @@ $messages = array(
 'vector-action-protect' => 'सुरक्षित गर्ने',
 'vector-action-undelete' => 'हटाएको रद्द गर्ने',
 'vector-action-unprotect' => 'सुरक्षा परिवर्तन गर्ने',
-'vector-simplesearch-preference' => 'साधारण खोज सुझावहरु सक्रिय पार्ने (भेक्टर त्वचाको लागि मात्र)',
 'vector-view-create' => 'सृजना गर्ने',
 'vector-view-edit' => 'सम्पादन',
 'vector-view-history' => 'इतिहास हेर्ने',
@@ -331,7 +329,7 @@ $1',
 'youhavenewmessagesfromusers' => 'तपाईंको लागि  {{PLURAL:$3|प्रयोगकर्ता|$3 प्रयोगकर्ताहरु}} ($2) बाट $1',
 'youhavenewmessagesmanyusers' => 'तपाईँलाई धेरै प्रयोगकर्ताहरू($2) बाट $1 छ ।',
 'newmessageslinkplural' => '{{PLURAL:$1|एउटा नयाँ सन्देश|999=नयाँ सन्देशहरू}}',
-'newmessagesdifflinkplural' => 'à¤\85नà¥\8dतिम {{PLURAL:$1|समà¥\8dपादन|समà¥\8dपादनहरू}}',
+'newmessagesdifflinkplural' => 'à¤\85नà¥\8dतिम {{PLURAL:$1|परिवरà¥\8dतन|999=परिवरà¥\8dतनहरू}}',
 'youhavenewmessagesmulti' => 'तपाईंको लागि $1 मा  नयाँ सन्देशहरू छन्',
 'editsection' => 'सम्पादन',
 'editold' => 'सम्पादन गर्ने',
@@ -423,6 +421,7 @@ $1',
 'cannotdelete-title' => 'पृष्ठ  "$1" लाई मेट्न सकिएन',
 'delete-hook-aborted' => 'हुकले सम्पादनकार्य बन्द गरिदियो ।
 कुनै कारण दिइएन ।',
+'no-null-revision' => '$1 पृष्ठको लागि खालि पुनरावलोकन सिर्जना गर्न सकिएन',
 'badtitle' => 'गलत शीर्षक',
 'badtitletext' => 'अनुरोध गरेको पृष्ठ शीर्षक अमान्य, खाली वा गलत रुपमा अन्तर भाषा वा अन्तर विकी सम्बन्ध गरिएको थियो।  यसमा शीर्षकमा प्रयोग गर्न नमिल्ने एक वा बढी अक्षरहरू रहेका हुनसक्छन् ।',
 'perfcached' => 'तलको डाटाहरु क्याचमा रहेका कुराहरु हुन्। अपटुडेट नहुनपनि सक्छन्।अधिकतम {{PLURAL:$1|नतिजा|$1 नतिजाहरू}} क्यासमा उपलब्ध छ।',
@@ -449,6 +448,8 @@ $2',
 'customjsprotected' => 'तपाईलाई यस जाभास्कृप्ट पृष्ठ सम्पादन गर्ने अनुमति छैन, किनकी यसमा कुनै अर्को प्रयोगकर्ताको व्यक्तिगत अभिरुचीहरु संग्रहित छन् ।',
 'mycustomcssprotected' => 'यस CSSपृष्ठ सम्पादन गर्नको लागि लागि तपाईँलाई अनुमति छैन ।',
 'mycustomjsprotected' => 'यस JavaScript पृष्ठ सम्पादन गर्नको लागि लागि तपाईँलाई अनुमति छैन ।',
+'myprivateinfoprotected' => 'तपाईँसँग तपाईँको निजी जानकारीहरू सम्पादन गर्ने अनुमती छैन',
+'mypreferencesprotected' => 'तपाईँसँग तपाईँको अभिरुचीहरू सम्पादन गर्ने अनुमती छैन',
 'ns-specialprotected' => 'विशेष पृष्ठ सम्पादन गर्न सकिदैन ।',
 'titleprotected' => ' [[User:$1|$1]]द्वारा यो शीर्षक निर्माणहुनबाट जोगाइएको छ।
 कारण   "\'\'$2\'\'" हो ।',
@@ -550,7 +551,7 @@ $2',
 'passwordtooshort' => 'पासवर्ड कम्तिमा {{PLURAL:$1|१ अक्षर |$1 अक्षरहरु}}को हुनुपर्छ ।',
 'password-name-match' => 'तपाईँको प्रवेशशव्द प्रयोगकर्ता नाम भन्दा फरक हुनुपर्छ ।',
 'password-login-forbidden' => 'यो प्रयोगकर्ता नाम र प्रवेश शव्द वर्जित गरिएकोछ ।',
-'mailmypassword' => 'नयाà¤\81 à¤ªà¥\8dरवà¥\87शशवà¥\8dद à¤\87मà¥\87ल गर्नुहोस्',
+'mailmypassword' => 'पासवरà¥\8dड à¤ªà¥\82रà¥\8dवनिरà¥\8dधारित गर्नुहोस्',
 'passwordremindertitle' => '{{SITENAME}}को लागि नयाँ अस्थायी पासवर्ड',
 'passwordremindertext' => 'कसैले (सायद तपाईँ, IP ठेगाना $1 बाट), {{SITENAME}}($4) को लागि नयाँ प्रवेशशव्द अनुरोध गर्नुभएको छ । प्रयोगकर्ता "$2" को लागि नयाँ अस्थायी प्रवेशशव्द "$3"तयार पारिएको छ। यदि यो तपाईको इच्छामा भएको भए अहिले तपाईँले प्रवेशगरी नयाँ प्रवेशशव्द छान्नु पर्ने हुन्छ।
 तपाईको अस्थायी प्रवेशशव्द  {{PLURAL:$5|एक दिन|$5 दिनहरू पछि}} अमान्य हुनेछ ।
@@ -562,8 +563,8 @@ $2',
 'passwordsent' => '"$1" को लागि दर्ता गरिएको ई-मेल ठेगानामा एक प्रवेशशव्द पठाइएको छ।
 कृपया त्यसलाई प्राप्त गरेपछि प्रवेश गर्नुहोला ।',
 'blocked-mailpassword' => 'तपाईको IP ठेगानालाई सम्पादनगर्नबाट रोक लगाइएको छ, र त्यसैले दुरुपयोग रोक्नको लागि प्रवेशशव्द पुनर्लाभ प्रक्रिया प्रयोग गर्न अनुमति छैन ।',
-'eauthentsent' => 'दिइएको इमेल ठेगानामा  किटानी इमेल पठाइएको छ ।
-तपाà¤\88à¤\95à¥\8b à¤\96ातामा à¤\85रà¥\81 à¤\87मà¥\87ल à¤ªà¤ à¤\89नà¥\81 à¤\85à¤\98ि , à¤\87मà¥\87लमा à¤²à¥\87à¤\96िà¤\8fà¤\95à¥\8b à¤®à¤¾à¤°à¥\8dà¤\97दरà¥\8dशन à¤\85नà¥\81सार , à¤¤à¥\8dयà¥\8b à¤\96ाता à¤¤à¤ªà¤¾à¤\88à¤\81à¤\95à¥\88 à¤¹à¥\8b à¤­à¤¨à¥\87र à¤¨à¤¿à¤¶à¥\8dà¤\9aित à¤\97राà¤\89नु पर्नेछ ।',
+'eauthentsent' => 'दिइएको इमेल ठेगानामा इमेल पठाइएको छ ।
+तपाà¤\88à¤\81à¤\95à¥\8b à¤\96ातामा à¤\85रà¥\81 à¤\87मà¥\87ल à¤ªà¤ à¤\89नà¥\81 à¤\85à¤\98ि , à¤\87मà¥\87लमा à¤²à¥\87à¤\96िà¤\8fà¤\95à¥\8b à¤®à¤¾à¤°à¥\8dà¤\97दरà¥\8dशन à¤\85नà¥\81सार , à¤¤à¥\8dयà¥\8b à¤\96ाता à¤¤à¤ªà¤¾à¤\88à¤\81à¤\95à¥\88 à¤¹à¥\8b à¤­à¤¨à¥\87र à¤¨à¤¿à¤¶à¥\8dà¤\9aित à¤\97रà¥\8dनु पर्नेछ ।',
 'throttled-mailpassword' => 'बितेको {{PLURAL:$1|घण्टा|$1 घण्टाहरु}} भित्र एउटा प्रवेशशब्द अनुस्मारक पठाई सकिएको छ।
 दुरुपयोगबाट बचाउकोलागि प्रत्येक {{PLURAL:$1|घण्टा|$1 घण्टाहरु}}मा केवल एउटा प्रवेशशब्द अनुस्मारक पठाइन्छ।',
 'mailerror' => ' चिठी :$1 पठाउँदा त्रुटी भयो',
@@ -1301,6 +1302,8 @@ HTML ट्यागहरु जाँच्नुहोस् ।',
 'right-editusercssjs' => 'प्रयोगकर्ताको CSS र JS फाइलहरु सम्पादन गर्ने',
 'right-editusercss' => 'प्रयोगकर्ताको CSS फाइलहरु सम्पादन गर्ने',
 'right-edituserjs' => 'प्रयोकर्ताको  JS फाइलहरु सम्पादनगर्ने',
+'right-editmyusercss' => 'तपाईँको आफ्नो CSS फाइलहरू सम्पादन गर्नुहोस्',
+'right-editmyuserjs' => 'तपाईँको आफ्नो जाभा स्क्रिप्ट फाइलहरू सम्पादन गर्ने',
 'right-rollback' => 'पछिल्लो प्रयोगकर्ताको सम्पादनहरुको छरितो रुपमा पछाडि पर्काउने',
 'right-markbotedits' => 'पछाडि फर्काउने सम्पादनहरुलाई बोट सम्पादनकारुपमा चिनो लगाउने',
 'right-noratelimit' => 'दर सीमाले  असर नपार्ने',
@@ -1580,6 +1583,7 @@ $1',
 'listfiles_size' => 'आकार',
 'listfiles_description' => 'वर्णन',
 'listfiles_count' => 'संस्करणहरु',
+'listfiles-latestversion' => 'हालको संस्करण',
 'listfiles-latestversion-yes' => 'हो',
 'listfiles-latestversion-no' => 'हैन',
 
@@ -1604,6 +1608,7 @@ $1',
 'linkstoimage' => 'यस फाइलमा निम्न{{PLURAL:$1|पृष्ठ जोडिन्छ|$1 पृष्ठहरु जोडिन्छन}}:',
 'nolinkstoimage' => 'यो फाईलसंग लिंकभएको कुनै पृष्ठ छैन.',
 'morelinkstoimage' => 'हेर्नुहोस् [[Special:WhatLinksHere/$1|थप लिंकहरु]] यो फाइलको।',
+'linkstoimage-redirect' => '$1 (फाइल अनुप्रेषण) $2',
 'sharedupload' => 'यो फाइल $1 को हो र अन्य परियोजनामा प्रयोग गरिएको हुनसक्छ।',
 'filepage-nofile' => 'यस नामको फाइल छैन।',
 'filepage-nofile-link' => 'यस नामको फाइल छैन तर तपाईं [$1 यो उर्ध्वभरण गर्न सक्नुहुन्छ].',
@@ -1611,6 +1616,7 @@ $1',
 'shared-repo-from' => ' $1 बाट',
 'shared-repo' => 'एल साझा भण्डार',
 'shared-repo-name-wikimediacommons' => 'विकिमीडिया कमन्स',
+'upload-disallowed-here' => 'तपाईँले यो फाइल अधिलेखन गर्न सक्नुहुन्न ।',
 
 # File reversion
 'filerevert' => 'पूर्वस्थिति $1 मा फर्काउने',
@@ -1682,6 +1688,8 @@ $1',
 'statistics-users-active-desc' => 'प्रयोगकर्ताहरु जो{{PLURAL:$1|बितेको एक दिन|बितेका $1 दिनहरु}}देखि  जो सक्रिय छन्',
 'statistics-mostpopular' => 'सबैभन्दा धेरै हेरिएको पृष्ठहरु',
 
+'pageswithprop-submit' => 'जाने',
+
 'doubleredirects' => 'दोहोरो अनुप्रेषण',
 'double-redirect-fixed-move' => '[[$1]] सारिएको छ।
 यसले [[$2]] तिर अनुप्रेषित गर्दछ।',
@@ -1738,6 +1746,13 @@ $1',
 'protectedpages-indef' => 'नखुलेको सुरक्षा मात्र',
 'protectedpages-cascade' => 'लामबद्ध सुरक्षाहरु मात्रा',
 'protectedpagesempty' => 'दिइएको प्यारामिटर प्रयोग गरि सुरक्षा गरिएका पृष्ठहरु छैनन् ।',
+'protectedpages-page' => 'पृष्ठ',
+'protectedpages-expiry' => 'सकिनेछ',
+'protectedpages-performer' => 'प्रयोगकर्ता सुरक्षित गरिँदै',
+'protectedpages-params' => 'सुरक्षा प्यारामेटर',
+'protectedpages-reason' => 'कारण',
+'protectedpages-unknown-timestamp' => 'अज्ञात',
+'protectedpages-unknown-performer' => 'अज्ञात प्रयोगकर्ता',
 'protectedtitles' => 'सुरक्षा गरिएका शिर्षकहरु',
 'protectedtitlesempty' => 'दिइएको प्यारामिटर प्रयोग गरि सुरक्षा गरिएका शीर्षकहरु छैनन् ।',
 'listusers' => 'प्रयोगकर्ता सूची',
@@ -1844,6 +1859,7 @@ $1',
 'mailnologin' => 'ईमेल पठाउने ठेगाना नै भएन ।',
 'mailnologintext' => 'तपाईले अरु प्रयोगकर्ताहरुलाई ईमेल पठाउनको लागि आफु पहिले [[Special:UserLogin|प्रवेश(लगइन)गरेको]] हुनुपर्छ र [[Special:Preferences|आफ्नो रोजाइहरुमा]] एउटा वैध ईमेल ठेगाना भएको हुनुपर्छ।',
 'emailuser' => 'यो प्रयोगकर्तालाई ई-मेल पठाउनुहोस्',
+'emailuser-title-notarget' => 'प्रयोगकर्तालाई इमेल गर्नुहोस्',
 'emailpage' => 'प्रयोगकर्तालाई इमेल गर्नुहोस्',
 'usermailererror' => 'मेल अब्जेक्टले देखाएको त्रुटि:',
 'defemailsubject' => '{{SITENAME}} प्रयपोगकर्ता "$1" बाट इमेल',
@@ -1992,6 +2008,9 @@ proceed with caution.',
 'rollback-success' => '$1द्वारा उल्टाइएका सम्पादनहरु;
 पछिल्लो संशोधनमा $2द्वारा परिवर्तन गरि पुनः फर्काइएको।',
 
+# Edit tokens
+'sessionfailure-title' => 'सत्र त्रुटी',
+
 # Protect
 'protectlogpage' => 'सुरक्षण लग',
 'protectedarticle' => '"[[$1]]" लाई सुरक्षित गरियो',
@@ -2017,6 +2036,7 @@ proceed with caution.',
 'protect-level-sysop' => 'प्रबन्धकहरु मात्र',
 'protect-summary-cascade' => 'लाममा राख्ने',
 'protect-expiring' => '$1 (UTC) मा सकिने छ ।',
+'protect-expiring-local' => 'समाप्ति समय $1',
 'protect-expiry-indefinite' => 'अनिश्चित काल',
 'protect-cascade' => 'यो पृष्ठमा संलग्न सुरक्षित पृष्ठहरु(लामबद्द सुरक्षा)',
 'protect-cantedit' => 'तपाईँ यस पृष्ठको सुरक्षा स्तर परिवर्तन गर्न सक्नुहुन्न , किन कि तपाईँलाई यसको सम्पादनको अनुमति छैन ।',
@@ -2081,8 +2101,8 @@ $3द्वारा $1को ($4को  समय $5 मा) मेटाइए
 'undeletedrevisions' => '{{PLURAL:$1|एउटा संशोधन|$1 संशोधनहरु}} पुनर्स्थापित गरियो',
 'undeletedrevisions-files' => '{{PLURAL:$1|एउटा संशोधन|$1 संशोधनहरु}} र {{PLURAL:$2|एउटा फाइल|$2 फाइलहरु}} पुनर्स्थापित गरियो',
 'undeletedfiles' => '{{PLURAL:$1|१ फाइल|$1 फाइलहरु }} पूर्वस्थितिमा ल्याइयो',
-'cannotundelete' => 'मेटाएको रद्द गर्ने काम असफल भयो;
-कसैले पहिले नैं मेटाएको रद्द गरिसकेकोछ।',
+'cannotundelete' => 'मेटाएको रद्द गर्ने काम असफल भयो:
+$1',
 'undeletedpage' => "'''$1लाई पूर्वावस्थामा ल्याइयो'''
 भर्खरै मेटाइएको रिकर्डहरु र पुनर्स्थापनाहरु हेर्न [[Special:Log/delete|मेटाइएको लग]]मा जानुहोस्।",
 'undelete-header' => 'भर्खर मेटिएका पृष्ठहरु हेर्न [[Special:Log/delete|मेटाइएका लग]]मा जानुहोस्।',
@@ -2392,6 +2412,7 @@ $1को बन्देजको कारण : "$2" हो',
 'allmessages-prefix' => 'प्रिफिक्स अनुसार फिल्टर:',
 'allmessages-language' => 'भाषा:',
 'allmessages-filter-submit' => 'जाउ',
+'allmessages-filter-translate' => 'अनुवाद गर्ने',
 
 # Thumbnails
 'thumbnail-more' => 'ठूलो बनाउने',
@@ -2554,12 +2575,18 @@ $1को बन्देजको कारण : "$2" हो',
 'pageinfo-header-properties' => 'पृष्ठ गुणहरू',
 'pageinfo-display-title' => 'प्रदर्शन शिर्षक',
 'pageinfo-views' => 'अवलोकन संख्या',
-'pageinfo-watchers' => 'निगरानी कर्ताहरुको संख्या',
-'pageinfo-edits' => 'सम्पादन संख्या',
-'pageinfo-authors' => 'फरक सम्पादकरुको संख्या',
+'pageinfo-watchers' => 'पृष्ठ निगरानी कर्ताहरुको संख्या',
+'pageinfo-edits' => 'कुल सम्पादन संख्या',
+'pageinfo-authors' => 'कुल फरक सम्पादकरूको संख्या',
+'pageinfo-toolboxlink' => 'पृष्ठ जानकारी',
+'pageinfo-redirectsto' => 'अनुप्रेषित',
 'pageinfo-redirectsto-info' => 'जानकारी',
+'pageinfo-contentpage' => 'सामग्री पृष्ठको रुपमा गणना गरिएको',
 'pageinfo-contentpage-yes' => 'हो',
 'pageinfo-protect-cascading-yes' => 'हो',
+'pageinfo-category-pages' => 'पृष्ठहरूको संख्या',
+'pageinfo-category-subcats' => 'उपश्रेणीहरूको संख्या',
+'pageinfo-category-files' => 'फाइलहरूको संख्या',
 
 # Skin names
 'skinname-cologneblue' => 'कोलोग्ने निलो',
@@ -2642,9 +2669,16 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 मिनेट|$1 मिनेटहरु}}',
 'hours' => '{{PLURAL:$1|$1 घण्टा|$1 घण्टाहरु}}',
 'days' => '{{PLURAL:$1|$1 दिन|$1 दिनहरु}}',
+'weeks' => '{{PLURAL:$1|$1 हप्ता|$1 हप्ताहरू}}',
+'months' => '{{PLURAL:$1|$1 महिना|$1 महिनाहरू}}',
+'years' => '{{PLURAL:$1|$1 वर्ष|$1 वर्षहरू}}',
 'ago' => '$1 पहिले',
+'just-now' => 'भर्खरै',
 
 # Human-readable timestamps
+'hours-ago' => '$1 {{PLURAL:$1|घन्टा|घन्टा}} पहिले',
+'minutes-ago' => '$1 {{PLURAL:$1|मिनेट|मिनेट}} पहिले',
+'seconds-ago' => '$1 {{PLURAL:$1|सेकेन्ड|सेकेन्ड}} पहिले',
 'monday-at' => 'सोमबार $1 मा',
 'tuesday-at' => 'मङ्गलबार $1मा',
 'wednesday-at' => 'बुधबार $1मा',
@@ -2864,7 +2898,7 @@ $8',
 'exif-compression-34712' => 'जेपेग२०००',
 
 'exif-copyrighted-true' => 'प्रकाशन अधिकार सिमित गरिएको',
-'exif-copyrighted-false' => 'पबà¥\8dलिà¤\95 à¤¡à¥\8bमà¥\87न',
+'exif-copyrighted-false' => 'पà¥\8dराà¤\95ाशन à¤\85धिà¤\95ार à¤¨à¤\96à¥\81लाà¤\87à¤\8fà¤\95à¥\8b',
 
 'exif-photometricinterpretation-2' => 'आरजीबी(रातोहरियोनिलो)',
 
@@ -2875,9 +2909,9 @@ $8',
 'exif-orientation-3' => '180° मा घुमाइएको',
 'exif-orientation-4' => 'लंब रुपमा फ्लिप (Flip) गरिएको',
 'exif-orientation-5' => '९०° घडिको उल्टो दिशामाको परिक्रमा र मास्तिर फर्काइएको(फ्लिप)',
-'exif-orientation-6' => '90° CW घुमाइएको',
+'exif-orientation-6' => 'घडीको उल्टो दिशामा ९०° घुमाइएको',
 'exif-orientation-7' => '९०° घडिको दिशामाको परिक्रमा र मास्तिर फर्काइएको(फ्लिप)',
-'exif-orientation-8' => '९०° à¤\98डिà¤\95à¥\8b à¤\89लà¥\8dà¤\9fà¥\8b à¤¦à¤¿à¤¶à¤¾à¤®à¤¾à¤\95à¥\8b à¤ªà¤°à¤¿à¤\95à¥\8dरमा à¤\97रिएको',
+'exif-orientation-8' => 'à¤\98डिà¤\95à¥\8b à¤¦à¤¿à¤¶à¤¾à¤®à¤¾ à¥¯à¥¦Â° à¤\98à¥\81माà¤\87एको',
 
 'exif-planarconfiguration-1' => 'टुक्रे प्रारुप',
 'exif-planarconfiguration-2' => 'प्लानर प्रारुप',
@@ -3317,6 +3351,10 @@ $5
 'version-software-product' => 'उत्पादन',
 'version-software-version' => 'संस्करण',
 
+# Special:Redirect
+'redirect-submit' => 'जाने',
+'redirect-file' => 'फाइल नाम',
+
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => 'नक्कल फाइल खोज्ने',
 'fileduplicatesearch-summary' => 'ह्यास मानको आधारमा दुरुस्त नक्कल फाइहरु खोज्ने ।',
@@ -3370,6 +3408,8 @@ $5
 'tags-display-header' => 'परिवर्तन सूचीहरुमाथि झलक',
 'tags-description-header' => 'पूर्ण अर्थको वर्णन',
 'tags-hitcount-header' => 'ट्याग गरिएक परिवर्तनहरू',
+'tags-active-yes' => 'हो',
+'tags-active-no' => 'हैन',
 'tags-edit' => 'सम्पादन गर्नुहोस्',
 'tags-hitcount' => '$1 {{PLURAL:$1|परिवर्तन|परिवर्तनहरु}}',
 
@@ -3389,6 +3429,7 @@ $5
 'dberr-problems' => 'क्षमा पाउँ! यो साइटमा तकनीकी गड़बड़ी आइपरेकोछ।',
 'dberr-again' => 'केही समय पर्खिएर पुन: लोड हुन दिनुहोस् ।',
 'dberr-info' => '(डेटाबेस सर्वर $1सित सम्पर्क साध्न सकिंदैन)',
+'dberr-info-hidden' => '(डेटावेस सर्भरमा सम्पर्क स्थापना गर्न सकिएन)',
 'dberr-usegoogle' => 'तपाईले अहिले गुगलबाट खोज गर्न प्रयास गर्न सक्नुहुन्छ।',
 'dberr-outofdate' => 'कृपया स्मरणमा राख्नुहोस् हाम्रा लेखहरूको सूची जुन उनीहरूले राखेका छन् त्यो अद्यावधिक नहुन सक्छ ।',
 'dberr-cachederror' => 'यो अनुरोध गरिएको पृष्ठको क्याशमा रहेका प्रतिलिपी हो , र अद्यावधिक नहुन सक्छ ।',
@@ -3404,6 +3445,9 @@ $5
 'htmlform-submit' => 'बुझाउने',
 'htmlform-reset' => 'परिवर्तनहरू परित्याग गर्नुहोस्',
 'htmlform-selectorother-other' => 'अन्य',
+'htmlform-no' => 'हैन',
+'htmlform-yes' => 'हो',
+'htmlform-chosen-placeholder' => 'एक विकल्प छान्नुहोस्',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 पूरा पाठ खोज समर्थन सहित',
@@ -3411,7 +3455,12 @@ $5
 
 # New logging system
 'logentry-delete-restore' => '$3 पृष्ठ $1ले पुनर्स्थापित गरेको हो',
+'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 मा सारियो',
@@ -3421,6 +3470,7 @@ $5
 'feedback-subject' => 'विषय:',
 'feedback-message' => 'सन्देश:',
 'feedback-cancel' => 'रद्द गर्ने',
+'feedback-submit' => 'प्रतिकृया बुझाउनुहोस्',
 'feedback-error2' => 'त्रुटि: सम्पादन असफल',
 'feedback-close' => 'गरियो',
 
@@ -3456,4 +3506,9 @@ $5
 'api-error-unknownerror' => 'अज्ञात त्रुटि: "$1".',
 'api-error-uploaddisabled' => 'यस विकिमा अपलोड निस्क्रिय गरिएकोछ।',
 
+# Special:ExpandTemplates
+'expand_templates_output' => 'परिणाम',
+'expand_templates_generate_rawhtml' => 'सुद्ध HTML देखाउने',
+'expand_templates_preview' => 'पूर्वावलोकन',
+
 );
index 0e7dfad..18d53ff 100644 (file)
@@ -44,16 +44,13 @@ $digitTransformTable = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'लिङ्कतेत अन्दरलाइन यानादिसँ:',
-'tog-justify' => 'अनुच्छेद धंकादिसँ',
 'tog-hideminor' => 'न्हुगु हिलेज्याय् चिधंगु सम्पादन सुचुकादिसँ',
 'tog-extendwatchlist' => 'वाचलिस्टयात परिमार्जित याना सकल स्वेज्युगु हिलेज्या क्यनादिसँ, दकले लिपाया जक्क मखु',
 'tog-usenewrc' => 'एन्ह्यान्स्ड् न्हुगु हिलेज्या (जाभास्क्रिप्ट)',
 'tog-numberheadings' => 'अटो-ल्याखँ हेडिङ',
 'tog-showtoolbar' => 'सम्पादन टुलबार क्यनादिसँ (जाभास्क्रिप्ट)',
 'tog-editondblclick' => 'दबल क्लिकय् पौ सम्पादन यानादिसँ (जाभास्क्रिप्ट)',
-'tog-editsection' => '[सम्पादन] लिङ्कं सेक्सन सम्पादन यायेज्युगु यानादिसँ',
 'tog-editsectiononrightclick' => 'सेक्सनया छ्यँआखले राइट क्लिक याना सेक्सन सम्पादन यायेज्युगु यानादिसँ (जाभास्क्रिप्ट)',
-'tog-showtoc' => 'कन्टेण्टया धलः क्यनादिसँ (३गु स्वया अप्व शिर्षक दुगु पौया निंति)',
 'tog-rememberpassword' => 'जिगु लग इन थ्व कम्प्युतरय् लुमंकादिसँ (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'जिं देकागु / न्ह्यथनागु पौयात जिगु दृष्टिधलः(watchlist)य् तयादिसँ',
 'tog-watchdefault' => 'जिं सम्पादन यानागु पौयात जिगु वाचलिस्टय् तयादिसँ',
@@ -62,7 +59,6 @@ $messages = array(
 'tog-minordefault' => 'सकल सम्पादनतेत डिफल्टं चीधंगु यानादिसँ',
 'tog-previewontop' => 'सम्पादन सन्दुक स्वया न्ह्यः प्रिभ्यु क्यनादिसँ',
 'tog-previewonfirst' => 'न्हापाँगु सम्पादन स्वया न्ह्यः प्रिभ्यु क्यनादिसँ',
-'tog-nocache' => 'पौ क्याशिङ (caching) डिजेबल यानादिसँ',
 'tog-enotifwatchlistpages' => 'जिगु वाचलिस्टया पौ सम्पादन जुइबिले जितः इ-मेल यानादिसँ',
 'tog-enotifusertalkpages' => 'जिगु खँल्हाबल्हा पौ सम्पादन जुइबिले जितः इ-मेल यानादिसँ',
 'tog-enotifminoredits' => 'पौया चीधंगु सम्पादनया निंतिं नं जितः इ-मेल यानादिसँ',
index 7bd2cea..6d45997 100644 (file)
@@ -55,6 +55,7 @@
  * @author Troefkaart
  * @author Tvdm
  * @author User555
+ * @author Vogone
  * @author WTM
  * @author Wiki13
  * @author Wikiklaas
@@ -415,14 +416,13 @@ $messages = array(
 'tog-ccmeonemails' => 'Mij een kopie zenden van e-mails die ik naar andere gebruikers stuur',
 'tog-diffonly' => 'Pagina-inhoud onder wijzigingen niet weergeven',
 'tog-showhiddencats' => 'Verborgen categorieën weergeven',
-'tog-noconvertlink' => 'Paginanaamconversie uitschakelen',
 'tog-norollbackdiff' => 'Wijzigingen weglaten na terugdraaien',
-'tog-useeditwarning' => 'U waarschuwen als u een bewerkte pagina die nog niet is opgeslagen wil verlaten',
+'tog-useeditwarning' => 'Waarschuwen als u een bewerkte pagina wilt verlaten die nog niet is opgeslagen',
 'tog-prefershttps' => 'Altijd een beveiligde verbinding gebruiken wanneer u bent aangemeld',
 
 'underline-always' => 'Altijd',
 'underline-never' => 'Nooit',
-'underline-default' => 'Standaard in uw vormgeving of webbrowser',
+'underline-default' => 'Standaard gedrag van vormgeving of webbrowser',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Lettertypestijl bewerkingsvenster:',
@@ -532,7 +532,7 @@ $messages = array(
 'qbedit' => 'Bewerken',
 'qbpageoptions' => 'Deze pagina',
 'qbmyoptions' => "Mijn pagina's",
-'faq' => 'Veel gestelde vragen',
+'faq' => 'Veelgestelde vragen',
 'faqpage' => 'Project:Veelgestelde vragen',
 
 # Vector skin
@@ -542,7 +542,6 @@ $messages = array(
 'vector-action-protect' => 'Beveiligen',
 'vector-action-undelete' => 'Terugplaatsen',
 'vector-action-unprotect' => 'Beveiliging wijzigen',
-'vector-simplesearch-preference' => 'Vereenvoudigd zoeken inschakelen (alleen voor het uiterlijk Vector)',
 'vector-view-create' => 'Aanmaken',
 'vector-view-edit' => 'Bewerken',
 'vector-view-history' => 'Geschiedenis weergeven',
@@ -831,8 +830,6 @@ Vergeet niet uw [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te pass
 'gotaccountlink' => 'Aanmelden',
 'userlogin-resetlink' => 'Bent u uw aanmeldgegevens vergeten?',
 'userlogin-resetpassword-link' => 'Wachtwoord vergeten?',
-'helplogin-url' => 'Help:Aanmelden',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hulp bij aanmelden]]',
 'userlogin-loggedin' => 'U bent al aangemeld als {{GENDER:$1|$1}}.
 Gebruik het onderstaande formulier om aan te melden als een andere gebruiker.',
 'userlogin-createanother' => 'Nog een gebruiker aanmaken',
@@ -938,6 +935,10 @@ Wacht alstublieft $1 voordat u het opnieuw probeert.',
 'suspicious-userlogout' => 'Uw verzoek om af te melden is genegeerd, omdat het lijkt alsof het verzoek is verzonden door een browser of cacheproxy die stuk is.',
 'createacct-another-realname-tip' => 'Echte naam is optioneel.
 Als u deze opgeeft, wordt deze naam gebruikt worden om u erkenning te geven voor uw werk.',
+'pt-login' => 'Aanmelden',
+'pt-login-button' => 'Aanmelden',
+'pt-createaccount' => 'Registreren',
+'pt-userlogout' => 'Afmelden',
 
 # Email sending
 'php-mail-error-unknown' => 'Er is een onbekende fout opgetreden in de mail()-functie van PHP',
@@ -946,8 +947,7 @@ Als u deze opgeeft, wordt deze naam gebruikt worden om u erkenning te geven voor
 
 # Change password dialog
 'changepassword' => 'Wachtwoord wijzigen',
-'resetpass_announce' => 'U bent aangemeld met een tijdelijke code die u per e-mail is toegezonden.
-Voer een nieuw wachtwoord in om het aanmelden te voltooien:',
+'resetpass_announce' => 'Voer een nieuw wachtwoord in om het aanmelden te voltooien:',
 'resetpass_text' => '<!-- Voeg hier tekst toe -->',
 'resetpass_header' => 'Wachtwoord wijzigen',
 'oldpassword' => 'Huidige wachtwoord:',
@@ -963,8 +963,16 @@ Wacht alstublieft $1 voordat u het opnieuw probeert.',
 'resetpass-submit-cancel' => 'Annuleren',
 'resetpass-wrong-oldpass' => 'Het huidige of tijdelijke wachtwoord is ongeldig.
 Mogelijk hebt u uw wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aangevraagd.',
+'resetpass-recycled' => 'Gelieve uw wachtwoord op iets anders dan uw huidige wachtwoord in te stellen.',
+'resetpass-temp-emailed' => 'U bent aangemeld met een tijdelijk code die u per e-mail hebt ontvangen.
+Om het inloggen te voltooien moet u hier een nieuw wachtwoord instellen:',
 'resetpass-temp-password' => 'Tijdelijk wachtwoord:',
 'resetpass-abort-generic' => 'De wachtwoordwijziging is afgebroken door een uitbreiding.',
+'resetpass-expired' => 'Uw wachtwoord is verlopen. Stel een nieuw wachtwoord om aan te melden.',
+'resetpass-expired-soft' => 'Uw wachtwoord is verlopen en moet opnieuw worden ingesteld. Kies nu een nieuw wachtwoord of klik op "{{int:resetpass-submit-cancel}}" om dit later te doen.',
+'resetpass-validity-soft' => 'Uw wachtwoord is niet geldig: $1
+
+Kies nu een nieuw wachtwoord of klik "{{int:resetpass-submit-cancel}}" om het later opnieuw in te stellen.',
 
 # Special:PasswordReset
 'passwordreset' => 'Wachtwoord opnieuw instellen',
@@ -1276,6 +1284,7 @@ Hieronder staat de tekst waarin de wijziging ongedaan is gemaakt.
 Controleer voor het opslaan of het resultaat gewenst is.',
 'undo-failure' => 'De wijziging kan niet ongedaan gemaakt worden vanwege andere strijdige wijzigingen.',
 'undo-norev' => 'De bewerking kon niet ongedaan gemaakt worden, omdat die niet bestaat of is verwijderd.',
+'undo-nochange' => 'De bewerking lijkt al ongedaan gemaakt te zijn.',
 'undo-summary' => 'Versie $1 van [[Special:Contributions/$2|$2]] ([[User talk:$2|overleg]]) ongedaan gemaakt',
 'undo-summary-username-hidden' => 'Versie $1 door een verborgen gebruiker ongedaan gemaakt',
 
@@ -1360,8 +1369,10 @@ U kunt deze verschillen bekijken. Er kunnen details te vinden zijn in het [{{ful
 'revdelete-show-file-submit' => 'Ja',
 'revdelete-selected' => "'''Geselecteerde {{PLURAL:$2|bewerking|bewerkingen}} van [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Geselecteerde logboekhandeling|Geselecteerde logboekhandelingen}}:'''",
-'revdelete-text' => "'''Verwijderde bewerkingen zijn zichtbaar in de geschiedenis en logboeken, maar delen van de inhoud zijn niet langer publiek toegankelijk.'''
-Andere beheerders van {{SITENAME}} kunnen de verborgen inhoud benaderen en de verwijdering ongedaan maken met behulp van dit formulier, tenzij er aanvullende beperkingen gelden die zijn ingesteld door de systeembeheerder.",
+'revdelete-text-text' => 'Verwijderde versies zijn nog zichtbaar in de geschiedenis, maar delen van de inhoud zijn niet openbaar.',
+'revdelete-text-file' => 'Verwijderde versies zijn nog zichtbaar in de bestandsgeschiedenis, maar delen van de inhoud zijn niet openbaar.',
+'logdelete-text' => 'Verwijderde logboekregels zijn nog zichtbaar in de logboeken, maar delen van de inhoud zijn niet openbaar.',
+'revdelete-text-others' => 'Andere beheerders van {{SITENAME}} kunnen de verborgen inhoud nog steeds inzien en weer zichtbaar maken via deze interface, tenzij er aanvullende beperkingen zijn ingesteld.',
 'revdelete-confirm' => 'Bevestig dat u dit wilde doen, dat u de consequenties begrijpt en dat u dit doet in overeenstemming met het geldende [[{{MediaWiki:Policy-url}}|beleid]].',
 'revdelete-suppress-text' => "Gebruik versies verbergen '''alleen''' in de volgende gevallen:
 * Mogelijk smadelijke informatie;
@@ -1457,7 +1468,7 @@ Let op dat het gebruiken van de navigatiekoppelingen deze kolom opnieuw instelt.
 'showhideselectedversions' => 'Geselecteerde versies weergeven/verbergen',
 'editundo' => 'ongedaan maken',
 'diff-empty' => '(geen verschil)',
-'diff-multi-sameuser' => '({{PLURAL:$1|Een tussenliggende revisie|$1 tussenliggende revisies}} door dezelfde gebruiken niet weergegeven)',
+'diff-multi-sameuser' => '({{PLURAL:$1|Een tussenliggende revisie|$1 tussenliggende revisies}} door dezelfde gebruiker niet weergegeven)',
 'diff-multi-otherusers' => '({{PLURAL:$1|Een tussenliggende revisie|$1 tussenliggende revisies}} door {{PLURAL:$2|een andere gebruiker|$2 gebruikers}} niet weergegeven)',
 'diff-multi-manyusers' => '($1 tussenliggende {{PLURAL:$1|versie|versies}} door meer dan $2 {{PLURAL:$2|gebruiker|gebruikers}}  worden niet weergegeven)',
 'difference-missing-revision' => '{{PLURAL:$2|Eén versie|$2 versies}} van deze verschillen ($1) {{PLURAL:$2|is|zijn}} niet aangetroffen.
@@ -1499,13 +1510,14 @@ Probeer een andere zoekopdracht.',
 'search-file-match' => '(komt overeen met de inhoud van het bestand)',
 'search-suggest' => 'Bedoelde u: $1',
 'search-interwiki-caption' => 'Zusterprojecten',
-'search-interwiki-default' => '$1 resultaten:',
+'search-interwiki-default' => 'Resultaten van $1:',
 'search-interwiki-more' => '(meer)',
 'search-relatedarticle' => 'Gerelateerd',
 'searcheverything-enable' => 'In alle naamruimten zoeken',
 'searchrelated' => 'gerelateerd',
 'searchall' => 'alle',
 'showingresults' => "Hieronder {{PLURAL:$1|staat '''1''' resultaat|staan '''$1''' resultaten}} vanaf #'''$2'''.",
+'showingresultsinrange' => 'Hieronder {{PLURAL:$1|wordt|worden}} maximaal {{PLURAL:$1|<strong>1</strong> resultaat|<strong>$1 </strong>resultaten}} weergegeven in het bereik #<strong>$2</strong> tot #<strong>$3</strong>.',
 'showingresultsnum' => "Hieronder {{PLURAL:$3|staat '''1''' resultaat|staan '''$3''' resultaten}} vanaf #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Resultaat '''$1''' van '''$3'''|Resultaten '''$1 - $2''' van '''$3'''}} voor '''$4'''",
 'search-nonefound' => 'Er zijn geen resultaten voor uw zoekopdracht.',
@@ -1829,14 +1841,26 @@ Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor u
 'recentchanges-legend-heading' => "'''Legenda:'''",
 'recentchanges-legend-newpage' => "Zie ook de [[Special:NewPages|Lijst met nieuwe pagina's]].",
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "Wijzigingen sinds '''$2''' (met een maximum van '''$1''' wijzigingen).",
+'rcnotefrom' => 'Wijzigingen sinds <strong>$3 om $4</strong> (maximaal <strong>$1</strong> {{PLURAL:$1|wijziging|wijzigingen}}).',
 'rclistfrom' => 'Wijzigingen bekijken vanaf $1',
 'rcshowhideminor' => 'Kleine wijzigingen $1',
+'rcshowhideminor-show' => 'weergeven',
+'rcshowhideminor-hide' => 'verbergen',
 'rcshowhidebots' => 'bots $1',
+'rcshowhidebots-show' => 'weergeven',
+'rcshowhidebots-hide' => 'verbergen',
 'rcshowhideliu' => 'geregistreerde gebruikers $1',
+'rcshowhideliu-show' => 'weergeven',
+'rcshowhideliu-hide' => 'verbergen',
 'rcshowhideanons' => 'anonieme gebruikers $1',
+'rcshowhideanons-show' => 'weergeven',
+'rcshowhideanons-hide' => 'verbergen',
 'rcshowhidepatr' => 'gecontroleerde bewerkingen $1',
+'rcshowhidepatr-show' => 'weergeven',
+'rcshowhidepatr-hide' => 'verbergen',
 'rcshowhidemine' => 'mijn bewerkingen $1',
+'rcshowhidemine-show' => 'weergeven',
+'rcshowhidemine-hide' => 'verbergen',
 'rclinks' => 'De $1 laatste wijzigingen bekijken in de laatste $2 dagen<br />$3',
 'diff' => 'wijz',
 'hist' => 'gesch',
@@ -1973,6 +1997,8 @@ Vraag iemand die onderdrukte bestandsgegevens kan bekijken om de situatie opnieu
 'php-uploaddisabledtext' => 'Het uploaden van bestanden is uitgeschakeld in PHP.
 Controleer de instelling "file_uploads".',
 'uploadscripted' => 'Dit bestand bevat HTML- of scriptcode die foutief door uw browser kan worden weergegeven.',
+'uploadscriptednamespace' => 'Dit SVG-bestand bevat een ongeldige naamruimte "$1".',
+'uploadinvalidxml' => 'De XML in het geüploade bestand kon niet worden geparst.',
 'uploadvirus' => 'Het bestand bevat een virus! Details: $1',
 'uploadjava' => 'Het bestand is een ZIP-bestand dat een Java .class-bestand bevat.
 Het uploaden van Java-bestanden is niet toegestaan omdat hiermee beveiligingsinstellingen omzeild kunnen worden.',
@@ -2351,10 +2377,20 @@ De pagina's zijn ook niet als sjabloon opgenomen.",
 'deadendpagestext' => "De onderstaande pagina's verwijzen niet naar andere pagina's in deze wiki.",
 'protectedpages' => "Beveiligde pagina's",
 'protectedpages-indef' => 'Alleen blokkades zonder vervaldatum',
+'protectedpages-summary' => "Deze pagina bevat een lijst met beveiligde pagina's. Zie [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] voor een lijst van pagina's die niet aangemaakt mogen worden.",
 'protectedpages-cascade' => 'Alleen beveiligingen met de cascade-optie',
 'protectedpages-noredirect' => 'Doorverwijzingen verbergen',
 'protectedpagesempty' => "Er zijn momenteel geen pagina's beveiligd die aan deze voorwaarden voldoen.",
+'protectedpages-timestamp' => 'Tijdstip',
+'protectedpages-page' => 'Pagina',
+'protectedpages-expiry' => 'Verloopt',
+'protectedpages-performer' => 'Beveiligd door',
+'protectedpages-params' => 'Beveiligingsopties',
+'protectedpages-reason' => 'Reden',
+'protectedpages-unknown-timestamp' => 'Onbekend',
+'protectedpages-unknown-performer' => 'Onbekende gebruiker',
 'protectedtitles' => 'Beveiligde paginanamen',
+'protectedtitles-summary' => "Deze pagina bevat een lijst met pagina's die niet mogen worden aangemaakt. Zie [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] voor de lijst met beveiligde pagina's.",
 'protectedtitlesempty' => 'Er zijn geen paginanamen beveiligd die aan deze voorwaarden voldoen.',
 'listusers' => 'Gebruikerslijst',
 'listusers-editsonly' => 'Alleen gebruikers met bewerkingen weergeven',
@@ -2464,7 +2500,7 @@ Heeft tenminste een topleveldomein nodig, zoals bijvoorbeeld "*.org".<br />
 'listgrouprights' => 'Rechten van gebruikersgroepen',
 'listgrouprights-summary' => 'Op deze pagina staan de gebruikersgroepen in deze wiki beschreven, met hun bijbehorende rechten.
 Er kan [[{{MediaWiki:Listgrouprights-helppage}}|extra informatie]] over individuele rechten aanwezig zijn.',
-'listgrouprights-key' => 'Leganda:
+'listgrouprights-key' => 'Legenda:
 * <span class="listgrouprights-granted">Toegewezen recht</span>
 * <span class="listgrouprights-revoked">Ingetrokken recht</span>',
 'listgrouprights-group' => 'Groep',
@@ -2633,7 +2669,7 @@ Het verwijderen van dit soort pagina's is met rechten beperkt om het per ongeluk
 'delete-warning-toobig' => 'Deze pagina heeft een lange bewerkingsgeschiedenis, meer dan $1 {{PLURAL:$1|versie|versies}}.
 Het verwijderen van deze pagina kan de werking van de database van {{SITENAME}} verstoren.
 Wees voorzichtig.',
-'deleting-backlinks-warning' => "'''Waarschuwing:''' andere pagina's gebruiken of verwijzen naar de pagina die u wilt verwijderen.",
+'deleting-backlinks-warning' => "'''Waarschuwing:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere pagina's]] gebruiken of verwijzen naar de pagina die u wilt verwijderen.",
 
 # Rollback
 'rollback' => 'Wijzigingen ongedaan maken',
@@ -2813,8 +2849,10 @@ De laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergege
 'sp-contributions-blocked-notice-anon' => 'Dit IP-adres is geblokkeerd.
 De laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergegeven:',
 'sp-contributions-search' => 'Zoeken naar bijdragen',
+'sp-contributions-suppresslog' => 'onderdrukte gebruikersbijdragen',
 'sp-contributions-username' => 'IP-adres of gebruikersnaam:',
 'sp-contributions-toponly' => 'Alleen nieuwste versies weergeven',
+'sp-contributions-newonly' => "Alleen nieuwe pagina's weergeven",
 'sp-contributions-submit' => 'Bekijken',
 
 # What links here
@@ -2848,7 +2886,7 @@ Geef hieronder een reden op (bijvoorbeeld welke pagina's gevandaliseerd zijn).",
 'ipadressorusername' => 'IP-adres of gebruikersnaam:',
 'ipbexpiry' => 'Vervalt (maak een keuze):',
 'ipbreason' => 'Reden:',
-'ipbreason-dropdown' => "*Veel voorkomende redenen voor blokkades
+'ipbreason-dropdown' => "*Veelvoorkomende redenen voor blokkades
 ** Foutieve informatie invoeren
 ** Verwijderen van informatie uit pagina's
 ** Spamkoppeling naar externe websites
@@ -2916,7 +2954,8 @@ Zie de [[Special:BlockList|blokkadelijst]] voor recente blokkades.',
 'change-blocklink' => 'blokkade wijzigen',
 'contribslink' => 'bijdragen',
 'emaillink' => 'e-mail verzenden',
-'autoblocker' => "Automatisch geblokkeerd omdat het IP-adres overeenkomt met dat van [[User:\$1|\$1]], die geblokkeerd is om de volgende reden: \"'''\$2'''\"",
+'autoblocker' => 'Automatisch geblokkeerd omdat uw IP-adres onlangs gebruikt is door "[[User:$1|$1]]".
+De reden voor blokkade van $1 is: \'\'$2\'\'',
 'blocklogpage' => 'Blokkeerlogboek',
 'blocklog-showlog' => 'Deze gebruiker is voorheen geblokkeerd geweest.
 Het blokkeerlogboek wordt hieronder ter referentie weergegeven:',
@@ -3130,6 +3169,7 @@ $2',
 'thumbnail_image-type' => 'Dit bestandstype wordt niet ondersteund',
 'thumbnail_gd-library' => 'De instellingen voor de GD-bibliotheek zijn incompleet. De functie $1 ontbreekt',
 'thumbnail_image-missing' => 'Het bestand lijkt niet aanwezig te zijn: $1',
+'thumbnail_image-failure-limit' => 'Het maken van een miniatuurafbeelding is te vaak mislukt ($1 keer of vaker). Probeer het later nog eens.',
 
 # Special:Import
 'import' => "Pagina's importeren",
@@ -4096,7 +4136,7 @@ U kunt ook [[Special:EditWatchlist|het standaard bewerkingsscherm gebruiken]].',
 'version-parser-function-hooks' => 'Parserfunctiehooks',
 'version-hook-name' => 'Hooknaam',
 'version-hook-subscribedby' => 'Geabonneerd door',
-'version-version' => '(Versie $1)',
+'version-version' => '($1)',
 'version-license' => 'Licentie voor MediaWiki',
 'version-ext-license' => 'Licentie',
 'version-ext-colheader-name' => 'Uitbreiding',
@@ -4386,6 +4426,4 @@ Vrijwel alle tekst tussen dubbele accolades wordt gesubstitueerd.',
 'expand_templates_generate_rawhtml' => 'Ruwe HTML weergeven',
 'expand_templates_preview' => 'Voorvertoning',
 
-# Unknown messages
-'uploadinvalidxml' => 'De XML in het geüploade bestand kon niet worden geparst.',
 );
index ef11ac5..ec6fdce 100644 (file)
@@ -525,7 +525,6 @@ Neem contact op met je internetprovider of je helpdesk en stel die op de hoogte
 'sorbsreason' => 'Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.',
 'sorbs_create_account_reason' => 'Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.
 Je kunt geen gebruiker registreren.',
-'cant-block-while-blocked' => 'Je kunt andere gebruikers niet blokkeren terwijl je zelf geblokkeerd bent.',
 'cant-see-hidden-user' => 'De gebruiker die je probeert te blokken is al geblokkeerd en verborgen.
 Omdat je het recht "hideuser" niet hebt, kun je de blokkade van de gebruiker niet bekijken of bewerken.',
 'ipbblocked' => 'Je kunt geen andere gebruikers (de)blokkeren, omdat je zelf geblokkeerd bent',
@@ -604,7 +603,6 @@ Sla de uitvoer op je eigen computer op, en voeg die daarna hier toe.',
 'tooltip-pt-watchlist' => "Overzicht van pagina's die je volgt",
 'tooltip-pt-mycontris' => 'Overzicht van je bijdragen',
 'tooltip-pt-login' => 'Je wordt van harte uitgenodigd om je aan te melden als gebruiker, maar dit is niet verplicht',
-'tooltip-pt-anonlogin' => 'Je wordt van harte uitgenodigd om je aan te melden als gebruiker, maar dit is niet verplicht',
 'tooltip-ca-edit' => 'Je kunt deze pagina bewerken.
 Gebruik de voorbeeldweergaveknop alvorens te bewaren.',
 'tooltip-ca-viewsource' => 'Deze pagina is beveiligd.
@@ -645,7 +643,6 @@ Het e-mailprogramma meldde: $1',
 'confirmemail_success' => 'Je e-mailadres is bevestigd.
 Je kunt jezelf nu [[Special:UserLogin|aanmelden]] en {{SITENAME}} gebruiken.',
 'confirmemail_loggedin' => 'Je e-mailadres is nu bevestigd.',
-'confirmemail_error' => 'Er is iets verkeerd gegaan tijdens het opslaan van je bevestiging.',
 'confirmemail_body' => 'Iemand, waarschijnlijk jijzelf, met het IP-adres $1,
 heeft zich met dit e-mailadres geregistreerd als gebruiker "$2" op {{SITENAME}}.
 
index eb90f96..8ffd6c0 100644 (file)
@@ -356,7 +356,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Send meg kopi av e-postane eg sender til andre brukarar',
 'tog-diffonly' => 'Ikkje vis sideinnhaldet under skilnadene mellom versjonane',
 'tog-showhiddencats' => 'Vis gøymde kategoriar',
-'tog-noconvertlink' => 'Slå av konvertering av sidetitlar',
 'tog-norollbackdiff' => 'Ikkje vis skilnad etter attenderulling',
 'tog-useeditwarning' => 'Gje ei åtvaring om eg går ut av ei redigeringsside og ikkje alle endringar er lagra',
 'tog-prefershttps' => 'Alltid bruk ei trygg kopling når du er innlogga',
@@ -460,7 +459,7 @@ $messages = array(
 'newwindow' => '(vert opna i eit nytt vindauge)',
 'cancel' => 'Avbryt',
 'moredotdotdot' => 'Meir …',
-'morenotlisted' => 'Meir som ikkje er lista opp …',
+'morenotlisted' => 'Lista er ikkje heil.',
 'mypage' => 'Sida mi',
 'mytalk' => 'Diskusjon',
 'anontalk' => 'Diskusjonside for denne IP-adressa',
@@ -483,7 +482,6 @@ $messages = array(
 'vector-action-protect' => 'Vern',
 'vector-action-undelete' => 'Gjenopprett',
 'vector-action-unprotect' => 'Endra vern',
-'vector-simplesearch-preference' => 'Slå på forenkla søkjefelt (berre for Vector-drakta)',
 'vector-view-create' => 'Opprett',
 'vector-view-edit' => 'Endre',
 'vector-view-history' => 'Sjå historikken',
@@ -562,7 +560,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'Om {{SITENAME}}',
 'aboutpage' => 'Project:Om',
-'copyright' => 'Innhaldet er utgjeve under $1.',
+'copyright' => 'Innhaldet er utgjeve under $1 minder anna er oppgjeve.',
 'copyrightpage' => '{{ns:project}}:Opphavsrett',
 'currentevents' => 'Aktuelt',
 'currentevents-url' => 'Project:Aktuelt',
@@ -759,8 +757,6 @@ Gløym ikkje å endra [[Special:Preferences|innstillingane dine for {{SITENAME}}
 'gotaccountlink' => 'Logg inn',
 'userlogin-resetlink' => 'Har du gløymd påloggingsopplysingane dine?',
 'userlogin-resetpassword-link' => 'Gløymt passordet ditt?',
-'helplogin-url' => 'Help:Innlogging',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjelp med innlogging]]',
 'createacct-join' => 'Skriv inn informasjonen din under.',
 'createacct-another-join' => 'Skriv inn informasjonen til den nye kontoen under',
 'createacct-emailrequired' => 'E-postadresse:',
@@ -1210,8 +1206,6 @@ Du kan sjå skilnaden; detaljar finst i [{{fullurl:{{#Special:Log}}/suppcess|pag
 'revdelete-show-file-submit' => 'Ja',
 'revdelete-selected' => "'''{{PLURAL:$2|Vald versjon|Valde versjonar}} av [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Vald loggoppføring|Valde loggoppføringar}}:'''",
-'revdelete-text' => "Sletta versjonar og oppføringar vert framleis synlege i sidehistorikken og loggane, men delar av innhaldet deira vert ikkje lenger offentleggjort.'''
-Andre administratorar på {{SITENAME}} kan framleis sjå det gøymde innhaldet og attopprette det, med mindre fleire avgrensingar vert lagde inn av sideoperatørane.",
 'revdelete-confirm' => 'Stadfest at du ynskjer å gjera dette, at du skjønar konsekvensane, og at du gjer det i samsvar med [[{{MediaWiki:Policy-url}}|retningslinene]].',
 'revdelete-suppress-text' => "Løyning av sideversjonar bør '''berre''' nyttast i desse tilfella:
 * Mogeleg ærekrenkjande informasjon
@@ -1305,6 +1299,7 @@ Pass på at den nye sida også har innhald frå den innfletta sida.',
 'showhideselectedversions' => 'Vis/løyn valde versjonar',
 'editundo' => 'angre',
 'diff-empty' => '(Ingen skilnad)',
+'diff-multi-sameuser' => '({{PLURAL:$1|Éin mellomversjon|$1 mellomversjonar}} av den same brukaren er ikkje {{PLURAL:$1|vist|viste}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|Ein mellomversjon|$1 mellomversjonar}} av meir enn $2 {{PLURAL:$2|brukar|brukarar}}  er ikkje {{PLURAL:$1|vist|viste}})',
 'difference-missing-revision' => '{{PLURAL:$2|Éin versjon|$2 versjonar}} av skilnaden ($1) vart ikkje {{PLURAL:$2|funnen|funne}}.
 
@@ -1472,6 +1467,7 @@ Denne informasjonen vil vera offentleg.',
 'prefs-displaysearchoptions' => 'Val for vising',
 'prefs-displaywatchlist' => 'Val for vising',
 'prefs-diffs' => 'Skilnader',
+'prefs-help-prefershttps' => 'Denne innstillinga vil verta verksam neste gongen du loggar inn.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-postadressa ser ut til å vera gyldig',
@@ -2388,6 +2384,7 @@ Attendemelding og hjelp:
 'delete-edit-reasonlist' => 'Endre grunnar til sletting',
 'delete-toobig' => 'Denne sida har ein stor endringsshistorikk, med over {{PLURAL:$1|$1&nbsp;endring|$1&nbsp;endringar}}. Sletting av slike sider er avgrensa for å unngå utilsikta forstyrring av {{SITENAME}}.',
 'delete-warning-toobig' => 'Denne sida har ein lang endringshistorikk, med meir enn {{PLURAL:$1|$1&nbsp;endring|$1&nbsp;endringar}}. Dersom du slettar henne kan det forstyrre handlingar i databasen til {{SITENAME}}, ver varsam.',
+'deleting-backlinks-warning' => "'''Åtvaring''': Andre sider lenkjer til eller inkluderer sida du er i ferd med å sletta.",
 
 # Rollback
 'rollback' => 'Rull attende endringar',
index c5a6f89..1e20a2a 100644 (file)
@@ -245,7 +245,6 @@ Proba [[Special:Search|sercho sur li wiki]] por relatet pagines.',
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|chanjo|chanjos}}',
 'recentchanges' => 'Resenti chanjos',
-'rcnote' => "Subu es {{PLURAL:$1| '''1''' chanje|li lasti '''$1''' chanjes}} in li lasti {{PLURAL:$2|die|'''$2''' dies}}, fro $4, $5.",
 'rcshowhideminor' => '$1 minori modifikos',
 'rcshowhideanons' => '$1 anonimi useres',
 'rcshowhidemine' => '$1 men modifikos',
index 11c0709..fbd899e 100644 (file)
@@ -226,7 +226,6 @@ $messages = array(
 'nchanges' => '$1 {{PLURAL:$1|łahgo ályaaígíí|łahgo ályaaígíí}}',
 'recentchanges' => 'Áníídí łahgo ályaaígíí',
 'recentchanges-feed-description' => 'áníídí łahgo ályaaígíí',
-'rcnote' => "{{PLURAL:$2|jį́į́dą́ą́ʼ |}} {{PLURAL:$1|'''1''' łahgo ályaaígíí tʼéiyá|'''$1''' łahgo ályaaígíí}}, {{PLURAL:$2||'''$2di''' yiskánídą́ą́ʼ kojįʼ, }} ($5, $4)",
 'rcshowhideminor' => 'naaltsoos tʼáá áłtsʼíísígo łahgo ályaaígíí $1',
 'rcshowhidebots' => "''bots''ígíí $1",
 'rcshowhideliu' => 'chodayoołʼįįhí ééhozinígíí $1',
index c7c8a09..4108ce7 100644 (file)
@@ -292,8 +292,8 @@ $linkTrail = "/^([a-zàâçéèêîôû]+)(.*)$/sDu";
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Soslinhar los ligams :',
-'tog-hideminor' => 'Amagar los darrièrs cambiaments menors',
-'tog-hidepatrolled' => 'Amagar las modificacions susvelhadas dels darrièrs cambiaments',
+'tog-hideminor' => 'Amagar los cambiaments menors dins los darrièrs cambiaments',
+'tog-hidepatrolled' => 'Amagar las modificacions susvelhadas dins los 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' => 'Agropar los cambiaments per pagina dins los darrièrs cambiaments e la lista de seguiment',
@@ -327,7 +327,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Me mandar una còpia dels corrièrs electronics que mandi als autres utilizaires',
 'tog-diffonly' => 'Far pas veire lo contengut de las paginas jos las difs',
 'tog-showhiddencats' => 'Afichar las categorias amagadas',
-'tog-noconvertlink' => 'Desactivar la conversion dels títols',
 'tog-norollbackdiff' => 'Ometre lo diff aprèp l’utilizacion d’un revert',
 'tog-useeditwarning' => 'M’avisar quand quiti una pagina de modificacion sens publicar los cambiaments',
 'tog-prefershttps' => 'Utilizar totjorn una connexion securizada en essent connectat',
@@ -454,7 +453,6 @@ $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",
@@ -619,9 +617,9 @@ Una lista de las paginas especialas pòt èsser trobada sus [[Special:SpecialPag
 'databaseerror-query' => 'Requèsta : $1',
 'databaseerror-function' => 'Foncion : $1',
 'databaseerror-error' => 'Error : $1',
-'laggedslavemode' => 'Atencion : Aquesta pagina pòt conténer pas totes los darrièrs cambiaments efectuats.',
+'laggedslavemode' => '<strong>Atencion :</strong> Aquesta pagina pòt conténer pas totes los darrièrs cambiaments efectuats.',
 'readonly' => 'Mesas a jorn blocadas sus la banca de donadas',
-'enterlockreason' => 'Indicatz la rason del blocatge, e mai una estimacion de sa durada',
+'enterlockreason' => 'Indicatz la rason del varrolhatge, e mai una estimacion de sa durada',
 'readonlytext' => "Los ajustons e mesas a jorn de la banca de donadas son actualament blocats, probablament per permetre la mantenença de la banca, aprèp aquò, tot dintrarà dins l'òrdre.
 
 L’administrator qu'a varrolhat la banca de donadas a balhat l’explicacion seguenta : $1",
@@ -697,7 +695,7 @@ L'administrator que l'a varrolhat a provesit aqueste motiu : « $3 ».",
 # Login and logout pages
 'logouttext' => "'''Ara, sètz desconnectat.'''
 
-Notatz que d'unas paginas pòdon èsser encara afichadas coma s'eratz encara connectat, fins al moment qu'escafaretz l'amagatal de vòstre navigador.",
+Notatz que d'unas paginas pòdon èsser encara afichadas coma s'eratz encara connectat, fins al moment qu'escafaretz l'escondedor de vòstre navigador.",
 '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}}]].",
@@ -735,8 +733,6 @@ Doblidetz pas de modificar [[Special:Preferences|vòstras preferéncias per {{SI
 'gotaccountlink' => 'Identificatz-vos',
 'userlogin-resetlink' => 'Avètz doblidat vòstres detalhs de connexion ?',
 'userlogin-resetpassword-link' => 'Senhal doblidat ?',
-'helplogin-url' => 'Help:Connexion',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ajuda a la connexion]]',
 'userlogin-loggedin' => 'Sètz ja connectat en tant que {{GENDER:$1|$1}}.
 Utilizatz lo formulari çaijós per vos connectar amb un autre utilizaire.',
 'userlogin-createanother' => 'Crear un autre compte',
@@ -827,6 +823,10 @@ Esperatz $1 abans d’ensajar tornarmai.',
 '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.',
 'createacct-another-realname-tip' => 'Lo nom vertadièr es opcional.
 Se decidissètz de lo provesir, serà utilizat per atribuir a l’utilizaire sos trabalhs.',
+'pt-login' => 'Se connectar',
+'pt-login-button' => 'Se connectar',
+'pt-createaccount' => 'Crear un compte',
+'pt-userlogout' => 'Se desconnectar',
 
 # Email sending
 'php-mail-error-unknown' => 'Error desconeguda dins la foncion mail() de PHP.',
@@ -835,7 +835,7 @@ Se decidissètz de lo provesir, serà utilizat per atribuir a l’utilizaire sos
 
 # Change password dialog
 'changepassword' => 'Modificacion del senhal',
-'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í :',
+'resetpass_announce' => 'Per acabar l’enregistrament, vos cal picar un senhal novèl.',
 'resetpass_text' => '<!-- Apondètz lo tèxte aicí -->',
 'resetpass_header' => 'Modificar lo senhal del compte',
 'oldpassword' => 'Senhal ancian :',
@@ -843,6 +843,8 @@ Se decidissètz de lo provesir, serà utilizat per atribuir a l’utilizaire sos
 'retypenew' => 'Confirmar lo senhal novèl :',
 'resetpass_submit' => 'Cambiar lo senhal e s’enregistrar',
 'changepassword-success' => 'Vòstre senhal es estat cambiat amb succès !',
+'changepassword-throttled' => 'Avètz ensajat un tròp grand nombre de connexions darrièrament.
+Esperatz $1 abans d’ensajar tornarmai.',
 'resetpass_forbidden' => 'Los senhals pòdon pas èsser cambiats',
 'resetpass-no-info' => 'Vos cal èsser connectat per aver accès a aquesta pagina.',
 'resetpass-submit-loggedin' => 'Modificar lo senhal',
@@ -855,7 +857,7 @@ Benlèu ja avètz modificat vòstre senhal o demandat un senhal temporari novèl
 # Special:PasswordReset
 'passwordreset' => 'Remesa a zèro del senhal',
 'passwordreset-text-one' => 'Emplenatz aqueste formulari per reïnicializar vòstre senhal.',
-'passwordreset-text-many' => "{{PLURAL:$1|Completatz un d'aqueles camps per reïnicializar vòstre senhal.}}",
+'passwordreset-text-many' => "{{PLURAL:$1|Completatz un d'aqueles camps per recebre un senhal temporari per corrièr electronic.}}",
 'passwordreset-legend' => 'Reïnicializar lo senhal',
 'passwordreset-disabled' => 'La reïnicializacion dels senhals es estada desactivada sus aqueste wiki.',
 'passwordreset-emaildisabled' => 'Las foncionalitats e-mail son estadas desactivadas sus aqueste wiki.',
@@ -935,7 +937,7 @@ Lo vos caldriá far se las avètz partejats accidentalament amb qualqu'un o se v
 'preview' => 'Previsualizar',
 'showpreview' => 'Previsualizacion',
 'showlivepreview' => 'Apercebut rapid',
-'showdiff' => 'Cambiaments en cors',
+'showdiff' => 'Veire los cambiaments',
 'anoneditwarning' => "'''Atencion :''' sètz pas identificat(ada).
 Vòstra adreça IP serà enregistrada dins l’istoric d'aquesta pagina.",
 'anonpreviewwarning' => "''Sètz pas identificat. Salvar enregistrarà vòstra adreça IP dins l’istoric de las modificacions de la pagina.''",
@@ -1099,7 +1101,9 @@ Existís ja.',
 'content-failed-to-parse' => "Fracàs de l'analisi del contengut de $2 pel modèl $1: $3",
 'invalid-content-data' => 'Donadas del contengut invalidas',
 'content-not-allowed-here' => 'Lo contengut "$1" es pas autorizat sus la pagina [[$2]]',
-'editwarning-warning' => "Quitar aquesta pagina vos farà pèrdre totas las modificacions qu'avètz fachas. Se sètz connectat amb vòstre compte, podètz levar aqueste avertiment dins la seccion « Modificacion » de vòstras preferéncias.",
+'editwarning-warning' => "Quitar aquesta pagina vos farà pèrdre totas las modificacions qu'avètz fachas.
+Se sètz connectat, podètz desactivar aqueste avertiment dins la seccion « {{int:prefs-editing}} » de vòstras preferéncias.",
+'editpage-notsupportedcontentformat-title' => 'Format de contengut pas pres en carga',
 
 # Content models
 'content-model-wikitext' => 'wikitèxte',
@@ -1140,7 +1144,9 @@ D'unas inclusions seràn pas efectuadas.",
 'cantcreateaccount-text' => "La creacion de compte dempuèi aquesta adreça IP ('''$1''') es estada blocada per [[User:$3|$3]].
 
 La rason balhada per $3 èra ''$2''.",
-'cantcreateaccount-range-text' => "La creacion de compte dempuèi las adressas IP  '''$1''', que la vòstra n'es ('''$4''') es estada blocada per [[User:$3|$3]].",
+'cantcreateaccount-range-text' => "La creacion de compte dempuèi las adreças IP dins la plaja '''$1''', que compren vòstra agreça IP ('''$4''') son estadas blocadas per [[User:$3|$3]].
+
+Lo motiu provesit per $3 es ''$2''",
 
 # History pages
 'viewpagelogs' => 'Vejatz las operacions per aquesta pagina',
@@ -1175,7 +1181,7 @@ Benlèu es estada escafada o renomenada.
 Ensajatz de [[Special:Search|recercar sul wiki]] per trobar de paginas en rapòrt.',
 
 # Revision deletion
-'rev-deleted-comment' => '(comentari suprimit)',
+'rev-deleted-comment' => '(resumit de comentari suprimit)',
 'rev-deleted-user' => '(nom d’utilizaire suprimit)',
 'rev-deleted-event' => '(entrada suprimida)',
 'rev-deleted-user-contribs' => "[nom d'utilizaire o adreça IP suprimida - modificacion amagada sus las contribucions]",
@@ -1214,8 +1220,6 @@ Podètz veire aquesta diff ; i pòt aver mai de detalhs dins lo [{{fullurl:{{#Sp
 'revdelete-show-file-submit' => 'Òc',
 'revdelete-selected' => "'''{{PLURAL:$2|Version seleccionada|Versions seleccionadas}} de [[:$1]] :'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Eveniment d'istoric seleccionat|Eveniments d'istoric seleccionats}} :'''",
-'revdelete-text' => "'''Las revisions e eveniments suprimits apareisseràn encara dins l’istoric e los jornals de la pagina, mas lor contengut textual serà inaccessible al public.'''
-D’autres administrators sus {{SITENAME}} poiràn totjorn accedir al contengut amagat e lo restablir tornamai a travèrs d'aquesta meteissa interfàcia, a mens qu’una restriccion suplementària siá mesa en plaça pels operators del site.",
 'revdelete-confirm' => "Confirmatz que volètz efectuar aquesta accion, que ne comprenètz las consequéncias, e qu'o fasètz en acòrd amb [[{{MediaWiki:Policy-url}}|las règlas]].",
 'revdelete-suppress-text' => "La supression deu èsser utilizada '''sonque''' dins los cases seguents :
 * Informacions potencialament difamatòrias
@@ -1328,7 +1332,7 @@ Podètz trobar de detalhs dins lo [{{fullurl:{{#Special:Log}}/delete|page={{FULL
 'shown-title' => 'Afichar $1 {{PLURAL:$1|resultat|resultats}} per pagina',
 'viewprevnext' => 'Veire ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "* Pagina '''[[$1]]'''",
-'searchmenu-new' => "'''Crear la pagina ''[[:$1|$1]]'' sus aqueste wiki !'''",
+'searchmenu-new' => '<strong>Crear la pagina « [[:$1|$1]] » sus aqueste wiki !</strong> {{PLURAL:$2|0=|Vejatz tanben la pagina trobada amb vòstra recèrca.|Vejatz tanben los resultats de vòstra recèrca.}}',
 'searchprofile-articles' => 'Paginas de contengut',
 'searchprofile-project' => "Paginas d'ajuda e del projècte",
 'searchprofile-images' => 'Multimèdia',
@@ -1344,15 +1348,17 @@ Podètz trobar de detalhs dins lo [{{fullurl:{{#Special:Log}}/delete|page={{FULL
 'search-result-score' => 'Pertinéncia : $1%',
 'search-redirect' => '(redireccion cap a $1)',
 'search-section' => '(seccion $1)',
+'search-file-match' => '(correspond al contengut del fichièr)',
 'search-suggest' => 'Avètz volgut dire : $1',
 'search-interwiki-caption' => 'Projèctes fraires',
-'search-interwiki-default' => '$1 resultats :',
+'search-interwiki-default' => 'Resultats de $1 :',
 'search-interwiki-more' => '(mai)',
 'search-relatedarticle' => 'Relatat',
 'searcheverything-enable' => 'Recercar dins totes los espacis de noms',
 'searchrelated' => 'relatat',
 'searchall' => 'Totes',
-'showingresults' => "Afichatge {{PLURAL:$1|d''''1''' resultat|de '''$1''' resultats}} a partir del #'''$2'''.",
+'showingresults' => 'Afichatge de <b>$1</b> resultat{{PLURAL:$1||s}} a partir del n°<b>$2</b>.',
+'showingresultsinrange' => 'Afichar çaijós fins a {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resultats}} dins la seria #<strong>$2</strong> a #<strong>$3</strong>.',
 'showingresultsnum' => "Afichatge {{PLURAL:$3|d''''1''' resultat|de '''$3''' resultats}} a partir del #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Resultat '''$1'''|Resultats '''$1 - $2'''}} de '''$3''' per '''$4'''",
 'search-nonefound' => 'I a pas cap de resultat correspondent a la requèsta.',
@@ -1375,7 +1381,7 @@ Atencion, lor indexacion de contengut {{SITENAME}} benlèu es pas a jorn.',
 'prefsnologintext2' => "$1 per definir las preferéncias d'utilizaire.",
 'prefs-skin' => 'Aparéncia',
 'skin-preview' => 'Previsualizar',
-'datedefault' => 'Cap de preferéncia',
+'datedefault' => 'Pas cap de preferéncia',
 'prefs-beta' => 'Foncionalitats bèta',
 'prefs-datetime' => 'Data e ora',
 'prefs-labs' => 'Foncionalitats « labs »',
@@ -1526,7 +1532,7 @@ Tanben podètz causir de permetre a d’autres de vos contactar per vòstra pagi
 'group-bot-member' => 'Robòt',
 'group-sysop-member' => 'Administrator',
 'group-bureaucrat-member' => 'Burocrata',
-'group-suppress-member' => 'Supervisor',
+'group-suppress-member' => '{{GENDER:$1|supervisor|supervisora}}',
 
 'grouppage-user' => '{{ns:project}}:Utilizaires',
 'grouppage-autoconfirmed' => '{{ns:project}}:Utilizaires enregistrats',
@@ -1552,7 +1558,7 @@ Tanben podètz causir de permetre a d’autres de vos contactar per vòstra pagi
 'right-reupload-own' => 'Espotir un fichièr telecargat pel meteis utilizaire',
 'right-reupload-shared' => 'Espotir localament un fichièr present sus un depaus partejat',
 'right-upload_by_url' => 'Importar un fichièr dempuèi una adreça URL',
-'right-purge' => "Purgar l'amagatal de las paginas sens l'aver de confirmar",
+'right-purge' => "Purgar l'escondedor de las paginas sens l'aver de confirmar",
 'right-autoconfirmed' => 'Èsser pas afectat per las limitacions de debit ligadas a las adreças IP',
 'right-bot' => 'Èsser tractat coma un procediment automatizat',
 'right-nominornewtalk' => 'Desenclavar pas lo bendèl "Avètz de messatges novèls" al moment d\'un cambiament menor sus una pagina de discussion d\'un utilizaire',
@@ -1595,7 +1601,7 @@ Tanben podètz causir de permetre a d’autres de vos contactar per vòstra pagi
 'right-importupload' => 'Importar de paginas dempuèi un fichièr',
 'right-patrol' => 'Marcar de cambiaments coma verificats',
 'right-autopatrol' => 'Aver sos cambiaments marcats automaticament coma verificats',
-'right-patrolmarks' => 'Utilizar las foncionalitats de la patrolha dels darrièrs cambiaments',
+'right-patrolmarks' => 'Veire los marcatges de susvelhança dins los darrièrs cambiaments',
 'right-unwatchedpages' => 'Veire la lista de las paginas pas seguidas',
 'right-mergehistory' => 'Fusionar los istorics de las paginas',
 'right-userrights' => "Modificar totes los dreches d'un utilizaire",
@@ -1667,17 +1673,30 @@ Tanben podètz causir de permetre a d’autres de vos contactar per vòstra pagi
 'recentchanges-label-minor' => 'Aqueste cambiament es menor',
 'recentchanges-label-bot' => 'Aqueste cambiament es estat efectuat per un bòt.',
 'recentchanges-label-unpatrolled' => 'Aqueste cambiament es pas estat verificat encara.',
+'recentchanges-label-plusminus' => "La talha de la pagina a cambiat d'aqueste nombre d’octets.",
 'recentchanges-legend-heading' => "'''Legenda :'''",
 'recentchanges-legend-newpage' => '(veire tanben la [[Special:NewPages|lista de las paginas novèlas]]).',
-'rcnotefrom' => "Vaquí los cambiaments efectuats dempuèi lo '''$2''' ('''$1''' al maximum).",
+'rcnotefrom' => 'Çaijós las modificacions efectuadas dempuèi lo <strong>$2</strong> (fins a <strong>$1</strong> afichats).',
 'rclistfrom' => 'Afichar las modificacions novèlas dempuèi lo $1.',
 'rcshowhideminor' => '$1 los cambiaments menors',
+'rcshowhideminor-show' => 'Afichar',
+'rcshowhideminor-hide' => 'Amagar',
 'rcshowhidebots' => '$1 los robòts',
+'rcshowhidebots-show' => 'Afichar',
+'rcshowhidebots-hide' => 'Amagar',
 'rcshowhideliu' => '$1 los utilizaires enregistrats',
+'rcshowhideliu-show' => 'Afichar',
+'rcshowhideliu-hide' => 'Amagar',
 'rcshowhideanons' => '$1 los utilizaires anonims',
+'rcshowhideanons-show' => 'Afichar',
+'rcshowhideanons-hide' => 'Amagar',
 'rcshowhidepatr' => '$1 las modificacions susvelhadas',
+'rcshowhidepatr-show' => 'Afichar',
+'rcshowhidepatr-hide' => 'Amagar',
 'rcshowhidemine' => '$1 mas modificacions',
-'rclinks' => 'Afichar los $1 darrièrs cambiaments efectuats al cors dels $2 darrièrs jorns; $3 cambiaments menors.',
+'rcshowhidemine-show' => 'Afichar',
+'rcshowhidemine-hide' => 'Amagar',
+'rclinks' => 'Afichar los $1 darrièrs cambiaments efectuats al cors dels $2 darrièrs jorns<br />$3.',
 'diff' => 'dif',
 'hist' => 'ist',
 'hide' => 'amagar',
@@ -1799,6 +1818,8 @@ S'o volètz importar tornamai, tornatz en rèire e importatz-lo jos un autre nom
 'uploaddisabledtext' => "L'impòrt de fichièrs cap al servidor es desactivat.",
 'php-uploaddisabledtext' => "Lo telecargament de fichièrs es estat desactivat dins PHP. Verificatz l'opcion de configuracion file_uploads.",
 'uploadscripted' => "Aqueste fichièr conten de còde HTML o un escript que poiriá èsser interpretat d'un biais incorrècte per un navigador Internet.",
+'uploadscriptednamespace' => "Aqueste fichièr SVG conten un espaci de noms '$1' pas autorizat.",
+'uploadinvalidxml' => 'Lo XML dins lo fichièr importat a pas pogut èsser analisat.',
 'uploadvirus' => 'Aqueste fichièr conten un virús ! Per mai de detalhs, consultatz : $1',
 'uploadjava' => 'Es un fichièr ZIP que conten un fichièr Java .class.
 Lo telecargament de fichièrs Java es pas autorizat, perque pòdon contornar de restriccions de seguretat.',
@@ -2115,6 +2136,7 @@ Las entradas <del>barradas</del> son estadas resolgudas.',
 'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikis}}',
 'nlinks' => '$1 {{PLURAL:$1|ligam|ligams}}',
 'nmembers' => '$1 {{PLURAL:$1|membre|membres}}',
+'nmemberschanged' => '$1 → $2 {{PLURAL:$2|membre|membres}}',
 'nrevisions' => '$1 {{PLURAL:$1|revision|revisions}}',
 'nviews' => '$1 {{PLURAL:$1|consultacion|consultacions}}',
 'nimagelinks' => 'Utilisat sus $1 {{PLURAL:$1|pagina|paginas}}',
@@ -2133,6 +2155,8 @@ Las entradas <del>barradas</del> son estadas resolgudas.',
 'wantedpages' => 'Paginas mai demandadas',
 'wantedpages-badtitle' => 'Títol invalid dins los resultats : $1',
 'wantedfiles' => 'Fichièrs desirats',
+'wantedfiletext-cat' => "Los fichièrs seguents son utilizats, mas existisson pas localament. Se se tròban sus un depaus partejat, pòdon èsser listats aicí, mentre que sián, de fach, ja disponibles. Totes aqueles falses positius seràn <del>raiats</del>. Amai, las paginas qu'intègran de fichièrs qu'existisson pas son repertoriadas dins [[:$1]].",
+'wantedfiletext-nocat' => 'Los fichièrs seguents son utilizats, mas existisson pas localament. Se se tròban sus un depaus partejat, pòdon èsser listats aicí, mentre que sián, de fach, ja disponibles. Totes aqueles falses positius seràn <del>raiats</del>.',
 'wantedtemplates' => 'Modèls demandats',
 'mostlinked' => 'Paginas mai ligadas',
 'mostlinkedcategories' => 'Categorias mai utilizadas',
@@ -2153,6 +2177,14 @@ Las entradas <del>barradas</del> son estadas resolgudas.',
 'protectedpages-cascade' => 'Unicament las proteccions en cascada',
 'protectedpages-noredirect' => 'Amagar las redireccions',
 'protectedpagesempty' => 'Cap de pagina es pas protegida actualament.',
+'protectedpages-timestamp' => 'Orodatatge',
+'protectedpages-page' => 'Pagina',
+'protectedpages-expiry' => 'Expira lo',
+'protectedpages-performer' => 'Proteccion de l’utilizaire',
+'protectedpages-params' => 'Paramètres de proteccion',
+'protectedpages-reason' => 'Motiu',
+'protectedpages-unknown-timestamp' => 'Desconegut',
+'protectedpages-unknown-performer' => 'Utilizaire desconegut',
 'protectedtitles' => 'Títols protegits',
 'protectedtitlesempty' => 'Cap de títol es pas actualament protegit amb aquestes paramètres.',
 'listusers' => 'Lista dels participants',
@@ -2336,7 +2368,7 @@ per modificar vòstra lista de seguiment.',
 'watchlist-details' => 'I a {{PLURAL:$1|pagina|paginas}} dins vòstra lista de seguiment, sens comptar las paginas de discussion.',
 'wlheader-enotif' => 'La notificacion per corrièr electronic es activada.',
 'wlheader-showupdated' => "Las paginas que son estadas modificadas dempuèi vòstra darrièra visita son afichadas en '''gras'''.",
-'watchmethod-recent' => 'verificacion dels darrièrs cambiaments de las paginas seguidas',
+'watchmethod-recent' => 'verificacion dels darrièrs cambiaments per i trobar de paginas seguidas',
 'watchmethod-list' => 'verificacion de las paginas seguidas per de modificacions recentas',
 'watchlistcontains' => 'Vòstra lista de seguiment conten $1 {{PLURAL:$1|pagina|paginas}}.',
 'iteminvalidname' => "Problèma amb l'article « $1 » : lo nom es invalid...",
@@ -2364,21 +2396,20 @@ per modificar vòstra lista de seguiment.',
 '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',
-'enotif_body' => 'Car(a) $WATCHINGUSERNAME,
+'enotif_body' => 'Car $WATCHINGUSERNAME,
 
 $PAGEINTRO $NEWPAGE
 
-Resumit del contributor : $PAGESUMMARY 
-$PAGEMINOREDIT
+Resumit del contributor :
+$PAGESUMMARY $PAGEMINOREDIT
 
 Contactatz aqueste contributor :
 corrièl : $PAGEEDITOR_EMAIL
 wiki : $PAGEEDITOR_WIKI
 
-I aurà pas d’autras notificacions en cas de cambiaments ulteriors, levat se visitatz aquela pagina.
-Podètz tanben reïnicializar las bandièras de notificacion per totas las paginas de vòstra lista de seguiment.
+I aurà pas d’autras notificacions en cas de cambiaments ulteriors, levat se visitatz aquela pagina un còp connectat. Podètz tanben reïnicializar las bandièras de notificacion per totas las paginas de vòstra lista de seguiment.
 
-             Vòstre sistèma de notificacion de {{SITENAME}}
+Vòstre sistèma de notificacion de {{SITENAME}}
 
 --
 Pour modificar los paramètres de notificacion per corrièl, visitatz {{canonicalurl:{{#special:Preferences}}}}
@@ -2596,8 +2627,10 @@ $1",
 'sp-contributions-blocked-notice-anon' => 'Aquesta adreça IP es actualament blocada.
 La darrièra intrada del jornal dels blocatges es indicada çaijós a títol d’informacion :',
 'sp-contributions-search' => 'Cercar las contribucions',
+'sp-contributions-suppresslog' => 'contribucions suprimidas d’un utilizaire',
 'sp-contributions-username' => 'Adreça IP o nom d’utilizaire :',
 'sp-contributions-toponly' => 'Mostrar sonque las contribucions que son lo darrièr cambiament',
+'sp-contributions-newonly' => 'Afichar unicament las modificacions que son de creacions de pagina',
 'sp-contributions-submit' => 'Cercar',
 
 # What links here
@@ -2698,8 +2731,8 @@ a partir d'una adreça IP precedentament blocada.",
 'change-blocklink' => 'modificar lo blocatge',
 'contribslink' => 'contribucions',
 'emaillink' => 'mandar un messatge',
-'autoblocker' => 'Sètz estat autoblocat perque partejatz una adreça IP amb "[[User:$1|$1]]".
-La rason balhada per $1 es : « $2 ».',
+'autoblocker' => 'Sètz estat blocat automaticament perque vòstra adreça IP es estada utilizada recentament per « [[User:$1|$1]] ».
+Lo motiu provesit pel blocatge de $1 es « $2 »',
 'blocklogpage' => 'Istoric dels blocatges',
 'blocklog-showlog' => 'Aqueste utilizaire es estat blocat precedentament. Lo jornal dels blocatges es disponible çaijós :',
 'blocklog-showsuppresslog' => 'Aqueste utilizaire es estat blocat e amagat precedentament. Lo jornal de las supressions es disponible çaijós :',
@@ -2719,7 +2752,7 @@ Consultatz la [[Special:BlockList|lista dels utilizaires blocats]] per veire los
 'range_block_disabled' => "Lo blocatge de plajas d'IP es estat desactivat.",
 'ipb_expiry_invalid' => 'Temps d’expiracion invalid.',
 'ipb_expiry_temp' => 'Las plajas dels utilizaires amagats deurián èsser permanentas.',
-'ipb_hide_invalid' => "Impossible de suprimir aqueste compte ; sembla qu'a tròp de modificacions.",
+'ipb_hide_invalid' => "Impossible de suprimir aqueste compte ; sembla qu'a mai {{PLURAL:$1|d’una modificacion|de $1 modificacions}}.",
 'ipb_already_blocked' => '« $1 » ja es blocat',
 'ipb-needreblock' => '$1 ja es blocat. Volètz modificar los paramètres ?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Autre blocatge|Autres blocatges}}',
@@ -2867,6 +2900,7 @@ Visitatz la [https://www.mediawiki.org/wiki/Localisation Localizacion MediaWiki]
 'allmessages-prefix' => 'Filtrar per prefix :',
 'allmessages-language' => 'Lenga :',
 'allmessages-filter-submit' => 'Aplicar',
+'allmessages-filter-translate' => 'Tradusir',
 
 # Thumbnails
 'thumbnail-more' => 'Agrandir',
@@ -2918,7 +2952,7 @@ Salvatz-lo sus vòstre disc dur puèi importatz-lo aicí.",
 'importuploaderrortemp' => "Lo telecargament del fichièr d'importar a pas capitat. Un dorsièr temporari es mancant.",
 'import-parse-failure' => "Ruptura dins l'analisi de l'impòrt XML",
 'import-noarticle' => "Pas de pagina d'importar !",
-'import-nonewrevisions' => 'Totas las revisions son estadas importadas deperabans.',
+'import-nonewrevisions' => 'Cap de revision pas importada (totas èran ja presentas, o ignoradas del fach d’errors).',
 'xml-error-string' => '$1 a la linha $2, col $3 (octet $4) : $5',
 'import-upload' => "Impòrt d'un fichier XML",
 'import-token-mismatch' => 'Pèrda de las donadas de sesilha. Tornatz ensajar.',
@@ -2977,7 +3011,7 @@ Salvatz-lo sus vòstre disc dur puèi importatz-lo aicí.",
 'tooltip-n-mainpage-description' => 'Anar a l’acuèlh',
 'tooltip-n-portal' => 'A prepaus del projècte',
 'tooltip-n-currentevents' => "Trobar d'entresenhas suls eveniments actuals",
-'tooltip-n-recentchanges' => 'Lista dels darrièrs cambiaments sul wiki.',
+'tooltip-n-recentchanges' => 'Lista dels darrièrs cambiaments sul wiki',
 'tooltip-n-randompage' => "Afichar una pagina a l'azard",
 'tooltip-n-help' => "L'endrech per s'assabentar.",
 'tooltip-t-whatlinkshere' => 'Lista de las paginas ligadas a aquesta',
@@ -3003,7 +3037,7 @@ Salvatz-lo sus vòstre disc dur puèi importatz-lo aicí.",
 'tooltip-minoredit' => 'Marcar mas modificacions coma un cambiament menor',
 'tooltip-save' => 'Salvar vòstras modificacions',
 'tooltip-preview' => 'Mercé de previsualizar vòstras modificacions abans de salvar!',
-'tooltip-diff' => "Permet de visualizar los cambiaments qu'avètz efectuats",
+'tooltip-diff' => "Aficha los cambiaments qu'avètz aportats al tèxte",
 'tooltip-compareselectedversions' => "Afichar las diferéncias entre doas versions d'aquesta pagina",
 'tooltip-watch' => 'Apondre aquesta pagina a vòstra lista de seguiment',
 'tooltip-watchlistedit-normal-submit' => 'Levar los títols',
@@ -3113,8 +3147,8 @@ Inscriviscatz '''PAS RES''' dedins !",
 'markaspatrolledtext' => 'Marcar aqueste article coma pas vandalizat',
 'markedaspatrolled' => 'Marcat coma pas vandalizat',
 'markedaspatrolledtext' => 'La revision seleccionada de [[:$1]] es estada coma patrolhada.',
-'rcpatroldisabled' => 'La foncion de patrolha dels darrièrs cambiaments es pas activada.',
-'rcpatroldisabledtext' => 'La foncionalitat de susvelhança dels darrièrs cambiaments es pas activada.',
+'rcpatroldisabled' => 'La foncion de relectura dels darrièrs cambiaments es pas activada.',
+'rcpatroldisabledtext' => 'La foncionalitat de relectura dels darrièrs cambiaments es actualament desactivada.',
 'markedaspatrollederror' => 'Pòt pas èsser marcat coma pas vandalizat',
 'markedaspatrollederrortext' => 'Vos cal seleccionar una version per poder la marcar coma pas vandalizada.',
 'markedaspatrollederror-noautopatrol' => 'Avètz pas lo drech de marcar vòstras pròprias modificacions coma susvelhadas.',
@@ -3702,8 +3736,8 @@ Confirmatz que desiratz tornar crear aqueste article.",
 
 # action=purge
 'confirm_purge_button' => 'Confirmar',
-'confirm-purge-top' => "Volètz refrescar aquesta pagina (purgar l'amagatal) ?",
-'confirm-purge-bottom' => "Purgar una pagina vioda l'amagatal e fòrça la darrièra version a èsser afichada.",
+'confirm-purge-top' => "Volètz refrescar aquesta pagina (purgar l'escondedor) ?",
+'confirm-purge-bottom' => "Purgar una pagina vioda l'escondedor e fòrça la darrièra version a èsser afichada.",
 
 # action=watch/unwatch
 'confirm-watch-button' => 'Confirmar',
@@ -3807,7 +3841,14 @@ Ensajatz la previsualizacion normala.',
 'version-hook-name' => 'Nom del croquet',
 'version-hook-subscribedby' => 'Definit per',
 'version-version' => '(Version $1)',
-'version-license' => 'Licéncia',
+'version-license' => 'Licéncia de MediaWiki',
+'version-ext-license' => 'Licéncia',
+'version-ext-colheader-name' => 'Extensions',
+'version-ext-colheader-license' => 'Licéncia',
+'version-ext-colheader-description' => 'Descripcion',
+'version-ext-colheader-credits' => 'Autors',
+'version-license-title' => 'Licéncia per $1',
+'version-credits-title' => 'Mercejaments per $1',
 'version-poweredby-credits' => "Aqueste wiki fonciona gràcias a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'autres',
 'version-poweredby-translators' => 'traductors de translatewiki.net',
@@ -3819,7 +3860,7 @@ Ensajatz la previsualizacion normala.',
 'version-entrypoints-header-url' => 'URL',
 
 # Special:Redirect
-'redirect' => 'Redirigit per fichièr, utilizaire, o ID de revision',
+'redirect' => 'Redirigit per fichièr, utilizaire, pagina o ID de revision.',
 'redirect-legend' => 'Redirigir cap a una pagina o un fichièr',
 'redirect-submit' => 'Validar',
 'redirect-lookup' => 'Recèrca :',
@@ -3950,9 +3991,9 @@ Ensajatz la previsualizacion normala.',
 'revdelete-uname-unhid' => 'nom d’utilizaire afichat',
 'revdelete-restricted' => 'aplicar las restriccions als administrators',
 'revdelete-unrestricted' => 'restriccions levadas pels administrators',
-'logentry-move-move' => '$1  {{GENDER:$2|a deplaçat}} la pagina $3 cap a $4',
-'logentry-move-move-noredirect' => '$1 {{GENDER:$2|a deplaçat}} la pagina $3 cap a $4 sens daissar cap de redireccion',
-'logentry-move-move_redir' => '$1 {{GENDER:$2|a deplaçat}} la pagina $3 cap a $4 per dessús una redireccion',
+'logentry-move-move' => '$1  {{GENDER:$2|a desplaçat}} la pagina $3 cap a $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|a desplaçat}} la pagina $3 cap a $4 sens daissar cap de redireccion',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|a desplaçat}} la pagina $3 cap a $4 per dessús una redireccion',
 'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|a desplaçat}} la pagina $3 cap a $4 per dessús una redireccion sens daissar cap de redireccion',
 'logentry-patrol-patrol' => '$1 {{GENDER:$2|a marcat}} la revision $4 de la pagina $3 coma relegida',
 'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|a marcat automaticament}} la revision $4 de la pagina $3 coma relegida',
@@ -4016,6 +4057,7 @@ Ensajatz la previsualizacion normala.',
 'api-error-overwrite' => 'Espotir un fichièr existent es pas autorizat.',
 'api-error-stashfailed' => 'Error intèrna : lo servidor a pas pogut enregistrar lo fichièr temporari.',
 'api-error-publishfailed' => 'Error intèrna: Lo servidor a pas pogut publicar lo fichièr temporari.',
+'api-error-stasherror' => "Una error s'es produsida al moment del telecargament del fichièr per lo dissimular.",
 'api-error-timeout' => 'Lo servidor a pas respondut dins lo relambi pervist.',
 'api-error-unclassified' => "Una error desconeguda s'es producha.",
 'api-error-unknown-code' => 'Error desconeguda : « $1 »',
@@ -4056,7 +4098,11 @@ Ensajatz la previsualizacion normala.',
 
 # Special:ExpandTemplates
 'expandtemplates' => 'Espandiment dels modèls',
-'expand_templates_intro' => 'Aquesta pagina permet de testar l’espandiment de modèls, que son desvolopats recursivament. Las foncions e las variablas predefinidas, coma <nowiki>{{</nowiki>#language:...}} e <nowiki>{{</nowiki>CURRENTDAY}} tanben son desvolopadas.',
+'expand_templates_intro' => "Aquesta pagina especiala accèpta un tèxte wiki source e permet de realizar recursivament l’espandiment dels modèls que conten.
+Realiza tanben l’espandiment de las foncions del parser talas coma
+<code><nowiki>{{</nowiki>#language:...}}</code> e de variablas coma
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+En fach, realiza l'espandiment de gaireben tot çò qu'es enquadrat per d'acoladas doblas.",
 'expand_templates_title' => 'Títol de l’article, util per exemple se lo modèl utiliza {{FULLPAGENAME}} :',
 'expand_templates_input' => 'Picatz vòstre tèxte aicí :',
 'expand_templates_output' => 'Visualizatz lo resultat :',
index 2810045..340ec27 100644 (file)
@@ -420,7 +420,6 @@ $messages = array(
 'vector-action-protect' => 'କିଳିବେ',
 'vector-action-undelete' => 'ଲିଭାଇବେ ନାହିଁ',
 'vector-action-unprotect' => 'କିଳିବେ ନାହିଁ',
-'vector-simplesearch-preference' => 'ସରଳ ଖୋଜା ବାରଟିକୁ ସଚଳ କରିବେ (କେବଳ ଭେକ୍ଟର ସ୍କିନ)',
 'vector-view-create' => 'ତିଆରି କରନ୍ତୁ',
 'vector-view-edit' => 'ସମ୍ପାଦନା (Edit)',
 'vector-view-history' => 'ଇତିହାସ',
@@ -700,8 +699,6 @@ $2',
 'gotaccountlink' => 'ଲଗ ଇନ (Log in)',
 'userlogin-resetlink' => 'ଲଗଇନ ତଥ୍ୟ ସବୁ ଭୁଲିଗେଲେକି?',
 'userlogin-resetpassword-link' => 'ପାସୱାର୍ଡ଼ ରିସେଟ କରନ୍ତୁ',
-'helplogin-url' => 'Help:Logging_in',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ଲଗ-ଇନ କରିବାରେ ସ‌ହ‌ଯୋଗ]]',
 'createacct-emailrequired' => 'ଇମେଲ ଠିକଣା',
 'createacct-emailoptional' => 'ଇମେଲ ଠିକଣା (ଇଚ୍ଛାଧୀନ)',
 'createacct-email-ph' => 'ଆପଣଙ୍କ ଇମେଲ ଠିକଣା ନିବେଶ କରନ୍ତୁ',
@@ -1192,8 +1189,6 @@ $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' => "ଦବାଇ ରଖିବା '''କେବଳ''' ଏହି ତଳଲିଖିତ କ୍ଷେତ୍ରରେ ବ୍ୟବହାର କରାଯିବ:
 * ସମ୍ଭାବିତ ଅପମାନଜଣକ ତଥ୍ୟ
@@ -1303,7 +1298,7 @@ $1",
 'prevn' => '{{PLURAL:$1|$1}}ର ଆଗରୁ',
 'nextn' => '{{PLURAL:$1|$1}} ପର',
 'prevn-title' => 'ଆଗରୁ ମିଳିଥିବା $1ଟି  {{PLURAL:$1|result|ଫଳ}}',
-'nextn-title' => 'à¬\86à¬\97ର $1à¬\9fି  {{PLURAL:$1|result|ଫଳସବୁ}}',
+'nextn-title' => 'ପର $1 {{PLURAL:$1|ଫଳାଫଳ|ଫଳାଫଳସବୁ}}',
 'shown-title' => '$1 ପ୍ରତି ପୃଷ୍ଠାର {{PLURAL:$1|ଫଳାଫଳ|ଫଳାଫଳ}} ଦେଖାଇବେ ।',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) ଟି ଦେଖିବେ',
 'searchmenu-exists' => "'''ଏହି ଉଇକିରେ \"[[:\$1]]\" ନାଆଁରେ ପୃଷ୍ଠାଟିଏ ଅଛି ।'''",
@@ -1325,7 +1320,7 @@ $1",
 'search-section' => '(ଭାଗ $1)',
 'search-suggest' => 'ଆପଣ $1 ଭାବି ଖୋଜିଥିଲେ କି?',
 'search-interwiki-caption' => 'ସାଙ୍ଗରେ ଚାଲିଥିବା ବାକି ପ୍ରକଳ୍ପସବୁ',
-'search-interwiki-default' => '$1 ଫଳାଫଳ:',
+'search-interwiki-default' => '$1 à¬°à­\81 à¬«à¬³à¬¾à¬«à¬³:',
 'search-interwiki-more' => '(ଅଧିକ)',
 'search-relatedarticle' => 'ଯୋଡ଼ା',
 'searcheverything-enable' => 'ସବୁଗୁଡ଼ିକ ନେମସ୍ପେସରେ ଖୋଜିବେ',
@@ -2345,11 +2340,11 @@ wiki: $PAGEEDITOR_WIKI
 # Delete
 'deletepage' => 'ପୃଷ୍ଠାଟି ଲିଭାଇଦେବେ',
 'confirm' => 'ନିଶ୍ଚିତ କରନ୍ତୁ',
-'excontent' => 'ଭିତର à¬­à¬¾à¬\97 à¬¥à¬¿à¬²à¬¾: $1',
-'excontentauthor' => 'ଭିତର ଭାଗରେ ଥିଲା: "$1" (ଆଉ "[[Special:Contributions/$2|$2]]" କେବଳ ଜଣେ ମାତ୍ର ଦାତା ଥିଲେ)',
-'exbeforeblank' => 'ଖାଲି କରିବା ଆଗରୁ ଭିତରେ "$1" ଥିଲା',
+'excontent' => 'ଲà­\87à¬\96ା à¬¥à¬¿à¬²à¬¾: "$1"',
+'excontentauthor' => 'ଭିତରେ ଥିଲା: "$1" (ଆଉ "[[Special:Contributions/$2|$2]]" କେବଳ ଜଣେ ଦାତା ଥିଲେ)',
+'exbeforeblank' => 'ଖାଲିକରିବା ଆଗରୁ ଭିତରେ "$1" ଥିଲା',
 'exblank' => 'ପୃଷ୍ଠାଟି ଖାଲି ଅଛି',
-'delete-confirm' => 'ଲିଭେଇବେ $1',
+'delete-confirm' => 'ଲିଭେଇବେ "$1"',
 'delete-legend' => 'ଲିଭାଇବେ',
 'historywarning' => "'''ଚେତାବନୀ:''' ଆପଣ ଲିଭାଇବାକୁ ଯାଉଥିବା ଏହି ପୃଷ୍ଠାଟିର ପାଖାପାଖି $1 {{PLURAL:$1|ଟି ସଙ୍କଳନ|ଗୋଟି ସଙ୍କଳନ}} ରହିଅଛି:",
 'confirmdeletetext' => 'ଆପଣ ଗୋଟିଏ ପୃଷ୍ଠାର ଇତିହାସ ସହ ତାହାକୁ ଲିଭାଇବାକୁ ଯାଉଛନ୍ତି ।
@@ -2449,7 +2444,7 @@ $2ଙ୍କ ଦେଇ ଶେଷଥର ହୋଇଥିବା ସଂସ୍କର
 'protect-dropdown' => '*ସାଧାରଣ ପ୍ରତିରକ୍ଷା କାରଣ
 ** ଅତି ଅଧିକ ଅପବ୍ୟବହାର
 ** ଅତି ଅଧିକ ଅଦରକାରୀ ଚିଜ ପୁରାଇବା
-** ନକରାତ୍ମକ ସମ୍ପାଦନା ତାଗିଦା
+** à¬¨à¬\95ାରାତà­\8dମà¬\95 à¬¸à¬®à­\8dପାଦନା à¬¤à¬¾à¬\97ିଦା
 ** ଅଧିକ ଦେଖାଯାଉଥିବା ପୃଷ୍ଠା',
 'protect-edit-reasonlist' => 'କିଳିବା କାରଣମାନଙ୍କର ସମ୍ପାଦନା କରିବେ',
 'protect-expiry-options' => '୧ ଘଣ୍ଟା:1 hour,ଦିନେ:1 day,ସପ୍ତାହେ:1 week,୨ ସପ୍ତାହ:2 weeks,ମସେ:1 month,୩ ମାସ:3 months,୬ ମାସ:6 months,ବର୍ଷେ:1 year,ଅସିମୀତ କାଳ:infinite',
index 5640200..08b9c51 100644 (file)
@@ -334,7 +334,6 @@ $messages = array(
 'vector-action-protect' => 'Сæхгæнын',
 'vector-action-undelete' => 'Рацаразын',
 'vector-action-unprotect' => 'Ивын хъахъхъæд',
-'vector-simplesearch-preference' => 'Баиу кæнын æнцонгонд агурыны формæ (Вектор цармæн æрмæст)',
 'vector-view-create' => 'Скæнын',
 'vector-view-edit' => 'Ивын',
 'vector-view-history' => 'Истори',
@@ -610,8 +609,6 @@ $2',
 'gotaccountlink' => 'Бахизын',
 'userlogin-resetlink' => 'Ферох дæ сты дæ бахизæнтæ?',
 'userlogin-resetpassword-link' => 'Дæ пароль ногæй сæвæр',
-'helplogin-url' => 'Help:Бахизын',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Бахизынæн æххуыс]]',
 'createacct-join' => 'Дæ информаци дæлдæр бафысс.',
 'createacct-emailrequired' => 'Электрон посты адрис',
 'createacct-emailoptional' => 'Электрон посты адрис (фæндон)',
index 61bdb83..e0d4a64 100644 (file)
@@ -352,7 +352,6 @@ $messages = array(
 'vector-action-protect' => 'ਸੁਰੱਖਿਆ',
 'vector-action-undelete' => 'ਹਟਾਉਣਾ-ਵਾਪਸ',
 'vector-action-unprotect' => 'ਸੁਰੱਖਿਆ ਬਦਲੋ',
-'vector-simplesearch-preference' => 'ਸਧਾਰਨ ਖੋਜ ਸਲਾਹ ਪੱਟੀ ਯੋਗ ਕਰੋ (ਸਿਰਫ਼ ਵਿਕਟਰ ਸਕਿੰਨ ਵਿਚ)',
 'vector-view-create' => 'ਬਣਾਓ',
 'vector-view-edit' => 'ਸੋਧੋ',
 'vector-view-history' => 'ਅਤੀਤ ਵੇਖੋ',
@@ -626,8 +625,6 @@ $2',
 'gotaccountlink' => 'ਲਾਗਇਨ',
 'userlogin-resetlink' => 'ਆਪਣੀ ਲਾਗਇਨ ਜਾਣਕਾਰੀ ਭੁੱਲ ਗਏ ਹੋ?',
 'userlogin-resetpassword-link' => 'ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਗਏ ਹੋ?',
-'helplogin-url' => 'Help: ਲਾਗਇਨ ਕਰਨਾ',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ਲਾਗਇਨ ਹੋਣ ਲਈ ਮੱਦਦ]]',
 'userlogin-createanother' => 'ਹੋਰ ਖਾਤਾ ਬਣਾਓ',
 'createacct-join' => 'ਆਪਣੀ ਜਾਣਕਾਰੀ ਹੇਠਾਂ ਦਿਉ।',
 'createacct-another-join' => 'ਆਪਣੇ ਅਕਾਊਂਟ ਦੀ ਜਾਣਕਾਰੀ ਹੇਠਾਂ ਦਿਉ।',
@@ -713,6 +710,7 @@ $2',
 'suspicious-userlogout' => 'ਤੁਹਾਡੀ ਵਿਦਾਇਗੀ ਦੀ ਬੇਨਤੀ ਨਕਾਰ ਦਿੱਤੀ ਗਈ ਕਿਉਂਕਿ ਲੱਗਦਾ ਹੈ ਕਿ ਇਹ ਕਿਸੇ ਟੁੱਟੇ ਹੋਏ ਬਰਾਊਜ਼ਰ ਜਾਂ ਕੈਸ਼ ਹੋਈ ਪ੍ਰਾਕਸੀ ਤੋਂ ਭੇਜੀ ਗਈ ਸੀ।',
 'createacct-another-realname-tip' => 'ਅਸਲੀ ਨਾਂ ਚੋਣਵਾਂ ਹੈ।
 ਜੇਕਰ ਤੁਸੀਂ ਇਹ ਦਿੱਤਾ ਹੈ ਤਾਂ ਤੁਹਾਡੇ ਕੰਮ ਵਾਸਤੇ ਗੁਣ ਦੇ ਤੌਰ ਉੱਤੇ ਵਰਤਿਆ ਜਾਵੇਗਾ।',
+'pt-login-button' => 'ਲਾਗ ਇਨ',
 
 # Email sending
 'php-mail-error-unknown' => 'PHP ਦੇ ਮੇਲ() ਕਰਜ ਵਿੱਚ ਅਣਜਾਣ ਦੋਸ਼',
index 223994d..9a405f2 100644 (file)
@@ -287,7 +287,6 @@ Pinengneng so $2 para ed listaan na saray abural ran balo.',
 # Block/unblock
 'blockip' => 'Isara ed para ayan manag-usar',
 'ipbreason' => 'Katonongan',
-'ipbreasonotherlist' => 'Arom ya katonongan',
 'ipbsubmit' => 'Isebel ed sayan manag-usar',
 'badipaddress' => 'Aga nayarin IP address',
 'ipusubmit' => 'Aga la isebel so ayan address',
index 5056109..ff5585d 100644 (file)
@@ -654,9 +654,6 @@ mapaliaring maki detalle king [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPA
 'revdelete-nooldid-text' => 'Mapaliaring ala kang binieng balak a pamanalili (target revision) ba meng daptan ing gamit (function) a iti, ala yu ing mebanggit a pamanaliling iti, o magtangka kang isalikut ya ing kasalungsungan a pamanalili.',
 'revdelete-selected' => "'''{{PLURAL:$2|Mepiling bersion|Mepiling bersion}} ning [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Mepiling miliari king tala/listaan|Mepiling miliari king tala/listaan}}:'''",
-'revdelete-text' => "'''Lunto la pa murin king amlat ning bulung deng meburang pamanalili ampong kapaliarian (events), oneng e ra no abusni deng malda ding mapilang dake ning karelang laman.'''
-
-Abusni da pa murin deng aliwang talapanibala (admin) king {{SITENAME}} itang laman a makasalikut, at aurung da ing pangabura na niti kapamilatan na mismu niting interface, puera namu nung ating bayung pamag-limita o pamanyabat a miyutus.",
 'revdelete-legend' => 'Mitakdang angganan/limitasiun kareng maliaring akit',
 'revdelete-hide-text' => 'Isalikut ya ing meyaliling kulitan',
 'revdelete-hide-image' => 'Isalikut ya ing laman ning simpan',
index b7303ae..19d8430 100644 (file)
@@ -151,7 +151,6 @@ $messages = array(
 'vector-action-protect' => 'Garantir',
 'vector-action-undelete' => "N'poin défacher",
 'vector-action-unprotect' => "Canger l'garantie",
-'vector-simplesearch-preference' => "Actionner l'barette pour chés traches simpes (seulemint pour l'habillure Vector)",
 'vector-view-create' => 'Créer',
 'vector-view-edit' => 'Éditer',
 'vector-view-history' => "Vir l'histoère",
index aa79503..f75e0f2 100644 (file)
@@ -61,7 +61,9 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Gleecher unnerleine:',
 'tog-hideminor' => 'Gleene Enneringe verschwinne losse',
-'tog-watchdefault' => 'Vun mir gennerte Ardickele watsche',
+'tog-watchdefault' => 'Vun mir gennerte Ardickele un Feils watsche',
+'tog-watchmoves' => 'Vun mir gezogene Ardickele un Feils watsche',
+'tog-watchdeletion' => 'Vun mir verwischte Ardickele un Feils watsche',
 'tog-watchlisthideown' => 'Mei Ardickele vun mei Watsch-Lischt verschwinne losse',
 'tog-watchlisthidebots' => 'Enneringe vun Bots vun mei Watsch-Lischt verschwinne losse',
 'tog-watchlisthideminor' => 'Gleene Enneringe vun mei Watsch-Lischt verschwinne losse',
@@ -120,6 +122,16 @@ $messages = array(
 'oct' => 'Okt.',
 'nov' => 'Nov.',
 'dec' => 'Dis.',
+'january-date' => '$1. Yenner',
+'february-date' => '$1. Hanning',
+'march-date' => '$1. Matz',
+'april-date' => '$1. Abril',
+'may-date' => '$1. Moi',
+'june-date' => '$1. Tschuun',
+'july-date' => '$1. Tschulei',
+'august-date' => '$1. Aagscht',
+'october-date' => '$1. Oktower',
+'december-date' => '$1. Disember',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Abdeeling|Abdeelinge}}',
@@ -280,8 +292,11 @@ Wenns des net iss, hoscht verleicht en Fehler in de Daadebank gfunne. Bitte meld
 'virus-unknownscanner' => 'Unbekannter Virus-Uffgucker:',
 
 # Login and logout pages
+'welcomeuser' => 'Wilkum, $1!',
 'yourname' => 'Yuuser-Naame:',
+'userlogin-yourname' => 'Yuusernaame',
 'yourpassword' => 'Paesswatt:',
+'userlogin-yourpassword' => 'Paesswatt',
 'yourpasswordagain' => 'Paesswatt noch eemol:',
 'yourdomainname' => 'Dei Domain:',
 'login' => 'Kumm nei',
@@ -291,11 +306,15 @@ Wenns des net iss, hoscht verleicht en Fehler in de Daadebank gfunne. Bitte meld
 'logout' => 'Geh naus',
 'userlogout' => 'Geh naus',
 'gotaccountlink' => 'Kumm nei',
+'createacct-emailrequired' => 'E-Poschd',
 'createaccountmail' => 'iwwer E-Mail',
 'createaccountreason' => 'Grund:',
-'mailmypassword' => 'Neies Paesswadd eposchde',
+'mailmypassword' => 'Paesswatt zerricksetze',
 'noemail' => 'Yuuser „$1“ hot ken E-Mail aagewwe.',
 'loginlanguagelabel' => 'Schprooch: $1',
+'pt-login' => 'Nei kumme',
+'pt-login-button' => 'Nei kumme',
+'pt-userlogout' => 'Naus geh',
 
 # Change password dialog
 'changepassword' => 'Paesswatt ennere',
@@ -308,11 +327,13 @@ Wenns des net iss, hoscht verleicht en Fehler in de Daadebank gfunne. Bitte meld
 'passwordreset' => 'Paesswatt zerricksetze',
 'passwordreset-legend' => 'Paesswatt zerricksetze',
 'passwordreset-username' => 'Yuuser-Naame:',
+'passwordreset-email' => 'E-Poschd:',
 'passwordreset-emailelement' => 'Yuusernaame: $1
 Paesswatt fer nau: $2',
 
 # Special:ChangeEmail
 'changeemail-none' => '(ken)',
+'changeemail-submit' => 'E-Poschd ennere',
 
 # Edit page toolbar
 'bold_sample' => 'Wadde fett gmarrickt',
@@ -333,6 +354,7 @@ Paesswatt fer nau: $2',
 'savearticle' => 'Blatt beilege',
 'preview' => 'Aagucke',
 'showdiff' => 'Enneringe zeige',
+'blockedtitle' => 'Yuuser iss aabunne',
 'blockednoreason' => 'ken Grund gewwe',
 'loginreqlink' => 'kumm nei',
 'newarticle' => '(Nei)',
@@ -357,8 +379,8 @@ Paesswatt fer nau: $2',
 'last' => 'Letscht',
 'page_first' => 'Aafang',
 'page_last' => 'End',
-'histfirst' => 'Eldescht',
-'histlast' => 'Letscht',
+'histfirst' => 'eldescht',
+'histlast' => 'neieschd',
 'historysize' => '({{PLURAL:$1|1 Beit|$1 Beit}})',
 'historyempty' => '(leer)',
 
@@ -369,7 +391,7 @@ Paesswatt fer nau: $2',
 'rev-showdeleted' => 'zeig',
 'revdelete-no-file' => 'Sell Feil gebt es net.',
 'revdelete-show-file-submit' => 'Ya',
-'revdelete-hide-text' => 'Text vun de Version verschwinne losse',
+'revdelete-hide-text' => 'Text vun de Version',
 'revdelete-radio-same' => '(net ennere)',
 'revdelete-radio-set' => 'Ya',
 'revdelete-radio-unset' => 'Nee',
@@ -403,7 +425,7 @@ Paesswatt fer nau: $2',
 'search-section' => '(Abschnitt $1)',
 'search-suggest' => 'Iss „$1“ gemeent?',
 'search-interwiki-caption' => 'Schweschder Projects',
-'search-interwiki-default' => '$1 Results:',
+'search-interwiki-default' => 'Results vun $1:',
 'search-interwiki-more' => '(weidere)',
 'searchall' => 'all',
 'powersearch-ns' => 'Guck uff in Blatznaame:',
@@ -435,14 +457,16 @@ Paesswatt fer nau: $2',
 'prefs-custom-css' => 'CSS vum Yuuser',
 'prefs-custom-js' => 'JavaScript vum Yuuser',
 'youremail' => 'E-Poschde:',
-'username' => 'Yuuser-Naame:',
-'uid' => 'Yuuser-ID:',
-'prefs-memberingroups' => 'Mitglied vun de {{PLURAL:$1|Yuuser-Druppe|Yuuser-Druppe}}:',
+'username' => '{{GENDER:$1|Yuuser-Naame}}:',
+'uid' => '{{GENDER:$1|Yuuser-ID}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Mitglied}} vun de {{PLURAL:$1|Yuuser-Druppe|Yuuser-Druppe}}:',
 'yourlanguage' => 'Schprooch:',
 'yourgender' => 'Geschlecht:',
-'gender-female' => 'Weiblich',
+'gender-female' => 'Ich bin weiblich',
 'email' => 'E-Poschde',
 'prefs-signature' => 'Unnerschrift',
+'prefs-editor' => 'Schreiwer',
+'prefs-preview' => 'Aasicht',
 'prefs-diffs' => 'Unnerschidd vun Versione',
 
 # User rights
@@ -672,7 +696,7 @@ Paesswatt fer nau: $2',
 'emailsent' => 'E-Poscht naus gschickt',
 
 # Watchlist
-'watchlist' => 'Mei Watsch-Lischt',
+'watchlist' => 'Watsch-Lischt',
 'mywatchlist' => 'Watsch-Lischt',
 'watchlistfor2' => 'Vun $1 $2',
 'watch' => 'watsche',
@@ -737,10 +761,10 @@ Guck $2 fer e Lischt vun de letscht Leschunge.',
 'blanknamespace' => '(Bledder)',
 
 # Contributions
-'contributions' => 'Ardickele vum Yuuser',
+'contributions' => 'Ardickele vum {{GENDER:$1|Yuuser}}',
 'contributions-title' => 'Ardickele vun „$1“',
 'mycontris' => 'Mei Ardickele',
-'contribsub2' => 'Fer $1 ($2)',
+'contribsub2' => 'Fer {{GENDER:$3|$1}} ($2)',
 'uctop' => '(ewwerscht)',
 'month' => 'unn Munet:',
 'year' => 'bis Yaahr:',
index fe31813..841b9b8 100644 (file)
@@ -20,16 +20,13 @@ $fallback = 'de';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Links unjastritje:',
-'tog-justify' => 'Tatjst em Blocksautz',
 'tog-hideminor' => 'Tjliene Endarunge ute latste Tiet nich wiese',
 'tog-extendwatchlist' => 'Moak dee Oppaussied-List jrata en wies aula Endarunge',
 'tog-usenewrc' => 'Betre Doastalinj (JavaScript es needich)',
 'tog-numberheadings' => 'Ewaschrefte automatisch numerere',
 'tog-showtoolbar' => 'Instrumente-Leist wiese (JavaScript)',
 'tog-editondblclick' => 'Siede mett Dobbeltklick beoabeide (JavaScript)',
-'tog-editsection' => 'Links tom Beoabeide von eenzelne Aufschnette wiese',
 'tog-editsectiononrightclick' => 'Eenzelne Aufschnette mett eenem Rajsch-Klick beoabeide (JavaScript)',
-'tog-showtoc' => 'Wies dee List mettem Enhault (fe Siede mett meea aus dree Ewaschrefte)',
 'tog-rememberpassword' => 'Login bewoare, dee Brucka blift aun disem Computer aunjemaldt',
 'tog-previewontop' => 'Wies Preview bowe em Beoabeide-Fensta',
 'tog-showhiddencats' => "Wies fe'stoakne Kategorien",
@@ -479,7 +476,6 @@ Dee Grunt es: "$2"',
 'tooltip-pt-watchlist' => 'List fonn Siede, op de du oppausst, waut sikj endat',
 'tooltip-pt-mycontris' => 'List fonn diene Biedroage',
 'tooltip-pt-login' => 'Aunmalde wudd scheen senne, es oba nich onbedinjt needich.',
-'tooltip-pt-anonlogin' => 'Aunmalde wudd scheen senne, es oba nich onbedinjt needich.',
 'tooltip-pt-logout' => 'Rut hia',
 'tooltip-ca-talk' => 'Diskussioon ewa dem Ennhault vonne Sied',
 'tooltip-ca-edit' => 'Du kaunst dise Sied beoabeide. Bitte verrem Bewoare dee Eschtmolseene-Funktioon brucke.',
index e76baaf..1e240c7 100644 (file)
@@ -15,6 +15,7 @@
  * @author Chrumps
  * @author Clamira
  * @author Cysioland
+ * @author Dalis
  * @author Debeet
  * @author Derbeth
  * @author Equadus
@@ -22,6 +23,7 @@
  * @author Geitost
  * @author Herr Kriss
  * @author Holek
+ * @author Jacenty359
  * @author Jwitos
  * @author Kaganer
  * @author Kaligula
@@ -316,7 +318,7 @@ $magicWords = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'Podkreślenie linków',
+'tog-underline' => 'Podkreślenie linków:',
 'tog-hideminor' => 'Ukryj drobne edycje w ostatnich zmianach',
 'tog-hidepatrolled' => 'Ukryj sprawdzone edycje w ostatnich zmianach',
 'tog-newpageshidepatrolled' => 'Ukryj sprawdzone strony na liście nowych stron',
@@ -352,7 +354,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Przesyłaj mi kopie wiadomości, które wysyłam do innych użytkowników',
 'tog-diffonly' => 'Nie pokazuj treści stron pod porównaniami zmian',
 'tog-showhiddencats' => 'Pokazuj ukryte kategorie',
-'tog-noconvertlink' => 'Wyłącz konwersję tytułów w linkach',
 'tog-norollbackdiff' => 'Pomiń pokazywanie zmian po użyciu funkcji „cofnij”',
 'tog-useeditwarning' => 'Ostrzegaj mnie, gdy opuszczam stronę edycji bez zapisania zmian',
 'tog-prefershttps' => 'Zawsze używaj bezpiecznego połączenia po zalogowaniu',
@@ -479,7 +480,6 @@ $messages = array(
 'vector-action-protect' => 'Zabezpiecz',
 'vector-action-undelete' => 'Odtwórz',
 'vector-action-unprotect' => 'Zmień zabezpieczenie',
-'vector-simplesearch-preference' => 'Włącz uproszczony pasek wyszukiwania (tylko dla skórki Wektor)',
 'vector-view-create' => 'Utwórz',
 'vector-view-edit' => 'Edytuj',
 'vector-view-history' => 'Wyświetl historię',
@@ -764,8 +764,6 @@ Nie zapomnij dostosować [[Special:Preferences|preferencji]].',
 'gotaccountlink' => 'Zaloguj się',
 'userlogin-resetlink' => 'Zapomniałeś danych do zalogowania się?',
 'userlogin-resetpassword-link' => 'Nie pamiętasz hasła?',
-'helplogin-url' => 'Help:Logowanie',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoc z logowaniem]]',
 'userlogin-loggedin' => 'Zalogowano jako {{GENDER:$1|$1}}.
 Użyj poniższego formularza, aby zalogować się jako inny użytkownik.',
 'userlogin-createanother' => 'Załóż nowe konto',
@@ -863,6 +861,10 @@ Odczekaj $1 zanim ponowisz próbę.',
 'suspicious-userlogout' => 'Żądanie wylogowania zostało odrzucone ponieważ wygląda na to, że zostało wysłane przez uszkodzoną przeglądarkę lub buforujący serwer proxy.',
 'createacct-another-realname-tip' => 'Wpisanie imienia i nazwiska nie jest obowiązkowe.
 Jeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje autorstwo.',
+'pt-login' => 'Zaloguj się',
+'pt-login-button' => 'Zaloguj się',
+'pt-createaccount' => 'Utwórz konto',
+'pt-userlogout' => 'Wyloguj',
 
 # Email sending
 'php-mail-error-unknown' => 'Wystąpił nieznany błąd w funkcji PHP mail()',
@@ -871,8 +873,7 @@ Jeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje auto
 
 # Change password dialog
 'changepassword' => 'Zmiana hasła',
-'resetpass_announce' => '{{GENDER:|Zalogowałeś|Zalogowałaś}} się, wykorzystując tymczasowe hasło otrzymane poprzez e‐mail.
-Aby zakończyć proces logowania, musisz ustawić nowe hasło:',
+'resetpass_announce' => 'Aby zakończyć proces logowania, musisz ustawić nowe hasło.',
 'resetpass_text' => '<!-- Dodaj tekst -->',
 'resetpass_header' => 'Zmień hasło dla swojego konta',
 'oldpassword' => 'Stare hasło',
@@ -888,8 +889,13 @@ Odczekaj $1, zanim ponowisz próbę.',
 'resetpass-submit-cancel' => 'Anuluj',
 'resetpass-wrong-oldpass' => 'Nieprawidłowe tymczasowe lub aktualne hasło.
 Być może właśnie zmienił{{GENDER:|eś|aś|eś(‐aś)}} swoje hasło lub poprosił{{GENDER:|eś|aś|eś(‐aś)}} o nowe tymczasowe hasło.',
+'resetpass-recycled' => 'Zmień swoje hasło na inne niż aktualne.',
+'resetpass-temp-emailed' => 'Zalogowałeś się dzięki tymczasowemu kodowi.
+Aby dokończyć logowanie, musisz ustawić nowe hasło tutaj:',
 'resetpass-temp-password' => 'Tymczasowe hasło:',
 'resetpass-abort-generic' => 'Zmiana hasła została przerwana przez rozszerzenie.',
+'resetpass-expired' => 'Twoje hasło wygasło. Proszę ustawić nowe hasło do logowania.',
+'resetpass-expired-soft' => 'Twoje hasło wygasło i musi zostać zresetowane. Proszę wybrać nowe hasło albo kliknąć na "{{int:resetpass-submit-cancel}}", aby zresetować je później.',
 
 # Special:PasswordReset
 'passwordreset' => 'Wyczyść hasło',
@@ -1054,11 +1060,11 @@ Upewnij się, czy na pewno zamierza{{GENDER:|łeś|łaś|sz}} utworzyć lub zmod
 'userpage-userdoesnotexist-view' => 'Konto użytkownika „$1” nie jest zarejestrowane.',
 'blocked-notice-logextract' => '{{GENDER:$1|Ten użytkownik|Ta użytkowniczka}} jest obecnie {{GENDER:$1|zablokowany|zablokowana}}.
 Ostatni wpis rejestru blokad jest pokazany poniżej.',
-'clearyourcache' => "'''Uwaga:''' aby zobaczyć zmiany po zapisaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.
-* '''Firefox / Safari:''' Przytrzymaj ''Shift'' podczas klikania ''Odśwież bieżącą stronę'', lub naciśnij klawisze ''Ctrl+F5'' lub ''Ctrl+R'' (''⌘-R'' na komputerze Mac)
-* '''Google Chrome:''' Naciśnij ''Ctrl-Shift-R'' (''⌘-Shift-R'' na komputerze Mac)
-* '''Internet Explorer:''' Przytrzymaj ''Ctrl'' jednocześnie klikając ''Odśwież'' lub naciśnij klawisze ''Ctrl+F5''
-* '''Opera:''' Wyczyść pamięć podręczną w ''Narzędzia → Preferencje''",
+'clearyourcache' => '<strong>Uwaga:</strong> aby zobaczyć zmiany po zapisaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.
+* <strong>Firefox / Safari:</strong> Przytrzymaj <em>Shift</em> podczas klikania <em>Odśwież bieżącą stronę</em>, lub naciśnij klawisze <em>Ctrl+F5</em> lub <em>Ctrl+R</em> (<em>⌘-R</em> na komputerze Mac)
+* <strong>Google Chrome:</strong> Naciśnij <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> na komputerze Mac)
+* <strong>Internet Explorer:</strong> Przytrzymaj <em>Ctrl</em>, jednocześnie klikając <em>Odśwież</em>, lub naciśnij klawisze <em>Ctrl+F5</em>
+* <strong>Opera:</strong> Wyczyść pamięć podręczną w <em>Narzędzia → Preferencje</em>',
 'usercssyoucanpreview' => "'''Podpowiedź:''' Użyj przycisku „Podgląd”, aby przetestować nowy arkusz stylów CSS przed jego zapisaniem.",
 'userjsyoucanpreview' => "'''Podpowiedź:''' Użyj przycisku „Podgląd”, aby przetestować nowy kod JavaScript przed jego zapisaniem.",
 'usercsspreview' => "'''Pamiętaj, że to tylko podgląd arkusza stylów CSS – nic jeszcze nie zostało zapisane!'''",
@@ -1161,6 +1167,7 @@ Strona już istnieje.',
 'editwarning-warning' => 'Opuszczenie tej strony może spowodować utratę wprowadzonych przez Ciebie zmian.
 Jeśli jesteś zalogowany, możesz wyłączyć wyświetlanie tego ostrzeżenia w zakładce „{{int:prefs-editing}}” w swoich preferencjach.',
 'editpage-notsupportedcontentformat-title' => 'Nieobsługiwany format zawartości',
+'editpage-notsupportedcontentformat-text' => 'Format zawartości $1 nie jest obsługiwany modelem treści $2.',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
@@ -1194,6 +1201,7 @@ Argument ten będzie pominięty.',
 'undo-success' => 'Edycja może zostać wycofana. Porównaj ukazane poniżej różnice między wersjami, a następnie zapisz zmiany.',
 'undo-failure' => 'Edycja nie może zostać wycofana z powodu konfliktu z wersjami pośrednimi.',
 'undo-norev' => 'Edycja nie może być cofnięta, ponieważ nie istnieje lub została usunięta.',
+'undo-nochange' => 'Wygląda na to, że edycja została już anulowana.',
 'undo-summary' => 'Anulowanie wersji $1 autora [[Special:Contributions/$2|$2]] ([[User talk:$2|dyskusja]])',
 'undo-summary-username-hidden' => 'Anulowanie wersji $1 autorstwa ukrytego użytkownika',
 
@@ -1280,8 +1288,8 @@ wybrana wersja nie istnieje lub próbowano ukryć wersję bieżącą.',
 'revdelete-show-file-submit' => 'Tak',
 'revdelete-selected' => "'''{{PLURAL:$2|Zaznaczona wersja|Zaznaczone wersje}} strony [[:$1]]:'''",
 'logdelete-selected' => "'''Zaznaczone {{PLURAL:$1|zdarzenie|zdarzenia}} z rejestru:'''",
-'revdelete-text' => "'''Usunięte wersje i czynności będą nadal widoczne w historii strony i rejestrach, ale ich treść nie będzie publicznie dostępna.'''
-Inni administratorzy {{GRAMMAR:D.lp|{{SITENAME}}}} nadal będą mieć dostęp do ukrytych treści oraz będą mogli je odtworzyć używając standardowych mechanizmów, chyba że nałożono dodatkowe ograniczenia.",
+'revdelete-text-text' => 'Usunięte wersje będą nadal widoczne w historii strony, ale niektóre fragmenty ich treści nie będą dostępne dla wszystkich.',
+'revdelete-text-file' => 'Usunięte wersje pliku będą nadal widoczne w historii pliku, ale niektóre fragmenty ich treści nie będą dostępne dla wszystkich.',
 'revdelete-confirm' => 'Potwierdź, że chcesz to zrobić zgodnie z [[{{MediaWiki:Policy-url}}|zasadami]] i że rozumiesz konsekwencje.',
 'revdelete-suppress-text' => "Ukrywanie powinno być używane '''wyłącznie''' w sytuacji:
 * Informacji, która może być zniesławieniem
@@ -1374,6 +1382,8 @@ Użycie linków nawigacyjnych kasuje wybór w kolumnie.',
 'showhideselectedversions' => 'Pokaż lub ukryj zaznaczone wersje',
 'editundo' => 'anuluj edycję',
 'diff-empty' => '(Brak różnic)',
+'diff-multi-sameuser' => '(Nie pokazano $1 {{PLURAL:$1|pośredniej wersji utworzonej|pośrednich wersji utworzonych}} przez tego samego użytkownika)',
+'diff-multi-otherusers' => '(Nie pokazano $1 wersji {{PLURAL:$1|utworzonej|utworzonych}} przez {{PLURAL:$2|jednego użytkownika|$2 użytkowników}})',
 'diff-multi-manyusers' => '(Nie pokazano $1 {{PLURAL:$1|pośredniej wersji utworzonej|pośrednich wersji utworzonych}} przez {{PLURAL:$2|jednego użytkownika|$2 użytkowników}})',
 'difference-missing-revision' => '{{PLURAL:$2|Wersja|$2 wersje|$2 wersji}} #$1 strony "{{PAGENAME}}" nie {{PLURAL:$2|została znaleziona|zostały znalezione|zostało znalezionych}}.
 
@@ -1409,15 +1419,17 @@ Zazwyczaj jest to spowodowane przestarzałym linkiem do usuniętej strony. Powó
 'search-result-score' => 'Trafność: $1%',
 'search-redirect' => '(przekierowanie $1)',
 'search-section' => '(sekcja $1)',
+'search-file-match' => '(odpowiada zawartości pliku)',
 'search-suggest' => 'Czy chodziło Ci o: $1',
 'search-interwiki-caption' => 'Projekty siostrzane',
-'search-interwiki-default' => 'Wyniki dla $1:',
+'search-interwiki-default' => 'Wyniki od $1:',
 'search-interwiki-more' => '(więcej)',
 'search-relatedarticle' => 'Pokrewne',
 'searcheverything-enable' => 'Szukaj we wszystkich przestrzeniach nazw',
 'searchrelated' => 'pokrewne',
 'searchall' => 'wszystkie',
 'showingresults' => "Poniżej znajduje się lista {{PLURAL:$1|z '''1''' wynikiem|'''$1''' wyników}}, rozpoczynając od wyniku numer '''$2'''.",
+'showingresultsinrange' => 'Poniżej wyświetlono co najwyżej {{PLURAL:$1|<strong>1</strong> wynik|<strong>$1</strong> wyniki|<strong>$1</strong> wyników}} w zakresie od <strong>$2</strong> do <strong>$3</strong>.',
 'showingresultsnum' => "Poniżej znajduje się lista {{PLURAL:$3|z '''1''' wynikiem|'''$3''' wyników}}, rozpoczynając od wyniku numer '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Wynik '''$1''' z '''$3'''|Wyniki '''$1 – $2''' z '''$3'''}} dla '''$4'''",
 'search-nonefound' => 'Brak wyników spełniających kryteria podane w zapytaniu.',
@@ -1460,7 +1472,7 @@ Jednak informacje o treści {{GRAMMAR:D.lp|{{SITENAME}}}} mogą być w Google ni
 'prefs-email' => 'E‐mail',
 'prefs-rendering' => 'Wygląd',
 'saveprefs' => 'Zapisz',
-'restoreprefs' => 'Przywróć wszystkie domyślne preferencje (we wszystkich sekcjach)',
+'restoreprefs' => 'Przywróć wszystkie domyślne preferencje (we wszystkich zakładkach)',
 'prefs-editing' => 'Edycja',
 'rows' => 'Wiersze',
 'columns' => 'Kolumny',
@@ -1603,7 +1615,7 @@ Jeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje auto
 # Rights
 'right-read' => 'Czytanie treści stron',
 'right-edit' => 'Edycja stron',
-'right-createpage' => 'Tworzenie stron (nie będących stronami dyskusji)',
+'right-createpage' => 'Tworzenie stron (niebędących stronami dyskusji)',
 'right-createtalk' => 'Tworzenie stron dyskusji',
 'right-createaccount' => 'Tworzenie kont użytkowników',
 'right-minoredit' => 'Oznaczanie edycji jako drobnych',
@@ -1639,7 +1651,7 @@ Jeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje auto
 'right-ipblock-exempt' => 'Obejście blokad, automatycznych blokad i blokad zakresów adresów IP',
 'right-proxyunbannable' => 'Obejście automatycznych blokad proxy',
 'right-unblockself' => 'Odblokowanie samego siebie',
-'right-protect' => 'Zmiana stopnia zabezpieczenia i dostęp do edycji stron zabezpieczonych kaskadowo',
+'right-protect' => 'Zmiana poziomu zabezpieczenia i edycja stron zabezpieczonych kaskadowo',
 'right-editprotected' => 'Edycja stron zabezpieczonych na poziomie „{{int:protect-level-sysop}}”',
 'right-editsemiprotected' => 'Edycja stron zabezpieczonych na poziomie „{{int:protect-level-autoconfirmed}}”',
 'right-editinterface' => 'Edycja interfejsu użytkownika',
@@ -1653,7 +1665,7 @@ Jeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje auto
 'right-viewmyprivateinfo' => 'Podgląd swoich prywatnych danych (np. adres e-mail, prawdziwe imię i nazwisko)',
 'right-editmyprivateinfo' => 'Edycja swoich prywatnych danych (np. adres e-mail, prawdziwe imię i nazwisko)',
 'right-editmyoptions' => 'Edycja swoich preferencji',
-'right-rollback' => 'Szybkie wycofanie zmian wprowadzonych przez użytkownika, który jako ostatni edytował jakąś stronę',
+'right-rollback' => 'Szybkie wycofanie zmian wprowadzonych przez użytkownika, który jako ostatni edytował stronę',
 'right-markbotedits' => 'Oznaczanie rewertu jako edycji bota',
 'right-noratelimit' => 'Brak ograniczeń przepustowości',
 'right-import' => 'Importowanie stron z innych wiki',
@@ -1739,11 +1751,23 @@ Jeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje auto
 'rcnotefrom' => "Poniżej pokazano zmiany wykonane po '''$2''' (nie więcej niż '''$1''' pozycji).",
 'rclistfrom' => 'Pokaż nowe zmiany od $1',
 'rcshowhideminor' => '$1 drobne zmiany',
+'rcshowhideminor-show' => 'Pokaż',
+'rcshowhideminor-hide' => 'Ukryj',
 'rcshowhidebots' => '$1 boty',
+'rcshowhidebots-show' => 'Pokaż',
+'rcshowhidebots-hide' => 'Ukryj',
 'rcshowhideliu' => '$1 zarejestrowanych',
+'rcshowhideliu-show' => 'Pokaż',
+'rcshowhideliu-hide' => 'Ukryj',
 'rcshowhideanons' => '$1 anonimowych',
+'rcshowhideanons-show' => 'Pokaż',
+'rcshowhideanons-hide' => 'Ukryj',
 'rcshowhidepatr' => '$1 sprawdzone',
+'rcshowhidepatr-show' => 'Pokaż',
+'rcshowhidepatr-hide' => 'Ukryj',
 'rcshowhidemine' => '$1 moje edycje',
+'rcshowhidemine-show' => 'Pokaż',
+'rcshowhidemine-hide' => 'Ukryj',
 'rclinks' => 'Pokaż ostatnie $1 zmian w ciągu ostatnich $2 dni.<br />$3',
 'diff' => 'różn.',
 'hist' => 'hist.',
@@ -1872,6 +1896,8 @@ Sprawdź historię usunięć tamtego pliku zanim prześlesz go ponownie.',
 'uploaddisabledtext' => 'Możliwość przesyłania plików została wyłączona.',
 'php-uploaddisabledtext' => 'Przesyłanie plików PHP zostało zablokowane. Sprawdź ustawienie „file_uploads”.',
 'uploadscripted' => 'Plik zawiera kod HTML lub skrypt, który może zostać błędnie zinterpretowany przez przeglądarkę internetową.',
+'uploadscriptednamespace' => "Ten plik SVG zawiera niepoprawną nazwę '$1'",
+'uploadinvalidxml' => 'Nie udało się przeanalizować XML w załadowanym pliku.',
 'uploadvirus' => 'W pliku jest wirus! Szczegóły: $1',
 'uploadjava' => 'Ten plik zawiera deklarację klasy Java skompresowaną ZIP.
 Przesyłanie plików Java nie jest dozwolone, ponieważ mogłoby zostać użyte do obchodzenia zabezpieczeń.',
@@ -2244,10 +2270,20 @@ Każdy wiersz zawiera linki do pierwszego i drugiego przekierowania oraz link, d
 'deadendpagestext' => 'Poniższe strony nie posiadają odnośników do innych stron znajdujących się w {{GRAMMAR:MS.lp|{{SITENAME}}}}.',
 'protectedpages' => 'Strony zabezpieczone',
 'protectedpages-indef' => 'Tylko strony zabezpieczone na zawsze',
+'protectedpages-summary' => 'Ta strona zawiera istniejące strony które są chronione. Aby uzyskać listę tytułów których stworzenie jest zabronione, zobacz [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Tylko strony zabezpieczone rekursywnie',
 'protectedpages-noredirect' => 'Ukryj przekierowania',
 'protectedpagesempty' => 'Żadna strona nie jest obecnie zabezpieczona z podanymi parametrami.',
+'protectedpages-timestamp' => 'Sygnatura czasowa',
+'protectedpages-page' => 'Strona',
+'protectedpages-expiry' => 'Wygasa',
+'protectedpages-performer' => 'Użytkownik zabezpieczający',
+'protectedpages-params' => 'Parametry zabezpieczenia',
+'protectedpages-reason' => 'Powód',
+'protectedpages-unknown-timestamp' => 'Nieznane',
+'protectedpages-unknown-performer' => 'Użytkownik nieznany',
 'protectedtitles' => 'Zabezpieczone nazwy stron',
+'protectedtitles-summary' => 'Ta strona zawiera tytuły, których tworzenie jest zabronione. Aby zobaczyć listę istniejących stron które są chronione, odwiedź tą stronę [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]',
 'protectedtitlesempty' => 'Dla tych ustawień dopuszczalne jest utworzenie stron o dowolnej nazwie.',
 'listusers' => 'Lista użytkowników',
 'listusers-editsonly' => 'Pokaż tylko użytkowników z edycjami',
@@ -2344,7 +2380,7 @@ Wymaga podania co najmniej domeny najwyższego poziomu np. „*.org”.<br />
 # Special:ActiveUsers
 'activeusers' => 'Lista aktywnych użytkowników',
 'activeusers-intro' => 'Poniżej znajduje się lista użytkowników, którzy byli aktywni w ciągu {{PLURAL:$1|ostatniego dnia|ostatnich $1 dni}}.',
-'activeusers-count' => 'w ciągu {{PLURAL:$3|ostatniego dnia|ostatnich $3 dni}} {{GENDER:$2|wykonał|wykonała|wykonał}} $1 {{PLURAL:$1|edycję|edycje|edycji}}',
+'activeusers-count' => 'w ciągu {{PLURAL:$3|ostatniego dnia|ostatnich $3 dni}} {{GENDER:$2|wykonał|wykonała|wykonał}} $1 {{PLURAL:$1|operację|operacje|operacji}}',
 'activeusers-from' => 'Pokaż użytkowników zaczynając od',
 'activeusers-hidebots' => 'Ukryj boty',
 'activeusers-hidesysops' => 'Ukryj administratorów',
@@ -2518,7 +2554,7 @@ Zobacz na stronie $2 rejestr ostatnio wykonanych usunięć.',
 Usuwanie jej zostało ograniczone ze względu na możliwość zakłócenia pracy {{GRAMMAR:D.lp|{{SITENAME}}}}.',
 'delete-warning-toobig' => 'Ta strona ma bardzo długą historię edycji – ponad $1 {{PLURAL:$1|zmianę|zmiany|zmian}}.<br />
 Bądź ostrożny, ponieważ usunięcie jej może spowodować zakłócenia w pracy {{GRAMMAR:D.lp|{{SITENAME}}}}.',
-'deleting-backlinks-warning' => "''' Uwaga:''' Do strony, którą masz zamiar usunąć, odwołują się inne strony.",
+'deleting-backlinks-warning' => "''' Uwaga:''' Do strony, którą masz zamiar usunąć, odwołują się [[Special:WhatLinksHere/{{FULLPAGENAME}}|inne strony]].",
 
 # Rollback
 'rollback' => 'Cofnij edycję',
@@ -2697,6 +2733,7 @@ Poniżej znajduje się ostatni wpis w rejestrze blokowania.',
 'sp-contributions-search' => 'Szukaj wkładu',
 'sp-contributions-username' => 'Adres IP lub nazwa użytkownika',
 'sp-contributions-toponly' => 'Pokaż wyłącznie ostatnie wersje',
+'sp-contributions-newonly' => 'Pokazuj wyłącznie stworzenia stron',
 'sp-contributions-submit' => 'Szukaj',
 
 # What links here
@@ -2758,6 +2795,7 @@ Podaj powód (np. umieszczając nazwy stron, na których dopuszczono się wandal
 Przejdź do [[Special:BlockList|listy blokad]], by przejrzeć blokady.',
 'ipb-blockingself' => 'Usiłujesz zablokować siebie samego! Czy na pewno chcesz to zrobić?',
 'ipb-confirmhideuser' => 'Zamierzasz zablokować użytkownika z włączoną opcją „ukryj użytkownika”. Spowoduje to pominięcie nazwy użytkownika we wszystkich listach i rejestrach. Czy na pewno chcesz to zrobić?',
+'ipb-confirmaction' => 'Jeśli naprawdę chcesz to zrobić, zaznacz pole „{{int:ipb-confirm}}” poniżej.',
 'ipb-edit-dropdown' => 'Edytuj listę przyczyn blokady',
 'ipb-unblock-addr' => 'Odblokuj $1',
 'ipb-unblock' => 'Odblokuj użytkownika lub adres IP',
@@ -2799,7 +2837,7 @@ Przejdź do [[Special:BlockList|listy blokad]], by przejrzeć blokady.',
 'change-blocklink' => 'zmień blokadę',
 'contribslink' => 'edycje',
 'emaillink' => 'wyślij e‐mail',
-'autoblocker' => 'Zablokowano Cię automatycznie, ponieważ używasz tego samego adresu IP, co użytkownik „[[User:$1|$1]]”.
+'autoblocker' => 'Zablokowano Cię automatycznie, ponieważ twój adres IP był ostatnio używany przez „[[User:$1|$1]]”.
 Przyczyna blokady $1 to: „$2”',
 'blocklogpage' => 'Historia blokad',
 'blocklog-showlog' => '{{GENDER:$1|Ten użytkownik był|Ta użytkowniczka była}} już wcześniej {{GENDER:$1|blokowany|blokowana}}. Poniżej znajduje się rejestr blokad:',
@@ -3008,6 +3046,7 @@ $2',
 'thumbnail_image-type' => 'Grafika tego typu nie jest obsługiwana',
 'thumbnail_gd-library' => 'Niekompletna konfiguracja biblioteki GD – brak funkcji $1',
 'thumbnail_image-missing' => 'Chyba brakuje pliku $1',
+'thumbnail_image-failure-limit' => 'Ostatnio było zbyt wielu nieudanych prób ($1 lub więcej) utworzenia miniaturki. Spróbuj ponownie później.',
 
 # Special:Import
 'import' => 'Import stron',
@@ -3055,6 +3094,7 @@ Brak katalogu dla plików tymczasowych.',
 '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-error-bad-location' => 'Zmiana $2 używająca modelu danych $3 nie może zostać zapisana na "$1" na tej wiki, ze względu na to, że ten model danych nie jest wspierany na tej stronie.',
 '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.',
@@ -4232,6 +4272,7 @@ W przeciwnym wypadku można użyć prostego formularza poniżej. Komentarz zosta
 'api-error-overwrite' => 'Nadpisanie istniejącego pliku nie jest dopuszczalne.',
 'api-error-stashfailed' => 'Błąd wewnętrzny – serwer nie mógł zapisać pliku tymczasowego.',
 'api-error-publishfailed' => 'Błąd wewnętrzny: serwer nie mógł zapisać pliku tymczasowego.',
+'api-error-stasherror' => 'Wystąpił błąd podczas przesyłania pliku.',
 'api-error-timeout' => 'Serwer nie odpowiedział w oczekiwanym czasie.',
 'api-error-unclassified' => 'Wystąpił nieznany błąd',
 'api-error-unknown-code' => 'Błąd nieznany – „$1”',
@@ -4289,6 +4330,4 @@ W zasadzie rozwijane jest prawie wszystko w podwójnych nawiasach klamrowych.',
 'expand_templates_generate_rawhtml' => 'Pokaż surowy HTML',
 'expand_templates_preview' => 'Podgląd',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
 );
index 02af1fb..0d7fa7c 100644 (file)
@@ -79,7 +79,6 @@ $messages = array(
 'tog-ccmeonemails' => "Mandeme na còpia dij mëssagi ëd pòsta eletrònica che i-j mando a j'àotri utent",
 'tog-diffonly' => 'Smon-e pa ël contnù dle pàgine sota le diferense',
 'tog-showhiddencats' => 'Smon-e le categorìe stërmà',
-'tog-noconvertlink' => "Disativé la conversion dij tìtoj ant j'anliure",
 'tog-norollbackdiff' => "Fé nen vëdde le diferense apress d'avèj ripristinà",
 'tog-useeditwarning' => 'Aviseme quand che i chito na pàgina ëd modìfiche con dle modìfiche nen salvà',
 'tog-prefershttps' => "Dovré sempe na conession sigura pr'ësté andrinta al sistema",
@@ -206,7 +205,6 @@ $messages = array(
 'vector-action-protect' => 'Protege',
 'vector-action-undelete' => 'Arcuperé',
 'vector-action-unprotect' => 'Cangé la protession',
-'vector-simplesearch-preference' => "Abilité la bara d'arserca semplificà (mach për la pel Vector)",
 'vector-view-create' => 'Creé',
 'vector-view-edit' => 'Modifiché',
 'vector-view-history' => 'Smon-e la stòria',
@@ -488,8 +486,6 @@ Che a dësmentia pa ëd cambié ij [[Special:Preferences|sò gust për {{SITENAM
 'gotaccountlink' => "Ch'a rintra ant ël sistema",
 'userlogin-resetlink' => "A l'ha dësmentià ij sò detaj për intré ant ël sistema?",
 'userlogin-resetpassword-link' => 'Ciav dësmentià?',
-'helplogin-url' => 'Help:Conession',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Agiut con la conession]]',
 'userlogin-loggedin' => "A l'é già rintrà an ël sistema tanme {{GENDER:$1|$1}}.
 Ch'a deuvra ël formolari sì-sota për rintré coma n'àutr n'utent.",
 'userlogin-createanother' => "Creé n'àutr cont",
@@ -583,6 +579,9 @@ Për piasì, ch'a speta $1 prima ëd prové torna.",
 'suspicious-userlogout' => "Soa arcesta ëd seurte dal sistema a l'é stàita arfudà përchè a smija com s'a fussa stàita mandà da 'n navigador rot o da l'archiviassion an local d'un prëstanòm.",
 'createacct-another-realname-tip' => "Ël nòm ver a l'é opsional.
 S'a decid ëd butelo, a sarà dovrà për dé a l'utent ël mérit ëd sò travaj.",
+'pt-login' => 'Rintré ant ël sistema',
+'pt-createaccount' => 'Creé un cont',
+'pt-userlogout' => 'Seurte dal sistema',
 
 # Email sending
 'php-mail-error-unknown' => 'Eror pa conossù ant la funsion mail() ëd PHP.',
@@ -591,7 +590,7 @@ S'a decid ëd butelo, a sarà dovrà për dé a l'utent ël mérit ëd sò trava
 
 # Change password dialog
 'changepassword' => 'Cangé la ciav',
-'resetpass_announce' => "A l'é rintrà ant ël sistema con na ciav provisòria mandà për pòsta eletrònica. Për podèj livré la procedura a l'ha da butesse na ciav neuva ambelessì:",
+'resetpass_announce' => "Për podèj livré la procedura a l'ha da butesse na ciav neuva.",
 'resetpass_text' => '<!-- Gionté ël test ambelessì -->',
 'resetpass_header' => 'Cangé la ciav dël cont',
 'oldpassword' => 'Veja ciav:',
@@ -607,8 +606,13 @@ Për piasì, ch'a speta $1 prima ëd prové torna.",
 'resetpass-submit-cancel' => 'Anulé',
 'resetpass-wrong-oldpass' => "Ciav provisòria o corenta nen bon-a.
 Peul desse ch'a l'ha già cambià la ciav o a l'ha ciamà na neuva ciav provisòria.",
+'resetpass-recycled' => "Për piasì, ch'a cangia soa ciav an cheicòs ëd diferent da soa ciav atual.",
+'resetpass-temp-emailed' => "A l'é rintrà ant ël sistema con un còdes temporani mandà për pòsta eletrònica.
+Për finì ëd rintré ant ël sistema, a dev definì na neuva ciav ambelessì:",
 'resetpass-temp-password' => 'Ciav provisòria:',
 'resetpass-abort-generic' => "La modìfica ëd la ciav a l'é stàita anulà da n'estension.",
+'resetpass-expired' => "Soa ciav a l'é scadùa. Për piasì, ch'a definissa na ciav neuva për rintré ant ël sistema.",
+'resetpass-expired-soft' => "Soa ciav a l'é scadùa e a l'ha damanca d'esse arnovà. Për piasì, ch'a serna na neuva ciav adess o ch'a sgnaca su «{{int:resetpass-submit-cancel}}» për cangela pi tard.",
 
 # Special:PasswordReset
 'passwordreset' => 'Ri-inissialisassion ëd la ciav',
@@ -907,6 +911,7 @@ Costi paràmeter a son stàit ignorà.",
 'undo-success' => "Sta modìfica-sì as peul scancelesse. Për piasì, ch'a contròla ambelessì sota për esse sigur che a l'é pro lòn che a veul fé, e peuj ch'as salva lòn ch'a l'ha butà chiel/chila për finì dë scancelé la modìfica ch'a-i era.",
 'undo-failure' => "Sta modìfica a l'é nen podusse scancelé për via che a-i son dle contradission antra version antrames.",
 'undo-norev' => "La modìfica a peul nen esse anulà përchè a esist pa o a l'é stàita anulà.",
+'undo-nochange' => 'A smija che la modìfica a sia già stàita anulà.',
 'undo-summary' => 'Gavà la revision $1 fàita da [[Special:Contributions/$2|$2]] ([[User talk:$2|Ciaciarade]])',
 'undo-summary-username-hidden' => "Anulé la revision $1 ëd n'utent ëstërmà",
 
@@ -992,8 +997,6 @@ Chiel a peul ancora s-ciairé costa diferensa; a peulo essje pì 'd detaj ant ë
 'revdelete-show-file-submit' => 'Bò!',
 'revdelete-selected' => "'''{{PLURAL:$2|Revision|Revision}} selessionà për [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Event|Event}} dël registr selessionà:'''",
-'revdelete-text' => "Le version scancelà e j'event a së s-ciaireran sempe ant la stòria dla pàgina e ant ij registr, ma sò test al pùblich a j'andrà pì nen.'''
-J'àutri aministrator dzora a {{SITENAME}} a saran ancó sempe bon a s-ciairé ël contnù stërmà e a podran disdëscancelelo andré con la midema antërfacia, sempe che a sia nen stàita butà na restrission adissional.",
 'revdelete-confirm' => "Për piasì, ch'a confema ch'a veul fé sòn, ch'as rend cont dle conseguense, e ch'a lo fa an acòrd con [[{{MediaWiki:Policy-url}}|le régole]].",
 'revdelete-suppress-text' => "La scancelassion a dovrìa '''mach''' esse dovrà an costi cas:
 * Anformassion ch'a podrìo esse difamatòrie
@@ -1135,6 +1138,7 @@ Sòn a l'é normalment causà da l'andèje dapress a na veja liura stòrica a na
 'searchrelated' => 'corelà',
 'searchall' => 'tuti',
 'showingresults' => "Ambelessì-sota a treuva fin a {{PLURAL:$1|'''1'''|'''$1'''}} arzultà, a parte dal nùmer #'''$2'''.",
+'showingresultsinrange' => 'Smon-e sì-sota fin-a a {{PLURAL:$1|<strong>1</strong>|<strong>$1</strong>}} arzultà ant la serie da #<strong>$2</strong> a #<strong>$3</strong>.',
 'showingresultsnum' => "Ambelessì-sota a treuva {{PLURAL:$3|'''1'''|'''$3'''}} arzultà a parte da #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Arzultà '''$1''' ëd '''$3'''|Arzultà '''$1 - $2''' ëd '''$3'''}} për '''$4'''",
 'search-nonefound' => "A-i é gnun arzultà për l'arserca.",
@@ -1455,14 +1459,26 @@ Costa anformassion a sarà pùblica.",
 'recentchanges-legend-heading' => "'''Legend:'''",
 'recentchanges-legend-newpage' => '(vëdde ëdcò [[Special:NewPages|lista dle pàgine neuve]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => ' Ambelessì sota a-i é la lista dle modìfiche da <b>$2</b> (fin-a a <b>$1</b>).',
+'rcnotefrom' => 'Ambelessì sota a-i é la lista dle modìfiche da <strong>$2</strong> (mostrà fin-a a <strong>$1</strong>).',
 'rclistfrom' => 'Mostré le modìfiche a parte da $1',
 'rcshowhideminor' => '$1 le modìfiche cite',
+'rcshowhideminor-show' => 'Smon-e',
+'rcshowhideminor-hide' => 'Stërmé',
 'rcshowhidebots' => '$1 ij trigomiro',
+'rcshowhidebots-show' => 'Smon-e',
+'rcshowhidebots-hide' => 'Stërmé',
 'rcshowhideliu' => "$1 j'utent registrà",
+'rcshowhideliu-show' => 'Smon-e',
+'rcshowhideliu-hide' => 'Stërmé',
 'rcshowhideanons' => "$1 j'utent anònim",
+'rcshowhideanons-show' => 'Smon-e',
+'rcshowhideanons-hide' => 'Stërmé',
 'rcshowhidepatr' => '$1 le modìfiche verificà',
+'rcshowhidepatr-show' => 'Smon-e',
+'rcshowhidepatr-hide' => 'Stërmé',
 'rcshowhidemine' => '$1 mie modìfiche',
+'rcshowhidemine-show' => 'Smon-e',
+'rcshowhidemine-hide' => 'Stërmé',
 'rclinks' => "Mostré j'ùltime $1 modìfiche ëd j'ùltim $2 dì<br />$3",
 'diff' => 'dif.',
 'hist' => 'stòria',
@@ -1592,6 +1608,8 @@ A dovrìa ciamé a cheidun con la possibilità ëd vëdde ij dàit dj'archivi el
 'php-uploaddisabledtext' => "Ij cariament d'archivi a son disabilità an PHP.
 Për piasì, ch'a controla l'ampostassion file_uploads.",
 'uploadscripted' => "St'archivi-sì a l'ha andrinta chèich-còs (dël còdes HTML ò pura un senari) che a podrìa esse travajà mal da chèich programa ëd navigassion.",
+'uploadscriptednamespace' => "S'archivi SVG a conten në spassi nominal «$1» nen autorisà",
+'uploadinvalidxml' => "L'XML ant l'archivi carià a l'ha nen podù esse analisà.",
 'uploadvirus' => "St'archivi-sì a l'han andrinta un '''vìrus!''' Detaj: $1",
 'uploadjava' => "L'archivi a l'é n'archivi ZIP ch'a conten n'archivi Java .class.
 As peulo pa cariesse dj'archivi Java, përché a peulo causé l'agirament ëd le restrission ëd sicurëssa.",
@@ -1961,10 +1979,20 @@ Adess a l'é na ridiression a [[$2]].",
 'deadendpagestext' => "Le pàgine ambelessì-sota a l'han pa d'anliure anvers a j'àutre pàgine ëd {{SITENAME}}.",
 'protectedpages' => 'Pàgine sota protession',
 'protectedpages-indef' => 'Mach protession anfinìe',
+'protectedpages-summary' => "Costa pàgina a lista dle pàgine esistente che a son al moment protegiùe. Për na lista dij tìtoj ch'a son protet da la creassion, vëdde [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
 'protectedpages-cascade' => 'Mach protession a cascà',
 'protectedpages-noredirect' => 'Stërmé le ridiression',
 'protectedpagesempty' => 'Për adess a-i é pa gnun-a pàgina protegiùa',
+'protectedpages-timestamp' => 'Stampin data e ora',
+'protectedpages-page' => 'Pàgina',
+'protectedpages-expiry' => 'A scad ai',
+'protectedpages-performer' => "Protession ëd l'utent",
+'protectedpages-params' => 'Paràmeter ëd protession',
+'protectedpages-reason' => 'Rason',
+'protectedpages-unknown-timestamp' => 'Sconossùa',
+'protectedpages-unknown-performer' => 'Utent ësconossù',
 'protectedtitles' => 'Tìtoj protegiù',
+'protectedtitles-summary' => 'Costa pàgina a lista dij tìtoj che a son al moment protegiù da la creassion. Për na lista dle pàgine esistente che a son protegiùe, vëdde [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => "A-i é pa gnun tìtol protegiù ch'a-i intra coi criteri ch'a l'ha butà.",
 'listusers' => "Lista dj'utent",
 'listusers-editsonly' => "Mostré mach j'utent ch'a l'han fàit dle modìfiche",
@@ -2241,7 +2269,7 @@ Lë scancelassion ëd pàgine parèj a l'é stàita limità për evité ch'as fa
 'delete-warning-toobig' => "Sta pàgina-sì a l'ha na stòria motobin longa, bele pì che $1 {{PLURAL:$1|revision|revision}}.
 A scancelela as peul fesse darmagi a j'operassion dla base ëd dat ëd {{SITENAME}};
 ch'a daga da ment a lòn ch'a fa.",
-'deleting-backlinks-warning' => "'''Avis:''' D'àutre pàgine a l'han na liurao a transcludo a la pàgina che chiel a veul ëscancelé.",
+'deleting-backlinks-warning' => "'''Avis:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|D'àutre pàgine]] a l'han na liura o a transcludo la pàgina che chiel a veul ëscancelé.",
 
 # Rollback
 'rollback' => 'Gavé via le modìfiche',
@@ -2416,6 +2444,7 @@ L'ùltima intrada dël registr dij blocagi a l'é butà sì-sota për arferiment
 'sp-contributions-search' => 'Arserché le contribussion',
 'sp-contributions-username' => "Adrëssa IP ò stranòm dl'utent:",
 'sp-contributions-toponly' => "Mostré mach le modìfiche ch'a son j'ùltime revision",
+'sp-contributions-newonly' => "Mostré mach le modìfiche ch'a son dle creassion ëd pàgina",
 'sp-contributions-submit' => 'Arserché',
 
 # What links here
@@ -2519,7 +2548,7 @@ Ch'a consulta la [[Special:BlockList|lista dij blocagi]] për rivëdde ij blocag
 'change-blocklink' => 'modifiché ël blocagi',
 'contribslink' => 'contribussion',
 'emaillink' => 'mandé un mëssagi eletrònich',
-'autoblocker' => "A l'é scataje un blocagi përchè soa adrëssa IP a l'é staita dovrà ant j'ùltim temp da l'Utent «[[User:$1|$1]]». Ël motiv për bloché $1 a l'é stait: «'''$2'''»",
+'autoblocker' => "A l'é scataje un blocagi përchè soa adrëssa IP a l'é staita dovrà ant j'ùltim temp da l'Utent «[[User:$1|$1]]». Ël motiv për bloché $1 a l'é stait «'''$2'''»",
 'blocklogpage' => 'Registr dij blocagi',
 'blocklog-showlog' => "St'utent-sì a l'é già stàit blocà ant ël passà. Ël registr dij blocagi a l'é disponìbil sì-sota 'me arferiment:",
 'blocklog-showsuppresslog' => "St'utent-sì a l'é già stàit blocà e stërmà. Ël registr ëd j'eliminassion a l'é smonù sì-sota për arferiment:",
@@ -2730,6 +2759,7 @@ $2",
 'thumbnail_image-type' => 'Sòrt ëd figura nen gestì',
 'thumbnail_gd-library' => 'Configurassion incompleta dla biblioteca GD: Fonsion $1 mancanta',
 'thumbnail_image-missing' => "L'archivi a smija ch'a manca: $1",
+'thumbnail_image-failure-limit' => "A-i son ëstaje ëd recent tròpi tentativ falì ($1 o pi) ëd rende costa plancia. Për piasì, ch'a preuva torna pi tard.",
 
 # Special:Import
 'import' => 'Amportassion ëd pàgine',
@@ -3966,7 +3996,4 @@ An efet, a espand praticament tut lòn ch'a-i é antrames dle grafe dobie.",
 'expand_templates_generate_rawhtml' => "Smon-e l'HTML sempi",
 'expand_templates_preview' => 'Preuva',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
-'uploadinvalidxml' => "L'XML ant l'archivi carià a l'ha nen podù esse analisà.",
 );
index 47a6968..6cd0239 100644 (file)
@@ -170,7 +170,6 @@ $messages = array(
 'vector-action-protect' => 'بچاؤ',
 'vector-action-undelete' => 'واپس لیاؤ',
 'vector-action-unprotect' => 'تبدیلی بچاؤ',
-'vector-simplesearch-preference' => 'کھوج چ چنگے مشورے آن کرو',
 'vector-view-create' => 'بناؤ',
 'vector-view-edit' => 'لکھو',
 'vector-view-history' => 'تریخ وکھاؤ',
@@ -829,8 +828,6 @@ $3 نے ''$2'' وجہ دسی اے۔",
 'revdelete-show-file-submit' => 'ہاں',
 'revdelete-selected' => "'''{{PLURAL:$2|چنی ریوین|چنیاں ریویناں}} دی [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|چنیا لاگ واقعہ|چنے لاگ واقعے}}:'''",
-'revdelete-text' => "'''مٹائیاں ریویناں تے واقعے صفے دے رکارڈ تے لاگ چ دسن گے، پر اودا کج حصہ عام لوکاں ل‏ی لکیا ہووے گا'''
-دوجے مکھیا  {{سائیٹناں}} ہلے وی ایس قابل نیں جے لکی لکھت نوں ویکھ سکن تے اینوں واپس لے آن دوبارہ اودوں تک جے ایدے تے ہور روکاں ناں لا دتیا جان.",
 'revdelete-confirm' => 'اے پکا کرلو جے تسیں ایہ کرنا چاندے او، تے توانوں ایدے نتیجے دا پتہ اے، تے تسیں [[{{MediaWiki:Policy-url}}|پالیسی]] تے چل کے ک رۓ او۔',
 'revdelete-suppress-text' => "دبانا اودوں ای ٹھیک اے جدوں اے تھلے دتے کۓ مسلیاں لئی ہووے۔
 * غلط جانکاری
index 1a9aa80..253e579 100644 (file)
@@ -60,7 +60,6 @@ $dateFormats = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Υπογράμμιση συνδεσμίων:',
-'tog-justify' => 'Στοίχισην παραγραφίων',
 'tog-editondblclick' => 'Άλλαγμαν σελιδίων με διπλόν κλικ (JavaScript)',
 'tog-previewonfirst' => 'Δείξον πρώτον τέρεμαν σο πρώτον άλλαγμαν',
 'tog-shownumberswatching' => "Δείξον τοι χρήστς π' δεαβάζνε",
@@ -576,7 +575,6 @@ $messages = array(
 'lineno' => 'Γραμμή $1:',
 'compareselectedversions' => 'Γαρσουλαεύτε...',
 'editundo' => 'αναίρεση',
-'diff-multi' => "({{PLURAL:$1|Μίαν αλλαγήν|$1 αλλαγάς}} 'κ δεκνίζκουνταν.)",
 
 # Search results
 'searchresults' => 'Εύρον αποτελέσματα',
index 46ba229..bf98839 100644 (file)
@@ -321,7 +321,6 @@ $messages = array(
 'vector-action-protect' => 'ژغورل',
 'vector-action-undelete' => 'ناړنگول',
 'vector-action-unprotect' => 'ژغورنه بدلول',
-'vector-simplesearch-preference' => 'د پلټنې ساده پټه چارنول (يوازې په وېکټور پوښۍ کار کوي)',
 'vector-view-create' => 'جوړول',
 'vector-view-edit' => 'سمول',
 'vector-view-history' => 'پېښليک کتل',
@@ -583,7 +582,7 @@ $1',
 'userlogin-resetlink' => 'د ننوتلو مالومات مو هېر شوي؟',
 'userlogin-resetpassword-link' => 'پټنوم مو هېر شوی؟',
 'userlogin-createanother' => 'بل گڼون جوړول',
-'createacct-join' => 'خپÙ\84 Ù\85اÙ\84Ù\88Ù\85ات Ù\84اÙ\86دÛ\90 Ù\88رکÚ\93Û\8d',
+'createacct-join' => 'خپÙ\84 Ù\85اÙ\84Ù\88Ù\85ات Ù\85Ù\88 Ù\84اÙ\86دÛ\90 Ù\88رکÚ\93ئ.',
 'createacct-emailrequired' => 'برېښليک پته',
 'createacct-emailoptional' => 'برېښليک پته (اختياري)',
 'createacct-email-ph' => 'برېښليک پته مو وټاپۍ',
@@ -595,7 +594,7 @@ $1',
 'createacct-reason-ph' => 'ولې تاسې بل گڼون جوړول غوااړۍ',
 'createacct-captcha' => 'امنيتي تدبير',
 'createacct-imgcaptcha-ph' => 'پورته تاسې ته ښکاره شوی متن وټاپۍ',
-'createacct-submit' => 'گڼون مو جوړ کړۍ',
+'createacct-submit' => 'گڼون مو جوړ کړئ',
 'createacct-another-submit' => 'بل گڼون جوړول',
 'createacct-benefit-heading' => '{{SITENAME}} ستاسې په شان خلکو لخوا جوړ شوی.',
 'createacct-benefit-body1' => '{{PLURAL:$1|سمون|سمونونه}}',
@@ -667,6 +666,7 @@ $1',
 لطفاً د بيا هڅې نه مخکې $1 شېبې تم شۍ.',
 'login-abort-generic' => 'غونډال کې مو ننوتل نابريالی شو - ناڅاپي بند شو',
 'loginlanguagelabel' => 'ژبه: $1',
+'pt-login-button' => 'ننوتل',
 
 # Email sending
 'user-mail-no-addy' => 'د يوې برېښليک پتې پرته د برېښليک لېږلو هڅه شوې.',
@@ -985,7 +985,7 @@ $1',
 'shown-title' => 'په هر مخ $1 {{PLURAL:$1|پايله|پايلې}} ښکاره کول',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) کتل',
 'searchmenu-exists' => "'''په دې ويکي يو مخ د \"[[:\$1]]\" په نامه دی'''",
-'searchmenu-new' => "'''په دې ويکي د \"[[:\$1]]\" مخ جوړول!'''",
+'searchmenu-new' => '<strong>په دې ويکي د "[[:$1]]" مخ جوړول!</strong> {{PLURAL:$2|0=|See also the page found with your search.|د پلټنو موندل شوې پايلې هم وگورئ.}}',
 'searchprofile-articles' => 'مېنځپانگيز مخونه',
 'searchprofile-project' => 'د لارښود او پروژې مخونه',
 'searchprofile-images' => 'گڼرسنۍ',
@@ -1003,7 +1003,7 @@ $1',
 'search-section' => '(برخه $1)',
 'search-suggest' => 'آيا همدا مو موخه وه: $1',
 'search-interwiki-caption' => 'خورلڼې پروژې',
-'search-interwiki-default' => '$1 پايلې:',
+'search-interwiki-default' => 'پايلې له $1 څخه:',
 'search-interwiki-more' => '(نور)',
 'search-relatedarticle' => 'اړونده',
 'searcheverything-enable' => 'په ټولو نوم-تشيالونو کې پلټل',
@@ -1024,6 +1024,7 @@ $1',
 'preferences' => 'غوره توبونه',
 'mypreferences' => 'غوره توبونه',
 'prefs-edits' => 'د سمونو شمېر:',
+'prefsnologintext2' => 'د غوره توبونو بدلون لپاره مو $1 ترسره کړئ.',
 'prefs-skin' => 'پوښۍ',
 'skin-preview' => 'مخکتنه',
 'datedefault' => 'هېڅ نه ټاکل',
@@ -1248,8 +1249,8 @@ $1',
 'recentchanges-label-bot' => 'دا سمون يو روباټ ترسره کړی',
 'recentchanges-label-unpatrolled' => 'دغه سمون تر اوسه پورې نه دی څارل شوی',
 'recentchanges-label-plusminus' => 'د بايټونو د شمېر له مخې د مخ د بدلون کچه',
-'recentchanges-legend-newpage' => '(دا هم وگورۍ [[Special:NewPages|د نويو مخونو لړليک]])',
-'rcnotefrom' => "په همدې ځای کې لاندې هغه بدلونونه دي چې د '''$2''' نه راپدېخوا پېښ شوي (تر '''$1''' پورې ښکاره شوي).",
+'recentchanges-legend-newpage' => '([[Special:NewPages|د نويو مخونو لړليک]] هم وگورئ)',
+'rcnotefrom' => 'دلته لاندې د <strong>$2</strong> څخه راپدېخوا پېښ شوي بدلونونه راغلي (تر <strong>$1</strong> پورې ښکاري).',
 'rclistfrom' => 'هغه نوي بدلونونه ښکاره کول چې له $1 نه پيلېږي',
 'rcshowhideminor' => 'وړې سمونې $1',
 'rcshowhidebots' => 'روباټ $1',
@@ -1263,8 +1264,8 @@ $1',
 'hide' => 'پټول',
 'show' => 'ښکاره کول',
 'minoreditletter' => 'و',
-'newpageletter' => 'نوی',
-'boteditletter' => 'روباټ',
+'newpageletter' => 'ن',
+'boteditletter' => 'ر',
 'number_of_watching_users_pageview' => '[$1  {{PLURAL:$1|کارن|کارنان}} يې ګوري]',
 'rc_categories_any' => 'هر يو',
 'rc-change-size-new' => '$1 {{PLURAL:$1|بايټ|بايټونه}} د بدلون وروسته',
@@ -1823,7 +1824,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'protect-summary-cascade' => 'ځوړاوبيز',
 'protect-expiring' => 'په $1 (UTC) پای ته رسېږي',
 'protect-expiring-local' => 'پای نېټه $1',
-'protect-expiry-indefinite' => 'Ù\84امحدوده',
+'protect-expiry-indefinite' => 'Ù\86امحدوده',
 'protect-cascade' => 'په همدې مخ کې د ټولو گډو مخونو څخه ژغورنه کېږي (ځوړاوبيزه ژغورنه)',
 'protect-cantedit' => 'تاسې نه شی کولای چې د دې مخ د ژغورنې په کچه کې بدلون راولی، دا ځکه چې تاسې د دې مخ د سمولو اجازه نه لری.',
 'protect-othertime' => 'بل وخت:',
@@ -1836,7 +1837,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 ** بې گټې سمونې او خپرونې
 ** ډېر لوستونکی مخ',
 'protect-edit-reasonlist' => 'د ژغورنې سببونه سمول',
-'protect-expiry-options' => '1 Ø³Ø§Ø¹Øª:1 hour,1 Ù\88رÚ\81:1 day,1 Ø§Ù\88Ù\88Ù\86Û\8d:1 week,2 Ø§Ù\88Ù\88Ù\86Û\8d:2 weeks,1 Ù\85Ù\8aاشت:1 month,3 Ù\85Ù\8aاشتÛ\90:3 months,6 Ù\85Ù\8aاشتÛ\90:6 months,1 Ú©Ø§Ù\84:1 year,Ù\84امحدوده:infinite',
+'protect-expiry-options' => '1 Ø³Ø§Ø¹Øª:1 hour,1 Ù\88رÚ\81:1 day,1 Ø§Ù\88Ù\88Ù\86Û\8d:1 week,2 Ø§Ù\88Ù\88Ù\86Û\8d:2 weeks,1 Ù\85Ù\8aاشت:1 month,3 Ù\85Ù\8aاشتÛ\90:3 months,6 Ù\85Ù\8aاشتÛ\90:6 months,1 Ú©Ø§Ù\84:1 year,Ù\86امحدوده:infinite',
 'restriction-type' => 'اجازه:',
 'restriction-level' => 'د بنديز کچه:',
 'minimum-size' => 'وړه کچه',
@@ -1943,8 +1944,10 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'ipbemailban' => 'د کارن لخوا په برېښليک رالېږلو بنديز',
 'ipbsubmit' => 'په دې کارن بنديز لگول',
 'ipbother' => 'بل وخت:',
-'ipboptions' => '2 Ø³Ø§Ø¹ØªÙ\88Ù\86Ù\87:2 hours,1 Ù\88رÚ\81:1 day,3 Ù\88رÚ\81Û\90:3 days,1 Ø§Ù\88Ù\88Ù\86Û\8d:1 week,2 Ø§Ù\88Ù\88Ù\86Û\8d:2 weeks,1 Ù\85Ù\8aاشت:1 month,3 Ù\85Ù\8aاشتÛ\90:3 months,6 Ù\85Ù\8aاشتÛ\90:6 months,1 Ú©Ø§Ù\84:1 year,Ù\84امحدوده:infinite',
+'ipboptions' => '2 Ø³Ø§Ø¹ØªÙ\88Ù\86Ù\87:2 hours,1 Ù\88رÚ\81:1 day,3 Ù\88رÚ\81Û\90:3 days,1 Ø§Ù\88Ù\88Ù\86Û\8d:1 week,2 Ø§Ù\88Ù\88Ù\86Û\8d:2 weeks,1 Ù\85Ù\8aاشت:1 month,3 Ù\85Ù\8aاشتÛ\90:3 months,6 Ù\85Ù\8aاشتÛ\90:6 months,1 Ú©Ø§Ù\84:1 year,Ù\86امحدوده:infinite',
 'ipbhidename' => 'کارن-نوم له سمون او لړليکونو پټول',
+'ipbwatchuser' => 'د دې کارن د خبرو اترو مخ او کارن مخ کتل',
+'ipb-disableusertalk' => 'د بنديز لگېدو سره دې د کارن د خبرو اترو مخ د سمولو مخنيوی هم پلي شي',
 'ipb-confirm' => 'د بنديز تاييد',
 'badipaddress' => 'ناسمه IP پته',
 'blockipsuccesssub' => 'بنديز په برياليتوب سره ولگېده',
index 2269efa..89f190e 100644 (file)
@@ -22,6 +22,7 @@
  * @author GoEThe
  * @author Hamilton Abreu
  * @author Helder.wiki
+ * @author Imperadeiro98
  * @author Indech
  * @author Jens Liebenau
  * @author Jorge Morais
@@ -37,6 +38,7 @@
  * @author Malafaya
  * @author Manuel Menezes de Sequeira
  * @author Masked Rogue
+ * @author Matma Rex
  * @author McDutchie
  * @author MetalBrasil
  * @author Minh Nguyen
@@ -46,6 +48,7 @@
  * @author Opraco
  * @author Paulo Juntas
  * @author Pedroca cerebral
+ * @author Polyethylen
  * @author Rafael Vargas
  * @author Rei-artur
  * @author Remember the dot
@@ -321,7 +324,7 @@ $magicWords = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'Sublinhar ligação:',
+'tog-underline' => 'Sublinhar ligações:',
 'tog-hideminor' => 'Esconder edições menores nas mudanças recentes',
 'tog-hidepatrolled' => 'Esconder edições patrulhadas nas mudanças recentes',
 'tog-newpageshidepatrolled' => 'Esconder páginas patrulhadas na lista de páginas novas',
@@ -330,8 +333,8 @@ $messages = array(
 'tog-numberheadings' => 'Auto-numerar cabeçalhos',
 'tog-showtoolbar' => 'Mostrar barra de edição',
 'tog-editondblclick' => 'Editar páginas quando houver um clique duplo',
-'tog-editsectiononrightclick' => 'Possibilitar a edição de seções por clique com o botão direito no título da seção',
-'tog-rememberpassword' => 'Recordar os meus dados neste browser (no máximo, durante $1 {{PLURAL:$1|dia|dias}})',
+'tog-editsectiononrightclick' => 'Possibilitar a edição de secções por clique com o botão direito no título da secção',
+'tog-rememberpassword' => 'Recordar os meus dados neste navegador (no máximo, durante $1 {{PLURAL:$1|dia|dias}})',
 'tog-watchcreations' => 'Adicionar as páginas e ficheiros que eu criar às minhas páginas vigiadas',
 'tog-watchdefault' => 'Adicionar as páginas e ficheiros que eu editar às minhas páginas vigiadas',
 'tog-watchmoves' => 'Adicionar as páginas e ficheiros que eu mover às minhas páginas vigiadas',
@@ -357,20 +360,19 @@ $messages = array(
 'tog-ccmeonemails' => 'Enviar-me cópias das mensagens por correio electrónico que eu enviar a outros utilizadores',
 'tog-diffonly' => 'Não mostrar o conteúdo da página ao comparar duas edições',
 'tog-showhiddencats' => 'Mostrar categorias ocultas',
-'tog-noconvertlink' => 'Impossibilitar a conversão dos títulos de links',
 'tog-norollbackdiff' => 'Omitir diferenças depois de reverter edições em bloco',
 'tog-useeditwarning' => 'Avisar-me ao abandonar uma página editada sem gravar as alterações.',
-'tog-prefershttps' => 'Sempre utilizar uma conexão segura ao iniciar sessão',
+'tog-prefershttps' => 'Usar sempre uma ligação segura quando estiver autenticado',
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Nunca',
-'underline-default' => 'Usar opção padrão do tema ou do browser',
+'underline-default' => 'Usar opção padrão do tema ou do navegador',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Fonte de edição:',
-'editfont-default' => 'Fonte por omissão, do browser',
+'editfont-default' => 'Fonte por omissão, do navegador',
 'editfont-monospace' => 'Fonte monoespaçada',
-'editfont-sansserif' => 'Fonte sans-serif',
+'editfont-sansserif' => 'Fonte sem serifa',
 'editfont-serif' => 'Fonte serifada',
 
 # Dates
@@ -402,7 +404,7 @@ $messages = array(
 'december' => 'dezembro',
 'january-gen' => 'janeiro',
 'february-gen' => 'fevereiro',
-'march-gen' => 'Março',
+'march-gen' => 'março',
 'april-gen' => 'abril',
 'may-gen' => 'maio',
 'june-gen' => 'junho',
@@ -442,7 +444,7 @@ $messages = array(
 'category_header' => 'Páginas na categoria "$1"',
 'subcategories' => 'Subcategorias',
 'category-media-header' => 'Multimédia na categoria "$1"',
-'category-empty' => "''Esta categoria não contém atualmente nenhuma página ou ficheiro multimédia.''",
+'category-empty' => "''Esta categoria não contém actualmente nenhuma página ou ficheiro multimédia.''",
 'hidden-categories' => '{{PLURAL:$1|Categoria oculta|Categorias ocultas}}',
 'hidden-category-category' => 'Categorias ocultas',
 'category-subcat-count' => '{{PLURAL:$2|Esta categoria só contém a seguinte subcategoria.|Esta categoria contém {{PLURAL:$1|a seguinte subcategoria|as seguintes $1 subcategorias}} (de um total de $2).}}',
@@ -454,7 +456,7 @@ $messages = array(
 'listingcontinuesabbrev' => 'cont.',
 'index-category' => 'Páginas indexadas',
 'noindex-category' => 'Páginas não indexadas',
-'broken-file-category' => 'Páginas com links quebrados para ficheiros',
+'broken-file-category' => 'Páginas com ligações quebradas para ficheiros',
 
 'about' => 'Sobre',
 'article' => 'Página de conteúdo',
@@ -483,14 +485,13 @@ $messages = array(
 'vector-action-move' => 'Mover',
 'vector-action-protect' => 'Proteger',
 'vector-action-undelete' => 'Restaurar',
-'vector-action-unprotect' => 'Alterar proteção',
-'vector-simplesearch-preference' => 'Ativar barra de pesquisa simplificada (apenas no tema Vector)',
+'vector-action-unprotect' => 'Alterar protecção',
 'vector-view-create' => 'Criar',
 'vector-view-edit' => 'Editar',
 'vector-view-history' => 'Ver histórico',
 'vector-view-view' => 'Ler',
 'vector-view-viewsource' => 'Ver fonte',
-'actions' => 'Ações',
+'actions' => 'Acções',
 'namespaces' => 'Espaços nominais',
 'variants' => 'Variantes',
 
@@ -505,9 +506,9 @@ $messages = array(
 'searcharticle' => 'Ir',
 'history' => 'Histórico',
 'history_short' => 'Histórico',
-'updatedmarker' => 'atualizado desde a minha última visita',
+'updatedmarker' => 'actualizado desde a minha última visita',
 'printableversion' => 'Versão para impressão',
-'permalink' => 'Link permanente',
+'permalink' => 'Ligação permanente',
 'print' => 'Imprimir',
 'view' => 'Ver',
 'edit' => 'Editar',
@@ -589,8 +590,8 @@ Consulte a página da [[Special:Version|versão do sistema]].',
 
 'ok' => 'OK',
 'retrievedfrom' => 'Obtida de "$1"',
-'youhavenewmessages' => 'Tem $1 ($2).',
-'youhavenewmessagesfromusers' => 'Tem $1 de {{PLURAL:$3|outro utilizador|$3 utilizadores}} ($2).',
+'youhavenewmessages' => '{{PLURAL:$3|Tem}} $1 ($2).',
+'youhavenewmessagesfromusers' => '{{PLURAL:$4|Tem}} $1 de {{PLURAL:$3|outro utilizador|$3 utilizadores}} ($2).',
 'youhavenewmessagesmanyusers' => 'Tem $1 de muitos utilizadores ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|uma mensagem nova|999=mensagens novas}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|última alteração|999=últimas alterações}}',
@@ -749,7 +750,7 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências]].'
 'userlogin-remembermypassword' => 'Manter-me autenticado',
 'userlogin-signwithsecure' => 'Use uma ligação segura',
 'yourdomainname' => 'O seu domínio:',
-'password-change-forbidden' => 'Não pode alterar senhas nesta wiki.',
+'password-change-forbidden' => 'Não pode alterar palavras-chave nesta wiki.',
 'externaldberror' => 'Ocorreu um erro externo à base de dados durante a autenticação ou não lhe é permitido atualizar a sua conta externa.',
 'login' => 'Autenticação',
 'nav-login-createaccount' => 'Entrar / criar conta',
@@ -768,8 +769,6 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências]].'
 'gotaccountlink' => 'Autentique-se',
 'userlogin-resetlink' => 'Esqueceu-se do seu nome de utilizador ou da palavra-chave?',
 'userlogin-resetpassword-link' => 'Esqueceu a sua palavra-chave?',
-'helplogin-url' => 'Help:Autenticação',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ajuda a fazer login]]',
 'userlogin-loggedin' => 'Já está {{GENDER:$1|autenticado|autenticada|autenticado}} com o nome $1.
 Use o formulário abaixo para iniciar uma sessão com outro nome.',
 'userlogin-createanother' => 'Criar outra conta',
@@ -829,80 +828,90 @@ Se o pedido foi feito por si, entre agora na sua conta e escolha uma palavra-cha
 A palavra-chave temporária expira após {{PLURAL:$5|um dia|$5 dias}}.
 
 Caso outra pessoa tenha feito o pedido, ou se entretanto se recordou da sua palavra-chave e já não deseja alterá-la, ignore esta mensagem e continue a utilizar a palavra-chave antiga.',
-'noemail' => 'Não foi registado um endereço de correio electrónico para o utilizador "$1".',
-'noemailcreate' => 'Precisa de fornecer um endereço de correio electrónico válido',
-'passwordsent' => 'Foi enviada uma palavra-chave nova para o endereço de correio electrónico do utilizador "$1".
+'noemail' => 'Não foi registado um endereço de correio eletrónico para o utilizador "$1".',
+'noemailcreate' => 'Tem de fornecer um endereço de correio eletrónico válido',
+'passwordsent' => 'Foi enviada uma palavra-chave nova para o endereço de correio eletrónico do utilizador "$1".
 Volte a autenticar-se após recebê-la, por favor.',
 'blocked-mailpassword' => 'O seu endereço IP foi bloqueado e, portanto, não será possível utilizar a função de recuperação da palavra-chave, para prevenir o uso abusivo.',
-'eauthentsent' => 'Foi enviada uma mensagem de confirmação para o endereço de correio electrónico que elegeu.
+'eauthentsent' => 'Foi enviada uma mensagem de confirmação para o endereço de correio eletrónico que especificou.
 Antes que seja enviada qualquer outra mensagem para a conta, terá de seguir as instruções na mensagem enviada, de modo a confirmar que a conta lhe pertence.',
 'throttled-mailpassword' => 'Já foi enviada um email de recuperação de palavra-chave {{PLURAL:$1|na última hora|nas últimas $1 horas}}.
 Para prevenir abusos, só um email de recuperação de palavra-chave pode ser enviado a cada {{PLURAL:$1|hora|$1 horas}}.',
 'mailerror' => 'Erro ao enviar correio: $1',
 'acct_creation_throttle_hit' => 'Visitantes desta wiki com o seu endereço IP criaram $1 {{PLURAL:$1|conta|contas}} no último dia, o que é o máximo permitido neste período de tempo.
 Em resultado, visitantes com este endereço IP não podem criar mais nenhuma conta neste momento.',
-'emailauthenticated' => 'O seu endereço de correio electrónico foi confirmado a $2, às $3.',
-'emailnotauthenticated' => 'O seu endereço de correio electrónico ainda não foi confirmado.
-Não serão enviados emails de nenhuma das seguintes funcionalidades.',
+'emailauthenticated' => 'O seu endereço de correio eletrónico foi confirmado a $2, às $3.',
+'emailnotauthenticated' => 'O seu endereço de correio eletrónico ainda não foi confirmado.
+Não lhe serão enviadas mensagens por nenhuma das seguintes funcionalidades.',
 'noemailprefs' => 'Especifique um endereço de correio eletrónico nas suas preferências para ativar estas funcionalidades.',
-'emailconfirmlink' => 'Confirme o seu endereço de correio electrónico',
+'emailconfirmlink' => 'Confirme o seu endereço de correio eletrónico',
 'invalidemailaddress' => 'O endereço de correio eletrónico não pode ser aceite porque parece ter um formato inválido.
 Introduza um endereço formatado corretamente ou deixe o campo vazio.',
-'cannotchangeemail' => 'Os endereços de correio electrónico das contas não podem ser alterados nesta wiki.',
-'emaildisabled' => 'Este site não consegue enviar e-mails.',
+'cannotchangeemail' => 'Os endereços de correio eletrónico das contas não podem ser alterados nesta wiki.',
+'emaildisabled' => 'Este site não consegue enviar mensagens de correio eletrónico.',
 'accountcreated' => 'Conta criada',
 'accountcreatedtext' => 'A conta de utilizador para [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) foi criada.',
 'createaccount-title' => 'Criação de conta na {{SITENAME}}',
-'createaccount-text' => 'Alguém criou uma conta com o nome $2 para o seu endereço de correio electrónico, na wiki {{SITENAME}} ($4), com a palavra-chave "$3".
+'createaccount-text' => 'Alguém criou uma conta com o nome $2 para o seu endereço de correio eletrónico, na wiki {{SITENAME}} ($4), com a palavra-chave "$3".
 Deve agora autenticar-se e alterar a sua palavra-chave.
 
 Se a conta foi criada por engano, pode ignorar esta mensagem.',
 'usernamehasherror' => 'O nome de utilizador não pode conter o símbolo de cardinal (#).',
-'login-throttled' => 'Você realizou demasiadas tentativas de autenticação com esta conta.
+'login-throttled' => 'Realizou demasiadas tentativas de autenticação com esta conta.
 Aguarde $1 antes de tentar novamente, por favor.',
 'login-abort-generic' => 'A sua autenticação não teve êxito - Cancelada',
 'loginlanguagelabel' => 'Língua: $1',
 'suspicious-userlogout' => 'O seu pedido para sair foi negado porque parece ter sido enviado por um browser danificado ou por um proxy com cache.',
 'createacct-another-realname-tip' => 'O fornecimento do nome verdadeiro é opcional.
 Se optar por revelá-lo, ele será utilizado para atribuir-lhe crédito pelo seu trabalho.',
+'pt-login' => 'Autenticação',
+'pt-login-button' => 'Iniciar sessão',
+'pt-createaccount' => 'Criar uma conta',
+'pt-userlogout' => 'Sair',
 
 # Email sending
 'php-mail-error-unknown' => 'Erro desconhecido na função mail() do PHP',
-'user-mail-no-addy' => 'Tentou enviar uma mensagem sem um endereço de correio electrónico',
-'user-mail-no-body' => 'Tentou mandar email sem conteúdo ou com conteúdo demasiado pequeno.',
+'user-mail-no-addy' => 'Tentou enviar uma mensagem sem um endereço de correio eletrónico.',
+'user-mail-no-body' => 'Tentou enviar uma mensagem sem conteúdo ou com um conteúdo demasiado pequeno.',
 
 # Change password dialog
 'changepassword' => 'Alterar palavra-chave',
-'resetpass_announce' => 'Autenticou-se usando uma palavra-chave temporária enviada por correio electrónico.
-Para prosseguir, será necessário definir uma nova palavra-chave.',
+'resetpass_announce' => 'Para completar a autenticação, tem de definir uma palavra-chave nova.',
 'resetpass_text' => '<!-- Adicionar texto aqui -->',
 'resetpass_header' => 'Alterar palavra-chave da conta',
 'oldpassword' => 'Palavra-chave anterior:',
 'newpassword' => 'Palavra-chave nova:',
 'retypenew' => 'Repita a palavra-chave nova:',
 'resetpass_submit' => 'Definir palavra-chave e entrar',
-'changepassword-success' => 'A sua palavra-chave foi alterada com êxito!',
+'changepassword-success' => 'A sua palavra-chave foi alterada!',
+'changepassword-throttled' => 'Realizou demasiadas tentativas de autenticação com esta conta.
+Aguarde $1 antes de tentar novamente, por favor.',
 'resetpass_forbidden' => 'Não é possível alterar palavras-chave',
 'resetpass-no-info' => 'Precisa estar autenticado para aceder diretamente a esta página.',
 'resetpass-submit-loggedin' => 'Alterar palavra-chave',
 'resetpass-submit-cancel' => 'Cancelar',
 'resetpass-wrong-oldpass' => 'Palavra-chave temporária ou atual inválida.
 Pode ter já alterado com sucesso a sua palavra-chave ou solicitado uma nova palavra-chave temporária.',
+'resetpass-recycled' => 'Redefina a sua palavra-chave para uma diferente da atual, por favor.',
+'resetpass-temp-emailed' => 'Autenticou-se usando um código temporário.
+Para completar a autenticação, tem de definir uma palavra-chave nova aqui:',
 'resetpass-temp-password' => 'Palavra-chave temporária:',
-'resetpass-abort-generic' => 'A alteração da senha foi cancelada por uma extensão.',
+'resetpass-abort-generic' => 'A alteração da palavra-chave foi cancelada por uma extensão.',
+'resetpass-expired' => 'A sua palavra-chave expirou. Para autenticar-se, defina uma nova.',
+'resetpass-expired-soft' => 'A sua palavra-chave expirou e tem de ser redefinida. Escolha uma nova agora ou clique "{{int:resetpass-submit-cancel}}" para redefini-la mais tarde.',
 
 # Special:PasswordReset
-'passwordreset' => 'Repor palavra-chave',
-'passwordreset-text-one' => 'Preencha este formulário para repor a sua palavra-passe.',
-'passwordreset-text-many' => '{{PLURAL:$1|Preencha um dos campos para redefinir sua senha via correio eletrónico.}}',
-'passwordreset-legend' => 'Reiniciar a palavra-chave',
-'passwordreset-disabled' => 'O reinício da palavra-chave foi impossibilitado nesta wiki.',
-'passwordreset-emaildisabled' => 'Recursos de e-mail foram desativados neste wiki.',
+'passwordreset' => 'Redefinir palavra-chave',
+'passwordreset-text-one' => 'Preencha este formulário para receber uma palavra-passe temporária por correio eletrónico.',
+'passwordreset-text-many' => '{{PLURAL:$1|Preencha um dos campos para receber uma palavra-chave temporária por correio eletrónico.}}',
+'passwordreset-legend' => 'Redefinir palavra-chave',
+'passwordreset-disabled' => 'A redefinição da palavra-chave foi impossibilitada nesta wiki.',
+'passwordreset-emaildisabled' => 'A funcionalidade de correio eletrónico foi desativada nesta wiki.',
 'passwordreset-username' => 'Nome de utilizador:',
 'passwordreset-domain' => 'Domínio:',
-'passwordreset-capture' => 'Ver o email resultante?',
-'passwordreset-capture-help' => 'Se marcar esta caixa, poderá ver a mensagem (com a senha temporária) que será enviada ao utilizador.',
-'passwordreset-email' => 'Correio electrónico:',
+'passwordreset-capture' => 'Ver a mensagem resultante?',
+'passwordreset-capture-help' => 'Se marcar esta caixa, a mensagem (com a palavra-chave temporária) ser-lhe-á mostrada e enviada ao utilizador.',
+'passwordreset-email' => 'Correio eletrónico:',
 'passwordreset-emailtitle' => 'Detalhes da conta na {{SITENAME}}',
 'passwordreset-emailtext-ip' => 'Alguém (provavelmente você, a partir do endereço IP $1) pediu a recuperação da palavra-passe no projeto {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta de utilizador está associada|As seguintes contas de utilizador estão associadas}} a este correio eletrónico:
 
@@ -919,20 +928,22 @@ Deve autenticar-se e escolher uma palavra-passe nova agora. Se outra pessoa fez
 'passwordreset-emailelement' => 'Utilizador: $1
 Palavra-chave temporária: $2',
 'passwordreset-emailsent' => 'Foi enviado um correio eletrónico para recuperação da palavra-passe.',
-'passwordreset-emailsent-capture' => 'Foi enviado um e-mail de recuperação da palavra-passe, que é mostrado abaixo.',
-'passwordreset-emailerror-capture' => 'Foi gerado o e-mail de reposição de palavra-passe mostrado abaixo, contudo falhou o seu envio para {{GENDER:$2|o utilizador|a utilizadora}}: $1',
+'passwordreset-emailsent-capture' => 'Foi enviado um correio eletrónico para recuperação da palavra-passe, que é mostrado abaixo.',
+'passwordreset-emailerror-capture' => 'Foi gerado um correio eletrónico para redefinição da palavra-chave, mostrado abaixo, mas o seu envio para {{GENDER:$2|o utilizador|a utilizadora}} falhou: $1',
 
 # Special:ChangeEmail
-'changeemail' => 'Alterar o endereço de correio electrónico',
-'changeemail-header' => 'Alterar o endereço de correio electrónico da conta',
-'changeemail-text' => 'Preencha este formulário para alterar o endereço de correio electrónico. Para confirmar esta alteração terá de introduzir a sua palavra-chave.',
-'changeemail-no-info' => 'Para aceder diretamente a esta página tem de estar autenticado.',
-'changeemail-oldemail' => 'Correio electrónico actual:',
-'changeemail-newemail' => 'Correio electrónico novo:',
+'changeemail' => 'Alterar o endereço de correio eletrónico',
+'changeemail-header' => 'Alterar o endereço de correio eletrónico da conta',
+'changeemail-text' => 'Preencha este formulário para alterar o endereço de correio eletrónico. Para confirmar esta alteração terá de introduzir a sua palavra-chave.',
+'changeemail-no-info' => 'Tem de autenticar-se para aceder diretamente a esta página.',
+'changeemail-oldemail' => 'Correio eletrónico atual:',
+'changeemail-newemail' => 'Correio eletrónico novo:',
 'changeemail-none' => '(nenhum)',
 'changeemail-password' => 'A sua senha na wiki {{SITENAME}}:',
-'changeemail-submit' => 'Alterar correio electrónico',
+'changeemail-submit' => 'Alterar correio eletrónico',
 'changeemail-cancel' => 'Cancelar',
+'changeemail-throttled' => 'Realizou demasiadas tentativas de autenticação com esta conta.
+Aguarde $1 antes de tentar novamente, por favor.',
 
 # Special:ResetTokens
 'resettokens' => 'Redefinir chaves',
@@ -988,25 +999,23 @@ Se clicar novamente \"{{int:savearticle}}\", a sua edição será gravada sem as
 'summary-preview' => 'Antevisão do resumo:',
 'subject-preview' => 'Antevisão do assunto/cabeçalho:',
 'blockedtitle' => 'O utilizador está bloqueado',
-'blockedtext' => 'O seu nome de utilizador ou endereço IP foram bloqueados
+'blockedtext' => '<strong>O seu nome de utilizador ou endereço IP foram bloqueados.</strong>
 
 O bloqueio foi realizado por $1.
-O motivo apresentado foi \'\'$2\'\'.
+O motivo apresentado foi <em>$2</em>.
 
 * Início do bloqueio: $8
 * Expiração do bloqueio: $6
 * Destinatário do bloqueio: $7
 
 Pode contactar $1 ou outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir o bloqueio.
-
-Note que para utilizar a funcionalidade "Contactar utilizador" precisa de ter um endereço de correio electrónico válido nas suas [[Special:Preferences|preferências de utilizador]] e de não lhe ter sido bloqueado o uso desta funcionalidade.
-
+Note que para utilizar a funcionalidade "Contactar utilizador" precisa de ter um endereço de correio eletrónico válido nas suas [[Special:Preferences|preferências]] e de não lhe ter sido bloqueado o uso desta funcionalidade.
 O seu endereço IP neste momento é $3 e a identificação (ID) do bloqueio é #$5.
 Inclua todos os detalhes acima em quaisquer contactos relacionados com este bloqueio, por favor.',
-'autoblockedtext' => 'O seu endereço IP foi bloqueado de forma automática, uma vez que foi utilizado recentemente por outro utilizador, o qual foi bloqueado por $1.
+'autoblockedtext' => 'O seu endereço IP foi bloqueado de forma automática porque foi utilizado recentemente por outro utilizador, o qual foi bloqueado por $1.
 O motivo apresentado foi:
 
-:\'\'$2\'\'
+:<em>$2</em>
 
 * Início do bloqueio: $8
 * Expiração do bloqueio: $6
@@ -1014,15 +1023,15 @@ O motivo apresentado foi:
 
 Pode contactar $1 ou outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir o bloqueio.
 
-Note que para utilizar a funcionalidade "Contactar utilizador" precisa de ter um endereço de correio electrónico válido nas suas [[Special:Preferences|preferências de utilizador]] e de não lhe ter sido bloqueado o uso desta funcionalidade.
+Note que para utilizar a funcionalidade "Contactar utilizador" precisa de ter um endereço de correio eletrónico válido nas suas [[Special:Preferences|preferências]] e de não lhe ter sido bloqueado o uso desta funcionalidade.
 
 O seu endereço IP neste momento é $3 e a identificação (ID) do bloqueio é #$5.
 Inclua todos os detalhes acima em quaisquer contactos relacionados com este bloqueio, por favor.',
 'blockednoreason' => 'sem motivo especificado',
 'whitelistedittext' => 'Precisa de $1 para poder editar páginas.',
-'confirmedittext' => 'Precisa de confirmar o seu endereço de correio electrónico antes de começar a editar páginas.
+'confirmedittext' => 'Precisa de confirmar o seu endereço de correio eletrónico antes de começar a editar páginas.
 Introduza e valide o endereço através das [[Special:Preferences|preferências do utilizador]], por favor.',
-'nosuchsectiontitle' => 'Não foi possível encontrar a seção',
+'nosuchsectiontitle' => 'Não foi possível encontrar a secção',
 'nosuchsectiontext' => 'Tentou editar uma secção que não existe.
 Ela pode ter sido movida ou removida enquanto estava a ver a página.',
 'loginreqtitle' => 'Autenticação necessária',
@@ -1052,8 +1061,8 @@ Os detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{F
 'userpage-userdoesnotexist' => 'A conta "<nowiki>$1</nowiki>" não se encontra registada.
 Verifique se deseja realmente criar ou editar esta página, por favor.',
 'userpage-userdoesnotexist-view' => 'A conta de utilizador "$1" não está registada.',
-'blocked-notice-logextract' => 'Este utilizador encontra-se atualmente bloqueado.
-Para referência, o último registro de bloqueio é apresentado abaixo:',
+'blocked-notice-logextract' => 'Este utilizador está bloqueado.
+Para referência, o último registo de bloqueio é apresentado abaixo:',
 'clearyourcache' => "'''Nota:''' Após gravar, terá de limpar a ''cache'' do seu browser para ver as alterações.
 *'''Firefox / Safari:''' Pressione ''Shift'' enquanto clica ''Recarregar'', ou pressione ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' no Mac)
 *'''Google Chrome:''' Pressione ''Ctrl-Shift-R'' (''⌘-Shift-R'' no Mac)
@@ -1162,9 +1171,10 @@ Ela já existia.',
 'content-failed-to-parse' => 'Falha ao analisar conteúdo $2 para modelo $1:$3',
 'invalid-content-data' => 'Dados de conteúdo inválidos',
 'content-not-allowed-here' => 'Conteúdo do tipo "$1" não é permitido na página [[$2]]',
-'editwarning-warning' => 'Sair desta página fará com que você perca quaisquer alterações feitas por você.
-Se você se autenticou, pode desabilitar este aviso na seção "Edição" das suas preferências.',
+'editwarning-warning' => 'Sair desta página fará com que você perca quaisquer alterações feitas por si.
+Se você se autenticou, pode desativar este aviso na secção "{{int:prefs-editing}}" das suas preferências.',
 'editpage-notsupportedcontentformat-title' => 'Formato de conteúdo não suportado',
+'editpage-notsupportedcontentformat-text' => 'O formato de conteúdo $1 não é suportado pelo modelo de conteúdo $2.',
 
 # Content models
 'content-model-wikitext' => 'wikitexto',
@@ -1199,14 +1209,18 @@ Verifique a comparação abaixo, para se certificar que corresponde ao que prete
 Depois grave as alterações, para finalizar e desfazer a edição.',
 'undo-failure' => 'Não foi possível desfazer a edição por conflito com alterações intermédias.',
 'undo-norev' => 'Não foi possível desfazer a edição porque ela não existe ou foi apagada.',
-'undo-summary' => 'Desfeita a edição $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussão]])',
-'undo-summary-username-hidden' => 'Desfazer a revisão  $1  por um usuário oculto',
+'undo-nochange' => 'A edição parece já ter sido desfeita.',
+'undo-summary' => 'Desfez a edição $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussão]])',
+'undo-summary-username-hidden' => 'Desfez a edição $1 de um utilizador oculto',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Não é possível criar uma conta',
 'cantcreateaccount-text' => "A criação de contas a partir deste endereço IP ('''$1''') foi bloqueada por [[User:$3|$3]].
 
 O motivo apresentado por $3 foi ''$2''",
+'cantcreateaccount-range-text' => "A criação de conta a partir dos endereços IP no intervalo '''$1''', que inclui o seu endereço IP ('''$4'''), foi bloqueada por [[User:$3|$3]].
+
+A razão dada por $3 é ''$2''",
 
 # History pages
 'viewpagelogs' => 'Ver registos para esta página',
@@ -1248,31 +1262,31 @@ Tente [[Special:Search|pesquisar na wiki]] novas páginas relevantes.',
 'rev-deleted-user' => '(nome de utilizador removido)',
 'rev-deleted-event' => '(entrada removida)',
 'rev-deleted-user-contribs' => '[nome de utilizador ou IP removido - edição ocultada das contribuições]',
-'rev-deleted-text-permission' => "Esta revisão de página foi '''eliminada'''.
-Podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].",
-'rev-deleted-text-unhide' => "Esta revisão de página foi '''eliminada'''.
-Podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].
-Pode mesmo assim [$1 ver esta edição] se deseja prosseguir.",
-'rev-suppressed-text-unhide' => "Esta revisão de página foi '''suprimida'''.
-Podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registo de supressões].
-Pode mesmo assim [$1 ver esta revisão] se deseja prosseguir.",
-'rev-deleted-text-view' => "Esta revisão de página foi '''eliminada'''.
-Você pode vê-la; podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].",
-'rev-suppressed-text-view' => "Esta revisão de página foi '''suprimida'''.
-Você pode vê-la; podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registo de supressões].",
-'rev-deleted-no-diff' => "Não pode ver esta diferença entre revisões porque uma das revisões foi '''eliminada'''.
-Podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].",
-'rev-suppressed-no-diff' => "Não pode ver esta diferença entre versões porque uma das revisões foi '''eliminada'''.",
-'rev-deleted-unhide-diff' => "Uma das revisões desta diferença entre revisões foi '''eliminada'''.
-Podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].
-Pode mesmo assim [$1 ver estas diferenças] se deseja prosseguir.",
-'rev-suppressed-unhide-diff' => "Uma das revisões desta diferença entre revisões foi '''suprimida'''.
-Podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registo de supressões].
-Pode mesmo assim [$1 ver estas diferenças] se deseja prosseguir.",
-'rev-deleted-diff-view' => "Uma das revisões desta diferença entre revisões foi '''eliminada'''.
-Você pode ver a diferença entre revisões; podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].",
-'rev-suppressed-diff-view' => "Uma das revisões desta diferença entre revisões foi '''suprimida'''.
-Você pode ver a diferença entre revisões; podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registo de supressões].",
+'rev-deleted-text-permission' => 'Esta revisão de página foi <strong>eliminada</strong>.
+Encontrará detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].',
+'rev-deleted-text-unhide' => 'Esta revisão de página foi <strong>eliminada</strong>.
+Encontrará detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].
+Pode mesmo assim [$1 ver esta revisão] se deseja prosseguir.',
+'rev-suppressed-text-unhide' => 'Esta revisão de página foi <strong>suprimida</strong>.
+Encontrará detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registo de supressões].
+Pode mesmo assim [$1 ver esta revisão] se deseja prosseguir.',
+'rev-deleted-text-view' => 'Esta revisão de página foi <strong>eliminada</strong>.
+Você pode vê-la; encontrará detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].',
+'rev-suppressed-text-view' => 'Esta revisão de página foi <strong>suprimida</strong>.
+Você pode vê-la; encontrará detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registo de supressões].',
+'rev-deleted-no-diff' => 'Não pode ver esta diferença entre revisões porque uma das revisões foi <strong>eliminada</strong>.
+Encontrará detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].',
+'rev-suppressed-no-diff' => 'Não pode ver esta diferença entre versões porque uma das revisões foi <strong>eliminada</strong>.',
+'rev-deleted-unhide-diff' => 'Uma das revisões desta diferença entre revisões foi <strong>eliminada</strong>.
+Encontrará detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].
+Pode mesmo assim [$1 ver estas diferenças] se deseja prosseguir.',
+'rev-suppressed-unhide-diff' => 'Uma das revisões desta diferença entre revisões foi <strong>suprimida</strong>.
+Encontrará detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registo de supressões].
+Pode mesmo assim [$1 ver estas diferenças] se deseja prosseguir.',
+'rev-deleted-diff-view' => 'Uma das revisões desta diferença entre revisões foi <strong>eliminada</strong>.
+Pode ver a diferença entre revisões; encontrará detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].',
+'rev-suppressed-diff-view' => 'Uma das revisões desta diferença entre revisões foi <strong>suprimida</strong>.
+Pode ver a diferença entre revisões; encontrará detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registo de supressões].',
 'rev-delundel' => 'mostrar/esconder',
 'rev-showdeleted' => 'mostrar',
 'revisiondelete' => 'Eliminar/restaurar edições',
@@ -1283,8 +1297,9 @@ Você pode ver a diferença entre revisões; podem existir mais detalhes no [{{f
 'revdelete-show-file-submit' => 'Sim',
 'revdelete-selected' => "'''{{PLURAL:$2|Edição selecionada|Edições selecionadas}} de [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Evento do registo selecionado|Eventos do registo selecionados}}:'''",
-'revdelete-text' => "'''Edições e eventos eliminados continuarão a aparecer no histórico e registos da página, mas partes do seu conteúdo estarão inacessíveis ao público.'''
-Outros administradores da {{SITENAME}} continuarão a poder aceder ao conteúdo escondido e podem restaurá-lo novamente através desta mesma interface, a menos que restrições adicionais sejam definidas.",
+'revdelete-text-text' => 'Revisões eliminadas ainda aparecerão no histórico da página, mas parte do seu conteúdo estará inacessível para o público.',
+'revdelete-text-file' => 'Versões eliminadas do ficheiro ainda aparecerão no histórico da página, mas parte do seu conteúdo estará inacessível para o público.',
+'revdelete-text-others' => 'Outros administradores em {{SITENAME}} podem aceder ao conteúdo oculto e torná-lo visível novamente através desta mesma interface, a menos que sejam definidas restrições adicionais.',
 'revdelete-confirm' => 'Por favor confirme que pretende executar esta operação, que compreende as suas consequências e que o faz em concordância com as [[{{MediaWiki:Policy-url}}|políticas e recomendações]].',
 'revdelete-suppress-text' => "A supressão '''só''' deverá ser usada nos seguintes casos:
 * Informação potencialmente caluniosa, difamatória ou injuriosa
@@ -1380,6 +1395,8 @@ Note que, se usar os links de navegação, os botões de opção voltarão aos v
 'showhideselectedversions' => 'Mostrar/ocultar versões selecionadas',
 'editundo' => 'desfazer',
 'diff-empty' => '(Sem diferenças)',
+'diff-multi-sameuser' => '(Há {{PLURAL:$1|uma edição intermédia|$1 edições intermédias}} do mesmo utilizador que não estão a ser apresentadas)',
+'diff-multi-otherusers' => '(Há {{PLURAL:$1|uma revisão intermédia|$1 revisões intermédias}} de {{PLURAL:$2|outro utilizador|$2 utilizadores}} que não {{PLURAL:$1|está a ser apresentada|estão a ser apresentadas}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|Uma edição intermédia|$1 edições intermédias}} de mais de {{PLURAL:$2|um utilizador|$2 utilizadores}} não {{PLURAL:$1|apresentada|apresentadas}})',
 'difference-missing-revision' => '{{PLURAL:$2|Uma revisão|$2 revisões}} desta diferença ($1) não {{PLURAL:$2|foi encontrada|foram encontradas}}.
 
@@ -1399,8 +1416,8 @@ Os detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{F
 'nextn-title' => '{{PLURAL:$1|próximo|próximos}} $1 {{PLURAL:$1|resultado|resultados}}',
 'shown-title' => 'Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página',
 'viewprevnext' => 'Ver ($1 {{int:pipe-separator}} $2) ($3).',
-'searchmenu-exists' => "'''Há uma página com o nome \"[[:\$1]]\" nesta wiki'''",
-'searchmenu-new' => "'''Crie a página \"[[:\$1]]\" nesta wiki!'''",
+'searchmenu-exists' => '<strong>Há uma página com o nome "[[:$1]]" nesta wiki.</strong> {{PLURAL:$2|0=|Veja também os outros resultados encontrados.}}',
+'searchmenu-new' => '<strong>Crie a página "[[:$1]]" nesta wiki!</strong> {{PLURAL:$2|0=|Veja também a página encontrada na pesquisa.|Veja também os resultados da pesquisa.}}',
 'searchprofile-articles' => 'Páginas de conteúdo',
 'searchprofile-project' => 'Páginas de ajuda e de projeto',
 'searchprofile-images' => 'Multimédia',
@@ -1416,6 +1433,7 @@ Os detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{F
 'search-result-score' => 'Relevancia: $1%',
 'search-redirect' => '(redirecionamento de $1)',
 'search-section' => '(seção $1)',
+'search-file-match' => '(coincide com o conteúdo do ficheiro)',
 'search-suggest' => 'Será que queria dizer: $1',
 'search-interwiki-caption' => 'Projetos irmãos',
 'search-interwiki-default' => 'Resultados de $1:',
@@ -1425,6 +1443,7 @@ Os detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{F
 'searchrelated' => 'relacionados',
 'searchall' => 'todos',
 'showingresults' => "{{PLURAL:$1|É apresentado '''um''' resultado|São apresentados até '''$1''' resultados}} abaixo{{PLURAL:$1||, começando pelo '''$2'''º}}.",
+'showingresultsinrange' => 'Apresenta-se abaixo {{PLURAL:$1|<strong>1</strong> resultado|até <strong>$1</strong> resultados}} no intervalo #<strong>$2</strong> a #<strong>$3</strong>.',
 'showingresultsnum' => "{{PLURAL:$3|É apresentado '''um''' resultado|São apresentados '''$3''' resultados}} abaixo{{PLURAL:$3||, começando pelo '''$2'''º}}.",
 'showingresultsheader' => "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1–$2''' de '''$3'''}} para '''$4'''",
 'search-nonefound' => 'A pesquisa não produziu resultados.',
@@ -1462,9 +1481,9 @@ Note, no entanto, que a indexação da {{SITENAME}} neste motor de busca pode es
 'prefs-watchlist-token' => 'Chave secreta da lista de páginas vigiadas:',
 'prefs-misc' => 'Diversos',
 'prefs-resetpass' => 'Alterar palavra-chave',
-'prefs-changeemail' => 'Alterar correio electrónico',
-'prefs-setemail' => 'Definir um endereço de correio electrónico',
-'prefs-email' => 'Opções do correio electrónico',
+'prefs-changeemail' => 'Alterar correio eletrónico',
+'prefs-setemail' => 'Definir um endereço de correio eletrónico',
+'prefs-email' => 'Opções do correio eletrónico',
 'prefs-rendering' => 'Aparência',
 'saveprefs' => 'Gravar',
 'restoreprefs' => 'Repor todas as configurações padrão (em todas as secções)',
@@ -1498,7 +1517,7 @@ Qualquer pessoa que conheça a chave será capaz de ler a sua lista de páginas
 'timezoneregion-europe' => 'Europa',
 'timezoneregion-indian' => 'Oceano Índico',
 'timezoneregion-pacific' => 'Oceano Pacífico',
-'allowemail' => 'Aceitar correio electrónico de outros utilizadores',
+'allowemail' => 'Aceitar correio eletrónico de outros utilizadores',
 'prefs-searchoptions' => 'Pesquisa',
 'prefs-namespaces' => 'Espaços nominais',
 'defaultns' => 'Por omissão, pesquisar nestes espaços nominais:',
@@ -1511,7 +1530,7 @@ Qualquer pessoa que conheça a chave será capaz de ler a sua lista de páginas
 As suas preferências serão modificadas para os valores predefinidos do site.
 Esta operação não pode ser desfeita.',
 'prefs-emailconfirm-label' => 'Confirmação do endereço:',
-'youremail' => 'Correio electrónico:',
+'youremail' => 'Correio eletrónico:',
 'username' => 'Nome de {{GENDER:$1|utilizador|utilizadora}}:',
 'uid' => 'Identificação de {{GENDER:$1|utilizador|utilizadora}}:',
 'prefs-memberingroups' => '{{GENDER:$2|Membro}} {{PLURAL:$1|do grupo|dos grupos}}:',
@@ -1532,12 +1551,12 @@ Não deverá conter mais de $1 {{PLURAL:$1|carácter|caracteres}}.',
 'prefs-help-gender' => 'Esta preferência é opcional.
 O software usa o seu valor para o endereçar e para o mencionar a outros usando o género gramatical apropriado.
 Esta informação será pública.',
-'email' => 'Correio electrónico',
+'email' => 'Correio eletrónico',
 'prefs-help-realname' => 'O fornecimento do nome verdadeiro é opcional.
 Se optar por revelá-lo, ele será utilizado para atribuir-lhe crédito pelo seu trabalho.',
-'prefs-help-email' => 'Opcional: o endereço de correio electrónico é opcional, mas será necessário para reiniciar a palavra-chave caso esqueça a antiga.',
-'prefs-help-email-others' => 'Também pode optar por permitir que outros entrem em contacto consigo por correio electrónico, através de um link nas suas páginas de utilizador ou de discussão, sem revelar o seu endereço de correio electrónico.',
-'prefs-help-email-required' => 'É necessário o endereço de correio electrónico.',
+'prefs-help-email' => 'Opcional: o endereço de correio eletrónico é opcional, mas será necessário para redefinir a palavra-chave caso esqueça a antiga.',
+'prefs-help-email-others' => 'Também pode optar por permitir que outros entrem em contacto consigo por correio eletrónico, através de um link nas suas páginas de utilizador ou de discussão, sem revelar o seu endereço de correio eletrónico.',
+'prefs-help-email-required' => 'É necessário o endereço de correio eletrónico.',
 'prefs-info' => 'Informações básicas',
 'prefs-i18n' => 'Internacionalização',
 'prefs-signature' => 'Assinatura',
@@ -1556,7 +1575,7 @@ Se optar por revelá-lo, ele será utilizado para atribuir-lhe crédito pelo seu
 'prefs-tokenwatchlist' => 'Chave',
 'prefs-diffs' => 'Diferenças',
 'prefs-help-prefershttps' => 'Esta preferência terá efeito no seu próximo início de sessão.',
-'prefs-tabs-navigation-hint' => 'Dica: Você pode utilizar as setas direita-esquerda do teclado para navegar entre as guias na lista.',
+'prefs-tabs-navigation-hint' => 'Dica: Pode usar as setas direita e esquerda do teclado para navegar entre os separadores.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'Parece válido',
@@ -1644,7 +1663,7 @@ Se optar por revelá-lo, ele será utilizado para atribuir-lhe crédito pelo seu
 'right-suppressrevision' => 'Rever e restaurar revisões ocultadas dos administradores',
 'right-suppressionlog' => 'Ver registos privados',
 'right-block' => 'Impedir outros utilizadores de editarem',
-'right-blockemail' => 'Impedir um utilizador de enviar correio electrónico',
+'right-blockemail' => 'Impedir um utilizador de enviar correio eletrónico',
 'right-hideuser' => 'Bloquear um nome de utilizador, escondendo-o do público',
 'right-ipblock-exempt' => 'Contornar bloqueios de IP, bloqueios automáticos e bloqueios de gamas de IPs',
 'right-proxyunbannable' => 'Contornar bloqueios automáticos de proxies',
@@ -1677,8 +1696,8 @@ Se optar por revelá-lo, ele será utilizado para atribuir-lhe crédito pelo seu
 'right-userrights-interwiki' => 'Editar privilégios de utilizadores noutras wikis',
 'right-siteadmin' => 'Bloquear e desbloquear a base de dados',
 'right-override-export-depth' => 'Exportar páginas incluindo páginas ligadas até uma profundidade de 5',
-'right-sendemail' => 'Enviar correio electrónico a outros utilizadores',
-'right-passwordreset' => 'Ver emails de reposição de palavras-chave',
+'right-sendemail' => 'Enviar correio eletrónico a outros utilizadores',
+'right-passwordreset' => 'Ver mensagens de redefinição da palavra-chave',
 
 # Special:Log/newusers
 'newuserlogpage' => 'Registo de criação de utilizadores',
@@ -1745,14 +1764,27 @@ Se optar por revelá-lo, ele será utilizado para atribuir-lhe crédito pelo seu
 'recentchanges-label-plusminus' => 'Alteração no tamanho da página, em bytes',
 'recentchanges-legend-heading' => "'''Legenda:'''",
 'recentchanges-legend-newpage' => '([[Special:NewPages|lista de páginas novas]])',
-'rcnotefrom' => 'Abaixo estão as mudanças desde <b>$2</b> (mostradas até <b>$1</b>).',
+'recentchanges-legend-plusminus' => '(<em>±123</em>)',
+'rcnotefrom' => 'Abaixo estão as mudanças desde <strong>$2</strong> (mostradas até <strong>$1</strong>).',
 'rclistfrom' => 'Mostrar as novas mudanças a partir das $1',
 'rcshowhideminor' => '$1 edições menores',
+'rcshowhideminor-show' => 'Mostrar',
+'rcshowhideminor-hide' => 'Esconder',
 'rcshowhidebots' => '$1 robôs',
+'rcshowhidebots-show' => 'Mostrar',
+'rcshowhidebots-hide' => 'Esconder',
 'rcshowhideliu' => '$1 utilizadores registados',
+'rcshowhideliu-show' => 'Mostrar',
+'rcshowhideliu-hide' => 'Esconder',
 'rcshowhideanons' => '$1 utilizadores anónimos',
+'rcshowhideanons-show' => 'Mostrar',
+'rcshowhideanons-hide' => 'Esconder',
 'rcshowhidepatr' => '$1 edições patrulhadas',
+'rcshowhidepatr-show' => 'Mostrar',
+'rcshowhidepatr-hide' => 'Esconder',
 'rcshowhidemine' => '$1 as minhas edições',
+'rcshowhidemine-show' => 'Mostrar',
+'rcshowhidemine-hide' => 'Esconder',
 'rclinks' => 'Mostrar as últimas $1 mudanças nos últimos $2 dias<br />$3',
 'diff' => 'dif',
 'hist' => 'his',
@@ -1795,7 +1827,7 @@ As suas [[Special:Watchlist|páginas vigiadas]] aparecem a '''negrito'''.",
 Para sua conveniência, é apresentado de seguida o registo de eliminação e de movimento da página:",
 'uploadtext' => "Utilize o formulário abaixo para fazer upload de ficheiros novos.
 Para ver ou pesquisar ficheiros anteriormente enviados, consulte a [[Special:FileList|lista de ficheiros]].
-Os reenvios de um ficheiro são também registrados no [[Special:Log/upload|registro de uploads]] e as eliminações no [[Special:Log/delete|registro de eliminações]].
+Os reenvios de um ficheiro são também registados no [[Special:Log/upload|registo de uploads]] e as eliminações no [[Special:Log/delete|registo de eliminações]].
 
 Para utilizar um ficheiro numa página, depois de ter feito o upload, insira um link com um dos seguintes formatos:
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.jpg]]</nowiki></code>''' para mostrar uma imagem nas suas dimensões originais;
@@ -1872,6 +1904,7 @@ Caso deseje, mesmo assim, carregar o seu ficheiro, volte atrás e envie-o com um
 'file-exists-duplicate' => 'Este ficheiro é um duplicado {{PLURAL:$1|do seguinte|dos seguintes}}:',
 'file-deleted-duplicate' => 'Um ficheiro idêntico a este ([[:$1]]) foi eliminado anteriormente.
 Verifique o motivo da eliminação do ficheiro antes de prosseguir com o re-envio.',
+'file-deleted-duplicate-notitle' => 'Um ficheiro idêntico já foi eliminado e o seu título suprimido. Devia pedir a alguém capaz de ver os dados dos ficheiros eliminados para verificar a situação antes de carregá-lo novamente.',
 'uploadwarning' => 'Aviso de envio',
 'uploadwarning-text' => 'Modifique a descrição do ficheiro abaixo e tente novamente, por favor.',
 'savefile' => 'Gravar ficheiro',
@@ -1884,6 +1917,8 @@ Verifique o motivo da eliminação do ficheiro antes de prosseguir com o re-envi
 'php-uploaddisabledtext' => 'O carregamento de ficheiros está impossibilitado no PHP.
 Verifique a configuração file_uploads, por favor.',
 'uploadscripted' => 'Este ficheiro contém HTML ou código que pode ser erradamente interpretado por um browser.',
+'uploadscriptednamespace' => "Este ficheiro SVG contém um espaço nominal que não é permitido '$1'",
+'uploadinvalidxml' => 'Erro detectado na análise do XML do ficheiro carregado.',
 'uploadvirus' => 'O ficheiro contém um vírus! Detalhes: $1',
 'uploadjava' => 'Este é um ficheiro ZIP que contém um ficheiro .class de Java.
 Não é permitido o upload de ficheiros Java, porque estes podem contornar as restrições de segurança.',
@@ -2149,6 +2184,7 @@ Talvez queira editar a descrição na [$2 página original de descrição do fic
 'randompage-nopages' => 'Não há páginas {{PLURAL:$2|no seguinte espaço nominal|nos seguintes espaços nominais}}: $1.',
 
 # Random page in category
+'randomincategory' => 'Página aleatória na categoria',
 'randomincategory-invalidcategory' => '"$1" não é um nome de categoria válido',
 'randomincategory-nopages' => 'Não há páginas na categoria [[:Category:$1|$1]].',
 'randomincategory-selectcategory' => 'Obter página aleatória da categoria: $1 $2',
@@ -2214,6 +2250,7 @@ Agora redirecciona para [[$2]].',
 'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikis}}',
 'nlinks' => '$1 {{PLURAL:$1|ligação|ligações}}',
 'nmembers' => '$1 {{PLURAL:$1|membro|membros}}',
+'nmemberschanged' => '$1 → $2 {{PLURAL:$2|membro|membros}}',
 'nrevisions' => '$1 {{PLURAL:$1|edição|edições}}',
 'nviews' => '$1 {{PLURAL:$1|visita|visitas}}',
 'nimagelinks' => 'Usada {{PLURAL:$1|numa página|em $1 páginas}}',
@@ -2251,10 +2288,20 @@ Agora redirecciona para [[$2]].',
 'deadendpagestext' => 'As seguintes páginas não contêm links para outras páginas na {{SITENAME}}.',
 'protectedpages' => 'Páginas protegidas',
 'protectedpages-indef' => 'Apenas proteções indefinidas',
+'protectedpages-summary' => 'Esta página lista as páginas protegidas. Para ver os títulos protegidos, cuja criação está impossibilitada, consulte [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Apenas proteções em cascata',
 'protectedpages-noredirect' => 'Esconder redirecionamentos',
 'protectedpagesempty' => 'Neste momento, nenhuma das páginas está protegida com estes parâmetros.',
+'protectedpages-timestamp' => 'Data e hora',
+'protectedpages-page' => 'Página',
+'protectedpages-expiry' => 'Expira em',
+'protectedpages-performer' => 'Protetor',
+'protectedpages-params' => 'Parâmetros de proteção',
+'protectedpages-reason' => 'Motivo',
+'protectedpages-unknown-timestamp' => 'Desconhecido',
+'protectedpages-unknown-performer' => 'Utilizador desconhecido',
 'protectedtitles' => 'Títulos protegidos',
+'protectedtitles-summary' => 'Esta página lista os títulos protegidos, cuja criação está impossibilitada. Para ver as páginas protegidas consulte [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Neste momento, nenhum dos títulos está protegido com estes parâmetros.',
 'listusers' => 'Utilizadores',
 'listusers-editsonly' => 'Mostrar apenas utilizadores com edições',
@@ -2380,32 +2427,32 @@ Encontram-se disponíveis [[{{MediaWiki:Listgrouprights-helppage}}|informações
 
 # Email user
 'mailnologin' => 'Não existe endereço de envio',
-'mailnologintext' => 'Precisa de estar [[Special:UserLogin|autenticado]] e possuir um endereço de correio válido nas suas [[Special:Preferences|preferências]], para poder enviar correio electrónico a outros utilizadores.',
-'emailuser' => 'Enviar correio electrónico a este utilizador',
+'mailnologintext' => 'Precisa de estar [[Special:UserLogin|autenticado]] e ter um endereço de correio válido nas suas [[Special:Preferences|preferências]], para poder enviar correio eletrónico a outros utilizadores.',
+'emailuser' => 'Enviar correio eletrónico a este utilizador',
 'emailuser-title-target' => 'Enviar correio eletrónico a {{GENDER:$1|este utilizador|esta utilizadora}}',
-'emailuser-title-notarget' => 'Enviar correio electrónico ao utilizador',
-'emailpage' => 'Enviar correio electrónico ao utilizador',
+'emailuser-title-notarget' => 'Enviar correio eletrónico ao utilizador',
+'emailpage' => 'Enviar correio eletrónico ao utilizador',
 'emailpagetext' => 'Pode usar o formulário abaixo para enviar uma mensagem por correio eletrónico para {{GENDER:$1|este utilizador|esta utilizadora}}.
 O endereço de correio que introduziu nas [[Special:Preferences|suas preferências]] irá aparecer no campo do remetente da mensagem "De:", para que o destinatário lhe possa responder diretamente.',
 'usermailererror' => 'O sistema de correio devolveu o erro:',
-'defemailsubject' => 'Correio electrónico da {{SITENAME}}, do utilizador "$1"',
-'usermaildisabled' => 'Correio eletrónico do utilizador foi desativado',
-'usermaildisabledtext' => 'Não pode enviar correio electrónico aos outros utilizadores desta wiki',
-'noemailtitle' => 'Sem endereço de correio electrónico',
-'noemailtext' => 'Este utilizador não especificou um endereço de correio electrónico válido.',
-'nowikiemailtitle' => 'Correio electrónico não é permitido',
-'nowikiemailtext' => 'Este utilizador optou por não receber correio electrónico de outros utilizadores.',
+'defemailsubject' => 'Correio eletrónico da {{SITENAME}}, do utilizador "$1"',
+'usermaildisabled' => 'O correio eletrónico do utilizador foi desativado',
+'usermaildisabledtext' => 'Não pode enviar correio eletrónico a outros utilizadores desta wiki',
+'noemailtitle' => 'Sem endereço de correio eletrónico',
+'noemailtext' => 'Este utilizador não especificou um endereço de correio eletrónico válido.',
+'nowikiemailtitle' => 'Correio eletrónico não é permitido',
+'nowikiemailtext' => 'Este utilizador optou por não receber correio eletrónico de outros utilizadores.',
 'emailnotarget' => 'O nome do destinatário não existe ou é inválido.',
 'emailtarget' => 'Introduza o nome de utilizador do destinatário.',
 'emailusername' => 'Utilizador:',
 'emailusernamesubmit' => 'Enviar',
-'email-legend' => 'Enviar correio electrónico para outro utilizador da {{SITENAME}}',
+'email-legend' => 'Enviar uma mensagem a outro utilizador da {{SITENAME}}',
 'emailfrom' => 'De:',
 'emailto' => 'Para:',
 'emailsubject' => 'Assunto:',
 'emailmessage' => 'Mensagem:',
 'emailsend' => 'Enviar',
-'emailccme' => 'Enviar uma cópia desta mensagem para o meu correio electrónico.',
+'emailccme' => 'Enviar uma cópia desta mensagem para o meu correio eletrónico.',
 'emailccsubject' => 'Cópia da sua mensagem para $1: $2',
 'emailsent' => 'Mensagem enviada',
 'emailsenttext' => 'A sua mensagem foi enviada.',
@@ -2435,12 +2482,13 @@ Modificações futuras desta página e da respetiva página de discussão serão
 'notanarticle' => 'Não é uma página de conteúdo',
 'notvisiblerev' => 'Edição eliminada',
 'watchlist-details' => '{{PLURAL:$1|Existe $1 página|Existem $1 páginas}} na sua lista de páginas vigiadas, excluindo páginas de discussão.',
-'wlheader-enotif' => 'A notificação por correio electrónico está activa.',
+'wlheader-enotif' => 'A notificação por correio eletrónico está ativa.',
 'wlheader-showupdated' => "As páginas modificadas desde a última vez que as visitou aparecem destacadas a '''negrito'''.",
 'watchmethod-recent' => 'a procurar páginas vigiadas nas mudanças recentes',
 'watchmethod-list' => 'a procurar mudanças recentes nas páginas vigiadas',
 'watchlistcontains' => 'A sua lista de páginas vigiadas contém $1 {{PLURAL:$1|página|páginas}}.',
 'iteminvalidname' => "Problema com item '$1', nome inválido...",
+'wlnote2' => 'Estão listadas abaixo as mudanças realizadas {{PLURAL:$1|na última hora|nas últimas <strong>$1</strong> horas}}, a partir de $2, $3.',
 'wlshowlast' => 'Ver últimas $1 horas $2 dias $3',
 'watchlist-options' => 'Opções da lista de páginas vigiadas',
 
@@ -2465,23 +2513,22 @@ Modificações futuras desta página e da respetiva página de discussão serão
 'enotif_lastvisited' => 'Consulte $1 para todas as alterações efetuadas desde a sua última visita.',
 'enotif_lastdiff' => 'Consulte $1 para ver esta alteração.',
 'enotif_anon_editor' => 'utilizador anónimo $1',
-'enotif_body' => '{{GENDER:$WATCHINGUSERNAME|Caro|Cara|Caro(a)}},
+'enotif_body' => '{{GENDER:$WATCHINGUSERNAME|Caro|Cara|Caro(a)}} $WATCHINGUSERNAME,
 
 $PAGEINTRO $NEWPAGE
 
 Resumo da edição: $PAGESUMMARY $PAGEMINOREDIT
 
 Contacte o editor:
-correio electrónico: $PAGEEDITOR_EMAIL
+correio eletrónico: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Até que visite novamente esta página com a sua conta ligada, não receberá mais notificações das alterações futuras.
-Pode também reactivar as notificações para todas páginas na sua lista de páginas vigiadas.
+Até se autenticar e visitar novamente esta página, não receberá mais notificações das alterações futuras. Também pode reativar as notificações para todas páginas na sua lista de páginas vigiadas.
 
 O seu sistema de notificação amigável da {{SITENAME}}
 
 --
-Para alterar as suas preferências das notificações por correio electrónico, visite
+Para alterar as suas preferências de notificação por correio eletrónico, visite
 {{canonicalurl:{{#special:Preferences}}}}
 
 Para alterar as suas preferências das páginas vigiadas, visite
@@ -2530,7 +2577,7 @@ A eliminação de páginas como esta foi restringida na {{SITENAME}}, para evita
 'delete-warning-toobig' => 'Esta página tem um histórico de edições longo, com mais de $1 {{PLURAL:$1|edição|edições}}.
 Eliminá-la poderá causar problemas na base de dados da {{SITENAME}};
 prossiga com precaução.',
-'deleting-backlinks-warning' => "'''Aviso:''' Outras páginas têm ligação à página que está prestes a eliminar.",
+'deleting-backlinks-warning' => "'''Aviso:''' Há [[Special:WhatLinksHere/{{FULLPAGENAME}}|páginas]] que contêm links para a página que está prestes a eliminar ou que a transcluem.",
 
 # Rollback
 'rollback' => 'Reverter edições',
@@ -2697,7 +2744,7 @@ $1',
 'sp-contributions-newbies-title' => 'Contribuições de contas novas',
 'sp-contributions-blocklog' => 'registo de bloqueios',
 'sp-contributions-deleted' => 'contribuições eliminadas',
-'sp-contributions-uploads' => 'uploads',
+'sp-contributions-uploads' => 'carregamentos',
 'sp-contributions-logs' => 'registos',
 'sp-contributions-talk' => 'discussão',
 'sp-contributions-userrights' => 'gestão de privilégios de utilizador',
@@ -2706,8 +2753,10 @@ Para referência é apresentado abaixo o último registo de bloqueio:',
 'sp-contributions-blocked-notice-anon' => 'Este endereço IP está bloqueado neste momento.
 Para referência é apresentado abaixo o último registo de bloqueio:',
 'sp-contributions-search' => 'Pesquisar contribuições',
+'sp-contributions-suppresslog' => 'contribuições suprimidas',
 'sp-contributions-username' => 'Endereço IP ou utilizador:',
 'sp-contributions-toponly' => 'Mostrar somente as revisões mais recentes',
+'sp-contributions-newonly' => 'Mostrar só edições que são criações de páginas',
 'sp-contributions-submit' => 'Pesquisar',
 
 # What links here
@@ -2750,7 +2799,7 @@ Isto só deve ser feito para prevenir vandalismo e de acordo com a [[{{MediaWiki
 ** Nome de utilizador inaceitável',
 'ipb-hardblock' => 'Impedir que utilizadores autenticados editem a partir deste endereço IP',
 'ipbcreateaccount' => 'Impedir criação de contas de utilizador',
-'ipbemailban' => 'Impedir utilizador de enviar correio electrónico',
+'ipbemailban' => 'Impedir utilizador de enviar correio eletrónico',
 'ipbenableautoblock' => 'Bloquear automaticamente o endereço IP mais recente deste utilizador e todos os endereços IP subsequentes a partir dos quais ele tente editar',
 'ipbsubmit' => 'Bloquear este utilizador',
 'ipbother' => 'Outro período:',
@@ -2761,11 +2810,12 @@ Isto só deve ser feito para prevenir vandalismo e de acordo com a [[{{MediaWiki
 'ipb-change-block' => 'Voltar a bloquear o utilizador com estes parâmetros',
 'ipb-confirm' => 'Confirmar o bloqueio',
 'badipaddress' => 'Endereço IP inválido',
-'blockipsuccesssub' => 'Bloqueio bem sucedido',
+'blockipsuccesssub' => 'Bloqueio efetuado',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] foi {{GENDER:$1|bloqueado|bloqueada}}.<br />
 Consulte a [[Special:BlockList|lista de bloqueios]] para rever os bloqueios.',
 'ipb-blockingself' => 'Está prestes a bloquear-se a si próprio. Tem a certeza de que pretende fazê-lo?',
-'ipb-confirmhideuser' => 'Está prestes a bloquear um utilizador com "Ocultar nome de utilizador/IP" ativado. Isto irá suprimir o nome do utilizador de todas as listas e entradas dos registros. Tem a certeza de que pretende fazê-lo?',
+'ipb-confirmhideuser' => 'Está prestes a bloquear um utilizador com "Ocultar nome de utilizador/IP" ativado. Isto irá suprimir o nome do utilizador de todas as listas e entradas dos registos. Tem a certeza de que pretende fazê-lo?',
+'ipb-confirmaction' => 'Se tem a certeza de que quer fazê-lo, marque o campo "{{int:ipb-confirm}}" ao fundo.',
 'ipb-edit-dropdown' => 'Editar motivos de bloqueio',
 'ipb-unblock-addr' => 'Desbloquear $1',
 'ipb-unblock' => 'Desbloquear um utilizador ou endereço IP',
@@ -2798,7 +2848,7 @@ Consulte a [[Special:BlockList|lista de bloqueios]] para rever os bloqueios.',
 'anononlyblock' => 'apenas anón.',
 'noautoblockblock' => 'bloqueio automático desativado',
 'createaccountblock' => 'criação de conta bloqueada',
-'emailblock' => 'correio electrónico bloqueado',
+'emailblock' => 'correio eletrónico bloqueado',
 'blocklist-nousertalk' => 'impedido de editar a própria página de discussão',
 'ipblocklist-empty' => 'A lista de bloqueios encontra-se vazia.',
 'ipblocklist-no-results' => 'O endereço IP ou nome de utilizador procurado não se encontra bloqueado.',
@@ -2806,8 +2856,9 @@ Consulte a [[Special:BlockList|lista de bloqueios]] para rever os bloqueios.',
 'unblocklink' => 'desbloquear',
 'change-blocklink' => 'alterar bloqueio',
 'contribslink' => 'contribs',
-'emaillink' => 'enviar correio electrónico',
-'autoblocker' => 'Foi automaticamente bloqueado, pois o seu endereço IP foi recentemente usado por "[[User:$1|$1]]". O motivo apresentado para o bloqueio de $1 foi: "$2".',
+'emaillink' => 'enviar correio eletrónico',
+'autoblocker' => 'Foi automaticamente bloqueado, porque o seu endereço IP foi recentemente usado por "[[User:$1|$1]]". 
+O motivo apresentado para o bloqueio de $1 é: "$2".',
 'blocklogpage' => 'Registo de bloqueio',
 'blocklog-showlog' => 'Este utilizador foi já bloqueado anteriormente.
 O registo de bloqueios é fornecido abaixo para referência:',
@@ -2822,7 +2873,7 @@ Consulte a [[Special:BlockList|lista de bloqueios]] para obter a lista de bloque
 'block-log-flags-anononly' => 'apenas utilizadores anónimos',
 'block-log-flags-nocreate' => 'criação de contas impossibilitada',
 'block-log-flags-noautoblock' => 'bloqueio automático desativado',
-'block-log-flags-noemail' => 'correio electrónico bloqueado',
+'block-log-flags-noemail' => 'correio eletrónico bloqueado',
 'block-log-flags-nousertalk' => 'impossibilitado de editar a própria página de discussão',
 'block-log-flags-angry-autoblock' => 'ativado o bloqueio automático melhorado',
 'block-log-flags-hiddenname' => 'nome de utilizador ocultado',
@@ -2912,7 +2963,7 @@ Nestes casos, terá de mover a página de discussão manualmente, ou fundi-la co
 'move-watch' => 'Vigiar esta página',
 'movepagebtn' => 'Mover página',
 'pagemovedsub' => 'Página movida com sucesso',
-'movepage-moved' => '\'\'\'"$1" foi movida para "$2"\'\'\'',
+'movepage-moved' => '<strong>"$1" foi movida para "$2"</strong>',
 'movepage-moved-redirect' => 'Foi criado um redirecionamento.',
 'movepage-moved-noredirect' => 'A criação de um redirecionamento foi suprimida.',
 'articleexists' => 'Uma página com este nome já existe, ou o nome que escolheu é inválido.
@@ -2951,10 +3002,10 @@ não é possível mover uma página para ela mesma.',
 'imageinvalidfilename' => 'O nome do ficheiro alvo é inválido',
 'fix-double-redirects' => 'Atualizar todos os redirecionamentos que apontem para o título original',
 'move-leave-redirect' => 'Criar um redirecionamento',
-'protectedpagemovewarning' => "'''Aviso:''' Esta página foi protegida de maneira a que apenas utilizadores com privilégio de administrador possam movê-la.
-O último registo é apresentado abaixo para referência:",
-'semiprotectedpagemovewarning' => "'''Nota:''' Esta página protegida de maneira a que apenas utilizadores registados possam movê-la.
-O último registo é apresentado abaixo para referência:",
+'protectedpagemovewarning' => '<strong>Aviso:</strong> Esta página foi protegida de modo que apenas os utilizadores com privilégios de administrador possam movê-la.
+A última entrada é fornecido abaixo como referência:',
+'semiprotectedpagemovewarning' => '<strong>Note:</strong> Esta página foi protegida de modo que apenas utilizadores registados a possam mover.
+A última entrada é fornecida abaixo como referência:',
 'move-over-sharedrepo' => '== O ficheiro existe ==
 [[:$1]] já existe num repositório partilhado. Mover um ficheiro para o título [[:$1]] irá sobrepô-lo ao ficheiro partilhado.',
 'file-exists-sharedrepo' => 'O nome de ficheiro que escolheu já é utilizado num repositório partilhado.
@@ -2969,8 +3020,8 @@ Para exportar páginas, introduza os títulos na caixa de texto abaixo (um títu
 Se desejar, pode utilizar um link (por exemplo, [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para a [[{{MediaWiki:Mainpage}}]]).',
 'exportall' => 'Exportar todas as páginas',
 'exportcuronly' => 'Incluir apenas a edição atual, não o histórico completo',
-'exportnohistory' => "----
-'''Nota:''' a exportação do histórico completo de páginas através deste formulário foi desativada por afetar o desempenho do sistema.",
+'exportnohistory' => '----
+<strong>Nota:</strong> A exportação do histórico completo de páginas através deste formulário foi desativada devido a motivos de desempenho.',
 'exportlistauthors' => 'Incluir uma lista completa de colaboradores para cada página',
 'export-submit' => 'Exportar',
 'export-addcattext' => 'Adicionar à lista páginas da categoria:',
@@ -2988,7 +3039,7 @@ Se desejar, pode utilizar um link (por exemplo, [[{{#Special:Export}}/{{MediaWik
 'allmessagescurrent' => 'Texto atual',
 'allmessagestext' => 'Esta é a lista das mensagens de sistema disponíveis no espaço nominal MediaWiki.
 Se deseja colaborar na localização genérica do MediaWiki, visite [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e a [//translatewiki.net translatewiki.net].',
-'allmessagesnotsupportedDB' => "Esta página não pode ser utilizada, uma vez que '''\$wgUseDatabaseMessages''' foi desativado.",
+'allmessagesnotsupportedDB' => 'Esta página não pode ser usada porque a <strong>$wgUseDatabaseMessages</strong> foi desativada.',
 'allmessages-filter-legend' => 'Filtro',
 'allmessages-filter' => 'Filtrar pelo estado de personalização:',
 'allmessages-filter-unmodified' => 'Não modificadas',
@@ -2997,6 +3048,7 @@ Se deseja colaborar na localização genérica do MediaWiki, visite [https://www
 'allmessages-prefix' => 'Filtrar pelos caracteres iniciais:',
 'allmessages-language' => 'Língua:',
 'allmessages-filter-submit' => 'Filtrar',
+'allmessages-filter-translate' => 'Traduzir',
 
 # Thumbnails
 'thumbnail-more' => 'Ampliar',
@@ -3013,6 +3065,7 @@ $2',
 'thumbnail_image-type' => 'Tipo de imagem não suportado',
 'thumbnail_gd-library' => 'Configuração da biblioteca GD incompleta: função $1 em falta',
 'thumbnail_image-missing' => 'Ficheiro em falta: $1',
+'thumbnail_image-failure-limit' => 'Ocorreram demasiadas tentativas recentes ($1 ou mais) de criação desta miniatura. Tente novamente mais tarde, por favor.',
 
 # Special:Import
 'import' => 'Importar páginas',
@@ -3051,7 +3104,7 @@ O ficheiro foi recebido parcialmente.',
 Não há um diretório temporário.',
 'import-parse-failure' => 'Falha ao importar dados XML',
 'import-noarticle' => 'Sem páginas para importar!',
-'import-nonewrevisions' => 'Todas as revisões já tinham sido importadas anteriormente.',
+'import-nonewrevisions' => 'Nenhuma revisão foi importada (já estavam todas presentes ou foram ignoradas devido a erros).',
 'xml-error-string' => '$1 na linha $2, coluna $3 (byte $4): $5',
 'import-upload' => 'Enviar dados em XML',
 'import-token-mismatch' => 'Perda dos dados da sessão. Tente novamente, por favor.',
@@ -3062,6 +3115,7 @@ Não há um diretório temporário.',
 'import-error-special' => 'A página "$1" não pode ser importada porque ela pertence a um espaço nominal especial que não permite páginas.',
 'import-error-invalid' => 'A página "$1" não pode ser importada porque seu nome é inválido.',
 'import-error-unserialize' => 'Revisão $2 da página "$1" não pode ser desserializada. Foi relatado que a revisão usava o modelo de conteúdo $3 serializado como $4.',
+'import-error-bad-location' => 'A revisão $2, que usa o modelo de conteúdo $3, não pode ser gravada em "$1" nesta wiki, porque o modelo não é suportado nessa página.',
 'import-options-wrong' => '{{PLURAL:$2|Opção errada|Opções erradas}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'A raiz da página dada é um título inválido.',
 'import-rootpage-nosubpage' => 'O domínio "$1" da página de raiz não permite subpáginas.',
@@ -3078,7 +3132,7 @@ Não há um diretório temporário.',
 'javascripttest' => 'Teste de JavaScript',
 'javascripttest-title' => 'Executando os testes $1',
 'javascripttest-pagetext-noframework' => 'Esta página é reservada para a execução de testes de JavaScript.',
-'javascripttest-pagetext-unknownframework' => 'Estrutura de testes "$1" desconhecido.',
+'javascripttest-pagetext-unknownframework' => 'Estrutura de testes "$1" desconhecida.',
 'javascripttest-pagetext-frameworks' => 'Escolha, por favor, uma das seguintes estruturas de teste: $1',
 'javascripttest-pagetext-skins' => 'Escolher um tema para executar os testes com:',
 'javascripttest-qunit-intro' => 'Consulte a [ $1 documentação de testes] no mediawiki.org.',
@@ -3113,7 +3167,7 @@ Utilize o botão "Antever resultado" antes de gravar, por favor.',
 'tooltip-p-logo' => 'Visite a página principal',
 'tooltip-n-mainpage' => 'Visitar a página principal',
 'tooltip-n-mainpage-description' => 'Visitar a página principal',
-'tooltip-n-portal' => 'Sobre o projeto, o que se pode fazer e onde achar as coisas',
+'tooltip-n-portal' => 'Sobre o projeto, o que se pode fazer e onde encontrar as coisas',
 'tooltip-n-currentevents' => 'Informação temática sobre acontecimentos atuais',
 'tooltip-n-recentchanges' => 'A lista de mudanças recentes nesta wiki.',
 'tooltip-n-randompage' => 'Carregar página aleatória',
@@ -3195,12 +3249,12 @@ Este bloqueio foi provavelmente causado por um link para um site externo que con
 'spam_reverting' => 'A reverter para a última revisão que não contém links para $1',
 'spam_blanking' => 'Todas as revisões continham links para $1; a esvaziar',
 'spam_deleting' => 'Todas as revisões continham links para $1; a eliminar',
-'simpleantispam-label' => "Verificação contra spam
-'''NÃO''' preencha isto!",
+'simpleantispam-label' => 'Verificação contra spam.
+<strong>NÃO</strong> preencha isto!',
 
 # Info page
 'pageinfo-title' => 'Informações sobre "$1"',
-'pageinfo-not-current' => 'Desculpe, é impossível fornecer esta informação para revisõe antigas.',
+'pageinfo-not-current' => 'Desculpe, é impossível fornecer esta informação para revisões antigas.',
 'pageinfo-header-basic' => 'Informação básica',
 'pageinfo-header-edits' => 'Histórico de edições',
 'pageinfo-header-restrictions' => 'Proteção da página',
@@ -3285,9 +3339,9 @@ $1',
 'nextdiff' => 'Edição posterior →',
 
 # Media information
-'mediawarning' => "'''Aviso''': Este tipo de ficheiro pode conter código malicioso.
-Executá-lo poderá comprometer a segurança do seu sistema.",
-'imagemaxsize' => "Limite de tamanho de imagens:<br />''(para páginas de descrição)''",
+'mediawarning' => '<strong>Aviso:</strong> Este tipo de ficheiro pode conter código malicioso.
+Se o executar, o seu sistema pode ficar comprometido.',
+'imagemaxsize' => 'Tamanho limite da imagem:<br /><em>(para páginas de descrição de ficheiros)</em>',
 'thumbsize' => 'Tamanho de miniaturas:',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|página|páginas}}',
 'file-info' => 'tamanho: $1, tipo MIME: $2',
@@ -3297,7 +3351,7 @@ Executá-lo poderá comprometer a segurança do seu sistema.",
 'svg-long-desc' => 'ficheiro SVG, de $1 × $2 pixels, tamanho: $3',
 'svg-long-desc-animated' => 'ficheiro SVG animado, de $1 × $2 pixels, tamanho: $3',
 'svg-long-error' => 'Ficheiro SVG inválido: $1',
-'show-big-image' => 'Arquivo original',
+'show-big-image' => 'Ficheiro original',
 'show-big-image-preview' => 'Tamanho desta antevisão: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Outra resolução|Outras resoluções}}: $1.',
 'show-big-image-size' => '$1 × $2 pixels',
@@ -3306,12 +3360,12 @@ Executá-lo poderá comprometer a segurança do seu sistema.",
 'file-info-png-looped' => 'ciclo infinito',
 'file-info-png-repeat' => 'reproduzido $1 {{PLURAL:$1|vez|vezes}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|fotograma|fotogramas}}',
-'file-no-thumb-animation' => "'''Nota: Devido a limitações técnicas, miniaturas deste ficheiro não serão animadas.'''",
-'file-no-thumb-animation-gif' => "'''Nota: Devido a limitações técnicas, miniaturas de imagens GIF de alta resolução tais como esta não serão animadas.'''",
+'file-no-thumb-animation' => '<strong>Nota: Devido a limitações técnicas, miniaturas deste ficheiro não serão animadas.</strong>',
+'file-no-thumb-animation-gif' => '<strong>Nota: Devido a limitações técnicas, miniaturas de GIFs com imagens de alta resolução como este não serão animadas.</strong>',
 
 # Special:NewFiles
 'newimages' => 'Galeria de novos ficheiros',
-'imagelisttext' => "Abaixo é apresentada uma lista {{PLURAL:$1|de '''um''' ficheiro, organizado|de '''$1''' ficheiros, organizados}} $2.",
+'imagelisttext' => 'Abaixo está uma lista de <strong>$1</strong> {{PLURAL:$1|ficheiro|ficheiros}} ordenados $2.',
 'newimages-summary' => 'Esta página especial mostra os ficheiros mais recentemente enviados.',
 'newimages-legend' => 'Filtrar',
 'newimages-label' => 'Nome de ficheiro (ou parte dele):',
@@ -3768,12 +3822,12 @@ Caso o ficheiro tenha sido modificado a partir do seu estado original, alguns de
 'monthsall' => 'todos',
 
 # Email address confirmation
-'confirmemail' => 'Confirmar endereço de correio electrónico',
-'confirmemail_noemail' => 'Não tem um endereço de correio electrónico válido nas suas [[Special:Preferences|preferências de utilizador]].',
-'confirmemail_text' => 'A {{SITENAME}} requer que valide o seu endereço de correio electrónico antes de usar as funcionalidades de correio.
+'confirmemail' => 'Confirmar endereço de correio eletrónico',
+'confirmemail_noemail' => 'Não tem um endereço de correio eletrónico válido nas suas [[Special:Preferences|preferências de utilizador]].',
+'confirmemail_text' => 'A {{SITENAME}} requer que valide o seu endereço de correio eletrónico antes de usar as funcionalidades de correio.
 Clique o botão abaixo para enviar uma mensagem de confirmação para o seu endereço.
-A mensagem incluíra uma URL que contém um código;
-insira a URL no seu browser para confirmar que o seu endereço de correio electrónico é válido.',
+A mensagem incluirá uma URL que contém um código;
+insira a URL no seu browser para confirmar que o seu endereço de correio eletrónico é válido.',
 'confirmemail_pending' => 'Um código de confirmação já lhe foi enviado;
 caso tenha criado a conta recentemente, é recomendado que aguarde alguns minutos até o receber antes de tentar pedir um novo código.',
 'confirmemail_send' => 'Enviar código de confirmação',
@@ -3781,17 +3835,17 @@ caso tenha criado a conta recentemente, é recomendado que aguarde alguns minuto
 'confirmemail_oncreate' => 'Foi enviado um código de confirmação para o seu endereço de correio eletrónico.
 Este código não é necessário para se autenticar no sistema, mas será necessário para ativar qualquer funcionalidade baseada no uso de correio na wiki.',
 'confirmemail_sendfailed' => 'A {{SITENAME}} não conseguiu enviar a mensagem de confirmação.
-Verifique se o seu endereço de correio electrónico tem caracteres inválidos.
+Verifique se o seu endereço de correio eletrónico tem caracteres inválidos.
 
 O sistema de correio devolveu o erro: $1',
 'confirmemail_invalid' => 'Código de confirmação inválido. O código poderá ter expirado.',
-'confirmemail_needlogin' => 'Precisa de $1 para confirmar o seu endereço de correio electrónico.',
-'confirmemail_success' => 'O seu endereço de correio electrónico foi confirmado.
+'confirmemail_needlogin' => 'Precisa de $1 para confirmar o seu endereço de correio eletrónico.',
+'confirmemail_success' => 'O seu endereço de correio eletrónico foi confirmado.
 Pode agora [[Special:UserLogin|autenticar-se]] e desfrutar da wiki.',
-'confirmemail_loggedin' => 'O seu endereço de correio electrónico foi confirmado.',
-'confirmemail_subject' => 'Confirmação de endereço de correio electrónico da {{SITENAME}}',
+'confirmemail_loggedin' => 'O seu endereço de correio eletrónico foi confirmado.',
+'confirmemail_subject' => 'Confirmação de endereço de correio eletrónico da {{SITENAME}}',
 'confirmemail_body' => 'Alguém, provavelmente você a partir do endereço IP $1,
-registrou uma conta "$2" com este endereço de correio eletrónico na {{SITENAME}}.
+registou uma conta "$2" com este endereço de correio eletrónico na {{SITENAME}}.
 
 Para confirmar que esta conta é realmente sua e ativar
 as funcionalidades de correio eletrónico na {{SITENAME}},
@@ -3835,8 +3889,8 @@ para cancelar a confirmação do endereço de correio eletrónico:
 $5
 
 Este código de confirmação expira a $4.',
-'confirmemail_invalidated' => 'Confirmação de endereço de correio electrónico cancelada',
-'invalidateemail' => 'Cancelar confirmação de correio electrónico',
+'confirmemail_invalidated' => 'Confirmação de endereço de correio eletrónico cancelada',
+'invalidateemail' => 'Cancelar confirmação do correio eletrónico',
 
 # Scary transclusion
 'scarytranscludedisabled' => '[Transclusão interwikis foi impossibilitada]',
@@ -3845,10 +3899,10 @@ Este código de confirmação expira a $4.',
 'scarytranscludetoolong' => '[URL longa demais]',
 
 # Delete conflict
-'deletedwhileediting' => "'''Aviso''': Esta página foi eliminada após ter começado a editá-la!",
-'confirmrecreate' => "Enquanto você editava esta página, o utilizador [[User:$1|$1]] ([[User talk:$1|Discussão]]) eliminou-a pelo seguinte motivo:
-: ''$2''
-Confirme que deseja realmente recriar esta página, por favor.",
+'deletedwhileediting' => '<strong>AVISO:</strong> Esta página foi eliminada depois de você ter começado a editá-la!',
+'confirmrecreate' => 'Depois de você ter começado a editar esta página, o utilizador [[User:$1|$1]] ([[User talk:$1|conversar]]) eliminou-a pelo seguinte motivo:
+: <em>$2</em>
+Por favor, confirme que você quer realmente recriar esta página.',
 'confirmrecreate-noreason' => 'O utilizador [[User:$1|$1]] ([[User talk:$1|discussão]]) eliminou esta página depois de você ter começado a editá-la. Confirme que deseja recriar a página, por favor.',
 'recreate' => 'Recriar',
 
@@ -3863,6 +3917,9 @@ Confirme que deseja realmente recriar esta página, por favor.",
 'confirm-unwatch-button' => 'OK',
 'confirm-unwatch-top' => 'Remover esta página das páginas vigiadas?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '"$1"',
+
 # Multipage image navigation
 'imgmultipageprev' => '← página anterior',
 'imgmultipagenext' => 'página seguinte →',
@@ -3871,7 +3928,7 @@ Confirme que deseja realmente recriar esta página, por favor.",
 
 # Language selector for translatable SVGs
 'img-lang-default' => '(língua padrão)',
-'img-lang-info' => 'Renderizar essa imagem em $1. $2',
+'img-lang-info' => 'Compor esta imagem em $1. $2',
 'img-lang-go' => 'Ir',
 
 # Table pager
@@ -3894,7 +3951,7 @@ Confirme que deseja realmente recriar esta página, por favor.",
 
 # Live preview
 'livepreview-loading' => 'A carregar…',
-'livepreview-ready' => 'A carregando… Terminado!',
+'livepreview-ready' => 'A carregar... Terminado!',
 'livepreview-failed' => 'A antevisão instantânea falhou!
 Tente a antevisão normal.',
 'livepreview-error' => 'Falha ao ligar: $1 "$2"
@@ -3937,7 +3994,7 @@ Também pode [[Special:EditWatchlist|editar a lista da maneira convencional]].',
 
 # Core parser functions
 'unknown_extension_tag' => '"$1" é uma tag de extensão desconhecida',
-'duplicate-defaultsort' => 'Aviso: A chave de ordenação padrão "$2" sobrepõe-se à anterior chave de ordenação padrão "$1".',
+'duplicate-defaultsort' => '<strong>Aviso:</strong> A chave de ordenação padrão "$2" sobrepõe-se à anterior "$1".',
 
 # Special:Version
 'version' => 'Versão',
@@ -3956,9 +4013,19 @@ Também pode [[Special:EditWatchlist|editar a lista da maneira convencional]].',
 'version-hook-subscribedby' => 'Subscrito por',
 'version-version' => '(Versão $1)',
 'version-license' => 'Licença do MediaWiki',
-'version-credits-not-found' => 'Nenhuma informação detalhada acerca dos créditos foi encontrada para esta extensão.',
-'version-poweredby-credits' => "Esta é uma wiki '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-ext-license' => 'Licença',
+'version-ext-colheader-name' => 'Extensão',
+'version-ext-colheader-version' => 'Versão',
+'version-ext-colheader-license' => 'Licença',
+'version-ext-colheader-description' => 'Descrição',
+'version-ext-colheader-credits' => 'Autores',
+'version-license-title' => 'Licença para $1',
+'version-license-not-found' => 'Não foi encontrada informação detalhada da licença para esta extensão.',
+'version-credits-title' => 'Créditos de autoria da extensão $1',
+'version-credits-not-found' => 'Não foi encontrada informação detalhada dos créditos para esta extensão.',
+'version-poweredby-credits' => 'Esta wiki é potenciada por <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.',
 'version-poweredby-others' => 'outros',
+'version-poweredby-translators' => 'os tradutores da translatewiki.net',
 'version-credits-summary' => 'Gostaríamos de reconhecer as seguintes pessoas pela sua contribuição para o [[Special:Version|MediaWiki]].',
 'version-license-info' => 'O MediaWiki é software livre; pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.
 
@@ -3973,13 +4040,14 @@ Em conjunto com este programa deve ter recebido [{{SERVER}}{{SCRIPTPATH}}/COPYIN
 'version-entrypoints-header-url' => 'URL',
 
 # Special:Redirect
-'redirect' => 'Redireccionar pelo ID do ficheiro, utilizador ou revisão',
+'redirect' => 'Redireccionar pelo ID do ficheiro, do utilizador ou da revisão',
 'redirect-legend' => 'Redirecionar para um ficheiro ou página',
-'redirect-summary' => 'Esta página especial redirecciona a um ficheiro (dado o nome do ficheiro), a uma página (dado um ID de revisão) ou a uma página de utilizador (dado o ID do utilizador). Utilização: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] ou [[{{#Special:Redirect}}/user/101]].',
+'redirect-summary' => 'Esta página especial redirecciona para um ficheiro (dado o nome do ficheiro), para uma página (dado um ID de revisão ou página) ou para uma página de utilizador (dado um ID numérico do utilizador). Utilização: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] ou [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'Ir',
 'redirect-lookup' => 'Pesquisa:',
 'redirect-value' => 'Valor:',
 'redirect-user' => 'Identificador do utilizador',
+'redirect-page' => 'Identificador (ID) da página',
 'redirect-revision' => 'Revisão da página',
 'redirect-file' => 'Nome do ficheiro',
 'redirect-not-exists' => 'Valor não encontrado',
@@ -4066,13 +4134,13 @@ Em conjunto com este programa deve ter recebido [{{SERVER}}{{SCRIPTPATH}}/COPYIN
 'dberr-cachederror' => 'A seguinte página é uma cópia em cache da página pedida e pode não estar atualizada.',
 
 # HTML forms
-'htmlform-invalid-input' => 'Existem problemas com alguns dos dados introduzidos',
+'htmlform-invalid-input' => 'Existem problemas com alguns dos dados introduzidos.',
 'htmlform-select-badoption' => 'O valor que especificou não é uma opção válida.',
 'htmlform-int-invalid' => 'O valor que especificou não é um inteiro.',
 'htmlform-float-invalid' => 'O valor que especificou não é um número.',
-'htmlform-int-toolow' => 'O valor que especificou é inferior ao mínimo de $1',
-'htmlform-int-toohigh' => 'O valor que especificou é superior ao máximo de $1',
-'htmlform-required' => 'Este valor é necessário',
+'htmlform-int-toolow' => 'O valor que especificou é inferior ao mínimo de $1.',
+'htmlform-int-toohigh' => 'O valor que especificou é superior ao máximo de $1.',
+'htmlform-required' => 'Este valor é necessário.',
 'htmlform-submit' => 'Enviar',
 'htmlform-reset' => 'Desfazer alterações',
 'htmlform-selectorother-other' => 'Outros',
@@ -4106,8 +4174,8 @@ Em conjunto com este programa deve ter recebido [{{SERVER}}{{SCRIPTPATH}}/COPYIN
 'revdelete-unrestricted' => 'restrições a administradores removidas',
 'logentry-move-move' => '$1 moveu a página $3 para $4',
 'logentry-move-move-noredirect' => '$1 moveu a página $3 para $4 sem deixar um redirecionamento',
-'logentry-move-move_redir' => '$1 moveu a página $3 para $4 sobre um redirecionamento',
-'logentry-move-move_redir-noredirect' => '$1 moveu a página $3 para $4 sobre um redirecionamento sem deixar um redirecionamento',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|moveu}} a página $3 para $4 sobre um redirecionamento',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|moveu}} a página $3 para $4 sobre um redirecionamento sem deixar um redirecionamento',
 'logentry-patrol-patrol' => '$1 {{GENDER:$2|marcou}} a revisão $4 da página $3 como patrulhada',
 'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|marcou}} automaticamente a revisão $4 da página $3 como patrulhada',
 'logentry-newusers-newusers' => 'A conta de utilizador $1 foi {{GENDER:$2|criada}}',
@@ -4131,7 +4199,7 @@ Caso contrário, pode facilmente usar o formulário abaixo. O seu comentário se
 'feedback-error1' => 'Erro: O resultado da API não foi reconhecido',
 'feedback-error2' => 'Erro: A edição falhou',
 'feedback-error3' => 'Erro: A API não responde',
-'feedback-thanks' => 'Obrigado! O seu comentário foi adicionado à página "[ $2  $1 ]".',
+'feedback-thanks' => 'Obrigado! O seu comentário foi adicionado à página "[$2 $1]".',
 'feedback-close' => 'Feito',
 'feedback-bugcheck' => 'Perfeito! Verifique apenas que não é já um dos [$1 defeitos conhecidos].',
 'feedback-bugnew' => 'Eu verifiquei. Comunicar um novo defeito.',
@@ -4173,6 +4241,7 @@ Caso contrário, pode facilmente usar o formulário abaixo. O seu comentário se
 'api-error-overwrite' => 'Não é permitido sobrescrever um ficheiro existente.',
 'api-error-stashfailed' => 'Erro interno: O servidor não conseguiu armazenar o ficheiro temporário.',
 'api-error-publishfailed' => 'Erro interno: Servidor não conseguiu publicar ficheiro temporário.',
+'api-error-stasherror' => 'Ocorreu um erro no upload do ficheiro escondido.',
 'api-error-timeout' => 'O servidor não respondeu no prazo esperado.',
 'api-error-unclassified' => 'Ocorreu um erro desconhecido',
 'api-error-unknown-code' => 'Erro desconhecido: "$1"',
@@ -4202,26 +4271,32 @@ Caso contrário, pode facilmente usar o formulário abaixo. O seu comentário se
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|segundo|segundos}}',
 'limitreport-walltime' => 'Tempo real de utilização',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|segundo|segundos}}',
+'limitreport-ppvisitednodes' => 'Número de nós visitados pelo pré-processador',
+'limitreport-ppgeneratednodes' => 'Número de nós gerados pelo pré-processador',
+'limitreport-postexpandincludesize' => 'Tamanho de inclusão após expansão',
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
 'limitreport-templateargumentsize' => 'Tamanho dos argumentos da predefinição',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
+'limitreport-expansiondepth' => 'Profundidade máxima de expansão',
 'limitreport-expensivefunctioncount' => 'Número de funções do analisador custosas',
 
 # Special:ExpandTemplates
 'expandtemplates' => 'Expandir predefinições',
 'expand_templates_intro' => "Esta página especial recebe um texto e expande recursivamente todas as predefinições nele existentes.
 Também expande funções do analisador sintático ''(parser)'', tais como
-<nowiki>{{</nowiki>#language:...}}, e variáveis, tais como
+<nowiki>{{</nowiki>#language:...}}, e variáveis, como
 <nowiki>{{</nowiki>CURRENTDAY}}.
-De fato, expande tudo o que estiver entre chaves duplas.",
+Na verdade, expande tudo o que estiver entre chavetas duplas.",
 'expand_templates_title' => 'Título de contexto para {{FULLPAGENAME}} etc.:',
 'expand_templates_input' => 'Texto a expandir:',
 'expand_templates_output' => 'Resultado',
 'expand_templates_xml_output' => 'Resultado XML',
+'expand_templates_html_output' => 'Resultado HTML puro',
 'expand_templates_ok' => 'Expandir',
 'expand_templates_remove_comments' => 'Remover comentários',
 'expand_templates_remove_nowiki' => "Suprimir ''tags'' <nowiki> no resultado",
 'expand_templates_generate_xml' => 'Mostrar a árvore de análise sintáctica do XML',
+'expand_templates_generate_rawhtml' => 'Mostrar o HTML puro',
 'expand_templates_preview' => 'Antevisão do resultado',
 
 );
index c8c79f1..a1c2341 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Alcali
  * @author Alchimista
+ * @author Anaclaudiaml
  * @author Bani
  * @author Brion
  * @author BrunaaAa
@@ -24,6 +25,7 @@
  * @author Dicionarista
  * @author Diego Queiroz
  * @author Eduardo.mps
+ * @author Elival
  * @author Emufarmers
  * @author Everton137
  * @author Francisco Leandro
@@ -36,6 +38,7 @@
  * @author Helder.wiki
  * @author Jaideraf
  * @author Jesielt
+ * @author Jgpacker
  * @author Jorge Morais
  * @author Kaganer
  * @author Leonardo.stabile
@@ -46,6 +49,7 @@
  * @author Malafaya
  * @author ManoDbo
  * @author Matheus Sousa L.T
+ * @author Matma Rex
  * @author McDutchie
  * @author MetalBrasil
  * @author MisterSanderson
@@ -364,7 +368,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Receber cópias de e-mails que eu enviar a outros usuários',
 'tog-diffonly' => 'Não mostrar o conteúdo da página ao comparar duas edições',
 'tog-showhiddencats' => 'Exibir categorias ocultas',
-'tog-noconvertlink' => 'Desabilitar conversão de títulos de links',
 'tog-norollbackdiff' => 'Omitir diferenças após desfazer edições em bloco',
 'tog-useeditwarning' => 'Avisar-me quando eu deixar uma janela de edição sem ter salvo as alterações',
 'tog-prefershttps' => 'Usar sempre uma conexão segura quando estiver conectado',
@@ -491,7 +494,6 @@ $messages = array(
 'vector-action-protect' => 'Proteger',
 'vector-action-undelete' => 'Restaurar',
 'vector-action-unprotect' => 'Alterar a proteção',
-'vector-simplesearch-preference' => 'Ativar barra simplificada de buscas (apenas no skin Vector)',
 'vector-view-create' => 'Criar',
 'vector-view-edit' => 'Editar',
 'vector-view-history' => 'Ver histórico',
@@ -779,10 +781,9 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências no
 'gotaccountlink' => 'Autenticar-se',
 'userlogin-resetlink' => 'Esqueceu-se do seu nome de usuário ou da senha?',
 'userlogin-resetpassword-link' => 'Esqueceu sua senha?',
-'helplogin-url' => 'Help:Iniciar sessão',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ajuda para iniciar sessão]]',
 'userlogin-loggedin' => 'Você já está conectado como {{GENDER:$1|$1}}.
 Use o formulário abaixo para iniciar sessão como outro usuário.',
+'userlogin-createanother' => 'Criar uma outra conta',
 'createacct-join' => 'Insira suas informações abaixo.',
 'createacct-another-join' => 'Preeencha as informações para a nova conta',
 'createacct-emailrequired' => 'Endereço de e-mail',
@@ -871,6 +872,9 @@ Por favor aguarde $1 antes de tentar novamente.',
 'suspicious-userlogout' => 'Sua solicitação para sair foi negada porque aparentemente foi enviada por um navegador danificado ou por um servidor proxy com cache.',
 'createacct-another-realname-tip' => 'O nome verdadeiro é opcional.
 Se você optar por fornecê-lo, este nome será utilizado para dar ao usuário a atribuição de seu trabalho.',
+'pt-login' => 'Entrar',
+'pt-login-button' => 'Entrar',
+'pt-createaccount' => 'Criar conta',
 
 # Email sending
 'php-mail-error-unknown' => 'Erro desconhecido na função mail() do PHP',
@@ -879,7 +883,7 @@ Se você optar por fornecê-lo, este nome será utilizado para dar ao usuário a
 
 # Change password dialog
 'changepassword' => 'Alterar senha',
-'resetpass_announce' => 'Você foi autenticado através de uma senha temporária. Para prosseguir, será necessário definir uma nova senha.',
+'resetpass_announce' => 'Para completar a autenticação, é necessário definir uma nova senha.',
 'resetpass_text' => '<!-- Adicionar texto aqui -->',
 'resetpass_header' => 'Alterar a senha da conta',
 'oldpassword' => 'Senha antiga',
@@ -887,14 +891,20 @@ Se você optar por fornecê-lo, este nome será utilizado para dar ao usuário a
 'retypenew' => 'Reintroduza a nova senha',
 'resetpass_submit' => 'Definir senha e entrar',
 'changepassword-success' => 'Sua senha foi alterada com sucesso!',
+'changepassword-throttled' => 'Você realizou demasiadas tentativas de se registrar.
+Por favor, aguarde $1 antes de tentar novamente.',
 'resetpass_forbidden' => 'As senhas não podem ser alteradas',
 'resetpass-no-info' => 'Você precisa estar autenticado para acessar esta página diretamente.',
 'resetpass-submit-loggedin' => 'Alterar senha',
 'resetpass-submit-cancel' => 'Cancelar',
 'resetpass-wrong-oldpass' => 'Senha temporária ou atual inválida.
 Você pode já ter alterado com sucesso a sua senha, ou solicitado uma nova senha temporária.',
+'resetpass-recycled' => 'Por favor, redefina sua nova senha para uma diferente da atual.',
+'resetpass-temp-emailed' => 'Você está autenticado com o código temporário enviado. Para finalizar a autenticação, você deve inserir uma nova senha aqui:',
 'resetpass-temp-password' => 'Senha temporária:',
 'resetpass-abort-generic' => 'Uma extensão cancelou a alteração da senha.',
+'resetpass-expired' => 'Sua senha expirou. Por favor insira uma nova senha para autenticar-se.',
+'resetpass-expired-soft' => 'Sua senha expirou e necessita ser resetada. Por favor escolha uma nova agora, ou clique "{{int:resetpass-submit-cancel}}" para resetar mais tarde.',
 
 # Special:PasswordReset
 'passwordreset' => 'Redefinir senha',
@@ -942,6 +952,8 @@ Senha temporária: $2',
 'changeemail-password' => 'Sua senha para o wiki {{SITENAME}}:',
 'changeemail-submit' => 'Alterar e-mail',
 'changeemail-cancel' => 'Cancelar',
+'changeemail-throttled' => 'Você realizou demasiadas tentativas de se registrar.
+Por favor, aguarde $1 antes de tentar novamente.',
 
 # Special:ResetTokens
 'resettokens' => 'Reiniciar os tokens',
@@ -1164,7 +1176,7 @@ Ela já existia.',
 'invalid-content-data' => 'Dados de conteúdo inválidos',
 'content-not-allowed-here' => 'Conteúdo do tipo "$1" não é permitido na página [[$2]]',
 'editwarning-warning' => 'Abandonar esta página pode fazer com que você perca todas as alterações que fez.
-Se você estiver autenticado, você pode desabilitar este aviso na seção "Edição" de suas preferências.',
+Se você estiver autenticado, você pode desabilitar este aviso na seção {{int:prefs-editing}}"  de suas preferências.',
 'editpage-notsupportedcontentformat-title' => 'Formato do conteúdo não suportado',
 'editpage-notsupportedcontentformat-text' => 'O formato de conteúdo $1 não é suportando pelo modelo de conteúdo $2.',
 
@@ -1200,6 +1212,7 @@ Estes argumentos foram omitidos.',
 'undo-success' => 'A edição pôde ser desfeita. Por gentileza, verifique o comparativo a seguir para se certificar de que é isto que deseja fazer, salvando as alterações após ter terminado de revisá-las.',
 'undo-failure' => 'A edição não pôde ser desfeita devido a alterações intermediárias conflitantes.',
 'undo-norev' => 'A edição não pôde ser desfeita porque não existe ou foi apagada.',
+'undo-nochange' => 'Parece que a edição já foi desfeita.',
 'undo-summary' => 'Desfeita a edição $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussão]])',
 'undo-summary-username-hidden' => 'Desfazer a revisão $1 de um usuário oculto',
 
@@ -1208,6 +1221,9 @@ Estes argumentos foram omitidos.',
 'cantcreateaccount-text' => "Este IP ('''$1''') foi bloqueado de criar novas contas por [[User:$3|$3]].
 
 A justificativa apresentada por $3 foi ''$2''",
+'cantcreateaccount-range-text' => "A criação de conta a partir dos endereços IP no intervalo '''$1''', que inclui o seu endereço IP ('''$4'''), foi bloqueada por [[User:$3|$3]].
+
+A razão dada por $3 é ''$2''",
 
 # History pages
 'viewpagelogs' => 'Ver registros para esta página',
@@ -1281,8 +1297,10 @@ Você pode ver esta comparação; detalhes podem ser encontrados no [{{fullurl:{
 'revdelete-show-file-submit' => 'Sim',
 'revdelete-selected' => "'''{{PLURAL:$2|Edição selecionada|Edições selecionadas}} de [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Evento de registro selecionado|Eventos de registro selecionados}}:'''",
-'revdelete-text' => "'''Revisões eliminadas e eventos continuarão aparecendo no histórico da página e nos registros, apesar de o seu conteúdo textual estar inacessível ao público.'''
-Outros administradores no {{SITENAME}} continuarão podendo acessar ao conteúdo escondido e restaurá-lo através desta mesma ''interface'', a menos que uma restrição adicional seja definida.",
+'revdelete-text-text' => 'Revisões apagadas continuarão a aparecer na página de histórico, mas parte de seus conteúdos estarão inacessíveis ao público.',
+'revdelete-text-file' => 'Versões dos arquivos apagados continuarão a aparecer no arquivo de histórico, mas parte de seus conteúdos estarão inacessíveis ao publico.',
+'logdelete-text' => 'Eventos de log apagados continuarão a aparecer nos logs, mas parte de seus conteúdos estarão inacessíveis ao público.',
+'revdelete-text-others' => 'Outros administrador na {{SITENAME}} continuarão capazes de acessar o conteúdo oculto e desocultá-lo pela mesma interface, a menos que restrições adicionais tenha sido feitas.',
 'revdelete-confirm' => 'Por favor confirme que pretende executar esta ação, que compreende as suas consequências e que o faz em concordância com as [[{{MediaWiki:Policy-url}}|políticas e recomendações]].',
 'revdelete-suppress-text' => "A supressão deverá ser usada '''apenas''' para os seguintes casos:
 * Informação potencialmente difamatória
@@ -1376,6 +1394,8 @@ Certifique-se de que tal alteração manterá a continuidade das ações.',
 'showhideselectedversions' => 'Exibir/ocultar edições selecionadas',
 'editundo' => 'desfazer',
 'diff-empty' => '(Sem diferença)',
+'diff-multi-sameuser' => '({{PLURAL:$1|Uma revisão intermediária|$1 revisões intermediárias}} pelo mesmo usuário não estão sendo mostradas)',
+'diff-multi-otherusers' => '({{PLURAL:$1|Uma revisão intermediária por {{PLURAL:$2|um outro usuário|$2 usuários}} não está sendo mostrada|$1 revisões intermediárias por {{PLURAL:$2|um outro usuário|$2 usuários}} não estão sendo mostradas}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|Uma edição intermediária|$1 edições intermediárias}} de mais de {{PLURAL:$2|um usuário|$2 usuário}} não {{PLURAL:$1|apresentada|apresentadas}})',
 'difference-missing-revision' => '{{PLURAL:$2|Uma revisão|$2 revisões}} desta diferença ($1) não {{PLURAL:$2|foi encontrada|foram encontradas}}.
 
@@ -1395,8 +1415,8 @@ Os detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{F
 'nextn-title' => '{{PLURAL:$1|próximo|próximos}} $1 {{PLURAL:$1|resultado|resultados}}',
 'shown-title' => 'Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página',
 'viewprevnext' => 'Ver ($1 {{int:pipe-separator}} $2) ($3).',
-'searchmenu-exists' => "'''Há uma página com o nome \"[[:\$1]]\" nesta wiki'''",
-'searchmenu-new' => "'''Criar a página \"[[:\$1|\$1]]\" nesta wiki!'''",
+'searchmenu-exists' => '<strong>Há uma página com o nome "[[:$1]]" neste wiki.</strong> {{PLURAL:$2|0=|Veja também os outros resultados da pesquisa encontrados.}}',
+'searchmenu-new' => '<strong>Criar a página "[[:$1]]" nesta wiki!</strong>{{PLURAL:$2|0=| Veja também a página encontrada com sua pesquisa.|Veja também os resultados das pesquisas encontradas.}}',
 'searchprofile-articles' => 'Páginas de conteúdo',
 'searchprofile-project' => 'Ajuda e páginas de projeto',
 'searchprofile-images' => 'Multimídia',
@@ -1412,6 +1432,7 @@ Os detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{F
 'search-result-score' => 'Relevância: $1%',
 'search-redirect' => '(redirecionamento de $1)',
 'search-section' => '(seção $1)',
+'search-file-match' => '(coincide com o conteúdo do arquivo)',
 'search-suggest' => 'Você quis dizer: $1',
 'search-interwiki-caption' => 'Projetos irmãos',
 'search-interwiki-default' => 'Resultados de $1:',
@@ -1743,11 +1764,23 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra
 'rcnotefrom' => "Seguem as alterações desde as '''$4''' de '''$3''' (limitadas a '''$1''').",
 'rclistfrom' => 'Mostrar as novas alterações a partir das $1',
 'rcshowhideminor' => '$1 edições menores',
+'rcshowhideminor-show' => 'Exibir',
+'rcshowhideminor-hide' => 'Ocultar',
 'rcshowhidebots' => '$1 robôs',
+'rcshowhidebots-show' => 'Exibir',
+'rcshowhidebots-hide' => 'Ocultar',
 'rcshowhideliu' => '$1 usuários registrados',
+'rcshowhideliu-show' => 'Exibir',
+'rcshowhideliu-hide' => 'Ocultar',
 'rcshowhideanons' => '$1 usuários anônimos',
+'rcshowhideanons-show' => 'Exibir',
+'rcshowhideanons-hide' => 'Ocultar',
 'rcshowhidepatr' => '$1 edições patrulhadas',
+'rcshowhidepatr-show' => 'Exibir',
+'rcshowhidepatr-hide' => 'Ocultar',
 'rcshowhidemine' => '$1 minhas edições',
+'rcshowhidemine-show' => 'Exibir',
+'rcshowhidemine-hide' => 'Ocultar',
 'rclinks' => 'Exibir as $1 alterações recentes feitas nos últimos $2 dias<br />$3',
 'diff' => 'dif',
 'hist' => 'his',
@@ -1869,6 +1902,7 @@ Se você ainda quer enviar seu arquivo, volte e use um novo nome.
 'file-exists-duplicate' => 'Este arquivo é uma duplicata do seguinte {{PLURAL:$1|arquivo|arquivos}}:',
 'file-deleted-duplicate' => 'Um arquivo idêntico a este ([[:$1]]) foi eliminado anteriormente.
 Verifique o histórico de eliminação de tal arquivo antes de tentar re-enviar.',
+'file-deleted-duplicate-notitle' => 'Um arquivo idêntico a este foi anteriormente excluído, e o título foi suprimido. Você deve comunicar com alguém capaz de visualizar dados suprimidos, para verificar a situação antes de enviá-lo novamente.',
 'uploadwarning' => 'Aviso de envio',
 'uploadwarning-text' => 'Modifique a descrição do arquivo abaixo e tente novamente.',
 'savefile' => 'Salvar arquivo',
@@ -1881,6 +1915,8 @@ Verifique o histórico de eliminação de tal arquivo antes de tentar re-enviar.
 'php-uploaddisabledtext' => 'O envio de arquivos via PHP está desativado.
 Verifique a configuração file_uploads.',
 'uploadscripted' => 'Este arquivo contém HTML ou código que pode ser erroneamente interpretado por um navegador web.',
+'uploadscriptednamespace' => 'Este aruivo SVG contém um espaço nominal probido "$1"',
+'uploadinvalidxml' => 'O XML no arquivo enviado não pôde ser analisado.',
 'uploadvirus' => 'O arquivo contém vírus!
 Detalhes: $1',
 'uploadjava' => 'Este é um arquivo ZIP que contém um arquivo .class de Java.
@@ -2251,10 +2287,20 @@ Entradas <del>riscadas</del> foram resolvidas.',
 'deadendpagestext' => 'As seguintes páginas não contêm links para outras páginas no wiki {{SITENAME}}.',
 'protectedpages' => 'Páginas protegidas',
 'protectedpages-indef' => 'Proteções infinitas apenas',
+'protectedpages-summary' => 'Esta página lista as páginas existentes que estão protegidas no momento. Para uma lista de títulos que estão protegidos desde a criação, veja [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Apenas proteções progressivas',
 'protectedpages-noredirect' => 'Ocultar redirecionamentos',
 'protectedpagesempty' => 'Neste momento, nenhuma das páginas está protegida com estes parâmetros.',
+'protectedpages-timestamp' => 'Data e hora',
+'protectedpages-page' => 'Página',
+'protectedpages-expiry' => 'Expira',
+'protectedpages-performer' => 'Protegendo usuário',
+'protectedpages-params' => 'Parâmetros de proteção.',
+'protectedpages-reason' => 'Motivo',
+'protectedpages-unknown-timestamp' => 'Desconhecido',
+'protectedpages-unknown-performer' => 'Usuário desconhecido',
 'protectedtitles' => 'Títulos protegidos',
+'protectedtitles-summary' => 'Está página lista os títulos já protegidos de criação. Para ver a lista de páginas existentes que estão protegidas, consulte [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Neste momento, nenhum dos títulos está protegido com estes parâmetros.',
 'listusers' => 'Lista de usuários',
 'listusers-editsonly' => 'Mostrar apenas usuários com edições',
@@ -2440,6 +2486,7 @@ Futuras modificações em tal página e páginas de discussão relacionadas ser
 'watchmethod-list' => 'verificando páginas vigiadas para edições recentes',
 'watchlistcontains' => 'Sua lista de páginas vigiadas contém $1 {{PLURAL:$1|página|páginas}}.',
 'iteminvalidname' => "Problema com item '$1', nome inválido...",
+'wlnote2' => 'A seguir estão as mudanças nas últimas {{PLURAL:$1|hora|<strong>$1</strong> houras}}, a partir de $2, $3.',
 'wlshowlast' => 'Ver últimas $1 horas $2 dias $3',
 'watchlist-options' => 'Opções da lista de páginas vigiadas',
 
@@ -2529,7 +2576,7 @@ A eliminação de tais páginas foi restrita, a fim de se evitarem problemas aci
 'delete-warning-toobig' => 'Esta página possui um longo histórico de edições, com mais de $1 {{PLURAL:$1|edição|edições}}.
 Eliminá-la poderá causar problemas na base de dados de {{SITENAME}};
 prossiga com cuidado.',
-'deleting-backlinks-warning' => "'''Cuidado:''' Outras páginas redirecionam para a página que você está prestes a deletar.",
+'deleting-backlinks-warning' => "'''Cuidado:'''[[Special:WhatLinksHere/{{FULLPAGENAME}}|Outras páginas]] se ligam ou redirecionam para a página que você está prestes a deletar.",
 
 # Rollback
 'rollback' => 'Reverter edições',
@@ -2702,8 +2749,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Este endereço IP encontra-se bloqueado.
 Segue, para referência, a entrada mais recente no registro de bloqueios:',
 'sp-contributions-search' => 'Navegar pelas contribuições',
+'sp-contributions-suppresslog' => 'Contribuições de usuário eliminadas',
 'sp-contributions-username' => 'Endereço de IP ou usuário:',
 'sp-contributions-toponly' => 'Mostrar somente as edições que sejam a última alteração',
+'sp-contributions-newonly' => 'Mostrar somente as edições que criaram uma nova página.',
 'sp-contributions-submit' => 'Pesquisar',
 
 # What links here
@@ -2804,7 +2853,8 @@ Consulte a [[Special:BlockList|lista de bloqueios]].',
 'change-blocklink' => 'alterar bloqueio',
 'contribslink' => 'contribs',
 'emaillink' => 'enviar um e-mail',
-'autoblocker' => 'Você foi automaticamente bloqueado, pois partilha um endereço de IP com "[[User:$1|$1]]". O motivo apresentado foi: "$2".',
+'autoblocker' => 'Você foi automaticamente bloqueado, pois o seu Endereço IP foi recentemente usado por "[[User:$1|$1]]". 
+O motivo apresentado para o bloqueio de $1 é: "$2".',
 'blocklogpage' => 'Registro de bloqueio',
 'blocklog-showlog' => 'Este usuário já foi bloqueado anteriormente.
 O registro de bloqueio é fornecido abaixo, para referência:',
@@ -2826,7 +2876,7 @@ Consulte a [[Special:BlockList|lista de bloqueios]] para obter a lista de bloque
 'range_block_disabled' => 'A funcionalidade de bloquear gamas de IPs encontra-se desativada.',
 'ipb_expiry_invalid' => 'Tempo de expiração inválido.',
 'ipb_expiry_temp' => 'Bloqueios com nome de usuário ocultado devem ser permanentes.',
-'ipb_hide_invalid' => 'Não foi possível suprimir esta conta; ela poderá ter demasiadas edições.',
+'ipb_hide_invalid' => 'Não foi possível suprimir esta conta; ela tem mais de {{PLURAL:$1|uma}}edições.',
 'ipb_already_blocked' => '"$1" já se encontra bloqueado',
 'ipb-needreblock' => '$1 já se encontra bloqueado. Deseja alterar as configurações?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Outro bloqueio|Outros bloqueios}}',
@@ -2992,6 +3042,7 @@ Acesse [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [/
 'allmessages-prefix' => 'Filtrar por prefixo:',
 'allmessages-language' => 'Língua:',
 'allmessages-filter-submit' => 'Ir',
+'allmessages-filter-translate' => 'Traduzir',
 
 # Thumbnails
 'thumbnail-more' => 'Ampliar',
@@ -3007,6 +3058,7 @@ Acesse [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [/
 'thumbnail_image-type' => 'Tipo de imagem não suportado',
 'thumbnail_gd-library' => 'Configuração da biblioteca GD incompleta: função $1 não encontrada',
 'thumbnail_image-missing' => 'Arquivo aparentemente inexistente: $1',
+'thumbnail_image-failure-limit' => 'Houveram muitas tentativas falhas recentemente ($1 ou mais) de criação desta miniatura. Por favor, tente novamente mais tarde.',
 
 # Special:Import
 'import' => 'Importar páginas',
@@ -3042,7 +3094,7 @@ Salve o arquivo no seu computador e importe-o aqui.',
 'importuploaderrortemp' => 'O envio do arquivo a ser importado falhou. Não há um diretório temporário.',
 'import-parse-failure' => 'Falha ao importar dados XML',
 'import-noarticle' => 'Sem páginas para importar!',
-'import-nonewrevisions' => 'Todas as edições já haviam sido importadas.',
+'import-nonewrevisions' => 'Nenhuma revisão foi importada (já estavam todas presentes ou foram ignoradas devido a erros).',
 'xml-error-string' => '$1 na linha $2, coluna $3 (byte $4): $5',
 'import-upload' => 'Enviar dados em XML',
 'import-token-mismatch' => 'Perda dos dados da sessão. Por favor tente novamente.',
@@ -3053,6 +3105,7 @@ Salve o arquivo no seu computador e importe-o aqui.',
 'import-error-special' => 'A página "$1" não pôde ser importada porque ela pertence a um espaço nominal especial que não suporta páginas.',
 'import-error-invalid' => 'A página "$1" não pôde ser importada por seu nome ser inválido.',
 'import-error-unserialize' => 'Revisão  $2  da página " $1 " não pôde ser desserializada. A revisão foi relatada para usar o modelo de conteúdo  $3  serializado como  $4',
+'import-error-bad-location' => 'A revisão $2, que usa o modelo de conteúdo $3, não pode ser gravada em "$1" nesta wiki, pois o modelo não é suportado nessa página.',
 'import-options-wrong' => '{{PLURAL:$2|Opção com erro|Opções com erros}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'A página raiz dada é um título inválido.',
 'import-rootpage-nosubpage' => 'O espaço nominal $1 da página principal não permite subpáginas.',
@@ -3932,7 +3985,7 @@ Você também pode [[Special:EditWatchlist|editar a lista da maneira convenciona
 'version-antispam' => 'Prevenção contra spam',
 'version-skins' => 'Temas',
 'version-other' => 'Diversos',
-'version-mediahandlers' => 'Executores de média',
+'version-mediahandlers' => 'Executores de mídia',
 'version-hooks' => 'Hooks',
 'version-parser-extensiontags' => 'Etiquetas de extensões de tipo "parser"',
 'version-parser-function-hooks' => 'Funções "hooks" de "parser"',
@@ -4126,7 +4179,7 @@ Caso contrário, você poderá usar o formulário simplificado a seguir. Seu com
 'feedback-error1' => 'Erro: O resultado da API não foi reconhecido',
 'feedback-error2' => 'Erro: A edição falhou',
 'feedback-error3' => 'Erro: A API não responde',
-'feedback-thanks' => 'Obrigado! O seu comentário foi adicionado à página "[ $2  $1 ]".',
+'feedback-thanks' => 'Obrigado! O seu comentário foi adicionado à página "[$2 $1]".',
 'feedback-close' => 'Feito',
 'feedback-bugcheck' => 'Perfeito! Apenas verifique se não é um dos [$1 bugs já conhecidos].',
 'feedback-bugnew' => 'Eu verifiquei. Relatar um bug novo',
@@ -4205,7 +4258,7 @@ Caso contrário, você poderá usar o formulário simplificado a seguir. Seu com
 'limitreport-templateargumentsize' => 'Argumento do tamanho da predefinição',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
 'limitreport-expansiondepth' => 'Máxima profundidade de expansão',
-'limitreport-expensivefunctioncount' => 'Número de funções do analisador custosas',
+'limitreport-expensivefunctioncount' => 'Contagem de funções do analisador custosas',
 
 # Special:ExpandTemplates
 'expandtemplates' => 'Expandir predefinições',
@@ -4226,6 +4279,4 @@ Na verdade, expande tudo que está entre chaves duplas.',
 'expand_templates_generate_rawhtml' => 'Mostrar HTML puro',
 'expand_templates_preview' => 'Pré-visualização',
 
-# Unknown messages
-'uploadinvalidxml' => 'O XML no arquivo enviado não pôde ser analisado.',
 );
index 901cc2c..b97ce8c 100644 (file)
@@ -60,6 +60,7 @@
  * @author Iwan Novirion
  * @author Jon Harald Søby
  * @author Joseph
+ * @author Kaganer
  * @author Karduelis
  * @author Kazu89
  * @author Kghbln
@@ -90,6 +91,7 @@
  * @author Mihai
  * @author Minh Nguyen
  * @author Moha
+ * @author MongolWiki
  * @author Mormegil
  * @author Mpradeep
  * @author Murma174
  * @author Od1n
  * @author Onecountry
  * @author Opraco
+ * @author Orlodrim
  * @author OsamaK
  * @author PhiLiP
  * @author Piangpha
  * @author Umherirrender
  * @author Urhixidur
  * @author Usarker
+ * @author V.narsikar
  * @author Verdy p
  * @author Vinhtantran
  * @author Vivaelcelta
+ * @author Vriullop
  * @author Waldir
  * @author Whym
  * @author Yekrats
@@ -218,9 +223,6 @@ Live preview is an experimental feature (unavailable by default) to use edit pre
 'tog-ccmeonemails' => 'Option in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}. {{Gender}}',
 'tog-diffonly' => 'Toggle option used in [[Special:Preferences]]. {{Gender}}',
 'tog-showhiddencats' => 'Toggle option used in [[Special:Preferences]]. {{Gender}}',
-'tog-noconvertlink' => "{{optional}}
-
-''(the message is considered optional because it is only used in wikis with language variants)''",
 'tog-norollbackdiff' => "Option in [[Special:Preferences]], 'Misc' tab. Only shown for users with the rollback right. By default a diff is shown below the return screen of a rollback. Checking this preference toggle will suppress that. {{Gender}}
 {{Identical|Rollback}}",
 'tog-useeditwarning' => 'Used as label for the checkbox in [[Special:Preferences#mw-prefsection-editing|Special:Preferences]].',
@@ -392,8 +394,10 @@ See also:
 Followed by a colon and a list of categories.
 
 Parameters:
-* $1 - number of hidden categories',
-'hidden-category-category' => 'Name of the [[mw:Help:Tracking categories|tracking category]] where hidden categories will be listed.',
+* $1 - number of hidden categories
+{{Identical|Hidden category}}',
+'hidden-category-category' => 'Name of the [[mw:Help:Tracking categories|tracking category]] where hidden categories will be listed.
+{{Identical|Hidden category}}',
 'category-subcat-count' => 'This message is displayed at the top of a category page showing the number of pages in the category.
 
 Parameters:
@@ -414,7 +418,7 @@ Parameters:
 
 Parameters:
 * $1 – number of files shown
-* $2 - total number of files in category',
+* $2  total number of files in category',
 'category-file-count-limited' => 'This message is displayed at the top of a category page showing the number of pages in the category when not all pages in a category are counted.
 
 Parameters:
@@ -507,7 +511,6 @@ This page is only linked in CologneBlue (an old skin), not in Monobook or Vector
 {{Identical|Undelete}}',
 'vector-action-unprotect' => 'Tab at top of page, in vector skin.
 {{Identical|Change protection}}',
-'vector-simplesearch-preference' => 'Preference for enhanced search suggestion in the Vector skin.',
 'vector-view-create' => 'Tab label in the Vector skin. See for example {{canonicalurl:Foo|useskin=vector}}
 {{Identical|Create}}',
 'vector-view-edit' => 'Tab label in the Vector skin. See for example {{canonicalurl:Main_Page|useskin=vector}}
@@ -656,8 +659,8 @@ See also:
 {{Identical|View}}',
 'toolbox' => 'The title of the toolbox below the search menu.
 {{Identical|Tool}}',
-'userpage' => '',
-'projectpage' => 'Used as link text in Talk page of project page.',
+'userpage' => 'Used in user talk pages as the text of the link to the user page, with the Cologne Blue skin.',
+'projectpage' => 'Used as link text in Talk page of project page with the Cologne Blue skin.',
 'imagepage' => 'Used as link text in Talk page of file page.',
 'mediawikipage' => 'Used as link text in Talk page of MediaWiki message page.',
 'templatepage' => 'Used as link text in Talk page of template page.',
@@ -1292,13 +1295,8 @@ See example: [[Special:UserLogin]]',
 'yourdomainname' => 'Used as label for listbox.',
 'password-change-forbidden' => 'Error message shown when an external authentication source does not allow the password to be changed.',
 'externaldberror' => 'This message is thrown when a valid attempt to change the wiki password for a user fails because of a database error or an error from an external system.',
-'login' => "Shown as the caption of the button at [[Special:UserLogin]], and also to anonymous users in the upper right corner of the page when they can't create an account (otherwise the message {{msg-mw|nav-login-createaccount}} is shown there). Also the title of the new login special page, which does not combine Log in & Create account.
-
-See also:
-* {{msg-mw|Login}}
-* {{msg-mw|Accesskey-pt-anonlogin}}
-* {{msg-mw|Tooltip-pt-anonlogin}}
-{{Identical|Log in}}",
+'login' => '{{Doc-special|UserLogin|unlisted=1}}
+{{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-mw|login}} is shown.
 {{Identical|Log in / create account}}",
 'loginprompt' => 'A small notice in the log in form.',
@@ -1315,8 +1313,7 @@ See also:
 * {{msg-mw|Accesskey-pt-logout}}
 * {{msg-mw|Tooltip-pt-logout}}
 {{Identical|Log out}}',
-'userlogout' => '{{Doc-actionlink}}
-{{doc-special|UserLogout|unlisted=1}}
+'userlogout' => '{{doc-special|UserLogout|unlisted=1}}
 {{Identical|Log out}}',
 'notloggedin' => 'This message is displayed in the standard skin when not logged in. The message is placed above the login link in the top right corner of pages.
 
@@ -1330,10 +1327,8 @@ See example: [[Special:UserLogin]]',
 * $1 - a link to the account creation form, and the text of it is {{msg-mw|Nologinlink}}
 {{Identical|Do not have an account}}',
 'nologinlink' => 'Since 1.22 no longer used in core, but may be used by some extensions. DEPRECATED.
-{{Identical|Create an account}}',
-'createaccount' => 'Used on the top of the page for logged out users, where it appears next to {{msg-mw|login}}, so consider making them similar.
-
-{{doc-special|CreateAccount}}
+{{Identical|Create account}}',
+'createaccount' => '{{doc-special|CreateAccount|unlisted=1}}
 {{Identical|Create account}}',
 'gotaccount' => 'Since 1.22 no longer used in core, but may be used by some extensions. DEPRECATED. Parameter:
 * $1 - a link to the log in form, and the text of it is {{msg-mw|Gotaccountlink}}',
@@ -1348,12 +1343,7 @@ See example: [[Special:UserLogin]]
 
 userlogin-resetpassword-link may have to be shorter than the old {{msg-mw|userlogin-resetlink}}.
 {{Identical|Forgot your password}}',
-'helplogin-url' => '{{doc-important|Do not translate the namespace name <code>Help</code>.}}
-Used as name of the page that provides information about logging into the wiki.
-
-Used as a link target in the message {{msg-mw|Userlogin-helplink}}.',
-'userlogin-helplink' => '{{doc-important|Do not change <code><nowiki>{{MediaWiki:helplogin-url}}</nowiki></code>.}}
-Wikitext linking to login help.
+'userlogin-helplink2' => 'Label for a link to login help.
 
 See example: [[Special:UserLogin]]
 
@@ -1585,6 +1575,14 @@ This message is used in html.
 'createacct-another-realname-tip' => "{{doc-singularthey}}
 Used on the account creation form when creating another user's account. Similar to {{msg-mw|prefs-help-realname}}.
 {{Identical|Real name attribution}}",
+'pt-login' => "Shown 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).
+{{Identical|Log in}}",
+'pt-login-button' => 'Shown as the caption of the button at [[Special:UserLogin]].
+{{Identical|Log in}}',
+'pt-createaccount' => 'Used on the top of the page for logged out users, where it appears next to {{msg-mw|login}}, so consider making them similar.
+{{Identical|Create account}}',
+'pt-userlogout' => '{{Doc-actionlink}}
+{{Identical|Log out}}',
 
 # Email sending
 'php-mail-error-unknown' => 'Used as error message when <code>mail()</code> returned empty error message.',
@@ -1638,8 +1636,18 @@ Parameters:
 'resetpass-submit-cancel' => 'Used on [[Special:ResetPass]].
 {{Identical|Cancel}}',
 'resetpass-wrong-oldpass' => 'Error message shown on [[Special:ChangePassword]] when the old password is not valid.',
+'resetpass-recycled' => 'Error message shown on [[Special:ChangePassword]] when a user attempts to reset their password to their existing password.',
+'resetpass-temp-emailed' => 'Message shown on [[Special:ChangePassword]] when a user logs in with a temporary password, and must set a new password.',
 'resetpass-temp-password' => 'The label of the input box for the temporary password (received by email) on the form displayed after logging in with a temporary password.',
 'resetpass-abort-generic' => 'Generic error message shown on [[Special:ChangePassword]] when an extension aborts a password change from a hook.',
+'resetpass-expired' => "Generic error message shown on [[Special:ChangePassword]] when a user's password is expired",
+'resetpass-expired-soft' => 'Generic warning message shown on [[Special:ChangePassword]] when a user needs to reset their password, but they are not prevented from logging in at this time',
+'resetpass-validity-soft' => 'Warning message shown on [[Special:ChangePassword]] when a user needs to reset their password, because their password is not valid.
+
+Refers to {{msg-mw|Resetpass-submit-cancel}}.
+
+Parameters:
+* $1 - error message',
 
 # Special:PasswordReset
 'passwordreset' => 'Title of [[Special:PasswordReset]].
@@ -2298,11 +2306,21 @@ See also:
 {{Identical|Undo}}',
 'undo-failure' => 'Message appears if an attempt to revert an edit by clicking the "undo" link on the page history fails.
 
+See also:
+* {{msg-mw|Undo-norev}}
+* {{msg-mw|Undo-nochange}}
 {{Identical|Undo}}',
 'undo-norev' => 'Message appears if an attempt to revert an edit by clicking the "undo" link on the page history fails.
 
+See also:
+* {{msg-mw|Undo-failure}}
+* {{msg-mw|Undo-nochange}}
 {{Identical|Undo}}',
-'undo-nochange' => 'Message appears if an attempt to revert an edit by clicking the "undo" link results in an edit making no change to the current version of the page.',
+'undo-nochange' => 'Message appears if an attempt to revert an edit by clicking the "undo" link results in an edit making no change to the current version of the page.
+
+See also:
+* {{msg-mw|Undo-failure}}
+* {{msg-mw|Undo-norev}}',
 'undo-summary' => 'Edit summary for an undo action. Parameters:
 * $1 - revision ID
 * $2 - username
@@ -2477,8 +2495,32 @@ Parameters:
 * $1 - number of log events
 See also:
 * {{msg-mw|Revdelete-selected}}',
-'revdelete-text' => '{{RevisionDelete}}
-This is the introduction explaining the feature.',
+'revdelete-text-text' => '{{RevisionDelete}}
+This is the introduction explaining the feature.
+
+See also:
+* {{msg-mw|Revdelete-text-file}}
+* {{msg-mw|Logdelete-text}}
+* {{msg-mw|Revdelete-text-others}}',
+'revdelete-text-file' => '{{RevisionDelete}}
+This is the introduction explaining the feature.
+
+See also:
+* {{msg-mw|Revdelete-text-text}}
+* {{msg-mw|Logdelete-text}}
+* {{msg-mw|Revdelete-text-others}}',
+'logdelete-text' => '{{RevisionDelete}}
+This is the introduction explaining the feature.
+
+See also:
+* {{msg-mw|Revdelete-text-text}}
+* {{msg-mw|Revdelete-text-file}}
+* {{msg-mw|Revdelete-text-others}}',
+'revdelete-text-others' => '{{RevisionDelete}}
+This message is shown after one of:
+* {{msg-mw|Revdelete-text-text}}
+* {{msg-mw|Revdelete-text-file}}
+* {{msg-mw|Logdelete-text}}',
 'revdelete-confirm' => 'This message is a part of the [[mw:RevisionDelete|RevisionDelete]] feature.
 
 Refers to {{msg-mw|Policy-url}}.
@@ -2634,17 +2676,16 @@ See also:
 * {{msg-mw|Revdelete-reason-dropdown|item list for dropdown|notext=1}}
 * {{msg-mw|Revdelete-reasonotherlist|item in dropdown}}
 * {{msg-mw|Revdelete-submit|submit button}}',
-'revdelete-reasonotherlist' => '{{Identical|Other reason}}
-{{RevisionDelete}}
+'revdelete-reasonotherlist' => '{{RevisionDelete}}
 Used as an item in dropdown.
 [[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
-
 See also:
 * {{msg-mw|Revdelete-legend|legend for the form}}
 * {{msg-mw|Revdelete-log|label for dropdown}}
 * {{msg-mw|Revdelete-reason-dropdown|item list for dropdown|notext=1}}
 * {{msg-mw|Revdelete-otherreason|label for input box}}
-* {{msg-mw|Revdelete-submit|submit button}}',
+* {{msg-mw|Revdelete-submit|submit button}}
+{{Identical|Other reason}}',
 'revdelete-edit-reasonlist' => '{{Identical|Edit delete reasons}}
 {{RevisionDelete}}
 [[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]',
@@ -2980,6 +3021,12 @@ Parameters:
 * $2 - the number of the first item listed
 See also:
 * {{msg-mw|Showingresultsnum}}',
+'showingresultsinrange' => 'Used in pagination of [[Special:MostLinkedCategories]]. Parameters:
+* $1 - the total number of results in the batch shown
+* $2 - the number of the first item listed
+* $3 - the number of last item in the batch shown
+
+See also {{msg-mw|Showingresults}}',
 'showingresultsnum' => 'Parameters:
 * $1 - (Unused) the total number of results in the batch shown
 * $2 - the first number in the batch of results
@@ -2992,10 +3039,6 @@ See also:
 * $3 - total number of results
 * $4 - the search term
 * $5 - number of results',
-'showingresultsinrange' => 'Used in pagination of [[Special:MostLinkedCategories]]. Parameters:
-* $1 - the total number of results in the batch shown
-* $2 - the number of the first item listed
-* $3 - the number of last item in the batch shown',
 'search-nonefound' => 'Message shown when a search returned no results (when using the default MediaWiki search engine).',
 'powersearch-legend' => 'Advanced search
 
@@ -3667,35 +3710,107 @@ Preceded by legend example {{msg-mw|Recentchanges-legend-plusminus}}.',
 A plus/minus sign with a number for the legend.',
 'rcnotefrom' => 'This message is displayed at [[Special:RecentChanges]] when viewing recentchanges from some specific time.
 
-The corresponding message is {{msg-mw|Rclistfrom}} (without split of date and time, [[bugzilla:19104|Bug 19104]]).
+The corresponding message is {{msg-mw|Rclistfrom}} (split into date and time).
 
 Parameters:
 * $1 - the maximum number of changes that are displayed
 * $2 - a date and time
 * $3 - (Optional) a date
 * $4 - (Optional) a time',
-'rclistfrom' => 'Used on [[Special:RecentChanges]].
-
-Parameters:
-* $1 - a link to the revision of a specific date and time. The date and the time are the link description (without split of date and time, [[bugzilla:19104|Bug 19104]]).
+'rclistfrom' => 'Used on [[Special:RecentChanges]]. Parameters:
+* $1 - (Optional) date and time. The date and the time adds to the rclistfrom description.
+* $2 - time. The time adds to the rclistfrom link description (with split of date and time).
+* $3 - date. The date adds to the rclistfrom link description (with split of date and time).
 
 The corresponding message is {{msg-mw|Rcnotefrom}}.',
 'rcshowhideminor' => 'Option text in [[Special:RecentChanges]]. Parameters:
-* $1 - the "show/hide" command, with the text taken from either {{msg-mw|Show}} or {{msg-mw|Hide}}',
+* $1 - the "show/hide" command, with the text taken from either {{msg-mw|rcshowhideminor-show}} or {{msg-mw|rcshowhideminor-hide}}',
+'rcshowhideminor-show' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideminor}}.
+
+See also:
+* {{msg-mw|rcshowhideminor-hide}}
+{{Identical|Show}}',
+'rcshowhideminor-hide' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideminor}}.
+
+See also:
+* {{msg-mw|rcshowhideminor-show}}
+{{Identical|Hide}}',
 'rcshowhidebots' => 'Option text in [[Special:RecentChanges]]. Parameters:
-* $1 - the "show/hide" command, with the text taken from either {{msg-mw|Show}} or {{msg-mw|Hide}}
+* $1 - the "show/hide" command, with the text taken from either {{msg-mw|rcshowhidebots-show}} or {{msg-mw|rcshowhidebots-hide}}
 {{Identical|$1 bots}}',
+'rcshowhidebots-show' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidebots}}.
+
+See also:
+* {{msg-mw|rcshowhidebots-show}}
+{{Identical|Show}}',
+'rcshowhidebots-hide' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidebots}}.
+
+See also:
+* {{msg-mw|rcshowhidebots-hide}}
+{{Identical|Hide}}',
 'rcshowhideliu' => 'Option text in [[Special:RecentChanges]]. Parameters:
 * $1 - any one of the following messages:
-** {{msg-mw|Show}}
-** {{msg-mw|Hide}}',
+** {{msg-mw|rcshowhideliu-show}}
+** {{msg-mw|rcshowhideliu-hide}}',
+'rcshowhideliu-show' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideliu}}.
+
+See also:
+* {{msg-mw|rcshowhideliu-hide}}
+{{Identical|Show}}',
+'rcshowhideliu-hide' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideliu}}.
+
+See also:
+* {{msg-mw|rcshowhideliu-show}}
+{{Identical|Hide}}',
 'rcshowhideanons' => 'Option text in [[Special:RecentChanges]]. Parameters:
-* $1 - the "show/hide" command, with the text taken from either {{msg-mw|Show}} or {{msg-mw|Hide}}
+* $1 - the "show/hide" command, with the text taken from either {{msg-mw|rcshowhideanons-show}} or {{msg-mw|showhideanons-hide}}
 {{Identical|Anonymous user}}',
+'rcshowhideanons-show' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideanons}}.
+
+See also:
+* {{msg-mw|rcshowhideanons-hide}}
+{{Identical|Hide}}',
+'rcshowhideanons-hide' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideanons}}.
+
+See also:
+* {{msg-mw|rcshowhideanons-show}}
+{{Identical|hide}}',
 'rcshowhidepatr' => 'Option text in [[Special:RecentChanges]]. Parameters:
-* $1 - the "show/hide" command, with the text taken from either {{msg-mw|Show}} or {{msg-mw|Hide}}',
+* $1 - the "show/hide" command, with the text taken from either {{msg-mw|rcshowhidepatr-show}} or {{msg-mw|rcshowhidepatr-hide}}',
+'rcshowhidepatr-show' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidepatr}}.
+
+See also:
+* {{msg-mw|rcshowhidepatr-hide}}
+{{Identical|Show}}',
+'rcshowhidepatr-hide' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidepatr}}.
+
+See also:
+* {{msg-mw|rcshowhidepatr-show}}
+{{Identical|Hide}}',
 'rcshowhidemine' => 'Option text in [[Special:RecentChanges]]. Parameters:
-* $1 - the "show/hide" command, with the text taken from either {{msg-mw|Show}} or {{msg-mw|Hide}}',
+* $1 - the "show/hide" command, with the text taken from either {{msg-mw|rcshowhidemine-show}} or {{msg-mw|rcshowhidemine-hide}}',
+'rcshowhidemine-show' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidemine}}.
+
+See also:
+* {{msg-mw|rcshowhidemine-hide}}
+{{Identical|show}}',
+'rcshowhidemine-hide' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidemine}}.
+
+See also:
+* {{msg-mw|rcshowhidemine-show}}
+{{Identical|hide}}',
 'rclinks' => "Used on [[Special:RecentChanges]].
 * \$1 - a list of different choices with number of pages to be shown.<br />&nbsp;Example: \"''50{{int:pipe-separator}}100{{int:pipe-separator}}250{{int:pipe-separator}}500\".
 * \$2 - a list of clickable links with a number of days for which recent changes are to be displayed.<br />&nbsp;Example: \"''1{{int:pipe-separator}}3{{int:pipe-separator}}7{{int:pipe-separator}}14{{int:pipe-separator}}30''\".
@@ -4127,6 +4242,15 @@ See also:
 * {{msg-mw|zip-wrong-format}}
 * {{msg-mw|uploadjava}}
 * {{msg-mw|uploadvirus}}',
+'uploadscriptednamespace' => 'Used as error message when uploading a file. This error is specific to SVG files, when they include a namespace that has not been whitelisted.
+
+Parameters:
+* $1 - the invalid namespace name
+See also:
+* {{msg-mw|zip-wrong-format}}
+* {{msg-mw|uploadjava}}
+* {{msg-mw|uploadvirus}}',
+'uploadinvalidxml' => 'Error message displayed when the uploaded file contains XML that cannot be properly parsed and checked.',
 'uploadvirus' => 'Error message displayed when uploaded file contains a virus.
 
 Parameters:
@@ -4667,7 +4791,7 @@ Parameters:
 'shared-repo-name-wikimediacommons' => '{{optional}}
 {{Identical|Wikimedia Commons}}',
 'filepage.css' => '{{Optional}}',
-'upload-disallowed-here' => 'This message appears on an image page in place of the normal reupload link if they cannot upload - e.g. if the image page is upload protected and they do not have the right priviledge.',
+'upload-disallowed-here' => 'This message appears on an image page in place of the normal reupload link if they cannot upload - e.g. if the image page is upload protected and they do not have the right privilege.',
 
 # File reversion
 'filerevert' => 'Used as page title. Parameters:
@@ -5006,11 +5130,38 @@ See the following search results:
 'deadendpagestext' => 'Introductory text for [[Special:DeadendPages]]',
 'protectedpages' => '{{doc-special|ProtectedPages}}',
 'protectedpages-indef' => 'Option in [[Special:ProtectedPages]]',
+'protectedpages-summary' => 'Summary of [[Special:ProtectedPages]].
+
+See also:
+* {{msg-mw|Protectedtitles-summary}}',
 'protectedpages-cascade' => 'Option in [[Special:ProtectedPages]]',
 'protectedpages-noredirect' => 'Option in [[Special:ProtectedPages]].
 {{Identical|Hide redirect}}',
 'protectedpagesempty' => 'Used in [[Special:ProtectedPages]], when there are no protected pages with the specified parameters.',
+'protectedpages-timestamp' => 'This is a column header for dates and times in the table on the page [[Special:ProtectedPages]].
+{{Identical|Timestamp}}',
+'protectedpages-page' => 'This is a column header in the table on the page [[Special:ProtectedPages]].
+{{Identical|Page}}',
+'protectedpages-expiry' => 'This is a column header in the table on the page [[Special:ProtectedPages]].
+
+This refers to expiry timestamp.
+{{Identical|Expire}}',
+'protectedpages-performer' => 'This is a column header in the table on the page [[Special:ProtectedPages]].',
+'protectedpages-params' => 'This is a column header in the table on the page [[Special:ProtectedPages]].
+
+Protection parameters are:
+* {{msg-mw|Restriction-level-autoconfirmed}}
+* {{msg-mw|Restriction-level-sysop}}',
+'protectedpages-reason' => 'This is a column header in the table on the page [[Special:ProtectedPages]].
+{{Identical|Reason}}',
+'protectedpages-unknown-timestamp' => 'This is shown, when the date and time is unknown for a protection on the page [[Special:ProtectedPages]].
+{{Identical|Unknown}}',
+'protectedpages-unknown-performer' => 'This is shown, when the protecting user is unknown for a protection on the page [[Special:ProtectedPages]].',
 'protectedtitles' => '{{doc-special|ProtectedTitles}}',
+'protectedtitles-summary' => 'Summary of [[Special:ProtectedTitles]].
+
+See also:
+* {{msg-mw|Protectedpages-summary}}',
 'protectedtitlesempty' => 'Used on [[Special:ProtectedTitles]]. This text appears if the list of protected titles is empty. See the [[mw:Project:Protected_titles|help page on MediaWiki]] for more information.',
 'listusers' => '{{doc-special|ListUsers}}',
 'listusers-editsonly' => 'Option in [[Special:ListUsers]].',
@@ -5809,7 +5960,19 @@ Parameters:
 {{Related|Protect-locked}}',
 'protect-cascadeon' => 'Used in Protection form.
 * $1 - number of cascade source pages',
-'protect-default' => '{{Identical|Default}}',
+'protect-default' => 'Describes the protection state of a page that allows all users to do a certain thing, like editing or moving the page. Example:
+
+<div style="border: 2px dotted gray; padding: .25cm">
+=={{int:Pageinfo-header-restrictions/en}}==
+{| class="wikitable"
+|-
+| {{int:Restriction-edit/en}}
+| {{int:Protect-default/en}}
+|-
+| {{int:Restriction-move/en}}
+| {{int:Protect-level-autoconfirmed/en}}
+|}
+</div>',
 'protect-fallback' => 'This message is used as an option in the protection form on wikis were extra protection levels have been configured.
 
 Parameters:
@@ -6225,9 +6388,19 @@ 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-suppresslog' => 'Used as a display name for a link to log entries of suppressed edits made by that user.
+
+Used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].
+
+See also {{msg-mw|sp-contributions-deleted}}, {{msg-mw|sp-deletedcontributions-contribs}}, {{msg-mw|contributions}}, {{msg-mw|deletedcontributions-title}}.',
 'sp-contributions-username' => 'This message appears whenever someone requests [[Special:Contributions]].
 {{Identical|IP address or username}}',
-'sp-contributions-toponly' => '"top revision" means the "latest revision"',
+'sp-contributions-toponly' => 'A checkbox at [[Special:Mycontributions|Special:Contributions]]',
+'sp-contributions-newonly' => 'Used as checkbox label at [[Special:Mycontributions|Special:Contributions]].
+
+"page creation" means the "first revision" of a page.
+
+Preceded by {{msg-mw|Sp-contributions-toponly}}.',
 'sp-contributions-submit' => '{{Identical|Search}}',
 'sp-contributions-explain' => '{{optional}}',
 
@@ -7266,6 +7439,10 @@ See also:
 *$1 is a function name of the GD library',
 'thumbnail_image-missing' => 'This is the parameter 1 of the message {{msg-mw|thumbnail error}}.
 *$1 is the path incl. filename of the missing image',
+'thumbnail_image-failure-limit' => 'Used as <code>$1</code> in {{msg-mw|Thumbnail error}}.
+
+Parameters:
+* $1 - the maximum allowed number of failed attempts',
 
 # Special:Import
 'import' => 'The title of the special page [[Special:Import]];',
@@ -8130,7 +8307,8 @@ This message is followed by the total number of times the page has been edited.'
 'pageinfo-magic-words' => 'The list of magic words on the page. Parameters:
 * $1 is the number of magic words on the page.',
 'pageinfo-hidden-categories' => 'The list of hidden categories on the page. Parameters:
-* $1 is the number of hidden categories on the page.',
+* $1 - the number of hidden categories on the page
+{{Identical|Hidden category}}',
 'pageinfo-templates' => 'The list of templates transcluded within the page. Parameters:
 * $1 is the number of templates transcluded within the current page.
 See also:
@@ -8867,12 +9045,14 @@ See also Wikipedia on [[w:Focal_length#In_photography|focal length]].',
 '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}}.
 {{Related|Exif-gpslatitude}}',
 'exif-gpslatitude' => 'The latitude of the location from where the picture was taken from.
-{{Related|Exif-gpslatitude}}',
+{{Related|Exif-gpslatitude}}
+{{Identical|Latitude}}',
 'exif-gpslongituderef' => 'Same as {{msg-mw|exif-gpslatituderef}} but for longitude.
 
 {{Related|Exif-gpslatitude}}',
 'exif-gpslongitude' => 'The longitude of the location from where the picture was taken from.
-{{Related|Exif-gpslatitude}}',
+{{Related|Exif-gpslatitude}}
+{{Identical|Longitude}}',
 '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}}.',
@@ -9646,7 +9826,7 @@ Quotation marks, for quoting, sometimes titles etc., depending on the language.
 
 See: [[w:Non-English usage of quotation marks|Non-English usage of quotation marks on Wikipedia]].
 
-Parameters: 
+Parameters:
 * $1 - text to be wrapped in quotation marks',
 
 # Multipage image navigation
@@ -10025,7 +10205,9 @@ There are no such extensions here, so look at [[wikipedia:Special:Version]] for
 'version-parser-extensiontags' => 'Part of [[Special:Version]].
 This message is followed by the list of parser extension tags like <code><nowiki><charinsert></nowiki></code>, <code><nowiki><coordinates></nowiki></code>, etc.',
 'version-parser-function-hooks' => 'Shown in [[Special:Version]]',
-'version-hook-name' => 'Shown in [[Special:Version]]',
+'version-hook-name' => 'Shown in [[Special:Version]].
+
+For meaning of hook see [[mw:Special:MyLanguage/Manual:Hooks|mw:Manual:Hooks]] and [[w:Hooking]].',
 'version-hook-subscribedby' => 'Shown in [[Special:Version]]',
 'version-version' => '{{Optional}}
 Used in [[Special:Version]]. Preceded by the MediaWiki extension name.
@@ -10703,7 +10885,4 @@ test
 'expand_templates_generate_rawhtml' => 'Used as checkbox label.',
 'expand_templates_preview' => '{{Identical|Preview}}',
 
-# Unknown messages
-'createaccount-hook-aborted' => 'Placeholder message to return with API errors on account create; passes through the message from a hook {{notranslate}}',
-'uploadinvalidxml' => 'Error message displayed when the uploaded file contains XML that cannot be properly parsed and checked.',
 );
index fb19e55..16f9f65 100644 (file)
@@ -300,7 +300,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Huk ruraqkunaman kachasqay e-chaskikunamanta iskaychasqakunata kachamuway',
 'tog-diffonly' => "Huk kaykunap uranpi kaq p'anqap samiqninta ama rikuchiychu",
 'tog-showhiddencats' => 'Pakasqa katiguriyakunata rikuchiy',
-'tog-noconvertlink' => "T'inki suti t'ikrayman ama niy",
 'tog-norollbackdiff' => 'Ruraqpa hukchasqankunata kutichispa ama wakin kayta willaychu',
 'tog-useeditwarning' => "Yuyampaway p'anqata saqiptiy manaraq rurarqusqay hukchasqakunata waqaychaspay.",
 'tog-prefershttps' => "Yaykurqaspaqa hayk'appas takyasqa t'inkiwan llamk'ay",
@@ -427,7 +426,6 @@ $messages = array(
 'vector-action-protect' => 'Amachay',
 'vector-action-undelete' => 'Qullusqata paqarichiy',
 'vector-action-unprotect' => 'Amachayta wakinchay',
-'vector-simplesearch-preference' => 'Maskanapaq sikllallachasqa sinruta atichiy (Vector qarallapi)',
 'vector-view-create' => 'Kamariy',
 'vector-view-edit' => "Llamk'apuy",
 'vector-view-history' => 'Wiñay kawsayta qhaway',
@@ -708,8 +706,6 @@ Ama qunqaychu [[Special:Preferences|{{SITENAME}} allinkachinaykikunata]] hukchay
 'gotaccountlink' => 'Rakiqunaykita willaway',
 'userlogin-resetlink' => 'Yaykuna willayniykikunatari qunqarqankichu?',
 'userlogin-resetpassword-link' => 'Yaykuna rimaykita qunqarqankichu?',
-'helplogin-url' => 'Help:Yaykuy',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Yaykunapaq yanapa]]',
 'userlogin-createanother' => 'Huk rakiqunata kamariy',
 'createacct-join' => 'Kay qatiqpi willaykita yaykuchiy.',
 'createacct-emailrequired' => 'E-chaski imamayta',
@@ -789,6 +785,9 @@ Kay willay pantasqa kaptinqa, qhawarparillay.',
 'loginlanguagelabel' => 'Rimay: $1',
 'suspicious-userlogout' => "Lluqsiy mañakuyniykiqa mananchasqam karqan, waqllisqa wamp'unamanta icha pakaq proksimanta kachasqa kaspanchá.",
 'createacct-another-realname-tip' => "* Chiqap sutiqa munanallapaqmi. Quwaptiykiqa, llamk'apusqakunam paywan sananchasqa kanqa.",
+'pt-login' => 'Yaykuy',
+'pt-createaccount' => 'Musuq rakiqunata kichariy',
+'pt-userlogout' => 'Lluqsiy',
 
 # Email sending
 'php-mail-error-unknown' => 'Mana riqsisqa pantasqa PHP mail() rurananpi',
@@ -797,7 +796,7 @@ Kay willay pantasqa kaptinqa, qhawarparillay.',
 
 # Change password dialog
 'changepassword' => 'Yaykuna rimata hukchay',
-'resetpass_announce' => "E-chaskiwan kachasqa mit'alla yaykuna rimawanmi yaykurqunki. Ama hina kaspa, musuq yaykuna rimaykita qillqamuy:",
+'resetpass_announce' => "E-chaskiwan kachasqa mit'alla yaykuna rimawanmi yaykurqunki. Yaykunaykita tukunaykipaqqa, musuq yaykuna rimaykita churay:",
 'resetpass_text' => '<!-- Añada texto aquí -->',
 'resetpass_header' => 'Yaykuna rimata hukchay',
 'oldpassword' => "Mawk'a yaykuna rima:",
@@ -1177,8 +1176,6 @@ Kay wakin kayta qhawayta atinkim; astawanchá rikunkiman [{{fullurl:{{#Special:L
 'revdelete-show-file-submit' => 'Arí',
 'revdelete-selected' => "'''{{PLURAL:$2|Akllasqa llamk'apusqa|Akllasqa llamk'apusqakuna}} [[:$1]]-manta:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Akllasqa tukusqa|Akllasqa tukusqakuna}} hallch'api:'''",
-'revdelete-text' => "'''Qullusqa llamk'apusqakunaqa p'anqap wiñay kawsayninpi hallch'ankunapipas paqarinqaraqmi, samiqninpa rakinkunataq manam uyanalla qhawanapaqchu.'''
-{{SITENAME}}pi huk kamachiqkunaqa p'anqap pakasqa samiqninta qhawaspa qullusqa kaymanta kutichiyta atinkuraqmi kay kaqlla uyapuratam llamk'achispa, kay wikip kamariqninkuna mana huk saywachanakunata tiyachiptinqa.",
 'revdelete-confirm' => 'Ama hina kaspa, takyachiy munayniykita, qatiqninkunata riqsiyniykita, [[{{MediaWiki:Policy-url}}|kawpaykama]] rurayniykitapas.',
 'revdelete-suppress-text' => "Pakay ruranata '''kaylla kaptin''' llamk'achiy:
 * K'amiqchá willakuna
@@ -1620,6 +1617,7 @@ $1 {{PLURAL:$1|sanampamanta|sanampakunamanta}} aswan pisi kananmi.',
 'recentchanges-label-minor' => "Kayqa aslla llamk'apuymi",
 'recentchanges-label-bot' => "Kayqa rurana antachap llamk'apusqanmi",
 'recentchanges-label-unpatrolled' => "Kay llamk'apusqaqa manaraqmi patrullasqachu",
+'recentchanges-legend-heading' => "'''Sut'ichana:'''",
 'recentchanges-legend-newpage' => "([[Special:NewPages|musuq p'anqakunatapas]] qhaway)",
 'rcnotefrom' => "Kay qatiqpiqa '''$2'''-mantapacha ('''$1'''-kama) hukchasqakunatam rikunki.",
 'rclistfrom' => '$1-manta musuq hukchasqakunata rikuchiy',
@@ -1744,6 +1742,7 @@ Kay churkunayki rikcha hunt'a chhikan kayniyuq kaptinqa, chay hunt'atam churkuy,
 'uploaddisabledtext' => 'Willañiqi churkuyqa manam saqillasqachu.',
 'php-uploaddisabledtext' => "PHP-wan willañiqi churkuyqa hark'asqam. Ama hina kaspa, willañiqi churkuy allinkachinakunata llanchiy.",
 'uploadscripted' => "Kay willañiqiqa wakichi icha HTML qillqayuqmi, llika wamp'unaqa pantalla unanchanmanchá.",
+'uploadinvalidxml' => 'Manam atinichu churkusqa willañiqipi XML-ta kuskiyta.',
 'uploadvirus' => 'Willañiqipiqa añawmi! Yuyay: $1',
 'uploadjava' => 'Kay ZIP willañiqiqa Java .class willañiqiyuqmi.
 Java churkuyqa manam saqillasqachu, qasikanapaq saywachasqa kanman karunchana tiyanman.',
@@ -2089,7 +2088,16 @@ Ama hina kaspa, [$2 willañiqi ch'uyanchana p'anqata] qhaway astawan willachikun
 'protectedpages' => "Amachasqa p'anqakuna",
 'protectedpages-indef' => 'Wiñaypaq amachasqakuna chaylla',
 'protectedpages-cascade' => 'Phaqchallallapi amachay',
+'protectedpages-noredirect' => 'Pusapunakunata pakay',
 'protectedpagesempty' => "Kay kuskanachina tupukunawan amachasqa p'anqakunaqa manam kachkanchu.",
+'protectedpages-timestamp' => "Pacha q'illpay",
+'protectedpages-page' => "P'anqa",
+'protectedpages-expiry' => 'Puchukan',
+'protectedpages-performer' => 'Amachaq ruraq',
+'protectedpages-params' => 'Amachanapaq kuskanachina tupukuna',
+'protectedpages-reason' => 'Kayrayku',
+'protectedpages-unknown-timestamp' => 'Mana riqsisqa',
+'protectedpages-unknown-performer' => 'Mana riqsisqa ruraq',
 'protectedtitles' => "Amachasqa p'anqa sutikuna",
 'protectedtitlesempty' => "Manam kachkanchu kay kuskanachina tupukunawan amachasqa p'anqakuna.",
 'listusers' => 'Tukuy ruraqkuna',
@@ -2626,7 +2634,8 @@ Willariy imaraykum hark'anki (ahinataq: sapaq wandaluchasqa p'anqakunamanta will
 'change-blocklink' => "hark'ayta hukniraqchay",
 'contribslink' => "llamk'apusqakuna",
 'emaillink' => 'e-chaskita kachay',
-'autoblocker' => 'Kikinmanta hark\'asqam kanki, "[[User:$1|$1]]" sutiyuq ruraq IP huchhaykita ñaqha llamk\'arquptinmi. Hark\'aqqa "[[User:$1|$1]]"-ta hark\'aspa kaytam nirqan, kayrayku: "$2".',
+'autoblocker' => 'Kikinmanta hark\'asqam kanki, "[[User:$1|$1]]" sutiyuq ruraq IP huchhaykita ñaqha llamk\'arquptinmi.
+Hark\'aqqa $1-ta hark\'aspa kaytam nirqan, kayrayku: "\'\'$2"\'\'.',
 'blocklogpage' => "Ruraq hark'asqakuna",
 'blocklog-showlog' => "Kay ruraqqa ñawpaqta hark'asqam. Hark'ay hallch'ataqa kaypim rikunki willasunaykipaq:",
 'blocklog-showsuppresslog' => "Kay ruraqqa ñawpaqta hark'asqam pakasqapas. Ñit'ipay hallch'ataqa kaypim rikunki willasunaykipaq:",
@@ -2802,6 +2811,7 @@ Ama hina kaspa, [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisat
 'allmessages-prefix' => "Ch'illchina, ñawpaq k'askaqkama:",
 'allmessages-language' => 'Rimay:',
 'allmessages-filter-submit' => 'Riy',
+'allmessages-filter-translate' => "T'ikray",
 
 # Thumbnails
 'thumbnail-more' => 'Hatunchay',
@@ -3635,6 +3645,10 @@ Ama hina kaspa, chiqapta kay p'anqatam musuqmanta kamayta munani nispa takyachiy
 'imgmultigo' => 'Riy!',
 'imgmultigoto' => "$1 sutiyuq p'anqaman riy",
 
+# Language selector for translatable SVGs
+'img-lang-default' => '(kikinmanta rimay)',
+'img-lang-go' => 'Riy',
+
 # Table pager
 'ascending_abbrev' => 'wich',
 'descending_abbrev' => 'uray',
@@ -3711,8 +3725,17 @@ Sapsilla ñawpaq qhawariyta tukuykachay.',
 'version-hook-subscribedby' => 'Kay runap mañaykusqan:',
 'version-version' => '(Musuqchasqa $1)',
 'version-license' => 'Saqillay',
+'version-ext-license' => 'Saqillay',
+'version-ext-colheader-name' => "Mast'ariy",
+'version-ext-colheader-version' => 'Musuqchasqa',
+'version-ext-colheader-license' => 'Saqillay',
+'version-ext-colheader-description' => "T'iktuna",
+'version-ext-colheader-credits' => 'Ruraqkuna',
+'version-license-title' => '$1-paq saqillay',
+'version-credits-title' => '$1-paq añayniy',
 'version-poweredby-credits' => "Kay wikitaqa '''[https://www.mediawiki.org/ MediaWiki-m]''' atichin, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'hukkuna',
+'version-poweredby-translators' => "translatewiki.net t'ikraqkuna",
 'version-credits-summary' => "Kay qatiqpi runakunatam [[Special:Version|MediaWiki]] nisqapaq llamk'apusqankunapaq riqsichiyta munayku.",
 'version-license-info' => "MediaWiki llamp'u kaqqa qispim; mast'ariytam icha wakinchaytam atinki GNU General Public License nisqa saqillaypa kamachisqankama, Free Software Foundation nisqap uyaychasqan; saqillaypa iskay ñiqin musuqchasqan, munaspaykiqa aswan musuq musuqchasqan.
 
@@ -3733,6 +3756,7 @@ MediaWikitaqa mast'ariyku runakunata yanapanapaqmi, ichataq MANAM FIYAKUYTA ATIY
 'redirect-lookup' => 'Maskay:',
 'redirect-value' => 'Chani:',
 'redirect-user' => 'Ruraqpa kikin kaynin',
+'redirect-page' => "P'anqap ID-nin",
 'redirect-revision' => "P'anqamanta musuqchasqa",
 'redirect-file' => 'Willañiqip sutin',
 'redirect-not-exists' => 'Chaniqa manam tarisqachu',
@@ -3750,6 +3774,7 @@ MediaWikitaqa mast'ariyku runakunata yanapanapaqmi, ichataq MANAM FIYAKUYTA ATIY
 
 # Special:SpecialPages
 'specialpages' => "Sapaq p'anqakuna",
+'specialpages-note-top' => "Sut'ichana",
 'specialpages-note' => '* Sapsipaq sapaq p\'anqakuna.
 * <span class="mw-specialpagerestricted">Sapaqkunallapaq sapaq p\'anqakuna.</span>',
 'specialpages-group-maintenance' => 'Hatalliy willaykuna',
@@ -3956,9 +3981,11 @@ Mana chayqa, kay qatiqpi kaq hunt'ana p'anqatam llamk'achiyta atinki. Willapuyni
 'expandtemplates' => "Plantillakunata mast'ariy",
 'expand_templates_input' => 'Yaykuchina qillqa:',
 'expand_templates_output' => 'Lluqsiynin:',
+'expand_templates_xml_output' => 'XML lluqsichiy',
+'expand_templates_html_output' => 'Chawa HTML lluqsichiy',
+'expand_templates_ok' => 'Arí niy',
 'expand_templates_remove_comments' => 'Willapusqakunata qichuy',
+'expand_templates_generate_rawhtml' => 'Chawa HTML-ta rikuchiy',
 'expand_templates_preview' => 'Ñawpaqta qhawallay',
 
-# Unknown messages
-'uploadinvalidxml' => 'Manam atinichu churkusqa willañiqipi XML-ta kuskiyta.',
 );
index cc2ce29..453ff7d 100644 (file)
@@ -170,7 +170,6 @@ $messages = array(
 'vector-action-protect' => 'Harkana',
 'vector-action-undelete' => 'Kutin wacharichina',
 'vector-action-unprotect' => 'Harkayta shukchina',
-'vector-simplesearch-preference' => 'Ashtawan alli maskankapak imakunata arinina (Vectorwanlla)',
 'vector-view-create' => 'Kamarina',
 'vector-view-edit' => 'Killkana',
 'vector-view-history' => 'Wiñay kawsayta rikuna',
index bb496be..bd7e0eb 100644 (file)
@@ -16,7 +16,6 @@ $fallback = 'it';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Link cun la sotliniadura',
-'tog-justify' => 'Paràgraf: giustifiché',
 'tog-hideminor' => 'Nascond al mudefghi znini int la pàgina "Ultum mudèfghi"',
 'tog-hidepatrolled' => "Nascònd j cambiamént verifichèdi int'aglj ultum mudèfigh",
 'tog-newpageshidepatrolled' => 'Nascònd al pàgin verifichèdi da la lèsta dal pàgin növi',
@@ -25,9 +24,7 @@ $messages = array(
 'tog-numberheadings' => "Titul d'un paràgraf ch'l'à un nòmar daparlò",
 'tog-showtoolbar' => "Fam avdé la bara d'j strumént (u j vó JavaScript)",
 'tog-editondblclick' => 'Mudèfiga al pàgin scjazènd do volt (u j vò JavaScript)',
-'tog-editsection' => "S't'vù l'abilitaziòn ad'cambié al seziòn cum e' link [mudèfica]",
 'tog-editsectiononrightclick' => "S't'vù l'abilitaziòn ad cambié al seziòn <br />scjazénd e tast a dèstra sora e titul (u j vò JavaScript)",
-'tog-showtoc' => "Fam avdé l'indiz (sol par al pàgin cun piò d'3 seziòn)",
 'tog-rememberpassword' => "Arcurdam la parola d'ordin, par piasé (fèn a un masum $1 {{PLURAL:$1|dè|dè}})",
 'tog-watchcreations' => "Mett insèn al pàgin ch't'e' fat adès, intla lèsta da tní sot'occ",
 'tog-watchdefault' => "Mett insèn al pàgin ch'a j ò lavurè sora int la lèsta dal pàgin da tnì sot'òcc",
@@ -36,7 +33,6 @@ $messages = array(
 'tog-minordefault' => 'Ségna tot al mudèfic coma "zníni" s\'l\'utent làsa la casèla vuta',
 'tog-previewontop' => "Fam avdé l'anteprèma sora casèla d'mudèfica invezi che dciotta",
 'tog-previewonfirst' => "Fa' avdé l'anteprèma dop c'u's fa la prèma mudèfica",
-'tog-nocache' => "T'an stêga a tní in tla memoria al pàgin",
 'tog-enotifwatchlistpages' => "Fam' save' par e-mail quènd una pàgina dal mij l'è steda modifichèda",
 'tog-enotifusertalkpages' => "Fam' save' par e-mail quènd la mi pàgina dal discusiòn l'è steda modifichèda",
 'tog-enotifminoredits' => "Fam' save' par e-mail tòt al mudefchi, neca al znini",
@@ -379,7 +375,6 @@ Lezenda: '''({{int:cur}})''' = difarenzi cun la versiòn d'adès; '''({{int:last
 'recentchanges' => 'I ultum cambiamént',
 'recentchanges-legend' => "Upziòn d'j ultum cambiamént",
 'recentchanges-feed-description' => "Ste canël e' fa avdè i cambiamént piò rezent aj artècul d'sta wiki.",
-'rcnote' => "A què sota t'pù truvé {{PLURAL:$1|l'ultum cambiamént|j ultum '''$1''' cambiamént in st'artècul}} int j ultum {{PLURAL:$2|dè|'''$2''' dè}}; agl'infurmaziòn j è agiurnèdi a e' $4 al $5.",
 'rclistfrom' => 'Fam avdè i cambiamént növ a cminzipiè da $1',
 'rcshowhideminor' => '$1 al mudèfghi znini',
 'rcshowhidebots' => '$1 i bot',
index 74e9a20..9d55fdd 100644 (file)
@@ -11,6 +11,7 @@
  * @author Aryaz
  * @author Dalinanir
  * @author Jose77
+ * @author Mmistmurt
  * @author MoubarikBelkasim
  * @author Urhixidur
  */
@@ -55,7 +56,7 @@ $messages = array(
 'october-gen' => 'Ktubar',
 'november-gen' => 'Nuwanbir',
 'december-gen' => 'Dujanbir',
-'jan' => 'Yennayer',
+'jan' => 'Yen',
 'feb' => 'Yebrayer',
 'mar' => 'Mars',
 'apr' => 'Abrir',
@@ -316,7 +317,6 @@ Tasarut: (cur) = imṣebḍiyen ag tunɣilt n ruxa,
 'lineno' => 'Tabrit $1:',
 'compareselectedversions' => 'Smequdda tunɣilin a',
 'editundo' => 'kkes min ggiɣ',
-'diff-multi' => '({{PLURAL:$1|ijj n ufegged|$1 ifeggiden}} war ad twamlen ca.)',
 
 # Search results
 'searchresults' => 'Tifellawin n tarezzut',
@@ -356,7 +356,6 @@ mala tucit-id, ataf Lxdant inec a tetwassan ila inec.',
 'nchanges' => '$1 {{PLURAL:$1|tiẓṛegt|tiẓṛigin}}',
 'recentchanges' => 'Tiẓṛigin tineggura',
 'recentchanges-feed-description' => 'Bbar tiẓṛigin timayutin n wiki deg usudem(feed) a .',
-'rcnote' => "Awadday {{PLURAL:$1|d '''1''' taẓṛigt|d '''$1''' tiẓṛigin tinggura}} deg {{PLURAL:$2|ass anggaru |'''$2''' ussan inggura}}, am di $5, $4.",
 'rcnotefrom' => "ɣar wadday d tiẓṛigin zi '''$2''' (ar '''$1''' ).",
 'rclistfrom' => 'Ẓar tiẓṛigin timaynutin ig ibeddan zi $1',
 'rcshowhideminor' => '$1 tiẓṛigin d-timeẓyanin',
index e9b222b..b3afc3f 100644 (file)
@@ -191,7 +191,6 @@ $messages = array(
 'vector-action-protect' => 'Bloccar',
 'vector-action-undelete' => 'Restituir',
 'vector-action-unprotect' => 'Midar la protecziun',
-'vector-simplesearch-preference' => 'Activar la trav da tschertgar simplifitgada (be per il skin Vector)',
 'vector-view-create' => 'Crear',
 'vector-view-edit' => 'Modifitgar',
 'vector-view-history' => 'Cronologia',
@@ -433,32 +432,65 @@ Resguarda ch'entginas paginas pon tuttina anc vesair or sco sche ti eras annunzi
 'welcomecreation-msg' => "Tes conto è vegnì creà. 
 N'emblida betg da midar tias [[Special:Preferences|{{SITENAME}} preferenzas]].",
 'yourname' => "Num d'utilisader",
+'userlogin-yourname-ph' => "Endatescha tes num d'utilisader",
+'createacct-another-username-ph' => "Endatescha in num d'utilisader",
 'yourpassword' => 'pled-clav',
+'userlogin-yourpassword' => 'Pled-clav',
+'userlogin-yourpassword-ph' => 'Endatescha tes pled-clav',
+'createacct-yourpassword-ph' => 'Endatescha in pled-clav',
 'yourpasswordagain' => 'repeter pled-clav',
+'createacct-yourpasswordagain' => 'Confermar il pled-clav',
+'createacct-yourpasswordagain-ph' => 'Endatescha il pled-clav anc ina giada',
 'remembermypassword' => "S'annunziar permanantamain sin quest computer (per maximalmain $1 {{PLURAL:$1|di|dis}})",
+'userlogin-remembermypassword' => 'Restar annunzià',
+'userlogin-signwithsecure' => 'Duvrar ina connexiun segira',
 'yourdomainname' => 'Vossa domain',
 'password-change-forbidden' => 'Ti na pos betg midar pleds-clav sin quest vichi.',
 'externaldberror' => "U ch'i è capità ina errur cun l'autentificaziun externa u che ti na dastgas betg actualisar tes conto extern.",
 'login' => "T'annunziar",
-'nav-login-createaccount' => "T'annunziar / registrar",
+'nav-login-createaccount' => "T'annunziar / crear in conto",
 'loginprompt' => "Ti stos avair '''activà ils cookies''' per pudair t'annunziar tar {{SITENAME}}.",
-'userlogin' => "T'annunziar / registrar",
+'userlogin' => "T'annunziar / crear in conto",
 'userloginnocreate' => "T'annunziar",
 'logout' => 'Sortir',
 'userlogout' => 'sortir',
 'notloggedin' => "Betg s'annunzià",
+'userlogin-noaccount' => 'Anc nagin conto?',
+'userlogin-joinproject' => 'Far part da {{SITENAME}}',
 'nologin' => "Anc nagin conto? '''$1'''.",
 'nologinlink' => "Crear in conto d'utilisader",
 'createaccount' => "Crear in conto d'utilisader",
 'gotaccount' => "Gia in conto d'utilisader? '''$1'''.",
 'gotaccountlink' => "T'annunziar",
 'userlogin-resetlink' => "Emblidà tias datas per s'annunziar?",
+'userlogin-resetpassword-link' => 'Has emblidà tes pled-clav?',
+'userlogin-loggedin' => "Ti es gia t'annunzià sco {{GENDER:$1|$1}}.
+Dovra il suandant formular per t'annunziar cun in auter conto.",
+'userlogin-createanother' => 'Crear in auter conto',
+'createacct-join' => 'Endatescha tias infurmaziuns sutvart.',
+'createacct-another-join' => 'Endatescha sutvart las infurmaziuns dal nov conto.',
+'createacct-emailrequired' => 'Adressa dad e-mail',
+'createacct-emailoptional' => 'Adressa dad e-mail (opziunal)',
+'createacct-email-ph' => "Endatescha ti'adressa dad e-mail",
+'createacct-another-email-ph' => "Endatescha in'adressa dad e-mail",
 'createaccountmail' => "Dovrar per il mument in pled-clav casual ed inviar el a l'adressa d'e-mail inditgada.",
+'createacct-realname' => 'Num real (opziunal)',
 'createaccountreason' => 'Motiv:',
+'createacct-reason' => 'Motiv',
+'createacct-reason-ph' => 'Tes motiv per crear in auter conto',
+'createacct-captcha' => 'Controlla da segirezza',
+'createacct-imgcaptcha-ph' => 'Endatescha il text che vesas survart',
+'createacct-submit' => 'Crear tes conto',
+'createacct-another-submit' => 'Crear in auter conto',
+'createacct-benefit-heading' => '{{SITENAME}} exista grazia a persunas sco ti.',
+'createacct-benefit-body1' => '{{PLURAL:$1|modificaziun|modificaziuns}}',
+'createacct-benefit-body2' => '{{PLURAL:$1|pagina|paginas}}',
+'createacct-benefit-body3' => '{{PLURAL:$1|contribuent activ|contribuents activs}}',
 'badretype' => 'Ils dus pleds-clav na corrispundan betg.',
 'userexists' => "Quest num d'utilisader vegn gia duvrà. 
 Tscherna per plaschair in'auter.",
 'loginerror' => "Sbagl cun t'annunziar",
+'createacct-error' => 'Errur cun crear il conto',
 'createaccounterror' => 'Betg pussaivel da crear in conto: $1',
 'nocookiesnew' => "Il conto da l'utilisader è vegnì creà, ti es dentant betg t'annunzià. 
 {{SITENAME}} utilisescha cookies per che utilisaders pon s'annunziar. 
@@ -522,6 +554,8 @@ Spetga $1 avant ch'empruvar anc ina giada.",
 'login-abort-generic' => 'Annunzia senza success - Annullà',
 'loginlanguagelabel' => 'Lingua: $1',
 'suspicious-userlogout' => "Tia dumonda per partir è vegnida refusada perquai ch'i para ch'ella è vegnida tramessa d'in navigatur che funcziuna betg correctamain u d'in proxy da cache.",
+'createacct-another-realname-tip' => "Il num real è opziunal.
+Sche ti l'inditgeschas, vegn el duvrà per attribuir las contribuziuns.",
 
 # Email sending
 'php-mail-error-unknown' => 'Errur nunenconuschenta en la funcziun mail() da PHP',
@@ -908,8 +942,6 @@ Ti pos vesair quest diff; detagls pon vegnir chattads en il [{{fullurl:{{#Specia
 'revdelete-show-file-submit' => 'Gea',
 'revdelete-selected' => "'''{{PLURAL:$2|Versiun tschernida|Versiuns tschernidas}} da [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Element dal protocol tschernì|Elements dal protocol tschernids}}:'''",
-'revdelete-text' => "'''Versiuns ed ocurrenzas stizzadas cumparan era vinavant en la cronologia ed en ils protocols, dentant èn parts dal cuntegn betg accessibels al public.'''
-Auters administraturs sin {{SITENAME}} vegnan tuttina ad avair access al cuntegn zuppentà e pon restaurar puspè la pagina, sch'i na vegnan betg definidas restricziuns supplementaras.",
 'revdelete-confirm' => 'Confermescha che ti vuls far quai, che ti chapeschas las consequenzas e che ti fas quai en accordanza cun [[{{MediaWiki:Policy-url}}|las directivas]].',
 'revdelete-suppress-text' => "Ti duessas '''be''' supprimer en quests cas: 
 * Infurmaziuns offendentas
@@ -1024,7 +1056,7 @@ Detagls pon vegnir chattads en il [{{fullurl:{{#Special:Log}}/delete|page={{FULL
 'shown-title' => 'Mussar $1 {{PLURAL:$1|resultat|resultats}} per pagina',
 'viewprevnext' => 'Mussar ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''Igl exista ina pagina cun il num \"[[:\$1]] sin questa vichi\"'''",
-'searchmenu-new' => "'''Crear la pagina \"[[:\$1]]\" sin questa vichi!'''",
+'searchmenu-new' => '<strong>Crear la pagina «[[:$1]]» sin quest vichi!</strong> {{PLURAL:$2|0=|Vesair er la pagina chattada cun tia tschertga.|Vesair er las resultats da tia tschertga.}}',
 'searchprofile-articles' => 'Paginas da cuntegn',
 'searchprofile-project' => 'Agid e paginas dal project',
 'searchprofile-images' => 'Multimedia',
@@ -1338,15 +1370,28 @@ Tia adressa dad e-mail na vegn betg mussada sche auters utilisaders ta contactes
 'recentchanges-label-minor' => 'Quai è ina pitschna modificaziun',
 'recentchanges-label-bot' => 'Questa modificaziun è vegnida exequida dad in bot',
 'recentchanges-label-unpatrolled' => "Questa midada n'è anc betg vegnida controllada",
+'recentchanges-legend-heading' => "'''Legenda:'''",
 'recentchanges-legend-newpage' => '(vesair era la [[Special:NewPages|glista da novas paginas]])',
-'rcnotefrom' => "Midadas dapi '''$2''' (maximalmain '''$1''' vegnan mussads).",
-'rclistfrom' => 'Mussar las novas midadas entschavend cun $1',
+'rcnotefrom' => 'I vegnan mussadas las midadas a partir da las <strong>$4</strong> dals <strong>$3</strong> (maximalmain <strong>$1</strong>).',
+'rclistfrom' => 'Mussar las novas midadas a partir da las $2 dals $3',
 'rcshowhideminor' => '$1 midadas pitschnas',
+'rcshowhideminor-show' => 'Mussar',
+'rcshowhideminor-hide' => 'Zuppentar',
 'rcshowhidebots' => '$1 bots',
+'rcshowhidebots-show' => 'Mussar',
+'rcshowhidebots-hide' => 'Zuppentar',
 'rcshowhideliu' => '$1 utilisaders annunziads',
+'rcshowhideliu-show' => 'Mussar',
+'rcshowhideliu-hide' => 'Zuppentar',
 'rcshowhideanons' => '$1 utilisaders anonims',
+'rcshowhideanons-show' => 'Mussar',
+'rcshowhideanons-hide' => 'Zuppentar',
 'rcshowhidepatr' => '$1 midadas controlladas',
+'rcshowhidepatr-show' => 'Mussar',
+'rcshowhidepatr-hide' => 'Zuppentar',
 'rcshowhidemine' => '$1 mias midadas',
+'rcshowhidemine-show' => 'Mussar',
+'rcshowhidemine-hide' => 'Zuppentar',
 'rclinks' => 'Mussar las davosas $1 midadas dals ultims $2 dis<br />$3',
 'diff' => 'diff',
 'hist' => 'ist',
@@ -2072,7 +2117,7 @@ Conferma per plaschair che ti ta es conscient da las consequenzas e che ti agesc
 'actioncomplete' => "L' acziun è terminada.",
 'actionfailed' => "L'acziun n'è betg reussida",
 'deletedtext' => '"$1" è vegnì stizzà.
-Sin $2 chattas ti ina glista dals davos artitgels stizzads.',
+En il $2 chattas ti ina glista dals davos artitgels stizzads.',
 'dellogpage' => "Protocol d'eliminaziuns",
 'dellogpagetext' => "Sutvart è ina glista dals elements stizzads l'ultim.",
 'deletionlog' => "protocol d'eliminaziuns",
@@ -3502,6 +3547,7 @@ Ti duessas avair retschavì [{{SERVER}}{{SCRIPTPATH}}/COPYING ina copia da la GN
 
 # Special:SpecialPages
 'specialpages' => 'Paginas spezialas',
+'specialpages-note-top' => 'Legenda',
 'specialpages-note' => '* Paginas spezialas normalas.
 * <span class="mw-specialpagerestricted">Paginas spezialas restrenschidas.</span>',
 'specialpages-group-maintenance' => 'Rapports da mantegnamant',
@@ -3611,8 +3657,8 @@ Ti duessas avair retschavì [{{SERVER}}{{SCRIPTPATH}}/COPYING ina copia da la GN
 'logentry-newusers-create2' => 'Il conto $3 è vegnì creà da $1',
 'logentry-newusers-autocreate' => 'Il conto $1 è vegnì creà automaticamain',
 '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',
+'logentry-rights-rights-legacy' => '$1 ha {{GENDER:$2|midà}} la commembranza da gruppas per $3',
+'logentry-rights-autopromote' => '$1 è vegnì {{GENDER:$2|promovì|promovida}} automaticamain da $4 a $5',
 'rightsnone' => '(nagins)',
 
 # Feedback
index 4aa2c0d..82d4865 100644 (file)
@@ -297,7 +297,6 @@ Kana avilyan kathe doshatar, ja palpale.',
 # Recent changes
 'recentchanges' => 'Neve paruvimata',
 'recentchanges-summary' => 'Andi kadaya patrin shai te dikhes le neve paruvimata andi romani {{SITENAME}}.',
-'rcnote' => 'Tele si le palutne <strong>$1</strong> paruvimata andar le palutne <strong>$2</strong> divesa.',
 'rcnotefrom' => "Tele si le averutnimata katar '''$2''' (inklen '''$1''' averutnimata, shai te paruves o gin alosarindoi aver tele).",
 'rclistfrom' => 'Dikh le paruvimata ji kai $1',
 'rcshowhideminor' => '$1 tikne editisaripena',
@@ -377,7 +376,6 @@ Kana kamesa te khoses kadaya patrin andar tiri lista le patryange so arakhes len
 'watch' => 'Dikh la',
 'unwatch' => 'Na mai dikh',
 'unwatchthispage' => 'Na mai dikh',
-'wlnote' => 'Tele si le palutne $1 paruvimata ande palutne <b>$2</b> ore.',
 
 'enotif_reset' => 'Thov semno kai patrya so dikhlem',
 
@@ -403,7 +401,6 @@ Dikh ando $2 ek patrinipen le palutne butyange khosle.',
 # Undelete
 'undelete' => 'Dikh le khosle patrya',
 'undeletebtn' => 'Le palpale',
-'undeletereset' => 'Khos le paruvimata',
 
 # Namespace form on various pages
 'namespace' => 'Rig:',
@@ -454,7 +451,6 @@ Dikh ando $2 ek patrinipen le palutne butyange khosle.',
 'tooltip-pt-watchlist' => 'I lista le pajinenge so dikhav lendar (monitorizav).',
 'tooltip-pt-mycontris' => 'Le mire editisarimata',
 'tooltip-pt-login' => 'Mishto si te identifikares tut, pale na si musai.',
-'tooltip-pt-anonlogin' => 'Mishto si te identifikares tut, pale na si musai.',
 'tooltip-pt-logout' => 'Kathe aćhaves i sesiyunya',
 'tooltip-ca-talk' => 'Diskuciya le artikoleske',
 'tooltip-ca-edit' => 'Shai te editisares kadaya pajina. Mangas te paledikhes o teksto anglal te uxtaves les.',
index c699dde..30b12ad 100644 (file)
@@ -334,7 +334,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Doresc să primesc o copie a mesajelor e-mail pe care le trimit',
 'tog-diffonly' => 'Nu arăta conținutul paginii sub dif',
 'tog-showhiddencats' => 'Arată categoriile ascunse',
-'tog-noconvertlink' => 'Dezactivează conversia titlurilor',
 'tog-norollbackdiff' => 'Nu arăta diferența după efectuarea unei reveniri',
 'tog-useeditwarning' => 'Avertizează-mă când părăsesc o pagină fără a salva modificările',
 'tog-prefershttps' => 'Utilizează întotdeauna o conexiune securizată când sunt autentificat(ă)',
@@ -461,7 +460,6 @@ $messages = array(
 'vector-action-protect' => 'Protejare',
 'vector-action-undelete' => 'Recuperare',
 'vector-action-unprotect' => 'Modificare protecție',
-'vector-simplesearch-preference' => 'Activează bara de căutare simplificată (exclusiv pentru interfața Vector)',
 'vector-view-create' => 'Creare',
 'vector-view-edit' => 'Modificare',
 'vector-view-history' => 'Istoric',
@@ -747,8 +745,7 @@ Nu uitați să vă modificați [[Special:Preferences|preferințele]] pentru {{SI
 'gotaccountlink' => 'Autentificați-vă',
 'userlogin-resetlink' => 'Ați uitat datele de autentificare?',
 'userlogin-resetpassword-link' => 'V-ați uitat parola?',
-'helplogin-url' => 'Help:Autentificare',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ajutor la autentificare]]',
+'userlogin-helplink2' => 'Ajutor la autentificare',
 'userlogin-loggedin' => 'Sunteți deja {{GENDER:$1|autentificat|autentificată}} ca {{GENDER:$1|$1}}.
 Utilizați formularul de mai jos pentru a vă autentifica cu alt nume de utilizator.',
 'userlogin-createanother' => 'Creează un alt cont',
@@ -838,6 +835,10 @@ Vă rugăm să așteptați $1 până să reîncercați.',
 'suspicious-userlogout' => 'Cererea dumneavoastră de a închide sesiunea a fost refuzată întrucât pare că a fost trimisă printr-o eroare a navigatorului sau de un proxy memorat în cache.',
 'createacct-another-realname-tip' => 'Numele real este opțional.
 Dacă decideți furnizarea sa, acesta va fi folosit pentru a atribui utilizatorului munca sa.',
+'pt-login' => 'Autentificare',
+'pt-login-button' => 'Autentificare',
+'pt-createaccount' => 'Creare cont',
+'pt-userlogout' => 'Închide sesiunea',
 
 # Email sending
 'php-mail-error-unknown' => 'Eroare necunoscută în funcția PHP mail()',
@@ -846,7 +847,7 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a atribui utilizatoru
 
 # Change password dialog
 'changepassword' => 'Schimbare parolă',
-'resetpass_announce' => 'Sunteți autentificat cu un cod temporar trimis pe e-mail. Pentru a termina acțiunea de autentificare, trebuie să setați o parolă nouă aici:',
+'resetpass_announce' => 'Pentru a finaliza acțiunea de autentificare, trebuie să setați o parolă nouă.',
 'resetpass_text' => '<!-- Adăugați text aici -->',
 'resetpass_header' => 'Modificare parolă',
 'oldpassword' => 'Parola veche:',
@@ -862,8 +863,16 @@ Vă rugăm să așteptați $1 până să reîncercați.',
 'resetpass-submit-cancel' => 'Revocare',
 'resetpass-wrong-oldpass' => 'Parolă curentă sau temporară incorectă.
 Este posibil să fi reușit deja schimbarea parolei sau să fi cerut o parolă temporară nouă.',
+'resetpass-recycled' => 'Vă rugăm să vă schimbați parola în altceva decât parola curentă.',
+'resetpass-temp-emailed' => 'Sunteți autentificat cu un cod temporar primit pe e-mail.
+Pentru a finaliza acțiunea de autentificare, trebuie să setați o parolă nouă aici:',
 'resetpass-temp-password' => 'Parolă temporară:',
 'resetpass-abort-generic' => 'Schimbarea parolei a fost anulată de către o extensie.',
+'resetpass-expired' => 'Parola dumneavoastră a expirat. Alegeți o parolă nouă pentru a vă autentifica.',
+'resetpass-expired-soft' => 'Parola dumneavoastră a expirat și trebuie schimbată. Alegeți o parolă nouă acum sau apăsați „{{int:resetpass-submit-cancel}}” pentru a o reseta mai târziu.',
+'resetpass-validity-soft' => 'Parola dumneavoastră nu este validă: $1 
+
+Alegeți o parolă nouă acum sau apăsați „{{int:resetpass-submit-cancel}}” pentru a o reseta mai târziu.',
 
 # Special:PasswordReset
 'passwordreset' => 'Resetare parolă',
@@ -1170,6 +1179,7 @@ Acsete argumente au fost omise.',
 'undo-success' => 'Modificarea poate fi anulată. Verificați diferența de dedesupt și apoi salvați pentru a termina anularea modificării.',
 'undo-failure' => 'Modificarea nu poate fi reversibilă datorită conflictului de modificări intermediare.',
 'undo-norev' => 'Modificarea nu poate fi reversibilă pentru că nu există sau pentru că a fost ștearsă.',
+'undo-nochange' => 'Se pare că această modificare a fost deja anulată.',
 'undo-summary' => 'Anularea modificării $1 făcute de [[Special:Contributions/$2|$2]] ([[User talk:$2|Discuție]])',
 'undo-summary-username-hidden' => 'Anularea versiunii $1 a unui utilizator ascuns',
 
@@ -1255,7 +1265,10 @@ funcție, fie versiunea specificată nu există, ori sunteți pe cale să ascund
 'revdelete-show-file-submit' => 'Da',
 'revdelete-selected' => "'''{{PLURAL:$2|Versiunea aleasă|Versiunile alese}} pentru [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Revizia aleasă|Reviziile alese}}:'''",
-'revdelete-text' => "'''Versiunile șterse vor apărea în istoricul paginii, dar conținutul lor nu va fi accesibil publicului.''' Administratorii {{SITENAME}} pot accesa conținutul șters și îl pot recupera prin aceeași interfață, dacă nu este impusă altă restricție de către operatorii sitului.",
+'revdelete-text-text' => 'Versiunile șterse vor continua să fie vizibile în istoricul paginii, însă anumite părți ale conținutului acestora vor fi inaccesibile publicului.',
+'revdelete-text-file' => 'Versiunile șterse ale fișierului vor continua să fie vizibile în istoricul fișierului, însă anumite părți ale conținutului acestora vor fi inaccesibile publicului.',
+'logdelete-text' => 'Evenimentele șterse ale jurnalului vor continua să fie vizibile în jurnale, însă anumite părți ale conținutului acestora vor fi inaccesibile publicului.',
+'revdelete-text-others' => 'Alți administratori de la {{SITENAME}} vor avea acces în continuare la conținutul ascuns și îl vor putea restaura prin intermediul acestei interfețe, cu excepția cazurilor în care nu sunt activate și restricții suplimentare.',
 'revdelete-confirm' => 'Vă rugăm să confirmați că intenționați să faceți acest lucru, că înțelegeți consecințele și că faceți asta în conformitate cu [[{{MediaWiki:Policy-url}}|politica]].',
 'revdelete-suppress-text' => "Suprimarea trebuie folosită '''doar''' în următoarele cazuri:
 * Informații potențial calomnioase
@@ -1390,13 +1403,14 @@ Detalii se pot găsi în [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE
 'search-file-match' => '(se regăsește în conținutul fișierului)',
 'search-suggest' => 'V-ați referit la: $1',
 'search-interwiki-caption' => 'Proiecte înrudite',
-'search-interwiki-default' => '$1 rezultate:',
+'search-interwiki-default' => 'Rezultate de la $1:',
 'search-interwiki-more' => '(mai mult)',
 'search-relatedarticle' => 'Relaționat',
 'searcheverything-enable' => 'Caută în toate spațiile de nume',
 'searchrelated' => 'relaționat',
 'searchall' => 'toate',
 'showingresults' => "Mai jos {{PLURAL:$1|apare '''1''' rezultat|apar '''$1''' rezultate|apar '''$1''' de rezultate}} începând cu nr. <b>$2</b>.",
+'showingresultsinrange' => 'Mai jos se afișează un număr de până la {{PLURAL:$1|<strong>1</strong> rezultat|<strong>$1</strong> rezultate|<strong>$1</strong> de rezultate}} din intervalul #<strong>$2</strong> la #<strong>$3</strong>.',
 'showingresultsnum' => "Mai jos {{PLURAL:$3|apare '''1''' rezultat|apar '''$3''' rezultate|apar '''$3''' de rezultate}} cu nr. <b>$2</b>.",
 'showingresultsheader' => "{{PLURAL:$5|Rezultatul '''$1''' din '''$3'''|Rezultatele '''$1 - $2''' din '''$3'''}} pentru '''$4'''",
 'search-nonefound' => 'Nu sunt rezultate conforme interogării.',
@@ -1715,14 +1729,26 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'recentchanges-legend-heading' => "'''Legendă:'''",
 'recentchanges-legend-newpage' => '(vedeți și [[Special:NewPages|lista cu pagini noi]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => 'Dedesubt sunt modificările de la <b>$2</b> (maxim <b>$1</b> de modificări sunt afișate - schimbă numărul maxim de linii alegând altă valoare mai jos).',
-'rclistfrom' => 'Se arată modificările începând cu $1',
+'rcnotefrom' => 'Dedesubt sunt modificările începând cu <b>$2</b> (maximum <b>$1</b> afișate).',
+'rclistfrom' => 'Se afișează modificările începând cu $1',
 'rcshowhideminor' => '$1 modificările minore',
+'rcshowhideminor-show' => 'Arată',
+'rcshowhideminor-hide' => 'Ascunde',
 'rcshowhidebots' => '$1 roboții',
+'rcshowhidebots-show' => 'Arată',
+'rcshowhidebots-hide' => 'Ascunde',
 'rcshowhideliu' => '$1 utilizatorii înregistrați',
+'rcshowhideliu-show' => 'Arată',
+'rcshowhideliu-hide' => 'Ascunde',
 'rcshowhideanons' => '$1 utilizatorii anonimi',
+'rcshowhideanons-show' => 'Arată',
+'rcshowhideanons-hide' => 'Ascunde',
 'rcshowhidepatr' => '$1 modificările patrulate',
+'rcshowhidepatr-show' => 'Arată',
+'rcshowhidepatr-hide' => 'Ascunde',
 'rcshowhidemine' => '$1 contribuțiile mele',
+'rcshowhidemine-show' => 'Arată',
+'rcshowhidemine-hide' => 'Ascunde',
 'rclinks' => 'Se arată ultimele $1 modificări din ultimele $2 zile.<br />
 $3',
 'diff' => 'dif',
@@ -1850,6 +1876,8 @@ Ar trebui să contactați pe cineva care poate vizualiza datele suprimate ale fi
 'php-uploaddisabledtext' => 'Încărcarea de fișiere este dezactivată în PHP.
 Vă rugăm să verificați setările din file_uploads.',
 'uploadscripted' => 'Fișierul conține HTML sau cod script care poate fi interpretat în mod eronat de un browser.',
+'uploadscriptednamespace' => 'Acest fișier SVG conține un spațiu de nume „$1” neautorizat.',
+'uploadinvalidxml' => 'Nu s-a putut analiza conținutul XML din fișierul încărcat.',
 'uploadvirus' => 'Fișierul conține un virus! Detalii: $1',
 'uploadjava' => 'Fișierul de față este o arhivă ZIP care conține un fișier de clasă Java.
 Încărcarea fișierelor Java nu este permisă, întrucât pot evita restricțiile de securitate.',
@@ -2217,10 +2245,20 @@ Intrările <del>tăiate</del> au fost rezolvate.',
 'deadendpagestext' => 'Următoarele pagini nu se leagă de alte pagini din acestă wiki.',
 'protectedpages' => 'Pagini protejate',
 'protectedpages-indef' => 'Doar protejări pe termen nelimitat',
+'protectedpages-summary' => 'Această pagină enumeră paginile protejate în acest moment. Pentru o listă a titlurilor protejate la creare, vedeți [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Doar protejări în cascadă',
 'protectedpages-noredirect' => 'Ascunde redirecționările',
 'protectedpagesempty' => 'Nu există pagini protejate',
+'protectedpages-timestamp' => 'Data și ora',
+'protectedpages-page' => 'Pagină',
+'protectedpages-expiry' => 'Expiră la',
+'protectedpages-performer' => 'Utilizator care a protejat',
+'protectedpages-params' => 'Parametri de protejare',
+'protectedpages-reason' => 'Motiv',
+'protectedpages-unknown-timestamp' => 'Necunoscut',
+'protectedpages-unknown-performer' => 'Utilizator necunoscut',
 'protectedtitles' => 'Titluri protejate',
+'protectedtitles-summary' => 'Această pagină enumeră titlurile protejate la creare în acest moment. Pentru o listă a paginilor deja existente care sunt protejate, vedeți [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Nu există titluri protejate cu acești parametri.',
 'listusers' => 'Listă utilizatori',
 'listusers-editsonly' => 'Arată doar utilizatorii cu modificări',
@@ -2493,7 +2531,7 @@ Accesați $2 pentru o listă cu elementele recent șterse.',
 'delete-warning-toobig' => 'Această pagină are un istoric al modificărilor mult prea mare, cu mai mult de $1 {{PLURAL:$1|versiune|versiuni|de versiuni}}.
 Ștergerea sa poate afecta baza de date a sitului {{SITENAME}};
 acționați cu precauție.',
-'deleting-backlinks-warning' => "'''Atenție:''' Alte pagini se leagă sau sunt transcluse din pagina pe care doriți să o ștergeți.",
+'deleting-backlinks-warning' => "'''Atenție:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Alte pagini]] se leagă sau transclud pagina pe care doriți să o ștergeți.",
 
 # Rollback
 'rollback' => 'Editări de revenire',
@@ -2667,8 +2705,10 @@ Ultima blocare este indicată mai jos pentru informare:',
 'sp-contributions-blocked-notice-anon' => 'Această adresă IP este blocată acum.
 Iată aici ultima înregistrare relevantă din jurnalul blocărilor:',
 'sp-contributions-search' => 'Căutare contribuții',
+'sp-contributions-suppresslog' => 'contribuții suprimate ale utilizatorului',
 'sp-contributions-username' => 'Adresă IP sau nume de utilizator:',
 'sp-contributions-toponly' => 'Afișează numai versiunile recente',
+'sp-contributions-newonly' => 'Afișează numai modificările care au dus la crearea de pagini',
 'sp-contributions-submit' => 'Căutare',
 
 # What links here
@@ -2770,7 +2810,7 @@ Vedeți [[Special:BlockList|lista blocărilor]] pentru a revizui adresele blocat
 'change-blocklink' => 'modifică blocarea',
 'contribslink' => 'contribuții',
 'emaillink' => 'trimite e-mail',
-'autoblocker' => 'Autoblocat fiindcă folosiți aceeași adresă IP ca și „[[User:$1|$1]]”.
+'autoblocker' => 'Blocat automat, deoarece adresa dumneavoastră IP a fost utilizată recent de „[[User:$1|$1]]”.
 Motivul blocării utilizatorului $1 este: „$2”',
 'blocklogpage' => 'Jurnal blocări',
 'blocklog-showlog' => 'Acest utilizator a fost blocat în trecut.
@@ -2983,6 +3023,7 @@ $2',
 'thumbnail_image-type' => 'Acest tip de imagine nu este suportat',
 'thumbnail_gd-library' => 'Configurație incompletă a bibliotecii GD: lipsește funcția $1',
 'thumbnail_image-missing' => 'Fișierul următor nu poate fi găsit: $1',
+'thumbnail_image-failure-limit' => 'Recent au existat prea multe încercări nereușite ($1 sau mai multe) pentru a randa această miniatură. Încercați din nou mai târziu.',
 
 # Special:Import
 'import' => 'Importare pagini',
@@ -4188,6 +4229,4 @@ MediaWiki este distribuit în speranța că va fi folositor, dar FĂRĂ VREO GAR
 'expand_templates_generate_rawhtml' => 'Arată HTML brut',
 'expand_templates_preview' => 'Previzualizare',
 
-# Unknown messages
-'uploadinvalidxml' => 'Nu s-a putut analiza conținutul XML din fișierul încărcat.',
 );
index 868813d..e7dd072 100644 (file)
@@ -61,7 +61,6 @@ $messages = array(
 'tog-ccmeonemails' => "Manneme 'na copie de le mail ca je manne a l'ôtre utinde",
 'tog-diffonly' => 'No fà vedè le pàggene cu le condenute sotte a le differenze',
 'tog-showhiddencats' => 'Fa vedè le categorije scunnute',
-'tog-noconvertlink' => "Disabbilite 'a conversione d'u titele de collegamende",
 'tog-norollbackdiff' => "Non sce penzanne a le differenze apprisse l'esecuzione de 'nu rollback",
 'tog-useeditwarning' => "Avvisave quanne jie lasse 'na pàgene cangiate senze ca agghie sarvate le cangiaminde",
 'tog-prefershttps' => "Ause sembre 'na connessione secure quanne trase",
@@ -189,7 +188,6 @@ $messages = array(
 'vector-action-protect' => 'Protegge',
 'vector-action-undelete' => 'Repristine',
 'vector-action-unprotect' => "Cange 'a protezione",
-'vector-simplesearch-preference' => "Abbilite 'a barre de ricerche semblificate (Sulamende pe le scheme a vettore)",
 'vector-view-create' => 'Ccreje',
 'vector-view-edit' => 'Cange',
 'vector-view-history' => "Vide 'u cunde",
@@ -481,8 +479,6 @@ No te sce scurdanne de cangià le [[Special:Preferences|{{SITENAME}} preferenze
 'gotaccountlink' => 'Tràse',
 'userlogin-resetlink' => "T'è scurdate le dettaglie pe trasè?",
 'userlogin-resetpassword-link' => "T'è scurdate 'a passuord toje?",
-'helplogin-url' => 'Help:Trasenne',
-'userlogin-helplink' => "[[{{MediaWiki:helplogin-url}}|Aijute cu 'a trasute]]",
 'userlogin-loggedin' => "Tu ste jndre ggià cumme a {{GENDER:$1|$1}}.
 Ause 'u module aqquà sotte pe trasè cumme a 'n'otre utende.",
 'userlogin-createanother' => "Ccreje 'n'otre cunde",
@@ -592,7 +588,7 @@ Ce tu scacchie de metterle, quiste avène ausate pe dà 'u giuste merite a 'a fa
 
 # Change password dialog
 'changepassword' => "Cange 'a password",
-'resetpass_announce' => "Tu tè colleghete cu 'nu codece mannete pe e-mail temboranee.
+'resetpass_announce' => "Tu tè collegate cu 'nu codece mannate pe e-mail temboranèe.
 Pe spiccià 'a procedure de collegamende, tu a 'mbostà 'na password nove aqquà:",
 'resetpass_text' => "<!-- Mitte 'u teste aqquà -->",
 'resetpass_header' => "Cange 'a password d'u cunde utende",
@@ -883,7 +879,7 @@ Pare proprie ca l'onne scangellete.",
 'invalid-content-data' => "Condenute d'u date invalide",
 'content-not-allowed-here' => '"$1" condenute non g\'è permesse sus \'a pàgene [[$2]]',
 'editwarning-warning' => 'Assenne da sta pàgene tu puè perdè tutte le date ca è cangiate.
-Ce tu è trasute, tu puè disabbilità st\'avvertimende jndr\'à sezione "Cangiaminde..." de le preferenze tune.',
+Ce tu è trasute, tu puè disabbilità st\'avvertimende jndr\'à sezione "{{int:prefs-editing}}" de le preferenze tune.',
 
 # Content models
 'content-model-wikitext' => 'Uicchiteste',
@@ -1000,8 +996,6 @@ Tu puè vedè ste differenze; pò essere ca stonne cchiù 'mbormaziune jndr'à l
 'revdelete-show-file-submit' => 'Sìne',
 'revdelete-selected' => "'''{{PLURAL:$2|Revisiona selezionete|Revisiune selezionete}} de [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Fatte de l'archivije selezionete|Fatte de l'archivije selezionete}}:'''",
-'revdelete-text' => "'''Le revisiune scangellete e le evende iessene angore jndr'à storie d'a pàgene e jndr'à l'archivije, ma stuezze d'u condenute lore pò essere inaccessibbele a 'u pubbleche.'''
-Otre amministrature sus a {{SITENAME}}ponne angore trasè jndr'à 'u condenute scunnute e 'u ponne scangellà 'n'otra vote ausanne st'inderfacce, senze 'mbostà otre restriziune.",
 'revdelete-confirm' => 'Pe piacere conferme ca tu vuè ccu face sta cose, ce tu è capite le conseguenze e ce quidde ca ste face jè in accorde cu le [[{{MediaWiki:Policy-url}}|reghele]] de Uicchipèdie.',
 'revdelete-suppress-text' => "'A soppressione adda essere ausate '''sulamende''' jndr'à le case seguende:
 * 'Mbormaziune potenzialmende offenzive
@@ -1119,7 +1113,7 @@ Le dettaglie le puè acchià jndr'à l'[{{fullurl:{{#Special:Log}}/delete|page={
 'shown-title' => 'Fà vedè le $1 {{PLURAL:$1|resultete|resultete}} pe pàgene',
 'viewprevnext' => 'Vide ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''Stè 'na pàgene nnumenete \"[[\$1]]\" sus 'a sta Uicchipèdie'''",
-'searchmenu-new' => "'''[[:\$1|Ccreje]] 'a pàgene \"[[:\$1|\$1]]\" sus 'a sta Uicchipèdie!'''",
+'searchmenu-new' => '<strong>[[:$1|Ccreje]] \'a pàgene "[[:$1|$1]]" sus \'a sta Uicchipèdie!</strong> \'Ndruche pure {{PLURAL:$2|0=|\'a pàgene acchiate cu \'a ricerca toje.|le resultate acchiate da \'a ricerche.}}',
 'searchprofile-articles' => 'Vôsce',
 'searchprofile-project' => 'Pàggene de ajiute e de pruggette',
 'searchprofile-images' => 'Multimedia',
@@ -1462,7 +1456,7 @@ Ce tu 'u mitte, a fatje ca è fatte t'avène ricanusciute.",
 'recentchanges-label-unpatrolled' => "Stu cangiamende non g'à state angore condrollate",
 'recentchanges-legend-heading' => "'''Leggende:'''",
 'recentchanges-legend-newpage' => "('ndruche pure [[Special:NewPages|elenghe de le pàggene nuève]])",
-'rcnotefrom' => "Sotte stonne le cangiaminde da '''$2''' (fine a '''$1''' mustrete).",
+'rcnotefrom' => "Sotte stonne le cangiaminde da '''$2''' ('nzigne a '''$1''' fatte vedè).",
 'rclistfrom' => 'Fà vedè le urteme cangiaminde partenne da $1',
 'rcshowhideminor' => '$1 cangiaminde stuèdeche',
 'rcshowhidebots' => '$1 bot',
@@ -1601,6 +1595,8 @@ Avissa verificà 'a storie d'a scangellazzione d'u file apprime de condinuà a c
 'php-uploaddisabledtext' => "Le carecaminde de file sonde disabilitate in PHP.<br />
 Pe piacere verifiche le 'mbostaziune d'u ''file_uploads''.",
 'uploadscripted' => "Stu file condene HTML o codece de script ca ponne essere inderpretete jndr'à 'nu mode sbagliete da le browser.",
+'uploadscriptednamespace' => "Stu file SVG tène 'nu namespace illegale '$1'",
+'uploadinvalidxml' => "L'XML jndr'à 'u file carecate non ge pò essere analizzate.",
 'uploadvirus' => "Alanga toje, 'u file condiene 'nu virus! Dettaglie: $1",
 'uploadjava' => "'U file jè 'nu file de tipe ZIP ca condene 'nu file de classe Java.
 'U carecamende de le file Java non g'è permesse, purcé lore ponne causà l'aggiramende de le restriziune de sicurezze.",
@@ -2541,8 +2537,8 @@ Vide [[Special:BlockList|'a liste de le IP bloccate]] pe revedè le blocche.",
 'change-blocklink' => "cange 'u blocche",
 'contribslink' => 'condrebbute',
 'emaillink' => "manne 'n'e-mail",
-'autoblocker' => 'Autobloccate purcè l\'indirizze IP tue ha state recendemente ausate da "[[User:$1|$1]]".
-\'U mutive date pu blocche de $1 ète: "$2"',
+'autoblocker' => 'Autobloccate purcè l\'indirizze IP tune ha state ausate urtemamende da "[[User:$1|$1]]".
+\'U mutive date pu blocche de $1 ète "$2"',
 'blocklogpage' => 'Archivije de le Bloccaminde',
 'blocklog-showlog' => "Stu utende ha state bloccate precedendemende.
 L'archivije de le bloccaminde 'u puè acchià aqquà sotte pe riferimende:",
@@ -4175,6 +4171,4 @@ In pratiche tutte quidde ca stè jndr'à le doppie parendesi graffe.<br />",
 'expand_templates_generate_xml' => "Fà vedè l'arvule de l'analisi XML",
 'expand_templates_preview' => 'Andeprime',
 
-# Unknown messages
-'uploadinvalidxml' => "L'XML jndr'à 'u file carecate non ge pò essere analizzate.",
 );
index 182cbef..c5759b4 100644 (file)
@@ -479,7 +479,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Отправлять мне копии писем, которые я посылаю другим участникам',
 'tog-diffonly' => 'Не показывать содержание страницы под сравнением двух версий',
 'tog-showhiddencats' => 'Показывать скрытые категории',
-'tog-noconvertlink' => 'Отключить ссылку на преобразование заголовка',
 'tog-norollbackdiff' => 'Не показывать разницу версий после выполнения отката',
 'tog-useeditwarning' => 'Предупреждать, когда я покидаю страницу с несохранёнными изменениями',
 'tog-prefershttps' => 'Всегда использовать защищённое соединение после представления системе',
@@ -567,11 +566,11 @@ $messages = array(
 'category-empty' => "''Эта категория в данный момент пуста.''",
 'hidden-categories' => '{{PLURAL:$1|1=Скрытая категория|Скрытые категории}}',
 'hidden-category-category' => 'Скрытые категории',
-'category-subcat-count' => '{{PLURAL:$2|Эта категория содержит только следующую подкатегорию.|Эта категория содержит $1 {{PLURAL:$1|1=подкатегорию|подкатегории}} из $2 всего.}}',
+'category-subcat-count' => '{{PLURAL:$2|Эта категория содержит только следующую подкатегорию.|Эта категория содержит $1 {{PLURAL:$1|подкатегорию|подкатегорий|подкатегории}} из $2 всего.}}',
 'category-subcat-count-limited' => 'В этой категории {{PLURAL:$1|$1 подкатегория|$1 подкатегорий|$1 подкатегории}}.',
-'category-article-count' => '{{PLURAL:$2|Эта категория содержит единственную страницу.|{{PLURAL:$1|Показана $1 страница|Показано $1 страниц|Показаны $1 страницы}} из $2, находящихся в данной категории.}}',
+'category-article-count' => '{{PLURAL:$2|1=Эта категория содержит единственную страницу.|{{PLURAL:$1|Показана $1 страница|Показано $1 страниц|Показаны $1 страницы}} из $2, {{PLURAL:$2|находящейся|находящихся}} в данной категории.}}',
 'category-article-count-limited' => 'В этой категории {{PLURAL:$1|$1 страница|$1 страниц|$1 страницы|1=только одна страница}}.',
-'category-file-count' => '{{PLURAL:$2|Эта категория содержит единственный файл.|{{PLURAL:$1|Показан $1 файл|Показано $1 файлов|Показаны $1 файла}} из $2, находящихся в данной категории.}}',
+'category-file-count' => '{{PLURAL:$2|1=Эта категория содержит единственный файл.|{{PLURAL:$1|Показан $1 файл|Показано $1 файлов|Показаны $1 файла}} из $2, {{PLURAL:$2|находящегося|находящихся}} в данной категории.}}',
 'category-file-count-limited' => 'В этой категории {{PLURAL:$1|$1 файл|$1 файлов|$1 файла|1=только один файл}}.',
 'listingcontinuesabbrev' => '(продолжение)',
 'index-category' => 'Индексируемые страницы',
@@ -606,7 +605,6 @@ $messages = array(
 'vector-action-protect' => 'Защитить',
 'vector-action-undelete' => 'Восстановить',
 'vector-action-unprotect' => 'Изменить защиту',
-'vector-simplesearch-preference' => 'Включить упрощённую строку поиска (только для оформления «Векторное»)',
 'vector-view-create' => 'Создание',
 'vector-view-edit' => 'Править',
 'vector-view-history' => 'История',
@@ -891,8 +889,7 @@ $2',
 'gotaccountlink' => 'Представьтесь',
 'userlogin-resetlink' => 'Забыли данные для входа?',
 'userlogin-resetpassword-link' => 'Сбросить ваш пароль?',
-'helplogin-url' => 'Help:Представление системе',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Помощь со входом в систему]]',
+'userlogin-helplink2' => 'Помощь по входу',
 'userlogin-loggedin' => 'Вы уже вошли как {{GENDER:$1|$1}}.
 Используйте форму ниже, чтобы войти под другой учётной записью.',
 'userlogin-createanother' => 'Создать другую учётную запись',
@@ -910,7 +907,7 @@ $2',
 'createacct-captcha' => 'Проверка безопасности',
 'createacct-imgcaptcha-ph' => 'Введите текст, который вы видите выше',
 'createacct-submit' => 'Создать учётную запись',
-'createacct-another-submit' => 'Создать ещё одну учётную запись',
+'createacct-another-submit' => 'Создать ещё одну запись',
 'createacct-benefit-heading' => '{{SITENAME}} — совместный труд таких же людей, как вы.',
 'createacct-benefit-body1' => '{{PLURAL:$1|правка|правок|правки}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|статья|статей|статьи}}',
@@ -988,6 +985,10 @@ $2',
 'suspicious-userlogout' => 'Ваш запрос на завершение сеанса отклонён, так как он похож на запрос, отправленный некорректным браузером или кэширующим прокси.',
 'createacct-another-realname-tip' => 'Настоящее имя (необязательное поле).
 Если вы укажете его, то оно будет использовано для того, чтобы показать, кем была внесена правка страницы.',
+'pt-login' => 'Войти',
+'pt-login-button' => 'Войти',
+'pt-createaccount' => 'Создать учётную запись',
+'pt-userlogout' => 'Выйти',
 
 # Email sending
 'php-mail-error-unknown' => 'Неизвестная ошибка в PHP-функции mail()',
@@ -996,7 +997,7 @@ $2',
 
 # Change password dialog
 'changepassword' => 'Изменение пароля',
-'resetpass_announce' => 'Ð\92Ñ\8b Ð¿Ñ\80едÑ\81Ñ\82авилиÑ\81Ñ\8c Ñ\81 Ð¿Ð¾Ð¼Ð¾Ñ\89Ñ\8cÑ\8e Ð²Ñ\80еменного Ð¿Ð°Ñ\80олÑ\8f, Ð¿Ð¾Ð»Ñ\83Ñ\87енного Ð¿Ð¾ Ñ\8dлекÑ\82Ñ\80онной Ð¿Ð¾Ñ\87Ñ\82е. Ð\94лÑ\8f Ð·Ð°Ð²ÐµÑ\80Ñ\88ениÑ\8f Ð²Ñ\85ода Ð² Ñ\81иÑ\81Ñ\82емÑ\83 Ð²Ñ\8b Ð´Ð¾Ð»Ð¶Ð½Ñ\8b Ñ\83Ñ\81Ñ\82ановиÑ\82Ñ\8c Ð½Ð¾Ð²Ñ\8bй Ð¿Ð°Ñ\80олÑ\8c.',
+'resetpass_announce' => 'Для завершения входа в систему вы должны установить новый пароль.',
 'resetpass_text' => '<!-- Добавьте сюда текст -->',
 'resetpass_header' => 'Изменение пароля учётной записи',
 'oldpassword' => 'Старый пароль:',
@@ -1012,8 +1013,16 @@ $2',
 'resetpass-submit-cancel' => 'Отмена',
 'resetpass-wrong-oldpass' => 'Неправильный временный или текущий пароль.
 Возможно, вы уже успешно изменили пароль, или запросили новый временный пароль.',
+'resetpass-recycled' => 'Пожалуйста, измените пароль на что-то, отличное от вашего текущего пароля.',
+'resetpass-temp-emailed' => 'Вы представились с помощью временного пароля, полученного по электронной почте.
+Для завершения входа в систему, необходимо задать новый пароль:',
 'resetpass-temp-password' => 'Временный пароль:',
 'resetpass-abort-generic' => 'Изменение пароля было прервано расширением.',
+'resetpass-expired' => 'Срок действия вашего пароля истёк. Пожалуйста, установите новый пароль для входа в систему.',
+'resetpass-expired-soft' => 'Срок действия вашего пароля истёк, и теперь он должен быть изменён. Пожалуйста, выберите новый пароль или нажмите «{{int:resetpass-submit-cancel}}», чтобы изменить его позже.',
+'resetpass-validity-soft' => 'Ваш пароль является некорректным: $1
+
+Пожалуйста, выберите новый пароль или нажмите «{{int:resetpass-submit-cancel}}», чтобы сбросить его позже.',
 
 # Special:PasswordReset
 'passwordreset' => 'Сброс пароля',
@@ -1409,8 +1418,10 @@ $3 {{GENDER:$3|указал|указала}} следующую причину:
 'revdelete-show-file-submit' => 'Да',
 'revdelete-selected' => "'''{{PLURAL:$2|1=Выбранная версия|Выбранные версии}} страницы [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|1=Выбранная запись|Выбранные записи}} журнала:'''",
-'revdelete-text' => "'''Удалённые версии страниц и события будут показываться в истории страницы и журналах, но часть их содержания будет недоступна обычным посетителям.'''
-Администраторы проекта {{SITENAME}} будут иметь доступ к скрытому содержанию и смогут восстановить его через этот же интерфейс, за исключением случаев, когда установлено дополнительное ограничение.",
+'revdelete-text-text' => 'Удалённые версии будут по-прежнему видны в истории страницы, но части их содержимого будут недоступны для участников.',
+'revdelete-text-file' => 'Удалённые версии файла будут по-прежнему видны в истории страницы, но части их содержимого будут недоступны для участников.',
+'logdelete-text' => 'Удалённые события в журнале будут по-прежнему видны в журналах, но части их содержимого будут недоступны для участников.',
+'revdelete-text-others' => 'Другие администраторы на {{grammar:genitive|{{SITENAME}}}} по-прежнему будет иметь возможность доступа к скрытому содержимому и смогут восстановить его снова через этот же интерфейс, если не установлены дополнительные ограничения.',
 'revdelete-confirm' => 'Пожалуйста, подтвердите, что вы действительно желаете совершить это действие, осознаёте последствия, делаете это в соответствии с [[{{MediaWiki:Policy-url}}|правилами]].',
 'revdelete-suppress-text' => "Сокрытие может производиться '''только''' в следующих случаях:
 * Потенциально клеветническая информация
@@ -1546,13 +1557,14 @@ $1",
 'search-file-match' => '(совпадает с содержимым файла)',
 'search-suggest' => 'Возможно, вы имели в виду «$1».',
 'search-interwiki-caption' => 'Родственные проекты',
-'search-interwiki-default' => '$1 результ.:',
+'search-interwiki-default' => 'Результаты из $1:',
 'search-interwiki-more' => '(ещё)',
 'search-relatedarticle' => 'Связанный',
 'searcheverything-enable' => 'Поиск по всем пространствам имён',
 'searchrelated' => 'связанный',
 'searchall' => 'все',
 'showingresults' => "Ниже {{PLURAL:$1|1=показан результат|показаны  результаты}} с № '''$2''' и вплоть до № '''$1'''.",
+'showingresultsinrange' => 'Ниже показано до {{PLURAL:$1|<strong>1</strong> результата|<strong>$1</strong> результатов|<strong>$1</strong> результата}} в диапазоне от <strong>$2</strong> до <strong>$3</strong>.',
 'showingresultsnum' => "Ниже {{PLURAL:$3|1=показан|показаны}} '''$3''' {{PLURAL:$3|результат|результатов|результата}}, начиная с № '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|1=Результат '''$1''' из '''$3'''|Результаты '''$1—$2''' из '''$3'''}} для «'''$4'''»",
 'search-nonefound' => 'Соответствий запросу не найдено.',
@@ -1870,14 +1882,26 @@ $1",
 'recentchanges-legend-heading' => "'''Легенда:'''",
 'recentchanges-legend-newpage' => '(см. также [[Special:NewPages|список новых страниц]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "Ниже перечислены изменения с '''$2''' (не более '''$1''').",
+'rcnotefrom' => 'Ниже перечислены изменения с <strong>$2</strong> (показано не более <strong>$1</strong>).',
 'rclistfrom' => 'Показать изменения с $1.',
 'rcshowhideminor' => '$1 малые правки',
+'rcshowhideminor-show' => 'Показать',
+'rcshowhideminor-hide' => 'Скрыть',
 'rcshowhidebots' => '$1 ботов',
+'rcshowhidebots-show' => 'Показать',
+'rcshowhidebots-hide' => 'Скрыть',
 'rcshowhideliu' => '$1 представившихся участников',
+'rcshowhideliu-show' => 'Показать',
+'rcshowhideliu-hide' => 'Скрыть',
 'rcshowhideanons' => '$1 непредставившихся',
+'rcshowhideanons-show' => 'Показать',
+'rcshowhideanons-hide' => 'Скрыть',
 'rcshowhidepatr' => '$1 проверенные правки',
+'rcshowhidepatr-show' => 'Показать',
+'rcshowhidepatr-hide' => 'Скрыть',
 'rcshowhidemine' => '$1 свои правки',
+'rcshowhidemine-show' => 'Показать',
+'rcshowhidemine-hide' => 'Скрыть',
 'rclinks' => 'Показать последние $1 изменений за $2 дней<br />$3',
 'diff' => 'разн.',
 'hist' => 'история',
@@ -2004,6 +2028,8 @@ $1",
 'uploaddisabledtext' => 'Загрузка файлов отключена.',
 'php-uploaddisabledtext' => 'Загрузка файлов отключена в настройках PHP. Пожалуйста, проверьте значение свойства file_uploads.',
 'uploadscripted' => 'Файл содержит HTML-код или скрипт, который может быть ошибочно обработан браузером.',
+'uploadscriptednamespace' => "Этот SVG-файл содержит некорректное пространство имён '$1'",
+'uploadinvalidxml' => 'XML в загруженном файле не может быть проанализирован.',
 'uploadvirus' => 'Файл содержит вирус! См. $1',
 'uploadjava' => 'Файл представляет собой ZIP-архив, содержащий .class файл Java.
 Загрузка Java-файлов не допускается из-за соображений безопасности.',
@@ -2370,10 +2396,20 @@ $1',
 'deadendpagestext' => 'Следующие страницы не содержат ссылок на другие страницы в этой вики.',
 'protectedpages' => 'Защищённые страницы',
 'protectedpages-indef' => 'Только бессрочные защиты',
+'protectedpages-summary' => 'На этой странице перечислены существующие страницы, которые в настоящее время защищены. Для списка названий, которые защищены от создания см. [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Только каскадная защита',
 'protectedpages-noredirect' => 'Скрыть перенаправления',
 'protectedpagesempty' => 'В настоящий момент нет защищённых страниц с указанными параметрами',
+'protectedpages-timestamp' => 'Дата/время',
+'protectedpages-page' => 'Страница',
+'protectedpages-expiry' => 'Истекает',
+'protectedpages-performer' => 'Защита участника',
+'protectedpages-params' => 'Параметры защиты',
+'protectedpages-reason' => 'Причина',
+'protectedpages-unknown-timestamp' => 'Неизвестно',
+'protectedpages-unknown-performer' => 'Неизвестный участник',
 'protectedtitles' => 'Защищённые названия',
+'protectedtitles-summary' => 'На этой странице перечислены названия, которые защищены от создания. Для списка существующих страниц, которые в настоящее время защищены, см. [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'В настоящий момент нет запрещённых названий с указанными параметрами.',
 'listusers' => 'Список участников',
 'listusers-editsonly' => 'Показать только тех участников, кто сделал хотя бы одну правку',
@@ -2650,7 +2686,7 @@ $UNWATCHURL
 'delete-warning-toobig' => 'У этой страницы очень длинная история изменений, более $1 {{PLURAL:$1|версии|версий}}.
 Её удаление может привести к нарушению нормальной работы базы данных сайта «{{SITENAME}}»;
 действуйте с осторожностью.',
-'deleting-backlinks-warning' => "'''Предупреждение.''' Другие страницы ссылаются или содержат страницу, которую вы собираетесь удалить.",
+'deleting-backlinks-warning' => "'''Предупреждение.''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Другие страницы]] ссылаются на страницу, которую вы собираетесь удалить или содержат её.",
 
 # Rollback
 'rollback' => 'Откатить изменения',
@@ -2823,8 +2859,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Этот IP-адрес в данный момент заблокирован.
 Ниже приведена последняя запись из журнала блокировок:',
 'sp-contributions-search' => 'Поиск вклада',
+'sp-contributions-suppresslog' => 'удалённый вклад участника',
 'sp-contributions-username' => 'IP-адрес или имя участника:',
 'sp-contributions-toponly' => 'Показывать только правки, являющиеся последними версиями',
+'sp-contributions-newonly' => 'Показывать только правки, являющиеся созданием страниц',
 'sp-contributions-submit' => 'Найти',
 
 # What links here
@@ -2926,8 +2964,8 @@ $1',
 'change-blocklink' => 'изменить блокировку',
 'contribslink' => 'вклад',
 'emaillink' => 'отправить письмо',
-'autoblocker' => 'Ð\90вÑ\82облокиÑ\80овка Ð¸Ð·-за Ñ\81овпадениÑ\8f Ð²Ð°Ñ\88его IP-адÑ\80еÑ\81а Ñ\81 Ð°Ð´Ñ\80еÑ\81ом, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ð½ÐµÐ´Ð°Ð²Ð½Ð¾ Ð¸Ñ\81полÑ\8cзовал [[User:$1|$1]].
-Причина блокировки $1 — «$2».',
+'autoblocker' => 'Ð\90вÑ\82облокиÑ\80овка Ð¸Ð·-за Ñ\82ого, Ñ\87Ñ\82о Ð²Ð°Ñ\88 IP-адÑ\80еÑ\81 Ð½ÐµÐ´Ð°Ð²Ð½Ð¾ Ð¸Ñ\81полÑ\8cзовал Â«[[User:$1|$1]]».
+Причина блокировки $1ː «$2»',
 'blocklogpage' => 'Журнал блокировок',
 'blocklog-showlog' => '{{GENDER:$1|Этот участник уже блокировался|Эта участница уже блокировалась}} ранее.
 Ниже приведён журнал блокировок:',
@@ -3135,6 +3173,7 @@ $2',
 'thumbnail_image-type' => 'Данный тип изображения не поддерживается',
 'thumbnail_gd-library' => 'Неполная конфигурация библиотеки GD, отсутствует функция $1',
 'thumbnail_image-missing' => 'По-видимому, отсутствует файл $1',
+'thumbnail_image-failure-limit' => 'Было сделано слишком много неудачных попыток ($1 или больше) формирования этого эскиза. Пожалуйста, повторите попытку позже.',
 
 # Special:Import
 'import' => 'Импортирование страниц',
@@ -3979,10 +4018,10 @@ $5
 
 # Delete conflict
 'deletedwhileediting' => "'''Внимание'''. Эта страница была удалена после того, как вы начали её править!",
-'confirmrecreate' => "{{GENDER:$1|Участник&nbsp;|Участница&nbsp;|}}[[User:$1|$1]] ([[User talk:$1|обс]]) {{GENDER:$1|удалил|удалила}} эту страницу после того, как вы начали её редактировать, по следующей причине:
+'confirmrecreate' => "{{GENDER:$1|Участник|Участница|}}&nbsp;[[User:$1|$1]] ([[User talk:$1|обс]]) {{GENDER:$1|удалил|удалила}} эту страницу после того, как вы начали её редактировать, по следующей причине:
 : ''$2''.
\9fожалÑ\83йÑ\81Ñ\82а, Ð¿Ð¾Ð´Ñ\82веÑ\80диÑ\82е, Ñ\87Ñ\82о Ð²Ñ\8b Ñ\85оÑ\82иÑ\82е Ð²Ð¾Ñ\81Ñ\81Ñ\82ановить эту страницу.",
-'confirmrecreate-noreason' => '{{GENDER:$1|Участник&nbsp;|Участница&nbsp;|}}[[User:$1|$1]] ([[User talk:$1|обс]]) {{GENDER:$1|удалил|удалила}} эту страницу после того, как вы начали её редактировать. Пожалуйста, подтвердите, что вы действительно хотите восстановить эту страницу.',
\9fожалÑ\83йÑ\81Ñ\82а, Ð¿Ð¾Ð´Ñ\82веÑ\80диÑ\82е, Ñ\87Ñ\82о Ð²Ñ\8b Ñ\85оÑ\82иÑ\82е Ð²Ð½Ð¾Ð²Ñ\8c Ñ\81оздать эту страницу.",
+'confirmrecreate-noreason' => '{{GENDER:$1|Участник|Участница|}}&nbsp;[[User:$1|$1]] ([[User talk:$1|обс]]) {{GENDER:$1|удалил|удалила}} эту страницу после того, как вы начали её редактировать. Пожалуйста, подтвердите, что вы действительно хотите вновь создать эту страницу.',
 'recreate' => 'Создать заново',
 
 'unit-pixel' => ' пикс.',
@@ -4149,7 +4188,7 @@ $5
 'duplicate-defaultsort' => 'Внимание. Ключ сортировки по умолчанию «$2» переопределяет прежний ключ сортировки по умолчанию «$1».',
 
 # Special:Version
-'version' => 'Версия MediaWiki',
+'version' => 'Версия',
 'version-extensions' => 'Установленные расширения',
 'version-specialpages' => 'Служебные страницы',
 'version-parserhooks' => 'Перехватчики синтаксического анализатора',
@@ -4452,6 +4491,4 @@ MediaWiki распространяется в надежде, что она бу
 'expand_templates_generate_rawhtml' => 'Показать HTML',
 'expand_templates_preview' => 'Предпросмотр',
 
-# Unknown messages
-'uploadinvalidxml' => 'XML в загруженном файле не может быть проанализирован.',
 );
index a05af97..85f60a6 100644 (file)
@@ -279,7 +279,6 @@ $messages = array(
 'vector-action-protect' => 'Всокотити',
 'vector-action-undelete' => 'Обновити',
 'vector-action-unprotect' => 'Змінити замок',
-'vector-simplesearch-preference' => 'Поволити спрощене поле гляданя (лем взгляд Vector )',
 'vector-view-create' => 'Створити',
 'vector-view-edit' => 'Едітовати',
 'vector-view-history' => 'Видїти історію',
@@ -513,7 +512,8 @@ $2',
 'invalidtitle-knownnamespace' => 'Непряавилна назва в просторї назв „$2“ і текстом „$3“',
 'invalidtitle-unknownnamespace' => 'Неправилна назва з незнамым чіслом простору назв $1 і текстом „$2“',
 'exception-nologin' => 'Не сьте приголошеный(а)',
-'exception-nologin-text' => 'Гевся сторінка або дїя потребує, жебы сьте были на тотїй вікі приголошены.',
+'exception-nologin-text' => 'Жебы ся дістати но тоту сторінку ся просиме [[Special:Userlogin|приголосьте]].',
+'exception-nologin-text-manual' => 'Жебы ся дістати на тоту сторінку ся мусите $1.',
 
 # Virus scanner
 'virus-badscanner' => "Зла конфіґурація: незнамый антивіровый проґрам: ''$1''",
@@ -561,8 +561,8 @@ $2',
 'gotaccountlink' => 'Приголошіня',
 'userlogin-resetlink' => 'Забыли сьте вашы даны на приголошіня?',
 'userlogin-resetpassword-link' => 'Забыли сьте гесло?',
-'helplogin-url' => 'Help:Приголошіня',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Поміч з приголошованём]]',
+'userlogin-loggedin' => 'Уж сьте {{GENDER:$1|приголошеный|приголошена}} як $1.
+Хоснуйте формулар долов жебы сьте ся приголосили як другый хоснователь.',
 'userlogin-createanother' => 'Створити інше конто',
 'createacct-join' => 'Ниже уведьте вашы інформації',
 'createacct-another-join' => 'Ниже уведьте інформації нового конта',
@@ -629,8 +629,8 @@ $2',
 Жебы ся то не зловжывало та гесло може быти заслане лем раз за $1 {{PLURAL:$1|годину|годины|годин}}.',
 'mailerror' => 'Хыба засыланя ел. пошты: $1',
 'acct_creation_throttle_hit' => 'Хоснователї приходячі з вашой IP адресы уж днесь створили {{PLURAL:$1|конто|конта|конт}}, што є дозволене максімум. Зато теперь не є дозволено з той IP адресы закладати далшы конта.',
-'emailauthenticated' => 'Ð\90дÑ\80еÑ\81а Ð²Ð°Ñ\88ой ÐµÐ». Ð¿Ð¾Ñ\88Ñ\82Ñ\8b Ð±Ñ\8bла Ð¾Ð²Ñ\96Ñ\80ена Ð´Ð½Ñ\8f $2 о $3.',
-'emailnotauthenticated' => 'Ð\90дÑ\80еÑ\81а Ð²Ð°Ñ\88ой ÐµÐ». Ð¿Ð¾Ñ\88Ñ\82Ñ\8b Ð´Ð¾Ñ\82епеÑ\80Ñ\8c Ð½Ðµ Ð±Ñ\8bла Ð¾Ð²Ñ\96Ñ\80ена, Ñ\84Ñ\83нкÑ\86Ñ\96Ñ\97 ÐµÐ». Ð¿Ð¾Ñ\88Ñ\82Ñ\8b Ñ\81Ñ\83Ñ\82Ñ\8c Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пны.',
+'emailauthenticated' => 'Ð\90дÑ\80еÑ\81а Ð²Ð°Ñ\88ой ÐµÐ». Ð¿Ð¾Ñ\88Ñ\82Ñ\8b Ð±Ñ\8bла Ð¿Ð¾Ñ\82веÑ\80джнена $2 о $3.',
+'emailnotauthenticated' => 'Ð\90дÑ\80еÑ\81а Ð²Ð°Ñ\88ой ÐµÐ». Ð¿Ð¾Ñ\88Ñ\82Ñ\8b Ð´Ð¾Ñ\82епеÑ\80Ñ\8c Ð½Ðµ Ð±Ñ\8bла Ð¿Ð¾Ñ\82веÑ\80ждена. Ð£ Ð½Ð°Ñ\81Ñ\82Ñ\83пнÑ\8bÑ\85 Ñ\84Ñ\83нкÑ\86Ñ\96й Ð½Ðµ Ð±Ñ\83дÑ\83Ñ\82Ñ\8c Ð¿Ð¾Ñ\81Ñ\8bланÑ\8b Ð¶Ð°Ð´Ð½Ñ\8b Ð¼ÐµÐ¹Ð»ы.',
 'noemailprefs' => 'Шпеціфікуйте адресу ел. пошты, жебы наслїднуючі можности могли фунґовати.',
 'emailconfirmlink' => 'Потвердьте свою адресу ел. пошты',
 'invalidemailaddress' => 'Уведена адреса ел. пошты не може быти прията, бо она не має правилный формат.
@@ -651,6 +651,9 @@ $2',
 'suspicious-userlogout' => 'Ваша пожадавка на одголошіня была одвергнута, бо вызерає то так, же была послана розбитым переглядачом або кешуючім проксі-сервером.',
 'createacct-another-realname-tip' => 'Правдиве імя є волительне.
 Кідь вы зволите го додати, тото буде пак хосноване на доданя участникового попису про ёго роботу.',
+'pt-login' => 'Приголошіня',
+'pt-createaccount' => 'Створити конто',
+'pt-userlogout' => 'Одголосити ся',
 
 # Email sending
 'php-mail-error-unknown' => 'Незнама хыба у PHP mail() функції',
@@ -659,21 +662,27 @@ $2',
 
 # Change password dialog
 'changepassword' => 'Змінити гесло',
-'resetpass_announce' => 'Ð\9fÑ\80иголоÑ\88Ñ\83Ñ\94Ñ\82е Ñ\81Ñ\8f Ð´Ð¾Ñ\87аÑ\81нÑ\8bм Ð³ÐµÑ\81лом, ÐºÐ¾Ñ\82Ñ\80е Ð±Ñ\8bло Ð¿Ð¾Ñ\81лане ÐµÐ»ÐµÐºÑ\82Ñ\80онÑ\96Ñ\87нов Ð¿Ð¾Ñ\88Ñ\82ов. Ð\9fÑ\80о Ð·Ð°ÐºÐ¾Ð½Ñ\87Ñ\96нÑ\8f Ð¿Ñ\80иголоÑ\88Ñ\96нÑ\8f Ñ\82Ñ\80еба Ð·Ð°Ð´Ð°Ñ\82и Ð½Ð¾Ð²Ðµ Ð³ÐµÑ\81ло Ñ\82Ñ\83:',
+'resetpass_announce' => 'Ð\96ебÑ\8b Ñ\81Ñ\8cÑ\82е Ð·Ð°Ð²ÐµÑ\80Ñ\88Ñ\8bли Ð¿Ñ\80иголоÑ\88Ñ\96нÑ\8f, Ð¼Ñ\83Ñ\81иÑ\82е Ñ\81обÑ\96 Ð½Ð°Ñ\81Ñ\82авиÑ\82и Ð½Ð¾Ð²Ðµ Ð³ÐµÑ\81ло.',
 'resetpass_header' => 'Зміна гесла',
 'oldpassword' => 'Старе гесло:',
 'newpassword' => 'Нове гесло:',
 'retypenew' => 'Напиште знову нове гесло:',
 'resetpass_submit' => 'Наставити гесло і приголосити ся',
 'changepassword-success' => 'Ваше гесло было успішно змінено!',
+'changepassword-throttled' => 'Зробили сьте дуже много спроб о приголошіня.
+Просиме Вас, почекайте $1 перед далшов спробов.',
 'resetpass_forbidden' => 'Гесла не є можне змінити',
 'resetpass-no-info' => 'Ку тій сторінцї мають прямый приступ лем приголошены хоснователї.',
 'resetpass-submit-loggedin' => 'Змінити гесло',
 'resetpass-submit-cancel' => 'Сторно',
 'resetpass-wrong-oldpass' => 'Неправилне дочасне або актуалне гесло.
 Може сьте собі уж гесло успішно змінили, або сьте выжадали нове дочасне гесло.',
+'resetpass-recycled' => 'Нове гесло собі дайте дашто друге як ваше теперїшнє гесло.',
+'resetpass-temp-emailed' => 'Приголошуєте ся дочасным геслом засланым імейлом.
+Жебы сьте завершыли приголошіня, гев сові наставте нове гесло:',
 'resetpass-temp-password' => 'Дочасне гесло:',
 'resetpass-abort-generic' => 'Зміна гесла заблокована была росшырїнём.',
+'resetpass-expired' => 'Платность вашого гесла скінчіла. На приголошіня собі наставте нове гесло.',
 
 # Special:PasswordReset
 'passwordreset' => 'Ресет гесла',
@@ -720,6 +729,8 @@ $2
 'changeemail-password' => 'Ваше гесло на портал {{SITENAME}}:',
 'changeemail-submit' => 'Змінити імейл',
 'changeemail-cancel' => 'Сторно',
+'changeemail-throttled' => 'Зробили сьте дуже много спроб о приголошіня.
+Просиме Вас, почекайте $1 перед далшов спробов.',
 
 # Special:ResetTokens
 'resettokens' => 'Реініціалізація клічів',
@@ -1041,9 +1052,6 @@ $3 зазначів тоту причіну: ''$2''",
 'revdelete-show-file-submit' => 'Гей',
 'revdelete-selected' => "'''{{PLURAL:$2|Выбрана ревізія|Выбраны ревізії}} з [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Выбрана протоколована подїя|Выбраны протоколованы подїї}}:'''",
-'revdelete-text' => "'''Змазаны верзії і подїї будуть надале зображены в історії сторінкы і протоколовачіх записах, але дакотры їх части не будуть публікованы.'''
-Другы адміністраторы {{GRAMMAR:2sg|{{SITENAME}}}} собі будуть мочі схованый обсяг перезерати і помочов того самого інтерфейсу го будуть мочі обновити,
-кідь не были наставлены далшы обмеджіня.",
 'revdelete-confirm' => 'Просиме Вас, потвердьте, же то хочете справды зробити, же собі усвідомлюєте резултат і же є то в згодї з  [[{{MediaWiki:Policy-url}}|правилами]].',
 'revdelete-suppress-text' => "Затаёваня бы ся мало хосновати  ''лем''' в такых припадах:
 * Потенціално огваряючі інформації
@@ -1156,7 +1164,7 @@ $1",
 'shown-title' => 'Вказати $1 {{PLURAL:$1|резултат|резултаты|резултатів}} на сторінку',
 'viewprevnext' => 'Перегляднути ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''У тій вікі є сторінка з назвов «[[:$1]]»'''",
-'searchmenu-new' => "'''Створити сторінку «[[:$1]]» у тій вікі!'''",
+'searchmenu-new' => '<strong>Створити сторінку на тій вікі „[[:$1]]“!</strong> {{PLURAL:$2|0=|Тыж собі посмотьте сторінку найдену вашым гляданём.|Тыж посмотьте сторінкы найдены вашым гляданём.}}',
 'searchprofile-articles' => 'Статї',
 'searchprofile-project' => 'Сторінкы помочі і проєкту',
 'searchprofile-images' => 'Мултімедія',
@@ -1492,15 +1500,28 @@ $1",
 'recentchanges-label-minor' => 'Тото є мала зміна',
 'recentchanges-label-bot' => 'Тото едітованя зроблене ботом',
 'recentchanges-label-unpatrolled' => 'Тота зміна дотеперь не была патролёвана.',
+'recentchanges-legend-heading' => "'''Леґенда:'''",
 'recentchanges-legend-newpage' => '$1 — нова сторінка',
-'rcnotefrom' => 'Ð\9dиже {{PLURAL:$1|Ñ\94\81Ñ\83Ñ\82Ñ\8c\94}} Ð½Ð°Ð¹Ð²ÐµÑ\86е <b>$1</b> {{PLURAL:$1|змÑ\96на|змÑ\96нÑ\8b|змÑ\96н}} Ð¾Ð´ <b>$2</b>.',
+'rcnotefrom' => 'Ð\94олов Ñ\81Ñ\83Ñ\82Ñ\8c Ð²ÐºÐ°Ð·Ð°Ð½Ñ\8b Ð·Ð¼Ñ\96нÑ\8b Ð¾Ð´ <strong>$2</strong> (до <strong>$1</strong>).',
 'rclistfrom' => 'Вказати едітованя почінаючі з $1.',
 'rcshowhideminor' => '$1 маленькы едітованя',
+'rcshowhideminor-show' => 'Вказати',
+'rcshowhideminor-hide' => 'Сховати',
 'rcshowhidebots' => '$1 ботів',
-'rcshowhideliu' => '$1 приголошеных',
+'rcshowhidebots-show' => 'Вказати',
+'rcshowhidebots-hide' => 'Сховати',
+'rcshowhideliu' => '$1 реґістрованых хоснователїв',
+'rcshowhideliu-show' => 'Вказати',
+'rcshowhideliu-hide' => 'Сховати',
 'rcshowhideanons' => '$1 анонімів',
+'rcshowhideanons-show' => 'Вказати',
+'rcshowhideanons-hide' => 'Сховати',
 'rcshowhidepatr' => '$1 перевірене едітованя',
+'rcshowhidepatr-show' => 'Вказати',
+'rcshowhidepatr-hide' => 'Сховати',
 'rcshowhidemine' => '$1 мої едітованя',
+'rcshowhidemine-show' => 'Вказати',
+'rcshowhidemine-hide' => 'Сховати',
 'rclinks' => 'Вказати послїднї $1 зміны за $2 днїв<br />$3',
 'diff' => 'різн.',
 'hist' => 'історія',
@@ -1970,6 +1991,11 @@ $1',
 'protectedpages-indef' => 'Лем замкы на нестановлено',
 'protectedpages-cascade' => 'Лем каскадовы замкы',
 'protectedpagesempty' => 'Жадна сторінка не є замкнута з тыма параметрами.',
+'protectedpages-timestamp' => 'Часова значка',
+'protectedpages-expiry' => 'Кінчіть',
+'protectedpages-reason' => 'Прічіна',
+'protectedpages-unknown-timestamp' => 'Не є знаме',
+'protectedpages-unknown-performer' => 'Незнамый хоснователь',
 'protectedtitles' => 'Замкнуты назвы сторінок',
 'protectedtitlesempty' => 'Жадна назва не є замкнута з тыма параметрами.',
 'listusers' => 'Список хоснователїв',
@@ -2389,7 +2415,7 @@ $1',
 'contributions' => 'Приспівкы {{GENDER:$1|хоснователя|хоснователькы}}',
 'contributions-title' => 'Приспівок хоснователя $1',
 'mycontris' => 'Приспівкы',
-'contribsub2' => 'Приспівок $1 ($2)',
+'contribsub2' => '{{GENDER:$3|хоснователї|хоснователькы}} $1 ($2)',
 'nocontribs' => 'Ненайджены жадны зміны за тыма крітеріями.',
 'uctop' => '(остатня)',
 'month' => 'Од місяця (і скоре):',
@@ -2699,6 +2725,7 @@ $1',
 'allmessages-prefix' => 'Філтер за префіксом:',
 'allmessages-language' => 'Язык:',
 'allmessages-filter-submit' => 'Выконати',
+'allmessages-filter-translate' => 'Переложыти',
 
 # Thumbnails
 'thumbnail-more' => 'Звекшыти',
@@ -2968,7 +2995,7 @@ $1',
 'svg-long-desc' => 'SVG-файл, номінално $1 × $2 пікселів, розмір файлу: $3',
 'svg-long-desc-animated' => 'Анімованый SVG-файл, номінално $1 × $2 пікселів, розмір файлу: $3',
 'svg-long-error' => 'Неправильный файл SVG: $1',
-'show-big-image' => 'Ð\9fовне Ñ\80озлиÑ\88Ñ\96нÑ\8f',
+'show-big-image' => 'Ð\9eÑ\80Ñ\96Ò\91Ñ\96налнÑ\8bй Ñ\84айл',
 'show-big-image-preview' => 'Розмір того нагляду: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Інше|іншы}} розлишіня: $1.',
 'show-big-image-size' => '$1 × $2 пікселів',
index 30bbcc3..e39cf04 100644 (file)
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'Subliniadză ligâturâ:',
-'tog-hideminor' => 'Ascundi alâxirile ńici.',
-'tog-numberheadings' => 'Numără automat secțiunili.',
+'tog-underline' => 'Subliniaḑă ligâtura:',
+'tog-hideminor' => 'Ascundeari a alâxiriloru ńiți di-tu nalili alâxiri',
+'tog-numberheadings' => 'Numirari automatâ a secțiuniloru',
 'tog-editondblclick' => "Aravdă alâxirea frundzâl'ei ti dublu click (caftă JavaScript)",
 
-'underline-always' => 'Dipriunâ',
+'underline-always' => 'Totna',
 'underline-never' => 'Vârâoarâ',
 
 # Dates
-'sunday' => 'Dumãnicã',
-'monday' => 'Lune',
-'tuesday' => 'Martsã',
-'wednesday' => 'Njercure',
-'thursday' => 'Gioia',
-'friday' => 'Vinirã',
-'saturday' => 'Sãmbãtã',
-'january' => 'yinar',
-'february' => 'È\99curtu',
-'march' => 'marțu',
-'april' => 'aprir',
-'may_long' => 'maiu',
-'june' => 'cirișar',
-'july' => 'alunar',
-'august' => 'avgustu',
-'september' => 'yizmăciun',
-'october' => 'xumedru',
-'november' => 'brumar',
-'december' => 'andreu',
-'january-gen' => 'Yinar',
-'february-gen' => 'Shcurtu',
-'march-gen' => 'Martsu',
-'april-gen' => 'Aprir',
-'may-gen' => 'Mailu',
-'june-gen' => 'Cirishar',
-'july-gen' => 'Alunar',
+'sunday' => 'dumânicâ',
+'monday' => 'luni',
+'tuesday' => 'marțâ',
+'wednesday' => 'ńiercuri',
+'thursday' => 'gioi',
+'friday' => 'viniri',
+'saturday' => 'sâmbâtâ',
+'january' => 'Yinaru',
+'february' => 'È\98curtu',
+'march' => 'Marțu',
+'april' => 'Apriiru',
+'may_long' => 'Maiu',
+'june' => 'Cirișaru',
+'july' => 'Alunaru',
+'august' => 'Avgustu',
+'september' => 'Yizmâciunu',
+'october' => 'Sumedru',
+'november' => 'Brumaru',
+'december' => 'Andreu',
+'january-gen' => 'Yinaru',
+'february-gen' => 'Șcurtu',
+'march-gen' => 'Marțu',
+'april-gen' => 'Apriiru',
+'may-gen' => 'Maiu',
+'june-gen' => 'Cirișaru',
+'july-gen' => 'Alunaru',
 'august-gen' => 'Avgustu',
-'september-gen' => 'Yizmaciunjle',
-'october-gen' => 'Xumedru',
-'november-gen' => 'Brumar',
-'december-gen' => 'Andreulu',
-'jan' => 'yinar',
-'feb' => 'șcurtu',
-'mar' => 'marțu',
-'apr' => 'aprir',
-'may' => 'maiu',
-'jun' => 'cirișar',
-'jul' => 'alunar',
-'aug' => 'avgustu',
-'sep' => 'yizmăciun',
-'oct' => 'xumedru',
-'nov' => 'brumar',
-'dec' => 'andreu',
+'september-gen' => 'Yizmâciunu',
+'october-gen' => 'Sumedru',
+'november-gen' => 'Brumaru',
+'december-gen' => 'Andreu',
+'jan' => 'yin',
+'feb' => 'șcur',
+'mar' => 'mar',
+'apr' => 'apr',
+'may' => 'mai',
+'jun' => 'cir',
+'jul' => 'alun',
+'aug' => 'avg',
+'sep' => 'yiz',
+'oct' => 'sum',
+'nov' => 'brum',
+'dec' => 'andr',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Categorie|Categorii}}',
-'category_header' => 'Frândzâ ti categoria "$1"',
+'category_header' => 'Frânḑâ tu categoria "$1"',
 'hidden-categories' => '{{PLURAL:$1|Categorie ascumsâ|Categorii ascumsi}}',
 
-'article' => 'Articlu',
-'newwindow' => "(discl'idi tu nauâ fereastă)",
+'article' => 'Articolu',
+'newwindow' => '(si discľidi tu unâ nauâ fireastrâ)',
 'cancel' => 'Alasã',
 'moredotdotdot' => 'Ma multu...',
 'mytalk' => 'Zburare-a mea',
 'navigation' => 'Navigație',
 
 # Cologne Blue skin
-'qbfind' => 'Caftă',
-'qbedit' => 'Alãxiri',
-'qbpageoptions' => 'Aestă frândză',
-'qbmyoptions' => 'Frândzili a meali',
+'qbfind' => 'Caftâ',
+'qbedit' => 'Alâxiri',
+'qbpageoptions' => 'Aestă frână',
+'qbmyoptions' => 'Frânili a meali',
 
 # Vector skin
 'vector-action-addsection' => 'Dimândari nauâ',
-'vector-view-history' => 'Vedz istoric',
+'vector-view-history' => 'Veḑ istoricu',
 'namespaces' => 'Spațiu di numi',
-'variants' => 'Variante',
-
-'tagline' => 'Dit {{SITENAME}}',
-'help' => 'Agiutor',
-'search' => 'Câftare',
-'searchbutton' => 'Caftã',
-'go' => 'Du-vã',
-'searcharticle' => 'Du-vã',
-'history_short' => 'Istoric',
+'variants' => 'Varianti',
+
+'tagline' => 'Di-tu {{SITENAME}}',
+'help' => 'Agiutoru',
+'search' => 'Câftari',
+'searchbutton' => 'Câftari',
+'go' => 'Du-vâ',
+'searcharticle' => 'Du-vâ',
+'history_short' => 'Istoricu',
 'printableversion' => 'Verzia ti tipuseare',
-'permalink' => 'Legătură permanentă',
+'permalink' => 'Ligâturâ permanentâ',
 'edit' => 'Alâxire',
-'delete' => 'Ashcirdzire',
+'delete' => 'Așcirḑire',
 'protect' => 'Apurã',
-'newpage' => 'Frândzâ nauă',
+'newpage' => 'Frânḑâ nauâ',
 'talkpagelinktext' => 'Zburari',
 'talk' => 'Discusiur',
 'views' => 'Videri',
@@ -118,30 +118,30 @@ $messages = array(
 'disclaimers' => 'Nipricunuschire',
 'edithelp' => 'Agiutor ti alãxire',
 'helppage' => 'Help:Conținut',
-'mainpage' => 'Prota frândză',
-'mainpage-description' => 'Prota frãndzã',
-'portal' => 'Portal-a comunitatiľei',
-'portal-url' => 'Project:Portal-a comunitatiľei',
+'mainpage' => 'Prota frânḑâ',
+'mainpage-description' => 'Prota frâná¸\91â',
+'portal' => 'Portala comunitatiľei',
+'portal-url' => 'Proiectu:Portalu a comunitatiľei',
 'privacy' => 'Politică di confidențialitate',
 
-'youhavenewmessagesmulti' => 'Avets nãi dimãndãri pi $1',
+'youhavenewmessagesmulti' => 'Aveț năi dimândări pi $1',
 'editsection' => 'alâxire',
 'editold' => 'Alâxiri',
 'viewsourceold' => 'videari izvor',
 'viewsourcelink' => 'videari izvor',
 'editsectionhint' => 'Alâxire parti: $1',
 'site-atom-feed' => '$1 Atom feed',
-'red-link-title' => '$1 (frândza nu easti)',
+'red-link-title' => '$1 (frâna nu easti)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Articlu',
-'nstab-user' => 'Frãndza-a ufilizitirolui',
-'nstab-special' => 'Frândzâ specială',
-'nstab-template' => 'Format',
+'nstab-main' => 'Frânḑâ',
+'nstab-user' => 'Frâná¸\91â a utilizatorului',
+'nstab-special' => 'Frândzâ specialâ',
+'nstab-template' => 'Formatu',
 'nstab-category' => 'Categorie',
 
 # General errors
-'viewsource' => 'Videts-u fãntãnã',
+'viewsource' => 'Videț-u fântânâ',
 
 # Login and logout pages
 'yourname' => 'Numa di ufilizitor:',
@@ -278,10 +278,10 @@ $messages = array(
 'tooltip-p-logo' => 'Prota frãndzã',
 'tooltip-n-mainpage' => 'Vedz prota frândză',
 'tooltip-t-specialpages' => 'Unâ listâ di tuti frândzele',
-'tooltip-ca-nstab-category' => 'Vedz frândza di categorie',
+'tooltip-ca-nstab-category' => 'Veḑ categoria',
 
 # Special:NewFiles
-'ilsubmit' => 'Caftã',
+'ilsubmit' => 'Caftâ',
 
 # Multipage image navigation
 'imgmultigo' => 'Du-vã!',
index 600196b..a7a3a04 100644 (file)
@@ -195,7 +195,6 @@ $messages = array(
 
 # Recent changes
 'recentchanges' => 'шумбајрае рецентае',
-'rcnote' => "Маи хос се флај {{PLURAL:\$|ултима модификаре|ултимеле '''\$1''' модификајри}} дин {{PLURAL:\$2|ултима зи|ултимеле '''\$2''' зиле}}, енцепонд цу \$5, \$4.",
 'rcshowhideminor' => '$1 модификајриле миноре',
 'rcshowhidebots' => '$1 роботи',
 'rcshowhideliu' => '$1 утилизатори приласнаери',
index d1c1c5c..6cb7107 100644 (file)
@@ -195,7 +195,6 @@ Te rog notari la din kontribuţi al {{SITENAME}} sunt konsideraere relesavat sup
 
 # Recent changes
 'recentchanges' => 'şumbărae recentae',
-'rcnote' => "Mai hos se flă {{PLURAL:\$|ultima modifikare|ultimele '''\$1''' modifikări}} din {{PLURAL:\$2|ultima zi|ultimele '''\$2''' zile}}, encepând cu \$5, \$4.",
 'rcshowhideminor' => '$1 modifikările minore',
 'rcshowhidebots' => '$1 roboti',
 'rcshowhideliu' => '$1 utilizatori prilasnaeri',
index 3012b92..33fd6a5 100644 (file)
@@ -18,6 +18,7 @@
  * @author Krinkle
  * @author Mahitgar
  * @author Naveen Sankar
+ * @author NehalDaveND
  * @author Omnipaedista
  * @author Shantanoo
  * @author Shijualex
@@ -344,48 +345,48 @@ $messages = array(
 'thu' => 'गुरुः',
 'fri' => 'शुक्रः',
 'sat' => 'शनिः',
-'january' => 'à¤\9cनà¥\81वरि',
-'february' => 'फ़à¥\87बà¥\8dरà¥\81वरि',
-'march' => 'मार्च',
-'april' => 'à¤\8fपà¥\8dरिलà¥\8d',
-'may_long' => 'मà¥\87यà¥\8d',
-'june' => 'जून',
-'july' => 'à¤\9cà¥\82लयà¥\8d',
-'august' => 'à¤\93à¤\97सà¥\8dà¤\9fà¥\8d',
-'september' => 'सपà¥\8dतमà¥\8dबरà¥\8d',
-'october' => 'à¤\85षà¥\8dà¤\9fà¥\8bबरà¥\8d',
-'november' => 'नवम्बर',
-'december' => 'दशमà¥\8dबरà¥\8d',
-'january-gen' => 'à¤\9cनà¥\81वरि',
-'february-gen' => 'फà¥\87़बà¥\8dरà¥\81वरि',
-'march-gen' => 'मार्च',
-'april-gen' => 'à¤\8fपà¥\8dरिलà¥\8d',
-'may-gen' => 'मà¥\87यà¥\8d',
-'june-gen' => 'जून',
-'july-gen' => 'à¤\9cà¥\81लà¥\88',
-'august-gen' => 'à¤\93à¤\97सà¥\8dà¤\9fà¥\8d',
-'september-gen' => 'सपà¥\8dतमà¥\8dबरà¥\8d',
-'october-gen' => 'à¤\85षà¥\8dà¤\9fà¥\8bबरà¥\8d',
-'november-gen' => 'नवम्बर',
-'december-gen' => 'दशमà¥\8dबरà¥\8d',
-'jan' => 'à¤\9cनà¥\81॰',
-'feb' => 'फ़à¥\87बà¥\8dरà¥\81॰',
-'mar' => 'मार्च',
-'apr' => 'à¤\8fपà¥\8dरि॰',
-'may' => 'मेय्',
-'jun' => 'जून',
-'jul' => 'à¤\9cà¥\82लयà¥\8d',
-'aug' => 'ओग',
-'sep' => 'सपà¥\8dतà¤\82॰',
-'oct' => 'à¤\85षà¥\8dà¤\9fà¥\8b॰',
-'nov' => 'नवà¤\82॰',
-'dec' => 'दशà¤\82॰',
+'january' => 'à¤\9cनवरà¥\80',
+'february' => 'फरवरà¥\80',
+'march' => 'मार्च',
+'april' => 'à¤\85पà¥\8dरà¥\88ल',
+'may_long' => 'मà¤\88',
+'june' => 'जून',
+'july' => 'à¤\9cà¥\81लाà¤\88',
+'august' => 'à¤\85à¤\97सà¥\8dत',
+'september' => 'सितमà¥\8dबर',
+'october' => 'à¤\85à¤\95à¥\8dतà¥\82बर',
+'november' => 'नवम्बर',
+'december' => 'दिसमà¥\8dबर',
+'january-gen' => 'à¤\9cनवरà¥\80',
+'february-gen' => 'फरवरà¥\80',
+'march-gen' => 'मार्च',
+'april-gen' => 'à¤\85पà¥\8dरà¥\88ल',
+'may-gen' => 'मà¤\88',
+'june-gen' => 'जून',
+'july-gen' => 'à¤\9cà¥\81लाà¤\88',
+'august-gen' => 'à¤\85à¤\97सà¥\8dत',
+'september-gen' => 'सितमà¥\8dबर',
+'october-gen' => 'à¤\85à¤\95à¥\8dतà¥\82बर',
+'november-gen' => 'नवम्बर',
+'december-gen' => 'दिसमà¥\8dबर',
+'jan' => 'à¤\9cà¥\87न.',
+'feb' => 'फà¥\87ब.',
+'mar' => 'मार्च.',
+'apr' => 'एप्र॰',
+'may' => 'मे',
+'jun' => 'जून',
+'jul' => 'à¤\9cà¥\81ल.',
+'aug' => 'ओग.',
+'sep' => 'सà¥\87पà¥\8d.',
+'oct' => 'à¤\93à¤\95à¥\8dà¤\9fà¥\8b.',
+'nov' => 'नवà¥\87.',
+'dec' => 'डिस.',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|वर्गः|वर्गाः }}',
-'category_header' => '"$1" à¤\87तà¥\8dयà¥\87तसà¥\8dमिनà¥\8d à¤µà¤°à¥\8dà¤\97à¥\87 विद्यमानानि पृष्ठानि',
+'pagecategories' => '{{PLURAL:$1|वर्गः|वर्गाः}}',
+'category_header' => '"$1" à¤µà¤°à¥\8dà¤\97à¥\87ऽसà¥\8dमिनà¥\8d विद्यमानानि पृष्ठानि',
 'subcategories' => 'उपवर्गाः',
-'category-media-header' => '"$1" à¤\87तà¥\8dयà¥\87तसà¥\8dमिनà¥\8d à¤µà¤°à¥\8dà¤\97à¥\87 à¤®à¤¾à¤§à¥\8dयमाम्',
+'category-media-header' => '"$1" à¤µà¤°à¥\8dà¤\97à¥\87ऽसà¥\8dमिनà¥\8d à¤µà¤¿à¤¦à¥\8dयमानà¤\82 à¤®à¤¾à¤§à¥\8dयमम्',
 'category-empty' => "''अस्मिन् वर्गे अधुना न कोऽपि पृष्ठं, माध्यमं वा विद्यते।''",
 'hidden-categories' => '{{PLURAL:$1|निगूढः वर्गः|निगूढाः वर्गाः}}',
 'hidden-category-category' => 'निगूढाः वर्गाः',
@@ -393,23 +394,23 @@ $messages = array(
 'category-subcat-count-limited' => 'अस्मिन् वर्गे {{PLURAL:$1|अधोलिखितह् $1 वर्गः अस्ति|अधोलिखिताः $1 वर्गाः सन्ति}}।',
 'category-article-count' => '{{PLURAL:$2|अस्मिन् वर्गे केवलम् इदं पृष्ठं विद्यते ।|अस्मिन् वर्गे  {{PLURAL:$1|अधोलिखितं पृष्ठमस्ति|$1 अधोलिखितानि पृष्ठानि सन्ति}}, सर्वाणि पृष्ठानि $2 ।}}',
 'category-article-count-limited' => 'अधोलिखितं {{PLURAL:$1|पृष्ठम् अस्मिन् श्रेण्याम् अस्ति|$1 पृष्ठाणि अस्मिन् श्रेण्यां सन्ति}}।',
-'category-file-count' => '{{PLURAL:$2|à¤\85सà¥\8dमिनà¥\8d à¤µà¤°à¥\8dà¤\97à¥\87 à¤\85धà¥\8bलिà¤\96िता à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ामातà¥\8dरà¤\82 à¤µà¤°à¥\8dततà¥\87।|à¤\85सà¥\8dमिनà¥\8d à¤µà¤°à¥\8dà¤\97à¥\87 {{PLURAL:$1|à¤\85धà¥\8bलिà¤\96िताà¤\83 à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ा|à¤\85धà¥\8bलिà¤\96िताà¤\83 $1 à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ाà¤\83}} à¤µà¤°à¥\8dतनà¥\8dतà¥\87, à¤¸à¤°à¥\8dवाà¤\83 à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ाà¤\83 - $2 ।}}',
+'category-file-count' => '{{PLURAL:$2|à¤\85सà¥\8dमिनà¥\8d à¤µà¤°à¥\8dà¤\97à¥\87 à¤\95à¥\87वलमà¥\8d à¤\87दà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 à¤µà¤¿à¤¦à¥\8dयतà¥\87 à¥¤|à¤\85सà¥\8dमिनà¥\8d à¤µà¤°à¥\8dà¤\97à¥\87  {{PLURAL:$1|à¤\85धà¥\8bलिà¤\96ितà¤\82 à¤ªà¥\83षà¥\8dठमसà¥\8dति|$1 à¤\85धà¥\8bलिà¤\96ितानि à¤ªà¥\83षà¥\8dठानि à¤¸à¤¨à¥\8dति}}, à¤¸à¤°à¥\8dवाणि à¤ªà¥\83षà¥\8dठानि $2 ।}}',
 'category-file-count-limited' => 'एतस्यां श्रेण्यां {{PLURAL:$1|संचिका|$1 संचिकाः}} अधस्तात् सूचिता{{PLURAL:$1||ः}} -
 The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
 'listingcontinuesabbrev' => 'आगामि.',
 'index-category' => 'सूचकांकितानि पृष्ठानि',
-'noindex-category' => 'à¤\85सà¥\82à¤\9aà¤\95ाà¤\82à¤\95ितानि पृष्ठानि',
+'noindex-category' => 'नावलितानि पृष्ठानि',
 'broken-file-category' => 'भग्नसम्बन्धैः युक्तानि पृष्ठाणि',
 
 'about' => 'इत्यस्मिन् विषये:',
 'article' => 'लेखः',
-'newwindow' => '(नवà¥\87 à¤\97वाà¤\95à¥\8dषà¥\87 à¤\87दमà¥\8d उद्घाट्यते)',
+'newwindow' => '(à¤\87दà¤\82 à¤¨à¤µà¥\80नà¥\87 à¤\97वाà¤\95à¥\8dषà¥\87 उद्घाट्यते)',
 'cancel' => 'निरस्यताम्',
 'moredotdotdot' => 'अपि च...',
 'mypage' => 'मम पृष्ठम्',
-'mytalk' => 'मम à¤¸à¤®à¥\8dभाषणमà¥\8d',
+'mytalk' => 'सम्भाषणम्',
 'anontalk' => 'अस्य आइ.पी. संकेतस्य कृते सम्भाषणम्',
-'navigation' => 'परà¥\8dयà¤\9fनम्',
+'navigation' => 'सà¤\9eà¥\8dà¤\9aरणम्',
 'and' => '&#32;तथा च',
 
 # Cologne Blue skin
@@ -418,7 +419,7 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
 'qbedit' => 'सम्पाद्यताम्',
 'qbpageoptions' => 'इदं पृष्ठम्',
 'qbmyoptions' => 'मम पृष्ठानि',
-'faq' => 'बहà¥\81धा à¤ªà¥\83à¤\9aà¥\8dà¤\9bà¥\8dयमानाà¤\83 à¤ªà¥\8dरशà¥\8dनाà¤\83',
+'faq' => 'सामानà¥\8dयà¤\9cिà¤\9cà¥\8dà¤\9eासाà¤\83 (FAQ)',
 'faqpage' => 'Project:बहुधा पृछ्यमानाः प्रश्नाः',
 
 # Vector skin
@@ -428,20 +429,19 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
 'vector-action-protect' => 'संरक्ष्यताम्',
 'vector-action-undelete' => 'अपाकरणस्य निरसनम्',
 'vector-action-unprotect' => 'सुरक्षितीकरणस्य निरसनम्',
-'vector-simplesearch-preference' => 'संवर्धिताः अन्वेषणोपक्षेपाः समर्थीकरोतु। (केवलं वैक्टर-स्किन् इत्यस्यार्थे)',
 'vector-view-create' => 'सृज्यताम्',
 'vector-view-edit' => 'सम्पाद्यताम्',
-'vector-view-history' => 'à¤\87तिहासà¤\83 à¤¦à¥\83श्यताम्',
+'vector-view-history' => 'à¤\87तिहासà¤\83 à¤¦à¤°à¥\8dश्यताम्',
 'vector-view-view' => 'पठ्यताम्',
 'vector-view-viewsource' => 'स्रोतः दृश्यताम्',
 'actions' => 'क्रियाः',
-'namespaces' => 'नामाà¤\95ाशानि',
-'variants' => 'भिनà¥\8dनरà¥\82पाणि',
+'namespaces' => 'नामाà¤\95ाशà¤\83',
+'variants' => 'पाठभà¥\87दà¤\83',
 
 'navigation-heading' => 'मार्गणसूचिः',
 'errorpagetitle' => 'दोषः',
-'returnto' => '$1 à¤\87तà¥\8dयà¥\87तदà¥\8d à¤ªà¥\8dरति à¤¨à¤¿à¤µà¤°à¥\8dततामà¥\8d।',
-'tagline' => '{{SITENAME}} à¤\87तà¥\8dयसà¥\8dमातà¥\8d',
+'returnto' => '$1 à¤ªà¥\8dरति à¤¨à¤¿à¤µà¤°à¥\8dतà¥\8dयतामà¥\8d ।',
+'tagline' => '{{SITENAME}} à¤¤à¤\83',
 'help' => 'साहाय्यम्',
 'search' => 'अन्विष्यताम्',
 'searchbutton' => 'अन्विष्यताम्',
@@ -450,15 +450,15 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
 'history' => 'पृष्ठस्य इतिहासः',
 'history_short' => 'इतिहासः',
 'updatedmarker' => 'मम पौर्विक-आगमन-पश्चात् परिवर्तितानि',
-'printableversion' => 'मà¥\81दà¥\8dरणयà¥\8bà¤\97à¥\8dया à¤\86वà¥\83तà¥\8dतिà¤\83',
-'permalink' => 'सà¥\8dथिरसमà¥\8dपरà¥\8dà¤\95तनà¥\8dतà¥\81ः',
+'printableversion' => 'मà¥\81दà¥\8dरणयà¥\8bà¤\97à¥\8dयà¤\82 à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d',
+'permalink' => 'सà¥\8dथायिपरिसनà¥\8dधिः',
 'print' => 'मुद्र्यताम्',
 'view' => 'दृश्यताम्',
 'edit' => 'सम्पाद्यताम्',
 'create' => 'सृज्यताम्',
 'editthispage' => 'इदं पृष्ठं सम्पाद्यताम्',
 'create-this-page' => 'इदं पृष्ठं सृज्यताम्',
-'delete' => 'विलà¥\81पà¥\8dयताम्',
+'delete' => 'à¤\85पाà¤\95à¥\8dरियताम्',
 'deletethispage' => 'इदं पृष्ठम् अपाक्रियताम्',
 'undelete_short' => '{{PLURAL:$1|एकं सम्पादनं|$1 सम्पादनानि}} अनपाकरोतु',
 'viewdeleted_short' => 'दर्श्यताम् {{PLURAL:$1|एको विलुप्तं सम्पादनम्|$1 विलुप्तानि सम्पादनानि}}',
@@ -471,12 +471,12 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
 'talkpage' => 'अस्य पृष्ठस्य विषये चर्चा क्रियताम्',
 'talkpagelinktext' => 'सम्भाषणम्',
 'specialpage' => 'विशेषपृष्ठम्',
-'personaltools' => 'वà¥\88यà¤\95à¥\8dतिà¤\95à¥\8bपà¤\95रणानि',
+'personaltools' => 'वà¥\88यà¤\95à¥\8dतिà¤\95साधनानि',
 'postcomment' => 'नवीनः विभागः',
 'articlepage' => 'लेखः दृश्यताम्',
 'talk' => 'सम्भाषणम्',
-'views' => 'दà¥\83शà¥\8dयानि',
-'toolbox' => 'à¤\89पà¤\95रणपà¥\87à¤\9fिका',
+'views' => 'मतानि',
+'toolbox' => 'साधनशलाका',
 'userpage' => 'योजकपृष्ठं दृश्यताम्',
 'projectpage' => 'प्रकल्पपृष्ठं दृश्यताम्',
 'imagepage' => 'सञ्चिकापृष्ठं दृश्यताम्',
@@ -488,11 +488,11 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
 'otherlanguages' => 'अन्यासु भाषासु',
 'redirectedfrom' => '($1 इत्यस्मात् पुनर्निर्दिष्टम्)',
 'redirectpagesub' => 'अनुप्रेषण-पृष्ठम्',
-'lastmodifiedat' => 'एतस्य पृष्ठस्य अन्तिमपरिवर्तनं $1 दिनाङ्के $2 समये कृतम्',
+'lastmodifiedat' => '$1 (तमे) दिनाङ्के अन्तिमसम्पादनं $2 समये अभवत्',
 'viewcount' => 'एतत्पृष्ठं {{PLURAL:$1|एक वारं|$1 वारं}} दृष्टम् अस्ति',
 'protectedpage' => 'संरक्षितपृष्ठम्',
-'jumpto' => 'à¤\97मà¥\8dयतामà¥\8d à¤\85तà¥\8dर :',
-'jumptonavigation' => 'परà¥\8dयà¤\9fनमà¥\8d',
+'jumpto' => 'à¤\85तà¥\8dर à¤\97मà¥\8dयतामà¥\8d :',
+'jumptonavigation' => 'सà¤\9eà¥\8dà¤\9aरणà¤\82',
 'jumptosearch' => 'अन्वेषणम्',
 'view-pool-error' => 'भोः, अधुना वितारकः अतिभाराक्रान्तः ।
 बहवः योजकाः एतत् पृष्ठं द्रष्टुं प्रयतमानाः सन्ति ।
@@ -503,23 +503,23 @@ $1',
 'pool-errorunknown' => 'अज्ञाता त्रुटिः',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => '{{SITENAME}} à¤\87तà¥\8dयसà¥\8dय à¤µà¤¿à¤·à¤¯à¥\87',
-'aboutpage' => 'Project:à¤\8fतदà¥\8dविषयà¤\95मà¥\8d',
+'aboutsite' => '{{SITENAME}} à¤µà¤¿à¤·à¤¯à¤\95à¤\82',
+'aboutpage' => 'Project:विषयकम्',
 'copyright' => 'अस्य घटकानि $1 इत्यस्यान्तर्गतानि उपलब्धानि।',
-'copyrightpage' => '{{ns:project}}:पà¥\8dरतिलिपà¥\8dयधिà¤\95ाराः',
-'currentevents' => 'सदà¥\8dयà¤\83à¤\95ालà¥\80नवार्ताः',
-'currentevents-url' => 'Project:सदà¥\8dयà¤\83à¤\95ालà¥\80नवार्ताः',
-'disclaimers' => 'पà¥\8dरतà¥\8dयाà¤\96à¥\8dयानमà¥\8d',
-'disclaimerpage' => 'Project:साधारणà¤\82 à¤ªà¥\8dरतà¥\8dयाà¤\96à¥\8dयानम्',
-'edithelp' => 'सम्पादनार्थं सहाय्यम्',
-'helppage' => 'Help:à¤\86नà¥\8dतरà¥\8dयमà¥\8d',
+'copyrightpage' => '{{ns:project}}:पà¥\8dरतिà¤\95à¥\83तà¥\8dयधिà¤\95ारः',
+'currentevents' => 'वरà¥\8dतमानवार्ताः',
+'currentevents-url' => 'Project:वरà¥\8dतमानवार्ताः',
+'disclaimers' => 'à¤\85सà¥\8dवà¥\80à¤\95ारà¤\83',
+'disclaimerpage' => 'Project:सामानà¥\8dयाऽसà¥\8dवà¥\80à¤\95रणम्',
+'edithelp' => 'समà¥\8dपादनारà¥\8dथà¤\82 à¤¸à¤¾à¤¹à¤¾à¤¯à¥\8dयमà¥\8d',
+'helppage' => 'Help:à¤\85नà¥\8dतरà¥\8dवसà¥\8dतà¥\81',
 'mainpage' => 'मुख्यपृष्ठम्',
 'mainpage-description' => 'मुख्यपृष्ठम्',
 'policy-url' => 'Project:नीतिः',
 'portal' => 'समुदायद्वारम्',
 'portal-url' => 'Project:समुदायद्वारम्',
-'privacy' => 'निभà¥\83ततानीतिः',
-'privacypage' => 'Project:निभà¥\83ततानीतिः',
+'privacy' => 'à¤\97à¥\8bपनà¥\80यतानीतिः',
+'privacypage' => 'Project:à¤\97à¥\8bपनà¥\80यतानीतिः',
 
 'badaccess' => 'अनुज्ञा-प्रमादः',
 'badaccess-group0' => 'भवदर्थम्, अत्र प्रार्थितक्रियायाः प्रवर्तनं न अनुमतम्।',
@@ -530,7 +530,7 @@ $1',
 
 'ok' => 'अस्तु',
 'pagetitle' => '$1 - {{SITENAME}}',
-'retrievedfrom' => '"$1" à¤\87तà¥\8dयसà¥\8dमादà¥\8d à¤\89दà¥\8dधà¥\83तमà¥\8d',
+'retrievedfrom' => '"$1" à¤\87तà¥\8dयसà¥\8dमादà¥\8d à¤ªà¥\81नà¤\83 à¤ªà¥\8dरापà¥\8dतिà¤\83',
 'youhavenewmessages' => 'भवदर्थम् $1 सन्ति। ($2).',
 'youhavenewmessagesfromusers' => 'भवदर्थम् {{PLURAL:$3|अन्यस्मात् सदस्यात्|$3 सदस्येभ्यः}} $1 अस्ति ($2)।',
 'youhavenewmessagesmanyusers' => 'नैकेभ्यः योजकेभ्यः ते $1 सन्ति $2 ।',
@@ -542,7 +542,7 @@ $1',
 'viewsourceold' => 'स्रोतः दृश्यताम्',
 'editlink' => 'सम्पाद्यताम्',
 'viewsourcelink' => 'स्रोतः दृश्यताम्',
-'editsectionhint' => 'à¤\85यà¤\82 à¤µà¤¿à¤­à¤¾à¤\97à¤\83 à¤¸à¤®à¥\8dपादà¥\8dयतामà¥\8d: $1',
+'editsectionhint' => 'समà¥\8dपादनविभाà¤\97à¤\83: $1',
 'toc' => 'अन्तर्विषयाः',
 'showtoc' => 'दर्श्यताम्',
 'hidetoc' => 'गोप्यताम्',
@@ -558,13 +558,13 @@ $1',
 'site-atom-feed' => '$1 अणुपूरणम्',
 'page-rss-feed' => '"$1" आरएसएस-पूरणम्',
 'page-atom-feed' => '"$1" अणुपूरणम्',
-'red-link-title' => '$1 (पà¥\83षà¥\8dठमà¥\8d à¤\87दानà¥\80à¤\82 à¤¯à¤¾à¤µà¤¤à¥\8d à¤¨ à¤°à¤\9aितमà¥\8d)',
+'red-link-title' => '$1 (पà¥\83षà¥\8dठà¤\82 à¤¨ à¤µà¤¿à¤¦à¥\8dयतà¥\87)',
 'sort-descending' => 'अवरोहिक्रमेण सज्जयतु',
 'sort-ascending' => 'आरोहिक्रमेण सज्जयतु',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'पृष्ठम्',
-'nstab-user' => 'यà¥\8bà¤\9cà¤\95सà¥\8dय à¤ªà¥\83षà¥\8dठमà¥\8d',
+'nstab-user' => 'योजकपृष्ठम्',
 'nstab-media' => 'माध्यमपृष्ठम्',
 'nstab-special' => 'विशेषपृष्ठम्',
 'nstab-project' => 'प्रकल्पपृष्ठम्',
@@ -591,10 +591,11 @@ $1',
 'enterlockreason' => 'तन्त्रितीकरणस्य कारणं ददातु, अपि च आकलितं ददातु यत् तन्त्रणं कदा उद्घाट्यिष्यते।',
 'readonlytext' => 'समंकाधारं वर्तमानकाले तन्त्रितमस्ति नूतनान् प्रविष्टीन् विरुध्य तथा च अन्यानि परिवर्तनानि विरुध्य। इदं नियमिततया समंकाधार परिचर्याऽर्थं तथा स्यात्। तत्पश्चादिदं सामान्यतां संप्राप्स्यति।
 तन्त्रितीकारकेन प्रबन्धकेन इदं कारणं प्रदत्तम्: $1',
-'missing-article' => 'त्ताधारेण(डाटाबेस् इत्यनेन) "$1" $2 इतिनामकं प्राप्तव्यं यत् पृष्ठं तत् नैव प्राप्तम्।
-प्रायः कालातीतस्य अथवा अपाकृतस्य इतिहाससम्पर्कतन्तोः कारणेन एवं भवति।
-यदि नैवं तर्हि भवता तन्त्रांशकीटकं प्राप्तं स्यात्।
-कृपया कोऽपि [[Special:ListUsers/sysop|administrator]]अस्य पृष्ठस्य सङ्केतज्ञापनपूर्वकं सूच्यताम्।',
+'missing-article' => 'दत्तनिधौ (in database) $2 अन्तः कुत्रापि "$1" न प्राप्तम् ।
+
+प्रायः अपाकृतस्य पृष्ठस्य इतिहासदर्शनस्य चेष्टाकाले एवं भवति ।
+
+तादृशी स्थितिः यदि नास्ति, तर्हि तन्त्रांशे वद्यमाना त्रुटिः भवेत् । कृपया कमपि [[Special:ListUsers/sysop|प्रबन्धकम्]] अस्य पृष्ठस्य सार्वसङ्केतं (U.R.L.) सूच्यताम् ।',
 'missingarticle-rev' => '(आवृत्तिः# :$1)',
 'missingarticle-diff' => '(व्यतिरेक: $1, $2)',
 'readonly_lag' => 'मुख्य-समंकाधार-परिवेशकं उपमुख्य-समंकाधार-परिवेशकस्य संप्रापणात् पूर्वे एव स्वतः तन्त्रितम् अस्ति।',
@@ -615,8 +616,8 @@ $1',
 इदं खलु केनचिदन्येन पूर्वे एव अपाकृतं स्यात्।',
 'cannotdelete-title' => ' "$1" पृष्ठं निर्मार्जयितुम् अशक्यम्',
 'delete-hook-aborted' => 'आलम्बेन अपमार्जनम् अपनीतम् । अनेन विवरणं न दत्तम् ।',
-'badtitle' => 'दà¥\81षà¥\8dà¤\9fं शिरोनाम',
-'badtitletext' => 'पà¥\8dरारà¥\8dथितà¤\82 à¤ªà¥\83षà¥\8dठशà¥\80रà¥\8dषà¤\95मà¥\8d à¤\85मानà¥\8dयà¤\82 à¤°à¤¿à¤\95à¥\8dतमà¥\8d à¤\85शà¥\81दà¥\8dधतया à¤¸à¤®à¥\8dबदà¥\8dधमà¥\8d à¤\86नà¥\8dतरà¥\8dभाषिà¤\95मà¥\8d, à¤\86नà¥\8dतरà¥\8dविà¤\95à¥\80यà¤\82 à¤µà¤¾ à¤¶à¥\80रà¥\8dषà¤\95मसà¥\8dति à¥¤ à¤\85सà¥\8dमिनà¥\8d à¤\8fà¤\95à¤\82 à¤\8fà¤\95ाधिà¤\95ानि à¤µà¤¾ à¤\8fतादà¥\83शानि à¤\85à¤\95à¥\8dषराणि à¤µà¤¿à¤¦à¥\8dयनà¥\8dतà¥\87 à¤¯à¥\87षाà¤\82 à¤ªà¥\8dरयà¥\8bà¤\97à¤\82 à¤¶à¥\80रà¥\8dषà¤\95à¥\87षà¥\81 à¤\95रà¥\8dतà¥\81मà¥\8d à¤\85शà¤\95à¥\8dयमà¥\8d।',
+'badtitle' => 'à¤\85शà¥\81दà¥\8dधं शिरोनाम',
+'badtitletext' => 'à¤\87पà¥\8dसितà¤\82 à¤¶à¥\80रà¥\8dषà¤\95मà¥\8d à¤\85मानà¥\8dयà¤\82, à¤°à¤¿à¤\95à¥\8dतमà¥\8d, à¤\85यà¥\8bà¤\97à¥\8dयà¤\82, à¤\85नà¥\8dयभाषà¥\80यà¤\82, à¤µà¤¿à¤\95ि-à¤\9cालविहाय à¤\9a à¤\85सà¥\8dति à¥¤ à¤ªà¥\83षà¥\8dठशà¥\80रà¥\8dषà¤\95ाय à¤\85यà¥\8bà¤\97à¥\8dयानि à¤\85à¤\95à¥\8dषराणि à¤\9aिहà¥\8dनानि à¤µà¤¾ à¤¤à¤¸à¥\8dमिनà¥\8d à¤­à¤µà¥\87यà¥\81à¤\83 ।',
 'perfcached' => 'अनुपदोक्तं लेखः कैश् इत्येतस्माद् अस्ति, अतः अद्यतनं न स्यात्।  {{PLURAL:$1|one result is|$1 results are}}',
 'perfcachedts' => 'अधोनिदेशितलेखः सञ्चितः । पूर्वपदोन्नतिः $1 । $4 {{PLURAL:}} अधिकाधिकपरिणामः सञ्चये उपलब्धः ।',
 'querypage-no-updates' => 'अस्य पृष्ठस्य परिशोधनं विफलीकृतमस्ति । 
@@ -658,7 +659,7 @@ $2',
 'welcomeuser' => 'स्वागतं, हे $1!',
 'welcomecreation-msg' => 'भवतः लेखा रचिताऽस्ति।
 स्वकीयानां [[Special:Preferences|{{SITENAME}} इष्टतमानां]]. निगदनं मा विस्मर्यताम्।',
-'yourname' => 'योजकनामन्:',
+'yourname' => 'योजकनाम:',
 'userlogin-yourname' => 'प्रयोक्तुः नाम',
 'userlogin-yourname-ph' => 'स्वकीयं प्रयोक्तृनाम दीयताम्',
 'yourpassword' => 'कूटशब्दः',
@@ -672,21 +673,20 @@ $2',
 'password-change-forbidden' => 'अस्यां विक्यां निकुञ्चं परिवर्तयितुं न शक्नोति ।',
 'externaldberror' => 'तत्र प्रमाणीकरण समंकाधारे त्रुटिर्जाता, अथवा भवान् स्वकीयां बाह्य-लेखां अद्यतनीकर्तुं अनुमतिं न धारयति।',
 'login' => 'प्रविश्यताम्',
-'nav-login-createaccount' => 'प्रविश्यताम्/ सदस्यता प्राप्यताम्',
-'loginprompt' => '{{SITENAME}} à¤\87तà¥\8dयतà¥\8dर à¤ªà¥\8dरवà¥\87षà¥\8dà¤\9fà¥\81à¤\82 à¤\95à¥\81à¤\95à¥\80 à¤\87तà¥\8dयà¥\87तà¥\87 (cookies)  à¤¸à¤®à¤°à¥\8dथà¥\80à¤\95रणà¥\80यानि।',
-'userlogin' => 'प्रविश्यताम्/ सदस्यता प्राप्यताम्',
+'nav-login-createaccount' => 'प्रविश्यताम् / सदस्यता प्राप्यताम्',
+'loginprompt' => '{{SITENAME}} à¤\87तà¥\8dयतà¥\8dर à¤ªà¥\8dरवà¥\87षà¥\8dà¤\9fà¥\81à¤\82 à¤\9cà¥\8dà¤\9eापà¤\95ानि (cookies)  à¤¸à¤®à¤°à¥\8dथà¥\80à¤\95रणà¥\80यानि ।',
+'userlogin' => 'प्रविश्यताम् / सदस्यता प्राप्यताम्',
 'userloginnocreate' => 'प्रविश्यताम्',
 'logout' => 'निर्गमनम्',
 'userlogout' => 'निर्गमनम्',
 'notloggedin' => 'नैव प्रविष्टः',
 'userlogin-noaccount' => 'सदस्यता नास्ति किम्?',
-'nologin' => 'पà¥\82रà¥\8dवमà¥\87व à¤¯à¥\8bà¤\9cà¤\95à¤\83 à¤¨à¤¾à¤¸à¥\8dति à¤\95िमà¥\8d ? $1।',
+'nologin' => 'सदसà¥\8dयता à¤¨à¤¾à¤¸à¥\8dति à¤\95िमà¥\8d ? $1',
 'nologinlink' => 'सदस्यता प्राप्यताम्',
 'createaccount' => 'सदस्यता प्राप्यताम्',
 'gotaccount' => 'पूर्वमेव योजकः अस्ति किम् ? $1।',
 'gotaccountlink' => 'प्रविश्यताम्',
 'userlogin-resetlink' => 'प्रवेशविवरणानि विस्मृतानि किम् ?',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|प्रवेशनार्थं सहायता]]',
 'createacct-join' => 'स्वकीया सूचना अधस्तात् प्रवेश्यताम्।',
 'createaccountmail' => 'ईपत्रद्वारा',
 'createaccountreason' => 'कारणम्',
@@ -722,7 +722,7 @@ $2',
 'passwordtooshort' => 'कूटशब्दः न्यूनातिन्यूनं {{PLURAL:$1| 1 अक्षरात्मकः|$1 अक्षरात्मकमः}} अवश्यमेव भवेत्।',
 'password-name-match' => 'भवतः कूटशब्दः भवतः प्रयोक्तृनामतः अवश्यम् भिन्नं  भवेत् ।',
 'password-login-forbidden' => 'अस्य प्रयोक्तृनाम्नः कूटशब्दस्य च प्रयोगः वर्जितोऽस्ति।',
-'mailmypassword' => 'नà¥\82तनà¤\83 à¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤\88पतà¥\8dरदà¥\8dवारा à¤ªà¥\8dरà¥\87ष्यताम्',
+'mailmypassword' => 'à¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤ªà¤°à¤¿à¤µà¤°à¥\8dत्यताम्',
 'passwordremindertitle' => '{{SITENAME}} इत्येतदर्थे नूतन् अस्थायि कूटशब्दम्।',
 'passwordremindertext' => 'कश्चित्  (भवान् अपि स्यात्,  $1 ऐ. पि. सङ्केतात् ) {{SITENAME}} ($4) इत्यस्य कृते नूतनं कूटशब्दं प्रार्थितवान् । तात्कालिकः कूटशब्दः "$2" इति उपयोक्तुः कृते निर्मितः "$3" कृते प्रेषितश्च । यदि अयं भवतः  आशयः, भवान् प्रविश्य नूतनं कूटशब्दम् इदानीं चिनोतु । भवतः तात्कालिकः कूटशब्दः  {{PLURAL:$5|दिनम्|$5 दिनानि}} यावत् सक्रियः भवति । 
 
@@ -767,6 +767,7 @@ You may ignore this message, if this account was created in error.',
 'login-abort-generic' => 'भवतः प्रवेशप्रयासः विफलीभूतः - परित्यक्तः',
 'loginlanguagelabel' => 'भाषा : $1',
 'suspicious-userlogout' => 'भवतः सत्राद् बहिर्गमनस्य अनुरोधः अस्वीकृतोऽस्ति, यस्मादेतत् भग्नादेकस्मात् ब्राउज़र्तः अथवा स्वल्पसञ्चयि-प्रॉक्सितः प्रेषित आसीत्।',
+'pt-login-button' => 'प्रविश्यताम्',
 
 # Email sending
 'php-mail-error-unknown' => 'पीएच्पी इत्येतस्य mail() फलने अज्ञाता काऽपि त्रुटिर्जाता।',
@@ -830,37 +831,37 @@ $2
 'changeemail-cancel' => 'निवर्तयते',
 
 # Edit page toolbar
-'bold_sample' => 'सà¥\8dथà¥\82लाà¤\95à¥\8dषरà¥\88à¤\83 à¤¯à¥\81à¤\95à¥\8dतà¤\83 à¤­à¤¾à¤\97à¤\83',
-'bold_tip' => 'सà¥\8dथà¥\82लाà¤\95à¥\8dषरà¥\88à¤\83 à¤¯à¥\81à¤\95à¥\8dतà¤\83 à¤­à¤¾à¤\97à¤\83',
+'bold_sample' => 'सà¥\8dथà¥\82लाà¤\95à¥\8dषराणि',
+'bold_tip' => 'सà¥\8dथà¥\82लाà¤\95à¥\8dषराणि',
 'italic_sample' => 'तिर्यक् अक्षरम्',
 'italic_tip' => 'तिर्यक् अक्षरम्',
-'link_sample' => 'सà¤\82बà¤\82धनसà¥\8dय शीर्षकम्',
+'link_sample' => 'परिसनà¥\8dधà¥\87à¤\83 शीर्षकम्',
 'link_tip' => 'आन्तरिकसम्पर्कतन्तुः',
-'extlink_sample' => 'http://www.example.com à¤¸à¤\82बà¤\82धनसà¥\8dय शीर्षकम्',
-'extlink_tip' => 'बाह्य-संबंधनम् (अवश्यमेव  http:// इति पूर्वलग्नं योक्तव्यम्)',
+'extlink_sample' => 'http://www.example.com à¤ªà¤°à¤¿à¤¸à¤¨à¥\8dधà¥\87à¤\83 शीर्षकम्',
+'extlink_tip' => 'बाह्यानुबन्धः (http:// इति पूर्वन्यासम् अग्रे योजनीयम् इति स्मरतु)',
 'headline_sample' => 'शीर्षकम्',
 'headline_tip' => 'द्वितीयस्तरीयं शीर्षकम्',
-'nowiki_sample' => 'à¤\85पà¥\8dरारà¥\82पà¥\80à¤\95à¥\83तà¤\82 à¤ªà¤¾à¤ à¤\82 à¤\85तà¥\8dर à¤¨à¤¿à¤µà¥\87शयतà¥\81',
-'nowiki_tip' => 'विकिप्रारूपणं अवगणना कुरु',
+'nowiki_sample' => 'à¤\85पà¥\8dरारà¥\82पितà¤\82 à¤ªà¤¾à¤ à¤®à¥\8d à¤\85तà¥\8dर à¤¨à¤¿à¤µà¥\87शà¥\8dयतामà¥\8d',
+'nowiki_tip' => 'विकि-प्रारूपस्य अवगणनां करोतु',
 'image_sample' => 'उदाहरणम्.jpg',
-'image_tip' => 'à¤\85नà¥\8dतरà¥\8dà¤\97ता सञ्चिका',
+'image_tip' => 'à¤\85नà¥\8dतरà¥\8dनिहिता सञ्चिका',
 'media_sample' => 'उदाहरणम्.ogg',
-'media_tip' => 'सà¤\82à¤\9aिà¤\95ा-समà¥\8dपरà¥\8dà¤\95तनà¥\8dतà¥\81ः',
-'sig_tip' => 'भवतà¤\83 à¤¹à¤¸à¥\8dताà¤\99à¥\8dà¤\95नà¤\82 à¤¸à¤®à¤¯à¥\8bलà¥\8dलà¥\87à¤\96शà¥\8dà¤\9a',
+'media_tip' => 'सà¤\9eà¥\8dà¤\9aिà¤\95ासमà¥\8dबनà¥\8dधः',
+'sig_tip' => 'समयà¥\8bलà¥\8dलà¥\87न à¤¸à¤¹ à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤¹à¤¸à¥\8dताà¤\95à¥\8dषरà¤\83',
 'hr_tip' => 'क्षैतिज-रेखा (न्यूनतया प्रयोक्तव्या)',
 
 # Edit pages
-'summary' => 'सारांशः :',
+'summary' => 'सारांशः:',
 'subject' => 'विषयः/शीर्षकम् :',
 'minoredit' => 'इदं लघु परिवर्तनम्',
 'watchthis' => 'इदं पृष्ठं निरीक्षताम्',
 'savearticle' => 'पृष्ठं रक्ष्यताम्',
 'preview' => 'प्राग्दृश्यम्',
-'showpreview' => 'पà¥\8dराà¤\97à¥\8dदà¥\83शà¥\8dयà¤\82 à¤¦à¤°à¥\8dश्यताम्',
+'showpreview' => 'पà¥\8dराà¤\97à¥\8dदà¥\83शà¥\8dयà¤\82 à¤¦à¥\83श्यताम्',
 'showlivepreview' => 'प्रत्यक्षं प्राग्दृश्यम्',
-'showdiff' => 'परिवरà¥\8dतनानि à¤¦à¤°à¥\8dश्यन्ताम्',
-'anoneditwarning' => "'''पà¥\8dरबà¥\8bधà¤\83'''भवानà¥\8d à¤¨ à¤ªà¥\8dरविषà¥\8dà¤\9fà¥\8bऽसà¥\8dति !
-समà¥\8dपादनà¤\82 à¤\95रà¥\8dतà¥\81मà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरवà¥\87शà¤\83 à¤\86वशà¥\8dयà¤\95à¤\83 à¥¤ à¤\85नà¥\8dयथा à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤\87तिहासà¥\87 à¤­à¤µà¤¦à¥\80या IPसà¤\82ख्या अङ्किता भवति ।",
+'showdiff' => 'परिवरà¥\8dतनानि à¤¦à¥\83श्यन्ताम्',
+'anoneditwarning' => "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना''' à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤ªà¥\8dरवà¥\87शà¤\83 à¤¨ à¤\95à¥\83तà¤\83 !
+à¤\85तà¥\8dर à¤¸à¤®à¥\8dपादनà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤ªà¥\8dरवà¥\87शà¤\83 à¤\85निवारà¥\8dयà¤\83 à¥¤ à¤\85नà¥\8dयथा à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤\87तिहासà¥\87 à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤\85नà¥\8dतरà¥\8dà¤\9cालसà¤\82विदà¤\83 (IP) à¤¸à¤\99à¥\8dख्या अङ्किता भवति ।",
 'anonpreviewwarning' => "''भवान् प्रवेशितः न अस्ति। रक्षणेन पृष्ठस्य सम्पादनेतिहासे भवतः आइपीसंकेतः अंकितः भविष्यति।''",
 'missingsummary' => "'''अनुस्मारकम्:''' भवता सम्पादनस्य सारः न प्रदत्तः।
 चेद्भवान् \"{{int:savearticle}}\" इत्येतद् पुनः क्लिक्करोति, भवतः सम्पादनानि साराद् ऋते रक्षितीभविष्यन्ति।",
@@ -908,20 +909,19 @@ $2
 'accmailtext' => "[[User talk:$1|$1]] इत्येतदर्थं एकः यादृच्छिकतया उत्पादितः कूटशब्दः $2 इत्येतत् प्रति प्रेषितोऽस्ति।
 सत्रारम्भपश्चात् नूतनायाः अस्याः लेखायाः कूटशब्दः  '''[[Special:ChangePassword|कूटशब्दं परिवर्तताम्]]'' इति पृष्ठे परिवर्तितुं शक्यते।",
 'newarticle' => '(नूतनम्)',
-'newarticletext' => "भवता एतादृशमेकं पृष्टं प्रति संबंधनम् अनुसृतम्, यत्पृष्ठं न इदानींयावत् विद्यते।
+'newarticletext' => 'भवान्/भवती अनिर्मिते पृष्ठे अस्ति । 
 
-पृष्ठं स्रष्टुम् अधःप्रदत्तायां पेटिकायां टंकणं करोतु (सहाय्यार्थं [[{{MediaWiki:Helppage}}|अत्र]] क्लिक्करोतु।
-
-चेद्भवान् अत्र भ्रान्तिना आनीतोऽस्ति तदा स्वकीये ब्राउसर् इत्यस्मिन् '''बैक्''' इत्यस्मिन् क्लिक्करोतु।)",
+पृष्ठं स्रष्टुम् अधःप्रदत्तायां पेटिकायां टङ्कनं प्रारभतु (साहाय्यार्थं [[{{MediaWiki:Helppage}}|अत्र]] नुदतु ।
+भवान्/भवती यदि क्षतिकारणात् एतत् पृष्ठं प्रति आगच्छत्, तर्हि अस्य गवेषकस्य (browser) "बैक्" इति नुदतु ।',
 'anontalkpagetext' => 'तस्य अनामकयोजकस्य, अथवा अनुपयोजकस्य च परिचर्चापुटम् येन एतावति काले स्वस्थनं  न निर्मितम् । 
 अतः तस्य अभिज्ञानार्थं ऐ.पि.सङ्गेतसङ्ख्या प्रयोजनीया । 
 सा समाना सङ्ख्याः अन्ययोजकैः अपि विभक्ता । यदि भवान् अनामकयोजकः, भवता असम्बद्धटीकाः श्रुताः, कृपया स्वस्थनं निर्मीय नामाभिलेखं करोतु ।  [[Special:UserLogin/signup|create an account]], [[Special:UserLogin|log in]] अन्यानामकयोजकैः सह सम्भूयमनभ्रमैः विमुक्तः भवतु ।',
-'noarticletext' => 'अस्मिन् पृष्ठे अधुना किमपि न विद्यते। भवान् विकिपीडियावर्तिषु अन्येषु पृष्ठेषु इदं [[Special:Search/{{PAGENAME}}|शीर्षकम् अन्वेष्टुम्]]अर्हति अथवा इदं पृष्ठं 
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  à¤¸à¤®à¥\8dबदà¥\8dधà¥\87षà¥\81 à¤ªà¥\83षà¥\8dठà¥\87षà¥\81 à¤\85नà¥\8dवà¥\87षà¥\8dà¤\9fà¥\81मà¥\8d à¤\85रà¥\8dहति],
-अथवा [{{fullurl:{{FULLPAGENAME}}|action=edit}} इदं पृष्ठं सम्पादयितुम् अर्हति]</span>.',
-'noarticletext-nopermission' => 'अस्मिन् पृष्ठे अधुना किमपि न विद्यते। भवान् विकिपीडियावर्तिषु अन्येषु पृष्ठेषु इदं [[Special:Search/{{PAGENAME}}|शीर्षकम् अन्वेष्टुम् अर्हति]] 
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  related logs अन्वेष्टुम् अर्हति],
-अथवा [{{fullurl:{{FULLPAGENAME}}|action=edit}} इदं पृष्ठं स्रष्टुम् अर्हति]</span>.',
+'noarticletext' => 'अस्मिन् पृष्ठे अधुना किमपि न विद्यते । [[Special:Search/{{PAGENAME}}|एषः शब्दः]] येषु पृष्ठेषु अन्तर्भवति, तानि पृष्ठानि अन्वेष्टुं शक्यन्ते । 
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  à¤¸à¤®à¥\8dबदà¥\8dधà¥\87षà¥\81 à¤ªà¥\83षà¥\8dठà¥\87षà¥\81 à¤\85नà¥\8dवà¥\87षणà¤\82]
+[{{fullurl:{{FULLPAGENAME}}|action=edit}} अस्य पृष्ठस्य सम्पादनं] वा  शक्यम्</span>.',
+'noarticletext-nopermission' => 'अस्मिन् पृष्ठे अधुना किमपि न विद्यते । [[Special:Search/{{PAGENAME}}|एषः शब्दः]] येषु पृष्ठेषु अन्तर्भवति, तानि पृष्ठानि अन्वेष्टुं शक्यन्ते । 
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  सम्बद्धेषु पृष्ठेषु अन्वेषणं]
+[{{fullurl:{{FULLPAGENAME}}|action=edit}} अस्य पृष्ठस्य सम्पादनं] वा  शक्यम्</span>.',
 'missing-revision' => '{{PAGENAME}} इति नामाङ्कितपुटस्य #$1 इति पुनरावृत्तिः अत्र नाश्ति । 
 पुटेन सह कालातीतानुबन्धकारणेन एतत् अभवत् ।
 विवरणम् अत्र दृश्यते ।[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].',
@@ -962,7 +962,7 @@ $2
 'edit_form_incomplete' => "'''सम्पादनस्य कतिचनांशाः वितारकं न प्राप्ताः ; सम्पादनं  द्विवरं परिशीलयतु । ते सम्पादनानि अनाहतानि, पुनः यतताम्  '''",
 'editing' => '$1 सम्पाद्यते',
 'creating' => '$1 सर्जनम्',
-'editingsection' => '$1 सम्पादनम् (विभागः)',
+'editingsection' => '$1 (विभागस्य) सम्पादनं कुर्वन् अस्ति',
 'editingcomment' => '$1 संपादनम् (विभागः)',
 'editconflict' => 'सम्पादनयोः/सम्पादनानाम् अन्तर्विरोधः : $1',
 'explainconflict' => 'ते सम्पादनावसरे कोपि अन्यः परिवर्तितवान् । उपरितनलेखस्य क्षेत्रं सद्यः विद्यमानपुटयुक्तमस्ति । ते परिवर्तनम् अधः लेखक्षेत्रे दृश्यते । विद्यमानलेखैः सह ते परिवर्ताननि विलीनयतु । यदा संरक्षणप्रयत्नः क्रियते तदा केवलम् उपरिपठ्यभागः एव सुरक्षितं भवति ।',
@@ -992,11 +992,11 @@ $2
 'semiprotectedpagewarning' => "'''सूचना ''' पञ्जीकृतयोजकानां  उपयोगार्थ केवलम् एतत्पुटम् अभिरक्षितम् । जघन्यप्रवेशस्य सूचना आनुकूल्यार्थम् अधोनिदेशिता ।",
 'cascadeprotectedwarning' => "'''पूर्वसूचना ''' प्रशासकसौकर्ययुक्तानां योजकानाम् सम्पादनार्थम् एतत् पुटम् अभिरक्षितमस्ति । यतः अधोनिदेशितनिर्झरे एतदन्तर्गतम् । {{PLURAL:$1|page|pages}}:",
 'titleprotectedwarning' => "'''पूर्वसूचना  [[Special:ListGroupRights|specific rights]] जनानां सर्जनार्थम् एतत्पुटम् अभिरक्षितम् । '''",
-'templatesused' => 'अस्मिन् पृष्ठे प्रयुक्तानि {{PLURAL:$1|फलकम्|फलकानि}}:',
+'templatesused' => 'अस्मिन् पृष्ठे प्रयुक्त{{PLURAL:$1|फलकम्|फलकानि}}:',
 'templatesusedpreview' => 'अस्मिन् प्राग्दृश्ये प्रयुक्ताः {{PLURAL:$1|बिंबधराः |बिंबधराः}}:',
 'templatesusedsection' => '{{PLURAL:$1|Template|Templates}} अस्मिन् विभागे उपयुक्तम् ।',
 'template-protected' => '(संरक्षितम्)',
-'template-semiprotected' => '(अर्धसंरक्षितम्)',
+'template-semiprotected' => 'अर्धसंरक्षितम्',
 'hiddencategories' => 'इदं पृष्ठं {{PLURAL:$1|1 निगूढे वर्गे |$1 निगूढेषु वर्गेषु}} अन्यतमं विद्यते :',
 'nocreatetext' => '{{SITENAME}} नूतनपुटनिर्माणस्य क्षमता नियता । वर्तमानापुटानां सम्पादनार्थं निर्गच्छतु । अथवा [[Special:UserLogin|log in or create an account]].',
 'nocreate-loggedin' => 'नूतनपुटनिर्मार्थम् अनुमतिः नास्ति ।',
@@ -1009,7 +1009,7 @@ $2
 अस्य पृष्ठस्य सम्पादनं किं युक्तम् इति पुनः विचार्यताम् ।
 एतस्य पृष्ठस्य अपाकरणस्य चालनस्य च विवरणं भवतः उपयोगाय अत्र दीयन्ते :",
 'moveddeleted-notice' => 'इदं पृष्ठम् अपाकृतम् अस्ति।
-अस्य अपाकरणस्य स्थानान्तरणस्य च विवरणम् अधः प्रदत्तम् अस्ति।',
+अस्य अपाकरणस्य, स्थानान्तरणस्य च विवरणम् अधः प्रदत्तम् ।',
 'log-fulllog' => 'पूर्ण प्रवर्तनरेख पश्यतु',
 'edit-hook-aborted' => 'पाशेन (हुक् इत्यनेन) सम्पादनं परित्यक्तम्।
 अनेन न किमपि कारणं प्रदत्तम्।',
@@ -1017,6 +1017,7 @@ $2
 प्रतीयते यदिदं अपाकृतमस्ति।',
 'edit-conflict' => 'सम्पादनयोः/सम्पादनानां अन्तर्विरोधः।',
 'edit-no-change' => 'भवतः सम्पादनम् उपेक्षितम्, यतो हि भवता पाठे न किमपि परिवर्तनं कृतम्।',
+'postedit-confirmation' => 'सम्पादनं रक्षितम् ।',
 'edit-already-exists' => 'नूतनं पृष्ठं स्रष्टुं नापारयत्।
 इदं पूर्वे एव विद्यते।',
 'defaultmessagetext' => 'सन्देशपाठं स्थिरयतु ।',
@@ -1035,12 +1036,10 @@ $2
 'expensive-parserfunction-warning' => "'''प्रबोधः :''' अस्मिन् पृष्ठे प्रभूतानि जटिलानि पार्सर्-फ़ंक्शन्-आह्वानानि सन्ति।
 अत्र $2 संख्यातः  {{PLURAL:$2|न्यूनं आह्वानं|न्यूनानि आह्वानानि}} भवितव्यानि, सद्यः तत्र {{PLURAL:$1 $1 आह्वानं विद्यते|$1 आह्वानानि विद्यन्ते}}।",
 'expensive-parserfunction-category' => 'प्रभूतेभ्यः जटिलेभ्यः पार्सर्-फंक्शन्-आह्वानेभ्यः युक्तानि पृष्ठाणि।',
-'post-expand-template-inclusion-warning' => "'''प्रबोधः:''' फलकानां योजनस्य आकारः अतिविशालः वर्तते ।
-कानिचन फलकानि न योजयिष्यते ।",
-'post-expand-template-inclusion-category' => 'पृष्ठाणि यत्र अतोऽधिकाः बिम्बधराः समाहितीकर्तुं न शक्यन्ते।',
-'post-expand-template-argument-warning' => "'''जागरणम्''' अस्मिन् पृष्ठे कश्चन एतादृशं फलकं विद्यते यच्च संवर्धनेन बृहदाकारतां प्राप्नोति ।
-एतादृशानि फलकानि परित्यक्तानि सन्ति ।",
-'post-expand-template-argument-category' => 'परित्यक्तैः फलकैः युक्तानि पृष्ठानि एतानि',
+'post-expand-template-inclusion-warning' => "'''पूर्वसूचना:''' फलकस्य आकारः बृहत् वर्तते । कानिचन फलकानि नान्तर्भविष्यन्ति ।",
+'post-expand-template-inclusion-category' => 'माहितीफलकस्य अपेक्षया पृष्ठं बृहत् वर्तते ।',
+'post-expand-template-argument-warning' => "'''पूर्वसूचना''' अस्मिन् पृष्ठे स्थितस्य फलकस्य एकः विकल्पः बहु बृहत् भवेत् । तस्य विकल्पस्य अंशाः अपाकृताः ।",
+'post-expand-template-argument-category' => 'येषु पृष्ठेषु फलके स्थिताः विकल्पाः न पूरिताः तेषां पृष्ठानाम् आवलिः',
 'parser-template-loop-warning' => 'बिम्बधर-पाशः प्राप्तः: [[$1]]',
 'parser-template-recursion-depth-warning' => 'बिम्बधर-पुनरावर्तनार्थं गहनतायाः सीमा अतिक्रान्ताऽस्ति ($1)',
 'language-converter-depth-warning' => 'भाषा-परिवर्तकस्य गहनतायाः सीमा अतिक्रान्ताऽस्ति (*$1)',
@@ -1065,16 +1064,16 @@ $2
 एतदर्थं $3 इत्यनेन प्रदत्तं कारणम्''$2'' इत्यस्ति।",
 
 # History pages
-'viewpagelogs' => 'à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤²à¥\89à¤\82à¤\97à¥\8d à¤\87तà¥\8dयà¥\87तदà¥\8d à¤¦à¤°à¥\8dशयतà¥\81',
+'viewpagelogs' => 'à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82रà¤\95à¥\8dषितावलिà¤\83 (logs) à¤¦à¥\83शà¥\8dयतामà¥\8d',
 'nohistory' => 'अस्य पृष्ठस्य कृते पृष्ठेतिहासः न वर्तते।',
 'currentrev' => 'सद्यःकालीना आवृत्तिः',
-'currentrev-asof' => 'वर्तमाना आवृत्तिः $1 इति समये',
-'revisionasof' => '$1 à¤\87तà¥\8dयसà¥\8dय à¤\86वà¥\83तà¥\8dतिà¤\83',
+'currentrev-asof' => '$1 समयस्य संस्करणम्',
+'revisionasof' => '$1 à¤\87तà¥\8dयसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणà¤\82',
 'revision-info' => '$1इति समयस्य आवृत्तिः $2 इत्यनेन',
 'previousrevision' => '← पुरातनानि संस्करणानि',
 'nextrevision' => 'नूतनतरा आवृत्तिः →',
 'currentrevisionlink' => 'सद्यःकालीना आवृत्तिः',
-'cur' => 'सदà¥\8dयà¥\8bà¤\9cातमà¥\8d',
+'cur' => 'वरà¥\8dतमानà¤\83',
 'next' => 'आगामि',
 'last' => 'पूर्वतनम्',
 'page_first' => 'प्रथमम्',
@@ -1082,8 +1081,8 @@ $2
 'histlegend' => 'भेदस्य चयनम्: आवृत्तिभेदस्य दर्शनाय अग्रे प्रदत्ता रेडियोमञ्जूषा नुद्यताम्, एण्टर्-कुड्मलं नुद्यताम्, अधः दत्तं कुड्मलं वा नुद्यताम् । <br />
 इतिहासः: (सद्योजातम्) = नूतनासु आवृत्तिषु भेदः, 
 (पूर्वतनम्) = पूर्वतनासु आवृत्तिषु भेदः, (लघु) = लघु परिवर्तनम्',
-'history-fieldset-title' => 'सà¥\81à¤\97मनसà¥\8dय(बà¥\8dराà¤\89सà¥\8d à¤\87तà¥\8dयसà¥\8dय) इतिहासः',
-'history-show-deleted' => 'à¤\95à¥\87वलमà¥\8d à¤µà¤¿à¤²à¥\8bपित',
+'history-fieldset-title' => 'à¤\97वà¥\87षणसà¥\8dय (browser) इतिहासः',
+'history-show-deleted' => 'मातà¥\8dरमà¥\8d à¤\85पाà¤\95à¥\83तमà¥\8d',
 'histfirst' => 'पुरातनतमम्',
 'histlast' => 'नूतनतमम्',
 'historysize' => '({{PLURAL:$1|1 बैटम्|$1 बैटानि}})',
@@ -1117,7 +1116,7 @@ You can still [$1 view this revision]',
 You can still [$1 view this revision]",
 'rev-deleted-diff-view' => 'एतस्मात् अन्तरतः किञ्चिदवतरणं परिमार्जितम् । एतदन्तरं दृष्टुं शक्नुवन्ति । विवरणम् [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटाने की लॉग]',
 'rev-suppressed-diff-view' => 'अस्मिन्नन्तरे किञ्चिदवतरणं सङ्गुपतम् । तदन्तरम् अत्र दृष्टुं शक्नुवन्ति । [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].',
-'rev-delundel' => 'दरà¥\8dशà¥\8dयनà¥\8dतामà¥\8d/à¤\97à¥\8bपà¥\8dयनà¥\8dताम्',
+'rev-delundel' => 'दà¥\83शà¥\8dयतामà¥\8d/à¤\97à¥\8bपà¥\8dयताम्',
 'rev-showdeleted' => 'दर्श्यताम्',
 'revisiondelete' => 'अवतरणं परिमार्जयतु/पुनस्थापयतु',
 'revdelete-nooldid-title' => 'लक्ष्यरूपा आवृत्तिः अमान्याऽस्ति।',
@@ -1127,8 +1126,6 @@ You can still [$1 view this revision]",
 'revdelete-show-file-submit' => 'आम्',
 'revdelete-selected' => "'''{{PLURAL:$2|Selected revision|Selected revisions}} of [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Selected log event|Selected log events}}:'''",
-'revdelete-text' => "'''परिमार्जितानि अवतरणानि पुटेतिहासे अद्यापि दृश्यन्ते । तस्य कश्चन भागः सार्वजनिकः न भवति । '''
-{{SITENAME}} इत्यस्य अन्यप्रशसासकः गुप्तसामग्रीः प्राप्नुवन्ति । अपि च अन्तरापुटेन अस्य अपरिमार्जनं कर्तुं शक्नुवन्ति । यावत् अतिरिक्तप्रतिबन्धकाः न स्थापिताः ।",
 'revdelete-confirm' => 'भवान् एतत् कार्यं करोति इति दढयतु । भवान् अस्य परिणामं जानाति । [[{{MediaWiki:Policy-url}}|the policy]] भवान् एतदनुसारं करोति ।',
 'revdelete-suppress-text' => 'अधोनिदेशितपरिस्थितिषु केवलं निग्रहः कार्यः । 
 * अवमाननीयाः विषयाः ।
@@ -1152,7 +1149,7 @@ You can still [$1 view this revision]",
 'revdelete-failure' => 'अवतरणदृश्यता उन्नतीकरणं न शक्यते ।$1',
 'logdelete-success' => 'नामाङ्कनदृश्यता साफल्येन योजिता ।',
 'logdelete-failure' => 'नामाभिलेखदृश्यता सपला नाभवत् । $1',
-'revdel-restore' => 'दà¥\83षà¥\8dà¤\9fिविषयà¤\83 परिवर्त्यताम्',
+'revdel-restore' => 'दà¥\83शà¥\8dयता परिवर्त्यताम्',
 'pagehist' => 'पृष्ठस्य इतिहासः',
 'deletedhist' => 'परिमार्जितेतिहासः ।',
 'revdelete-hide-current' => '$2 $1 दिनाङ्कितस्य गोपने दोषः । एतत् प्रकृतावतरणम्, एतत् न गोपनीयम् ।',
@@ -1206,49 +1203,51 @@ You can still [$1 view this revision]",
 'mergelogpagetext' => 'अतिनूतनविलीनस्य आवली अधो दत्ता यस्य इतिहासः अन्यस्मिन् अस्ति ।',
 
 # Diffs
-'history-title' => '"$1" à¤\87तà¥\8dयà¥\87तसà¥\8dय à¤\86वरà¥\8dतनà¥\87तिहासà¤\83 :',
+'history-title' => '"$1" इत्यस्य आवर्तनेतिहासः :',
 'difference-title' => '"$1" इत्यस्य अवतरणमध्ये व्यत्यासः ।',
 'difference-title-multipage' => '"$1" तथा "$2" पुटयोः मध्ये व्यत्यासः ।',
 'difference-multipage' => 'पुटेषु व्यत्यासः ।',
-'lineno' => 'पà¤\82क्तिः $1:',
+'lineno' => 'पà¤\99à¥\8dक्तिः $1:',
 'compareselectedversions' => 'चितानाम् आवृत्तीनां तोलनं क्रियताम्',
 'showhideselectedversions' => 'चितावतरणानि दर्शयतु/गोपयतु ।',
-'editundo' => 'निषà¥\8dà¤\95à¥\8dरियताम्',
+'editundo' => 'पà¥\82रà¥\8dववत्',
 'diff-multi-manyusers' => '({{PLURAL:$2|योजकेन|$2 योजकैः}} कृता {{PLURAL:$1|मध्यमा आवृत्तिः|$1 मध्यमा आवृत्तयः}} न दर्शिताः ।)',
 'difference-missing-revision' => '{{PLURAL:$2|One revision|$2 पुनरावृत्तेः }} व्यत्यासः ($1) {{PLURAL:$2|was|were}} न दृष्टः ।
 कारणम् अत्र दृश्यते । [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].',
 
 # Search results
-'searchresults' => 'à¤\85नà¥\8dवà¥\87षणसà¥\8dय à¤«à¤²à¤¿à¤¤à¤¾à¤¨à¤¿',
-'searchresults-title' => '"$1" à¤\87तà¥\8dयसà¥\8dय à¤\95à¥\83तà¥\87 à¤\85नà¥\8dवà¥\87षणफलानि',
+'searchresults' => 'à¤\85नà¥\8dवà¥\87षणपरिणामाà¤\83',
+'searchresults-title' => '"$1" à¤\95à¥\83तà¥\87 à¤\85नà¥\8dवà¥\87षणपरिणामाà¤\83',
 'toomanymatches' => 'अत्यधिकाः मेलाः प्रत्यागताः । अन्यप्रश्नेन यतताम् ।',
 'titlematches' => 'पुटशीर्षिकामेलाः ।',
 'textmatches' => 'पुटपाठस्य मेलाः',
 'notextmatches' => 'न कस्यापि पृष्ठस्य पाठः अस्य सममस्ति',
-'prevn' => 'पà¥\8dराà¤\95à¥\8dतनानि {{PLURAL:$1|$1}}',
-'nextn' => 'à¤\85à¤\97à¥\8dरिमाणि {{PLURAL:$1|$1}}',
-'prevn-title' => 'पà¥\8dराà¤\95à¥\8dतन-{{PLURAL:$1|फलितमà¥\8d| à¤«à¤²à¤¿à¤¤à¤¾à¤¨à¤¿}}',
-'nextn-title' => 'पà¥\8dराà¤\95à¥\8dतन-{{PLURAL:$1|फलितमà¥\8d| à¤«à¤²à¤¿à¤¤à¤¾à¤¨à¤¿}}',
+'prevn' => 'पà¥\81रसà¥\8dतातà¥\8d {{PLURAL:$1|$1}}',
+'nextn' => 'परसà¥\8dतातà¥\8d {{PLURAL:$1|$1}}',
+'prevn-title' => 'पà¥\81रसà¥\8dतातà¥\8d {{PLURAL:$1|परिणामà¤\83|परिणामाà¤\83}}',
+'nextn-title' => 'परसà¥\8dतातà¥\8d {{PLURAL:$1|परिणामà¤\83|परिणामाà¤\83}}',
 'shown-title' => 'प्रत्येकस्मिन् पृष्ठे $1 {{PLURAL:$1|फलितम्|फलितानि}} दर्श्यताम्',
 'viewprevnext' => 'दर्श्यताम् ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-exists' => 'अस्मिन् विकिमध्ये "[[:$1]]"नामकं पृष्ठं विद्यते।',
-'searchmenu-new' => "'''अस्यां विक्यां \"[[:\$1]]\" इति पृष्ठं सृज्यताम्!'''",
-'searchprofile-articles' => 'आन्तर्यम्',
-'searchprofile-project' => 'सहायता प्रकल्पपृष्ठानि च',
-'searchprofile-images' => 'बहुमाध्यमः',
+'searchmenu-exists' => "'''विकि-जालस्थानेऽस्मिन्  \"[[:\$1]]\" नामकं पृष्ठं विद्यते ।'''",
+'searchmenu-new' => '<strong> अस्मिन् विकिजालस्थाने "[[:$1]]" इदं पृष्ठं सृज्यताम् ।
+</strong>
+{{PLURAL:$2|0=|तव अन्वेषणस्य परिणामोपि दृश्यताम् ।|तव अन्वेषणस्य परिणामाः अपि दृश्यन्ताम्}}',
+'searchprofile-articles' => 'आन्तर्विषकं पृष्ठं',
+'searchprofile-project' => 'साहाय्यं, प्रकल्पपृष्ठानि च',
+'searchprofile-images' => 'माध्यमसमुच्चयः',
 'searchprofile-everything' => 'सर्वम्',
 'searchprofile-advanced' => 'प्रगतम्',
 'searchprofile-articles-tooltip' => '$1 स्थले अन्विष्यताम्',
 'searchprofile-project-tooltip' => '$1 स्थले अन्विष्यताम्',
 'searchprofile-images-tooltip' => 'सञ्चिका अन्विष्यताम्',
 'searchprofile-everything-tooltip' => '(चर्चापृष्ठानि अविहाय) सर्वत्र अन्विष्यताम्',
-'searchprofile-advanced-tooltip' => 'विशà¥\87षनामसà¥\8dथानेषु अन्विष्यताम्',
+'searchprofile-advanced-tooltip' => 'नामाà¤\95ाशेषु अन्विष्यताम्',
 'search-result-size' => '$1 ({{PLURAL:$2|1 शब्दः|$2 शब्दाः}})',
 'search-result-category-size' => '{{PLURAL:$1|1 सदस्यः|$1 सदस्याः}} ({{PLURAL:$2|1 उपवर्गः|$2 उपर्गाः}}, {{PLURAL:$3|1 सञ्चिका|$3 सञ्चिकाः}})',
 'search-result-score' => 'सम्बन्धः $1% ।',
-'search-redirect' => '($1 à¤\87तà¥\8dयतà¥\8dर अनुप्रेषितम्)',
+'search-redirect' => '($1 à¤¤à¤\83 अनुप्रेषितम्)',
 'search-section' => '(विभागः $1)',
-'search-suggest' => 'किं भवतः आशयः एवमस्ति : $1',
+'search-suggest' => 'किं भवतः/भवत्याः आशयः एवमस्ति : $1',
 'search-interwiki-caption' => 'बन्धु-प्रकल्पाः',
 'search-interwiki-default' => '$1 परिणामाः :',
 'search-interwiki-more' => '(अधिकानि)',
@@ -1258,8 +1257,8 @@ You can still [$1 view this revision]",
 'searchall' => 'सर्वाणि',
 'showingresults' => "निम्नगतक्रमाङ्कस्य '''$2''' तः आरभ्य अधिकतमं परिणामः'''$1''' {{PLURAL:$1| दर्शितः}}।",
 'showingresultsnum' => "निम्नगतक्रमाङ्क'''$2'''तः आरभ्य अधिकतमः '''$3''' परिणामः {{PLURAL:$3|दर्शितः}}।",
-'showingresultsheader' => "'''$4''' à¤\87तà¥\8dयà¥\87तसà¥\8dय {{PLURAL:$5|'''$3'''सà¥\8dय '''$1'''  à¤«à¤²à¤¿à¤¤à¤®à¥\8d|'''$3'''सà¥\8dय '''$1 - $2'''  à¤«à¤²à¤¿à¤¤à¤¾à¤¨à¤¿}}",
-'search-nonefound' => 'भवतः अपेक्षानुगुणं फलितं न किमपि विद्यते ।',
+'showingresultsheader' => "'''$4''' à¤\87तà¥\8dयà¥\87तसà¥\8dमà¥\88 {{PLURAL:$5|'''$1''' à¤ªà¤°à¤¿à¤£à¤¾à¤®à¤\83 '''$3''' à¤\87तà¥\8dयà¥\87षà¥\81|'''$1 - $2''' à¤ªà¤°à¤¿à¤£à¤¾à¤®à¤¾à¤\83 '''$3''' à¤\87तà¥\8dयà¥\87षà¥\81}}",
+'search-nonefound' => 'भवतः/भवत्याः अपेक्षानुगुणं परिणामः न विद्यते ।',
 'powersearch-legend' => 'प्रगतम् अन्वेषणम्',
 'powersearch-ns' => 'नामाकाशेषु अन्विष्यताम्:',
 'powersearch-redir' => 'अनुप्रेषणानां सूचिका दर्श्यताम्',
@@ -1273,7 +1272,7 @@ You can still [$1 view this revision]",
 
 # Preferences page
 'preferences' => 'इष्टतमानि',
-'mypreferences' => 'मम à¤\87षà¥\8dà¤\9fतमानि',
+'mypreferences' => 'इष्टतमानि',
 'prefs-edits' => 'सम्पादनानां सख्याः',
 'prefs-skin' => 'त्वक्',
 'skin-preview' => 'प्राग्दृश्यम्',
@@ -1537,27 +1536,27 @@ You can still [$1 view this revision]",
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|परिवर्तनम्|परिवर्तनानि}}',
-'recentchanges' => 'सदà¥\8dयà¥\8bà¤\9cातानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि',
+'recentchanges' => 'सद्यपरिवर्तनानि',
 'recentchanges-legend' => 'सद्योजातानां परिवर्तनानां विकल्पाः',
 'recentchanges-summary' => 'अस्मिन् विकियोजनायां सद्योजातानि परिवर्तनानि दर्श्यन्ताम्',
-'recentchanges-feed-description' => 'अस्मिन् विकियोजनायां सद्योजातानि परिवर्तनानि दर्श्यन्ताम्',
-'recentchanges-label-newpage' => 'à¤\8fतसà¥\8dमातà¥\8d à¤¸à¤®à¥\8dपादनातà¥\8d à¤¨à¥\82तनà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 à¤¸à¥\83षà¥\8dà¤\9fमसà¥\8dति',
+'recentchanges-feed-description' => 'अस्मिन् विकि-प्रकल्पे सद्योजातानि परिवर्तनानि दर्श्यन्ताम्',
+'recentchanges-label-newpage' => 'à¤\85नà¥\87न à¤¸à¤®à¥\8dपादनà¥\87न à¤¨à¥\82तनपà¥\83षà¥\8dठसà¥\8dय à¤°à¤\9aना à¤\85भà¥\82तà¥\8d à¥¤',
 'recentchanges-label-minor' => 'इदं लघु परिवर्तनम्',
-'recentchanges-label-bot' => 'à¤\8fतदà¥\8d à¤¯à¤¨à¥\8dतà¥\8dरà¥\87ण à¤\95à¥\83तà¤\82 à¤¸à¤®à¥\8dपादनमà¥\8d à¤\86सà¥\80त्',
-'recentchanges-label-unpatrolled' => 'à¤\8fतदà¥\8d à¤¸à¤®à¥\8dपादनमà¥\8d à¤\8fतावता à¤ªà¤°à¤¿à¤¶à¥\80लितà¤\82 à¤¨à¤¾à¤¸à¥\8dति ।',
+'recentchanges-label-bot' => 'बà¥\8bà¤\9fà¥\8d-दà¥\8dवारा à¤\95à¥\83तà¤\82 à¤¸à¤®à¥\8dपादनमà¥\87तत्',
+'recentchanges-label-unpatrolled' => 'à¤\8fतावता à¤\85सà¥\8dय à¤¸à¤®à¥\8dपादनसà¥\8dय à¤ªà¤°à¤¿à¤¶à¥\80लिनà¤\82 à¤¨à¤¾à¤­à¥\82तà¥\8d ।',
 'rcnotefrom' => "अधः '''$2''' तः  ('''$1''' पर्यन्तं) परिवर्तनानि दर्शितानि सन्ति ।",
-'rclistfrom' => '$1 à¤¤à¤\83 à¤\9cातानि à¤¨à¥\82तनानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤¦à¤°à¥\8dशà¥\8dयताम्',
-'rcshowhideminor' => '$1 à¤²à¤\98à¥\82नि सम्पादनानि',
+'rclistfrom' => '$1 à¤ªà¤¶à¥\8dà¤\9aातà¥\8d à¤\9cातानि à¤¨à¥\82तनानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤¦à¥\83शà¥\8dयनà¥\8dताम्',
+'rcshowhideminor' => '$1 à¤²à¤\98à¥\81सम्पादनानि',
 'rcshowhidebots' => '$1 बोट् इत्येतानि',
-'rcshowhideliu' => '$1 à¤ªà¥\8dरविषà¥\8dà¤\9fाः योजकाः',
+'rcshowhideliu' => '$1 à¤ªà¤\9eà¥\8dà¤\9cà¥\80à¤\95à¥\83ताः योजकाः',
 'rcshowhideanons' => 'अनामकाः योजकाः $1',
 'rcshowhidepatr' => '$1 ईक्षितसम्पादनानि',
 'rcshowhidemine' => '$1 मम सम्पादनानि',
-'rclinks' => 'à¤\85नà¥\8dतिमानि $1 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤\85नà¥\8dतिमà¥\87षà¥\81 $2 à¤¦à¤¿à¤¨à¥\87षà¥\81, à¤¦à¥\83शà¥\8dयतामà¥\8d<br />$3',
+'rclinks' => 'à¤\85नà¥\8dतिमà¥\87षà¥\81 $2 à¤¦à¤¿à¤¨à¥\87षà¥\81 à¤\9cातानि à¤\85नà¥\8dतिमानि $1 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤¦à¥\83शà¥\8dयतामà¥\8d <br />$3',
 'diff' => 'भेदः',
 'hist' => 'इतिहासः',
 'hide' => 'गोप्यताम्',
-'show' => 'दरà¥\8dश्यताम्',
+'show' => 'दà¥\83श्यताम्',
 'minoreditletter' => '(लघु)',
 'newpageletter' => '(नवीनम्)',
 'boteditletter' => '(बोट्)',
@@ -1566,7 +1565,7 @@ You can still [$1 view this revision]",
 'rc_categories_any' => 'कश्चित्',
 'rc-change-size-new' => '$1 {{PLURAL:$1|byte|bytes}} परिवर्तनपश्चात् ।',
 'newsectionsummary' => '/* $1 */ नवीन विभागः',
-'rc-enhanced-expand' => 'विवरणानि à¤¦à¤°à¥\8dशà¥\8dयनà¥\8dतामà¥\8d (à¤\9cावालिपिà¤\83 à¤\85पà¥\87à¤\95à¥\8dषà¥\8dयतà¥\87)',
+'rc-enhanced-expand' => 'विवरणानि à¤¦à¥\83शà¥\8dयनà¥\8dतामà¥\8d',
 'rc-enhanced-hide' => 'विवरणानि गोप्यन्ताम्',
 'rc-old-title' => 'मूलरूपेण $1 इति रचितम् ।',
 
@@ -1575,10 +1574,10 @@ You can still [$1 view this revision]",
 'recentchangeslinked-feed' => 'पृष्ठ-सम्बन्धितानि परिवर्तनानि',
 'recentchangeslinked-toolbox' => 'पृष्ठसम्बद्धानि परिवर्तनानि',
 'recentchangeslinked-title' => '"$1" इत्यस्मिन् जातानि परिवर्तनानि',
-'recentchangeslinked-summary' => "à¤\8fषा à¤µà¤¿à¤¶à¥\87षपà¥\83षà¥\8dठसमà¥\8dबदà¥\8dधà¥\87षà¥\81 à¤ªà¥\84षà¥\8dठà¥\87षà¥\81 à¤\85थवा à¤µà¤°à¥\8dà¤\97विशà¥\87षà¥\87 à¤\85नà¥\8dतरà¥\8dभà¥\82तà¥\87षà¥\81 à¤ªà¥\83षà¥\8dठà¥\87षà¥\81 à¤¸à¤¦à¥\8dयà¥\8bà¤\9cातानाà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानामà¥\8d à¤\86वलिà¤\83
+'recentchangeslinked-summary' => "विशà¥\87षपà¥\83षà¥\8dठà¥\87षà¥\81 à¤µà¤°à¥\8dà¤\97ानà¥\8dतरà¥\8dà¤\97तपà¥\83षà¥\8dठà¥\87षà¥\81 à¤µà¤¾ à¤¸à¤¦à¥\8dयà¥\8bà¤\9cातानाà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानामà¥\8d à¤\8fषा à¤\86वलिà¤\83 
 
-[[Special:Watchlist|भवतः अवेक्षणसूच्यां]] विद्यमानानि पृष्ठानि '''स्थूलाक्षरैः''' दर्शितानि।",
-'recentchangeslinked-page' => 'पृष्ठ-नाम :',
+[[Special:Watchlist|भवतः/भवत्याः अवेक्षणावलिः]] अत्र विद्यमानानि पृष्ठानि '''स्थूलाक्षरैः''' दर्शितानि।",
+'recentchangeslinked-page' => 'पृष्ठनाम:',
 'recentchangeslinked-to' => 'अस्मिन् स्थाने अस्य पृष्ठस्य संबद्धानां पृष्ठानां परिवर्तनानि दर्श्यन्ताम्',
 
 # Upload
@@ -1607,7 +1606,7 @@ To include a file in a page, use a link in one of the following forms:
 'uploadlogpagetext' => 'अधः सद्यः काले उत्तारितसञ्चिकानाम् आवली अस्ति ।
 अधिकदृश्यविवरणार्थम् एतत् पश्यतु [[Special:NewFiles|gallery of new files]]',
 'filename' => 'सञ्चिकानाम',
-'filedesc' => 'सारांशः :',
+'filedesc' => 'सारांशः',
 'fileuploadsummary' => 'संग्रहः :',
 'filereuploadsummary' => 'सञ्चिकापरिवर्तनानि ।',
 'filestatus' => 'प्रतिकृत्यधिकारस्य स्थितिः ।',
@@ -1836,34 +1835,34 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 # File description page
 'file-anchor-link' => 'सञ्चिका',
 'filehist' => 'सञ्चिकायाः इतिहासः',
-'filehist-help' => 'सà¤\9eà¥\8dà¤\9aिà¤\95ा à¤¤à¤¤à¥\8dसमयà¥\87 à¤\95à¥\80दà¥\83शà¥\80 à¤\86सà¥\80दिति à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¦à¤¿à¤¨à¤¾à¤\82कः/समयः नुद्यताम् ।',
+'filehist-help' => 'सà¤\9eà¥\8dà¤\9aिà¤\95ा à¤¤à¤¤à¥\8dसमयà¥\87 à¤\95à¥\80दà¥\83शà¥\80 à¤\86सà¥\80दिति à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¦à¤¿à¤¨à¤¾à¤\99à¥\8dकः/समयः नुद्यताम् ।',
 'filehist-deleteall' => 'सर्वान् परिमर्जतु ।',
 'filehist-deleteone' => 'विलोप',
 'filehist-revert' => 'प्रतिनिवर्त्यताम्',
-'filehist-current' => 'सदà¥\8dयà¥\8bà¤\9cातमà¥\8d',
+'filehist-current' => 'वरà¥\8dतमानà¤\83',
 'filehist-datetime' => 'दिनाङ्कः/समयः',
-'filehist-thumb' => 'à¤\85à¤\82à¤\97à¥\81षà¥\8dठनà¤\96ाà¤\95ारमà¥\8d',
-'filehist-thumbtext' => '$1 à¤¸à¤®à¤¯à¥\87 à¤µà¤¿à¤¦à¥\8dयमानायाà¤\83 à¤\86वà¥\83तà¥\8dतà¥\87à¤\83 à¤\85à¤\82à¤\97à¥\81षà¥\8dठनà¤\96ाà¤\95ारमà¥\8d',
+'filehist-thumb' => 'लà¤\98à¥\8dवाà¤\95à¥\83तिà¤\83',
+'filehist-thumbtext' => '$1 à¤\87तà¥\8dयसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणसà¥\8dय à¤²à¤\98à¥\81सà¥\8dवरà¥\82पमà¥\8d à¥¤',
 'filehist-nothumb' => 'अङ्गुष्टनखाकारकं नाश्ति ।',
 'filehist-user' => 'योजकः',
 'filehist-dimensions' => 'आयामाः',
 'filehist-filesize' => 'सञ्चिकाकारः ।',
 'filehist-comment' => 'टिप्पणी',
 'filehist-missing' => 'सञ्चिका विनष्टा ।',
-'imagelinks' => 'सà¤\82à¤\9aिà¤\95ा à¤¯à¤¤à¥\8dर à¤\89पयà¥\81à¤\95à¥\8dता',
-'linkstoimage' => '{{PLURAL:$1|अधोलिखितं पृष्ठं| अधोलिखितानि $1 पृष्ठाणि}} इदं संचिकां प्रति संबंधनं {{PLURAL:$1|करोति| कुर्वन्ति}}।',
+'imagelinks' => 'सà¤\9eà¥\8dà¤\9aिà¤\95ायाà¤\83 à¤\89पयà¥\8bà¤\97à¤\83',
+'linkstoimage' => '{{PLURAL:$1|अधो निर्दिष्टपृष्ठस्य परिसन्धयः|$1 अधो निर्दिष्टपृष्ठानां परिसन्धिः} अत्र {{PLURAL:$1|सल्लग्नाः सन्ति|सल्लग्ना अस्ति}}:',
 'linkstoimage-more' => '{{PLURAL:$1|$1}} तः अधिकपुटानि अस्यां सञ्चिकायां योज्यन्ते । 
 अधोनिदेशितसूची सञ्चिकाभिः योजनीयपुटानि पश्यति ।{{PLURAL:$1|$1 पृष्ठ|$1 पृष्ठ}} 
 [[Special:WhatLinksHere/$2|पूर्णसूची]] अपि लभ्यते ।',
-'nolinkstoimage' => 'à¤\8fतद à¤\9aितà¥\8dरातà¥\8d à¤¨ à¤ªà¥\83षà¥\8dठा à¤¸à¤®à¥\8dबदà¥\8dधà¤\82 à¤\95रà¥\8bनà¥\8dति।',
+'nolinkstoimage' => 'à¤\85नया à¤¸à¤\9eà¥\8dà¤\9aिà¤\95या à¤¸à¤¹ à¤¨ à¤\95िमपि à¤ªà¥\83षà¥\8dठà¤\82 à¤¸à¤²à¥\8dलà¤\97à¥\8dनमà¥\8d à¤\85सà¥\8dति',
 'morelinkstoimage' => ' [[Special:WhatLinksHere/$1|more links]] मध्ये सञ्चिकामवलोकयतु ।',
 'linkstoimage-redirect' => '$1 (सञ्चिका पुनर्निदेशिता) $2',
 'duplicatesoffile' => 'अधो निदेशितसञ्चिका द्विप्रतिः । {{PLURAL:$1|}} विशेषविवरणार्थम् अत्र प्रविशतु । [[Special:FileDuplicateSearch/$2|more details]]',
 'sharedupload' => 'इयं संचिका $1 इत्यस्मादस्ति, एषा खलु अन्येष्वपि प्रकल्पेषु प्रयोक्तुं शक्यते।',
 'sharedupload-desc-there' => 'एषा सञ्चिका $1 तथा अन्यप्रकल्पेन च उपयुक्ता ।
 इत्योप्यतिशयसूचनार्थं $2 सञ्चिकाविवरणपुटं पश्यतु ।',
-'sharedupload-desc-here' => 'एषा सञ्चिका $1 इत्यतः उद्धृता अन्यासु योजनासु उपयोगार्हा ।
-à¤\85सà¥\8dयाà¤\83 à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ायाà¤\83  [$2 à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ाविवरणपà¥\83षà¥\8dठमà¥\8d] à¤\87तà¥\8dयतà¥\8dर à¤\89पलभà¥\8dयमानà¤\82 à¤µà¤¿à¤µà¤°à¤£à¤®à¥\8d à¤\85धà¥\8bलिà¤\96ितà¤\82 à¤¯à¤¥à¤¾ ।',
+'sharedupload-desc-here' => '$1 इत्यतः उद्धृता एषा सञ्चिका अन्येषु प्रकल्पेषु उपयोगार्हा ।
+à¤\85सà¥\8dयाà¤\83 à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ायाà¤\83  [$2 à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ाविवरणपà¥\83षà¥\8dठमà¥\8d] à¤\87तà¥\8dयतà¥\8dर à¤\89पलभà¥\8dयमानà¤\82 à¤µà¤¿à¤µà¤°à¤£à¤®à¥\8d à¤\85धà¥\8bलिà¤\96ितà¤\82 à¤µà¤°à¥\8dततà¥\87 ।',
 'sharedupload-desc-edit' => '    एषा सञ्चिका $1 इत्यतः उद्धृता अन्यासु योजनासु उपयोगार्हा । 
 अस्याः सञ्चिकायाः [$2 सञ्चिकाविवरणपृष्ठम्] इत्यत्र उपलभ्यमानं विवरणम् अधोलिखितं यथा ।',
 'sharedupload-desc-create' => 'एषा सञ्चिका $1 इत्यतः उद्धृता अन्यासु योजनासु उपयोगार्हा । 
@@ -1925,7 +1924,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'unusedtemplateswlh' => 'अन्यानुबन्धाः ।',
 
 # Random page
-'randompage' => 'यादृच्छिकपृष्ठम्',
+'randompage' => '‎अशृङ्खलं (random) पृष्ठं',
 'randompage-nopages' => 'अधोनिदेशितनामस्थाने पुटानि न सन्ति । {{PLURAL:$2| एतन्नमस्थाने}} नास्ति : $1।',
 
 # Random redirect
@@ -1978,11 +1977,11 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'fewestrevisions' => 'न्यूनतमालोकनयुक्तपुटानि ।',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|बà¥\88à¤\9fà¥\8d|बà¥\88à¤\9fà¥\8dसà¥\8d}}',
+'nbytes' => '$1 {{PLURAL:$1|à¤\85षà¥\8dà¤\9fà¤\95मà¥\8d|à¤\85षà¥\8dà¤\9fà¤\95ानि}}',
 'ncategories' => '{{PLURAL:$1|वर्गः|वर्गाः }}',
 'ninterwikis' => '$1 {{PLURAL:$1|अन्तार्विकी|अन्तार्विक्यः}}',
 'nlinks' => '$1 {{PLURAL:$1|अनुबन्धः|अनुबन्धाः}}',
-'nmembers' => '$1 {{PLURAL:$1|सदसà¥\8dयà¤\83|सदसà¥\8dयाः}}',
+'nmembers' => '$1 {{PLURAL:$1|यà¥\8bà¤\9cà¤\95à¤\83|यà¥\8bà¤\9cà¤\95ाः}}',
 'nrevisions' => '$1 {{PLURAL:$1|पुनरावृत्तिः}}',
 'nviews' => '$1 {{PLURAL:$1|अनुबन्धः|अनुबन्धाः}}',
 'nimagelinks' => '$1 {{PLURAL:$1|पुटम्|पुटानि}} प्रयुक्तानि ।',
@@ -2027,8 +2026,8 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'listusers-editsonly' => 'केवलं सम्पादनसहितयोजकान् दर्शयतु ।',
 'listusers-creationsort' => 'सर्जनदिनाङ्कैः वर्गीकरोतु ।',
 'usereditcount' => '$1 {{PLURAL:$1|दिनम्|दिनानि}}',
-'usercreated' => '$1 दिने $2 समये रचितम् योजकनाम $3',
-'newpages' => 'नवà¥\80नपà¥\83षà¥\8dठमà¥\8d',
+'usercreated' => '$1 दिने $2 समये {{GENDER:$3|रचितं}}',
+'newpages' => 'नवà¥\80नपà¥\83षà¥\8dठानि',
 'newpages-username' => 'योजकनामन्:',
 'ancientpages' => 'प्राचीनतमानि पृष्ठानि',
 'move' => 'चाल्यताम्',
@@ -2045,7 +2044,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'querypage-disabled' => 'समाचरणकारणेन एतद्विशेषपुटं निष्क्रियम् ।',
 
 # Book sources
-'booksources' => 'à¤\97à¥\8dरनà¥\8dथानाà¤\82 à¤¸à¥\8dरà¥\8bतà¤\83',
+'booksources' => 'ग्रन्थस्रोतः',
 'booksources-search-legend' => 'ग्रन्थस्रोतः अन्विष्यताम्',
 'booksources-go' => 'गम्यताम्',
 'booksources-text' => 'अधस्था आवली नूतनप्राचीनपुस्तकानां विक्रयकेन्द्रस्य अनुबन्धान् सूचयति । यत्र ते  आवश्यकाः अन्यविषयाः अपि उपलभ्याः ।',
@@ -2054,7 +2053,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 # Special:Log
 'specialloguserlabel' => 'आचारी :',
 'speciallogtitlelabel' => 'लक्ष्यम् (शीर्षकम् / योजकः)',
-'log' => 'लà¥\89à¤\97à¥\8d à¤\87तà¥\8dयà¥\87तानि',
+'log' => 'सà¤\82सà¤\95à¥\8dषितावलà¥\8dयà¤\83 (Logs)',
 'all-logs-page' => 'सर्वसार्वजनिकप्रवेशः ।',
 'alllogstext' => '{{SITENAME}}इत्यस्य उबलब्धप्रवेशानां  संयुक्तप्रदर्शनम् ।
 प्रवेशप्रकारं चित्वा भवान् दृश्यं क्षाययितुं शक्नोति । योजकनाम,  सदस्य नाम (ह्रस्वदीर्घाक्षरसंवादी) प्रभावितपुटम् ।',
@@ -2105,7 +2104,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'linksearch-text' => '"*.wikipedia.org" सदृशानि वन्यपत्राणि योजयितुं शक्यते । 
 न्यूनातिन्यूनं ".org" सदृशः अत्युन्नतस्तरस्य डोमेन आवश्यकम् अस्ति <br />
 अनुमोदितक्रमागतिः  <code>$1</code> (एतेषु कतममपि अन्वेषणे न योजयतु )',
-'linksearch-line' => '$2 पृष्ठं $1 तः सम्पृक्तम् अस्ति।',
+'linksearch-line' => ' $1 इति $2 इत्यस्मात् परिसन्धितमस्ति',
 'linksearch-error' => 'वन्यपत्राणि आतिथेयस्य नाम्ना समं केवलं प्रभान्ति ।',
 
 # Special:ListUsers
@@ -2179,8 +2178,8 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'usermessage-editor' => 'तान्त्रिकसन्देशवाहकः ।',
 
 # Watchlist
-'watchlist' => 'मम à¤\85वà¥\87à¤\95à¥\8dषणसà¥\82à¤\9aà¥\80',
-'mywatchlist' => 'मम à¤\85वà¥\87à¤\95à¥\8dषणसà¥\82à¤\9aà¥\80',
+'watchlist' => 'à¤\85वà¥\87à¤\95à¥\8dषणावलिà¤\83',
+'mywatchlist' => 'à¤\85वà¥\87à¤\95à¥\8dषणावलिà¤\83',
 'watchlistfor2' => 'हि $1 $2',
 'nowatchlist' => 'अवलोकनावल्यां पदार्थः नास्ति ।',
 'watchlistanontext' => 'अवलोकनपट्टिकायां पुटं दृष्टुं सम्पादयितुं वा  $1  करोतु ।',
@@ -2269,10 +2268,10 @@ Feedback and further assistance:
 'historywarning' => "' पूर्वसूचना ''' भवता अपमर्जनसिद्धपुटे बहुशः  $1 इतिहासयुक्तः अस्ति ।{{PLURAL:$1|revision|revisions}}:",
 'confirmdeletetext' => 'भवान् एकं पृष्ठं तस्य अखिलेन इतिहासेन सहितं अपाकर्तुं प्रवृत्तोऽस्ति। कृपया सुपुष्टीकरोतु यत् भवतः एतदेव आशयः, यद् भवता अस्य परिणामाः सुविज्ञाताः सन्ति तथा च भवता क्रियैषा [[{{MediaWiki:Policy-url}}| यथानीति]] सम्पाद्यते।',
 'actioncomplete' => 'कार्यं सम्पन्नम्',
-'actionfailed' => 'à¤\95रà¥\8dमनà¥\8d à¤°à¤¿à¤·à¥\8dà¤\9f',
+'actionfailed' => 'à¤\95ारà¥\8dयà¤\82 à¤°à¤¿à¤·à¥\8dà¤\9fà¤\82 (failed)',
 'deletedtext' => '"$1" इत्येतद् अपाकृतमस्ति।
 सद्यःकृतानां अपाकरणानाम् अभिलेखः $2 इत्यस्मिन् पश्यतु।',
-'dellogpage' => 'à¤\85पाà¤\95रणानाà¤\82 à¤¸à¥\82à¤\9aिà¤\95ा',
+'dellogpage' => 'à¤\85पाà¤\95रणानामà¥\8d à¤\86वलिà¤\83',
 'dellogpagetext' => 'सद्यः कालीनापमर्जितपुटानाम् आवली अधः अस्ति ।',
 'deletionlog' => 'अपमर्जनसूचिका ।',
 'reverted' => 'प्राचीनपुनरावृत्तिः पूर्ववत् कृता ।',
@@ -2291,7 +2290,7 @@ Feedback and further assistance:
 # Rollback
 'rollback' => 'सम्पादनं निर्वर्तयतु ।',
 'rollback_short' => 'प्रत्याहरणम् ।',
-'rollbacklink' => 'पà¥\8dरतिनिवरà¥\8dतà¥\8dयतामà¥\8d',
+'rollbacklink' => 'पà¥\8dरतà¥\8dयाहरणà¤\82',
 'rollbacklinkcount' => '$1 {{PLURAL:$1|सम्पादनम्|सम्पादनानि}} प्रत्याहरतु ।',
 'rollbacklinkcount-morethan' => '$1 {{PLURAL:$1|सम्पादनम्|सम्पादनानि}} अधिकं प्रत्याहरतु ।',
 'rollbackfailed' => 'प्रत्यहरणम् असफलम् ।',
@@ -2312,7 +2311,7 @@ $2 द्वारा सम्पादितां अन्तिमावृ
 निर्गत्य पूर्वपुटं गत्वा पुनः गत्वा प्रयत्नं करोतु ।',
 
 # Protect
-'protectlogpage' => 'सà¥\81रà¤\95à¥\8dषासà¥\82à¤\9aà¥\80',
+'protectlogpage' => 'सà¥\81रà¤\95à¥\8dषाऽऽवलिà¤\83',
 'protectlogtext' => 'अधो दत्ता सुरक्षार्थं कृतपरिवर्ननानां सूचिका अस्ति । 
 वरतमानस्य सुरक्षितपुटानां सूचिकार्थम् अत्र [[Special:ProtectedPages|सुरक्षितपुटानां सूचिका]] पश्यतु ।',
 'protectedarticle' => '"[[$1]]" इत्येतद् संरक्षितमस्ति',
@@ -2397,7 +2396,7 @@ $2 द्वारा सम्पादितां अन्तिमावृ
 'undeleterevision-missing' => 'अमान्या अथवा विलुप्ता पुनरावृत्तिः । भवान् प्रदुष्टानुबन्धयुक्तः अथवा पुनरावृत्तिः पुनस्थापिता अथवा लेखागारात् अपनीता ।',
 'undelete-nodiff' => 'पूर्वतनपुनरावृत्तिः न दृष्टा ।',
 'undeletebtn' => 'पुन्थापयतु ।',
-'undeletelink' => 'दà¥\83शà¥\8dयतामà¥\8d/पà¥\8dरतà¥\8dयानà¥\80यतामà¥\8d',
+'undeletelink' => 'दृश्यताम्/प्रत्यानयताम्',
 'undeleteviewlink' => 'दृश्यताम्',
 'undeleteinvert' => 'चयनं परिवर्तयतु ।',
 'undeletecomment' => 'कारणम् :',
@@ -2426,30 +2425,30 @@ $2 द्वारा सम्पादितां अन्तिमावृ
 'undelete-show-file-submit' => 'आम्',
 
 # Namespace form on various pages
-'namespace' => 'नामाकाशः :',
-'invert' => 'à¤\9aयनà¤\82 à¤µà¤¿à¤ªà¤°à¥\80तà¥\80à¤\95रà¥\8bतà¥\81',
+'namespace' => 'नामाकाशः:',
+'invert' => 'विरà¥\81दà¥\8dधà¤\9aयनमà¥\8d',
 'tooltip-invert' => 'चितनामस्थाने परिवर्तनं गोपयितुं मञ्जूषाम् अर्गलयतु ।',
 'namespace_association' => 'सम्बद्धं नामस्थानम् ।',
 'tooltip-namespace_association' => 'चितनामस्थानेन सह सम्बद्धं विषयनामस्थानम् अथवा सम्भाषणम् अपि उपादातुम् इमां मञ्जूषाम् अर्गलयतु ।',
 'blanknamespace' => '(मुख्यः)',
 
 # Contributions
-'contributions' => 'प्रयोक्तॄणां योगदानानि',
-'contributions-title' => '$1 à¤\87तà¥\8dयà¥\87तसà¥\8dय à¤\95à¥\83तà¥\87 à¤¯à¥\8bà¤\9cà¤\95ानाà¤\82 à¤¯à¥\8bà¤\97दानानि',
-'mycontris' => 'मम à¤¯à¥\8bà¤\97दानानि',
+'contributions' => '{{GENDER:$1|प्रयोक्तॄणां}} योगदानानि',
+'contributions-title' => '$1 à¤\95à¥\83तà¥\87 à¤¯à¥\8bà¤\97दानà¤\82',
+'mycontris' => 'योगदानानि',
 'contribsub2' => '$1 इत्येतदर्थम् ($2)',
 'nocontribs' => 'एतादृशयोग्यताभिः समं परिवर्तनानि न दृष्टानि ।',
-'uctop' => '(शीर्षम्)',
+'uctop' => 'वर्तमानः',
 'month' => 'अस्मात् मासात् (प्राक्तनानि च):',
 'year' => 'अस्मात् वर्षात् (प्राक्तनानि च):',
 
 'sp-contributions-newbies' => 'नूतनयोजकानां केवलं योगदानानि दर्श्यन्ताम्',
 'sp-contributions-newbies-sub' => 'नूतनलेखार्थम् ।',
 'sp-contributions-newbies-title' => 'नूतनलेखार्थं योजकयोगदानम् ।',
-'sp-contributions-blocklog' => 'à¤\85वरà¥\81दà¥\8dधा à¤¸à¥\82à¤\9aà¥\80',
+'sp-contributions-blocklog' => 'à¤\85वरà¥\8bधाऽऽवलिà¤\83',
 'sp-contributions-deleted' => 'योजकयोगदानम् अपमर्जतु ।',
-'sp-contributions-uploads' => 'à¤\86रà¥\8bपà¥\8dयतामà¥\8d',
-'sp-contributions-logs' => 'लà¥\8bà¤\97à¥\8dस',
+'sp-contributions-uploads' => 'à¤\89पारà¥\8bहणानि',
+'sp-contributions-logs' => 'सà¤\82सà¤\95à¥\8dषितावलà¥\8dयà¤\83 (Logs)',
 'sp-contributions-talk' => 'सम्भाषणम्',
 'sp-contributions-userrights' => 'योजकाधिकारस्य व्यवस्थापनम् ।',
 'sp-contributions-blocked-notice' => 'अयं प्रयोक्ता सम्प्रति अवरुद्धः वर्तते।
@@ -2462,23 +2461,23 @@ $2 द्वारा सम्पादितां अन्तिमावृ
 'sp-contributions-submit' => 'अन्विष्यताम्',
 
 # What links here
-'whatlinkshere' => 'à¤\95à¥\87भà¥\8dयà¤\83 à¤ªà¥\83षà¥\8dठà¥\87भà¥\8dयà¤\83 à¤¸à¤®à¥\8dबदà¥\8dधमà¥\8d',
-'whatlinkshere-title' => '"$1" à¤\87तà¥\8dयà¥\87तà¥\87न à¤¸à¤®à¥\8dबदà¥\8dधानि à¤ªà¥\83षà¥\8dठानि',
-'whatlinkshere-page' => 'पृष्ठम् :',
-'linkshere' => "अधोलिखितानि पृष्ठाणि '''[[:$1]]''' इत्येतद् प्रति संबंधनं कुर्वन्ति :",
+'whatlinkshere' => 'à¤\85नà¥\87न à¤¸à¤¹ à¤¸à¤®à¥\8dबदà¥\8dधाà¤\83',
+'whatlinkshere-title' => '"$1" सम्बद्धानि पृष्ठानि',
+'whatlinkshere-page' => 'पृष्ठम्:',
+'linkshere' => "'''[[:$1]]''' इत्यनेन सह अधोलिखितानां पृष्ठानां परिसन्धिं करोतु:",
 'nolinkshere' => "'''[[:$1]]'''इत्येतेन न किञ्चित् पृष्ठं संयुक्तम्",
 'nolinkshere-ns' => "चितनामस्थानात्  '''[[:$1]]''' इत्येनं योजनयोग्यं पुटं नास्ति  ।",
 'isredirect' => 'अनुप्रेषण-पृष्ठम्',
-'istemplate' => 'मिलापयतà¥\81',
-'isimage' => 'सà¤\9eà¥\8dà¤\9aिà¤\95ासà¤\82बनà¥\8dध',
-'whatlinkshere-prev' => '{{PLURAL:$1|पà¥\82रà¥\8dवतनमà¥\8d|पà¥\82रà¥\8dवतनानि $1}}',
-'whatlinkshere-next' => '{{PLURAL:$1|à¤\86à¤\97ामि|à¤\86à¤\97ामिनि $1}}',
-'whatlinkshere-links' => 'â\86\90 à¤¸à¤\82बà¤\82धनानि',
+'istemplate' => 'à¤\85नà¥\8dयलà¥\87à¤\96भाà¤\97à¤\83 (transclusion)',
+'isimage' => 'सà¤\9eà¥\8dà¤\9aिà¤\95ासमà¥\8dबनà¥\8dधà¤\83',
+'whatlinkshere-prev' => '{{PLURAL:$1|पà¥\81रसà¥\8dतातà¥\8d (previous) $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|परसà¥\8dतातà¥\8d $1}}',
+'whatlinkshere-links' => 'â\86\90 à¤ªà¤°à¤¿à¤¸à¤¨à¥\8dधयà¤\83',
 'whatlinkshere-hideredirs' => '$1 पुनर्निर्दिष्टानि',
-'whatlinkshere-hidetrans' => '$1 à¤®à¤¿à¤²à¤¾à¤ªà¤¨à¤¾à¤¨à¤¿ (à¤\9fà¥\8dराà¤\82सà¥\8dà¤\95à¥\8dलà¥\81सनà¥\8d à¤\87तà¥\8dयà¥\87तानि)',
-'whatlinkshere-hidelinks' => '$1 à¤¸à¤®à¥\8dपरà¥\8dà¤\95तनà¥\8dतवः',
+'whatlinkshere-hidetrans' => '$1 à¤\85नà¥\8dयलà¥\87à¤\96भाà¤\97à¤\83 (transclusions)',
+'whatlinkshere-hidelinks' => '$1 à¤ªà¤°à¤¿à¤¸à¤¨à¥\8dधिः',
 'whatlinkshere-hideimages' => '$1 चित्रसम्पर्कतन्तुः',
-'whatlinkshere-filters' => 'निसà¥\8dयनà¥\8dदनानि',
+'whatlinkshere-filters' => 'शà¥\8bधनà¥\80',
 
 # Block/unblock
 'autoblockid' => 'स्वयं पिहितम् । $1',
@@ -2506,7 +2505,7 @@ $2 द्वारा सम्पादितां अन्तिमावृ
 'ipbenableautoblock' => 'अनेन योजकेन उपयुक्तम् ऐपिसङ्केतम्, अग्रे अनेन योजकेन सम्पादयितुं प्रयतमानम् ऐपिसङ्केतं च स्वयम् अवरुद्धं करोतु ।',
 'ipbsubmit' => 'एतं योजकम् अवरुणद्धु ।',
 'ipbother' => 'अन्यः समयः ।',
-'ipboptions' => '२ à¤¹à¥\8bराà¤\83:2 hours,१ à¤¦à¤¿à¤¨à¤®à¥\8d:1 day,३ à¤¦à¤¿à¤¨à¤¾à¤¨à¤¿:3 days,१ à¤¸à¤ªà¥\8dताहà¤\83:1 week,२ à¤¸à¤ªà¥\8dताहà¥\8c:2 weeks,१ à¤®à¤¾à¤¸à¤\83:1 month,३ à¤®à¤¾à¤¸à¤¾à¤\83:3 months,६ à¤®à¤¾à¤¸à¤¾à¤\83:6 months,१ à¤µà¤°à¥\8dषà¤\83:1 year,अनन्तम्:infinite',
+'ipboptions' => '२ à¤¹à¥\8bरà¥\87:2 hours,१ à¤¦à¤¿à¤¨à¤®à¥\8d:1 day,३ à¤¦à¤¿à¤¨à¤¾à¤¨à¤¿:3 days,१ à¤¸à¤ªà¥\8dताहà¤\83:1 week,२ à¤¸à¤ªà¥\8dताहà¥\8c:2 weeks,१ à¤®à¤¾à¤¸à¤\83:1 month,३ à¤®à¤¾à¤¸à¤¾à¤\83:3 months,६ à¤®à¤¾à¤¸à¤¾à¤\83:6 months,१ à¤µà¤°à¥\8dषमà¥\8d:1 year,अनन्तम्:infinite',
 'ipbhidename' => 'सम्पादनेभ्यः आवलीभ्यः च योजकनाम सङ्गोपयतु ।',
 'ipbwatchuser' => 'अस्य योजकस्य योजकपुटानि सम्भाषणपुटानि च अवलोकयतु ।',
 'ipb-disableusertalk' => 'एतं योजकम् अवरोधकाले स्वस्य सम्भाषणपुटस्य सम्पानात् निवारयतु ।',
@@ -2554,9 +2553,9 @@ $2 द्वारा सम्पादितां अन्तिमावृ
 'blocklist-nousertalk' => 'स्वस्य सम्भाषणपुटं सम्पादयितुं न शक्यते ।',
 'ipblocklist-empty' => 'अवरोधावली रिक्ता अस्ति ।',
 'ipblocklist-no-results' => 'अभ्यर्थितः ऐपिसङ्केतः अथवा अभ्यर्थितः योजकनाम अवरुद्धं न ।',
-'blocklink' => 'à¤\85वरà¥\8bधà¤\83 à¤\95à¥\8dरियताम्',
-'unblocklink' => 'निरà¥\8bधà¤\83 à¤\85पास्यताम्',
-'change-blocklink' => 'विभाà¤\97ः परिवर्त्यताम्',
+'blocklink' => 'à¤\85वरà¥\81दà¥\8dधà¥\8dयताम्',
+'unblocklink' => 'à¤\85वरà¥\8bधà¤\83 à¤¨à¤¿à¤°à¤¸à¥\8dत्यताम्',
+'change-blocklink' => 'à¤\85वरà¥\8bधः परिवर्त्यताम्',
 'contribslink' => 'योगदानम्',
 'emaillink' => 'विद्युन्मानपत्रं प्रेषयतु ।',
 'autoblocker' => 'भवतः ऐपि सङ्केतः स्वयम् अवरुद्धः यः सद्यः काले एव [[User:$1|$1]]" इत्यनेन उपयुक्तः । 
@@ -2679,13 +2678,13 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'movepage-page-moved' => '$1 पुटं $2 प्रति चालितम् अस्ति ।',
 'movepage-page-unmoved' => '$1 पुटं $2 प्रति चालनम् अशक्यम् ।',
 'movepage-max-pages' => '$1  इत्यस्य {{PLURAL:$1|page|pages}} गरष्टपुटानि चालितानि अतः इतोप्यधिकपुटानि स्वयं चालितानि न भवन्ति ।',
-'movelogpage' => 'लà¥\89à¤\97à¥\8d à¤\87तà¥\8dयà¥\87तदà¥\8d चाल्यताम्',
+'movelogpage' => 'सà¤\9eà¥\8dà¤\9aितावलिà¤\83 (log) चाल्यताम्',
 'movelogpagetext' => 'पुटचालनस्य आवली अधः अस्ति ।',
 'movesubpage' => '{{PLURAL:$1|उपपुटः|उपपुटानि}}',
 'movesubpagetext' => '$1 {{PLURAL:$1|उपपुटम्|उपपुटानि }}अस्य पुटस्य उपपुटानि अधः दर्शितानि ।',
 'movenosubpage' => 'अस्य पुटस्य उपपुटानि न सन्ति ।',
 'movereason' => 'कारणम् :',
-'revertmove' => 'पà¥\8dरतिनिवरà¥\8dतà¥\8dयताम्',
+'revertmove' => 'पà¥\8dरतà¥\8dयावरà¥\8dतनम्',
 'delete_and_move' => 'अपमर्जनं चालनं च ।',
 'delete_and_move_text' => '==अपमर्जनम् आवश्यकम्==
 लक्षितपुटं "[[:$1]]" पूर्वमेव अस्ति ।
@@ -2713,7 +2712,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'file-exists-sharedrepo' => 'विभक्तकोशे चितसञ्चिकानाम प्रथममेव उपयोगे अस्ति  । अन्यं नाम चिनोतु ।',
 
 # Export
-'export' => 'पà¥\83षà¥\8dठानाà¤\82 à¤¨à¤¿à¤°à¥\8dयातà¤\82 à¤\95रà¥\8bतà¥\81',
+'export' => 'पà¥\83षà¥\8dठानि à¤\85नà¥\8dयतà¥\8dर à¤ªà¥\8dरà¥\87षà¥\8dयतामà¥\8d',
 'exporttext' => 'विशेष पुटस्य पाठम् अथवा सम्पादनेतिहासं निर्हर्तुं शक्नोति । अथवा पुटसमूहम् उपोतं कर्तुमपि शक्नोति ।
 एतत् [[Special:Import|आयातपुटं]] अस्य साहाय्येन मीडियाविक्याः प्रयोगं कृत्वा अन्यविकीतः आयातं कर्तुं शक्नोति ।
 पुटानि नर्हर्तुम् अधो दत्तपाठमञ्जूषायां शीर्शकं लिखतु । एकस्य शीर्षकस्य एका पङ्क्तिः । अपि च वर्तमानावृत्त्या सह प्राचीनावृत्तिमपि इच्छति वा नेति अथवा गतसम्पादनस्य विषयज्ञानेन सह केवलं वर्नमानावृत्तिम् इच्छाति । 
@@ -2734,7 +2733,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 # Namespace 8 related
 'allmessages' => 'व्यवस्था सन्देशाः',
 'allmessagesname' => 'नाम',
-'allmessagesdefault' => 'डिफà¥\89लà¥\8dà¤\9fसनà¥\8dदà¥\87शपाठ',
+'allmessagesdefault' => 'मà¥\82लसनà¥\8dदà¥\87शà¤\83',
 'allmessagescurrent' => 'सद्यः सन्देशपाठः ।',
 'allmessagestext' => 'एषा मीडियाविकिनामस्थाने उपलब्धा काचित् तन्त्रसन्देशस्य सूचिका अस्ति ।  यदि भवान् सामान्यमीडियाविकि क्षेत्रीयकरणे योगदानं कर्तुमिच्छति तर्हि[https://www.mediawiki.org/wiki/Localisation मीडियाविकि क्षेत्रीयकरणम्] अथवा [//translatewiki.net translatewiki.net] इत्यत्र गच्छतु ।',
 'allmessagesnotsupportedDB' => "अस्य पुटस्य उपयोगः नैव शक्यते यतः '''\$wgUseDatabaseMessages''' तटास्थम् अस्ति ।",
@@ -2750,7 +2749,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 # Thumbnails
 'thumbnail-more' => 'विस्तीर्यताम्',
 'filemissing' => 'सञ्चिका विनष्टा ।',
-'thumbnail_error' => 'सà¤\99à¥\8dà¤\95à¥\81à¤\9aितचित्रनिर्माणे दोषः: $1',
+'thumbnail_error' => 'लà¤\98à¥\81चित्रनिर्माणे दोषः: $1',
 'djvu_page_error' => 'DjVu पुटं  पृष्ठ परिधेः बहिः ।',
 'djvu_no_xml' => 'DjVu पुटार्थं XMLप्राप्तुं न शक्तम् ।',
 'thumbnail-temp-create' => 'अनित्यां सङ्कुचितसञ्चिकां निर्मातुं न शक्यते ।',
@@ -2829,74 +2828,74 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'javascripttest-qunit-heading' => 'मिडियाविक्याः जवालिपेः Qघटकस्य परीक्षाप्रणाली ।',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'भवतः योजकपृष्ठम्',
+'tooltip-pt-userpage' => 'भवतः/भवत्याः योजकपृष्ठम्',
 'tooltip-pt-anonuserpage' => 'ऐपिसङ्केतार्थं योजकपुटं भवान् सम्पादयति एवम्..',
-'tooltip-pt-mytalk' => 'भवतः सम्भाषणपृष्ठम्',
+'tooltip-pt-mytalk' => 'भवतः/भवत्याः सम्भाषणपृष्ठम्',
 'tooltip-pt-anontalk' => 'एतस्मात् ऐपिसङ्केतात् सम्पादनस्य परिचर्चा ।',
-'tooltip-pt-preferences' => 'भवतः इष्टतमानि',
-'tooltip-pt-watchlist' => 'भवदà¥\8dभिà¤\83 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषà¥\8dयमाणानाà¤\82 à¤ªà¥\83षà¥\8dठानाà¤\82 à¤¸à¥\82à¤\9aà¥\80',
-'tooltip-pt-mycontris' => 'भवतः योगदानानाम् आवली',
-'tooltip-pt-login' => 'भवानà¥\8d à¤¨ à¤ªà¥\8dरविषà¥\8dà¤\9fà¤\83। à¤ªà¥\8dरवà¥\87शà¤\83 à¤\85निवारà¥\8dयà¤\83 à¤¨।',
+'tooltip-pt-preferences' => 'भवतः/भवत्याः इष्टतमानि',
+'tooltip-pt-watchlist' => 'भवतà¤\83/भवतà¥\8dयाà¤\83 à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषासà¥\82à¤\9aà¥\8dयाà¤\82 à¤µà¤¿à¤¦à¥\8dयमानानाà¤\82 à¤ªà¥\83षà¥\8dठानामà¥\8d à¤\86वलिà¤\83',
+'tooltip-pt-mycontris' => 'भवतः/भवत्याः योगदानस्य आवलिः',
+'tooltip-pt-login' => 'समà¥\8dपà¥\8dरवà¥\87शाय à¤ªà¥\8dरà¥\8bतà¥\8dसहामहà¥\87 à¥¤ à¤ªà¤°à¤¨à¥\8dतà¥\81 à¤¸à¤®à¥\8dपà¥\8dरवà¥\87शà¤\83 à¤\90à¤\9aà¥\8dà¤\9bिà¤\95à¤\83 ।',
 'tooltip-pt-logout' => 'निर्गमनम्',
-'tooltip-ca-talk' => 'पà¥\83षà¥\8dठानà¥\8dतरà¥\8dà¤\97तविषयà¥\87 चर्चा',
-'tooltip-ca-edit' => 'भवानà¥\8d à¤\87दà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 à¤¸à¤®à¥\8dपादयितà¥\81मà¥\8d à¤\85रà¥\8dहति। à¤°à¤\95à¥\8dषणातà¥\8dपà¥\82रà¥\8dवà¤\82 à¤\95à¥\83पया à¤ªà¥\8dराà¤\97à¥\8dदà¥\83शà¥\8dयà¤\82 à¤ªà¤¶à¥\8dयतà¥\81।',
-'tooltip-ca-addsection' => 'नà¥\82तनà¤\83 à¤µà¤¿à¤­à¤¾à¤\97à¤\83 à¤\86रभà¥\8dयतामà¥\8d',
-'tooltip-ca-viewsource' => 'इदं पृष्ठं संरक्षितं विद्यते। भवान् अस्य स्रोतः द्रष्टुम् अर्हति।',
-'tooltip-ca-history' => 'à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤ªà¥\81रातनà¥\8dयà¤\83 à¤\86वà¥\83तà¥\8dतयः',
+'tooltip-ca-talk' => 'पà¥\83षà¥\8dठाऽनà¥\8dतरà¥\8dà¤\97ताय à¤µà¤¿à¤·à¤¯à¤¾à¤¯ चर्चा',
+'tooltip-ca-edit' => 'à¤\87दà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 à¤¸à¤®à¥\8dपादयितà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87 à¥¤ à¤°à¤\95à¥\8dषणातà¥\8dपà¥\82रà¥\8dवà¤\82 à¤\95à¥\83पया à¤ªà¥\8dराà¤\97à¥\8dदà¥\83शà¥\8dयà¤\82 à¤¦à¥\83शà¥\8dयतामà¥\8d ।',
+'tooltip-ca-addsection' => 'नूतनविभागः आरभ्यताम्',
+'tooltip-ca-viewsource' => 'इदं पृष्ठं संरक्षितं विद्यते । अस्य स्रोतं द्रष्टुं शक्यते ।',
+'tooltip-ca-history' => 'à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤ªà¥\81रातनाऽऽवà¥\83तà¥\8dतिः',
 'tooltip-ca-protect' => 'इदं पृष्ठं संरक्ष्यताम्',
 'tooltip-ca-unprotect' => 'अस्य पुटास्य सुरक्षां परिवर्तयतु ।',
 'tooltip-ca-delete' => 'इदं पृष्ठम् अपाक्रियताम्',
 'tooltip-ca-undelete' => 'अस्य पुटस्य अपमर्जनात् पूर्वम् अस्य सम्पादनानि पुनस्थापयतु ।',
-'tooltip-ca-move' => 'à¤\87दà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 à¤\9aाल्यताम्',
-'tooltip-ca-watch' => 'इदं पृष्ठं भवतः अवेक्षणसूच्यां योज्यताम्',
-'tooltip-ca-unwatch' => 'à¤\87दà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 à¤­à¤µà¤¤à¤\83 à¤\85वà¥\87à¤\95à¥\8dषणसà¥\82à¤\9aà¥\8dयाà¤\83 निष्कास्यताम्',
-'tooltip-search' => '{{SITENAME}} à¤\85तà¥\8dर à¤\85नà¥\8dविषà¥\8dयतामà¥\8d',
+'tooltip-ca-move' => 'à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¨à¤¾à¤® à¤ªà¤°à¤¿à¤µà¤°à¥\8dत्यताम्',
+'tooltip-ca-watch' => 'इदं पृष्ठं भवतः/भवत्याः अवेक्षणावल्यां योज्यताम्',
+'tooltip-ca-unwatch' => 'भवतà¤\83/भवतà¥\8dयाà¤\83 à¤\85वà¥\87à¤\95à¥\8dषणसà¥\82à¤\9aà¥\8dयाà¤\83 à¤\87दà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 निष्कास्यताम्',
+'tooltip-search' => '{{SITENAME}} अन्विष्यताम्',
 'tooltip-search-go' => 'समानशिरोनामयुक्तं पृष्ठं विद्यते चेत् तत्र गम्यताम्',
-'tooltip-search-fulltext' => 'à¤\87दà¤\82 à¤µà¤\9aनं पृष्ठेषु अन्विष्यताम्',
+'tooltip-search-fulltext' => 'à¤\8fनà¤\82 à¤µà¤¾à¤\95à¥\8dयाà¤\82शं पृष्ठेषु अन्विष्यताम्',
 'tooltip-p-logo' => 'मुख्यपृष्ठं गम्यताम्',
 'tooltip-n-mainpage' => 'मुख्यपृष्ठं गम्यताम्',
 'tooltip-n-mainpage-description' => 'मुख्यपृष्ठं गम्यताम्',
-'tooltip-n-portal' => 'पà¥\8dरà¤\95लà¥\8dपविषयà¥\87 à¤­à¤µà¤¤à¤¾ à¤\95िà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dयà¤\82, à¤\95à¥\81तà¥\8dर à¤\85नà¥\8dवà¥\87षणà¤\82 à¤¶à¤\95्यम्',
-'tooltip-n-currentevents' => 'सदà¥\8dयà¤\83à¤\95ालà¥\80नà¤\98à¤\9fनानां पृष्ठभूमिका प्राप्यताम्',
-'tooltip-n-recentchanges' => 'सदà¥\8dयà¥\8bà¤\9cातानाà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानाà¤\82 à¤¸à¥\82à¤\9aà¥\80',
-'tooltip-n-randompage' => 'à¤\95िमपà¥\8dयà¥\87à¤\95à¤\82 पृष्ठं गम्यताम्',
+'tooltip-n-portal' => 'तà¥\8dवया à¤ªà¥\8dरà¤\95लà¥\8dपविषयà¥\87 à¤\95िà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87, à¤\95à¥\81तà¤\83 à¤¸à¤¾à¤¹à¤¾à¤¯à¥\8dयà¤\82 à¤ªà¥\8dरापà¥\8dतव्यम्',
+'tooltip-n-currentevents' => 'वरà¥\8dतमानपà¥\8dरसà¤\99à¥\8dà¤\97ानां पृष्ठभूमिका प्राप्यताम्',
+'tooltip-n-recentchanges' => 'सदà¥\8dयपरिवरà¥\8dतनानामà¥\8d à¤\86वलिà¤\83',
+'tooltip-n-randompage' => 'à¤\85शà¥\83à¤\99à¥\8dà¤\96लà¤\82 (random) पृष्ठं गम्यताम्',
 'tooltip-n-help' => 'अन्वेषणस्थानम्',
-'tooltip-t-whatlinkshere' => 'à¤\8fततà¥\8dसमà¥\8dबदà¥\8dधानाà¤\82 à¤¸à¤°à¥\8dवà¥\87षाà¤\82 à¤µà¤¿à¤\95ि-पà¥\83षà¥\8dठानाà¤\82 à¤¸à¥\82à¤\9aà¥\80',
-'tooltip-t-recentchangeslinked' => 'à¤\8fततà¥\8dसमà¥\8dबदà¥\8dधà¥\87षà¥\81 à¤ªà¥\83षà¥\8dठà¥\87षà¥\81 à¤\9cातानि à¤¸à¤¦à¥\8dयà¤\83à¤\95ालà¥\80नानि परिवर्तनानि',
+'tooltip-t-whatlinkshere' => 'à¤\85तà¥\8dर à¤¸à¤®à¥\8dबदà¥\8dधानाà¤\82 à¤ªà¤°à¤¿à¤¸à¤¨à¥\8dधितानाà¤\82 à¤µà¤¿à¤\95ि-पà¥\83षà¥\8dठानामà¥\8d à¤\86वलिà¤\83',
+'tooltip-t-recentchangeslinked' => 'à¤\8fततà¥\8dपà¥\83षà¥\8dठसमà¥\8dबदà¥\8dधà¥\87षà¥\81 à¤ªà¥\83षà¥\8dठà¥\87षà¥\81 à¤¸à¤¦à¥\8dयà¤\9cातानि परिवर्तनानि',
 'tooltip-feed-rss' => 'अस्मै पृष्ठाय आर-एस-एस-पूरणम्',
 'tooltip-feed-atom' => 'अस्मै पृष्ठाय अणुपूरणम्',
 'tooltip-t-contributions' => 'अस्य योजकस्य योगदानानाम् आवलिः',
 'tooltip-t-emailuser' => 'एतस्मै योजकाय ईपत्रं प्रेष्यताम्',
-'tooltip-t-upload' => 'सà¤\82चिकाः आरोप्यन्ताम्',
-'tooltip-t-specialpages' => 'सरà¥\8dवà¥\87षाà¤\82 à¤µà¤¿à¤¶à¤¿à¤·à¥\8dà¤\9fपà¥\83षà¥\8dठानाà¤\82 à¤¸à¥\82à¤\9aà¥\80',
+'tooltip-t-upload' => 'सà¤\9eà¥\8dचिकाः आरोप्यन्ताम्',
+'tooltip-t-specialpages' => 'सरà¥\8dवà¥\87षाà¤\82 à¤µà¤¿à¤¶à¤¿à¤·à¥\8dà¤\9fपà¥\83षà¥\8dठानामà¥\8d à¤\86वलिà¤\83',
 'tooltip-t-print' => 'अस्य पृष्ठस्य मुद्रणयोग्या आवृत्तिः',
-'tooltip-t-permalink' => 'पृष्ठस्य अस्याः आवृत्तेः स्थिरसम्पर्कतन्तुः',
-'tooltip-ca-nstab-main' => 'à¤\86नà¥\8dतरà¥\8dयà¤\82 à¤¦à¥\83शà¥\8dयतामà¥\8d',
+'tooltip-t-permalink' => 'पृष्ठस्यास्य स्थायिपरिसन्धिः',
+'tooltip-ca-nstab-main' => 'à¤\86नà¥\8dतरà¥\8dविषयà¤\95à¤\82 à¤ªà¥\83षà¥\8dठà¤\82 à¤ªà¤¶à¥\8dयतà¥\81',
 'tooltip-ca-nstab-user' => 'योजकपृष्ठं दृश्यताम्',
 'tooltip-ca-nstab-media' => 'माध्यमपुटम् अवलोकयतु ।',
-'tooltip-ca-nstab-special' => 'इदमेकं विशिष्टं पृष्ठम्, भवान् इदं पृष्ठं सम्पादयितुं न अर्हति।',
+'tooltip-ca-nstab-special' => 'इदमेकं विशिष्टं पृष्ठम्, भवान्/भवती इदं पृष्ठं सम्पादयितुं नार्हति ।',
 'tooltip-ca-nstab-project' => 'प्रकल्पपृष्ठं दृश्यताम्',
 'tooltip-ca-nstab-image' => 'सञ्चिकापृष्ठं दृश्यताम्',
 'tooltip-ca-nstab-mediawiki' => 'तन्त्रसन्देशान् अवलोकयतु ।',
 'tooltip-ca-nstab-template' => 'फलकं दृश्यताम्',
 'tooltip-ca-nstab-help' => 'साहाय्यपुटम् अवलोकयतु ।',
 'tooltip-ca-nstab-category' => 'वर्गाणां पृष्ठं दृश्यताम्',
-'tooltip-minoredit' => 'à¤\87दà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\82 à¤²à¤\98à¥\81परिवरà¥\8dतनरà¥\82पà¥\87ण अङ्क्यताम्',
+'tooltip-minoredit' => 'लà¤\98à¥\81परिवरà¥\8dतनतà¥\8dवà¥\87न à¤\87दà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनमà¥\8d अङ्क्यताम्',
 'tooltip-save' => 'परिवर्तनानि रक्ष्यन्ताम्',
-'tooltip-preview' => 'भवता कृतानां परिवर्तनानां प्राग्दृश्यं दृश्यताम्, रक्षणात्पूर्वं कृपया इदम् उपयुज्यताम्।',
-'tooltip-diff' => 'पाठà¥\87 à¤­à¤µà¤¤à¤¾ à¤\95à¥\83तानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤¦à¥\83शà¥\8dयनà¥\8dतामà¥\8d।',
+'tooltip-preview' => 'भवता/भवत्या कृतानां परिवर्तनानां प्राग्दृश्यं दृश्यताम्, रक्षणात्पूर्वं कृपया इदम् उपयुज्यताम्।',
+'tooltip-diff' => 'भवता/भवतà¥\8dया à¤\85तà¥\8dर à¤\95à¥\83तानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87',
 'tooltip-compareselectedversions' => 'पृष्ठस्य द्वयोः चितयोः आवृत्त्योः भेदः दृश्यताम्',
-'tooltip-watch' => 'इदं पृष्ठं भवतः अवेक्षणसूच्यां योज्यताम्',
+'tooltip-watch' => 'इदं पृष्ठं भवतः/भवत्याः अवेक्षणावल्यां योज्यताम्',
 'tooltip-watchlistedit-normal-submit' => 'शीर्षकानि अपनयतु ।',
 'tooltip-watchlistedit-raw-submit' => 'अवलोकनावलीं समुद्धरतु ।',
 'tooltip-recreate' => 'एतत्पुटं पूर्वमेव अपमर्जितः अतः पुन सृजतु ।',
 'tooltip-upload' => 'उत्तारणम् आरभताम्',
-'tooltip-rollback' => '"पà¥\82रà¥\8dण-पà¥\8dरतिà¤\97मनà¤\82(रà¥\8bलबà¥\88à¤\95à¥\8d à¤\87तà¥\8dयà¥\87तदà¥\8d)" à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82पादनानि à¤\85à¤\82तिम-यà¥\8bà¤\97दातà¥\83à¤\95à¥\83तानि à¤µà¤¿à¤ªà¤°à¥\80तà¥\80à¤\95रà¥\8bति à¤\8fà¤\95à¥\87न à¤\95à¥\8dलिà¤\95à¥\8dà¤\95ारà¥\87ण',
-'tooltip-undo' => '"निषà¥\8dà¤\95à¥\8dरियतामà¥\8d" à¤\87तà¥\8dयà¥\87तदà¥\8d à¤\87दà¤\82 à¤¸à¤®à¥\8dपादनà¤\82 à¤µà¤¿à¤ªà¤°à¥\80तà¥\80à¤\95रà¥\8bति, à¤¤à¤¥à¤¾ à¤\9a à¤¸à¤®à¥\8dपादनपà¥\8dरारà¥\82पà¤\82 à¤ªà¥\8dराà¤\97à¥\8dदà¥\83शà¥\8dयरà¥\82पà¥\87ण à¤\89दà¥\8dà¤\98ाà¤\9fयति।
+'tooltip-rollback' => '"पà¥\8dरतà¥\8dयाहरणमà¥\8d (roll back)" à¤\87तà¥\8dयà¥\87ततà¥\8d à¤\85नà¥\8dतिमसमà¥\8dपादà¤\95सà¥\8dय à¤\85नà¥\8dतिमयà¥\8bà¤\97दानà¤\82 à¤¨à¤¿à¤°à¤¾à¤\95रà¥\8bति à¥¤',
+'tooltip-undo' => '"पà¥\82रà¥\8dववतà¥\8d" à¤\87ति à¤\85नà¥\8dतिमसमà¥\8dपादनमà¥\8d à¤\85पाà¤\95रà¥\8bति, à¤¸à¤®à¥\8dपादनपà¥\8dरारà¥\82पà¤\82 à¤ªà¥\8dराà¤\97à¥\8dदà¥\83शà¥\8dयरà¥\82पà¥\87ण à¤\89दà¥\8dà¤\98ाà¤\9fयति, à¤¨à¤µà¥\80नसमà¥\8dपादनानà¥\8dतरà¤\82 à¤¸à¤®à¥\8dपादनपà¥\83षà¥\8dठà¤\82 à¤ªà¥\8dराà¤\97à¥\8dदà¥\83शà¥\8dयतà¥\8dवà¥\87न à¤ªà¥\8dरदरà¥\8dशयति à¤\9a à¥¤ 
 
-à¤\85सà¥\8dय à¤¸à¤¾à¤°à¤¾à¤\82शà¥\87 à¤\95ारणमपि à¤²à¥\87à¤\96ितà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87।',
+à¤\85सà¥\8dय à¤¸à¤¾à¤°à¤¾à¤\82शà¥\87 à¤\85पाà¤\95रणसà¥\8dय à¤\95ारणमपि à¤²à¥\87à¤\96ितà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87 ।',
 'tooltip-preferences-save' => 'आद्यताः रक्षतु ।',
-'tooltip-summary' => 'सà¤\82à¤\95à¥\8dषिपà¥\8dतà¤\83 सारांशः योज्यताम्',
+'tooltip-summary' => 'सà¤\99à¥\8dà¤\95à¥\8dषिपà¥\8dतसारांशः योज्यताम्',
 
 # Metadata
 'notacceptable' => 'भवतः ग्रहकस्य पठनेच्छारूपेण विकिवितारकः दत्तपाठं प्रकल्पितुं नैव शक्नोति ।',
@@ -3011,13 +3010,13 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'thumbsize' => 'सङ्कुचितास्य आकारः ।',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$1|पुटम्|पुटानि}} प्रयुक्तानि ।',
 'file-info' => 'सञ्चिकाकारः : $1, MIME प्रकारः $2',
-'file-info-size' => '$1 Ã\97 $2 à¤ªà¤¿à¤\95à¥\8dसà¥\87लानि, à¤¸à¤\82चिकायाः आकारः: $3, MIME-प्रकारः: $4',
+'file-info-size' => '$1 Ã\97 $2 à¤\9aितà¥\8dराणवà¤\83 (pixels), à¤¸à¤\9eà¥\8dचिकायाः आकारः: $3, MIME-प्रकारः: $4',
 'file-info-size-pages' => '$1 × $2  पिक्सेल्, सञ्चिकायाः आकारः :  $3 , MIME प्रकारः :  $4 ,  $5   {{PLURAL:$5|पुटम्|पुटानि}}',
-'file-nohires' => 'à¤\89à¤\9aà¥\8dà¤\9aतरà¤\82 à¤µà¤¿à¤­à¥\87दनà¤\82 नोपलब्धम्',
-'svg-long-desc' => 'SVG à¤¸à¤\82à¤\9aिà¤\95ा, à¤¸à¤¾à¤§à¤¾à¤°à¤£à¤¤à¤¯à¤¾ $1 Ã\97 $2 à¤ªà¤¿à¤\95à¥\8dसà¥\87लानि, à¤¸à¤\82चिकायाः आकारः : $3',
+'file-nohires' => 'à¤\8fतसà¥\8dमादधिà¤\95मà¥\8d à¤\89तà¥\8dतमà¤\97à¥\81णà¤\95à¤\82 (higher resolution) नोपलब्धम्',
+'svg-long-desc' => 'SVG à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ा, à¤¸à¤¾à¤§à¤¾à¤°à¤£à¤\82 $1 Ã\97 $2 à¤\9aितà¥\8dराणवà¤\83 (pixels), à¤¸à¤\9eà¥\8dचिकायाः आकारः : $3',
 'svg-long-desc-animated' => 'आश्वसिता SVG संचिका, साधारणतया $1 × $2 पिक्सेलानि, संचिकायाः आकारः : $3',
 'svg-long-error' => 'एषा अमान्या SVG सञ्चिका : $1',
-'show-big-image' => 'पà¥\82रà¥\8dणà¤\82 à¤µà¤¿à¤­à¥\87दनमà¥\8d',
+'show-big-image' => 'मà¥\82लसà¤\9eà¥\8dà¤\9aिà¤\95ा',
 'show-big-image-preview' => 'अस्य पूर्वावलोकनस्य आकारः : $1',
 'show-big-image-other' => 'अन्याः {{PLURAL:$2| प्रस्तवः|प्रस्तावाः}}:  $1 ।',
 'show-big-image-size' => '$1 × $2  पिक्सेल्',
@@ -3050,22 +3049,22 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'just-now' => 'अधुनैव',
 
 # Bad image list
-'bad_image_list' => 'रà¥\82पमà¥\8d à¤\8fवमà¥\8d à¤\85सà¥\8dति -
+'bad_image_list' => 'à¤\85तà¥\8dर à¤ªà¥\8dरारà¥\82पà¤\82 à¤\8fवà¤\82 à¤­à¤µà¥\87तà¥\8d -
 
-à¤\95à¥\87वलà¤\82 à¤¸à¥\82à¤\9aà¥\8dयनà¥\8dतरà¥\8dà¤\97ताà¤\83 à¤µà¤¿à¤·à¤¯à¤¾à¤\83 (* à¤\87ति à¤\9aिनà¥\8dहातà¥\8d à¤\86रभमाणाà¤\83 à¤ªà¤\82à¤\95à¥\8dतयà¤\83)परामà¥\83षà¥\8dà¤\9fाà¤\83
+à¤\95à¥\87वलमà¥\8d à¤\86वलà¥\8dयनà¥\8dतरà¥\8dà¤\97ताà¤\83 à¤µà¤¿à¤·à¤¯à¤¾à¤\83 (* à¤\87ति à¤\9aिनà¥\8dहातà¥\8d à¤\86रभमाणाà¤\83 à¤ªà¤\99à¥\8dà¤\95à¥\8dतयà¤\83) à¤\86à¤\95लिताà¤\83 
 
-प्रथमः सम्पर्कतन्तुः दोषपूर्णां सञ्चिकां प्रत्येव गच्छेत्।
-तस्याम् एव पङ्क्तौ उत्तरोत्तरसम्पर्कतन्तवः अपवादाः ज्ञेयाः। अर्थात् येषु पृष्ठेषु एषा सञ्चिका योजिता स्यात्।',
+पङ्क्त्यां विद्यमाना प्रथमा परिसन्धिः (link) दोषपूर्णया सञ्चिकया सह परिसन्धिता (linked) स्यादेव । तस्यामेव पङ्क्तौ उत्तरोत्तरं विद्यमानाः परिसन्धयः अपवादिताः ज्ञेयाः, अर्थात् अत्र तेषां पृष्ठानाम् आवलिरेव भविष्यति, येषु एषा सञ्चिका विद्यते ।',
 
 # Metadata
-'metadata' => 'à¤\85धिदतà¥\8dतानि',
-'metadata-help' => 'à¤\85सà¥\8dयाà¤\82 à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ायामà¥\8d à¤\85तिरिà¤\95à¥\8dताà¤\83 à¤µà¤¿à¤·à¤¯à¤¾à¤\83 à¤¸à¤¨à¥\8dति, à¤\95दाà¤\9aितà¥\8d à¤\86à¤\82à¤\95िà¤\95-à¤\9bायाà¤\9aितà¥\8dरà¤\97à¥\8dराहà¤\95à¥\87न à¤¸à¥\8dà¤\95à¥\8dयानरà¥\8d à¤\87तà¥\8dयनà¥\87न à¤µà¤¾ à¤¸à¥\8dरषà¥\8dà¤\9fाà¤\83 à¤µà¤¾ à¤\86à¤\82à¤\95िà¤\95à¥\80à¤\95à¥\83ताà¤\83 à¤µà¤¾ à¤¸à¥\8dयà¥\81à¤\83 à¥¤
+'metadata' => 'पà¥\8dरदतà¥\8dताà¤\82शà¤\83 (दतà¥\8dताà¤\82शविषयà¤\95दतà¥\8dताà¤\82शà¤\83 à¤\85यमà¥\8d)',
+'metadata-help' => 'à¤\85नà¥\87न à¤¸à¤¹ à¤µà¤¿à¤¸à¥\8dतà¥\83तमाहितà¥\80 à¤¸à¤²à¥\8dलà¤\97à¥\8dना à¤\85सà¥\8dति, à¤ªà¥\8dरतिबिमà¥\8dबà¤\97à¥\8dराहà¤\95à¥\87न (scanner) à¤\85à¤\99à¥\8dà¤\95à¥\80यà¤\9bायाà¤\9aितà¥\8dरà¤\97à¥\8dराहà¤\95à¥\87न (digital camera ) à¤µà¤¾ à¤\85सà¥\8dयाà¤\83 à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ायाà¤\83 à¤°à¤\9aना à¤\9cाता à¤¸à¥\8dयातà¥\8d à¥¤ 
 
-यदि à¤\8fषा à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ा à¤®à¥\82लावसà¥\8dथातà¤\83 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतिता à¤\85सà¥\8dति, à¤¤à¤°à¥\8dहि à¤\85तà¥\8dर à¤\95ानिà¤\9aिदà¥\8d à¤µà¤¿à¤µà¤°à¤£à¤¾à¤¨à¤¿ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतिताà¤\82 à¤¸à¤\82à¤\9aिà¤\95ाà¤\82 à¤ªà¥\82रà¥\8dणतया à¤¨ à¤ªà¥\8dरदरà¥\8dशयà¥\87यà¥\81à¤\83 ।',
+à¤\8fषा à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ा à¤¯à¤¦à¤¿ à¤®à¥\82लावसà¥\8dथातà¥\8d à¤ªà¤°à¤¿à¤µà¤°à¥\8dतà¥\8dयतà¥\87, à¤¤à¤°à¥\8dहि à¤\85तà¥\8dरसà¥\8dथानि à¤\95ानिà¤\9aितà¥\8d à¤µà¤¿à¤µà¤°à¤£à¤¾à¤¨à¤¿ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतितसà¤\9eà¥\8dà¤\9aिà¤\95ायाà¤\82 à¤ªà¥\82रà¥\8dणतया à¤¨ à¤¦à¥\83शà¥\8dयनà¥\8dतà¥\87 ।',
 'metadata-expand' => 'विस्तारितानि विवरणानि दर्शयतु',
 'metadata-collapse' => 'विस्तारितानि विवरणानि लोपयतु',
-'metadata-fields' => 'अस्मिन् तालिकायां दर्शिता सूचना संचिकायाः अधस्तात् मेटाडाटा इत्यस्मिन् सदा दर्शिता भविष्यति।
-अवशिष्टा सूचना सदा निगूढा भविष्यति।
+'metadata-fields' => 'प्रदत्तांशस्य (metadata) स्वरूपं यदा लघु भविष्यति, तदा एतस्मिन् सन्देशे आवलिकृतस्य EXIA प्रदत्तांशस्य (metadata) सूचनाः चित्रप्रदर्शनेन सह द्रष्टुं शक्यन्ते ।
+पूर्वनिर्दिष्टरूपेण (default) अन्याः सूचनाः निगूढाः भविष्यन्ति । 
+
 * make
 * model
 * datetimeoriginal
@@ -3669,7 +3668,7 @@ $5
 'fileduplicatesearch-noresults' => '"$1" इति नाम्ना सञ्चिका न दृष्टा ।',
 
 # Special:SpecialPages
-'specialpages' => 'विशà¥\87षपृष्ठानि',
+'specialpages' => 'विशिषà¥\8dà¤\9fपृष्ठानि',
 'specialpages-note' => '* साधारणं विशेषपुटम् । 
 * <span class="mw-specialpagerestricted">प्रतिद्धं विशेषपुटम् ।</span>',
 'specialpages-group-maintenance' => 'निर्वहणवृत्तानि ।',
index 68b6e96..d103001 100644 (file)
@@ -207,7 +207,6 @@ $messages = array(
 'vector-action-protect' => 'Уларыйбат гын',
 'vector-action-undelete' => 'Төннөр',
 'vector-action-unprotect' => 'Көмүскэлин уларыт',
-'vector-simplesearch-preference' => 'Көрдөбүл устуруокатын судургу барылын туруор («Векторга» эрэ)',
 'vector-view-create' => 'Ай',
 'vector-view-edit' => 'Уларыт',
 'vector-view-history' => 'Устуоруйатын көрүү',
@@ -486,8 +485,6 @@ $2',
 'gotaccountlink' => 'Аатыҥ',
 'userlogin-resetlink' => 'Киирэр тылгын умнубуккун дуо?',
 'userlogin-resetpassword-link' => 'Киирии тылы уларытыы',
-'helplogin-url' => 'Help:Бэлиэ-ааты киллэрии',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Бэлиэтэниигэ көмө]]',
 'userlogin-loggedin' => 'Маннык аатынан киирбиккин {{GENDER:$1|$1}}.
 Атын аатынан киирэргэ аллара көстөр форманы туһан.',
 'userlogin-createanother' => 'Атын аатынан бэлиэтэн',
@@ -983,8 +980,6 @@ IP-аадырыһа эрэ көстөр.
 'revdelete-show-file-submit' => 'Сөп',
 'revdelete-selected' => "'''[[:$1]] сирэй {{PLURAL:$2|талыллыбыт торума|талыллыбыт торумнара}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Сирэй талыллыбыт историята|Сирэй талыллыбыт историялара}}:'''",
-'revdelete-text' => "'''Сотуллубут барыллар сирэй историятыгар киириэхтэрэ, ол гынан баран сорох барыллар көннөрү киһиэхэ көстүөхтэрэ суоҕа.'''
-{{SITENAME}} дьаһабыллара кистэммит суруктары көрөр уонна сотуллубуту төттөрү төннөрөр кыахтаахтар (эбии хааччахтааһын турбатах буоллаҕына).",
 'revdelete-confirm' => 'Бука диэн кырдьык бу дьайыыны онороргун, содула туох буоларын өйдүүргүн уонна [[{{MediaWiki:Policy-url}}|сиэри]] тутуһаргын бигэргэт.',
 'revdelete-suppress-text' => "Кистээһин маннык түбэлтэлэргэ '''эрэ''' оҥоһуллар:
 
index 16d8241..89616cf 100644 (file)
@@ -168,7 +168,6 @@ $messages = array(
 'vector-action-protect' => 'Bańcao',
 'vector-action-undelete' => 'Bań getgiḍi',
 'vector-action-unprotect' => 'Bodol rukhiyạ',
-'vector-simplesearch-preference' => 'Arhõ jạsti sendra poramorso keṭećmẽ (khali vecṭor skinre lạgit)',
 'vector-view-create' => 'Tearme',
 'vector-view-edit' => 'So̠mpado̠n',
 'vector-view-history' => 'Jạṛ ńelme',
index a486599..fe06b83 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Andria
+ * @author L2212
  * @author Marzedu
  * @author Node ue
  * @author לערי ריינהארט
@@ -58,7 +59,6 @@ $linkTrail = "/^([a-z]+)(.*)$/sD";
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Sutalìnea is cullegamentos',
-'tog-justify' => 'Alliniamentu paràgrafos giustificados',
 'tog-hideminor' => 'Cua is acontzos minores in sa pàgina de is ùrtimas mudàntzias',
 'tog-hidepatrolled' => 'Cua is acontzos verificados in is ùrtimas mudàntzias',
 'tog-newpageshidepatrolled' => 'Cua is pàginas verificadas dae sa lista de is pàginas noas',
@@ -67,9 +67,7 @@ $messages = array(
 'tog-numberheadings' => 'Auto-numeratzione de is tìtulos',
 'tog-showtoolbar' => "Ammustra s'amusta de is ainas pro is acontzos (esigit JavaScript)",
 'tog-editondblclick' => 'Acontza pàginas cun dòpiu click (esigit JavaScript)',
-'tog-editsection' => 'Acontza setziones dae su butone [acontza]',
 'tog-editsectiononrightclick' => "Abilita s'acontzu de is setziones cun dòpiu click in is tìtulos de is setziones (esigit JavaScript)",
-'tog-showtoc' => "Ammustra s'ìndixe de is cuntènnidos (pro pàginas cun prus de 3 setziones)",
 'tog-rememberpassword' => 'Ammenta sa sessione in custu navigadore (pro unu màssimu de $1 {{PLURAL:$1|die|dies}})',
 'tog-watchcreations' => 'Aciungi is pàginas chi apo creadu a sa watchlist mea',
 'tog-watchdefault' => 'Aciungi is pàginas chi apo acontzadu a sa watchlist mea',
@@ -609,6 +607,9 @@ Cosas de ammentare: '''({{int:cur}})''' = diferèntzias cun sa versione currente
 'nextn' => '{{PLURAL:$1|imbeniente|imbenientes $1}}',
 'shown-title' => 'Ammustra $1 {{PLURAL:$1|resurtadu|resurtados}} pro pàgina',
 'viewprevnext' => 'Càstia ($1 {{int:pipe-separator}} $2) ($3).',
+'searchprofile-articles' => 'Pàginas de càbidu',
+'searchprofile-project' => 'Pàginas de agiudu e de su progetu',
+'searchprofile-images' => 'Multimèdia',
 'searchprofile-everything' => 'Totu',
 'searchprofile-advanced' => 'Avantzada',
 'searchprofile-articles-tooltip' => 'Chirca in $1',
@@ -997,7 +998,7 @@ S'indiritzu chi as insertadu in is [[Special:Preferences|preferèntzias usuàriu
 
 # Watchlist
 'watchlist' => 'Sa watchlist mea',
-'mywatchlist' => 'Sa watchlist mea',
+'mywatchlist' => 'Pàginas annotadas',
 'nowatchlist' => 'No as indicadu pàginas in sa watchlist tua.',
 'watchnologin' => 'No intrau (log in)',
 'watchnologintext' => 'Devi prima fare il [[Special:UserLogin|login]]
index cc365ee..87856bb 100644 (file)
@@ -315,7 +315,6 @@ $messages = array(
 'vector-action-protect' => 'Pruteggi',
 'vector-action-undelete' => 'Riprìstina',
 'vector-action-unprotect' => 'Cancia la prutizzioni',
-'vector-simplesearch-preference' => 'Abbilita la barra pâ ricerca simprificata (sulu pi la skin Vector)',
 'vector-view-create' => 'Crea',
 'vector-view-edit' => 'Cancia',
 'vector-view-history' => 'Talìa a storia',
@@ -572,8 +571,6 @@ Accura chi quarchi pàggina pò cuntinuari a èssiri ammustrata comu si nun avis
 'gotaccountlink' => 'Trasi',
 'userlogin-resetlink' => "T'ascurdasti li dittagli pâ trasuta?",
 'userlogin-resetpassword-link' => 'Reinizzializza la tò password',
-'helplogin-url' => 'Help:Cunnissioni',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Aiutu câ fasi di login]]',
 'createacct-join' => 'Nzirisci li tò nfurnazzioni ccà',
 'createacct-emailrequired' => 'Nnirizzu e-mail',
 'createacct-emailoptional' => 'Nnirizzu e-mail (facurtativu)',
@@ -920,8 +917,6 @@ All'amministratura è ancora possibili [$1 talìari lu confrontu] si nicissariu.
 'revdelete-show-file-submit' => 'Sì',
 'revdelete-selected' => "'''{{PLURAL:$2|Virsioni silizziunata|Virsioni silizziunati}} di [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Eventu dû riggistru silizziunatu|Eventi dû riggistru silizziunati}}:'''",
-'revdelete-text' => "'''Li virsioni cancillati rèstanu visìbbili ntâ cronoluggìa dâ pàggina, mentri lu testu cuntinutu nun è accissìbbili a lu pùbbricu.'''
-L'àutri amministratura dû situ ponnu accèdiri comu è gghiè a li cuntinuti ammucciati e ripristinàrili attraversu sta stissa nterfaccia, siddu nun hannu statu mpustati àutri limitazzioni n fasi di nstallazzioni dû situ.",
 'revdelete-suppress-text' => "La rimozzioni havi a essiri utilizzata '''sulu''' ni sti casi:
 * Dati pirsonali inoppurtuni
 *: ''ndirizzi, nnummara di telefunu, codici fiscali, ecc.''",
index cb73567..9098a42 100644 (file)
@@ -8,8 +8,10 @@
  * @file
  *
  * @author (vinny)
+ * @author AmaryllisGardener
  * @author Avicennasis
  * @author Derek Ross
+ * @author John Reid
  * @author Malafaya
  * @author OchAyeTheNoo
  * @author Omnipaedista
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Unnerline airtins:',
-'tog-hideminor' => 'Hide smaa edits in recent chynges',
-'tog-hidepatrolled' => 'Hide patrolled edits in recent chynges',
-'tog-newpageshidepatrolled' => 'Hide patrolled pages frae the new page list',
-'tog-extendwatchlist' => 'Mak watchleet bigger tae shaw aw chynges',
-'tog-usenewrc' => 'Enhanced recent chynges (no for aa brousers)',
+'tog-hideminor' => 'Skauk smaa eidits in recent chynges',
+'tog-hidepatrolled' => 'Skauk patrolled eidits in recent chynges',
+'tog-newpageshidepatrolled' => 'Skauk patrolled pages frae the new page leet',
+'tog-extendwatchlist' => 'Mak watchleet bigger tae shaw aw chynges, no just the maist recent',
+'tog-usenewrc' => 'Groop chynges bi page in recent chynges n watchleet',
 'tog-numberheadings' => 'Auto-nummer heidins',
-'tog-showtoolbar' => 'Shaw edit toolbar',
-'tog-editondblclick' => 'Edit pages on dooble-dab (JavaScript)',
-'tog-editsectiononrightclick' => 'Enable section editin bi richt-dabbin on section teitles (JavaScript)',
-'tog-rememberpassword' => 'Mynd password ower sessions (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'tog-watchcreations' => 'Add pages ye mak tar yer watchleet',
-'tog-watchdefault' => 'Add pages ye edit tae yer watchleet',
-'tog-watchmoves' => 'Eik pages A move tae ma watchleet',
-'tog-watchdeletion' => 'Eik pages A get rid o tae ma watchleet',
+'tog-showtoolbar' => 'Shaw eidit tuilbaur',
+'tog-editondblclick' => 'Eidit pages oan dooble-clap (JavaScript)',
+'tog-editsectiononrightclick' => 'Enable section editin bi richt-clapin on section teitles',
+'tog-rememberpassword' => 'Mynd ma password oan this browser (fer ae maximum o $1 {{PLURAL:$1|day|days}})',
+'tog-watchcreations' => 'Add pages that Ah cræft n files that Ah uplaid til ma watchleet',
+'tog-watchdefault' => 'Add pages n files that Ah eedit til ma watchleet',
+'tog-watchmoves' => 'Add pages n files that Ah muiv til ma watchleet',
+'tog-watchdeletion' => 'Eik pages n files that Ah get rid o til ma watchleet',
 'tog-minordefault' => 'Mairk aa edits "smaa" bi defaut',
-'tog-previewontop' => 'Shaw scance afore edit box an no efter it',
-'tog-previewonfirst' => 'Shaw scance on first edit',
-'tog-enotifwatchlistpages' => 'Send me an email on page chynges',
-'tog-enotifusertalkpages' => 'Send me an email whan ma uiser collogue page is chynged',
-'tog-enotifminoredits' => 'Send me an email for smaa edits o pages an aa',
+'tog-previewontop' => 'Shaw owerview afore eedit kist n naw efter it',
+'tog-previewonfirst' => 'Shaw luikower oan firstwhile eidit',
+'tog-enotifwatchlistpages' => 'Wab-mail me whan ae page or file on ma watchleet is chynged',
+'tog-enotifusertalkpages' => 'Send me ae wab-mail whan ma uiser tauk page is chynged',
+'tog-enotifminoredits' => 'Send me ae wab-mail fer wee eedits o pages n files ava',
 'tog-enotifrevealaddr' => 'Shaw ma email address in notification mails',
 'tog-shownumberswatching' => 'Shaw the nummer o watching uisers',
-'tog-fancysig' => 'Raw seignaturs (athoot automatic airtin)',
-'tog-uselivepreview' => 'Uise leeve preview (JavaScript) (Prattik)',
-'tog-forceeditsummary' => 'Gie me a jottin when A dinnae put in a edit summary',
-'tog-watchlisthideown' => 'Hide yer ain edits frae yer watchleet',
-'tog-watchlisthidebots' => 'Hide bot edits frae yer watchleet',
-'tog-watchlisthideminor' => 'Dinna shaw sma edits on ma watchleet',
-'tog-watchlisthideliu' => 'Hide edits by loggit in uisers frae the watchleet',
-'tog-watchlisthideanons' => 'Hide edits by nameless uisers frae the watchleet',
-'tog-watchlisthidepatrolled' => 'Hide patrolled edits frae the watchlist',
+'tog-oldsig' => 'Exeestin signatur:',
+'tog-fancysig' => 'Treat signature as wikitext (wioot aen autæmatic airtin)',
+'tog-uselivepreview' => 'Uise live luik ower (experimental)',
+'tog-forceeditsummary' => 'Gie me ae jottin when Ah dinnae put in aen eidit owerview',
+'tog-watchlisthideown' => 'Skauk ma eidits frae the watchleet',
+'tog-watchlisthidebots' => 'Skauk bot eidits frae the watchleet',
+'tog-watchlisthideminor' => 'Dinna shaw smaa eidits oan ma watchleet',
+'tog-watchlisthideliu' => 'Skauk eidits bi loggit in uisers fae the watchleet',
+'tog-watchlisthideanons' => 'Skauk eidits bi nameless uisers fae the watchleet',
+'tog-watchlisthidepatrolled' => 'Skauk patrolled eidits fae the watchleet',
 'tog-ccmeonemails' => 'Gie me copies o emails A write tae ither uisers',
 'tog-diffonly' => 'Dinna shaw page contents ablo diffs',
-'tog-showhiddencats' => 'Shaw hidden categories',
+'tog-showhiddencats' => "Shaw Skauk't categeries",
 'tog-norollbackdiff' => 'Lave oot diff efter rowin back',
+'tog-useeditwarning' => 'Warnish me whan Ah lea aen eidit page wi onhained chynges',
+'tog-prefershttps' => 'Aye uise ae secure connection whan loggit in',
 
 'underline-always' => 'Aye',
 'underline-never' => 'Niver',
-'underline-default' => 'Brouser defaut',
+'underline-default' => 'Skin or brouser defaut',
 
 # Font style option in Special:Preferences
+'editfont-style' => 'Eidit area font style:',
+'editfont-default' => 'Brouser defaut',
 'editfont-sansserif' => 'Sans-serif font',
 'editfont-serif' => 'Serif font',
 
@@ -75,8 +82,8 @@ $messages = array(
 'tuesday' => 'Tysday',
 'wednesday' => 'Wadensday',
 'thursday' => 'Fuirsday',
-'friday' => 'Friday',
-'saturday' => 'Seturday',
+'friday' => 'Fryday',
+'saturday' => 'Setturday',
 'sun' => 'Sun',
 'mon' => 'Mon',
 'tue' => 'Tue',
@@ -84,8 +91,8 @@ $messages = array(
 'thu' => 'Thu',
 'fri' => 'Fri',
 'sat' => 'Sat',
-'january' => 'Januar',
-'february' => 'Februar',
+'january' => 'Januair',
+'february' => 'Febuair',
 'march' => 'Mairch',
 'april' => 'Apryle',
 'may_long' => 'Mey',
@@ -96,11 +103,11 @@ $messages = array(
 'october' => 'October',
 'november' => 'November',
 'december' => 'December',
-'january-gen' => 'Januar',
-'february-gen' => 'February',
-'march-gen' => 'March',
-'april-gen' => 'Apryle',
-'may-gen' => 'May',
+'january-gen' => 'Januair',
+'february-gen' => 'Febuair',
+'march-gen' => 'Mairch',
+'april-gen' => 'Aprile',
+'may-gen' => 'Mey',
 'june-gen' => 'Juin',
 'july-gen' => 'Julie',
 'august-gen' => 'August',
@@ -120,6 +127,18 @@ $messages = array(
 'oct' => 'Oct',
 'nov' => 'Nov',
 'dec' => 'Diz',
+'january-date' => '$1 Januair',
+'february-date' => '$1 Febuair',
+'march-date' => '$1 Mairch',
+'april-date' => '$1 Apryl',
+'may-date' => '$1 Mey',
+'june-date' => '$1 Juin',
+'july-date' => '$1 Julie',
+'august-date' => '$1 August',
+'september-date' => '$1 September',
+'october-date' => '$1 October',
+'november-date' => '$1 November',
+'december-date' => '$1 Dezember',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Category|Categories}}',
@@ -127,7 +146,8 @@ $messages = array(
 'subcategories' => 'Subcategories',
 'category-media-header' => 'Eetems in category "$1"',
 'category-empty' => "''This category haes no pages or eetems at the meenit.''",
-'hidden-categories' => '{{PLURAL:$1|Hidden categorie|Hidden categories}}',
+'hidden-categories' => "{{PLURAL:$1|Skauk't categerie|Skauk't categeries}}",
+'hidden-category-category' => "Skauk't cætegories",
 'category-subcat-count' => '{{PLURAL:$2|This category juist haes the follaein subcategory.|This category haes the follaein {{PLURAL:$1|subcategory|$1 subcategories}}, oot o $2 awthegither.}}',
 'category-subcat-count-limited' => 'This category haes the follaein {{PLURAL:$1|subcategory|$1 subcategories}}.',
 'category-article-count' => '{{PLURAL:$2|This category contains the ae follaein page.|The follaein {{PLURAL:$1|page|$1 pages}} is in this category, oot o $2 total.}}',
@@ -135,23 +155,26 @@ $messages = array(
 'category-file-count' => '{{PLURAL:$2|This category hauds juist the ae follaein file.|The follaein {{PLURAL:$1|file|$1 files}}s is in this category, oot o $2 total.}}',
 'category-file-count-limited' => 'The follaein {{PLURAL:$1|file is|$1 files is}} in this category.',
 'listingcontinuesabbrev' => 'cont.',
+'index-category' => "Index't pages",
 'noindex-category' => 'Noindexed pages',
+'broken-file-category' => 'Pages wi broken file links',
 
 'about' => 'Aboot',
 'article' => 'Content page',
 'newwindow' => '(opens in new windae)',
 'cancel' => 'Cancel',
 'moredotdotdot' => 'Mair...',
+'morenotlisted' => 'This leet isna complete.',
 'mypage' => 'Ma page',
-'mytalk' => 'Ma collogue',
-'anontalk' => 'Collogue for this IP',
+'mytalk' => 'Ma tauk',
+'anontalk' => 'Tauk fer this IP address',
 'navigation' => 'Navigation',
-'and' => '&#32;an',
+'and' => '&#32;n',
 
 # Cologne Blue skin
 'qbfind' => 'Rake',
 'qbbrowse' => 'Brouse',
-'qbedit' => 'Edit',
+'qbedit' => 'Eidit',
 'qbpageoptions' => 'This page',
 'qbmyoptions' => 'Ma pages',
 'faq' => 'ASQ',
@@ -159,79 +182,93 @@ $messages = array(
 
 # Vector skin
 'vector-action-addsection' => 'Add topic',
-'vector-action-delete' => 'Delete',
-'vector-action-move' => 'Flit',
+'vector-action-delete' => 'Delyte',
+'vector-action-move' => 'Muiv',
 'vector-action-protect' => 'Fend',
+'vector-action-undelete' => 'Ondelyte',
+'vector-action-unprotect' => 'Chynge protection',
 'vector-view-create' => 'Mak',
-'vector-view-edit' => 'Edit',
-'vector-view-history' => 'See history',
+'vector-view-edit' => 'Eedit',
+'vector-view-history' => 'See histerie',
 'vector-view-view' => 'Read',
 'vector-view-viewsource' => 'View soorce',
 'actions' => 'Actions',
 'namespaces' => 'Namespaces',
 'variants' => 'Variants',
 
-'errorpagetitle' => 'Error',
-'returnto' => 'Return tae $1.',
+'navigation-heading' => 'Navigâtion menu',
+'errorpagetitle' => 'Mistak',
+'returnto' => 'Return til $1.',
 'tagline' => 'Frae {{SITENAME}}',
 'help' => 'Help',
 'search' => 'Rake',
 'searchbutton' => 'Rake',
 'go' => 'Gang',
 'searcharticle' => 'Gang',
-'history' => 'Page history',
-'history_short' => 'History',
+'history' => 'Page histerie',
+'history_short' => 'Histerie',
 'updatedmarker' => 'chynged sin ma hindermast visit',
 'printableversion' => 'Prent version',
 'permalink' => 'Permanent airtin',
 'print' => 'Prent',
-'edit' => 'Edit',
+'view' => 'View.',
+'edit' => 'Eedit',
 'create' => 'Mak',
-'editthispage' => 'Edit this page',
+'editthispage' => 'Eedit this page',
 'create-this-page' => 'Mak this page',
-'delete' => 'Delete',
-'deletethispage' => 'Delete this page',
+'delete' => 'Delyte',
+'deletethispage' => 'Delyte this page',
+'undeletethispage' => 'Ondelyte this page',
 'undelete_short' => 'Undelete {{PLURAL:$1|ane edit|$1 edits}}',
+'viewdeleted_short' => 'See {{PLURAL:$1|yin delytit eedit|$1 delytit eedits}}',
 'protect' => 'Fend',
 'protect_change' => 'chynge',
 'protectthispage' => 'Fend this page',
-'unprotect' => 'Loose fend',
-'unprotectthispage' => 'Loose the fend for this page',
+'unprotect' => 'Chynge protection',
+'unprotectthispage' => 'Chynge fend fer this page',
 'newpage' => 'New page',
 'talkpage' => 'Blether ower this page',
-'talkpagelinktext' => 'Collogue',
+'talkpagelinktext' => 'Tauk',
 'specialpage' => 'Byordinar Page',
 'personaltools' => 'Personal tuils',
-'postcomment' => 'Eik a message',
+'postcomment' => 'New section',
 'articlepage' => 'Leuk at content page',
 'talk' => 'Collogue',
 'views' => 'Views',
 'toolbox' => 'Tuilkist',
 'userpage' => 'View uiser page',
-'projectpage' => 'View project page',
+'projectpage' => 'See waurk page',
 'imagepage' => 'look ower image page',
 'mediawikipage' => 'View message page',
 'templatepage' => 'View template page',
 'viewhelppage' => 'View help page',
-'categorypage' => 'Scance category page',
-'viewtalkpage' => 'Scance ower collogue',
+'categorypage' => 'See categerie page',
+'viewtalkpage' => 'See tauk',
 'otherlanguages' => 'In ither leids',
 'redirectedfrom' => '(Reguidit frae $1)',
-'redirectpagesub' => 'Redirect page',
+'redirectpagesub' => 'Reguidal page',
 'lastmodifiedat' => 'This page wis hindermaist chynged $2, $1.',
 'viewcount' => 'This page haes been accesst $1 {{PLURAL:$1|once|$1 times}}.',
 'protectedpage' => 'Protectit page',
-'jumpto' => 'Lowp tae:',
+'jumpto' => 'Jump til:',
 'jumptonavigation' => 'navigation',
 'jumptosearch' => 'rake',
+'view-pool-error' => 'Sorrie, the servers ar owerlaided at the moment.
+Ower mony uisers ar trying tae view this page.
+Please wait ae while afore ye try tae access this page again.
+
+$1',
+'pool-timeout' => 'Timeout waitin fer the lock',
+'pool-queuefull' => 'Pool line is ful',
+'pool-errorunknown' => 'Onknawn mistak.',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'Aboot {{SITENAME}}',
 'aboutpage' => 'Project:Aboot',
-'copyright' => 'Aa text is available unner $1',
+'copyright' => 'Content is available unner $1 onless itherwise noted.',
 'copyrightpage' => '{{ns:project}}:Copyrichts',
-'currentevents' => 'Gaun on the nou',
-'currentevents-url' => 'Project:Gaun on the nou',
+'currentevents' => 'Gaun oan the nou',
+'currentevents-url' => 'Project:Gaun oan the nou',
 'disclaimers' => 'Disclamation',
 'disclaimerpage' => 'Project:General_disclamation',
 'edithelp' => 'Editin help',
@@ -245,28 +282,34 @@ $messages = array(
 'privacypage' => 'Project:Privacy policy',
 
 'badaccess' => 'Permeission mishanter',
-'badaccess-group0' => 'WARNIN: Ye arnae alloued tae dae whit you hae requestit!',
+'badaccess-group0' => "Ye'r no permited tae dae whit ye hae requestit!",
 'badaccess-groups' => 'The action ye hae requestit is limitit tae uisers in {{PLURAL:$2|the group|ane o the groups}}: $1.',
 
-'versionrequired' => 'Version $1 of MediaWiki requirit',
+'versionrequired' => 'Version $1 o MediaWiki needit',
 'versionrequiredtext' => 'Version $1 o MediaWiki is requirit tae uise this page. Tak a keek at the [[Special:Version|version page]].',
 
 'ok' => 'Okay',
 'retrievedfrom' => 'Taen frae "$1"',
 'youhavenewmessages' => 'Ye hae $1 ($2).',
-'youhavenewmessagesmulti' => 'Ye hae neow messages on $1',
-'editsection' => 'edit',
-'editold' => 'edit',
+'youhavenewmessagesfromusers' => '{{PLURAL:$4|Ye hae}} $1 fae {{PLURAL:$3|anither uiser|$3 uisers}} ($2).',
+'youhavenewmessagesmanyusers' => 'Ye hae $1 fae moni uisers ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ae new message|999=new messages}}',
+'newmessagesdifflinkplural' => 'last {{PLURAL:$1|chynge|999=chynges}}',
+'youhavenewmessagesmulti' => 'Ye hae new messages oan $1',
+'editsection' => 'eedit',
+'editold' => 'eedit',
 'viewsourceold' => 'ken soorce',
-'editlink' => 'edit',
-'viewsourcelink' => 'Scance ower the source',
-'editsectionhint' => 'Edit section: $1',
-'toc' => 'Table o contents',
+'editlink' => 'eedit',
+'viewsourcelink' => 'see soorce',
+'editsectionhint' => 'Eedit section: $1',
+'toc' => 'Contents',
 'showtoc' => 'shaw',
 'hidetoc' => 'scouk',
+'collapsible-collapse' => 'Collapse.',
+'collapsible-expand' => 'Mak mair muckle',
 'thisisdeleted' => 'View or cower $1?',
 'viewdeleted' => 'View $1?',
-'restorelink' => '{{PLURAL:$1|one delete edit|$1 delete edits}}',
+'restorelink' => '{{PLURAL:$1|yin delytit eidit|$1 delytit eidits}}',
 'feedlinks' => 'Feed:',
 'feed-invalid' => "This feeds subscrieve's teep isnae habile.",
 'feed-unavailable' => 'Syndication feeds isna available',
@@ -274,14 +317,16 @@ $messages = array(
 'site-atom-feed' => '$1 Atom Feed',
 'page-rss-feed' => '"$1" RSS Feed',
 'page-atom-feed' => '"$1" Atom Feed',
-'red-link-title' => '$1 (page disna exist)',
+'red-link-title' => '$1 (page disna exeest)',
+'sort-descending' => 'Sort descending.',
+'sort-ascending' => 'Sort ascending.',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Page',
 'nstab-user' => 'Uiser page',
 'nstab-media' => 'Eetem page',
 'nstab-special' => 'Byordinar page',
-'nstab-project' => 'Project page',
+'nstab-project' => 'Waurk page',
 'nstab-image' => 'Eimage',
 'nstab-mediawiki' => 'Message',
 'nstab-template' => 'Template',
@@ -290,171 +335,337 @@ $messages = array(
 
 # Main script and global functions
 'nosuchaction' => 'Nae sic action',
-'nosuchactiontext' => "The action specifiee'd bi the URL isna recognised
-Ye micht hae mistyped the URL, or follaed a wrang link
-This micht forby be caused by a bug in the saftware uised by {{SITENAME}}.",
+'nosuchactiontext' => 'The action speceefieed bi the URL isna recognised
+Ye micht hae mistyped the URL, or follaed ae wrang link
+This micht forby be caused bi ae bug in the saffware uised bi {{SITENAME}}.',
 'nosuchspecialpage' => 'Nae sic byordinar page',
-'nospecialpagetext' => '<strong>Ye hae requestit an invalid byordinar page.</strong>
+'nospecialpagetext' => '<strong>Ye hae requestit aen onvalid byordinar page.</strong>
 
-A leet o valid byordinar pages can be funnd at [[Special:SpecialPages|{{int:specialpages}}]].',
+A leet o valid byordinar pages can be foond at [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
-'error' => 'Error',
-'databaseerror' => 'Database error',
-'laggedslavemode' => 'Warning: Page micht nae contain recent updates',
+'error' => 'Mistak',
+'databaseerror' => 'Database mistak',
+'databaseerror-text' => 'Ae database speirin mistak has occurred.
+This micht be cause o ae bug in the saffware.',
+'databaseerror-textcl' => 'Ae database speirin mistak has occurred.',
+'databaseerror-query' => 'Speirin: $1',
+'databaseerror-function' => 'Function: $1',
+'databaseerror-error' => 'Mistake: $1',
+'laggedslavemode' => '<strong>Warnishment:</strong> Page micht naw contain recent updates',
 'readonly' => 'Database lockit',
-'enterlockreason' => "Enter a raeson for the lock, includin an estimate o whan the lock'll be lowsed",
-'readonlytext' => "The databae is lockit tae new entries an ither modifeecations the nou,
-likely for routine database maintenance; efter that it'll be back tae normal.
-The adminstration that lockit it gied this explanation:
-$1",
-'missing-article' => 'The database didna find the text o a page that it shuid hae fund, cawed "$1" $2.
-
-Maistly this is caused by follaein an ootdated diff or history link tae a page that haes been delete.
-
-If this isna the case, you micht hae fund a bug in the saftware.
-Please lat an [[Special:ListUsers/sysop|administrator]] ken aboot this, makin note o the URL.',
-'missingarticle-rev' => '(revision#: $1)',
+'enterlockreason' => "Enter ae raeson fer the lock, inclædin aen estimate o whan the lock'll be lowsed",
+'readonlytext' => "The databae is lockit tae new entries n ither modifeecations the nou,
+likelie fer routine database maintenance; efter that it'll be back til normal.
+The admeenstration that lockit it gied this explanation: $1",
+'missing-article' => 'The database didna fynd the tex o ae page that it shid hae foond, cawed "$1" $2.
+
+Maistlie this is caused bi follaein aen ootdated diff or histerie link til ae page that haes been delytit.
+
+Gif this isna the case, ye micht hae foond ae bug in the saffware.
+Please lat aen [[Special:ListUsers/sysop|admeenistrater]] ken aneat this, makin note o the URL.',
+'missingarticle-rev' => '(reveesion#: $1)',
 'missingarticle-diff' => '(Diff: $1, $2)',
 'readonly_lag' => 'The database haes been autaematically lockit while the sclave database servers catch up tae the maister',
 'internalerror' => 'Internal mishanter',
-'internalerror_info' => 'Internal error: $1',
-'filecopyerror' => 'Cuidna copy file "$1" tae "$2".',
-'filerenameerror' => 'Cuidna rename file "$1" tae "$2".',
-'filedeleteerror' => 'Cuidna delete file "$1".',
+'internalerror_info' => 'Internal mistak: $1',
+'fileappenderrorread' => 'Coudna read "$1" durin append.',
+'fileappenderror' => 'Coudna append "$1" til "$2".',
+'filecopyerror' => 'Cuidna copie file "$1" til "$2".',
+'filerenameerror' => 'Cuidna rename file "$1" til "$2".',
+'filedeleteerror' => 'Cuidna delyte file "$1".',
 'directorycreateerror' => 'Culdnae mak directory "$1".',
 'filenotfound' => 'Cuidna fin file "$1".',
 'fileexistserror' => 'Culdnae write tae file "$1": file is already here',
 'unexpected' => 'Vailyie isnae expectit: "$1"="$2".',
-'formerror' => 'Error: cuidna submit form',
+'formerror' => 'Mistak: cuidna haun in form',
 'badarticleerror' => 'This action canna be duin tae this page.',
-'cannotdelete' => "Cuidna delete the page or eimage specifee'd. (It micht hae aareadies been delete bi some ither bodie.)",
+'cannotdelete' => 'The page or file "$1" coudna be delytit.
+It micht awreadie hae been delytit bi some ither bodie.',
+'cannotdelete-title' => 'Canna delyte page "$1"',
+'delete-hook-aborted' => 'Delytion stappit bi huik.
+It gae nae explanâtion.',
+'no-null-revision' => 'Coudna mak new null reveesion fer page "$1"',
 'badtitle' => 'Bad teitle',
 'badtitletext' => 'The requestit page teitle wis invalid, tuim, or a wranglie airtit inter-leid or inter-wiki teitle. It mibbe haes ane or mair chairacters that canna be uised in teitles.',
-'perfcached' => 'The follaeing data is cached an michtna be richt up tae date. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'The followin data is cached, an wis hindermaist chynged $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'The follaein data is cached n michtna be richt up til date. Ae maist muckle o {{PLURAL:$1|yin result is|$1 results ar}} available in the cache.',
+'perfcachedts' => 'The follaein data is cached, n wis hindermaist updated $1. Ae maist muckkle o {{PLURAL:$4|yin result is|$4 results ar}} available in the cache.',
 'querypage-no-updates' => 'Updates for this page ar disablit at the meenit. Data here wilnae be refreshit at the meenit.',
 'viewsource' => 'View soorce',
+'viewsource-title' => 'See soorce fer $1',
 'actionthrottled' => 'Action devalit',
-'actionthrottledtext' => 'As an anti-spam meisur, ye ar limitit frae daein this action ower mony times in a ower short tid, an ye hae exceedit this limit. Please try again in a wee.',
-'protectedpagetext' => "Sairy, this page haes been '''lockit''' tae hinder vandalism.",
-'viewsourcetext' => 'Ye can leuk at an copy the soorce o this page:',
-'protectedinterface' => 'Sairy, but this page provides interface text for the saftware, an is lockit to hinder abuise.',
-'editinginterface' => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
-Changes to this page will affect the appearance of the user interface for other users.
-For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
-'cascadeprotected' => 'This page haes been protectit fra editin, acause it is includit in the followin {{PLURAL:$1|page|pages}}, that are protectit wi the "cascading" option turnit on:
+'actionthrottledtext' => "Aes aen anti-spam meisur, ye'r limitit fae daein this action ower monie times in aen ower short time, n ye'v exceedit this limit. Please try again in ae few minutes.",
+'protectedpagetext' => 'This page haes been protected fer tae hider eeditin or ither actions.',
+'viewsourcetext' => 'Ye can leuk at n copie the soorce o this page:',
+'viewyourtext' => 'Ye can see n copie the soorce o <strong>yer eedits</strong> til this page:',
+'protectedinterface' => 'This page provides interface tex fer the saffware oan this wiki, n is protected fer tae hinder abuise.
+Tae add or chynge owersets fer aw wikis, please uise [//translatewiki.net/ translatewiki.net], the MediaWiki localisation waurk.',
+'editinginterface' => "<strong>Warnishment:</strong> Ye'r eiditing ae page that is uised tae provide interface tex fer the saffware.
+Chynges til this page will affect the appearance o the uiser interface fer ither uisers oan this wiki.
+Tae add or chynge owersets fer aw wikis, please uise [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
+'cascadeprotected' => 'This page haes been protectit fae eiditin, cause it is inclædit in the follaein {{PLURAL:$1|page|pages}}, that ar protectit wi the "cascadin" optie turnit oan:
 $2',
 'namespaceprotected' => "Ye dinna hae permeession tae edit pages in the '''$1''' namespace.",
+'customcssprotected' => "Ye dinna hae permeession tae eidit this CSS page cause it contains anither uiser's personal settings.",
+'customjsprotected' => "Ye dinna hae permeession tae eidit this JavaScript page cause it contains anither uiser's personal settings.",
+'mycustomcssprotected' => 'Ye dinna hae permeession tae edit this CSS page.',
+'mycustomjsprotected' => 'Ye dinna hae permeession tae eidit this JavaScript page.',
+'myprivateinfoprotected' => 'Ye dinna hae permeession tae eidit yer private information.',
+'mypreferencesprotected' => 'Ye dinna hae permeession tae eidit yer preferences.',
 'ns-specialprotected' => 'Byordinar pages canna be editit.',
-'titleprotected' => "This teetle haes been protectit frae bein makkit by [[User:$1|$1]].
-The grunds for this are: ''$2''.",
+'titleprotected' => "This teetle haes been protectit fae bein makit bi [[User:$1|$1]].
+The groonds fer this ar: ''$2''.",
+'filereadonlyerror' => 'Canna modify the file "$1" cause the file repository "$2" is in read-yinly mode.
+
+The administrater that lock\'t it affered this explanation: "$3".',
+'invalidtitle-knownnamespace' => 'Onvalit title wi namespace "$2" n tex "$3"',
+'invalidtitle-unknownnamespace' => 'Onvalit title wi onkent namespace nummer $1 n tex "$2"',
+'exception-nologin' => 'No loggit in',
+'exception-nologin-text' => 'Please [[Special:Userlogin|log in]] tae be able tae access this page or action.',
+'exception-nologin-text-manual' => 'Please $1 tae be able tae access this page or action.',
+
+# Virus scanner
+'virus-badscanner' => "Bad confeeguration: Onken't virus scanner: <em>$1</em>",
+'virus-scanfailed' => 'the scan failed (code $1)',
+'virus-unknownscanner' => "onken't antivirus:",
 
 # Login and logout pages
-'logouttext' => "'''Ye'r nou loggit oot.'''
+'logouttext' => "<strong>Ye'r nou loggit oot.</strong>
 
-Ye can continue to uise {{SITENAME}} namelessly, or ye can log in again as the same or as a different uiser.
-Mynd that some pages micht continue tae be displayed as if ye war aye loggit in, till ye clear yer brouser cache.",
+Mynd that some pages micht continue tae be displeyed aes gif ye were still loggit in, til ye clear yer brouser cache.",
+'welcomeuser' => 'Weelcome, $1!',
+'welcomecreation-msg' => 'Yer accoont haes been cræftit.
+Ye can chynge yer {{SITENAME}} [[Special:Preferences|preeferences]] gif ye like.',
 'yourname' => 'Yer uiser name',
+'userlogin-yourname' => 'Uisername',
+'userlogin-yourname-ph' => 'Enter yer uisername',
+'createacct-another-username-ph' => 'Enter the uisername',
 'yourpassword' => 'Passwaird:',
+'userlogin-yourpassword' => 'Passwaird.',
+'userlogin-yourpassword-ph' => 'Enter yer passwaird',
+'createacct-yourpassword-ph' => 'Enter ae passwaird',
 'yourpasswordagain' => 'Retype passwaird:',
-'remembermypassword' => 'Mynd ma password oan this browser (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'createacct-yourpasswordagain' => 'Confirm passwaird.',
+'createacct-yourpasswordagain-ph' => 'Enter passwaird again.',
+'remembermypassword' => 'Mynd ma login oan this brouser (fer $1 {{PLURAL:$1|day|days}} at the maist)',
+'userlogin-remembermypassword' => 'Keep me loggit in',
+'userlogin-signwithsecure' => 'Uise secure connection',
 'yourdomainname' => 'Yer domain:',
-'externaldberror' => "Aither the wis an external authenteication database mishanter, or ye'r no alloued tae update yer external accoont.",
+'password-change-forbidden' => 'Ye canna chynge passwords oan this wiki.',
+'externaldberror' => "Aither thaur wis aen external authentication database mistak, or ye'r naw permitit tae update yer external accoont.",
 'login' => 'Log in',
-'nav-login-createaccount' => 'Log in / mak an accoont',
+'nav-login-createaccount' => 'Log in / cræft aen accoont',
 'loginprompt' => 'Ye maun hae cookies enabled tae log in tae {{SITENAME}}.',
-'userlogin' => 'Mak an accoont or log in',
+'userlogin' => 'Cræft aen accoont or log in',
+'userloginnocreate' => 'Log in.',
 'logout' => 'Log oot',
 'userlogout' => 'Log oot',
-'notloggedin' => 'No loggit in',
-'nologin' => "Dinna hae an accoont? '''$1'''.",
-'nologinlink' => 'Mak an accoont',
+'notloggedin' => 'Naw loggit in',
+'userlogin-noaccount' => 'Dinna hae aen accoont?',
+'userlogin-joinproject' => 'Jyn {{SITENAME}}',
+'nologin' => 'Dinna hae aen accoont? $1.',
+'nologinlink' => 'Cræft aen accoont',
 'createaccount' => 'Mak new accoont',
-'gotaccount' => "Got an accoont afore? '''$1'''.",
+'gotaccount' => 'Awreadie hae aen accoont? $1.',
 'gotaccountlink' => 'Log in',
 'userlogin-resetlink' => 'Forgotten yer login details?',
-'createaccountmail' => 'bi email',
+'userlogin-resetpassword-link' => 'Fergot yer password?',
+'userlogin-loggedin' => "Ye'r awreadie loggit in as {{GENDER:$1|$1}}.
+Uise the form ablow tae log in as anither uiser.",
+'userlogin-createanother' => 'Mak anither accoont',
+'createacct-join' => 'Enter yer information ablow.',
+'createacct-another-join' => "Enter the new accoont's information ablow.",
+'createacct-emailrequired' => 'Wab-mail address',
+'createacct-emailoptional' => 'Wab-mail address (optional)',
+'createacct-email-ph' => 'Enter yer wab-mail address',
+'createacct-another-email-ph' => 'Enter wab-mail address',
+'createaccountmail' => 'Uise ae temporarie random passwaird n send it til the speceefied wab-mail address',
+'createacct-realname' => 'Real name (optional).',
+'createaccountreason' => 'Raison:',
+'createacct-reason' => 'Raison',
+'createacct-reason-ph' => 'Why ar ye creating anither accoont',
+'createacct-captcha' => 'Security check.',
+'createacct-imgcaptcha-ph' => 'Enter the tex ye see abuin',
+'createacct-submit' => 'Mak yer accoont',
+'createacct-another-submit' => 'Mak anither accoont',
+'createacct-benefit-heading' => '{{SITENAME}} is makit bi fowk like ye.',
+'createacct-benefit-body1' => '{{PLURAL:$1|eidit|eidits}}',
+'createacct-benefit-body2' => '{{PLURAL:$1|page|pages}}.',
+'createacct-benefit-body3' => 'recent {{PLURAL:$1|contreebuter|contreebuters}}',
 'badretype' => 'The passwords ye entered disna match.',
-'userexists' => 'The uiser name ye entered is in uiss. Please chuise a different name.',
+'userexists' => 'The uiser name ye entered is awreadie in uiss. Please chuise ae different name.',
 'loginerror' => 'Login mishanter',
-'nocookiesnew' => "The uiser accoont wis creatit, but ye'r no loggit in. {{SITENAME}} uises cookies tae log uisers in. Ye hae cookies disabled. Please enable them, than log in wi yer new uisername and password.",
+'createacct-error' => 'Accoont cræftin mistak',
+'createaccounterror' => 'Coudna mak accoont: $1',
+'nocookiesnew' => "The uiser accoont wis cræftit, but ye'r naw loggit in. {{SITENAME}} uises cookies tae log uisers in. Ye hae cookies disabled. Please enable them, than log in wi yer new uisername n passwaird.",
 'nocookieslogin' => '{{SITENAME}} uises cookies tae log in uisers. Ye hae cookies disabled. Please enable thaim an gie it anither shot.',
+'nocookiesfornew' => 'The uiser accoont wisna cræftit, aes we couda confirm its soorce.
+Ensure that ye have cookies enabled, relaid this page n gie it anither shote.',
 'noname' => "Ye hivna specifee'd a valid uisername.",
 'loginsuccesstitle' => 'Login fine',
 'loginsuccess' => 'Ye\'re nou loggit in tae {{SITENAME}} as "$1".',
-'nosuchuser' => 'The\'r nae sic uiser as "$1".
-Uiser names are case-sensitive.
-Check yer spellin, or uise [[Special:UserLogin/signup|mak a new accoont]].',
+'nosuchuser' => 'Thaur\'s nae sic uiser aes "$1".
+Uiser names ar case-sensiteeve.
+Check yer speelin, or [[Special:UserLogin/signup|mak ae new accoont]].',
 'nosuchusershort' => 'The\'r nae sic uiser as "$1". Check yer spellin.',
-'nouserspecified' => 'Ye hae tae merk up a uisername.',
+'nouserspecified' => 'Ye hae tae merk up ae uisername.',
+'login-userblocked' => 'Uiser "$1" is blockit. Log-in naw permitit.',
 'wrongpassword' => 'The password ye entered is wrang. Please gie it anither shot.',
 'wrongpasswordempty' => 'The password ye entered is blank. Please gie it anither shot.',
 'passwordtooshort' => 'Yer password is ower short.
-It maun hae at laest $1 characters.',
-'mailmypassword' => 'E-mail new passwaird',
+It maun hae at laest {{PLURAL:$1|1 chairacter|$1 chairacters}}.',
+'password-name-match' => 'Yer passwaird maun be different fae yer uisername.',
+'password-login-forbidden' => 'The uise o this uisername n passwaird haes been ferbidden.',
+'mailmypassword' => 'Reset password',
 'passwordremindertitle' => 'Password reminder frae {{SITENAME}}',
-'passwordremindertext' => 'Somebodie (maist likely you, frae IP address $1)
-requestit that we send ye a new {{SITENAME}} login password ($4).
-The password for uiser "$2" is nou "$3".
-Ye shuid log in an chynge yer password richt awa.
-
-Gin some ither bodie made this request or gin ye\'v myndit o yer password an
-ye dinna want tae chynge it onie mair, ye can ignore this message an cairrie on uisin
-yer auld password.',
-'noemail' => 'The\'r nae e-mail address recordit for uiser "$1".',
+'passwordremindertext' => 'Somebodie (liklie ye, fae IP address $1) requested ae new
+passwaird fer {{SITENAME}} ($4). Ae temporarie passwaird fer uiser "$2" haes been cræftit n wis set til "$3". Gif this wis yer intent, ye will need tae log in n chuise ae new passwaird nou.
+Yer temporarie passwaird will expire in {{PLURAL:$5|yin day|$5 days}}.
+
+Gif some ither bodie makit this request, or gif ye hae myndit yer passwaird, n ye nae langer wish tae chynge it, ye can ignore this message n continue uisin yer auld passwaird.',
+'noemail' => 'Thaur\'s nae wab-mail address recordit fer uiser "$1".',
+'noemailcreate' => 'Ye need tae provide ae valid wab-mail address.',
 'passwordsent' => 'A new password haes been sent tae the e-mail address registert for "$1". Please log in again efter ye receive it.',
-'blocked-mailpassword' => 'Yer IP address is blockit frae editin, sae it
-canna uise the password recovery function, for tae prevent abuiss.',
-'eauthentsent' => "A confirmation email haes been sent tae the specifee'd email address.
-Afore onie ither mail is sent tae the accoont, ye'll hae tae follae the guidance in the email,
-tae confirm that ye ar aucht the accoont.",
-'throttled-mailpassword' => "A password minder haes been sent afore, in the laist {{PLURAL:$1|hoor|$1 hoors}}. To hinder abuise, juist the ''ae'' password minder will be sent in
-{{PLURAL:$1|hoor|$1 hoors}}.",
-'mailerror' => 'Error sendin mail: $1',
+'blocked-mailpassword' => 'Yer IP address is blockit fae eeditin, sae it
+canna uise the passwaird recoverie function, for tae hinder abuiss.',
+'eauthentsent' => "Ae confirmation wab-mail haes been sent til the speceefied wab-mail address.
+Afore oni ither wab-mail is sent til the accoont, ye'll hae tae follae the instructions in the wab-mail, sae as tae confirm that the accoont is reallie yers.",
+'throttled-mailpassword' => 'Ae password reset wab-mail haes awreadie been sent, wiin the laist {{PLURAL:$1|hoor|$1 hoors}}.
+Tae hinder abuiss, yinly the yin password reset wab-mail will be sent per {{PLURAL:$1|hoor|$1 hoors}}.',
+'mailerror' => 'Mistak sendin mail: $1',
 'acct_creation_throttle_hit' => 'Veesitors tae this wiki uisin yer IP address haev created $1 {{PLURAL:$1|accoont|accoonts}} the day, which is the maist permeettit in that lang.
 Sae veesitors uisin this IP address canna mak ony mair accoonts juist noo.',
-'emailauthenticated' => 'Yer e-mail address wis checkit on $1.',
-'emailnotauthenticated' => 'Yer e-mail address hasnae been checkit! Nae e-mail
-will be sent for ony o the followin featurs.',
+'emailauthenticated' => 'Yer wab-mail address wis confirmed oan $2 at $3.',
+'emailnotauthenticated' => 'Yer wab-mail address isna yet confirmed.
+Nae wab-mail will be sent fer oni o the follaein features.',
 'noemailprefs' => "Nae email address haes been specifee'd, the follaein featurs willna wirk.",
 'emailconfirmlink' => 'Check yer e-mail address',
-'invalidemailaddress' => 'The email address canna be acceptit syne it seems tae be formattit wrang.
-Please enter a weel-formattit address or mak that field tuim.',
-'accountcreated' => 'Accoont creatit',
-'accountcreatedtext' => 'The uiser accoont for $1 haes bin creatit.',
+'invalidemailaddress' => 'The wab-mail address canna be acceptit sin it seems tae be formattit wrang.
+Please enter ae weel-formattit address or mak that field tuim.',
+'cannotchangeemail' => 'Accoont wab-mail addresses canna be chynged oan this wiki.',
+'emaildisabled' => 'This site canna send wab-mails.',
+'accountcreated' => 'Accoont cræftit',
+'accountcreatedtext' => 'The uiser accoont fer [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|tauk]]) haes been cræftit.',
 'createaccount-title' => 'Accoont makin for {{SITENAME}}',
-'createaccount-text' => 'A body ($1) makit an accoont for yer email address on {{SITENAME}} ($4) cried "$2", wi a password o "$3".
-Ye shuid log in an chynge yer password nou.
-
-Ye dinna hae tae heed this message, if this accoont wis creatit by mistak.',
+'createaccount-text' => 'Somebodie cræftit aen accoont fer yer wab-mail address oan {{SITENAME}} ($4) named "$2", wi passwaird "$3".
+Ye shid log in n chynge yer passwaird nou.
+
+Ye can ignore this message, gif this accoont wis cræftit bi mistak.',
+'usernamehasherror' => 'Uisername canna contain hash chairacters',
+'login-throttled' => "Ye'v makit ower monie recynt login attempts.
+Please wait $1 afore giein it anither gae.",
+'login-abort-generic' => 'Yer login wisna successful - Aborted',
 'loginlanguagelabel' => 'Leid: $1',
+'suspicious-userlogout' => 'Yer request tae log oot wis denied cause it luiks like it wis sent bi ae broken brouser or caching proxy.',
+'createacct-another-realname-tip' => 'Real name is aen optie.
+Gif ye chuise tae provide it, this will be uised fer giein the uiser attreebution fer their wark.',
+'pt-login' => 'Log in',
+'pt-login-button' => 'Log in',
+'pt-createaccount' => 'Mak accoont',
+'pt-userlogout' => 'Log oot',
+
+# Email sending
+'php-mail-error-unknown' => "Onken't mistak in PHP's mail() function.",
+'user-mail-no-addy' => 'Tried tae send wab-mail wiout ae wab-mail address.',
+'user-mail-no-body' => 'Tried tae send wab-mail wi ae tuim or onreasonably short body o tex.',
 
 # Change password dialog
 'changepassword' => 'Chynge password',
-'resetpass_announce' => 'Ye loggit in wi a short term e-mailed code. To be duin logging in, ye hae tae mak a new passwaird here:',
+'resetpass_announce' => 'Tae finish loggin in, ye maun set ae new passwaird.',
 'resetpass_header' => 'Chynge accoont password',
-'oldpassword' => 'Auld password',
+'oldpassword' => 'Auld passwaird',
 'newpassword' => 'New passwaird:',
-'resetpass_submit' => 'Mak passwaird an log in',
-'changepassword-success' => 'Yer passwaird chynge wis braw! Nou loggin ye in...',
+'retypenew' => 'Retype new passwaird:',
+'resetpass_submit' => 'Set passwaird n log in',
+'changepassword-success' => 'Yer passwaird chynge wis braw!',
+'changepassword-throttled' => "Ye'v makit ower monie recynt login attempts.
+Please wait $1 afore giein it anither gae.",
 'resetpass_forbidden' => 'Passwords canna be chynged',
 'resetpass-no-info' => 'Ye maun be loggit in tae access this page directly.',
 'resetpass-submit-loggedin' => 'Chynge passwaird',
 'resetpass-submit-cancel' => 'Cancel',
+'resetpass-wrong-oldpass' => 'Onvalid temporarie or current passwaird.
+Ye micht hae awreadie been successful in chyngin yer passwaird or requested ae new temporarie passwaird.',
+'resetpass-recycled' => 'Please reset yerr passwaird til sommit ither than yer current passwaird.',
+'resetpass-temp-emailed' => 'Ye loggit in wi ae temperie mailed code.
+Tae finish loggin in, ye maun set ae new passwaird here:',
+'resetpass-temp-password' => 'Temperie passwaird:',
+'resetpass-abort-generic' => 'Passwaird chynge haes been aborted bi aen extension.',
+'resetpass-expired' => 'Yer passwaird haes expired. Please set ae new passwaird tae log-in.',
+'resetpass-expired-soft' => 'Yer passwaird haes expired n needs tae be reset. Please chuise ae new passwaird nou, or clap oan "{{int:resetpass-submit-cancel}}" tae reset it later.',
+
+# Special:PasswordReset
+'passwordreset' => 'Reset passwaird',
+'passwordreset-text-one' => 'Compleate this form tae receive ae temperie passwaird via wab-mail.',
+'passwordreset-text-many' => '{{PLURAL:$1|Fill in yin o the fields tae receive ae temperie passwaird via wab-mail.}}',
+'passwordreset-legend' => 'Reset passwaird',
+'passwordreset-disabled' => 'Passwaird resets hae been disabled oan this wiki.',
+'passwordreset-emaildisabled' => 'Wab-mail features hae been disabled oan this wiki.',
+'passwordreset-username' => 'Uisername:',
+'passwordreset-capture' => 'View the resultin wab-mail?',
+'passwordreset-capture-help' => 'Gif ye check this kist, the wab-mail (wi the temperie passwaird) will be shawn til ye n be sent til the uiser ava.',
+'passwordreset-email' => 'Wab-mail address:',
+'passwordreset-emailtitle' => 'Accoont details oan {{SITENAME}}',
+'passwordreset-emailtext-ip' => "Somebodie (likely ye, fae IP address $1) requested ae reset o yer passwaird fer {{SITENAME}} ($4). The follaein uiser {{PLURAL:$3|accoont is|accoonts ar}}
+associated wi this wab-mail address:
+
+$2
+
+{{PLURAL:$3|This temperie passwaird|Thir temperie passwairds}} will expire in {{PLURAL:$5|yin day|$5 days}}.
+Ye shid log in n chuise ae new passwaird nou. Gif some ither bodie makit this request, or gif ye'v mynded yer oreeginal passwaird, n ye nae longer
+wish tae chynge it, ye can ignore this message n continue uisin yer auld passwaird.",
+'passwordreset-emailtext-user' => "Uiser $1 oan {{SITENAME}} requested ae reset o yer passwaird fer {{SITENAME}}
+($4). The follaein uiser {{PLURAL:$3|accoont is|accoonts ar}} associated wi this wab-mail address:
+
+$2
+
+{{PLURAL:$3|This temperie passwaird|Thir temperie passwairds}} will expire in {{PLURAL:$5|yin day|$5 days}}.
+Ye shid log in n chuise ae new password nou. Gif some ither bodie haes makit this request, or gif ye'v mynded yer oreeginal passwaird, n ye nae langer wish tae chynge it, ye can ignore this message n continue uisin yer auld passwaird.",
+'passwordreset-emailelement' => 'Uisername: $1
+Temperie passwaird: $2',
+'passwordreset-emailsent' => 'Ae passwaird reset wab-mail haes been sent.',
+'passwordreset-emailsent-capture' => 'Ae passwaird reset wab-mail haas been sent, this is shawn ablow.',
+'passwordreset-emailerror-capture' => 'Ae passwaird reset wab-mail wis generated, (this is shawn ablow), but sendin it til the {{GENDER:$2|uiser}} failed: $1',
+
+# Special:ChangeEmail
+'changeemail' => 'Chynge wab-mail address',
+'changeemail-header' => 'Chynge accoont wab-mail address',
+'changeemail-text' => 'Compleate this form tae chynge yer wab-mail address. Ye will need tae enter yer passwaird tae confirm this chynge.',
+'changeemail-no-info' => 'Ye maun be loggit in tae access this page directly.',
+'changeemail-oldemail' => 'Current wab-mail address:',
+'changeemail-newemail' => 'New wab-mail address:',
+'changeemail-none' => '(nane)',
+'changeemail-password' => 'Yer {{SITENAME}} passwaird:',
+'changeemail-submit' => 'Chynge wab-mail',
+'changeemail-cancel' => 'Cancel.',
+'changeemail-throttled' => "Ye'v makit ower monie recynt login attempts.
+Please wait $1 afore giein it anither gae.",
+
+# Special:ResetTokens
+'resettokens' => 'Reset tokens.',
+'resettokens-text' => 'Ye can reset tokens that permit ye access til certain private data associated wi yer accoont here.
+
+Ye shid dae it gif ye accidentally shaired theim wi somebodie or gif yer accoont haes been compromised.',
+'resettokens-no-tokens' => 'Thaur ar nae tokens tae reset.',
+'resettokens-legend' => 'Reset tokens.',
+'resettokens-tokens' => "Tokens':",
+'resettokens-token-label' => '$1 (value the nou: $2)',
+'resettokens-watchlist-token' => 'Token fer the wab feed (Atom/RSS) o [[Special:Watchlist|chynges til pages oan yer watchleet]]',
+'resettokens-done' => "Tokens' reset.",
+'resettokens-resetbutton' => 'Reset selected tokens.',
 
 # Edit page toolbar
-'bold_sample' => 'Bauld text',
-'bold_tip' => 'Bauld text',
-'italic_sample' => 'Italic text',
-'italic_tip' => 'Italic text',
+'bold_sample' => 'Baud tex',
+'bold_tip' => 'Baud tex',
+'italic_sample' => 'Italic tex',
+'italic_tip' => 'Italic tex',
 'link_sample' => 'Airtin teitle',
 'link_tip' => 'Internal airtin',
 'extlink_sample' => 'http://www.example.com airtin teitle',
-'extlink_tip' => 'Airtin tae an outby steid (mynd the http:// prefix)',
-'headline_sample' => 'Heidline text',
+'extlink_tip' => 'External link (mynd the http:// prefix)',
+'headline_sample' => 'Heidline tex',
 'headline_tip' => 'Level 2 heidline',
-'nowiki_sample' => 'Insert non-formattit text here',
+'nowiki_sample' => 'Insert non-formattit tex here',
 'nowiki_tip' => 'Ignore wiki formattin',
 'image_sample' => 'Exemplar.jpg',
 'image_tip' => 'Embeddit eimage',
@@ -466,217 +677,417 @@ Ye dinna hae tae heed this message, if this accoont wis creatit by mistak.',
 # Edit pages
 'summary' => 'Ootline:',
 'subject' => 'Subject/headline:',
-'minoredit' => 'This is a smaa edit',
+'minoredit' => 'This is ae smaa eedit',
 'watchthis' => 'Leuk ower this page',
 'savearticle' => 'Hain page',
-'preview' => 'Scance',
-'showpreview' => 'Scance ower',
+'preview' => 'Luikower',
+'showpreview' => 'Shaw luikower',
 'showlivepreview' => 'Live leuk ower',
 'showdiff' => 'Shaw chynges',
-'anoneditwarning' => "Ye arna loggit in. Yer IP address will be recordit in this page's edit history.",
-'missingsummary' => "'''Mynd:''' Ye hivna gien an edit summary. Gin ye dab on Hain again, yer edit will be haint athoot ane.",
+'anoneditwarning' => "<strong>Warnishment:</strong>Ye'r naw loggit in. Yer IP address will be recordit in this page's eedit histerie.",
+'anonpreviewwarning' => "<em>Ye'r no loggit in. Hainin will record yer IP address in this page's eedit histerie.</em>",
+'missingsummary' => '<strong>Mynd:</strong> Ye\'v naw gien aen eedit owerview. Gif ye clap oan "{{int:savearticle}}" again, yer eedit will be haint wioot ane.',
 'missingcommenttext' => 'Please enter a comment ablo.',
-'missingcommentheader' => "'''Mynd:''' Ye hivna gien a subject/heidline for this comment. Gin ye dab on Hain again, yer edit will be haint athoot ane.",
+'missingcommentheader' => '<strong>Mynd:</strong> Ye\'v na gien ae subject/heidline fer this comment.
+Gif ye clap "{{int:savearticle}}" again, yer eedit will be hained wioot yin.',
 'summary-preview' => 'Ootline leuk ower:',
 'subject-preview' => 'Subject/headline leuk ower:',
 'blockedtitle' => 'Uiser is blockit',
-'blockedtext' => '\'\'\'Yer uisername or IP address haes been blockit.\'\'\'
+'blockedtext' => '<strong>Yer uisername or IP address haes been blockit.</strong>
 
-The block was made bi $1. The raeson gien is \'\'$2\'\'.
+The block wis makit bi $1.
+The raison gieen is <em>$2</em>.
 
-* Start of block: $8
-* Expiry of block: $6
+* Stairt o block: $8
+* Expirie o block: $6
 * Intended blockee: $7
 
-Ye can contact $1 or ane o the ither [[{{MediaWiki:Grouppage-sysop}}|administrators]] tae discuss the block.
-Mynd that ye canna uise the "email this uiser" featur unless ye hae a valid email address registert in yer [[Special:Preferences|uiser preferences]] an ye hae not been blocked from using it.
-Yer IP address is $3, and the block ID is #$5. Please include this address in onie queries ye mak.',
-'autoblockedtext' => 'Sairy, but yer IP address haes been blockit by the seestem acause it wis uised by an ither uiser, that wis blockit by $1.
-The grunds for this were:
+Ye can contact $1 or anither [[{{MediaWiki:Grouppage-sysop}}|admeenistrater]] tae discuss the block.
+Ye canna uise the "wab-mail this uiser" feature onless ae valid wab-mail address is speceefied in yer [[Special:Preferences|accoont preferences]] n ye\'v naw been blockit fae uisin it.
+Yer current IP address is $3, n the block ID is #$5.
+Please incluide aw the abuin details in onie speirins that ye mak.',
+'autoblockedtext' => 'Yer IP address haes been autæmateeclie blockit cause it wis uised bi anither uiser that wis blockit bi $1.
+The raison gien is:
 
-:\'\'$2\'\'
+:<em>$2</em>
 
 * Stairt o block: $8
-* End o block: $6
+* Expirie o block: $6
+* Intended blockee: $7
 
-Ye may contact $1 or ane o the ither
-[[{{MediaWiki:Grouppage-sysop}}|sysops]] tae argie the block.
+Ye can contact $1 or yin o the ither [[{{MediaWiki:Grouppage-sysop}}|admeenistraters]] tae discuss the block.
 
-Please jot that ye cannae uise the "e-mail this uiser" featur unless ye hae a habile e-mail address
-registerit in yer [[Special:Preferences|uiser preferences]] an ye hinna been blockit frae uisin it.
+Mynd that ye canna uise the "wab-mail this uiser" feature onless ye hae ae valid wab-mail address registered in yer [[Special:Preferences|uiser preeferances]] n ye\'v na been blockit fae uisin it.
 
-Yer block ID is $5. Please include this ID in ony argies ye mak.',
+Yer current IP address is $3, n the block ID is #$5.
+Please incluid aw abuin details in onie speirins that ye mak.',
 'blockednoreason' => 'nae grunds put',
-'whitelistedittext' => 'Ye hae tae $1 tae edit pages.',
-'confirmedittext' => 'Ye maun confirm yer e-mail address afore editin pages. Please set an validate yer e-mail address throu yer [[Special:Preferences|uiser settins]].',
-'nosuchsectiontitle' => 'There isnae a section wi that teetle',
-'nosuchsectiontext' => 'Yer tryin tae edit a section that isnae there.',
+'whitelistedittext' => 'Pleas $1 tae eedit pages.',
+'confirmedittext' => 'Ye maun confirm yer wab-mail address afore eeditin pages. Please set n validate yer wab-mail address throogh yer [[Special:Preferences|uiser settins]].',
+'nosuchsectiontitle' => 'Canna find section',
+'nosuchsectiontext' => 'Ye tried tae eedit ae section that disna exeest.
+It micht hae been muived or delytit while ye were luikin at the page.',
 'loginreqtitle' => 'Login Requirit!',
 'loginreqlink' => 'log in',
-'loginreqpagetext' => 'Ye maun $1 tae view ither pages.',
+'loginreqpagetext' => 'Please $1 tae see ither pages.',
 'accmailtitle' => 'Passwaird sent.',
-'accmailtext' => "The Password for '$1' haes been sent tae $2.",
+'accmailtext' => 'Ae randomly generated passwaird fer [[User talk:$1|$1]] haes been sent til $2. It can be chynged oan the <em>[[Special:ChangePassword|chynge passwaird]]</em> page upo loggin in.',
 'newarticle' => '(New)',
-'newarticletext' => "Ye'v follaed an airtin til a page that disna exist yet. Tae create the page, stert typin in the box ablo (see the [[{{MediaWiki:Helppage}}|help page]] for mair info). Gin ye'r here by mistak, juist dab yer brouser's '''back''' button.",
-'anontalkpagetext' => "----''This is the collogue page for a nameless uiser that haesna made an accoont yet or that disna uise it. We syne hiv tae uise the numerical IP address tae identifee thaim. Sic an IP address can be shared bi a wheen o uisers. Gin you ar a nameless uiser an feel that irrelevant comments haes been directit at ye, please [[Special:UserLogin|mak an accoont or log in]] tae evyte futur confusion wi ither nameless uisers.''",
-'noarticletext' => 'The\'r nae text on this page the nou. 
-Ye can [[Special:Search/{{PAGENAME}}|rake for this page teitle]] in ither pages,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rake th\' related logs],
- or [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page].</span>',
-'noarticletext-nopermission' => 'The\'r nae text on this page the nou. 
-Ye ken [[Special:Search/{{PAGENAME}}|rake for this page teitle]] in ither pages,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rake th\' related logs].',
-'userpage-userdoesnotexist' => 'Uiser accoont "<nowiki>$1</nowiki>" hasnae been registerit. Please check gin ye wint tae mak or edit this page.',
-'clearyourcache' => "'''Tak tent:''' Efter hainin, ye micht hae tae bypass yer brouser's cache for tae see the chynges. '''Mozilla / Firefox / Safari:''' haud doun ''Shift'' while dabbin on ''Reload'', or press ''Ctrl-Shift-R'' (''Cmd-Shift-R'' on Apple Mac); '''IE:''' haud doun ''Ctrl'' while dabbin on ''Refresh'', or press ''Ctrl-F5''; '''Konqueror:''' juist dab on the ''Reload'' button, or press ''F5''; '''Opera''' users micht hae tae haillie dicht thair cache in ''Tools&rarr;Preferences''.",
-'usercssyoucanpreview' => "'''Tip:''' Uise the 'Show preview' button tae proof yer new CSS afore savin.",
-'userjsyoucanpreview' => "'''Tip:''' Uise the 'Show preview' button tae proof yer new JS afore savin.",
-'usercsspreview' => "'''Mynd that ye'r juist previewin yer uiser CSS, it haesna yet been hained!'''",
+'newarticletext' => "Ye'v follaed ae link til ae page that disna exeest yet. Tae cræft the page, stairt typin in the kist ablo (see the [[{{MediaWiki:Helppage}}|heelp page]] fer mair info). Gif ye'r here bi mistak, jist clap yer brouser's <strong>back</strong> button.",
+'anontalkpagetext' => "----
+<em>This is the discussion page fer aen anonymoos uiser that's naw cræftit aen accoont yet, or that disna uise it.</em>
+We maun therefore uise the numerical IP address tae identifie him/her.
+Sic aen IP address can be shaired bi several uisers.
+Gif ye'r aen anonymos uiser n feel that onreelavant comments hae been directed at ye, please [[Special:UserLogin/signup|cræft aen accoont]] or [[Special:UserLogin|log in]] tae avoid futur confusion wi ither anonymoos uisers.",
+'noarticletext' => 'Thaur\'s naw tex oan this page the nou. 
+Ye can [[Special:Search/{{PAGENAME}}|rake fer this page teitle]] in ither pages,
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rake the related logs],
+ or [{{fullurl:{{FULLPAGENAME}}|action=edit}} eidit this page].</span>',
+'noarticletext-nopermission' => 'There isna oni tex in this page the nou.
+Ye can [[Special:Search/{{PAGENAME}}|rake fer this page title]] in ither pages, or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rake the relatit logs]</span>, but ye dina hae permeession tae mak this page.',
+'missing-revision' => 'The reveesion #$1 o the page named "{{PAGENAME}}" disna exeest.
+
+This is uissuallie caused bi follaein aen ootdated histerie link til ae page that haes been delytit.
+Details can be foond in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} delytion log].',
+'userpage-userdoesnotexist' => 'Uiser accoont "<nowiki>$1</nowiki>" hasnae been registerit. Please check gin ye wint tae mak or eidit this page.',
+'userpage-userdoesnotexist-view' => 'Uiser accoont "$1" isna registered.',
+'blocked-notice-logextract' => 'This uiser is nou blockit.
+The laitest block log entrie is gien ablo fer referance:',
+'clearyourcache' => "<strong>Tak tent:</strong> Efter hainin, ye micht hae tae bipass yer brouser's cache tae see the chynges.
+* <strong>Firefox / Safari:</strong> Haud <em>Shift</em> while clapin <em>Relaid</em>, or press either <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> oan ae Mac)
+* <strong>Google Chrome:</strong> Press <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> on a Mac)
+* <strong>Internet Explorer:</strong> Haud <em>Ctrl</em> while clapin <em>Refresh</em>, or press <em>Ctrl-F5</em>
+* <strong>Opera:</strong> Clear the cache in <em>Tuils → Preferences</em>",
+'usercssyoucanpreview' => '<strong>Tip:</strong> Uise the "{{int:showpreview}}" button tae test yer new CSS afore hainin.',
+'userjsyoucanpreview' => '<strong>Tip:</strong> Uise the "{{int:showpreview}}" button tae test yer new JavaScript afore hainin.',
+'usercsspreview' => "<strong>Mynd that ye'r yinly previewing yer uiser CSS.
+It haesna been hained yet!</strong>",
 'userjspreview' => "'''Mynd that ye're juist testin/previewing yer uiser JavaScript; it haesna been hained yet!'''",
-'userinvalidcssjstitle' => "'''Warnin:''' There isnae a skin \"\$1\". Mynd that yer ain .css an .js pages uise a lowercase teetle, e.g. {{ns:user}}:Foo/vector.css instead o {{ns:user}}:Foo/Vector.css.",
+'sitecsspreview' => "<strong>Mynd that ye'r yinly previewing this CSS.
+It's no been hained yet!</strong>",
+'sitejspreview' => "<strong>Mynd that ye'r yinly previewing this JavaScript code.
+It's no been hained yet!</strong>",
+'userinvalidcssjstitle' => '<strong>Warnishment</strong> There isnae ae skin "$1". Mynd that yer ain .css an .js pages uise a lowercase teetle, e.g. {{ns:user}}:Foo/vector.css instead o {{ns:user}}:Foo/Vector.css.',
 'updated' => '(Updatit)',
 'note' => "'''Mynd:'''",
-'previewnote' => "'''Mynd that this is juist a scance-ower, an haesna been hained yet!'''",
-'previewconflict' => 'This scance reflects the text in the upper text editin area like it will kythe gin ye chuise tae save.',
-'session_fail_preview' => "'''Sairy! We culdnae process yer edit acause o a loss o term data.
-Please try again. Gin it disnae wairk still, try loggin oot an loggin in again.'''",
-'session_fail_preview_html' => "'''Sairy! We culdnae process yer edit acause o a loss o term data.'''
-
-''Acause this wiki haes raw HTML habile, the leuk ower is hidden tae hinder JavaScript attacks.''
-
-'''Gin this is a proper edit try, please try again. Gin it disnae wairk still, try loggin oot an loggin back in.'''",
-'token_suffix_mismatch' => "'''Yer edit haes been rejectit acause yer client made a richt mess o the punctuation characters
-in the edit token. The edit haes been rejectit tae hinder corruption o the page text.
-This whiles happens when ye are uisin a bruken web-based anonymous proxy service.'''",
+'previewnote' => '<strong>Mynd that this is yinly ae scænce-ower.</strong>
+Yer chynges hae no been hained yet!',
+'continue-editing' => 'Gae til eiditing area',
+'previewconflict' => 'This luikower reflects the tex in the upper tex eeditin airt like it will kith gif ye chuise tae hain.',
+'session_fail_preview' => "'''Sairy! We culdnae process yer eidit acause o ae loss o term data.'''
+Please gie it anither gae. Gin it disnae wairk still, gie [[Special:UserLogout|loggin oot]] n loggin back in again ae gae.",
+'session_fail_preview_html' => '<strong>Sairrie! We coudna process yer eedit cause o ae loss o session data.</strong>
+
+<em>Cause {{SITENAME}} haes raw HTML enabled, the owerluik is skaukt aes ae precaution again JavaScript attacks.</em>
+
+<strong>Gif this is ae legeetimate eedit attempt, please gei it anither gae.</strong>
+Gif it still disna wairk, try [[Special:UserLogout|loggin oot]] n loggin back in.',
+'token_suffix_mismatch' => "<strong>Yer eedit haes been rejectit cause yer client makit ae richt mess o the punctuation chairacters in the eedit token.</strong>
+The eedit haes been rejectit tae hinder rot o the page tex.
+This whiles happens when ye'r uisin ae broken wab-based anonymoos proxie service.",
+'edit_form_incomplete' => '<strong>Some pairts o the eedit form didna reach the server; dooble-check that yer edits ar intact n gie it anither gae.</strong>',
 'editing' => 'Editin $1',
+'creating' => 'Makin $1',
 'editingsection' => 'Editin $1 (section)',
-'editingcomment' => 'Editin $1 (comment)',
-'editconflict' => 'Edit conflict: $1',
-'explainconflict' => "Some ither body haes chynged this page syne ye stertit editin it.
-The upper text area hauds the page text as it currently exists.
-Yer chynges is shawn in the lower text area.
-Ye'll hae tae merge yer chynges intae the existin text.
-'''Juist''' the text in the upper text area will be hained whan ye press \"{{int:savearticle}}\".",
-'yourtext' => 'Yer text',
+'editingcomment' => 'Editin $1 (new section)',
+'editconflict' => 'Eidit conflict: $1',
+'explainconflict' => 'Some ither body haes chynged this page syne ye stertit eiditin it.
+The upper tex area hauds the page tex aes it currentlie exeests.
+Yer chynges is shawn in the lower tex area.
+Ye\'ll hae tae merge yer chynges intil the exeestin tex.
+<strong>Juist</strong> the tex in the upper tex area will be hained whan ye press "{{int:savearticle}}".',
+'yourtext' => 'Yer tex',
 'storedversion' => 'Storit version',
-'nonunicodebrowser' => "'''WARNIN: Yer brouser isna unicode compliant.  The'r a wirkaroond tae allou ye tae sauflie edit airticles: non-ASCII characters will kythe in the edit box as hexadecimal codes.'''",
-'editingold' => "'''WARNIN: Ye'r editin an oot-o-date reveision o this page. Gin ye hain it, onie chynges made syne this reveision will be lost.'''",
+'nonunicodebrowser' => '<strong>Warnishment: Yer brouser isna unicode compliant.</strong> Ae wairkaroond is in place tae permit ye tae sauflie eedit airticles: non-ASCII chairacters will kythe in the eedit kist aes hexadecimal codes.',
+'editingold' => "<strong>Warnishment:</strong> Ye'r eiditin aen oot-o-date reveesion o this page. Gin ye hain it, onie chynges makit sin this reveesion will be lost.",
 'yourdiff' => 'Differs',
-'copyrightwarning' => "Please mynd that aa contreibutions tae {{SITENAME}} is conseidert tae be released unner the $2 (see $1 for details). Gin ye dinna want yer writin tae be editit athoot mercy an redistribute at will, than dinna submit it here.<br /> Forbye thon, ye'r promisin us that ye wrat this yersel, or copied it frae a public domain or siclike free resoorce. '''DINNA SUBMIT COPYRICHTIT WARK ATHOOT PERMEISSION!'''",
-'copyrightwarning2' => "Please mynd that aa contreibutions tae {{SITENAME}} micht be editit, chynged, or remuved bi ither contreibutors.
-Gin ye dinna want yer writin tae be editit athoot mercy and redistribute at will, than dinna submit it here.<br />
-YYe'r promisin us forbye that ye wrat this yersel, or copied it frae a
-public domain or siclike free resoorce (see $1 for details).
-'''DINNA SUBMIT COPYRICHTIT WARK ATHOOT PERMEISSION!'''",
-'longpageerror' => "'''ERROR: The text ye hae submitted is $1 kilobytes
-lang, an that's langer than the maximum of $2 kilobytes. It canna be hained.'''",
-'readonlywarning' => "WARNIN: The database haes been lockit for maintenance, sae ye'll no can hain yer edits richt nou. Ye micht wish tae cut-n-paste the text intil a text file an hain it for later.",
-'protectedpagewarning' => "'''WARNIN: This page haes been lockit sae that juist uisers wi administrator privileges can edit it.'''",
-'semiprotectedpagewarning' => "'''Warnin:''' This page haes been lockit sae that only registerit uisers can edit it.",
-'cascadeprotectedwarning' => "'''Warnin:''' This page haes been lockit sae that only uisers wi sysop richts can edit it, acause it is includit in the followin cascade-protectit {{PLURAL:$1|page|pages}}:",
-'templatesused' => '{{PLURAL:$1|Template|Templates}} used on this page:',
-'templatesusedpreview' => 'Templates uised in this scance ower:',
-'templatesusedsection' => 'Templates uised in this section:',
+'copyrightwarning' => "Please mynd that aw contreebutions til {{SITENAME}} is conseedert tae be released unner the $2 (see $1 for details). Gif ye dinna want yer writin tae be eeditit wioot mercie n redistreebuted at will, than dinna haun it it here.<br /> Forbye thon, ye'r promisin us that ye wrat this yersel, or copied it fae ae publeec domain or siclike free resoorce. <strong>Dinna haun in copierichtit wark wioot permeession!</strong>",
+'copyrightwarning2' => "Please mynd that aa contreebutions til {{SITENAME}} micht be eeditit, chynged, or remuived bi ither contreebuters.
+Gin ye dinna want yer writin tae be eeditit wioot mercie n redistreebuted at will, than dinna haun it in here.<br />
+Ye'r promisin us forbye that ye wrat this yersel, or copied it fae ae
+publeec domain or siclike free resoorce (see $1 fer details).
+<strong>Dinna haun in copierichtit wark wioot permeession!</strong>",
+'longpageerror' => "<strong>Mistak: The tex ye'v submitted is {{PLURAL:$1|yin kilobyte|$1 kilobytes}} lang, n this is langer than the maist muckle o {{PLURAL:$2|yin kilobyte|$2 kilobytes}}.</strong>
+It canna be hained.",
+'readonlywarning' => "<strong>Warnishment: The database haes been lockit fer maintenance, sae ye'll no be able tae hain yer eedits richt nou.</strong>
+Ye micht wish tae copie n paste yer tex intil ae tex file n hain it fer later.
+
+The admeenistræter that lockit it affered this explanation: $1",
+'protectedpagewarning' => '<strong>Warnishment: This page haes been protectit sae that yinlie uisers wi admeenistrater preevileges can eedit it.</strong>
+The latest log entrie is gien ablo fer referance:',
+'semiprotectedpagewarning' => '<strong>Mynd:</strong> This page haes been protectit sae that yinlie registered uisers can eedit it.
+The latest log entrie is gien ablo fer referance:',
+'cascadeprotectedwarning' => '<strong>Warnishment:</strong> This page haes been lockit sae that yinlie uisers wi admeenisræter richts can eidit it, acause it is inclædit in the follaein cascade-protectit {{PLURAL:$1|page|pages}}:',
+'titleprotectedwarning' => '<strong>Warnishment: This page haes been protectit sae that [[Special:ListGroupRights|speceefic richts]] ar needed tae cræft it.</strong>
+The laitest log entrie is gien ablo fer referance:',
+'templatesused' => '{{PLURAL:$1|Template|Templates}} uised oan this page:',
+'templatesusedpreview' => '{{PLURAL:$1|Template|Templates}} uised in this scænce-ower:',
+'templatesusedsection' => '{{PLURAL:$1|Template|Templates}} uised in this section:',
 'template-protected' => '(protectit)',
 'template-semiprotected' => '(semi-protectit)',
-'hiddencategories' => 'This page is a member of {{PLURAL:$1|1 hidden category|$1 hidden categories}}:',
-'nocreatetext' => 'This site haes restrictit the ability to mak new pages.
-Ye can go back an eik tae an existing page, or [[Special:UserLogin|log in or mak an accoont]].',
-'nocreate-loggedin' => 'Ye dinnae hae the richts tae mak new pages on this wiki.',
-'permissionserrors' => 'Richts Errors',
+'hiddencategories' => "This page is ae member o {{PLURAL:$1|1 skauk't categerie|$1 skauk't categeries}}:",
+'nocreatetext' => '{{SITENAME}} haes restricted the abeelitie tae cræft new pages.
+Ye can gang back n eedit aen exestin page, or [[Special:UserLogin|log in or cræft aen accoont]].',
+'nocreate-loggedin' => 'Ye dinnae hae the richts tae mak new pages.',
+'sectioneditnotsupported-title' => 'Section eiditin isna supported',
+'sectioneditnotsupported-text' => 'Section eiditing isna supported in this page.',
+'permissionserrors' => 'Permission mistak',
 'permissionserrorstext' => 'Ye dinnae hae the richts tae dae that, acause o the followin {{PLURAL:$1|grund|grunds}}:',
-'permissionserrorstext-withaction' => 'Ye dinna hae the richts tae $2, for the follaein {{PLURAL:$1|reason|reasons}}:',
-'recreate-moveddeleted-warn' => "'''Warnin: Ye are makkin a page that haes been deletit.'''
-
-Ye shuld check that it is guid tae keep editin this page.
-The deletion and flit log for this page is providit here:",
-'moveddeleted-notice' => 'This page haes bin deletit. 
-The deletion and flit log fur the page are provided below fur reference.',
+'permissionserrorstext-withaction' => 'Ye dinna hae the richts tae $2, fer the follaein {{PLURAL:$1|raison|raisons}}:',
+'recreate-moveddeleted-warn' => "<strong>Warnishment: Ye'r recræftin ae page that haes been delytit.</strong>
+
+Ye shid check that it is guid tae keep eeditin this page.
+The delytion n muiv log fer this page is providit here fer conveeniance:",
+'moveddeleted-notice' => 'This page haes been delytit. 
+The delytion n muiv log fer the page ar gien ablo fer referance.',
+'log-fulllog' => 'View ful log',
+'edit-hook-aborted' => 'Eedit abortit bi huik.
+It gae naw explanation.',
+'edit-gone-missing' => 'Coudna update the page.
+It appears tae hae been delytit.',
+'edit-conflict' => 'Eedit confleect.',
+'edit-no-change' => 'Yer eedit wis ignored cause nae chynge wis makit til the tex.',
+'postedit-confirmation' => 'Yer eedit wis hained.',
+'edit-already-exists' => 'Coudna mak ae new page.
+It awreadie exists.',
+'defaultmessagetext' => 'Defaut message tex',
+'content-failed-to-parse' => 'Failed tae parse $2 content fer $1 model: $3',
+'invalid-content-data' => 'Onvalid content data',
+'content-not-allowed-here' => '"$1" content isna permited oan the page [[$2]]',
+'editwarning-warning' => 'Leain this page micht cause ye tae lose oni chynges that ye\'v makit.
+Gif ye\'r loggit in, ye can disable this warnishment in the "{{int:prefs-editing}}" section o yer preferences.',
+'editpage-notsupportedcontentformat-title' => 'Content format isna supported',
+'editpage-notsupportedcontentformat-text' => 'The content format $1 isna supported bi the content model $2.',
+
+# Content models
+'content-model-wikitext' => 'wikitex',
+'content-model-text' => 'plain tex',
 
 # Parser/template warnings
-'post-expand-template-inclusion-warning' => "'''Wairnin:''' Template include size is tae lairge. 
-Some templates wull nae be included.",
+'expensive-parserfunction-warning' => '<strong>Warnishment:</strong> This page contains ower moni expensive parser function caws.
+
+It shid hae less than $2 {{PLURAL:$2|caw|caws}}, thaur {{PLURAL:$1|is nou $1 caw|ar noo $1 caws}}.',
+'expensive-parserfunction-category' => 'Pages wi ower moni expensive parser function caws',
+'post-expand-template-inclusion-warning' => '<strong>Warnishment Template incluid size is owermuckle. 
+Some templates will na be incluidit.',
 'post-expand-template-inclusion-category' => 'Pages whaur template include size is exceeded',
-'post-expand-template-argument-warning' => 'Tak tent: This page hauds at least the ae template argument that haes an ower muckle expansion size.
-Thae arguments hae been left oot.',
+'post-expand-template-argument-warning' => '<strong>Warnishment:</strong> This page hauds at least the ae template argument that haes aen ower muckle expansion size.
+Thir arguments hae been left oot.',
 'post-expand-template-argument-category' => 'Pages containing omitted template arguments',
+'parser-template-loop-warning' => 'Template luip detected: [[$1]]',
+'parser-template-recursion-depth-warning' => 'Template recursion depth limit owershote ($1)',
+'language-converter-depth-warning' => 'Leid converter depth limit owershote ($1)',
+'node-count-exceeded-category' => 'Pages whaur node-coont is owershote',
+'node-count-exceeded-warning' => 'Page owershote the node-coont',
+'expansion-depth-exceeded-category' => 'Pages whaur expansion depth is owershote',
+'expansion-depth-exceeded-warning' => 'Page owershote the expansion depth',
+'parser-unstrip-loop-warning' => 'Unstrip luip detected',
+'parser-unstrip-recursion-limit' => 'Unstrip recursion limit owershote ($1)',
+'converter-manual-rule-error' => 'mistak detected in manual leid conversion rule',
 
 # "Undo" feature
-'undo-success' => 'The edit can be undone. Please check the chynges albo tae check that this is whit ye wint tae dae, an then hain the chynges albo tae be duin undooin the edit.',
+'undo-success' => 'The eidit can be ondun. Please check the chynges albo tae check that this is whit ye wint tae dae, n than hain the chynges albo tae be duin ondaein the eidit.',
 'undo-failure' => 'The edit culdnae be undone acause o conflictin edits inatween.',
-'undo-summary' => 'Undo reveision $1 by [[Special:Contributions/$2|$2]] ([[User talk:$2|Collogue]])',
+'undo-norev' => 'The eedit coudna be ondun cause it disna exeest or wis delytit.',
+'undo-nochange' => 'The edit appears tae hae awready been ondone.',
+'undo-summary' => 'Ondae reveesion $1 bi [[Special:Contributions/$2|$2]] ([[User talk:$2|Tauk]])',
+'undo-summary-username-hidden' => "Ondae reveesion $1 bi ae skauk't uiser",
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Canna mak accoont',
-'cantcreateaccount-text' => "Accoont makkin frae this IP address ('''$1''') haes been blockit by [[User:$3|$3]].
+'cantcreateaccount-text' => "Accoont cræftin fae this IP address ('''$1''') haes been blockit bi [[User:$3|$3]].
 
-The grund for this, given by $3 is ''$2''",
+The raison fer this, gien bi $3 is ''$2''",
+'cantcreateaccount-range-text' => "Accoont cræftin fae IP addresses in the range '''$1''', that inclædes yer IP address ('''$4'''), haes been blockit bi [[User:$3|$3]].
+
+The raison gien bi $3 is ''$2''",
 
 # History pages
-'viewpagelogs' => 'Leuk at logs for this page',
-'nohistory' => "The'r nae edit history for this page.",
-'currentrev' => 'Current reveision',
-'currentrev-asof' => 'Latest revision as of $1',
-'revisionasof' => 'Reveision as o $1',
-'revision-info' => 'Revision as o $1 by $2',
-'previousrevision' => '← Aulder reveision',
-'nextrevision' => 'Newer reveision →',
-'currentrevisionlink' => 'see current reveision',
+'viewpagelogs' => 'Leuk at logs fer this page',
+'nohistory' => "Thaur's nae eedit histerie fer this page.",
+'currentrev' => 'Reveesion the nou',
+'currentrev-asof' => 'Latest reveesion aes o $1',
+'revisionasof' => 'Reveesion aes o $1',
+'revision-info' => 'Reveesion aes o $1 bi $2',
+'previousrevision' => '← Aulder reveesion',
+'nextrevision' => 'Newer reveesion →',
+'currentrevisionlink' => 'Latest reveesion',
 'cur' => 'nou',
 'next' => 'neist',
 'last' => 'hind',
 'page_first' => 'first',
 'page_last' => 'hindermaist',
-'histlegend' => 'Diff selection: mairk the radio boxes o the versions tae compare an press enter or the button at the bottom.<br /> Legend: (cur) = difference frae current version, (last) = difference frae foregaun version, s = smaa edit.',
-'history-fieldset-title' => 'Browse history',
-'history-show-deleted' => 'Deletit only',
-'histfirst' => 'Foremaist',
-'histlast' => 'Hindermaist',
+'histlegend' => 'Diff selection: Maurk the radio kists o the reveesions tae compare n hit enter or the button at the bottom.<br />
+Legend: <strong>({{int:cur}})</strong> = differance wi laitest reveesion, <strong>({{int:last}})</strong> = differance wi preceedin reveesion, <strong>{{int:minoreditletter}}</strong> = smaa eidit.',
+'history-fieldset-title' => 'Brouse histerie',
+'history-show-deleted' => 'Delytit yinlie',
+'histfirst' => 'auldest',
+'histlast' => 'newest',
 'historysize' => '({{PLURAL:$1|1 byte|$1 bytes}})',
 'historyempty' => '(empie)',
 
 # Revision feed
-'history-feed-title' => 'Revision history',
-'history-feed-description' => 'Revision history for this page on the wiki',
+'history-feed-title' => 'Reveesion histerie',
+'history-feed-description' => 'Reveesion histerie fer this page oan the wiki',
 'history-feed-item-nocomment' => '$1 at $2',
-'history-feed-empty' => 'The requestit page disnae exist.
-It micht hae been deletit frae the wiki, or the name micht hae been chynged.
-Try [[Special:Search|rakin on the wiki]] for new pages ye micht be interestit in.',
+'history-feed-empty' => 'The requestit page disnae exeest.
+It micht hae been delytit fae the wiki, or the name micht hae been chynged.
+Try [[Special:Search|rakin oan the wiki]] fer new pages ye micht be interestit in.',
 
 # Revision deletion
-'rev-deleted-comment' => '(jottin removit)',
+'rev-deleted-comment' => '(eidit summarie remuived)',
 'rev-deleted-user' => '(uisername removit)',
-'rev-deleted-event' => '(entry removit)',
-'rev-deleted-text-permission' => 'This page revision haes been removit frae the public archives.
-There micht be parteeculars in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} deletion log].',
-'rev-deleted-text-view' => 'This page revision haes been removit frae the public archives.
-Acause yer an admeenistrator on this site, ye can leuk at it;
-there micht be parteeculars in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} deletion log].',
-'rev-delundel' => 'shaw/scug',
-'revisiondelete' => 'Delete/undelete revisions',
-'revdelete-nooldid-title' => 'Nae target revision',
-'revdelete-radio-set' => 'Yea',
-'revdelete-radio-unset' => 'Nae',
-'revdel-restore' => 'change visibility',
-'pagehist' => 'Page history',
+'rev-deleted-event' => '(log action remuived)',
+'rev-deleted-user-contribs' => "[uisername or IP address remuived - eidit skauk't fae contreebutions]",
+'rev-deleted-text-permission' => 'This page reveesion haes been <strong>delytit</strong>.
+Details can be foond in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} delytion log].',
+'rev-deleted-text-unhide' => 'This page reveesion haes been <strong>delytit</strong>.
+Details can be foond in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} delytion log].
+Ye can still [$1 view this reveesion] gif ye wish tae proceed.',
+'rev-suppressed-text-unhide' => 'This page reveesion haes been <strong>suppressed</strong>.
+Details can be foond in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].
+Ye can still [$1 view this reveesion] gif ye wish tae proceed.',
+'rev-deleted-text-view' => 'This page reveesion haes been <strong>delytit</strong>.
+Ye can view it; details can be foond in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} delytion log].',
+'rev-suppressed-text-view' => 'This page reveesion haes been <strong>suppressed</strong>.
+Ye can view it; details can be foond in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].',
+'rev-deleted-no-diff' => 'Ye canna view this diff cause yin o the reveesions haes been <strong>delytit</strong>.
+Details can be foond in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} delytion log].',
+'rev-suppressed-no-diff' => 'Ye cannae see this diff cause yin o the reveesions haes been <strong>delytit</strong>.',
+'rev-deleted-unhide-diff' => 'Yin o the reveesions o this diff haes been <strong>delytit</strong>.
+Details can be foond in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} delytion log].
+Ye can still [$1 view this diff] gif ye wish tae proceed.',
+'rev-suppressed-unhide-diff' => 'Yin o the reveesions o this diff haes been <strong>suppressed</strong>.
+Details can be foond in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].
+Ye can still [$1 view this diff] gif ye wish tee proceed.',
+'rev-deleted-diff-view' => "Ane o the reveesions o this diff haes been '''delytit'''.
+Ye can see this diff; details can be foond in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} delytion log].",
+'rev-suppressed-diff-view' => 'Yin o the reveesions o this diff haes been <strong>suppressed</strong>.
+Ye can view this diff; details can be foond in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].',
+'rev-delundel' => 'chynge veesibilitie',
+'rev-showdeleted' => 'shaw',
+'revisiondelete' => 'Delyte/ondelyte reveesions',
+'revdelete-nooldid-title' => 'Onvalid target reveesion',
+'revdelete-nooldid-text' => "Aither ye'v naw speceefied ae tairget reveesion(s) tae perform this function, the speceefied reveesion disna exeest, or ye'r attemptin tae skauk the Nou reveesion.",
+'revdelete-no-file' => 'The file speceefied disna exeest.',
+'revdelete-show-file-confirm' => 'Ar ye sair ye wish tae see ae delytit reveesion o the file "<nowiki>$1</nowiki>" fae $2 at $3?',
+'revdelete-show-file-submit' => 'Ai',
+'revdelete-selected' => '<strong>{{PLURAL:$2|Selected reveesion|Selected reveesions}} o [[:$1]]:</strong>',
+'logdelete-selected' => "'''{{PLURAL:$1|Selectit log event|Selectit log events}}:'''",
+'revdelete-text-text' => 'Delytit reveesions will still kith in the page histerie, bit pairts o thair content will be onaccessible til the publeec.',
+'revdelete-text-file' => 'Delytit file versions will still kith in the file histerie, bit pairts o thair content will be onaccessible til the publeec.',
+'logdelete-text' => 'Delytit log events will still kith in the logs, bit pairts o thair content will be onaccessible til the publeec.',
+'revdelete-text-others' => 'Ither admeenistraters oan {{SITENAME}} will still be able tae access the skaukt content n can ondelyte it again throoch this same interface, onless addeetional restreections ar set.',
+'revdelete-confirm' => "Please confirm that ye'r ettlin tae dae this, that ye unnerstaunn the consequences, n that ye'r daein this in accordance wi [[{{MediaWiki:Policy-url}}|the policie]].",
+'revdelete-suppress-text' => 'Suppression shid <strong>yinly</strong> be uised fer the follaein cases:
+* poteentiallie libeloos information
+* galus personal information
+*: <em>hame addresses n telephane nummers, national ideentifeecation nummers, etc.</em>',
+'revdelete-legend' => 'Set visibeelitie restreections',
+'revdelete-hide-text' => 'Reveesion tex',
+'revdelete-hide-image' => 'Skauk file content.',
+'revdelete-hide-name' => 'Skauk aiction n tairget',
+'revdelete-hide-comment' => 'Eidit summarie',
+'revdelete-hide-user' => "Eiditer's uisername/IP address",
+'revdelete-hide-restricted' => 'Suppress data fae admeenistraters aes weel aes ithers',
+'revdelete-radio-same' => '(dinna chynge)',
+'revdelete-radio-set' => "Skauk't",
+'revdelete-radio-unset' => 'Veesible',
+'revdelete-suppress' => 'Suppress data fae admeenistraters aes weel aes ithers',
+'revdelete-unsuppress' => 'Remuiv restreections oan restored reveesions',
+'revdelete-log' => 'Raison:',
+'revdelete-submit' => 'Applie til selected {{PLURAL:$1|reveesion|reveesions}}',
+'revdelete-success' => '<strong>Reveesion veesibeelitie successfully updated.</strong>',
+'revdelete-failure' => '<strong>Reveesion veesibeelitie coudna be updated:</strong>
+$1',
+'logdelete-success' => '<strong>Log veesibeelitie successfully set.</strong>',
+'logdelete-failure' => '<strong>Log veesibddlitie coudna be set:</strong>
+$1',
+'revdel-restore' => 'chynge veesibeelitie',
+'pagehist' => 'Page histerie',
+'deletedhist' => 'Delytit histerie',
+'revdelete-hide-current' => "Mistak skaukin the eitem dated $2, $1: This is the current reveesion.
+It cannna be skauk't.",
+'revdelete-show-no-access' => 'Mistak shawin the eitem dated $2, $1: This eitem haes been maurked "restreected".
+Ye dinna hae access til it.',
+'revdelete-modify-no-access' => 'Mistak modifiein the eitem dated $2, $1: This eitem haes been maurked "restreected".
+Ye dinna hae access til it.',
+'revdelete-modify-missing' => 'Mistak modifiein item ID $1: It is missing fae the database!',
+'revdelete-no-change' => '<strong>Warnishment:</strong> The eetem dated $2, $1 awreadie haed the requested veesibeelitie settins.',
+'revdelete-concurrent-change' => "Mistak modifiein the eitem dated $2, $1: Its status appears tae'v been chynged bi some ither bodie while ye attempted tae modifie it.
+Please check the logs.",
+'revdelete-only-restricted' => 'Mistak skaukin the eetem dated $2, $1: Ye canna suppress eetems fae sicht bi admeenistraters wioot selectin yin o the ither veesibeelitie opties ava.',
+'revdelete-reason-dropdown' => '*Commyn delete raisons
+** Copiericht violation
+** Onappropriate comment or personal information
+** Onappropriate username
+** Potentially libelous information',
+'revdelete-otherreason' => 'Ither/addeetional raison:',
+'revdelete-reasonotherlist' => 'Ither raison',
+'revdelete-edit-reasonlist' => 'Eidit delyte raisons',
+'revdelete-offender' => 'Reveesion author:',
+
+# Suppression log
+'suppressionlog' => 'Suppreession log',
+'suppressionlogtext' => "Ablo is ae leet o delytions n blocks involvin content skauk't fae admeenistraters.
+See the [[Special:BlockList|block leet]] fer the leet o currentlie operational bans n blocks.",
 
 # History merging
+'mergehistory' => 'Merge page histeries',
+'mergehistory-header' => 'This page lets ye merge reveesions o the histerie o yin source page intil ae newer page.
+Mak sair that this chynge will maintain historical page conteenuitie.',
+'mergehistory-box' => 'Merge reveesions o twa pages:',
 'mergehistory-from' => 'Soorce page:',
+'mergehistory-into' => 'Destinâtion page:',
+'mergehistory-list' => 'Mergeable eidit histerie',
+'mergehistory-merge' => 'The follaein reveesions o [[:$1]] can be merged intil [[:$2]].
+Uise the radio button column tae merge in yinlie the reveesions cræftit at n afore the speceefied time.
+Mynd that uisin the naveegation links will reset this column.',
+'mergehistory-go' => 'Shaw mergeable eidits',
+'mergehistory-submit' => 'Merge reveesions',
+'mergehistory-empty' => 'Naw reveesions can be merged.',
+'mergehistory-success' => '$3 {{PLURAL:$3|reveesion|reveesions}} o [[:$1]] successfully merged intil [[:$2]].',
+'mergehistory-fail' => 'Onable tae perform histerie merge, please recheck the page n time parameters.',
+'mergehistory-no-source' => 'Soorce page $1 disna exeest.',
+'mergehistory-no-destination' => 'Destination page $1 disna exeest.',
+'mergehistory-invalid-source' => 'Source page maun be ae valid title.',
+'mergehistory-invalid-destination' => 'Destinâtion page maun be ae valid title.',
+'mergehistory-autocomment' => 'Merged [[:$1]] intil [[:$2]]',
+'mergehistory-comment' => 'Merged [[:$1]] intil [[:$2]]: $3',
+'mergehistory-same-destination' => 'Soorce n destination pages canna be the same',
 'mergehistory-reason' => 'Raeson:',
 
 # Merge log
+'mergelog' => 'Merge log.',
+'pagemerge-logentry' => 'merged [[$1]] intil [[$2]] (reveesions up til $3)',
 'revertmerge' => 'Unmerge',
+'mergelogpagetext' => 'Ablow is ae leet o the maist recent merges o yin page histerie intil anither.',
 
 # Diffs
-'history-title' => 'Revision history of "$1"',
+'history-title' => 'Reveesion histerie o "$1"',
+'difference-title' => 'Difference atween reveesions o "$1"',
+'difference-title-multipage' => 'Difference atween pages "$1" n "$2"',
+'difference-multipage' => '(Difference atween pages)',
 'lineno' => 'Line $1:',
 'compareselectedversions' => 'Compare selectit versions',
-'editundo' => 'undo',
+'showhideselectedversions' => 'Chynge veesibeelitie o selected reveesions',
+'editundo' => 'ondae',
+'diff-empty' => '(Naw difference)',
+'diff-multi-sameuser' => '({{PLURAL:$1|yin intermeediate reveesion|$1 intermeediate reveesions}} bi the same uiser naw shawn)',
+'diff-multi-otherusers' => '({{PLURAL:$1|yin intermeediate reveesion|$1 intermeediate reveesions}} bi {{PLURAL:$2|yin ither uiser|$2 uisers}} no shawn)',
+'diff-multi-manyusers' => '({{PLURAL:$1|Yin intermeediate reveesion|$1 intermeediate reveesions}} bi mair than $2 {{PLURAL:$2|uiser|uisers}} no shawn)',
+'difference-missing-revision' => '{{PLURAL:$2|Yin reveesion|$2 reveesions}} o this difference ($1) {{PLURAL:$2|was|were}} no fond.
+
+This is usually caused bi follaein aen ootdated diff link til ae page that haes been delytit.
+Details can be foond in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} delytion log].',
 
 # Search results
 'searchresults' => 'Rake results',
-'searchresults-title' => 'Rake affcome for "$1"',
+'searchresults-title' => 'Rake ootcome fer "$1"',
+'toomanymatches' => 'Ower moni matches were returned, please try ae different speirin',
 'titlematches' => 'Airticle teitle matches',
-'notextmatches' => 'Nae page text matches',
+'textmatches' => 'Page tex matches',
+'notextmatches' => 'Nae page tex matches',
 'prevn' => 'foregaun {{PLURAL:$1|$1}}',
 'nextn' => 'neist {{PLURAL:$1|$1}}',
 'prevn-title' => 'Previous $1 {{PLURAL:$1|ootcome|ootcomes}}',
@@ -684,478 +1095,1306 @@ there micht be parteeculars in the [{{fullurl:{{#Special:Log}}/suppress|page={{F
 'shown-title' => 'Shaw $1 {{PLURAL:$1|ootcome|ootcomes}} per page',
 'viewprevnext' => 'View ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''There is a page named \"[[:\$1]]\" oan this wiki.'''",
-'searchmenu-new' => "'''Mak the page \"[[:\$1]]\" on this wiki!'''",
+'searchmenu-new' => '<strong>Cræft the page "[[:$1]]" oan this wiki!</strong> {{PLURAL:$2|0=|See the page foond wi yer rake ava.|See the rake ootcome foond ava.}}',
 'searchprofile-articles' => 'Content pages',
-'searchprofile-project' => 'Help and Project pages',
+'searchprofile-project' => 'Heelp n Waurk pages',
 'searchprofile-images' => 'Multimedia',
 'searchprofile-everything' => 'Everything',
 'searchprofile-advanced' => 'Advanced',
 'searchprofile-articles-tooltip' => 'Rake in $1',
 'searchprofile-project-tooltip' => 'Rake in $1',
-'searchprofile-images-tooltip' => 'Rake fur files',
-'searchprofile-everything-tooltip' => 'Rake aw of content (including collogue pages)',
+'searchprofile-images-tooltip' => 'Rake fer files',
+'searchprofile-everything-tooltip' => 'Rake aw o content (inclædin tauk pages)',
 'searchprofile-advanced-tooltip' => 'Rake in custom namespaces',
 'search-result-size' => '$1 ({{PLURAL:$2|1 word|$2 words}})',
 'search-result-category-size' => '{{PLURAL:$1|1 member|$1 members}} ({{PLURAL:$2|1 subcategory|$2 subcategories}}, {{PLURAL:$3|1 file|$3 files}})',
-'search-redirect' => '(redirect $1)',
+'search-result-score' => 'Relevanc: $1%',
+'search-redirect' => '(reguide $1)',
 'search-section' => '(section $1)',
+'search-file-match' => '(matches file content.)',
 'search-suggest' => 'Did ye mean: $1',
-'search-interwiki-more' => '(more)',
+'search-interwiki-caption' => "Sister projec's",
+'search-interwiki-default' => 'Ootcomes fae $1:',
+'search-interwiki-more' => '(mair)',
+'search-relatedarticle' => 'Relatit',
+'searcheverything-enable' => 'Rake in aw namespaces',
 'searchrelated' => 'related',
 'searchall' => 'aw',
 'showingresults' => "Shawin ablo up tae {{PLURAL:$1|'''1''' result|'''$1''' results}} stertin wi #'''$2'''.",
+'showingresultsinrange' => 'Shawin ablo up til {{PLURAL:$1|<strong>1</strong> ootcome|<strong>$1</strong> ootcome}} in range #<strong>$2</strong> til #<strong>$3</strong>.',
 'showingresultsnum' => "Shawin ablo {{PLURAL:$3|'''1''' result|'''$3''' results}} stertin wi #'''$2'''.",
-'showingresultsheader' => "{{PLURAL:$5|Ootcome '''$1''' of '''$3'''|Ootcomes '''$1 - $2''' of '''$3'''}} for '''$4'''",
-'search-nonefound' => "Thare wur na ootcomes matching th' query.",
+'showingresultsheader' => '{{PLURAL:$5|Ootcome <strong>$1</strong> o <strong>$3</strong>|Ootcomes <strong>$1 - $2</strong> o <strong>$3</strong>}} fer <strong>$4</strong>',
+'search-nonefound' => 'Thaur were naw ootcomes matchin the speiring.',
+'powersearch-legend' => 'Advanced rake',
+'powersearch-ns' => 'Rake in namespaces:',
 'powersearch-redir' => 'Leet redirects',
+'powersearch-togglelabel' => "Chec':",
 'powersearch-toggleall' => 'Aw',
+'powersearch-togglenone' => 'Nane',
+'search-external' => 'Eixternal rake',
 'searchdisabled' => 'Rakin throu {{SITENAME}} is disabled for performance raesons. Ye can rake via Google juist nou. Mynd that thair indexes o {{SITENAME}} content micht be oot o date.',
+'search-error' => 'Ae mistak haes occurred while rakin: $1',
 
 # Preferences page
+'preferences' => 'Ma preferences',
 'mypreferences' => 'Ma preferences',
+'prefs-edits' => 'Nummer o eidits:',
+'prefsnologintext2' => 'Please $1 tae chynge yer preferences.',
 'prefs-skin' => 'Huil',
 'skin-preview' => 'First Leuk',
 'datedefault' => 'Nae preference',
-'prefs-datetime' => 'Date an time',
+'prefs-beta' => 'Beta features.',
+'prefs-datetime' => 'Date n time',
+'prefs-labs' => 'Labs featurs',
+'prefs-user-pages' => 'Uiser pages',
 'prefs-personal' => 'Uiser data',
-'prefs-rc' => 'Recent chynges an shawin stubs',
+'prefs-rc' => 'Recent chynges n shawin stubs',
 'prefs-watchlist' => 'Watchleet',
+'prefs-watchlist-days' => 'Days tae shaw in watchleet:',
+'prefs-watchlist-days-max' => 'Mucklest $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-edits' => 'Mucklest nummer o chynges tae shaw in expanded watchleet:',
+'prefs-watchlist-edits-max' => 'Mucklest nummer: 1000',
+'prefs-watchlist-token' => 'Watchleet token:',
 'prefs-misc' => 'Antrin settins',
 'prefs-resetpass' => 'Chynge passwaird',
+'prefs-changeemail' => 'Chynge Wab-mail address',
+'prefs-setemail' => 'Set ae wab-mail address',
+'prefs-email' => 'Wab-mail opties',
+'prefs-rendering' => 'Appearence',
 'saveprefs' => 'Hain preferences',
+'restoreprefs' => 'Restore aw defaut settins (in aw sections)',
 'prefs-editing' => 'Editin',
+'rows' => 'Raws:',
 'searchresultshead' => 'Rake result settins',
+'stub-threshold' => 'Threeshaud fer <a href="#" class="stub">stub link</a> formattin (bytes):',
 'stub-threshold-disabled' => 'Tuckie',
-'recentchangescount' => 'Nummer o teitles in recent chynges',
+'recentchangesdays' => 'Days tae shaw in recynt chynges:',
+'recentchangesdays-max' => 'Mucklest $1 {{PLURAL:$1|day|days}}',
+'recentchangescount' => 'Nummer o eedits tae shaw bi defaut:',
+'prefs-help-recentchangescount' => 'This includes recent chynges, page histories, n logs.',
+'prefs-help-watchlist-token2' => 'This is the hidlins key til the wab feed o yer watchleet. Onibodie wha kens this can read yer watchleet, sae dinna shair it. Gif ye need to, [[Special:ResetTokens|Ye can reset it]].',
 'savedprefs' => 'Yer preferences haes been hained.',
-'servertime' => 'Server time is nou',
+'timezoneuseserverdefault' => 'Uise wiki defaut ($1)',
+'timezoneuseoffset' => 'Ither (speceefie affset)',
+'servertime' => 'Server time the nou',
 'guesstimezone' => 'Fill in frae brouser',
+'timezoneregion-africa' => 'Africae',
+'timezoneregion-america' => 'Americae',
+'timezoneregion-antarctica' => 'Antairctica',
+'timezoneregion-arctic' => 'Airctic',
+'timezoneregion-asia' => 'Asie',
+'timezoneregion-atlantic' => 'Atlaunteec Ocean',
+'timezoneregion-australia' => 'Australie',
+'timezoneregion-europe' => 'Europ',
+'timezoneregion-pacific' => 'Paceefic Ocean',
 'allowemail' => 'Allou email frae ither uisers',
-'defaultns' => 'Rake in thir namespaces bi defaut:',
+'prefs-searchoptions' => 'Rake',
+'defaultns' => 'Itherwise rake in thir namespaces:',
 'default' => 'defaut',
 'prefs-files' => 'Files',
 'prefs-custom-css' => 'Custom CSS',
 'prefs-custom-js' => 'Custom JS',
+'prefs-common-css-js' => 'Shaired CSS/JavaScript fer aw skins:',
+'prefs-reset-intro' => 'Ye can uise this page tae reset yer preeferances til the steid defauts.
+This canna be ondun.',
+'prefs-emailconfirm-label' => 'Wab-mail confirmation:',
 'youremail' => 'Yer email:',
-'username' => 'Uisername:',
-'uid' => 'Uiser ID:',
-'prefs-memberingroups' => 'Member o {{PLURAL:$1|group|groups}}:',
+'username' => '{{GENDER:$1|Uisername}}:',
+'uid' => '{{GENDER:$1|Uiser}} ID:',
+'prefs-memberingroups' => '{{GENDER:$2|Member}} o {{PLURAL:$1|group|groups}}:',
+'prefs-registration' => 'Regeestration time:',
 'yourrealname' => 'Yer real name:',
 'yourlanguage' => 'Interface leid:',
-'yourvariant' => 'Leid variant',
+'yourvariant' => 'Content leid variant',
+'prefs-help-variant' => 'Yer preferred variant or orthographie tae displey the content pages o this wiki in.',
 'yournick' => 'New seegnatur:',
+'prefs-help-signature' => 'Comments oan talk pages shid be signed wi "<nowiki>~~~~</nowiki>", this will be convertit intil yer signatur n ae timestamp.',
 'badsig' => 'Raw signature nae guid; check HTML tags.',
 'badsiglength' => 'Yer nickname is ower lang; it haes tae be $1 {{PLURAL:$1|character|characters}} or less.',
+'yourgender' => 'Hou dae ye prefer tae be described?',
+'gender-unknown' => 'Ah prefer tae na say',
+'gender-male' => 'He eedits wiki pages',
+'gender-female' => 'She eedits wiki pages',
+'prefs-help-gender' => 'Settin this preference is aen optie.
+The saffware uises its value tae address ye n tae mention ye til ithers uisin the appropriate grammatical gender.
+This information will be publeec.',
 'email' => 'E-mail',
-'prefs-help-realname' => 'Rael name is optional an gin ye chuise tae provide it this will be uised tae gie ye attreibution for yer wark.',
-'prefs-help-email' => 'E-mail is optional, bit is needed fur password resets, shuid ye forget yer password.',
-'prefs-help-email-others' => "Ye kin an choose tae let others contact ye by e-mail thro' a link oan yer uiser or collogue  page. 
-Yer e-mail address insae revealed whin ither uisers contact ye.",
+'prefs-help-realname' => 'Real name is aen optie.
+Gif ye chuise tae provide it, this will be uised fer giein ye attreebution fer yer wark.',
+'prefs-help-email' => 'Wab-mail is optional, bit is needed fer passwaird resets, shid ye ferget yer passwaird.',
+'prefs-help-email-others' => 'Ye can chuise tae let ithers contact ye bi wab-mail through ae link oan yer uiser or tauk page.
+Yer wab-mail address isna revealed whan ither uisers contact ye.',
 'prefs-help-email-required' => 'Yer e-mail address is needit.',
+'prefs-i18n' => 'Internaitionalisation',
+'prefs-signature' => 'Signatur',
+'prefs-timeoffset' => 'Time affset',
+'prefs-advancedediting' => 'General opties',
+'prefs-editor' => 'Eediter',
+'prefs-preview' => 'Luikower',
+'prefs-advancedrc' => 'Advanced opties',
+'prefs-advancedrendering' => 'Advanced opties',
+'prefs-advancedsearchoptions' => 'Advanced opties',
+'prefs-advancedwatchlist' => 'Advanced opties',
+'prefs-displayrc' => 'Displey opties',
+'prefs-displaysearchoptions' => 'Displey opties',
+'prefs-displaywatchlist' => 'Displey opties',
 'prefs-diffs' => 'Diffs',
+'prefs-help-prefershttps' => 'This preeferance will tak effect oan yer nex login.',
+'prefs-tabs-navigation-hint' => 'Tip: Ye can uise the cair n richt arrae keys tae naveegate atween the tabs in the tabs leet.',
+
+# User preference: email validation using jQuery
+'email-address-validity-valid' => 'Wab-mail address appears tae be valid',
+'email-address-validity-invalid' => 'Enter ae valid wab-mail address',
 
 # User rights
+'userrights' => 'Uiser richts managemant',
 'userrights-lookup-user' => 'Manish uiser boorachs',
 'userrights-user-editname' => 'Enter a uisername:',
-'editusergroup' => 'Edit uiser boorach',
-'editinguser' => "Editin uiser '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+'editusergroup' => 'Eidit uiser boorach',
+'editinguser' => 'Chynging uiser richts o uiser <strong>[[User:$1|$1]]</strong> $2',
+'userrights-editusergroup' => 'Eedit uiser groops',
+'saveusergroups' => 'Hain uiser groops',
 'userrights-groupsmember' => 'Member o:',
+'userrights-groupsmember-auto' => 'Impleecit memmer o:',
+'userrights-groups-help' => "Ye can alter the groops this uiser is in:
+* Ae checkit kist means that the uiser is in that groop.
+* Aen oncheckit kist means that the uiser's no in that groop.
+* Ae * indicates that ye cannae remuiv the groop yince ye'v added it, or vice versa.",
+'userrights-reason' => 'Raison:',
+'userrights-no-interwiki' => 'Ye dinna hae permission tae eedit uiser richts oan ither wikis.',
+'userrights-nodatabase' => 'Database $1 disna exeest or isna local.',
+'userrights-nologin' => 'Ye maun [[Special:UserLogin|log in]] wi aen admeenistrater accoont tae assign uiser richts.',
+'userrights-notallowed' => 'Ye dinna hae permission tae add or remuiv uiser richts.',
+'userrights-changeable-col' => 'Groops that ye can chynge',
+'userrights-unchangeable-col' => 'Groops ye canna chynge',
+'userrights-conflict' => 'Conflict o uiser richts chynges! Please luikower n confirm yer chynges.',
+'userrights-removed-self' => "Ye'v successfulie remuived yer ain richts. N sae, ye'r naw langer able tae access this page.",
 
 # Groups
+'group' => 'Groop:',
 'group-user' => 'Uisers',
+'group-autoconfirmed' => 'Autæconfirmed uisers',
 'group-bot' => 'Bots',
+'group-sysop' => 'Admeenistraters',
+'group-suppress' => 'Owersichts',
 'group-all' => '(aw)',
 
-'group-user-member' => 'Uiser',
-'group-bot-member' => 'Bot',
+'group-user-member' => '{{GENDER:$1|uiser}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|autæconfirmed uiser}}',
+'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-sysop-member' => '{{GENDER:$1|admeenistrater}}',
+'group-suppress-member' => '{{GENDER:$1|owersicht}}',
+
+'grouppage-user' => '{{ns:project}}:Uisers',
+'grouppage-autoconfirmed' => '{{ns:project}}:Autæconfirmed uisers',
+'grouppage-sysop' => '{{ns:project}}:Admeenistraters',
+'grouppage-suppress' => '{{ns:project}}:Owersicht',
 
 # Rights
-'right-delete' => 'Delete pages',
+'right-edit' => 'Eedit pages',
+'right-createpage' => 'Cræft pages (that arna tauk pages)',
+'right-createtalk' => 'Cræft discussion pages',
+'right-createaccount' => 'Cræft new uiser accoonts',
+'right-minoredit' => 'Maurk eedits aes smaa',
+'right-move' => 'Muiv pages',
+'right-move-subpages' => 'Muiv pages wi thair subpages',
+'right-move-rootuserpages' => 'Muiv ruit uiser pages',
+'right-movefile' => 'Muiv files',
+'right-suppressredirect' => 'Na cræft reguidals fae soorce pages whan muivin pages',
+'right-upload' => 'Uplaid files',
+'right-reupload' => 'Owerwrite exeestin files',
+'right-reupload-own' => 'Owerwrite exeestin files uplaidit bi yersel',
+'right-reupload-shared' => 'Owerride files oan the shaired media repositerie locallie',
+'right-upload_by_url' => 'Uplaid files fae ae URL',
+'right-purge' => 'Purge the steid cache fer ae page wioot confirmation',
+'right-autoconfirmed' => 'Na be affectit bi IP-based rate leemits',
+'right-bot' => 'Be treatit aes aen autæmatit process',
+'right-nominornewtalk' => 'Na hae smaa eedits til discussion pages trigger the new messages prompt',
+'right-apihighlimits' => 'Uise heicher leemits in API queries',
+'right-writeapi' => 'Uise o the write API',
+'right-delete' => 'Delyte pages',
+'right-bigdelete' => 'Delyte pages wi muckle histeries',
+'right-deletelogentry' => 'Delyte n ondelyte speceefic log entries',
+'right-deleterevision' => 'Delyte n ondylete speceefic reveesions o pages',
+'right-deletedhistory' => 'See delytit histerie entries, wioot thair associatit tex',
+'right-deletedtext' => 'See delytit tex n chynges atween delytit reveesions',
+'right-browsearchive' => 'Rake delytit pages',
+'right-undelete' => 'Ondelyte ae page',
+'right-suppressrevision' => 'Luikower n restore reveesions skaukt fae admeenistraters',
+'right-suppressionlog' => 'see preevate logs',
+'right-block' => 'Block ither uisers fae eeditin',
+'right-blockemail' => 'Block ae uiser fae sendin wab-mail',
+'right-hideuser' => 'Block ae uisername, skaukin it fae the publeec',
+'right-ipblock-exempt' => 'Bypass IP blocks, autae-blocks  range blocks',
+'right-proxyunbannable' => 'Bypass autaematic blocks o proxies',
+'right-unblockself' => 'Onblock yersel',
+'right-protect' => 'Chynge protection levels n eedit cascade-protected pages',
+'right-editprotected' => 'Eedit pages protected aes "{{int:protect-level-sysop}}"',
+'right-editsemiprotected' => 'Eedit pages protected aes "{{int:protect-level-autoconfirmed}}"',
+'right-editinterface' => 'Eedit the uiser interface',
+'right-editusercssjs' => "Eedit ither uisers' CSS n JavaScript files",
+'right-editusercss' => "Eedit ither uisers' CSS files",
+'right-edituserjs' => "Eedit ither uisers' JavaScript files",
+'right-editmyusercss' => 'Eidit yer ain uiser CSS files',
+'right-editmyuserjs' => 'Eedit yer ain uiser JavaScript files',
+'right-viewmywatchlist' => 'See yer ain watchleet',
+'right-editmywatchlist' => 'Eedit yer ain watchleet. Myd that some actions will still add pages even wioot this richt.',
+'right-viewmyprivateinfo' => 'See yer ain preevate data (e.g. wab-mail address, real name)',
+'right-editmyprivateinfo' => 'Eedit yer ain preevate data (e.g. wab-mail address, real name)',
+'right-editmyoptions' => 'Eedit yer ain preeferences',
+'right-rollback' => 'Quicklie rowback the eedits o the laist uiser that eeditit ae parteecular page',
+'right-markbotedits' => 'Maurk rowed-back eedits aes bot eedits',
+'right-noratelimit' => 'No be affected bi rate limits',
+'right-import' => 'Import pages fae ither wikis',
+'right-importupload' => 'Import pages fae ae file uplaid',
+'right-patrol' => "Maurk ithers' eedits aes patrowed",
+'right-autopatrol' => "Hae ye'r ain eedits autaematiclie maurked aes patrowed",
+'right-patrolmarks' => 'See recent chynges patrol maurks',
+'right-unwatchedpages' => 'See ae leet o onwatched pages',
+'right-mergehistory' => 'Merge the histerie o pages',
+'right-userrights' => 'Eedit aw uiser richts',
+'right-userrights-interwiki' => 'Eedit the uiser richts o uisers oan ither wikis',
+'right-siteadmin' => 'Lock n lowse the database',
+'right-override-export-depth' => 'Export pages incluidin linked pages up til ae depth o 5',
+'right-sendemail' => 'Send Wab-mail til ither uisers',
+'right-passwordreset' => 'See passwaird reset wab-mails',
 
 # Special:Log/newusers
-'newuserlogpage' => 'Uiser creation log',
+'newuserlogpage' => 'Uiser cræftin log',
+'newuserlogpagetext' => 'This is ae log o uiser cræftins.',
 
 # User rights log
 'rightslog' => 'Uiser richts log',
 'rightslogtext' => 'This is a log o chynges tae uiser richts.',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-edit' => 'edit this page',
+'action-edit' => 'eedit this page',
+'action-createpage' => 'cræft pages',
+'action-createtalk' => 'cræft discussion pages',
+'action-createaccount' => 'cræft this uiser accoont',
+'action-minoredit' => 'maurk this eedit aes smaa',
+'action-move' => 'muiv this page',
+'action-move-subpages' => 'mui this page, n its subpages',
+'action-move-rootuserpages' => 'muiv ruit uiser pages',
+'action-movefile' => 'muiv this file',
+'action-upload' => 'uplaid this file',
+'action-reupload' => 'owerwrite this exeestin file',
+'action-reupload-shared' => 'owerride this file oan ae shaired reposeeterie',
+'action-upload_by_url' => 'uplaid this file fae ae URL',
+'action-writeapi' => 'uise the write API',
+'action-delete' => 'delyte this page',
+'action-deleterevision' => 'delyte this reveesion',
+'action-deletedhistory' => "see this page's delytit histerie",
+'action-browsearchive' => 'rake delytit pages',
+'action-undelete' => 'ondelyte this page',
+'action-suppressrevision' => 'luikower n restore this skaukt reveesion',
+'action-suppressionlog' => 'see this preevate log',
+'action-block' => 'block this uiser fae eeditin',
+'action-protect' => 'chynge protection levels fer this page',
+'action-rollback' => 'quicklie rowback the eedits o the laist uiser that eeditit ae parteecular page',
+'action-import' => 'import pages fae anither wiki',
+'action-importupload' => 'import pages fae ae file uplaid',
+'action-patrol' => "maurk ithers' eedits aes patrowed",
+'action-autopatrol' => 'hae yer eedit maurked aes patrowed',
+'action-unwatchedpages' => 'see the leet o onwatched pages',
+'action-mergehistory' => 'merge the histerie o this page',
+'action-userrights' => 'eedit aw uiser richts',
+'action-userrights-interwiki' => 'eedit the uiser richts o uisers oan ither wikis',
+'action-siteadmin' => 'lock or lowse the database',
+'action-sendemail' => 'send wab-mails',
+'action-editmywatchlist' => 'eedit yer watchleet',
+'action-viewmywatchlist' => 'see yer watchleet',
+'action-viewmyprivateinfo' => 'see yer preevate information',
+'action-editmyprivateinfo' => 'eedit yer preevate information',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|chynge|chynges}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|sin laist veesit}}',
+'enhancedrc-history' => 'histeri',
 'recentchanges' => 'Recent chynges',
-'recentchanges-legend' => 'Recent changes options',
+'recentchanges-legend' => 'Recynt chynges opties',
 'recentchanges-summary' => 'Follae the maist recent chynges tae the wiki on this page.',
+'recentchanges-noresult' => 'Naw chynges durin the gien period matchin thir guidins.',
 'recentchanges-feed-description' => 'Follae the maist recent chynges tae the wiki in this feed.',
 'recentchanges-label-newpage' => 'This edit created a freish page',
-'recentchanges-label-minor' => 'This is a smaa edit',
-'recentchanges-label-bot' => 'This edit wis performed by a bot',
+'recentchanges-label-minor' => 'This is ae smaa eedit',
+'recentchanges-label-bot' => 'This eedit wis performed bi ae bot',
 'recentchanges-label-unpatrolled' => 'This edit haes nae yet bin patrolled',
-'rcnotefrom' => 'Ablo is the chynges syne <b>$2</b> (up tae <b>$1</b> shawn).',
+'recentchanges-label-plusminus' => 'The page size chynged bi this nummer o bytes',
+'recentchanges-legend-newpage' => '(see [[Special:NewPages|leet o new pages]] ava)',
+'rcnotefrom' => 'Ablo ar the chynges sin <strong>$2</strong> (up til <strong>$1</strong> shawn).',
 'rclistfrom' => 'Shaw new chynges stertin frae $1',
 'rcshowhideminor' => '$1 smaa edits',
+'rcshowhideminor-show' => 'Shaw',
+'rcshowhideminor-hide' => 'Skauk',
 'rcshowhidebots' => '$1 bots',
-'rcshowhideliu' => '$1 logged-in uisers',
+'rcshowhidebots-show' => 'Shaw',
+'rcshowhidebots-hide' => 'Skauk',
+'rcshowhideliu' => '$1 registered uisers',
+'rcshowhideliu-show' => 'Shaw',
+'rcshowhideliu-hide' => 'Skauk',
 'rcshowhideanons' => '$1 anonymous uisers',
+'rcshowhideanons-show' => 'Shaw',
+'rcshowhideanons-hide' => 'Skauk',
 'rcshowhidepatr' => '$1 patrolled edits',
+'rcshowhidepatr-show' => 'Shaw',
+'rcshowhidepatr-hide' => 'Skauk',
 'rcshowhidemine' => '$1 ma edits',
+'rcshowhidemine-show' => 'Shaw',
+'rcshowhidemine-hide' => 'Skauk',
 'rclinks' => 'Shaw last $1 chynges in last $2 days<br />$3',
 'diff' => 'diff',
 'hist' => 'hist',
-'hide' => 'Hod',
+'hide' => 'Skauk',
 'show' => 'shaw',
 'minoreditletter' => 's',
 'newpageletter' => 'N',
 'boteditletter' => 'b',
 'number_of_watching_users_pageview' => '[$1 watchin {{PLURAL:$1|uiser|uisers}}]',
+'rc_categories' => 'Limit til categeries (separate wi "|")',
 'rc_categories_any' => 'Ony',
-'rc-enhanced-expand' => 'Shaw details (requires JavaScript)',
-'rc-enhanced-hide' => 'Hod details',
+'rc-change-size-new' => '$1 {{PLURAL:$1|byte|bytes}} efter chynge',
+'rc-enhanced-expand' => 'Shaw details',
+'rc-enhanced-hide' => 'Skauk details',
+'rc-old-title' => 'oreeginlie cræftit aes "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'Relatit chynges',
 'recentchangeslinked-feed' => 'Relatit chynges',
 'recentchangeslinked-toolbox' => 'Relatit chynges',
-'recentchangeslinked-title' => 'Changes related to "$1"',
-'recentchangeslinked-summary' => "This is a leet o' changes made recently tae pages linked frae a specified page (or tae members o' a specified category).
-Pages on [[Special:Watchlist|your watchleet]] are '''bold'''.",
+'recentchangeslinked-title' => 'Chynges relatit til "$1"',
+'recentchangeslinked-summary' => 'This is ae leet o chynges makit recentlie til pages linked fae ae speceefied page (or til memmers o ae speceefied categerie).
+Pages oan [[Special:Watchlist|yer watchleet]] ar <strong>baud</strong.',
 'recentchangeslinked-page' => 'Page name:',
-'recentchangeslinked-to' => "Shaw changes tae pages linked tae th' given page instead",
+'recentchangeslinked-to' => 'Shaw chynges til pages linked til the gien page instead',
 
 # Upload
 'upload' => 'Uplaid file',
 'uploadbtn' => 'Uplaid file',
-'reuploaddesc' => 'Gang back tae the uplaid form.',
+'reuploaddesc' => 'Gang back til the uplaid form.',
+'upload-tryagain' => 'Haunn in modified file descreeption',
 'uploadnologin' => 'Nae loggit in',
-'uploadnologintext' => 'Ye maun be [[Special:UserLogin|loggit in]] til uplaid files.',
-'uploaderror' => 'Uplaid error',
-'uploadtext' => "Uise the form ablo tae uplaid new files;
-tae keek at or rake throu aareadies uplaidit eimages gang tae the [[Special:FileList|leet o uplaidit files]];
-uplaids an deletions is recordit in the [[Special:Log|project log]].
-
-Tae pit the eimage intae a page, uise an airtin i the form
-'''<nowiki>[[</nowiki>{{ns:file}}:file.jpg<nowiki>]]</nowiki>''',
-'''<nowiki>[[</nowiki>{{ns:file}}:file.png|alt text<nowiki>]]</nowiki>''' or
-'''<nowiki>[[</nowiki>{{ns:media}}:file.ogg<nowiki>]]</nowiki>''' for pyntin strecht tae the file",
+'uploadnologintext' => 'Please $1 tae uplaid files.',
+'upload_directory_missing' => 'The uplaid directerie ($1) is missin n coudna be cræftit bi the wabserver.',
+'upload_directory_read_only' => 'The uplaid directerie ($1) is naw writable bi the wabserver.',
+'uploaderror' => 'Uplaid mistak',
+'upload-recreate-warning' => "'''Warnishment: Ae file bi that name haes been delytit or muived.'''
+
+The delytion n muiv log fer this page ar gien here fer conveeneeance:",
+'uploadtext' => 'Uise the form ablo tae uplaid files.
+Tae see or rake preeveeooslie uplaided files gang til the [[Special:FileList|leet o uplaided files]], (re)uplaids ar loggit in the [[Special:Log/upload|uplaid log]] ava, delytions in the [[Special:Log/delete|delytion log]].
+
+Tae incluid ae file in ae page, uise ae link in yin o the follaein forms:
+* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> tae uise the ful version o the file
+* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt tex]]</nowiki></code></strong> tae uise ae 200 pixel wide rendeetion in ae kist in the cair margin wi "alt tex" aes descreeption
+* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> fer linkin directlie til the file wioot displeyin the file.',
+'upload-permitted' => 'Permitit file types: $1.',
+'upload-prohibited' => 'Proheebited file types: $1.',
 'uploadlog' => 'uplaid log',
 'uploadlogpage' => 'Uplaid log',
 'uploadlogpagetext' => 'Ablo is a leet o the maist recent file uplaids.',
 'filedesc' => 'Ootline',
+'fileuploadsummary' => 'Ootline:',
+'filereuploadsummary' => 'File chynges:',
 'filestatus' => 'Copyricht status:',
 'filesource' => 'Soorce:',
 'uploadedfiles' => 'Uplaidit files',
-'ignorewarning' => 'Ignore warnin an hain file oniewey.',
+'ignorewarning' => 'Ignore warnishment n hain file oniewey.',
 'ignorewarnings' => 'Ignore ony warnins',
-'illegalfilename' => 'The filename "$1" haes characters that isna alloud in page teitles. Please rename the file an gie uplaidin it anither shot.',
-'badfilename' => 'Eimage name haes been chynged tae "$1".',
+'minlength1' => 'Filenames maun be at least yin letter.',
+'illegalfilename' => 'The filename "$1" haes chairacters that\'s naw permitit in page teitles. Please rename the file n gie uplaidin it anither shote.',
+'filename-toolong' => 'Filenames canna be langer than 240 bytes.',
+'badfilename' => 'Filename haes been chynged til "$1".',
+'filetype-mime-mismatch' => 'File exteension ".$1" disna match the detected MIME type o the file ($2).',
+'filetype-badmime' => 'Files o the MIME type "$1" ar no permitit tae be uplaided.',
+'filetype-bad-ie-mime' => 'Canna uplaid this file cause Internet Explorer wid detect it aes "$1", n this is ae non-permitit n potentiallie dangeroos file type.',
+'filetype-unwanted-type' => "'''\".\$1\"''' is aen onwanted file type.
+Preferred {{PLURAL:\$3|file type is|file types ar}} \$2.",
+'filetype-banned-type' => '<strong>".$1"</strong> {{PLURAL:$4|is naw ae permitted file type|ar naw permitted file types}}.
+Permitted {{PLURAL:$3|file type is|file types ar}} $2.',
+'filetype-missing' => 'The file haes nae extension (like ".jpg").',
+'empty-file' => 'The file that ye haunned in wiss tuim.',
+'file-too-large' => 'The file that ye haunned in wis ower muckle.',
+'filename-tooshort' => 'The filename is ower short.',
+'filetype-banned' => 'This type o file is banned.',
+'verification-error' => 'This file didna pass file verifeecation.',
+'hookaborted' => 'The modifeecation that ye tried tae mak wis abortit bi aen exteension.',
+'illegal-filename' => 'The filename isna permitit.',
+'overwrite' => 'Owerwritin aen exeestin file isna permeetit.',
+'unknown-error' => 'Aen onkent mistake occurred.',
+'tmp-create-error' => 'Coudna cræft temperie file.',
+'tmp-write-error' => 'Mistak writin temperie file.',
+'large-file' => "It's recommended that files ar nae muckler than $1;
+this file is $2.",
 'largefileserver' => 'This file is bigger nor the server is confeigurt tae allou.',
-'fileexists' => "A file wi this name exists aareadies, please check <strong>[[:$1]]</strong> gin ye'r no siccar that ye want tae chynge it.
+'emptyfile' => 'The file that ye uplaided seems tae be tuim.
+This micht be cause o ae typeower in the filename.
+Please check whether ye reallie want tae uplaid this file.',
+'windows-nonascii-filename' => 'This wiki disna support filenames wi speecial chairacters.',
+'fileexists' => "Ae file wi this name exeests aareadies, please check <strong>[[:$1]]</strong> gif ye'r no sair that ye want tae chynge it.
 [[$1|thumb]]",
-'fileexists-forbidden' => 'A file wi this name aareadies exists; please gang back an uplaid this file unner a new name. [[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => 'A file wi this name aareadies exists in the shared file depose; please gang back an uplaid this file unner a new name. [[File:$1|thumb|center|$1]]',
-'uploadwarning' => 'Uplaid warnin',
+'filepageexists' => "The descreeption page fer this file haes awreadie been cræftit at <strong>[[:$1]]</strong>, but naw file wi this name exeests the nou.
+The ootline that ye enter willna kith oan the descreeption page.
+Tae mak yer ootlline kith there, ye'll need tae manuallie eedit it.
+[[$1|thumb]]",
+'fileexists-extension' => 'Ae file wi ae siclike name exeests: [[$2|thumb]]
+* Name o the uplaidin file: <strong>[[:$1]]</strong>
+* Name o the exeestin file: <strong>[[:$2]]</strong>
+Please chuise ae different name.',
+'fileexists-thumbnail-yes' => "The file seems tae be aen eemage o reduced size ''(thumbnail)''.
+[[$1|thumb]]
+Please check the file <strong>[[:$1]]</strong>.
+Gif the checked file is the same eemage o oreeginal size it's no necessairie tae uplaid aen extra thumbnail.",
+'file-thumbnail-no' => "The filename begins wi <strong>$1</strong>.
+It seems tae be aen eemage o reduced size ''(thumbnail)''.
+Gif ye hae this emage in ful resolution uplaid this yin, itherwise please chynge the filename.",
+'fileexists-forbidden' => 'Ae file wi this name awreadie exists, n canna be owerwritten.
+Gif ye still wish tae uplaid yer file, please gang back n uise ae new name.
+[[File:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Ae file wi this name awreadie exeests in the shaired file repositerie.
+Gif ye still wish tae uplaid yer file, please gang back n uise ae new name.
+[[File:$1|thumb|center|$1]]',
+'file-exists-duplicate' => 'This file is ae dupleecate o the follaein {{PLURAL:$1|file|files}}:',
+'file-deleted-duplicate' => "Ae file ideentical til this file ([[:$1]]) haes been delytit afore.
+Ye shid check that file's delytion histerie afore proceedin tae re-uplaid it.",
+'file-deleted-duplicate-notitle' => 'Ae file identical til this file haes been delytit afore, n the title haes been suppressed.
+Ye shid speir somebodie wi the abeelitie tae see suppressed file data tae luik at the seetuation afore gaun oan tae re-uplaid it.',
+'uploadwarning' => 'Uplaid warnishment',
+'uploadwarning-text' => 'Please modeefie the file descreeption ablo n gie it anither gae.',
 'savefile' => 'Hain file',
 'uploadedimage' => 'uplaidit "$1"',
+'overwroteimage' => 'uplaided ae new version o "[[$1]]"',
 'uploaddisabled' => 'Sorry, uplaidin is disabled.',
+'copyuploaddisabled' => 'Uplaid bi URL disabled.',
+'uploadfromurl-queued' => 'Yer uplaid haes been pit in line.',
+'uploaddisabledtext' => 'File uplaids ar disabled.',
+'php-uploaddisabledtext' => 'File uplaids ar disabled in PHP.
+Please check the file_uploads settin.',
 'uploadscripted' => 'This file hauds HTML or script code that micht be wrang interpretit bi a wab brouser.',
+'uploadscriptednamespace' => 'This SVG file contains aen illegal namespace "$1"',
+'uploadinvalidxml' => 'The XML in the uplaided file coudna be parsed.',
 'uploadvirus' => 'The file hauds a virus! Details: $1',
+'uploadjava' => 'The file is ae ZIP file that contains ae Java .class file.
+Uplaidin Java files isna permitit cause thay can cause secureetie restreections tae be bypassed.',
+'upload-source' => 'Soorce file',
 'sourcefilename' => 'Soorce filename:',
+'sourceurl' => 'Soorce URL:',
+'destfilename' => 'Desteenation filename:',
+'upload-maxfilesize' => 'Mucklest file size: $1',
+'upload-description' => 'File descreeption',
+'upload-options' => 'Uplaid opties',
+'watchthisupload' => 'Watch this file.',
+'filewasdeleted' => 'Ae file o this name haes been preeveeooslie uplaided n than delytit.
+Ye shid check the $1 afore preceedin tae uplaid it again.',
+'filename-bad-prefix' => "The name o the file that ye'r uplaidin begins wi '''\"\$1\"''', this is ae no-descreepteeve name typiclie assigned autæmateeclie bi deegital cameras.
+Please chuise ae mai descreepteeve name fer yer file.",
+'upload-success-subj' => 'Successfu uplaid',
+'upload-success-msg' => "Yer uplaid fae [$2] wis successfu. It's available here: [[:{{ns:file}}:$1]]",
+'upload-failure-subj' => 'Uplaid problem',
+'upload-failure-msg' => 'Thaur wis ae problem wi yer uplaid fae [$2]:
+
+$1',
+'upload-warning-subj' => 'Uplaid warnishment',
+'upload-warning-msg' => 'Thaur wis ae proablem wi yer uplaid fae [$2]. Ye can return til the [[Special:Upload/stash/$1|uplaid form]] tae correct this proablem.',
+
+'upload-proto-error' => 'Oncorrect protocol',
+'upload-proto-error-text' => 'Remote uplaid needs URLs beginnin wi <code>http://</code> or <code>ftp://</code>.',
+'upload-file-error' => 'Internal mistak',
+'upload-file-error-text' => 'Aen internal mitake occurred whan attemptin tae cræft ae temperie file oan the server.
+Please contact aen [[Special:ListUsers/sysop|admeenistrater]].',
+'upload-misc-error' => 'Onkent uplaid mistake',
+'upload-misc-error-text' => 'Aen onkent mistak occurred during the uplaid.
+Please vereefie that the URL is valit n accessible n gie it anither gae.
+Gif the proablem persists, contact aen [[Special:ListUsers/sysop|admeenistrater]].',
+'upload-too-many-redirects' => 'The URL contained oewr monie reguidals',
+'upload-unknown-size' => 'Onkent size',
+'upload-http-error' => 'Aen HTTP mistake occurred: $1',
+'upload-copy-upload-invalid-domain' => 'Copie uplaids arna available fae this domain.',
+
+# File backend
+'backend-fail-stream' => 'Coudna stream file "$1".',
+'backend-fail-backup' => 'Coudna backup file "$1".',
+'backend-fail-notexists' => 'The file $1 disna exeest.',
+'backend-fail-hashes' => 'Coudna get file hashes fer comparison.',
+'backend-fail-notsame' => 'Ae non-identeecal file awreadie exeests at "$1".',
+'backend-fail-invalidpath' => '"$1" isna ae valid storage path.',
+'backend-fail-delete' => 'Coudna delyte file "$1".',
+'backend-fail-describe' => 'Coudna chynge metadata fer file "$1".',
+'backend-fail-alreadyexists' => 'The file "$1" awreadiw exeests.',
+'backend-fail-store' => 'Coudna store file "$1" at "$2".',
+'backend-fail-copy' => 'Coudna copie file "$1" til "$2".',
+'backend-fail-move' => 'Coudna muiv file "$1" til "$2".',
+'backend-fail-opentemp' => 'Coudna apen temperie file.',
+'backend-fail-writetemp' => 'Coudna write til temperie file.',
+'backend-fail-closetemp' => 'Coudna claise temperie file.',
+'backend-fail-read' => 'Coudna read file "$1".',
+'backend-fail-create' => 'Coudna write file "$1".',
+'backend-fail-maxsize' => 'Coudna write file "$1" cause it\'s muckler than {{PLURAL:$2|yin byte|$2 bytes}}.',
+'backend-fail-readonly' => 'The storage backend "$1" is read-yinlie the nou. The raison gien is: "\'\'$2\'\'"',
+'backend-fail-synced' => 'The file "$1" is in aen onconseestent state wiin the internal storage backends',
+'backend-fail-connect' => 'Coudna connect til storage backend "$1".',
+'backend-fail-internal' => 'Aen onkent mistak occurred in storage backend "$1".',
+'backend-fail-contenttype' => 'Coudna determine the content type o the file tae store at "$1".',
+'backend-fail-batchsize' => 'The storage backend wis gien ae batch o $1 file {{PLURAL:$1|operation|operations}}; the limit is $2 {{PLURAL:$2|operation|operations}}.',
+'backend-fail-usable' => 'Coudna read or write file "$1" cause o onsuffeecient permeessions or missin directeries/containers.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Coudna connect til the journal database fer storage backend "$1".',
+'filejournal-fail-dbquery' => 'Coudna update the journal database fer storage backend "$1".',
+
+# Lock manager
+'lockmanager-notlocked' => 'Coudna lowse "$1"; it\'s no lockit.',
+'lockmanager-fail-closelock' => 'Coud no claise lock file fer "$1".',
+'lockmanager-fail-deletelock' => 'Coudna delyte lock file fer "$1".',
+'lockmanager-fail-acquirelock' => 'Coudna acquire lock fer "$1".',
+'lockmanager-fail-openlock' => 'Coudna apen lock file fer "$1".',
+'lockmanager-fail-releaselock' => 'Coudna release lock fer "$1".',
+'lockmanager-fail-db-bucket' => 'Coudna contact enoogh lock databases in bucket $1.',
+'lockmanager-fail-db-release' => 'Coudna release locks oan database $1.',
+'lockmanager-fail-svr-acquire' => 'Coudna acquire locks oan server $1.',
+'lockmanager-fail-svr-release' => 'Coudna release locks oan server $1.',
+
+# ZipDirectoryReader
+'zip-file-open-error' => 'Ae mistak wis encoontered whan apenin the file fer ZIP checks.',
+'zip-wrong-format' => 'The speceefied file wisna ae ZIP file.',
+'zip-bad' => 'The file is ae rotten or itherwise onreadable ZIP file.
+It canna be properlie checkt fer securitie.',
+'zip-unsupported' => "The file is ae ZIP file that uises ZIP featurs that'r naw supported bi MediaWiki.
+It canna be properlie checkt fer securitie.",
+
+# Special:UploadStash
+'uploadstash' => 'Uplaid stash',
+'uploadstash-summary' => 'This page provides access til files that ar uplaided or in the process o uplaidin, but ar no yet published til the wiki. Thir files ar no veesible til oniebodie but the uiser that uplaided thaim.',
+'uploadstash-clear' => 'Clear stashed files.',
+'uploadstash-nofiles' => "Ye'v naw stashed files.",
+'uploadstash-badtoken' => 'The performin o that action wis onnsuccessfu, perhaps cause yer eeditin creeedentials hae expired. Gie it anither gae.',
+'uploadstash-errclear' => 'Clearin the files wis onsuccessfu.',
+'uploadstash-refresh' => 'Refresh the leet o files',
+'invalid-chunk-offset' => 'Onvalid chunk affset',
+
+# img_auth script messages
+'img-auth-accessdenied' => 'Access denied.',
+'img-auth-nopathinfo' => 'Missin PATH_INFO.
+Yer server isna set up tae pass this information.
+It micht be CGI-based n canna support img_auth.
+See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
+'img-auth-notindir' => 'Requested path isna in the confeegured uplaid directerie.',
+'img-auth-badtitle' => 'Onable tae cræft ae valid title fae "$1".',
+'img-auth-nologinnWL' => 'Ye\'r naw loggit in n "$1" isna in the whiteleet.',
+'img-auth-nofile' => 'File "$1" disna exeest.',
+'img-auth-isdir' => 'Ye\'r attemptin tae access ae directerie "$1".
+Yinlie file access is premitit.',
+'img-auth-streaming' => 'Streamin "$1".',
+'img-auth-public' => 'The function o img_auth.php is tae ootpit files fae ae preevate wiki.
+This wiki is confeegured aes ae publeec wiki.
+Fr optimal securitie, img_auth.php is disabled.',
+'img-auth-noread' => 'Uiser disna hae access tae read "$1".',
+'img-auth-bad-query-string' => 'The URL haaes aen onvalid speirin string.',
+
+# HTTP errors
+'http-invalid-url' => 'Onvalid URL: $1',
+'http-invalid-scheme' => 'URLs wi the "$1" preefix ar naw supported.',
+'http-request-error' => 'HTTP request failed cause o onkent mistak.',
+'http-read-error' => 'HTTP read mistak.',
+'http-timed-out' => 'HTTP request haes timed oot.',
+'http-curl-error' => 'Mistake fetchin URL: $1',
+'http-bad-status' => 'Thaur wis ae proablem wi the HTTP request: $1 $2',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6' => 'Coudna reach URL',
+'upload-curl-error6-text' => 'The URL gien coudna be reached.
+Please dooble-check that the URL is correct n the site is up.',
+'upload-curl-error28' => 'Uplaid timeoot',
+'upload-curl-error28-text' => 'The site tuik ower lang tae respond.
+Please check that the site is up, wait ae short while n gei it anither gae.
+Ye micht want tae try at ae less busie time.',
 
 'license' => 'Licensing:',
-'license-header' => 'Licensing',
+'license-header' => 'Licensin',
 'nolicense' => 'Nane selected',
+'license-nopreview' => '(Luikower naw available)',
+'upload_source_url' => '(ae valid, publeeclie accessible URL)',
+'upload_source_file' => '(ae file oan yer computer)',
 
 # Special:ListFiles
+'listfiles-summary' => 'This speecial page shaws aw uplaided files.',
+'listfiles_search_for' => 'Rake fer media name:',
 'imgfile' => 'file',
 'listfiles' => 'Eimage leet',
+'listfiles_thumb' => 'Thummnail',
 'listfiles_name' => 'Name',
 'listfiles_user' => 'Uiser',
 'listfiles_size' => 'Size',
+'listfiles_description' => 'Descreeption',
+'listfiles-show-all' => 'Incluide auld versions o eemages',
+'listfiles-latestversion' => 'The Nou version',
+'listfiles-latestversion-yes' => 'Ay',
+'listfiles-latestversion-no' => 'Naw',
 
 # File description page
 'file-anchor-link' => 'Eimage',
-'filehist' => 'File history',
-'filehist-help' => "Click oan a date/time tae view th' file as it appeared at that time.",
-'filehist-deleteone' => 'delete',
+'filehist' => 'File histerie',
+'filehist-help' => 'Clap oan ae date/time tae view the file aes it appeared at that time.',
+'filehist-deleteall' => 'delyte aw',
+'filehist-deleteone' => 'delyte',
 'filehist-revert' => 'revert',
 'filehist-current' => 'current',
 'filehist-datetime' => 'Date/Time',
 'filehist-thumb' => 'Thumbnail',
-'filehist-thumbtext' => 'Thumbnail for version as of $1',
+'filehist-thumbtext' => 'Thumbnail fer version aes o $1',
+'filehist-nothumb' => 'Naw thummnail',
 'filehist-user' => 'Uiser',
 'filehist-dimensions' => 'Dimensions',
 'filehist-comment' => 'Comment',
-'imagelinks' => 'File airtins',
+'filehist-missing' => 'File missin',
+'imagelinks' => 'File uisage',
 'linkstoimage' => 'The follaein {{PLURAL:$1|page airts|$1 pages airt}} tae this file:',
-'nolinkstoimage' => "The'r nae pages airts tae this eimage.",
-'sharedupload-desc-here' => "This file is frae $1 and may be used bi other projects.
-Th' description oan tis [$2 file description page] thare is shown below.",
+'linkstoimage-more' => 'Mair than $1 {{PLURAL:$1|page links|pages link}} til this file.
+The follaein leet shaws the {{PLURAL:$1|first page link|first $1 page links}} til this file yinlie.
+Ae [[Special:WhatLinksHere/$2|ful leet]] is available.',
+'nolinkstoimage' => "Thaur's nae pages that link til this eemage.",
+'morelinkstoimage' => 'See [[Special:WhatLinksHere/$1|mair links]] til this file.',
+'linkstoimage-redirect' => '$1 (file reguidal) $2',
+'duplicatesoffile' => 'The follaein {{PLURAL:$1|file is ae dupleecate|$1 files ar dupleecates}} o this file ([[Special:FileDuplicateSearch/$2|mair details]]):',
+'sharedupload' => 'This file is fae $1 n can be uised bi ither waurks.',
+'sharedupload-desc-there' => 'This file is fae $1 n can be uised bi ither waurks.
+Please see the [$2 file deescreeption page] fer further information.',
+'sharedupload-desc-here' => 'This file is fae $1 n micht be uised bi ither waurks.
+The descreeption oan its [$2 file descreeption page] thaur is shawn ablo.',
+'sharedupload-desc-edit' => 'This file is fae $1 n can be uised bi ither waurks.
+Perhaps ye want tae eedit the deescreeption oan its [$2 file deescreeption page] thaur.',
+'sharedupload-desc-create' => 'This file is fae $1 n can be uised bi ither waurks.
+Perhaps ye want tae eedit the deescreeption oan its [$2 file deescreeption page] thaur.',
+'filepage-nofile' => 'Naw file b this name exeests.',
+'filepage-nofile-link' => 'Nae file bi this name exeests, but ye can [$1 uplaid it].',
+'uploadnewversion-linktext' => 'Uplaid ae new version o this file',
+'shared-repo-from' => 'fae $1',
+'shared-repo' => 'ae shared repositerie',
+'upload-disallowed-here' => 'Ye canna owerwrite this file.',
 
 # File reversion
 'filerevert' => 'Revert $1',
 'filerevert-legend' => 'Revert file',
+'filerevert-intro' => "Ye'r aboot tae revert the file '''[[Media:$1|$1]]''' til the [$4 version aes o $3, $2].",
+'filerevert-comment' => 'Raison:',
+'filerevert-defaultcomment' => 'Reverted til version aes o $2, $1',
 'filerevert-submit' => 'Revert',
+'filerevert-success' => "'''[[Media:$1|$1]]''' haes been reverted til the [$4 version aes o $3, $2].",
+'filerevert-badversion' => "Thaur's naw preeveeoos local version o this file wi the gien timestamp.",
 
 # File deletion
-'filedelete-submit' => 'Delete',
+'filedelete' => 'Delyte $1',
+'filedelete-legend' => 'Delyte file',
+'filedelete-intro' => "Ye'r aboot tae delyte the file '''[[Media:$1|$1]]''' alang wi aw o its histerie.",
+'filedelete-intro-old' => "Ye'r delytin the version o '''[[Media:$1|$1]]''' aes o [$4 $3, $2].",
+'filedelete-comment' => 'Raison:',
+'filedelete-submit' => 'Delyte',
+'filedelete-success' => "'''$1''' haes been delytit.",
+'filedelete-success-old' => "The version o '''[[Media:$1|$1]]''' aes o $3, $2 haes been delytit.",
+'filedelete-nofile' => "'''$1''' disna exeest.",
+'filedelete-nofile-old' => "Thaur's naw archived version o '''$1''' wi the speceefied attreebutes.",
+'filedelete-otherreason' => 'Ither/addeetional raison:',
+'filedelete-reason-otherlist' => 'Ither raison',
+'filedelete-reason-dropdown' => '*Commyn delyte raisons
+** Copiericht violation
+** Dupleecatit file',
+'filedelete-edit-reasonlist' => 'Eedit delyte raisons',
+'filedelete-maintenance' => 'Delytion n restoration o files tempralie disabled during maintenance.',
+'filedelete-maintenance-title' => 'Canna delyte file',
 
 # MIME search
+'mimesearch' => 'MIME rake',
+'mimesearch-summary' => 'This page enables the filterin o files fer thair MIME type.
+Input: contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'mimetype' => 'MIME type:',
 'download' => 'dounlaid',
 
+# Unwatched pages
+'unwatchedpages' => 'Onwatched pages',
+
+# List redirects
+'listredirects' => 'Leet o reguidals',
+
 # Unused templates
 'unusedtemplates' => 'Templates that arena uised',
-'unusedtemplatestext' => 'This page leets aw pages in the template namespace that haena been uised in anither page. Mynd an check for ither links tae the templates afore deletin them.',
+'unusedtemplatestext' => "This page leets aw pages in the {{ns:template}} namespace that's naw incuidit in anither page. Mynd n check fer ither links til the templates afore delytin thaim.",
 'unusedtemplateswlh' => 'ither links',
 
 # Random page
 'randompage' => 'Wale page allevolie',
+'randompage-nopages' => "Thaur's naw pages in the follaein {{PLURAL:$2|namespace|namespaces}}: $1.",
+
+# Random page in category
+'randomincategory' => 'Random page in categerie',
+'randomincategory-invalidcategory' => '"$1" isna ae valid categerie name.',
+'randomincategory-nopages' => "Thaur's naw pages in the [[:Category:$1|$1]] categerie.",
+'randomincategory-selectcategory' => 'Get random page fae categerie: $1 $2.',
+'randomincategory-selectcategory-submit' => 'Gae',
+
+# Random redirect
+'randomredirect' => 'Random reguidal',
+'randomredirect-nopages' => 'Thaur\'s naw reguidals in the namespace "$1".',
 
 # Statistics
-'statistics' => 'Statistics',
-'statistics-header-pages' => 'Page statistics',
-'statistics-header-edits' => 'Edit statistics',
-'statistics-header-views' => 'View statistics',
-'statistics-header-users' => 'Uiser statistics',
-'statistics-header-hooks' => 'Ither statistics',
+'statistics' => 'Stateestics',
+'statistics-header-pages' => 'Page stateestics',
+'statistics-header-edits' => 'Eidit stateestics',
+'statistics-header-views' => 'View stateestics',
+'statistics-header-users' => 'Uiser stateestics',
+'statistics-header-hooks' => 'Ither stateestics',
 'statistics-pages' => 'Pages',
+'statistics-pages-desc' => 'Aw pages in the wiki, incluidin tauk pages, reguidals, etc.',
+'statistics-files' => 'Uplaided files',
+'statistics-edits' => 'Page eedits sin {{SITENAME}} wis set up',
+'statistics-edits-average' => 'Average eedits per page',
+'statistics-views-total' => 'Seeins total',
+'statistics-views-total-desc' => "Seeins til non-exeestant pages n speecial pages'r naw incluidit",
+'statistics-views-peredit' => 'Seeins per eedit',
+'statistics-users' => 'Registered [[Special:ListUsers|uisers]]',
+'statistics-users-active' => 'Acteeve uisers',
+'statistics-users-active-desc' => 'Uisers that hae performed aen action in the laist {{PLURAL:$1|day|$1 days}}',
+'statistics-mostpopular' => 'Maist seen pages',
+
+'pageswithprop' => 'Pages wi ae page propertie',
+'pageswithprop-legend' => 'Pages wi ae page propertie',
+'pageswithprop-text' => 'This page leets pages that uise ae particular page propertie.',
+'pageswithprop-prop' => 'Propertie name:',
+'pageswithprop-submit' => 'Gae',
+'pageswithprop-prophidden-long' => 'lang tex propertie value skaukt ($1)',
+'pageswithprop-prophidden-binary' => 'binarie propertie value skaukt ($1)',
 
 'doubleredirects' => 'Dooble reguidals',
-'doubleredirectstext' => 'Ilka raw hauds airtins tae the first an saicont reguidal, as weel as the first line o the saicont reguidal text, for usual giein the "rael" tairget page, that the first reguidal shuid pynt til.',
+'doubleredirectstext' => 'This page leets pages that reguide til ither reguidal pages.
+Ilka raw contains links til the first n seicont reguidals, n the tairget o the seicont reguidal ava, this is uisuallie the "real" tairget page whaur the first reguidal shid poynt.
+<del>Crossed oot</del> entries hae been solved.',
+'double-redirect-fixed-move' => '[[$1]] haes been muived.
+It nou reguides til [[$2]].',
+'double-redirect-fixed-maintenance' => 'Fixin dooble reguidal fae [[$1]] til [[$2]].',
+'double-redirect-fixer' => 'Reguidal fixer',
 
 'brokenredirects' => 'Brucken reguidals',
-'brokenredirectstext' => 'The follaein reguidals airts tae pages that disna exist.',
-'brokenredirects-edit' => 'edit',
-'brokenredirects-delete' => 'delete',
+'brokenredirectstext' => 'The folling redirects link til non-existent pages:',
+'brokenredirects-edit' => 'eedit',
+'brokenredirects-delete' => 'delyte',
 
 'withoutinterwiki' => 'Pages athoot leid links',
+'withoutinterwiki-summary' => 'The follaein pages dinan link til ither leid versions.',
 'withoutinterwiki-legend' => 'Prefix',
 'withoutinterwiki-submit' => 'Shaw',
 
+'fewestrevisions' => 'Pages wi the fewest reeveesions',
+
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|category|categories}}',
 'nlinks' => '$1 {{PLURAL:$1|link|links}}',
 'nmembers' => '$1 {{PLURAL:$1|membir|membirs}}',
-'nrevisions' => '$1 {{PLURAL:$1|reveision|reveisions}}',
+'nmemberschanged' => '$1 → $2 {{PLURAL:$2|memmer|memmers}}',
+'nrevisions' => '$1 {{PLURAL:$1|reveesion|reveesions}}',
 'nviews' => '$1 {{PLURAL:$1|view|views}}',
+'nimagelinks' => 'Uised oan $1 {{PLURAL:$1|page|pages}}',
+'ntransclusions' => 'uised oan $1 {{PLURAL:$1|page|pages}}',
+'specialpage-empty' => "Thaur's naw ootcomes fer this report.",
+'lonelypages' => 'Orphant pages',
+'lonelypagestext' => "The follaein pages'r naw linkt fae or transcluided intil ither pages in {{SITENAME}}.",
 'uncategorizedpages' => 'Uncategoreised pages',
 'uncategorizedcategories' => 'Uncategoreised categories',
+'uncategorizedimages' => 'Oncategerized files',
+'uncategorizedtemplates' => 'Oncategerized templates',
 'unusedcategories' => 'Unuised categories',
 'unusedimages' => 'Unuised images',
 'wantedcategories' => 'Wantit categories',
 'wantedpages' => 'Wantit pages',
+'wantedpages-badtitle' => 'Onvalid title in ootcome set: $1',
+'wantedfiles' => 'Wantit files',
+'wantedfiletext-cat' => 'The follaein files ar uised but dinna exeest. Files fae foreign repositeries micht be leetit despite exeestin. Onie sic false poseeteeves will be <del>struck oot</del>. Addeetionallie, pages that embed files that dinna exeest ar leetit in [[:$1]].',
+'wantedfiletext-nocat' => 'The follaein files ar uised but dinna exeest. Files fae foreign repositeries micht be leetit despite exeestin. Onie sic false poseeteeves will be <del>struck oot</del>.',
+'wantedtemplates' => 'Wantit templates',
 'mostlinked' => 'Maist airtit-til pages',
 'mostlinkedcategories' => 'Maist airtit-til categories',
-'mostcategories' => 'Airticles wi the maist categories',
+'mostlinkedtemplates' => 'Maist linkt-til templates',
+'mostcategories' => 'Airticles wi the maist categeries',
 'mostimages' => 'Maist uised eimages',
+'mostinterwikis' => 'Pages wi the maist interwikis',
 'mostrevisions' => 'Maist revised airticles',
-'prefixindex' => 'All pages with prefix',
+'prefixindex' => 'Aw pages wi prefix',
+'prefixindex-namespace' => 'Aw pages wi preefix ($1 namespace)',
+'prefixindex-strip' => 'Strip preefix in leet',
 'longpages' => 'Lang pages',
 'deadendpages' => 'Deid-end pages',
+'deadendpagestext' => 'The follaein pages dinna link til ither pages in {{SITENAME}}.',
+'protectedpages' => 'Pretectit pages',
+'protectedpages-indef' => 'Indefineet pretections yinlie',
+'protectedpages-summary' => 'This page leets existin pages that ar nou protectit. Fer a leet o titles that ar protectit fae cræftin, see [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
+'protectedpages-cascade' => 'Cascadin protections yinlie',
+'protectedpages-noredirect' => 'Skauk reguidals',
+'protectedpagesempty' => 'Naw pages ar Nou pretectit wi thir parameters.',
+'protectedpages-timestamp' => 'Timestamp.',
+'protectedpages-page' => 'Page.',
+'protectedpages-expiry' => 'Dies',
+'protectedpages-performer' => 'Protecting uisser',
+'protectedpages-params' => 'Protection guidins',
+'protectedpages-reason' => 'Raison',
+'protectedpages-unknown-timestamp' => "Onken't",
+'protectedpages-unknown-performer' => "Onken't user",
+'protectedtitles' => 'Pretectit titles',
+'protectedtitles-summary' => 'This page leets titles that ar nou protectit fae cræftin. Fer ae leet o exeestin pages that ar protectit, see [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
+'protectedtitlesempty' => 'Naw titles ar the Nou protected wi thir parameters.',
 'listusers' => 'Uiser leet',
-'usercreated' => 'Created on $1 at $2',
+'listusers-editsonly' => 'Shaw yinlie uisers wi eedits',
+'listusers-creationsort' => 'Sort bi cræftin date',
+'listusers-desc' => 'Sort in descendin order',
+'usereditcount' => '$1 {{PLURAL:$1|eedit|eedits}}',
+'usercreated' => '{{GENDER:$3|Cræftit}} oan $1 at $2',
 'newpages' => 'New pages',
 'newpages-username' => 'Uisername:',
 'ancientpages' => 'Auldest pages',
-'move' => 'Flit',
-'movethispage' => 'Flit this page',
-'unusedimagestext' => '<p>Please mynd that ither wabsteids micht airt til an eimage wi a direct URL, an sae micht still be leetit here but be in aictive uiss.</p>',
+'move' => 'Muiv',
+'movethispage' => 'Muiv this page',
+'unusedimagestext' => 'The follaein files exeest but arna embeddit in onie page.
+Please mynd that ither wab sites micht link til ae file wi ae direct URL, n sae micht still be leetit here despite being in acteeve uiss.',
 'unusedcategoriestext' => 'The follaein category pages exists, tho nae ither airticle or category maks uiss o thaim.',
 'notargettitle' => 'Nae target',
 'notargettext' => "Ye hivna specifee'd a tairget page or uiser tae perform this function on.",
+'nopagetitle' => 'Naw sic tairget page',
+'nopagetext' => "The tairget page that ye'v speeceefied disna exeest.",
 'pager-newer-n' => '{{PLURAL:$1|newer 1|newer $1}}',
 'pager-older-n' => '{{PLURAL:$1|older 1|older $1}}',
+'suppress' => 'Owersicht',
+'querypage-disabled' => 'This speecial page is disablit fer performance raisons.',
 
 # Book sources
 'booksources' => 'Beuk sources',
-'booksources-search-legend' => 'Search fur book sources',
+'booksources-search-legend' => 'Rake fer buik soorces',
 'booksources-go' => 'Gang',
+'booksources-text' => "Ablo is ae leet o links til ither sites that sell new n uised buiks, n mmicht hae further information aneat buiks that ye'r seekin ava:",
+'booksources-invalid-isbn' => 'The gien ISBN disna seem tae be valid; check fer mistaks copiein fae the oreeginal soorce.',
 
 # Special:Log
-'specialloguserlabel' => 'Uiser:',
-'speciallogtitlelabel' => 'Teitle:',
+'specialloguserlabel' => 'Performer:',
+'speciallogtitlelabel' => 'Target (title or uiser):',
 'log' => 'Logs',
 'all-logs-page' => 'Aw public logs',
-'alllogstext' => 'Combined display o uplaid, deletion, protection, blockin, an administrator logs. Ye can narra doon the view bi walin a log type, the uiser name, or the affectit page.',
+'alllogstext' => 'Combined displey o aw available logs o {{SITENAME}}.
+Ye can narrae doon the whit ye see bi selectin ae log type, the uisername (case-sensiteeve), or the affected page (case-sensiteeve ava).',
 'logempty' => 'Nae matchin items in log.',
+'log-title-wildcard' => 'Rake titles stairtin wi this tex',
+'showhideselectedlogentries' => 'Chynge veesibeelitie o selectit log entries',
 
 # Special:AllPages
-'allpages' => 'Aa pages',
-'alphaindexline' => '$1 tae $2',
+'allpages' => 'Aw pages',
+'alphaindexline' => '$1 til $2',
 'nextpage' => 'Neist page ($1)',
 'prevpage' => 'Page afore ($1)',
 'allpagesfrom' => 'Shaw pages stairtin at:',
+'allpagesto' => 'Displey pages endin at:',
 'allarticles' => 'Aa airticles',
 'allinnamespace' => 'Aa pages ($1 namespace)',
 'allpagessubmit' => 'Gang',
 'allpagesprefix' => 'Shaw pages wi prefix:',
 'allpagesbadtitle' => 'The page teitle gien wis wrang or haed a cross-lied or cross-wiki prefix. It micht hae ane or twa characters that canna be uised in teitles',
 'allpages-bad-ns' => '{{SITENAME}} disna hae a namespace "$1".',
+'allpages-hide-redirects' => 'Skauk reguidals',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => "Ye'r seein ae cached version o this page, this can be up til $1 auld.",
+'cachedspecial-viewing-cached-ts' => "Ye'r seein ae cached version o this page, this micht naw be compleatelie actual.",
+'cachedspecial-refresh-now' => 'See latest.',
 
 # Special:Categories
 'categories' => 'Categories',
-'categoriespagetext' => 'The follaein categories exist in the wiki.
-[[Special:UnusedCategories|Unused categories]] are not shown here.
-Also see [[Special:WantedCategories|wanted categories]].',
+'categoriespagetext' => 'The follaein {{PLURAL:$1|categerie contains|categeries contain}} pages or media.
+[[Special:UnusedCategories|Onuised categeries]] arna shawn here.
+See [[Special:WantedCategories|wanted categeries]] ava.',
+'categoriesfrom' => 'Displey categeries stairtin at:',
 'special-categories-sort-count' => 'sairt bi coont',
-'special-categories-sort-abc' => 'sairt by the alphabet',
+'special-categories-sort-abc' => 'sairt bi the alphabet',
 
 # Special:DeletedContributions
-'sp-deletedcontributions-contribs' => 'contreibutions',
+'deletedcontributions' => 'Delytit uiser contreebutions',
+'deletedcontributions-title' => 'Delytit uiser contreebutions',
+'sp-deletedcontributions-contribs' => 'contreebutions',
 
 # Special:LinkSearch
+'linksearch' => 'External links rake',
+'linksearch-pat' => 'Rake pattern:',
 'linksearch-ns' => 'Namespace:',
 'linksearch-ok' => 'Rake',
+'linksearch-text' => 'Wildcairds like "*.wikipedia.org" can be uised.
+Needs at least ae top-level domain, fer example "*.org".<br />
+Supported {{PLURAL:$2|protocol|protocols}}: <code>$1</code> (defaults to http:// gif naw protocol is speceefied).',
 'linksearch-line' => '$1 is linked from $2',
+'linksearch-error' => 'Wildcards micht appear yinlie at the stairt o the hoastname.',
 
 # Special:ListUsers
+'listusersfrom' => 'Displey uisers stairtin at:',
 'listusers-submit' => 'Shaw',
+'listusers-noresult' => 'Naw uiser foond.',
 'listusers-blocked' => '(blockit)',
 
+# Special:ActiveUsers
+'activeusers' => 'Acteeve uisers leet',
+'activeusers-intro' => 'This is ae leet o uisers that had some kynd o acteevitie wiin the last $1 {{PLURAL:$1|day|days}}.',
+'activeusers-count' => '$1 {{PLURAL:$1|action|actions}} in the laist {{PLURAL:$3|day|$3 days}}',
+'activeusers-from' => 'Displey uisers stairtin at:',
+'activeusers-hidebots' => 'Skauk bots',
+'activeusers-hidesysops' => 'Skauk admeenistraters',
+'activeusers-noresult' => 'Naw uisers foond.',
+
 # Special:ListGroupRights
+'listgrouprights' => 'Uiser groop richts',
+'listgrouprights-summary' => 'The follaein is aae leet o uiser groops defined oan this wiki, wi thair associated access richts.
+There micht be [[{{MediaWiki:Listgrouprights-helppage}}|addeetional information]] aneat indiveedual richts.',
+'listgrouprights-key' => 'Legend:
+* <span class="listgrouprights-granted">Grantit richt</span>
+* <span class="listgrouprights-revoked">Revokt richt</span>',
+'listgrouprights-group' => 'Groop',
+'listgrouprights-rights' => 'Richts',
+'listgrouprights-helppage' => 'Help:Groop richts',
 'listgrouprights-members' => '(leet o members)',
+'listgrouprights-addgroup' => 'Add {{PLURAL:$2|groop|groops}}: $1',
+'listgrouprights-removegroup' => 'Remuiv {{PLURAL:$2|grop|groops}}: $1',
+'listgrouprights-addgroup-all' => 'Add aw groops',
+'listgrouprights-removegroup-all' => 'Remui aw groops',
+'listgrouprights-addgroup-self' => 'Add {{PLURAL:$2|groop|groops}} til yer accoont: $1',
+'listgrouprights-removegroup-self' => 'Remuiv {{PLURAL:$2|groop|groops}} fae yer accoont: $1',
+'listgrouprights-addgroup-self-all' => 'Add aw groops til yer accoont',
+'listgrouprights-removegroup-self-all' => 'Remuiv aw groops fae yer accoont',
 
 # Email user
 'mailnologin' => 'Nae send address',
-'mailnologintext' => 'Ye maun be [[Special:UserLogin|loggit in]] an hae a valid e-mail address in yer [[Special:Preferences|preferences]] tae send e-mail til ither uisers.',
+'mailnologintext' => 'Ye maun be [[Special:UserLogin|loggit in]] n hae ae valid wab-mail address in yer [[Special:Preferences|preferences]] tae send Wab-mail til ither uisers.',
 'emailuser' => 'E-mail this uiser',
+'emailuser-title-target' => 'Wab-mail this {{GENDER:$1|uiser}}',
+'emailuser-title-notarget' => 'Wab-mail uiser',
+'emailpage' => 'Wab-mail uiser',
+'emailpagetext' => 'Ye can uise the form ablo tae send ae wab-mail message til this {{GENDER:$1|uiser}}.
+The wab-mail address that ye entered in [[Special:Preferences|yer uiser preeferances]] will kith aes the "Fae" address o the wab-mail, sae that the receepient will be able tae replie directlie til ye.',
+'usermailererror' => 'Mail object returned mistak:',
+'defemailsubject' => '{{SITENAME}} wab-mail fae uiser "$1"',
+'usermaildisabled' => 'Uiser wab-mail disablit',
+'usermaildisabledtext' => 'Ye canna send wab-mail til ither uisers oan this wiki',
 'noemailtitle' => 'Nae e-mail address',
-'noemailtext' => "This uiser haesna specifee'd a valid e-mail address, or haes chuisen no tae receive e-mail frae ither uisers.",
+'noemailtext' => 'This uiser haesna speceefied ae valid wab-mail address.',
+'nowikiemailtitle' => 'Naw wab-mail permitit',
+'nowikiemailtext' => 'This uiser haes choosen tae naw receeve wab-mail fae ither uisers.',
+'emailnotarget' => 'Non-exeestent or onvalit uisername fer receepeeant.',
+'emailtarget' => 'Enter uisername o reeceepeeant',
+'emailusername' => 'Uisername:',
+'emailusernamesubmit' => 'Haun-in',
+'email-legend' => 'Send ae wab-mail til anither {{SITENAME}} uiser',
+'emailfrom' => 'Fae:',
+'emailto' => 'Til:',
+'emailsubject' => 'Aneat:',
 'emailmessage' => 'Message:',
+'emailccme' => 'Wab-mail me ae copie o ma message.',
+'emailccsubject' => 'Copie o yer message til $1: $2',
+'emailsent' => 'Wab-mail sent',
+'emailsenttext' => 'Yer wab-mail message haes been sent.',
+'emailuserfooter' => 'This wab-mail wis sent bi $1 til $2 bi the "Wab-mail uiser" function at {{SITENAME}}.',
+
+# User Messenger
+'usermessage-summary' => 'Leain seestem message.',
+'usermessage-editor' => 'Seestem messenger',
 
 # Watchlist
 'watchlist' => 'Ma watchleet',
 'mywatchlist' => 'Ma watchleet',
 'watchlistfor2' => 'For $1 $2',
-'nowatchlist' => 'Ye hivna onie eitems on yer watchleet.',
+'nowatchlist' => "Ye'v nae eitems oan yer watchleet.",
+'watchlistanontext' => 'Please $1 tae see or eedit eetems oan yer watchlet.',
 'watchnologin' => 'Nae loggit in',
 'watchnologintext' => 'Ye maun be [[Special:UserLogin|loggit in]] tae modify yer watchleet.',
-'addedwatchtext' => "The page \"<nowiki>\$1</nowiki>\" haes been eikit ti yer [[Special:Watchlist|watchleet]]. Futur chynges ti this page an its associate Collogue page will be leetit thare, an the page will kythe '''bauldit''' in the [[Special:RecentChanges|leet o recent chynges]] ti mak it mair eith tae pick oot. <p>Gin ye want ti remuve the page frae yer watchleet later, dab \"Stop watching\" in the sidebar.",
-'removedwatchtext' => 'The page "[[:$1]]" haes been remuved frae yer watchleet.',
+'addwatch' => 'Add til watchleet',
+'addedwatchtext' => 'The page "[[:$1]]" haes been added til yer [[Special:Watchlist|watchleet]].
+Futur chynges til this page n its associated tauk page will be leeted thaur.',
+'removewatch' => 'Remuiv fae watchleet',
+'removedwatchtext' => 'The page "[[:$1]]" haes been remuied fae [[Special:Watchlist|yer watchleet]].',
 'watch' => 'Watch',
 'watchthispage' => 'Leuk ower this page',
 'unwatch' => 'Unwatch',
-'notanarticle' => 'No a content page',
-'watchlist-details' => "{{PLURAL:$1|$1 page|$1 pages}} on yer watchleet, nae countin' collogue pages.",
+'unwatchthispage' => 'Stap watchin',
+'notanarticle' => 'Naw ae content page',
+'notvisiblerev' => 'The last reeveesion bi ae differant uiser haes been delytit',
+'watchlist-details' => '{{PLURAL:$1|$1 page|$1 pages}} oan yer watchleet, na coontin tauk pages.',
+'wlheader-enotif' => 'Wab-mail annooncemant is enabled.',
+'wlheader-showupdated' => "Pages that hae been chynged sin ye last veesitit thaim ar shawn in '''baud'''.",
+'watchmethod-recent' => 'checkin recent eedits fer watched pages',
+'watchmethod-list' => 'checking watched pages fer recent eedits',
 'watchlistcontains' => 'Yer watchleet contains $1 {{PLURAL:$1|page|pages}}.',
-'iteminvalidname' => "Trouble wi eitem '$1', invalid name...",
+'iteminvalidname' => "Proablem wi eetem '$1', onvalit name...",
+'wlnote2' => 'Ablo ar the chynges in the hainmaist {{PLURAL:$1|hoor|<strong>$1</strong> hours}}, aes o $3, $2.',
 'wlshowlast' => 'Shaw lest $1 hours $2 days $3',
 'watchlist-options' => 'Watchleet options',
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'Watchin...',
 'unwatching' => 'Unwatchin...',
+'watcherrortext' => 'Ae mistak occurred while chyngin yer watchleet settins fer "$1".',
 
+'enotif_mailer' => '{{SITENAME}} annooncemant mailer',
 'enotif_reset' => 'Merk aa pages visitit',
-'enotif_lastvisited' => 'Hae a leuk at $1 for aa chynges sin yer last visit.',
-'created' => 'creatit',
+'enotif_impersonal_salutation' => '{{SITENAME}} uiser',
+'enotif_subject_deleted' => '{{SITENAME}} page $1 haes been {{GENDER:$2|delytit}} bi $2',
+'enotif_subject_created' => '{{SITENAME}} page $1 haes been {{GENDER:$2|cræftit}} bi $2',
+'enotif_subject_moved' => '{{SITENAME}} page $1 haes been {{GENDER:$2|muived}} bi $2',
+'enotif_subject_restored' => '{{SITENAME}} page $1 haes been {{GENDER:$2|restored}} bi $2',
+'enotif_subject_changed' => '{{SITENAME}} page $1 haes been {{GENDER:$2|chynged}} bi $2',
+'enotif_body_intro_deleted' => 'The {{SITENAME}} page $1 haes been {{GENDER:$2|delytit}} oan $PAGEEDITDATE bi $2, see $3.',
+'enotif_body_intro_created' => 'The {{SITENAME}} page $1 haes been {{GENDER:$2|cræftit}} oan $PAGEEDITDATE bi $2, see $3 fer the Nou reeveesion.',
+'enotif_body_intro_moved' => 'The {{SITENAME}} page $1 haes been {{GENDER:$2|muived}} oan $PAGEEDITDATE bi $2, see $3 fer the Nou reeveesion.',
+'enotif_body_intro_restored' => 'The {{SITENAME}} page $1 haes been {{GENDER:$2|restored}} oan $PAGEEDITDATE bi $2, see $3 fer the Nou reveesion.',
+'enotif_body_intro_changed' => 'The {{SITENAME}} page $1 haes been {{GENDER:$2|chynged}} oan $PAGEEDITDATE bi $2, see $3 fer the Nou reeveesion.',
+'enotif_lastvisited' => 'Hae ae leuk at $1 fer aa chynges sin yer laist veesit.',
+'enotif_lastdiff' => 'See $1 tae see this chynge.',
+'enotif_anon_editor' => 'anonymoos uiser $1',
+'enotif_body' => 'Dear $WATCHINGUSERNAME,
+
+$PAGEINTRO $NEWPAGE
+
+Eediter\'s ootline: $PAGESUMMARY $PAGEMINOREDIT
+
+Contact the eediter:
+mail: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Thaur\'ll be naw ither annooncemants in case o further acteevitie onless ye veesit this page while loggit in. Ye coud forby reset the annooncemant flags fer aw yer watched pages oan yer watchleet.
+
+Yer freendlie {{SITENAME}} annooncemant system
+
+--
+Taae chynge yer wab-mail annooncemant settins, veesit
+{{canonicalurl:{{#special:Preferences}}}}
+
+Tae chynge yer watchleet settins, veesit
+{{canonicalurl:{{#special:EditWatchlist}}}}
+
+Tae delyte the page fae yer watchleet, veesit
+$UNWATCHURL
+
+Feedback n further asseestance:
+{{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'cræftit',
 'changed' => 'chynged',
 
 # Delete
-'deletepage' => 'Delete page',
+'deletepage' => 'Delyte page',
 'excontent' => "content wis: '$1'",
-'excontentauthor' => "content wis: '$1' (an the ae contreibutor wis '[[Special:Contributions/$2|$2]]')",
+'excontentauthor' => "content wis: '$1' (n the ae contreebuter wis '[[Special:Contributions/$2|$2]]')",
 'exbeforeblank' => "content afore blankin wis: '$1'",
 'exblank' => 'page wis tuim',
-'delete-confirm' => 'Delete "$1"',
-'delete-legend' => 'Delete',
-'historywarning' => "Warnin: The page ye're aboot tae delete haes a history:",
-'confirmdeletetext' => "Ye'r aboot tae permanently delete a page or eimage alang wi aa its history frae the database.
+'delete-confirm' => 'Delyte "$1"',
+'delete-legend' => 'Delyte',
+'historywarning' => "<strong>Warnishment:</strong> The page that ye'r aboot tae delyte haes ae histerie wi approximatelie $1 {{PLURAL:$1|reveesion|reveesions}}:",
+'confirmdeletetext' => "Ye'r aboot tae delyte ae page or eemage alang wi aw its histerie fae the database.
 Please confirm that ye intend tae dae this, that ye unnerstaun the consequences,
-an that ye'r daein this in accord wi [[{{MediaWiki:Policy-url}}]].",
+n that ye'r daein this in accord wi [[{{MediaWiki:Policy-url}}]].",
 'actioncomplete' => 'Action duin',
 'actionfailed' => 'Action failed',
-'deletedtext' => '"$1" haes been delete. See $2 for a record o recent deletions.',
-'dellogpage' => 'Deletion log',
-'dellogpagetext' => 'Ablo is a leet o the maist recent deletions.',
-'deletionlog' => 'deletion log',
-'reverted' => 'Revertit tae aulder reveision',
+'deletedtext' => '"$1" haes been delytit. See $2 fer ae record o recent delytions.',
+'dellogpage' => 'Delytion log',
+'dellogpagetext' => 'Ablo is ae leet o the maist recynt delytions.',
+'deletionlog' => 'delytion log',
+'reverted' => 'Revertit til aulder reveesion',
 'deletecomment' => 'Raeson:',
+'deleteotherreason' => 'Ither/addeetional raison:',
 'deletereasonotherlist' => 'Ither raeson',
+'deletereason-dropdown' => '* Commyn delyte raisons
+** Spam
+** Vandaleesm
+** Copiericht violation
+** Writer request
+** Broken reguidal',
+'delete-edit-reasonlist' => 'Eedit delytion raisons',
+'delete-toobig' => 'This page haes ae muckle eedit histerie, ower $1 {{PLURAL:$1|reveesion|reveesions}}.
+Delytion o sic pages haes been restrictit tae stap accidental disruption o {{SITENAME}}.',
+'delete-warning-toobig' => 'This page haes ae muckle eedit histerie, ower $1 {{PLURAL:$1|reveesion|reveesions}}.
+Delytin it micht disrupt database operations o {{SITENAME}};
+proceed wi caution.',
+'deleting-backlinks-warning' => "'''Warnishment:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Ither pages]] link til or transcluide the page ye'r aboot tae delyte.",
 
 # Rollback
 'rollback' => 'Row back edits',
 'rollback_short' => 'Rowback',
 'rollbacklink' => 'rowback',
+'rollbacklinkcount' => 'rowback $1 {{PLURAL:$1|eedit|eedits}}',
+'rollbacklinkcount-morethan' => 'rowback mair than $1 {{PLURAL:$1|eedit|eedits}}',
 'rollbackfailed' => 'Rowback failed',
-'cantrollback' => 'Canna revert edit; last contreibutor is the ae author o this page.',
-'alreadyrolled' => 'Canna rowback last edit o [[$1]] bi [[User:$2|$2]] ([[User talk:$2|Talk]]); some ither bodie haes editit or rowed back the page aareadies. Last edit wis bi [[User:$3|$3]] ([[User talk:$3|Talk]]).',
-'editcomment' => "The edit comment wis: \"''\$1''\".",
-'revertpage' => 'Revertit edit o [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]), chynged back tae last version bi [[User:$1|$1]]',
+'cantrollback' => 'Canna revert eidit; laist contreebuter is the ae auther o this page.',
+'alreadyrolled' => 'Canna rollback laist eidit o [[:$1]] bi [[User:$2|$2]] ([[User talk:$2|tauk]]{{int:pipe-separater}}[[Special:Contributions/$2|{{int:contribslink}}]]);
+some ither bodie haes eidited or rolled back the page awreadie.
+
+The laist eidit til the page wis bi [[User:$3|$3]] ([[User talk:$3|tauk]]{{int:pipe-separater}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+'editcomment' => "The eidit summarie wis: \"''\$1''\".",
+'revertpage' => 'Reverted eidits bi [[Special:Contributions/$2|$2]] ([[User talk:$2|tauk]]) til laist reveesion bi [[User:$1|$1]]',
+'revertpage-nouser' => 'Reverted eedits bi ae skaukt uiser til laist revesion bi {{GENDER:$1|[[User:$1|$1]]}}',
+'rollback-success' => 'Reverted eedits b $1;
+chynged back til the laist reveesion bi $2.',
+
+# Edit tokens
+'sessionfailure' => 'Thaur seems tae be ae proablem wi yer login session;
+this action haes been canceled aes ae precaution again session hijackin.
+Gang back til the preeveeoos page, relaid that page n than gie it anither gae.',
 
 # Protect
 'protectlogpage' => 'Fend log',
-'protectlogtext' => 'Ablo is a leet o page locks/unlocks. See the [[Special:ProtectedPages|protected pages list]] for the list of currently operational page protections.',
+'protectlogtext' => 'Ablow is ae leet o chynges til page protections.
+See the [[Special:ProtectedPages|protected pages leet]] fer the leet o currently operational page protections.',
 'protectedarticle' => 'protectit "[[$1]]"',
-'unprotectedarticle' => 'unprotectit "[[$1]]"',
+'modifiedarticleprotection' => 'chynged protection level fer "[[$1]]"',
+'unprotectedarticle' => 'remuied protection fae "[[$1]]"',
+'movedarticleprotection' => 'muived protection settins fae "[[$2]]" til "[[$1]]"',
 'protect-title' => 'Protectin "$1"',
+'protect-title-notallowed' => 'See protection level o "$1"',
 'prot_1movedto2' => '[[$1]] flittit til [[$2]]',
+'protect-badnamespace-text' => 'Pages in this namespace canna be protected.',
+'protect-norestrictiontypes-text' => "This page canna be protected aes thaur's naw restreection types available.",
 'protectcomment' => 'Raeson:',
 'protectexpiry' => 'Expires:',
-'protect-text' => "Ye can see an chynge the protection level here for the page '''$1'''.",
+'protect_expiry_invalid' => 'Expirie time is onvalit.',
+'protect_expiry_old' => 'Expirie time is in the past.',
+'protect-unchain-permissions' => 'Lowse mair protect opties',
+'protect-text' => 'Ye can see n chynge the protection level here fer the page <strong>$1</strong>.',
+'protect-locked-blocked' => 'Ye canna chynge protection levels while blockt.
+Here ar the settins fer the page <strong>$1</strong> the nou:',
+'protect-locked-dblock' => 'Protection levels canna be chynged cause o aen acteeve database lock.
+Here ar the settins fer the page <strong>$1</strong> nou:',
+'protect-locked-access' => 'Yer accont disna hae permeession tae chynge page protection levels.
+Here ar the settins fer the page <strong>$1</strong> the nou:',
+'protect-cascadeon' => "This page is nou protected cause it is incluided in the follaein {{PLURAL:$1|page, this haes|pages, thir hae}} cascadin protection turned oan.
+Ye can chynge this page's protection level, but it will na affect the cascadin protection.",
 'protect-default' => 'Allow aw uisers',
-'protect-level-autoconfirmed' => 'Baur new and unregistered uisers',
-'protect-level-sysop' => 'Juist administrators',
+'protect-fallback' => 'permit yinlie uisers wi "$1" permission',
+'protect-level-autoconfirmed' => 'Allou yinly autæconfirmed uisers',
+'protect-level-sysop' => 'Allou admeenistraters yinly',
+'protect-summary-cascade' => 'cascadin',
+'protect-expiring' => 'dees $1 (UTC)',
+'protect-expiring-local' => 'dees $1',
+'protect-expiry-indefinite' => 'indefineet',
+'protect-cascade' => 'Protect pages incluided in this page (cascadin protection)',
+'protect-cantedit' => 'Ye canna chynge the protection levels o this page cause ye dinna hae permeession tae eedit it.',
 'protect-othertime' => 'Ither time:',
 'protect-othertime-op' => 'ither time',
-'protect-expiry-options' => '2 oor:2 hours,1 day:1 day,3 days:3 days,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',
+'protect-existing-expiry' => 'Exeestin expirie time: $3, $2',
+'protect-otherreason' => 'Ither/addeetional raison:',
+'protect-otherreason-op' => 'Ither raison',
+'protect-dropdown' => '*Commyn protection raisons
+** Excesseeve vandaleesm
+** Excesseeve spammin
+** Coonter-producteeve eedit warrin
+** Hei traffeec page',
+'protect-edit-reasonlist' => 'Eedit protection raisons',
+'protect-expiry-options' => '1 hoor: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,eenfinite:infinite',
+'restriction-type' => 'Permeession:',
+'restriction-level' => 'Restreection level:',
+'minimum-size' => 'Smaaest size',
+'maximum-size' => 'Mucklest size:',
 
 # Restrictions (nouns)
-'restriction-edit' => 'Edit',
-'restriction-move' => 'Flit',
+'restriction-edit' => 'Eidit',
+'restriction-move' => 'Muiv',
 'restriction-create' => 'Mak',
 'restriction-upload' => 'Uplaid',
 
+# Restriction levels
+'restriction-level-sysop' => 'fulie protected',
+'restriction-level-autoconfirmed' => 'semie protected',
+'restriction-level-all' => 'onie level',
+
 # Undelete
-'undelete' => 'Restore delete page',
-'undeletepage' => 'View an restore delete pages',
-'viewdeletedpage' => 'View delete pages',
-'undeletepagetext' => 'The follaein pages haev bin deleted but are aye in the archive an
-can be restored. The archive micht be redd oot noo an then.',
-'undeletehistory' => 'Gin ye restore the page, aa reveisions will be restored til the history.
-Gin a neow page wi the same name haes bin created syne the deletion, the restored
-reveisions will appear in the aulder history, an the current reveision o the live page winna be autaematically replaced.',
-'undeletehistorynoadmin' => 'This airticle haes been delete. The raeson for deletion is
-shawn in the summary ablo, alang wi parteeculars o the uisers that haed editit this page
-afore it wis delete. The actual text o thir deletit reveisions is available tae admeenistrators juist.',
-'undeletelink' => 'view/restore',
+'undelete' => 'See delytit page',
+'undeletepage' => 'See n restore delytit pages',
+'undeletepagetitle' => '<strong>The follaein conseests o delytit reveesions o [[:$1|$1]]</strong>.',
+'viewdeletedpage' => 'View delyte pages',
+'undeletepagetext' => 'The follaein {{PLURAL:$1|page haes been delytit but is|$1 pages hae been delytit but ar}} still in the archive n can be restored.
+The archive micht be cleaned oot nou n than.',
+'undelete-fieldset-title' => 'Restore reveesions',
+'undeleteextrahelp' => "In order tae restore the page's entire histerie, lea aw checkkists onselected n clap oan <strong><em>{{int:undeletebtn}}</em></strong>.
+Tae perform ae selecteeve restoration, check the kists correspondin til the reveesions tae be restored, n clap oan <strong><em>{{int:undeletebtn}}</em></strong>.",
+'undeleterevisions' => '$1 {{PLURAL:$1|reveesion|reveesions}} archived',
+'undeletehistory' => 'Gif ye restore the page, aw reveesions will be restored til the histerie.
+Gif ae new page wi the same name haes been makit sin the delytion, the restored reveesions will kyth in the prior histerie.',
+'undeleterevdel' => 'Ondelytion will na be performed gif it will result in the tap page or file reveesion bein pairtlie delyted.
+In sic cases, ye maun oncheck or onskauk the newest delytit reveesion.',
+'undeletehistorynoadmin' => 'This airticle haes been delytit. The raeson fer delytion is
+shawn in the owerview ablo, alang wi parteeculars o the uisers that haed eiditit this page afore it wis delytit. The actual tex o thir delytit reveesions is available tae admeenistraters juist.',
+'undelete-revision' => 'Deleted reveesion o $1 (aes o $4, at $5) bi $3:',
+'undeleterevision-missing' => 'Onvalid or missin reveesion.
+Ye micht hae ae bad link, or the reveesion micht hae been restored or remuived fae the archive.',
+'undelete-nodiff' => 'Naw preeveeoos reveesion foond.',
+'undeletelink' => 'see/restore',
 'undeleteviewlink' => 'view',
-'undeletedrevisions' => '{{PLURAL:$1|1 reveision|$1 reveisions}} restored',
-'cannotundelete' => 'Undelete didna wirk; some ither bodie micht hae aareadies undeletit the page.',
+'undeletecomment' => 'Raison:',
+'undeletedrevisions' => '{{PLURAL:$1|1 reveesion|$1 reveesions}} restored',
+'undeletedrevisions-files' => '{{PLURAL:$1|1 reveesion|$1 reveesions}} n {{PLURAL:$2|1 file|$2 files}} restored',
+'cannotundelete' => 'Ondelyte failed:
+$1',
+'undeletedpage' => '<strong>$1 haes been restored</strong>
+
+Consult the [[Special:Log/delete|delytion log]] fer ae record o recent delytions an restorâtions.',
+'undelete-header' => 'See [[Special:Log/delete|the delytion log]] fer recentlie delytit pages.',
+'undelete-search-title' => 'Rake delytit pages',
+'undelete-search-box' => 'Rake delytit pages',
+'undelete-search-prefix' => 'Shaw pages stairtin wi:',
+'undelete-search-submit' => 'Rake',
+'undelete-no-results' => 'Naw matchin pages foond in the delytion airchive.',
+'undelete-filename-mismatch' => 'Canna ondelyte file reveesion wi timestamp $1: Filename mismatch.',
+'undelete-bad-store-key' => 'Canna ondelyte file reveesion wi timestamp $1: File wis missin afore delytion.',
+'undelete-cleanup-error' => 'Mistak delytin onuised airchive file "$1".',
+'undelete-missing-filearchive' => "Onable tae restore file airchive ID $1 cause it's na in the database.
+It micht awreadie hae been ondelytit.",
+'undelete-error' => 'Mistak ondelytin page',
+'undelete-error-short' => 'Mistak ondelytin file: $1',
+'undelete-error-long' => 'Mistaks were encoontered while ondelytin the file:
+
+$1',
+'undelete-show-file-confirm' => 'Ar ye sair that ye want tae see the delytit reveesion o the file "<nowiki>$1</nowiki>" fae $2 at $3?',
+'undelete-show-file-submit' => 'Ay',
 
 # Namespace form on various pages
 'namespace' => 'Namespace:',
 'invert' => 'Invert selection',
+'tooltip-invert' => 'Check this kist tae skauk chynges til pages wiin the selectit namespace (n the associated namespace gif checked)',
+'tooltip-namespace_association' => 'Check this kist forby tae incluid the tauk or subject namespace associated wi the selectit namespace',
 'blanknamespace' => '(Main)',
 
 # Contributions
-'contributions' => 'Uiser contreibutions',
-'contributions-title' => 'Uiser contreibutions fer $1',
-'mycontris' => 'Ma contreibutions',
-'contribsub2' => 'For $1 ($2)',
-'nocontribs' => 'Nae chynges wis funnd matchin thae criteria.',
-'uctop' => ' (tap)',
-'month' => 'Frae month (an afore):',
-'year' => 'Frae year (an afore):',
-
-'sp-contributions-newbies' => "Shaw contreibutions o' freish accounts ainlie",
+'contributions' => '{{GENDER:$1|Uiser}} contributions',
+'contributions-title' => 'Uiser contreebutions fer $1',
+'mycontris' => 'Ma contreebutions',
+'contribsub2' => 'Fer {{GENDER:$3|$1}} ($2)',
+'nocontribs' => 'Nae chynges wis funnd matchin thir criteria.',
+'uctop' => '(current)',
+'month' => 'Fae month (n afore):',
+'year' => 'Fae year (n afore):',
+
+'sp-contributions-newbies' => 'Shaw contreebutions o freish accoonts ainlie',
+'sp-contributions-newbies-sub' => 'Fer new accoonts',
+'sp-contributions-newbies-title' => 'Uiser contreebutions fer new accoonts',
 'sp-contributions-blocklog' => 'block log',
+'sp-contributions-deleted' => 'delytit uiser contreebutions',
 'sp-contributions-uploads' => 'uploads',
 'sp-contributions-logs' => 'logs',
-'sp-contributions-talk' => 'collogue',
-'sp-contributions-search' => 'Rake fur contreibutions',
+'sp-contributions-talk' => 'tauk',
+'sp-contributions-userrights' => 'uiser richts management',
+'sp-contributions-blocked-notice' => 'This uiser is nou blockit.
+The latest block log entrie is gien ablo fer referance:',
+'sp-contributions-blocked-notice-anon' => 'This IP address is blockit the nou.
+The latest block log entrie is gien ablo fer referance:',
+'sp-contributions-search' => 'Rake fer contreebutions',
+'sp-contributions-suppresslog' => 'suppressed uiser contreebutions',
 'sp-contributions-username' => 'IP address or uisername:',
-'sp-contributions-toponly' => 'Ainlie shaw edits that are latest revisions',
+'sp-contributions-toponly' => 'Ainlie shaw eedits that ar laitest reveesions',
+'sp-contributions-newonly' => 'Yinlie shaw eidits that ar page cræftins',
 'sp-contributions-submit' => 'Rake',
 
 # What links here
-'whatlinkshere' => 'Whit airts tae here',
-'whatlinkshere-title' => 'Pages that link to "$1"',
+'whatlinkshere' => 'Whit links here',
+'whatlinkshere-title' => 'Pages that link til "$1"',
 'whatlinkshere-page' => 'Page:',
-'linkshere' => "The follaein pages airts tae '''[[:$1]]''':",
-'nolinkshere' => "Nae pages airt tae '''[[:$1]]'''.",
+'linkshere' => 'The follaein pages link til <strong>[[:$1]]</strong>:',
+'nolinkshere' => "Nae pages link wi '''[[:$1]]'''.",
+'nolinkshere-ns' => 'No pages aiet til <strong>[[:$1]]</strong> in the choosen namespace.',
 'isredirect' => 'reguidal page',
 'istemplate' => 'transclusion',
 'isimage' => 'file link',
@@ -1165,255 +2404,877 @@ afore it wis delete. The actual text o thir deletit reveisions is available tae
 'whatlinkshere-hideredirs' => '$1 redirects',
 'whatlinkshere-hidetrans' => '$1 transclusions',
 'whatlinkshere-hidelinks' => '$1 links',
-'whatlinkshere-hideimages' => '$1 image links',
+'whatlinkshere-hideimages' => '$1 file airtins',
 'whatlinkshere-filters' => 'Filters',
 
 # Block/unblock
+'autoblockid' => 'Autæblock #$1',
+'block' => 'Block uiser',
+'unblock' => 'Onblock uiser',
 'blockip' => 'Block uiser',
-'blockiptext' => 'Uise the form ablo tae block write access frae a specific IP address or uisername. This shuid be duin juist tae prevent vandalism, and in accord wi [[{{MediaWiki:Policy-url}}|policy]]. Fill in a specific raeson ablo (for exemplar, citin parteicular pages that wis damaged).',
+'blockip-legend' => 'Block uiser',
+'blockiptext' => 'Uise the form ablo tae block write access fae ae speceefic IP address or uisername. This shid be dun juist tae hinder vandaleesm, n in accord wi [[{{MediaWiki:Policy-url}}|policie]]. Fil in ae speceefic raison ablo (fer exemplar, citin parteecular pages that were vandalised).',
 'ipadressorusername' => 'IP Address or uisername',
+'ipbexpiry' => 'Expirie:',
 'ipbreason' => 'Raeson:',
+'ipbreason-dropdown' => '*Commyn block raisons
+** Insertin false information
+** Remuivin content fae pages
+** Spammin links til external sites
+** Insertin nonsense/gibberish intil pages
+** Inteemidatin behavier/harassment
+** Abuisin multiple accoonts
+** Onacceptable uisername',
+'ipb-hardblock' => 'Stap loggit-in uisers fae eeditin fae this IP address',
+'ipbcreateaccount' => 'Stap accoont cræftin',
+'ipbemailban' => 'Stap uiser fae sendin wab-mail',
+'ipbenableautoblock' => 'Autæmateeclie block the laist IP address uised bi this uiser, n onie subsequent IP addresses that thay attempt tae eedit fae',
 'ipbsubmit' => 'Block this uiser',
 'ipbother' => 'Ither time',
 'ipboptions' => '2 hours:2 hours,1 day:1 day,3 days:3 days,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,indefinite:infinite',
+'ipbhidename' => 'Skauk uisername fae eedits n leets',
+'ipbwatchuser' => "Watch this uiser's uiser n tauk pages",
+'ipb-disableusertalk' => 'Stap this uiser fae eeditin thair ain tauk page while blockit',
+'ipb-change-block' => 'Re-block the uiser wi thir settins',
 'badipaddress' => 'That IP address is nae guid',
 'blockipsuccesssub' => 'Block succeedit',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] haes been blockit.
-<br />See [[Special:BlockList|IP block leet]] tae review blocks.',
-'ipb-unblock-addr' => 'Unblock $1',
-'unblockip' => 'Unblock uiser',
-'unblockiptext' => 'Uise the form ablo tae restore screivin richts
-tae an afore-blockit IP address or uisername.',
+<br />See [[Special:BlockList|block leet]] tae review blocks.',
+'ipb-blockingself' => "Ye'r aboot tae block yersel! Ar ye sair that ye want tae dae that?",
+'ipb-confirmhideuser' => 'Ye\'r aboot tae block ae uiser wi "skauk uiser" enabled. This will suppress the uiser\'s name in aw leets n log entries. Ar ye sair that ye want tae dae that?',
+'ipb-confirmaction' => 'Gif ye\'r sair that ye reelie want tae dae it, please check the "{{int:ipb-confirm}}" field at the bottom.',
+'ipb-edit-dropdown' => 'Eedit block raisons',
+'ipb-unblock-addr' => 'Onblock $1',
+'ipb-unblock' => 'Onblock ae uisername or IP address',
+'ipb-blocklist' => 'See exeestin blocks',
+'ipb-blocklist-contribs' => 'Contreebutions fer $1',
+'unblockip' => 'Onblock uiser',
+'unblockiptext' => 'Uise the form ablo tae restore screevin richts
+til aen afore-blockit IP address or uisername.',
+'ipusubmit' => 'Remuive this block',
+'unblocked' => '[[User:$1|$1]] haes been onblockit.',
+'unblocked-range' => '$1 haes been onblockit.',
+'unblocked-id' => 'Block $1 haes been remuived.',
+'blocklist' => 'Blockit uisers',
 'ipblocklist' => 'Blockit uisers',
+'ipblocklist-legend' => 'Fynd ae blockit uiser',
+'blocklist-userblocks' => 'Skauk accoont blocks',
+'blocklist-tempblocks' => 'Skauk temparie blocks',
+'blocklist-addressblocks' => 'Skauk single IP blocks',
+'blocklist-rangeblocks' => 'Skauk range blocks',
+'blocklist-target' => 'Tairget',
+'blocklist-expiry' => 'Dies',
+'blocklist-by' => 'Blockin admeen',
+'blocklist-params' => 'Block boonds',
+'blocklist-reason' => 'Raison',
+'ipblocklist-submit' => 'Rake',
+'ipblocklist-otherblocks' => 'Ither {{PLURAL:$1|block|blocks}}',
+'infiniteblock' => 'infeenite',
+'expiringblock' => 'dies oan $1 at $2',
 'anononlyblock' => 'anon. juist',
+'noautoblockblock' => 'autæblock disabled',
 'createaccountblock' => 'accoont-makkin blockit',
+'emailblock' => 'wab-mail disabled',
+'blocklist-nousertalk' => 'canna eedit yer ain tauk page',
+'ipblocklist-empty' => 'The block leet is tuim.',
+'ipblocklist-no-results' => 'The requested IP address or uisername isna blockit.',
 'blocklink' => 'block',
-'unblocklink' => 'unblock',
+'unblocklink' => 'onblock',
 'change-blocklink' => 'chynge block',
-'contribslink' => 'contreibs',
-'autoblocker' => 'Autaematically blockit syne yer IP address haes been uised recently bi "[[User:$1|$1]]". The raeson gien for $1\'s block is "\'\'$2\'\'"',
+'contribslink' => 'contreebs',
+'emaillink' => 'send wab-mail',
+'autoblocker' => 'Autaematicallie blockit sin yer IP address haes been uised recentlie bi "[[User:$1|$1]]". The raeson gien fer $1\'s block is "$2"',
 'blocklogpage' => 'Block log',
-'blocklogentry' => 'blockit [[$1]] wi an expiry time o $2 $3',
-'blocklogtext' => 'This is a log o uiser blockin an unblockin actions. Autaematically blockit IP addresses isna leetit. See the [[Special:BlockList|IP block leet]] for the leet o bans and blocks on the gae the nou.',
+'blocklog-showlog' => 'This uiser haes been blockit afore.
+The block log is gien ablo fer referance:',
+'blocklog-showsuppresslog' => 'This uiser haes been blockit n skaukt afore.
+The suppress log is gien ablo fer referance:',
+'blocklogentry' => 'blockit [[$1]] wi aen expirie time o $2 $3',
+'reblock-logentry' => 'chynged block settins fer [[$1]] wi ae diein time o $2 $3',
+'blocklogtext' => 'This is ae log o uiser blockin n onblockin actions. Autaematiclie blockit IP addresses isna leetit. See the [[Special:BlockList|block leet]] fer the leet o bans n blocks oan the nou.',
 'unblocklogentry' => 'unblockit $1',
+'block-log-flags-anononly' => 'anonymos uisers yinlie',
 'block-log-flags-nocreate' => 'accoont-makkin blockit',
+'block-log-flags-noautoblock' => 'autæblock disabled',
+'block-log-flags-noemail' => 'wab-mail disabled',
+'block-log-flags-nousertalk' => 'canna eedit yer ain tauk page',
+'block-log-flags-angry-autoblock' => 'enhanced autæblock enabled',
+'block-log-flags-hiddenname' => 'uisername skaukt',
 'range_block_disabled' => 'The administrator abeility tae mak range blocks is disabled.',
-'proxyblockreason' => 'Yer IP address haes been blockit sith it is an open proxy. Please contact yer Internet service provider or tech support an inform them o this serious security problem.',
-'sorbsreason' => 'Yer IP address is leetit as an open proxy in the DNSBL.',
-'sorbs_create_account_reason' => 'Yer IP address is leetit as an open proxy in the DNSBL. Ye canna mak an accoont',
+'ipb_expiry_invalid' => 'Expirie time is onvalit.',
+'ipb_expiry_temp' => 'Skaukt uisername blocks maun be permanent.',
+'ipb_hide_invalid' => 'Onable tae suppress this accoont; it haes mair than {{PLURAL:$1|yin eedit|$1 eedits}}.',
+'ipb_already_blocked' => '"$1" is awreadie blockit.',
+'ipb-needreblock' => '$1 is awreadie blockit. Div ye want tae chynge the settins?',
+'ipb-otherblocks-header' => 'Ither {{PLURAL:$1|block|blocks}}',
+'unblock-hideuser' => 'Ye canna onblock this uiser, aes thair uisername haes been skaukt.',
+'ipb_cant_unblock' => 'Mistak: Block ID $1 na foond. It micht hae been onblockit awreadie.',
+'ipb_blocked_as_range' => 'Mistak: The IP address $1 isna blockit directlir n canna be onblockit.
+It is, houever, blockit aes pairt o the range $2, n this can be onblockit.',
+'ip_range_invalid' => 'Onvalid IP range.',
+'ip_range_toolarge' => 'Range blocks muckler than /$1 ar na permitit.',
+'proxyblocker' => 'Proxie blocker',
+'proxyblockreason' => "Yer IP address haes been blockit cause it's aen apen proxie. Please contact yer Internet service provider or tech support n inform them o this serious securitie problem.",
+'sorbsreason' => 'Yer IP address is leeted aes aen apen proxy in the DNSBL uised bi {{SITENAME}}.',
+'sorbs_create_account_reason' => 'Yer IP address is leeted aes aen apen proxy in the DNSBL uised bi {{SITENAME}}.
+Ye canna mak aen accoont.',
+'xffblockreason' => "Aen IP address present in the X-Forwarded-For heider, either yers or that o ae proxie server that ye'r uisin, haes been block. The oreeginal block raison wis: $1",
+'cant-see-hidden-user' => "The uiser that ye'r attemptin tae block haes awreadie been blockit n skaukt.
+Aes ye dinna hae the skaukuiser richt, ye canna see or eedit the uiser's block.",
+'ipbblocked' => 'Ye canna block or onblock ither uisers cause ye yersel is blockit.',
+'ipbnounblockself' => 'Yer na permitit tae onblock yersel.',
 
 # Developer tools
 'unlockdb' => 'Lowse database',
-'lockdbtext' => "Lockin the database will suspend the abeility o aa uisers tae edit pages, chynge thair preferences, edit thair watchleets, an ither things requirin chynges in the database. Please confirm that this is whit ye intend tae dae, an that ye'll unlock the database whan yer maintenance is duin.",
-'unlockdbtext' => 'Lowsin the database will gie back the abeility for aa uisers tae edit pages, chynge their preferences, edit their watchleets, an ither things needin chynges in the database. Please confirm that this is whit ye ettle tae dae.',
-'lockconfirm' => 'Aye, A raellie want tae lock the database.',
-'unlockconfirm' => 'Aye, A raelly want tae lowse the database.',
-'locknoconfirm' => 'Ye didna tick the confirmation box.',
+'lockdbtext' => "Lockin the database will suspend the abeelitie o aw uisers tae eedit pages, chynge thair preeferences, eedit thair watchleets, n ither things needin chynges in the database. Please confirm that this is whit ye'r etlin tae dae, n that ye'll lowse the database whan yer maintenance is dun.",
+'unlockdbtext' => 'Lowsin the database will gie back the abeelitie fer aa uisers tae eidit pages, chynge their preeferences, eidit their watchleets, an ither things needin chynges in the database. Please confirm that this is whit ye ettle tae dae.',
+'lockconfirm' => 'Ai, Ah reellie want tae lock the database.',
+'unlockconfirm' => 'Ai, Ah reellie want tae lowse the database.',
+'unlockbtn' => 'Lowse database',
+'locknoconfirm' => 'Ye didna tick the confirmâtion kist.',
 'lockdbsuccesssub' => 'Database lock fine',
 'unlockdbsuccesssub' => 'Database lowsed',
 'lockdbsuccesstext' => 'The database haes been lockit. <br />Mynd an tak the lock aff efter yer maintenance is feinisht.',
 'unlockdbsuccesstext' => 'The database haes bin lowsed.',
+'lockfilenotwritable' => 'The database lock file isna writable.
+Tae lock or lowse the database, this needs tae be writable bi the wab server.',
 'databasenotlocked' => 'The database isna lockit.',
+'lockedbyandtime' => '(bi {{GENDER:$1|$1}} oan $2 at $3)',
 
 # Move page
-'move-page-legend' => 'Flit page',
-'movepagetext' => "Uisin the form ablo will rename a page, flittin aa its history tae the new name.
-The auld teitle will become a reguidal page tae the new teitle.
-Airtins tae the auld page teitle willna be chynged;
-be siccar tae check for dooble or brucken reguidals.
-You ar responsible for makkin siccar that airtins continues tae pynt whaur thay ar supposed tae gang.
-
-Mynd that the page '''willna''' be flittit gin the'r aareadies a page at the new teitle, unless it is tuim or a reguidal and haes nae past edit history.
-This means that ye can rename a page back tae whaur it wis juist renamed frae gin ye mak a mistak, an ye canna owerwrite an existin page
-
-'''WARNIN!'''
-This can be a drastic and unexpectit chynge for a popular page;
-please be siccar ye unnerstaun the consequences o this afore proceedin.",
-'movepagetalktext' => "The associate Collogue page, gin onie, will be autaematically flittit alang wi it '''unless:''' *Ye'r flittin the page across namespaces, *A collogue page that isna tuim aareadies exists unner the new name, or *Ye tak the tick oot o the box ablo. In thae cases, ye maun flit or merge the page manually later gin ye hae saicont thochts.",
-'movearticle' => 'Flit page:',
-'movenologintext' => 'Ye maun be a registert uiser an [[Special:UserLogin|loggit in]] tae flit a page.',
-'newtitle' => 'Tae new teitle',
-'movepagebtn' => 'Flit page',
+'move-page' => 'Muiv $1',
+'move-page-legend' => 'Muiv page',
+'movepagetext' => "Uisin the form ablo will rename ae page, muivin aw o its histerie til the new name.
+The auld title will become ae reguidal page til the new title.
+Ye can update reguidals that poynt til the oreeginal title autæmateeclie.
+Gif ye chuise na tae, be sair tae check fer [[Special:DoubleRedirects|dooble]] or [[Special:BrokenRedirects|broken reguidals]].
+Ye'r responsible fer makin sair that links continue tae poynt til whaur thay'r supposed to gae.
+
+Mynd that the page will <strong>na</strong> be muived gif thaur is awreadie ae page at the new title, onless the latter is ae reguidal n haes nae past eedit histerie.
+This means that ye can rename ae page back til whaur it wis renamed fae gif ye mak ae mistak, n ye canna owerwrite aen exeestin page.
+
+<strong>Warnishment!</strong>
+This can be ae drasteec n onexpectit chynge fer ae popular page;
+please be sair ye unnerstaunn the consequences o this afore proceedin.",
+'movepagetext-noredirectfixer' => "Uising the form ablo will rename ae page, muivin aw o its histerie til the new name.
+The auld title will become ae reguidal page til the new title.
+Be sair tae check fer [[Special:DoubleRedirects|dooble]] or [[Special:BrokenRedirects|broken reguidals]].
+Ye'r responsible fer makin sair that airtins continue tae poynt whaur thay'r supposed tae gae.
+
+Tak tent that the page will <strong>naw</strong> be muived gif thaur's awreadie ae page at the new title, onless it is tuim n haes naw past eedit histerie.
+This means that ye can rename ae page back til whaur it wis renamed fae gif ye mak ae mistak, n ye canna owerwrite aen existin page.
+
+<strong>Warnishment!</strong>
+This can be ae drastic n onexpectit chynge fer ae popular page;
+please be sair that ye unnerstaun the consequences o this afore preceedin.",
+'movepagetalktext' => 'The associated tauk page will be autaematiclie muived alang wi it <strong>onless:</strong>
+*A no-tuim tauk page awreadie exeests unner the new name, or
+*Ye oncheck the kist ablo.
+
+In thae cases, ye will hae tae muiv or merge the page manuallie gif ye sae desire.',
+'movearticle' => 'Muiv page:',
+'moveuserpage-warning' => "<strong>Warnishment:</strong> Ye'r aboot tae muiv ae uiser page. Please tak tent that yinlie the page will be muivd n the uiser will <em>naw</em> be renamed.",
+'movenologintext' => 'Ye maun be a registert uiser n [[Special:UserLogin|loggit in]] tae muiv ae page.',
+'movenotallowed' => 'Ye dinna hae permeession tae muiv pages.',
+'movenotallowedfile' => 'Ye dinna hae permeession tae muiv files.',
+'cant-move-user-page' => 'Ye dinna hae permeession tae muiv uiser pages (aside fae subpages).',
+'cant-move-to-user-page' => 'Ye dinna hae permeession tae muiv ae page til ae uiser page (except til ae uiser subpage).',
+'newtitle' => 'Til new teitle',
+'move-watch' => 'Watch soorce page n tairget page',
+'movepagebtn' => 'Muiv page',
 'pagemovedsub' => 'Flittin succeedit',
+'movepage-moved' => '<strong>"$1" has been muived til "$2"</strong>',
+'movepage-moved-redirect' => 'Ae reguidal haes been cræftit.',
+'movepage-moved-noredirect' => 'The cræftin o ae reguidal haes been suppressed.',
 'articleexists' => "A page o that name aareadies exists, or the name ye'v waled isna guid. Please wale anither name.",
-'movetalk' => 'Flit "collogue" page an aa, gin it\'s applicable.',
-'movelogpage' => 'Flit log',
+'cantmove-titleprotected' => 'Ye canna muiv ae page til this location cause the new title haes been protected fae cræftin',
+'movetalk' => 'Muiv associated tauk page',
+'move-subpages' => 'Muiv subpages (up til $1)',
+'move-talk-subpages' => 'Muiv subpages o tauk page (up til $1)',
+'movepage-page-exists' => 'The page $1 awreadie exeests n canna be autæmateeclie owerwritten.',
+'movepage-page-moved' => 'The page $1 haes been muived til $2.',
+'movepage-page-unmoved' => 'The page $1 coudna be muived til $2.',
+'movepage-max-pages' => 'The mmucklest o $1 {{PLURAL:$1|page|pages}} haes been muived n naw mair will be muived autæmateeclie.',
+'movelogpage' => 'Muiv log',
 'movelogpagetext' => "A leet o pages that's flitted is ablo.",
+'movesubpagetext' => 'This page haes $1 {{PLURAL:$1|subpage|subpages}} shawn ablo.',
+'movenosubpage' => 'This page haes naw subpages.',
 'movereason' => 'Raeson:',
 'revertmove' => 'revert',
-'delete_and_move' => 'Delete an flit',
-'delete_and_move_text' => '==Deletion caad for==
-
-The destination airticle "[[:$1]]" aareadies exists. Div ye want tae delete it for tae mak wey for the flittin?',
-'delete_and_move_confirm' => 'Aye, delete the page',
-'delete_and_move_reason' => 'Delete for tae mak wey for flittin',
-'selfmove' => 'Ootgaun an incomin teitles is the same; canna flit a page ower itsel.',
+'delete_and_move' => 'Delyte n muiv',
+'delete_and_move_text' => '==Delytion caad fer==
+
+The destination airticle "[[:$1]]" aareadies exists. Div ye want tae delyte it fer tae mak wey fer the muiv?',
+'delete_and_move_confirm' => 'Ai, delyte the page',
+'delete_and_move_reason' => 'Delytit fer tae mak wa fer muiv fae "[[$1]]"',
+'selfmove' => 'Ootgaun n incomin teitles ar the same; canna muiv ae page ower itsel.',
+'immobile-source-namespace' => 'Canna muiv pages in namespace "$1"',
+'immobile-target-namespace' => 'Canna muiv pages intil namespace "$1"',
+'immobile-target-namespace-iw' => 'Interwiki link isna ae valeed tairget fer page muiv.',
+'immobile-source-page' => 'This page is na muivable.',
+'immobile-target-page' => 'Canna muiv til that desteenation title.',
+'bad-target-model' => 'The desired desteenation uises ae differant content model. Canna convert fae $1 til $2.',
+'imagenocrossnamespace' => 'Canna muiv file til non-file namespace',
+'nonfile-cannot-move-to-file' => 'Canna muiv non-file til file namespace',
+'imagetypemismatch' => 'The new file extension disna match its type',
+'imageinvalidfilename' => 'The tairget filename is onvalit',
+'fix-double-redirects' => 'Update onie reguidals that poynt til the oreeginal title',
+'move-leave-redirect' => 'Lea ae reguidal ahint',
+'protectedpagemovewarning' => '<strong>Warnishment:</strong> This page haes been protected sae that yinlie uisers wi admeenistrater preevleges can muiv it.
+The latest log entrie is gien ablo fer referance:',
+'semiprotectedpagemovewarning' => '<strong>Mynd:</strong> This page haes been protected sae that yinlie registered uisers can muiv it.
+The hainmaist log entrie is gien ablo fer referance:',
+'move-over-sharedrepo' => '== File exeests ==
+[[:$1]] exeests oan ae shaired reposeeterie. Muiving ae file til this title will owerride the shaired file.',
+'file-exists-sharedrepo' => 'The filename chosen is awreadie in uise oan ae shaired reposeeterie.
+Please chuise anither name.',
 
 # Export
 'export' => 'Export pages',
-'exporttext' => 'Ye can export the text an editin history o a parteicular page or set o pages wappit in some XML. In the futur, this micht can be importit intae anither wiki runnin MediaWiki saftware, altho the\'r nae support for this featur in the current version.
-
-Tae export airticle pages, enter the teitles in the text box ablo, ae teitle tae ilka line, an wale whither ye want the current version alang wi aa auld versions, wi the page history lines, or the current version juist, wi wittins anent the last edit.
-
-In the saicont case ye can uise an airtin forbye, for exemplar [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] for the airticle "[[{{MediaWiki:Mainpage}}]]".',
-'exportcuronly' => 'Include juist the current revision, no the fou history',
+'exporttext' => 'Ye can export the tex n eeditin histerie o ae parteecular page or set o pages wrapped in some XML.
+This can be imported intil anither wiki uisin MediaWiki bi waa o the [[Special:Import|import page]].
+
+Tae export pages, enter the titles in the tex kist ablo, yin title per line, n select whether ye want the Nou reveesion  aw auld reveesions ava, wi the page histerie lines, or the Nou reveesion wi the info aneat the laist eedit.
+
+In the latter case ye can uise ae link ava, fer example [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] fer the page "[[{{MediaWiki:Mainpage}}]]".',
+'exportall' => 'Export aw pages',
+'exportcuronly' => 'Inclæde juist the nou reveesion, naw the ful histerie',
+'exportnohistory' => '----
+<strong>Mynd:</strong> Exportin the ful histerie o pages throogh this form haes been disabled cause o performance raisons.',
+'exportlistauthors' => 'Incluid ae ful leet o contreebuters fer ilka page',
+'export-addcattext' => 'Add pages fae categerie:',
+'export-addnstext' => 'Add pages fae namespace:',
+'export-download' => 'Hain aes file',
+'export-templates' => 'Incluid templates',
+'export-pagelinks' => 'Incluid linkt pages til ae depth o:',
 
 # Namespace 8 related
 'allmessages' => 'Aa seestem messages',
 'allmessagesname' => 'Name',
-'allmessagesdefault' => 'Defaut text',
-'allmessagescurrent' => 'Text the nou',
-'allmessagestext' => 'This is a leet o aa seestem messages available in the MediaWiki: namespace.',
+'allmessagesdefault' => 'Defaut message tex',
+'allmessagescurrent' => 'Message tex the nou',
+'allmessagestext' => 'This is ae leet o system messages available in the MediaWiki namespace.
+Please veesit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] n [//translatewiki.net translatewiki.net] gif ye wish tae contreebute til the generic MediaWiki localisation.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:AllMessages''' nae supportit acause '''\$wgUseDatabaseMessages''' is aff.",
+'allmessages-filter' => 'Filter b custymization state:',
+'allmessages-filter-unmodified' => 'Onmodified',
+'allmessages-filter-all' => 'Aw',
+'allmessages-filter-modified' => 'Modeefied',
+'allmessages-prefix' => 'Filter bi prefix:',
+'allmessages-language' => 'Leid:',
+'allmessages-filter-submit' => 'Gang',
+'allmessages-filter-translate' => 'Owerset',
 
 # Thumbnails
 'thumbnail-more' => 'Eik',
 'filemissing' => 'File missin',
-'thumbnail_error' => 'Error creating thumbnail: $1',
+'thumbnail_error' => 'Mistak makin thummnail: $1',
+'thumbnail_error_remote' => 'Mistak message fae $1:
+$2',
+'djvu_page_error' => 'DjVu page oot o range',
+'djvu_no_xml' => 'Onable tae fetch XML fer DjVu file',
+'thumbnail-temp-create' => 'Onable tae cræft temprie thummnail file',
+'thumbnail-dest-create' => 'Onable tae hain thummnail til desteenation',
+'thumbnail_invalid_params' => 'Onvalit thummnail parameters',
+'thumbnail_dest_directory' => 'Onable tae cræft desteenation directerie',
+'thumbnail_image-type' => 'Eemage type na supported',
+'thumbnail_gd-library' => 'Oncompleate GD librie confeeguration: Missin function $1',
+'thumbnail_image-missing' => 'File seems tae be missin: $1',
+'thumbnail_image-failure-limit' => 'There hae been ower moni recent failed attempts ($1 or mair) tae render this thumbnail. Please try again later.',
 
 # Special:Import
-'importtext' => 'Please export the file frae the soorce wiki uisin the Special:Export utility, hain it in yer disc an uplaid it here.',
-'importnotext' => 'Tuim or nae text',
+'import-interwiki-text' => "Select ae wiki n page title tae import.
+Reveesion dates n eediters' names will be preserved.
+Aw transwiki import actions ar loggit at the [[Special:Log/import|import log]].",
+'import-interwiki-source' => 'Soorce wiki/page:',
+'import-interwiki-history' => 'Copie aw histerie reveesions fer this page',
+'import-interwiki-templates' => 'Incluid aw templates',
+'import-interwiki-namespace' => 'Desteenation namespace:',
+'import-interwiki-rootpage' => 'Desteenation ruit page (aen optie):',
+'importtext' => 'Please export the file fae the soorce wiki uising the [[Special:Export|export utilitie]].
+Hain it til yer computer n uplaid it here.',
+'importstart' => 'Importin pages...',
+'import-revision-count' => '$1 {{PLURAL:$1|reveesion|reveesions}}',
+'importnopages' => 'Naw pages tae import.',
+'imported-log-entries' => 'Imported $1 {{PLURAL:$1|log entrie|log entries}}.',
+'importunknownsource' => 'Onkent import soorce type',
+'importcantopen' => 'Coudna apen import file',
+'importnotext' => 'Tuim or nae tex',
 'importsuccess' => 'Importit fine!',
-'importhistoryconflict' => 'Conflictin history revision exists (micht hae importit this page afore)',
-'importnosources' => 'Nae transwiki import soorces haes been defined an direct history uplaids is disabled.',
+'importhistoryconflict' => 'Conflictin histerie reveesion exeests (micht hae importit this page afore)',
+'importnosources' => 'Nae transwiki import soorces haes been defined n direct histerie uplaids is disabled.',
+'importnofile' => 'Naw import file wis uplaided.',
+'importuploaderrorsize' => 'Uplaid o import file failed.
+The file is muckler than the permitit uplaid size.',
+'importuploaderrorpartial' => 'Uplaid o import file failed.
+The file wis yinlie pairtlie uplaided.',
+'importuploaderrortemp' => 'Uplaid o import file failed.
+Ae temparie fauder is missin.',
+'import-noarticle' => 'Naw page tae import!',
+'import-nonewrevisions' => 'Nae reveesions imported (aw were either awreadie present, or skipt cause o mistaks).',
+'import-upload' => 'Uplaid XML data',
+'import-token-mismatch' => 'Loss o session data.
+Please gie it anither gae.',
+'import-invalid-interwiki' => 'Canna import fae the speceefied wiki.',
+'import-error-edit' => 'Page "$1" isna importit cause ye\'r na permitit tae eedit it.',
+'import-error-create' => 'Page "$1" is na importit cause ye\'r na permitit tae cræft it.',
+'import-error-interwiki' => 'Page "$1" is na importit cause its name is reserved fer external linkin (interwiki).',
+'import-error-special' => 'Page "$1" is na importit cause it belangs til ae speecial namespace that disna permit pages.',
+'import-error-invalid' => 'Page "$1" is na importit cause its name is onvalit.',
+'import-error-unserialize' => 'Reveesion $2 o page "$1" coudna be onsereealized. The reveesion wis reported til uiss content model $3 sereealized aes $4.',
+'import-error-bad-location' => 'Reveesion $2 uisin content model $3 canna be stored oan "$1" oan this wiki, syn that model isna supported oan that page.',
+'import-options-wrong' => 'Wrang {{PLURAL:$2|optie|opties}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Gien ruit page is aen onvalit title.',
+'import-rootpage-nosubpage' => 'Namespace "$1" o the ruit page disna permit subpages.',
+
+# Import log
+'importlogpagetext' => 'Admeenistrateeve imports o pages wi eedit histerie fae ither wikis.',
+'import-logentry-upload' => 'imported [[$1]] bi file uplaid',
+'import-logentry-upload-detail' => '$1 {{PLURAL:$1|reveesion|reveesions}}',
+'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|reveesion|reveesions}} fae $2',
+
+# JavaScriptTest
+'javascripttest' => 'JavaScript testin',
+'javascripttest-title' => 'Rinnin $1 tests',
+'javascripttest-pagetext-noframework' => 'This page is reserved fer rinnin JavaScript tests.',
+'javascripttest-pagetext-unknownframework' => 'Onkent testin framewairk "$1".',
+'javascripttest-pagetext-frameworks' => 'Please chuise yin o the follaein testin framewairks: $1',
+'javascripttest-pagetext-skins' => 'Chuise ae skin tae rin the tests wi:',
+'javascripttest-qunit-intro' => 'See [$1 testin documentation] oan mediawiki.org.',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Yer uiser page',
-'tooltip-pt-mytalk' => 'Yer collogue page',
+'tooltip-pt-anonuserpage' => "The uiser page fer the IP address that ye'r eeditin aes",
+'tooltip-pt-mytalk' => 'Yer tauk page',
+'tooltip-pt-anontalk' => 'Discussion aneat eedits fae this IP address',
 'tooltip-pt-preferences' => 'Ma preferences',
-'tooltip-pt-watchlist' => "Th' leet o' pages yer monitoring fur changes",
-'tooltip-pt-mycontris' => 'Leet o yer contreibutions',
+'tooltip-pt-watchlist' => "Ae leet o pages ye'r moniterin fer chynges",
+'tooltip-pt-mycontris' => 'Leet o yer contreebutions',
 'tooltip-pt-login' => "It's a guid idea tae log i, but ye dinna hae tae.",
 'tooltip-pt-logout' => 'Log oot',
-'tooltip-ca-talk' => "Discussion aboot th' content page",
-'tooltip-ca-edit' => "Ye kin edit this page. Please uise th' preview button afore saving",
-'tooltip-ca-addsection' => 'Start a new section',
+'tooltip-ca-talk' => 'Discussion aneat the content page',
+'tooltip-ca-edit' => 'Ye can eedit this page. Please uise the luikower button afore hainin',
+'tooltip-ca-addsection' => 'Stairt ae new section',
 'tooltip-ca-viewsource' => 'This page is protectit.
-You ken view its source',
-'tooltip-ca-history' => "Bygane revisions o' this page",
+Ye can view its soorce',
+'tooltip-ca-history' => 'Bygane reveesions o this page',
 'tooltip-ca-protect' => 'Fend this page',
-'tooltip-ca-delete' => 'Delete this page',
-'tooltip-ca-move' => 'Flit this page',
-'tooltip-ca-watch' => 'Add this page tae yer watchleet',
+'tooltip-ca-unprotect' => 'Chynge protection o this page',
+'tooltip-ca-delete' => 'Delyte this page',
+'tooltip-ca-undelete' => 'Restore the eedits dun oan this page afore it wis delytit',
+'tooltip-ca-move' => 'Muiv this page',
+'tooltip-ca-watch' => 'Add this page til yer watchleet',
 'tooltip-ca-unwatch' => 'Remove this page frum yer watchleet',
 'tooltip-search' => 'Rake {{SITENAME}}',
-'tooltip-search-go' => "Gang tae a page wi' this exact name if exists",
-'tooltip-search-fulltext' => "Search th' pages fur this text",
-'tooltip-p-logo' => 'Gang tae the Main Page',
-'tooltip-n-mainpage' => 'Gang tae the Main Page',
-'tooltip-n-mainpage-description' => 'Gang tae the Main Page',
-'tooltip-n-portal' => "Aboot th' project, whit ye kin dae, whaur tae fin' things",
+'tooltip-search-go' => 'Gang til ae page wi this exact name gif exeests',
+'tooltip-search-fulltext' => 'Rake the pages fer this tex',
+'tooltip-p-logo' => 'Gang til the Main Page',
+'tooltip-n-mainpage' => 'Gang til the Main Page',
+'tooltip-n-mainpage-description' => 'Gang til the Main Page',
+'tooltip-n-portal' => 'Aneat the project, whit ye can dae, whaur tae fynd things',
 'tooltip-n-currentevents' => "Fin' background speirins oan current events",
 'tooltip-n-recentchanges' => 'The leet o recent chynges in the wiki',
-'tooltip-n-randompage' => 'Load a random page',
-'tooltip-n-help' => "Th' steid tae fin' oot",
+'tooltip-n-randompage' => 'Laid ae random page',
+'tooltip-n-help' => 'The steid tae fynd oot',
 'tooltip-t-whatlinkshere' => "List o' a' wiki pages that link 'ere",
-'tooltip-t-recentchangeslinked' => 'Recent changes in pages linked frae this page',
-'tooltip-feed-atom' => 'Atom feed fur this page',
-'tooltip-t-contributions' => "View this uiser's contreibutions",
-'tooltip-t-emailuser' => 'Send an e-mail to this uiser',
+'tooltip-t-recentchangeslinked' => 'Recynt chynges in pages linkt fae this page',
+'tooltip-feed-rss' => 'RSS feed fer this page',
+'tooltip-feed-atom' => 'Atom feed fer this page',
+'tooltip-t-contributions' => "View this uiser's contreebutions",
+'tooltip-t-emailuser' => 'Send ae wab-mail til this uiser',
 'tooltip-t-upload' => 'Uplaid files',
 'tooltip-t-specialpages' => 'Leet o byordinar pages',
 'tooltip-t-print' => "Printable version o' this page",
-'tooltip-t-permalink' => "Permanent link tae this revision o' th' page",
+'tooltip-t-permalink' => 'Permanent link til this reveesion o the page',
 'tooltip-ca-nstab-main' => 'Leuk at content page',
 'tooltip-ca-nstab-user' => 'View the uiser page',
-'tooltip-ca-nstab-special' => "This is a byordinar page, ye cannae edit th' page itself",
-'tooltip-ca-nstab-project' => 'View the project page',
+'tooltip-ca-nstab-media' => 'See the media page',
+'tooltip-ca-nstab-special' => 'This is ae byordinair page, ye canna eedit the page itsel',
+'tooltip-ca-nstab-project' => 'See the waurk page',
 'tooltip-ca-nstab-image' => 'View the file page',
+'tooltip-ca-nstab-mediawiki' => 'See the system message',
 'tooltip-ca-nstab-template' => 'View the template',
-'tooltip-ca-nstab-category' => "View th' category page",
+'tooltip-ca-nstab-help' => 'See the heelp page',
+'tooltip-ca-nstab-category' => 'View the categerie page',
 'tooltip-minoredit' => 'Mairk this as a smaa edit',
 'tooltip-save' => 'Hain yer chynges',
-'tooltip-preview' => 'Scance ower yer chynges, please uise this afore hainin!',
-'tooltip-diff' => 'Shaw the chynges that you made tae the text.',
+'tooltip-preview' => 'Luikower yer chynges, please uise this afore hainin!',
+'tooltip-diff' => 'Shaw the chynges that ye makit til the tex.',
 'tooltip-compareselectedversions' => 'See the differs atween the twa selectit versions o this page.',
 'tooltip-watch' => 'Add this page tae yer watchleet',
-'tooltip-rollback' => '"Rowback" reverts edit(s) tae this page o\' th\' lest contributor in yin click',
-'tooltip-undo' => "\"Undo\" reverts this edit 'n' opens th' edit form in preview mode. It allows adding a reason in th' summary.",
-'tooltip-summary' => 'Enter a short summary',
+'tooltip-watchlistedit-normal-submit' => 'Remuiv titles',
+'tooltip-watchlistedit-raw-submit' => 'Update watchleet',
+'tooltip-recreate' => "Recræft the page even thoogh it's been delytit",
+'tooltip-upload' => 'Stairt uplaid',
+'tooltip-rollback' => '"Rowback" reverts eedit(s) til this page o the laist contreebuter in yin clap',
+'tooltip-undo' => '"Ondae" reverts this eedit n apens the eedit form in luikower mode. It permits addin ae raison in the owerview.',
+'tooltip-preferences-save' => 'Hain preeferances',
+'tooltip-summary' => 'Enter ae short owerview',
 
 # Metadata
 'notacceptable' => 'The wiki server canna provide data in a format yer client can read.',
 
 # Attribution
-'anonymous' => 'Nameless uiser(s) o {{SITENAME}}',
+'anonymous' => 'Nameless {{PLURAL:$1|uiser|uisers}} o {{SITENAME}}',
 'siteuser' => '{{SITENAME}} uiser $1',
-'othercontribs' => 'Based on wark bi $1.',
+'anonuser' => '{{SITENAME}} anonymoos uiser $1',
+'lastmodifiedatby' => 'This page wis laist modified $2, $1 bi $3.',
+'othercontribs' => 'Based oan wark bi $1.',
 'others' => 'ithers',
-'siteusers' => '{{SITENAME}} uiser(s) $1',
-'nocredits' => "The'r nae credit info available for this page.",
+'siteusers' => '{{SITENAME}} {{PLURAL:$2|uiser|uisers}} $1',
+'anonusers' => '{{SITENAME}} anonymoos {{PLURAL:$2|uiser|uisers}} $1',
+'creditspage' => 'Page creeedits',
+'nocredits' => "Thaur's nae creedit info available fer this page.",
 
 # Spam protection
-'spamprotectiontext' => 'The page ye wanted tae save wis blockit bi the spam filter. This is maist likely caused bi an airtin til an outby site.',
-'spamprotectionmatch' => 'The follaein text is whit triggered wir spam filter: $1',
+'spamprotectiontext' => 'The tex ye wished tae save wis blockit bi the spam filter.
+This is maistlikly caused bi aen airtin til ae blaickleeted external site.',
+'spamprotectionmatch' => 'The follaein tex is whit triggered wir spam filter: $1',
+'spam_reverting' => 'Revertin til the laist reveesion na containin links til $1',
+'spam_blanking' => 'Aw reveesions contained links til $1, blankin',
+'spam_deleting' => 'Aw reveesions contained links til $1, delytin',
+'simpleantispam-label' => 'Anti-spam check.
+Div <strong>NAW</strong> ful this in!',
+
+# Info page
+'pageinfo-title' => 'Information fer "$1"',
+'pageinfo-not-current' => "Sairrie, it's na possible tae provide this information fer auld reveesions.",
+'pageinfo-header-edits' => 'Eedit histerie',
+'pageinfo-display-title' => 'Displey title',
+'pageinfo-default-sort' => 'Defaut sort key',
+'pageinfo-language' => 'Page content leid',
+'pageinfo-robot-policy' => 'Indexin bi robots',
+'pageinfo-robot-index' => 'Permitit',
+'pageinfo-robot-noindex' => 'Na permitit',
+'pageinfo-views' => 'Nummer o luiks',
+'pageinfo-watchers' => 'Nummer o page watchers',
+'pageinfo-few-watchers' => 'Less than $1 {{PLURAL:$1|watcher|watchers}}',
+'pageinfo-redirects-name' => 'Nummer o reguidals til this page',
+'pageinfo-subpages-name' => 'Nummer o subpages o this page',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|reguidal|reguidals}}; $3 {{PLURAL:$3|non-reguidal|non-reguidals}})',
+'pageinfo-firstuser' => 'Page cræfter',
+'pageinfo-firsttime' => 'Date o page cræftin',
+'pageinfo-lastuser' => 'Latest eediter',
+'pageinfo-lasttime' => 'Date o latest eedit',
+'pageinfo-edits' => 'Total nummer o eedits',
+'pageinfo-authors' => 'Total nummer o disteenct writers',
+'pageinfo-recent-edits' => 'Recent nummer o eedits (wiin past $1)',
+'pageinfo-recent-authors' => 'Recynt nummer o disteenct writers',
+'pageinfo-magic-words' => 'Magic {{PLURAL:$1|waird|wairds}} ($1)',
+'pageinfo-hidden-categories' => 'Skaukt {{PLURAL:$1|categerie|categeries}} ($1)',
+'pageinfo-templates' => 'Transcluided {{PLURAL:$1|template|templates}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Page|Pages}} transcluided oan ($1)',
+'pageinfo-redirectsto' => 'Reguidals til',
+'pageinfo-contentpage' => 'Coonted aes ae content page',
+'pageinfo-contentpage-yes' => 'Ay',
+'pageinfo-protect-cascading' => 'Protections ar cascadin fae here',
+'pageinfo-protect-cascading-yes' => 'Ay',
+'pageinfo-protect-cascading-from' => 'Protections ar cascadin fae here',
+'pageinfo-category-info' => 'Categerie information',
+'pageinfo-category-pages' => 'Nummer o pages',
+'pageinfo-category-subcats' => 'Nummer o subcategeries',
+'pageinfo-category-files' => 'Nummer o files',
 
 # Patrolling
 'markaspatrolleddiff' => 'Merk as patrolled',
 'markaspatrolledtext' => 'Merk this airticle as patrolled',
 'markedaspatrolled' => 'Merkit as patrolled',
-'markedaspatrolledtext' => 'The selectit reveision haes been merkit as patrolled.',
-'rcpatroldisabledtext' => 'The Recent Changes Patrol feature is disabled the nou.',
+'markedaspatrolledtext' => 'The selected reveesion o [[:$1]] haes been maurked aes patrolled.',
+'rcpatroldisabled' => 'Recynt chynges patrol disabled',
+'rcpatroldisabledtext' => 'The Recynt Chynges Patrol featur is disabled the nou.',
+'markedaspatrollederror' => 'Canna maurk aes patrowed',
+'markedaspatrollederrortext' => 'Ye need tae speceefie ae reveesion tae maurk aes patrowed.',
+'markedaspatrollederror-noautopatrol' => "Ye'r na permitit tae maurk yer ain chynges aes patrowed.",
+'markedaspatrollednotify' => 'This chynge til $1 haes been maurked aes patrowed.',
+'markedaspatrollederrornotify' => 'Maurking aes patrowed failed.',
+
+# Patrol log
+'patrol-log-page' => 'Patrow log',
+'patrol-log-header' => 'This is ae log o patrowed reveesions.',
+'log-show-hide-patrol' => '$1 patrow log',
 
 # Image deletion
-'deletedrevision' => 'Deletit auld revision $1.',
+'deletedrevision' => 'Delytit auld reveesion $1.',
+'filedeleteerror-short' => 'Mistak delytin file: $1',
+'filedeleteerror-long' => 'mistaks were encoontered while delytin the file:
+
+$1',
+'filedelete-missing' => 'The file "$1" canna be delytit cause it disna exeest.',
+'filedelete-old-unregistered' => 'The speceefied file reveesion "$1" isna in the database.',
+'filedelete-current-unregistered' => 'The speceefied file "$1" isna in the database.',
+'filedelete-archive-read-only' => 'The archyve directerie "$1" isna writable bi the wabserver.',
 
 # Browsing diffs
-'previousdiff' => '← Aulder edit',
-'nextdiff' => 'Newer edit →',
+'previousdiff' => '← Aulder eedit',
+'nextdiff' => 'Newer eedit →',
 
 # Media information
-'mediawarning' => "'''Warnin''': This file micht haud mislushious code; bi executin it yer seestem micht be compromised.",
-'imagemaxsize' => 'Limit eimages on eimage description pages tae:',
+'mediawarning' => '<strong>Warnishment:</strong> This file type micht contain maleecious code.
+Bi executin it, yer system micht be compromised.',
+'imagemaxsize' => 'Eimage size limit:<br /><em>(fer file description pages)</em>',
+'thumbsize' => 'Thummnail size:',
 'file-info-size' => '$1 × $2 pixels, file size: $3, MIME type: $4',
 'file-nohires' => 'Na higher resolution available.',
 'svg-long-desc' => 'SVG file, nominally $1 × $2 pixels, file size: $3',
-'show-big-image' => 'Full resolution',
+'svg-long-desc-animated' => 'Animated SVG file, nominallie $1 × $2 pixels, file size: $3',
+'svg-long-error' => 'Onvalit SVG file: $1',
+'show-big-image' => 'Oreeginal file',
+'show-big-image-preview' => 'Size o this luikower: $1.',
+'show-big-image-other' => 'Ither {{PLURAL:$2|resolution|resolutions}}: $1.',
+'file-info-gif-looped' => "luip't",
+'file-info-png-looped' => "luip't",
+'file-info-png-repeat' => 'pleyed $1 {{PLURAL:$1|time|times}}',
+'file-no-thumb-animation' => '<strong>Mynd: Due til techneecal limitations, thummnails o this file will na be animated.</strong>',
+'file-no-thumb-animation-gif' => '<strong>Mynd: Due til techneecal limitations, thummnails o hei resolution GIF eemages sic aes this will na be animated.</strong>',
 
 # Special:NewFiles
 'newimages' => 'Gallery o new files',
 'imagelisttext' => 'Ablo is a leet o $1 {{PLURAL:$1|eimage|eimages}} sortit $2.',
-'noimages' => 'Naething tae see.',
+'newimages-summary' => 'This byordinair page shaws the last uplaidit files.',
+'newimages-label' => 'Filename (or ae pairt o it):',
+'noimages' => 'Nawthing tae see.',
 'ilsubmit' => 'Rake',
 'bydate' => 'bi date',
+'sp-newimages-showfrom' => 'Shaw new files stairtin fae $2, $1',
+
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds' => '{{PLURAL:$1|$1 seicont|$1 seiconts}}',
+'hours' => '{{PLURAL:$1|$1 hoor|$1 hoors}}',
+'ago' => '$1 sin',
+'just-now' => 'richt nou',
+
+# Human-readable timestamps
+'hours-ago' => '$1 {{PLURAL:$1|hoor|hoors}} sin',
+'minutes-ago' => '$1 {{PLURAL:$1|minute|minutes}} sin',
+'seconds-ago' => '$1 {{PLURAL:$1|seicont|seiconts}} sin',
+'monday-at' => 'Monenday at $1',
+'wednesday-at' => 'Wedensday at $1',
+'friday-at' => 'Frisday at $1',
 
 # Bad image list
-'bad_image_list' => "Th' format is as follows:
+'bad_image_list' => 'The format is aes follaes:
 
-Ainlie list items (lines starting wi' *) are considered. Th' foremaist link oan a line mist be a link tae a ill image. Ony subsequent links oan th' same line are considered tae be exceptions, i,e., pages whaur th' image kin occur inline.",
+Ainlie leet items (lines stairtin wi *) ar considered. The foremaist link oan ae line maun be ae link til aen ill file. Oni subsequent links oan the same line ar considered tae be exceptions, i,e., pages whaur the eimage can occur inline.',
 
 # Metadata
 'metadata' => 'Metadata',
-'metadata-help' => "This file contains additional speirins, likelie added frae th' digital camera or scanner used tae create or digitize it. 
-If th' file haes bin modified frae tis original state, some details kin nae fully reflect th' modified file.",
-'metadata-fields' => "Image metadata fields listed in this message wull be included oan image page display whin th' metadata buird is collapsed. Others wull be hidden by default. 
-*mak
+'metadata-help' => 'This file contains addeetional speirins, likelie added fae the deegital camera or scanner uised tae cræft or deegitize it. 
+Gif the file haes bin modified fae its oreeginal state, some details micht naw fullie reflect the modified file.',
+'metadata-expand' => 'Shaw extendit details',
+'metadata-collapse' => 'Skauk extendit details',
+'metadata-fields' => "Eemage metadata fields leetit in this message will be incluidit oan eemage page displey whan the metadata buird is collaps't. Ithers will be skaukt bi defaut. 
+* mak
 * model
-* datetimeoriginal
+* datetimeoreeginal
 * exposuretime
-* fnumber
-* isospeedratings
+* fnummer
+* isospeedratins
 * focallength
-* artist
-* copyricht
-* imagedescription
-* gpslatitude
-* gpslongitude
-* gpsaltitude",
+* airtist
+* copiericht
+* eemagedescreeption
+* gpslateetuid
+* gpslangeetuid
+* gpsalteetuid",
 
 # Exif tags
+'exif-imagelength' => 'Heicht',
+'exif-photometricinterpretation' => 'Pixel composeetion',
+'exif-samplesperpixel' => 'Nummer o components',
+'exif-ycbcrsubsampling' => 'Subsamplin ratio o Y til C',
+'exif-ycbcrpositioning' => 'Y n C poseetionin',
+'exif-yresolution' => 'Verteecal resolution',
+'exif-stripoffsets' => 'Eemage data location',
+'exif-rowsperstrip' => 'Nummer o raws per streep',
+'exif-stripbytecounts' => 'Bytes per compressed streep',
+'exif-jpeginterchangeformat' => 'Affset til JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'Bytes o JPEG data',
+'exif-whitepoint' => 'White poynt chromateeceetie',
+'exif-primarychromaticities' => 'Chromateeceeties o primarities',
+'exif-ycbcrcoefficients' => 'Colour space transformation matrix coeffeecients',
+'exif-referenceblackwhite' => 'Pair o blaick n white referance values',
+'exif-datetime' => 'File chynge date n time',
+'exif-imagedescription' => 'Eemage title',
+'exif-software' => 'Saffware uised',
+'exif-artist' => 'Writer',
 'exif-copyright' => 'Copyricht hauder',
+'exif-flashpixversion' => 'Supportit Flashpix version',
 'exif-colorspace' => 'Colour space',
 'exif-componentsconfiguration' => 'Meanin o ilka component',
 'exif-compressedbitsperpixel' => 'Eimage compression mode',
-'exif-brightnessvalue' => 'Brichtness',
-
-'exif-componentsconfiguration-0' => 'disna exist',
+'exif-pixelydimension' => 'Eemage width',
+'exif-pixelxdimension' => 'Eemage heicht',
+'exif-usercomment' => 'Uiser comments',
+'exif-relatedsoundfile' => 'Relatit audío file',
+'exif-datetimeoriginal' => 'Date n time o data generation',
+'exif-datetimedigitized' => 'Date n time o deegeetizin',
+'exif-subsectime' => 'DateTime subseiconts',
+'exif-subsectimeoriginal' => 'DateTimeOreeginal subseiconts',
+'exif-subsectimedigitized' => 'DateTimeDeegeetized subseiconts',
+'exif-fnumber' => 'F Nummer',
+'exif-spectralsensitivity' => 'Spectral sensiteevitie',
+'exif-isospeedratings' => 'ISO speed ratin',
+'exif-brightnessvalue' => 'APEX brichtness',
+'exif-maxaperturevalue' => 'Mucklest launn aperture',
+'exif-meteringmode' => 'Meterin mode',
+'exif-lightsource' => 'Licht soorce',
+'exif-subjectarea' => 'Subject airt',
+'exif-flashenergy' => 'Flash energie',
+'exif-sensingmethod' => 'Sensin methyd',
+'exif-filesource' => 'File soorce',
+'exif-customrendered' => 'Custym eemage processin',
+'exif-digitalzoomratio' => 'Deegeetal zuim ratio',
+'exif-sharpness' => 'Shairpness',
+'exif-devicesettingdescription' => 'Device settins descreeption',
+'exif-subjectdistancerange' => 'Subject deestance range',
+'exif-imageuniqueid' => 'Uníque eemage ID',
+'exif-gpslatituderef' => 'Nort or sooth lateetude',
+'exif-gpslatitude' => 'Lateetude',
+'exif-gpslongituderef' => 'Aest or west langeetude',
+'exif-gpslongitude' => 'Langeetude',
+'exif-gpsaltituderef' => 'Altítude reference',
+'exif-gpsaltitude' => 'Altítude',
+'exif-gpstimestamp' => 'GPS time (atomeec clock)',
+'exif-gpssatellites' => 'Satellites uised fer measurement',
+'exif-gpsstatus' => 'Receever status',
+'exif-gpsdop' => 'Measurement preeceesion',
+'exif-gpsspeed' => 'Speed o GPS receever',
+'exif-gpstrackref' => 'Referance fer direction o muivement',
+'exif-gpstrack' => 'Direction o muivement',
+'exif-gpsimgdirectionref' => 'Referance fer direction o eemage',
+'exif-gpsimgdirection' => 'Direction o eemage',
+'exif-gpsmapdatum' => 'Geodeteec survey data uised',
+'exif-gpsdestlatituderef' => 'Referance fer lateetude o destination',
+'exif-gpsdestlatitude' => 'Lateetude destination',
+'exif-gpsdestlongituderef' => 'Reference fer langeetude o destination',
+'exif-gpsdestlongitude' => 'Langeetude o destination',
+'exif-gpsdestbearingref' => 'Referance fer bearin o destination',
+'exif-gpsdestbearing' => 'Bearin o destination',
+'exif-gpsdestdistanceref' => 'Reference fer distance til destination',
+'exif-gpsdestdistance' => 'Distance til destination',
+'exif-gpsprocessingmethod' => 'Name o GPS processin methyd',
+'exif-gpsareainformation' => 'Name o GPS airt',
+'exif-gpsdifferential' => 'GPS differantial correction',
+'exif-keywords' => 'Keywairds',
+'exif-worldregioncreated' => 'Region o the Yird that the picture wis taen in',
+'exif-countrycreated' => 'Kintra that the picture wis taen in',
+'exif-countrycodecreated' => 'Code fer the kintra that the picture wis taen in',
+'exif-provinceorstatecreated' => 'Provínce or state that the picture wis taen in',
+'exif-citycreated' => 'Ceetie that the picture wis taen in',
+'exif-sublocationcreated' => 'Sublocation o the ceetie that the picture wis taen in',
+'exif-worldregiondest' => 'Yird region shawn',
+'exif-countrydest' => 'Kintra shawn',
+'exif-countrycodedest' => 'Code fer kintra shawn',
+'exif-provinceorstatedest' => 'Provínce or state shawn',
+'exif-citydest' => 'Ceetie shawn',
+'exif-sublocationdest' => 'Sublocation o ceetie shawn',
+'exif-specialinstructions' => 'Byordiair insructions',
+'exif-headline' => 'Heidline',
+'exif-credit' => 'Creedit/Provider',
+'exif-source' => 'Soorce',
+'exif-editstatus' => 'Eediterial status o eemage',
+'exif-urgency' => 'Urgencie',
+'exif-fixtureidentifier' => 'Fixtur name',
+'exif-locationdest' => 'Location depeected',
+'exif-locationdestcode' => 'Code o location depeected',
+'exif-objectcycle' => 'Time o day that media is intended fer',
+'exif-languagecode' => 'Leid',
+'exif-iimcategory' => 'Categerie',
+'exif-iimsupplementalcategory' => 'Supplemental categeries',
+'exif-datetimeexpires' => 'Dinna uise efter',
+'exif-datetimereleased' => 'Released oan',
+'exif-originaltransmissionref' => 'Oreeginal transmeession location code',
+'exif-identifier' => 'Identefier',
+'exif-lens' => 'Lens uised',
+'exif-serialnumber' => 'Serial nummer o camera',
+'exif-cameraownername' => 'Ainer o camera',
+'exif-datetimemetadata' => 'Date metadata wis laist modeefied',
+'exif-nickname' => 'Informal name o eemage',
+'exif-rating' => 'Ratin (oot o 5)',
+'exif-rightscertificate' => 'Richts management certeeficate',
+'exif-copyrighted' => 'Copiericht status',
+'exif-copyrightowner' => 'Copiericht ainer',
+'exif-usageterms' => 'Uisage terms',
+'exif-webstatement' => 'Online copiericht statement',
+'exif-originaldocumentid' => 'Uníque ID o oreeginal document',
+'exif-licenseurl' => 'URL fer copiericht license',
+'exif-morepermissionsurl' => 'Alternative licensin information',
+'exif-attributionurl' => 'Whan re-uisin this wairk, please link til',
+'exif-preferredattributionname' => 'Whan re-uisin this wairk, please creedit',
+'exif-contentwarning' => 'Content warnishment',
+'exif-intellectualgenre' => 'Type o eetem',
+'exif-event' => 'Event depected',
+'exif-organisationinimage' => 'Organization depected',
+'exif-personinimage' => 'Person depected',
+'exif-originalimageheight' => 'Heicht o eemage afore it wis crappit',
+'exif-originalimagewidth' => 'Width o eemage afore it wis crappit',
+
+# Exif attributes
+'exif-compression-1' => "Oncompress't",
+'exif-compression-2' => 'CCITT Groop 3 1-Dimensional Modified Huffman rin length encodin',
+'exif-compression-3' => 'CCITT Groop 3 fax encodin',
+'exif-compression-4' => 'CCITT Groop 4 fax encodin',
+
+'exif-copyrighted-true' => 'Copierichted',
+'exif-copyrighted-false' => 'Copiericht status na set',
+
+'exif-unknowndate' => 'Onkent date',
+
+'exif-orientation-2' => 'Flipt horizontallie',
+'exif-orientation-3' => 'Rotatit 180°',
+'exif-orientation-4' => 'Flipt verticlie',
+'exif-orientation-5' => 'Rotatit 90° CCW n flip verticlie',
+'exif-orientation-6' => 'Rotatit 90° CCW',
+'exif-orientation-7' => 'Rotatit 90° CW n flipt verticlie',
+'exif-orientation-8' => 'Rotatit 90° CW',
+
+'exif-planarconfiguration-1' => 'chunkie format',
+
+'exif-colorspace-65535' => 'Oncalibratit',
+
+'exif-componentsconfiguration-0' => 'disna exeest',
+
+'exif-exposureprogram-0' => 'Na defined',
+'exif-exposureprogram-3' => 'Apertur prioritie',
+'exif-exposureprogram-4' => 'Shutter prioritie',
+'exif-exposureprogram-5' => 'Cræftie program (biased thewaird the depth o field)',
+'exif-exposureprogram-6' => 'Action program (biased thewaird fast shutter speed)',
+'exif-exposureprogram-7' => 'Portrait mode (fer closeup photæs wi the backgroond oot o focus)',
+'exif-exposureprogram-8' => 'Launnscape mode (fer launnscape photæs wi the backgroonn in focus)',
+
+'exif-meteringmode-0' => 'Onkent',
+'exif-meteringmode-2' => 'Center weichtit average',
+'exif-meteringmode-4' => 'Multí-Spot',
+'exif-meteringmode-6' => 'Pairtial',
+'exif-meteringmode-255' => 'Ither',
+
+'exif-lightsource-0' => 'Onkent',
+'exif-lightsource-1' => 'Daylicht',
+'exif-lightsource-2' => 'Fluorescant',
+'exif-lightsource-3' => 'Tungsten (incandescant licht)',
+'exif-lightsource-10' => 'Cloodie weather',
+'exif-lightsource-12' => 'Daylicht fluorescant (D 5700 – 7100K)',
+'exif-lightsource-13' => 'Day white fluorescant (N 4600 – 5400K)',
+'exif-lightsource-14' => 'Cuil white fluorescant (W 3900 – 4500K)',
+'exif-lightsource-15' => 'White fluorescant (WW 3200 – 3700K)',
+'exif-lightsource-17' => 'Staunart licht A',
+'exif-lightsource-18' => 'Staunart licht B',
+'exif-lightsource-19' => 'Staunart licht C',
+'exif-lightsource-255' => 'Ither licht soorce',
+
+# Flash modes
+'exif-flash-fired-0' => 'Flash didna fire',
+'exif-flash-return-0' => 'naw flash return detection function',
+'exif-flash-return-2' => 'flash return licht na detectit',
+'exif-flash-return-3' => 'flash return licht detectit',
+'exif-flash-mode-1' => 'compulserie flash firin',
+'exif-flash-mode-2' => 'compulserie flash suppression',
+'exif-flash-mode-3' => 'autæ mode',
+'exif-flash-function-1' => 'Naw flash function',
+'exif-flash-redeye-1' => 'reid-ee reduction mode',
+
+'exif-sensingmethod-1' => 'Ondefined',
+'exif-sensingmethod-2' => 'Yin-chip colour airt senser',
+'exif-sensingmethod-3' => 'Twa-chip colour airt senser',
+'exif-sensingmethod-4' => 'Three-chip colour airt senser',
+'exif-sensingmethod-5' => 'Colour sequential airt senser',
+'exif-sensingmethod-7' => 'Trilinear senser',
+'exif-sensingmethod-8' => 'Colour sequential linear senser',
+
+'exif-filesource-3' => 'Deegeetal still camera',
+
+'exif-scenetype-1' => 'Ae directlie photægraphed eemage',
+
+'exif-customrendered-1' => 'Custym process',
+
+'exif-exposuremode-0' => 'Autæ exposure',
+'exif-exposuremode-2' => 'Autæ bracket',
+
+'exif-whitebalance-0' => 'Autæ white balance',
+
+'exif-scenecapturetype-0' => 'Staunart',
+'exif-scenecapturetype-1' => 'Launscape',
+'exif-scenecapturetype-3' => 'Nicht scene',
 
 'exif-gaincontrol-0' => 'Nane',
+'exif-gaincontrol-1' => 'Law gain up',
+'exif-gaincontrol-2' => 'Hei gain up',
+'exif-gaincontrol-3' => 'Law gain doon',
+'exif-gaincontrol-4' => 'Hei gain doon',
 
 'exif-contrast-1' => 'Saft',
+'exif-contrast-2' => 'Haurd',
+
+'exif-saturation-1' => 'Law saturation',
+'exif-saturation-2' => 'Hei saturation',
+
+'exif-sharpness-1' => 'Saff',
+'exif-sharpness-2' => 'Haurd',
+
+'exif-subjectdistancerange-0' => 'Onkent',
+'exif-subjectdistancerange-2' => 'Claise luik at',
+'exif-subjectdistancerange-3' => 'Distance sechtline',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Nort lateetude',
+'exif-gpslatitude-s' => 'Sooth lateetude',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Aest langeetude',
+'exif-gpslongitude-w' => 'West langeetude',
+
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|meter|meters}} abuin sea level',
+'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|meter|meters}} ablo sea level',
+
+'exif-gpsstatus-v' => 'Measurement interoperabeelitie',
+
+# Pseudotags used for GPSSpeedRef
+'exif-gpsspeed-k' => 'Kilometers aen hoor',
+'exif-gpsspeed-m' => 'Miles aen hoor',
+
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-n' => 'Nauteecal miles',
+
+'exif-gpsdop-excellent' => 'Excellant ($1)',
+'exif-gpsdop-good' => 'Guid ($1)',
+'exif-gpsdop-poor' => 'Puir ($1)',
+
+'exif-objectcycle-a' => 'Mornin yinlie',
+'exif-objectcycle-p' => 'Evenin yinlie',
+'exif-objectcycle-b' => 'Baith mornin n evenin',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-m' => 'Magneteec direction',
+
+'exif-dc-contributor' => 'Contreebuters:',
+'exif-dc-coverage' => 'Spatial or tempral scope o media',
+'exif-dc-relation' => 'Relatit media',
+'exif-dc-rights' => 'Richts',
+'exif-dc-source' => 'Soorce media',
+'exif-dc-type' => 'Type o media',
+
+'exif-rating-rejected' => 'Rejectit',
+
+'exif-isospeedratings-overflow' => 'Muckler than 65535',
+
+'exif-iimcategory-ace' => 'Arts, cultur n entertainmant',
+'exif-iimcategory-clj' => 'Crime n law',
+'exif-iimcategory-dis' => 'Disasters n accidants',
+'exif-iimcategory-fin' => 'Economie n business',
+'exif-iimcategory-hth' => 'The Heal',
+'exif-iimcategory-hum' => 'Fawk interest',
+'exif-iimcategory-lab' => 'Laber',
+'exif-iimcategory-lif' => 'Lifestyle n leisure',
+'exif-iimcategory-pol' => 'Poleeteecs',
+'exif-iimcategory-rel' => 'Releegion n truent',
+'exif-iimcategory-sci' => 'Sciance n technologie',
+'exif-iimcategory-soi' => 'Social eessues',
+'exif-iimcategory-war' => 'War, conflict n onrest',
+
+'exif-urgency-low' => 'Law ($1)',
+'exif-urgency-high' => 'Hei ($1)',
+'exif-urgency-other' => 'Uiser-defined prioritie ($1)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'aw',
@@ -1421,89 +3282,416 @@ If th' file haes bin modified frae tis original state, some details kin nae full
 'monthsall' => 'aw',
 
 # Email address confirmation
+'confirmemail' => 'Confirm wab-mail address',
 'confirmemail_noemail' => 'Ye dinna hae a valid email address set in yer [[Special:Preferences|uiser preferences]].',
-'confirmemail_text' => 'This wiki requires ye tae validate yer e-mail address
-afore uisin e-mail featurs. Activate the button ablo tae send a confirmation
-mail tae yer address. The mail will include an airtin containing a code; laid the
-airtin in yer brouser tae confirm that yer e-mail address is guid.',
-'confirmemail_sendfailed' => 'Cuidna send confirmation mail. Hae a leuk at the address for invalid characters.
+'confirmemail_text' => 'This wiki needs ye tae validate yer wab-mail address
+afore uisin wab-mail featurs. Acteevate the button ablo tae send a confirmation
+mail til yer address. The mail will incluide ae link containin ae code; laid the
+ link in yer brouser tae confirm that yer wab-mail address is guid.',
+'confirmemail_pending' => 'Ae confirmation code haes awreadie been wab-mailed til ye;
+gif ye recantlie cræftit yer accoont, ye micht wish tae wait ae few minutes fer it tae arrive afore speirin fer ae new code.',
+'confirmemail_send' => 'Mail ae confirmation code',
+'confirmemail_sent' => 'Confirmation wab-mail sent.',
+'confirmemail_oncreate' => "Ae confirmation code wis sent til yer wab-mail address.
+This code isna required tae log in, but ye'll need tae gie it afore enablin onie wab-mail-based featurs in the wiki.",
+'confirmemail_sendfailed' => '{{SITENAME}} coudna send yer confirmation mail.
+Please check yer wab-mail address fer onvalid chairacters.
 
 Mailer returned: $1',
 'confirmemail_invalid' => 'Confirmation code nae guid. The code haes mibbe expired.',
-'confirmemail_needlogin' => 'Ye maun $1 for tae confirm yer email address.',
-'confirmemail_success' => 'Yer e-mail address haes been confirmed. Ye can nou log in an enjoy the wiki.',
+'confirmemail_needlogin' => 'Please $1 fer tae confirm yer wab-mail address.',
+'confirmemail_success' => 'Yer wab-mail address haes been confirmed. Ye can nou [[Special:UserLogin|login]]  n enjoy the wiki.',
 'confirmemail_loggedin' => 'Yer e-mail address haes noo been confirmed.',
-'confirmemail_body' => 'A bodie, maist likely you frae IP address $1, haes registert an
-accoont "$2" wi this e-mail address on {{SITENAME}}.
+'confirmemail_subject' => '{{SITENAME}} wab-mail address confirmation',
+'confirmemail_body' => 'Somebodie, maist likely ye, fae IP address $1,
+haes registered aen accoont "$2" wi this wab-mail address oan {{SITENAME}}.
+
+Tae confirm that this accoont reallie is yers n acteevate wab-mail featurs oan {{SITENAME}}, apen this link in yer brouser:
+
+$3
 
-Tae confirm that you ar aucht this accoont an activate e-mail featurs
-on {{SITENAME}}, open this airtin in yer brouser:
+Gif ye div *naw* register the accoont, follae this link
+tae cancel the wab-mail address confirmation:
+
+$5
+
+This confirmation code will expire oan $4.',
+'confirmemail_body_changed' => 'Somebodie, proabablie ye, from IP address $1,
+haes chynged the wab-mail address o the accoont "$2" til this address oan {{SITENAME}}.
+
+Tae confirm that this accoont reallie dis belang til ye n reacteevate
+wab-mail featurs oan {{SITENAME}}, apen this link in yer brouser:
+
+$3
+
+Gif the account dis *na* belang til ye, follae this link
+tae cancel the wab-mail address confirmation:
+
+$5
+
+This confirmation code will die oan $4.',
+'confirmemail_body_set' => 'Somebodie, proablie ye, fae IP address $1,
+haes set the wab-mail address o the accoont "$2" til this address oan {{SITENAME}}.
+
+Tae confirm that this accoont reallie dis belang til ye n acteevate
+wab-mail featurs oan {{SITENAME}}, apen this link in yer brouser:
 
 $3
 
-If this *isna* you, dinna follae the airtin.
+Gif the accoont dis *na* belang til ye, follae this link
+tae cancel the wab-mail address confirmation:
 
 $5
 
-This confirmation code will end at $4.',
+This confirmation code will dee at $4.',
+'confirmemail_invalidated' => 'Wab-mail address confirmation canceled',
+'invalidateemail' => 'Cancel wab-mail confirmation',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Interwiki transcluidin is disabled]',
+'scarytranscludefailed' => '[Template fetch failed fer $1]',
+'scarytranscludefailed-httpstatus' => '[Template fetch failed fer $1: HTTP $2]',
+'scarytranscludetoolong' => '[URL is ower lang]',
 
 # Delete conflict
-'deletedwhileediting' => 'Warnin: This page haes been delete syne ye stertit editin!',
-'confirmrecreate' => "Uiser [[User:$1|$1]] ([[User talk:$1|collogue]]) deletit this airticle efter ye stertit editin, giein the raeson:
-: ''$2''
-Please confirm that ye really want tae recreate this airticle.",
+'deletedwhileediting' => '<strong>Warnishment:</strong> This page wis delytit efter ye stairted eeditin!',
+'confirmrecreate' => 'Uiser [[User:$1|$1]] ([[User talk:$1|tauk]]) delytit this page efter ye stairted eiditin wi raison:
+: <em>$2</em>
+Please confirm that ye reallie want tae recræft this page.',
+'confirmrecreate-noreason' => 'Uiser [[User:$1|$1]] ([[User talk:$1|tauk]]) delytit this page efter ye stairted eeditin. Please confirm that ye reallie want tae recræft this page.',
+'recreate' => 'Recræft',
 
 # action=purge
-'confirm_purge_button' => 'Aye',
+'confirm_purge_button' => 'OK',
 'confirm-purge-top' => 'Clair the cache o this page?',
+'confirm-purge-bottom' => 'Purgin ae page clears the cache n forces the maist recynt reveesion tae appear.',
+
+# action=watch/unwatch
+'confirm-watch-top' => 'Add this page til yer watchleet?',
+'confirm-unwatch-top' => 'Remuiv this page fae yer watchleet?',
 
 # Multipage image navigation
+'imgmultipageprev' => '← preeveeoos page',
+'imgmultipagenext' => 'nex page →',
 'imgmultigo' => 'Gang!',
+'imgmultigoto' => 'Gang til page $1',
+
+# Language selector for translatable SVGs
+'img-lang-default' => '(defaut leid)',
+'img-lang-info' => 'Render this eemage in $1. $2',
+'img-lang-go' => 'Gang',
 
 # Table pager
 'table_pager_next' => 'Page aifter',
 'table_pager_prev' => 'Page afore',
+'table_pager_last' => 'Laist page',
+'table_pager_limit' => 'Shaw $1 eetems per page',
+'table_pager_limit_label' => 'Eetems per page:',
 'table_pager_limit_submit' => 'Gang',
 'table_pager_empty' => 'Nae results',
 
 # Auto-summaries
-'autosumm-blank' => 'Dichtin aa content frae page',
+'autosumm-blank' => 'Blanked the page',
 'autosumm-replace' => "Replacin page wi '$1'",
-'autoredircomment' => 'Reguidin tae [[$1]]',
+'autoredircomment' => 'Reguidin til [[$1]]',
+'autosumm-new' => 'Cræftit page wi "$1"',
+
+# Live preview
+'livepreview-loading' => 'Laidin...',
+'livepreview-ready' => 'Laidin... Readie!',
+'livepreview-failed' => 'Live luikower failed!
+Gie normal luikower ae gae.',
+'livepreview-error' => 'Failed tae connect: $1 "$2".
+Gie normal luikower ae gae.',
+
+# Friendlier slave lag warnings
+'lag-warn-normal' => 'Chynges newer than $1 {{PLURAL:$1|seicont|seiconts}} micht na be shawn in this leet.',
+'lag-warn-high' => 'Cause o hei database server lag, chynges newer than $1 {{PLURAL:$1|seicont|seiconts}} micht na be shawn in this leet.',
+
+# Watchlist editor
+'watchlistedit-numitems' => 'Yer watchleet contains {{PLURAL:$1|1 title|$1 titles}}, na coontin tauk pages.',
+'watchlistedit-noitems' => 'Yer watchleet contains naw titles.',
+'watchlistedit-normal-title' => 'Eedit watchleet',
+'watchlistedit-normal-legend' => 'Remuiv titles fae watchleet',
+'watchlistedit-normal-explain' => 'Titles oan yer watchleet ar shawn ablo.
+Tae remuiv ae title, check the kist nex til it, n clap "{{int:Watchlistedit-normal-submit}}".
+Ye can [[Special:EditWatchlist/raw|eedit the raw leet]] ava.',
+'watchlistedit-normal-submit' => 'Remuiv titles',
+'watchlistedit-normal-done' => '{{PLURAL:$1|1 title wis|$1 titles were}} remuived fae yer watchleet:',
+'watchlistedit-raw-title' => 'Eedit raw watchleet',
+'watchlistedit-raw-legend' => 'Eedit raw watchleet',
+'watchlistedit-raw-explain' => 'Titles oan yer watchleet ar shawn ablo, n can be eeditit bi addin til n remuivin fae the leet;
+yin title per line.
+Whan dun, clap "{{int:Watchlistedit-raw-submit}}".
+Ye can [[Special:EditWatchlist|uise the staundairt eediter]] ava.',
+'watchlistedit-raw-submit' => 'Update watchleet',
+'watchlistedit-raw-done' => 'Yer watchleet haes been updated.',
+'watchlistedit-raw-added' => '{{PLURAL:$1|1 title wis|$1 titles were}} added:',
+'watchlistedit-raw-removed' => '{{PLURAL:$1|1 title wis|$1 titles were}} remuived:',
 
 # Watchlist editing tools
-'watchlisttools-view' => 'View relevant changes',
-'watchlisttools-edit' => 'View an edit watchleet',
-'watchlisttools-raw' => 'Edit raw watchleet',
+'watchlisttools-view' => 'See reelavant chynges',
+'watchlisttools-edit' => 'See n eedit watchleet',
+'watchlisttools-raw' => 'Eedit raw watchleet',
+
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|tauk]])',
 
 # Core parser functions
-'duplicate-defaultsort' => '\'\'\'Wairnin:\'\'\' Default sort key "$2" overrides earlier default sort key "$1".',
+'unknown_extension_tag' => 'Onkent extension tag "$1"',
+'duplicate-defaultsort' => '<strong>Warnishment:</strong> Defaut sort key "$2" owerrides earlier defaut sort key "$1".',
+
+# Special:Version
+'version-extensions' => 'Instawed extensions',
+'version-specialpages' => 'Byordinar pages',
+'version-parserhooks' => 'Parser huiks',
+'version-variables' => 'Vareeables',
+'version-other' => 'Ither',
+'version-mediahandlers' => 'Media haunnlers',
+'version-hooks' => 'Huiks',
+'version-parser-function-hooks' => 'Parser function huiks',
+'version-hook-name' => 'Huik name',
+'version-hook-subscribedby' => 'Subscribed bi',
+'version-ext-colheader-description' => 'Descreeption',
+'version-ext-colheader-credits' => 'Writers',
+'version-license-title' => 'License fer $1',
+'version-license-not-found' => 'Naw detailed license information wis foond fer this extension.',
+'version-credits-title' => 'Creedits fer $1',
+'version-credits-not-found' => 'Naw detailed creedits information wis foond fer this extension.',
+'version-poweredby-credits' => 'This wiki is pwred bi <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copiericht © 2001-$1 $2.',
+'version-poweredby-others' => 'ithers',
+'version-poweredby-translators' => 'translatewiki.net owerseters',
+'version-credits-summary' => "We'd like tae recognize the follaein fawk fer thair contreebution til [[Special:Version|MediaWiki]].",
+'version-license-info' => 'MediaWiki is free saffware; ye can reedistreebute it n/or modifie it unner the terms o the GNU General Public License aes publeesht bi the Free Software Foundation; either version 2 o the License, or (bi yer optie) onie later version.
+
+MediaWiki is distreebuted in the hope that it will be uissfu, bit WIOOT ONIE WARRANTIE; wioot even the implied warrantie o MERCHANTABILITIE or FITNESS FER AE PARTEECULAR PURPYSS. See the GNU General Public License fer mair details.
+
+Ye shid hae receeved [{{SERVER}}{{SCRIPTPATH}}/COPIEIN ae copie o the GNU General Public License] alang wi this program; gif na, write til the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA or [//www.gnu.org/licenses/old-licenses/gpl-2.0.html read it online].',
+'version-software' => 'Instawed saffware',
+'version-entrypoints' => 'Entrie point URLs',
+'version-entrypoints-header-entrypoint' => 'Entrie point',
+
+# Special:Redirect
+'redirect' => 'Reguidal bi file, uiser, page or reveesion ID',
+'redirect-legend' => 'Reguidal til ae file or page',
+'redirect-summary' => 'This byordiair page reguides til ae file (gien the file name), ae page (gien ae reveesion ID or page ID), or ae uiser page (gien ae numereec uiser ID). Uissage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/reveesion/328429]], or [[{{#Special:Redirect}}/uiser/101]].',
+'redirect-submit' => 'Gang',
+'redirect-lookup' => 'Luikup:',
+'redirect-user' => 'Uiser ID',
+'redirect-revision' => 'Page reveesion',
+'redirect-not-exists' => 'Value na foond',
 
 # Special:FileDuplicateSearch
+'fileduplicatesearch' => 'Rake fer dupleecate files',
+'fileduplicatesearch-summary' => 'Rake fer dupleecate files based oan hash values.',
+'fileduplicatesearch-legend' => 'Rake fer ae dupleecate',
 'fileduplicatesearch-filename' => 'Filename:',
 'fileduplicatesearch-submit' => 'Rake',
+'fileduplicatesearch-result-1' => 'The file "$1" haes naw identeecal dupleecation.',
+'fileduplicatesearch-result-n' => 'The file "$1" haes {{PLURAL:$2|1 identeecal dupleecation|$2 identeecal dupleecations}}.',
+'fileduplicatesearch-noresults' => 'Naw file named "$1" foond.',
 
 # Special:SpecialPages
 'specialpages' => 'Byordinar pages',
-'specialpages-group-users' => 'Uisers an richts',
+'specialpages-note' => '* Normal byordinair pages.
+* <span class="mw-specialpagerestricted">Restreected byordinair pages.</span>',
+'specialpages-group-other' => 'Ither byordinair pages',
+'specialpages-group-login' => 'Login / cræft accoont',
+'specialpages-group-changes' => 'Recynt chynges n logs',
+'specialpages-group-media' => 'Media reports n uplaids',
+'specialpages-group-users' => 'Uisers n richts',
+'specialpages-group-highuse' => 'Hei uiss pages',
 'specialpages-group-pages' => 'leet o pages',
+'specialpages-group-pagetools' => 'Page tuils',
+'specialpages-group-wiki' => 'Data n tuils',
+'specialpages-group-redirects' => 'Reguidin byordinair pages',
+'specialpages-group-spam' => 'Spam tuils',
+
+# Special:BlankPage
+'intentionallyblankpage' => 'This page is intentionlie left blank.',
 
 # External image whitelist
-'external_image_whitelist' => ' #Leave this line exactly as it is<pre>
-#Put regular expression fragments (just the part that goes between the //) below
-#These will be matched with the URLs of external (hotlinked) images
-#Those that match will be displayed as images, otherwise only a link to the image will be shown
-#Lines beginning with # are treated as comments
-#This is case-insensitive
+'external_image_whitelist' => ' #Lea this line exactlie aes it is<pre>
+#Put regulair expression fragments (juist the pairt that gaes atween the //) ablo
+#Thir will be matched wi the URLs o external (hotlinked) eimages
+#Thae that match will be displeyed aes eimages, itherwise yinlie ae link til the eimage will be shawn
+#Lines beginnin wi # ar treated aes comments
+#This is case-onsensiteeve
 
-#Put all regex fragments above this line. Leave this line exactly as it is</pre>',
+#Put aw regex fragments abuin this line. Lea this line exactlie aes it is</pre>',
 
 # Special:Tags
+'tags' => 'Valit chynge tags',
 'tag-filter' => '[[Special:Tags|Tag]] filter:',
 'tag-filter-submit' => 'Filter',
-'tags-edit' => 'edit',
+'tags-intro' => 'This page leets the tags that the saffware can maurk aen eedit wi, n thair meanin.',
+'tags-display-header' => 'Appearance oan chynge leets',
+'tags-description-header' => 'Ful descreeption o meanin',
+'tags-active-header' => 'Acteeve?',
+'tags-hitcount-header' => 'Tagged chynges',
+'tags-active-yes' => 'Ay',
+'tags-active-no' => 'Naw',
+'tags-edit' => 'eedit',
+'tags-hitcount' => '$1 {{PLURAL:$1|chynge|chynges}}',
+
+# Special:ComparePages
+'compare-rev1' => 'Reveesion 1',
+'compare-rev2' => 'Reveesion 2',
+'compare-invalid-title' => 'The title that ye speceefied is onvalit.',
+'compare-title-not-exists' => 'The title that ye speceefied disna exeest.',
+'compare-revision-not-exists' => 'The reveesion that ye speceefied disna exeest.',
+
+# Database error messages
+'dberr-header' => 'This wiki haes ae proablem',
+'dberr-problems' => 'Sairrie! This site is expereeancin techneecal diffeculties.',
+'dberr-again' => 'Gie it ae few minutes n than relaid.',
+'dberr-info' => '(Canna contact the database server: $1)',
+'dberr-info-hidden' => '(Canna contact the database server)',
+'dberr-usegoogle' => 'Ye can dae ae rake bi wa o Google in the meanwhile.',
+'dberr-outofdate' => 'Mynd that thair indexes o oor content micht be oot o date.',
+'dberr-cachederror' => 'This is ae cached copie o the requested page, n micht na be up til date.',
 
 # HTML forms
+'htmlform-invalid-input' => 'Thau ar proablems wi some o yer input.',
+'htmlform-select-badoption' => 'The value that ye speceefied isna ae valit optie.',
+'htmlform-int-invalid' => 'The value that ye speceefied isna aen integer.',
+'htmlform-float-invalid' => 'The value that ye speceefied isna ae nummer.',
+'htmlform-int-toolow' => 'The value that ye speceefied is ablo the smaaest o $1.',
+'htmlform-int-toohigh' => 'The value that ye speceefied is abuin the mucklest o $1.',
+'htmlform-required' => 'This value is needit.',
+'htmlform-submit' => 'Haun-in',
+'htmlform-reset' => 'Ondae chynges',
 'htmlform-selectorother-other' => 'Ither',
+'htmlform-no' => 'Naw',
+'htmlform-yes' => 'Ay',
+'htmlform-chosen-placeholder' => 'Select aen optie',
+
+# SQLite database support
+'sqlite-has-fts' => '$1 wi ful-tex rake support',
+'sqlite-no-fts' => '$1 wioot ful-tex rake support',
+
+# New logging system
+'logentry-delete-delete' => '$1 {{GENDER:$2|delytit}} page $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|chynged}} veesibeelitie o {{PLURAL:$5|ae log event|$5 log events}} oan $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|chynged}} veesibeelitie o {{PLURAL:$5|ae reveesion|$5 reveesions}} oan page $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|chynged}} veesibeelitie o log events oan $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|chynged}} veesibeelitie o reveesions oan page $3',
+'logentry-suppress-event' => '$1 hidlinswise {{GENDER:$2|chynged}} veesibeelitie o {{PLURAL:$5|ae log event|$5 log events}} oan $3: $4',
+'logentry-suppress-revision' => '$1 hidlinswise {{GENDER:$2|chynged}} veesibeelity o {{PLURAL:$5|ae reveesion|$5 reveesions}} oan page $3: $4',
+'logentry-suppress-event-legacy' => '$1 hidlinswise {{GENDER:$2|chynged}} veesibeelitie o log events oan $3',
+'logentry-suppress-revision-legacy' => '$1 hidlinswise {{GENDER:$2|chynged}} veesibeelitie o reveesions oan page $3',
+'revdelete-content-hid' => 'content skaukt',
+'revdelete-summary-hid' => 'eedit ootline skaukt',
+'revdelete-uname-hid' => 'uisername skaukt',
+'revdelete-content-unhid' => 'content onskaukt',
+'revdelete-summary-unhid' => 'eedit ootline onskaukt',
+'revdelete-uname-unhid' => 'uisername onskaukt',
+'revdelete-restricted' => 'applied restreections til admeenistraters',
+'revdelete-unrestricted' => 'remuived restreections fer admeenistraters',
+'logentry-move-move' => '$1 {{GENDER:$2|muived}} page $3 til $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|muived}} page $3 til $4 wioot leain ae reguidal',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|muived}} page $3 til $4 ower reguidal',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|muived}} page $3 til $4 ower ae reguidal wioot leain ae reguidal',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|maurkt}} reveesion $4 o page $3 patrowed',
+'logentry-patrol-patrol-auto' => '$1 autæmateeclie {{GENDER:$2|maurkt}} reveesion $4 o page $3 patrowed',
+'logentry-newusers-newusers' => 'Uiser accoont $1 wis {{GENDER:$2|cræftit}}',
+'logentry-newusers-create' => 'Uiser accoont $1 wis {{GENDER:$2|cræftit}}',
+'logentry-newusers-create2' => 'Uiser accoont $3 wis {{GENDER:$2|cræftit}} bi $1',
+'logentry-newusers-byemail' => 'Uiser accoont $3 wis {{GENDER:$2|cræftit}} bi $1 n passwaird wis sent bi wab-mail',
+'logentry-newusers-autocreate' => 'Uiser accoont $1 wis {{GENDER:$2|cræftit}} autæmateeclie',
+'logentry-rights-rights' => '$1 {{GENDER:$2|chynged}} groop memmership fer $3 fae $4 til $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|chynged}} groop memmership fer $3',
+'logentry-rights-autopromote' => '$1 wis autæmateeclie {{GENDER:$2|promoted}} fae $4 til $5',
+'rightsnone' => '(nane)',
+
+# Feedback
+'feedback-bugornote' => 'Gif yer readie tae describe ae techneecal problem in detail please [$1 report ae bug].
+Itherwise, ye can uiss the easie form ablo. Yer comment will be added til the page "[$3 $2]", alang wi yer uisername.',
+'feedback-adding' => 'Addin feedback til page...',
+'feedback-error1' => 'Mistak: Onrecognised ootcome fae API',
+'feedback-error2' => 'Mistak: Eedit failed',
+'feedback-error3' => 'Mistak: Naw response fae API',
+'feedback-thanks' => 'Thanks! Yer feedback haes been posted til the page "[$2 $1]".',
+'feedback-close' => 'Dun',
+'feedback-bugcheck' => "Wunnerfu! Just check that it's na awreadie yin o the [$1 knawn bugs].",
+'feedback-bugnew' => 'Ah checkt. Report ae new bug',
+
+# Search suggestions
+'searchsuggest-search' => 'Rake',
+'searchsuggest-containing' => 'containin...',
+
+# API errors
+'api-error-badaccess-groups' => "Ye'r na permittit tae uplaid files til this wiki.",
+'api-error-copyuploaddisabled' => 'Uplaidin bi URL is disabled oan this server.',
+'api-error-duplicate' => 'Thaur {{PLURAL:$1|is [$2 anither file]|ar [$2 some ither files]}} awreadie oan the site wi the same content.',
+'api-error-duplicate-archive' => 'Thaur {{PLURAL:$1|wis [$2 anither file]|were [$2 some ither files]}} awreadie oan the site wi the same content, but {{PLURAL:$1|it wis|thay were}} delytit.',
+'api-error-duplicate-archive-popup-title' => 'Dupleecate {{PLURAL:$1|file that haes|files that hae}} awreadie been delytit.',
+'api-error-duplicate-popup-title' => 'Dupleecate {{PLURAL:$1|file|files}}.',
+'api-error-empty-file' => 'The file that ye haunnit in wis tuim.',
+'api-error-emptypage' => 'Cræftin new, tuim pages isna permittit.',
+'api-error-fetchfileerror' => 'Internal mistak: Sommit went wrang while fetchin the file.',
+'api-error-fileexists-forbidden' => 'Ae file wi the name "$1" awreadie exeests, n canna be owerwritten.',
+'api-error-fileexists-shared-forbidden' => 'Ae file wi the name "$1" awreadie exeests in the shaired file reposeetair, n canna be owerwritten.',
+'api-error-file-too-large' => 'The file that ye haunnit in wis ower muckle.',
+'api-error-filename-tooshort' => 'The filename is ower short.',
+'api-error-filetype-banned' => 'This type o file is banned.',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|isna ae permittit file type|arna permittit file types}}. Permittit {{PLURAL:$3|file type is|file types ar}} $2.',
+'api-error-filetype-missing' => 'The filename is missin aen extension.',
+'api-error-hookaborted' => 'The modeefication that ye gave makin ae gae wis abortit bi aen extension.',
+'api-error-http' => 'Internal mistak: Onable tae connect til server.',
+'api-error-illegal-filename' => 'The filename isna permitit.',
+'api-error-internal-error' => 'Internal mistak: Sommit went wrang wi processin yer uplaid oan the wiki.',
+'api-error-invalid-file-key' => 'Internal mistak: File wisna foond in temparie storage.',
+'api-error-missingparam' => 'Internal mistak: Missin boonds oan request.',
+'api-error-missingresult' => 'Internal mistak: Coudna determine gif the copie succeeded.',
+'api-error-mustbeloggedin' => 'Ye maun be loggit in tae uplaid files.',
+'api-error-mustbeposted' => 'Internal mistak: Request needs HTTP POST.',
+'api-error-noimageinfo' => 'The uplaid succeeded, bit the server didna gie us onie information aneat the file.',
+'api-error-nomodule' => 'Internal mistak: Naw uplaid module set.',
+'api-error-ok-but-empty' => 'Internal mistak: Naw response fae server.',
+'api-error-overwrite' => 'Owerwritin aen exeestin file isna permitit.',
+'api-error-stashfailed' => 'Internal mistak: Server failed tae store temparie file.',
+'api-error-publishfailed' => 'Internal mistak: Server failed tae publeesh temparie file.',
+'api-error-stasherror' => 'Thaur wis ae mistak while uplaidin the file tae stash.',
+'api-error-timeout' => 'The server didna respond wiin the expectit time.',
+'api-error-unclassified' => 'Aen onkent mistake occurred.',
+'api-error-unknown-error' => 'Internal mistak: Sommit went wrang whan uplaidin yer file.',
+'api-error-uploaddisabled' => 'Uplaidin is disabled oan this wiki.',
+'api-error-verification-error' => 'This file micht be rotten, or hae the wrang extension.',
+
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|seicont|seiconts}}',
+'duration-hours' => '$1 {{PLURAL:$1|hoor|hoors}}',
+'duration-centuries' => '$1 {{PLURAL:$1|centuair|centuairs}}',
+
+# Image rotation
+'rotate-comment' => 'Eemage rotated bi $1 {{PLURAL:$1|degree|degrees}} clockwise',
+
+# Limit report
+'limitreport-title' => 'Parser profilin data:',
+'limitreport-cputime' => 'CPU time uissage',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|seicont|seiconts}}',
+'limitreport-walltime' => 'Real time uissage',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|seicont|seiconts}}',
+'limitreport-ppvisitednodes' => 'Preprocessor veesitit node coont',
+'limitreport-ppgeneratednodes' => 'Preprocessor generated node coont',
+'limitreport-postexpandincludesize' => 'Post-expand incluid size',
+'limitreport-expansiondepth' => 'Heiest expansion depth',
+'limitreport-expensivefunctioncount' => 'Expensive parser function coont',
+
+# Special:ExpandTemplates
+'expand_templates_intro' => 'This byordiair page taks tex n expauns aw templates in it recurseevelie.
+It foreby expaunds supported parser functions like
+<code><nowiki>{{</nowiki>#language:…}}</code> n vareeables like
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+In fact, it expauns just aboot awthings in dooble-braces.',
+'expand_templates_title' => 'Contex title, fer {{FULLPAGENAME}}, etc.:',
+'expand_templates_output' => 'Ootcome',
+'expand_templates_xml_output' => 'XML ootpit',
+'expand_templates_html_output' => 'Raw HTML ootpit',
+'expand_templates_remove_nowiki' => 'Suppress <nowiki> tags in ootcome',
+'expand_templates_generate_xml' => 'Shaw XML parse tree',
+'expand_templates_generate_rawhtml' => 'Shaw raw HTML',
+'expand_templates_preview' => 'Luikower',
 
 );
index f1dc240..f93acd2 100644 (file)
@@ -513,7 +513,6 @@ You cannot use the 'e-mail this user' feature unless a valid e-mail address is s
 'lineno' => 'سِٽَ $1:',
 'compareselectedversions' => 'چونڊيل پرت ڀيٽيو',
 'editundo' => 'اڻڪريو',
-'diff-multi' => '({{PLURAL:$1|هڪ وسطي مسودو|$1 وسطي مسودا}} لڪايل.)',
 
 # Search results
 'prevn' => 'پويان {{PLURAL:$1|$1}}',
index 3bb8079..a289b87 100644 (file)
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Squóráam linkám:',
-'tog-justify' => 'Icáitom paragraphám',
 'tog-hideminor' => 'Camaát editicúnos pac-quimáaxat camjöx cmaa iti',
 'tog-extendwatchlist' => 'Expand listade cáminot zo cohuatlöx jömde quíix applicablix',
 'tog-usenewrc' => 'Camjöx cmaa enhancöx (JavaScript)',
 'tog-numberheadings' => 'Auto-numberom text corridór',
 'tog-showtoolbar' => 'Cohuatlöx ticpatlöx toolbar (JavaScript)',
 'tog-editondblclick' => 'Ticpatlöx páhinám 2 clickám mii (JavaScript)',
-'tog-editsection' => 'Ton ticpatlöx seccion [edit] linkám via',
 'tog-editsectiononrightclick' => 'Ton ticpatlöx seccion pok clickám mii<br /> seccion titelám iti (JavaScript)',
-'tog-showtoc' => 'Cohuatlöx insacualte (páhinám bajlip 3 text corridór mii)',
 'tog-rememberpassword' => 'Qualtiinii he quimx canj jan ordinator iti (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'Plusöx páhinám he hun he listade cáminot',
 'tog-watchdefault' => 'Plusöx páhinám he ticpatlöx he listade cáminot',
@@ -546,7 +543,6 @@ Informacion: (curt) = quiíxde vercion currentua,
 'lineno' => 'Pozxáat $1:',
 'compareselectedversions' => 'Comparenom verción selectón',
 'editundo' => 'iixponintöx',
-'diff-multi' => '({{PLURAL:$1|1 revicion páult|$1 revición páultíi}} necohuatlöx.)',
 
 # Search results
 'searchresults' => 'Resuluámde yahöx',
index 61856d8..401b9b1 100644 (file)
@@ -19,7 +19,6 @@ $namespaceGenderAliases = array();
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Gbënëngö-gbê',
-'tog-justify' => 'Lôngbi yângâ tî âsurä',
 'tog-hideminor' => 'Hônde âkêtê lönzïngö-sû sô asï fadê na yâ tî gbâsû',
 'tog-hidepatrolled' => 'Hônde âlönzïngö-sû sô asï  na hönngö na yâ tî gbâsû',
 'tog-newpageshidepatrolled' => 'Na pöpö tî âlêmbëtï nî, hônde âla sô a yeke bâa ndo daä.',
@@ -28,9 +27,7 @@ $messages = array(
 'tog-numberheadings' => 'Sû nömörö bîakü bîakü na terê tî âlisurä',
 'tog-showtoolbar' => 'Fa motarâka tî sepesû (ahûnda Javascript)',
 'tog-editondblclick' => 'Pîka kpêkê ûse tî sepe lêmbëtï (ahûnda Javascript)',
-'tog-editsection' => 'Zîngo sëpengö surä na gbê "[Sepe]"',
 'tog-editsectiononrightclick' => 'Pîka kötï kpêkê na ndö tî lisurä sï mo sepe nî (ahûnda Javascript)',
-'tog-showtoc' => 'Fa molongö tî münä (tî âlêmbëtï sô ayeke na surä otâ)',
 'tog-rememberpassword' => 'Da bê na sênyîmbâ tî mbï (asï {{PLURAL:$1|längö|längö}}) $1',
 'tog-watchcreations' => 'Âlêmbëtï sô mbï sâra, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.',
 'tog-watchdefault' => 'Âlêmbëtï sô mbï sepe, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.',
@@ -39,7 +36,6 @@ $messages = array(
 'tog-minordefault' => 'Tî sêtîa nî, sûngi âsepesû kûê töngana kêtê sepesû',
 'tog-previewontop' => 'Tanda piabängö-nî na ndöbê tî zuka tî sepesû',
 'tog-previewonfirst' => 'Fa piabängö kôzo sepesû',
-'tog-nocache' => 'Zî höndëngö-lêmbëtï na kpëlidimbä',
 'tog-enotifwatchlistpages' => '¨To na mbï mbëtïsînga töngana mbênî lêmbetï asanzêe na yâ tî molongö tî mbï tî bängö-pekô.',
 'tog-enotifusertalkpages' => 'To na mbï mbëtïsînga töngana mbênî lêmbëtë asanzêe na yâ tî dalisoro tî mbï',
 'tog-enotifminoredits' => 'To na mbï mbëtïsînga lâkûê sô mbênî kêtê sänzëmä asï na yâ tî âlêmbëtï tî mbï.',
index ee3fd90..8a03222 100644 (file)
@@ -668,8 +668,6 @@ Pamiegīkėt [[Special:Search|ėiškoutė pruojektė]] sosėjosiu naujū poslapi
 'rev-delundel' => 'ruodītė/kavuotė',
 'revisiondelete' => 'Trintė/atkortė versėjės',
 'logdelete-selected' => "{{PLURAL:$2|Pasėrinkts|Pasėrinktė|Pasėrinktė}} '''$1''' istuorėjės {{PLURAL:$2|atėtėkims|atsėtėkimā|atsėtėkimā}}:",
-'revdelete-text' => "'''Ėštrintuos versėjės ėr ivīkē vistėik da bus ruodomė poslapė istuorėjuo ėr specēliūju veiksmū istuorėjuo, no anū torėnė dalīs nabus vėišā pasėikiamos.'''
-Kėtė admėnėstratuorē šėtom pruojekte vėsdar galės pasėiktė pasliepta torėni ėr galės ana atkortė viel par šėta pate sasaja, nabent īr nostatītė papėlduomė aprėbuojėmā.",
 'revdelete-unsuppress' => 'Šalėntė apribuojėmos atkortuos versėjės',
 'revdel-restore' => 'Keistė veizėmuma',
 'revdelete-edit-reasonlist' => 'Keistė trīnėma prīžastis',
index 7220cd9..aba797a 100644 (file)
@@ -369,7 +369,6 @@ $messages = array(
 'vector-action-protect' => 'Zaštiti',
 'vector-action-undelete' => 'Vrati obrisano',
 'vector-action-unprotect' => 'Promijeni zaštitu',
-'vector-simplesearch-preference' => 'Omogući traku za pojednostavljenu pretragu (samo Vector skin)',
 'vector-view-create' => 'Napravi',
 'vector-view-edit' => 'Uredi',
 'vector-view-history' => 'Pregled historije',
@@ -419,7 +418,7 @@ $messages = array(
 'talk' => 'Razgovor / Разговор',
 'views' => 'Pregledi',
 'toolbox' => 'Alatke / Алатке',
-'userpage' => 'Pogledajte korisničku stranicu',
+'userpage' => 'Pogledaj korisničku stranicu - Погледај корисничку страницу',
 'projectpage' => 'Pogledajte stranicu projekta',
 'imagepage' => 'Vidi stranicu datoteke/fajla',
 'mediawikipage' => 'Pogledaj stranicu s porukom',
@@ -461,7 +460,7 @@ $1',
 'policy-url' => 'Project:Pravila',
 'portal' => 'Portal zajednice',
 'portal-url' => 'Project:Portal_zajednice',
-'privacy' => 'Politika privatnosti',
+'privacy' => 'Politika privatnosti - Политика приватности',
 'privacypage' => 'Project:Pravila o anonimnosti',
 
 'badaccess' => 'Greška pri odobrenju',
@@ -633,7 +632,7 @@ Ne zaboravite izmijeniti vlastite [[Special:Preferences|{{SITENAME}} postavke]].
 'login' => 'Prijavi me - Пријави ме',
 'nav-login-createaccount' => 'Prijavi se / Registruj se',
 'loginprompt' => "Morate imati kolačiće ('''cookies''') omogućene da biste se prijavili na {{SITENAME}}.",
-'userlogin' => 'Prijavi se / stvori korisnički račun',
+'userlogin' => 'Prijavi se / Пријави се',
 'userloginnocreate' => 'Prijavi se',
 'logout' => 'Odjavi se - Одјави се',
 'userlogout' => 'Odjavi se / Одјави се',
@@ -647,8 +646,6 @@ Ne zaboravite izmijeniti vlastite [[Special:Preferences|{{SITENAME}} postavke]].
 'gotaccountlink' => 'Prijavite se / Пријавите се',
 'userlogin-resetlink' => 'Zaboravili ste detalje vaše prijave?',
 'userlogin-resetpassword-link' => 'Resetirajte svoju lozinku/zaporku',
-'helplogin-url' => 'Help:Logiranje',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoć pri logiranju]]',
 'createacct-join' => 'Unesite svoje informacije ispod',
 'createacct-another-join' => 'Dolje unesite informacije o novom računu.',
 'createacct-emailrequired' => 'E-mail adresa',
@@ -1068,7 +1065,7 @@ Ovakvi argumenti se trebaju izbjegavati.",
 Molimo da provjerite usporedbu ispod da budete sigurni da to želite učiniti, a zatim spremite promjene da bi ste završili vraćanje izmjene.',
 'undo-failure' => 'Izmjene se ne mogu vratiti zbog konflikta sa izmjenama u međuvremenu.',
 'undo-norev' => 'Izmjena se ne može vratiti jer ne postoji ranija ili je obrisana.',
-'undo-summary' => 'Vraćena izmjena $1 [[Special:Contributions/$2|korisnika $2]] ([[User talk:$2|razgovor]])',
+'undo-summary' => 'Poništena izmjena $1 [[Special:Contributions/$2|korisnika $2]] ([[User talk:$2|razgovor]])',
 'undo-summary-username-hidden' => 'Poništi izmjenu $1 od skrivenog korisnika',
 
 # Account creation failure
@@ -1151,8 +1148,6 @@ ili ta revizija ne postoji, ili pokušavate sakriti trenutnu reviziju.',
 'revdelete-show-file-submit' => 'Da',
 'revdelete-selected' => "'''{{PLURAL:$2|Odabrana revizija|Odabrane revizije}} od [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Označena stavka registra|Označene stavke registra}}:'''",
-'revdelete-text' => "'''Obrisane revizije i događaji će i dalje biti vidljivi u historiji stranice i registrima, ali dijelovi njenog sadržaja neće biti dostupni javnosti.'''
-Drugi administratori projekta {{SITENAME}} će i dalje moći pristupiti sakrivenom sadržaju i mogu ga ponovo vratiti kroz ovaj interfejs, osim ako nisu postavljena dodatna ograničenja.",
 'revdelete-confirm' => 'Molimo potvrdite da namjeravate ovo učiniti, da razumijete posljedice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].',
 'revdelete-suppress-text' => "Ograničenja bi trebala biti korištena '''samo''' u sljedećim slučajevima:
 * Osjetljive korisničke informacije
@@ -1615,8 +1610,8 @@ u zadnjih / у последњних $2 dana / дана<br />
 <br>
 $3
 <br>',
-'diff' => 'razl',
-'hist' => 'hist',
+'diff' => 'razl-разл',
+'hist' => 'his-пов',
 'hide' => 'Sakrij',
 'show' => 'prikaži / прикажи',
 'minoreditletter' => 'm/м',
@@ -1646,7 +1641,7 @@ Stranice koje su na vašem [[Special:Watchlist|spisku praćenja]] su '''podeblja
 'uploadbtn' => 'Postavi datoteku',
 'reuploaddesc' => 'Vratite se na upitnik za slanje',
 'upload-tryagain' => 'Pošaljite izmijenjeni opis datoteke',
-'uploadnologin' => 'Niste prijavljeni',
+'uploadnologin' => 'Niste prijavljeni / Нисте пријављени',
 'uploadnologintext' => 'Morate biti $1 da bi ste slali datoteke.',
 'upload_directory_missing' => 'Folder za postavljanje ($1) nedostaje i webserver ga ne može napraviti.',
 'upload_directory_read_only' => 'Folder za postavljanje ($1) na webserveru je postavljen samo za čitanje.',
@@ -2911,7 +2906,7 @@ Molimo pokušajte ponovno.',
 'import-rootpage-nosubpage' => 'Imenski prostor „$1“ osnovne stranice ne dozvoljava podstranice.',
 
 # Import log
-'importlogpage' => 'Registar uvoza',
+'importlogpage' => 'Evidencija uvoza stranica',
 'importlogpagetext' => 'Administrativni uvozi stranica s historijom izmjena sa drugih wikija.',
 'import-logentry-upload' => 'uvezen/a [[$1]] postavljanjem datoteke',
 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|revizija|revizije|revizija}}',
index 8a355f2..87f6958 100644 (file)
@@ -161,7 +161,6 @@ $messages = array(
 'vector-action-protect' => 'Ḥbu',
 'vector-action-undelete' => 'Rard may mayḥiydn',
 'vector-action-unprotect' => 'Ḥiyd aḥbu',
-'vector-simplesearch-preference' => 'Mmurzm immalatn n icnubcn lan atig (I Vector waḥdut )',
 'vector-view-create' => 'Skert',
 'vector-view-edit' => 'Ara',
 'vector-view-history' => 'Mel amzruy',
index 57b9345..7432006 100644 (file)
@@ -16,6 +16,7 @@
  * @author Meno25
  * @author Pasanbhathiya2
  * @author Romaine
+ * @author Sahan.ssw
  * @author Singhalawap
  * @author Thushara
  * @author චතුනි අලහප්පෙරුම
@@ -228,9 +229,9 @@ $messages = array(
 'tog-ccmeonemails' => 'මා විසින් අනෙකුත් පරිශීලකයන් හට යවන විද්‍යුත්-තැපෑලයන්හි පිටපත් මාහට එවන්න',
 'tog-diffonly' => '“වෙනස් ”පදයන්ට පහළින්, පිටුවල අන්තර්ගතය   නොපෙන්වන්න',
 'tog-showhiddencats' => 'සැඟවුනු ප්‍රවර්ග පෙන්වන්න',
-'tog-noconvertlink' => 'සබැඳියන්ගේ ශීර්ෂ පෙරැළීම අක්‍රීය කරන්න',
 'tog-norollbackdiff' => 'පුනරාවර්තනයක් කිරීමෙන් පසු වෙනස්වීම් අත්හරින්න',
 'tog-useeditwarning' => 'මා සංස්කරණ පිටුවක් සුරකිනු නොලැබූ වෙනස්කිරීම් සමඟ අතහැර යන විට අවවාද කරන්න',
+'tog-prefershttps' => 'සැම විටම ඇතුළු වීමේදී ආරක්ෂාකාරී ජාලයක් භාවිතා කරන්න',
 
 'underline-always' => 'සැමවිටම කරන්න',
 'underline-never' => 'කිසිවිටෙක නොකරන්න',
@@ -354,7 +355,6 @@ $messages = array(
 'vector-action-protect' => 'ආරක්‍ෂණය',
 'vector-action-undelete' => 'මකාදැමීම අවලංගු කරන්න',
 'vector-action-unprotect' => 'ආරක්ෂණ තත්වය වෙනස් කරන්න',
-'vector-simplesearch-preference' => 'සුළු කළ සෙවුම් බාරය (වෙක්ටර් තීමය සඳහා පමණි)',
 'vector-view-create' => 'තනන්න',
 'vector-view-edit' => 'සංස්කරණය',
 'vector-view-history' => 'ඉතිහාසය නරඹන්න',
@@ -517,6 +517,11 @@ $1",
 # General errors
 'error' => 'දෝෂය',
 'databaseerror' => 'දත්ත-ගබඩා දෝෂය',
+'databaseerror-text' => 'දත්ත ගබඩාවේ විමසුමට දෝෂයක් මතු වී ඇත.මෙය මෘදුකාංගයේ දෝෂයක් ඇති බව පෙන්නුම් කරයි.',
+'databaseerror-textcl' => 'දත්ත ගබඩාවේ විමසුමට දෝෂයක් මතු වී ඇත.',
+'databaseerror-query' => 'විමසුම: $1',
+'databaseerror-function' => 'ශ්‍රිතය:$1',
+'databaseerror-error' => 'දෝෂය: $1',
 'laggedslavemode' => "'''අවවාදයයි:''' මෑත යාවත්කාලීන කිරීම් මෙම පිටුවෙහි අඩංගු නොවීමට ඉඩ ඇත.",
 'readonly' => 'දත්තසංචිතය අගුළුලා ඇත',
 'enterlockreason' => 'අවුරා දැමීමට හේතුවක් සපයන අතරතුර, ඇවිරීම මුදාහැරීමට බලාපොරොත්තු වන කාලසීමාව නිමානය කර දක්වන්න',
@@ -581,6 +586,9 @@ $2',
 'ns-specialprotected' => 'විශේෂ පිටු සංස්කරණය කිරීම සිදු කල නොහැක.',
 'titleprotected' => "මෙම ශීර්ෂ-නාමය තැනීම  [[User:$1|$1]] විසින් වාරණය කොට ඇත.
 මේ සඳහා  ''$2''  හේතුව දක්වා ඇත.",
+'filereadonlyerror' => '"$2"දත්ත ගොනුවේ කියවීමට පමණක් ඇති ආකාරයට ඇති නිසා "$1" ගොනුව සංස්කරණය කල නොහැක.
+
+මෙය අගුලු දැමූ පරිගණක පරිපාලක "$3" හේතුව ඉදිරිපත්කර ඇත.',
 'exception-nologin' => 'ප්‍රවිෂ්ට වී නොමැත',
 
 # Virus scanner
@@ -589,16 +597,16 @@ $2',
 'virus-unknownscanner' => 'නොහඳුනන ප්‍රතිවයිරසයක්:',
 
 # Login and logout pages
-'logouttext' => "'''ඔබ දැන් ගිණුමෙන් නික්මී ඇත.'''
+'logouttext' => '<strong>ඔබ දැන් ගිණුමෙන් නික්මී ඇත.</strong>
 
-ඔබට නිර්නාමිකව {{SITENAME}} කටයුතු කරගෙන යාහැක, නැතහොත් පෙර පරිශීලක ලෙස හෝ වෙනත් පරිශීලකයෙකු ලෙස <span class='plainlinks'>[$1 නැවත ගිණුමක‍ට පිවිසිය හැක]</span>.
-ඔබගේ බ්‍රවුසරයෙහි පූර්වාපේක්‍ෂී සංචිතය (කෑෂය) පිරිසිදුකරන තෙක්, සමහරක් පිටු විසින් ඔබ තවදුරටත් පිවිසී ඇති බවක් දිගටම පෙන්නුම් කිරීමට ඉඩ ඇත.",
+ඔබගේ බ්‍රවුසරයෙහි පූර්වාපේක්‍ෂී සංචිතය (කෑෂය) පිරිසිදුකරන තෙක්, සමහරක් පිටු විසින් ඔබ තවදුරටත් පිවිසී ඇති බවක් දිගටම පෙන්නුම් කිරීමට ඉඩ ඇත.',
 'welcomeuser' => 'ආයුබෝවන්, $1!',
 'welcomecreation-msg' => 'ඔබගේ ගිණුම තනා ඇත.
 ඔබගේ [[Special:Preferences|{{SITENAME}} අභිරුචීන්]] නෙස් කිරීමට අමතක නොකරන්න.',
 'yourname' => 'පරිශීලක නාමය:',
 'userlogin-yourname' => 'පරිශීලක නම',
 'userlogin-yourname-ph' => 'ඔබගේ පරිශීලක නම ඇතුළු කරන්න',
+'createacct-another-username-ph' => 'ඔබගේ පරිශීලක නම ඇතුළු කරන්න',
 'yourpassword' => 'මුරපදය:',
 'userlogin-yourpassword' => 'මුර පදය',
 'userlogin-yourpassword-ph' => 'ඔබගේ මුර පදය ඇතුළු කරන්න',
@@ -628,9 +636,12 @@ $2',
 'gotaccount' => 'දැනටමත් ගිණුමක් තිබේද? $1.',
 'gotaccountlink' => 'පිවිසෙන්න',
 'userlogin-resetlink' => 'ඔබේ පිවිසුම් තොරතුරු අමතකද?',
-'helplogin-url' => 'Help:ප්‍රවිෂ්ට වීම',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ප්‍රවිෂ්ට වීමට උදවු වන්න]]',
+'userlogin-resetpassword-link' => 'ඔබේ මුරපදය නැති වුනාද?',
+'userlogin-loggedin' => 'ඔබ දැනටමත් {{GENDER:$1|}} ලෙස පිවිසී ඇත.
+නව පරිශීලකයෙකු ලෙස ඇතුළු වීමට පහත ආකෘතිය පුරවන්න.',
+'userlogin-createanother' => 'තවත් ගිණුමක් ආරම්භ කරන්න',
 'createacct-join' => 'ඔබගේ තොරතුරු පහත ඇතුළු කරන්න.',
+'createacct-another-join' => 'නව ගිණුමේ දත්ත පහත ඇතුළු කරන්න.',
 'createacct-emailrequired' => 'වි-තැපෑල ලිපිනය',
 'createacct-emailoptional' => 'වි-තැපෑල ලිපිනය (විකල්ප)',
 'createacct-email-ph' => 'ඔබගේ වි-තැපෑල ලිපිනය ඇතුළු කරන්න',
@@ -707,7 +718,7 @@ $2',
 'cannotchangeemail' => 'මෙම විකියේ ගිණුම් විද්‍යුත් ලිපිනය වෙනස් කල නොහැකිය.',
 'emaildisabled' => 'මෙම අඩවියට විද්‍යුත්-තැපැල් යැවිය නොහැක.',
 'accountcreated' => 'ගිණුම තනන ලදි',
-'accountcreatedtext' => '[[{{ns:පරිශීලක}}:$1|$1]] ([[{{ns:පරිශීලක සාකච්ඡාව}}:$1|සාකච්ඡාව]]) සඳහා පරිශීලක ගිණුම තනා ඇත.',
+'accountcreatedtext' => '[[{{ns:User}}:$1|$1]]  ([[{{ns:User talk}}:$1|talk]]) සඳහා පරිශීලක ගිණුම තනා ඇත.',
 'createaccount-title' => '{{SITENAME}} සඳහා ගිණුම තැනීම',
 'createaccount-text' => 'කිසියම් අයෙකු, "$2" නමින් හා, "$3" යන මුර-පදය යොදමින්,  ඔබගේ විද්‍යුත්-තැපැල් ලිපිනය සඳහා {{SITENAME}} ($4) හි ගිණුමක් තනා ඇත.
 ඔබ දැන් ගිණුම‍ට පිවිස, ඔබගේ මුර-පදය වෙනස් කල යුතුව ඇත.
@@ -719,10 +730,16 @@ $2',
 'login-abort-generic' => 'ඔබගේ පිවිසීම අසාර්ථකයි - අතහැර දමනලදී',
 'loginlanguagelabel' => 'භාෂාව: $1',
 'suspicious-userlogout' => 'නිෂ්ක්‍රමණය සඳහා ඔබගේ අයැදුම නිෂ්ප්‍රභා කෙරුනේ එය යොමු කොට ඇත්තේ භින්න(කැඩුනු) බ්‍රවුසරයකින් හෝ නිවේෂණය කෙරෙමින් පවතින ප්‍රොක්සියක් වෙතින් යැයි බැලූ බැල්මට පෙනෙන බැවිනි.',
+'createacct-another-realname-tip' => 'සැබෑ නාමය හෙළි කිරීම වෛකල්පිකයි.
+ඔබ විසින් එය හෙළි කල හොත්, ඔබගේ කෘතීන් සඳහා ඔබහට කතෘ-බුහුමන් පිරිනැමීමට එය භාවිතා කරනු ඇත.',
+'pt-login' => 'පිවිසෙන්න',
+'pt-createaccount' => 'ගිණුමක් තනන්න',
+'pt-userlogout' => 'නික්මීම',
 
 # Email sending
 'php-mail-error-unknown' => 'php mail() ශ්‍රිතයේ හඳුනානොගත් ගැටළුවකි',
 'user-mail-no-addy' => 'විද්‍යුත් තැපැල් ලිපිනයක් නොමැතිව විද්‍යුත් තැපැල් පණිවුඩයක් යැවීමට උත්සහ දරා ඇත.',
+'user-mail-no-body' => 'හිස් හෝ ඉතා කෙටි පෙළක් සහිත ඊ-තැපෑලක් යැවීමට උත්සාහ කර ඇත.',
 
 # Change password dialog
 'changepassword' => 'මුරපදය වෙනස් කරන්න',
@@ -735,17 +752,26 @@ $2',
 'retypenew' => 'නව මුර-පදය නැවත ඇතුළු කරන්න:',
 'resetpass_submit' => 'මුර-පදය පූරණය කොට ඉන් පසු ප්‍රවිෂ්ට වන්න',
 'changepassword-success' => 'ඔබගේ මුර-පදය සාර්ථක ලෙස වෙනස් කරන ලදී!',
+'changepassword-throttled' => 'ඔබ විසින් මෑතදී  පමණට වඩා වාර ගණනක් පිවිසීමෙහි උත්සාහයන් දරා ඇත.
+යළි උත්සාහ කිරීමට පෙර $1 වේලාවක් රැඳී සිටින්න.',
 'resetpass_forbidden' => 'මුර-පදයන් වෙනස් කිරීම  සිදු කල නොහැක',
 'resetpass-no-info' => 'මෙම පිටුව සෘජු ලෙස පරිශීලනය කෙරුමට ඔබ පළමු ප්‍රවිෂ්ට විය යුතුය.',
 'resetpass-submit-loggedin' => 'මුර-පදය වෙනස්කරන්න',
 'resetpass-submit-cancel' => 'අත් හරින්න',
 'resetpass-wrong-oldpass' => 'තාවකාලික හෝ වත්මන් මුර-පදය අනීතිකයි.
 ඔබ දැනටමත් සාර්ථක ලෙස ඔබගේ මුර-පදය වෙනස් කොට හෝ නව තාවකාලික මුර-පදයක් ඉල්ලා සිට හෝ ඇතිවා විය හැක.',
+'resetpass-recycled' => 'කරුණාකර දැනට පවතින මුරපදයට වෙනස් මුරපදයක් යොදන්න.',
+'resetpass-temp-emailed' => 'ඔබ තාවකාලික ඊ-තැපැල් කේතයක් මඟින් ඇතුළු වී ඇත.
+ඇතුළු වීම අවසන් කිරීමට නව මුරපදයක් මෙතන ඇතුළු කරන්න.',
 'resetpass-temp-password' => 'තාවකාලික මුර-පදය:',
+'resetpass-abort-generic' => 'මුරපදය වෙනස් කිරීම විස්තීරණය මඟින් වලකා ඇත.',
+'resetpass-expired' => 'ඔබගේ මුරපදය කල් ඉකුත්වී ඇත.කරුණාකර නව මුරපදයක් සකස් කරන්න.',
+'resetpass-expired-soft' => 'ඔබගේ මුරපදය කල් ඉකුත්වී ඇති අතර එය නැවත සකස් කල යුතුය.කරුණාකර දැන් මුරපදයක් තෝරන්න.නවත්තන්න click කිරීමෙන් එය පසුව සකස් කල හැකිය.',
 
 # Special:PasswordReset
 'passwordreset' => 'මුරපදය වෙනස් කරන්න',
 'passwordreset-text-one' => 'තාවකාලික මුර-පදයක් විද්‍යුත් තැපෑළ මගින් ලබා ගැනීම සඳහා මෙම පෝරමය සම්පූර්ණ කරන්න.',
+'passwordreset-text-many' => '{{PLURAL:$1|තාවකාලික මුරපදයක් ඊ-තැපෑල හරහා ගෙන්වා ගැනීමට එක් ක්ෂේත්‍රයක් පුරවන්න}}',
 'passwordreset-legend' => 'මුරපදය යළි පිහිටුවන්න',
 'passwordreset-disabled' => 'මෙම විකියෙහි මුර පද ප්‍රත්‍යාරම්භ කිරීම් අක්‍රීය කොට ඇත.',
 'passwordreset-emaildisabled' => 'විද්‍යුත්  තැපැල් පහසුකම මෙම විකි ය සඳහා අවලංගු කොට ඇත.',
@@ -762,11 +788,17 @@ $2
 
 {{PLURAL:$3|මෙම තාවකාලික මුරපදය|මෙම තාවකාලික මුරපද}} {{PLURAL:$5|එක් දිනයක්|දින $5 ක්}} ගෙවුනු විට ඉකුත් වනු ඇත.
 ඔබ දැන් ප්‍රවිෂ්ට වී නව මුරපදයක් තෝරාගත යුතුයි. වෙන යම් අයෙක් මෙම ඉල්ලීම කර ඇත්නම් හෝ, ඔබගේ මුල් මුරපදය ඔබගේ මතකයට පැමිණ ඇති නම් හා, එය වෙනස් කිරීමට ඔබ හට තවදුරටත් අවශ්‍ය නොවේ නම්, ඔබ විසින් මෙම පණිවුඩය නොසලකා හැර පැරණි මුරපදය තවදුරටත් පාවිච්චි කළ හැක.',
+'passwordreset-emailtext-user' => '{{SITENAME}} හි පරිශීලක $1,{{SITENAME}}($4)සඳහා මුරපදය යලි පිහිටුවීමට ඉල්ලා ඇත.
+
+$2
+
+{{PLURAL:$3|මෙම මුරපදය|මෙම මුරපද}}{{PLURAL:$5|එක් දිනකින්|දවස්$5කින්}}කල් ඉකුත් වනු ඇත.
+ඔබ දැන් ඇතුළු වී නව මුරපදයක් තේරිය යුතුය.මෙම ඉල්ලීම වෙන කෙනෙකු විසින් හෝ ඔබට ඔබගේ මුල් මුරපදය මතක නම් හෝ ඔබ තව දුරටත් එය වෙනස් කිරීමට අදහස් නොකරයි නම් හෝ ඔබ මෙම පනිවිඩය නොසලකාහැර ඔබගේ පැරණි මුරපදය භාවිතා කරන්න.',
 'passwordreset-emailelement' => 'පරිශීලක නාමය: $1
 තාවකාලික මුරපදය: $2',
 'passwordreset-emailsent' => 'මුර-පදය නැවත සකස් කිරීම පිළිබඳව විද්‍යුත් තැපෑලක් යවන ලදී.',
 'passwordreset-emailsent-capture' => 'මුර-පදය වෙනස් කිරීම පිළිබඳව විද්‍යුත් තැපෑලක් යවන ලදී, එය පහත දැක්වේ.',
-'passwordreset-emailerror-capture' => 'සිහිකැඳවුම් ඊ-තැපෑල ජනිත කරනු ලැබූ අතර, එය පහත දැක්වේ, නමුත් එය පරිශීලකයාට යැවීම අසාර්ථක වුනි: $1',
+'passwordreset-emailerror-capture' => 'සිහිකැඳවුම් ඊ-තැපෑල ජනිත කරනු ලැබූ අතර, එය පහත දැක්වේ, නමුත් එය {{GENDER:$2|}}පරිශීලකයාට යැවීම අසාර්ථක වුනි: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'විද්‍යුත් තැපැල් ලිපිනය වෙනස් කරන්න',
@@ -779,6 +811,8 @@ $2
 'changeemail-password' => 'ඔබේ {{SITENAME}} මුරපදය:',
 'changeemail-submit' => 'විද්‍යුත් තැපෑල  වෙනස් කරන්න',
 'changeemail-cancel' => 'අවලංගු කරන්න',
+'changeemail-throttled' => 'ඔබ විසින් මෑතදී  පමණට වඩා වාර ගණනක් පිවිසීමෙහි උත්සාහයන් දරා ඇත.
+යළි උත්සාහ කිරීමට පෙර $1 වේලාවක් රැඳී සිටින්න.',
 
 # Edit page toolbar
 'bold_sample' => 'තදකුරු පෙළ',
@@ -942,10 +976,10 @@ $2
 ''' හිමිකම් ඇවුරුණු දේ අනවසරයෙන් ප්‍රකාශ කිරිමෙන් වලකින්න!'''",
 'longpageerror' => "'''දෝෂය: ඔබ සපයා ඇති පෙළ  {{PLURAL:$1|එක් කිලෝ බයිටයක්|කිලෝ බයිට් $1 ක්}} දිගු වන අතර, අනුමත උපරිමය වන  {{PLURAL:$2|එක් කිලෝ බයිටය |කිලෝ බයිට $2  }} ඉක්මවයි.'''
 එය සුරැකිය නොහැක.",
-'readonlywarning' => "'''අවවාදයයි: නඩත්තු කටයුතු සඳහා දත්ත-සංචිතය අවහිරකර ඇති බැවින් ඔබගේ සංස්කරණයන් දැන්මම සුරැකීමට ඔබ හට නොහැක.
-à¶\94බ à¶­à·\94ටà·\94 à¶±à¶¸à·\8a, à¶\9aපà·\8f-පà·\83à·\94à·\80-à¶\87ලà·\80à·\93මà¶\9aà·\8a (cut-n-paste) à¶¸à¶\9cà·\92නà·\8a à¶´à·\99à·\85 à·\80à·\99නතà·\8a à¶´à·\99à·\85 à¶\9cà·\9cනà·\94à·\80à¶\9aට à¶±à¶\82à·\80à·\8f à¶´à·\83à·\94à·\80 à·\83à·\94රà·\90à¶\9aà·\93මට à·\84à·\90à¶\9a.'''
+'readonlywarning' => '<strong>අවවාදයයි: නඩත්තු කටයුතු සඳහා දත්ත-සංචිතය අවහිරකර ඇති බැවින් ඔබගේ සංස්කරණයන් දැන්මම සුරැකීමට ඔබ හට නොහැක.
+à¶\94බ à¶­à·\94ටà·\94 à¶±à¶¸à·\8a, à¶´à·\92ටපතà·\8a à¶\9aර -පà·\83à·\94à·\80-à¶\87ලà·\80à·\93මà¶\9aà·\8a (copy-n-paste) à¶¸à¶\9cà·\92නà·\8a à¶´à·\99à·\85 à·\80à·\99නතà·\8a à¶´à·\99à·\85 à¶\9cà·\9cනà·\94à·\80à¶\9aට à¶±à¶\82à·\80à·\8f à¶´à·\83à·\94à·\80 à·\83à·\94රà·\90à¶\9aà·\93මට à·\84à·\90à¶\9a.</strong>
 
-එය ඇවුරූ පරිපාලක විසින් ඒ සඳහා දී ඇති පැහැදිලි කිරීම මෙසේය: $1",
+එය ඇවුරූ පරිපාලක විසින් ඒ සඳහා දී ඇති පැහැදිලි කිරීම මෙසේය: $1',
 'protectedpagewarning' => "\"'අවවාදයයි: පරිපාලක වරප්‍රසාද හිමි අයට පමණක් සංස්කරණය කලහැකි වන පරිදි මෙම පිටුව අවහිරකර ඇත.'''
 පරිශීලනය සඳහා ආසන්නතම සටහන පහත දක්වා ඇත.",
 'semiprotectedpagewarning' => "'''සටහන:''' ලේඛනගත පරිශීලකයන්ට පමණක් සංස්කරණය කල හැකි පරිදි මෙම පිටුව අවහිරකර ඇත.
@@ -988,6 +1022,7 @@ $2
 'invalid-content-data' => 'වලංගු නොවන අන්තර්ගත දත්ත',
 'editwarning-warning' => 'අවධානයට: මෙම පිටුවෙන් නික්ම යාම ඔබ සිදු කළ වෙනස්කම් නැතිවී යෑමට හේතු විය හැක.
 ඔබ ප්‍රවිෂ්ටවී ඇත්නම්, ඔබගේ වරණයන්වල "සංසකරණය කිරීම්" කොටසේ ඇති මෙම අනතුරු ඇඟවීම අක්‍රීය කළ හැක.',
+'editpage-notsupportedcontentformat-title' => 'අන්තර්ගත සකැස්ම ක්‍රියා නොකරයි',
 
 # Content models
 'content-model-wikitext' => 'විකිපෙළ',
@@ -1096,8 +1131,6 @@ $3 විසින් සපයා ඇති හේතුව ''$2'' වේ",
 'revdelete-show-file-submit' => 'ඔව්',
 'revdelete-selected' => "'''[[:$1]] හි {{PLURAL:$2|තෝරාගත් සංශෝධනය|තෝරාගත් සංශෝධනයන්}} :'''",
 'logdelete-selected' => "'''{{PLURAL:$1|තෝරාගත් ලඝු-සිදුවීම|තෝරාගත් ලඝු-සිදුවීම්}}:'''",
-'revdelete-text' => "'''මකාදැමුණු සංශෝධනයන් හා සිද්ධීන් තවදුරටත් පිටු විත්ති හා ලඝු-සටහන් හි දර්ශනය වුවද, ප්‍රජාව ට ප්‍රවිෂ්ඨ විය හැක්කේ ඒවායේ අන්තර්ගතයෙන් කොටසකටය.'''
-අමතර සීමා පණවා නොමැති නම්, සැඟවුනු අන්තර්ගතයට එළඹී, යම් අතුරුමුහුණතක් ඔස්සේ,   එය මකාදැමුම යළි අවලංගු කිරීමට, {{SITENAME}} හි අනෙකුත් පරිපාලකයන්හට තවමත් අවතාශ ඇත්තේය.",
 'revdelete-confirm' => 'කරුණාකර ඔබ මෙය කිරීමට අදහස් කරන බවත්,එහි ප්‍රතිඵලය අවබෝධ කර ගන්නා බවත්,මෙය සිදු කරනුයේ [[{{MediaWiki:Policy-url}}| ප්‍රතිපත්තියට]] අනුකූලව බවත් තහවුරු කරන්න.',
 'revdelete-suppress-text' => "යටපත්කිරීම පහත අවස්ථාවන්හිදී  '''පමණක්''' භාවිතා කල යුතුය:
 * නුසුදුසු පෞද්ගලික තොරතුරු
@@ -1106,8 +1139,8 @@ $3 විසින් සපයා ඇති හේතුව ''$2'' වේ",
 'revdelete-hide-text' => 'සංශෝධන පෙළ සඟවන්න',
 'revdelete-hide-image' => 'ගොනු අන්තර්ගතය සඟවන්න',
 'revdelete-hide-name' => 'ක්‍රියාව හා ඉලක්කය සඟවන්න',
-'revdelete-hide-comment' => 'සංස්කරණ පරිකථනය සඟවන්න',
-'revdelete-hide-user' => 'සංස්කාරකගේ පරිශීලක නාමය/IP ලිපිනය සඟවන්න',
+'revdelete-hide-comment' => 'සංස්කරණ පරිකථනය',
+'revdelete-hide-user' => 'සංස්කාරකගේ පරිශීලක නාමය/IP ලිපිනය',
 'revdelete-hide-restricted' => 'අනෙකුන් මෙන්ම පරිපාලකවරුන් ගෙන්ද මෙම දත්ත යටපත්කරන්න',
 'revdelete-radio-same' => '(වෙනස් නොකරන්න)',
 'revdelete-radio-set' => 'සඟවනලද',
@@ -1184,11 +1217,13 @@ $1",
 
 # Diffs
 'history-title' => '$1:  සංශෝධන ඉතිහාසය',
+'difference-title-multipage' => '"$1" හා "$2" පිටු අතර වෙනස',
 'difference-multipage' => 'පිටු අතර වෙනස',
 'lineno' => '$1 පේළිය:',
 'compareselectedversions' => 'තෝරාගත් සංශෝධන සසඳන්න',
 'showhideselectedversions' => 'තෝරාගත් සංශෝධන පෙන්වන්න/සඟවන්න',
 'editundo' => 'අහෝසිය',
+'diff-empty' => '(වෙනසක් නොමැත)',
 'diff-multi-manyusers' => '(පරිශීලකයන් $2 කට වඩා වැඩි ගණනකගේ ආසන්න පුනරීක්‍ෂණ $1ක් පෙන්වා නොමැත)',
 
 # Search results
@@ -1205,7 +1240,7 @@ $1",
 'shown-title' => 'එක් පිටුවකට {{PLURAL:$1|ප්‍රතිඵලයක්|ප්‍රතිඵල $1 ක්}} බැගින් පෙන්වන්න',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) නරඹන්න',
 'searchmenu-exists' => "'''මෙම විකියෙහි \"[[:\$1]]\" ලෙස නම් කර ඇති පිටුවක් ඇත.'''",
-'searchmenu-new' => "'''මෙම විකියෙහි \"[[:\$1]]\" පිටුව තනන්න!'''",
+'searchmenu-new' => '<strong>පිටුව තනන්න "[[:$1]]" මෙම විකියෙහි!</strong> {{PLURAL:$2|0=|ඔබගේ සෙවුමට හසුවූ පිටුව බලන්න.|සෙවූ ප්‍රතිපල බලන්න.}}',
 'searchprofile-articles' => 'අන්තර්ගත පිටු',
 'searchprofile-project' => 'උදවු හා ව්‍යාපෘති පිටු',
 'searchprofile-images' => 'බහුමාධ්‍ය',
@@ -1221,6 +1256,7 @@ $1",
 'search-result-score' => 'අදාළතාව: $1%',
 'search-redirect' => '($1 යළි-යොමු කරන්න)',
 'search-section' => '($1 ඡේදය)',
+'search-file-match' => '(ගොනු දත්ත සැසදේ)',
 'search-suggest' => 'ඔබ අදහස් කළේ මෙයද: $1',
 'search-interwiki-caption' => 'සොයුරු ව්‍යාපෘති',
 'search-interwiki-default' => '$1 වෙතින් ප්‍රතිඵල:',
@@ -1328,7 +1364,7 @@ HTML ටැගයන් පිරික්සන්න.',
 'gender-unknown' => 'හෙළි නොකරයි',
 'gender-male' => 'පුරුෂ',
 'gender-female' => 'ස්ත්‍රී',
-'prefs-help-gender' => 'අත්‍යවශ්‍ය නැත: මෘදුකාංග විසින් නිවැරැදි ආමන්ත්‍රනය සඳහා භාවිතා කෙරෙයි.
+'prefs-help-gender' => 'මà·\99ම à·\83à¶\82à·\83à·\8aà¶\9aරණය à¶\85තà·\8aâ\80\8dයà·\80à·\81à·\8aâ\80\8dය à¶±à·\90ත: à¶¸à·\98දà·\94à¶\9aà·\8fà¶\82à¶\9c à·\80à·\92à·\83à·\92නà·\8a à¶±à·\92à·\80à·\90රà·\90දà·\92 à¶\86මනà·\8aතà·\8aâ\80\8dරනය à·\83ඳà·\84à·\8f à¶·à·\8fà·\80à·\92තà·\8f à¶\9aà·\99රà·\99යà·\92.
 මෙම තොරතුර ප්‍රජාවට විවෘතය.',
 'email' => 'විද්‍යුත් තැපෑල',
 'prefs-help-realname' => 'සැබෑ නාමය හෙළි කිරීම වෛකල්පිකයි.
@@ -1343,6 +1379,8 @@ HTML ටැගයන් පිරික්සන්න.',
 'prefs-dateformat' => 'දින ආකෘතිය',
 'prefs-timeoffset' => 'වේලා හිලව්ව',
 'prefs-advancedediting' => 'ප්‍රධාන විකල්පයන්',
+'prefs-editor' => 'සංස්කාරක',
+'prefs-preview' => 'පෙරදසුන',
 'prefs-advancedrc' => 'වැඩිදුර සැකසුම් තෝරාගැනීම',
 'prefs-advancedrendering' => 'වැඩිදුර සැකසුම් තෝරාගැනීම',
 'prefs-advancedsearchoptions' => 'ප්‍රගත විකල්පයන්',
@@ -1350,7 +1388,9 @@ HTML ටැගයන් පිරික්සන්න.',
 'prefs-displayrc' => 'දර්ශන සැකසුම් තෝරාගැනීම',
 'prefs-displaysearchoptions' => 'විකල්ප පෙන්වන්න',
 'prefs-displaywatchlist' => 'විකල්ප පෙන්වන්න',
+'prefs-tokenwatchlist' => 'ටෝකනය',
 'prefs-diffs' => 'වෙනස',
+'prefs-help-prefershttps' => 'ඔබගේ අභිරුචිය මීළඟ ඇතුළු වීමේ සිට ක්‍රියාත්මක වනු ඇත.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'විද්‍යුත්-තැපැල් ලිපිනය අනීතික බවක් පෙනෙයි.',
@@ -1510,6 +1550,7 @@ HTML ටැගයන් පිරික්සන්න.',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|වෙනස්වීම|වෙනස්වීම්}}',
+'enhancedrc-history' => 'ඉතිහාසය',
 'recentchanges' => 'මෑත වෙනස්කිරීම්',
 'recentchanges-legend' => '‍නව වෙනස්වීම් සැකසුම් තෝරාගැනීම',
 'recentchanges-summary' => 'මෙම පිටුවේ විකියට සිදුකල ඉතා මෑත වෙනස්වීම් පසුහඹන්න.',
@@ -1522,11 +1563,23 @@ HTML ටැගයන් පිරික්සන්න.',
 'rcnotefrom' => "'''$2''' න් පසු සිදුවී ඇති වෙනස්කම් මෙහි පහත දැක්වේ ('''$1''' ක ප්‍රමාණයක උපරිමයක් පෙන්වා ඇත).",
 'rclistfrom' => '$1 සිට බලපැවැත්වෙන මෑත වෙනස්වීම් පෙන්වන්න',
 'rcshowhideminor' => 'සුළු සංස්කරණ $1',
+'rcshowhideminor-show' => 'පෙන්වන්න',
+'rcshowhideminor-hide' => 'සඟවන්න',
 'rcshowhidebots' => 'රොබෝ $1',
+'rcshowhidebots-show' => 'පෙන්වන්න',
+'rcshowhidebots-hide' => 'සඟවන්න',
 'rcshowhideliu' => 'ලේඛනගත පරිශීලකයෝ $1',
+'rcshowhideliu-show' => 'පෙන්වන්න',
+'rcshowhideliu-hide' => 'සඟවන්න',
 'rcshowhideanons' => 'නිර්නාමික පරිශීලකයන් $1',
+'rcshowhideanons-show' => 'පෙන්වන්න',
+'rcshowhideanons-hide' => 'සඟවන්න',
 'rcshowhidepatr' => 'පරික්‍ෂා කර බැලූ සංස්කරණයන් $1',
+'rcshowhidepatr-show' => 'පෙන්වන්න',
+'rcshowhidepatr-hide' => 'සඟවන්න',
 'rcshowhidemine' => 'මගේ සංස්කරණයන් $1',
+'rcshowhidemine-show' => 'පෙන්වන්න',
+'rcshowhidemine-hide' => 'සඟවන්න',
 'rclinks' => 'අවසන් දින $2 තුලදී සිදුවී ඇති අවසන් වෙනස්වීම් $1 පෙන්නුම් කරන්න<br />$3',
 'diff' => 'වෙනස',
 'hist' => 'ඉති',
@@ -1542,6 +1595,7 @@ HTML ටැගයන් පිරික්සන්න.',
 'newsectionsummary' => '/* $1 */ නව ඡේදය',
 'rc-enhanced-expand' => 'විස්තර පෙන්වන්න',
 'rc-enhanced-hide' => 'විස්තර සඟවන්න',
+'rc-old-title' => 'මුලින් "$1" ලෙස සකස් කර ඇත.',
 
 # Recent changes linked
 'recentchangeslinked' => 'සහසම්බන්ධිත වෙනස්වීම්',
@@ -1559,7 +1613,7 @@ HTML ටැගයන් පිරික්සන්න.',
 'reuploaddesc' => 'උඩුගත කිරීම අත්හැරදමා උඩුගත කිරීම් ආකෘති පත්‍රය වෙත යන්න',
 'upload-tryagain' => 'වෙනස් කරන ලද ගොනු විස්තරය ඉදිරිපත් කරන්න',
 'uploadnologin' => 'පිවිසී නැත (Not logged in)',
-'uploadnologintext' => 'ගොනු උඩුගත කිරීමට පෙර ඔබ  [[Special:UserLogin|ප්‍රවිෂ්ට වී]] සිටිය යුතුය.',
+'uploadnologintext' => 'ගොනු උඩුගත කිරීමට පෙර ඔබ $1ට ප්‍රවිෂ්ට වී සිටිය යුතුය.',
 'upload_directory_missing' => 'උඩුගත ඩිරෙක්ටරිය ($1) සොයාගත නොහැකි අතර එය වෙබ්-සේවාදායකය විමින් තැනිය නොහැකි විය.',
 'upload_directory_read_only' => 'වෙබ්-සේවාදායකය විසින් උඩුගත ඩිරෙක්ටරිය ($1) වෙත ලිවීමට නොහැකි විය.',
 'uploaderror' => 'උඩුගත කිරීම් දෝෂයක්',
@@ -1800,8 +1854,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization බලන්න.',
 'upload_source_file' => ' (ඔබගේ පරිගණකයේ ගොනුවකි)',
 
 # Special:ListFiles
-'listfiles-summary' => 'මෙම විශේෂ පිටුවෙහි දැක්වෙන්නේ සියළු උඩුගත කල ගොනුය.
-When filtered by user, only files where that user uploaded the most recent version of the file are shown.',
+'listfiles-summary' => 'මෙම විශේෂ පිටුවෙහි දැක්වෙන්නේ සියළු උඩුගත කල ගොනුය.',
 'listfiles_search_for' => 'මාධ්‍ය නාමය සඳහා ගවේෂණය කරන්න:',
 'imgfile' => 'ගොනුව',
 'listfiles' => 'ගොනු ලැයිස්තුව',
@@ -1812,6 +1865,10 @@ When filtered by user, only files where that user uploaded the most recent versi
 'listfiles_size' => 'විශාලත්වය',
 'listfiles_description' => 'විස්තරය',
 'listfiles_count' => 'සංස්කරනය',
+'listfiles-show-all' => 'පරණ වර්ගවල පින්තූර එක් කරන්න.',
+'listfiles-latestversion' => 'වත්මන් අනුවාදය',
+'listfiles-latestversion-yes' => 'ඔව්',
+'listfiles-latestversion-no' => 'නැත',
 
 # File description page
 'file-anchor-link' => 'ගොනුව',
@@ -1849,6 +1906,7 @@ When filtered by user, only files where that user uploaded the most recent versi
 'uploadnewversion-linktext' => 'මෙම ගොනුවෙහි නව අනුවාදයක් උඩුගත කරන්න',
 'shared-repo-from' => '$1 වෙතින්',
 'shared-repo' => 'හවුල් සුරක්ෂිතාගාරයකි',
+'upload-disallowed-here' => 'ඔබට මෙම ගොනුව උඩින් ලිවිය නොහැක.',
 
 # File reversion
 'filerevert' => '$1 ප්‍රතිවර්තනය කරන්න',
@@ -1903,6 +1961,12 @@ When filtered by user, only files where that user uploaded the most recent versi
 'randompage' => 'අහඹු පිටුව',
 'randompage-nopages' => 'පහත {{PLURAL:$2|නාමඅවකාශය|නාමඅවකාශ}}:$1 හි කිසිදු පිටුවක් නොමැත.',
 
+# Random page in category
+'randomincategory' => 'ප්‍රවර්ගයේ අහඹු පිටු',
+'randomincategory-invalidcategory' => '"$1" වලංගු ප්‍රවර්ග නාමයක් නොවේ.',
+'randomincategory-nopages' => ' [[:ප්‍රවර්ගය:$1|$1]] ප්‍රවර්ගයේ පිටු නොමැත.',
+'randomincategory-selectcategory-submit' => 'යන්න',
+
 # Random redirect
 'randomredirect' => 'අහුඹු යළි-යොමුකිරීම',
 'randomredirect-nopages' => '"$1" නාම-අවකාශයෙහි යළි-යොමුවීම් නොමැත.',
@@ -1928,6 +1992,10 @@ When filtered by user, only files where that user uploaded the most recent versi
 'statistics-users-active-desc' => 'පසුගිය {{PLURAL:$1|දිනය|දින $1}} තුලදී කිසියම් ක්‍රියාවක් සිදු කල පරිශීලකයන්',
 'statistics-mostpopular' => 'බෙහෙවින් නරඹනු ලබන පිටු',
 
+'pageswithprop-prop' => 'ගුණ නාමය:',
+'pageswithprop-submit' => 'යන්න',
+'pageswithprop-prophidden-binary' => 'ද්විමය ගුණ අගය සැඟවී ($1)',
+
 'doubleredirects' => 'ද්විත්ව යළි-යොමුකිරීම්',
 'doubleredirectstext' => 'අනෙකුත් යළි-යොමුවීම් පිටුවලට යළි-යොමුවන පිටුවල ලැයිස්තුවක් මෙම පිටුවේ දැක්වේ.
 එක් එක් පේළියක අඩංගු වන්නේ පළමු හා දෙවන යළි-යොමුවීම් වලට සබැඳි හා ඒ සමග පළමු යළි-යොමුව එල්ල වන්නාවූ, සාමාන්‍යයෙන් "සත්‍ය" ඉලක්ක පිටුව වන, දෙවන යළි-යොමුවේ ඉලක්කයයි.<del>කපා හැරි</del> නිවේශිතයන් පිලිබඳ ගැටළු විසඳා ඇත.',
@@ -1988,11 +2056,19 @@ When filtered by user, only files where that user uploaded the most recent versi
 'protectedpages-indef' => 'අනිශ්චිත ආරක්ෂණයන් පමණයි',
 'protectedpages-cascade' => 'තීරු-දර්ශන ආරක්ෂණයන් පමණයි',
 'protectedpagesempty' => 'මෙම පරාමිතීන් හා සමග සැලකූ කල,  කිසිදු පිටුවක් දැනට ආරක්ෂිත වී නොමැත.',
+'protectedpages-page' => 'පිටුව',
+'protectedpages-expiry' => 'ඉකුත් වන්නේ',
+'protectedpages-performer' => 'පරිශීලකයා සුරැකීම',
+'protectedpages-params' => 'ආරක්ෂා පරාමිතිය',
+'protectedpages-reason' => 'හේතුව',
+'protectedpages-unknown-timestamp' => 'අඥාත',
+'protectedpages-unknown-performer' => 'නොදන්නා පරිශීලක',
 'protectedtitles' => 'ආරක්‍ෂිත ශීර්ෂයන්',
 'protectedtitlesempty' => 'මෙම පරාමිතීන් හා සමග සැලකූ කල, කිසිදු ශීර්ෂයක් දැනට ආරක්ෂිත වී නොමැත.',
 'listusers' => 'පරිශීලක ලැයිස්තුව',
 'listusers-editsonly' => 'සංස්කරණයන් සිදුකර ඇති පරිශීලකයන් පමණක් පෙන්වන්න',
 'listusers-creationsort' => 'තැනූ දින අනුව සුබෙදන්න',
+'listusers-desc' => 'අවරෝහණ පිළිවෙලට සකස් කරන්න',
 'usereditcount' => ' {{PLURAL:$1|සංස්කරණ එකකි|සංස්කරණ $1 කි}}',
 'usercreated' => '$1 දින $2 වේලාවේදී {{GENDER:$3|තනන ලදි}}',
 'newpages' => 'නව පිටු',
@@ -2112,6 +2188,7 @@ When filtered by user, only files where that user uploaded the most recent versi
 'mailnologin' => 'යායුතු ලිපිනය නොමැත',
 'mailnologintext' => 'අනෙකුත් පරිශීලකයන්හට  විද්‍යුත්-තැපැල් යැවුමට පෙරාතුව, ඔබ [[Special:UserLogin|ප්‍රවිෂ්ට වී]], ඔබගේ  [[Special:Preferences|අභිරුචියන්හි]]  නීතික විද්‍යුත්-තැපැල් ලිපිනයක් සඳහන් කර තිබිය යුතුය.',
 'emailuser' => 'මෙම පරිශීලක වෙත විද්‍යුත්-ලිපියක් යවන්න',
+'emailuser-title-notarget' => ' පරිශීලකට විද්‍යුත්-ලිපියක් යවන්න',
 'emailpage' => ' පරිශීලකට විද්‍යුත්-ලිපියක් යවන්න',
 'emailpagetext' => 'මෙම පරිශීලකයා හට විද්‍යුත්-තැපෑල් පණිවුඩයක් යැවීම සඳහා මෙම ආකෘති පත්‍රය භාවිතා කිරීමට ඔබ හට හැක.
 ලබන්නා විසින් සෘජු ලෙස ඔබ හට පිළිතුරු එවනු හැකි වන පරිදි, ඔබ විසින් [[Special:Preferences|ඔබගේ පරිශීලක අභිරුචියන්]] හි ඇතුළත් කල විද්‍යුත්-තැපැල් ලිපිනය,  විද්‍යුත්-තැපෑලෙහි "වෙතින්" ලිපිනයෙහි පෙන්නුම් කරනු ඇත.',
index b735da1..6bb2b1b 100644 (file)
@@ -320,7 +320,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Posielať mi kópie mojich emailov, ktoré pošlem ostatným používateľom',
 'tog-diffonly' => 'Nezobrazovať obsah stránky pod rozdielmi',
 'tog-showhiddencats' => 'Zobraziť skryté kategórie',
-'tog-noconvertlink' => 'Vypnúť konverziu názvov odkazov',
 'tog-norollbackdiff' => 'Vynechať rozdiel po vykonaní rollbacku',
 'tog-useeditwarning' => 'Upozorniť ma, keď opúšťam upravovaciu stránku s neuloženými zmenami',
 'tog-prefershttps' => 'Po prihlásení používať vždy zabezpečené pripojenie',
@@ -447,7 +446,6 @@ $messages = array(
 'vector-action-protect' => 'Zamknúť',
 'vector-action-undelete' => 'Obnoviť',
 'vector-action-unprotect' => 'Zmeniť stav ochrany',
-'vector-simplesearch-preference' => 'Povoliť zjednodušené pole hľadania (iba pre tému Vector)',
 'vector-view-create' => 'Vytvoriť',
 'vector-view-edit' => 'Upraviť',
 'vector-view-history' => 'Zobraziť históriu',
@@ -554,8 +552,8 @@ $1',
 'youhavenewmessages' => 'Máte $1 ($2).',
 'youhavenewmessagesfromusers' => 'Máte $1 od {{PLURAL:$3|iného používateľa|$3 iných používateľov}} ($2).',
 'youhavenewmessagesmanyusers' => 'Máte $1 od viacerých ďalších používateľov ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|novú správu|nové správy}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|posledná zmena|posledné zmeny}}',
+'newmessageslinkplural' => '{{PLURAL:$1|nová správa|999=nové správy}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|zmena|999=zmeny}}',
 'youhavenewmessagesmulti' => 'Máte nové správy na $1',
 'editsection' => 'upraviť',
 'editold' => 'upraviť',
@@ -682,7 +680,7 @@ Správca, ktorý ho zamkol ponúkol toto vysvetlenie: „$3“.',
 'invalidtitle-knownnamespace' => 'Neplatný názov s menným priestorom „$2“ a textom „$3“',
 'invalidtitle-unknownnamespace' => 'Neplatný názov s neznámym číslom menného priestoru „$1“ a textom „$2“',
 'exception-nologin' => 'Nie ste prihlásený',
-'exception-nologin-text' => 'Táto stránka alebo operácia vyžaduje, aby ste boli na tejto wiki prihlásení.',
+'exception-nologin-text' => 'Táto stránka alebo operácia vyžaduje, aby ste [[Special:Userlogin|boli prihlásený]].',
 
 # Virus scanner
 'virus-badscanner' => "Chybná konfigurácia: neznámy antivírus: ''$1''",
@@ -730,8 +728,6 @@ Nezabudnite zmeniť svoje [[Special:Preferences|Predvoľby {{GRAMMAR:genitív|{{
 'gotaccountlink' => 'Prihlásiť',
 'userlogin-resetlink' => 'Zabudli ste svoje prihlasovacie údaje?',
 'userlogin-resetpassword-link' => 'Zabudli ste heslo?',
-'helplogin-url' => 'Help:Prihlasovanie',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoc s prihlásením]]',
 'userlogin-loggedin' => 'Ste už {{GENDER:$1|prihĺasený|prihlásená}} ako $1.
 Pomocou formulára nižšie sa môžete prihlásiť ako iný redaktor.',
 'userlogin-createanother' => 'Vytvoriť ďalší účet',
@@ -824,6 +820,10 @@ Prosím, počkajte $1 predtým, než to skúsite znova.',
 'suspicious-userlogout' => 'Vaša požiadavka odhlásiť sa bola zamietnutá, pretože to vyzerá, že ju poslal pokazený prehliadač alebo proxy server.',
 'createacct-another-realname-tip' => 'Skutočné meno je nepovinné.
 Ak sa rozhodnete ho poskytnúť, použije sa na označenie vašej práce.',
+'pt-login' => 'Prihlásiť sa',
+'pt-login-button' => 'Prihlásiť sa',
+'pt-createaccount' => 'Vytvoriť účet',
+'pt-userlogout' => 'Odhlásiť sa',
 
 # Email sending
 'php-mail-error-unknown' => 'Neznáma chyba vo funkcii PHP mail()',
@@ -832,7 +832,7 @@ Ak sa rozhodnete ho poskytnúť, použije sa na označenie vašej práce.',
 
 # Change password dialog
 'changepassword' => 'Zmeniť heslo',
-'resetpass_announce' => 'Prishlásili ste sa pomocou dočasného emailom zaslaného kódu. Pre dokončenie prihlásenia je potrebné tu nastaviť nové heslo:',
+'resetpass_announce' => 'Pre dokončenie prihlásenia je potrebné nastaviť nové heslo.',
 'resetpass_text' => '<!-- Sem pridajte text -->',
 'resetpass_header' => 'Zmeniť heslo k účtu',
 'oldpassword' => 'Staré heslo:',
@@ -840,12 +840,14 @@ Ak sa rozhodnete ho poskytnúť, použije sa na označenie vašej práce.',
 'retypenew' => 'Nové heslo (ešte raz):',
 'resetpass_submit' => 'Nastaviť heslo a prihlásiť sa',
 'changepassword-success' => 'Vaše heslo bolo úspešne zmenené!',
+'changepassword-throttled' => 'Uskutočnili ste príliš mnoho neúspešných pokusov o prihlásenie. Prosím, počkajte $1 predtým, než to skúsite znova.',
 'resetpass_forbidden' => 'Heslá nie je možné zmeniť',
 'resetpass-no-info' => 'Aby ste mohli priamo pristupovať k tejto stránke, musíte sa prihlásiť.',
 'resetpass-submit-loggedin' => 'Zmeniť heslo',
 'resetpass-submit-cancel' => 'Zrušiť',
 'resetpass-wrong-oldpass' => 'Neplatné dočasné alebo aktuálne heslo.
 Je možné, že sa vám už podarilo úspešne zmeniť svoje heslo alebo ste si vyžiadali nové dočasné heslo.',
+'resetpass-recycled' => 'Ako nové heslo si prosím nastavte niečo iné než súčasné heslo.',
 'resetpass-temp-password' => 'Dočasné heslo:',
 'resetpass-abort-generic' => 'Zmena hesla bola zablokovaná rozšírením.',
 
@@ -897,6 +899,7 @@ Dočasné heslo:$2',
 'changeemail-password' => 'Vaše heslo k {{GRAMMAR:lokál|{{SITENAME}}}}:',
 'changeemail-submit' => 'Zmeniť e-mail',
 'changeemail-cancel' => 'Zrušiť',
+'changeemail-throttled' => 'Uskutočnili ste príliš mnoho neúspešných pokusov o prihlásenie. Prosím, počkajte $1 predtým, než to skúsite znova.',
 
 # Special:ResetTokens
 'resettokens' => 'Obnoviť tokeny',
@@ -1232,8 +1235,6 @@ Ako správca si môžete tento rozdiel zobraziť; podrobnosti môžete nájsť v
 'revdelete-show-file-submit' => 'Áno',
 'revdelete-selected' => "'''{{PLURAL:$2|Vybraná jedna revízia|Vybrané $2 revízie|Vybraných $2 revízií}} z [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Vybraná udalosť záznamu|Vybrané udalosti záznamu}}:'''",
-'revdelete-text' => "'''Zmazané revízie a udalosti sú stále viditeľné v histórii úprav stránky, ale časti ich obsahu nebudú prístupné verejnosti.'''
-Iní správcovia {{GRAMMAR:genitív|{{SITENAME}}}} budú stále môcť pristupovať k skrytému obsahu a môžu ho znova obnoviť použitím tohto rozhrania v prípade, že nie sú stanovené ďalšie obmedzenia.",
 'revdelete-confirm' => 'Prosím, potvrďte, že to naozaj chcete vykonať, rozumiete následkom a že to robíte v súlade s [[{{MediaWiki:Policy-url}}|politikou]].',
 'revdelete-suppress-text' => "Zatajenie by sa malo používať '''výlučne''' v nasledovných prípadoch:
 * Potenciálne hanlivé informácie
@@ -1683,14 +1684,26 @@ Softvér používa toto nastavenie na správne oslovenie a označenie vás ostat
 'recentchanges-label-plusminus' => 'Veľkosť stránky sa zmenila o toľkoto bajtov',
 'recentchanges-legend-heading' => "'''Legenda:'''",
 'recentchanges-legend-newpage' => '(pozri tiež [[Special:NewPages|zoznam nových stránok]])',
-'rcnotefrom' => "Nižšie sú zobrazené úpravy od '''$2''' (do '''$1''').",
+'rcnotefrom' => 'Nižšie sú zobrazené úpravy od <strong>$2</strong> (do <strong>$1</strong>).',
 'rclistfrom' => 'Zobraziť nové úpravy počnúc od $1',
 'rcshowhideminor' => '$1 drobné úpravy',
+'rcshowhideminor-show' => 'Zobraziť',
+'rcshowhideminor-hide' => 'Skryť',
 'rcshowhidebots' => '$1 botov',
+'rcshowhidebots-show' => 'Zobraziť',
+'rcshowhidebots-hide' => 'Skryť',
 'rcshowhideliu' => '$1 registrovaní užívatelia',
+'rcshowhideliu-show' => 'Zobraziť',
+'rcshowhideliu-hide' => 'Skryť',
 'rcshowhideanons' => '$1 anonymných používateľov',
+'rcshowhideanons-show' => 'Zobraziť',
+'rcshowhideanons-hide' => 'Skryť',
 'rcshowhidepatr' => '$1 úpravy strážených stránok',
+'rcshowhidepatr-show' => 'Zobraziť',
+'rcshowhidepatr-hide' => 'Skryť',
 'rcshowhidemine' => '$1 moje úpravy',
+'rcshowhidemine-show' => 'Zobraziť',
+'rcshowhidemine-hide' => 'Skryť',
 'rclinks' => 'Zobraziť posledných $1 úprav v posledných $2 dňoch<br />$3',
 'diff' => 'rozdiel',
 'hist' => 'história',
@@ -2178,7 +2191,15 @@ Každý riadok obsahuje odkaz na prvé a druhé presmerovanie a tiež prvý riad
 'protectedpages' => 'Zamknuté stránky',
 'protectedpages-indef' => 'Zamknutia iba na neurčito',
 'protectedpages-cascade' => 'Iba kaskádové zamykanie',
+'protectedpages-noredirect' => 'Skryť presmerovania',
 'protectedpagesempty' => 'Momentálne nie sú žiadne stránky s týmito parametrami zamknuté.',
+'protectedpages-timestamp' => 'Časová známka',
+'protectedpages-page' => 'Stránka',
+'protectedpages-expiry' => 'Koniec platnosti',
+'protectedpages-params' => 'Nastavenie zámku',
+'protectedpages-reason' => 'Dôvod',
+'protectedpages-unknown-timestamp' => 'Neznáme',
+'protectedpages-unknown-performer' => 'Neznámy redaktor',
 'protectedtitles' => 'Zamknuté názvy',
 'protectedtitlesempty' => 'Tieto parametre momentálne nezamykajú žiadne názvy stránok.',
 'listusers' => 'Zoznam používateľov',
@@ -2919,6 +2940,7 @@ Prosím, navštívte [https://www.mediawiki.org/wiki/Localisation MediaWiki Loca
 'allmessages-prefix' => 'Filter podľa predpony:',
 'allmessages-language' => 'Jazyk:',
 'allmessages-filter-submit' => 'Vykonať',
+'allmessages-filter-translate' => 'Preložiť',
 
 # Thumbnails
 'thumbnail-more' => 'Zväčšiť',
@@ -3795,6 +3817,10 @@ Prosím, potvrďte, že túto stránku chcete skutočne znovu vytvoriť.",
 'imgmultigo' => 'Vykonať',
 'imgmultigoto' => 'Prejsť na stránku $1',
 
+# Language selector for translatable SVGs
+'img-lang-default' => '(predvolený jazyk)',
+'img-lang-go' => 'Vykonať',
+
 # Table pager
 'ascending_abbrev' => 'vzostupne',
 'descending_abbrev' => 'zostupne',
@@ -3878,6 +3904,13 @@ Tiež môžete [[Special:EditWatchlist|použiť štandardný editor]].',
 'version-hook-subscribedby' => 'Pripojené',
 'version-version' => '(Verzia $1)',
 'version-license' => 'Licencia',
+'version-ext-license' => 'Licencia',
+'version-ext-colheader-name' => 'Rozšírenie',
+'version-ext-colheader-version' => 'Verzia',
+'version-ext-colheader-license' => 'Licencia',
+'version-ext-colheader-description' => 'Popis',
+'version-ext-colheader-credits' => 'Autori',
+'version-license-title' => 'Licencia pre $1',
 'version-poweredby-credits' => "Táto wiki beží na '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'ďalší',
 'version-poweredby-translators' => 'prekladatelia na translatewiki.net',
@@ -3902,6 +3935,7 @@ Spolu s týmto programom by ste obdržať [{{SERVER}}{{SCRIPTPATH}}/COPYING kóp
 'redirect-lookup' => 'Vyhľadať:',
 'redirect-value' => 'Hodnota:',
 'redirect-user' => 'ID používateľa',
+'redirect-page' => 'ID stránky',
 'redirect-revision' => 'Revíziu stránky',
 'redirect-file' => 'Názov súboru',
 'redirect-not-exists' => 'Hodnota nebola nájdená',
index 5d5ac7a..e0a0be4 100644 (file)
@@ -349,7 +349,6 @@ $messages = array(
 'vector-action-protect' => 'Zaščiti',
 'vector-action-undelete' => 'Vrni',
 'vector-action-unprotect' => 'Spremeni zaščito',
-'vector-simplesearch-preference' => 'Omogoči poenostavljeno vrstico za iskanje (samo koža Vector)',
 'vector-view-create' => 'Ustvari',
 'vector-view-edit' => 'Uredi',
 'vector-view-history' => 'Zgodovina',
@@ -637,8 +636,7 @@ Ne pozabite si prilagoditi vaših [[Special:Preferences|nastavitev {{GRAMMAR:rod
 'gotaccountlink' => 'Prijavite se',
 'userlogin-resetlink' => 'Ste pozabili svoje prijavne podatke?',
 'userlogin-resetpassword-link' => 'Ste pozabili svoje geslo?',
-'helplogin-url' => 'Help:Prijava',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoč pri prijavi]]',
+'userlogin-helplink2' => 'Pomoč pri prijavi',
 'userlogin-loggedin' => 'Prijavljeni ste že kot {{GENDER:$1|$1}}.
 Uporabite spodnji obrazec, da se prijavite kot drug uporabnik.',
 'userlogin-createanother' => 'Ustvari drug račun',
@@ -738,6 +736,10 @@ Prosimo, počakajte $1, preden poskusite znova.',
 'suspicious-userlogout' => 'Vaša zahteva za odjavo je bila zavrnjena, saj kaže, da je bila poslana iz pokvarjenega brskalnika ali proxyja s predpomnilnikom.',
 'createacct-another-realname-tip' => 'Pravo ime ni obvezno.
 Če se ga odločite navesti, bo uporabljeno za priznavanje uporabnikovega dela.',
+'pt-login' => 'Prijava',
+'pt-login-button' => 'Prijava',
+'pt-createaccount' => 'Ustvari račun',
+'pt-userlogout' => 'Odjava',
 
 # Email sending
 'php-mail-error-unknown' => 'Neznana napaka v funkciji PHP mail()',
@@ -746,8 +748,7 @@ Prosimo, počakajte $1, preden poskusite znova.',
 
 # Change password dialog
 'changepassword' => 'Zamenjava gesla',
-'resetpass_announce' => 'Trenutno ste prijavljeni z začasno e-poštno kodo.
-Za zaključitev prijave, morate tukaj nastaviti novo geslo:',
+'resetpass_announce' => 'Za zaključitev prijave morate tukaj nastaviti novo geslo:',
 'resetpass_text' => '<!-- Namesto te vrstice vstavite besedilo -->',
 'resetpass_header' => 'Spremeni geslo',
 'oldpassword' => 'Staro geslo:',
@@ -763,8 +764,15 @@ Prosimo, počakajte $1, preden poskusite znova.',
 'resetpass-submit-cancel' => 'Prekliči',
 'resetpass-wrong-oldpass' => 'Neveljavno začano ali trenutno geslo.
 Morda ste že uspešno spremenili geslo ali pa ste zahtevali novo začasno geslo.',
+'resetpass-recycled' => 'Prosimo, ponastavite svoje geslo na nekaj drugega kot svoje trenutno geslo.',
+'resetpass-temp-emailed' => 'Trenutno ste prijavljeni z začasno kodo, poslano z e-pošto. Za zaključitev prijave morate tukaj nastaviti novo geslo:',
 'resetpass-temp-password' => 'Začasno geslo:',
 'resetpass-abort-generic' => 'Razširitev je prekinila spremembo gesla.',
+'resetpass-expired' => 'Vaše geslo je poteklo. Prosimo, nastavite novo geslo za prijavo.',
+'resetpass-expired-soft' => 'Vaše geslo je poteklo in ga morate ponastaviti. Prosimo, izberite novo geslo zdaj ali kliknite »{{int:resetpass-submit-cancel}}«, da ga ponastavite pozneje.',
+'resetpass-validity-soft' => 'Vaše geslo ni veljavno: $1
+
+Prosimo, izberite novo geslo zdaj ali kliknite »{{int:resetpass-submit-cancel}}«, da ga ponastavite pozneje.',
 
 # Special:PasswordReset
 'passwordreset' => 'Ponastavitev gesla',
@@ -1155,8 +1163,10 @@ To redakcijo si lahko ogledate; podrobnosti lahko najdete v [{{fullurl:{{#Specia
 'revdelete-show-file-submit' => 'Da',
 'revdelete-selected' => "'''{{PLURAL:$2|Izbrana redakcija|Izbrani redakciji|Izbrane redakcije}} strani [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Izbran dnevniški dogodek|Izbrana dnevniška dogodka|Izbrani dnevniški dogodki}}:'''",
-'revdelete-text' => "'''Izbrisane redakcije in dogodki bodo v zgodovini strani in dnevniki še vedno navedene, vendar bo njihova vsebina za javnost nedostopna.'''
-Do skrite vsebine bodo še vedno lahko dostopali drugi administratorji {{GRAMMAR:rodilnik|{{SITENAME}}}} in jo z uporabo istega vmesnika tudi obnovili, razen kjer bodo uveljavljene dodatne omejitve.",
+'revdelete-text-text' => 'Izbrisane redakcije bodo še vedno prikazane v zgodovini strani, vendar bodo deli njihovih vsebin nedostopni javnosti.',
+'revdelete-text-file' => 'Izbrisane različice datoteke bodo še vedno prikazane v zgodovini datoteke, vendar bodo deli njihovih vsebin nedostopni javnosti.',
+'logdelete-text' => 'Izbrisani dnevniški vnosi bodo še vedno prikazani v dnevnikih, vendar bodo deli njihovih vsebin nedostopni javnosti.',
+'revdelete-text-others' => 'Drugi administratorji na strani {{SITENAME}} bodo še vedno lahko dostopali do skrite vsebine in jo obnovili z enakim vmesnikom, razen če so nastavljene dodatne omejitve.',
 'revdelete-confirm' => 'Prosim potrdite da nameravate to storiti, da se zavedate posledic in da to počnete v skladu s [[{{MediaWiki:Policy-url}}|politiko]].',
 'revdelete-suppress-text' => "Zadrževanje naj bi bilo uporabljeno '''le''' v sledečih primerih:
 * Morebitni klevetniški podatki
@@ -1252,6 +1262,8 @@ Upoštevajte, da bo uporaba navigacijskih gumbov ponastavila ta stolpec.',
 'showhideselectedversions' => 'Prikaži/skrij izbrane redakcije',
 'editundo' => 'razveljavi',
 'diff-empty' => '(Ni razlike)',
+'diff-multi-sameuser' => '({{PLURAL:$1|1=Vmesna redakcija|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} istega uporabnika ni prikazana)',
+'diff-multi-otherusers' => '({{PLURAL:$1|1=Vmesna redakcija|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} {{PLURAL:$2|1=drugega uporabnika|$2 uporabnikov}} ni prikazana)',
 'diff-multi-manyusers' => '({{PLURAL:$1|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} več kot $2 {{PLURAL:$2|uporabnika|uporabnikov}} {{PLURAL:$1|ni prikazana|nista prikazani|niso prikazane|ni prikazanih}})',
 'difference-missing-revision' => '{{PLURAL:$2|Ene redakcije|$2 redakcij}} razlike ($1) {{PLURAL:$2|nisem}} našel.
 
@@ -1291,13 +1303,14 @@ Podrobnosti lahko najdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENA
 'search-file-match' => '(ujema se z vsebino datoteke)',
 'search-suggest' => 'Iščete morda: $1',
 'search-interwiki-caption' => 'Sorodni projekti',
-'search-interwiki-default' => '$1 zadetkov:',
+'search-interwiki-default' => 'Rezultati s strani $1:',
 'search-interwiki-more' => '(več)',
 'search-relatedarticle' => 'Podobno',
 'searcheverything-enable' => 'Iskanje po vseh imenskih prostorih',
 'searchrelated' => 'povezano',
 'searchall' => 'vse',
 'showingresults' => "Prikazujem do '''$1''' {{PLURAL:$1|zadetek|zadetka|zadetke|zadetkov}}, začenši s št. '''$2'''.",
+'showingresultsinrange' => 'Spodaj prikazujem {{PLURAL:$1|1=<strong>1</strong> rezultat|<strong>$1</strong> rezultata|<strong>$1</strong> rezultate|<strong>$1</strong> rezultatov}} v razponu od št. <strong>$2</strong> do št. <strong>$3</strong>.',
 'showingresultsnum' => "Prikazujem '''$3''' {{PLURAL:$3|zadetek|zadetka|zadetke|zadetkov|zadetkov}}, začenši s št. '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Zadetek '''$1''' od '''$3'''|Zadetki '''$1 - $2''' od skupno '''$3'''}} za povpraševanje '''$4'''",
 'search-nonefound' => 'Ni bilo zadetkov, ki ustrezajo poizvedbi.',
@@ -1617,14 +1630,26 @@ Ko vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo ra
 'recentchanges-label-plusminus' => 'uporabnik je velikost strani spremenil za tolikšno število bajtov',
 'recentchanges-legend-heading' => "'''Legenda:'''",
 'recentchanges-legend-newpage' => '(glej tudi [[Special:NewPages|seznam novih strani]])',
-'rcnotefrom' => "Navedene so spremembe od '''$2''' dalje (prikazujem jih do '''$1''').",
+'rcnotefrom' => 'Navedene so spremembe od <strong>$2</strong> dalje (prikazujem jih do <strong>$1</strong>).',
 'rclistfrom' => 'Prikaži spremembe od $1 naprej',
 'rcshowhideminor' => '$1 manjša urejanja',
+'rcshowhideminor-show' => 'Prikaži',
+'rcshowhideminor-hide' => 'Skrij',
 'rcshowhidebots' => '$1 bote',
+'rcshowhidebots-show' => 'Prikaži',
+'rcshowhidebots-hide' => 'Skrij',
 'rcshowhideliu' => '$1 registrirane uporabnike',
+'rcshowhideliu-show' => 'Prikaži',
+'rcshowhideliu-hide' => 'Skrij',
 'rcshowhideanons' => '$1 brezimne uporabnike',
+'rcshowhideanons-show' => 'Prikaži',
+'rcshowhideanons-hide' => 'Skrij',
 'rcshowhidepatr' => '$1 pregledana urejanja',
+'rcshowhidepatr-show' => 'Prikaži',
+'rcshowhidepatr-hide' => 'Skrij',
 'rcshowhidemine' => '$1 moja urejanja',
+'rcshowhidemine-show' => 'Prikaži',
+'rcshowhidemine-hide' => 'Skrij',
 'rclinks' => 'Prikaži zadnjih $1 sprememb v zadnjih $2 dneh<br />$3',
 'diff' => 'prim',
 'hist' => 'zgod',
@@ -1756,6 +1781,8 @@ Poprosite koga, ki ima možnost ogleda podatkov zatrtih datotek, da preveri polo
 'php-uploaddisabledtext' => 'Nalaganje datotek je onemogočeno v PHP.
 Prosimo preverite file_uploads nastavitev.',
 'uploadscripted' => 'Datoteka vsebuje HTML- ali skriptno kodo, ki bi jo lahko brskalnik razlagal napačno.',
+'uploadscriptednamespace' => 'Datoteka SVG vsebuje nedovoljen imenski prostor »$1«',
+'uploadinvalidxml' => 'XML v naloženi datoteki ne moremo razčleniti.',
 'uploadvirus' => 'Datoteka vsebuje virus!
 Podrobnosti: $1',
 'uploadjava' => 'Datoteka je datoteka ZIP, ki vsebuje javansko datoteko .class.
@@ -2131,10 +2158,20 @@ Sedaj je preusmeritev na [[$2]].',
 'deadendpagestext' => 'Spodaj navedene strani se ne povezujejo na druge članke v {{GRAMMAR:dajalnik|{{SITENAME}}}}.',
 'protectedpages' => 'Zaščitene strani',
 'protectedpages-indef' => 'Samo neomejene zaščite',
+'protectedpages-summary' => 'Stran navaja obstoječe strani, ki so trenutno zaščitene. Za seznam strani, ki so zaščitene pred ustvarjanjem, glej [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Le kaskadne zaščite',
 'protectedpages-noredirect' => 'Skrij preusmeritve',
 'protectedpagesempty' => 'Nobena stran ni trenutno zaščitena s temi parametri.',
+'protectedpages-timestamp' => 'Časovni žig',
+'protectedpages-page' => 'Stran',
+'protectedpages-expiry' => 'Poteče',
+'protectedpages-performer' => 'Zaščitni uporabnik',
+'protectedpages-params' => 'Parametri zaščite',
+'protectedpages-reason' => 'Razlog',
+'protectedpages-unknown-timestamp' => 'Neznano',
+'protectedpages-unknown-performer' => 'Neznani uporabnik',
 'protectedtitles' => 'Zaščiteni naslovi',
+'protectedtitles-summary' => 'Stran navaja obstoječe strani, ki so trenutno zaščitene pred ustvarjanjem. Za seznam obstoječih strani, ki so zaščitene, glej [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Noben naslov ni trenutno zaščiten s temi parametri.',
 'listusers' => 'Seznam uporabnikov',
 'listusers-editsonly' => 'Pokaži samo uporabnike z urejanji',
@@ -2409,7 +2446,7 @@ Izbris takšnih strani je bil omejen v izogib neželenim motnjam {{GRAMMAR:dativ
 'delete-warning-toobig' => 'Ta stran ima obsežno zgodovino urejanja, tj. čez $1 {{PLURAL:$1|redakcijo|redakciji|redakcije|redakcij}}.
 Njeno brisanje lahko zmoti obratovanje zbirke podatkov {{GRAMMAR:dative|{{SITENAME}}}};
 nadaljujte s previdnostjo.',
-'deleting-backlinks-warning' => "'''Opozorilo:''' Druge strani se povezujejo na ali vključujejo stran, ki jo nameravate izbrisati.",
+'deleting-backlinks-warning' => "'''Opozorilo:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druge strani]] se povezujejo na ali vključujejo stran, ki jo nameravate izbrisati.",
 
 # Rollback
 'rollback' => 'Vrni spremembe',
@@ -2588,8 +2625,10 @@ Najnovejši vnos v dnevniku blokad je naveden spodaj:',
 'sp-contributions-blocked-notice-anon' => 'Ta IP-naslov je trenutno blokiran.
 Najnovejši vnos v dnevniku blokad je naveden spodaj:',
 'sp-contributions-search' => 'Išči prispevke',
+'sp-contributions-suppresslog' => 'zatrti uporabnikovi prispevki',
 'sp-contributions-username' => 'IP-naslov ali uporabniško ime:',
 'sp-contributions-toponly' => 'Prikaži samo vrhnje redakcije',
+'sp-contributions-newonly' => 'Prikaži samo urejanja, ki so ustvarila nove strani',
 'sp-contributions-submit' => 'Išči',
 
 # What links here
@@ -2903,6 +2942,7 @@ $2',
 'thumbnail_image-type' => 'Vrsta slike ni podprta',
 'thumbnail_gd-library' => 'Nepopolna konfiguracija knjižice GD: manjka funkcija $1',
 'thumbnail_image-missing' => 'Kaže, da datoteka manjka: $1',
+'thumbnail_image-failure-limit' => 'Nedavno je bilo preveč spodletelih poskusov ($1 ali več) izdelave sličice. Prosimo, poskusite znova pozneje.',
 
 # Special:Import
 'import' => 'Uvoz strani',
@@ -4119,6 +4159,4 @@ Pravzaprav razširi skoraj vse v dvojnih zavitih oklepajih.',
 'expand_templates_generate_rawhtml' => 'Prikaži surovi HTML',
 'expand_templates_preview' => 'Predogled',
 
-# Unknown messages
-'uploadinvalidxml' => 'XML v naloženi datoteki ne moremo razčleniti.',
 );
index d017102..d8d2c35 100644 (file)
@@ -319,7 +319,6 @@ Dov dorje värrhtoedimmie gååvnese bielieh, jallh [[Special:UserLogin|logge s
 'lineno' => 'Sïeve $1:',
 'compareselectedversions' => 'Mohtedidh veeljeme låhkoeh',
 'editundo' => 'ov-darjodh',
-'diff-multi' => '({{PLURAL:$1|Akte gaskese gïehtjedamme|$1 gaskese gïehtjedammeh}} vuesehte ijje.)',
 
 # Search results
 'searchresults' => 'Ohtsedh resultaateh',
@@ -364,7 +363,6 @@ Dov dorje värrhtoedimmie gååvnese bielieh, jallh [[Special:UserLogin|logge s
 'nchanges' => '$1 {{PLURAL:$1|värrhtoedimmie|värrhtoedimmieh}}',
 'recentchanges' => 'Männgan värrhtoedimmieh',
 'recentchanges-feed-description' => 'Dåeriedidh männgan värrhtoedimmie sïjse wiki meatan dïhte feed.',
-'rcnote' => "Vuelen vuesehte {{PLURAL:$1|dïhte männgan värrhtoedimmie|dah männgan '''$1''' värrhtoedimmieh}} nuelesne dah {{PLURAL:$2|männgan biejjie|männgan '''$2''' biejjieh}}, ihke $5, $4.",
 'rcnotefrom' => "Vuelelen vuesehte dah männgan '''$1''' värrhtoedimmieh männgan '''$2'''.",
 'rclistfrom' => 'Vuesehte orre värrhtoedimmieh aelkedh raejeste $1',
 'rcshowhideminor' => '$1 ohtje värrhtoedimmie',
@@ -634,7 +632,6 @@ Daaletje tjaeleste-vaarjelidh sïjsestäälninge ihke bielie '''$1''' lea:",
 'ipadressorusername' => 'IP Tjaalesijjie jallh nuhtjiennomme:',
 'ipbother' => 'Jeatjebh tïjje:',
 'ipboptions' => '2 täjmoe:2 hours,1 biejjie:1 day,3 biejjie:3 days,1 våhkoe:1 week,2 våhkoe:2 weeks,1 aske:1 month,3 aske:3 months,6 aske:6 months,1 jaepie:1 year,gietjieloeves:infinite',
-'ipbotheroption' => 'jeatjebh',
 'ipblocklist' => 'Lästoe bijjelen tjöödtjehtidh IP tjaalesijjieh jih nuhtjiennommeh',
 'ipblocklist-submit' => 'Ohtsedh',
 'blocklink' => 'tjöödtjehtidh',
index 66f9c07..45c94c7 100644 (file)
@@ -52,6 +52,7 @@ $messages = array(
 'tog-diffonly' => 'Kaladuwanaanshaha hoostooda qari qoraalka bogga',
 'tog-showhiddencats' => 'Itusi ereykoobyada qarsoon',
 'tog-norollbackdiff' => 'ha isticmaalin kala duwanaanshaha markii aad dib u soo celisay kadib',
+'tog-prefershttps' => 'Adeegso mar kasta qad aamin ah markaad soo galeeyso',
 
 'underline-always' => 'Marwalba',
 'underline-never' => 'Marnaba',
@@ -160,7 +161,6 @@ $messages = array(
 'vector-action-protect' => 'Difaac',
 'vector-action-undelete' => 'Ha tirtirin',
 'vector-action-unprotect' => 'Bedel difaacida',
-'vector-simplesearch-preference' => 'Shid kuwa ugu fiican oo kuu soo jeedinaayo raadinta  (Jirka vector kaliya)',
 'vector-view-create' => 'Sameey',
 'vector-view-edit' => 'Wax ka bedel',
 'vector-view-history' => 'Itusi taariikhda',
@@ -279,7 +279,7 @@ fiiri [[Special:Version|nooca bogga]].',
 'toc' => 'Qoraalka gudaha oo kooban',
 'showtoc' => "I'tus",
 'hidetoc' => 'qari',
-'collapsible-collapse' => 'woo halaabay',
+'collapsible-collapse' => 'Qari',
 'collapsible-expand' => 'Sii balaari',
 'thisisdeleted' => 'Fiiri ama soo celi $1?',
 'viewdeleted' => 'Fiiri $1?',
@@ -407,7 +407,6 @@ Waad sii isticmaali kartaa {{SITENAME}} adoona lagu aqoon, ama <span class='plai
 'gotaccountlink' => 'Gudaha gal',
 'userlogin-resetlink' => 'Ma ilaawday tafaasiisha gudagalahaada?',
 'userlogin-resetpassword-link' => 'Dib usoo cesho erey sirtaada',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Caawinaad habka gudagalka]]',
 'createacct-join' => 'Gali macluumaadkaada gaarka ah.',
 'createacct-emailoptional' => 'Ciwaanka e-mail-ka (dooqasho)',
 'createacct-email-ph' => 'Gali Ciwaankaada e-mail-ka',
@@ -484,11 +483,13 @@ Waa iska dhago tiri kartaa fariintaan, hadii akoonkaan oo ku sameysmay qalad.',
 Fadlan waxyar sug intii aadan soo gelin.',
 'login-abort-generic' => 'Ma u soo gali karin gudaha - waa la noqay',
 'loginlanguagelabel' => 'Luqada: $1',
+'pt-userlogout' => 'Ka bax',
 
 # Email sending
 'user-mail-no-addy' => "Isku dayday in aa dirto e-mail ayada oo ciwaan e-mail la'aan ah.",
 
 # Change password dialog
+'changepassword' => 'Bedel ereysirta',
 'resetpass_announce' => 'waxaa ku soo geshay eraysir ku meelgaar ah  oo e-mail laguugu soo diray.
 Hadii aad rabtid in aad dhameestirtid gudagelkaaga, waa in aad meeshaan ku qortaa eraysir oo cusub:',
 'resetpass_header' => 'bedel  ereyga sirta ee akoon-ka',
@@ -637,7 +638,7 @@ Fadlan markale isku day. Hadii aysan weli shaqaynin, ka bax ee markale soo gudag
 ''Sababtoo ah {{SITENAME}}han wuxuu leeyahay HTML ceyriin ah, horfiirintiisa waxaa loo qariyey si looga hortago weerar ka yimaada JavaScriptga.''
 
 '''Hadii wax ka bedlkaan uu yahay mid xaq ah, fadlan markale isku day. Hadii aysan weli shaqaynin, is kuday inaad  ka baxdo ee markale soo gudagal.'''",
-'editing' => 'Waxaad badalaysaa $1',
+'editing' => 'Waxaad bedel ku samaynaysaa $1',
 'creating' => 'Sameyta $1',
 'editingsection' => 'Waxaad wax ka bedelaysaa $1 (qeyb yar)',
 'editingcomment' => 'Waxaad wax ka bedelaysaa $1 (qeyb yar)',
@@ -788,11 +789,14 @@ sababteeda neh waxaa laga heli kartaa  [{{fullurl:{{#Special:Log}}/delete|page={
 'skin-preview' => 'Horfiirin',
 'datedefault' => "Ma'jiro dooq",
 'prefs-datetime' => 'Taariikhda iyo waqtiga',
+'prefs-personal' => 'Galka isticmaalaha',
 'prefs-rc' => 'Isbedelada dhow',
 'prefs-watchlist' => 'liiska-waardiyaha',
 'prefs-watchlist-days' => 'Tirada maalamaha ay ku jirayaan liiska-waardiyaha:',
 'prefs-email' => 'E-mail aad dooran kartaa',
+'prefs-rendering' => 'Muuqaalka',
 'saveprefs' => 'Kaydi',
+'restoreprefs' => 'Dib u soo celin qaabeynta (dhammaan qaybaha)',
 'prefs-editing' => 'Wax ka bedelka',
 'searchresultshead' => 'Raadi',
 'recentchangesdays' => 'Tirada maalmaha lagu tusaayo isbedelada dhow:',
@@ -807,6 +811,7 @@ sababteeda neh waxaa laga heli kartaa  [{{fullurl:{{#Special:Log}}/delete|page={
 'timezoneregion-atlantic' => 'Badweynta Atlaantik',
 'allowemail' => 'Ogolow in e-mail ay kaagatimaado isticmaalayaasha kale',
 'prefs-searchoptions' => 'Dooqyada raadinta',
+'prefs-emailconfirm-label' => 'Hubinta Email-ka:',
 'youremail' => 'E-mail:',
 'username' => 'Gudagal:',
 'uid' => 'Lambarka isticmaalaha:',
@@ -881,6 +886,9 @@ E-mailkaada mala sheegaayo markii ee dadka kale kula soo xiriirayaan.',
 'recentchanges-label-minor' => 'Kan waa bedel yar',
 'recentchanges-label-bot' => 'Badalkaan waxaa sameeyay bot',
 'recentchanges-label-unpatrolled' => 'bedelkaan hadda wali lama waardiyeen',
+'recentchanges-label-plusminus' => 'Qaadka bogga wuxuu ku bedelmay tirada halbeega baytka',
+'recentchanges-legend-heading' => "'''Sharaxaad:'''",
+'recentchanges-legend-newpage' => '(sidoo kale eeg [[Special:NewPages|liiska bogagga cusub]])',
 'rcnotefrom' => "Hoostaan waa isbedaladii dhacay  '''$2''' (waxaad arkoosaa ilaa '''$1''' ).",
 'rclistfrom' => 'Itusi isbedelada cusub oo ka bilaabaneyso $1',
 'rcshowhideminor' => '$1 bedelada yar',
@@ -1087,8 +1095,8 @@ si aad ugu dirto E-boosto isticmaalayaasha kale.',
 'emailsenttext' => 'Fariintaadii E-mailka aheeyd waa la diray.',
 
 # Watchlist
-'watchlist' => 'Liiskeyga waardiyeynta',
-'mywatchlist' => 'Liiskeyga waardiyeynta',
+'watchlist' => 'Liiska-waardiyaha',
+'mywatchlist' => 'Liiska-waardiyaha',
 'watchlistfor2' => 'Ku socoto $1 $2',
 'nowatchlist' => 'Waxba kuma jiraan liiskaaga waardiyeynta.',
 'watchlistanontext' => 'Fadlan $1 si aad u fiirisid ama wax uga bedeshid qoraalada ku jira liiska waardiyeyska.',
@@ -1374,6 +1382,7 @@ Waxaa fiiri kartaa cadaadkiisa',
 
 # Info page
 'pageinfo-title' => 'Macluumaad ku saabsan "$1"',
+'pageinfo-header-basic' => 'Macaaluumaadka asaasiga ah',
 'pageinfo-toolboxlink' => 'Macluumad ku saabsan',
 
 # Browsing diffs
@@ -1432,6 +1441,7 @@ Hadii faylka wax laga badalay sida oo markiisa hore ahaa, waxaa laga yaabaa in e
 # Auto-summaries
 'autosumm-blank' => 'Masaxay bogga',
 'autosumm-replace' => 'Wuxuu qoraalka ku badalay "$1"',
+'autoredircomment' => 'Bog loo bedeley [[$1]]',
 'autosumm-new' => 'Bog cusub: $1',
 
 # Watchlist editor
@@ -1465,6 +1475,7 @@ waxaad awoodaa [[Special:EditWatchlist/raw|Liiska wax ka bedel]].',
 
 # Special:Tags
 'tag-filter' => '[[Special:Tags|Filtaraha]] tag:',
+'tags-display-header' => 'Muuqaalka liiska bedelka',
 
 # Database error messages
 'dberr-usegoogle' => 'Waxaa baroobeen kartaa in aad ka raadiso google',
index 39677d6..6cca3fd 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Amire80
  * @author Andejkendej
  * @author Cradel
  * @author Dashohoxha
@@ -16,6 +17,7 @@
  * @author Ergon
  * @author Euriditi
  * @author FatosMorina
+ * @author GretaDoci
  * @author Kaganer
  * @author Marinari
  * @author Mdupont
@@ -377,7 +379,6 @@ $messages = array(
 'vector-action-protect' => 'Mbroje',
 'vector-action-undelete' => 'Anullo fshirjen',
 'vector-action-unprotect' => 'Ndrysho mbrojtjen',
-'vector-simplesearch-preference' => 'Aktivizo kërkimin e thjeshtëzuar (vetëm për veshjen Vector)',
 'vector-view-create' => 'Krijo',
 'vector-view-edit' => 'Redakto',
 'vector-view-history' => 'Shiko historikun',
@@ -651,7 +652,6 @@ Mos harroni të ndryshoni [[Special:Preferences|{{SITENAME}} preferencat]] tuaja
 'gotaccountlink' => 'Hyni',
 'userlogin-resetlink' => 'Keni harruar të dhënat tuaja të identifikimit?',
 'userlogin-resetpassword-link' => 'Rivendos fjalëkalimin',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Më ndihmo të futem në Wikipedia]]',
 'createacct-join' => 'Jepni informacionin tuaj më poshtë',
 'createaccountmail' => 'me email',
 'createaccountreason' => 'Arsyeja:',
@@ -735,6 +735,8 @@ Për të hyrë tërësisht duhet të vendosni një fjalëkalim të ri këtu:',
 'resetpass-submit-cancel' => 'Anulo',
 'resetpass-wrong-oldpass' => 'Fjalëkalimi momental ose i përkohshëm nuk është i vlefshëm. Ndoshta tanimë me sukses keni ndërruar fjalëkalimin, ose keni kërkuar fjalëkalim të përkohshëm.',
 'resetpass-temp-password' => 'Fjalëkalimi i përkohshëm:',
+'resetpass-expired' => 'Fjalëkalimin tuaj ka skaduar. Ju lutem vendosni një fjalëkalim të ri për të hyr.',
+'resetpass-expired-soft' => 'Fjalëkalimi juaj ka skaduar dhe duhet të rivendoset. Ju lutem zgjidhni një fjalëkalim të ri tani, ose klikoni "{{int:resetpass-submit-cancel}}" për ta rivendosur më vonë.',
 
 # Special:PasswordReset
 'passwordreset' => 'Ndrysho fjalkalimin',
@@ -1085,7 +1087,6 @@ Ju mund ta shikoni këtë ndryshim; detajet mund të gjenden te [{{fullurl:{{#Sp
 'revdelete-show-file-submit' => 'Po',
 'revdelete-selected' => "'''{{PLURAL:$2|Versioni i zgjedhur i|Versionet e zgjedhura të}} [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Veprimi i zgjedhur në regjistër|Veprimet e zgjedhura në regjistër}}:'''",
-'revdelete-text' => "'''Përmbajtja dhe pjesët e tjera nuk janë të dukshme për të gjithë, por figurojnë në historikun e versioneve.''' Administratorët munden përmbajtjen e larguar ta shikojnë dhe restaurojnë, përveç në rastet kur një gjë e tillë është ndaluar ekstra.",
 'revdelete-confirm' => 'Ju lutem konfirmoni që keni ndër mënd ta bëni këtë, që i kuptoni pasojat, dhe që ju po veproni në përputhje me [[{{MediaWiki:Policy-url}}|politiken]].',
 'revdelete-suppress-text' => "Shuarje duhet'''vetëm'''të përdoret për rastet e mëposhtme: 
  * Potencialisht e informacionit shpifës 
@@ -1527,7 +1528,7 @@ Kjo informatë është publike.',
 'rc_categories_any' => 'Të gjitha',
 'rc-change-size-new' => '$1 {{PLURAL:$1|bajt|bajtë}} pas ndryshimit',
 'newsectionsummary' => '/* $1 */ seksion i ri',
-'rc-enhanced-expand' => 'Trego detajet (kërkon JavaScript)',
+'rc-enhanced-expand' => 'Trego detajet',
 'rc-enhanced-hide' => 'Fshih detajet',
 'rc-old-title' => 'fillimisht i krijuar si "$1"',
 
@@ -2402,7 +2403,7 @@ $1',
 'mycontris' => 'Kontributet',
 'contribsub2' => 'Për $1 ($2)',
 'nocontribs' => 'Nuk ka asnjë ndryshim që përputhet me këto kritere.',
-'uctop' => ' (sipër)',
+'uctop' => '(aktual)',
 'month' => 'Nga muaji (dhe më herët):',
 'year' => 'Nga viti (dhe më herët):',
 
@@ -2420,6 +2421,7 @@ Bllokimi i fundit është shfaqur më poshtë për referencë:',
 'sp-contributions-blocked-notice-anon' => 'Kjo adresë IP është e bllokuar aktualisht.
 Bllokimi i funditë është më poshtë për referencë:',
 'sp-contributions-search' => 'Kërko tek kontributet',
+'sp-contributions-suppresslog' => 'Anëtar me Kontribute të kufizuara',
 'sp-contributions-username' => 'IP Addresa ose Përdoruesi:',
 'sp-contributions-toponly' => 'Trego vetëm redaktimet që janë versionet më të fundit',
 'sp-contributions-submit' => 'Kërko',
index fa0af78..3600d9c 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Serbian (Српски / Srpski)
+/** Serbian (српски / srpski)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Milicevic01
  * @author Misos
  * @author Terik
  * @author Жељко Тодоровић
 
 $fallback = 'sr-ec';
 $linkTrail = '/^([abvgdđežzijklljmnnjoprstćufhcčdžšабвгдђежзијклљмнњопрстћуфхцчџш]+)(.*)$/usD';
+
+$messages = array(
+# Vector skin
+'vector-view-viewsource' => '#REDIRECT[[MediaWiki:Vector-view-viewsource/sr-ec]]',
+
+# Edit pages
+'postedit-confirmation' => '',
+
+# Special:Log/newusers
+'newuserlogpage' => 'историја креирања корисника',
+'newuserlogpagetext' => 'Ово је историја скорашњих креирања корисника.',
+
+# Special:LinkSearch
+'linksearch' => '#REDIRECT[[MediaWiki:Linksearch/sr-ec]]',
+'linksearch-text' => '#REDIRECT[[MediaWiki:Linksearch-text/sr-ec]]',
+'linksearch-line' => '$1 повезана са $2',
+'linksearch-error' => 'Џокери могу да се појављују само на почетку домена.',
+
+# Contributions
+'uctop' => '‎',
+
+);
index dfc2630..8bef448 100644 (file)
@@ -431,7 +431,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Пошаљи ми копије е-порука које пошаљем другим корисницима',
 'tog-diffonly' => 'Не приказуј садржај странице испод разлика',
 'tog-showhiddencats' => 'Прикажи скривене категорије',
-'tog-noconvertlink' => 'Онемогући претварање наслова веза',
 'tog-norollbackdiff' => 'Изостави разлику након извршеног враћања',
 'tog-useeditwarning' => 'Упозори ме када напуштам страницу са несачуваним променама',
 'tog-prefershttps' => 'Увек користи сигурну конекцију када сам пријављен.',
@@ -558,7 +557,6 @@ $messages = array(
 'vector-action-protect' => 'Заштити',
 'vector-action-undelete' => 'Врати',
 'vector-action-unprotect' => 'Промени заштиту',
-'vector-simplesearch-preference' => 'Упрошћено поље за претрагу (само за тему „Векторско“)',
 'vector-view-create' => 'Направи',
 'vector-view-edit' => 'Уреди',
 'vector-view-history' => 'Историја',
@@ -580,7 +578,7 @@ $messages = array(
 'history' => 'Историја странице',
 'history_short' => 'Историја',
 'updatedmarker' => 'ажурирано од моје последње посете',
-'printableversion' => 'Ð\92еÑ\80зиÑ\98а Ð·Ð° Ñ\88Ñ\82ампÑ\83',
+'printableversion' => 'Ð\97а Ñ\88Ñ\82ампаÑ\9aе',
 'permalink' => 'Трајна веза',
 'print' => 'Штампај',
 'view' => 'Погледај',
@@ -724,6 +722,7 @@ $1',
 # General errors
 'error' => 'Грешка',
 'databaseerror' => 'Грешка у бази података',
+'databaseerror-text' => 'Дошло је до грешке у упиту базе података. Можда је у питању програмска грешка.',
 'databaseerror-function' => 'Функција: $1',
 'databaseerror-error' => 'Грешка: $1',
 'laggedslavemode' => "'''Упозорење:''' страница је можда застарела.",
@@ -844,8 +843,6 @@ $2',
 'gotaccountlink' => 'Пријава',
 'userlogin-resetlink' => 'Заборавили сте податке за пријаву?',
 'userlogin-resetpassword-link' => 'Заборавили сте лозинку?',
-'helplogin-url' => 'Help:Logging in',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Помоћ при пријављивању]]',
 'userlogin-loggedin' => 'Већ сте пријављени као {{GENDER:$1|$1}}.
 Користите доњи образац да бисте се пријавили као други корисник.',
 'userlogin-createanother' => 'Отвори још један налог',
@@ -940,6 +937,10 @@ $2',
 'suspicious-userlogout' => 'Ваш захтев за одјаву је одбијен јер је послат од стране неисправног прегледача или посредника.',
 'createacct-another-realname-tip' => 'Право име није обавезно.
 Ако изаберете да га унесете, оно ће бити коришћено за приписивање вашег рада.',
+'pt-login' => 'Пријави ме',
+'pt-login-button' => 'Пријави ме',
+'pt-createaccount' => 'Отвори налог',
+'pt-userlogout' => 'Одјави ме',
 
 # Email sending
 'php-mail-error-unknown' => 'Непозната грешка у функцији PHP mail().',
@@ -963,12 +964,18 @@ $2',
 'resetpass-submit-cancel' => 'Откажи',
 'resetpass-wrong-oldpass' => 'Неисправна привремена или текућа лозинка.
 Можда сте већ променили лозинку или сте затражили нову привремену лозинку.',
+'resetpass-recycled' => 'Унели сте садашњу лозинку, да би сте ресетовали лозинку морате унети нову.',
+'resetpass-temp-emailed' => 'Пријавили сте се са привременим кодом из е-поште.
+Да бисте завршили пријављивање морате поставити нову лозинку овде:',
 'resetpass-temp-password' => 'Привремена лозинка:',
 'resetpass-abort-generic' => 'Промену лозинке је спречио додатак.',
+'resetpass-expired' => 'Ваша лозинка је истекла. Поставите нову лозинку да бисте се пријавили.',
+'resetpass-expired-soft' => 'Ваша лозинка је истекла и морате поставити нову. Поставите нову лозинку или кликните откажи да је поставите касније.',
 
 # Special:PasswordReset
 'passwordreset' => 'Обнављање лозинке',
 'passwordreset-text-one' => 'Попуните овај образац да бисте ресетовали лозинку.',
+'passwordreset-text-many' => '{{PLURAL:$1|Испуните једно од поља како би сте добили привремену лозинку на е-пошту.}}',
 'passwordreset-legend' => 'Поништи лозинку',
 'passwordreset-disabled' => 'Обнављање лозинке је онемогућено на овом викију.',
 'passwordreset-emaildisabled' => 'Е-пошта је онемогућена на овом викију.',
@@ -1256,7 +1263,7 @@ $2
 # "Undo" feature
 'undo-success' => 'Измена се може вратити.
 Проверите разлике испод, па сачувајте измене.',
-'undo-failure' => 'Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð²Ñ\80аÑ\82им Ð¸Ð·Ð¼ÐµÐ½Ñ\83 Ð·Ð±Ð¾Ð³ Ð¿Ð¾Ñ\81Ñ\82оÑ\98аÑ\9aа Ñ\81Ñ\83кобÑ\99ениÑ\85 Ð¼ÐµÑ\92Ñ\83измена.',
+'undo-failure' => 'Ð\9eва Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\81е Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ð¾Ð½Ð¸Ñ\88Ñ\82иÑ\82и Ð·Ð±Ð¾Ð³ ÐºÐ¾Ð½Ñ\84ликÑ\82а измена.',
 'undo-norev' => 'Не могу да вратим измену јер не постоји или је обрисана.',
 'undo-summary' => 'Поништена измена $1 {{GENDER:$2|корисника|кориснице}} [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]])',
 'undo-summary-username-hidden' => 'Поништи измену $1 скривеног корисника',
@@ -1340,8 +1347,6 @@ $2
 'revdelete-show-file-submit' => 'Да',
 'revdelete-selected' => "'''{{PLURAL:$2|Изабрана измена|Изабране измене}} странице [[:$1]]'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Изабрана ставка у историји|Изабране ставке у историји}}:'''",
-'revdelete-text' => "'''Обрисане измене ће и даље бити приказане у историји страница и записима, али делови њиховог садржаја неће бити доступни јавности.'''
-Други администратори на овом викију ће и даље имати приступ сакривеном садржају, а они ће тај садржај моћи да врате путем овог сучеља, осим ако нису постављена додатна ограничења.",
 'revdelete-confirm' => 'Потврдите да намеравате ово урадити, да разумете последице и да то чините у складу с [[{{MediaWiki:Policy-url}}|правилима]].',
 'revdelete-suppress-text' => "Сакривање измена би требало користити '''само''' у следећим случајевима:
 * Злонамерни или погрдни подаци
@@ -1480,7 +1485,8 @@ $1",
 'searcheverything-enable' => 'сви именски простори',
 'searchrelated' => 'повезано',
 'searchall' => 'све',
-'showingresults' => "Испод {{PLURAL:$1|је приказан '''1''' резултат|су приказана '''$1''' резултата|је приказано '''$1''' резултата}} почев од броја '''$2'''.",
+'showingresults' => 'Испод {{PLURAL:$1|је приказан <strong>1</strong> резултат|су приказана <strong>$1</strong> резултата|је приказано <strong>$1</strong> резултата}} почев од броја <strong>$2</strong>.',
+'showingresultsinrange' => 'Испод {{PLURAL:$1|је приказан <strong>1</strong> резултат|су приказана <strong>$1</strong> резултата|је приказано <strong>$1</strong> резултата}}, у распону од <strong>$2</strong> до <strong>$3</strong>.',
 'showingresultsnum' => "Испод {{PLURAL:$3|је приказан '''1''' резултат|су приказана '''$3''' резултата|је приказано '''$3''' резултата}} почев од броја '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Резултат '''$1''' од '''$3'''|Резултата '''$1 – $2''' од '''$3'''}} за '''$4'''",
 'search-nonefound' => 'Нема поклапања.',
@@ -1647,7 +1653,7 @@ $1",
 'group-all' => '(сви)',
 
 'group-user-member' => '{{GENDER:$1|корисник|корисница|корисник}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|аутоматски потврђен корисник|аутоматски потврђена корисница|аутоматски потврђен корисник}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|аутоматски потврђен корисник|аутоматски потврђена корисница}}',
 'group-bot-member' => '{{GENDER:$1|бот}}',
 'group-sysop-member' => '{{GENDER:$1|администратор|администраторка|администратор}}',
 'group-bureaucrat-member' => '{{GENDER:$1|бирократа|бирократкиња|бирократа}}',
@@ -1742,7 +1748,7 @@ $1",
 'action-createaccount' => 'отварање овог корисничког налога',
 'action-minoredit' => 'означавање ове измене као мање',
 'action-move' => 'премести ову страницу',
-'action-move-subpages' => 'пÑ\80емеÑ\81Ñ\82и Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83, ÐºÐ°Ð¾ Ð¸ Ñ\9aене Ð¿Ð¾Ð´Ñ\81Ñ\82Ñ\80аниÑ\86е',
+'action-move-subpages' => 'пÑ\80емеÑ\88Ñ\82аÑ\9aе Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¸ Ñ\9aениÑ\85 Ð¿Ð¾Ð´Ñ\81Ñ\82Ñ\80аниÑ\86а',
 'action-move-rootuserpages' => 'премештање основних корисничких страница',
 'action-movefile' => 'премести ову датотеку',
 'action-upload' => 'слање ове датотеке',
@@ -1779,6 +1785,7 @@ $1",
 'recentchanges' => 'Скорашње измене',
 'recentchanges-legend' => 'Поставке скорашњих измена',
 'recentchanges-summary' => 'Пратите скорашње измене на овој страници.',
+'recentchanges-noresult' => 'Нема промена у задатом времену за задате критеријуме.',
 'recentchanges-feed-description' => 'Пратите скорашње измене уз помоћ овог довода.',
 'recentchanges-label-newpage' => 'Нова страница',
 'recentchanges-label-minor' => 'Мања измена',
@@ -1787,18 +1794,30 @@ $1",
 'recentchanges-label-plusminus' => 'Промена величине странице (у бајтовима)',
 'recentchanges-legend-heading' => "'''Легенда:'''",
 'recentchanges-legend-newpage' => '([[Special:NewPages|списак нових страница]])',
-'rcnotefrom' => 'Испод су измене од <b>$3; $4</b> (до <b>$1</b> измена).',
+'rcnotefrom' => 'Испод су измене од <strong>$2</strong> (до <strong>$1</strong> измена).',
 'rclistfrom' => 'Прикажи нове измене почев од $1',
 'rcshowhideminor' => '$1 мање измене',
+'rcshowhideminor-show' => 'Прикажи',
+'rcshowhideminor-hide' => 'Сакриј',
 'rcshowhidebots' => '$1 ботове',
+'rcshowhidebots-show' => 'Прикажи',
+'rcshowhidebots-hide' => 'Сакриј',
 'rcshowhideliu' => '$1 пријављене кориснике',
+'rcshowhideliu-show' => 'Прикажи',
+'rcshowhideliu-hide' => 'Сакриј',
 'rcshowhideanons' => '$1 анонимне кориснике',
+'rcshowhideanons-show' => 'Прикажи',
+'rcshowhideanons-hide' => 'Сакриј',
 'rcshowhidepatr' => '$1 патролиране измене',
+'rcshowhidepatr-show' => 'Прикажи',
+'rcshowhidepatr-hide' => 'Сакриј',
 'rcshowhidemine' => '$1 моје измене',
+'rcshowhidemine-show' => 'Прикажи',
+'rcshowhidemine-hide' => 'Сакриј',
 'rclinks' => 'Прикажи последњих $1 измена {{PLURAL:$2|претходни дан|у последња $2 дана|у последњих $2 дана}}<br />$3',
 'diff' => 'разл',
 'hist' => 'ист',
-'hide' => 'сакриј',
+'hide' => 'Сакриј',
 'show' => 'Прикажи',
 'minoreditletter' => ' м',
 'newpageletter' => 'Н',
@@ -1928,6 +1947,7 @@ $1",
 'php-uploaddisabledtext' => 'Слање датотека је онемогућено у PHP-у.
 Проверите поставке file_uploads.',
 'uploadscripted' => 'Датотека садржи HTML или скриптни код који може бити погрешно протумачен од стране прегледача.',
+'uploadscriptednamespace' => 'Ова SVG датотека садржи погрешан именски простор „$1“',
 'uploadvirus' => 'Датотека садржи вирус!
 Детаљи: $1',
 'uploadjava' => 'Датотека је формата ZIP који садржи јава .class елемент.
@@ -2174,7 +2194,7 @@ $1',
 ** Кршење ауторских права
 ** Дупликати датотека',
 'filedelete-edit-reasonlist' => 'Уреди разлоге брисања',
-'filedelete-maintenance' => 'Брисање и враћање датотека је привремено онемогућено током одржавања.',
+'filedelete-maintenance' => 'Брисање и враћање датотека је привремено онемогућено због одржавања.',
 'filedelete-maintenance-title' => 'Не могу да обришем датотеку',
 
 # MIME search
@@ -2292,19 +2312,32 @@ $1',
 'mostrevisions' => 'Странице с највише измена',
 'prefixindex' => 'Све странице с префиксом',
 'prefixindex-namespace' => 'Све странице с предметком (именски простор $1)',
+'prefixindex-strip' => 'Сакриј префикс у списку',
 'shortpages' => 'Кратке странице',
 'longpages' => 'Дугачке странице',
 'deadendpages' => 'Странице без унутрашњих веза',
 'deadendpagestext' => 'Следеће странице немају везе до других страница на овом викију.',
 'protectedpages' => 'Заштићене странице',
 'protectedpages-indef' => 'само неограничене заштите',
+'protectedpages-summary' => 'На овој страници се налази списак тренутно заштићених страница. За списак заштићених наслова види [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'само преносиве заштите',
+'protectedpages-noredirect' => 'Сакриј преусмерења',
 'protectedpagesempty' => 'Нема заштићених страница с овим параметрима.',
+'protectedpages-timestamp' => 'Време и датум',
+'protectedpages-page' => 'Страница',
+'protectedpages-expiry' => 'Истиче',
+'protectedpages-performer' => 'Заштитио',
+'protectedpages-params' => 'Ниво заштите',
+'protectedpages-reason' => 'Разлог',
+'protectedpages-unknown-timestamp' => 'нема',
+'protectedpages-unknown-performer' => 'нема',
 'protectedtitles' => 'Заштићени наслови',
+'protectedtitles-summary' => 'На овој страници се налази списак тренутно заштићених наслова. За списак тренутно заштићених страница види [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Нема заштићених наслова с овим параметрима.',
 'listusers' => 'Списак корисника',
 'listusers-editsonly' => 'прикажи само кориснике који су уређивали',
 'listusers-creationsort' => 'поређај по датуму стварања',
+'listusers-desc' => 'сортирај у опадајућем редоследу',
 'usereditcount' => '$1 {{PLURAL:$1|измена|измене|измена}}',
 'usercreated' => '{{GENDER:$3|је направио|је направила|је направио}} дана $1 у $2',
 'newpages' => 'Нове странице',
@@ -2490,6 +2523,7 @@ $1',
 'watchmethod-list' => 'проверава се да ли има скорашњих измена у надгледаним страницама',
 'watchlistcontains' => 'Ваш списак надгледања садржи $1 {{PLURAL:$1|страницу|странице|страница}}.',
 'iteminvalidname' => 'Проблем са ставком „$1“. Неисправан назив.',
+'wlnote2' => 'Испод су приказане измене у {{PLURAL:$1|последњих један сат|последњих <strong>$1</strong> сата}} закључно са $2, $3.',
 'wlshowlast' => 'Прикажи последњих $1 сати, $2 дана, $3',
 'watchlist-options' => 'Поставке списка надгледања',
 
@@ -2580,6 +2614,7 @@ $UNWATCHURL
 Брисање таквих страница је ограничено да би се спречило случајно оптерећење сервера.',
 'delete-warning-toobig' => 'Ова страница има велику историју, преко $1 {{PLURAL:$1|измене|изменe|измена}}.
 Њено брисање може пореметити базу података, стога поступајте с опрезом.',
+'deleting-backlinks-warning' => "'''Упозорење:''' Бришете страницу која је укључена у друге странице или друге странице воде на њу.",
 
 # Rollback
 'rollback' => 'Врати измене',
@@ -2634,7 +2669,7 @@ $UNWATCHURL
 Ово су тренутне поставке странице '''$1''':",
 'protect-cascadeon' => 'Ова страница је тренутно заштићена јер се налази на {{PLURAL:$1|страници која има|страницама које имају}} преносиву заштиту.
 Можете да промените степен заштите, али то неће утицати на преносиву заштиту.',
-'protect-default' => 'Ð\94озволи свим корисницима',
+'protect-default' => 'Ð\94опÑ\83Ñ\88Ñ\82ено свим корисницима',
 'protect-fallback' => 'Дозвољено само корисницима са дозволом „$1“',
 'protect-level-autoconfirmed' => 'Допуштено само аутоматски потврђеним корисницима',
 'protect-level-sysop' => 'Допуштено само администраторима',
@@ -2657,7 +2692,7 @@ $UNWATCHURL
 'protect-edit-reasonlist' => 'Уреди разлоге заштићивања',
 'protect-expiry-options' => '1 сат:1 hour,1 дан:1 day,1 недеља:1 week,2 недеље:2 weeks,1 месец:1 month,3 месеца:3 months,6 месеци:6 months,1 година:1 year,трајно:infinite',
 'restriction-type' => 'Дозвола:',
-'restriction-level' => 'СÑ\82епен Ð¾Ð³Ñ\80аниÑ\87еÑ\9aа:',
+'restriction-level' => 'Ð\9dиво Ð·Ð°Ñ\88Ñ\82иÑ\82е:',
 'minimum-size' => 'Најмања величина',
 'maximum-size' => 'Највећа величина:',
 'pagesize' => '(бајтови)',
@@ -2671,7 +2706,7 @@ $UNWATCHURL
 # Restriction levels
 'restriction-level-sysop' => 'потпуно заштићено',
 'restriction-level-autoconfirmed' => 'полузаштићено',
-'restriction-level-all' => 'било који степен',
+'restriction-level-all' => 'сви нивои',
 
 # Undelete
 'undelete' => 'Приказ обрисаних страница',
@@ -2740,7 +2775,7 @@ $1',
 'contributions-title' => 'Доприноси {{GENDER:$1|корисника|кориснице}} $1',
 'mycontris' => 'Доприноси',
 'contribsub2' => 'За {{GENDER:$3|$1}} ($2)',
-'nocontribs' => 'Ð\98змене ÐºÐ¾Ñ\98е Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ\80аÑ\98Ñ\83 Ð¾Ð²Ð¸Ð¼ Ñ\83Ñ\81ловима Ð½Ð¸Ñ\81Ñ\83 Ð¿Ñ\80онаÑ\92ене.',
+'nocontribs' => 'Ð\9dема Ð¸Ð·Ð¼ÐµÐ½Ð° ÐºÐ¾Ñ\98е Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ\80аÑ\98Ñ\83 Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¸Ð¼ ÐºÑ\80иÑ\82еÑ\80иÑ\98Ñ\83мима.',
 'uctop' => '(последња)',
 'month' => 'од месеца (и раније):',
 'year' => 'од године (и раније):',
@@ -2760,6 +2795,7 @@ $1',
 'sp-contributions-search' => 'Претрага доприноса',
 'sp-contributions-username' => 'ИП адреса или корисничко име:',
 'sp-contributions-toponly' => 'Прикажи само најновије измене',
+'sp-contributions-newonly' => 'Прикажи само измене којима су креиране нове странице',
 'sp-contributions-submit' => 'Претражи',
 
 # What links here
@@ -2979,7 +3015,7 @@ $1',
 'move-subpages' => 'Премести и подстранице (до $1)',
 'move-talk-subpages' => 'Премести подстранице странице за разговор (до $1)',
 'movepage-page-exists' => 'Страница $1 већ постоји и не може се заменити.',
-'movepage-page-moved' => 'Страница $1 је премештена у $2.',
+'movepage-page-moved' => 'Страница $1 је премештена на $2.',
 'movepage-page-unmoved' => 'Страница $1 не може да се премести на $2.',
 'movepage-max-pages' => 'Највише $1 {{PLURAL:$1|страница је премештена|странице су премештене|страница је премештено}}, и више не може да буде аутоматски премештено.',
 'movelogpage' => 'Дневник премештања',
@@ -3057,6 +3093,7 @@ $1',
 'allmessages-prefix' => 'Филтрирај по префиксу:',
 'allmessages-language' => 'Језик:',
 'allmessages-filter-submit' => 'Иди',
+'allmessages-filter-translate' => 'Преведи',
 
 # Thumbnails
 'thumbnail-more' => 'Повећај',
@@ -3273,11 +3310,12 @@ $1',
 'pageinfo-length' => 'Дужина странице (у бајтовима)',
 'pageinfo-article-id' => 'ИД странице',
 'pageinfo-language' => 'Језик садржаја странице',
+'pageinfo-content-model' => 'Модел садржаја странице',
 'pageinfo-robot-policy' => 'Индексирање од стране робота',
 'pageinfo-robot-index' => 'Дозвољено',
 'pageinfo-robot-noindex' => 'Није дозвољено',
 'pageinfo-views' => 'Број прегледа',
-'pageinfo-watchers' => 'Ð\91Ñ\80оÑ\98 Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\87а Ñ\81Ñ\82Ñ\80аниÑ\86а',
+'pageinfo-watchers' => 'Ð\91Ñ\80оÑ\98 Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\87а Ñ\81Ñ\82Ñ\80аниÑ\86е',
 'pageinfo-few-watchers' => 'Мање од $1 {{PLURAL:$1|пратиоца|пратилаца}}',
 'pageinfo-redirects-name' => 'Број преусмерења на ову страницу',
 'pageinfo-subpages-name' => 'Подстранице ове странице',
@@ -3703,7 +3741,7 @@ $8',
 'exif-compression-34712' => 'JPEG2000',
 
 'exif-copyrighted-true' => 'Заштићено ауторским правом',
-'exif-copyrighted-false' => 'СÑ\82аÑ\82Ñ\83Ñ\81 Ð°Ñ\83Ñ\82оÑ\80Ñ\81киÑ\85 Ð¿Ñ\80ава Ð½Ð¸Ñ\98е Ð¿Ð¾Ð´ÐµÑ\88ен',
+'exif-copyrighted-false' => 'СÑ\82аÑ\82Ñ\83Ñ\81 Ð°Ñ\83Ñ\82оÑ\80Ñ\81киÑ\85 Ð¿Ñ\80ава Ð½Ð¸Ñ\98е Ð´ÐµÑ\84иниÑ\81ан',
 
 'exif-photometricinterpretation-2' => 'RGB',
 'exif-photometricinterpretation-6' => 'YCbCr',
@@ -4038,6 +4076,7 @@ $5
 
 # Language selector for translatable SVGs
 'img-lang-default' => '(подразумевани језик)',
+'img-lang-go' => 'Иди',
 
 # Table pager
 'ascending_abbrev' => 'раст.',
@@ -4187,6 +4226,12 @@ $5
 'version-version' => '(издање $1)',
 'version-svn-revision' => '(изм. $2)',
 'version-license' => 'Лиценца',
+'version-ext-license' => 'Лиценца',
+'version-ext-colheader-name' => 'Екстензија',
+'version-ext-colheader-version' => 'Верзија',
+'version-ext-colheader-license' => 'Лиценца',
+'version-ext-colheader-description' => 'Опис',
+'version-ext-colheader-credits' => 'Аутори',
 'version-poweredby-credits' => "Овај вики покреће '''[https://www.mediawiki.org/ Медијавики]''', ауторска права © 2001-$1 $2.",
 'version-poweredby-others' => 'остали',
 'version-poweredby-translators' => 'translatewiki.net преводиоци',
@@ -4213,7 +4258,7 @@ $5
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => 'Претрага дупликата',
-'fileduplicatesearch-summary' => 'Претрага дуплираних датотека према вредностима дисперзије.',
+'fileduplicatesearch-summary' => 'Претрага дуплираних датотека према хеш вредности.',
 'fileduplicatesearch-legend' => 'Претрага дупликата',
 'fileduplicatesearch-filename' => 'Назив датотеке:',
 'fileduplicatesearch-submit' => 'Претражи',
@@ -4229,7 +4274,7 @@ $5
 * <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' => 'Корисници и корисничка права',
@@ -4344,7 +4389,7 @@ $5
 'logentry-rights-rights' => '$1 је {{GENDER:$2|променио|променила}} чланство групе за $3 из $4 у $5',
 'logentry-rights-rights-legacy' => '$1 је {{GENDER:$2|променио|променила}} чланство групе за $3',
 'logentry-rights-autopromote' => '$1 је аутоматски {{GENDER:$2|унапређен|унапређена}} из $4 у $5',
-'rightsnone' => '(ниÑ\88Ñ\82а)',
+'rightsnone' => '(нема)',
 
 # Feedback
 'feedback-bugornote' => 'Ако сте спремни да детаљно опишете технички проблем, онда [$1 пријавите грешку].
index 9c10720..b6c032b 100644 (file)
@@ -342,7 +342,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Pošalji mi primerke e-poruka koje pošaljem drugim korisnicima',
 'tog-diffonly' => 'Ne prikazuj sadržaj stranice ispod razlika',
 'tog-showhiddencats' => 'Prikaži skrivene kategorije',
-'tog-noconvertlink' => 'Onemogući pretvaranje naslova veza',
 'tog-norollbackdiff' => 'Izostavi razliku nakon izvršenog vraćanja',
 'tog-useeditwarning' => 'Upozori me kada napuštam stranicu sa nesačuvanim promenama',
 'tog-prefershttps' => 'Uvek koristi sigurnu konekciju kada sam prijavljen.',
@@ -469,7 +468,6 @@ $messages = array(
 'vector-action-protect' => 'Zaštiti',
 'vector-action-undelete' => 'Vrati',
 'vector-action-unprotect' => 'Promeni zaštitu',
-'vector-simplesearch-preference' => 'Uprošćeno polje za pretragu (samo za temu „Vektorsko“)',
 'vector-view-create' => 'Napravi',
 'vector-view-edit' => 'Uredi',
 'vector-view-history' => 'Istorija',
@@ -490,7 +488,7 @@ $messages = array(
 'history' => 'Istorija stranice',
 'history_short' => 'Istorija',
 'updatedmarker' => 'ažurirano od moje poslednje posete',
-'printableversion' => 'Verzija za štampu',
+'printableversion' => 'Za štampanje',
 'permalink' => 'Trajna veza',
 'print' => 'Štampaj',
 'view' => 'Pogledaj',
@@ -633,6 +631,7 @@ Spisak svih posebnih stranica nalazi se [[Special:SpecialPages|ovde]].',
 # General errors
 'error' => 'Greška',
 'databaseerror' => 'Greška u bazi podataka',
+'databaseerror-text' => 'Došlo je do greške u upitu baze podataka. Možda je u pitanju programska greška.',
 'laggedslavemode' => "'''Upozorenje:''' stranica je možda zastarela.",
 'readonly' => 'Baza podataka je zaključana',
 'enterlockreason' => 'Unesite razlog za zaključavanje, uključujući i vreme otključavanja',
@@ -743,8 +742,6 @@ Imajte na umu da neke stranice mogu nastaviti da se prikazuju kao da ste još pr
 'gotaccountlink' => 'Prijava',
 'userlogin-resetlink' => 'Zaboravili ste podatke za prijavu?',
 'userlogin-resetpassword-link' => 'Zaboravili ste lozinku?',
-'helplogin-url' => 'Help:Logging in',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoć pri prijavljivanju]]',
 'createacct-join' => 'Unesite svoje podatke ispod.',
 'createacct-emailrequired' => 'Adresa e-pošte',
 'createacct-emailoptional' => 'Adresa e-pošte (opciono)',
@@ -829,6 +826,8 @@ Molimo vas da sačekate $1 pre nego što pokušate ponovo.',
 'login-abort-generic' => 'Neuspešna prijava – prekinuto',
 'loginlanguagelabel' => 'Jezik: $1',
 'suspicious-userlogout' => 'Vaš zahtev za odjavu je odbijen jer je poslat od strane neispravnog pregledača ili posrednika.',
+'pt-login' => 'Prijavi me',
+'pt-userlogout' => 'Odjavi me',
 
 # Email sending
 'php-mail-error-unknown' => 'Nepoznata greška u funkciji PHP mail().',
@@ -856,6 +855,7 @@ Možda ste već promenili lozinku ili ste zatražili novu privremenu lozinku.',
 # Special:PasswordReset
 'passwordreset' => 'Obnavljanje lozinke',
 'passwordreset-text-one' => 'Popunite ovaj obrazac da biste resetovali lozinku.',
+'passwordreset-text-many' => '{{PLURAL:$1|Ispunite jedno od polja kako bi ste dobili privremenu lozinku na e-poštu.}}',
 'passwordreset-legend' => 'Poništi lozinku',
 'passwordreset-disabled' => 'Obnavljanje lozinke je onemogućeno na ovom vikiju.',
 'passwordreset-username' => 'Korisničko ime:',
@@ -1141,7 +1141,7 @@ Ovakve argumente bi trebalo izbegavati.",
 # "Undo" feature
 'undo-success' => 'Izmena se može vratiti.
 Proverite razlike ispod, pa sačuvajte izmene.',
-'undo-failure' => 'Ne mogu da vratim izmenu zbog postojanja sukobljenih međuizmena.',
+'undo-failure' => 'Ova izmena se ne može poništiti zbog konflikta izmena.',
 'undo-norev' => 'Ne mogu da vratim izmenu jer ne postoji ili je obrisana.',
 'undo-summary' => 'Poništena izmena $1 {{GENDER:$2|korisnika|korisnice}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]])',
 
@@ -1224,8 +1224,6 @@ Ipak možete da vidite ovu razliku; više detalja možete naći u [{{fullurl:{{#
 'revdelete-show-file-submit' => 'Da',
 'revdelete-selected' => "'''{{PLURAL:$2|Izabrana izmena|Izabrane izmene}} stranice [[:$1]]'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Izabrana stavka u istoriji|Izabrane stavke u istoriji}}:'''",
-'revdelete-text' => "'''Obrisane izmene će i dalje biti prikazane u istoriji stranica i zapisima, ali delovi njihovog sadržaja neće biti dostupni javnosti.'''
-Drugi administratori na ovom vikiju će i dalje imati pristup sakrivenom sadržaju, a oni će taj sadržaj moći da vrate putem ovog sučelja, osim ako nisu postavljena dodatna ograničenja.",
 'revdelete-confirm' => 'Potvrdite da nameravate ovo uraditi, da razumete posledice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].',
 'revdelete-suppress-text' => "Sakrivanje izmena bi trebalo koristiti '''samo''' u sledećim slučajevima:
 * Zlonamerni ili pogrdni podaci
@@ -1364,7 +1362,8 @@ Više informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{F
 'searcheverything-enable' => 'svi imenski prostori',
 'searchrelated' => 'povezano',
 'searchall' => 'sve',
-'showingresults' => "Ispod {{PLURAL:$1|je prikazan '''1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}} počev od broja '''$2'''.",
+'showingresults' => 'Ispod {{PLURAL:$1|je prikazan <strong>1</strong> rezultat|su prikazana <strong>$1</strong> rezultata|je prikazano <strong>$1</strong> rezultata}} počev od broja <strong>$2</strong>.',
+'showingresultsinrange' => 'Ispod {{PLURAL:$1|je prikazan <strong>1</strong> rezultat|su prikazana <strong>$1</strong> rezultata|je prikazano <strong>$1</strong> rezultata}}, u rasponu od <strong>$2</strong> do <strong>$3</strong>.',
 'showingresultsnum' => "Ispod {{PLURAL:$3|je prikazan '''1''' rezultat|su prikazana '''$3''' rezultata|je prikazano '''$3''' rezultata}} počev od broja '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|1=Rezultat '''$1''' od '''$3'''|Rezultata '''$1 – $2''' od '''$3'''}} za '''$4'''",
 'search-nonefound' => 'Nema poklapanja.',
@@ -1528,7 +1527,7 @@ Ako izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rad
 'group-all' => '(svi)',
 
 'group-user-member' => '{{GENDER:$1|korisnik|korisnica|korisnik}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|automatski potvrđen korisnik|automatski potvrđena korisnica|automatski potvrđen korisnik}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|automatski potvrđen korisnik|automatski potvrđena korisnica}}',
 'group-bot-member' => '{{GENDER:$1|bot}}',
 'group-sysop-member' => '{{GENDER:$1|administrator|administratorka}}',
 'group-bureaucrat-member' => '{{GENDER:$1|birokrata|birokratkinja}}',
@@ -1619,7 +1618,7 @@ Ako izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rad
 'action-createaccount' => 'otvaranje ovog korisničkog naloga',
 'action-minoredit' => 'označavanje ove izmene kao manje',
 'action-move' => 'premesti ovu stranicu',
-'action-move-subpages' => 'premesti ovu stranicu, kao i njene podstranice',
+'action-move-subpages' => 'premeštanje ove stranice i njenih podstranica',
 'action-move-rootuserpages' => 'premeštanje osnovnih korisničkih stranica',
 'action-movefile' => 'premesti ovu datoteku',
 'action-upload' => 'slanje ove datoteke',
@@ -1653,6 +1652,7 @@ Ako izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rad
 'recentchanges' => 'Skorašnje izmene',
 'recentchanges-legend' => 'Postavke skorašnjih izmena',
 'recentchanges-summary' => 'Pratite skorašnje izmene na ovoj stranici.',
+'recentchanges-noresult' => 'Nema promena u zadatom vremenu za zadate kriterijume.',
 'recentchanges-feed-description' => 'Pratite skorašnje izmene uz pomoć ovog dovoda.',
 'recentchanges-label-newpage' => 'Nova stranica',
 'recentchanges-label-minor' => 'Manja izmena',
@@ -1661,18 +1661,30 @@ Ako izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rad
 'recentchanges-label-plusminus' => 'Promena veličine stranice (u bajtovima)',
 'recentchanges-legend-heading' => "'''Legenda:'''",
 'recentchanges-legend-newpage' => '([[Special:NewPages|spisak novih stranica]])',
-'rcnotefrom' => 'Ispod su izmene od <b>$3; $4</b> (do <b>$1</b> izmena).',
+'rcnotefrom' => 'Ispod su izmene od <b>$2</b> (do <b>$1</b> izmena).',
 'rclistfrom' => 'Prikaži nove izmene počev od $1',
 'rcshowhideminor' => '$1 manje izmene',
+'rcshowhideminor-show' => 'Prikaži',
+'rcshowhideminor-hide' => 'Sakrij',
 'rcshowhidebots' => '$1 botove',
+'rcshowhidebots-show' => 'Prikaži',
+'rcshowhidebots-hide' => 'Sakrij',
 'rcshowhideliu' => '$1 prijavljene korisnike',
+'rcshowhideliu-show' => 'Prikaži',
+'rcshowhideliu-hide' => 'Sakrij',
 'rcshowhideanons' => '$1 anonimne korisnike',
+'rcshowhideanons-show' => 'Prikaži',
+'rcshowhideanons-hide' => 'Sakrij',
 'rcshowhidepatr' => '$1 patrolirane izmene',
+'rcshowhidepatr-show' => 'Prikaži',
+'rcshowhidepatr-hide' => 'Sakrij',
 'rcshowhidemine' => '$1 moje izmene',
+'rcshowhidemine-show' => 'Prikaži',
+'rcshowhidemine-hide' => 'Sakrij',
 'rclinks' => 'Prikaži poslednjih $1 izmena {{PLURAL:$2|prethodni dan|u poslednja $2 dana|u poslednjih $2 dana}}<br />$3',
 'diff' => 'razl',
 'hist' => 'ist',
-'hide' => 'sakrij',
+'hide' => 'Sakrij',
 'show' => 'Prikaži',
 'minoreditletter' => ' m',
 'newpageletter' => 'N',
@@ -2048,7 +2060,7 @@ Njen opis možete da izmenite na [$2 odgovarajućoj stranici].',
 ** Kršenje autorskih prava
 ** Duplikati datoteka',
 'filedelete-edit-reasonlist' => 'Uredi razloge brisanja',
-'filedelete-maintenance' => 'Brisanje i vraćanje datoteka je privremeno onemogućeno tokom održavanja.',
+'filedelete-maintenance' => 'Brisanje i vraćanje datoteka je privremeno onemogućeno zbog održavanja.',
 'filedelete-maintenance-title' => 'Ne mogu da obrišem datoteku',
 
 # MIME search
@@ -2166,12 +2178,22 @@ Sada je preusmerenje na [[$2]].',
 'protectedpages' => 'Zaštićene stranice',
 'protectedpages-indef' => 'samo neograničene zaštite',
 'protectedpages-cascade' => 'samo prenosive zaštite',
+'protectedpages-noredirect' => 'Sakrij preusmerenja',
 'protectedpagesempty' => 'Nema zaštićenih stranica s ovim parametrima.',
+'protectedpages-timestamp' => 'Vreme i datum',
+'protectedpages-page' => 'Stranica',
+'protectedpages-expiry' => 'Ističe',
+'protectedpages-performer' => 'Zaštitio',
+'protectedpages-params' => 'Nivo zaštite',
+'protectedpages-reason' => 'Razlog',
+'protectedpages-unknown-timestamp' => 'nema',
+'protectedpages-unknown-performer' => 'nema',
 'protectedtitles' => 'Zaštićeni naslovi',
 'protectedtitlesempty' => 'Nema zaštićenih naslova s ovim parametrima.',
 'listusers' => 'Spisak korisnika',
 'listusers-editsonly' => 'prikaži samo korisnike koji su uređivali',
 'listusers-creationsort' => 'poređaj po datumu stvaranja',
+'listusers-desc' => 'sortiraj u opadajućem redosledu',
 'usereditcount' => '$1 {{PLURAL:$1|izmena|izmene|izmena}}',
 'usercreated' => '{{GENDER:$3|je napravio|je napravila|je napravio}} dana $1 u $2',
 'newpages' => 'Nove stranice',
@@ -2357,6 +2379,7 @@ Buduće izmene ove stranice i njene stranice za razgovor biće navedene ovde.',
 'watchmethod-list' => 'proverava se da li ima skorašnjih izmena u nadgledanim stranicama',
 'watchlistcontains' => 'Vaš spisak nadgledanja sadrži $1 {{PLURAL:$1|stranicu|stranice|stranica}}.',
 'iteminvalidname' => 'Problem sa stavkom „$1“. Neispravan naziv.',
+'wlnote2' => 'Ispod su prikazane izmene u {{PLURAL:$1|poslednjih jedan sat|poslednjih <strong>$1</strong> sata}} zaključno sa $2, $3.',
 'wlshowlast' => 'Prikaži poslednjih $1 sati, $2 dana, $3',
 'watchlist-options' => 'Postavke spiska nadgledanja',
 
@@ -2437,6 +2460,7 @@ Pogledajte ''$2'' za više detalja.",
 Brisanje takvih stranica je ograničeno da bi se sprečilo slučajno opterećenje servera.',
 'delete-warning-toobig' => 'Ova stranica ima veliku istoriju, preko $1 {{PLURAL:$1|izmene|izmene|izmena}}.
 Njeno brisanje može poremetiti bazu podataka, stoga postupajte s oprezom.',
+'deleting-backlinks-warning' => "'''Upozorenje:''' Brišete stranicu koja je uključena u druge stranice ili druge stranice vode na nju.",
 
 # Rollback
 'rollback' => 'Vrati izmene',
@@ -2491,7 +2515,7 @@ Ovo su postavke stranice '''$1''':",
 Ovo su trenutne postavke stranice '''$1''':",
 'protect-cascadeon' => 'Ova stranica je trenutno zaštićena jer se nalazi na {{PLURAL:$1|stranici koja ima|stranicama koje imaju}} prenosivu zaštitu.
 Možete da promenite stepen zaštite, ali to neće uticati na prenosivu zaštitu.',
-'protect-default' => 'Dozvoli svim korisnicima',
+'protect-default' => 'Dopušteno svim korisnicima',
 'protect-fallback' => 'Dozvoljeno samo korisnicima sa dozvolom „$1“',
 'protect-level-autoconfirmed' => 'Dopušteno samo automatski potvrđenim korisnicima',
 'protect-level-sysop' => 'Dopušteno samo administratorima',
@@ -2514,7 +2538,7 @@ Možete da promenite stepen zaštite, ali to neće uticati na prenosivu zaštitu
 'protect-edit-reasonlist' => 'Uredi razloge zaštićivanja',
 'protect-expiry-options' => '1 sat:1 hour,1 dan:1 day,1 nedelja:1 week,2 nedelje:2 weeks,1 mesec:1 month,3 meseca:3 months,6 meseci:6 months,1 godina:1 year,trajno:infinite',
 'restriction-type' => 'Dozvola:',
-'restriction-level' => 'Stepen ograničenja:',
+'restriction-level' => 'Nivo zaštite:',
 'minimum-size' => 'Najmanja veličina',
 'maximum-size' => 'Najveća veličina:',
 'pagesize' => '(bajtovi)',
@@ -2528,7 +2552,7 @@ Možete da promenite stepen zaštite, ali to neće uticati na prenosivu zaštitu
 # Restriction levels
 'restriction-level-sysop' => 'potpuno zaštićeno',
 'restriction-level-autoconfirmed' => 'poluzaštićeno',
-'restriction-level-all' => 'bilo koji stepen',
+'restriction-level-all' => 'svi nivoi',
 
 # Undelete
 'undelete' => 'Prikaz obrisanih stranica',
@@ -2597,7 +2621,7 @@ $1',
 'contributions-title' => 'Doprinosi {{GENDER:$1|korisnika|korisnice}} $1',
 'mycontris' => 'Doprinosi',
 'contribsub2' => 'Za {{GENDER:$3|$1}} ($2)',
-'nocontribs' => 'Izmene koje odgovaraju ovim uslovima nisu pronađene.',
+'nocontribs' => 'Nema izmena koje odgovaraju navedenim kriterijumima.',
 'uctop' => '(poslednja)',
 'month' => 'od meseca (i ranije):',
 'year' => 'od godine (i ranije):',
@@ -2836,7 +2860,7 @@ Izaberite drugo ime.',
 'move-subpages' => 'Premesti i podstranice (do $1)',
 'move-talk-subpages' => 'Premesti podstranice stranice za razgovor (do $1)',
 'movepage-page-exists' => 'Stranica $1 već postoji i ne može se zameniti.',
-'movepage-page-moved' => 'Stranica $1 je premeštena u $2.',
+'movepage-page-moved' => 'Stranica $1 je premeštena na $2.',
 'movepage-page-unmoved' => 'Stranica $1 ne može da se premesti na $2.',
 'movepage-max-pages' => 'Najviše $1 {{PLURAL:$1|stranica je premeštena|stranice su premeštene|stranica je premešteno}}, i više ne može da bude automatski premešteno.',
 'movelogpage' => 'Dnevnik premeštanja',
@@ -2914,6 +2938,7 @@ Posetite [https://www.mediawiki.org/wiki/Localisation Medijaviki lokalizaciju] i
 'allmessages-prefix' => 'Filtriraj po prefiksu:',
 'allmessages-language' => 'Jezik:',
 'allmessages-filter-submit' => 'Idi',
+'allmessages-filter-translate' => 'Prevedi',
 
 # Thumbnails
 'thumbnail-more' => 'Povećaj',
@@ -3129,11 +3154,12 @@ Ovo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj li
 'pageinfo-length' => 'Dužina stranice (u bajtovima)',
 'pageinfo-article-id' => 'ID stranice',
 'pageinfo-language' => 'Jezik sadržaja stranice',
+'pageinfo-content-model' => 'Model sadržaj stranice',
 'pageinfo-robot-policy' => 'Indeksiranje od strane robota',
 'pageinfo-robot-index' => 'Dozvoljeno',
 'pageinfo-robot-noindex' => 'Nije dozvoljeno',
 'pageinfo-views' => 'Broj pregleda',
-'pageinfo-watchers' => 'Broj nadgledača stranica',
+'pageinfo-watchers' => 'Broj nadgledača stranicе',
 'pageinfo-few-watchers' => 'Manje od $1 {{PLURAL:$1|pratioca|pratilaca}}',
 'pageinfo-redirects-name' => 'Broj preusmerenja na ovu stranicu',
 'pageinfo-subpages-name' => 'Podstranice ove stranice',
@@ -3547,7 +3573,7 @@ $8',
 'exif-compression-34712' => 'JPEG2000',
 
 'exif-copyrighted-true' => 'Zaštićeno autorskim pravom',
-'exif-copyrighted-false' => 'Status autorskih prava nije podešen',
+'exif-copyrighted-false' => 'Status autorskih prava nije definisan',
 
 'exif-photometricinterpretation-2' => 'RGB',
 'exif-photometricinterpretation-6' => 'YCbCr',
@@ -3879,6 +3905,9 @@ Potvrdite da stvarno želite da napravite stranicu.",
 'imgmultigo' => 'Idi!',
 'imgmultigoto' => 'Idi na stranicu $1',
 
+# Language selector for translatable SVGs
+'img-lang-go' => 'Idi',
+
 # Table pager
 'ascending_abbrev' => 'rast.',
 'descending_abbrev' => 'opad.',
@@ -4027,6 +4056,11 @@ Možete da [[Special:EditWatchlist|koristite i običan uređivač]].',
 'version-version' => '(izdanje $1)',
 'version-svn-revision' => '(izm. $2)',
 'version-license' => 'Licenca',
+'version-ext-license' => 'Licenca',
+'version-ext-colheader-version' => 'Verzija',
+'version-ext-colheader-license' => 'Licenca',
+'version-ext-colheader-description' => 'Opis',
+'version-ext-colheader-credits' => 'Autori',
 'version-poweredby-credits' => "Ovaj viki pokreće '''[https://www.mediawiki.org/ Medijaviki]''', autorska prava © 2001-$1 $2.",
 'version-poweredby-others' => 'ostali',
 'version-credits-summary' => 'Želeli bismo da zahvalimo sledećim ljudima na njihovom doprinosu [[Special:Version|Medijavikiji]].',
@@ -4051,7 +4085,7 @@ Trebalo bi da ste primili [{{SERVER}}{{SCRIPTPATH}}/COPYING primerak GNU-ove op
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => 'Pretraga duplikata',
-'fileduplicatesearch-summary' => 'Pretraga dupliranih datoteka prema vrednostima disperzije.',
+'fileduplicatesearch-summary' => 'Pretraga dupliranih datoteka prema heš vrednosti.',
 'fileduplicatesearch-legend' => 'Pretraga duplikata',
 'fileduplicatesearch-filename' => 'Naziv datoteke:',
 'fileduplicatesearch-submit' => 'Pretraži',
@@ -4062,11 +4096,12 @@ Trebalo bi da ste primili [{{SERVER}}{{SCRIPTPATH}}/COPYING primerak GNU-ove op
 
 # Special:SpecialPages
 'specialpages' => 'Posebne stranice',
+'specialpages-note-top' => 'Legenda',
 'specialpages-note' => '* Normalne posebne stranice
 * <span class="mw-specialpagerestricted">Ograničene posebne stranice</span>',
 'specialpages-group-maintenance' => 'Izveštaji održavanja',
 'specialpages-group-other' => 'Ostale posebne stranice',
-'specialpages-group-login' => 'Prijava/registracija',
+'specialpages-group-login' => 'Prijava / registracija',
 'specialpages-group-changes' => 'Skorašnje izmene i dnevnici',
 'specialpages-group-media' => 'Izveštaji o multimedijalnom sadržaju i otpremanja',
 'specialpages-group-users' => 'Korisnici i korisnička prava',
@@ -4181,7 +4216,7 @@ Trebalo bi da ste primili [{{SERVER}}{{SCRIPTPATH}}/COPYING primerak GNU-ove op
 'logentry-rights-rights' => '$1 je {{GENDER:$1|promenio|promenila}} članstvo grupe za $3 iz $4 u $5',
 'logentry-rights-rights-legacy' => '$1 je {{GENDER:$2|promenio|promenila}} čalnstvo grupe za $3',
 'logentry-rights-autopromote' => '$1 je automatski {{GENDER:$1|unapređen|unapređena}} iz $4 u $5',
-'rightsnone' => '(ništa)',
+'rightsnone' => '(nema)',
 
 # Feedback
 'feedback-bugornote' => 'Ako ste spremni da detaljno opišete tehnički problem, onda [$1 prijavite grešku].
index 84f0a55..a7cde7e 100644 (file)
@@ -153,16 +153,13 @@ $magicWords = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Poti strepi ondro den miti:',
-'tog-justify' => 'Fiti na ala tu sey',
 'tog-hideminor' => 'Kibri pikin kenki ini laste kenki',
 'tog-extendwatchlist' => 'Moro langa "Tan luku" réy',
 'tog-usenewrc' => 'Moro betre Laste Kenki (JavaScript)',
 'tog-numberheadings' => 'Gi den ede wan nomru sondro fu yepi',
 'tog-showtoolbar' => 'Sori Kenki-Wrokosani-barki (JavaScript)',
 'tog-editondblclick' => 'Naki tu tron fu kenki (JavaScript)',
-'tog-editsection' => 'Gi primisi fu kenki pisi-papira nanga [kenki]-miti',
 'tog-editsectiononrightclick' => "Gi primisi fu kenki pisi-papira nanga wan naki n'a leti-anu sey na tapu wan pisi-ede (JavaScript)",
-'tog-showtoc' => 'Sori san de (gi papira nanga moro leki 3 pisi-ede)',
 'tog-rememberpassword' => 'Memre mi psawortu (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'Tan luku den papira di mi meki',
 'tog-watchdefault' => 'Tan luku den papira di mi kenki',
@@ -618,7 +615,6 @@ A kan ben trowe efu dribi.
 'lineno' => 'Lini $1:',
 'compareselectedversions' => 'Luku den difrenti fu den versi di teki',
 'editundo' => "drai pot' baka",
-'diff-multi' => '(No e sori {{PLURAL:$1|wan versi|$1 versi}} na mindrisey.)',
 
 # Search results
 'searchresults' => 'Sukuleysi',
@@ -645,7 +641,6 @@ A kan ben trowe efu dribi.
 'rows' => 'Rei:',
 'columns' => 'Kolum:',
 'searchresultshead' => 'Suku',
-'resultsperpage' => 'Ris ies papira:',
 'stub-threshold' => 'Dupolo fu seti <a href="#" class="stub">stub</a>:',
 'recentchangesdays' => 'Teki fu dey tu libi si ini bakaseywan kenki:',
 'recentchangescount' => 'Teki fu peprewoysi ini bakaseywan kenki:',
index 821e75d..222dae8 100644 (file)
@@ -192,7 +192,6 @@ $messages = array(
 'vector-action-protect' => 'Skutsje',
 'vector-action-undelete' => 'Wierhäärstaale',
 'vector-action-unprotect' => 'Siedenskuts annerje',
-'vector-simplesearch-preference' => 'Uutwiedede Säikfoarsleeke aktivierje (bloot Vector)',
 'vector-view-create' => 'Moakje',
 'vector-view-edit' => 'Beoarbaidje',
 'vector-view-history' => 'Versionsgeskichte',
@@ -833,8 +832,6 @@ Du koast dissen Versionsunnerskeed bekiekje, wan du wolt. Details fiende sik in
 'revdelete-show-file-submit' => 'Jee',
 'revdelete-selected' => "'''{{PLURAL:$2|Uutwäälde Version|Uutwäälde Versione}} fon [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Uutwäälden Logboukiendraach|Uutwäälde Logboukiendraage}}:'''",
-'revdelete-text' => "'''Läskede Versione un Aktione ferblieuwe in ju Versionsgeskichte un do Logbouke, man Deele deerfon sunt nit eepentelk ientoukiekjen.'''
-Uur Administratore ap {{SITENAME}} hääbe Tougriep ap dän ferstatte Inhoold un konnen him mäd ju glieke Siede wier moakje, insowied uurhoop neen Ientuunengen bestounde.",
 'revdelete-confirm' => 'Bestäätigje, dät du dit wuddelk dwo wolt, dät du do Konsequenze ferstoanst un dät in Uureenstimmenge mäd do [[{{MediaWiki:Policy-url}}|Gjuchtlienjen]] dääst.',
 'revdelete-suppress-text' => "Unnerdrukkengen skuulen '''bloot''' in do foulgjende Fälle foarnuumen waide:
 * Uunpaasende persöönelke Informatione
index e801917..d44340f 100644 (file)
@@ -164,7 +164,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Kirimkeun ogé salinan surélékna ka alamat kuring',
 'tog-diffonly' => 'Ulah némbongkeun eusi kaca di handapeun béda éditan',
 'tog-showhiddencats' => 'Témbongkeun kategori nyumput',
-'tog-noconvertlink' => 'Non-aktifkeun konvérsi judul tumbu',
 'tog-norollbackdiff' => 'Liwat béda sanggeus malikkeun révisi',
 'tog-useeditwarning' => 'Béjaan kuring lamun ninggalkeun kaca édit anu parobahanana can disimpen',
 
@@ -277,7 +276,6 @@ $messages = array(
 'vector-action-protect' => 'Konci',
 'vector-action-undelete' => 'Bolaykeun ngahapus',
 'vector-action-unprotect' => 'Robah protéksi',
-'vector-simplesearch-preference' => 'Aktipkeun saran pamaluruhan lengkep (ukur kulit Véktor)',
 'vector-view-create' => 'Jieun',
 'vector-view-edit' => 'Édit',
 'vector-view-history' => 'Témbongkeun jujutan',
@@ -905,8 +903,6 @@ Salaku kuncen, mun perlu, anjeun bisa kénéh [$1 nempo bédana].",
 'revdelete-show-file-submit' => 'Enya',
 'revdelete-selected' => "'''{{PLURAL:$2|Révisi pilihan|Révisi pilihan}} pikeun '''$1''''''",
 'logdelete-selected' => "'''{{PLURAL:$1|pilihan keur log|pilihan keur log}}:'''",
-'revdelete-text' => "'''Revisi sarta tindakan anu geus dihapus baris tetep mecenghul di kaca vérsi tiheula, tapi teks eusi henteu bisa diakses ku publik.'''
-Kuncén séjén bakalan bisa ngakses eusi nu nyumput sarta bisa ngabolaykeun hapusan ngaliwatan antarmuka anu sarua, kajaba lamun aya pangbates séjén anu dijieun ku operator loka",
 'revdelete-confirm' => 'Mangga geura konfirmasi yen Anjeun gaduh maksad pikeun ngalakukeun hal ieu, paham kana konsekwensina, tur nu dilakukeun ieu teh luyu sareng [[{{MediaWiki:Policy-url}}|kawijakanana]]',
 'revdelete-suppress-text' => "Nyumputkeun revisi '''ukur''' bisa digunakeun keur kasus-kasus di handap ieu:
 * Informasi nu boga potensi mitenah
index 91924ef..7f08e89 100644 (file)
@@ -362,7 +362,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Skicka kopior till mig av e-post jag skickar till andra användare',
 'tog-diffonly' => 'Visa inte sidinnehåll under diffar',
 'tog-showhiddencats' => 'Visa dolda kategorier',
-'tog-noconvertlink' => 'Stäng av konvertering av sidtitlar',
 'tog-norollbackdiff' => 'Visa inte diff efter tillbakarullning',
 'tog-useeditwarning' => 'Varna mig om jag lämnar en redigeringssida där jag gjort ändringar men inte sparat.',
 'tog-prefershttps' => 'Använd alltid en säker anslutning när jag är inloggad',
@@ -489,7 +488,6 @@ $messages = array(
 'vector-action-protect' => 'Skrivskydda',
 'vector-action-undelete' => 'Återställ',
 'vector-action-unprotect' => 'Ändra skydd',
-'vector-simplesearch-preference' => 'Aktivera förenklat sökfält (endast Vector-utseendet)',
 'vector-view-create' => 'Skapa',
 'vector-view-edit' => 'Redigera',
 'vector-view-history' => 'Visa historik',
@@ -655,9 +653,9 @@ Detta kan tyda på en bugg i mjukvaran.',
 'databaseerror-query' => 'Fråga: $1',
 'databaseerror-function' => 'Funktion: $1',
 'databaseerror-error' => 'Fel: $1',
-'laggedslavemode' => 'Varning: Sidan kan sakna de senaste uppdateringarna.',
+'laggedslavemode' => '<strong>Varning:</strong> Sidan kan sakna de senaste uppdateringarna.',
 'readonly' => 'Databasen är låst',
-'enterlockreason' => 'Ange varför sidan låsts, och ge en uppskattning av hur länge skrivskyddet bör behållas.',
+'enterlockreason' => 'Ange varför sidan låsts, och ge en uppskattning av hur länge låset kommer att släppas',
 'readonlytext' => 'Databasen är tillfälligt låst för nya inlägg och andra modifieringar, förmodligen på grund av rutinmässigt underhåll, efter vilket den kommer den att återgå till normalläge.
 
 Den administratör som låste den har angivit följande förklaring: $1',
@@ -774,8 +772,6 @@ Glöm inte att justera dina [[Special:Preferences|{{SITENAME}}-inställningar]].
 'gotaccountlink' => 'Logga in',
 'userlogin-resetlink' => 'Har du glömt dina inloggningsuppgifter?',
 'userlogin-resetpassword-link' => 'Glömt ditt lösenord?',
-'helplogin-url' => 'Help:Logga in',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjälp med inloggning]]',
 'userlogin-loggedin' => 'Du är redan inloggad som {{GENDER:$1|$1}}.
 Använd formuläret nedan för att logga in som en annan användare.',
 'userlogin-createanother' => 'Skapa ett annat konto',
@@ -865,6 +861,10 @@ Vänta $1 innan du försöker igen.',
 'suspicious-userlogout' => 'Din begäran om att logga ut nekades eftersom det ser ut som det skickades av en trasig webbläsare eller cachande proxy.',
 'createacct-another-realname-tip' => 'Riktiga namnet är valfritt.
 Om du väljer att ange det, kommer det användas för att tillskriva användaren för sitt arbete.',
+'pt-login' => 'Logga in',
+'pt-login-button' => 'Logga in',
+'pt-createaccount' => 'Skapa konto',
+'pt-userlogout' => 'Logga ut',
 
 # Email sending
 'php-mail-error-unknown' => 'Okänt fel i PHP:s mail()-funktion',
@@ -873,7 +873,7 @@ Om du väljer att ange det, kommer det användas för att tillskriva användaren
 
 # Change password dialog
 'changepassword' => 'Byt lösenord',
-'resetpass_announce' => 'Du loggade in med ett temporärt lösenord. För att slutföra inloggningen måste du välja ett nytt lösenord.',
+'resetpass_announce' => 'För att slutföra inloggningen måste du välja ett nytt lösenord.',
 'resetpass_text' => '<!-- Lägg till text här -->',
 'resetpass_header' => 'Ändra lösenord för konto',
 'oldpassword' => 'Gammalt lösenord:',
@@ -889,8 +889,13 @@ Vänta $1 innan du försöker igen.',
 'resetpass-submit-cancel' => 'Avbryt',
 'resetpass-wrong-oldpass' => 'Ogiltigt tillfälligt eller nuvarande lösenord.
 Du kanske redan har lyckats ändra ditt lösenord eller begärt ett nytt tillfälligt lösenord.',
+'resetpass-recycled' => 'Var god återställ ditt lösenord till någonting annat än ditt aktuella lösenord.',
+'resetpass-temp-emailed' => 'Du loggade in med en temporär kod som skickats via e-post.
+För att slutföra inloggningen måste du välja ett nytt lösenord här:',
 'resetpass-temp-password' => 'Tillfälligt lösenord:',
 'resetpass-abort-generic' => 'Lösenordsändring av har avbrutits av ett tillägg.',
+'resetpass-expired' => 'Ditt lösenord har gått ut. Var god välj ett nytt lösenord för att logga in.',
+'resetpass-expired-soft' => 'Ditt lösenord har gått ut och behöver återställas. Var god välj ett nytt lösenord nu eller klicka på "{{int:resetpass-submit-cancel}}" för att återställa det senare.',
 
 # Special:PasswordReset
 'passwordreset' => 'Återställ lösenord',
@@ -1031,16 +1036,16 @@ Det kan ha flyttats eller raderats medan du tittade på sidan.',
 'accmailtitle' => 'Lösenord skickat.',
 'accmailtext' => "Ett slumpgenererat lösenord för [[User talk:$1|$1]] har skickats till $2. Det kan ändras på sidan ''[[Special:ChangePassword|ändra lösenord]]'' när du loggar in.",
 'newarticle' => '(Ny)',
-'newarticletext' => 'Du har klickat på en länk till en sida som inte finns ännu. Du kan själv skapa sidan genom att skriva i fältet nedan (du kan läsa mer på [[{{MediaWiki:Helppage}}|hjälpsidan]]). Om du inte vill skriva något kan du bara trycka på "tillbaka" i din webbläsare.',
+'newarticletext' => 'Du har klickat på en länk till en sida som inte finns ännu. För att skapa sidan, börja att skriva i fältet nedan (du kan läsa mer på [[{{MediaWiki:Helppage}}|hjälpsidan]]). Om du kom hit av misstag kan du bara trycka på <strong>tillbaka</strong>-knappen i din webbläsare.',
 'anontalkpagetext' => "----''Detta är diskussionssidan för en anonym användare som inte ännu skapat ett konto, eller som inte använder det.
 Därför måste vi använda den numeriska IP-adressen för att identifiera honom/henne.
 En sådan IP-adress kan delas av flera användare.
 Om du är en anonym användare och känner att irrelevanta kommentarer har riktats mot dig, vänligen [[Special:UserLogin/signup|skapa ett konto]] eller [[Special:UserLogin|logga in]] för att undvika framtida förväxlingar med andra anonyma användare.''",
 'noarticletext' => 'Det finns just nu ingen text på denna sida.
-Du kan [[Special:Search/{{PAGENAME}}|söka efter denna sidtitel]] på andra sidor, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} söka i loggarna], eller [{{fullurl:{{FULLPAGENAME}}|action=edit}} redigera denna sida]</span>.',
+Du kan [[Special:Search/{{PAGENAME}}|söka efter denna sidtitel]] på andra sidor, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} söka i relaterade loggar], eller [{{fullurl:{{FULLPAGENAME}}|action=edit}} redigera denna sida]</span>.',
 'noarticletext-nopermission' => 'Det finns för tillfället ingen text på denna sida.
 Du kan [[Special:Search/{{PAGENAME}}|söka efter denna sidas titel]] på andra sidor,
-eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} söka i relaterade loggar]</span>.',
+eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} söka i relaterade loggar]</span> men du har inte behörighet att skapa sidan.',
 'missing-revision' => 'Revisionen #$1 av sidan med namnet "{{PAGENAME}}" finns inte.
 
 Detta orsakas vanligen av efter en gammal historiklänk till en sida som har raderats.
@@ -1192,6 +1197,7 @@ Dessa parametrar har uteslutits.',
 Var god och kontrollera jämförelsen nedan för att bekräfta att detta är vad du avser att göra, och spara sedan ändringarna nedan för att göra redigeringen ogjord.',
 'undo-failure' => 'Redigeringen kunde inte göras ogjord på grund av konflikt med mellanliggande redigeringar.',
 'undo-norev' => 'Redigeringen kan inte göras ogjord eftersom den inte finns eller har raderats.',
+'undo-nochange' => 'Det verkar som att redigeringen redan har blivit ogjord.',
 'undo-summary' => 'Gör version $1 av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskussion]]) ogjord',
 'undo-summary-username-hidden' => 'Gör version $1 av en dold användare ogjord',
 
@@ -1220,7 +1226,7 @@ Anledningen enligt $3 var ''$2''",
 'page_first' => 'första',
 'page_last' => 'sista',
 'histlegend' => "Val av diff: markera i klickrutorna för att jämföra versioner och tryck enter eller knappen längst ner.<br />
-Förklaring: (nuvarande) = skillnad mot nuvarande version; (föregående) = skillnad mot föregående version; '''m''' = mindre ändring.",
+Förklaring: '''({{int:cur}})''' = skillnad mot senaste version; '''({{int:last}})''' = skillnad mot föregående version; '''{{int:minoreditletter}}''' = mindre ändring.",
 'history-fieldset-title' => 'Bläddra i historiken',
 'history-show-deleted' => 'Endast borttagna',
 'histfirst' => 'äldsta',
@@ -1278,8 +1284,10 @@ eller så försöker du gömma den senaste versionen av sidan.',
 'revdelete-show-file-submit' => 'Ja',
 'revdelete-selected' => "'''{{PLURAL:$2|Vald version|Valda versioner}} av [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Vald loggåtgärd|Valda loggåtgärder}}:'''",
-'revdelete-text' => "'''Borttagna versioner och åtgärder kommer fortfarande att synas i historiken och i loggar, men deras innehåll kommer ej att vara tillgängligt för allmänheten.'''
-Andra administratörer på {{SITENAME}} kommer fortfarande att kunna läsa det dolda innehållet och kan återställa sidan genom samma gränssnitt, om inte ytterligare begränsningar finns.",
+'revdelete-text-text' => 'Raderade sidversioner kommer fortfarande synas i sidans historik, men delar av innehållet kommer inte att bli tillgängligt offentligt.',
+'revdelete-text-file' => 'Raderade filversioner kommer fortfarande synas i filens historik, men delar av innehållet kommer inte att bli tillgängligt offentligt.',
+'logdelete-text' => 'Raderade logghändelser kommer fortfarande synas i loggarna, men delar av innehållet kommer inte att bli tillgängligt offentligt.',
+'revdelete-text-others' => 'Andra administratörer på {{SITENAME}} kommer fortfarande att kunna komma åt det dolda innehållet och återställa det igen genom samma gränssnitt om inte tilläggande begränsningar används.',
 'revdelete-confirm' => 'Var god bekräfta att du vill göra detta, och att du förstår konsekvenserna, och att du gör så i enlighet med [[{{MediaWiki:Policy-url}}|policyn]].',
 'revdelete-suppress-text' => "Undanhållande ska '''bara''' användas i följande fall:
 * Eventuell förolämpande information
@@ -1395,7 +1403,7 @@ Detaljer kan hittas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'nextn-title' => 'Nästa $1 {{PLURAL:$1|resultat|resultat}}',
 'shown-title' => 'Visa $1 {{PLURAL:$1|resultat|resultat}} per sida',
 'viewprevnext' => 'Visa ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-exists' => "'''Det finns en sida med namnet \"[[:\$1]]\" på denna wiki.''' {{PLURAL:\$2|0=|Se även de andra sökresultaten som hittades.}}",
+'searchmenu-exists' => '<strong>Det finns en sida med namnet "[[:$1]]" på denna wiki.</strong> {{PLURAL:$2|0=|Se även de andra sökresultaten som hittades.}}',
 'searchmenu-new' => '<strong>Skapa sidan "[[:$1]]" på denna wiki!</strong> {{PLURAL:$2|0=|Se även sidan som hittades med din sökning.|Se även sidorna som hittades med din sökning.}}',
 'searchprofile-articles' => 'Innehållssidor',
 'searchprofile-project' => 'Hjälp- och projektsidor',
@@ -1415,13 +1423,14 @@ Detaljer kan hittas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'search-file-match' => '(överensstämmer filens innehåll)',
 'search-suggest' => 'Menade du: $1',
 'search-interwiki-caption' => 'Systerprojekt',
-'search-interwiki-default' => 'Resultat i $1:',
+'search-interwiki-default' => 'Resultat från $1:',
 'search-interwiki-more' => '(mer)',
 'search-relatedarticle' => 'Relaterad',
 'searcheverything-enable' => 'Sök i alla namnrymder',
 'searchrelated' => 'relaterad',
 'searchall' => 'alla',
 'showingresults' => "Nedan visas upp till {{PLURAL:$1|'''1''' post|'''$1''' poster}} från och med nummer '''$2'''.",
+'showingresultsinrange' => 'Nedan visas upp till {{PLURAL:$3|<strong>1</strong> resultat|<strong>$1</strong> resultat}} mellan nummer <strong>$2</strong> och nummer <strong>$3</strong>.',
 'showingresultsnum' => "Nedan visas {{PLURAL:$3|'''1''' post|'''$3''' poster}} från och med nummer '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Resultat '''$1''' av '''$3'''|Resultat '''$1 - $2''' av '''$3'''}} för '''$4'''",
 'search-nonefound' => 'Inga resultat matchade frågan.',
@@ -1531,7 +1540,7 @@ Programvaran använder detta värde för att adressera dig till andra med rätt
 'prefs-help-realname' => 'Riktigt namn behöver inte anges.
 Om du väljer att ange ditt riktiga namn, kommer det att användas för att tillskriva dig ditt arbete.',
 'prefs-help-email' => 'Att ange e-postadress är valfritt, men gör det möjligt att få ditt lösenord mejlat till dig om du glömmer det.',
-'prefs-help-email-others' => 'Du kan också välja att låta andra användare kontakta dig genom din användar- eller diskussionssida utan att avslöja din identitet.',
+'prefs-help-email-others' => 'Du kan också välja att låta andra kontakta dig via e-post genom en länk på din användar- eller diskussionssida. Din e-postadress avslöjas inte när andra användare kontaktar dig.',
 'prefs-help-email-required' => 'E-postadress måste anges.',
 'prefs-info' => 'Grundläggande information',
 'prefs-i18n' => 'Internationalisering',
@@ -1741,14 +1750,26 @@ Om du väljer att ange ditt riktiga namn, kommer det att användas för att till
 'recentchanges-legend-heading' => "'''Teckenförklaring:'''",
 'recentchanges-legend-newpage' => '(se även [[Special:NewPages|listan över nya sidor]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "Nedan visas ändringar sedan '''$2''' (upp till '''$1''' visas).",
+'rcnotefrom' => 'Nedan visas ändringar sedan <strong>$2</strong> (upp till <strong>$1</strong> ändringar visas).',
 'rclistfrom' => 'Visa ändringar från och med $1',
 'rcshowhideminor' => '$1 mindre ändringar',
+'rcshowhideminor-show' => 'Visa',
+'rcshowhideminor-hide' => 'Dölj',
 'rcshowhidebots' => '$1 robotar',
+'rcshowhidebots-show' => 'Visa',
+'rcshowhidebots-hide' => 'Dölj',
 'rcshowhideliu' => '$1 registrerade användare',
+'rcshowhideliu-show' => 'Visa',
+'rcshowhideliu-hide' => 'Dölj',
 'rcshowhideanons' => '$1 oinloggade användare',
+'rcshowhideanons-show' => 'Visa',
+'rcshowhideanons-hide' => 'Dölj',
 'rcshowhidepatr' => '$1 patrullerade redigeringar',
+'rcshowhidepatr-show' => 'Visa',
+'rcshowhidepatr-hide' => 'Dölj',
 'rcshowhidemine' => '$1 mina ändringar',
+'rcshowhidemine-show' => 'Visa',
+'rcshowhidemine-hide' => 'Dölj',
 'rclinks' => 'Visa senaste $1 ändringar under de senaste $2 dygnen<br />$3',
 'diff' => 'skillnad',
 'hist' => 'historik',
@@ -1863,6 +1884,8 @@ Om du fortfarande vill ladda upp din fil, var god gå tillbaka och välj ett nyt
 Om du ändå vill ladda upp din fil, gå då tillbaka och använd ett annat namn. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Den här filen är en dubblett till följande {{PLURAL:$1|fil|filer}}:',
 'file-deleted-duplicate' => 'En identisk fil till den här filen ([[:$1]]) har tidigare raderats. Du bör kontrollera den filens raderingshistorik innan du fortsätter att återuppladda den.',
+'file-deleted-duplicate-notitle' => 'En identisk fil till den här filen har tidigare raderats och titeln har undanhållits.
+Du borde be någon som kan se undanhållen fildata att granska situationen innan du försöker ladda upp den.',
 'uploadwarning' => 'Uppladdningsvarning',
 'uploadwarning-text' => 'Var god och ändra filbeskrivningen nedanför och försök igen.',
 'savefile' => 'Spara fil',
@@ -1874,6 +1897,8 @@ Om du ändå vill ladda upp din fil, gå då tillbaka och använd ett annat namn
 'uploaddisabledtext' => 'Uppladdning av filer är avstängd.',
 'php-uploaddisabledtext' => 'PHP filuppladdningar är avaktiverade. Kolla inställningarna för file_uploads.',
 'uploadscripted' => 'Denna fil innehåller HTML eller script som felaktigt kan komma att tolkas av webbläsare.',
+'uploadscriptednamespace' => 'Denna SVG-fil innehåller den ogiltiga namnrymden "$1"',
+'uploadinvalidxml' => 'XML-koden i den uppladdade filen kunde inte tolkas.',
 'uploadvirus' => 'Filen innehåller virus! Detaljer: $1',
 'uploadjava' => 'Filen är en ZIP-fil som innehåller en Java .class fil.
 Uppladdning av Java filer tillåts inte, eftersom de kan orsaka att säkerhetsbegränsningar kan kringgås.',
@@ -2241,10 +2266,20 @@ Varje rad innehåller länkar till den första och andra omdirigeringsidan, samt
 'deadendpagestext' => 'Följande sidor saknar länkar till andra sidor på {{SITENAME}}.',
 'protectedpages' => 'Skyddade sidor',
 'protectedpages-indef' => 'Endast skydd på obestämd tid',
+'protectedpages-summary' => 'Denna sida listar befintliga sidor som för närvarande är skyddade. För en lista över titlar som skyddas från att skapas, se [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Endast kaskaderande skydd',
 'protectedpages-noredirect' => 'Dölj omdirigeringar',
 'protectedpagesempty' => 'Inga sidor är skyddade under de villkoren.',
+'protectedpages-timestamp' => 'Tidsstämpel',
+'protectedpages-page' => 'Sida',
+'protectedpages-expiry' => 'Upphör',
+'protectedpages-performer' => 'Skyddar användare',
+'protectedpages-params' => 'Skyddsparametrar',
+'protectedpages-reason' => 'Anledning',
+'protectedpages-unknown-timestamp' => 'Okänd',
+'protectedpages-unknown-performer' => 'Okänd användare',
 'protectedtitles' => 'Skyddade titlar',
+'protectedtitles-summary' => 'Denna sida listar de titlar som skyddas från att skapas. För en lista över befintliga sidor som är skyddade, se [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Just nu finns inga skyddade sidtitlar med de parametrarna.',
 'listusers' => 'Användarlista',
 'listusers-editsonly' => 'Visa endast användare som redigerat',
@@ -2272,7 +2307,7 @@ Observera att andra webbplatser kan länka direkt till en fil med en URL. Filer
 # Book sources
 'booksources' => 'Bokkällor',
 'booksources-search-legend' => 'Sök efter bokkällor',
-'booksources-go' => '',
+'booksources-go' => 'Visa',
 'booksources-text' => 'Nedan följer en lista över länkar till webbplatser som säljer nya och begagnade böcker, och som kanske har ytterligare information om de böcker du söker.',
 'booksources-invalid-isbn' => 'Det angivna ISBN-numret verkar inte vara giltigt. Kontrollera källan för eventuella fel.',
 
@@ -2516,7 +2551,8 @@ Se $2 för noteringar om de senaste raderingarna.',
 'delete-edit-reasonlist' => 'Redigera anledningar för radering',
 'delete-toobig' => 'Denna sida har en lång redigeringshistorik med mer än $1 {{PLURAL:$1|sidversion|sidversioner}}. Borttagning av sådana sidor har begränsats för att förhindra oavsiktliga driftstörningar på {{SITENAME}}.',
 'delete-warning-toobig' => 'Denna sida har en lång redigeringshistorik med mer än $1 {{PLURAL:$1|sidversion|sidversioner}}. Att radera sidan kan skapa problem med hanteringen av databasen på {{SITENAME}}; var försiktig.',
-'deleting-backlinks-warning' => "'''Varning:''' Andra sidor länkar till sidan som du är på väg att radera.",
+'deleting-backlinks-warning' => "'''Varning:'''
+[[Special:WhatLinksHere/{{FULLPAGENAME}}|Andra sidor]] länkar till eller inkluderar sidan som du är på väg att radera.",
 
 # Rollback
 'rollback' => 'Rulla tillbaka ändringar',
@@ -2660,7 +2696,7 @@ $1',
 
 # Namespace form on various pages
 'namespace' => 'Namnrymd:',
-'invert' => 'Uteslut vald namnrymd',
+'invert' => 'Invertera val',
 'tooltip-invert' => 'Markera denna ruta för att dölja ändringar på sidor inom det valda namnrymden (och tillhörande namnrymden om det är markerat)',
 'namespace_association' => 'Associerad namnrymd',
 'tooltip-namespace_association' => 'Markera denna ruta för att även inkludera diskussions- eller ämnesnamnrymden som är associerad med den valda namnrymden',
@@ -2690,8 +2726,10 @@ Orsaken till senaste blockeringen kan ses nedan:',
 'sp-contributions-blocked-notice-anon' => 'Denna IP-adress är för närvarande blockerad.
 Den senaste posten i blockeringsloggen visas nedan som referens:',
 'sp-contributions-search' => 'Sök efter användarbidrag',
+'sp-contributions-suppresslog' => 'undanhållna användarbidrag',
 'sp-contributions-username' => 'IP-adress eller användarnamn:',
 'sp-contributions-toponly' => 'Visa endast aktuella sidversioner',
+'sp-contributions-newonly' => 'Visa endast redigeringar där sidor skapas',
 'sp-contributions-submit' => 'Sök',
 
 # What links here
@@ -2769,7 +2807,7 @@ För att se alla aktuella blockeringar, gå till [[Special:BlockList|listan öve
 'blocklist-userblocks' => 'Göm kontoblockeringar',
 'blocklist-tempblocks' => 'Dölj tillfälliga blockeringar',
 'blocklist-addressblocks' => 'Göm enskilda IP-blockeringar',
-'blocklist-rangeblocks' => 'Göm intervallblokeringar',
+'blocklist-rangeblocks' => 'Göm intervallblockeringar',
 'blocklist-timestamp' => 'Tidsstämpel',
 'blocklist-target' => 'Mål',
 'blocklist-expiry' => 'Upphör',
@@ -2816,7 +2854,7 @@ Se [[Special:BlockList|blockeringslistan]] för en översikt av gällande blocke
 'range_block_disabled' => 'Möjligheten för administratörer att blockera intervall av IP-adresser har stängts av.',
 'ipb_expiry_invalid' => 'Ogiltig varaktighetstid.',
 'ipb_expiry_temp' => 'För att dölja användarnamnet måste blockeringen vara permanent.',
-'ipb_hide_invalid' => 'Kan inte undanhålla detta konto; det kan ha för många redigeringar.',
+'ipb_hide_invalid' => 'Kan inte undanhålla detta konto; det har fler än {{PLURAL:$1|en redigering|$1 redigeringar}}.',
 'ipb_already_blocked' => '"$1" är redan blockerad',
 'ipb-needreblock' => '$1 är redan blockerad. Vill du ändra inställningarna?',
 'ipb-otherblocks-header' => 'Andra {{PLURAL:$1|blockering|blockeringar}}',
@@ -2916,7 +2954,7 @@ Välj något annat namn istället.',
 'movesubpagetext' => 'Denna sida har $1 {{PLURAL:$1|undersida|undersidor}} som visas nedan.',
 'movenosubpage' => 'Denna sida har inga undersidor.',
 'movereason' => 'Anledning:',
-'revertmove' => 'flytta tillbaka',
+'revertmove' => 'återställ',
 'delete_and_move' => 'Radera och flytta',
 'delete_and_move_text' => '==Radering krävs==
 Den titel du vill flytta sidan till, "[[:$1]]", finns redan. Vill du radera den för att möjliggöra flytt av denna sida dit?',
@@ -3000,6 +3038,7 @@ $2',
 'thumbnail_image-type' => 'Bildtypen stöds inte',
 'thumbnail_gd-library' => 'Inkomplett GD library konfigurering: saknar funktionen $1',
 'thumbnail_image-missing' => 'Fil verkar saknas: $1',
+'thumbnail_image-failure-limit' => 'Det har nyligen förekommit alltför många misslyckade ($1 eller fler) försök skapa den här miniatyrbilden. Försök igen senare.',
 
 # Special:Import
 'import' => 'Importera sidor',
@@ -3035,7 +3074,7 @@ Spara den på din dator och ladda upp den här.',
 'importuploaderrortemp' => 'Uppladdningen av importfilen misslyckades. En temporär katalog saknas.',
 'import-parse-failure' => 'Tolkningsfel vid XML-import',
 'import-noarticle' => 'Inga sidor att importera!',
-'import-nonewrevisions' => 'Alla sidversioner hade importerats tidigare.',
+'import-nonewrevisions' => 'Inga sidversioner importerades (alla var antingen redan där eller hoppades över p.g.a. fel).',
 'xml-error-string' => '$1 på rad $2, kolumn $3 (byte $4): $5',
 'import-upload' => 'Ladda upp XML-data',
 'import-token-mismatch' => 'Sessionsdata har förlorats. Var god pröva igen.',
@@ -3046,6 +3085,7 @@ Spara den på din dator och ladda upp den här.',
 'import-error-special' => 'Sidan "$1" är inte importerad eftersom den tillhör en särskild namnrymd som inte tillåter sidor.',
 'import-error-invalid' => 'Sidan "$1" är inte importerad eftersom dess namn är ogiltigt.',
 'import-error-unserialize' => 'Versionen $2 av sidan "$1" kunde inte avserialiseras. Versionen rapporterades för att använda innehållsmodellen $3, som serialiserades som $4.',
+'import-error-bad-location' => 'Sidversionen $2 som använder innehållsmodellen $3 kan inte lagras på "$1" i denna wiki eftersom modellen inte stöds på den där sidan.',
 'import-options-wrong' => 'Fel {{PLURAL:$2|alternativ|alternativ}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Angiven grundsida är en ogiltig titel.',
 'import-rootpage-nosubpage' => 'Namnrymden "$1" till grundsidan tillåter inte undersidor.',
@@ -3101,12 +3141,12 @@ Vänligen använd förhandsgranskningsknappen innan du sparar.',
 'tooltip-n-currentevents' => 'Hitta bakgrundsinformation om aktuella händelser',
 'tooltip-n-recentchanges' => 'Lista över senaste ändringar i wikin',
 'tooltip-n-randompage' => 'Gå till en slumpmässigt vald sida',
-'tooltip-n-help' => 'Hjälp och information',
+'tooltip-n-help' => 'Platsen där du hittar hjälp',
 'tooltip-t-whatlinkshere' => 'Lista över alla wikisidor som länkar hit',
 'tooltip-t-recentchangeslinked' => 'Visa senaste ändringarna av sidor som den här sidan länkar till',
-'tooltip-feed-rss' => 'RSS-matning för den här sidan',
-'tooltip-feed-atom' => 'Atom-matning för den här sidan',
-'tooltip-t-contributions' => 'Visa lista över bidrag från den här användaren',
+'tooltip-feed-rss' => 'RSS-flöde för den här sidan',
+'tooltip-feed-atom' => 'Atom-flöde för den här sidan',
+'tooltip-t-contributions' => 'En lista över bidrag från den här användaren',
 'tooltip-t-emailuser' => 'Skicka e-post till den här användaren',
 'tooltip-t-upload' => 'Ladda upp filer',
 'tooltip-t-specialpages' => 'Lista över alla specialsidor',
@@ -3134,7 +3174,7 @@ Vänligen använd förhandsgranskningsknappen innan du sparar.',
 'tooltip-upload' => 'Starta uppladdning',
 'tooltip-rollback' => '"Tillbakarullning" tar med en knapptryckning bort ändringar som gjorts av den som senast redigerade sidan',
 'tooltip-undo' => '"Gör ogjord" återställer denna redigering och öppnar redigeringsrutan med förhandsgranskning.
-Ger möjlighet att skriva en motivering i redigeringssammanfattningen',
+Den ger möjlighet att skriva en motivering i redigeringssammanfattningen.',
 'tooltip-preferences-save' => 'Spara inställningar',
 'tooltip-summary' => 'Skriv en kort sammanfattning',
 'interlanguage-link-title' => '$1 - $2',
@@ -3926,7 +3966,7 @@ Du kan också [[Special:EditWatchlist|använda standardeditorn]].',
 
 # Core parser functions
 'unknown_extension_tag' => 'Okänd tagg "$1"',
-'duplicate-defaultsort' => 'Varning: Standardsorteringsnyckeln "$2" tar över från den tidigare standardsorteringsnyckeln "$1".',
+'duplicate-defaultsort' => '\'\'\'Varning:\'\'\' Standardsorteringsnyckeln "$2" tar över från den tidigare standardsorteringsnyckeln "$1".',
 
 # Special:Version
 'version' => 'Version',
@@ -4019,8 +4059,8 @@ Du bör ha fått [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopia av GNU General Publi
 
 # External image whitelist
 'external_image_whitelist' => '#Lämna den här raden precis som den är<pre>
-#Skriv fragment av reguljära uttryck (bara delen som ska vara mellan //) här nedan
-#Dessa kommer att jämföras med URL:er för externa (hotlinkade) bilder
+#Skriv fragment av reguljära uttryck (bara delen som ska vara mellan //) nedan
+#Dessa kommer att jämföras med URL:er för externa bilder
 #De som matchar kommer att visas som bilder, annars visas bara en länk till bilden
 #Rader som börjar med # behandlas som kommentarer
 #Detta är skiftläges-okänsligt
@@ -4173,6 +4213,7 @@ Annars kan du använda det enkla formuläret nedan. Din kommentar kommer att lä
 '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-stasherror' => 'Ett fel uppstod under uppladdningen av filen till mellanlagringsfilen.',
 '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"',
@@ -4226,7 +4267,4 @@ Annars kan du använda det enkla formuläret nedan. Din kommentar kommer att lä
 'expand_templates_generate_rawhtml' => 'Visa rå HTML',
 'expand_templates_preview' => 'Förhandsvisning',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
-'uploadinvalidxml' => 'XML-koden i den uppladdade filen kunde inte tolkas.',
 );
index f8943f6..1c6d68a 100644 (file)
@@ -160,7 +160,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Nitumie nakala ya barua pepe nitakazo tuma kwa watumiaji wengine',
 'tog-diffonly' => 'Usionyeshe yaliyomo kwenye ukurasa chini ya faili za diff',
 'tog-showhiddencats' => 'Onyesha jamii zilizofichwa',
-'tog-noconvertlink' => 'Lemaza kiungo cha jina la badiliko',
 'tog-norollbackdiff' => 'Ondoa faili za diff baada ya kufanyakazi ya kurejesha',
 'tog-useeditwarning' => 'Unionyeshe ilani ninapotaka kutoka kwenye ukurasa ninouhariri, bila kuhifadhi mabadiliko',
 
@@ -285,7 +284,6 @@ $messages = array(
 'vector-action-protect' => 'Linda',
 'vector-action-undelete' => 'Rudisha',
 'vector-action-unprotect' => 'Badilisha ulinzi',
-'vector-simplesearch-preference' => 'Kuwezesha madokezo imara ya tafutaji (umbo la Vector tu)',
 'vector-view-create' => 'Anzisha',
 'vector-view-edit' => 'Hariri',
 'vector-view-history' => 'Fungua historia',
@@ -979,8 +977,6 @@ Unaweza masasisho; maelezo mengine yapo kwenye [{{fullurl:{{#Special:Log}}/delet
 'revdelete-show-file-submit' => 'Ndiyo',
 'revdelete-selected' => "'''{{PLURAL:$2|Pitio lililoteuliwa|Mapitio yaliyoteuliwa}} ya [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Tukio la kumbukumbu lililoteuliwa|Matukio ya kumbukumbu yaliyoteuliwa}}:'''",
-'revdelete-text' => "'''Mapitio bado yataonekana kwenye ukurasa wa historia na matukio bado yataonekana kwenye kumbukumbu, lakini baadhi ya yaliyomo haitaonekana mbele ya watu wote.'''
-Wakabidhi wengine wa {{SITENAME}} bado wataweza kuliona lile lililofichwa pamoja na kulirudisha kwa kuutumia ukurasa maalum huu huu, isipowekewa vizuio vingine.",
 'revdelete-confirm' => 'Tafadhali uthibitishe kwamba unataka kufanya hivyo, pamoja na kwamba unaelewa matokeo yake, na unafanya hivyo kutokana na [[{{MediaWiki:Policy-url}}|sera yetu]].',
 'revdelete-suppress-text' => "Kuficha kunaruhisiwa '''tu''' wakati hizo:
 * Taarifa zinazowezekana kwamba ni za kukashifu
index d012453..20ba16f 100644 (file)
@@ -226,7 +226,6 @@ $messages = array(
 'vector-action-protect' => 'Zawrzij',
 'vector-action-undelete' => 'Wćep',
 'vector-action-unprotect' => 'Uodymkńij',
-'vector-simplesearch-preference' => 'Używej zaawansowane podpowjedźi sznupańo (ino lo skůrki Wektor)',
 'vector-view-create' => 'Stwůrz',
 'vector-view-edit' => 'Sprowjej',
 'vector-view-history' => 'Uobocz gyszichta',
@@ -498,8 +497,6 @@ Pamjyntej coby posztalować [[Special:Preferences|preferencyji]]',
 'gotaccountlink' => 'Naloguj śe',
 'userlogin-resetlink' => 'Zapomńoł żeś dane lo nalogowańo?',
 'userlogin-resetpassword-link' => 'Ńy pamjyntosz hasła?',
-'helplogin-url' => 'Help:Logowańy',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hilfa ze logowańym]]',
 'userlogin-loggedin' => 'Zalogowano kej {{GENDER:$1|$1}}. Użyj formulara půńiżyj, coby zalogować śe kej inkszy używocz.',
 'userlogin-createanother' => 'Twůrz inksze kůnto',
 'createacct-join' => 'Wszkryflej půńiżyj swoje dane.',
@@ -886,9 +883,6 @@ Powody wyćepańo idźe znejść we [{{fullurl:{{#Special:Log}}/suppress|page={{
 'revdelete-show-file-submit' => 'Ja',
 'revdelete-selected' => "'''{{PLURAL:$2|Wybrano wersyjo|Wybrane wersyje}} zajty [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Wybrane zdarzyńy ze rejeru|Wybrane zdarzyńa ze rejeru}}:'''",
-'revdelete-text' => "'''Wyćepane wersyje bydům dali widoczne w historyji zajty, nale jejich treść ńy bydźe publiczńy dostympna.'''
-
-Inkśi admińistratorzi {{GRAMMAR:D.lp|{{SITENAME}}}} dali bydům mjeć dostymp do schrůńůnych wersyji a bydům můgli je wćepać nazod, chyba aże uoperator serwisu nouożůł dodatkowe uograńiczyńo.",
 'revdelete-legend' => 'Naštaluj uograńičyńo lo wersyji:',
 'revdelete-hide-text' => 'Schrůń tekst wersyji',
 'revdelete-hide-image' => 'Schrůń zawartość plika',
index 7d19b8c..fa2c3c2 100644 (file)
@@ -249,7 +249,6 @@ $messages = array(
 'vector-action-protect' => 'காக்கவும்',
 'vector-action-undelete' => 'நீக்கத்தை நிறுத்து',
 'vector-action-unprotect' => 'காப்பை மாற்று',
-'vector-simplesearch-preference' => 'எளிதாக்கப்பட்ட தேடுதல் பட்டையை செயற்படுத்தவும் (வெக்டர் தோல் மட்டும்)',
 'vector-view-create' => 'உருவாக்கவும்',
 'vector-view-edit' => 'தொகு',
 'vector-view-history' => 'வரலாற்றைக் காட்டவும்',
@@ -518,8 +517,6 @@ $1',
 'gotaccountlink' => 'புகுபதிகை',
 'userlogin-resetlink' => 'உங்கள் புகுபதிகைக் குறிப்புகளை மறந்துவிட்டீர்களா?',
 'userlogin-resetpassword-link' => 'உங்கள் கடவுச் சொல்லை மறந்து விட்டீர்களா?',
-'helplogin-url' => 'Help:புகுபதிகை',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|புகுபதிவதற்கான உதவி]]',
 'userlogin-createanother' => 'மற்றொரு கணக்கு ஒன்றை உருவாக்கவும்',
 'createacct-join' => 'உங்களின் தகவலை கீழிடவும்',
 'createacct-another-join' => 'கீழே புதிய கணக்கிற்கான தகவல்களை உள்ளிடவும்.',
@@ -606,6 +603,9 @@ $1',
 'suspicious-userlogout' => 'உங்கள் விடுபதிகை கோரிக்கை மறுக்கப்பட்டது ஏனென்றால் அது அறுபட்ட உலாவி அல்லது மாற்று இடைக்கிடங்கியால் அனுப்பப்பட்டுள்ளது.',
 'createacct-another-realname-tip' => 'உண்மையான பெயர் கட்டாயமற்றது.
 நீங்கள் இதை கொடுத்தால் உங்கள் ஆக்கங்களுக்கான உரிமையளிப்புகளின் போது இது பயன்படும்.',
+'pt-login' => 'புகுபதிகை',
+'pt-createaccount' => 'புதிய கணக்கை உருவாக்கவும்',
+'pt-userlogout' => 'விடுபதிகை',
 
 # Email sending
 'php-mail-error-unknown' => "PHP 's mail() செயல்பாட்டில் அறியப்படாத பிழை.",
@@ -614,7 +614,7 @@ $1',
 
 # Change password dialog
 'changepassword' => 'கடவுச்சொல்லை மாற்று',
-'resetpass_announce' => 'நà¯\80à®\99à¯\8dà®\95ளà¯\8d à®¤à®±à¯\8dà®\95ாலிà®\95 à®®à®¿à®©à¯\8dனà®\9eà¯\8dà®\9aலà¯\8d à®\95à¯\81றியà¯\80à®\9fà¯\8dà®\9fà¯\81à®\9fனà¯\8d à®ªà¯\81à®\95à¯\81பதிà®\95à¯\88 à®\9aà¯\86யà¯\8dதà¯\81ளà¯\8dளà¯\80à®°à¯\8dà®\95ளà¯\8d. à®ªà¯\81à®\95à¯\81பதிà®\95à¯\88யà¯\88 à®¨à®¿à®±à¯\88வà¯\81à®\9aà¯\8d à®\9aà¯\86யà¯\8dய à®ªà¯\81தியà®\95à¯\8d à®\95à®\9fவà¯\81à®\9aà¯\8d à®\9aà¯\8aலà¯\8dலà¯\8aனà¯\8dà®±à¯\88 à®\87à®\99à¯\8dà®\95à¯\87 à®¤à®\9fà¯\8dà®\9fà®\9aிà®\9fà¯\81à®\95:',
+'resetpass_announce' => 'பà¯\81à®\95à¯\81பதிà®\95à¯\88யà¯\88 à®¨à®¿à®±à¯\88வà¯\81à®\9aà¯\8d à®\9aà¯\86யà¯\8dய à®ªà¯\81தியà®\95à¯\8d à®\95à®\9fவà¯\81à®\9aà¯\8d à®\9aà¯\8aலà¯\8dலà¯\8aனà¯\8dà®±à¯\88 à®¤à¯\87à®°à¯\8dவà¯\81 à®\9aà¯\86யà¯\8dயவà¯\87ணà¯\8dà®\9fà¯\81à®®à¯\8d.',
 'resetpass_header' => 'கணக்கிற்கான கடவுச்சொல்லை மாற்றியமை',
 'oldpassword' => 'பழைய கடவுச்சொல்:',
 'newpassword' => 'புதிய கடவுச்சொல்:',
@@ -628,6 +628,7 @@ $1',
 'resetpass-wrong-oldpass' => 'செல்லுபடியற்ற தற்காலிகமான அல்லது நடப்புக் கடவுச்சொல்.
 உங்கள் கடவுச் சொல்லை நீங்கள் வெற்றிகரமாக மாற்றிவிட்டீர்கள் அல்லது புதிய தற்காலிகக் கடவுச்சொல்லைக் கோரியுள்ளீர்கள்.',
 'resetpass-temp-password' => 'தற்காலிக கடவுச்சொல்:',
+'resetpass-expired' => 'உங்கள் கடவுச்சொல் காலாவதியாகிவிட்டது. உள்நுழைய ஒரு புதிய கடவுச்சொல்லை தெரிவுசெய்யவும்.',
 
 # Special:PasswordReset
 'passwordreset' => 'கடவுச்சொல்லை மீட்டமை',
@@ -973,9 +974,6 @@ $1 எனும் பயனரையோ வேறு [[{{MediaWiki:Grouppage-sy
 'revdelete-show-file-submit' => 'ஆம்',
 'revdelete-selected' => "'''[[:$1]] பக்கத்தின் தெரிவுச் செய்யப்பட்ட {{PLURAL:$2|திருத்தம்|திருத்தங்கள்}}:'''",
 'logdelete-selected' => "'''தெரிவு செய்யப்பட்ட பதிகை {{PLURAL:$1|நிகழ்வு|நிகழ்வுகள்}}:'''",
-'revdelete-text' => "'''நீக்கப்பட்ட நிகழ்வுகள் மற்றும் திருத்தங்கள், வரலாற்றுப் பக்கத்திலும் குறிப்புகளிலும் தெரியும். ஆனால் அவற்றின் உள்ளடக்கத்தை எல்லோரும் பார்க்கமுடியாது.'''
-
-மேலதிக கட்டுப்பாடுகளை விதிக்காமல் இருந்தால்,  {{SITENAME}} இத்தளத்தில் உள்ள மற்ற நிர்வாகிகள், இந்த இணைப்பின் மூலம்,  மறைந்துள்ள பகுதிகளை அணுகவும் மீட்டெடுக்கவும் முடியும்.",
 'revdelete-confirm' => 'நீங்கள் கண்டிப்பாக இதைச் செய்ய விரும்புகிறீர்கள் என்பதையும்,  இதன் விளைவுகளை புரிந்துகொண்டிருக்கின்றீர்கள் என்பதையும், மேலும் நீங்கள் [[{{MediaWiki:Policy-url}}|செயல் திட்டம்]] படி செய்கிறீர்கள் என்பதையும் உறுதிசெயுங்கள்.',
 'revdelete-suppress-text' => "ஒடுக்கப்படுவது கீழ்காணும் '''காரணங்களுக்காக''' மட்டுமே செய்யப்படும்.
 *அவதூறான தீங்கு விளைவிக்கக்கூடிய தகவல்
@@ -2271,6 +2269,7 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'இந்த IP முகவரி தற்போது தடுக்கப்பட்டுள்ளது.
 சமீபத்திய தடுப்பு குறிப்பேடு  கீழே குறிப்பிற்காக வழங்கப்பட்டுள்ளது :',
 'sp-contributions-search' => 'பங்களிப்புகளைத் தேடு',
+'sp-contributions-suppresslog' => 'பயனரின் நீக்கப்பட்ட பங்களிப்புகள்',
 'sp-contributions-username' => 'ஐ.பி. அல்லது பயனர் பெயர்:',
 'sp-contributions-toponly' => 'சமீபத்திய பரிசீலனைகளுக்குட்பட்ட  திருத்தங்களை மட்டும் காண்பி',
 'sp-contributions-submit' => 'தேடுக',
index 8009328..6027b74 100644 (file)
@@ -17,16 +17,13 @@ $fallback = 'kn';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'ಲಿಂಕ್’ಲೆದ ತಿರ್ತ್ ಗೆರೆ(ಅಂಡರ್ ಲೈನ್) ಪಾಡ್’ಲೆ',
-'tog-justify' => 'ಪಾರಗ್ರಾಫ್’ದ ಕಡೆನ್ ಸರಿ ಮಲ್ಪುಲೆ',
 'tog-hideminor' => 'ಎಲ್ಯೆಲ್ಯ ಬದಲಾವಣೆಲೆನ್ ದೆಂಗಾಲೆ',
 'tog-extendwatchlist' => 'ಅನ್ವಯಿಸುನಂಚಿನ ಪೂರಾ ಬದಲಾವಣೆಲೆನ್ ತೊಜ್ಪಾಯೆರೆ ಪಟ್ಟಿನ್(ವಾಚ್ ಲಿಸ್ಟ್) ಬುಡ್ಪಾಲೆ.',
 'tog-usenewrc' => 'ಪರಿಷ್ಕರಿಸ್ ನ ಬದಲಾವಣೆಲು (JavaScript)',
 'tog-numberheadings' => 'ಹೆಡ್ಡಿಂಗ್’ಲೆಗ್ ಸಂಖ್ಯೆಲೆನ್ ತೊಜ್ಪಾಲೆ',
 'tog-showtoolbar' => 'ಸಂಪಾದನೆದ ಉಪಕರಣನ್(ಎಡಿಟ್ ಟೂಲ್ ಬಾರ್) ತೊಜ್ಪಾಲೆ (JavaScript)',
 'tog-editondblclick' => 'ರಡ್ಡ್ ಸರಿ ಕ್ಲಿಕ್ ಮಲ್ತ್’ದ್ ಪುಟೊನು ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ (JavaScript)',
-'tog-editsection' => 'ಪುಟೊತ ಭಾಗಲೊನ್ [ಸಂಪಾದನೆ] ಲಿಂಕ್’ಲೆನ್ ಒತ್ತ್’ದ್ ಬದಲ್ ಮನ್ಪುಲೆಕ ಉಪ್ಪಡ್',
 'tog-editsectiononrightclick' => 'ಪುಟೊತ ವಿಭಾಗೊಲೆನ್ ಐತ ಹೆಡ್ಡಿಂಗ್’ನ್ ರೈಟ್ ಕ್ಲಿಕ್ ಮಲ್ತ್’ದ್ ಸಂಪಾದನೆ ಮಲ್ಪುಲೆಕ ಉಪ್ಪಡ್ (JavaScript)',
-'tog-showtoc' => 'ಪರಿವಿಡಿನ್(ಟೇಬಲ್ ಆಫ್ ಕಂಟೆಂಟ್ಸ್) ತೊಜ್ಪಾಲೆ (ಮೂಜೆರ್ದ್ ಜಾಸ್ತಿ ಹೆಡ್ಡಿಂಗ್ ಉಪ್ಪುನಂಚಿನ ಪುಟೊಲೆಗ್)',
 'tog-rememberpassword' => 'ಈ ಕಂಪ್ಯೂಟರ್’ಡ್ ಎನ್ನ ಲಾಗಿನ್ನ್ ನೆನಪುಡು ದೀಲ (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'tog-watchcreations' => 'ಯಾನ್ ಶುರು ಮಲ್ತಿನ ಪುಟೊಲೆನ್ ಯೆನ್ನ ವೀಕ್ಷಣಾಪಟ್ಟಿಗ್ ಸೇರ್ಪಾಲೆ',
 'tog-watchdefault' => 'ಯಾನ್ ಸಂಪಾದನೆ ಮನ್ಪುನಂಚಿನ ಪುಟೊಲೆನ್ ವೀಕ್ಷಣಾಪಟ್ಟಿಗ್ ಸೇರ್ಪಾಲೆ',
@@ -162,7 +159,6 @@ $messages = array(
 'vector-action-protect' => 'ಸ೦ರಕ್ಷಿಸಾಲೆ',
 'vector-action-undelete' => 'ಮಾಜಾವಡೆ',
 'vector-action-unprotect' => 'ಬದಲಾವಣೆನ್ ರಕ್ಷಿಸಾಲೆ',
-'vector-simplesearch-preference' => 'ಬಲಗೊಳಿಸಾನ ಹುಡುಕು ಸಲಹೆಲೆನ್ ಸಕ್ರಿಯಗೊಳಿಸಾಲೆ',
 'vector-view-create' => ' ಸುರು ಮಲ್ಪುಲೆ',
 'vector-view-edit' => 'ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ',
 'vector-view-history' => 'ಇತಿಹಾಸೊನು ತೂಲೆ',
index e726387..98bea0e 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Arjunaraoc
+ * @author Ashokjayanti
  * @author Chaduvari
  * @author Jprmvnvijay5
  * @author Kaganer
@@ -148,22 +149,22 @@ $messages = array(
 'tog-hidepatrolled' => 'ఇటీవలి మార్పులలో నిఘా ఉన్న మార్పులను దాచు',
 'tog-newpageshidepatrolled' => 'కొత్త పేజీల జాబితా నుంచి నిఘా ఉన్న పేజీలను దాచు',
 'tog-extendwatchlist' => 'కేవలం ఇటీవలి మార్పులే కాక, మార్పులన్నీ చూపించటానికి నా వీక్షణా జాబితాను పెద్దది చేయి',
-'tog-usenewrc' => 'à°\87à°\9fà±\80వలి à°®à°¾à°°à±\8dà°ªà±\81à°²à±\81 à°®à°°à°¿à°¯à±\81 à°µà±\80à°\95à±\8dà°·à°£ à°\9cాబితాలలà±\8b à°®à°¾à°°à±\8dà°ªà±\81లనà±\81 à°ªà±\87à°\9cà±\80 à°µà°¾à°°à°¿గా చూపించు',
+'tog-usenewrc' => 'à°\87à°\9fà±\80వలి à°®à°¾à°°à±\8dà°ªà±\81à°²à±\81 à°®à°°à°¿à°¯à±\81 à°µà±\80à°\95à±\8dà°·à°£ à°\9cాబితాలలà±\8b à°®à°¾à°°à±\8dà°ªà±\81లనà±\81 à°ªà±\87à°\9cà±\80 à°µà°¾à°°à±\80గా చూపించు',
 'tog-numberheadings' => 'శీర్షికలకు అప్రమేయంగా వరుస సంఖ్యలు చేర్చు',
 'tog-showtoolbar' => 'దిద్దుబాటు పనిముట్ల పట్టీని చూపించు',
 'tog-editondblclick' => 'డబుల్‌ క్లిక్కు చేసినప్పుడు పేజీని మార్చు',
-'tog-editsectiononrightclick' => 'విభాగాల శీర్షికల మీద కుడినొక్కుతో విభాగపు దిద్దుబాటును చేతనంచేయి',
-'tog-rememberpassword' => 'ఈ విహారిణిలో నా ప్రవేశాన్ని గుర్తుంచుకో (గరిష్ఠంగా $1 {{PLURAL:$1|రోజు|రోజుల}}కి)',
+'tog-editsectiononrightclick' => 'విభాగాల శీర్షికల మీద కుడినొక్కుతో విభాగపు దిద్దుబాటును చేతనం చేయి',
+'tog-rememberpassword' => 'ఈ విహారిణిలో నా ప్రవేశాన్ని (గరిష్ఠంగా $1 {{PLURAL:$1|రోజు|రోజుల}} పాటు) గుర్తుంచుకో',
 'tog-watchcreations' => 'నేను సృష్టించే పేజీలను మరియు దస్త్రాలను నా వీక్షణ జాబితాకు చేర్చు',
 'tog-watchdefault' => 'నేను మార్చే పేజీలను మరియు దస్త్రాలను నా వీక్షణ జాబితాకు చేర్చు',
 'tog-watchmoves' => 'నేను తరలించిన పేజీలను మరియు దస్త్రాలను నా వీక్షణ జాబితాకు చేర్చు',
 'tog-watchdeletion' => 'నేను తొలగించిన పేజీలను మరియు దస్త్రాలను నా వీక్షణ జాబితాకు చేర్చు',
-'tog-minordefault' => 'à°ªà±\8dà°°à°¤à±\8dà°¯à±\87à°\95à°\82à°\97à°¾ à°¤à±\86à°²à±\81పనà°\82తవరà°\95à±\82 నా మార్పులను చిన్న మార్పులుగా గుర్తించు',
-'tog-previewontop' => 'వ్యాసం మార్పుల మునుచూపు సవరించు పెట్టె పైన చూపు',
+'tog-minordefault' => 'డిఫాలà±\8dà°\9fà±\81à°\97à°¾ నా మార్పులను చిన్న మార్పులుగా గుర్తించు',
+'tog-previewontop' => 'వ్యాసం మార్పుల మునుచూపును ఎడిట్ పెట్టె పైన చూపు',
 'tog-previewonfirst' => 'మొదటి  దిద్దుబాటు చేసినపుడు వ్యాసపు మునుచూపు చూపించు',
 'tog-enotifwatchlistpages' => 'నా వీక్షణాజాబితా లోని పేజీ లేదా దస్త్రం మారినపుడు నాకు ఈ-మెయిలు పంపు',
 'tog-enotifusertalkpages' => 'నా చర్చా పేజీలో మార్పులు జరిగినపుడు నాకు ఈ-మెయిలు పంపు',
-'tog-enotifminoredits' => 'à°ªà±\87à°\9cà±\80à°²à±\81 à°®à°°à°¿à°¯à±\81 à°¦à°¸à±\8dà°¤à±\8dరాలà°\95à±\81 జరిగే చిన్న మార్పులకు కూడా నాకు ఈ-మెయిలును పంపు',
+'tog-enotifminoredits' => 'à°ªà±\87à°\9cà±\80à°²à±\81 à°®à°°à°¿à°¯à±\81 à°¦à°¸à±\8dà°¤à±\8dరాలలà±\8b జరిగే చిన్న మార్పులకు కూడా నాకు ఈ-మెయిలును పంపు',
 'tog-enotifrevealaddr' => 'గమనింపు మెయిళ్ళలో నా ఈ-మెయిలు చిరునామాను చూపించు',
 'tog-shownumberswatching' => 'వీక్షకుల సంఖ్యను చూపు',
 'tog-oldsig' => 'ప్రస్తుత సంతకం:',
@@ -173,11 +174,11 @@ $messages = array(
 'tog-watchlisthideown' => 'నా మార్పులను వీక్షణా జాబితాలో చూపించొద్దు',
 'tog-watchlisthidebots' => 'బాట్లు చేసిన మార్పులను నా వీక్షణా జాబితాలో చూపించొద్దు',
 'tog-watchlisthideminor' => 'చిన్న మార్పులను నా వీక్షణా జాబితాలో చూపించొద్దు',
-'tog-watchlisthideliu' => 'à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aà°¿à°¨ à°µà°¾à°¡à±\81à°\95à°°à±\81à°² మార్పులను వీక్షణా జాబితాలో చూపించకు',
-'tog-watchlisthideanons' => 'à°\85à°\9cà±\8dà°\9eాత à°µà°¾à°¡à±\81à°\95à°°à±\81à°² à°®à°¾à°°à±\8dà°ªà±\81లనà±\81 à°µà°¿క్షణా జాబితాలో చూపించకు',
+'tog-watchlisthideliu' => 'లాà°\97à°¿à°¨à±\8d à°\90à°¨ à°µà°¾à°¡à±\81à°\95à°°à±\81à°²à±\81 à°\9aà±\87à°¸à±\87 మార్పులను వీక్షణా జాబితాలో చూపించకు',
+'tog-watchlisthideanons' => 'à°\85à°\9cà±\8dà°\9eాత à°µà°¾à°¡à±\81à°\95à°°à±\81à°² à°®à°¾à°°à±\8dà°ªà±\81లనà±\81 à°µà±\80క్షణా జాబితాలో చూపించకు',
 'tog-watchlisthidepatrolled' => 'నిఘా ఉన్న మార్పులను వీక్షణజాబితా నుంచి దాచిపెట్టు',
 'tog-ccmeonemails' => 'నేను ఇతర వాడుకరులకు పంపించే ఈ-మెయిళ్ల కాపీలను నాకు కూడా పంపు',
-'tog-diffonly' => 'తేడాలను చూపిస్తున్నపుడు, కింద చూపించే పేజీలోని సమాచారాన్ని చూపించొద్దు',
+'tog-diffonly' => 'తేడాల కింద, పేజీలోని సమాచారాన్ని చూపించొద్దు',
 'tog-showhiddencats' => 'దాచిన వర్గాలను చూపించు',
 'tog-norollbackdiff' => 'రద్దు చేసాక తేడాలు చూపించవద్దు',
 'tog-useeditwarning' => 'ఏదైనా పేజీని నేను వదిలివెళ్తున్నప్పుడు దానిలో భద్రపరచని మార్పులు ఉంటే నన్ను హెచ్చరించు',
@@ -185,12 +186,12 @@ $messages = array(
 
 'underline-always' => 'ఎల్లప్పుడూ',
 'underline-never' => 'ఎప్పటికీ వద్దు',
-'underline-default' => 'à°\85à°²à°\82à°\95ారపà±\81 à°²à±\87దా à°µà°¿à°¹à°¾à°°à°¿à°£à°¿ అప్రమేయం',
+'underline-default' => 'à°°à±\82à°ªà±\81 à°¯à±\8aà°\95à±\8dà°\95 à°²à±\87దా à°µà°¿à°¹à°¾à°°à°¿à°£à°¿ à°¯à±\8aà°\95à±\8dà°\95 అప్రమేయం',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'దిద్దుబాటు పెట్టె ఫాంటు శైలి:',
 'editfont-default' => 'విహరిణి అప్రమేయం',
-'editfont-monospace' => 'à°®à±\8bà°¨à±\8bà°¸à±\8dà°ªà±\87à°¸à±\81డ్ ఫాంట్',
+'editfont-monospace' => 'à°®à±\8bà°¨à±\8bà°¸à±\8dà°ªà±\87à°¸à±\8dâ\80\8dడ్ ఫాంట్',
 'editfont-sansserif' => 'సాన్స్-సెరిఫ్ ఫాంటు',
 'editfont-serif' => 'సెరిఫ్ ఫాంటు',
 
@@ -228,7 +229,7 @@ $messages = array(
 'may-gen' => 'మే',
 'june-gen' => 'జూన్',
 'july-gen' => 'జూలై',
-'august-gen' => 'à°\86à°\97à°·్టు',
+'august-gen' => 'à°\86à°\97à°¸్టు',
 'september-gen' => 'సెప్టెంబరు',
 'october-gen' => 'అక్టోబరు',
 'november-gen' => 'నవంబరు',
@@ -253,25 +254,25 @@ $messages = array(
 'june-date' => 'జూన్ $1',
 'july-date' => 'జూలై $1',
 'august-date' => 'ఆగస్టు $1',
-'september-date' => 'à°¸à±\86à°ªà±\8dà°\9fà±\86à°\82బరà±\8d $1',
-'october-date' => 'à°\85à°\95à±\8dà°\9fà±\8bబరà±\8d $1',
-'november-date' => 'నవà°\82బరà±\8d $1',
-'december-date' => 'à°¡à°¿à°¸à±\86à°\82బరà±\8d $1',
+'september-date' => 'à°¸à±\86à°ªà±\8dà°\9fà±\86à°\82బరà±\81 $1',
+'october-date' => 'à°\85à°\95à±\8dà°\9fà±\8bబరà±\81 $1',
+'november-date' => 'నవà°\82బరà±\81 $1',
+'december-date' => 'à°¡à°¿à°¸à±\86à°\82బరà±\81 $1',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|వర్గం|వర్గాలు}}',
 'category_header' => '"$1" వర్గంలోని పుటలు',
 'subcategories' => 'ఉపవర్గాలు',
-'category-media-header' => '"$1" వర్గంలో ఉన్న మీడియా ఫైళ్లు',
-'category-empty' => "''ప్రస్తుతం ఈ వర్గంలో ఎలాంటి పేజీలుగానీ మీడియా ఫైళ్లుగానీ లేవు.''",
+'category-media-header' => '"$1" వర్గంలో ఉన్న మీడియా',
+'category-empty' => '<em>ప్రస్తుతం ఈ వర్గంలో ఎలాంటి పేజీలుగానీ మీడియాగానీ లేవు.</em>',
 'hidden-categories' => '{{PLURAL:$1|దాచిన వర్గం|దాచిన వర్గాలు}}',
 'hidden-category-category' => 'దాచిన వర్గాలు',
-'category-subcat-count' => '{{PLURAL:$2|à°\88 à°µà°°à±\8dà°\97à°\82à°²à±\8b à°\95à±\8dà°°à°¿à°\82à°¦ à°\9aà±\82పిసà±\8dà°¤à±\81à°¨à±\8dà°¨ à°\92à°\95à±\87 à°\89పవరà±\8dà°\97à°\82 à°\89à°\82ది.|à°\88 à°µà°°à±\8dà°\97à°\82à°²à±\8b à°\89à°¨à±\8dà°¨ à°®à±\8aà°¤à±\8dà°¤à°\82 $2 à°µà°°à±\8dà°\97ాలలà±\8b à°ªà±\8dà°°à°¸à±\8dà°¤à±\81à°¤à°\82 {{PLURAL:$1|à°\92à°\95 à°\89పవరà±\8dà°\97ానà±\8dని|$1 à°\89పవరà±\8dà°\97ాలనà±\81}} à°\9aà±\82పిసà±\8dà°¤à±\81à°¨à±\8dనామà±\81.}}',
-'category-subcat-count-limited' => 'ఈ వర్గం క్రింద చూపిస్తున్న {{PLURAL:$1|ఒక ఉపవర్గం ఉంది|$1 ఉపవర్గాలు ఉన్నాయి}}.',
-'category-article-count' => '{{PLURAL:$2|à°\88 à°µà°°à±\8dà°\97à°\82à°²à±\8b à°\95à±\8dà°°à°¿à°\82à°¦ à°\9aà±\82పిసà±\8dà°¤à±\81à°¨à±\8dà°¨ à°\92à°\95à±\87 à°ªà±\87à°\9cà±\80 à°\89à°\82ది.|à°\88 à°µà°°à±\8dà°\97à°\82à°²à±\8b à°\89à°¨à±\8dà°¨ à°®à±\8aà°¤à±\8dà°¤à°\82 $2 à°ªà±\87à°\9cà±\80లలà±\8b à°ªà±\8dà°°à°¸à±\8dà°¤à±\81à°¤à°\82 {{PLURAL:$1|à°\92à°\95 à°ªà±\87à°\9cà±\80ని|$1 à°ªà±\87à°\9cà±\80లనà±\81}} à°\9aà±\82పిసà±\8dà°¤à±\81à°¨à±\8dనామà±\81.}}',
-'category-article-count-limited' => 'à°\88 à°µà°°à±\8dà°\97à°\82 à°\95à±\8dà°°à°¿à°\82à°¦ à°\9aà±\82పిసà±\8dà°¤à±\81à°¨à±\8dà°¨ {{PLURAL:$1|à°\92à°\95 à°ªà±\87à°\9cà±\80 à°\89à°\82ది|$1 à°ªà±\87à°\9cà±\80à°²à±\81 à°\89న్నాయి}}.',
+'category-subcat-count' => '{{PLURAL:$2|à°\88 à°µà°°à±\8dà°\97à°\82à°²à±\8b à°\95à°¿à°\82à°¦ à°\9aà±\82పిన à°\92à°\95à±\87 à°\89పవరà±\8dà°\97à°\82 à°\89à°\82ది.|à°\88 à°µà°°à±\8dà°\97à°\82à°²à±\8b à°\95à°¿à°\82ది {{PLURAL:$1|à°\89పవరà±\8dà°\97à°\82 à°\89à°\82ది|$1 à°\89పవరà±\8dà°\97ాలà±\81 à°\89à°¨à±\8dనాయి}}, à°®à±\8aà°¤à±\8dà°¤à°\82 $2 à°²à±\8b.}}',
+'category-subcat-count-limited' => 'ఈ వర్గంలో కింది {{PLURAL:$1|ఉపవర్గం ఉంది|$1 ఉపవర్గాలు ఉన్నాయి}}.',
+'category-article-count' => '{{PLURAL:$2|à°\88 à°µà°°à±\8dà°\97à°\82à°²à±\8b à°\95à°¿à°\82ది à°ªà±\87à°\9cà±\80 à°\92à°\95à°\9fà±\87 à°\89à°\82ది.|à°\88 à°µà°°à±\8dà°\97à°\82à°²à±\8b à°\95à°¿à°\82ది {{PLURAL:$1|à°ªà±\87à°\9cà±\80 à°\89à°\82ది|$1 à°ªà±\87à°\9cà±\80à°²à±\81à°¨à±\8dనాయి}}, à°®à±\8aà°¤à±\8dà°¤à°\82 $2 à°ªà±\87à°\9cà±\80లలà±\8b.}}',
+'category-article-count-limited' => 'à°ªà±\8dà°°à°¸à±\8dà°¤à±\81à°¤ à°µà°°à±\8dà°\97à°\82à°²à±\8b à°\95à°¿à°\82ది {{PLURAL:$1|à°ªà±\87à°\9cà±\80 à°\89à°\82ది|$1 à°ªà±\87à°\9cà±\80à°²à±\81న్నాయి}}.',
 'category-file-count' => '{{PLURAL:$2|ఈ వర్గంలో క్రింద చూపిస్తున్న ఒకే ఫైలు ఉంది.|ఈ వర్గంలో ఉన్న మొత్తం $2 పేజీలలో ప్రస్తుతం {{PLURAL:$1|ఒక ఫైలును|$1 ఫైళ్లను}} చూపిస్తున్నాము.}}',
-'category-file-count-limited' => 'ఈ వర్గం క్రింద చూపిస్తున్న {{PLURAL:$1|ఒక ఫైలు ఉంది|$1 ఫైళ్లు ఉన్నాయి}}.',
+'category-file-count-limited' => 'ఈ వర్గంలో కింద చూపిన {{PLURAL:$1|ఒక ఫైలు ఉంది|$1 ఫైళ్లు ఉన్నాయి}}.',
 'listingcontinuesabbrev' => '(కొనసాగింపు)',
 'index-category' => 'సూచీకరించిన పేజీలు',
 'noindex-category' => 'సూచీకరించని పేజీలు',
@@ -303,20 +304,19 @@ $messages = array(
 'vector-action-delete' => 'తొలగించు',
 'vector-action-move' => 'తరలించు',
 'vector-action-protect' => 'సంరక్షించు',
-'vector-action-undelete' => 'తిరిà°\97à°¿ à°\9aà±\87à°°à±\8dà°\9aà±\81',
+'vector-action-undelete' => 'à°¤à±\8aà°²à°\97à°¿à°\82à°ªà±\81à°¨à±\81 à°°à°¦à±\8dà°¦à±\81à°\9aà±\86à°¯à±\8dయి',
 'vector-action-unprotect' => 'సంరక్షణను మార్చు',
-'vector-simplesearch-preference' => 'సరళమైన వెతుకుడు పట్టీని చేతనంచేయి (వెక్టర్ అలంకారానికి మాత్రమే)',
 'vector-view-create' => 'సృష్టించు',
 'vector-view-edit' => 'సవరించు',
 'vector-view-history' => 'చరిత్రను చూడండి',
 'vector-view-view' => 'చదువు',
-'vector-view-viewsource' => 'à°®à±\82లానà±\8dని à°\9aà±\82à°¡à°\82à°¡à°¿',
+'vector-view-viewsource' => 'à°®à±\82లానà±\8dని à°\9aà±\82పిà°\82à°\9aà±\81',
 'actions' => 'పనులు',
 'namespaces' => 'పేరుబరులు',
-'variants' => 'à°°à°\95à°°à°\95ాలు',
+'variants' => 'వివిధ à°°à±\82à°ªాలు',
 
 'navigation-heading' => 'మార్గదర్శకపు మెనూ',
-'errorpagetitle' => 'à°ªà±\8aరపాà°\9fà±\81',
+'errorpagetitle' => 'à°²à±\8bà°ªà°\82',
 'returnto' => 'తిరిగి $1కి.',
 'tagline' => '{{SITENAME}} నుండి',
 'help' => 'సహాయం',
@@ -338,7 +338,7 @@ $messages = array(
 'delete' => 'తొలగించు',
 'deletethispage' => 'ఈ పేజీని తొలగించండి',
 'undeletethispage' => 'ఈ పేజీ తొలగింపును ఆపు',
-'undelete_short' => '{{PLURAL:$1|ఒక్క రచనను|$1 రచనలను}} పునఃస్థాపించు',
+'undelete_short' => '{{PLURAL:$1|ఒక్క రచన|$1 రచనల}} తొలగింపును రద్దుచెయ్యి',
 'viewdeleted_short' => '{{PLURAL:$1|తొలగించిన ఒక మార్పు|$1 తొలగించిన మార్పుల}}ను చూడండి',
 'protect' => 'సంరక్షించు',
 'protect_change' => 'మార్చు',
@@ -365,12 +365,12 @@ $messages = array(
 'viewtalkpage' => 'చర్చను చూడు',
 'otherlanguages' => 'ఇతర భాషలలో',
 'redirectedfrom' => '($1 నుండి మళ్ళించబడింది)',
-'redirectpagesub' => 'దారిమారà±\8dà°ªà±\81 à°ªà±\81à°\9f',
-'lastmodifiedat' => 'à°\88 à°ªà±\87à°\9cà±\80à°\95à°¿ $2, $1à°¨ à°\9aివరి à°®à°¾à°°à±\8dà°ªà±\81 à°\9cà°°à°¿à°\97à°¿à°¨ది.',
+'redirectpagesub' => 'దారిమారà±\8dà°ªà±\81 à°ªà±\87à°\9cà±\80',
+'lastmodifiedat' => 'à°\88 à°ªà±\87à°\9cà±\80à°²à±\8b à°\9aివరి à°®à°¾à°°à±\8dà°ªà±\81 $1 à°¨ $2 à°\95à±\81 à°\9cà°°à°¿à°\97à°¿à°\82ది.',
 'viewcount' => 'ఈ పేజీ {{PLURAL:$1|ఒక్క సారి|$1 సార్లు}} దర్శించబడింది.',
 'protectedpage' => 'సంరక్షణలోని పేజీ',
 'jumpto' => 'ఇక్కడికి గెంతు:',
-'jumptonavigation' => 'à°ªà±\87à°\9cà±\80à°\95à°¿ à°¸à°\82à°¬à°\82ధిà°\82à°\9aà°¿à°¨ à°²à°¿à°\82à°\95à±\81à°²à±\81',
+'jumptonavigation' => 'మారà±\8dà°\97à°¸à±\82à°\9aà±\80',
 'jumptosearch' => 'వెతుకు',
 'view-pool-error' => 'క్షమించండి, ప్రస్తుతం సర్వర్లన్నీ ఓవర్‌లోడ్ అయిఉన్నాయి.
 చాలామంది వాడుకరులు ఈ పేజీని చూస్తున్నారు.
@@ -379,21 +379,21 @@ $messages = array(
 $1',
 'pool-timeout' => 'తాళం కొరకు వేచివుండడానికి కాలపరిమితి అయిపోయింది',
 'pool-queuefull' => 'సమూహపు వరుస నిండుగా ఉంది',
-'pool-errorunknown' => 'à°\97à±\81à°°à±\8dà°¤à±\81à°¤à±\86లియని à°ªà±\8aరపాà°\9fà±\81',
+'pool-errorunknown' => 'à°¤à±\86లియని à°²à±\8bà°ªà°\82',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => '{{SITENAME}} గురించి',
 'aboutpage' => 'Project:గురించి',
 'copyright' => 'విషయం $1 కి లోబడి లభ్యం, వేరుగా పేర్కొంటే తప్ప.',
-'copyrightpage' => '{{ns:project}}:à°ªà±\8dà°°à°\9aà±\81à°°à°£ హక్కులు',
-'currentevents' => 'à°\87à°ªà±\8dà°ªà°\9fà°¿ à°®à±\81à°\9aà±\8dà°\9aà°\9fà±\8dలు',
-'currentevents-url' => 'Project:à°\87à°ªà±\8dà°ªà°\9fà°¿ à°®à±\81à°\9aà±\8dà°\9aà°\9fà±\8dలు',
+'copyrightpage' => '{{ns:project}}:à°\95ాపà±\80హక్కులు',
+'currentevents' => 'వరà±\8dతమాన à°\98à°\9fà°¨లు',
+'currentevents-url' => 'Project:వరà±\8dతమాన à°\98à°\9fà°¨లు',
 'disclaimers' => 'అస్వీకారములు',
 'disclaimerpage' => 'Project:సాధారణ నిష్పూచీ',
 'edithelp' => 'దిద్దుబాటు సహాయం',
 'helppage' => 'Help:సూచిక',
 'mainpage' => 'మొదటి పేజీ',
-'mainpage-description' => 'తలపà±\81à°\9f',
+'mainpage-description' => 'à°®à±\8aà°¦à°\9fà°¿ à°ªà±\87à°\9cà±\80',
 'policy-url' => 'Project:విధానం',
 'portal' => 'సముదాయ పందిరి',
 'portal-url' => 'Project:సముదాయ పందిరి',
@@ -402,7 +402,7 @@ $1',
 
 'badaccess' => 'అనుమతి లోపం',
 'badaccess-group0' => 'మీరు చేయతలపెట్టిన పనికి మీకు హక్కులు లేవు.',
-'badaccess-groups' => 'మీరు చేయతలపెట్టిన పని ఈ {{PLURAL:$2|గుంపు|గుంపుల}} లోని వాడుకర్లకు మాత్రమే పరిమితం: $1.',
+'badaccess-groups' => 'మీరు చేయతలపెట్టిన పని ఈ {{PLURAL:$2|గుంపు|గుంపులలో ఒకదాని}} లోని వాడుకర్లకు మాత్రమే పరిమితం: $1.',
 
 'versionrequired' => 'మీడియావికీ సాఫ్టువేరు వెర్షను $1 కావాలి',
 'versionrequiredtext' => 'ఈ పేజీని వాడటానికి మీకు మీడియావికీ సాఫ్టువేరు వెర్షను $1 కావాలి. [[Special:Version|వెర్షను పేజీ]]ని చూడండి.',
@@ -410,15 +410,15 @@ $1',
 'ok' => 'సరే',
 'retrievedfrom' => '"$1" నుండి వెలికితీశారు',
 'youhavenewmessages' => 'మీకు $1 ఉన్నాయి ($2).',
-'youhavenewmessagesfromusers' => 'మీకు {{PLURAL:$3|మరో వాడుకరి|$3 వాడుకరుల}} నుండి $1 ($2).',
-'youhavenewmessagesmanyusers' => 'మీకు చాలా వాడుకరుల నుండి $1 ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|ఒక కొత్త సందేశం వచ్చింది|999=కొత్త సందేశాలు ఉన్నాయి}}',
+'youhavenewmessagesfromusers' => '{{PLURAL:$4|మీకు}} {{PLURAL:$3|మరో వాడుకరి|$3 వాడుకరుల}} నుండి  $1 ($2).',
+'youhavenewmessagesmanyusers' => 'మీకు చాలా వాడుకరుల నుండి $1 ఉన్నాయి ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ఒక కొత్త సందేశం|999=కొత్త సందేశాలు}}',
 'newmessagesdifflinkplural' => 'చివరి {{PLURAL:$1|మార్పు|999=మార్పులు}}',
-'youhavenewmessagesmulti' => '$1లో మీకో సందేశం ఉంది',
+'youhavenewmessagesmulti' => '$1 లో మీకు కొత్త సందేశాలు ఉన్నాయి',
 'editsection' => 'మార్చు',
 'editold' => 'సవరించు',
 'viewsourceold' => 'మూలాన్ని చూడండి',
-'editlink' => 'సవరిà°\82చు',
+'editlink' => 'మారà±\8dచు',
 'viewsourcelink' => 'మూలాన్ని చూడండి',
 'editsectionhint' => 'విభాగాన్ని మార్చు: $1',
 'toc' => 'విషయ సూచిక',
@@ -431,10 +431,10 @@ $1',
 'restorelink' => '{{PLURAL:$1|ఒక తొలగించిన మార్పు|$1 తొలగించిన మార్పులు}}',
 'feedlinks' => 'ఫీడు:',
 'feed-invalid' => 'మీరు కోరిన ఫీడు సరైన రకం కాదు.',
-'feed-unavailable' => 'సిండికేషన్ ఫీడులేమీ అందుబాటులో లేవు.',
+'feed-unavailable' => 'సిండికేషన్ ఫీడులేమీ అందుబాటులో లేవు',
 'site-rss-feed' => '$1 RSS ఫీడు',
 'site-atom-feed' => '$1 ఆటమ్ ఫీడు',
-'page-rss-feed' => '"$1" ఆరెసెస్సు(RSS) ఫీడు',
+'page-rss-feed' => '"$1" RSS ఫీడు',
 'page-atom-feed' => '"$1" ఆటమ్ ఫీడు',
 'feed-atom' => 'యాటమ్',
 'red-link-title' => '$1 (పుట లేదు)',
@@ -450,7 +450,7 @@ $1',
 'nstab-image' => 'దస్త్రం',
 'nstab-mediawiki' => 'సందేశం',
 'nstab-template' => 'మూస',
-'nstab-help' => 'సహాయము',
+'nstab-help' => 'సహాయ పేజీ',
 'nstab-category' => 'వర్గం',
 
 # Main script and global functions
@@ -472,54 +472,54 @@ $1',
 'databaseerror-query' => 'క్వెరీ: $1',
 'databaseerror-function' => 'ఫంక్షన్: $1',
 'databaseerror-error' => 'లోపం: $1',
-'laggedslavemode' => 'హెచ్చరిక: పేజీలో ఇటీవల జరిగిన మార్పులు ఉండకపోవచ్చు.',
+'laggedslavemode' => '<strong>హెచ్చరిక:</strong> పేజీలో ఇటీవల జరిగిన మార్పులు ఉండకపోవచ్చు.',
 'readonly' => 'డేటాబేసు లాక్‌చెయ్యబడింది',
 'enterlockreason' => 'డేటాబేసుకు వేయబోతున్న లాకుకు కారణం తెలుపండి, దానితోపాటే ఎంతసమయం తరువాత ఆ లాకు తీసేస్తారో కూడా తెలుపండి',
 'readonlytext' => 'డేటాబేసు ప్రస్తుతం లాకు చేయబడింది. మార్పులు, చేర్పులు ప్రస్తుతం చెయ్యలేరు. మామూలుగా జరిగే నిర్వహణ కొరకు ఇది జరిగి ఉండవచ్చు; అది పూర్తి కాగానే తిరిగి మామూలుగా పనిచేస్తుంది.
 
 దీనిని లాకు చేసిన నిర్వాహకుడు ఇలా తెలియజేస్తున్నాడు: $1',
-'missing-article' => '"$1" $2 అనే పేజీ పాఠ్యం డేటాబేసులో దొరకలేదు.
+'missing-article' => '"$1" $2 à°\85à°¨à±\87 à°ªà±\87à°\9cà±\80 à°¯à±\8aà°\95à±\8dà°\95 à°ªà°¾à° à±\8dà°¯à°\82 à°¡à±\87à°\9fాబà±\87à°¸à±\81à°²à±\8b à°¦à±\8aà°°à°\95à°²à±\87à°¦à±\81.
 
-à°\95ాలదà±\8bà°·à°\82 à°ªà°\9fà±\8dà°\9fిన తేడా కోసం చూసినపుడుగానీ, తొలగించిన పేజీ చరితం కోసం చూసినపుడుగానీ ఇది సాధారణంగా జరుగుతుంది.
+à°\95ాలà°\82 à°\9aà±\86à°²à±\8dà°²ిన తేడా కోసం చూసినపుడుగానీ, తొలగించిన పేజీ చరితం కోసం చూసినపుడుగానీ ఇది సాధారణంగా జరుగుతుంది.
 
 ఒకవేళ అలా కాకపోతే, మీరో బగ్‌ను కనుక్కున్నట్టే.
-à°\88 URLà°¨à±\81 à°¸à±\82à°\9aà°¿à°¸à±\8dà°¤à±\82, à°¦à±\80à°¨à±\8dని à°\93 [[Special:ListUsers/sysop|నిరà±\8dవాహà°\95à±\81నిà°\95à°¿]] à°¤à±\86లియà°\9cà±\86à°¯à±\8dయండి.',
+à°\88 URLà°¨à±\81 à°¸à±\82à°\9aà°¿à°¸à±\8dà°¤à±\82, à°¦à±\80à°¨à±\8dని à°\93 [[Special:ListUsers/sysop|నిరà±\8dవాహà°\95à±\81నిà°\95à°¿]] à°¤à±\86లియà°\9cà±\87యండి.',
 'missingarticle-rev' => '(కూర్పు#: $1)',
 'missingarticle-diff' => '(తేడా: $1, $2)',
 'readonly_lag' => 'అనుచర (స్లేవ్) డేటాబేసు సర్వర్లు, ప్రధాన (మాస్టరు) సర్వరును అందుకునేందుకుగాను, డేటాబేసు ఆటోమాటిక్‌గా లాకు అయింది.',
 'internalerror' => 'అంతర్గత లోపం',
 'internalerror_info' => 'అంతర్గత లోపం: $1',
 'fileappenderrorread' => 'చేరుస్తున్నప్పుడు "$1"ని చదవలేకపోయాం.',
-'fileappenderror' => '"$1" à°¨à°¿ "$2" à°¤à±\8b à°\95à±\82à°°à±\8dà°\9aà°²à±\87à°\95à°ªà±\8bà°¤à±\81à°¨à±\8dà°¨ాం',
-'filecopyerror' => 'ఫైలు "$1"ని "$2"కు కాపీ చెయ్యటం కుదరలేదు.',
-'filerenameerror' => 'à°«à±\88à°²à±\81 "$1" à°ªà±\87à°°à±\81à°¨à±\81 "$2"à°\97à°¾ à°®à°¾à°°à±\8dà°\9aà°\9fà°\82 à°\95à±\81దరలà±\87à°¦à±\81.',
-'filedeleteerror' => 'à°«à±\88à°²à±\81 "$1"ని à°¤à±\80సివà±\87à°¯à°\9fà°\82 à°\95à±\81దరలà±\87à°¦à±\81.',
-'directorycreateerror' => '"$1" à°\85à°¨à±\87 à°¡à±\88à°°à±\86à°\95à±\8dà°\9fà°°à±\80ని à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°\9aà°²à±\87à°\95 à°ªà±\8bà°¤à±\81à°¨à±\8dనానà±\81.',
+'fileappenderror' => '"$1" à°¨à°¿ "$2" à°¤à±\8b à°\95à±\82à°°à±\8dà°\9aà°²à±\87à°\95à°ªà±\8bà°¯ాం',
+'filecopyerror' => 'ఫైలు "$1" ను "$2" కు కాపీ చెయ్యలేకపోయాం.',
+'filerenameerror' => 'à°«à±\88à°²à±\81 "$1" à°ªà±\87à°°à±\81à°¨à±\81 "$2"à°\97à°¾ à°®à°¾à°°à±\8dà°\9aà°²à±\87à°\95à°ªà±\8bయాà°\82.',
+'filedeleteerror' => 'à°«à±\88à°²à±\81 "$1"ని à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà°²à±\87à°\95à°ªà±\8bయాà°\82.',
+'directorycreateerror' => '"$1" à°\85à°¨à±\87 à°¡à±\88à°°à±\86à°\95à±\8dà°\9fà°°à±\80ని à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°\9aà°²à±\87à°\95 à°ªà±\8bయాà°\82.',
 'filenotfound' => 'ఫైలు "$1" కనబడలేదు.',
-'fileexistserror' => '"$1" అనే ఫైలు ఉంది, కాని అందులోకి రాయలేకపోతున్నాను',
+'fileexistserror' => '"$1" అనే ఫైలులోకి రాయలేకపోతున్నాం. అది ఈసరికే ఉంది.',
 'unexpected' => 'అనుకోని విలువ: "$1"="$2".',
-'formerror' => 'à°²à±\8bà°ªà°\82: à°\88 à°«à°¾à°°à°¾à°¨à±\8dని à°ªà°\82పిà°\82à°\9aà°²à±\87à°\95à°ªà±\8bà°¤à±\81à°¨à±\8dనానà±\81',
+'formerror' => 'à°²à±\8bà°ªà°\82: à°\88 à°«à°¾à°°à°¾à°¨à±\8dని à°ªà°\82పిà°\82à°\9aà°²à±\87à°\95à°ªà±\8bయాà°\82.',
 'badarticleerror' => 'ఈ పేజీపై ఈ పని చేయడం కుదరదు.',
 'cannotdelete' => '"$1" అనే పేజీ లేదా ఫైలుని తొలగించలేకపోయాం.
 దాన్ని ఇప్పటికే ఎవరైనా తొలగించి ఉండవచ్చు.',
-'cannotdelete-title' => '"$1" పుటను తొలగించలేరు',
+'cannotdelete-title' => 'పేజీ "$1" ని తొలగించలేరు',
 'delete-hook-aborted' => 'తొలగింపును హుక్ ఆపేసింది.
 వివరణ ఏమీ ఇవ్వలేదు.',
 'no-null-revision' => '"$1" పేజీకి కొత్త శూన్య కూర్పు (నల్ రివిజన్) ను సృష్టించలేకపోయాం',
 'badtitle' => 'తప్పు శీర్షిక',
-'badtitletext' => 'à°®à±\80à°°à±\81 à°\95à±\8bà°°à°¿à°¨ à°ªà±\81à°\9f à°¯à±\8aà°\95à±\8dà°\95 à°ªà±\87à°°à±\81 à°\9aà±\86à°²à±\8dలనిది, à°\96ాళà±\80à°\97à°¾ à°\89à°\82ది, à°²à±\87దా à°¤à°ªà±\8dà°ªà±\81à°\97à°¾ à°\87à°\9aà±\8dà°\9aిన అంతర్వికీ లేదా అంతర-భాషా శీర్షిక అయివుండాలి.
+'badtitletext' => 'à°®à±\80à°°à±\81 à°\95à±\8bà°°à°¿à°¨ à°ªà±\87à°\9cà±\80 à°¯à±\8aà°\95à±\8dà°\95 à°ªà±\87à°°à±\81 à°\9aà±\86à°²à±\8dలనిది, à°\96ాళà±\80à°\97à°¾ à°\89à°\82ది, à°²à±\87దా à°¤à°ªà±\8dà°ªà±\81 à°²à°¿à°\82à°\95à±\81à°¤à±\8b à°\95à±\82à°¡ిన అంతర్వికీ లేదా అంతర-భాషా శీర్షిక అయివుండాలి.
 శీర్షికలలో ఉపయోగించకూడని అక్షరాలు దానిలో ఉండివుండొచ్చు.',
 'perfcached' => 'కింది డేటా ముందే సేకరించి పెట్టుకున్నది. కాబట్టి తాజా డేటాతో పోలిస్తే తేడాలుండవచ్చు. ఈ కాషెలో గరిష్టంగా {{PLURAL:$1|ఒక్క ఫలితం ఉంది|$1 ఫలితాలు ఉన్నాయి}}.',
 'perfcachedts' => 'కింది సమాచారం ముందే సేకరించి పెట్టుకున్నది. దీన్ని $1న చివరిసారిగా తాజాకరించారు. ఈ కాషెలో గరిష్టంగా {{PLURAL:$4|ఒక్క ఫలితం ఉంది|$4 ఫలితాలు ఉన్నాయి}}.',
-'querypage-no-updates' => 'à°ªà±\8dà°°à°¸à±\8dà°¤à±\81à°¤à°\82 à°\88 à°ªà±\81à°\9fకి తాజాకరణలని అచేతనం చేసారు.
-à°\87à°\95à±\8dà°\95à°¡à±\81à°¨à±\8dà°¨ à°­à±\8bà°\97à°\9fà±\8dà°\9fà°¾ à°\95à±\82à°¡à°¾ తాజాకరించబడదు.',
+'querypage-no-updates' => 'à°ªà±\8dà°°à°¸à±\8dà°¤à±\81à°¤à°\82 à°\88 à°ªà±\87à°\9cà±\80కి తాజాకరణలని అచేతనం చేసారు.
+à°\87à°\95à±\8dà°\95à°¡à±\81à°¨à±\8dà°¨ à°¡à±\87à°\9fà°¾ à°\95à±\82à°¡à°¾ à°ªà±\8dà°°à°¸à±\8dà°¤à±\81à°¤à°\82 తాజాకరించబడదు.',
 'viewsource' => 'మూలాన్ని చూపించు',
 'viewsource-title' => '$1 యొక్క సోర్సు చూడండి',
 'actionthrottled' => 'కార్యాన్ని ఆపేసారు',
-'actionthrottledtext' => 'à°¸à±\8dపామà±\81à°¨à±\81 à°¤à°\97à±\8dà°\97à°¿à°\82à°\9aà°\9fానిà°\95à°¿ à°¤à±\80à°¸à±\81à°\95à±\81à°¨à±\8dà°¨ à°¨à°¿à°°à±\8dణయాల à°µà°²à±\8dà°², à°®à±\80à°°à±\81 à°\88 à°\95ారà±\8dయానà±\8dని à°\85తి à°¤à°\95à±\8dà°\95à±\81à°µ à°¸à°®à°¯à°\82à°²à±\8b à°¬à±\8bà°²à±\86à°¡à°¨à±\8dని à°¸à°¾à°°à±\8dà°²à±\81 à°\9aà±\87à°¯à°\95à±\81à°\82à°¡à°¾ à°\85à°¡à±\8dà°¡à±\81à°\95à±\81à°\82à°\9fà±\81à°¨à±\8dనాము. కొన్ని నిమిషాలు ఆగి మరలా ప్రయత్నించండి.',
+'actionthrottledtext' => 'à°¸à±\8dపామà±\81à°¨à±\81 à°¨à°¿à°°à±\8bధిà°\82à°\9aà±\87à°\82à°¦à±\81à°\95à±\81 à°\97ానà±\81, à°¤à°\95à±\8dà°\95à±\81à°µ à°¸à°®à°¯à°\82à°²à±\8b à°®à°°à±\80 à°\8eà°\95à±\8dà°\95à±\81à°µ à°¸à°¾à°°à±\8dà°²à±\81 à°\88 à°ªà°¨à°¿ à°\9aà±\87à°¯à°\95à±\81à°\82à°¡à°¾ à°ªà°°à°¿à°®à°¿à°¤à°¿ à°µà°¿à°§à°¿à°\82à°\9aà°¾à°\82. à°®à±\80à°°à±\81 à°¦à°¾à°¨à±\8dని à°\85ధిà°\97మిà°\82à°\9aారు. కొన్ని నిమిషాలు ఆగి మరలా ప్రయత్నించండి.',
 'protectedpagetext' => 'ఈ పేజీలో మార్పులు వగైరాలు చెయ్యకుండా ఉండేందుకు గాను, సంరక్షించబడింది.',
 'viewsourcetext' => 'మీరీ పేజీ సోర్సును చూడవచ్చు, కాపీ చేసుకోవచ్చు:',
-'viewyourtext' => "ఈ పేజీకి '''మీ మార్పుల''' యొక్క మూలాన్ని చూడవచ్చు లేదా కాపీచేసుకోవచ్చు:",
+'viewyourtext' => 'ఈ పేజీలోని <strong>మీ మార్పుల</strong> యొక్క మూలాన్ని చూడవచ్చు, కాపీచేసుకోవచ్చు:',
 'protectedinterface' => 'ఈ పేజీ, ఈ వికీ యొక్క సాఫ్టువేరు ఇంటరుఫేసుకు చెందిన టెక్స్టును అందిస్తుంది. దుశ్చర్యల నివారణ కోసమై దీన్ని సంరక్షించాం. వికీలన్నిటిలోను అనువాదాలను చేర్చాలన్నా, మార్చాలన్నా మీడియావికీ స్థానికీకరణ ప్రాజెక్టైన [//translatewiki.net/ translatewiki.net] ను వాడండి.',
 'editinginterface' => '<strong>హెచ్చరిక:</strong> సాఫ్టువేరుకు ఇంటరుఫేసు టెక్స్టును అందించేందుకు పనికొచ్చే పేజీని మీరు సరిదిద్దుతున్నారు.
 ఈ పేజీలో చేసే మార్పుల వల్ల ఇతర వాడుకరులకు ఇంటరుఫేసు కనబడే విధానంలో తేడావస్తుంది.
@@ -534,19 +534,19 @@ $2',
 'myprivateinfoprotected' => 'మీ అంతరంగిక సమాచారాన్ని సవరించేందుకు మీకు అనుమతి లేదు.',
 'mypreferencesprotected' => 'మీ అభీష్టాలను సవరించేందుకు మీకు అనుమతి లేదు.',
 'ns-specialprotected' => 'ప్రత్యేక పేజీలపై దిద్దుబాట్లు చేయలేరు.',
-'titleprotected' => "సభ్యులు [[User:$1|$1]] ఈ పేజీని సృష్టించనివ్వకుండా నిరోదిస్తున్నారు.
-అందుకు ఇచ్చిన కారణం: ''$2''.",
+'titleprotected' => '[[User:$1|$1]] ఈ శీర్షికని సృష్టించకుండా ఇది సంరక్షించబడింది.
+అందుకు ఇచ్చిన కారణం: "<em>$2</em>".',
 'filereadonlyerror' => 'ఫైలు ఖజానా "$2" రీడ్-ఓన్లీ స్థితిలో ఉండటం చేత "$1" ఫైలులో మార్పులు చెయ్యలేకపోయాం.
 
 దానికి తాళం వేసిన అధికారి ఇచ్చిన వివరణ ఇది: "$3".',
 'invalidtitle-knownnamespace' => 'పేరుబరి "$2", పాఠ్యము "$3" తో కూడిన ఈ శీర్షిక చెల్లనిది',
 'invalidtitle-unknownnamespace' => 'అపరిచితమైన పేరుబరి సంఖ్య "$1", పాఠ్యము "$2" తో కూడిన ఈ శీర్షిక చెల్లనిది',
-'exception-nologin' => 'à°²à±\8bనిà°\95à°¿ à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aà°¿లేరు',
-'exception-nologin-text' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°\9aà±\82డడానిà°\95à°¿ à°²à±\87దా à°\88 à°\9aà°°à±\8dయనà±\81 à°\9aà±\86à°¯à±\8dయడానిà°\95à°¿ à°¦à°¯à°\9aà±\87సి [[Special:Userlogin|à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aండి]].',
+'exception-nologin' => 'లాà°\97à°¿à°¨à±\88 లేరు',
+'exception-nologin-text' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°\9aà±\82డడానిà°\95à°¿ à°²à±\87దా à°\88 à°ªà°¨à°¿ à°\9aà±\86à°¯à±\8dయడానిà°\95à°¿ [[Special:Userlogin|లాà°\97ినవండి]].',
 'exception-nologin-text-manual' => 'ఈ పేజీ చూసేందుకు లేదా ఈ పని చేసేందుకు $1.',
 
 # Virus scanner
-'virus-badscanner' => "తప్పుడు స్వరూపణం: తెలియని వైరస్ స్కానర్: ''$1''",
+'virus-badscanner' => 'తప్పుడు స్వరూపణం: తెలియని వైరస్ స్కానర్: <em>$1</em>',
 'virus-scanfailed' => 'స్కాన్ విఫలమైంది (సంకేతం $1)',
 'virus-unknownscanner' => 'అజ్ఞాత యాంటీవైరస్:',
 
@@ -564,7 +564,7 @@ $2',
 'yourname' => 'వాడుకరి పేరు:',
 'userlogin-yourname' => 'వాడుకరి పేరు',
 'userlogin-yourname-ph' => 'మీ వాడుకరి పేరును ఇవ్వండి',
-'createacct-another-username-ph' => 'à°®à±\80 à°µà°¾à°¡à±\81à°\95à°°à°¿ à°ªà±\87à°°à±\81à°¨à±\81 à°ªà±\8dà°°à°µà±\87శపà±\86à°\9fà±\8dà°\9fండి',
+'createacct-another-username-ph' => 'à°®à±\80 à°µà°¾à°¡à±\81à°\95à°°à°¿ à°ªà±\87à°°à±\81à°¨à±\81 à°\87à°µà±\8dà°µండి',
 'yourpassword' => 'సంకేతపదం:',
 'userlogin-yourpassword' => 'సంకేతపదం',
 'userlogin-yourpassword-ph' => 'మీ సంకేతపదాన్ని ఇవ్వండి',
@@ -573,30 +573,28 @@ $2',
 'createacct-yourpasswordagain' => 'సంకేతపదాన్ని నిర్ధారించండి',
 'createacct-yourpasswordagain-ph' => 'సంకేతపదాన్ని మళ్ళీ ఇవ్వండి',
 'remembermypassword' => 'ఈ కంప్యూటరులో నా ప్రవేశాన్ని గుర్తుంచుకో (గరిష్ఠంగా $1 {{PLURAL:$1|రోజు|రోజుల}}కి)',
-'userlogin-remembermypassword' => 'ననà±\8dà°¨à±\81 à°ªà±\8dà°°à°µà±\87శిà°\82à°ªà°\9cà±\87సి ఉంచు',
+'userlogin-remembermypassword' => 'ననà±\8dà°¨à±\81 à°²à°¾à°\97à°¿à°¨à±\8d à°\9aà±\87à°¸à±\87 ఉంచు',
 'userlogin-signwithsecure' => 'సురక్షిత కనెక్షను వాడు',
 'yourdomainname' => 'మీ డోమైను',
 'password-change-forbidden' => 'ఈ వికీలో మీరు సంకేతపదాలను మార్చలేరు.',
-'externaldberror' => 'à°¡à±\87à°\9fాబà±\87à°¸à±\81 à°\85à°§à±\80à°\95రణలà±\8b à°ªà±\8aరపాà°\9fà±\81 à°\9cà°°à°¿à°\97à°¿à°\82ది à°²à±\87దా à°®à±\80 à°¬à°¯à°\9fà°¿ à°\96ాతాని తాజాకరించడానికి మీకు అనుమతి లేదు.',
-'login' => 'à°²à±\8bనిà°\95à°¿ à°°ండి',
-'nav-login-createaccount' => 'à°²à±\8bనిà°\95à°¿ à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aండి / ఖాతాని సృష్టించుకోండి',
+'externaldberror' => 'à°¡à±\87à°\9fాబà±\87à°¸à±\81 à°\85à°§à±\80à°\95రణలà±\8b à°²à±\8bà°ªà°\82 à°\9cà°°à°¿à°\97à°¿à°\82ది à°²à±\87దా à°®à±\80 à°¬à°¯à°\9fà°¿ à°\96ాతానà±\81 తాజాకరించడానికి మీకు అనుమతి లేదు.',
+'login' => 'లాà°\97ినవండి',
+'nav-login-createaccount' => 'లాà°\97ినవండి / ఖాతాని సృష్టించుకోండి',
 'loginprompt' => '{{SITENAME}}లోకి ప్రవేశించాలంటే మీ విహారిణిలో కూకీలు చేతనమై ఉండాలి.',
-'userlogin' => 'à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aండి / ఖాతాను సృష్టించుకోండి',
-'userloginnocreate' => 'à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aండి',
+'userlogin' => 'లాà°\97ినవండి / ఖాతాను సృష్టించుకోండి',
+'userloginnocreate' => 'లాà°\97ినవండి',
 'logout' => 'నిష్క్రమించు',
-'userlogout' => 'నిషà±\8dà°\95à±\8dరమిà°\82à°\9aà±\81',
-'notloggedin' => 'à°²à±\8bనిà°\95à°¿ à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aà°¿ లేరు',
+'userlogout' => 'లాà°\97à±\8cà°\9fà±\8d',
+'notloggedin' => 'లాà°\97à°¿à°¨à±\8dâ\80\8c à°\85యిలేరు',
 'userlogin-noaccount' => 'మీకు ఖాతా లేదా?',
 'userlogin-joinproject' => '{{SITENAME}}లో చేరండి',
 'nologin' => 'ఖాతా లేదా? $1.',
 'nologinlink' => 'ఖాతాని సృష్టించుకోండి',
 'createaccount' => 'ఖాతాని సృష్టించు',
 'gotaccount' => 'ఇప్పటికే మీకు ఖాతా ఉందా? $1.',
-'gotaccountlink' => 'à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aండి',
-'userlogin-resetlink' => 'à°®à±\80 à°ªà±\8dà°°à°µà±\87à°¶ వివరాలను మరచిపోయారా?',
+'gotaccountlink' => 'లాà°\97ినవండి',
+'userlogin-resetlink' => 'à°®à±\80 à°²à°¾à°\97à°¿à°¨à±\8d వివరాలను మరచిపోయారా?',
 'userlogin-resetpassword-link' => 'మీ సంకేతపదాన్ని మర్చిపోయారా?',
-'helplogin-url' => 'Help:ప్రవేశించడం',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ప్రవేశించడానికి సహాయం]]',
 'userlogin-loggedin' => 'మీరు ఈసరికే {{GENDER:$1|$1}} గా లాగిన్ అయి ఉన్నారు.
 వేరే వాడుకరిగా లాగినయేందుకు కింది ఫారమును వాడండి.',
 'userlogin-createanother' => 'మరొక ఖాతాను సృష్టించండి',
@@ -615,16 +613,16 @@ $2',
 'createacct-imgcaptcha-ph' => 'పైన కనబడే మాటలను ఇక్కడ ఇవ్వండి',
 'createacct-submit' => 'మీ ఖాతాను సృష్టించుకోండి',
 'createacct-another-submit' => 'మరొక ఖాతాను సృష్టించు',
-'createacct-benefit-heading' => '{{SITENAME}}à°¨à±\81 à°¤à°¯à°¾à°°à±\81à°\9aà±\87à°¸à±\87ది à°®à±\80లాà°\82à°\9fà°¿ à°ªà±\8dà°°à°\9cà°²ే.',
+'createacct-benefit-heading' => '{{SITENAME}}à°¨à±\81 à°¤à°¯à°¾à°°à±\81à°\9aà±\87à°¸à±\8dà°¤à±\81à°¨à±\8dనది à°®à±\80లాà°\82à°\9fà°¿ à°µà°¾à°°ే.',
 'createacct-benefit-body1' => '{{PLURAL:$1|మార్పు|మార్పులు}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|పేజీ|పేజీలు}}',
 'createacct-benefit-body3' => 'ఇటీవలి {{PLURAL:$1|సమర్పకుడు|సమర్పకులు}}',
 'badretype' => 'మీరు ఇచ్చిన రెండు సంకేతపదాలు ఒకదానితో మరొకటి సరిపోలడం లేదు.',
 'userexists' => 'ఇచ్చిన వాడుకరిపేరు ఇప్పటికే వాడుకలో ఉంది.
 వేరే పేరును ఎంచుకోండి.',
-'loginerror' => 'à°ªà±\8dà°°à°µà±\87à°¶à°\82à°²à±\8b à°ªà±\8aరపాà°\9fà±\81',
-'createacct-error' => 'పదà±\8dà°¦à±\81 à°¤à±\86రవడమà±\81à°²à±\8b à°¤à°ªà±\8dà°ªà±\81',
-'createaccounterror' => 'à°\96ాతాని సృష్టించలేకపోయాం: $1',
+'loginerror' => 'లాà°\97à°¿à°¨à±\8d à°²à±\8bà°ªà°\82',
+'createacct-error' => 'à°\96ాతా à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°\9aà°¡à°\82à°²à±\8b à°²à±\8bà°ªà°\82',
+'createaccounterror' => 'à°\96ాతానà±\81 సృష్టించలేకపోయాం: $1',
 'nocookiesnew' => 'ఖాతాని సృష్టించాం, కానీ మీరు ఇంకా లోనికి ప్రవేశించలేదు.
 వాడుకరుల ప్రవేశానికి {{SITENAME}} కూకీలను వాడుతుంది.
 మీరు కూకీలని అచేతనం చేసివున్నారు.
@@ -635,40 +633,40 @@ $2',
 'nocookiesfornew' => 'మూలాన్ని కనుక్కోలేకపోయాం కాబట్టి, ఈ వాడుకరి ఖాతాను సృష్టించలేకపోయాం.
 మీ కంప్యూటర్లో కూకీలు చేతనమై ఉన్నాయని నిశ్చయించుకొని, ఈ పేజీని తిరిగి లోడు చేసి, మళ్ళీ ప్రయత్నించండి.',
 'noname' => 'మీరు సరైన వాడుకరిపేరు ఇవ్వలేదు.',
-'loginsuccesstitle' => 'à°ªà±\8dà°°à°µà±\87à°¶à°\82 à°µà°¿à°\9cయవà°\82తమà±\88à°¨ది',
-'loginsuccess' => "'''మీరు ఇప్పుడు {{SITENAME}}లోనికి \"\$1\"గా ప్రవేశించారు.'''",
+'loginsuccesstitle' => 'à°ªà±\8dà°°à°µà±\87à°¶à°\82 à°µà°¿à°\9cయవà°\82తమà±\88à°\82ది',
+'loginsuccess' => '<strong>మీరు ఇప్పుడు {{SITENAME}}లోనికి "$1"గా ప్రవేశించారు.</strong>',
 'nosuchuser' => '"$1" అనే పేరుతో వాడుకరులు లేరు.
 వాడుకరి పేర్లు కేస్ సెన్సిటివ్.
 అక్షరక్రమం సరిచూసుకోండి, లేదా [[Special:UserLogin/signup|కొత్త ఖాతా సృష్టించుకోండి]].',
-'nosuchusershort' => '"$1" à°\85à°¨à±\87 à°ªà±\87à°°à±\81à°¤à±\8b à°¸à°­à±\8dà°¯à±\81à°²à±\81 లేరు. పేరు సరి చూసుకోండి.',
-'nouserspecified' => 'సభà±\8dయనామానà±\8dని à°¤à°ªà±\8dపనిసరిà°\97à°¾ à°\8eà°\82à°\9aà±\81à°\95à±\8bవాలి.',
+'nosuchusershort' => '"$1" à°ªà±\87à°°à±\81à°¤à±\8b à°µà°¾à°¡à±\81à°\95à°°à°¿ à°\8eవరà±\82 లేరు. పేరు సరి చూసుకోండి.',
+'nouserspecified' => 'వాడà±\81à°\95à°°à°¿ à°ªà±\87à°°à±\81à°¨à±\81 à°¤à°ªà±\8dపనిసరిà°\97à°¾ à°\87à°µà±\8dవాలి.',
 'login-userblocked' => 'ఈ వాడుకరిని నిరోధించారు. ప్రవేశానికి అనుమతి లేదు.',
 'wrongpassword' => 'ఈ సంకేతపదం సరైనది కాదు. దయచేసి మళ్లీ ప్రయత్నించండి.',
 'wrongpasswordempty' => 'ఖాళీ సంకేతపదం ఇచ్చారు. మళ్ళీ ప్రయత్నించండి.',
-'passwordtooshort' => 'à°®à±\80 à°¸à°\82à°\95à±\87తపదà°\82 à°\95à°¨à±\80à°¸à°\82 {{PLURAL:$1|1 à°\85à°\95à±\8dà°·à°°à°\82|$1 à°\85à°\95à±\8dషరాల}} à°ªà±\8aà°¡à°µà±\81 ఉండాలి.',
+'passwordtooshort' => 'à°¸à°\82à°\95à±\87తపదà°\82 à°\95à°¨à±\80à°¸à°\82 {{PLURAL:$1|1 à°\85à°\95à±\8dà°·à°°à°\82|$1 à°\85à°\95à±\8dషరాల}} à°¨à°¿à°¡à°¿à°µà°¿ ఉండాలి.',
 'password-name-match' => 'మీ సంకేతపదం మీ వాడుకరిపేరుకి భిన్నంగా ఉండాలి.',
 'password-login-forbidden' => 'ఈ వాడుకరిపేరు మరియు సంకేతపదాలను ఉపయోగించడం నిషిద్ధం.',
 'mailmypassword' => 'సంకేతపదాన్ని మార్చు',
 'passwordremindertitle' => '{{SITENAME}} కోసం కొత్త తాత్కాలిక సంకేతపదం',
 'passwordremindertext' => '{{SITENAME}} ($4) లో కొత్త సంకేతపదం పంపించమని ఎవరో (బహుశ మీరే, ఐ.పీ. చిరునామా $1 నుండి) అడిగారు. వాడుకరి "$2" కొరకు "$3" అనే తాత్కాలిక సంకేతపదం సిద్ధంచేసి ఉంచాం. మీ ఉద్దేశం అదే అయితే, ఇప్పుడు మీరు సైటులోనికి ప్రవేశించి కొత్త సంకేతపదాన్ని ఎంచుకోవచ్చు. మీ తాత్కాలిక సంకేతపదం {{PLURAL:$5|ఒక రోజు|$5 రోజుల}}లో కాలంచెల్లుతుంది.
 
-à°\92à°\95à°µà±\87à°³ à°\88 à°\85à°­à±\8dయరà±\8dథన à°®à±\80à°°à±\81à°\95à°¾à°\95 à°®à°°à±\86వరà±\8b à°\9aà±\87సారనà±\81à°\95à±\81à°¨à±\8dనా à°²à±\87దా à°®à±\80 à°¸à°\82à°\95à±\87తపదà°\82 à°®à±\80à°\95à±\81 à°\97à±\81à°°à±\8dà°¤à±\81à°\95à±\81à°µà°\9aà±\8dà°\9aà°¿ à°¦à°¾à°¨à±\8dని à°®à°¾à°°à±\8dà°\9aà°\95à±\82à°¡à°¦à±\81 à°\85à°¨à±\81à°\95à±\81à°\82à°\9fà±\81à°¨à±\8dనా, à°\88 à°¸à°\82à°¦à±\87శానà±\8dని à°®à°°à±\8dà°\9aà°¿à°ªà±\8bà°¯ి మీ పాత సంకేతపదాన్ని వాడడం కొనసాగించవచ్చు.',
-'noemail' => 'సభà±\8dà°¯à±\81à°²à±\81 "$1"à°\95à±\81 à°\88-మెయిలు చిరునామా నమోదయి లేదు.',
+à°\92à°\95à°µà±\87à°³ à°\88 à°\85à°­à±\8dయరà±\8dథన à°®à±\80à°°à±\81à°\95à°¾à°\95 à°®à°°à±\86వరà±\8b à°\9aà±\87సారనà±\81à°\95à±\81à°¨à±\8dనా à°²à±\87దా à°®à±\80 à°¸à°\82à°\95à±\87తపదà°\82 à°®à±\80à°\95à±\81 à°\97à±\81à°°à±\8dà°¤à±\81à°\95à±\81à°µà°\9aà±\8dà°\9aà°¿ à°¦à°¾à°¨à±\8dని à°®à°¾à°°à±\8dà°\9aà°\95à±\82à°¡à°¦à±\81 à°\85à°¨à±\81à°\95à±\81à°\82à°\9fà±\81à°¨à±\8dనా, à°\88 à°¸à°\82à°¦à±\87శానà±\8dని à°µà°¿à°¸à±\8dమరిà°\82à°\9aి మీ పాత సంకేతపదాన్ని వాడడం కొనసాగించవచ్చు.',
+'noemail' => 'వాడà±\81à°\95à°°à°¿ "$1" à°\95à±\81 à°\88మెయిలు చిరునామా నమోదయి లేదు.',
 'noemailcreate' => 'మీరు సరైన ఈమెయిల్ చిరునామాని ఇవ్వాలి',
 'passwordsent' => '"$1" కొరకు నమోదైన ఈ-మెయిలు చిరునామాకి కొత్త సంకేతపదాన్ని పంపించాం.
 అది అందిన తర్వాత ప్రవేశించి చూడండి.',
-'blocked-mailpassword' => 'దిదà±\8dà°¦à±\81బాà°\9fà±\8dà°²à±\81 à°\9aà±\86à°¯à±\8dà°¯à°\95à±\81à°\82à°¡à°¾ à°\88 à°\90à°ªà±\80à°\85à°¡à±\8dà°°à°¸à±\81à°¨à±\81 à°¨à°¿à°°à±\8bధిà°\82à°\9aà°¾à°\82. à°\85à°\82à°\9aà±\87à°¤, à°¦à±\81à°¶à±\8dà°\9aà°°à±\8dయల à°¨à°¿à°µà°¾à°°à°£ à°\95à±\8bà°¸à°\82 à°\97ానà±\81, à°®à°°à°\9aà°¿à°ªà±\8bయిన à°¸à°\82à°\95à±\87తపదానà±\8dని à°ªà±\8aà°\82à°¦à±\87 à°\85à°\82శానà±\8dని à°\85à°¨à±\81మతిà°\82à°\9aà°®ు.',
+'blocked-mailpassword' => 'దిదà±\8dà°¦à±\81బాà°\9fà±\8dà°²à±\81 à°\9aà±\86à°¯à±\8dà°¯à°\95à±\81à°\82à°¡à°¾ à°®à±\80 à°\90à°ªà±\80à°\85à°¡à±\8dà°°à°¸à±\81à°¨à±\81 à°¨à°¿à°°à±\8bధిà°\82à°\9aà°¾à°\82. à°\85à°\82à°\9aà±\87à°¤, à°¦à±\81à°¶à±\8dà°\9aà°°à±\8dయల à°¨à°¿à°µà°¾à°°à°£ à°\95à±\8bà°¸à°\82 à°\97ానà±\81, à°®à°°à°\9aà°¿à°ªà±\8bయిన à°¸à°\82à°\95à±\87తపదానà±\8dని à°ªà±\8aà°\82à°¦à±\87 à°µà±\80à°²à±\81 à°\88 à°\90à°ªà±\80à°\95à°¿ à°²à±\87à°¦ు.',
 'eauthentsent' => 'ఇచ్చిన ఈ-మెయిలు అడ్రసుకు ధృవీకరణ మెయిలు పంపించాం.
 ఇకపై మేము ఆ ఖాతాకు మెయిలు పంపాలంటే, ముందుగా మీరు ఆ మెయిల్లో సూచించినట్లుగా చేసి, ఈ చిరునామా మీదేనని ధృవీకరించాలి.',
-'throttled-mailpassword' => 'à°\97à°¡à°\9aà°¿à°¨ {{PLURAL:$1|à°\92à°\95 à°\97à°\82à°\9fà°²à±\8b|$1 à°\97à°\82à°\9fà°²à±\8dà°²à±\8b}} à°\87à°ªà±\8dà°ªà°\9fà°¿à°\95à±\87  à°¦à°¾à°\9fà±\81మాà°\9f à°®à°¾à°°à±\8dà°\9aà°¿à°¨à°\9fà±\8dà°²à±\81à°\97à°¾ à°\92à°\95 à°®à±\86యిలà±\8d  పంపించివున్నాం.
-à°¦à±\81à°¶à±\8dà°\9aà°°à±\8dయలనà±\81 à°¨à°¿à°µà°¾à°°à°¿à°\82à°\9aà±\87à°\82à°¦à±\81à°\95à±\81 à°\97ానà±\81, {{PLURAL:$1|à°\92à°\95 à°\97à°\82à°\9fà°\95à°¿|$1 à°\97à°\82à°\9fà°²à°\95à°¿}} à°\92à°\95à±\8dà°\95సారి à°®à°¾à°¤à±\8dà°°à°®à±\87 à°¦à°¾à°\9fà±\81మాà°\9f à°®à°¾à°°à±\8dà°ªà±\81 à°®à±\86యిలà±\8d పంపిస్తాము.',
+'throttled-mailpassword' => 'à°\97à°¡à°\9aà°¿à°¨ {{PLURAL:$1|à°\92à°\95 à°\97à°\82à°\9fà°²à±\8b|$1 à°\97à°\82à°\9fà°²à±\8dà°²à±\8b}} à°¸à°\82à°\95à±\87తపదà°\82 à°®à°¾à°°à±\8dà°\9aà°¿à°¨à°\9fà±\8dà°²à±\81à°\97à°¾ à°\92à°\95 à°®à±\86యిలà±\81 పంపించివున్నాం.
+à°¦à±\81à°¶à±\8dà°\9aà°°à±\8dయలనà±\81 à°¨à°¿à°µà°¾à°°à°¿à°\82à°\9aà±\87à°\82à°¦à±\81à°\95à±\81 à°\97ానà±\81, {{PLURAL:$1|à°\92à°\95 à°\97à°\82à°\9fà°\95à±\81|$1 à°\97à°\82à°\9fà°²à°\95à±\81}} à°\92à°\95à±\8dà°\95సారి à°®à°¾à°¤à±\8dà°°à°®à±\87 à°¸à°\82à°\95à±\87తపదà°\82 à°®à°¾à°°à±\8dà°ªà±\81 à°®à±\86యిలà±\81 పంపిస్తాము.',
 'mailerror' => 'మెయిలు పంపించడంలో లోపం: $1',
 'acct_creation_throttle_hit' => 'మీ ఐపీ చిరునామా వాడుతున్న ఈ వికీ సందర్శకులు గత ఒక్క రోజులో {{PLURAL:$1|1 ఖాతాని|$1 ఖాతాలను}} సృష్టించారు, ఈ కాల వ్యవధిలో అది గరిష్ఠ పరిమితి.
 అందువల్ల, ఈ ఐపీని వాడుతున్న సందర్శకులు ప్రస్తుతానికి ఇంక ఖాతాలని సృష్టించలేరు.',
 'emailauthenticated' => 'మీ ఈ-మెయిలు చిరునామా $2న $3కి ధృవీకరింపబడింది.',
 'emailnotauthenticated' => 'మీ ఈ-మెయిలు చిరునామాను ఇంకా ధృవీకరించలేదు. 
 కింద పేర్కొన్న అంశాలకు సంబంధించి ఎటువంటి ఈ-మెయిలునూ పంపించము.',
-'noemailprefs' => 'à°\95à°¿à°\82ది à°\85à°\82శాలà±\81 à°ªà°¨à°¿ à°\9aà±\86à°¯à±\8dà°¯à°\9fానిà°\95à°¿ à°\88-à°®à±\86యిలà±\81 à°\9aà°¿à°°à±\81నామానà±\81 à°¨à°®à±\8aà°¦à±\81à°\9aà°¯à±\8dà°¯ండి.',
+'noemailprefs' => 'à°\88 à°\85à°\82శాలà±\81 à°ªà°¨à°¿ à°\9aà±\86à°¯à±\8dయడానిà°\95à°¿ à°®à±\80 à°\85à°­à°¿à°°à±\81à°\9aà±\81à°²à±\8dà°²à±\8b à°\88à°®à±\86యిలà±\81 à°\9aà°¿à°°à±\81నామా à°\87à°µà±\8dà°µండి.',
 'emailconfirmlink' => 'మీ ఈ-మెయిలు చిరునామాను ధృవీకరించండి',
 'invalidemailaddress' => 'మీరు ఇచ్చిన ఈ-మెయిలు చిరునామా సరైన రీతిలో లేనందున అంగీకరించటంలేదు.
 దయచేసి ఈ-మెయిలు చిరునామాను సరైన రీతిలో ఇవ్వండి లేదా ఖాళీగా వదిలేయండి.',
@@ -689,32 +687,41 @@ $2',
 'suspicious-userlogout' => 'సరిగా పనిచేయని విహారిణి లేదా కాషింగ్ ప్రాక్సీ వల్ల పంపబడడం చేత, నిష్క్రమించాలనే మీ అభ్యర్థనని నిరాకరించారు.',
 'createacct-another-realname-tip' => 'అసలు పేరు ఐచ్ఛికం.
 మీరు దాన్ని ఇస్తే, వాడుకరి పనుల శ్రేయస్సు ఆ పేరుకు ఆపాదించబడుతుంది.',
+'pt-login' => 'లాగినవండి',
+'pt-login-button' => 'లాగినవండి',
+'pt-createaccount' => 'ఖాతా సృష్టించు',
+'pt-userlogout' => 'లాగౌటవండి',
 
 # Email sending
 'php-mail-error-unknown' => 'PHP యొక్క mail() ఫంక్షన్‍లో ఏదో తెలియని లోపం దొర్లింది',
-'user-mail-no-addy' => 'ఈ-మెయిలు చిరునామాని ఇవ్వకుండానే ఈ-మెయిలు పంపడానికి ప్రయత్నించారు.',
+'user-mail-no-addy' => 'ఈమెయిలు చిరునామా ఇవ్వకుండానే ఈమెయిలు పంపడానికి ప్రయత్నించారు.',
 'user-mail-no-body' => 'ఈమెయిలును ఖాళీగానో, మరీ తక్కువ విషయంతోనో పంపేందుకు ప్రయత్నించారు.',
 
 # Change password dialog
 'changepassword' => 'సంకేతపదాన్ని మార్చండి',
-'resetpass_announce' => 'మీకు పంపిన తాత్కాలిక సంకేతంతో ప్రవేశించివున్నారు.
-ప్రవేశాన్ని పూర్తిచేసేందుకు, మీరు తప్పనిసరిగా ఇక్కడ కొత్త సంకేతపదాన్ని అమర్చుకోవాలి:',
+'resetpass_announce' => 'లాగిన్ను పూర్తిచేసేందుకు, తప్పనిసరిగా కొత్త సంకేతపదాన్ని ఇవ్వాలి:',
 'resetpass_header' => 'ఖాతా సంకేతపదం మార్పు',
 'oldpassword' => 'పాత సంకేతపదం:',
 'newpassword' => 'కొత్త సంకేతపదం:',
 'retypenew' => 'సంకేతపదం, మళ్ళీ',
-'resetpass_submit' => 'à°¸à°\82à°\95à±\87తపదానà±\8dని à°®à°¾à°°à±\8dà°\9aà°¿ à°²à±\8bనిà°\95à°¿ à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aండి',
+'resetpass_submit' => 'à°¸à°\82à°\95à±\87తపదానà±\8dని à°®à°¾à°°à±\8dà°\9aà°¿ à°²à°¾à°\97ినవండి',
 'changepassword-success' => 'మీ సంకేతపదం విజయవంతంగా మార్చబడింది.',
 'changepassword-throttled' => 'కొద్దిసేపటిగా మీరు చాలా లాగిన్ ప్రయత్నాలు చేసారు.
 మళ్ళీ ప్రయత్నించే ముందు $1 ఆగండి.',
 'resetpass_forbidden' => 'సంకేతపదాలను మార్చటం కుదరదు',
-'resetpass-no-info' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°¨à±\87à°°à±\81à°\97à°¾ à°\9aà±\82à°¡à°\9fానిà°\95à°¿ à°®à±\80à°°à±\81 à°²à±\8bనిà°\95à°¿ à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aà°¿వుండాలి.',
+'resetpass-no-info' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°¨à±\87à°°à±\81à°\97à°¾ à°\9aà±\82à°¡à°\9fానిà°\95à°¿ à°®à±\80à°°à±\81 à°²à°¾à°\97ినయి వుండాలి.',
 'resetpass-submit-loggedin' => 'సంకేతపదాన్ని మార్చు',
 'resetpass-submit-cancel' => 'రద్దుచేయి',
 'resetpass-wrong-oldpass' => 'తప్పుడు తాత్కాలిక లేదా ప్రస్తుత సంకేతపదం.
 మీరు మీ సంకేతపదాన్ని ఇప్పటికే విజయవంతంగా మార్చుకొనివుండవచ్చు లేదా కొత్త తాత్కాలిక సంకేతపదం కోసం అభ్యర్థించారు.',
+'resetpass-recycled' => 'మీ ప్రస్తుత సంకేతపదాన్ని వేరే సంకేతపదంతో మార్చుకోండి',
+'resetpass-temp-emailed' => 'మీరు మీ ఈమెయిలుకు పంపించిన తాత్కాలిక కోడుతో లాగినయ్యారు. లాగిన్ను పూర్తి చేసేందుకు, ఇక్కడ మీరు తప్పనిసరిగా సంకేతపదం మార్చుకోవాలి:',
 'resetpass-temp-password' => 'తాత్కాలిక సంకేతపదం:',
 'resetpass-abort-generic' => 'ఓ పొడిగింత (ఎక్స్టెన్‍షన్) సంకేతపదం మార్పిడిని ఆపేసింది.',
+'resetpass-expired' => 'మీ సంకేతపదానికి కాలం చెల్లింది. కొత్త సంకేతపదం ఇచ్చి లాగినవండి.',
+'resetpass-expired-soft' => 'మీ సంకేతపదానికి కాలం చెల్లింది, కాబట్టి కొత్తది ఇవ్వాలి. కొత్తది ఇప్పుడే ఇవ్వండి లేదా "{{int:resetpass-submit-cancel}}" నొక్కి, తరువాత మార్చుకోండి.',
+'resetpass-validity-soft' => 'మీ సంకేతపదానికి కాలం చెల్లింది:$1
+కొత్తది ఇప్పుడే ఇవ్వండి లేదా "{{int:resetpass-submit-cancel}}" నొక్కి, తరువాత మార్చుకోండి.',
 
 # Special:PasswordReset
 'passwordreset' => 'సంకేతపదాన్ని మార్చుకోండి',
@@ -753,7 +760,7 @@ $2
 'changeemail' => 'ఈ-మెయిలు చిరునామా మార్పు',
 'changeemail-header' => 'ఖాతా ఈ-మెయిల్ చిరునామాని మార్చండి',
 'changeemail-text' => 'మీ ఈమెయిలు చిరునామాని మార్చుకోడానికి ఈ ఫారాన్ని నింపండి. ఈ మార్పుని నిర్ధారించడానికి మీ సంకేతపదాన్ని ఇవ్వాల్సివస్తుంది.',
-'changeemail-no-info' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°¨à±\87à°°à±\81à°\97à°¾ à°\9aà±\82à°¡à°\9fానిà°\95à°¿ à°®à±\80à°°à±\81 à°²à±\8bనిà°\95à°¿ à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aà°¿వుండాలి.',
+'changeemail-no-info' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°¨à±\87à°°à±\81à°\97à°¾ à°\9aà±\82à°¡à°\9fానిà°\95à°¿ à°®à±\80à°°à±\81 à°²à°¾à°\97ినయి వుండాలి.',
 'changeemail-oldemail' => 'ప్రస్తుత ఈ-మెయిలు చిరునామా:',
 'changeemail-newemail' => 'కొత్త ఈ-మెయిలు చిరునామా:',
 'changeemail-none' => '(ఏమీలేదు)',
@@ -787,9 +794,9 @@ $2
 'extlink_tip' => 'బయటి లింకు (దీనికి ముందు http:// ఇవ్వటం మరువకండి)',
 'headline_sample' => 'శీర్షిక పాఠ్యం',
 'headline_tip' => '2వ స్థాయి శీర్షిక',
-'nowiki_sample' => 'ఫారà±\8dమాà°\9fà±\81 à°\9aà±\87à°¯à°\95à±\82డని à°ªà°¾à° à±\8dయానà±\8dని à°\87à°\95à±\8dà°\95à°¡ à°\9aà±\87à°°à±\8dà°\9aà°\82à°¡à°¿',
+'nowiki_sample' => 'ఫార్మాటు చేయని పాఠ్యాన్ని ఇక్కడ చేర్చండి',
 'nowiki_tip' => 'వికీ ఫార్మాటును పట్టించుకోవద్దు',
-'image_tip' => 'à°ªà±\8aదిà°\97ిన ఫైలు',
+'image_tip' => 'à°\87మిడà±\8dà°\9aిన ఫైలు',
 'media_tip' => 'దస్త్రపు లంకె',
 'sig_tip' => 'సమయంతో సహా మీ సంతకం',
 'hr_tip' => 'అడ్డగీత (అరుదుగా వాడండి)',
@@ -801,36 +808,36 @@ $2
 'watchthis' => 'ఈ పుట మీద కన్నేసి ఉంచు',
 'savearticle' => 'పేజీని భద్రపరచు',
 'preview' => 'మునుజూపు',
-'showpreview' => 'మునుజూపు',
-'showlivepreview' => 'తాà°\9cà°¾ మునుజూపు',
+'showpreview' => 'మునుజూపు చూపు',
+'showlivepreview' => 'à°¤à°\95à±\8dà°·à°£ మునుజూపు',
 'showdiff' => 'తేడాలను చూపించు',
-'anoneditwarning' => "'''హెచ్చరిక:''' మీరు లోనికి ప్రవేశించలేదు.
-ఈ పేజీ దిద్దుబాటు చరిత్రలో మీ ఐపీ చిరునామా నమోదవుతుంది.",
-'anonpreviewwarning' => "''మీరు లోనికి ప్రవేశించలేదు. భద్రపరిస్తే ఈ పేజీ యొక్క దిద్దుబాటు చరిత్రలో మీ ఐపీ చిరునామా నమోదవుతుంది.''",
-'missingsummary' => "'''గుర్తు చేస్తున్నాం:''' మీరు దిద్దుబాటు సారాంశమేమీ ఇవ్వలేదు. పేజీని మళ్ళీ భద్రపరచమని చెబితే సారాంశమేమీ లేకుండానే దిద్దుబాటును భద్రపరుస్తాం.",
+'anoneditwarning' => '<strong>హెచ్చరిక:</strong> మీరు లాగినవలేదు.
+ఈ పేజీ దిద్దుబాటు చరిత్రలో మీ ఐపీ చిరునామా నమోదవుతుంది.',
+'anonpreviewwarning' => '<em>మీరు లాగినవలేదు. భద్రపరిస్తే ఈ పేజీ యొక్క దిద్దుబాటు చరిత్రలో మీ ఐపీ చిరునామా నమోదవుతుంది.</em>',
+'missingsummary' => '<strong>గుర్తు చేస్తున్నాం:</strong> మీరు దిద్దుబాటు సారాంశమేమీ ఇవ్వలేదు. పేజీని మళ్ళీ భద్రపరచమని చెబితే సారాంశమేమీ లేకుండానే దిద్దుబాటును భద్రపరుస్తాం.',
 'missingcommenttext' => 'కింద ఓ వ్యాఖ్య రాయండి.',
-'missingcommentheader' => "'''గుర్తు చేస్తున్నాం''': ఈ వ్యాఖ్యకు మీరు విషయం/శీర్షిక పెట్టలేదు.
-\"{{int:savearticle}}\"ని మళ్ళీ నొక్కితే, మీ మార్పుకి విషయం/శీర్షిక ఏమీ లేకుండానే భద్రపరుస్తాం.",
-'summary-preview' => 'à°®à±\80à°°à±\81 à°°à°¾à°¸à°¿à°¨ à°¸à°¾à°°à°¾à°\82à°¶à°\82:',
+'missingcommentheader' => '<strong>గుర్తు చేస్తున్నాం:</strong> ఈ వ్యాఖ్యకు మీరు విషయం/శీర్షిక పెట్టలేదు.
+"{{int:savearticle}}"ని మళ్ళీ నొక్కితే, అది లేకుండానే మీ మార్పును భద్రపరుస్తాం.',
+'summary-preview' => 'సారాà°\82à°¶à°\82 à°®à±\81à°¨à±\81à°\9cà±\82à°ªà±\81:',
 'subject-preview' => 'విషయం/శీర్షిక మునుజూపు:',
-'blockedtitle' => 'సభà±\8dà°¯à±\81నిపà±\88 à°¨à°¿à°°à±\8bà°§à°\82 à°\85మలయిà°\82ది',
-'blockedtext' => "'''మీ వాడుకరి పేరుని లేదా ఐ.పీ. చిరునామాని నిరోధించారు.'''
+'blockedtitle' => 'వాడà±\81à°\95à°°à°¿ à°¨à°¿à°°à±\8bధిà°\82à°\9aబడà±\8dడారà±\81',
+'blockedtext' => "<strong>మీ వాడుకరి పేరు లేదా ఐ.పీ. చిరునామా నిరోధించబడింది.</strong>
 
 నిరోధించినది $1.
-అందుకు ఇచ్చిన కారణం: ''$2''
+అందుకు ఇచ్చిన కారణం: <em>$2</em>.
 
 * నిరోధం మొదలైన సమయం: $8
 * నిరోధించిన కాలం: $6
 * నిరోధానికి గురైనవారు: $7
 
-ఈ నిరోధంపై చర్చించేందుకు మీరు $1ను గాని, మరెవరైనా [[{{MediaWiki:Grouppage-sysop}}|నిర్వాహకులను]] గాని సంప్రదించవచ్చు.
+ఈ నిరోధంపై చర్చించేందుకు మీరు $1 ను గాని, మరెవరైనా [[{{MediaWiki:Grouppage-sysop}}|నిర్వాహకులను]] గాని సంప్రదించవచ్చు.
 మీ [[Special:Preferences|ఖాతా అభిరుచులలో]] సరైన ఈ-మెయిలు చిరునామా ఇచ్చివుండకపోయినా లేదా మిమ్మల్ని  'ఈ వాడుకరికి ఈ-మెయిలు పంపు' సౌలభ్యాన్ని వాడుకోవడం నుండి నిరోధించివున్నా మీరు ఈమెయిలు ద్వారా సంప్రదించలేరు.
 మీ ప్రస్తుత ఐ.పీ. చిరునామా $3, మరియు నిరోధపు ID #$5.
 మీ సంప్రదింపులన్నిటిలోనూ వీటిని పేర్కొనండి.",
 'autoblockedtext' => 'మీ ఐపీ చిరునామా ఆటోమాటిగ్గా నిరోధించబడింది. ఎందుకంటే ఇదే ఐపీ చిరునామాని ఓ నిరోధిత వాడుకరి ఉపయోగించారు. ఆ వాడుకరిని $1 నిరోధించారు.
 అందుకు ఇచ్చిన కారణం ఇదీ:
 
-:\'\'$2\'\'
+:<em>$2</em>
 
 * నిరోధం మొదలైన సమయం: $8
 * నిరోధించిన కాలం: $6
@@ -843,20 +850,24 @@ $2
 మీ ప్రస్తుత ఐపీ చిరునామా $3, మరియు నిరోధపు ఐడీ: $5.
 మీ సంప్రదింపులన్నిటిలోను అన్ని పై వివరాలను ఉదహరించండి.',
 'blockednoreason' => 'కారణమేమీ ఇవ్వలేదు',
-'whitelistedittext' => 'పుటలలో మార్పులు చెయ్యడానికి మీరు $1 ఉండాలి.',
-'confirmedittext' => 'పేజీల్లో మార్పులు చేసేముందు మీ ఈ-మెయిలు చిరునామా ధృవీకరించాలి. [[Special:Preferences|మీ అభిరుచుల]]లో మీ ఈ-మెయిలు చిరునామా రాసి, ధృవీకరించండి.',
+'whitelistedittext' => 'పుటలలో మార్పులు చెయ్యడానికి $1.',
+'confirmedittext' => 'పేజీల్లో మార్పులు చేసేముందు మీ ఈమెయిలు చిరునామాను ధృవీకరించాలి. [[Special:Preferences|మీ అభిరుచుల]]లో మీ ఈమెయిలు చిరునామా రాసి, ధృవీకరించండి.',
 'nosuchsectiontitle' => 'విభాగాన్ని కనగొనలేకపోయాం',
-'nosuchsectiontext' => 'à°®à±\80à°°à±\81 à°²à±\87ని à°µà°¿à°­à°¾à°\97ానà±\8dని à°®à°¾à°°à±\8dà°\9aడానిà°\95à°¿ ప్రయత్నించారు.
+'nosuchsectiontext' => 'à°\85సలà±\81 à°²à±\87à°¨à±\87 à°²à±\87ని à°µà°¿à°­à°¾à°\97ానà±\8dని à°®à°¾à°°à±\8dà°\9aడానిà°\95à°¿ à°®à±\80à°°à±\81 ప్రయత్నించారు.
 మీరు పేజీని చూస్తూన్నప్పుడు దాన్ని ఎవరైనా తరలించి లేదా తొలగించి ఉండవచ్చు.',
-'loginreqtitle' => 'à°ªà±\8dà°°à°µà±\87శమà±\81 తప్పనిసరి',
+'loginreqtitle' => 'లాà°\97ినవడà°\82 తప్పనిసరి',
 'loginreqlink' => 'లాగినవండి',
-'loginreqpagetext' => 'ఇతర పుటలను చూడడానికి మీరు $1 ఉండాలి.',
+'loginreqpagetext' => 'ఇతర పుటలను చూడడానికి $1.',
 'accmailtitle' => 'సంకేతపదం పంపించబడింది.',
 'accmailtext' => "[[User talk:$1|$1]] కొరకు ఒక యాదృచ్ఛిక సంకేతపదాన్ని $2కి పంపించాం. లాగినయ్యాక, ''[[Special:ChangePassword|సంకేతపదాన్ని మార్చుకోండి]]'' అనే పేజీలో ఈ సంకేతపదాన్ని మార్చుకోవచ్చు.",
 'newarticle' => '(కొత్తది)',
-'newarticletext' => "ఈ లింకుకు సంబంధించిన పేజీ ఉనికిలొ లేదు.
-కింది పెట్టెలో మీ రచనను టైపు చేసి ఆ పేజీని సృష్టించండి (దీనిపై సమాచారం కొరకు [[{{MediaWiki:Helppage}}|సహాయం]] పేజీ చూడండి). మీరిక్కడికి పొరపాటున వచ్చి ఉంటే, మీ బ్రౌజరు '''back''' మీట నొక్కండి.",
-'anontalkpagetext' => "----''ఇది ఒక అజ్ఞాత వాడుకరి చర్చా పేజీ. ఆ వాడుకరి ఇంకా తనకై ఖాతాను సృష్టించుకోలేదు, లేదా ఖాతా ఉన్నా దానిని ఉపయోగించడం లేదు. అజ్ఞాత వాడుకరులను గుర్తించడానికి అంకెలతో ఉండే ఐ.పీ. చిరునామాను వాడుతాం. కానీ, ఒకే ఐ.పీ. చిరునామాని చాలా మంది వాడుకరులు ఉపయోగించే అవకాశం ఉంది. మీరు అజ్ఞాత వాడుకరి అయితే మరియు సంబంధంలేని వ్యాఖ్యలు మిమ్మల్ని ఉద్దేశించినట్టుగా అనిపిస్తే, భవిష్యత్తులో ఇతర అజ్ఞాత వాడుకరులతో అయోమయం లేకుండా ఉండటానికి, దయచేసి [[Special:UserLogin/signup|ఖాతాను సృష్టించుకోండి]] లేదా [[Special:UserLogin|లోనికి ప్రవేశించండి]].''",
+'newarticletext' => 'ఈ లింకుకు సంబంధించిన పేజీ లేనే లేదు.
+కింది పెట్టెలో మీ రచనను టైపు చేసి ఆ పేజీని సృష్టించండి (దీనిపై సమాచారం కొరకు [[{{MediaWiki:Helppage}}|సహాయం పేజీ]] చూడండి). మీరిక్కడికి పొరపాటున వచ్చి ఉంటే, మీ బ్రౌజరు <strong>back</strong> మీట నొక్కండి.',
+'anontalkpagetext' => "----
+<em>ఇది ఒక అజ్ఞాత వాడుకరి చర్చా పేజీ. ఆ వాడుకరి ఇంకా తనకై ఖాతాను సృష్టించుకోలేదు, లేదా ఖాతా ఉన్నా దానిని ఉపయోగించడం లేదు.</em>
+అంచేత, అతణ్ణి/ఆమెను గుర్తించడానికి ఐ.పీ. చిరునామాను వాడాల్సి వచ్చింది. 
+ఒకే ఐ.పీ. చిరునామాని చాలా మంది వాడుకరులు ఉపయోగించే అవకాశం ఉంది. 
+మీరూ అజ్ఞాత వాడుకరి అయితే, మీకు సంబంధంలేని వ్యాఖ్యలు మిమ్మల్ని ఉద్దేశించినట్టుగా అనిపిస్తే, భవిష్యత్తులో ఇతర అజ్ఞాత వాడుకరులతో అయోమయం లేకుండా ఉండటానికి, [[Special:UserLogin/signup|ఖాతాను సృష్టించుకోండి]] లేదా [[Special:UserLogin|లాగినవండి]].''",
 'noarticletext' => 'ప్రస్తుతం ఈ పేజీలో పాఠ్యమేమీ లేదు.
 వేరే పేజీలలో [[Special:Search/{{PAGENAME}}|ఈ పేజీ శీర్షిక కోసం వెతకవచ్చు]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} సంబంధిత చిట్టాలు చూడవచ్చు],
@@ -864,7 +875,7 @@ $2
 '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' => '"<nowiki>$1</nowiki>" అనే వాడుకరి ఖాతా నమోదయిలేదు. మీరు ఈ పేజీని సృష్టించ/సరిదిద్దాలనుకుంటే, సరిచూసుకోండి.',
+'userpage-userdoesnotexist' => '"$1" అనే వాడుకరి ఖాతా నమోదయిలేదు. మీరు ఈ పేజీని సృష్టించాలని/సరిదిద్దాలని అనుకుంటున్నారేమో చూడండి.',
 'userpage-userdoesnotexist-view' => 'వాడుకరి ఖాతా "$1" నమోదుకాలేదు.',
 'blocked-notice-logextract' => 'ప్రస్తుతం ఈ వాడుకరిని నిరోధించారు.
 నిరోధపు చిట్టాలోని చివరి పద్దుని మీ సమాచారం కోసం ఈ క్రింద ఇస్తున్నాం:',
@@ -873,37 +884,37 @@ $2
 * <strong>గూగుల్ క్రోమ్:</strong> <em>Ctrl-Shift-R</em> (మాక్ లో <em>⌘-Shift-R</em>) నొక్కండి
 *<strong>ఇంటర్నెట్ ఎక్ప్లోరర్:</strong> <em>Ctrl</em> ను నొక్కిపట్టి <em>Refresh</em> నొక్కండి లేదా <em>Ctrl-F5</em> నొక్కండి.
 *<em>ఒపెరా:</em> <em>Tools → Preferences</em> ద్వారా కోశాన్ని ఖాళీ చెయ్యండి',
-'usercssyoucanpreview' => "'''చిట్కా:''' భద్రపరిచేముందు మీ కొత్త CSSని పరీక్షించడానికి \"{{int:showpreview}}\" అనే బొత్తాన్ని వాడండి.",
-'userjsyoucanpreview' => "'''చిట్కా:''' భద్రపరిచేముందు మీ కొత్త జావాస్క్రిప్టుని పరీక్షించడానికి \"{{int:showpreview}}\" అనే బొత్తాన్ని వాడండి.",
-'usercsspreview' => "'''మీరు వాడుకరి CSSను కేవలం సరిచూస్తున్నారని గుర్తుంచుకోండి.'''
-'''దాన్నింకా భద్రపరచలేదు!'''",
-'userjspreview' => "'''గుర్తుంచుకోండి, మీరింకా మీ వాడుకరి జావాస్క్రిప్ట్&zwnj;ను భద్రపరచలేదు, కేవలం పరీక్షిస్తున్నారు/సరిచూస్తున్నారు!'''",
+'usercssyoucanpreview' => '<strong>చిట్కా:</strong> భద్రపరిచేముందు మీ కొత్త CSSని పరీక్షించడానికి "{{int:showpreview}}" బొత్తాన్ని వాడండి.',
+'userjsyoucanpreview' => '<strong>చిట్కా:</strong> భద్రపరిచేముందు మీ కొత్త జావాస్క్రిప్టుని పరీక్షించడానికి "{{int:showpreview}}" బొత్తాన్ని వాడండి.',
+'usercsspreview' => '<strong>మీరు వాడుకరి CSSను కేవలం సరిచూస్తున్నారని గుర్తుంచుకోండి.
+దాన్నింకా భద్రపరచలేదు!</strong>',
+'userjspreview' => '<strong>గుర్తుంచుకోండి, మీరింకా మీ వాడుకరి జావాస్క్రిప్ట్&zwnj;ను భద్రపరచలేదు, కేవలం పరీక్షిస్తున్నారు/సరిచూస్తున్నారు!</strong>',
 'sitecsspreview' => "'''మీరు చూస్తున్నది ఈ CSS మునుజూపును మాత్రమేనని గుర్తుంచుకోండి.'''
 '''దీన్నింకా భద్రపరచలేదు!'''",
 'sitejspreview' => "'''మీరు చూస్తున్నది ఈ JavaScript మునుజూపును మాత్రమేనని గుర్తుంచుకోండి.''' 
 '''దీన్నింకా భద్రపరచలేదు!'''",
-'userinvalidcssjstitle' => "'''హెచ్చరిక:''' \"\$1\" అనే అలంకారం లేదు.
-అభిమత .css మరియు .js పుటల శీర్షికలు ఇంగ్లీషు చిన్నబడి అక్షరాల లోనే ఉండాలని గుర్తుంచుకోండి, ఉదాహరణకు ఇలా {{ns:user}}:Foo/vector.css అంతేగానీ, {{ns:user}}:Foo/Vector.css ఇలా కాదు.",
+'userinvalidcssjstitle' => '<strong>హెచ్చరిక:</strong> "$1" అనే రూపు లేదు.
+అభిమత .css మరియు .js పుటల శీర్షికలు ఇంగ్లీషు చిన్నబడి అక్షరాల లోనే ఉండాలని గుర్తుంచుకోండి, ఉదాహరణకు ఇలా {{ns:user}}:Foo/vector.css అంతేగానీ, {{ns:user}}:Foo/Vector.css ఇలా కాదు.',
 'updated' => '(నవీకరించబడింది)',
-'note' => "'''గమనిక:'''",
-'previewnote' => "'''ఇది మునుజూపు మాత్రమేనని గుర్తుంచుకోండి.'''
-మీ మార్పులు ఇంకా భద్రమవ్వలేదు!",
+'note' => '<strong>గమనిక:</strong>',
+'previewnote' => '<strong>ఇది మునుజూపు మాత్రమేనని గుర్తుంచుకోండి.</strong>
+మీ మార్పులు ఇంకా భద్రమవ్వలేదు!',
 'continue-editing' => 'సరిదిద్దే చోటుకి వెళ్ళండి',
 'previewconflict' => 'భద్రపరచిన తరువాత పై టెక్స్ట్‌ ఏరియాలోని టెక్స్టు ఇలాగ కనిపిస్తుంది.',
-'session_fail_preview' => "'''క్షమించండి! సెషను డేటా పోవడం వలన మీ మార్పులను స్వీకరించలేకపోతున్నాం.'''
-దయà°\9aà±\87సి à°®à°³à±\8dà°³à±\80 à°ªà±\8dరయతà±\8dనిà°\82à°\9aà°\82à°¡à°¿.
-à°\85యినా à°ªà°¨à°¿ à°\9cà°°à°\95à±\8dà°\95à°ªà±\8bà°¤à±\87, à°\93సారి [[Special:UserLogout|నిషà±\8dà°\95à±\8dరమిà°\82à°\9aà°¿]] à°®à°³à±\8dà°³à±\80 à°²à±\8bనిà°\95à°¿ à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aà°¿ à°ªà±\8dరయతà±\8dనిà°\82à°\9aà°\82à°¡à°¿.",
-'session_fail_preview_html' => "'''సారీ! సెషను డేటా పోవడం వలన మీ దిద్దుబాటును ప్రాసెస్ చెయ్యలేలేక పోతున్నాం.'''
+'session_fail_preview' => '<strong>క్షమించండి! సెషను డేటా పోవడం వలన మీ మార్పులను స్వీకరించలేకపోతున్నాం.</strong>
+మళ్ళీ ప్రయత్నించండి.
+à°\85యినా à°ªà°¨à°¿ à°\9cà°°à°\95à±\8dà°\95à°ªà±\8bà°¤à±\87, à°\93సారి [[Special:UserLogout|లాà°\97à±\8cà°\9fà±\88]] à°®à°³à±\8dà°³à±\80 à°²à°¾à°\97ినయి à°ªà±\8dరయతà±\8dనిà°\82à°\9aà°\82à°¡à°¿.',
+'session_fail_preview_html' => "<strong>సారీ! సెషను డేటా పోవడం వలన మీ దిద్దుబాటును ప్రాసెస్ చెయ్యలేలేక పోతున్నాం.</strong>
 
 ''{{SITENAME}}లో ముడి HTML సశక్తమై ఉంది కాబట్టి, జావాస్క్రిప్టు దాడుల నుండి రక్షణగా మునుజూపును దాచేశాం.''
 
-'''మీరు చేసినది సరైన దిద్దుబాటే అయితే, మళ్ళీ ప్రయత్నించండి. అయినా పనిచెయ్యకపోతే, ఓ సారి లాగౌటయ్యి, మళ్ళీ లాగినయి చూడండి.'''",
+<strong>మీరు చేసినది సరైన దిద్దుబాటే అయితే, మళ్ళీ ప్రయత్నించండి. అయినా పనిచెయ్యకపోతే, ఓ సారి [[Special:UserLogout|లాగౌటై]], మళ్ళీ లాగినయి చూడండి.</strong>",
 'token_suffix_mismatch' => "'''మీ క్లయంటు, దిద్దుబాటు టోకెన్‌లోని వ్యాకరణ గుర్తులను గజిబిజి చేసింది కాబట్టి మీ దిద్దుబాటును తిరస్కరించాం. పేజీలోని పాఠ్యాన్ని చెడగొట్టకుండా ఉండేందుకు గాను, ఆ దిద్దుబాటును రద్దు చేశాం. వెబ్‌లో ఉండే లోపభూయిష్టమైన అజ్ఞాత ప్రాక్సీ సర్వీసులను వాడినపుడు ఒక్కోసారి ఇలా జరుగుతుంది.'''",
 'edit_form_incomplete' => '’’’ఈ ఎడిట్ ఫారంలోని కొన్ని భాగాలు సర్వరును చేరలేదు; మీ మార్పుచేర్పులు భద్రంగా ఉన్నాయని ధృవపరచుకుని, మళ్ళీ ప్రయత్నించండి.’’’',
-'editing' => '$1కి మార్పులు',
+'editing' => '$1 ని సవరిస్తున్నారు',
 'creating' => '$1 పేజీని సృష్టిస్తున్నారు',
-'editingsection' => '$1కు మార్పులు (విభాగం)',
-'editingcomment' => '$1 à°¦à°¿à°¦à±\8dà°¦à±\81బాà°\9fు (కొత్త విభాగం)',
+'editingsection' => '$1 ని సవరిస్తున్నారు (విభాగం)',
+'editingcomment' => '$1 à°¨à°¿ à°¸à°µà°°à°¿à°¸à±\8dà°¤à±\81à°¨à±\8dనారు (కొత్త విభాగం)',
 'editconflict' => 'దిద్దుబాటు ఘర్షణ: $1',
 'explainconflict' => "మీరు మార్పులు చెయ్యడం మొదలుపెట్టిన తరువాత, వేరే ఎవరో ఈ పుటని మార్పారు.
 పైన ఉన్న పాఠ్య పేటికలో ఈ పుట యొక్క ప్రస్తుతపు పాఠ్యం ఉంది.
@@ -912,26 +923,27 @@ $2
 మీరు \"{{int:savearticle}}\"ను నొక్కినపుడు, పై పాఠ్య పేటికలో ఉన్న పాఠ్యం '''మాత్రమే''' భద్రపరచబడుతుంది.",
 'yourtext' => 'మీ పాఠ్యం',
 'storedversion' => 'భద్రపరచిన కూర్పు',
-'nonunicodebrowser' => "'''WARNING: Your browser is not unicode compliant. A workaround is in place to allow you to safely edit pages: non-ASCII characters will appear in the edit box as hexadecimal codes.'''",
-'editingold' => "'''హెచ్చ రిక: ఈ పేజీ యొక్క కాలం చెల్లిన సంచికను మీరు మరుస్తున్నారు. దీనిని భద్రపరిస్తే, ఆ సంచిక తరువాత ఈ పేజీలో జరిగిన మార్పులన్నీ పోతాయి.'''",
+'nonunicodebrowser' => '<strong>హెచ్చరిక: మీ బ్రౌజరు యూనికోడుకు అనుకూలంగా లేదు.</strong>
+పేజీలను క్షేమంగా సవరించేందుకు ఓ దారి ఉంది: ASCII యేతర కారెక్టర్లు ఎడిట్ పెట్టెలో హెక్సాడెసిమల్ కోడ్‍లుగా కనిపిస్తాయి.',
+'editingold' => '<strong>హెచ్చ రిక: ఈ పేజీ యొక్క కాలం చెల్లిన సంచికను మీరు మరుస్తున్నారు.</strong> దీనిని భద్రపరిస్తే, ఆ సంచిక తరువాత జరిగిన మార్పులన్నీ పోతాయి.',
 'yourdiff' => 'తేడాలు',
-'copyrightwarning' => "{{SITENAME}}కు సమర్పించే అన్ని రచనలూ $2కు లోబడి ప్రచురింపబడినట్లుగా భావించబడతాయి (వివరాలకు $1 చూడండి). మీ రచనలను ఎవ్వరూ మార్చ రాదనీ లెదా వేరే ఎవ్వరూ వాడుకో రాదని మీరు భావిస్తే, ఇక్కడ ప్రచురించకండి.<br /> మీ స్వీయ రచనను గాని, సార్వజనీనమైన రచననుగాని, ఇతర ఉచిత వనరుల నుండి సేకరించిన రచననుగాని మాత్రమే ప్రచురిస్తున్నానని కూడా మీరు ప్రమాణం చేస్తున్నారు. '''కాపీహక్కులుగల రచనను తగిన అనుమతి లేకుండా సమర్పించకండి!'''",
-'copyrightwarning2' => "{{SITENAME}}లో ప్రచురించే రచనలన్నిటినీ ఇతర రచయితలు సరిదిద్దడం, మార్చడం, తొలగించడం చేసే అవకాశం ఉంది. మీ రచనలను అలా నిర్దాక్షిణ్యంగా దిద్దుబాట్లు చెయ్యడం మీకిష్టం లేకపోతే, వాటిని ఇక్కడ ప్రచురించకండి. <br />
-à°\88 à°°à°\9aననà±\81 à°®à±\80à°°à±\87 à°\9aà±\87సారని, à°²à±\87దా à°\8fà°¦à±\88నా à°¸à°¾à°°à±\8dà°µà°\9cనిà°\95 à°µà°¨à°°à±\81 à°¨à±\81à°\82à°¡à°¿ à°\95ాపà±\80 à°\9aà±\87సి à°¤à±\86à°\9aà±\8dà°\9aారని, à°²à±\87దా à°\85లాà°\82à°\9fà°¿ à°\89à°\9aà°¿à°¤, à°¸à±\8dà°µà±\87à°\9aà±\8dà°\9bà°¾ à°µà°¨à°°à±\81 à°¨à±\81à°\82à°¡ి తెచ్చారని మాకు వాగ్దానం చేస్తున్నారు. (వివరాలకు $1 చూడండి).
-'''తగు అనుమతులు లేకుండా కాపీ హక్కులు గల రచనలను సమర్పించకండి!'''",
-'longpageerror' => "'''పొరపాటు: మీరు సమర్పించిన పాఠ్యం, గరిష్ఠ పరిమితి అయిన {{PLURAL:$2|ఒక కిలోబైటుని|$2 కిలోబైట్లను}} మించి {{PLURAL:$1|ఒక కిలోబైటు|$1 కిలోబైట్ల}} పొడవుంది.'''
- దీన్ని భద్రపరచలేము.",
+'copyrightwarning' => '{{SITENAME}}కు సమర్పించే అన్ని రచనలూ $2కు లోబడి ప్రచురింపబడినట్లుగా భావించబడతాయి (వివరాలకు $1 చూడండి). మీ రచనలను ఎవ్వరూ మార్చ రాదనీ లెదా వేరే ఎవ్వరూ వాడుకో రాదని మీరు భావిస్తే, ఇక్కడ ప్రచురించకండి.<br /> మీ స్వీయ రచనను గాని, సార్వజనీనమైన రచననుగాని, ఇతర ఉచిత వనరుల నుండి సేకరించిన రచననుగాని మాత్రమే ప్రచురిస్తున్నానని కూడా మీరు ప్రమాణం చేస్తున్నారు. <strong>కాపీహక్కులుగల రచనను తగిన అనుమతి లేకుండా సమర్పించకండి!</strong>',
+'copyrightwarning2' => '{{SITENAME}}లో ప్రచురించే రచనలన్నిటినీ ఇతర రచయితలు సరిదిద్దడం, మార్చడం, తొలగించడం జరగవచ్చు. మీ రచనలను అలా నిర్దాక్షిణ్యంగా దిద్దుబాట్లు చెయ్యడం మీకిష్టం లేకపోతే, వాటిని ఇక్కడ ప్రచురించకండి. <br />
+à°\85లాà°\97à±\87, à°\88 à°°à°\9aననà±\81 à°®à±\80à°°à±\87 à°\9aà±\87సారని, à°²à±\87దా à°\8fà°¦à±\88నా à°¸à°¾à°°à±\8dà°µà°\9cనిà°\95 à°µà°¨à°°à±\81 à°¨à±\81à°\82à°¡à°¿ à°\97ానà±\80, à°\85లాà°\82à°\9fà°¿ à°\89à°\9aà°¿à°¤, à°¸à±\8dà°µà±\87à°\9aà±\8dà°\9bà°¾ à°µà°¨à°°à±\81 à°¨à±\81à°\82à°¡à°¿ à°\97ానà±\80 à°\95ాపà±\80 à°\9aà±\87à°¸ి తెచ్చారని మాకు వాగ్దానం చేస్తున్నారు. (వివరాలకు $1 చూడండి).
+<strong>తగు అనుమతులు లేకుండా కాపీ హక్కులు గల రచనలను సమర్పించకండి!</strong>',
+'longpageerror' => '<strong>లోపం: మీరు సమర్పించిన పాఠ్యం {{PLURAL:$1|ఒక కిలోబైటు|$1 కిలోబైట్ల}} నిడివి కలిగి ఉంది. ఇది గరిష్ఠ పరిమితి అయిన {{PLURAL:$2|ఒక కిలోబైటుని|$2 కిలోబైట్లను}} మించింది.</strong>
+ దీన్ని భద్రపరచలేము.',
 'readonlywarning' => '<strong>హెచ్చరిక: నిర్వహణ కొరకు డేటాబేసుకి తాళం వేసారు. కాబట్టి మీ మార్పుచేర్పులను ఇప్పుడు భద్రపరచలేరు.</strong> 
 మీ మార్పులను ఒక ఫాఠ్య ఫైలులోకి కాపీ చేసి భద్రపరచుకొని, తరువాత సమర్పించండి.
 
 తాళం వేసిన నిర్వాహకుడి వివరణ ఇదీ: $1',
-'protectedpagewarning' => "'''హెచ్చరిక: ఈ పేజీ సంరక్షించబడినది, కనుక నిర్వాహక అనుమతులు ఉన్న వాడుకరులు మాత్రమే మార్చగలరు.'''
-à°\9aివరి à°\9aà°¿à°\9fà±\8dà°\9fà°¾ à°ªà°¦à±\8dà°¦à±\81ని à°®à±\80 à°¸à°®à°¾à°\9aారà°\82 à°\95à±\8bà°¸à°\82 à°\87à°\95à±\8dà°\95à°¡ à°\87à°¸à±\8dà°¤à±\81à°¨à±\8dనాà°\82:",
-'semiprotectedpagewarning' => "'''గమనిక:''' నమోదయిన వాడుకరులు మాత్రమే మార్పులు చెయ్యగలిగేలా ఈ పేజీకి సంరక్షించారు.
-à°®à±\80 à°¸à°®à°¾à°\9aారà°\82 à°\95à±\8bà°¸à°\82 à°\9aివరి à°\9aà°¿à°\9fà±\8dà°\9fà°¾ à°ªà°¦à±\8dà°¦à±\81ని à°\87à°\95à±\8dà°\95à°¡ à°\87à°¸à±\8dà°¤à±\81à°¨à±\8dనాà°\82:",
-'cascadeprotectedwarning' => "'''హెచ్చరిక:''' ఈ పేజీ, కాస్కేడింగు రక్షణలో ఉన్న కింది {{PLURAL:$1|పేజీ|పేజీల్లో}} ఇంక్లూడు అయి ఉంది కాబట్టి, నిర్వాహకులు తప్ప ఇతరులు దిద్దుబాటు చేసే వీలు లేకుండా పేజీని లాకు చేసాం:",
-'titleprotectedwarning' => "హెచ్చరిక:  ఈ పేజీని సంరక్షించారు కాబట్టి దీన్ని సృష్టించడానికి [[Special:ListGroupRights|ప్రత్యేక హక్కులు]] ఉండాలి.'''
-మీ సమాచారం కోసం చివరి చిట్టా పద్దుని ఇక్కడ ఇస్తున్నాం:",
+'protectedpagewarning' => '<strong>హెచ్చరిక: ఈ పేజీ సంరక్షించబడింది. కాబట్టి నిర్వాహక అనుమతులు ఉన్న వాడుకరులు మాత్రమే మార్చగలరు.</strong>
+à°\9aివరి à°²à°¾à°\97à±\8d à°ªà°¦à±\8dà°¦à±\81à°¨à±\81 à°®à±\80 à°¸à°®à°¾à°\9aారà°\82 à°\95à±\8bà°¸à°\82 à°\87à°\95à±\8dà°\95à°¡ à°\87à°¸à±\8dà°¤à±\81à°¨à±\8dనాà°\82:',
+'semiprotectedpagewarning' => '<strong>గమనిక:</strong> నమోదయిన వాడుకరులు మాత్రమే మార్పులు చెయ్యగలిగేలా ఈ పేజీకి సంరక్షించారు.
+à°®à±\80 à°¸à°®à°¾à°\9aారà°\82 à°\95à±\8bà°¸à°\82 à°\9aివరి à°²à°¾à°\97à±\8d à°ªà°¦à±\8dà°¦à±\81ని à°\87à°\95à±\8dà°\95à°¡ à°\87à°¸à±\8dà°¤à±\81à°¨à±\8dనాà°\82:',
+'cascadeprotectedwarning' => "'''హెచ్చరిక:''' ఈ పేజీ, కాస్కేడింగు రక్షణలో ఉన్న కింది {{PLURAL:$1|పేజీ|పేజీల్లో}} ఇంక్లూడు అయి ఉంది కాబట్టి, నిర్వాహకులు తప్ప ఇతరులు దిద్దుబాటు చేసే వీలు లేకుండా {{PLURAL:$1|పేజీని|పేజీలను}} లాకు చేసాం:",
+'titleprotectedwarning' => '<strong>హెచ్చరిక: ఈ పేజీని సంరక్షించారు కాబట్టి దీన్ని సృష్టించడానికి [[Special:ListGroupRights|ప్రత్యేక హక్కులు]] ఉండాలి.</strong>
+మీ సమాచారం కోసం చివరి చిట్టా పద్దుని ఇక్కడ ఇస్తున్నాం:',
 'templatesused' => 'ఈ పేజీలో వాడిన {{PLURAL:$1|మూస|మూసలు}}:',
 'templatesusedpreview' => 'ఈ మునుజూపులో వాడిన {{PLURAL:$1|మూస|మూసలు}}:',
 'templatesusedsection' => 'ఈ విభాగంలో వాడిన {{PLURAL:$1|మూస|మూసలు}}:',
@@ -941,30 +953,30 @@ $2
 'nocreatetext' => '{{SITENAME}}లో కొత్త పేజీలు సృష్టించడాన్ని నియంత్రించారు.
 మీరు వెనక్కి వెళ్ళి వేరే పేజీలు మార్చవచ్చు, లేదా [[Special:UserLogin|లోనికి ప్రవేశించండి లేదా ఖాతా సృష్టించుకోండి]].',
 'nocreate-loggedin' => 'కొత్త పేజీలను సృష్టించేందుకు మీకు అనుమతి లేదు.',
-'sectioneditnotsupported-title' => 'విభాà°\97à°ªà±\81 à°¦à°¿à°¦à±\8dదిబాà°\9fà±\8dà°²à°\95à°¿ à°¤à±\8aడ్పాటు లేదు',
+'sectioneditnotsupported-title' => 'విభాà°\97à°ªà±\81 à°¦à°¿à°¦à±\8dà°¦à±\81బాà°\9fà±\8dà°²à°\95à±\81 à°¤à±\8bడ్పాటు లేదు',
 'sectioneditnotsupported-text' => 'ఈ పేజీలో విభాగాల దిద్దుబాటుకి తోడ్పాటు లేదు.',
 'permissionserrors' => 'అనుమతి లోపం',
 'permissionserrorstext' => 'కింద పేర్కొన్న {{PLURAL:$1|కారణం|కారణాల}} మూలంగా, ఆ పని చెయ్యడానికి మీకు అనుమతిలేదు:',
-'permissionserrorstext-withaction' => 'ఈ క్రింది {{PLURAL:$1|కారణం|కారణాల}} వల్ల, మీకు $2 అనుమతి లేదు:',
-'recreate-moveddeleted-warn' => "'''హెచ్చరిక: ఇంతకు మునుపు ఒకసారి తొలగించిన పేజీని మళ్లీ సృష్టిద్దామని మీరు ప్రయత్నిస్తున్నారు.'''
+'permissionserrorstext-withaction' => 'ఈ క్రింది {{PLURAL:$1|కారణం|కారణాల}} వల్ల, $2 అనుమతి మీకు లేదు:',
+'recreate-moveddeleted-warn' => '<strong>హెచ్చరిక: ఇంతకు మునుపు ఒకసారి తొలగించిన పేజీని మళ్లీ సృష్టిద్దామని మీరు ప్రయత్నిస్తున్నారు.</strong>
 
 ఈ పేజీపై మార్పులు చేసేముందు, అవి ఇక్కడ ఉండతగినవేనా కాదా అని ఒకసారి ఆలోచించండి.
-మీ సౌలభ్యం కొరకు ఈ పేజీ యొక్క తొలగింపు మరియు తరలింపు చిట్టా ఇక్కడ ఇచ్చాము:",
+మీ సౌలభ్యం కొరకు ఈ పేజీ యొక్క తొలగింపు మరియు తరలింపు చిట్టా ఇక్కడ ఇచ్చాము:',
 'moveddeleted-notice' => 'ఈ పేజీని తొలగించారు.
 సమాచారం కొరకు ఈ పేజీ యొక్క తొలగింపు మరియు తరలింపు చిట్టాని క్రింద ఇచ్చాం.',
 'log-fulllog' => 'పూర్తి చిట్టాని చూడండి',
-'edit-hook-aborted' => 'కొక్కెం మార్పుని విచ్ఛిన్నం చేసింది.
+'edit-hook-aborted' => 'à°\95à±\8aà°\95à±\8dà°\95à±\86à°\82 à°\88 à°®à°¾à°°à±\8dà°ªà±\81ని à°µà°¿à°\9aà±\8dà°\9bà°¿à°¨à±\8dà°¨à°\82 à°\9aà±\87సిà°\82ది.
 అది ఎటువంటి వివరణా ఇవ్వలేదు.',
-'edit-gone-missing' => 'à°ªà±\87à°\9cà±\80ని à°®à°¾à°°à±\8dà°\9aà°²à±\87à°®à±\81.
-à°¦à±\80న్ని తొలగించినట్టున్నారు.',
-'edit-conflict' => 'మారà±\8dà°ªà±\81 à°¸à°\82ఘర్షణ.',
-'edit-no-change' => 'పాఠà±\8dà°¯à°\82à°²à±\8b à°\8fà°®à±\80 à°®à°¾à°°à±\8dà°ªà±\81à°²à±\81 à°²à±\87à°µà±\81 à°\97à°¨à°\95, à°®à±\80 à°®à°¾à°°à±\8dà°ªà±\81ని పట్టించుకోవట్లేదు.',
+'edit-gone-missing' => 'à°ªà±\87à°\9cà±\80ని à°¤à°¾à°\9cà°¾à°\95à°°à°¿à°\82à°\9aà°²à±\87à°\95à°ªà±\8bయాà°\82.
+దాన్ని తొలగించినట్టున్నారు.',
+'edit-conflict' => 'దిదà±\8dà°¦à±\81బాà°\9fà±\81 ఘర్షణ.',
+'edit-no-change' => 'పాఠà±\8dà°¯à°\82à°²à±\8b à°®à°¾à°°à±\8dà°ªà±\81à°²à±\87à°®à±\80 à°\9aà±\86à°¯à±\8dయలà±\87à°¦à±\81 à°\95ాబà°\9fà±\8dà°\9fà°¿, à°®à±\80 à°®à°¾à°°à±\8dà°ªà±\81à°¨à±\81 పట్టించుకోవట్లేదు.',
 'postedit-confirmation' => 'మీ మార్పు భద్రమయ్యింది.',
-'edit-already-exists' => 'à°\95à±\8aà°¤à±\8dà°¤ à°ªà±\87à°\9cà±\80ని à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°\9aà°²à±\87à°®à±\81.
+'edit-already-exists' => 'à°\95à±\8aà°¤à±\8dà°¤ à°ªà±\87à°\9cà±\80ని à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°\9aà°²à±\87à°\95à°ªà±\8bయాà°\82.
 అది ఇప్పటికే ఉంది.',
 'defaultmessagetext' => 'అప్రమేయ సందేశపు పాఠ్యం',
 'content-failed-to-parse' => '$1 మోడల్ కొరకు $2 పాఠ్యాన్ని పార్స్ చెయ్యలేకపోయాం: $3',
-'invalid-content-data' => 'తపà±\8dà°ªà±\81à°¡à±\81 à°µà°¿à°·à°¯à°\82',
+'invalid-content-data' => 'à°\9aà±\86à°²à±\8dలని à°\95à°\82à°\9fà±\86à°\82à°\9fà±\81 à°¡à±\87à°\9fà°¾',
 'content-not-allowed-here' => '[[$2]] పేజీలో పాఠ్యం "$1" కి అనుమతి లేదు',
 'editwarning-warning' => 'ఈ పేజీని వదిలివెళ్ళడం వల్ల మీరు చేసిన మార్పులను కోల్పోయే అవకాశం ఉంది.
 మీరు లాగిన్ అయివుంటే, ఈ హెచ్చరికని మీ అభిరుచులలోని "{{int:prefs-editing}}"  విభాగంలో అచేతనం చేసుకోవచ్చు.',
@@ -978,25 +990,33 @@ $2
 'content-model-css' => 'CSS',
 
 # Parser/template warnings
-'expensive-parserfunction-warning' => 'హెచ్చరిక: ఈ పేజీలో ఖరీదైన పార్సరు పిలుపులు చాలా ఉన్నాయి.
+'expensive-parserfunction-warning' => '<strong>హెచ్చరిక:</strong> ఈ పేజీలో ఖరీదైన పార్సరు పిలుపులు చాలా ఉన్నాయి.
 
 పార్సరు {{PLURAL:$2|పిలుపు|పిలుపులు}} $2 కంటే తక్కువ ఉండాలి,  ప్రస్తుతం {{PLURAL:$1|$1 పిలుపు ఉంది|$1  పిలుపులు ఉన్నాయి}}.',
 'expensive-parserfunction-category' => 'పార్సరు సందేశాలు అధికంగా ఉన్న పేజీలు',
-'post-expand-template-inclusion-warning' => "'''హెచ్చరిక''': మూస చేర్పు సైజు చాలా పెద్దదిగా ఉంది.
-à°\95à±\8aà°¨à±\8dని à°®à±\82సలనà±\81 à°\9aà±\87à°°à±\8dà°\9aà°²à±\87à°¦à±\81.",
+'post-expand-template-inclusion-warning' => '<strong>హెచ్చరిక:</strong> మూస ఇముడ్పు సైజు చాలా పెద్దదిగా ఉంది.
+à°\95à±\8aà°¨à±\8dని à°®à±\82సలà±\81 à°\87మడà±\8dà°\9aబడవà±\81.',
 'post-expand-template-inclusion-category' => 'మూస చేర్పు సైజును అధిగమించిన పేజీలు',
-'post-expand-template-argument-warning' => 'హెచ్చరిక: చాల పెద్ద సైజున్న మూస ఆర్గ్యుమెంటు, కనీసం ఒకటి, ఈ పేజీలో ఉంది.
+'post-expand-template-argument-warning' => '<strong>హెచ్చరిక:</strong> చాల పెద్ద సైజున్న మూస ఆర్గ్యుమెంటు, కనీసం ఒకటి, ఈ పేజీలో ఉంది.
 ఈ ఆర్గ్యుమెంట్లను వదలివేసాం.',
 'post-expand-template-argument-category' => 'తొలగించిన మూస ఆర్గ్యుమెంట్లు ఉన్న పేజీలు',
 'parser-template-loop-warning' => 'మూస లూపు కనబడింది: [[$1]]',
 'parser-template-recursion-depth-warning' => 'మూస రికర్షను లోతు అధిగమించబడింది ($1)',
 'language-converter-depth-warning' => 'భాషా మార్పిడి లోతు పరిమితిని అధిగమించారు ($1)',
+'node-count-exceeded-category' => 'నోడ్-కౌంటును మించిన పేజీలు',
+'node-count-exceeded-warning' => 'పేజీ నోడ్-కౌంటును మించింది',
+'expansion-depth-exceeded-category' => 'విస్తరణ లోతును మించిన పేజీలు',
+'expansion-depth-exceeded-warning' => 'పేజీ విస్తరణ లోతును మించింది',
+'parser-unstrip-loop-warning' => 'Unstrip లూపును కనుక్కున్నాం',
+'parser-unstrip-recursion-limit' => 'Unstrip రికర్షన్ పరిమితిని దాటింది ($1)',
+'converter-manual-rule-error' => 'మానవిక భాషాంతరీకరణ పరికరంలో లోపాన్ని కనుక్కున్నాం',
 
 # "Undo" feature
 'undo-success' => 'దిద్దుబాటును రద్దు చెయ్యవచ్చు. కింది పోలికను చూసి, మీరు చెయ్యదలచినది ఇదేనని నిర్ధారించుకోండి. ఆ తరువాత మార్పులను భద్రపరచి దిద్దుబాటు రద్దును పూర్తి చెయ్యండి.',
 'undo-failure' => 'మధ్యలో జరిగిన దిద్దుబాట్లతో తలెత్తిన ఘర్షణ కారణంగా ఈ దిద్దుబాటును రద్దు చెయ్యలేక పోయాం.',
-'undo-norev' => 'ఈ దిద్దుబాటును అసలు లేకపోవటం వలన, లేదా తొలగించేయడం వలన రద్దుచేయలేకపోతున్నాం.',
-'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|చర్చ]]) దిద్దుబాటు చేసిన కూర్పు $1 ను రద్దు చేసారు',
+'undo-norev' => 'ఈ దిద్దుబాటు అసలు లేకపోవటం వలన గానీ, లేదా తొలగించేయడం వలన గానీ దాన్ని రద్దుచేయలేకపోతున్నాం.',
+'undo-nochange' => 'ఆ మార్పును ఈసరికే రద్దు చేసినట్లుగా కనిపిస్తోంది.',
+'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|చర్చ]]) యొక్క కూర్పు $1 ను రద్దుచెయ్యి',
 'undo-summary-username-hidden' => 'దాచబడిన వాడుకరి చేసిన కూర్పు $1 ని వెనక్కి తిప్పండి',
 
 # Account creation failure
@@ -1012,30 +1032,30 @@ $3 ఇచ్చిన కారణం: ''$2''",
 'viewpagelogs' => 'ఈ పేజీకి సంబంధించిన లాగ్‌లను చూడండి',
 'nohistory' => 'ఈ పేజీకి మార్పుల చరిత్ర లేదు.',
 'currentrev' => 'ప్రస్తుతపు సంచిక',
-'currentrev-asof' => '$1 à°¨à°¾à°\9fà°¿ à°ªà±\8dà°°à°¸à±\8dà°¤à±\81à°¤ కూర్పు',
-'revisionasof' => '$1 à°¨à°¾à°\9fà°¿ à°¸à°\82à°\9aà°¿à°\95',
+'currentrev-asof' => '$1 à°¨à°¾à°\9fà°¿ à°\9aà°¿à°\9fà±\8dà°\9fà°\9aివరి కూర్పు',
+'revisionasof' => '$1 à°¨à°¾à°\9fà°¿ à°\95à±\82à°°à±\8dà°ªà±\81',
 'revision-info' => '$1 నాటి కూర్పు. రచయిత: $2',
 'previousrevision' => '← పాత కూర్పు',
-'nextrevision' => 'à°¦à±\80ని à°¤à°°à±\81వాతి à°¸à°\82à°\9aà°¿à°\95→',
-'currentrevisionlink' => 'ప్రస్తుతపు సంచిక',
+'nextrevision' => 'తరà±\81వాతి à°\95à±\82à°°à±\8dà°ªà±\81 →',
+'currentrevisionlink' => 'ప్రస్తుత కూర్పు',
 'cur' => 'ప్రస్తుత',
-'next' => 'తరà±\8dవాతి',
+'next' => 'తరà±\81వాతి',
 'last' => 'గత',
 'page_first' => 'మొదటి',
 'page_last' => 'చివరి',
 'histlegend' => 'తేడా ఎంపిక: సంచికల యొక్క రేడియో బాక్సులను ఎంచుకొని ఎంటర్‌ నొక్కండి, లేదా పైన/ కింద ఉన్న మీటను నొక్కండి.<br />
-సూచిక: (ప్రస్తుత) = ప్రస్తుత సంచికతో కల తేడాలు, (గత) = ఇంతకు ముందరి సంచికతో గల తేడాలు, చి = చిన్న మార్పు',
-'history-fieldset-title' => 'చరిత్రలో చూడండి',
+సూచిక: <strong>({{int:cur}})</strong> = ప్రస్తుత సంచికతో కల తేడాలు, <strong>({{int:last}})</strong> = ఇంతకు ముందరి సంచికతో గల తేడాలు, <strong>{{int:minoreditletter}}</strong> = చిన్న మార్పు',
+'history-fieldset-title' => 'చరిత్ర చూడండి',
 'history-show-deleted' => 'తొలగించినవి మాత్రమే',
-'histfirst' => 'à°¤à±\8aà°\9fà±\8dà°\9fà°¤à±\8aà°²ి',
-'histlast' => 'à°\9aà°¿à°\9fà±\8dà°\9fà°\9aివరి',
+'histfirst' => 'à°\85తి à°ªà°¾à°¤à°µి',
+'histlast' => 'సరిà°\95à±\8aà°¤à±\8dà°¤',
 'historysize' => '({{PLURAL:$1|ఒక బైటు|$1 బైట్లు}})',
 'historyempty' => '(ఖాళీ)',
 
 # Revision feed
 'history-feed-title' => 'కూర్పుల చరిత్ర',
 'history-feed-description' => 'ఈ పేజీకి వికీలో కూర్పుల చరిత్ర',
-'history-feed-item-nocomment' => '$2 à°µà°¦à±\8dà°¦ à°\89à°¨à±\8dà°¨ $1',
+'history-feed-item-nocomment' => '$2 న $1',
 'history-feed-empty' => 'మీరడిగిన పేజీ లేదు.
 దాన్ని వికీలోంచి తొలగించి ఉండొచ్చు, లేదా పేరు మార్చి ఉండొచ్చు.
 సంబంధిత కొత్త పేజీల కోసం [[Special:Search|వికీలో వెతికి చూడండి]].',
@@ -1045,8 +1065,8 @@ $3 ఇచ్చిన కారణం: ''$2''",
 'rev-deleted-user' => '(వాడుకరి పేరుని తొలగించారు)',
 'rev-deleted-event' => '(దినచర్యని తొలగించాం)',
 'rev-deleted-user-contribs' => '[వాడుకరిపేరు లేదా ఐపీ చిరునామాని తొలగించారు  - మార్పుచేర్పుల నుండి మార్పుని దాచారు]',
-'rev-deleted-text-permission' => "ఈ పేజీ కూర్పుని '''తొలగించారు'''.
-[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à°¤à±\8aà°²à°\97à°¿à°\82à°ªà±\81 à°\9aà°¿à°\9fà±\8dà°\9fà°¾]à°²à±\8b à°ªà±\82à°°à±\8dతి à°µà°¿à°µà°°à°¾à°²à±\81 à°\89à°\82à°¡à°µà°\9aà±\8dà°\9aà±\81.",
+'rev-deleted-text-permission' => 'ఈ పేజీ కూర్పుని <strong>తొలగించారు</strong>.
+[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à°¤à±\8aà°²à°\97à°¿à°\82à°ªà±\81 à°\9aà°¿à°\9fà±\8dà°\9fà°¾]à°²à±\8b à°ªà±\82à°°à±\8dతి à°µà°¿à°µà°°à°¾à°²à±\81 à°\9aà±\82à°¡à°µà°\9aà±\8dà°\9aà±\81.',
 'rev-deleted-text-unhide' => "పేజీ యొక్క ఈ కూర్పును '''తొలగించాం'''.
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} తొలగింపు చిట్టా]లో వివరాలు చూడవచ్చు.
 మీరు కావాలనుకుంటే, [$1 ఈ కూర్పుని చూడవచ్చు].",
@@ -1057,8 +1077,8 @@ $3 ఇచ్చిన కారణం: ''$2''",
 మీరు దాన్ని చూడవచ్చు; [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} తొలగింపు చిట్టా]లో వివరాలు దొరుకుతాయి.',
 'rev-suppressed-text-view' => 'ఈ పేజీకూర్పును <strong>అణచి పెట్టాం</strong>.
 మీరు దాన్ని చూడవచ్చు; [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} అణచివేత చిట్టా]లోవివరాలు ఉంటాయి.',
-'rev-deleted-no-diff' => "మీరు తేడాలను చూడలేదు ఎందుకంటే ఒక కూర్పుని '''తొలగించారు'''.
-[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à°¤à±\8aà°²à°\97à°¿à°\82à°ªà±\81 à°\9aà°¿à°\9fà±\8dà°\9fà°¾]à°²à±\8b à°µà°¿à°µà°°à°¾à°²à±\81 à°\89à°\82à°¡à°µà°\9aà±\8dà°\9aà±\81.",
+'rev-deleted-no-diff' => 'మీరు ఈ తేడాను చూడలేరు. ఎందుకంటే ఒక కూర్పు <strong>తొలగించబడింది</strong>.
+[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à°¤à±\8aà°²à°\97à°¿à°\82à°ªà±\81 à°\9aà°¿à°\9fà±\8dà°\9fà°¾]à°²à±\8b à°µà°¿à°µà°°à°¾à°²à±\81 à°\9aà±\82à°¡à°µà°\9aà±\8dà°\9aà±\81.',
 'rev-suppressed-no-diff' => "ఈ తేడాని మీరు చూడలేరు ఎందుకంటే ఒక కూర్పుని '''తొలగించారు'''.",
 'rev-deleted-unhide-diff' => 'ఈ తేడాల యొక్క కూర్పులలో ఒకదాన్ని <strong>తొలగించారు</strong>.
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} తొలగింపు చిట్టా]లో వివరాలు ఉంటాయి.
@@ -1070,41 +1090,39 @@ $3 ఇచ్చిన కారణం: ''$2''",
 మీరు ఈ తేడాను చూడవచ్చు; [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} తొలగింపు చిట్టా]లోవివరాలు ఉంటాయి.',
 'rev-suppressed-diff-view' => 'ఈ తేడా లోని ఒక కూర్పును <strong>అణచి పెట్టాం</strong>.
 మీరు ఈ తేడాను చూడవచ్చు; [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} అణచివేత చిట్టా]లోవివరాలు ఉంటాయి.',
-'rev-delundel' => 'à°\9aà±\82పిà°\82à°\9aà±\81/దాచు',
+'rev-delundel' => 'à°¦à±\83à°¶à±\8dయతనà±\81 à°®à°¾à°°à±\8dచు',
 'rev-showdeleted' => 'చూపించు',
 'revisiondelete' => 'కూర్పులను తొలగించు/తొలగింపును రద్దుచెయ్యి',
 'revdelete-nooldid-title' => 'తప్పుడు లక్ష్యపు కూర్పు',
 'revdelete-nooldid-text' => 'ఈ పని ఏ కూర్పు లేదా కూర్పుల మీద చెయ్యాలో మీరు సూచించలేదు, లేదా మీరు సూచించిన కూర్పు లేదు, లేదా ప్రస్తుత కూర్పునే దాచాలని ప్రయత్నిస్తున్నారు.',
-'revdelete-no-file' => 'à°\86 à°ªà±\87à°°à±\8dà°\95à±\8aà°¨à±\8dà°¨ à°«à±\88à°²à±\81 à°\89నిà°\95à°¿à°²à±\8b à°²à±\87à°¦à±\81.',
+'revdelete-no-file' => 'పేర్కొన్న ఫైలు ఉనికిలో లేదు.',
 '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-selected' => '<strong>[[:$1]] యొక్క {{PLURAL:$2|ఎంచుకున్న కూర్పు|ఎంచుకున్న కూర్పులు}}:</strong>',
+'logdelete-selected' => '<strong>{{PLURAL:$1|ఎంచుకున్న చిట్టా ఘటన|ఎంచుకున్న చిట్టా ఘటనలు}}:</strong>',
+'revdelete-confirm' => 'మీరు దీన్ని చేయగోరుతున్నారనీ, దీని పర్యవసానాలు మీకు తెలుసుననీ, దీన్ని సంబంధిత [[{{MediaWiki:Policy-url}}|విధానం]] ప్రకారమే చేస్తున్నారనీ నిర్ధారించండి.',
 'revdelete-suppress-text' => 'అణచివేతను కింది సందర్భాలలో <strong>మాత్రమే</strong> వాడాలి:
 * బురదజల్లే ధోరణిలో ఉన్న సమాచారం
 * అనుచితమైన వ్యక్తిగత సమాచారం
 *<em>ఇంటి చిరునామాలు, టెలిఫోను నంబర్లు, జాతీయ ఐడీ నంబర్లు, వగైరాలు</em>',
 'revdelete-legend' => 'సందర్శక నిబంధనలు అమర్చు',
-'revdelete-hide-text' => 'à°ªà±\81à°¨à°\83పరిశà±\80లన పాఠ్యం',
+'revdelete-hide-text' => 'à°\95à±\82à°°à±\8dà°ªà±\81 పాఠ్యం',
 'revdelete-hide-image' => 'ఫైలులోని విషయాన్ని దాచు',
 'revdelete-hide-name' => 'చర్యను, లక్ష్యాన్నీ దాచు',
 'revdelete-hide-comment' => 'దిద్దుబాటు సారాంశం',
-'revdelete-hide-user' => 'దిద్దుబాటు చేసినవారి వాడుకరి పేరు/ఐపీ చిరునామా',
+'revdelete-hide-user' => 'దిద్దుబాటు చేసిన వాడుకరి పేరు/ఐపీ చిరునామా',
 'revdelete-hide-restricted' => 'డేటాను అందరిలాగే నిర్వాహకులకు కూడా కనబడనివ్వకు',
 'revdelete-radio-same' => '(మార్చకు)',
-'revdelete-radio-set' => 'దాà°\9aà°¿à°¨',
-'revdelete-radio-unset' => 'à°\9aà±\82పిన',
+'revdelete-radio-set' => 'దాà°\9aà±\81',
+'revdelete-radio-unset' => 'à°\9aà±\82పిà°\82à°\9aà±\81',
 'revdelete-suppress' => 'డేటాను అందరిలాగే నిర్వాహకులకు కూడా కనబడనివ్వకు',
 'revdelete-unsuppress' => 'పునస్థాపిత కూర్పులపై నిబంధనలను తీసివెయ్యి',
 'revdelete-log' => 'కారణం:',
 'revdelete-submit' => 'ఎంచుకున్న {{PLURAL:$1|కూర్పుకు|కూర్పులకు}} ఆపాదించు',
-'revdelete-success' => "'''కూర్పు కనబడే విధానాన్ని జయప్రదంగా తాజాకరించాం.'''",
-'revdelete-failure' => "'''కూర్పు కనబడే పద్ధతిని తాజాపరచలేకపోయాం:'''
-$1",
-'logdelete-success' => "'''ఘటన కనబడే విధానాన్ని జయప్రదంగా సెట్ చేసాం.'''",
+'revdelete-success' => '<strong>కూర్పు కనబడే విధానాన్ని జయప్రదంగా తాజాకరించాం.</strong>',
+'revdelete-failure' => '<strong>కూర్పు కనబడే పద్ధతిని తాజాపరచలేకపోయాం:</strong>
+$1',
+'logdelete-success' => '<strong>ఘటన కనబడే విధానాన్ని జయప్రదంగా సెట్ చేసాం.</strong>',
 'logdelete-failure' => "'''చిట్టా కనబడే పద్ధతిని అమర్చలేకపోయాం:'''
 $1",
 'revdel-restore' => 'దృశ్యతని మార్చు',
@@ -1119,7 +1137,7 @@ $1",
 'revdelete-modify-missing' => '$1 అంశాన్ని మార్చడంలో లోపం దొర్లింది: ఇది డేటాబేసులో కనబడలేదు!',
 'revdelete-no-change' => "'''హెచ్చరిక:''' $2, $1 నాటి అంశానికి మీరడిగిన చూపు అమరికలన్నీ ఈసరికే ఉన్నాయి.",
 'revdelete-concurrent-change' => '$2, $1 నాటి అంశాన్ని మార్చడంలో లోపం దొర్లింది: మీరు మార్చడానికి ప్రయత్నించిన సమయంలోనే వేరొకరు దాని స్థితిని మార్చినట్లుగా కనిపిస్తోంది. ఓసారి లాగ్‌లను చూడండి.',
-'revdelete-only-restricted' => '$2, $1 తేదీ గల అంశాన్ని దాచడంలో పొరపాటు: ఇతర దృశ్యత వికల్పాల్లోంచి ఒకదాన్ని ఎంచుకోకుండా అంశాలని నిర్వాహకులకు కనబడకుండా అణచివెయ్యలేరు.',
+'revdelete-only-restricted' => '$1 $2 తేదీ గల అంశాన్ని దాచడంలో లోపం: ఇతర దృశ్యత వికల్పాల్లోంచి ఒకదాన్ని ఎంచుకోకుండా నిర్వాహకులకు కనబడకుండా అంశాలను అణచిపెట్టలేరు.',
 'revdelete-reason-dropdown' => '*సాధారణ తొలగింపు కారణాలు
 ** కాపీహక్కుల ఉల్లంఘన
 ** అసంబద్ధ వ్యాఖ్య లేదా వ్యక్తిగత సమాచారం
@@ -1159,43 +1177,43 @@ $1",
 'mergehistory-reason' => 'కారణం:',
 
 # Merge log
-'mergelog' => 'à°µà±\80లీనాల చిట్టా',
+'mergelog' => 'విలీనాల చిట్టా',
 'pagemerge-logentry' => '[[$1]] ను [[$2]] లోకి విలీనం చేసాం ($3 కూర్పు దాకా)',
 'revertmerge' => 'విలీనాన్ని రద్దుచెయ్యి',
 'mergelogpagetext' => 'ఒక పేజీ చరితాన్ని మరో పేజీ చరితం లోకి ఇటీవల చేసిన విలీనాల జాబితా ఇది.',
 
 # Diffs
 'history-title' => '"$1" యొక్క కూర్పుల చరిత్ర',
-'difference-title' => '"$1" à°¯à±\8aà°\95à±\8dà°\95 à°¤à°¿à°°à°¿à°\97à°¿à°\9aà±\82à°ªà±\81à°² à°¨à°¡à±\81à°® తేడాలు',
+'difference-title' => '"$1" à°¯à±\8aà°\95à±\8dà°\95 à°\95à±\82à°°à±\8dà°ªà±\81à°² à°®à°§à±\8dà°¯ తేడాలు',
 'difference-title-multipage' => '"$1" మరియు "$2" పేజీల మధ్య తేడా',
 'difference-multipage' => '(పేజీల మధ్య తేడా)',
 'lineno' => 'పంక్తి $1:',
 'compareselectedversions' => 'ఎంచుకున్న సంచికలను పోల్చిచూడు',
 'showhideselectedversions' => 'ఎంచుకున్న కూర్పులను చూపించు/దాచు',
-'editundo' => 'మారà±\8dà°ªà±\81ని à°°à°¦à±\8dà°¦à±\81à°\9aà±\86à°¯à±\8dయి',
+'editundo' => 'రద్దుచెయ్యి',
 'diff-empty' => '(తేడా లేదు)',
 'diff-multi-sameuser' => '(ఇదే వాడుకరి యొక్క {{PLURAL:$1|ఒక మధ్యంతర కూర్పును|$1 మధ్యంతర కూర్పులను}} చూపించలేదు)',
 'diff-multi-otherusers' => '({{PLURAL:$2|మరో వాడుకరి|$2 వాడుకరుల}} యొక్క {{PLURAL:$1|ఒక మధ్యంతర కూర్పును|$1 మధ్యంతర కూర్పులను}} చూపించలేదు)',
-'diff-multi-manyusers' => '$2 à°®à°\82ది à°ªà±\88à°¨ ({{PLURAL:$2|ఒక వాడుకరి|వాడుకరుల}} యొక్క {{PLURAL:$1|ఒక మధ్యంతర కూర్పును|$1 మధ్యంతర కూర్పులను}} చూపించట్లేదు)',
+'diff-multi-manyusers' => '$2 à°\95à°\82à°\9fà±\87 à°\8eà°\95à±\8dà°\95à±\81à°µ ({{PLURAL:$2|ఒక వాడుకరి|వాడుకరుల}} యొక్క {{PLURAL:$1|ఒక మధ్యంతర కూర్పును|$1 మధ్యంతర కూర్పులను}} చూపించట్లేదు)',
 'difference-missing-revision' => 'ఈ తేడా ($1) యొక్క {{PLURAL:$2|ఒక కూర్పు|$2 కూర్పులు}} {{PLURAL:$2|కనబడలేదు}}.
 
 సాధారణంగా, తొలగించబడిన పేజీ యొక్క కాలం చెల్లిన ’తేడా’ లింకును నొక్కినపుడు ఇది జరుగుతుంది. 
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} తొలగింపు లాగ్] లో వివరాలు ఉంటాయి.',
 
 # Search results
-'searchresults' => 'à°µà±\86à°¦ుకులాట ఫలితాలు',
-'searchresults-title' => '"$1"కి అన్వేషణ ఫలితాలు',
-'toomanymatches' => 'à°\9aాలా పోలికలు వచ్చాయి, దయచేసి మరో ప్రశ్నని ప్రయత్నించండి',
+'searchresults' => 'à°µà±\86à°¤ుకులాట ఫలితాలు',
+'searchresults-title' => '"$1" కి వెతుకులాట ఫలితాలు',
+'toomanymatches' => 'మరà±\80 à°\8eà°\95à±\8dà°\95à±\81à°µ పోలికలు వచ్చాయి, దయచేసి మరో ప్రశ్నని ప్రయత్నించండి',
 'titlematches' => 'వ్యాస శీర్షిక సరిపోయింది',
 'textmatches' => 'పేజిలోని పాఠం సరిపోలింది',
 'notextmatches' => 'పేజీ పాఠ్యమేదీ సరిపోలడం లేదు',
-'prevn' => 'à°\95à±\8dà°°à°¿à°¤à°\82 {{PLURAL:$1|$1}}',
+'prevn' => 'à°\97à°¤ {{PLURAL:$1|$1}}',
 'nextn' => 'తరువాతి {{PLURAL:$1|$1}}',
 'prevn-title' => 'గత $1 {{PLURAL:$1|ఫలితం|ఫలితాలు}}',
-'nextn-title' => 'తదà±\81పరి $1 {{PLURAL:$1|ఫలితం|ఫలితాలు}}',
+'nextn-title' => 'తరà±\81వాతి $1 {{PLURAL:$1|ఫలితం|ఫలితాలు}}',
 'shown-title' => 'పేజీకి $1 {{PLURAL:$1|ఫలితాన్ని|ఫలితాలను}} చూపించు',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) చూపించు.',
-'searchmenu-exists' => "'''ఈ వికీలో \"[[:\$1]]\" అనే పేజీ ఉంది'''",
+'searchmenu-exists' => '<strong>ఈ వికీలో "[[:$1]]" అనే పేజీ ఉంది.</strong> {{PLURAL:$2|0=|ఇతర ఫలితాలను కూడా చూడండి.}}',
 'searchmenu-new' => '<strong>ఈ వికీలో "[[:$1]]" అనే పేరుతో పేజీని సృష్టించండి!</strong> {{PLURAL:$2|0=|మీ వెతుకులాటలో దొరికిన పేజీని కూడా చూడండి.|వెతుకులాట ఫలితాలను కూడా చూడండి.}}',
 'searchprofile-articles' => 'విషయపు పేజీలు',
 'searchprofile-project' => 'సహాయం మరియు ప్రాజెక్టు పేజీలు',
@@ -1215,24 +1233,25 @@ $1",
 'search-file-match' => '(ఫైలు విషయంతో సరిపోలుతోంది)',
 'search-suggest' => 'మీరు అంటున్నది ఇదా: $1',
 'search-interwiki-caption' => 'సోదర ప్రాజెక్టులు',
-'search-interwiki-default' => '$1 ఫలితాలు:',
+'search-interwiki-default' => '$1 à°¨à±\81à°\82à°¡à°¿ à°«à°²à°¿à°¤à°¾à°²à±\81:',
 'search-interwiki-more' => '(మరిన్ని)',
 'search-relatedarticle' => 'సంబంధించినవి',
 'searcheverything-enable' => 'అన్ని పేరుబరుల్లో వెతుకు',
 'searchrelated' => 'సంబంధించినవి',
 'searchall' => 'అన్నీ',
-'showingresults' => "కింద ఉన్న {{PLURAL:$1|'''ఒక్క''' ఫలితం|'''$1''' ఫలితాలు}}, #'''$2''' నుండి మొదలుకొని చూపిస్తున్నాం.",
-'showingresultsnum' => "కింద ఉన్న {{PLURAL:$3|'''ఒక్క''' ఫలితం|'''$3''' ఫలితాలు}}, #'''$2''' నుండి మొదలుకొని చూపిస్తున్నాం.",
-'showingresultsheader' => "'''$4''' కొరకై {{PLURAL:$5|'''$3'''లో '''$1''' ఫలితం|'''$3''' ఫలితాల్లో '''$1 - $2''' వరకు}}",
+'showingresults' => '#<strong>$2</strong> నుండి మొదలుకొని {{PLURAL:$1|</strong>ఒక్క</strong> ఫలితాన్ని|<strong>$1</strong> ఫలితాలను}} కింద చూపించాం.',
+'showingresultsinrange' => '#<strong>$2</strong> నుండి  #<strong>$3</strong> వరకు ఉన్న ఫలితాల శ్రేణి నుండి {{PLURAL:$1|<strong>ఒక్క</strong> ఫలితం|<strong>$1</strong> ఫలితాల}} వరకు కింద చూపించాం.',
+'showingresultsnum' => '#<strong>$2</strong> నుండి మొదలుకొని {{PLURAL:$3|<strong>ఒక్క</strong> ఫలితాన్ని|<strong>$3</strong> ఫలితాలను}} కింద చూపించాం.',
+'showingresultsheader' => '<strong>$4</strong> కోసం వచ్చిన ఫలితాలు {{PLURAL:$5|<strong>$3</strong> లో <strong>$1</strong>|</strong>$3</strong> లో <strong>$1 - $2</strong>}}',
 'search-nonefound' => 'మీ ప్రశ్నకి సరిపోలిన ఫలితాలేమీ లేవు.',
 'powersearch-legend' => 'నిశితమైన అన్వేషణ',
 'powersearch-ns' => 'ఈ పేరుబరుల్లో వెతుకు:',
 'powersearch-redir' => 'దారిమార్పులను చూపించు',
-'powersearch-togglelabel' => 'à°\8eà°\82à°\9aà±\81à°\95à±\8bవాలà±\8dసినవి:',
+'powersearch-togglelabel' => 'à°\8eà°\82à°\9aà±\81à°\95à±\8bà°\82à°¡ి:',
 'powersearch-toggleall' => 'అన్నీ',
 'powersearch-togglenone' => 'ఏదీకాదు',
 'search-external' => 'బయటి అన్వేషణ',
-'searchdisabled' => '{{SITENAME}} à°\85à°¨à±\8dà°µà±\87à°·à°£ à°¤à°¾à°¤à±\8dà°\95ాలిà°\95à°\82à°\97à°¾ à°ªà°¨à°¿ à°\9aà±\86à°¯à±\8dయడà°\82 à°²à±\87à°¦à±\81. à°\88à°²à±\8bà°\97à°¾ à°®à±\80à°°à±\81 à°\97à±\82à°\97à±\81à°²à±\8dâ\80\8c à°\89పయà±\8bà°\97à°¿à°\82à°\9aà°¿ à°\85à°¨à±\8dà°µà±\87à°·à°¿à°\82à°\9aà°µà°\9aà±\8dà°\9aà±\81. à°\92à°\95 à°\97మనిà°\95: à°\97à±\82à°\97à±\81à°²à±\8dâ\80\8c à°¦à±\8dవారా à°\95ాలదà±\8bà°·à°\82 à°ªà°\9fà±\8dà°\9fà°¿à°¨ à°«à°²à°¿à°¤à°¾à°²à±\81 à°°à°¾à°µà°¡à°¾à°¨à°¿à°\95à°¿ అవకాశం ఉంది.',
+'searchdisabled' => '{{SITENAME}} à°\85à°¨à±\8dà°µà±\87à°·à°£ à°¤à°¾à°¤à±\8dà°\95ాలిà°\95à°\82à°\97à°¾ à°ªà°¨à°¿ à°\9aà±\86à°¯à±\8dయడà°\82 à°²à±\87à°¦à±\81. à°\88à°²à±\8bà°\97à°¾ à°®à±\80à°°à±\81 à°\97à±\82à°\97à±\81à°²à±\8dâ\80\8c à°\89పయà±\8bà°\97à°¿à°\82à°\9aà°¿ à°\85à°¨à±\8dà°µà±\87à°·à°¿à°\82à°\9aà°µà°\9aà±\8dà°\9aà±\81. à°\97మనిà°\95: à°\97à±\82à°\97à±\81à°²à±\8dâ\80\8c à°µà°¾à°°à°¿ {{SITENAME}} à°«à°²à°¿à°¤à°¾à°²à±\81 à°\95ాలదà±\8bà°·à°\82 à°ªà°\9fà±\8dà°\9fà°¿ à°\89à°\82à°¡à±\87 అవకాశం ఉంది.',
 'search-error' => '$1 కోసం వెతికేటపుడు లోపమేదో దొర్లింది.',
 
 # Preferences page
@@ -1240,37 +1259,37 @@ $1",
 'mypreferences' => 'అభిరుచులు',
 'prefs-edits' => 'దిద్దుబాట్ల సంఖ్య:',
 'prefsnologintext2' => 'మీ అభిరుచులను మార్చుకునేందుకు $1.',
-'prefs-skin' => 'à°\85à°²à°\82à°\95ారà°\82',
-'skin-preview' => 'à°®à±\81à°¨à±\81à°\9cà±\82à°ªà±\81/సరిà°\9aà±\82à°¡à±\81',
+'prefs-skin' => 'à°°à±\82à°ªà±\81',
+'skin-preview' => 'మునుజూడు',
 'datedefault' => 'ఏదైనా పరవాలేదు',
 'prefs-beta' => 'బీటా సౌలభ్యాలు',
 'prefs-datetime' => 'తేదీ, సమయం',
 'prefs-labs' => 'ప్రయోగాత్మక సౌలభ్యాలు',
 'prefs-user-pages' => 'వాడుకరి పేజీలు',
-'prefs-personal' => 'వాడà±\81à°\95à°°à°¿ à°µà°¿à°µà°°à°¾à°²à±\81',
+'prefs-personal' => 'వాడà±\81à°\95à°°à°¿ à°ªà±\8dరవర',
 'prefs-rc' => 'ఇటీవలి మార్పులు',
 'prefs-watchlist' => 'వీక్షణ జాబితా',
 'prefs-watchlist-days' => 'వీక్షణ జాబితాలో చూపించవలసిన రోజులు:',
-'prefs-watchlist-days-max' => '$1 {{PLURAL:$1|రోజు|రోజులు}} గరిష్ఠం',
+'prefs-watchlist-days-max' => 'గరిష్ఠంగా $1 {{PLURAL:$1|రోజు|రోజులు}}',
 'prefs-watchlist-edits' => 'విస్తృత వీక్షణ జాబితాలో చూపించవలసిన దిద్దుబాట్లు:',
 'prefs-watchlist-edits-max' => 'గరిష్ఠ సంఖ్య: 1000',
 'prefs-watchlist-token' => 'వీక్షణాజాబితా టోకెను:',
-'prefs-misc' => 'à°\87తరాలà±\81',
+'prefs-misc' => 'à°\87తరతà±\8dà°°à°¾',
 'prefs-resetpass' => 'సంకేతపదాన్ని మార్చుకోండి',
 'prefs-changeemail' => 'ఈ-మెయిలు చిరునామా మార్పు',
-'prefs-setemail' => 'à°\92à°\95 à°\88-à°®à±\86యిలà±\8d à°\9aà°¿à°°à±\81నామాని à°\85మరà±\8dà°\9aండి',
+'prefs-setemail' => 'à°\93 à°\88à°®à±\86యిలà±\8d à°\9aà°¿à°°à±\81నామా à°\87à°µà±\8dà°µండి',
 'prefs-email' => 'ఈ-మెయిల్ ఎంపికలు',
 'prefs-rendering' => 'రూపురేఖలు',
 'saveprefs' => 'భద్రపరచు',
 'restoreprefs' => 'అప్రమేయ అమరికలను పునఃస్థాపించు (అన్ని విభాగాల్లోనూ)',
-'prefs-editing' => 'మారà±\8dà°ªà±\81à°²ు',
-'rows' => 'వరà±\81సలà±\81',
-'columns' => 'వరుసలు:',
-'searchresultshead' => 'à°\85à°¨à±\8dà°µà±\87à°·à°£',
+'prefs-editing' => 'సవరిసà±\8dà°¤à±\81à°¨à±\8dనారు',
+'rows' => 'à°\85à°¡à±\8dà°¡à±\81 à°µà°°à±\81సలà±\81:',
+'columns' => 'నిలà±\81à°µà±\81 à°µà°°à±\81సలà±\81:',
+'searchresultshead' => 'à°µà±\86à°¤à±\81à°\95à±\81',
 'stub-threshold' => '<a href="#" class="stub">మొలక లింకు</a> ఫార్మాటింగు కొరకు హద్దు (బైట్లు):',
 'stub-threshold-disabled' => 'అచేతనం',
 'recentchangesdays' => 'ఇటీవలి మార్పులు లో చూపించవలసిన రోజులు:',
-'recentchangesdays-max' => '($1 {{PLURAL:$1|రోజు|రోజులు}} గరిష్ఠం)',
+'recentchangesdays-max' => 'గరిష్ఠంగా $1 {{PLURAL:$1|రోజు|రోజులు}}',
 'recentchangescount' => 'అప్రమేయంగా చూపించాల్సిన దిద్దుబాట్ల సంఖ్య:',
 'prefs-help-recentchangescount' => 'ఇది ఇటీవలి మార్పులు, పేజీ చరిత్రలు, మరియు చిట్టాలకు వర్తిస్తుంది.',
 'prefs-help-watchlist-token2' => 'మీ వీక్షణజాబితా యొక్క జాలవడ్డింపుకు చెందిన రహస్య తాళమిది.
@@ -1289,7 +1308,7 @@ $1",
 'timezoneregion-arctic' => 'ఆర్కిటిక్',
 'timezoneregion-asia' => 'ఆసియా',
 'timezoneregion-atlantic' => 'అట్లాంటిక్ మహాసముద్రం',
-'timezoneregion-australia' => 'à°\86à°·్ట్రేలియా',
+'timezoneregion-australia' => 'à°\86à°¸్ట్రేలియా',
 'timezoneregion-europe' => 'ఐరోపా',
 'timezoneregion-indian' => 'హిందూ మహాసముద్రం',
 'timezoneregion-pacific' => 'పసిఫిక్ మహాసముద్రం',
@@ -1301,10 +1320,10 @@ $1",
 'prefs-files' => 'ఫైళ్ళు',
 'prefs-custom-css' => 'ప్రత్యేక CSS',
 'prefs-custom-js' => 'ప్రత్యేక JS',
-'prefs-common-css-js' => 'à°\85à°¨à±\8dని à°\85à°²à°\82à°\95ారాలà°\95à±\88 à°ªà°\82à°\9aà±\81à°\95à±\8bబడిన CSS/JS:',
+'prefs-common-css-js' => 'à°\85à°¨à±\8dని à°°à±\82à°ªà±\81లలà±\8bà°¨à±\82 à°\89à°¨à±\8dన CSS/JS:',
 'prefs-reset-intro' => 'ఈ పేజీలో, మీ అభిరుచులను సైటు డిఫాల్టు విలువలకు మార్చుకోవచ్చు. మళ్ళీ వెనక్కి తీసుకుపోలేరు.',
 'prefs-emailconfirm-label' => 'ఈ-మెయిల్ నిర్ధారణ:',
-'youremail' => 'à°®à±\80 à°\88-à°®à±\86యిలà±\81*',
+'youremail' => 'à°\88à°®à±\86యిలà±\81:',
 'username' => '{{GENDER:$1|వాడుకరి పేరు}}:',
 'uid' => '{{GENDER:$1|వాడుకరి}} ID:',
 'prefs-memberingroups' => 'ఈ {{PLURAL:$1|గుంపులో|గుంపులలో}} {{GENDER:$2|సభ్యుడు|సభ్యురాలు}}:',
@@ -1313,12 +1332,13 @@ $1",
 'yourlanguage' => 'భాష:',
 'yourvariant' => 'విషయపు భాషా వైవిధ్యం:',
 'prefs-help-variant' => 'ఈ వికీ లోని విషయపు పేజీలను చూపించడానికి మీ అభిమత వైవిధ్యం లేదా ఆర్ధోగ్రఫీ.',
-'yournick' => 'à°®à±\81à°¦à±\8dà°¦à±\81 à°ªà±\87à°°à±\81',
+'yournick' => 'à°\95à±\8aà°¤à±\8dà°¤ à°¸à°\82à°¤à°\95à°\82:',
 'prefs-help-signature' => 'చర్చా పేజీల లోని వ్యాఖ్యలకు "<nowiki>~~~~</nowiki>"తో సంతకం చేస్తే అది మీ సంతకం మరియు కాలముద్రగా మారుతుంది.',
-'badsig' => 'సంతకాన్ని సరిగ్గా ఇవ్వలేదు; HTML ట్యాగులను ఒకసారి పరిశీలించండి.',
+'badsig' => 'సంతకం చెల్లనిది.
+HTML ట్యాగులను ఒకసారి సరిచూసుకోండి.',
 'badsiglength' => 'మీ సంతకం చాలా పెద్దగా ఉంది.
 ఇది తప్పనిసరిగా $1 {{PLURAL:$1|అక్షరం|అక్షరాల}} లోపులోనే ఉండాలి.',
-'yourgender' => 'మిమà±\8dమలà±\8dని à°\8eలా à°¸à°\82à°¬à±\8bధిà°\82à°\9aడానిà°\95à°¿ à°\87à°·à±\8dà°\9fపడతారు?',
+'yourgender' => 'మిమà±\8dమలà±\8dని à°®à±\80à°°à±\81 à°\8eలా à°µà°°à±\8dణిà°\82à°\9aà±\81à°\95à±\81à°\82à°\9fారు?',
 'gender-unknown' => 'వెల్లడించడానికి నేను ఇష్టపడట్లేదు',
 'gender-male' => 'అతను వికీ పేజీలను సరిదిద్దుతాడు',
 'gender-female' => 'ఆమె వికీ పేజీలను సరిదిద్దుతుంది',
@@ -1326,18 +1346,19 @@ $1",
 మిమ్మల్ని సంబోధించేప్పుడూ మిమ్మల్ని పేర్కొనేప్పుడూ వ్యాకరణపరంగా సరైన లింగాన్ని  వాడటానికి ఈ విలువ ఉపయోగపడుతుంది.
 ఈ సమాచారం బహిరంగం.',
 'email' => 'ఈ-మెయిలు',
-'prefs-help-realname' => 'అసలు పేరు (తప్పనిసరి కాదు), మీ అసలు పేరు ఇస్తేగనక, మీ రచనలన్నీ మీ అసలు పేరుతోనే గుర్తిస్తూ ఉంటారు.',
-'prefs-help-email' => 'ఈ-మెయిలు చిరునామా ఐచ్చికం, కానీ మీరు సంకేతపదాన్ని మర్చిపోతే కొత్త సంకేతపదాన్ని మీకు పంపించడానికి అవసరమవుతుంది.',
+'prefs-help-realname' => 'అసలు పేరు తప్పనిసరి కాదు. 
+అసలు పేరు ఇస్తే, మీ రచనల శ్రేయస్సు మీ అసలు పేరుకే ఆపాదించబడుతుంది.',
+'prefs-help-email' => 'ఈమెయిలు చిరునామా ఐచ్చికం. కానీ మీరు సంకేతపదాన్ని మర్చిపోతే కొత్త సంకేతపదాన్ని మీకు పంపించడానికి ఇది అవసరం.',
 'prefs-help-email-others' => 'మీ వాడుకరి లేదా చర్చా పేజీలలో ఉండే లంకె ద్వారా ఇతరులు మిమ్మల్ని ఈ-మెయిలు ద్వారా సంప్రదించే వీలుకల్పించవచ్చు.
 ఇతరులు మిమ్మల్ని సంప్రదించినప్పుడు మీ ఈ-మెయిలు చిరునామా బహిర్గతమవదు.',
 'prefs-help-email-required' => 'ఈ-మెయిలు చిరునామా తప్పనిసరి.',
 'prefs-info' => 'ప్రాథమిక సమాచారం',
-'prefs-i18n' => 'అంతర్జాతీకరణ',
+'prefs-i18n' => 'à°\85à°\82తరà±\8dà°\9cాతà±\80à°¯à°\95à°°à°£',
 'prefs-signature' => 'సంతకం',
 'prefs-dateformat' => 'తేదీ ఆకృతి',
-'prefs-timeoffset' => 'సమయ సవరణ',
+'prefs-timeoffset' => 'సమయపు తేడా',
 'prefs-advancedediting' => 'సాధారణ ఎంపికలు',
-'prefs-editor' => 'à°\95à±\82à°°à±\8dపరి',
+'prefs-editor' => 'à°°à°\9aయిత',
 'prefs-preview' => 'మునుజూపు',
 'prefs-advancedrc' => 'ఉన్నత ఎంపికలు',
 'prefs-advancedrendering' => 'ఉన్నత ఎంపికలు',
@@ -1357,22 +1378,22 @@ $1",
 
 # User rights
 'userrights' => 'వాడుకరి హక్కుల నిర్వహణ',
-'userrights-lookup-user' => 'వాడà±\81à°\95à°°à°¿ à°¸à°®à±\82హాలనà±\81 à°¸à°\82భాళించండి',
-'userrights-user-editname' => 'సభà±\8dయనామానà±\8dని ఇవ్వండి:',
+'userrights-lookup-user' => 'వాడà±\81à°\95à°°à°¿ à°¸à°®à±\82హాలనà±\81 à°¨à°¿à°°à±\8dవహించండి',
+'userrights-user-editname' => 'వాడà±\81à°\95à°°à°¿à°ªà±\87à°°à±\81à°¨à±\81 ఇవ్వండి:',
 'editusergroup' => 'వాడుకరి గుంపులను మార్చు',
 'editinguser' => "వాడుకరి '''[[User:$1|$1]]''' $2 యొక్క వాడుకరి హక్కులను మారుస్తున్నారు",
 'userrights-editusergroup' => 'వాడుకరి సమూహాలను మార్చండి',
 'saveusergroups' => 'వాడుకరి గుంపులను భద్రపరచు',
 'userrights-groupsmember' => 'సభ్యులు:',
 'userrights-groupsmember-auto' => 'సంభావిత సభ్యులు:',
-'userrights-groups-help' => 'à°\88 à°µà°¾à°¡à±\81à°\95à°°à°¿ à°\8fà°¯à±\87 à°\97à±\81à°\82à°ªà±\81లలà±\8b à°\89à°\82à°¡à°µà°\9aà±\8dà°\9aో మీరు మార్చవచ్చు.
+'userrights-groups-help' => 'à°\88 à°µà°¾à°¡à±\81à°\95à°°à°¿ à°\8fà°¯à±\87 à°\97à±\81à°\82à°ªà±\81లలà±\8b à°\89à°\82డాలో మీరు మార్చవచ్చు.
 * టిక్కు పెట్టివుంటే ఆ గుంపులో ఈ వాడుకరి ఉన్నట్టు.
 * టిక్కు లేకుంటే ఆ గుంపులో ఈ వాడుకరి లేనట్టు.
-* <nowiki>*</nowiki> ఉంటే ఒకసారి ఆ గుంపుని చేర్చాకా మీరు తీసివేయలేరు, లేదా తీసివేసాకా తిరిగి చేర్చలేరు.',
+* * ఉంటే ఒకసారి ఆ గుంపుని చేర్చాక మీరు తీసివేయలేరు, లేదా తీసివేసాక తిరిగి చేర్చలేరు.',
 'userrights-reason' => 'కారణం:',
 'userrights-no-interwiki' => 'ఇతర వికీలలో వాడుకరి హక్కులను మార్చడానికి మీకు అనుమతి లేదు.',
 'userrights-nodatabase' => '$1 అనే డేటాబేసు లేదు లేదా అది స్థానికం కాదు.',
-'userrights-nologin' => 'వాడà±\81à°\95à°°à°¿ à°¹à°\95à±\8dà°\95à±\81లనà±\81 à°\87à°µà±\8dవడానిà°\95à°¿ à°®à±\80à°°à±\81 à°¤à°ªà±\8dపనిసరిà°\97à°¾ à°\93 à°¨à°¿à°°à±\8dవాహà°\95 à°\96ాతాతà±\8b [[Special:UserLogin|à°²à±\8bనిà°\95à°¿ à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aాలి]].',
+'userrights-nologin' => 'వాడà±\81à°\95à°°à°¿ à°¹à°\95à±\8dà°\95à±\81లనà±\81 à°\87à°µà±\8dవడానిà°\95à°¿ à°®à±\80à°°à±\81 à°¤à°ªà±\8dపనిసరిà°\97à°¾ à°\93 à°¨à°¿à°°à±\8dవాహà°\95 à°\96ాతాతà±\8b [[Special:UserLogin|లాà°\97ినవà±\8dà°µాలి]].',
 'userrights-notallowed' => 'వాడుకరి హక్కులను చేర్చే మరియు తొలగించే అనుమతి మీకు లేదు.',
 'userrights-changeable-col' => 'మీరు మార్చదగిన గుంపులు',
 'userrights-unchangeable-col' => 'మీరు మార్చలేని గుంపులు',
@@ -1400,7 +1421,7 @@ $1",
 'grouppage-autoconfirmed' => '{{ns:project}}:ఆటోమాటిగ్గా నిర్ధారించబడిన వాడుకరులు',
 'grouppage-bot' => '{{ns:project}}:బాట్లు',
 'grouppage-sysop' => '{{ns:project}}:నిర్వాహకులు',
-'grouppage-bureaucrat' => '{{ns:project}}:à°\85ధిà°\95ారà±\8dలు',
+'grouppage-bureaucrat' => '{{ns:project}}:à°\85ధిà°\95ారà±\81లు',
 'grouppage-suppress' => '{{ns:project}}:పూర్తి తొలగింపు',
 
 # Rights
@@ -1419,35 +1440,36 @@ $1",
 'right-reupload' => 'ఇప్పటికే ఉన్న ఫైలును తిరగరాయి',
 'right-reupload-own' => 'తానే ఇదివరలో అప్‌లోడు చేసిన ఫైలును తిరగరాయి',
 'right-reupload-shared' => 'స్థానికంగా ఉమ్మడి మీడియా సొరుగులోని ఫైళ్ళను అధిక్రమించు',
-'right-upload_by_url' => 'URL à°\85à°¡à±\8dà°°à°¸à±\81à°¨à±\81à°\82à°¡à°¿ à°«à±\88à°²à±\81à°¨à±\81 à°\85à°ªà±\8dâ\80\8cà°²à±\8bà°¡à±\81 à°\9aà±\86à°¯à±\8dయి',
+'right-upload_by_url' => 'URL à°\85à°¡à±\8dà°°à°¸à±\81à°¨à±\81à°\82à°¡à°¿ à°«à±\88à°²à±\81à°¨à±\81 à°\85à°ªà±\8dâ\80\8cà°²à±\8bà°¡à±\81 à°\9aà±\86à°¯à±\8dయడà°\82',
 'right-purge' => 'పేజీకి సంబంధించిన సైటు కాషెను, నిర్ధారణ కోరకుండానే తొలగించు',
-'right-autoconfirmed' => 'à°\85à°°à±\8dà°§ à°¸à°\82à°°à°\95à±\8dషణలà±\8b à°\89à°¨à±\8dà°¨ à°ªà±\87à°\9cà±\80లలà±\8b à°¦à°¿à°¦à±\8dà°¦à±\81బాà°\9fà±\81 à°\9aà±\86à°¯à±\8dయి',
+'right-autoconfirmed' => 'à°\90à°ªà±\80 à°\86ధారిత à°°à±\87à°\9fà±\81 à°ªà°°à°¿à°®à°¿à°¤à±\81à°²à±\81 à°ªà±\8dరభావà°\82 à°\9aà±\82పవà±\81',
 'right-bot' => 'ఆటోమాటిక్ ప్రాసెస్ లాగా భావించబడు',
-'right-nominornewtalk' => 'à°\9aà°°à±\8dà°\9aà°¾ à°ªà±\87à°\9cà±\80à°²à±\8dà°²à±\8b à°\9cà°°à°¿à°\97à°¿à°¨ à°\85తి à°\9aà°¿à°¨à±\8dà°¨ à°®à°¾à°°à±\8dà°ªà±\81à°²à°\95à±\81 à°\95à±\8aà°¤à±\8dతసà°\82à°¦à±\87శమà±\81 à°µà°\9aà±\8dà°\9aà°¿à°\82దనà±\8dà°¨ à°¸à±\82à°\9aà°¨ à°\9aà±\86à°¯à±\8dయవదà±\8dదు',
-'right-apihighlimits' => 'API à°ªà±\8dà°°à°¶à±\8dనలà±\8dà°²à±\8b à°\89à°¨à±\8dనత à°ªà°°à°¿à°®à°¿à°¤à±\81లనà±\81 à°µà°¾à°¡à±\81',
+'right-nominornewtalk' => 'à°\9aà°°à±\8dà°\9aà°¾ à°ªà±\87à°\9cà±\80à°²à±\8dà°²à±\8b à°\9aà±\87à°¸à±\87 à°\9aà°¿à°¨à±\8dà°¨ à°®à°¾à°°à±\8dà°ªà±\81à°²à°\95à±\81 à°\95à±\8aà°¤à±\8dతసà°\82à°¦à±\87శపà±\81 à°¸à±\82à°\9aà°¨ à°ªà°\82à°ªà°\95à±\82à°¡దు',
+'right-apihighlimits' => 'API à°ªà±\8dà°°à°¶à±\8dనలà±\8dà°²à±\8b à°\89à°¨à±\8dనత à°ªà°°à°¿à°®à°¿à°¤à±\81లనà±\81 à°µà°¾à°¡à°¡à°\82',
 'right-writeapi' => 'రైట్ API వినియోగం',
 'right-delete' => 'పేజీలను తొలగించడం',
 'right-bigdelete' => 'చాలా పెద్ద చరితం ఉన్న పేజీలను తొలగించు',
+'right-deletelogentry' => 'లాగ్ ఎంట్రీలను తొలగించడం, తొలగింపులను రద్దు చెయ్యడం',
 'right-deleterevision' => 'పేజీల ప్రత్యేకించిన కూర్పులను తొలగించు, తొలగింపును నివారించు',
 'right-deletedhistory' => 'తొలగింపులను, వాటి పాఠ్యం లేకుండా, చరితంలో చూడు',
 'right-deletedtext' => 'తొలగించిన పాఠ్యాన్ని మరియు తొలగించిన కూర్పుల మధ్య మార్పలని చూడగలగడం',
-'right-browsearchive' => 'à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà°¿à°¨ à°ªà±\87à°\9cà±\80లనà±\81 à°µà±\86à°¤à±\81à°\95à±\81',
+'right-browsearchive' => 'à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà°¿à°¨ à°ªà±\87à°\9cà±\80à°²à±\8dà°²à±\8b à°µà±\86à°¤à°\95à°¡à°\82',
 'right-undelete' => 'పేజీ తొలగింపును రద్దు చెయ్యి',
-'right-suppressrevision' => 'నిరà±\8dవాహà°\95à±\81à°²à°\95à±\81 à°\95నబడà°\95à±\81à°\82à°¡à°¾ à°\89à°¨à±\8dà°¨ à°\95à±\82à°°à±\8dà°ªà±\81లనà±\81 à°¸à°®à±\80à°\95à±\8dà°·à°¿à°\82à°\9aà°¿ à°ªà±\8cనసà±\8dథాపిà°\82à°\9aà±\81',
-'right-suppressionlog' => 'à°\97à±\8bà°ªà±\8dà°¯à°\82à°\97à°¾ à°\89à°¨à±\8dà°¨ à°²à°¾à°\97à±\8dâ\80\8cలనà±\81 à°\9aà±\82à°¡à±\81',
+'right-suppressrevision' => 'నిరà±\8dవాహà°\95à±\81à°²à°\95à±\81 à°\95నబడà°\95à±\81à°\82à°¡à°¾ à°\89à°¨à±\8dà°¨ à°\95à±\82à°°à±\8dà°ªà±\81లనà±\81 à°¸à°®à±\80à°\95à±\8dà°·à°¿à°\82à°\9aà°¿ à°ªà±\81నసà±\8dథాపిà°\82à°\9aà°¡à°\82',
+'right-suppressionlog' => 'à°\97à±\8bà°ªà±\8dà°¯à°\82à°\97à°¾ à°\89à°¨à±\8dà°¨ à°²à°¾à°\97à±\8dâ\80\8cలనà±\81 à°\9aà±\82à°¡à°¡à°\82',
 'right-block' => 'దిద్దుబాటు చెయ్యకుండా ఇతర వాడుకరులను నిరోధించగలగడం',
 'right-blockemail' => 'ఈమెయిలు పంపకుండా సభ్యుని నిరోధించు',
 'right-hideuser' => 'ప్రజలకు కనబడకుండా చేసి, సభ్యనామాన్ని నిరోధించు',
 'right-ipblock-exempt' => 'ఐపీ నిరోధాలు, ఆటో నిరోధాలు, శ్రేణి నిరోధాలను తప్పించు',
 'right-proxyunbannable' => 'ప్రాక్సీల ఆటోమాటిక్ నిరోధాన్ని తప్పించు',
 'right-unblockself' => 'స్వీయ అనిరోధం',
-'right-protect' => 'à°¸à°\82à°°à°\95à±\8dà°·à°£ à°¸à±\8dథాయిలనà±\81 à°®à°¾à°°à±\8dà°\9aà±\81, à°¸à°\82రక్షిత పేజీలలో దిద్దుబాటు చెయ్యి',
+'right-protect' => 'à°¸à°\82à°°à°\95à±\8dà°·à°£ à°¸à±\8dథాయిలనà±\81 à°®à°¾à°°à±\8dà°\9aà±\81, à°\95ాసà±\8dà°\95à±\87à°¡à±\8d-రక్షిత పేజీలలో దిద్దుబాటు చెయ్యి',
 'right-editprotected' => '"{{int:protect-level-sysop}}" గా సంక్షించబడిన పేజీలను సరిదిద్దు',
 'right-editsemiprotected' => '"{{int:protect-level-autoconfirmed}}" గా సంరక్షించబడ్డ పేజీలను మార్చు',
 'right-editinterface' => 'యూజరు ఇంటరుఫేసులో దిద్దుబాటు చెయ్యి',
 'right-editusercssjs' => 'ఇతర వాడుకరుల CSS, JS ఫైళ్ళలో దిద్దుబాటు చెయ్యి',
-'right-editusercss' => 'à°\87తర à°µà°¾à°¡à±\81à°\95à°°à±\81à°² CSS à°«à±\88à°³à±\8dళలà±\8b à°¦à°¿à°¦à±\8dà°¦à±\81బాà°\9fà±\81 à°\9aà±\86à°¯à±\8dయి',
-'right-edituserjs' => 'à°\87తర à°µà°¾à°¡à±\81à°\95à°°à±\81à°² JS à°«à±\88à°³à±\8dళలà±\8b à°¦à°¿à°¦à±\8dà°¦à±\81బాà°\9fà±\81 à°\9aà±\86à°¯à±\8dయి',
+'right-editusercss' => 'à°\87తర à°µà°¾à°¡à±\81à°\95à°°à±\81à°² CSS à°«à±\88à°³à±\8dళలà±\8b à°¦à°¿à°¦à±\8dà°¦à±\81బాà°\9fà±\81 à°\9aà±\86à°¯à±\8dయడà°\82',
+'right-edituserjs' => 'à°\87తర à°µà°¾à°¡à±\81à°\95à°°à±\81à°² JS à°«à±\88à°³à±\8dళలà±\8b à°¦à°¿à°¦à±\8dà°¦à±\81బాà°\9fà±\81 à°\9aà±\86à°¯à±\8dయడà°\82',
 'right-editmyusercss' => 'మీ స్వంత వాడుకరి CSS ఫైళ్ళను సరిదిద్దండి',
 'right-editmyuserjs' => 'మీ స్వంత JavaScript దస్త్రాలను మార్చండి',
 'right-viewmywatchlist' => 'మీ స్వంత వీక్షణజాబితాను చూడండి',
@@ -1455,22 +1477,22 @@ $1",
 'right-viewmyprivateinfo' => 'మీ స్వంత గోపనీయ డేటాను చూడండి (ఉదా: ఈమెయిలు చిరునామా, అసలు పేరు)',
 'right-editmyprivateinfo' => 'మీ స్వంత గోపనీయ డేటాను మార్చుకోండి (ఉదా: ఈమెయిలు చిరునామా, అసలు పేరు)',
 'right-editmyoptions' => 'మీ స్వంత అభిరుచులను మార్చుకోండి',
-'right-rollback' => 'à°\92à°\95ానà±\8aà°\95 à°ªà±\87à°\9cà±\80à°²à±\8b à°\9aివరి à°¦à°¿à°¦à±\8dà°¦à±\81బాà°\9fà±\81 à°\9aà±\87సిన à°µà°¾à°¡à±\81à°\95à°°à°¿ à°\9aà±\87సిన à°¦à°¿à°¦à±\8dà°¦à±\81బాà°\9fà±\8dలనà±\81 à°°à°¦à±\8dà°¦à±\81à°\9aà±\87యి',
+'right-rollback' => 'à°\92à°\95ానà±\8aà°\95 à°ªà±\87à°\9cà±\80à°²à±\8b à°\9aివరి à°¦à°¿à°¦à±\8dà°¦à±\81బాà°\9fà±\81 à°\9aà±\87సిన à°µà°¾à°¡à±\81à°\95à°°à°¿ à°\9aà±\87సిన à°¦à°¿à°¦à±\8dà°¦à±\81బాà°\9fà±\8dలనà±\81 à°°à°¦à±\8dà°¦à±\81à°\9aà±\87యడà°\82',
 'right-markbotedits' => 'వెనక్కి తెచ్చిన దిద్దుబాట్లను బాట్ దిద్దుబాట్లుగా గుర్తించు',
 'right-noratelimit' => 'రేటు పరిమితులు ప్రభావం చూపవు',
-'right-import' => 'ఇతర వికీల నుండి పేజీలను దిగుమతి చేసుకో',
-'right-importupload' => 'à°«à±\88à°²à±\81 à°\85à°ªà±\8dâ\80\8cà°²à±\8bà°¡à±\81 à°¨à±\81à°\82à°¡à°¿ à°ªà±\87à°\9cà±\80లనà±\81 à°¦à°¿à°\97à±\81మతి à°\9aà±\87à°¸à±\81à°\95à±\8b',
+'right-import' => 'ఇతర వికీల నుండి పేజీలను దిగుమతి చేసుకోవడం',
+'right-importupload' => 'à°«à±\88à°²à±\81 à°\8eà°\95à±\8dà°\95à°¿à°\82à°ªà±\81 à°¨à±\81à°\82à°¡à°¿ à°ªà±\87à°\9cà±\80లనà±\81 à°¦à°¿à°\97à±\81మతి à°\9aà±\87à°¸à±\81à°\95à±\8bవడà°\82',
 'right-patrol' => 'ఇతరుల దిద్దుబాట్లను నిఘాలో ఉన్నట్లుగా గుర్తించు',
 'right-autopatrol' => 'తానే చేసిన మార్పులను నిఘాలో ఉన్నట్లుగా ఆటోమాటిగా గుర్తించు',
 'right-patrolmarks' => 'ఇటీవలి మార్పుల నిఘా గుర్తింపులను చూడు',
 'right-unwatchedpages' => 'వీక్షణలో లేని పేజీల జాబితాను చూడు',
-'right-mergehistory' => 'à°ªà±\87à°\9cà±\80à°² à°¯à±\8aà°\95à±\8dà°\95 à°\9aà°°à°¿à°¤à±\8dరలని à°µà°¿à°²à±\80à°¨à°\82 à°\9aà±\87à°¯à°\97à°²à°\97à°¡à°\82',
+'right-mergehistory' => 'పేజీల యొక్క చరిత్రలని విలీనం చేయడం',
 'right-userrights' => 'వాడుకరులందరి హక్కులను మార్చు',
 'right-userrights-interwiki' => 'ఇతర వికీల్లోని వాడుకరుల హక్కులను మార్చు',
 'right-siteadmin' => 'డేటాబేసును లాక్, అన్‌లాక్ చెయ్యి',
 'right-override-export-depth' => '5 లింకుల లోతు వరకు ఉన్న పేజీలతో సహా, పేజీలను ఎగుమతి చెయ్యి',
-'right-sendemail' => 'à°\87తర à°µà°¾à°¡à±\81à°\95à°°à±\81à°²à°\95à±\81 à°\88-à°®à±\86యిలà±\81 à°ªà°\82పిà°\82à°\9aà°\97à°²à°\97à°¡à°\82',
-'right-passwordreset' => 'à°¸à°\82à°\95à±\87తపదానà±\8dని à°ªà±\81నరà±\81à°¦à±\8dధరిà°\82à°\9aà°¿à°¨ à°\88-à°®à±\86యిళà±\8dà°³à±\81',
+'right-sendemail' => 'ఇతర వాడుకరులకు ఈ-మెయిలు పంపించడం',
+'right-passwordreset' => 'à°¸à°\82à°\95à±\87తపదà°\82 à°®à°¾à°°à±\8dà°ªà±\81 à°\88à°®à±\86యిళà±\8dళనà±\81 à°\9aà±\82à°¡à°¡à°\82',
 
 # Special:Log/newusers
 'newuserlogpage' => 'కొత్త వాడుకరుల చిట్టా',
@@ -1481,15 +1503,15 @@ $1",
 'rightslogtext' => 'ఇది వాడుకరుల హక్కులకు జరిగిన మార్పుల చిట్టా.',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-read' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°\9aదవà°\82à°¡à°¿',
-'action-edit' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°¸à°µà°°à°¿à°\82à°\9aà°\82à°¡à°¿',
+'action-read' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°\9aదివà±\87',
+'action-edit' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°¸à°µà°°à°¿à°\82à°\9aà±\87',
 'action-createpage' => 'పేజీలను సృష్టించే',
 'action-createtalk' => 'చర్చాపేజీలను సృష్టించే',
 'action-createaccount' => 'ఈ వాడుకరి ఖాతాని సృష్టించే',
-'action-minoredit' => 'à°\88 à°®à°¾à°°à±\8dà°ªà±\81ని à°\9aà°¿à°¨à±\8dనదానిà°\97à°¾ à°\97à±\81à°°à±\8dతిà°\82à°\9aà±\87',
+'action-minoredit' => 'ఈ మార్పుని చిన్నదిగా గుర్తించే',
 'action-move' => 'ఈ పేజీని తరలించే',
-'action-move-subpages' => 'ఈ పేజీని మరియు దీని ఉపపేజీలను తరలించే',
-'action-move-rootuserpages' => 'à°ªà±\8dరధాన à°µà°¾à°¡à±\81à°\95à°°à°¿ à°ªà±\87à°\9cà±\80లని à°¤à°°à°²à°¿à°\82à°\9aà°\97à°¡à°\97à°¡à°\82',
+'action-move-subpages' => 'ఈ పేజీని, దీని ఉపపేజీలనూ తరలించే',
+'action-move-rootuserpages' => 'à°ªà±\8dరధాన à°µà°¾à°¡à±\81à°\95à°°à°¿ à°ªà±\87à°\9cà±\80లని à°¤à°°à°²à°¿à°\82à°\9aà±\87',
 'action-movefile' => 'ఈ ఫైలుని తరలించే',
 'action-upload' => 'ఈ దస్త్రాన్ని ఎక్కించే',
 'action-reupload' => 'ఈ ఫైలుని తిరగవ్రాసే',
@@ -1507,7 +1529,7 @@ $1",
 'action-protect' => 'ఈ పేజీకి సంరక్షణా స్థాయిని మార్చే',
 'action-rollback' => 'ఏదైనా పేజీలో మార్పులు చేసిన చివరి వాడుకరి యొక్క మార్పులను త్వరితంగా వెనక్కి తీసుకెళ్ళు',
 'action-import' => 'మరో వికీ నుండి ఈ పేజీని దిగుమతి చెయ్యి',
-'action-importupload' => 'à°\8eà°\97à±\81మతి à°\9aà±\87సిన à°«à±\88à°²à±\81 à°¨à±\81à°\82à°¡à°¿ à°\88 à°ªà±\87à°\9cà±\80à°²à±\8bనిà°\95ి దిగుమతి చేసే',
+'action-importupload' => 'à°«à±\88à°²à±\81 à°\8eà°\95à±\8dà°\95à°¿à°\82à°ªà±\81 à°¨à±\81à°\82à°¡ి దిగుమతి చేసే',
 'action-patrol' => 'ఇతరుల మార్పులను పర్యవేక్షించినవిగా గుర్తించే',
 'action-autopatrol' => 'మీ మార్పులను పర్యవేక్షించినవిగా గుర్తించే',
 'action-unwatchedpages' => 'వీక్షణలో లేని పేజీల జాబితాని చూసే',
@@ -1515,7 +1537,7 @@ $1",
 'action-userrights' => 'అందరు వాడుకరుల హక్కులను మార్చే',
 'action-userrights-interwiki' => 'ఇతర వికీలలో వాడుకరుల యొక్క హక్కులను మార్చే',
 'action-siteadmin' => 'డాటాబేసుకి తాళం వేసే లేదా తీసే',
-'action-sendemail' => 'ఈ-మెయిల్స్ పంపించు',
+'action-sendemail' => 'ఈమెయిళ్ళు పంపించే',
 'action-editmywatchlist' => 'మీ వీక్షణ జాబితాను సరిదిద్దండి',
 'action-viewmywatchlist' => 'మీ వీక్షణ జాబితాను చూడండి',
 'action-viewmyprivateinfo' => 'మీ గోపనీయ సమాచారాన్ని చూడండి',
@@ -1523,11 +1545,12 @@ $1",
 
 # Recent changes
 'nchanges' => '{{PLURAL:$1|ఒక మార్పు|$1 మార్పులు}}',
-'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|చివరి దర్శనం నుండి}}',
+'enhancedrc-since-last-visit' => '{{PLURAL:$1|చివరి సందర్శన తరువాత}}, $1',
 'enhancedrc-history' => 'చరితం',
 'recentchanges' => 'ఇటీవలి మార్పులు',
 'recentchanges-legend' => 'ఇటీవలి మార్పుల ఎంపికలు',
 'recentchanges-summary' => 'వికీలో ఇటీవలే జరిగిన మార్పులను ఈ పేజీలో గమనించవచ్చు.',
+'recentchanges-noresult' => 'ఈ నియమాలకు సరిపోలే మార్పులు ఇచ్చిన కాలంలో లేవు.',
 'recentchanges-feed-description' => 'ఈ ఫీడు ద్వారా వికీలో జరుగుతున్న మార్పుల గురించి ఎప్పటికప్పుడు సమాచారాన్ని పొందండి.',
 'recentchanges-label-newpage' => 'ఈ మార్పు కొత్త పేజీని సృష్టించింది',
 'recentchanges-label-minor' => 'ఇది ఒక చిన్న మార్పు',
@@ -1536,14 +1559,26 @@ $1",
 'recentchanges-label-plusminus' => 'ఈ పేజి పరిమాణంలో  జరిగిన మార్పుల  బైట్ల సంఖ్య',
 'recentchanges-legend-heading' => "'''సూచిక :'''",
 'recentchanges-legend-newpage' => '([[Special:NewPages|కొత్త పేజీల జాబితా]]ను కూడా చూడండి)',
-'rcnotefrom' => '<b>$2</b> నుండి జరిగిన మార్పులు (<b>$1</b> వరకు చూపబడ్డాయి).',
-'rclistfrom' => '$1 నుండి జరిగిన మార్పులను చూపించు',
+'rcnotefrom' => '<strong>$2</strong> నుండి జరిగిన మార్పులు (<strong>$1</strong> వరకు) కింద చూపబడ్డాయి.',
+'rclistfrom' => '$3, $2 నుండి జరిగిన మార్పులను చూపించు',
 'rcshowhideminor' => 'చిన్న మార్పులను $1',
+'rcshowhideminor-show' => 'చూపించు',
+'rcshowhideminor-hide' => 'దాచు',
 'rcshowhidebots' => 'బాట్లను $1',
+'rcshowhidebots-show' => 'చూపించు',
+'rcshowhidebots-hide' => 'దాచు',
 'rcshowhideliu' => 'నమోదైన వాడుకరులను $1',
+'rcshowhideliu-show' => 'చూపించు',
+'rcshowhideliu-hide' => 'దాచు',
 'rcshowhideanons' => 'అజ్ఞాత వాడుకరులను $1',
+'rcshowhideanons-show' => 'చూపించు',
+'rcshowhideanons-hide' => 'దాచు',
 'rcshowhidepatr' => 'నిఘాలో ఉన్న మార్పులను $1',
+'rcshowhidepatr-show' => 'చూపించు',
+'rcshowhidepatr-hide' => 'దాచు',
 'rcshowhidemine' => 'నా మార్పులను $1',
+'rcshowhidemine-show' => 'చూపించు',
+'rcshowhidemine-hide' => 'దాచు',
 'rclinks' => 'గత  $2 రోజుల లోని చివరి $1 మార్పులను చూపించు <br />$3',
 'diff' => 'తేడాలు',
 'hist' => 'చరిత్ర',
@@ -1564,11 +1599,11 @@ $1",
 # Recent changes linked
 'recentchangeslinked' => 'సంబంధిత మార్పులు',
 'recentchangeslinked-feed' => 'సంబంధిత మార్పులు',
-'recentchangeslinked-toolbox' => 'à°ªà±\8aà°\82తనà°\97à°² మార్పులు',
-'recentchangeslinked-title' => '$1 కు సంబంధించిన మార్పులు',
-'recentchangeslinked-summary' => "దీనికి లింకై ఉన్న పేజీల్లో జరిగిన చివరి మార్పులు ఇక్కడ చూడవచ్చు. మీ వీక్షణ జాబితాలో ఉన్న పేజీలు '''బొద్దు'''గా ఉంటాయి.",
+'recentchangeslinked-toolbox' => 'à°¸à°\82à°¬à°\82ధిత మార్పులు',
+'recentchangeslinked-title' => '"$1" కు సంబంధించిన మార్పులు',
+'recentchangeslinked-summary' => 'ఏదైనా పేజీకి లింకై ఉన్న పేజీల్లో (లేదా ఏదైనా వర్గంలోని పేజీల్లో) జరిగిన ఇటీవలి మార్పుల జాబితా ఇది.  [[Special:Watchlist|మీ వీక్షణ జాబితా]]లో ఉన్న పేజీలు <strong>బొద్దు</strong>గా ఉంటాయి.',
 'recentchangeslinked-page' => 'పేజీ పేరు:',
-'recentchangeslinked-to' => 'ఇచ్చిన పేజీకి లింకయివున్న పేజీలలో జరిగిన మార్పులను చూపించు',
+'recentchangeslinked-to' => 'à°²à±\87à°¦à°\82à°\9fà±\87, à°\87à°\9aà±\8dà°\9aà°¿à°¨ à°ªà±\87à°\9cà±\80à°\95à°¿ à°²à°¿à°\82à°\95యివà±\81à°¨à±\8dà°¨ à°ªà±\87à°\9cà±\80లలà±\8b à°\9cà°°à°¿à°\97à°¿à°¨ à°®à°¾à°°à±\8dà°ªà±\81లనà±\81 à°\9aà±\82పిà°\82à°\9aà±\81',
 
 # Upload
 'upload' => 'దస్త్రపు ఎక్కింపు',
@@ -1577,12 +1612,12 @@ $1",
 'upload-tryagain' => 'మార్చిన ఫైలు వివరణని దాఖలుచేయండి',
 'uploadnologin' => 'లాగిన్‌ అయిలేరు',
 'uploadnologintext' => 'దస్త్రాలను ఎక్కించడానికి మీరు $1 ఉండాలి.',
-'upload_directory_missing' => 'à°\8eà°\97à±\81మతి à°¡à±\88à°°à±\86à°\95à±\8dà°\9fà°°à±\80 ($1) à°¤à°ªà±\8dపిà°\82ది à°®à°°à°¿à°¯à±\81 à°µà±\86à°¬à±\8d à°¸à°°à±\8dవరà±\8d à°¦à°¾à°¨à±\8dని à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°\9aà°²à±\87à°\95à±\81à°¨à±\8dà°¨ది.',
-'upload_directory_read_only' => 'à°\85à°ªà±\8dâ\80\8cà°²à±\8bà°¡ు డైరెక్టరీ ($1), వెబ్‌సర్వరు రాసేందుకు అనుకూలంగా లేదు.',
-'uploaderror' => 'à°\8eà°\95à±\8dà°\95à°¿à°\82à°ªà±\81 à°ªà±\8aరపాà°\9fà±\81',
-'upload-recreate-warning' => "'''హెచ్చరిక: ఆ పేరుతో ఉన్న దస్త్రాన్ని తరలించి లేదా తొలగించి ఉన్నారు.'''
+'upload_directory_missing' => 'à°\8eà°\95à±\8dà°\95à°¿à°\82à°ªà±\81 à°¡à±\88à°°à±\86à°\95à±\8dà°\9fà°°à±\80 ($1) à°\95నబడలà±\87à°¦à±\81. à°ªà±\88à°\97à°¾ à°µà±\86à°¬à±\8d à°¸à°°à±\8dవరà±\8d à°¦à°¾à°¨à±\8dని à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°\9aà°²à±\87à°\95à°ªà±\8bయిà°\82ది.',
+'upload_directory_read_only' => 'à°\8eà°\95à±\8dà°\95à°¿à°\82à°ªు డైరెక్టరీ ($1), వెబ్‌సర్వరు రాసేందుకు అనుకూలంగా లేదు.',
+'uploaderror' => 'à°\8eà°\95à±\8dà°\95à°¿à°\82à°ªà±\81 à°²à±\8bà°ªà°\82',
+'upload-recreate-warning' => '<strong>హెచ్చరిక: ఆ పేరుతో ఉన్న దస్త్రాన్ని తరలించడం లేదా తొలగించడం జరిగింది.</strong>
 
-à°®à±\80 à°¸à±\8cà°\95à°°à±\8dà°¯à°\82 à°\95à±\8bà°¸à°\82 à°\88 à°ªà±\81à°\9f à°¯à±\8aà°\95à±\8dà°\95 à°¤à±\8aà°²à°\97à°¿à°\82à°ªà±\81 à°®à°°à°¿à°¯à±\81 à°¤à°°à°²à°¿à°\82à°ªà±\81 à°\9aà°¿à°\9fà±\8dà°\9fాని à°\87à°\95à±\8dà°\95à°¡ à°\87à°¸à±\8dà°¤à±\81à°¨à±\8dనాà°\82:",
+à°®à±\80 à°¸à±\8cà°\95à°°à±\8dà°¯à°\82 à°\95à±\8bà°¸à°\82 à°\88 à°ªà±\87à°\9cà±\80 à°¯à±\8aà°\95à±\8dà°\95 à°¤à±\8aà°²à°\97à°¿à°\82à°ªà±\81 à°®à°°à°¿à°¯à±\81 à°¤à°°à°²à°¿à°\82à°ªà±\81 à°\9aà°¿à°\9fà±\8dà°\9fాని à°\87à°\95à±\8dà°\95à°¡ à°\87à°¸à±\8dà°¤à±\81à°¨à±\8dనాà°\82:',
 'uploadtext' => "దస్త్రాలను ఎక్కించడానికి ఈ కింది ఫారాన్ని ఉపయోగించండి.
 గతంలో ఎక్కించిన దస్త్రాలను చూడడానికి లేదా వెతకడానికి [[Special:FileList|ఎక్కించిన దస్త్రాల యొక్క జాబితా]]కు వెళ్ళండి, (పునః)ఎక్కింపులు [[Special:Log/upload|ఎక్కింపుల చిట్టా]] లోనూ తొలగింపులు [[Special:Log/delete|తొలగింపుల చిట్టా]] లోనూ కూడా నమోదవుతాయి.
 
@@ -1595,29 +1630,30 @@ $1",
 'upload-prohibited' => 'నిషేధించిన ఫైలు రకాలు: $1.',
 'uploadlog' => 'ఎక్కింపుల చిట్టా',
 'uploadlogpage' => 'ఎక్కింపుల చిట్టా',
-'uploadlogpagetext' => 'ఇటీవల జరిగిన ఫైలు అప్‌లోడుల జాబితా ఇది.',
+'uploadlogpagetext' => 'ఇటీవల జరిగిన ఫైలు అప్‌లోడుల జాబితా ఇది.
+మరింత దృశ్యాత్మకంగా చూడటం కోసం [[Special:NewFiles|కొత్త ఫైళ్ళ కొలువు]]కు వెళ్ళండి.',
 'filename' => 'ఫైలు పేరు',
 'filedesc' => 'సారాంశం',
 'fileuploadsummary' => 'సారాంశం:',
 'filereuploadsummary' => 'ఫైలు మార్పులు:',
 'filestatus' => 'కాపీహక్కు స్థితి:',
 'filesource' => 'మూలం:',
-'uploadedfiles' => 'à°\8eà°\97à±\81మతయిన ఫైళ్ళు',
+'uploadedfiles' => 'à°\8eà°\95à±\8dà°\95à°¿à°\82à°\9aిన ఫైళ్ళు',
 'ignorewarning' => 'హెచ్చరికను పట్టించుకోకుండా ఫైలును భద్రపరచు',
 'ignorewarnings' => 'హెచ్చరికలను పట్టించుకోవద్దు',
-'minlength1' => 'పైలు పేర్ల కనీసం ఒక్క అక్షరమైనా ఉండాలి.',
+'minlength1' => 'పైలు పేర్ల నిడివి కనీసం ఒక్క అక్షరమైనా ఉండాలి.',
 'illegalfilename' => '"$1" అనే దస్త్రపుపేరు పేజీ శీర్షికలలో వాడకూడని అక్షరాలను కలిగివుంది.
 దస్త్రపు పేరుని మార్చి మళ్ళీ ఎక్కించడానికి ప్రయత్నించండి.',
 'filename-toolong' => 'దస్త్రపు పేరు 240 బైట్ల కంటే పొడవు ఉండకూడదు.',
 'badfilename' => 'ఫైలు పేరు "$1"కి మార్చబడినది.',
-'filetype-mime-mismatch' => 'దసà±\8dà°¤à±\8dà°°à°ªà±\81 à°ªà±\8aà°¡à°\97à°¿à°\82à°ªà±\81 ".$1" ఆ దస్త్రం యొక్క MIME రకం ($2) తో సరిపోలలేదు.',
+'filetype-mime-mismatch' => 'దసà±\8dà°¤à±\8dà°°à°ªà±\81 à°\8eà°\95à±\8dà°¸à±\8dà°\9fà±\86à°¨à±\8dà°·à°¨à±\81 ".$1", ఆ దస్త్రం యొక్క MIME రకం ($2) తో సరిపోలలేదు.',
 'filetype-badmime' => '"$1" MIME రకం ఉన్న ఫైళ్ళను ఎగుమతికి అనుమతించం.',
-'filetype-bad-ie-mime' => 'ఈ ఫైలుని ఎగుమతి చేయలేరు ఎందుకంటే ఇంటర్నెట్ ఎక్స్‌ప్లోరర్ దీన్ని "$1" గా చూపిస్తుంది, ఇది అనుమతి లేని మరియు ప్రమాదకారమైన ఫైలు రకం.',
-'filetype-unwanted-type' => "'''\".\$1\"''' అనేది అవాంఛిత ఫైలు రకం.
-\$2 {{PLURAL:\$3|అనేది వాడదగ్గ ఫైలు రకం|అనేవి వాడదగ్గ ఫైలు రకాలు}}.",
+'filetype-bad-ie-mime' => 'ఈ ఫైలుని ఎగుమతి చేయలేరు. ఎందుకంటే ఇంటర్నెట్ ఎక్స్‌ప్లోరర్ దీన్ని "$1" గా చూపిస్తుంది. ఇది అనుమతి లేని మరియు ప్రమాదకరమైన ఫైలు రకం.',
+'filetype-unwanted-type' => '<strong>".$1"</strong> అనేది అవాంఛిత ఫైలు రకం.
+$2 {{PLURAL:$3|అనేది వాడదగ్గ ఫైలు రకం|అనేవి వాడదగ్గ ఫైలు రకాలు}}.',
 'filetype-banned-type' => '\'\'\'".$1"\'\'\' {{PLURAL:$4|అనేది అనుమతించబడిన ఫైలు రకం కాదు|అనేవి అనుమతించబడిన ఫైలు రకాలు కాదు}}.
 అనుమతించబడిన {{PLURAL:$3|ఫైలు రకం|ఫైలు రకాలు}} $2.',
-'filetype-missing' => 'à°«à±\88à°²à±\81à°\95à°¿ à°ªà±\8aà°¡à°\97à°¿à°\82à°ªు (".jpg" లాంటిది) లేదు.',
+'filetype-missing' => 'à°«à±\88à°²à±\81à°\95à°¿ à°\8eà°\95à±\8dà°¸à±\8dà°\9fà±\86à°¨à±\8dà°·à°¨ు (".jpg" లాంటిది) లేదు.',
 'empty-file' => 'మీరు సమర్పించిన దస్త్రం ఖాళీగా ఉంది.',
 'file-too-large' => 'మీరు సమర్పించిన దస్త్రం చాలా పెద్దగా ఉంది.',
 'filename-tooshort' => 'దస్త్రపు పేరు మరీ చిన్నగా ఉంది.',
@@ -1625,23 +1661,24 @@ $1",
 'verification-error' => 'దస్త్రపు తనిఖీలో ఈ దస్త్రం ఉత్తీర్ణమవలేదు.',
 'hookaborted' => 'మీరు చేయప్రత్నించిన మార్పుని ఒక పొడగింత కొక్కెం విచ్ఛిన్నం చేసింది.',
 'illegal-filename' => 'ఆ దస్త్రపుపేరు అనుమతించబడదు.',
-'overwrite' => 'à°\87à°ªà±\8dà°ªà°\9fà°¿à°\95à±\87 à°\89à°¨à±\8dà°¨ à°¦à°¸à±\8dà°¤à±\8dరానà±\8dని à°¤à°¿à°°à°¿à°\97రాయడà°\82 à°\85à°¨à±\81మతిà°\82à°\9aబడదు.',
-'unknown-error' => 'à°\8fà°¦à±\8b à°¤à±\86లియని à°ªà±\8aరపాà°\9fà±\81 à°\9cà°°à°¿à°\97ింది.',
+'overwrite' => 'à°\87à°ªà±\8dà°ªà°\9fà°¿à°\95à±\87 à°\89à°¨à±\8dà°¨ à°¦à°¸à±\8dà°¤à±\8dరానà±\8dని à°¤à°¿à°°à°\97రాయడానిà°\95à°¿ à°\85à°¨à±\81మతి à°²à±\87దు.',
+'unknown-error' => 'à°\8fà°¦à±\8b à°¤à±\86లియని à°²à±\8bà°ªà°\82 à°¦à±\8aà°°à±\8dà°²ింది.',
 'tmp-create-error' => 'తాత్కాలిక దస్త్రాన్ని సృష్టించలేకపోయాం.',
 'tmp-write-error' => 'తాత్కాలిక దస్త్రాన్ని రాయడంలో పొరపాటు.',
 'large-file' => 'ఫైళ్ళు $1 కంటే పెద్దవిగా ఉండకుండా ఉంటే మంచిది; ఈ ఫైలు $2 ఉంది.',
 'largefileserver' => 'ఈ ఫైలు సైజు సర్వరులో విధించిన పరిమితి కంటే ఎక్కువగా ఉంది.',
 'emptyfile' => 'మీరు అప్‌లోడు చేసిన ఫైలు ఖాళీగా ఉన్నట్లుంది. ఫైలు పేరును ఇవ్వడంలో స్పెల్లింగు తప్పు దొర్లి ఉండొచ్చు. మీరు అప్‌లోడు చెయ్యదలచింది ఇదో కాదో నిర్ధారించుకోండి.',
-'windows-nonascii-filename' => 'దస్త్రాల పేర్లలో ప్రత్యేక అక్షరాలకు ఈ వికీలో తోడ్పాటు లేదు.',
-'fileexists' => 'ఈ పేరుతో ఒక ఫైలు ఇప్పటికే ఉంది.
-దీనిని మీరు మార్చాలో లేదో తెలియకపోతె ఫైలు <strong>[[:$1]]</strong>ని చూడండి.
+'windows-nonascii-filename' => 'దస్త్రాల పేర్లలో ప్రత్యేక అక్షరాలకు ఈ వికీలో అనుకూలత లేదు.',
+'fileexists' => 'ఈ పేరుతో ఒక ఫైలు ఇప్పటికే ఉంది. దీనిని మార్చాలో లేదో తెలియకపోతే ఫైలు <strong>[[:$1]]</strong>ను చూడండి.
 [[$1|thumb]]',
-'filepageexists' => 'ఈ ఫైలు కొరకు వివరణ పేజీని <strong>[[:$1]]</strong> వద్ద ఈసరికే సృష్టించారు, కానీ ఆ పేరుతో ప్రస్తుతం ఏ ఫైలూ లేదు. మీరు ఇస్తున్న సంగ్రహం ఆ వివరణ పేజీలో కనబడదు. మీ సంగ్రహం అక్కడ కనబడాలంటే, నేరుగా అక్కడే చేర్చాలి.
+'filepageexists' => 'ఈ ఫైలు కొరకు వివరణ పేజీని <strong>[[:$1]]</strong> వద్ద ఈసరికే సృష్టించారు, కానీ ఆ పేరుతో ప్రస్తుతం ఫైలేదీ లేదు.
+మీరు ఇస్తున్న సంగ్రహం ఆ వివరణ పేజీలో కనబడదు. 
+మీ సంగ్రహం అక్కడ కనబడాలంటే, నేరుగా అక్కడే చేర్చాలి.
 [[$1|thumb]]',
-'fileexists-extension' => 'ఇటువంటి పేరుతో మరో ఫైలు ఉంది: [[$2|thumb]]
-* à°\8eà°\97à±\81మతి à°\9aà±\87స్తున్న ఫైలు పేరు: <strong>[[:$1]]</strong>
+'fileexists-extension' => 'ఇటువంటి పేరుతోటే మరో ఫైలు ఉంది: [[$2|thumb]]
+* à°\8eà°\95à±\8dà°\95à°¿స్తున్న ఫైలు పేరు: <strong>[[:$1]]</strong>
 * ప్రస్తుతం ఉన్న ఫైలు పేరు: <strong>[[:$2]]</strong>
-దయà°\9aà±\87సి à°®à°°à±\8b à°ªà±\87à°°à±\81 à°\8eà°\82à°\9aà±\81à°\95à±\8bà°\82à°¡à°¿.',
+మరో పేరు ఎంచుకోండి.',
 'fileexists-thumbnail-yes' => "ఈ ఫైలు కుదించిన బొమ్మ లాగా ఉంది ''(థంబ్‌నెయిలు)''. [[$1|thumb]]
 <strong>[[:$1]]</strong> ఫైలు చూడండి.
 గుర్తు పెట్టబడిన ఫైలు అసలు సైజే అది అయితే, మరో థంబ్‌నెయిలును అప్‌లోడు చెయ్యాల్సిన అవసరం లేదు.",
@@ -1652,22 +1689,24 @@ $1",
 మీరు ఇప్పటికీ ఈ ఫైలుని ఎగుమతి చేయాలనుకుంటే, వెనక్కి వెళ్ళి మరో పేరుతో ఎగుమతి చేయండి. [[File:$1|thumb|center|$1]]',
 'fileexists-shared-forbidden' => 'ఈ పేరుతో ఇప్పటికే ఒక ఫైలు అందరి ఫైళ్ళ ఖజానాలో ఉంది.
 ఇప్పటికీ మీ ఫైలుని ఎగుమతి చేయాలనుకుంటే, వెనక్కివెళ్ళి మరో పేరు వాడండి. [[File:$1|thumb|center|$1]]',
-'file-exists-duplicate' => 'à°\88 à°«à±\88à°²à±\81 à°\95à±\8dà°°à°¿à°\82à°¦ à°ªà±\87à°°à±\8dà°\95à±\8aà°¨à±\8dà°¨ {{PLURAL:$1|à°«à±\88à°²à±\81à°\95à°¿|à°«à±\88à°³à±\8dà°³à°\95à°¿}} నకలు:',
-'file-deleted-duplicate' => 'à°\97à°¤à°\82à°²à±\8b à°\88 à°«à±\88à°²à±\81 à°²à°¾à°\82à°\9fà°¿à°¦à±\87 à°\92à°\95 à°«à±\88à°²à±\81ని ([[:$1]]) à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà°¿à°µà±\81à°¨à±\8dనారà±\81. à°®à±\80à°°à±\81 à°¦à±\80à°¨à±\8dని à°\8eà°\97à±\81మతి à°\9aà±\87à°¸à±\87à°®à±\81à°\82à°¦à±\81 à°\86 à°«à±\88à°²à±\81 à°¯à±\8aà°\95à±\8dà°\95 à°¤à±\8aà°²à°\97à°¿à°\82à°ªà±\81 à°\9aà°°à°¿à°¤à±\8dరని à°\92à°\95à±\8dà°\95సారి చూడండి.',
+'file-exists-duplicate' => 'à°\88 à°«à±\88à°²à±\81 à°\95à±\8dà°°à°¿à°\82à°¦ à°ªà±\87à°°à±\8dà°\95à±\8aà°¨à±\8dà°¨ {{PLURAL:$1|à°«à±\88à°²à±\81à°\95à±\81|à°«à±\88à°³à±\8dà°³à°\95à±\81}} నకలు:',
+'file-deleted-duplicate' => 'à°\97à°¤à°\82à°²à±\8b à°\88 à°«à±\88à°²à±\81 à°²à°¾à°\82à°\9fà°¿à°¦à±\87 à°\92à°\95 à°«à±\88à°²à±\81ని ([[:$1]]) à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà°¿à°µà±\81à°¨à±\8dనారà±\81. à°®à±\80à°°à±\81 à°¦à±\80à°¨à±\8dని à°¤à°¿à°°à°¿à°\97à°¿ à°\8eà°\95à±\8dà°\95à°¿à°\82à°\9aà±\87 à°®à±\81à°\82à°¦à±\81 à°\86 à°«à±\88à°²à±\81 à°¯à±\8aà°\95à±\8dà°\95 à°¤à±\8aà°²à°\97à°¿à°\82à°ªà±\81 à°\9aà°°à°¿à°¤à±\8dà°°à°¨à±\81 చూడండి.',
 'file-deleted-duplicate-notitle' => 'సరిగ్గా ఈ ఫైలునే పోలిన మరో ఫైలును గతంలో తొలగించాం. దాని పేరును అణచిపెట్టాం.
 దాన్ని తిరిగి ఎక్కించే ముందు, పరిస్థితిని సమీక్షించేందుకు గాను, అణచబడిన ఫైళ్ళ డేటాను చూడగలిగే వారిని అడగండి.',
 'uploadwarning' => 'ఎక్కింపు హెచ్చరిక',
-'uploadwarning-text' => 'à°«à±\88à°²à±\81 à°µà°¿à°µà°°à°£à°¨à°¿ à°\95à±\8dà°°à°¿à°\82à°¦ à°®à°¾à°°à±\8dà°\9aà°¿ మళ్ళీ ప్రయత్నించండి.',
+'uploadwarning-text' => 'à°\95à°¿à°\82à°¦ à°\88 à°«à±\88à°²à±\81 à°µà°¿à°µà°°à°£à°¨à±\81 à°®à°¾à°°à±\8dà°\9aà°¿, మళ్ళీ ప్రయత్నించండి.',
 'savefile' => 'దస్త్రాన్ని భద్రపరచు',
 'uploadedimage' => '"[[$1]]"ని ఎక్కించారు',
 'overwroteimage' => '"[[$1]]" యొక్క కొత్త కూర్పును ఎక్కించారు',
-'uploaddisabled' => 'à°\95à±\8dషమిà°\82à°\9aà°\82à°¡à°¿, à°\85à°ªà±\8dâ\80\8cà°²à±\8bà°¡à±\81 à°\9aà±\86à°¯à±\8dయడà°\82 à°ªà±\8dà°°à°¸à±\8dà°¤à±\81తానిà°\95à°¿ à°\86పబడిà°\82ది',
+'uploaddisabled' => 'à°\8eà°\95à±\8dà°\95à°¿à°\82à°ªà±\81à°²à±\81 à°\85à°\9aà±\87తనà°\82 à°\9aà±\86à°¯à±\8dయబడà±\8dడాయి.',
 'copyuploaddisabled' => 'URL ద్వారా ఎక్కింపుని అశక్తం చేసారు.',
 'uploadfromurl-queued' => 'మీ ఎక్కింపు వరుసలో ఉంది.',
-'uploaddisabledtext' => 'à°«à±\88à°³à±\8dà°³ à°\8eà°\97à±\81మతులను అచేతనం చేసారు.',
+'uploaddisabledtext' => 'à°«à±\88à°³à±\8dà°³ à°\8eà°\95à±\8dà°\95à°¿à°\82à°ªులను అచేతనం చేసారు.',
 'php-uploaddisabledtext' => 'PHPలో ఫైలు ఎక్కింపులు అచేతనమై ఉన్నాయి.
 దయచేసి file_uploads అమరికని చూడండి.',
 'uploadscripted' => 'ఈ ఫైల్లో HTML కోడు గానీ స్క్రిప్టు కోడు గానీ ఉంది. వెబ్ బ్రౌజరు దాన్ని పొరపాటుగా అనువదించే అవకాశం ఉంది.',
+'uploadscriptednamespace' => 'ఈ SVG ఫైలులోని పేరుబరి "$1" చెల్లనిది',
+'uploadinvalidxml' => 'ఎక్కించిన ఫైలులోని XML ను పార్సు చెయ్యలేకపోయాం.',
 'uploadvirus' => 'ఈ ఫైలులో వైరస్‌ ఉంది! వివరాలు: $1',
 'uploadjava' => 'ఇదొక ZIP ఫైలు, ఇందులో ఒక Java .class ఫైలు ఉంది.
 Java ఫైళ్ళ వలన భద్రతకు తూట్లు పడే అవకాశం ఉంది కాబట్టి, వాటిని ఎక్కించడానికి అనుమతి లేదు.',
@@ -1679,9 +1718,9 @@ Java ఫైళ్ళ వలన భద్రతకు తూట్లు పడ
 'upload-description' => 'దస్త్రపు వివరణ',
 'upload-options' => 'ఎక్కింపు వికల్పాలు',
 'watchthisupload' => 'ఈ ఫైలుని గమనించు',
-'filewasdeleted' => 'à°\87à°¦à±\87 à°ªà±\87à°°à±\81à°¤à±\8b à°\89à°¨à±\8dà°¨ à°\92à°\95 à°«à±\88à°²à±\81à°¨à±\81 à°\97à°¤à°\82à°²à±\8b à°\85à°ªà±\8dà°²à±\8bà°¡à±\81 à°\9aà±\87సారà±\81, à°¤à°°à±\81వాతి à°\95ాలà°\82à°²à±\8b à°¦à°¾à°¨à±\8dని à°¤à±\8aà°²à°\97à°¿à°\82à°\9aారà±\81. à°¦à°¾à°¨à±\8dà°¨à±\80 à°®à°³à±\8dà°³à±\80 à°\85à°ªà±\8dà°²à±\8bà°¡à±\81 à°\9aà±\87à°¸à±\87 à°®à±\81à°\82à°¦à±\81, à°®à±\80à°°à±\81 $1 à°¨à±\81 à°\9aà±\82డాలి',
-'filename-bad-prefix' => "మీరు అప్లోడు చేస్తున్న ఫైలు పేరు '''\"\$1\"''' తో మొదలవుతుంది. ఇది డిజిటల్ కెమెరాలు ఆటోమాటిగ్గా ఇచ్చే పేరు. మరింత వివరంగా ఉండే పేరును ఎంచుకోండి.",
-'upload-success-subj' => 'à°\85à°ªà±\8dâ\80\8cà°²à±\8bà°¡à±\81 à°\9cయపà±\8dà°°à°¦à°\82',
+'filewasdeleted' => 'à°\87à°¦à±\87 à°ªà±\87à°°à±\81à°¤à±\8b à°\89à°¨à±\8dà°¨ à°\92à°\95 à°«à±\88à°²à±\81à°¨à±\81 à°\97à°¤à°\82à°²à±\8b à°\8eà°\95à±\8dà°\95à°¿à°\82à°\9aారà±\81. à°¤à°°à±\81వాతి à°\95ాలà°\82à°²à±\8b à°¦à°¾à°¨à±\8dని à°¤à±\8aà°²à°\97à°¿à°\82à°\9aారà±\81. à°¦à°¾à°¨à±\8dà°¨à±\80 à°®à°³à±\8dà°³à±\80 à°\8eà°\95à±\8dà°\95à°¿à°\82à°\9aà±\87 à°®à±\81à°\82à°¦à±\81, à°®à±\80à°°à±\81 $1 à°¨à±\81 à°\9aà±\82డాలి.',
+'filename-bad-prefix' => 'మీరు అప్లోడు చేస్తున్న ఫైలు పేరు <strong>"$1"</strong> తో మొదలవుతుంది. ఇది డిజిటల్ కెమెరాలు ఆటోమాటిగ్గా ఇచ్చే పేరు. మరింత వివరంగా ఉండే పేరును ఎంచుకోండి.',
+'upload-success-subj' => 'విà°\9cయవà°\82తమà±\88à°¨ à°\8eà°\95à±\8dà°\95à°¿à°\82à°ªà±\81',
 'upload-success-msg' => '[$2] నుండి మీ ఎక్కింపు సఫలమైంది. అది ఇక్కడ అందుబాటులో ఉంది: [[:{{ns:file}}:$1]]',
 'upload-failure-subj' => 'ఎక్కింపు సమస్య',
 'upload-failure-msg' => '[$2] నుండి మీ ఎక్కింపుతో ఏదో సమస్య ఉంది:
@@ -1694,11 +1733,13 @@ $1',
 'upload-proto-error-text' => 'రిమోట్ అప్‌లోడులు చెయ్యాలంటే URLలు <code>http://</code> లేదా <code>ftp://</code> తో మొదలు కావాలి.',
 'upload-file-error' => 'అంతర్గత లోపం',
 'upload-file-error-text' => 'సర్వరులో తాత్కాలిక ఫైలును సృష్టించబోగా ఏదో అంతర్గత లోపం తలెత్తింది. ఎవరైనా [[Special:ListUsers/sysop|నిర్వాహకుడిని]] సంప్రదించండి.',
-'upload-misc-error' => 'తెలియని అప్‌లోడు లోపం',
-'upload-misc-error-text' => 'అప్‌లోడు చేస్తూండగా ఏదో తెలియని లోపం తలెత్తింది. URL సరైనదేనని, అది అందుబాటులోనే ఉందని నిర్ధారించుకుని మళ్ళీ ప్రయత్నిందండి. సమస్య అలాగే ఉంటే, సిస్టము నిర్వాహకుని సంప్రదించండి.',
+'upload-misc-error' => 'తెలియని ఎక్కింపు లోపం',
+'upload-misc-error-text' => 'ఎక్కిస్తూండగా ఏదో తెలియని లోపం తలెత్తింది. 
+URL సరైనదేనని, అది అందుబాటులోనే ఉందని నిర్ధారించుకుని మళ్ళీ ప్రయత్నించండి. సమస్య అలాగే ఉంటే, [[Special:ListUsers/sysop|నిర్వాహకులు]] ఎవరినైనా సంప్రదించండి.',
 'upload-too-many-redirects' => 'ఆ URLలో చాలా దారిమార్పులు ఉన్నాయి',
 'upload-unknown-size' => 'సైజు తెలియదు',
 'upload-http-error' => 'ఒక HTTP పొరపాటు జరిగింది: $1',
+'upload-copy-upload-invalid-domain' => 'ఈ డొమెయిన్ నుంచి కాపీ ఎక్కింపులు కుదరదు.',
 
 # File backend
 'backend-fail-stream' => '"$1" ఫైలును స్ట్రీమింగు చెయ్యలేకపోయాం.',
@@ -1713,17 +1754,35 @@ $1',
 'backend-fail-store' => '"$1" ఫైలును "$2" వద్ద భద్రపరచలేకపోయాం.',
 'backend-fail-copy' => '"$1" నుండి "$2" కి ఫైలును కాపీ చెయ్యలేకపోయాం.',
 'backend-fail-move' => '"$1" నుండి "$2" కి ఫైలును తరలించలేకపోయాం.',
-'backend-fail-opentemp' => 'తాతà±\8dà°\95ాలిà°\95 à°¦à°¸à±\8dà°¤à±\8dరానà±\8dని à°¤à±\86రవలà±\87à°\95à°ªà±\8bà°¤à±\81à°¨à±\8dà°¨ాం.',
+'backend-fail-opentemp' => 'తాతà±\8dà°\95ాలిà°\95 à°¦à°¸à±\8dà°¤à±\8dరానà±\8dని à°¤à±\86రవలà±\87à°\95à°ªà±\8bà°¯ాం.',
 'backend-fail-writetemp' => 'తాత్కాలిక ఫైలులో రాయలేకపోయాం.',
 'backend-fail-closetemp' => 'తాత్కాలిక దస్త్రాన్ని మూసివేయలేకపోయాం.',
-'backend-fail-read' => '$1 దస్త్రము చదువలేకపోతిమి.',
-'backend-fail-create' => '$1 ఫైలులో రాయలేకున్నాం.',
+'backend-fail-read' => 'దస్త్రము "$1" ని చదువలేకపోయాం.',
+'backend-fail-create' => 'ఫైలు "$1" లో రాయలేకపోయాం.',
 'backend-fail-maxsize' => '"$1" ఫైలు {{PLURAL:$2|ఒక బైట్|$2 బైట్ల}} కంటే పెద్దది కావడం చేత దాన్ని రాయలేకపోయాం.',
 'backend-fail-readonly' => 'స్టోరేజి బ్యాక్‍ఎండ్ "$1" ప్రస్తుతం రీడ్-ఓన్లీ స్థితిలో ఉంది. దానికి కారణం: "<em>$2</em>"',
+'backend-fail-synced' => 'ఫైలు "$1" అంతర్గత స్టోరేజి బ్యాక్‍ఎండ్లలో అసమ స్థితిలో ఉంది',
 'backend-fail-connect' => 'స్టోరేజీ బ్యాక్‍ఎండ్ "$1" కి కనెక్టు కాలేక పోయాం.',
 'backend-fail-internal' => 'స్టోరేజీ బ్యాక్‍ఎండ్ "$1" లో ఏదో తెలియని లోపం దొర్లింది.',
 'backend-fail-contenttype' => '"$1" లో దాచాల్సిన ఫైలు యొక్క కంటెంటు రకమేంటో నిర్ధారించలేకపోయాం.',
 'backend-fail-batchsize' => 'స్టోరేజీ బ్యాక్‍ఎండ్ కు $1 ఫైలు {{PLURAL:$1|ఆపరేషన్|ఆపరేషన్ల}} తో కూడిన బ్యాచ్ ఒకటి ఇవ్వబడింది; పరిమితి: $2 {{PLURAL:$2|ఆపరేషన్|ఆపరేషన్లు}}.',
+'backend-fail-usable' => 'సరిపడా అనుమతులు లేకపోవడం వలన గానీ, అవసరమైన డైరెక్టరీలు/కంటెయినర్లు లేకపోవడం వలనగానీ "$1" ఫైలును చదవడం, రాయడం చెయ్యలేకపోయాం.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'స్టోరేజి బ్యాక్‍ఎండ్ "$1" కోసం జర్నల్ డేటాబేసుకు కనెక్టు కాలేకపోయాం..',
+'filejournal-fail-dbquery' => 'స్టోరేజి బ్యాక్‍ఎండ్ "$1" కోసం జర్నల్ డేటాబేసును తాజాకరించలేకపోయాం.',
+
+# Lock manager
+'lockmanager-notlocked' => '"$1" తాళం తియ్యలేకపోయాం; అదసలు లాక్ అయ్యేలేదు..',
+'lockmanager-fail-closelock' => '"$1" యొక్క లాక్ ఫైలును మూయలేకపోయాం.',
+'lockmanager-fail-deletelock' => '"$1" యొక్క లాక్ ఫైలును తొలగించలేకపోయాం.',
+'lockmanager-fail-acquirelock' => '"$1" కోసం లాక్ ను పొందలేకపోయాం.',
+'lockmanager-fail-openlock' => '"$1" కోసం లాక్ ఫైలును తెరవలేకపోయాం.',
+'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
 'zip-file-open-error' => 'ఈ ఫైలును ZIP పరీక్ష కోసం తెరవబోతే, ఏదో తెలియని లోపం ఎదురైంది.',
@@ -1734,10 +1793,14 @@ $1',
 దీనిపై సరైన భద్రతా పరీక్షలు చెయ్యలేం.',
 
 # Special:UploadStash
+'uploadstash' => 'భోషాణం ఎక్కింపు',
 'uploadstash-summary' => 'ఎక్కించినప్పటికీ వికీలో ప్రచురితం కాని  (లేదా ఎక్కింపు జరుగుతున్న) ఫైళ్ళు ఈ పేజీలో కనిపిస్తాయి. ఈ ఫైళ్ళు ఎక్కించిన వాడుకరికి తప్ప మరొకరికి కనబడవు.',
+'uploadstash-clear' => 'భోషాణం లోని ఫైళ్లను తీసివెయ్యి',
+'uploadstash-nofiles' => 'మీకు ఫైళ్ళ భోషాణమేమీ లేదు.',
 'uploadstash-badtoken' => 'ఆ చర్య విఫలమైంది. బహుశా మీ ఎడిటింగు అనుమతులకు కాలం చెల్లిందేమో. మళ్ళీ ప్రయత్నించండి.',
 'uploadstash-errclear' => 'ఫైళ్ళ తీసివేత విఫలమైంది.',
 'uploadstash-refresh' => 'దస్త్రాల జాబిజాను తాజాకరించు',
+'invalid-chunk-offset' => 'చెల్లని చంక్ ఆఫ్‍సెట్',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'అనుమతిని నిరాకరించారు',
@@ -1747,7 +1810,7 @@ $1',
 https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'img-auth-notindir' => 'అభ్యర్థించిన తోవ ఎక్కింపు సంచయంలో లేదు.',
 'img-auth-badtitle' => '"$1" నుండి సరైన శీర్షికని నిర్మించలేకపోయాం.',
-'img-auth-nologinnWL' => 'à°®à±\80à°°à±\81 à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aà°¿ à°²à±\87à°°à±\81 à°®à°°à°¿à°¯à±\81 "$1" అనేది తెల్లజాబితాలో లేదు.',
+'img-auth-nologinnWL' => 'à°®à±\80à°°à±\81 à°²à°¾à°\97ినయి à°²à±\87à°°à±\81. à°ªà±\88à°\97à°¾ "$1" అనేది తెల్లజాబితాలో లేదు.',
 'img-auth-nofile' => '"$1" అనే ఫైలు ఉనికిలో లేదు.',
 'img-auth-isdir' => 'మీరు "$1" అనే సంచయాన్ని చూడడానికి ప్రయత్నిస్తున్నారు.
 ఫైళ్ళను చూడడానికి మాత్రమే అనుమతివుంది.',
@@ -1759,18 +1822,18 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'img-auth-bad-query-string' => 'ఈ URL లో తప్పుడు క్వెరీ స్ట్రింగు ఉంది.',
 
 # HTTP errors
-'http-invalid-url' => 'తపà±\8dà°ªà±\81à°¡à±\81 URL: $1',
+'http-invalid-url' => 'à°\9aà±\86à°²à±\8dలని URL: $1',
 'http-invalid-scheme' => '"$1" ప్రణాళికలో ఉన్న URLలకు తోడ్పాటులేదు',
-'http-request-error' => 'à°¤à±\86లియని à°ªà±\8aరపాà°\9fà±\81 వల్ల HTTP అభ్యర్థన విఫలమైంది.',
+'http-request-error' => 'à°¤à±\86లియని à°²à±\8bà°ªà°\82 వల్ల HTTP అభ్యర్థన విఫలమైంది.',
 'http-read-error' => 'HTTP చదువుటలో పొరపాటు.',
 'http-timed-out' => 'HTTP అభ్యర్థనకి కాలం చెల్లింది.',
-'http-curl-error' => 'URLని à°¤à±\87వడà°\82à°²à±\8b à°ªà±\8aరపాà°\9fà±\81: $1',
+'http-curl-error' => 'URLని à°¤à±\87వడà°\82à°²à±\8b à°²à±\8bà°ªà°\82: $1',
 'http-bad-status' => 'HTTP అభ్యర్ధన చేస్తున్నప్పుడు సమస్య ఉంది: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'URL కు వెళ్ళలేకపోయాం',
 'upload-curl-error6-text' => 'ఇచ్చిన URL కు వెళ్ళలేకపోయాం. URL సరైనదేనని, సైటు పనిచేస్తూనే ఉన్నదనీ నిర్ధారించుకోండి.',
-'upload-curl-error28' => 'à°\85à°ªà±\8dà°²à±\8bà°¡ు కాలాతీతం',
+'upload-curl-error28' => 'à°\8eà°\95à±\8dà°\95à°¿à°\82à°ªు కాలాతీతం',
 'upload-curl-error28-text' => 'చాలా సమయం తరువాత కూడా సైటు స్పందించలేదు. సైటు పనిచేస్తూనే ఉందని నిర్ధారించుకుని, కాస్త ఆగి మళ్ళీ ప్రయత్నించండి. రద్దీ కాస్త తక్కువగా ఉన్నపుడు ప్రయత్నిస్తే నయం.',
 
 'license' => 'లైసెన్సు వివరాలు:',
@@ -1781,8 +1844,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'upload_source_file' => ' (మీ కంప్యూటర్లో ఒక ఫైలు)',
 
 # Special:ListFiles
-'listfiles-summary' => 'ఈ ప్రత్యేక పేజీ ఇప్పటి వరకూ ఎక్కించిన దస్త్రాలన్నింటినీ చూపిస్తుంది.
-వాడుకరి పేరు మీద వడపోసినప్పుడు, ఆ వాడుకరి ఎక్కించిన కూర్పు ఆ దస్త్రం యొక్క సరికొత్త కూర్పు అయితేనే చూపిస్తుంది.',
+'listfiles-summary' => 'ఈ ప్రత్యేక పేజీ, ఎక్కించిన ఫైళ్ళన్నిటినీ చూపిస్తుంది.',
 'listfiles_search_for' => 'మీడియా పేరుకై వెతుకు:',
 'imgfile' => 'దస్త్రం',
 'listfiles' => 'దస్త్రాల జాబితా',
@@ -1793,6 +1855,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'listfiles_size' => 'పరిమాణం',
 'listfiles_description' => 'వివరణ',
 'listfiles_count' => 'కూర్పులు',
+'listfiles-show-all' => 'బొమ్మల పాత కూర్పులను కలుపు',
 'listfiles-latestversion' => 'ప్రస్తుత కూర్పు',
 'listfiles-latestversion-yes' => 'అవును',
 'listfiles-latestversion-no' => 'కాదు',
@@ -1807,7 +1870,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'filehist-current' => 'ప్రస్తుత',
 'filehist-datetime' => 'తేదీ/సమయం',
 'filehist-thumb' => 'నఖచిత్రం',
-'filehist-thumbtext' => '$1 à°¯à±\8aà°\95à±\8dà°\95 à°¨à°\96à°\9aà°¿à°¤à±\8dà°° à°\95à±\82à°°à±\8dà°ªà±\81',
+'filehist-thumbtext' => '$1 à°¨à°¾à°\9fà°¿ à°\95à±\82à°°à±\8dà°ªà±\81 à°¯à±\8aà°\95à±\8dà°\95 à°¨à°\96à°\9aà°¿à°¤à±\8dà°°à°\82',
 'filehist-nothumb' => 'నఖచిత్రం లేదు',
 'filehist-user' => 'వాడుకరి',
 'filehist-dimensions' => 'కొలతలు',
@@ -1816,20 +1879,24 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'filehist-missing' => 'ఫైలు కనిపించుటలేదు',
 'imagelinks' => 'దస్త్రపు వాడుక',
 'linkstoimage' => 'కింది {{PLURAL:$1|పేజీ|$1 పేజీల}} నుండి ఈ ఫైలుకి లింకులు ఉన్నాయి:',
-'linkstoimage-more' => '$1 కంటే ఎక్కువ {{PLURAL:$1|పేజీలు|పేజీలు}} ఈ ఫైలుకి లింకుని కలిగివున్నాయి.
-à°\88 à°«à±\88à°²à±\81à°\95à°¿ à°²à°¿à°\82à°\95à±\81à°¨à±\8dà°¨ {{PLURAL:$1|à°®à±\8aà°¦à°\9fà°¿ à°\92à°\95 పేజీని|మొదటి $1 పేజీలను}} ఈ క్రింది జాబితా చూపిస్తుంది.
+'linkstoimage-more' => 'ఈ ఫైలుకు $1 కంటే ఎక్కువ {{PLURAL:$1|పేజీ లింకై ఉంది|పేజీలు లింకై ఉన్నాయి}}.
+à°\88 à°«à±\88à°²à±\81à°\95à°¿ à°®à°¾à°¤à±\8dà°°à°®à±\87 à°²à°¿à°\82à°\95à±\88 à°\89à°¨à±\8dà°¨ {{PLURAL:$1|à°®à±\8aà°¦à°\9fà°¿ పేజీని|మొదటి $1 పేజీలను}} ఈ క్రింది జాబితా చూపిస్తుంది.
 [[Special:WhatLinksHere/$2|పూర్తి జాబితా]] కూడా ఉంది.',
 'nolinkstoimage' => 'ఈ ఫైలుకు లింకున్న పేజీలు లేవు.',
-'morelinkstoimage' => 'à°\88 à°«à±\88à°²à±\81à°\95à±\81 à°\87à°\82à°\95à°¾ [[Special:WhatLinksHere/$1| à°²à°¿à°\82à°\95à±\81లనà±\81]] à°\9aà±\82à°¡ు',
+'morelinkstoimage' => 'à°\88 à°«à±\88à°²à±\81à°\95à±\81 à°\89à°¨à±\8dà°¨ à°®à°°à°¿à°¨à±\8dని [[Special:WhatLinksHere/$1| à°²à°¿à°\82à°\95à±\81లనà±\81]] à°\9aà±\82పిà°\82à°\9aు',
 'linkstoimage-redirect' => '$1 (దస్త్రపు దారిమార్పు) $2',
 'duplicatesoffile' => 'క్రింద పేర్కొన్న {{PLURAL:$1|ఫైలు ఈ ఫైలుకి నకలు|$1 ఫైళ్ళు ఈ ఫైలుకి నకళ్ళు}} ([[Special:FileDuplicateSearch/$2|మరిన్ని వివరాలు]]):',
-'sharedupload' => 'à°\88 à°«à±\88à°²à±\81 $1 à°¨à±\81à°\82à°¡à°¿ à°®à°°à°¿à°¯à±\81 à°¦à±\80నిని à°\87తర à°ªà±\8dà°°à°¾à°\9cà±\86à°\95à±\8dà°\9fà±\81లలà±\8b à°\95à±\82à°¡à°¾ à°\89పయà±\8bà°\97à°¿à°¸à±\8dà°¤à±\82à°µà±\81ండవచ్చు.',
-'sharedupload-desc-there' => 'à°\88 à°«à±\88à°²à±\81 $1 à°¨à±\81à°\82à°¡à°¿ à°µà°\9aà±\8dà°\9aà°¿à°\82ది à°\85లానà±\87 à°\87తర à°ªà±\8dà°°à°¾à°\9cà±\86à°\95à±\8dà°\9fà±\81లలà±\8b à°\95à±\82à°¡à°¾ à°\89పయà±\8bà°\97à°¿à°¸à±\8dà°¤à±\82 ఉండవచ్చు.
+'sharedupload' => 'à°\88 à°«à±\88à°²à±\81 $1 à°²à±\8bనిది. à°¦à±\80నిని à°\87తర à°ªà±\8dà°°à°¾à°\9cà±\86à°\95à±\8dà°\9fà±\81లలà±\8b à°\95à±\82à°¡à°¾ à°\89పయà±\8bà°\97à°¿à°¸à±\8dà°¤à±\82 à°\89à°\82à°¡à°¿ à°\89ండవచ్చు.',
+'sharedupload-desc-there' => 'à°\88 à°«à±\88à°²à±\81 $1 à°²à±\8bనిది. à°\85లానà±\87 à°\87తర à°ªà±\8dà°°à°¾à°\9cà±\86à°\95à±\8dà°\9fà±\81లలà±\8b à°\95à±\82à°¡à°¾ à°\89పయà±\8bà°\97à°¿à°¸à±\8dà°¤à±\82 à°\89à°\82à°¡à°¿ ఉండవచ్చు.
 మరింత సమాచారం కోసం, దయచేసి [$2 ఫైలు వివరణ పేజీ]ని చూడండి.',
-'sharedupload-desc-here' => 'ఈ ఫైలు $1 నుండి మరియు దీనిని ఇతర ప్రాజెక్టులలో కూడా ఉపయోగిస్తూ ఉండవచ్చు.
-దీని [$2 ఫైలు వివరణ పేజీ] లో ఉన్న వివరణని క్రింద చూపించాం.',
-'filepage-nofile' => 'ఈ పేరుతో ఏ ఫైలు లేదు.',
-'filepage-nofile-link' => 'ఈ పేరుతో ఏ ఫైలూ లేదు, కానీ మీరు $1 ను అప్‌లోడ్ చెయ్యవచ్చు.',
+'sharedupload-desc-here' => 'ఈ ఫైలు $1 లోనిది. దీనిని ఇతర ప్రాజెక్టులు కూడా ఉపయోగిస్తూ ఉండవచ్చు.
+అక్కడ దీని [$2 ఫైలు వివరణ పేజీ] లో ఉన్న వివరణని కింద చూపించాం.',
+'sharedupload-desc-edit' => 'ఈ ఫైలు $1 లోనిది. దాన్ని ఇతర ప్రాజెక్టులు కూడా వాడుతూ ఉండి ఉండవచ్చు.
+దాని [$2 ఫైలు వివరణ పేజీ] లోని వివరణను మారుస్తారేమో చూడండి.',
+'sharedupload-desc-create' => 'ఈ ఫైలు $1 లోనిది. దాన్ని ఇతర ప్రాజెక్టులు కూడా వాడుతూ ఉండి ఉండవచ్చు.
+దాని [$2 ఫైలు వివరణ పేజీ] లోని వివరణను మారుస్తారేమో చూడండి.',
+'filepage-nofile' => 'ఈ పేరుతో ఫైలేదీ లేదు.',
+'filepage-nofile-link' => 'ఈ పేరుతో ఫైలేదీ లేదు, మీరు [$1 దాన్ని ఎక్కించవచ్చు].',
 'uploadnewversion-linktext' => 'ఈ దస్త్రపు కొత్త కూర్పును ఎక్కించండి',
 'shared-repo-from' => '$1 నుండి',
 'shared-repo' => 'సామూహిక నిక్షేపం',
@@ -1843,14 +1910,14 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'filerevert-comment' => 'కారణం:',
 'filerevert-defaultcomment' => '$2, $1 నాటి కూర్పుకు తీసుకువెళ్ళాం',
 'filerevert-submit' => 'వెనక్కు తీసుకువెళ్ళు',
-'filerevert-success' => "'''[[Media:$1|$1]]''' ను  [$3, $2 నాటి $4 కూర్పు]కు తీసుకువెళ్ళాం.",
+'filerevert-success' => '<strong>[[Media:$1|$1]]</strong> ను  [$4 $2 $3 నాటి కూర్పు]కు తీసుకువెళ్ళాం.',
 'filerevert-badversion' => 'మీరిచ్చిన టైముస్టాంపుతో ఈ ఫైలుకు స్థానిక కూర్పేమీ లేదు.',
 
 # File deletion
 'filedelete' => '$1ని తొలగించు',
 'filedelete-legend' => 'ఫైలుని తొలగించు',
-'filedelete-intro' => "మీరు '''[[Media:$1|$1]]''' ఫైలుని దాని చరిత్రతో సహా తొలగించబోతున్నారు.",
-'filedelete-intro-old' => "మీరు '''[[Media:$1|$1]]''' యొక్క  [$4 $3, $2] నాటి కూర్పును తొలగిస్తున్నారు.",
+'filedelete-intro' => 'మీరు <strong>[[Media:$1|$1]]</strong> ఫైలును దాని చరిత్రతో సహా తొలగించబోతున్నారు.',
+'filedelete-intro-old' => 'మీరు <strong>[[Media:$1|$1]]</strong> యొక్క  [$4 $2, $3 నాటి కూర్పును] తొలగిస్తున్నారు.',
 'filedelete-comment' => 'కారణం:',
 'filedelete-submit' => 'తొలగించు',
 'filedelete-success' => "'''$1'''ని తొలగించాం.",
@@ -1863,7 +1930,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 ** కాపీహక్కుల ఉల్లంఘన
 ** వేరొక దస్త్రానికి నకలు',
 'filedelete-edit-reasonlist' => 'తొలగింపు కారణాలని మార్చండి',
-'filedelete-maintenance' => 'à°¸à°\82à°°à°\95à±\8dà°·à°£ à°¨à°¿à°®à°¿à°¤à±\8dà°¤à°\82 à°«à±\88à°³à±\8dà°³ à°¤à±\8aà°²à°\97à°¿à°\82à°ªà±\81 à°®à°°à°¿à°¯à±\81 à°ªà±\81నసà±\8dథాపనలనà±\81 à°¤à°¾à°¤à±\8dà°\95ాలిà°\95à°\82à°\97à°¾ à°\85à°\9aà±\87యతనà°\82 à°\9aà±\87సారà±\81.',
+'filedelete-maintenance' => 'నిరà±\8dవహణ à°¸à°\82దరà±\8dà°­à°\82à°\97à°¾ à°«à±\88à°³à±\8dà°³ à°¤à±\8aà°²à°\97à°¿à°\82à°ªà±\81, à°ªà±\81నసà±\8dథాపనలనà±\81 à°¤à°¾à°¤à±\8dà°\95ాలిà°\95à°\82à°\97à°¾ à°\85à°\9aà±\87తనà°\82 à°\9aà±\87సాà°\82.',
 'filedelete-maintenance-title' => 'దస్త్రాన్ని తొలగించలేకపోయాం',
 
 # MIME search
@@ -1889,8 +1956,10 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'randompage-nopages' => 'ఈ క్రింది {{PLURAL:$2|పెరుబరిలో|పెరుబరులలో}} పేజీలు ఏమి లేవు:$1',
 
 # Random page in category
+'randomincategory' => 'వర్గంలోని యాదృచ్చిక పేజీ',
 'randomincategory-invalidcategory' => '"$1" అనేది సరైన పర్గం పేరు కాదు.',
 'randomincategory-nopages' => '[[:Category:$1|$1]] వర్గంలో పేజీలేమీ లేవు.',
+'randomincategory-selectcategory' => 'ఈ వర్గం నుంచి ఒక యాదృచ్ఛిక పేజీని చూడండి: $1 $2.',
 'randomincategory-selectcategory-submit' => 'వెళ్ళు',
 
 # Random redirect
@@ -1913,12 +1982,18 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'statistics-views-total' => 'మొత్తం వీక్షణలు',
 'statistics-views-total-desc' => 'ఉనికిలో లేని పుటలకు మరియు ప్రత్యేక పుటలకు వచ్చిన సందర్శనలని కలుపలేదు',
 'statistics-views-peredit' => 'ఒక మార్పుకి వీక్షణలు',
-'statistics-users' => 'నమà±\8bà°¦à±\88à°¨ [[Special:ListUsers|వాడà±\81à°\95à°°à±\8dలు]]',
-'statistics-users-active' => 'à°\95à±\8dరియాశà±\80à°² à°µà°¾à°¡à±\81à°\95à°°à±\8dలు',
-'statistics-users-active-desc' => 'à°\97à°¤ {{PLURAL:$1|à°°à±\8bà°\9cà±\81|$1 à°°à±\8bà°\9cà±\81à°²}}à°²à±\8b à°\92à°\95à±\8dà°\95 à°\9aà°°à±\8dà°¯à±\88నా చేసిన వాడుకరులు',
+'statistics-users' => 'నమà±\8bà°¦à±\88à°¨ [[Special:ListUsers|వాడà±\81à°\95à°°à±\81లు]]',
+'statistics-users-active' => 'à°\95à±\8dరియాశà±\80à°² à°µà°¾à°¡à±\81à°\95à°°à±\81లు',
+'statistics-users-active-desc' => 'à°\97à°¤ {{PLURAL:$1|à°°à±\8bà°\9cà±\81|$1 à°°à±\8bà°\9cà±\81à°²}}à°²à±\8b à°ªà°¨à°¿ చేసిన వాడుకరులు',
 'statistics-mostpopular' => 'ఎక్కువగా చూసిన పేజీలు',
 
+'pageswithprop' => 'ఒక పేజీ లక్షణం కలిగిన పేజీలు',
+'pageswithprop-legend' => 'ఒక పేజీ లక్షణం కలిగిన పేజీలు',
+'pageswithprop-text' => 'ఫలానా పేజీ లక్షణం కలిగిన పేజీల జాబితాను ఈ పేజీలో చూడవచ్చు.',
+'pageswithprop-prop' => 'లక్షణం పేరు:',
 'pageswithprop-submit' => 'వెళ్ళు',
+'pageswithprop-prophidden-long' => 'long text లక్షణం విలువ దాచబడింది ($1)',
+'pageswithprop-prophidden-binary' => 'binary లక్షణం విలువ దాచబడింది ($1)',
 
 'doubleredirects' => 'జంట దారిమార్పులు',
 'doubleredirectstext' => 'ఇతర దారిమార్పు పుటలకి తీసుకెళ్ళే దారిమార్పులని ఈ పుట చూపిస్తుంది.
@@ -1929,7 +2004,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'double-redirect-fixer' => 'దారిమార్పు సరిద్దువారు',
 
 'brokenredirects' => 'తెగిపోయిన దారిమార్పులు',
-'brokenredirectstext' => 'à°\95à°¿à°\82ది à°¦à°¾à°°à°¿à°®à°¾à°°à±\8dà°ªà±\81à°²à±\81 à°²à±\87ని-à°ªà±\87à°\9cà±\80à°²à°\95à±\81 à°®à°³à±\8dళిà°\82à°\9aà±\81తున్నాయి:',
+'brokenredirectstext' => 'à°\95à°¿à°\82ది à°¦à°¾à°°à°¿à°®à°¾à°°à±\8dà°ªà±\81à°²à±\81 à°\89నిà°\95à°¿à°²à±\8bà°¨à±\87 à°²à±\87ని à°ªà±\87à°\9cà±\80à°²à°\95à±\81 à°µà±\86à°³à±\8dతున్నాయి:',
 'brokenredirects-edit' => 'సవరించు',
 'brokenredirects-delete' => 'తొలగించు',
 
@@ -1945,10 +2020,10 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'ncategories' => '$1 {{PLURAL:$1|వర్గం|వర్గాలు}}',
 'ninterwikis' => '$1 {{PLURAL:$1|అంతర్వికీ|అంతర్వికీలు}}',
 'nlinks' => '$1 {{PLURAL:$1|లింకు|లింకులు}}',
-'nmembers' => '{{PLURAL:$1|ఒక ఉపవర్గం/పేజీ/ఫైలు|$1 ఉపవర్గాలు/పేజీలు/ఫైళ్లు}}',
+'nmembers' => '$1 {{PLURAL:$1|సభ్యుడు|సభ్యులు}}',
 'nmemberschanged' => '$1 → $2 {{PLURAL:$2|సభ్యుడు|సభ్యులు}}',
-'nrevisions' => '{{PLURAL:$1|à°\92à°\95 à°¸à°\82à°\9aà°¿à°\95|$1 à°¸à°\82à°\9aà°¿à°\95లు}}',
-'nviews' => '$1 {{PLURAL:$1|దరà±\8dశనమà±\81|దర్శనలు}}',
+'nrevisions' => '{{PLURAL:$1|à°\95à±\82à°°à±\8dà°ªà±\81|$1 à°\95à±\82à°°à±\8dà°ªà±\81లు}}',
+'nviews' => '$1 {{PLURAL:$1|à°¸à°\82దరà±\8dశన|à°¸à°\82దర్శనలు}}',
 'nimagelinks' => '$1 {{PLURAL:$1|పుట|పుటల}}లో ఉపయోగించారు',
 'ntransclusions' => '$1 {{PLURAL:$1|పుట|పుటల}}లో ఉపయోగించారు',
 'specialpage-empty' => 'ఈ పేజీ ఖాళీగా ఉంది.',
@@ -1959,12 +2034,14 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'uncategorizedimages' => 'వర్గీకరించని బొమ్మలు',
 'uncategorizedtemplates' => 'వర్గీకరించని మూసలు',
 'unusedcategories' => 'ఉపయోగించని వర్గాలు',
-'unusedimages' => 'à°\89పయà±\8bà°\97à°¿à°\82à°\9aబడని à°«à±\88à°³à±\8dà°³à±\81',
+'unusedimages' => 'ఉపయోగించని ఫైళ్ళు',
 'popularpages' => 'ప్రజాదరణ పొందిన పేజీలు',
 'wantedcategories' => 'కోరిన వర్గాలు',
 'wantedpages' => 'కోరిన పేజీలు',
 'wantedpages-badtitle' => 'ఫలితాల సమితిలో తప్పుడు శీర్షిక: $1',
 'wantedfiles' => 'కావలసిన ఫైళ్ళు',
+'wantedfiletext-cat' => 'కింది ఫైళ్ళను వాడారు, కానీ అవి ఉనికిలో లేవు. బయటి రిపాజిటరీలలోని ఫైళ్ళను, అవి ఉనికిలో ఉన్నప్పటికీ, చూపవచ్చు. అటువంటి తప్పు పాజిటివులు <del>కొట్టివేయబడతాయి</del>. పైగా, ఉనికిలో లేని ఫైళ్ళను ఇమిడ్చే పేజీలు [[:$1]] లో చేర్చబడతాయి.',
+'wantedfiletext-nocat' => 'కింది ఫైళ్ళను వాడారు, కానీ అవి ఉనికిలో లేవు. బయటి రిపాజిటరీలలోని ఫైళ్ళను, అవి ఉనికిలో ఉన్నప్పటికీ, చూపవచ్చు. అటువంటి తప్పు పాజిటివులు <del>కొట్టివేయబడతాయి</del>.',
 'wantedtemplates' => 'కావాల్సిన మూసలు',
 'mostlinked' => 'అధిక లింకులు చూపే పేజీలు',
 'mostlinkedcategories' => 'అధిక లింకులు చూపే వర్గాలు',
@@ -1982,10 +2059,20 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'deadendpagestext' => 'కింది పేజీల నుండి ఈ వికీ లోని ఏ ఇతర పేజీకీ లింకులు లేవు.',
 'protectedpages' => 'సంరక్షిత పేజీలు',
 'protectedpages-indef' => 'అనంత సంరక్షణ మాత్రమే',
+'protectedpages-summary' => 'ప్రస్తుతం సంరక్షణలో ఉన్న పేజీల జాబితాను ఈ పేజీ చూపిస్తుంది. అసలు సృష్టించకుండా సంరక్షించబడిన పేజీశీర్షికల కోసం [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] చూడండి.',
 'protectedpages-cascade' => 'కాస్కేడింగు రక్షణలు మాత్రమే',
 'protectedpages-noredirect' => 'దారిమార్పులను దాచు',
 'protectedpagesempty' => 'ఈ పరామితులతో ప్రస్తుతం ఏ పేజీలు కూడా సంరక్షించబడి లేవు.',
+'protectedpages-timestamp' => 'కాలముద్ర',
+'protectedpages-page' => 'పేజీ',
+'protectedpages-expiry' => 'కాలం చెల్లేది',
+'protectedpages-performer' => 'రక్షించబడే వాడుకరి',
+'protectedpages-params' => 'సంరక్షణ పరామితులు',
+'protectedpages-reason' => 'కారణం',
+'protectedpages-unknown-timestamp' => 'తెలియని',
+'protectedpages-unknown-performer' => 'తెలియని వాడుకరి',
 'protectedtitles' => 'సంరక్షిత శీర్షికలు',
+'protectedtitles-summary' => 'యీ పేజీలో ప్రస్తుతానికి నిర్మాణం నిషిద్దమైన శీర్ణికలన్నీ పొందుపరచబడ్డాయి.ప్రస్తుతం ఉన్న రక్షిత పేజీలకోసం యిక్కడ చూడండి [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'ఈ పరామితులతో ప్రస్తుతం శీర్షికలేమీ సరక్షించబడి లేవు.',
 'listusers' => 'వాడుకరుల జాబితా',
 'listusers-editsonly' => 'మార్పులు చేసిన వాడుకరులను మాత్రమే చూపించు',
@@ -2036,11 +2123,11 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'allpagesfrom' => 'ఇక్కడ మొదలు పెట్టి పేజీలు చూపించు:',
 'allpagesto' => 'ఇక్కడవరకు ఉన్న పేజీలు చూపించు:',
 'allarticles' => 'అన్ని పేజీలు',
-'allinnamespace' => 'అన్ని పేజీలు ($1 namespace)',
+'allinnamespace' => 'అన్ని పేజీలు ($1 పేరుబరి)',
 'allpagessubmit' => 'వెళ్లు',
 'allpagesprefix' => 'ఈ ఆదిపదం కలిగిన పేజీలను చూపించు:',
 'allpagesbadtitle' => 'మీరిచ్చిన పేజీ పేరు సరైనది కాకపోయి ఉండాలి లేదా దానికి భాషాంతర లేదా అంతర్వికీ ఆదిపదమైనా ఉండి ఉండాలి. పేర్లలో వాడకూడని కారెక్టర్లు ఆ పేరులో ఉండి ఉండవచ్చు.',
-'allpages-bad-ns' => '{{SITENAME}} à°²à±\8b "$1" à°\85à°¨à±\87 à°¨à±\87à°®à±\8d&zwnj;à°¸à±\8dà°ªà±\87à°¸à±\8d లేదు.',
+'allpages-bad-ns' => '{{SITENAME}} à°²à±\8b "$1" à°\85à°¨à±\87 à°ªà±\87à°°à±\81బరి లేదు.',
 'allpages-hide-redirects' => 'దారిమార్పులను దాచు',
 
 # SpecialCachedPage
@@ -2060,7 +2147,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 # Special:DeletedContributions
 'deletedcontributions' => 'తొలగించబడిన వాడుకరి రచనలు',
 'deletedcontributions-title' => 'తొలగించబడిన వాడుకరి రచనలు',
-'sp-deletedcontributions-contribs' => 'మారà±\8dà°ªà±\81à°²à±\81 à°\9aà±\87à°°à±\8dà°ªà±\81à°²à±\81',
+'sp-deletedcontributions-contribs' => 'మార్పుచేర్పులు',
 
 # Special:LinkSearch
 'linksearch' => 'బయటి లింకుల అన్వేషణ',
@@ -2101,9 +2188,9 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'listgrouprights-removegroup' => '{{PLURAL:$2|గుంపుని|గుంపులను}} తొలగించగలరు: $1',
 'listgrouprights-addgroup-all' => 'అన్ని గుంపులను చేర్చగలరు',
 'listgrouprights-removegroup-all' => 'అన్ని గుంపులను తొలగించగలరు',
-'listgrouprights-addgroup-self' => '{{PLURAL:$2|సమà±\82హానà±\8dని|సమà±\82హాలని}} à°¤à°¨ à°¸à±\8dà°µà°\82à°¤ à°\96ాతాà°\95à°¿ చేర్చుకోగలగడం: $1',
+'listgrouprights-addgroup-self' => '{{PLURAL:$2|à°\97à±\81à°\82à°ªà±\81à°¨à±\81|à°\97à±\81à°\82à°ªà±\81లనà±\81}} à°¤à°¨ à°¸à±\8dà°µà°\82à°¤ à°\96ాతాà°\95à±\81 చేర్చుకోగలగడం: $1',
 'listgrouprights-removegroup-self' => '{{PLURAL:$2|సమూహాన్ని|సమూహాలని}} తన స్వంత ఖాతా నుండి తొలగించుకోవడం: $1',
-'listgrouprights-addgroup-self-all' => 'à°\85à°¨à±\8dని à°¸à°®à±\82హాలని à°¸à±\8dà°µà°\82à°¤ à°\96ాతాà°\95à°¿ చేర్చుకోలగడటం',
+'listgrouprights-addgroup-self-all' => 'à°\85à°¨à±\8dని à°¸à°®à±\82హాలని à°¸à±\8dà°µà°\82à°¤ à°\96ాతాà°\95à±\81 చేర్చుకోలగడటం',
 'listgrouprights-removegroup-self-all' => 'స్వంత ఖాతా నుండి అన్ని సమూహాలనూ తొలగించుకోగలగడం',
 
 # Email user
@@ -2111,23 +2198,23 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'mailnologintext' => 'ఇతరులకు ఈ-మెయిలు పంపించాలంటే, మీరు [[Special:UserLogin|లాగిన్‌]] అయి ఉండాలి, మరియు మీ [[Special:Preferences|అభిరుచుల]]లో సరైన ఈ-మెయిలు చిరునామా ఇచ్చి ఉండాలి.',
 'emailuser' => 'ఈ వాడుకరికి ఈ-మెయిలుని పంపించండి',
 'emailuser-title-target' => 'ఈ {{GENDER:$1|వాడుకరికి}} ఈమెయిలు పంపించండి',
-'emailuser-title-notarget' => 'à°\88-à°®à±\86యిలà±\81 à°µà°¾à°¡à±\81à°\95à°°ి',
+'emailuser-title-notarget' => 'వాడà±\81à°\95à°°à°¿à°\95à°¿ à°\88à°®à±\86యిలà±\81 à°ªà°\82పిà°\82à°\9aà°\82à°¡ి',
 'emailpage' => 'వాడుకరికి ఈ-మెయిలుని పంపించు',
 'emailpagetext' => 'ఈ {{GENDER:$1|వాడుకరికి}} ఈమెయిలు సందేశము పంపించుటకు క్రింది ఫారంను ఉపయోగించవచ్చు. [[Special:Preferences|మీ వాడుకరి అభిరుచుల]]లో మీరిచ్చిన ఈ-మెయిలు చిరునామా "నుండి" ఆ సందేశం వచ్చినట్లుగా ఉంటుంది, కనుక వేగుని అందుకునేవారు నేరుగా మీకు జవాబివ్వగలుగుతారు.',
 'usermailererror' => 'మెయిలు ఆబ్జెక్టు ఈ లోపాన్ని చూపింది:',
 'defemailsubject' => 'వాడుకరి "$1" నుండి {{SITENAME}} ఈ-మెయిలు',
-'usermaildisabled' => 'వాడుకరి ఈ-మెయిళ్ళు అచేతనం చేసారు',
+'usermaildisabled' => 'వాడుకరి ఈమెయిలు అచేతనం చెయ్యబడింది',
 'usermaildisabledtext' => 'ఈ వికీలో మీరు ఇతర వాడుకరులకి ఈ-మెయిళ్ళని పంపించలేరు',
 'noemailtitle' => 'ఈ-మెయిలు చిరునామా లేదు',
 'noemailtext' => 'ఈ వాడుకరి సరైన ఈ-మెయిలు చిరునామాని ఇవ్వలేదు.',
-'nowikiemailtitle' => 'ఈ-మెయిళ్ళను అనుమతించరు',
+'nowikiemailtitle' => 'ఈమెయిలుకు అనుమతి లేదు',
 'nowikiemailtext' => 'ఇతర వాడుకరుల నుండి ఈ-మెయిళ్ళను అందుకోడానికి ఈ వాడుకరి సుముఖంగా లేరు.',
 'emailnotarget' => 'గ్రహీతగా ఇచ్చిన వాడుకరిపేరు తప్పైనా కావచ్చు, లేదా అసలే ఉండి ఉండకపోవచ్చు',
 'emailtarget' => 'అందుకొనేవారి వాడుకరిపేరు ఇవ్వండి',
 'emailusername' => 'వాడుకరి పేరు:',
-'emailusernamesubmit' => 'దాà°\96à°²à±\81à°\9aà±\86à°¯à±\8dయి',
+'emailusernamesubmit' => 'à°ªà°\82పిà°\82à°\9aà±\81',
 'email-legend' => 'మరో {{SITENAME}} వాడుకరికి వేగు పంపించండి',
-'emailfrom' => 'à°\8eవరà±\81:',
+'emailfrom' => 'à°\8eవరి à°¨à±\81à°\82à°¡à°¿:',
 'emailto' => 'ఎవరికి:',
 'emailsubject' => 'విషయం:',
 'emailmessage' => 'సందేశం:',
@@ -2169,12 +2256,12 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'watchlistcontains' => 'మీ వీక్షణ జాబితాలో {{PLURAL:$1|ఒక పేజీ ఉంది|$1 పేజీలు ఉన్నాయి}}.',
 'iteminvalidname' => "'$1' తో ఇబ్బంది, సరైన పేరు కాదు...",
 'wlnote2' => '$2, $3 సమయానికి, గత {{PLURAL:$1|గంటలో|<strong>$1</strong> గంటల్లో}}, జరిగిన మార్పులు కింద ఇవ్వబడ్డాయి.',
-'wlshowlast' => 'గత $1 గంటలు $2 రోజులు $3 చూపించు',
+'wlshowlast' => 'గత $1 గంటల $2 రోజుల $3 చూపించు',
 'watchlist-options' => 'వీక్షణ జాబితా ఎంపికలు',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching' => 'à°\97మనిసà±\8dà°¤à±\81à°¨à±\8dనాà°\82...',
-'unwatching' => 'à°µà±\80à°\95à±\8dà°·à°£ à°¨à±\81à°\82à°¡à°¿ à°¤à±\8aà°²à°\97à°¿à°¸à±\8dà°¤à±\81à°¨à±\8dనా...',
+'watching' => 'à°\97మనిసà±\8dà°¤à±\81à°¨à±\8dనారà±\81...',
+'unwatching' => 'à°\97మనిà°\82à°\9aà°¡à°\82 à°²à±\87à°¦à±\81...',
 'watcherrortext' => '"$1" కు మీ సెట్టింగులను మార్చేటపుడు ఏదో లోపం దొర్లింది.',
 
 'enotif_mailer' => '{{SITENAME}} ప్రకటన మెయిలు పంపునది',
@@ -2195,37 +2282,37 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'enotif_anon_editor' => 'అజ్ఞాత వాడుకరి $1',
 'enotif_body' => 'ప్రియమైన $WATCHINGUSERNAME,
 
+$PAGEINTRO $NEWPAGE
 
-{{SITENAME}}లో $PAGETITLE అనే పేజీని $PAGEEDITDATE సమయానికి $PAGEEDITOR $CHANGEDORCREATED, ప్రస్తుత కూర్పు కొరకు $PAGETITLE_URL చూడండి.
+చేర్పరి సారాంశం: $PAGESUMMARY $PAGEMINOREDIT
 
-$NEWPAGE
-
-రచయిత సారాంశం: $PAGESUMMARY $PAGEMINOREDIT
-
-రచయితను సంప్రదించండి:
+చేర్పరిని సంప్రదించండి:
 మెయిలు: $PAGEEDITOR_EMAIL
 వికీ: $PAGEEDITOR_WIKI
 
-à°®à±\80à°°à±\81 à°\88 à°ªà±\87à°\9cà±\80à°\95à°¿ à°µà±\86à°³à±\8dà°¤à±\87 à°¤à°ªà±\8dà°ª à°\87à°\95 à°®à±\81à°\82à°¦à±\81 à°\88 à°ªà±\87à°\9cà±\80à°\95à°¿ à°\9cà°°à°¿à°\97à±\87 à°®à°¾à°°à±\8dà°ªà±\81ల గురించిన వార్తలను మీకు పంపించము. మీ వీక్షణజాబితా లోని అన్ని పేజీలకు ఉన్న గమనింపు జెండాలను మార్చుకోవచ్చు.
+à°®à±\80à°°à±\81 à°²à°¾à°\97à°¿à°¨à±\88 à°\88 à°ªà±\87à°\9cà±\80à°\95à°¿ à°µà±\86à°³à±\8dà°¤à±\87 à°¤à°ªà±\8dà°ª à°\87à°\95 à°®à±\81à°\82à°¦à±\81 à°\9cà°°à°¿à°\97à±\87 à°\95ారà±\8dà°¯à°\95లాపాల గురించిన వార్తలను మీకు పంపించము. మీ వీక్షణజాబితా లోని అన్ని పేజీలకు ఉన్న గమనింపు జెండాలను మార్చుకోవచ్చు.
 
-             మీ స్నేహపూర్వక {{SITENAME}} గమనింపుల వ్యవస్థ
+మీ స్నేహపూర్వక {{SITENAME}} గమనింపుల వ్యవస్థ
 
 --
-మీ వీక్షణజాబితా అమరికలను మార్చుకునేందుకు,
-{{canonicalurl:{{#special:EditWatchlist}}}} ని చూడండి.
+మీ ఈమెయిలు గమనింపుల అమరికలను మార్చుకునేందుకు, చూడండి
+{{canonicalurl:{{#special:Preferences}}}}
+
+మీ వీక్షణ జాబితా అమరికలను మార్చుకునేందుకు, చూడండి
+{{canonicalurl:{{#special:EditWatchlist}}}}
 
-à°\88 à°ªà±\87à°\9cà±\80ని à°®à±\80 à°µà±\80à°\95à±\8dà°·à°£à°\9cాబితా à°¨à±\81à°\82à°¡à°¿ à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà±\81à°\95à±\81à°¨à±\87à°\82à°¦à±\81à°\95à±\81,
-$UNWATCHURL కి వెళ్ళండి.
+à°®à±\80 à°µà±\80à°\95à±\8dà°·à°£ à°\9cాబితా à°¨à±\81à°\82à°¡à°¿ à°ªà±\87à°\9cà±\80ని à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà±\87à°\82à°¦à±\81à°\95à±\81, à°\9aà±\82à°¡à°\82à°¡à°¿
+$UNWATCHURL
 
-à°®à±\80 à°\85à°­à°¿à°ªà±\8dరాయాలà±\81 à°\9aà±\86à°ªà±\8dà°ªà±\87à°\82à°¦à±\81à°\95à±\81 à°®à°°à°¿à°¯à±\81 à°®à°°à°¿à°\82à°¤ à°¸à°¹à°¾à°¯à°¾à°¨à°¿à°\95à±\88:
-{{canonicalurl:{{MediaWiki:helppage}}}}',
+à°«à±\80à°¡à±\81à°¬à±\8dయాà°\95à±\81à°\95à±\81, à°\87తర à°¸à°¹à°¾à°¯à°\82 à°\95à±\8bà°¸à°\82:
+{{canonicalurl:{{MediaWiki:Helppage}}}}',
 'created' => 'సృష్టించారు',
 'changed' => 'మార్చారు',
 
 # Delete
 'deletepage' => 'పేజీని తొలగించు',
 'confirm' => 'ధృవీకరించు',
-'excontent' => "à°\87దివరà°\95à±\81 విషయ సంగ్రహం: '$1'",
+'excontent' => "à°\89à°¨à±\8dà°¨ విషయ సంగ్రహం: '$1'",
 'excontentauthor' => 'ఉన్న విషయ సంగ్రహం: "$1" (మరియు దీని ఒకే ఒక్క రచయిత "[[Special:Contributions/$2|$2]]")',
 'exbeforeblank' => "ఖాళీ చెయ్యకముందు పేజీలో ఉన్న విషయ సంగ్రహం: '$1'",
 'exblank' => 'పేజీ ఖాళీగా ఉంది',
@@ -2252,7 +2339,7 @@ $UNWATCHURL కి వెళ్ళండి.
 'delete-edit-reasonlist' => 'తొలగింపు కారణాలని మార్చండి',
 'delete-toobig' => 'ఈ పేజీకి $1 {{PLURAL:$1|కూర్పుకు|కూర్పులకు}} మించిన, చాలా పెద్ద దిద్దుబాటు చరితం ఉంది. {{SITENAME}}కు అడ్డంకులు కలగడాన్ని నివారించేందుకు గాను, అలాంటి పెద్ద పేజీల తొలగింపును నియంత్రించాం.',
 'delete-warning-toobig' => 'ఈ పేజీకి $1 {{PLURAL:$1|కూర్పుకు|కూర్పులకు}} మించిన, చాలా పెద్ద దిద్దుబాటు చరితం ఉంది. దాన్ని తొలగిస్తే {{SITENAME}}కి చెందిన డేటాబేసు కార్యాలకు ఆటంకం కలగొచ్చు; అప్రమత్తతో ముందుకుసాగండి.',
-'deleting-backlinks-warning' => "'''హెచ్చరిక:''' మీరు తొలగించబోతున్న పేజీకి ఇతర పేజీల నుండి లింకులు ఉన్నాయి.",
+'deleting-backlinks-warning' => "'''హెచ్చరిక:''' మీరు తొలగించబోతున్న పేజీకి [[Special:WhatLinksHere/{{FULLPAGENAME}}|ఇతర పేజీల]] నుండి లింకులు ఉన్నాయి లేదా ఇక్కడ నుండి ట్రాన్స్‍క్లూడు అవుతున్నాయి.",
 
 # Rollback
 'rollback' => 'దిద్దుబాట్లను రద్దుచేయి',
@@ -2268,7 +2355,7 @@ $UNWATCHURL కి వెళ్ళండి.
 చివరి మార్పులు చేసినవారు: [[User:$3|$3]] ([[User talk:$3|చర్చ]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "దిద్దుబాటు సారాశం: \"''\$1''\".",
 'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|చర్చ]]) చేసిన మార్పులను [[User:$1|$1]] యొక్క చివరి కూర్పు వరకు తిప్పికొట్టారు.',
-'revertpage-nouser' => '(తొలగించిన వాడుకరిపేరు) చేసిన మార్పులను [[User:$1|$1]] యొక్క చివరి కూర్పుకి తిప్పికొట్టారు',
+'revertpage-nouser' => 'దాచబడిన వాడుకరి చేసిన మార్పులను [[User:$1|$1]] యొక్క చివరి కూర్పుకి తిప్పికొట్టారు',
 'rollback-success' => '$1 చేసిన దిద్దుబాట్లను వెనక్కు తీసుకెళ్ళాం; తిరిగి $2 చేసిన చివరి కూర్పుకు మార్చాం.',
 
 # Edit tokens
@@ -2290,6 +2377,7 @@ $UNWATCHURL కి వెళ్ళండి.
 'prot_1movedto2' => '$1, $2కు తరలించబడింది',
 'protect-badnamespace-title' => 'సంరక్షించజాలని పేరుబరి',
 'protect-badnamespace-text' => 'ఈ పేరుబరిలో ఉన్న పేజీలను సంరక్షించలేరు.',
+'protect-norestrictiontypes-text' => 'నిరోధ రకాలేవీ అందుబాటులో లేనందువలన ఈ పేజీని సంరక్షించలేం.',
 'protect-norestrictiontypes-title' => 'సంరక్షించజాలని పేజీ',
 'protect-legend' => 'సంరక్షణను నిర్ధారించు',
 'protectcomment' => 'కారణం:',
@@ -2385,6 +2473,7 @@ $1',
 'undelete-bad-store-key' => '$1 టైమ్‌స్టాంపు కలిగిన ఫైలు తొలగింపును రద్దు చెయ్యలేకున్నాం: తొలగింపుకు ముందే ఫైలు కనబడటం లేదు.',
 'undelete-cleanup-error' => 'వాడని భాండారం ఫైలు "$1" తొలగింపును రద్దు చెయ్యడంలో లోపం దొర్లింది.',
 'undelete-missing-filearchive' => 'ID $1 కలిగిన భాండారం ఫైలు డేటాబేసులో లేకపోవడం చేత దాన్ని పునస్థాపించలేకున్నాం. దాని తొలగింపును ఇప్పటికే రద్దుపరచి ఉండవచ్చు.',
+'undelete-error' => 'పుటను తిరిగి సృష్టించుటలో దోషం',
 'undelete-error-short' => 'ఫైలు $1 తొలగింపును రద్దు పరచడంలో లోపం దొర్లింది',
 'undelete-error-long' => 'ఫైలు $1 తొలగింపును రద్దు పరచడంలో లోపాలు దొర్లాయి',
 'undelete-show-file-confirm' => '$2 నాడు $3 సమయాన ఉన్న "<nowiki>$1</nowiki>" ఫైలు యొక్క తొలగించిన కూర్పుని మీరు నిజంగానే చూడాలనుకుంటున్నారా?',
@@ -2395,12 +2484,13 @@ $1',
 'invert' => 'ఎంపికను తిరగవెయ్యి',
 'tooltip-invert' => 'ఎంచుకున్న పేరుబరి (చెక్ చేసి ఉంటే అనుబంధ పేరుబరి కూడా) లోని పేజీల్లో జరిగిన మార్పులను దాచేందుకు ఈ పెట్టెను చెక్ చెయ్యండి',
 'namespace_association' => 'సంబంధిత పేరుబరి',
+'tooltip-namespace_association' => 'ఎంచుకున్న పేరుబరికి చెందిన చర్చ లేదా విషయం పేరుబరిని కూడా ఎంచుకునేందుకు ఈ పెట్టెను చెక్ చెయ్యండి.',
 'blanknamespace' => '(మొదటి)',
 
 # Contributions
 'contributions' => '{{GENDER:$1|వాడుకరి}} రచనలు',
 'contributions-title' => '$1 యొక్క మార్పులు-చేర్పులు',
-'mycontris' => 'మారà±\8dà°ªà±\81à°²à±\81 à°\9aà±\87à°°à±\8dà°ªà±\81à°²à±\81',
+'mycontris' => 'మార్పుచేర్పులు',
 'contribsub2' => '{{GENDER:$3|$1}} ($2) కొరకు',
 'nocontribs' => 'ఈ విధమైన మార్పులేమీ దొరకలేదు.',
 'uctop' => '(ప్రస్తుత)',
@@ -2421,15 +2511,17 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'ఈ ఐపీ చిరునామాపై ప్రస్తుతం నిరోధం ఉంది.
 నిరోధపు చిట్టాలోని చివరి పద్దుని మీ సమాచారంకోసం ఇస్తున్నాం:',
 'sp-contributions-search' => 'రచనల కోసం అన్వేషణ',
+'sp-contributions-suppresslog' => 'అణచిపెట్టబడిన వాడుకరి రచనలు',
 'sp-contributions-username' => 'ఐపీ చిరునామా లేదా వాడుకరిపేరు:',
 'sp-contributions-toponly' => 'చిట్టచివరి కూర్పులను మాత్రమే చూపించు',
+'sp-contributions-newonly' => 'పేజీని సృష్టించిన మార్పులను మాత్రమే చూపించు',
 'sp-contributions-submit' => 'వెతుకు',
 
 # What links here
-'whatlinkshere' => 'à°\87à°\95à±\8dà°\95à°¡à°¿à°\95à°¿ à°²à°\82à°\95à±\86à°²à±\81à°¨à±\8dనవి',
+'whatlinkshere' => 'à°\87à°\95à±\8dà°\95à°¡à°¿à°\95à°¿ à°²à°¿à°\82à°\95à±\88నవి',
 'whatlinkshere-title' => '"$1"కి లింకున్న పుటలు',
 'whatlinkshere-page' => 'పేజీ:',
-'linkshere' => "కిందనున్న పేజీల నుండి '''[[:$1]]'''కు లింకులు ఉన్నాయి:",
+'linkshere' => 'కింది పేజీల నుండి <strong>[[:$1]]</strong>కు లింకులు ఉన్నాయి:',
 'nolinkshere' => "'''[[:$1]]'''కు ఏ పేజీ నుండీ లింకు లేదు.",
 'nolinkshere-ns' => "'''[[:$1]]''' పేజీకి లింకయ్యే పేజీలు ఎంచుకున్న నేంస్పేసులో లేవు.",
 'isredirect' => 'దారిమార్పు పుట',
@@ -2471,7 +2563,7 @@ $1',
 'ipbenableautoblock' => 'ఈ వాడుకరి వాడిన చివరి ఐపీ అడ్రసును, అలాగే ఆ తరువాత వాడే అడ్రసులను కూడా ఆటోమాటిగ్గా నిరోధించు',
 'ipbsubmit' => 'ఈ సభ్యుని నిరోధించు',
 'ipbother' => 'వేరే గడువు',
-'ipboptions' => '2 గంటలు:2 hours,1 రోజు:1 day,3 రోజులు:3 days,1 వారం:1 week,2 వారాలు:2 weeks,1 నెల:1 month,3 నెలలు:3 months,6 నెలలు:6 months,1 సంవత్సరం:1 year,ఎప్పటికీ:infinite',
+'ipboptions' => '2 గంటలు:2 hours,ఒక రోజు:1 day,3 రోజులు:3 days,ఒక వారం:1 week,2 వారాలు:2 weeks,ఒక నెల:1 month,3 నెలలు:3 months,6 నెలలు:6 months,ఒక సంవత్సరం:1 year,ఎప్పటికీ:infinite',
 'ipbhidename' => 'మార్పులు మరియు జాబితాల నుండి ఈ వాడుకరిపేరుని దాచు',
 'ipbwatchuser' => 'ఈ సభ్యుని సభ్యుని పేజీ, చర్చాపేజీలను వీక్షణలో ఉంచు',
 'ipb-disableusertalk' => 'నిరోధంలో ఉండగా ఈ వాడుకరి తన స్వంత చర్చ పేజీలో మార్పుచేర్పులు చెయ్యకుండా నిరోధించు',
@@ -2479,9 +2571,11 @@ $1',
 'ipb-confirm' => 'నిరోధాన్ని ధృవపరచండి',
 'badipaddress' => 'సరైన ఐ.పి. అడ్రసు కాదు',
 'blockipsuccesssub' => 'నిరోధం విజయవంతం అయింది',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] నిరోధించబడింది.
-<br />నిరోధాల సమీక్ష కొరకు [[Special:BlockList|ఐ.పి. నిరొధాల జాబితా]] చూడండి.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] నిరోధించబడింది.<br />
+నిరోధాల సమీక్ష కొరకు [[Special:BlockList|నిరోధాల జాబితా]] చూడండి.',
 'ipb-blockingself' => 'మిమ్మల్ని మీరే నిరోధించుకోబోతున్నారు! అదే మీ నిశ్చయమా?',
+'ipb-confirmhideuser' => '"వాడుకరిని దాచు" చేతనంగా ఉన్న వాడుకరిని మీరు నిరోధించబోతున్నారు. దీంతో ఈ వాడుకరి పేరు అన్ని జాబితాల్లోనూ, లాగ్ ఎంట్రీలలోనూ అణచి ఉంచబడుతుంది. ఈ పని చెయ్యాలనే మీరు నిశ్చయించుకున్నారా?',
+'ipb-confirmaction' => 'మీరు నిజంగానే ఆ పని చెయ్యాలనుకుంటే, కింద ఉన్న "{{int:ipb-confirm}}" ఫీల్డును చెక్ చెయ్యండి.',
 'ipb-edit-dropdown' => 'నిరోధపు కారణాలను మార్చండి',
 'ipb-unblock-addr' => '$1 పై ఉన్న నిరోధాన్ని తొలగించండి',
 'ipb-unblock' => 'వాడుకరి పేరుపై లేదా ఐపీ చిరునామాపై ఉన్న నిరోధాన్ని తొలగించండి',
@@ -2523,13 +2617,14 @@ $1',
 'change-blocklink' => 'నిరోధాన్ని మార్చండి',
 'contribslink' => 'రచనలు',
 'emaillink' => 'ఈ-మెయిలును పంపించు',
-'autoblocker' => 'మీ ఐ.పీ. అడ్రసును "[[User:$1|$1]]" ఇటీవల వాడుట చేత, అది ఆటోమాటిక్‌గా నిరోధించబడినది. $1ను నిరోధించడానికి కారణం: "\'\'\'$2\'\'\'"',
+'autoblocker' => 'మీ ఐ.పీ. అడ్రసును ఇటీవల "[[User:$1|$1]]" వాడటం చేత, అది ఆటోమాటిక్‌గా నిరోధించబడినది. 
+$1 ను నిరోధించడానికి కారణం: "$2"',
 'blocklogpage' => 'నిరోధాల చిట్టా',
 'blocklog-showlog' => 'ఈ వాడుకరిని గతంలో నిరోధించారు.
 మీ సమాచారం కోసం నిరోధపు చిట్టాని క్రింద ఇచ్చాం:',
 'blocklog-showsuppresslog' => 'ఈ వాడుకరిని గతంలో నిరోధించి, దాచి ఉంచారు.
 వివరాల కోసం అణచివేత చిట్టా కింద చూపబడింది:',
-'blocklogentry' => '"[[$1]]" పై నిరోధం అమలయింది. నిరోధ కాలం $2 $3',
+'blocklogentry' => '"[[$1]]" పై నిరోధం అమలయింది. నిరోధ కాలం $2. $3',
 'reblock-logentry' => '[[$1]] కై నిరోధపు అమరికలను $2 $3 గడువుతో మార్చారు',
 'blocklogtext' => 'వాడుకరుల నిరోధాలు, పునస్థాపనల చిట్టా ఇది. 
 ఆటోమాటిక్‌గా నిరోధానికి గురైన ఐ.పి. చిరునామాలు ఈ జాబితాలో ఉండవు. 
@@ -2589,15 +2684,14 @@ $1',
 'movepagetext' => "కింది ఫారం ఉపయోగించి, ఓ పేజీ పేరు మార్చవచ్చు. దాంతో పాటు దాని చరిత్ర అంతా కొత్త పేజీ చరిత్రగా మారుతుంది.
 పాత పేజీ కొత్త దానికి దారిమార్పు పేజీ అవుతుంది.
 పాత పేజీకి ఉన్న దారిమార్పు పేజీలను ఆటోమెటిగ్గా సరిచేయవచ్చు.
-à°\86లా à°\9aà±\87యవదà±\8dదనà±\81à°\95à±\81à°\82à°\9fà±\87, [[Special:DoubleRedirects|à°¦à±\8dà°µà°\82à°¦]] à°²à±\87దా [[Special:BrokenRedirects|పనిà°\9aà±\87యని]] à°¦à°¾à°°à°¿à°®à°¾à°°à±\8dà°ªà±\81à°² à°ªà±\87à°\9cà±\80లలో సరిచూసుకోండి.
+à°\86లా à°\9aà±\87యవదà±\8dదనà±\81à°\95à±\81à°\82à°\9fà±\87, [[Special:DoubleRedirects|à°\9cమిలి]] à°²à±\87దా [[Special:BrokenRedirects|పనిà°\9aà±\87యని à°¦à°¾à°°à°¿à°®à°¾à°°à±\8dà°ªà±\81à°²à±\81]] à°\89à°¨à±\8dనాయà±\87à°®ో సరిచూసుకోండి.
 లింకులన్నీ అనుకున్నట్లుగా చేరవలసిన చోటికే చేరుతున్నాయని నిర్ధారించుకోవలసిన బాధ్యత మీదే.
 
 ఒకవేళ కొత్త పేరుతో ఇప్పటికే ఒక పేజీ ఉండి ఉంటే (అది గత మార్పుల చరిత్ర లేని ఖాళీ పేజీనో లేదా దారిమార్పు పేజీనో కాకపోతే) తరలింపు '''జరగదు'''.
-
 అంటే మీరు పొరపాటు చేస్తే కొత్త పేరును మార్చి తిరిగి పాత పేరుకు తీసుకురాగలరు కానీ ఇప్పటికే వున్న పేజీని తుడిచివేయలేరు.
 
-'''హెచ్చరిక!'''
-à°\88 à°®à°¾à°°à±\8dà°ªà±\81 à°¬à°¾à°\97à°¾ à°\9cనరà°\82à°\9cà°\95à°®à±\88à°¨ à°ªà±\87à°\9cà±\80à°²à°\95à±\81 à°\85à°¨à±\82à°¹à±\8dà°¯à°\82 కావచ్చు;
+<strong>హెచ్చరిక!</strong>
+à°\87ది à°\9cనరà°\82à°\9cà°\95à°®à±\88à°¨ à°ªà±\87à°\9cà±\80à°²à°\95à±\81 à°\85à°¨à±\81à°\95à±\8bని, à°¤à±\80à°µà±\8dà°°à°®à±\88à°¨ à°®à°¾à°°à±\8dà°ªà±\81 కావచ్చు;
 దాని పరిణామాలను అర్ధం చేసుకుని ముందుకుసాగండి.",
 'movepagetext-noredirectfixer' => "కింది ఫారాన్ని వాడి, ఓ పేజీ పేరు మార్చవచ్చు. దాని చరిత్ర పూర్తిగా కొత్త పేరుకు తరలిపోతుంది. 
 పాత శీర్షిక కొత్తదానికి దారిమార్పు పేజీగా మారిపోతుంది.
@@ -2644,7 +2738,7 @@ $1',
 'movesubpagetext' => 'ఈ పేజీకి క్రింద చూపించిన $1 {{PLURAL:$1|ఉపపేజీ ఉంది|ఉపపేజీలు ఉన్నాయి}}.',
 'movenosubpage' => 'ఈ పేజీకి ఉపపేజీలు ఏమీ లేవు.',
 'movereason' => 'కారణం:',
-'revertmove' => 'తరలిà°\82à°ªà±\81à°¨à±\81 à°°à°¦à±\8dà°¦à±\81à°\9aà±\87యి',
+'revertmove' => 'à°µà±\86à°¨à°\95à±\8dà°\95à±\81 à°¤à°¿à°ªà±\8dà°ªà±\81',
 'delete_and_move' => 'తొలగించి, తరలించు',
 'delete_and_move_text' => '==తొలగింపు అవసరం==
 
@@ -2657,6 +2751,7 @@ $1',
 'immobile-target-namespace-iw' => 'పేజీని తరలించడానికి అంతర్వికీ లింకు సరైన లక్ష్యం కాదు.',
 'immobile-source-page' => 'ఈ పేజీని తరలించలేరు.',
 'immobile-target-page' => 'ఆ లక్ష్యిత శీర్షికకి తరలించలేము.',
+'bad-target-model' => 'కోరుకున్న గమ్య స్థానం వేరే కంటెంటు మోడల్‍ను వాడుతోంది. $1 నుండి $2 కు మార్చలేం.',
 'imagenocrossnamespace' => 'ఫైలును, ఫైలుకు చెందని నేమ్‌స్పేసుకు తరలించలేం',
 'nonfile-cannot-move-to-file' => 'దస్త్రాలు కానివాటిని దస్త్రపు పేరుబరికి తరలించలేరు',
 'imagetypemismatch' => 'ఈ కొత్త ఫైలు ఎక్స్&zwnj;టెన్షన్ ఫైలు రకానికి సరిపోలేదు',
@@ -2673,7 +2768,7 @@ $1',
 దయచేసి మరొక పేరుని ఎంచుకోండి.',
 
 # Export
-'export' => 'à°\8eà°\97à±\81మతి à°ªà±\87à°\9cà±\80à°²à±\81',
+'export' => 'à°ªà±\87à°\9cà±\80à°² à°\8eà°\97à±\81మతి',
 'exporttext' => 'ఎంచుకున్న పేజీ లేదా పేజీలలోని వ్యాసం మరియు పేజీ చరితం లను XML లో ఎగుమతి చేసుకోవచ్చు. MediaWiki ని ఉపయోగించి Special:Import page ద్వారా దీన్ని వేరే వికీ లోకి దిగుమతి చేసుకోవచ్చు.
 
 పేజీలను ఎగుమతి చేసందుకు, కింద ఇచ్చిన టెక్స్టు బాక్సులో పేజీ పేర్లను లైనుకో పేరు చొప్పున ఇవ్వండి. ప్రస్తుత కూర్పుతో పాటు పాత కూర్పులు కూడా కావాలా, లేక ప్రస్తుత కూర్పు మాత్రమే చాలా అనే విషయం కూడా ఇవ్వవచ్చు.
@@ -2683,6 +2778,7 @@ $1',
 'exportcuronly' => 'ప్రస్తుత కూర్పు మాత్రమే, పూర్తి చరితం వద్దు',
 'exportnohistory' => "----
 '''గమనిక:''' ఈ ఫారాన్ని ఉపయోగించి పేజీలయొక్క పూర్తి చరిత్రను ఎగుమతి చేయడాన్ని సర్వరుపై వత్తిడి పెరిగిన కారణంగా ప్రస్తుతం నిలిపివేశారు.",
+'exportlistauthors' => 'ప్రతీపేజీలోను చేర్పరుల పూర్తి జాబితాను కూడా ఉంచు',
 'export-submit' => 'ఎగుమతించు',
 'export-addcattext' => 'ఈ వర్గంలోని పేజీలను చేర్చు:',
 'export-addcat' => 'చేర్చు',
@@ -2725,6 +2821,7 @@ $2',
 'thumbnail_image-type' => 'ఈ బొమ్మ రకానికి మద్దతు లేదు',
 'thumbnail_gd-library' => 'అసంపూర్ణ GD సంచయపు ఏర్పాటు: $1 ఫంక్షను లేదు.',
 'thumbnail_image-missing' => 'ఫైలు తప్పిపోయినట్లున్నది: $1',
+'thumbnail_image-failure-limit' => 'ఈ థంబ్‍నెయిల్‍ను రెండరు చెయ్యడానికి చాలా ఎక్కువ విఫలయత్నాలు ($1 లేదా అంతకంటే ఎక్కువ) జరిగాయి. కాస్తాగి మళ్ళీ ప్రయత్నించండి.',
 
 # Special:Import
 'import' => 'పేజీలను దిగుమతి చేసుకోండి',
@@ -2771,8 +2868,10 @@ $2',
 'import-error-interwiki' => 'పేజీ "$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' => 'ఇచ్చిన మూలపు పేజీ సరైన శీర్షిక కాదు.',
+'import-rootpage-nosubpage' => 'మూలపేజీ యొక్క పేరుబరి "$1" ఉపపేజీలను అనుమతించదు.',
 
 # Import log
 'importlogpage' => 'దిగుమతుల చిట్టా',
@@ -2785,6 +2884,11 @@ $2',
 # JavaScriptTest
 'javascripttest' => 'జావాస్క్రిప్ట్ పరీక్ష',
 'javascripttest-title' => '$1 పరీక్షలు నడుస్తున్నాయి',
+'javascripttest-pagetext-noframework' => 'ఈ పేజీ JavaScript పరీక్షల కోసం ఉద్దేశించబడింది.',
+'javascripttest-pagetext-unknownframework' => 'తెలియని పరీక్షా ఫ్రేమ్‍వర్కు "$1".',
+'javascripttest-pagetext-frameworks' => 'కింది పరీక్షా ఫ్రేమ్‍వర్కులలో ఒకదాన్ని ఎంచుకోండి: $1',
+'javascripttest-pagetext-skins' => 'పరీక్షలు నడిపేందుకు ఓ రూపును ఎంచుకోండి:',
+'javascripttest-qunit-intro' => 'mediawiki.org లోని [$1 పరీక్షా డాక్యుమెంటేషన్] చూడండి.',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'మీ వాడుకరి పేజీ',
@@ -2793,43 +2897,43 @@ $2',
 'tooltip-pt-anontalk' => 'ఈ ఐపీ చిరునామా నుండి చేసిన మార్పుల గురించి చర్చ',
 'tooltip-pt-preferences' => 'మీ అభిరుచులు',
 'tooltip-pt-watchlist' => 'మీరు మార్పుల కొరకు గమనిస్తున్న పేజీల జాబితా',
-'tooltip-pt-mycontris' => 'మీ మార్పు-చేర్పుల జాబితా',
-'tooltip-pt-login' => 'à°®à±\80à°°à±\81 à°²à±\8bనిà°\95à°¿ à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aడానà±\8dని à°ªà±\8dà°°à±\8bà°¤à±\8dసహిసà±\8dà°¤à±\81à°¨à±\8dనాà°\82; à°\95ానà±\80 à°\85ది à°¤à°ªà±\8dపనిసరి కాదు.',
-'tooltip-pt-logout' => 'నిషà±\8dà°\95à±\8dరమిà°\82à°\9aండి',
-'tooltip-ca-talk' => 'విషయపà±\81 à°ªà±\81à°\9f గురించి చర్చ',
-'tooltip-ca-edit' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°®à±\80à°°à±\81 à°¸à°°à°¿à°¦à°¿à°¦à±\8dదవà°\9aà±\8dà°\9aà±\81. à°¦à°¾à°\9aà±\87ముందు మునుజూపు బొత్తాన్ని వాడండి.',
+'tooltip-pt-mycontris' => 'మీ మార్పుచేర్పుల జాబితా',
+'tooltip-pt-login' => 'మిమà±\8dమలà±\8dని à°²à°¾à°\97ినవమని à°ªà±\8dà°°à±\8bà°¤à±\8dసహిసà±\8dà°¤à±\81à°¨à±\8dనాà°\82; à°\95ానà±\80 à°\85ది à°¤à°ªà±\8dపనిసరà±\87à°®à±\80 కాదు.',
+'tooltip-pt-logout' => 'లాà°\97à±\8cà°\9fà°µండి',
+'tooltip-ca-talk' => 'విషయపà±\81 à°ªà±\87à°\9cà±\80 గురించి చర్చ',
+'tooltip-ca-edit' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°®à±\80à°°à±\81 à°¸à°°à°¿à°¦à°¿à°¦à±\8dదవà°\9aà±\8dà°\9aà±\81. à°­à°¦à±\8dరపరà°\9aà±\87 ముందు మునుజూపు బొత్తాన్ని వాడండి.',
 'tooltip-ca-addsection' => 'కొత్త విభాగాన్ని మొదలుపెట్టండి',
 'tooltip-ca-viewsource' => 'ఈ పుటని సంరక్షించారు. మీరు దీని మూలాన్ని చూడవచ్చు',
-'tooltip-ca-history' => 'à°\88 à°ªà±\81à°\9f యొక్క వెనుకటి కూర్పులు',
+'tooltip-ca-history' => 'à°\88 à°ªà±\87à°\9cà±\80 యొక్క వెనుకటి కూర్పులు',
 'tooltip-ca-protect' => 'ఈ పేజీని సంరక్షించండి',
 'tooltip-ca-unprotect' => 'ఈ పేజీ సంరక్షణను మార్చండి',
 'tooltip-ca-delete' => 'ఈ పేజీని తొలగించండి',
 'tooltip-ca-undelete' => 'ఈ పేజీని తొలగించడానికి ముందు చేసిన మార్పులను పునఃస్థాపించు',
 'tooltip-ca-move' => 'ఈ పేజీని తరలించండి',
-'tooltip-ca-watch' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°®à±\80 à°µà°¿à°\95à±\8dషణా à°\9cాబితాà°\95à°¿ చేర్చుకోండి',
-'tooltip-ca-unwatch' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°®à±\80 à°µà°¿à°\95à±\8dషణా జాబితా నుండి తొలగించండి',
+'tooltip-ca-watch' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°®à±\80 à°µà±\80à°\95à±\8dà°·à°£ à°\9cాబితాà°\95à±\81 చేర్చుకోండి',
+'tooltip-ca-unwatch' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°®à±\80 à°µà±\80à°\95à±\8dà°·à°£ జాబితా నుండి తొలగించండి',
 'tooltip-search' => '{{SITENAME}} లో వెతకండి',
-'tooltip-search-go' => 'ఇదే పేరుతో పేజీ ఉంటే అక్కడికి తీసుకెళ్ళు',
+'tooltip-search-go' => 'à°\95à°\9aà±\8dà°\9aà°¿à°¤à°\82à°\97à°¾ à°\87à°¦à±\87 à°ªà±\87à°°à±\81à°¤à±\8b à°ªà±\87à°\9cà±\80 à°\89à°\82à°\9fà±\87 à°\85à°\95à±\8dà°\95à°¡à°¿à°\95à°¿ à°¤à±\80à°¸à±\81à°\95à±\86à°³à±\8dà°³à±\81',
 'tooltip-search-fulltext' => 'పేజీలలో ఈ పాఠ్యం కొరకు వెతుకు',
-'tooltip-p-logo' => 'à°®à±\8aà°¦à°\9fà°¿ à°ªà±\81à°\9fà°¨à±\81 à°¦à°°à±\8dశిà°\82à°\9aండి',
-'tooltip-n-mainpage' => 'తలపà±\81à°\9fà°¨à±\81 చూడండి',
-'tooltip-n-mainpage-description' => 'à°®à±\8aà°¦à°\9fà°¿ à°ªà±\81à°\9fà°¨à±\81 చూడండి',
+'tooltip-p-logo' => 'à°®à±\8aà°¦à°\9fà°¿ à°ªà±\87à°\9cà±\80 à°\9aà±\82à°¡ండి',
+'tooltip-n-mainpage' => 'à°®à±\8aà°¦à°\9fà°¿ à°ªà±\87à°\9cà±\80 చూడండి',
+'tooltip-n-mainpage-description' => 'à°®à±\8aà°¦à°\9fà°¿ à°ªà±\87à°\9cà±\80 చూడండి',
 'tooltip-n-portal' => 'ప్రాజెక్టు గురించి, మీరేం చేయవచ్చు, సమాచారం ఎక్కడ దొరుకుతుంది',
-'tooltip-n-currentevents' => 'à°\87à°ªà±\8dà°ªà°\9fà°¿ à°®à±\81à°\9aà±\8dà°\9aà°\9fà±\8dà°² à°¯à±\8aà°\95à±\8dà°\95 à°®à±\81à°¨à±\81à°ªà°\9fà°¿ à°®à°\82దలనà±\81 à°¤à±\86à°²à±\81à°¸à±\81à°\95à±\8aà°¨à±\81డి',
+'tooltip-n-currentevents' => 'వరà±\8dతమాన à°\98à°\9fనల à°¯à±\8aà°\95à±\8dà°\95 à°¨à±\87పథà±\8dయానà±\8dని à°¤à±\86à°²à±\81à°¸à±\81à°\95à±\8bà°\82డి',
 'tooltip-n-recentchanges' => 'వికీలో ఇటీవల జరిగిన మార్పుల జాబితా.',
 'tooltip-n-randompage' => 'ఓ యాదృచ్చిక పేజీని చూడండి',
-'tooltip-n-help' => 'à°¤à±\86à°²à±\81à°¸à±\81à°\95à±\8bడానిà°\95à°¿ à°\93 à°®à°\82à°\9aà°¿ à°ªà±\8dà°°à°¦à±\87à°¶à°\82.',
-'tooltip-t-whatlinkshere' => 'à°\87à°\95à±\8dà°\95à°¡à°¿à°¤à±\8b à°®à±\81డిపడియà±\81à°¨à±\8dà°¨ à°\85à°¨à±\8dని à°µà°¿à°\95à±\80 à°ªà±\81à°\9fà°² à°²à°\82à°\95à±\86à°²à±\81',
-'tooltip-t-recentchangeslinked' => 'à°\88 à°ªà±\81à°\9fà°\95à±\81 à°®à±\81డివడియà±\81à°¨à±\8dà°¨ à°ªà±\81à°\9fà°²లో జరిగిన ఇటీవలి మార్పులు',
+'tooltip-n-help' => 'à°¨à±\87à°°à±\8dà°\9aà±\81à°\95à±\81à°¨à±\87 à°\9aà±\8bà°\9fà±\81',
+'tooltip-t-whatlinkshere' => 'à°\87à°\95à±\8dà°\95à°¡à°¿à°\95à°¿ à°²à°¿à°\82à°\95à±\88 à°\89à°¨à±\8dà°¨ à°\85à°¨à±\8dని à°µà°¿à°\95à±\80 à°ªà±\87à°\9cà±\80à°² à°\9cాబితా',
+'tooltip-t-recentchangeslinked' => 'à°\88 à°ªà±\87à°\9cà±\80à°\95à°¿ à°²à°¿à°\82à°\95à±\88 à°\89à°¨à±\8dà°¨ à°ªà±\87à°\9cà±\80à°²à±\8dలో జరిగిన ఇటీవలి మార్పులు',
 'tooltip-feed-rss' => 'ఈ పేజీకి RSS ఫీడు',
 'tooltip-feed-atom' => 'ఈ పేజీకి Atom ఫీడు',
 'tooltip-t-contributions' => 'ఈ వాడుకరి యొక్క రచనల జాబితా చూడండి',
 'tooltip-t-emailuser' => 'ఈ వాడుకరికి ఓ ఈమెయిలు పంపండి',
 'tooltip-t-upload' => 'దస్త్రాలను ఎక్కించండి',
-'tooltip-t-specialpages' => 'à°\85à°¨à±\8dని à°ªà±\8dà°°à°¤à±\8dà°¯à±\87à°\95 à°ªà±\81à°\9fà°² à°¯à±\8aà°\95à±\8dà°\95 à°\9cాబితా',
-'tooltip-t-print' => 'à°\88 à°ªà±\81à°\9f à°¯à±\8aà°\95à±\8dà°\95 à°\85à°\9aà±\8dà°\9aà±\81à°¤à±\80యదà°\97à±\8dà°\97 à°\95à±\82à°°à±\8dపు',
-'tooltip-t-permalink' => 'à°ªà±\81à°\9f యొక్క ఈ కూర్పుకి శాశ్వత లంకె',
-'tooltip-ca-nstab-main' => 'à°®à±\81à°\9aà±\8dà°\9aà°\9fà±\8dà°² à°ªà±\81à°\9fà°¨à±\81 చూడండి',
+'tooltip-t-specialpages' => 'అన్ని ప్రత్యేక పుటల జాబితా',
+'tooltip-t-print' => 'à°\88 à°ªà±\87à°\9cà±\80 à°¯à±\8aà°\95à±\8dà°\95 à°®à±\81à°¦à±\8dరణా à°°à±\82పు',
+'tooltip-t-permalink' => 'à°ªà±\87à°\9cà±\80 యొక్క ఈ కూర్పుకి శాశ్వత లంకె',
+'tooltip-ca-nstab-main' => 'విషయపà±\81 à°ªà±\87à°\9cà±\80ని చూడండి',
 'tooltip-ca-nstab-user' => 'వాడుకరి పేజీని చూడండి',
 'tooltip-ca-nstab-media' => 'మీడియా పేజీని చూడండి',
 'tooltip-ca-nstab-special' => 'ఇది ఒక ప్రత్యేక పుట, దీన్ని మీరు సరిదిద్దలేరు',
@@ -2842,16 +2946,16 @@ $2',
 'tooltip-minoredit' => 'దీన్ని చిన్న మార్పుగా గుర్తించు',
 'tooltip-save' => 'మీ మార్పులను భద్రపరచండి',
 'tooltip-preview' => 'మీ మార్పులను మునుజూడండి, భద్రపరిచేముందు ఇది వాడండి!',
-'tooltip-diff' => 'పాఠానిà°\95à°¿ à°®à±\80à°°à±\81 à°\9aà±\87సిన à°®à°¾à°°à±\8dà°ªà±\81లనà±\81 à°\9aà±\82à°ªà±\81à°\82à°\9aà±\81. [alt-v]',
-'tooltip-compareselectedversions' => 'ఈ పేజీలో ఎంచుకున్న రెండు కూర్పులకు మధ్య తేడాలను చూడండి. [alt-v]',
-'tooltip-watch' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°®à±\80 à°µà°¿à°\95à±\8dషణా జాబితాకు చేర్చండి',
+'tooltip-diff' => 'పాఠానిà°\95à°¿ à°®à±\80à°°à±\81 à°\8f à°®à°¾à°°à±\8dà°ªà±\81à°²à±\81 à°\9aà±\87సారà±\8b à°\9aà±\82పిసà±\8dà°¤à±\81à°\82ది',
+'tooltip-compareselectedversions' => 'ఈ పేజీలో ఎంచుకున్న రెండు కూర్పులకు మధ్య తేడాలను చూడండి',
+'tooltip-watch' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°®à±\80 à°µà±\80à°\95à±\8dà°·à°£ జాబితాకు చేర్చండి',
 'tooltip-watchlistedit-normal-submit' => 'శీర్షికలను తీసివెయ్యి',
 'tooltip-watchlistedit-raw-submit' => 'వీక్షణ జాబితాను తాజాకరించు',
 'tooltip-recreate' => 'పేజీ తుడిచివేయబడ్డాకానీ మళ్ళీ సృష్టించు',
 'tooltip-upload' => 'ఎగుమతి మొదలుపెట్టు',
-'tooltip-rollback' => '"à°°à°¦à±\8dà°¦à±\81à°\9aà±\87యి" à°\85à°¨à±\87ది à°\88 à°ªà±\87à°\9cà±\80ని à°\9aివరిà°\97à°¾ à°®à°¾à°°à±\8dà°\9aినవారి à°®à°¾à°°à±\8dà°ªà±\81లని రద్దుచేస్తుంది',
-'tooltip-undo' => '"దిదà±\8dà°¦à±\81బాà°\9fà±\81ని à°°à°¦à±\8dà°¦à±\81à°\9aà±\87యి" à°\88 à°®à°¾à°°à±\8dà°ªà±\81ని à°°à°¦à±\8dà°¦à±\81à°\9aà±\87à°¸à±\8dà°¤à±\81à°\82ది à°®à°°à°¿à°¯à±\81 దిద్దుబాటు ఫారాన్ని మునుజూపులో తెరుస్తుంది.
-సారాంశానికి కారణాన్ని చేర్చే వీలుకల్పిస్తుంది',
+'tooltip-rollback' => '"à°°à°¦à±\8dà°¦à±\81à°\9aà±\87యి" à°\85à°¨à±\87ది à°\88 à°ªà±\87à°\9cà±\80ని à°\9aివరిà°\97à°¾ à°®à°¾à°°à±\8dà°\9aినవారి à°®à°¾à°°à±\8dà°ªà±\81లనà±\81 à°\92à°\95à±\8dà°\95à°¨à±\8aà°\95à±\8dà°\95à±\81à°¤à±\8b రద్దుచేస్తుంది',
+'tooltip-undo' => '"à°°à°¦à±\8dà°¦à±\81à°\9aà±\87యి" à°\88 à°®à°¾à°°à±\8dà°ªà±\81ని à°°à°¦à±\8dà°¦à±\81à°\9aà±\87సి, దిద్దుబాటు ఫారాన్ని మునుజూపులో తెరుస్తుంది.
+సారాంశానికి కారణాన్ని చేర్చే వీలుకల్పిస్తుంది.',
 'tooltip-preferences-save' => 'అభిరుచులను భద్రపరచు',
 'tooltip-summary' => 'చిన్న సారాంశాన్ని ఇవ్వండి',
 
@@ -2878,6 +2982,9 @@ $2',
 'spambot_username' => 'మీడియావికీ స్పాము శుద్ధి',
 'spam_reverting' => '$1 కు లింకులు లేని గత కూర్పుకు తిరిగి తీసుకెళ్తున్నాం',
 'spam_blanking' => '$1 కు లింకులు ఉన్న కూర్పులన్నిటినీ ఖాళీ చేస్తున్నాం',
+'spam_deleting' => '$1 కు లింకులున్న కూర్పులను తొలగిస్తున్నాం',
+'simpleantispam-label' => 'యాంటీ స్పామ్ పరీక్ష.
+దీన్ని <strong>పూరించకండి</strong>!',
 
 # Info page
 'pageinfo-title' => '"$1" గురించి సమాచారం',
@@ -2890,6 +2997,8 @@ $2',
 'pageinfo-length' => 'పేజీ నిడివి (బైట్లలో)',
 'pageinfo-article-id' => 'పేజీ ఐడీ',
 'pageinfo-language' => 'పేజీ విషయపు భాష',
+'pageinfo-content-model' => 'పేజీ కంటెంటు మోడల్',
+'pageinfo-robot-policy' => 'రోబోట్లచే ఇండెక్సవుతోంది',
 'pageinfo-robot-index' => 'అనుమతించబడింది',
 'pageinfo-robot-noindex' => 'అనుమతించబడలేదు',
 'pageinfo-views' => 'వీక్షణల సంఖ్య',
@@ -2903,7 +3012,9 @@ $2',
 'pageinfo-lastuser' => 'ఇట్టీవలి మార్పుచేర్పుల కర్త',
 'pageinfo-lasttime' => 'చివరిసారిగా మార్పు చేసిన తేదీ',
 'pageinfo-edits' => 'మొత్తం మార్పుల సంఖ్య',
+'pageinfo-authors' => 'ప్రత్యేక కర్తల మొత్తం సంఖ్య',
 'pageinfo-recent-edits' => 'ఇటీవలి మార్పుల సంఖ్య (గత $1 లోపు)',
+'pageinfo-recent-authors' => 'ప్రత్యేక కర్తల ఇటీవలి సంఖ్య',
 'pageinfo-magic-words' => 'చమత్కార {{PLURAL:$1|పదం|పదాలు}} ($1)',
 'pageinfo-hidden-categories' => 'దాచిన {{PLURAL:$1|వర్గం|వర్గాలు}} ($1)',
 'pageinfo-templates' => 'ట్రాన్స్‍క్లూడు చేసిన {{PLURAL:$1|మూస|మూసలు}} ($1)',
@@ -2911,7 +3022,9 @@ $2',
 'pageinfo-toolboxlink' => 'పేజీ సమాచారం',
 'pageinfo-redirectsto' => 'ఇక్కడికి దారిమార్పు:',
 'pageinfo-redirectsto-info' => 'సమాచారం',
+'pageinfo-contentpage' => 'విషయపు పేజీగా పరిగణింపబడుతుంది',
 'pageinfo-contentpage-yes' => 'అవును',
+'pageinfo-protect-cascading' => 'సంరక్షణ ఇక్కడినుంచి వ్యాపిస్తుంది',
 'pageinfo-protect-cascading-yes' => 'అవును',
 'pageinfo-category-info' => 'వర్గపు సమాచారం',
 'pageinfo-category-pages' => 'పేజీల సంఖ్య',
@@ -2967,6 +3080,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.',
@@ -3020,12 +3134,13 @@ $1',
 # Bad image list
 'bad_image_list' => 'కింద తెలిపిన తీరులో కలపాలి:
 
-జాబితాలో ఉన్నవాటినే (* గుర్తుతో మొదలయ్యే వాక్యాలు) పరిగణలోకి తీసుకుంటారు. వ్యాక్యంలో ఉన్న మొదటి లింకు ఒక చెడిపోయిన బొమ్మకు లింకు అయ్యుండాలి.
-అదే వాక్యంలో ఈ లింకు తరువాత వచ్చే లింకులను పట్టించుకోదు, ఆ పేజీలలో బొమ్మలు సరిగ్గా చేర్చారని భావిస్తుంది.',
+జాబితాలో ఉన్నవే (* గుర్తుతో మొదలయ్యే వాక్యాలు) పరిగణించబడతాయి.
+వాక్యంలో ఉన్న మొదటి లింకు ఒక చెడిపోయిన ఫైలుకు లింకు అయ్యుండాలి.
+ఆ వాక్యంలో తరువాత వచ్చే లింకులను పట్టించుకోదు. అంటే, ఆ పేజీలలో బొమ్మలు సరిగ్గా చేర్చారని భావిస్తుంది.',
 
 # Metadata
 'metadata' => 'మెటాడేటా',
-'metadata-help' => 'à°\88 à°«à±\88à°²à±\81à°²à±\8b à°\85దనపà±\81 à°¸à°®à°¾à°\9aారà°\82 à°\89à°\82ది, à°¬à°¹à±\81శా à°¦à±\80à°¨à±\8dని à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°\9aడానిà°\95à°¿ à°²à±\87దా à°¸à°¾à°\82à°\96à±\8dà°¯à±\80à°\95à°°à°¿à°\82à°\9aడానిà°\95à°¿ à°µà°¾à°¡à°¿à°¨ à°¡à°¿à°\9cà°¿à°\9fà°²à±\8d à°\95à±\87à°®à±\86à°°à°¾ à°²à±\87దా à°¸à±\8dà°\95ానరà±\8d à°\86 à°¸à°®à°¾à°\9aారానà±\8dని à°\9aà±\87à°°à±\8dà°\9aà°¿à°µà±\81à°\82à°µà°\9aà±\8dà°\9aà±\81. à°\88 à°«à±\88à°²à±\81ని à°\85సలà±\81 à°¸à±\8dథితి à°¨à±\81à°\82à°¡à°¿ à°®à°¾à°°à°¿à°¸à±\8dà°¤à±\87, à°\95à±\8aà°¨à±\8dని à°µà°¿à°µà°°à°¾à°²à±\81 à°\86 à°®à°¾à°°à°¿à°¨ à°«à±\88à°²à±\81à°²à±\8b పూర్తిగా ప్రతిఫలించకపోవచ్చు.',
+'metadata-help' => 'à°\88 à°«à±\88à°²à±\81à°²à±\8b à°\85దనపà±\81 à°¸à°®à°¾à°\9aారà°\82 à°\89à°\82ది, à°¬à°¹à±\81శా à°¦à±\80à°¨à±\8dని à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°\9aడానిà°\95à°¿ à°²à±\87దా à°¸à°¾à°\82à°\96à±\8dà°¯à±\80à°\95à°°à°¿à°\82à°\9aడానిà°\95à°¿ à°µà°¾à°¡à°¿à°¨ à°¡à°¿à°\9cà°¿à°\9fà°²à±\8d à°\95à±\87à°®à±\86à°°à°¾ à°²à±\87దా à°¸à±\8dà°\95ానరà±\8d à°\86 à°¸à°®à°¾à°\9aారానà±\8dని à°\9aà±\87à°°à±\8dà°\9aà°¿à°µà±\81à°\82à°¡à°µà°\9aà±\8dà°\9aà±\81. à°\88 à°«à±\88à°²à±\81à°¨à±\81 à°\85సలà±\81 à°¸à±\8dథితి à°¨à±\81à°\82à°¡à°¿ à°®à°¾à°°à°¿à°¸à±\8dà°¤à±\87, à°\86 à°®à°¾à°°à°¿à°¨ à°«à±\88à°²à±\81à°²à±\8b à°\95à±\8aà°¨à±\8dని à°µà°¿à°µà°°à°¾à°²à±\81 పూర్తిగా ప్రతిఫలించకపోవచ్చు.',
 'metadata-expand' => 'విస్తరిత వివరాలను చూపించు',
 'metadata-collapse' => 'విస్తరిత వివరాలను దాచు',
 'metadata-fields' => 'కింది జాబితాలో ఉన్న మెటాడేటా ఫీల్డులు, బొమ్మ పేజీలో మేటాడేటా టేబులు మూసుకొన్నపుడు కనబడతాయి. మిగతావి దాచేసి ఉంటాయి. 
@@ -3177,6 +3292,7 @@ $1',
 'exif-source' => 'మూలం',
 'exif-editstatus' => 'బొమ్మ యొక్క ఎడిటోరియల్ స్థితి',
 'exif-urgency' => 'ఎంత త్వరగా కావాలి',
+'exif-fixtureidentifier' => 'స్థాపిత వస్తువు పేరు',
 'exif-locationdest' => 'చూపించిన ప్రాంతం',
 'exif-objectcycle' => 'ఈ మాధ్యమం ఉద్దేశించిన సమయం',
 'exif-contact' => 'సంప్రదింపు సమాచారం',
@@ -3192,12 +3308,18 @@ $1',
 'exif-serialnumber' => 'కెమేరా యొక్క సీరియల్ నంబర్',
 'exif-cameraownername' => 'కేమెరా యజమాని',
 'exif-label' => 'సూచిక (లేబెల్)',
+'exif-nickname' => 'బొమ్మ పేరు',
 'exif-rating' => 'రేటింగు (5 కి గాను)',
 'exif-rightscertificate' => 'హక్కుల నిర్వాహణ ధృవీకరణ పత్రం',
 'exif-copyrighted' => 'కాపీహక్కుల స్థితి',
 'exif-copyrightowner' => 'కాపీ హక్కుదారు',
 'exif-usageterms' => 'వాడుక నియమాలు',
+'exif-webstatement' => 'ఆన్‌లైన్ కాపీరైటు పాఠ్యం',
+'exif-originaldocumentid' => 'మూల దస్త్రం యొక్క విశిష్ఠ ఐడీ',
+'exif-licenseurl' => 'కాపీరైటు లైసెన్సు URL',
 'exif-morepermissionsurl' => 'ప్రత్యామ్నాయ లైసెన్సు సమాచారం',
+'exif-attributionurl' => 'దీనిని తిరిగి వాడుకోవాలంటే, ఇక్కడికి లంకె వేయండి',
+'exif-preferredattributionname' => 'దీనిని తిరిగి వాడుకోవాలంటే, వీరిని పేర్కొనండి',
 'exif-pngfilecomment' => 'PNG ఫైలు వ్యాఖ్య',
 'exif-disclaimer' => 'నిష్పూచీ',
 'exif-contentwarning' => 'విషయపు హెచ్చరిక',
@@ -3230,6 +3352,8 @@ $1',
 'exif-planarconfiguration-1' => 'స్థూల ఆకృతి',
 'exif-planarconfiguration-2' => 'సమతల ఆకృతి',
 
+'exif-colorspace-65535' => 'క్రమాంకితం కానిది',
+
 'exif-componentsconfiguration-0' => 'లేదు',
 
 'exif-exposureprogram-0' => 'అనిర్వచితం',
@@ -3363,6 +3487,12 @@ $1',
 'exif-gpsdestdistance-m' => 'మైళ్ళు',
 'exif-gpsdestdistance-n' => 'నాటికల్ మైళ్ళు',
 
+'exif-gpsdop-excellent' => 'శ్రేష్ఠం ($1)',
+'exif-gpsdop-good' => 'ఉత్తమం ($1)',
+'exif-gpsdop-moderate' => 'మధ్యమం ($1)',
+'exif-gpsdop-fair' => 'పర్లేదు ($1)',
+'exif-gpsdop-poor' => 'బాగా లేదు ($1)',
+
 'exif-objectcycle-a' => 'ఉదయం మాత్రమే',
 'exif-objectcycle-p' => 'సాయంత్రం మాత్రమే',
 'exif-objectcycle-b' => 'ఉదయమూ మరియు సాయంత్రమూ',
@@ -3371,6 +3501,8 @@ $1',
 'exif-gpsdirection-t' => 'వాస్తవ దిశ',
 'exif-gpsdirection-m' => 'అయస్కాంత దిశ',
 
+'exif-ycbcrpositioning-1' => 'మధ్యగతం చేయబడిన',
+
 'exif-dc-contributor' => 'సహాయకులు',
 'exif-dc-date' => 'తేదీ‍‍(లు)',
 'exif-dc-publisher' => 'ప్రచురణకర్త',
@@ -3492,6 +3624,7 @@ $5
 
 # Language selector for translatable SVGs
 'img-lang-default' => '(అప్రమేయ భాష)',
+'img-lang-info' => 'ఈ బొమ్మను $1 లో చూపెట్టు. $2',
 'img-lang-go' => 'వెళ్ళు',
 
 # Table pager
@@ -3570,11 +3703,22 @@ $5
 'version-parser-function-hooks' => 'పార్సరుకు కొక్కాలు',
 'version-hook-name' => 'కొక్కెం పేరు',
 'version-hook-subscribedby' => 'ఉపయోగిస్తున్నవి',
-'version-version' => '(సంచిక $1)',
-'version-license' => 'లైసెన్సు',
+'version-version' => '(కూర్పు $1)',
+'version-license' => 'MediaWiki లైసెన్సు',
+'version-ext-license' => 'లైసెన్సు',
+'version-ext-colheader-name' => 'పొడిగింత',
+'version-ext-colheader-version' => 'కూర్పు',
+'version-ext-colheader-license' => 'లైసెన్సు',
+'version-ext-colheader-description' => 'వివరణ',
+'version-ext-colheader-credits' => 'కర్తలు',
+'version-license-title' => '$1 కోసం లైసెన్సు',
+'version-license-not-found' => 'ఈ పొడిగింతకు వివరమైన లైసెన్సు సమాచారమేమీ కనబడలేదు.',
+'version-credits-title' => '$1 యొక్క శ్రేయస్సులు',
+'version-credits-not-found' => 'ఈ పొడిగింతకు వివరమైన శ్రేయస్సు సమాచారమేమీ కనబడలేదు.',
 'version-poweredby-credits' => "ఈ వికీ  '''[https://www.mediawiki.org/ మీడియావికీ]'''చే శక్తిమంతం, కాపీహక్కులు  © 2001-$1 $2.",
 'version-poweredby-others' => 'ఇతరులు',
 'version-poweredby-translators' => 'translatewiki.net అనువాదకులు',
+'version-credits-summary' => 'కింది వ్యక్తులు [[Special:Version|MediaWiki]] కి చేసిన సేవకుగాను, వారిని గుర్తించదలచాం.',
 'version-license-info' => 'మీడియావికీ అన్నది స్వేచ్ఛా మృదూపకరణం; మీరు దీన్ని పునఃపంపిణీ చేయవచ్చు మరియు/లేదా ఫ్రీ సాఫ్ట్&zwnj;వేర్ ఫౌండేషన్ ప్రచురించిన గ్నూ జనరల్ పబ్లిక్ లైసెస్సు వెర్షను 2 లేదా (మీ ఎంపిక ప్రకారం) అంతకంటే కొత్త వెర్షను యొక్క నియమాలకు లోబడి మార్చుకోవచ్చు.
 
 మీడియావికీ ప్రజోపయోగ ఆకాంక్షతో పంపిణీ చేయబడుతుంది, కానీ ఎటువంటి వారంటీ లేకుండా; కనీసం ఏదైనా ప్రత్యేక ఉద్దేశానికి సరిపడుతుందని గానీ లేదా వస్తుత్వం యొక్క అంతర్నిహిత వారంటీ లేకుండా. మరిన్ని వివరాలకు గ్నూ జనరల్ పబ్లిక్ లైసెన్సుని చూడండి.
@@ -3588,9 +3732,13 @@ $5
 'version-entrypoints-header-url' => 'చిరునామా',
 
 # Special:Redirect
+'redirect' => 'ఫైలు, వాడుకరి, పేజీ లేదా కూర్పు ఐడీ ప్రకారం దారిమార్పు',
+'redirect-legend' => 'ఫైలు లేదా పేజీకి దారిమార్పు',
 'redirect-submit' => 'వెళ్ళు',
+'redirect-lookup' => 'చూడు:',
 'redirect-value' => 'విలువ:',
 'redirect-user' => 'వాడుకరి ID',
+'redirect-page' => 'పేజీ ఐడీ',
 'redirect-revision' => 'పేజీ కూర్పు',
 'redirect-file' => 'దస్త్రపు పేరు',
 'redirect-not-exists' => 'విలువ కనబడలేదు',
@@ -3610,8 +3758,7 @@ $5
 'specialpages' => 'ప్రత్యేక పేజీలు',
 'specialpages-note-top' => 'సూచిక',
 'specialpages-note' => '* మామూలు ప్రత్యేక పుటలు.
-* <strong class="mw-specialpagerestricted">నియంత్రిత ప్రత్యేక పుటలు.</strong>
-* <span class="mw-specialpagecached">Cached ప్రత్యేక పుటలు (పాతబడి ఉండొచ్చు).</span>',
+* <span class="mw-specialpagerestricted">నియంత్రిత ప్రత్యేక పుటలు.</span>',
 'specialpages-group-maintenance' => 'నిర్వహణా నివేదికలు',
 'specialpages-group-other' => 'ఇతర ప్రత్యేక పేజీలు',
 'specialpages-group-login' => 'ప్రవేశించండి / ఖాతాను సృష్టించుకోండి',
@@ -3643,11 +3790,13 @@ $5
 'tags' => 'సరైన మార్పు ట్యాగులు',
 'tag-filter' => '[[Special:Tags|ట్యాగుల]] వడపోత:',
 'tag-filter-submit' => 'వడపోయి',
+'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|ట్యాగు|ట్యాగులు}}]]: $2)',
 'tags-title' => 'టాగులు',
 'tags-intro' => 'ఈ పేజీ మృదూపకరణం మార్పులకు ఇచ్చే ట్యాగులను, మరియు వాటి అర్ధాలను చూపిస్తుంది.',
 'tags-tag' => 'ట్యాగు పేరు',
 'tags-display-header' => 'మార్పుల జాబితాలో కనపించు రీతి',
 'tags-description-header' => 'అర్థం యొక్క పూర్తి వివరణ',
+'tags-active-header' => 'క్రియాశీలం?',
 'tags-hitcount-header' => 'ట్యాగులున్న మార్పులు',
 'tags-active-yes' => 'అవును',
 'tags-active-no' => 'కాదు',
@@ -3670,6 +3819,7 @@ $5
 'dberr-problems' => 'క్షమించండి! ఈ సైటు సాంకేతిక సమస్యలని ఎదుర్కొంటుంది.',
 'dberr-again' => 'కొన్ని నిమిషాలాగి మళ్ళీ ప్రయత్నించండి.',
 'dberr-info' => '(డాటాబేసు సర్వరుని సంధానించలేకున్నాం: $1)',
+'dberr-info-hidden' => '(డేటాబేసు సర్వరును కాంటాక్టు చెయ్యలేకున్నాం)',
 'dberr-usegoogle' => 'ఈలోపు మీరు గూగుల్ ద్వారా వెతకడానికి ప్రయత్నించండి.',
 'dberr-outofdate' => 'మా విషయం యొక్క వారి సూచీలు అంత తాజావి కావపోవచ్చని గమనించండి.',
 'dberr-cachederror' => 'అభ్యర్థించిన పేజీ యొక్క కోశం లోని కాపీ ఇది, అంత తాజాది కాకపోవచ్చు.',
@@ -3701,9 +3851,16 @@ $5
 'logentry-delete-event-legacy' => '$3 లో లాగ్ ఘటనల కన్పట్టటాన్ని (విజిబిలిటీ) $1 {{GENDER:$2|మార్చారు}}',
 'logentry-delete-revision-legacy' => 'పేజీ $3 లో కూర్పుల కన్పట్టటాన్ని (విజిబిలిటీ) $1 {{GENDER:$2|మార్చారు}}',
 'logentry-suppress-delete' => 'పేజీ $3 ని $1 {{GENDER:$2|అణచిపెట్టారు}}',
+'logentry-suppress-event' => '$3 లోని {{PLURAL:$5|ఒక లాగ్ ఘటన|$5 లాగ్ ఘటనల}} ప్రేక్షకత్వాన్ని $1 రహస్యంగా {{GENDER:$2|మార్చారు}}: $4',
+'logentry-suppress-revision' => '$3 పేజీ యొక్క {{PLURAL:$5|ఒక కూర్పు|$5 కూర్పుల}} ప్రేక్షకత్వాన్ని $1 రహస్యంగా {{GENDER:$2|మార్చారు}}: $4',
+'logentry-suppress-event-legacy' => '$3 లోని లాగ్ ఘటనల ప్రేక్షకత్వాన్ని $1 రహస్యంగా {{GENDER:$2|మార్చారు}}',
+'logentry-suppress-revision-legacy' => 'పేజీ $3 యొక్క కూర్పుల ప్రేక్షకత్వాన్ని $1 రహస్యంగా {{GENDER:$2|మార్చారు}}',
 'revdelete-content-hid' => 'కంటెంట్ దాచబడింది',
 'revdelete-summary-hid' => 'మార్పుల సారాంశాన్ని దాచారు',
 'revdelete-uname-hid' => 'వాడుకరి పేరుని దాచారు',
+'revdelete-content-unhid' => 'కంటెంట్ బయటపెట్టబడింది',
+'revdelete-summary-unhid' => 'దిద్దుబాటు సారాంశం బయటపెట్టబడింది',
+'revdelete-uname-unhid' => 'వాడుకరిపేరు బయటపెట్టబడింది',
 'revdelete-restricted' => 'నిర్వాహకులకు ఆంక్షలు విధించాను',
 'revdelete-unrestricted' => 'నిర్వాహకులకున్న ఆంక్షలను ఎత్తేశాను',
 'logentry-move-move' => '$1, పేజీ $3 ను $4 కు {{GENDER:$2|తరలించారు}}',
@@ -3730,6 +3887,7 @@ $5
 'feedback-cancel' => 'రద్దుచేయి',
 'feedback-submit' => 'ప్రతిస్పందనను దాఖలుచేయి',
 'feedback-adding' => 'ఫీడ్‍బ్యాకును పేజీలోకి చేరుస్తున్నాం...',
+'feedback-error1' => 'లోపం: API నుండి గుర్తుపట్టలేని ఫలితం',
 'feedback-error2' => 'దోషము: సవరణ విఫలమైంది',
 'feedback-error3' => 'లోపం: API నుండి ప్రతిస్పందన లేదు',
 'feedback-thanks' => 'కృతజ్ఞతలు! మీ ప్రతిస్పందనను “[$2 $1]” పేజీలో చేర్చాం.',
@@ -3739,6 +3897,7 @@ $5
 
 # Search suggestions
 'searchsuggest-search' => 'వెతుకు',
+'searchsuggest-containing' => 'కలిగియున్న...',
 
 # API errors
 'api-error-badaccess-groups' => 'ఈ వికీ లోనికి దస్త్రాలను ఎక్కించే అనుమతి మీకు లేదు.',
@@ -3758,13 +3917,23 @@ $5
 'api-error-filetype-banned' => 'ఈ రకపు దస్త్రాలని నిషేధించారు.',
 'api-error-filetype-banned-type' => '$1, అనుమతించబడిన {{PLURAL:$4|ఫైలు రకం కాదు|ఫైలు రకాలు కాదు}}. అనుమతించబడిన {{PLURAL:$3|ఫైలు రకం|ఫైలు రకాలు}}: $2.',
 'api-error-filetype-missing' => 'ఫైలుపేరులో ఓ ఎక్స్టెన్షను లేదు.',
+'api-error-hookaborted' => 'మీరు చేయ ప్రయత్నించిన మార్పును ఓ పొడిగింత అడ్డుకుంది.',
 'api-error-http' => 'అంతర్గత దోషము: సేవకానికి అనుసంధానమవలేకపోతున్నది.',
 'api-error-illegal-filename' => 'ఆ పైల్ పేరు అనుమతించబడదు.',
+'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-noimageinfo' => 'ఎక్కింపు జయప్రదమైంది. కానీ సర్వరు, ఆ ఫైలు గురించిన సమాచారమేమీ ఇవ్వలేదు.',
 'api-error-nomodule' => 'అంతర్గత దోషము: ఎక్కింపు పర్వికము అమర్చబడలేదు.',
 'api-error-ok-but-empty' => 'అంతర్గత దోషము: సేవకము నుండి ఎటువంటి స్పందనా లేదు.',
-'api-error-stashfailed' => 'అంతర్గత పొరపాటు: తాత్కాలిక దస్త్రాన్ని భద్రపరచడంలో సేవకి విఫలమైంది.',
+'api-error-overwrite' => 'ఈసరికే ఉన్న ఫైలును తిరగరాయడానికి అనుమతి లేదు.',
+'api-error-stashfailed' => 'అంతర్గత లోపం: తాత్కాలిక దస్త్రాన్ని భద్రపరచడంలో సేవకి విఫలమైంది.',
+'api-error-publishfailed' => 'అంతర్గత లోపం: తాత్కాలిక ఫైలును ప్రచురించడంలో సర్వరు విఫలమైంది.',
+'api-error-stasherror' => 'ఫైలును ఖాజానాకు ఎక్కించడంలో లోపం దొర్లింది.',
+'api-error-timeout' => 'సర్వరు ఆశించిన సమయం లోపు స్పందించలేదు.',
 'api-error-unclassified' => 'ఒక తెలియని దోషము సంభవించినది',
 'api-error-unknown-code' => 'తెలియని పొరపాటు: "$1".',
 'api-error-unknown-error' => 'అంతర్గత పొరపాటు: మీ దస్త్రాన్ని ఎక్కించేప్పుడు ఏదో పొరపాటు జరిగింది.',
@@ -3784,24 +3953,34 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|శతాబ్దం|శతాబ్దాలు}}',
 'duration-millennia' => '$1 {{PLURAL:$1|సహస్రాబ్దం|సహస్రాబ్దాలు}}',
 
+# Image rotation
+'rotate-comment' => 'బొమ్మ సవ్యదిశలో $1 {{PLURAL:$1|డిగ్రీ|డిగ్రీలు}} తిప్పబడింది',
+
 # Limit report
 'limitreport-cputime' => 'CPU సమయం వినియోగం',
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|క్షణం|క్షణాలు}}',
 'limitreport-walltime' => 'నిజ సమయం వినియోగం',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|క్షణం|క్షణాలు}}',
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|బైట్|బైట్లు}}',
+'limitreport-templateargumentsize' => 'మూస ఆర్గ్యుమెంట్ పరిమాణం',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|బైటు|బైట్లు}}',
+'limitreport-expansiondepth' => 'గరిష్ట విస్తరణ లోతు',
+'limitreport-expensivefunctioncount' => 'ఖరీదైన పార్సర్ ఫంక్షన్ల సంఖ్య',
 
 # Special:ExpandTemplates
 'expandtemplates' => 'మూసలను విస్తరించు',
-'expand_templates_intro' => 'ఈ ప్రత్యేక పేజీ మీరిచ్చిన మూసలను పూర్తిగా విస్తరించి, చూపిస్తుంది. ఇది <nowiki>{{</nowiki>#language:...}} వంటి పార్సరు ఫంక్షన్లను, <nowiki>{{</nowiki>CURRENTDAY}} వంటి చరరాశులను(వేరియబుల్) కూడా విస్తరిస్తుంది &mdash; నిజానికి జమిలి(మీసాల) బ్రాకెట్లలో ఉన్న ప్రతీదాన్నీ ఇది విస్తరిస్తుంది. మీడియావికీ నుండి సంబంధిత పార్సరు స్టేజిని పిలిచి ఇది ఈ పనిని సాధిస్తుంది.',
+'expand_templates_intro' => 'ఈ ప్రత్యేక పేజీ మీరిచ్చిన మూసలను పూర్తిగా విస్తరించి, చూపిస్తుంది. ఇది <code><nowiki>{{</nowiki>#language:...}}</code> వంటి పార్సరు ఫంక్షన్లను, <code><nowiki>{{</nowiki>CURRENTDAY}}</code> వంటి చరరాశులను (వేరియబుల్) కూడా విస్తరిస్తుంది. 
+నిజానికి ఇది మీసాల బ్రాకెట్లలో ఉన్న ప్రతీదాన్నీ విస్తరిస్తుంది.',
 'expand_templates_title' => '{{FULLPAGENAME}} మొదలగు వాటి కొరకు సందర్భ శీర్షిక:',
 'expand_templates_input' => 'విస్తరించవలసిన పాఠ్యం:',
 'expand_templates_output' => 'ఫలితం',
 'expand_templates_xml_output' => 'XML ఔట్&zwnj;పుట్',
+'expand_templates_html_output' => 'ముడి HTML ఔట్‍పుట్',
 'expand_templates_ok' => 'సరే',
 'expand_templates_remove_comments' => 'వ్యాఖ్యలను తొలగించు',
+'expand_templates_remove_nowiki' => 'ఫలితంలో <nowiki> ట్యాగులను అణచిపెట్టు',
 'expand_templates_generate_xml' => 'XML పార్స్ ట్రీని చూపించు',
+'expand_templates_generate_rawhtml' => 'ముడి HTML ను చూపించు',
 'expand_templates_preview' => 'మునుజూపు',
 
 );
index 70773de..0b4c1a4 100644 (file)
@@ -757,9 +757,6 @@ $1',
 'revdelete-nooldid-text' => 'Шумо ин ё он нусхаи(ҳои) мақсадро барои иҷрои ин амал мушаххас накардаед, нусхаи мушаххасшуда вуҷуд надорад, ё  шумо дар ҳоли кӯшиши пинҳон кардани нусхаи кунуниаш ҳастед.',
 'revdelete-selected' => "'''{{PLURAL:$2|Нусхаи интихобшуда|Нусхаҳои интихобшуда}} аз [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Гузориши маврид интихобшуда|Гузориши мавориди интихобшуда}}:'''",
-'revdelete-text' => "'''Нусхаҳои ва мавориди ҳазфшуда камокам дар таърих ва гузоришҳои саҳифа қобили мушоҳида ҳастанд, аммо бахшҳои аз мӯҳтавои он ба умум қобили мушоҳида нахоҳанд буд.'''
-
-Дигар мудирон дар {{SITENAME}} ҳанӯз метавонанд ба ин мӯҳтавои пинҳонро дастрасӣ кунанд ва ҳатто мавориди ҳазфшударо эҳё кунанд, магар он ки маҳдудиятҳои дигаре амалӣ гардад.",
 'revdelete-legend' => 'Танзими маҳдудиятҳои падидорӣ',
 'revdelete-hide-text' => 'Пинҳон кардани нусхаи матн',
 'revdelete-hide-image' => 'Пинҳон кардани мӯҳтавиёти парванда',
index 6e847fb..8c81845 100644 (file)
@@ -232,7 +232,6 @@ $messages = array(
 'tog-ccmeonemails' => 'ส่งสำเนาอีเมลที่ฉันส่งหาผู้อื่นให้ฉัน',
 'tog-diffonly' => 'ไม่แสดงเนื้อหาใต้ส่วนต่างการแก้ไข',
 'tog-showhiddencats' => 'แสดงหมวดหมู่ที่ซ่อนอยู่',
-'tog-noconvertlink' => 'ปิดใช้งานการแปลงชื่อเรื่องของลิงก์',
 'tog-norollbackdiff' => 'ไม่แสดงการเปลี่ยนแปลงหลังดำเนินการย้อนกลับฉุกเฉิน',
 'tog-useeditwarning' => 'เตือนฉัน เมื่อฉันกำลังจะออกจากหน้าแก้ไขโดยมีข้อมูลที่ยังไม่ได้บันทึก',
 'tog-prefershttps' => 'ใช้การเชื่อมต่อปลอดภัยทุกครั้งเมื่อล็อกอิน',
@@ -359,7 +358,6 @@ $messages = array(
 'vector-action-protect' => 'ป้องกัน',
 'vector-action-undelete' => 'กู้คืน',
 'vector-action-unprotect' => 'เปลี่ยนค่าการป้องกัน',
-'vector-simplesearch-preference' => 'เปิดใช้งานแถบค้นหาอย่างง่าย (เฉพาะหน้าตาเวกเตอร์)',
 'vector-view-create' => 'สร้าง',
 'vector-view-edit' => 'แก้ไข',
 'vector-view-history' => 'ดูประวัติ',
@@ -519,6 +517,12 @@ $1',
 # General errors
 'error' => 'ผิดพลาด',
 'databaseerror' => 'ผิดพลาดที่ฐานข้อมูล',
+'databaseerror-text' => 'เกิดความผิดพลาดข้อคำถามของฐานข้อมูล
+ซึ่งอาจบ่งชี้ว่ามีจุดบกพร่องในซอฟต์แวร์',
+'databaseerror-textcl' => 'เกิดความผิดพลาดข้อคำถามของฐานข้อมูล',
+'databaseerror-query' => 'ข้อคำถาม: $1',
+'databaseerror-function' => 'ฟังก์ชัน: $1',
+'databaseerror-error' => 'ความผิดพลาด: $1',
 'laggedslavemode' => "'''คำเตือน:''' ข้อมูลในหน้าอาจไม่ใช่ข้อมูลล่าสุด",
 'readonly' => 'ฐานข้อมูลถูกล็อก',
 'enterlockreason' => 'ใส่เหตุแห่งการล็อก ทั้งเวลาที่คาดว่าจะปลดล็อก',
@@ -634,8 +638,6 @@ $1',
 'gotaccountlink' => 'ล็อกอิน',
 'userlogin-resetlink' => 'ลืมรายละเอียดล็อกอินของคุณหรือ',
 'userlogin-resetpassword-link' => 'ลืมรหัสผ่านหรือ',
-'helplogin-url' => 'Help:การล็อกอิน',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|คำอธิบายเรื่องการล็อกอิน]]',
 'userlogin-loggedin' => 'คุณล็อกอินในชื่อ {{GENDER:$1|$1}} แล้ว
 ใช้แบบด้านล่างเพื่อล็อกอินเป็นอีกผู้ใช้หนึ่ง',
 'userlogin-createanother' => 'สร้างอีกบัญชี',
@@ -720,6 +722,9 @@ $1',
 'suspicious-userlogout' => 'คำขอล็อกเอาต์ของคุณถูกปฏิเสธเพราะดูเหมือนส่งมาจากเบราว์เซอร์หรือพร็อกซีแคชที่เสีย',
 'createacct-another-realname-tip' => 'ไม่จำเป็นต้องใส่ชื่อจริง
 หากคุณเลือกใส่ชื่อจริง จะใช้เพื่อแสดงที่มาสำหรับงานของตน',
+'pt-login' => 'ล็อกอิน',
+'pt-createaccount' => 'สร้างบัญชี',
+'pt-userlogout' => 'ล็อกเอาต์',
 
 # Email sending
 'php-mail-error-unknown' => 'เกิดข้อผิดพลาดไม่ทราบสาเหตุในฟังก์ชัน mail() ของพีเอชพี',
@@ -728,7 +733,7 @@ $1',
 
 # Change password dialog
 'changepassword' => 'เปลี่ยนรหัสผ่าน',
-'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_announce' => 'à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\88ึà¸\87à¸\88ะà¹\80สรà¹\87à¸\88สิà¹\89à¸\99à¸\81ารลà¹\87อà¸\81อิà¸\99',
 'resetpass_text' => '<!-- เพิ่มข้อความที่นี่ -->',
 'resetpass_header' => 'เปลี่ยนรหัสผ่าน',
 'oldpassword' => 'รหัสผ่านเดิม:',
@@ -736,14 +741,21 @@ $1',
 'retypenew' => 'พิมพ์รหัสผ่านใหม่อีกครั้ง:',
 'resetpass_submit' => 'ตั้งรหัสผ่านและล็อกอิน',
 'changepassword-success' => 'เปลี่ยนรหัสผ่านของคุณเรียบร้อย',
+'changepassword-throttled' => 'คุณได้พยายามล็อกอินมากครั้งเกินไป
+กรุณารอ $1 ก่อนลองอีกครั้ง',
 'resetpass_forbidden' => 'ไม่สามารถเปลี่ยนรหัสผ่านได้',
 'resetpass-no-info' => 'คุณต้องล็อกอินเพื่อเข้าถึงหน้านี้โดยตรง',
 'resetpass-submit-loggedin' => 'เปลี่ยนรหัสผ่าน',
 'resetpass-submit-cancel' => 'ยกเลิก',
 'resetpass-wrong-oldpass' => 'รหัสผ่านชั่วคราวหรือปัจจุบันไม่ถูกต้อง
 คุณอาจเปลี่ยนรหัสผ่านของคุณไปแล้ว หรือขอรหัสผ่านชั่วคราวใหม่แล้ว',
+'resetpass-recycled' => 'โปรดตั้งรหัสผ่านใหม่ให้ต่างจากรหัสผ่านปัจจุบัน',
+'resetpass-temp-emailed' => 'คุณล็อกอินด้วยรหัสผ่านชั่วคราวที่ส่งทางอีเมล
+คุณต้องตั้งรหัสผ่านใหม่ที่นี่จึงจะเสร็จสิ้นการล็อกอิน:',
 'resetpass-temp-password' => 'รหัสผ่านชั่วคราว:',
 'resetpass-abort-generic' => 'การเปลี่ยนรหัสผ่านถูกส่วนขยายยกเลิก',
+'resetpass-expired' => 'รหัสผ่านของคุณหมดอายุแล้ว โปรดตั้งรหัสผ่านใหม่เพื่อล็อกอิน',
+'resetpass-expired-soft' => 'รหัสผ่านของคุณหมดอายุแล้วและจำเป็นต้องตั้งใหม่ โปรดเลือกรหัสผ่านใหม่ขณะนี้ หรือคลิก "{{int:resetpass-submit-cancel}}" เพื่อตั้งใหม่ทีหลัง',
 
 # Special:PasswordReset
 'passwordreset' => 'ตั้งรหัสผ่านใหม่',
@@ -787,6 +799,8 @@ $2
 'changeemail-password' => 'รหัสผ่าน {{SITENAME}} ของคุณ:',
 'changeemail-submit' => 'เปลี่ยนอีเมล',
 'changeemail-cancel' => 'ยกเลิก',
+'changeemail-throttled' => 'คุณได้พยายามล็อกอินหลายครั้งเกินไป
+กรุณารอ $1 ก่อนลองอีกครั้ง',
 
 # Special:ResetTokens
 'resettokens' => 'ตั้งโทเค็นใหม่',
@@ -998,8 +1012,9 @@ $2
 'defaultmessagetext' => 'ข้อความสารโดยปริยาย',
 'invalid-content-data' => 'ข้อมูลเนื้อหาไม่ถูกต้อง',
 'content-not-allowed-here' => 'เนื้อหา "$1" ไม่อนุญาตในหน้า [[$2]]',
-'editwarning-warning' => 'การออกจากหน้านี้อาจทำให้ความเปลี่ยนแปลงที่คุณกระทำสูญหาย
-ถ้าคุณล็อกอินแล้ว คุณสามารถปิดคำเตือนนี้ได้ที่ส่วน "การแก้ไข" ในการตั้งค่าของคุณ',
+'editwarning-warning' => 'การออกจากหน้านี้อาจทำให้ความเปลี่ยนแปลงที่คุณดำเนินการสูญหาย
+ถ้าคุณล็อกอินแล้ว คุณสามารถปิดคำเตือนนี้ได้ที่ส่วน "{{int:prefs-editing}}" ในการตั้งค่าของคุณ',
+'editpage-notsupportedcontentformat-title' => 'รูปแบบเนื้อหาไม่ได้รับการรองรับ',
 
 # Content models
 'content-model-wikitext' => 'ข้อความวิกิ',
@@ -1025,6 +1040,7 @@ $2
 'undo-success' => 'การแก้ไขนี้สามารถย้อนกลับได้ กรุณาตรวจสอบข้อแตกต่างด้านล่างให้แน่ใจว่านี่คือสิ่งที่คุณต้องการทำ จากนั้นให้บันทึกการเปลี่ยนแปลงด้านล่างเพื่อเสร็จสิ้นขั้นตอน',
 'undo-failure' => 'การแก้ไขนี้ไม่สามารถย้อนกลับได้ เนื่องจากขัดแย้งกับการแก้ไขปัจจุบัน',
 'undo-norev' => 'ไม่สามารถย้อนการแก้ไขนี้ เพราะไม่มีหรือถูกลบไปแล้ว',
+'undo-nochange' => 'ดูเหมือนว่าการแก้ไขดังกล่าวถูกย้อนแล้ว',
 'undo-summary' => 'ย้อนการแก้ไขรุ่น $1 โดย [[Special:Contributions/$2|$2]] ([[User talk:$2|พูดคุย]])',
 'undo-summary-username-hidden' => 'ย้อนรุ่น $1 โดยผู้ใช้ไม่ระบุชื่อ',
 
@@ -1109,8 +1125,6 @@ $2
 'revdelete-show-file-submit' => 'ใช่',
 'revdelete-selected' => "'''{{PLURAL:$2|รุ่นการปรับปรุงที่ถูกเลือก|รุ่นการปรับปรุงที่ถูกเลือก}}ของ [[:$1]] :'''",
 'logdelete-selected' => "'''{{PLURAL:$1|เหตุการณ์ปูมที่เลือก|เหตุการณ์ปูมที่เลือก}} :'''",
-'revdelete-text' => "'''รุ่นการปรับปรุงและเหตุการณ์ที่ถูกลบยังปรากฏในประวัติและปูมของหน้า แต่สาธารณะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้'''
-ผู้ดูแลระบบคนอื่นบน {{SITENAME}} ยังสามารถเข้าถึงเนื้อหาที่ถูกซ่อน และสามารถกู้คืนอีกครั้งในลักษณะเดิมเช่นนี้ เว้นแต่จะมีการกำหนดการจำกัดเพิ่มเติม",
 'revdelete-confirm' => 'กรุณายืนยันว่าคุณมีเจตนาลบจริง และเข้าใจผลลัพธ์ และกระทำภายใต้[[{{MediaWiki:Policy-url}}|นโยบาย]]',
 'revdelete-suppress-text' => "การระงับควรใช้'''เฉพาะ'''กรณีต่อไปนี้:
 * ข้อมูลที่อาจหมิ่นประมาท
@@ -1204,7 +1218,9 @@ $1",
 'showhideselectedversions' => 'แสดง/ซ่อนรุ่นที่เลือก',
 'editundo' => 'ย้อน',
 'diff-empty' => '(ไม่แตกต่าง)',
-'diff-multi-manyusers' => 'การแก้ไข $1 รายการระหว่างกลางโดยผู้ใช้มากกว่า $2 คนไม่แสดงผล)',
+'diff-multi-sameuser' => '(มิได้แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)',
+'diff-multi-otherusers' => '(มิได้แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้ $2 คน)',
+'diff-multi-manyusers' => '(มิได้แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้กว่า $2 คน)',
 'difference-missing-revision' => 'ไม่พบรุ่น{{PLURAL:$2|รุ่น| $2 รุ่น}}ของผลต่างนี้ ($1)
 
 โดยปกติเกิดจากการเข้าลิงก์ผลต่างของหน้าที่ถูกลบไปแล้ว 
@@ -1224,7 +1240,7 @@ $1",
 'shown-title' => 'แสดง $1 ผลลัพธ์ต่อหน้า',
 'viewprevnext' => 'ดู ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''มีหน้าชื่อ \"[[:\$1]]\" บนวิกินี้'''",
-'searchmenu-new' => "'''สร้างหน้า \"[[:\$1]]\" บนวิกินี้'''",
+'searchmenu-new' => '<strong>สร้างหน้า "[[:$1]]" บนวิกินี้!</strong> {{PLURAL:$2|0=|ดูหน้าที่พบด้วยการค้นหาของคุณ|ดูผลการค้นหาที่พบเพิ่มเติม}}',
 'searchprofile-articles' => 'หน้าเนื้อหา',
 'searchprofile-project' => 'คำอธิบายและหน้าโครงการ',
 'searchprofile-images' => 'มัลติมีเดีย',
@@ -1240,6 +1256,7 @@ $1",
 'search-result-score' => 'ความเกี่ยวข้อง : $1%',
 'search-redirect' => '(เปลี่ยนทาง $1)',
 'search-section' => '(ส่วน $1)',
+'search-file-match' => '(จับคู่เนื้อหาไฟล์)',
 'search-suggest' => 'คุณอาจหมายถึง: $1',
 'search-interwiki-caption' => 'โครงการพี่น้อง',
 'search-interwiki-default' => '$1 ผลลัพธ์:',
@@ -1249,6 +1266,7 @@ $1",
 'searchrelated' => 'สัมพันธ์',
 'searchall' => 'ทั้งหมด',
 'showingresults' => "แสดง $1 รายการ เริ่มตั้งแต่รายการที่ '''$2'''",
+'showingresultsinrange' => 'ด้านล่างแสดงผลมากสุด {{PLURAL:$1|<strong>1</strong>|<strong>$1</strong>}} ในพิสัย #<strong>$2</strong> ถึง #<strong>$3</strong>',
 'showingresultsnum' => "แสดง $3 รายการ เริ่มตั้งแต่รายการที่  '''$2'''",
 'showingresultsheader' => "{{PLURAL:$5|ผลการค้นหา '''$1''' จาก '''$3'''|ผลการค้นหา '''$1 - $2''' จาก '''$3'''}} สำหรับ '''$4'''",
 'search-nonefound' => 'ไม่มีผลลัพธ์ตรงกับคำค้น',
@@ -1562,14 +1580,26 @@ $1",
 'recentchanges-label-plusminus' => 'ขนาดของหน้าเปลี่ยนไปด้วยจำนวนไบต์เท่านี้',
 'recentchanges-legend-heading' => "'''คำอธิบายสัญลักษณ์:'''",
 'recentchanges-legend-newpage' => '(ดูเพิ่มที่[[Special:NewPages|รายชื่อหน้าใหม่]])',
-'rcnotefrom' => "ด้านล่างเป็นการเปลี่ยนแปลงตั้งแต่ '''$2''' (มากสุด '''$1''' รายการ)",
+'rcnotefrom' => 'ด้านล่างเป็นการเปลี่ยนแปลงตั้งแต่ <strong>$2</strong> (มากสุด <strong>$1</strong> รายการ)',
 'rclistfrom' => 'แสดงการเปลี่ยนแปลงใหม่เริ่มตั้งแต่ $1',
 'rcshowhideminor' => '$1การแก้ไขเล็กน้อย',
+'rcshowhideminor-show' => 'แสดง',
+'rcshowhideminor-hide' => 'ซ่อน',
 'rcshowhidebots' => '$1บอต',
+'rcshowhidebots-show' => 'แสดง',
+'rcshowhidebots-hide' => 'ซ่อน',
 'rcshowhideliu' => '$1ผู้ใช้ลงทะเบียน',
+'rcshowhideliu-show' => 'แสดง',
+'rcshowhideliu-hide' => 'ซ่อน',
 'rcshowhideanons' => '$1ผู้ใช้นิรนาม',
+'rcshowhideanons-show' => 'แสดง',
+'rcshowhideanons-hide' => 'ซ่อน',
 'rcshowhidepatr' => '$1การแก้ไขที่ตรวจสอบแล้ว',
+'rcshowhidepatr-show' => 'แสดง',
+'rcshowhidepatr-hide' => 'ซ่อน',
 'rcshowhidemine' => '$1การแก้ไขของฉัน',
+'rcshowhidemine-show' => 'แสดง',
+'rcshowhidemine-hide' => 'ซ่อน',
 'rclinks' => 'แสดงการปรับปรุงล่าสุด $1 รายการ ในช่วง $2 วันที่ผ่านมา<br />$3',
 'diff' => 'ต่าง',
 'hist' => 'ประวัติ',
@@ -1684,6 +1714,7 @@ $1",
 'file-exists-duplicate' => 'ไฟล์นี้ซ้ำกับ{{PLURAL:$1|ไฟล์|ไฟล์}}ต่อไปนี้:',
 'file-deleted-duplicate' => 'ไฟล์ที่เหมือนไฟล์นี้ ([[:$1]]) เคยถูกลบไปก่อนหน้านี้แล้ว
 คุณควรตรวจสอบว่าประวัติการลบของไฟล์ก่อนดำเนินการอัปโหลดใหม่',
+'file-deleted-duplicate-notitle' => 'ไฟล์ที่เหมือนกับไฟล์นี้เคยถูกลบมาก่อน และชื่อดังกล่าวถูกห้ามใช้ คุณควรสอบถามผู้ที่สามารถดูข้อมูลไฟล์ที่ถูกระงับเพื่อทบทวนสถานการณ์ก่อนดำเนินการอัปโหลดไฟล์อีกครั้ง',
 'uploadwarning' => 'คำเตือนการอัปโหลด',
 'uploadwarning-text' => 'กรุณาแก้ไขคำอธิบายไฟล์ด้านล่างนี้ แล้วลองใหม่อีกครั้ง',
 'savefile' => 'บันทึกไฟล์',
@@ -1980,6 +2011,7 @@ $1',
 'ninterwikis' => '$1 ลิงก์ข้ามโครงการ',
 'nlinks' => '$1 ลิงก์',
 'nmembers' => '$1 หน้า',
+'nmemberschanged' => '$1 → $2 สมาชิก',
 'nrevisions' => '$1 รุ่น',
 'nviews' => '$1 ครั้ง',
 'nimagelinks' => 'ใช้ใน $1 {{PLURAL:$1|หน้า|หน้า}}',
@@ -2017,13 +2049,25 @@ $1',
 'deadendpagestext' => 'หน้าต่อไปนี้ไม่เชื่อมโยงไปหน้าอื่นใน {{SITENAME}}',
 'protectedpages' => 'หน้าที่ถูกล็อก',
 'protectedpages-indef' => 'การล็อกแบบไม่มีกำหนดเท่านั้น',
+'protectedpages-summary' => 'หน้านี้แสดงรายการหน้าที่มีอยู่ซึ่งปัจจุบันถูกล็อก สำหรับรายการชื่อเรื่องที่ถูกป้องกันมิให้สร้าง ดู [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]',
 'protectedpages-cascade' => 'การล็อกแบบสืบทอดเท่านั้น',
+'protectedpages-noredirect' => 'ซ่อนการเปลี่ยนทาง',
 'protectedpagesempty' => 'ขณะนี้ไม่มีหน้าใดถูกล็อกตามพารามิเตอร์เหล่านี้',
+'protectedpages-timestamp' => 'ตราเวลา',
+'protectedpages-page' => 'หน้า',
+'protectedpages-expiry' => 'หมดอายุ',
+'protectedpages-performer' => 'ผู้ใช้ที่ล็อก',
+'protectedpages-params' => 'พารามิเตอร์การล็อก',
+'protectedpages-reason' => 'เหตุผล',
+'protectedpages-unknown-timestamp' => 'ไม่ทราบ',
+'protectedpages-unknown-performer' => 'ไม่ทราบผู้ใช้',
 'protectedtitles' => 'ชื่อเรื่องที่ถูกป้องกัน',
+'protectedtitles-summary' => 'หน้านี้แสดงรายการชื่อที่ปัจจุบันถูกป้องกันมิให้สร้าง สำหรับรายการหน้าที่มีอยู่ที่ถูกล็อก ดู [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]',
 'protectedtitlesempty' => 'ปัจจุบันไม่มีหัวเรื่องที่ได้รับการป้องกันด้วยพารามิเตอร์เหล่านี้',
 'listusers' => 'รายนามผู้ใช้',
 'listusers-editsonly' => 'แสดงเฉพาะผู้ใช้ที่มีการแก้ไข',
 'listusers-creationsort' => 'เรียงลำดับตามวันสร้าง',
+'listusers-desc' => 'เรียงตามลำดับลด',
 'usereditcount' => 'การแก้ไข $1 ครั้ง',
 'usercreated' => '{{GENDER:$3|ถูกสร้าง}}เมื่อ $1 เวลา $2',
 'newpages' => 'หน้าใหม่',
@@ -2203,6 +2247,7 @@ $1',
 'watchmethod-list' => 'ตรวจสอบหน้าเฝ้าดูกับการแก้ไขล่าสุด',
 'watchlistcontains' => 'รายการเฝ้าดูของคุณมี $1 หน้า',
 'iteminvalidname' => "เกิดปัญหากับรายการ '$1' ชื่อไม่ถูกต้อง...",
+'wlnote2' => 'ด้านล่างเป็นการเปลี่ยนแปลงล่าสุดในช่วง <strong>$1</strong> ชั่วโมงล่าสุด จนถึงวันที่ $2 เวลา $3 น.',
 'wlshowlast' => 'แสดง $1 ชั่วโมง $2 วันล่าสุด $3',
 'watchlist-options' => 'ตัวเลือกรายการเฝ้าดู',
 
@@ -2288,6 +2333,7 @@ $UNWATCHURL
 'delete-edit-reasonlist' => 'แก้ไขเหตุผลการลบ',
 'delete-toobig' => 'หน้านี้มีประวัติการแก้ไขนาดใหญ่ คือ กว่า $1 รุ่น การลบหน้าเช่นนี้ถูกจำกัดเพื่อป้องกันการรบกวน{{SITENAME}}โดยบังเอิญ',
 'delete-warning-toobig' => 'หน้านี้มีประวัติการแก้ไขขนาดใหญ่ กว่า $1 รุ่น การลบหน้านี้อาจรบกวนการทำงานของฐานข้อมูลของ {{SITENAME}} โปรดดำเนินการด้วยความระมัดระวัง',
+'deleting-backlinks-warning' => "'''คำเตือน:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|หน้าอื่น]]เชื่อมโยงมายังหรือดึงข้อมูลจากหน้าที่คุณกำลังจะลบ",
 
 # Rollback
 'rollback' => 'ย้อนการแก้ไขกลับฉุกเฉิน',
@@ -2465,6 +2511,7 @@ $1',
 'sp-contributions-search' => 'ค้นหาการแก้ไข',
 'sp-contributions-username' => 'เลขที่อยู่ไอพีหรือชื่อผู้ใช้:',
 'sp-contributions-toponly' => 'แสดงเฉพาะการแก้ไขรุ่นล่าสุด',
+'sp-contributions-newonly' => 'แสดงเฉพาะการแก้ไขที่เป็นการสร้างหน้า',
 'sp-contributions-submit' => 'สืบค้น',
 
 # What links here
@@ -2523,6 +2570,7 @@ $1',
 ดู[[Special:BlockList|รายการบล็อก]]เพื่อทบทวนการบล็อก',
 'ipb-blockingself' => 'คุณกำลังบล็อกตัวเอง! แน่ใจแล้วหรือว่าต้องการทำอย่างนั้น',
 'ipb-confirmhideuser' => 'คุณกำลังบล็อกผู้ใช้โดยเป็นผู้ใช้ "ซ่อนผู้ใช้" ซึ่งจะระงับชื่อผู้ใช้ในรายการและหน่วยปูมทั้งหมด คุณแน่ใจหรือว่าต้องการดำเนินการเช่นนั้น',
+'ipb-confirmaction' => 'หากคุณแน่ใจว่าคุณต้องการดำเนินการ โปรดเลือกเขตข้อมูล "{{int:ipb-confirm}}"  ที่อยู่ล่างสุด',
 'ipb-edit-dropdown' => 'แก้ไขสาเหตุการบล็อก',
 'ipb-unblock-addr' => 'ปลดบล็อก $1',
 'ipb-unblock' => 'ปลดบล็อกผู้ใช้หรือเลขที่อยู่ไอพี',
@@ -2564,7 +2612,7 @@ $1',
 'change-blocklink' => 'เปลี่ยนการบล็อก',
 'contribslink' => 'เรื่องที่เขียน',
 'emaillink' => 'ส่งอีเมล',
-'autoblocker' => 'à¹\84à¸\94à¹\89à¸\9aลà¹\87อà¸\81อัà¸\95à¹\82à¸\99มัà¸\95ิà¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93à¹\83à¸\8aà¹\89à¹\82à¸\94ย "[[User:$1|$1]]" เมื่อเร็ว ๆ นี้
+'autoblocker' => 'à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81อัà¸\95à¹\82à¸\99มัà¸\95ิà¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81 "[[User:$1|$1]]" à¹\83à¸\8aà¹\89à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93เมื่อเร็ว ๆ นี้
 เหตุผลที่ให้แก่การบล็อก $1 คือ: "$2"',
 'blocklogpage' => 'ปูมการบล็อก',
 'blocklog-showlog' => 'ผู้ใช้นี้ถูกสกัดกั้นมาก่อน
@@ -2587,7 +2635,7 @@ $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 à¸­à¸²à¸\88à¹\80à¸\9eราะมีà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82มาà¸\81à¹\80à¸\81ิà¸\99à¹\84à¸\9b',
+'ipb_hide_invalid' => 'à¹\84มà¹\88สามารà¸\96ยัà¸\9aยัà¹\89à¸\87à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¸­à¸²à¸\88à¹\80à¸\9eราะมีà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82มาà¸\81à¸\81วà¹\88า $1 à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82',
 'ipb_already_blocked' => '"$1" ถูกบล็อกไปแล้วก่อนหน้านี้',
 'ipb-needreblock' => '$1 ถูกบล็อกแล้ว คุณต้องการเปลี่ยนการตั้งค่าหรือไม่',
 'ipb-otherblocks-header' => '{{PLURAL:$1|การบล็อก}}อื่น ๆ',
@@ -2750,6 +2798,7 @@ $1',
 'allmessages-prefix' => 'กรองด้วยคำขึ้นต้น:',
 'allmessages-language' => 'ภาษา:',
 'allmessages-filter-submit' => 'ไป',
+'allmessages-filter-translate' => 'การแปล',
 
 # Thumbnails
 'thumbnail-more' => 'ขยาย',
@@ -3596,7 +3645,7 @@ $5
 'version-hook-name' => 'ชื่อฮุก',
 'version-hook-subscribedby' => 'สนับสนุนโดย',
 'version-version' => '(รุ่น $1)',
-'version-license' => 'สัญญาอนุญาต',
+'version-license' => 'สัญญาอนุญาตมีเดียวิกิ',
 'version-poweredby-credits' => "วิกินี้จัดทำโดย '''[https://www.mediawiki.org/ MediaWiki]''', สงวนลิขสิทธิ์ © 2001-$1 โดย $2",
 'version-poweredby-others' => 'ผู้อื่น',
 'version-poweredby-translators' => 'ผู้แปล translatewiki.net',
@@ -3614,7 +3663,7 @@ $5
 # Special:Redirect
 'redirect' => 'การเปลี่ยนทางตามชื่อไฟล์ รหัสประจำผู้ใช้ หน้าหรือรุ่น',
 'redirect-legend' => 'การเปลี่ยนทางไปยังไฟล์หรือหน้า',
-'redirect-summary' => 'หน้าพิเศษนี้เปลี่ยนทางไปยังไฟล์ (ระบุเป็นชื่อไฟล์) หน้า (ระบุเป็นรหัสรุ่น) หรือหน้าผู้ใช้ (ระบุเป็นรหัสผู้ใช้)',
+'redirect-summary' => 'หน้าพิเศษนี้เปลี่ยนทางไปยังไฟล์ (ระบุเป็นชื่อไฟล์) หน้า (ระบุเป็นรหัสรุ่นหรือรหัสหน้า) หรือหน้าผู้ใช้ (ระบุเป็นรหัสผู้ใช้ตัวเลข) การใช้งาน: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] หรือ [[{{#Special:Redirect}}/user/101]]',
 'redirect-submit' => 'ไป',
 'redirect-lookup' => 'ค้นดู:',
 'redirect-value' => 'ค่า:',
@@ -3728,7 +3777,7 @@ $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-revision' => '$1 เปลี่ยนทัศนวิสัยของ $5 รุ่นในหน้า $3: $4',
 'logentry-delete-event-legacy' => '$1 เปลี่ยนทัศนวิสัยของเหตุการณ์ปูมในหน้า $3',
 'logentry-delete-revision-legacy' => '$1 เปลี่ยนทัศนวิสัยของรุ่นในหน้า $3',
 'logentry-suppress-delete' => '$1 ระงับหน้า $3',
index e3a4205..67b3ed4 100644 (file)
@@ -132,8 +132,8 @@ $messages = array(
 'mar' => 'mar',
 'apr' => 'apr',
 'may' => 'maý',
-'jun' => 'iýun',
-'jul' => 'iýul',
+'jun' => 'iýn',
+'jul' => 'iýl',
 'aug' => 'awg',
 'sep' => 'sen',
 'oct' => 'okt',
@@ -186,10 +186,9 @@ kiçi kategoriýadan {{PLURAL:$1|sany kiçi kategoriýa|$1 sany kiçi kategoriý
 'vector-action-protect' => 'Goraga al',
 'vector-action-undelete' => 'Öçürmäni yzyna al',
 'vector-action-unprotect' => 'Goragy üýtget',
-'vector-simplesearch-preference' => 'Giňeldilen gözleg tekliplerini aç (Diňe Vector bezegi üçin)',
 'vector-view-create' => 'Döret',
-'vector-view-edit' => 'Redaktirle',
-'vector-view-history' => 'Geçmişi gör',
+'vector-view-edit' => 'Üýtget',
+'vector-view-history' => 'Taryhy gör',
 'vector-view-view' => 'Oka',
 'vector-view-viewsource' => 'Çeşmäni gör',
 'actions' => 'Hereketler',
@@ -200,19 +199,19 @@ kiçi kategoriýadan {{PLURAL:$1|sany kiçi kategoriýa|$1 sany kiçi kategoriý
 'errorpagetitle' => 'Säwlik',
 'returnto' => '$1.',
 'tagline' => '{{SITENAME}} saýtyndan',
-'help' => 'Ýardam',
-'search' => 'Gözle',
+'help' => 'Kömek',
+'search' => 'Gözleg',
 'searchbutton' => 'Gözle',
 'go' => 'Git',
 'searcharticle' => 'Git',
 'history' => 'Sahypanyň geçmişi',
-'history_short' => 'Geçmiş',
+'history_short' => 'Taryh',
 'updatedmarker' => 'soňky gezek görelim bäri täzelenen',
-'printableversion' => 'Print ediş wersiýasy',
+'printableversion' => 'Çap edilýän wersiýa',
 'permalink' => 'Hemişelik çykgyt',
 'print' => 'Print et',
 'view' => 'Görkez',
-'edit' => 'Redaktirle',
+'edit' => 'Üýtget',
 'create' => 'Döret',
 'editthispage' => 'Bu sahypany redaktirle',
 'create-this-page' => 'Bu sahypany döret',
@@ -226,14 +225,14 @@ kiçi kategoriýadan {{PLURAL:$1|sany kiçi kategoriýa|$1 sany kiçi kategoriý
 'unprotectthispage' => 'Sahypanyň goragyny aýyr',
 'newpage' => 'Täze sahypa',
 'talkpage' => 'Sahypany ara alyp maslahatlaş',
-'talkpagelinktext' => 'Çekişme',
+'talkpagelinktext' => 'Pikir alyşma',
 'specialpage' => 'Ýörite Sahypa',
 'personaltools' => 'Şahsy gurallar',
 'postcomment' => 'Täze bölüm',
 'articlepage' => 'Makalany görkez',
 'talk' => 'Çekişme',
-'views' => 'Keşpler',
-'toolbox' => 'Gural sandygy',
+'views' => 'Görnüşler',
+'toolbox' => 'Gurallar',
 'userpage' => 'Ulanyjy sahypasyny görkez',
 'projectpage' => 'Taslama sahypasyny görkez',
 'imagepage' => 'Faýl sahypasyny görkez',
@@ -245,11 +244,11 @@ kiçi kategoriýadan {{PLURAL:$1|sany kiçi kategoriýa|$1 sany kiçi kategoriý
 'otherlanguages' => 'Başga dillerde',
 'redirectedfrom' => '($1 sahypasyndan gönükdirildi)',
 'redirectpagesub' => 'Gönükdirme sahypasy',
-'lastmodifiedat' => 'Bu sahypa iň soňky gezek $2, $1 senesinde üýtgedildi.',
+'lastmodifiedat' => 'Bu sahypanyň iň soňky üýtgedilen gezegi: $2, $1.',
 'viewcount' => 'Bu sahypa {{PLURAL:$1|bir|$1 }} gezek görülipdir.',
 'protectedpage' => 'Goragly sahypa',
-'jumpto' => 'Git we:',
-'jumptonavigation' => 'ulan',
+'jumpto' => 'Şuňa git:',
+'jumptonavigation' => 'nawigasiýa',
 'jumptosearch' => 'gözle',
 'view-pool-error' => 'Gynansak-da, şu wagt serwerler hetdenaşa işli.
 Biçak köp ulanyjy şu sahypany görmäge synanyşýar.
@@ -267,17 +266,17 @@ $1',
 'copyrightpage' => '{{ns:project}}:Awtorlyk hukugy',
 'currentevents' => 'Oba güzeri',
 'currentevents-url' => 'Project:Oba güzeri',
-'disclaimers' => 'Jogapkärçilikden boýun gaçyrma',
-'disclaimerpage' => 'Project:Umumy jogapkärçilikden boýun gaçyrma',
+'disclaimers' => 'Jogapkärçilikden boýun gaçyrmak',
+'disclaimerpage' => 'Project:Umumy jogapkärçilikden boýun gaçyrmak',
 'edithelp' => 'Nähili redaktirlenýär?',
-'helppage' => 'Help:Içindäkiler',
+'helppage' => 'Help:Mazmuny',
 'mainpage' => 'Baş Sahypa',
-'mainpage-description' => 'Baş Sahypa',
+'mainpage-description' => 'Baş sahypa',
 'policy-url' => 'Project:Ýörelge',
 'portal' => 'Çaýhana',
 'portal-url' => 'Project:Çaýhana',
-'privacy' => 'Gizlinlik ýörelgesi',
-'privacypage' => 'Project:Gizlinlik ýörelgesi',
+'privacy' => 'Gizlinlik syýasaty',
+'privacypage' => 'Project:Gizlinlik syýasaty',
 
 'badaccess' => 'Rugsat säwligi',
 'badaccess-group0' => 'Talap edýän bu işiňizi ýerine ýetirmäge size ygtyýar berilmeýär.',
@@ -289,15 +288,15 @@ See [[Special:Version|version page]].
 Bu sahypany ulanmak üçin MediaWikiniň $1 wersiýasy talap edilýär. [[Special:Version|Wersiýa sahypasyna]] serediň.',
 
 'ok' => 'OK',
-'retrievedfrom' => '"$1" adresinden alyndy.',
+'retrievedfrom' => 'Çeşmesi: "$1"',
 'youhavenewmessages' => 'Size $1 bar. ($2)',
 'youhavenewmessagesmulti' => 'Size $1-de täze habar bar.',
-'editsection' => 'redaktirle',
-'editold' => 'redaktirle',
+'editsection' => 'üýtget',
+'editold' => 'üýtget',
 'viewsourceold' => 'çeşmäni gör',
-'editlink' => 'redaktirle',
-'viewsourcelink' => 'çeşmesini gör',
-'editsectionhint' => '$1 bölümini redaktirle',
+'editlink' => 'üýtget',
+'viewsourcelink' => 'çeşmäni gör',
+'editsectionhint' => 'Bölümi üýtget: $1',
 'toc' => 'Mazmuny',
 'showtoc' => 'görkez',
 'hidetoc' => 'gizle',
@@ -310,10 +309,10 @@ Bu sahypany ulanmak üçin MediaWikiniň $1 wersiýasy talap edilýär. [[Specia
 'feed-invalid' => 'Nädogry ýazylyşyk kanaly görnüşi.',
 'feed-unavailable' => 'Sindikasiýa lentalary elýeterli däl',
 'site-rss-feed' => '$1 RSS lentasy',
-'site-atom-feed' => '$1 Atom lentasy',
+'site-atom-feed' => '$1 — Atom-lenta',
 'page-rss-feed' => '"$1" RSS lentasy',
 'page-atom-feed' => '"$1" Atom lentasy',
-'red-link-title' => '$1 (bu sahypa heniz ýazylmandyr)',
+'red-link-title' => '$1 (heniz ýazylmandyr)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Sahypa',
@@ -323,7 +322,7 @@ Bu sahypany ulanmak üçin MediaWikiniň $1 wersiýasy talap edilýär. [[Specia
 'nstab-project' => 'Taslama sahypasy',
 'nstab-image' => 'Faýl',
 'nstab-mediawiki' => 'Habarlaşyk',
-'nstab-template' => 'Å\9fablon',
+'nstab-template' => 'Å\9eablon',
 'nstab-help' => 'Ýardam sahypasy',
 'nstab-category' => 'Kategoriýa',
 
@@ -348,9 +347,9 @@ Bar bolan ähli ýörite sahypalary [[Special:SpecialPages|ýörite sahypalar]]
 Maglumat bazasyny gulplan administratoryň düşündirişi: $1',
 'missing-article' => 'Maglumat bazasy tapylmagy talap edilýän "$1" $2 atly sahypa degişli teksti tapyp bilmedi.
 
-Bu Ã½agdaý sahypanyÅ\88 Ã¶Ã§Ã¼rilen bir sahypanyň ozalky wersiýasy bolmaklygyndan ýüze çykýan bolup biler.
+Bu Ã½agdaý sahypanyÅ\88 Ã½oklanylan bir sahypanyň ozalky wersiýasy bolmaklygyndan ýüze çykýan bolup biler.
 
-Eger sebäp ol däl bolsa, programma serişdesinde bir säwlige duşan bolmagyňyz ahmal.
+Eger sebäp ol däl bolsa, programma serişdesinde bir ýalňyşlyga duşan bolmagyňyz ahmal.
 Muny bir [[Special:ListUsers/sysop|administratora]] URL-ni belläp alyp ýetirmekligiňizi haýyş edýäris.',
 'missingarticle-rev' => '(wersiýa#: $1)',
 'missingarticle-diff' => '(Tapawut: $1, $2)',
@@ -409,7 +408,7 @@ Web brauzeriňiziň keşini arassalaýançaňyz käbir sahypalar sessiýaňyzyň
 'yourdomainname' => 'Siziň domeniňiz:',
 'externaldberror' => 'Ýa tassyklama maglumat bazasynyň säwligi bar ýa-da öz ulanyjy hasabyňyzy täzelemegiňize rugsat berilmeýär.',
 'login' => 'Hasaba gir',
-'nav-login-createaccount' => 'Hasaba gir / täze hasap aç',
+'nav-login-createaccount' => 'Hasaba gir / Hasap döret',
 'loginprompt' => '{{SITENAME}} saýtynda sessiýa açmak üçin kukileri işletmegiňiz zerurdyr.',
 'userlogin' => 'Hasaba gir / täze hasap aç',
 'userloginnocreate' => 'Sessiýa aç',
@@ -449,7 +448,7 @@ Ulanyjy atlary baş hem-de setir harplara duýgurdyr.
 'wrongpasswordempty' => 'Paroly boş girizdiňiz. Gaýtadan synanyşmagyňyzy haýyş edýäris.',
 'passwordtooshort' => 'Parollar iň bolmanda {{PLURAL:$1|1 simwoldan|$1 simwoldan}} ybarat bolmalydyr.',
 'password-name-match' => 'Parolyňyz ulanyjy adyňyzdan tapawutly bolmalydyr.',
-'mailmypassword' => 'Maňa e-poçta bilen täze parol iber',
+'mailmypassword' => 'Paroly nol et',
 'passwordremindertitle' => '{{SITENAME}} üçin täze wagtlaýyn parol',
 'passwordremindertext' => 'Kimdir biri (ähtimal özüňiz $1 IP adresinden) {{SITENAME}} ($4) üçin täze parol iberilmegini talap etdi. "$2" ulanyjysy üçin wagtlaýynça "$3" paroly döredildi. Eger bu siziň öz talabyňyz bolsa, onda sessiýa açyp, bir täze parol saýlap almagyňyz zerurdyr. Wagtlaýyn parolyňyzyň möhleti {{PLURAL:$5|1 günden|$5 günden}} gutarjakdyr.
 
@@ -605,10 +604,10 @@ Bu paroly sessiýa açanyňyzdan soňra ''[[Special:ChangePassword|paroly üýtg
 Şonuň üçinem biz ony görkezmek üçin sanlaýyn IP adresini ulanmaly bolýarys.
 Şunuň ýaly IP adresinden ençeme ulanyjy peýdalanýan bolmagy ahmal.
 Eger-de sizem anonim ulanyjy bolsaňyz we size siziň bilen dahyly ýok habarlaşyklar gelýän bolsa, onda mundan beýläk başga anonim ulanyjylar bilen garjaşmazlygyňyz üçin [[Special:UserLogin/signup|özüňize hasap ediniň]] ýa-da [[Special:UserLogin|sessiýa açyň]].''",
-'noarticletext' => 'Bu sahypa häzirki wagtda boş dur.
+'noarticletext' => 'Bu sahypa şu wagt boş dur.
 Bu ady başga sahypalarda [[Special:Search/{{PAGENAME}}|gözläp bilersiňiz]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} degişli gündeliklerde gözleg geçirip bilersiňiz],
-ýa-da bu sahypany [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaktirläp bilersiňiz]</span>.',
+ýa-da bu sahypany [{{fullurl:{{FULLPAGENAME}}|action=edit}} üýtgedip bilersiňiz]</span>.',
 'noarticletext-nopermission' => 'Häzirki wagtda bu sahypada tekst ýok.
 Bu sahypa adyny [[Special:Search/{{PAGENAME}}|başga sahypalarda gözläp]]
 ýa-da <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} degişli gündeliklerde gözleg geçirip bilersiňiz]</span>, ýöne bu sahypany döretmäge rugsadyňyz ýok.',
@@ -726,7 +725,7 @@ Ol eýýäm bar.',
 Ol $2 {{PLURAL:$2|çagyryşdan|çagyryşdan}} az bolmalydyr, häzir bu ýerde {{PLURAL:$1|1 sany çagyryş|$1 sany çagyryş}} bar.",
 'expensive-parserfunction-category' => 'Resurs talap ediji funksiýalara çakdanaşa köp çagyryşy bar bolan sahypalar',
 'post-expand-template-inclusion-warning' => "'''Duýduryş''': Girizilen şablonlaryň göwrümi çakdanaşa uly.
-Käbir şablonlar sahypa giriziljek däldir.",
+Käbir şablonlar sahypa girizilmez.",
 'post-expand-template-inclusion-category' => 'Girizilýän şablonlarynyň göwrümi çakdanaşa uly bolan sahypalar',
 'post-expand-template-argument-warning' => "'''Duýduryş:''' Bu sahypa çakdanaşa uly giňeme ölçegi bar bolan iň bolmanda bir sany şablon argumentini öz içine alýar.
 Ol argumentler hasap edilmedi.",
@@ -752,8 +751,8 @@ $3 tarapyndan görkezilen sebäp: ''$2''",
 'viewpagelogs' => 'Bu sahypanyň gündeliklerini görkez',
 'nohistory' => 'Bu sahypanyň özgerdişler geçmişi ýok.',
 'currentrev' => 'Häzirki wersiýa',
-'currentrev-asof' => '$1 senesinden başlap sahypanyň şu wagtky wersiýasy',
-'revisionasof' => 'Sahypanyň $1 senesindäki wersiýasy',
+'currentrev-asof' => '$1 senesinde sahypanyň iň soňky wersiýasy',
+'revisionasof' => '$1 senesindäki wersiýa',
 'revision-info' => '$2 tarapyndan döredilen $1 seneli wersiýa',
 'previousrevision' => '← Ozalkysy',
 'nextrevision' => 'Indikisi →',
@@ -821,8 +820,6 @@ Administrator hökmünde bu aratapawudy görüp bilersiňiz; [{{fullurl:{{#Speci
 'revdelete-show-file-submit' => 'Hawa',
 'revdelete-selected' => "'''[[:$1]] sahypasynyň {{PLURAL:$2|saýlanylan wersiýasy|saýlanylan wersiýalary}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Saýlanylan gündelik wakasy|Saýlanylan gündelik wakalary}}:'''",
-'revdelete-text' => "'''Öçürilen wersiýalar we wakalar sahypa geçmişlerinde we gündeliklerde ýene-de görkeziljekdir, emma olaryň mazmunynyň käbir bölekleri jemgyýetçilige açyk boljak däldir.'''
-{{SITENAME}} saýtyndaky başga administratorlar gizlin mazmuny ýene-de görüp hem-de goşmaça çäklendirme goýulmadyk ýagdaýynda şol bir interfeýsiň üsti bilen ony yzyna dikeldip bilýärler.",
 'revdelete-confirm' => 'Şu işi anyk isleýändigiňizi, ýagny onuň netijelerine düşünýändiňizi we [[{{MediaWiki:Policy-url}}|kadalar boýunça]] amala aşyrýandygyňyzy tassyklamagyňyzy haýyş edýäris.',
 'revdelete-suppress-text' => "Gizlemeklik '''diňe''' aşakdaky ýagdaýlarda ulanylmalydyr:
 * Potensial taýdan töhmetçilikli maglumat
@@ -848,7 +845,7 @@ $1",
 'logdelete-success' => "'''Gündelik görünme derejesi şowlulyk bilen sazlandy.'''",
 'logdelete-failure' => "'''Gündelik görünme derejesini sazlap bolmaýar:'''
 $1",
-'revdel-restore' => 'Görnüşi üýtget',
+'revdel-restore' => 'Görnüş ukybyny üýtget',
 'pagehist' => 'Sahypanyň geçmişi',
 'deletedhist' => 'Öçürilen geçmiş',
 'revdelete-hide-current' => '$2, $1 seneli ýazgyda gizleme säwligi: bu häzirki wersiýa.
@@ -903,7 +900,7 @@ Nawigasiýa çykgytlaryny ulanmaklygyň bu sütüni başky ýagdaýyna getirjekd
 # Merge log
 'mergelog' => 'Birleşdirme gündeligi',
 'pagemerge-logentry' => '[[$1]] bilen [[$2]] birleşdirildi (şuňa çenliki wersiýalar: $3)',
-'revertmerge' => 'Böl',
+'revertmerge' => 'Dargat',
 'mergelogpagetext' => 'Aşakdaky sanaw sahypalaryň geçmişleriniň iň soňky birleşdirmelerini görkezýär.',
 
 # Diffs
@@ -917,7 +914,7 @@ Nawigasiýa çykgytlaryny ulanmaklygyň bu sütüni başky ýagdaýyna getirjekd
 
 # Search results
 'searchresults' => 'Gözleg netijeleri',
-'searchresults-title' => '"$1" üçin gözleg netijeleri',
+'searchresults-title' => '"$1" hakda gözleg netijeleri',
 'toomanymatches' => 'Çakdanaşa köp gabat gelme tapyldy, başgaçarak talap ýazyp görüň',
 'titlematches' => 'Sahypa ady gabat gelýär',
 'textmatches' => 'Sahypa teksti gabat gelýär',
@@ -927,19 +924,20 @@ Nawigasiýa çykgytlaryny ulanmaklygyň bu sütüni başky ýagdaýyna getirjekd
 'prevn-title' => 'Öňki $1 {{PLURAL:$1|netije|netije}}',
 'nextn-title' => 'Indiki $1 {{PLURAL:$1|netije|netije}}',
 'shown-title' => 'Sahypa başyna $1 {{PLURAL:$1|netije|netije}} görkez',
-'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3).',
+'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) gör',
 'searchmenu-exists' => "'''Bu wikide \"[[:\$1]]\" atly sahypa bar'''",
-'searchmenu-new' => "'''Bu wikide \"[[:\$1]]\" sahypasyny döret!'''",
-'searchprofile-articles' => 'Mazmunly sahypalar',
-'searchprofile-project' => 'Ýardam we Taslama sahypalary',
+'searchmenu-new' => '<strong>Bu wikide "[[:$1]]" sahypasyny dörediň!</strong> 
+{{PLURAL:$2|0=|Gözlegde tapylan sahypa-da serediň.|Tapylan gözleg netijelerine-de serediň.}}',
+'searchprofile-articles' => 'Esasy sahypalar',
+'searchprofile-project' => 'Kömek we taslama sahypalary',
 'searchprofile-images' => 'Multimedia',
 'searchprofile-everything' => 'Ähli zatlar',
-'searchprofile-advanced' => 'Giňeldilen',
-'searchprofile-articles-tooltip' => '$1 boýunça gözle',
-'searchprofile-project-tooltip' => '$1 boýunça gözle',
+'searchprofile-advanced' => 'Giňişleýin',
+'searchprofile-articles-tooltip' => '$1 içinden gözle',
+'searchprofile-project-tooltip' => '$1 içinden gözle',
 'searchprofile-images-tooltip' => 'Faýllary gözle',
-'searchprofile-everything-tooltip' => 'Ähli sahypalardan gözle (şol sanda çekişme sahypalaryndan)',
-'searchprofile-advanced-tooltip' => 'Hususy at giňişliklerinde gözle',
+'searchprofile-everything-tooltip' => 'Ähli sahypalardan gözle (şol sanda pikir alyşma sahypalaryndan)',
+'searchprofile-advanced-tooltip' => 'Laýyk at giňişliklerinde gözle',
 'search-result-size' => '$1 ({{PLURAL:$2|1 söz|$2 söz}})',
 'search-result-category-size' => '{{PLURAL:$1|1 agza|$1 agza}} ({{PLURAL:$2|1 kiçi kategoriýa|$2 kiçi kategoriýa}}, {{PLURAL:$3|1 faýl|$3 faýl}})',
 'search-result-score' => 'Kybapdaşlyk: $1%',
@@ -955,7 +953,7 @@ Nawigasiýa çykgytlaryny ulanmaklygyň bu sütüni başky ýagdaýyna getirjekd
 'searchall' => 'ählisi',
 'showingresults' => "Aşakda №'''$2''' netijeden başlap, {{PLURAL:$1|'''1''' netije|'''$1''' netije}} görkezilýär.",
 'showingresultsnum' => "Aşakda №'''$2''' netijeden başlap, {{PLURAL:$3|'''1''' netije|'''$3''' netije}} görkezilýär.",
-'showingresultsheader' => "'''$4''' üçin {{PLURAL:$5|'''$3''' netijeden '''$1''' sanysy|'''$3''' netijeden '''$1 - $2''' aralygy}}",
+'showingresultsheader' => "'''$4''' hakda {{PLURAL:$5|'''$3''' netijeden '''$1''' sanysy|'''$3''' netijeden '''$1 - $2''' aralygy}}",
 'search-nonefound' => 'Talaba gabat gelýän hiç hili netije ýok.',
 'powersearch-legend' => 'Giňişleýin gözleg',
 'powersearch-ns' => 'At giňişliklerinde gözleg:',
@@ -1219,7 +1217,7 @@ $1 {{PLURAL:$1|simwoldan|simwoldan}} köp bolmaly däl.',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|üýtgeşme|üýtgeşme}}',
-'recentchanges' => 'Soňky üýtgeşmeler',
+'recentchanges' => 'Soňky üýtgetmeler',
 'recentchanges-legend' => 'Soňky üýtgeşmeleriň opsiýalary',
 'recentchanges-summary' => 'Wikidäki iň soňky üýtgeşmeleri şu sahypadan yzarlaň.',
 'recentchanges-feed-description' => 'Bu lentadaky wikide edilen iň soňky üýtgeşmeleri yzarlaň.',
@@ -1228,19 +1226,19 @@ $1 {{PLURAL:$1|simwoldan|simwoldan}} köp bolmaly däl.',
 'recentchanges-label-bot' => 'Bu özgerdiş bir bot tarapyndan amala aşyryldy',
 'recentchanges-label-unpatrolled' => 'Bu özgerdişe heniz patrullyk edilmändir',
 'recentchanges-legend-newpage' => '$1 - täze sahypa',
-'rcnotefrom' => '<b>$2</b> senesinden bäri edilen özgerdişler aşakda görkezilýär (<b>$1</b> sanysyna çenli).',
+'rcnotefrom' => '<strong>$2</strong> senesinden soňky üýtgetmeler aşakda görkezilýär (<strong>$1</strong> sanysyna çenli).',
 'rclistfrom' => '$1 senesinden bäri edilen özgerdişleri görkez',
 'rcshowhideminor' => 'ujypsyzja özgerdişleri $1',
 'rcshowhidebots' => 'botlary $1',
-'rcshowhideliu' => 'sessiýasy açyk ulanyjylary $1',
+'rcshowhideliu' => 'Hasaba alnan ulanyjylary $1',
 'rcshowhideanons' => 'anonim ulanyjylary $1',
 'rcshowhidepatr' => 'patrullyk edilen özgerdişleri $1',
 'rcshowhidemine' => 'özgerdişlerimi $1',
 'rclinks' => 'Soňky $2 günde edilen iň soňky $1 üýtgeşmäni görkez;<br /> $3',
 'diff' => 'tapawut',
-'hist' => 'geçmiş',
-'hide' => 'gizle',
-'show' => 'görkez',
+'hist' => 'taryh',
+'hide' => 'Gizle',
+'show' => 'Görkez',
 'minoreditletter' => 'uj',
 'newpageletter' => 'T',
 'boteditletter' => 'b',
@@ -1254,10 +1252,10 @@ $1 {{PLURAL:$1|simwoldan|simwoldan}} köp bolmaly däl.',
 # Recent changes linked
 'recentchangeslinked' => 'Degişli üýtgeşmeler',
 'recentchangeslinked-feed' => 'Degişli üýtgeşmeler',
-'recentchangeslinked-toolbox' => 'Degişli üýtgeşmeler',
+'recentchangeslinked-toolbox' => 'Dahylly üýtgetmeler',
 'recentchangeslinked-title' => '"$1" bilen baglanyşykly üýtgeşmeler',
-'recentchangeslinked-summary' => "Aşakdaky sanaw, görkezilen sahypa (ýa-da görkezilen kategoriýanyň agzalaryna) çykgyt berýän sahypalarda edilen üýtgeşmeleriň sanawydyr.
-[[Special:Watchlist|Gözegçilik sanawyňyzdaky]] sahypalar '''goýy''' ýazgy bilen görkezilýär.",
+'recentchangeslinked-summary' => 'Görkezilen sahypa (ýa-da görkezilen kategoriýanyň agzalaryna) çykgyt berýän sahypalarda edilen soňky üýtgetmeleriň sanawy.
+[[Special:Watchlist|Gözegçilik sanawyňyzdaky]] sahypalar <strong>goýy</strong> bilen görkezilýär.',
 'recentchangeslinked-page' => 'Sahypanyň ady:',
 'recentchangeslinked-to' => 'Tersine, berlen sahypa çykgyt berýän sahypalary görkez',
 
@@ -1454,7 +1452,7 @@ Bir sütüniň adyna tyklap sortirowkanyň tertibini üýtgedip bilersiňiz.',
 
 # File description page
 'file-anchor-link' => 'Faýl',
-'filehist' => 'Faýlyň geçmişi',
+'filehist' => 'Faýlyň taryhy',
 'filehist-help' => 'Faýlyň geçmişini görmek üçin Sene/Wagt bölümündäki senelere tyklaň.',
 'filehist-deleteall' => 'ählisini öçür',
 'filehist-deleteone' => 'öçür',
@@ -1467,7 +1465,7 @@ Bir sütüniň adyna tyklap sortirowkanyň tertibini üýtgedip bilersiňiz.',
 'filehist-user' => 'Ulanyjy',
 'filehist-dimensions' => 'Ölçegler',
 'filehist-filesize' => 'Faýl ölçegi',
-'filehist-comment' => 'Teswirleme',
+'filehist-comment' => 'Teswir',
 'filehist-missing' => 'Faýl ýok',
 'imagelinks' => 'Faýlyň ulanylyşy',
 'linkstoimage' => 'Bu faýla çykgydy bar bolan {{PLURAL:$1|sahypa|$1 sahypa}}:',
@@ -1480,8 +1478,8 @@ Aşakdaky sanaw diňe şu faýla çykgyt berýän {{PLURAL:$1|ilkinji faýly |il
 'sharedupload' => 'Bu faýl $1 ammaryndan, özem beýleki taslamalarda ulanylýan bolmagy ahmal.',
 'sharedupload-desc-there' => 'Bu faýl $1 ammaryndan, özem beýleki taslamalarda ulanylýan bolmagy ahmal.
 Goşmaça maglumat üçin [$2 faýl düşündiriş sahypasyna] serediň.',
-'sharedupload-desc-here' => 'Bu faýl $1 ammaryndan, özem beýleki taslamalarda ulanylýan bolmagy ahmal.
-[$2 Onuň faýl düşündiriş sahypasyndaky] düşündirişi aşakda görkezilýär.',
+'sharedupload-desc-here' => 'Bu faýl $1 toplaýjysyndan, özem başga taslamalarda ulanylýan bolmagy mümkin.
+Onuň [$2 faýl düşündiriş sahypasyndaky] maglumatlar aşakda görkezilýär.',
 'filepage-nofile' => 'Şeýle atly faýl ýok.',
 'filepage-nofile-link' => 'Şeýle atly faýl ýok, ama siz [$1 ony ýükläp bilersiňiz].',
 'uploadnewversion-linktext' => 'Bu faýlyň täze wersiýasyny ýükläň',
@@ -1536,7 +1534,7 @@ Giriş formaty: mazmuntip/kiçitip, meselem <code>surat/jpeg</code>.',
 'unusedtemplateswlh' => 'başga çykgytlar',
 
 # Random page
-'randompage' => 'Mesaýy makala',
+'randompage' => 'Çemgeldik sahypa',
 'randompage-nopages' => 'Aşakdaky {{PLURAL:$2|at giňişliginde|at giňişliklerinde}} hiç hili sahypa ýok: $1.',
 
 # Random redirect
@@ -1976,8 +1974,8 @@ Sahypanyň geçmişini saýlap dikeltmek üçin dikeldilmeli wersiýalaryň gutu
 Ulanan çykgydyňyz nädogry bolmagy ýa-da onuň arhiwden dikeldilen ýa-da aýyrylan bolmagy mümkin.',
 'undelete-nodiff' => 'Hiç hili öňki wersiýa tapylmady.',
 'undeletebtn' => 'Dikelt',
-'undeletelink' => 'görkez/dikelt',
-'undeleteviewlink' => 'görkez',
+'undeletelink' => 'gör/dikelt',
+'undeleteviewlink' => 'gör',
 'undeleteinvert' => 'Saýlanmadyklar',
 'undeletecomment' => 'Sebäp:',
 'undeletedrevisions' => '{{PLURAL:$1|1 wersiýa|$1 wersiýa}} dikeldildi',
@@ -2039,7 +2037,7 @@ Salgylanmak üçin iň soňky blokirleme gündeligi ýazgysy aşakda berilýär:
 'sp-contributions-submit' => 'Gözle',
 
 # What links here
-'whatlinkshere' => 'Bu sahypa çykgytlar',
+'whatlinkshere' => 'Şu ýere çykgytlar',
 'whatlinkshere-title' => '"$1" makalasyna çykgyt berýän sahypalar',
 'whatlinkshere-page' => 'Sahypa:',
 'linkshere' => "'''[[:$1]]''' sahypasyna çykgyt berýän sahypalar:",
@@ -2112,8 +2110,8 @@ Aşakda blokirlemäniň takyk sebäbini ýazyň (meselem: wandalizm eden sahypal
 'ipblocklist-empty' => 'Blokirleme sanawy boş.',
 'ipblocklist-no-results' => 'Talap edilen IP adresi ýa-da ulanyjy ady blokirlengi däl.',
 'blocklink' => 'blokirle',
-'unblocklink' => 'blokirowkany aýyr',
-'change-blocklink' => 'blokirowkany üýtget',
+'unblocklink' => 'blokirlemäni aýyr',
+'change-blocklink' => 'blokirlemäni üýtget',
 'contribslink' => 'goşantlar',
 'autoblocker' => 'Awtomatik usulda blokirlendiňiz, çünki ýaňy-ýakynda IP adresiňiz "[[User:$1|$1]]" ulanyjysy tarapyndan ulanyldy. $1 atly ulanyjynyň blokirlenmegi üçin görkezilen sebäp: "\'\'\'$2\'\'\'"',
 'blocklogpage' => 'Blokirleme gündeligi',
@@ -2254,7 +2252,7 @@ Gündeligiň iň soňky ýazgysy salgylanmak üçin aşakda berilýär:",
 Başga bir at saýlaň.',
 
 # Export
-'export' => 'Sahypa eksportirle',
+'export' => 'Sahypalary çykar',
 'exporttext' => 'Belli bir sahypanyň ýa-da sahypalar toplumynyň tekstini we redaktirleme geçmişini XML arkaly eksportirläp bilersiňiz.
 Soňra ony [[Special:Import|importirleme sahypasynyň]] üsti bilen MediaWiki ulanýan başga bir wikä importirläp bolýar.
 
@@ -2354,54 +2352,53 @@ Kompýuteriňize ýazdyryň we şu ýere ýükläň.',
 'tooltip-pt-mytalk' => 'Pikir alyşma sahypaňyz',
 'tooltip-pt-anontalk' => 'Bu IP adresinden edilen özgerdişler barada pikir alyş',
 'tooltip-pt-preferences' => 'Ileri tutmalaryňyz',
-'tooltip-pt-watchlist' => 'Gözegçilikde saklaýan sahypalarym',
+'tooltip-pt-watchlist' => 'Üýtgetmelerini gözegçilikde saklaýan sahypalaryňyz',
 'tooltip-pt-mycontris' => 'Eden goşantlaryňyzyň sanawy',
-'tooltip-pt-login' => 'Hasaba girmegiňiz maslahat berilýär, ýöne hökmany däl.',
+'tooltip-pt-login' => 'Hasaba girmegiňiz maslahat berilýär, ýöne hökman däl.',
 'tooltip-pt-logout' => 'Hasapdan çyk',
-'tooltip-ca-talk' => 'Sahypanyň mazmuny barada garaýşyňy beýan et',
-'tooltip-ca-edit' => 'Bu sahypany redaktirläp bilersiňiz. Ýazdyrmankaňyz synlap görmekligi ýatdan çykarmaň.',
+'tooltip-ca-talk' => 'Esasy sahypa barada çekişme',
+'tooltip-ca-edit' => 'Bu sahypany üýtgedip bilersiňiz. Ýazdyrmankaňyz "synlaw" düwmesine basyp, synlap görüň.',
 'tooltip-ca-addsection' => 'Täze bölüm başlat',
-'tooltip-ca-viewsource' => 'Bu sahypa gorag astynda.
-Onuň çeşmesini görüp bilersiňiz',
-'tooltip-ca-history' => 'Bu sahypanyň ozalky wersiýalary',
+'tooltip-ca-viewsource' => 'Bu sahypa goragly, ýöne onuň çeşmesini görüp bilersiňiz',
+'tooltip-ca-history' => 'Sahypanyň öňki wersiýalary',
 'tooltip-ca-protect' => 'Sahypany goraga al',
 'tooltip-ca-unprotect' => 'Bu sahypanyň goragyny üýtget',
 'tooltip-ca-delete' => 'Sahypany öçür',
 'tooltip-ca-undelete' => 'Bu sahypadaky özgerdişleri öçürilmänkäki ýagdaýyna yzyna dikelt',
 'tooltip-ca-move' => 'Sahypanyň adyny üýtget',
-'tooltip-ca-watch' => 'Bu sahypany gözegçilige al',
+'tooltip-ca-watch' => 'Sahypany gözegçilik sanawyňa goş',
 'tooltip-ca-unwatch' => 'Bu sahypany gözegçilik sanawyňdan aýyr',
-'tooltip-search' => '{{SITENAME}} boýunça gözle',
+'tooltip-search' => '{{SITENAME}} saýtynda gözle',
 'tooltip-search-go' => 'Eger bar bolsa, anyk şu atdaky sahypa git',
-'tooltip-search-fulltext' => 'Şu tekst bar bolan sahypalary gözle',
+'tooltip-search-fulltext' => 'Sahypalardan şu teksti gözle',
 'tooltip-p-logo' => 'Baş sahypa baryp gör',
 'tooltip-n-mainpage' => 'Baş sahypa baryp gör',
 'tooltip-n-mainpage-description' => 'Baş sahypa baryp gör',
 'tooltip-n-portal' => 'Taslama hakynda, nämeler edip bolar, nämeler nirede',
 'tooltip-n-currentevents' => 'Bolup geçýän wakalar barada iň täze maglumatlar',
-'tooltip-n-recentchanges' => 'Wikidäki soňky üýtgeşmeleriň sanawy',
-'tooltip-n-randompage' => 'Çem gelen sahypa git',
-'tooltip-n-help' => 'Kömek almak üçin',
-'tooltip-t-whatlinkshere' => 'Bu sahypa çykgyt berýän ähli wiki sahypalarynyň sanawy',
-'tooltip-t-recentchangeslinked' => 'Bu sahypa çykgyt berýän sahypalardaky soňky üýtgeşmeler',
+'tooltip-n-recentchanges' => 'Wikidäki soňky üýtgetmeleriň sanawy',
+'tooltip-n-randompage' => 'Çem gelen sahypany aç',
+'tooltip-n-help' => 'Kömek soralýan ýer',
+'tooltip-t-whatlinkshere' => 'Şu ýere çykgyt berýän ähli wiki-sahypalaryň sanawy',
+'tooltip-t-recentchangeslinked' => 'Bu sahypadan çykgyt alýan sahypalardaky soňky üýtgetmeler',
 'tooltip-feed-rss' => 'Bu sahypa üçin RSS lentasy',
-'tooltip-feed-atom' => 'Bu sahypa üçin atom lentasy',
+'tooltip-feed-atom' => 'Bu sahypanyň atom lentasy',
 'tooltip-t-contributions' => 'Şu ulanyjynyň goşantlarynyň sanawyny gör',
 'tooltip-t-emailuser' => 'Bu ulanyja e-poçta iber',
-'tooltip-t-upload' => 'Suratlary ýa-da multimediýa faýllaryny ýükläň',
-'tooltip-t-specialpages' => 'Ähli ýörite sahypalaryň sanawyny görkez',
-'tooltip-t-print' => 'Bu sahypanyň print etmäge taýýar wersiýasy',
-'tooltip-t-permalink' => 'Sahypanyň bu wersiýasyna hemişelik çykgyt',
-'tooltip-ca-nstab-main' => 'Sahypany görkez',
+'tooltip-t-upload' => 'Faýllary ýükle',
+'tooltip-t-specialpages' => 'Ähli ýörite sahypalaryň sanawy',
+'tooltip-t-print' => 'Bu sahypanyň çap edilýän wersiýasy',
+'tooltip-t-permalink' => 'Sahypanyň şu wersiýasyna hemişelik çykgyt',
+'tooltip-ca-nstab-main' => 'Esasy sahypany gör',
 'tooltip-ca-nstab-user' => 'Ulanyjynyň sahypasyny görkez',
 'tooltip-ca-nstab-media' => 'Media sahypasyny görkez',
 'tooltip-ca-nstab-special' => 'Bu ýörite sahypa, ony redaktirläp bolmaýar',
 'tooltip-ca-nstab-project' => 'Taslama sahypasyny görkez',
-'tooltip-ca-nstab-image' => 'Suratyň sahypasyny görkez',
+'tooltip-ca-nstab-image' => 'Faýlyň sahypasyny gör',
 'tooltip-ca-nstab-mediawiki' => 'Ulgam habarlaşygyny görkez',
 'tooltip-ca-nstab-template' => 'Şablony görkez',
 'tooltip-ca-nstab-help' => 'Ýardam sahypasyny görkez',
-'tooltip-ca-nstab-category' => 'Kategoriýanyň sahypasyny görkez',
+'tooltip-ca-nstab-category' => 'Kategoriýanyň sahypasyny gör',
 'tooltip-minoredit' => 'Ujypsyzja özgerdiş hökmünde belle',
 'tooltip-save' => 'Özgerdişleriňi ýazdyr',
 'tooltip-preview' => 'Deslapky syn; ýazdyrmankaňyz şuny ulanyp özgerdişleriňizi gözden geçiriň!',
@@ -2411,8 +2408,7 @@ Onuň çeşmesini görüp bilersiňiz',
 'tooltip-recreate' => 'Öçürilendigine garamazdan sahypany gaýtadan döret',
 'tooltip-upload' => 'Ýüklemäni başlat',
 'tooltip-rollback' => '"Öňki katdyna getir" ýeke gezek tyklananda bu sahypa iň soňky goşant goşanyň özgerdişlerini yzyna getirýär',
-'tooltip-undo' => '"Yzyna al" bu özgerdişi yzyna getirýär we özgerdiş formuny deslapky syn modunda açýar.
-Mazmun üçin bir sebäp goşmaga rugsat berýär',
+'tooltip-undo' => '"Yzyna al" bu özgerdişi yzyna getirýär we özgerdiş formuny synlaw modunda açýar. Yzyna almagyň sebäbini ýazmaga mümkinçilik berýär.',
 'tooltip-preferences-save' => 'Ileri tutmalary ýazdyr',
 'tooltip-summary' => 'Gysgaça düşündiriş giriziň',
 
@@ -2482,7 +2478,7 @@ Ony işletseňiz iş ulgamyňyza howp astyna salmagyňyz mümkin.",
 'file-info-size' => '$1 × $2 piksel, faýlyň ölçegi: $3, MIME tipli: $4',
 'file-nohires' => 'Wersiýanyň mundan uly ölçegi ýok.',
 'svg-long-desc' => 'SVG faýly, nominal $1 × $2 piksel, faýl ölçegi: $3',
-'show-big-image' => 'Suratyň doly ölçegi',
+'show-big-image' => 'Original faýl',
 'file-info-gif-looped' => 'halkaly',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|kadr|kadr}}',
 'file-info-png-looped' => 'halkaly',
@@ -2505,7 +2501,7 @@ Ony işletseňiz iş ulgamyňyza howp astyna salmagyňyz mümkin.",
 'bad_image_list' => 'Format aşakdaky ýaly bolmalydyr:
 
 Diňe sanawyň elementleri (* bilen başlaýanlar) nazara alynýar. Setirdäki ilkinji çykgyt ýaramaz suratyň çykgydy bolmalydyr.
-Ondan soňraky çykgyt(lar) kadadan çykma hökmünde kabul edilýär, meselem: surat sahypada setiriçinde görünip biler.',
+Ondan soňraky çykgyt(lar) kadadan çykma hökmünde kabul edilýär, meselem: surat sahypada setiriçinde görp biler.',
 
 # Metadata
 'metadata' => 'Meta-maglumat',
index acabe3d..710b60e 100644 (file)
@@ -185,7 +185,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Padalahan ako ng mga kopya ng mga ipinadala kong e-liham sa ibang mga tagagamit',
 'tog-diffonly' => 'Huwag ipakita ang nilalaman ng pahinang nasa ilalim ng mga pagkakaiba',
 'tog-showhiddencats' => 'Ipakita ang mga nakatagong kategorya',
-'tog-noconvertlink' => 'Huwag paganahin ang pagpapalit ng pamagat na pangkawing',
 'tog-norollbackdiff' => 'Alisin ang mga pagkakaiba pagkatapos isagawa ang pagpapagulong na pabalik sa dati',
 'tog-useeditwarning' => 'Magbabala sa akin kapag umalis ako sa isang pahina ng pampatnugot na hindi pa nasasagip ang mga pagbabago',
 
@@ -311,7 +310,6 @@ $messages = array(
 'vector-action-protect' => 'Ipagsanggalang',
 'vector-action-undelete' => 'Alisin ang pagbubura',
 'vector-action-unprotect' => 'Baguhin ang pagsasanggalang',
-'vector-simplesearch-preference' => 'Paganahin ang pinainam na bar ng paghahanap (pabalat na Vector lang)',
 'vector-view-create' => 'Likhain',
 'vector-view-edit' => 'Baguhin',
 'vector-view-history' => 'Tingnan ang kasaysayan',
@@ -561,15 +559,15 @@ Tandaan na may ilang pahinang maaaring magpatuloy na nagpapakitang parang nakala
 Huwag kalimutang baguhin ang iyong [[Special:Preferences|mga kagustuhan sa {{SITENAME}}]].',
 'yourname' => 'Bansag:',
 'userlogin-yourname' => 'Pangngalan',
-'userlogin-yourname-ph' => 'Ilagay ang iyong Pangngalan',
-'createacct-another-username-ph' => 'Ilagay ang Pangngalan',
+'userlogin-yourname-ph' => 'Ilagay ang iyong Pangalan',
+'createacct-another-username-ph' => 'Ilagay ang Pangalan',
 'yourpassword' => 'Hudyat:',
 'userlogin-yourpassword' => 'Hudyat',
 'userlogin-yourpassword-ph' => 'Ipasok ang iyong hudyat',
-'createacct-yourpassword-ph' => 'Ilagay ang hudyat',
+'createacct-yourpassword-ph' => 'Ilagay ang hudyat (password)',
 'yourpasswordagain' => 'Hudyat mo uli:',
 'createacct-yourpasswordagain' => 'Tiyakin ang hudyat',
-'createacct-yourpasswordagain-ph' => 'Muling ilagay ang hudyat',
+'createacct-yourpasswordagain-ph' => 'Muling ilagay ang hudyat (password)',
 'remembermypassword' => 'Tandaan ang paglagda ko sa kompyuter na ito (pinakamarami na ang $1 {{PLURAL:$1|araw|mga araw}})',
 'userlogin-remembermypassword' => 'Panatilihin akong nakalagda',
 'userlogin-signwithsecure' => 'Gumamit ng ligtas na koneksyon',
@@ -588,11 +586,11 @@ Huwag kalimutang baguhin ang iyong [[Special:Preferences|mga kagustuhan sa {{SIT
 'userlogin-joinproject' => 'Sumali sa {{SITENAME}}',
 'nologin' => 'Wala ka pang kuwenta? $1.',
 'nologinlink' => 'Lumikha ng kuwenta',
-'createaccount' => 'Lumikha ng kuwenta',
+'createaccount' => 'Lumikha ng akawnt',
 'gotaccount' => 'May kuwenta ka na ba? $1.',
 'gotaccountlink' => 'Lumagda',
 'userlogin-resetlink' => 'Nakalimutan mo ang iyong mga detalyeng panglagda?',
-'userlogin-resetpassword-link' => 'Nakalimutan ba ang iyong hudyat?',
+'userlogin-resetpassword-link' => 'Nakalimutan ba ang iyong hudyat (password)?',
 'userlogin-createanother' => 'Lumikha ng iba pang akawnt',
 'createacct-join' => 'Ilagay ang iyong impormasyon sa ibaba.',
 'createacct-another-join' => 'Ilagay ang impormasyon ng bagong akawnt sa ibaba.',
@@ -682,6 +680,8 @@ Maghintay po muna bago subukan uli.',
 'login-abort-generic' => 'Bigo ang paglagda mo - Pinigil',
 'loginlanguagelabel' => 'Wika: $1',
 'suspicious-userlogout' => "Tinanggihan ang inyong kahilingang umalis sa pagkalagda dahil tila ito ay ipinadala ng sirang pambasa-basa o apoderadong pambaon (''caching proxy'')",
+'pt-createaccount' => 'Lumikha ng akawnt',
+'pt-userlogout' => 'Umalis sa pagkakatala',
 
 # Email sending
 'php-mail-error-unknown' => 'Hindi malamang kamalian sa tungkulin ng liham ng PHP ()',
@@ -689,8 +689,7 @@ Maghintay po muna bago subukan uli.',
 
 # Change password dialog
 'changepassword' => 'Baguhin ang hudyat',
-'resetpass_announce' => 'Lumagda ka sa pamamagitan ng isang pansamantalang ini-e-liham na kodigo.
-Para tapusin ang paglagda, dapat kang magtakda ng isang bagong hudyat dito:',
+'resetpass_announce' => 'Para sa ganap na pagtala, magtalaga ng panibagong password.',
 'resetpass_text' => '<!-- Magdagdag ng teksto rito -->',
 'resetpass_header' => 'Baguhin ang hudyat ng kuwenta',
 'oldpassword' => 'Lumang hudyat:',
@@ -704,7 +703,11 @@ Para tapusin ang paglagda, dapat kang magtakda ng isang bagong hudyat dito:',
 'resetpass-submit-cancel' => 'Kanselahin',
 'resetpass-wrong-oldpass' => 'Hindi tanggap na pansamantala o pangkasalukuyang hudyat.
 Maaaring matagumpay mo nang nabago ang iyong hudyat o nakahiling na ng isang bagong pansamantalang hudyat.',
+'resetpass-recycled' => 'Ireset ang iyong password sa pamamagitan ng paggamit ng iba pa maliban sa iyong ginagamit sa kasalukuyan.',
+'resetpass-temp-emailed' => 'Nakapagtala sa pamamagitan ng pansamantalang email code.
+Para sa ganap na pagtatala, magtakda ng panibagong password dito:',
 'resetpass-temp-password' => 'Pansamantalang hudyat:',
+'resetpass-expired-soft' => 'Napaso na ang iyong password at kailangan ireset. Pumili ng bagong password o iklik ang cancel upang i-reset sa ibang pagkakataon.',
 
 # Special:PasswordReset
 'passwordreset' => 'Muling pagtatakda ng hudyat',
@@ -1070,8 +1073,6 @@ Makikita mo ang pagkakaibang ito; matatagpuan ang mga detalye sa [{{fullurl:{{#S
 'revdelete-show-file-submit' => 'Oo',
 'revdelete-selected' => "{{PLURAL:$2|Piniling|Mga piniling}} pagbabago ng '''$1:'''",
 'logdelete-selected' => '{{PLURAL:$1|Piniling tala ng pangyayari|Piniling tala ng mga pangyayari}}:',
-'revdelete-text' => "'''Makikita pa rin ang mga binurang pagbabago at mga kaganapan sa pahina ng kasaysayan at mga talaan, ngunit hindi mapupuntahan ng madla ang mga bahagi ng kanilang nilalaman.
-Makikita pa rin ng iba pang mga tagapangasiwang nasa {{SITENAME}} ang mga tinagong nilalaman at maaaring ibalik ito mula sa pagkakabura sa pamamagitan ng kaparehong ugnayang-hangganan, maliban na lamang kung may itinakdang karagdagang mga restriksyon.",
 'revdelete-confirm' => 'Pakitiyak po na nais mo itong gawin, na nauunawaan mo ang mga kahihinatnan, at na ginagawa mo ito alinsunod sa [[{{MediaWiki:Policy-url}}|patakaran]].',
 'revdelete-suppress-text' => "Ang paglilingid ay dapat na gamitin '''lamang''' para sa sumusunod na mga pagkakataon:
 * Hindi naaangkop na kabatirang pansarili
index 85c69e9..01b04a6 100644 (file)
@@ -419,7 +419,6 @@ Ko e ʻuhinga loka ko e $1 ia.",
 'lineno' => 'Laini hono $1:',
 'compareselectedversions' => 'Fakatatau ongo paaki fili',
 'editundo' => 'vete',
-'diff-multi' => '(Naʻe ʻikai ʻasi mai ʻa e paaki lotoloto ʻe $1).',
 
 # Search results
 'searchresults' => 'kumi hono ʻātunga',
@@ -749,7 +748,6 @@ Kapau ʻaho ʻe taha, te ke fietoʻo ʻa e pēsí mei hoʻo hokohoko leʻo, lomi
 'watchmethod-list' => 'ʻoku siviʻi ʻa e ngaahi peesi fakaleʻo ki he toki fatu',
 'watchlistcontains' => 'ʻOku ʻi ai ha peesi ʻe $1 ʻi hoʻo hokohoko leʻo.',
 'iteminvalidname' => "Meʻa fihi mo e meʻa '$1', hingo taʻeʻaongaʻi...",
-'wlnote' => 'ʻOku ʻasi ʻi lalo ʻa e liliu fakamuimui ʻe $1 ʻi he houa fakamuimui ʻe <b>$2</b>.',
 'wlshowlast' => 'ʻAsi mai houa fakamuimui ʻe $1, ʻaho ʻe $2, $3',
 
 # Displayed when you click the "watch" button and it is in the process of watching
index 7f47b88..2b4d928 100644 (file)
@@ -52,7 +52,6 @@ $specialPageAliases = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Putim lain ananit long ol link:',
-'tog-justify' => "Soim ol paragraf i pulmapim sipes long lephan i go long raithan (''justify'')",
 'tog-hideminor' => 'Noken soim ol liklik senis insait long ol nupela senis',
 'tog-hidepatrolled' => 'Noken soim ol lukluk senis insait long ol nupela senis',
 'tog-newpageshidepatrolled' => 'Noken soim ol lukluk senis insait long ol nupela pes',
@@ -61,9 +60,7 @@ $messages = array(
 'tog-numberheadings' => 'Putim ol namba i go long wanwan hap bilong pes',
 'tog-showtoolbar' => 'Soim ol liklik link long wokim senis kwiktaim (i nidim JavaScript)',
 'tog-editondblclick' => 'Senisim pes taim yu paitim tupela taim kwiktaim (i nidim JavaScript)',
-'tog-editsection' => 'Soim ol [senisim] link long wanwan hap bilong ol pes',
 'tog-editsectiononrightclick' => 'Senisim ol hap bilong pes taim yu paitim nem bilong hap<br />wantaim raithan-klik (i nidim Javascript)',
-'tog-showtoc' => 'Soim ol nem bilong hap insait long liklik bokis, taim igat antap long 3 hap long pes',
 'tog-rememberpassword' => 'Holim yusanem bilong mi long dispela komputa (holim pas longpela taim $1 {{PLURAL:$1|de|de}})',
 'tog-watchcreations' => 'Putim ol nupela pes mi wokim na fail mi salim long lukautbuk',
 'tog-watchdefault' => 'Putim ol pes na fail mi senisim long lukautbuk bilong mi',
index b75ca61..cf184ee 100644 (file)
@@ -37,6 +37,7 @@
  * @author LuCKY
  * @author Mach
  * @author Manco Capac
+ * @author Marmase
  * @author Meelo
  * @author Metal Militia
  * @author Mirzali
@@ -46,6 +47,7 @@
  * @author Nemo bis
  * @author Rapsar
  * @author Reedy
+ * @author Rhinestorm
  * @author Runningfridgesrule
  * @author Sadrettin
  * @author Srhat
@@ -368,8 +370,8 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Bölüm başlığına sağ tıklayarak bölümleri düzenleyebilme olanağı ver',
 'tog-rememberpassword' => 'Girişimi bu tarayıcıda hatırla (en fazla $1 {{PLURAL:$1|gün|gün}} için)',
 'tog-watchcreations' => 'Açtığım sayfaları ve yüklediğim dosyaları izleme listeme ekle',
-'tog-watchdefault' => 'Düzenleme yaptığım sayfaları izleme listeme ekle',
-'tog-watchmoves' => 'Taşıdığım sayfaları izleme listeme ekle',
+'tog-watchdefault' => 'Düzenleme yaptığım sayfaları ve dosyaları izleme listeme ekle',
+'tog-watchmoves' => 'Taşıdığım sayfaları ve dosyaları izleme listeme ekle',
 'tog-watchdeletion' => 'Sildiğim sayfaları ve dosyaları izleme listeme ekle',
 'tog-minordefault' => 'Varsayılan olarak bütün düzenlemeleri küçük olarak işaretle',
 'tog-previewontop' => 'Ön izlemeyi düzenleme kutusunun üstünde göster',
@@ -392,7 +394,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Diğer kullanıcılara gönderdiğim e-postaların kopyalarını bana da gönder',
 'tog-diffonly' => 'Sayfa içeriğini sürüm farklarının altında gösterme',
 'tog-showhiddencats' => 'Gizli kategorileri göster',
-'tog-noconvertlink' => 'Bağlantı başlığı dönüştürmesini devre dışı bırakma',
 'tog-norollbackdiff' => 'Geridönüş uygulandıktan sonra değişikliği atla',
 'tog-useeditwarning' => 'Kaydedilmemiş değişikliğe sahip bir değişiklik sayfasından çıkarken beni uyar',
 'tog-prefershttps' => 'Oturumu açarken her zaman güvenli bağlantı kullan',
@@ -519,7 +520,6 @@ $messages = array(
 'vector-action-protect' => 'Koru',
 'vector-action-undelete' => 'Silinmeyi geri al',
 'vector-action-unprotect' => 'Korumayı değiştir',
-'vector-simplesearch-preference' => 'Gelişmiş arama önerilerini etkinleştir (Sadece Vector görünümü için)',
 'vector-view-create' => 'Oluştur',
 'vector-view-edit' => 'Düzenle',
 'vector-view-history' => 'Geçmişi gör',
@@ -529,7 +529,7 @@ $messages = array(
 'namespaces' => 'Ad alanları',
 'variants' => 'Türevler',
 
-'navigation-heading' => 'Dolaşım menüsü',
+'navigation-heading' => 'Gezinti menüsü',
 'errorpagetitle' => 'Hata',
 'returnto' => '$1 sayfasına geri dön.',
 'tagline' => '{{SITENAME}} sitesinden',
@@ -802,8 +802,6 @@ Tarayıcınızın önbelleğini temizleyinceye kadar bazı sayfalarda, oturumunu
 'gotaccountlink' => 'Oturum açın',
 'userlogin-resetlink' => 'Giriş bilgilerinizi mi unuttunuz?',
 'userlogin-resetpassword-link' => 'Parolanızı mı unuttunuz?',
-'helplogin-url' => 'Help:Oturum açma',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Oturum açma konusunda yardım alın]]',
 'userlogin-loggedin' => 'Zaten {{GENDER:$1|$1}} olarak oturum açtınız.
 Başka bir kullanıcı olarak oturum açmak için aşağıdaki formu kullanın.',
 'userlogin-createanother' => 'Başka bir hesap oluşturun',
@@ -893,6 +891,9 @@ Devam etmeden önce $1 bekleyin.',
 'suspicious-userlogout' => 'Çıkış isteğiniz reddedildi çünkü bozuk bir tarayıcı ya da önbellekli vekil tarafından gönerilmiş gibi görünüyor.',
 'createacct-another-realname-tip' => 'Gerçek adınız isteğe bağlıdır.
 Eğer gerçek adınızı belirtirseniz, çalışmalarınıza atıfta bulunulması için de kullanılacaktır.',
+'pt-login' => 'Giriş yap',
+'pt-createaccount' => 'Hesap oluştur',
+'pt-userlogout' => 'Oturumu kapat',
 
 # Email sending
 'php-mail-error-unknown' => "PHP's mail() fonksiyonunda bilinmeyen hata",
@@ -901,8 +902,7 @@ Eğer gerçek adınızı belirtirseniz, çalışmalarınıza atıfta bulunulmas
 
 # Change password dialog
 'changepassword' => 'Parolayı değiştir',
-'resetpass_announce' => 'Size gönderilen muvakkat bir parola ile oturum açtınız.
-Girişi bitirmek için, burada yeni bir parola yazın:',
+'resetpass_announce' => 'Girişinizi tamamlayabilmeniz için, yeni bir parola oluşturmanız gereklidir.',
 'resetpass_text' => '<!-- Metini buraya ekleyin -->',
 'resetpass_header' => 'Hesap şifresini değiştir',
 'oldpassword' => 'Eski parola',
@@ -918,8 +918,11 @@ Lütfen tekrar denemeden önce $1 bekleyin.',
 'resetpass-submit-cancel' => 'İptal',
 'resetpass-wrong-oldpass' => 'Geçersiz geçici veya güncel şifre.
 Şifrenizi zaten başarıyla değiştirdiniz ya da yeni bir geçici şifre istediniz.',
+'resetpass-recycled' => 'Lütfen parolanızı eski parolanızdan farklı olarak değiştirin.',
 'resetpass-temp-password' => 'Geçici parola:',
 'resetpass-abort-generic' => 'Parola değişikliği bir uzantı tarafından iptal edildi.',
+'resetpass-expired' => 'Parolanızın süresi bitti. Lütfen, giriş için yeni bir parola oluşturun.',
+'resetpass-expired-soft' => 'Parolanızın süresi bitti ve değiştirilmesi gerekiyor. Lütfen, yeni bir parola seçin veya daha sonra oluşturmak için "{{int:resetpass-submit-cancel}}" butonuna tıklayın.',
 
 # Special:PasswordReset
 'passwordreset' => 'Parola sıfırlama',
@@ -1181,7 +1184,7 @@ Sayfa zaten mevcut.',
 'invalid-content-data' => 'Geçersiz içerik verisi',
 'content-not-allowed-here' => '"$1" içeriğine, [[$2]] sayfasında izin verilmemekte.',
 'editwarning-warning' => 'Bu sayfadan ayrılmak yaptığınız herhangi bir değişikliği kaybetmenize sebep olabilir.
-Eğer giriş yaptıysanız, bu uyarıyı, tercihlerinizin "Sayfa yazma alanı" bölümünde devre dışı bırakabilirsiniz.',
+Eğer giriş yaptıysanız, bu uyarıyı, tercihlerinizin "{{int:prefs-editing}}" bölümünde devre dışı bırakabilirsiniz.',
 'editpage-notsupportedcontentformat-title' => 'İçerik biçimi desteklenmiyor',
 'editpage-notsupportedcontentformat-text' => '$1 içerik biçimi $2 içerik modeli tarafından desteklenmiyor.',
 
@@ -1217,6 +1220,7 @@ Bu değişkenler atlandı.",
 'undo-success' => 'Bu değişiklik geri alınabilir. Lütfen aşağıdaki karşılaştırmayı kontrol edin, gerçekten bu değişikliği yapmak istediğinizden emin olun ve sayfayı kaydederek bir önceki değişikliği geriye alın.',
 'undo-failure' => 'Değişikliklerin çakışması nedeniyle geri alma işlemi başarısız oldu.',
 'undo-norev' => 'Değişiklik geri alınamaz çünkü ya silinmiş ya da varolmamaktadır.',
+'undo-nochange' => 'Düzeltme zaten geri alınmış.',
 'undo-summary' => '$1 değişikliği [[Special:Contributions/$2|$2]] ([[User talk:$2|mesaj]]) tarafından geri alındı.',
 'undo-summary-username-hidden' => 'Gizli bir kullanıcı tarafından $1 sürümü geri alınıyor',
 
@@ -1301,8 +1305,6 @@ Bir hizmetli olarak bu değişikliği görebilirsiniz; [{{fullurl:{{#Special:Log
 'revdelete-show-file-submit' => 'Evet',
 'revdelete-selected' => "'''[[:$1]] sayfasının {{PLURAL:$2|seçili değişikliği|seçili değişiklikleri}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Seçili kayıt olayı|Seçili kayıt olayları}}:'''",
-'revdelete-text' => "'''Silinen revizyonlar ve olaylar hala sayfa geçmişinde ve günlüklerde görünecektir, fakat içeriğin parçaları umumi olarak erişilemeyecektir.'''
-{{SITENAME}} sitesindeki diğer hizmetliler gizli içeriğe erişebilir ve ilave kısıtlamalar ayarlanmadıysa bu arayüz ile geri getirebilir.",
 'revdelete-confirm' => 'Lütfen, bunu yapmak istediğinizi , sonuçlarını anladığınızı, ve bunu [[{{MediaWiki:Policy-url}}|ilkelere]] göre yapıyor olduğunuzu onaylayın.',
 'revdelete-suppress-text' => "Saklama '''sadece''' aşağıdaki durumlarda kullanılmalıdır:
 * Muhtemel iftira niteliğindeki bilgi
@@ -1398,6 +1400,8 @@ Gezinti bağlantılarının bu sütunu sıfırlayacağını unutmayın.',
 'showhideselectedversions' => 'Seçili sürümleri göster/gizle',
 'editundo' => 'geri al',
 'diff-empty' => '(Fark yok)',
+'diff-multi-sameuser' => '(Aynı kullanıcıdan {{PLURAL:$1|bir ara revizyon|$1 ara revizyon}} gösterilmiyor)',
+'diff-multi-otherusers' => '({{PLURAL:$2|Bir diğer kullanıcıdan|$2 kullanıcıdan}} {{PLURAL:$1|bir ara revizyon|$1 ara revizyon}} gösterilmiyor)',
 'diff-multi-manyusers' => '($2 kullancıdan fazla {{PLURAL:$2|kullanıcı|kullanıcı}} tarafından yapılan {{PLURAL:$1|bir ara revizyon|$1 ara revizyon}} gösterilmiyor)',
 'difference-missing-revision' => 'Bu farkın {{PLURAL:$2|bir revizyonu|$2 revizyonu}} ($1) {{PLURAL:$2|bulunamadı|bulunamadı}}.
 
@@ -1418,7 +1422,7 @@ Ayrıntılar [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silme g
 'shown-title' => 'Sayfa başına $1 {{PLURAL:$1|sonuç|sonuç}} göster',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) gör',
 'searchmenu-exists' => "'''Bu vikide \"[[:\$1]]\" adında bir sayfa mevcut'''",
-'searchmenu-new' => "'''Bu vikide \"[[:\$1]]\" sayfasını oluştur!'''",
+'searchmenu-new' => '<strong>Bu vikide "[[:$1]]" sayfasını oluştur!</strong> {{PLURAL:$2|0=|Ayrıca aramınızda bulunan sayfayı görün.|Ayrıca bulunan arama sonuçlarını görün.}}',
 'searchprofile-articles' => 'İçerik sayfaları',
 'searchprofile-project' => 'Yardım ve proje sayfaları',
 'searchprofile-images' => 'Çokluortam',
@@ -1444,6 +1448,7 @@ Ayrıntılar [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silme g
 'searchrelated' => 'ilgili',
 'searchall' => 'hepsi',
 'showingresults' => "$2. sonuçtan başlayarak {{PLURAL:$1|'''1''' sonuç |'''$1''' sonuç }} aşağıdadır:",
+'showingresultsinrange' => '<strong>$2</strong> ile <strong>$3</strong> arasında toplam <strong>$1</strong> sonuç gösteriliyor.',
 'showingresultsnum' => "'''$2''' sonuçtan başlayarak {{PLURAL:$3|'''1''' sonuç|'''$3''' sonuç}} aşağıdadır:",
 'showingresultsheader' => "'''$4''' için {{PLURAL:$5|'''$3''' sonuçtan '''$1'''i|'''$1 - $2''' arası '''$3''' sonuç}}",
 'search-nonefound' => 'Sorguyla eşleşen bir sonuç yok.',
@@ -1761,11 +1766,23 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'rcnotefrom' => "'''$2''' tarihinden itibaren yapılan değişiklikler aşağıdadır (en fazla <b>$1</b> tanesi gösterilmektedir).",
 'rclistfrom' => '$1 tarihinden itibaren yeni değişiklikleri göster',
 'rcshowhideminor' => 'Küçük değişiklikleri $1',
+'rcshowhideminor-show' => 'Göster',
+'rcshowhideminor-hide' => 'Gizle',
 'rcshowhidebots' => 'botları $1',
+'rcshowhidebots-show' => 'Göster',
+'rcshowhidebots-hide' => 'Gizle',
 'rcshowhideliu' => 'Kayıtlı kullanıcıları $1',
+'rcshowhideliu-show' => 'Göster',
+'rcshowhideliu-hide' => 'Gizle',
 'rcshowhideanons' => 'Anonim kullanıcıları $1',
+'rcshowhideanons-show' => 'Göster',
+'rcshowhideanons-hide' => 'Gizle',
 'rcshowhidepatr' => 'İzlenmiş değişiklikleri $1',
+'rcshowhidepatr-show' => 'Göster',
+'rcshowhidepatr-hide' => 'Gizle',
 'rcshowhidemine' => 'Değişikliklerimi $1',
+'rcshowhidemine-show' => 'Göster',
+'rcshowhidemine-hide' => 'Gizle',
 'rclinks' => 'Son $2 günde yapılan son $1 değişikliği göster;<br /> $3',
 'diff' => 'fark',
 'hist' => 'geçmiş',
@@ -1890,6 +1907,7 @@ Dosyayı tekrar yüklemeye devam etmeden önce, bastırılmış dosya verisini g
 'uploaddisabledtext' => 'Dosya yüklemeleri devredışı bırakılmıştır.',
 'php-uploaddisabledtext' => 'PHP dosyası yüklemeleri devre dışıdır. Lütfen file_uploads ayarını kontrol edin.',
 'uploadscripted' => 'Bu dosya bir internet tarayıcısı tarafından hatalı çevrilebilecek bir HTML veya script kodu içermektedir.',
+'uploadinvalidxml' => 'Yüklenen dosyadaki XML işlenemedi.',
 'uploadvirus' => 'Bu dosya virüslüdür! Detayları: $1',
 'uploadjava' => 'Dosya, bir Java .classdosyası içeren bir ZIP dosyasıdır.
 Java dosyalarının yüklenmesine izin verilmemektedir, zira güvenlik kısıtlamalarının atlanmasına neden olabilmektedirler.',
@@ -2259,10 +2277,20 @@ Her satırın içerdiği bağlantılar; birinci ve ikinci yönlendirme, ayrıca
 'deadendpagestext' => 'Aşağıdaki sayfalar, {{SITENAME}} sitesinde diğer sayfalara bağlantı vermiyor.',
 'protectedpages' => 'Koruma altındaki sayfalar',
 'protectedpages-indef' => 'Sadece süresiz korumalar',
+'protectedpages-summary' => 'Bu sayfa şu anda koruma altında olan mevcut sayfaları listeler. Oluşturulması korunan başlıkların bir listesi için [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] sayfasına bakın.',
 'protectedpages-cascade' => 'Sadece ardışık korumalar',
 'protectedpages-noredirect' => 'Yönlendirmeleri gizle',
 'protectedpagesempty' => 'Şu anda, bu parametrelerle korunan hiç bir sayfa yok.',
+'protectedpages-timestamp' => 'Zaman damgası',
+'protectedpages-page' => 'Madde',
+'protectedpages-expiry' => 'Bitiş tarihi',
+'protectedpages-performer' => 'Koruyan kullanıcı',
+'protectedpages-params' => 'Koruma parametreleri',
+'protectedpages-reason' => 'Sebep',
+'protectedpages-unknown-timestamp' => 'Bilinmiyor',
+'protectedpages-unknown-performer' => 'Bilinmeyen kullanıcı',
 'protectedtitles' => 'Korunan başlıklar',
+'protectedtitles-summary' => 'Bu sayfa şu anda oluşturulması korunan başlıkları listeler. Koruma altında olan mevcut sayfaların bir listesi için [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] sayfasına bakın.',
 'protectedtitlesempty' => 'Şu anda, bu parametrelerle korunan hiç bir başlık yok.',
 'listusers' => 'Kullanıcı listesi',
 'listusers-editsonly' => 'Sadece değişiklik yapan kullanıcıları göster',
@@ -2448,6 +2476,7 @@ Bundan sonra, bu sayfaya ve ilgili tartışma sayfasına yapılacak değişiklik
 'watchmethod-list' => 'izlediğiniz sayfalarda yapılan son değişiklikler kontrol ediliyor',
 'watchlistcontains' => 'İzleme listenizde $1 tane {{PLURAL:$1|sayfa|sayfa}} var.',
 'iteminvalidname' => "'$1' öğesi ile sorun, geçersiz isim...",
+'wlnote2' => 'Aşağıdakiler, son {{PLURAL:$1|bir saat|<strong>$1</strong> saat}} içindeki değişikliklerdir, $2, $3 tarihi itibariyle.',
 'wlshowlast' => 'Son $1 saati $2 günü göster $3',
 'watchlist-options' => 'İzleme listesi seçenekleri',
 
@@ -2546,10 +2575,10 @@ dikkatle devam edin.',
 'rollbacklinkcount-morethan' => '$1 {{PLURAL:$1|değişiklikten|değişiklikten}} fazla geri döndür',
 'rollbackfailed' => 'geri alma işlemi başarısız',
 'cantrollback' => 'Sayfaya son katkıda bulunan kullanıcı, sayfaya katkıda bulunmuş tek kişi olduğu için, değişiklikler geri alınamıyor.',
-'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tarafından [[:$1]] sayfasında yapılmış son değişiklik geriye alınamıyor;
-başka biri sayfada değişiklik yaptı ya da sayfayı geriye aldı.
+'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|Tartışma]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tarafından [[:$1]] sayfasında yapılmış son değişiklik geriye alınamıyor;
+başka birisi sayfada değişiklik yaptı ya da sayfayı geriye aldı.
 
-Son değişikliği yapan: [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+Son değişikliği yapan: [[User:$3|$3]] ([[User talk:$3|Tartışma]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Değişiklik özeti: \"''\$1''\" idi.",
 'revertpage' => '[[Special:Contributions/$2|$2]] [[User talk:$2|mesaj]] tarafından yapılan değişiklikler geri alınarak, [[User:$1|$1]] tarafından değiştirilmiş önceki sürüm geri getirildi.',
 'revertpage-nouser' => 'Gizli bir kullanıcı tarafından yapılan değişiklikler geri alınarak {{GENDER:$1|[[User:$1|$1]]}} tarafından yapılan son revizyon geri getirildi',
@@ -3007,6 +3036,7 @@ Genel MediaWiki yerelleştirmesine katkıda bulunmak isterseniz, lütfen [https:
 'allmessages-prefix' => 'Önek ile filtrele:',
 'allmessages-language' => 'Dil:',
 'allmessages-filter-submit' => 'Git',
+'allmessages-filter-translate' => 'Çevir',
 
 # Thumbnails
 'thumbnail-more' => 'Büyüt',
@@ -3023,6 +3053,7 @@ $2',
 'thumbnail_image-type' => 'Görüntü türü desteklenmiyor',
 'thumbnail_gd-library' => 'Eksik GD kütüphanesi yapılandırması: kayıp fonksiyon $1',
 'thumbnail_image-missing' => 'Dosya kayıp gibi görünüyor: $1',
+'thumbnail_image-failure-limit' => 'Yakın zamanda bu küçük resmin oluşturulması için çok fazla başarısız  girişim oldu ($1 ya da daha fazla). Lütfen daha sonra yeniden deneyin.',
 
 # Special:Import
 'import' => 'Sayfaları aktar',
@@ -3061,7 +3092,7 @@ Dosyanın sadece bir kısmı yüklendi.',
 Geçici dosya kayıp.',
 'import-parse-failure' => 'XML içeri aktarma derlemesi başarısız',
 'import-noarticle' => 'İçe aktarılacak sayfa yok!',
-'import-nonewrevisions' => 'Tüm revizyonlar önceden içe aktarılmış.',
+'import-nonewrevisions' => 'Hiçbir revizyon içe aktarılmadı (zaten hepsi vardı ya da hatadan dolayı atlandı).',
 'xml-error-string' => '$2 satırında, $3 sütununda $1 (bayt $4): $5',
 'import-upload' => 'XML bilgileri yükle',
 'import-token-mismatch' => 'Oturum verisi kaybı. Lütfen yeniden deneyin.',
@@ -3072,6 +3103,7 @@ Geçici dosya kayıp.',
 'import-error-special' => '"$1" sayfası içe aktarılamadı çünkü sayfalara izin vermeyen özel bir ad alanına ait.',
 'import-error-invalid' => '"$1" sayfası içe aktarılamadı çünkü sayfa adı geçersiz.',
 'import-error-unserialize' => '"$1" sayfasının $2 revizyonu serileştirilmesi geri alınamıyor. Revizyonun $4 olarak serileştirilmiş $3 içerik modelini kullandığı raporlandı.',
+'import-error-bad-location' => '"$1" sayfası için $3 içerik modelini kullanan $2 revizyonu, model sayfada desteklenmediğinden, bu vikide saklanamıyor.',
 'import-options-wrong' => 'Yanlış {{PLURAL:$2|seçenek|seçenek}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Verilen kök sayfa geçersiz bir başlık.',
 'import-rootpage-nosubpage' => 'Kök sayfanın "$1" ad alanı alt sayfalara izin vermiyor.',
@@ -4261,6 +4293,4 @@ Aslında, çift ayraçlı hemen hemen her şeyi genişletir.',
 'expand_templates_generate_rawhtml' => 'Ham HTML göster',
 'expand_templates_preview' => 'Önizleme',
 
-# Unknown messages
-'uploadinvalidxml' => 'Yüklenen dosyadaki XML işlenemedi.',
 );
index 6851d4b..32cee15 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Tatar (Татарча/Tatarça)
+/** Tatar (татарча/tatarça)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -7,8 +7,6 @@
  * @ingroup Language
  * @file
  *
- * @comment Placeholder for Tatar. Falls back to Tatar in Cyrillic script.
  */
 
 $fallback = 'tt-cyrl, ru';
-
index 21e3c76..7fa59dd 100644 (file)
  * @author Don Alessandro
  * @author Haqmar
  * @author Himiq Dzyu
+ * @author Ilnur efende
  * @author KhayR
  * @author MF-Warburg
  * @author Marat Vildanov
+ * @author Marat-avgust
  * @author Reedy
  * @author Rinatus
  * @author Timming
@@ -352,7 +354,7 @@ $messages = array(
 'moredotdotdot' => 'Дәвамы…',
 'morenotlisted' => 'Башка берни дә юк...',
 'mypage' => 'Бит',
-'mytalk' => 'Бәхәс',
+'mytalk' => 'Бәхәс бите',
 'anontalk' => 'Бу IP адресы өчен бәхәс бите',
 'navigation' => 'Күчү',
 'and' => '&#32;һәм',
@@ -373,7 +375,6 @@ $messages = array(
 'vector-action-protect' => 'Яклау',
 'vector-action-undelete' => 'Кайтару',
 'vector-action-unprotect' => 'Яклауны үзгәртү',
-'vector-simplesearch-preference' => 'Җиңеләйтелгән эзләү юлын кушарга («Векторлы» бизәлеше өчен генә)',
 'vector-view-create' => 'Төзү',
 'vector-view-edit' => 'Үзгәртү',
 'vector-view-history' => 'Тарихын карау',
@@ -632,8 +633,8 @@ $2',
 'userlogin-noaccount' => 'Аккаунт юкмы?',
 'userlogin-joinproject' => 'Проектка керү',
 'nologin' => "Кулланучы исемең юкмы? '''$1'''",
-'nologinlink' => 'Хисап язмасы төзегез',
-'createaccount' => 'Яңа кулланучы теркәү',
+'nologinlink' => 'Хисап язмасы төзү',
+'createaccount' => 'Яңа кулланучыны теркәү',
 'gotaccount' => "Сез инде теркәлдегезме? '''$1'''.",
 'gotaccountlink' => 'Керү',
 'userlogin-resetlink' => 'Серсүзегезне оныттыгызмы?',
@@ -694,6 +695,9 @@ $2',
 'login-abort-generic' => 'Системага уңышсыз керү очрагы',
 'loginlanguagelabel' => 'Тел: $1',
 'suspicious-userlogout' => 'Сезнең эшчәнлекне бетерү соравыгыз кире кагылды, чөнки ул ялгыш браузер яисә кэшлаучы прокси аша җибәрелергэ мөмкин.',
+'pt-login' => 'Керү',
+'pt-createaccount' => 'Яңа кулланучыны теркәү',
+'pt-userlogout' => 'Чыгу',
 
 # Email sending
 'php-mail-error-unknown' => 'PHP mail() функциясендә билгесез хата',
@@ -1338,19 +1342,31 @@ $1",
 'recentchanges-legend' => 'Соңгы үзгәртүләр көйләүләре',
 'recentchanges-summary' => 'Бу биттә {{grammar:genitive|{{SITENAME}}}} проектының соңгы үзгәртүләре күрсәтелә.',
 'recentchanges-feed-description' => 'Бу агымда соңгы үзгәртүләрне күзәтү.',
-'recentchanges-label-newpage' => 'Ð\91Ñ\83 Ò¯Ð·Ð³Ó\99Ñ\80Ñ\82Ò¯ Ð±ÐµÐ»Ó\99н Ñ\8fңа Ð±Ð¸Ñ\82 Ñ\82өзелде',
+'recentchanges-label-newpage' => 'Ð\91Ñ\83 Ò¯Ð·Ð³Ó\99Ñ\80Ñ\82Ò¯ Ð±ÐµÐ»Ó\99н Ñ\8fңа Ð±Ð¸Ñ\82 Ñ\82өзелгÓ\99н',
 'recentchanges-label-minor' => 'Бу кече үзгәртү',
-'recentchanges-label-bot' => 'Бу үзгәртү бот белән эшләнгән иде',
+'recentchanges-label-bot' => 'Бу үзгәртү бот белән эшләнгән',
 'recentchanges-label-unpatrolled' => 'Үзгәртүне әлегә тикшермәгәннәр',
+'recentchanges-label-plusminus' => 'Битнең зурлыгы шуның кадәрле байтка үзгәрде',
 'recentchanges-legend-newpage' => '([[Special:NewPages|яңа бит]])',
 'rcnotefrom' => "Астарак '''$2''' башлап ('''$1''' кадәр) үзгәртүләр күрсәтелгән.",
 'rclistfrom' => '$1 башлап яңа үзгәртүләрне күрсәт',
 'rcshowhideminor' => 'кече үзгәртүләрне $1',
+'rcshowhideminor-show' => 'күрсәт',
+'rcshowhideminor-hide' => 'яшер',
 'rcshowhidebots' => 'ботларны $1',
-'rcshowhideliu' => '$1 кергән кулланучылар',
+'rcshowhidebots-show' => 'күрсәт',
+'rcshowhidebots-hide' => 'яшер',
+'rcshowhideliu' => 'Теркәлгән кулланучыларны $1',
+'rcshowhideliu-show' => 'күрсәт',
+'rcshowhideliu-hide' => 'яшер',
 'rcshowhideanons' => 'кермәгән кулланучыларны $1',
+'rcshowhideanons-show' => 'күрсәт',
+'rcshowhideanons-hide' => 'яшер',
 'rcshowhidepatr' => 'тикшерелгән үзгәртүләрне $1',
+'rcshowhidepatr-hide' => 'яшер',
 'rcshowhidemine' => 'минем үзгәртүләремне $1',
+'rcshowhidemine-show' => 'күрсәт',
+'rcshowhidemine-hide' => 'яшер',
 'rclinks' => 'Соңгы $2 көн эчендә соңгы $1 үзгәртүне күрсәт<br />$3',
 'diff' => 'аерма',
 'hist' => 'тарих',
index ae89e0c..ca11cb9 100644 (file)
@@ -239,7 +239,6 @@ $messages = array(
 'vector-action-protect' => 'Yaqlaw',
 'vector-action-undelete' => 'Qaytaru',
 'vector-action-unprotect' => 'Yaqlawnı beterü',
-'vector-simplesearch-preference' => 'Ezläw öçen kiñäytelgän yärdäm xäbärlären kürsätü («Vektorlı» bizäleşe öçen genä qullanılıa)',
 'vector-view-create' => 'Tözü',
 'vector-view-edit' => 'Üzgärtü',
 'vector-view-history' => 'Tarixın qaraw',
index 46c76dc..dcdd5f3 100644 (file)
@@ -55,25 +55,23 @@ $messages = array(
 'tog-hidepatrolled' => 'Берпуметӥ тупатонъёслэн списоксэс партрулировать каремын воштонъёстэк возьматыны',
 'tog-newpageshidepatrolled' => 'Выль бамъёслэн списоксэс партрулировать каремын бамъёстэк возьматыны',
 'tog-extendwatchlist' => 'Чаклан списокын вань тупатонъёсты возьматыны (озьытэк берпуметӥоссэс гинэ)',
-'tog-usenewrc' => 'Выль тупатонъёслэн списоксэс умояллям сямен возьматыны (JavsScript кулэ)',
+'tog-usenewrc' => 'Выль тупатонъёслэсь списоксэс умояллям сямен возьматыны (JavsScript кулэ)',
 'tog-numberheadings' => 'Заголовокъёсты автоматически нумеровать карыны',
 'tog-showtoolbar' => 'Тупатон тӥрлыкъёслэн панельзэс возьматыны (JavaScript кулэ)',
-'tog-editondblclick' => 'Бамъёсты шырлэн валтӥсь зӥбонэз кык пол ӝог зӥбиськыкуз тупатыны (JavaScript кулэ)',
-'tog-editsection' => 'Котькуд секциез [тапатоно] чӧлсконэн возьматыны',
-'tog-editsectiononrightclick' => 'Cекциосты шырлэн бур кнопкаез заголовок вылын зӥбиськыкуз тупатыны (JavaScript кулэ)',
-'tog-showtoc' => 'Пуштросэз возьматоно (2-лэсь трос заголовокъем бамъёс понна)',
-'tog-rememberpassword' => 'Мынам пыроннимме та браузерлэн тодаз возьыны ($1 яке $1-лэсь ӧжытгес нунал ӵоже гинэ)',
+'tog-editondblclick' => 'Бамъёсты шырлэсь зӥбонзэ кык пол зӥбыса тупатыны (JavaScript кулэ)',
+'tog-editsectiononrightclick' => 'Cекциолэсь заголовок вылазы шырлэн бур кнопкаеныз зӥбыса тупатонзэс лэзьыны (JavaScript кулэ)',
+'tog-rememberpassword' => 'Мынэсьтым пыроннимме та браузерын возьыны ($1 нуналлэсь кемагес ӧвӧл)',
 'tog-watchcreations' => 'Мынэсьтым кылдытэм бамъёсме но ӝуткам файлъёсме чаклан списокам пыртыны',
-'tog-watchdefault' => 'Ð\91амÑ\8aÑ\91Ñ\81Ñ\82Ñ\8b, ÐºÑ\83дÑ\8aÑ\91Ñ\81Ñ\82Ñ\8dÑ\81 Ð¼Ð¾Ð½ Ñ\82Ñ\83паÑ\82Ó¥Ñ\81Ñ\8cко, Ð¼Ñ\8bнам Ñ\87аклкан списокам пыртыны',
-'tog-watchmoves' => 'Ð\91амÑ\8aÑ\91Ñ\81Ñ\82Ñ\8b, ÐºÑ\83дÑ\8aÑ\91Ñ\81Ñ\82Ñ\8dÑ\81 Ð¼Ð¾Ð½ Ð¼Ñ\83кеÑ\82 Ð¸Ð½Ñ\82Ñ\8bе Ð²Ñ\8bжÑ\82Ó¥Ñ\81Ñ\8cко, Ð¼Ñ\8bнам Ñ\87аклкан списокам пыртыны',
-'tog-watchdeletion' => 'Ð\91амÑ\8aÑ\91Ñ\81Ñ\82Ñ\8b, ÐºÑ\83дÑ\8aÑ\91Ñ\81Ñ\82Ñ\8dÑ\81 Ð¼Ð¾Ð½ ÓµÑ\83Ñ\88иÑ\81Ñ\8cко, Ð¼Ñ\8bнам Ñ\87аклкан списоке пыртыны',
+'tog-watchdefault' => 'Ð\9cÑ\8bнÑ\8dÑ\81Ñ\8cÑ\82Ñ\8bм Ñ\82Ñ\83паÑ\82Ñ\8dм Ð±Ð°Ð¼Ñ\8aÑ\91Ñ\81ме Ð½Ð¾ Ñ\84айлÑ\8aÑ\91Ñ\81ме Ñ\87аклан списокам пыртыны',
+'tog-watchmoves' => 'Ð\9cÑ\8bнÑ\8dÑ\81Ñ\8cÑ\82Ñ\8bм Ð¼Ñ\83кеÑ\82 Ð¸Ð½Ñ\82Ñ\8bе Ð²Ñ\8bжÑ\82Ñ\8dм Ð±Ð°Ð¼Ñ\8aÑ\91Ñ\81ме Ð½Ð¾ Ñ\84айлÑ\8aÑ\91Ñ\81ме Ñ\87аклан списокам пыртыны',
+'tog-watchdeletion' => 'Ð\9cÑ\8bнÑ\8dÑ\81Ñ\8cÑ\82Ñ\8bм ÓµÑ\83Ñ\88Ñ\8bÑ\81а Ð±Ñ\8bдÑ\82Ñ\8dм Ð±Ð°Ð¼Ñ\8aÑ\91Ñ\81ме Ð½Ð¾ Ñ\84айлÑ\8aÑ\91Ñ\81ме Ñ\87аклан списоке пыртыны',
 'tog-minordefault' => 'Вань воштонъёсты «ичи воштон» пусэн пусйыны',
 'tog-previewontop' => 'Утён азьвыл учконлэсь укнозэ тупатон укнолэсь азьвылгес возьматыны',
 'tog-previewonfirst' => 'Бам нырысьсэ утиськыкуз уётн азьвыл учконэз возьматыны',
 
 'underline-always' => 'Котьку',
 'underline-never' => 'Ноку',
-'underline-default' => 'Браузерысь настройкаосты уже кутоно',
+'underline-default' => 'Браузерлэсь настройкаоссэ уже кутоно',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Тупатон бусыысь шрифтлэн стилез',
@@ -135,18 +133,18 @@ $messages = array(
 'dec' => 'тст',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Категория|Категориос}}',
+'pagecategories' => '{{PLURAL:$1|1=Категория|Категориос}}',
 'category_header' => '«$1» категориысь бамъёс',
 'subcategories' => 'Подкатегориос',
 'category-media-header' => '«$1» категориысь файлъёс',
 'category-empty' => "''Та категориын али бамъёс но, файлъёс но ӧвӧл.''",
-'hidden-categories' => '{{PLURAL:$1|Ватэм категория|Ватэм категориос}}',
+'hidden-categories' => '{{PLURAL:$1|1=Ватэм категория|Ватэм категориос}}',
 'hidden-category-category' => 'Ватэм категориос',
-'category-subcat-count' => '{{PLURAL:$2|Со категориын одӥг подкатегория гинэ.|Возьматэмын $1 подкатегория $2 пӧлысь.}}',
+'category-subcat-count' => '{{PLURAL:$2|1=Со категориын одӥг подкатегория гинэ.|Возьматэмын $1 подкатегория $2 пӧлысь.}}',
 'category-subcat-count-limited' => 'Со категориын $1 подкатегория.',
-'category-article-count' => '{{PLURAL:$2|Со категориын одӥг бам гинэ.|Возьматэмын $1 бам $2 пӧлысь.}}',
+'category-article-count' => '{{PLURAL:$2|1=Со категориын одӥг бам гинэ.|Возьматэмын $1 бам $2 пӧлысь.}}',
 'category-article-count-limited' => 'Со категориын $1 бам.',
-'category-file-count' => '{{PLURAL:$2|Со категориын одӥг файл гинэ.|Возьматэмын $1 файл $2 пӧлысь.}}',
+'category-file-count' => '{{PLURAL:$2|1=Со категориын одӥг файл гинэ.|Возьматэмын $1 файл $2 пӧлысь.}}',
 'category-file-count-limited' => 'Со категориын $1 файл.',
 'listingcontinuesabbrev' => 'азьлань',
 'index-category' => 'Индексировать кароно бамъёс',
@@ -155,7 +153,7 @@ $messages = array(
 'about' => 'Та сярысь',
 'article' => 'Статья',
 'mypage' => 'Ас бам',
-'mytalk' => 'викиавтор сярысь вераськон',
+'mytalk' => 'Ð\92икиавтор сярысь вераськон',
 'anontalk' => 'Со IP-адрес сярысь вераськон',
 'navigation' => 'Навигация',
 
@@ -191,7 +189,7 @@ $messages = array(
 'protect' => 'Утьыны',
 'talkpagelinktext' => 'Вераськон',
 'talk' => 'Вераськон',
-'toolbox' => 'Ð\98нÑ\81Ñ\82Ñ\80Ñ\83менÑ\82Ñ\8aÑ\91Ñ\81',
+'toolbox' => 'ТӥÑ\80лÑ\8bк',
 'jumptonavigation' => 'навигация',
 'jumptosearch' => 'утчан',
 
@@ -238,12 +236,12 @@ $messages = array(
 или '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} создать страницу с таким названием]'''</span>.",
 
 # Revision deletion
-'revdelete-radio-set' => 'Ð\91ен',
-'revdelete-radio-unset' => 'Ӧвӧл',
+'revdelete-radio-set' => 'Ð\92аÑ\82Ñ\8dм',
+'revdelete-radio-unset' => 'Адӟымон',
 
 # Search results
 'searchresults' => 'Шедьтэмын',
-'search-result-size' => '$1 кыл({{PLURAL:$2|1 word|$2 words}})',
+'search-result-size' => '$1 кыл({{PLURAL:$2|1=1 word|$2 words}})',
 
 # Preferences page
 'preferences' => 'настройкаос',
index 5900d22..2f0b195 100644 (file)
@@ -14,6 +14,7 @@
  * @author Reedy
  * @author Sahran
  * @author Tel'et
+ * @author بىلگە
  */
 
 $rtl = true;
@@ -84,7 +85,6 @@ $messages = array(
 'tog-ccmeonemails' => 'مەن باشقىلارغا يوللىغان ئېلخەتنى ئۆزەمگىمۇ بىر نۇسخا يوللا',
 'tog-diffonly' => 'تۈزىتىلگەن ئىككى نەشرىنىڭ پەرقىنى سېلىشتۇرغاندا بەت مەزمۇنىنى كۆرسەتمە',
 'tog-showhiddencats' => 'يوشۇرۇن تۈرلەرنى كۆرسەت',
-'tog-noconvertlink' => 'ئۇلانما ماۋزۇ ئالماشتۇرۇشنى چەكلە',
 'tog-norollbackdiff' => 'قايتۇرۇشنى ئىجرا قىلغاندىن كېيىن پەرقنى كۆرسەتمە',
 'tog-useeditwarning' => 'بىر تەھرىرلىگەن بەتنى ساقلىماي چېكىنگەندە مېنى ئەسكەرت',
 'tog-prefershttps' => 'تىزىمغا كىرگەندە دائىم بىخەتەر ئۇلىنىشنى ئىشلەت',
@@ -212,7 +212,6 @@ $messages = array(
 'vector-action-protect' => 'قوغدا',
 'vector-action-undelete' => 'ئەسلىگە قايتۇر',
 'vector-action-unprotect' => 'قوغداش ئۆزگەرت',
-'vector-simplesearch-preference' => 'ئاددىي ئىزدەش ئىستون ئاچ (پەقەت ۋېكتور قېلىپ)',
 'vector-view-create' => 'قۇر',
 'vector-view-edit' => 'تەھرىر',
 'vector-view-history' => 'تارىخ كۆرسەت',
@@ -518,8 +517,6 @@ $2',
 'gotaccountlink' => 'تىزىمغا كىر',
 'userlogin-resetlink' => 'تىزىمغا كىرىش تەپسىلاتىنى ئۇنۇتتىڭىز؟',
 'userlogin-resetpassword-link' => 'پارولىڭىزنى ئۇنتۇپ قالدىڭىزمۇ؟',
-'helplogin-url' => 'Help:تىزىمغا كىرىش',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|تىزىمغا كىرىش ئۈچۈن ياردەم]]',
 'userlogin-loggedin' => 'سىز ئاللىقاچان {{GENDER:$1|$1}} ھالىتىدە تىزىمغا كىرىپ بولدىڭىز. تۆۋەندىكىلەرنى تولدۇرۇپ باشقا ئىشلەتكۈچى ھالىتىدە تىزىمغا كىرىڭ.',
 'userlogin-createanother' => 'باشقا ھېسابات قۇرىمەن',
 'createacct-join' => 'تۆۋەنگە ئۇچۇرلىرىڭىزنى كىرگۈزۈڭ.',
@@ -643,6 +640,8 @@ $1 ساقلاپ، ئاندىن قايتا سىناڭ.',
 'retypenew' => 'يېڭى پارولنى قايتا كىرگۈزۈڭ:',
 'resetpass_submit' => 'پارول بەلگىلەپ تىزىمغا كىرىڭ',
 'changepassword-success' => 'پارولىڭىز ئوڭۇشلۇق ئۆزگەرتىلدى!',
+'changepassword-throttled' => 'سىز بۇ ھېساباتتا تىزىمغا كىرىشنى كۆپ قېتىم سىنىدىڭىز.
+$1 ساقلاپ، ئاندىن قايتا سىناڭ.',
 'resetpass_forbidden' => 'پارولنى ئۆزگەرتەلمىدى',
 'resetpass-no-info' => 'سىز تىزىمغا كىرگەندىن كېيىن بىۋاسىتە بۇ بەتكە كىرىشىڭىز لازىم.',
 'resetpass-submit-loggedin' => 'پارولنى ئۆزگەرتىش',
@@ -698,9 +697,14 @@ $2
 'changeemail-password' => '{{SITENAME}} دىكى پارولىڭىز:',
 'changeemail-submit' => 'ئېلخەت ئۆزگەرت',
 'changeemail-cancel' => 'ۋاز كەچ',
+'changeemail-throttled' => 'سىز بۇ ھېساباتتا تىزىمغا كىرىشنى كۆپ قېتىم سىنىدىڭىز.
+$1 ساقلاپ، ئاندىن قايتا سىناڭ.',
 
 # Special:ResetTokens
 'resettokens' => 'ئاچقۇچلۇق بەلگىلەرنى قايتا بېكىتمەك',
+'resettokens-text' => 'سىز بۇ يەردە سىزنىڭ ھىساۋاتىڭىزگە مۇناسۋەتلىك شەخسى ئۇچۇر مەخپىيەتلىكىنى قايتا كۆرەلەيسىز.
+
+ئۇ ئۇچۇرلار ھەمبەھرلىنىپ كەتسە ياكى باشقىلار ئىشلىتۋالغان بولسا، ئۇ ئۇچۇرلارنى ئەسلىگە قايتۇرۇڭ.',
 'resettokens-no-tokens' => 'قايتا بېكىتىدىغان ھېچقانداق ئاچقۇچلۇق بەلگە يوق.',
 'resettokens-legend' => 'ئاچقۇچلۇق بەلگىلەرنى قايتا بېكىتمەك',
 'resettokens-tokens' => 'ئاچقۇچلۇق بەلگىلەر:',
@@ -923,6 +927,8 @@ $2
 'content-not-allowed-here' => '[[$2]] بەتتە "$1" مەزمۇنغا يول قويۇلمايدۇ',
 'editwarning-warning' => 'بەتتىن ئايرىلغاندا بەلكىم بارلىق تەھرىرلىگىنىڭىز بېكار بولۇپ كېتىشى مۇمكىن.
 ئ‍ەگەر تىزىمغا كىرسىڭىز، مايىللىق بېتىڭىزنىڭ «{{int:prefs-editing}}» بۆلىكىدە، بۇ ئەسكەرتمىنى ئىناۋەتسىز قىلالايسىز.',
+'editpage-notsupportedcontentformat-title' => 'مەزمۇن ئەندىزىسىنى قوللىمىدى.',
+'editpage-notsupportedcontentformat-text' => 'مەزمۇن قېلىپى $2 نى مەزمۇن ئەندىزىسى $1 نى قوللىمىدى.',
 
 # Content models
 'content-model-wikitext' => 'ۋىكىتېكىست',
@@ -957,6 +963,7 @@ $2
 تۆۋەندىكى سېلىشتۇرۇشنى تەكشۈرۈپ بۇنىڭ ئۆزىڭىزنىڭ ئويى ئىكەنلىكىنى دەلىللەڭ، ئاندىن تۆۋەندىكى ئۆزگەرتىشنى ساقلاپ تەھرىرلەشتىن يېنىۋىلىڭ.',
 'undo-failure' => 'ئوتتۇرىلىقتا بىردەك بولماسلىق سەۋەبىدىن بۇ تەھرىردىن يېنىۋالغىلى بولمايدۇ.',
 'undo-norev' => 'تۈزىتىلگەن نەشرى مەۋجۇد ئەمەس ياكى ئۆچۈرۈلگەنلىكتىن، بۇ تەھرىردىن يېنىۋالغىلى بولمايدۇ.',
+'undo-nochange' => 'بۇ قېتىملىق تەھرىرلەش ۋاز كېچىلدى.',
 'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|مۇنازىرە]]) ئېلىپ بارغان تۈزىتىش $1',
 'undo-summary-username-hidden' => 'بىر يوشۇرۇن ئىشلەتكۈچى تەرىپىدىن يېنىۋېلىندى $1.',
 
@@ -1039,12 +1046,10 @@ $3 تەمىنلىگەن چەكلەش سەۋەبى ''$2''",
 'revdelete-show-file-submit' => 'ھەئە',
 'revdelete-selected' => "'''[[:$1]] نىڭ {{PLURAL:$2|تاللانغان تۈزىتىش نەشرى|تاللانغان تۈزىتىش نەشرى}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|تاللانغان خاتىرە تۈرى|تاللانغان خاتىرە تۈرى}}:'''",
-'revdelete-text' => "'''ئۆچۈرۈلگەن تۈزىتىلگەن نەشرى ۋە ھادىسە بەت تارىخىدا كۆرۈنىدۇ ئەمما ئۇنىڭ مەزمۇنىنى كۆپچىلىك زىيارەت قىلالمايدۇ.'''
-{{SITENAME}}  دىكى باشقا باشقۇرغۇچىلار يوشۇرۇلغان مەزمۇننى يەنىلا كۆرەلەيدۇ ھەمدە بېكەت خىزمەتچىلىرى قوشۇمچە چەكلىمە ئېلىپ بارمىغانلا بولسا ئوخشاش ئارايۈزدە ئۆچۈرۈلگەننى ئەسلىگە كەلتۈرەلەيدۇ،",
 'revdelete-confirm' => 'بۇ مەشغۇلاتنى ئىجرا قىلسىڭىز ئاقىۋىتىنى چۈشىنىدىغانلىقىڭىزنى ھەمدە بۇ پروگراممىنىڭ [[{{MediaWiki:Policy-url}}|سىياسەت]]كە ئۇيغۇن كېلىدىغانلىقىنى جەزملەڭ.',
 'revdelete-suppress-text' => "'''پەقەت''' تۆۋەندىكى ئەھۋاللار يۈز بەرگەندىلا زىيارەت چەكلىنىدۇ:
 * نامۇۋاپىق شەخسىي ئۇچۇر
-*: ''home ئولتۇرۇشلۇق ئادرېس، تېلېفون نومۇر، كىملىك نومۇرى قاتارلىق.''",
+*: ''ئولتۇرۇشلۇق ئادرېس، تېلېفون نومۇر، كىملىك نومۇرى قاتارلىق.''",
 'revdelete-legend' => 'كۆرۈنۈشچانلىق چەكلىمە تەڭشىكى',
 'revdelete-hide-text' => 'تۈزىتىلگەن تېكىست',
 'revdelete-hide-image' => 'ھۆججەت مەزمۇنىنى يوشۇر',
@@ -1133,6 +1138,7 @@ $1",
 'compareselectedversions' => 'تاللانغان نەشرىنى سېلىشتۇر',
 'showhideselectedversions' => 'تاللانغان تۈزىتىلگەن نەشرىنى كۆرسەت/يوشۇر',
 'editundo' => 'يېنىۋال',
+'diff-empty' => '(پەرقى يوق)',
 'diff-multi-manyusers' => '( $2  دىن كۆپ{{PLURAL:$2|ئىشلەتكۈچى|ئىشلەتكۈچى}} نىڭ {{PLURAL:$1|تۈزىتىلگەن نەشرى|$1 تۈزىتىلگەن نەشرى}}  كۆرسىتىلمىدى)',
 'difference-missing-revision' => '{{PLURAL:$2|نەشر|$2 نەشىر لەر}} نىڭ ($1) پەرق سېلىشتۇرما {{PLURAL:$2}} تېپىلمىدى.
 
@@ -1169,6 +1175,7 @@ $1",
 'search-result-score' => 'باغلىنىشچانلىق: $1%',
 'search-redirect' => '($1 قايتا نىشانلا)',
 'search-section' => '(ئابزاس $1)',
+'search-file-match' => '(ھۆججەت مەزمۇنى ماس كەلگەن)',
 'search-suggest' => 'ئىزدىمەكچى بولغىنىڭىز: $1',
 'search-interwiki-caption' => 'ھەمشىرە قۇرۇلۇشلار',
 'search-interwiki-default' => '$1 نەتىجە:',
@@ -1309,6 +1316,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'prefs-displaywatchlist' => 'كۆرسىتىش تاللانما',
 'prefs-tokenwatchlist' => 'ئاچقۇچ',
 'prefs-diffs' => 'پەرقلەر',
+'prefs-help-prefershttps' => 'بۇ سەپلەك، سىز قايتا تىزىمغا كىرگەندە ئىشلەيدۇ.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'ئېلخەت ئادرېسى ئىناۋەتلىك',
@@ -3949,8 +3957,15 @@ MediaWiki ئىشلىتىش مەقسىتىنى ئاساس قىلىپ ئېلان 
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|سېكۇنت}}',
 
 # Special:ExpandTemplates
+'expand_templates_input' => 'مەزمۇن كىرگۈزۈڭ:',
 'expand_templates_output' => 'نەتىجە',
+'expand_templates_xml_output' => 'XML چىقار',
+'expand_templates_html_output' => 'ئەسلى HTML چىقار',
 'expand_templates_ok' => 'جەزملە',
+'expand_templates_remove_comments' => 'ئىزاھاتنى ئۆچۈر',
+'expand_templates_remove_nowiki' => 'نەتىجىسىدە <nowiki> خەتكۈچ كۆرۈنمىسۇن',
+'expand_templates_generate_xml' => 'XML گىرامماتىكىسىنى كۆرسەت',
+'expand_templates_generate_rawhtml' => 'ئەسلى HTML نى كۆرسەت',
 'expand_templates_preview' => 'ئالدىن كۆزەت',
 
 );
index d2ce5ff..ff6b82f 100644 (file)
@@ -49,6 +49,7 @@
  * @author Yuriy Apostol
  * @author Ата
  * @author Дар'я Козлова
+ * @author Максим Підліснюк
  * @author Тест
  */
 
@@ -403,7 +404,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Надсилати мені копії листів, які я надсилаю іншим користувачам',
 'tog-diffonly' => 'Не показувати вміст сторінки під різницею версій',
 'tog-showhiddencats' => 'Показувати приховані категорії',
-'tog-noconvertlink' => 'Вимкнути конвертацію назви посилання',
 'tog-norollbackdiff' => 'Не показувати різницю версій після виконання відкоту',
 'tog-useeditwarning' => 'Попереджати мене, якщо я залишаю сторінку редагування з незбереженими змінами',
 'tog-prefershttps' => "Завжди використовувати безпечне з'єднання при вході у систему",
@@ -531,7 +531,6 @@ $messages = array(
 'vector-action-protect' => 'Захистити',
 'vector-action-undelete' => 'Відновити',
 'vector-action-unprotect' => 'Зміна захисту',
-'vector-simplesearch-preference' => 'Увімкнути спрощене поле пошуку (лише для оформлення "Векторне")',
 'vector-view-create' => 'Створити',
 'vector-view-edit' => 'Редагувати',
 'vector-view-history' => 'Переглянути історію',
@@ -815,8 +814,6 @@ $1',
 'gotaccountlink' => 'Увійдіть',
 'userlogin-resetlink' => 'Забули дані, потрібні для входу?',
 'userlogin-resetpassword-link' => 'Забули пароль?',
-'helplogin-url' => 'Help:Вхід до системи',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Допомога в реєстрації]]',
 'userlogin-loggedin' => 'Ви вже увійшли як {{GENDER:$1|$1}}.
 Використайте нижче форму для входу як інший користувач.',
 'userlogin-createanother' => 'Створити інший обліковий запис',
@@ -915,6 +912,10 @@ $1',
 'suspicious-userlogout' => 'Ваш запит на завершення сеанса відхилений, оскільки він схожий на запит, відправлений зіпсованим веб-оглядачем або кешуючим проксі-сервером.',
 'createacct-another-realname-tip' => "Справжнє ім'я є необов'язковим.
 Якщо ви вирішите надати його, то воно буде використовуватися для присвоєння користувачу авторства до його роботи.",
+'pt-login' => 'Увійти',
+'pt-login-button' => 'Вхід',
+'pt-createaccount' => 'Створити обліковий запис',
+'pt-userlogout' => 'Вийти',
 
 # Email sending
 'php-mail-error-unknown' => 'Невідома помилка в PHP-функції mail()',
@@ -923,7 +924,7 @@ $1',
 
 # Change password dialog
 'changepassword' => 'Змінити пароль',
-'resetpass_announce' => 'Ð\92и Ð²Ð²Ñ\96йÑ\88ли, Ð²Ð¸ÐºÐ¾Ñ\80иÑ\81Ñ\82овÑ\83Ñ\8eÑ\87и Ñ\82имÑ\87аÑ\81овий Ð¿Ð°Ñ\80олÑ\8c, Ñ\8fкий Ð¾Ñ\82Ñ\80имали ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\8e Ð¿Ð¾Ñ\88Ñ\82оÑ\8e. Ð\94лÑ\8f Ð·Ð°Ð²ÐµÑ\80Ñ\88еннÑ\8f Ð²Ñ\85одÑ\83 Ð´Ð¾ Ñ\81иÑ\81Ñ\82еми, Ð²Ð¸ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ\96 Ð²ÐºÐ°Ð·Ð°Ñ\82и Ð½Ð¾Ð²Ð¸Ð¹ Ð¿Ð°Ñ\80олÑ\8c Ñ\82Ñ\83Ñ\82:',
+'resetpass_announce' => 'Ð\94лÑ\8f Ð·Ð°Ð²ÐµÑ\80Ñ\88еннÑ\8f Ð²Ñ\85одÑ\83 Ð²Ð¸ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ\96 Ð²Ñ\81Ñ\82ановиÑ\82и Ð½Ð¾Ð²Ð¸Ð¹ Ð¿Ð°Ñ\80олÑ\8c.',
 'resetpass_text' => '<!-- Додавайте текст сюди -->',
 'resetpass_header' => 'Змінити пароль облікового запису',
 'oldpassword' => 'Старий пароль:',
@@ -939,8 +940,16 @@ $1',
 'resetpass-submit-cancel' => 'Скасувати',
 'resetpass-wrong-oldpass' => 'Неправильний тимчасовий або поточний пароль.
 Можливо, ви вже успішно змінили пароль або зробили запит на новий тимчасовий пароль.',
+'resetpass-recycled' => 'Змініть свій пароль на щось інше, ніж ваш поточний пароль.',
+'resetpass-temp-emailed' => 'Ви ввійшли, використовуючи тимчасовий пароль, який отримали електронною поштою. 
+Для завершення входу в систему необхідно задати новий пароль:',
 'resetpass-temp-password' => 'Тимчасовий пароль:',
 'resetpass-abort-generic' => 'Зміну пароля було перервано розширенням.',
+'resetpass-expired' => 'Термін дії вашого пароля закінчився. Будь ласка, встановіть новий пароль для входу в систему.',
+'resetpass-expired-soft' => 'Термін дії вашого пароля закінчився, і тепер він повинен бути змінений. Будь ласка, виберіть новий пароль або натисніть "{{int:resetpass-submit-cancel}}", щоб змінити його пізніше.',
+'resetpass-validity-soft' => 'Ваш пароль є некоректним: $1
+
+Будь ласка, виберіть новий пароль або натисніть «{{int:resetpass-submit-cancel}}», щоб скинути його пізніше.',
 
 # Special:PasswordReset
 'passwordreset' => 'Скинути пароль',
@@ -1248,6 +1257,7 @@ $2
 Будь ласка, перевірте порівняння нижче, щоб впевнитись, що це те, що ви хочете зробити, а потім збережіть зміни, щоб закінчити скасування редагування.',
 'undo-failure' => 'Неможливо скасувати редагування через несумісність проміжних змін.',
 'undo-norev' => 'Редагування не може бути скасоване, бо воно не існує або було вилучене.',
+'undo-nochange' => 'Схоже, редагування уже було скасовано.',
 'undo-summary' => 'Скасування редагування № $1 користувача [[Special:Contributions/$2|$2]] ([[User talk:$2|обговорення]])',
 'undo-summary-username-hidden' => 'Скасувати перевірку $1 прихованого користувача',
 
@@ -1332,9 +1342,10 @@ $3 зазначив таку причину: ''$2''",
 'revdelete-show-file-submit' => 'Так',
 'revdelete-selected' => "'''{{PLURAL:$2|1=Обрана версія|Обрані версії}} сторінки [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|1=Обраний запис|Обрані записи}} журналу:'''",
-'revdelete-text' => "'''Вилучені версії сторінок і подій будуть відображатися в історії сторінки та журналах, але частина їх вмісту не буде доступною звичайним користувачам.'''
-Доступ до прихованого змісту матимуть адміністратори проекту {{SITENAME}}, які зможуть відновити його за допомогою цього ж інтерфейсу,
-крім випадків, коли були встановлені додаткові обмеження власниками сайту.",
+'revdelete-text-text' => 'Видалені версії будуть як і раніше видно в історії сторінки, але їх частини вмісту будуть доступні для учасників.',
+'revdelete-text-file' => 'Видалені версії файлу будуть як і раніше видно в історії сторінки, але їх частини вмісту будуть доступні для учасників.',
+'logdelete-text' => 'Видалені події в журналі будуть як і раніше видно в журналах, але частини їх вмісту будуть доступні для учасників.',
+'revdelete-text-others' => 'Інші адміністратори на {{grammar:genitive|{{SITENAME}}}} як і раніше буде мати можливість доступу до прихованого вмісту і зможуть відновити його знову через цей же інтерфейс, якщо не встановлено додаткові обмеження.',
 'revdelete-confirm' => 'Будь ласка, підтвердить, що ви справді бажаєте це здійснити, усвідомлюєте наслідки та робите це згідно з [[{{MediaWiki:Policy-url}}|правилами]].',
 'revdelete-suppress-text' => "Приховування може відбуватися '''лише''' в таких випадках:
 * Потенційно наклепницькі відомості
@@ -1470,13 +1481,14 @@ $1",
 'search-file-match' => '(збігається із вмістом файлу)',
 'search-suggest' => 'Можливо, ви мали на увазі: $1',
 'search-interwiki-caption' => 'Братні проекти',
-'search-interwiki-default' => '$1 результати:',
+'search-interwiki-default' => 'Результати із $1:',
 'search-interwiki-more' => '(більше)',
 'search-relatedarticle' => "Пов'язаний",
 'searcheverything-enable' => 'Пошук у всіх просторах назв',
 'searchrelated' => "пов'язаний",
 'searchall' => 'усі',
 'showingresults' => "Нижче {{PLURAL:$1|показане|показані|показані}} '''$1''' {{PLURAL:$1|результат|результати|результатів}}, починаючи з №&nbsp;'''$2'''",
+'showingresultsinrange' => 'Нижче показано до {{PLURAL:$1|<strong>1</strong> результата|<strong>$1</strong> результатів|<strong>$1</strong> результати}} у діапазоні від #<strong>$2</strong> до #<strong>$3</strong>.',
 'showingresultsnum' => 'Нижче показано <strong>$3</strong> {{PLURAL:$3|результат|результати|результатів}}, починаючи з №&nbsp;<strong>$2</strong>.',
 'showingresultsheader' => "{{PLURAL:$5|1=Результат '''$1''' з '''$3'''|Результати '''$1 — $2''' з '''$3'''}} для '''$4'''",
 'search-nonefound' => 'Не знайдено результатів, що відповідають запиту.',
@@ -1801,11 +1813,23 @@ $1",
 'rcnotefrom' => 'Нижче відображені редагування з <strong>$2</strong> (до <strong>$1</strong>).',
 'rclistfrom' => 'Показати редагування починаючи з $1.',
 'rcshowhideminor' => '$1 незначні редагування',
+'rcshowhideminor-show' => 'показати',
+'rcshowhideminor-hide' => 'приховати',
 'rcshowhidebots' => '$1 ботів',
+'rcshowhidebots-show' => 'показати',
+'rcshowhidebots-hide' => 'приховати',
 'rcshowhideliu' => '$1 зареєстрованих користувачів',
+'rcshowhideliu-show' => 'показати',
+'rcshowhideliu-hide' => 'приховати',
 'rcshowhideanons' => '$1 анонімів',
+'rcshowhideanons-show' => 'показати',
+'rcshowhideanons-hide' => 'приховати',
 'rcshowhidepatr' => '$1 перевірені',
+'rcshowhidepatr-show' => 'показати',
+'rcshowhidepatr-hide' => 'приховати',
 'rcshowhidemine' => '$1 мої редагування',
+'rcshowhidemine-show' => 'показати',
+'rcshowhidemine-hide' => 'приховати',
 'rclinks' => 'Показати останні $1 редагувань за $2 днів<br />$3',
 'diff' => 'різн.',
 'hist' => 'історія',
@@ -1941,6 +1965,8 @@ $1",
 'uploaddisabledtext' => 'Можливість завантаження файлів відключена.',
 'php-uploaddisabledtext' => 'Завантаження файлів вимкнене у налаштуваннях PHP. Будь ласка, перевірте значення file_uploads.',
 'uploadscripted' => 'Файл містить HTML-код або скрипт, який може неправильно обробитися браузером.',
+'uploadscriptednamespace' => 'Цей SVG-файл містить недопустимий простір імен "$1"',
+'uploadinvalidxml' => 'Не вдалося проаналізувати XML у завантаженому файлі.',
 'uploadvirus' => 'Файл містить вірус! Див. $1',
 'uploadjava' => 'Файл є ZIP-архівом, що містить .class-файл Java.
 Завантаження Java-файлів не дозволене, бо вони можуть використовуватися для обходу системи безпеки.',
@@ -2310,10 +2336,20 @@ $1',
 'deadendpagestext' => 'Наступні сторінки не містять посилань на інші сторінки цієї вікі.',
 'protectedpages' => 'Захищені сторінки',
 'protectedpages-indef' => 'Тільки безстроково захищені',
+'protectedpages-summary' => 'На цій сторінці перераховані сторінки, які на цей момент захищені. Список назв, які захищені від створення див. [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Тільки каскадний захист',
 'protectedpages-noredirect' => 'Сховати перенаправлення',
 'protectedpagesempty' => 'Зараз нема захищених сторінок із зазначеними параметрами',
+'protectedpages-timestamp' => 'Часова мітка',
+'protectedpages-page' => 'Сторінка',
+'protectedpages-expiry' => 'Закінчується',
+'protectedpages-performer' => 'Захист користувача',
+'protectedpages-params' => 'Параметри захисту',
+'protectedpages-reason' => 'Причина',
+'protectedpages-unknown-timestamp' => 'Невідомо',
+'protectedpages-unknown-performer' => 'Невідомий користувач',
 'protectedtitles' => 'Заборонені назви',
+'protectedtitles-summary' => 'На цій сторінці перераховані назви, які захищені від створення. Для перегляду списку сторінок, які на цей момент захищені, див. [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Зараз нема захищених назв із зазначеними параметрами.',
 'listusers' => 'Список користувачів',
 'listusers-editsonly' => 'Показати лише користувачів, які зробили принаймні одне редагування',
@@ -2592,7 +2628,7 @@ $UNWATCHURL
 'delete-warning-toobig' => 'У цієї сторінки дуже довга історія редагувань, більше $1 {{PLURAL:$1|версії|версій|версій}}.
 Її вилучення може призвести до порушень у роботі бази даних сайту {{SITENAME}};
 дійте обережно.',
-'deleting-backlinks-warning' => "'''Попередження:''' інші сторінки посилаються або містять сторінку, яку ви маєте намір видалити.",
+'deleting-backlinks-warning' => "'''Попередження:'''  [[Special:WhatLinksHere/{{FULLPAGENAME}}|інші сторінки]] посилаються або містять сторінку, яку ви маєте намір видалити.",
 
 # Rollback
 'rollback' => 'Відкинути редагування',
@@ -2763,8 +2799,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Доступ з цієї IP-адреси зараз заблокований.
 Далі наведено останній запис з журналу блокувань:',
 'sp-contributions-search' => 'Пошук внеску',
+'sp-contributions-suppresslog' => 'вилучений внесок користувача',
 'sp-contributions-username' => "IP-адреса або ім'я користувача:",
 'sp-contributions-toponly' => 'Показувати тільки редагування, що є останніми версіями',
+'sp-contributions-newonly' => 'Показувати тільки редагування, які є створеннями сторінок',
 'sp-contributions-submit' => 'Знайти',
 
 # What links here
@@ -3074,6 +3112,7 @@ $2',
 'thumbnail_image-type' => 'Тип зображення не підтримується',
 'thumbnail_gd-library' => 'Неповна конфігурація бібліотеки GD, відсутня функція $1',
 'thumbnail_image-missing' => 'Очевидно, відсутній файл $1',
+'thumbnail_image-failure-limit' => 'Там було дуже багато недавніх невдалих спроб ($1 або більше) для візуалізації цього ескізу. Будь ласка, спробуйте ще раз пізніше.',
 
 # Special:Import
 'import' => 'Імпорт статей',
@@ -4470,7 +4509,4 @@ MediaWiki поширюється в надії, що вона буде кори
 'expand_templates_generate_rawhtml' => 'Показати сирий HTML',
 'expand_templates_preview' => 'Попередній перегляд',
 
-# Unknown messages
-'createaccount-hook-aborted' => ' $1',
-'uploadinvalidxml' => 'Не вдалося проаналізувати XML у завантаженому файлі.',
 );
index 02728c1..d5672ab 100644 (file)
@@ -109,6 +109,23 @@ $magicWords = array(
 $linkTrail = '/^([a-zʻʼ“»]+)(.*)$/sDu';
 $linkPrefixCharset = 'a-zA-Z\\x80-\\xffʻʼ«„';
 
+/**
+ * Formats need to be overwritten. Others are inherited automatically
+ */
+$dateFormats = array(
+       'dmy date' => 'j-F Y',
+       'dmy both' => 'H:i, j-F Y',
+       'dmy pretty' => 'j-F'
+);
+
+/**
+ * Transform table for decimal point '.' and thousands separator ','
+ */
+$separatorTransformTable = array(
+       '.' => ',',
+       ',' => "\xc2\xa0", # nbsp
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Havolalarning tagiga chizish:',
@@ -118,9 +135,9 @@ $messages = array(
 'tog-extendwatchlist' => 'Kengaytirilgan kuzatuv roʻyxati: faqat oxirgi paytdagi emas, barcha oʻzgarishlar koʻrsatiladi',
 'tog-usenewrc' => 'Yangi oʻzgarishlar va kuzatuv roʻyxatidagi sahifalarni guruhlarga boʻlish (JavaScript orqali)',
 'tog-numberheadings' => 'Sarlavhalarni avtomatik raqamlash',
-'tog-showtoolbar' => 'Tahrirlash asboblari joylashgan yoʻlakchani koʻrsatish (JavaScript orqali)',
-'tog-editondblclick' => 'Sichqoncha tugmasini ikki marta bosish orqali tahrirlashni boshlash',
-'tog-editsectiononrightclick' => 'Boʻlim sarlavhasiga sichqonchaning oʻng tugmasi bilan bosib tahrirlashni boshlash',
+'tog-showtoolbar' => 'Yuqoridagi tahrirlash asboblarini koʻrsatish',
+'tog-editondblclick' => 'Sichqonchaning chap tugmasini ikki marta bosib tahrirlashni boshlash',
+'tog-editsectiononrightclick' => 'Boʻlim sarlavhasiga sichqonchaning oʻng tugmasini bosib tahrirlashni boshlash',
 'tog-rememberpassword' => 'Hisob ma’lumotlarim ushbu brauzerda eslab qolinsin (ko‘pi bilan $1 kunga)',
 'tog-watchcreations' => 'Men yaratgan sahifalar va yuklagan fayllar kuzatuv roʻyxatimga qoʻshilsin',
 'tog-watchdefault' => 'Men tahrirlagan sahifa va fayllar kuzatuv roʻyxatimga qoʻshilsin',
@@ -137,7 +154,7 @@ $messages = array(
 'tog-oldsig' => 'Joriy imzo:',
 'tog-fancysig' => 'Imzoni viki-belgi qilib koʻrsatish (avtomatik ishoratsiz)',
 'tog-uselivepreview' => 'Tez koʻrib chiqish (JavaScript orqali) (sinovda)',
-'tog-forceeditsummary' => 'Qisqa tavsif oynasi toʻldirilmagani haqida ogohlantirish koʻrsatilsin',
+'tog-forceeditsummary' => 'Qisqa tavsif oynasi toʻldirilmagani haqida ogohlantirish koʻrsatish',
 'tog-watchlisthideown' => 'Oʻz tahrirlarim kuzatuv roʻyxatimda koʻrsatilmasin',
 'tog-watchlisthidebots' => 'Botlar qilgan tahrirlar kuzatuv roʻyxatimda koʻrsatilmasin',
 'tog-watchlisthideminor' => 'Kichik tahrirlar kuzatuv roʻyxatimda koʻrsatilmasin',
@@ -147,9 +164,8 @@ $messages = array(
 'tog-ccmeonemails' => 'Boshqa ishtirokchilarga yozgan xatimning nusxasi oʻzimga yuborilsin',
 'tog-diffonly' => 'Versiyalar taqqoslanayotganda, pastda sahifa matni koʻrsatilmasin',
 'tog-showhiddencats' => 'Yashirin turkumlarni koʻrsatish',
-'tog-noconvertlink' => 'Sarlavhani oʻzgartirish havolasini oʻchirib qoʻyish',
 'tog-norollbackdiff' => 'Tahrir qaytarilganda, versiyalar taqqosi koʻrsatilmasin',
-'tog-useeditwarning' => 'Kiritgan oʻzgarishlarimni saqlamay sahifadan chiqib ketayotganim haqida ogohlantirilsin',
+'tog-useeditwarning' => 'Oʻzgarishlarni saqlamay sahifadan chiqib ketayotganim haqida ogohlantirish',
 'tog-prefershttps' => 'Doim himoyalangan holda kirish',
 
 'underline-always' => 'Har doim',
@@ -190,18 +206,18 @@ $messages = array(
 'october' => 'oktabr',
 'november' => 'noyabr',
 'december' => 'dekabr',
-'january-gen' => 'yanvarning',
-'february-gen' => 'fevralning',
-'march-gen' => 'martning',
-'april-gen' => 'aprelning',
-'may-gen' => 'mayning',
-'june-gen' => 'iyunning',
-'july-gen' => 'iyulning',
-'august-gen' => 'avgustning',
-'september-gen' => 'sentabrning',
-'october-gen' => 'oktabrning',
-'november-gen' => 'noyabrning',
-'december-gen' => 'dekabrning',
+'january-gen' => 'yanvar',
+'february-gen' => 'fevral',
+'march-gen' => 'mart',
+'april-gen' => 'aprel',
+'may-gen' => 'may',
+'june-gen' => 'iyun',
+'july-gen' => 'iyul',
+'august-gen' => 'avgust',
+'september-gen' => 'sentabr',
+'october-gen' => 'oktabr',
+'november-gen' => 'noyabr',
+'december-gen' => 'dekabr',
 'jan' => 'yan',
 'feb' => 'fev',
 'mar' => 'mar',
@@ -214,6 +230,17 @@ $messages = array(
 'oct' => 'okt',
 'nov' => 'noy',
 'dec' => 'dek',
+'january-date' => 'Yanvar $1',
+'february-date' => 'Fevral $1',
+'march-date' => 'Mart $1',
+'april-date' => 'Aprel $1',
+'june-date' => 'Iyun $1',
+'july-date' => 'Iyul $1',
+'august-date' => 'Avgust $1',
+'september-date' => 'Sentabr $1',
+'october-date' => 'Oktabr $1',
+'november-date' => 'Noyabr $1',
+'december-date' => 'Dekabr $1',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Turkum}}',
@@ -262,7 +289,6 @@ $messages = array(
 'vector-action-protect' => 'Himoyalash',
 'vector-action-undelete' => 'Tiklash',
 'vector-action-unprotect' => 'Himoyalashni oʻzgartirish',
-'vector-simplesearch-preference' => 'Soddalashtirilgan qidiruv qatorini koʻrsat (faqat «Vektorli» tashqi koʻrinish uchun)',
 'vector-view-create' => 'Yaratish',
 'vector-view-edit' => 'Tahrirlash',
 'vector-view-history' => 'Tarix',
@@ -294,7 +320,8 @@ $messages = array(
 'create-this-page' => 'Ushbu sahifani yaratish',
 'delete' => 'O‘chirish',
 'deletethispage' => 'Ushbu sahifani o‘chirish',
-'undelete_short' => '$1 ta tahrirni tiklash',
+'undeletethispage' => 'Ushbu sahifani tiklash',
+'undelete_short' => '{{PLURAL:$1|bitta tahrir|$1 ta tahrir}}ni tiklash',
 'viewdeleted_short' => '$1 ta oʻchirilgan tahrirni koʻrish',
 'protect' => 'Himoyalash',
 'protect_change' => 'Oʻzgartirish',
@@ -340,7 +367,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => '{{SITENAME}} haqida',
 'aboutpage' => 'Project:Haqida',
-'copyright' => 'Keltirilgan maʼlumotlar $1 orqali tarqatilmoqda.',
+'copyright' => 'Keltirilgan maʼlumotlar $1 orqali tarqatilmoqda (agar aksinchasi koʻrsatilmagan boʻlsa).',
 'copyrightpage' => '{{ns:project}}:Mualliflik huquqlari',
 'currentevents' => 'Joriy hodisalar',
 'currentevents-url' => 'Project:Joriy hodisalar',
@@ -481,17 +508,19 @@ Brauzeringiz keshini tozalamaguningizgacha ayrim sahifalar tizimga kirganingizde
 'gotaccountlink' => 'Kirish',
 'userlogin-resetlink' => 'Kirish maʻlumotlaringiz esdan chiqdimi?',
 'userlogin-resetpassword-link' => 'Unutib qoʻydingizmi?',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Kirish uchun yordam]]',
 'userlogin-loggedin' => 'Siz {{GENDER:$1|$1}} nomi bilan kirgansiz.
 Boshqa hisob raqami orqali kirish uchun quyidagi formadan foydalaning.',
 'userlogin-createanother' => 'Boshqa hisob yaratish',
 'createacct-join' => 'Maʼlumotlaringizni quyiga yozing',
 'createacct-another-join' => 'Yangi hisob yozuvi maʼlumotlarini quyida koʻrsating.',
+'createacct-emailrequired' => 'Elektron pochta manzilingiz',
 'createacct-emailoptional' => 'Elektron pochta manzili (majburiy emas)',
-'createacct-email-ph' => 'Elektron pochtangiz manzilini kiriting',
+'createacct-email-ph' => 'Elektron pochta manzilingizni kiriting',
 'createacct-another-email-ph' => 'Elektron pochta manzilini kiriting',
 'createaccountmail' => 'Tasodifan tanlab beriladigan vaqtinchalik maxfiy soʻzdan foydalanish (elektron pochta manzilingizga joʻnatiladi)',
 'createaccountreason' => 'Sabab:',
+'createacct-reason' => 'Sabab',
+'createacct-reason-ph' => 'Nimaga yana boshqa hisob yaratyapsiz',
 'createacct-captcha' => 'Xavfsizlik tekshiruvi',
 'createacct-imgcaptcha-ph' => 'Yuqoridagi yozuvni bu yerga kiriting',
 'createacct-submit' => 'Hisob yaratish',
@@ -513,12 +542,15 @@ Ism yozilishini tekshirib koʻring.',
 'wrongpasswordempty' => 'Maxfiy soʻz koʻrsatilmagan. Qaytadan urinib koʻring.',
 'mailmypassword' => 'Maxfiy soʻzni yangilash',
 'passwordremindertitle' => "{{SITENAME}} uchun vaqtinchalik yangi maxfiy so'z",
-'emailauthenticated' => 'Sizning elektron pochta manzilingiz $2, $3 da tasdiqlangan.',
-'emailconfirmlink' => 'Sizning elektron pochta manzilingizni tasdiqlash',
+'emailauthenticated' => 'Elektron pochta manzilingiz $2, $3 da tasdiqlangan.',
+'emailconfirmlink' => 'Elektron pochta manzilingizni tasdiqlash',
 'emaildisabled' => 'Bu sayt elektron pochta xatlarini yubora olmaydi.',
 'accountcreated' => 'Hisob yozuvi yaratildi',
 'login-abort-generic' => 'Tizimga kirishga mufavvaqiyatsiz urinish',
 'loginlanguagelabel' => 'Til: $1',
+'pt-login' => 'Kirish',
+'pt-createaccount' => 'Hisob yaratish',
+'pt-userlogout' => 'Chiqish',
 
 # Change password dialog
 'changepassword' => 'Maxfiy soʻzni oʻzgartirish',
@@ -539,7 +571,7 @@ Ism yozilishini tekshirib koʻring.',
 'passwordreset-legend' => 'Maxfiy soʻzni yangilash',
 'passwordreset-username' => 'Foydalanuvchi nomi:',
 'passwordreset-domain' => 'Domen:',
-'passwordreset-email' => 'Elektron pochta manzili:',
+'passwordreset-email' => 'Elektron pochta manzilingiz:',
 'passwordreset-emailelement' => "Foydalanuvchi ismi: $1
 Vaqtinchalik maxfiy so'z: $2",
 
@@ -751,7 +783,7 @@ Bu yerda: '''({{int:cur}})''' = hozirgi koʻrinish bilan farqi, '''({{int:last}}
 'shown-title' => 'Sahifada $1 ta natija koʻrsatish',
 'viewprevnext' => 'Koʻrish ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => "'''Ushbu vikida \"[[:\$1]]\" nomli sahifa mavjud.'''",
-'searchmenu-new' => '<strong>\'\'\'Ushbu vikida "[[:$1]]" sahifasini yarat!</strong> {{PLURAL:$2|0=|Shuningdek qidiruvingiz orqali topilgan sahifani qarang.|Shuningdek topilgan qidiruv natijalarini qarang.}}',
+'searchmenu-new' => '<strong>\'\'\'Ushbu vikida "[[:$1]]" sahifasini yarating!</strong> {{PLURAL:$2|0=|Shuningdek qidiruvingiz orqali topilgan sahifani qarang.|Shuningdek topilgan qidiruv natijalarini qarang.}}',
 'searchprofile-articles' => 'Maqolalar',
 'searchprofile-project' => 'Yordam va loyiha sahifalari',
 'searchprofile-images' => 'Multimedia',
@@ -952,10 +984,10 @@ Agar keltirsangiz, undan sahifa kim tomonidan tahrirlanganini koʻrsatish uchun
 'recentchanges-label-minor' => 'Bu tahrir kichik deb belgilangan',
 'recentchanges-label-bot' => 'Bu tahrirni bot bajargan',
 'recentchanges-label-unpatrolled' => 'Bu tahrir hali tekshirilmagan',
-'recentchanges-label-plusminus' => 'vazni qanchaga oʻzgargani (bayt)',
+'recentchanges-label-plusminus' => 'Sahifa vazni qanchaga oʻzgargani (bayt)',
 'recentchanges-legend-heading' => "'''Izoh:'''",
 'recentchanges-legend-newpage' => '([[Special:NewPages|alohida roʻyxat]])',
-'rcnotefrom' => "Quyida <strong>$2</strong> dan (<strong>$1</strong> gacha) bo'lgan o'zgarishlar keltirilgan.",
+'rcnotefrom' => 'Quyida <strong>$2</strong>dan boshlab boʻlgan oʻzgarishlar keltirilgan (<strong>$1</strong>dan koʻp boʻlmaganlari koʻrsatildi).',
 'rclistfrom' => '$1 dan boshlab yangi oʻzgarishlarni koʻrsat.',
 'rcshowhideminor' => 'Kichik tahrirlarni $1',
 'rcshowhidebots' => 'Botlarni $1',
@@ -1027,6 +1059,8 @@ Quyida bu sahifaga oid yoʻqotish va koʻchirish qaydlari keltirilgan:',
 'listfiles_size' => 'Oʻlchami',
 'listfiles_description' => 'Taʼrif',
 'listfiles_count' => 'Versiyalar',
+'listfiles-latestversion-yes' => 'Ha',
+'listfiles-latestversion-no' => 'Yoʻq',
 
 # File description page
 'file-anchor-link' => 'Fayl',
@@ -1070,6 +1104,9 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 # Random page
 'randompage' => 'Tasodifiy sahifa',
 
+# Random page in category
+'randomincategory-selectcategory-submit' => 'Oʻtish',
+
 # Statistics
 'statistics' => 'Statistika',
 'statistics-header-pages' => 'Sahifalar statistikasi',
@@ -1085,6 +1122,9 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 'statistics-users-active' => 'Faol foydalanuvchilar',
 'statistics-users-active-desc' => 'Oxirgi $1 kun ichida kamida bitta amal qilgan foydalanuvchilar',
 
+'pageswithprop-prop' => 'Xossa nomi:',
+'pageswithprop-submit' => 'Oʻtish',
+
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bayt}}',
 'ncategories' => '$1 {{PLURAL:$1|turkum|turkumlar}}',
@@ -1116,13 +1156,13 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 
 # Special:Log
 'specialloguserlabel' => 'Ijrochi:',
-'speciallogtitlelabel' => 'Moʻljal (foydalanuvchi yoki sahifa nomi):',
+'speciallogtitlelabel' => 'Moʻljal:',
 'log' => 'Qaydlar',
 'all-logs-page' => 'Barcha ochiq qaydlar',
-'alllogstext' => "{{SITENAME}}dagi barcha jurnallar roʻyxati.
+'alllogstext' => '{{SITENAME}}dagi barcha jurnallar roʻyxati.
 Natijalarni jurnal nomi, foydalanuvchi nomi (harflar katta-kichikligi inobatga olinadi) yoki sahifa nomi boʻyicha saralashingiz mumkin.
-* Biror foydalanuvchi ''amalga oshirgan qaydni'', uning foydalanuvchi nomini \"Ijrochi\" oynasiga kiritib qidirish mumkin.
-* Biror foydalanuvchi yoki sahifaga ''nisbatan'' amalga oshirilgan qaydni, ularning nomini \"Moʻljal\" oynasiga kiritib qidirish mumkin.",
+* Biror foydalanuvchi amalga oshirgan qaydni topish uchun uning foydalanuvchi nomini „Ijrochi“ oynasiga kiriting.
+* Biror foydalanuvchi yoki sahifaga nisbatan amalga oshirilgan qaydni topish uchun ulardan birining nomini „Moʻljal“ oynasiga kiriting.',
 'logempty' => 'Talabga mos yozuvlar mavjud emas.',
 'log-title-wildcard' => 'Shu matndan boshlanuvchi sarlavhalarni izlash',
 
index 5323ad4..61c216e 100644 (file)
@@ -321,7 +321,6 @@ $messages = array(
 'vector-action-protect' => 'Protezi',
 'vector-action-undelete' => 'Recupera',
 'vector-action-unprotect' => 'Canbia ła protesion',
-'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 ła storia',
@@ -596,8 +595,6 @@ Nó desmentegarte de personałixare łe [[Special:Preferences|prefarense de {{SI
 'gotaccountlink' => 'Entra',
 'userlogin-resetlink' => "Desmentegà i to dati d'aceso?",
 'userlogin-resetpassword-link' => "Te gheto desmentegà ła paroła d'ordine?",
-'helplogin-url' => 'Help:Login',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ajuto col login]]',
 'createacct-join' => 'Meti le to informassion qua soto.',
 'createacct-emailrequired' => 'Indirisso e-mail',
 'createacct-emailoptional' => 'Indiriso e-mail (opsionałe)',
@@ -1057,8 +1054,6 @@ Te połi uncora vixuałixare sto confronto; controłare el [{{fullurl:{{#Special
 'revdelete-show-file-submit' => 'Sì',
 'revdelete-selected' => "'''{{PLURAL:$2|Version selezionà|Versioni selezionà}} de [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Evento del registro selezionà|Eventi del registro selezionè}}:'''",
-'revdelete-text' => "'''Le revision e le azion scancelàe le restarà visibili ne la cronologia de la pagina, ma parte del testo contegnùo no'l sarà visìbile al publico.'''
-I altri aministradori de {{SITENAME}} i podarà vardar istesso i contenuti sconti e ripristinarli atraverso questa stessa interfacia, se no xe stà inpostà altre limitazion.",
 'revdelete-confirm' => 'Par piaser, conferma che vol far sta azion, che te capissi le so conseguense, e che te sì drio operar secondo le [[{{MediaWiki:Policy-url}}|linee guida]].',
 'revdelete-suppress-text' => "La sopression la se dovarìa doparar '''solo''' in sti casi qua:
 
index f1eb0a7..1d2cd7a 100644 (file)
@@ -249,7 +249,6 @@ $messages = array(
 'vector-action-protect' => 'Kaita',
 'vector-action-undelete' => 'Pördutada',
 'vector-action-unprotect' => 'Toižetada kaičend',
-'vector-simplesearch-preference' => 'Kävutada levitadud ecmižabud (vaiše Vektor-nägun täht)',
 'vector-view-create' => 'Säta',
 'vector-view-edit' => 'Redaktiruida',
 'vector-view-history' => 'Kacta istorii',
@@ -867,8 +866,6 @@ Detalid voidas olda [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'revdelete-show-file-submit' => 'Ka',
 'revdelete-selected' => "'''{{PLURAL:$2|Valitud versii|Valitud versijad}} lehtpolišpäi [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Valitud kirjutez aigkirjas|Valitud kirjutesed aigkirjas}}:'''",
-'revdelete-text' => "'''Čutud versijad ozutadas lehtpolen istorijas da aigkirjoiš, no järgeližed lugijad ei voiškakoi nähta niiden südäimišton erasid paloid.'''
-Administratorad voiškatas lugeda peittud südäimištod da endištada sidä necen interfeisan kal't siloi, konz ei ole ližakaidendusid.",
 'revdelete-legend' => 'Säta kaidendused',
 'revdelete-hide-text' => 'Redakcijan tekst',
 'revdelete-hide-image' => 'Peitta failan südäiolend',
index e7c94c5..bd46583 100644 (file)
@@ -18,6 +18,7 @@
  * @author Neoneurone
  * @author Nguyễn Thanh Quang
  * @author Prenn
+ * @author Skye Darcy
  * @author Thaisk
  * @author Thanhtai2009
  * @author Tmct
@@ -374,7 +375,6 @@ $messages = array(
 'tog-ccmeonemails' => 'Gửi bản sao cho tôi khi gửi thư điện tử cho người khác',
 'tog-diffonly' => 'Không hiển thị nội dung trang dưới phần so sánh phiên bản',
 'tog-showhiddencats' => 'Hiển thị thể loại ẩn',
-'tog-noconvertlink' => 'Tắt liên kết chuyển đổi tựa đề',
 'tog-norollbackdiff' => 'Không so sánh sau khi lùi sửa',
 'tog-useeditwarning' => 'Cảnh báo khi tôi thoát trang sửa đổi mà chưa lưu trang',
 'tog-prefershttps' => 'Luôn kết nối an toàn khi đăng nhập',
@@ -501,7 +501,6 @@ $messages = array(
 'vector-action-protect' => 'Khóa',
 'vector-action-undelete' => 'Phục hồi',
 'vector-action-unprotect' => 'Đổi mức khóa',
-'vector-simplesearch-preference' => 'Hộp tìm kiếm đơn giản (cần bề ngoài Vectơ)',
 'vector-view-create' => 'Tạo',
 'vector-view-edit' => 'Sửa đổi',
 'vector-view-history' => 'Xem lịch sử',
@@ -782,8 +781,6 @@ Hãy nhớ thay đổi [[Special:Preferences|tùy chọn cá nhân {{SITENAME}}]
 'gotaccountlink' => 'Đăng nhập',
 'userlogin-resetlink' => 'Quên mất thông tin đăng nhập?',
 'userlogin-resetpassword-link' => 'Quên mật khẩu?',
-'helplogin-url' => 'Help:Đăng nhập',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Trợ giúp đăng nhập]]',
 'userlogin-loggedin' => 'Bạn đã đăng nhập với tên {{GENDER:$1}}$1.
 Hãy sử dụng biểu mẫu ở dưới để đăng nhập với tài khoản người dùng khác.',
 'userlogin-createanother' => 'Mở thêm tài khoản',
@@ -865,6 +862,10 @@ Xin hãy bỏ qua thông điệp này nếu tài khoản này không phải do b
 'createacct-another-realname-tip' => 'Tên thật là không bắt buộc. 
 
 Nếu bạn đồng ý cung cấp, nó sẽ dùng để ghi nhận công lao của bạn.',
+'pt-login' => 'Đăng nhập',
+'pt-login-button' => 'Đăng nhập',
+'pt-createaccount' => 'Mở tài khoản',
+'pt-userlogout' => 'Đăng xuất',
 
 # Email sending
 'php-mail-error-unknown' => 'Lỗi không rõ trong hàm PHP mail()',
@@ -873,7 +874,7 @@ Nếu bạn đồng ý cung cấp, nó sẽ dùng để ghi nhận công lao c
 
 # Change password dialog
 'changepassword' => 'Đổi mật khẩu',
-'resetpass_announce' => 'Bạn đã đăng nhập bằng mật khẩu tạm gửi qua thư điện tử. Để hoàn tất việc đăng nhập, bạn phải tạo lại mật khẩu mới tại đây:',
+'resetpass_announce' => 'Để hoàn tất việc đăng nhập, bạn phải tạo lại mật khẩu mới.',
 'resetpass_text' => '<!-- Nhập văn bản vào đây -->',
 'resetpass_header' => 'Đổi mật khẩu cho tài khoản',
 'oldpassword' => 'Mật khẩu cũ:',
@@ -888,8 +889,12 @@ Nếu bạn đồng ý cung cấp, nó sẽ dùng để ghi nhận công lao c
 'resetpass-submit-cancel' => 'Hủy bỏ',
 'resetpass-wrong-oldpass' => 'Mật khẩu tạm hoặc mật khẩu hiện thời không hợp lệ.
 Có thể bạn đã thay đổi thành công mật khẩu của mình hoặc đã yêu cầu cung cấp một mật khẩu tạm mới.',
+'resetpass-recycled' => 'Xin vui lòng chọn một mật khẩu khác với mật khẩu hiện tại.',
+'resetpass-temp-emailed' => 'Bạn đã đăng nhập bằng mật khẩu tạm gửi qua thư điện tử. Để hoàn tất việc đăng nhập, bạn phải tạo lại mật khẩu mới tại đây:',
 'resetpass-temp-password' => 'Mật khẩu tạm:',
 'resetpass-abort-generic' => 'Một phần mở rộng đã hủy bỏ tác vụ thay đổi mật khẩu.',
+'resetpass-expired' => 'Mật khẩu của bạn đã hết hạn. Xin vui lòng tạo lại mật khẩu mới để đăng nhập.',
+'resetpass-expired-soft' => 'Mật khẩu của bạn đã hết hạn và cần được đặt lại. Xin vui lòng chọn một mật khẩu mới lúc bây giờ hoặc bấm “{{int:resetpass-submit-cancel}}” để đặt lại sau.',
 
 # Special:PasswordReset
 'passwordreset' => 'Tái tạo mật khẩu',
@@ -1277,8 +1282,10 @@ hoặc bạn đang tìm cách ẩn phiên bản hiện tại.',
 'revdelete-show-file-submit' => 'Có',
 'revdelete-selected' => "'''{{PLURAL:$2|Phiên bản|Các phiên bản}} được chọn của [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Nhật trình đã chọn|Các nhật trình đã chọn}}:'''",
-'revdelete-text' => "'''Các phiên bản và sự kiện bị xóa sẽ vẫn xuất hiện trong lịch sử trang và nhật trình, nhưng mọi người sẽ không xem được một số phần của các nội dung đó.'''
-Các quản lý khác ở {{SITENAME}} vẫn có thể truy nhập vào nội dung ẩn và phục hồi lại bằng cách dùng giao diện này, trừ trường hợp thiết lập thêm một số hạn chế.",
+'revdelete-text-text' => 'Các phiên bản đã xóa sẽ tiếp tục xuất hiện trong lịch sử trang, nhưng một số phần của nội dung sẽ bị ẩn khỏi công chúng.',
+'revdelete-text-file' => 'Các phiên bản tập tin đã xóa sẽ tiếp tục xuất hiện trong lịch sử tập tin, nhưng một số phần của nội dung sẽ bị ẩn khỏi công chúng.',
+'logdelete-text' => 'Các sự kiện đã xóa sẽ tiếp tục xuất hiện trong nhật trình, nhưng một số phần của nội dung sẽ bị ẩn khỏi công chúng.',
+'revdelete-text-others' => 'Các bảo quản viên khác trên {{SITENAME}} sẽ vẫn có quyền truy cập nội dung ẩn và có thể phục hồi nó qua cùng giao diện này, trừ khi có hạn chế bổ sung.',
 'revdelete-confirm' => 'Xin hãy xác nhận rằng bạn có ý định xóa, nhận biết tầm quan trọng của việc này, và việc xóa tuân theo [[{{MediaWiki:Policy-url}}|quy định]].',
 'revdelete-suppress-text' => "Việc ẩn giấu '''chỉ''' nên dùng trong các trường hợp sau:
 * Thông tin có thể phỉ báng
@@ -1413,15 +1420,16 @@ Xem chi tiết trong [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'search-file-match' => '(khớp nội dung tập tin)',
 'search-suggest' => 'Có phải bạn muốn tìm: $1',
 'search-interwiki-caption' => 'Các dự án liên quan',
-'search-interwiki-default' => '$1 kết quả:',
+'search-interwiki-default' => 'Kết quả từ $1:',
 'search-interwiki-more' => '(thêm)',
 'search-relatedarticle' => 'Liên quan',
 'searcheverything-enable' => 'Tìm trong tất cả không gian tên',
 'searchrelated' => 'có liên quan',
 'searchall' => 'tất cả',
 'showingresults' => "Dưới đây là {{PLURAL:$1|'''1'''|'''$1'''}} kết quả bắt đầu từ #'''$2'''.",
+'showingresultsinrange' => 'Dưới đây là cho tới <strong>$1</strong> kết quả từ #<strong>$2</strong> đến #<strong>$3</strong>.',
 'showingresultsnum' => "Dưới đây là {{PLURAL:$3|'''1'''|'''$3'''}} kết quả bắt đầu từ #'''$2'''.",
-'showingresultsheader' => "{{PLURAL:$5|Kết quả thứ '''$1''' trong tổng số '''$3''' kết quả|Kết quả từ '''$1 - $2''' trong tổng số '''$3''' kết quả}} cho '''$4'''",
+'showingresultsheader' => "{{PLURAL:$5|Kết quả thứ '''$1''' trong tổng số '''$3''' kết quả|Các kết quả '''$1–$2''' trong tổng số '''$3''' kết quả}} cho '''$4'''",
 'search-nonefound' => 'Không có kết quả nào khớp với câu truy vấn.',
 'powersearch-legend' => 'Tìm kiếm nâng cao',
 'powersearch-ns' => 'Tìm trong không gian tên:',
@@ -1738,14 +1746,26 @@ Nếu bạn đồng ý cung cấp, nó sẽ dùng để ghi nhận công lao c
 'recentchanges-legend-heading' => "'''Chú giải:'''",
 'recentchanges-legend-newpage' => '(xem thêm [[Special:NewPages|danh sách các trang mới]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "Thay đổi từ '''$2''' (hiển thị tối đa '''$1''' thay đổi).",
+'rcnotefrom' => 'Thay đổi từ <strong>$2</strong> (hiển thị tối đa <strong>$1</strong> thay đổi).',
 'rclistfrom' => 'Hiển thị các thay đổi từ $1.',
 'rcshowhideminor' => '$1 sửa đổi nhỏ',
+'rcshowhideminor-show' => 'Hiện',
+'rcshowhideminor-hide' => 'Ẩn',
 'rcshowhidebots' => '$1 sửa đổi bot',
+'rcshowhidebots-show' => 'Hiện',
+'rcshowhidebots-hide' => 'Ẩn',
 'rcshowhideliu' => '$1 thành viên đăng ký',
+'rcshowhideliu-show' => 'Hiện',
+'rcshowhideliu-hide' => 'Ẩn',
 'rcshowhideanons' => '$1 sửa đổi vô danh',
+'rcshowhideanons-show' => 'Hiện',
+'rcshowhideanons-hide' => 'Ẩn',
 'rcshowhidepatr' => '$1 sửa đổi đã tuần tra',
+'rcshowhidepatr-show' => 'Hiện',
+'rcshowhidepatr-hide' => 'Ẩn',
 'rcshowhidemine' => '$1 sửa đổi của tôi',
+'rcshowhidemine-show' => 'Hiện',
+'rcshowhidemine-hide' => 'Ẩn',
 'rclinks' => 'Xem $1 sửa đổi gần đây nhất trong $2 ngày qua; $3.',
 'diff' => 'khác',
 'hist' => 'sử',
@@ -1872,6 +1892,8 @@ Bạn nên xin một người có quyền xem dữ liệu tập tin bị đàn 
 'uploaddisabledtext' => 'Chức năng tải tập tin đã bị tắt.',
 'php-uploaddisabledtext' => 'Việc tải tập tin trong PHP đã bị tắt. Xin hãy kiểm tra lại thiết lập file_uploads.',
 'uploadscripted' => 'Tập tin này có chứa mã HTML hoặc kịch bản có thể khiến trình duyệt web thông dịch sai.',
+'uploadscriptednamespace' => 'Tập tin SVG này chứa không gian tên “$1” không được cho phép',
+'uploadinvalidxml' => 'Không thể phân tích mã XML trong tập tin tải lên.',
 'uploadvirus' => 'Tập tin có virút! Chi tiết: $1',
 'uploadjava' => 'Tập tin ZIP này chứa một tập tin Java .class.
 Không được phép tải lên các tập tin Java, bởi vì chúng có thể vượt qua các hạn chế bảo mật.',
@@ -2241,10 +2263,20 @@ Các mục <del>bị gạch bỏ</del> là các trang đã được sửa.',
 'deadendpagestext' => 'Các trang này không có liên kết đến trang khác trong {{SITENAME}}.',
 'protectedpages' => 'Trang bị khóa',
 'protectedpages-indef' => 'Chỉ hiển thị khóa vô hạn',
+'protectedpages-summary' => 'Danh sách này liệt kê các trang hiện đang bị khóa. Xem danh sách các tên trang bị khóa không được tạo ra tại [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Chỉ hiển thị khóa theo tầng',
 'protectedpages-noredirect' => 'Ẩn trang đổi hướng',
 'protectedpagesempty' => 'Hiện không có trang nào bị khóa với các thông số này.',
+'protectedpages-timestamp' => 'Dấu thời gian',
+'protectedpages-page' => 'Trang',
+'protectedpages-expiry' => 'Hết hạn',
+'protectedpages-performer' => 'Người dùng khóa',
+'protectedpages-params' => 'Chế độ khóa',
+'protectedpages-reason' => 'Lý do',
+'protectedpages-unknown-timestamp' => 'Không rõ',
+'protectedpages-unknown-performer' => 'Người dùng không rõ',
 'protectedtitles' => 'Tên trang bị khóa',
+'protectedtitles-summary' => 'Danh sách này liệt kê các tên trang bị khóa không được tạo ra. Xem danh sách các trang tồn tại bị khóa tại [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Không có tựa trang nào bị khóa với các thông số như vậy.',
 'listusers' => 'Danh sách thành viên',
 'listusers-editsonly' => 'Chỉ hiện thành viên có tham gia sửa đổi',
@@ -2516,7 +2548,7 @@ Việc xóa các trang như vậy bị hạn chế để ngăn ngừa phá hoạ
 'delete-warning-toobig' => 'Trang này có lịch sử sửa đổi lớn, đến hơn {{PLURAL:$1|lần|lần}} sửa đổi.
 Việc xóa các trang có thể làm tổn hại đến hoạt động của cơ sở dữ liệu {{SITENAME}};
 hãy cẩn trọng khi thực hiện.',
-'deleting-backlinks-warning' => "'''Cảnh báo:''' Có trang khác liên kết đến hoặc nhúng trang mà bạn sắp xóa.",
+'deleting-backlinks-warning' => "'''Cảnh báo:''' Có [[Special:WhatLinksHere/{{FULLPAGENAME}}|trang khác]] liên kết đến hoặc nhúng trang mà bạn sắp xóa.",
 
 # Rollback
 'rollback' => 'Lùi tất cả sửa đổi',
@@ -2689,8 +2721,10 @@ $1',
 'sp-contributions-blocked-notice' => 'Thành viên này hiện đang bị cấm sửa đổi. Nhật trình cấm gần nhất được ghi ở dưới để tiện theo dõi:',
 'sp-contributions-blocked-notice-anon' => 'Địa chỉ IP này đang bị cấm. Hãy tham khảo mục mới nhất trong nhật trình cấm IP này:',
 'sp-contributions-search' => 'Tìm kiếm đóng góp',
+'sp-contributions-suppresslog' => 'đóng góp đã bị đàn áp của thành viên',
 'sp-contributions-username' => 'Địa chỉ IP hay tên thành viên:',
 'sp-contributions-toponly' => 'Chỉ hiện các phiên bản mới nhất',
+'sp-contributions-newonly' => 'Chỉ hiện các sửa đổi tạo trang',
 'sp-contributions-submit' => 'Tìm kiếm',
 
 # What links here
@@ -2793,7 +2827,7 @@ Xem lại những lần cấm tại [[Special:BlockList|danh sách cấm]].',
 'change-blocklink' => 'đổi mức cấm',
 'contribslink' => 'đóng góp',
 'emaillink' => 'gửi thư điện tử',
-'autoblocker' => 'Bạn bị tự động cấm vì địa chỉ IP của bạn vừa rồi đã được “[[User:$1|$1]]” sử dụng. Lý do đưa ra cho việc cấm $1 là: ”$2”',
+'autoblocker' => 'Bạn bị tự động cấm vì địa chỉ IP của bạn vừa rồi đã được “[[User:$1|$1]]” sử dụng. Lý do đưa ra cho việc cấm $1 là ”$2”',
 'blocklogpage' => 'Nhật trình cấm',
 'blocklog-showlog' => 'Thành viên này trước đây đã bị cấm. Nhật trình cấm được ghi ra ở đây để tiện theo dõi:',
 'blocklog-showsuppresslog' => 'Thành viên trước đây đã từng bị cấm và ẩn đi. Nhật trình ẩn được ghi dưới đây để tiện theo dõi:',
@@ -2996,6 +3030,7 @@ $2',
 'thumbnail_image-type' => 'Không hỗ trợ kiểu hình này',
 'thumbnail_gd-library' => 'Cấu hình thư viện GD chưa hoàn thành: thiếu hàm $1',
 'thumbnail_image-missing' => 'Hình như tập tin mất tích: $1',
+'thumbnail_image-failure-limit' => 'Việc tạo ra hình thu nhỏ này đã bị thất bại nhiều lần quá gần đây ($1 lần trở lên). Xin vui lòng thử lại sau.',
 
 # Special:Import
 'import' => 'Nhập các trang',
@@ -3143,6 +3178,7 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'print.css' => '/* Mã CSS tại đây sẽ ảnh hưởng đến bản để in */',
 'noscript.css' => '/* Mã CSS tại đây sẽ ảnh hưởng đến những người dùng tắt JavaScript */',
 'group-autoconfirmed.css' => '/* Mã CSS tại đây sẽ chỉ ảnh hưởng đến các thành viên tự động xác nhận */',
+'group-user.css' => '/* Mã CSS tại đây sẽ chỉ ảnh hưởng đến các thành viên có tài khoản */',
 'group-bot.css' => '/* Mã CSS tại đây sẽ chỉ ảnh hưởng đến các bot */',
 'group-sysop.css' => '/* Mã CSS tại đây sẽ chỉ ảnh hưởng đến các bảo quản viên */',
 'group-bureaucrat.css' => '/* Mã CSS tại đây sẽ chỉ ảnh hưởng đến các hành chính viên */',
@@ -3154,6 +3190,7 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'modern.js' => '/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng bề ngoài Hiện đại */',
 'vector.js' => '/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng bề ngoài Vectơ */',
 'group-autoconfirmed.js' => '/* Mã JavaScript tại đây sẽ chỉ được tải cho các thành viên tự động xác nhận */',
+'group-user.js' => '/* Mã JavaScript tại đây sẽ chỉ được tải cho các thành viên có tài khoản */',
 'group-bot.js' => '/* Mã JavaScript tại đây sẽ chỉ được tải cho các bot */',
 'group-sysop.js' => '/* Mã JavaScript tại đây sẽ chỉ được tải cho các bảo quản viên */',
 'group-bureaucrat.js' => '/* Mã JavaScript tại đây sẽ chỉ được tải cho các hành chính viên */',
@@ -3311,10 +3348,10 @@ Nếu thực thi nó máy tính của bạn có thể bị tiếm quyền.",
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'video-dims' => '$1, $2×$3',
-'seconds-abbrev' => '$1s',
-'minutes-abbrev' => '$1m',
-'hours-abbrev' => '$1h',
-'days-abbrev' => '$1d',
+'seconds-abbrev' => '$1 s',
+'minutes-abbrev' => '$1 min',
+'hours-abbrev' => '$1 h',
+'days-abbrev' => '$1 d',
 'seconds' => '$1 giây',
 'minutes' => '$1 phút',
 'hours' => '$1 giờ',
@@ -4335,7 +4372,4 @@ Nếu không thì bạn có thể điền biểu mẫu đơn giản ở dưới.
 'expand_templates_generate_rawhtml' => 'Hiển thị HTML thô',
 'expand_templates_preview' => 'Xem trước',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
-'uploadinvalidxml' => 'Không thể phân tích mã XML trong tập tin tải lên.',
 );
index 1b16414..6383f62 100644 (file)
@@ -512,8 +512,6 @@ Küpälolös, das pads anik ba nog pojenons äsva no esenunädol oli, jüs uklin
 'gotaccountlink' => 'Nunädolös obi',
 'userlogin-resetlink' => 'Eglömol-li nünis kala olik?',
 'userlogin-resetpassword-link' => 'Dönuvälön letavödi olik',
-'helplogin-url' => 'Help:Nunädön',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Yuf ad nunädön]]',
 'createacct-join' => 'Penolös nünis olik dono.',
 'createacct-emailrequired' => 'Ladet leäktronik',
 'createaccountmail' => 'me pot leäktronik',
@@ -860,8 +858,6 @@ Kanol logön oni; pats ba binons in [{{fullurl:{{#Special:Log}}/delete|page={{FU
 'revdelete-show-file-submit' => 'Si',
 'revdelete-selected' => "'''{{PLURAL:$2|Fomam|Fomams}} pevalöl pada: [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Lisedajenot|Lisedajenots}} pevälöl:'''",
-'revdelete-text' => "'''Revids pemoüköl nog opubons in padajenotem, ab ninäd (vödem) onsik no gebidons publüge.'''
-Ninäd peklänedöl at binon ye nog lügolovik guvanes votik vüka: {{SITENAME}}, kels kanons nog votükön ninädi peklänedöl u geükön padi medü fometem at (üf miedöfükams u neletians votik no lonöfons).",
 'revdelete-legend' => 'Levälön miedükamis logova:',
 'revdelete-hide-text' => 'Klänedön vödemi revida',
 'revdelete-hide-image' => 'Klänedön ragivaninädi',
index 12d010e..ca8b2fa 100644 (file)
@@ -166,8 +166,8 @@ $messages = array(
 'disclaimerpage' => 'Project:Ceeltümin vassamizõõ',
 'edithelp' => 'Muutuzavid',
 'helppage' => 'Help:Sisälto',
-'mainpage' => 'Esicülci',
-'mainpage-description' => 'Esicülci',
+'mainpage' => 'Päälehto',
+'mainpage-description' => 'Päälehto',
 'portal' => 'Foorum',
 'portal-url' => 'Project:Foorum',
 'privacy' => 'Salaštrahuituz',
@@ -787,7 +787,7 @@ Että või muuttaa cülcia, mutta võittõ kattsoa sene lähtekoodi.',
 'tooltip-search-go' => 'Mee cüľľelee, kummall on vakurat sesama nimi (kui eloz on)',
 'tooltip-search-fulltext' => 'Etsi cülciltä sitä tekstiä',
 'tooltip-p-logo' => 'Mee esicüľľelee',
-'tooltip-n-mainpage' => 'Mee esicüľľelee',
+'tooltip-n-mainpage' => 'Mee päälehole',
 'tooltip-n-mainpage-description' => 'Mee esicüľľelee',
 'tooltip-n-portal' => 'Juttua projektissa: Mitä tüü võittõ tehä, kuza levvette mitä',
 'tooltip-n-currentevents' => 'Lugõ soobšeńńad nücüizess kõhtoiss',
index 92c7e57..edd5295 100644 (file)
@@ -205,7 +205,6 @@ $messages = array(
 'vector-action-protect' => 'Kaidsaq',
 'vector-action-undelete' => 'Tiiq tagasi',
 'vector-action-unprotect' => 'Muudaq kaidsõt',
-'vector-simplesearch-preference' => 'Lupaq lihtsüstedüt otsmisripa (õnnõ Vektor-kujondusõn)',
 'vector-view-create' => 'Luuq',
 'vector-view-edit' => 'Toimõndaq',
 'vector-view-history' => 'Näütäq aoluku',
@@ -742,7 +741,6 @@ Lisateedüst või ollaq [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAME
 'revdelete-nooldid-text' => 'Sa olõ-i valinuq kujjo vai kujjõ.',
 'revdelete-selected' => "'''{{PLURAL:$2|Valit kujo|Validuq kujoq}} lehele [[:$1]]'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Valit muutminõ|Validuq muutmisõq}}:'''",
-'revdelete-text' => "'''Kistudõduq kujoq ommaq olõman lehe aoluun, a näide sissu saa-i avaligult nätäq.''' Seo viki tõõsõq kõrraldajaq saavaq taad käkitüt teksti lukõq ja taa tagasi avaligult nättäväs tetäq, ku olõ-i säet muid piirdmiisi.",
 'revdelete-legend' => 'Nättävüse piirdmiseq',
 'revdelete-hide-text' => 'Käkiq kujo sisu',
 'revdelete-hide-image' => 'Käkiq teedüstü sissu',
index 124b0d4..d5b55c4 100644 (file)
@@ -226,7 +226,6 @@ $messages = array(
 'vector-action-protect' => 'Protedjî',
 'vector-action-undelete' => 'Rapexhî',
 'vector-action-unprotect' => "Candjî l' protedjaedje",
-'vector-simplesearch-preference' => 'Permete les amidreyès sudjestions di cweraedje (pea «Vector» seulmint)',
 'vector-view-create' => 'Ahiver',
 'vector-view-edit' => 'Candjî',
 'vector-view-history' => "Vey l' istwere",
@@ -745,9 +744,6 @@ Vos l' poloz co vey; i gn a des detays sol [{{fullurl:{{#Special:Log}}/suppress|
 'revdelete-show-file-submit' => 'Oyi',
 'revdelete-selected' => "'''{{PLURAL:$2|Tchoezeye modêye|Tchoezeyès modêyes}} di [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Evenmint tchoezi|Evenmints tchoezis}} ezès djournås:'''",
-'revdelete-text' => "'''Les disfacés avenmints et modêyes vont continouwer d' aparexhe dins l' pådje di l' istwere, mins leu contnou n' serè nén veyåve do publik.'''
-
-Les ôtes manaedjeus so {{SITENAME}} pôront todi vey li contnou catchî eyet l' rapexhî åd triviè di cisse minme eterface ci, a moens k' ene restriccion di pus ni soeye metowe en alaedje pås mwaisses-manaedjeus del waibe.",
 'revdelete-legend' => 'Defini des restriccions sol voeyaedje',
 'revdelete-hide-text' => "Catchî l' tecse del modêye",
 'revdelete-hide-comment' => "Catchî l' comintaire di candjmint",
index 6b7f1e8..8f8ce7b 100644 (file)
@@ -226,7 +226,6 @@ $messages = array(
 'vector-action-protect' => 'Panalipda',
 'vector-action-undelete' => 'Igbalik an ginpara',
 'vector-action-unprotect' => 'Liwani an panalipod',
-'vector-simplesearch-preference' => 'Ginpadulot an yinano nga pamiling nga kahon (Panit vector la)',
 'vector-view-create' => 'Himo-a',
 'vector-view-edit' => 'Igliwat',
 'vector-view-history' => 'Kitaa an kaagi',
@@ -269,16 +268,16 @@ $messages = array(
 'newpage' => 'Bag-o nga pakli',
 'talkpage' => 'Pakighimangraw hiunong hini nga pakli',
 'talkpagelinktext' => 'Hiruhimangraw',
-'specialpage' => 'Ispisyal nga Pakli',
-'personaltools' => 'Mga pankalugaring nga garamiton',
+'specialpage' => 'Pinaurog nga pakli',
+'personaltools' => 'Mga pankalugaringon nga garamiton',
 'postcomment' => 'Bag-o nga bahin',
 'articlepage' => 'Kitaa in may sulod nga pakli',
 'talk' => 'Hiruhimangraw',
 'views' => 'Mga paglantaw',
-'toolbox' => 'Garamiton',
+'toolbox' => 'Mga higamit',
 'userpage' => 'Kitaa in pakli hin gumaramit',
 'projectpage' => 'Kitaa in pakli hin proyekto',
-'imagepage' => 'Kitaa in pakli hin fayl',
+'imagepage' => 'Kitaa in pakli hin paypay',
 'mediawikipage' => 'Kitaa in pakli hin mensahe',
 'templatepage' => 'Kitaa in pakli hin plantilya',
 'viewhelppage' => 'Kitaa in pakli hin bulig',
@@ -335,8 +334,8 @@ $1',
 'youhavenewmessages' => 'Mayda ka $1 ($2).',
 'youhavenewmessagesfromusers' => 'May-ada ka $1 tikang ha {{PLURAL:$3|iba nga gumaramit|$3 mga gumaramit}} ($2).',
 'youhavenewmessagesmanyusers' => 'May-ada ka $1 tikang ha damo nga mga gumaramit ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|uska bag-o nga mensahe|bag-o nga mga mensahe}}',
-'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|nga pagbag-o|nga mga pagbag-o}}',
+'newmessageslinkplural' => '{{PLURAL:$1|usa ka bag-o nga mensahe|999=ka bag-o nga mga mensahe}}',
+'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|nga pagbag-o|999=nga mga pagbag-o}}',
 'youhavenewmessagesmulti' => 'Mayda ka mga bag-o nga mensahe ha $1',
 'editsection' => 'igliwat',
 'editold' => 'igliwat',
@@ -466,7 +465,8 @@ An magdudurmara nga nagtrangka hini in naghatag hini nga eksplenasyon: "$3".',
 'invalidtitle-knownnamespace' => 'Titulo nga inbalido nga may pan-ngaran "$2 ngan teksto nga "$3"',
 'invalidtitle-unknownnamespace' => 'Diri ginkakarawat nga titulo tungod mayda ini hin mga diri nakikilala nga ngaran-lat\'ang ihap $1 ngan teksto "$2"',
 'exception-nologin' => 'Diri nakalog-in',
-'exception-nologin-text' => 'Ini nga pakli o pagbuhat in nagkikinahanglan nga ikaw in mag-log-in ha dinhi nga wiki.',
+'exception-nologin-text' => 'Alayon [[Special:Userlogin|pagsakob]] basi makakadto hiní nga pakli o buruhatón.',
+'exception-nologin-text-manual' => 'Alayon $1 basi makakadto hini nga pakli o buruhatón.',
 
 # Virus scanner
 'virus-badscanner' => "Maraot nga configuration: Waray kasabti nga virus scanner: ''$1''",
@@ -513,9 +513,7 @@ Ayaw kalimti pagbalyo han imo [[Special:Preferences|{{SITENAME}} preperensya]].'
 'gotaccount' => '¿Mayda kana akawnt? $1.',
 'gotaccountlink' => 'Sakob',
 'userlogin-resetlink' => 'Nangalimot han imo detalye han pagsakob?',
-'userlogin-resetpassword-link' => 'Ig-reset an imo tigaman-pagsakob',
-'helplogin-url' => 'Help:Pag-log-in',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Bulig han pag-log-in]]',
+'userlogin-resetpassword-link' => '¿Nangalimot ka han imo tigaman-pansulod?',
 'userlogin-loggedin' => 'Nakalog-in kana komo hi {{GENDER:$1|$1}}.
 Gamiti an porma ha ubos para makalog-in komo iba nga gumaramit.',
 'userlogin-createanother' => 'Paghimo hin iba nga akawnt',
@@ -569,7 +567,7 @@ Alayon pagutro pagbutang.',
 'passwordtooshort' => 'An tigaman-pagsulod dapat diri maubos hit {{PLURAL:$1|1 nga agi|$1 nga agi}}.',
 'password-name-match' => 'An imo tigaman-pagsulod in kinahanglan iba ha imo agnay-hiton-gumaramit.',
 'password-login-forbidden' => 'An paggamit hini nga agnay-hit-gumaramit ngan tigaman-pagsulod in diri gintutugotan.',
-'mailmypassword' => 'Ig-e-mail an bag-o nga tigaman-pagsulod',
+'mailmypassword' => 'Ig-reset an tigaman-pagsulod',
 'passwordremindertitle' => 'Bag-o nga diri-pirmihan nga tigaman-pagsulod para han {{SITENAME}}',
 'passwordremindertext' => 'May-ada tawo (posible ikaw, tikang ha IP address nga $1) in umaro hin bag-o nga tigaman-pagsakob para han {{SITENAME}} ($4). Uska temporaryo nga tigaman-pagsakob para han gumaramit 
 "$2" in nahimo ngan ginbutang nga "$3". Kun ini an imo panuyuan, kinahanglanon nim maglog-in ngan pumili hin bag-o nga tigaman-pagsakob yana.
@@ -581,16 +579,17 @@ Kun iba nga tawo an naghimo ini nga paalayon, o kun nakahinumdom ka han imo tiga
 'passwordsent' => 'Uska bag-o nga password in ginpadangat ha e-mail address nga nakarehistro kan "$1".
 Alayon paglog-in utro kahuman mo makarawat ini.',
 'blocked-mailpassword' => 'An imo IP address in ginpugong ha pag-edit, ngan tungod hini in diri gintutugotan paggamit han password recovery function para malikyan an abuso.',
-'eauthentsent' => 'Uska kompirmasyon nga e-mail in ginpadangan ha gin-ngaranan nga e-mail address.
-San-o matagan pa hin iba nga e-mail para ha imo akawnt, kinahanglan mo sundon an mga surundan nga nakasurat ha e-mail, para makompirma nga imo gud ito akawnt.',
+'eauthentsent' => 'Mayda e-mail hin pagkumpirma nga ginpadará hini nga ginhatag nga e-mail adres.
+
+San-o magatagán pa hin ibá nga e-mail it akwant, kinahanglan nimo sundon an mga tugon nga nahabutáng han email basi makumpirma nga imo gud itón akawnt.',
 'throttled-mailpassword' => 'Usa nga tigaman-pagnakob reset email in ginpadangat na, ha sakob han urhi nga  {{PLURAL:$1|oras|$1 ka mga oras}}.
 Basi diri ini maabuso, uusa la nga tigaman-panakob in igpapadangat kada {{PLURAL:$1|oras|$1 ka mga oras}}.',
 'mailerror' => 'Sayop han pagpadangat hin surat: $1',
 'acct_creation_throttle_hit' => 'An mga bisita hinin nga wiki nga nagamit hit imo IP address in naghimo hin {{PLURAL:$1|1 nga akawnt|$1 nga mga akawnt}} ha sulod han urhi nga adlaw, kun diin ini an pinakadamo nga gintutugotan para han sulod nga takna.
 
 An resulta, an mga bisita nga nagamit hini nga IP address in diri na makakahimo hin akawnt, ha pagkayana.',
-'emailauthenticated' => 'Ginpamatuod an imo e-mail adres han $2 ha $3.',
-'emailnotauthenticated' => 'An imo email address in diri pa otentikado.
+'emailauthenticated' => 'Ginkumpirma an imo e-mail adres han han $2 ha $3.',
+'emailnotauthenticated' => 'Diri pa nakumpirma an imo email adres.
 Waray email nga igpapadangat ha mga masunod nga higamit.',
 'noemailprefs' => 'Igbutang an imo email address ha imo preperensya para umandar ini nga mga higamit.',
 'emailconfirmlink' => 'Igkompirma an imo e-mail address',
@@ -629,6 +628,8 @@ Para mahuman paglalog-on, kinahanglan mo magbutang hin bag-o nga tigaman-panakob
 'retypenew' => 'Utroha pagbutang an bag-o nga tigaman-pagsulod:',
 'resetpass_submit' => 'Igbutang an password ngan log in',
 'changepassword-success' => 'Malinamposon an pagbal-iw hit imo tigaman-panakob!',
+'changepassword-throttled' => 'Damo na nga mga paningkamot hin pagsakob an imo ginhimò.
+Alayon paghulat hin $1 san-o ka umutro.',
 'resetpass_forbidden' => 'Diri mababalyoan an mga tigaman-pagsulod',
 'resetpass-no-info' => 'Kinahanglan mo paglog-in para direkta ka makasakob dinhi nga pakli.',
 'resetpass-submit-loggedin' => 'Igbal-iw an tigaman-pagsulod',
@@ -641,7 +642,7 @@ Imo malinamposon nga ginsalyuan an imo tigaman-panakob o umaro ka na hin bag-o n
 # Special:PasswordReset
 'passwordreset' => 'igreset an tigaman-hit-pagsulod',
 'passwordreset-text-one' => 'Kompletoha ini nga porma paramakareset hin imo tigaman-panakob.',
-'passwordreset-text-many' => '{{PLURAL:$1|Butanga ha usa nga mga surodlan para mareset iton imo tigaman-panakob.}}',
+'passwordreset-text-many' => '{{PLURAL:$1|Butanga it usa nga mga surodlan basi makakarawat ko hin temporaryo nga tigaman-pansulod pinaagi ha email.}}',
 'passwordreset-legend' => 'igreset an tigaman-hit-pagsulod',
 'passwordreset-disabled' => 'Waray ginpaandar an password reset hini nga wiki.',
 'passwordreset-emaildisabled' => 'Mga mga higamit ha email in waray pinaandar hini nga wiki.',
@@ -651,6 +652,12 @@ Imo malinamposon nga ginsalyuan an imo tigaman-panakob o umaro ka na hin bag-o n
 'passwordreset-capture-help' => 'Kun imo igtsek ini nga kahon, an email (lakip an temporaryo nga tigaman-panakob) in igpapakita ha imo labot la han ginpadangat ha gumaramit.',
 'passwordreset-email' => 'E-mail adres:',
 'passwordreset-emailtitle' => 'Mga detalye han akawnt ha {{SITENAME}}',
+'passwordreset-emailtext-ip' => 'Mayda gumaramit (bangin hi ikaw, tikang han IP adres nga $1) nga naghangyo hin reset han imo tigaman-pansulod han {{SITENAME}} ($4). An nasunod nga gumaramit {{PLURAL:$3|nga akawnt|nga mga akawnt}} nahanungod hini nga email nga adres: 
+
+$2
+
+{{PLURAL:$3|Iní nga temporaryo nga tigaman-pansulod|Iní nga mga temporaryo nga tigaman-pansulod}} ma-waray bali hin {{PLURAL:$5|usa ka adlaw|$5 nga mga adlaw}}.
+Angay ka sumakob ngan pumílì hin bag-o nga tigaman-pansulod ha yanâ.  Kun mayda lain nga naghatag hini nga hangyo, o kun nahinumdoman mo an imo orihinal nga tigaman-pansulod, ngan nadírì ka na pagbalyo hiní, puyde mo pasagdan ini nga sumat ngan magpadayon hin paggamit han imo daan nga tigaman-pansulod.',
 'passwordreset-emailelement' => 'Agnay han gumaramit: $1
 Temporaryo nga tigaman han pagsakob: $2',
 'passwordreset-emailsent' => 'Ginpadangat an password reset email.',
@@ -668,6 +675,7 @@ Temporaryo nga tigaman han pagsakob: $2',
 'changeemail-password' => 'An imo {{SITENAME}} password:',
 'changeemail-submit' => 'Igbalyo an e-mail',
 'changeemail-cancel' => 'Pasagdi',
+'changeemail-throttled' => 'Nakadamo kada pag-log-in. Alayon paghulat hin $1 ugsa ka umutro.',
 
 # Special:ResetTokens
 'resettokens' => 'Igrest an mga token',
@@ -783,6 +791,7 @@ An pinakaurhi nga log entry han mga pinugong in ginhatag ha ubos para hit repere
 'previewnote' => "'''Hinumdumi nga pahiuna-nga-paggawas pa la ini.'''
 ¡Waray pa katipig an imo mga ginbag-o!",
 'continue-editing' => 'Pakadto han lugar hin panliwat',
+'edit_form_incomplete' => '<strong>An iba nga parte han imo pagliwat nga porma in waray umabot ha serbidor; alayon kitaa utro kun an imo mga pagliwat in aada pa ngan utroha pa.</strong>',
 'editing' => 'Ginliliwat an $1',
 'creating' => 'Ginhihimo an $1',
 'editingsection' => 'Ginliliwat an $1 (bahin)',
@@ -790,10 +799,16 @@ An pinakaurhi nga log entry han mga pinugong in ginhatag ha ubos para hit repere
 'editconflict' => 'Diri pagkakauroyon han pagliwat: $1',
 'yourtext' => 'Imo sinurat',
 'storedversion' => 'Nakahipos nga pagbag-o',
+'editingold' => '<strong>Pahimatngon: Imo ginliliwat an daan nga rebisyon hini nga pakli.</strong>
+Kun imo ini igtipig, an bisan ano nga mga pagliwat nga ginhimo tikang hini nga rebisyon in mawawara.',
 'yourdiff' => 'Mga kaibhan',
 'copyrightwarning' => "Iginpapasabot nga an ngatanan nga imo gin-amot ha {{SITENAME}} iginhatag mo ha ilarom han $2 (kitaa an $1 para han mga detalye).  Kun diri mo igkakalipay nga an imo ginsurat waray kalooy nga liliwaton ngan igpapakalat hit bisan hin-o nga it may gusto, alayon ayaw hiton igsumitir dinhi. <br />
 Nasaad ka liwat nga imo ini kalugaringon nga ginsurat, o ginkopya nimo ini tikang ha panimongto nga dominyo o kapareho nga waray-sabit nga kuruhaon.
 '''Ayaw igsumitir an mga buhat nga may ''copyright'' hin waray sarit!'''",
+'copyrightwarning2' => 'Alayon kasabot nga an ngatanan nga mga kontribusyon ha {{SITENAME}} in puydi liwaton, saliwanon, o tanggalon hin bisan hin-o nga karuyag magbuhat.
+Kun diri mo karuyag nga an imo sinurat in maliliwat la hin waray kalooy, ayaw gud igsumite dinhi.<br />
+Nasaad ka gihap nga ikaw mismo an nagsurat hini, o ginkopya mo ini ha dominyo publiko o kaparehas nga talwas nga ginkuhaan (kitaa an $1 para hin mga detalye).
+<strong>Ayaw igsumite an mga buhat nga naka-copywrite nga waray pagtugot!</strong>',
 'templatesused' => '{{PLURAL:$1|Batakan|Mga batakan}} nga gingamit dinhi nga pakli:',
 'template-protected' => '(pinaliporan)',
 'template-semiprotected' => '(katunga nga pinasaliporan)',
@@ -801,7 +816,7 @@ Nasaad ka liwat nga imo ini kalugaringon nga ginsurat, o ginkopya nimo ini tikan
 'nocreate-loggedin' => 'Diri ka gintutugotan paghimo hin mga bag-o nga pakli.',
 'sectioneditnotsupported-title' => 'Diri suportado han pagliwat han seksyon',
 'sectioneditnotsupported-text' => 'Diri suportado an pagliwat han seksyon ha dinhi nga pakli.',
-'permissionserrors' => 'Mga sayop hin mga pagtugot',
+'permissionserrors' => 'Sayop hin pagtugot',
 'permissionserrorstext' => 'Diri ka gintutugotan pagbuhat hito, mahitungod han mga nasunod nga {{PLURAL:$1|katadungan|mga katadungan}}:',
 'permissionserrorstext-withaction' => 'Waray ka permiso han $2, tungod han masunod nga {{PLURAL:$1|rason|mga rason}}:',
 'recreate-moveddeleted-warn' => "'''Pahimatngon: Naghihimo ka hin pakli nga ginpara na.'''
@@ -889,13 +904,13 @@ An mga detalye in mabibilngan ha [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'revisiondelete' => 'Pagpara/pagtanggal han pagpara nga mga rebisyon',
 'revdelete-show-file-confirm' => 'Sigurado ka nga gusto mo makita an ginpara nga pagliwat han file "<nowiki>$1</nowiki>" tikang $2 ha $3?',
 'revdelete-show-file-submit' => 'Oo',
-'revdelete-hide-text' => 'Tagoon an rebisyon han teksto',
+'revdelete-hide-text' => 'Rebisyon nga sinurat',
 'revdelete-hide-image' => 'Tagoon an sulod han paypay',
 'revdelete-hide-name' => 'Tagoon an buhat ngan kakadtoan',
-'revdelete-hide-comment' => 'Tagoon an dalikyat nga sumat han pagliwat',
+'revdelete-hide-comment' => 'Dalikyat nga sumat hin pagliwat',
 'revdelete-radio-same' => '(ayaw balyu-e)',
-'revdelete-radio-set' => 'Oo',
-'revdelete-radio-unset' => 'Ayaw',
+'revdelete-radio-set' => 'Tinago',
+'revdelete-radio-unset' => 'Nakikit-an',
 'revdelete-log' => 'Rason:',
 'revdel-restore' => 'igliwat an nakikit-an',
 'pagehist' => 'Kaagi han pakli',
@@ -949,7 +964,7 @@ Diri mo ini malalabtan.',
 'shown-title' => 'Kitaa $1 {{PLURAL:$1|resulta|mga resulta}} kada pakli',
 'viewprevnext' => 'Kitaa an ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''May-ada pakli nga nakangaran hin \"[[:\$1]]\" hini nga wiki.'''",
-'searchmenu-new' => "'''Himoa an pakli \"[[:\$1]]\" hini nga wiki!'''",
+'searchmenu-new' => '<strong>Himoa an pakli nga "[[:$1]]" dinhi nga wiki!</strong> {{PLURAL:$2|0=|Kitaa gihapon an pakli nga nabilngan han imo pagbiling.|Kitaa gihapon an mga nabilngan nga ginmawas han pagbiling.}}',
 'searchprofile-articles' => 'Mga unod nga pakli',
 'searchprofile-project' => 'Mga Bulig ngan Proyekto nga pakli',
 'searchprofile-images' => 'Multimedia',
@@ -1079,7 +1094,7 @@ An imo e-mail address in diri makikit-an kun an iba nga mga gumaramit in makonta
 'prefs-i18n' => 'Internasyonalisasyon',
 'prefs-signature' => 'Pirma',
 'prefs-dateformat' => 'Batakan han petsa',
-'prefs-advancedediting' => 'Abansado nga mga pagpipilian',
+'prefs-advancedediting' => 'Mga kasahiran nga pagpipilian',
 'prefs-preview' => 'Pahiuna nga pakita',
 'prefs-advancedrc' => 'Abansado nga mga pagpipilian',
 'prefs-advancedrendering' => 'Abansado nga mga pagpipilian',
@@ -1151,7 +1166,7 @@ Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki
 'right-reupload' => 'Sapawa an mga aada nga mga paypay',
 'right-reupload-own' => 'Igsapaw an aada yana nga mga paypay nga ginkarga-pasaka nimo mismo',
 'right-upload_by_url' => 'Igkarga paigbaw an mga paypay tikang ha uska URL',
-'right-autoconfirmed' => 'Igliwat an mga semi-pinanpasaliporan nga pakli',
+'right-autoconfirmed' => 'Diri malalalbtan hin IP-nga-nahibasi nga mga rate hin paglimit',
 'right-bot' => 'Igtrato komo uska naglulugaring nga proseso',
 'right-delete' => 'Igpara an mga pakli',
 'right-bigdelete' => 'Igpara an mga pakli nga may-ada dagko nga mga kaagi',
@@ -1206,8 +1221,8 @@ Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki
 'action-suppressionlog' => 'kitaa an kanan hini pribado nga talaan',
 'action-block' => 'Pugnga ini nga gumaramit ha pagliwat',
 'action-protect' => 'igsaliwan an katupngan han pananalipod para hini nga pakli',
-'action-import' => 'ig-angbit ini nga pakli tikang ha iba nga wiki',
-'action-importupload' => 'ig-angbit ini nga pakli tikang ha uska ginkarga-pasaka nga paypay',
+'action-import' => 'ig-angbit hin mga pakli tikang ha iba nga wiki',
+'action-importupload' => 'ig-angbit hin mga pakli pakli tikang ha uska ginkarga-pasaka nga paypay',
 'action-patrol' => 'markahi an kanan iba pagliwat komo nakapatrolya',
 'action-mergehistory' => 'Igtampo an kaagi hini nga pakli',
 'action-userrights' => 'Igliwat an ngatanan nga mga katungod han gumaramit',
@@ -1227,7 +1242,7 @@ Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki
 'rclistfrom' => 'Pakit-a an mga ginbag-ohan tikang han $1',
 'rcshowhideminor' => '$1 gudti nga mga pagliwat',
 'rcshowhidebots' => '$1 mga bot',
-'rcshowhideliu' => '$1 mga naka-log-in nga gumaramit',
+'rcshowhideliu' => '$1 an mga rehistrado nga gumaramit',
 'rcshowhideanons' => '$1 waray nagpakilala nga mga gumaramit',
 'rcshowhidepatr' => '$1 mga pinatrolya nga mga paliwat',
 'rcshowhidemine' => '$1 akon mga ginliwat',
@@ -1567,7 +1582,7 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'prevpage' => 'Nahiuna nga pakli ($1)',
 'allpagesfrom' => 'Igpakita an mga pakli nga nagtitikang ha:',
 'allpagesto' => 'Igpakita an mga pakli nga nahuhuman ha:',
-'allarticles' => 'Ngatanan nga mga artikulo',
+'allarticles' => 'Ngatanan nga mga barasahon',
 'allinnamespace' => "Ngatanan nga mga pakli ($1 ngaran-lat'ang)",
 'allpagessubmit' => 'Kadto-a',
 'allpages-bad-ns' => '{{SITENAME}} in waray ngaran-lat\'ang nga "$1".',
@@ -1702,9 +1717,11 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 'deleteotherreason' => 'Lain/dugang nga katadungan:',
 'deletereasonotherlist' => 'Lain nga katadungan',
 'deletereason-dropdown' => "*Agsob nga rason hin pagpara
-** Tugon han manunurat
+** Spam
+** Bandalismo
 ** Pagtalapas ha katungod hin pagtatag-iya (''copyright'')
-** Bandalismo",
+** Tugon han manunurat
+** Utod nga redirek",
 'delete-edit-reasonlist' => 'Igliwat an mga rason han pagpara',
 
 # Rollback
@@ -2054,12 +2071,12 @@ Makikit-an nimo an ginkuhaaan',
 'pageinfo-display-title' => 'Iglatag an titulo',
 'pageinfo-length' => 'Kahilaba han pakli (ha mga byte)',
 'pageinfo-article-id' => 'ID han pakli',
-'pageinfo-robot-policy' => 'Pamilnga an kahimtang han makina',
-'pageinfo-robot-index' => 'Matutudlok',
-'pageinfo-robot-noindex' => 'Diri matutudlok',
+'pageinfo-robot-policy' => 'Pag-index hin mga robot',
+'pageinfo-robot-index' => 'Gintutugot',
+'pageinfo-robot-noindex' => 'Dírì gintutugot',
 'pageinfo-views' => 'Ihap han mga naglantaw',
 'pageinfo-watchers' => 'Ihap han nangingita hin pakli',
-'pageinfo-redirects-name' => 'Nairedirekta ha dinhi nga pakli',
+'pageinfo-redirects-name' => 'Ihap hin mga redirek ngani nga pakli',
 'pageinfo-subpages-name' => 'Mga bahinpakli hin nga pakli',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirekta|mga redirekta}}; $3 {{PLURAL:$3|diri redirekta|mga diri redirekta}})',
 'pageinfo-firstuser' => 'Naghimo han pakli',
@@ -2106,7 +2123,7 @@ $1',
 'file-info-size' => '$1 × $2 nga pixel, kadako han fayl: $3, MIME nga tipo: $4',
 'file-nohires' => 'Waray mas hiruhitaas nga resolusyon.',
 'svg-long-desc' => 'SVG nga fayl, ginbabanabanahan nga $1 × $2 nga mga pixel, kadako han fayl: $3',
-'show-big-image' => 'Bug-os nga resolusyon',
+'show-big-image' => 'Orihinal nga paypay',
 'show-big-image-preview' => 'Kadako hin nga pahiuna nga pagawas: $1.',
 'show-big-image-other' => 'Iba {{PLURAL:$2|nga resolusyon|nga mga resolusyon}}: $1.',
 'show-big-image-size' => '$1 × $2 nga mga pixel',
@@ -2212,7 +2229,7 @@ An iba in daan nakatago.
 'exif-cameraownername' => 'Tag-iya han kamera',
 'exif-usageterms' => 'Mga termino hit paggamit',
 
-'exif-copyrighted-false' => 'Dominyo panpubliko',
+'exif-copyrighted-false' => 'Status hin katungod-hin-panag-iya waray mahabutang',
 
 'exif-unknowndate' => 'Waray kasabti an petsa',
 
@@ -2396,7 +2413,7 @@ An iba in daan nakatago.
 'version-hooks' => 'Mga kawil',
 'version-hook-name' => 'Ngaran han kawil',
 'version-version' => '(Bersion $1)',
-'version-license' => 'Lisensya',
+'version-license' => 'MediaWiki nga Lisensya',
 'version-poweredby-credits' => "Ini nga wiki in pinapaandar han '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'mga iba',
 'version-software-product' => 'Produkto',
@@ -2468,10 +2485,10 @@ An iba in daan nakatago.
 'revdelete-content-hid' => 'sulod nakatago',
 'revdelete-summary-hid' => 'nakatago an dalikyat nga sumat han pagliwat',
 'revdelete-uname-hid' => 'nakatago an agnay-hit-gumaramit',
-'logentry-newusers-newusers' => '$1 in naghimo hin gumaramit nga akawnt',
-'logentry-newusers-create' => '$1 in naghimo hin gumaramit nga akawnt',
-'logentry-newusers-create2' => '$1 in naghimo hin gumaramit nga akawnt $3',
-'logentry-newusers-autocreate' => 'An akawnt nga $1 in lugaring nga nahimo',
+'logentry-newusers-newusers' => 'An gumaramit nga akawnt nga $1 {{GENDER:$2|ginhimo}}',
+'logentry-newusers-create' => 'An gumaramit nga akawnt nga $1 {{GENDER:$2|ginhimo}}',
+'logentry-newusers-create2' => 'An gumaramit nga akawnt nga $3 {{GENDER:$2|ginhimo}} ni $1',
+'logentry-newusers-autocreate' => 'An gumaramit nga akawnt nga $1 in lugaring nga {{GENDER:$2|ginhimo}}',
 'rightsnone' => '(waray)',
 
 # Feedback
index f1bdc20..36187cc 100644 (file)
@@ -757,8 +757,6 @@ Li nga doon yorkat tax na ba-tay nga man a [$1 gis gii wuute] su la neexee.",
 'revdelete-show-file-submit' => 'Waaw',
 'revdelete-selected' => "'''{{PLURAL:$2|Sumbum '''$1''' mi falu|Sumbi '''$1''' yi falu}} :'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Xew-xewu yéenekaay bi falu|Xew-xewi yéenekaay yi falu}}:'''",
-'revdelete-text' => "'''Sumb yi nga far dañuy wéy di feeñ ci jaar-jaaru xët wi, waaye mbind yi ñu ëmb ñépp duñ leen man a gis.'''
-Yeneen yorkat yu {{SITENAME}} di nañ man a gis ëmbit yu laqu yi te loppanti leen ci benn jokkalekaay bi, su fekkee defuñu fi ay digal yu leen koy tere man a def.",
 'revdelete-legend' => 'Taxawal ay digal ci sumb yi ñu far:',
 'revdelete-hide-text' => 'Nëbb mbindum sumb bi',
 'revdelete-hide-image' => 'Nëbb ëmbiitu dencukaay bi',
index 9c58c28..37089bb 100644 (file)
@@ -184,7 +184,6 @@ $messages = array(
 'vector-action-protect' => '保',
 'vector-action-undelete' => '弗刪',
 'vector-action-unprotect' => '换保护状态',
-'vector-simplesearch-preference' => '用简单搜寻条(只Vector皮肤好用)',
 'vector-view-create' => '建',
 'vector-view-edit' => '编',
 'vector-view-history' => '望页史',
@@ -449,8 +448,6 @@ $2',
 'gotaccountlink' => '登录',
 'userlogin-resetlink' => '忘记登录细节?',
 'userlogin-resetpassword-link' => '转设密码',
-'helplogin-url' => '帮助ː登进',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|登进帮忙]]',
 'userlogin-loggedin' => '你侬用{{GENDER:$1|$1}}登进来哉。用下向个表以别样身份登进。',
 'userlogin-createanother' => '建别样账号',
 'createacct-join' => '下向打进你侬个信息。',
@@ -827,8 +824,6 @@ $3封禁个原因是''$2''",
 'revdelete-show-file-submit' => '是',
 'revdelete-selected' => "'''选取'''[[:$1]]'''个$2趟修订:'''",
 'logdelete-selected' => "'''选取'''$1'''个日志事件:'''",
-'revdelete-text' => "'''删脱个修订仍然将显示拉页面历史里向,不过渠拉个文本内容公众已经弗好访问。'''
-垃拉{{SITENAME}}个其他管理员将仍旧好访问隐藏个内容并通过与此相同个界面恢复删除,除非站点工作者添加了附加限制。",
 'revdelete-confirm' => '假使侬想箇能介做个闲话,请确认侬已经清爽箇能介做个后果,外加箇个程序符合[[{{MediaWiki:Policy-url}}|政策]]。',
 'revdelete-suppress-text' => "'''只有'''出现下头眼情况再应阻止访问:
 * 弗适合个个人信息
index efac44d..f9972ee 100644 (file)
@@ -58,7 +58,6 @@ $namespaceGenderAliases = array();
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Заалһиг татас татх:',
-'tog-justify' => 'Зүүл тегшлтн',
 'tog-hideminor' => 'Шидрә сольлһна сеткүлд баһ хүврлһиг бултулх',
 'tog-hidepatrolled' => 'Шидрә сольлһна сеткүлд шүүсн хүврлһиг бултулх',
 'tog-newpageshidepatrolled' => 'Шин халхна сеткүләс шүүсн хүврлһиг бултулх',
@@ -67,9 +66,7 @@ $messages = array(
 'tog-numberheadings' => 'То-диг чикән даах',
 'tog-showtoolbar' => 'Ора зер-зев үзлх (JavaScript кергтә)',
 'tog-editondblclick' => 'Давхр индстлһар чиклх (JavaScript кергтә)',
-'tog-editsection' => '«Чиклх» заавр болвчн хүвд үзүлх',
 'tog-editsectiononrightclick' => 'Һарчига барун индстлһар хүвиг чиклх (JavaScript кергтә)',
-'tog-showtoc' => 'Һарг үзүлх (3 икәр толһата халхсд)',
 'tog-rememberpassword' => 'Намаг эн тоолдврт тодлх ($1 {{PLURAL:$1|1=өдрт|өдрмүдт}} икәр биш)',
 'tog-watchcreations' => 'Би эврәннь немгдсн халхс шинҗллһнә сеткүлд немх',
 'tog-watchdefault' => 'Би эврәннь чиклсн халхс шинҗллһнә сеткүлд немх',
index 4350b2a..2167c6d 100644 (file)
@@ -360,7 +360,6 @@ $messages = array(
 'vector-action-protect' => 'שיצן',
 'vector-action-undelete' => 'מבטל זיין אויסמעקן',
 'vector-action-unprotect' => 'ענדערונג באַשיצונג',
-'vector-simplesearch-preference' => 'דערמעגלעכן פֿאַרפשוטערטן זוך פאַס (נאר וועקטאר)',
 'vector-view-create' => 'שאַפֿן',
 'vector-view-edit' => 'רעדאַקטירן',
 'vector-view-history' => 'ווײַזן היסטאָריע',
@@ -648,8 +647,6 @@ $2',
 'gotaccountlink' => 'אַרײַנלאגירן',
 'userlogin-resetlink' => 'פארגעסן אײַערע אַרײַנלאָגירן פרטים?',
 'userlogin-resetpassword-link' => 'פֿאַרגעסן אײַער פאַסווארט?',
-'helplogin-url' => 'Help:אריינלאגירן',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|הילף מיט אריינלאגירן]]',
 'userlogin-loggedin' => 'איר זענט שוין אריינלאגירט ווי {{GENDER:$1|$1}}.
 ניצט די פארעם אונטן כדי אריינלאגירן ווי אן אנדער באניצער.',
 'userlogin-createanother' => 'שאפֿן נאך א קאנטע',
@@ -748,6 +745,10 @@ $2',
 'suspicious-userlogout' => ' אײַער בקשה אַרויסלאָגירן זיך איז אפגעלייגט געווארן ווייַל אייגנטלעך איז זי געשיקט דורך אַ צעבראכענעם בלעטערער אָדער א פראקסי מיט א זאפאס.',
 'createacct-another-realname-tip' => 'עכטער נאמען איז אפציאנאל.
 אויב איר וויילט אויס צוצושטעלן אים, וועט דאס גענוצט ווערן צו געבן אטריבוציע פאר זייער ארבעט.',
+'pt-login' => 'אַרײַנלאגירן',
+'pt-login-button' => 'אַרײַנלאָגירן',
+'pt-createaccount' => 'שאַפֿן אַ קאנטע',
+'pt-userlogout' => 'אַרויסלאגירן',
 
 # Email sending
 'php-mail-error-unknown' => 'אומבאַקאַנט טעות אין()mail פֿונקציע פֿון PHP.',
@@ -756,7 +757,7 @@ $2',
 
 # Change password dialog
 'changepassword' => 'טוישן פאַסווארט',
-'resetpass_announce' => '×\90×\99ר ×\94×\90×\98 ×\90ר×\99×\99× ×\9c×\90×\92×\99ר×\98 ×\9e×\99×\98 ×\90 ×¤×¨×\90×\95×\95×\99×\96×\90ר×\99ש×\9f ×§×\90×\93 ×\92עש×\99ק×\98 ×\93×\95ר×\9b×\9f ×¢-פ×\90ס×\98. ×¦×\95 ×¤×\90רענ×\93×\99×\92×\9f ×\90ר×\99×\99× ×\9c×\90×\92×\99ר×\9f, ×\91ר×\95×\99×\9b×\98 ×\90×\99ר ×\90נש×\98×¢×\9c×\9f ×\90 × ×\99×\99 ×¤×\90ס×\95×\95×\90ר×\98 ×\93×\90:',
+'resetpass_announce' => 'צו פארענדיגן אריינלאגירן, ברויכט איר אנשטעלן א ניי פאסווארט דא:',
 'resetpass_text' => '<!-- לייגט צו טעקסט דא -->',
 'resetpass_header' => 'ענדערן קאנטע פאסווארט',
 'oldpassword' => 'אַלטע פאַסווארט:',
@@ -764,14 +765,18 @@ $2',
 'retypenew' => 'ווידער שרײַבן פאַסווארט:',
 'resetpass_submit' => 'שטעלן פאסווארט און אריינלאגירן',
 'changepassword-success' => 'אייער פאַסווארט איז געטוישט געווארן מיט דערפֿאלג!',
+'changepassword-throttled' => 'איר האט געפרוווט צופֿיל מאל אריינלאגירן.
+זייט אזוי גוט און וואַרט $1 איידער איר פרוווט נאכאמאל.',
 'resetpass_forbidden' => 'פאסווערטער קענען נישט ווערן געטוישט',
 'resetpass-no-info' => 'איר דארפֿט זיין אריינלאגירט צוצוקומען גלייך צו דעם דאזיגן בלאט.',
 'resetpass-submit-loggedin' => 'טוישן פאסווארט',
 'resetpass-submit-cancel' => 'אַנולירן',
 'resetpass-wrong-oldpass' => 'אומגילטיג צײַטווײַליק אדער לויפֿיק פאַסווארט.
 איר האט מעגלעך שוין געטוישט אייער פאַסווארט מיט הצלחה אדער געבעטן א נײַ  צײַטווײַליק פאַסווארט.',
+'resetpass-recycled' => 'זײַט אזוי גוט שטעטל אירע פאסווארט צו עפעס אנדערש פונעם לויפיקן פאסווארט.',
 'resetpass-temp-password' => 'צײַטווייליק פאַסווארט:',
 'resetpass-abort-generic' => 'פאסווארט ענדערונג איז מבוטל געווארן דורך א פארברייטערונג.',
+'resetpass-expired' => 'אירע פאסווארט איז אויסגעגאנגען. זײַט אזוי גוט שטעלט א נײַ פאסווארט כדי ארײַנלאגירן.',
 
 # Special:PasswordReset
 'passwordreset' => 'צוריקשטעלן פאַסווארט',
@@ -821,6 +826,8 @@ $2
 'changeemail-password' => 'אייער {{SITENAME}} פאסווארט:',
 'changeemail-submit' => 'ענדערן ע־פאסט אדרעס',
 'changeemail-cancel' => 'אַנולירן',
+'changeemail-throttled' => 'איר האט געפרוווט צופֿיל מאל אריינלאגירן.
+זייט אזוי גוט און וואַרט $1 איידער איר פרוווט נאכאמאל.',
 
 # Special:ResetTokens
 'resettokens' => 'צוריקזעצן טאקנס',
@@ -1158,8 +1165,6 @@ $2
 'revdelete-show-file-submit' => 'יא',
 'revdelete-selected' => "'''{{PLURAL:$2|אויסדערוויילטע ווערסיע| אויסדערוויילטע ווערסיעס}} פון [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1| אויסדערוויילטע לאג אקציע|אויסדערוויילטע לאג אקציעס}}:'''",
-'revdelete-text' => "'''אויסגעמעקטע רעוויזיעס און געשעענישן וועלן בלייבן אין דער בלאט היסטאריע און די לאגביכער, אבער טיילן פון זייער אינהאלט וועט ווערן אומגרייכלעך צום קהל. '''
-אנדערע סיסאפן אויף {{SITENAME}} וועלן נאך האבן צוטריט צום באהאלטענעם אינהאלט און קענען אים צוריקשטעלן דורך דעם זעלבן אייבערפלאך,  אחוץ ווען מען שטעלט נאך באגרענעצונגען.",
 'revdelete-confirm' => 'זייט אזוי גוט און באשטעטיקט אז דאס איז טאקע אייער כוונה, אז איר פארשטייט די קאנסעקווענצן, און אז איר טוט דאס לויט  [[{{MediaWiki:Policy-url}}|דער פאליסי]].',
 'revdelete-suppress-text' => "אונטערדרוקן זאל בלויז גענוצט ווערן '''נאר''' אין די פאלגנדע פעלער:
 * אינפארמאציע וואס קען זיין מוציא שם רע
@@ -1254,6 +1259,7 @@ $1",
 'showhideselectedversions' => 'ווײַזן/באַהאַלטן געקליבענע רעוויזיעס',
 'editundo' => 'אַנולירן',
 'diff-empty' => '(קיין אונטערשייד)',
+'diff-multi-sameuser' => '({{PLURAL:$1|איין צווישנדיקע ווערסיע |$1 צווישנדיקע ווערסיעס}} פֿונעם זעלבן באַניצער נישט געוויזן.)',
 'diff-multi-otherusers' => '({{PLURAL:$1|איין מיטלסטע ווערסיע |$1 מיטלסטע ווערסיעס}} פֿון {{PLURAL:$2|איין אנדער באַניצער|$2 באַניצער}} נישט געוויזן.)',
 'diff-multi-manyusers' => '({{PLURAL:$1|איין מיטלסטע ווערסיע |$1 מיטלסטע ווערסיעס}} פֿון מער ווי {{PLURAL:$2|איין באַניצער|$2 באַניצער}} נישט געוויזן.)',
 'difference-missing-revision' => '{{PLURAL:$2|איין ווערסיע|$2 ווערסיעס}} פון דעם דיפערענץ ($1) {{PLURAL:$2|האט}} מען נישט געטראפן.
@@ -1294,7 +1300,7 @@ $1",
 'search-file-match' => '(פאסט צו טעקע אינהאלט)',
 'search-suggest' => 'צי האט איר געמיינט: $1',
 'search-interwiki-caption' => 'שוועסטער פראיעקטן',
-'search-interwiki-default' => '$1 רעזולטאטן:',
+'search-interwiki-default' => 'רעזולטאטן פון $1:',
 'search-interwiki-more' => '(נאך)',
 'search-relatedarticle' => 'פארבינדן',
 'searcheverything-enable' => 'זוכן אין אלע נאמענטיילן',
@@ -1619,14 +1625,26 @@ $1",
 'recentchanges-legend-heading' => "'''לעגענדע:'''",
 'recentchanges-legend-newpage' => '(זעט אויך [[Special:NewPages|די רשימה פון נייע בלעטער]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "פֿאלגנד זענען די ענדערונגען זײַט '''$2''' (ביז '''$1''')",
+'rcnotefrom' => 'פֿאלגנד זענען די ענדערונגען זײַט <strong>$2</strong> (ביז <strong>$1</strong>).',
 'rclistfrom' => 'װײַזן נײַע ענדערונגען פֿון $1',
 'rcshowhideminor' => '$1 מינערדיגע ענדערונגען',
+'rcshowhideminor-show' => 'ווײַזן',
+'rcshowhideminor-hide' => 'באהאלטן',
 'rcshowhidebots' => '$1 ראבאטן',
+'rcshowhidebots-show' => 'ווײַזן',
+'rcshowhidebots-hide' => 'באַהאַלטן',
 'rcshowhideliu' => '$1 אײַנגעשריבענע באַניצער',
+'rcshowhideliu-show' => 'ווײַזן',
+'rcshowhideliu-hide' => 'באַהאַלטן',
 'rcshowhideanons' => '$1 אַנאָנימע באַניצער',
+'rcshowhideanons-show' => 'ווײַזן',
+'rcshowhideanons-hide' => 'באַהאַלטן',
 'rcshowhidepatr' => '$1 פאַטראלירטע ענדערונגען',
+'rcshowhidepatr-show' => 'ווײַזן',
+'rcshowhidepatr-hide' => 'באַהאַלטן',
 'rcshowhidemine' => '$1 מײַנע רעדאַקטירוננגען',
+'rcshowhidemine-show' => 'ווײַזן',
+'rcshowhidemine-hide' => 'באַהאַלטן',
 'rclinks' => 'װײַזן די לעצטע $1 ענדערונגען אין די לעצטע $2 טעג.<br />$3',
 'diff' => 'אונטערשייד',
 'hist' => 'היסטאריע',
@@ -2010,6 +2028,7 @@ $1",
 'pageswithprop-prop' => 'אייגנשאפט נאמען:',
 'pageswithprop-submit' => 'גייט',
 'pageswithprop-prophidden-long' => 'לא גער טעקסט אייגנשאפט־ווערט באהאלטן ($1)',
+'pageswithprop-prophidden-binary' => 'בינארישער אייגנשאפט־ווערט באהאלטן ($1)',
 
 'doubleredirects' => 'געטאפלטע ווײַטערפֿירונגען',
 'doubleredirectstext' => 'דער בלאט רעכנט אויס בלעטער וואס פירן ווייטער צו אנדערע ווייטערפירן בלעטער.
@@ -2077,6 +2096,12 @@ $1",
 'protectedpages-cascade' => 'בלויז קאַסקאַדירנדיקע באַשיצונגען',
 'protectedpages-noredirect' => 'פֿארהיילן ווייטערפֿירונגען',
 'protectedpagesempty' => 'אצינד זענען קיין בלעטער נישט געשיצט מיט די דאזיגע פאַראַמעטערס.',
+'protectedpages-timestamp' => 'צײַטשטעמפל',
+'protectedpages-page' => 'בלאַט',
+'protectedpages-expiry' => 'גייט אויס',
+'protectedpages-reason' => 'אורזאַך',
+'protectedpages-unknown-timestamp' => 'אומבאַוואוסט',
+'protectedpages-unknown-performer' => 'אומבאוואוסטער באניצער',
 'protectedtitles' => 'געשיצטע קעפלעך',
 'protectedtitlesempty' => 'אצינד זענען קיין קעפלעך נישט באַשיצט מיט די דאזיגע פאַראַמעטערס.',
 'listusers' => 'באַניצער ליסטע',
@@ -2348,7 +2373,8 @@ $UNWATCHURL
 'delete-edit-reasonlist' => 'רעדאַקטירן די אויסמעקן סיבות',
 'delete-toobig' => 'דער בלאַט האט א גרויסע רעדאקטירונג היסטאריע, מער ווי $1 {{PLURAL:$1|רעוויזיע|רעוויזיעס}}. אויסמעקן אזעלכע בלעטער איז באַגרענעצט געווארן בכדי צו פֿאַרמײַדן א צופֿעליגע פֿאַרשטערונג פֿון  {{SITENAME}}.',
 'delete-warning-toobig' => 'דער בלאַט האט א גרויסע רעדאקטירונג היסטאריע, מער ווי $1 {{PLURAL:$1|רעוויזיע|רעוויזיעס}}. אויסמעקן אים קען פֿאַרשטערן דאַטנבאַזע אפעראַציעס פֿון {{SITENAME}}; זײַט פֿארזיכטיג איידער איר מעקט אויס.',
-'deleting-backlinks-warning' => "'''ווארענוג:''' אנדערע בלעטער פארבינדן צום בלאט אדער אריבערשליסן פונעם בלאט איר האלט ביי אויסמעקן.",
+'deleting-backlinks-warning' => "'''ווארענוג:'''
+[[Special:WhatLinksHere/{{FULLPAGENAME}}|אנדערע בלעטער]]  פארבינדן צום בלאט אדער אריבערשליסן דעם בלאט איר האלט ביי אויסמעקן.",
 
 # Rollback
 'rollback' => 'צוריקדרייען רעדאַקטירונגען',
@@ -2516,6 +2542,7 @@ $1',
 'sp-contributions-search' => 'זוכן בײַשטײַערונגען',
 'sp-contributions-username' => 'באניצער נאמען אדער IP אדרעס:',
 'sp-contributions-toponly' => 'בלויז ווײַזן רעדאַקטירונגען וואָס זענען די לעצטיקע רעוויזיעס',
+'sp-contributions-newonly' => 'בלוז ווײַזן רעדאקטירונגען וואס זענען נײַ־געשאפענע בלעטער',
 'sp-contributions-submit' => 'זוכן',
 
 # What links here
@@ -2624,7 +2651,8 @@ $1',
 'change-blocklink' => 'ענדערן בלאק',
 'contribslink' => 'באַניצערס בײַשטײַערונגען',
 'emaillink' => 'שיקן ע־פאסט',
-'autoblocker' => 'דו ביסט געבלאקט אטאמאטיק ווייל דו טיילסט זיך די IP אדרעס מיט [[User:$1|$1]]. דער סיבה וואס איז אנגעבען געווארן  [[User:$1|$1]] איז: "$2".',
+'autoblocker' => 'אויטאמאטיש בלאקירט ווייל אײַער IP אדרעס איז לעצטנס געניצט געווארן דורך [[User:$1|$1]]. 
+דער סיבה וואס איז אנגעבען געווארן איז: "$2".',
 'blocklogpage' => 'בלאקירן לאג',
 'blocklog-showlog' => '{{GENDER:$1|דער באַניצער|די באַניצערין}} איז שוין געווארן פֿאַרשפאַרט אַמאָל.
 דער בלאקירונג לאג איז צוגעשטעלט אונטן:',
@@ -2891,6 +2919,7 @@ $2',
 'javascripttest-title' => 'דורכפירנדיק $1 בדיקות',
 'javascripttest-pagetext-noframework' => ' דער בלאט איז רעזערווירט פאר JavaScript. פרואוון.',
 'javascripttest-pagetext-unknownframework' => 'אומבאקאנטער טעסטן גערעם "$1".',
+'javascripttest-pagetext-frameworks' => 'ביטע קלויבט איינעם פון די פאלגנדע טעסטן־גערעם: $1',
 'javascripttest-pagetext-skins' => 'קלויבט א באניצער־אייבערפלאך מיט וואס דורכצופירן די בדיקות:',
 'javascripttest-qunit-intro' => 'זעט [$1 דאקומענטאציע פאר טעסטן] בײַ mediawiki.org.',
 'javascripttest-qunit-heading' => 'מעדיעוויקי JavaScript QUnit קאנטראל־פראגראם',
@@ -3007,6 +3036,7 @@ $2',
 'pageinfo-length' => 'בלאט לענג (אין בייטן)',
 'pageinfo-article-id' => 'בלאט נומער',
 'pageinfo-language' => 'בלאט אינהאלט שפראך',
+'pageinfo-content-model' => 'בלאט אינהאלט מאדעל',
 'pageinfo-robot-policy' => 'אינדעקסירן דורך ראבאטן',
 'pageinfo-robot-index' => 'דערלויבט',
 'pageinfo-robot-noindex' => 'נישט דערלויבט',
index 0b48808..9516bd1 100644 (file)
@@ -215,7 +215,6 @@ $messages = array(
 'vector-action-protect' => 'Àbò',
 'vector-action-undelete' => 'Ìmúkúrò ìparẹ́',
 'vector-action-unprotect' => 'Ìyípadà àbò',
-'vector-simplesearch-preference' => 'Ìgbàláyè pẹpẹ ìṣàwárí ọnídídẹ̀rọ̀ (awọ Vector nìkan)',
 'vector-view-create' => "Ṣ'èdá",
 'vector-view-edit' => 'Àtúnṣe',
 'vector-view-history' => 'Wo ìtàn',
@@ -498,8 +497,6 @@ Olùṣeàmójútó tó típa ṣe àlàyé yìí: "$3".',
 'gotaccountlink' => "Ẹ w'ọlé",
 'userlogin-resetlink' => 'À bí ẹ gbàgbé ìwọlé yín?',
 'userlogin-resetpassword-link' => 'Ṣé ẹ ti gbàgbé ọ̀rọ̀ìpamọ́ yín?',
-'helplogin-url' => 'Help:Ìwolé',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ìrànlọ́wọ́ láti ìwọlé]]',
 'userlogin-loggedin' => 'Ẹ pilẹ̀ ti jáwọlé bíi {{GENDER:$1|$1}}.
 Ẹ lo fọ́ọ̀mù ìsàlẹ̀ látí jáwọlé gẹ́gẹ́ bíi oníṣe míràn.',
 'userlogin-createanother' => 'Ìdá àkópamọ́ míràn',
@@ -988,8 +985,6 @@ Tó bá jẹ́ pé ẹ ti wọlé, ẹ lè dẹ́kun ìkìlọ̀ yìí nínù ab
 'revdelete-show-file-submit' => 'Bẹ́ẹ̀ni',
 'revdelete-selected' => "'''{{PLURAL:$2|Àtúnyẹ̀wò síṣàyàn|Àwọn àtúnyẹ̀wò síṣàyàn}} fún [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Àkọọ́lẹ̀ ìṣẹ̀lẹ̀ síṣàyàn|Àwọn àkọọ́lẹ̀ ìṣẹ̀lẹ̀ síṣàyàn}}:'''",
-'revdelete-text' => "'''Àwọn àtúnyẹ̀wò onípíparẹ́ àti ìṣẹ̀lẹ̀ yíò sì tún hàn nínú ojúewé ìtàn àti àkọọ́lẹ̀, sùgbọ́n àwọn apá àkóónú wọn kò ní hàn jáde sí ìgboro'''
-Àwọn olùmójútó míràn lórí {{SITENAME}} yíò sí tún le wo àkóónú àbòmọ́lẹ̀ náà bẹ́ẹ̀sìni wọ́n le mú ìparẹ́ kúrò lórí ìfojúkojú yìí, àyàfi tí àwọn ìdíwọ́ míràn bá jẹ́ títòsílẹ̀.",
 'revdelete-confirm' => 'Ẹ jọ̀wọ́ ẹ rídájú pé ohun tí ẹ fẹ́ ṣe nìyí, pé ohun tí yíò ṣẹlẹ̀ yé yín, bẹ́ẹ̀sìni pé ẹ̀ únṣe é lọ́nà tó bá  [[{{MediaWiki:Policy-url}}|àdéhùn]] mu.',
 'revdelete-suppress-text' => "Ìrẹ̀mọ́lẹ̀ gbọ́dọ̀ jẹ́ lílò fún àwọn ìṣẹ̀lẹ̀ ìsàlẹ̀ wọ̀nyí '''nìkan''':
 *Ọ̀rọ̀ tó le fa ẹjọ́ wá
index b34e333..6911b16 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Anson2812
+ * @author Antonytse
  * @author Horacewai2
  * @author Justincheng12345
  * @author Kaganer
@@ -241,8 +242,8 @@ $messages = array(
 'tog-extendwatchlist' => '展開監視清單去顯示全部更改,唔係淨係最新嘅',
 'tog-usenewrc' => '用強化版最近更改(需要JavaScript)',
 'tog-numberheadings' => '標題自動編號',
-'tog-showtoolbar' => '顯示修改工具列(需要JavaScript)',
-'tog-editondblclick' => '撳兩下改嘢(需要JavaScript)',
+'tog-showtoolbar' => '顯示修改工具列',
+'tog-editondblclick' => '撳兩下改嘢',
 'tog-editsectiononrightclick' => '可以撳右掣更改個別段落(需要JavaScript)',
 'tog-rememberpassword' => '響呢個瀏覽器度記住我嘅登入資料 (最高維持$1{{PLURAL:$1|日|日}})',
 'tog-watchcreations' => '將我開嘅頁加入監視清單',
@@ -257,7 +258,7 @@ $messages = array(
 'tog-enotifminoredits' => '小修改都要電郵通知我',
 'tog-enotifrevealaddr' => '喺電郵通知信上面話畀人聽我嘅電郵地址',
 'tog-shownumberswatching' => '顯示有幾多人監視',
-'tog-oldsig' => '原有簽名嘅預覽:',
+'tog-oldsig' => '現有簽名:',
 'tog-fancysig' => '將簽名以維基字對待(冇自動連結)',
 'tog-uselivepreview' => '用即時預覽(需要JavaScript)(實驗緊)',
 'tog-forceeditsummary' => '我冇入修改註解時通知我',
@@ -270,7 +271,6 @@ $messages = array(
 'tog-ccmeonemails' => '當我寄電郵畀其他人嗰陣寄返封副本畀我',
 'tog-diffonly' => '響差異下面唔顯示頁面內容',
 'tog-showhiddencats' => '顯示隱藏類',
-'tog-noconvertlink' => '唔轉連結標題',
 'tog-norollbackdiff' => '進行反轉之後略過差異',
 'tog-useeditwarning' => '當我離開未保存好嘅修改嗰陣警告我',
 'tog-prefershttps' => '簽到後繼續用加密連線',
@@ -337,6 +337,18 @@ $messages = array(
 'oct' => '10月',
 'nov' => '11月',
 'dec' => '12月',
+'january-date' => '1月$1號',
+'february-date' => '2月$1號',
+'march-date' => '3月$1號',
+'april-date' => '4月$1號',
+'may-date' => '5月$1號',
+'june-date' => '6月$1號',
+'july-date' => '7月$1號',
+'august-date' => '8月$1號',
+'september-date' => '9月$1號',
+'october-date' => '10月$1號',
+'november-date' => '11月$1號',
+'december-date' => '12月$1號',
 
 # Categories related messages
 'pagecategories' => '屬於$1類',
@@ -383,7 +395,6 @@ $messages = array(
 'vector-action-protect' => '保護',
 'vector-action-undelete' => '去睇刪除咗嘅頁面',
 'vector-action-unprotect' => '解除保護',
-'vector-simplesearch-preference' => '打開加強搵嘢建議(只限Vector畫面)',
 'vector-view-create' => '建立',
 'vector-view-edit' => '編輯',
 'vector-view-history' => '睇吓歷史',
@@ -486,6 +497,7 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => '由 "$1" 收',
 'youhavenewmessages' => '你有$1($2)。',
+'newmessageslinkplural' => '新訊息',
 'youhavenewmessagesmulti' => '你響 $1 有新信',
 'editsection' => '編輯',
 'editold' => '編輯',
@@ -612,8 +624,13 @@ $1',
 'gotaccount' => '已經有戶口? $1。',
 'gotaccountlink' => '登入',
 'userlogin-resetlink' => '唔記得簽到資料?',
+'userlogin-resetpassword-link' => '唔記得密碼?',
+'userlogin-createanother' => '開過個戶口',
+'createacct-emailrequired' => '電郵地址',
 'createaccountmail' => '用電郵',
 'createaccountreason' => '原因:',
+'createacct-reason-ph' => '開過個戶口嘅原因',
+'createacct-submit' => '開戶口',
 'badretype' => '你入嘅密碼唔一致。',
 'userexists' => '你入嘅用戶名已經有人用咗,唔該揀過個名啦。',
 'loginerror' => '登入錯誤',
@@ -636,7 +653,7 @@ $1',
 'passwordtooshort' => '你嘅密碼最少要有$1個半形字元。',
 'password-name-match' => '你嘅密碼一定要同你嘅用戶名唔一樣。',
 'password-login-forbidden' => '呢個用戶名同密碼嘅利用係被禁止嘅。',
-'mailmypassword' => '寄個新密碼',
+'mailmypassword' => '重設密碼',
 'passwordremindertitle' => '{{SITENAME}}嘅新臨時密碼',
 'passwordremindertext' => '有人(可能係你,IP 位置 $1)
 請求 {{SITENAME}} 嘅新密碼 ($4)。
@@ -671,6 +688,7 @@ $1',
 'login-throttled' => '你已經試咗太多次登入動作。請等多一陣再試過。',
 'loginlanguagelabel' => '語言:$1',
 'suspicious-userlogout' => '你去登出嘅要求已經拒絕咗,因為佢可能由壞咗嘅瀏覽器或者快取代理傳送。',
+'pt-createaccount' => '開戶口',
 
 # Email sending
 'php-mail-error-unknown' => '響 PHP 嘅 mail() 參數度出現咗未知嘅錯誤',
@@ -696,7 +714,18 @@ $1',
 
 # Special:PasswordReset
 'passwordreset' => '密碼重設',
-'passwordreset-username' => '用戶名',
+'passwordreset-legend' => '重設密碼',
+'passwordreset-username' => '用戶名:',
+'passwordreset-domain' => '域名:',
+'passwordreset-email' => '電郵地址:',
+'passwordreset-emailelement' => '用戶名:$1
+臨時密碼:$2',
+
+# Special:ChangeEmail
+'changeemail' => '改電郵地址',
+'changeemail-submit' => '轉電郵',
+'changeemail-cancel' => '取消',
+'changeemail-throttled' => '你試咗登入太多次,請喺$1後再試過。',
 
 # Edit page toolbar
 'bold_sample' => '粗體字',
@@ -806,6 +835,7 @@ $1',
 'note' => "'''留意:'''",
 'previewnote' => "'''請記住呢個只係預覽。'''
 更改嘅内容重未儲存!",
+'continue-editing' => '去編輯區',
 'previewconflict' => '呢個預覽係反映如果你選擇儲存嘅話,嘅上面嘅文字編輯區裏面嘅字會儲存落嚟。',
 'session_fail_preview' => "'''對唔住!由於小節嘅資料唔見咗,我哋唔能夠處理你嘅編輯。'''
 請再試過喇。如果仍然唔得嘅話,試下[[Special:UserLogout|登出]],然後重新登入。",
@@ -930,7 +960,7 @@ $1',
 'history-fieldset-title' => '瀏覽歷史',
 'history-show-deleted' => '只顯示刪除咗嘅',
 'histfirst' => '最早',
-'histlast' => '最',
+'histlast' => '最',
 'historysize' => '($1 {{PLURAL:$1|byte|bytes}})',
 'historyempty' => '(空)',
 
@@ -985,8 +1015,6 @@ $1',
 'revdelete-show-file-submit' => '係',
 'revdelete-selected' => "'''揀[[:$1]]嘅$2次修訂:'''",
 'logdelete-selected' => "'''揀[[:$1]]嘅日誌事件:'''",
-'revdelete-text' => "'''刪除咗嘅修訂係會仍然出現喺個頁面歷史以及日誌度,但係佢哋嘅文字內容係唔可以供公眾瀏覽。'''
-其他喺{{SITENAME}}嘅管理員仍然可以睇已經隱藏咗嘅內容,同埋可以透過同一個介面去反刪除佢,除非已經設定咗附加嘅限制。",
 'revdelete-confirm' => '請確認你肯定去做嘅話,你就要明白到後果,同埋呢個程序符合[[{{MediaWiki:Policy-url}}|政策]]。',
 'revdelete-suppress-text' => "壓制'''只'''應該響下面嘅情況之下進行:
 * 唔合適嘅個人資料
@@ -1187,7 +1215,7 @@ $1",
 'prefs-emailconfirm-label' => '電郵確認:',
 'youremail' => '電郵:',
 'username' => '用戶名:',
-'uid' => '用戶 ID:',
+'uid' => '{{GENDER:$1|用戶}}ID:',
 'prefs-memberingroups' => '{{PLURAL:$1|一|多}}組嘅成員:',
 'prefs-registration' => '註冊時間:',
 'yourrealname' => '真名:',
@@ -1262,8 +1290,8 @@ $1",
 
 'group-user-member' => '用戶',
 'group-autoconfirmed-member' => '自動確認用戶',
-'group-bot-member' => '機械人',
-'group-sysop-member' => '操作員',
+'group-bot-member' => '{{GENDER:$1|機械人}}',
+'group-sysop-member' => '{{GENDER:$1|管理員}}',
 'group-bureaucrat-member' => '事務員',
 'group-suppress-member' => '監督',
 
@@ -1543,6 +1571,10 @@ $1',
 'upload-unknown-size' => '未知嘅大細',
 'upload-http-error' => '一個HTTP錯誤發生咗: $1',
 
+# File backend
+'backend-fail-notexists' => '檔案$1唔存在。',
+'backend-fail-delete' => '刪唔到檔案「$1」。',
+
 # ZipDirectoryReader
 'zip-file-open-error' => '在開啟檔案進行ZIP檢查時出錯。',
 'zip-wrong-format' => '呢個唔係一個ZIP檔案。',
@@ -1785,6 +1817,7 @@ $1',
 'protectedpages-indef' => '只有無期保謢頁',
 'protectedpages-cascade' => '只有連串保護頁',
 'protectedpagesempty' => '響呢啲參數度,現時無頁面響度保護緊。',
+'protectedpages-reason' => '原因',
 'protectedtitles' => '保護咗嘅標題',
 'protectedtitlesempty' => '響呢啲參數之下並無標題保護住。',
 'listusers' => '用戶一覽',
@@ -1818,7 +1851,7 @@ $1',
 
 # Special:Log
 'specialloguserlabel' => '用戶:',
-'speciallogtitlelabel' => '標題:',
+'speciallogtitlelabel' => '目標(題目或者用戶):',
 'log' => '日誌',
 'all-logs-page' => '全部嘅公共日誌',
 'alllogstext' => '響{{SITENAME}}度全部日誌嘅綜合顯示。你可以選擇一個日誌類型、用戶名、或者受影響嘅頁面,嚟縮窄顯示嘅範圍。',
@@ -1929,7 +1962,7 @@ $1',
 'usermessage-editor' => '系統訊息',
 
 # Watchlist
-'watchlist' => '監視單',
+'watchlist' => '監視單',
 'mywatchlist' => '監視清單',
 'watchlistfor2' => '$1嘅監視清單 $2',
 'nowatchlist' => '你嘅監視清單度並冇任何項目。',
@@ -2066,8 +2099,8 @@ wiki: $PAGEEDITOR_WIKI
 'protect-cascadeon' => '呢一版現時正響度保護緊,因為佢係響以下嘅{{PLURAL:$1|一|幾}}頁度包含咗,而當中又開咗連串保護。你可以更改呢一版嘅保護等級,但係呢個修改係唔會影響到嗰個連串保護。',
 'protect-default' => '容許全部用戶',
 'protect-fallback' => '需要"$1"嘅許可',
-'protect-level-autoconfirmed' => '限制新嘅同未註冊嘅用戶',
-'protect-level-sysop' => '只限操作員',
+'protect-level-autoconfirmed' => '只限已經自動確認嘅用戶',
+'protect-level-sysop' => '只限管理員',
 'protect-summary-cascade' => '連串保護',
 'protect-expiring' => '響 $1 (UTC) 到期',
 'protect-expiry-indefinite' => '唔定',
index 145427a..81f32f8 100644 (file)
@@ -191,7 +191,6 @@ $messages = array(
 'vector-action-protect' => 'Bescherm',
 'vector-action-undelete' => 'Plaets truhhe',
 'vector-action-unprotect' => "Beveiligienge anpass'n",
-'vector-simplesearch-preference' => "Verbetterde zoeksuggesties anzett'n (alleêne vò 't Vector uterlik)",
 'vector-view-create' => 'Anmaeken',
 'vector-view-edit' => 'Bewerk',
 'vector-view-history' => "Geschiedenisse bekiek'n",
index 1c2910b..039ab0c 100644 (file)
@@ -37,6 +37,7 @@
  * @author Jding2010
  * @author Jetlag
  * @author Jidanni
+ * @author Jienus
  * @author Jimmy xu wrk
  * @author Kaganer
  * @author KaiesTse
  * @author Wrightbus
  * @author Xiaomingyan
  * @author Yfdyh000
+ * @author Zoglun
  * @author 乌拉跨氪
  * @author 御坂美琴
  * @author 燃玉
+ * @author 范
  * @author 阿pp
  */
 
@@ -419,7 +422,6 @@ $messages = array(
 'tog-ccmeonemails' => '把我给其他用户发送的电子邮件的副本发送给我',
 'tog-diffonly' => '不在差异下面显示页面内容',
 'tog-showhiddencats' => '显示隐藏分类',
-'tog-noconvertlink' => '停用链接文字转换',
 'tog-norollbackdiff' => '执行回退后不显示差异',
 'tog-useeditwarning' => '当我离开有未保存更改的编辑页面时提醒我',
 'tog-prefershttps' => '登录时始终使用安全连接',
@@ -547,7 +549,6 @@ $messages = array(
 'vector-action-protect' => '保护',
 'vector-action-undelete' => '还原',
 'vector-action-unprotect' => '更改保护',
-'vector-simplesearch-preference' => '启用简化的搜索栏(仅Vector皮肤)',
 'vector-view-create' => '创建',
 'vector-view-edit' => '编辑',
 'vector-view-history' => '查看历史',
@@ -823,8 +824,6 @@ $2',
 'gotaccountlink' => '登录',
 'userlogin-resetlink' => '忘记你的登录信息?',
 'userlogin-resetpassword-link' => '忘记密码?',
-'helplogin-url' => 'Help:登录',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|登录帮助]]',
 'userlogin-loggedin' => '你已经以{{GENDER:$1|$1}}的身份登录。使用下面的表格以其他用户的身份登录。',
 'userlogin-createanother' => '创建另一个账户',
 'createacct-join' => '请在下面输入你的信息。',
@@ -843,9 +842,9 @@ $2',
 'createacct-submit' => '创建您的账户',
 'createacct-another-submit' => '创建另一个账户',
 'createacct-benefit-heading' => '{{SITENAME}}是由像您这样的人建立的。',
-'createacct-benefit-body1' => '{{PLURAL:$1|编辑}}',
-'createacct-benefit-body2' => '{{PLURAL:$1|页面}}',
-'createacct-benefit-body3' => '最近{{PLURAL:$1|贡献者}}',
+'createacct-benefit-body1' => '{{PLURAL:$1|编辑}}',
+'createacct-benefit-body2' => '{{PLURAL:$1|页面}}',
+'createacct-benefit-body3' => '最近{{PLURAL:$1|贡献者}}',
 'badretype' => '您所输入的密码并不相同。',
 'userexists' => '用户名已存在。请使用其他名称。',
 'loginerror' => '登录错误',
@@ -906,6 +905,10 @@ $2',
 'suspicious-userlogout' => '注销请求被拒绝,因为它似乎是由有设计缺陷的浏览器或缓存代理发出的。',
 'createacct-another-realname-tip' => '真实姓名是选填项目。
 如果你选择提供它,它将会用于贡献署名。',
+'pt-login' => '登录',
+'pt-login-button' => '登录',
+'pt-createaccount' => '创建账户',
+'pt-userlogout' => '退出',
 
 # Email sending
 'php-mail-error-unknown' => '在 PHP 的 mail() 函数中的未知错误',
@@ -914,7 +917,7 @@ $2',
 
 # Change password dialog
 'changepassword' => '更改密码',
-'resetpass_announce' => '您是通过发送到电子邮箱的临时密码登录的。要完成登录,请设定一个新的密码:',
+'resetpass_announce' => '要完成登录,您必须设置一个新密码。',
 'resetpass_text' => '<!-- 在这里添加文字 -->',
 'resetpass_header' => '更改账户密码',
 'oldpassword' => '旧密码:',
@@ -928,8 +931,14 @@ $2',
 'resetpass-submit-loggedin' => '更改密码',
 'resetpass-submit-cancel' => '取消',
 'resetpass-wrong-oldpass' => '临时密码或当前密码无效。您可能已经更改了您的密码,或者请求了新的临时密码。',
+'resetpass-recycled' => '请重置您的密码为与当前密码不同的密码。',
+'resetpass-temp-emailed' => '您通过一个暂时电子邮件发送的代码登录。要完成登录,您必须在此设置一个新密码:',
 'resetpass-temp-password' => '临时密码:',
 'resetpass-abort-generic' => '密码更改已被一个扩展插件中止。',
+'resetpass-expired' => '您的密码已经过期。请设置一个新的密码登录。',
+'resetpass-expired-soft' => '您的密码已过期并且需要重置。请现在选择一个新密码,或单击“{{int:resetpass-submit-cancel}}”以便稍后重置。',
+'resetpass-validity-soft' => '您的密码无效:$1
+请选择一个新密码,或单击“{{int:resetpass-submit-cancel}}”以稍后重置。',
 
 # Special:PasswordReset
 'passwordreset' => '重置密码',
@@ -1012,11 +1021,11 @@ $2
 'subject' => '标题:',
 'minoredit' => '标记为小编辑',
 'watchthis' => '监视本页',
-'savearticle' => '保存本页',
+'savearticle' => '保存页面',
 'preview' => '预览',
 'showpreview' => '显示预览',
 'showlivepreview' => '实时预览',
-'showdiff' => '显示差异',
+'showdiff' => '显示更改',
 'anoneditwarning' => "'''警告:'''你没有登录。你的IP地址将被记录在该页面的编辑历史中。",
 'anonpreviewwarning' => "''你没有登录。保存会记录你的IP地址于该页面的编辑历史中。''",
 'missingsummary' => "'''提示:'''你没有提供编辑摘要。如果你再次点击“{{int:savearticle}}”,你的编辑将不带编辑摘要保存。",
@@ -1085,7 +1094,7 @@ $2
 'updated' => '(已更新)',
 'note' => "'''注意:'''",
 'previewnote' => "'''请记住这只是预览。'''你的更改还没有保存!",
-'continue-editing' => 'å¾\80ç¼\96è¾\91æ¡\86',
+'continue-editing' => 'å\89\8då¾\80ç¼\96è¾\91å\8cº',
 'previewconflict' => '该预览反映了上面文字编辑区中的文字在你保存后的显示状况。',
 'session_fail_preview' => "'''对不起!由于会话数据丢失,我们无法处理你的编辑。'''请重试。如果仍然失败,请尝试[[Special:UserLogout|退出登录]]后重新登录。",
 'session_fail_preview_html' => "'''对不起!由于会话数据丢失,我们无法处理你的编辑。'''
@@ -1193,6 +1202,7 @@ $2
 'undo-success' => '该编辑可以被撤销。请检查下面的对比以核实你想要撤销的内容,然后保存下面的更改以完成撤销。',
 'undo-failure' => '因存在冲突的中间编辑,本编辑不能撤销。',
 'undo-norev' => '该编辑无法撤消,因为它不存在或已被删除。',
+'undo-nochange' => '这次编辑似乎已被撤销。',
 'undo-summary' => '撤销[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])的版本$1',
 'undo-summary-username-hidden' => '取消由一匿名用户所作的修订$1',
 
@@ -1263,8 +1273,10 @@ $3给出的原因是“$2”。",
 'revdelete-show-file-submit' => '是',
 'revdelete-selected' => "'''选取'''[[:$1]]'''的$2次修订:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|选取的日志项目}}:'''",
-'revdelete-text' => "'''删除的版本仍将显示在页面历史及日志中,但公众已不能访问其文本内容。'''
-在{{SITENAME}}的其他管理员将仍能访问隐藏的内容并通过该界面恢复删除的版本,除非进行了额外限制。",
+'revdelete-text-text' => '已删除修订仍将在页面历史中显示,但涉及部分的内容将对公众不可见。',
+'revdelete-text-file' => '已删除文件版本仍将在文件历史中显示,但涉及部分的内容将对公众不可见。',
+'logdelete-text' => '已删除日志事件仍将在日志中显示,但涉及部分的内容将对公众不可见。',
+'revdelete-text-others' => '在{{SITENAME}}的其他管理员仍将可以访问隐藏内容,并在一定条件下能够通过相同界面取消删除,除非附加条件被设定。',
 'revdelete-confirm' => '请确认该操作,明白其后果,并确保该操作符合[[{{MediaWiki:Policy-url}}|方针]]。',
 'revdelete-suppress-text' => "阻止应'''仅'''用于以下情况:
 * 潜在的诽谤信息
@@ -1352,7 +1364,7 @@ $1",
 'showhideselectedversions' => '显示/隐藏选择的版本',
 'editundo' => '撤销',
 'diff-empty' => '(没有差异)',
-'diff-multi-sameuser' => '(相同用户的{{PLURAL:$1|一个|$1个}}中间修订版本未显示',
+'diff-multi-sameuser' => '(相同用户的{{PLURAL:$1|一个|$1个}}中间修订版本未显示',
 'diff-multi-otherusers' => '({{PLURAL:$1|某位用户|$2位用户}}的{{PLURAL:$1|一个|$1个}}中间修订版本未显示)',
 'diff-multi-manyusers' => '(未显示超过$2个用户的$1个中间版本)',
 'difference-missing-revision' => '此差异对比的{{PLURAL:$2|一个修订|$2个修订}}($1){{PLURAL:$2|没有}}找到。
@@ -1393,13 +1405,14 @@ $1",
 'search-file-match' => '(匹配文件内容)',
 'search-suggest' => '您是不是要找:$1',
 'search-interwiki-caption' => '姊妹项目',
-'search-interwiki-default' => '$1项结果:',
+'search-interwiki-default' => '来自$1的结果:',
 'search-interwiki-more' => '(更多)',
 'search-relatedarticle' => '相关',
 'searcheverything-enable' => '在所有名字空间中搜索',
 'searchrelated' => '相关',
 'searchall' => '所有',
 'showingresults' => "下面显示从第'''$2'''条结果开始的'''$1'''条结果。",
+'showingresultsinrange' => '以下显示从#<strong>$2</strong>至#<strong>$3</strong>范围的<strong>$1</strong>个结果。',
 'showingresultsnum' => "下面显示从第'''$2'''条结果开始的'''$3'''条结果。",
 'showingresultsheader' => "关于'''$4'''的{{PLURAL:$5|第'''$1'''条结果,共'''$3'''条结果|第'''$1~$2'''条结果,共'''$3'''条结果}}",
 'search-nonefound' => '找不到和查询相匹配的结果。',
@@ -1410,7 +1423,7 @@ $1",
 'powersearch-toggleall' => '全选',
 'powersearch-togglenone' => '全不选',
 'search-external' => '外部搜索',
-'searchdisabled' => '{{SITENAME}}的搜索已被禁用。您可以暂时使用Google进行搜索,须注意他们索引的{{SITENAME}}内容可能会过时。',
+'searchdisabled' => '{{SITENAME}}的搜索已被禁用。您可以暂时使用搜索引擎进行搜索,须注意他们索引的{{SITENAME}}内容可能不是最新的。',
 'search-error' => '搜索时发生错误:$1',
 
 # Preferences page
@@ -1451,7 +1464,7 @@ $1",
 'recentchangesdays-max' => '最多$1天',
 'recentchangescount' => '默认显示的编辑数:',
 'prefs-help-recentchangescount' => '这包括最近更改、页面历史和日志。',
-'prefs-help-watchlist-token2' => 'è¿\99æ\98¯ä½ ç\9a\84ç\9b\91è§\86å\88\97表ç½\91页feedç\9a\84å¯\86é\92¥ã\80\82ä»»ä½\95ç\9f¥é\81\93å®\83ç\9a\84人å\9d\87å\8f¯ä»¥é\98\85读你ç\9a\84ç\9b\91è§\86å\88\97表ï¼\8cå\9b æ­¤ä¸\8dè¦\81å\88\86享å®\83ã\80\82[[Special:ResetTokens|å¦\82æ\9e\9cé\9c\80è¦\81é\87\8dç½®å®\83ï¼\8c请ç\82¹å\87»è¿\99é\87\8c]]。',
+'prefs-help-watchlist-token2' => 'è¿\99æ\98¯ä½ ç\9a\84ç\9b\91è§\86å\88\97表ç\9a\84ç½\91ç»\9cfeedç\9a\84å¯\86é\92¥ã\80\82ä»»ä½\95ç\9f¥é\81\93å®\83ç\9a\84人å\9d\87å\8f¯ä»¥é\98\85读你ç\9a\84ç\9b\91è§\86å\88\97表ï¼\8cå\9b æ­¤è¯·ä¸\8dè¦\81å\88\86享å®\83ã\80\82å¦\82æ\9e\9cé\9c\80è¦\81ï¼\8c[[Special:ResetTokens|ä½ å\8f¯ä»¥é\87\8dç½®å®\83]]。',
 'savedprefs' => '你的系统设置已保存。',
 'timezonelegend' => '时区:',
 'localtime' => '当地时间:',
@@ -1709,16 +1722,28 @@ $1",
 'recentchanges-label-unpatrolled' => '该编辑尚未巡查',
 'recentchanges-label-plusminus' => '该页面字节数的前后变化',
 'recentchanges-legend-heading' => "'''说明:'''",
-'recentchanges-legend-newpage' => '(见[[Special:NewPages|新页面列表]])',
+'recentchanges-legend-newpage' => '(见[[Special:NewPages|新页面列表]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "下面是'''$2'''之后的更改(最多显示'''$1'''个)。",
+'rcnotefrom' => '下面是<strong>$2</strong>之后的更改(最多显示<strong>$1</strong>个)。',
 'rclistfrom' => '显示$1之后的新更改',
 'rcshowhideminor' => '$1小编辑',
+'rcshowhideminor-show' => '显示',
+'rcshowhideminor-hide' => '隐藏',
 'rcshowhidebots' => '$1机器人',
+'rcshowhidebots-show' => '显示',
+'rcshowhidebots-hide' => '隐藏',
 'rcshowhideliu' => '$1注册用户',
+'rcshowhideliu-show' => '显示',
+'rcshowhideliu-hide' => '隐藏',
 'rcshowhideanons' => '$1匿名用户',
+'rcshowhideanons-show' => '显示',
+'rcshowhideanons-hide' => '隐藏',
 'rcshowhidepatr' => '$1已巡查的编辑',
+'rcshowhidepatr-show' => '显示',
+'rcshowhidepatr-hide' => '隐藏',
 'rcshowhidemine' => '$1我的编辑',
+'rcshowhidemine-show' => '显示',
+'rcshowhidemine-hide' => '隐藏',
 'rclinks' => '显示最后$2天的最后$1个更改<br />$3',
 'diff' => '差异',
 'hist' => '历史',
@@ -1835,6 +1860,8 @@ $1",
 'uploaddisabledtext' => '文件上传已停用。',
 'php-uploaddisabledtext' => 'PHP文件上传停用。请检查file_uploads设置。',
 'uploadscripted' => '该文件包含可能被网络浏览器错误解释的 HTML 或脚本代码。',
+'uploadscriptednamespace' => '此SVG文件包含非法名字空间“$1”',
+'uploadinvalidxml' => '上传文件中的XML无法解析。',
 'uploadvirus' => '该文件包含病毒!
 详情:$1',
 'uploadjava' => '该文件是 ZIP 文件,其中包含 Java 的.class 文件。
@@ -2177,10 +2204,20 @@ $1',
 'deadendpagestext' => '以下页面没有链接至{{SITENAME}}的其它页面。',
 'protectedpages' => '受保护页面',
 'protectedpages-indef' => '仅无限期保护',
+'protectedpages-summary' => '本页面列出当前受保护的页面。要浏览受限制创建的标题列表,请参见[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]。',
 'protectedpages-cascade' => '仅连锁保护',
 'protectedpages-noredirect' => '隐藏重定向',
 'protectedpagesempty' => '在这些参数下没有页面正在保护。',
+'protectedpages-timestamp' => '时间戳',
+'protectedpages-page' => '页面',
+'protectedpages-expiry' => '到期',
+'protectedpages-performer' => '保护用户',
+'protectedpages-params' => '保护参数',
+'protectedpages-reason' => '原因',
+'protectedpages-unknown-timestamp' => '未知',
+'protectedpages-unknown-performer' => '未知用户',
 'protectedtitles' => '受保护标题',
+'protectedtitles-summary' => '本页面列出当前限制创建的标题。要浏览受限制页面的列表,请参见[[{{#special:ProtectedPages}}|{{int:protectedpages}}]]。',
 'protectedtitlesempty' => '在这些参数之下并无标题正在保护。',
 'listusers' => '用户列表',
 'listusers-editsonly' => '只显示有编辑的用户',
@@ -2359,8 +2396,8 @@ $1',
 'watchmethod-list' => '查看监视页中的最新修改',
 'watchlistcontains' => '您的监视列表包含$1个页面。',
 'iteminvalidname' => "页面'$1'错误,无效命名...",
-'wlnote2' => '以下是最近<strong>$1</strong>小时的变化,作为$2,$3。',
-'wlshowlast' => '显示过去$1小时或$2天内的$3',
+'wlnote2' => '以下是最近<strong>$1</strong>小时的变化,截至$2 $3。',
+'wlshowlast' => '显示过去$1小时$2天$3',
 'watchlist-options' => '监视列表选项',
 
 # Displayed when you click the "watch" button and it is in the process of watching
@@ -2374,7 +2411,7 @@ $1',
 'enotif_subject_deleted' => '{{SITENAME}}页面$1已被$2删除',
 'enotif_subject_created' => '{{SITENAME}}页面$1已被$2创建',
 'enotif_subject_moved' => '{{SITENAME}}页面$1已被$2移动',
-'enotif_subject_restored' => '{{SITENAME}}页面$1已被$2恢复',
+'enotif_subject_restored' => '{{SITENAME}}页面$1已经被$2{{GENDER:$2|还原}}',
 'enotif_subject_changed' => '{{SITENAME}}页面$1已被$2更改',
 'enotif_body_intro_deleted' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|删除}},请见$3。',
 'enotif_body_intro_created' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|创建}},请浏览<$3>查看当前版本。',
@@ -2442,7 +2479,7 @@ $UNWATCHURL
 'delete-edit-reasonlist' => '编辑删除原因',
 'delete-toobig' => '这个页面有一个十分大量的编辑历史,超过$1次修订。删除此类页面的动作已经被限制,以防止在{{SITENAME}}上的意外扰乱。',
 'delete-warning-toobig' => '这个页面有一个十分大量的编辑历史,超过$1次修订。删除它可能会扰乱{{SITENAME}}的数据库操作;在继续此动作前请小心。',
-'deleting-backlinks-warning' => "'''警告:'''有其他页面链接至或transclude自您要删除的页面。",
+'deleting-backlinks-warning' => "'''警告:'''有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他页面]]链接至或包含您要删除的页面。",
 
 # Rollback
 'rollback' => '回退编辑',
@@ -2533,7 +2570,7 @@ $UNWATCHURL
 
 # Undelete
 'undelete' => '查看被删除页面',
-'undeletepage' => 'æµ\8fè§\88å\8f\8aæ\81¢å¤\8d被å\88 页面',
+'undeletepage' => 'æ\9f¥ç\9c\8bå\92\8cè¿\98å\8e\9f被å\88 é\99¤ç\9a\84页面',
 'undeletepagetitle' => "'''以下包含[[:$1]]的已删除之修订版本'''。",
 'viewdeletedpage' => '查看被删页面',
 'undeletepagetext' => '以下{{PLURAL:$1|页面|$1个页面}}已被删除,但依然在归档中并可以被恢复。归档可能会被定时清理。',
@@ -2570,7 +2607,7 @@ $1',
 'undelete-bad-store-key' => '不能删除带有时间戳的文件修订$1:文件在删除前遗失。',
 'undelete-cleanup-error' => '删除无用的存档文件“$1”时发生错误。',
 'undelete-missing-filearchive' => '由于文件存档 ID $1 不在数据库中,不能在文件存档中恢复。它可能已经被恢复了。',
-'undelete-error' => '恢复已删除页面时出错',
+'undelete-error' => '还原页面出错',
 'undelete-error-short' => '恢复被删文件时发生错误:$1',
 'undelete-error-long' => '恢复被删除的文件时出错:
 
@@ -2610,8 +2647,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => '这个IP地址现时正在被封锁中。
 最近的封锁日志项目在下面提供以便参考:',
 'sp-contributions-search' => '搜索贡献',
+'sp-contributions-suppresslog' => '已被删除的用户贡献',
 'sp-contributions-username' => 'IP地址或用户名:',
 'sp-contributions-toponly' => '仅显示最后版本的编辑',
+'sp-contributions-newonly' => '仅显示创建页面的编辑',
 'sp-contributions-submit' => '搜索',
 
 # What links here
@@ -2713,8 +2752,8 @@ $1',
 'change-blocklink' => '更改封禁',
 'contribslink' => '贡献',
 'emaillink' => '发送电子邮件',
-'autoblocker' => '由于您与“[[User:$1|$1]]”共享一个IP地址而被自动封禁。
-$1被封禁的理由是“$2”',
+'autoblocker' => '因为您与“[[User:$1|$1]]”共享一个IP地址而被自动封禁。
+$1被封禁的理由是“$2”',
 'blocklogpage' => '封禁日志',
 'blocklog-showlog' => '该用户曾被封禁。下面提供封禁日志以供参考:',
 'blocklog-showsuppresslog' => '该用户曾被封禁并隐藏。下面提供封锁日志以供参考:',
@@ -2891,7 +2930,7 @@ $1被封禁的理由是:“$2”',
 'allmessages-filter-legend' => '过滤',
 'allmessages-filter' => '按自定义状态过滤:',
 'allmessages-filter-unmodified' => '未修改',
-'allmessages-filter-all' => '所有',
+'allmessages-filter-all' => '全部',
 'allmessages-filter-modified' => '曾修改',
 'allmessages-prefix' => '以前缀过滤:',
 'allmessages-language' => '语言:',
@@ -2913,6 +2952,7 @@ $2',
 'thumbnail_image-type' => '图像类型不支持',
 'thumbnail_gd-library' => '未完成的GD设置:功能遗失 $1',
 'thumbnail_image-missing' => '文件可能丢失:$1',
+'thumbnail_image-failure-limit' => '近期尝试生成此缩略图失败太多次($1次或更多)。请稍后再试。',
 
 # Special:Import
 'import' => '导入页面',
@@ -2989,7 +3029,7 @@ $2',
 'tooltip-pt-watchlist' => '你正在监视更改的页面的列表',
 'tooltip-pt-mycontris' => '你的贡献的列表',
 'tooltip-pt-login' => '我们鼓励您登录,不过这不是强制的',
-'tooltip-pt-logout' => '退出登录',
+'tooltip-pt-logout' => '退出',
 'tooltip-ca-talk' => '关于内容页面的讨论',
 'tooltip-ca-edit' => '你可以编辑本页面。请在保存前使用预览按钮',
 'tooltip-ca-addsection' => '开始新段落',
@@ -3064,7 +3104,7 @@ $2',
 'group-bureaucrat.css' => '/* 放置于这里的CSS将只影响机行政员 */',
 
 # Scripts
-'common.js' => '/* 这里的任何JavaScript将为所有用户在每一页面载入加载。 */',
+'common.js' => '/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */',
 'cologneblue.js' => '/* 这里的任何JavaScript将为使用科隆香水蓝皮肤的用户加载 */',
 'monobook.js' => '/* 这里的任何JavaScript将为使用MonoBook皮肤的用户加载 */',
 'modern.js' => '/* 这里的任何JavaScript将为使用现代皮肤的用户加载 */',
@@ -3113,7 +3153,7 @@ $2',
 'pageinfo-length' => '页面长度(字节)',
 'pageinfo-article-id' => '页面ID',
 'pageinfo-language' => '页面内容语言',
-'pageinfo-content-model' => '页面内容模式',
+'pageinfo-content-model' => '页面内容类型',
 'pageinfo-robot-policy' => '爬虫索引',
 'pageinfo-robot-index' => '允许',
 'pageinfo-robot-noindex' => '不允许',
@@ -4015,7 +4055,7 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 
 # New logging system
 'logentry-delete-delete' => '$1删除页面$3',
-'logentry-delete-restore' => '$1恢复页面$3',
+'logentry-delete-restore' => '$1{{GENDER:$2|还原}}页面$3',
 'logentry-delete-event' => '$1已更改$3中$5项日志的可见性:$4',
 'logentry-delete-revision' => '$1{{GENDER:$2|已更改}}$3中{{PLURAL:$5|$5个历史版本|$5个历史版本}}的可见性:$4',
 'logentry-delete-event-legacy' => '$1{{GENDER:$2|已更改}}$3中日志的可见性',
@@ -4157,7 +4197,4 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 'expand_templates_generate_rawhtml' => '显示原始HTML',
 'expand_templates_preview' => '预览',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
-'uploadinvalidxml' => '上传文件中的XML无法解析。',
 );
index c592762..d7e9963 100644 (file)
@@ -12,6 +12,7 @@
  * @author Andrew971218
  * @author Bencmq
  * @author Breawycker
+ * @author Byfserag
  * @author Ch.Andrew
  * @author Cwlin0416
  * @author Danny0838
@@ -305,7 +306,6 @@ $messages = array(
 'tog-ccmeonemails' => '當我寄電子郵件給其他使用者時,也寄一份副本到我的信箱',
 'tog-diffonly' => '比對版本差異時下面不顯示頁面內容',
 'tog-showhiddencats' => '顯示隱藏分類',
-'tog-noconvertlink' => '不轉換連結標題',
 'tog-norollbackdiff' => '回退後不做差異比對',
 'tog-useeditwarning' => '當離開頁面時編輯仍未儲存,請提醒我',
 'tog-prefershttps' => '登入時始終使用安全連線',
@@ -432,7 +432,6 @@ $messages = array(
 'vector-action-protect' => '保護',
 'vector-action-undelete' => '恢復被刪頁面',
 'vector-action-unprotect' => '更改保護',
-'vector-simplesearch-preference' => '啟用簡化搜尋欄(僅限 Vector 外觀)',
 'vector-view-create' => '建立',
 'vector-view-edit' => '編輯',
 'vector-view-history' => '檢視歷史',
@@ -716,8 +715,6 @@ $2',
 'gotaccountlink' => '登入',
 'userlogin-resetlink' => '忘記了您的登入細節?',
 'userlogin-resetpassword-link' => '忘記您的密碼?',
-'helplogin-url' => 'Help:登入',
-'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|登入幫助]]',
 'userlogin-loggedin' => '您已作為{{GENDER:$1|$1}}登錄。
 利用以下表單以作為另一賬戶登錄。',
 'userlogin-createanother' => '建立另一賬戶',
@@ -735,7 +732,7 @@ $2',
 'createacct-captcha' => '安全驗證',
 'createacct-imgcaptcha-ph' => '輸入您在上方看到的文字',
 'createacct-submit' => '建立帳號',
-'createacct-another-submit' => '建ç«\8bå\8f¦ä¸\80å\80\8b使ç\94¨è\80\85帳è\99\9f',
+'createacct-another-submit' => '建立另一帳號',
 'createacct-benefit-heading' => '{{SITENAME}}是由像您一樣的人建立。',
 'createacct-benefit-body1' => '{{PLURAL:$1|次編輯}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|篇頁面}}',
@@ -806,6 +803,10 @@ $2',
 'suspicious-userlogout' => '您登出的要求已經被拒絕,因為它可能是由已損壞的瀏覽器或者快取代理傳送。',
 'createacct-another-realname-tip' => '真實姓名為選填。
 如果您選擇提供,它將用於貢獻署名。',
+'pt-login' => '登入',
+'pt-login-button' => '登入',
+'pt-createaccount' => '建立帳戶',
+'pt-userlogout' => '登出',
 
 # Email sending
 'php-mail-error-unknown' => '在 PHP 的 mail() 參數中的未知錯誤',
@@ -814,7 +815,7 @@ $2',
 
 # Change password dialog
 'changepassword' => '變更密碼',
-'resetpass_announce' => '您是透過一個臨時的發送到郵件中的代碼登入的。要完成登入,您必須在這裡設定一個新密碼:',
+'resetpass_announce' => '要完成登入,您必須設定一個新密碼。',
 'resetpass_text' => '<!-- 在此處加入文字 -->',
 'resetpass_header' => '變更帳號密碼',
 'oldpassword' => '舊密碼:',
@@ -829,8 +830,15 @@ $2',
 'resetpass-submit-cancel' => '取消',
 'resetpass-wrong-oldpass' => '無效的臨時或現有的密碼。
 您可能已成功地更改了您的密碼,或者已經請求一個新的臨時密碼。',
+'resetpass-recycled' => '請將您的密碼重置為不同一個。',
+'resetpass-temp-emailed' => '您是透過一個臨時的發送到郵件中的代碼登入的。要完成登入,您必須在這裡設定一個新密碼:',
 'resetpass-temp-password' => '臨時密碼:',
 'resetpass-abort-generic' => '擴充元件已中止了更改密碼操作。',
+'resetpass-expired' => '您的密碼已過期。請設置新密碼以登錄。',
+'resetpass-expired-soft' => '您的密碼已過期,現需重置。請設置新密碼以登錄,或點擊“{{int:resetpass-submit-cancel}}”以稍後重置。',
+'resetpass-validity-soft' => '您的密碼無效:$1 
+
+請選擇一個新密碼,或點擊「{{int:resetpass-submit-cancel}}」以稍後重置。',
 
 # Special:PasswordReset
 'passwordreset' => '重新設定密碼',
@@ -1087,7 +1095,7 @@ $2
 'content-failed-to-parse' => '未能轉換$2 內容成為$1:$3',
 'invalid-content-data' => '內容資料無效',
 'content-not-allowed-here' => '[[$2]]頁面上不允許「$1」內容',
-'editwarning-warning' => '離開這個頁面可能會令您失去之前作出的所有更改。若您已經登入,您可在偏好設定的「編輯」部份裡關閉此警告。',
+'editwarning-warning' => '離開這個頁面可能會令您失去之前作出的所有更改。若您已經登入,您可在偏好設定的「{{int:prefs-editing}}」部份裡關閉此警告。',
 'editpage-notsupportedcontentformat-title' => '內容格式尚無法支援',
 'editpage-notsupportedcontentformat-text' => '內容模型$2尚無法支援內容格式$1。',
 
@@ -1123,6 +1131,7 @@ $2
 'undo-success' => '該編輯可以被撤銷。請檢查以下對比以核實這正是您想做的,然後儲存以下更改以完成撤銷編輯。',
 'undo-failure' => '由於中途的編輯不一致,此編輯不能撤銷。',
 'undo-norev' => '由於其修訂版本不存在或已刪除,此編輯不能撤銷。',
+'undo-nochange' => '是次編輯似乎已經被撤銷。',
 'undo-summary' => '取消由[[Special:Contributions/$2|$2]] ([[User talk:$2|對話]])所作出的修訂 $1',
 'undo-summary-username-hidden' => '隱藏的用戶撤銷$1的修訂',
 
@@ -1194,8 +1203,10 @@ $3所述禁止原因為“$2”。",
 'revdelete-show-file-submit' => '是',
 'revdelete-selected' => "'''選取[[:$1]]的$2次修訂:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|選取的日誌項目}}:'''",
-'revdelete-text' => "'''刪除的修訂仍將顯示在頁面歷史中, 但它們的文字內容已不能被公眾訪問。'''
-在{{SITENAME}}的其他管理員將仍能訪問隱藏的內容並透過與此相同的介面恢復刪除,除非網站工作者進行了一些附加的限制。",
+'revdelete-text-text' => '已刪除修訂版本仍將出現於頁面歷史中,唯將不公開內容訪問。',
+'revdelete-text-file' => '已刪除檔案版本仍將出現於檔案歷史中,唯將不公開內容訪問。',
+'logdelete-text' => '已刪除日誌活動仍將出現於日誌中,唯將不公開內容訪問。',
+'revdelete-text-others' => '於{{SITENAME}}之其他管理員仍有權限訪問隱藏內容,亦可於同一界面恢復刪除,除非設定額外條件。',
 'revdelete-confirm' => '請確認您肯定去做的話,您就要明白到後果,以及這個程序符合[[{{MediaWiki:Policy-url}}|政策]]。',
 'revdelete-suppress-text' => "禁制應'''僅'''於下述情形之一時使用:
 * 潛在誹謗性資訊
@@ -1284,6 +1295,8 @@ $1",
 'showhideselectedversions' => '顯示/隱藏選定的修訂版本',
 'editundo' => '復原',
 'diff-empty' => '(沒有差異)',
+'diff-multi-sameuser' => '(未顯示同用戶所作出之$1次版本)',
+'diff-multi-otherusers' => '(未顯示$2位用戶所作出之$1次版本)',
 'diff-multi-manyusers' => '(由多於$2名用戶作出的{{PLURAL:$1|一個中途修訂版本|$1個中途修訂版本}} 未被顯示)',
 'difference-missing-revision' => '{{PLURAL:$2|1次修訂|$2 次修訂}}差異($1)不存在。
 
@@ -1304,7 +1317,7 @@ $1",
 'shown-title' => '每頁顯示 $1 項結果',
 'viewprevnext' => '檢視($1 {{int:pipe-separator}} $2)($3)',
 'searchmenu-exists' => "'''在這個 wiki 上已有一頁面叫做「[[:$1]]」。'''",
-'searchmenu-new' => "'''在這個 wiki 上建立這個頁面「[[:$1]]」!'''",
+'searchmenu-new' => '<strong>於此wiki建立這個頁面「[[:$1]]」!</strong>請參見已發現之$2條搜尋結果。',
 'searchprofile-articles' => '內容頁面',
 'searchprofile-project' => '幫助和計劃頁面',
 'searchprofile-images' => '多媒體',
@@ -1323,13 +1336,14 @@ $1",
 'search-file-match' => '(匹配檔案內容)',
 'search-suggest' => '{{GENDER:|你|妳|你}}是不是要找:$1',
 'search-interwiki-caption' => '姊妹計劃',
-'search-interwiki-default' => '$1 項結果:',
+'search-interwiki-default' => '來自$1之結果:',
 'search-interwiki-more' => '(更多)',
 'search-relatedarticle' => '相關',
 'searcheverything-enable' => '在所有名字空間中搜尋',
 'searchrelated' => '相關',
 'searchall' => '所有',
 'showingresults' => '下面顯示從第 <b>$2</b> 條開始的 <b>$1</b> 條結果:',
+'showingresultsinrange' => '以下顯示於#<strong>$2</strong>至#<strong>$3</strong>之<strong>$1</strong>個搜尋結果。',
 'showingresultsnum' => "下面顯示從第 '''$2''' 條開始的 '''{{PLURAL:$3|1|$3}}''' 條結果。",
 'showingresultsheader' => "對'''$4'''的{{PLURAL:$5|第 '''$1''' 至第 '''$3''' 項結果|第 '''$1 - $2''' 項,共 '''$3''' 項結果}}",
 'search-nonefound' => '在查詢中無結果相符。',
@@ -1644,16 +1658,28 @@ $1",
 'recentchanges-label-unpatrolled' => '這次編輯尚未巡查過',
 'recentchanges-label-plusminus' => '更改前後頁面位元組大小的變化',
 'recentchanges-legend-heading' => "'''說明:'''",
-'recentchanges-legend-newpage' => '(見[[Special:NewPages|新頁面列表]])',
+'recentchanges-legend-newpage' => '(見[[Special:NewPages|新頁面列表]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "下面是自'''$2'''(最多顯示'''$1'''):",
+'rcnotefrom' => '下面是自<strong>$2</strong>起之更改(至多顯示<strong>$1</strong>個)。',
 'rclistfrom' => '顯示自 $1 以來的新變更',
 'rcshowhideminor' => '$1小編輯',
+'rcshowhideminor-show' => '顯示',
+'rcshowhideminor-hide' => '隱藏',
 'rcshowhidebots' => '$1機器人的編輯',
+'rcshowhidebots-show' => '顯示',
+'rcshowhidebots-hide' => '隱藏',
 'rcshowhideliu' => '$1已註冊用戶',
+'rcshowhideliu-show' => '顯示',
+'rcshowhideliu-hide' => '隱藏',
 'rcshowhideanons' => '$1匿名用戶的編輯',
+'rcshowhideanons-show' => '顯示',
+'rcshowhideanons-hide' => '隱藏',
 'rcshowhidepatr' => '$1巡查過的編輯',
+'rcshowhidepatr-show' => '顯示',
+'rcshowhidepatr-hide' => '隱藏',
 'rcshowhidemine' => '$1我的編輯',
+'rcshowhidemine-show' => '顯示',
+'rcshowhidemine-hide' => '隱藏',
 'rclinks' => '顯示最近$2天內最新的$1次改動。<br />$3',
 'diff' => '差異',
 'hist' => '歷史',
@@ -1773,6 +1799,8 @@ $1",
 'uploaddisabledtext' => '檔案上傳不可用。',
 'php-uploaddisabledtext' => 'PHP 檔案上載已經停用。請檢查 file_uploads 設定。',
 'uploadscripted' => '該檔案包含可能被網路瀏覽器錯誤解釋的 HTML 或腳本代碼。',
+'uploadscriptednamespace' => '此SVG檔案中包含非法命名空間「$1」',
+'uploadinvalidxml' => '上載檔案中的XML無法解析。',
 'uploadvirus' => '該檔案包含有病毒!
 詳情:$1',
 'uploadjava' => '該檔案是 ZIP 檔案,其中包含 Java 的.class 檔案。
@@ -2124,10 +2152,20 @@ $1',
 'deadendpagestext' => '以下頁面沒有連結到{{SITENAME}}中的其它頁面。',
 'protectedpages' => '受保護頁面',
 'protectedpages-indef' => '只有無期之保護頁面',
+'protectedpages-summary' => '此頁面列出當前受保護之頁面。欲訪問受白紙保護之標題列表,請參見[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]。',
 'protectedpages-cascade' => '只有連鎖之保護頁面',
 'protectedpages-noredirect' => '隱藏重定向',
 'protectedpagesempty' => '在這些參數下沒有頁面正在保護。',
+'protectedpages-timestamp' => '時間戳',
+'protectedpages-page' => '頁面',
+'protectedpages-expiry' => '過期',
+'protectedpages-performer' => '保護用戶',
+'protectedpages-params' => '保護參數',
+'protectedpages-reason' => '原因',
+'protectedpages-unknown-timestamp' => '未知',
+'protectedpages-unknown-performer' => '未知用戶',
 'protectedtitles' => '受保護標題',
+'protectedtitles-summary' => '此頁面列出當前受白紙保護之標題。欲訪問受保護頁面之列表,請參見[[{{#special:ProtectedPages}}|{{int:protectedpages}}]]。',
 'protectedtitlesempty' => '在這些參數之下並無標題正在保護。',
 'listusers' => '用戶列表',
 'listusers-editsonly' => '只顯示有編輯的用戶',
@@ -2312,7 +2350,7 @@ $1',
 'watchmethod-list' => '檢查最近編輯的被監視頁面',
 'watchlistcontains' => '您的監視列表包含$1個頁面。',
 'iteminvalidname' => "頁面 '$1' 錯誤,無效命名...",
-'wlnote2' => '以下是新近<strong>$1</strong>小時的更改,作為$2,$3。',
+'wlnote2' => '以下是新近<strong>$1</strong>小時的更改,截至$2 $3。',
 'wlshowlast' => '顯示最近$1小時;$2天;$3的修改。',
 'watchlist-options' => '監視列表選項',
 
@@ -2398,7 +2436,7 @@ $UNWATCHURL
 'delete-edit-reasonlist' => '編輯刪除理由',
 'delete-toobig' => '這個頁面有一個十分大量的編輯歷史,超過$1次修訂。刪除此類頁面的動作已經被限制,以防止在{{SITENAME}}上的意外擾亂。',
 'delete-warning-toobig' => '這個頁面有一個十分大量的編輯歷史,超過$1次修訂。刪除它可能會擾亂{{SITENAME}}的資料庫操作;在繼續此動作前請小心。',
-'deleting-backlinks-warning' => "'''警告:'''您要刪除的頁面有其他頁面連接至此或從此頁面transclude。",
+'deleting-backlinks-warning' => "'''警告:'''您要刪除的頁面有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他頁面]]連接至此或包含此頁面。",
 
 # Rollback
 'rollback' => '回退編輯',
@@ -2571,8 +2609,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => '這個IP地址現時正在被封鎖中。
 最近的封鎖日誌項目在下面提供以便參考:',
 'sp-contributions-search' => '搜尋貢獻記錄',
+'sp-contributions-suppresslog' => '已隱藏的用戶貢獻',
 'sp-contributions-username' => 'IP位址或用戶名稱:',
 'sp-contributions-toponly' => '只顯示最新修訂版本的編輯',
+'sp-contributions-newonly' => '僅顯示建立頁面之編輯',
 'sp-contributions-submit' => '搜尋',
 
 # What links here
@@ -2674,8 +2714,8 @@ $1',
 'change-blocklink' => '變更封禁',
 'contribslink' => '貢獻',
 'emaillink' => '傳送電郵',
-'autoblocker' => '因為您與â\80\9c[[User:$1|$1]]â\80\9då\85±äº«ä¸\80å\80\8bIPå\9c°å\9d\80è\80\8c被è\87ªå\8b\95æ\9f¥å°\81ã\80\82
-$1被封禁的理由是“$2”',
+'autoblocker' => '因為您與ã\80\8c[[User:$1|$1]]ã\80\8då\85±äº«å\90\8cä¸\80IPä½\8då\9d\80è\80\8c被è\87ªå\8b\95å°\81ç¦\81ã\80\82
+$1被封禁的理由是「$2」',
 'blocklogpage' => '查封日誌',
 'blocklog-showlog' => '這位用戶曾經被封鎖過。在下列提供封鎖記錄以便參考:',
 'blocklog-showsuppresslog' => '這位用戶曾經被封鎖和隱藏過。在下列提供廢止記錄以便參考:',
@@ -2880,6 +2920,7 @@ $2',
 'thumbnail_image-type' => '圖片類型不支援',
 'thumbnail_gd-library' => '未完成的GD設定: 功能遺失 $1',
 'thumbnail_image-missing' => '檔案似乎遺失: $1',
+'thumbnail_image-failure-limit' => '新近嘗試生成此縮略圖失敗太多($1次或以上)。請稍後再試。',
 
 # Special:Import
 'import' => '匯入頁面',
@@ -2915,7 +2956,7 @@ $2',
 'importuploaderrortemp' => '上載匯入檔案失敗。臨時資料夾已遺失。',
 'import-parse-failure' => 'XML匯入語法失敗',
 'import-noarticle' => '沒有頁面作匯入!',
-'import-nonewrevisions' => '所有的修訂已經在先前匯入。',
+'import-nonewrevisions' => '並無修訂導入(全數已存在,或出錯而跳過)。',
 'xml-error-string' => '$1 於行$2,欄$3 ($4位元組): $5',
 'import-upload' => '上傳XML資料',
 'import-token-mismatch' => '小節資料遺失。請再嘗試。',
@@ -4116,7 +4157,4 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'expand_templates_generate_rawhtml' => '顯示原始HTML',
 'expand_templates_preview' => '預覽',
 
-# Unknown messages
-'createaccount-hook-aborted' => '$1',
-'uploadinvalidxml' => '上載檔案中的XML無法解析。',
 );
index 4e2e869..edd97fd 100644 (file)
@@ -5,7 +5,7 @@
  * UTS #35 Revision 33
  * http://www.unicode.org/reports/tr35/tr35-33/tr35-numbers.html#Language_Plural_Rules
  *
- * @author Niklas Laxstrom, Tim Starling
+ * @author Niklas Laxström, Tim Starling
  *
  * @copyright Copyright © 2010-2012, Niklas Laxström
  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0
index 590cad2..02156c7 100644 (file)
@@ -3,7 +3,7 @@
  * 7z stream wrapper
  *
  * Copyright © 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index fb2cd8c..d9ef350 100644 (file)
@@ -114,13 +114,6 @@ abstract class Maintenance {
         */
        public $fileHandle;
 
-       /**
-        * List of all the core maintenance scripts. This is added
-        * to scripts added by extensions in $wgMaintenanceScripts
-        * and returned by getMaintenanceScripts()
-        */
-       protected static $mCoreScripts = null;
-
        /**
         * Default constructor. Children should call this *first* if implementing
         * their own constructors
@@ -1007,52 +1000,6 @@ abstract class Maintenance {
                return __DIR__;
        }
 
-       /**
-        * Get the list of available maintenance scripts. Note
-        * that if you call this _before_ calling doMaintenance
-        * you won't have any extensions in it yet
-        * @return Array
-        */
-       public static function getMaintenanceScripts() {
-               global $wgMaintenanceScripts;
-               return $wgMaintenanceScripts + self::getCoreScripts();
-       }
-
-       /**
-        * Return all of the core maintenance scripts
-        * @return array
-        */
-       protected static function getCoreScripts() {
-               if ( !self::$mCoreScripts ) {
-                       $paths = array(
-                               __DIR__,
-                               __DIR__ . '/language',
-                               __DIR__ . '/storage',
-                       );
-                       self::$mCoreScripts = array();
-                       foreach ( $paths as $p ) {
-                               $handle = opendir( $p );
-                               while ( ( $file = readdir( $handle ) ) !== false ) {
-                                       if ( $file == 'Maintenance.php' ) {
-                                               continue;
-                                       }
-                                       $file = $p . '/' . $file;
-                                       if ( is_dir( $file ) || !strpos( $file, '.php' ) ||
-                                               ( strpos( file_get_contents( $file ), '$maintClass' ) === false ) ) {
-                                               continue;
-                                       }
-                                       require $file;
-                                       $vars = get_defined_vars();
-                                       if ( array_key_exists( 'maintClass', $vars ) ) {
-                                               self::$mCoreScripts[$vars['maintClass']] = $file;
-                                       }
-                               }
-                               closedir( $handle );
-                       }
-               }
-               return self::$mCoreScripts;
-       }
-
        /**
         * Returns a database to be used by current maintenance script. It can be set by setDB().
         * If not set, wfGetDB() will be used.
diff --git a/maintenance/archives/patch-user_password_expire.sql b/maintenance/archives/patch-user_password_expire.sql
new file mode 100644 (file)
index 0000000..3e716d3
--- /dev/null
@@ -0,0 +1,3 @@
+-- For setting a password expiration date for users
+ALTER TABLE /*$wgDBprefix*/user
+  ADD COLUMN user_password_expires varbinary(14) DEFAULT NULL;
index 2cf277f..3333408 100644 (file)
@@ -3,7 +3,7 @@
  * Corrects wrong values in the `page_latest` field in the database.
  *
  * Copyright © 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * 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
@@ -37,15 +37,21 @@ class AttachLatest extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->addOption( "fix", "Actually fix the entries, will dry run otherwise" );
+               $this->addOption( "regenerate-all",
+                       "Regenerate the page_latest field for all records in table page" );
                $this->mDescription = "Fix page_latest entries in the page table";
        }
 
        public function execute() {
                $this->output( "Looking for pages with page_latest set to 0...\n" );
                $dbw = wfGetDB( DB_MASTER );
+               $conds = array( 'page_latest' => 0 );
+               if ( $this->hasOption( 'regenerate-all' ) ) {
+                       $conds = '';
+               }
                $result = $dbw->select( 'page',
                        array( 'page_id', 'page_namespace', 'page_title' ),
-                       array( 'page_latest' => 0 ),
+                       $conds,
                        __METHOD__ );
 
                $n = 0;
index 64078b4..7161b04 100644 (file)
@@ -3,7 +3,7 @@
  * Base classes for database dumpers
  *
  * Copyright © 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 04352b9..a0ff7fe 100644 (file)
@@ -3,7 +3,7 @@
  * Helper class for the --prefetch option of dumpTextPass.php
  *
  * Copyright © 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index f16772c..24e7634 100644 (file)
@@ -3,7 +3,7 @@
  * BackupDumper that postprocesses XML dumps from dumpBackup.php to add page text
  *
  * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index bd21b18..76b5e3c 100644 (file)
@@ -63,7 +63,6 @@ class bench_strtr_str_replace extends Benchmarker {
                str_replace( "_", " ", "[[MediaWiki:Some_random_test_page]]");
        }
 
-
        function benchstrtr_indirect() {
                bfNormalizeTitleStrTr( "[[MediaWiki:Some_random_test_page]]" );
        }
index 1a47ac4..321f089 100644 (file)
@@ -7,7 +7,7 @@
  *   --dry-run  don't actually try moving them
  *
  * Copyright © 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 0e0b619..d42497d 100644 (file)
@@ -7,7 +7,7 @@
  *   --fix  Actually clean up titles; otherwise just checks for them
  *
  * Copyright © 2005-2006 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 4b8c9fe..12b1241 100644 (file)
@@ -39,7 +39,7 @@ class CleanupSpam extends Maintenance {
        }
 
        public function execute() {
-               global $wgLocalDatabases, $wgUser;
+               global $IP, $wgLocalDatabases, $wgUser;
 
                $username = wfMessage( 'spambot_username' )->text();
                $wgUser = User::newFromName( $username );
@@ -67,7 +67,9 @@ class CleanupSpam extends Maintenance {
                                        array( 'el_index' . $dbr->buildLike( $like ) ), __METHOD__ );
                                if ( $count ) {
                                        $found = true;
-                                       passthru( "php cleanupSpam.php --wiki='$wikiID' $spec | sed 's/^/$wikiID:  /'" );
+                                       $cmd = wfShellWikiCmd( "$IP/maintenance/cleanupSpam.php",
+                                               array( '--wiki', $wikiID, $spec ) );
+                                       passthru( "$cmd | sed 's/^/$wikiID:  /'" );
                                }
                        }
                        if ( $found ) {
index 5b5ef18..72b6aa5 100644 (file)
@@ -7,7 +7,7 @@
  *   --fix  Actually clean up titles; otherwise just checks for them
  *
  * Copyright © 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index f1a7b48..94e90db 100644 (file)
@@ -7,7 +7,7 @@
  *   --fix  Actually remove entries; without will only report.
  *
  * Copyright © 2005,2006 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index fabc257..723a6bf 100644 (file)
@@ -7,7 +7,7 @@
  * Templates etc are pulled from the local wiki database, not from the dump.
  *
  * Copyright © 2011 Platonides
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 978d44f..2b637cb 100644 (file)
@@ -99,9 +99,6 @@ $maintenance->finalSetup();
 // Some last includes
 require_once "$IP/includes/Setup.php";
 
-// Much much faster startup than creating a title object
-$wgTitle = null;
-
 // Do the work
 try {
        $maintenance->execute();
index 25a777c..02bfd60 100644 (file)
@@ -4,7 +4,7 @@
  * wrapper format for export or backup
  *
  * Copyright © 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 73296b7..c6b3958 100644 (file)
@@ -5,7 +5,7 @@
  * We implement below the simple task of searching inside a dump.
  *
  * Copyright © 2011 Platonides
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index be0b463..dfd1959 100644 (file)
@@ -9,7 +9,7 @@
  * Dumps ASCII text to stdout; command-line.
  *
  * Copyright © 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 5f0c5b7..784dc7a 100644 (file)
@@ -4,7 +4,7 @@
  * http://www.eekim.com/cgi-bin/wiki.pl?SisterSites
  *
  * Copyright © 2006 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 37c2a31..71895bd 100644 (file)
@@ -3,7 +3,7 @@
  * Script that postprocesses XML dumps from dumpBackup.php to add page text
  *
  * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 8ae5a5a..b5dc1e3 100644 (file)
@@ -3,7 +3,7 @@
  * Fix double redirects.
  *
  * Copyright © 2011 Ilmari Karonen <nospam@vyznev.net>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 9c8354c..fd56361 100644 (file)
@@ -65,7 +65,7 @@ class GenerateJsonI18n extends Maintenance {
                        $extensionStyle = false;
                        $langcode = $this->getOption( 'langcode' );
                        $messages = array( $langcode => $messages );
-               } else if ( $this->hasOption( 'langcode' ) ) {
+               } elseif ( $this->hasOption( 'langcode' ) ) {
                        $this->output( "Warning: --langcode option set but will not be used.\n" );
                }
 
index 1f47cf1..cec6a0e 100644 (file)
@@ -3,7 +3,7 @@
  * Import XML dump files into the current wiki.
  *
  * Copyright © 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * 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
@@ -56,7 +56,7 @@ Compressed XML files may be read directly:
 
 Note that for very large data sets, importDump.php may be slow; there are
 alternate methods which can be much faster for full site restoration:
-<http://www.mediawiki.org/wiki/Manual:Importing_XML_dumps>
+<https://www.mediawiki.org/wiki/Manual:Importing_XML_dumps>
 TEXT;
                $this->stderr = fopen( "php://stderr", "wt" );
                $this->addOption( 'report',
index dadc84a..c7df6c3 100644 (file)
@@ -42,6 +42,7 @@ if ( count( $args ) < 1 || isset( $options['help'] ) ) {
 
                        echo "\nUsing title '" . $title->getPrefixedText() . "'...";
                        if ( !$title->exists() || !isset( $options['nooverwrite'] ) ) {
+                               RequestContext::getMain()->setTitle( $title );
 
                                $text = file_get_contents( $filename );
                                $user = isset( $options['user'] ) ? $options['user'] : 'Maintenance script';
index d118747..44c117e 100644 (file)
@@ -70,10 +70,9 @@ class CommandLineInstaller extends Maintenance {
        }
 
        function execute() {
-               global $IP, $wgTitle;
+               global $IP;
                $siteName = isset( $this->mArgs[0] ) ? $this->mArgs[0] : "Don't care"; // Will not be set if used with --env-checks
                $adminName = isset( $this->mArgs[1] ) ? $this->mArgs[1] : null;
-               $wgTitle = Title::newFromText( 'Installer script' );
 
                $dbpassfile = $this->getOption( 'dbpassfile', false );
                if ( $dbpassfile !== false ) {
index 875e2f5..adaf114 100644 (file)
@@ -10,7 +10,6 @@
                                        "mw.Message",
                                        "mw.loader",
                                        "mw.loader.store",
-                                       "mw.log",
                                        "mw.html",
                                        "mw.html.Cdata",
                                        "mw.html.Raw",
@@ -22,9 +21,8 @@
                                "classes": [
                                        "mw.Title",
                                        "mw.Uri",
-                                       "mw.inspect",
-                                       "mw.inspect.reports",
                                        "mw.notification",
+                                       "mw.Notification_",
                                        "mw.user",
                                        "mw.util",
                                        "mw.plugin.*"
@@ -42,7 +40,8 @@
                                "name": "Language",
                                "classes": [
                                        "mw.language*",
-                                       "mw.cldr"
+                                       "mw.cldr",
+                                       "mw.jqueryMsg"
                                ]
                        },
                        {
                                "classes": [
                                        "mw.page*"
                                ]
+                       },
+                       {
+                               "name": "Interfaces",
+                               "classes": [
+                                       "mw.Feedback"
+                               ]
+                       },
+                       {
+                               "name": "Development",
+                               "classes": [
+                                       "mw.log",
+                                       "mw.inspect",
+                                       "mw.inspect.reports",
+                                       "mw.Debug"
+                               ]
                        }
                ]
        },
index f403067..837c00c 100644 (file)
@@ -7,18 +7,10 @@
        "--warnings": ["-no_doc"],
        "--builtin-classes": true,
        "--output": "../../docs/js",
+       "--external": "HTMLElement,HTMLDocument,Window",
        "--": [
                "./external.js",
-               "../../resources/mediawiki/mediawiki.js",
-               "../../resources/mediawiki/mediawiki.htmlform.js",
-               "../../resources/mediawiki/mediawiki.log.js",
-               "../../resources/mediawiki/mediawiki.util.js",
-               "../../resources/mediawiki/mediawiki.Title.js",
-               "../../resources/mediawiki/mediawiki.Uri.js",
-               "../../resources/mediawiki/mediawiki.inspect.js",
-               "../../resources/mediawiki/mediawiki.notify.js",
-               "../../resources/mediawiki/mediawiki.notification.js",
-               "../../resources/mediawiki/mediawiki.user.js",
+               "../../resources/mediawiki",
                "../../resources/mediawiki.action/mediawiki.action.edit.js",
                "../../resources/mediawiki.action/mediawiki.action.view.postEdit.js",
                "../../resources/mediawiki.page/mediawiki.page.startup.js",
@@ -27,6 +19,7 @@
                "../../resources/mediawiki.language",
                "../../resources/jquery/jquery.localize.js",
                "../../resources/jquery/jquery.spinner.js",
-               "../../resources/oojs"
+               "../../resources/oojs",
+               "../../resources/oojs-ui"
        ]
 }
index dbb70c1..0fd3242 100644 (file)
@@ -4,7 +4,7 @@
  * supplementary files.
  *
  * Copyright © 2004, 2008 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 97a00a9..6cda6d2 100644 (file)
@@ -123,6 +123,7 @@ $wgIgnoredMessages = array(
        'recentchanges-url',
        'recentchangestext',
        'revision-info-current',
+       'createaccount-hook-aborted',
        'revision-nav',
        'rfcurl',
        'shareddescriptionfollows',
@@ -148,7 +149,6 @@ $wgIgnoredMessages = array(
        'booksources-summary',
        'categories-summary',
        'blocklist-summary',
-       'protectedtitles-summary',
        'listusers-summary',
        'longpages-summary',
        'preferences-summary',
@@ -179,7 +179,7 @@ $wgIgnoredMessages = array(
        'userrights-summary',
        'brokenredirects-summary',
        'deadendpages-summary',
-       'protectedpages-summary',
+       'protectedpages-unknown-reason',
        'disambiguations-summary',
        'pageswithprop-summary',
        'doubleredirects-summary',
@@ -267,6 +267,7 @@ $wgIgnoredMessages = array(
        'today-at',
        'redirect-text',
        'edithelppage',
+       'helplogin-url',
        'autocomment-prefix',
        'move-redirect-text',
        'interlanguage-link-title-langonly',
@@ -279,7 +280,6 @@ $wgOptionalMessages = array(
        'feed-rss',
        'unit-pixel',
        'userrights-irreversible-marker',
-       'tog-noconvertlink',
        'variantname-zh-hans',
        'variantname-zh-hant',
        'variantname-zh-cn',
@@ -498,7 +498,6 @@ $wgOptionalMessages = array(
        'limitreport-expensivefunctioncount-value',
        'interlanguage-link-title',
        'img-lang-opt',
-       'quotation-marks',
        'recentchanges-legend-plusminus',
 );
 
index ed85223..746c7d7 100644 (file)
@@ -63,7 +63,6 @@ $wgMessageStructure = array(
                'tog-ccmeonemails',
                'tog-diffonly',
                'tog-showhiddencats',
-               'tog-noconvertlink',
                'tog-norollbackdiff',
                'tog-useeditwarning',
                'tog-prefershttps'
@@ -196,7 +195,6 @@ $wgMessageStructure = array(
                'vector-action-protect',
                'vector-action-undelete',
                'vector-action-unprotect',
-               'vector-simplesearch-preference',
                'vector-view-create',
                'vector-view-edit',
                'vector-view-history',
@@ -473,7 +471,7 @@ $wgMessageStructure = array(
                'userlogin-resetlink',
                'userlogin-resetpassword-link',
                'helplogin-url',
-               'userlogin-helplink',
+               'userlogin-helplink2',
                'userlogin-loggedin',
                'userlogin-createanother',
                'createacct-join',
@@ -559,6 +557,10 @@ $wgMessageStructure = array(
                'loginlanguagelinks',
                'suspicious-userlogout',
                'createacct-another-realname-tip',
+               'pt-login',
+               'pt-login-button',
+               'pt-createaccount',
+               'pt-userlogout',
        ),
        'mail' => array(
                'pear-mail-error',
@@ -584,8 +586,13 @@ $wgMessageStructure = array(
                'resetpass-submit-loggedin',
                'resetpass-submit-cancel',
                'resetpass-wrong-oldpass',
+               'resetpass-recycled',
+               'resetpass-temp-emailed',
                'resetpass-temp-password',
                'resetpass-abort-generic',
+               'resetpass-expired',
+               'resetpass-expired-soft',
+               'resetpass-validity-soft',
        ),
        'passwordreset' => array(
                'passwordreset',
@@ -804,6 +811,7 @@ $wgMessageStructure = array(
                'cantcreateaccounttitle',
                'cantcreateaccount-text',
                'cantcreateaccount-range-text',
+               'createaccount-hook-aborted',
        ),
        'history' => array(
                'viewpagelogs',
@@ -863,7 +871,10 @@ $wgMessageStructure = array(
                'revdelete-show-file-submit',
                'revdelete-selected',
                'logdelete-selected',
-               'revdelete-text',
+               'revdelete-text-text',
+               'revdelete-text-file',
+               'logdelete-text',
+               'revdelete-text-others',
                'revdelete-confirm',
                'revdelete-suppress-text',
                'revdelete-legend',
@@ -1320,11 +1331,23 @@ $wgMessageStructure = array(
                'rcnotefrom',
                'rclistfrom',
                'rcshowhideminor',
+               'rcshowhideminor-show',
+               'rcshowhideminor-hide',
                'rcshowhidebots',
+               'rcshowhidebots-show',
+               'rcshowhidebots-hide',
                'rcshowhideliu',
+               'rcshowhideliu-show',
+               'rcshowhideliu-hide',
                'rcshowhideanons',
+               'rcshowhideanons-show',
+               'rcshowhideanons-hide',
                'rcshowhidepatr',
+               'rcshowhidepatr-show',
+               'rcshowhidepatr-hide',
                'rcshowhidemine',
+               'rcshowhidemine-show',
+               'rcshowhidemine-hide',
                'rclinks',
                'diff',
                'hist',
@@ -1430,6 +1453,8 @@ $wgMessageStructure = array(
                'uploaddisabledtext',
                'php-uploaddisabledtext',
                'uploadscripted',
+               'uploadscriptednamespace',
+               'uploadinvalidxml',
                'uploadvirus',
                'uploadjava',
                'upload-source',
@@ -1816,6 +1841,15 @@ $wgMessageStructure = array(
                'protectedpages-cascade',
                'protectedpages-noredirect',
                'protectedpagesempty',
+               'protectedpages-timestamp',
+               'protectedpages-page',
+               'protectedpages-expiry',
+               'protectedpages-performer',
+               'protectedpages-params',
+               'protectedpages-reason',
+               'protectedpages-unknown-timestamp',
+               'protectedpages-unknown-performer',
+               'protectedpages-unknown-reason',
                'protectedtitles',
                'protectedtitles-summary',
                'protectedtitlesempty',
@@ -2224,8 +2258,10 @@ $wgMessageStructure = array(
                'sp-contributions-blocked-notice',
                'sp-contributions-blocked-notice-anon',
                'sp-contributions-search',
+               'sp-contributions-suppresslog',
                'sp-contributions-username',
                'sp-contributions-toponly',
+               'sp-contributions-newonly',
                'sp-contributions-submit',
                'sp-contributions-explain',
                'sp-contributions-footer',
@@ -2490,6 +2526,7 @@ $wgMessageStructure = array(
                'thumbnail_image-type',
                'thumbnail_gd-library',
                'thumbnail_image-missing',
+               'thumbnail_image-failure-limit'
        ),
        'import' => array(
                'import',
index 6a538e6..4a853b0 100644 (file)
@@ -24,7 +24,7 @@
  * @author Antoine Musso <hashar at free dot fr>
  *
  * Output is posted from time to time on:
- * http://www.mediawiki.org/wiki/Localisation_statistics
+ * https://www.mediawiki.org/wiki/Localisation_statistics
  */
 $optionsWithArgs = array( 'output' );
 
index 71fdd61..4a3cdea 100644 (file)
 -- tables.
 
 -- LINE:53
-CREATE TABLE /*$wgDBprefix*/user (
+CREATE TABLE /*_*/mwuser (
    user_id           INT           NOT NULL  PRIMARY KEY IDENTITY(0,1),
    user_name         NVARCHAR(255)  NOT NULL UNIQUE DEFAULT '',
    user_real_name    NVARCHAR(255)  NOT NULL DEFAULT '',
    user_password     NVARCHAR(255)  NOT NULL DEFAULT '',
    user_newpassword  NVARCHAR(255)  NOT NULL DEFAULT '',
-   user_newpass_time DATETIME NULL,
+   user_newpass_time varchar(14) NULL DEFAULT NULL,
    user_email        NVARCHAR(255)  NOT NULL DEFAULT '',
    user_options      NVARCHAR(MAX) NOT NULL DEFAULT '',
-   user_touched      DATETIME      NOT NULL DEFAULT GETDATE(),
+   user_touched      varchar(14)      NOT NULL DEFAULT '',
    user_token        NCHAR(32)      NOT NULL DEFAULT '',
-   user_email_authenticated DATETIME DEFAULT NULL,
+   user_email_authenticated varchar(14) DEFAULT NULL,
    user_email_token  NCHAR(32) DEFAULT '',
-   user_email_token_expires DATETIME DEFAULT NULL,
-   user_registration DATETIME DEFAULT NULL,
-   user_editcount    INT NULL
+   user_email_token_expires varchar(14) DEFAULT NULL,
+   user_registration varchar(14) DEFAULT NULL,
+   user_editcount    INT NULL DEFAULT NULL
+   user_password_expires DATETIME DEFAULT NULL
 );
-CREATE        INDEX /*$wgDBprefix*/user_email_token ON /*$wgDBprefix*/[user](user_email_token);
-CREATE UNIQUE INDEX /*$wgDBprefix*/[user_name]        ON /*$wgDBprefix*/[user]([user_name]);
-;
+CREATE UNIQUE INDEX /*i*/user_name ON /*_*/mwuser (user_name);
+CREATE INDEX /*i*/user_email_token ON /*_*/mwuser (user_email_token);
+CREATE INDEX /*i*/user_email ON /*_*/mwuser (user_email);
+
+-- Insert a dummy user to represent anons
+INSERT INTO /*_*/mwuser (user_name) VALUES ('##Anonymous##');
 
 --
 -- User permissions have been broken out to a separate table;
@@ -57,86 +61,106 @@ CREATE UNIQUE INDEX /*$wgDBprefix*/[user_name]        ON /*$wgDBprefix*/[user]([
 -- permissions assigned to a user in each project.
 --
 -- This table replaces the old user_rights field which used a
--- comma-separated blob.
-CREATE TABLE /*$wgDBprefix*/user_groups (
-   ug_user  INT     NOT NULL REFERENCES /*$wgDBprefix*/[user](user_id) ON DELETE CASCADE,
-   ug_group NVARCHAR(16) NOT NULL DEFAULT '',
+-- comma-separated nvarchar(max).
+CREATE TABLE /*_*/user_groups (
+   ug_user  INT     NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
+   ug_group NVARCHAR(255) NOT NULL DEFAULT '',
+);
+CREATE UNIQUE clustered INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user, ug_group);
+CREATE INDEX /*i*/ug_group ON /*_*/user_groups(ug_group);
+
+-- Stores the groups the user has once belonged to.
+-- The user may still belong to these groups (check user_groups).
+-- Users are not autopromoted to groups from which they were removed.
+CREATE TABLE /*_*/user_former_groups (
+  ufg_user INT NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
+  ufg_group nvarchar(255) NOT NULL default ''
 );
-CREATE UNIQUE clustered INDEX /*$wgDBprefix*/user_groups_unique ON /*$wgDBprefix*/user_groups(ug_user, ug_group);
-CREATE INDEX /*$wgDBprefix*/user_group ON /*$wgDBprefix*/user_groups(ug_group);
+CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
 
 -- Stores notifications of user talk page changes, for the display
 -- of the "you have new messages" box
--- Changed user_id column to mwuser_id to avoid clashing with user_id function
-CREATE TABLE /*$wgDBprefix*/user_newtalk (
-   user_id INT         NOT NULL DEFAULT 0 REFERENCES /*$wgDBprefix*/[user](user_id) ON DELETE CASCADE,
+-- Changed user_id column to user_id to avoid clashing with user_id function
+CREATE TABLE /*_*/user_newtalk (
+   user_id INT         NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
    user_ip NVARCHAR(40) NOT NULL DEFAULT '',
-   user_last_timestamp DATETIME NOT NULL DEFAULT '',
+   user_last_timestamp varchar(14) DEFAULT NULL,
 );
-CREATE INDEX /*$wgDBprefix*/user_group_id ON /*$wgDBprefix*/user_newtalk([user_id]);
-CREATE INDEX /*$wgDBprefix*/user_ip       ON /*$wgDBprefix*/user_newtalk(user_ip);
+CREATE INDEX /*i*/un_user_id ON /*_*/user_newtalk (user_id);
+CREATE INDEX /*i*/un_user_ip ON /*_*/user_newtalk (user_ip);
 
 --
 -- User preferences and other fun stuff
--- replaces old user.user_options BLOB
+-- replaces old user.user_options nvarchar(max)
 --
-CREATE TABLE /*$wgDBprefix*/user_properties (
-       up_user INT NOT NULL,
-       up_property NVARCHAR(32) NOT NULL,
+CREATE TABLE /*_*/user_properties (
+       up_user INT NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
+       up_property NVARCHAR(255) NOT NULL,
        up_value NVARCHAR(MAX),
 );
-CREATE UNIQUE clustered INDEX /*$wgDBprefix*/user_props_user_prop ON /*$wgDBprefix*/user_properties(up_user, up_property);
-CREATE INDEX /*$wgDBprefix*/user_props_prop ON /*$wgDBprefix*/user_properties(up_property);
+CREATE UNIQUE CLUSTERED INDEX /*i*/user_properties_user_property ON /*_*/user_properties (up_user,up_property);
+CREATE INDEX /*i*/user_properties_property ON /*_*/user_properties (up_property);
 
 
 --
 -- Core of the wiki: each page has an entry here which identifies
 -- it by title and contains some essential metadata.
 --
-CREATE TABLE /*$wgDBprefix*/page (
-   page_id        INT          NOT NULL  PRIMARY KEY clustered IDENTITY,
+CREATE TABLE /*_*/page (
+   page_id        INT          NOT NULL  PRIMARY KEY IDENTITY(0,1),
    page_namespace INT          NOT NULL,
    page_title     NVARCHAR(255)  NOT NULL,
-   page_restrictions NVARCHAR(255) NULL,
+   page_restrictions NVARCHAR(255) NOT NULL,
    page_counter BIGINT            NOT NULL DEFAULT 0,
    page_is_redirect BIT           NOT NULL DEFAULT 0,
    page_is_new BIT                NOT NULL DEFAULT 0,
-   page_random NUMERIC(15,14)     NOT NULL DEFAULT RAND(),
-   page_touched DATETIME NOT NULL DEFAULT GETDATE(),
-   page_latest INT NOT NULL,
+   page_random real     NOT NULL DEFAULT RAND(),
+   page_touched varchar(14) NOT NULL default '',
+   page_links_updated varchar(14) DEFAULT NULL,
+   page_latest INT, -- FK inserted later
    page_len INT NOT NULL,
+   page_content_model nvarchar(32) default null
 );
-CREATE UNIQUE INDEX /*$wgDBprefix*/page_unique_name ON /*$wgDBprefix*/page(page_namespace, page_title);
-CREATE        INDEX /*$wgDBprefix*/page_random_idx  ON /*$wgDBprefix*/page(page_random);
-CREATE        INDEX /*$wgDBprefix*/page_len_idx     ON /*$wgDBprefix*/page(page_len);
-;
+CREATE UNIQUE INDEX /*i*/name_title ON /*_*/page (page_namespace,page_title);
+CREATE INDEX /*i*/page_random ON /*_*/page (page_random);
+CREATE INDEX /*i*/page_len ON /*_*/page (page_len);
+CREATE INDEX /*i*/page_redirect_namespace_len ON /*_*/page (page_is_redirect, page_namespace, page_len);
+
+-- insert a dummy page
+INSERT INTO /*_*/page (page_namespace, page_title, page_restrictions, page_latest, page_len) VALUES (-1,'','',0,0);
 
 --
 -- Every edit of a page creates also a revision row.
 -- This stores metadata about the revision, and a reference
 -- to the TEXT storage backend.
 --
-CREATE TABLE /*$wgDBprefix*/revision (
-   rev_id INT NOT NULL UNIQUE IDENTITY,
-   rev_page INT NOT NULL,
-   rev_text_id INT  NOT NULL,
-   rev_comment NVARCHAR(max) NOT NULL,
-   rev_user INT  NOT NULL DEFAULT 0 /*REFERENCES [user](user_id)*/,
+CREATE TABLE /*_*/revision (
+   rev_id INT NOT NULL UNIQUE IDENTITY(0,1),
+   rev_page INT NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
+   rev_text_id INT  NOT NULL, -- FK added later
+   rev_comment NVARCHAR(255) NOT NULL,
+   rev_user INT REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
    rev_user_text NVARCHAR(255) NOT NULL DEFAULT '',
-   rev_timestamp DATETIME NOT NULL DEFAULT GETDATE(),
+   rev_timestamp varchar(14) NOT NULL default '',
    rev_minor_edit BIT NOT NULL DEFAULT 0,
-   rev_deleted BIT  NOT NULL DEFAULT 0,
+   rev_deleted TINYINT  NOT NULL DEFAULT 0,
    rev_len INT,
-   rev_parent_id INT DEFAULT NULL,
-
+   rev_parent_id INT DEFAULT NULL REFERENCES /*_*/revision(rev_id),
+   rev_sha1 nvarchar(32) not null default '',
+   rev_content_model nvarchar(32) default null,
+   rev_content_format nvarchar(64) default null
 );
-CREATE UNIQUE clustered INDEX /*$wgDBprefix*/revision_unique ON /*$wgDBprefix*/revision(rev_page, rev_id);
-CREATE UNIQUE INDEX /*$wgDBprefix*/rev_id             ON /*$wgDBprefix*/revision(rev_id);
-CREATE        INDEX /*$wgDBprefix*/rev_timestamp      ON /*$wgDBprefix*/revision(rev_timestamp);
-CREATE        INDEX /*$wgDBprefix*/page_timestamp     ON /*$wgDBprefix*/revision(rev_page, rev_timestamp);
-CREATE        INDEX /*$wgDBprefix*/user_timestamp     ON /*$wgDBprefix*/revision(rev_user, rev_timestamp);
-CREATE        INDEX /*$wgDBprefix*/usertext_timestamp ON /*$wgDBprefix*/revision(rev_user_text, rev_timestamp);
-;
+CREATE UNIQUE CLUSTERED INDEX /*i*/rev_page_id ON /*_*/revision (rev_page, rev_id);
+CREATE INDEX /*i*/rev_timestamp ON /*_*/revision (rev_timestamp);
+CREATE INDEX /*i*/page_timestamp ON /*_*/revision (rev_page,rev_timestamp);
+CREATE INDEX /*i*/user_timestamp ON /*_*/revision (rev_user,rev_timestamp);
+CREATE INDEX /*i*/usertext_timestamp ON /*_*/revision (rev_user_text,rev_timestamp);
+CREATE INDEX /*i*/page_user_timestamp ON /*_*/revision (rev_page,rev_user,rev_timestamp);
+
+-- insert a dummy revision
+INSERT INTO /*_*/revision (rev_page,rev_text_id,rev_comment,rev_user,rev_len) VALUES (0,0,'',0,0);
+
+ALTER TABLE /*_*/page ADD CONSTRAINT FK_page_latest_page_id FOREIGN KEY (page_latest) REFERENCES /*_*/revision(rev_id);
 
 --
 -- Holds TEXT of individual page revisions.
@@ -145,12 +169,17 @@ CREATE        INDEX /*$wgDBprefix*/usertext_timestamp ON /*$wgDBprefix*/revision
 -- MediaWiki 1.4 and earlier: an upgrade will transform that
 -- table INTo the 'text' table to minimize unnecessary churning
 -- and downtime. If upgrading, the other fields will be left unused.
-CREATE TABLE /*$wgDBprefix*/text (
-   old_id INT NOT NULL  PRIMARY KEY clustered IDENTITY,
-   old_text TEXT NOT NULL,
+CREATE TABLE /*_*/text (
+   old_id INT NOT NULL  PRIMARY KEY IDENTITY(0,1),
+   old_text nvarchar(max) NOT NULL,
    old_flags NVARCHAR(255) NOT NULL,
 );
 
+-- insert a dummy text
+INSERT INTO /*_*/text (old_text,old_flags) VALUES ('','');
+
+ALTER TABLE /*_*/revision ADD CONSTRAINT FK_rev_text_id_old_id FOREIGN KEY (rev_text_id) REFERENCES /*_*/text(old_id) ON DELETE CASCADE;
+
 --
 -- Holding area for deleted articles, which may be viewed
 -- or restored by admins through the Special:Undelete interface.
@@ -158,577 +187,1142 @@ CREATE TABLE /*$wgDBprefix*/text (
 -- fields, with several caveats.
 -- Cannot reasonably create views on this table, due to the presence of TEXT
 -- columns.
-CREATE TABLE /*$wgDBprefix*/archive (
-   ar_id NOT NULL PRIMARY KEY clustered IDENTITY,
+CREATE TABLE /*_*/archive (
+   ar_id int NOT NULL PRIMARY KEY IDENTITY,
    ar_namespace SMALLINT NOT NULL DEFAULT 0,
    ar_title NVARCHAR(255) NOT NULL DEFAULT '',
    ar_text NVARCHAR(MAX) NOT NULL,
    ar_comment NVARCHAR(255) NOT NULL,
-   ar_user INT NULL REFERENCES /*$wgDBprefix*/[user](user_id) ON DELETE SET NULL,
+   ar_user INT REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
    ar_user_text NVARCHAR(255) NOT NULL,
-   ar_timestamp DATETIME NOT NULL DEFAULT GETDATE(),
+   ar_timestamp varchar(14) NOT NULL default '',
    ar_minor_edit BIT NOT NULL DEFAULT 0,
    ar_flags NVARCHAR(255) NOT NULL,
-   ar_rev_id INT,
-   ar_text_id INT,
-   ar_deleted BIT NOT NULL DEFAULT 0,
-   ar_len INT DEFAULT NULL,
-   ar_page_id INT NULL,
-   ar_parent_id INT NULL,
+   ar_rev_id INT NULL, -- NOT a FK, the row gets deleted from revision and moved here
+   ar_text_id INT REFERENCES /*_*/text(old_id) ON DELETE CASCADE,
+   ar_deleted TINYINT NOT NULL DEFAULT 0,
+   ar_len INT,
+   ar_page_id INT NULL, -- NOT a FK, the row gets deleted from page and moved here
+   ar_parent_id INT NULL REFERENCES /*_*/revision(rev_id),
+   ar_sha1 nvarchar(32) default null,
+   ar_content_model nvarchar(32) DEFAULT NULL,
+  ar_content_format nvarchar(64) DEFAULT NULL
 );
-CREATE INDEX /*$wgDBprefix*/ar_name_title_timestamp ON /*$wgDBprefix*/archive(ar_namespace,ar_title,ar_timestamp);
-CREATE INDEX /*$wgDBprefix*/ar_usertext_timestamp ON /*$wgDBprefix*/archive(ar_user_text,ar_timestamp);
-CREATE INDEX /*$wgDBprefix*/ar_user_text    ON /*$wgDBprefix*/archive(ar_user_text);
+CREATE INDEX /*i*/name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp);
+CREATE INDEX /*i*/ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timestamp);
+CREATE INDEX /*i*/ar_revid ON /*_*/archive (ar_rev_id);
 
 
 --
 -- Track page-to-page hyperlinks within the wiki.
 --
-CREATE TABLE /*$wgDBprefix*/pagelinks (
-   pl_from INT NOT NULL DEFAULT 0 REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE,
-   pl_namespace SMALLINT NOT NULL DEFAULT 0,
+CREATE TABLE /*_*/pagelinks (
+   pl_from INT NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
+   pl_namespace INT NOT NULL DEFAULT 0,
    pl_title NVARCHAR(255) NOT NULL DEFAULT '',
 );
-CREATE UNIQUE INDEX /*$wgDBprefix*/pl_from ON /*$wgDBprefix*/pagelinks(pl_from,pl_namespace,pl_title);
-CREATE UNIQUE INDEX /*$wgDBprefix*/pl_namespace ON /*$wgDBprefix*/pagelinks(pl_namespace,pl_title,pl_from);
+CREATE UNIQUE INDEX /*i*/pl_from ON /*_*/pagelinks (pl_from,pl_namespace,pl_title);
+CREATE UNIQUE INDEX /*i*/pl_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from);
+
 
 --
 -- Track template inclusions.
 --
-CREATE TABLE /*$wgDBprefix*/templatelinks (
-   tl_from INT NOT NULL DEFAULT 0 REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE,
-   tl_namespace SMALLINT NOT NULL DEFAULT 0,
-   tl_title NVARCHAR(255) NOT NULL DEFAULT '',
+CREATE TABLE /*_*/templatelinks (
+  tl_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
+  tl_namespace int NOT NULL default 0,
+  tl_title nvarchar(255) NOT NULL default ''
 );
-CREATE UNIQUE INDEX /*$wgDBprefix*/tl_from ON /*$wgDBprefix*/templatelinks(tl_from,tl_namespace,tl_title);
-CREATE UNIQUE INDEX /*$wgDBprefix*/tl_namespace ON /*$wgDBprefix*/templatelinks(tl_namespace,tl_title,tl_from);
+
+CREATE UNIQUE INDEX /*i*/tl_from ON /*_*/templatelinks (tl_from,tl_namespace,tl_title);
+CREATE UNIQUE INDEX /*i*/tl_namespace ON /*_*/templatelinks (tl_namespace,tl_title,tl_from);
+
 
 --
 -- Track links to images *used inline*
 -- We don't distinguish live from broken links here, so
--- they do not need to be changed ON upload/removal.
+-- they do not need to be changed on upload/removal.
 --
-CREATE TABLE /*$wgDBprefix*/imagelinks (
-   il_from INT NOT NULL DEFAULT 0 REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE,
-   il_to NVARCHAR(255)  NOT NULL DEFAULT '',
-   CONSTRAINT /*$wgDBprefix*/il_from PRIMARY KEY(il_from,il_to),
+CREATE TABLE /*_*/imagelinks (
+  -- Key to page_id of the page containing the image / media link.
+  il_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
+
+  -- Filename of target image.
+  -- This is also the page_title of the file's description page;
+  -- all such pages are in namespace 6 (NS_FILE).
+  il_to nvarchar(255) NOT NULL default ''
 );
-CREATE UNIQUE INDEX /*$wgDBprefix*/il_from_to ON /*$wgDBprefix*/imagelinks(il_from,il_to);
-CREATE UNIQUE INDEX /*$wgDBprefix*/il_to_from ON /*$wgDBprefix*/imagelinks(il_to,il_from);
+
+CREATE UNIQUE INDEX /*i*/il_from ON /*_*/imagelinks (il_from,il_to);
+CREATE UNIQUE INDEX /*i*/il_to ON /*_*/imagelinks (il_to,il_from);
 
 --
 -- Track category inclusions *used inline*
 -- This tracks a single level of category membership
--- (folksonomic tagging, really).
 --
-CREATE TABLE /*$wgDBprefix*/categorylinks (
-   cl_from INT NOT NULL DEFAULT 0,
-   cl_to NVARCHAR(255)  NOT NULL DEFAULT '',
-   cl_sortkey NVARCHAR(150)  NOT NULL DEFAULT '',
-   cl_timestamp DATETIME NOT NULL DEFAULT GETDATE(),
-   CONSTRAINT /*$wgDBprefix*/cl_from PRIMARY KEY(cl_from, cl_to),
+CREATE TABLE /*_*/categorylinks (
+  -- Key to page_id of the page defined as a category member.
+  cl_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
+
+  -- Name of the category.
+  -- This is also the page_title of the category's description page;
+  -- all such pages are in namespace 14 (NS_CATEGORY).
+  cl_to nvarchar(255) NOT NULL default '',
+
+  -- A binary string obtained by applying a sortkey generation algorithm
+  -- (Collation::getSortKey()) to page_title, or cl_sortkey_prefix . "\n"
+  -- . page_title if cl_sortkey_prefix is nonempty.
+  cl_sortkey varbinary(230) NOT NULL default 0x,
+
+  -- A prefix for the raw sortkey manually specified by the user, either via
+  -- [[Category:Foo|prefix]] or {{defaultsort:prefix}}.  If nonempty, it's
+  -- concatenated with a line break followed by the page title before the sortkey
+  -- conversion algorithm is run.  We store this so that we can update
+  -- collations without reparsing all pages.
+  -- Note: If you change the length of this field, you also need to change
+  -- code in LinksUpdate.php. See bug 25254.
+  cl_sortkey_prefix varbinary(255) NOT NULL default 0x,
+
+  -- This isn't really used at present. Provided for an optional
+  -- sorting method by approximate addition time.
+  cl_timestamp varchar(14) NOT NULL,
+
+  -- Stores $wgCategoryCollation at the time cl_sortkey was generated.  This
+  -- can be used to install new collation versions, tracking which rows are not
+  -- yet updated.  '' means no collation, this is a legacy row that needs to be
+  -- updated by updateCollation.php.  In the future, it might be possible to
+  -- specify different collations per category.
+  cl_collation nvarchar(32) NOT NULL default '',
+
+  -- Stores whether cl_from is a category, file, or other page, so we can
+  -- paginate the three categories separately.  This never has to be updated
+  -- after the page is created, since none of these page types can be moved to
+  -- any other.
+  -- SQL server doesn't have enums, so we approximate with this
+  cl_type varchar(10) NOT NULL default 'page' CHECK (cl_type IN('page', 'subcat', 'file'))
 );
-CREATE UNIQUE INDEX /*$wgDBprefix*/cl_from_to   ON /*$wgDBprefix*/categorylinks(cl_from,cl_to);
--- We always sort within a given category...
-CREATE INDEX /*$wgDBprefix*/cl_sortkey   ON /*$wgDBprefix*/categorylinks(cl_to,cl_sortkey);
--- Not really used?
-CREATE INDEX /*$wgDBprefix*/cl_timestamp ON /*$wgDBprefix*/categorylinks(cl_to,cl_timestamp);
---;
+
+CREATE UNIQUE INDEX /*i*/cl_from ON /*_*/categorylinks (cl_from,cl_to);
+
+-- We always sort within a given category, and within a given type.  FIXME:
+-- Formerly this index didn't cover cl_type (since that didn't exist), so old
+-- callers won't be using an index: fix this?
+CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks (cl_to,cl_type,cl_sortkey,cl_from);
+
+-- Used by the API (and some extensions)
+CREATE INDEX /*i*/cl_timestamp ON /*_*/categorylinks (cl_to,cl_timestamp);
+
+-- FIXME: Not used, delete this
+CREATE INDEX /*i*/cl_collation ON /*_*/categorylinks (cl_collation);
 
 --
 -- Track all existing categories.  Something is a category if 1) it has an en-
 -- try somewhere in categorylinks, or 2) it once did.  Categories might not
 -- have corresponding pages, so they need to be tracked separately.
 --
-CREATE TABLE /*$wgDBprefix*/category (
-  cat_id int NOT NULL IDENTITY(1,1),
-  cat_title nvarchar(255)  NOT NULL,
+CREATE TABLE /*_*/category (
+  -- Primary key
+  cat_id int NOT NULL PRIMARY KEY IDENTITY,
+
+  -- Name of the category, in the same form as page_title (with underscores).
+  -- If there is a category page corresponding to this category, by definition,
+  -- it has this name (in the Category namespace).
+  cat_title nvarchar(255) NOT NULL,
+
+  -- The numbers of member pages (including categories and media), subcatego-
+  -- ries, and Image: namespace members, respectively.  These are signed to
+  -- make underflow more obvious.  We make the first number include the second
+  -- two for better sorting: subtracting for display is easy, adding for order-
+  -- ing is not.
   cat_pages int NOT NULL default 0,
   cat_subcats int NOT NULL default 0,
-  cat_files int NOT NULL default 0,
-  cat_hidden tinyint NOT NULL default 0,
+  cat_files int NOT NULL default 0
 );
 
-CREATE UNIQUE INDEX /*$wgDBprefix*/cat_title   ON /*$wgDBprefix*/category(cat_title);
--- For Special:Mostlinkedcategories
-CREATE INDEX /*$wgDBprefix*/cat_pages   ON /*$wgDBprefix*/category(cat_pages);
+CREATE UNIQUE INDEX /*i*/cat_title ON /*_*/category (cat_title);
 
+-- For Special:Mostlinkedcategories
+CREATE INDEX /*i*/cat_pages ON /*_*/category (cat_pages);
 
-CREATE TABLE /*$wgDBprefix*/change_tag (
-  ct_rc_id   int  NOT NULL default 0,
-  ct_log_id  int  NOT NULL default 0,
-  ct_rev_id  int  NOT NULL default 0,
-  ct_tag     varchar(255)  NOT NULL,
-  ct_params  varchar(255)  NOT NULL,
-);
-CREATE UNIQUE INDEX /*$wgDBprefix*/change_tag_rc_tag ON /*$wgDBprefix*/change_tag(ct_rc_id,ct_tag);
-CREATE UNIQUE INDEX /*$wgDBprefix*/change_tag_log_tag ON /*$wgDBprefix*/change_tag(ct_log_id,ct_tag);
-CREATE UNIQUE INDEX /*$wgDBprefix*/change_tag_rev_tag ON /*$wgDBprefix*/change_tag(ct_rev_id,ct_tag);
-CREATE INDEX /*$wgDBprefix*/change_tag_tag_id ON /*$wgDBprefix*/change_tag(ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
 
-CREATE TABLE /*$wgDBprefix*/tag_summary (
-  ts_rc_id   INT NOT NULL default 0,
-  ts_log_id  INT NOT NULL default 0,
-  ts_rev_id  INT NOT NULL default 0,
-  ts_tags    varchar(255)  NOT NULL
+--
+-- Track links to external URLs
+--
+CREATE TABLE /*_*/externallinks (
+  -- Primary key
+  el_id int NOT NULL PRIMARY KEY IDENTITY,
+
+  -- page_id of the referring page
+  el_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
+
+  -- The URL
+  el_to nvarchar(max) NOT NULL,
+
+  -- In the case of HTTP URLs, this is the URL with any username or password
+  -- removed, and with the labels in the hostname reversed and converted to
+  -- lower case. An extra dot is added to allow for matching of either
+  -- example.com or *.example.com in a single scan.
+  -- Example:
+  --      http://user:password@sub.example.com/page.html
+  --   becomes
+  --      http://com.example.sub./page.html
+  -- which allows for fast searching for all pages under example.com with the
+  -- clause:
+  --      WHERE el_index LIKE 'http://com.example.%'
+  el_index nvarchar(450) NOT NULL
 );
-CREATE UNIQUE INDEX /*$wgDBprefix*/tag_summary_rc_id ON /*$wgDBprefix*/tag_summary(ts_rc_id);
-CREATE UNIQUE INDEX /*$wgDBprefix*/tag_summary_log_id ON /*$wgDBprefix*/tag_summary(ts_log_id);
-CREATE UNIQUE INDEX /*$wgDBprefix*/tag_summary_rev_id ON /*$wgDBprefix*/tag_summary(ts_rev_id);
 
-CREATE TABLE /*$wgDBprefix*/valid_tag (
-  vt_tag varchar(255) NOT NULL PRIMARY KEY
-);
+CREATE INDEX /*i*/el_from ON /*_*/externallinks (el_from);
+CREATE INDEX /*i*/el_index ON /*_*/externallinks (el_index);
 
 --
--- Table for storing localisation data
+-- Track interlanguage links
 --
-CREATE TABLE /*$wgDBprefix*/l10n_cache (
-       -- language code
-       lc_lang NVARCHAR(32) NOT NULL,
+CREATE TABLE /*_*/langlinks (
+  -- page_id of the referring page
+  ll_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
 
-       -- cache key
-       lc_key NVARCHAR(255) NOT NULL,
+  -- Language code of the target
+  ll_lang nvarchar(20) NOT NULL default '',
 
-       -- Value
-       lc_value TEXT NOT NULL DEFAULT '',
+  -- Title of the target, including namespace
+  ll_title nvarchar(255) NOT NULL default ''
 );
-CREATE INDEX /*$wgDBprefix*/lc_lang_key ON /*$wgDBprefix*/l10n_cache (lc_lang, lc_key);
 
---
--- Track links to external URLs
--- IE >= 4 supports no more than 2083 characters in a URL
-CREATE TABLE /*$wgDBprefix*/externallinks (
-   el_id INT NOT NULL PRIMARY KEY clustered IDENTITY,
-   el_from INT NOT NULL DEFAULT '0',
-   el_to VARCHAR(2083) NOT NULL,
-   el_index VARCHAR(896) NOT NULL,
-);
--- Maximum key length ON SQL Server is 900 bytes
-CREATE INDEX /*$wgDBprefix*/externallinks_index   ON /*$wgDBprefix*/externallinks(el_index);
+CREATE UNIQUE INDEX /*i*/ll_from ON /*_*/langlinks (ll_from, ll_lang);
+CREATE INDEX /*i*/ll_lang ON /*_*/langlinks (ll_lang, ll_title);
 
---
--- Track INTerlanguage links
---
-CREATE TABLE /*$wgDBprefix*/langlinks (
-   ll_from  INT          NOT NULL DEFAULT 0,
-   ll_lang  NVARCHAR(20)  NOT NULL DEFAULT '',
-   ll_title NVARCHAR(255)  NOT NULL DEFAULT '',
-   CONSTRAINT /*$wgDBprefix*/langlinks_pk PRIMARY KEY(ll_from, ll_lang),
-);
-CREATE UNIQUE INDEX /*$wgDBprefix*/langlinks_reverse_key ON /*$wgDBprefix*/langlinks(ll_lang,ll_title);
 
 --
 -- Track inline interwiki links
 --
-CREATE TABLE /*$wgDBprefix*/iwlinks (
-       -- page_id of the referring page
-       iwl_from INT NOT NULL DEFAULT 0,
+CREATE TABLE /*_*/iwlinks (
+  -- page_id of the referring page
+  iwl_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
 
-       -- Interwiki prefix code of the target
-       iwl_prefix NVARCHAR(20) NOT NULL DEFAULT '',
+  -- Interwiki prefix code of the target
+  iwl_prefix nvarchar(20) NOT NULL default '',
 
-       -- Title of the target, including namespace
-       iwl_title NVARCHAR(255) NOT NULL DEFAULT '',
+  -- Title of the target, including namespace
+  iwl_title nvarchar(255) NOT NULL default ''
 );
 
-CREATE UNIQUE INDEX /*$wgDBprefix*/iwl_from ON /*$wgDBprefix*/iwlinks(iwl_from,iwl_prefix,iwl_title);
-CREATE UNIQUE INDEX /*$wgDBprefix*/iwl_prefix ON /*$wgDBprefix*/iwlinks(iwl_prefix,iwl_title);
+CREATE UNIQUE INDEX /*i*/iwl_from ON /*_*/iwlinks (iwl_from, iwl_prefix, iwl_title);
+CREATE INDEX /*i*/iwl_prefix_title_from ON /*_*/iwlinks (iwl_prefix, iwl_title, iwl_from);
+CREATE INDEX /*i*/iwl_prefix_from_title ON /*_*/iwlinks (iwl_prefix, iwl_from, iwl_title);
 
 
 --
 -- Contains a single row with some aggregate info
--- ON the state of the site.
+-- on the state of the site.
 --
-CREATE TABLE /*$wgDBprefix*/site_stats (
-   ss_row_id        INT  NOT NULL DEFAULT 1 PRIMARY KEY,
-   ss_total_views   BIGINT DEFAULT 0,
-   ss_total_edits   BIGINT DEFAULT 0,
-   ss_good_articles BIGINT DEFAULT 0,
-   ss_total_pages   BIGINT DEFAULT -1,
-   ss_users         BIGINT DEFAULT -1,
-   ss_active_users  BIGINT DEFAULT -1,
-   ss_admins        INT    DEFAULT -1,
-   ss_images INT DEFAULT 0,
+CREATE TABLE /*_*/site_stats (
+  -- The single row should contain 1 here.
+  ss_row_id int NOT NULL,
+
+  -- Total number of page views, if hit counters are enabled.
+  ss_total_views bigint default 0,
+
+  -- Total number of edits performed.
+  ss_total_edits bigint default 0,
+
+  -- An approximate count of pages matching the following criteria:
+  -- * in namespace 0
+  -- * not a redirect
+  -- * contains the text '[['
+  -- See Article::isCountable() in includes/Article.php
+  ss_good_articles bigint default 0,
+
+  -- Total pages, theoretically equal to SELECT COUNT(*) FROM page; except faster
+  ss_total_pages bigint default '-1',
+
+  -- Number of users, theoretically equal to SELECT COUNT(*) FROM user;
+  ss_users bigint default '-1',
+
+  -- Number of users that still edit
+  ss_active_users bigint default '-1',
+
+  -- Number of images, equivalent to SELECT COUNT(*) FROM image
+  ss_images int default 0
 );
 
--- INSERT INTO site_stats DEFAULT VALUES;
+-- Pointless index to assuage developer superstitions
+CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats (ss_row_id);
+
 
 --
 -- Stores an ID for every time any article is visited;
--- depending ON $wgHitcounterUpdateFreq, it is
+-- depending on $wgHitcounterUpdateFreq, it is
 -- periodically cleared and the page_counter column
--- in the page table updated for the all articles
+-- in the page table updated for all the articles
 -- that have been visited.)
 --
-CREATE TABLE /*$wgDBprefix*/hitcounter (
-   hc_id BIGINT NOT NULL
+CREATE TABLE /*_*/hitcounter (
+  hc_id int NOT NULL
 );
 
+
 --
--- The Internet is full of jerks, alas. Sometimes it's handy
+-- The internet is full of jerks, alas. Sometimes it's handy
 -- to block a vandal or troll account.
 --
-CREATE TABLE /*$wgDBprefix*/ipblocks (
-       ipb_id      INT NOT NULL  PRIMARY KEY,
-       ipb_address NVARCHAR(255) NOT NULL,
-       ipb_user    INT NOT NULL DEFAULT 0,
-       ipb_by      INT NOT NULL DEFAULT 0,
-       ipb_by_text NVARCHAR(255) NOT NULL DEFAULT '',
-       ipb_reason  NVARCHAR(255) NOT NULL,
-       ipb_timestamp DATETIME NOT NULL DEFAULT GETDATE(),
-       ipb_auto BIT NOT NULL DEFAULT 0,
-       ipb_anon_only BIT NOT NULL DEFAULT 0,
-       ipb_create_account BIT NOT NULL DEFAULT 1,
-       ipb_enable_autoblock BIT NOT NULL DEFAULT 1,
-       ipb_expiry DATETIME NOT NULL DEFAULT GETDATE(),
-       ipb_range_start NVARCHAR(32) NOT NULL DEFAULT '',
-       ipb_range_end NVARCHAR(32) NOT NULL DEFAULT '',
-       ipb_deleted BIT NOT NULL DEFAULT 0,
-       ipb_block_email BIT NOT NULL DEFAULT 0,
-       ipb_allow_usertalk BIT NOT NULL DEFAULT 0,
-       ipb_parent_block_id   INT DEFAULT NULL,
+CREATE TABLE /*_*/ipblocks (
+  -- Primary key, introduced for privacy.
+  ipb_id int NOT NULL PRIMARY KEY IDENTITY,
+
+  -- Blocked IP address in dotted-quad form or user name.
+  ipb_address nvarchar(255) NOT NULL,
+
+  -- Blocked user ID or 0 for IP blocks.
+  ipb_user int REFERENCES /*_*/mwuser(user_id),
+
+  -- User ID who made the block.
+  ipb_by int REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
+
+  -- User name of blocker
+  ipb_by_text nvarchar(255) NOT NULL default '',
+
+  -- Text comment made by blocker.
+  ipb_reason nvarchar(255) NOT NULL,
+
+  -- Creation (or refresh) date in standard YMDHMS form.
+  -- IP blocks expire automatically.
+  ipb_timestamp varchar(14) NOT NULL default '',
+
+  -- Indicates that the IP address was banned because a banned
+  -- user accessed a page through it. If this is 1, ipb_address
+  -- will be hidden, and the block identified by block ID number.
+  ipb_auto bit NOT NULL default 0,
+
+  -- If set to 1, block applies only to logged-out users
+  ipb_anon_only bit NOT NULL default 0,
+
+  -- Block prevents account creation from matching IP addresses
+  ipb_create_account bit NOT NULL default 1,
+
+  -- Block triggers autoblocks
+  ipb_enable_autoblock bit NOT NULL default 1,
+
+  -- Time at which the block will expire.
+  -- May be "infinity"
+  ipb_expiry varchar(14) NOT NULL,
+
+  -- Start and end of an address range, in hexadecimal
+  -- Size chosen to allow IPv6
+  -- FIXME: these fields were originally blank for single-IP blocks,
+  -- but now they are populated. No migration was ever done. They
+  -- should be fixed to be blank again for such blocks (bug 49504).
+  ipb_range_start varchar(255) NOT NULL,
+  ipb_range_end varchar(255) NOT NULL,
+
+  -- Flag for entries hidden from users and Sysops
+  ipb_deleted bit NOT NULL default 0,
+
+  -- Block prevents user from accessing Special:Emailuser
+  ipb_block_email bit NOT NULL default 0,
+
+  -- Block allows user to edit their own talk page
+  ipb_allow_usertalk bit NOT NULL default 0,
+
+  -- ID of the block that caused this block to exist
+  -- Autoblocks set this to the original block
+  -- so that the original block being deleted also
+  -- deletes the autoblocks
+  ipb_parent_block_id int default NULL REFERENCES /*_*/ipblocks(ipb_id)
+
 );
+
 -- Unique index to support "user already blocked" messages
 -- Any new options which prevent collisions should be included
---UNIQUE INDEX ipb_address (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only),
-CREATE UNIQUE INDEX /*$wgDBprefix*/ipb_address   ON /*$wgDBprefix*/ipblocks(ipb_address, ipb_user, ipb_auto, ipb_anon_only);
-CREATE        INDEX /*$wgDBprefix*/ipb_user      ON /*$wgDBprefix*/ipblocks(ipb_user);
-CREATE        INDEX /*$wgDBprefix*/ipb_range     ON /*$wgDBprefix*/ipblocks(ipb_range_start, ipb_range_end);
-CREATE        INDEX /*$wgDBprefix*/ipb_timestamp ON /*$wgDBprefix*/ipblocks(ipb_timestamp);
-CREATE        INDEX /*$wgDBprefix*/ipb_expiry    ON /*$wgDBprefix*/ipblocks(ipb_expiry);
-;
+CREATE UNIQUE INDEX /*i*/ipb_address ON /*_*/ipblocks (ipb_address, ipb_user, ipb_auto, ipb_anon_only);
+
+CREATE INDEX /*i*/ipb_user ON /*_*/ipblocks (ipb_user);
+CREATE INDEX /*i*/ipb_range ON /*_*/ipblocks (ipb_range_start, ipb_range_end);
+CREATE INDEX /*i*/ipb_timestamp ON /*_*/ipblocks (ipb_timestamp);
+CREATE INDEX /*i*/ipb_expiry ON /*_*/ipblocks (ipb_expiry);
+CREATE INDEX /*i*/ipb_parent_block_id ON /*_*/ipblocks (ipb_parent_block_id);
+
 
 --
 -- Uploaded images and other files.
-CREATE TABLE /*$wgDBprefix*/image (
-   img_name varchar(255) NOT NULL default '',
-   img_size INT  NOT NULL DEFAULT 0,
-   img_width INT NOT NULL DEFAULT 0,
-   img_height INT NOT NULL DEFAULT 0,
-   img_metadata TEXT NOT NULL, -- was MEDIUMBLOB
-   img_bits SMALLINT NOT NULL DEFAULT 0,
-   img_media_type NVARCHAR(MAX) DEFAULT 'UNKNOWN',
-   img_major_mime NVARCHAR(MAX) DEFAULT 'UNKNOWN',
-   img_minor_mime NVARCHAR(MAX) NOT NULL DEFAULT 'unknown',
-   img_description NVARCHAR(MAX) NOT NULL,
-   img_user INT NOT NULL DEFAULT 0,
-   img_user_text VARCHAR(255) NOT NULL DEFAULT '',
-   img_timestamp DATETIME NOT NULL DEFAULT GETDATE(),
-   img_sha1 VARCHAR(255) NOT NULL default '',
-);
--- Used by Special:Imagelist for sort-by-size
-CREATE INDEX /*$wgDBprefix*/img_size ON /*$wgDBprefix*/[image](img_size);
--- Used by Special:Newimages and Special:Imagelist
-CREATE INDEX /*$wgDBprefix*/img_timestamp ON /*$wgDBprefix*/[image](img_timestamp)
-CREATE INDEX /*$wgDBprefix*/[img_sha1] ON /*wgDBprefix*/[image](img_sha1)
+--
+CREATE TABLE /*_*/image (
+  -- Filename.
+  -- This is also the title of the associated description page,
+  -- which will be in namespace 6 (NS_FILE).
+  img_name varbinary(255) NOT NULL default 0x PRIMARY KEY,
+
+  -- File size in bytes.
+  img_size int NOT NULL default 0,
+
+  -- For images, size in pixels.
+  img_width int NOT NULL default 0,
+  img_height int NOT NULL default 0,
+
+  -- Extracted Exif metadata stored as a serialized PHP array.
+  img_metadata varbinary(max) NOT NULL,
+
+  -- For images, bits per pixel if known.
+  img_bits int NOT NULL default 0,
+
+  -- Media type as defined by the MEDIATYPE_xxx constants
+  img_media_type varchar(16) default null check (img_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE')),
+
+  -- major part of a MIME media type as defined by IANA
+  -- see http://www.iana.org/assignments/media-types/
+  img_major_mime varchar(16) not null default 'unknown' check (img_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart')),
+
+  -- minor part of a MIME media type as defined by IANA
+  -- the minor parts are not required to adher to any standard
+  -- but should be consistent throughout the database
+  -- see http://www.iana.org/assignments/media-types/
+  img_minor_mime nvarchar(100) NOT NULL default 'unknown',
+
+  -- Description field as entered by the uploader.
+  -- This is displayed in image upload history and logs.
+  img_description nvarchar(255) NOT NULL,
+
+  -- user_id and user_name of uploader.
+  img_user int REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
+  img_user_text nvarchar(255) NOT NULL,
+
+  -- Time of the upload.
+  img_timestamp nvarchar(14) NOT NULL default '',
+
+  -- SHA-1 content hash in base-36
+  img_sha1 nvarchar(32) NOT NULL default ''
+);
+
+CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
+-- Used by Special:ListFiles for sort-by-size
+CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
+-- Used by Special:Newimages and Special:ListFiles
+CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);
+-- Used in API and duplicate search
+CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1);
+-- Used to get media of one type
+CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);
+
 
 --
 -- Previous revisions of uploaded files.
 -- Awkwardly, image rows have to be moved into
 -- this table at re-upload time.
 --
-CREATE TABLE /*$wgDBprefix*/oldimage (
-   oi_name VARCHAR(255) NOT NULL DEFAULT '',
-   oi_archive_name VARCHAR(255) NOT NULL DEFAULT '',
-   oi_size INT NOT NULL DEFAULT 0,
-   oi_width INT NOT NULL DEFAULT 0,
-   oi_height INT NOT NULL DEFAULT 0,
-   oi_bits SMALLINT NOT NULL DEFAULT 0,
-   oi_description NVARCHAR(MAX) NOT NULL,
-   oi_user INT NOT NULL DEFAULT 0,
-   oi_user_text VARCHAR(255) NOT NULL DEFAULT '',
-   oi_timestamp DATETIME NOT NULL DEFAULT GETDATE(),
-   oi_metadata TEXT NOT NULL,
-   oi_media_type NVARCHAR(MAX) DEFAULT 'UNKNOWN',
-   oi_major_mime NVARCHAR(MAX) NOT NULL DEFAULT 'UNKNOWN',
-   oi_minor_mime NVARCHAR(MAX) NOT NULL DEFAULT 'unknown',
-   oi_deleted BIT NOT NULL default 0,
-   oi_sha1 VARCHAR(255) NOT NULL default '',
-);
-CREATE INDEX /*$wgDBprefix*/oi_usertext_timestamp ON /*$wgDBprefix*/oldimage(oi_user_text,oi_timestamp);
-CREATE INDEX /*$wgDBprefix*/oi_name_timestamp ON /*$wgDBprefix*/oldimage(oi_name, oi_timestamp);
-CREATE INDEX /*$wgDBprefix*/oi_name_archive_name ON /*$wgDBprefix*/oldimage(oi_name,oi_archive_name);
-CREATE INDEX /*$wgDBprefix*/[oi_sha1] ON /*$wgDBprefix*/oldimage(oi_sha1);
+CREATE TABLE /*_*/oldimage (
+  -- Base filename: key to image.img_name
+  oi_name varbinary(255) NOT NULL default 0x REFERENCES /*_*/image(img_name) ON DELETE CASCADE ON UPDATE CASCADE,
+
+  -- Filename of the archived file.
+  -- This is generally a timestamp and '!' prepended to the base name.
+  oi_archive_name varbinary(255) NOT NULL default 0x,
+
+  -- Other fields as in image...
+  oi_size int NOT NULL default 0,
+  oi_width int NOT NULL default 0,
+  oi_height int NOT NULL default 0,
+  oi_bits int NOT NULL default 0,
+  oi_description nvarchar(255) NOT NULL,
+  oi_user int REFERENCES /*_*/mwuser(user_id),
+  oi_user_text nvarchar(255) NOT NULL,
+  oi_timestamp varchar(14) NOT NULL default '',
+
+  oi_metadata nvarchar(max) NOT NULL,
+  oi_media_type varchar(16) default null check (oi_media_type IN('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE')),
+  oi_major_mime varchar(16) not null default 'unknown' check (oi_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart')),
+  oi_minor_mime nvarchar(100) NOT NULL default 'unknown',
+  oi_deleted tinyint NOT NULL default 0,
+  oi_sha1 nvarchar(32) NOT NULL default ''
+);
+
+CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp);
+CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp);
+-- oi_archive_name truncated to 14 to avoid key length overflow
+CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name);
+CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1);
+
 
 --
 -- Record of deleted file data
 --
-CREATE TABLE /*$wgDBprefix*/filearchive (
-   fa_id INT NOT NULL PRIMARY KEY,
-   fa_name NVARCHAR(255)  NOT NULL DEFAULT '',
-   fa_archive_name NVARCHAR(255)  DEFAULT '',
-   fa_storage_group NVARCHAR(16),
-   fa_storage_key NVARCHAR(64)  DEFAULT '',
-   fa_deleted_user INT,
-   fa_deleted_timestamp NVARCHAR(14) DEFAULT NULL,
-   fa_deleted_reason NVARCHAR(255),
-   fa_size SMALLINT  DEFAULT 0,
-   fa_width SMALLINT DEFAULT 0,
-   fa_height SMALLINT DEFAULT 0,
-   fa_metadata NVARCHAR(MAX), -- was mediumblob
-   fa_bits SMALLINT DEFAULT 0,
-   fa_media_type NVARCHAR(11) DEFAULT NULL,
-   fa_major_mime NVARCHAR(11) DEFAULT 'unknown',
-   fa_minor_mime NVARCHAR(32) DEFAULT 'unknown',
-   fa_description NVARCHAR(255),
-   fa_user INT DEFAULT 0,
-   fa_user_text NVARCHAR(255) DEFAULT '',
-   fa_timestamp DATETIME DEFAULT GETDATE(),
-   fa_deleted BIT NOT NULL DEFAULT 0,
-);
--- Pick by image name
-CREATE INDEX /*$wgDBprefix*/filearchive_name ON /*$wgDBprefix*/filearchive(fa_name,fa_timestamp);
--- Pick by dupe files
-CREATE INDEX /*$wgDBprefix*/filearchive_dupe ON /*$wgDBprefix*/filearchive(fa_storage_group,fa_storage_key);
--- Pick by deletion time
-CREATE INDEX /*$wgDBprefix*/filearchive_time ON /*$wgDBprefix*/filearchive(fa_deleted_timestamp);
--- Pick by deleter
-CREATE INDEX /*$wgDBprefix*/filearchive_user ON /*$wgDBprefix*/filearchive(fa_deleted_user);
+CREATE TABLE /*_*/filearchive (
+  -- Unique row id
+  fa_id int NOT NULL PRIMARY KEY IDENTITY,
+
+  -- Original base filename; key to image.img_name, page.page_title, etc
+  fa_name nvarchar(255) NOT NULL default '',
+
+  -- Filename of archived file, if an old revision
+  fa_archive_name nvarchar(255) default '',
+
+  -- Which storage bin (directory tree or object store) the file data
+  -- is stored in. Should be 'deleted' for files that have been deleted;
+  -- any other bin is not yet in use.
+  fa_storage_group nvarchar(16),
+
+  -- SHA-1 of the file contents plus extension, used as a key for storage.
+  -- eg 8f8a562add37052a1848ff7771a2c515db94baa9.jpg
+  --
+  -- If NULL, the file was missing at deletion time or has been purged
+  -- from the archival storage.
+  fa_storage_key nvarchar(64) default '',
+
+  -- Deletion information, if this file is deleted.
+  fa_deleted_user int,
+  fa_deleted_timestamp varchar(14) default '',
+  fa_deleted_reason nvarchar(max),
+
+  -- Duped fields from image
+  fa_size int default 0,
+  fa_width int default 0,
+  fa_height int default 0,
+  fa_metadata nvarchar(max),
+  fa_bits int default 0,
+  fa_media_type varchar(16) default null check (fa_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE')),
+  fa_major_mime varchar(16) not null default 'unknown' check (fa_major_mime in('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart')),
+  fa_minor_mime nvarchar(100) default 'unknown',
+  fa_description nvarchar(255),
+  fa_user int default 0 REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
+  fa_user_text nvarchar(255),
+  fa_timestamp varchar(14) default '',
+
+  -- Visibility of deleted revisions, bitfield
+  fa_deleted tinyint NOT NULL default 0,
+
+  -- sha1 hash of file content
+  fa_sha1 nvarchar(32) NOT NULL default ''
+);
+
+-- pick out by image name
+CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
+-- pick out dupe files
+CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
+-- sort by deletion time
+CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
+-- sort by uploader
+CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
+-- find file by sha1, 10 bytes will be enough for hashes to be indexed
+CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1);
+
+
+--
+-- Store information about newly uploaded files before they're
+-- moved into the actual filestore
+--
+CREATE TABLE /*_*/uploadstash (
+  us_id int NOT NULL PRIMARY KEY IDENTITY,
+
+  -- the user who uploaded the file.
+  us_user int REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
+
+  -- file key. this is how applications actually search for the file.
+  -- this might go away, or become the primary key.
+  us_key nvarchar(255) NOT NULL,
+
+  -- the original path
+  us_orig_path nvarchar(255) NOT NULL,
+
+  -- the temporary path at which the file is actually stored
+  us_path nvarchar(255) NOT NULL,
+
+  -- which type of upload the file came from (sometimes)
+  us_source_type nvarchar(50),
+
+  -- the date/time on which the file was added
+  us_timestamp varchar(14) NOT NULL,
+
+  us_status nvarchar(50) NOT NULL,
+
+  -- chunk counter starts at 0, current offset is stored in us_size
+  us_chunk_inx int NULL,
+
+  -- Serialized file properties from File::getPropsFromPath
+  us_props nvarchar(max),
+
+  -- file size in bytes
+  us_size int NOT NULL,
+  -- this hash comes from File::sha1Base36(), and is 31 characters
+  us_sha1 nvarchar(31) NOT NULL,
+  us_mime nvarchar(255),
+  -- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
+  us_media_type varchar(16) default null check (us_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE')),
+  -- image-specific properties
+  us_image_width int,
+  us_image_height int,
+  us_image_bits smallint
+
+);
+
+-- sometimes there's a delete for all of a user's stuff.
+CREATE INDEX /*i*/us_user ON /*_*/uploadstash (us_user);
+-- pick out files by key, enforce key uniqueness
+CREATE UNIQUE INDEX /*i*/us_key ON /*_*/uploadstash (us_key);
+-- the abandoned upload cleanup script needs this
+CREATE INDEX /*i*/us_timestamp ON /*_*/uploadstash (us_timestamp);
+
 
 --
 -- Primarily a summary table for Special:Recentchanges,
 -- this table contains some additional info on edits from
 -- the last few days, see Article::editUpdates()
 --
-CREATE TABLE /*$wgDBprefix*/recentchanges (
-   rc_id INT NOT NULL,
-   rc_timestamp DATETIME DEFAULT GETDATE(),
-   rc_cur_time DATETIME DEFAULT GETDATE(),
-   rc_user INT DEFAULT 0,
-   rc_user_text NVARCHAR(255) DEFAULT '',
-   rc_namespace SMALLINT DEFAULT 0,
-   rc_title NVARCHAR(255)  DEFAULT '',
-   rc_comment NVARCHAR(255) DEFAULT '',
-   rc_minor BIT DEFAULT 0,
-   rc_bot BIT DEFAULT 0,
-   rc_new BIT DEFAULT 0,
-   rc_cur_id INT DEFAULT 0,
-   rc_this_oldid INT DEFAULT 0,
-   rc_last_oldid INT DEFAULT 0,
-   rc_type tinyint DEFAULT 0,
-   rc_patrolled BIT DEFAULT 0,
-   rc_ip NCHAR(40) DEFAULT '',
-   rc_old_len INT DEFAULT 0,
-   rc_new_len INT DEFAULT 0,
-   rc_deleted BIT DEFAULT 0,
-   rc_logid INT DEFAULT 0,
-   rc_log_type NVARCHAR(255) NULL DEFAULT NULL,
-   rc_log_action NVARCHAR(255) NULL DEFAULT NULL,
-   rc_params NVARCHAR(MAX) DEFAULT '',
-);
-CREATE INDEX /*$wgDBprefix*/rc_timestamp       ON /*$wgDBprefix*/recentchanges(rc_timestamp);
-CREATE INDEX /*$wgDBprefix*/rc_namespace_title ON /*$wgDBprefix*/recentchanges(rc_namespace, rc_title);
-CREATE INDEX /*$wgDBprefix*/rc_cur_id          ON /*$wgDBprefix*/recentchanges(rc_cur_id);
-CREATE INDEX /*$wgDBprefix*/new_name_timestamp ON /*$wgDBprefix*/recentchanges(rc_new,rc_namespace,rc_timestamp);
-CREATE INDEX /*$wgDBprefix*/rc_ip              ON /*$wgDBprefix*/recentchanges(rc_ip);
-CREATE INDEX /*$wgDBprefix*/rc_ns_usertext     ON /*$wgDBprefix*/recentchanges(rc_namespace, rc_user_text);
-CREATE INDEX /*$wgDBprefix*/rc_user_text       ON /*$wgDBprefix*/recentchanges(rc_user_text, rc_timestamp);
-;
-
-CREATE TABLE /*$wgDBprefix*/watchlist (
-   wl_user INT NOT NULL,
-   wl_namespace SMALLINT NOT NULL DEFAULT 0,
-   wl_title NVARCHAR(255)  NOT NULL DEFAULT '',
-   wl_notificationtimestamp NVARCHAR(14) DEFAULT NULL,
-
-);
-CREATE UNIQUE INDEX /*$wgDBprefix*/namespace_title ON /*$wgDBprefix*/watchlist(wl_namespace,wl_title);
-
--- Needs fulltext index.
-CREATE TABLE /*$wgDBprefix*/searchindex (
-   si_page INT NOT NULL unique REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE,
-   si_title varbinary(max) NOT NULL,
-   si_text varbinary(max) NOT NULL,
-   si_ext CHAR(4) NOT NULL DEFAULT '.txt',
-);
-CREATE FULLTEXT CATALOG wikidb AS DEFAULT;
-CREATE UNIQUE CLUSTERED INDEX searchindex_page ON searchindex (si_page);
-CREATE FULLTEXT INDEX on searchindex (si_title TYPE COLUMN si_ext, si_text  TYPE COLUMN si_ext)
-KEY INDEX searchindex_page
-;
-
--- This table is not used unless profiling is turned on
-CREATE TABLE profiling (
-  pf_count   INTEGER         NOT NULL DEFAULT 0,
-  pf_time    NUMERIC(18,10)  NOT NULL DEFAULT 0,
-  pf_name    NVARCHAR(200)            NOT NULL,
-  pf_server  NVARCHAR(200)            NULL
-);
-CREATE UNIQUE INDEX pf_name_server ON profiling (pf_name, pf_server);
-
---
--- Recognized INTerwiki link prefixes
---
-CREATE TABLE /*$wgDBprefix*/interwiki (
-   iw_prefix NCHAR(32) NOT NULL PRIMARY KEY,
-   iw_url NCHAR(127)   NOT NULL,
-   iw_api TEXT NOT NULL DEFAULT '',
-   iw_wikiid NVARCHAR(64) NOT NULL DEFAULT '',
-   iw_local BIT NOT NULL,
-   iw_trans BIT NOT NULL DEFAULT 0,
+CREATE TABLE /*_*/recentchanges (
+  rc_id int NOT NULL PRIMARY KEY IDENTITY,
+  rc_timestamp varchar(14) not null default '',
+
+  -- This is no longer used
+  -- Field kept in database for downgrades
+  -- @todo: add drop patch with 1.24
+  rc_cur_time varchar(14) NOT NULL default '',
+
+  -- As in revision
+  rc_user int NOT NULL default 0 REFERENCES /*_*/mwuser(user_id),
+  rc_user_text nvarchar(255) NOT NULL,
+
+  -- When pages are renamed, their RC entries do _not_ change.
+  rc_namespace int NOT NULL default 0,
+  rc_title nvarchar(255) NOT NULL default '',
+
+  -- as in revision...
+  rc_comment nvarchar(255) NOT NULL default '',
+  rc_minor bit NOT NULL default 0,
+
+  -- Edits by user accounts with the 'bot' rights key are
+  -- marked with a 1 here, and will be hidden from the
+  -- default view.
+  rc_bot bit NOT NULL default 0,
+
+  -- Set if this change corresponds to a page creation
+  rc_new bit NOT NULL default 0,
+
+  -- Key to page_id (was cur_id prior to 1.5).
+  -- This will keep links working after moves while
+  -- retaining the at-the-time name in the changes list.
+  rc_cur_id int REFERENCES /*_*/page(page_id),
+
+  -- rev_id of the given revision
+  rc_this_oldid int REFERENCES /*_*/revision(rev_id),
+
+  -- rev_id of the prior revision, for generating diff links.
+  rc_last_oldid int REFERENCES /*_*/revision(rev_id),
+
+  -- The type of change entry (RC_EDIT,RC_NEW,RC_LOG,RC_EXTERNAL)
+  rc_type tinyint NOT NULL default 0,
+
+  -- The source of the change entry (replaces rc_type)
+  -- default of '' is temporary, needed for initial migration
+  rc_source nvarchar(16) not null default '',
+
+  -- If the Recent Changes Patrol option is enabled,
+  -- users may mark edits as having been reviewed to
+  -- remove a warning flag on the RC list.
+  -- A value of 1 indicates the page has been reviewed.
+  rc_patrolled bit NOT NULL default 0,
+
+  -- Recorded IP address the edit was made from, if the
+  -- $wgPutIPinRC option is enabled.
+  rc_ip nvarchar(40) NOT NULL default '',
+
+  -- Text length in characters before
+  -- and after the edit
+  rc_old_len int,
+  rc_new_len int,
+
+  -- Visibility of recent changes items, bitfield
+  rc_deleted tinyint NOT NULL default 0,
+
+  -- Value corresponding to log_id, specific log entries
+  rc_logid int, -- FK added later
+  -- Store log type info here, or null
+  rc_log_type nvarchar(255) NULL default NULL,
+  -- Store log action or null
+  rc_log_action nvarchar(255) NULL default NULL,
+  -- Log params
+  rc_params nvarchar(max) NULL
+);
+
+CREATE INDEX /*i*/rc_timestamp ON /*_*/recentchanges (rc_timestamp);
+CREATE INDEX /*i*/rc_namespace_title ON /*_*/recentchanges (rc_namespace, rc_title);
+CREATE INDEX /*i*/rc_cur_id ON /*_*/recentchanges (rc_cur_id);
+CREATE INDEX /*i*/new_name_timestamp ON /*_*/recentchanges (rc_new,rc_namespace,rc_timestamp);
+CREATE INDEX /*i*/rc_ip ON /*_*/recentchanges (rc_ip);
+CREATE INDEX /*i*/rc_ns_usertext ON /*_*/recentchanges (rc_namespace, rc_user_text);
+CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp);
+
+
+CREATE TABLE /*_*/watchlist (
+  -- Key to user.user_id
+  wl_user int NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
+
+  -- Key to page_namespace/page_title
+  -- Note that users may watch pages which do not exist yet,
+  -- or existed in the past but have been deleted.
+  wl_namespace int NOT NULL default 0,
+  wl_title nvarchar(255) NOT NULL default '',
+
+  -- Timestamp used to send notification e-mails and show "updated since last visit" markers on
+  -- history and recent changes / watchlist. Set to NULL when the user visits the latest revision
+  -- of the page, which means that they should be sent an e-mail on the next change.
+  wl_notificationtimestamp varchar(14)
+
+);
+
+CREATE UNIQUE INDEX /*i*/wl_user ON /*_*/watchlist (wl_user, wl_namespace, wl_title);
+CREATE INDEX /*i*/namespace_title ON /*_*/watchlist (wl_namespace, wl_title);
+
+
+--
+-- Our search index for the builtin MediaWiki search
+--
+CREATE TABLE /*_*/searchindex (
+  -- Key to page_id
+  si_page int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
+
+  -- Munged version of title
+  si_title nvarchar(255) NOT NULL default '',
+
+  -- Munged version of body text
+  si_text nvarchar(max) NOT NULL
+);
+
+CREATE UNIQUE INDEX /*i*/si_page ON /*_*/searchindex (si_page);
+-- Fulltext index is defined in MssqlInstaller.php
+
+--
+-- Recognized interwiki link prefixes
+--
+CREATE TABLE /*_*/interwiki (
+  -- The interwiki prefix, (e.g. "Meatball", or the language prefix "de")
+  iw_prefix nvarchar(32) NOT NULL,
+
+  -- The URL of the wiki, with "$1" as a placeholder for an article name.
+  -- Any spaces in the name will be transformed to underscores before
+  -- insertion.
+  iw_url nvarchar(max) NOT NULL,
+
+  -- The URL of the file api.php
+  iw_api nvarchar(max) NOT NULL,
+
+  -- The name of the database (for a connection to be established with wfGetLB( 'wikiid' ))
+  iw_wikiid nvarchar(64) NOT NULL,
+
+  -- A boolean value indicating whether the wiki is in this project
+  -- (used, for example, to detect redirect loops)
+  iw_local bit NOT NULL,
+
+  -- Boolean value indicating whether interwiki transclusions are allowed.
+  iw_trans bit NOT NULL default 0
 );
 
+CREATE UNIQUE INDEX /*i*/iw_prefix ON /*_*/interwiki (iw_prefix);
+
+
 --
 -- Used for caching expensive grouped queries
 --
-CREATE TABLE /*$wgDBprefix*/querycache (
-   qc_type      NCHAR(32)  NOT NULL,
-   qc_value     INT       NOT NULL DEFAULT '0',
-   qc_namespace SMALLINT       NOT NULL DEFAULT 0,
-   qc_title     NCHAR(255)  NOT NULL DEFAULT '',
-   CONSTRAINT /*$wgDBprefix*/qc_pk PRIMARY KEY (qc_type,qc_value)
+CREATE TABLE /*_*/querycache (
+  -- A key name, generally the base name of of the special page.
+  qc_type nvarchar(32) NOT NULL,
+
+  -- Some sort of stored value. Sizes, counts...
+  qc_value int NOT NULL default 0,
+
+  -- Target namespace+title
+  qc_namespace int NOT NULL default 0,
+  qc_title nvarchar(255) NOT NULL default ''
 );
 
+CREATE INDEX /*i*/qc_type ON /*_*/querycache (qc_type,qc_value);
+
+
 --
 -- For a few generic cache operations if not using Memcached
 --
-CREATE TABLE /*$wgDBprefix*/objectcache (
-   keyname NCHAR(255)  NOT NULL DEFAULT '',
-   [value] NVARCHAR(MAX), -- IMAGE,
-   exptime DATETIME, -- This is treated as a DATETIME
-);
-CREATE CLUSTERED INDEX /*$wgDBprefix*/[objectcache_time] ON /*$wgDBprefix*/objectcache(exptime);
-CREATE UNIQUE INDEX /*$wgDBprefix*/[objectcache_PK] ON /*wgDBprefix*/objectcache(keyname);
---
--- Cache of INTerwiki transclusion
---
-CREATE TABLE /*$wgDBprefix*/transcache (
-   tc_url      NVARCHAR(255)  NOT NULL PRIMARY KEY,
-   tc_contents NVARCHAR(MAX),
-   tc_time     INT NOT NULL,
-);
-
-CREATE TABLE /*$wgDBprefix*/logging (
-   log_id INT  PRIMARY KEY IDENTITY,
-   log_type NCHAR(10) NOT NULL DEFAULT '',
-   log_action NCHAR(10) NOT NULL DEFAULT '',
-   log_timestamp DATETIME NOT NULL DEFAULT GETDATE(),
-   log_user INT NOT NULL DEFAULT 0,
-   log_user_text NVARCHAR(255) NOT NULL DEFAULT '',
-   log_namespace INT NOT NULL DEFAULT 0,
-   log_title NVARCHAR(255)  NOT NULL DEFAULT '',
-   log_page INT NULL DEFAULT NULL,
-   log_comment NVARCHAR(255) NOT NULL DEFAULT '',
-   log_params NVARCHAR(MAX) NOT NULL,
-   log_deleted BIT NOT NULL DEFAULT 0,
-);
-CREATE INDEX /*$wgDBprefix*/type_time ON /*$wgDBprefix*/logging (log_type, log_timestamp);
-CREATE INDEX /*$wgDBprefix*/user_time ON /*$wgDBprefix*/logging (log_user, log_timestamp);
-CREATE INDEX /*$wgDBprefix*/page_time ON /*$wgDBprefix*/logging (log_namespace, log_title, log_timestamp);
-CREATE INDEX /*$wgDBprefix*/times ON /*$wgDBprefix*/logging (log_timestamp);
-CREATE INDEX /*$wgDBprefix*/log_user_type_time ON /*$wgDBprefix*/logging (log_user, log_type, log_timestamp);
-CREATE INDEX /*$wgDBprefix*/log_page_id_time ON /*$wgDBprefix*/logging (log_page,log_timestamp);
-CREATE INDEX /*$wgDBprefix*/log_user_text_type_time ON /*$wgDBprefix*/logging (log_user_text, log_type, log_timestamp);
-CREATE INDEX /*$wgDBprefix*/log_user_text_time ON /*$wgDBprefix*/logging (log_user_text, log_timestamp);
-
-CREATE TABLE /*$wgDBprefix*/log_search (
-       -- The type of ID (rev ID, log ID, rev timestamp, username)
-       ls_field NVARCHAR(32) NOT NULL,
-       -- The value of the ID
-       ls_value NVARCHAR(255) NOT NULL,
-       -- Key to log_id
-       ls_log_id INT NOT NULL default 0,
-);
-CREATE UNIQUE INDEX /*$wgDBprefix*/ls_field_val ON /*$wgDBprefix*/log_search (ls_field,ls_value,ls_log_id);
-CREATE INDEX /*$wgDBprefix*/ls_log_id ON /*$wgDBprefix*/log_search (ls_log_id);
+CREATE TABLE /*_*/objectcache (
+  keyname nvarchar(255) NOT NULL default '' PRIMARY KEY,
+  value varbinary(max),
+  exptime varchar(14)
+);
+CREATE INDEX /*i*/exptime ON /*_*/objectcache (exptime);
+
+
+--
+-- Cache of interwiki transclusion
+--
+CREATE TABLE /*_*/transcache (
+  tc_url nvarchar(255) NOT NULL,
+  tc_contents nvarchar(max),
+  tc_time varchar(14) NOT NULL
+);
+
+CREATE UNIQUE INDEX /*i*/tc_url_idx ON /*_*/transcache (tc_url);
+
+
+CREATE TABLE /*_*/logging (
+  -- Log ID, for referring to this specific log entry, probably for deletion and such.
+  log_id int NOT NULL PRIMARY KEY IDENTITY(0,1),
+
+  -- Symbolic keys for the general log type and the action type
+  -- within the log. The output format will be controlled by the
+  -- action field, but only the type controls categorization.
+  log_type nvarchar(32) NOT NULL default '',
+  log_action nvarchar(32) NOT NULL default '',
+
+  -- Timestamp. Duh.
+  log_timestamp varchar(14) NOT NULL default '',
+
+  -- The user who performed this action; key to user_id
+  log_user int REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
+
+  -- Name of the user who performed this action
+  log_user_text nvarchar(255) NOT NULL default '',
+
+  -- Key to the page affected. Where a user is the target,
+  -- this will point to the user page.
+  log_namespace int NOT NULL default 0,
+  log_title nvarchar(255) NOT NULL default '',
+  log_page int NULL REFERENCES /*_*/page(page_id) ON DELETE SET NULL,
+
+  -- Freeform text. Interpreted as edit history comments.
+  log_comment nvarchar(255) NOT NULL default '',
+
+  -- miscellaneous parameters:
+  -- LF separated list (old system) or serialized PHP array (new system)
+  log_params nvarchar(max) NOT NULL,
+
+  -- rev_deleted for logs
+  log_deleted tinyint NOT NULL default 0
+);
+
+CREATE INDEX /*i*/type_time ON /*_*/logging (log_type, log_timestamp);
+CREATE INDEX /*i*/user_time ON /*_*/logging (log_user, log_timestamp);
+CREATE INDEX /*i*/page_time ON /*_*/logging (log_namespace, log_title, log_timestamp);
+CREATE INDEX /*i*/times ON /*_*/logging (log_timestamp);
+CREATE INDEX /*i*/log_user_type_time ON /*_*/logging (log_user, log_type, log_timestamp);
+CREATE INDEX /*i*/log_page_id_time ON /*_*/logging (log_page,log_timestamp);
+CREATE INDEX /*i*/type_action ON /*_*/logging (log_type, log_action, log_timestamp);
+CREATE INDEX /*i*/log_user_text_type_time ON /*_*/logging (log_user_text, log_type, log_timestamp);
+CREATE INDEX /*i*/log_user_text_time ON /*_*/logging (log_user_text, log_timestamp);
+
+INSERT INTO /*_*/logging (log_user,log_page,log_params) VALUES(0,0,'');
+
+ALTER TABLE /*_*/recentchanges ADD CONSTRAINT FK_rc_logid_log_id FOREIGN KEY (rc_logid) REFERENCES /*_*/logging(log_id) ON DELETE CASCADE;
+
+CREATE TABLE /*_*/log_search (
+  -- The type of ID (rev ID, log ID, rev timestamp, username)
+  ls_field nvarchar(32) NOT NULL,
+  -- The value of the ID
+  ls_value nvarchar(255) NOT NULL,
+  -- Key to log_id
+  ls_log_id int REFERENCES /*_*/logging(log_id) ON DELETE CASCADE
+);
+CREATE UNIQUE INDEX /*i*/ls_field_val ON /*_*/log_search (ls_field,ls_value,ls_log_id);
+CREATE INDEX /*i*/ls_log_id ON /*_*/log_search (ls_log_id);
 
 
 -- Jobs performed by parallel apache threads or a command-line daemon
-CREATE TABLE /*$wgDBprefix*/job (
-   job_id INT NOT NULL  PRIMARY KEY,
-   job_cmd NVARCHAR(200)  NOT NULL DEFAULT '',
-   job_namespace INT NOT NULL,
-   job_title NVARCHAR(200)  NOT NULL,
-   job_params NVARCHAR(255)  NOT NULL,
+CREATE TABLE /*_*/job (
+  job_id int NOT NULL PRIMARY KEY IDENTITY,
+
+  -- Command name
+  -- Limited to 60 to prevent key length overflow
+  job_cmd nvarchar(60) NOT NULL default '',
+
+  -- Namespace and title to act on
+  -- Should be 0 and '' if the command does not operate on a title
+  job_namespace int NOT NULL,
+  job_title nvarchar(255) NOT NULL,
+
+  -- Timestamp of when the job was inserted
+  -- NULL for jobs added before addition of the timestamp
+  job_timestamp nvarchar(14) NULL default NULL,
+
+  -- Any other parameters to the command
+  -- Stored as a PHP serialized array, or an empty string if there are no parameters
+  job_params nvarchar(max) NOT NULL,
+
+  -- Random, non-unique, number used for job acquisition (for lock concurrency)
+  job_random int NOT NULL default 0,
+
+  -- The number of times this job has been locked
+  job_attempts int NOT NULL default 0,
+
+  -- Field that conveys process locks on rows via process UUIDs
+  job_token nvarchar(32) NOT NULL default '',
+
+  -- Timestamp when the job was locked
+  job_token_timestamp varchar(14) NULL default NULL,
+
+  -- Base 36 SHA1 of the job parameters relevant to detecting duplicates
+  job_sha1 nvarchar(32) NOT NULL default ''
 );
-CREATE INDEX /*$wgDBprefix*/job_idx ON /*$wgDBprefix*/job(job_cmd,job_namespace,job_title);
+
+CREATE INDEX /*i*/job_sha1 ON /*_*/job (job_sha1);
+CREATE INDEX /*i*/job_cmd_token ON /*_*/job (job_cmd,job_token,job_random);
+CREATE INDEX /*i*/job_cmd_token_id ON /*_*/job (job_cmd,job_token,job_id);
+CREATE INDEX /*i*/job_cmd ON /*_*/job (job_cmd, job_namespace, job_title);
+CREATE INDEX /*i*/job_timestamp ON /*_*/job (job_timestamp);
+
 
 -- Details of updates to cached special pages
-CREATE TABLE /*$wgDBprefix*/querycache_info (
-   qci_type NVARCHAR(32) NOT NULL DEFAULT '' PRIMARY KEY,
-   qci_timestamp NVARCHAR(14) NOT NULL DEFAULT '19700101000000',
+CREATE TABLE /*_*/querycache_info (
+  -- Special page name
+  -- Corresponds to a qc_type value
+  qci_type nvarchar(32) NOT NULL default '',
+
+  -- Timestamp of last update
+  qci_timestamp varchar(14) NOT NULL default ''
 );
 
+CREATE UNIQUE INDEX /*i*/qci_type ON /*_*/querycache_info (qci_type);
+
+
 -- For each redirect, this table contains exactly one row defining its target
-CREATE TABLE /*$wgDBprefix*/redirect (
-       rd_from INT NOT NULL DEFAULT 0 REFERENCES /*$wgDBprefix*/[page](page_id) ON DELETE CASCADE,
-       rd_namespace SMALLINT NOT NULL DEFAULT '0',
-       rd_title NVARCHAR(255)  NOT NULL DEFAULT '',
-       rd_interwiki NVARCHAR(32) DEFAULT NULL,
-       rd_fragment NVARCHAR(255) DEFAULT NULL,
+CREATE TABLE /*_*/redirect (
+  -- Key to the page_id of the redirect page
+  rd_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
+
+  -- Key to page_namespace/page_title of the target page.
+  -- The target page may or may not exist, and due to renames
+  -- and deletions may refer to different page records as time
+  -- goes by.
+  rd_namespace int NOT NULL default 0,
+  rd_title nvarchar(255) NOT NULL default '',
+  rd_interwiki nvarchar(32) default NULL,
+  rd_fragment nvarchar(255) default NULL
 );
-CREATE UNIQUE INDEX /*$wgDBprefix*/rd_ns_title ON /*$wgDBprefix*/redirect(rd_namespace,rd_title,rd_from);
+
+CREATE INDEX /*i*/rd_ns_title ON /*_*/redirect (rd_namespace,rd_title,rd_from);
+
 
 -- Used for caching expensive grouped queries that need two links (for example double-redirects)
-CREATE TABLE /*$wgDBprefix*/querycachetwo (
-   qcc_type NCHAR(32) NOT NULL,
-   qcc_value INT NOT NULL DEFAULT 0,
-   qcc_namespace INT NOT NULL DEFAULT 0,
-   qcc_title NCHAR(255)  NOT NULL DEFAULT '',
-   qcc_namespacetwo INT NOT NULL DEFAULT 0,
-   qcc_titletwo NCHAR(255)  NOT NULL DEFAULT '',
-   CONSTRAINT /*$wgDBprefix*/qcc_type PRIMARY KEY(qcc_type,qcc_value),
-);
-CREATE UNIQUE INDEX /*$wgDBprefix*/qcc_title    ON /*$wgDBprefix*/querycachetwo(qcc_type,qcc_namespace,qcc_title);
-CREATE UNIQUE INDEX /*$wgDBprefix*/qcc_titletwo ON /*$wgDBprefix*/querycachetwo(qcc_type,qcc_namespacetwo,qcc_titletwo);
-
-
---- Used for storing page restrictions (i.e. protection levels)
-CREATE TABLE /*$wgDBprefix*/page_restrictions (
-   pr_id INT UNIQUE IDENTITY,
-   pr_page INT NOT NULL REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE,
-   pr_type NVARCHAR(200) NOT NULL,
-   pr_level NVARCHAR(200) NOT NULL,
-   pr_cascade SMALLINT NOT NULL,
-   pr_user INT NULL,
-   pr_expiry DATETIME NULL,
-   CONSTRAINT /*$wgDBprefix*/pr_pagetype PRIMARY KEY(pr_page,pr_type),
-);
-CREATE INDEX /*$wgDBprefix*/pr_page      ON /*$wgDBprefix*/page_restrictions(pr_page);
-CREATE INDEX /*$wgDBprefix*/pr_typelevel ON /*$wgDBprefix*/page_restrictions(pr_type,pr_level);
-CREATE INDEX /*$wgDBprefix*/pr_pagelevel ON /*$wgDBprefix*/page_restrictions(pr_level);
-CREATE INDEX /*$wgDBprefix*/pr_cascade   ON /*$wgDBprefix*/page_restrictions(pr_cascade);
-;
+CREATE TABLE /*_*/querycachetwo (
+  -- A key name, generally the base name of of the special page.
+  qcc_type nvarchar(32) NOT NULL,
+
+  -- Some sort of stored value. Sizes, counts...
+  qcc_value int NOT NULL default 0,
+
+  -- Target namespace+title
+  qcc_namespace int NOT NULL default 0,
+  qcc_title nvarchar(255) NOT NULL default '',
+
+  -- Target namespace+title2
+  qcc_namespacetwo int NOT NULL default 0,
+  qcc_titletwo nvarchar(255) NOT NULL default ''
+);
+
+CREATE INDEX /*i*/qcc_type ON /*_*/querycachetwo (qcc_type,qcc_value);
+CREATE INDEX /*i*/qcc_title ON /*_*/querycachetwo (qcc_type,qcc_namespace,qcc_title);
+CREATE INDEX /*i*/qcc_titletwo ON /*_*/querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
+
+
+-- Used for storing page restrictions (i.e. protection levels)
+CREATE TABLE /*_*/page_restrictions (
+  -- Field for an ID for this restrictions row (sort-key for Special:ProtectedPages)
+  pr_id int NOT NULL PRIMARY KEY IDENTITY,
+  -- Page to apply restrictions to (Foreign Key to page).
+  pr_page int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
+  -- The protection type (edit, move, etc)
+  pr_type nvarchar(60) NOT NULL,
+  -- The protection level (Sysop, autoconfirmed, etc)
+  pr_level nvarchar(60) NOT NULL,
+  -- Whether or not to cascade the protection down to pages transcluded.
+  pr_cascade bit NOT NULL,
+  -- Field for future support of per-user restriction.
+  pr_user int NULL,
+  -- Field for time-limited protection.
+  pr_expiry varchar(14) NULL
+);
+
+CREATE UNIQUE INDEX /*i*/pr_pagetype ON /*_*/page_restrictions (pr_page,pr_type);
+CREATE INDEX /*i*/pr_typelevel ON /*_*/page_restrictions (pr_type,pr_level);
+CREATE INDEX /*i*/pr_level ON /*_*/page_restrictions (pr_level);
+CREATE INDEX /*i*/pr_cascade ON /*_*/page_restrictions (pr_cascade);
+
 
 -- Protected titles - nonexistent pages that have been protected
-CREATE TABLE /*$wgDBprefix*/protected_titles (
+CREATE TABLE /*_*/protected_titles (
   pt_namespace int NOT NULL,
-  pt_title NVARCHAR(255) NOT NULL,
-  pt_user int NOT NULL,
-  pt_reason NVARCHAR(3555),
-  pt_timestamp DATETIME NOT NULL,
-  pt_expiry DATETIME NOT NULL default '',
-  pt_create_perm NVARCHAR(60) NOT NULL,
-  PRIMARY KEY (pt_namespace,pt_title),
+  pt_title nvarchar(255) NOT NULL,
+  pt_user int REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
+  pt_reason nvarchar(255),
+  pt_timestamp varchar(14) NOT NULL,
+  pt_expiry varchar(14) NOT NULL,
+  pt_create_perm nvarchar(60) NOT NULL
 );
-CREATE INDEX /*$wgDBprefix*/pt_timestamp   ON /*$wgDBprefix*/protected_titles(pt_timestamp);
-;
+
+CREATE UNIQUE INDEX /*i*/pt_namespace_title ON /*_*/protected_titles (pt_namespace,pt_title);
+CREATE INDEX /*i*/pt_timestamp ON /*_*/protected_titles (pt_timestamp);
+
 
 -- Name/value pairs indexed by page_id
-CREATE TABLE /*$wgDBprefix*/page_props (
-  pp_page int NOT NULL,
-  pp_propname NVARCHAR(60) NOT NULL,
-  pp_value NVARCHAR(MAX) NOT NULL,
-  PRIMARY KEY (pp_page,pp_propname)
+CREATE TABLE /*_*/page_props (
+  pp_page int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
+  pp_propname nvarchar(60) NOT NULL,
+  pp_value nvarchar(max) NOT NULL
 );
 
+CREATE UNIQUE INDEX /*i*/pp_page_propname ON /*_*/page_props (pp_page,pp_propname);
+CREATE UNIQUE INDEX /*i*/pp_propname_page ON /*_*/page_props (pp_propname,pp_page);
+
+
 -- A table to log updates, one text key row per update.
-CREATE TABLE /*$wgDBprefix*/updatelog (
-  ul_key NVARCHAR(255) NOT NULL,
-  PRIMARY KEY (ul_key)
+CREATE TABLE /*_*/updatelog (
+  ul_key nvarchar(255) NOT NULL PRIMARY KEY,
+  ul_value nvarchar(max)
 );
 
--- NOTE To enable full text indexing on SQL 2008 you need to create an account FDH$MSSQLSERVER
--- AND assign a password for the FDHOST process to run under
--- Once you have assigned a password to that account, you need to run the following stored procedure
--- replacing XXXXX with the password you used.
--- EXEC sp_fulltext_resetfdhostaccount @username = 'FDH$MSSQLSERVER', @password = 'XXXXXX' ;
 
+-- A table to track tags for revisions, logs and recent changes.
+CREATE TABLE /*_*/change_tag (
+  -- RCID for the change
+  ct_rc_id int NULL REFERENCES /*_*/recentchanges(rc_id),
+  -- LOGID for the change
+  ct_log_id int NULL REFERENCES /*_*/logging(log_id),
+  -- REVID for the change
+  ct_rev_id int NULL REFERENCES /*_*/revision(rev_id),
+  -- Tag applied
+  ct_tag nvarchar(255) NOT NULL,
+  -- Parameters for the tag, presently unused
+  ct_params nvarchar(max) NULL
+);
+
+CREATE UNIQUE INDEX /*i*/change_tag_rc_tag ON /*_*/change_tag (ct_rc_id,ct_tag);
+CREATE UNIQUE INDEX /*i*/change_tag_log_tag ON /*_*/change_tag (ct_log_id,ct_tag);
+CREATE UNIQUE INDEX /*i*/change_tag_rev_tag ON /*_*/change_tag (ct_rev_id,ct_tag);
+-- Covering index, so we can pull all the info only out of the index.
+CREATE INDEX /*i*/change_tag_tag_id ON /*_*/change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
+
+
+-- Rollup table to pull a LIST of tags simply without ugly GROUP_CONCAT
+-- that only works on MySQL 4.1+
+CREATE TABLE /*_*/tag_summary (
+  -- RCID for the change
+  ts_rc_id int NULL REFERENCES /*_*/recentchanges(rc_id),
+  -- LOGID for the change
+  ts_log_id int NULL REFERENCES /*_*/logging(log_id),
+  -- REVID for the change
+  ts_rev_id int NULL REFERENCES /*_*/revision(rev_id),
+  -- Comma-separated list of tags
+  ts_tags nvarchar(max) NOT NULL
+);
+
+CREATE UNIQUE INDEX /*i*/tag_summary_rc_id ON /*_*/tag_summary (ts_rc_id);
+CREATE UNIQUE INDEX /*i*/tag_summary_log_id ON /*_*/tag_summary (ts_log_id);
+CREATE UNIQUE INDEX /*i*/tag_summary_rev_id ON /*_*/tag_summary (ts_rev_id);
+
+
+CREATE TABLE /*_*/valid_tag (
+  vt_tag nvarchar(255) NOT NULL PRIMARY KEY
+);
+
+-- Table for storing localisation data
+CREATE TABLE /*_*/l10n_cache (
+  -- Language code
+  lc_lang nvarchar(32) NOT NULL,
+  -- Cache key
+  lc_key nvarchar(255) NOT NULL,
+  -- Value
+  lc_value varbinary(max) NOT NULL
+);
+CREATE INDEX /*i*/lc_lang_key ON /*_*/l10n_cache (lc_lang, lc_key);
+
+-- Table for caching JSON message texts for the resource loader
+CREATE TABLE /*_*/msg_resource (
+  -- Resource name
+  mr_resource nvarchar(255) NOT NULL,
+  -- Language code
+  mr_lang nvarchar(32) NOT NULL,
+  -- JSON blob
+  mr_blob varbinary(max) NOT NULL,
+  -- Timestamp of last update
+  mr_timestamp varchar(14) NOT NULL
+);
+CREATE UNIQUE INDEX /*i*/mr_resource_lang ON /*_*/msg_resource (mr_resource, mr_lang);
+
+-- Table for administering which message is contained in which resource
+CREATE TABLE /*_*/msg_resource_links (
+  mrl_resource varbinary(255) NOT NULL,
+  -- Message key
+  mrl_message varbinary(255) NOT NULL
+);
+CREATE UNIQUE INDEX /*i*/mrl_message_resource ON /*_*/msg_resource_links (mrl_message, mrl_resource);
+
+-- Table caching which local files a module depends on that aren't
+-- registered directly, used for fast retrieval of file dependency.
+-- Currently only used for tracking images that CSS depends on
+CREATE TABLE /*_*/module_deps (
+  -- Module name
+  md_module nvarchar(255) NOT NULL,
+  -- Skin name
+  md_skin nvarchar(32) NOT NULL,
+  -- JSON nvarchar(max) with file dependencies
+  md_deps nvarchar(max) NOT NULL
+);
+CREATE UNIQUE INDEX /*i*/md_module_skin ON /*_*/module_deps (md_module, md_skin);
+
+-- Holds all the sites known to the wiki.
+CREATE TABLE /*_*/sites (
+  -- Numeric id of the site
+  site_id                    int        NOT NULL PRIMARY KEY IDENTITY,
+
+  -- Global identifier for the site, ie 'enwiktionary'
+  site_global_key            nvarchar(32)       NOT NULL,
+
+  -- Type of the site, ie 'mediawiki'
+  site_type                  nvarchar(32)       NOT NULL,
+
+  -- Group of the site, ie 'wikipedia'
+  site_group                 nvarchar(32)       NOT NULL,
+
+  -- Source of the site data, ie 'local', 'wikidata', 'my-magical-repo'
+  site_source                nvarchar(32)       NOT NULL,
+
+  -- Language code of the sites primary language.
+  site_language              nvarchar(32)       NOT NULL,
+
+  -- Protocol of the site, ie 'http://', 'irc://', '//'
+  -- This field is an index for lookups and is build from type specific data in site_data.
+  site_protocol              nvarchar(32)       NOT NULL,
+
+  -- Domain of the site in reverse order, ie 'org.mediawiki.www.'
+  -- This field is an index for lookups and is build from type specific data in site_data.
+  site_domain                NVARCHAR(255)        NOT NULL,
+
+  -- Type dependent site data.
+  site_data                  nvarchar(max)                NOT NULL,
+
+  -- If site.tld/path/key:pageTitle should forward users to  the page on
+  -- the actual site, where "key" is the local identifier.
+  site_forward              bit                NOT NULL,
+
+  -- Type dependent site config.
+  -- For instance if template transclusion should be allowed if it's a MediaWiki.
+  site_config               nvarchar(max)                NOT NULL
+);
+
+CREATE UNIQUE INDEX /*i*/sites_global_key ON /*_*/sites (site_global_key);
+CREATE INDEX /*i*/sites_type ON /*_*/sites (site_type);
+CREATE INDEX /*i*/sites_group ON /*_*/sites (site_group);
+CREATE INDEX /*i*/sites_source ON /*_*/sites (site_source);
+CREATE INDEX /*i*/sites_language ON /*_*/sites (site_language);
+CREATE INDEX /*i*/sites_protocol ON /*_*/sites (site_protocol);
+CREATE INDEX /*i*/sites_domain ON /*_*/sites (site_domain);
+CREATE INDEX /*i*/sites_forward ON /*_*/sites (site_forward);
+
+-- Links local site identifiers to their corresponding site.
+CREATE TABLE /*_*/site_identifiers (
+  -- Key on site.site_id
+  si_site                    int        NOT NULL REFERENCES /*_*/sites(site_id) ON DELETE CASCADE,
+
+  -- local key type, ie 'interwiki' or 'langlink'
+  si_type                    nvarchar(32)       NOT NULL,
+
+  -- local key value, ie 'en' or 'wiktionary'
+  si_key                     nvarchar(32)       NOT NULL
+);
 
---- Add the full-text capabilities, depricated in SQL Server 2005, FTS is enabled on all user created tables by default unless you are using SQL Server 2005 Express
---sp_fulltext_database 'enable';
---sp_fulltext_catalog 'WikiCatalog', 'create'
---sp_fulltext_table
---sp_fulltext_column
---sp_fulltext_table 'Articles', 'activate'
+CREATE UNIQUE INDEX /*i*/site_ids_type ON /*_*/site_identifiers (si_type, si_key);
+CREATE INDEX /*i*/site_ids_site ON /*_*/site_identifiers (si_site);
+CREATE INDEX /*i*/site_ids_key ON /*_*/site_identifiers (si_key);
index ff02468..f698508 100644 (file)
@@ -3,7 +3,7 @@
  * Check for articles to fix after adding/deleting namespaces
  *
  * Copyright © 2005-2007 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * 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
@@ -50,10 +50,7 @@ class NamespaceConflictChecker extends Maintenance {
        }
 
        public function execute() {
-               global $wgTitle;
-
                $this->db = wfGetDB( DB_MASTER );
-               $wgTitle = Title::newFromText( 'Namespace title conflict cleanup script' );
 
                $fix = $this->hasOption( 'fix' );
                $suffix = $this->getOption( 'suffix', '' );
diff --git a/maintenance/oracle/archives/patch-user_password_expire.sql b/maintenance/oracle/archives/patch-user_password_expire.sql
new file mode 100644 (file)
index 0000000..8e752da
--- /dev/null
@@ -0,0 +1,3 @@
+define mw_prefix='{$wgDBprefix}';
+
+ALTER TABLE &mw_prefix.mwuser ADD user_password_expires TIMESTAMP(6) WITH TIME ZONE NULL DEFAULT NULL;
index a6b5350..f05c0cc 100644 (file)
@@ -18,7 +18,8 @@ CREATE TABLE &mw_prefix.mwuser ( -- replace reserved word 'user'
   user_options              CLOB,
   user_touched              TIMESTAMP(6) WITH TIME ZONE,
   user_registration         TIMESTAMP(6) WITH TIME ZONE,
-  user_editcount            NUMBER
+  user_editcount            NUMBER,
+  user_password_expires     TIMESTAMP(6) WITH TIME ZONE NULL DEFAULT NULL
 );
 ALTER TABLE &mw_prefix.mwuser ADD CONSTRAINT &mw_prefix.mwuser_pk PRIMARY KEY (user_id);
 CREATE UNIQUE INDEX &mw_prefix.mwuser_u01 ON &mw_prefix.mwuser (user_name);
index b4d255a..b0f91a0 100644 (file)
@@ -6,7 +6,7 @@
  * Man this is depressing.
  *
  * Copyright © 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * 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
@@ -47,8 +47,6 @@ class Orphans extends Maintenance {
        }
 
        public function execute() {
-               global $wgTitle;
-               $wgTitle = Title::newFromText( 'Orphan revision cleanup script' );
                $this->checkOrphans( $this->hasOption( 'fix' ) );
                $this->checkSeparation( $this->hasOption( 'fix' ) );
                # Does not work yet, do not use
index 3aa8109..266cb3b 100644 (file)
@@ -12,18 +12,23 @@ SET client_min_messages = 'ERROR';
 DROP SEQUENCE IF EXISTS user_user_id_seq CASCADE;
 DROP SEQUENCE IF EXISTS page_page_id_seq CASCADE;
 DROP SEQUENCE IF EXISTS revision_rev_id_seq CASCADE;
-DROP SEQUENCE IF EXISTS page_restrictions_id_seq CASCADE;
+DROP SEQUENCE IF EXISTS text_old_id_seq CASCADE;
+DROP SEQUENCE IF EXISTS page_restrictions_pr_id_seq CASCADE;
 DROP SEQUENCE IF EXISTS ipblocks_ipb_id_seq CASCADE;
+DROP SEQUENCE IF EXISTS filearchive_fa_id_seq CASCADE;
+DROP SEQUENCE IF EXISTS uploadstash_us_id_seq CASCADE;
 DROP SEQUENCE IF EXISTS recentchanges_rc_id_seq CASCADE;
 DROP SEQUENCE IF EXISTS logging_log_id_seq CASCADE;
 DROP SEQUENCE IF EXISTS job_job_id_seq CASCADE;
 DROP SEQUENCE IF EXISTS category_cat_id_seq CASCADE;
 DROP SEQUENCE IF EXISTS archive_ar_id_seq CASCADE;
 DROP SEQUENCE IF EXISTS externallinks_el_id_seq CASCADE;
+DROP SEQUENCE IF EXISTS sites_site_id_seq CASCADE;
 DROP FUNCTION IF EXISTS page_deleted() CASCADE;
 DROP FUNCTION IF EXISTS ts2_page_title() CASCADE;
 DROP FUNCTION IF EXISTS ts2_page_text() CASCADE;
 DROP FUNCTION IF EXISTS add_interwiki(TEXT,INT,SMALLINT) CASCADE;
+DROP TYPE IF EXISTS media_type CASCADE;
 
 CREATE SEQUENCE user_user_id_seq MINVALUE 0 START WITH 0;
 CREATE TABLE mwuser ( -- replace reserved word 'user'
@@ -40,7 +45,8 @@ CREATE TABLE mwuser ( -- replace reserved word 'user'
   user_email_authenticated  TIMESTAMPTZ,
   user_touched              TIMESTAMPTZ,
   user_registration         TIMESTAMPTZ,
-  user_editcount            INTEGER
+  user_editcount            INTEGER,
+  user_password_expires     TIMESTAMPTZ NULL
 );
 CREATE INDEX user_email_token_idx ON mwuser (user_email_token);
 
index 0dc19e2..683de45 100644 (file)
@@ -4,7 +4,7 @@
  * It may be useful for getting preprocessor statistics or filling the
  * preprocessor cache.
  *
- * Copyright © 2011 Platonides - http://www.mediawiki.org/
+ * Copyright © 2011 Platonides - https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 2f89520..85a125f 100644 (file)
@@ -51,7 +51,9 @@ class PurgeList extends Maintenance {
                $this->output( "Done!\n" );
        }
 
-       /** Purge URL coming from stdin */
+       /**
+        * Purge URL coming from stdin
+        */
        private function doPurge() {
                $stdin = $this->getStdin();
                $urls = array();
@@ -78,7 +80,9 @@ class PurgeList extends Maintenance {
                $this->sendPurgeRequest( $urls );
        }
 
-       /** Purge a namespace or all pages */
+       /**
+        * Purge a namespace or all pages
+        */
        private function purgeNamespace( $namespace = false ) {
                $dbr = wfGetDB( DB_SLAVE );
                $startId = 0;
index 12ed9fa..6ce54b9 100644 (file)
@@ -49,7 +49,7 @@ class RebuildFileCache extends Maintenance {
 
        public function execute() {
                global $wgUseFileCache, $wgReadOnly, $wgContentNamespaces, $wgRequestTime;
-               global $wgTitle, $wgOut;
+               global $wgOut;
                if ( !$wgUseFileCache ) {
                        $this->error( "Nothing to do -- \$wgUseFileCache is disabled.", true );
                }
@@ -104,22 +104,22 @@ class RebuildFileCache extends Maintenance {
                                $rebuilt = false;
                                $wgRequestTime = microtime( true ); # bug 22852
 
-                               $wgTitle = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
-                               if ( null == $wgTitle ) {
+                               $title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
+                               if ( null == $title ) {
                                        $this->output( "Page {$row->page_id} has bad title\n" );
                                        continue; // broken title?
                                }
 
                                $context = new RequestContext;
-                               $context->setTitle( $wgTitle );
-                               $article = Article::newFromTitle( $wgTitle, $context );
+                               $context->setTitle( $title );
+                               $article = Article::newFromTitle( $title, $context );
                                $context->setWikiPage( $article->getPage() );
 
                                $wgOut = $context->getOutput(); // set display title
 
                                // If the article is cacheable, then load it
                                if ( $article->isFileCacheable() ) {
-                                       $cache = HTMLFileCache::newFromTitle( $wgTitle, 'view' );
+                                       $cache = HTMLFileCache::newFromTitle( $title, 'view' );
                                        if ( $cache->isCacheGood() ) {
                                                if ( $overwrite ) {
                                                        $rebuilt = true;
@@ -151,11 +151,6 @@ class RebuildFileCache extends Maintenance {
                        $blockEnd += $this->mBatchSize;
                }
                $this->output( "Done!\n" );
-
-               // Remove these to be safe
-               if ( isset( $wgTitle ) ) {
-                       unset( $wgTitle );
-               }
        }
 }
 
index ed67ccd..8b0b057 100644 (file)
@@ -8,7 +8,7 @@
  *              add them only.
  *
  * Copyright © 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index c651f72..722db26 100644 (file)
@@ -50,8 +50,6 @@ class RebuildTextIndex extends Maintenance {
        }
 
        public function execute() {
-               global $wgTitle;
-
                // Shouldn't be needed for Postgres
                $this->db = wfGetDB( DB_MASTER );
                if ( $this->db->getType() == 'postgres' ) {
@@ -68,8 +66,6 @@ class RebuildTextIndex extends Maintenance {
                        }
                }
 
-               $wgTitle = Title::newFromText( "Rebuild text index script" );
-
                if ( $this->db->getType() == 'mysql' ) {
                        $this->dropMysqlTextIndex();
                        $this->populateSearchIndex();
index 9f73e49..2b6680d 100644 (file)
@@ -5,7 +5,7 @@
  * Usage: php refreshImageMetadata.php
  *
  * Copyright © 2011 Brian Wolff
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 0cde28c..eab5fe7 100644 (file)
@@ -7,7 +7,7 @@
  * Templates etc are pulled from the local wiki database, not from the dump.
  *
  * Copyright (C) 2006 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 7c896d2..f7d5fc0 100644 (file)
@@ -47,8 +47,6 @@ 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
                }
@@ -69,7 +67,6 @@ class RunJobs extends Maintenance {
                $maxJobs = $this->getOption( 'maxjobs', false );
                $maxTime = $this->getOption( 'maxtime', false );
                $startTime = time();
-               $wgTitle = Title::newFromText( 'RunJobs.php' );
 
                $group = JobQueueGroup::singleton();
                // Handle any required periodic queue maintenance
index 9168d6f..854910f 100644 (file)
@@ -46,16 +46,6 @@ class ShowCacheStats extends Maintenance {
                if ( get_class( $wgMemc ) == 'EmptyBagOStuff' ) {
                        $this->error( "You are running EmptyBagOStuff, I can not provide any statistics.", true );
                }
-               $session = intval( $wgMemc->get( wfMemcKey( 'stats', 'request_with_session' ) ) );
-               $noSession = intval( $wgMemc->get( wfMemcKey( 'stats', 'request_without_session' ) ) );
-               $total = $session + $noSession;
-               if ( $total == 0 ) {
-                       $this->error( "You either have no stats or the cache isn't running. Aborting.", true );
-               }
-               $this->output( "Requests\n" );
-               $this->output( sprintf( "with session:      %-10d %6.2f%%\n", $session, $session / $total * 100 ) );
-               $this->output( sprintf( "without session:   %-10d %6.2f%%\n", $noSession, $noSession / $total * 100 ) );
-               $this->output( sprintf( "total:             %-10d %6.2f%%\n", $total, 100 ) );
 
                $this->output( "\nParser cache\n" );
                $hits = intval( $wgMemc->get( wfMemcKey( 'stats', 'pcache_hit' ) ) );
index f0be709..aade17e 100644 (file)
@@ -221,6 +221,9 @@ class SyncFileBackend extends Maintenance {
                        return $status;
                }
 
+               $src->preloadFileStat( array( 'srcs' => $sPaths, 'latest' => 1 ) );
+               $dst->preloadFileStat( array( 'srcs' => $dPaths, 'latest' => 1 ) );
+
                $ops = array();
                $fsFiles = array();
                foreach ( $sPaths as $i => $sPath ) {
index fb2f0e1..ca610fc 100644 (file)
@@ -126,7 +126,12 @@ CREATE TABLE /*_*/user (
   -- Meant primarily for heuristic checks to give an impression of whether
   -- the account has been used much.
   --
-  user_editcount int
+  user_editcount int,
+
+  -- Expiration date for user password. Use $user->expirePassword()
+  -- to force a password reset.
+  user_password_expires varbinary(14) DEFAULT NULL
+
 ) /*$wgDBTableOptions*/;
 
 CREATE UNIQUE INDEX /*i*/user_name ON /*_*/user (user_name);
index 85364ee..8c1ad17 100644 (file)
@@ -83,7 +83,7 @@ class UpdateMediaWiki extends Maintenance {
        }
 
        function execute() {
-               global $wgVersion, $wgTitle, $wgLang, $wgAllowSchemaUpdates;
+               global $wgVersion, $wgLang, $wgAllowSchemaUpdates;
 
                if ( !$wgAllowSchemaUpdates && !( $this->hasOption( 'force' ) || $this->hasOption( 'schema' ) || $this->hasOption( 'noschema' ) ) ) {
                        $this->error( "Do not run update.php on this wiki. If you're seeing this you should\n"
@@ -106,7 +106,6 @@ class UpdateMediaWiki extends Maintenance {
                }
 
                $wgLang = Language::factory( 'en' );
-               $wgTitle = Title::newFromText( "MediaWiki database updater" );
 
                define( 'MW_UPDATER', true );
 
index c5ade2d..12c4a2c 100644 (file)
@@ -40,16 +40,13 @@ class UpdateSpecialPages extends Maintenance {
        }
 
        public function execute() {
-               global $IP, $wgQueryPages, $wgQueryCacheLimit, $wgDisableQueryPageUpdate;
+               global $wgQueryCacheLimit, $wgDisableQueryPageUpdate;
 
                $dbw = wfGetDB( DB_MASTER );
 
                $this->doSpecialPageCacheUpdates( $dbw );
 
-               // This is needed to initialise $wgQueryPages
-               require_once "$IP/includes/QueryPage.php";
-
-               foreach ( $wgQueryPages as $page ) {
+               foreach ( QueryPage::getPages() as $page ) {
                        list( $class, $special ) = $page;
                        $limit = isset( $page[2] ) ? $page[2] : null;
 
index 44a1aab..f20b64e 100644 (file)
@@ -3,7 +3,7 @@
  * Helper class for update.php.
  *
  * Copyright © 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index a02459f..49b8fda 100644 (file)
@@ -150,7 +150,7 @@ return array(
                        'vector/vector.js',
                ),
                'position' => 'top',
-               'dependencies' => 'jquery.delayedBind',
+               'dependencies' => 'jquery.throttle-debounce',
                'remoteBasePath' => $GLOBALS['wgStylePath'],
                'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
@@ -238,7 +238,6 @@ return array(
        ),
        'jquery.expandableField' => array(
                'scripts' => 'resources/jquery/jquery.expandableField.js',
-               'dependencies' => 'jquery.delayedBind',
        ),
        'jquery.farbtastic' => array(
                'scripts' => 'resources/jquery/jquery.farbtastic.js',
@@ -339,6 +338,9 @@ return array(
                'scripts' => 'resources/jquery/jquery.textSelection.js',
                'dependencies' => 'jquery.client',
        ),
+       'jquery.throttle-debounce' => array(
+               'scripts' => 'resources/jquery/jquery.ba-throttle-debounce.js',
+       ),
        'jquery.validate' => array(
                'scripts' => 'resources/jquery/jquery.validate.js',
        ),
@@ -636,6 +638,81 @@ return array(
                'group' => 'jquery.ui',
        ),
 
+       /* Moment.js */
+
+       'moment' => array(
+               'scripts' => 'resources/moment/moment.js',
+               'languageScripts' => array(
+                       'ar-ma' => 'resources/moment/lang/ar-ma.js',
+                       'ar' => 'resources/moment/lang/ar.js',
+                       'bg' => 'resources/moment/lang/bg.js',
+                       'br' => 'resources/moment/lang/br.js',
+                       'bs' => 'resources/moment/lang/bs.js',
+                       'ca' => 'resources/moment/lang/ca.js',
+                       'cs' => 'resources/moment/lang/cs.js',
+                       'cv' => 'resources/moment/lang/cv.js',
+                       'cy' => 'resources/moment/lang/cy.js',
+                       'da' => 'resources/moment/lang/da.js',
+                       'de' => 'resources/moment/lang/de.js',
+                       'el' => 'resources/moment/lang/el.js',
+                       'en-au' => 'resources/moment/lang/en-au.js',
+                       'en-ca' => 'resources/moment/lang/en-ca.js',
+                       'en-gb' => 'resources/moment/lang/en-gb.js',
+                       'eo' => 'resources/moment/lang/eo.js',
+                       'es' => 'resources/moment/lang/es.js',
+                       'et' => 'resources/moment/lang/et.js',
+                       'eu' => 'resources/moment/lang/eu.js',
+                       'fa' => 'resources/moment/lang/fa.js',
+                       'fi' => 'resources/moment/lang/fi.js',
+                       'fo' => 'resources/moment/lang/fo.js',
+                       'fr-ca' => 'resources/moment/lang/fr-ca.js',
+                       'fr' => 'resources/moment/lang/fr.js',
+                       'gl' => 'resources/moment/lang/gl.js',
+                       'he' => 'resources/moment/lang/he.js',
+                       'hi' => 'resources/moment/lang/hi.js',
+                       'hr' => 'resources/moment/lang/hr.js',
+                       'hu' => 'resources/moment/lang/hu.js',
+                       'hy-am' => 'resources/moment/lang/hy-am.js',
+                       'id' => 'resources/moment/lang/id.js',
+                       'is' => 'resources/moment/lang/is.js',
+                       'it' => 'resources/moment/lang/it.js',
+                       'ja' => 'resources/moment/lang/ja.js',
+                       'ka' => 'resources/moment/lang/ka.js',
+                       'ko' => 'resources/moment/lang/ko.js',
+                       'lt' => 'resources/moment/lang/lt.js',
+                       'lv' => 'resources/moment/lang/lv.js',
+                       'mk' => 'resources/moment/lang/mk.js',
+                       'ml' => 'resources/moment/lang/ml.js',
+                       'mr' => 'resources/moment/lang/mr.js',
+                       'ms-my' => 'resources/moment/lang/ms-my.js',
+                       'nb' => 'resources/moment/lang/nb.js',
+                       'ne' => 'resources/moment/lang/ne.js',
+                       'nl' => 'resources/moment/lang/nl.js',
+                       'nn' => 'resources/moment/lang/nn.js',
+                       'pl' => 'resources/moment/lang/pl.js',
+                       'pt-br' => 'resources/moment/lang/pt-br.js',
+                       'pt' => 'resources/moment/lang/pt.js',
+                       'ro' => 'resources/moment/lang/ro.js',
+                       'rs' => 'resources/moment/lang/rs.js',
+                       'ru' => 'resources/moment/lang/ru.js',
+                       'sk' => 'resources/moment/lang/sk.js',
+                       'sl' => 'resources/moment/lang/sl.js',
+                       'sq' => 'resources/moment/lang/sq.js',
+                       'sv' => 'resources/moment/lang/sv.js',
+                       'ta' => 'resources/moment/lang/ta.js',
+                       'th' => 'resources/moment/lang/th.js',
+                       'tl-ph' => 'resources/moment/lang/tl-ph.js',
+                       'tr' => 'resources/moment/lang/tr.js',
+                       'tzm-la' => 'resources/moment/lang/tzm-la.js',
+                       'tzm' => 'resources/moment/lang/tzm.js',
+                       'uk' => 'resources/moment/lang/uk.js',
+                       'uz' => 'resources/moment/lang/uz.js',
+                       'vn' => 'resources/moment/lang/vn.js',
+                       'zh-cn' => 'resources/moment/lang/zh-cn.js',
+                       'zh-tw' => 'resources/moment/lang/zh-tw.js',
+               ),
+       ),
+
        /* MediaWiki */
 
        'mediawiki' => array(
@@ -682,7 +759,7 @@ return array(
        ),
        'mediawiki.debug' => array(
                'scripts' => 'resources/mediawiki/mediawiki.debug.js',
-               'styles' => 'resources/mediawiki/mediawiki.debug.css',
+               'styles' => 'resources/mediawiki/mediawiki.debug.less',
                'dependencies' => 'jquery.footHovzer',
                'position' => 'bottom',
        ),
@@ -748,7 +825,10 @@ return array(
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.notification' => array(
-               'styles' => 'resources/mediawiki/mediawiki.notification.css',
+               'styles' => array(
+                       'resources/mediawiki/mediawiki.notification.css',
+                       'resources/mediawiki/mediawiki.notification.hideForPrint.css' => array( 'media' => 'print' ),
+               ),
                'scripts' => 'resources/mediawiki/mediawiki.notification.js',
                'dependencies' => array(
                        'mediawiki.page.startup',
@@ -894,8 +974,12 @@ return array(
        ),
        'mediawiki.action.edit.editWarning' => array(
                'scripts' => 'resources/mediawiki.action/mediawiki.action.edit.editWarning.js',
+               'dependencies' => array(
+                       'mediawiki.jqueryMsg'
+               ),
                'messages' => array(
                        'editwarning-warning',
+                       'prefs-editing'
                ),
        ),
        // Alias for backwards compatibility
@@ -1165,9 +1249,16 @@ return array(
        'mediawiki.special.userlogin.signup.js' => array(
                'scripts' => 'resources/mediawiki.special/mediawiki.special.userlogin.signup.js',
                'messages' => array(
+                       'createacct-error',
                        'createacct-emailrequired',
+                       'noname',
+                       'userexists',
+               ),
+               'dependencies' => array(
+                       'mediawiki.api',
+                       'mediawiki.jqueryMsg',
+                       'jquery.throttle-debounce',
                ),
-               'dependencies' => 'mediawiki.jqueryMsg',
        ),
        'mediawiki.special.javaScriptTest' => array(
                'scripts' => 'resources/mediawiki.special/mediawiki.special.javaScriptTest.js',
@@ -1248,6 +1339,9 @@ return array(
                ),
                'position' => 'top',
        ),
+
+       /* MediaWiki UI */
+
        'mediawiki.ui' => array(
                'skinStyles' => array(
                        'default' => 'resources/mediawiki.ui/default.less',
@@ -1266,8 +1360,8 @@ return array(
                'targets' => array( 'desktop', 'mobile' ),
        ),
 
-       /* OOJS */
-       // WARNING: oojs is NOT COMPATIBLE with older browsers and
+       /* OOjs */
+       // WARNING: OOjs and OOjs-UI are NOT COMPATIBLE with older browsers and
        // WILL BREAK if loaded in browsers that don't support ES5
        'oojs' => array(
                'scripts' => array(
@@ -1275,4 +1369,27 @@ return array(
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'oojs-ui' => array(
+               'scripts' => array(
+                       'resources/oojs-ui/oojs-ui.js',
+               ),
+               'styles' => array(
+                       'resources/oojs-ui/oojs-ui.svg.css',
+               ),
+               'skinStyles' => array(
+                       'default' => 'resources/oojs-ui/oojs-ui-apex.css',
+                       'minerva' => array(),
+               ),
+               'messages' => array(
+                       'ooui-dialog-action-close',
+                       'ooui-outline-control-move-down',
+                       'ooui-outline-control-move-up',
+                       'ooui-outline-control-remove',
+                       'ooui-toolbar-more',
+               ),
+               'dependencies' => array(
+                       'oojs',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
 );
index e3e4b9a..6e47c60 100644 (file)
         getTitle: function() {
             var title, $e = this.$element, o = this.options;
             fixTitle($e);
-            var title, o = this.options;
             if (typeof o.title == 'string') {
                 title = $e.attr(o.title == 'title' ? 'original-title' : o.title);
             } else if (typeof o.title == 'function') {
diff --git a/resources/jquery/jquery.ba-throttle-debounce.js b/resources/jquery/jquery.ba-throttle-debounce.js
new file mode 100644 (file)
index 0000000..fa30bdf
--- /dev/null
@@ -0,0 +1,252 @@
+/*!
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ * 
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+
+// Script: jQuery throttle / debounce: Sometimes, less is more!
+//
+// *Version: 1.1, Last updated: 3/7/2010*
+// 
+// Project Home - http://benalman.com/projects/jquery-throttle-debounce-plugin/
+// GitHub       - http://github.com/cowboy/jquery-throttle-debounce/
+// Source       - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.js
+// (Minified)   - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.min.js (0.7kb)
+// 
+// About: License
+// 
+// Copyright (c) 2010 "Cowboy" Ben Alman,
+// Dual licensed under the MIT and GPL licenses.
+// http://benalman.com/about/license/
+// 
+// About: Examples
+// 
+// These working examples, complete with fully commented code, illustrate a few
+// ways in which this plugin can be used.
+// 
+// Throttle - http://benalman.com/code/projects/jquery-throttle-debounce/examples/throttle/
+// Debounce - http://benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/
+// 
+// About: Support and Testing
+// 
+// Information about what version or versions of jQuery this plugin has been
+// tested with, what browsers it has been tested in, and where the unit tests
+// reside (so you can test it yourself).
+// 
+// jQuery Versions - none, 1.3.2, 1.4.2
+// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.6, Safari 3-4, Chrome 4-5, Opera 9.6-10.1.
+// Unit Tests      - http://benalman.com/code/projects/jquery-throttle-debounce/unit/
+// 
+// About: Release History
+// 
+// 1.1 - (3/7/2010) Fixed a bug in <jQuery.throttle> where trailing callbacks
+//       executed later than they should. Reworked a fair amount of internal
+//       logic as well.
+// 1.0 - (3/6/2010) Initial release as a stand-alone project. Migrated over
+//       from jquery-misc repo v0.4 to jquery-throttle repo v1.0, added the
+//       no_trailing throttle parameter and debounce functionality.
+// 
+// Topic: Note for non-jQuery users
+// 
+// jQuery isn't actually required for this plugin, because nothing internal
+// uses any jQuery methods or properties. jQuery is just used as a namespace
+// under which these methods can exist.
+// 
+// Since jQuery isn't actually required for this plugin, if jQuery doesn't exist
+// when this plugin is loaded, the method described below will be created in
+// the `Cowboy` namespace. Usage will be exactly the same, but instead of
+// $.method() or jQuery.method(), you'll need to use Cowboy.method().
+
+(function(window,undefined){
+  '$:nomunge'; // Used by YUI compressor.
+  
+  // Since jQuery really isn't required for this plugin, use `jQuery` as the
+  // namespace only if it already exists, otherwise use the `Cowboy` namespace,
+  // creating it if necessary.
+  var $ = window.jQuery || window.Cowboy || ( window.Cowboy = {} ),
+    
+    // Internal method reference.
+    jq_throttle;
+  
+  // Method: jQuery.throttle
+  // 
+  // Throttle execution of a function. Especially useful for rate limiting
+  // execution of handlers on events like resize and scroll. If you want to
+  // rate-limit execution of a function to a single time, see the
+  // <jQuery.debounce> method.
+  // 
+  // In this visualization, | is a throttled-function call and X is the actual
+  // callback execution:
+  // 
+  // > Throttled with `no_trailing` specified as false or unspecified:
+  // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
+  // > X    X    X    X    X    X        X    X    X    X    X    X
+  // > 
+  // > Throttled with `no_trailing` specified as true:
+  // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
+  // > X    X    X    X    X             X    X    X    X    X
+  // 
+  // Usage:
+  // 
+  // > var throttled = jQuery.throttle( delay, [ no_trailing, ] callback );
+  // > 
+  // > jQuery('selector').bind( 'someevent', throttled );
+  // > jQuery('selector').unbind( 'someevent', throttled );
+  // 
+  // This also works in jQuery 1.4+:
+  // 
+  // > jQuery('selector').bind( 'someevent', jQuery.throttle( delay, [ no_trailing, ] callback ) );
+  // > jQuery('selector').unbind( 'someevent', callback );
+  // 
+  // Arguments:
+  // 
+  //  delay - (Number) A zero-or-greater delay in milliseconds. For event
+  //    callbacks, values around 100 or 250 (or even higher) are most useful.
+  //  no_trailing - (Boolean) Optional, defaults to false. If no_trailing is
+  //    true, callback will only execute every `delay` milliseconds while the
+  //    throttled-function is being called. If no_trailing is false or
+  //    unspecified, callback will be executed one final time after the last
+  //    throttled-function call. (After the throttled-function has not been
+  //    called for `delay` milliseconds, the internal counter is reset)
+  //  callback - (Function) A function to be executed after delay milliseconds.
+  //    The `this` context and all arguments are passed through, as-is, to
+  //    `callback` when the throttled-function is executed.
+  // 
+  // Returns:
+  // 
+  //  (Function) A new, throttled, function.
+  
+  $.throttle = jq_throttle = function( delay, no_trailing, callback, debounce_mode ) {
+    // After wrapper has stopped being called, this timeout ensures that
+    // `callback` is executed at the proper times in `throttle` and `end`
+    // debounce modes.
+    var timeout_id,
+      
+      // Keep track of the last time `callback` was executed.
+      last_exec = 0;
+    
+    // `no_trailing` defaults to falsy.
+    if ( typeof no_trailing !== 'boolean' ) {
+      debounce_mode = callback;
+      callback = no_trailing;
+      no_trailing = undefined;
+    }
+    
+    // The `wrapper` function encapsulates all of the throttling / debouncing
+    // functionality and when executed will limit the rate at which `callback`
+    // is executed.
+    function wrapper() {
+      var that = this,
+        elapsed = +new Date() - last_exec,
+        args = arguments;
+      
+      // Execute `callback` and update the `last_exec` timestamp.
+      function exec() {
+        last_exec = +new Date();
+        callback.apply( that, args );
+      };
+      
+      // If `debounce_mode` is true (at_begin) this is used to clear the flag
+      // to allow future `callback` executions.
+      function clear() {
+        timeout_id = undefined;
+      };
+      
+      if ( debounce_mode && !timeout_id ) {
+        // Since `wrapper` is being called for the first time and
+        // `debounce_mode` is true (at_begin), execute `callback`.
+        exec();
+      }
+      
+      // Clear any existing timeout.
+      timeout_id && clearTimeout( timeout_id );
+      
+      if ( debounce_mode === undefined && elapsed > delay ) {
+        // In throttle mode, if `delay` time has been exceeded, execute
+        // `callback`.
+        exec();
+        
+      } else if ( no_trailing !== true ) {
+        // In trailing throttle mode, since `delay` time has not been
+        // exceeded, schedule `callback` to execute `delay` ms after most
+        // recent execution.
+        // 
+        // If `debounce_mode` is true (at_begin), schedule `clear` to execute
+        // after `delay` ms.
+        // 
+        // If `debounce_mode` is false (at end), schedule `callback` to
+        // execute after `delay` ms.
+        timeout_id = setTimeout( debounce_mode ? clear : exec, debounce_mode === undefined ? delay - elapsed : delay );
+      }
+    };
+    
+    // Set the guid of `wrapper` function to the same of original callback, so
+    // it can be removed in jQuery 1.4+ .unbind or .die by using the original
+    // callback as a reference.
+    if ( $.guid ) {
+      wrapper.guid = callback.guid = callback.guid || $.guid++;
+    }
+    
+    // Return the wrapper function.
+    return wrapper;
+  };
+  
+  // Method: jQuery.debounce
+  // 
+  // Debounce execution of a function. Debouncing, unlike throttling,
+  // guarantees that a function is only executed a single time, either at the
+  // very beginning of a series of calls, or at the very end. If you want to
+  // simply rate-limit execution of a function, see the <jQuery.throttle>
+  // method.
+  // 
+  // In this visualization, | is a debounced-function call and X is the actual
+  // callback execution:
+  // 
+  // > Debounced with `at_begin` specified as false or unspecified:
+  // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
+  // >                          X                                 X
+  // > 
+  // > Debounced with `at_begin` specified as true:
+  // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
+  // > X                                 X
+  // 
+  // Usage:
+  // 
+  // > var debounced = jQuery.debounce( delay, [ at_begin, ] callback );
+  // > 
+  // > jQuery('selector').bind( 'someevent', debounced );
+  // > jQuery('selector').unbind( 'someevent', debounced );
+  // 
+  // This also works in jQuery 1.4+:
+  // 
+  // > jQuery('selector').bind( 'someevent', jQuery.debounce( delay, [ at_begin, ] callback ) );
+  // > jQuery('selector').unbind( 'someevent', callback );
+  // 
+  // Arguments:
+  // 
+  //  delay - (Number) A zero-or-greater delay in milliseconds. For event
+  //    callbacks, values around 100 or 250 (or even higher) are most useful.
+  //  at_begin - (Boolean) Optional, defaults to false. If at_begin is false or
+  //    unspecified, callback will only be executed `delay` milliseconds after
+  //    the last debounced-function call. If at_begin is true, callback will be
+  //    executed only at the first debounced-function call. (After the
+  //    throttled-function has not been called for `delay` milliseconds, the
+  //    internal counter is reset)
+  //  callback - (Function) A function to be executed after delay milliseconds.
+  //    The `this` context and all arguments are passed through, as-is, to
+  //    `callback` when the debounced-function is executed.
+  // 
+  // Returns:
+  // 
+  //  (Function) A new, debounced, function.
+  
+  $.debounce = function( delay, at_begin, callback ) {
+    return callback === undefined
+      ? jq_throttle( delay, at_begin, false )
+      : jq_throttle( delay, callback, at_begin !== false );
+  };
+  
+})(this);
index 935aa4a..6689b7c 100644 (file)
@@ -20,7 +20,7 @@
                 *
                 * @param {Object} nav An object with atleast a 'userAgent' and 'platform' key.
                 * Defaults to the global Navigator object.
-                * @returns {Object} The resulting client object will be in the following format:
+                * @return {Object} The resulting client object will be in the following format:
                 *  {
                 *   'name': 'firefox',
                 *   'layout': 'gecko',
                                        version = match[1];
                                }
                        }
+                       // And Amazon Silk's lies about being Android on mobile or Safari on desktop
+                       if ( match = ua.match( /\bsilk\/([0-9.\-_]*)/ ) ) {
+                               if ( match[1] ) {
+                                       name = 'silk';
+                                       version = match[1];
+                               }
+                       }
 
                        versionNumber = parseFloat( version, 10 ) || 0.0;
 
                 * @param {boolean} [exactMatchOnly=false] Only return true if the browser is matched, otherwise
                 * returns true if the browser is not found.
                 *
-                * @returns {boolean} The current browser is in the support map
+                * @return {boolean} The current browser is in the support map
                 */
                test: function ( map, profile, exactMatchOnly ) {
                        /*jshint evil: true */
index 8bc45c9..04f8047 100644 (file)
@@ -14,7 +14,7 @@
                var color;
 
                do {
-                       color = $.curCSS( elem, attr );
+                       color = $.css( elem, attr );
 
                        // Keep going until we find an element that has color, or we hit the body
                        if ( color !== '' && color !== 'transparent' || $.nodeName( elem, 'body' ) ) {
                'outlineColor'
        ], function ( i, attr ) {
                $.fx.step[attr] = function ( fx ) {
-                       if ( fx.state === 0 ) {
+                       if ( !fx.colorInit ) {
                                fx.start = getColor( fx.elem, attr );
                                fx.end = $.colorUtil.getRGB( fx.end );
+                               fx.colorInit = true;
                        }
 
                        fx.elem.style[attr] = 'rgb(' + [
index 40f3d44..874c111 100644 (file)
@@ -1,4 +1,4 @@
-( function ( $ ) {
+( function ( mw, $ ) {
 /**
  * Function that escapes spaces in event names. This is needed because
  * "_delayedBind-foo bar-1000" refers to two events
@@ -73,4 +73,11 @@ $.fn.extend( {
        }
 } );
 
-}( jQuery ) );
+mw.log.deprecate( $.fn, 'delayedBind', $.fn.delayedBind,
+       'Use the jquery.throttle-debounce module instead' );
+mw.log.deprecate( $.fn, 'delayedBindCancel', $.fn.delayedBindCancel,
+       'Use the jquery.throttle-debounce module instead' );
+mw.log.deprecate( $.fn, 'delayedBindUnbind', $.fn.delayedBindUnbind,
+       'Use the jquery.throttle-debounce module instead' );
+
+}( mediaWiki, jQuery ) );
index 9e532e5..732cc6e 100644 (file)
@@ -56,7 +56,7 @@
                        args = arguments;
 
                $( this ).each( function () {
-                       var key, context;
+                       var key, context, timeout;
 
                        /* Construction / Loading */
 
                                $( this )
                                        .addClass( 'expandableField' )
                                        .focus( function ( e ) {
+                                               clearTimeout( timeout );
                                                $.expandableField.expandField( e, context );
                                        } )
-                                       .delayedBind( 250, 'blur', function ( e ) {
-                                               $.expandableField.condenseField( e, context );
+                                       .blur( function ( e ) {
+                                               timeout = setTimeout( function () {
+                                                       $.expandableField.condenseField( e, context );
+                                               }, 250 );
                                        } );
                        }
                        // Store the context for next time
index 70bfc4e..eb29db9 100644 (file)
@@ -16,8 +16,7 @@
  *
  * Uses window.devicePixelRatio if available, or CSS media queries on IE.
  *
- * @method
- * @returns {number} Device pixel ratio
+ * @return {number} Device pixel ratio
  */
 $.devicePixelRatio = function () {
        if ( window.devicePixelRatio !== undefined ) {
@@ -51,8 +50,7 @@ $.devicePixelRatio = function () {
  * Implement responsive images based on srcset attributes, if browser has no
  * native srcset support.
  *
- * @method
- * @returns {jQuery} This selection
+ * @return {jQuery} This selection
  */
 $.fn.hidpi = function () {
        var $target = this,
@@ -81,11 +79,11 @@ $.fn.hidpi = function () {
 /**
  * Match a srcset entry for the given device pixel ratio
  *
+ * Exposed for testing.
+ *
  * @param {number} devicePixelRatio
  * @param {string} srcset
  * @return {mixed} null or the matching src string
- *
- * Exposed for testing.
  */
 $.matchSrcSet = function ( devicePixelRatio, srcset ) {
        var candidates,
index d9a2b19..e0d9de2 100644 (file)
@@ -9,7 +9,7 @@
  *
  * @param {Object} options
  * @param {string} key
- * @returns {string} Localized message
+ * @return {string} Localized message
  */
 function msg( options, key ) {
        var args = options.params[key] || [];
index de39978..03c1c85 100644 (file)
                                                // Check for properties in B but not in A
                                                // This is about 15% faster (tested in Safari 5 and Firefox 3.6)
                                                // ...than incrementing a count variable in the above and below loops
-                                               // See also: http://www.mediawiki.org/wiki/ResourceLoader/Default_modules/compareObject_test#Results
+                                               // See also: https://www.mediawiki.org/wiki/ResourceLoader/Default_modules/compareObject_test#Results
                                                for ( prop in objectB ) {
                                                        if ( !( prop in objectA ) ) {
                                                                return false;
index 3774d0c..f967a1d 100644 (file)
@@ -421,20 +421,26 @@ $.suggestions = {
                                selected = context.data.$container.find( '.suggestions-result-current' );
                                $.suggestions.hide( context );
                                if ( selected.length === 0 || context.data.selectedWithMouse ) {
-                                       // if nothing is selected OR if something was selected with the mouse,
-                                       // cancel any current requests and submit the form
+                                       // If nothing is selected or if something was selected with the mouse
+                                       // cancel any current requests and allow the form to be submitted
+                                       // (simply don't prevent default behavior).
                                        $.suggestions.cancel( context );
-                                       context.config.$region.closest( 'form' ).submit();
+                                       preventDefault = false;
                                } else if ( selected.is( '.suggestions-special' ) ) {
                                        if ( typeof context.config.special.select === 'function' ) {
-                                               context.config.special.select.call( selected, context.data.$textbox );
+                                               // Allow the callback to decide whether to prevent default or not
+                                               if ( context.config.special.select.call( selected, context.data.$textbox ) === true ) {
+                                                       preventDefault = false;
+                                               }
                                        }
                                } else {
+                                       $.suggestions.highlight( context, selected, true );
+
                                        if ( typeof context.config.result.select === 'function' ) {
-                                               $.suggestions.highlight( context, selected, true );
-                                               context.config.result.select.call( selected, context.data.$textbox );
-                                       } else {
-                                               $.suggestions.highlight( context, selected, true );
+                                               // Allow the callback to decide whether to prevent default or not
+                                               if ( context.config.result.select.call( selected, context.data.$textbox ) === true ) {
+                                                       preventDefault = false;
+                                               }
                                        }
                                }
                                break;
@@ -444,7 +450,7 @@ $.suggestions = {
                }
                if ( preventDefault ) {
                        e.preventDefault();
-                       e.stopImmediatePropagation();
+                       e.stopPropagation();
                }
        }
 };
@@ -591,24 +597,6 @@ $.fn.suggestions = function () {
                                        // Store key pressed to handle later
                                        context.data.keypressed = e.which;
                                        context.data.keypressedCount = 0;
-
-                                       switch ( context.data.keypressed ) {
-                                               // This preventDefault logic is duplicated from
-                                               // $.suggestions.keypress(), which sucks
-                                               // Arrow down
-                                               case 40:
-                                                       e.preventDefault();
-                                                       e.stopImmediatePropagation();
-                                                       break;
-                                               // Arrow up, Escape and Enter
-                                               case 38:
-                                               case 27:
-                                               case 13:
-                                                       if ( context.data.$container.is( ':visible' ) ) {
-                                                               e.preventDefault();
-                                                               e.stopImmediatePropagation();
-                                                       }
-                                       }
                                } )
                                .keypress( function ( e ) {
                                        context.data.keypressedCount++;
index b3d7bb3..f9ee268 100644 (file)
        function buildHeaders( table, msg ) {
                var maxSeen = 0,
                        colspanOffset = 0,
-                       longest,
                        columns,
                        i,
                        $tableHeaders = $( [] ),
                if ( $tableRows.length <= 1 ) {
                        $tableHeaders = $tableRows.children( 'th' );
                } else {
-                       // We need to find the cells of the row containing the most columns
                        var rowspan,
-                               headersIndex = [];
-                       $tableRows.each( function ( rowIndex ) {
-                               $.each( this.cells, function( index2, cell ) {
+                               colspan,
+                               headerCount,
+                               longestTR,
+                               matrixRowIndex,
+                               matrixColumnIndex,
+                               exploded = [];
+
+                       // Loop through all the dom cells of the thead
+                       $tableRows.each( function ( rowIndex, row ) {
+                               $.each( row.cells, function( columnIndex, cell ) {
                                        rowspan = Number( cell.rowSpan );
-                                       for ( i = 0; i < rowspan; i++ ) {
-                                               if ( headersIndex[rowIndex+i] === undefined ) {
-                                                       headersIndex[rowIndex+i] = $( [] );
+                                       colspan = Number( cell.colSpan );
+
+                                       // Skip the spots in the exploded matrix that are already filled
+                                       while ( exploded[rowIndex] && exploded[rowIndex][columnIndex] !== undefined ) {
+                                               ++columnIndex;
+                                       }
+
+                                       // Find the actual dimensions of the thead, by placing each cell
+                                       // in the exploded matrix rowspan times colspan times, with the proper offsets
+                                       for ( matrixColumnIndex = columnIndex; matrixColumnIndex < columnIndex + colspan; ++matrixColumnIndex ) {
+                                               for ( matrixRowIndex = rowIndex; matrixRowIndex < rowIndex + rowspan; ++matrixRowIndex ) {
+                                                       if ( !exploded[matrixRowIndex] ) {
+                                                               exploded[matrixRowIndex] = [];
+                                                       }
+                                                       exploded[matrixRowIndex][matrixColumnIndex] = cell;
                                                }
-                                               headersIndex[rowIndex+i].push( cell );
                                        }
                                } );
                        } );
-                       $.each( headersIndex, function ( index, cellArray ) {
-                               if ( cellArray.length >= maxSeen ) {
-                                       maxSeen = cellArray.length;
-                                       longest = index;
+                       // We want to find the row that has the most columns (ignoring colspan)
+                       $.each( exploded, function ( index, cellArray ) {
+                               headerCount = $.unique( $(cellArray) ).length;
+                               if ( headerCount >= maxSeen ) {
+                                       maxSeen = headerCount;
+                                       longestTR = index;
                                }
                        } );
-                       $tableHeaders = headersIndex[longest];
+                       // We cannot use $.unique() here because it sorts into dom order, which is undesirable
+                       $tableHeaders = $( uniqueElements( exploded[longestTR] ) );
                }
 
                // as each header can span over multiple columns (using colspan=N),
                return false;
        }
 
+
+       function uniqueElements( array ) {
+               var uniques = [];
+               $.each( array, function( index, elem ) {
+                       if ( elem !== undefined && $.inArray( elem, uniques ) === -1 ) {
+                               uniques.push( elem );
+                       }
+               } );
+               return uniques;
+       }
+
        function setHeadersCss( table, $headers, list, css, msg, columnToHeader ) {
                // Remove all header information and reset titles to default message
                $headers.removeClass( css[0] ).removeClass( css[1] ).attr( 'title', msg[1] );
index 43642d0..4c2fc3a 100644 (file)
 
                $previewDataHolder = $( '<div>' );
                targetUrl = $editform.attr( 'action' );
+               targetUrl += targetUrl.indexOf( '?' ) !== -1 ? '&' : '?';
+               targetUrl += $.param( {
+                       debug: mw.config.get( 'debug' ),
+                       uselang: mw.config.get( 'wgUserLanguage' ),
+                       useskin: mw.config.get( 'skin' )
+               } );
 
                // Gather all the data from the form
                postData = $editform.formToArray();
index d61c1c6..026052c 100644 (file)
@@ -3,6 +3,7 @@
  */
 ( function ( mw, $ ) {
 
+       var msg = 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.';
        $.extend( mw.Api.prototype, {
                /**
                 * Determine if a category exists.
                 * @return {boolean} return.done.isCategory Whether the category exists.
                 */
                isCategory: function ( title, ok, err ) {
-                       var d = $.Deferred(),
-                               apiPromise;
+                       var apiPromise = this.get( {
+                               prop: 'categoryinfo',
+                               titles: String( title )
+                       } );
 
                        // Backwards compatibility (< MW 1.20)
-                       d.done( ok ).fail( err );
+                       if ( ok || err ) {
+                               mw.track( 'mw.deprecate', 'api.cbParam' );
+                               mw.log.warn( msg );
+                       }
 
-                       apiPromise = this.get( {
-                                       prop: 'categoryinfo',
-                                       titles: title.toString()
-                               } )
-                               .done( function ( data ) {
+                       return apiPromise
+                               .then( function ( data ) {
                                        var exists = false;
                                        if ( data.query && data.query.pages ) {
                                                $.each( data.query.pages, function ( id, page ) {
                                                        }
                                                } );
                                        }
-                                       d.resolve( exists );
+                                       return exists;
                                } )
-                               .fail( d.reject );
-
-                       return d.promise( { abort: apiPromise.abort } );
+                               .done( ok )
+                               .fail( err )
+                               .promise( { abort: apiPromise.abort } );
                },
 
                /**
                 * Get a list of categories that match a certain prefix.
-                *   e.g. given "Foo", return "Food", "Foolish people", "Foosball tables" ...
+                *
+                * E.g. given "Foo", return "Food", "Foolish people", "Foosball tables" ...
+                *
                 * @param {string} prefix Prefix to match.
                 * @param {Function} [ok] Success callback (deprecated)
                 * @param {Function} [err] Error callback (deprecated)
                 * @return {jQuery.Promise}
                 * @return {Function} return.done
-                * @return {String[]} return.done.categories Matched categories
+                * @return {string[]} return.done.categories Matched categories
                 */
                getCategoriesByPrefix: function ( prefix, ok, err ) {
-                       var d = $.Deferred(),
-                               apiPromise;
+                       // Fetch with allpages to only get categories that have a corresponding description page.
+                       var apiPromise = this.get( {
+                               list: 'allpages',
+                               apprefix: prefix,
+                               apnamespace: mw.config.get( 'wgNamespaceIds' ).category
+                       } );
 
                        // Backwards compatibility (< MW 1.20)
-                       d.done( ok ).fail( err );
+                       if ( ok || err ) {
+                               mw.track( 'mw.deprecate', 'api.cbParam' );
+                               mw.log.warn( msg );
+                       }
 
-                       // Fetch with allpages to only get categories that have a corresponding description page.
-                       apiPromise = this.get( {
-                                       list: 'allpages',
-                                       apprefix: prefix,
-                                       apnamespace: mw.config.get( 'wgNamespaceIds' ).category
-                               } )
-                               .done( function ( data ) {
+                       return apiPromise
+                               .then( function ( data ) {
                                        var texts = [];
                                        if ( data.query && data.query.allpages ) {
                                                $.each( data.query.allpages, function ( i, category ) {
                                                        texts.push( new mw.Title( category.title ).getNameText() );
                                                } );
                                        }
-                                       d.resolve( texts );
+                                       return texts;
                                } )
-                               .fail( d.reject );
-
-                       return d.promise( { abort: apiPromise.abort } );
+                               .done( ok )
+                               .fail( err )
+                               .promise( { abort: apiPromise.abort } );
                },
 
 
                 *  if title was not found.
                 */
                getCategories: function ( title, ok, err, async ) {
-                       var d = $.Deferred(),
-                               apiPromise;
+                       var apiPromise = this.get( {
+                               prop: 'categories',
+                               titles: String( title )
+                       }, {
+                               async: async === undefined ? true : async
+                       } );
 
                        // Backwards compatibility (< MW 1.20)
-                       d.done( ok ).fail( err );
-
-                       apiPromise = this.get( {
-                                       prop: 'categories',
-                                       titles: title.toString()
-                               }, {
-                                       async: async === undefined ? true : async
-                               } )
-                               .done( function ( data ) {
-                                       var ret = false;
+                       if ( ok || err ) {
+                               mw.track( 'mw.deprecate', 'api.cbParam' );
+                               mw.log.warn( msg );
+                       }
+
+                       return apiPromise
+                               .then( function ( data ) {
+                                       var titles = false;
                                        if ( data.query && data.query.pages ) {
                                                $.each( data.query.pages, function ( id, page ) {
                                                        if ( page.categories ) {
-                                                               if ( typeof ret !== 'object' ) {
-                                                                       ret = [];
+                                                               if ( titles === false ) {
+                                                                       titles = [];
                                                                }
                                                                $.each( page.categories, function ( i, cat ) {
-                                                                       ret.push( new mw.Title( cat.title ) );
+                                                                       titles.push( new mw.Title( cat.title ) );
                                                                } );
                                                        }
                                                } );
                                        }
-                                       d.resolve( ret );
+                                       return titles;
                                } )
-                               .fail( d.reject );
-
-                       return d.promise( { abort: apiPromise.abort } );
+                               .done( ok )
+                               .fail( err )
+                               .promise( { abort: apiPromise.abort } );
                }
 
        } );
index cc83a4b..edfb34a 100644 (file)
@@ -3,6 +3,7 @@
  */
 ( function ( mw, $ ) {
 
+       var msg = 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.';
        $.extend( mw.Api.prototype, {
 
                /**
                 * @return {jQuery.Promise} See #post
                 */
                postWithEditToken: function ( params, ok, err ) {
+                       if ( ok || err ) {
+                               mw.track( 'mw.deprecate', 'api.cbParam' );
+                               mw.log.warn( msg );
+                       }
                        return this.postWithToken( 'edit', params ).done( ok ).fail( err );
                },
 
                /**
                 * Api helper to grab an edit token.
                 *
-                * @param {Function} [ok] Success callback
-                * @param {Function} [err] Error callback
+                * @param {Function} [ok] Success callback (deprecated)
+                * @param {Function} [err] Error callback (deprecated)
                 * @return {jQuery.Promise}
                 * @return {Function} return.done
                 * @return {string} return.done.token Received token.
                 */
                getEditToken: function ( ok, err ) {
+                       if ( ok || err ) {
+                               mw.track( 'mw.deprecate', 'api.cbParam' );
+                               mw.log.warn( msg );
+                       }
                        return this.getToken( 'edit' ).done( ok ).fail( err );
                },
 
                 * @param {mw.Title|String} title Target page
                 * @param {string} header
                 * @param {string} message wikitext message
-                * @param {Function} [ok] Success handler
-                * @param {Function} [err] Error handler
+                * @param {Function} [ok] Success handler (deprecated)
+                * @param {Function} [err] Error handler (deprecated)
                 * @return {jQuery.Promise}
                 */
                newSection: function ( title, header, message, ok, err ) {
+                       if ( ok || err ) {
+                               mw.track( 'mw.deprecate', 'api.cbParam' );
+                               mw.log.warn( msg );
+                       }
                        return this.postWithEditToken( {
                                action: 'edit',
                                section: 'new',
                                format: 'json',
-                               title: title.toString(),
+                               title: String( title ),
                                summary: header,
                                text: message
-                       }, ok, err );
+                       } ).done( ok ).fail( err );
                }
        } );
 
index cdc6767..914f3ec 100644 (file)
@@ -49,7 +49,7 @@
                        options = {};
                }
 
-               // Force toString if we got a mw.Uri object
+               // Force a string if we got a mw.Uri object
                if ( options.ajax && options.ajax.url !== undefined ) {
                        options.ajax.url = String( options.ajax.url );
                }
                 *
                 * @param {Object} parameters
                 * @param {Object} [ajaxOptions]
-                * @return {jQuery.Promise} Done: API response data. Fail: Error code
+                * @return {jQuery.Promise} Done: API response data and the jqXHR object.
+                *  Fail: Error code
                 */
                ajax: function ( parameters, ajaxOptions ) {
                        var token,
                                apiDeferred = $.Deferred(),
+                               msg = 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.',
                                xhr;
 
                        parameters = $.extend( {}, this.defaults.parameters, parameters );
                        // Backwards compatibility: Before MediaWiki 1.20,
                        // callbacks were done with the 'ok' and 'err' property in ajaxOptions.
                        if ( ajaxOptions.ok ) {
+                               mw.track( 'mw.deprecate', 'api.cbParam' );
+                               mw.log.warn( msg );
                                apiDeferred.done( ajaxOptions.ok );
                                delete ajaxOptions.ok;
                        }
                        if ( ajaxOptions.err ) {
+                               mw.track( 'mw.deprecate', 'api.cbParam' );
+                               mw.log.warn( msg );
                                apiDeferred.fail( ajaxOptions.err );
                                delete ajaxOptions.err;
                        }
                                        } );
                                } )
                                // AJAX success just means "200 OK" response, also check API error codes
-                               .done( function ( result ) {
+                               .done( function ( result, textStatus, jqXHR ) {
                                        if ( result === undefined || result === null || result === '' ) {
                                                apiDeferred.reject( 'ok-but-empty',
                                                        'OK response but empty result (check HTTP headers?)'
                                                var code = result.error.code === undefined ? 'unknown' : result.error.code;
                                                apiDeferred.reject( code, result );
                                        } else {
-                                               apiDeferred.resolve( result );
+                                               apiDeferred.resolve( result, jqXHR );
                                        }
                                } );
 
                        apiPromise = this.get( {
                                        action: 'tokens',
                                        type: type
-                               }, {
-                                       // Due to the API assuming we're logged out if we pass the callback-parameter,
-                                       // we have to disable jQuery's callback system, and instead parse JSON string,
-                                       // by setting 'jsonp' to false.
-                                       // TODO: This concern seems genuine but no other module has it. Is it still
-                                       // needed and/or should we pass this by default?
                                } )
                                .done( function ( data ) {
                                        // If token type is not available for this user,
index c4d23b8..952dea4 100644 (file)
                 * @return {string} return.done.data Parsed HTML of `wikitext`.
                 */
                parse: function ( wikitext, ok, err ) {
-                       var d = $.Deferred(),
-                               apiPromise;
+                       var apiPromise = this.get( {
+                               action: 'parse',
+                               contentmodel: 'wikitext',
+                               text: wikitext
+                       } );
 
                        // Backwards compatibility (< MW 1.20)
-                       d.done( ok ).fail( err );
+                       if ( ok || err ) {
+                               mw.track( 'mw.deprecate', 'api.cbParam' );
+                               mw.log.warn( 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.' );
+                       }
 
-                       apiPromise = this.get( {
-                                       action: 'parse',
-                                       contentmodel: 'wikitext',
-                                       text: wikitext
+                       return apiPromise
+                               .then( function ( data ) {
+                                       return data.parse.text['*'];
                                } )
-                               .done( function ( data ) {
-                                       if ( data.parse && data.parse.text && data.parse.text['*'] ) {
-                                               d.resolve( data.parse.text['*'] );
-                                       }
-                               } )
-                               .fail( d.reject );
-
-                       return d.promise( { abort: apiPromise.abort } );
+                               .done( ok )
+                               .fail( err )
+                               .promise( { abort: apiPromise.abort } );
                }
        } );
 
index 49a4c62..9d65e1f 100644 (file)
@@ -6,44 +6,51 @@
 
        /**
         * @private
+        * @static
         * @context mw.Api
         *
-        * @param {String|mw.Title} page Full page name or instance of mw.Title
+        * @param {string|mw.Title|string[]|mw.Title[]} pages Full page name or instance of mw.Title, or an
+        *  array thereof. If an array is passed, the return value passed to the promise will also be an
+        *  array of appropriate objects.
         * @param {Function} [ok] Success callback (deprecated)
         * @param {Function} [err] Error callback (deprecated)
         * @return {jQuery.Promise}
         * @return {Function} return.done
-        * @return {Object} return.done.watch
+        * @return {Object|Object[]} return.done.watch Object or list of objects (depends on the `pages`
+        *  parameter)
         * @return {string} return.done.watch.title Full pagename
-        * @return {boolean} return.done.watch.watched
+        * @return {boolean} return.done.watch.watched Whether the page is now watched or unwatched
         * @return {string} return.done.watch.message Parsed HTML of the confirmational interface message
         */
-       function doWatchInternal( page, ok, err, addParams ) {
-               var params,
-                       d = $.Deferred(),
-                       apiPromise;
+       function doWatchInternal( pages, ok, err, addParams ) {
+               // XXX: Parameter addParams is undocumented because we inherit this
+               // documentation in the public method..
+               var apiPromise = this.post(
+                       $.extend(
+                               {
+                                       action: 'watch',
+                                       titles: $.isArray( pages ) ? pages.join( '|' ) : String( pages ),
+                                       token: mw.user.tokens.get( 'watchToken' ),
+                                       uselang: mw.config.get( 'wgUserLanguage' )
+                               },
+                               addParams
+                       )
+               );
 
                // Backwards compatibility (< MW 1.20)
-               d.done( ok ).fail( err );
-
-               params = {
-                       action: 'watch',
-                       title: String( page ),
-                       token: mw.user.tokens.get( 'watchToken' ),
-                       uselang: mw.config.get( 'wgUserLanguage' )
-               };
-
-               if ( addParams ) {
-                       $.extend( params, addParams );
+               if ( ok || err ) {
+                       mw.track( 'mw.deprecate', 'api.cbParam' );
+                       mw.log.warn( 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.' );
                }
 
-               apiPromise = this.post( params )
-                       .done( function ( data ) {
-                               d.resolve( data.watch );
+               return apiPromise
+                       .then( function ( data ) {
+                               // If a single page was given (not an array) respond with a single item as well.
+                               return $.isArray( pages ) ? data.watch : data.watch[0];
                        } )
-                       .fail( d.reject );
-
-               return d.promise( { abort: apiPromise.abort } );
+                       .done( ok )
+                       .fail( err )
+                       .promise( { abort: apiPromise.abort } );
        }
 
        $.extend( mw.Api.prototype, {
                 *
                 * @inheritdoc #doWatchInternal
                 */
-               watch: function ( page, ok, err ) {
-                       return doWatchInternal.call( this, page, ok, err );
+               watch: function ( pages, ok, err ) {
+                       return doWatchInternal.call( this, pages, ok, err );
                },
                /**
                 * Convenience method for `action=watch&unwatch=1`.
                 *
                 * @inheritdoc #doWatchInternal
                 */
-               unwatch: function ( page, ok, err ) {
-                       return doWatchInternal.call( this, page, ok, err, { unwatch: 1 } );
+               unwatch: function ( pages, ok, err ) {
+                       return doWatchInternal.call( this, pages, ok, err, { unwatch: 1 } );
                }
 
        } );
diff --git a/resources/mediawiki.less/mediawiki.mixins.animation.less b/resources/mediawiki.less/mediawiki.mixins.animation.less
new file mode 100644 (file)
index 0000000..ec3cddc
--- /dev/null
@@ -0,0 +1,12 @@
+.animation (...) {
+       -webkit-animation: @arguments;
+       -moz-animation: @arguments;
+       -o-animation: @arguments;
+       animation: @arguments;
+}
+
+.transform-rotate (@deg) {
+       -webkit-transform: rotate(@deg);
+       -moz-transform: rotate(@deg);
+       transform: rotate(@deg);
+}
\ No newline at end of file
index e21d21b..80b68cc 100644 (file)
@@ -28,6 +28,7 @@
 }
 
 /* Note gzip compression means that it is okay to embed twice */
+/* http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
 .background-image-svg(@svg, @fallback) {
        background-image: url(@fallback);
        /* SVG support using a transparent gradient to guarantee cross-browser
        -webkit-transition: @string;
        transition: @string;
 }
-
-@-webkit-keyframes rotate {
-       from {
-               -webkit-transform:rotate(0deg);
-       }
-       to {
-               -webkit-transform:rotate(360deg);
-       }
-}
-
-@keyframes rotate {
-       from {
-               transform: rotate(0deg);
-       }
-       to {
-               transform: rotate(360deg);
-       }
-}
-
-.rotation(@time) {
-       -webkit-animation-name: rotate;
-       -webkit-animation-duration: @time;
-       -webkit-animation-iteration-count: infinite;
-       -webkit-animation-timing-function: linear;
-       animation-name: rotate;
-       animation-duration: @time;
-       animation-iteration-count: infinite;
-       animation-timing-function: linear;
-}
diff --git a/resources/mediawiki.less/mediawiki.mixins.rotation.less b/resources/mediawiki.less/mediawiki.mixins.rotation.less
new file mode 100644 (file)
index 0000000..e28b333
--- /dev/null
@@ -0,0 +1,33 @@
+// This is a separate file because importing the mixin causes
+// the keyframes blocks to be included in the output, regardless
+// of whether .rotation is used.
+@import "mediawiki.mixins.animation";
+
+.rotate-frames () {
+       from {
+               .transform-rotate(0deg);
+       }
+       to {
+               .transform-rotate(360deg);
+       }
+}
+
+@-webkit-keyframes rotate {
+       .rotate-frames;
+}
+
+@-moz-keyframes rotate {
+       .rotate-frames;
+}
+
+@-o-keyframes rotate {
+       .rotate-frames;
+}
+
+@keyframes rotate {
+       .rotate-frames;
+}
+
+.rotation( @time ) {
+       .animation(rotate, @time, infinite, linear);
+}
index 3def37c..83c2524 100644 (file)
@@ -45,7 +45,7 @@ function pluralRuleParser(rule, number) {
        */
 
        // we don't evaluate the samples section of the rule. Ignore it.
-       rule = rule.split('@')[0].trim();
+       rule = rule.split('@')[0].replace(/^\s*/, '').replace(/\s*$/, '');
 
        if (!rule.length) {
                // empty rule or 'other' rule.
index 75908ee..5fb14dd 100644 (file)
@@ -16,6 +16,9 @@
                $patrolLinks.on( 'click', function ( e ) {
                        var $spinner, href, rcid, apiRequest;
 
+                       // Start preloading the notification module (normally loaded by mw.notify())
+                       mw.loader.load( ['mediawiki.notification'], null, true );
+
                        // Hide the link and create a spinner to show it inside the brackets.
                        $spinner = $.createSpinner( {
                                size: 'small',
index 1041e7f..850177f 100644 (file)
@@ -80,7 +80,7 @@
                var action, actionPaths, key, i, m, parts;
 
                // TODO: Does MediaWiki give action path or query param
-               // precedence ? If the former, move this to the bottom
+               // precedence? If the former, move this to the bottom
                action = mw.util.getParamValue( 'action', url );
                if ( action !== null ) {
                        return action;
@@ -90,7 +90,7 @@
                for ( key in actionPaths ) {
                        if ( actionPaths.hasOwnProperty( key ) ) {
                                parts = actionPaths[key].split( '$1' );
-                               for ( i = 0; i < parts.length; i += 1 ) {
+                               for ( i = 0; i < parts.length; i++ ) {
                                        parts[i] = $.escapeRE( parts[i] );
                                }
                                m = new RegExp( parts.join( '(.+)' ) ).exec( url );
                $links.click( function ( e ) {
                        var action, api, $link;
 
+                       // Start preloading the notification module (normally loaded by mw.notify())
+                       mw.loader.load( ['mediawiki.notification'], null, true );
+
                        action = mwUriGetAction( this.href );
 
                        if ( action !== 'watch' && action !== 'unwatch' ) {
                        updateWatchLink( $link, action, 'loading' );
 
                        api = new mw.Api();
-                       api[action]( title )
-                       .done( function ( watchResponse ) {
-                               var otherAction;
 
-                               otherAction = action === 'watch' ? 'unwatch' : 'watch';
+                       api[action]( title )
+                               .done( function ( watchResponse ) {
+                                       var otherAction = action === 'watch' ? 'unwatch' : 'watch';
 
-                               mw.notify( $.parseHTML( watchResponse.message ), {
-                                       tag: 'watch-self'
-                               } );
+                                       mw.notify( $.parseHTML( watchResponse.message ), {
+                                               tag: 'watch-self'
+                                       } );
 
-                               // Set link to opposite
-                               updateWatchLink( $link, otherAction );
+                                       // Set link to opposite
+                                       updateWatchLink( $link, otherAction );
 
-                               // Bug 12395 - update the watch checkbox on edit pages when the
-                               // page is watched or unwatched via the tab.
-                               if ( watchResponse.watched !== undefined ) {
-                                       $( '#wpWatchthis' ).prop( 'checked', true );
-                               } else {
-                                       $( '#wpWatchthis' ).prop( 'checked', false );
-                               }
-                       } )
-                       .fail( function () {
-                               var cleanTitle, msg, link;
-
-                               // Reset link to non-loading mode
-                               updateWatchLink( $link, action );
-
-                               // Format error message
-                               cleanTitle = title.replace( /_/g, ' ' );
-                               link = mw.html.element(
-                                       'a', {
-                                               href: mw.util.getUrl( title ),
-                                               title: cleanTitle
-                                       }, cleanTitle
-                               );
-                               msg = mw.message( 'watcherrortext', link );
-
-                               // Report to user about the error
-                               mw.notify( msg, { tag: 'watch-self' } );
-                       } );
+                                       // Update the "Watch this page" checkbox on action=edit when the
+                                       // page is watched or unwatched via the tab (bug 12395).
+                                       $( '#wpWatchthis' ).prop( 'checked', watchResponse.watched !== undefined );
+                               } )
+                               .fail( function () {
+                                       var cleanTitle, msg, link;
+
+                                       // Reset link to non-loading mode
+                                       updateWatchLink( $link, action );
+
+                                       // Format error message
+                                       cleanTitle = title.replace( /_/g, ' ' );
+                                       link = mw.html.element(
+                                               'a', {
+                                                       href: mw.util.getUrl( title ),
+                                                       title: cleanTitle
+                                               }, cleanTitle
+                                       );
+                                       msg = mw.message( 'watcherrortext', link );
+
+                                       // Report to user about the error
+                                       mw.notify( msg, { tag: 'watch-self' } );
+                               } );
                } );
        } );
 
index b02e8f2..a877b74 100644 (file)
@@ -66,7 +66,8 @@ table.mw-listgrouprights-table tr {
 }
 
 /**** Special:Prefixindex ****/
-table#mw-prefixindex-list-table,
+table#mw-prefixindex-list-table, /* HTML backwards-compatibility, to be removed before 1.23 */
+table.mw-prefixindex-list-table,
 table#mw-prefixindex-nav-table {
        width: 98%;
 }
@@ -264,6 +265,18 @@ td.mw-statistics-numbers {
        text-align: right;
 }
 
+/**** Special:ProtectedPages ****/
+table.mw-protectedpages span.mw-usertoollinks,
+span.mw-protectedpages-length,
+span.mw-protectedpages-actions {
+       white-space: nowrap;
+       font-size: 90%;
+}
+span.mw-protectedpages-unknown {
+       color: grey;
+       font-size: 90%;
+}
+
 /**** Special:UserRights ****/
 .mw-userrights-disabled {
        color: #888;
index 0078724..23d7837 100644 (file)
@@ -4,7 +4,8 @@
 jQuery( function ( $ ) {
        var $preftoc, $preferences, $fieldsets, $legends,
                hash, labelFunc,
-               $tzSelect, $tzTextbox, $localtimeHolder, servertime;
+               $tzSelect, $tzTextbox, $localtimeHolder, servertime,
+               $checkBoxes;
 
        labelFunc = function () {
                return this.id.replace( /^mw-prefsection/g, 'preftab' );
@@ -253,4 +254,14 @@ jQuery( function ( $ ) {
                        sessionStorage.setItem( 'mediawikiPreferencesTab', storageData );
                } );
        }
+
+       // To disable all 'namespace' checkboxes in Search preferences
+       // when 'Search in all namespaces' checkbox is ticked.
+       $checkBoxes = $( '#mw-htmlform-advancedsearchoptions input[id^=mw-input-wpsearchnamespaces]' );
+       if ( $( '#mw-input-wpsearcheverything' ).prop( 'checked' ) ) {
+               $checkBoxes.prop( 'disabled', true );
+       }
+       $( '#mw-input-wpsearcheverything' ).change( function () {
+               $checkBoxes.prop( 'disabled', $( this ).prop( 'checked' ) );
+       } );
 } );
index c293f65..0615932 100644 (file)
@@ -3,7 +3,7 @@
  */
 ( function ( mw, $ ) {
        // When sending password by email, hide the password input fields.
-       function hidePasswordOnEmail() {
+       $( function () {
                // Always required if checked, otherwise it depends, so we use the original
                var $emailLabel = $( 'label[for="wpEmail"]' ),
                        originalText = $emailLabel.text(),
 
                $createByMailCheckbox.on( 'change', updateForCheckbox );
                updateForCheckbox();
-       }
+       } );
 
-       $( hidePasswordOnEmail );
+       // Check if the username is invalid or already taken
+       $( function () {
+               var
+                       // We need to hook to all of these events to be sure we are notified of all changes to the
+                       // value of an <input type=text> field.
+                       events = 'keyup keydown change mouseup cut paste focus blur',
+                       $input = $( '#wpName2' ),
+                       $statusContainer = $( '#mw-createacct-status-area' ),
+                       api = new mw.Api(),
+                       currentRequest;
+
+               // Hide any present status messages.
+               function clearStatus() {
+                       $statusContainer.slideUp( function () {
+                               $statusContainer
+                                       .removeAttr( 'class' )
+                                       .empty();
+                       } );
+               }
+
+               // Returns a promise receiving a { state:, username: } object, where:
+               // * 'state' is one of 'invalid', 'taken', 'ok'
+               // * 'username' is the validated username if 'state' is 'ok', null otherwise (if it's not
+               //   possible to register such an account)
+               function checkUsername( username ) {
+                       // We could just use .then() if we didn't have to pass on .abort()…
+                       var d, apiPromise;
+
+                       d = $.Deferred();
+                       apiPromise = api.get( {
+                               action: 'query',
+                               list: 'users',
+                               ususers: username // '|' in usernames is handled below
+                       } )
+                               .done( function ( resp ) {
+                                       var userinfo = resp.query.users[0];
+
+                                       if ( resp.query.users.length !== 1 ) {
+                                               // Happens if the user types '|' into the field
+                                               d.resolve( { state: 'invalid', username: null } );
+                                       } else if ( userinfo.invalid !== undefined ) {
+                                               d.resolve( { state: 'invalid', username: null } );
+                                       } else if ( userinfo.userid !== undefined ) {
+                                               d.resolve( { state: 'taken', username: null } );
+                                       } else {
+                                               d.resolve( { state: 'ok', username: username } );
+                                       }
+                               } )
+                               .fail( d.reject );
+
+                       return d.promise( { abort: apiPromise.abort } );
+               }
+
+               function updateUsernameStatus() {
+                       var
+                               username = $.trim( $input.val() ),
+                               currentRequestInternal;
+
+                       // Abort any pending requests.
+                       if ( currentRequest ) {
+                               currentRequest.abort();
+                       }
+
+                       if ( username === '' ) {
+                               clearStatus();
+                               return;
+                       }
+
+                       currentRequest = currentRequestInternal = checkUsername( username ).done( function ( info ) {
+                               var message;
+
+                               // Another request was fired in the meantime, the result we got here is no longer current.
+                               // This shouldn't happen as we abort pending requests, but you never know.
+                               if ( currentRequest !== currentRequestInternal ) {
+                                       return;
+                               }
+                               // If we're here, then the current request has finished, avoid calling .abort() needlessly.
+                               currentRequest = undefined;
+
+                               if ( info.state === 'ok' ) {
+                                       clearStatus();
+                               } else {
+                                       if ( info.state === 'invalid' ) {
+                                               message = mw.message( 'noname' ).text();
+                                       } else if ( info.state === 'taken' ) {
+                                               message = mw.message( 'userexists' ).text();
+                                       }
+
+                                       $statusContainer
+                                               .attr( 'class', 'errorbox' )
+                                               .empty()
+                                               .append(
+                                                       // Ugh…
+                                                       // @todo Change the HTML structure in includes/templates/Usercreate.php
+                                                       $( '<strong>' ).text( mw.message( 'createacct-error' ).text() ),
+                                                       $( '<br>' ),
+                                                       document.createTextNode( message )
+                                               )
+                                               .slideDown();
+                               }
+                       } ).fail( function () {
+                               clearStatus();
+                       } );
+               }
+
+               $input.on( events, $.debounce( 250, updateUsernameStatus ) );
+       } );
 }( mediaWiki, jQuery ) );
index 66f4487..5c6aa6a 100644 (file)
@@ -66,7 +66,7 @@
                        .box-sizing(border-box);
                        .agora-label-styling();
                        width: auto;
-                       margin: 0 0 0.2em 0;
+                       margin: 0 0 0.2em;
                        padding: 0;
                }
 
        .error {
                .box-sizing(border-box);
                font-size: 0.9em;
-               margin: 0 0 1em 0;
+               margin: 0 0 1em;
                padding: 0.5em;
                color: #cc0000;
                border: 1px solid #fac5c5;
 // XXX DRY: This repeats earlier styling, use an @include agora-div-styling ?
 .mw-ui-vform-div {
        display: block;
-       margin: 0 0 15px 0;
+       margin: 0 0 15px;
        padding: 0;
        width: 100%;
 }
index b32e4e7..20f42a0 100644 (file)
@@ -12,7 +12,7 @@
                        outline: 0; // Removes OS field focus
                }
 
-               box-shadow: @colorProgressiveShadow 0px 0px 5px;
+               box-shadow: @colorProgressiveShadow 0 0 5px;
 
                border-color: @colorProgressiveShadow;
        }
@@ -46,7 +46,7 @@
        & > input[type="radio"] {
                width: auto;
                height: auto;
-               margin: 0 0.1em 0em 0;
+               margin: 0 0.1em 0 0;
                padding: 0;
                border: 1px solid @colorGrayLight;
                cursor: pointer;
diff --git a/resources/mediawiki/mediawiki.debug.css b/resources/mediawiki/mediawiki.debug.css
deleted file mode 100644 (file)
index 513cb84..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-.mw-debug {
-       width: 100%;
-       background-color: #eee;
-       border-top: 1px solid #aaa;
-}
-
-.mw-debug pre {
-       font-size: 11px;
-       padding: 0;
-       margin: 0;
-       background: none;
-       border: none;
-}
-
-.mw-debug table {
-       border-spacing: 0;
-       width: 100%;
-       table-layout: fixed;
-}
-
-.mw-debug table tr {
-       background-color: #fff;
-}
-
-.mw-debug table tr:nth-child(even) {
-       background-color: #f9f9f9;
-}
-
-.mw-debug table td, .mw-debug table th  {
-       padding: 4px 10px;
-}
-
-.mw-debug table td {
-       border-bottom: 1px solid #eee;
-       word-wrap: break-word;
-}
-
-.mw-debug table td.nr {
-       text-align: right;
-}
-
-.mw-debug table td span.stats {
-       color: #808080;
-}
-
-.mw-debug ul {
-       margin: 0;
-       list-style: none;
-}
-
-.mw-debug li {
-       padding: 4px 0;
-       width: 100%;
-}
-
-.mw-debug-bits {
-       text-align: center;
-       border-bottom: 1px solid #aaa;
-}
-
-.mw-debug-bit {
-       display: inline-block;
-       padding: 10px 5px;
-       font-size: 13px;
-       /* IE-hack for display: inline-block */
-       zoom: 1;
-       *display:inline;
-}
-
-.mw-debug-panelink {
-       background-color: #eee;
-       border-right: 1px solid #ccc;
-}
-
-.mw-debug-panelink:first-child {
-       border-left: 1px solid #ccc;
-}
-
-.mw-debug-panelink:hover {
-       background-color: #fefefe;
-       cursor: pointer;
-}
-.mw-debug-panelink.current {
-       background-color: #dedede;
-
-}
-a.mw-debug-panelabel,
-a.mw-debug-panelabel:visited {
-       color: #000;
-}
-
-.mw-debug-pane {
-       height: 300px;
-       overflow: scroll;
-       display: none;
-       font-size: 11px;
-       background-color: #e1eff2;
-       box-sizing: border-box;
-}
-
-#mw-debug-pane-debuglog,
-#mw-debug-pane-request {
-       padding: 20px;
-}
-
-#mw-debug-pane-request table {
-       width: 100%;
-       margin: 10px 0 30px;
-}
-
-#mw-debug-pane-request tr,
-#mw-debug-pane-request th,
-#mw-debug-pane-request td,
-#mw-debug-pane-request table {
-       border: 1px solid #D0DBB3;
-       border-collapse: collapse;
-       margin: 0;
-}
-
-#mw-debug-pane-request th,
-#mw-debug-pane-request td {
-       font-size: 12px;
-       padding: 8px 10px;
-}
-
-#mw-debug-pane-request th {
-       background-color: #F1F7E2;
-       font-weight: bold;
-}
-
-#mw-debug-pane-request td {
-       background-color: white;
-}
-
-#mw-debug-console tr td:first-child {
-       font-weight: bold;
-       vertical-align: top;
-}
-
-#mw-debug-console tr td:last-child {
-       vertical-align: top;
-}
-
-.mw-debug-console-log {
-       background-color: #add8e6;
-}
-
-.mw-debug-console-warn {
-       background-color: #ffa07a;
-}
-
-.mw-debug-console-deprecated {
-       background-color: #ffb6c1;
-}
-
-.mw-debug-backtrace {
-       padding: 5px 10px;
-       margin: 5px;
-       background-color: #dedede;
-}
-
-.mw-debug-backtrace span {
-       font-weight: bold;
-       color: #111;
-}
-
-.mw-debug-backtrace ul {
-       padding-left: 10px;
-}
-
-.mw-debug-backtrace li {
-       width: auto;
-       padding: 0;
-       color: #333;
-       font-size: 10px;
-       margin-bottom: 0;
-       line-height: 1em;
-}
-
-/* Cheapo hack to hide the first 3 lines of the backtrace */
-.mw-debug-backtrace li:nth-child(-n+3) {
-       display: none;
-}
index 04cfbb0..b6cc2b7 100644 (file)
@@ -1,37 +1,41 @@
-/**
- * JavaScript for the new debug toolbar, enabled through $wgDebugToolbar.
- *
- * @author John Du Hart
- * @since 1.19
- */
-
 ( function ( mw, $ ) {
        'use strict';
 
        var debug,
                hovzer = $.getFootHovzer();
 
+       /**
+        * Debug toolbar.
+        *
+        * Enabled server-side through `$wgDebugToolbar`.
+        *
+        * @class mw.Debug
+        * @singleton
+        * @author John Du Hart
+        * @since 1.19
+        */
        debug = mw.Debug = {
                /**
                 * Toolbar container element
                 *
-                * @var {jQuery}
+                * @property {jQuery}
                 */
                $container: null,
 
                /**
                 * Object containing data for the debug toolbar
                 *
-                * @var {Object}
+                * @property {Object}
                 */
                data: {},
 
                /**
-                * Initializes the debugging pane.
+                * Initialize the debugging pane
+                *
                 * Shouldn't be called before the document is ready
                 * (since it binds to elements on the page).
                 *
-                * @param {Object} data, defaults to 'debugInfo' from mw.config
+                * @param {Object} [data] Defaults to 'debugInfo' from mw.config
                 */
                init: function ( data ) {
 
                },
 
                /**
-                * Switches between panes
+                * Switch between panes
+                *
+                * Should be called with an HTMLElement as its thisArg,
+                * because it's meant to be an event handler.
+                *
+                * TODO: Store cookie for last pane open.
                 *
-                * @todo Store cookie for last pane open
-                * @context {Element}
                 * @param {jQuery.Event} e
                 */
                switchPane: function ( e ) {
@@ -91,7 +98,7 @@
                },
 
                /**
-                * Constructs the HTML for the debugging toolbar
+                * Construct the HTML for the debugging toolbar
                 */
                buildHtml: function () {
                        var $container, $bits, panes, id, gitInfo;
                        /**
                         * Returns a jQuery element for a debug-bit div
                         *
-                        * @param id
+                        * @ignore
+                        * @param {string} id
                         * @return {jQuery}
                         */
                        function bitDiv( id ) {
                        /**
                         * Returns a jQuery element for a pane link
                         *
-                        * @param id
-                        * @param text
+                        * @ignore
+                        * @param {string} id
+                        * @param {string} text
                         * @return {jQuery}
                         */
                        function paneLabel( id, text ) {
                        /**
                         * Returns a jQuery element for a debug-bit div with a for a pane link
                         *
-                        * @param id CSS id snippet. Will be prefixed with 'mw-debug-'
-                        * @param text Text to show
-                        * @param count Optional count to show
+                        * @ignore
+                        * @param {string} id CSS id snippet. Will be prefixed with 'mw-debug-'
+                        * @param {string} text Text to show
+                        * @param {string} count Optional count to show
                         * @return {jQuery}
                         */
                        function paneTriggerBitDiv( id, text, count ) {
                },
 
                /**
-                * Builds the console panel
+                * Build the console panel
                 */
                buildConsoleTable: function () {
                        var $table, entryTypeText, i, length, entry;
                },
 
                /**
-                * Query list pane
+                * Build query list pane
+                *
+                * @return {jQuery}
                 */
                buildQueryTable: function () {
                        var $table, i, length, query;
                },
 
                /**
-                * Legacy debug log pane
+                * Build legacy debug log pane
+                *
+                * @return {jQuery}
                 */
                buildDebugLogTable: function () {
                        var $list, i, length, line;
                },
 
                /**
-                * Request information pane
+                * Build request information pane
+                *
+                * @return {jQuery}
                 */
                buildRequestPane: function () {
 
                },
 
                /**
-                * Included files pane
+                * Build included files pane
+                *
+                * @return {jQuery}
                 */
                buildIncludesPane: function () {
                        var $table, i, length, file;
diff --git a/resources/mediawiki/mediawiki.debug.less b/resources/mediawiki/mediawiki.debug.less
new file mode 100644 (file)
index 0000000..949c558
--- /dev/null
@@ -0,0 +1,189 @@
+.mw-debug {
+       width: 100%;
+       background-color: #eee;
+       border-top: 1px solid #aaa;
+
+       pre {
+               font-size: 11px;
+               padding: 0;
+               margin: 0;
+               background: none;
+               border: none;
+       }
+
+       table {
+               border-spacing: 0;
+               width: 100%;
+               table-layout: fixed;
+
+               td,
+               th {
+                       padding: 4px 10px;
+               }
+
+               td {
+                       border-bottom: 1px solid #eee;
+                       word-wrap: break-word;
+
+                       &.nr {
+                               text-align: right;
+                       }
+
+                       span.stats {
+                               color: #808080;
+                       }
+               }
+
+               tr {
+                       background-color: #fff;
+
+                       &:nth-child(even) {
+                               background-color: #f9f9f9;
+                       }
+               }
+       }
+
+       ul {
+               margin: 0;
+               list-style: none;
+       }
+
+       li {
+               padding: 4px 0;
+               width: 100%;
+       }
+}
+
+.mw-debug-bits {
+       text-align: center;
+       border-bottom: 1px solid #aaa;
+}
+
+.mw-debug-bit {
+       display: inline-block;
+       padding: 10px 5px;
+       font-size: 13px;
+       /* IE-hack for display: inline-block */
+       zoom: 1;
+       *display:inline;
+}
+
+.mw-debug-panelink {
+       background-color: #eee;
+       border-right: 1px solid #ccc;
+
+       &:first-child {
+               border-left: 1px solid #ccc;
+       }
+
+       &:hover {
+               background-color: #fefefe;
+               cursor: pointer;
+       }
+
+       &.current {
+               background-color: #dedede;
+       }
+}
+
+a.mw-debug-panelabel,
+a.mw-debug-panelabel:visited {
+       color: #000;
+}
+
+.mw-debug-pane {
+       height: 300px;
+       overflow: scroll;
+       display: none;
+       font-size: 11px;
+       background-color: #e1eff2;
+       box-sizing: border-box;
+}
+
+#mw-debug-pane-debuglog,
+#mw-debug-pane-request {
+       padding: 20px;
+}
+
+#mw-debug-pane-request {
+       table {
+               width: 100%;
+               margin: 10px 0 30px;
+       }
+
+       tr,
+       th,
+       td,
+       table {
+               border: 1px solid #D0DBB3;
+               border-collapse: collapse;
+               margin: 0;
+       }
+
+       th,
+       td {
+               font-size: 12px;
+               padding: 8px 10px;
+       }
+
+       th {
+               background-color: #F1F7E2;
+               font-weight: bold;
+       }
+
+       td {
+               background-color: white;
+       }
+}
+
+#mw-debug-console tr td {
+       &:first-child {
+               font-weight: bold;
+               vertical-align: top;
+       }
+
+       &:last-child {
+               vertical-align: top;
+       }
+}
+
+.mw-debug-backtrace {
+       padding: 5px 10px;
+       margin: 5px;
+       background-color: #dedede;
+
+       span {
+               font-weight: bold;
+               color: #111;
+       }
+
+       ul {
+               padding-left: 10px;
+       }
+
+       li {
+               width: auto;
+               padding: 0;
+               color: #333;
+               font-size: 10px;
+               margin-bottom: 0;
+               line-height: 1em;
+       }
+}
+
+.mw-debug-console-log {
+       background-color: #add8e6;
+}
+
+.mw-debug-console-warn {
+       background-color: #ffa07a;
+}
+
+.mw-debug-console-deprecated {
+       background-color: #ffb6c1;
+}
+
+/* Cheapo hack to hide the first 3 lines of the backtrace */
+.mw-debug-backtrace li:nth-child(-n+3) {
+       display: none;
+}
index 9de69b2..6dd4f88 100644 (file)
@@ -1,41 +1,46 @@
-/**
+/*!
  * mediawiki.feedback
  *
  * @author Ryan Kaldari, 2010
  * @author Neil Kandalgaonkar, 2010-11
  * @since 1.19
- *
- * This is a way of getting simple feedback from users. It's useful
- * for testing new features -- users can give you feedback without
- * the difficulty of opening a whole new talk page. For this reason,
- * it also tends to collect a wider range of both positive and negative
- * comments. However you do need to tend to the feedback page. It will
- * get long relatively quickly, and you often get multiple messages
- * reporting the same issue.
- *
- * It takes the form of thing on your page which, when clicked, opens a small
- * dialog box. Submitting that dialog box appends its contents to a
- * wiki page that you specify, as a new section.
- *
- * Not compatible with LiquidThreads.
- *
- * Minimal example in how to use it:
- *
- *    var feedback = new mw.Feedback();
- *    $( '#myButton' ).click( function () { feedback.launch(); } );
- *
- * You can also launch the feedback form with a prefilled subject and body.
- * See the docs for the launch() method.
  */
 ( function ( mw, $ ) {
        /**
-        * Thingy for collecting user feedback on a wiki page
-        * @param {Array} options -- optional, all properties optional.
-        *  api: {mw.Api} if omitted, will just create a standard API
-        *  title: {mw.Title} the title of the page where you collect feedback. Defaults to "Feedback".
-        *  dialogTitleMessageKey: {String} message key for the title of the dialog box
-        *  bugsLink: {mw.Uri|String} url where bugs can be posted
-        *  bugsListLink: {mw.Uri|String} url where bugs can be listed
+        * This is a way of getting simple feedback from users. It's useful
+        * for testing new features -- users can give you feedback without
+        * the difficulty of opening a whole new talk page. For this reason,
+        * it also tends to collect a wider range of both positive and negative
+        * comments. However you do need to tend to the feedback page. It will
+        * get long relatively quickly, and you often get multiple messages
+        * reporting the same issue.
+        *
+        * It takes the form of thing on your page which, when clicked, opens a small
+        * dialog box. Submitting that dialog box appends its contents to a
+        * wiki page that you specify, as a new section.
+        *
+        * Not compatible with LiquidThreads.
+        *
+        * Minimal example in how to use it:
+        *
+        *     var feedback = new mw.Feedback();
+        *     $( '#myButton' ).click( function () { feedback.launch(); } );
+        *
+        * You can also launch the feedback form with a prefilled subject and body.
+        * See the docs for the #launch() method.
+        *
+        * @class
+        * @constructor
+        * @param {Object} [options]
+        * @param {mw.Api} [options.api] if omitted, will just create a standard API
+        * @param {mw.Title} [options.title="Feedback"] The title of the page where you collect
+        * feedback.
+        * @param {string} [options.dialogTitleMessageKey="feedback-submit"] Message key for the
+        * title of the dialog box
+        * @param {string} [options.bugsLink="//bugzilla.wikimedia.org/enter_bug.cgi"] URL where
+        * bugs can be posted
+        * @param {mw.Uri|string} [options.bugsListLink="//bugzilla.wikimedia.org/query.cgi"]
+        * URL where bugs can be listed
         */
        mw.Feedback = function ( options ) {
                if ( options === undefined ) {
@@ -67,6 +72,9 @@
        };
 
        mw.Feedback.prototype = {
+               /**
+                * Sets up interface
+                */
                setup: function () {
                        var $feedbackPageLink,
                                $bugNoteLink,
 
                },
 
+               /**
+                * Displays a section of the dialog.
+                *
+                * @param {"form"|"bugs"|"submitting"|"thanks"|"error"} s
+                * The section of the dialog to show.
+                */
                display: function ( s ) {
                        this.$dialog.dialog( { buttons:{} } ); // hide the buttons
                        this.$dialog.find( '.feedback-mode' ).hide(); // hide everything
                        this.$dialog.find( '.feedback-' + s ).show(); // show the desired div
                },
 
+               /**
+                * Display the submitting section.
+                */
                displaySubmitting: function () {
                        this.display( 'submitting' );
                },
 
+               /**
+                * Display the bugs section.
+                */
                displayBugs: function () {
                        var fb = this,
                                bugsButtons = {};
                        } );
                },
 
+               /**
+                * Display the thanks section.
+                */
                displayThanks: function () {
                        var fb = this,
                                closeButton = {};
 
                /**
                 * Display the feedback form
-                * @param {Object} optional prefilled contents for the feedback form. Object with properties:
-                *  subject: {String}
-                *      message: {String}
+                * @param {Object} [contents] Prefilled contents for the feedback form.
+                * @param {string} [contents.subject] The subject of the feedback
+                * @param {string} [contents.message] The content of the feedback
                 */
                displayForm: function ( contents ) {
                        var fb = this,
                        this.$dialog.dialog( { buttons: formButtons } ); // put the buttons back
                },
 
+               /**
+                * Display an error on the form.
+                *
+                * @param {string} message Should be a valid message key.
+                */
                displayError: function ( message ) {
                        var fb = this,
                                closeButton = {};
                        this.$dialog.dialog( { buttons: closeButton } );
                },
 
+               /**
+                * Close the feedback form.
+                */
                cancel: function () {
                        this.$dialog.dialog( 'close' );
                },
 
+               /**
+                * Submit the feedback form.
+                */
                submit: function () {
                        var subject, message,
                                fb = this;
 
                /**
                 * Modify the display form, and then open it, focusing interface on the subject.
-                * @param {Object} optional prefilled contents for the feedback form. Object with properties:
-                *                                              subject: {String}
-                *                                              message: {String}
+                * @param {Object} [contents] Prefilled contents for the feedback form.
+                * @param {string} [contents.subject] The subject of the feedback
+                * @param {string} [contents.message] The content of the feedback
                 */
                launch: function ( contents ) {
                        this.displayForm( contents );
index c21dfec..adcb810 100644 (file)
@@ -1,6 +1,6 @@
-/**
      Stylesheet for mediawiki.hlist module
      @author [[User:Edokter]]
+/*!
* Stylesheet for mediawiki.hlist module
* @author [[User:Edokter]]
  */
 .hlist dl,
 .hlist ol,
index 77d8fdc..0bbf8fa 100644 (file)
@@ -1,7 +1,7 @@
-/**
      .hlist fallbacks for IE 6, 7 and 8.
      @author [[User:Edokter]]
-*/
+/*!
* .hlist fallbacks for IE 6, 7 and 8.
* @author [[User:Edokter]]
+ */
 ( function ( mw, $ ) {
        var profile = $.client.profile();
 
index e76141d..62fa410 100644 (file)
                                }
                                return [stats];
                        }
+               },
+
+               /**
+                * Perform a substring search across the JavaScript and CSS source code
+                * of all loaded modules and return an array of the names of the
+                * modules that matched.
+                *
+                * @param {string|RegExp} pattern String or regexp to match.
+                * @return {Array} Array of the names of modules that matched.
+                */
+               grep: function ( pattern ) {
+                       if ( typeof pattern.test !== 'function' ) {
+                               // Based on Y.Escape.regex from YUI v3.15.0
+                               pattern = new RegExp( pattern.replace( /[\-$\^*()+\[\]{}|\\,.?\s]/g, '\\$&' ), 'g' );
+                       }
+
+                       return $.grep( inspect.getLoadedModules(), function ( moduleName ) {
+                               var module = mw.loader.moduleRegistry[moduleName];
+
+                               // Grep module's JavaScript
+                               if ( $.isFunction( module.script ) && pattern.test( module.script.toString() ) ) {
+                                       return true;
+                               }
+
+                               // Grep module's CSS
+                               if (
+                                       $.isPlainObject( module.style ) && $.isArray( module.style.css )
+                                       && pattern.test( module.style.css.join( '' ) )
+                               ) {
+                                       // Module's CSS source matches
+                                       return true;
+                               }
+
+                               return false;
+                       } );
                }
        };
 
index e286d32..85669fb 100644 (file)
@@ -1,11 +1,16 @@
-/**
+/*!
 * Experimental advanced wikitext parser-emitter.
-* See: http://www.mediawiki.org/wiki/Extension:UploadWizard/MessageParser for docs
+* See: https://www.mediawiki.org/wiki/Extension:UploadWizard/MessageParser for docs
 *
 * @author neilk@wikimedia.org
 * @author mflaschen@wikimedia.org
 */
 ( function ( mw, $ ) {
+       /**
+        * @class mw.jqueryMsg
+        * @singleton
+        */
+
        var oldParser,
                slice = Array.prototype.slice,
                parserDefaults = {
@@ -59,6 +64,7 @@
         *
         * Object elements of children (jQuery, HTMLElement, TextNode, etc.) will be left as is.
         *
+        * @private
         * @param {jQuery} $parent Parent node wrapped by jQuery
         * @param {Object|string|Array} children What to append, with the same possible types as jQuery
         * @return {jQuery} $parent
@@ -82,7 +88,8 @@
        /**
         * Decodes the main HTML entities, those encoded by mw.html.escape.
         *
-        * @param {string} encode Encoded string
+        * @private
+        * @param {string} encoded Encoded string
         * @return {string} String with those entities decoded
         */
        function decodePrimaryHtmlEntities( encoded ) {
 
        /**
         * Given parser options, return a function that parses a key and replacements, returning jQuery object
-        * @param {Object} parser options
-        * @return {Function} accepting ( String message key, String replacement1, String replacement2 ... ) and returning {jQuery}
+        *
+        * Try to parse a key and optional replacements, returning a jQuery object that may be a tree of jQuery nodes.
+        * If there was an error parsing, return the key and the error message (wrapped in jQuery). This should put the error right into
+        * the interface, without causing the page to halt script execution, and it hopefully should be clearer how to fix it.
+        * @private
+        * @param {Object} options Parser options
+        * @return {Function}
+        * @return {Array} return.args First element is the key, replacements may be in array in 2nd element, or remaining elements.
+        * @return {jQuery} return.return
         */
        function getFailableParserFn( options ) {
                var parser = new mw.jqueryMsg.parser( options );
-               /**
-                * Try to parse a key and optional replacements, returning a jQuery object that may be a tree of jQuery nodes.
-                * If there was an error parsing, return the key and the error message (wrapped in jQuery). This should put the error right into
-                * the interface, without causing the page to halt script execution, and it hopefully should be clearer how to fix it.
-                *
-                * @param {Array} first element is the key, replacements may be in array in 2nd element, or remaining elements.
-                * @return {jQuery}
-                */
+
                return function ( args ) {
                        var key = args[0],
                                argsArray = $.isArray( args[1] ) ? args[1] : slice.call( args, 1 );
        mw.jqueryMsg = {};
 
        /**
-        * Class method.
         * Returns a function suitable for use as a global, to construct strings from the message key (and optional replacements).
         * e.g.
+        *
         *       window.gM = mediaWiki.parser.getMessageFunction( options );
         *       $( 'p#headline' ).html( gM( 'hello-user', username ) );
         *
         * Like the old gM() function this returns only strings, so it destroys any bindings. If you want to preserve bindings use the
         * jQuery plugin version instead. This is only included for backwards compatibility with gM().
         *
-        * @param {Array} parser options
-        * @return {Function} function suitable for assigning to window.gM
+        * N.B. replacements are variadic arguments or an array in second parameter. In other words:
+        *    somefunction( a, b, c, d )
+        * is equivalent to
+        *    somefunction( a, [b, c, d] )
+        *
+        * @param {Object} options parser options
+        * @return {Function} Function suitable for assigning to window.gM
+        * @return {string} return.key Message key.
+        * @return {Array|Mixed} return.replacements Optional variable replacements (variadically or an array).
+        * @return {string} return.return Rendered HTML.
         */
        mw.jqueryMsg.getMessageFunction = function ( options ) {
                var failableParserFn = getFailableParserFn( options ),
                        format = parserDefaults.format;
                }
 
-               /**
-                * N.B. replacements are variadic arguments or an array in second parameter. In other words:
-                *    somefunction( a, b, c, d )
-                * is equivalent to
-                *    somefunction( a, [b, c, d] )
-                *
-                * @param {string} key Message key.
-                * @param {Array|mixed} replacements Optional variable replacements (variadically or an array).
-                * @return {string} Rendered HTML.
-                */
                return function () {
                        var failableResult = failableParserFn( arguments );
                        if ( format === 'text' || format === 'escaped' ) {
        };
 
        /**
-        * Class method.
         * Returns a jQuery plugin which parses the message in the message key, doing replacements optionally, and appends the nodes to
         * the current selector. Bindings to passed-in jquery elements are preserved. Functions become click handlers for [$1 linktext] links.
         * e.g.
+        *
         *        $.fn.msg = mediaWiki.parser.getJqueryPlugin( options );
         *        var userlink = $( '<a>' ).click( function () { alert( "hello!!" ) } );
         *        $( 'p#headline' ).msg( 'hello-user', userlink );
         *
-        * @param {Array} parser options
-        * @return {Function} function suitable for assigning to jQuery plugin, such as $.fn.msg
+        * N.B. replacements are variadic arguments or an array in second parameter. In other words:
+        *    somefunction( a, b, c, d )
+        * is equivalent to
+        *    somefunction( a, [b, c, d] )
+        *
+        * We append to 'this', which in a jQuery plugin context will be the selected elements.
+        *
+        * @param {Object} options Parser options
+        * @return {Function} Function suitable for assigning to jQuery plugin, such as jQuery#msg
+        * @return {string} return.key Message key.
+        * @return {Array|Mixed} return.replacements Optional variable replacements (variadically or an array).
+        * @return {jQuery} return.return
         */
        mw.jqueryMsg.getPlugin = function ( options ) {
                var failableParserFn = getFailableParserFn( options );
-               /**
-                * N.B. replacements are variadic arguments or an array in second parameter. In other words:
-                *    somefunction( a, b, c, d )
-                * is equivalent to
-                *    somefunction( a, [b, c, d] )
-                *
-                * We append to 'this', which in a jQuery plugin context will be the selected elements.
-                * @param {string} key Message key.
-                * @param {Array|mixed} replacements Optional variable replacements (variadically or an array).
-                * @return {jQuery} this
-                */
+
                return function () {
                        var $target = this.empty();
                        // TODO: Simply appendWithoutParsing( $target, failableParserFn( arguments ).contents() )
        /**
         * The parser itself.
         * Describes an object, whose primary duty is to .parse() message keys.
-        * @param {Array} options
+        *
+        * @class
+        * @private
+        * @param {Object} options
         */
        mw.jqueryMsg.parser = function ( options ) {
                this.settings = $.extend( {}, parserDefaults, options );
                 *
                 * The two parts of the key are separated by colon.  For example:
                 *
-                * "message-key:true": ast
+                *     "message-key:true": ast
                 *
                 * if they key is "message-key" and onlyCurlyBraceTransform is true.
                 *
                 * This cache is shared by all instances of mw.jqueryMsg.parser.
                 *
+                * NOTE: We promise, it's static - when you create this empty object
+                * in the prototype, each new instance of the class gets a reference
+                * to the same object.
+                *
                 * @static
+                * @property {Object}
                 */
                astCache: {},
 
                 * Where the magic happens.
                 * Parses a message from the key, and swaps in replacements as necessary, wraps in jQuery
                 * If an error is thrown, returns original key, and logs the error
-                * @param {String} key Message key.
+                * @param {string} key Message key.
                 * @param {Array} replacements Variable replacements for $1, $2... $n
                 * @return {jQuery}
                 */
                parse: function ( key, replacements ) {
                        return this.emitter.emit( this.getAst( key ), replacements );
                },
+
                /**
                 * Fetch the message string associated with a key, return parsed structure. Memoized.
                 * Note that we pass '[' + key + ']' back for a missing message here.
-                * @param {String} key
-                * @return {String|Array} string of '[key]' if message missing, simple string if possible, array of arrays if needs parsing
+                * @param {string} key
+                * @return {string|Array} string of '[key]' if message missing, simple string if possible, array of arrays if needs parsing
                 */
                getAst: function ( key ) {
                        var cacheKey = [key, this.settings.onlyCurlyBraceTransform].join( ':' ), wikiText;
                 * CAVEAT: This does not parse all wikitext. It could be more efficient, but it's pretty good already.
                 * n.b. We want to move this functionality to the server. Nothing here is required to be on the client.
                 *
-                * @param {String} message string wikitext
+                * @param {string} input Message string wikitext
                 * @throws Error
                 * @return {Mixed} abstract syntax tree
                 */
                        // =========================================================
                        // parsing combinators - could be a library on its own
                        // =========================================================
-                       // Try parsers until one works, if none work return null
+
+                       /**
+                        * Try parsers until one works, if none work return null
+                        * @private
+                        * @param {Function[]} ps
+                        * @return {string|null}
+                        */
                        function choice( ps ) {
                                return function () {
                                        var i, result;
                                        return null;
                                };
                        }
-                       // try several ps in a row, all must succeed or return null
-                       // this is the only eager one
+
+                       /**
+                        * Try several ps in a row, all must succeed or return null.
+                        * This is the only eager one.
+                        * @private
+                        * @param {Function[]} ps
+                        * @return {string|null}
+                        */
                        function sequence( ps ) {
                                var i, res,
                                        originalPos = pos,
                                }
                                return result;
                        }
-                       // run the same parser over and over until it fails.
-                       // must succeed a minimum of n times or return null
+
+                       /**
+                        * Run the same parser over and over until it fails.
+                        * Must succeed a minimum of n times or return null.
+                        * @private
+                        * @param {number} n
+                        * @param {Function} p
+                        * @return {string|null}
+                        */
                        function nOrMore( n, p ) {
                                return function () {
                                        var originalPos = pos,
                                        return result;
                                };
                        }
-                       // There is a general pattern -- parse a thing, if that worked, apply transform, otherwise return null.
-                       // But using this as a combinator seems to cause problems when combined with nOrMore().
-                       // May be some scoping issue
+
+                       /**
+                        * There is a general pattern -- parse a thing, if that worked, apply transform, otherwise return null.
+                        *
+                        * TODO: But using this as a combinator seems to cause problems when combined with #nOrMore().
+                        * May be some scoping issue
+                        *
+                        * @private
+                        * @param {Function} p
+                        * @param {Function} fn
+                        * @return {string|null}
+                        */
                        function transform( p, fn ) {
                                return function () {
                                        var result = p();
                                        return result === null ? null : fn( result );
                                };
                        }
-                       // Helpers -- just make ps out of simpler JS builtin types
+
+                       /**
+                        * Just make parsers out of simpler JS builtin types
+                        * @private
+                        * @param {string} s
+                        * @return {Function}
+                        * @return {string} return.return
+                        */
                        function makeStringParser( s ) {
                                var len = s.length;
                                return function () {
                         * The regex being passed in should start with a ^ to anchor it to the start
                         * of the string.
                         *
+                        * @private
                         * @param {RegExp} regex anchored regex
                         * @return {Function} function to parse input based on the regex
                         */
                                };
                        }
 
-                       /**
-                        *  ===================================================================
-                        *  General patterns above this line -- wikitext specific parsers below
-                        *  ===================================================================
-                        */
+                       // ===================================================================
+                       // General patterns above this line -- wikitext specific parsers below
+                       // ===================================================================
+
                        // Parsing functions follow. All parsing functions work like this:
                        // They don't accept any arguments.
                        // Instead, they just operate non destructively on the string 'input'
 
                                if ( parsedCloseTagResult === null ) {
                                        // Closing tag failed.  Return the start tag and contents.
-                                       return [ 'CONCAT', input.substring( startOpenTagPos, endOpenTagPos ) ].concat( parsedHtmlContents );
+                                       return [ 'CONCAT', input.substring( startOpenTagPos, endOpenTagPos ) ]
+                                               .concat( parsedHtmlContents );
                                }
 
                                endCloseTagPos = pos;
                                wrappedAttributes = parsedOpenTagResult[2];
                                attributes = wrappedAttributes.slice( 1 );
                                if ( isAllowedHtml( startTagName, endTagName, attributes ) ) {
-                                       result = [ 'HTMLELEMENT', startTagName, wrappedAttributes ].concat( parsedHtmlContents );
+                                       result = [ 'HTMLELEMENT', startTagName, wrappedAttributes ]
+                                               .concat( parsedHtmlContents );
                                } else {
                                        // HTML is not allowed, so contents will remain how
                                        // it was, while HTML markup at this level will be
                                        // parsed HTML link.
                                        //
                                        // Concatenate everything from the tag, flattening the contents.
-                                       result = [ 'CONCAT', input.substring( startOpenTagPos, endOpenTagPos ) ].concat( parsedHtmlContents, input.substring( startCloseTagPos, endCloseTagPos ) );
+                                       result = [ 'CONCAT', input.substring( startOpenTagPos, endOpenTagPos ) ]
+                                               .concat( parsedHtmlContents, input.substring( startCloseTagPos, endCloseTagPos ) );
                                }
 
                                return result;
                                ] );
                                return result === null ? null : [ result[0], result[2] ];
                        }
+                       function templateWithOutFirstParameter() {
+                               var result = sequence( [
+                                       templateName,
+                                       colon
+                               ] );
+                               return result === null ? null : [ result[0], '' ];
+                       }
                        colon = makeStringParser( ':' );
                        templateContents = choice( [
                                function () {
                                        var res = sequence( [
                                                // templates can have placeholders for dynamic replacement eg: {{PLURAL:$1|one car|$1 cars}}
                                                // or no placeholders eg: {{GRAMMAR:genitive|{{SITENAME}}}
-                                               choice( [ templateWithReplacement, templateWithOutReplacement ] ),
+                                               choice( [ templateWithReplacement, templateWithOutReplacement, templateWithOutFirstParameter ] ),
                                                nOrMore( 0, templateParam )
                                        ] );
                                        return res === null ? null : res[0].concat( res[1] );
                                curlyBraceTransformExpressionLiteral
                        ] );
 
-
                        /**
                         * Starts the parse
                         *
                }
 
        };
+
        /**
         * htmlEmitter - object which primarily exists to emit HTML from parser ASTs
         */
                                return val;
                        };
                } );
+
                /**
                 * (We put this method definition here, and not in prototype, to make sure it's not overwritten by any magic.)
                 * Walk entire node structure, applying replacements and template functions when appropriate
-                * @param {Mixed} abstract syntax tree (top node or subnode)
+                * @param {Mixed} node Abstract syntax tree (top node or subnode)
                 * @param {Array} replacements for $1, $2, ... $n
                 * @return {Mixed} single-string node or array of nodes suitable for jQuery appending
                 */
                        return ret;
                };
        };
+
        // For everything in input that follows double-open-curly braces, there should be an equivalent parser
        // function. For instance {{PLURAL ... }} will be processed by 'plural'.
        // If you have 'magic words' then configure the parser to have them upon creation.
                 * Parsing has been applied depth-first we can assume that all nodes here are single nodes
                 * Must return a single node to parents -- a jQuery with synthetic span
                 * However, unwrap any other synthetic spans in our children and pass them upwards
-                * @param {Array} nodes - mixed, some single nodes, some arrays of nodes
+                * @param {Mixed[]} nodes Some single nodes, some arrays of nodes
                 * @return {jQuery}
                 */
                concat: function ( nodes ) {
                 * 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 ?
-                * @param {Array} of one element, integer, n >= 0
+                *
+                * @param {Array} nodes List of one element, integer, n >= 0
+                * @param {Array} replacements List of at least n strings
                 * @return {String} replacement
                 */
                replace: function ( nodes, replacements ) {
                                anchor = nodes[1];
                        }
 
-                       return $( '<a />' ).attr( {
+                       return $( '<a>' ).attr( {
                                title: page,
                                href: url
                        } ).text( anchor );
                /**
                 * Converts array of HTML element key value pairs to object
                 *
-                * @param {Array} nodes array of consecutive key value pairs, with index 2 * n being a name and 2 * n + 1 the associated value
-                * @return {Object} object mapping attribute name to attribute value
+                * @param {Array} nodes Array of consecutive key value pairs, with index 2 * n being a
+                *  name and 2 * n + 1 the associated value
+                * @return {Object} Object mapping attribute name to attribute value
                 */
                htmlattributes: function ( nodes ) {
                        var i, len, mapping = {};
                /**
                 * Handles an (already-validated) HTML element.
                 *
-                * @param {Array} nodes nodes to process when creating element
+                * @param {Array} nodes Nodes to process when creating element
                 * @return {jQuery|Array} jQuery node for valid HTML or array for disallowed element
                 */
                htmlelement: function ( nodes ) {
                /**
                 * Transform parsed structure into external link
                 * If the href is a jQuery object, treat it as "enclosing" the link text.
-                *              ... function, treat it as the click handler
-                *              ... string, treat it as a URI
+                *
+                * - ... function, treat it as the click handler.
+                * - ... string, treat it as a URI.
+                *
                 * TODO: throw an error if nodes.length > 2 ?
-                * @param {Array} of two elements, {jQuery|Function|String} and {String}
+                *
+                * @param {Array} nodes List of two elements, {jQuery|Function|String} and {String}
                 * @return {jQuery}
                 */
                extlink: function ( nodes ) {
                 * as url), but we don't want to run the regular replace here-on: inserting a
                 * url as href-attribute of a link will automatically escape it already, so
                 * we don't want replace to (manually) escape it as well.
-                * TODO throw error if nodes.length > 1 ?
-                * @param {Array} of one element, integer, n >= 0
-                * @return {String} replacement
+                *
+                * TODO: throw error if nodes.length > 1 ?
+                *
+                * @param {Array} nodes List of one element, integer, n >= 0
+                * @param {Array} replacements List of at least n strings
+                * @return {string} replacement
                 */
                extlinkparam: function ( nodes, replacements ) {
                        var replacement,
                 * Transform parsed structure into pluralization
                 * n.b. The first node may be a non-integer (for instance, a string representing an Arabic number).
                 * So convert it back with the current language's convertNumber.
-                * @param {Array} of nodes, [ {String|Number}, {String}, {String} ... ]
-                * @return {String} selected pluralized form according to current language
+                * @param {Array} nodes List of nodes, [ {string|number}, {string}, {string} ... ]
+                * @return {string} selected pluralized form according to current language
                 */
                plural: function ( nodes ) {
                        var forms, count;
 
                /**
                 * Transform parsed structure according to gender.
-                * Usage {{gender:[ gender | mw.user object ] | masculine form|feminine form|neutral form}}.
-                * The first node is either a string, which can be "male" or "female",
-                * or a User object (not a username).
                 *
-                * @param {Array} of nodes, [ {String|mw.User}, {String}, {String}, {String} ]
-                * @return {String} selected gender form according to current language
+                * Usage: {{gender:[ mw.user object | '' | 'male' | 'female' | 'unknown' ] | masculine form | feminine form | neutral form}}.
+                *
+                * The first node must be one of:
+                * - the mw.user object (or a compatible one)
+                * - an empty string - indicating the current user, same effect as passing the mw.user object
+                * - a gender string ('male', 'female' or 'unknown')
+                *
+                * @param {Array} nodes List of nodes, [ {string|mw.user}, {string}, {string}, {string} ]
+                * @return {string} Selected gender form according to current language
                 */
                gender: function ( nodes ) {
-                       var gender, forms;
+                       var gender,
+                               maybeUser = nodes[0],
+                               forms = nodes.slice( 1 );
 
-                       if  ( nodes[0] && nodes[0].options instanceof mw.Map ) {
-                               gender = nodes[0].options.get( 'gender' );
-                       } else {
-                               gender = nodes[0];
+                       if ( maybeUser === '' ) {
+                               maybeUser = mw.user;
                        }
 
-                       forms = nodes.slice( 1 );
+                       // If we are passed a mw.user-like object, check their gender.
+                       // Otherwise, assume the gender string itself was passed .
+                       if ( maybeUser && maybeUser.options instanceof mw.Map ) {
+                               gender = maybeUser.options.get( 'gender' );
+                       } else {
+                               gender = maybeUser;
+                       }
 
                        return this.language.gender( gender, forms );
                },
 
                /**
                 * Transform parsed structure into grammar conversion.
-                * Invoked by putting {{grammar:form|word}} in a message
-                * @param {Array} of nodes [{Grammar case eg: genitive}, {String word}]
-                * @return {String} selected grammatical form according to current language
+                * Invoked by putting `{{grammar:form|word}}` in a message
+                * @param {Array} nodes List of nodes [{Grammar case eg: genitive}, {string word}]
+                * @return {string} selected grammatical form according to current language
                 */
                grammar: function ( nodes ) {
                        var form = nodes[0],
 
                /**
                 * Tranform parsed structure into a int: (interface language) message include
-                * Invoked by putting {{int:othermessage}} into a message
-                * @param {Array} of nodes
+                * Invoked by putting `{{int:othermessage}}` into a message
+                * @param {Array} nodes List of nodes
                 * @return {string} Other message
                 */
                int: function ( nodes ) {
                /**
                 * 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
+                * separator, according to the current language.
+                * @param {Array} nodes List of nodes
+                * @return {number|string} Formatted number
                 */
                formatnum: function ( nodes ) {
                        var isInteger = ( nodes[1] && nodes[1] === 'R' ) ? true : false,
                        return this.language.convertNumber( number, isInteger );
                }
        };
+
        // Deprecated! don't rely on gM existing.
        // The window.gM ought not to be required - or if required, not required here.
        // But moving it to extensions breaks it (?!)
        // Need to fix plugin so it could do attributes as well, then will be okay to remove this.
-       window.gM = mw.jqueryMsg.getMessageFunction();
+       // @deprecated since 1.23
+       mw.log.deprecate( window, 'gM', mw.jqueryMsg.getMessageFunction(), 'Use mw.message( ... ).parse() instead' );
+
+       /**
+        * @method
+        * @member jQuery
+        * @see mw.jqueryMsg#getPlugin
+        */
        $.fn.msg = mw.jqueryMsg.getPlugin();
 
        // Replace the default message parser with jqueryMsg
index 7879d6f..716c326 100644 (file)
@@ -23,6 +23,7 @@ template
 templateContents
   = twr:templateWithReplacement p:templateParam* { return twr.concat(p) }
   / twr:templateWithOutReplacement p:templateParam* { return twr.concat(p) }
+  / twr:templateWithOutFirstParameter p:templateParam* { return twr.concat(p) }
   / t:templateName p:templateParam* { return p.length ? [ t, p ] : [ t ] }
 
 templateWithReplacement
@@ -31,6 +32,9 @@ templateWithReplacement
 templateWithOutReplacement
   = t:templateName ":" p:paramExpression { return [ t, p ] }
 
+templateWithOutFirstParameter
+  = t:templateName ":" { return [ t, "" ] }
+
 templateParam
   = "|" e:paramExpression* { return e.length > 1 ? [ "CONCAT" ].concat(e) : e[0]; }
 
index d282a56..1080df3 100644 (file)
@@ -381,7 +381,7 @@ var mw = ( function ( $, undefined ) {
                 * values with microsecond precision that are guaranteed to be monotonic. On all other browsers,
                 * it will fall back to using `Date`.
                 *
-                * @returns {number} Current time
+                * @return {number} Current time
                 */
                now: ( function () {
                        var perf = window.performance,
@@ -438,19 +438,6 @@ var mw = ( function ( $, undefined ) {
                        } );
                },
 
-               /**
-                * Dummy placeholder for {@link mw.log}
-                * @method
-                */
-               log: ( function () {
-                       var log = function () {};
-                       log.warn = function () {};
-                       log.deprecate = function ( obj, key, val ) {
-                               obj[key] = val;
-                       };
-                       return log;
-               }() ),
-
                // Make the Map constructor publicly available.
                Map: Map,
 
@@ -528,6 +515,74 @@ var mw = ( function ( $, undefined ) {
                        return mw.message.apply( mw.message, arguments ).toString();
                },
 
+               /**
+                * Dummy placeholder for {@link mw.log}
+                * @method
+                */
+               log: ( function () {
+                       // Also update the restoration of methods in mediawiki.log.js
+                       // when adding or removing methods here.
+                       var log = function () {};
+
+                       /**
+                        * @class mw.log
+                        * @singleton
+                        */
+
+                       /**
+                        * Write a message the console's warning channel.
+                        * Also logs a stacktrace for easier debugging.
+                        * Each action is silently ignored if the browser doesn't support it.
+                        *
+                        * @param {string...} msg Messages to output to console
+                        */
+                       log.warn = function () {
+                               var console = window.console;
+                               if ( console && console.warn ) {
+                                       console.warn.apply( console, arguments );
+                                       if ( console.trace ) {
+                                               console.trace();
+                                       }
+                               }
+                       };
+
+                       /**
+                        * Create a property in a host object that, when accessed, will produce
+                        * a deprecation warning in the console with backtrace.
+                        *
+                        * @param {Object} obj Host object of deprecated property
+                        * @param {string} key Name of property to create in `obj`
+                        * @param {Mixed} val The value this property should return when accessed
+                        * @param {string} [msg] Optional text to include in the deprecation message.
+                        */
+                       log.deprecate = !Object.defineProperty ? function ( obj, key, val ) {
+                               obj[key] = val;
+                       } : function ( obj, key, val, msg ) {
+                               msg = 'Use of "' + key + '" is deprecated.' + ( msg ? ( ' ' + msg ) : '' );
+                               try {
+                                       Object.defineProperty( obj, key, {
+                                               configurable: true,
+                                               enumerable: true,
+                                               get: function () {
+                                                       mw.track( 'mw.deprecate', key );
+                                                       mw.log.warn( msg );
+                                                       return val;
+                                               },
+                                               set: function ( newVal ) {
+                                                       mw.track( 'mw.deprecate', key );
+                                                       mw.log.warn( msg );
+                                                       val = newVal;
+                                               }
+                                       } );
+                               } catch ( err ) {
+                                       // IE8 can throw on Object.defineProperty
+                                       obj[key] = val;
+                               }
+                       };
+
+                       return log;
+               }() ),
+
                /**
                 * Client-side module loader which integrates with the MediaWiki ResourceLoader
                 * @class mw.loader
@@ -712,11 +767,11 @@ var mw = ( function ( $, undefined ) {
                                        return;
                                }
 
-                               // By default, always create a new <style>. Appending text
-                               // to a <style> tag means the contents have to be re-parsed (bug 45810).
-                               // Except, of course, in IE below 9, in there we default to
-                               // re-using and appending to a <style> tag due to the
-                               // IE stylesheet limit (bug 31676).
+                               // By default, always create a new <style>. Appending text to a <style>
+                               // tag is bad as it means the contents have to be re-parsed (bug 45810).
+                               //
+                               // Except, of course, in IE 9 and below. In there we default to re-using and
+                               // appending to a <style> tag due to the IE stylesheet limit (bug 31676).
                                if ( 'documentMode' in document && document.documentMode <= 9 ) {
 
                                        $style = getMarker().prev();
@@ -984,6 +1039,8 @@ var mw = ( function ( $, undefined ) {
                         * @private
                         * @param {string} src URL to script, will be used as the src attribute in the script tag
                         * @param {Function} [callback] Callback which will be run when the script is done
+                        * @param {boolean} [async=false] Whether to load modules asynchronously.
+                        *  Ignored (and defaulted to `true`) if the document-ready event has already occurred.
                         */
                        function addScript( src, callback, async ) {
                                /*jshint evil:true */
@@ -1081,11 +1138,14 @@ var mw = ( function ( $, undefined ) {
                                 */
                                function addLink( media, url ) {
                                        var el = document.createElement( 'link' );
-                                       getMarker().before( el ); // IE: Insert in dom before setting href
+                                       // For IE: Insert in document *before* setting href
+                                       getMarker().before( el );
                                        el.rel = 'stylesheet';
                                        if ( media && media !== 'all' ) {
                                                el.media = media;
                                        }
+                                       // If you end up here from an IE exception "SCRIPT: Invalid property value.",
+                                       // see #addEmbeddedCSS, bug 31676, and bug 47277 for details.
                                        el.href = url;
                                }
 
@@ -1115,7 +1175,9 @@ var mw = ( function ( $, undefined ) {
                                                        nestedAddScript( script, markModuleReady, registry[module].async, 0 );
                                                } else if ( $.isFunction( script ) ) {
                                                        registry[module].state = 'ready';
-                                                       script( $ );
+                                                       // Pass jQuery twice so that the signature of the closure which wraps
+                                                       // the script can bind both '$' and 'jQuery'.
+                                                       script( $, $ );
                                                        handlePending( module );
                                                }
                                        } catch ( e ) {
@@ -1235,8 +1297,8 @@ var mw = ( function ( $, undefined ) {
                         * @param {string|string[]} dependencies Module name or array of string module names
                         * @param {Function} [ready] Callback to execute when all dependencies are ready
                         * @param {Function} [error] Callback to execute when any dependency fails
-                        * @param {boolean} [async] If true, load modules asynchronously even if
-                        *  document ready has not yet occurred.
+                        * @param {boolean} [async=false] Whether to load modules asynchronously.
+                        *  Ignored (and defaulted to `true`) if the document-ready event has already occurred.
                         */
                        function request( dependencies, ready, error, async ) {
                                var n;
@@ -1309,7 +1371,8 @@ var mw = ( function ( $, undefined ) {
                         * @param {Object} moduleMap Module map, see #buildModulesString
                         * @param {Object} currReqBase Object with other parameters (other than 'modules') to use in the request
                         * @param {string} sourceLoadScript URL of load.php
-                        * @param {boolean} async If true, use an asynchronous request even if document ready has not yet occurred
+                        * @param {boolean} async Whether to load modules asynchronously.
+                        *  Ignored (and defaulted to `true`) if the document-ready event has already occurred.
                         */
                        function doRequest( moduleMap, currReqBase, sourceLoadScript, async ) {
                                var request = $.extend(
@@ -1317,7 +1380,6 @@ var mw = ( function ( $, undefined ) {
                                        currReqBase
                                );
                                request = sortQuery( request );
-                               // Asynchronously append a script tag to the end of the body
                                // Append &* to avoid triggering the IE6 extension check
                                addScript( sourceLoadScript + '?' + $.param( request ) + '&*', null, async );
                        }
@@ -1345,7 +1407,7 @@ var mw = ( function ( $, undefined ) {
                                 */
                                work: function () {
                                        var     reqBase, splits, maxQueryLength, q, b, bSource, bGroup, bSourceGroup,
-                                               source, concatSource, group, g, i, modules, maxVersion, sourceLoadScript,
+                                               source, concatSource, origBatch, group, g, i, modules, maxVersion, sourceLoadScript,
                                                currReqBase, currReqBaseLength, moduleMap, l,
                                                lastDotIndex, prefix, suffix, bytesAdded, async;
 
@@ -1375,6 +1437,7 @@ var mw = ( function ( $, undefined ) {
                                        mw.loader.store.init();
                                        if ( mw.loader.store.enabled ) {
                                                concatSource = [];
+                                               origBatch = batch;
                                                batch = $.grep( batch, function ( module ) {
                                                        var source = mw.loader.store.get( module );
                                                        if ( source ) {
@@ -1383,7 +1446,29 @@ var mw = ( function ( $, undefined ) {
                                                        }
                                                        return true;
                                                } );
-                                               $.globalEval( concatSource.join( ';' ) );
+                                               try {
+                                                       $.globalEval( concatSource.join( ';' ) );
+                                               } catch ( err ) {
+                                                       // Not good, the cached mw.loader.implement calls failed! This should
+                                                       // never happen, barring ResourceLoader bugs, browser bugs and PEBKACs.
+                                                       // Depending on how corrupt the string is, it is likely that some
+                                                       // modules' implement() succeeded while the ones after the error will
+                                                       // never run and leave their modules in the 'loading' state forever.
+
+                                                       // Since this is an error not caused by an individual module but by
+                                                       // something that infected the implement call itself, don't take any
+                                                       // risks and clear everything in this cache.
+                                                       mw.loader.store.clear();
+                                                       // Re-add the ones still pending back to the batch and let the server
+                                                       // repopulate these modules to the cache.
+                                                       // This means that at most one module will be useless (the one that had
+                                                       // the error) instead of all of them.
+                                                       log( 'Error while evaluating data from mw.loader.store', err );
+                                                       origBatch = $.grep( origBatch, function ( module ) {
+                                                               return registry[module].state === 'loading';
+                                                       } );
+                                                       batch = batch.concat( origBatch );
+                                               }
                                        }
 
                                        // Early exit if there's nothing to load...
@@ -1685,10 +1770,9 @@ var mw = ( function ( $, undefined ) {
                                 * @param {string} [type='text/javascript'] mime-type to use if calling with a URL of an
                                 *  external script or style; acceptable values are "text/css" and
                                 *  "text/javascript"; if no type is provided, text/javascript is assumed.
-                                * @param {boolean} [async] If true, load modules asynchronously
-                                *  even if document ready has not yet occurred. If false, block before
-                                *  document ready and load async after. If not set, true will be
-                                *  assumed if loading a URL, and false will be assumed otherwise.
+                                * @param {boolean} [async] Whether to load modules asynchronously.
+                                *  Ignored (and defaulted to `true`) if the document-ready event has already occurred.
+                                *  Defaults to `true` if loading a URL, `false` otherwise.
                                 */
                                load: function ( modules, type, async ) {
                                        var filtered, m, module, l;
@@ -1708,7 +1792,7 @@ var mw = ( function ( $, undefined ) {
                                                        if ( type === 'text/css' ) {
                                                                // IE7-8 throws security warnings when inserting a <link> tag
                                                                // with a protocol-relative URL set though attributes (instead of
-                                                               // properties) - when on HTTPS. See also bug #.
+                                                               // properties) - when on HTTPS. See also bug 41331.
                                                                l = document.createElement( 'link' );
                                                                l.rel = 'stylesheet';
                                                                l.href = modules;
@@ -1800,14 +1884,6 @@ var mw = ( function ( $, undefined ) {
                                        return null;
                                },
 
-                               /**
-                                * @inheritdoc #getVersion
-                                * @deprecated since 1.18 use #getVersion instead
-                                */
-                               version: function () {
-                                       return mw.loader.getVersion.apply( mw.loader, arguments );
-                               },
-
                                /**
                                 * Get the state of a module.
                                 *
@@ -1831,19 +1907,6 @@ var mw = ( function ( $, undefined ) {
                                        } );
                                },
 
-                               /**
-                                * Load the `mediawiki.user` module.
-                                *
-                                * For backwards-compatibility with cached pages from before 2013 where:
-                                *
-                                * - the `mediawiki.user` module didn't exist yet
-                                * - `mw.user` was still part of mediawiki.js
-                                * - `mw.loader.go` still existed and called after `mw.loader.load()`
-                                */
-                               go: function () {
-                                       mw.loader.load( 'mediawiki.user' );
-                               },
-
                                /**
                                 * @inheritdoc mw.inspect#runReports
                                 * @method
@@ -2055,6 +2118,14 @@ var mw = ( function ( $, undefined ) {
                                                }
                                        },
 
+                                       /**
+                                        * Clear the entire module store right now.
+                                        */
+                                       clear: function () {
+                                               mw.loader.store.items = {};
+                                               localStorage.removeItem( mw.loader.store.getStoreKey() );
+                                       },
+
                                        /**
                                         * Sync modules to localStorage.
                                         *
@@ -2317,7 +2388,8 @@ var mw = ( function ( $, undefined ) {
 }( jQuery ) );
 
 // Alias $j to jQuery for backwards compatibility
-window.$j = jQuery;
+// @deprecated since 1.23 Use $ or jQuery instead
+mw.log.deprecate( window, '$j', jQuery, 'Use $ or jQuery instead.' );
 
 // Attach to window and globally alias
 window.mw = window.mediaWiki = mw;
index 75e4c96..dd22e35 100644 (file)
@@ -8,28 +8,32 @@
 
 ( function ( mw, $ ) {
 
-       /**
-        * @class mw.log
-        * @singleton
-        */
+       // Reference to dummy
+       // We don't need the dummy, but it has other methods on it
+       // that we need to restore afterwards.
+       var original = mw.log,
+               slice = Array.prototype.slice;
 
        /**
-        * Logs a message to the console.
+        * Logs a message to the console in debug mode.
         *
         * In the case the browser does not have a console API, a console is created on-the-fly by appending
         * a `<div id="mw-log-console">` element to the bottom of the body and then appending this and future
         * messages to that, instead of the console.
         *
+        * @member mw.log
         * @param {string...} msg Messages to output to console.
         */
        mw.log = function () {
                // Turn arguments into an array
-               var     args = Array.prototype.slice.call( arguments ),
+               var args = slice.call( arguments ),
                        // Allow log messages to use a configured prefix to identify the source window (ie. frame)
                        prefix = mw.config.exists( 'mw.log.prefix' ) ? mw.config.get( 'mw.log.prefix' ) + '> ' : '';
 
                // Try to use an existing console
-               if ( window.console !== undefined && $.isFunction( window.console.log ) ) {
+               // Generally we can cache this, but in this case we want to re-evaluate this as a
+               // global property live so that things like Firebug Lite can take precedence.
+               if ( window.console && window.console.log ) {
                        args.unshift( prefix );
                        window.console.log.apply( window.console, args );
                        return;
                } );
        };
 
-       /**
-        * Write a message the console's warning channel.
-        * Also logs a stacktrace for easier debugging.
-        * Each action is silently ignored if the browser doesn't support it.
-        *
-        * @param {string...} msg Messages to output to console
-        */
-       mw.log.warn = function () {
-               var console = window.console;
-               if ( console && console.warn ) {
-                       console.warn.apply( console, arguments );
-                       if ( console.trace ) {
-                               console.trace();
-                       }
-               }
-       };
-
-       /**
-        * Create a property in a host object that, when accessed, will produce
-        * a deprecation warning in the console with backtrace.
-        *
-        * @param {Object} obj Host object of deprecated property
-        * @param {string} key Name of property to create in `obj`
-        * @param {Mixed} val The value this property should return when accessed
-        * @param {string} [msg] Optional text to include in the deprecation message.
-        */
-       mw.log.deprecate = !Object.defineProperty ? function ( obj, key, val ) {
-               obj[key] = val;
-       } : function ( obj, key, val, msg ) {
-               msg = 'MWDeprecationWarning: Use of "' + key + '" property is deprecated.' +
-                       ( msg ? ( ' ' + msg ) : '' );
-               try {
-                       Object.defineProperty( obj, key, {
-                               configurable: true,
-                               enumerable: true,
-                               get: function () {
-                                       mw.log.warn( msg );
-                                       return val;
-                               },
-                               set: function ( newVal ) {
-                                       mw.log.warn( msg );
-                                       val = newVal;
-                               }
-                       } );
-               } catch ( err ) {
-                       // IE8 can throw on Object.defineProperty
-                       obj[key] = val;
-               }
-       };
+       // Restore original methods
+       mw.log.warn = original.warn;
+       mw.log.deprecate = original.deprecate;
 
 }( mediaWiki, jQuery ) );
index 3aa358a..0c8152e 100644 (file)
@@ -1,7 +1,3 @@
-/**
- * Stylesheet for mediawiki.notification module
- */
-
 .mw-notification-area {
        position: absolute;
        top: 0;
diff --git a/resources/mediawiki/mediawiki.notification.hideForPrint.css b/resources/mediawiki/mediawiki.notification.hideForPrint.css
new file mode 100644 (file)
index 0000000..4f9162e
--- /dev/null
@@ -0,0 +1,3 @@
+.mw-notification-area {
+       display: none;
+}
index 4ede809..b5fd69c 100644 (file)
@@ -4,21 +4,23 @@
        var notification,
                // The #mw-notification-area div that all notifications are contained inside.
                $area,
+               // Number of open notification boxes at any time
+               openNotificationCount = 0,
                isPageReady = false,
                preReadyNotifQueue = [];
 
        /**
-        * Creates a Notification object for 1 message.
-        * Does not insert anything into the document (see #start).
+        * A Notification object for 1 message.
         *
-        * The "_" in the name is to avoid a bug (http://github.com/senchalabs/jsduck/issues/304)
+        * The "_" in the name is to avoid a bug (http://github.com/senchalabs/jsduck/issues/304).
         * It is not part of the actual class name.
         *
         * @class mw.Notification_
         * @alternateClassName mw.Notification
-        * @private
         *
-        * @constructor
+        * @constructor The constructor is not publicly accessible; use mw.notification#notify instead.
+        *  This does not insert anything into the document (see #start).
+        * @private
         */
        function Notification( message, options ) {
                var $notification, $notificationTitle, $notificationContent;
        }
 
        /**
-        * Start the notification.
-        * This inserts it into the page, closes any matching tagged notifications,
-        * handles the fadeIn animations and repacement transitions, and starts autoHide timers.
+        * Start the notification. Called automatically by mw.notification#notify
+        * (possibly asynchronously on document-ready).
+        *
+        * This inserts the notification into the page, closes any matching tagged notifications,
+        * handles the fadeIn animations and replacement transitions, and starts autoHide timers.
+        *
+        * @private
         */
        Notification.prototype.start = function () {
                var
                        autohideCount,
                        notif;
 
+               $area.show();
+
                if ( this.isOpen ) {
                        return;
                }
 
                this.isOpen = true;
+               openNotificationCount++;
 
                options = this.options;
                $notification = this.$notification;
         * Close/hide the notification.
         *
         * @param {Object} options An object containing options for the closing of the notification.
-        *  These are typically only used internally.
         *
         *  - speed: Use a close speed different than the default 'slow'.
         *  - placeholder: Set to false to disable the placeholder transition.
                        return;
                }
                this.isOpen = false;
+               openNotificationCount--;
                // Clear any remaining timeout on close
                this.pause();
 
                                complete: function () {
                                        // Remove the notification
                                        $( this ).remove();
+                                       // Hide the area manually after closing the last notification, since it has padding,
+                                       // causing it to obscure whatever is behind it in spite of being invisible (bug 52659).
+                                       // It's okay to do this before getting rid of the placeholder, as it's invisible as well.
+                                       if ( openNotificationCount === 0 ) {
+                                               $area.hide();
+                                       }
                                        if ( options.placeholder ) {
                                                // Use a fast slide up animation after closing to make it look like the notifications
                                                // below slide up into place when the notification disappears
         * Helper function, take a list of notification divs and call
         * a function on the Notification instance attached to them.
         *
+        * @private
+        * @static
         * @param {jQuery} $notifications A jQuery object containing notification divs
         * @param {string} fn The name of the function to call on the Notification instance
         */
                 * @param {HTMLElement|jQuery|mw.Message|string} message
                 * @param {Object} options The options to use for the notification.
                 *  See #defaults for details.
-                * @return {Object} Object with a close function to close the notification
+                * @return {mw.Notification} Notification object
                 */
                notify: function ( message, options ) {
                        var notif;
                        } else {
                                preReadyNotifQueue.push( notif );
                        }
-                       return { close: $.proxy( notif.close, notif ) };
+
+                       return notif;
                },
 
                /**
index 3b360af..6999610 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*!
  * Add search suggestions to the search form.
  */
 ( function ( mw, $ ) {
 
                // Compute form data for search suggestions functionality.
                function computeResultRenderCache( context ) {
-                       var $form, formAction, baseHref, linkParams;
+                       var $form, baseHref, linkParams;
 
                        // Compute common parameters for links' hrefs
                        $form = context.config.$region.closest( 'form' );
 
-                       formAction = $form.attr( 'action' );
-                       baseHref = formAction + ( formAction.match( /\?/ ) ? '&' : '?' );
+                       baseHref = $form.attr( 'action' );
+                       baseHref += baseHref.indexOf( '?' ) > -1 ? '&' : '?';
 
                        linkParams = {};
                        $.each( $form.serializeArray(), function ( idx, obj ) {
                                },
                                result: {
                                        render: renderFunction,
-                                       select: function ( $input ) {
-                                               $input.closest( 'form' ).submit();
+                                       select: function () {
+                                               return true; // allow the form to be submitted
                                        }
                                },
                                delay: 120,
                $searchInput.suggestions( {
                        result: {
                                render: renderFunction,
-                               select: function ( $input ) {
-                                       $input.closest( 'form' ).submit();
+                               select: function () {
+                                       return true; // allow the form to be submitted
                                }
                        },
                        special: {
                                render: specialRenderFunction,
                                select: function ( $input ) {
-                                       $input.closest( 'form' ).append(
-                                               $( '<input type="hidden" name="fulltext" value="1"/>' )
-                                       );
-                                       $input.closest( 'form' ).submit();
+                                       $input.closest( 'form' )
+                                               .append( $( '<input type="hidden" name="fulltext" value="1"/>' ) );
+                                       return true; // allow the form to be submitted
                                }
                        },
                        $region: $searchRegion
index 3279900..6eb8552 100644 (file)
@@ -1,3 +1,8 @@
+/**
+ * @private
+ * @singleton
+ * @class mw.toc
+ */
 ( function ( mw, $ ) {
        'use strict';
 
index 78febd2..8344111 100644 (file)
                 *         expires: 7
                 *     } );
                 *
+                * @deprecated since 1.23
                 * @param {string} key Name of bucket
                 * @param {Object} options Bucket configuration options
                 * @param {Object} options.buckets List of bucket-name/relative-probability pairs (required,
diff --git a/resources/moment/LICENSE b/resources/moment/LICENSE
new file mode 100644 (file)
index 0000000..b44e3a6
--- /dev/null
@@ -0,0 +1,22 @@
+Copyright (c) 2011-2013 Tim Wood, Iskren Chernev, Moment.js contributors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/resources/moment/lang/ar-ma.js b/resources/moment/lang/ar-ma.js
new file mode 100644 (file)
index 0000000..1c159f1
--- /dev/null
@@ -0,0 +1,56 @@
+// moment.js language configuration
+// language : Moroccan Arabic (ar-ma)
+// author : ElFadili Yassine : https://github.com/ElFadiliY
+// author : Abdel Said : https://github.com/abdelsaid
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('ar-ma', {
+        months : "يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),
+        monthsShort : "يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),
+        weekdays : "الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),
+        weekdaysShort : "احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),
+        weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: "[اليوم على الساعة] LT",
+            nextDay: '[غدا على الساعة] LT',
+            nextWeek: 'dddd [على الساعة] LT',
+            lastDay: '[أمس على الساعة] LT',
+            lastWeek: 'dddd [على الساعة] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "في %s",
+            past : "منذ %s",
+            s : "ثوان",
+            m : "دقيقة",
+            mm : "%d دقائق",
+            h : "ساعة",
+            hh : "%d ساعات",
+            d : "يوم",
+            dd : "%d أيام",
+            M : "شهر",
+            MM : "%d أشهر",
+            y : "سنة",
+            yy : "%d سنوات"
+        },
+        week : {
+            dow : 6, // Saturday is the first day of the week.
+            doy : 12  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/ar.js b/resources/moment/lang/ar.js
new file mode 100644 (file)
index 0000000..6e27d29
--- /dev/null
@@ -0,0 +1,56 @@
+// moment.js language configuration
+// language : Arabic (ar)
+// author : Abdel Said : https://github.com/abdelsaid
+// changes in months, weekdays : Ahmed Elkhatib
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('ar', {
+        months : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"),
+        monthsShort : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"),
+        weekdays : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),
+        weekdaysShort : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),
+        weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: "[اليوم على الساعة] LT",
+            nextDay: '[غدا على الساعة] LT',
+            nextWeek: 'dddd [على الساعة] LT',
+            lastDay: '[أمس على الساعة] LT',
+            lastWeek: 'dddd [على الساعة] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "في %s",
+            past : "منذ %s",
+            s : "ثوان",
+            m : "دقيقة",
+            mm : "%d دقائق",
+            h : "ساعة",
+            hh : "%d ساعات",
+            d : "يوم",
+            dd : "%d أيام",
+            M : "شهر",
+            MM : "%d أشهر",
+            y : "سنة",
+            yy : "%d سنوات"
+        },
+        week : {
+            dow : 6, // Saturday is the first day of the week.
+            doy : 12  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/bg.js b/resources/moment/lang/bg.js
new file mode 100644 (file)
index 0000000..f47ed65
--- /dev/null
@@ -0,0 +1,86 @@
+// moment.js language configuration
+// language : bulgarian (bg)
+// author : Krasen Borisov : https://github.com/kraz
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('bg', {
+        months : "януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),
+        monthsShort : "янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),
+        weekdays : "неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),
+        weekdaysShort : "нед_пон_вто_сря_чет_пет_съб".split("_"),
+        weekdaysMin : "нд_пн_вт_ср_чт_пт_сб".split("_"),
+        longDateFormat : {
+            LT : "H:mm",
+            L : "D.MM.YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd, D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay : '[Днес в] LT',
+            nextDay : '[Утре в] LT',
+            nextWeek : 'dddd [в] LT',
+            lastDay : '[Вчера в] LT',
+            lastWeek : function () {
+                switch (this.day()) {
+                case 0:
+                case 3:
+                case 6:
+                    return '[В изминалата] dddd [в] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[В изминалия] dddd [в] LT';
+                }
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "след %s",
+            past : "преди %s",
+            s : "няколко секунди",
+            m : "минута",
+            mm : "%d минути",
+            h : "час",
+            hh : "%d часа",
+            d : "ден",
+            dd : "%d дни",
+            M : "месец",
+            MM : "%d месеца",
+            y : "година",
+            yy : "%d години"
+        },
+        ordinal : function (number) {
+            var lastDigit = number % 10,
+                last2Digits = number % 100;
+            if (number === 0) {
+                return number + '-ев';
+            } else if (last2Digits === 0) {
+                return number + '-ен';
+            } else if (last2Digits > 10 && last2Digits < 20) {
+                return number + '-ти';
+            } else if (lastDigit === 1) {
+                return number + '-ви';
+            } else if (lastDigit === 2) {
+                return number + '-ри';
+            } else if (lastDigit === 7 || lastDigit === 8) {
+                return number + '-ми';
+            } else {
+                return number + '-ти';
+            }
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/br.js b/resources/moment/lang/br.js
new file mode 100644 (file)
index 0000000..39c60df
--- /dev/null
@@ -0,0 +1,107 @@
+// moment.js language configuration
+// language : breton (br)
+// author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function relativeTimeWithMutation(number, withoutSuffix, key) {
+        var format = {
+            'mm': "munutenn",
+            'MM': "miz",
+            'dd': "devezh"
+        };
+        return number + ' ' + mutation(format[key], number);
+    }
+
+    function specialMutationForYears(number) {
+        switch (lastNumber(number)) {
+        case 1:
+        case 3:
+        case 4:
+        case 5:
+        case 9:
+            return number + ' bloaz';
+        default:
+            return number + ' vloaz';
+        }
+    }
+
+    function lastNumber(number) {
+        if (number > 9) {
+            return lastNumber(number % 10);
+        }
+        return number;
+    }
+
+    function mutation(text, number) {
+        if (number === 2) {
+            return softMutation(text);
+        }
+        return text;
+    }
+
+    function softMutation(text) {
+        var mutationTable = {
+            'm': 'v',
+            'b': 'v',
+            'd': 'z'
+        };
+        if (mutationTable[text.charAt(0)] === undefined) {
+            return text;
+        }
+        return mutationTable[text.charAt(0)] + text.substring(1);
+    }
+
+    return moment.lang('br', {
+        months : "Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),
+        monthsShort : "Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),
+        weekdays : "Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),
+        weekdaysShort : "Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),
+        weekdaysMin : "Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),
+        longDateFormat : {
+            LT : "h[e]mm A",
+            L : "DD/MM/YYYY",
+            LL : "D [a viz] MMMM YYYY",
+            LLL : "D [a viz] MMMM YYYY LT",
+            LLLL : "dddd, D [a viz] MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay : '[Hiziv da] LT',
+            nextDay : '[Warc\'hoazh da] LT',
+            nextWeek : 'dddd [da] LT',
+            lastDay : '[Dec\'h da] LT',
+            lastWeek : 'dddd [paset da] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "a-benn %s",
+            past : "%s 'zo",
+            s : "un nebeud segondennoù",
+            m : "ur vunutenn",
+            mm : relativeTimeWithMutation,
+            h : "un eur",
+            hh : "%d eur",
+            d : "un devezh",
+            dd : relativeTimeWithMutation,
+            M : "ur miz",
+            MM : relativeTimeWithMutation,
+            y : "ur bloaz",
+            yy : specialMutationForYears
+        },
+        ordinal : function (number) {
+            var output = (number === 1) ? 'añ' : 'vet';
+            return number + output;
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/bs.js b/resources/moment/lang/bs.js
new file mode 100644 (file)
index 0000000..83a9b4c
--- /dev/null
@@ -0,0 +1,139 @@
+// moment.js language configuration
+// language : bosnian (bs)
+// author : Nedim Cholich : https://github.com/frontyard
+// based on (hr) translation by Bojan Marković
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+
+    function translate(number, withoutSuffix, key) {
+        var result = number + " ";
+        switch (key) {
+        case 'm':
+            return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+        case 'mm':
+            if (number === 1) {
+                result += 'minuta';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'minute';
+            } else {
+                result += 'minuta';
+            }
+            return result;
+        case 'h':
+            return withoutSuffix ? 'jedan sat' : 'jednog sata';
+        case 'hh':
+            if (number === 1) {
+                result += 'sat';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'sata';
+            } else {
+                result += 'sati';
+            }
+            return result;
+        case 'dd':
+            if (number === 1) {
+                result += 'dan';
+            } else {
+                result += 'dana';
+            }
+            return result;
+        case 'MM':
+            if (number === 1) {
+                result += 'mjesec';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'mjeseca';
+            } else {
+                result += 'mjeseci';
+            }
+            return result;
+        case 'yy':
+            if (number === 1) {
+                result += 'godina';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'godine';
+            } else {
+                result += 'godina';
+            }
+            return result;
+        }
+    }
+
+    return moment.lang('bs', {
+               months : "januar_februar_mart_april_maj_juni_juli_avgust_septembar_oktobar_novembar_decembar".split("_"),
+               monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),
+        weekdays : "nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),
+        weekdaysShort : "ned._pon._uto._sri._čet._pet._sub.".split("_"),
+        weekdaysMin : "ne_po_ut_sr_če_pe_su".split("_"),
+        longDateFormat : {
+            LT : "H:mm",
+            L : "DD. MM. YYYY",
+            LL : "D. MMMM YYYY",
+            LLL : "D. MMMM YYYY LT",
+            LLLL : "dddd, D. MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay  : '[danas u] LT',
+            nextDay  : '[sutra u] LT',
+
+            nextWeek : function () {
+                switch (this.day()) {
+                case 0:
+                    return '[u] [nedjelju] [u] LT';
+                case 3:
+                    return '[u] [srijedu] [u] LT';
+                case 6:
+                    return '[u] [subotu] [u] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[u] dddd [u] LT';
+                }
+            },
+            lastDay  : '[jučer u] LT',
+            lastWeek : function () {
+                switch (this.day()) {
+                case 0:
+                case 3:
+                    return '[prošlu] dddd [u] LT';
+                case 6:
+                    return '[prošle] [subote] [u] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[prošli] dddd [u] LT';
+                }
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "za %s",
+            past   : "prije %s",
+            s      : "par sekundi",
+            m      : translate,
+            mm     : translate,
+            h      : translate,
+            hh     : translate,
+            d      : "dan",
+            dd     : translate,
+            M      : "mjesec",
+            MM     : translate,
+            y      : "godinu",
+            yy     : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/ca.js b/resources/moment/lang/ca.js
new file mode 100644 (file)
index 0000000..cf47113
--- /dev/null
@@ -0,0 +1,66 @@
+// moment.js language configuration
+// language : catalan (ca)
+// author : Juan G. Hurtado : https://github.com/juanghurtado
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('ca', {
+        months : "gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),
+        monthsShort : "gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.".split("_"),
+        weekdays : "diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),
+        weekdaysShort : "dg._dl._dt._dc._dj._dv._ds.".split("_"),
+        weekdaysMin : "Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),
+        longDateFormat : {
+            LT : "H:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay : function () {
+                return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+            },
+            nextDay : function () {
+                return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+            },
+            nextWeek : function () {
+                return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+            },
+            lastDay : function () {
+                return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+            },
+            lastWeek : function () {
+                return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "en %s",
+            past : "fa %s",
+            s : "uns segons",
+            m : "un minut",
+            mm : "%d minuts",
+            h : "una hora",
+            hh : "%d hores",
+            d : "un dia",
+            dd : "%d dies",
+            M : "un mes",
+            MM : "%d mesos",
+            y : "un any",
+            yy : "%d anys"
+        },
+        ordinal : '%dº',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/cs.js b/resources/moment/lang/cs.js
new file mode 100644 (file)
index 0000000..c1396cf
--- /dev/null
@@ -0,0 +1,155 @@
+// moment.js language configuration
+// language : czech (cs)
+// author : petrbela : https://github.com/petrbela
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var months = "leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),
+        monthsShort = "led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");
+
+    function plural(n) {
+        return (n > 1) && (n < 5) && (~~(n / 10) !== 1);
+    }
+
+    function translate(number, withoutSuffix, key, isFuture) {
+        var result = number + " ";
+        switch (key) {
+        case 's':  // a few seconds / in a few seconds / a few seconds ago
+            return (withoutSuffix || isFuture) ? 'pár vteřin' : 'pár vteřinami';
+        case 'm':  // a minute / in a minute / a minute ago
+            return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
+        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'minuty' : 'minut');
+            } else {
+                return result + 'minutami';
+            }
+            break;
+        case 'h':  // an hour / in an hour / an hour ago
+            return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+        case 'hh': // 9 hours / in 9 hours / 9 hours ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'hodiny' : 'hodin');
+            } else {
+                return result + 'hodinami';
+            }
+            break;
+        case 'd':  // a day / in a day / a day ago
+            return (withoutSuffix || isFuture) ? 'den' : 'dnem';
+        case 'dd': // 9 days / in 9 days / 9 days ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'dny' : 'dní');
+            } else {
+                return result + 'dny';
+            }
+            break;
+        case 'M':  // a month / in a month / a month ago
+            return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
+        case 'MM': // 9 months / in 9 months / 9 months ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'měsíce' : 'měsíců');
+            } else {
+                return result + 'měsíci';
+            }
+            break;
+        case 'y':  // a year / in a year / a year ago
+            return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
+        case 'yy': // 9 years / in 9 years / 9 years ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'roky' : 'let');
+            } else {
+                return result + 'lety';
+            }
+            break;
+        }
+    }
+
+    return moment.lang('cs', {
+        months : months,
+        monthsShort : monthsShort,
+        monthsParse : (function (months, monthsShort) {
+            var i, _monthsParse = [];
+            for (i = 0; i < 12; i++) {
+                // use custom parser to solve problem with July (červenec)
+                _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
+            }
+            return _monthsParse;
+        }(months, monthsShort)),
+        weekdays : "neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),
+        weekdaysShort : "ne_po_út_st_čt_pá_so".split("_"),
+        weekdaysMin : "ne_po_út_st_čt_pá_so".split("_"),
+        longDateFormat : {
+            LT: "H:mm",
+            L : "DD.MM.YYYY",
+            LL : "D. MMMM YYYY",
+            LLL : "D. MMMM YYYY LT",
+            LLLL : "dddd D. MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: "[dnes v] LT",
+            nextDay: '[zítra v] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[v neděli v] LT';
+                case 1:
+                case 2:
+                    return '[v] dddd [v] LT';
+                case 3:
+                    return '[ve středu v] LT';
+                case 4:
+                    return '[ve čtvrtek v] LT';
+                case 5:
+                    return '[v pátek v] LT';
+                case 6:
+                    return '[v sobotu v] LT';
+                }
+            },
+            lastDay: '[včera v] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[minulou neděli v] LT';
+                case 1:
+                case 2:
+                    return '[minulé] dddd [v] LT';
+                case 3:
+                    return '[minulou středu v] LT';
+                case 4:
+                case 5:
+                    return '[minulý] dddd [v] LT';
+                case 6:
+                    return '[minulou sobotu v] LT';
+                }
+            },
+            sameElse: "L"
+        },
+        relativeTime : {
+            future : "za %s",
+            past : "před %s",
+            s : translate,
+            m : translate,
+            mm : translate,
+            h : translate,
+            hh : translate,
+            d : translate,
+            dd : translate,
+            M : translate,
+            MM : translate,
+            y : translate,
+            yy : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/cv.js b/resources/moment/lang/cv.js
new file mode 100644 (file)
index 0000000..a5812de
--- /dev/null
@@ -0,0 +1,59 @@
+// moment.js language configuration
+// language : chuvash (cv)
+// author : Anatoly Mironov : https://github.com/mirontoli
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('cv', {
+        months : "кăрлач_нарăс_пуш_ака_май_çĕртме_утă_çурла_авăн_юпа_чӳк_раштав".split("_"),
+        monthsShort : "кăр_нар_пуш_ака_май_çĕр_утă_çур_ав_юпа_чӳк_раш".split("_"),
+        weekdays : "вырсарникун_тунтикун_ытларикун_юнкун_кĕçнерникун_эрнекун_шăматкун".split("_"),
+        weekdaysShort : "выр_тун_ытл_юн_кĕç_эрн_шăм".split("_"),
+        weekdaysMin : "вр_тн_ыт_юн_кç_эр_шм".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD-MM-YYYY",
+            LL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ]",
+            LLL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT",
+            LLLL : "dddd, YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT"
+        },
+        calendar : {
+            sameDay: '[Паян] LT [сехетре]',
+            nextDay: '[Ыран] LT [сехетре]',
+            lastDay: '[Ĕнер] LT [сехетре]',
+            nextWeek: '[Çитес] dddd LT [сехетре]',
+            lastWeek: '[Иртнĕ] dddd LT [сехетре]',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : function (output) {
+                var affix = /сехет$/i.exec(output) ? "рен" : /çул$/i.exec(output) ? "тан" : "ран";
+                return output + affix;
+            },
+            past : "%s каялла",
+            s : "пĕр-ик çеккунт",
+            m : "пĕр минут",
+            mm : "%d минут",
+            h : "пĕр сехет",
+            hh : "%d сехет",
+            d : "пĕр кун",
+            dd : "%d кун",
+            M : "пĕр уйăх",
+            MM : "%d уйăх",
+            y : "пĕр çул",
+            yy : "%d çул"
+        },
+        ordinal : '%d-мĕш',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/cy.js b/resources/moment/lang/cy.js
new file mode 100644 (file)
index 0000000..b47d7c2
--- /dev/null
@@ -0,0 +1,77 @@
+// moment.js language configuration
+// language : Welsh (cy)
+// author : Robert Allen
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang("cy", {
+        months: "Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),
+        monthsShort: "Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),
+        weekdays: "Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),
+        weekdaysShort: "Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),
+        weekdaysMin: "Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),
+        // time formats are the same as en-gb
+        longDateFormat: {
+            LT: "HH:mm",
+            L: "DD/MM/YYYY",
+            LL: "D MMMM YYYY",
+            LLL: "D MMMM YYYY LT",
+            LLLL: "dddd, D MMMM YYYY LT"
+        },
+        calendar: {
+            sameDay: '[Heddiw am] LT',
+            nextDay: '[Yfory am] LT',
+            nextWeek: 'dddd [am] LT',
+            lastDay: '[Ddoe am] LT',
+            lastWeek: 'dddd [diwethaf am] LT',
+            sameElse: 'L'
+        },
+        relativeTime: {
+            future: "mewn %s",
+            past: "%s yn àl",
+            s: "ychydig eiliadau",
+            m: "munud",
+            mm: "%d munud",
+            h: "awr",
+            hh: "%d awr",
+            d: "diwrnod",
+            dd: "%d diwrnod",
+            M: "mis",
+            MM: "%d mis",
+            y: "blwyddyn",
+            yy: "%d flynedd"
+        },
+        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
+        ordinal: function (number) {
+            var b = number,
+                output = '',
+                lookup = [
+                    '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed
+                    'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed
+                ];
+
+            if (b > 20) {
+                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
+                    output = 'fed'; // not 30ain, 70ain or 90ain
+                } else {
+                    output = 'ain';
+                }
+            } else if (b > 0) {
+                output = lookup[b];
+            }
+
+            return number + output;
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/da.js b/resources/moment/lang/da.js
new file mode 100644 (file)
index 0000000..2fa8244
--- /dev/null
@@ -0,0 +1,56 @@
+// moment.js language configuration
+// language : danish (da)
+// author : Ulrik Nielsen : https://github.com/mrbase
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('da', {
+        months : "januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),
+        monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),
+        weekdays : "søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),
+        weekdaysShort : "søn_man_tir_ons_tor_fre_lør".split("_"),
+        weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D. MMMM, YYYY LT"
+        },
+        calendar : {
+            sameDay : '[I dag kl.] LT',
+            nextDay : '[I morgen kl.] LT',
+            nextWeek : 'dddd [kl.] LT',
+            lastDay : '[I går kl.] LT',
+            lastWeek : '[sidste] dddd [kl] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "om %s",
+            past : "%s siden",
+            s : "få sekunder",
+            m : "et minut",
+            mm : "%d minutter",
+            h : "en time",
+            hh : "%d timer",
+            d : "en dag",
+            dd : "%d dage",
+            M : "en måned",
+            MM : "%d måneder",
+            y : "et år",
+            yy : "%d år"
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/de.js b/resources/moment/lang/de.js
new file mode 100644 (file)
index 0000000..988f328
--- /dev/null
@@ -0,0 +1,71 @@
+// moment.js language configuration
+// language : german (de)
+// author : lluchs : https://github.com/lluchs
+// author: Menelion Elensúle: https://github.com/Oire
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function processRelativeTime(number, withoutSuffix, key, isFuture) {
+        var format = {
+            'm': ['eine Minute', 'einer Minute'],
+            'h': ['eine Stunde', 'einer Stunde'],
+            'd': ['ein Tag', 'einem Tag'],
+            'dd': [number + ' Tage', number + ' Tagen'],
+            'M': ['ein Monat', 'einem Monat'],
+            'MM': [number + ' Monate', number + ' Monaten'],
+            'y': ['ein Jahr', 'einem Jahr'],
+            'yy': [number + ' Jahre', number + ' Jahren']
+        };
+        return withoutSuffix ? format[key][0] : format[key][1];
+    }
+
+    return moment.lang('de', {
+        months : "Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),
+        monthsShort : "Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),
+        weekdays : "Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),
+        weekdaysShort : "So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),
+        weekdaysMin : "So_Mo_Di_Mi_Do_Fr_Sa".split("_"),
+        longDateFormat : {
+            LT: "H:mm [Uhr]",
+            L : "DD.MM.YYYY",
+            LL : "D. MMMM YYYY",
+            LLL : "D. MMMM YYYY LT",
+            LLLL : "dddd, D. MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: "[Heute um] LT",
+            sameElse: "L",
+            nextDay: '[Morgen um] LT',
+            nextWeek: 'dddd [um] LT',
+            lastDay: '[Gestern um] LT',
+            lastWeek: '[letzten] dddd [um] LT'
+        },
+        relativeTime : {
+            future : "in %s",
+            past : "vor %s",
+            s : "ein paar Sekunden",
+            m : processRelativeTime,
+            mm : "%d Minuten",
+            h : processRelativeTime,
+            hh : "%d Stunden",
+            d : processRelativeTime,
+            dd : processRelativeTime,
+            M : processRelativeTime,
+            MM : processRelativeTime,
+            y : processRelativeTime,
+            yy : processRelativeTime
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/el.js b/resources/moment/lang/el.js
new file mode 100644 (file)
index 0000000..9dfea23
--- /dev/null
@@ -0,0 +1,79 @@
+// moment.js language configuration
+// language : modern greek (el)
+// author : Aggelos Karalias : https://github.com/mehiel
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('el', {
+        monthsNominativeEl : "Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),
+        monthsGenitiveEl : "Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),
+        months : function (momentToFormat, format) {
+            if (/D/.test(format.substring(0, format.indexOf("MMMM")))) { // if there is a day number before 'MMMM'
+                return this._monthsGenitiveEl[momentToFormat.month()];
+            } else {
+                return this._monthsNominativeEl[momentToFormat.month()];
+            }
+        },
+        monthsShort : "Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),
+        weekdays : "Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),
+        weekdaysShort : "Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),
+        weekdaysMin : "Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),
+        meridiem : function (hours, minutes, isLower) {
+            if (hours > 11) {
+                return isLower ? 'μμ' : 'ΜΜ';
+            } else {
+                return isLower ? 'πμ' : 'ΠΜ';
+            }
+        },
+        longDateFormat : {
+            LT : "h:mm A",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd, D MMMM YYYY LT"
+        },
+        calendarEl : {
+            sameDay : '[Σήμερα {}] LT',
+            nextDay : '[Αύριο {}] LT',
+            nextWeek : 'dddd [{}] LT',
+            lastDay : '[Χθες {}] LT',
+            lastWeek : '[την προηγούμενη] dddd [{}] LT',
+            sameElse : 'L'
+        },
+        calendar : function (key, mom) {
+            var output = this._calendarEl[key],
+                hours = mom && mom.hours();
+
+            return output.replace("{}", (hours % 12 === 1 ? "στη" : "στις"));
+        },
+        relativeTime : {
+            future : "σε %s",
+            past : "%s πριν",
+            s : "δευτερόλεπτα",
+            m : "ένα λεπτό",
+            mm : "%d λεπτά",
+            h : "μία ώρα",
+            hh : "%d ώρες",
+            d : "μία μέρα",
+            dd : "%d μέρες",
+            M : "ένας μήνας",
+            MM : "%d μήνες",
+            y : "ένας χρόνος",
+            yy : "%d χρόνια"
+        },
+        ordinal : function (number) {
+            return number + 'η';
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/en-au.js b/resources/moment/lang/en-au.js
new file mode 100644 (file)
index 0000000..4d91e25
--- /dev/null
@@ -0,0 +1,62 @@
+// moment.js language configuration
+// language : australian english (en-au)
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('en-au', {
+        months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
+        monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
+        weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
+        weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
+        weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
+        longDateFormat : {
+            LT : "h:mm A",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd, D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay : '[Today at] LT',
+            nextDay : '[Tomorrow at] LT',
+            nextWeek : 'dddd [at] LT',
+            lastDay : '[Yesterday at] LT',
+            lastWeek : '[Last] dddd [at] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "in %s",
+            past : "%s ago",
+            s : "a few seconds",
+            m : "a minute",
+            mm : "%d minutes",
+            h : "an hour",
+            hh : "%d hours",
+            d : "a day",
+            dd : "%d days",
+            M : "a month",
+            MM : "%d months",
+            y : "a year",
+            yy : "%d years"
+        },
+        ordinal : function (number) {
+            var b = number % 10,
+                output = (~~ (number % 100 / 10) === 1) ? 'th' :
+                (b === 1) ? 'st' :
+                (b === 2) ? 'nd' :
+                (b === 3) ? 'rd' : 'th';
+            return number + output;
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/en-ca.js b/resources/moment/lang/en-ca.js
new file mode 100644 (file)
index 0000000..a97e9f3
--- /dev/null
@@ -0,0 +1,59 @@
+// moment.js language configuration
+// language : canadian english (en-ca)
+// author : Jonathan Abourbih : https://github.com/jonbca
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('en-ca', {
+        months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
+        monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
+        weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
+        weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
+        weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
+        longDateFormat : {
+            LT : "h:mm A",
+            L : "YYYY-MM-DD",
+            LL : "D MMMM, YYYY",
+            LLL : "D MMMM, YYYY LT",
+            LLLL : "dddd, D MMMM, YYYY LT"
+        },
+        calendar : {
+            sameDay : '[Today at] LT',
+            nextDay : '[Tomorrow at] LT',
+            nextWeek : 'dddd [at] LT',
+            lastDay : '[Yesterday at] LT',
+            lastWeek : '[Last] dddd [at] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "in %s",
+            past : "%s ago",
+            s : "a few seconds",
+            m : "a minute",
+            mm : "%d minutes",
+            h : "an hour",
+            hh : "%d hours",
+            d : "a day",
+            dd : "%d days",
+            M : "a month",
+            MM : "%d months",
+            y : "a year",
+            yy : "%d years"
+        },
+        ordinal : function (number) {
+            var b = number % 10,
+                output = (~~ (number % 100 / 10) === 1) ? 'th' :
+                (b === 1) ? 'st' :
+                (b === 2) ? 'nd' :
+                (b === 3) ? 'rd' : 'th';
+            return number + output;
+        }
+    });
+}));
diff --git a/resources/moment/lang/en-gb.js b/resources/moment/lang/en-gb.js
new file mode 100644 (file)
index 0000000..3a7907b
--- /dev/null
@@ -0,0 +1,63 @@
+// moment.js language configuration
+// language : great britain english (en-gb)
+// author : Chris Gedrim : https://github.com/chrisgedrim
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('en-gb', {
+        months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
+        monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
+        weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
+        weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
+        weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd, D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay : '[Today at] LT',
+            nextDay : '[Tomorrow at] LT',
+            nextWeek : 'dddd [at] LT',
+            lastDay : '[Yesterday at] LT',
+            lastWeek : '[Last] dddd [at] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "in %s",
+            past : "%s ago",
+            s : "a few seconds",
+            m : "a minute",
+            mm : "%d minutes",
+            h : "an hour",
+            hh : "%d hours",
+            d : "a day",
+            dd : "%d days",
+            M : "a month",
+            MM : "%d months",
+            y : "a year",
+            yy : "%d years"
+        },
+        ordinal : function (number) {
+            var b = number % 10,
+                output = (~~ (number % 100 / 10) === 1) ? 'th' :
+                (b === 1) ? 'st' :
+                (b === 2) ? 'nd' :
+                (b === 3) ? 'rd' : 'th';
+            return number + output;
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/eo.js b/resources/moment/lang/eo.js
new file mode 100644 (file)
index 0000000..03b1abf
--- /dev/null
@@ -0,0 +1,65 @@
+// moment.js language configuration
+// language : esperanto (eo)
+// author : Colin Dean : https://github.com/colindean
+// komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko.
+//          Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni!
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('eo', {
+        months : "januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),
+        monthsShort : "jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),
+        weekdays : "Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"),
+        weekdaysShort : "Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"),
+        weekdaysMin : "Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "YYYY-MM-DD",
+            LL : "D[-an de] MMMM, YYYY",
+            LLL : "D[-an de] MMMM, YYYY LT",
+            LLLL : "dddd, [la] D[-an de] MMMM, YYYY LT"
+        },
+        meridiem : function (hours, minutes, isLower) {
+            if (hours > 11) {
+                return isLower ? 'p.t.m.' : 'P.T.M.';
+            } else {
+                return isLower ? 'a.t.m.' : 'A.T.M.';
+            }
+        },
+        calendar : {
+            sameDay : '[Hodiaŭ je] LT',
+            nextDay : '[Morgaŭ je] LT',
+            nextWeek : 'dddd [je] LT',
+            lastDay : '[Hieraŭ je] LT',
+            lastWeek : '[pasinta] dddd [je] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "je %s",
+            past : "antaŭ %s",
+            s : "sekundoj",
+            m : "minuto",
+            mm : "%d minutoj",
+            h : "horo",
+            hh : "%d horoj",
+            d : "tago",//ne 'diurno', ĉar estas uzita por proksimumo
+            dd : "%d tagoj",
+            M : "monato",
+            MM : "%d monatoj",
+            y : "jaro",
+            yy : "%d jaroj"
+        },
+        ordinal : "%da",
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/es.js b/resources/moment/lang/es.js
new file mode 100644 (file)
index 0000000..0a38396
--- /dev/null
@@ -0,0 +1,66 @@
+// moment.js language configuration
+// language : spanish (es)
+// author : Julio Napurí : https://github.com/julionc
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('es', {
+        months : "enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),
+        monthsShort : "ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),
+        weekdays : "domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),
+        weekdaysShort : "dom._lun._mar._mié._jue._vie._sáb.".split("_"),
+        weekdaysMin : "Do_Lu_Ma_Mi_Ju_Vi_Sá".split("_"),
+        longDateFormat : {
+            LT : "H:mm",
+            L : "DD/MM/YYYY",
+            LL : "D [de] MMMM [de] YYYY",
+            LLL : "D [de] MMMM [de] YYYY LT",
+            LLLL : "dddd, D [de] MMMM [de] YYYY LT"
+        },
+        calendar : {
+            sameDay : function () {
+                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+            },
+            nextDay : function () {
+                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+            },
+            nextWeek : function () {
+                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+            },
+            lastDay : function () {
+                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+            },
+            lastWeek : function () {
+                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "en %s",
+            past : "hace %s",
+            s : "unos segundos",
+            m : "un minuto",
+            mm : "%d minutos",
+            h : "una hora",
+            hh : "%d horas",
+            d : "un día",
+            dd : "%d días",
+            M : "un mes",
+            MM : "%d meses",
+            y : "un año",
+            yy : "%d años"
+        },
+        ordinal : '%dº',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/et.js b/resources/moment/lang/et.js
new file mode 100644 (file)
index 0000000..fb410ef
--- /dev/null
@@ -0,0 +1,76 @@
+// moment.js language configuration
+// language : estonian (et)
+// author : Henry Kehlmann : https://github.com/madhenry
+// improvements : Illimar Tambek : https://github.com/ragulka
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function processRelativeTime(number, withoutSuffix, key, isFuture) {
+        var format = {
+            's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
+            'm' : ['ühe minuti', 'üks minut'],
+            'mm': [number + ' minuti', number + ' minutit'],
+            'h' : ['ühe tunni', 'tund aega', 'üks tund'],
+            'hh': [number + ' tunni', number + ' tundi'],
+            'd' : ['ühe päeva', 'üks päev'],
+            'M' : ['kuu aja', 'kuu aega', 'üks kuu'],
+            'MM': [number + ' kuu', number + ' kuud'],
+            'y' : ['ühe aasta', 'aasta', 'üks aasta'],
+            'yy': [number + ' aasta', number + ' aastat']
+        };
+        if (withoutSuffix) {
+            return format[key][2] ? format[key][2] : format[key][1];
+        }
+        return isFuture ? format[key][0] : format[key][1];
+    }
+
+    return moment.lang('et', {
+        months        : "jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),
+        monthsShort   : "jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),
+        weekdays      : "pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),
+        weekdaysShort : "P_E_T_K_N_R_L".split("_"),
+        weekdaysMin   : "P_E_T_K_N_R_L".split("_"),
+        longDateFormat : {
+            LT   : "H:mm",
+            L    : "DD.MM.YYYY",
+            LL   : "D. MMMM YYYY",
+            LLL  : "D. MMMM YYYY LT",
+            LLLL : "dddd, D. MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay  : '[Täna,] LT',
+            nextDay  : '[Homme,] LT',
+            nextWeek : '[Järgmine] dddd LT',
+            lastDay  : '[Eile,] LT',
+            lastWeek : '[Eelmine] dddd LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%s pärast",
+            past   : "%s tagasi",
+            s      : processRelativeTime,
+            m      : processRelativeTime,
+            mm     : processRelativeTime,
+            h      : processRelativeTime,
+            hh     : processRelativeTime,
+            d      : processRelativeTime,
+            dd     : '%d päeva',
+            M      : processRelativeTime,
+            MM     : processRelativeTime,
+            y      : processRelativeTime,
+            yy     : processRelativeTime
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/eu.js b/resources/moment/lang/eu.js
new file mode 100644 (file)
index 0000000..659b739
--- /dev/null
@@ -0,0 +1,60 @@
+// moment.js language configuration
+// language : euskara (eu)
+// author : Eneko Illarramendi : https://github.com/eillarra
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('eu', {
+        months : "urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),
+        monthsShort : "urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),
+        weekdays : "igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),
+        weekdaysShort : "ig._al._ar._az._og._ol._lr.".split("_"),
+        weekdaysMin : "ig_al_ar_az_og_ol_lr".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "YYYY-MM-DD",
+            LL : "YYYY[ko] MMMM[ren] D[a]",
+            LLL : "YYYY[ko] MMMM[ren] D[a] LT",
+            LLLL : "dddd, YYYY[ko] MMMM[ren] D[a] LT",
+            l : "YYYY-M-D",
+            ll : "YYYY[ko] MMM D[a]",
+            lll : "YYYY[ko] MMM D[a] LT",
+            llll : "ddd, YYYY[ko] MMM D[a] LT"
+        },
+        calendar : {
+            sameDay : '[gaur] LT[etan]',
+            nextDay : '[bihar] LT[etan]',
+            nextWeek : 'dddd LT[etan]',
+            lastDay : '[atzo] LT[etan]',
+            lastWeek : '[aurreko] dddd LT[etan]',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%s barru",
+            past : "duela %s",
+            s : "segundo batzuk",
+            m : "minutu bat",
+            mm : "%d minutu",
+            h : "ordu bat",
+            hh : "%d ordu",
+            d : "egun bat",
+            dd : "%d egun",
+            M : "hilabete bat",
+            MM : "%d hilabete",
+            y : "urte bat",
+            yy : "%d urte"
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/fa.js b/resources/moment/lang/fa.js
new file mode 100644 (file)
index 0000000..4a690c4
--- /dev/null
@@ -0,0 +1,97 @@
+// moment.js language configuration
+// language : Persian Language
+// author : Ebrahim Byagowi : https://github.com/ebraminio
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '۱',
+        '2': '۲',
+        '3': '۳',
+        '4': '۴',
+        '5': '۵',
+        '6': '۶',
+        '7': '۷',
+        '8': '۸',
+        '9': '۹',
+        '0': '۰'
+    }, numberMap = {
+        '۱': '1',
+        '۲': '2',
+        '۳': '3',
+        '۴': '4',
+        '۵': '5',
+        '۶': '6',
+        '۷': '7',
+        '۸': '8',
+        '۹': '9',
+        '۰': '0'
+    };
+
+    return moment.lang('fa', {
+        months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
+        monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
+        weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
+        weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
+        weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
+        longDateFormat : {
+            LT : 'HH:mm',
+            L : 'DD/MM/YYYY',
+            LL : 'D MMMM YYYY',
+            LLL : 'D MMMM YYYY LT',
+            LLLL : 'dddd, D MMMM YYYY LT'
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 12) {
+                return "قبل از ظهر";
+            } else {
+                return "بعد از ظهر";
+            }
+        },
+        calendar : {
+            sameDay : '[امروز ساعت] LT',
+            nextDay : '[فردا ساعت] LT',
+            nextWeek : 'dddd [ساعت] LT',
+            lastDay : '[دیروز ساعت] LT',
+            lastWeek : 'dddd [پیش] [ساعت] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : 'در %s',
+            past : '%s پیش',
+            s : 'چندین ثانیه',
+            m : 'یک دقیقه',
+            mm : '%d دقیقه',
+            h : 'یک ساعت',
+            hh : '%d ساعت',
+            d : 'یک روز',
+            dd : '%d روز',
+            M : 'یک ماه',
+            MM : '%d ماه',
+            y : 'یک سال',
+            yy : '%d سال'
+        },
+        preparse: function (string) {
+            return string.replace(/[۰-۹]/g, function (match) {
+                return numberMap[match];
+            }).replace(/،/g, ',');
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            }).replace(/,/g, '،');
+        },
+        ordinal : '%dم',
+        week : {
+            dow : 6, // Saturday is the first day of the week.
+            doy : 12 // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/fi.js b/resources/moment/lang/fi.js
new file mode 100644 (file)
index 0000000..18529c1
--- /dev/null
@@ -0,0 +1,103 @@
+// moment.js language configuration
+// language : finnish (fi)
+// author : Tarmo Aidantausta : https://github.com/bleadof
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var numbers_past = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),
+        numbers_future = ['nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',
+                          numbers_past[7], numbers_past[8], numbers_past[9]];
+
+    function translate(number, withoutSuffix, key, isFuture) {
+        var result = "";
+        switch (key) {
+        case 's':
+            return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
+        case 'm':
+            return isFuture ? 'minuutin' : 'minuutti';
+        case 'mm':
+            result = isFuture ? 'minuutin' : 'minuuttia';
+            break;
+        case 'h':
+            return isFuture ? 'tunnin' : 'tunti';
+        case 'hh':
+            result = isFuture ? 'tunnin' : 'tuntia';
+            break;
+        case 'd':
+            return isFuture ? 'päivän' : 'päivä';
+        case 'dd':
+            result = isFuture ? 'päivän' : 'päivää';
+            break;
+        case 'M':
+            return isFuture ? 'kuukauden' : 'kuukausi';
+        case 'MM':
+            result = isFuture ? 'kuukauden' : 'kuukautta';
+            break;
+        case 'y':
+            return isFuture ? 'vuoden' : 'vuosi';
+        case 'yy':
+            result = isFuture ? 'vuoden' : 'vuotta';
+            break;
+        }
+        result = verbal_number(number, isFuture) + " " + result;
+        return result;
+    }
+
+    function verbal_number(number, isFuture) {
+        return number < 10 ? (isFuture ? numbers_future[number] : numbers_past[number]) : number;
+    }
+
+    return moment.lang('fi', {
+        months : "tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),
+        monthsShort : "tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),
+        weekdays : "sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),
+        weekdaysShort : "su_ma_ti_ke_to_pe_la".split("_"),
+        weekdaysMin : "su_ma_ti_ke_to_pe_la".split("_"),
+        longDateFormat : {
+            LT : "HH.mm",
+            L : "DD.MM.YYYY",
+            LL : "Do MMMM[ta] YYYY",
+            LLL : "Do MMMM[ta] YYYY, [klo] LT",
+            LLLL : "dddd, Do MMMM[ta] YYYY, [klo] LT",
+            l : "D.M.YYYY",
+            ll : "Do MMM YYYY",
+            lll : "Do MMM YYYY, [klo] LT",
+            llll : "ddd, Do MMM YYYY, [klo] LT"
+        },
+        calendar : {
+            sameDay : '[tänään] [klo] LT',
+            nextDay : '[huomenna] [klo] LT',
+            nextWeek : 'dddd [klo] LT',
+            lastDay : '[eilen] [klo] LT',
+            lastWeek : '[viime] dddd[na] [klo] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%s päästä",
+            past : "%s sitten",
+            s : translate,
+            m : translate,
+            mm : translate,
+            h : translate,
+            hh : translate,
+            d : translate,
+            dd : translate,
+            M : translate,
+            MM : translate,
+            y : translate,
+            yy : translate
+        },
+        ordinal : "%d.",
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/fo.js b/resources/moment/lang/fo.js
new file mode 100644 (file)
index 0000000..2f1cbb8
--- /dev/null
@@ -0,0 +1,56 @@
+// moment.js language configuration
+// language : faroese (fo)
+// author : Ragnar Johannesen : https://github.com/ragnar123
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('fo', {
+        months : "januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),
+        monthsShort : "jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),
+        weekdays : "sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),
+        weekdaysShort : "sun_mán_týs_mik_hós_frí_ley".split("_"),
+        weekdaysMin : "su_má_tý_mi_hó_fr_le".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D. MMMM, YYYY LT"
+        },
+        calendar : {
+            sameDay : '[Í dag kl.] LT',
+            nextDay : '[Í morgin kl.] LT',
+            nextWeek : 'dddd [kl.] LT',
+            lastDay : '[Í gjár kl.] LT',
+            lastWeek : '[síðstu] dddd [kl] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "um %s",
+            past : "%s síðani",
+            s : "fá sekund",
+            m : "ein minutt",
+            mm : "%d minuttir",
+            h : "ein tími",
+            hh : "%d tímar",
+            d : "ein dagur",
+            dd : "%d dagar",
+            M : "ein mánaði",
+            MM : "%d mánaðir",
+            y : "eitt ár",
+            yy : "%d ár"
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/fr-ca.js b/resources/moment/lang/fr-ca.js
new file mode 100644 (file)
index 0000000..3280d79
--- /dev/null
@@ -0,0 +1,54 @@
+// moment.js language configuration
+// language : canadian french (fr-ca)
+// author : Jonathan Abourbih : https://github.com/jonbca
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('fr-ca', {
+        months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),
+        monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),
+        weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),
+        weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"),
+        weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "YYYY-MM-DD",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: "[Aujourd'hui à] LT",
+            nextDay: '[Demain à] LT',
+            nextWeek: 'dddd [à] LT',
+            lastDay: '[Hier à] LT',
+            lastWeek: 'dddd [dernier à] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "dans %s",
+            past : "il y a %s",
+            s : "quelques secondes",
+            m : "une minute",
+            mm : "%d minutes",
+            h : "une heure",
+            hh : "%d heures",
+            d : "un jour",
+            dd : "%d jours",
+            M : "un mois",
+            MM : "%d mois",
+            y : "un an",
+            yy : "%d ans"
+        },
+        ordinal : function (number) {
+            return number + (number === 1 ? 'er' : '');
+        }
+    });
+}));
diff --git a/resources/moment/lang/fr.js b/resources/moment/lang/fr.js
new file mode 100644 (file)
index 0000000..6b3dc52
--- /dev/null
@@ -0,0 +1,58 @@
+// moment.js language configuration
+// language : french (fr)
+// author : John Fischer : https://github.com/jfroffice
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('fr', {
+        months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),
+        monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),
+        weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),
+        weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"),
+        weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: "[Aujourd'hui à] LT",
+            nextDay: '[Demain à] LT',
+            nextWeek: 'dddd [à] LT',
+            lastDay: '[Hier à] LT',
+            lastWeek: 'dddd [dernier à] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "dans %s",
+            past : "il y a %s",
+            s : "quelques secondes",
+            m : "une minute",
+            mm : "%d minutes",
+            h : "une heure",
+            hh : "%d heures",
+            d : "un jour",
+            dd : "%d jours",
+            M : "un mois",
+            MM : "%d mois",
+            y : "un an",
+            yy : "%d ans"
+        },
+        ordinal : function (number) {
+            return number + (number === 1 ? 'er' : '');
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/gl.js b/resources/moment/lang/gl.js
new file mode 100644 (file)
index 0000000..8b14127
--- /dev/null
@@ -0,0 +1,71 @@
+// moment.js language configuration
+// language : galician (gl)
+// author : Juan G. Hurtado : https://github.com/juanghurtado
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('gl', {
+        months : "Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro".split("_"),
+        monthsShort : "Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.".split("_"),
+        weekdays : "Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado".split("_"),
+        weekdaysShort : "Dom._Lun._Mar._Mér._Xov._Ven._Sáb.".split("_"),
+        weekdaysMin : "Do_Lu_Ma_Mé_Xo_Ve_Sá".split("_"),
+        longDateFormat : {
+            LT : "H:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay : function () {
+                return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
+            },
+            nextDay : function () {
+                return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
+            },
+            nextWeek : function () {
+                return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
+            },
+            lastDay : function () {
+                return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';
+            },
+            lastWeek : function () {
+                return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : function (str) {
+                if (str === "uns segundos") {
+                    return "nuns segundos";
+                }
+                return "en " + str;
+            },
+            past : "hai %s",
+            s : "uns segundos",
+            m : "un minuto",
+            mm : "%d minutos",
+            h : "unha hora",
+            hh : "%d horas",
+            d : "un día",
+            dd : "%d días",
+            M : "un mes",
+            MM : "%d meses",
+            y : "un ano",
+            yy : "%d anos"
+        },
+        ordinal : '%dº',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/he.js b/resources/moment/lang/he.js
new file mode 100644 (file)
index 0000000..b85dbe8
--- /dev/null
@@ -0,0 +1,77 @@
+// moment.js language configuration
+// language : Hebrew (he)
+// author : Tomer Cohen : https://github.com/tomer
+// author : Moshe Simantov : https://github.com/DevelopmentIL
+// author : Tal Ater : https://github.com/TalAter
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('he', {
+        months : "ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),
+        monthsShort : "ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),
+        weekdays : "ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),
+        weekdaysShort : "א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),
+        weekdaysMin : "א_ב_ג_ד_ה_ו_ש".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D [ב]MMMM YYYY",
+            LLL : "D [ב]MMMM YYYY LT",
+            LLLL : "dddd, D [ב]MMMM YYYY LT",
+            l : "D/M/YYYY",
+            ll : "D MMM YYYY",
+            lll : "D MMM YYYY LT",
+            llll : "ddd, D MMM YYYY LT"
+        },
+        calendar : {
+            sameDay : '[היום ב־]LT',
+            nextDay : '[מחר ב־]LT',
+            nextWeek : 'dddd [בשעה] LT',
+            lastDay : '[אתמול ב־]LT',
+            lastWeek : '[ביום] dddd [האחרון בשעה] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "בעוד %s",
+            past : "לפני %s",
+            s : "מספר שניות",
+            m : "דקה",
+            mm : "%d דקות",
+            h : "שעה",
+            hh : function (number) {
+                if (number === 2) {
+                    return "שעתיים";
+                }
+                return number + " שעות";
+            },
+            d : "יום",
+            dd : function (number) {
+                if (number === 2) {
+                    return "יומיים";
+                }
+                return number + " ימים";
+            },
+            M : "חודש",
+            MM : function (number) {
+                if (number === 2) {
+                    return "חודשיים";
+                }
+                return number + " חודשים";
+            },
+            y : "שנה",
+            yy : function (number) {
+                if (number === 2) {
+                    return "שנתיים";
+                }
+                return number + " שנים";
+            }
+        }
+    });
+}));
diff --git a/resources/moment/lang/hi.js b/resources/moment/lang/hi.js
new file mode 100644 (file)
index 0000000..8e6e99c
--- /dev/null
@@ -0,0 +1,105 @@
+// moment.js language configuration
+// language : hindi (hi)
+// author : Mayank Singhal : https://github.com/mayanksinghal
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '१',
+        '2': '२',
+        '3': '३',
+        '4': '४',
+        '5': '५',
+        '6': '६',
+        '7': '७',
+        '8': '८',
+        '9': '९',
+        '0': '०'
+    },
+    numberMap = {
+        '१': '1',
+        '२': '2',
+        '३': '3',
+        '४': '4',
+        '५': '5',
+        '६': '6',
+        '७': '7',
+        '८': '8',
+        '९': '9',
+        '०': '0'
+    };
+
+    return moment.lang('hi', {
+        months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split("_"),
+        monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split("_"),
+        weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split("_"),
+        weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split("_"),
+        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split("_"),
+        longDateFormat : {
+            LT : "A h:mm बजे",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY, LT",
+            LLLL : "dddd, D MMMM YYYY, LT"
+        },
+        calendar : {
+            sameDay : '[आज] LT',
+            nextDay : '[कल] LT',
+            nextWeek : 'dddd, LT',
+            lastDay : '[कल] LT',
+            lastWeek : '[पिछले] dddd, LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%s में",
+            past : "%s पहले",
+            s : "कुछ ही क्षण",
+            m : "एक मिनट",
+            mm : "%d मिनट",
+            h : "एक घंटा",
+            hh : "%d घंटे",
+            d : "एक दिन",
+            dd : "%d दिन",
+            M : "एक महीने",
+            MM : "%d महीने",
+            y : "एक वर्ष",
+            yy : "%d वर्ष"
+        },
+        preparse: function (string) {
+            return string.replace(/[१२३४५६७८९०]/g, function (match) {
+                return numberMap[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            });
+        },
+        // Hindi notation for meridiems are quite fuzzy in practice. While there exists
+        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 4) {
+                return "रात";
+            } else if (hour < 10) {
+                return "सुबह";
+            } else if (hour < 17) {
+                return "दोपहर";
+            } else if (hour < 20) {
+                return "शाम";
+            } else {
+                return "रात";
+            }
+        },
+        week : {
+            dow : 0, // Sunday is the first day of the week.
+            doy : 6  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/hr.js b/resources/moment/lang/hr.js
new file mode 100644 (file)
index 0000000..2e3bf11
--- /dev/null
@@ -0,0 +1,140 @@
+// moment.js language configuration
+// language : hrvatski (hr)
+// author : Bojan Marković : https://github.com/bmarkovic
+
+// based on (sl) translation by Robert Sedovšek
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+
+    function translate(number, withoutSuffix, key) {
+        var result = number + " ";
+        switch (key) {
+        case 'm':
+            return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+        case 'mm':
+            if (number === 1) {
+                result += 'minuta';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'minute';
+            } else {
+                result += 'minuta';
+            }
+            return result;
+        case 'h':
+            return withoutSuffix ? 'jedan sat' : 'jednog sata';
+        case 'hh':
+            if (number === 1) {
+                result += 'sat';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'sata';
+            } else {
+                result += 'sati';
+            }
+            return result;
+        case 'dd':
+            if (number === 1) {
+                result += 'dan';
+            } else {
+                result += 'dana';
+            }
+            return result;
+        case 'MM':
+            if (number === 1) {
+                result += 'mjesec';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'mjeseca';
+            } else {
+                result += 'mjeseci';
+            }
+            return result;
+        case 'yy':
+            if (number === 1) {
+                result += 'godina';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'godine';
+            } else {
+                result += 'godina';
+            }
+            return result;
+        }
+    }
+
+    return moment.lang('hr', {
+        months : "sječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"),
+        monthsShort : "sje._vel._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),
+        weekdays : "nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),
+        weekdaysShort : "ned._pon._uto._sri._čet._pet._sub.".split("_"),
+        weekdaysMin : "ne_po_ut_sr_če_pe_su".split("_"),
+        longDateFormat : {
+            LT : "H:mm",
+            L : "DD. MM. YYYY",
+            LL : "D. MMMM YYYY",
+            LLL : "D. MMMM YYYY LT",
+            LLLL : "dddd, D. MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay  : '[danas u] LT',
+            nextDay  : '[sutra u] LT',
+
+            nextWeek : function () {
+                switch (this.day()) {
+                case 0:
+                    return '[u] [nedjelju] [u] LT';
+                case 3:
+                    return '[u] [srijedu] [u] LT';
+                case 6:
+                    return '[u] [subotu] [u] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[u] dddd [u] LT';
+                }
+            },
+            lastDay  : '[jučer u] LT',
+            lastWeek : function () {
+                switch (this.day()) {
+                case 0:
+                case 3:
+                    return '[prošlu] dddd [u] LT';
+                case 6:
+                    return '[prošle] [subote] [u] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[prošli] dddd [u] LT';
+                }
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "za %s",
+            past   : "prije %s",
+            s      : "par sekundi",
+            m      : translate,
+            mm     : translate,
+            h      : translate,
+            hh     : translate,
+            d      : "dan",
+            dd     : translate,
+            M      : "mjesec",
+            MM     : translate,
+            y      : "godinu",
+            yy     : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/hu.js b/resources/moment/lang/hu.js
new file mode 100644 (file)
index 0000000..4d84ebd
--- /dev/null
@@ -0,0 +1,98 @@
+// moment.js language configuration
+// language : hungarian (hu)
+// author : Adam Brunner : https://github.com/adambrunner
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
+
+    function translate(number, withoutSuffix, key, isFuture) {
+        var num = number,
+            suffix;
+
+        switch (key) {
+        case 's':
+            return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
+        case 'm':
+            return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
+        case 'mm':
+            return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
+        case 'h':
+            return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
+        case 'hh':
+            return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
+        case 'd':
+            return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
+        case 'dd':
+            return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
+        case 'M':
+            return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+        case 'MM':
+            return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+        case 'y':
+            return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
+        case 'yy':
+            return num + (isFuture || withoutSuffix ? ' év' : ' éve');
+        }
+
+        return '';
+    }
+
+    function week(isFuture) {
+        return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
+    }
+
+    return moment.lang('hu', {
+        months : "január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),
+        monthsShort : "jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),
+        weekdays : "vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),
+        weekdaysShort : "vas_hét_kedd_sze_csüt_pén_szo".split("_"),
+        weekdaysMin : "v_h_k_sze_cs_p_szo".split("_"),
+        longDateFormat : {
+            LT : "H:mm",
+            L : "YYYY.MM.DD.",
+            LL : "YYYY. MMMM D.",
+            LLL : "YYYY. MMMM D., LT",
+            LLLL : "YYYY. MMMM D., dddd LT"
+        },
+        calendar : {
+            sameDay : '[ma] LT[-kor]',
+            nextDay : '[holnap] LT[-kor]',
+            nextWeek : function () {
+                return week.call(this, true);
+            },
+            lastDay : '[tegnap] LT[-kor]',
+            lastWeek : function () {
+                return week.call(this, false);
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%s múlva",
+            past : "%s",
+            s : translate,
+            m : translate,
+            mm : translate,
+            h : translate,
+            hh : translate,
+            d : translate,
+            dd : translate,
+            M : translate,
+            MM : translate,
+            y : translate,
+            yy : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/hy-am.js b/resources/moment/lang/hy-am.js
new file mode 100644 (file)
index 0000000..951655b
--- /dev/null
@@ -0,0 +1,113 @@
+// moment.js language configuration
+// language : Armenian (hy-am)
+// author : Armendarabyan : https://github.com/armendarabyan
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+
+    function monthsCaseReplace(m, format) {
+        var months = {
+            'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'),
+            'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_')
+        },
+
+        nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return months[nounCase][m.month()];
+    }
+
+    function monthsShortCaseReplace(m, format) {
+        var monthsShort = 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_');
+
+        return monthsShort[m.month()];
+    }
+
+    function weekdaysCaseReplace(m, format) {
+        var weekdays = 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_');
+
+        return weekdays[m.day()];
+    }
+
+    return moment.lang('hy-am', {
+        months : monthsCaseReplace,
+        monthsShort : monthsShortCaseReplace,
+        weekdays : weekdaysCaseReplace,
+        weekdaysShort : "կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),
+        weekdaysMin : "կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD.MM.YYYY",
+            LL : "D MMMM YYYY թ.",
+            LLL : "D MMMM YYYY թ., LT",
+            LLLL : "dddd, D MMMM YYYY թ., LT"
+        },
+        calendar : {
+            sameDay: '[այսօր] LT',
+            nextDay: '[վաղը] LT',
+            lastDay: '[երեկ] LT',
+            nextWeek: function () {
+                return 'dddd [օրը ժամը] LT';
+            },
+            lastWeek: function () {
+                return '[անցած] dddd [օրը ժամը] LT';
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "%s հետո",
+            past : "%s առաջ",
+            s : "մի քանի վայրկյան",
+            m : "րոպե",
+            mm : "%d րոպե",
+            h : "ժամ",
+            hh : "%d ժամ",
+            d : "օր",
+            dd : "%d օր",
+            M : "ամիս",
+            MM : "%d ամիս",
+            y : "տարի",
+            yy : "%d տարի"
+        },
+
+        meridiem : function (hour) {
+            if (hour < 4) {
+                return "գիշերվա";
+            } else if (hour < 12) {
+                return "առավոտվա";
+            } else if (hour < 17) {
+                return "ցերեկվա";
+            } else {
+                return "երեկոյան";
+            }
+        },
+
+        ordinal: function (number, period) {
+            switch (period) {
+            case 'DDD':
+            case 'w':
+            case 'W':
+            case 'DDDo':
+                if (number === 1) {
+                    return number + '-ին';
+                }
+                return number + '-րդ';
+            default:
+                return number;
+            }
+        },
+
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/id.js b/resources/moment/lang/id.js
new file mode 100644 (file)
index 0000000..f186280
--- /dev/null
@@ -0,0 +1,67 @@
+// moment.js language configuration
+// language : Bahasa Indonesia (id)
+// author : Mohammad Satrio Utomo : https://github.com/tyok
+// reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('id', {
+        months : "Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),
+        monthsShort : "Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),
+        weekdays : "Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),
+        weekdaysShort : "Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),
+        weekdaysMin : "Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),
+        longDateFormat : {
+            LT : "HH.mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY [pukul] LT",
+            LLLL : "dddd, D MMMM YYYY [pukul] LT"
+        },
+        meridiem : function (hours, minutes, isLower) {
+            if (hours < 11) {
+                return 'pagi';
+            } else if (hours < 15) {
+                return 'siang';
+            } else if (hours < 19) {
+                return 'sore';
+            } else {
+                return 'malam';
+            }
+        },
+        calendar : {
+            sameDay : '[Hari ini pukul] LT',
+            nextDay : '[Besok pukul] LT',
+            nextWeek : 'dddd [pukul] LT',
+            lastDay : '[Kemarin pukul] LT',
+            lastWeek : 'dddd [lalu pukul] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "dalam %s",
+            past : "%s yang lalu",
+            s : "beberapa detik",
+            m : "semenit",
+            mm : "%d menit",
+            h : "sejam",
+            hh : "%d jam",
+            d : "sehari",
+            dd : "%d hari",
+            M : "sebulan",
+            MM : "%d bulan",
+            y : "setahun",
+            yy : "%d tahun"
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/is.js b/resources/moment/lang/is.js
new file mode 100644 (file)
index 0000000..5b6b2a8
--- /dev/null
@@ -0,0 +1,124 @@
+// moment.js language configuration
+// language : icelandic (is)
+// author : Hinrik Örn Sigurðsson : https://github.com/hinrik
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function plural(n) {
+        if (n % 100 === 11) {
+            return true;
+        } else if (n % 10 === 1) {
+            return false;
+        }
+        return true;
+    }
+
+    function translate(number, withoutSuffix, key, isFuture) {
+        var result = number + " ";
+        switch (key) {
+        case 's':
+            return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
+        case 'm':
+            return withoutSuffix ? 'mínúta' : 'mínútu';
+        case 'mm':
+            if (plural(number)) {
+                return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
+            } else if (withoutSuffix) {
+                return result + 'mínúta';
+            }
+            return result + 'mínútu';
+        case 'hh':
+            if (plural(number)) {
+                return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
+            }
+            return result + 'klukkustund';
+        case 'd':
+            if (withoutSuffix) {
+                return 'dagur';
+            }
+            return isFuture ? 'dag' : 'degi';
+        case 'dd':
+            if (plural(number)) {
+                if (withoutSuffix) {
+                    return result + 'dagar';
+                }
+                return result + (isFuture ? 'daga' : 'dögum');
+            } else if (withoutSuffix) {
+                return result + 'dagur';
+            }
+            return result + (isFuture ? 'dag' : 'degi');
+        case 'M':
+            if (withoutSuffix) {
+                return 'mánuður';
+            }
+            return isFuture ? 'mánuð' : 'mánuði';
+        case 'MM':
+            if (plural(number)) {
+                if (withoutSuffix) {
+                    return result + 'mánuðir';
+                }
+                return result + (isFuture ? 'mánuði' : 'mánuðum');
+            } else if (withoutSuffix) {
+                return result + 'mánuður';
+            }
+            return result + (isFuture ? 'mánuð' : 'mánuði');
+        case 'y':
+            return withoutSuffix || isFuture ? 'ár' : 'ári';
+        case 'yy':
+            if (plural(number)) {
+                return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
+            }
+            return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
+        }
+    }
+
+    return moment.lang('is', {
+        months : "janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),
+        monthsShort : "jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),
+        weekdays : "sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),
+        weekdaysShort : "sun_mán_þri_mið_fim_fös_lau".split("_"),
+        weekdaysMin : "Su_Má_Þr_Mi_Fi_Fö_La".split("_"),
+        longDateFormat : {
+            LT : "H:mm",
+            L : "DD/MM/YYYY",
+            LL : "D. MMMM YYYY",
+            LLL : "D. MMMM YYYY [kl.] LT",
+            LLLL : "dddd, D. MMMM YYYY [kl.] LT"
+        },
+        calendar : {
+            sameDay : '[í dag kl.] LT',
+            nextDay : '[á morgun kl.] LT',
+            nextWeek : 'dddd [kl.] LT',
+            lastDay : '[í gær kl.] LT',
+            lastWeek : '[síðasta] dddd [kl.] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "eftir %s",
+            past : "fyrir %s síðan",
+            s : translate,
+            m : translate,
+            mm : translate,
+            h : "klukkustund",
+            hh : translate,
+            d : translate,
+            dd : translate,
+            M : translate,
+            MM : translate,
+            y : translate,
+            yy : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/it.js b/resources/moment/lang/it.js
new file mode 100644 (file)
index 0000000..84b7698
--- /dev/null
@@ -0,0 +1,59 @@
+// moment.js language configuration
+// language : italian (it)
+// author : Lorenzo : https://github.com/aliem
+// author: Mattia Larentis: https://github.com/nostalgiaz
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('it', {
+        months : "Gennaio_Febbraio_Marzo_Aprile_Maggio_Giugno_Luglio_Agosto_Settembre_Ottobre_Novembre_Dicembre".split("_"),
+        monthsShort : "Gen_Feb_Mar_Apr_Mag_Giu_Lug_Ago_Set_Ott_Nov_Dic".split("_"),
+        weekdays : "Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),
+        weekdaysShort : "Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),
+        weekdaysMin : "D_L_Ma_Me_G_V_S".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd, D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: '[Oggi alle] LT',
+            nextDay: '[Domani alle] LT',
+            nextWeek: 'dddd [alle] LT',
+            lastDay: '[Ieri alle] LT',
+            lastWeek: '[lo scorso] dddd [alle] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : function (s) {
+                return ((/^[0-9].+$/).test(s) ? "tra" : "in") + " " + s;
+            },
+            past : "%s fa",
+            s : "alcuni secondi",
+            m : "un minuto",
+            mm : "%d minuti",
+            h : "un'ora",
+            hh : "%d ore",
+            d : "un giorno",
+            dd : "%d giorni",
+            M : "un mese",
+            MM : "%d mesi",
+            y : "un anno",
+            yy : "%d anni"
+        },
+        ordinal: '%dº',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/ja.js b/resources/moment/lang/ja.js
new file mode 100644 (file)
index 0000000..9cd7e9e
--- /dev/null
@@ -0,0 +1,58 @@
+// moment.js language configuration
+// language : japanese (ja)
+// author : LI Long : https://github.com/baryon
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('ja', {
+        months : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),
+        monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),
+        weekdays : "日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),
+        weekdaysShort : "日_月_火_水_木_金_土".split("_"),
+        weekdaysMin : "日_月_火_水_木_金_土".split("_"),
+        longDateFormat : {
+            LT : "Ah時m分",
+            L : "YYYY/MM/DD",
+            LL : "YYYY年M月D日",
+            LLL : "YYYY年M月D日LT",
+            LLLL : "YYYY年M月D日LT dddd"
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 12) {
+                return "午前";
+            } else {
+                return "午後";
+            }
+        },
+        calendar : {
+            sameDay : '[今日] LT',
+            nextDay : '[明日] LT',
+            nextWeek : '[来週]dddd LT',
+            lastDay : '[昨日] LT',
+            lastWeek : '[前週]dddd LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%s後",
+            past : "%s前",
+            s : "数秒",
+            m : "1分",
+            mm : "%d分",
+            h : "1時間",
+            hh : "%d時間",
+            d : "1日",
+            dd : "%d日",
+            M : "1ヶ月",
+            MM : "%dヶ月",
+            y : "1年",
+            yy : "%d年"
+        }
+    });
+}));
diff --git a/resources/moment/lang/ka.js b/resources/moment/lang/ka.js
new file mode 100644 (file)
index 0000000..0cebdaa
--- /dev/null
@@ -0,0 +1,108 @@
+// moment.js language configuration
+// language : Georgian (ka)
+// author : Irakli Janiashvili : https://github.com/irakli-janiashvili
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+
+    function monthsCaseReplace(m, format) {
+        var months = {
+            'nominative': 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
+            'accusative': 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
+        },
+
+        nounCase = (/D[oD] *MMMM?/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return months[nounCase][m.month()];
+    }
+
+    function weekdaysCaseReplace(m, format) {
+        var weekdays = {
+            'nominative': 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
+            'accusative': 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_')
+        },
+
+        nounCase = (/(წინა|შემდეგ)/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return weekdays[nounCase][m.day()];
+    }
+
+    return moment.lang('ka', {
+        months : monthsCaseReplace,
+        monthsShort : "იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),
+        weekdays : weekdaysCaseReplace,
+        weekdaysShort : "კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),
+        weekdaysMin : "კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),
+        longDateFormat : {
+            LT : "h:mm A",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd, D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay : '[დღეს] LT[-ზე]',
+            nextDay : '[ხვალ] LT[-ზე]',
+            lastDay : '[გუშინ] LT[-ზე]',
+            nextWeek : '[შემდეგ] dddd LT[-ზე]',
+            lastWeek : '[წინა] dddd LT-ზე',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : function (s) {
+                return (/(წამი|წუთი|საათი|წელი)/).test(s) ?
+                    s.replace(/ი$/, "ში") :
+                    s + "ში";
+            },
+            past : function (s) {
+                if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {
+                    return s.replace(/(ი|ე)$/, "ის წინ");
+                }
+                if ((/წელი/).test(s)) {
+                    return s.replace(/წელი$/, "წლის წინ");
+                }
+            },
+            s : "რამდენიმე წამი",
+            m : "წუთი",
+            mm : "%d წუთი",
+            h : "საათი",
+            hh : "%d საათი",
+            d : "დღე",
+            dd : "%d დღე",
+            M : "თვე",
+            MM : "%d თვე",
+            y : "წელი",
+            yy : "%d წელი"
+        },
+        ordinal : function (number) {
+            if (number === 0) {
+                return number;
+            }
+
+            if (number === 1) {
+                return number + "-ლი";
+            }
+
+            if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {
+                return "მე-" + number;
+            }
+
+            return number + "-ე";
+        },
+        week : {
+            dow : 1,
+            doy : 7
+        }
+    });
+}));
diff --git a/resources/moment/lang/ko.js b/resources/moment/lang/ko.js
new file mode 100644 (file)
index 0000000..3b469df
--- /dev/null
@@ -0,0 +1,63 @@
+// moment.js language configuration
+// language : korean (ko)
+//
+// authors 
+//
+// - Kyungwook, Park : https://github.com/kyungw00k
+// - Jeeeyul Lee <jeeeyul@gmail.com>
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('ko', {
+        months : "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),
+        monthsShort : "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),
+        weekdays : "일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),
+        weekdaysShort : "일_월_화_수_목_금_토".split("_"),
+        weekdaysMin : "일_월_화_수_목_금_토".split("_"),
+        longDateFormat : {
+            LT : "A h시 mm분",
+            L : "YYYY.MM.DD",
+            LL : "YYYY년 MMMM D일",
+            LLL : "YYYY년 MMMM D일 LT",
+            LLLL : "YYYY년 MMMM D일 dddd LT"
+        },
+        meridiem : function (hour, minute, isUpper) {
+            return hour < 12 ? '오전' : '오후';
+        },
+        calendar : {
+            sameDay : '오늘 LT',
+            nextDay : '내일 LT',
+            nextWeek : 'dddd LT',
+            lastDay : '어제 LT',
+            lastWeek : '지난주 dddd LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%s 후",
+            past : "%s 전",
+            s : "몇초",
+            ss : "%d초",
+            m : "일분",
+            mm : "%d분",
+            h : "한시간",
+            hh : "%d시간",
+            d : "하루",
+            dd : "%d일",
+            M : "한달",
+            MM : "%d달",
+            y : "일년",
+            yy : "%d년"
+        },
+        ordinal : '%d일',
+        meridiemParse : /(오전|오후)/,
+        isPM : function (token) {
+            return token === "오후";
+        }
+    });
+}));
diff --git a/resources/moment/lang/lb.js b/resources/moment/lang/lb.js
new file mode 100644 (file)
index 0000000..946ba13
--- /dev/null
@@ -0,0 +1,160 @@
+// moment.js language configuration
+// language : Luxembourgish (lb)
+// author : mweimerskirch : https://github.com/mweimerskirch
+
+// Note: Luxembourgish has a very particular phonological rule ("Eifeler Regel") that causes the
+// deletion of the final "n" in certain contexts. That's what the "eifelerRegelAppliesToWeekday"
+// and "eifelerRegelAppliesToNumber" methods are meant for
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function processRelativeTime(number, withoutSuffix, key, isFuture) {
+        var format = {
+            'm': ['eng Minutt', 'enger Minutt'],
+            'h': ['eng Stonn', 'enger Stonn'],
+            'd': ['een Dag', 'engem Dag'],
+            'dd': [number + ' Deeg', number + ' Deeg'],
+            'M': ['ee Mount', 'engem Mount'],
+            'MM': [number + ' Méint', number + ' Méint'],
+            'y': ['ee Joer', 'engem Joer'],
+            'yy': [number + ' Joer', number + ' Joer']
+        };
+        return withoutSuffix ? format[key][0] : format[key][1];
+    }
+
+    function processFutureTime(string) {
+        var number = string.substr(0, string.indexOf(' '));
+        if (eifelerRegelAppliesToNumber(number)) {
+            return "a " + string;
+        }
+        return "an " + string;
+    }
+
+    function processPastTime(string) {
+        var number = string.substr(0, string.indexOf(' '));
+        if (eifelerRegelAppliesToNumber(number)) {
+            return "viru " + string;
+        }
+        return "virun " + string;
+    }
+
+    function processLastWeek(string1) {
+        var weekday = this.format('d');
+        if (eifelerRegelAppliesToWeekday(weekday)) {
+            return '[Leschte] dddd [um] LT';
+        }
+        return '[Leschten] dddd [um] LT';
+    }
+
+    /**
+     * Returns true if the word before the given week day loses the "-n" ending.
+     * e.g. "Leschten Dënschdeg" but "Leschte Méindeg"
+     *
+     * @param weekday {integer}
+     * @returns {boolean}
+     */
+    function eifelerRegelAppliesToWeekday(weekday) {
+        weekday = parseInt(weekday, 10);
+        switch (weekday) {
+        case 0: // Sonndeg
+        case 1: // Méindeg
+        case 3: // Mëttwoch
+        case 5: // Freideg
+        case 6: // Samschdeg
+            return true;
+        default: // 2 Dënschdeg, 4 Donneschdeg
+            return false;
+        }
+    }
+
+    /**
+     * Returns true if the word before the given number loses the "-n" ending.
+     * e.g. "an 10 Deeg" but "a 5 Deeg"
+     *
+     * @param number {integer}
+     * @returns {boolean}
+     */
+    function eifelerRegelAppliesToNumber(number) {
+        number = parseInt(number, 10);
+        if (isNaN(number)) {
+            return false;
+        }
+        if (number < 0) {
+            // Negative Number --> always true
+            return true;
+        } else if (number < 10) {
+            // Only 1 digit
+            if (4 <= number && number <= 7) {
+                return true;
+            }
+            return false;
+        } else if (number < 100) {
+            // 2 digits
+            var lastDigit = number % 10, firstDigit = number / 10;
+            if (lastDigit === 0) {
+                return eifelerRegelAppliesToNumber(firstDigit);
+            }
+            return eifelerRegelAppliesToNumber(lastDigit);
+        } else if (number < 10000) {
+            // 3 or 4 digits --> recursively check first digit
+            while (number >= 10) {
+                number = number / 10;
+            }
+            return eifelerRegelAppliesToNumber(number);
+        } else {
+            // Anything larger than 4 digits: recursively check first n-3 digits
+            number = number / 1000;
+            return eifelerRegelAppliesToNumber(number);
+        }
+    }
+
+    return moment.lang('lb', {
+        months: "Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),
+        monthsShort: "Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),
+        weekdays: "Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),
+        weekdaysShort: "So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),
+        weekdaysMin: "So_Mé_Dë_Më_Do_Fr_Sa".split("_"),
+        longDateFormat: {
+            LT: "H:mm [Auer]",
+            L: "DD.MM.YYYY",
+            LL: "D. MMMM YYYY",
+            LLL: "D. MMMM YYYY LT",
+            LLLL: "dddd, D. MMMM YYYY LT"
+        },
+        calendar: {
+            sameDay: "[Haut um] LT",
+            sameElse: "L",
+            nextDay: '[Muer um] LT',
+            nextWeek: 'dddd [um] LT',
+            lastDay: '[Gëschter um] LT',
+            lastWeek: processLastWeek
+        },
+        relativeTime: {
+            future: processFutureTime,
+            past: processPastTime,
+            s: "e puer Sekonnen",
+            m: processRelativeTime,
+            mm: "%d Minutten",
+            h: processRelativeTime,
+            hh: "%d Stonnen",
+            d: processRelativeTime,
+            dd: processRelativeTime,
+            M: processRelativeTime,
+            MM: processRelativeTime,
+            y: processRelativeTime,
+            yy: processRelativeTime
+        },
+        ordinal: '%d.',
+        week: {
+            dow: 1, // Monday is the first day of the week.
+            doy: 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/lt.js b/resources/moment/lang/lt.js
new file mode 100644 (file)
index 0000000..1cf6457
--- /dev/null
@@ -0,0 +1,118 @@
+// moment.js language configuration
+// language : Lithuanian (lt)
+// author : Mindaugas Mozūras : https://github.com/mmozuras
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var units = {
+        "m" : "minutė_minutės_minutę",
+        "mm": "minutės_minučių_minutes",
+        "h" : "valanda_valandos_valandą",
+        "hh": "valandos_valandų_valandas",
+        "d" : "diena_dienos_dieną",
+        "dd": "dienos_dienų_dienas",
+        "M" : "mėnuo_mėnesio_mėnesį",
+        "MM": "mėnesiai_mėnesių_mėnesius",
+        "y" : "metai_metų_metus",
+        "yy": "metai_metų_metus"
+    },
+    weekDays = "pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis_sekmadienis".split("_");
+
+    function translateSeconds(number, withoutSuffix, key, isFuture) {
+        if (withoutSuffix) {
+            return "kelios sekundės";
+        } else {
+            return isFuture ? "kelių sekundžių" : "kelias sekundes";
+        }
+    }
+
+    function translateSingular(number, withoutSuffix, key, isFuture) {
+        return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);
+    }
+
+    function special(number) {
+        return number % 10 === 0 || (number > 10 && number < 20);
+    }
+
+    function forms(key) {
+        return units[key].split("_");
+    }
+
+    function translate(number, withoutSuffix, key, isFuture) {
+        var result = number + " ";
+        if (number === 1) {
+            return result + translateSingular(number, withoutSuffix, key[0], isFuture);
+        } else if (withoutSuffix) {
+            return result + (special(number) ? forms(key)[1] : forms(key)[0]);
+        } else {
+            if (isFuture) {
+                return result + forms(key)[1];
+            } else {
+                return result + (special(number) ? forms(key)[1] : forms(key)[2]);
+            }
+        }
+    }
+
+    function relativeWeekDay(moment, format) {
+        var nominative = format.indexOf('dddd LT') === -1,
+            weekDay = weekDays[moment.weekday()];
+
+        return nominative ? weekDay : weekDay.substring(0, weekDay.length - 2) + "į";
+    }
+
+    return moment.lang("lt", {
+        months : "sausio_vasario_kovo_balandžio_gegužės_biržėlio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),
+        monthsShort : "sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),
+        weekdays : relativeWeekDay,
+        weekdaysShort : "Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),
+        weekdaysMin : "S_P_A_T_K_Pn_Š".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "YYYY-MM-DD",
+            LL : "YYYY [m.] MMMM D [d.]",
+            LLL : "YYYY [m.] MMMM D [d.], LT [val.]",
+            LLLL : "YYYY [m.] MMMM D [d.], dddd, LT [val.]",
+            l : "YYYY-MM-DD",
+            ll : "YYYY [m.] MMMM D [d.]",
+            lll : "YYYY [m.] MMMM D [d.], LT [val.]",
+            llll : "YYYY [m.] MMMM D [d.], ddd, LT [val.]"
+        },
+        calendar : {
+            sameDay : "[Šiandien] LT",
+            nextDay : "[Rytoj] LT",
+            nextWeek : "dddd LT",
+            lastDay : "[Vakar] LT",
+            lastWeek : "[Praėjusį] dddd LT",
+            sameElse : "L"
+        },
+        relativeTime : {
+            future : "po %s",
+            past : "prieš %s",
+            s : translateSeconds,
+            m : translateSingular,
+            mm : translate,
+            h : translateSingular,
+            hh : translate,
+            d : translateSingular,
+            dd : translate,
+            M : translateSingular,
+            MM : translate,
+            y : translateSingular,
+            yy : translate
+        },
+        ordinal : function (number) {
+            return number + '-oji';
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/lv.js b/resources/moment/lang/lv.js
new file mode 100644 (file)
index 0000000..ffe25cf
--- /dev/null
@@ -0,0 +1,77 @@
+// moment.js language configuration
+// language : latvian (lv)
+// author : Kristaps Karlsons : https://github.com/skakri
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var units = {
+        'mm': 'minūti_minūtes_minūte_minūtes',
+        'hh': 'stundu_stundas_stunda_stundas',
+        'dd': 'dienu_dienas_diena_dienas',
+        'MM': 'mēnesi_mēnešus_mēnesis_mēneši',
+        'yy': 'gadu_gadus_gads_gadi'
+    };
+
+    function format(word, number, withoutSuffix) {
+        var forms = word.split('_');
+        if (withoutSuffix) {
+            return number % 10 === 1 && number !== 11 ? forms[2] : forms[3];
+        } else {
+            return number % 10 === 1 && number !== 11 ? forms[0] : forms[1];
+        }
+    }
+
+    function relativeTimeWithPlural(number, withoutSuffix, key) {
+        return number + ' ' + format(units[key], number, withoutSuffix);
+    }
+
+    return moment.lang('lv', {
+        months : "janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),
+        monthsShort : "jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),
+        weekdays : "svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),
+        weekdaysShort : "Sv_P_O_T_C_Pk_S".split("_"),
+        weekdaysMin : "Sv_P_O_T_C_Pk_S".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD.MM.YYYY",
+            LL : "YYYY. [gada] D. MMMM",
+            LLL : "YYYY. [gada] D. MMMM, LT",
+            LLLL : "YYYY. [gada] D. MMMM, dddd, LT"
+        },
+        calendar : {
+            sameDay : '[Šodien pulksten] LT',
+            nextDay : '[Rīt pulksten] LT',
+            nextWeek : 'dddd [pulksten] LT',
+            lastDay : '[Vakar pulksten] LT',
+            lastWeek : '[Pagājušā] dddd [pulksten] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%s vēlāk",
+            past : "%s agrāk",
+            s : "dažas sekundes",
+            m : "minūti",
+            mm : relativeTimeWithPlural,
+            h : "stundu",
+            hh : relativeTimeWithPlural,
+            d : "dienu",
+            dd : relativeTimeWithPlural,
+            M : "mēnesi",
+            MM : relativeTimeWithPlural,
+            y : "gadu",
+            yy : relativeTimeWithPlural
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/mk.js b/resources/moment/lang/mk.js
new file mode 100644 (file)
index 0000000..5f272fa
--- /dev/null
@@ -0,0 +1,86 @@
+// moment.js language configuration
+// language : macedonian (mk)
+// author : Borislav Mickov : https://github.com/B0k0
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('mk', {
+        months : "јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),
+        monthsShort : "јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),
+        weekdays : "недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),
+        weekdaysShort : "нед_пон_вто_сре_чет_пет_саб".split("_"),
+        weekdaysMin : "нe_пo_вт_ср_че_пе_сa".split("_"),
+        longDateFormat : {
+            LT : "H:mm",
+            L : "D.MM.YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd, D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay : '[Денес во] LT',
+            nextDay : '[Утре во] LT',
+            nextWeek : 'dddd [во] LT',
+            lastDay : '[Вчера во] LT',
+            lastWeek : function () {
+                switch (this.day()) {
+                case 0:
+                case 3:
+                case 6:
+                    return '[Во изминатата] dddd [во] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[Во изминатиот] dddd [во] LT';
+                }
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "после %s",
+            past : "пред %s",
+            s : "неколку секунди",
+            m : "минута",
+            mm : "%d минути",
+            h : "час",
+            hh : "%d часа",
+            d : "ден",
+            dd : "%d дена",
+            M : "месец",
+            MM : "%d месеци",
+            y : "година",
+            yy : "%d години"
+        },
+        ordinal : function (number) {
+            var lastDigit = number % 10,
+                last2Digits = number % 100;
+            if (number === 0) {
+                return number + '-ев';
+            } else if (last2Digits === 0) {
+                return number + '-ен';
+            } else if (last2Digits > 10 && last2Digits < 20) {
+                return number + '-ти';
+            } else if (lastDigit === 1) {
+                return number + '-ви';
+            } else if (lastDigit === 2) {
+                return number + '-ри';
+            } else if (lastDigit === 7 || lastDigit === 8) {
+                return number + '-ми';
+            } else {
+                return number + '-ти';
+            }
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/ml.js b/resources/moment/lang/ml.js
new file mode 100644 (file)
index 0000000..cc7db9a
--- /dev/null
@@ -0,0 +1,64 @@
+// moment.js language configuration
+// language : malayalam (ml)
+// author : Floyd Pink : https://github.com/floydpink
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('ml', {
+        months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split("_"),
+        monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split("_"),
+        weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split("_"),
+        weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split("_"),
+        weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split("_"),
+        longDateFormat : {
+            LT : "A h:mm -നു",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY, LT",
+            LLLL : "dddd, D MMMM YYYY, LT"
+        },
+        calendar : {
+            sameDay : '[ഇന്ന്] LT',
+            nextDay : '[നാളെ] LT',
+            nextWeek : 'dddd, LT',
+            lastDay : '[ഇന്നലെ] LT',
+            lastWeek : '[കഴിഞ്ഞ] dddd, LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%s കഴിഞ്ഞ്",
+            past : "%s മുൻപ്",
+            s : "അൽപ നിമിഷങ്ങൾ",
+            m : "ഒരു മിനിറ്റ്",
+            mm : "%d മിനിറ്റ്",
+            h : "ഒരു മണിക്കൂർ",
+            hh : "%d മണിക്കൂർ",
+            d : "ഒരു ദിവസം",
+            dd : "%d ദിവസം",
+            M : "ഒരു മാസം",
+            MM : "%d മാസം",
+            y : "ഒരു വർഷം",
+            yy : "%d വർഷം"
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 4) {
+                return "രാത്രി";
+            } else if (hour < 12) {
+                return "രാവിലെ";
+            } else if (hour < 17) {
+                return "ഉച്ച കഴിഞ്ഞ്";
+            } else if (hour < 20) {
+                return "വൈകുന്നേരം";
+            } else {
+                return "രാത്രി";
+            }
+        }
+    });
+}));
diff --git a/resources/moment/lang/mr.js b/resources/moment/lang/mr.js
new file mode 100644 (file)
index 0000000..0d1adfd
--- /dev/null
@@ -0,0 +1,104 @@
+// moment.js language configuration
+// language : Marathi (mr)
+// author : Harshad Kale : https://github.com/kalehv
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '१',
+        '2': '२',
+        '3': '३',
+        '4': '४',
+        '5': '५',
+        '6': '६',
+        '7': '७',
+        '8': '८',
+        '9': '९',
+        '0': '०'
+    },
+    numberMap = {
+        '१': '1',
+        '२': '2',
+        '३': '3',
+        '४': '4',
+        '५': '5',
+        '६': '6',
+        '७': '7',
+        '८': '8',
+        '९': '9',
+        '०': '0'
+    };
+
+    return moment.lang('mr', {
+        months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split("_"),
+        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split("_"),
+        weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split("_"),
+        weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split("_"),
+        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split("_"),
+        longDateFormat : {
+            LT : "A h:mm वाजता",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY, LT",
+            LLLL : "dddd, D MMMM YYYY, LT"
+        },
+        calendar : {
+            sameDay : '[आज] LT',
+            nextDay : '[उद्या] LT',
+            nextWeek : 'dddd, LT',
+            lastDay : '[काल] LT',
+            lastWeek: '[मागील] dddd, LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%s नंतर",
+            past : "%s पूर्वी",
+            s : "सेकंद",
+            m: "एक मिनिट",
+            mm: "%d मिनिटे",
+            h : "एक तास",
+            hh : "%d तास",
+            d : "एक दिवस",
+            dd : "%d दिवस",
+            M : "एक महिना",
+            MM : "%d महिने",
+            y : "एक वर्ष",
+            yy : "%d वर्षे"
+        },
+        preparse: function (string) {
+            return string.replace(/[१२३४५६७८९०]/g, function (match) {
+                return numberMap[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            });
+        },
+        meridiem: function (hour, minute, isLower)
+        {
+            if (hour < 4) {
+                return "रात्री";
+            } else if (hour < 10) {
+                return "सकाळी";
+            } else if (hour < 17) {
+                return "दुपारी";
+            } else if (hour < 20) {
+                return "सायंकाळी";
+            } else {
+                return "रात्री";
+            }
+        },
+        week : {
+            dow : 0, // Sunday is the first day of the week.
+            doy : 6  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/ms-my.js b/resources/moment/lang/ms-my.js
new file mode 100644 (file)
index 0000000..501d5aa
--- /dev/null
@@ -0,0 +1,66 @@
+// moment.js language configuration
+// language : Bahasa Malaysia (ms-MY)
+// author : Weldan Jamili : https://github.com/weldan
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('ms-my', {
+        months : "Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),
+        monthsShort : "Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),
+        weekdays : "Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),
+        weekdaysShort : "Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),
+        weekdaysMin : "Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),
+        longDateFormat : {
+            LT : "HH.mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY [pukul] LT",
+            LLLL : "dddd, D MMMM YYYY [pukul] LT"
+        },
+        meridiem : function (hours, minutes, isLower) {
+            if (hours < 11) {
+                return 'pagi';
+            } else if (hours < 15) {
+                return 'tengahari';
+            } else if (hours < 19) {
+                return 'petang';
+            } else {
+                return 'malam';
+            }
+        },
+        calendar : {
+            sameDay : '[Hari ini pukul] LT',
+            nextDay : '[Esok pukul] LT',
+            nextWeek : 'dddd [pukul] LT',
+            lastDay : '[Kelmarin pukul] LT',
+            lastWeek : 'dddd [lepas pukul] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "dalam %s",
+            past : "%s yang lepas",
+            s : "beberapa saat",
+            m : "seminit",
+            mm : "%d minit",
+            h : "sejam",
+            hh : "%d jam",
+            d : "sehari",
+            dd : "%d hari",
+            M : "sebulan",
+            MM : "%d bulan",
+            y : "setahun",
+            yy : "%d tahun"
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/nb.js b/resources/moment/lang/nb.js
new file mode 100644 (file)
index 0000000..2f652ef
--- /dev/null
@@ -0,0 +1,57 @@
+// moment.js language configuration
+// language : norwegian bokmål (nb)
+// authors : Espen Hovlandsdal : https://github.com/rexxars
+//           Sigurd Gartmann : https://github.com/sigurdga
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('nb', {
+        months : "januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),
+        monthsShort : "jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),
+        weekdays : "søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),
+        weekdaysShort : "sø._ma._ti._on._to._fr._lø.".split("_"),
+        weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"),
+        longDateFormat : {
+            LT : "H.mm",
+            L : "DD.MM.YYYY",
+            LL : "D. MMMM YYYY",
+            LLL : "D. MMMM YYYY [kl.] LT",
+            LLLL : "dddd D. MMMM YYYY [kl.] LT"
+        },
+        calendar : {
+            sameDay: '[i dag kl.] LT',
+            nextDay: '[i morgen kl.] LT',
+            nextWeek: 'dddd [kl.] LT',
+            lastDay: '[i går kl.] LT',
+            lastWeek: '[forrige] dddd [kl.] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "om %s",
+            past : "for %s siden",
+            s : "noen sekunder",
+            m : "ett minutt",
+            mm : "%d minutter",
+            h : "en time",
+            hh : "%d timer",
+            d : "en dag",
+            dd : "%d dager",
+            M : "en måned",
+            MM : "%d måneder",
+            y : "ett år",
+            yy : "%d år"
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/ne.js b/resources/moment/lang/ne.js
new file mode 100644 (file)
index 0000000..1d57b8c
--- /dev/null
@@ -0,0 +1,105 @@
+// moment.js language configuration
+// language : nepali/nepalese
+// author : suvash : https://github.com/suvash
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var symbolMap = {
+        '1': '१',
+        '2': '२',
+        '3': '३',
+        '4': '४',
+        '5': '५',
+        '6': '६',
+        '7': '७',
+        '8': '८',
+        '9': '९',
+        '0': '०'
+    },
+    numberMap = {
+        '१': '1',
+        '२': '2',
+        '३': '3',
+        '४': '4',
+        '५': '5',
+        '६': '6',
+        '७': '7',
+        '८': '8',
+        '९': '9',
+        '०': '0'
+    };
+
+    return moment.lang('ne', {
+        months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split("_"),
+        monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split("_"),
+        weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split("_"),
+        weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split("_"),
+        weekdaysMin : 'आइ._सो._मङ्_बु._बि._शु._श.'.split("_"),
+        longDateFormat : {
+            LT : "Aको h:mm बजे",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY, LT",
+            LLLL : "dddd, D MMMM YYYY, LT"
+        },
+        preparse: function (string) {
+            return string.replace(/[१२३४५६७८९०]/g, function (match) {
+                return numberMap[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            });
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 3) {
+                return "राती";
+            } else if (hour < 10) {
+                return "बिहान";
+            } else if (hour < 15) {
+                return "दिउँसो";
+            } else if (hour < 18) {
+                return "बेलुका";
+            } else if (hour < 20) {
+                return "साँझ";
+            } else {
+                return "राती";
+            }
+        },
+        calendar : {
+            sameDay : '[आज] LT',
+            nextDay : '[भोली] LT',
+            nextWeek : '[आउँदो] dddd[,] LT',
+            lastDay : '[हिजो] LT',
+            lastWeek : '[गएको] dddd[,] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%sमा",
+            past : "%s अगाडी",
+            s : "केही समय",
+            m : "एक मिनेट",
+            mm : "%d मिनेट",
+            h : "एक घण्टा",
+            hh : "%d घण्टा",
+            d : "एक दिन",
+            dd : "%d दिन",
+            M : "एक महिना",
+            MM : "%d महिना",
+            y : "एक बर्ष",
+            yy : "%d बर्ष"
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/nl.js b/resources/moment/lang/nl.js
new file mode 100644 (file)
index 0000000..ffd454f
--- /dev/null
@@ -0,0 +1,67 @@
+// moment.js language configuration
+// language : dutch (nl)
+// author : Joris Röling : https://github.com/jjupiter
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var monthsShortWithDots = "jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),
+        monthsShortWithoutDots = "jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_");
+
+    return moment.lang('nl', {
+        months : "januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),
+        monthsShort : function (m, format) {
+            if (/-MMM-/.test(format)) {
+                return monthsShortWithoutDots[m.month()];
+            } else {
+                return monthsShortWithDots[m.month()];
+            }
+        },
+        weekdays : "zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),
+        weekdaysShort : "zo._ma._di._wo._do._vr._za.".split("_"),
+        weekdaysMin : "Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD-MM-YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: '[vandaag om] LT',
+            nextDay: '[morgen om] LT',
+            nextWeek: 'dddd [om] LT',
+            lastDay: '[gisteren om] LT',
+            lastWeek: '[afgelopen] dddd [om] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "over %s",
+            past : "%s geleden",
+            s : "een paar seconden",
+            m : "één minuut",
+            mm : "%d minuten",
+            h : "één uur",
+            hh : "%d uur",
+            d : "één dag",
+            dd : "%d dagen",
+            M : "één maand",
+            MM : "%d maanden",
+            y : "één jaar",
+            yy : "%d jaar"
+        },
+        ordinal : function (number) {
+            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/nn.js b/resources/moment/lang/nn.js
new file mode 100644 (file)
index 0000000..f59c415
--- /dev/null
@@ -0,0 +1,56 @@
+// moment.js language configuration
+// language : norwegian nynorsk (nn)
+// author : https://github.com/mechuwind
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('nn', {
+        months : "januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),
+        monthsShort : "jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),
+        weekdays : "sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),
+        weekdaysShort : "sun_mån_tys_ons_tor_fre_lau".split("_"),
+        weekdaysMin : "su_må_ty_on_to_fr_lø".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD.MM.YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: '[I dag klokka] LT',
+            nextDay: '[I morgon klokka] LT',
+            nextWeek: 'dddd [klokka] LT',
+            lastDay: '[I går klokka] LT',
+            lastWeek: '[Føregående] dddd [klokka] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "om %s",
+            past : "for %s siden",
+            s : "noen sekund",
+            m : "ett minutt",
+            mm : "%d minutt",
+            h : "en time",
+            hh : "%d timar",
+            d : "en dag",
+            dd : "%d dagar",
+            M : "en månad",
+            MM : "%d månader",
+            y : "ett år",
+            yy : "%d år"
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/pl.js b/resources/moment/lang/pl.js
new file mode 100644 (file)
index 0000000..97770d2
--- /dev/null
@@ -0,0 +1,98 @@
+// moment.js language configuration
+// language : polish (pl)
+// author : Rafal Hirsz : https://github.com/evoL
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var monthsNominative = "styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),
+        monthsSubjective = "stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");
+
+    function plural(n) {
+        return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);
+    }
+
+    function translate(number, withoutSuffix, key) {
+        var result = number + " ";
+        switch (key) {
+        case 'm':
+            return withoutSuffix ? 'minuta' : 'minutę';
+        case 'mm':
+            return result + (plural(number) ? 'minuty' : 'minut');
+        case 'h':
+            return withoutSuffix  ? 'godzina'  : 'godzinę';
+        case 'hh':
+            return result + (plural(number) ? 'godziny' : 'godzin');
+        case 'MM':
+            return result + (plural(number) ? 'miesiące' : 'miesięcy');
+        case 'yy':
+            return result + (plural(number) ? 'lata' : 'lat');
+        }
+    }
+
+    return moment.lang('pl', {
+        months : function (momentToFormat, format) {
+            if (/D MMMM/.test(format)) {
+                return monthsSubjective[momentToFormat.month()];
+            } else {
+                return monthsNominative[momentToFormat.month()];
+            }
+        },
+        monthsShort : "sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),
+        weekdays : "niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),
+        weekdaysShort : "nie_pon_wt_śr_czw_pt_sb".split("_"),
+        weekdaysMin : "N_Pn_Wt_Śr_Cz_Pt_So".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD.MM.YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd, D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: '[Dziś o] LT',
+            nextDay: '[Jutro o] LT',
+            nextWeek: '[W] dddd [o] LT',
+            lastDay: '[Wczoraj o] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[W zeszłą niedzielę o] LT';
+                case 3:
+                    return '[W zeszłą środę o] LT';
+                case 6:
+                    return '[W zeszłą sobotę o] LT';
+                default:
+                    return '[W zeszły] dddd [o] LT';
+                }
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "za %s",
+            past : "%s temu",
+            s : "kilka sekund",
+            m : translate,
+            mm : translate,
+            h : translate,
+            hh : translate,
+            d : "1 dzień",
+            dd : '%d dni',
+            M : "miesiąc",
+            MM : translate,
+            y : "rok",
+            yy : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/pt-br.js b/resources/moment/lang/pt-br.js
new file mode 100644 (file)
index 0000000..5cac19b
--- /dev/null
@@ -0,0 +1,56 @@
+// moment.js language configuration
+// language : brazilian portuguese (pt-br)
+// author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('pt-br', {
+        months : "Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),
+        monthsShort : "Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),
+        weekdays : "Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),
+        weekdaysShort : "Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),
+        weekdaysMin : "Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D [de] MMMM [de] YYYY",
+            LLL : "D [de] MMMM [de] YYYY LT",
+            LLLL : "dddd, D [de] MMMM [de] YYYY LT"
+        },
+        calendar : {
+            sameDay: '[Hoje às] LT',
+            nextDay: '[Amanhã às] LT',
+            nextWeek: 'dddd [às] LT',
+            lastDay: '[Ontem às] LT',
+            lastWeek: function () {
+                return (this.day() === 0 || this.day() === 6) ?
+                    '[Último] dddd [às] LT' : // Saturday + Sunday
+                    '[Última] dddd [às] LT'; // Monday - Friday
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "em %s",
+            past : "%s atrás",
+            s : "segundos",
+            m : "um minuto",
+            mm : "%d minutos",
+            h : "uma hora",
+            hh : "%d horas",
+            d : "um dia",
+            dd : "%d dias",
+            M : "um mês",
+            MM : "%d meses",
+            y : "um ano",
+            yy : "%d anos"
+        },
+        ordinal : '%dº'
+    });
+}));
diff --git a/resources/moment/lang/pt.js b/resources/moment/lang/pt.js
new file mode 100644 (file)
index 0000000..7c1f2b5
--- /dev/null
@@ -0,0 +1,60 @@
+// moment.js language configuration
+// language : portuguese (pt)
+// author : Jefferson : https://github.com/jalex79
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('pt', {
+        months : "Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),
+        monthsShort : "Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),
+        weekdays : "Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),
+        weekdaysShort : "Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),
+        weekdaysMin : "Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D [de] MMMM [de] YYYY",
+            LLL : "D [de] MMMM [de] YYYY LT",
+            LLLL : "dddd, D [de] MMMM [de] YYYY LT"
+        },
+        calendar : {
+            sameDay: '[Hoje às] LT',
+            nextDay: '[Amanhã às] LT',
+            nextWeek: 'dddd [às] LT',
+            lastDay: '[Ontem às] LT',
+            lastWeek: function () {
+                return (this.day() === 0 || this.day() === 6) ?
+                    '[Último] dddd [às] LT' : // Saturday + Sunday
+                    '[Última] dddd [às] LT'; // Monday - Friday
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "em %s",
+            past : "%s atrás",
+            s : "segundos",
+            m : "um minuto",
+            mm : "%d minutos",
+            h : "uma hora",
+            hh : "%d horas",
+            d : "um dia",
+            dd : "%d dias",
+            M : "um mês",
+            MM : "%d meses",
+            y : "um ano",
+            yy : "%d anos"
+        },
+        ordinal : '%dº',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/ro.js b/resources/moment/lang/ro.js
new file mode 100644 (file)
index 0000000..77d7355
--- /dev/null
@@ -0,0 +1,72 @@
+// moment.js language configuration
+// language : romanian (ro)
+// author : Vlad Gurdiga : https://github.com/gurdiga
+// author : Valentin Agachi : https://github.com/avaly
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function relativeTimeWithPlural(number, withoutSuffix, key) {
+        var format = {
+            'mm': 'minute',
+            'hh': 'ore',
+            'dd': 'zile',
+            'MM': 'luni',
+            'yy': 'ani'
+        },
+            separator = ' ';
+        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
+            separator = ' de ';
+        }
+
+        return number + separator + format[key];
+    }
+
+    return moment.lang('ro', {
+        months : "ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),
+        monthsShort : "ian_feb_mar_apr_mai_iun_iul_aug_sep_oct_noi_dec".split("_"),
+        weekdays : "duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),
+        weekdaysShort : "Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),
+        weekdaysMin : "Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),
+        longDateFormat : {
+            LT : "H:mm",
+            L : "DD.MM.YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY H:mm",
+            LLLL : "dddd, D MMMM YYYY H:mm"
+        },
+        calendar : {
+            sameDay: "[azi la] LT",
+            nextDay: '[mâine la] LT',
+            nextWeek: 'dddd [la] LT',
+            lastDay: '[ieri la] LT',
+            lastWeek: '[fosta] dddd [la] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "peste %s",
+            past : "%s în urmă",
+            s : "câteva secunde",
+            m : "un minut",
+            mm : relativeTimeWithPlural,
+            h : "o oră",
+            hh : relativeTimeWithPlural,
+            d : "o zi",
+            dd : relativeTimeWithPlural,
+            M : "o lună",
+            MM : relativeTimeWithPlural,
+            y : "un an",
+            yy : relativeTimeWithPlural
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/rs.js b/resources/moment/lang/rs.js
new file mode 100644 (file)
index 0000000..8627553
--- /dev/null
@@ -0,0 +1,139 @@
+// moment.js language configuration
+// language : serbian (rs)
+// author : Limon Monte : https://github.com/limonte
+// based on (bs) translation by Nedim Cholich
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+
+    function translate(number, withoutSuffix, key) {
+        var result = number + " ";
+        switch (key) {
+        case 'm':
+            return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+        case 'mm':
+            if (number === 1) {
+                result += 'minuta';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'minute';
+            } else {
+                result += 'minuta';
+            }
+            return result;
+        case 'h':
+            return withoutSuffix ? 'jedan sat' : 'jednog sata';
+        case 'hh':
+            if (number === 1) {
+                result += 'sat';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'sata';
+            } else {
+                result += 'sati';
+            }
+            return result;
+        case 'dd':
+            if (number === 1) {
+                result += 'dan';
+            } else {
+                result += 'dana';
+            }
+            return result;
+        case 'MM':
+            if (number === 1) {
+                result += 'mesec';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'meseca';
+            } else {
+                result += 'meseci';
+            }
+            return result;
+        case 'yy':
+            if (number === 1) {
+                result += 'godina';
+            } else if (number === 2 || number === 3 || number === 4) {
+                result += 'godine';
+            } else {
+                result += 'godina';
+            }
+            return result;
+        }
+    }
+
+    return moment.lang('rs', {
+        months : "januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),
+        monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),
+        weekdays : "nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),
+        weekdaysShort : "ned._pon._uto._sre._čet._pet._sub.".split("_"),
+        weekdaysMin : "ne_po_ut_sr_če_pe_su".split("_"),
+        longDateFormat : {
+            LT : "H:mm",
+            L : "DD. MM. YYYY",
+            LL : "D. MMMM YYYY",
+            LLL : "D. MMMM YYYY LT",
+            LLLL : "dddd, D. MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay  : '[danas u] LT',
+            nextDay  : '[sutra u] LT',
+
+            nextWeek : function () {
+                switch (this.day()) {
+                case 0:
+                    return '[u] [nedelju] [u] LT';
+                case 3:
+                    return '[u] [sredu] [u] LT';
+                case 6:
+                    return '[u] [subotu] [u] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[u] dddd [u] LT';
+                }
+            },
+            lastDay  : '[juče u] LT',
+            lastWeek : function () {
+                switch (this.day()) {
+                case 0:
+                case 3:
+                    return '[prošlu] dddd [u] LT';
+                case 6:
+                    return '[prošle] [subote] [u] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[prošli] dddd [u] LT';
+                }
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "za %s",
+            past   : "pre %s",
+            s      : "par sekundi",
+            m      : translate,
+            mm     : translate,
+            h      : translate,
+            hh     : translate,
+            d      : "dan",
+            dd     : translate,
+            M      : "mesec",
+            MM     : translate,
+            y      : "godinu",
+            yy     : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/ru.js b/resources/moment/lang/ru.js
new file mode 100644 (file)
index 0000000..1d1816c
--- /dev/null
@@ -0,0 +1,163 @@
+// moment.js language configuration
+// language : russian (ru)
+// author : Viktorminator : https://github.com/Viktorminator
+// Author : Menelion Elensúle : https://github.com/Oire
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function plural(word, num) {
+        var forms = word.split('_');
+        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+    }
+
+    function relativeTimeWithPlural(number, withoutSuffix, key) {
+        var format = {
+            'mm': 'минута_минуты_минут',
+            'hh': 'час_часа_часов',
+            'dd': 'день_дня_дней',
+            'MM': 'месяц_месяца_месяцев',
+            'yy': 'год_года_лет'
+        };
+        if (key === 'm') {
+            return withoutSuffix ? 'минута' : 'минуту';
+        }
+        else {
+            return number + ' ' + plural(format[key], +number);
+        }
+    }
+
+    function monthsCaseReplace(m, format) {
+        var months = {
+            'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
+            'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_')
+        },
+
+        nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return months[nounCase][m.month()];
+    }
+
+    function monthsShortCaseReplace(m, format) {
+        var monthsShort = {
+            'nominative': 'янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
+            'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_')
+        },
+
+        nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return monthsShort[nounCase][m.month()];
+    }
+
+    function weekdaysCaseReplace(m, format) {
+        var weekdays = {
+            'nominative': 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
+            'accusative': 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_')
+        },
+
+        nounCase = (/\[ ?[Вв] ?(?:прошлую|следующую)? ?\] ?dddd/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return weekdays[nounCase][m.day()];
+    }
+
+    return moment.lang('ru', {
+        months : monthsCaseReplace,
+        monthsShort : monthsShortCaseReplace,
+        weekdays : weekdaysCaseReplace,
+        weekdaysShort : "вс_пн_вт_ср_чт_пт_сб".split("_"),
+        weekdaysMin : "вс_пн_вт_ср_чт_пт_сб".split("_"),
+        monthsParse : [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[й|я]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i],
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD.MM.YYYY",
+            LL : "D MMMM YYYY г.",
+            LLL : "D MMMM YYYY г., LT",
+            LLLL : "dddd, D MMMM YYYY г., LT"
+        },
+        calendar : {
+            sameDay: '[Сегодня в] LT',
+            nextDay: '[Завтра в] LT',
+            lastDay: '[Вчера в] LT',
+            nextWeek: function () {
+                return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT';
+            },
+            lastWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[В прошлое] dddd [в] LT';
+                case 1:
+                case 2:
+                case 4:
+                    return '[В прошлый] dddd [в] LT';
+                case 3:
+                case 5:
+                case 6:
+                    return '[В прошлую] dddd [в] LT';
+                }
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "через %s",
+            past : "%s назад",
+            s : "несколько секунд",
+            m : relativeTimeWithPlural,
+            mm : relativeTimeWithPlural,
+            h : "час",
+            hh : relativeTimeWithPlural,
+            d : "день",
+            dd : relativeTimeWithPlural,
+            M : "месяц",
+            MM : relativeTimeWithPlural,
+            y : "год",
+            yy : relativeTimeWithPlural
+        },
+
+        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
+
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 4) {
+                return "ночи";
+            } else if (hour < 12) {
+                return "утра";
+            } else if (hour < 17) {
+                return "дня";
+            } else {
+                return "вечера";
+            }
+        },
+
+        ordinal: function (number, period) {
+            switch (period) {
+            case 'M':
+            case 'd':
+            case 'DDD':
+                return number + '-й';
+            case 'D':
+                return number + '-го';
+            case 'w':
+            case 'W':
+                return number + '-я';
+            default:
+                return number;
+            }
+        },
+
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/sk.js b/resources/moment/lang/sk.js
new file mode 100644 (file)
index 0000000..ed8a41d
--- /dev/null
@@ -0,0 +1,156 @@
+// moment.js language configuration
+// language : slovak (sk)
+// author : Martin Minka : https://github.com/k2s
+// based on work of petrbela : https://github.com/petrbela
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    var months = "január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),
+        monthsShort = "jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");
+
+    function plural(n) {
+        return (n > 1) && (n < 5);
+    }
+
+    function translate(number, withoutSuffix, key, isFuture) {
+        var result = number + " ";
+        switch (key) {
+        case 's':  // a few seconds / in a few seconds / a few seconds ago
+            return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
+        case 'm':  // a minute / in a minute / a minute ago
+            return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
+        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'minúty' : 'minút');
+            } else {
+                return result + 'minútami';
+            }
+            break;
+        case 'h':  // an hour / in an hour / an hour ago
+            return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+        case 'hh': // 9 hours / in 9 hours / 9 hours ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'hodiny' : 'hodín');
+            } else {
+                return result + 'hodinami';
+            }
+            break;
+        case 'd':  // a day / in a day / a day ago
+            return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
+        case 'dd': // 9 days / in 9 days / 9 days ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'dni' : 'dní');
+            } else {
+                return result + 'dňami';
+            }
+            break;
+        case 'M':  // a month / in a month / a month ago
+            return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
+        case 'MM': // 9 months / in 9 months / 9 months ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'mesiace' : 'mesiacov');
+            } else {
+                return result + 'mesiacmi';
+            }
+            break;
+        case 'y':  // a year / in a year / a year ago
+            return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
+        case 'yy': // 9 years / in 9 years / 9 years ago
+            if (withoutSuffix || isFuture) {
+                return result + (plural(number) ? 'roky' : 'rokov');
+            } else {
+                return result + 'rokmi';
+            }
+            break;
+        }
+    }
+
+    return moment.lang('sk', {
+        months : months,
+        monthsShort : monthsShort,
+        monthsParse : (function (months, monthsShort) {
+            var i, _monthsParse = [];
+            for (i = 0; i < 12; i++) {
+                // use custom parser to solve problem with July (červenec)
+                _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
+            }
+            return _monthsParse;
+        }(months, monthsShort)),
+        weekdays : "nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),
+        weekdaysShort : "ne_po_ut_st_št_pi_so".split("_"),
+        weekdaysMin : "ne_po_ut_st_št_pi_so".split("_"),
+        longDateFormat : {
+            LT: "H:mm",
+            L : "DD.MM.YYYY",
+            LL : "D. MMMM YYYY",
+            LLL : "D. MMMM YYYY LT",
+            LLLL : "dddd D. MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: "[dnes o] LT",
+            nextDay: '[zajtra o] LT',
+            nextWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[v nedeľu o] LT';
+                case 1:
+                case 2:
+                    return '[v] dddd [o] LT';
+                case 3:
+                    return '[v stredu o] LT';
+                case 4:
+                    return '[vo štvrtok o] LT';
+                case 5:
+                    return '[v piatok o] LT';
+                case 6:
+                    return '[v sobotu o] LT';
+                }
+            },
+            lastDay: '[včera o] LT',
+            lastWeek: function () {
+                switch (this.day()) {
+                case 0:
+                    return '[minulú nedeľu o] LT';
+                case 1:
+                case 2:
+                    return '[minulý] dddd [o] LT';
+                case 3:
+                    return '[minulú stredu o] LT';
+                case 4:
+                case 5:
+                    return '[minulý] dddd [o] LT';
+                case 6:
+                    return '[minulú sobotu o] LT';
+                }
+            },
+            sameElse: "L"
+        },
+        relativeTime : {
+            future : "za %s",
+            past : "pred %s",
+            s : translate,
+            m : translate,
+            mm : translate,
+            h : translate,
+            hh : translate,
+            d : translate,
+            dd : translate,
+            M : translate,
+            MM : translate,
+            y : translate,
+            yy : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/sl.js b/resources/moment/lang/sl.js
new file mode 100644 (file)
index 0000000..d260f80
--- /dev/null
@@ -0,0 +1,144 @@
+// moment.js language configuration
+// language : slovenian (sl)
+// author : Robert Sedovšek : https://github.com/sedovsek
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function translate(number, withoutSuffix, key) {
+        var result = number + " ";
+        switch (key) {
+        case 'm':
+            return withoutSuffix ? 'ena minuta' : 'eno minuto';
+        case 'mm':
+            if (number === 1) {
+                result += 'minuta';
+            } else if (number === 2) {
+                result += 'minuti';
+            } else if (number === 3 || number === 4) {
+                result += 'minute';
+            } else {
+                result += 'minut';
+            }
+            return result;
+        case 'h':
+            return withoutSuffix ? 'ena ura' : 'eno uro';
+        case 'hh':
+            if (number === 1) {
+                result += 'ura';
+            } else if (number === 2) {
+                result += 'uri';
+            } else if (number === 3 || number === 4) {
+                result += 'ure';
+            } else {
+                result += 'ur';
+            }
+            return result;
+        case 'dd':
+            if (number === 1) {
+                result += 'dan';
+            } else {
+                result += 'dni';
+            }
+            return result;
+        case 'MM':
+            if (number === 1) {
+                result += 'mesec';
+            } else if (number === 2) {
+                result += 'meseca';
+            } else if (number === 3 || number === 4) {
+                result += 'mesece';
+            } else {
+                result += 'mesecev';
+            }
+            return result;
+        case 'yy':
+            if (number === 1) {
+                result += 'leto';
+            } else if (number === 2) {
+                result += 'leti';
+            } else if (number === 3 || number === 4) {
+                result += 'leta';
+            } else {
+                result += 'let';
+            }
+            return result;
+        }
+    }
+
+    return moment.lang('sl', {
+        months : "januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),
+        monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),
+        weekdays : "nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),
+        weekdaysShort : "ned._pon._tor._sre._čet._pet._sob.".split("_"),
+        weekdaysMin : "ne_po_to_sr_če_pe_so".split("_"),
+        longDateFormat : {
+            LT : "H:mm",
+            L : "DD. MM. YYYY",
+            LL : "D. MMMM YYYY",
+            LLL : "D. MMMM YYYY LT",
+            LLLL : "dddd, D. MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay  : '[danes ob] LT',
+            nextDay  : '[jutri ob] LT',
+
+            nextWeek : function () {
+                switch (this.day()) {
+                case 0:
+                    return '[v] [nedeljo] [ob] LT';
+                case 3:
+                    return '[v] [sredo] [ob] LT';
+                case 6:
+                    return '[v] [soboto] [ob] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[v] dddd [ob] LT';
+                }
+            },
+            lastDay  : '[včeraj ob] LT',
+            lastWeek : function () {
+                switch (this.day()) {
+                case 0:
+                case 3:
+                case 6:
+                    return '[prejšnja] dddd [ob] LT';
+                case 1:
+                case 2:
+                case 4:
+                case 5:
+                    return '[prejšnji] dddd [ob] LT';
+                }
+            },
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "čez %s",
+            past   : "%s nazaj",
+            s      : "nekaj sekund",
+            m      : translate,
+            mm     : translate,
+            h      : translate,
+            hh     : translate,
+            d      : "en dan",
+            dd     : translate,
+            M      : "en mesec",
+            MM     : translate,
+            y      : "eno leto",
+            yy     : translate
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/sq.js b/resources/moment/lang/sq.js
new file mode 100644 (file)
index 0000000..a5e44b5
--- /dev/null
@@ -0,0 +1,57 @@
+// moment.js language configuration
+// language : Albanian (sq)
+// author : Flakërim Ismani : https://github.com/flakerimi
+// author: Menelion Elensúle: https://github.com/Oire (tests)
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('sq', {
+        months : "Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),
+        monthsShort : "Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),
+        weekdays : "E Diel_E Hënë_E Marte_E Mërkure_E Enjte_E Premte_E Shtunë".split("_"),
+        weekdaysShort : "Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),
+        weekdaysMin : "D_H_Ma_Më_E_P_Sh".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd, D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay : '[Sot në] LT',
+            nextDay : '[Neser në] LT',
+            nextWeek : 'dddd [në] LT',
+            lastDay : '[Dje në] LT',
+            lastWeek : 'dddd [e kaluar në] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "në %s",
+            past : "%s me parë",
+            s : "disa sekonda",
+            m : "një minut",
+            mm : "%d minuta",
+            h : "një orë",
+            hh : "%d orë",
+            d : "një ditë",
+            dd : "%d ditë",
+            M : "një muaj",
+            MM : "%d muaj",
+            y : "një vit",
+            yy : "%d vite"
+        },
+        ordinal : '%d.',
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/sv.js b/resources/moment/lang/sv.js
new file mode 100644 (file)
index 0000000..0de8c40
--- /dev/null
@@ -0,0 +1,63 @@
+// moment.js language configuration
+// language : swedish (sv)
+// author : Jens Alm : https://github.com/ulmus
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('sv', {
+        months : "januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),
+        monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),
+        weekdays : "söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),
+        weekdaysShort : "sön_mån_tis_ons_tor_fre_lör".split("_"),
+        weekdaysMin : "sö_må_ti_on_to_fr_lö".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "YYYY-MM-DD",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: '[Idag] LT',
+            nextDay: '[Imorgon] LT',
+            lastDay: '[Igår] LT',
+            nextWeek: 'dddd LT',
+            lastWeek: '[Förra] dddd[en] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "om %s",
+            past : "för %s sedan",
+            s : "några sekunder",
+            m : "en minut",
+            mm : "%d minuter",
+            h : "en timme",
+            hh : "%d timmar",
+            d : "en dag",
+            dd : "%d dagar",
+            M : "en månad",
+            MM : "%d månader",
+            y : "ett år",
+            yy : "%d år"
+        },
+        ordinal : function (number) {
+            var b = number % 10,
+                output = (~~ (number % 100 / 10) === 1) ? 'e' :
+                (b === 1) ? 'a' :
+                (b === 2) ? 'a' :
+                (b === 3) ? 'e' : 'e';
+            return number + output;
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/ta.js b/resources/moment/lang/ta.js
new file mode 100644 (file)
index 0000000..cc742c9
--- /dev/null
@@ -0,0 +1,112 @@
+// moment.js language configuration
+// language : tamil (ta)
+// author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    /*var symbolMap = {
+            '1': '௧',
+            '2': '௨',
+            '3': '௩',
+            '4': '௪',
+            '5': '௫',
+            '6': '௬',
+            '7': '௭',
+            '8': '௮',
+            '9': '௯',
+            '0': '௦'
+        },
+        numberMap = {
+            '௧': '1',
+            '௨': '2',
+            '௩': '3',
+            '௪': '4',
+            '௫': '5',
+            '௬': '6',
+            '௭': '7',
+            '௮': '8',
+            '௯': '9',
+            '௦': '0'
+        }; */
+
+    return moment.lang('ta', {
+        months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split("_"),
+        monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split("_"),
+        weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split("_"),
+        weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split("_"),
+        weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY, LT",
+            LLLL : "dddd, D MMMM YYYY, LT"
+        },
+        calendar : {
+            sameDay : '[இன்று] LT',
+            nextDay : '[நாளை] LT',
+            nextWeek : 'dddd, LT',
+            lastDay : '[நேற்று] LT',
+            lastWeek : '[கடந்த வாரம்] dddd, LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%s இல்",
+            past : "%s முன்",
+            s : "ஒரு சில விநாடிகள்",
+            m : "ஒரு நிமிடம்",
+            mm : "%d நிமிடங்கள்",
+            h : "ஒரு மணி நேரம்",
+            hh : "%d மணி நேரம்",
+            d : "ஒரு நாள்",
+            dd : "%d நாட்கள்",
+            M : "ஒரு மாதம்",
+            MM : "%d மாதங்கள்",
+            y : "ஒரு வருடம்",
+            yy : "%d ஆண்டுகள்"
+        },
+/*        preparse: function (string) {
+            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
+                return numberMap[match];
+            });
+        },
+        postformat: function (string) {
+            return string.replace(/\d/g, function (match) {
+                return symbolMap[match];
+            });
+        },*/
+        ordinal : function (number) {
+            return number + 'வது';
+        },
+
+
+// refer http://ta.wikipedia.org/s/1er1      
+
+        meridiem : function (hour, minute, isLower) {
+            if (hour >= 6 && hour <= 10) {
+                return " காலை";
+            } else   if (hour >= 10 && hour <= 14) {
+                return " நண்பகல்";
+            } else    if (hour >= 14 && hour <= 18) {
+                return " எற்பாடு";
+            } else   if (hour >= 18 && hour <= 20) {
+                return " மாலை";
+            } else  if (hour >= 20 && hour <= 24) {
+                return " இரவு";
+            } else  if (hour >= 0 && hour <= 6) {
+                return " வைகறை";
+            }
+        },
+        week : {
+            dow : 0, // Sunday is the first day of the week.
+            doy : 6  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/th.js b/resources/moment/lang/th.js
new file mode 100644 (file)
index 0000000..70336c8
--- /dev/null
@@ -0,0 +1,58 @@
+// moment.js language configuration
+// language : thai (th)
+// author : Kridsada Thanabulpong : https://github.com/sirn
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('th', {
+        months : "มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),
+        monthsShort : "มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"),
+        weekdays : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),
+        weekdaysShort : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"), // yes, three characters difference
+        weekdaysMin : "อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),
+        longDateFormat : {
+            LT : "H นาฬิกา m นาที",
+            L : "YYYY/MM/DD",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY เวลา LT",
+            LLLL : "วันddddที่ D MMMM YYYY เวลา LT"
+        },
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 12) {
+                return "ก่อนเที่ยง";
+            } else {
+                return "หลังเที่ยง";
+            }
+        },
+        calendar : {
+            sameDay : '[วันนี้ เวลา] LT',
+            nextDay : '[พรุ่งนี้ เวลา] LT',
+            nextWeek : 'dddd[หน้า เวลา] LT',
+            lastDay : '[เมื่อวานนี้ เวลา] LT',
+            lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "อีก %s",
+            past : "%sที่แล้ว",
+            s : "ไม่กี่วินาที",
+            m : "1 นาที",
+            mm : "%d นาที",
+            h : "1 ชั่วโมง",
+            hh : "%d ชั่วโมง",
+            d : "1 วัน",
+            dd : "%d วัน",
+            M : "1 เดือน",
+            MM : "%d เดือน",
+            y : "1 ปี",
+            yy : "%d ปี"
+        }
+    });
+}));
diff --git a/resources/moment/lang/tl-ph.js b/resources/moment/lang/tl-ph.js
new file mode 100644 (file)
index 0000000..8044483
--- /dev/null
@@ -0,0 +1,58 @@
+// moment.js language configuration
+// language : Tagalog/Filipino (tl-ph)
+// author : Dan Hagman
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('tl-ph', {
+        months : "Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),
+        monthsShort : "Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),
+        weekdays : "Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),
+        weekdaysShort : "Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),
+        weekdaysMin : "Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "MM/D/YYYY",
+            LL : "MMMM D, YYYY",
+            LLL : "MMMM D, YYYY LT",
+            LLLL : "dddd, MMMM DD, YYYY LT"
+        },
+        calendar : {
+            sameDay: "[Ngayon sa] LT",
+            nextDay: '[Bukas sa] LT',
+            nextWeek: 'dddd [sa] LT',
+            lastDay: '[Kahapon sa] LT',
+            lastWeek: 'dddd [huling linggo] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "sa loob ng %s",
+            past : "%s ang nakalipas",
+            s : "ilang segundo",
+            m : "isang minuto",
+            mm : "%d minuto",
+            h : "isang oras",
+            hh : "%d oras",
+            d : "isang araw",
+            dd : "%d araw",
+            M : "isang buwan",
+            MM : "%d buwan",
+            y : "isang taon",
+            yy : "%d taon"
+        },
+        ordinal : function (number) {
+            return number;
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/tr.js b/resources/moment/lang/tr.js
new file mode 100644 (file)
index 0000000..e90f250
--- /dev/null
@@ -0,0 +1,93 @@
+// moment.js language configuration
+// language : turkish (tr)
+// authors : Erhan Gundogan : https://github.com/erhangundogan,
+//           Burak Yiğit Kaya: https://github.com/BYK
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+
+    var suffixes = {
+        1: "'inci",
+        5: "'inci",
+        8: "'inci",
+        70: "'inci",
+        80: "'inci",
+
+        2: "'nci",
+        7: "'nci",
+        20: "'nci",
+        50: "'nci",
+
+        3: "'üncü",
+        4: "'üncü",
+        100: "'üncü",
+
+        6: "'ncı",
+
+        9: "'uncu",
+        10: "'uncu",
+        30: "'uncu",
+
+        60: "'ıncı",
+        90: "'ıncı"
+    };
+
+    return moment.lang('tr', {
+        months : "Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),
+        monthsShort : "Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),
+        weekdays : "Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),
+        weekdaysShort : "Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),
+        weekdaysMin : "Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD.MM.YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd, D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay : '[bugün saat] LT',
+            nextDay : '[yarın saat] LT',
+            nextWeek : '[haftaya] dddd [saat] LT',
+            lastDay : '[dün] LT',
+            lastWeek : '[geçen hafta] dddd [saat] LT',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "%s sonra",
+            past : "%s önce",
+            s : "birkaç saniye",
+            m : "bir dakika",
+            mm : "%d dakika",
+            h : "bir saat",
+            hh : "%d saat",
+            d : "bir gün",
+            dd : "%d gün",
+            M : "bir ay",
+            MM : "%d ay",
+            y : "bir yıl",
+            yy : "%d yıl"
+        },
+        ordinal : function (number) {
+            if (number === 0) {  // special case for zero
+                return number + "'ıncı";
+            }
+            var a = number % 10,
+                b = number % 100 - a,
+                c = number >= 100 ? 100 : null;
+
+            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/tzm-la.js b/resources/moment/lang/tzm-la.js
new file mode 100644 (file)
index 0000000..be1d878
--- /dev/null
@@ -0,0 +1,55 @@
+// moment.js language configuration
+// language : Morocco Central Atlas Tamaziɣt in Latin (tzm-la)
+// author : Abdel Said : https://github.com/abdelsaid
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('tzm-la', {
+        months : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),
+        monthsShort : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),
+        weekdays : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),
+        weekdaysShort : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),
+        weekdaysMin : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: "[asdkh g] LT",
+            nextDay: '[aska g] LT',
+            nextWeek: 'dddd [g] LT',
+            lastDay: '[assant g] LT',
+            lastWeek: 'dddd [g] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "dadkh s yan %s",
+            past : "yan %s",
+            s : "imik",
+            m : "minuḍ",
+            mm : "%d minuḍ",
+            h : "saɛa",
+            hh : "%d tassaɛin",
+            d : "ass",
+            dd : "%d ossan",
+            M : "ayowr",
+            MM : "%d iyyirn",
+            y : "asgas",
+            yy : "%d isgasn"
+        },
+        week : {
+            dow : 6, // Saturday is the first day of the week.
+            doy : 12  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/tzm.js b/resources/moment/lang/tzm.js
new file mode 100644 (file)
index 0000000..c7c76bd
--- /dev/null
@@ -0,0 +1,55 @@
+// moment.js language configuration
+// language : Morocco Central Atlas Tamaziɣt (tzm)
+// author : Abdel Said : https://github.com/abdelsaid
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('tzm', {
+        months : "ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),
+        monthsShort : "ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),
+        weekdays : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),
+        weekdaysShort : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),
+        weekdaysMin : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "dddd D MMMM YYYY LT"
+        },
+        calendar : {
+            sameDay: "[ⴰⵙⴷⵅ ⴴ] LT",
+            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
+            nextWeek: 'dddd [ⴴ] LT',
+            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
+            lastWeek: 'dddd [ⴴ] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",
+            past : "ⵢⴰⵏ %s",
+            s : "ⵉⵎⵉⴽ",
+            m : "ⵎⵉⵏⵓⴺ",
+            mm : "%d ⵎⵉⵏⵓⴺ",
+            h : "ⵙⴰⵄⴰ",
+            hh : "%d ⵜⴰⵙⵙⴰⵄⵉⵏ",
+            d : "ⴰⵙⵙ",
+            dd : "%d oⵙⵙⴰⵏ",
+            M : "ⴰⵢoⵓⵔ",
+            MM : "%d ⵉⵢⵢⵉⵔⵏ",
+            y : "ⴰⵙⴳⴰⵙ",
+            yy : "%d ⵉⵙⴳⴰⵙⵏ"
+        },
+        week : {
+            dow : 6, // Saturday is the first day of the week.
+            doy : 12  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/uk.js b/resources/moment/lang/uk.js
new file mode 100644 (file)
index 0000000..47056cb
--- /dev/null
@@ -0,0 +1,157 @@
+// moment.js language configuration
+// language : ukrainian (uk)
+// author : zemlanin : https://github.com/zemlanin
+// Author : Menelion Elensúle : https://github.com/Oire
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    function plural(word, num) {
+        var forms = word.split('_');
+        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+    }
+
+    function relativeTimeWithPlural(number, withoutSuffix, key) {
+        var format = {
+            'mm': 'хвилина_хвилини_хвилин',
+            'hh': 'година_години_годин',
+            'dd': 'день_дні_днів',
+            'MM': 'місяць_місяці_місяців',
+            'yy': 'рік_роки_років'
+        };
+        if (key === 'm') {
+            return withoutSuffix ? 'хвилина' : 'хвилину';
+        }
+        else if (key === 'h') {
+            return withoutSuffix ? 'година' : 'годину';
+        }
+        else {
+            return number + ' ' + plural(format[key], +number);
+        }
+    }
+
+    function monthsCaseReplace(m, format) {
+        var months = {
+            'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'),
+            'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_')
+        },
+
+        nounCase = (/D[oD]? *MMMM?/).test(format) ?
+            'accusative' :
+            'nominative';
+
+        return months[nounCase][m.month()];
+    }
+
+    function weekdaysCaseReplace(m, format) {
+        var weekdays = {
+            'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
+            'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),
+            'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')
+        },
+
+        nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ?
+            'accusative' :
+            ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ?
+                'genitive' :
+                'nominative');
+
+        return weekdays[nounCase][m.day()];
+    }
+
+    function processHoursFunction(str) {
+        return function () {
+            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
+        };
+    }
+
+    return moment.lang('uk', {
+        months : monthsCaseReplace,
+        monthsShort : "січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),
+        weekdays : weekdaysCaseReplace,
+        weekdaysShort : "нд_пн_вт_ср_чт_пт_сб".split("_"),
+        weekdaysMin : "нд_пн_вт_ср_чт_пт_сб".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD.MM.YYYY",
+            LL : "D MMMM YYYY р.",
+            LLL : "D MMMM YYYY р., LT",
+            LLLL : "dddd, D MMMM YYYY р., LT"
+        },
+        calendar : {
+            sameDay: processHoursFunction('[Сьогодні '),
+            nextDay: processHoursFunction('[Завтра '),
+            lastDay: processHoursFunction('[Вчора '),
+            nextWeek: processHoursFunction('[У] dddd ['),
+            lastWeek: function () {
+                switch (this.day()) {
+                case 0:
+                case 3:
+                case 5:
+                case 6:
+                    return processHoursFunction('[Минулої] dddd [').call(this);
+                case 1:
+                case 2:
+                case 4:
+                    return processHoursFunction('[Минулого] dddd [').call(this);
+                }
+            },
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "за %s",
+            past : "%s тому",
+            s : "декілька секунд",
+            m : relativeTimeWithPlural,
+            mm : relativeTimeWithPlural,
+            h : "годину",
+            hh : relativeTimeWithPlural,
+            d : "день",
+            dd : relativeTimeWithPlural,
+            M : "місяць",
+            MM : relativeTimeWithPlural,
+            y : "рік",
+            yy : relativeTimeWithPlural
+        },
+
+        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
+
+        meridiem : function (hour, minute, isLower) {
+            if (hour < 4) {
+                return "ночі";
+            } else if (hour < 12) {
+                return "ранку";
+            } else if (hour < 17) {
+                return "дня";
+            } else {
+                return "вечора";
+            }
+        },
+
+        ordinal: function (number, period) {
+            switch (period) {
+            case 'M':
+            case 'd':
+            case 'DDD':
+            case 'w':
+            case 'W':
+                return number + '-й';
+            case 'D':
+                return number + '-го';
+            default:
+                return number;
+            }
+        },
+
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 1st is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/uz.js b/resources/moment/lang/uz.js
new file mode 100644 (file)
index 0000000..a5b06fa
--- /dev/null
@@ -0,0 +1,55 @@
+// moment.js language configuration
+// language : uzbek
+// author : Sardor Muminov : https://github.com/muminoff
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('uz', {
+        months : "январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),
+        monthsShort : "янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),
+        weekdays : "Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),
+        weekdaysShort : "Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),
+        weekdaysMin : "Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM YYYY",
+            LLL : "D MMMM YYYY LT",
+            LLLL : "D MMMM YYYY, dddd LT"
+        },
+        calendar : {
+            sameDay : '[Бугун соат] LT [да]',
+            nextDay : '[Эртага] LT [да]',
+            nextWeek : 'dddd [куни соат] LT [да]',
+            lastDay : '[Кеча соат] LT [да]',
+            lastWeek : '[Утган] dddd [куни соат] LT [да]',
+            sameElse : 'L'
+        },
+        relativeTime : {
+            future : "Якин %s ичида",
+            past : "Бир неча %s олдин",
+            s : "фурсат",
+            m : "бир дакика",
+            mm : "%d дакика",
+            h : "бир соат",
+            hh : "%d соат",
+            d : "бир кун",
+            dd : "%d кун",
+            M : "бир ой",
+            MM : "%d ой",
+            y : "бир йил",
+            yy : "%d йил"
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 7  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/vn.js b/resources/moment/lang/vn.js
new file mode 100644 (file)
index 0000000..f28e7c3
--- /dev/null
@@ -0,0 +1,62 @@
+// moment.js language configuration
+// language : vietnamese (vn)
+// author : Bang Nguyen : https://github.com/bangnk
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('vn', {
+        months : "tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),
+        monthsShort : "Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),
+        weekdays : "chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),
+        weekdaysShort : "CN_T2_T3_T4_T5_T6_T7".split("_"),
+        weekdaysMin : "CN_T2_T3_T4_T5_T6_T7".split("_"),
+        longDateFormat : {
+            LT : "HH:mm",
+            L : "DD/MM/YYYY",
+            LL : "D MMMM [năm] YYYY",
+            LLL : "D MMMM [năm] YYYY LT",
+            LLLL : "dddd, D MMMM [năm] YYYY LT",
+            l : "DD/M/YYYY",
+            ll : "D MMM YYYY",
+            lll : "D MMM YYYY LT",
+            llll : "ddd, D MMM YYYY LT"
+        },
+        calendar : {
+            sameDay: "[Hôm nay lúc] LT",
+            nextDay: '[Ngày mai lúc] LT',
+            nextWeek: 'dddd [tuần tới lúc] LT',
+            lastDay: '[Hôm qua lúc] LT',
+            lastWeek: 'dddd [tuần rồi lúc] LT',
+            sameElse: 'L'
+        },
+        relativeTime : {
+            future : "%s tới",
+            past : "%s trước",
+            s : "vài giây",
+            m : "một phút",
+            mm : "%d phút",
+            h : "một giờ",
+            hh : "%d giờ",
+            d : "một ngày",
+            dd : "%d ngày",
+            M : "một tháng",
+            MM : "%d tháng",
+            y : "một năm",
+            yy : "%d năm"
+        },
+        ordinal : function (number) {
+            return number;
+        },
+        week : {
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/zh-cn.js b/resources/moment/lang/zh-cn.js
new file mode 100644 (file)
index 0000000..50a3ed9
--- /dev/null
@@ -0,0 +1,108 @@
+// moment.js language configuration
+// language : chinese
+// author : suupic : https://github.com/suupic
+// author : Zeno Zeng : https://github.com/zenozeng
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('zh-cn', {
+        months : "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),
+        monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),
+        weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),
+        weekdaysShort : "周日_周一_周二_周三_周四_周五_周六".split("_"),
+        weekdaysMin : "日_一_二_三_四_五_六".split("_"),
+        longDateFormat : {
+            LT : "Ah点mm",
+            L : "YYYY-MM-DD",
+            LL : "YYYY年MMMD日",
+            LLL : "YYYY年MMMD日LT",
+            LLLL : "YYYY年MMMD日ddddLT",
+            l : "YYYY-MM-DD",
+            ll : "YYYY年MMMD日",
+            lll : "YYYY年MMMD日LT",
+            llll : "YYYY年MMMD日ddddLT"
+        },
+        meridiem : function (hour, minute, isLower) {
+            var hm = hour * 100 + minute;
+            if (hm < 600) {
+                return "凌晨";
+            } else if (hm < 900) {
+                return "早上";
+            } else if (hm < 1130) {
+                return "上午";
+            } else if (hm < 1230) {
+                return "中午";
+            } else if (hm < 1800) {
+                return "下午";
+            } else {
+                return "晚上";
+            }
+        },
+        calendar : {
+            sameDay : function () {
+                return this.minutes() === 0 ? "[今天]Ah[点整]" : "[今天]LT";
+            },
+            nextDay : function () {
+                return this.minutes() === 0 ? "[明天]Ah[点整]" : "[明天]LT";
+            },
+            lastDay : function () {
+                return this.minutes() === 0 ? "[昨天]Ah[点整]" : "[昨天]LT";
+            },
+            nextWeek : function () {
+                var startOfWeek, prefix;
+                startOfWeek = moment().startOf('week');
+                prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]';
+                return this.minutes() === 0 ? prefix + "dddAh点整" : prefix + "dddAh点mm";
+            },
+            lastWeek : function () {
+                var startOfWeek, prefix;
+                startOfWeek = moment().startOf('week');
+                prefix = this.unix() < startOfWeek.unix()  ? '[上]' : '[本]';
+                return this.minutes() === 0 ? prefix + "dddAh点整" : prefix + "dddAh点mm";
+            },
+            sameElse : 'LL'
+        },
+        ordinal : function (number, period) {
+            switch (period) {
+            case "d":
+            case "D":
+            case "DDD":
+                return number + "日";
+            case "M":
+                return number + "月";
+            case "w":
+            case "W":
+                return number + "周";
+            default:
+                return number;
+            }
+        },
+        relativeTime : {
+            future : "%s内",
+            past : "%s前",
+            s : "几秒",
+            m : "1分钟",
+            mm : "%d分钟",
+            h : "1小时",
+            hh : "%d小时",
+            d : "1天",
+            dd : "%d天",
+            M : "1个月",
+            MM : "%d个月",
+            y : "1年",
+            yy : "%d年"
+        },
+        week : {
+            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+            dow : 1, // Monday is the first day of the week.
+            doy : 4  // The week that contains Jan 4th is the first week of the year.
+        }
+    });
+}));
diff --git a/resources/moment/lang/zh-tw.js b/resources/moment/lang/zh-tw.js
new file mode 100644 (file)
index 0000000..bbb0737
--- /dev/null
@@ -0,0 +1,84 @@
+// moment.js language configuration
+// language : traditional chinese (zh-tw)
+// author : Ben : https://github.com/ben-lin
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['moment'], factory); // AMD
+    } else if (typeof exports === 'object') {
+        module.exports = factory(require('../moment')); // Node
+    } else {
+        factory(window.moment); // Browser global
+    }
+}(function (moment) {
+    return moment.lang('zh-tw', {
+        months : "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),
+        monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),
+        weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),
+        weekdaysShort : "週日_週一_週二_週三_週四_週五_週六".split("_"),
+        weekdaysMin : "日_一_二_三_四_五_六".split("_"),
+        longDateFormat : {
+            LT : "Ah點mm",
+            L : "YYYY年MMMD日",
+            LL : "YYYY年MMMD日",
+            LLL : "YYYY年MMMD日LT",
+            LLLL : "YYYY年MMMD日ddddLT",
+            l : "YYYY年MMMD日",
+            ll : "YYYY年MMMD日",
+            lll : "YYYY年MMMD日LT",
+            llll : "YYYY年MMMD日ddddLT"
+        },
+        meridiem : function (hour, minute, isLower) {
+            var hm = hour * 100 + minute;
+            if (hm < 900) {
+                return "早上";
+            } else if (hm < 1130) {
+                return "上午";
+            } else if (hm < 1230) {
+                return "中午";
+            } else if (hm < 1800) {
+                return "下午";
+            } else {
+                return "晚上";
+            }
+        },
+        calendar : {
+            sameDay : '[今天]LT',
+            nextDay : '[明天]LT',
+            nextWeek : '[下]ddddLT',
+            lastDay : '[昨天]LT',
+            lastWeek : '[上]ddddLT',
+            sameElse : 'L'
+        },
+        ordinal : function (number, period) {
+            switch (period) {
+            case "d" :
+            case "D" :
+            case "DDD" :
+                return number + "日";
+            case "M" :
+                return number + "月";
+            case "w" :
+            case "W" :
+                return number + "週";
+            default :
+                return number;
+            }
+        },
+        relativeTime : {
+            future : "%s內",
+            past : "%s前",
+            s : "幾秒",
+            m : "一分鐘",
+            mm : "%d分鐘",
+            h : "一小時",
+            hh : "%d小時",
+            d : "一天",
+            dd : "%d天",
+            M : "一個月",
+            MM : "%d個月",
+            y : "一年",
+            yy : "%d年"
+        }
+    });
+}));
diff --git a/resources/moment/moment.js b/resources/moment/moment.js
new file mode 100644 (file)
index 0000000..b79da7f
--- /dev/null
@@ -0,0 +1,2400 @@
+//! moment.js
+//! version : 2.5.1
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
+
+(function (undefined) {
+
+    /************************************
+        Constants
+    ************************************/
+
+    var moment,
+        VERSION = "2.5.1",
+        global = this,
+        round = Math.round,
+        i,
+
+        YEAR = 0,
+        MONTH = 1,
+        DATE = 2,
+        HOUR = 3,
+        MINUTE = 4,
+        SECOND = 5,
+        MILLISECOND = 6,
+
+        // internal storage for language config files
+        languages = {},
+
+        // moment internal properties
+        momentProperties = {
+            _isAMomentObject: null,
+            _i : null,
+            _f : null,
+            _l : null,
+            _strict : null,
+            _isUTC : null,
+            _offset : null,  // optional. Combine with _isUTC
+            _pf : null,
+            _lang : null  // optional
+        },
+
+        // check for nodeJS
+        hasModule = (typeof module !== 'undefined' && module.exports && typeof require !== 'undefined'),
+
+        // ASP.NET json date format regex
+        aspNetJsonRegex = /^\/?Date\((\-?\d+)/i,
+        aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,
+
+        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
+        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
+        isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,
+
+        // format tokens
+        formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g,
+        localFormattingTokens = /(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,
+
+        // parsing token regexes
+        parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99
+        parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999
+        parseTokenOneToFourDigits = /\d{1,4}/, // 0 - 9999
+        parseTokenOneToSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999
+        parseTokenDigits = /\d+/, // nonzero number of digits
+        parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic.
+        parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
+        parseTokenT = /T/i, // T (ISO separator)
+        parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
+
+        //strict parsing regexes
+        parseTokenOneDigit = /\d/, // 0 - 9
+        parseTokenTwoDigits = /\d\d/, // 00 - 99
+        parseTokenThreeDigits = /\d{3}/, // 000 - 999
+        parseTokenFourDigits = /\d{4}/, // 0000 - 9999
+        parseTokenSixDigits = /[+-]?\d{6}/, // -999,999 - 999,999
+        parseTokenSignedNumber = /[+-]?\d+/, // -inf - inf
+
+        // iso 8601 regex
+        // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+        isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
+
+        isoFormat = 'YYYY-MM-DDTHH:mm:ssZ',
+
+        isoDates = [
+            ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/],
+            ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/],
+            ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/],
+            ['GGGG-[W]WW', /\d{4}-W\d{2}/],
+            ['YYYY-DDD', /\d{4}-\d{3}/]
+        ],
+
+        // iso time formats and regexes
+        isoTimes = [
+            ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d{1,3}/],
+            ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/],
+            ['HH:mm', /(T| )\d\d:\d\d/],
+            ['HH', /(T| )\d\d/]
+        ],
+
+        // timezone chunker "+10:00" > ["10", "00"] or "-1530" > ["-15", "30"]
+        parseTimezoneChunker = /([\+\-]|\d\d)/gi,
+
+        // getter and setter names
+        proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'),
+        unitMillisecondFactors = {
+            'Milliseconds' : 1,
+            'Seconds' : 1e3,
+            'Minutes' : 6e4,
+            'Hours' : 36e5,
+            'Days' : 864e5,
+            'Months' : 2592e6,
+            'Years' : 31536e6
+        },
+
+        unitAliases = {
+            ms : 'millisecond',
+            s : 'second',
+            m : 'minute',
+            h : 'hour',
+            d : 'day',
+            D : 'date',
+            w : 'week',
+            W : 'isoWeek',
+            M : 'month',
+            y : 'year',
+            DDD : 'dayOfYear',
+            e : 'weekday',
+            E : 'isoWeekday',
+            gg: 'weekYear',
+            GG: 'isoWeekYear'
+        },
+
+        camelFunctions = {
+            dayofyear : 'dayOfYear',
+            isoweekday : 'isoWeekday',
+            isoweek : 'isoWeek',
+            weekyear : 'weekYear',
+            isoweekyear : 'isoWeekYear'
+        },
+
+        // format function strings
+        formatFunctions = {},
+
+        // tokens to ordinalize and pad
+        ordinalizeTokens = 'DDD w W M D d'.split(' '),
+        paddedTokens = 'M D H h m s w W'.split(' '),
+
+        formatTokenFunctions = {
+            M    : function () {
+                return this.month() + 1;
+            },
+            MMM  : function (format) {
+                return this.lang().monthsShort(this, format);
+            },
+            MMMM : function (format) {
+                return this.lang().months(this, format);
+            },
+            D    : function () {
+                return this.date();
+            },
+            DDD  : function () {
+                return this.dayOfYear();
+            },
+            d    : function () {
+                return this.day();
+            },
+            dd   : function (format) {
+                return this.lang().weekdaysMin(this, format);
+            },
+            ddd  : function (format) {
+                return this.lang().weekdaysShort(this, format);
+            },
+            dddd : function (format) {
+                return this.lang().weekdays(this, format);
+            },
+            w    : function () {
+                return this.week();
+            },
+            W    : function () {
+                return this.isoWeek();
+            },
+            YY   : function () {
+                return leftZeroFill(this.year() % 100, 2);
+            },
+            YYYY : function () {
+                return leftZeroFill(this.year(), 4);
+            },
+            YYYYY : function () {
+                return leftZeroFill(this.year(), 5);
+            },
+            YYYYYY : function () {
+                var y = this.year(), sign = y >= 0 ? '+' : '-';
+                return sign + leftZeroFill(Math.abs(y), 6);
+            },
+            gg   : function () {
+                return leftZeroFill(this.weekYear() % 100, 2);
+            },
+            gggg : function () {
+                return leftZeroFill(this.weekYear(), 4);
+            },
+            ggggg : function () {
+                return leftZeroFill(this.weekYear(), 5);
+            },
+            GG   : function () {
+                return leftZeroFill(this.isoWeekYear() % 100, 2);
+            },
+            GGGG : function () {
+                return leftZeroFill(this.isoWeekYear(), 4);
+            },
+            GGGGG : function () {
+                return leftZeroFill(this.isoWeekYear(), 5);
+            },
+            e : function () {
+                return this.weekday();
+            },
+            E : function () {
+                return this.isoWeekday();
+            },
+            a    : function () {
+                return this.lang().meridiem(this.hours(), this.minutes(), true);
+            },
+            A    : function () {
+                return this.lang().meridiem(this.hours(), this.minutes(), false);
+            },
+            H    : function () {
+                return this.hours();
+            },
+            h    : function () {
+                return this.hours() % 12 || 12;
+            },
+            m    : function () {
+                return this.minutes();
+            },
+            s    : function () {
+                return this.seconds();
+            },
+            S    : function () {
+                return toInt(this.milliseconds() / 100);
+            },
+            SS   : function () {
+                return leftZeroFill(toInt(this.milliseconds() / 10), 2);
+            },
+            SSS  : function () {
+                return leftZeroFill(this.milliseconds(), 3);
+            },
+            SSSS : function () {
+                return leftZeroFill(this.milliseconds(), 3);
+            },
+            Z    : function () {
+                var a = -this.zone(),
+                    b = "+";
+                if (a < 0) {
+                    a = -a;
+                    b = "-";
+                }
+                return b + leftZeroFill(toInt(a / 60), 2) + ":" + leftZeroFill(toInt(a) % 60, 2);
+            },
+            ZZ   : function () {
+                var a = -this.zone(),
+                    b = "+";
+                if (a < 0) {
+                    a = -a;
+                    b = "-";
+                }
+                return b + leftZeroFill(toInt(a / 60), 2) + leftZeroFill(toInt(a) % 60, 2);
+            },
+            z : function () {
+                return this.zoneAbbr();
+            },
+            zz : function () {
+                return this.zoneName();
+            },
+            X    : function () {
+                return this.unix();
+            },
+            Q : function () {
+                return this.quarter();
+            }
+        },
+
+        lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin'];
+
+    function defaultParsingFlags() {
+        // We need to deep clone this object, and es5 standard is not very
+        // helpful.
+        return {
+            empty : false,
+            unusedTokens : [],
+            unusedInput : [],
+            overflow : -2,
+            charsLeftOver : 0,
+            nullInput : false,
+            invalidMonth : null,
+            invalidFormat : false,
+            userInvalidated : false,
+            iso: false
+        };
+    }
+
+    function padToken(func, count) {
+        return function (a) {
+            return leftZeroFill(func.call(this, a), count);
+        };
+    }
+    function ordinalizeToken(func, period) {
+        return function (a) {
+            return this.lang().ordinal(func.call(this, a), period);
+        };
+    }
+
+    while (ordinalizeTokens.length) {
+        i = ordinalizeTokens.pop();
+        formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i);
+    }
+    while (paddedTokens.length) {
+        i = paddedTokens.pop();
+        formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2);
+    }
+    formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3);
+
+
+    /************************************
+        Constructors
+    ************************************/
+
+    function Language() {
+
+    }
+
+    // Moment prototype object
+    function Moment(config) {
+        checkOverflow(config);
+        extend(this, config);
+    }
+
+    // Duration Constructor
+    function Duration(duration) {
+        var normalizedInput = normalizeObjectUnits(duration),
+            years = normalizedInput.year || 0,
+            months = normalizedInput.month || 0,
+            weeks = normalizedInput.week || 0,
+            days = normalizedInput.day || 0,
+            hours = normalizedInput.hour || 0,
+            minutes = normalizedInput.minute || 0,
+            seconds = normalizedInput.second || 0,
+            milliseconds = normalizedInput.millisecond || 0;
+
+        // representation for dateAddRemove
+        this._milliseconds = +milliseconds +
+            seconds * 1e3 + // 1000
+            minutes * 6e4 + // 1000 * 60
+            hours * 36e5; // 1000 * 60 * 60
+        // Because of dateAddRemove treats 24 hours as different from a
+        // day when working around DST, we need to store them separately
+        this._days = +days +
+            weeks * 7;
+        // It is impossible translate months into days without knowing
+        // which months you are are talking about, so we have to store
+        // it separately.
+        this._months = +months +
+            years * 12;
+
+        this._data = {};
+
+        this._bubble();
+    }
+
+    /************************************
+        Helpers
+    ************************************/
+
+
+    function extend(a, b) {
+        for (var i in b) {
+            if (b.hasOwnProperty(i)) {
+                a[i] = b[i];
+            }
+        }
+
+        if (b.hasOwnProperty("toString")) {
+            a.toString = b.toString;
+        }
+
+        if (b.hasOwnProperty("valueOf")) {
+            a.valueOf = b.valueOf;
+        }
+
+        return a;
+    }
+
+    function cloneMoment(m) {
+        var result = {}, i;
+        for (i in m) {
+            if (m.hasOwnProperty(i) && momentProperties.hasOwnProperty(i)) {
+                result[i] = m[i];
+            }
+        }
+
+        return result;
+    }
+
+    function absRound(number) {
+        if (number < 0) {
+            return Math.ceil(number);
+        } else {
+            return Math.floor(number);
+        }
+    }
+
+    // left zero fill a number
+    // see http://jsperf.com/left-zero-filling for performance comparison
+    function leftZeroFill(number, targetLength, forceSign) {
+        var output = '' + Math.abs(number),
+            sign = number >= 0;
+
+        while (output.length < targetLength) {
+            output = '0' + output;
+        }
+        return (sign ? (forceSign ? '+' : '') : '-') + output;
+    }
+
+    // helper function for _.addTime and _.subtractTime
+    function addOrSubtractDurationFromMoment(mom, duration, isAdding, ignoreUpdateOffset) {
+        var milliseconds = duration._milliseconds,
+            days = duration._days,
+            months = duration._months,
+            minutes,
+            hours;
+
+        if (milliseconds) {
+            mom._d.setTime(+mom._d + milliseconds * isAdding);
+        }
+        // store the minutes and hours so we can restore them
+        if (days || months) {
+            minutes = mom.minute();
+            hours = mom.hour();
+        }
+        if (days) {
+            mom.date(mom.date() + days * isAdding);
+        }
+        if (months) {
+            mom.month(mom.month() + months * isAdding);
+        }
+        if (milliseconds && !ignoreUpdateOffset) {
+            moment.updateOffset(mom);
+        }
+        // restore the minutes and hours after possibly changing dst
+        if (days || months) {
+            mom.minute(minutes);
+            mom.hour(hours);
+        }
+    }
+
+    // check if is an array
+    function isArray(input) {
+        return Object.prototype.toString.call(input) === '[object Array]';
+    }
+
+    function isDate(input) {
+        return  Object.prototype.toString.call(input) === '[object Date]' ||
+                input instanceof Date;
+    }
+
+    // compare two arrays, return the number of differences
+    function compareArrays(array1, array2, dontConvert) {
+        var len = Math.min(array1.length, array2.length),
+            lengthDiff = Math.abs(array1.length - array2.length),
+            diffs = 0,
+            i;
+        for (i = 0; i < len; i++) {
+            if ((dontConvert && array1[i] !== array2[i]) ||
+                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
+                diffs++;
+            }
+        }
+        return diffs + lengthDiff;
+    }
+
+    function normalizeUnits(units) {
+        if (units) {
+            var lowered = units.toLowerCase().replace(/(.)s$/, '$1');
+            units = unitAliases[units] || camelFunctions[lowered] || lowered;
+        }
+        return units;
+    }
+
+    function normalizeObjectUnits(inputObject) {
+        var normalizedInput = {},
+            normalizedProp,
+            prop;
+
+        for (prop in inputObject) {
+            if (inputObject.hasOwnProperty(prop)) {
+                normalizedProp = normalizeUnits(prop);
+                if (normalizedProp) {
+                    normalizedInput[normalizedProp] = inputObject[prop];
+                }
+            }
+        }
+
+        return normalizedInput;
+    }
+
+    function makeList(field) {
+        var count, setter;
+
+        if (field.indexOf('week') === 0) {
+            count = 7;
+            setter = 'day';
+        }
+        else if (field.indexOf('month') === 0) {
+            count = 12;
+            setter = 'month';
+        }
+        else {
+            return;
+        }
+
+        moment[field] = function (format, index) {
+            var i, getter,
+                method = moment.fn._lang[field],
+                results = [];
+
+            if (typeof format === 'number') {
+                index = format;
+                format = undefined;
+            }
+
+            getter = function (i) {
+                var m = moment().utc().set(setter, i);
+                return method.call(moment.fn._lang, m, format || '');
+            };
+
+            if (index != null) {
+                return getter(index);
+            }
+            else {
+                for (i = 0; i < count; i++) {
+                    results.push(getter(i));
+                }
+                return results;
+            }
+        };
+    }
+
+    function toInt(argumentForCoercion) {
+        var coercedNumber = +argumentForCoercion,
+            value = 0;
+
+        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
+            if (coercedNumber >= 0) {
+                value = Math.floor(coercedNumber);
+            } else {
+                value = Math.ceil(coercedNumber);
+            }
+        }
+
+        return value;
+    }
+
+    function daysInMonth(year, month) {
+        return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
+    }
+
+    function daysInYear(year) {
+        return isLeapYear(year) ? 366 : 365;
+    }
+
+    function isLeapYear(year) {
+        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+    }
+
+    function checkOverflow(m) {
+        var overflow;
+        if (m._a && m._pf.overflow === -2) {
+            overflow =
+                m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH :
+                m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE :
+                m._a[HOUR] < 0 || m._a[HOUR] > 23 ? HOUR :
+                m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE :
+                m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND :
+                m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND :
+                -1;
+
+            if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
+                overflow = DATE;
+            }
+
+            m._pf.overflow = overflow;
+        }
+    }
+
+    function isValid(m) {
+        if (m._isValid == null) {
+            m._isValid = !isNaN(m._d.getTime()) &&
+                m._pf.overflow < 0 &&
+                !m._pf.empty &&
+                !m._pf.invalidMonth &&
+                !m._pf.nullInput &&
+                !m._pf.invalidFormat &&
+                !m._pf.userInvalidated;
+
+            if (m._strict) {
+                m._isValid = m._isValid &&
+                    m._pf.charsLeftOver === 0 &&
+                    m._pf.unusedTokens.length === 0;
+            }
+        }
+        return m._isValid;
+    }
+
+    function normalizeLanguage(key) {
+        return key ? key.toLowerCase().replace('_', '-') : key;
+    }
+
+    // Return a moment from input, that is local/utc/zone equivalent to model.
+    function makeAs(input, model) {
+        return model._isUTC ? moment(input).zone(model._offset || 0) :
+            moment(input).local();
+    }
+
+    /************************************
+        Languages
+    ************************************/
+
+
+    extend(Language.prototype, {
+
+        set : function (config) {
+            var prop, i;
+            for (i in config) {
+                prop = config[i];
+                if (typeof prop === 'function') {
+                    this[i] = prop;
+                } else {
+                    this['_' + i] = prop;
+                }
+            }
+        },
+
+        _months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
+        months : function (m) {
+            return this._months[m.month()];
+        },
+
+        _monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
+        monthsShort : function (m) {
+            return this._monthsShort[m.month()];
+        },
+
+        monthsParse : function (monthName) {
+            var i, mom, regex;
+
+            if (!this._monthsParse) {
+                this._monthsParse = [];
+            }
+
+            for (i = 0; i < 12; i++) {
+                // make the regex if we don't have it already
+                if (!this._monthsParse[i]) {
+                    mom = moment.utc([2000, i]);
+                    regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
+                    this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
+                }
+                // test the regex
+                if (this._monthsParse[i].test(monthName)) {
+                    return i;
+                }
+            }
+        },
+
+        _weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
+        weekdays : function (m) {
+            return this._weekdays[m.day()];
+        },
+
+        _weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
+        weekdaysShort : function (m) {
+            return this._weekdaysShort[m.day()];
+        },
+
+        _weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
+        weekdaysMin : function (m) {
+            return this._weekdaysMin[m.day()];
+        },
+
+        weekdaysParse : function (weekdayName) {
+            var i, mom, regex;
+
+            if (!this._weekdaysParse) {
+                this._weekdaysParse = [];
+            }
+
+            for (i = 0; i < 7; i++) {
+                // make the regex if we don't have it already
+                if (!this._weekdaysParse[i]) {
+                    mom = moment([2000, 1]).day(i);
+                    regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
+                    this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+                }
+                // test the regex
+                if (this._weekdaysParse[i].test(weekdayName)) {
+                    return i;
+                }
+            }
+        },
+
+        _longDateFormat : {
+            LT : "h:mm A",
+            L : "MM/DD/YYYY",
+            LL : "MMMM D YYYY",
+            LLL : "MMMM D YYYY LT",
+            LLLL : "dddd, MMMM D YYYY LT"
+        },
+        longDateFormat : function (key) {
+            var output = this._longDateFormat[key];
+            if (!output && this._longDateFormat[key.toUpperCase()]) {
+                output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) {
+                    return val.slice(1);
+                });
+                this._longDateFormat[key] = output;
+            }
+            return output;
+        },
+
+        isPM : function (input) {
+            // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+            // Using charAt should be more compatible.
+            return ((input + '').toLowerCase().charAt(0) === 'p');
+        },
+
+        _meridiemParse : /[ap]\.?m?\.?/i,
+        meridiem : function (hours, minutes, isLower) {
+            if (hours > 11) {
+                return isLower ? 'pm' : 'PM';
+            } else {
+                return isLower ? 'am' : 'AM';
+            }
+        },
+
+        _calendar : {
+            sameDay : '[Today at] LT',
+            nextDay : '[Tomorrow at] LT',
+            nextWeek : 'dddd [at] LT',
+            lastDay : '[Yesterday at] LT',
+            lastWeek : '[Last] dddd [at] LT',
+            sameElse : 'L'
+        },
+        calendar : function (key, mom) {
+            var output = this._calendar[key];
+            return typeof output === 'function' ? output.apply(mom) : output;
+        },
+
+        _relativeTime : {
+            future : "in %s",
+            past : "%s ago",
+            s : "a few seconds",
+            m : "a minute",
+            mm : "%d minutes",
+            h : "an hour",
+            hh : "%d hours",
+            d : "a day",
+            dd : "%d days",
+            M : "a month",
+            MM : "%d months",
+            y : "a year",
+            yy : "%d years"
+        },
+        relativeTime : function (number, withoutSuffix, string, isFuture) {
+            var output = this._relativeTime[string];
+            return (typeof output === 'function') ?
+                output(number, withoutSuffix, string, isFuture) :
+                output.replace(/%d/i, number);
+        },
+        pastFuture : function (diff, output) {
+            var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+            return typeof format === 'function' ? format(output) : format.replace(/%s/i, output);
+        },
+
+        ordinal : function (number) {
+            return this._ordinal.replace("%d", number);
+        },
+        _ordinal : "%d",
+
+        preparse : function (string) {
+            return string;
+        },
+
+        postformat : function (string) {
+            return string;
+        },
+
+        week : function (mom) {
+            return weekOfYear(mom, this._week.dow, this._week.doy).week;
+        },
+
+        _week : {
+            dow : 0, // Sunday is the first day of the week.
+            doy : 6  // The week that contains Jan 1st is the first week of the year.
+        },
+
+        _invalidDate: 'Invalid date',
+        invalidDate: function () {
+            return this._invalidDate;
+        }
+    });
+
+    // Loads a language definition into the `languages` cache.  The function
+    // takes a key and optionally values.  If not in the browser and no values
+    // are provided, it will load the language file module.  As a convenience,
+    // this function also returns the language values.
+    function loadLang(key, values) {
+        values.abbr = key;
+        if (!languages[key]) {
+            languages[key] = new Language();
+        }
+        languages[key].set(values);
+        return languages[key];
+    }
+
+    // Remove a language from the `languages` cache. Mostly useful in tests.
+    function unloadLang(key) {
+        delete languages[key];
+    }
+
+    // Determines which language definition to use and returns it.
+    //
+    // With no parameters, it will return the global language.  If you
+    // pass in a language key, such as 'en', it will return the
+    // definition for 'en', so long as 'en' has already been loaded using
+    // moment.lang.
+    function getLangDefinition(key) {
+        var i = 0, j, lang, next, split,
+            get = function (k) {
+                if (!languages[k] && hasModule) {
+                    try {
+                        require('./lang/' + k);
+                    } catch (e) { }
+                }
+                return languages[k];
+            };
+
+        if (!key) {
+            return moment.fn._lang;
+        }
+
+        if (!isArray(key)) {
+            //short-circuit everything else
+            lang = get(key);
+            if (lang) {
+                return lang;
+            }
+            key = [key];
+        }
+
+        //pick the language from the array
+        //try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+        //substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+        while (i < key.length) {
+            split = normalizeLanguage(key[i]).split('-');
+            j = split.length;
+            next = normalizeLanguage(key[i + 1]);
+            next = next ? next.split('-') : null;
+            while (j > 0) {
+                lang = get(split.slice(0, j).join('-'));
+                if (lang) {
+                    return lang;
+                }
+                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
+                    //the next array item is better than a shallower substring of this one
+                    break;
+                }
+                j--;
+            }
+            i++;
+        }
+        return moment.fn._lang;
+    }
+
+    /************************************
+        Formatting
+    ************************************/
+
+
+    function removeFormattingTokens(input) {
+        if (input.match(/\[[\s\S]/)) {
+            return input.replace(/^\[|\]$/g, "");
+        }
+        return input.replace(/\\/g, "");
+    }
+
+    function makeFormatFunction(format) {
+        var array = format.match(formattingTokens), i, length;
+
+        for (i = 0, length = array.length; i < length; i++) {
+            if (formatTokenFunctions[array[i]]) {
+                array[i] = formatTokenFunctions[array[i]];
+            } else {
+                array[i] = removeFormattingTokens(array[i]);
+            }
+        }
+
+        return function (mom) {
+            var output = "";
+            for (i = 0; i < length; i++) {
+                output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];
+            }
+            return output;
+        };
+    }
+
+    // format date using native date object
+    function formatMoment(m, format) {
+
+        if (!m.isValid()) {
+            return m.lang().invalidDate();
+        }
+
+        format = expandFormat(format, m.lang());
+
+        if (!formatFunctions[format]) {
+            formatFunctions[format] = makeFormatFunction(format);
+        }
+
+        return formatFunctions[format](m);
+    }
+
+    function expandFormat(format, lang) {
+        var i = 5;
+
+        function replaceLongDateFormatTokens(input) {
+            return lang.longDateFormat(input) || input;
+        }
+
+        localFormattingTokens.lastIndex = 0;
+        while (i >= 0 && localFormattingTokens.test(format)) {
+            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
+            localFormattingTokens.lastIndex = 0;
+            i -= 1;
+        }
+
+        return format;
+    }
+
+
+    /************************************
+        Parsing
+    ************************************/
+
+
+    // get the regex to find the next token
+    function getParseRegexForToken(token, config) {
+        var a, strict = config._strict;
+        switch (token) {
+        case 'DDDD':
+            return parseTokenThreeDigits;
+        case 'YYYY':
+        case 'GGGG':
+        case 'gggg':
+            return strict ? parseTokenFourDigits : parseTokenOneToFourDigits;
+        case 'Y':
+        case 'G':
+        case 'g':
+            return parseTokenSignedNumber;
+        case 'YYYYYY':
+        case 'YYYYY':
+        case 'GGGGG':
+        case 'ggggg':
+            return strict ? parseTokenSixDigits : parseTokenOneToSixDigits;
+        case 'S':
+            if (strict) { return parseTokenOneDigit; }
+            /* falls through */
+        case 'SS':
+            if (strict) { return parseTokenTwoDigits; }
+            /* falls through */
+        case 'SSS':
+            if (strict) { return parseTokenThreeDigits; }
+            /* falls through */
+        case 'DDD':
+            return parseTokenOneToThreeDigits;
+        case 'MMM':
+        case 'MMMM':
+        case 'dd':
+        case 'ddd':
+        case 'dddd':
+            return parseTokenWord;
+        case 'a':
+        case 'A':
+            return getLangDefinition(config._l)._meridiemParse;
+        case 'X':
+            return parseTokenTimestampMs;
+        case 'Z':
+        case 'ZZ':
+            return parseTokenTimezone;
+        case 'T':
+            return parseTokenT;
+        case 'SSSS':
+            return parseTokenDigits;
+        case 'MM':
+        case 'DD':
+        case 'YY':
+        case 'GG':
+        case 'gg':
+        case 'HH':
+        case 'hh':
+        case 'mm':
+        case 'ss':
+        case 'ww':
+        case 'WW':
+            return strict ? parseTokenTwoDigits : parseTokenOneOrTwoDigits;
+        case 'M':
+        case 'D':
+        case 'd':
+        case 'H':
+        case 'h':
+        case 'm':
+        case 's':
+        case 'w':
+        case 'W':
+        case 'e':
+        case 'E':
+            return parseTokenOneOrTwoDigits;
+        default :
+            a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), "i"));
+            return a;
+        }
+    }
+
+    function timezoneMinutesFromString(string) {
+        string = string || "";
+        var possibleTzMatches = (string.match(parseTokenTimezone) || []),
+            tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [],
+            parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0],
+            minutes = +(parts[1] * 60) + toInt(parts[2]);
+
+        return parts[0] === '+' ? -minutes : minutes;
+    }
+
+    // function to convert string input to date
+    function addTimeToArrayFromToken(token, input, config) {
+        var a, datePartArray = config._a;
+
+        switch (token) {
+        // MONTH
+        case 'M' : // fall through to MM
+        case 'MM' :
+            if (input != null) {
+                datePartArray[MONTH] = toInt(input) - 1;
+            }
+            break;
+        case 'MMM' : // fall through to MMMM
+        case 'MMMM' :
+            a = getLangDefinition(config._l).monthsParse(input);
+            // if we didn't find a month name, mark the date as invalid.
+            if (a != null) {
+                datePartArray[MONTH] = a;
+            } else {
+                config._pf.invalidMonth = input;
+            }
+            break;
+        // DAY OF MONTH
+        case 'D' : // fall through to DD
+        case 'DD' :
+            if (input != null) {
+                datePartArray[DATE] = toInt(input);
+            }
+            break;
+        // DAY OF YEAR
+        case 'DDD' : // fall through to DDDD
+        case 'DDDD' :
+            if (input != null) {
+                config._dayOfYear = toInt(input);
+            }
+
+            break;
+        // YEAR
+        case 'YY' :
+            datePartArray[YEAR] = toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
+            break;
+        case 'YYYY' :
+        case 'YYYYY' :
+        case 'YYYYYY' :
+            datePartArray[YEAR] = toInt(input);
+            break;
+        // AM / PM
+        case 'a' : // fall through to A
+        case 'A' :
+            config._isPm = getLangDefinition(config._l).isPM(input);
+            break;
+        // 24 HOUR
+        case 'H' : // fall through to hh
+        case 'HH' : // fall through to hh
+        case 'h' : // fall through to hh
+        case 'hh' :
+            datePartArray[HOUR] = toInt(input);
+            break;
+        // MINUTE
+        case 'm' : // fall through to mm
+        case 'mm' :
+            datePartArray[MINUTE] = toInt(input);
+            break;
+        // SECOND
+        case 's' : // fall through to ss
+        case 'ss' :
+            datePartArray[SECOND] = toInt(input);
+            break;
+        // MILLISECOND
+        case 'S' :
+        case 'SS' :
+        case 'SSS' :
+        case 'SSSS' :
+            datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000);
+            break;
+        // UNIX TIMESTAMP WITH MS
+        case 'X':
+            config._d = new Date(parseFloat(input) * 1000);
+            break;
+        // TIMEZONE
+        case 'Z' : // fall through to ZZ
+        case 'ZZ' :
+            config._useUTC = true;
+            config._tzm = timezoneMinutesFromString(input);
+            break;
+        case 'w':
+        case 'ww':
+        case 'W':
+        case 'WW':
+        case 'd':
+        case 'dd':
+        case 'ddd':
+        case 'dddd':
+        case 'e':
+        case 'E':
+            token = token.substr(0, 1);
+            /* falls through */
+        case 'gg':
+        case 'gggg':
+        case 'GG':
+        case 'GGGG':
+        case 'GGGGG':
+            token = token.substr(0, 2);
+            if (input) {
+                config._w = config._w || {};
+                config._w[token] = input;
+            }
+            break;
+        }
+    }
+
+    // convert an array to a date.
+    // the array should mirror the parameters below
+    // note: all values past the year are optional and will default to the lowest possible value.
+    // [year, month, day , hour, minute, second, millisecond]
+    function dateFromConfig(config) {
+        var i, date, input = [], currentDate,
+            yearToUse, fixYear, w, temp, lang, weekday, week;
+
+        if (config._d) {
+            return;
+        }
+
+        currentDate = currentDateArray(config);
+
+        //compute day of the year from weeks and weekdays
+        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
+            fixYear = function (val) {
+                var int_val = parseInt(val, 10);
+                return val ?
+                  (val.length < 3 ? (int_val > 68 ? 1900 + int_val : 2000 + int_val) : int_val) :
+                  (config._a[YEAR] == null ? moment().weekYear() : config._a[YEAR]);
+            };
+
+            w = config._w;
+            if (w.GG != null || w.W != null || w.E != null) {
+                temp = dayOfYearFromWeeks(fixYear(w.GG), w.W || 1, w.E, 4, 1);
+            }
+            else {
+                lang = getLangDefinition(config._l);
+                weekday = w.d != null ?  parseWeekday(w.d, lang) :
+                  (w.e != null ?  parseInt(w.e, 10) + lang._week.dow : 0);
+
+                week = parseInt(w.w, 10) || 1;
+
+                //if we're parsing 'd', then the low day numbers may be next week
+                if (w.d != null && weekday < lang._week.dow) {
+                    week++;
+                }
+
+                temp = dayOfYearFromWeeks(fixYear(w.gg), week, weekday, lang._week.doy, lang._week.dow);
+            }
+
+            config._a[YEAR] = temp.year;
+            config._dayOfYear = temp.dayOfYear;
+        }
+
+        //if the day of the year is set, figure out what it is
+        if (config._dayOfYear) {
+            yearToUse = config._a[YEAR] == null ? currentDate[YEAR] : config._a[YEAR];
+
+            if (config._dayOfYear > daysInYear(yearToUse)) {
+                config._pf._overflowDayOfYear = true;
+            }
+
+            date = makeUTCDate(yearToUse, 0, config._dayOfYear);
+            config._a[MONTH] = date.getUTCMonth();
+            config._a[DATE] = date.getUTCDate();
+        }
+
+        // Default to current date.
+        // * if no year, month, day of month are given, default to today
+        // * if day of month is given, default month and year
+        // * if month is given, default only year
+        // * if year is given, don't default anything
+        for (i = 0; i < 3 && config._a[i] == null; ++i) {
+            config._a[i] = input[i] = currentDate[i];
+        }
+
+        // Zero out whatever was not defaulted, including time
+        for (; i < 7; i++) {
+            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
+        }
+
+        // add the offsets to the time to be parsed so that we can have a clean array for checking isValid
+        input[HOUR] += toInt((config._tzm || 0) / 60);
+        input[MINUTE] += toInt((config._tzm || 0) % 60);
+
+        config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input);
+    }
+
+    function dateFromObject(config) {
+        var normalizedInput;
+
+        if (config._d) {
+            return;
+        }
+
+        normalizedInput = normalizeObjectUnits(config._i);
+        config._a = [
+            normalizedInput.year,
+            normalizedInput.month,
+            normalizedInput.day,
+            normalizedInput.hour,
+            normalizedInput.minute,
+            normalizedInput.second,
+            normalizedInput.millisecond
+        ];
+
+        dateFromConfig(config);
+    }
+
+    function currentDateArray(config) {
+        var now = new Date();
+        if (config._useUTC) {
+            return [
+                now.getUTCFullYear(),
+                now.getUTCMonth(),
+                now.getUTCDate()
+            ];
+        } else {
+            return [now.getFullYear(), now.getMonth(), now.getDate()];
+        }
+    }
+
+    // date from string and format string
+    function makeDateFromStringAndFormat(config) {
+
+        config._a = [];
+        config._pf.empty = true;
+
+        // This array is used to make a Date, either with `new Date` or `Date.UTC`
+        var lang = getLangDefinition(config._l),
+            string = '' + config._i,
+            i, parsedInput, tokens, token, skipped,
+            stringLength = string.length,
+            totalParsedInputLength = 0;
+
+        tokens = expandFormat(config._f, lang).match(formattingTokens) || [];
+
+        for (i = 0; i < tokens.length; i++) {
+            token = tokens[i];
+            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
+            if (parsedInput) {
+                skipped = string.substr(0, string.indexOf(parsedInput));
+                if (skipped.length > 0) {
+                    config._pf.unusedInput.push(skipped);
+                }
+                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
+                totalParsedInputLength += parsedInput.length;
+            }
+            // don't parse if it's not a known token
+            if (formatTokenFunctions[token]) {
+                if (parsedInput) {
+                    config._pf.empty = false;
+                }
+                else {
+                    config._pf.unusedTokens.push(token);
+                }
+                addTimeToArrayFromToken(token, parsedInput, config);
+            }
+            else if (config._strict && !parsedInput) {
+                config._pf.unusedTokens.push(token);
+            }
+        }
+
+        // add remaining unparsed input length to the string
+        config._pf.charsLeftOver = stringLength - totalParsedInputLength;
+        if (string.length > 0) {
+            config._pf.unusedInput.push(string);
+        }
+
+        // handle am pm
+        if (config._isPm && config._a[HOUR] < 12) {
+            config._a[HOUR] += 12;
+        }
+        // if is 12 am, change hours to 0
+        if (config._isPm === false && config._a[HOUR] === 12) {
+            config._a[HOUR] = 0;
+        }
+
+        dateFromConfig(config);
+        checkOverflow(config);
+    }
+
+    function unescapeFormat(s) {
+        return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
+            return p1 || p2 || p3 || p4;
+        });
+    }
+
+    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+    function regexpEscape(s) {
+        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+    }
+
+    // date from string and array of format strings
+    function makeDateFromStringAndArray(config) {
+        var tempConfig,
+            bestMoment,
+
+            scoreToBeat,
+            i,
+            currentScore;
+
+        if (config._f.length === 0) {
+            config._pf.invalidFormat = true;
+            config._d = new Date(NaN);
+            return;
+        }
+
+        for (i = 0; i < config._f.length; i++) {
+            currentScore = 0;
+            tempConfig = extend({}, config);
+            tempConfig._pf = defaultParsingFlags();
+            tempConfig._f = config._f[i];
+            makeDateFromStringAndFormat(tempConfig);
+
+            if (!isValid(tempConfig)) {
+                continue;
+            }
+
+            // if there is any input that was not parsed add a penalty for that format
+            currentScore += tempConfig._pf.charsLeftOver;
+
+            //or tokens
+            currentScore += tempConfig._pf.unusedTokens.length * 10;
+
+            tempConfig._pf.score = currentScore;
+
+            if (scoreToBeat == null || currentScore < scoreToBeat) {
+                scoreToBeat = currentScore;
+                bestMoment = tempConfig;
+            }
+        }
+
+        extend(config, bestMoment || tempConfig);
+    }
+
+    // date from iso format
+    function makeDateFromString(config) {
+        var i, l,
+            string = config._i,
+            match = isoRegex.exec(string);
+
+        if (match) {
+            config._pf.iso = true;
+            for (i = 0, l = isoDates.length; i < l; i++) {
+                if (isoDates[i][1].exec(string)) {
+                    // match[5] should be "T" or undefined
+                    config._f = isoDates[i][0] + (match[6] || " ");
+                    break;
+                }
+            }
+            for (i = 0, l = isoTimes.length; i < l; i++) {
+                if (isoTimes[i][1].exec(string)) {
+                    config._f += isoTimes[i][0];
+                    break;
+                }
+            }
+            if (string.match(parseTokenTimezone)) {
+                config._f += "Z";
+            }
+            makeDateFromStringAndFormat(config);
+        }
+        else {
+            config._d = new Date(string);
+        }
+    }
+
+    function makeDateFromInput(config) {
+        var input = config._i,
+            matched = aspNetJsonRegex.exec(input);
+
+        if (input === undefined) {
+            config._d = new Date();
+        } else if (matched) {
+            config._d = new Date(+matched[1]);
+        } else if (typeof input === 'string') {
+            makeDateFromString(config);
+        } else if (isArray(input)) {
+            config._a = input.slice(0);
+            dateFromConfig(config);
+        } else if (isDate(input)) {
+            config._d = new Date(+input);
+        } else if (typeof(input) === 'object') {
+            dateFromObject(config);
+        } else {
+            config._d = new Date(input);
+        }
+    }
+
+    function makeDate(y, m, d, h, M, s, ms) {
+        //can't just apply() to create a date:
+        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
+        var date = new Date(y, m, d, h, M, s, ms);
+
+        //the date constructor doesn't accept years < 1970
+        if (y < 1970) {
+            date.setFullYear(y);
+        }
+        return date;
+    }
+
+    function makeUTCDate(y) {
+        var date = new Date(Date.UTC.apply(null, arguments));
+        if (y < 1970) {
+            date.setUTCFullYear(y);
+        }
+        return date;
+    }
+
+    function parseWeekday(input, language) {
+        if (typeof input === 'string') {
+            if (!isNaN(input)) {
+                input = parseInt(input, 10);
+            }
+            else {
+                input = language.weekdaysParse(input);
+                if (typeof input !== 'number') {
+                    return null;
+                }
+            }
+        }
+        return input;
+    }
+
+    /************************************
+        Relative Time
+    ************************************/
+
+
+    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+    function substituteTimeAgo(string, number, withoutSuffix, isFuture, lang) {
+        return lang.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
+    }
+
+    function relativeTime(milliseconds, withoutSuffix, lang) {
+        var seconds = round(Math.abs(milliseconds) / 1000),
+            minutes = round(seconds / 60),
+            hours = round(minutes / 60),
+            days = round(hours / 24),
+            years = round(days / 365),
+            args = seconds < 45 && ['s', seconds] ||
+                minutes === 1 && ['m'] ||
+                minutes < 45 && ['mm', minutes] ||
+                hours === 1 && ['h'] ||
+                hours < 22 && ['hh', hours] ||
+                days === 1 && ['d'] ||
+                days <= 25 && ['dd', days] ||
+                days <= 45 && ['M'] ||
+                days < 345 && ['MM', round(days / 30)] ||
+                years === 1 && ['y'] || ['yy', years];
+        args[2] = withoutSuffix;
+        args[3] = milliseconds > 0;
+        args[4] = lang;
+        return substituteTimeAgo.apply({}, args);
+    }
+
+
+    /************************************
+        Week of Year
+    ************************************/
+
+
+    // firstDayOfWeek       0 = sun, 6 = sat
+    //                      the day of the week that starts the week
+    //                      (usually sunday or monday)
+    // firstDayOfWeekOfYear 0 = sun, 6 = sat
+    //                      the first week is the week that contains the first
+    //                      of this day of the week
+    //                      (eg. ISO weeks use thursday (4))
+    function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) {
+        var end = firstDayOfWeekOfYear - firstDayOfWeek,
+            daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(),
+            adjustedMoment;
+
+
+        if (daysToDayOfWeek > end) {
+            daysToDayOfWeek -= 7;
+        }
+
+        if (daysToDayOfWeek < end - 7) {
+            daysToDayOfWeek += 7;
+        }
+
+        adjustedMoment = moment(mom).add('d', daysToDayOfWeek);
+        return {
+            week: Math.ceil(adjustedMoment.dayOfYear() / 7),
+            year: adjustedMoment.year()
+        };
+    }
+
+    //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+    function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
+        var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear;
+
+        weekday = weekday != null ? weekday : firstDayOfWeek;
+        daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0);
+        dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1;
+
+        return {
+            year: dayOfYear > 0 ? year : year - 1,
+            dayOfYear: dayOfYear > 0 ?  dayOfYear : daysInYear(year - 1) + dayOfYear
+        };
+    }
+
+    /************************************
+        Top Level Functions
+    ************************************/
+
+    function makeMoment(config) {
+        var input = config._i,
+            format = config._f;
+
+        if (input === null) {
+            return moment.invalid({nullInput: true});
+        }
+
+        if (typeof input === 'string') {
+            config._i = input = getLangDefinition().preparse(input);
+        }
+
+        if (moment.isMoment(input)) {
+            config = cloneMoment(input);
+
+            config._d = new Date(+input._d);
+        } else if (format) {
+            if (isArray(format)) {
+                makeDateFromStringAndArray(config);
+            } else {
+                makeDateFromStringAndFormat(config);
+            }
+        } else {
+            makeDateFromInput(config);
+        }
+
+        return new Moment(config);
+    }
+
+    moment = function (input, format, lang, strict) {
+        var c;
+
+        if (typeof(lang) === "boolean") {
+            strict = lang;
+            lang = undefined;
+        }
+        // object construction must be done this way.
+        // https://github.com/moment/moment/issues/1423
+        c = {};
+        c._isAMomentObject = true;
+        c._i = input;
+        c._f = format;
+        c._l = lang;
+        c._strict = strict;
+        c._isUTC = false;
+        c._pf = defaultParsingFlags();
+
+        return makeMoment(c);
+    };
+
+    // creating with utc
+    moment.utc = function (input, format, lang, strict) {
+        var c;
+
+        if (typeof(lang) === "boolean") {
+            strict = lang;
+            lang = undefined;
+        }
+        // object construction must be done this way.
+        // https://github.com/moment/moment/issues/1423
+        c = {};
+        c._isAMomentObject = true;
+        c._useUTC = true;
+        c._isUTC = true;
+        c._l = lang;
+        c._i = input;
+        c._f = format;
+        c._strict = strict;
+        c._pf = defaultParsingFlags();
+
+        return makeMoment(c).utc();
+    };
+
+    // creating with unix timestamp (in seconds)
+    moment.unix = function (input) {
+        return moment(input * 1000);
+    };
+
+    // duration
+    moment.duration = function (input, key) {
+        var duration = input,
+            // matching against regexp is expensive, do it on demand
+            match = null,
+            sign,
+            ret,
+            parseIso;
+
+        if (moment.isDuration(input)) {
+            duration = {
+                ms: input._milliseconds,
+                d: input._days,
+                M: input._months
+            };
+        } else if (typeof input === 'number') {
+            duration = {};
+            if (key) {
+                duration[key] = input;
+            } else {
+                duration.milliseconds = input;
+            }
+        } else if (!!(match = aspNetTimeSpanJsonRegex.exec(input))) {
+            sign = (match[1] === "-") ? -1 : 1;
+            duration = {
+                y: 0,
+                d: toInt(match[DATE]) * sign,
+                h: toInt(match[HOUR]) * sign,
+                m: toInt(match[MINUTE]) * sign,
+                s: toInt(match[SECOND]) * sign,
+                ms: toInt(match[MILLISECOND]) * sign
+            };
+        } else if (!!(match = isoDurationRegex.exec(input))) {
+            sign = (match[1] === "-") ? -1 : 1;
+            parseIso = function (inp) {
+                // We'd normally use ~~inp for this, but unfortunately it also
+                // converts floats to ints.
+                // inp may be undefined, so careful calling replace on it.
+                var res = inp && parseFloat(inp.replace(',', '.'));
+                // apply sign while we're at it
+                return (isNaN(res) ? 0 : res) * sign;
+            };
+            duration = {
+                y: parseIso(match[2]),
+                M: parseIso(match[3]),
+                d: parseIso(match[4]),
+                h: parseIso(match[5]),
+                m: parseIso(match[6]),
+                s: parseIso(match[7]),
+                w: parseIso(match[8])
+            };
+        }
+
+        ret = new Duration(duration);
+
+        if (moment.isDuration(input) && input.hasOwnProperty('_lang')) {
+            ret._lang = input._lang;
+        }
+
+        return ret;
+    };
+
+    // version number
+    moment.version = VERSION;
+
+    // default format
+    moment.defaultFormat = isoFormat;
+
+    // This function will be called whenever a moment is mutated.
+    // It is intended to keep the offset in sync with the timezone.
+    moment.updateOffset = function () {};
+
+    // This function will load languages and then set the global language.  If
+    // no arguments are passed in, it will simply return the current global
+    // language key.
+    moment.lang = function (key, values) {
+        var r;
+        if (!key) {
+            return moment.fn._lang._abbr;
+        }
+        if (values) {
+            loadLang(normalizeLanguage(key), values);
+        } else if (values === null) {
+            unloadLang(key);
+            key = 'en';
+        } else if (!languages[key]) {
+            getLangDefinition(key);
+        }
+        r = moment.duration.fn._lang = moment.fn._lang = getLangDefinition(key);
+        return r._abbr;
+    };
+
+    // returns language data
+    moment.langData = function (key) {
+        if (key && key._lang && key._lang._abbr) {
+            key = key._lang._abbr;
+        }
+        return getLangDefinition(key);
+    };
+
+    // compare moment object
+    moment.isMoment = function (obj) {
+        return obj instanceof Moment ||
+            (obj != null &&  obj.hasOwnProperty('_isAMomentObject'));
+    };
+
+    // for typechecking Duration objects
+    moment.isDuration = function (obj) {
+        return obj instanceof Duration;
+    };
+
+    for (i = lists.length - 1; i >= 0; --i) {
+        makeList(lists[i]);
+    }
+
+    moment.normalizeUnits = function (units) {
+        return normalizeUnits(units);
+    };
+
+    moment.invalid = function (flags) {
+        var m = moment.utc(NaN);
+        if (flags != null) {
+            extend(m._pf, flags);
+        }
+        else {
+            m._pf.userInvalidated = true;
+        }
+
+        return m;
+    };
+
+    moment.parseZone = function (input) {
+        return moment(input).parseZone();
+    };
+
+    /************************************
+        Moment Prototype
+    ************************************/
+
+
+    extend(moment.fn = Moment.prototype, {
+
+        clone : function () {
+            return moment(this);
+        },
+
+        valueOf : function () {
+            return +this._d + ((this._offset || 0) * 60000);
+        },
+
+        unix : function () {
+            return Math.floor(+this / 1000);
+        },
+
+        toString : function () {
+            return this.clone().lang('en').format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ");
+        },
+
+        toDate : function () {
+            return this._offset ? new Date(+this) : this._d;
+        },
+
+        toISOString : function () {
+            var m = moment(this).utc();
+            if (0 < m.year() && m.year() <= 9999) {
+                return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+            } else {
+                return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+            }
+        },
+
+        toArray : function () {
+            var m = this;
+            return [
+                m.year(),
+                m.month(),
+                m.date(),
+                m.hours(),
+                m.minutes(),
+                m.seconds(),
+                m.milliseconds()
+            ];
+        },
+
+        isValid : function () {
+            return isValid(this);
+        },
+
+        isDSTShifted : function () {
+
+            if (this._a) {
+                return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0;
+            }
+
+            return false;
+        },
+
+        parsingFlags : function () {
+            return extend({}, this._pf);
+        },
+
+        invalidAt: function () {
+            return this._pf.overflow;
+        },
+
+        utc : function () {
+            return this.zone(0);
+        },
+
+        local : function () {
+            this.zone(0);
+            this._isUTC = false;
+            return this;
+        },
+
+        format : function (inputString) {
+            var output = formatMoment(this, inputString || moment.defaultFormat);
+            return this.lang().postformat(output);
+        },
+
+        add : function (input, val) {
+            var dur;
+            // switch args to support add('s', 1) and add(1, 's')
+            if (typeof input === 'string') {
+                dur = moment.duration(+val, input);
+            } else {
+                dur = moment.duration(input, val);
+            }
+            addOrSubtractDurationFromMoment(this, dur, 1);
+            return this;
+        },
+
+        subtract : function (input, val) {
+            var dur;
+            // switch args to support subtract('s', 1) and subtract(1, 's')
+            if (typeof input === 'string') {
+                dur = moment.duration(+val, input);
+            } else {
+                dur = moment.duration(input, val);
+            }
+            addOrSubtractDurationFromMoment(this, dur, -1);
+            return this;
+        },
+
+        diff : function (input, units, asFloat) {
+            var that = makeAs(input, this),
+                zoneDiff = (this.zone() - that.zone()) * 6e4,
+                diff, output;
+
+            units = normalizeUnits(units);
+
+            if (units === 'year' || units === 'month') {
+                // average number of days in the months in the given dates
+                diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2
+                // difference in months
+                output = ((this.year() - that.year()) * 12) + (this.month() - that.month());
+                // adjust by taking difference in days, average number of days
+                // and dst in the given months.
+                output += ((this - moment(this).startOf('month')) -
+                        (that - moment(that).startOf('month'))) / diff;
+                // same as above but with zones, to negate all dst
+                output -= ((this.zone() - moment(this).startOf('month').zone()) -
+                        (that.zone() - moment(that).startOf('month').zone())) * 6e4 / diff;
+                if (units === 'year') {
+                    output = output / 12;
+                }
+            } else {
+                diff = (this - that);
+                output = units === 'second' ? diff / 1e3 : // 1000
+                    units === 'minute' ? diff / 6e4 : // 1000 * 60
+                    units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60
+                    units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst
+                    units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst
+                    diff;
+            }
+            return asFloat ? output : absRound(output);
+        },
+
+        from : function (time, withoutSuffix) {
+            return moment.duration(this.diff(time)).lang(this.lang()._abbr).humanize(!withoutSuffix);
+        },
+
+        fromNow : function (withoutSuffix) {
+            return this.from(moment(), withoutSuffix);
+        },
+
+        calendar : function () {
+            // We want to compare the start of today, vs this.
+            // Getting start-of-today depends on whether we're zone'd or not.
+            var sod = makeAs(moment(), this).startOf('day'),
+                diff = this.diff(sod, 'days', true),
+                format = diff < -6 ? 'sameElse' :
+                    diff < -1 ? 'lastWeek' :
+                    diff < 0 ? 'lastDay' :
+                    diff < 1 ? 'sameDay' :
+                    diff < 2 ? 'nextDay' :
+                    diff < 7 ? 'nextWeek' : 'sameElse';
+            return this.format(this.lang().calendar(format, this));
+        },
+
+        isLeapYear : function () {
+            return isLeapYear(this.year());
+        },
+
+        isDST : function () {
+            return (this.zone() < this.clone().month(0).zone() ||
+                this.zone() < this.clone().month(5).zone());
+        },
+
+        day : function (input) {
+            var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+            if (input != null) {
+                input = parseWeekday(input, this.lang());
+                return this.add({ d : input - day });
+            } else {
+                return day;
+            }
+        },
+
+        month : function (input) {
+            var utc = this._isUTC ? 'UTC' : '',
+                dayOfMonth;
+
+            if (input != null) {
+                if (typeof input === 'string') {
+                    input = this.lang().monthsParse(input);
+                    if (typeof input !== 'number') {
+                        return this;
+                    }
+                }
+
+                dayOfMonth = this.date();
+                this.date(1);
+                this._d['set' + utc + 'Month'](input);
+                this.date(Math.min(dayOfMonth, this.daysInMonth()));
+
+                moment.updateOffset(this);
+                return this;
+            } else {
+                return this._d['get' + utc + 'Month']();
+            }
+        },
+
+        startOf: function (units) {
+            units = normalizeUnits(units);
+            // the following switch intentionally omits break keywords
+            // to utilize falling through the cases.
+            switch (units) {
+            case 'year':
+                this.month(0);
+                /* falls through */
+            case 'month':
+                this.date(1);
+                /* falls through */
+            case 'week':
+            case 'isoWeek':
+            case 'day':
+                this.hours(0);
+                /* falls through */
+            case 'hour':
+                this.minutes(0);
+                /* falls through */
+            case 'minute':
+                this.seconds(0);
+                /* falls through */
+            case 'second':
+                this.milliseconds(0);
+                /* falls through */
+            }
+
+            // weeks are a special case
+            if (units === 'week') {
+                this.weekday(0);
+            } else if (units === 'isoWeek') {
+                this.isoWeekday(1);
+            }
+
+            return this;
+        },
+
+        endOf: function (units) {
+            units = normalizeUnits(units);
+            return this.startOf(units).add((units === 'isoWeek' ? 'week' : units), 1).subtract('ms', 1);
+        },
+
+        isAfter: function (input, units) {
+            units = typeof units !== 'undefined' ? units : 'millisecond';
+            return +this.clone().startOf(units) > +moment(input).startOf(units);
+        },
+
+        isBefore: function (input, units) {
+            units = typeof units !== 'undefined' ? units : 'millisecond';
+            return +this.clone().startOf(units) < +moment(input).startOf(units);
+        },
+
+        isSame: function (input, units) {
+            units = units || 'ms';
+            return +this.clone().startOf(units) === +makeAs(input, this).startOf(units);
+        },
+
+        min: function (other) {
+            other = moment.apply(null, arguments);
+            return other < this ? this : other;
+        },
+
+        max: function (other) {
+            other = moment.apply(null, arguments);
+            return other > this ? this : other;
+        },
+
+        zone : function (input) {
+            var offset = this._offset || 0;
+            if (input != null) {
+                if (typeof input === "string") {
+                    input = timezoneMinutesFromString(input);
+                }
+                if (Math.abs(input) < 16) {
+                    input = input * 60;
+                }
+                this._offset = input;
+                this._isUTC = true;
+                if (offset !== input) {
+                    addOrSubtractDurationFromMoment(this, moment.duration(offset - input, 'm'), 1, true);
+                }
+            } else {
+                return this._isUTC ? offset : this._d.getTimezoneOffset();
+            }
+            return this;
+        },
+
+        zoneAbbr : function () {
+            return this._isUTC ? "UTC" : "";
+        },
+
+        zoneName : function () {
+            return this._isUTC ? "Coordinated Universal Time" : "";
+        },
+
+        parseZone : function () {
+            if (this._tzm) {
+                this.zone(this._tzm);
+            } else if (typeof this._i === 'string') {
+                this.zone(this._i);
+            }
+            return this;
+        },
+
+        hasAlignedHourOffset : function (input) {
+            if (!input) {
+                input = 0;
+            }
+            else {
+                input = moment(input).zone();
+            }
+
+            return (this.zone() - input) % 60 === 0;
+        },
+
+        daysInMonth : function () {
+            return daysInMonth(this.year(), this.month());
+        },
+
+        dayOfYear : function (input) {
+            var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1;
+            return input == null ? dayOfYear : this.add("d", (input - dayOfYear));
+        },
+
+        quarter : function () {
+            return Math.ceil((this.month() + 1.0) / 3.0);
+        },
+
+        weekYear : function (input) {
+            var year = weekOfYear(this, this.lang()._week.dow, this.lang()._week.doy).year;
+            return input == null ? year : this.add("y", (input - year));
+        },
+
+        isoWeekYear : function (input) {
+            var year = weekOfYear(this, 1, 4).year;
+            return input == null ? year : this.add("y", (input - year));
+        },
+
+        week : function (input) {
+            var week = this.lang().week(this);
+            return input == null ? week : this.add("d", (input - week) * 7);
+        },
+
+        isoWeek : function (input) {
+            var week = weekOfYear(this, 1, 4).week;
+            return input == null ? week : this.add("d", (input - week) * 7);
+        },
+
+        weekday : function (input) {
+            var weekday = (this.day() + 7 - this.lang()._week.dow) % 7;
+            return input == null ? weekday : this.add("d", input - weekday);
+        },
+
+        isoWeekday : function (input) {
+            // behaves the same as moment#day except
+            // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+            // as a setter, sunday should belong to the previous week.
+            return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7);
+        },
+
+        get : function (units) {
+            units = normalizeUnits(units);
+            return this[units]();
+        },
+
+        set : function (units, value) {
+            units = normalizeUnits(units);
+            if (typeof this[units] === 'function') {
+                this[units](value);
+            }
+            return this;
+        },
+
+        // If passed a language key, it will set the language for this
+        // instance.  Otherwise, it will return the language configuration
+        // variables for this instance.
+        lang : function (key) {
+            if (key === undefined) {
+                return this._lang;
+            } else {
+                this._lang = getLangDefinition(key);
+                return this;
+            }
+        }
+    });
+
+    // helper for adding shortcuts
+    function makeGetterAndSetter(name, key) {
+        moment.fn[name] = moment.fn[name + 's'] = function (input) {
+            var utc = this._isUTC ? 'UTC' : '';
+            if (input != null) {
+                this._d['set' + utc + key](input);
+                moment.updateOffset(this);
+                return this;
+            } else {
+                return this._d['get' + utc + key]();
+            }
+        };
+    }
+
+    // loop through and add shortcuts (Month, Date, Hours, Minutes, Seconds, Milliseconds)
+    for (i = 0; i < proxyGettersAndSetters.length; i ++) {
+        makeGetterAndSetter(proxyGettersAndSetters[i].toLowerCase().replace(/s$/, ''), proxyGettersAndSetters[i]);
+    }
+
+    // add shortcut for year (uses different syntax than the getter/setter 'year' == 'FullYear')
+    makeGetterAndSetter('year', 'FullYear');
+
+    // add plural methods
+    moment.fn.days = moment.fn.day;
+    moment.fn.months = moment.fn.month;
+    moment.fn.weeks = moment.fn.week;
+    moment.fn.isoWeeks = moment.fn.isoWeek;
+
+    // add aliased format methods
+    moment.fn.toJSON = moment.fn.toISOString;
+
+    /************************************
+        Duration Prototype
+    ************************************/
+
+
+    extend(moment.duration.fn = Duration.prototype, {
+
+        _bubble : function () {
+            var milliseconds = this._milliseconds,
+                days = this._days,
+                months = this._months,
+                data = this._data,
+                seconds, minutes, hours, years;
+
+            // The following code bubbles up values, see the tests for
+            // examples of what that means.
+            data.milliseconds = milliseconds % 1000;
+
+            seconds = absRound(milliseconds / 1000);
+            data.seconds = seconds % 60;
+
+            minutes = absRound(seconds / 60);
+            data.minutes = minutes % 60;
+
+            hours = absRound(minutes / 60);
+            data.hours = hours % 24;
+
+            days += absRound(hours / 24);
+            data.days = days % 30;
+
+            months += absRound(days / 30);
+            data.months = months % 12;
+
+            years = absRound(months / 12);
+            data.years = years;
+        },
+
+        weeks : function () {
+            return absRound(this.days() / 7);
+        },
+
+        valueOf : function () {
+            return this._milliseconds +
+              this._days * 864e5 +
+              (this._months % 12) * 2592e6 +
+              toInt(this._months / 12) * 31536e6;
+        },
+
+        humanize : function (withSuffix) {
+            var difference = +this,
+                output = relativeTime(difference, !withSuffix, this.lang());
+
+            if (withSuffix) {
+                output = this.lang().pastFuture(difference, output);
+            }
+
+            return this.lang().postformat(output);
+        },
+
+        add : function (input, val) {
+            // supports only 2.0-style add(1, 's') or add(moment)
+            var dur = moment.duration(input, val);
+
+            this._milliseconds += dur._milliseconds;
+            this._days += dur._days;
+            this._months += dur._months;
+
+            this._bubble();
+
+            return this;
+        },
+
+        subtract : function (input, val) {
+            var dur = moment.duration(input, val);
+
+            this._milliseconds -= dur._milliseconds;
+            this._days -= dur._days;
+            this._months -= dur._months;
+
+            this._bubble();
+
+            return this;
+        },
+
+        get : function (units) {
+            units = normalizeUnits(units);
+            return this[units.toLowerCase() + 's']();
+        },
+
+        as : function (units) {
+            units = normalizeUnits(units);
+            return this['as' + units.charAt(0).toUpperCase() + units.slice(1) + 's']();
+        },
+
+        lang : moment.fn.lang,
+
+        toIsoString : function () {
+            // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+            var years = Math.abs(this.years()),
+                months = Math.abs(this.months()),
+                days = Math.abs(this.days()),
+                hours = Math.abs(this.hours()),
+                minutes = Math.abs(this.minutes()),
+                seconds = Math.abs(this.seconds() + this.milliseconds() / 1000);
+
+            if (!this.asSeconds()) {
+                // this is the same as C#'s (Noda) and python (isodate)...
+                // but not other JS (goog.date)
+                return 'P0D';
+            }
+
+            return (this.asSeconds() < 0 ? '-' : '') +
+                'P' +
+                (years ? years + 'Y' : '') +
+                (months ? months + 'M' : '') +
+                (days ? days + 'D' : '') +
+                ((hours || minutes || seconds) ? 'T' : '') +
+                (hours ? hours + 'H' : '') +
+                (minutes ? minutes + 'M' : '') +
+                (seconds ? seconds + 'S' : '');
+        }
+    });
+
+    function makeDurationGetter(name) {
+        moment.duration.fn[name] = function () {
+            return this._data[name];
+        };
+    }
+
+    function makeDurationAsGetter(name, factor) {
+        moment.duration.fn['as' + name] = function () {
+            return +this / factor;
+        };
+    }
+
+    for (i in unitMillisecondFactors) {
+        if (unitMillisecondFactors.hasOwnProperty(i)) {
+            makeDurationAsGetter(i, unitMillisecondFactors[i]);
+            makeDurationGetter(i.toLowerCase());
+        }
+    }
+
+    makeDurationAsGetter('Weeks', 6048e5);
+    moment.duration.fn.asMonths = function () {
+        return (+this - this.years() * 31536e6) / 2592e6 + this.years() * 12;
+    };
+
+
+    /************************************
+        Default Lang
+    ************************************/
+
+
+    // Set default language, other languages will inherit from English.
+    moment.lang('en', {
+        ordinal : function (number) {
+            var b = number % 10,
+                output = (toInt(number % 100 / 10) === 1) ? 'th' :
+                (b === 1) ? 'st' :
+                (b === 2) ? 'nd' :
+                (b === 3) ? 'rd' : 'th';
+            return number + output;
+        }
+    });
+
+    /* EMBED_LANGUAGES */
+
+    /************************************
+        Exposing Moment
+    ************************************/
+
+    function makeGlobal(deprecate) {
+        var warned = false, local_moment = moment;
+        /*global ender:false */
+        if (typeof ender !== 'undefined') {
+            return;
+        }
+        // here, `this` means `window` in the browser, or `global` on the server
+        // add `moment` as a global object via a string identifier,
+        // for Closure Compiler "advanced" mode
+        if (deprecate) {
+            global.moment = function () {
+                if (!warned && console && console.warn) {
+                    warned = true;
+                    console.warn(
+                            "Accessing Moment through the global scope is " +
+                            "deprecated, and will be removed in an upcoming " +
+                            "release.");
+                }
+                return local_moment.apply(null, arguments);
+            };
+            extend(global.moment, local_moment);
+        } else {
+            global['moment'] = moment;
+        }
+    }
+
+    // CommonJS module is defined
+    if (hasModule) {
+        module.exports = moment;
+        makeGlobal(true);
+    } else if (typeof define === "function" && define.amd) {
+        define("moment", function (require, exports, module) {
+            if (module.config && module.config() && module.config().noGlobal !== true) {
+                // If user provided noGlobal, he is aware of global
+                makeGlobal(module.config().noGlobal === undefined);
+            }
+
+            return moment;
+        });
+    } else {
+        makeGlobal();
+    }
+}).call(this);
diff --git a/resources/oojs-ui/i18n/ace.json b/resources/oojs-ui/i18n/ace.json
new file mode 100644 (file)
index 0000000..554ae57
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Si Gam Acèh"
+        ]
+    },
+    "ooui-dialog-action-close": "Tôp",
+    "ooui-outline-control-move-down": "Pinah item u yup",
+    "ooui-outline-control-move-up": "Pinah item u ateuëh",
+    "ooui-toolbar-more": "Lom"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/af.json b/resources/oojs-ui/i18n/af.json
new file mode 100644 (file)
index 0000000..a622f89
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Naudefj"
+        ]
+    },
+    "ooui-dialog-action-close": "Sluit",
+    "ooui-outline-control-move-down": "Skuif item af",
+    "ooui-outline-control-move-up": "Skuif item op"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/am.json b/resources/oojs-ui/i18n/am.json
new file mode 100644 (file)
index 0000000..61e4ff6
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Elfalem"
+        ]
+    },
+    "ooui-dialog-action-close": "ለመዝጋት"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ar.json b/resources/oojs-ui/i18n/ar.json
new file mode 100644 (file)
index 0000000..65e1364
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    "@metadata": {
+        "authors": [
+            "Ciphers",
+            "Claw eg",
+            "Elfalem",
+            "Jdforrester",
+            "Mido",
+            "OsamaK",
+            "زكريا",
+            "مشعل الحربي"
+        ]
+    },
+    "ooui-dialog-action-close": "أغلق",
+    "ooui-outline-control-move-down": "انقل العنصر للأسفل",
+    "ooui-outline-control-move-up": "انقل العنصر للأعلى",
+    "ooui-toolbar-more": "مزيد"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/arc.json b/resources/oojs-ui/i18n/arc.json
new file mode 100644 (file)
index 0000000..0f9e75d
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Basharh"
+        ]
+    },
+    "ooui-dialog-action-close": "ܣܟܘܪ"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ast.json b/resources/oojs-ui/i18n/ast.json
new file mode 100644 (file)
index 0000000..fe6ea0a
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "Basharh",
+            "Bishnu Saikia",
+            "Xuacu"
+        ]
+    },
+    "ooui-dialog-action-close": "Zarrar",
+    "ooui-outline-control-move-down": "Mover abaxo l'elementu",
+    "ooui-outline-control-move-up": "Mover arriba l'elementu",
+    "ooui-outline-control-remove": "Desaniciar elementu",
+    "ooui-toolbar-more": "Más"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/az.json b/resources/oojs-ui/i18n/az.json
new file mode 100644 (file)
index 0000000..257680b
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "Cekli829",
+            "Interfase",
+            "Jduranboger"
+        ]
+    },
+    "ooui-dialog-action-close": "Bağla",
+    "ooui-outline-control-move-down": "Bəndi aşağı apar",
+    "ooui-outline-control-move-up": "Bəndi yuxarı apar",
+    "ooui-outline-control-remove": "Bəndi sil",
+    "ooui-toolbar-more": "Daha artıq"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ba.json b/resources/oojs-ui/i18n/ba.json
new file mode 100644 (file)
index 0000000..4af0114
--- /dev/null
@@ -0,0 +1,15 @@
+{
+    "@metadata": {
+        "authors": [
+            "AiseluRB",
+            "Amire80",
+            "Assele",
+            "Haqmar",
+            "Sagan",
+            "Рустам Нурыев"
+        ]
+    },
+    "ooui-dialog-action-close": "Ябырға",
+    "ooui-outline-control-move-down": "Аҫҡа күсерергә",
+    "ooui-outline-control-move-up": "Өҫкә күсерергә"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/bcl.json b/resources/oojs-ui/i18n/bcl.json
new file mode 100644 (file)
index 0000000..aff451e
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Geopoet",
+            "Sky Harbor"
+        ]
+    },
+    "ooui-dialog-action-close": "Seraduhon",
+    "ooui-outline-control-move-down": "Balyuhon an aytem paibaba",
+    "ooui-outline-control-move-up": "Balyuhon an aytem paitaas",
+    "ooui-toolbar-more": "Kadugangan"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/be-tarask.json b/resources/oojs-ui/i18n/be-tarask.json
new file mode 100644 (file)
index 0000000..5922f61
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "EugeneZelenko",
+            "Wizardist",
+            "Чаховіч Уладзіслаў",
+            "Zedlik"
+        ]
+    },
+    "ooui-dialog-action-close": "Закрыць",
+    "ooui-outline-control-move-down": "Перасунуць ніжэй",
+    "ooui-outline-control-move-up": "Перасунуць вышэй",
+    "ooui-toolbar-more": "Болей"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/be.json b/resources/oojs-ui/i18n/be.json
new file mode 100644 (file)
index 0000000..3058ab8
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Чаховіч Уладзіслаў"
+        ]
+    },
+    "ooui-dialog-action-close": "Закрыць"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/bg.json b/resources/oojs-ui/i18n/bg.json
new file mode 100644 (file)
index 0000000..939719b
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "DCLXVI",
+            "Hristofor.mirchev",
+            "පසිඳු කාවින්ද",
+            "Mitzev"
+        ]
+    },
+    "ooui-dialog-action-close": "Затваряне",
+    "ooui-outline-control-remove": "Премахване на обекти",
+    "ooui-toolbar-more": "Още"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/bn.json b/resources/oojs-ui/i18n/bn.json
new file mode 100644 (file)
index 0000000..c321ab1
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "@metadata": {
+        "authors": [
+            "Aftab1995",
+            "Bellayet",
+            "Jayantanth",
+            "Nasir8891",
+            "Runab",
+            "Sayak Sarkar"
+        ]
+    },
+    "ooui-dialog-action-close": "বন্ধ",
+    "ooui-outline-control-move-down": "আইটেম নিচে স্থানান্তর",
+    "ooui-outline-control-move-up": "আইটেম উপরে স্থানান্তর",
+    "ooui-toolbar-more": "আরও"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/br.json b/resources/oojs-ui/i18n/br.json
new file mode 100644 (file)
index 0000000..38eb9e8
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Fohanno",
+            "Fulup",
+            "Y-M D"
+        ]
+    },
+    "ooui-dialog-action-close": "Serriñ",
+    "ooui-outline-control-move-down": "Lakaat an elfenn da ziskenn",
+    "ooui-outline-control-move-up": "Lakaat an elfenn da bignat"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/bs.json b/resources/oojs-ui/i18n/bs.json
new file mode 100644 (file)
index 0000000..95ba48d
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "DzWiki"
+        ]
+    },
+    "ooui-dialog-action-close": "Zatvori",
+    "ooui-outline-control-move-down": "Premjesti stavku dole",
+    "ooui-outline-control-move-up": "Premjesti stavku gore",
+    "ooui-outline-control-remove": "Ukloni stavku",
+    "ooui-toolbar-more": "Više"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ca.json b/resources/oojs-ui/i18n/ca.json
new file mode 100644 (file)
index 0000000..61bb1f6
--- /dev/null
@@ -0,0 +1,17 @@
+{
+    "@metadata": {
+        "authors": [
+            "Alvaro Vidal-Abarca",
+            "Amire80",
+            "Arnaugir",
+            "Pginer",
+            "QuimGil",
+            "SMP",
+            "Vriullop"
+        ]
+    },
+    "ooui-dialog-action-close": "Tanca",
+    "ooui-outline-control-move-down": "Baixa element",
+    "ooui-outline-control-move-up": "Puja element",
+    "ooui-toolbar-more": "Més"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ce.json b/resources/oojs-ui/i18n/ce.json
new file mode 100644 (file)
index 0000000..ff14ff3
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "Amire80",
+            "Умар"
+        ]
+    },
+    "ooui-dialog-action-close": "ДӀачӀагӀа",
+    "ooui-outline-control-move-down": "Лаха яккха элемент",
+    "ooui-outline-control-move-up": "Лаккха яккха элемент",
+    "ooui-outline-control-remove": "ДӀадаха меттиг",
+    "ooui-toolbar-more": "Кхин тӀе"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ckb.json b/resources/oojs-ui/i18n/ckb.json
new file mode 100644 (file)
index 0000000..839f4a8
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Calak",
+            "Muhammed taha"
+        ]
+    },
+    "ooui-dialog-action-close": "دایخە"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/co.json b/resources/oojs-ui/i18n/co.json
new file mode 100644 (file)
index 0000000..e5edb21
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Paulu"
+        ]
+    },
+    "ooui-dialog-action-close": "Chjude",
+    "ooui-outline-control-move-down": "Fà falà l'ogettu",
+    "ooui-outline-control-move-up": "Fà cullà l'ogettu"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/cs.json b/resources/oojs-ui/i18n/cs.json
new file mode 100644 (file)
index 0000000..670073f
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "@metadata": {
+        "authors": [
+            "Chmee2",
+            "Jkjk",
+            "Juandev",
+            "Koo6",
+            "Littledogboy",
+            "Michaelbrabec",
+            "Mormegil",
+            "Polda18",
+            "Tchoř",
+            "ශ්වෙත"
+        ]
+    },
+    "ooui-dialog-action-close": "Zavřít",
+    "ooui-outline-control-move-down": "Přesunout položku dolů",
+    "ooui-outline-control-move-up": "Přesunout položku nahoru",
+    "ooui-outline-control-remove": "Odstranit položku",
+    "ooui-toolbar-more": "Další"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/cu.json b/resources/oojs-ui/i18n/cu.json
new file mode 100644 (file)
index 0000000..55594c1
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "ОйЛ"
+        ]
+    },
+    "ooui-dialog-action-close": "ꙁакрꙑи",
+    "ooui-toolbar-more": "вѧщє"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/cy.json b/resources/oojs-ui/i18n/cy.json
new file mode 100644 (file)
index 0000000..d37912d
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "Lloffiwr",
+            "Robin Owain",
+            "ОйЛ"
+        ]
+    },
+    "ooui-dialog-action-close": "Caeer",
+    "ooui-outline-control-move-down": "Symud yr eitem lawr",
+    "ooui-outline-control-move-up": "Symud yr eitem lan",
+    "ooui-toolbar-more": "Rhagor"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/da.json b/resources/oojs-ui/i18n/da.json
new file mode 100644 (file)
index 0000000..bf47bcb
--- /dev/null
@@ -0,0 +1,17 @@
+{
+    "@metadata": {
+        "authors": [
+            "Cgtdk",
+            "Christian List",
+            "EileenSanda",
+            "Laketown",
+            "Palnatoke",
+            "Simeondahl",
+            "Tehnix"
+        ]
+    },
+    "ooui-dialog-action-close": "Luk",
+    "ooui-outline-control-move-down": "Flyt ned",
+    "ooui-outline-control-move-up": "Flyt op",
+    "ooui-toolbar-more": "Mere"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/de.json b/resources/oojs-ui/i18n/de.json
new file mode 100644 (file)
index 0000000..bed2b2c
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "@metadata": {
+        "authors": [
+            "APPER",
+            "G.Hagedorn",
+            "Inkowik",
+            "Jcornelius",
+            "Jdforrester",
+            "Kghbln",
+            "Metalhead64",
+            "Murma174",
+            "Se4598",
+            "Tomabrafix"
+        ]
+    },
+    "ooui-dialog-action-close": "Schließen",
+    "ooui-outline-control-move-down": "Element nach unten verschieben",
+    "ooui-outline-control-move-up": "Element nach oben verschieben",
+    "ooui-outline-control-remove": "Element entfernen",
+    "ooui-toolbar-more": "Mehr"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/diq.json b/resources/oojs-ui/i18n/diq.json
new file mode 100644 (file)
index 0000000..bb0ac35
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "@metadata": {
+        "authors": [
+            "Erdemaslancan",
+            "Gorizon",
+            "Kghbln",
+            "Marmase",
+            "Mirzali",
+            "Se4598"
+        ]
+    },
+    "ooui-dialog-action-close": "Racnê",
+    "ooui-outline-control-move-down": "Bendi bere cêr",
+    "ooui-outline-control-move-up": "Bendi bere cor",
+    "ooui-toolbar-more": "Zewbi"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/dsb.json b/resources/oojs-ui/i18n/dsb.json
new file mode 100644 (file)
index 0000000..0f47587
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Michawiki"
+        ]
+    },
+    "ooui-dialog-action-close": "Zacyniś",
+    "ooui-outline-control-move-down": "Element dołoj pśesunuś",
+    "ooui-outline-control-move-up": "Element górjej pśesunuś",
+    "ooui-toolbar-more": "Wěcej"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/el.json b/resources/oojs-ui/i18n/el.json
new file mode 100644 (file)
index 0000000..66051f1
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    "@metadata": {
+        "authors": [
+            "Astralnet",
+            "Dipa1965",
+            "Evropi",
+            "FocalPoint",
+            "Geraki",
+            "Glavkos",
+            "Nikosguard",
+            "Tifa93"
+        ]
+    },
+    "ooui-dialog-action-close": "Κλείσιμο",
+    "ooui-outline-control-move-down": "Μετακίνηση προς τα κάτω",
+    "ooui-outline-control-move-up": "Μετακίνηση προς τα πάνω",
+    "ooui-toolbar-more": "Περισσότερα"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/eml.json b/resources/oojs-ui/i18n/eml.json
new file mode 100644 (file)
index 0000000..5dd09f5
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Gloria sah",
+            "Lévi"
+        ]
+    },
+    "ooui-dialog-action-close": "Sèra",
+    "ooui-outline-control-move-down": "Spôsta in bâs",
+    "ooui-outline-control-move-up": "Spôsta in êlt",
+    "ooui-toolbar-more": "Êter"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/en.json b/resources/oojs-ui/i18n/en.json
new file mode 100644 (file)
index 0000000..5ff9915
--- /dev/null
@@ -0,0 +1,24 @@
+{
+    "@metadata": {
+        "authors": [
+            "Trevor Parscal",
+            "Ed Sanders",
+            "James D. Forrester",
+            "Raimond Spekking",
+            "Erik Moeller",
+            "Moriel Schottlender",
+            "Yuki Shira",
+            "Siebrand Mazeland",
+            "Rob Moen",
+            "Timo Tijhof",
+            "Roan Kattouw",
+            "Christian Williams",
+            "Amir E. Aharoni"
+        ]
+    },
+    "ooui-dialog-action-close": "Close",
+    "ooui-outline-control-move-down": "Move item down",
+    "ooui-outline-control-move-up": "Move item up",
+    "ooui-outline-control-remove": "Remove item",
+    "ooui-toolbar-more": "More"
+}
diff --git a/resources/oojs-ui/i18n/eo.json b/resources/oojs-ui/i18n/eo.json
new file mode 100644 (file)
index 0000000..51f3261
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "Happy5214",
+            "KuboF",
+            "Shirayuki",
+            "Yekrats"
+        ]
+    },
+    "ooui-dialog-action-close": "Fermi",
+    "ooui-outline-control-move-down": "Movi eron suben",
+    "ooui-outline-control-move-up": "Movi eron supren",
+    "ooui-toolbar-more": "Pli"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/es.json b/resources/oojs-ui/i18n/es.json
new file mode 100644 (file)
index 0000000..0d822bc
--- /dev/null
@@ -0,0 +1,23 @@
+{
+    "@metadata": {
+        "authors": [
+            "Armando-Martin",
+            "Aruizdr",
+            "Benfutbol10",
+            "DJ Nietzsche",
+            "Erdemaslancan",
+            "Fitoschido",
+            "Imre",
+            "Invadinado",
+            "Jdforrester",
+            "Jduranboger",
+            "PoLuX124",
+            "Ralgis",
+            "Thehelpfulone"
+        ]
+    },
+    "ooui-dialog-action-close": "Cerrar",
+    "ooui-outline-control-move-down": "Mover abajo",
+    "ooui-outline-control-move-up": "Mover arriba",
+    "ooui-toolbar-more": "Más"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/et.json b/resources/oojs-ui/i18n/et.json
new file mode 100644 (file)
index 0000000..4af8dbe
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Avjoska",
+            "Pikne"
+        ]
+    },
+    "ooui-dialog-action-close": "Sule",
+    "ooui-outline-control-move-down": "Liiguta üksust allapoole",
+    "ooui-outline-control-move-up": "Liiguta üksust ülespoole",
+    "ooui-toolbar-more": "Veel"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/eu.json b/resources/oojs-ui/i18n/eu.json
new file mode 100644 (file)
index 0000000..5d3f08b
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "An13sa",
+            "Unai Fdz. de Betoño",
+            "Xabier Armendaritz"
+        ]
+    },
+    "ooui-dialog-action-close": "Itxi",
+    "ooui-outline-control-move-down": "Mugitu itema beherantz",
+    "ooui-outline-control-move-up": "Mugitu itema gorantz",
+    "ooui-toolbar-more": "Gehiago"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/fa.json b/resources/oojs-ui/i18n/fa.json
new file mode 100644 (file)
index 0000000..3f1ad0c
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "@metadata": {
+        "authors": [
+            "Dalba",
+            "Ebraminio",
+            "Jdforrester",
+            "Ladsgroup",
+            "Mjbmr",
+            "Nojan Madinehi",
+            "Reza1615",
+            "Taha",
+            "درفش کاویانی",
+            "Armin1392"
+        ]
+    },
+    "ooui-dialog-action-close": "بستن",
+    "ooui-outline-control-move-down": "انتقال مورد به پایین",
+    "ooui-outline-control-move-up": "انتقال مورد به بالا",
+    "ooui-outline-control-remove": "حذف مورد",
+    "ooui-toolbar-more": "بیشتر"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/fi.json b/resources/oojs-ui/i18n/fi.json
new file mode 100644 (file)
index 0000000..ce2f6d0
--- /dev/null
@@ -0,0 +1,24 @@
+{
+    "@metadata": {
+        "authors": [
+            "Beluga",
+            "Crt",
+            "Harriv",
+            "Linnea",
+            "Nedergard",
+            "Nike",
+            "Olli",
+            "Pxos",
+            "Samoasambia",
+            "Silvonen",
+            "Skalman",
+            "Stryn",
+            "VezonThunder"
+        ]
+    },
+    "ooui-dialog-action-close": "Sulje",
+    "ooui-outline-control-move-down": "Siirrä kohdetta alaspäin",
+    "ooui-outline-control-move-up": "Siirrä kohdetta ylöspäin",
+    "ooui-outline-control-remove": "Poista kohde",
+    "ooui-toolbar-more": "Lisää"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/fo.json b/resources/oojs-ui/i18n/fo.json
new file mode 100644 (file)
index 0000000..00a48ff
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "EileenSanda"
+        ]
+    },
+    "ooui-dialog-action-close": "Lat aftur",
+    "ooui-outline-control-move-down": "Flyt lutin niður",
+    "ooui-outline-control-move-up": "Flyt lutin upp",
+    "ooui-toolbar-more": "Meira"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/fr.json b/resources/oojs-ui/i18n/fr.json
new file mode 100644 (file)
index 0000000..7674d2f
--- /dev/null
@@ -0,0 +1,36 @@
+{
+    "@metadata": {
+        "authors": [
+            "Automatik",
+            "Benoit Rochon",
+            "Boniface",
+            "Brunoperel",
+            "Crochet.david",
+            "DavidL",
+            "Dereckson",
+            "Gomoko",
+            "Guillom",
+            "Hello71",
+            "Jean-Frédéric",
+            "Linedwell",
+            "Ltrlg",
+            "Metroitendo",
+            "NemesisIII",
+            "Nicolas NALLET",
+            "Npettiaux",
+            "Rastus Vernon",
+            "Seb35",
+            "Sherbrooke",
+            "Tpt",
+            "Trizek",
+            "Urhixidur",
+            "Verdy p",
+            "Wyz"
+        ]
+    },
+    "ooui-dialog-action-close": "Fermer",
+    "ooui-outline-control-move-down": "Faire descendre l’élément",
+    "ooui-outline-control-move-up": "Faire monter l’élément",
+    "ooui-outline-control-remove": "Supprimer l’élément",
+    "ooui-toolbar-more": "Plus"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/frr.json b/resources/oojs-ui/i18n/frr.json
new file mode 100644 (file)
index 0000000..ee95b8a
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "ChrisPtDe",
+            "Murma174"
+        ]
+    },
+    "ooui-dialog-action-close": "Slütj",
+    "ooui-outline-control-move-down": "Element efter onern sküüw",
+    "ooui-outline-control-move-up": "Element efter boowen sküüw",
+    "ooui-toolbar-more": "Muar"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/fur.json b/resources/oojs-ui/i18n/fur.json
new file mode 100644 (file)
index 0000000..18ea383
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Klenje",
+            "Tocaibon"
+        ]
+    },
+    "ooui-dialog-action-close": "Siere",
+    "ooui-outline-control-move-down": "sposte sot",
+    "ooui-outline-control-move-up": "sposte in su",
+    "ooui-toolbar-more": "Altri"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/gl.json b/resources/oojs-ui/i18n/gl.json
new file mode 100644 (file)
index 0000000..a029456
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "Alison",
+            "Kscanne",
+            "Toliño"
+        ]
+    },
+    "ooui-dialog-action-close": "Pechar",
+    "ooui-outline-control-move-down": "Mover o elemento abaixo",
+    "ooui-outline-control-move-up": "Mover o elemento arriba",
+    "ooui-outline-control-remove": "Eliminar o elemento",
+    "ooui-toolbar-more": "Máis"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/gu.json b/resources/oojs-ui/i18n/gu.json
new file mode 100644 (file)
index 0000000..65ec22b
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "Ashok modhvadia",
+            "KartikMistry",
+            "The Discoverer"
+        ]
+    },
+    "ooui-dialog-action-close": "બંધ કરો",
+    "ooui-outline-control-move-down": "વસ્તુ નીચે ખસેડો",
+    "ooui-outline-control-move-up": "વસ્તુ ઉપર ખસેડો",
+    "ooui-toolbar-more": "વધુ"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/he.json b/resources/oojs-ui/i18n/he.json
new file mode 100644 (file)
index 0000000..404dc82
--- /dev/null
@@ -0,0 +1,23 @@
+{
+    "@metadata": {
+        "authors": [
+            "Amire80",
+            "ExampleTomer",
+            "Guycn2",
+            "Matanya",
+            "Mooeypoo",
+            "Orsa",
+            "Shimmin Beg",
+            "אור שפירא",
+            "חיים",
+            "ערן",
+            "פוילישער",
+            "קיפודנחש"
+        ]
+    },
+    "ooui-dialog-action-close": "סגירה",
+    "ooui-outline-control-move-down": "להזיז את הפריט מטה",
+    "ooui-outline-control-move-up": "להזיז את הפריט מעלה",
+    "ooui-outline-control-remove": "הסרת פריט",
+    "ooui-toolbar-more": "עוד"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/hi.json b/resources/oojs-ui/i18n/hi.json
new file mode 100644 (file)
index 0000000..8b79d34
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "Ansumang",
+            "Devayon",
+            "Rajesh",
+            "Siddhartha Ghai"
+        ]
+    },
+    "ooui-dialog-action-close": "बंद करें",
+    "ooui-outline-control-move-down": "प्रविष्टि नीचे ले जाएँ",
+    "ooui-outline-control-move-up": "प्रविष्टि ऊपर ले जाएँ",
+    "ooui-toolbar-more": "अधिक"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/hr.json b/resources/oojs-ui/i18n/hr.json
new file mode 100644 (file)
index 0000000..1c3f925
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "MaGa",
+            "Roberta F.",
+            "SpeedyGonsales"
+        ]
+    },
+    "ooui-dialog-action-close": "zatvori",
+    "ooui-outline-control-move-down": "Premjesti stavku dolje",
+    "ooui-outline-control-move-up": "Premjesti stavku gore",
+    "ooui-toolbar-more": "Više mogućnosti"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/hsb.json b/resources/oojs-ui/i18n/hsb.json
new file mode 100644 (file)
index 0000000..f674cd2
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "J budissin",
+            "Michawiki"
+        ]
+    },
+    "ooui-dialog-action-close": "Začinić",
+    "ooui-outline-control-move-down": "Zapisk dele přesunyć",
+    "ooui-outline-control-move-up": "Zapisk horje přesunyć",
+    "ooui-outline-control-remove": "Zapisk wotstronić",
+    "ooui-toolbar-more": "Wjace"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/hu.json b/resources/oojs-ui/i18n/hu.json
new file mode 100644 (file)
index 0000000..b2cf2c0
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "@metadata": {
+        "authors": [
+            "Dj",
+            "Einstein2",
+            "Misibacsi",
+            "ViDam",
+            "Tacsipacsi"
+        ]
+    },
+    "ooui-dialog-action-close": "Bezár",
+    "ooui-outline-control-move-down": "Elem mozgatása lefelé",
+    "ooui-outline-control-move-up": "Elem mozgatása felfelé",
+    "ooui-outline-control-remove": "Elem eltávolítása",
+    "ooui-toolbar-more": "Tovább..."
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/hy.json b/resources/oojs-ui/i18n/hy.json
new file mode 100644 (file)
index 0000000..4cb8821
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "Vacio",
+            "Xelgen"
+        ]
+    },
+    "ooui-dialog-action-close": "Փակել",
+    "ooui-outline-control-move-down": "Իջեցնել կետը",
+    "ooui-outline-control-move-up": "Բարձրացնել կետը",
+    "ooui-outline-control-remove": "Հեռացնել տարրը",
+    "ooui-toolbar-more": "Ավելին"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ia.json b/resources/oojs-ui/i18n/ia.json
new file mode 100644 (file)
index 0000000..e335553
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "McDutchie"
+        ]
+    },
+    "ooui-dialog-action-close": "Clauder"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/id.json b/resources/oojs-ui/i18n/id.json
new file mode 100644 (file)
index 0000000..6d3ba4d
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    "@metadata": {
+        "authors": [
+            "Farras",
+            "Ilham151096",
+            "Iwan Novirion",
+            "Iyan",
+            "Kenrick95",
+            "McDutchie",
+            "Rv77ax",
+            "William Surya Permana"
+        ]
+    },
+    "ooui-dialog-action-close": "Tutup",
+    "ooui-outline-control-move-down": "Pindahkan butir ke bawah",
+    "ooui-outline-control-move-up": "Pindahkan butir ke atas",
+    "ooui-toolbar-more": "Lainnya"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ie.json b/resources/oojs-ui/i18n/ie.json
new file mode 100644 (file)
index 0000000..84d002d
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Makuba"
+        ]
+    },
+    "ooui-dialog-action-close": "Terminar",
+    "ooui-outline-control-move-down": "Mover element a infra",
+    "ooui-outline-control-move-up": "Mover element a supra",
+    "ooui-toolbar-more": "Plu"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ilo.json b/resources/oojs-ui/i18n/ilo.json
new file mode 100644 (file)
index 0000000..838face
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Lam-ang"
+        ]
+    },
+    "ooui-dialog-action-close": "Irekep",
+    "ooui-outline-control-move-down": "Ipababa ti banag",
+    "ooui-outline-control-move-up": "Ipangato ti banag",
+    "ooui-outline-control-remove": "Ikkaten ti banag",
+    "ooui-toolbar-more": "Adu pay"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/is.json b/resources/oojs-ui/i18n/is.json
new file mode 100644 (file)
index 0000000..fbdb5d1
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Maxí",
+            "Snævar"
+        ]
+    },
+    "ooui-dialog-action-close": "Loka",
+    "ooui-outline-control-move-down": "Færa atriði niður",
+    "ooui-outline-control-move-up": "Færa atriði upp",
+    "ooui-toolbar-more": "Fleira"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/it.json b/resources/oojs-ui/i18n/it.json
new file mode 100644 (file)
index 0000000..747ec79
--- /dev/null
@@ -0,0 +1,22 @@
+{
+    "@metadata": {
+        "authors": [
+            "Beta16",
+            "Darth Kule",
+            "Doc.mari",
+            "Eleonora negri",
+            "Elitre",
+            "F. Cosoleto",
+            "FRacco",
+            "Gianfranco",
+            "Minerva Titani",
+            "Raoli",
+            "Una giornata uggiosa '94"
+        ]
+    },
+    "ooui-dialog-action-close": "Chiudi",
+    "ooui-outline-control-move-down": "Sposta in basso",
+    "ooui-outline-control-move-up": "Sposta in alto",
+    "ooui-outline-control-remove": "Rimuovi elemento",
+    "ooui-toolbar-more": "Altro"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ja.json b/resources/oojs-ui/i18n/ja.json
new file mode 100644 (file)
index 0000000..c7c0851
--- /dev/null
@@ -0,0 +1,15 @@
+{
+    "@metadata": {
+        "authors": [
+            "Fryed-peach",
+            "Miya",
+            "Penn Station",
+            "Shirayuki"
+        ]
+    },
+    "ooui-dialog-action-close": "閉じる",
+    "ooui-outline-control-move-down": "項目を下に移動させる",
+    "ooui-outline-control-move-up": "項目を上に移動させる",
+    "ooui-outline-control-remove": "項目を除去",
+    "ooui-toolbar-more": "その他"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/jv.json b/resources/oojs-ui/i18n/jv.json
new file mode 100644 (file)
index 0000000..a362079
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Gleki",
+            "NoiX180",
+            "Pras"
+        ]
+    },
+    "ooui-dialog-action-close": "Tutup",
+    "ooui-outline-control-move-down": "Pindhahaken butir mangandhap"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ka.json b/resources/oojs-ui/i18n/ka.json
new file mode 100644 (file)
index 0000000..c9d2774
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    "@metadata": {
+        "authors": [
+            "BRUTE",
+            "David1010",
+            "Gleki",
+            "ITshnik",
+            "MIKHEIL",
+            "NoiX180",
+            "Pras",
+            "Tokoko"
+        ]
+    },
+    "ooui-dialog-action-close": "დახურვა",
+    "ooui-outline-control-move-down": "ელემენტის ქვემოთ გადატანა",
+    "ooui-outline-control-move-up": "ელემენტის ზემოთ გადატანა",
+    "ooui-toolbar-more": "მეტი"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/kk-cyrl.json b/resources/oojs-ui/i18n/kk-cyrl.json
new file mode 100644 (file)
index 0000000..4c27b07
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Arystanbek"
+        ]
+    },
+    "ooui-dialog-action-close": "Жабу",
+    "ooui-outline-control-move-down": "Элементті төмен жылжыту",
+    "ooui-outline-control-move-up": "Элементті жоғары жылжыту",
+    "ooui-toolbar-more": "толығырақ"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/km.json b/resources/oojs-ui/i18n/km.json
new file mode 100644 (file)
index 0000000..2013ee3
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Sovichet"
+        ]
+    },
+    "ooui-dialog-action-close": "បិទ",
+    "ooui-outline-control-move-down": "រុញ​ទៅ​ក្រោម",
+    "ooui-outline-control-move-up": "រុញ​ទៅ​លើ",
+    "ooui-toolbar-more": "បន្ថែម"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/kn.json b/resources/oojs-ui/i18n/kn.json
new file mode 100644 (file)
index 0000000..4932f6d
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Vikassy"
+        ]
+    },
+    "ooui-dialog-action-close": "ಮುಚ್ಚಿ",
+    "ooui-outline-control-remove": "ವಸ್ತು ತೆಗೆ",
+    "ooui-toolbar-more": "ಹೆಚ್ಚು"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ko.json b/resources/oojs-ui/i18n/ko.json
new file mode 100644 (file)
index 0000000..25749ce
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "@metadata": {
+        "authors": [
+            "Freebiekr",
+            "Hym411",
+            "Kwj2772",
+            "LFM",
+            "아라"
+        ]
+    },
+    "ooui-dialog-action-close": "닫기",
+    "ooui-outline-control-move-down": "항목을 아래로 옮기기",
+    "ooui-outline-control-move-up": "항목을 위로 옮기기",
+    "ooui-outline-control-remove": "항목 지우기",
+    "ooui-toolbar-more": "더 보기"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/krc.json b/resources/oojs-ui/i18n/krc.json
new file mode 100644 (file)
index 0000000..f629139
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Iltever"
+        ]
+    },
+    "ooui-dialog-action-close": "Джаб",
+    "ooui-outline-control-move-down": "Элементни тюбюне кёчюр",
+    "ooui-outline-control-move-up": "Элементни башына кёчюр"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/kw.json b/resources/oojs-ui/i18n/kw.json
new file mode 100644 (file)
index 0000000..95a9b91
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "George Animal",
+            "Nrowe",
+            "Purodha"
+        ]
+    },
+    "ooui-dialog-action-close": "Degea"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ky.json b/resources/oojs-ui/i18n/ky.json
new file mode 100644 (file)
index 0000000..2d62bda
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Chorobek",
+            "George Animal",
+            "Nrowe",
+            "Tynchtyk Chorotegin",
+            "Викиней"
+        ]
+    },
+    "ooui-dialog-action-close": "Жабуу"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/lb.json b/resources/oojs-ui/i18n/lb.json
new file mode 100644 (file)
index 0000000..6359026
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    "@metadata": {
+        "authors": [
+            "Autokrator",
+            "Chorobek",
+            "Robby",
+            "Soued031",
+            "Tynchtyk Chorotegin",
+            "UV",
+            "Викиней"
+        ]
+    },
+    "ooui-dialog-action-close": "Zoumaachen",
+    "ooui-outline-control-move-down": "Element erof réckelen",
+    "ooui-outline-control-move-up": "Element erop réckelen",
+    "ooui-outline-control-remove": "Element ewechhuelen",
+    "ooui-toolbar-more": "Méi"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/lmo.json b/resources/oojs-ui/i18n/lmo.json
new file mode 100644 (file)
index 0000000..e506b7a
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Ninonino"
+        ]
+    },
+    "ooui-dialog-action-close": "Sèra",
+    "ooui-outline-control-move-down": "Spòsta 'n zó",
+    "ooui-outline-control-move-up": "Spòsta 'n sö",
+    "ooui-toolbar-more": "Amò"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/lt.json b/resources/oojs-ui/i18n/lt.json
new file mode 100644 (file)
index 0000000..db679bc
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Audriusa",
+            "Eitvys200",
+            "Mantak111"
+        ]
+    },
+    "ooui-dialog-action-close": "Uždaryti",
+    "ooui-outline-control-remove": "Šalinti elementus"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/lv.json b/resources/oojs-ui/i18n/lv.json
new file mode 100644 (file)
index 0000000..c633339
--- /dev/null
@@ -0,0 +1,15 @@
+{
+    "@metadata": {
+        "authors": [
+            "Admresdeserv.",
+            "Audriusa",
+            "Eitvys200",
+            "Papuass",
+            "PeterisP"
+        ]
+    },
+    "ooui-dialog-action-close": "Aizvērt",
+    "ooui-outline-control-move-down": "Pārvietot vienumu uz leju",
+    "ooui-outline-control-move-up": "Pārvietot vienumu uz augšu",
+    "ooui-toolbar-more": "Vairāk"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/mg.json b/resources/oojs-ui/i18n/mg.json
new file mode 100644 (file)
index 0000000..dcb5fd5
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "Jagwar"
+        ]
+    },
+    "ooui-dialog-action-close": "Hidiana"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/min.json b/resources/oojs-ui/i18n/min.json
new file mode 100644 (file)
index 0000000..55174c0
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Iwan Novirion",
+            "Jagwar"
+        ]
+    },
+    "ooui-dialog-action-close": "Tutuik"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/mk.json b/resources/oojs-ui/i18n/mk.json
new file mode 100644 (file)
index 0000000..22fd037
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "Bjankuloski06",
+            "Brest",
+            "Iwan Novirion"
+        ]
+    },
+    "ooui-dialog-action-close": "Затвори",
+    "ooui-outline-control-move-down": "Помести надолу",
+    "ooui-outline-control-move-up": "Помести нагоре",
+    "ooui-outline-control-remove": "Отстрани ставка",
+    "ooui-toolbar-more": "Повеќе"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ml.json b/resources/oojs-ui/i18n/ml.json
new file mode 100644 (file)
index 0000000..355e337
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "Kavya Manohar",
+            "Praveenp",
+            "Santhosh.thottingal",
+            "Vssun"
+        ]
+    },
+    "ooui-dialog-action-close": "അടയ്ക്കുക",
+    "ooui-outline-control-move-down": "ഇനം താഴേയ്ക്ക് മാറ്റുക",
+    "ooui-outline-control-move-up": "ഇനം മുകളിലേയ്ക്ക് മാറ്റുക",
+    "ooui-toolbar-more": "കൂടുതൽ"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/mr.json b/resources/oojs-ui/i18n/mr.json
new file mode 100644 (file)
index 0000000..d4db84f
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "@metadata": {
+        "authors": [
+            "Kaajawa",
+            "Mahitgar",
+            "Praju23",
+            "V.narsikar",
+            "Ydyashad",
+            "संतोष दहिवळ"
+        ]
+    },
+    "ooui-dialog-action-close": "बंद करा",
+    "ooui-outline-control-move-down": "घटक (आयटम) खाली सरकवा",
+    "ooui-outline-control-move-up": "घटक (आयटम) वर सरकवा",
+    "ooui-toolbar-more": "अधिक"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ms.json b/resources/oojs-ui/i18n/ms.json
new file mode 100644 (file)
index 0000000..21aef50
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Anakmalaysia",
+            "Aurora"
+        ]
+    },
+    "ooui-dialog-action-close": "Tutup",
+    "ooui-outline-control-move-down": "Alihkan perkara ke bawah",
+    "ooui-outline-control-move-up": "Alihkan perkara ke atas",
+    "ooui-toolbar-more": "Lagi"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/nap.json b/resources/oojs-ui/i18n/nap.json
new file mode 100644 (file)
index 0000000..6b0b3ec
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Chelin",
+            "Chrisportelli",
+            "PiRSquared17"
+        ]
+    },
+    "ooui-dialog-action-close": "Chiure",
+    "ooui-toolbar-more": "Atro"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/nb.json b/resources/oojs-ui/i18n/nb.json
new file mode 100644 (file)
index 0000000..7cdecaa
--- /dev/null
@@ -0,0 +1,15 @@
+{
+    "@metadata": {
+        "authors": [
+            "Danmichaelo",
+            "Event",
+            "Jeblad",
+            "Laaknor",
+            "Njardarlogar"
+        ]
+    },
+    "ooui-dialog-action-close": "Lukk",
+    "ooui-outline-control-move-down": "Flytt ned",
+    "ooui-outline-control-move-up": "Flytt opp",
+    "ooui-toolbar-more": "Mer"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/nds-nl.json b/resources/oojs-ui/i18n/nds-nl.json
new file mode 100644 (file)
index 0000000..81f8a43
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Servien"
+        ]
+    },
+    "ooui-dialog-action-close": "Sluten",
+    "ooui-outline-control-move-down": "Onderwarp ummeneer zetten",
+    "ooui-outline-control-move-up": "Onderwarp umhoge zetten"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/nds.json b/resources/oojs-ui/i18n/nds.json
new file mode 100644 (file)
index 0000000..d0806d0
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Zylbath"
+        ]
+    },
+    "ooui-dialog-action-close": "Dichtmaken",
+    "ooui-outline-control-move-down": "Element na ünnen schuven",
+    "ooui-outline-control-move-up": "Element na baven schuven",
+    "ooui-toolbar-more": "Mehr"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ne.json b/resources/oojs-ui/i18n/ne.json
new file mode 100644 (file)
index 0000000..ae948c6
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "RajeshPandey",
+            "सरोज कुमार ढकाल"
+        ]
+    }
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/nl.json b/resources/oojs-ui/i18n/nl.json
new file mode 100644 (file)
index 0000000..549fad2
--- /dev/null
@@ -0,0 +1,27 @@
+{
+    "@metadata": {
+        "authors": [
+            "Bluyten",
+            "Breghtje",
+            "Catrope",
+            "Flightmare",
+            "Hansmuller",
+            "Jdforrester",
+            "Keegan",
+            "Konovalov",
+            "RajeshPandey",
+            "Romaine",
+            "SPQRobin",
+            "Saruman",
+            "Siebrand",
+            "Southparkfan",
+            "सरोज कुमार ढकाल",
+            "Sjoerddebruin"
+        ]
+    },
+    "ooui-dialog-action-close": "Sluiten",
+    "ooui-outline-control-move-down": "Item omlaag verplaatsen",
+    "ooui-outline-control-move-up": "Item omhoog verplaatsen",
+    "ooui-outline-control-remove": "Item verwijderen",
+    "ooui-toolbar-more": "Meer"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/nn.json b/resources/oojs-ui/i18n/nn.json
new file mode 100644 (file)
index 0000000..dd86f5e
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Jeblad",
+            "Njardarlogar"
+        ]
+    },
+    "ooui-dialog-action-close": "Lat att",
+    "ooui-outline-control-move-down": "Flytt element ned",
+    "ooui-outline-control-move-up": "Flytt element opp",
+    "ooui-toolbar-more": "Fleire"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/om.json b/resources/oojs-ui/i18n/om.json
new file mode 100644 (file)
index 0000000..cd22c40
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "Cedric31",
+            "Tumsaa"
+        ]
+    },
+    "ooui-dialog-action-close": "Cufi",
+    "ooui-outline-control-move-down": "Gad buusi",
+    "ooui-outline-control-move-up": "Ol baasi",
+    "ooui-outline-control-remove": "Balleessi",
+    "ooui-toolbar-more": "Dabalata"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/or.json b/resources/oojs-ui/i18n/or.json
new file mode 100644 (file)
index 0000000..35721a1
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Odisha1",
+            "Psubhashish",
+            "ଶିତିକଣ୍ଠ ଦାଶ"
+        ]
+    },
+    "ooui-dialog-action-close": "ବନ୍ଦ କରିବେ"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/pa.json b/resources/oojs-ui/i18n/pa.json
new file mode 100644 (file)
index 0000000..6c76d7f
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Amikeco",
+            "Babanwalia",
+            "Bouron",
+            "Nasir8891"
+        ]
+    },
+    "ooui-dialog-action-close": "বন্ধ"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/pfl.json b/resources/oojs-ui/i18n/pfl.json
new file mode 100644 (file)
index 0000000..40cc15d
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Manuae"
+        ]
+    },
+    "ooui-dialog-action-close": "Schließe",
+    "ooui-outline-control-move-down": "Bweeschs nunna",
+    "ooui-outline-control-move-up": "Bweeschs nuff",
+    "ooui-outline-control-remove": "Leschs",
+    "ooui-toolbar-more": "Mea"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/pl.json b/resources/oojs-ui/i18n/pl.json
new file mode 100644 (file)
index 0000000..8798603
--- /dev/null
@@ -0,0 +1,24 @@
+{
+    "@metadata": {
+        "authors": [
+            "Babanwalia",
+            "Chrumps",
+            "Matma Rex",
+            "Mikołka",
+            "Nasir8891",
+            "Odie2",
+            "Rzuwig",
+            "Tar Lócesilion",
+            "Ty221",
+            "WTM",
+            "Woytecr",
+            "Wpedzich",
+            "Jacenty359"
+        ]
+    },
+    "ooui-dialog-action-close": "Zamknij",
+    "ooui-outline-control-move-down": "Przenieś niżej",
+    "ooui-outline-control-move-up": "Przenieś wyżej",
+    "ooui-outline-control-remove": "Usuń przedmiot",
+    "ooui-toolbar-more": "Więcej"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/pms.json b/resources/oojs-ui/i18n/pms.json
new file mode 100644 (file)
index 0000000..bb8f113
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "Borichèt",
+            "Dragonòt",
+            "පසිඳු කාවින්ද"
+        ]
+    },
+    "ooui-dialog-action-close": "Saré",
+    "ooui-outline-control-move-down": "Fé calé giù l'element",
+    "ooui-outline-control-move-up": "Fé monté l'element",
+    "ooui-toolbar-more": "Ëd pi"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ps.json b/resources/oojs-ui/i18n/ps.json
new file mode 100644 (file)
index 0000000..4f21707
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Ahmed-Najib-Biabani-Ibrahimkhel"
+        ]
+    },
+    "ooui-dialog-action-close": "تړل",
+    "ooui-outline-control-move-down": "توکی ښکته راوړل",
+    "ooui-outline-control-move-up": "توکی پورته راوړل",
+    "ooui-toolbar-more": "نور"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/pt-br.json b/resources/oojs-ui/i18n/pt-br.json
new file mode 100644 (file)
index 0000000..f758660
--- /dev/null
@@ -0,0 +1,19 @@
+{
+    "@metadata": {
+        "authors": [
+            "Cainamarques",
+            "Dianakc",
+            "Fúlvio",
+            "Helder.wiki",
+            "HenriqueCrang",
+            "Jaideraf",
+            "Luckas",
+            "OTAVIO1981",
+            555
+        ]
+    },
+    "ooui-dialog-action-close": "Fechar",
+    "ooui-outline-control-move-down": "Mover item para baixo",
+    "ooui-outline-control-move-up": "Mover item para cima",
+    "ooui-toolbar-more": "Mais"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/pt.json b/resources/oojs-ui/i18n/pt.json
new file mode 100644 (file)
index 0000000..53b5280
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "@metadata": {
+        "authors": [
+            "Cainamarques",
+            "Fúlvio",
+            "GoEThe",
+            "Hamilton Abreu",
+            "Helder.wiki",
+            "Jaideraf",
+            "Jdforrester",
+            "Luckas",
+            "Vitorvicentevalente",
+            "SandroHc"
+        ]
+    },
+    "ooui-dialog-action-close": "Fechar",
+    "ooui-outline-control-move-down": "Mover item para baixo",
+    "ooui-outline-control-move-up": "Mover item para cima",
+    "ooui-outline-control-remove": "Remover elemento",
+    "ooui-toolbar-more": "Mais"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/qqq.json b/resources/oojs-ui/i18n/qqq.json
new file mode 100644 (file)
index 0000000..75bbec4
--- /dev/null
@@ -0,0 +1,27 @@
+{
+    "@metadata": {
+        "authors": [
+            "Amire80",
+            "Beta16",
+            "Erik Moeller",
+            "Jdforrester",
+            "Lloffiwr",
+            "Mooeypoo",
+            "Mormegil",
+            "Nike",
+            "PoLuX124",
+            "Purodha",
+            "Raymond",
+            "Sagan",
+            "Sayak Sarkar",
+            "Shirayuki",
+            "Siebrand",
+            "Trevor Parscal"
+        ]
+    },
+    "ooui-dialog-action-close": "Label text for button to exit from dialog.\n\n{{Identical|Close}}",
+    "ooui-outline-control-move-down": "Tool tip for a button that moves items in a list down one place",
+    "ooui-outline-control-move-up": "Tool tip for a button that moves items in a list up one place",
+    "ooui-outline-control-remove": "Tool tip for a button that removes items from a list.\n{{Identical|Remove item}}",
+    "ooui-toolbar-more": "Label for the toolbar group that contains a list of all other available tools.\n{{Identical|More}}"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/qu.json b/resources/oojs-ui/i18n/qu.json
new file mode 100644 (file)
index 0000000..9a412f5
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "AlimanRuna"
+        ]
+    },
+    "ooui-dialog-action-close": "Wichq'ay",
+    "ooui-outline-control-move-down": "Qallawata uraykuchiy",
+    "ooui-outline-control-move-up": "Qallawata huqariy",
+    "ooui-toolbar-more": "Aswan"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ro.json b/resources/oojs-ui/i18n/ro.json
new file mode 100644 (file)
index 0000000..4892975
--- /dev/null
@@ -0,0 +1,15 @@
+{
+    "@metadata": {
+        "authors": [
+            "AlimanRuna",
+            "Firilacroco",
+            "Minisarm",
+            "Stelistcristi"
+        ]
+    },
+    "ooui-dialog-action-close": "Închide",
+    "ooui-outline-control-move-down": "Mută elementul mai jos",
+    "ooui-outline-control-move-up": "Mută elementul mai sus",
+    "ooui-outline-control-remove": "Elimină elementul",
+    "ooui-toolbar-more": "Mai mult"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/roa-tara.json b/resources/oojs-ui/i18n/roa-tara.json
new file mode 100644 (file)
index 0000000..c7699d6
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Joetaras"
+        ]
+    },
+    "ooui-dialog-action-close": "Achiude",
+    "ooui-outline-control-move-down": "Spuèste 'a vôsce sotte",
+    "ooui-outline-control-move-up": "Spuèste 'a vôsce sus",
+    "ooui-toolbar-more": "De cchiù"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ru.json b/resources/oojs-ui/i18n/ru.json
new file mode 100644 (file)
index 0000000..f6e76a6
--- /dev/null
@@ -0,0 +1,26 @@
+{
+    "@metadata": {
+        "authors": [
+            "Amire80",
+            "DR",
+            "Eugrus",
+            "Iluvatar",
+            "KPu3uC B Poccuu",
+            "Kalan",
+            "MaxBioHazard",
+            "NBS",
+            "Niklem",
+            "Okras",
+            "Ole Yves",
+            "Putnik",
+            "Sunpriat",
+            "Yury Katkov",
+            "Умар"
+        ]
+    },
+    "ooui-dialog-action-close": "Закрыть",
+    "ooui-outline-control-move-down": "Переместить элемент вниз",
+    "ooui-outline-control-move-up": "Переместить элемент вверх",
+    "ooui-outline-control-remove": "Удалить пункт",
+    "ooui-toolbar-more": "Ещё"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/sah.json b/resources/oojs-ui/i18n/sah.json
new file mode 100644 (file)
index 0000000..9b3fcc8
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Gazeb",
+            "HalanTul"
+        ]
+    },
+    "ooui-dialog-action-close": "Сап"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/scn.json b/resources/oojs-ui/i18n/scn.json
new file mode 100644 (file)
index 0000000..a699911
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "Gazeb",
+            "Gmelfi",
+            "HalanTul"
+        ]
+    },
+    "ooui-dialog-action-close": "Chiùi",
+    "ooui-outline-control-move-down": "Sposta di sutta",
+    "ooui-outline-control-move-up": "Sposta di supra",
+    "ooui-toolbar-more": "Àutri cosi"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/sco.json b/resources/oojs-ui/i18n/sco.json
new file mode 100644 (file)
index 0000000..dc3f1f5
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "@metadata": {
+        "authors": [
+            "John Reid"
+        ]
+    },
+    "ooui-outline-control-remove": "Remuiv eitem"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/sh.json b/resources/oojs-ui/i18n/sh.json
new file mode 100644 (file)
index 0000000..5e29980
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "OC Ripper"
+        ]
+    },
+    "ooui-dialog-action-close": "Zatvori",
+    "ooui-outline-control-move-down": "Pomakni stavku dolje",
+    "ooui-outline-control-move-up": "Pomakni stavku gore"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/si.json b/resources/oojs-ui/i18n/si.json
new file mode 100644 (file)
index 0000000..cf7a9fd
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Singhalawap",
+            "පසිඳු කාවින්ද",
+            "ශ්වෙත"
+        ]
+    },
+    "ooui-dialog-action-close": "නිමවන්න",
+    "ooui-outline-control-move-down": "අයිතමය පහලටදමන්න",
+    "ooui-outline-control-move-up": "අයිතමය ඉහලටදමන්න"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/sk.json b/resources/oojs-ui/i18n/sk.json
new file mode 100644 (file)
index 0000000..60b6f43
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Mimarik",
+            "Teslaton"
+        ]
+    },
+    "ooui-dialog-action-close": "Zatvoriť",
+    "ooui-outline-control-move-down": "Posunúť položku nadol",
+    "ooui-outline-control-move-up": "Posunúť položku nahor",
+    "ooui-toolbar-more": "Viac"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/sl.json b/resources/oojs-ui/i18n/sl.json
new file mode 100644 (file)
index 0000000..b14d47b
--- /dev/null
@@ -0,0 +1,15 @@
+{
+    "@metadata": {
+        "authors": [
+            "Dbc334",
+            "Eleassar",
+            "Pinky sl",
+            "Yerpo"
+        ]
+    },
+    "ooui-dialog-action-close": "Zapri",
+    "ooui-outline-control-move-down": "Prestavi predmet nižje",
+    "ooui-outline-control-move-up": "Prestavi predmet višje",
+    "ooui-outline-control-remove": "Odstrani vnos",
+    "ooui-toolbar-more": "Več"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/sq.json b/resources/oojs-ui/i18n/sq.json
new file mode 100644 (file)
index 0000000..24a5af2
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "Euriditi",
+            "Kushtrim",
+            "Elioqoshi"
+        ]
+    },
+    "ooui-dialog-action-close": "Mbylle",
+    "ooui-outline-control-move-down": "Zhvendose artikullin më poshtë",
+    "ooui-outline-control-move-up": "Zhvendose artikullin më lart",
+    "ooui-outline-control-remove": "Hiq artikullin",
+    "ooui-toolbar-more": "Më tepër..."
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/sr-ec.json b/resources/oojs-ui/i18n/sr-ec.json
new file mode 100644 (file)
index 0000000..7eaaacd
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "Milicevic01",
+            "Nikola Smolenski",
+            "Милан Јелисавчић"
+        ]
+    },
+    "ooui-dialog-action-close": "Затвори",
+    "ooui-outline-control-move-down": "Премести ставку на доле",
+    "ooui-outline-control-move-up": "Премести ставку на горе",
+    "ooui-outline-control-remove": "Уклони ставку",
+    "ooui-toolbar-more": "Више"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/sv.json b/resources/oojs-ui/i18n/sv.json
new file mode 100644 (file)
index 0000000..f7d6f04
--- /dev/null
@@ -0,0 +1,22 @@
+{
+    "@metadata": {
+        "authors": [
+            "Ainali",
+            "Haxpett",
+            "Jopparn",
+            "Knuckles",
+            "Magol",
+            "Milicevic01",
+            "Per",
+            "Sendelbach",
+            "Skalman",
+            "WikiPhoenix",
+            "Lokal Profil"
+        ]
+    },
+    "ooui-dialog-action-close": "Stäng",
+    "ooui-outline-control-move-down": "Flytta ned objekt",
+    "ooui-outline-control-move-up": "Flytta upp objekt",
+    "ooui-outline-control-remove": "Ta bort objekt",
+    "ooui-toolbar-more": "Mer"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/sw.json b/resources/oojs-ui/i18n/sw.json
new file mode 100644 (file)
index 0000000..1c61b06
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Lloffiwr",
+            "Muddyb Blast Producer"
+        ]
+    },
+    "ooui-dialog-action-close": "Funga",
+    "ooui-outline-control-move-down": "Sogeza kipengee chini",
+    "ooui-outline-control-move-up": "Sogeza kipengee juu",
+    "ooui-toolbar-more": "Zaidi"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ta.json b/resources/oojs-ui/i18n/ta.json
new file mode 100644 (file)
index 0000000..a9795fd
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Jayarathina",
+            "Sank",
+            "Shanmugamp7",
+            "மதனாஹரன்"
+        ]
+    },
+    "ooui-dialog-action-close": "மூடுக"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/te.json b/resources/oojs-ui/i18n/te.json
new file mode 100644 (file)
index 0000000..a1f1285
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "Arjunaraoc",
+            "Jayarathina",
+            "Sank",
+            "Shanmugamp7",
+            "Veeven",
+            "Visdaviva",
+            "மதனாஹரன்"
+        ]
+    },
+    "ooui-dialog-action-close": "మూయి"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/th.json b/resources/oojs-ui/i18n/th.json
new file mode 100644 (file)
index 0000000..b7ee05a
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Supasate",
+            "Taweetham"
+        ]
+    },
+    "ooui-dialog-action-close": "ปิด",
+    "ooui-outline-control-move-down": "เลื่อนรายการลง",
+    "ooui-outline-control-move-up": "ย้ายรายการขึ้น"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/tl.json b/resources/oojs-ui/i18n/tl.json
new file mode 100644 (file)
index 0000000..a073882
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "AnakngAraw",
+            "Sky Harbor"
+        ]
+    },
+    "ooui-dialog-action-close": "Isara",
+    "ooui-outline-control-move-down": "Ilipat ang aytem pababa",
+    "ooui-outline-control-move-up": "Ilipat ang aytem pataas",
+    "ooui-toolbar-more": "Marami pa"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/tr.json b/resources/oojs-ui/i18n/tr.json
new file mode 100644 (file)
index 0000000..94d34a2
--- /dev/null
@@ -0,0 +1,17 @@
+{
+    "@metadata": {
+        "authors": [
+            "Emperyan",
+            "Incelemeelemani",
+            "LuCKY",
+            "Maidis",
+            "Rapsar",
+            "Talha Samil Cakir",
+            "TurkishStyles"
+        ]
+    },
+    "ooui-dialog-action-close": "Kapat",
+    "ooui-outline-control-move-down": "Ögeyi aşağı taşı",
+    "ooui-outline-control-move-up": "Ögeyi yukarı taşı",
+    "ooui-toolbar-more": "Daha fazla"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/tt-cyrl.json b/resources/oojs-ui/i18n/tt-cyrl.json
new file mode 100644 (file)
index 0000000..1c0bd90
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "@metadata": {
+        "authors": [
+            "Ajdar"
+        ]
+    },
+    "ooui-dialog-action-close": "Ябу",
+    "ooui-outline-control-move-down": "Элементны аска күчерү",
+    "ooui-outline-control-move-up": "Элементны өскә күчерү"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/ug-arab.json b/resources/oojs-ui/i18n/ug-arab.json
new file mode 100644 (file)
index 0000000..efba086
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Sahran",
+            "Tel'et",
+            "Tifinaghes"
+        ]
+    }
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/uk.json b/resources/oojs-ui/i18n/uk.json
new file mode 100644 (file)
index 0000000..42487c9
--- /dev/null
@@ -0,0 +1,25 @@
+{
+    "@metadata": {
+        "authors": [
+            "AS",
+            "Aced",
+            "Ahonc",
+            "Andriykopanytsia",
+            "Base",
+            "Perohanych",
+            "RLuts",
+            "Sahran",
+            "Sergento",
+            "Steve.rusyn",
+            "SteveR",
+            "Tel'et",
+            "Tifinaghes",
+            "Ата"
+        ]
+    },
+    "ooui-dialog-action-close": "Закрити",
+    "ooui-outline-control-move-down": "Перемістити елемент униз",
+    "ooui-outline-control-move-up": "Перемістити елемент вгору",
+    "ooui-outline-control-remove": "Видалити елемент",
+    "ooui-toolbar-more": "Більше"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/uz.json b/resources/oojs-ui/i18n/uz.json
new file mode 100644 (file)
index 0000000..473fc75
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "CoderSI",
+            "Noor2020",
+            "Sociologist",
+            "පසිඳු කාවින්ද"
+        ]
+    },
+    "ooui-dialog-action-close": "Yopish",
+    "ooui-outline-control-move-down": "Elementni pastga koʻchirish",
+    "ooui-outline-control-move-up": "Elementni yuqoriga koʻchirish",
+    "ooui-toolbar-more": "Yana"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/vec.json b/resources/oojs-ui/i18n/vec.json
new file mode 100644 (file)
index 0000000..01833f7
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "@metadata": {
+        "authors": [
+            "Candalua",
+            "GatoSelvadego"
+        ]
+    },
+    "ooui-dialog-action-close": "Sara",
+    "ooui-outline-control-move-down": "Sposta in baso",
+    "ooui-outline-control-move-up": "Sposta in sima",
+    "ooui-toolbar-more": "Altro"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/vi.json b/resources/oojs-ui/i18n/vi.json
new file mode 100644 (file)
index 0000000..342ad6f
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "@metadata": {
+        "authors": [
+            "Cheers!",
+            "Jdforrester",
+            "Minh Nguyen"
+        ]
+    },
+    "ooui-dialog-action-close": "Đóng",
+    "ooui-outline-control-move-down": "Chuyển mục xuống",
+    "ooui-outline-control-move-up": "Chuyển mục lên",
+    "ooui-outline-control-remove": "Xóa khoản",
+    "ooui-toolbar-more": "Thêm"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/vo.json b/resources/oojs-ui/i18n/vo.json
new file mode 100644 (file)
index 0000000..2ed7e2f
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Malafaya"
+        ]
+    },
+    "ooui-dialog-action-close": "Färmükön",
+    "ooui-toolbar-more": "Pluikos"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/wuu.json b/resources/oojs-ui/i18n/wuu.json
new file mode 100644 (file)
index 0000000..72aa48b
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "@metadata": {
+        "authors": [
+            "Malafaya",
+            "十弌"
+        ]
+    },
+    "ooui-toolbar-more": "還多"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/yi.json b/resources/oojs-ui/i18n/yi.json
new file mode 100644 (file)
index 0000000..ab5c510
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "@metadata": {
+        "authors": [
+            "Malafaya",
+            "פוילישער",
+            "十弌"
+        ]
+    },
+    "ooui-dialog-action-close": "שליסן",
+    "ooui-outline-control-move-down": "רוקן עלעמענט אראפ",
+    "ooui-outline-control-move-up": "רוקן עלעמענט ארויף",
+    "ooui-toolbar-more": "נאך"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/yo.json b/resources/oojs-ui/i18n/yo.json
new file mode 100644 (file)
index 0000000..f71d3dd
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "@metadata": {
+        "authors": [
+            "Demmy"
+        ]
+    },
+    "ooui-dialog-action-close": "Ìpadé",
+    "ooui-outline-control-move-down": "Sún onítòún sí sàlẹ̀",
+    "ooui-outline-control-move-up": "Sún onítòún s'ókè",
+    "ooui-toolbar-more": "Míràn"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/zh-hans.json b/resources/oojs-ui/i18n/zh-hans.json
new file mode 100644 (file)
index 0000000..58e8ebe
--- /dev/null
@@ -0,0 +1,26 @@
+{
+    "@metadata": {
+        "authors": [
+            "Anakmalaysia",
+            "Bencmq",
+            "Demmy",
+            "Hydra",
+            "Hzy980512",
+            "Liangent",
+            "Liuxinyu970226",
+            "Qiyue2001",
+            "Shirayuki",
+            "Shizhao",
+            "TianyinLee",
+            "Xiaomingyan",
+            "Yfdyh000",
+            "Zhangjintao",
+            "乌拉跨氪"
+        ]
+    },
+    "ooui-dialog-action-close": "关闭",
+    "ooui-outline-control-move-down": "下移项",
+    "ooui-outline-control-move-up": "上移项",
+    "ooui-outline-control-remove": "移除项",
+    "ooui-toolbar-more": "更多"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/zh-hant.json b/resources/oojs-ui/i18n/zh-hant.json
new file mode 100644 (file)
index 0000000..6e7b12e
--- /dev/null
@@ -0,0 +1,23 @@
+{
+    "@metadata": {
+        "authors": [
+            "Anakmalaysia",
+            "Ch.Andrew",
+            "Hydra",
+            "Justincheng12345",
+            "Liflon",
+            "Liuxinyu970226",
+            "Qiyue2001",
+            "Radish10cm",
+            "Shirayuki",
+            "Simon Shek",
+            "Spring Roll Conan",
+            "Waihorace"
+        ]
+    },
+    "ooui-dialog-action-close": "關閉",
+    "ooui-outline-control-move-down": "向下移項",
+    "ooui-outline-control-move-up": "向上移項",
+    "ooui-outline-control-remove": "移除項",
+    "ooui-toolbar-more": "更多"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/zh-hk.json b/resources/oojs-ui/i18n/zh-hk.json
new file mode 100644 (file)
index 0000000..60e8fbd
--- /dev/null
@@ -0,0 +1,4 @@
+{
+    "@metadata": [],
+    "ooui-dialog-action-close": "關閉"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/i18n/zh-tw.json b/resources/oojs-ui/i18n/zh-tw.json
new file mode 100644 (file)
index 0000000..f7987e5
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "@metadata": [],
+    "ooui-dialog-action-close": "關閉",
+    "ooui-outline-control-move-down": "向下移",
+    "ooui-outline-control-move-up": "向上移",
+    "ooui-toolbar-more": "更多"
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/images/fade-down.png b/resources/oojs-ui/images/fade-down.png
new file mode 100644 (file)
index 0000000..50c7931
Binary files /dev/null and b/resources/oojs-ui/images/fade-down.png differ
diff --git a/resources/oojs-ui/images/fade-up.png b/resources/oojs-ui/images/fade-up.png
new file mode 100644 (file)
index 0000000..7a0cb87
Binary files /dev/null and b/resources/oojs-ui/images/fade-up.png differ
diff --git a/resources/oojs-ui/images/icons/accept.png b/resources/oojs-ui/images/icons/accept.png
new file mode 100644 (file)
index 0000000..1075110
Binary files /dev/null and b/resources/oojs-ui/images/icons/accept.png differ
diff --git a/resources/oojs-ui/images/icons/accept.svg b/resources/oojs-ui/images/icons/accept.svg
new file mode 100644 (file)
index 0000000..df78186
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="apply" style="opacity:0.75;">
+       <polygon id="check" style="fill-rule:evenodd;clip-rule:evenodd;" points="19.062,5.139 17.418,4 8.867,16.357 5.413,12.903 4,14.316 9.021,19.338"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/add-item.png b/resources/oojs-ui/images/icons/add-item.png
new file mode 100644 (file)
index 0000000..5cf353f
Binary files /dev/null and b/resources/oojs-ui/images/icons/add-item.png differ
diff --git a/resources/oojs-ui/images/icons/add-item.svg b/resources/oojs-ui/images/icons/add-item.svg
new file mode 100644 (file)
index 0000000..2620e76
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="apply" style="opacity:0.75;">
+       <path d="M13,8 L11,8 L11,11 L8,11 L8,13 L11,13 L11,16 L13,16 L13,13 L16,13 L16,11 L13,11 z"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/advanced.png b/resources/oojs-ui/images/icons/advanced.png
new file mode 100644 (file)
index 0000000..7f5ada5
Binary files /dev/null and b/resources/oojs-ui/images/icons/advanced.png differ
diff --git a/resources/oojs-ui/images/icons/advanced.svg b/resources/oojs-ui/images/icons/advanced.svg
new file mode 100644 (file)
index 0000000..3e87cab
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="settings" style="opacity:0.75;">
+       <path id="gear" style="fill-rule:evenodd;clip-rule:evenodd;" d="M20.869,13.476C20.948,12.994,21,12.504,21,12
+               s-0.052-0.994-0.131-1.476l-2.463-0.259c-0.149-0.556-0.367-1.082-0.648-1.57l1.558-1.924c-0.576-0.806-1.281-1.511-2.087-2.087
+               l-1.924,1.558c-0.488-0.281-1.015-0.499-1.57-0.648l-0.259-2.463C12.994,3.052,12.504,3,12,3s-0.994,0.052-1.476,0.131
+               l-0.259,2.463C9.71,5.743,9.184,5.961,8.695,6.242L6.771,4.685C5.966,5.261,5.261,5.966,4.685,6.771l1.558,1.924
+               c-0.281,0.488-0.499,1.015-0.648,1.57l-2.463,0.259C3.052,11.006,3,11.496,3,12s0.052,0.994,0.131,1.476l2.463,0.259
+               c0.149,0.556,0.367,1.082,0.648,1.57l-1.558,1.924c0.576,0.806,1.281,1.511,2.087,2.087l1.924-1.558
+               c0.488,0.281,1.015,0.499,1.57,0.648l0.259,2.463C11.006,20.948,11.496,21,12,21s0.994-0.052,1.476-0.131l0.259-2.463
+               c0.556-0.149,1.082-0.367,1.57-0.648l1.924,1.558c0.806-0.576,1.511-1.281,2.087-2.087l-1.558-1.924
+               c0.281-0.488,0.499-1.015,0.648-1.57L20.869,13.476z M12,15.998c-2.209,0-3.998-1.789-3.998-3.998S9.791,8.002,12,8.002
+               S15.998,9.791,15.998,12S14.209,15.998,12,15.998z"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/alert.png b/resources/oojs-ui/images/icons/alert.png
new file mode 100644 (file)
index 0000000..992ea2a
Binary files /dev/null and b/resources/oojs-ui/images/icons/alert.png differ
diff --git a/resources/oojs-ui/images/icons/alert.svg b/resources/oojs-ui/images/icons/alert.svg
new file mode 100644 (file)
index 0000000..886a7c0
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="alert" style="opacity:0.75;">
+       <rect id="point" x="11" y="16" style="fill-rule:evenodd;clip-rule:evenodd;" width="2" height="2"/>
+       <polygon id="stroke" style="fill-rule:evenodd;clip-rule:evenodd;" points="13.516,10 10.516,10 11,15 13,15"/>
+       <path id="triangle" d="M12.017,5.974L19.536,19H4.496L12.017,5.974 M12.017,3.5c-0.544,0-1.088,0.357-1.5,1.071L2.532,18.402 C1.707,19.831,2.382,21,4.032,21H20c1.65,0,2.325-1.169,1.5-2.599L13.517,4.572C13.104,3.857,12.561,3.5,12.017,3.5L12.017,3.5z"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/arched-arrow-ltr.png b/resources/oojs-ui/images/icons/arched-arrow-ltr.png
new file mode 100644 (file)
index 0000000..5db1c4d
Binary files /dev/null and b/resources/oojs-ui/images/icons/arched-arrow-ltr.png differ
diff --git a/resources/oojs-ui/images/icons/arched-arrow-ltr.svg b/resources/oojs-ui/images/icons/arched-arrow-ltr.svg
new file mode 100644 (file)
index 0000000..5b343a5
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="arched-arrow-ltr" style="opacity:0.75;">
+       <path id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" d="M19.925,14.937l-2.391-6.901l-1.48,2.329 c-0.964-0.845-2.699-1.85-5.513-1.823c-4.887,0.046-6.524,4.244-6.524,4.244s2.753-2.639,6.925-1.949 c1.729,0.286,3.007,1.206,3.675,1.791l-1.474,2.319L19.925,14.937z"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/arched-arrow-rtl.png b/resources/oojs-ui/images/icons/arched-arrow-rtl.png
new file mode 100644 (file)
index 0000000..7931971
Binary files /dev/null and b/resources/oojs-ui/images/icons/arched-arrow-rtl.png differ
diff --git a/resources/oojs-ui/images/icons/arched-arrow-rtl.svg b/resources/oojs-ui/images/icons/arched-arrow-rtl.svg
new file mode 100644 (file)
index 0000000..bb5f10e
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="arched-arrow-rtl" style="opacity:0.75;">
+       <path id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" d="M13.401,8.542c-2.814-0.027-4.549,0.978-5.513,1.823 l-1.48-2.329l-2.391,6.901l6.782,0.009l-1.474-2.319c0.668-0.584,1.945-1.504,3.675-1.791c4.172-0.69,6.925,1.949,6.925,1.949 S18.288,8.588,13.401,8.542z"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/check.png b/resources/oojs-ui/images/icons/check.png
new file mode 100644 (file)
index 0000000..82c3cb4
Binary files /dev/null and b/resources/oojs-ui/images/icons/check.png differ
diff --git a/resources/oojs-ui/images/icons/check.svg b/resources/oojs-ui/images/icons/check.svg
new file mode 100644 (file)
index 0000000..e67cd6c
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24" height="24" viewBox="0, 0, 24, 24">
+  <g id="check">
+    <path d="M7.105,13.473 L8.527,12.05 L10.428,13.952 L15.238,7 L16.895,8.148 L10.635,17 z" fill="#000000"/>
+  </g>
+  <defs/>
+</svg>
diff --git a/resources/oojs-ui/images/icons/clear.png b/resources/oojs-ui/images/icons/clear.png
new file mode 100644 (file)
index 0000000..697dd62
Binary files /dev/null and b/resources/oojs-ui/images/icons/clear.png differ
diff --git a/resources/oojs-ui/images/icons/clear.svg b/resources/oojs-ui/images/icons/clear.svg
new file mode 100644 (file)
index 0000000..d83eb02
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="clear" style="opacity:0.75;">
+       <path id="circle_with_strike" style="fill-rule:evenodd;clip-rule:evenodd;" d="M11.999,5.022c-3.853,0-6.977,3.124-6.977,6.978 c0,3.853,3.124,6.978,6.977,6.978c3.854,0,6.979-3.125,6.979-6.978C18.978,8.146,15.853,5.022,11.999,5.022z M6.886,12 c0-1.092,0.572-3.25,0.93-2.929l7.113,7.113c0.488,0.525-1.837,0.931-2.93,0.931C9.174,17.114,6.886,14.824,6.886,12z M16.184,14.929L9.07,7.816c-0.445-0.483,1.837-0.931,2.929-0.931c2.827,0,5.115,2.289,5.115,5.114 C17.114,13.092,16.75,15.542,16.184,14.929z"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/close.png b/resources/oojs-ui/images/icons/close.png
new file mode 100644 (file)
index 0000000..f7eed9f
Binary files /dev/null and b/resources/oojs-ui/images/icons/close.png differ
diff --git a/resources/oojs-ui/images/icons/close.svg b/resources/oojs-ui/images/icons/close.svg
new file mode 100644 (file)
index 0000000..a0118c2
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="close" style="opacity:0.75;">
+       <polygon id="x" style="fill-rule:evenodd;clip-rule:evenodd;" points="18.717,6.697 17.303,5.283 12,10.586 6.697,5.283 5.283,6.697 10.586,12 5.283,17.303 6.697,18.717 12,13.414 17.303,18.717 18.717,17.303 13.414,12            "/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/code.png b/resources/oojs-ui/images/icons/code.png
new file mode 100644 (file)
index 0000000..a5ebdbf
Binary files /dev/null and b/resources/oojs-ui/images/icons/code.png differ
diff --git a/resources/oojs-ui/images/icons/code.svg b/resources/oojs-ui/images/icons/code.svg
new file mode 100644 (file)
index 0000000..6f1ed53
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
+<g id="code" opacity="0.75">
+       <path id="left-bracket" d="M4,12v-1h1c1,0,1,0,1-1V7.614C6,7.1,6.024,6.718,6.073,6.472C6.127,6.22,6.212,6.009,6.33,5.839
+               C6.534,5.56,6.803,5.364,7.138,5.255C7.473,5.14,8.01,5,8.973,5H10v1H9.248c-0.457,0-0.77,0.191-0.936,0.408
+               C8.145,6.623,8,6.853,8,7.476v1.857c0,0.729-0.041,1.18-0.244,1.493c-0.2,0.307-0.562,0.529-1.09,0.667
+               c0.535,0.155,0.9,0.385,1.096,0.688C7.961,12.484,8,12.938,8,13.665v1.862c0,0.619,0.145,0.848,0.312,1.062
+               c0.166,0.22,0.479,0.407,0.936,0.407L10,17l0,0v1H8.973c-0.963,0-1.5-0.133-1.835-0.248c-0.335-0.109-0.604-0.307-0.808-0.591
+               c-0.118-0.165-0.203-0.374-0.257-0.625C6.024,16.283,6,15.9,6,15.387V13c0-1,0-1-1-1H4z"/>
+       <use transform="matrix(-1,0,0,1,24,0)" id="right-bracket" x="0" y="0" width="24" height="24" xlink:href="#left-bracket" />
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/collapse.png b/resources/oojs-ui/images/icons/collapse.png
new file mode 100644 (file)
index 0000000..38b796f
Binary files /dev/null and b/resources/oojs-ui/images/icons/collapse.png differ
diff --git a/resources/oojs-ui/images/icons/collapse.svg b/resources/oojs-ui/images/icons/collapse.svg
new file mode 100644 (file)
index 0000000..a89cebf
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="collapse" style="opacity:0.75;">
+       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="6.697,15.714 12,10.412 17.303,15.714 18.717,14.3 12,7.583 5.283,14.3"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/comment.png b/resources/oojs-ui/images/icons/comment.png
new file mode 100644 (file)
index 0000000..9546455
Binary files /dev/null and b/resources/oojs-ui/images/icons/comment.png differ
diff --git a/resources/oojs-ui/images/icons/comment.svg b/resources/oojs-ui/images/icons/comment.svg
new file mode 100644 (file)
index 0000000..e052935
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="comment" style="opacity:0.75;">
+       <path id="speech_bubble" style="fill-rule:evenodd;clip-rule:evenodd;" d="M15,6H9C7.343,6,6,7.344,6,9v4c0,1.656,1.343,3,3,3v3 l3-3h3c1.657,0,3-1.344,3-3V9C18,7.344,16.657,6,15,6z"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/expand.png b/resources/oojs-ui/images/icons/expand.png
new file mode 100644 (file)
index 0000000..e90aca1
Binary files /dev/null and b/resources/oojs-ui/images/icons/expand.png differ
diff --git a/resources/oojs-ui/images/icons/expand.svg b/resources/oojs-ui/images/icons/expand.svg
new file mode 100644 (file)
index 0000000..b542f5f
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="expand" style="opacity:0.75;">
+       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="17.303,8.283 12,13.586 6.697,8.283 5.283,9.697 12,16.414 18.717,9.697"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/help.png b/resources/oojs-ui/images/icons/help.png
new file mode 100644 (file)
index 0000000..dca745b
Binary files /dev/null and b/resources/oojs-ui/images/icons/help.png differ
diff --git a/resources/oojs-ui/images/icons/help.svg b/resources/oojs-ui/images/icons/help.svg
new file mode 100644 (file)
index 0000000..c68bdda
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="help" style="opacity:0.75;">
+       <path id="circle" style="fill-rule:evenodd;clip-rule:evenodd;" d="M12.001,2.085c-5.478,0-9.916,4.438-9.916,9.916 c0,5.476,4.438,9.914,9.916,9.914c5.476,0,9.914-4.438,9.914-9.914C21.915,6.523,17.477,2.085,12.001,2.085z M12.002,20.085 c-4.465,0-8.084-3.619-8.084-8.083c0-4.465,3.619-8.084,8.084-8.084c4.464,0,8.083,3.619,8.083,8.084 C20.085,16.466,16.466,20.085,12.002,20.085z"/>
+       <g id="question_mark">
+               <path id="top" style="fill-rule:evenodd;clip-rule:evenodd;" d="M11.766,6.688c-2.5,0-3.219,2.188-3.219,2.188l1.411,0.854 c0,0,0.298-0.791,0.901-1.229c0.516-0.375,1.625-0.625,2.219,0.125c0.701,0.885-0.17,1.587-1.078,2.719 C11.047,12.531,11,15,11,15h1.969c0,0,0.135-2.318,1.041-3.381c0.603-0.707,1.443-1.338,1.443-2.494S14.266,6.688,11.766,6.688z"/>
+               <rect id="bottom" x="11" y="16" style="fill-rule:evenodd;clip-rule:evenodd;" width="2" height="2"/>
+       </g>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/history.png b/resources/oojs-ui/images/icons/history.png
new file mode 100644 (file)
index 0000000..c049931
Binary files /dev/null and b/resources/oojs-ui/images/icons/history.png differ
diff --git a/resources/oojs-ui/images/icons/history.svg b/resources/oojs-ui/images/icons/history.svg
new file mode 100644 (file)
index 0000000..40c0ae3
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="history" style="opacity:0.75;">
+       <path id="clock_hands" style="fill-rule:evenodd;clip-rule:evenodd;" d="M17.26,15.076c0,0-2.385-1.935-4.005-3.062 c0.72-2.397,1.702-6.559,1.702-6.559s-4.35,5.363-4.877,6.699c-0.463,1.168,1.459,2.209,2.346,1.678 C14.326,14.383,17.26,15.076,17.26,15.076z"/>
+       <path id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" d="M12.086,2.085c-5.478,0-9.916,4.438-9.916,9.916 c0,1.783,0.476,3.454,1.301,4.898l-2.223,2.04h5.688v-5.219l-2.066,1.896c-0.55-1.088-0.866-2.312-0.866-3.615 c0-4.465,3.619-8.084,8.084-8.084c4.464,0,8.083,3.619,8.083,8.084c0,4.464-3.619,8.083-8.083,8.083 c-1.145,0-2.228-0.247-3.213-0.678l-0.833,1.634c1.235,0.557,2.602,0.874,4.045,0.874c5.476,0,9.914-4.438,9.914-9.914 C22,6.523,17.562,2.085,12.086,2.085z"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/link.png b/resources/oojs-ui/images/icons/link.png
new file mode 100644 (file)
index 0000000..7dfa268
Binary files /dev/null and b/resources/oojs-ui/images/icons/link.png differ
diff --git a/resources/oojs-ui/images/icons/link.svg b/resources/oojs-ui/images/icons/link.svg
new file mode 100644 (file)
index 0000000..dadf69c
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="link" style="opacity:0.75;">
+       <path id="right" d="M19.188,12.001c0,1.1-0.891,2.015-1.988,2.015l-4.195-0.015C13.543,15.089,13.968,16,15.002,16h3
+               C19.658,16,21,13.657,21,12s-1.342-4-2.998-4h-3c-1.034,0-1.459,0.911-1.998,1.999l4.195-0.015
+               C18.297,9.984,19.188,10.901,19.188,12.001z"/>
+       <path id="center" d="M8,12c0,0.535,0.42,1,0.938,1h6.109c0.518,0,0.938-0.465,0.938-1c0-0.534-0.42-1-0.938-1H8.938
+               C8.42,11,8,11.466,8,12z"/>
+       <path id="left" d="M4.816,11.999c0-1.1,0.891-2.015,1.988-2.015L11,9.999C10.461,8.911,10.036,8,9.002,8h-3
+               c-1.656,0-2.998,2.343-2.998,4s1.342,4,2.998,4h3c1.034,0,1.459-0.911,1.998-1.999l-4.195,0.015
+               C5.707,14.016,4.816,13.099,4.816,11.999z"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/menu.png b/resources/oojs-ui/images/icons/menu.png
new file mode 100644 (file)
index 0000000..b5ac60f
Binary files /dev/null and b/resources/oojs-ui/images/icons/menu.png differ
diff --git a/resources/oojs-ui/images/icons/menu.svg b/resources/oojs-ui/images/icons/menu.svg
new file mode 100644 (file)
index 0000000..657fab2
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="menu" style="opacity:0.75;">
+       <path id="lines" d="M6,15h12c0.553,0,1,0.447,1,1v1c0,0.553-0.447,1-1,1H6c-0.553,0-1-0.447-1-1v-1C5,15.447,5.447,15,6,15z M5,11v1
+               c0,0.553,0.447,1,1,1h12c0.553,0,1-0.447,1-1v-1c0-0.553-0.447-1-1-1H6C5.447,10,5,10.447,5,11z M5,6v1c0,0.553,0.447,1,1,1h12
+               c0.553,0,1-0.447,1-1V6c0-0.553-0.447-1-1-1H6C5.447,5,5,5.447,5,6z"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/move-ltr.png b/resources/oojs-ui/images/icons/move-ltr.png
new file mode 100644 (file)
index 0000000..ded5f05
Binary files /dev/null and b/resources/oojs-ui/images/icons/move-ltr.png differ
diff --git a/resources/oojs-ui/images/icons/move-ltr.svg b/resources/oojs-ui/images/icons/move-ltr.svg
new file mode 100644 (file)
index 0000000..a378a5d
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="move-ltr" style="opacity:0.75;">
+       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="8.935,7.181 14.237,12.483 8.935,17.786
+               10.349,19.2 17.065,12.483 10.349,5.767"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/move-rtl.png b/resources/oojs-ui/images/icons/move-rtl.png
new file mode 100644 (file)
index 0000000..fc6e62d
Binary files /dev/null and b/resources/oojs-ui/images/icons/move-rtl.png differ
diff --git a/resources/oojs-ui/images/icons/move-rtl.svg b/resources/oojs-ui/images/icons/move-rtl.svg
new file mode 100644 (file)
index 0000000..c0b334b
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="move-rtl" style="opacity:0.75;">
+       <polygon id="arrow_9_" style="fill-rule:evenodd;clip-rule:evenodd;" points="15.065,17.786 9.763,12.483 15.065,7.181
+               13.651,5.767 6.935,12.483 13.651,19.2"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/picture.png b/resources/oojs-ui/images/icons/picture.png
new file mode 100644 (file)
index 0000000..faf8af9
Binary files /dev/null and b/resources/oojs-ui/images/icons/picture.png differ
diff --git a/resources/oojs-ui/images/icons/picture.svg b/resources/oojs-ui/images/icons/picture.svg
new file mode 100644 (file)
index 0000000..078ce10
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="picture" style="opacity:0.75;">
+       <path id="frame" style="fill-rule:evenodd;clip-rule:evenodd;" d="M18,4H6C4,3.993,3,4.993,3,6.993L3.014,16C3,18,4,18.988,6,19h12
+               c2-0.012,2.994-1,3-3.006V6.993C20.994,4.993,20,3.993,18,4z M19,17H5V6h14V17z"/>
+       <polygon id="mountains" style="fill-rule:evenodd;clip-rule:evenodd;" points="6,13.5 9.5,10 11.828,12.312 10.516,13.406
+               11.391,14.438 15.5,11 18,13 18,16 6,16"/>
+       <polygon id="sky" style="fill-rule:evenodd;clip-rule:evenodd;" points="6,12 9.516,7.844 12.562,11.016 15.5,9 18,11 18,7 6,7"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/remove-item.png b/resources/oojs-ui/images/icons/remove-item.png
new file mode 100644 (file)
index 0000000..2f11db3
Binary files /dev/null and b/resources/oojs-ui/images/icons/remove-item.png differ
diff --git a/resources/oojs-ui/images/icons/remove-item.svg b/resources/oojs-ui/images/icons/remove-item.svg
new file mode 100644 (file)
index 0000000..b95e7d3
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24" height="24" viewBox="0, 0, 24, 24">
+  <g id="remove-item">
+    <path d="M8,11 L16,11 L16,13 L8,13 z" fill="#000000"/>
+  </g>
+  <defs/>
+</svg>
diff --git a/resources/oojs-ui/images/icons/remove.png b/resources/oojs-ui/images/icons/remove.png
new file mode 100644 (file)
index 0000000..d7e116c
Binary files /dev/null and b/resources/oojs-ui/images/icons/remove.png differ
diff --git a/resources/oojs-ui/images/icons/remove.svg b/resources/oojs-ui/images/icons/remove.svg
new file mode 100644 (file)
index 0000000..17c8d39
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="remove" style="opacity:0.75;">
+       <path id="trash_can" style="fill-rule:evenodd;clip-rule:evenodd;" d="M12,10h-1v6h1V10z M10,10H9v6h1V10z M14,10h-1v6h1V10z
+                M14,6V5H9v1H6v3h1v7.966l1,1.031v-0.074V18h6.984L15,17.982v0.015l1-1.031V9h1V6H14z M15,17H8V9h7V17z M16,8H7V7h9V8z"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/search.png b/resources/oojs-ui/images/icons/search.png
new file mode 100644 (file)
index 0000000..df29792
Binary files /dev/null and b/resources/oojs-ui/images/icons/search.png differ
diff --git a/resources/oojs-ui/images/icons/search.svg b/resources/oojs-ui/images/icons/search.svg
new file mode 100644 (file)
index 0000000..37feda4
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="search" style="opacity:0.75;">
+       <path id="magnifying_glass" d="M16.021,15.96l-2.374-2.375c-0.048-0.047-0.105-0.079-0.169-0.099c0.403-0.566,0.643-1.26,0.643-2.009
+               C14.12,9.557,12.563,8,10.644,8c-1.921,0-3.478,1.557-3.478,3.478c0,1.92,1.557,3.477,3.478,3.477c0.749,0,1.442-0.239,2.01-0.643
+               c0.019,0.063,0.051,0.121,0.098,0.169l2.375,2.374c0.19,0.189,0.543,0.143,0.79-0.104S16.21,16.15,16.021,15.96z M10.644,13.69
+               c-1.221,0-2.213-0.991-2.213-2.213c0-1.221,0.992-2.213,2.213-2.213c1.222,0,2.213,0.992,2.213,2.213
+               C12.856,12.699,11.865,13.69,10.644,13.69z"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/settings.png b/resources/oojs-ui/images/icons/settings.png
new file mode 100644 (file)
index 0000000..b1b35e9
Binary files /dev/null and b/resources/oojs-ui/images/icons/settings.png differ
diff --git a/resources/oojs-ui/images/icons/settings.svg b/resources/oojs-ui/images/icons/settings.svg
new file mode 100644 (file)
index 0000000..1464a79
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24" height="24" viewBox="0, 0, 24, 24">
+  <g id="settings" opacity="0.75">
+    <path d="M3,4 L6,4 L6,6 L3,6 z" fill="#000000"/>
+    <path d="M12,4 L21,4 L21,6 L12,6 z" fill="#000000"/>
+    <path d="M8,3 L10,3 C10.552,3 11,3.448 11,4 L11,6 C11,6.552 10.552,7 10,7 L8,7 C7.448,7 7,6.552 7,6 L7,4 C7,3.448 7.448,3 8,3 z" fill="#000000"/>
+    <path d="M3,11 L12,11 L12,13 L3,13 z" fill="#000000"/>
+    <path d="M18,11 L21,11 L21,13 L18,13 z" fill="#000000"/>
+    <path d="M14,10 L16,10 C16.552,10 17,10.448 17,11 L17,13 C17,13.552 16.552,14 16,14 L14,14 C13.448,14 13,13.552 13,13 L13,11 C13,10.448 13.448,10 14,10 z" fill="#000000"/>
+    <path d="M3,18 L9,18 L9,20 L3,20 z" fill="#000000"/>
+    <path d="M15,18 L21,18 L21,20 L15,20 z" fill="#000000"/>
+    <path d="M11,17 L13,17 C13.552,17 14,17.448 14,18 L14,20 C14,20.552 13.552,21 13,21 L11,21 C10.448,21 10,20.552 10,20 L10,18 C10,17.448 10.448,17 11,17 z" fill="#000000"/>
+  </g>
+  <defs/>
+</svg>
diff --git a/resources/oojs-ui/images/icons/tag.png b/resources/oojs-ui/images/icons/tag.png
new file mode 100644 (file)
index 0000000..722f4d7
Binary files /dev/null and b/resources/oojs-ui/images/icons/tag.png differ
diff --git a/resources/oojs-ui/images/icons/tag.svg b/resources/oojs-ui/images/icons/tag.svg
new file mode 100644 (file)
index 0000000..d21e5e3
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="tag" style="opacity:0.75;">
+       <path d="M18.748,11.717c0.389,0.389,0.389,1.025,0,1.414l-4.949,4.95c-0.389,0.389-1.025,0.389-1.414,0l-6.01-6.01
+               c-0.389-0.389-0.707-1.157-0.707-1.707L5.667,6c0-0.55,0.45-1,1-1h4.364c0.55,0,1.318,0.318,1.707,0.707L18.748,11.717z
+                M8.104,7.456C7.525,8.032,7.526,8.97,8.103,9.549c0.578,0.577,1.516,0.577,2.095,0.001c0.576-0.578,0.576-1.517,0-2.095
+               C9.617,6.879,8.68,6.878,8.104,7.456z"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/icons/window.png b/resources/oojs-ui/images/icons/window.png
new file mode 100644 (file)
index 0000000..3d48a3c
Binary files /dev/null and b/resources/oojs-ui/images/icons/window.png differ
diff --git a/resources/oojs-ui/images/icons/window.svg b/resources/oojs-ui/images/icons/window.svg
new file mode 100644 (file)
index 0000000..621cf2c
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
+        height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<g id="window" style="opacity:0.75;">
+       <rect id="title" x="7" y="10" width="10" height="1"/>
+       <path id="window" d="M16,19H8c-2.206,0-4-1.794-4-4V9c0-2.206,1.794-4,4-4h8c2.206,0,4,1.794,4,4v6C20,17.206,18.206,19,16,19z
+                M8,7C6.897,7,6,7.897,6,9v6c0,1.103,0.897,2,2,2h8c1.103,0,2-0.897,2-2V9c0-1.103-0.897-2-2-2H8z"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/indicators/down.png b/resources/oojs-ui/images/indicators/down.png
new file mode 100644 (file)
index 0000000..47ff54c
Binary files /dev/null and b/resources/oojs-ui/images/indicators/down.png differ
diff --git a/resources/oojs-ui/images/indicators/down.svg b/resources/oojs-ui/images/indicators/down.svg
new file mode 100644 (file)
index 0000000..c871f60
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
+        height="12px" viewBox="0 0 12 12" style="enable-background:new 0 0 12 12;" xml:space="preserve">
+<g id="down" style="opacity:0.75;">
+       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="2.023,3 5.512,8.953 9,3"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/indicators/required.png b/resources/oojs-ui/images/indicators/required.png
new file mode 100644 (file)
index 0000000..aeb35a3
Binary files /dev/null and b/resources/oojs-ui/images/indicators/required.png differ
diff --git a/resources/oojs-ui/images/indicators/required.svg b/resources/oojs-ui/images/indicators/required.svg
new file mode 100644 (file)
index 0000000..7c60ec0
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12" height="12" viewBox="0, 0, 12, 12">
+  <g id="required" opacity="0.75">
+    <path d="M7,0 L7,4.268 L10.696,2.134 L11.696,3.866 L8,6 L11.696,8.134 L10.696,9.866 L7,7.732 L7,12 L5,12 L5,7.732 L1.304,9.866 L0.304,8.134 L4,6 L0.304,3.866 L1.304,2.134 L5,4.268 L5,0 z" fill="#000000"/>
+  </g>
+  <defs/>
+</svg>
diff --git a/resources/oojs-ui/images/indicators/up.png b/resources/oojs-ui/images/indicators/up.png
new file mode 100644 (file)
index 0000000..b827f6d
Binary files /dev/null and b/resources/oojs-ui/images/indicators/up.png differ
diff --git a/resources/oojs-ui/images/indicators/up.svg b/resources/oojs-ui/images/indicators/up.svg
new file mode 100644 (file)
index 0000000..a5d7f38
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12px"
+        height="12px" viewBox="0 0 12 12" style="enable-background:new 0 0 12 12;" xml:space="preserve">
+<g id="up" style="opacity:0.75;">
+       <polygon id="arrow" style="fill-rule:evenodd;clip-rule:evenodd;" points="5.512,2.006 2,8 9.024,8                "/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/tail.svg b/resources/oojs-ui/images/tail.svg
new file mode 100644 (file)
index 0000000..4df8bb2
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="15px" height="8px" viewBox="0 0 15 8" style="enable-background:new 0 0 15 8;" xml:space="preserve">
+<g id="tail">
+       <polygon id="outline" style="fill-rule:evenodd;clip-rule:evenodd;fill:#808080;" points="7.609,2.499 2.096,8 13.125,8"/>
+       <polygon id="fill" style="fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="7.609,3 2.598,8 12.622,8"/>
+</g>
+</svg>
diff --git a/resources/oojs-ui/images/textures/pending.gif b/resources/oojs-ui/images/textures/pending.gif
new file mode 100644 (file)
index 0000000..1194eed
Binary files /dev/null and b/resources/oojs-ui/images/textures/pending.gif differ
diff --git a/resources/oojs-ui/images/textures/transparency.png b/resources/oojs-ui/images/textures/transparency.png
new file mode 100644 (file)
index 0000000..b8e36d3
Binary files /dev/null and b/resources/oojs-ui/images/textures/transparency.png differ
diff --git a/resources/oojs-ui/images/toolbar-shadow.png b/resources/oojs-ui/images/toolbar-shadow.png
new file mode 100644 (file)
index 0000000..97e8d13
Binary files /dev/null and b/resources/oojs-ui/images/toolbar-shadow.png differ
diff --git a/resources/oojs-ui/oojs-ui-apex.css b/resources/oojs-ui/oojs-ui-apex.css
new file mode 100644 (file)
index 0000000..66a8072
--- /dev/null
@@ -0,0 +1,663 @@
+.oo-ui-dialog {
+  background-color: #fff;
+  background-color: rgba(255, 255, 255, 0.5);
+  opacity: 0;
+  -webkit-transition: all 250ms ease-in-out;
+     -moz-transition: all 250ms ease-in-out;
+      -ms-transition: all 250ms ease-in-out;
+       -o-transition: all 250ms ease-in-out;
+          transition: all 250ms ease-in-out;
+}
+
+.oo-ui-dialog .oo-ui-window-frame {
+  background-color: #fff;
+  border: solid 1px #ccc;
+  border-radius: 0.5em;
+  -webkit-transform: scale(0.5);
+     -moz-transform: scale(0.5);
+      -ms-transform: scale(0.5);
+       -o-transform: scale(0.5);
+          transform: scale(0.5);
+  box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
+  -webkit-transition: all 250ms ease-in-out;
+     -moz-transition: all 250ms ease-in-out;
+      -ms-transition: all 250ms ease-in-out;
+       -o-transition: all 250ms ease-in-out;
+          transition: all 250ms ease-in-out;
+}
+
+.oo-ui-dialog-open {
+  opacity: 1;
+}
+
+.oo-ui-dialog-open .oo-ui-window-frame {
+  -webkit-transform: scale(1);
+     -moz-transform: scale(1);
+      -ms-transform: scale(1);
+       -o-transform: scale(1);
+          transform: scale(1);
+}
+
+.oo-ui-dialog-content .oo-ui-window-body {
+  box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
+}
+
+.oo-ui-toolbar-bar {
+  background: #f8fbfd;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #f1f7fb));
+  background-image: -webkit-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+  background-image: -moz-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+  background-image: -ms-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+  background-image: -o-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+  background-image: linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+  border-bottom: solid 1px #ccc;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#f1f7fb');
+}
+
+.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
+  background: none;
+  border: none;
+}
+
+.oo-ui-toolbar-shadow {
+  bottom: -9px;
+  height: 9px;
+  background-image: /* @embed */ url(images/toolbar-shadow.png);
+  opacity: 0.125;
+  -webkit-transition: opacity 500ms ease-in-out;
+     -moz-transition: opacity 500ms ease-in-out;
+      -ms-transition: opacity 500ms ease-in-out;
+       -o-transition: opacity 500ms ease-in-out;
+          transition: opacity 500ms ease-in-out;
+}
+
+.oo-ui-toolGroup {
+  border: solid 1px transparent;
+  border-radius: 0.25em;
+  -webkit-transition: border-color 300ms ease-in-out;
+     -moz-transition: border-color 300ms ease-in-out;
+      -ms-transition: border-color 300ms ease-in-out;
+       -o-transition: border-color 300ms ease-in-out;
+          transition: border-color 300ms ease-in-out;
+}
+
+.oo-ui-toolGroup:hover {
+  border-color: rgba(0, 0, 0, 0.1);
+}
+
+.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-tool-title {
+  color: #000;
+}
+
+.oo-ui-window-title {
+  color: #333;
+}
+
+.oo-ui-window-overlay {
+  font-family: sans-serif;
+  font-size: 1em;
+  line-height: 1.5em;
+}
+
+.oo-ui-buttonedElement .oo-ui-buttonedElement-button {
+  color: #333;
+}
+
+.oo-ui-buttonedElement.oo-ui-indicatedElement .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
+.oo-ui-buttonedElement.oo-ui-iconedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
+  opacity: 0.8;
+}
+
+.oo-ui-buttonedElement-frameless .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
+  -webkit-transition: opacity 200ms;
+     -moz-transition: opacity 200ms;
+      -ms-transition: opacity 200ms;
+       -o-transition: opacity 200ms;
+          transition: opacity 200ms;
+}
+
+.oo-ui-buttonedElement-frameless .oo-ui-buttonedElement-button:hover > .oo-ui-iconedElement-icon,
+.oo-ui-buttonedElement-frameless .oo-ui-buttonedElement-button:focus > .oo-ui-iconedElement-icon {
+  opacity: 1;
+}
+
+.oo-ui-buttonedElement-frameless .oo-ui-buttonedElement-button:hover > .oo-ui-labeledElement-label,
+.oo-ui-buttonedElement-frameless .oo-ui-buttonedElement-button:focus > .oo-ui-labeledElement-label {
+  color: #000;
+}
+
+.oo-ui-buttonedElement-frameless .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
+  color: #333;
+}
+
+.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
+  opacity: 0.2;
+}
+
+.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
+  color: #ccc;
+}
+
+.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
+  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
+  background: #eeeeee;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
+  background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+  background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+  background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+  background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+  background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
+  border: 1px #c9c9c9 solid;
+  border-radius: 0.3em;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
+  -webkit-transition: border-color 100ms ease-in-out;
+     -moz-transition: border-color 100ms ease-in-out;
+      -ms-transition: border-color 100ms ease-in-out;
+       -o-transition: border-color 100ms ease-in-out;
+          transition: border-color 100ms ease-in-out;
+}
+
+.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button:hover,
+.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button:focus {
+  border-color: #aaa;
+}
+
+.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
+.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
+  color: black;
+  background: #eeeeee;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
+  background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+  background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+  background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+  background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+  background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
+  border-color: #c9c9c9;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
+  box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
+}
+
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button {
+  background: #cde7f4;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
+  background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+  background-image: -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+  background-image: -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+  background-image: -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+  background-image: linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+  border: solid 1px #a6cee1;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
+}
+
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button:hover,
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button:focus {
+  border-color: #9dc2d4;
+}
+
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
+  background: #cde7f4;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
+  background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+  background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+  background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+  background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+  background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+  border: solid 1px #a6cee1;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
+}
+
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive .oo-ui-buttonedElement-button {
+  background: #daf0be;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a));
+  background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+  background-image: -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+  background-image: -ms-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+  background-image: -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+  background-image: linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+  border: solid 1px #b8d892;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');
+}
+
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive .oo-ui-buttonedElement-button:hover,
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive .oo-ui-buttonedElement-button:focus {
+  border-color: #adcb89;
+}
+
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
+  background: #daf0be;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1));
+  background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+  background-image: -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+  background-image: -ms-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+  background-image: -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+  background-image: linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+  border: solid 1px #b8d892;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');
+}
+
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button {
+  color: #d45353;
+}
+
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button,
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
+  color: #333;
+  background: #eee;
+  opacity: 0.5;
+  box-shadow: none;
+}
+
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button:hover,
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active:hover,
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed:hover,
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button:focus,
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active:focus,
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed:focus {
+  border-color: #ccc;
+  box-shadow: none;
+}
+
+.oo-ui-bookletLayout > .oo-ui-gridLayout > .oo-ui-panelLayout {
+  -webkit-transition: width 250ms ease-in-out, height 250ms ease-in-out, top 250ms ease-in-out, left 250ms ease-in-out;
+     -moz-transition: width 250ms ease-in-out, height 250ms ease-in-out, top 250ms ease-in-out, left 250ms ease-in-out;
+      -ms-transition: width 250ms ease-in-out, height 250ms ease-in-out, top 250ms ease-in-out, left 250ms ease-in-out;
+       -o-transition: width 250ms ease-in-out, height 250ms ease-in-out, top 250ms ease-in-out, left 250ms ease-in-out;
+          transition: width 250ms ease-in-out, height 250ms ease-in-out, top 250ms ease-in-out, left 250ms ease-in-out;
+}
+
+.oo-ui-bookletLayout-outlinePanel {
+  border-right: solid 1px #ddd;
+}
+
+.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
+  box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
+}
+
+.oo-ui-fieldsetLayout {
+  border: none;
+}
+
+.oo-ui-fieldsetLayout > legend.oo-ui-labeledElement-label {
+  font-size: 1.5em;
+}
+
+.oo-ui-barToolGroup .oo-ui-tool {
+  margin: -1px 0 -1px -1px;
+  border: solid 1px transparent;
+}
+
+.oo-ui-barToolGroup .oo-ui-tool:first-child {
+  border-bottom-left-radius: 0.25em;
+  border-top-left-radius: 0.25em;
+}
+
+.oo-ui-barToolGroup .oo-ui-tool:last-child {
+  margin-right: -1px;
+  border-top-right-radius: 0.25em;
+  border-bottom-right-radius: 0.25em;
+}
+
+.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
+  border-color: rgba(0, 0, 0, 0.2);
+}
+
+.oo-ui-barToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
+  background: #f8fbfd;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
+  background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  border-color: rgba(0, 0, 0, 0.2);
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
+  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+}
+
+.oo-ui-barToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+  border-left-color: rgba(0, 0, 0, 0.1);
+}
+
+.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
+  opacity: 0.8;
+}
+
+.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
+  opacity: 0.2;
+}
+
+.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
+  opacity: 0.8;
+}
+
+.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon {
+  opacity: 1;
+}
+
+.oo-ui-listToolGroup.oo-ui-popupToolGroup-active {
+  border-color: rgba(0, 0, 0, 0.2);
+}
+
+.oo-ui-listToolGroup .oo-ui-tool {
+  margin: -1px 0;
+  border: solid 1px transparent;
+}
+
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
+  background: #f8fbfd;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
+  background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  border-color: rgba(0, 0, 0, 0.1);
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
+  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+}
+
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+  border-top-color: rgba(0, 0, 0, 0.1);
+}
+
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
+  border-color: rgba(0, 0, 0, 0.2);
+}
+
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
+  border-color: rgba(0, 0, 0, 0.2);
+}
+
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
+  opacity: 0.8;
+}
+
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon {
+  opacity: 1;
+}
+
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
+  color: #ccc;
+}
+
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
+  opacity: 0.2;
+}
+
+.oo-ui-menuToolGroup {
+  border-color: rgba(0, 0, 0, 0.1);
+}
+
+.oo-ui-menuToolGroup:hover {
+  border-color: rgba(0, 0, 0, 0.2);
+}
+
+.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
+  border-color: rgba(0, 0, 0, 0.25);
+}
+
+.oo-ui-menuToolGroup .oo-ui-tool:hover {
+  background-color: #e1f3ff;
+}
+
+.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
+.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
+  opacity: 0.8;
+}
+
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+  background-color: white;
+  border: solid 1px #ccc;
+  box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
+}
+
+.oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
+  background: #f8fbfd;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
+  background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
+  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+}
+
+.oo-ui-optionWidget-highlighted {
+  background-color: #e1f3ff;
+}
+
+.oo-ui-optionWidget-selected {
+  background-color: #a7dcff;
+}
+
+.oo-ui-menuWidget {
+  margin-top: -1px;
+  background: #fff;
+  border: solid 1px #ccc;
+  border-radius: 0 0 0.25em 0.25em;
+  box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2);
+}
+
+.oo-ui-popupWidget-popup {
+  background-color: #fff;
+  border: solid 1px #ccc;
+  border-radius: 0.25em;
+  box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2);
+}
+
+.oo-ui-popupWidget-tailed .oo-ui-popupWidget-tail {
+  width: 15px;
+  height: 8px;
+  margin-left: -7px;
+  background-image: /* @embed */ url(images/tail.svg);
+}
+
+.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
+  -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+     -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+      -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+       -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+          transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+}
+
+.oo-ui-popupWidget-body {
+  box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
+}
+
+.oo-ui-buttonGroupWidget {
+  display: inline-block;
+  white-space: nowrap;
+}
+
+.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
+  background-color: transparent;
+}
+
+.oo-ui-buttonSelectWidget {
+  border-radius: 0.3em;
+}
+
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
+  margin-left: -1px;
+  border-radius: 0;
+}
+
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonedElement-button {
+  margin-left: 0;
+  border-bottom-left-radius: 0.3em;
+  border-top-left-radius: 0.3em;
+}
+
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonedElement-button {
+  border-top-right-radius: 0.3em;
+  border-bottom-right-radius: 0.3em;
+}
+
+.oo-ui-inlineMenuWidget-handle {
+  border: solid 1px rgba(0, 0, 0, 0.1);
+  border-radius: 0.25em;
+}
+
+.oo-ui-inlineMenuWidget-handle:hover {
+  border-color: rgba(0, 0, 0, 0.2);
+}
+
+.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
+.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
+  opacity: 0.8;
+}
+
+.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted {
+  background-color: #e1f3ff;
+}
+
+.oo-ui-menuSectionItemWidget {
+  color: #888;
+}
+
+.oo-ui-outlineControlsWidget {
+  background-color: #fff;
+}
+
+.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
+  opacity: 0.2;
+}
+
+.oo-ui-outlineItemWidget {
+  font-size: 1.1em;
+}
+
+.oo-ui-outlineItemWidget.oo-ui-optionWidget-selected {
+  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
+  background-color: #a7dcff;
+}
+
+.oo-ui-outlineItemWidget.oo-ui-flaggableElement-important {
+  font-weight: bold;
+}
+
+.oo-ui-outlineItemWidget.oo-ui-flaggableElement-placeholder {
+  font-style: italic;
+}
+
+.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-iconedElement-icon,
+.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-indicatedElement-indicator {
+  opacity: 0.5;
+}
+
+.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-labeledElement-label {
+  color: #777;
+}
+
+.oo-ui-searchWidget-query {
+  box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2);
+}
+
+.oo-ui-textInputWidget input,
+.oo-ui-textInputWidget textarea {
+  font-family: sans-serif;
+  font-size: 1em;
+  background-color: #fff;
+  border: solid 1px #ccc;
+  border-radius: 0.25em;
+  box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
+  -webkit-transition: border-color 200ms, box-shadow 200ms;
+     -moz-transition: border-color 200ms, box-shadow 200ms;
+      -ms-transition: border-color 200ms, box-shadow 200ms;
+       -o-transition: border-color 200ms, box-shadow 200ms;
+          transition: border-color 200ms, box-shadow 200ms;
+}
+
+.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
+  border-color: #a7dcff;
+  outline: none;
+  box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white;
+}
+
+.oo-ui-textInputWidget input[readonly],
+.oo-ui-textInputWidget textarea[readonly] {
+  color: #777;
+  text-shadow: 0 1px 1px #fff;
+}
+
+.oo-ui-textInputWidget-pending input,
+.oo-ui-textInputWidget-pending textarea {
+  background-color: transparent;
+}
+
+.oo-ui-textInputWidget.oo-ui-widget-disabled input,
+.oo-ui-textInputWidget.oo-ui-widget-disabled input:focus,
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus {
+  color: #ccc;
+  text-shadow: 0 1px 1px #fff;
+  background-color: #f3f3f3;
+  border-color: #ddd;
+}
+
+.oo-ui-toggleSwitchWidget {
+  background: #eeeeee;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
+  background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+  background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+  background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+  background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+  background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
+  border: solid 1px #ccc;
+  border-radius: 1em;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
+  box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
+}
+
+.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
+  opacity: 0.5;
+}
+
+.oo-ui-toggleSwitchWidget-grip {
+  background: #eeeeee;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
+  background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+  background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+  background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+  background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+  background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
+  border: 1px #c9c9c9 solid;
+  border-radius: 1em;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
+  box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
+}
+
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover,
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip {
+  border-color: #aaa;
+}
+
+.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
+  background: #cde7f4;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
+  background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+  background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+  background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+  background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+  background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+  border-radius: 1em;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
+  box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
+}
+
+.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
+  opacity: 1;
+}
+
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+  display: block;
+  opacity: 0;
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/oojs-ui.js b/resources/oojs-ui/oojs-ui.js
new file mode 100644 (file)
index 0000000..62453ea
--- /dev/null
@@ -0,0 +1,7957 @@
+/*!
+ * OOjs UI v0.1.0-pre (0f50cdc46c)
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2014 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: Wed Mar 19 2014 17:39:11 GMT-0700 (PDT)
+ */
+( function () {
+
+'use strict';
+/**
+ * Namespace for all classes, static methods and static properties.
+ *
+ * @class
+ * @singleton
+ */
+OO.ui = {};
+
+OO.ui.bind = $.proxy;
+
+/**
+ * @property {Object}
+ */
+OO.ui.Keys = {
+       'UNDEFINED': 0,
+       'BACKSPACE': 8,
+       'DELETE': 46,
+       'LEFT': 37,
+       'RIGHT': 39,
+       'UP': 38,
+       'DOWN': 40,
+       'ENTER': 13,
+       'END': 35,
+       'HOME': 36,
+       'TAB': 9,
+       'PAGEUP': 33,
+       'PAGEDOWN': 34,
+       'ESCAPE': 27,
+       'SHIFT': 16,
+       'SPACE': 32
+};
+
+/**
+ * Get the user's language and any fallback languages.
+ *
+ * These language codes are used to localize user interface elements in the user's language.
+ *
+ * In environments that provide a localization system, this function should be overridden to
+ * return the user's language(s). The default implementation returns English (en) only.
+ *
+ * @return {string[]} Language codes, in descending order of priority
+ */
+OO.ui.getUserLanguages = function () {
+       return [ 'en' ];
+};
+
+/**
+ * Get a value in an object keyed by language code.
+ *
+ * @param {Object.<string,Mixed>} obj Object keyed by language code
+ * @param {string|null} [lang] Language code, if omitted or null defaults to any user language
+ * @param {string} [fallback] Fallback code, used if no matching language can be found
+ * @return {Mixed} Local value
+ */
+OO.ui.getLocalValue = function ( obj, lang, fallback ) {
+       var i, len, langs;
+
+       // Requested language
+       if ( obj[lang] ) {
+               return obj[lang];
+       }
+       // Known user language
+       langs = OO.ui.getUserLanguages();
+       for ( i = 0, len = langs.length; i < len; i++ ) {
+               lang = langs[i];
+               if ( obj[lang] ) {
+                       return obj[lang];
+               }
+       }
+       // Fallback language
+       if ( obj[fallback] ) {
+               return obj[fallback];
+       }
+       // First existing language
+       for ( lang in obj ) {
+               return obj[lang];
+       }
+
+       return undefined;
+};
+
+( function () {
+
+/**
+ * Message store for the default implementation of OO.ui.msg
+ *
+ * Environments that provide a localization system should not use this, but should override
+ * OO.ui.msg altogether.
+ *
+ * @private
+ */
+var messages = {
+       // Label text for button to exit from dialog
+       'ooui-dialog-action-close': 'Close',
+       // Tool tip for a button that moves items in a list down one place
+       'ooui-outline-control-move-down': 'Move item down',
+       // Tool tip for a button that moves items in a list up one place
+       'ooui-outline-control-move-up': 'Move item up',
+       // Tool tip for a button that removes items from a list
+       'ooui-outline-control-remove': 'Remove item',
+       // Label for the toolbar group that contains a list of all other available tools
+       'ooui-toolbar-more': 'More'
+};
+
+/**
+ * Get a localized message.
+ *
+ * In environments that provide a localization system, this function should be overridden to
+ * return the message translated in the user's language. The default implementation always returns
+ * English messages.
+ *
+ * After the message key, message parameters may optionally be passed. In the default implementation,
+ * any occurrences of $1 are replaced with the first parameter, $2 with the second parameter, etc.
+ * Alternative implementations of OO.ui.msg may use any substitution system they like, as long as
+ * they support unnamed, ordered message parameters.
+ *
+ * @abstract
+ * @param {string} key Message key
+ * @param {Mixed...} [params] Message parameters
+ * @return {string} Translated message with parameters substituted
+ */
+OO.ui.msg = function ( key ) {
+       var message = messages[key], params = Array.prototype.slice.call( arguments, 1 );
+       if ( typeof message === 'string' ) {
+               // Perform $1 substitution
+               message = message.replace( /\$(\d+)/g, function ( unused, n ) {
+                       var i = parseInt( n, 10 );
+                       return params[i - 1] !== undefined ? params[i - 1] : '$' + n;
+               } );
+       } else {
+               // Return placeholder if message not found
+               message = '[' + key + ']';
+       }
+       return message;
+};
+
+/** */
+OO.ui.deferMsg = function ( key ) {
+       return function () {
+               return OO.ui.msg( key );
+       };
+};
+
+/** */
+OO.ui.resolveMsg = function ( msg ) {
+       if ( $.isFunction( msg ) ) {
+               return msg();
+       }
+       return msg;
+};
+
+} )();
+/**
+ * DOM element abstraction.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {Function} [$] jQuery for the frame the widget is in
+ * @cfg {string[]} [classes] CSS class names
+ * @cfg {jQuery} [$content] Content elements to append
+ */
+OO.ui.Element = function OoUiElement( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Properties
+       this.$ = config.$ || OO.ui.Element.getJQuery( document );
+       this.$element = this.$( this.$.context.createElement( this.getTagName() ) );
+       this.elementGroup = null;
+
+       // Initialization
+       if ( $.isArray( config.classes ) ) {
+               this.$element.addClass( config.classes.join( ' ' ) );
+       }
+       if ( config.$content ) {
+               this.$element.append( config.$content );
+       }
+};
+
+/* Static Properties */
+
+OO.ui.Element.static = {};
+
+/**
+ * HTML tag name.
+ *
+ * This may be ignored if getTagName is overridden.
+ *
+ * @static
+ * @property {string}
+ * @inheritable
+ */
+OO.ui.Element.static.tagName = 'div';
+
+/* Static Methods */
+
+/**
+ * Get a jQuery function within a specific document.
+ *
+ * @static
+ * @param {jQuery|HTMLElement|HTMLDocument|Window} context Context to bind the function to
+ * @param {OO.ui.Frame} [frame] Frame of the document context
+ * @return {Function} Bound jQuery function
+ */
+OO.ui.Element.getJQuery = function ( context, frame ) {
+       function wrapper( selector ) {
+               return $( selector, wrapper.context );
+       }
+
+       wrapper.context = this.getDocument( context );
+
+       if ( frame ) {
+               wrapper.frame = frame;
+       }
+
+       return wrapper;
+};
+
+/**
+ * Get the document of an element.
+ *
+ * @static
+ * @param {jQuery|HTMLElement|HTMLDocument|Window} obj Object to get the document for
+ * @return {HTMLDocument} Document object
+ * @throws {Error} If context is invalid
+ */
+OO.ui.Element.getDocument = function ( obj ) {
+       var doc =
+               // jQuery - selections created "offscreen" won't have a context, so .context isn't reliable
+               ( obj[0] && obj[0].ownerDocument ) ||
+               // Empty jQuery selections might have a context
+               obj.context ||
+               // HTMLElement
+               obj.ownerDocument ||
+               // Window
+               obj.document ||
+               // HTMLDocument
+               ( obj.nodeType === 9 && obj );
+
+       if ( doc ) {
+               return doc;
+       }
+
+       throw new Error( 'Invalid context' );
+};
+
+/**
+ * Get the window of an element or document.
+ *
+ * @static
+ * @param {jQuery|HTMLElement|HTMLDocument|Window} obj Context to get the window for
+ * @return {Window} Window object
+ */
+OO.ui.Element.getWindow = function ( obj ) {
+       var doc = this.getDocument( obj );
+       return doc.parentWindow || doc.defaultView;
+};
+
+/**
+ * Get the direction of an element or document.
+ *
+ * @static
+ * @param {jQuery|HTMLElement|HTMLDocument|Window} obj Context to get the direction for
+ * @return {string} Text direction, either `ltr` or `rtl`
+ */
+OO.ui.Element.getDir = function ( obj ) {
+       var isDoc, isWin;
+
+       if ( obj instanceof jQuery ) {
+               obj = obj[0];
+       }
+       isDoc = obj.nodeType === 9;
+       isWin = obj.document !== undefined;
+       if ( isDoc || isWin ) {
+               if ( isWin ) {
+                       obj = obj.document;
+               }
+               obj = obj.body;
+       }
+       return $( obj ).css( 'direction' );
+};
+
+/**
+ * Get the offset between two frames.
+ *
+ * TODO: Make this function not use recursion.
+ *
+ * @static
+ * @param {Window} from Window of the child frame
+ * @param {Window} [to=window] Window of the parent frame
+ * @param {Object} [offset] Offset to start with, used internally
+ * @return {Object} Offset object, containing left and top properties
+ */
+OO.ui.Element.getFrameOffset = function ( from, to, offset ) {
+       var i, len, frames, frame, rect;
+
+       if ( !to ) {
+               to = window;
+       }
+       if ( !offset ) {
+               offset = { 'top': 0, 'left': 0 };
+       }
+       if ( from.parent === from ) {
+               return offset;
+       }
+
+       // Get iframe element
+       frames = from.parent.document.getElementsByTagName( 'iframe' );
+       for ( i = 0, len = frames.length; i < len; i++ ) {
+               if ( frames[i].contentWindow === from ) {
+                       frame = frames[i];
+                       break;
+               }
+       }
+
+       // Recursively accumulate offset values
+       if ( frame ) {
+               rect = frame.getBoundingClientRect();
+               offset.left += rect.left;
+               offset.top += rect.top;
+               if ( from !== to ) {
+                       this.getFrameOffset( from.parent, offset );
+               }
+       }
+       return offset;
+};
+
+/**
+ * Get the offset between two elements.
+ *
+ * @static
+ * @param {jQuery} $from
+ * @param {jQuery} $to
+ * @return {Object} Translated position coordinates, containing top and left properties
+ */
+OO.ui.Element.getRelativePosition = function ( $from, $to ) {
+       var from = $from.offset(),
+               to = $to.offset();
+       return { 'top': Math.round( from.top - to.top ), 'left': Math.round( from.left - to.left ) };
+};
+
+/**
+ * Get element border sizes.
+ *
+ * @static
+ * @param {HTMLElement} el Element to measure
+ * @return {Object} Dimensions object with `top`, `left`, `bottom` and `right` properties
+ */
+OO.ui.Element.getBorders = function ( el ) {
+       var doc = el.ownerDocument,
+               win = doc.parentWindow || doc.defaultView,
+               style = win && win.getComputedStyle ?
+                       win.getComputedStyle( el, null ) :
+                       el.currentStyle,
+               $el = $( el ),
+               top = parseFloat( style ? style.borderTopWidth : $el.css( 'borderTopWidth' ) ) || 0,
+               left = parseFloat( style ? style.borderLeftWidth : $el.css( 'borderLeftWidth' ) ) || 0,
+               bottom = parseFloat( style ? style.borderBottomWidth : $el.css( 'borderBottomWidth' ) ) || 0,
+               right = parseFloat( style ? style.borderRightWidth : $el.css( 'borderRightWidth' ) ) || 0;
+
+       return {
+               'top': Math.round( top ),
+               'left': Math.round( left ),
+               'bottom': Math.round( bottom ),
+               'right': Math.round( right )
+       };
+};
+
+/**
+ * Get dimensions of an element or window.
+ *
+ * @static
+ * @param {HTMLElement|Window} el Element to measure
+ * @return {Object} Dimensions object with `borders`, `scroll`, `scrollbar` and `rect` properties
+ */
+OO.ui.Element.getDimensions = function ( el ) {
+       var $el, $win,
+               doc = el.ownerDocument || el.document,
+               win = doc.parentWindow || doc.defaultView;
+
+       if ( win === el || el === doc.documentElement ) {
+               $win = $( win );
+               return {
+                       'borders': { 'top': 0, 'left': 0, 'bottom': 0, 'right': 0 },
+                       'scroll': {
+                               'top': $win.scrollTop(),
+                               'left': $win.scrollLeft()
+                       },
+                       'scrollbar': { 'right': 0, 'bottom': 0 },
+                       'rect': {
+                               'top': 0,
+                               'left': 0,
+                               'bottom': $win.innerHeight(),
+                               'right': $win.innerWidth()
+                       }
+               };
+       } else {
+               $el = $( el );
+               return {
+                       'borders': this.getBorders( el ),
+                       'scroll': {
+                               'top': $el.scrollTop(),
+                               'left': $el.scrollLeft()
+                       },
+                       'scrollbar': {
+                               'right': $el.innerWidth() - el.clientWidth,
+                               'bottom': $el.innerHeight() - el.clientHeight
+                       },
+                       'rect': el.getBoundingClientRect()
+               };
+       }
+};
+
+/**
+ * Get closest scrollable container.
+ *
+ * Traverses up until either a scrollable element or the root is reached, in which case the window
+ * will be returned.
+ *
+ * @static
+ * @param {HTMLElement} el Element to find scrollable container for
+ * @param {string} [dimension] Dimension of scrolling to look for; `x`, `y` or omit for either
+ * @return {HTMLElement|Window} Closest scrollable container
+ */
+OO.ui.Element.getClosestScrollableContainer = function ( el, dimension ) {
+       var i, val,
+               props = [ 'overflow' ],
+               $parent = $( el ).parent();
+
+       if ( dimension === 'x' || dimension === 'y' ) {
+               props.push( 'overflow-' + dimension );
+       }
+
+       while ( $parent.length ) {
+               if ( $parent[0] === el.ownerDocument.body ) {
+                       return $parent[0];
+               }
+               i = props.length;
+               while ( i-- ) {
+                       val = $parent.css( props[i] );
+                       if ( val === 'auto' || val === 'scroll' ) {
+                               return $parent[0];
+                       }
+               }
+               $parent = $parent.parent();
+       }
+       return this.getDocument( el ).body;
+};
+
+/**
+ * Scroll element into view.
+ *
+ * @static
+ * @param {HTMLElement} el Element to scroll into view
+ * @param {Object} [config={}] Configuration config
+ * @param {string} [config.duration] jQuery animation duration value
+ * @param {string} [config.direction] Scroll in only one direction, e.g. 'x' or 'y', omit
+ *  to scroll in both directions
+ * @param {Function} [config.complete] Function to call when scrolling completes
+ */
+OO.ui.Element.scrollIntoView = function ( el, config ) {
+       // Configuration initialization
+       config = config || {};
+
+       var anim = {},
+               callback = typeof config.complete === 'function' && config.complete,
+               sc = this.getClosestScrollableContainer( el, config.direction ),
+               $sc = $( sc ),
+               eld = this.getDimensions( el ),
+               scd = this.getDimensions( sc ),
+               rel = {
+                       'top': eld.rect.top - ( scd.rect.top + scd.borders.top ),
+                       'bottom': scd.rect.bottom - scd.borders.bottom - scd.scrollbar.bottom - eld.rect.bottom,
+                       'left': eld.rect.left - ( scd.rect.left + scd.borders.left ),
+                       'right': scd.rect.right - scd.borders.right - scd.scrollbar.right - eld.rect.right
+               };
+
+       if ( !config.direction || config.direction === 'y' ) {
+               if ( rel.top < 0 ) {
+                       anim.scrollTop = scd.scroll.top + rel.top;
+               } else if ( rel.top > 0 && rel.bottom < 0 ) {
+                       anim.scrollTop = scd.scroll.top + Math.min( rel.top, -rel.bottom );
+               }
+       }
+       if ( !config.direction || config.direction === 'x' ) {
+               if ( rel.left < 0 ) {
+                       anim.scrollLeft = scd.scroll.left + rel.left;
+               } else if ( rel.left > 0 && rel.right < 0 ) {
+                       anim.scrollLeft = scd.scroll.left + Math.min( rel.left, -rel.right );
+               }
+       }
+       if ( !$.isEmptyObject( anim ) ) {
+               $sc.stop( true ).animate( anim, config.duration || 'fast' );
+               if ( callback ) {
+                       $sc.queue( function ( next ) {
+                               callback();
+                               next();
+                       } );
+               }
+       } else {
+               if ( callback ) {
+                       callback();
+               }
+       }
+};
+
+/* Methods */
+
+/**
+ * Get the HTML tag name.
+ *
+ * Override this method to base the result on instance information.
+ *
+ * @return {string} HTML tag name
+ */
+OO.ui.Element.prototype.getTagName = function () {
+       return this.constructor.static.tagName;
+};
+
+/**
+ * Get the DOM document.
+ *
+ * @return {HTMLDocument} Document object
+ */
+OO.ui.Element.prototype.getElementDocument = function () {
+       return OO.ui.Element.getDocument( this.$element );
+};
+
+/**
+ * Get the DOM window.
+ *
+ * @return {Window} Window object
+ */
+OO.ui.Element.prototype.getElementWindow = function () {
+       return OO.ui.Element.getWindow( this.$element );
+};
+
+/**
+ * Get closest scrollable container.
+ *
+ * @see #static-method-getClosestScrollableContainer
+ */
+OO.ui.Element.prototype.getClosestScrollableElementContainer = function () {
+       return OO.ui.Element.getClosestScrollableContainer( this.$element[0] );
+};
+
+/**
+ * Get group element is in.
+ *
+ * @return {OO.ui.GroupElement|null} Group element, null if none
+ */
+OO.ui.Element.prototype.getElementGroup = function () {
+       return this.elementGroup;
+};
+
+/**
+ * Set group element is in.
+ *
+ * @param {OO.ui.GroupElement|null} group Group element, null if none
+ * @chainable
+ */
+OO.ui.Element.prototype.setElementGroup = function ( group ) {
+       this.elementGroup = group;
+       return this;
+};
+
+/**
+ * Scroll element into view.
+ *
+ * @see #static-method-scrollIntoView
+ * @param {Object} [config={}]
+ */
+OO.ui.Element.prototype.scrollElementIntoView = function ( config ) {
+       return OO.ui.Element.scrollIntoView( this.$element[0], config );
+};
+
+( function () {
+       // Static
+       var specialFocusin;
+
+       function handler( e ) {
+               jQuery.event.simulate( 'focusin', e.target, jQuery.event.fix( e ), /* bubble = */ true );
+       }
+
+       specialFocusin = {
+               setup: function () {
+                       var doc = this.ownerDocument || this,
+                               attaches = $.data( doc, 'ooui-focusin-attaches' );
+                       if ( !attaches ) {
+                               doc.addEventListener( 'focus', handler, true );
+                       }
+                       $.data( doc, 'ooui-focusin-attaches', ( attaches || 0 ) + 1 );
+               },
+               teardown: function () {
+                       var doc = this.ownerDocument || this,
+                               attaches = $.data( doc, 'ooui-focusin-attaches' ) - 1;
+                       if ( !attaches ) {
+                               doc.removeEventListener( 'focus', handler, true );
+                               $.removeData( doc, 'ooui-focusin-attaches' );
+                       } else {
+                               $.data( doc, 'ooui-focusin-attaches', attaches );
+                       }
+               }
+       };
+
+       /**
+        * Bind a handler for an event on the DOM element.
+        *
+        * Uses jQuery internally for everything except for events which are
+        * known to have issues in the browser or in jQuery. This method
+        * should become obsolete eventually.
+        *
+        * @param {string} event
+        * @param {Function} callback
+        */
+       OO.ui.Element.prototype.onDOMEvent = function ( event, callback ) {
+               var orig;
+
+               if ( event === 'focusin' ) {
+                       // jQuery 1.8.3 has a bug with handling focusin events inside iframes.
+                       // Firefox doesn't support focusin at all, so we listen for 'focus' on the
+                       // document, and simulate a 'focusin' event on the target element and make
+                       // it bubble from there.
+                       //
+                       // - http://jsfiddle.net/sw3hr/
+                       // - http://bugs.jquery.com/ticket/14180
+                       // - https://github.com/jquery/jquery/commit/1cecf64e5aa4153
+
+                       // Replace jQuery's override with our own
+                       orig = $.event.special.focusin;
+                       $.event.special.focusin = specialFocusin;
+
+                       this.$element.on( event, callback );
+
+                       // Restore
+                       $.event.special.focusin = orig;
+
+               } else {
+                       this.$element.on( event, callback );
+               }
+       };
+
+       /**
+        * @param {string} event
+        * @param {Function} callback
+        */
+       OO.ui.Element.prototype.offDOMEvent = function ( event, callback ) {
+               var orig;
+               if ( event === 'focusin' ) {
+                       orig = $.event.special.focusin;
+                       $.event.special.focusin = specialFocusin;
+                       this.$element.off( event, callback );
+                       $.event.special.focusin = orig;
+               } else {
+                       this.$element.off( event, callback );
+               }
+       };
+}() );
+/**
+ * Embedded iframe with the same styles as its parent.
+ *
+ * @class
+ * @extends OO.ui.Element
+ * @mixins OO.EventEmitter
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.Frame = function OoUiFrame( config ) {
+       // Parent constructor
+       OO.ui.Frame.super.call( this, config );
+
+       // Mixin constructors
+       OO.EventEmitter.call( this );
+
+       // Properties
+       this.loading = false;
+       this.loaded = false;
+       this.config = config;
+
+       // Initialize
+       this.$element
+               .addClass( 'oo-ui-frame' )
+               .attr( { 'frameborder': 0, 'scrolling': 'no' } );
+
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.Frame, OO.ui.Element );
+
+OO.mixinClass( OO.ui.Frame, OO.EventEmitter );
+
+/* Static Properties */
+
+/**
+ * @static
+ * @inheritdoc
+ */
+OO.ui.Frame.static.tagName = 'iframe';
+
+/* Events */
+
+/**
+ * @event load
+ */
+
+/* Static Methods */
+
+/**
+ * Transplant the CSS styles from as parent document to a frame's document.
+ *
+ * This loops over the style sheets in the parent document, and copies their nodes to the
+ * frame's document. It then polls the document to see when all styles have loaded, and once they
+ * have, invokes the callback.
+ *
+ * If the styles still haven't loaded after a long time (5 seconds by default), we give up waiting
+ * and invoke the callback anyway. This protects against cases like a display: none; iframe in
+ * Firefox, where the styles won't load until the iframe becomes visible.
+ *
+ * For details of how we arrived at the strategy used in this function, see #load.
+ *
+ * @static
+ * @inheritable
+ * @param {HTMLDocument} parentDoc Document to transplant styles from
+ * @param {HTMLDocument} frameDoc Document to transplant styles to
+ * @param {Function} [callback] Callback to execute once styles have loaded
+ * @param {number} [timeout=5000] How long to wait before giving up (in ms). If 0, never give up.
+ */
+OO.ui.Frame.static.transplantStyles = function ( parentDoc, frameDoc, callback, timeout ) {
+       var i, numSheets, styleNode, newNode, timeoutID, pollNodeId, $pendingPollNodes,
+               $pollNodes = $( [] ),
+               // Fake font-family value
+               fontFamily = 'oo-ui-frame-transplantStyles-loaded';
+
+       for ( i = 0, numSheets = parentDoc.styleSheets.length; i < numSheets; i++ ) {
+               styleNode = parentDoc.styleSheets[i].ownerNode;
+               if ( callback && styleNode.nodeName.toLowerCase() === 'link' ) {
+                       // External stylesheet
+                       // Create a node with a unique ID that we're going to monitor to see when the CSS
+                       // has loaded
+                       pollNodeId = 'oo-ui-frame-transplantStyles-loaded-' + i;
+                       $pollNodes = $pollNodes.add( $( '<div>', frameDoc )
+                               .attr( 'id', pollNodeId )
+                               .appendTo( frameDoc.body )
+                       );
+
+                       // Add <style>@import url(...); #pollNodeId { font-family: ... }</style>
+                       // The font-family rule will only take effect once the @import finishes
+                       newNode = frameDoc.createElement( 'style' );
+                       newNode.textContent = '@import url(' + styleNode.href + ');\n' +
+                               '#' + pollNodeId + ' { font-family: ' + fontFamily + '; }';
+               } else {
+                       // Not an external stylesheet, or no polling required; just copy the node over
+                       newNode = frameDoc.importNode( styleNode, true );
+               }
+               frameDoc.head.appendChild( newNode );
+       }
+
+       if ( callback ) {
+               // Poll every 100ms until all external stylesheets have loaded
+               $pendingPollNodes = $pollNodes;
+               timeoutID = setTimeout( function pollExternalStylesheets() {
+                       while (
+                               $pendingPollNodes.length > 0 &&
+                               $pendingPollNodes.eq( 0 ).css( 'font-family' ) === fontFamily
+                       ) {
+                               $pendingPollNodes = $pendingPollNodes.slice( 1 );
+                       }
+
+                       if ( $pendingPollNodes.length === 0 ) {
+                               // We're done!
+                               if ( timeoutID !== null ) {
+                                       timeoutID = null;
+                                       $pollNodes.remove();
+                                       callback();
+                               }
+                       } else {
+                               timeoutID = setTimeout( pollExternalStylesheets, 100 );
+                       }
+               }, 100 );
+               // ...but give up after a while
+               if ( timeout !== 0 ) {
+                       setTimeout( function () {
+                               if ( timeoutID ) {
+                                       clearTimeout( timeoutID );
+                                       timeoutID = null;
+                                       $pollNodes.remove();
+                                       callback();
+                               }
+                       }, timeout || 5000 );
+               }
+       }
+};
+
+/* Methods */
+
+/**
+ * Load the frame contents.
+ *
+ * Once the iframe's stylesheets are loaded, the `initialize` event will be emitted.
+ *
+ * Sounds simple right? Read on...
+ *
+ * When you create a dynamic iframe using open/write/close, the window.load event for the
+ * iframe is triggered when you call close, and there's no further load event to indicate that
+ * everything is actually loaded.
+ *
+ * In Chrome, stylesheets don't show up in document.styleSheets until they have loaded, so we could
+ * just poll that array and wait for it to have the right length. However, in Firefox, stylesheets
+ * are added to document.styleSheets immediately, and the only way you can determine whether they've
+ * loaded is to attempt to access .cssRules and wait for that to stop throwing an exception. But
+ * cross-domain stylesheets never allow .cssRules to be accessed even after they have loaded.
+ *
+ * The workaround is to change all `<link href="...">` tags to `<style>@import url(...)</style>` tags.
+ * Because `@import` is blocking, Chrome won't add the stylesheet to document.styleSheets until
+ * the `@import` has finished, and Firefox won't allow .cssRules to be accessed until the `@import`
+ * has finished. And because the contents of the `<style>` tag are from the same origin, accessing
+ * .cssRules is allowed.
+ *
+ * However, now that we control the styles we're injecting, we might as well do away with
+ * browser-specific polling hacks like document.styleSheets and .cssRules, and instead inject
+ * `<style>@import url(...); #foo { font-family: someValue; }</style>`, then create `<div id="foo">`
+ * and wait for its font-family to change to someValue. Because `@import` is blocking, the font-family
+ * rule is not applied until after the `@import` finishes.
+ *
+ * All this stylesheet injection and polling magic is in #transplantStyles.
+ *
+ * @private
+ * @fires load
+ */
+OO.ui.Frame.prototype.load = function () {
+       var win = this.$element.prop( 'contentWindow' ),
+               doc = win.document,
+               frame = this;
+
+       this.loading = true;
+
+       // Figure out directionality:
+       this.dir = this.$element.closest( '[dir]' ).prop( 'dir' ) || 'ltr';
+
+       // Initialize contents
+       doc.open();
+       doc.write(
+               '<!doctype html>' +
+               '<html>' +
+                       '<body class="oo-ui-frame-body oo-ui-' + this.dir + '" style="direction:' + this.dir + ';" dir="' + this.dir + '">' +
+                               '<div class="oo-ui-frame-content"></div>' +
+                       '</body>' +
+               '</html>'
+       );
+       doc.close();
+
+       // Properties
+       this.$ = OO.ui.Element.getJQuery( doc, this );
+       this.$content = this.$( '.oo-ui-frame-content' );
+       this.$document = this.$( doc );
+
+       this.constructor.static.transplantStyles(
+               this.getElementDocument(),
+               this.$document[0],
+               function () {
+                       frame.loading = false;
+                       frame.loaded = true;
+                       frame.emit( 'load' );
+               }
+       );
+};
+
+/**
+ * Run a callback as soon as the frame has been loaded.
+ *
+ *
+ * This will start loading if it hasn't already, and runs
+ * immediately if the frame is already loaded.
+ *
+ * Don't call this until the element is attached.
+ *
+ * @param {Function} callback
+ */
+OO.ui.Frame.prototype.run = function ( callback ) {
+       if ( this.loaded ) {
+               callback();
+       } else {
+               if ( !this.loading ) {
+                       this.load();
+               }
+               this.once( 'load', callback );
+       }
+};
+
+/**
+ * Sets the size of the frame.
+ *
+ * @param {number} width Frame width in pixels
+ * @param {number} height Frame height in pixels
+ * @chainable
+ */
+OO.ui.Frame.prototype.setSize = function ( width, height ) {
+       this.$element.css( { 'width': width, 'height': height } );
+       return this;
+};
+/**
+ * Container for elements in a child frame.
+ *
+ * There are two ways to specify a title: set the static `title` property or provide a `title`
+ * property in the configuration options. The latter will override the former.
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Element
+ * @mixins OO.EventEmitter
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string|Function} [title] Title string or function that returns a string
+ * @cfg {string} [icon] Symbolic name of icon
+ * @fires initialize
+ */
+OO.ui.Window = function OoUiWindow( config ) {
+       // Parent constructor
+       OO.ui.Window.super.call( this, config );
+
+       // Mixin constructors
+       OO.EventEmitter.call( this );
+
+       // Properties
+       this.visible = false;
+       this.opening = false;
+       this.closing = false;
+       this.title = OO.ui.resolveMsg( config.title || this.constructor.static.title );
+       this.icon = config.icon || this.constructor.static.icon;
+       this.frame = new OO.ui.Frame( { '$': this.$ } );
+       this.$frame = this.$( '<div>' );
+       this.$ = function () {
+               throw new Error( 'this.$() cannot be used until the frame has been initialized.' );
+       };
+
+       // Initialization
+       this.$element
+               .addClass( 'oo-ui-window' )
+               // Hide the window using visibility: hidden; while the iframe is still loading
+               // Can't use display: none; because that prevents the iframe from loading in Firefox
+               .css( 'visibility', 'hidden' )
+               .append( this.$frame );
+       this.$frame
+               .addClass( 'oo-ui-window-frame' )
+               .append( this.frame.$element );
+
+       // Events
+       this.frame.connect( this, { 'load': 'initialize' } );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.Window, OO.ui.Element );
+
+OO.mixinClass( OO.ui.Window, OO.EventEmitter );
+
+/* Events */
+
+/**
+ * Initialize contents.
+ *
+ * Fired asynchronously after construction when iframe is ready.
+ *
+ * @event initialize
+ */
+
+/**
+ * Open window.
+ *
+ * Fired after window has been opened.
+ *
+ * @event open
+ * @param {Object} data Window opening data
+ */
+
+/**
+ * Close window.
+ *
+ * Fired after window has been closed.
+ *
+ * @event close
+ * @param {Object} data Window closing data
+ */
+
+/* Static Properties */
+
+/**
+ * Symbolic name of icon.
+ *
+ * @static
+ * @inheritable
+ * @property {string}
+ */
+OO.ui.Window.static.icon = 'window';
+
+/**
+ * Window title.
+ *
+ * Subclasses must implement this property before instantiating the window.
+ * Alternatively, override #getTitle with an alternative implementation.
+ *
+ * @static
+ * @abstract
+ * @inheritable
+ * @property {string|Function} Title string or function that returns a string
+ */
+OO.ui.Window.static.title = null;
+
+/* Methods */
+
+/**
+ * Check if window is visible.
+ *
+ * @return {boolean} Window is visible
+ */
+OO.ui.Window.prototype.isVisible = function () {
+       return this.visible;
+};
+
+/**
+ * Check if window is opening.
+ *
+ * @return {boolean} Window is opening
+ */
+OO.ui.Window.prototype.isOpening = function () {
+       return this.opening;
+};
+
+/**
+ * Check if window is closing.
+ *
+ * @return {boolean} Window is closing
+ */
+OO.ui.Window.prototype.isClosing = function () {
+       return this.closing;
+};
+
+/**
+ * Get the window frame.
+ *
+ * @return {OO.ui.Frame} Frame of window
+ */
+OO.ui.Window.prototype.getFrame = function () {
+       return this.frame;
+};
+
+/**
+ * Get the title of the window.
+ *
+ * @return {string} Title text
+ */
+OO.ui.Window.prototype.getTitle = function () {
+       return this.title;
+};
+
+/**
+ * Get the window icon.
+ *
+ * @return {string} Symbolic name of icon
+ */
+OO.ui.Window.prototype.getIcon = function () {
+       return this.icon;
+};
+
+/**
+ * Set the size of window frame.
+ *
+ * @param {number} [width=auto] Custom width
+ * @param {number} [height=auto] Custom height
+ * @chainable
+ */
+OO.ui.Window.prototype.setSize = function ( width, height ) {
+       if ( !this.frame.$content ) {
+               return;
+       }
+
+       this.frame.$element.css( {
+               'width': width === undefined ? 'auto' : width,
+               'height': height === undefined ? 'auto' : height
+       } );
+
+       return this;
+};
+
+/**
+ * Set the title of the window.
+ *
+ * @param {string|Function} title Title text or a function that returns text
+ * @chainable
+ */
+OO.ui.Window.prototype.setTitle = function ( title ) {
+       this.title = OO.ui.resolveMsg( title );
+       if ( this.$title ) {
+               this.$title.text( title );
+       }
+       return this;
+};
+
+/**
+ * Set the icon of the window.
+ *
+ * @param {string} icon Symbolic name of icon
+ * @chainable
+ */
+OO.ui.Window.prototype.setIcon = function ( icon ) {
+       if ( this.$icon ) {
+               this.$icon.removeClass( 'oo-ui-icon-' + this.icon );
+       }
+       this.icon = icon;
+       if ( this.$icon ) {
+               this.$icon.addClass( 'oo-ui-icon-' + this.icon );
+       }
+
+       return this;
+};
+
+/**
+ * Set the position of window to fit with contents.
+ *
+ * @param {string} left Left offset
+ * @param {string} top Top offset
+ * @chainable
+ */
+OO.ui.Window.prototype.setPosition = function ( left, top ) {
+       this.$element.css( { 'left': left, 'top': top } );
+       return this;
+};
+
+/**
+ * Set the height of window to fit with contents.
+ *
+ * @param {number} [min=0] Min height
+ * @param {number} [max] Max height (defaults to content's outer height)
+ * @chainable
+ */
+OO.ui.Window.prototype.fitHeightToContents = function ( min, max ) {
+       var height = this.frame.$content.outerHeight();
+
+       this.frame.$element.css(
+               'height', Math.max( min || 0, max === undefined ? height : Math.min( max, height ) )
+       );
+
+       return this;
+};
+
+/**
+ * Set the width of window to fit with contents.
+ *
+ * @param {number} [min=0] Min height
+ * @param {number} [max] Max height (defaults to content's outer width)
+ * @chainable
+ */
+OO.ui.Window.prototype.fitWidthToContents = function ( min, max ) {
+       var width = this.frame.$content.outerWidth();
+
+       this.frame.$element.css(
+               'width', Math.max( min || 0, max === undefined ? width : Math.min( max, width ) )
+       );
+
+       return this;
+};
+
+/**
+ * Initialize window contents.
+ *
+ * The first time the window is opened, #initialize is called when it's safe to begin populating
+ * its contents. See #setup for a way to make changes each time the window opens.
+ *
+ * Once this method is called, this.$$ can be used to create elements within the frame.
+ *
+ * @fires initialize
+ * @chainable
+ */
+OO.ui.Window.prototype.initialize = function () {
+       // Properties
+       this.$ = this.frame.$;
+       this.$title = this.$( '<div class="oo-ui-window-title"></div>' )
+               .text( this.title );
+       this.$icon = this.$( '<div class="oo-ui-window-icon"></div>' )
+               .addClass( 'oo-ui-icon-' + this.icon );
+       this.$head = this.$( '<div class="oo-ui-window-head"></div>' );
+       this.$body = this.$( '<div class="oo-ui-window-body"></div>' );
+       this.$foot = this.$( '<div class="oo-ui-window-foot"></div>' );
+       this.$overlay = this.$( '<div class="oo-ui-window-overlay"></div>' );
+
+       // Initialization
+       this.frame.$content.append(
+               this.$head.append( this.$icon, this.$title ),
+               this.$body,
+               this.$foot,
+               this.$overlay
+       );
+
+       // Undo the visibility: hidden; hack from the constructor and apply display: none;
+       // We can do this safely now that the iframe has initialized
+       this.$element.hide().css( 'visibility', '' );
+
+       this.emit( 'initialize' );
+
+       return this;
+};
+
+/**
+ * Setup window for use.
+ *
+ * Each time the window is opened, once it's ready to be interacted with, this will set it up for
+ * use in a particular context, based on the `data` argument.
+ *
+ * When you override this method, you must call the parent method at the very beginning.
+ *
+ * @abstract
+ * @param {Object} [data] Window opening data
+ */
+OO.ui.Window.prototype.setup = function () {
+       // Override to do something
+};
+
+/**
+ * Tear down window after use.
+ *
+ * Each time the window is closed, and it's done being interacted with, this will tear it down and
+ * do something with the user's interactions within the window, based on the `data` argument.
+ *
+ * When you override this method, you must call the parent method at the very end.
+ *
+ * @abstract
+ * @param {Object} [data] Window closing data
+ */
+OO.ui.Window.prototype.teardown = function () {
+       // Override to do something
+};
+
+/**
+ * Open window.
+ *
+ * Do not override this method. See #setup for a way to make changes each time the window opens.
+ *
+ * @param {Object} [data] Window opening data
+ * @fires open
+ * @chainable
+ */
+OO.ui.Window.prototype.open = function ( data ) {
+       if ( !this.opening && !this.closing && !this.visible ) {
+               this.opening = true;
+               this.frame.run( OO.ui.bind( function () {
+                       this.$element.show();
+                       this.visible = true;
+                       this.frame.$element.focus();
+                       this.emit( 'opening', data );
+                       this.setup( data );
+                       this.emit( 'open', data );
+                       this.opening = false;
+               }, this ) );
+       }
+
+       return this;
+};
+
+/**
+ * Close window.
+ *
+ * See #teardown for a way to do something each time the window closes.
+ *
+ * @param {Object} [data] Window closing data
+ * @fires close
+ * @chainable
+ */
+OO.ui.Window.prototype.close = function ( data ) {
+       if ( !this.opening && !this.closing && this.visible ) {
+               this.frame.$content.find( ':focus' ).blur();
+               this.closing = true;
+               this.$element.hide();
+               this.visible = false;
+               this.emit( 'closing', data );
+               this.teardown( data );
+               this.emit( 'close', data );
+               this.closing = false;
+       }
+
+       return this;
+};
+/**
+ * Set of mutually exclusive windows.
+ *
+ * @class
+ * @extends OO.ui.Element
+ * @mixins OO.EventEmitter
+ *
+ * @constructor
+ * @param {OO.Factory} factory Window factory
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.WindowSet = function OoUiWindowSet( factory, config ) {
+       // Parent constructor
+       OO.ui.WindowSet.super.call( this, config );
+
+       // Mixin constructors
+       OO.EventEmitter.call( this );
+
+       // Properties
+       this.factory = factory;
+
+       /**
+        * List of all windows associated with this window set.
+        *
+        * @property {OO.ui.Window[]}
+        */
+       this.windowList = [];
+
+       /**
+        * Mapping of OO.ui.Window objects created by name from the #factory.
+        *
+        * @property {Object}
+        */
+       this.windows = {};
+       this.currentWindow = null;
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-windowSet' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.WindowSet, OO.ui.Element );
+
+OO.mixinClass( OO.ui.WindowSet, OO.EventEmitter );
+
+/* Events */
+
+/**
+ * @event opening
+ * @param {OO.ui.Window} win Window that's being opened
+ * @param {Object} config Window opening information
+ */
+
+/**
+ * @event open
+ * @param {OO.ui.Window} win Window that's been opened
+ * @param {Object} config Window opening information
+ */
+
+/**
+ * @event closing
+ * @param {OO.ui.Window} win Window that's being closed
+ * @param {Object} config Window closing information
+ */
+
+/**
+ * @event close
+ * @param {OO.ui.Window} win Window that's been closed
+ * @param {Object} config Window closing information
+ */
+
+/* Methods */
+
+/**
+ * Handle a window that's being opened.
+ *
+ * @param {OO.ui.Window} win Window that's being opened
+ * @param {Object} [config] Window opening information
+ * @fires opening
+ */
+OO.ui.WindowSet.prototype.onWindowOpening = function ( win, config ) {
+       if ( this.currentWindow && this.currentWindow !== win ) {
+               this.currentWindow.close();
+       }
+       this.currentWindow = win;
+       this.emit( 'opening', win, config );
+};
+
+/**
+ * Handle a window that's been opened.
+ *
+ * @param {OO.ui.Window} win Window that's been opened
+ * @param {Object} [config] Window opening information
+ * @fires open
+ */
+OO.ui.WindowSet.prototype.onWindowOpen = function ( win, config ) {
+       this.emit( 'open', win, config );
+};
+
+/**
+ * Handle a window that's being closed.
+ *
+ * @param {OO.ui.Window} win Window that's being closed
+ * @param {Object} [config] Window closing information
+ * @fires closing
+ */
+OO.ui.WindowSet.prototype.onWindowClosing = function ( win, config ) {
+       this.currentWindow = null;
+       this.emit( 'closing', win, config );
+};
+
+/**
+ * Handle a window that's been closed.
+ *
+ * @param {OO.ui.Window} win Window that's been closed
+ * @param {Object} [config] Window closing information
+ * @fires close
+ */
+OO.ui.WindowSet.prototype.onWindowClose = function ( win, config ) {
+       this.emit( 'close', win, config );
+};
+
+/**
+ * Get the current window.
+ *
+ * @return {OO.ui.Window} Current window
+ */
+OO.ui.WindowSet.prototype.getCurrentWindow = function () {
+       return this.currentWindow;
+};
+
+/**
+ * Return a given window.
+ *
+ * @param {string} name Symbolic name of window
+ * @return {OO.ui.Window} Window with specified name
+ */
+OO.ui.WindowSet.prototype.getWindow = function ( name ) {
+       var win;
+
+       if ( !this.factory.lookup( name ) ) {
+               throw new Error( 'Unknown window: ' + name );
+       }
+       if ( !( name in this.windows ) ) {
+               win = this.windows[name] = this.createWindow( name );
+               this.addWindow( win );
+       }
+       return this.windows[name];
+};
+
+/**
+ * Create a window for use in this window set.
+ *
+ * @param {string} name Symbolic name of window
+ * @return {OO.ui.Window} Window with specified name
+ */
+OO.ui.WindowSet.prototype.createWindow = function ( name ) {
+       return this.factory.create( name, { '$': this.$ } );
+};
+
+/**
+ * Add a given window to this window set.
+ *
+ * Connects event handlers and attaches it to the DOM. Calling
+ * OO.ui.Window#open will not work until the window is added to the set.
+ *
+ * @param {OO.ui.Window} win
+ */
+OO.ui.WindowSet.prototype.addWindow = function ( win ) {
+       if ( this.windowList.indexOf( win ) !== -1 ) {
+               // Already set up
+               return;
+       }
+       this.windowList.push( win );
+
+       win.connect( this, {
+               'opening': [ 'onWindowOpening', win ],
+               'open': [ 'onWindowOpen', win ],
+               'closing': [ 'onWindowClosing', win ],
+               'close': [ 'onWindowClose', win ]
+       } );
+       this.$element.append( win.$element );
+};
+/**
+ * @abstract
+ * @class
+ * @extends OO.ui.Window
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [footless] Hide foot
+ * @cfg {string} [size='large'] Symbolic name of dialog size, `small`, `medium` or `large`
+ */
+OO.ui.Dialog = function OoUiDialog( config ) {
+       // Configuration initialization
+       config = $.extend( { 'size': 'large' }, config );
+
+       // Parent constructor
+       OO.ui.Dialog.super.call( this, config );
+
+       // Properties
+       this.visible = false;
+       this.footless = !!config.footless;
+       this.size = null;
+       this.onWindowMouseWheelHandler = OO.ui.bind( this.onWindowMouseWheel, this );
+       this.onDocumentKeyDownHandler = OO.ui.bind( this.onDocumentKeyDown, this );
+
+       // Events
+       this.$element.on( 'mousedown', false );
+       this.connect( this, { 'opening': 'onOpening' } );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-dialog' );
+       this.setSize( config.size );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.Dialog, OO.ui.Window );
+
+/* Static Properties */
+
+/**
+ * Symbolic name of dialog.
+ *
+ * @abstract
+ * @static
+ * @property {string}
+ * @inheritable
+ */
+OO.ui.Dialog.static.name = '';
+
+/**
+ * Map of symbolic size names and CSS classes.
+ *
+ * @static
+ * @property {Object}
+ * @inheritable
+ */
+OO.ui.Dialog.static.sizeCssClasses = {
+       'small': 'oo-ui-dialog-small',
+       'medium': 'oo-ui-dialog-medium',
+       'large': 'oo-ui-dialog-large'
+};
+
+/* Methods */
+
+/**
+ * Handle close button click events.
+ */
+OO.ui.Dialog.prototype.onCloseButtonClick = function () {
+       this.close( { 'action': 'cancel' } );
+};
+
+/**
+ * Handle window mouse wheel events.
+ *
+ * @param {jQuery.Event} e Mouse wheel event
+ */
+OO.ui.Dialog.prototype.onWindowMouseWheel = function () {
+       return false;
+};
+
+/**
+ * Handle document key down events.
+ *
+ * @param {jQuery.Event} e Key down event
+ */
+OO.ui.Dialog.prototype.onDocumentKeyDown = function ( e ) {
+       switch ( e.which ) {
+               case OO.ui.Keys.PAGEUP:
+               case OO.ui.Keys.PAGEDOWN:
+               case OO.ui.Keys.END:
+               case OO.ui.Keys.HOME:
+               case OO.ui.Keys.LEFT:
+               case OO.ui.Keys.UP:
+               case OO.ui.Keys.RIGHT:
+               case OO.ui.Keys.DOWN:
+                       // Prevent any key events that might cause scrolling
+                       return false;
+       }
+};
+
+/**
+ * Handle frame document key down events.
+ *
+ * @param {jQuery.Event} e Key down event
+ */
+OO.ui.Dialog.prototype.onFrameDocumentKeyDown = function ( e ) {
+       if ( e.which === OO.ui.Keys.ESCAPE ) {
+               this.close( { 'action': 'cancel' } );
+               return false;
+       }
+};
+
+/** */
+OO.ui.Dialog.prototype.onOpening = function () {
+       this.$element.addClass( 'oo-ui-dialog-open' );
+};
+
+/**
+ * Set dialog size.
+ *
+ * @param {string} [size='large'] Symbolic name of dialog size, `small`, `medium` or `large`
+ */
+OO.ui.Dialog.prototype.setSize = function ( size ) {
+       var name, state, cssClass,
+               sizeCssClasses = OO.ui.Dialog.static.sizeCssClasses;
+
+       if ( !sizeCssClasses[size] ) {
+               size = 'large';
+       }
+       this.size = size;
+       for ( name in sizeCssClasses ) {
+               state = name === size;
+               cssClass = sizeCssClasses[name];
+               this.$element.toggleClass( cssClass, state );
+               if ( this.frame.$content ) {
+                       this.frame.$content.toggleClass( cssClass, state );
+               }
+       }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.Dialog.prototype.initialize = function () {
+       // Parent method
+       OO.ui.Window.prototype.initialize.call( this );
+
+       // Properties
+       this.closeButton = new OO.ui.ButtonWidget( {
+               '$': this.$,
+               'frameless': true,
+               'icon': 'close',
+               'title': OO.ui.msg( 'ooui-dialog-action-close' )
+       } );
+
+       // Events
+       this.closeButton.connect( this, { 'click': 'onCloseButtonClick' } );
+       this.frame.$document.on( 'keydown', OO.ui.bind( this.onFrameDocumentKeyDown, this ) );
+
+       // Initialization
+       this.frame.$content.addClass( 'oo-ui-dialog-content' );
+       if ( this.footless ) {
+               this.frame.$content.addClass( 'oo-ui-dialog-content-footless' );
+       }
+       this.closeButton.$element.addClass( 'oo-ui-window-closeButton' );
+       this.$head.append( this.closeButton.$element );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.Dialog.prototype.setup = function ( data ) {
+       // Parent method
+       OO.ui.Window.prototype.setup.call( this, data );
+
+       // Prevent scrolling in top-level window
+       this.$( window ).on( 'mousewheel', this.onWindowMouseWheelHandler );
+       this.$( document ).on( 'keydown', this.onDocumentKeyDownHandler );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.Dialog.prototype.teardown = function ( data ) {
+       // Parent method
+       OO.ui.Window.prototype.teardown.call( this, data );
+
+       // Allow scrolling in top-level window
+       this.$( window ).off( 'mousewheel', this.onWindowMouseWheelHandler );
+       this.$( document ).off( 'keydown', this.onDocumentKeyDownHandler );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.Dialog.prototype.close = function ( data ) {
+       var dialog = this;
+       if ( !dialog.opening && !dialog.closing && dialog.visible ) {
+               // Trigger transition
+               dialog.$element.removeClass( 'oo-ui-dialog-open' );
+               // Allow transition to complete before actually closing
+               setTimeout( function () {
+                       // Parent method
+                       OO.ui.Window.prototype.close.call( dialog, data );
+               }, 250 );
+       }
+};
+/**
+ * Container for elements.
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Element
+ * @mixins OO.EventEmitter
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.Layout = function OoUiLayout( config ) {
+       // Initialize config
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.Layout.super.call( this, config );
+
+       // Mixin constructors
+       OO.EventEmitter.call( this );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-layout' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.Layout, OO.ui.Element );
+
+OO.mixinClass( OO.ui.Layout, OO.EventEmitter );
+/**
+ * User interface control.
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Element
+ * @mixins OO.EventEmitter
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [disabled=false] Disable
+ */
+OO.ui.Widget = function OoUiWidget( config ) {
+       // Initialize config
+       config = $.extend( { 'disabled': false }, config );
+
+       // Parent constructor
+       OO.ui.Widget.super.call( this, config );
+
+       // Mixin constructors
+       OO.EventEmitter.call( this );
+
+       // Properties
+       this.disabled = null;
+       this.wasDisabled = null;
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-widget' );
+       this.setDisabled( !!config.disabled );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.Widget, OO.ui.Element );
+
+OO.mixinClass( OO.ui.Widget, OO.EventEmitter );
+
+/* Events */
+
+/**
+ * @event disable
+ * @param {boolean} disabled Widget is disabled
+ */
+
+/* Methods */
+
+/**
+ * Check if the widget is disabled.
+ *
+ * @param {boolean} Button is disabled
+ */
+OO.ui.Widget.prototype.isDisabled = function () {
+       return this.disabled;
+};
+
+/**
+ * Update the disabled state, in case of changes in parent widget.
+ *
+ * @chainable
+ */
+OO.ui.Widget.prototype.updateDisabled = function () {
+       this.setDisabled( this.disabled );
+       return this;
+};
+
+/**
+ * Set the disabled state of the widget.
+ *
+ * This should probably change the widgets's appearance and prevent it from being used.
+ *
+ * @param {boolean} disabled Disable widget
+ * @chainable
+ */
+OO.ui.Widget.prototype.setDisabled = function ( disabled ) {
+       var isDisabled;
+
+       this.disabled = !!disabled;
+       isDisabled = this.isDisabled();
+       if ( isDisabled !== this.wasDisabled ) {
+               this.$element.toggleClass( 'oo-ui-widget-disabled', isDisabled );
+               this.$element.toggleClass( 'oo-ui-widget-enabled', !isDisabled );
+               this.emit( 'disable', isDisabled );
+       }
+       this.wasDisabled = isDisabled;
+       return this;
+};
+/**
+ * Element with a button.
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ * @param {jQuery} $button Button node, assigned to #$button
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [frameless] Render button without a frame
+ * @cfg {number} [tabIndex=0] Button's tab index, use -1 to prevent tab focusing
+ */
+OO.ui.ButtonedElement = function OoUiButtonedElement( $button, config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Properties
+       this.$button = $button;
+       this.tabIndex = null;
+       this.active = false;
+       this.onMouseUpHandler = OO.ui.bind( this.onMouseUp, this );
+
+       // Events
+       this.$button.on( 'mousedown', OO.ui.bind( this.onMouseDown, this ) );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-buttonedElement' );
+       this.$button
+               .addClass( 'oo-ui-buttonedElement-button' )
+               .attr( 'role', 'button' )
+               .prop( 'tabIndex', config.tabIndex || 0 );
+       if ( config.frameless ) {
+               this.$element.addClass( 'oo-ui-buttonedElement-frameless' );
+       } else {
+               this.$element.addClass( 'oo-ui-buttonedElement-framed' );
+       }
+};
+
+/* Methods */
+
+/**
+ * Handles mouse down events.
+ *
+ * @method
+ * @param {jQuery.Event} e Mouse down event
+ */
+OO.ui.ButtonedElement.prototype.onMouseDown = function () {
+       this.tabIndex = this.$button.attr( 'tabIndex' );
+       // Remove the tab-index while the button is down to prevent the button from stealing focus
+       this.$button
+               .removeAttr( 'tabIndex' )
+               .addClass( 'oo-ui-buttonedElement-pressed' );
+       this.getElementDocument().addEventListener( 'mouseup', this.onMouseUpHandler, true );
+};
+
+/**
+ * Handles mouse up events.
+ *
+ * @method
+ * @param {jQuery.Event} e Mouse up event
+ */
+OO.ui.ButtonedElement.prototype.onMouseUp = function () {
+       // Restore the tab-index after the button is up to restore the button's accesssibility
+       this.$button
+               .attr( 'tabIndex', this.tabIndex )
+               .removeClass( 'oo-ui-buttonedElement-pressed' );
+       this.getElementDocument().removeEventListener( 'mouseup', this.onMouseUpHandler, true );
+};
+
+/**
+ * Set active state.
+ *
+ * @method
+ * @param {boolean} [value] Make button active
+ * @chainable
+ */
+OO.ui.ButtonedElement.prototype.setActive = function ( value ) {
+       this.$button.toggleClass( 'oo-ui-buttonedElement-active', !!value );
+       return this;
+};
+/**
+ * Element that can be automatically clipped to visible boundaies.
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ * @param {jQuery} $clippable Nodes to clip, assigned to #$clippable
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.ClippableElement = function OoUiClippableElement( $clippable, config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Properties
+       this.$clippable = $clippable;
+       this.clipping = false;
+       this.clipped = false;
+       this.$clippableContainer = null;
+       this.$clippableScroller = null;
+       this.$clippableWindow = null;
+       this.idealWidth = null;
+       this.idealHeight = null;
+       this.onClippableContainerScrollHandler = OO.ui.bind( this.clip, this );
+       this.onClippableWindowResizeHandler = OO.ui.bind( this.clip, this );
+
+       // Initialization
+       this.$clippable.addClass( 'oo-ui-clippableElement-clippable' );
+};
+
+/* Methods */
+
+/**
+ * Set clipping.
+ *
+ * @method
+ * @param {boolean} value Enable clipping
+ * @chainable
+ */
+OO.ui.ClippableElement.prototype.setClipping = function ( value ) {
+       value = !!value;
+
+       if ( this.clipping !== value ) {
+               this.clipping = value;
+               if ( this.clipping ) {
+                       this.$clippableContainer = this.$( this.getClosestScrollableElementContainer() );
+                       // If the clippable container is the body, we have to listen to scroll events and check
+                       // jQuery.scrollTop on the window because of browser inconsistencies
+                       this.$clippableScroller = this.$clippableContainer.is( 'body' ) ?
+                               this.$( OO.ui.Element.getWindow( this.$clippableContainer ) ) :
+                               this.$clippableContainer;
+                       this.$clippableScroller.on( 'scroll', this.onClippableContainerScrollHandler );
+                       this.$clippableWindow = this.$( this.getElementWindow() )
+                               .on( 'resize', this.onClippableWindowResizeHandler );
+                       // Initial clip after visible
+                       setTimeout( OO.ui.bind( this.clip, this ) );
+               } else {
+                       this.$clippableContainer = null;
+                       this.$clippableScroller.off( 'scroll', this.onClippableContainerScrollHandler );
+                       this.$clippableScroller = null;
+                       this.$clippableWindow.off( 'resize', this.onClippableWindowResizeHandler );
+                       this.$clippableWindow = null;
+               }
+       }
+
+       return this;
+};
+
+/**
+ * Check if the element will be clipped to fit the visible area of the nearest scrollable container.
+ *
+ * @method
+ * @return {boolean} Element will be clipped to the visible area
+ */
+OO.ui.ClippableElement.prototype.isClipping = function () {
+       return this.clipping;
+};
+
+/**
+ * Check if the bottom or right of the element is being clipped by the nearest scrollable container.
+ *
+ * @method
+ * @return {boolean} Part of the element is being clipped
+ */
+OO.ui.ClippableElement.prototype.isClipped = function () {
+       return this.clipped;
+};
+
+/**
+ * Set the ideal size.
+ *
+ * @method
+ * @param {number|string} [width] Width as a number of pixels or CSS string with unit suffix
+ * @param {number|string} [height] Height as a number of pixels or CSS string with unit suffix
+ */
+OO.ui.ClippableElement.prototype.setIdealSize = function ( width, height ) {
+       this.idealWidth = width;
+       this.idealHeight = height;
+};
+
+/**
+ * Clip element to visible boundaries and allow scrolling when needed.
+ *
+ * Element will be clipped the bottom or right of the element is within 10px of the edge of, or
+ * overlapped by, the visible area of the nearest scrollable container.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.ClippableElement.prototype.clip = function () {
+       if ( !this.clipping ) {
+               // this.$clippableContainer and this.$clippableWindow are null, so the below will fail
+               return this;
+       }
+
+       var buffer = 10,
+               cOffset = this.$clippable.offset(),
+               ccOffset = this.$clippableContainer.offset() || { 'top': 0, 'left': 0 },
+               ccHeight = this.$clippableContainer.innerHeight() - buffer,
+               ccWidth = this.$clippableContainer.innerWidth() - buffer,
+               scrollTop = this.$clippableScroller.scrollTop(),
+               scrollLeft = this.$clippableScroller.scrollLeft(),
+               desiredWidth = ( ccOffset.left + scrollLeft + ccWidth ) - cOffset.left,
+               desiredHeight = ( ccOffset.top + scrollTop + ccHeight ) - cOffset.top,
+               naturalWidth = this.$clippable.prop( 'scrollWidth' ),
+               naturalHeight = this.$clippable.prop( 'scrollHeight' ),
+               clipWidth = desiredWidth < naturalWidth,
+               clipHeight = desiredHeight < naturalHeight;
+
+       if ( clipWidth ) {
+               this.$clippable.css( { 'overflow-x': 'auto', 'width': desiredWidth } );
+       } else {
+               this.$clippable.css( { 'overflow-x': '', 'width': this.idealWidth || '' } );
+       }
+       if ( clipHeight ) {
+               this.$clippable.css( { 'overflow-y': 'auto', 'height': desiredHeight } );
+       } else {
+               this.$clippable.css( { 'overflow-y': '', 'height': this.idealHeight || '' } );
+       }
+
+       this.clipped = clipWidth || clipHeight;
+
+       return this;
+};
+/**
+ * Element with named flags, used for styling, that can be added, removed and listed and checked.
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string[]} [flags=[]] Styling flags, e.g. 'primary', 'destructive' or 'constructive'
+ */
+OO.ui.FlaggableElement = function OoUiFlaggableElement( config ) {
+       // Config initialization
+       config = config || {};
+
+       // Properties
+       this.flags = {};
+
+       // Initialization
+       this.setFlags( config.flags );
+};
+
+/* Methods */
+
+/**
+ * Check if a flag is set.
+ *
+ * @method
+ * @param {string} flag Flag name to check
+ * @returns {boolean} Has flag
+ */
+OO.ui.FlaggableElement.prototype.hasFlag = function ( flag ) {
+       return flag in this.flags;
+};
+
+/**
+ * Get the names of all flags.
+ *
+ * @method
+ * @returns {string[]} flags Flag names
+ */
+OO.ui.FlaggableElement.prototype.getFlags = function () {
+       return Object.keys( this.flags );
+};
+
+/**
+ * Add one or more flags.
+ *
+ * @method
+ * @param {string[]|Object.<string, boolean>} flags List of flags to add, or list of set/remove
+ *  values, keyed by flag name
+ * @chainable
+ */
+OO.ui.FlaggableElement.prototype.setFlags = function ( flags ) {
+       var i, len, flag,
+               classPrefix = 'oo-ui-flaggableElement-';
+
+       if ( $.isArray( flags ) ) {
+               for ( i = 0, len = flags.length; i < len; i++ ) {
+                       flag = flags[i];
+                       // Set
+                       this.flags[flag] = true;
+                       this.$element.addClass( classPrefix + flag );
+               }
+       } else if ( OO.isPlainObject( flags ) ) {
+               for ( flag in flags ) {
+                       if ( flags[flag] ) {
+                               // Set
+                               this.flags[flag] = true;
+                               this.$element.addClass( classPrefix + flag );
+                       } else {
+                               // Remove
+                               delete this.flags[flag];
+                               this.$element.removeClass( classPrefix + flag );
+                       }
+               }
+       }
+       return this;
+};
+/**
+ * Element containing a sequence of child elements.
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ * @param {jQuery} $group Container node, assigned to #$group
+ * @param {Object} [config] Configuration options
+ * @cfg {Object.<string,string>} [aggregations] Events to aggregate, keyed by item event name
+ */
+OO.ui.GroupElement = function OoUiGroupElement( $group, config ) {
+       // Configuration
+       config = config || {};
+
+       // Properties
+       this.$group = $group;
+       this.items = [];
+       this.$items = this.$( [] );
+       this.aggregate = !$.isEmptyObject( config.aggregations );
+       this.aggregations = config.aggregations || {};
+};
+
+/* Methods */
+
+/**
+ * Get items.
+ *
+ * @method
+ * @returns {OO.ui.Element[]} Items
+ */
+OO.ui.GroupElement.prototype.getItems = function () {
+       return this.items.slice( 0 );
+};
+
+/**
+ * Add items.
+ *
+ * @method
+ * @param {OO.ui.Element[]} items Item
+ * @param {number} [index] Index to insert items at
+ * @chainable
+ */
+OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
+       var i, len, item, event, events, currentIndex,
+               $items = this.$( [] );
+
+       for ( i = 0, len = items.length; i < len; i++ ) {
+               item = items[i];
+
+               // Check if item exists then remove it first, effectively "moving" it
+               currentIndex = $.inArray( item, this.items );
+               if ( currentIndex >= 0 ) {
+                       this.removeItems( [ item ] );
+                       // Adjust index to compensate for removal
+                       if ( currentIndex < index ) {
+                               index--;
+                       }
+               }
+               // Add the item
+               if ( this.aggregate ) {
+                       events = {};
+                       for ( event in this.aggregations ) {
+                               events[event] = [ 'emit', this.aggregations[event], item ];
+                       }
+                       item.connect( this, events );
+               }
+               item.setElementGroup( this );
+               $items = $items.add( item.$element );
+       }
+
+       if ( index === undefined || index < 0 || index >= this.items.length ) {
+               this.$group.append( $items );
+               this.items.push.apply( this.items, items );
+       } else if ( index === 0 ) {
+               this.$group.prepend( $items );
+               this.items.unshift.apply( this.items, items );
+       } else {
+               this.$items.eq( index ).before( $items );
+               this.items.splice.apply( this.items, [ index, 0 ].concat( items ) );
+       }
+
+       this.$items = this.$items.add( $items );
+
+       return this;
+};
+
+/**
+ * Remove items.
+ *
+ * Items will be detached, not removed, so they can be used later.
+ *
+ * @method
+ * @param {OO.ui.Element[]} items Items to remove
+ * @chainable
+ */
+OO.ui.GroupElement.prototype.removeItems = function ( items ) {
+       var i, len, item, index;
+
+       // Remove specific items
+       for ( i = 0, len = items.length; i < len; i++ ) {
+               item = items[i];
+               index = $.inArray( item, this.items );
+               if ( index !== -1 ) {
+                       if ( this.aggregate ) {
+                               item.disconnect( this );
+                       }
+                       item.setElementGroup( null );
+                       this.items.splice( index, 1 );
+                       item.$element.detach();
+                       this.$items = this.$items.not( item.$element );
+               }
+       }
+
+       return this;
+};
+
+/**
+ * Clear all items.
+ *
+ * Items will be detached, not removed, so they can be used later.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.GroupElement.prototype.clearItems = function () {
+       var i, len, item;
+
+       // Remove all items
+       for ( i = 0, len = this.items.length; i < len; i++ ) {
+               item = this.items[i];
+               if ( this.aggregate ) {
+                       item.disconnect( this );
+               }
+               item.setElementGroup( null );
+       }
+       this.items = [];
+       this.$items.detach();
+       this.$items = this.$( [] );
+};
+/**
+ * Element containing an icon.
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ * @param {jQuery} $icon Icon node, assigned to #$icon
+ * @param {Object} [config] Configuration options
+ * @cfg {Object|string} [icon=''] Symbolic icon name, or map of icon names keyed by language ID;
+ *  use the 'default' key to specify the icon to be used when there is no icon in the user's
+ *  language
+ */
+OO.ui.IconedElement = function OoUiIconedElement( $icon, config ) {
+       // Config intialization
+       config = config || {};
+
+       // Properties
+       this.$icon = $icon;
+       this.icon = null;
+
+       // Initialization
+       this.$icon.addClass( 'oo-ui-iconedElement-icon' );
+       this.setIcon( config.icon || this.constructor.static.icon );
+};
+
+/* Static Properties */
+
+OO.ui.IconedElement.static = {};
+
+/**
+ * Icon.
+ *
+ * Value should be the unique portion of an icon CSS class name, such as 'up' for 'oo-ui-icon-up'.
+ *
+ * For i18n purposes, this property can be an object containing a `default` icon name property and
+ * additional icon names keyed by language code.
+ *
+ * Example of i18n icon definition:
+ *     { 'default': 'bold-a', 'en': 'bold-b', 'de': 'bold-f' }
+ *
+ * @static
+ * @inheritable
+ * @property {Object|string} Symbolic icon name, or map of icon names keyed by language ID;
+ *  use the 'default' key to specify the icon to be used when there is no icon in the user's
+ *  language
+ */
+OO.ui.IconedElement.static.icon = null;
+
+/* Methods */
+
+/**
+ * Set icon.
+ *
+ * @method
+ * @param {Object|string} icon Symbolic icon name, or map of icon names keyed by language ID;
+ *  use the 'default' key to specify the icon to be used when there is no icon in the user's
+ *  language
+ * @chainable
+ */
+OO.ui.IconedElement.prototype.setIcon = function ( icon ) {
+       icon = OO.isPlainObject( icon ) ? OO.ui.getLocalValue( icon, null, 'default' ) : icon;
+
+       if ( this.icon ) {
+               this.$icon.removeClass( 'oo-ui-icon-' + this.icon );
+       }
+       if ( typeof icon === 'string' ) {
+               icon = icon.trim();
+               if ( icon.length ) {
+                       this.$icon.addClass( 'oo-ui-icon-' + icon );
+                       this.icon = icon;
+               }
+       }
+       this.$element.toggleClass( 'oo-ui-iconedElement', !!this.icon );
+
+       return this;
+};
+
+/**
+ * Get icon.
+ *
+ * @method
+ * @returns {string} Icon
+ */
+OO.ui.IconedElement.prototype.getIcon = function () {
+       return this.icon;
+};
+/**
+ * Element containing an indicator.
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ * @param {jQuery} $indicator Indicator node, assigned to #$indicator
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [indicator] Symbolic indicator name
+ * @cfg {string} [indicatorTitle] Indicator title text or a function that return text
+ */
+OO.ui.IndicatedElement = function OoUiIndicatedElement( $indicator, config ) {
+       // Config intialization
+       config = config || {};
+
+       // Properties
+       this.$indicator = $indicator;
+       this.indicator = null;
+       this.indicatorLabel = null;
+
+       // Initialization
+       this.$indicator.addClass( 'oo-ui-indicatedElement-indicator' );
+       this.setIndicator( config.indicator || this.constructor.static.indicator );
+       this.setIndicatorTitle( config.indicatorTitle  || this.constructor.static.indicatorTitle );
+};
+
+/* Static Properties */
+
+OO.ui.IndicatedElement.static = {};
+
+/**
+ * indicator.
+ *
+ * @static
+ * @inheritable
+ * @property {string|null} Symbolic indicator name or null for no indicator
+ */
+OO.ui.IndicatedElement.static.indicator = null;
+
+/**
+ * Indicator title.
+ *
+ * @static
+ * @inheritable
+ * @property {string|Function|null} Indicator title text, a function that return text or null for no
+ *  indicator title
+ */
+OO.ui.IndicatedElement.static.indicatorTitle = null;
+
+/* Methods */
+
+/**
+ * Set indicator.
+ *
+ * @method
+ * @param {string|null} indicator Symbolic name of indicator to use or null for no indicator
+ * @chainable
+ */
+OO.ui.IndicatedElement.prototype.setIndicator = function ( indicator ) {
+       if ( this.indicator ) {
+               this.$indicator.removeClass( 'oo-ui-indicator-' + this.indicator );
+               this.indicator = null;
+       }
+       if ( typeof indicator === 'string' ) {
+               indicator = indicator.trim();
+               if ( indicator.length ) {
+                       this.$indicator.addClass( 'oo-ui-indicator-' + indicator );
+                       this.indicator = indicator;
+               }
+       }
+       this.$element.toggleClass( 'oo-ui-indicatedElement', !!this.indicator );
+
+       return this;
+};
+
+/**
+ * Set indicator label.
+ *
+ * @method
+ * @param {string|Function|null} indicator Indicator title text, a function that return text or null
+ *  for no indicator title
+ * @chainable
+ */
+OO.ui.IndicatedElement.prototype.setIndicatorTitle = function ( indicatorTitle ) {
+       this.indicatorTitle = indicatorTitle = OO.ui.resolveMsg( indicatorTitle );
+
+       if ( typeof indicatorTitle === 'string' && indicatorTitle.length ) {
+               this.$indicator.attr( 'title', indicatorTitle );
+       } else {
+               this.$indicator.removeAttr( 'title' );
+       }
+
+       return this;
+};
+
+/**
+ * Get indicator.
+ *
+ * @method
+ * @returns {string} title Symbolic name of indicator
+ */
+OO.ui.IndicatedElement.prototype.getIndicator = function () {
+       return this.indicator;
+};
+
+/**
+ * Get indicator title.
+ *
+ * @method
+ * @returns {string} Indicator title text
+ */
+OO.ui.IndicatedElement.prototype.getIndicatorTitle = function () {
+       return this.indicatorTitle;
+};
+/**
+ * Element containing a label.
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ * @param {jQuery} $label Label node, assigned to #$label
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery|string|Function} [label] Label nodes, text or a function that returns nodes or text
+ * @cfg {boolean} [autoFitLabel=true] Whether to fit the label or not.
+ */
+OO.ui.LabeledElement = function OoUiLabeledElement( $label, config ) {
+       // Config intialization
+       config = config || {};
+
+       // Properties
+       this.$label = $label;
+       this.label = null;
+
+       // Initialization
+       this.$label.addClass( 'oo-ui-labeledElement-label' );
+       this.setLabel( config.label || this.constructor.static.label );
+       this.autoFitLabel = config.autoFitLabel === undefined || !!config.autoFitLabel;
+};
+
+/* Static Properties */
+
+OO.ui.LabeledElement.static = {};
+
+/**
+ * Label.
+ *
+ * @static
+ * @inheritable
+ * @property {string|Function|null} Label text; a function that returns a nodes or text; or null for
+ *  no label
+ */
+OO.ui.LabeledElement.static.label = null;
+
+/* Methods */
+
+/**
+ * Set the label.
+ *
+ * An empty string will result in the label being hidden. A string containing only whitespace will
+ * be converted to a single &nbsp;
+ *
+ * @method
+ * @param {jQuery|string|Function|null} label Label nodes; text; a function that retuns nodes or
+ *  text; or null for no label
+ * @chainable
+ */
+OO.ui.LabeledElement.prototype.setLabel = function ( label ) {
+       var empty = false;
+
+       this.label = label = OO.ui.resolveMsg( label ) || null;
+       if ( typeof label === 'string' && label.length ) {
+               if ( label.match( /^\s*$/ ) ) {
+                       // Convert whitespace only string to a single non-breaking space
+                       this.$label.html( '&nbsp;' );
+               } else {
+                       this.$label.text( label );
+               }
+       } else if ( label instanceof jQuery ) {
+               this.$label.empty().append( label );
+       } else {
+               this.$label.empty();
+               empty = true;
+       }
+       this.$element.toggleClass( 'oo-ui-labeledElement', !empty );
+       this.$label.css( 'display', empty ? 'none' : '' );
+
+       return this;
+};
+
+/**
+ * Get the label.
+ *
+ * @method
+ * @returns {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
+ *  text; or null for no label
+ */
+OO.ui.LabeledElement.prototype.getLabel = function () {
+       return this.label;
+};
+
+/**
+ * Fit the label.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.LabeledElement.prototype.fitLabel = function () {
+       if ( this.$label.autoEllipsis && this.autoFitLabel ) {
+               this.$label.autoEllipsis( { 'hasSpan': false, 'tooltip': true } );
+       }
+       return this;
+};
+/**
+ * Popuppable element.
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {number} [popupWidth=320] Width of popup
+ * @cfg {number} [popupHeight] Height of popup
+ * @cfg {Object} [popup] Configuration to pass to popup
+ */
+OO.ui.PopuppableElement = function OoUiPopuppableElement( config ) {
+       // Configuration initialization
+       config = $.extend( { 'popupWidth': 320 }, config );
+
+       // Properties
+       this.popup = new OO.ui.PopupWidget( $.extend(
+               { 'align': 'center', 'autoClose': true },
+               config.popup,
+               { '$': this.$, '$autoCloseIgnore': this.$element }
+       ) );
+       this.popupWidth = config.popupWidth;
+       this.popupHeight = config.popupHeight;
+};
+
+/* Methods */
+
+/**
+ * Get popup.
+ *
+ * @method
+ * @returns {OO.ui.PopupWidget} Popup widget
+ */
+OO.ui.PopuppableElement.prototype.getPopup = function () {
+       return this.popup;
+};
+
+/**
+ * Show popup.
+ *
+ * @method
+ */
+OO.ui.PopuppableElement.prototype.showPopup = function () {
+       this.popup.show().display( this.popupWidth, this.popupHeight );
+};
+
+/**
+ * Hide popup.
+ *
+ * @method
+ */
+OO.ui.PopuppableElement.prototype.hidePopup = function () {
+       this.popup.hide();
+};
+/**
+ * Element with a title.
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ * @param {jQuery} $label Titled node, assigned to #$titled
+ * @param {Object} [config] Configuration options
+ * @cfg {string|Function} [title] Title text or a function that returns text
+ */
+OO.ui.TitledElement = function OoUiTitledElement( $titled, config ) {
+       // Config intialization
+       config = config || {};
+
+       // Properties
+       this.$titled = $titled;
+       this.title = null;
+
+       // Initialization
+       this.setTitle( config.title || this.constructor.static.title );
+};
+
+/* Static Properties */
+
+OO.ui.TitledElement.static = {};
+
+/**
+ * Title.
+ *
+ * @static
+ * @inheritable
+ * @property {string|Function} Title text or a function that returns text
+ */
+OO.ui.TitledElement.static.title = null;
+
+/* Methods */
+
+/**
+ * Set title.
+ *
+ * @method
+ * @param {string|Function|null} title Title text, a function that returns text or null for no title
+ * @chainable
+ */
+OO.ui.TitledElement.prototype.setTitle = function ( title ) {
+       this.title = title = OO.ui.resolveMsg( title ) || null;
+
+       if ( typeof title === 'string' && title.length ) {
+               this.$titled.attr( 'title', title );
+       } else {
+               this.$titled.removeAttr( 'title' );
+       }
+
+       return this;
+};
+
+/**
+ * Get title.
+ *
+ * @method
+ * @returns {string} Title string
+ */
+OO.ui.TitledElement.prototype.getTitle = function () {
+       return this.title;
+};
+/**
+ * Generic toolbar tool.
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IconedElement
+ *
+ * @constructor
+ * @param {OO.ui.ToolGroup} toolGroup
+ * @param {Object} [config] Configuration options
+ * @cfg {string|Function} [title] Title text or a function that returns text
+ */
+OO.ui.Tool = function OoUiTool( toolGroup, config ) {
+       // Config intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.Tool.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
+
+       // Properties
+       this.toolGroup = toolGroup;
+       this.toolbar = this.toolGroup.getToolbar();
+       this.active = false;
+       this.$title = this.$( '<span>' );
+       this.$link = this.$( '<a>' );
+       this.title = null;
+
+       // Events
+       this.toolbar.connect( this, { 'updateState': 'onUpdateState' } );
+
+       // Initialization
+       this.$title.addClass( 'oo-ui-tool-title' );
+       this.$link
+               .addClass( 'oo-ui-tool-link' )
+               .append( this.$icon, this.$title );
+       this.$element
+               .data( 'oo-ui-tool', this )
+               .addClass(
+                       'oo-ui-tool ' + 'oo-ui-tool-name-' +
+                       this.constructor.static.name.replace( /^([^\/]+)\/([^\/]+).*$/, '$1-$2' )
+               )
+               .append( this.$link );
+       this.setTitle( config.title || this.constructor.static.title );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.Tool, OO.ui.Widget );
+
+OO.mixinClass( OO.ui.Tool, OO.ui.IconedElement );
+
+/* Events */
+
+/**
+ * @event select
+ */
+
+/* Static Properties */
+
+/**
+ * @static
+ * @inheritdoc
+ */
+OO.ui.Tool.static.tagName = 'span';
+
+/**
+ * Symbolic name of tool.
+ *
+ * @abstract
+ * @static
+ * @property {string}
+ * @inheritable
+ */
+OO.ui.Tool.static.name = '';
+
+/**
+ * Tool group.
+ *
+ * @abstract
+ * @static
+ * @property {string}
+ * @inheritable
+ */
+OO.ui.Tool.static.group = '';
+
+/**
+ * Tool title.
+ *
+ * Title is used as a tooltip when the tool is part of a bar tool group, or a label when the tool
+ * is part of a list or menu tool group. If a trigger is associated with an action by the same name
+ * as the tool, a description of its keyboard shortcut for the appropriate platform will be
+ * appended to the title if the tool is part of a bar tool group.
+ *
+ * @abstract
+ * @static
+ * @property {string|Function} Title text or a function that returns text
+ * @inheritable
+ */
+OO.ui.Tool.static.title = '';
+
+/**
+ * Tool can be automatically added to tool groups.
+ *
+ * @static
+ * @property {boolean}
+ * @inheritable
+ */
+OO.ui.Tool.static.autoAdd = true;
+
+/**
+ * Check if this tool is compatible with given data.
+ *
+ * @static
+ * @method
+ * @inheritable
+ * @param {Mixed} data Data to check
+ * @return {boolean} Tool can be used with data
+ */
+OO.ui.Tool.static.isCompatibleWith = function () {
+       return false;
+};
+
+/* Methods */
+
+/**
+ * Handle the toolbar state being updated.
+ *
+ * This is an abstract method that must be overridden in a concrete subclass.
+ *
+ * @abstract
+ */
+OO.ui.Tool.prototype.onUpdateState = function () {
+       throw new Error(
+               'OO.ui.Tool.onUpdateState not implemented in this subclass:' + this.constructor
+       );
+};
+
+/**
+ * Handle the tool being selected.
+ *
+ * This is an abstract method that must be overridden in a concrete subclass.
+ *
+ * @abstract
+ */
+OO.ui.Tool.prototype.onSelect = function () {
+       throw new Error(
+               'OO.ui.Tool.onSelect not implemented in this subclass:' + this.constructor
+       );
+};
+
+/**
+ * Check if the button is active.
+ *
+ * @param {boolean} Button is active
+ */
+OO.ui.Tool.prototype.isActive = function () {
+       return this.active;
+};
+
+/**
+ * Make the button appear active or inactive.
+ *
+ * @param {boolean} state Make button appear active
+ */
+OO.ui.Tool.prototype.setActive = function ( state ) {
+       this.active = !!state;
+       if ( this.active ) {
+               this.$element.addClass( 'oo-ui-tool-active' );
+       } else {
+               this.$element.removeClass( 'oo-ui-tool-active' );
+       }
+};
+
+/**
+ * Get the tool title.
+ *
+ * @param {string|Function} title Title text or a function that returns text
+ * @chainable
+ */
+OO.ui.Tool.prototype.setTitle = function ( title ) {
+       this.title = OO.ui.resolveMsg( title );
+       this.updateTitle();
+       return this;
+};
+
+/**
+ * Get the tool title.
+ *
+ * @return {string} Title text
+ */
+OO.ui.Tool.prototype.getTitle = function () {
+       return this.title;
+};
+
+/**
+ * Get the tool's symbolic name.
+ *
+ * @return {string} Symbolic name of tool
+ */
+OO.ui.Tool.prototype.getName = function () {
+       return this.constructor.static.name;
+};
+
+/**
+ * Update the title.
+ */
+OO.ui.Tool.prototype.updateTitle = function () {
+       var titleTooltips = this.toolGroup.constructor.static.titleTooltips,
+               accelTooltips = this.toolGroup.constructor.static.accelTooltips,
+               accel = this.toolbar.getToolAccelerator( this.constructor.static.name ),
+               tooltipParts = [];
+
+       this.$title.empty()
+               .text( this.title )
+               .append(
+                       this.$( '<span>' )
+                               .addClass( 'oo-ui-tool-accel' )
+                               .text( accel )
+               );
+
+       if ( titleTooltips && typeof this.title === 'string' && this.title.length ) {
+               tooltipParts.push( this.title );
+       }
+       if ( accelTooltips && typeof accel === 'string' && accel.length ) {
+               tooltipParts.push( accel );
+       }
+       if ( tooltipParts.length ) {
+               this.$link.attr( 'title', tooltipParts.join( ' ' ) );
+       } else {
+               this.$link.removeAttr( 'title' );
+       }
+};
+
+/**
+ * Destroy tool.
+ */
+OO.ui.Tool.prototype.destroy = function () {
+       this.toolbar.disconnect( this );
+       this.$element.remove();
+};
+/**
+ * Collection of tool groups.
+ *
+ * @class
+ * @extends OO.ui.Element
+ * @mixins OO.EventEmitter
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {OO.ui.ToolFactory} toolFactory Factory for creating tools
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [actions] Add an actions section opposite to the tools
+ * @cfg {boolean} [shadow] Add a shadow below the toolbar
+ */
+OO.ui.Toolbar = function OoUiToolbar( toolFactory, config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.Toolbar.super.call( this, config );
+
+       // Mixin constructors
+       OO.EventEmitter.call( this );
+       OO.ui.GroupElement.call( this, this.$( '<div>' ), config );
+
+       // Properties
+       this.toolFactory = toolFactory;
+       this.groups = [];
+       this.tools = {};
+       this.$bar = this.$( '<div>' );
+       this.$actions = this.$( '<div>' );
+       this.initialized = false;
+
+       // Events
+       this.$element
+               .add( this.$bar ).add( this.$group ).add( this.$actions )
+               .on( 'mousedown', OO.ui.bind( this.onMouseDown, this ) );
+
+       // Initialization
+       this.$group.addClass( 'oo-ui-toolbar-tools' );
+       this.$bar.addClass( 'oo-ui-toolbar-bar' ).append( this.$group );
+       if ( config.actions ) {
+               this.$actions.addClass( 'oo-ui-toolbar-actions' );
+               this.$bar.append( this.$actions );
+       }
+       this.$bar.append( '<div style="clear:both"></div>' );
+       if ( config.shadow ) {
+               this.$bar.append( '<div class="oo-ui-toolbar-shadow"></div>' );
+       }
+       this.$element.addClass( 'oo-ui-toolbar' ).append( this.$bar );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.Toolbar, OO.ui.Element );
+
+OO.mixinClass( OO.ui.Toolbar, OO.EventEmitter );
+OO.mixinClass( OO.ui.Toolbar, OO.ui.GroupElement );
+
+/* Methods */
+
+/**
+ * Get the tool factory.
+ *
+ * @return {OO.ui.ToolFactory} Tool factory
+ */
+OO.ui.Toolbar.prototype.getToolFactory = function () {
+       return this.toolFactory;
+};
+
+/**
+ * Handles mouse down events.
+ *
+ * @param {jQuery.Event} e Mouse down event
+ */
+OO.ui.Toolbar.prototype.onMouseDown = function ( e ) {
+       var $closestWidgetToEvent = this.$( e.target ).closest( '.oo-ui-widget' ),
+               $closestWidgetToToolbar = this.$element.closest( '.oo-ui-widget' );
+       if ( !$closestWidgetToEvent.length || $closestWidgetToEvent[0] === $closestWidgetToToolbar[0] ) {
+               return false;
+       }
+};
+
+/**
+ * Sets up handles and preloads required information for the toolbar to work.
+ * This must be called immediately after it is attached to a visible document.
+ */
+OO.ui.Toolbar.prototype.initialize = function () {
+       this.initialized = true;
+};
+
+/**
+ * Setup toolbar.
+ *
+ * Tools can be specified in the following ways:
+ *
+ * - A specific tool: `{ 'name': 'tool-name' }` or `'tool-name'`
+ * - All tools in a group: `{ 'group': 'group-name' }`
+ * - All tools: `'*'` - Using this will make the group a list with a "More" label by default
+ *
+ * @param {Object.<string,Array>} groups List of tool group configurations
+ * @param {Array|string} [groups.include] Tools to include
+ * @param {Array|string} [groups.exclude] Tools to exclude
+ * @param {Array|string} [groups.promote] Tools to promote to the beginning
+ * @param {Array|string} [groups.demote] Tools to demote to the end
+ */
+OO.ui.Toolbar.prototype.setup = function ( groups ) {
+       var i, len, type, group,
+               items = [],
+               // TODO: Use a registry instead
+               defaultType = 'bar',
+               constructors = {
+                       'bar': OO.ui.BarToolGroup,
+                       'list': OO.ui.ListToolGroup,
+                       'menu': OO.ui.MenuToolGroup
+               };
+
+       // Cleanup previous groups
+       this.reset();
+
+       // Build out new groups
+       for ( i = 0, len = groups.length; i < len; i++ ) {
+               group = groups[i];
+               if ( group.include === '*' ) {
+                       // Apply defaults to catch-all groups
+                       if ( group.type === undefined ) {
+                               group.type = 'list';
+                       }
+                       if ( group.label === undefined ) {
+                               group.label = 'ooui-toolbar-more';
+                       }
+               }
+               type = constructors[group.type] ? group.type : defaultType;
+               items.push(
+                       new constructors[type]( this, $.extend( { '$': this.$ }, group ) )
+               );
+       }
+       this.addItems( items );
+};
+
+/**
+ * Remove all tools and groups from the toolbar.
+ */
+OO.ui.Toolbar.prototype.reset = function () {
+       var i, len;
+
+       this.groups = [];
+       this.tools = {};
+       for ( i = 0, len = this.items.length; i < len; i++ ) {
+               this.items[i].destroy();
+       }
+       this.clearItems();
+};
+
+/**
+ * Destroys toolbar, removing event handlers and DOM elements.
+ *
+ * Call this whenever you are done using a toolbar.
+ */
+OO.ui.Toolbar.prototype.destroy = function () {
+       this.reset();
+       this.$element.remove();
+};
+
+/**
+ * Check if tool has not been used yet.
+ *
+ * @param {string} name Symbolic name of tool
+ * @return {boolean} Tool is available
+ */
+OO.ui.Toolbar.prototype.isToolAvailable = function ( name ) {
+       return !this.tools[name];
+};
+
+/**
+ * Prevent tool from being used again.
+ *
+ * @param {OO.ui.Tool} tool Tool to reserve
+ */
+OO.ui.Toolbar.prototype.reserveTool = function ( tool ) {
+       this.tools[tool.getName()] = tool;
+};
+
+/**
+ * Allow tool to be used again.
+ *
+ * @param {OO.ui.Tool} tool Tool to release
+ */
+OO.ui.Toolbar.prototype.releaseTool = function ( tool ) {
+       delete this.tools[tool.getName()];
+};
+
+/**
+ * Get accelerator label for tool.
+ *
+ * This is a stub that should be overridden to provide access to accelerator information.
+ *
+ * @param {string} name Symbolic name of tool
+ * @return {string|undefined} Tool accelerator label if available
+ */
+OO.ui.Toolbar.prototype.getToolAccelerator = function () {
+       return undefined;
+};
+/**
+ * Factory for tools.
+ *
+ * @class
+ * @extends OO.Factory
+ * @constructor
+ */
+OO.ui.ToolFactory = function OoUiToolFactory() {
+       // Parent constructor
+       OO.ui.ToolFactory.super.call( this );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.ToolFactory, OO.Factory );
+
+/* Methods */
+
+/** */
+OO.ui.ToolFactory.prototype.getTools = function ( include, exclude, promote, demote ) {
+       var i, len, included, promoted, demoted,
+               auto = [],
+               used = {};
+
+       // Collect included and not excluded tools
+       included = OO.simpleArrayDifference( this.extract( include ), this.extract( exclude ) );
+
+       // Promotion
+       promoted = this.extract( promote, used );
+       demoted = this.extract( demote, used );
+
+       // Auto
+       for ( i = 0, len = included.length; i < len; i++ ) {
+               if ( !used[included[i]] ) {
+                       auto.push( included[i] );
+               }
+       }
+
+       return promoted.concat( auto ).concat( demoted );
+};
+
+/**
+ * Get a flat list of names from a list of names or groups.
+ *
+ * Tools can be specified in the following ways:
+ *
+ * - A specific tool: `{ 'name': 'tool-name' }` or `'tool-name'`
+ * - All tools in a group: `{ 'group': 'group-name' }`
+ * - All tools: `'*'`
+ *
+ * @private
+ * @param {Array|string} collection List of tools
+ * @param {Object} [used] Object with names that should be skipped as properties; extracted
+ *  names will be added as properties
+ * @return {string[]} List of extracted names
+ */
+OO.ui.ToolFactory.prototype.extract = function ( collection, used ) {
+       var i, len, item, name, tool,
+               names = [];
+
+       if ( collection === '*' ) {
+               for ( name in this.registry ) {
+                       tool = this.registry[name];
+                       if (
+                               // Only add tools by group name when auto-add is enabled
+                               tool.static.autoAdd &&
+                               // Exclude already used tools
+                               ( !used || !used[name] )
+                       ) {
+                               names.push( name );
+                               if ( used ) {
+                                       used[name] = true;
+                               }
+                       }
+               }
+       } else if ( $.isArray( collection ) ) {
+               for ( i = 0, len = collection.length; i < len; i++ ) {
+                       item = collection[i];
+                       // Allow plain strings as shorthand for named tools
+                       if ( typeof item === 'string' ) {
+                               item = { 'name': item };
+                       }
+                       if ( OO.isPlainObject( item ) ) {
+                               if ( item.group ) {
+                                       for ( name in this.registry ) {
+                                               tool = this.registry[name];
+                                               if (
+                                                       // Include tools with matching group
+                                                       tool.static.group === item.group &&
+                                                       // Only add tools by group name when auto-add is enabled
+                                                       tool.static.autoAdd &&
+                                                       // Exclude already used tools
+                                                       ( !used || !used[name] )
+                                               ) {
+                                                       names.push( name );
+                                                       if ( used ) {
+                                                               used[name] = true;
+                                                       }
+                                               }
+                                       }
+                               }
+                               // Include tools with matching name and exclude already used tools
+                               else if ( item.name && ( !used || !used[item.name] ) ) {
+                                       names.push( item.name );
+                                       if ( used ) {
+                                               used[item.name] = true;
+                                       }
+                               }
+                       }
+               }
+       }
+       return names;
+};
+/**
+ * Collection of tools.
+ *
+ * Tools can be specified in the following ways:
+ *
+ * - A specific tool: `{ 'name': 'tool-name' }` or `'tool-name'`
+ * - All tools in a group: `{ 'group': 'group-name' }`
+ * - All tools: `'*'`
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {OO.ui.Toolbar} toolbar
+ * @param {Object} [config] Configuration options
+ * @cfg {Array|string} [include=[]] List of tools to include
+ * @cfg {Array|string} [exclude=[]] List of tools to exclude
+ * @cfg {Array|string} [promote=[]] List of tools to promote to the beginning
+ * @cfg {Array|string} [demote=[]] List of tools to demote to the end
+ */
+OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.ToolGroup.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.GroupElement.call( this, this.$( '<div>' ), config );
+
+       // Properties
+       this.toolbar = toolbar;
+       this.tools = {};
+       this.pressed = null;
+       this.include = config.include || [];
+       this.exclude = config.exclude || [];
+       this.promote = config.promote || [];
+       this.demote = config.demote || [];
+       this.onCapturedMouseUpHandler = OO.ui.bind( this.onCapturedMouseUp, this );
+
+       // Events
+       this.$element.on( {
+               'mousedown': OO.ui.bind( this.onMouseDown, this ),
+               'mouseup': OO.ui.bind( this.onMouseUp, this ),
+               'mouseover': OO.ui.bind( this.onMouseOver, this ),
+               'mouseout': OO.ui.bind( this.onMouseOut, this )
+       } );
+       this.toolbar.getToolFactory().connect( this, { 'register': 'onToolFactoryRegister' } );
+
+       // Initialization
+       this.$group.addClass( 'oo-ui-toolGroup-tools' );
+       this.$element
+               .addClass( 'oo-ui-toolGroup' )
+               .append( this.$group );
+       this.populate();
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.ToolGroup, OO.ui.Widget );
+
+OO.mixinClass( OO.ui.ToolGroup, OO.ui.GroupElement );
+
+/* Events */
+
+/**
+ * @event update
+ */
+
+/* Static Properties */
+
+/**
+ * Show labels in tooltips.
+ *
+ * @static
+ * @property {boolean}
+ * @inheritable
+ */
+OO.ui.ToolGroup.static.titleTooltips = false;
+
+/**
+ * Show acceleration labels in tooltips.
+ *
+ * @static
+ * @property {boolean}
+ * @inheritable
+ */
+OO.ui.ToolGroup.static.accelTooltips = false;
+
+/* Methods */
+
+/**
+ * Handle mouse down events.
+ *
+ * @param {jQuery.Event} e Mouse down event
+ */
+OO.ui.ToolGroup.prototype.onMouseDown = function ( e ) {
+       if ( !this.disabled && e.which === 1 ) {
+               this.pressed = this.getTargetTool( e );
+               if ( this.pressed ) {
+                       this.pressed.setActive( true );
+                       this.getElementDocument().addEventListener(
+                               'mouseup', this.onCapturedMouseUpHandler, true
+                       );
+                       return false;
+               }
+       }
+};
+
+/**
+ * Handle captured mouse up events.
+ *
+ * @param {Event} e Mouse up event
+ */
+OO.ui.ToolGroup.prototype.onCapturedMouseUp = function ( e ) {
+       this.getElementDocument().removeEventListener( 'mouseup', this.onCapturedMouseUpHandler, true );
+       // onMouseUp may be called a second time, depending on where the mouse is when the button is
+       // released, but since `this.pressed` will no longer be true, the second call will be ignored.
+       this.onMouseUp( e );
+};
+
+/**
+ * Handle mouse up events.
+ *
+ * @param {jQuery.Event} e Mouse up event
+ */
+OO.ui.ToolGroup.prototype.onMouseUp = function ( e ) {
+       var tool = this.getTargetTool( e );
+
+       if ( !this.disabled && e.which === 1 && this.pressed && this.pressed === tool ) {
+               this.pressed.onSelect();
+       }
+
+       this.pressed = null;
+       return false;
+};
+
+/**
+ * Handle mouse over events.
+ *
+ * @param {jQuery.Event} e Mouse over event
+ */
+OO.ui.ToolGroup.prototype.onMouseOver = function ( e ) {
+       var tool = this.getTargetTool( e );
+
+       if ( this.pressed && this.pressed === tool ) {
+               this.pressed.setActive( true );
+       }
+};
+
+/**
+ * Handle mouse out events.
+ *
+ * @param {jQuery.Event} e Mouse out event
+ */
+OO.ui.ToolGroup.prototype.onMouseOut = function ( e ) {
+       var tool = this.getTargetTool( e );
+
+       if ( this.pressed && this.pressed === tool ) {
+               this.pressed.setActive( false );
+       }
+};
+
+/**
+ * Get the closest tool to a jQuery.Event.
+ *
+ * Only tool links are considered, which prevents other elements in the tool such as popups from
+ * triggering tool group interactions.
+ *
+ * @private
+ * @param {jQuery.Event} e
+ * @return {OO.ui.Tool|null} Tool, `null` if none was found
+ */
+OO.ui.ToolGroup.prototype.getTargetTool = function ( e ) {
+       var tool,
+               $item = this.$( e.target ).closest( '.oo-ui-tool-link' );
+
+       if ( $item.length ) {
+               tool = $item.parent().data( 'oo-ui-tool' );
+       }
+
+       return tool && !tool.isDisabled() ? tool : null;
+};
+
+/**
+ * Handle tool registry register events.
+ *
+ * If a tool is registered after the group is created, we must repopulate the list to account for:
+ *
+ * - a tool being added that may be included
+ * - a tool already included being overridden
+ *
+ * @param {string} name Symbolic name of tool
+ */
+OO.ui.ToolGroup.prototype.onToolFactoryRegister = function () {
+       this.populate();
+};
+
+/**
+ * Get the toolbar this group is in.
+ *
+ * @return {OO.ui.Toolbar} Toolbar of group
+ */
+OO.ui.ToolGroup.prototype.getToolbar = function () {
+       return this.toolbar;
+};
+
+/**
+ * Add and remove tools based on configuration.
+ */
+OO.ui.ToolGroup.prototype.populate = function () {
+       var i, len, name, tool,
+               toolFactory = this.toolbar.getToolFactory(),
+               names = {},
+               add = [],
+               remove = [],
+               list = this.toolbar.getToolFactory().getTools(
+                       this.include, this.exclude, this.promote, this.demote
+               );
+
+       // Build a list of needed tools
+       for ( i = 0, len = list.length; i < len; i++ ) {
+               name = list[i];
+               if (
+                       // Tool exists
+                       toolFactory.lookup( name ) &&
+                       // Tool is available or is already in this group
+                       ( this.toolbar.isToolAvailable( name ) || this.tools[name] )
+               ) {
+                       tool = this.tools[name];
+                       if ( !tool ) {
+                               // Auto-initialize tools on first use
+                               this.tools[name] = tool = toolFactory.create( name, this );
+                               tool.updateTitle();
+                       }
+                       this.toolbar.reserveTool( tool );
+                       add.push( tool );
+                       names[name] = true;
+               }
+       }
+       // Remove tools that are no longer needed
+       for ( name in this.tools ) {
+               if ( !names[name] ) {
+                       this.tools[name].destroy();
+                       this.toolbar.releaseTool( this.tools[name] );
+                       remove.push( this.tools[name] );
+                       delete this.tools[name];
+               }
+       }
+       if ( remove.length ) {
+               this.removeItems( remove );
+       }
+       // Update emptiness state
+       if ( add.length ) {
+               this.$element.removeClass( 'oo-ui-toolGroup-empty' );
+       } else {
+               this.$element.addClass( 'oo-ui-toolGroup-empty' );
+       }
+       // Re-add tools (moving existing ones to new locations)
+       this.addItems( add );
+};
+
+/**
+ * Destroy tool group.
+ */
+OO.ui.ToolGroup.prototype.destroy = function () {
+       var name;
+
+       this.clearItems();
+       this.toolbar.getToolFactory().disconnect( this );
+       for ( name in this.tools ) {
+               this.toolbar.releaseTool( this.tools[name] );
+               this.tools[name].disconnect( this ).destroy();
+               delete this.tools[name];
+       }
+       this.$element.remove();
+};
+/**
+ * Layout made of a fieldset and optional legend.
+ *
+ * Just add OO.ui.FieldLayout items.
+ *
+ * @class
+ * @extends OO.ui.Layout
+ * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.IconedElement
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [icon] Symbolic icon name
+ * @cfg {OO.ui.FieldLayout[]} [items] Items to add
+ */
+OO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) {
+       // Config initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.FieldsetLayout.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.IconedElement.call( this, this.$( '<div>' ), config );
+       OO.ui.LabeledElement.call( this, this.$( '<legend>' ), config );
+       OO.ui.GroupElement.call( this, this.$( '<div>' ), config );
+
+       // Initialization
+       this.$element
+               .addClass( 'oo-ui-fieldsetLayout' )
+               .append( this.$icon, this.$label, this.$group );
+       if ( $.isArray( config.items ) ) {
+               this.addItems( config.items );
+       }
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.FieldsetLayout, OO.ui.Layout );
+
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.IconedElement );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.GroupElement );
+
+/* Static Properties */
+
+OO.ui.FieldsetLayout.static.tagName = 'fieldset';
+/**
+ * Layout made of a field and optional label.
+ *
+ * @class
+ * @extends OO.ui.Layout
+ * @mixins OO.ui.LabeledElement
+ *
+ * Available label alignment modes include:
+ *  - 'left': Label is before the field and aligned away from it, best for when the user will be
+ *    scanning for a specific label in a form with many fields
+ *  - 'right': Label is before the field and aligned toward it, best for forms the user is very
+ *    familiar with and will tab through field checking quickly to verify which field they are in
+ *  - 'top': Label is before the field and above it, best for when the use will need to fill out all
+ *    fields from top to bottom in a form with few fields
+ *  - 'inline': Label is after the field and aligned toward it, best for small boolean fields like
+ *    checkboxes or radio buttons
+ *
+ * @constructor
+ * @param {OO.ui.Widget} field Field widget
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [align='left'] Alignment mode, either 'left', 'right', 'top' or 'inline'
+ */
+OO.ui.FieldLayout = function OoUiFieldLayout( field, config ) {
+       // Config initialization
+       config = $.extend( { 'align': 'left' }, config );
+
+       // Parent constructor
+       OO.ui.FieldLayout.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.LabeledElement.call( this, this.$( '<label>' ), config );
+
+       // Properties
+       this.$field = this.$( '<div>' );
+       this.field = field;
+       this.align = null;
+
+       // Events
+       if ( this.field instanceof OO.ui.InputWidget ) {
+               this.$label.on( 'click', OO.ui.bind( this.onLabelClick, this ) );
+       }
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-fieldLayout' );
+       this.$field
+               .addClass( 'oo-ui-fieldLayout-field' )
+               .append( this.field.$element );
+       this.setAlignment( config.align );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.FieldLayout, OO.ui.Layout );
+
+OO.mixinClass( OO.ui.FieldLayout, OO.ui.LabeledElement );
+
+/* Methods */
+
+/**
+ * Handles label mouse click events.
+ *
+ * @method
+ * @param {jQuery.Event} e Mouse click event
+ */
+OO.ui.FieldLayout.prototype.onLabelClick = function () {
+       this.field.simulateLabelClick();
+       return false;
+};
+
+/**
+ * Get the field.
+ *
+ * @returns {OO.ui.Widget} Field widget
+ */
+OO.ui.FieldLayout.prototype.getField = function () {
+       return this.field;
+};
+
+/**
+ * Set the field alignment mode.
+ *
+ * @param {string} value Alignment mode, either 'left', 'right', 'top' or 'inline'
+ * @chainable
+ */
+OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
+       if ( value !== this.align ) {
+               // Default to 'left'
+               if ( [ 'left', 'right', 'top', 'inline' ].indexOf( value ) === -1 ) {
+                       value = 'left';
+               }
+               // Reorder elements
+               if ( value === 'inline' ) {
+                       this.$element.append( this.$field, this.$label );
+               } else {
+                       this.$element.append( this.$label, this.$field );
+               }
+               // Set classes
+               if ( this.align ) {
+                       this.$element.removeClass( 'oo-ui-fieldLayout-align-' + this.align );
+               }
+               this.align = value;
+               this.$element.addClass( 'oo-ui-fieldLayout-align-' + this.align );
+       }
+
+       return this;
+};
+/**
+ * Layout made of proportionally sized columns and rows.
+ *
+ * @class
+ * @extends OO.ui.Layout
+ *
+ * @constructor
+ * @param {OO.ui.PanelLayout[]} panels Panels in the grid
+ * @param {Object} [config] Configuration options
+ * @cfg {number[]} [widths] Widths of columns as ratios
+ * @cfg {number[]} [heights] Heights of columns as ratios
+ */
+OO.ui.GridLayout = function OoUiGridLayout( panels, config ) {
+       var i, len, widths;
+
+       // Config initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.GridLayout.super.call( this, config );
+
+       // Properties
+       this.panels = [];
+       this.widths = [];
+       this.heights = [];
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-gridLayout' );
+       for ( i = 0, len = panels.length; i < len; i++ ) {
+               this.panels.push( panels[i] );
+               this.$element.append( panels[i].$element );
+       }
+       if ( config.widths || config.heights ) {
+               this.layout( config.widths || [1], config.heights || [1] );
+       } else {
+               // Arrange in columns by default
+               widths = [];
+               for ( i = 0, len = this.panels.length; i < len; i++ ) {
+                       widths[i] = 1;
+               }
+               this.layout( widths, [1] );
+       }
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.GridLayout, OO.ui.Layout );
+
+/* Events */
+
+/**
+ * @event layout
+ */
+
+/**
+ * @event update
+ */
+
+/* Static Properties */
+
+OO.ui.GridLayout.static.tagName = 'div';
+
+/* Methods */
+
+/**
+ * Set grid dimensions.
+ *
+ * @method
+ * @param {number[]} widths Widths of columns as ratios
+ * @param {number[]} heights Heights of rows as ratios
+ * @fires layout
+ * @throws {Error} If grid is not large enough to fit all panels
+ */
+OO.ui.GridLayout.prototype.layout = function ( widths, heights ) {
+       var x, y,
+               xd = 0,
+               yd = 0,
+               cols = widths.length,
+               rows = heights.length;
+
+       // Verify grid is big enough to fit panels
+       if ( cols * rows < this.panels.length ) {
+               throw new Error( 'Grid is not large enough to fit ' + this.panels.length + 'panels' );
+       }
+
+       // Sum up denominators
+       for ( x = 0; x < cols; x++ ) {
+               xd += widths[x];
+       }
+       for ( y = 0; y < rows; y++ ) {
+               yd += heights[y];
+       }
+       // Store factors
+       this.widths = [];
+       this.heights = [];
+       for ( x = 0; x < cols; x++ ) {
+               this.widths[x] = widths[x] / xd;
+       }
+       for ( y = 0; y < rows; y++ ) {
+               this.heights[y] = heights[y] / yd;
+       }
+       // Synchronize view
+       this.update();
+       this.emit( 'layout' );
+};
+
+/**
+ * Update panel positions and sizes.
+ *
+ * @method
+ * @fires update
+ */
+OO.ui.GridLayout.prototype.update = function () {
+       var x, y, panel,
+               i = 0,
+               left = 0,
+               top = 0,
+               dimensions,
+               width = 0,
+               height = 0,
+               cols = this.widths.length,
+               rows = this.heights.length;
+
+       for ( y = 0; y < rows; y++ ) {
+               for ( x = 0; x < cols; x++ ) {
+                       panel = this.panels[i];
+                       width = this.widths[x];
+                       height = this.heights[y];
+                       dimensions = {
+                               'width': Math.round( width * 100 ) + '%',
+                               'height': Math.round( height * 100 ) + '%',
+                               'top': Math.round( top * 100 ) + '%'
+                       };
+                       // If RTL, reverse:
+                       if ( OO.ui.Element.getDir( this.$.context ) === 'rtl' ) {
+                               dimensions.right = Math.round( left * 100 ) + '%';
+                       } else {
+                               dimensions.left = Math.round( left * 100 ) + '%';
+                       }
+                       panel.$element.css( dimensions );
+                       i++;
+                       left += width;
+               }
+               top += height;
+               left = 0;
+       }
+
+       this.emit( 'update' );
+};
+
+/**
+ * Get a panel at a given position.
+ *
+ * The x and y position is affected by the current grid layout.
+ *
+ * @method
+ * @param {number} x Horizontal position
+ * @param {number} y Vertical position
+ * @returns {OO.ui.PanelLayout} The panel at the given postion
+ */
+OO.ui.GridLayout.prototype.getPanel = function ( x, y ) {
+       return this.panels[( x * this.widths.length ) + y];
+};
+/**
+ * Layout containing a series of pages.
+ *
+ * @class
+ * @extends OO.ui.Layout
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [continuous=false] Show all pages, one after another
+ * @cfg {boolean} [autoFocus=false] Focus on the first focusable element when changing to a page
+ * @cfg {boolean} [outlined=false] Show an outline
+ * @cfg {boolean} [editable=false] Show controls for adding, removing and reordering pages
+ * @cfg {Object[]} [adders] List of adders for controls, each with name, icon and title properties
+ */
+OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
+       // Initialize configuration
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.BookletLayout.super.call( this, config );
+
+       // Properties
+       this.currentPageName = null;
+       this.pages = {};
+       this.ignoreFocus = false;
+       this.stackLayout = new OO.ui.StackLayout( { '$': this.$, 'continuous': !!config.continuous } );
+       this.autoFocus = !!config.autoFocus;
+       this.outlineVisible = false;
+       this.outlined = !!config.outlined;
+       if ( this.outlined ) {
+               this.editable = !!config.editable;
+               this.adders = config.adders || null;
+               this.outlineControlsWidget = null;
+               this.outlineWidget = new OO.ui.OutlineWidget( { '$': this.$ } );
+               this.outlinePanel = new OO.ui.PanelLayout( { '$': this.$, 'scrollable': true } );
+               this.gridLayout = new OO.ui.GridLayout(
+                       [this.outlinePanel, this.stackLayout], { '$': this.$, 'widths': [1, 2] }
+               );
+               this.outlineVisible = true;
+               if ( this.editable ) {
+                       this.outlineControlsWidget = new OO.ui.OutlineControlsWidget(
+                               this.outlineWidget,
+                               { '$': this.$, 'adders': this.adders }
+                       );
+               }
+       }
+
+       // Events
+       this.stackLayout.connect( this, { 'set': 'onStackLayoutSet' } );
+       if ( this.outlined ) {
+               this.outlineWidget.connect( this, { 'select': 'onOutlineWidgetSelect' } );
+       }
+       if ( this.autoFocus ) {
+               // Event 'focus' does not bubble, but 'focusin' does
+               this.stackLayout.onDOMEvent( 'focusin', OO.ui.bind( this.onStackLayoutFocus, this ) );
+       }
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-bookletLayout' );
+       this.stackLayout.$element.addClass( 'oo-ui-bookletLayout-stackLayout' );
+       if ( this.outlined ) {
+               this.outlinePanel.$element
+                       .addClass( 'oo-ui-bookletLayout-outlinePanel' )
+                       .append( this.outlineWidget.$element );
+               if ( this.editable ) {
+                       this.outlinePanel.$element
+                               .addClass( 'oo-ui-bookletLayout-outlinePanel-editable' )
+                               .append( this.outlineControlsWidget.$element );
+               }
+               this.$element.append( this.gridLayout.$element );
+       } else {
+               this.$element.append( this.stackLayout.$element );
+       }
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.BookletLayout, OO.ui.Layout );
+
+/* Events */
+
+/**
+ * @event set
+ * @param {OO.ui.PageLayout} page Current page
+ */
+
+/**
+ * @event add
+ * @param {OO.ui.PageLayout[]} page Added pages
+ * @param {number} index Index pages were added at
+ */
+
+/**
+ * @event remove
+ * @param {OO.ui.PageLayout[]} pages Removed pages
+ */
+
+/* Methods */
+
+/**
+ * Handle stack layout focus.
+ *
+ * @method
+ * @param {jQuery.Event} e Focusin event
+ */
+OO.ui.BookletLayout.prototype.onStackLayoutFocus = function ( e ) {
+       var name, $target;
+
+       if ( this.ignoreFocus ) {
+               // Avoid recursion from programmatic focus trigger in #onStackLayoutSet
+               return;
+       }
+
+       $target = $( e.target ).closest( '.oo-ui-pageLayout' );
+       for ( name in this.pages ) {
+               if ( this.pages[ name ].$element[0] === $target[0] ) {
+                       this.setPage( name );
+                       break;
+               }
+       }
+};
+
+/**
+ * Handle stack layout set events.
+ *
+ * @method
+ * @param {OO.ui.PanelLayout|null} page The page panel that is now the current panel
+ */
+OO.ui.BookletLayout.prototype.onStackLayoutSet = function ( page ) {
+       if ( page ) {
+               this.stackLayout.$element.find( ':focus' ).blur();
+               page.scrollElementIntoView( { 'complete': OO.ui.bind( function () {
+                       this.ignoreFocus = true;
+                       if ( this.autoFocus ) {
+                               page.$element.find( ':input:first' ).focus();
+                       }
+                       this.ignoreFocus = false;
+               }, this ) } );
+       }
+};
+
+/**
+ * Handle outline widget select events.
+ *
+ * @method
+ * @param {OO.ui.OptionWidget|null} item Selected item
+ */
+OO.ui.BookletLayout.prototype.onOutlineWidgetSelect = function ( item ) {
+       if ( item ) {
+               this.setPage( item.getData() );
+       }
+};
+
+/**
+ * Check if booklet has an outline.
+ *
+ * @method
+ * @returns {boolean} Booklet is outlined
+ */
+OO.ui.BookletLayout.prototype.isOutlined = function () {
+       return this.outlined;
+};
+
+/**
+ * Check if booklet has editing controls.
+ *
+ * @method
+ * @returns {boolean} Booklet is outlined
+ */
+OO.ui.BookletLayout.prototype.isEditable = function () {
+       return this.editable;
+};
+
+/**
+ * Check if booklet has editing controls.
+ *
+ * @method
+ * @returns {boolean} Booklet is outlined
+ */
+OO.ui.BookletLayout.prototype.isOutlineVisible = function () {
+       return this.outlined && this.outlineVisible;
+};
+
+/**
+ * Hide or show the outline.
+ *
+ * @param {boolean} [show] Show outline, omit to invert current state
+ * @chainable
+ */
+OO.ui.BookletLayout.prototype.toggleOutline = function ( show ) {
+       if ( this.outlined ) {
+               show = show === undefined ? !this.outlineVisible : !!show;
+               this.outlineVisible = show;
+               this.gridLayout.layout( show ? [ 1, 2 ] : [ 0, 1 ], [ 1 ] );
+       }
+
+       return this;
+};
+
+/**
+ * Get the outline widget.
+ *
+ * @method
+ * @param {OO.ui.PageLayout} page Page to be selected
+ * @returns {OO.ui.PageLayout|null} Closest page to another
+ */
+OO.ui.BookletLayout.prototype.getClosestPage = function ( page ) {
+       var next, prev, level,
+               pages = this.stackLayout.getItems(),
+               index = $.inArray( page, pages );
+
+       if ( index !== -1 ) {
+               next = pages[index + 1];
+               prev = pages[index - 1];
+               // Prefer adjacent pages at the same level
+               if ( this.outlined ) {
+                       level = this.outlineWidget.getItemFromData( page.getName() ).getLevel();
+                       if (
+                               prev &&
+                               level === this.outlineWidget.getItemFromData( prev.getName() ).getLevel()
+                       ) {
+                               return prev;
+                       }
+                       if (
+                               next &&
+                               level === this.outlineWidget.getItemFromData( next.getName() ).getLevel()
+                       ) {
+                               return next;
+                       }
+               }
+       }
+       return prev || next || null;
+};
+
+/**
+ * Get the outline widget.
+ *
+ * @method
+ * @returns {OO.ui.OutlineWidget|null} Outline widget, or null if boolet has no outline
+ */
+OO.ui.BookletLayout.prototype.getOutline = function () {
+       return this.outlineWidget;
+};
+
+/**
+ * Get the outline controls widget. If the outline is not editable, null is returned.
+ *
+ * @method
+ * @returns {OO.ui.OutlineControlsWidget|null} The outline controls widget.
+ */
+OO.ui.BookletLayout.prototype.getOutlineControls = function () {
+       return this.outlineControlsWidget;
+};
+
+/**
+ * Get a page by name.
+ *
+ * @method
+ * @param {string} name Symbolic name of page
+ * @returns {OO.ui.PageLayout|undefined} Page, if found
+ */
+OO.ui.BookletLayout.prototype.getPage = function ( name ) {
+       return this.pages[name];
+};
+
+/**
+ * Get the current page name.
+ *
+ * @method
+ * @returns {string|null} Current page name
+ */
+OO.ui.BookletLayout.prototype.getPageName = function () {
+       return this.currentPageName;
+};
+
+/**
+ * Add a page to the layout.
+ *
+ * When pages are added with the same names as existing pages, the existing pages will be
+ * automatically removed before the new pages are added.
+ *
+ * @method
+ * @param {OO.ui.PageLayout[]} pages Pages to add
+ * @param {number} index Index to insert pages after
+ * @fires add
+ * @chainable
+ */
+OO.ui.BookletLayout.prototype.addPages = function ( pages, index ) {
+       var i, len, name, page, item, currentIndex,
+               stackLayoutPages = this.stackLayout.getItems(),
+               remove = [],
+               items = [];
+
+       // Remove pages with same names
+       for ( i = 0, len = pages.length; i < len; i++ ) {
+               page = pages[i];
+               name = page.getName();
+
+               if ( Object.prototype.hasOwnProperty.call( this.pages, name ) ) {
+                       // Correct the insertion index
+                       currentIndex = $.inArray( this.pages[name], stackLayoutPages );
+                       if ( currentIndex !== -1 && currentIndex + 1 < index ) {
+                               index--;
+                       }
+                       remove.push( this.pages[name] );
+               }
+       }
+       if ( remove.length ) {
+               this.removePages( remove );
+       }
+
+       // Add new pages
+       for ( i = 0, len = pages.length; i < len; i++ ) {
+               page = pages[i];
+               name = page.getName();
+               this.pages[page.getName()] = page;
+               if ( this.outlined ) {
+                       item = new OO.ui.OutlineItemWidget( name, page, { '$': this.$ } );
+                       page.setOutlineItem( item );
+                       items.push( item );
+               }
+       }
+
+       if ( this.outlined && items.length ) {
+               this.outlineWidget.addItems( items, index );
+               this.updateOutlineWidget();
+       }
+       this.stackLayout.addItems( pages, index );
+       this.emit( 'add', pages, index );
+
+       return this;
+};
+
+/**
+ * Remove a page from the layout.
+ *
+ * @method
+ * @fires remove
+ * @chainable
+ */
+OO.ui.BookletLayout.prototype.removePages = function ( pages ) {
+       var i, len, name, page,
+               items = [];
+
+       for ( i = 0, len = pages.length; i < len; i++ ) {
+               page = pages[i];
+               name = page.getName();
+               delete this.pages[name];
+               if ( this.outlined ) {
+                       items.push( this.outlineWidget.getItemFromData( name ) );
+                       page.setOutlineItem( null );
+               }
+       }
+       if ( this.outlined && items.length ) {
+               this.outlineWidget.removeItems( items );
+               this.updateOutlineWidget();
+       }
+       this.stackLayout.removeItems( pages );
+       this.emit( 'remove', pages );
+
+       return this;
+};
+
+/**
+ * Clear all pages from the layout.
+ *
+ * @method
+ * @fires remove
+ * @chainable
+ */
+OO.ui.BookletLayout.prototype.clearPages = function () {
+       var i, len,
+               pages = this.stackLayout.getItems();
+
+       this.pages = {};
+       this.currentPageName = null;
+       if ( this.outlined ) {
+               this.outlineWidget.clearItems();
+               for ( i = 0, len = pages.length; i < len; i++ ) {
+                       pages[i].setOutlineItem( null );
+               }
+       }
+       this.stackLayout.clearItems();
+
+       this.emit( 'remove', pages );
+
+       return this;
+};
+
+/**
+ * Set the current page by name.
+ *
+ * @method
+ * @fires set
+ * @param {string} name Symbolic name of page
+ */
+OO.ui.BookletLayout.prototype.setPage = function ( name ) {
+       var selectedItem,
+               page = this.pages[name];
+
+       if ( name !== this.currentPageName ) {
+               if ( this.outlined ) {
+                       selectedItem = this.outlineWidget.getSelectedItem();
+                       if ( selectedItem && selectedItem.getData() !== name ) {
+                               this.outlineWidget.selectItem( this.outlineWidget.getItemFromData( name ) );
+                       }
+               }
+               if ( page ) {
+                       if ( this.currentPageName && this.pages[this.currentPageName] ) {
+                               this.pages[this.currentPageName].setActive( false );
+                       }
+                       this.currentPageName = name;
+                       this.stackLayout.setItem( page );
+                       page.setActive( true );
+                       this.emit( 'set', page );
+               }
+       }
+};
+
+/**
+ * Call this after adding or removing items from the OutlineWidget.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.BookletLayout.prototype.updateOutlineWidget = function () {
+       // Auto-select first item when nothing is selected anymore
+       if ( !this.outlineWidget.getSelectedItem() ) {
+               this.outlineWidget.selectItem( this.outlineWidget.getFirstSelectableItem() );
+       }
+
+       return this;
+};
+/**
+ * Layout that expands to cover the entire area of its parent, with optional scrolling and padding.
+ *
+ * @class
+ * @extends OO.ui.Layout
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [scrollable] Allow vertical scrolling
+ * @cfg {boolean} [padded] Pad the content from the edges
+ */
+OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
+       // Config initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.PanelLayout.super.call( this, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-panelLayout' );
+       if ( config.scrollable ) {
+               this.$element.addClass( 'oo-ui-panelLayout-scrollable' );
+       }
+
+       if ( config.padded ) {
+               this.$element.addClass( 'oo-ui-panelLayout-padded' );
+       }
+
+       // Add directionality class:
+       this.$element.addClass( 'oo-ui-' + OO.ui.Element.getDir( this.$.context ) );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );
+/**
+ * Page within an OO.ui.BookletLayout.
+ *
+ * @class
+ * @extends OO.ui.PanelLayout
+ *
+ * @constructor
+ * @param {string} name Unique symbolic name of page
+ * @param {Object} [config] Configuration options
+ * @param {string} [outlineItem] Outline item widget
+ */
+OO.ui.PageLayout = function OoUiPageLayout( name, config ) {
+       // Configuration initialization
+       config = $.extend( { 'scrollable': true }, config );
+
+       // Parent constructor
+       OO.ui.PageLayout.super.call( this, config );
+
+       // Properties
+       this.name = name;
+       this.outlineItem = config.outlineItem || null;
+       this.active = false;
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-pageLayout' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.PageLayout, OO.ui.PanelLayout );
+
+/* Events */
+
+/**
+ * @event active
+ * @param {boolean} active Page is active
+ */
+
+/* Methods */
+
+/**
+ * Get page name.
+ *
+ * @returns {string} Symbolic name of page
+ */
+OO.ui.PageLayout.prototype.getName = function () {
+       return this.name;
+};
+
+/**
+ * Check if page is active.
+ *
+ * @returns {boolean} Page is active
+ */
+OO.ui.PageLayout.prototype.isActive = function () {
+       return this.active;
+};
+
+/**
+ * Get outline item.
+ *
+ * @returns {OO.ui.OutlineItemWidget|null} Outline item widget
+ */
+OO.ui.PageLayout.prototype.getOutlineItem = function () {
+       return this.outlineItem;
+};
+
+/**
+ * Get outline item.
+ *
+ * @param {OO.ui.OutlineItemWidget|null} outlineItem Outline item widget, null to clear
+ * @chainable
+ */
+OO.ui.PageLayout.prototype.setOutlineItem = function ( outlineItem ) {
+       this.outlineItem = outlineItem;
+       return this;
+};
+
+/**
+ * Set page active state.
+ *
+ * @param {boolean} Page is active
+ * @fires active
+ */
+OO.ui.PageLayout.prototype.setActive = function ( active ) {
+       active = !!active;
+
+       if ( active !== this.active ) {
+               this.active = active;
+               this.$element.toggleClass( 'oo-ui-pageLayout-active', active );
+               this.emit( 'active', this.active );
+       }
+};
+/**
+ * Layout containing a series of mutually exclusive pages.
+ *
+ * @class
+ * @extends OO.ui.PanelLayout
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [continuous=false] Show all pages, one after another
+ * @cfg {string} [icon=''] Symbolic icon name
+ * @cfg {OO.ui.Layout[]} [items] Layouts to add
+ */
+OO.ui.StackLayout = function OoUiStackLayout( config ) {
+       // Config initialization
+       config = $.extend( { 'scrollable': true }, config );
+
+       // Parent constructor
+       OO.ui.StackLayout.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.GroupElement.call( this, this.$element, config );
+
+       // Properties
+       this.currentItem = null;
+       this.continuous = !!config.continuous;
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-stackLayout' );
+       if ( this.continuous ) {
+               this.$element.addClass( 'oo-ui-stackLayout-continuous' );
+       }
+       if ( $.isArray( config.items ) ) {
+               this.addItems( config.items );
+       }
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.StackLayout, OO.ui.PanelLayout );
+
+OO.mixinClass( OO.ui.StackLayout, OO.ui.GroupElement );
+
+/* Events */
+
+/**
+ * @event set
+ * @param {OO.ui.PanelLayout|null} [item] Current item
+ */
+
+/* Methods */
+
+/**
+ * Add items.
+ *
+ * Adding an existing item (by value) will move it.
+ *
+ * @method
+ * @param {OO.ui.PanelLayout[]} items Items to add
+ * @param {number} [index] Index to insert items after
+ * @chainable
+ */
+OO.ui.StackLayout.prototype.addItems = function ( items, index ) {
+       OO.ui.GroupElement.prototype.addItems.call( this, items, index );
+
+       if ( !this.currentItem && items.length ) {
+               this.setItem( items[0] );
+       }
+
+       return this;
+};
+
+/**
+ * Remove items.
+ *
+ * Items will be detached, not removed, so they can be used later.
+ *
+ * @method
+ * @param {OO.ui.PanelLayout[]} items Items to remove
+ * @chainable
+ */
+OO.ui.StackLayout.prototype.removeItems = function ( items ) {
+       OO.ui.GroupElement.prototype.removeItems.call( this, items );
+       if ( $.inArray( this.currentItem, items  ) !== -1 ) {
+               this.currentItem = null;
+               if ( !this.currentItem && this.items.length ) {
+                       this.setItem( this.items[0] );
+               }
+       }
+
+       return this;
+};
+
+/**
+ * Clear all items.
+ *
+ * Items will be detached, not removed, so they can be used later.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.StackLayout.prototype.clearItems = function () {
+       this.currentItem = null;
+       OO.ui.GroupElement.prototype.clearItems.call( this );
+
+       return this;
+};
+
+/**
+ * Show item.
+ *
+ * Any currently shown item will be hidden.
+ *
+ * @method
+ * @param {OO.ui.PanelLayout} item Item to show
+ * @chainable
+ */
+OO.ui.StackLayout.prototype.setItem = function ( item ) {
+       if ( item !== this.currentItem ) {
+               if ( !this.continuous ) {
+                       this.$items.css( 'display', '' );
+               }
+               if ( $.inArray( item, this.items ) !== -1 ) {
+                       if ( !this.continuous ) {
+                               item.$element.css( 'display', 'block' );
+                       }
+               } else {
+                       item = null;
+               }
+               this.currentItem = item;
+               this.emit( 'set', item );
+       }
+
+       return this;
+};
+/**
+ * Horizontal bar layout of tools as icon buttons.
+ *
+ * @class
+ * @abstract
+ * @extends OO.ui.ToolGroup
+ *
+ * @constructor
+ * @param {OO.ui.Toolbar} toolbar
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.BarToolGroup = function OoUiBarToolGroup( toolbar, config ) {
+       // Parent constructor
+       OO.ui.BarToolGroup.super.call( this, toolbar, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-barToolGroup' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.BarToolGroup, OO.ui.ToolGroup );
+
+/* Static Properties */
+
+OO.ui.BarToolGroup.static.titleTooltips = true;
+
+OO.ui.BarToolGroup.static.accelTooltips = true;
+/**
+ * Popup list of tools with an icon and optional label.
+ *
+ * @class
+ * @abstract
+ * @extends OO.ui.ToolGroup
+ * @mixins OO.ui.IconedElement
+ * @mixins OO.ui.IndicatedElement
+ * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.TitledElement
+ * @mixins OO.ui.ClippableElement
+ *
+ * @constructor
+ * @param {OO.ui.Toolbar} toolbar
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.PopupToolGroup.super.call( this, toolbar, config );
+
+       // Mixin constructors
+       OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
+       OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
+       OO.ui.LabeledElement.call( this, this.$( '<span>' ), config );
+       OO.ui.TitledElement.call( this, this.$element, config );
+       OO.ui.ClippableElement.call( this, this.$group, config );
+
+       // Properties
+       this.active = false;
+       this.dragging = false;
+       this.onBlurHandler = OO.ui.bind( this.onBlur, this );
+       this.$handle = this.$( '<span>' );
+
+       // Events
+       this.$handle.on( {
+               'mousedown': OO.ui.bind( this.onHandleMouseDown, this ),
+               'mouseup': OO.ui.bind( this.onHandleMouseUp, this )
+       } );
+
+       // Initialization
+       this.$handle
+               .addClass( 'oo-ui-popupToolGroup-handle' )
+               .append( this.$icon, this.$label, this.$indicator );
+       this.$element
+               .addClass( 'oo-ui-popupToolGroup' )
+               .prepend( this.$handle );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.PopupToolGroup, OO.ui.ToolGroup );
+
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IconedElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IndicatedElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.ClippableElement );
+
+/* Static Properties */
+
+/* Methods */
+
+/**
+ * Handle focus being lost.
+ *
+ * The event is actually generated from a mouseup, so it is not a normal blur event object.
+ *
+ * @method
+ * @param {jQuery.Event} e Mouse up event
+ */
+OO.ui.PopupToolGroup.prototype.onBlur = function ( e ) {
+       // Only deactivate when clicking outside the dropdown element
+       if ( this.$( e.target ).closest( '.oo-ui-popupToolGroup' )[0] !== this.$element[0] ) {
+               this.setActive( false );
+       }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.PopupToolGroup.prototype.onMouseUp = function ( e ) {
+       if ( !this.disabled && e.which === 1 ) {
+               this.setActive( false );
+       }
+       return OO.ui.ToolGroup.prototype.onMouseUp.call( this, e );
+};
+
+/**
+ * Handle mouse up events.
+ *
+ * @method
+ * @param {jQuery.Event} e Mouse up event
+ */
+OO.ui.PopupToolGroup.prototype.onHandleMouseUp = function () {
+       return false;
+};
+
+/**
+ * Handle mouse down events.
+ *
+ * @method
+ * @param {jQuery.Event} e Mouse down event
+ */
+OO.ui.PopupToolGroup.prototype.onHandleMouseDown = function ( e ) {
+       if ( !this.disabled && e.which === 1 ) {
+               this.setActive( !this.active );
+       }
+       return false;
+};
+
+/**
+ * Switch into active mode.
+ *
+ * When active, mouseup events anywhere in the document will trigger deactivation.
+ *
+ * @method
+ */
+OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
+       value = !!value;
+       if ( this.active !== value ) {
+               this.active = value;
+               if ( value ) {
+                       this.setClipping( true );
+                       this.$element.addClass( 'oo-ui-popupToolGroup-active' );
+                       this.getElementDocument().addEventListener( 'mouseup', this.onBlurHandler, true );
+               } else {
+                       this.setClipping( false );
+                       this.$element.removeClass( 'oo-ui-popupToolGroup-active' );
+                       this.getElementDocument().removeEventListener( 'mouseup', this.onBlurHandler, true );
+               }
+       }
+};
+/**
+ * Drop down list layout of tools as labeled icon buttons.
+ *
+ * @class
+ * @abstract
+ * @extends OO.ui.PopupToolGroup
+ *
+ * @constructor
+ * @param {OO.ui.Toolbar} toolbar
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.ListToolGroup = function OoUiListToolGroup( toolbar, config ) {
+       // Parent constructor
+       OO.ui.ListToolGroup.super.call( this, toolbar, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-listToolGroup' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.ListToolGroup, OO.ui.PopupToolGroup );
+
+/* Static Properties */
+
+OO.ui.ListToolGroup.static.accelTooltips = true;
+/**
+ * Drop down menu layout of tools as selectable menu items.
+ *
+ * @class
+ * @abstract
+ * @extends OO.ui.PopupToolGroup
+ *
+ * @constructor
+ * @param {OO.ui.Toolbar} toolbar
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.MenuToolGroup = function OoUiMenuToolGroup( toolbar, config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.MenuToolGroup.super.call( this, toolbar, config );
+
+       // Events
+       this.toolbar.connect( this, { 'updateState': 'onUpdateState' } );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-menuToolGroup' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.MenuToolGroup, OO.ui.PopupToolGroup );
+
+/* Static Properties */
+
+OO.ui.MenuToolGroup.static.accelTooltips = true;
+
+/* Methods */
+
+/**
+ * Handle the toolbar state being updated.
+ *
+ * When the state changes, the title of each active item in the menu will be joined together and
+ * used as a label for the group. The label will be empty if none of the items are active.
+ *
+ * @method
+ */
+OO.ui.MenuToolGroup.prototype.onUpdateState = function () {
+       var name,
+               labelTexts = [];
+
+       for ( name in this.tools ) {
+               if ( this.tools[name].isActive() ) {
+                       labelTexts.push( this.tools[name].getTitle() );
+               }
+       }
+
+       this.setLabel( labelTexts.join( ', ' ) );
+};
+/**
+ * UserInterface popup tool.
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Tool
+ * @mixins OO.ui.PopuppableElement
+ *
+ * @constructor
+ * @param {OO.ui.Toolbar} toolbar
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.PopupTool = function OoUiPopupTool( toolbar, config ) {
+       // Parent constructor
+       OO.ui.PopupTool.super.call( this, toolbar, config );
+
+       // Mixin constructors
+       OO.ui.PopuppableElement.call( this, config );
+
+       // Initialization
+       this.$element
+               .addClass( 'oo-ui-popupTool' )
+               .append( this.popup.$element );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.PopupTool, OO.ui.Tool );
+
+OO.mixinClass( OO.ui.PopupTool, OO.ui.PopuppableElement );
+
+/* Methods */
+
+/**
+ * Handle the tool being selected.
+ *
+ * @inheritdoc
+ */
+OO.ui.PopupTool.prototype.onSelect = function () {
+       if ( !this.disabled ) {
+               if ( this.popup.isVisible() ) {
+                       this.hidePopup();
+               } else {
+                       this.showPopup();
+               }
+       }
+       this.setActive( false );
+       return false;
+};
+
+/**
+ * Handle the toolbar state being updated.
+ *
+ * @inheritdoc
+ */
+OO.ui.PopupTool.prototype.onUpdateState = function () {
+       this.setActive( false );
+};
+/**
+ * Group widget.
+ *
+ * Use together with OO.ui.ItemWidget to make disabled state inheritable.
+ *
+ * @class
+ * @abstract
+ * @extends OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {jQuery} $group Container node, assigned to #$group
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.GroupWidget = function OoUiGroupWidget( $element, config ) {
+       // Parent constructor
+       OO.ui.GroupWidget.super.call( this, $element, config );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.GroupWidget, OO.ui.GroupElement );
+
+/* Methods */
+
+/**
+ * Set the disabled state of the widget.
+ *
+ * This will also update the disabled state of child widgets.
+ *
+ * @method
+ * @param {boolean} disabled Disable widget
+ * @chainable
+ */
+OO.ui.GroupWidget.prototype.setDisabled = function ( disabled ) {
+       var i, len;
+
+       // Parent method
+       OO.ui.Widget.prototype.setDisabled.call( this, disabled );
+
+       // During construction, #setDisabled is called before the OO.ui.GroupElement constructor
+       if ( this.items ) {
+               for ( i = 0, len = this.items.length; i < len; i++ ) {
+                       this.items[i].updateDisabled();
+               }
+       }
+
+       return this;
+};
+/**
+ * Item widget.
+ *
+ * Use together with OO.ui.GroupWidget to make disabled state inheritable.
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ */
+OO.ui.ItemWidget = function OoUiItemWidget() {
+       //
+};
+
+/* Methods */
+
+/**
+ * Check if widget is disabled.
+ *
+ * Checks parent if present, making disabled state inheritable.
+ *
+ * @returns {boolean} Widget is disabled
+ */
+OO.ui.ItemWidget.prototype.isDisabled = function () {
+       return this.disabled ||
+               ( this.elementGroup instanceof OO.ui.Widget && this.elementGroup.isDisabled() );
+};
+
+/**
+ * Set group element is in.
+ *
+ * @param {OO.ui.GroupElement|null} group Group element, null if none
+ * @chainable
+ */
+OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
+       // Parent method
+       OO.ui.Element.prototype.setElementGroup.call( this, group );
+
+       // Initialize item disabled states
+       this.updateDisabled();
+
+       return this;
+};
+/**
+ * Creates an OO.ui.IconWidget object.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IconedElement
+ * @mixins OO.ui.TitledElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.IconWidget = function OoUiIconWidget( config ) {
+       // Config intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.IconWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.IconedElement.call( this, this.$element, config );
+       OO.ui.TitledElement.call( this, this.$element, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-iconWidget' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.IconWidget, OO.ui.Widget );
+
+OO.mixinClass( OO.ui.IconWidget, OO.ui.IconedElement );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.TitledElement );
+
+/* Static Properties */
+
+OO.ui.IconWidget.static.tagName = 'span';
+/**
+ * Creates an OO.ui.IndicatorWidget object.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IndicatedElement
+ * @mixins OO.ui.TitledElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.IndicatorWidget = function OoUiIndicatorWidget( config ) {
+       // Config intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.IndicatorWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.IndicatedElement.call( this, this.$element, config );
+       OO.ui.TitledElement.call( this, this.$element, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-indicatorWidget' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.IndicatorWidget, OO.ui.Widget );
+
+OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.IndicatedElement );
+OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.TitledElement );
+
+/* Static Properties */
+
+OO.ui.IndicatorWidget.static.tagName = 'span';
+/**
+ * Container for multiple related buttons.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {OO.ui.ButtonWidget} [items] Buttons to add
+ */
+OO.ui.ButtonGroupWidget = function OoUiButtonGroupWidget( config ) {
+       // Parent constructor
+       OO.ui.ButtonGroupWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.GroupElement.call( this, this.$element, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-buttonGroupWidget' );
+       if ( $.isArray( config.items ) ) {
+               this.addItems( config.items );
+       }
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.ButtonGroupWidget, OO.ui.Widget );
+
+OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.GroupElement );
+/**
+ * Creates an OO.ui.ButtonWidget object.
+ *
+ * @class
+ * @abstract
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.ButtonedElement
+ * @mixins OO.ui.IconedElement
+ * @mixins OO.ui.IndicatedElement
+ * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.TitledElement
+ * @mixins OO.ui.FlaggableElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [title=''] Title text
+ * @cfg {string} [href] Hyperlink to visit when clicked
+ * @cfg {string} [target] Target to open hyperlink in
+ */
+OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
+       // Configuration initialization
+       config = $.extend( { 'target': '_blank' }, config );
+
+       // Parent constructor
+       OO.ui.ButtonWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.ButtonedElement.call( this, this.$( '<a>' ), config );
+       OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
+       OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
+       OO.ui.LabeledElement.call( this, this.$( '<span>' ), config );
+       OO.ui.TitledElement.call( this, this.$button, config );
+       OO.ui.FlaggableElement.call( this, config );
+
+       // Properties
+       this.isHyperlink = typeof config.href === 'string';
+
+       // Events
+       this.$button.on( {
+               'click': OO.ui.bind( this.onClick, this ),
+               'keypress': OO.ui.bind( this.onKeyPress, this )
+       } );
+
+       // Initialization
+       this.$button
+               .append( this.$icon, this.$label, this.$indicator )
+               .attr( { 'href': config.href, 'target': config.target } );
+       this.$element
+               .addClass( 'oo-ui-buttonWidget' )
+               .append( this.$button );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.ButtonWidget, OO.ui.Widget );
+
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.ButtonedElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IconedElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IndicatedElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.FlaggableElement );
+
+/* Events */
+
+/**
+ * @event click
+ */
+
+/* Methods */
+
+/**
+ * Handles mouse click events.
+ *
+ * @method
+ * @param {jQuery.Event} e Mouse click event
+ * @fires click
+ */
+OO.ui.ButtonWidget.prototype.onClick = function () {
+       if ( !this.disabled ) {
+               this.emit( 'click' );
+               if ( this.isHyperlink ) {
+                       return true;
+               }
+       }
+       return false;
+};
+
+/**
+ * Handles keypress events.
+ *
+ * @method
+ * @param {jQuery.Event} e Keypress event
+ * @fires click
+ */
+OO.ui.ButtonWidget.prototype.onKeyPress = function ( e ) {
+       if ( !this.disabled && e.which === OO.ui.Keys.SPACE ) {
+               if ( this.isHyperlink ) {
+                       this.onClick();
+                       return true;
+               }
+       }
+       return false;
+};
+/**
+ * Creates an OO.ui.InputWidget object.
+ *
+ * @class
+ * @abstract
+ * @extends OO.ui.Widget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [name=''] HTML input name
+ * @cfg {string} [value=''] Input value
+ * @cfg {boolean} [readOnly=false] Prevent changes
+ * @cfg {Function} [inputFilter] Filter function to apply to the input. Takes a string argument and returns a string.
+ */
+OO.ui.InputWidget = function OoUiInputWidget( config ) {
+       // Config intialization
+       config = $.extend( { 'readOnly': false }, config );
+
+       // Parent constructor
+       OO.ui.InputWidget.super.call( this, config );
+
+       // Properties
+       this.$input = this.getInputElement( config );
+       this.value = '';
+       this.readOnly = false;
+       this.inputFilter = config.inputFilter;
+
+       // Events
+       this.$input.on( 'keydown mouseup cut paste change input select', OO.ui.bind( this.onEdit, this ) );
+
+       // Initialization
+       this.$input
+               .attr( 'name', config.name )
+               .prop( 'disabled', this.disabled );
+       this.setReadOnly( config.readOnly );
+       this.$element.addClass( 'oo-ui-inputWidget' ).append( this.$input );
+       this.setValue( config.value );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.InputWidget, OO.ui.Widget );
+
+/* Events */
+
+/**
+ * @event change
+ * @param value
+ */
+
+/* Methods */
+
+/**
+ * Get input element.
+ *
+ * @method
+ * @param {Object} [config] Configuration options
+ * @returns {jQuery} Input element
+ */
+OO.ui.InputWidget.prototype.getInputElement = function () {
+       return this.$( '<input>' );
+};
+
+/**
+ * Handle potentially value-changing events.
+ *
+ * @method
+ * @param {jQuery.Event} e Key down, mouse up, cut, paste, change, input, or select event
+ */
+OO.ui.InputWidget.prototype.onEdit = function () {
+       if ( !this.disabled ) {
+               // Allow the stack to clear so the value will be updated
+               setTimeout( OO.ui.bind( function () {
+                       this.setValue( this.$input.val() );
+               }, this ) );
+       }
+};
+
+/**
+ * Get the value of the input.
+ *
+ * @method
+ * @returns {string} Input value
+ */
+OO.ui.InputWidget.prototype.getValue = function () {
+       return this.value;
+};
+
+/**
+ * Sets the direction of the current input, either RTL or LTR
+ *
+ * @method
+ * @param {boolean} isRTL
+ */
+OO.ui.InputWidget.prototype.setRTL = function ( isRTL ) {
+       if ( isRTL ) {
+               this.$input.removeClass( 'oo-ui-ltr' );
+               this.$input.addClass( 'oo-ui-rtl' );
+       } else {
+               this.$input.removeClass( 'oo-ui-rtl' );
+               this.$input.addClass( 'oo-ui-ltr' );
+       }
+};
+
+/**
+ * Set the value of the input.
+ *
+ * @method
+ * @param {string} value New value
+ * @fires change
+ * @chainable
+ */
+OO.ui.InputWidget.prototype.setValue = function ( value ) {
+       value = this.sanitizeValue( value );
+       if ( this.value !== value ) {
+               this.value = value;
+               this.emit( 'change', this.value );
+       }
+       // Update the DOM if it has changed. Note that with sanitizeValue, it
+       // is possible for the DOM value to change without this.value changing.
+       if ( this.$input.val() !== this.value ) {
+               this.$input.val( this.value );
+       }
+       return this;
+};
+
+/**
+ * Sanitize incoming value.
+ *
+ * Ensures value is a string, and converts undefined and null to empty strings.
+ *
+ * @method
+ * @param {string} value Original value
+ * @returns {string} Sanitized value
+ */
+OO.ui.InputWidget.prototype.sanitizeValue = function ( value ) {
+       if ( value === undefined || value === null ) {
+               return '';
+       } else if ( this.inputFilter ) {
+               return this.inputFilter( String( value ) );
+       } else {
+               return String( value );
+       }
+};
+
+/**
+ * Simulate the behavior of clicking on a label bound to this input.
+ *
+ * @method
+ */
+OO.ui.InputWidget.prototype.simulateLabelClick = function () {
+       if ( !this.isDisabled() ) {
+               if ( this.$input.is( ':checkbox,:radio' ) ) {
+                       this.$input.click();
+               } else if ( this.$input.is( ':input' ) ) {
+                       this.$input.focus();
+               }
+       }
+};
+
+/**
+ * Check if the widget is read-only.
+ *
+ * @method
+ * @param {boolean} Input is read-only
+ */
+OO.ui.InputWidget.prototype.isReadOnly = function () {
+       return this.readOnly;
+};
+
+/**
+ * Set the read-only state of the widget.
+ *
+ * This should probably change the widgets's appearance and prevent it from being used.
+ *
+ * @method
+ * @param {boolean} state Make input read-only
+ * @chainable
+ */
+OO.ui.InputWidget.prototype.setReadOnly = function ( state ) {
+       this.readOnly = !!state;
+       this.$input.prop( 'readonly', this.readOnly );
+       return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.InputWidget.prototype.setDisabled = function ( state ) {
+       OO.ui.Widget.prototype.setDisabled.call( this, state );
+       if ( this.$input ) {
+               this.$input.prop( 'disabled', this.disabled );
+       }
+       return this;
+};
+/**
+ * Creates an OO.ui.CheckboxInputWidget object.
+ *
+ * @class
+ * @extends OO.ui.InputWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.CheckboxInputWidget = function OoUiCheckboxInputWidget( config ) {
+       // Parent constructor
+       OO.ui.CheckboxInputWidget.super.call( this, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-checkboxInputWidget' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.CheckboxInputWidget, OO.ui.InputWidget );
+
+/* Events */
+
+/* Methods */
+
+/**
+ * Get input element.
+ *
+ * @returns {jQuery} Input element
+ */
+OO.ui.CheckboxInputWidget.prototype.getInputElement = function () {
+       return this.$( '<input type="checkbox" />' );
+};
+
+/**
+ * Get checked state of the checkbox
+ *
+ * @returns {boolean} If the checkbox is checked
+ */
+OO.ui.CheckboxInputWidget.prototype.getValue = function () {
+       return this.value;
+};
+
+/**
+ * Set value
+ */
+OO.ui.CheckboxInputWidget.prototype.setValue = function ( value ) {
+       value = !!value;
+       if ( this.value !== value ) {
+               this.value = value;
+               this.$input.prop( 'checked', this.value );
+               this.emit( 'change', this.value );
+       }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.CheckboxInputWidget.prototype.onEdit = function () {
+       if ( !this.disabled ) {
+               // Allow the stack to clear so the value will be updated
+               setTimeout( OO.ui.bind( function () {
+                       this.setValue( this.$input.prop( 'checked' ) );
+               }, this ) );
+       }
+};
+/**
+ * Creates an OO.ui.LabelWidget object.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.LabeledElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.LabelWidget = function OoUiLabelWidget( config ) {
+       // Config intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.LabelWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.LabeledElement.call( this, this.$element, config );
+
+       // Properties
+       this.input = config.input;
+
+       // Events
+       if ( this.input instanceof OO.ui.InputWidget ) {
+               this.$element.on( 'click', OO.ui.bind( this.onClick, this ) );
+       }
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-labelWidget' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.LabelWidget, OO.ui.Widget );
+
+OO.mixinClass( OO.ui.LabelWidget, OO.ui.LabeledElement );
+
+/* Static Properties */
+
+OO.ui.LabelWidget.static.tagName = 'label';
+
+/* Methods */
+
+/**
+ * Handles label mouse click events.
+ *
+ * @method
+ * @param {jQuery.Event} e Mouse click event
+ */
+OO.ui.LabelWidget.prototype.onClick = function () {
+       this.input.simulateLabelClick();
+       return false;
+};
+/**
+ * Lookup input widget.
+ *
+ * Mixin that adds a menu showing suggested values to a text input. Subclasses must handle `select`
+ * events on #lookupMenu to make use of selections.
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ * @param {OO.ui.TextInputWidget} input Input widget
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$overlay=this.$( 'body' )] Overlay layer
+ */
+OO.ui.LookupInputWidget = function OoUiLookupInputWidget( input, config ) {
+       // Config intialization
+       config = config || {};
+
+       // Properties
+       this.lookupInput = input;
+       this.$overlay = config.$overlay || this.$( 'body,.oo-ui-window-overlay' ).last();
+       this.lookupMenu = new OO.ui.TextInputMenuWidget( this, {
+               '$': OO.ui.Element.getJQuery( this.$overlay ),
+               'input': this.lookupInput,
+               '$container': config.$container
+       } );
+       this.lookupCache = {};
+       this.lookupQuery = null;
+       this.lookupRequest = null;
+       this.populating = false;
+
+       // Events
+       this.$overlay.append( this.lookupMenu.$element );
+
+       this.lookupInput.$input.on( {
+               'focus': OO.ui.bind( this.onLookupInputFocus, this ),
+               'blur': OO.ui.bind( this.onLookupInputBlur, this ),
+               'mousedown': OO.ui.bind( this.onLookupInputMouseDown, this )
+       } );
+       this.lookupInput.connect( this, { 'change': 'onLookupInputChange' } );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-lookupWidget' );
+       this.lookupMenu.$element.addClass( 'oo-ui-lookupWidget-menu' );
+};
+
+/* Methods */
+
+/**
+ * Handle input focus event.
+ *
+ * @method
+ * @param {jQuery.Event} e Input focus event
+ */
+OO.ui.LookupInputWidget.prototype.onLookupInputFocus = function () {
+       this.openLookupMenu();
+};
+
+/**
+ * Handle input blur event.
+ *
+ * @method
+ * @param {jQuery.Event} e Input blur event
+ */
+OO.ui.LookupInputWidget.prototype.onLookupInputBlur = function () {
+       this.lookupMenu.hide();
+};
+
+/**
+ * Handle input mouse down event.
+ *
+ * @method
+ * @param {jQuery.Event} e Input mouse down event
+ */
+OO.ui.LookupInputWidget.prototype.onLookupInputMouseDown = function () {
+       this.openLookupMenu();
+};
+
+/**
+ * Handle input change event.
+ *
+ * @method
+ * @param {string} value New input value
+ */
+OO.ui.LookupInputWidget.prototype.onLookupInputChange = function () {
+       this.openLookupMenu();
+};
+
+/**
+ * Open the menu.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.LookupInputWidget.prototype.openLookupMenu = function () {
+       var value = this.lookupInput.getValue();
+
+       if ( this.lookupMenu.$input.is( ':focus' ) && $.trim( value ) !== '' ) {
+               this.populateLookupMenu();
+               if ( !this.lookupMenu.isVisible() ) {
+                       this.lookupMenu.show();
+               }
+       } else {
+               this.lookupMenu.clearItems();
+               this.lookupMenu.hide();
+       }
+
+       return this;
+};
+
+/**
+ * Populate lookup menu with current information.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.LookupInputWidget.prototype.populateLookupMenu = function () {
+       if ( !this.populating ) {
+               this.populating = true;
+               this.getLookupMenuItems()
+                       .done( OO.ui.bind( function ( items ) {
+                               this.lookupMenu.clearItems();
+                               if ( items.length ) {
+                                       this.lookupMenu.show();
+                                       this.lookupMenu.addItems( items );
+                                       this.initializeLookupMenuSelection();
+                                       this.openLookupMenu();
+                               } else {
+                                       this.lookupMenu.hide();
+                               }
+                               this.populating = false;
+                       }, this ) )
+                       .fail( OO.ui.bind( function () {
+                               this.lookupMenu.clearItems();
+                               this.populating = false;
+                       }, this ) );
+       }
+
+       return this;
+};
+
+/**
+ * Set selection in the lookup menu with current information.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.LookupInputWidget.prototype.initializeLookupMenuSelection = function () {
+       if ( !this.lookupMenu.getSelectedItem() ) {
+               this.lookupMenu.intializeSelection( this.lookupMenu.getFirstSelectableItem() );
+       }
+       this.lookupMenu.highlightItem( this.lookupMenu.getSelectedItem() );
+};
+
+/**
+ * Get lookup menu items for the current query.
+ *
+ * @method
+ * @returns {jQuery.Promise} Promise object which will be passed menu items as the first argument
+ * of the done event
+ */
+OO.ui.LookupInputWidget.prototype.getLookupMenuItems = function () {
+       var value = this.lookupInput.getValue(),
+               deferred = $.Deferred();
+
+       if ( value && value !== this.lookupQuery ) {
+               // Abort current request if query has changed
+               if ( this.lookupRequest ) {
+                       this.lookupRequest.abort();
+                       this.lookupQuery = null;
+                       this.lookupRequest = null;
+               }
+               if ( value in this.lookupCache ) {
+                       deferred.resolve( this.getLookupMenuItemsFromData( this.lookupCache[value] ) );
+               } else {
+                       this.lookupQuery = value;
+                       this.lookupRequest = this.getLookupRequest()
+                               .always( OO.ui.bind( function () {
+                                       this.lookupQuery = null;
+                                       this.lookupRequest = null;
+                               }, this ) )
+                               .done( OO.ui.bind( function ( data ) {
+                                       this.lookupCache[value] = this.getLookupCacheItemFromData( data );
+                                       deferred.resolve( this.getLookupMenuItemsFromData( this.lookupCache[value] ) );
+                               }, this ) )
+                               .fail( function () {
+                                       deferred.reject();
+                               } );
+                       this.pushPending();
+                       this.lookupRequest.always( OO.ui.bind( function () {
+                               this.popPending();
+                       }, this ) );
+               }
+       }
+       return deferred.promise();
+};
+
+/**
+ * Get a new request object of the current lookup query value.
+ *
+ * @method
+ * @abstract
+ * @returns {jqXHR} jQuery AJAX object, or promise object with an .abort() method
+ */
+OO.ui.LookupInputWidget.prototype.getLookupRequest = function () {
+       // Stub, implemented in subclass
+       return null;
+};
+
+/**
+ * Handle successful lookup request.
+ *
+ * Overriding methods should call #populateLookupMenu when results are available and cache results
+ * for future lookups in #lookupCache as an array of #OO.ui.MenuItemWidget objects.
+ *
+ * @method
+ * @abstract
+ * @param {Mixed} data Response from server
+ */
+OO.ui.LookupInputWidget.prototype.onLookupRequestDone = function () {
+       // Stub, implemented in subclass
+};
+
+/**
+ * Get a list of menu item widgets from the data stored by the lookup request's done handler.
+ *
+ * @method
+ * @abstract
+ * @param {Mixed} data Cached result data, usually an array
+ * @returns {OO.ui.MenuItemWidget[]} Menu items
+ */
+OO.ui.LookupInputWidget.prototype.getLookupMenuItemsFromData = function () {
+       // Stub, implemented in subclass
+       return [];
+};
+/**
+ * Creates an OO.ui.OptionWidget object.
+ *
+ * @class
+ * @abstract
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IconedElement
+ * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.IndicatedElement
+ * @mixins OO.ui.FlaggableElement
+ *
+ * @constructor
+ * @param {Mixed} data Option data
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [rel] Value for `rel` attribute in DOM, allowing per-option styling
+ */
+OO.ui.OptionWidget = function OoUiOptionWidget( data, config ) {
+       // Config intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.OptionWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.ItemWidget.call( this );
+       OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
+       OO.ui.LabeledElement.call( this, this.$( '<span>' ), config );
+       OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
+       OO.ui.FlaggableElement.call( this, config );
+
+       // Properties
+       this.data = data;
+       this.selected = false;
+       this.highlighted = false;
+
+       // Initialization
+       this.$element
+               .data( 'oo-ui-optionWidget', this )
+               .attr( 'rel', config.rel )
+               .addClass( 'oo-ui-optionWidget' )
+               .append( this.$label );
+       this.$element
+               .prepend( this.$icon )
+               .append( this.$indicator );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.OptionWidget, OO.ui.Widget );
+
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.ItemWidget );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.IconedElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.IndicatedElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.FlaggableElement );
+
+/* Static Properties */
+
+OO.ui.OptionWidget.static.tagName = 'li';
+
+OO.ui.OptionWidget.static.selectable = true;
+
+OO.ui.OptionWidget.static.highlightable = true;
+
+OO.ui.OptionWidget.static.scrollIntoViewOnSelect = false;
+
+/* Methods */
+
+/**
+ * Check if option can be selected.
+ *
+ * @method
+ * @returns {boolean} Item is selectable
+ */
+OO.ui.OptionWidget.prototype.isSelectable = function () {
+       return this.constructor.static.selectable && !this.disabled;
+};
+
+/**
+ * Check if option can be highlighted.
+ *
+ * @method
+ * @returns {boolean} Item is highlightable
+ */
+OO.ui.OptionWidget.prototype.isHighlightable = function () {
+       return this.constructor.static.highlightable && !this.disabled;
+};
+
+/**
+ * Check if option is selected.
+ *
+ * @method
+ * @returns {boolean} Item is selected
+ */
+OO.ui.OptionWidget.prototype.isSelected = function () {
+       return this.selected;
+};
+
+/**
+ * Check if option is highlighted.
+ *
+ * @method
+ * @returns {boolean} Item is highlighted
+ */
+OO.ui.OptionWidget.prototype.isHighlighted = function () {
+       return this.highlighted;
+};
+
+/**
+ * Set selected state.
+ *
+ * @method
+ * @param {boolean} [state=false] Select option
+ * @chainable
+ */
+OO.ui.OptionWidget.prototype.setSelected = function ( state ) {
+       if ( !this.disabled && this.constructor.static.selectable ) {
+               this.selected = !!state;
+               if ( this.selected ) {
+                       this.$element.addClass( 'oo-ui-optionWidget-selected' );
+                       if ( this.constructor.static.scrollIntoViewOnSelect ) {
+                               this.scrollElementIntoView();
+                       }
+               } else {
+                       this.$element.removeClass( 'oo-ui-optionWidget-selected' );
+               }
+       }
+       return this;
+};
+
+/**
+ * Set highlighted state.
+ *
+ * @method
+ * @param {boolean} [state=false] Highlight option
+ * @chainable
+ */
+OO.ui.OptionWidget.prototype.setHighlighted = function ( state ) {
+       if ( !this.disabled && this.constructor.static.highlightable ) {
+               this.highlighted = !!state;
+               if ( this.highlighted ) {
+                       this.$element.addClass( 'oo-ui-optionWidget-highlighted' );
+               } else {
+                       this.$element.removeClass( 'oo-ui-optionWidget-highlighted' );
+               }
+       }
+       return this;
+};
+
+/**
+ * Make the option's highlight flash.
+ *
+ * @method
+ * @param {Function} [done] Callback to execute when flash effect is complete.
+ */
+OO.ui.OptionWidget.prototype.flash = function ( done ) {
+       var $this = this.$element;
+
+       if ( !this.disabled && this.constructor.static.highlightable ) {
+               $this.removeClass( 'oo-ui-optionWidget-highlighted' );
+               setTimeout( OO.ui.bind( function () {
+                       $this.addClass( 'oo-ui-optionWidget-highlighted' );
+                       if ( done ) {
+                               setTimeout( done, 100 );
+                       }
+               }, this ), 100 );
+       }
+};
+
+/**
+ * Get option data.
+ *
+ * @method
+ * @returns {Mixed} Option data
+ */
+OO.ui.OptionWidget.prototype.getData = function () {
+       return this.data;
+};
+/**
+ * Create an OO.ui.SelectWidget object.
+ *
+ * @class
+ * @abstract
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {OO.ui.OptionWidget[]} [items] Options to add
+ */
+OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
+       // Config intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.SelectWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.GroupWidget.call( this, this.$element, config );
+
+       // Properties
+       this.pressed = false;
+       this.selecting = null;
+       this.hashes = {};
+
+       // Events
+       this.$element.on( {
+               'mousedown': OO.ui.bind( this.onMouseDown, this ),
+               'mouseup': OO.ui.bind( this.onMouseUp, this ),
+               'mousemove': OO.ui.bind( this.onMouseMove, this ),
+               'mouseover': OO.ui.bind( this.onMouseOver, this ),
+               'mouseleave': OO.ui.bind( this.onMouseLeave, this )
+       } );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-selectWidget' );
+       if ( $.isArray( config.items ) ) {
+               this.addItems( config.items );
+       }
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.SelectWidget, OO.ui.Widget );
+
+// Need to mixin base class as well
+OO.mixinClass( OO.ui.SelectWidget, OO.ui.GroupElement );
+
+OO.mixinClass( OO.ui.SelectWidget, OO.ui.GroupWidget );
+
+/* Events */
+
+/**
+ * @event highlight
+ * @param {OO.ui.OptionWidget|null} item Highlighted item
+ */
+
+/**
+ * @event select
+ * @param {OO.ui.OptionWidget|null} item Selected item
+ */
+
+/**
+ * @event add
+ * @param {OO.ui.OptionWidget[]} items Added items
+ * @param {number} index Index items were added at
+ */
+
+/**
+ * @event remove
+ * @param {OO.ui.OptionWidget[]} items Removed items
+ */
+
+/* Static Properties */
+
+OO.ui.SelectWidget.static.tagName = 'ul';
+
+/* Methods */
+
+/**
+ * Handle mouse down events.
+ *
+ * @method
+ * @private
+ * @param {jQuery.Event} e Mouse down event
+ */
+OO.ui.SelectWidget.prototype.onMouseDown = function ( e ) {
+       var item;
+
+       if ( !this.disabled && e.which === 1 ) {
+               this.pressed = true;
+               item = this.getTargetItem( e );
+               if ( item && item.isSelectable() ) {
+                       this.intializeSelection( item );
+                       this.selecting = item;
+                       this.$( this.$.context ).one( 'mouseup', OO.ui.bind( this.onMouseUp, this ) );
+               }
+       }
+       return false;
+};
+
+/**
+ * Handle mouse up events.
+ *
+ * @method
+ * @private
+ * @param {jQuery.Event} e Mouse up event
+ */
+OO.ui.SelectWidget.prototype.onMouseUp = function ( e ) {
+       var item;
+       this.pressed = false;
+       if ( !this.selecting ) {
+               item = this.getTargetItem( e );
+               if ( item && item.isSelectable() ) {
+                       this.selecting = item;
+               }
+       }
+       if ( !this.disabled && e.which === 1 && this.selecting ) {
+               this.selectItem( this.selecting );
+               this.selecting = null;
+       }
+       return false;
+};
+
+/**
+ * Handle mouse move events.
+ *
+ * @method
+ * @private
+ * @param {jQuery.Event} e Mouse move event
+ */
+OO.ui.SelectWidget.prototype.onMouseMove = function ( e ) {
+       var item;
+
+       if ( !this.disabled && this.pressed ) {
+               item = this.getTargetItem( e );
+               if ( item && item !== this.selecting && item.isSelectable() ) {
+                       this.intializeSelection( item );
+                       this.selecting = item;
+               }
+       }
+       return false;
+};
+
+/**
+ * Handle mouse over events.
+ *
+ * @method
+ * @private
+ * @param {jQuery.Event} e Mouse over event
+ */
+OO.ui.SelectWidget.prototype.onMouseOver = function ( e ) {
+       var item;
+
+       if ( !this.disabled ) {
+               item = this.getTargetItem( e );
+               if ( item && item.isHighlightable() ) {
+                       this.highlightItem( item );
+               }
+       }
+       return false;
+};
+
+/**
+ * Handle mouse leave events.
+ *
+ * @method
+ * @private
+ * @param {jQuery.Event} e Mouse over event
+ */
+OO.ui.SelectWidget.prototype.onMouseLeave = function () {
+       if ( !this.disabled ) {
+               this.highlightItem();
+       }
+       return false;
+};
+
+/**
+ * Get the closest item to a jQuery.Event.
+ *
+ * @method
+ * @private
+ * @param {jQuery.Event} e
+ * @returns {OO.ui.OptionWidget|null} Outline item widget, `null` if none was found
+ */
+OO.ui.SelectWidget.prototype.getTargetItem = function ( e ) {
+       var $item = this.$( e.target ).closest( '.oo-ui-optionWidget' );
+       if ( $item.length ) {
+               return $item.data( 'oo-ui-optionWidget' );
+       }
+       return null;
+};
+
+/**
+ * Get selected item.
+ *
+ * @method
+ * @returns {OO.ui.OptionWidget|null} Selected item, `null` if no item is selected
+ */
+OO.ui.SelectWidget.prototype.getSelectedItem = function () {
+       var i, len;
+
+       for ( i = 0, len = this.items.length; i < len; i++ ) {
+               if ( this.items[i].isSelected() ) {
+                       return this.items[i];
+               }
+       }
+       return null;
+};
+
+/**
+ * Get highlighted item.
+ *
+ * @method
+ * @returns {OO.ui.OptionWidget|null} Highlighted item, `null` if no item is highlighted
+ */
+OO.ui.SelectWidget.prototype.getHighlightedItem = function () {
+       var i, len;
+
+       for ( i = 0, len = this.items.length; i < len; i++ ) {
+               if ( this.items[i].isHighlighted() ) {
+                       return this.items[i];
+               }
+       }
+       return null;
+};
+
+/**
+ * Get an existing item with equivilant data.
+ *
+ * @method
+ * @param {Object} data Item data to search for
+ * @returns {OO.ui.OptionWidget|null} Item with equivilent value, `null` if none exists
+ */
+OO.ui.SelectWidget.prototype.getItemFromData = function ( data ) {
+       var hash = OO.getHash( data );
+
+       if ( hash in this.hashes ) {
+               return this.hashes[hash];
+       }
+
+       return null;
+};
+
+/**
+ * Highlight an item.
+ *
+ * Highlighting is mutually exclusive.
+ *
+ * @method
+ * @param {OO.ui.OptionWidget} [item] Item to highlight, omit to deselect all
+ * @fires highlight
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.highlightItem = function ( item ) {
+       var i, len;
+
+       for ( i = 0, len = this.items.length; i < len; i++ ) {
+               this.items[i].setHighlighted( this.items[i] === item );
+       }
+       this.emit( 'highlight', item );
+
+       return this;
+};
+
+/**
+ * Select an item.
+ *
+ * @method
+ * @param {OO.ui.OptionWidget} [item] Item to select, omit to deselect all
+ * @fires select
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.selectItem = function ( item ) {
+       var i, len;
+
+       for ( i = 0, len = this.items.length; i < len; i++ ) {
+               this.items[i].setSelected( this.items[i] === item );
+       }
+       this.emit( 'select', item );
+
+       return this;
+};
+
+/**
+ * Setup selection and highlighting.
+ *
+ * This should be used to synchronize the UI with the model without emitting events that would in
+ * turn update the model.
+ *
+ * @param {OO.ui.OptionWidget} [item] Item to select
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.intializeSelection = function( item ) {
+       var i, len, selected;
+
+       for ( i = 0, len = this.items.length; i < len; i++ ) {
+               selected = this.items[i] === item;
+               this.items[i].setSelected( selected );
+               this.items[i].setHighlighted( selected );
+       }
+
+       return this;
+};
+
+/**
+ * Get an item relative to another one.
+ *
+ * @method
+ * @param {OO.ui.OptionWidget} item Item to start at
+ * @param {number} direction Direction to move in
+ * @returns {OO.ui.OptionWidget|null} Item at position, `null` if there are no items in the menu
+ */
+OO.ui.SelectWidget.prototype.getRelativeSelectableItem = function ( item, direction ) {
+       var inc = direction > 0 ? 1 : -1,
+               len = this.items.length,
+               index = item instanceof OO.ui.OptionWidget ?
+                       $.inArray( item, this.items ) : ( inc > 0 ? -1 : 0 ),
+               stopAt = Math.max( Math.min( index, len - 1 ), 0 ),
+               i = inc > 0 ?
+                       // Default to 0 instead of -1, if nothing is selected let's start at the beginning
+                       Math.max( index, -1 ) :
+                       // Default to n-1 instead of -1, if nothing is selected let's start at the end
+                       Math.min( index, len );
+
+       while ( true ) {
+               i = ( i + inc + len ) % len;
+               item = this.items[i];
+               if ( item instanceof OO.ui.OptionWidget && item.isSelectable() ) {
+                       return item;
+               }
+               // Stop iterating when we've looped all the way around
+               if ( i === stopAt ) {
+                       break;
+               }
+       }
+       return null;
+};
+
+/**
+ * Get the next selectable item.
+ *
+ * @method
+ * @returns {OO.ui.OptionWidget|null} Item, `null` if ther aren't any selectable items
+ */
+OO.ui.SelectWidget.prototype.getFirstSelectableItem = function () {
+       var i, len, item;
+
+       for ( i = 0, len = this.items.length; i < len; i++ ) {
+               item = this.items[i];
+               if ( item instanceof OO.ui.OptionWidget && item.isSelectable() ) {
+                       return item;
+               }
+       }
+
+       return null;
+};
+
+/**
+ * Add items.
+ *
+ * When items are added with the same values as existing items, the existing items will be
+ * automatically removed before the new items are added.
+ *
+ * @method
+ * @param {OO.ui.OptionWidget[]} items Items to add
+ * @param {number} [index] Index to insert items after
+ * @fires add
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.addItems = function ( items, index ) {
+       var i, len, item, hash,
+               remove = [];
+
+       for ( i = 0, len = items.length; i < len; i++ ) {
+               item = items[i];
+               hash = OO.getHash( item.getData() );
+               if ( hash in this.hashes ) {
+                       // Remove item with same value
+                       remove.push( this.hashes[hash] );
+               }
+               this.hashes[hash] = item;
+       }
+       if ( remove.length ) {
+               this.removeItems( remove );
+       }
+
+       OO.ui.GroupElement.prototype.addItems.call( this, items, index );
+
+       // Always provide an index, even if it was omitted
+       this.emit( 'add', items, index === undefined ? this.items.length - items.length - 1 : index );
+
+       return this;
+};
+
+/**
+ * Remove items.
+ *
+ * Items will be detached, not removed, so they can be used later.
+ *
+ * @method
+ * @param {OO.ui.OptionWidget[]} items Items to remove
+ * @fires remove
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.removeItems = function ( items ) {
+       var i, len, item, hash;
+
+       for ( i = 0, len = items.length; i < len; i++ ) {
+               item = items[i];
+               hash = OO.getHash( item.getData() );
+               if ( hash in this.hashes ) {
+                       // Remove existing item
+                       delete this.hashes[hash];
+               }
+               if ( item.isSelected() ) {
+                       this.selectItem( null );
+               }
+       }
+       OO.ui.GroupElement.prototype.removeItems.call( this, items );
+
+       this.emit( 'remove', items );
+
+       return this;
+};
+
+/**
+ * Clear all items.
+ *
+ * Items will be detached, not removed, so they can be used later.
+ *
+ * @method
+ * @fires remove
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.clearItems = function () {
+       var items = this.items.slice();
+
+       // Clear all items
+       this.hashes = {};
+       OO.ui.GroupElement.prototype.clearItems.call( this );
+       this.selectItem( null );
+
+       this.emit( 'remove', items );
+
+       return this;
+};
+/**
+ * Creates an OO.ui.MenuItemWidget object.
+ *
+ * @class
+ * @extends OO.ui.OptionWidget
+ *
+ * @constructor
+ * @param {Mixed} data Item data
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.MenuItemWidget = function OoUiMenuItemWidget( data, config ) {
+       // Configuration initialization
+       config = $.extend( { 'icon': 'check' }, config );
+
+       // Parent constructor
+       OO.ui.MenuItemWidget.super.call( this, data, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-menuItemWidget' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.MenuItemWidget, OO.ui.OptionWidget );
+/**
+ * Create an OO.ui.MenuWidget object.
+ *
+ * @class
+ * @extends OO.ui.SelectWidget
+ * @mixins OO.ui.ClippableElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {OO.ui.InputWidget} [input] Input to bind keyboard handlers to
+ */
+OO.ui.MenuWidget = function OoUiMenuWidget( config ) {
+       // Config intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.MenuWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.ClippableElement.call( this, this.$group, config );
+
+       // Properties
+       this.newItems = null;
+       this.$input = config.input ? config.input.$input : null;
+       this.$previousFocus = null;
+       this.isolated = !config.input;
+       this.visible = false;
+       this.onKeyDownHandler = OO.ui.bind( this.onKeyDown, this );
+
+       // Initialization
+       this.$element.hide().addClass( 'oo-ui-menuWidget' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.MenuWidget, OO.ui.SelectWidget );
+
+OO.mixinClass( OO.ui.MenuWidget, OO.ui.ClippableElement );
+
+/* Methods */
+
+/**
+ * Handles key down events.
+ *
+ * @method
+ * @param {jQuery.Event} e Key down event
+ */
+OO.ui.MenuWidget.prototype.onKeyDown = function ( e ) {
+       var nextItem,
+               handled = false,
+               highlightItem = this.getHighlightedItem();
+
+       if ( !this.disabled && this.visible ) {
+               if ( !highlightItem ) {
+                       highlightItem = this.getSelectedItem();
+               }
+               switch ( e.keyCode ) {
+                       case OO.ui.Keys.ENTER:
+                               this.selectItem( highlightItem );
+                               handled = true;
+                               break;
+                       case OO.ui.Keys.UP:
+                               nextItem = this.getRelativeSelectableItem( highlightItem, -1 );
+                               handled = true;
+                               break;
+                       case OO.ui.Keys.DOWN:
+                               nextItem = this.getRelativeSelectableItem( highlightItem, 1 );
+                               handled = true;
+                               break;
+                       case OO.ui.Keys.ESCAPE:
+                               if ( highlightItem ) {
+                                       highlightItem.setHighlighted( false );
+                               }
+                               this.hide();
+                               handled = true;
+                               break;
+               }
+
+               if ( nextItem ) {
+                       this.highlightItem( nextItem );
+                       nextItem.scrollElementIntoView();
+               }
+
+               if ( handled ) {
+                       e.preventDefault();
+                       e.stopPropagation();
+                       return false;
+               }
+       }
+};
+
+/**
+ * Check if the menu is visible.
+ *
+ * @method
+ * @returns {boolean} Menu is visible
+ */
+OO.ui.MenuWidget.prototype.isVisible = function () {
+       return this.visible;
+};
+
+/**
+ * Bind key down listener
+ *
+ * @method
+ */
+OO.ui.MenuWidget.prototype.bindKeyDownListener = function () {
+       if ( this.$input ) {
+               this.$input.on( 'keydown', this.onKeyDownHandler );
+       } else {
+               // Capture menu navigation keys
+               this.getElementWindow().addEventListener( 'keydown', this.onKeyDownHandler, true );
+       }
+};
+
+/**
+ * Unbind key down listener
+ *
+ * @method
+ */
+OO.ui.MenuWidget.prototype.unbindKeyDownListener = function () {
+       if ( this.$input ) {
+               this.$input.off( 'keydown' );
+       } else {
+               this.getElementWindow().removeEventListener( 'keydown', this.onKeyDownHandler, true );
+       }
+};
+
+/**
+ * Select an item.
+ *
+ * The menu will stay open if an item is silently selected.
+ *
+ * @method
+ * @param {OO.ui.OptionWidget} [item] Item to select, omit to deselect all
+ * @chainable
+ */
+OO.ui.MenuWidget.prototype.selectItem = function ( item ) {
+       // Parent method
+       OO.ui.SelectWidget.prototype.selectItem.call( this, item );
+
+       if ( !this.disabled ) {
+               if ( item ) {
+                       this.disabled = true;
+                       item.flash( OO.ui.bind( function () {
+                               this.hide();
+                               this.disabled = false;
+                       }, this ) );
+               } else {
+                       this.hide();
+               }
+       }
+
+       return this;
+};
+
+/**
+ * Add items.
+ *
+ * Adding an existing item (by value) will move it.
+ *
+ * @method
+ * @param {OO.ui.MenuItemWidget[]} items Items to add
+ * @param {number} [index] Index to insert items after
+ * @chainable
+ */
+OO.ui.MenuWidget.prototype.addItems = function ( items, index ) {
+       var i, len, item;
+
+       // Parent method
+       OO.ui.SelectWidget.prototype.addItems.call( this, items, index );
+
+       // Auto-initialize
+       if ( !this.newItems ) {
+               this.newItems = [];
+       }
+
+       for ( i = 0, len = items.length; i < len; i++ ) {
+               item = items[i];
+               if ( this.visible ) {
+                       // Defer fitting label until
+                       item.fitLabel();
+               } else {
+                       this.newItems.push( item );
+               }
+       }
+
+       return this;
+};
+
+/**
+ * Show the menu.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.MenuWidget.prototype.show = function () {
+       var i, len;
+
+       if ( this.items.length ) {
+               this.$element.show();
+               this.visible = true;
+               this.bindKeyDownListener();
+
+               // Change focus to enable keyboard navigation
+               if ( this.isolated && this.$input && !this.$input.is( ':focus' ) ) {
+                       this.$previousFocus = this.$( ':focus' );
+                       this.$input.focus();
+               }
+               if ( this.newItems && this.newItems.length ) {
+                       for ( i = 0, len = this.newItems.length; i < len; i++ ) {
+                               this.newItems[i].fitLabel();
+                       }
+                       this.newItems = null;
+               }
+
+               this.setClipping( true );
+       }
+
+       return this;
+};
+
+/**
+ * Hide the menu.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.MenuWidget.prototype.hide = function () {
+       this.$element.hide();
+       this.visible = false;
+       this.unbindKeyDownListener();
+
+       if ( this.isolated && this.$previousFocus ) {
+               this.$previousFocus.focus();
+               this.$previousFocus = null;
+       }
+
+       this.setClipping( false );
+
+       return this;
+};
+/**
+ * Inline menu of options.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IconedElement
+ * @mixins OO.ui.IndicatedElement
+ * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.TitledElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {Object} [menu] Configuration options to pass to menu widget
+ */
+OO.ui.InlineMenuWidget = function OoUiInlineMenuWidget( config ) {
+       // Configuration initialization
+       config = $.extend( { 'indicator': 'down' }, config );
+
+       // Parent constructor
+       OO.ui.InlineMenuWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
+       OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
+       OO.ui.LabeledElement.call( this, this.$( '<span>' ), config );
+       OO.ui.TitledElement.call( this, this.$label, config );
+
+       // Properties
+       this.menu = new OO.ui.MenuWidget( $.extend( { '$': this.$ }, config.menu ) );
+       this.$handle = this.$( '<span>' );
+
+       // Events
+       this.$element.on( { 'click': OO.ui.bind( this.onClick, this ) } );
+       this.menu.connect( this, { 'select': 'onMenuSelect' } );
+
+       // Initialization
+       this.$handle
+               .addClass( 'oo-ui-inlineMenuWidget-handle' )
+               .append( this.$icon, this.$label, this.$indicator );
+       this.$element
+               .addClass( 'oo-ui-inlineMenuWidget' )
+               .append( this.$handle, this.menu.$element );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.InlineMenuWidget, OO.ui.Widget );
+
+OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.IconedElement );
+OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.IndicatedElement );
+OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.TitledElement );
+
+/* Methods */
+
+/**
+ * Get the menu.
+ *
+ * @return {OO.ui.MenuWidget} Menu of widget
+ */
+OO.ui.InlineMenuWidget.prototype.getMenu = function () {
+       return this.menu;
+};
+
+/**
+ * Handles menu select events.
+ *
+ * @method
+ * @param {OO.ui.MenuItemWidget} item Selected menu item
+ */
+OO.ui.InlineMenuWidget.prototype.onMenuSelect = function ( item ) {
+       this.setLabel( item.getLabel() );
+};
+
+/**
+ * Handles mouse click events.
+ *
+ * @method
+ * @param {jQuery.Event} e Mouse click event
+ */
+OO.ui.InlineMenuWidget.prototype.onClick = function ( e ) {
+       // Skip clicks within the menu
+       if ( $.contains( this.menu.$element[0], e.target ) ) {
+               return;
+       }
+
+       if ( !this.disabled ) {
+               if ( this.menu.isVisible() ) {
+                       this.menu.hide();
+               } else {
+                       this.menu.show();
+               }
+       }
+       return false;
+};
+/**
+ * Creates an OO.ui.MenuSectionItemWidget object.
+ *
+ * @class
+ * @extends OO.ui.OptionWidget
+ *
+ * @constructor
+ * @param {Mixed} data Item data
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.MenuSectionItemWidget = function OoUiMenuSectionItemWidget( data, config ) {
+       // Parent constructor
+       OO.ui.MenuSectionItemWidget.super.call( this, data, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-menuSectionItemWidget' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.MenuSectionItemWidget, OO.ui.OptionWidget );
+
+OO.ui.MenuSectionItemWidget.static.selectable = false;
+
+OO.ui.MenuSectionItemWidget.static.highlightable = false;
+/**
+ * Create an OO.ui.OutlineWidget object.
+ *
+ * @class
+ * @extends OO.ui.SelectWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.OutlineWidget = function OoUiOutlineWidget( config ) {
+       // Config intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.OutlineWidget.super.call( this, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-outlineWidget' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.OutlineWidget, OO.ui.SelectWidget );
+/**
+ * Creates an OO.ui.OutlineControlsWidget object.
+ *
+ * @class
+ *
+ * @constructor
+ * @param {OO.ui.OutlineWidget} outline Outline to control
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, config ) {
+       // Configuration initialization
+       config = $.extend( { 'icon': 'add-item' }, config );
+
+       // Parent constructor
+       OO.ui.OutlineControlsWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.GroupElement.call( this, this.$( '<div>' ), config );
+       OO.ui.IconedElement.call( this, this.$( '<div>' ), config );
+
+       // Properties
+       this.outline = outline;
+       this.$movers = this.$( '<div>' );
+       this.upButton = new OO.ui.ButtonWidget( {
+               '$': this.$,
+               'frameless': true,
+               'icon': 'collapse',
+               'title': OO.ui.msg( 'ooui-outline-control-move-up' )
+       } );
+       this.downButton = new OO.ui.ButtonWidget( {
+               '$': this.$,
+               'frameless': true,
+               'icon': 'expand',
+               'title': OO.ui.msg( 'ooui-outline-control-move-down' )
+       } );
+       this.removeButton = new OO.ui.ButtonWidget( {
+               '$': this.$,
+               'frameless': true,
+               'icon': 'remove',
+               'title': OO.ui.msg( 'ooui-outline-control-remove' )
+       } );
+
+       // Events
+       outline.connect( this, {
+               'select': 'onOutlineChange',
+               'add': 'onOutlineChange',
+               'remove': 'onOutlineChange'
+       } );
+       this.upButton.connect( this, { 'click': ['emit', 'move', -1] } );
+       this.downButton.connect( this, { 'click': ['emit', 'move', 1] } );
+       this.removeButton.connect( this, { 'click': ['emit', 'remove'] } );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-outlineControlsWidget' );
+       this.$group.addClass( 'oo-ui-outlineControlsWidget-adders' );
+       this.$movers
+               .addClass( 'oo-ui-outlineControlsWidget-movers' )
+               .append( this.removeButton.$element, this.upButton.$element, this.downButton.$element );
+       this.$element.append( this.$icon, this.$group, this.$movers );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.OutlineControlsWidget, OO.ui.Widget );
+
+OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.GroupElement );
+OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.IconedElement );
+
+/* Events */
+
+/**
+ * @event move
+ * @param {number} places Number of places to move
+ */
+
+/**
+ * @event remove
+ */
+
+/* Methods */
+
+/**
+ * Handle outline change events.
+ *
+ * @method
+ */
+OO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {
+       var i, len, firstMovable, lastMovable,
+               items = this.outline.getItems(),
+               selectedItem = this.outline.getSelectedItem(),
+               movable = selectedItem && selectedItem.isMovable(),
+               removable = selectedItem && selectedItem.isRemovable();
+
+       if ( movable ) {
+               i = -1;
+               len = items.length;
+               while ( ++i < len ) {
+                       if ( items[i].isMovable() ) {
+                               firstMovable = items[i];
+                               break;
+                       }
+               }
+               i = len;
+               while ( i-- ) {
+                       if ( items[i].isMovable() ) {
+                               lastMovable = items[i];
+                               break;
+                       }
+               }
+       }
+       this.upButton.setDisabled( !movable || selectedItem === firstMovable );
+       this.downButton.setDisabled( !movable || selectedItem === lastMovable );
+       this.removeButton.setDisabled( !removable );
+};
+/**
+ * Creates an OO.ui.OutlineItemWidget object.
+ *
+ * @class
+ * @extends OO.ui.OptionWidget
+ *
+ * @constructor
+ * @param {Mixed} data Item data
+ * @param {Object} [config] Configuration options
+ * @cfg {number} [level] Indentation level
+ * @cfg {boolean} [movable] Allow modification from outline controls
+ */
+OO.ui.OutlineItemWidget = function OoUiOutlineItemWidget( data, config ) {
+       // Config intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.OutlineItemWidget.super.call( this, data, config );
+
+       // Properties
+       this.level = 0;
+       this.movable = !!config.movable;
+       this.removable = !!config.removable;
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-outlineItemWidget' );
+       this.setLevel( config.level );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.OutlineItemWidget, OO.ui.OptionWidget );
+
+/* Static Properties */
+
+OO.ui.OutlineItemWidget.static.highlightable = false;
+
+OO.ui.OutlineItemWidget.static.scrollIntoViewOnSelect = true;
+
+OO.ui.OutlineItemWidget.static.levelClass = 'oo-ui-outlineItemWidget-level-';
+
+OO.ui.OutlineItemWidget.static.levels = 3;
+
+/* Methods */
+
+/**
+ * Check if item is movable.
+ *
+ * Movablilty is used by outline controls.
+ *
+ * @returns {boolean} Item is movable
+ */
+OO.ui.OutlineItemWidget.prototype.isMovable = function () {
+       return this.movable;
+};
+
+/**
+ * Check if item is removable.
+ *
+ * Removablilty is used by outline controls.
+ *
+ * @returns {boolean} Item is removable
+ */
+OO.ui.OutlineItemWidget.prototype.isRemovable = function () {
+       return this.removable;
+};
+
+/**
+ * Get indentation level.
+ *
+ * @returns {number} Indentation level
+ */
+OO.ui.OutlineItemWidget.prototype.getLevel = function () {
+       return this.level;
+};
+
+/**
+ * Set movability.
+ *
+ * Movablilty is used by outline controls.
+ *
+ * @param {boolean} movable Item is movable
+ * @chainable
+ */
+OO.ui.OutlineItemWidget.prototype.setMovable = function ( movable ) {
+       this.movable = !!movable;
+       return this;
+};
+
+/**
+ * Set removability.
+ *
+ * Removablilty is used by outline controls.
+ *
+ * @param {boolean} movable Item is removable
+ * @chainable
+ */
+OO.ui.OutlineItemWidget.prototype.setRemovable = function ( removable ) {
+       this.removable = !!removable;
+       return this;
+};
+
+/**
+ * Set indentation level.
+ *
+ * @method
+ * @param {number} [level=0] Indentation level, in the range of [0,#maxLevel]
+ * @chainable
+ */
+OO.ui.OutlineItemWidget.prototype.setLevel = function ( level ) {
+       var levels = this.constructor.static.levels,
+               levelClass = this.constructor.static.levelClass,
+               i = levels;
+
+       this.level = level ? Math.max( 0, Math.min( levels - 1, level ) ) : 0;
+       while ( i-- ) {
+               if ( this.level === i ) {
+                       this.$element.addClass( levelClass + i );
+               } else {
+                       this.$element.removeClass( levelClass + i );
+               }
+       }
+
+       return this;
+};
+/**
+ * Create an OO.ui.ButtonOptionWidget object.
+ *
+ * @class
+ * @extends OO.ui.OptionWidget
+ * @mixins OO.ui.ButtonedElement
+ * @mixins OO.ui.FlaggableElement
+ *
+ * @constructor
+ * @param {Mixed} data Option data
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( data, config ) {
+       // Parent constructor
+       OO.ui.ButtonOptionWidget.super.call( this, data, config );
+
+       // Mixin constructors
+       OO.ui.ButtonedElement.call( this, this.$( '<a>' ), config );
+       OO.ui.FlaggableElement.call( this, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-buttonOptionWidget' );
+       this.$button.append( this.$element.contents() );
+       this.$element.append( this.$button );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.ButtonOptionWidget, OO.ui.OptionWidget );
+
+OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.ButtonedElement );
+OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.FlaggableElement );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {
+       OO.ui.OptionWidget.prototype.setSelected.call( this, state );
+
+       this.setActive( state );
+
+       return this;
+};
+/**
+ * Create an OO.ui.ButtonSelect object.
+ *
+ * @class
+ * @extends OO.ui.SelectWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.ButtonSelectWidget = function OoUiButtonSelectWidget( config ) {
+       // Parent constructor
+       OO.ui.ButtonSelectWidget.super.call( this, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-buttonSelectWidget' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.ButtonSelectWidget, OO.ui.SelectWidget );
+/**
+ * Creates an OO.ui.PopupWidget object.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.LabeledElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [tail=true] Show tail pointing to origin of popup
+ * @cfg {string} [align='center'] Alignment of popup to origin
+ * @cfg {jQuery} [$container] Container to prevent popup from rendering outside of
+ * @cfg {boolean} [autoClose=false] Popup auto-closes when it loses focus
+ * @cfg {jQuery} [$autoCloseIgnore] Elements to not auto close when clicked
+ * @cfg {boolean} [head] Show label and close button at the top
+ */
+OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
+       // Config intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.PopupWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.LabeledElement.call( this, this.$( '<div>' ), config );
+
+       // Properties
+       this.visible = false;
+       this.$popup = this.$( '<div>' );
+       this.$head = this.$( '<div>' );
+       this.$body = this.$( '<div>' );
+       this.$tail = this.$( '<div>' );
+       this.$container = config.$container || this.$( 'body' );
+       this.autoClose = !!config.autoClose;
+       this.$autoCloseIgnore = config.$autoCloseIgnore;
+       this.transitionTimeout = null;
+       this.tail = false;
+       this.align = config.align || 'center';
+       this.closeButton = new OO.ui.ButtonWidget( { '$': this.$, 'frameless': true, 'icon': 'close' } );
+       this.onMouseDownHandler = OO.ui.bind( this.onMouseDown, this );
+
+       // Events
+       this.closeButton.connect( this, { 'click': 'onCloseButtonClick' } );
+
+       // Initialization
+       this.useTail( config.tail !== undefined ? !!config.tail : true );
+       this.$body.addClass( 'oo-ui-popupWidget-body' );
+       this.$tail.addClass( 'oo-ui-popupWidget-tail' );
+       this.$head
+               .addClass( 'oo-ui-popupWidget-head' )
+               .append( this.$label, this.closeButton.$element );
+       if ( !config.head ) {
+               this.$head.hide();
+       }
+       this.$popup
+               .addClass( 'oo-ui-popupWidget-popup' )
+               .append( this.$head, this.$body );
+       this.$element.hide()
+               .addClass( 'oo-ui-popupWidget' )
+               .append( this.$popup, this.$tail );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.PopupWidget, OO.ui.Widget );
+
+OO.mixinClass( OO.ui.PopupWidget, OO.ui.LabeledElement );
+
+/* Events */
+
+/**
+ * @event hide
+ */
+
+/**
+ * @event show
+ */
+
+/* Methods */
+
+/**
+ * Handles mouse down events.
+ *
+ * @method
+ * @param {jQuery.Event} e Mouse down event
+ */
+OO.ui.PopupWidget.prototype.onMouseDown = function ( e ) {
+       if (
+               this.visible &&
+               !$.contains( this.$element[0], e.target ) &&
+               ( !this.$autoCloseIgnore || !this.$autoCloseIgnore.has( e.target ).length )
+       ) {
+               this.hide();
+       }
+};
+
+/**
+ * Bind mouse down listener
+ *
+ * @method
+ */
+OO.ui.PopupWidget.prototype.bindMouseDownListener = function () {
+       // Capture clicks outside popup
+       this.getElementWindow().addEventListener( 'mousedown', this.onMouseDownHandler, true );
+};
+
+/**
+ * Handles close button click events.
+ *
+ * @method
+ */
+OO.ui.PopupWidget.prototype.onCloseButtonClick = function () {
+       if ( this.visible ) {
+               this.hide();
+       }
+};
+
+/**
+ * Unbind mouse down listener
+ *
+ * @method
+ */
+OO.ui.PopupWidget.prototype.unbindMouseDownListener = function () {
+       this.getElementWindow().removeEventListener( 'mousedown', this.onMouseDownHandler, true );
+};
+
+/**
+ * Check if the popup is visible.
+ *
+ * @method
+ * @returns {boolean} Popup is visible
+ */
+OO.ui.PopupWidget.prototype.isVisible = function () {
+       return this.visible;
+};
+
+/**
+ * Set whether to show a tail.
+ *
+ * @method
+ * @returns {boolean} Make tail visible
+ */
+OO.ui.PopupWidget.prototype.useTail = function ( value ) {
+       value = !!value;
+       if ( this.tail !== value ) {
+               this.tail = value;
+               if ( value ) {
+                       this.$element.addClass( 'oo-ui-popupWidget-tailed' );
+               } else {
+                       this.$element.removeClass( 'oo-ui-popupWidget-tailed' );
+               }
+       }
+};
+
+/**
+ * Check if showing a tail.
+ *
+ * @method
+ * @returns {boolean} tail is visible
+ */
+OO.ui.PopupWidget.prototype.hasTail = function () {
+       return this.tail;
+};
+
+/**
+ * Show the context.
+ *
+ * @method
+ * @fires show
+ * @chainable
+ */
+OO.ui.PopupWidget.prototype.show = function () {
+       if ( !this.visible ) {
+               this.$element.show();
+               this.visible = true;
+               this.emit( 'show' );
+               if ( this.autoClose ) {
+                       this.bindMouseDownListener();
+               }
+       }
+       return this;
+};
+
+/**
+ * Hide the context.
+ *
+ * @method
+ * @fires hide
+ * @chainable
+ */
+OO.ui.PopupWidget.prototype.hide = function () {
+       if ( this.visible ) {
+               this.$element.hide();
+               this.visible = false;
+               this.emit( 'hide' );
+               if ( this.autoClose ) {
+                       this.unbindMouseDownListener();
+               }
+       }
+       return this;
+};
+
+/**
+ * Updates the position and size.
+ *
+ * @method
+ * @param {number} width Width
+ * @param {number} height Height
+ * @param {boolean} [transition=false] Use a smooth transition
+ * @chainable
+ */
+OO.ui.PopupWidget.prototype.display = function ( width, height, transition ) {
+       var padding = 10,
+               originOffset = Math.round( this.$element.offset().left ),
+               containerLeft = Math.round( this.$container.offset().left ),
+               containerWidth = this.$container.innerWidth(),
+               containerRight = containerLeft + containerWidth,
+               popupOffset = width * ( { 'left': 0, 'center': -0.5, 'right': -1 } )[this.align],
+               popupLeft = popupOffset - padding,
+               popupRight = popupOffset + padding + width + padding,
+               overlapLeft = ( originOffset + popupLeft ) - containerLeft,
+               overlapRight = containerRight - ( originOffset + popupRight );
+
+       // Prevent transition from being interrupted
+       clearTimeout( this.transitionTimeout );
+       if ( transition ) {
+               // Enable transition
+               this.$element.addClass( 'oo-ui-popupWidget-transitioning' );
+       }
+
+       if ( overlapRight < 0 ) {
+               popupOffset += overlapRight;
+       } else if ( overlapLeft < 0 ) {
+               popupOffset -= overlapLeft;
+       }
+
+       // Position body relative to anchor and resize
+       this.$popup.css( {
+               'left': popupOffset,
+               'width': width,
+               'height': height === undefined ? 'auto' : height
+       } );
+
+       if ( transition ) {
+               // Prevent transitioning after transition is complete
+               this.transitionTimeout = setTimeout( OO.ui.bind( function () {
+                       this.$element.removeClass( 'oo-ui-popupWidget-transitioning' );
+               }, this ), 200 );
+       } else {
+               // Prevent transitioning immediately
+               this.$element.removeClass( 'oo-ui-popupWidget-transitioning' );
+       }
+
+       return this;
+};
+/**
+ * Button that shows and hides a popup.
+ *
+ * @class
+ * @extends OO.ui.ButtonWidget
+ * @mixins OO.ui.PopuppableElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.PopupButtonWidget = function OoUiPopupButtonWidget( config ) {
+       // Parent constructor
+       OO.ui.PopupButtonWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.PopuppableElement.call( this, config );
+
+       // Initialization
+       this.$element
+               .addClass( 'oo-ui-popupButtonWidget' )
+               .append( this.popup.$element );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.PopupButtonWidget, OO.ui.ButtonWidget );
+
+OO.mixinClass( OO.ui.PopupButtonWidget, OO.ui.PopuppableElement );
+
+/* Methods */
+
+/**
+ * Handles mouse click events.
+ *
+ * @method
+ * @param {jQuery.Event} e Mouse click event
+ */
+OO.ui.PopupButtonWidget.prototype.onClick = function ( e ) {
+       // Skip clicks within the popup
+       if ( $.contains( this.popup.$element[0], e.target ) ) {
+               return;
+       }
+
+       if ( !this.disabled ) {
+               if ( this.popup.isVisible() ) {
+                       this.hidePopup();
+               } else {
+                       this.showPopup();
+               }
+               OO.ui.ButtonWidget.prototype.onClick.call( this );
+       }
+       return false;
+};
+/**
+ * Creates an OO.ui.SearchWidget object.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string|jQuery} [placeholder] Placeholder text for query input
+ * @cfg {string} [value] Initial query value
+ */
+OO.ui.SearchWidget = function OoUiSearchWidget( config ) {
+       // Configuration intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.SearchWidget.super.call( this, config );
+
+       // Properties
+       this.query = new OO.ui.TextInputWidget( {
+               '$': this.$,
+               'icon': 'search',
+               'placeholder': config.placeholder,
+               'value': config.value
+       } );
+       this.results = new OO.ui.SelectWidget( { '$': this.$ } );
+       this.$query = this.$( '<div>' );
+       this.$results = this.$( '<div>' );
+
+       // Events
+       this.query.connect( this, {
+               'change': 'onQueryChange',
+               'enter': 'onQueryEnter'
+       } );
+       this.results.connect( this, {
+               'highlight': 'onResultsHighlight',
+               'select': 'onResultsSelect'
+       } );
+       this.query.$input.on( 'keydown', OO.ui.bind( this.onQueryKeydown, this ) );
+
+       // Initialization
+       this.$query
+               .addClass( 'oo-ui-searchWidget-query' )
+               .append( this.query.$element );
+       this.$results
+               .addClass( 'oo-ui-searchWidget-results' )
+               .append( this.results.$element );
+       this.$element
+               .addClass( 'oo-ui-searchWidget' )
+               .append( this.$results, this.$query );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.SearchWidget, OO.ui.Widget );
+
+/* Events */
+
+/**
+ * @event highlight
+ * @param {Object|null} item Item data or null if no item is highlighted
+ */
+
+/**
+ * @event select
+ * @param {Object|null} item Item data or null if no item is selected
+ */
+
+/* Methods */
+
+/**
+ * Handle query key down events.
+ *
+ * @method
+ * @param {jQuery.Event} e Key down event
+ */
+OO.ui.SearchWidget.prototype.onQueryKeydown = function ( e ) {
+       var highlightedItem, nextItem,
+               dir = e.which === OO.ui.Keys.DOWN ? 1 : ( e.which === OO.ui.Keys.UP ? -1 : 0 );
+
+       if ( dir ) {
+               highlightedItem = this.results.getHighlightedItem();
+               if ( !highlightedItem ) {
+                       highlightedItem = this.results.getSelectedItem();
+               }
+               nextItem = this.results.getRelativeSelectableItem( highlightedItem, dir );
+               this.results.highlightItem( nextItem );
+               nextItem.scrollElementIntoView();
+       }
+};
+
+/**
+ * Handle select widget select events.
+ *
+ * Clears existing results. Subclasses should repopulate items according to new query.
+ *
+ * @method
+ * @param {string} value New value
+ */
+OO.ui.SearchWidget.prototype.onQueryChange = function () {
+       // Reset
+       this.results.clearItems();
+};
+
+/**
+ * Handle select widget enter key events.
+ *
+ * Selects highlighted item.
+ *
+ * @method
+ * @param {string} value New value
+ */
+OO.ui.SearchWidget.prototype.onQueryEnter = function () {
+       // Reset
+       this.results.selectItem( this.results.getHighlightedItem() );
+};
+
+/**
+ * Handle select widget highlight events.
+ *
+ * @method
+ * @param {OO.ui.OptionWidget} item Highlighted item
+ * @fires highlight
+ */
+OO.ui.SearchWidget.prototype.onResultsHighlight = function ( item ) {
+       this.emit( 'highlight', item ? item.getData() : null );
+};
+
+/**
+ * Handle select widget select events.
+ *
+ * @method
+ * @param {OO.ui.OptionWidget} item Selected item
+ * @fires select
+ */
+OO.ui.SearchWidget.prototype.onResultsSelect = function ( item ) {
+       this.emit( 'select', item ? item.getData() : null );
+};
+
+/**
+ * Get the query input.
+ *
+ * @method
+ * @returns {OO.ui.TextInputWidget} Query input
+ */
+OO.ui.SearchWidget.prototype.getQuery = function () {
+       return this.query;
+};
+
+/**
+ * Get the results list.
+ *
+ * @method
+ * @returns {OO.ui.SelectWidget} Select list
+ */
+OO.ui.SearchWidget.prototype.getResults = function () {
+       return this.results;
+};
+/**
+ * Creates an OO.ui.TextInputWidget object.
+ *
+ * @class
+ * @extends OO.ui.InputWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [placeholder] Placeholder text
+ * @cfg {string} [icon] Symbolic name of icon
+ * @cfg {boolean} [multiline=false] Allow multiple lines of text
+ * @cfg {boolean} [autosize=false] Automatically resize to fit content
+ * @cfg {boolean} [maxRows=10] Maximum number of rows to make visible when autosizing
+ */
+OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
+       config = $.extend( { 'maxRows': 10 }, config );
+
+       // Parent constructor
+       OO.ui.TextInputWidget.super.call( this, config );
+
+       // Properties
+       this.pending = 0;
+       this.multiline = !!config.multiline;
+       this.autosize = !!config.autosize;
+       this.maxRows = config.maxRows;
+
+       // Events
+       this.$input.on( 'keypress', OO.ui.bind( this.onKeyPress, this ) );
+       this.$element.on( 'DOMNodeInsertedIntoDocument', OO.ui.bind( this.onElementAttach, this ) );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-textInputWidget' );
+       if ( config.icon ) {
+               this.$element.addClass( 'oo-ui-textInputWidget-decorated' );
+               this.$element.append(
+                       this.$( '<span>' )
+                               .addClass( 'oo-ui-textInputWidget-icon oo-ui-icon-' + config.icon )
+                               .mousedown( OO.ui.bind( function () {
+                                       this.$input.focus();
+                                       return false;
+                               }, this ) )
+               );
+       }
+       if ( config.placeholder ) {
+               this.$input.attr( 'placeholder', config.placeholder );
+       }
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.TextInputWidget, OO.ui.InputWidget );
+
+/* Events */
+
+/**
+ * User presses enter inside the text box.
+ *
+ * Not called if input is multiline.
+ *
+ * @event enter
+ */
+
+/* Methods */
+
+/**
+ * Handles key press events.
+ *
+ * @param {jQuery.Event} e Key press event
+ * @fires enter If enter key is pressed and input is not multiline
+ */
+OO.ui.TextInputWidget.prototype.onKeyPress = function ( e ) {
+       if ( e.which === OO.ui.Keys.ENTER && !this.multiline ) {
+               this.emit( 'enter' );
+       }
+};
+
+/**
+ * Handles element attach events.
+ *
+ * @param {jQuery.Event} e Element attach event
+ */
+OO.ui.TextInputWidget.prototype.onElementAttach = function () {
+       this.adjustSize();
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.TextInputWidget.prototype.onEdit = function () {
+       this.adjustSize();
+
+       // Parent method
+       return OO.ui.InputWidget.prototype.onEdit.call( this );
+};
+
+/**
+ * Automatically adjust the size of the text input.
+ *
+ * This only affects multi-line inputs that are auto-sized.
+ *
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.adjustSize = function() {
+       var $clone, scrollHeight, innerHeight, outerHeight, maxInnerHeight, idealHeight;
+
+       if ( this.multiline && this.autosize ) {
+               $clone = this.$input.clone()
+                       .val( this.$input.val() )
+                       .css( { 'height': 0 } )
+                       .insertAfter( this.$input );
+               // Set inline height property to 0 to measure scroll height
+               scrollHeight = $clone[0].scrollHeight;
+               // Remove inline height property to measure natural heights
+               $clone.css( 'height', '' );
+               innerHeight = $clone.innerHeight();
+               outerHeight = $clone.outerHeight();
+               // Measure max rows height
+               $clone.attr( 'rows', this.maxRows ).css( 'height', 'auto' );
+               maxInnerHeight = $clone.innerHeight();
+               $clone.removeAttr( 'rows' ).css( 'height', '' );
+               $clone.remove();
+               idealHeight = Math.min( maxInnerHeight, scrollHeight );
+               // Only apply inline height when expansion beyond natural height is needed
+               this.$input.css(
+                       'height',
+                       // Use the difference between the inner and outer height as a buffer
+                       idealHeight > outerHeight ? idealHeight + ( outerHeight - innerHeight ) : ''
+               );
+       }
+       return this;
+};
+
+/**
+ * Get input element.
+ *
+ * @method
+ * @param {Object} [config] Configuration options
+ * @returns {jQuery} Input element
+ */
+OO.ui.TextInputWidget.prototype.getInputElement = function ( config ) {
+       return config.multiline ? this.$( '<textarea>' ) : this.$( '<input type="text" />' );
+};
+
+/* Methods */
+
+/**
+ * Checks if input supports multiple lines.
+ *
+ * @method
+ * @returns {boolean} Input supports multiple lines
+ */
+OO.ui.TextInputWidget.prototype.isMultiline = function () {
+       return !!this.multiline;
+};
+
+/**
+ * Checks if input automatically adjusts its size.
+ *
+ * @method
+ * @returns {boolean} Input automatically adjusts its size
+ */
+OO.ui.TextInputWidget.prototype.isAutosizing = function () {
+       return !!this.autosize;
+};
+
+/**
+ * Checks if input is pending.
+ *
+ * @method
+ * @returns {boolean} Input is pending
+ */
+OO.ui.TextInputWidget.prototype.isPending = function () {
+       return !!this.pending;
+};
+
+/**
+ * Increases the pending stack.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.pushPending = function () {
+       this.pending++;
+       this.$element.addClass( 'oo-ui-textInputWidget-pending' );
+       this.$input.addClass( 'oo-ui-texture-pending' );
+       return this;
+};
+
+/**
+ * Reduces the pending stack.
+ *
+ * Clamped at zero.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.popPending = function () {
+       this.pending = Math.max( 0, this.pending - 1 );
+       if ( !this.pending ) {
+               this.$element.removeClass( 'oo-ui-textInputWidget-pending' );
+               this.$input.removeClass( 'oo-ui-texture-pending' );
+       }
+       return this;
+};
+/**
+ * Creates an OO.ui.TextInputMenuWidget object.
+ *
+ * @class
+ * @extends OO.ui.MenuWidget
+ *
+ * @constructor
+ * @param {OO.ui.TextInputWidget} input Text input widget to provide menu for
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$container=input.$element] Element to render menu under
+ */
+OO.ui.TextInputMenuWidget = function OoUiTextInputMenuWidget( input, config ) {
+       // Parent constructor
+       OO.ui.TextInputMenuWidget.super.call( this, config );
+
+       // Properties
+       this.input = input;
+       this.$container = config.$container || this.input.$element;
+       this.onWindowResizeHandler = OO.ui.bind( this.onWindowResize, this );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-textInputMenuWidget' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.TextInputMenuWidget, OO.ui.MenuWidget );
+
+/* Methods */
+
+/**
+ * Handle window resize event.
+ *
+ * @method
+ * @param {jQuery.Event} e Window resize event
+ */
+OO.ui.TextInputMenuWidget.prototype.onWindowResize = function () {
+       this.position();
+};
+
+/**
+ * Shows the menu.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.TextInputMenuWidget.prototype.show = function () {
+       // Parent method
+       OO.ui.MenuWidget.prototype.show.call( this );
+
+       this.position();
+       this.$( this.getElementWindow() ).on( 'resize', this.onWindowResizeHandler );
+       return this;
+};
+
+/**
+ * Hides the menu.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.TextInputMenuWidget.prototype.hide = function () {
+       // Parent method
+       OO.ui.MenuWidget.prototype.hide.call( this );
+
+       this.$( this.getElementWindow() ).off( 'resize', this.onWindowResizeHandler );
+       return this;
+};
+
+/**
+ * Positions the menu.
+ *
+ * @method
+ * @chainable
+ */
+OO.ui.TextInputMenuWidget.prototype.position = function () {
+       var frameOffset,
+               $container = this.$container,
+               dimensions = $container.offset();
+
+       // Position under input
+       dimensions.top += $container.height();
+
+       // Compensate for frame position if in a differnt frame
+       if ( this.input.$.frame && this.input.$.context !== this.$element[0].ownerDocument ) {
+               frameOffset = OO.ui.Element.getRelativePosition(
+                       this.input.$.frame.$element, this.$element.offsetParent()
+               );
+               dimensions.left += frameOffset.left;
+               dimensions.top += frameOffset.top;
+       } else {
+               // Fix for RTL (for some reason, no need to fix if the frameoffset is set)
+               if ( this.$element.css( 'direction' ) === 'rtl' ) {
+                       dimensions.right = this.$element.parent().position().left -
+                               dimensions.width - dimensions.left;
+                       // Erase the value for 'left':
+                       delete dimensions.left;
+               }
+       }
+
+       this.$element.css( dimensions );
+       this.setIdealSize( $container.width() );
+       return this;
+};
+/**
+ * Mixin for widgets with a boolean state.
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [value=false] Initial value
+ */
+OO.ui.ToggleWidget = function OoUiToggleWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Properties
+       this.value = null;
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-toggleWidget' );
+       this.setValue( !!config.value );
+};
+
+/* Events */
+
+/**
+ * @event change
+ * @param {boolean} value Changed value
+ */
+
+/* Methods */
+
+/**
+ * Get the value of the toggle.
+ *
+ * @method
+ * @returns {boolean} Toggle value
+ */
+OO.ui.ToggleWidget.prototype.getValue = function () {
+       return this.value;
+};
+
+/**
+ * Set the value of the toggle.
+ *
+ * @method
+ * @param {boolean} value New value
+ * @fires change
+ * @chainable
+ */
+OO.ui.ToggleWidget.prototype.setValue = function ( value ) {
+       value = !!value;
+       if ( this.value !== value ) {
+               this.value = value;
+               this.emit( 'change', value );
+               this.$element.toggleClass( 'oo-ui-toggleWidget-on', value );
+               this.$element.toggleClass( 'oo-ui-toggleWidget-off', !value );
+       }
+       return this;
+};
+/**
+ * @class
+ * @extends OO.ui.ButtonWidget
+ * @mixins OO.ui.ToggleWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [value=false] Initial value
+ */
+OO.ui.ToggleButtonWidget = function OoUiToggleButtonWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.ToggleButtonWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.ToggleWidget.call( this, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-toggleButtonWidget' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.ToggleButtonWidget, OO.ui.ButtonWidget );
+
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ToggleButtonWidget.prototype.onClick = function () {
+       if ( !this.disabled ) {
+               this.setValue( !this.value );
+       }
+
+       // Parent method
+       return OO.ui.ButtonWidget.prototype.onClick.call( this );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {
+       value = !!value;
+       if ( value !== this.value ) {
+               this.setActive( value );
+       }
+
+       // Parent method
+       OO.ui.ToggleWidget.prototype.setValue.call( this, value );
+
+       return this;
+};
+/**
+ * @class
+ * @abstract
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.ToggleWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [value=false] Initial value
+ */
+OO.ui.ToggleSwitchWidget = function OoUiToggleSwitchWidget( config ) {
+       // Parent constructor
+       OO.ui.ToggleSwitchWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.ToggleWidget.call( this, config );
+
+       // Properties
+       this.dragging = false;
+       this.dragStart = null;
+       this.sliding = false;
+       this.$glow = this.$( '<span>' );
+       this.$grip = this.$( '<span>' );
+
+       // Events
+       this.$element.on( 'click', OO.ui.bind( this.onClick, this ) );
+
+       // Initialization
+       this.$glow.addClass( 'oo-ui-toggleSwitchWidget-glow' );
+       this.$grip.addClass( 'oo-ui-toggleSwitchWidget-grip' );
+       this.$element
+               .addClass( 'oo-ui-toggleSwitchWidget' )
+               .append( this.$glow, this.$grip );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.ToggleSwitchWidget, OO.ui.Widget );
+
+OO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget );
+
+/* Methods */
+
+/**
+ * Handles mouse down events.
+ *
+ * @method
+ * @param {jQuery.Event} e Mouse down event
+ */
+OO.ui.ToggleSwitchWidget.prototype.onClick = function ( e ) {
+       if ( !this.disabled && e.which === 1 ) {
+               this.setValue( !this.value );
+       }
+};
+}() );
diff --git a/resources/oojs-ui/oojs-ui.svg.css b/resources/oojs-ui/oojs-ui.svg.css
new file mode 100644 (file)
index 0000000..f34fc32
--- /dev/null
@@ -0,0 +1,1264 @@
+/*!
+ * OOjs UI v0.1.0-pre (0f50cdc46c)
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2014 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: Wed Mar 19 2014 17:39:11 GMT-0700 (PDT)
+ */
+
+/* Textures */
+
+.oo-ui-texture-pending {
+  background-image: /* @embed */ url(images/textures/pending.gif);
+}
+
+.oo-ui-texture-transparency {
+  background-image: /* @embed */ url(images/textures/transparency.png);
+}
+
+/* RTL Definitions */
+
+/* @noflip */
+
+.oo-ui-rtl {
+  direction: rtl;
+}
+
+/* @noflip */
+
+.oo-ui-ltr {
+  direction: ltr;
+}
+
+.oo-ui-dialog {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  padding: 1em;
+  line-height: 1em;
+  /* Fix for strange opacity-related rendering issues.
+          CAUTION: -webkit-backface-visibility: hidden; is EXTREMELY DANGEROUS.
+          If applied to a VE surface directly, it will break selection of
+          FocusableNodes, and in the past it's caused transparent PNGs to
+          render as opaque black images. For some reason applying it to the dialog
+          wrapper in the main document fixes opacity-related behavior in the iframe
+          document, but doesn't break the surface inside the iframe. */
+
+  -webkit-backface-visibility: hidden;
+          backface-visibility: hidden;
+}
+
+.oo-ui-dialog .oo-ui-window-frame {
+  position: fixed;
+  top: 1em;
+  right: 0;
+  bottom: 1em;
+  left: 0;
+  min-height: 12em;
+  margin: auto;
+  overflow: hidden;
+}
+
+.oo-ui-dialog-small .oo-ui-window-frame {
+  width: 400px;
+  max-height: 230px;
+}
+
+.oo-ui-dialog-medium .oo-ui-window-frame {
+  width: 600px;
+  max-height: 460px;
+}
+
+.oo-ui-dialog-large .oo-ui-window-frame {
+  width: 800px;
+  max-height: 690px;
+}
+
+.oo-ui-dialog .oo-ui-frame {
+  width: 100%;
+  height: 100%;
+}
+
+.oo-ui-dialog-content .oo-ui-window-head,
+.oo-ui-dialog-content .oo-ui-window-body,
+.oo-ui-dialog-content .oo-ui-window-foot {
+  position: absolute;
+  right: 0;
+  left: 0;
+  overflow: hidden;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+.oo-ui-dialog-content .oo-ui-window-head {
+  top: 0;
+  height: 3.8em;
+  padding: 0.5em;
+}
+
+.oo-ui-dialog-content .oo-ui-window-title {
+  line-height: 2.8em;
+}
+
+.oo-ui-dialog-content .oo-ui-window-icon {
+  width: 2.4em;
+  height: 2.8em;
+  line-height: 2.8em;
+}
+
+.oo-ui-dialog-content .oo-ui-window-closeButton {
+  float: right;
+  margin: 0.25em 0.25em;
+}
+
+.oo-ui-dialog-content .oo-ui-window-body {
+  top: 3.8em;
+  bottom: 4.8em;
+}
+
+.oo-ui-dialog-content .oo-ui-window-foot {
+  bottom: 0;
+  height: 4.8em;
+  padding: 1em;
+}
+
+.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-buttonedElement-framed {
+  float: left;
+  margin: 0.125em 0.25em;
+}
+
+.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-flaggableElement-primary,
+.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-flaggableElement-constructive,
+.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-flaggableElement-destructive {
+  float: right;
+}
+
+.oo-ui-dialog-content-footless .oo-ui-window-body {
+  bottom: 0;
+}
+
+.oo-ui-dialog-content-footless .oo-ui-window-foot {
+  display: none;
+}
+
+.oo-ui-frame {
+  padding: 0;
+  margin: 0;
+}
+
+.oo-ui-frame-body {
+  padding: 0;
+  margin: 0;
+  background: none;
+}
+
+.oo-ui-frame-content {
+  font-family: sans-serif;
+  font-size: 0.8em;
+}
+
+.oo-ui-toolbar {
+  clear: both;
+}
+
+.oo-ui-toolbar-bar {
+  line-height: 1em;
+}
+
+.oo-ui-toolbar-bottom .oo-ui-toolbar-bar {
+  position: absolute;
+}
+
+.oo-ui-toolbar-actions {
+  float: right;
+}
+
+.oo-ui-toolbar-tools {
+  float: left;
+}
+
+.oo-ui-toolbar-tools,
+.oo-ui-toolbar-actions,
+.oo-ui-toolbar-shadow {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  -webkit-touch-callout: none;
+}
+
+.oo-ui-toolbar-actions .oo-ui-popupWidget {
+  -webkit-user-select: all;
+     -moz-user-select: all;
+      -ms-user-select: all;
+          user-select: all;
+  -webkit-touch-callout: default;
+}
+
+.oo-ui-toolbar-shadow {
+  position: absolute;
+  width: 100%;
+  pointer-events: none;
+  background-position: left top;
+  background-repeat: repeat-x;
+}
+
+.oo-ui-toolGroup {
+  display: inline-block;
+  margin: 0.3em;
+  vertical-align: middle;
+}
+
+.oo-ui-toolGroup-empty {
+  display: none;
+}
+
+.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
+  background-position: center center;
+  background-repeat: no-repeat;
+}
+
+.oo-ui-window-head {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  -webkit-touch-callout: none;
+}
+
+.oo-ui-window-body {
+  padding: 0 0.75em;
+}
+
+.oo-ui-window-icon {
+  float: left;
+  width: 2em;
+  height: 2em;
+  margin-right: 0.5em;
+  line-height: 2em;
+  background-position: right center;
+  background-repeat: no-repeat;
+}
+
+.oo-ui-window-title {
+  float: left;
+  line-height: 2em;
+  white-space: nowrap;
+  cursor: default;
+}
+
+.oo-ui-window-overlay {
+  position: absolute;
+  top: 0;
+  left: 0;
+}
+
+.oo-ui-buttonedElement .oo-ui-buttonedElement-button {
+  display: inline-block;
+  vertical-align: middle;
+  cursor: pointer;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  -webkit-touch-callout: none;
+}
+
+.oo-ui-buttonedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
+  display: none;
+  margin-left: 0;
+}
+
+.oo-ui-buttonedElement .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator {
+  display: none;
+  margin-right: -0.75em;
+}
+
+.oo-ui-buttonedElement.oo-ui-widget-disabled .oo-ui-buttonedElement-button {
+  cursor: default;
+}
+
+.oo-ui-buttonedElement.oo-ui-indicatedElement .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
+.oo-ui-buttonedElement.oo-ui-iconedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
+  display: inline-block;
+  width: 1.9em;
+  height: 1.9em;
+  vertical-align: middle;
+  background-position: center center;
+  background-repeat: no-repeat;
+}
+
+.oo-ui-buttonedElement-frameless {
+  position: relative;
+  display: inline-block;
+}
+
+.oo-ui-buttonedElement-frameless .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
+  display: inline-block;
+  margin-left: 0.25em;
+  vertical-align: middle;
+}
+
+.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
+  display: inline-block;
+  padding: 0.2em 0.8em;
+  margin: 0.1em 0;
+  text-align: center;
+  vertical-align: top;
+}
+
+.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
+  display: inline-block;
+  line-height: 1.9em;
+  vertical-align: middle;
+}
+
+.oo-ui-buttonedElement-framed.oo-ui-iconedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
+  margin-right: -0.5em;
+  margin-left: -0.5em;
+}
+
+.oo-ui-buttonedElement-framed.oo-ui-iconedElement.oo-ui-labeledElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
+  margin-right: 0.3em;
+  margin-left: -0.5em;
+}
+
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button,
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
+  cursor: default;
+}
+
+.oo-ui-clippableElement-clippable {
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable {
+  overflow-y: hidden;
+}
+
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
+  width: 100%;
+  padding: 1.5em;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable {
+  overflow-y: auto;
+}
+
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded {
+  padding: 2em;
+}
+
+.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 3em;
+  left: 0;
+  overflow-y: auto;
+}
+
+.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+}
+
+.oo-ui-fieldLayout {
+  margin-bottom: 1em;
+}
+
+.oo-ui-fieldLayout:last-child {
+  margin-bottom: 0;
+}
+
+.oo-ui-fieldLayout:before,
+.oo-ui-fieldLayout:after {
+  display: table;
+  content: " ";
+}
+
+.oo-ui-fieldLayout:after {
+  clear: both;
+}
+
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labeledElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
+  display: block;
+  float: left;
+  width: 35%;
+  padding-top: 0.5em;
+  margin-right: 5%;
+}
+
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
+  display: block;
+  float: left;
+  width: 60%;
+}
+
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
+  text-align: right;
+}
+
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labeledElement-label {
+  display: inline-block;
+  padding: 0.75em 0.5em 0.5em 0.5em;
+  vertical-align: middle;
+}
+
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
+  display: inline-block;
+  padding: 0.5em 0;
+  vertical-align: middle;
+}
+
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labeledElement-label {
+  padding: 0.5em 0;
+}
+
+.oo-ui-fieldsetLayout {
+  position: relative;
+  padding: 0;
+  margin: 0;
+}
+
+.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
+  margin-top: 2em;
+}
+
+.oo-ui-fieldsetLayout-labeled {
+  margin-top: -0.75em;
+}
+
+.oo-ui-fieldsetLayout > legend.oo-ui-labeledElement-label {
+  padding: 0.25em 0;
+  margin-bottom: 0.5em;
+}
+
+.oo-ui-fieldsetLayout.oo-ui-iconedElement > legend.oo-ui-labeledElement-label {
+  padding-left: 1.75em;
+}
+
+.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-iconedElement-icon {
+  position: absolute;
+  top: 0;
+  left: 0;
+  display: block;
+  width: 2em;
+  height: 2em;
+  background-position: center center;
+  background-repeat: no-repeat;
+}
+
+.oo-ui-gridLayout {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+}
+
+.oo-ui-labelWidget {
+  padding: 0.5em 0;
+}
+
+.oo-ui-panelLayout {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+}
+
+.oo-ui-panelLayout-scrollable {
+  overflow-y: auto;
+}
+
+.oo-ui-panelLayout-padded {
+  padding: 2em;
+}
+
+.oo-ui-stackLayout > .oo-ui-panelLayout {
+  display: none;
+}
+
+.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
+  position: relative;
+  display: block;
+}
+
+.oo-ui-barToolGroup > .oo-ui-iconedElement-icon,
+.oo-ui-barToolGroup > .oo-ui-labeledElement-label {
+  display: none;
+}
+
+.oo-ui-barToolGroup .oo-ui-tool {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+}
+
+.oo-ui-barToolGroup .oo-ui-tool-link {
+  display: block;
+  height: 1.5em;
+  padding: 0.25em;
+  cursor: pointer;
+}
+
+.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
+  display: block;
+  width: 1.5em;
+  height: 1.5em;
+}
+
+.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+  display: none;
+}
+
+.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+  cursor: default;
+}
+
+.oo-ui-barToolGroup .oo-ui-tool-title,
+.oo-ui-barToolGroup .oo-ui-tool-accel {
+  display: none;
+}
+
+.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
+  padding: 0.25em;
+}
+
+.oo-ui-listToolGroup .oo-ui-tool {
+  display: inline-block;
+  width: 100%;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+.oo-ui-listToolGroup .oo-ui-tool-link {
+  display: block;
+  padding-right: 0.5em;
+  white-space: nowrap;
+  cursor: pointer;
+}
+
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+  cursor: default;
+}
+
+.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
+  min-width: 8em;
+}
+
+.oo-ui-menuToolGroup .oo-ui-tool {
+  display: block;
+}
+
+.oo-ui-menuToolGroup .oo-ui-tool-link {
+  display: block;
+  padding: 0.25em 1em 0.25em 0.25em;
+  white-space: nowrap;
+  cursor: pointer;
+}
+
+.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
+  background-image: none;
+}
+
+.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon {
+  background-image: /* @embed */ url(images/icons/check.png);
+}
+
+.oo-ui-popupToolGroup {
+  position: relative;
+  height: 2em;
+  min-width: 2.5em;
+}
+
+.oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement {
+  min-width: 3.5em;
+}
+
+.oo-ui-popupToolGroup-handle {
+  display: block;
+  cursor: pointer;
+}
+
+.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
+.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
+  position: absolute;
+  top: 0;
+  width: 2em;
+  height: 2em;
+  background-position: center center;
+  background-repeat: no-repeat;
+}
+
+.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator {
+  right: 0;
+}
+
+.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
+  left: 0.25em;
+}
+
+.oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
+  margin: 0 1em;
+  font-size: 0.8em;
+  line-height: 2.6em;
+}
+
+.oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
+  margin-left: 3.25em;
+}
+
+.oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
+  margin-right: 2.25em;
+}
+
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+  position: absolute;
+  top: 2em;
+  left: -1px;
+  z-index: 4;
+  display: none;
+}
+
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon {
+  background-position: center center;
+  background-repeat: no-repeat;
+}
+
+.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
+  display: block;
+}
+
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
+  display: inline-block;
+  width: 2em;
+  height: 2em;
+  margin-right: 0.5em;
+  vertical-align: middle;
+}
+
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+  display: inline-block;
+  font-size: 0.8em;
+  line-height: 2em;
+  vertical-align: middle;
+}
+
+.oo-ui-popupToolGroup .oo-ui-tool-accel {
+  display: none;
+}
+
+.oo-ui-popupTool .oo-ui-popupWidget {
+  margin-left: 1.25em;
+  font-size: 0.8em;
+}
+
+.oo-ui-popupTool .oo-ui-popupWidget-popup,
+.oo-ui-popupTool .oo-ui-popupWidget-tail {
+  z-index: 4;
+}
+
+.oo-ui-iconWidget {
+  display: inline-block;
+  width: 1.9em;
+  height: 1.9em;
+  line-height: 2.5em;
+  vertical-align: middle;
+  background-position: center center;
+  background-repeat: no-repeat;
+  opacity: 0.8;
+}
+
+.oo-ui-iconWidget.oo-ui-widget-disabled {
+  opacity: 0.2;
+}
+
+.oo-ui-indicatorWidget {
+  display: inline-block;
+  width: 1.9em;
+  height: 1.9em;
+  line-height: 2.5em;
+  vertical-align: middle;
+  background-position: center center;
+  background-repeat: no-repeat;
+  opacity: 0.8;
+}
+
+.oo-ui-indicatorWidget.oo-ui-widget-disabled {
+  opacity: 0.2;
+}
+
+.oo-ui-selectWidget {
+  padding: 0;
+  margin: 0;
+  list-style: none;
+}
+
+.oo-ui-optionWidget {
+  position: relative;
+  display: block;
+  padding: 0.5em 2em 0.5em 3em;
+  margin: 0;
+  list-style: none;
+  cursor: pointer;
+  border: none;
+}
+
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+  cursor: default;
+}
+
+.oo-ui-optionWidget .oo-ui-labeledElement-label {
+  overflow: hidden;
+  line-height: 1.5em;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.oo-ui-optionWidget .oo-ui-iconedElement-icon,
+.oo-ui-optionWidget .oo-ui-indicatedElement-indicator {
+  position: absolute;
+  top: 50%;
+  width: 2em;
+  height: 2em;
+  margin-top: -1em;
+  background-position: center center;
+  background-repeat: no-repeat;
+}
+
+.oo-ui-optionWidget .oo-ui-iconedElement-icon {
+  left: 0.5em;
+}
+
+.oo-ui-optionWidget .oo-ui-indicatedElement-indicator {
+  right: 0.5em;
+}
+
+.oo-ui-menuWidget {
+  position: absolute;
+}
+
+.oo-ui-menuWidget input {
+  position: absolute;
+  width: 0;
+  height: 0;
+  overflow: hidden;
+  opacity: 0;
+}
+
+.oo-ui-popupWidget-popup {
+  position: absolute;
+  overflow: hidden;
+}
+
+.oo-ui-popupWidget-tail {
+  display: none;
+}
+
+.oo-ui-popupWidget-tailed .oo-ui-popupWidget-popup {
+  margin-top: 7px;
+}
+
+.oo-ui-popupWidget-tailed .oo-ui-popupWidget-tail {
+  position: absolute;
+  display: block;
+  background-repeat: no-repeat;
+}
+
+.oo-ui-popupWidget-head {
+  height: 2.5em;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  -webkit-touch-callout: none;
+}
+
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+  float: right;
+  margin: 0.25em;
+}
+
+.oo-ui-popupWidget-head .oo-ui-labeledElement-label {
+  float: left;
+  margin: 0.75em 1em;
+  cursor: default;
+}
+
+.oo-ui-buttonGroupWidget {
+  border-radius: 0.3em;
+}
+
+.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
+  margin-bottom: -1px;
+  margin-left: -1px;
+  border-radius: 0;
+}
+
+.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button {
+  margin-left: 0;
+  border-bottom-left-radius: 0.3em;
+  border-top-left-radius: 0.3em;
+}
+
+.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button {
+  border-top-right-radius: 0.3em;
+  border-bottom-right-radius: 0.3em;
+}
+
+.oo-ui-buttonOptionWidget {
+  display: inline-block;
+  padding: 0;
+  background-color: transparent;
+}
+
+.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
+  position: relative;
+  height: 1.9em;
+}
+
+.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon,
+.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
+  position: static;
+  display: inline-block;
+  height: 1.9em;
+  margin-top: 0;
+  vertical-align: middle;
+}
+
+.oo-ui-buttonSelectWidget {
+  display: inline-block;
+  white-space: nowrap;
+}
+
+.oo-ui-buttonWidget {
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.oo-ui-inlineMenuWidget {
+  position: relative;
+  display: inline-block;
+  min-width: 20em;
+  margin: 0.25em 0;
+}
+
+.oo-ui-inlineMenuWidget-handle {
+  display: inline-block;
+  width: 100%;
+  height: 2.5em;
+  cursor: pointer;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  -webkit-touch-callout: none;
+}
+
+.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
+.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
+  position: absolute;
+  top: 0;
+  width: 2.5em;
+  height: 2.5em;
+  background-position: center center;
+  background-repeat: no-repeat;
+}
+
+.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator {
+  right: 0;
+}
+
+.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
+  left: 0.25em;
+}
+
+.oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
+  margin: 0 0.5em;
+  line-height: 2.5em;
+}
+
+.oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
+  margin-left: 3em;
+}
+
+.oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
+  margin-right: 2em;
+}
+
+.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
+  width: 100%;
+}
+
+.oo-ui-menuItemWidget {
+  position: relative;
+}
+
+.oo-ui-menuItemWidget .oo-ui-iconedElement-icon {
+  display: none;
+}
+
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
+  background-color: transparent;
+}
+
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon {
+  display: block;
+}
+
+.oo-ui-menuSectionItemWidget {
+  padding: 0.33em 0.75em;
+  cursor: default;
+}
+
+.oo-ui-outlineControlsWidget {
+  height: 3em;
+}
+
+.oo-ui-outlineControlsWidget-adders,
+.oo-ui-outlineControlsWidget-movers {
+  float: left;
+  height: 2em;
+  padding: 0;
+  margin: 0.5em;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
+  float: left;
+  width: 1.5em;
+  height: 2em;
+  margin: 0.5em 0 0.5em 0.5em;
+  background-position: right center;
+  background-repeat: no-repeat;
+}
+
+.oo-ui-outlineControlsWidget-adders {
+  float: left;
+  margin-left: 0;
+}
+
+.oo-ui-outlineControlsWidget-adders .oo-ui-buttonWidget {
+  float: left;
+}
+
+.oo-ui-outlineControlsWidget-movers {
+  float: right;
+}
+
+.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
+  float: right;
+}
+
+.oo-ui-outlineItemWidget {
+  position: relative;
+  padding: 0.75em;
+  cursor: pointer;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  -webkit-touch-callout: none;
+}
+
+.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label {
+  padding-right: 1.5em;
+}
+
+.oo-ui-outlineItemWidget-level-0 {
+  padding-left: 3.5em;
+}
+
+.oo-ui-outlineItemWidget-level-0 .oo-ui-iconedElement-icon {
+  left: 1em;
+}
+
+.oo-ui-outlineItemWidget-level-1 {
+  padding-left: 5em;
+}
+
+.oo-ui-outlineItemWidget-level-1 .oo-ui-iconedElement-icon {
+  left: 2.5em;
+}
+
+.oo-ui-outlineItemWidget-level-2 {
+  padding-left: 6.5em;
+}
+
+.oo-ui-outlineItemWidget-level-2 .oo-ui-iconedElement-icon {
+  left: 4em;
+}
+
+.oo-ui-popupButtonWidget {
+  position: relative;
+}
+
+.oo-ui-popupButtonWidget .oo-ui-popupWidget {
+  position: absolute;
+  left: 1em;
+  cursor: auto;
+}
+
+.oo-ui-searchWidget-query {
+  position: absolute;
+  top: 0;
+  right: 0;
+  left: 0;
+  height: 4em;
+  padding: 0 1em;
+}
+
+.oo-ui-searchWidget-query .oo-ui-textInputWidget {
+  width: 100%;
+  margin: 0.75em 0;
+}
+
+.oo-ui-searchWidget-results {
+  position: absolute;
+  top: 4em;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  padding: 1em;
+  overflow-x: hidden;
+  overflow-y: auto;
+  line-height: 0;
+}
+
+.oo-ui-textInputWidget {
+  position: relative;
+  width: 20em;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+.oo-ui-textInputWidget input,
+.oo-ui-textInputWidget textarea {
+  display: inline-block;
+  width: 100%;
+  padding: 0.5em;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+  resize: none;
+}
+
+.oo-ui-textInputWidget-decorated input,
+.oo-ui-textInputWidget-decorated textarea {
+  padding-left: 2em;
+}
+
+.oo-ui-textInputWidget-icon {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 2em;
+  height: 100%;
+  background-position: right center;
+  background-repeat: no-repeat;
+}
+
+.oo-ui-toggleSwitchWidget {
+  position: relative;
+  display: inline-block;
+  width: 3em;
+  height: 2em;
+  overflow: hidden;
+  vertical-align: middle;
+  cursor: pointer;
+  -webkit-transform: translateZ(0);
+     -moz-transform: translateZ(0);
+      -ms-transform: translateZ(0);
+       -o-transform: translateZ(0);
+          transform: translateZ(0);
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
+  cursor: default;
+}
+
+.oo-ui-toggleSwitchWidget-grip {
+  position: absolute;
+  top: 0.25em;
+  left: 0.25em;
+  display: block;
+  width: 1.5em;
+  height: 1.5em;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+  -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+     -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+      -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+       -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+          transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+}
+
+.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  -webkit-transition: opacity 200ms ease-in-out;
+     -moz-transition: opacity 200ms ease-in-out;
+      -ms-transition: opacity 200ms ease-in-out;
+       -o-transition: opacity 200ms ease-in-out;
+          transition: opacity 200ms ease-in-out;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  -webkit-touch-callout: none;
+}
+
+.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
+  left: 1.25em;
+  margin-left: -2px;
+}
+
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
+  left: 0.25em;
+  margin-left: 0;
+}
+
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+  display: none;
+}
+
+/* Icons */
+
+.oo-ui-icon-add-item {
+  background-image: /* @embed */ url(images/icons/add-item.svg);
+}
+
+.oo-ui-icon-advanced {
+  background-image: /* @embed */ url(images/icons/advanced.svg);
+}
+
+.oo-ui-icon-alert {
+  background-image: /* @embed */ url(images/icons/alert.svg);
+}
+
+.oo-ui-icon-check {
+  background-image: /* @embed */ url(images/icons/check.svg);
+}
+
+.oo-ui-icon-clear {
+  background-image: /* @embed */ url(images/icons/clear.svg);
+}
+
+.oo-ui-icon-close {
+  background-image: /* @embed */ url(images/icons/close.svg);
+}
+
+.oo-ui-icon-code {
+  background-image: /* @embed */ url(images/icons/code.svg);
+}
+
+.oo-ui-icon-collapse {
+  background-image: /* @embed */ url(images/icons/collapse.svg);
+}
+
+.oo-ui-icon-comment {
+  background-image: /* @embed */ url(images/icons/comment.svg);
+}
+
+.oo-ui-icon-expand {
+  background-image: /* @embed */ url(images/icons/expand.svg);
+}
+
+.oo-ui-icon-help {
+  background-image: /* @embed */ url(images/icons/help.svg);
+}
+
+.oo-ui-icon-link {
+  background-image: /* @embed */ url(images/icons/link.svg);
+}
+
+.oo-ui-icon-menu {
+  background-image: /* @embed */ url(images/icons/menu.svg);
+}
+
+.oo-ui-icon-next {
+  background-image: /* @embed */ url(images/icons/move-ltr.svg);
+}
+
+.oo-ui-icon-picture {
+  background-image: /* @embed */ url(images/icons/picture.svg);
+}
+
+.oo-ui-icon-previous {
+  background-image: /* @embed */ url(images/icons/move-rtl.svg);
+}
+
+.oo-ui-icon-redo {
+  background-image: /* @embed */ url(images/icons/arched-arrow-ltr.svg);
+}
+
+.oo-ui-icon-remove {
+  background-image: /* @embed */ url(images/icons/remove.svg);
+}
+
+.oo-ui-icon-search {
+  background-image: /* @embed */ url(images/icons/search.svg);
+}
+
+.oo-ui-icon-settings {
+  background-image: /* @embed */ url(images/icons/settings.svg);
+}
+
+.oo-ui-icon-tag {
+  background-image: /* @embed */ url(images/icons/tag.svg);
+}
+
+.oo-ui-icon-undo {
+  background-image: /* @embed */ url(images/icons/arched-arrow-rtl.svg);
+}
+
+.oo-ui-icon-window {
+  background-image: /* @embed */ url(images/icons/window.svg);
+}
+
+/* Indicators */
+
+.oo-ui-indicator-down {
+  background-image: /* @embed */ url(images/indicators/down.svg);
+}
+
+.oo-ui-indicator-required {
+  background-image: /* @embed */ url(images/indicators/required.svg);
+}
+
+.oo-ui-indicator-up {
+  background-image: /* @embed */ url(images/indicators/up.svg);
+}
\ No newline at end of file
diff --git a/resources/oojs-ui/update-oojs-ui.sh b/resources/oojs-ui/update-oojs-ui.sh
new file mode 100755 (executable)
index 0000000..6cf631f
--- /dev/null
@@ -0,0 +1,99 @@
+#!/usr/bin/env bash
+
+# FIXME this script is duplicated from update-oojs.sh - factor this out
+
+# This script generates a commit that updates the oojs-ui distribution
+# ./bin/update-oojs-ui.sh path/to/repo/for/oojs-ui
+
+function oojsuihash() {
+       grep "OOjs UI v" resources/oojs-ui/oojs-ui.js \
+               | head -n 1 \
+               | grep -Eo '\([a-z0-9]+\)' \
+               | sed 's/^(//' \
+               | sed 's/)$//'
+}
+
+function oojsuitag() {
+       grep "OOjs UI v" resources/oojs-ui/oojs-ui.js \
+               | head -n 1 \
+               | grep -Eo '\bv[0-9a-z.-]+\b'
+}
+
+function oojsuiversion() {
+       grep "OOjs UI v" resources/oojs-ui/oojs-ui.js \
+               | head -n 1 \
+               | grep -Eo '\bv[0-9a-z.-]+\b.*$'
+}
+
+# cd to the VisualEditor directory
+cd $(cd $(dirname $0)/../..; pwd)
+
+if [ "x$1" == "x" ]
+then
+       echo >&2 "Usage: update-oojs-ui.sh path/to/repo/for/oojs-ui"
+       exit 1
+fi
+
+# Undo any changes in the oojs-ui directory
+git reset resources/oojs-ui/
+git checkout resources/oojs-ui/
+
+git fetch origin
+# Create a branch of MW if needed, and reset it to master
+git checkout -B update-oojsui origin/master
+
+# Get the old oojs-ui version
+OLDVERSION=$(oojsuihash)
+if [ "x$OLDVERSION" == "x" ]
+then
+       TAG=$(oojsuitag)
+fi
+
+# cd to the oojs-ui directory
+cd $1 || exit 1
+if [ "x$OLDVERSION" == "x" ]
+then
+       # Try the tag
+       OLDVERSION=$(git rev-parse $TAG)
+       if [ $? != 0 ]
+       then
+               echo Could not find OOjs UI version
+               cd -
+               exit 1
+       fi
+fi
+if [ "$(git rev-parse $OLDVERSION)" == "$(git rev-parse HEAD)" ]
+then
+       echo "No changes (already at $OLDVERSION)"
+       cd -
+       exit 0
+fi
+# Build the distribution
+npm install || exit 1
+grunt || exit 1
+# Get the list of changes
+NEWCHANGES=$(git log $OLDVERSION.. --oneline --no-merges --reverse --color=never)
+NEWCHANGESDISPLAY=$(git log $OLDVERSION.. --oneline --no-merges --reverse --color=always)
+# cd back to the VisualEditor directory
+cd -
+
+# Copy files from dist/ to resources/oojs-ui
+cp -a $1/dist/{oojs-ui.js,oojs-ui.svg.css,oojs-ui-apex.css,images,i18n} resources/oojs-ui/
+# Figure out what the new version is
+NEWVERSION=$(oojsuiversion)
+# Generate commit summary
+COMMITMSG=$(cat <<END
+Update OOjs UI to $NEWVERSION
+
+New changes:
+$NEWCHANGES
+END
+)
+# Commit
+git commit resources/oojs-ui/ -m "$COMMITMSG"
+cat >&2 <<END
+
+
+Created commit with changes:
+$NEWCHANGESDISPLAY
+END
index 706f589..cd966b9 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs v1.0.6
+ * OOjs v1.0.8
  * https://www.mediawiki.org/wiki/OOjs
  *
- * Copyright 2011-2013 OOjs Team and other contributors.
+ * Copyright 2011-2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Tue Dec 10 2013 22:43:42 GMT+0100 (CET)
+ * Date: Tue Mar 11 2014 19:27:31 GMT+0100 (CET)
  */
 ( function ( global ) {
 
@@ -23,11 +23,9 @@ var
 
 /* Class Methods */
 
-
 /**
  * Assert whether a value is a plain object or not.
  *
- * @method
  * @param {Mixed} obj
  * @return {boolean}
  */
@@ -62,27 +60,30 @@ oo.isPlainObject = function ( obj ) {
  *  This is how prototypal inheritance works, it can only be one straight chain
  *  (just like classical inheritance in PHP for example). If you need to work with
  *  multiple constructors consider storing an instance of the other constructor in a
- *  property instead, or perhaps use a mixin (see oo.mixinClass).
- *
- *     function Foo() {}
- *     Foo.prototype.jump = function () {};
- *
- *     function FooBar() {}
- *     oo.inheritClass( FooBar, Foo );
- *     FooBar.prop.feet = 2;
- *     FooBar.prototype.walk = function () {};
- *
- *     function FooBarQuux() {}
- *     OO.inheritClass( FooBarQuux, FooBar );
- *     FooBarQuux.prototype.jump = function () {};
+ *  property instead, or perhaps use a mixin (see OO.mixinClass).
+ *
+ *     function Thing() {}
+ *     Thing.prototype.exists = function () {};
+ *
+ *     function Person() {
+ *         Person.super.apply( this, arguments );
+ *     }
+ *     OO.inheritClass( Person, Thing );
+ *     Person.static.defaultEyeCount = 2;
+ *     Person.prototype.walk = function () {};
+ *
+ *     function Jumper() {
+ *         Jumper.super.apply( this, arguments );
+ *     }
+ *     OO.inheritClass( Jumper, Person );
+ *     Jumper.prototype.jump = function () {};
+ *
+ *     Jumper.static.defaultEyeCount === 2;
+ *     var x = new Jumper();
+ *     x.jump();
+ *     x.walk();
+ *     x instanceof Thing && x instanceof Person && x instanceof Jumper;
  *
- *     FooBarQuux.prop.feet === 2;
- *     var fb = new FooBar();
- *     fb.jump();
- *     fb.walk();
- *     fb instanceof Foo && fb instanceof FooBar && fb instanceof FooBarQuux;
- *
- * @method
  * @param {Function} targetFn
  * @param {Function} originFn
  * @throws {Error} If target already inherits from origin
@@ -94,6 +95,7 @@ oo.inheritClass = function ( targetFn, originFn ) {
 
        var targetConstructor = targetFn.prototype.constructor;
 
+       targetFn.super = originFn;
        targetFn.prototype = Object.create( originFn.prototype, {
                // Restore constructor property of targetFn
                constructor: {
@@ -135,7 +137,6 @@ oo.inheritClass = function ( targetFn, originFn ) {
  *     OO.inheritClass( FooBar, Foo );
  *     OO.mixinClass( FooBar, ContextLazyLoad );
  *
- * @method
  * @param {Function} targetFn
  * @param {Function} originFn
  */
@@ -183,7 +184,6 @@ oo.mixinClass = function ( targetFn, originFn ) {
  *     foo2.getAge(); // 21
  *     foo.getAge(); // 22
  *
- * @method
  * @param {Object} origin
  * @return {Object} Clone of origin
  */
@@ -202,11 +202,10 @@ oo.cloneObject = function ( origin ) {
 };
 
 /**
- * Gets an array of all property values in an object.
+ * Get an array of all property values in an object.
  *
- * @method
  * @param {Object} Object to get values from
- * @returns {Array} List of object values
+ * @return {Array} List of object values
  */
 oo.getObjectValues = function ( obj ) {
        var key, values;
@@ -232,11 +231,10 @@ oo.getObjectValues = function ( obj ) {
  * the other. An asymmetrical test may also be performed, which checks only that properties in the
  * first object are present in the second object, but not the inverse.
  *
- * @method
  * @param {Object} a First object to compare
  * @param {Object} b Second object to compare
  * @param {boolean} [asymmetrical] Whether to check only that b contains values from a
- * @returns {boolean} If the objects contain the same values as each other
+ * @return {boolean} If the objects contain the same values as each other
  */
 oo.compare = function ( a, b, asymmetrical ) {
        var aValue, bValue, aType, bType, k;
@@ -265,10 +263,9 @@ oo.compare = function ( a, b, asymmetrical ) {
  *
  * Copies are deep, and will either be an object or an array depending on `source`.
  *
- * @method
  * @param {Object} source Object to copy
  * @param {Function} [callback] Applied to leaf values before they added to the clone
- * @returns {Object} Copy of source object
+ * @return {Object} Copy of source object
  */
 oo.copy = function ( source, callback ) {
        var key, sourceValue, sourceType, destination;
@@ -306,8 +303,9 @@ oo.copy = function ( source, callback ) {
 };
 
 /**
- * Generates a hash of an object based on its name and data.
- * Performance optimization: http://jsperf.com/ve-gethash-201208#/toJson_fnReplacerIfAoForElse
+ * Generate a hash of an object based on its name and data.
+ *
+ * Performance optimization: <http://jsperf.com/ve-gethash-201208#/toJson_fnReplacerIfAoForElse>
  *
  * To avoid two objects with the same values generating different hashes, we utilize the replacer
  * argument of JSON.stringify and sort the object by key as it's being serialized. This may or may
@@ -318,20 +316,21 @@ oo.copy = function ( source, callback ) {
  * ourselves. This allows classes to define custom hashing.
  *
  * @param {Object} val Object to generate hash for
- * @returns {string} Hash of object
+ * @return {string} Hash of object
  */
 oo.getHash = function ( val ) {
        return JSON.stringify( val, oo.getHash.keySortReplacer );
 };
 
 /**
- * Helper function for oo.getHash which sorts objects by key.
+ * Helper function for OO.getHash which sorts objects by key.
  *
  * This is a callback passed into JSON.stringify.
  *
+ * @method getHash_keySortReplacer
  * @param {string} key Property name of value being replaced
  * @param {Mixed} val Property value to replace
- * @returns {Mixed} Replacement value
+ * @return {Mixed} Replacement value
  */
 oo.getHash.keySortReplacer = function ( key, val ) {
        var normalized, keys, i, len;
@@ -361,13 +360,13 @@ oo.getHash.keySortReplacer = function ( key, val ) {
 /**
  * Compute the union (duplicate-free merge) of a set of arrays.
  *
- * Arrays values must be convertable to object keys (strings)
+ * Arrays values must be convertable to object keys (strings).
  *
  * By building an object (with the values for keys) in parallel with
- * the array, a new item's existence in the union can be computed faster
+ * the array, a new item's existence in the union can be computed faster.
  *
  * @param {Array...} arrays Arrays to union
- * @returns {Array} Union of the arrays
+ * @return {Array} Union of the arrays
  */
 oo.simpleArrayUnion = function () {
        var i, ilen, arr, j, jlen,
@@ -392,16 +391,16 @@ oo.simpleArrayUnion = function () {
  *
  * An intersection checks the item exists in 'b' while difference checks it doesn't.
  *
- * Arrays values must be convertable to object keys (strings)
+ * Arrays values must be convertable to object keys (strings).
  *
  * By building an object (with the values for keys) of 'b' we can
- * compute the result faster
+ * compute the result faster.
  *
  * @private
  * @param {Array} a First array
  * @param {Array} b Second array
  * @param {boolean} includeB Whether to items in 'b'
- * @returns {Array} Combination (intersection or difference) of arrays
+ * @return {Array} Combination (intersection or difference) of arrays
  */
 function simpleArrayCombine( a, b, includeB ) {
        var i, ilen, isInB,
@@ -425,11 +424,11 @@ function simpleArrayCombine( a, b, includeB ) {
 /**
  * Compute the intersection of two arrays (items in both arrays).
  *
- * Arrays values must be convertable to object keys (strings)
+ * Arrays values must be convertable to object keys (strings).
  *
  * @param {Array} a First array
  * @param {Array} b Second array
- * @returns {Array} Intersection of arrays
+ * @return {Array} Intersection of arrays
  */
 oo.simpleArrayIntersection = function ( a, b ) {
        return simpleArrayCombine( a, b, true );
@@ -438,25 +437,28 @@ oo.simpleArrayIntersection = function ( a, b ) {
 /**
  * Compute the difference of two arrays (items in 'a' but not 'b').
  *
- * Arrays values must be convertable to object keys (strings)
+ * Arrays values must be convertable to object keys (strings).
  *
  * @param {Array} a First array
  * @param {Array} b Second array
- * @returns {Array} Intersection of arrays
+ * @return {Array} Intersection of arrays
  */
 oo.simpleArrayDifference = function ( a, b ) {
        return simpleArrayCombine( a, b, false );
 };
 /**
- * Event emitter.
- *
  * @class OO.EventEmitter
  *
  * @constructor
- * @property {Object} bindings
  */
 oo.EventEmitter = function OoEventEmitter() {
        // Properties
+
+       /**
+        * Storage of bound event handlers by event name.
+        *
+        * @property
+        */
        this.bindings = {};
 };
 
@@ -467,7 +469,6 @@ oo.EventEmitter = function OoEventEmitter() {
  *
  * If the callback/context are already bound to the event, they will not be bound again.
  *
- * @method
  * @param {string} event Type of event to listen to
  * @param {Function} callback Function to call when event occurs
  * @param {Array} [args] Arguments to pass to listener, will be prepended to emitted arguments
@@ -502,9 +503,9 @@ oo.EventEmitter.prototype.on = function ( event, callback, args, context ) {
        }
        // Add binding
        bindings.push( {
-               'callback': callback,
-               'args': args,
-               'context': context
+               callback: callback,
+               args: args,
+               context: context
        } );
        return this;
 };
@@ -512,7 +513,6 @@ oo.EventEmitter.prototype.on = function ( event, callback, args, context ) {
 /**
  * Adds a one-time listener to a specific event.
  *
- * @method
  * @param {string} event Type of event to listen to
  * @param {Function} listener Listener to call when event occurs
  * @chainable
@@ -528,7 +528,6 @@ oo.EventEmitter.prototype.once = function ( event, listener ) {
 /**
  * Remove a specific listener from a specific event.
  *
- * @method
  * @param {string} event Type of event to remove listener from
  * @param {Function} [callback] Listener to remove, omit to remove all
  * @param {Object} [context=null] Object used context for callback function or method
@@ -573,13 +572,13 @@ oo.EventEmitter.prototype.off = function ( event, callback, context ) {
 
 /**
  * Emit an event.
+ *
  * TODO: Should this be chainable? What is the usefulness of the boolean
  * return value here?
  *
- * @method
  * @param {string} event Type of event
  * @param {Mixed} args First in a list of variadic arguments passed to event handler (optional)
- * @returns {boolean} If event was handled by at least one listener
+ * @return {boolean} If event was handled by at least one listener
  */
 oo.EventEmitter.prototype.emit = function ( event ) {
        var i, len, binding, bindings, args;
@@ -603,12 +602,11 @@ oo.EventEmitter.prototype.emit = function ( event ) {
 /**
  * Connect event handlers to an object.
  *
- * @method
  * @param {Object} context Object to call methods on when events occur
  * @param {Object.<string,string>|Object.<string,Function>|Object.<string,Array>} methods List of
- * event bindings keyed by event name containing either method names, functions or arrays containing
- * method name or function followed by a list of arguments to be passed to callback before emitted
- * arguments
+ *  event bindings keyed by event name containing either method names, functions or arrays containing
+ *  method name or function followed by a list of arguments to be passed to callback before emitted
+ *  arguments
  * @chainable
  */
 oo.EventEmitter.prototype.connect = function ( context, methods ) {
@@ -643,7 +641,6 @@ oo.EventEmitter.prototype.connect = function ( context, methods ) {
 /**
  * Disconnect event handlers from an object.
  *
- * @method
  * @param {Object} context Object to disconnect methods from
  * @param {Object.<string,string>|Object.<string,Function>|Object.<string,Array>} [methods] List of
  * event bindings keyed by event name containing either method names or functions
@@ -684,8 +681,6 @@ oo.EventEmitter.prototype.disconnect = function ( context, methods ) {
        return this;
 };
 /**
- * Data registry.
- *
  * @class OO.Registry
  * @mixins OO.EventEmitter
  *
@@ -718,52 +713,44 @@ oo.mixinClass( oo.Registry, oo.EventEmitter );
  *
  * Only the base name will be registered, overriding any existing entry with the same base name.
  *
- * @method
  * @param {string|string[]} name Symbolic name or list of symbolic names
  * @param {Mixed} data Data to associate with symbolic name
  * @fires register
  * @throws {Error} Name argument must be a string or array
  */
 oo.Registry.prototype.register = function ( name, data ) {
-       if ( typeof name !== 'string' && !Array.isArray( name ) ) {
-               throw new Error( 'Name argument must be a string or array, cannot be a ' + typeof name );
-       }
        var i, len;
-       if ( Array.isArray( name ) ) {
+       if ( typeof name === 'string' ) {
+               this.registry[name] = data;
+               this.emit( 'register', name, data );
+       } else if ( Array.isArray( name ) ) {
                for ( i = 0, len = name.length; i < len; i++ ) {
                        this.register( name[i], data );
                }
-       } else if ( typeof name === 'string' ) {
-               this.registry[name] = data;
-               this.emit( 'register', name, data );
        } else {
-               throw new Error( 'Name must be a string or array of strings, cannot be a ' + typeof name );
+               throw new Error( 'Name must be a string or array, cannot be a ' + typeof name );
        }
 };
 
 /**
- * Gets data for a given symbolic name.
+ * Get data for a given symbolic name.
  *
  * Lookups are done using the base name.
  *
- * @method
  * @param {string} name Symbolic name
- * @returns {Mixed|undefined} Data associated with symbolic name
+ * @return {Mixed|undefined} Data associated with symbolic name
  */
 oo.Registry.prototype.lookup = function ( name ) {
        return this.registry[name];
 };
 /**
- * Object factory.
- *
  * @class OO.Factory
  * @extends OO.Registry
  *
  * @constructor
  */
 oo.Factory = function OoFactory() {
-       // Parent constructor
-       oo.Registry.call( this );
+       oo.Factory.super.call( this );
 
        // Properties
        this.entries = [];
@@ -780,14 +767,12 @@ oo.inheritClass( oo.Factory, oo.Registry );
  *
  * Classes must have a static `name` property to be registered.
  *
- *     @example
  *     function MyClass() {};
  *     // Adds a static property to the class defining a symbolic name
  *     MyClass.static = { 'name': 'mine' };
  *     // Registers class with factory, available via symbolic name 'mine'
  *     factory.register( MyClass );
  *
- * @method
  * @param {Function} constructor Constructor to use when creating object
  * @throws {Error} Name must be a string and must not be empty
  * @throws {Error} Constructor must be a function
@@ -803,7 +788,8 @@ oo.Factory.prototype.register = function ( constructor ) {
                throw new Error( 'Name must be a string and must not be empty' );
        }
        this.entries.push( name );
-       oo.Registry.prototype.register.call( this, name, constructor );
+
+       oo.Factory.super.prototype.register.call( this, name, constructor );
 };
 
 /**
@@ -812,10 +798,9 @@ oo.Factory.prototype.register = function ( constructor ) {
  * Name is used to look up the constructor to use, while all additional arguments are passed to the
  * constructor directly, so leaving one out will pass an undefined to the constructor.
  *
- * @method
  * @param {string} name Object name
  * @param {Mixed...} [args] Arguments to pass to the constructor
- * @returns {Object} The new object
+ * @return {Object} The new object
  * @throws {Error} Unknown object name
  */
 oo.Factory.prototype.create = function ( name ) {
diff --git a/resources/oojs/update-oojs.sh b/resources/oojs/update-oojs.sh
new file mode 100755 (executable)
index 0000000..57c7625
--- /dev/null
@@ -0,0 +1,99 @@
+#!/usr/bin/env bash
+
+# FIXME this script is duplicated from update-oojs-ui.sh - factor this out
+
+# This script generates a commit that updates the oojs distribution
+# ./bin/update-oojs.sh path/to/repo/for/oojs
+
+function oojshash() {
+       grep "OOjs v" resources/oojs/oojs.js \
+               | head -n 1 \
+               | grep -Eo '\([a-z0-9]+\)' \
+               | sed 's/^(//' \
+               | sed 's/)$//'
+}
+
+function oojstag() {
+       grep "OOjs v" resources/oojs/oojs.js \
+               | head -n 1 \
+               | grep -Eo '\bv[0-9a-z.-]+\b'
+}
+
+function oojsversion() {
+       grep "OOjs v" resources/oojs/oojs.js \
+               | head -n 1 \
+               | grep -Eo '\bv[0-9a-z.-]+\b.*$'
+}
+
+# cd to the MW directory
+cd $(cd $(dirname $0)/../..; pwd)
+
+if [ "x$1" == "x" ]
+then
+       echo >&2 "Usage: update-oojs.sh path/to/repo/for/oojs"
+       exit 1
+fi
+
+# Undo any changes in the oojs directory
+git reset resources/oojs/
+git checkout resources/oojs/
+
+git fetch origin
+# Create a branch of MW if needed, and reset it to master
+git checkout -B update-oojs origin/master
+
+# Get the old oojs version
+OLDVERSION=$(oojshash)
+if [ "x$OLDVERSION" == "x" ]
+then
+       TAG=$(oojstag)
+fi
+
+# cd to the oojs directory
+cd $1 || exit 1
+if [ "x$OLDVERSION" == "x" ]
+then
+       # Try the tag
+       OLDVERSION=$(git rev-parse $TAG)
+       if [ $? != 0 ]
+       then
+               echo Could not find OOjs version
+               cd -
+               exit 1
+       fi
+fi
+if [ "$(git rev-parse $OLDVERSION)" == "$(git rev-parse HEAD)" ]
+then
+       echo "No changes (already at $OLDVERSION)"
+       cd -
+       exit 0
+fi
+# Build the distribution
+npm install || exit 1
+grunt || exit 1
+# Get the list of changes
+NEWCHANGES=$(git log $OLDVERSION.. --oneline --no-merges --reverse --color=never)
+NEWCHANGESDISPLAY=$(git log $OLDVERSION.. --oneline --no-merges --reverse --color=always)
+# cd back to the VisualEditor directory
+cd -
+
+# Copy files from dist/ to resources/oojs/
+cp -a $1/dist/* resources/oojs/
+# Figure out what the new version is
+NEWVERSION=$(oojsversion)
+# Generate commit summary
+COMMITMSG=$(cat <<END
+Update OOjs to $NEWVERSION
+
+New changes:
+$NEWCHANGES
+END
+)
+# Commit
+git commit resources/oojs/ -m "$COMMITMSG"
+cat >&2 <<END
+
+
+Created commit with changes:
+$NEWCHANGESDISPLAY
+END
diff --git a/resources/sinonjs/sinon-1.9.0.js b/resources/sinonjs/sinon-1.9.0.js
new file mode 100644 (file)
index 0000000..428b729
--- /dev/null
@@ -0,0 +1,4794 @@
+/**
+ * Sinon.JS 1.9.0, 2014/03/05
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS
+ *
+ * (The BSD License)
+ * 
+ * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 
+ *     * Redistributions of source code must retain the above copyright notice,
+ *       this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright notice,
+ *       this list of conditions and the following disclaimer in the documentation
+ *       and/or other materials provided with the distribution.
+ *     * Neither the name of Christian Johansen nor the names of his contributors
+ *       may be used to endorse or promote products derived from this software
+ *       without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+this.sinon = (function () {
+var samsam, formatio;
+function define(mod, deps, fn) { if (mod == "samsam") { samsam = deps(); } else { formatio = fn(samsam); } }
+define.amd = true;
+((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) ||
+ (typeof module === "object" &&
+      function (m) { module.exports = m(); }) || // Node
+ function (m) { this.samsam = m(); } // Browser globals
+)(function () {
+    var o = Object.prototype;
+    var div = typeof document !== "undefined" && document.createElement("div");
+
+    function isNaN(value) {
+        // Unlike global isNaN, this avoids type coercion
+        // typeof check avoids IE host object issues, hat tip to
+        // lodash
+        var val = value; // JsLint thinks value !== value is "weird"
+        return typeof value === "number" && value !== val;
+    }
+
+    function getClass(value) {
+        // Returns the internal [[Class]] by calling Object.prototype.toString
+        // with the provided value as this. Return value is a string, naming the
+        // internal class, e.g. "Array"
+        return o.toString.call(value).split(/[ \]]/)[1];
+    }
+
+    /**
+     * @name samsam.isArguments
+     * @param Object object
+     *
+     * Returns ``true`` if ``object`` is an ``arguments`` object,
+     * ``false`` otherwise.
+     */
+    function isArguments(object) {
+        if (typeof object !== "object" || typeof object.length !== "number" ||
+                getClass(object) === "Array") {
+            return false;
+        }
+        if (typeof object.callee == "function") { return true; }
+        try {
+            object[object.length] = 6;
+            delete object[object.length];
+        } catch (e) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * @name samsam.isElement
+     * @param Object object
+     *
+     * Returns ``true`` if ``object`` is a DOM element node. Unlike
+     * Underscore.js/lodash, this function will return ``false`` if ``object``
+     * is an *element-like* object, i.e. a regular object with a ``nodeType``
+     * property that holds the value ``1``.
+     */
+    function isElement(object) {
+        if (!object || object.nodeType !== 1 || !div) { return false; }
+        try {
+            object.appendChild(div);
+            object.removeChild(div);
+        } catch (e) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * @name samsam.keys
+     * @param Object object
+     *
+     * Return an array of own property names.
+     */
+    function keys(object) {
+        var ks = [], prop;
+        for (prop in object) {
+            if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); }
+        }
+        return ks;
+    }
+
+    /**
+     * @name samsam.isDate
+     * @param Object value
+     *
+     * Returns true if the object is a ``Date``, or *date-like*. Duck typing
+     * of date objects work by checking that the object has a ``getTime``
+     * function whose return value equals the return value from the object's
+     * ``valueOf``.
+     */
+    function isDate(value) {
+        return typeof value.getTime == "function" &&
+            value.getTime() == value.valueOf();
+    }
+
+    /**
+     * @name samsam.isNegZero
+     * @param Object value
+     *
+     * Returns ``true`` if ``value`` is ``-0``.
+     */
+    function isNegZero(value) {
+        return value === 0 && 1 / value === -Infinity;
+    }
+
+    /**
+     * @name samsam.equal
+     * @param Object obj1
+     * @param Object obj2
+     *
+     * Returns ``true`` if two objects are strictly equal. Compared to
+     * ``===`` there are two exceptions:
+     *
+     *   - NaN is considered equal to NaN
+     *   - -0 and +0 are not considered equal
+     */
+    function identical(obj1, obj2) {
+        if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) {
+            return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2);
+        }
+    }
+
+
+    /**
+     * @name samsam.deepEqual
+     * @param Object obj1
+     * @param Object obj2
+     *
+     * Deep equal comparison. Two values are "deep equal" if:
+     *
+     *   - They are equal, according to samsam.identical
+     *   - They are both date objects representing the same time
+     *   - They are both arrays containing elements that are all deepEqual
+     *   - They are objects with the same set of properties, and each property
+     *     in ``obj1`` is deepEqual to the corresponding property in ``obj2``
+     *
+     * Supports cyclic objects.
+     */
+    function deepEqualCyclic(obj1, obj2) {
+
+        // used for cyclic comparison
+        // contain already visited objects
+        var objects1 = [],
+            objects2 = [],
+        // contain pathes (position in the object structure)
+        // of the already visited objects
+        // indexes same as in objects arrays
+            paths1 = [],
+            paths2 = [],
+        // contains combinations of already compared objects
+        // in the manner: { "$1['ref']$2['ref']": true }
+            compared = {};
+
+        /**
+         * used to check, if the value of a property is an object
+         * (cyclic logic is only needed for objects)
+         * only needed for cyclic logic
+         */
+        function isObject(value) {
+
+            if (typeof value === 'object' && value !== null &&
+                    !(value instanceof Boolean) &&
+                    !(value instanceof Date)    &&
+                    !(value instanceof Number)  &&
+                    !(value instanceof RegExp)  &&
+                    !(value instanceof String)) {
+
+                return true;
+            }
+
+            return false;
+        }
+
+        /**
+         * returns the index of the given object in the
+         * given objects array, -1 if not contained
+         * only needed for cyclic logic
+         */
+        function getIndex(objects, obj) {
+
+            var i;
+            for (i = 0; i < objects.length; i++) {
+                if (objects[i] === obj) {
+                    return i;
+                }
+            }
+
+            return -1;
+        }
+
+        // does the recursion for the deep equal check
+        return (function deepEqual(obj1, obj2, path1, path2) {
+            var type1 = typeof obj1;
+            var type2 = typeof obj2;
+
+            // == null also matches undefined
+            if (obj1 === obj2 ||
+                    isNaN(obj1) || isNaN(obj2) ||
+                    obj1 == null || obj2 == null ||
+                    type1 !== "object" || type2 !== "object") {
+
+                return identical(obj1, obj2);
+            }
+
+            // Elements are only equal if identical(expected, actual)
+            if (isElement(obj1) || isElement(obj2)) { return false; }
+
+            var isDate1 = isDate(obj1), isDate2 = isDate(obj2);
+            if (isDate1 || isDate2) {
+                if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) {
+                    return false;
+                }
+            }
+
+            if (obj1 instanceof RegExp && obj2 instanceof RegExp) {
+                if (obj1.toString() !== obj2.toString()) { return false; }
+            }
+
+            var class1 = getClass(obj1);
+            var class2 = getClass(obj2);
+            var keys1 = keys(obj1);
+            var keys2 = keys(obj2);
+
+            if (isArguments(obj1) || isArguments(obj2)) {
+                if (obj1.length !== obj2.length) { return false; }
+            } else {
+                if (type1 !== type2 || class1 !== class2 ||
+                        keys1.length !== keys2.length) {
+                    return false;
+                }
+            }
+
+            var key, i, l,
+                // following vars are used for the cyclic logic
+                value1, value2,
+                isObject1, isObject2,
+                index1, index2,
+                newPath1, newPath2;
+
+            for (i = 0, l = keys1.length; i < l; i++) {
+                key = keys1[i];
+                if (!o.hasOwnProperty.call(obj2, key)) {
+                    return false;
+                }
+
+                // Start of the cyclic logic
+
+                value1 = obj1[key];
+                value2 = obj2[key];
+
+                isObject1 = isObject(value1);
+                isObject2 = isObject(value2);
+
+                // determine, if the objects were already visited
+                // (it's faster to check for isObject first, than to
+                // get -1 from getIndex for non objects)
+                index1 = isObject1 ? getIndex(objects1, value1) : -1;
+                index2 = isObject2 ? getIndex(objects2, value2) : -1;
+
+                // determine the new pathes of the objects
+                // - for non cyclic objects the current path will be extended
+                //   by current property name
+                // - for cyclic objects the stored path is taken
+                newPath1 = index1 !== -1
+                    ? paths1[index1]
+                    : path1 + '[' + JSON.stringify(key) + ']';
+                newPath2 = index2 !== -1
+                    ? paths2[index2]
+                    : path2 + '[' + JSON.stringify(key) + ']';
+
+                // stop recursion if current objects are already compared
+                if (compared[newPath1 + newPath2]) {
+                    return true;
+                }
+
+                // remember the current objects and their pathes
+                if (index1 === -1 && isObject1) {
+                    objects1.push(value1);
+                    paths1.push(newPath1);
+                }
+                if (index2 === -1 && isObject2) {
+                    objects2.push(value2);
+                    paths2.push(newPath2);
+                }
+
+                // remember that the current objects are already compared
+                if (isObject1 && isObject2) {
+                    compared[newPath1 + newPath2] = true;
+                }
+
+                // End of cyclic logic
+
+                // neither value1 nor value2 is a cycle
+                // continue with next level
+                if (!deepEqual(value1, value2, newPath1, newPath2)) {
+                    return false;
+                }
+            }
+
+            return true;
+
+        }(obj1, obj2, '$1', '$2'));
+    }
+
+    var match;
+
+    function arrayContains(array, subset) {
+        if (subset.length === 0) { return true; }
+        var i, l, j, k;
+        for (i = 0, l = array.length; i < l; ++i) {
+            if (match(array[i], subset[0])) {
+                for (j = 0, k = subset.length; j < k; ++j) {
+                    if (!match(array[i + j], subset[j])) { return false; }
+                }
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @name samsam.match
+     * @param Object object
+     * @param Object matcher
+     *
+     * Compare arbitrary value ``object`` with matcher.
+     */
+    match = function match(object, matcher) {
+        if (matcher && typeof matcher.test === "function") {
+            return matcher.test(object);
+        }
+
+        if (typeof matcher === "function") {
+            return matcher(object) === true;
+        }
+
+        if (typeof matcher === "string") {
+            matcher = matcher.toLowerCase();
+            var notNull = typeof object === "string" || !!object;
+            return notNull &&
+                (String(object)).toLowerCase().indexOf(matcher) >= 0;
+        }
+
+        if (typeof matcher === "number") {
+            return matcher === object;
+        }
+
+        if (typeof matcher === "boolean") {
+            return matcher === object;
+        }
+
+        if (getClass(object) === "Array" && getClass(matcher) === "Array") {
+            return arrayContains(object, matcher);
+        }
+
+        if (matcher && typeof matcher === "object") {
+            var prop;
+            for (prop in matcher) {
+                if (!match(object[prop], matcher[prop])) {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        throw new Error("Matcher was not a string, a number, a " +
+                        "function, a boolean or an object");
+    };
+
+    return {
+        isArguments: isArguments,
+        isElement: isElement,
+        isDate: isDate,
+        isNegZero: isNegZero,
+        identical: identical,
+        deepEqual: deepEqualCyclic,
+        match: match,
+        keys: keys
+    };
+});
+((typeof define === "function" && define.amd && function (m) {
+    define("formatio", ["samsam"], m);
+}) || (typeof module === "object" && function (m) {
+    module.exports = m(require("samsam"));
+}) || function (m) { this.formatio = m(this.samsam); }
+)(function (samsam) {
+    
+    var formatio = {
+        excludeConstructors: ["Object", /^.$/],
+        quoteStrings: true
+    };
+
+    var hasOwn = Object.prototype.hasOwnProperty;
+
+    var specialObjects = [];
+    if (typeof global !== "undefined") {
+        specialObjects.push({ object: global, value: "[object global]" });
+    }
+    if (typeof document !== "undefined") {
+        specialObjects.push({
+            object: document,
+            value: "[object HTMLDocument]"
+        });
+    }
+    if (typeof window !== "undefined") {
+        specialObjects.push({ object: window, value: "[object Window]" });
+    }
+
+    function functionName(func) {
+        if (!func) { return ""; }
+        if (func.displayName) { return func.displayName; }
+        if (func.name) { return func.name; }
+        var matches = func.toString().match(/function\s+([^\(]+)/m);
+        return (matches && matches[1]) || "";
+    }
+
+    function constructorName(f, object) {
+        var name = functionName(object && object.constructor);
+        var excludes = f.excludeConstructors ||
+                formatio.excludeConstructors || [];
+
+        var i, l;
+        for (i = 0, l = excludes.length; i < l; ++i) {
+            if (typeof excludes[i] === "string" && excludes[i] === name) {
+                return "";
+            } else if (excludes[i].test && excludes[i].test(name)) {
+                return "";
+            }
+        }
+
+        return name;
+    }
+
+    function isCircular(object, objects) {
+        if (typeof object !== "object") { return false; }
+        var i, l;
+        for (i = 0, l = objects.length; i < l; ++i) {
+            if (objects[i] === object) { return true; }
+        }
+        return false;
+    }
+
+    function ascii(f, object, processed, indent) {
+        if (typeof object === "string") {
+            var qs = f.quoteStrings;
+            var quote = typeof qs !== "boolean" || qs;
+            return processed || quote ? '"' + object + '"' : object;
+        }
+
+        if (typeof object === "function" && !(object instanceof RegExp)) {
+            return ascii.func(object);
+        }
+
+        processed = processed || [];
+
+        if (isCircular(object, processed)) { return "[Circular]"; }
+
+        if (Object.prototype.toString.call(object) === "[object Array]") {
+            return ascii.array.call(f, object, processed);
+        }
+
+        if (!object) { return String((1/object) === -Infinity ? "-0" : object); }
+        if (samsam.isElement(object)) { return ascii.element(object); }
+
+        if (typeof object.toString === "function" &&
+                object.toString !== Object.prototype.toString) {
+            return object.toString();
+        }
+
+        var i, l;
+        for (i = 0, l = specialObjects.length; i < l; i++) {
+            if (object === specialObjects[i].object) {
+                return specialObjects[i].value;
+            }
+        }
+
+        return ascii.object.call(f, object, processed, indent);
+    }
+
+    ascii.func = function (func) {
+        return "function " + functionName(func) + "() {}";
+    };
+
+    ascii.array = function (array, processed) {
+        processed = processed || [];
+        processed.push(array);
+        var i, l, pieces = [];
+        for (i = 0, l = array.length; i < l; ++i) {
+            pieces.push(ascii(this, array[i], processed));
+        }
+        return "[" + pieces.join(", ") + "]";
+    };
+
+    ascii.object = function (object, processed, indent) {
+        processed = processed || [];
+        processed.push(object);
+        indent = indent || 0;
+        var pieces = [], properties = samsam.keys(object).sort();
+        var length = 3;
+        var prop, str, obj, i, l;
+
+        for (i = 0, l = properties.length; i < l; ++i) {
+            prop = properties[i];
+            obj = object[prop];
+
+            if (isCircular(obj, processed)) {
+                str = "[Circular]";
+            } else {
+                str = ascii(this, obj, processed, indent + 2);
+            }
+
+            str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str;
+            length += str.length;
+            pieces.push(str);
+        }
+
+        var cons = constructorName(this, object);
+        var prefix = cons ? "[" + cons + "] " : "";
+        var is = "";
+        for (i = 0, l = indent; i < l; ++i) { is += " "; }
+
+        if (length + indent > 80) {
+            return prefix + "{\n  " + is + pieces.join(",\n  " + is) + "\n" +
+                is + "}";
+        }
+        return prefix + "{ " + pieces.join(", ") + " }";
+    };
+
+    ascii.element = function (element) {
+        var tagName = element.tagName.toLowerCase();
+        var attrs = element.attributes, attr, pairs = [], attrName, i, l, val;
+
+        for (i = 0, l = attrs.length; i < l; ++i) {
+            attr = attrs.item(i);
+            attrName = attr.nodeName.toLowerCase().replace("html:", "");
+            val = attr.nodeValue;
+            if (attrName !== "contenteditable" || val !== "inherit") {
+                if (!!val) { pairs.push(attrName + "=\"" + val + "\""); }
+            }
+        }
+
+        var formatted = "<" + tagName + (pairs.length > 0 ? " " : "");
+        var content = element.innerHTML;
+
+        if (content.length > 20) {
+            content = content.substr(0, 20) + "[...]";
+        }
+
+        var res = formatted + pairs.join(" ") + ">" + content +
+                "</" + tagName + ">";
+
+        return res.replace(/ contentEditable="inherit"/, "");
+    };
+
+    function Formatio(options) {
+        for (var opt in options) {
+            this[opt] = options[opt];
+        }
+    }
+
+    Formatio.prototype = {
+        functionName: functionName,
+
+        configure: function (options) {
+            return new Formatio(options);
+        },
+
+        constructorName: function (object) {
+            return constructorName(this, object);
+        },
+
+        ascii: function (object, processed, indent) {
+            return ascii(this, object, processed, indent);
+        }
+    };
+
+    return Formatio.prototype;
+});
+/*jslint eqeqeq: false, onevar: false, forin: true, nomen: false, regexp: false, plusplus: false*/
+/*global module, require, __dirname, document*/
+/**
+ * Sinon core utilities. For internal use only.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+var sinon = (function (formatio) {
+    var div = typeof document != "undefined" && document.createElement("div");
+    var hasOwn = Object.prototype.hasOwnProperty;
+
+    function isDOMNode(obj) {
+        var success = false;
+
+        try {
+            obj.appendChild(div);
+            success = div.parentNode == obj;
+        } catch (e) {
+            return false;
+        } finally {
+            try {
+                obj.removeChild(div);
+            } catch (e) {
+                // Remove failed, not much we can do about that
+            }
+        }
+
+        return success;
+    }
+
+    function isElement(obj) {
+        return div && obj && obj.nodeType === 1 && isDOMNode(obj);
+    }
+
+    function isFunction(obj) {
+        return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply);
+    }
+
+    function mirrorProperties(target, source) {
+        for (var prop in source) {
+            if (!hasOwn.call(target, prop)) {
+                target[prop] = source[prop];
+            }
+        }
+    }
+
+    function isRestorable (obj) {
+        return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon;
+    }
+
+    var sinon = {
+        wrapMethod: function wrapMethod(object, property, method) {
+            if (!object) {
+                throw new TypeError("Should wrap property of object");
+            }
+
+            if (typeof method != "function") {
+                throw new TypeError("Method wrapper should be function");
+            }
+
+            var wrappedMethod = object[property],
+                error;
+
+            if (!isFunction(wrappedMethod)) {
+                error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
+                                    property + " as function");
+            }
+
+            if (wrappedMethod.restore && wrappedMethod.restore.sinon) {
+                error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
+            }
+
+            if (wrappedMethod.calledBefore) {
+                var verb = !!wrappedMethod.returns ? "stubbed" : "spied on";
+                error = new TypeError("Attempted to wrap " + property + " which is already " + verb);
+            }
+
+            if (error) {
+                if (wrappedMethod._stack) {
+                    error.stack += '\n--------------\n' + wrappedMethod._stack;
+                }
+                throw error;
+            }
+
+            // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem
+            // when using hasOwn.call on objects from other frames.
+            var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property);
+            object[property] = method;
+            method.displayName = property;
+            // Set up a stack trace which can be used later to find what line of
+            // code the original method was created on.
+            method._stack = (new Error('Stack Trace for original')).stack;
+
+            method.restore = function () {
+                // For prototype properties try to reset by delete first.
+                // If this fails (ex: localStorage on mobile safari) then force a reset
+                // via direct assignment.
+                if (!owned) {
+                    delete object[property];
+                }
+                if (object[property] === method) {
+                    object[property] = wrappedMethod;
+                }
+            };
+
+            method.restore.sinon = true;
+            mirrorProperties(method, wrappedMethod);
+
+            return method;
+        },
+
+        extend: function extend(target) {
+            for (var i = 1, l = arguments.length; i < l; i += 1) {
+                for (var prop in arguments[i]) {
+                    if (arguments[i].hasOwnProperty(prop)) {
+                        target[prop] = arguments[i][prop];
+                    }
+
+                    // DONT ENUM bug, only care about toString
+                    if (arguments[i].hasOwnProperty("toString") &&
+                        arguments[i].toString != target.toString) {
+                        target.toString = arguments[i].toString;
+                    }
+                }
+            }
+
+            return target;
+        },
+
+        create: function create(proto) {
+            var F = function () {};
+            F.prototype = proto;
+            return new F();
+        },
+
+        deepEqual: function deepEqual(a, b) {
+            if (sinon.match && sinon.match.isMatcher(a)) {
+                return a.test(b);
+            }
+            if (typeof a != "object" || typeof b != "object") {
+                return a === b;
+            }
+
+            if (isElement(a) || isElement(b)) {
+                return a === b;
+            }
+
+            if (a === b) {
+                return true;
+            }
+
+            if ((a === null && b !== null) || (a !== null && b === null)) {
+                return false;
+            }
+
+            if (a instanceof RegExp && b instanceof RegExp) {
+              return (a.source === b.source) && (a.global === b.global) && 
+                (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline);
+            }
+
+            var aString = Object.prototype.toString.call(a);
+            if (aString != Object.prototype.toString.call(b)) {
+                return false;
+            }
+
+            if (aString == "[object Date]") {
+                return a.valueOf() === b.valueOf();
+            }
+
+            var prop, aLength = 0, bLength = 0;
+
+            if (aString == "[object Array]" && a.length !== b.length) {
+                return false;
+            }
+
+            for (prop in a) {
+                aLength += 1;
+
+                if (!deepEqual(a[prop], b[prop])) {
+                    return false;
+                }
+            }
+
+            for (prop in b) {
+                bLength += 1;
+            }
+
+            return aLength == bLength;
+        },
+
+        functionName: function functionName(func) {
+            var name = func.displayName || func.name;
+
+            // Use function decomposition as a last resort to get function
+            // name. Does not rely on function decomposition to work - if it
+            // doesn't debugging will be slightly less informative
+            // (i.e. toString will say 'spy' rather than 'myFunc').
+            if (!name) {
+                var matches = func.toString().match(/function ([^\s\(]+)/);
+                name = matches && matches[1];
+            }
+
+            return name;
+        },
+
+        functionToString: function toString() {
+            if (this.getCall && this.callCount) {
+                var thisValue, prop, i = this.callCount;
+
+                while (i--) {
+                    thisValue = this.getCall(i).thisValue;
+
+                    for (prop in thisValue) {
+                        if (thisValue[prop] === this) {
+                            return prop;
+                        }
+                    }
+                }
+            }
+
+            return this.displayName || "sinon fake";
+        },
+
+        getConfig: function (custom) {
+            var config = {};
+            custom = custom || {};
+            var defaults = sinon.defaultConfig;
+
+            for (var prop in defaults) {
+                if (defaults.hasOwnProperty(prop)) {
+                    config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop];
+                }
+            }
+
+            return config;
+        },
+
+        format: function (val) {
+            return "" + val;
+        },
+
+        defaultConfig: {
+            injectIntoThis: true,
+            injectInto: null,
+            properties: ["spy", "stub", "mock", "clock", "server", "requests"],
+            useFakeTimers: true,
+            useFakeServer: true
+        },
+
+        timesInWords: function timesInWords(count) {
+            return count == 1 && "once" ||
+                count == 2 && "twice" ||
+                count == 3 && "thrice" ||
+                (count || 0) + " times";
+        },
+
+        calledInOrder: function (spies) {
+            for (var i = 1, l = spies.length; i < l; i++) {
+                if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) {
+                    return false;
+                }
+            }
+
+            return true;
+        },
+
+        orderByFirstCall: function (spies) {
+            return spies.sort(function (a, b) {
+                // uuid, won't ever be equal
+                var aCall = a.getCall(0);
+                var bCall = b.getCall(0);
+                var aId = aCall && aCall.callId || -1;
+                var bId = bCall && bCall.callId || -1;
+
+                return aId < bId ? -1 : 1;
+            });
+        },
+
+        log: function () {},
+
+        logError: function (label, err) {
+            var msg = label + " threw exception: ";
+            sinon.log(msg + "[" + err.name + "] " + err.message);
+            if (err.stack) { sinon.log(err.stack); }
+
+            setTimeout(function () {
+                err.message = msg + err.message;
+                throw err;
+            }, 0);
+        },
+
+        typeOf: function (value) {
+            if (value === null) {
+                return "null";
+            }
+            else if (value === undefined) {
+                return "undefined";
+            }
+            var string = Object.prototype.toString.call(value);
+            return string.substring(8, string.length - 1).toLowerCase();
+        },
+
+        createStubInstance: function (constructor) {
+            if (typeof constructor !== "function") {
+                throw new TypeError("The constructor should be a function.");
+            }
+            return sinon.stub(sinon.create(constructor.prototype));
+        },
+
+        restore: function (object) {
+            if (object !== null && typeof object === "object") {
+                for (var prop in object) {
+                    if (isRestorable(object[prop])) {
+                        object[prop].restore();
+                    }
+                }
+            }
+            else if (isRestorable(object)) {
+                object.restore();
+            }
+        }
+    };
+
+    var isNode = typeof module !== "undefined" && module.exports;
+    var isAMD = typeof define === 'function' && typeof define.amd === 'object' && define.amd;
+
+    if (isAMD) {
+        define(function(){
+            return sinon;
+        });
+    } else if (isNode) {
+        try {
+            formatio = require("formatio");
+        } catch (e) {}
+        module.exports = sinon;
+        module.exports.spy = require("./sinon/spy");
+        module.exports.spyCall = require("./sinon/call");
+        module.exports.behavior = require("./sinon/behavior");
+        module.exports.stub = require("./sinon/stub");
+        module.exports.mock = require("./sinon/mock");
+        module.exports.collection = require("./sinon/collection");
+        module.exports.assert = require("./sinon/assert");
+        module.exports.sandbox = require("./sinon/sandbox");
+        module.exports.test = require("./sinon/test");
+        module.exports.testCase = require("./sinon/test_case");
+        module.exports.assert = require("./sinon/assert");
+        module.exports.match = require("./sinon/match");
+    }
+
+    if (formatio) {
+        var formatter = formatio.configure({ quoteStrings: false });
+        sinon.format = function () {
+            return formatter.ascii.apply(formatter, arguments);
+        };
+    } else if (isNode) {
+        try {
+            var util = require("util");
+            sinon.format = function (value) {
+                return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value;
+            };
+        } catch (e) {
+            /* Node, but no util module - would be very old, but better safe than
+             sorry */
+        }
+    }
+
+    return sinon;
+}(typeof formatio == "object" && formatio));
+
+/* @depend ../sinon.js */
+/*jslint eqeqeq: false, onevar: false, plusplus: false*/
+/*global module, require, sinon*/
+/**
+ * Match functions
+ *
+ * @author Maximilian Antoni (mail@maxantoni.de)
+ * @license BSD
+ *
+ * Copyright (c) 2012 Maximilian Antoni
+ */
+
+(function (sinon) {
+    var commonJSModule = typeof module !== 'undefined' && module.exports;
+
+    if (!sinon && commonJSModule) {
+        sinon = require("../sinon");
+    }
+
+    if (!sinon) {
+        return;
+    }
+
+    function assertType(value, type, name) {
+        var actual = sinon.typeOf(value);
+        if (actual !== type) {
+            throw new TypeError("Expected type of " + name + " to be " +
+                type + ", but was " + actual);
+        }
+    }
+
+    var matcher = {
+        toString: function () {
+            return this.message;
+        }
+    };
+
+    function isMatcher(object) {
+        return matcher.isPrototypeOf(object);
+    }
+
+    function matchObject(expectation, actual) {
+        if (actual === null || actual === undefined) {
+            return false;
+        }
+        for (var key in expectation) {
+            if (expectation.hasOwnProperty(key)) {
+                var exp = expectation[key];
+                var act = actual[key];
+                if (match.isMatcher(exp)) {
+                    if (!exp.test(act)) {
+                        return false;
+                    }
+                } else if (sinon.typeOf(exp) === "object") {
+                    if (!matchObject(exp, act)) {
+                        return false;
+                    }
+                } else if (!sinon.deepEqual(exp, act)) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    matcher.or = function (m2) {
+        if (!arguments.length) {
+            throw new TypeError("Matcher expected");
+        } else if (!isMatcher(m2)) {
+            m2 = match(m2);
+        }
+        var m1 = this;
+        var or = sinon.create(matcher);
+        or.test = function (actual) {
+            return m1.test(actual) || m2.test(actual);
+        };
+        or.message = m1.message + ".or(" + m2.message + ")";
+        return or;
+    };
+
+    matcher.and = function (m2) {
+        if (!arguments.length) {
+            throw new TypeError("Matcher expected");
+        } else if (!isMatcher(m2)) {
+            m2 = match(m2);
+        }
+        var m1 = this;
+        var and = sinon.create(matcher);
+        and.test = function (actual) {
+            return m1.test(actual) && m2.test(actual);
+        };
+        and.message = m1.message + ".and(" + m2.message + ")";
+        return and;
+    };
+
+    var match = function (expectation, message) {
+        var m = sinon.create(matcher);
+        var type = sinon.typeOf(expectation);
+        switch (type) {
+        case "object":
+            if (typeof expectation.test === "function") {
+                m.test = function (actual) {
+                    return expectation.test(actual) === true;
+                };
+                m.message = "match(" + sinon.functionName(expectation.test) + ")";
+                return m;
+            }
+            var str = [];
+            for (var key in expectation) {
+                if (expectation.hasOwnProperty(key)) {
+                    str.push(key + ": " + expectation[key]);
+                }
+            }
+            m.test = function (actual) {
+                return matchObject(expectation, actual);
+            };
+            m.message = "match(" + str.join(", ") + ")";
+            break;
+        case "number":
+            m.test = function (actual) {
+                return expectation == actual;
+            };
+            break;
+        case "string":
+            m.test = function (actual) {
+                if (typeof actual !== "string") {
+                    return false;
+                }
+                return actual.indexOf(expectation) !== -1;
+            };
+            m.message = "match(\"" + expectation + "\")";
+            break;
+        case "regexp":
+            m.test = function (actual) {
+                if (typeof actual !== "string") {
+                    return false;
+                }
+                return expectation.test(actual);
+            };
+            break;
+        case "function":
+            m.test = expectation;
+            if (message) {
+                m.message = message;
+            } else {
+                m.message = "match(" + sinon.functionName(expectation) + ")";
+            }
+            break;
+        default:
+            m.test = function (actual) {
+              return sinon.deepEqual(expectation, actual);
+            };
+        }
+        if (!m.message) {
+            m.message = "match(" + expectation + ")";
+        }
+        return m;
+    };
+
+    match.isMatcher = isMatcher;
+
+    match.any = match(function () {
+        return true;
+    }, "any");
+
+    match.defined = match(function (actual) {
+        return actual !== null && actual !== undefined;
+    }, "defined");
+
+    match.truthy = match(function (actual) {
+        return !!actual;
+    }, "truthy");
+
+    match.falsy = match(function (actual) {
+        return !actual;
+    }, "falsy");
+
+    match.same = function (expectation) {
+        return match(function (actual) {
+            return expectation === actual;
+        }, "same(" + expectation + ")");
+    };
+
+    match.typeOf = function (type) {
+        assertType(type, "string", "type");
+        return match(function (actual) {
+            return sinon.typeOf(actual) === type;
+        }, "typeOf(\"" + type + "\")");
+    };
+
+    match.instanceOf = function (type) {
+        assertType(type, "function", "type");
+        return match(function (actual) {
+            return actual instanceof type;
+        }, "instanceOf(" + sinon.functionName(type) + ")");
+    };
+
+    function createPropertyMatcher(propertyTest, messagePrefix) {
+        return function (property, value) {
+            assertType(property, "string", "property");
+            var onlyProperty = arguments.length === 1;
+            var message = messagePrefix + "(\"" + property + "\"";
+            if (!onlyProperty) {
+                message += ", " + value;
+            }
+            message += ")";
+            return match(function (actual) {
+                if (actual === undefined || actual === null ||
+                        !propertyTest(actual, property)) {
+                    return false;
+                }
+                return onlyProperty || sinon.deepEqual(value, actual[property]);
+            }, message);
+        };
+    }
+
+    match.has = createPropertyMatcher(function (actual, property) {
+        if (typeof actual === "object") {
+            return property in actual;
+        }
+        return actual[property] !== undefined;
+    }, "has");
+
+    match.hasOwn = createPropertyMatcher(function (actual, property) {
+        return actual.hasOwnProperty(property);
+    }, "hasOwn");
+
+    match.bool = match.typeOf("boolean");
+    match.number = match.typeOf("number");
+    match.string = match.typeOf("string");
+    match.object = match.typeOf("object");
+    match.func = match.typeOf("function");
+    match.array = match.typeOf("array");
+    match.regexp = match.typeOf("regexp");
+    match.date = match.typeOf("date");
+
+    if (commonJSModule) {
+        module.exports = match;
+    } else {
+        sinon.match = match;
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+  * @depend ../sinon.js
+  * @depend match.js
+  */
+/*jslint eqeqeq: false, onevar: false, plusplus: false*/
+/*global module, require, sinon*/
+/**
+  * Spy calls
+  *
+  * @author Christian Johansen (christian@cjohansen.no)
+  * @author Maximilian Antoni (mail@maxantoni.de)
+  * @license BSD
+  *
+  * Copyright (c) 2010-2013 Christian Johansen
+  * Copyright (c) 2013 Maximilian Antoni
+  */
+
+(function (sinon) {
+    var commonJSModule = typeof module !== 'undefined' && module.exports;
+    if (!sinon && commonJSModule) {
+        sinon = require("../sinon");
+    }
+
+    if (!sinon) {
+        return;
+    }
+
+    function throwYieldError(proxy, text, args) {
+        var msg = sinon.functionName(proxy) + text;
+        if (args.length) {
+            msg += " Received [" + slice.call(args).join(", ") + "]";
+        }
+        throw new Error(msg);
+    }
+
+    var slice = Array.prototype.slice;
+
+    var callProto = {
+        calledOn: function calledOn(thisValue) {
+            if (sinon.match && sinon.match.isMatcher(thisValue)) {
+                return thisValue.test(this.thisValue);
+            }
+            return this.thisValue === thisValue;
+        },
+
+        calledWith: function calledWith() {
+            for (var i = 0, l = arguments.length; i < l; i += 1) {
+                if (!sinon.deepEqual(arguments[i], this.args[i])) {
+                    return false;
+                }
+            }
+
+            return true;
+        },
+
+        calledWithMatch: function calledWithMatch() {
+            for (var i = 0, l = arguments.length; i < l; i += 1) {
+                var actual = this.args[i];
+                var expectation = arguments[i];
+                if (!sinon.match || !sinon.match(expectation).test(actual)) {
+                    return false;
+                }
+            }
+            return true;
+        },
+
+        calledWithExactly: function calledWithExactly() {
+            return arguments.length == this.args.length &&
+                this.calledWith.apply(this, arguments);
+        },
+
+        notCalledWith: function notCalledWith() {
+            return !this.calledWith.apply(this, arguments);
+        },
+
+        notCalledWithMatch: function notCalledWithMatch() {
+            return !this.calledWithMatch.apply(this, arguments);
+        },
+
+        returned: function returned(value) {
+            return sinon.deepEqual(value, this.returnValue);
+        },
+
+        threw: function threw(error) {
+            if (typeof error === "undefined" || !this.exception) {
+                return !!this.exception;
+            }
+
+            return this.exception === error || this.exception.name === error;
+        },
+
+        calledWithNew: function calledWithNew() {
+            return this.proxy.prototype && this.thisValue instanceof this.proxy;
+        },
+
+        calledBefore: function (other) {
+            return this.callId < other.callId;
+        },
+
+        calledAfter: function (other) {
+            return this.callId > other.callId;
+        },
+
+        callArg: function (pos) {
+            this.args[pos]();
+        },
+
+        callArgOn: function (pos, thisValue) {
+            this.args[pos].apply(thisValue);
+        },
+
+        callArgWith: function (pos) {
+            this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1)));
+        },
+
+        callArgOnWith: function (pos, thisValue) {
+            var args = slice.call(arguments, 2);
+            this.args[pos].apply(thisValue, args);
+        },
+
+        "yield": function () {
+            this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0)));
+        },
+
+        yieldOn: function (thisValue) {
+            var args = this.args;
+            for (var i = 0, l = args.length; i < l; ++i) {
+                if (typeof args[i] === "function") {
+                    args[i].apply(thisValue, slice.call(arguments, 1));
+                    return;
+                }
+            }
+            throwYieldError(this.proxy, " cannot yield since no callback was passed.", args);
+        },
+
+        yieldTo: function (prop) {
+            this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1)));
+        },
+
+        yieldToOn: function (prop, thisValue) {
+            var args = this.args;
+            for (var i = 0, l = args.length; i < l; ++i) {
+                if (args[i] && typeof args[i][prop] === "function") {
+                    args[i][prop].apply(thisValue, slice.call(arguments, 2));
+                    return;
+                }
+            }
+            throwYieldError(this.proxy, " cannot yield to '" + prop +
+                "' since no callback was passed.", args);
+        },
+
+        toString: function () {
+            var callStr = this.proxy.toString() + "(";
+            var args = [];
+
+            for (var i = 0, l = this.args.length; i < l; ++i) {
+                args.push(sinon.format(this.args[i]));
+            }
+
+            callStr = callStr + args.join(", ") + ")";
+
+            if (typeof this.returnValue != "undefined") {
+                callStr += " => " + sinon.format(this.returnValue);
+            }
+
+            if (this.exception) {
+                callStr += " !" + this.exception.name;
+
+                if (this.exception.message) {
+                    callStr += "(" + this.exception.message + ")";
+                }
+            }
+
+            return callStr;
+        }
+    };
+
+    callProto.invokeCallback = callProto.yield;
+
+    function createSpyCall(spy, thisValue, args, returnValue, exception, id) {
+        if (typeof id !== "number") {
+            throw new TypeError("Call id is not a number");
+        }
+        var proxyCall = sinon.create(callProto);
+        proxyCall.proxy = spy;
+        proxyCall.thisValue = thisValue;
+        proxyCall.args = args;
+        proxyCall.returnValue = returnValue;
+        proxyCall.exception = exception;
+        proxyCall.callId = id;
+
+        return proxyCall;
+    }
+    createSpyCall.toString = callProto.toString; // used by mocks
+
+    if (commonJSModule) {
+        module.exports = createSpyCall;
+    } else {
+        sinon.spyCall = createSpyCall;
+    }
+}(typeof sinon == "object" && sinon || null));
+
+
+/**
+  * @depend ../sinon.js
+  * @depend call.js
+  */
+/*jslint eqeqeq: false, onevar: false, plusplus: false*/
+/*global module, require, sinon*/
+/**
+  * Spy functions
+  *
+  * @author Christian Johansen (christian@cjohansen.no)
+  * @license BSD
+  *
+  * Copyright (c) 2010-2013 Christian Johansen
+  */
+
+(function (sinon) {
+    var commonJSModule = typeof module !== 'undefined' && module.exports;
+    var push = Array.prototype.push;
+    var slice = Array.prototype.slice;
+    var callId = 0;
+
+    if (!sinon && commonJSModule) {
+        sinon = require("../sinon");
+    }
+
+    if (!sinon) {
+        return;
+    }
+
+    function spy(object, property) {
+        if (!property && typeof object == "function") {
+            return spy.create(object);
+        }
+
+        if (!object && !property) {
+            return spy.create(function () { });
+        }
+
+        var method = object[property];
+        return sinon.wrapMethod(object, property, spy.create(method));
+    }
+
+    function matchingFake(fakes, args, strict) {
+        if (!fakes) {
+            return;
+        }
+
+        for (var i = 0, l = fakes.length; i < l; i++) {
+            if (fakes[i].matches(args, strict)) {
+                return fakes[i];
+            }
+        }
+    }
+
+    function incrementCallCount() {
+        this.called = true;
+        this.callCount += 1;
+        this.notCalled = false;
+        this.calledOnce = this.callCount == 1;
+        this.calledTwice = this.callCount == 2;
+        this.calledThrice = this.callCount == 3;
+    }
+
+    function createCallProperties() {
+        this.firstCall = this.getCall(0);
+        this.secondCall = this.getCall(1);
+        this.thirdCall = this.getCall(2);
+        this.lastCall = this.getCall(this.callCount - 1);
+    }
+
+    var vars = "a,b,c,d,e,f,g,h,i,j,k,l";
+    function createProxy(func) {
+        // Retain the function length:
+        var p;
+        if (func.length) {
+            eval("p = (function proxy(" + vars.substring(0, func.length * 2 - 1) +
+                ") { return p.invoke(func, this, slice.call(arguments)); });");
+        }
+        else {
+            p = function proxy() {
+                return p.invoke(func, this, slice.call(arguments));
+            };
+        }
+        return p;
+    }
+
+    var uuid = 0;
+
+    // Public API
+    var spyApi = {
+        reset: function () {
+            this.called = false;
+            this.notCalled = true;
+            this.calledOnce = false;
+            this.calledTwice = false;
+            this.calledThrice = false;
+            this.callCount = 0;
+            this.firstCall = null;
+            this.secondCall = null;
+            this.thirdCall = null;
+            this.lastCall = null;
+            this.args = [];
+            this.returnValues = [];
+            this.thisValues = [];
+            this.exceptions = [];
+            this.callIds = [];
+            if (this.fakes) {
+                for (var i = 0; i < this.fakes.length; i++) {
+                    this.fakes[i].reset();
+                }
+            }
+        },
+
+        create: function create(func) {
+            var name;
+
+            if (typeof func != "function") {
+                func = function () { };
+            } else {
+                name = sinon.functionName(func);
+            }
+
+            var proxy = createProxy(func);
+
+            sinon.extend(proxy, spy);
+            delete proxy.create;
+            sinon.extend(proxy, func);
+
+            proxy.reset();
+            proxy.prototype = func.prototype;
+            proxy.displayName = name || "spy";
+            proxy.toString = sinon.functionToString;
+            proxy._create = sinon.spy.create;
+            proxy.id = "spy#" + uuid++;
+
+            return proxy;
+        },
+
+        invoke: function invoke(func, thisValue, args) {
+            var matching = matchingFake(this.fakes, args);
+            var exception, returnValue;
+
+            incrementCallCount.call(this);
+            push.call(this.thisValues, thisValue);
+            push.call(this.args, args);
+            push.call(this.callIds, callId++);
+
+            try {
+                if (matching) {
+                    returnValue = matching.invoke(func, thisValue, args);
+                } else {
+                    returnValue = (this.func || func).apply(thisValue, args);
+                }
+
+                var thisCall = this.getCall(this.callCount - 1);
+                if (thisCall.calledWithNew() && typeof returnValue !== 'object') {
+                    returnValue = thisValue;
+                }
+            } catch (e) {
+                exception = e;
+            }
+
+            push.call(this.exceptions, exception);
+            push.call(this.returnValues, returnValue);
+
+            createCallProperties.call(this);
+
+            if (exception !== undefined) {
+                throw exception;
+            }
+
+            return returnValue;
+        },
+
+        getCall: function getCall(i) {
+            if (i < 0 || i >= this.callCount) {
+                return null;
+            }
+
+            return sinon.spyCall(this, this.thisValues[i], this.args[i],
+                                    this.returnValues[i], this.exceptions[i],
+                                    this.callIds[i]);
+        },
+
+        getCalls: function () {
+            var calls = [];
+            var i;
+
+            for (i = 0; i < this.callCount; i++) {
+                calls.push(this.getCall(i));
+            }
+
+            return calls;
+        },
+
+        calledBefore: function calledBefore(spyFn) {
+            if (!this.called) {
+                return false;
+            }
+
+            if (!spyFn.called) {
+                return true;
+            }
+
+            return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1];
+        },
+
+        calledAfter: function calledAfter(spyFn) {
+            if (!this.called || !spyFn.called) {
+                return false;
+            }
+
+            return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1];
+        },
+
+        withArgs: function () {
+            var args = slice.call(arguments);
+
+            if (this.fakes) {
+                var match = matchingFake(this.fakes, args, true);
+
+                if (match) {
+                    return match;
+                }
+            } else {
+                this.fakes = [];
+            }
+
+            var original = this;
+            var fake = this._create();
+            fake.matchingAguments = args;
+            fake.parent = this;
+            push.call(this.fakes, fake);
+
+            fake.withArgs = function () {
+                return original.withArgs.apply(original, arguments);
+            };
+
+            for (var i = 0; i < this.args.length; i++) {
+                if (fake.matches(this.args[i])) {
+                    incrementCallCount.call(fake);
+                    push.call(fake.thisValues, this.thisValues[i]);
+                    push.call(fake.args, this.args[i]);
+                    push.call(fake.returnValues, this.returnValues[i]);
+                    push.call(fake.exceptions, this.exceptions[i]);
+                    push.call(fake.callIds, this.callIds[i]);
+                }
+            }
+            createCallProperties.call(fake);
+
+            return fake;
+        },
+
+        matches: function (args, strict) {
+            var margs = this.matchingAguments;
+
+            if (margs.length <= args.length &&
+                sinon.deepEqual(margs, args.slice(0, margs.length))) {
+                return !strict || margs.length == args.length;
+            }
+        },
+
+        printf: function (format) {
+            var spy = this;
+            var args = slice.call(arguments, 1);
+            var formatter;
+
+            return (format || "").replace(/%(.)/g, function (match, specifyer) {
+                formatter = spyApi.formatters[specifyer];
+
+                if (typeof formatter == "function") {
+                    return formatter.call(null, spy, args);
+                } else if (!isNaN(parseInt(specifyer, 10))) {
+                    return sinon.format(args[specifyer - 1]);
+                }
+
+                return "%" + specifyer;
+            });
+        }
+    };
+
+    function delegateToCalls(method, matchAny, actual, notCalled) {
+        spyApi[method] = function () {
+            if (!this.called) {
+                if (notCalled) {
+                    return notCalled.apply(this, arguments);
+                }
+                return false;
+            }
+
+            var currentCall;
+            var matches = 0;
+
+            for (var i = 0, l = this.callCount; i < l; i += 1) {
+                currentCall = this.getCall(i);
+
+                if (currentCall[actual || method].apply(currentCall, arguments)) {
+                    matches += 1;
+
+                    if (matchAny) {
+                        return true;
+                    }
+                }
+            }
+
+            return matches === this.callCount;
+        };
+    }
+
+    delegateToCalls("calledOn", true);
+    delegateToCalls("alwaysCalledOn", false, "calledOn");
+    delegateToCalls("calledWith", true);
+    delegateToCalls("calledWithMatch", true);
+    delegateToCalls("alwaysCalledWith", false, "calledWith");
+    delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch");
+    delegateToCalls("calledWithExactly", true);
+    delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly");
+    delegateToCalls("neverCalledWith", false, "notCalledWith",
+        function () { return true; });
+    delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch",
+        function () { return true; });
+    delegateToCalls("threw", true);
+    delegateToCalls("alwaysThrew", false, "threw");
+    delegateToCalls("returned", true);
+    delegateToCalls("alwaysReturned", false, "returned");
+    delegateToCalls("calledWithNew", true);
+    delegateToCalls("alwaysCalledWithNew", false, "calledWithNew");
+    delegateToCalls("callArg", false, "callArgWith", function () {
+        throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
+    });
+    spyApi.callArgWith = spyApi.callArg;
+    delegateToCalls("callArgOn", false, "callArgOnWith", function () {
+        throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
+    });
+    spyApi.callArgOnWith = spyApi.callArgOn;
+    delegateToCalls("yield", false, "yield", function () {
+        throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
+    });
+    // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode.
+    spyApi.invokeCallback = spyApi.yield;
+    delegateToCalls("yieldOn", false, "yieldOn", function () {
+        throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
+    });
+    delegateToCalls("yieldTo", false, "yieldTo", function (property) {
+        throw new Error(this.toString() + " cannot yield to '" + property +
+            "' since it was not yet invoked.");
+    });
+    delegateToCalls("yieldToOn", false, "yieldToOn", function (property) {
+        throw new Error(this.toString() + " cannot yield to '" + property +
+            "' since it was not yet invoked.");
+    });
+
+    spyApi.formatters = {
+        "c": function (spy) {
+            return sinon.timesInWords(spy.callCount);
+        },
+
+        "n": function (spy) {
+            return spy.toString();
+        },
+
+        "C": function (spy) {
+            var calls = [];
+
+            for (var i = 0, l = spy.callCount; i < l; ++i) {
+                var stringifiedCall = "    " + spy.getCall(i).toString();
+                if (/\n/.test(calls[i - 1])) {
+                    stringifiedCall = "\n" + stringifiedCall;
+                }
+                push.call(calls, stringifiedCall);
+            }
+
+            return calls.length > 0 ? "\n" + calls.join("\n") : "";
+        },
+
+        "t": function (spy) {
+            var objects = [];
+
+            for (var i = 0, l = spy.callCount; i < l; ++i) {
+                push.call(objects, sinon.format(spy.thisValues[i]));
+            }
+
+            return objects.join(", ");
+        },
+
+        "*": function (spy, args) {
+            var formatted = [];
+
+            for (var i = 0, l = args.length; i < l; ++i) {
+                push.call(formatted, sinon.format(args[i]));
+            }
+
+            return formatted.join(", ");
+        }
+    };
+
+    sinon.extend(spy, spyApi);
+
+    spy.spyCall = sinon.spyCall;
+
+    if (commonJSModule) {
+        module.exports = spy;
+    } else {
+        sinon.spy = spy;
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend ../sinon.js
+ */
+/*jslint eqeqeq: false, onevar: false*/
+/*global module, require, sinon, process, setImmediate, setTimeout*/
+/**
+ * Stub behavior
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @author Tim Fischbach (mail@timfischbach.de)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+    var commonJSModule = typeof module !== 'undefined' && module.exports;
+
+    if (!sinon && commonJSModule) {
+        sinon = require("../sinon");
+    }
+
+    if (!sinon) {
+        return;
+    }
+
+    var slice = Array.prototype.slice;
+    var join = Array.prototype.join;
+    var proto;
+
+    var nextTick = (function () {
+        if (typeof process === "object" && typeof process.nextTick === "function") {
+            return process.nextTick;
+        } else if (typeof setImmediate === "function") {
+            return setImmediate;
+        } else {
+            return function (callback) {
+                setTimeout(callback, 0);
+            };
+        }
+    })();
+
+    function throwsException(error, message) {
+        if (typeof error == "string") {
+            this.exception = new Error(message || "");
+            this.exception.name = error;
+        } else if (!error) {
+            this.exception = new Error("Error");
+        } else {
+            this.exception = error;
+        }
+
+        return this;
+    }
+
+    function getCallback(behavior, args) {
+        var callArgAt = behavior.callArgAt;
+
+        if (callArgAt < 0) {
+            var callArgProp = behavior.callArgProp;
+
+            for (var i = 0, l = args.length; i < l; ++i) {
+                if (!callArgProp && typeof args[i] == "function") {
+                    return args[i];
+                }
+
+                if (callArgProp && args[i] &&
+                    typeof args[i][callArgProp] == "function") {
+                    return args[i][callArgProp];
+                }
+            }
+
+            return null;
+        }
+
+        return args[callArgAt];
+    }
+
+    function getCallbackError(behavior, func, args) {
+        if (behavior.callArgAt < 0) {
+            var msg;
+
+            if (behavior.callArgProp) {
+                msg = sinon.functionName(behavior.stub) +
+                    " expected to yield to '" + behavior.callArgProp +
+                    "', but no object with such a property was passed.";
+            } else {
+                msg = sinon.functionName(behavior.stub) +
+                    " expected to yield, but no callback was passed.";
+            }
+
+            if (args.length > 0) {
+                msg += " Received [" + join.call(args, ", ") + "]";
+            }
+
+            return msg;
+        }
+
+        return "argument at index " + behavior.callArgAt + " is not a function: " + func;
+    }
+
+    function callCallback(behavior, args) {
+        if (typeof behavior.callArgAt == "number") {
+            var func = getCallback(behavior, args);
+
+            if (typeof func != "function") {
+                throw new TypeError(getCallbackError(behavior, func, args));
+            }
+
+            if (behavior.callbackAsync) {
+                nextTick(function() {
+                    func.apply(behavior.callbackContext, behavior.callbackArguments);
+                });
+            } else {
+                func.apply(behavior.callbackContext, behavior.callbackArguments);
+            }
+        }
+    }
+
+    proto = {
+        create: function(stub) {
+            var behavior = sinon.extend({}, sinon.behavior);
+            delete behavior.create;
+            behavior.stub = stub;
+
+            return behavior;
+        },
+
+        isPresent: function() {
+            return (typeof this.callArgAt == 'number' ||
+                    this.exception ||
+                    typeof this.returnArgAt == 'number' ||
+                    this.returnThis ||
+                    this.returnValueDefined);
+        },
+
+        invoke: function(context, args) {
+            callCallback(this, args);
+
+            if (this.exception) {
+                throw this.exception;
+            } else if (typeof this.returnArgAt == 'number') {
+                return args[this.returnArgAt];
+            } else if (this.returnThis) {
+                return context;
+            }
+
+            return this.returnValue;
+        },
+
+        onCall: function(index) {
+            return this.stub.onCall(index);
+        },
+
+        onFirstCall: function() {
+            return this.stub.onFirstCall();
+        },
+
+        onSecondCall: function() {
+            return this.stub.onSecondCall();
+        },
+
+        onThirdCall: function() {
+            return this.stub.onThirdCall();
+        },
+
+        withArgs: function(/* arguments */) {
+            throw new Error('Defining a stub by invoking "stub.onCall(...).withArgs(...)" is not supported. ' +
+                            'Use "stub.withArgs(...).onCall(...)" to define sequential behavior for calls with certain arguments.');
+        },
+
+        callsArg: function callsArg(pos) {
+            if (typeof pos != "number") {
+                throw new TypeError("argument index is not number");
+            }
+
+            this.callArgAt = pos;
+            this.callbackArguments = [];
+            this.callbackContext = undefined;
+            this.callArgProp = undefined;
+            this.callbackAsync = false;
+
+            return this;
+        },
+
+        callsArgOn: function callsArgOn(pos, context) {
+            if (typeof pos != "number") {
+                throw new TypeError("argument index is not number");
+            }
+            if (typeof context != "object") {
+                throw new TypeError("argument context is not an object");
+            }
+
+            this.callArgAt = pos;
+            this.callbackArguments = [];
+            this.callbackContext = context;
+            this.callArgProp = undefined;
+            this.callbackAsync = false;
+
+            return this;
+        },
+
+        callsArgWith: function callsArgWith(pos) {
+            if (typeof pos != "number") {
+                throw new TypeError("argument index is not number");
+            }
+
+            this.callArgAt = pos;
+            this.callbackArguments = slice.call(arguments, 1);
+            this.callbackContext = undefined;
+            this.callArgProp = undefined;
+            this.callbackAsync = false;
+
+            return this;
+        },
+
+        callsArgOnWith: function callsArgWith(pos, context) {
+            if (typeof pos != "number") {
+                throw new TypeError("argument index is not number");
+            }
+            if (typeof context != "object") {
+                throw new TypeError("argument context is not an object");
+            }
+
+            this.callArgAt = pos;
+            this.callbackArguments = slice.call(arguments, 2);
+            this.callbackContext = context;
+            this.callArgProp = undefined;
+            this.callbackAsync = false;
+
+            return this;
+        },
+
+        yields: function () {
+            this.callArgAt = -1;
+            this.callbackArguments = slice.call(arguments, 0);
+            this.callbackContext = undefined;
+            this.callArgProp = undefined;
+            this.callbackAsync = false;
+
+            return this;
+        },
+
+        yieldsOn: function (context) {
+            if (typeof context != "object") {
+                throw new TypeError("argument context is not an object");
+            }
+
+            this.callArgAt = -1;
+            this.callbackArguments = slice.call(arguments, 1);
+            this.callbackContext = context;
+            this.callArgProp = undefined;
+            this.callbackAsync = false;
+
+            return this;
+        },
+
+        yieldsTo: function (prop) {
+            this.callArgAt = -1;
+            this.callbackArguments = slice.call(arguments, 1);
+            this.callbackContext = undefined;
+            this.callArgProp = prop;
+            this.callbackAsync = false;
+
+            return this;
+        },
+
+        yieldsToOn: function (prop, context) {
+            if (typeof context != "object") {
+                throw new TypeError("argument context is not an object");
+            }
+
+            this.callArgAt = -1;
+            this.callbackArguments = slice.call(arguments, 2);
+            this.callbackContext = context;
+            this.callArgProp = prop;
+            this.callbackAsync = false;
+
+            return this;
+        },
+
+
+        "throws": throwsException,
+        throwsException: throwsException,
+
+        returns: function returns(value) {
+            this.returnValue = value;
+            this.returnValueDefined = true;
+
+            return this;
+        },
+
+        returnsArg: function returnsArg(pos) {
+            if (typeof pos != "number") {
+                throw new TypeError("argument index is not number");
+            }
+
+            this.returnArgAt = pos;
+
+            return this;
+        },
+
+        returnsThis: function returnsThis() {
+            this.returnThis = true;
+
+            return this;
+        }
+    };
+
+    // create asynchronous versions of callsArg* and yields* methods
+    for (var method in proto) {
+        // need to avoid creating anotherasync versions of the newly added async methods
+        if (proto.hasOwnProperty(method) &&
+            method.match(/^(callsArg|yields)/) &&
+            !method.match(/Async/)) {
+            proto[method + 'Async'] = (function (syncFnName) {
+                return function () {
+                    var result = this[syncFnName].apply(this, arguments);
+                    this.callbackAsync = true;
+                    return result;
+                };
+            })(method);
+        }
+    }
+
+    if (commonJSModule) {
+        module.exports = proto;
+    } else {
+        sinon.behavior = proto;
+    }
+}(typeof sinon == "object" && sinon || null));
+/**
+ * @depend ../sinon.js
+ * @depend spy.js
+ * @depend behavior.js
+ */
+/*jslint eqeqeq: false, onevar: false*/
+/*global module, require, sinon*/
+/**
+ * Stub functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+    var commonJSModule = typeof module !== 'undefined' && module.exports;
+
+    if (!sinon && commonJSModule) {
+        sinon = require("../sinon");
+    }
+
+    if (!sinon) {
+        return;
+    }
+
+    function stub(object, property, func) {
+        if (!!func && typeof func != "function") {
+            throw new TypeError("Custom stub should be function");
+        }
+
+        var wrapper;
+
+        if (func) {
+            wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func;
+        } else {
+            wrapper = stub.create();
+        }
+
+        if (!object && typeof property === "undefined") {
+            return sinon.stub.create();
+        }
+
+        if (typeof property === "undefined" && typeof object == "object") {
+            for (var prop in object) {
+                if (typeof object[prop] === "function") {
+                    stub(object, prop);
+                }
+            }
+
+            return object;
+        }
+
+        return sinon.wrapMethod(object, property, wrapper);
+    }
+
+    function getDefaultBehavior(stub) {
+        return stub.defaultBehavior || getParentBehaviour(stub) || sinon.behavior.create(stub);
+    }
+
+    function getParentBehaviour(stub) {
+        return (stub.parent && getCurrentBehavior(stub.parent));
+    }
+
+    function getCurrentBehavior(stub) {
+        var behavior = stub.behaviors[stub.callCount - 1];
+        return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stub);
+    }
+
+    var uuid = 0;
+
+    sinon.extend(stub, (function () {
+        var proto = {
+            create: function create() {
+                var functionStub = function () {
+                    return getCurrentBehavior(functionStub).invoke(this, arguments);
+                };
+
+                functionStub.id = "stub#" + uuid++;
+                var orig = functionStub;
+                functionStub = sinon.spy.create(functionStub);
+                functionStub.func = orig;
+
+                sinon.extend(functionStub, stub);
+                functionStub._create = sinon.stub.create;
+                functionStub.displayName = "stub";
+                functionStub.toString = sinon.functionToString;
+
+                functionStub.defaultBehavior = null;
+                functionStub.behaviors = [];
+
+                return functionStub;
+            },
+
+            resetBehavior: function () {
+                var i;
+
+                this.defaultBehavior = null;
+                this.behaviors = [];
+
+                delete this.returnValue;
+                delete this.returnArgAt;
+                this.returnThis = false;
+
+                if (this.fakes) {
+                    for (i = 0; i < this.fakes.length; i++) {
+                        this.fakes[i].resetBehavior();
+                    }
+                }
+            },
+
+            onCall: function(index) {
+                if (!this.behaviors[index]) {
+                    this.behaviors[index] = sinon.behavior.create(this);
+                }
+
+                return this.behaviors[index];
+            },
+
+            onFirstCall: function() {
+                return this.onCall(0);
+            },
+
+            onSecondCall: function() {
+                return this.onCall(1);
+            },
+
+            onThirdCall: function() {
+                return this.onCall(2);
+            }
+        };
+
+        for (var method in sinon.behavior) {
+            if (sinon.behavior.hasOwnProperty(method) &&
+                !proto.hasOwnProperty(method) &&
+                method != 'create' &&
+                method != 'withArgs' &&
+                method != 'invoke') {
+                proto[method] = (function(behaviorMethod) {
+                    return function() {
+                        this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this);
+                        this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments);
+                        return this;
+                    };
+                }(method));
+            }
+        }
+
+        return proto;
+    }()));
+
+    if (commonJSModule) {
+        module.exports = stub;
+    } else {
+        sinon.stub = stub;
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend ../sinon.js
+ * @depend stub.js
+ */
+/*jslint eqeqeq: false, onevar: false, nomen: false*/
+/*global module, require, sinon*/
+/**
+ * Mock functions.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+    var commonJSModule = typeof module !== 'undefined' && module.exports;
+    var push = [].push;
+    var match;
+
+    if (!sinon && commonJSModule) {
+        sinon = require("../sinon");
+    }
+
+    if (!sinon) {
+        return;
+    }
+
+    match = sinon.match;
+
+    if (!match && commonJSModule) {
+        match = require("./match");
+    }
+
+    function mock(object) {
+        if (!object) {
+            return sinon.expectation.create("Anonymous mock");
+        }
+
+        return mock.create(object);
+    }
+
+    sinon.mock = mock;
+
+    sinon.extend(mock, (function () {
+        function each(collection, callback) {
+            if (!collection) {
+                return;
+            }
+
+            for (var i = 0, l = collection.length; i < l; i += 1) {
+                callback(collection[i]);
+            }
+        }
+
+        return {
+            create: function create(object) {
+                if (!object) {
+                    throw new TypeError("object is null");
+                }
+
+                var mockObject = sinon.extend({}, mock);
+                mockObject.object = object;
+                delete mockObject.create;
+
+                return mockObject;
+            },
+
+            expects: function expects(method) {
+                if (!method) {
+                    throw new TypeError("method is falsy");
+                }
+
+                if (!this.expectations) {
+                    this.expectations = {};
+                    this.proxies = [];
+                }
+
+                if (!this.expectations[method]) {
+                    this.expectations[method] = [];
+                    var mockObject = this;
+
+                    sinon.wrapMethod(this.object, method, function () {
+                        return mockObject.invokeMethod(method, this, arguments);
+                    });
+
+                    push.call(this.proxies, method);
+                }
+
+                var expectation = sinon.expectation.create(method);
+                push.call(this.expectations[method], expectation);
+
+                return expectation;
+            },
+
+            restore: function restore() {
+                var object = this.object;
+
+                each(this.proxies, function (proxy) {
+                    if (typeof object[proxy].restore == "function") {
+                        object[proxy].restore();
+                    }
+                });
+            },
+
+            verify: function verify() {
+                var expectations = this.expectations || {};
+                var messages = [], met = [];
+
+                each(this.proxies, function (proxy) {
+                    each(expectations[proxy], function (expectation) {
+                        if (!expectation.met()) {
+                            push.call(messages, expectation.toString());
+                        } else {
+                            push.call(met, expectation.toString());
+                        }
+                    });
+                });
+
+                this.restore();
+
+                if (messages.length > 0) {
+                    sinon.expectation.fail(messages.concat(met).join("\n"));
+                } else {
+                    sinon.expectation.pass(messages.concat(met).join("\n"));
+                }
+
+                return true;
+            },
+
+            invokeMethod: function invokeMethod(method, thisValue, args) {
+                var expectations = this.expectations && this.expectations[method];
+                var length = expectations && expectations.length || 0, i;
+
+                for (i = 0; i < length; i += 1) {
+                    if (!expectations[i].met() &&
+                        expectations[i].allowsCall(thisValue, args)) {
+                        return expectations[i].apply(thisValue, args);
+                    }
+                }
+
+                var messages = [], available, exhausted = 0;
+
+                for (i = 0; i < length; i += 1) {
+                    if (expectations[i].allowsCall(thisValue, args)) {
+                        available = available || expectations[i];
+                    } else {
+                        exhausted += 1;
+                    }
+                    push.call(messages, "    " + expectations[i].toString());
+                }
+
+                if (exhausted === 0) {
+                    return available.apply(thisValue, args);
+                }
+
+                messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({
+                    proxy: method,
+                    args: args
+                }));
+
+                sinon.expectation.fail(messages.join("\n"));
+            }
+        };
+    }()));
+
+    var times = sinon.timesInWords;
+
+    sinon.expectation = (function () {
+        var slice = Array.prototype.slice;
+        var _invoke = sinon.spy.invoke;
+
+        function callCountInWords(callCount) {
+            if (callCount == 0) {
+                return "never called";
+            } else {
+                return "called " + times(callCount);
+            }
+        }
+
+        function expectedCallCountInWords(expectation) {
+            var min = expectation.minCalls;
+            var max = expectation.maxCalls;
+
+            if (typeof min == "number" && typeof max == "number") {
+                var str = times(min);
+
+                if (min != max) {
+                    str = "at least " + str + " and at most " + times(max);
+                }
+
+                return str;
+            }
+
+            if (typeof min == "number") {
+                return "at least " + times(min);
+            }
+
+            return "at most " + times(max);
+        }
+
+        function receivedMinCalls(expectation) {
+            var hasMinLimit = typeof expectation.minCalls == "number";
+            return !hasMinLimit || expectation.callCount >= expectation.minCalls;
+        }
+
+        function receivedMaxCalls(expectation) {
+            if (typeof expectation.maxCalls != "number") {
+                return false;
+            }
+
+            return expectation.callCount == expectation.maxCalls;
+        }
+
+        function verifyMatcher(possibleMatcher, arg){
+            if (match && match.isMatcher(possibleMatcher)) {
+                return possibleMatcher.test(arg);
+            } else {
+                return true;
+            }
+        }
+
+        return {
+            minCalls: 1,
+            maxCalls: 1,
+
+            create: function create(methodName) {
+                var expectation = sinon.extend(sinon.stub.create(), sinon.expectation);
+                delete expectation.create;
+                expectation.method = methodName;
+
+                return expectation;
+            },
+
+            invoke: function invoke(func, thisValue, args) {
+                this.verifyCallAllowed(thisValue, args);
+
+                return _invoke.apply(this, arguments);
+            },
+
+            atLeast: function atLeast(num) {
+                if (typeof num != "number") {
+                    throw new TypeError("'" + num + "' is not number");
+                }
+
+                if (!this.limitsSet) {
+                    this.maxCalls = null;
+                    this.limitsSet = true;
+                }
+
+                this.minCalls = num;
+
+                return this;
+            },
+
+            atMost: function atMost(num) {
+                if (typeof num != "number") {
+                    throw new TypeError("'" + num + "' is not number");
+                }
+
+                if (!this.limitsSet) {
+                    this.minCalls = null;
+                    this.limitsSet = true;
+                }
+
+                this.maxCalls = num;
+
+                return this;
+            },
+
+            never: function never() {
+                return this.exactly(0);
+            },
+
+            once: function once() {
+                return this.exactly(1);
+            },
+
+            twice: function twice() {
+                return this.exactly(2);
+            },
+
+            thrice: function thrice() {
+                return this.exactly(3);
+            },
+
+            exactly: function exactly(num) {
+                if (typeof num != "number") {
+                    throw new TypeError("'" + num + "' is not a number");
+                }
+
+                this.atLeast(num);
+                return this.atMost(num);
+            },
+
+            met: function met() {
+                return !this.failed && receivedMinCalls(this);
+            },
+
+            verifyCallAllowed: function verifyCallAllowed(thisValue, args) {
+                if (receivedMaxCalls(this)) {
+                    this.failed = true;
+                    sinon.expectation.fail(this.method + " already called " + times(this.maxCalls));
+                }
+
+                if ("expectedThis" in this && this.expectedThis !== thisValue) {
+                    sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " +
+                        this.expectedThis);
+                }
+
+                if (!("expectedArguments" in this)) {
+                    return;
+                }
+
+                if (!args) {
+                    sinon.expectation.fail(this.method + " received no arguments, expected " +
+                        sinon.format(this.expectedArguments));
+                }
+
+                if (args.length < this.expectedArguments.length) {
+                    sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) +
+                        "), expected " + sinon.format(this.expectedArguments));
+                }
+
+                if (this.expectsExactArgCount &&
+                    args.length != this.expectedArguments.length) {
+                    sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) +
+                        "), expected " + sinon.format(this.expectedArguments));
+                }
+
+                for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) {
+
+                    if (!verifyMatcher(this.expectedArguments[i],args[i])) {
+                        sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) +
+                            ", didn't match " + this.expectedArguments.toString());
+                    }
+
+                    if (!sinon.deepEqual(this.expectedArguments[i], args[i])) {
+                        sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) +
+                            ", expected " + sinon.format(this.expectedArguments));
+                    }
+                }
+            },
+
+            allowsCall: function allowsCall(thisValue, args) {
+                if (this.met() && receivedMaxCalls(this)) {
+                    return false;
+                }
+
+                if ("expectedThis" in this && this.expectedThis !== thisValue) {
+                    return false;
+                }
+
+                if (!("expectedArguments" in this)) {
+                    return true;
+                }
+
+                args = args || [];
+
+                if (args.length < this.expectedArguments.length) {
+                    return false;
+                }
+
+                if (this.expectsExactArgCount &&
+                    args.length != this.expectedArguments.length) {
+                    return false;
+                }
+
+                for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) {
+                    if (!verifyMatcher(this.expectedArguments[i],args[i])) {
+                        return false;
+                    }
+
+                    if (!sinon.deepEqual(this.expectedArguments[i], args[i])) {
+                        return false;
+                    }
+                }
+
+                return true;
+            },
+
+            withArgs: function withArgs() {
+                this.expectedArguments = slice.call(arguments);
+                return this;
+            },
+
+            withExactArgs: function withExactArgs() {
+                this.withArgs.apply(this, arguments);
+                this.expectsExactArgCount = true;
+                return this;
+            },
+
+            on: function on(thisValue) {
+                this.expectedThis = thisValue;
+                return this;
+            },
+
+            toString: function () {
+                var args = (this.expectedArguments || []).slice();
+
+                if (!this.expectsExactArgCount) {
+                    push.call(args, "[...]");
+                }
+
+                var callStr = sinon.spyCall.toString.call({
+                    proxy: this.method || "anonymous mock expectation",
+                    args: args
+                });
+
+                var message = callStr.replace(", [...", "[, ...") + " " +
+                    expectedCallCountInWords(this);
+
+                if (this.met()) {
+                    return "Expectation met: " + message;
+                }
+
+                return "Expected " + message + " (" +
+                    callCountInWords(this.callCount) + ")";
+            },
+
+            verify: function verify() {
+                if (!this.met()) {
+                    sinon.expectation.fail(this.toString());
+                } else {
+                    sinon.expectation.pass(this.toString());
+                }
+
+                return true;
+            },
+
+            pass: function(message) {
+              sinon.assert.pass(message);
+            },
+            fail: function (message) {
+                var exception = new Error(message);
+                exception.name = "ExpectationError";
+
+                throw exception;
+            }
+        };
+    }());
+
+    if (commonJSModule) {
+        module.exports = mock;
+    } else {
+        sinon.mock = mock;
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend ../sinon.js
+ * @depend stub.js
+ * @depend mock.js
+ */
+/*jslint eqeqeq: false, onevar: false, forin: true*/
+/*global module, require, sinon*/
+/**
+ * Collections of stubs, spies and mocks.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+    var commonJSModule = typeof module !== 'undefined' && module.exports;
+    var push = [].push;
+    var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+    if (!sinon && commonJSModule) {
+        sinon = require("../sinon");
+    }
+
+    if (!sinon) {
+        return;
+    }
+
+    function getFakes(fakeCollection) {
+        if (!fakeCollection.fakes) {
+            fakeCollection.fakes = [];
+        }
+
+        return fakeCollection.fakes;
+    }
+
+    function each(fakeCollection, method) {
+        var fakes = getFakes(fakeCollection);
+
+        for (var i = 0, l = fakes.length; i < l; i += 1) {
+            if (typeof fakes[i][method] == "function") {
+                fakes[i][method]();
+            }
+        }
+    }
+
+    function compact(fakeCollection) {
+        var fakes = getFakes(fakeCollection);
+        var i = 0;
+        while (i < fakes.length) {
+          fakes.splice(i, 1);
+        }
+    }
+
+    var collection = {
+        verify: function resolve() {
+            each(this, "verify");
+        },
+
+        restore: function restore() {
+            each(this, "restore");
+            compact(this);
+        },
+
+        verifyAndRestore: function verifyAndRestore() {
+            var exception;
+
+            try {
+                this.verify();
+            } catch (e) {
+                exception = e;
+            }
+
+            this.restore();
+
+            if (exception) {
+                throw exception;
+            }
+        },
+
+        add: function add(fake) {
+            push.call(getFakes(this), fake);
+            return fake;
+        },
+
+        spy: function spy() {
+            return this.add(sinon.spy.apply(sinon, arguments));
+        },
+
+        stub: function stub(object, property, value) {
+            if (property) {
+                var original = object[property];
+
+                if (typeof original != "function") {
+                    if (!hasOwnProperty.call(object, property)) {
+                        throw new TypeError("Cannot stub non-existent own property " + property);
+                    }
+
+                    object[property] = value;
+
+                    return this.add({
+                        restore: function () {
+                            object[property] = original;
+                        }
+                    });
+                }
+            }
+            if (!property && !!object && typeof object == "object") {
+                var stubbedObj = sinon.stub.apply(sinon, arguments);
+
+                for (var prop in stubbedObj) {
+                    if (typeof stubbedObj[prop] === "function") {
+                        this.add(stubbedObj[prop]);
+                    }
+                }
+
+                return stubbedObj;
+            }
+
+            return this.add(sinon.stub.apply(sinon, arguments));
+        },
+
+        mock: function mock() {
+            return this.add(sinon.mock.apply(sinon, arguments));
+        },
+
+        inject: function inject(obj) {
+            var col = this;
+
+            obj.spy = function () {
+                return col.spy.apply(col, arguments);
+            };
+
+            obj.stub = function () {
+                return col.stub.apply(col, arguments);
+            };
+
+            obj.mock = function () {
+                return col.mock.apply(col, arguments);
+            };
+
+            return obj;
+        }
+    };
+
+    if (commonJSModule) {
+        module.exports = collection;
+    } else {
+        sinon.collection = collection;
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/
+/*global module, require, window*/
+/**
+ * Fake timer API
+ * setTimeout
+ * setInterval
+ * clearTimeout
+ * clearInterval
+ * tick
+ * reset
+ * Date
+ *
+ * Inspired by jsUnitMockTimeOut from JsUnit
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+if (typeof sinon == "undefined") {
+    var sinon = {};
+}
+
+(function (global) {
+    var id = 1;
+
+    function addTimer(args, recurring) {
+        if (args.length === 0) {
+            throw new Error("Function requires at least 1 parameter");
+        }
+
+        if (typeof args[0] === "undefined") {
+            throw new Error("Callback must be provided to timer calls");
+        }
+
+        var toId = id++;
+        var delay = args[1] || 0;
+
+        if (!this.timeouts) {
+            this.timeouts = {};
+        }
+
+        this.timeouts[toId] = {
+            id: toId,
+            func: args[0],
+            callAt: this.now + delay,
+            invokeArgs: Array.prototype.slice.call(args, 2)
+        };
+
+        if (recurring === true) {
+            this.timeouts[toId].interval = delay;
+        }
+
+        return toId;
+    }
+
+    function parseTime(str) {
+        if (!str) {
+            return 0;
+        }
+
+        var strings = str.split(":");
+        var l = strings.length, i = l;
+        var ms = 0, parsed;
+
+        if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) {
+            throw new Error("tick only understands numbers and 'h:m:s'");
+        }
+
+        while (i--) {
+            parsed = parseInt(strings[i], 10);
+
+            if (parsed >= 60) {
+                throw new Error("Invalid time " + str);
+            }
+
+            ms += parsed * Math.pow(60, (l - i - 1));
+        }
+
+        return ms * 1000;
+    }
+
+    function createObject(object) {
+        var newObject;
+
+        if (Object.create) {
+            newObject = Object.create(object);
+        } else {
+            var F = function () {};
+            F.prototype = object;
+            newObject = new F();
+        }
+
+        newObject.Date.clock = newObject;
+        return newObject;
+    }
+
+    sinon.clock = {
+        now: 0,
+
+        create: function create(now) {
+            var clock = createObject(this);
+
+            if (typeof now == "number") {
+                clock.now = now;
+            }
+
+            if (!!now && typeof now == "object") {
+                throw new TypeError("now should be milliseconds since UNIX epoch");
+            }
+
+            return clock;
+        },
+
+        setTimeout: function setTimeout(callback, timeout) {
+            return addTimer.call(this, arguments, false);
+        },
+
+        clearTimeout: function clearTimeout(timerId) {
+            if (!this.timeouts) {
+                this.timeouts = [];
+            }
+
+            if (timerId in this.timeouts) {
+                delete this.timeouts[timerId];
+            }
+        },
+
+        setInterval: function setInterval(callback, timeout) {
+            return addTimer.call(this, arguments, true);
+        },
+
+        clearInterval: function clearInterval(timerId) {
+            this.clearTimeout(timerId);
+        },
+
+        setImmediate: function setImmediate(callback) {
+            var passThruArgs = Array.prototype.slice.call(arguments, 1);
+
+            return addTimer.call(this, [callback, 0].concat(passThruArgs), false);
+        },
+
+        clearImmediate: function clearImmediate(timerId) {
+            this.clearTimeout(timerId);
+        },
+
+        tick: function tick(ms) {
+            ms = typeof ms == "number" ? ms : parseTime(ms);
+            var tickFrom = this.now, tickTo = this.now + ms, previous = this.now;
+            var timer = this.firstTimerInRange(tickFrom, tickTo);
+
+            var firstException;
+            while (timer && tickFrom <= tickTo) {
+                if (this.timeouts[timer.id]) {
+                    tickFrom = this.now = timer.callAt;
+                    try {
+                      this.callTimer(timer);
+                    } catch (e) {
+                      firstException = firstException || e;
+                    }
+                }
+
+                timer = this.firstTimerInRange(previous, tickTo);
+                previous = tickFrom;
+            }
+
+            this.now = tickTo;
+
+            if (firstException) {
+              throw firstException;
+            }
+
+            return this.now;
+        },
+
+        firstTimerInRange: function (from, to) {
+            var timer, smallest = null, originalTimer;
+
+            for (var id in this.timeouts) {
+                if (this.timeouts.hasOwnProperty(id)) {
+                    if (this.timeouts[id].callAt < from || this.timeouts[id].callAt > to) {
+                        continue;
+                    }
+
+                    if (smallest === null || this.timeouts[id].callAt < smallest) {
+                        originalTimer = this.timeouts[id];
+                        smallest = this.timeouts[id].callAt;
+
+                        timer = {
+                            func: this.timeouts[id].func,
+                            callAt: this.timeouts[id].callAt,
+                            interval: this.timeouts[id].interval,
+                            id: this.timeouts[id].id,
+                            invokeArgs: this.timeouts[id].invokeArgs
+                        };
+                    }
+                }
+            }
+
+            return timer || null;
+        },
+
+        callTimer: function (timer) {
+            if (typeof timer.interval == "number") {
+                this.timeouts[timer.id].callAt += timer.interval;
+            } else {
+                delete this.timeouts[timer.id];
+            }
+
+            try {
+                if (typeof timer.func == "function") {
+                    timer.func.apply(null, timer.invokeArgs);
+                } else {
+                    eval(timer.func);
+                }
+            } catch (e) {
+              var exception = e;
+            }
+
+            if (!this.timeouts[timer.id]) {
+                if (exception) {
+                  throw exception;
+                }
+                return;
+            }
+
+            if (exception) {
+              throw exception;
+            }
+        },
+
+        reset: function reset() {
+            this.timeouts = {};
+        },
+
+        Date: (function () {
+            var NativeDate = Date;
+
+            function ClockDate(year, month, date, hour, minute, second, ms) {
+                // Defensive and verbose to avoid potential harm in passing
+                // explicit undefined when user does not pass argument
+                switch (arguments.length) {
+                case 0:
+                    return new NativeDate(ClockDate.clock.now);
+                case 1:
+                    return new NativeDate(year);
+                case 2:
+                    return new NativeDate(year, month);
+                case 3:
+                    return new NativeDate(year, month, date);
+                case 4:
+                    return new NativeDate(year, month, date, hour);
+                case 5:
+                    return new NativeDate(year, month, date, hour, minute);
+                case 6:
+                    return new NativeDate(year, month, date, hour, minute, second);
+                default:
+                    return new NativeDate(year, month, date, hour, minute, second, ms);
+                }
+            }
+
+            return mirrorDateProperties(ClockDate, NativeDate);
+        }())
+    };
+
+    function mirrorDateProperties(target, source) {
+        if (source.now) {
+            target.now = function now() {
+                return target.clock.now;
+            };
+        } else {
+            delete target.now;
+        }
+
+        if (source.toSource) {
+            target.toSource = function toSource() {
+                return source.toSource();
+            };
+        } else {
+            delete target.toSource;
+        }
+
+        target.toString = function toString() {
+            return source.toString();
+        };
+
+        target.prototype = source.prototype;
+        target.parse = source.parse;
+        target.UTC = source.UTC;
+        target.prototype.toUTCString = source.prototype.toUTCString;
+
+        for (var prop in source) {
+            if (source.hasOwnProperty(prop)) {
+                target[prop] = source[prop];
+            }
+        }
+
+        return target;
+    }
+
+    var methods = ["Date", "setTimeout", "setInterval",
+                   "clearTimeout", "clearInterval"];
+
+    if (typeof global.setImmediate !== "undefined") {
+        methods.push("setImmediate");
+    }
+
+    if (typeof global.clearImmediate !== "undefined") {
+        methods.push("clearImmediate");
+    }
+
+    function restore() {
+        var method;
+
+        for (var i = 0, l = this.methods.length; i < l; i++) {
+            method = this.methods[i];
+
+            if (global[method].hadOwnProperty) {
+                global[method] = this["_" + method];
+            } else {
+                try {
+                    delete global[method];
+                } catch (e) {}
+            }
+        }
+
+        // Prevent multiple executions which will completely remove these props
+        this.methods = [];
+    }
+
+    function stubGlobal(method, clock) {
+        clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(global, method);
+        clock["_" + method] = global[method];
+
+        if (method == "Date") {
+            var date = mirrorDateProperties(clock[method], global[method]);
+            global[method] = date;
+        } else {
+            global[method] = function () {
+                return clock[method].apply(clock, arguments);
+            };
+
+            for (var prop in clock[method]) {
+                if (clock[method].hasOwnProperty(prop)) {
+                    global[method][prop] = clock[method][prop];
+                }
+            }
+        }
+
+        global[method].clock = clock;
+    }
+
+    sinon.useFakeTimers = function useFakeTimers(now) {
+        var clock = sinon.clock.create(now);
+        clock.restore = restore;
+        clock.methods = Array.prototype.slice.call(arguments,
+                                                   typeof now == "number" ? 1 : 0);
+
+        if (clock.methods.length === 0) {
+            clock.methods = methods;
+        }
+
+        for (var i = 0, l = clock.methods.length; i < l; i++) {
+            stubGlobal(clock.methods[i], clock);
+        }
+
+        return clock;
+    };
+}(typeof global != "undefined" && typeof global !== "function" ? global : this));
+
+sinon.timers = {
+    setTimeout: setTimeout,
+    clearTimeout: clearTimeout,
+    setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined),
+    clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate: undefined),
+    setInterval: setInterval,
+    clearInterval: clearInterval,
+    Date: Date
+};
+
+if (typeof module !== 'undefined' && module.exports) {
+    module.exports = sinon;
+}
+
+/*jslint eqeqeq: false, onevar: false*/
+/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/
+/**
+ * Minimal Event interface implementation
+ *
+ * Original implementation by Sven Fuchs: https://gist.github.com/995028
+ * Modifications and tests by Christian Johansen.
+ *
+ * @author Sven Fuchs (svenfuchs@artweb-design.de)
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2011 Sven Fuchs, Christian Johansen
+ */
+
+if (typeof sinon == "undefined") {
+    this.sinon = {};
+}
+
+(function () {
+    var push = [].push;
+
+    sinon.Event = function Event(type, bubbles, cancelable, target) {
+        this.initEvent(type, bubbles, cancelable, target);
+    };
+
+    sinon.Event.prototype = {
+        initEvent: function(type, bubbles, cancelable, target) {
+            this.type = type;
+            this.bubbles = bubbles;
+            this.cancelable = cancelable;
+            this.target = target;
+        },
+
+        stopPropagation: function () {},
+
+        preventDefault: function () {
+            this.defaultPrevented = true;
+        }
+    };
+
+    sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) {
+        this.initEvent(type, false, false, target);
+        this.loaded = progressEventRaw.loaded || null;
+        this.total = progressEventRaw.total || null;
+    };
+
+    sinon.ProgressEvent.prototype = new sinon.Event();
+
+    sinon.ProgressEvent.prototype.constructor =  sinon.ProgressEvent;
+
+    sinon.CustomEvent = function CustomEvent(type, customData, target) {
+        this.initEvent(type, false, false, target);
+        this.detail = customData.detail || null;
+    };
+
+    sinon.CustomEvent.prototype = new sinon.Event();
+
+    sinon.CustomEvent.prototype.constructor =  sinon.CustomEvent;
+
+    sinon.EventTarget = {
+        addEventListener: function addEventListener(event, listener) {
+            this.eventListeners = this.eventListeners || {};
+            this.eventListeners[event] = this.eventListeners[event] || [];
+            push.call(this.eventListeners[event], listener);
+        },
+
+        removeEventListener: function removeEventListener(event, listener) {
+            var listeners = this.eventListeners && this.eventListeners[event] || [];
+
+            for (var i = 0, l = listeners.length; i < l; ++i) {
+                if (listeners[i] == listener) {
+                    return listeners.splice(i, 1);
+                }
+            }
+        },
+
+        dispatchEvent: function dispatchEvent(event) {
+            var type = event.type;
+            var listeners = this.eventListeners && this.eventListeners[type] || [];
+
+            for (var i = 0; i < listeners.length; i++) {
+                if (typeof listeners[i] == "function") {
+                    listeners[i].call(this, event);
+                } else {
+                    listeners[i].handleEvent(event);
+                }
+            }
+
+            return !!event.defaultPrevented;
+        }
+    };
+}());
+
+/**
+ * @depend ../../sinon.js
+ * @depend event.js
+ */
+/*jslint eqeqeq: false, onevar: false*/
+/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/
+/**
+ * Fake XMLHttpRequest object
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+// wrapper for global
+(function(global) {
+    if (typeof sinon === "undefined") {
+        global.sinon = {};
+    }
+
+    var supportsProgress = typeof ProgressEvent !== "undefined";
+    var supportsCustomEvent = typeof CustomEvent !== "undefined";
+    sinon.xhr = { XMLHttpRequest: global.XMLHttpRequest };
+    var xhr = sinon.xhr;
+    xhr.GlobalXMLHttpRequest = global.XMLHttpRequest;
+    xhr.GlobalActiveXObject = global.ActiveXObject;
+    xhr.supportsActiveX = typeof xhr.GlobalActiveXObject != "undefined";
+    xhr.supportsXHR = typeof xhr.GlobalXMLHttpRequest != "undefined";
+    xhr.workingXHR = xhr.supportsXHR ? xhr.GlobalXMLHttpRequest : xhr.supportsActiveX
+                                     ? function() { return new xhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") } : false;
+    xhr.supportsCORS = 'withCredentials' in (new sinon.xhr.GlobalXMLHttpRequest());
+
+    /*jsl:ignore*/
+    var unsafeHeaders = {
+        "Accept-Charset": true,
+        "Accept-Encoding": true,
+        "Connection": true,
+        "Content-Length": true,
+        "Cookie": true,
+        "Cookie2": true,
+        "Content-Transfer-Encoding": true,
+        "Date": true,
+        "Expect": true,
+        "Host": true,
+        "Keep-Alive": true,
+        "Referer": true,
+        "TE": true,
+        "Trailer": true,
+        "Transfer-Encoding": true,
+        "Upgrade": true,
+        "User-Agent": true,
+        "Via": true
+    };
+    /*jsl:end*/
+
+    function FakeXMLHttpRequest() {
+        this.readyState = FakeXMLHttpRequest.UNSENT;
+        this.requestHeaders = {};
+        this.requestBody = null;
+        this.status = 0;
+        this.statusText = "";
+        this.upload = new UploadProgress();
+        if (sinon.xhr.supportsCORS) {
+            this.withCredentials = false;
+        }
+
+
+        var xhr = this;
+        var events = ["loadstart", "load", "abort", "loadend"];
+
+        function addEventListener(eventName) {
+            xhr.addEventListener(eventName, function (event) {
+                var listener = xhr["on" + eventName];
+
+                if (listener && typeof listener == "function") {
+                    listener.call(this, event);
+                }
+            });
+        }
+
+        for (var i = events.length - 1; i >= 0; i--) {
+            addEventListener(events[i]);
+        }
+
+        if (typeof FakeXMLHttpRequest.onCreate == "function") {
+            FakeXMLHttpRequest.onCreate(this);
+        }
+    }
+
+    // An upload object is created for each
+    // FakeXMLHttpRequest and allows upload
+    // events to be simulated using uploadProgress
+    // and uploadError.
+    function UploadProgress() {
+        this.eventListeners = {
+            "progress": [],
+            "load": [],
+            "abort": [],
+            "error": []
+        }
+    }
+
+    UploadProgress.prototype.addEventListener = function(event, listener) {
+        this.eventListeners[event].push(listener);
+    };
+
+    UploadProgress.prototype.removeEventListener = function(event, listener) {
+        var listeners = this.eventListeners[event] || [];
+
+        for (var i = 0, l = listeners.length; i < l; ++i) {
+            if (listeners[i] == listener) {
+                return listeners.splice(i, 1);
+            }
+        }
+    };
+
+    UploadProgress.prototype.dispatchEvent = function(event) {
+        var listeners = this.eventListeners[event.type] || [];
+
+        for (var i = 0, listener; (listener = listeners[i]) != null; i++) {
+            listener(event);
+        }
+    };
+
+    function verifyState(xhr) {
+        if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {
+            throw new Error("INVALID_STATE_ERR");
+        }
+
+        if (xhr.sendFlag) {
+            throw new Error("INVALID_STATE_ERR");
+        }
+    }
+
+    // filtering to enable a white-list version of Sinon FakeXhr,
+    // where whitelisted requests are passed through to real XHR
+    function each(collection, callback) {
+        if (!collection) return;
+        for (var i = 0, l = collection.length; i < l; i += 1) {
+            callback(collection[i]);
+        }
+    }
+    function some(collection, callback) {
+        for (var index = 0; index < collection.length; index++) {
+            if(callback(collection[index]) === true) return true;
+        }
+        return false;
+    }
+    // largest arity in XHR is 5 - XHR#open
+    var apply = function(obj,method,args) {
+        switch(args.length) {
+        case 0: return obj[method]();
+        case 1: return obj[method](args[0]);
+        case 2: return obj[method](args[0],args[1]);
+        case 3: return obj[method](args[0],args[1],args[2]);
+        case 4: return obj[method](args[0],args[1],args[2],args[3]);
+        case 5: return obj[method](args[0],args[1],args[2],args[3],args[4]);
+        }
+    };
+
+    FakeXMLHttpRequest.filters = [];
+    FakeXMLHttpRequest.addFilter = function(fn) {
+        this.filters.push(fn)
+    };
+    var IE6Re = /MSIE 6/;
+    FakeXMLHttpRequest.defake = function(fakeXhr,xhrArgs) {
+        var xhr = new sinon.xhr.workingXHR();
+        each(["open","setRequestHeader","send","abort","getResponseHeader",
+              "getAllResponseHeaders","addEventListener","overrideMimeType","removeEventListener"],
+             function(method) {
+                 fakeXhr[method] = function() {
+                   return apply(xhr,method,arguments);
+                 };
+             });
+
+        var copyAttrs = function(args) {
+            each(args, function(attr) {
+              try {
+                fakeXhr[attr] = xhr[attr]
+              } catch(e) {
+                if(!IE6Re.test(navigator.userAgent)) throw e;
+              }
+            });
+        };
+
+        var stateChange = function() {
+            fakeXhr.readyState = xhr.readyState;
+            if(xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) {
+                copyAttrs(["status","statusText"]);
+            }
+            if(xhr.readyState >= FakeXMLHttpRequest.LOADING) {
+                copyAttrs(["responseText"]);
+            }
+            if(xhr.readyState === FakeXMLHttpRequest.DONE) {
+                copyAttrs(["responseXML"]);
+            }
+            if(fakeXhr.onreadystatechange) fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr });
+        };
+        if(xhr.addEventListener) {
+          for(var event in fakeXhr.eventListeners) {
+              if(fakeXhr.eventListeners.hasOwnProperty(event)) {
+                  each(fakeXhr.eventListeners[event],function(handler) {
+                      xhr.addEventListener(event, handler);
+                  });
+              }
+          }
+          xhr.addEventListener("readystatechange",stateChange);
+        } else {
+          xhr.onreadystatechange = stateChange;
+        }
+        apply(xhr,"open",xhrArgs);
+    };
+    FakeXMLHttpRequest.useFilters = false;
+
+    function verifyRequestOpened(xhr) {
+        if (xhr.readyState != FakeXMLHttpRequest.OPENED) {
+            throw new Error("INVALID_STATE_ERR - " + xhr.readyState);
+        }
+    }
+
+    function verifyRequestSent(xhr) {
+        if (xhr.readyState == FakeXMLHttpRequest.DONE) {
+            throw new Error("Request done");
+        }
+    }
+
+    function verifyHeadersReceived(xhr) {
+        if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) {
+            throw new Error("No headers received");
+        }
+    }
+
+    function verifyResponseBodyType(body) {
+        if (typeof body != "string") {
+            var error = new Error("Attempted to respond to fake XMLHttpRequest with " +
+                                 body + ", which is not a string.");
+            error.name = "InvalidBodyException";
+            throw error;
+        }
+    }
+
+    sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, {
+        async: true,
+
+        open: function open(method, url, async, username, password) {
+            this.method = method;
+            this.url = url;
+            this.async = typeof async == "boolean" ? async : true;
+            this.username = username;
+            this.password = password;
+            this.responseText = null;
+            this.responseXML = null;
+            this.requestHeaders = {};
+            this.sendFlag = false;
+            if(sinon.FakeXMLHttpRequest.useFilters === true) {
+                var xhrArgs = arguments;
+                var defake = some(FakeXMLHttpRequest.filters,function(filter) {
+                    return filter.apply(this,xhrArgs)
+                });
+                if (defake) {
+                  return sinon.FakeXMLHttpRequest.defake(this,arguments);
+                }
+            }
+            this.readyStateChange(FakeXMLHttpRequest.OPENED);
+        },
+
+        readyStateChange: function readyStateChange(state) {
+            this.readyState = state;
+
+            if (typeof this.onreadystatechange == "function") {
+                try {
+                    this.onreadystatechange();
+                } catch (e) {
+                    sinon.logError("Fake XHR onreadystatechange handler", e);
+                }
+            }
+
+            this.dispatchEvent(new sinon.Event("readystatechange"));
+
+            switch (this.readyState) {
+                case FakeXMLHttpRequest.DONE:
+                    this.dispatchEvent(new sinon.Event("load", false, false, this));
+                    this.dispatchEvent(new sinon.Event("loadend", false, false, this));
+                    this.upload.dispatchEvent(new sinon.Event("load", false, false, this));
+                    if (supportsProgress) {
+                        this.upload.dispatchEvent(new sinon.ProgressEvent('progress', {loaded: 100, total: 100}));
+                    }
+                    break;
+            }
+        },
+
+        setRequestHeader: function setRequestHeader(header, value) {
+            verifyState(this);
+
+            if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) {
+                throw new Error("Refused to set unsafe header \"" + header + "\"");
+            }
+
+            if (this.requestHeaders[header]) {
+                this.requestHeaders[header] += "," + value;
+            } else {
+                this.requestHeaders[header] = value;
+            }
+        },
+
+        // Helps testing
+        setResponseHeaders: function setResponseHeaders(headers) {
+            verifyRequestOpened(this);
+            this.responseHeaders = {};
+
+            for (var header in headers) {
+                if (headers.hasOwnProperty(header)) {
+                    this.responseHeaders[header] = headers[header];
+                }
+            }
+
+            if (this.async) {
+                this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED);
+            } else {
+                this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED;
+            }
+        },
+
+        // Currently treats ALL data as a DOMString (i.e. no Document)
+        send: function send(data) {
+            verifyState(this);
+
+            if (!/^(get|head)$/i.test(this.method)) {
+                if (this.requestHeaders["Content-Type"]) {
+                    var value = this.requestHeaders["Content-Type"].split(";");
+                    this.requestHeaders["Content-Type"] = value[0] + ";charset=utf-8";
+                } else {
+                    this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
+                }
+
+                this.requestBody = data;
+            }
+
+            this.errorFlag = false;
+            this.sendFlag = this.async;
+            this.readyStateChange(FakeXMLHttpRequest.OPENED);
+
+            if (typeof this.onSend == "function") {
+                this.onSend(this);
+            }
+
+            this.dispatchEvent(new sinon.Event("loadstart", false, false, this));
+        },
+
+        abort: function abort() {
+            this.aborted = true;
+            this.responseText = null;
+            this.errorFlag = true;
+            this.requestHeaders = {};
+
+            if (this.readyState > sinon.FakeXMLHttpRequest.UNSENT && this.sendFlag) {
+                this.readyStateChange(sinon.FakeXMLHttpRequest.DONE);
+                this.sendFlag = false;
+            }
+
+            this.readyState = sinon.FakeXMLHttpRequest.UNSENT;
+
+            this.dispatchEvent(new sinon.Event("abort", false, false, this));
+
+            this.upload.dispatchEvent(new sinon.Event("abort", false, false, this));
+
+            if (typeof this.onerror === "function") {
+                this.onerror();
+            }
+        },
+
+        getResponseHeader: function getResponseHeader(header) {
+            if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
+                return null;
+            }
+
+            if (/^Set-Cookie2?$/i.test(header)) {
+                return null;
+            }
+
+            header = header.toLowerCase();
+
+            for (var h in this.responseHeaders) {
+                if (h.toLowerCase() == header) {
+                    return this.responseHeaders[h];
+                }
+            }
+
+            return null;
+        },
+
+        getAllResponseHeaders: function getAllResponseHeaders() {
+            if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
+                return "";
+            }
+
+            var headers = "";
+
+            for (var header in this.responseHeaders) {
+                if (this.responseHeaders.hasOwnProperty(header) &&
+                    !/^Set-Cookie2?$/i.test(header)) {
+                    headers += header + ": " + this.responseHeaders[header] + "\r\n";
+                }
+            }
+
+            return headers;
+        },
+
+        setResponseBody: function setResponseBody(body) {
+            verifyRequestSent(this);
+            verifyHeadersReceived(this);
+            verifyResponseBodyType(body);
+
+            var chunkSize = this.chunkSize || 10;
+            var index = 0;
+            this.responseText = "";
+
+            do {
+                if (this.async) {
+                    this.readyStateChange(FakeXMLHttpRequest.LOADING);
+                }
+
+                this.responseText += body.substring(index, index + chunkSize);
+                index += chunkSize;
+            } while (index < body.length);
+
+            var type = this.getResponseHeader("Content-Type");
+
+            if (this.responseText &&
+                (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) {
+                try {
+                    this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText);
+                } catch (e) {
+                    // Unable to parse XML - no biggie
+                }
+            }
+
+            if (this.async) {
+                this.readyStateChange(FakeXMLHttpRequest.DONE);
+            } else {
+                this.readyState = FakeXMLHttpRequest.DONE;
+            }
+        },
+
+        respond: function respond(status, headers, body) {
+            this.status = typeof status == "number" ? status : 200;
+            this.statusText = FakeXMLHttpRequest.statusCodes[this.status];
+            this.setResponseHeaders(headers || {});
+            this.setResponseBody(body || "");
+        },
+
+        uploadProgress: function uploadProgress(progressEventRaw) {
+            if (supportsProgress) {
+                this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw));
+            }
+        },
+
+        uploadError: function uploadError(error) {
+            if (supportsCustomEvent) {
+                this.upload.dispatchEvent(new sinon.CustomEvent("error", {"detail": error}));
+            }
+        }
+    });
+
+    sinon.extend(FakeXMLHttpRequest, {
+        UNSENT: 0,
+        OPENED: 1,
+        HEADERS_RECEIVED: 2,
+        LOADING: 3,
+        DONE: 4
+    });
+
+    // Borrowed from JSpec
+    FakeXMLHttpRequest.parseXML = function parseXML(text) {
+        var xmlDoc;
+
+        if (typeof DOMParser != "undefined") {
+            var parser = new DOMParser();
+            xmlDoc = parser.parseFromString(text, "text/xml");
+        } else {
+            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
+            xmlDoc.async = "false";
+            xmlDoc.loadXML(text);
+        }
+
+        return xmlDoc;
+    };
+
+    FakeXMLHttpRequest.statusCodes = {
+        100: "Continue",
+        101: "Switching Protocols",
+        200: "OK",
+        201: "Created",
+        202: "Accepted",
+        203: "Non-Authoritative Information",
+        204: "No Content",
+        205: "Reset Content",
+        206: "Partial Content",
+        300: "Multiple Choice",
+        301: "Moved Permanently",
+        302: "Found",
+        303: "See Other",
+        304: "Not Modified",
+        305: "Use Proxy",
+        307: "Temporary Redirect",
+        400: "Bad Request",
+        401: "Unauthorized",
+        402: "Payment Required",
+        403: "Forbidden",
+        404: "Not Found",
+        405: "Method Not Allowed",
+        406: "Not Acceptable",
+        407: "Proxy Authentication Required",
+        408: "Request Timeout",
+        409: "Conflict",
+        410: "Gone",
+        411: "Length Required",
+        412: "Precondition Failed",
+        413: "Request Entity Too Large",
+        414: "Request-URI Too Long",
+        415: "Unsupported Media Type",
+        416: "Requested Range Not Satisfiable",
+        417: "Expectation Failed",
+        422: "Unprocessable Entity",
+        500: "Internal Server Error",
+        501: "Not Implemented",
+        502: "Bad Gateway",
+        503: "Service Unavailable",
+        504: "Gateway Timeout",
+        505: "HTTP Version Not Supported"
+    };
+
+    sinon.useFakeXMLHttpRequest = function () {
+        sinon.FakeXMLHttpRequest.restore = function restore(keepOnCreate) {
+            if (xhr.supportsXHR) {
+                global.XMLHttpRequest = xhr.GlobalXMLHttpRequest;
+            }
+
+            if (xhr.supportsActiveX) {
+                global.ActiveXObject = xhr.GlobalActiveXObject;
+            }
+
+            delete sinon.FakeXMLHttpRequest.restore;
+
+            if (keepOnCreate !== true) {
+                delete sinon.FakeXMLHttpRequest.onCreate;
+            }
+        };
+        if (xhr.supportsXHR) {
+            global.XMLHttpRequest = sinon.FakeXMLHttpRequest;
+        }
+
+        if (xhr.supportsActiveX) {
+            global.ActiveXObject = function ActiveXObject(objId) {
+                if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) {
+
+                    return new sinon.FakeXMLHttpRequest();
+                }
+
+                return new xhr.GlobalActiveXObject(objId);
+            };
+        }
+
+        return sinon.FakeXMLHttpRequest;
+    };
+
+    sinon.FakeXMLHttpRequest = FakeXMLHttpRequest;
+
+})(typeof global === "object" ? global : this);
+
+if (typeof module !== 'undefined' && module.exports) {
+    module.exports = sinon;
+}
+
+/**
+ * @depend fake_xml_http_request.js
+ */
+/*jslint eqeqeq: false, onevar: false, regexp: false, plusplus: false*/
+/*global module, require, window*/
+/**
+ * The Sinon "server" mimics a web server that receives requests from
+ * sinon.FakeXMLHttpRequest and provides an API to respond to those requests,
+ * both synchronously and asynchronously. To respond synchronuously, canned
+ * answers have to be provided upfront.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+if (typeof sinon == "undefined") {
+    var sinon = {};
+}
+
+sinon.fakeServer = (function () {
+    var push = [].push;
+    function F() {}
+
+    function create(proto) {
+        F.prototype = proto;
+        return new F();
+    }
+
+    function responseArray(handler) {
+        var response = handler;
+
+        if (Object.prototype.toString.call(handler) != "[object Array]") {
+            response = [200, {}, handler];
+        }
+
+        if (typeof response[2] != "string") {
+            throw new TypeError("Fake server response body should be string, but was " +
+                                typeof response[2]);
+        }
+
+        return response;
+    }
+
+    var wloc = typeof window !== "undefined" ? window.location : {};
+    var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host);
+
+    function matchOne(response, reqMethod, reqUrl) {
+        var rmeth = response.method;
+        var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase();
+        var url = response.url;
+        var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl));
+
+        return matchMethod && matchUrl;
+    }
+
+    function match(response, request) {
+        var requestUrl = request.url;
+
+        if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) {
+            requestUrl = requestUrl.replace(rCurrLoc, "");
+        }
+
+        if (matchOne(response, this.getHTTPMethod(request), requestUrl)) {
+            if (typeof response.response == "function") {
+                var ru = response.url;
+                var args = [request].concat(ru && typeof ru.exec == "function" ? ru.exec(requestUrl).slice(1) : []);
+                return response.response.apply(response, args);
+            }
+
+            return true;
+        }
+
+        return false;
+    }
+
+    function log(response, request) {
+        var str;
+
+        str =  "Request:\n"  + sinon.format(request)  + "\n\n";
+        str += "Response:\n" + sinon.format(response) + "\n\n";
+
+        sinon.log(str);
+    }
+
+    return {
+        create: function () {
+            var server = create(this);
+            this.xhr = sinon.useFakeXMLHttpRequest();
+            server.requests = [];
+
+            this.xhr.onCreate = function (xhrObj) {
+                server.addRequest(xhrObj);
+            };
+
+            return server;
+        },
+
+        addRequest: function addRequest(xhrObj) {
+            var server = this;
+            push.call(this.requests, xhrObj);
+
+            xhrObj.onSend = function () {
+                server.handleRequest(this);
+
+                if (server.autoRespond && !server.responding) {
+                    setTimeout(function () {
+                        server.responding = false;
+                        server.respond();
+                    }, server.autoRespondAfter || 10);
+
+                    server.responding = true;
+                }
+            };
+        },
+
+        getHTTPMethod: function getHTTPMethod(request) {
+            if (this.fakeHTTPMethods && /post/i.test(request.method)) {
+                var matches = (request.requestBody || "").match(/_method=([^\b;]+)/);
+                return !!matches ? matches[1] : request.method;
+            }
+
+            return request.method;
+        },
+
+        handleRequest: function handleRequest(xhr) {
+            if (xhr.async) {
+                if (!this.queue) {
+                    this.queue = [];
+                }
+
+                push.call(this.queue, xhr);
+            } else {
+                this.processRequest(xhr);
+            }
+        },
+
+        respondWith: function respondWith(method, url, body) {
+            if (arguments.length == 1 && typeof method != "function") {
+                this.response = responseArray(method);
+                return;
+            }
+
+            if (!this.responses) { this.responses = []; }
+
+            if (arguments.length == 1) {
+                body = method;
+                url = method = null;
+            }
+
+            if (arguments.length == 2) {
+                body = url;
+                url = method;
+                method = null;
+            }
+
+            push.call(this.responses, {
+                method: method,
+                url: url,
+                response: typeof body == "function" ? body : responseArray(body)
+            });
+        },
+
+        respond: function respond() {
+            if (arguments.length > 0) this.respondWith.apply(this, arguments);
+            var queue = this.queue || [];
+            var requests = queue.splice(0);
+            var request;
+
+            while(request = requests.shift()) {
+                this.processRequest(request);
+            }
+        },
+
+        processRequest: function processRequest(request) {
+            try {
+                if (request.aborted) {
+                    return;
+                }
+
+                var response = this.response || [404, {}, ""];
+
+                if (this.responses) {
+                    for (var l = this.responses.length, i = l - 1; i >= 0; i--) {
+                        if (match.call(this, this.responses[i], request)) {
+                            response = this.responses[i].response;
+                            break;
+                        }
+                    }
+                }
+
+                if (request.readyState != 4) {
+                    log(response, request);
+
+                    request.respond(response[0], response[1], response[2]);
+                }
+            } catch (e) {
+                sinon.logError("Fake server request processing", e);
+            }
+        },
+
+        restore: function restore() {
+            return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments);
+        }
+    };
+}());
+
+if (typeof module !== 'undefined' && module.exports) {
+    module.exports = sinon;
+}
+
+/**
+ * @depend fake_server.js
+ * @depend fake_timers.js
+ */
+/*jslint browser: true, eqeqeq: false, onevar: false*/
+/*global sinon*/
+/**
+ * Add-on for sinon.fakeServer that automatically handles a fake timer along with
+ * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery
+ * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead,
+ * it polls the object for completion with setInterval. Dispite the direct
+ * motivation, there is nothing jQuery-specific in this file, so it can be used
+ * in any environment where the ajax implementation depends on setInterval or
+ * setTimeout.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function () {
+    function Server() {}
+    Server.prototype = sinon.fakeServer;
+
+    sinon.fakeServerWithClock = new Server();
+
+    sinon.fakeServerWithClock.addRequest = function addRequest(xhr) {
+        if (xhr.async) {
+            if (typeof setTimeout.clock == "object") {
+                this.clock = setTimeout.clock;
+            } else {
+                this.clock = sinon.useFakeTimers();
+                this.resetClock = true;
+            }
+
+            if (!this.longestTimeout) {
+                var clockSetTimeout = this.clock.setTimeout;
+                var clockSetInterval = this.clock.setInterval;
+                var server = this;
+
+                this.clock.setTimeout = function (fn, timeout) {
+                    server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
+
+                    return clockSetTimeout.apply(this, arguments);
+                };
+
+                this.clock.setInterval = function (fn, timeout) {
+                    server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
+
+                    return clockSetInterval.apply(this, arguments);
+                };
+            }
+        }
+
+        return sinon.fakeServer.addRequest.call(this, xhr);
+    };
+
+    sinon.fakeServerWithClock.respond = function respond() {
+        var returnVal = sinon.fakeServer.respond.apply(this, arguments);
+
+        if (this.clock) {
+            this.clock.tick(this.longestTimeout || 0);
+            this.longestTimeout = 0;
+
+            if (this.resetClock) {
+                this.clock.restore();
+                this.resetClock = false;
+            }
+        }
+
+        return returnVal;
+    };
+
+    sinon.fakeServerWithClock.restore = function restore() {
+        if (this.clock) {
+            this.clock.restore();
+        }
+
+        return sinon.fakeServer.restore.apply(this, arguments);
+    };
+}());
+
+/**
+ * @depend ../sinon.js
+ * @depend collection.js
+ * @depend util/fake_timers.js
+ * @depend util/fake_server_with_clock.js
+ */
+/*jslint eqeqeq: false, onevar: false, plusplus: false*/
+/*global require, module*/
+/**
+ * Manages fake collections as well as fake utilities such as Sinon's
+ * timers and fake XHR implementation in one convenient object.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+if (typeof module !== 'undefined' && module.exports) {
+    var sinon = require("../sinon");
+    sinon.extend(sinon, require("./util/fake_timers"));
+}
+
+(function () {
+    var push = [].push;
+
+    function exposeValue(sandbox, config, key, value) {
+        if (!value) {
+            return;
+        }
+
+        if (config.injectInto && !(key in config.injectInto)) {
+            config.injectInto[key] = value;
+            sandbox.injectedKeys.push(key);
+        } else {
+            push.call(sandbox.args, value);
+        }
+    }
+
+    function prepareSandboxFromConfig(config) {
+        var sandbox = sinon.create(sinon.sandbox);
+
+        if (config.useFakeServer) {
+            if (typeof config.useFakeServer == "object") {
+                sandbox.serverPrototype = config.useFakeServer;
+            }
+
+            sandbox.useFakeServer();
+        }
+
+        if (config.useFakeTimers) {
+            if (typeof config.useFakeTimers == "object") {
+                sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers);
+            } else {
+                sandbox.useFakeTimers();
+            }
+        }
+
+        return sandbox;
+    }
+
+    sinon.sandbox = sinon.extend(sinon.create(sinon.collection), {
+        useFakeTimers: function useFakeTimers() {
+            this.clock = sinon.useFakeTimers.apply(sinon, arguments);
+
+            return this.add(this.clock);
+        },
+
+        serverPrototype: sinon.fakeServer,
+
+        useFakeServer: function useFakeServer() {
+            var proto = this.serverPrototype || sinon.fakeServer;
+
+            if (!proto || !proto.create) {
+                return null;
+            }
+
+            this.server = proto.create();
+            return this.add(this.server);
+        },
+
+        inject: function (obj) {
+            sinon.collection.inject.call(this, obj);
+
+            if (this.clock) {
+                obj.clock = this.clock;
+            }
+
+            if (this.server) {
+                obj.server = this.server;
+                obj.requests = this.server.requests;
+            }
+
+            return obj;
+        },
+
+        restore: function () {
+            sinon.collection.restore.apply(this, arguments);
+            this.restoreContext();
+        },
+
+        restoreContext: function () {
+            if (this.injectedKeys) {
+                for (var i = 0, j = this.injectedKeys.length; i < j; i++) {
+                    delete this.injectInto[this.injectedKeys[i]];
+                }
+                this.injectedKeys = [];
+            }
+        },
+
+        create: function (config) {
+            if (!config) {
+                return sinon.create(sinon.sandbox);
+            }
+
+            var sandbox = prepareSandboxFromConfig(config);
+            sandbox.args = sandbox.args || [];
+            sandbox.injectedKeys = [];
+            sandbox.injectInto = config.injectInto;
+            var prop, value, exposed = sandbox.inject({});
+
+            if (config.properties) {
+                for (var i = 0, l = config.properties.length; i < l; i++) {
+                    prop = config.properties[i];
+                    value = exposed[prop] || prop == "sandbox" && sandbox;
+                    exposeValue(sandbox, config, prop, value);
+                }
+            } else {
+                exposeValue(sandbox, config, "sandbox", value);
+            }
+
+            return sandbox;
+        }
+    });
+
+    sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer;
+
+    if (typeof module !== 'undefined' && module.exports) {
+        module.exports = sinon.sandbox;
+    }
+}());
+
+/**
+ * @depend ../sinon.js
+ * @depend stub.js
+ * @depend mock.js
+ * @depend sandbox.js
+ */
+/*jslint eqeqeq: false, onevar: false, forin: true, plusplus: false*/
+/*global module, require, sinon*/
+/**
+ * Test function, sandboxes fakes
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+    var commonJSModule = typeof module !== 'undefined' && module.exports;
+
+    if (!sinon && commonJSModule) {
+        sinon = require("../sinon");
+    }
+
+    if (!sinon) {
+        return;
+    }
+
+    function test(callback) {
+        var type = typeof callback;
+
+        if (type != "function") {
+            throw new TypeError("sinon.test needs to wrap a test function, got " + type);
+        }
+
+        return function () {
+            var config = sinon.getConfig(sinon.config);
+            config.injectInto = config.injectIntoThis && this || config.injectInto;
+            var sandbox = sinon.sandbox.create(config);
+            var exception, result;
+            var args = Array.prototype.slice.call(arguments).concat(sandbox.args);
+
+            try {
+                result = callback.apply(this, args);
+            } catch (e) {
+                exception = e;
+            }
+
+            if (typeof exception !== "undefined") {
+                sandbox.restore();
+                throw exception;
+            }
+            else {
+                sandbox.verifyAndRestore();
+            }
+
+            return result;
+        };
+    }
+
+    test.config = {
+        injectIntoThis: true,
+        injectInto: null,
+        properties: ["spy", "stub", "mock", "clock", "server", "requests"],
+        useFakeTimers: true,
+        useFakeServer: true
+    };
+
+    if (commonJSModule) {
+        module.exports = test;
+    } else {
+        sinon.test = test;
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend ../sinon.js
+ * @depend test.js
+ */
+/*jslint eqeqeq: false, onevar: false, eqeqeq: false*/
+/*global module, require, sinon*/
+/**
+ * Test case, sandboxes all test functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+    var commonJSModule = typeof module !== 'undefined' && module.exports;
+
+    if (!sinon && commonJSModule) {
+        sinon = require("../sinon");
+    }
+
+    if (!sinon || !Object.prototype.hasOwnProperty) {
+        return;
+    }
+
+    function createTest(property, setUp, tearDown) {
+        return function () {
+            if (setUp) {
+                setUp.apply(this, arguments);
+            }
+
+            var exception, result;
+
+            try {
+                result = property.apply(this, arguments);
+            } catch (e) {
+                exception = e;
+            }
+
+            if (tearDown) {
+                tearDown.apply(this, arguments);
+            }
+
+            if (exception) {
+                throw exception;
+            }
+
+            return result;
+        };
+    }
+
+    function testCase(tests, prefix) {
+        /*jsl:ignore*/
+        if (!tests || typeof tests != "object") {
+            throw new TypeError("sinon.testCase needs an object with test functions");
+        }
+        /*jsl:end*/
+
+        prefix = prefix || "test";
+        var rPrefix = new RegExp("^" + prefix);
+        var methods = {}, testName, property, method;
+        var setUp = tests.setUp;
+        var tearDown = tests.tearDown;
+
+        for (testName in tests) {
+            if (tests.hasOwnProperty(testName)) {
+                property = tests[testName];
+
+                if (/^(setUp|tearDown)$/.test(testName)) {
+                    continue;
+                }
+
+                if (typeof property == "function" && rPrefix.test(testName)) {
+                    method = property;
+
+                    if (setUp || tearDown) {
+                        method = createTest(property, setUp, tearDown);
+                    }
+
+                    methods[testName] = sinon.test(method);
+                } else {
+                    methods[testName] = tests[testName];
+                }
+            }
+        }
+
+        return methods;
+    }
+
+    if (commonJSModule) {
+        module.exports = testCase;
+    } else {
+        sinon.testCase = testCase;
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend ../sinon.js
+ * @depend stub.js
+ */
+/*jslint eqeqeq: false, onevar: false, nomen: false, plusplus: false*/
+/*global module, require, sinon*/
+/**
+ * Assertions matching the test spy retrieval interface.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon, global) {
+    var commonJSModule = typeof module !== "undefined" && module.exports;
+    var slice = Array.prototype.slice;
+    var assert;
+
+    if (!sinon && commonJSModule) {
+        sinon = require("../sinon");
+    }
+
+    if (!sinon) {
+        return;
+    }
+
+    function verifyIsStub() {
+        var method;
+
+        for (var i = 0, l = arguments.length; i < l; ++i) {
+            method = arguments[i];
+
+            if (!method) {
+                assert.fail("fake is not a spy");
+            }
+
+            if (typeof method != "function") {
+                assert.fail(method + " is not a function");
+            }
+
+            if (typeof method.getCall != "function") {
+                assert.fail(method + " is not stubbed");
+            }
+        }
+    }
+
+    function failAssertion(object, msg) {
+        object = object || global;
+        var failMethod = object.fail || assert.fail;
+        failMethod.call(object, msg);
+    }
+
+    function mirrorPropAsAssertion(name, method, message) {
+        if (arguments.length == 2) {
+            message = method;
+            method = name;
+        }
+
+        assert[name] = function (fake) {
+            verifyIsStub(fake);
+
+            var args = slice.call(arguments, 1);
+            var failed = false;
+
+            if (typeof method == "function") {
+                failed = !method(fake);
+            } else {
+                failed = typeof fake[method] == "function" ?
+                    !fake[method].apply(fake, args) : !fake[method];
+            }
+
+            if (failed) {
+                failAssertion(this, fake.printf.apply(fake, [message].concat(args)));
+            } else {
+                assert.pass(name);
+            }
+        };
+    }
+
+    function exposedName(prefix, prop) {
+        return !prefix || /^fail/.test(prop) ? prop :
+            prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1);
+    }
+
+    assert = {
+        failException: "AssertError",
+
+        fail: function fail(message) {
+            var error = new Error(message);
+            error.name = this.failException || assert.failException;
+
+            throw error;
+        },
+
+        pass: function pass(assertion) {},
+
+        callOrder: function assertCallOrder() {
+            verifyIsStub.apply(null, arguments);
+            var expected = "", actual = "";
+
+            if (!sinon.calledInOrder(arguments)) {
+                try {
+                    expected = [].join.call(arguments, ", ");
+                    var calls = slice.call(arguments);
+                    var i = calls.length;
+                    while (i) {
+                        if (!calls[--i].called) {
+                            calls.splice(i, 1);
+                        }
+                    }
+                    actual = sinon.orderByFirstCall(calls).join(", ");
+                } catch (e) {
+                    // If this fails, we'll just fall back to the blank string
+                }
+
+                failAssertion(this, "expected " + expected + " to be " +
+                              "called in order but were called as " + actual);
+            } else {
+                assert.pass("callOrder");
+            }
+        },
+
+        callCount: function assertCallCount(method, count) {
+            verifyIsStub(method);
+
+            if (method.callCount != count) {
+                var msg = "expected %n to be called " + sinon.timesInWords(count) +
+                    " but was called %c%C";
+                failAssertion(this, method.printf(msg));
+            } else {
+                assert.pass("callCount");
+            }
+        },
+
+        expose: function expose(target, options) {
+            if (!target) {
+                throw new TypeError("target is null or undefined");
+            }
+
+            var o = options || {};
+            var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix;
+            var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail;
+
+            for (var method in this) {
+                if (method != "export" && (includeFail || !/^(fail)/.test(method))) {
+                    target[exposedName(prefix, method)] = this[method];
+                }
+            }
+
+            return target;
+        },
+
+        match: function match(actual, expectation) {
+            var matcher = sinon.match(expectation);
+            if (matcher.test(actual)) {
+                assert.pass("match");
+            } else {
+                var formatted = [
+                    "expected value to match",
+                    "    expected = " + sinon.format(expectation),
+                    "    actual = " + sinon.format(actual)
+                ]
+                failAssertion(this, formatted.join("\n"));
+            }
+        }
+    };
+
+    mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called");
+    mirrorPropAsAssertion("notCalled", function (spy) { return !spy.called; },
+                          "expected %n to not have been called but was called %c%C");
+    mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C");
+    mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C");
+    mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C");
+    mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t");
+    mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t");
+    mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new");
+    mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new");
+    mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C");
+    mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C");
+    mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C");
+    mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C");
+    mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C");
+    mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C");
+    mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C");
+    mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C");
+    mirrorPropAsAssertion("threw", "%n did not throw exception%C");
+    mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C");
+
+    if (commonJSModule) {
+        module.exports = assert;
+    } else {
+        sinon.assert = assert;
+    }
+}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global));
+
+return sinon;}.call(typeof window != 'undefined' && window || {}));
diff --git a/resources/sinonjs/sinon-ie-1.9.0.js b/resources/sinonjs/sinon-ie-1.9.0.js
new file mode 100644 (file)
index 0000000..c9fbd9d
--- /dev/null
@@ -0,0 +1,86 @@
+/**
+ * Sinon.JS 1.9.0, 2014/03/05
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS
+ *
+ * (The BSD License)
+ * 
+ * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 
+ *     * Redistributions of source code must retain the above copyright notice,
+ *       this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright notice,
+ *       this list of conditions and the following disclaimer in the documentation
+ *       and/or other materials provided with the distribution.
+ *     * Neither the name of Christian Johansen nor the names of his contributors
+ *       may be used to endorse or promote products derived from this software
+ *       without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*global sinon, setTimeout, setInterval, clearTimeout, clearInterval, Date*/
+/**
+ * Helps IE run the fake timers. By defining global functions, IE allows
+ * them to be overwritten at a later point. If these are not defined like
+ * this, overwriting them will result in anything from an exception to browser
+ * crash.
+ *
+ * If you don't require fake timers to work in IE, don't include this file.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+function setTimeout() {}
+function clearTimeout() {}
+function setImmediate() {}
+function clearImmediate() {}
+function setInterval() {}
+function clearInterval() {}
+function Date() {}
+
+// Reassign the original functions. Now their writable attribute
+// should be true. Hackish, I know, but it works.
+setTimeout = sinon.timers.setTimeout;
+clearTimeout = sinon.timers.clearTimeout;
+setImmediate = sinon.timers.setImmediate;
+clearImmediate = sinon.timers.clearImmediate;
+setInterval = sinon.timers.setInterval;
+clearInterval = sinon.timers.clearInterval;
+Date = sinon.timers.Date;
+
+/*global sinon*/
+/**
+ * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows
+ * them to be overwritten at a later point. If these are not defined like
+ * this, overwriting them will result in anything from an exception to browser
+ * crash.
+ *
+ * If you don't require fake XHR to work in IE, don't include this file.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+function XMLHttpRequest() {}
+
+// Reassign the original function. Now its writable attribute
+// should be true. Hackish, I know, but it works.
+XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined;
index dc5c001..9344feb 100644 (file)
@@ -90,21 +90,37 @@ class CologneBlueTemplate extends BaseTemplate {
                        return "";
                }
 
+               $html = '';
+
                // We override SkinTemplate->formatLanguageName() in SkinCologneBlue
                // not to capitalize the language names.
                $language_urls = $this->data['language_urls'];
-               if ( empty( $language_urls ) ) {
-                       return "";
-               }
+               if ( !empty( $language_urls ) ) {
+                       $s = array();
+                       foreach ( $language_urls as $key => $data ) {
+                               $s[] = $this->makeListItem( $key, $data, array( 'tag' => 'span' ) );
+                       }
 
-               $s = array();
-               foreach ( $language_urls as $key => $data ) {
-                       $s[] = $this->makeListItem( $key, $data, array( 'tag' => 'span' ) );
+                       $html = wfMessage( 'otherlanguages' )->text()
+                               . wfMessage( 'colon-separator' )->text()
+                               . $this->getSkin()->getLanguage()->pipeList( $s );
                }
 
-               return wfMessage( 'otherlanguages' )->text()
-                       . wfMessage( 'colon-separator' )->text()
-                       . $this->getSkin()->getLanguage()->pipeList( $s );
+               $html .= $this->renderAfterPortlet( 'lang' );
+
+               return $html;
+       }
+
+       /**
+        * @param string $name
+        */
+       protected function renderAfterPortlet( $name ) {
+               $content = '';
+               wfRunHooks( 'BaseTemplateAfterPortlet', array( $this, $name, &$content ) );
+
+               $html = $content !== '' ? "<div class='after-portlet after-portlet-$name'>$content</div>" : '';
+
+               return $html;
        }
 
        function pageTitleLinks() {
@@ -283,7 +299,7 @@ class CologneBlueTemplate extends BaseTemplate {
                        <?php } ?>
                </div>
        </div>
-       <div id="article" role="main">
+       <div id="article" class="mw-body" role="main">
                <?php if ( $this->getSkin()->getSiteNotice() ) { ?>
                <div id="siteNotice"><?php echo $this->getSkin()->getSiteNotice() ?></div>
                <?php } ?>
@@ -517,6 +533,8 @@ class CologneBlueTemplate extends BaseTemplate {
                                $role = ( $heading == 'search' ) ? 'search' : 'navigation';
                                $s .= "<div class=\"portlet\" id=\"$portletId\" role=\"$role\">\n$headingHTML\n$listHTML\n</div>\n";
                        }
+
+                       $s .= $this->renderAfterPortlet( $heading );
                }
 
                $s .= "</div>\n";
index bd914ce..34f5965 100644 (file)
@@ -221,6 +221,8 @@ echo $footerEnd;
                                } ?>
 
                        </form>
+
+                       <?php $this->renderAfterPortlet( 'search' ); ?>
                </div>
        </div>
 <?php
@@ -242,6 +244,7 @@ echo $footerEnd;
                                } ?>
 
                        </ul>
+<?php          $this->renderAfterPortlet( 'cactions' ); ?>
                </div>
        </div>
 <?php
@@ -263,6 +266,7 @@ echo $footerEnd;
                wfRunHooks( 'SkinTemplateToolboxEnd', array( &$this, true ) );
 ?>
                        </ul>
+<?php          $this->renderAfterPortlet( 'tb' ); ?>
                </div>
        </div>
 <?php
@@ -270,7 +274,7 @@ echo $footerEnd;
 
        /*************************************************************************************************/
        function languageBox() {
-               if ( $this->data['language_urls'] ) {
+               if ( $this->data['language_urls'] !== false ) {
 ?>
        <div id="p-lang" class="portlet" role="navigation">
                <h3<?php $this->html( 'userlangattributes' ) ?>><?php $this->msg( 'otherlanguages' ) ?></h3>
@@ -281,6 +285,8 @@ echo $footerEnd;
 
 <?php          } ?>
                        </ul>
+
+<?php          $this->renderAfterPortlet( 'lang' ); ?>
                </div>
        </div>
 <?php
@@ -315,9 +321,12 @@ echo $footerEnd;
                        # allow raw HTML block to be defined by extensions
                        print $cont;
                }
+
+               $this->renderAfterPortlet( $bar );
 ?>
                </div>
        </div>
 <?php
        }
+
 } // end of class
index b44b914..2bab6ad 100644 (file)
@@ -167,6 +167,7 @@ class VectorTemplate extends BaseTemplate {
                                $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
                                $this->text( 'pageLanguage' );
                        ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
+                       <?php $this->html( 'prebodyhtml' ) ?>
                        <div id="bodyContent">
                                <?php if ( $this->data['isarticle'] ) { ?>
                                <div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
@@ -274,7 +275,7 @@ class VectorTemplate extends BaseTemplate {
                                        $this->renderPortal( 'tb', $this->getToolbox(), 'toolbox', 'SkinTemplateToolboxEnd' );
                                        break;
                                case 'LANGUAGES':
-                                       if ( $this->data['language_urls'] ) {
+                                       if ( $this->data['language_urls']  !== false ) {
                                                $this->renderPortal( 'lang', $this->data['language_urls'], 'otherlanguages' );
                                        }
                                        break;
@@ -316,9 +317,12 @@ class VectorTemplate extends BaseTemplate {
                </ul>
 <?php
                } else { ?>
-               <?php echo $content; /* Allow raw HTML block to be defined by extensions */ ?>
-<?php
-               } ?>
+               <?php
+                       echo $content; /* Allow raw HTML block to be defined by extensions */
+               }
+
+               $this->renderAfterPortlet( $name );
+               ?>
        </div>
 </div>
 <?php
@@ -428,7 +432,7 @@ class VectorTemplate extends BaseTemplate {
 <div id="p-search" role="search">
        <h3<?php $this->html( 'userlangattributes' ) ?>><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h3>
        <form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
-               <?php if ( $wgVectorUseSimpleSearch && $this->getSkin()->getUser()->getOption( 'vector-simplesearch' ) ) { ?>
+               <?php if ( $wgVectorUseSimpleSearch ) { ?>
                        <div id="simpleSearch">
                <?php } else { ?>
                        <div>
index 40a9432..ef9cf8f 100644 (file)
@@ -133,6 +133,11 @@ textarea {
        line-height: inherit;
 }
 
+div.after-portlet {
+       display: inline;
+       padding-left: .5em;
+}
+
 h1 {
        color: #666666;
        font-family: Verdana, Arial, sans-serif;
index 1657d97..942cbac 100644 (file)
@@ -221,15 +221,15 @@ td.mw-label {
 }
 
 .mw-icon-question {
-       /* @embed */
-       background: url('images/question-small.png') no-repeat;
        /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG)
-        * lifted from #pt-login css rule in skins/vector/screen.css */
+        * compatibility (browsers able to understand gradient syntax support also SVG).
+        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
+       background-image: url(images/question-small.png);
        /* @embed */
-       background: -webkit-linear-gradient(transparent, transparent), url('images/question.svg') no-repeat;
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/question.svg);
        /* @embed */
-       background: linear-gradient(transparent, transparent), url('images/question.svg') no-repeat;
+       background-image: linear-gradient(transparent, transparent), url(images/question.svg);
+       background-repeat: no-repeat;
        background-size: 13px 13px;
        display: inline-block;
        height: 13px;
@@ -484,8 +484,13 @@ a.new {
 
 /* feed links */
 a.feedlink {
-       /* @embed */
+       /* SVG support using a transparent gradient to guarantee cross-browser
+        * compatibility (browsers able to understand gradient syntax support also SVG).
+        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
        background-image: url(images/feed-icon.png);
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/feed-icon.svg);
+       /* @embed */
        background-image: linear-gradient(transparent, transparent), url(images/feed-icon.svg);
        background-position: center left;
        background-repeat: no-repeat;
@@ -1046,7 +1051,7 @@ ol:lang(or) li {
        margin-bottom: -8px;
        padding: 0 0 0 15px;
        /* @embed */
-       background-image: url('images/help-question.gif');
+       background-image: url(images/help-question.gif);
        background-position: left center;
        background-repeat: no-repeat;
        cursor: pointer;
@@ -1056,7 +1061,7 @@ ol:lang(or) li {
 }
 .mw-help-field-hint:hover {
        /* @embed */
-       background-image: url('images/help-question-hover.gif');
+       background-image: url(images/help-question-hover.gif);
 }
 .mw-help-field-data {
        display: block;
index 145b375..6d37657 100644 (file)
@@ -250,6 +250,12 @@ table.rimage {
        border: 1px solid #aaa;
        padding: 0 .8em .3em .5em;
 }
+/* allows .pBody styles to wrap around content added via BaseTemplateAfterPortlet hook */
+.pBody:after {
+       content: '';
+       clear: both;
+       display: block;
+}
 .portlet ul {
        line-height: 1.5em;
        font-size: 95%;
index e33cfc9..0e49744 100644 (file)
                        } );
                } );
 
-               // if we haven't already bound our resize hanlder, bind it now
+               // if we haven't already bound our resize handler, bind it now
                if ( !$.collapsibleTabs.boundEvent ) {
-                       $( window )
-                               .delayedBind( 500, 'resize', function () {
-                                       $.collapsibleTabs.handleResize();
-                               } );
+                       $( window ).on( 'resize', $.debounce( 500, function () {
+                               $.collapsibleTabs.handleResize();
+                       } ) );
+                       $.collapsibleTabs.boundEvent = true;
                }
+
                // call our resize handler to setup the page
                $.collapsibleTabs.handleResize();
                return this;
                        }
                        return $settings;
                },
-               /**
-                * @param {jQuery.Event} e
-                */
                handleResize: function () {
                        $.collapsibleTabs.instances.each( function () {
                                var $el = $( this ),
diff --git a/skins/vector/components/animations.less b/skins/vector/components/animations.less
new file mode 100644 (file)
index 0000000..9163779
--- /dev/null
@@ -0,0 +1,28 @@
+/* Animate between standard and high definition layouts */
+body.vector-animateLayout {
+       div#content,
+       div#footer,
+       #left-navigation {
+               .transition(margin-left 250ms, padding 250ms;);
+       }
+
+       #p-logo {
+               .transition(left 250ms);
+       }
+
+       #mw-panel {
+               .transition(padding-right 250ms);
+       }
+
+       #p-search {
+               .transition(margin-right 250ms);
+       }
+
+       #p-personal {
+               .transition(right 250ms);
+       }
+
+       #mw-head-base {
+               .transition(margin-left 250ms);
+       }
+}
index cb89a7b..8e7fc4d 100644 (file)
@@ -87,32 +87,3 @@ pre, .mw-code {
 .tipsy {
        font-size: 0.8em;
 }
-
-/* Animate between standard and high definition layouts */
-body.vector-animateLayout {
-       div#content,
-       div#footer,
-       #left-navigation {
-               .transition(margin-left 250ms, padding 250ms;);
-       }
-
-       #p-logo {
-               .transition(left 250ms);
-       }
-
-       #mw-panel {
-               .transition(padding-right 250ms);
-       }
-
-       #p-search {
-               .transition(margin-right 250ms);
-       }
-
-       #p-personal {
-               .transition(right 250ms);
-       }
-
-       #mw-head-base {
-               .transition(margin-left 250ms);
-       }
-}
index e2942d7..f3a5a49 100644 (file)
        height: 5em;
        background-position: bottom left;
        background-repeat: repeat-x;
-       .vertical-gradient(@body-background-color, @menu-background-color, 40%, 100%);
+       /* This image is only a fallback (for IE 6-9), so we do not @embed it. */
+       background-image: url('images/page-fade.png');
+       .vertical-gradient(@body-background-color, @menu-background-color, 50%, 100%);
+       background-color: @body-background-color;
 }
 
 #mw-head-base {
index ec0b2fa..46c3030 100644 (file)
@@ -55,18 +55,21 @@ div#simpleSearch {
 
                // These rules MAY NOT be merged because of how CSS requires browsers
                // to parse unrecognized selectors!
+               // Note these rules ensure that placeholder text can be distinguished from
+               // standard text. In browsers which make this distinction clear these rules
+               // are not necessary.
+               // For inputs that use jquery.placeholder.js e.g. IE9-
                &.placeholder {
                        color: #999;
                }
+               // Distinguish placeholder text in IE10+
                &:-ms-input-placeholder {
                        color: #999;
                }
+               // Distinguish placeholder text in Firefox 18-
                &:-moz-placeholder {
                        color: #999;
                }
-               &::-webkit-input-placeholder {
-                       color: #999;
-               }
 
                // Undo the styles Webkit browsers apply to type=search fields,
                // we provide our own
@@ -108,41 +111,3 @@ div#simpleSearch {
                z-index: 1;
        }
 }
-
-// The following styles exist only for backwards-compatibility with
-// cached HTML and are to be removed before 1.23 release.
-
-/* Fix direction changed for awful hacks */
-.sitedir-ltr div#simpleSearch button#searchButton {
-       /* @noflip */
-       direction: ltr;
-}
-.sitedir-rtl div#simpleSearch button#searchButton {
-       /* @noflip */
-       direction: rtl;
-}
-
-div#simpleSearch button#searchButton {
-       position: absolute;
-       padding: 0;
-       padding-top: 0.3em;
-       padding-bottom: 0.2em;
-       padding-right: 0.4em;
-       margin: 0;
-       border: none;
-       background-color: transparent;
-       background-image: none;
-       text-indent: 0;
-
-       /* OVERRIDDEN BY COMPLIANT BROWSERS */
-       img {
-               border: none;
-               margin: 0;
-               margin-top: -3px;
-               padding: 0;
-       }
-       /* IGNORED BY IE6 */
-       > img {
-               margin: 0;
-       }
-}
index 43e77cd..7e24ae7 100644 (file)
@@ -120,18 +120,19 @@ div.vectorMenu {
        direction: ltr;
        /* @noflip */
        float: left;
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG) */
        .background-image-svg('images/arrow-down-icon.svg', 'images/arrow-down-icon.png');
        /* @noflip */
        background-position: 100% 60%;
        background-repeat: no-repeat;
        cursor: pointer;
+       .transition(background-position 250ms);
+}
+
+div.vectorMenu.menuForceShow {
+       background-position: 100% 100%;
 }
 
 div.vectorMenuFocus {
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG) */
        .background-image-svg('images/arrow-down-focus-icon.svg', 'images/arrow-down-focus-icon.png');
        background-position: 100% 60%;
 }
@@ -212,7 +213,7 @@ x:-moz-any-link {
 
 /* Enable forcing showing of the menu for accessibility */
 div.vectorMenu:hover div.menu,
-div.vectorMenu div.menuForceShow {
+div.vectorMenu.menuForceShow div.menu {
        display: block;
 }
 
index 6e4a7b3..b76a825 100644 (file)
@@ -1,3 +1,5 @@
+@import "mediawiki.mixins.rotation"
+
 /* Watch/Unwatch Icon Styling */
 #ca-unwatch.icon a,
 #ca-watch.icon a {
index d0c4729..64a449f 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -11,8 +9,6 @@
    width="16"
    height="16"
    id="svg2">
-  <defs
-     id="defs4" />
   <metadata
      id="metadata7">
     <rdf:RDF>
index 8c5e04b..938494b 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -11,8 +9,6 @@
    width="16"
    height="16"
    id="svg2">
-  <defs
-     id="defs4" />
   <metadata
      id="metadata7">
     <rdf:RDF>
index f2edf26..be1ad89 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -11,8 +9,6 @@
    width="22"
    height="16"
    id="svg2">
-  <defs
-     id="defs4" />
   <metadata
      id="metadata7">
     <rdf:RDF>
index 9218ff2..a991501 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -11,8 +9,6 @@
    width="22"
    height="16"
    id="svg2">
-  <defs
-     id="defs4" />
   <metadata
      id="metadata7">
     <rdf:RDF>
index 60704d2..a1b58e5 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -11,8 +9,6 @@
    width="16"
    height="16"
    id="svg2">
-  <defs
-     id="defs4" />
   <metadata
      id="metadata7">
     <rdf:RDF>
index d88b57f..91ca5c4 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -8,60 +6,33 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="10"
    height="10"
-   id="svg6167"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="Nowy dokument 22">
+   id="svg6167">
   <defs
      id="defs6169">
     <linearGradient
        id="linearGradient6707">
       <stop
-         style="stop-color:#b2bf46;stop-opacity:1;"
-         offset="0"
-         id="stop6709" />
+         id="stop6709"
+         style="stop-color:#b2bf46;stop-opacity:1"
+         offset="0" />
       <stop
-         style="stop-color:#c8d17b;stop-opacity:1;"
-         offset="1"
-         id="stop6711" />
+         id="stop6711"
+         style="stop-color:#c8d17b;stop-opacity:1"
+         offset="1" />
     </linearGradient>
     <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6707"
-       id="linearGradient6713"
        x1="22.262903"
        y1="9.1418257"
        x2="22.262903"
        y2="5.3889236"
+       id="linearGradient6713"
+       xlink:href="#linearGradient6707"
        gradientUnits="userSpaceOnUse"
        gradientTransform="matrix(0.96979296,0,0,0.96979296,858.75554,710.2631)" />
   </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="45.254834"
-     inkscape:cx="7.6304965"
-     inkscape:cy="5.5914204"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1014"
-     inkscape:window-x="0"
-     inkscape:window-y="27"
-     inkscape:window-maximized="1" />
   <metadata
      id="metadata6172">
     <rdf:RDF>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-877.85712,-710.2193)">
+     transform="translate(-877.85712,-710.2193)"
+     id="layer1">
     <path
-       style="fill:url(#linearGradient6713);fill-opacity:1;stroke:#757f2a;stroke-width:0.96979296px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
        d="m 880.63649,710.74799 0,5.78845 c -0.30291,0.0337 -0.60613,0.10534 -0.90918,0.24245 -1.08747,0.49204 -1.62536,1.48002 -1.21224,2.21234 0.41311,0.73233 1.60977,0.91632 2.69723,0.42429 0.87694,-0.39677 1.37959,-1.10894 1.33347,-1.75775 l 0,-0.15153 0,-3.81856 2.93968,0 0,2.84876 c -0.30894,0.0309 -0.62965,0.10227 -0.93948,0.24245 -1.07493,0.48636 -1.6206,1.48846 -1.21225,2.21234 0.40836,0.72389 1.59201,0.91065 2.66694,0.42429 0.87404,-0.39547 1.38893,-1.11233 1.33346,-1.75775 l 0,-0.15153 0,-6.75825 -6.69763,0 z"
        id="path6186"
-       inkscape:connector-curvature="0" />
+       style="fill:url(#linearGradient6713);fill-opacity:1;stroke:#757f2a;stroke-width:0.96979296px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
   </g>
 </svg>
index 1055769..fd05df8 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -8,83 +6,34 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="10"
    height="10"
-   id="svg7339"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="document-icon.svg">
+   id="svg7339">
   <defs
      id="defs7341">
     <linearGradient
        id="linearGradient7918">
       <stop
-         style="stop-color:#e2e2e2;stop-opacity:1;"
-         offset="0"
-         id="stop7920" />
-      <stop
-         style="stop-color:#f8f8f8;stop-opacity:1;"
-         offset="1"
-         id="stop7922" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient7902">
-      <stop
-         style="stop-color:#e2e2e2;stop-opacity:1;"
-         offset="0"
-         id="stop7904" />
+         id="stop7920"
+         style="stop-color:#e2e2e2;stop-opacity:1"
+         offset="0" />
       <stop
-         style="stop-color:#e2e2e2;stop-opacity:1;"
-         offset="1"
-         id="stop7906" />
+         id="stop7922"
+         style="stop-color:#f8f8f8;stop-opacity:1"
+         offset="1" />
     </linearGradient>
     <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient7918"
-       id="radialGradient7931"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.4065972,0,0,2.1428629,6.7977966,-4.7132748)"
        cx="-16.71875"
        cy="3.344311"
+       r="2"
        fx="-16.71875"
        fy="3.344311"
-       r="2" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient7918"
        id="radialGradient7968"
+       xlink:href="#linearGradient7918"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.4065972,0,0,2.1428629,810.35359,682.73485)"
-       cx="-16.71875"
-       cy="3.344311"
-       fx="-16.71875"
-       fy="3.344311"
-       r="2" />
+       gradientTransform="matrix(1.4065972,0,0,2.1428629,810.35359,682.73485)" />
   </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="32"
-     inkscape:cx="3.7383502"
-     inkscape:cy="5.7078811"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1041"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1" />
   <metadata
      id="metadata7344">
     <rdf:RDF>
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
+        <dc:title></dc:title>
       </cc:Work>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-783.57141,-687.36218)">
+     transform="translate(-783.57141,-687.36218)"
+     id="layer1">
     <path
-       inkscape:connector-curvature="0"
-       style="fill:#ffffff;fill-opacity:1;stroke:#878787;stroke-width:0.89999998;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
        d="m 785.05579,687.85437 0,9.09375 7.03125,0 0,-6.84375 -2.25,-2.25 -4.78125,0 z"
-       id="rect7358" />
+       id="rect7358"
+       style="fill:#ffffff;fill-opacity:1;stroke:#878787;stroke-width:0.89999998;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
     <path
-       inkscape:connector-curvature="0"
-       style="fill:url(#radialGradient7968);fill-opacity:1;stroke:none"
        d="m 786.52454,689.44812 0,6.09375 4,0 0,-5.28125 -0.84375,0 0,-0.8125 -3.15625,0 z"
-       id="rect7896" />
-    <g
-       style="font-size:1px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
-       id="text7952">
-      <path
-         d="m 786.54126,689.4494 0.0986,0 0,0.646 0.35498,0 0,0.083 -0.45361,0 0,-0.72901"
-         style=""
-         id="path2999" />
-      <path
-         d="m 787.28833,689.69452 c -0.0482,0 -0.0863,0.0189 -0.11426,0.0566 -0.028,0.0374 -0.042,0.0889 -0.042,0.1543 0,0.0654 0.0138,0.11702 0.0415,0.15478 0.028,0.0374 0.0662,0.0562 0.11475,0.0562 0.0479,0 0.0858,-0.0189 0.11377,-0.0566 0.028,-0.0378 0.042,-0.0892 0.042,-0.15429 0,-0.0648 -0.014,-0.11605 -0.042,-0.15381 -0.028,-0.0381 -0.0659,-0.0571 -0.11377,-0.0571 m 0,-0.0762 c 0.0781,0 0.13949,0.0254 0.18408,0.0762 0.0446,0.0508 0.0669,0.12109 0.0669,0.21094 0,0.0895 -0.0223,0.15983 -0.0669,0.21093 -0.0446,0.0508 -0.10596,0.0762 -0.18408,0.0762 -0.0784,0 -0.13997,-0.0254 -0.18457,-0.0762 -0.0443,-0.0511 -0.0664,-0.12142 -0.0664,-0.21093 0,-0.0898 0.0221,-0.16016 0.0664,-0.21094 0.0446,-0.0508 0.10612,-0.0762 0.18457,-0.0762"
-         style=""
-         id="path3001" />
-      <path
-         d="m 788.00464,689.71552 c -0.0101,-0.006 -0.0212,-0.0101 -0.0332,-0.0127 -0.0117,-0.003 -0.0247,-0.004 -0.0391,-0.004 -0.0508,0 -0.0898,0.0166 -0.11718,0.0498 -0.027,0.0329 -0.0405,0.0802 -0.0405,0.14209 l 0,0.28809 -0.0903,0 0,-0.54688 0.0903,0 0,0.085 c 0.0189,-0.0332 0.0435,-0.0578 0.0737,-0.0737 0.0303,-0.0163 0.0671,-0.0244 0.11035,-0.0244 0.006,0 0.013,4.9e-4 0.0205,0.001 0.007,6.5e-4 0.0158,0.002 0.0249,0.003 l 4.9e-4,0.0923"
-         style=""
-         id="path3003" />
-      <path
-         d="m 788.54614,689.88251 0,0.0439 -0.41308,0 c 0.004,0.0618 0.0225,0.10905 0.0557,0.1416 0.0335,0.0322 0.0801,0.0483 0.13965,0.0483 0.0345,0 0.0679,-0.004 0.1001,-0.0127 0.0326,-0.008 0.0648,-0.0212 0.0967,-0.0381 l 0,0.085 c -0.0322,0.0137 -0.0653,0.0241 -0.0991,0.0312 -0.0339,0.007 -0.0682,0.0108 -0.10303,0.0108 -0.0872,0 -0.15641,-0.0254 -0.20752,-0.0762 -0.0508,-0.0508 -0.0762,-0.11946 -0.0762,-0.20605 0,-0.0895 0.0241,-0.16048 0.0723,-0.21289 0.0485,-0.0527 0.11377,-0.0791 0.1958,-0.0791 0.0736,0 0.13168,0.0238 0.17432,0.0713 0.043,0.0472 0.0645,0.11149 0.0645,0.19287 m -0.0898,-0.0264 c -6.5e-4,-0.0491 -0.0145,-0.0884 -0.0415,-0.11768 -0.0267,-0.0293 -0.0622,-0.0439 -0.10644,-0.0439 -0.0501,0 -0.0903,0.0142 -0.12061,0.0425 -0.0299,0.0283 -0.0472,0.0682 -0.0517,0.11963 l 0.32031,-4.9e-4"
-         style=""
-         id="path3005" />
-      <path
-         d="m 789.11938,689.73651 c 0.0225,-0.0404 0.0493,-0.0701 0.0806,-0.0893 0.0312,-0.0192 0.068,-0.0288 0.11035,-0.0288 0.057,0 0.10091,0.02 0.13184,0.0601 0.0309,0.0397 0.0464,0.0964 0.0464,0.16992 l 0,0.33008 -0.0903,0 0,-0.32715 c 0,-0.0524 -0.009,-0.0913 -0.0278,-0.1167 -0.0186,-0.0254 -0.0469,-0.0381 -0.085,-0.0381 -0.0466,0 -0.0833,0.0155 -0.11035,0.0464 -0.027,0.0309 -0.0405,0.0731 -0.0405,0.12646 l 0,0.30909 -0.0903,0 0,-0.32715 c 0,-0.0527 -0.009,-0.0916 -0.0278,-0.1167 -0.0186,-0.0254 -0.0472,-0.0381 -0.0859,-0.0381 -0.0459,0 -0.0824,0.0156 -0.10938,0.0469 -0.027,0.0309 -0.0405,0.0729 -0.0405,0.12597 l 0,0.30909 -0.0903,0 0,-0.54688 0.0903,0 0,0.085 c 0.0205,-0.0335 0.0451,-0.0583 0.0737,-0.0742 0.0286,-0.016 0.0627,-0.0239 0.10205,-0.0239 0.0397,0 0.0734,0.0101 0.10107,0.0303 0.028,0.0202 0.0487,0.0495 0.062,0.0879"
-         style=""
-         id="path3007" />
-      <path
-         d="m 786.53735,690.88153 0.0899,0 0,0.54688 -0.0899,0 0,-0.54688 m 0,-0.21289 0.0899,0 0,0.11377 -0.0899,0 0,-0.11377"
-         style=""
-         id="path3009" />
-      <path
-         d="m 786.90161,691.34637 0,0.29004 -0.0903,0 0,-0.75488 0.0903,0 0,0.083 c 0.0189,-0.0326 0.0426,-0.0566 0.0713,-0.0723 0.029,-0.016 0.0635,-0.0239 0.10352,-0.0239 0.0664,0 0.12028,0.0264 0.16162,0.0791 0.0417,0.0527 0.0625,0.12207 0.0625,0.20801 0,0.0859 -0.0208,0.15527 -0.0625,0.208 -0.0413,0.0527 -0.0952,0.0791 -0.16162,0.0791 -0.04,0 -0.0745,-0.008 -0.10352,-0.0234 -0.0286,-0.0159 -0.0524,-0.0402 -0.0713,-0.0728 m 0.30567,-0.19091 c -10e-6,-0.0661 -0.0137,-0.11784 -0.041,-0.15528 -0.027,-0.0378 -0.0643,-0.0566 -0.11182,-0.0566 -0.0475,0 -0.085,0.0189 -0.1123,0.0566 -0.027,0.0374 -0.0405,0.0892 -0.0405,0.15528 0,0.0661 0.0135,0.118 0.0405,0.15576 0.0273,0.0374 0.0648,0.0562 0.1123,0.0562 0.0475,0 0.0848,-0.0187 0.11182,-0.0562 0.0273,-0.0378 0.041,-0.0897 0.041,-0.15576"
-         style=""
-         id="path3011" />
-      <path
-         d="m 787.7981,690.89764 0,0.085 c -0.0254,-0.013 -0.0518,-0.0228 -0.0791,-0.0293 -0.0273,-0.007 -0.0557,-0.01 -0.085,-0.01 -0.0446,0 -0.0781,0.007 -0.10058,0.0205 -0.0221,0.0137 -0.0332,0.0342 -0.0332,0.0615 0,0.0208 0.008,0.0373 0.0239,0.0493 0.0159,0.0117 0.048,0.023 0.0962,0.0337 l 0.0308,0.007 c 0.0638,0.0137 0.10905,0.033 0.13575,0.0581 0.027,0.0247 0.0405,0.0594 0.0405,0.10401 0,0.0508 -0.0202,0.091 -0.0605,0.1206 -0.04,0.0296 -0.0952,0.0444 -0.16553,0.0444 -0.0293,0 -0.0599,-0.003 -0.0918,-0.009 -0.0316,-0.006 -0.0649,-0.014 -0.1001,-0.0254 l 0,-0.0928 c 0.0332,0.0173 0.0659,0.0303 0.0982,0.0391 0.0322,0.008 0.0641,0.0127 0.0957,0.0127 0.0423,0 0.0749,-0.007 0.0977,-0.0215 0.0228,-0.0147 0.0342,-0.0352 0.0342,-0.0615 0,-0.0244 -0.008,-0.0431 -0.0249,-0.0562 -0.0163,-0.013 -0.0522,-0.0255 -0.10792,-0.0376 l -0.0312,-0.007 c -0.0557,-0.0117 -0.0959,-0.0296 -0.1206,-0.0537 -0.0247,-0.0244 -0.0371,-0.0578 -0.0371,-0.1001 0,-0.0514 0.0182,-0.0912 0.0547,-0.11914 0.0365,-0.028 0.0882,-0.042 0.15527,-0.042 0.0332,0 0.0644,0.002 0.0937,0.007 0.0293,0.005 0.0563,0.0122 0.0811,0.022"
-         style=""
-         id="path3013" />
-      <path
-         d="m 787.96167,691.21259 0,-0.33106 0.0898,0 0,0.32764 c 0,0.0518 0.0101,0.0907 0.0303,0.1167 0.0202,0.0257 0.0505,0.0386 0.0908,0.0386 0.0485,0 0.0868,-0.0155 0.11474,-0.0464 0.0283,-0.0309 0.0425,-0.0731 0.0425,-0.12646 l 0,-0.31006 0.0898,0 0,0.54688 -0.0898,0 0,-0.084 c -0.0218,0.0332 -0.0472,0.0579 -0.0762,0.0742 -0.0286,0.0159 -0.062,0.0239 -0.1001,0.0239 -0.0628,0 -0.11051,-0.0195 -0.14306,-0.0586 -0.0326,-0.0391 -0.0488,-0.0962 -0.0488,-0.17138 m 0.22607,-0.34424 0,0"
-         style=""
-         id="path3015" />
-      <path
-         d="m 789.03149,690.98651 c 0.0225,-0.0404 0.0493,-0.0701 0.0806,-0.0893 0.0312,-0.0192 0.068,-0.0288 0.11035,-0.0288 0.057,0 0.10091,0.02 0.13184,0.0601 0.0309,0.0397 0.0464,0.0964 0.0464,0.16992 l 0,0.33008 -0.0903,0 0,-0.32715 c 0,-0.0524 -0.009,-0.0913 -0.0278,-0.1167 -0.0186,-0.0254 -0.0469,-0.0381 -0.085,-0.0381 -0.0465,0 -0.0833,0.0155 -0.11035,0.0464 -0.027,0.0309 -0.0405,0.0731 -0.0405,0.12646 l 0,0.30909 -0.0903,0 0,-0.32715 c 0,-0.0527 -0.009,-0.0916 -0.0278,-0.1167 -0.0186,-0.0254 -0.0472,-0.0381 -0.0859,-0.0381 -0.0459,0 -0.0824,0.0156 -0.10938,0.0469 -0.027,0.0309 -0.0405,0.0729 -0.0405,0.12597 l 0,0.30909 -0.0903,0 0,-0.54688 0.0903,0 0,0.085 c 0.0205,-0.0335 0.0451,-0.0583 0.0737,-0.0742 0.0286,-0.016 0.0627,-0.0239 0.10205,-0.0239 0.0397,0 0.0734,0.0101 0.10107,0.0303 0.028,0.0202 0.0487,0.0495 0.062,0.0879"
-         style=""
-         id="path3017" />
-      <path
-         d="m 786.89722,692.21454 0,-0.2959 0.0898,0 0,0.75977 -0.0898,0 0,-0.082 c -0.0189,0.0326 -0.0428,0.0568 -0.0718,0.0728 -0.0286,0.0156 -0.0631,0.0234 -0.10352,0.0234 -0.0661,0 -0.11995,-0.0264 -0.16162,-0.0791 -0.0413,-0.0527 -0.062,-0.12207 -0.062,-0.208 0,-0.0859 0.0207,-0.15528 0.062,-0.20801 0.0417,-0.0527 0.0955,-0.0791 0.16162,-0.0791 0.0404,0 0.0749,0.008 0.10352,0.0239 0.029,0.0156 0.0529,0.0397 0.0718,0.0723 m -0.30616,0.19092 c 0,0.0661 0.0135,0.118 0.0405,0.15576 0.0274,0.0374 0.0648,0.0562 0.11231,0.0562 0.0475,0 0.085,-0.0187 0.1123,-0.0562 0.0273,-0.0378 0.041,-0.0897 0.041,-0.15576 0,-0.0661 -0.0137,-0.11784 -0.041,-0.15528 -0.0273,-0.0378 -0.0648,-0.0566 -0.1123,-0.0566 -0.0475,0 -0.085,0.0189 -0.11231,0.0566 -0.027,0.0374 -0.0405,0.0892 -0.0405,0.15528"
-         style=""
-         id="path3019" />
-      <path
-         d="m 787.38403,692.19452 c -0.0482,0 -0.0863,0.0189 -0.11425,0.0566 -0.028,0.0374 -0.042,0.0889 -0.042,0.1543 0,0.0654 0.0138,0.11702 0.0415,0.15478 0.028,0.0374 0.0662,0.0562 0.11474,0.0562 0.0478,0 0.0858,-0.0189 0.11377,-0.0566 0.028,-0.0378 0.042,-0.0892 0.042,-0.15429 0,-0.0648 -0.014,-0.11605 -0.042,-0.15381 -0.028,-0.0381 -0.0659,-0.0571 -0.11377,-0.0571 m 0,-0.0762 c 0.0781,0 0.13949,0.0254 0.18409,0.0762 0.0446,0.0508 0.0669,0.12109 0.0669,0.21094 0,0.0895 -0.0223,0.15983 -0.0669,0.21093 -0.0446,0.0508 -0.10596,0.0762 -0.18409,0.0762 -0.0785,0 -0.13997,-0.0254 -0.18457,-0.0762 -0.0443,-0.0511 -0.0664,-0.12142 -0.0664,-0.21093 0,-0.0898 0.0221,-0.16016 0.0664,-0.21094 0.0446,-0.0508 0.10612,-0.0762 0.18457,-0.0762"
-         style=""
-         id="path3021" />
-      <path
-         d="m 787.78345,691.91864 0.0898,0 0,0.75977 -0.0898,0 0,-0.75977"
-         style=""
-         id="path3023" />
-      <path
-         d="m 788.27271,692.19452 c -0.0482,0 -0.0863,0.0189 -0.11426,0.0566 -0.028,0.0374 -0.042,0.0889 -0.042,0.1543 -10e-6,0.0654 0.0138,0.11702 0.0415,0.15478 0.028,0.0374 0.0662,0.0562 0.11475,0.0562 0.0479,0 0.0858,-0.0189 0.11376,-0.0566 0.028,-0.0378 0.042,-0.0892 0.042,-0.15429 0,-0.0648 -0.014,-0.11605 -0.042,-0.15381 -0.028,-0.0381 -0.0659,-0.0571 -0.11376,-0.0571 m 0,-0.0762 c 0.0781,0 0.13948,0.0254 0.18408,0.0762 0.0446,0.0508 0.0669,0.12109 0.0669,0.21094 0,0.0895 -0.0223,0.15983 -0.0669,0.21093 -0.0446,0.0508 -0.10596,0.0762 -0.18408,0.0762 -0.0785,0 -0.13998,-0.0254 -0.18458,-0.0762 -0.0443,-0.0511 -0.0664,-0.12142 -0.0664,-0.21093 0,-0.0898 0.0221,-0.16016 0.0664,-0.21094 0.0446,-0.0508 0.10612,-0.0762 0.18458,-0.0762"
-         style=""
-         id="path3025" />
-      <path
-         d="m 788.98901,692.21552 c -0.0101,-0.006 -0.0212,-0.0101 -0.0332,-0.0127 -0.0117,-0.003 -0.0247,-0.004 -0.0391,-0.004 -0.0508,0 -0.0898,0.0166 -0.11719,0.0498 -0.027,0.0329 -0.0405,0.0802 -0.0405,0.14209 l 0,0.28809 -0.0903,0 0,-0.54688 0.0903,0 0,0.085 c 0.0189,-0.0332 0.0435,-0.0578 0.0737,-0.0737 0.0303,-0.0163 0.0671,-0.0244 0.11036,-0.0244 0.006,0 0.013,4.9e-4 0.0205,0.001 0.007,6.5e-4 0.0158,0.002 0.0249,0.003 l 4.8e-4,0.0923"
-         style=""
-         id="path3027" />
-      <path
-         d="m 786.88599,693.39764 0,0.085 c -0.0254,-0.013 -0.0518,-0.0228 -0.0791,-0.0293 -0.0273,-0.007 -0.0557,-0.01 -0.085,-0.01 -0.0446,0 -0.0781,0.007 -0.10058,0.0205 -0.0221,0.0137 -0.0332,0.0342 -0.0332,0.0615 0,0.0208 0.008,0.0373 0.0239,0.0493 0.0159,0.0117 0.048,0.023 0.0962,0.0337 l 0.0308,0.007 c 0.0638,0.0137 0.10905,0.033 0.13575,0.0581 0.027,0.0247 0.0405,0.0594 0.0405,0.10401 0,0.0508 -0.0202,0.091 -0.0605,0.1206 -0.04,0.0296 -0.0952,0.0444 -0.16553,0.0444 -0.0293,0 -0.0599,-0.003 -0.0918,-0.009 -0.0316,-0.006 -0.0649,-0.014 -0.1001,-0.0254 l 0,-0.0928 c 0.0332,0.0173 0.0659,0.0303 0.0982,0.0391 0.0322,0.008 0.0641,0.0127 0.0957,0.0127 0.0423,0 0.0749,-0.007 0.0977,-0.0215 0.0228,-0.0147 0.0342,-0.0352 0.0342,-0.0615 0,-0.0244 -0.008,-0.0431 -0.0249,-0.0562 -0.0163,-0.013 -0.0522,-0.0255 -0.10791,-0.0376 l -0.0312,-0.007 c -0.0557,-0.0117 -0.0959,-0.0296 -0.12061,-0.0537 -0.0247,-0.0244 -0.0371,-0.0578 -0.0371,-0.1001 0,-0.0514 0.0182,-0.0912 0.0547,-0.11914 0.0365,-0.028 0.0882,-0.042 0.15527,-0.042 0.0332,0 0.0644,0.002 0.0937,0.007 0.0293,0.005 0.0563,0.0122 0.0811,0.022"
-         style=""
-         id="path3029" />
-      <path
-         d="m 787.05884,693.38153 0.0898,0 0,0.54688 -0.0898,0 0,-0.54688 m 0,-0.21289 0.0898,0 0,0.11377 -0.0898,0 0,-0.11377"
-         style=""
-         id="path3031" />
-      <path
-         d="m 787.42505,693.22626 0,0.15527 0.18506,0 0,0.0698 -0.18506,0 0,0.29688 c 0,0.0446 0.006,0.0732 0.0181,0.0859 0.0124,0.0127 0.0373,0.019 0.0747,0.019 l 0.0923,0 0,0.0752 -0.0923,0 c -0.0693,0 -0.11719,-0.0129 -0.14355,-0.0386 -0.0264,-0.026 -0.0396,-0.0732 -0.0396,-0.1416 l 0,-0.29688 -0.0659,0 0,-0.0698 0.0659,0 0,-0.15527 0.0903,0"
-         style=""
-         id="path3033" />
-      <path
-         d="m 788.29565,693.6535 c -0.0726,0 -0.12288,0.008 -0.15087,0.0249 -0.028,0.0166 -0.042,0.0449 -0.042,0.085 0,0.0319 0.0104,0.0573 0.0312,0.0762 0.0212,0.0185 0.0498,0.0278 0.0859,0.0278 0.0498,0 0.0897,-0.0176 0.11963,-0.0527 0.0303,-0.0355 0.0454,-0.0825 0.0454,-0.14112 l 0,-0.02 -0.0894,0 m 0.1792,-0.0371 0,0.31202 -0.0898,0 0,-0.083 c -0.0205,0.0332 -0.0461,0.0578 -0.0767,0.0737 -0.0306,0.0156 -0.068,0.0234 -0.11231,0.0234 -0.056,0 -0.10058,-0.0156 -0.13378,-0.0469 -0.0329,-0.0316 -0.0493,-0.0737 -0.0493,-0.12646 0,-0.0615 0.0205,-0.10791 0.0615,-0.13916 0.0413,-0.0312 0.10287,-0.0469 0.18457,-0.0469 l 0.12598,0 0,-0.009 c 0,-0.0413 -0.0137,-0.0732 -0.041,-0.0957 -0.027,-0.0228 -0.0651,-0.0342 -0.11425,-0.0342 -0.0312,0 -0.0617,0.004 -0.0913,0.0112 -0.0296,0.007 -0.0581,0.0187 -0.0854,0.0337 l 0,-0.083 c 0.0329,-0.0127 0.0648,-0.0221 0.0957,-0.0283 0.0309,-0.007 0.061,-0.01 0.0903,-0.01 0.0791,0 0.13819,0.0205 0.17725,0.0615 0.0391,0.041 0.0586,0.10319 0.0586,0.18652"
-         style=""
-         id="path3035" />
-      <path
-         d="m 789.08618,693.48651 c 0.0225,-0.0404 0.0493,-0.0701 0.0806,-0.0893 0.0312,-0.0192 0.068,-0.0288 0.11035,-0.0288 0.057,0 0.10091,0.02 0.13184,0.0601 0.0309,0.0397 0.0464,0.0964 0.0464,0.16992 l 0,0.33008 -0.0903,0 0,-0.32715 c 0,-0.0524 -0.009,-0.0913 -0.0278,-0.1167 -0.0186,-0.0254 -0.0469,-0.0381 -0.085,-0.0381 -0.0466,0 -0.0833,0.0155 -0.11035,0.0464 -0.027,0.0309 -0.0405,0.0731 -0.0405,0.12646 l 0,0.30909 -0.0903,0 0,-0.32715 c 0,-0.0527 -0.009,-0.0916 -0.0278,-0.1167 -0.0186,-0.0254 -0.0472,-0.0381 -0.0859,-0.0381 -0.0459,0 -0.0824,0.0156 -0.10938,0.0469 -0.027,0.0309 -0.0405,0.0729 -0.0405,0.12597 l 0,0.30909 -0.0903,0 0,-0.54688 0.0903,0 0,0.085 c 0.0205,-0.0335 0.0451,-0.0583 0.0737,-0.0742 0.0286,-0.016 0.0627,-0.0239 0.10206,-0.0239 0.0397,0 0.0734,0.0101 0.10107,0.0303 0.028,0.0202 0.0487,0.0495 0.062,0.0879"
-         style=""
-         id="path3037" />
-      <path
-         d="m 790.10278,693.63251 0,0.0439 -0.41308,0 c 0.004,0.0618 0.0225,0.10905 0.0557,0.1416 0.0335,0.0322 0.0801,0.0483 0.13965,0.0483 0.0345,0 0.0679,-0.004 0.1001,-0.0127 0.0326,-0.008 0.0648,-0.0212 0.0967,-0.0381 l 0,0.085 c -0.0322,0.0137 -0.0653,0.0241 -0.0991,0.0312 -0.0339,0.007 -0.0682,0.0108 -0.10303,0.0108 -0.0872,0 -0.15641,-0.0254 -0.20752,-0.0762 -0.0508,-0.0508 -0.0762,-0.11946 -0.0762,-0.20605 0,-0.0895 0.0241,-0.16048 0.0723,-0.21289 0.0485,-0.0527 0.11377,-0.0791 0.1958,-0.0791 0.0736,0 0.13168,0.0238 0.17432,0.0713 0.043,0.0472 0.0645,0.11149 0.0645,0.19287 m -0.0898,-0.0264 c -6.5e-4,-0.0491 -0.0145,-0.0884 -0.0415,-0.11768 -0.0267,-0.0293 -0.0622,-0.0439 -0.10645,-0.0439 -0.0501,0 -0.0903,0.0142 -0.12061,0.0425 -0.0299,0.0283 -0.0472,0.0682 -0.0517,0.11963 l 0.32031,-4.9e-4"
-         style=""
-         id="path3039" />
-      <path
-         d="m 790.33911,693.22626 0,0.15527 0.18506,0 0,0.0698 -0.18506,0 0,0.29688 c 0,0.0446 0.006,0.0732 0.0181,0.0859 0.0124,0.0127 0.0373,0.019 0.0747,0.019 l 0.0923,0 0,0.0752 -0.0923,0 c -0.0693,0 -0.11718,-0.0129 -0.14355,-0.0386 -0.0264,-0.026 -0.0395,-0.0732 -0.0395,-0.1416 l 0,-0.29688 -0.0659,0 0,-0.0698 0.0659,0 0,-0.15527 0.0903,0"
-         style=""
-         id="path3041" />
-    </g>
+       id="rect7896"
+       style="fill:url(#radialGradient7968);fill-opacity:1;stroke:none" />
+    <path
+       d="m 790.33911,693.22626 c -0.0498,0.19786 0.33032,0.17787 0.003,0.27815 -0.16998,0.24799 0.39939,0.51157 -0.0311,0.38026 -0.0547,-0.17272 -0.19121,-0.57992 0.0276,-0.65857 m -0.23638,0.40635 c -0.1524,0.0463 -0.6328,0.0553 -0.24172,0.21827 0.48594,0.05 -0.34395,0.2177 -0.26091,-0.17076 -0.08,-0.37141 0.5251,-0.43406 0.50275,-0.0476 m -0.0898,-0.0264 c 0.0121,-0.34938 -0.523,0.0801 -0.0661,1.6e-4 0.022,-3e-5 0.0441,-7e-5 0.0661,-1e-4 M 789.086,693.4864 c 0.29829,-0.46808 0.54605,0.50739 0.27992,0.36129 0.16156,-0.25017 -0.25661,-0.58879 -0.25488,-0.19318 0.0618,0.20786 -0.16306,0.36284 -0.0814,0.0576 0.0107,-0.40895 -0.3951,-0.2098 -0.28228,0.0968 -0.10398,0.30793 -0.19195,-0.59656 0.0363,-0.38389 0.11037,-0.0424 0.2633,-0.11931 0.3025,0.062 m -0.79072,0.16676 c -0.35692,-0.0559 0.0391,0.45637 0.0912,0.0607 0.0111,-0.0474 -0.0478,-0.0975 -0.0913,-0.0606 m 0.1792,-0.0371 c 0.0389,0.27609 4.8e-4,0.31202 -0.23096,0.30993 -0.40958,0.0339 -0.12848,-0.45975 0.12931,-0.3933 -0.0182,-0.14721 -0.50917,-0.032 -0.16875,-0.16893 0.13714,-0.0119 0.30604,0.0969 0.27048,0.25186 m -1.04972,-0.38964 c -0.0498,0.19787 0.33033,0.17786 0.003,0.27815 -0.16997,0.24801 0.39941,0.51157 -0.0312,0.38026 -0.0548,-0.17265 -0.1912,-0.5799 0.0275,-0.65857 m -0.36616,0.15537 c 0.24316,0.0804 0.005,0.86043 -0.008,0.29992 0.004,-0.10008 0.0106,-0.19944 0.008,-0.29992 z m 0,-0.21289 c 0.22907,-0.0248 -0.0564,0.25715 0,0 z m -0.17285,0.229 c -0.0882,0.10339 -0.47525,0.0905 -0.12796,0.20033 0.32998,0.11579 -0.0901,0.56917 -0.25377,0.26243 0.35714,0.0875 0.26894,-0.20613 0.0291,-0.26075 -0.0991,-0.20406 0.219,-0.31306 0.35275,-0.20238 m 2.10283,-1.18179 c -0.31133,-0.19291 -0.2311,0.78642 -0.32232,0.2231 -0.003,-0.21834 -0.0409,-0.33207 0.20367,-0.28984 0.0532,-0.0761 0.16542,-0.007 0.1188,0.0663 m -0.71625,-0.0206 c -0.45977,0.0927 0.20216,0.73875 0.1549,0.16183 -0.008,-0.0784 -0.0689,-0.16424 -0.1549,-0.16175 m 0,-0.0762 c 0.53548,0.0229 0.0809,0.95772 -0.22515,0.4264 -0.0799,-0.16794 0.006,-0.44314 0.22515,-0.4264 z m -0.48925,-0.19976 c 0.18272,0.15398 0.0847,0.54861 0.0579,0.75376 -0.12668,-0.16038 -0.0274,-0.52657 -0.0579,-0.75376 z m -0.39942,0.27588 c -0.45976,0.0927 0.20217,0.73874 0.15491,0.16183 -0.008,-0.0784 -0.0689,-0.16425 -0.15491,-0.16175 m 0,-0.0762 c 0.53548,0.0229 0.0809,0.95772 -0.22514,0.4264 -0.0799,-0.16793 0.006,-0.44314 0.22514,-0.4264 z m -0.4868,0.0961 c -0.0625,-0.16476 0.0794,-0.45885 0.09,-0.12059 -0.0239,0.26428 0.11747,0.64725 -0.22523,0.59616 -0.43366,0.0367 -0.28113,-0.79293 0.1054,-0.51731 l 0.0299,0.0419 m -0.30616,0.19092 c 0.047,0.51755 0.63135,-0.23866 0.10766,-0.19898 -0.0793,0.0264 -0.13034,0.11753 -0.10766,0.19898 z m 2.44043,-1.41901 c 0.29826,-0.46803 0.54607,0.50725 0.27992,0.36136 0.16147,-0.25014 -0.25659,-0.58875 -0.25486,-0.19318 0.0619,0.20787 -0.16304,0.36286 -0.0814,0.0576 0.0107,-0.40895 -0.3951,-0.2098 -0.28228,0.0968 -0.10398,0.30793 -0.19195,-0.59655 0.0362,-0.3839 0.11037,-0.0424 0.26328,-0.11929 0.30249,0.062 m -1.07,0.22585 c -0.0292,-0.18312 0.0291,-0.522 0.10111,-0.12385 -0.10501,0.40792 0.38701,0.2743 0.27403,-0.0627 0.0564,-0.3908 0.20452,0.56128 -0.0268,0.36504 -0.17034,0.0747 -0.37234,0.0484 -0.34922,-0.17885 m -0.16355,-0.31494 c -0.0882,0.10339 -0.47525,0.0905 -0.12796,0.20033 0.32998,0.11579 -0.0901,0.56917 -0.25377,0.26243 0.35714,0.0875 0.26894,-0.20613 0.0291,-0.26075 -0.0991,-0.20406 0.219,-0.31306 0.35275,-0.20238 m -0.89668,0.44906 c 0.0709,0.22245 -0.11848,0.41831 -0.0905,0.067 -0.0102,-0.29611 -0.0793,-0.68343 0.34185,-0.49802 0.37303,0.11125 0.0193,0.78296 -0.25134,0.43095 m 0.30567,-0.19091 c -0.0477,-0.51709 -0.63035,0.23885 -0.1077,0.199 0.0793,-0.0265 0.1303,-0.11753 0.1077,-0.199 z m -0.66993,-0.2739 c 0.24336,0.0802 0.006,0.86052 -0.008,0.29994 0.004,-0.10009 0.0107,-0.19945 0.008,-0.29994 z m 0,-0.21289 c 0.22926,-0.0249 -0.0564,0.25727 0,0 z m 2.58203,-0.93213 c 0.29827,-0.46803 0.54607,0.50727 0.27992,0.36136 0.16146,-0.25013 -0.25657,-0.58874 -0.25484,-0.19316 0.0618,0.20786 -0.16306,0.36284 -0.0814,0.0576 0.0107,-0.40895 -0.3951,-0.2098 -0.28228,0.0968 -0.10398,0.30793 -0.19195,-0.59655 0.0363,-0.38389 0.11037,-0.0424 0.26329,-0.11932 0.30249,0.062 m -0.57342,0.14577 c -0.15244,0.0463 -0.6328,0.0553 -0.24172,0.21831 0.48594,0.0499 -0.34396,0.21764 -0.26091,-0.1708 -0.08,-0.37142 0.52507,-0.43399 0.50275,-0.0476 m -0.0898,-0.0264 c 0.0121,-0.34938 -0.52298,0.0801 -0.066,1.6e-4 0.022,-3e-5 0.0441,-7e-5 0.0661,-10e-5 m -0.4519,-0.14058 c -0.31132,-0.1929 -0.23109,0.78642 -0.32231,0.2231 -0.003,-0.21839 -0.0409,-0.33204 0.20369,-0.28978 0.0533,-0.0761 0.16541,-0.007 0.11871,0.0664 m -0.71627,-0.0206 c -0.45977,0.0927 0.20216,0.73875 0.1549,0.16183 -0.008,-0.0784 -0.0689,-0.16424 -0.1549,-0.16175 m 0,-0.0762 c 0.53548,0.0229 0.0809,0.95772 -0.22514,0.4264 -0.0799,-0.16794 0.006,-0.44314 0.22514,-0.4264 z m -0.74706,-0.169 c 0.25031,0.19128 -0.10354,0.79515 0.43395,0.67146 -0.24652,0.23651 -0.54896,-0.0523 -0.43399,-0.36033 0,-0.10371 0,-0.20743 0,-0.31114"
+       id="path3041"
+       style="fill:#000000;fill-opacity:1;stroke:none" />
     <path
-       style="fill:none;stroke:#878787;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
        d="m 789.74329,687.77624 0,2.35938 2.34375,0"
        id="path7894"
-       inkscape:connector-curvature="0" />
+       style="fill:none;stroke:#878787;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
   </g>
 </svg>
diff --git a/skins/vector/images/edit-icon.png b/skins/vector/images/edit-icon.png
deleted file mode 100644 (file)
index 43e4691..0000000
Binary files a/skins/vector/images/edit-icon.png and /dev/null differ
index d77b879..3918bef 100644 (file)
@@ -1,87 +1,14 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="10"
    height="10"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="external-link-ltr-icon.svg"
-   inkscape:export-filename="/run/user/1000/gvfs/sftp:host=users.v-lo.krakow.pl,user=m4tx/home/WWW/m4tx/WWW/Wikimedia/skins/vector/images/external-link-ltr-icon.png"
-   inkscape:export-xdpi="144.13724"
-   inkscape:export-ydpi="144.13724">
-  <defs
-     id="defs4">
-    <marker
-       inkscape:stockid="Club"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Club"
-       style="overflow:visible">
-      <path
-         id="path3996"
-         d="M -1.5971367,-7.0977635 C -3.4863874,-7.0977635 -5.0235187,-5.5606321 -5.0235187,-3.6713813 C -5.0235187,-3.0147015 -4.7851656,-2.4444556 -4.4641095,-1.9232271 C -4.5028609,-1.8911157 -4.5437814,-1.8647646 -4.5806531,-1.8299921 C -5.2030765,-2.6849849 -6.1700514,-3.2751330 -7.3077730,-3.2751330 C -9.1970245,-3.2751331 -10.734155,-1.7380016 -10.734155,0.15124914 C -10.734155,2.0404999 -9.1970245,3.5776313 -7.3077730,3.5776313 C -6.3143268,3.5776313 -5.4391540,3.1355702 -4.8137404,2.4588126 C -4.9384274,2.8137041 -5.0235187,3.1803000 -5.0235187,3.5776313 C -5.0235187,5.4668819 -3.4863874,7.0040135 -1.5971367,7.0040135 C 0.29211394,7.0040135 1.8292454,5.4668819 1.8292454,3.5776313 C 1.8292454,2.7842354 1.5136868,2.0838028 1.0600576,1.5031550 C 2.4152718,1.7663868 3.7718375,2.2973711 4.7661444,3.8340272 C 4.0279463,3.0958289 3.5540908,1.7534117 3.5540908,-0.058529361 L 2.9247554,-0.10514681 L 3.5074733,-0.12845553 C 3.5074733,-1.9403966 3.9580199,-3.2828138 4.6962183,-4.0210121 C 3.7371277,-2.5387813 2.4390549,-1.9946496 1.1299838,-1.7134486 C 1.5341802,-2.2753578 1.8292454,-2.9268556 1.8292454,-3.6713813 C 1.8292454,-5.5606319 0.29211394,-7.0977635 -1.5971367,-7.0977635 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.74587913pt"
-         transform="scale(0.6)" />
-    </marker>
-    <marker
-       inkscape:stockid="DiamondM"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="DiamondM"
-       style="overflow:visible">
-      <path
-         id="path3849"
-         d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
-         transform="scale(0.4)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lstart"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Lstart"
-       style="overflow:visible">
-      <path
-         id="path3767"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
-         transform="scale(0.8) translate(12.5,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.627417"
-     inkscape:cx="11.725312"
-     inkscape:cy="5.6780159"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1041"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1" />
+   id="svg2">
   <metadata
      id="metadata7">
     <rdf:RDF>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-826.42859,-698.79077)">
+     transform="translate(-826.42859,-698.79077)"
+     id="layer1">
     <rect
-       style="fill:#ffffff;stroke:#0066cc;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
-       id="rect2996"
        width="5.9821429"
        height="5.9821429"
        x="826.92859"
        y="702.30865"
-       inkscape:export-filename="/home/m4tx/Pulpit/eheheh.png"
-       inkscape:export-xdpi="90.085777"
-       inkscape:export-ydpi="90.085777" />
+       id="rect2996"
+       style="fill:#ffffff;fill-opacity:1;stroke:#0066cc;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
     <g
-       id="g4815"
        transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,762.87,-359.88339)"
-       inkscape:export-filename="/home/m4tx/Pulpit/eheheh.png"
-       inkscape:export-xdpi="90.085777"
-       inkscape:export-ydpi="90.085777">
+       id="g4815">
       <path
-         sodipodi:nodetypes="cccccccccc"
-         inkscape:connector-curvature="0"
-         id="path4777"
          d="m 796.90819,700.28317 3.70127,-3.70126 3.81174,3.81175 -0.0189,2.20336 -1.85234,0 0,3.8543 -3.80233,0 0,-3.97108 -1.8536,0 z"
+         id="path4777"
          style="fill:#0066ff;fill-opacity:1;stroke:none" />
       <path
-         sodipodi:nodetypes="cccccccc"
-         inkscape:connector-curvature="0"
-         id="path4779"
          d="m 800.60946,698.00244 3.46986,3.43865 -2.5702,0 0,4.07436 -1.7362,0 0,-4.07436 -2.61754,-3.6e-4 z"
+         id="path4779"
          style="fill:#ffffff;fill-opacity:1;stroke:none" />
     </g>
   </g>
index 7ddf89e..326a425 100644 (file)
@@ -7,81 +7,10 @@
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="10"
    height="10"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="external-link-ltr-icon.svg"
-   inkscape:export-filename="/run/user/1000/gvfs/sftp:host=users.v-lo.krakow.pl,user=m4tx/home/WWW/m4tx/WWW/Wikimedia/skins/vector/images/external-link-ltr-icon.png"
-   inkscape:export-xdpi="144.13724"
-   inkscape:export-ydpi="144.13724">
-  <defs
-     id="defs4">
-    <marker
-       inkscape:stockid="Club"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Club"
-       style="overflow:visible">
-      <path
-         id="path3996"
-         d="M -1.5971367,-7.0977635 C -3.4863874,-7.0977635 -5.0235187,-5.5606321 -5.0235187,-3.6713813 C -5.0235187,-3.0147015 -4.7851656,-2.4444556 -4.4641095,-1.9232271 C -4.5028609,-1.8911157 -4.5437814,-1.8647646 -4.5806531,-1.8299921 C -5.2030765,-2.6849849 -6.1700514,-3.2751330 -7.3077730,-3.2751330 C -9.1970245,-3.2751331 -10.734155,-1.7380016 -10.734155,0.15124914 C -10.734155,2.0404999 -9.1970245,3.5776313 -7.3077730,3.5776313 C -6.3143268,3.5776313 -5.4391540,3.1355702 -4.8137404,2.4588126 C -4.9384274,2.8137041 -5.0235187,3.1803000 -5.0235187,3.5776313 C -5.0235187,5.4668819 -3.4863874,7.0040135 -1.5971367,7.0040135 C 0.29211394,7.0040135 1.8292454,5.4668819 1.8292454,3.5776313 C 1.8292454,2.7842354 1.5136868,2.0838028 1.0600576,1.5031550 C 2.4152718,1.7663868 3.7718375,2.2973711 4.7661444,3.8340272 C 4.0279463,3.0958289 3.5540908,1.7534117 3.5540908,-0.058529361 L 2.9247554,-0.10514681 L 3.5074733,-0.12845553 C 3.5074733,-1.9403966 3.9580199,-3.2828138 4.6962183,-4.0210121 C 3.7371277,-2.5387813 2.4390549,-1.9946496 1.1299838,-1.7134486 C 1.5341802,-2.2753578 1.8292454,-2.9268556 1.8292454,-3.6713813 C 1.8292454,-5.5606319 0.29211394,-7.0977635 -1.5971367,-7.0977635 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.74587913pt"
-         transform="scale(0.6)" />
-    </marker>
-    <marker
-       inkscape:stockid="DiamondM"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="DiamondM"
-       style="overflow:visible">
-      <path
-         id="path3849"
-         d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
-         transform="scale(0.4)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lstart"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Lstart"
-       style="overflow:visible">
-      <path
-         id="path3767"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
-         transform="scale(0.8) translate(12.5,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.627417"
-     inkscape:cx="11.725312"
-     inkscape:cy="5.6780159"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1041"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1" />
+   id="svg2">
   <metadata
      id="metadata7">
     <rdf:RDF>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-826.42859,-698.79077)">
+     transform="translate(-826.42859,-698.79077)"
+     id="layer1">
     <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:#0066cc;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       id="rect2996"
        width="5.9821429"
        height="5.9821429"
        x="-835.92859"
        y="702.30865"
-       inkscape:export-filename="/home/m4tx/Pulpit/eheheh.png"
-       inkscape:export-xdpi="90.085777"
-       inkscape:export-ydpi="90.085777"
-       transform="scale(-1,1)" />
+       transform="scale(-1,1)"
+       id="rect2996"
+       style="fill:#ffffff;fill-opacity:1;stroke:#0066cc;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
     <g
-       id="g4815"
        transform="matrix(-0.70710678,0.70710678,0.70710678,0.70710678,899.98717,-359.88339)"
-       inkscape:export-filename="/home/m4tx/Pulpit/eheheh.png"
-       inkscape:export-xdpi="90.085777"
-       inkscape:export-ydpi="90.085777">
+       id="g4815">
       <path
-         sodipodi:nodetypes="cccccccccc"
-         inkscape:connector-curvature="0"
-         id="path4777"
          d="m 796.90819,700.28317 3.70127,-3.70126 3.81174,3.81175 -0.0189,2.20336 -1.85234,0 0,3.8543 -3.80233,0 0,-3.97108 -1.8536,0 z"
+         id="path4777"
          style="fill:#0066ff;fill-opacity:1;stroke:none" />
       <path
-         sodipodi:nodetypes="cccccccc"
-         inkscape:connector-curvature="0"
-         id="path4779"
          d="m 800.60946,698.00244 3.46986,3.43865 -2.5702,0 0,4.07436 -1.7362,0 0,-4.07436 -2.61754,-3.6e-4 z"
+         id="path4779"
          style="fill:#ffffff;fill-opacity:1;stroke:none" />
     </g>
   </g>
index cd2106d..98d9041 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -8,83 +6,34 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="10"
    height="10"
-   id="svg7339"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="Nowy dokument 30">
+   id="svg7339">
   <defs
      id="defs7341">
     <linearGradient
        id="linearGradient7918">
       <stop
-         style="stop-color:#e2e2e2;stop-opacity:1;"
-         offset="0"
-         id="stop7920" />
-      <stop
-         style="stop-color:#f8f8f8;stop-opacity:1;"
-         offset="1"
-         id="stop7922" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient7902">
-      <stop
-         style="stop-color:#e2e2e2;stop-opacity:1;"
-         offset="0"
-         id="stop7904" />
+         id="stop7920"
+         style="stop-color:#e2e2e2;stop-opacity:1"
+         offset="0" />
       <stop
-         style="stop-color:#e2e2e2;stop-opacity:1;"
-         offset="1"
-         id="stop7906" />
+         id="stop7922"
+         style="stop-color:#f8f8f8;stop-opacity:1"
+         offset="1" />
     </linearGradient>
     <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient7918"
-       id="radialGradient7924"
        cx="-16.71875"
        cy="3.344311"
+       r="2"
        fx="-16.71875"
        fy="3.344311"
-       r="2"
-       gradientTransform="matrix(1.4065972,0,0,2.1428629,6.7977966,-4.7132748)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient7918"
        id="radialGradient7931"
+       xlink:href="#linearGradient7918"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.4065972,0,0,2.1428629,6.7977966,-4.7132748)"
-       cx="-16.71875"
-       cy="3.344311"
-       fx="-16.71875"
-       fy="3.344311"
-       r="2" />
+       gradientTransform="matrix(1.4065972,0,0,2.1428629,6.7977966,-4.7132748)" />
   </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.627417"
-     inkscape:cx="1.5361037"
-     inkscape:cy="9.1135498"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1014"
-     inkscape:window-x="0"
-     inkscape:window-y="27"
-     inkscape:window-maximized="1" />
   <metadata
      id="metadata7344">
     <rdf:RDF>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-783.57141,-687.36218)">
+     transform="translate(-783.57141,-687.36218)"
+     id="layer1">
     <g
-       id="g7926"
-       transform="translate(19.984375,0.08593751)">
+       transform="translate(19.984375,0.08593751)"
+       id="g7926">
       <path
+         d="m -18.5,0.40625 0,9.09375 7.03125,0 0,-6.84375 -2.25,-2.25 -4.78125,0 z"
          transform="translate(783.57141,687.36218)"
          id="rect7358"
-         d="m -18.5,0.40625 0,9.09375 7.03125,0 0,-6.84375 -2.25,-2.25 -4.78125,0 z"
-         style="fill:#ffffff;fill-opacity:1;stroke:#878787;stroke-width:0.89999998;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
+         style="fill:#ffffff;fill-opacity:1;stroke:#878787;stroke-width:0.89999998;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
       <path
-         id="rect7896"
-         transform="translate(783.57141,687.36218)"
          d="m -17.03125,2 0,6.09375 4,0 0,-5.28125 -0.84375,0 0,-0.8125 -3.15625,0 z"
-         style="fill:url(#radialGradient7931);fill-opacity:1;stroke:none"
-         inkscape:connector-curvature="0" />
+         transform="translate(783.57141,687.36218)"
+         id="rect7896"
+         style="fill:url(#radialGradient7931);fill-opacity:1;stroke:none" />
       <path
+         d="m -13.8125,0.32812497 0,2.35937503 2.34375,0"
          transform="translate(783.57141,687.36218)"
-         inkscape:connector-curvature="0"
          id="path7894"
-         d="m -13.8125,0.32812497 0,2.35937503 2.34375,0"
          style="fill:none;stroke:#878787;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
     </g>
   </g>
index 1c40d4a..bad5daf 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -8,72 +6,34 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="10"
    height="10"
-   id="svg3813"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="lock-icon.svg">
+   id="svg3813">
   <defs
      id="defs3815">
     <linearGradient
        id="linearGradient4348">
       <stop
-         style="stop-color:#fff8bb;stop-opacity:1;"
-         offset="0"
-         id="stop4350" />
+         id="stop4350"
+         style="stop-color:#fff8bb;stop-opacity:1"
+         offset="0" />
       <stop
-         style="stop-color:#e9d84d;stop-opacity:1;"
-         offset="1"
-         id="stop4352" />
+         id="stop4352"
+         style="stop-color:#e9d84d;stop-opacity:1"
+         offset="1" />
     </linearGradient>
     <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4348"
-       id="radialGradient4354"
        cx="806.97711"
        cy="720.04266"
+       r="4.5721774"
        fx="806.97711"
        fy="720.04266"
-       r="4.5721774"
-       gradientTransform="matrix(0.66177697,-3.2424834e-7,5.5632116e-7,1.1354276,273.09596,-96.976308)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4348"
        id="radialGradient4394"
+       xlink:href="#linearGradient4348"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.66177697,-3.2424834e-7,5.5632116e-7,1.1354276,273.09596,-96.976308)"
-       cx="806.97711"
-       cy="720.04266"
-       fx="806.97711"
-       fy="720.04266"
-       r="4.5721774" />
+       gradientTransform="matrix(0.66177697,-3.2424834e-7,5.5632116e-7,1.1354276,273.09596,-96.976308)" />
   </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="-65.758796"
-     inkscape:cy="-20.849434"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1041"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1" />
   <metadata
      id="metadata3818">
     <rdf:RDF>
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
+        <dc:title></dc:title>
       </cc:Work>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-817.85712,-715.93359)">
+     transform="translate(-817.85712,-715.93359)"
+     id="layer1">
     <g
-       id="g4389"
-       transform="translate(14.984745,-0.12063576)">
+       transform="translate(14.984745,-0.12063576)"
+       id="g4389">
       <rect
-         y="719.4939"
-         x="803.37238"
-         height="6.0609155"
          width="8.1443548"
+         height="6.0609155"
+         x="803.37238"
+         y="719.4939"
          id="rect3832"
          style="fill:url(#radialGradient4394);fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none" />
       <path
-         sodipodi:end="6.2831853"
-         sodipodi:start="3.1415927"
+         d="m 2.4622467,2.0134813 a 2.9673231,1.420527 0 0 1 5.9346461,10e-8 l -2.9673231,0 z"
          transform="matrix(0.98668274,0,0,2.0515802,802.05109,715.32099)"
-         d="m 2.4622467,2.0134813 c 0,-0.7845354 1.3285159,-1.42052694 2.9673232,-1.4205269 1.6388072,3e-8 2.9673229,0.6359916 2.9673229,1.420527 l -2.9673231,0 z"
-         sodipodi:ry="1.420527"
-         sodipodi:rx="2.9673231"
-         sodipodi:cy="2.0134814"
-         sodipodi:cx="5.4295697"
          id="path4346"
-         style="fill:none;stroke:#888a85;stroke-width:0.68014622;stroke-linejoin:miter;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none"
-         sodipodi:type="arc" />
+         style="fill:none;stroke:#888a85;stroke-width:0.68014622;stroke-linejoin:miter;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none" />
       <path
-         style="fill:none;stroke:#ac5f08;stroke-width:1.04513526px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.69072164"
          d="m 807.32587,723.57494 0,-1.12645"
          id="path4368"
-         inkscape:connector-curvature="0" />
+         style="fill:none;stroke:#ac5f08;stroke-width:1.04513526px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.69072164" />
     </g>
   </g>
 </svg>
index 43b4ce8..cab6304 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -8,94 +6,34 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="10"
    height="10"
-   id="svg4396"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="Nowy dokument 10">
+   id="svg4396">
   <defs
      id="defs4398">
     <linearGradient
        id="linearGradient4947">
       <stop
-         style="stop-color:#d2d2d2;stop-opacity:1;"
-         offset="0"
-         id="stop4949" />
-      <stop
-         style="stop-color:#f6f6f6;stop-opacity:0;"
-         offset="1"
-         id="stop4951" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4927">
-      <stop
-         style="stop-color:#888a85;stop-opacity:1;"
-         offset="0"
-         id="stop4929" />
+         id="stop4949"
+         style="stop-color:#d2d2d2;stop-opacity:1"
+         offset="0" />
       <stop
-         style="stop-color:#888a85;stop-opacity:0;"
-         offset="1"
-         id="stop4931" />
+         id="stop4951"
+         style="stop-color:#f6f6f6;stop-opacity:0"
+         offset="1" />
     </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4927"
-       id="linearGradient4933"
-       x1="847.07153"
-       y1="696.06909"
-       x2="847.07153"
-       y2="699.29285"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(14,0)" />
     <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4947"
-       id="radialGradient4953"
        cx="861.14233"
        cy="699.01233"
+       r="4.9871311"
        fx="861.14233"
        fy="699.01233"
-       r="4.987131"
-       gradientTransform="matrix(1.1817158,0,0,1.1856764,-156.48316,-109.77743)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4947"
        id="radialGradient4962"
+       xlink:href="#linearGradient4947"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.1817158,0,0,1.1856764,-156.48316,-109.77743)"
-       cx="861.14233"
-       cy="699.01233"
-       fx="861.14233"
-       fy="699.01233"
-       r="4.987131" />
+       gradientTransform="matrix(1.1817158,0,0,1.1856764,-156.48316,-109.77743)" />
   </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="8"
-     inkscape:cx="17.964337"
-     inkscape:cy="-3.5009398"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1014"
-     inkscape:window-x="0"
-     inkscape:window-y="27"
-     inkscape:window-maximized="1" />
   <metadata
      id="metadata4401">
     <rdf:RDF>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-832.14288,-690.2193)">
+     transform="translate(-832.14288,-690.2193)"
+     id="layer1">
     <g
-       id="g4957"
-       transform="translate(-23.99948,-20.005085)">
+       transform="translate(-23.99948,-20.005085)"
+       id="g4957">
       <path
-         inkscape:connector-curvature="0"
-         id="path4415"
          d="m 856.64003,714.98211 4.51344,-4.27677 4.49122,4.2557 0,4.78239 -8.96019,0 z"
+         id="path4415"
          style="fill:url(#radialGradient4962);fill-opacity:1;stroke:#888a85;stroke-width:0.96960205px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
       <path
-         sodipodi:nodetypes="ccc"
-         style="fill:#a8a7a3;fill-opacity:1;stroke:none"
          d="m 858.18557,715.14414 2.96409,-2.80866 2.94949,2.79482"
          id="path4937"
-         inkscape:connector-curvature="0" />
+         style="fill:#a8a7a3;fill-opacity:1;stroke:none" />
       <path
-         sodipodi:nodetypes="ccccc"
-         inkscape:connector-curvature="0"
-         id="path4955"
          d="m 857.89337,719.26617 3.26025,-3.14859 3.23877,3.11734 -3.24112,-1.90625 z"
+         id="path4955"
          style="fill:#888a85;fill-opacity:1;stroke:none" />
     </g>
   </g>
index b8f2102..e5514a7 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="10"
    height="10"
-   id="svg4983"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="news-icon.svg">
+   id="svg4983">
   <defs
      id="defs4985">
     <linearGradient
-       inkscape:collect="always"
        id="linearGradient5528">
       <stop
-         style="stop-color:#cccccc;stop-opacity:1;"
-         offset="0"
-         id="stop5530" />
+         id="stop5530"
+         style="stop-color:#cccccc;stop-opacity:1"
+         offset="0" />
       <stop
-         style="stop-color:#cccccc;stop-opacity:0;"
-         offset="1"
-         id="stop5532" />
+         id="stop5532"
+         style="stop-color:#cccccc;stop-opacity:0"
+         offset="1" />
     </linearGradient>
     <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient5528"
-       id="linearGradient5534"
        x1="902.61218"
        y1="696.32751"
        x2="902.61218"
        y2="694.04303"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient5528"
-       id="linearGradient5566"
-       gradientUnits="userSpaceOnUse"
-       x1="902.61218"
-       y1="696.32751"
-       x2="902.61218"
-       y2="694.04303" />
-    <linearGradient
-       inkscape:collect="always"
+       id="linearGradient3824"
        xlink:href="#linearGradient5528"
-       id="linearGradient3048"
        gradientUnits="userSpaceOnUse"
-       x1="902.61218"
-       y1="696.32751"
-       x2="902.61218"
-       y2="694.04303"
        gradientTransform="translate(-19.98763,0.00341)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient5528"
-       id="linearGradient3799"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-29.98763,0.00341)"
-       x1="902.61218"
-       y1="696.32751"
-       x2="902.61218"
-       y2="694.04303" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient5528"
-       id="linearGradient3821"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-907.84475,-687.35877)"
-       x1="902.61218"
-       y1="696.32751"
-       x2="902.61218"
-       y2="694.04303" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient5528"
-       id="linearGradient3824"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-19.98763,0.00341)"
-       x1="902.61218"
-       y1="696.32751"
-       x2="902.61218"
-       y2="694.04303" />
   </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="45.254834"
-     inkscape:cx="0.50343757"
-     inkscape:cy="4.9811997"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1041"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1" />
   <metadata
      id="metadata4988">
     <rdf:RDF>
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
+        <dc:title></dc:title>
       </cc:Work>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-877.85712,-687.36218)">
-    <g
-       style="font-size:41.13991928px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
-       id="text5536">
-      <path
-         inkscape:connector-curvature="0"
-         d="m 879.87841,689.39933 0.19335,0 0,0.60364 0.33948,0 0,0.14614 -0.53283,0 0,-0.74978"
-         style="font-size:1.02849805px;font-weight:bold;-inkscape-font-specification:Sans Bold"
-         id="path3051" />
-      <path
-         inkscape:connector-curvature="0"
-         d="m 880.52524,689.58665 0.17978,0 0,0.56246 -0.17978,0 0,-0.56246 m 0,-0.21896 0.17978,0 0,0.14664 -0.17978,0 0,-0.14664"
-         style="font-size:1.02849805px;font-weight:bold;-inkscape-font-specification:Sans Bold"
-         id="path3053" />
-      <path
-         inkscape:connector-curvature="0"
-         d="m 881.05857,690.06775 0,0.29529 -0.17979,0 0,-0.77639 0.17979,0 0,0.0824 c 0.0248,-0.0328 0.0522,-0.0569 0.0824,-0.0723 0.0301,-0.0157 0.0648,-0.0236 0.10396,-0.0236 0.0693,0 0.12621,0.0276 0.17074,0.0829 0.0445,0.0549 0.0668,0.12572 0.0668,0.21243 0,0.0867 -0.0223,0.15769 -0.0668,0.21293 -0.0445,0.0549 -0.10144,0.0824 -0.17074,0.0824 -0.0392,0 -0.0738,-0.008 -0.10396,-0.0231 -0.0301,-0.0157 -0.0576,-0.04 -0.0824,-0.0728 m 0.11952,-0.36409 c -0.0385,0 -0.0681,0.0142 -0.0889,0.0427 -0.0204,0.0281 -0.0306,0.0688 -0.0306,0.12203 0,0.0532 0.0102,0.0941 0.0306,0.12254 0.0208,0.0281 0.0504,0.0422 0.0889,0.0422 0.0385,0 0.0678,-0.0141 0.0879,-0.0422 0.0204,-0.0281 0.0306,-0.069 0.0306,-0.12254 0,-0.0536 -0.0102,-0.0944 -0.0306,-0.12253 -0.0201,-0.0281 -0.0494,-0.0422 -0.0879,-0.0422"
-         style="font-size:1.02849805px;font-weight:bold;-inkscape-font-specification:Sans Bold"
-         id="path3055" />
-      <path
-         inkscape:connector-curvature="0"
-         d="m 882.05543,689.60423 0,0.13659 c -0.0385,-0.0161 -0.0757,-0.0281 -0.11149,-0.0362 -0.0358,-0.008 -0.0696,-0.0121 -0.10144,-0.0121 -0.0341,0 -0.0596,0.004 -0.0763,0.0131 -0.0164,0.008 -0.0246,0.0214 -0.0246,0.0392 0,0.0144 0.006,0.0255 0.0186,0.0332 0.0127,0.008 0.0353,0.0134 0.0678,0.0171 l 0.0316,0.005 c 0.0921,0.0117 0.15401,0.031 0.18582,0.0578 0.0318,0.0268 0.0477,0.0688 0.0477,0.12605 -10e-6,0.0599 -0.0221,0.10496 -0.0663,0.13509 -0.0442,0.0301 -0.11015,0.0452 -0.19787,0.0452 -0.0372,0 -0.0757,-0.003 -0.11551,-0.009 -0.0395,-0.006 -0.0802,-0.0144 -0.12203,-0.0261 l 0,-0.1366 c 0.0358,0.0174 0.0725,0.0305 0.10998,0.0392 0.0378,0.009 0.0762,0.0131 0.115,0.0131 0.0352,0 0.0616,-0.005 0.0793,-0.0146 0.0178,-0.01 0.0266,-0.0241 0.0266,-0.0432 0,-0.0161 -0.006,-0.028 -0.0186,-0.0357 -0.0121,-0.008 -0.0363,-0.0142 -0.0728,-0.0186 l -0.0316,-0.004 c -0.08,-0.01 -0.1361,-0.0286 -0.16824,-0.0557 -0.0321,-0.0271 -0.0482,-0.0683 -0.0482,-0.12354 0,-0.0596 0.0204,-0.10379 0.0613,-0.13258 0.0408,-0.0288 0.10345,-0.0432 0.18782,-0.0432 0.0331,0 0.068,0.003 0.10446,0.008 0.0365,0.005 0.0762,0.0129 0.11902,0.0236"
-         style="font-size:1.02849805px;font-weight:bold;-inkscape-font-specification:Sans Bold"
-         id="path3057" />
-      <path
-         inkscape:connector-curvature="0"
-         d="m 882.22266,689.93015 0,-0.3435 0.18079,0 0,0.0563 c 0,0.0305 -1.7e-4,0.0688 -5e-4,0.115 -3.3e-4,0.0459 -5e-4,0.0765 -5e-4,0.0919 0,0.0452 10e-4,0.0778 0.004,0.0979 0.002,0.0198 0.006,0.0342 0.0121,0.0432 0.007,0.0117 0.0169,0.0208 0.0286,0.0271 0.0121,0.006 0.0258,0.01 0.0412,0.01 0.0375,0 0.067,-0.0144 0.0884,-0.0432 0.0214,-0.0288 0.0321,-0.0688 0.0321,-0.12003 l 0,-0.27771 0.17978,0 0,0.56246 -0.17978,0 0,-0.0814 c -0.0271,0.0328 -0.0559,0.0571 -0.0864,0.0728 -0.0301,0.0154 -0.0634,0.0231 -0.0999,0.0231 -0.0649,0 -0.1145,-0.0199 -0.14865,-0.0598 -0.0338,-0.0398 -0.0507,-0.0978 -0.0507,-0.17376"
-         style="font-size:1.02849805px;font-weight:bold;-inkscape-font-specification:Sans Bold"
-         id="path3059" />
-      <path
-         inkscape:connector-curvature="0"
-         d="m 883.48317,689.68006 c 0.0228,-0.0348 0.0497,-0.0613 0.0809,-0.0793 0.0315,-0.0184 0.066,-0.0276 0.10345,-0.0276 0.0646,0 0.11383,0.0199 0.14765,0.0598 0.0338,0.0398 0.0507,0.0978 0.0507,0.17376 l 0,0.3425 -0.18079,0 0,-0.29328 c 3.3e-4,-0.004 5e-4,-0.009 5e-4,-0.0136 3.3e-4,-0.005 5e-4,-0.0114 5e-4,-0.0201 0,-0.0398 -0.006,-0.0686 -0.0176,-0.0864 -0.0117,-0.0181 -0.0306,-0.0271 -0.0567,-0.0271 -0.0342,0 -0.0606,0.0141 -0.0794,0.0422 -0.0184,0.0281 -0.028,0.0688 -0.0286,0.12203 l 0,0.27621 -0.18079,0 0,-0.29328 c 0,-0.0623 -0.005,-0.10228 -0.0161,-0.12003 -0.0107,-0.0181 -0.0298,-0.0271 -0.0573,-0.0271 -0.0345,0 -0.0611,0.0142 -0.0798,0.0427 -0.0187,0.0281 -0.0281,0.0685 -0.0281,0.12103 l 0,0.27671 -0.18079,0 0,-0.56246 0.18079,0 0,0.0824 c 0.0221,-0.0318 0.0474,-0.0557 0.0758,-0.0718 0.0288,-0.0161 0.0604,-0.0241 0.0949,-0.0241 0.0388,0 0.0732,0.009 0.10295,0.0281 0.0298,0.0187 0.0524,0.045 0.0678,0.0788"
-         style="font-size:1.02849805px;font-weight:bold;-inkscape-font-specification:Sans Bold"
-         id="path3061" />
-    </g>
-    <g
-       transform="scale(1.0447384,0.95717741)"
-       style="font-size:48.46436691px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
-       id="text5540">
-      <path
-         inkscape:connector-curvature="0"
-         d="m 847.3858,720.32852 -0.1621,0.43956 0.3248,0 -0.1627,-0.43956 m -0.0674,-0.11773 0.13548,0 0.33662,0.88327 -0.12423,0 -0.0805,-0.22659 -0.39815,0 -0.0805,0.22659 -0.12601,0 0.33721,-0.88327"
-         style="font-size:1.21160913px;-inkscape-font-specification:Sans"
-         id="path3064" />
-    </g>
-    <g
-       style="font-size:1px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
-       id="text5544">
-      <path
-         inkscape:connector-curvature="0"
-         d="m 883.88953,691.50378 0.13281,0 0.32324,0.60987 0,-0.60987 0.0957,0 0,0.72901 -0.13281,0 -0.32324,-0.60987 0,0.60987 -0.0957,0 0,-0.72901"
-         id="path3067" />
-      <path
-         inkscape:connector-curvature="0"
-         d="m 885.10144,691.93689 0,0.0439 -0.41309,0 c 0.004,0.0619 0.0225,0.10905 0.0557,0.14161 0.0335,0.0322 0.0801,0.0483 0.13965,0.0483 0.0345,0 0.0679,-0.004 0.10009,-0.0127 0.0326,-0.008 0.0648,-0.0212 0.0967,-0.0381 l 0,0.085 c -0.0322,0.0137 -0.0653,0.0241 -0.0991,0.0312 -0.0339,0.007 -0.0682,0.0107 -0.10302,0.0107 -0.0872,0 -0.15642,-0.0254 -0.20752,-0.0762 -0.0508,-0.0508 -0.0762,-0.11947 -0.0762,-0.20606 0,-0.0895 0.0241,-0.16048 0.0723,-0.21289 0.0485,-0.0527 0.11377,-0.0791 0.1958,-0.0791 0.0736,0 0.13167,0.0238 0.17432,0.0713 0.043,0.0472 0.0645,0.11149 0.0645,0.19287 m -0.0898,-0.0264 c -6.5e-4,-0.0492 -0.0145,-0.0884 -0.0415,-0.11767 -0.0267,-0.0293 -0.0622,-0.0439 -0.10644,-0.0439 -0.0501,0 -0.0903,0.0142 -0.12061,0.0425 -0.0299,0.0283 -0.0472,0.0682 -0.0518,0.11963 l 0.32032,-4.9e-4"
-         id="path3069" />
-      <path
-         inkscape:connector-curvature="0"
-         d="m 885.19666,691.68591 0.0898,0 0.1123,0.42676 0.11182,-0.42676 0.10596,0 0.1123,0.42676 0.11182,-0.42676 0.0898,0 -0.14306,0.54688 -0.10596,0 -0.11768,-0.44824 -0.11816,0.44824 -0.10596,0 -0.14306,-0.54688"
-         id="path3071" />
-    </g>
-    <g
-       style="font-size:1px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
-       id="text5548">
-      <path
-         inkscape:connector-curvature="0"
-         d="m 883.88953,693.52722 0.13281,0 0.32324,0.60986 0,-0.60986 0.0957,0 0,0.72901 -0.13281,0 -0.32324,-0.60987 0,0.60987 -0.0957,0 0,-0.72901"
-         id="path3074" />
-      <path
-         inkscape:connector-curvature="0"
-         d="m 885.10144,693.96033 0,0.0439 -0.41309,0 c 0.004,0.0618 0.0225,0.10905 0.0557,0.1416 0.0335,0.0322 0.0801,0.0483 0.13965,0.0483 0.0345,0 0.0679,-0.004 0.10009,-0.0127 0.0326,-0.008 0.0648,-0.0212 0.0967,-0.0381 l 0,0.085 c -0.0322,0.0137 -0.0653,0.0241 -0.0991,0.0312 -0.0339,0.007 -0.0682,0.0108 -0.10302,0.0108 -0.0872,0 -0.15642,-0.0254 -0.20752,-0.0762 -0.0508,-0.0508 -0.0762,-0.11946 -0.0762,-0.20605 0,-0.0895 0.0241,-0.16048 0.0723,-0.21289 0.0485,-0.0527 0.11377,-0.0791 0.1958,-0.0791 0.0736,0 0.13167,0.0238 0.17432,0.0713 0.043,0.0472 0.0645,0.11149 0.0645,0.19287 m -0.0898,-0.0264 c -6.5e-4,-0.0491 -0.0145,-0.0884 -0.0415,-0.11768 -0.0267,-0.0293 -0.0622,-0.0439 -0.10644,-0.0439 -0.0501,0 -0.0903,0.0142 -0.12061,0.0425 -0.0299,0.0283 -0.0472,0.0682 -0.0518,0.11963 l 0.32032,-4.9e-4"
-         id="path3076" />
-      <path
-         inkscape:connector-curvature="0"
-         d="m 885.19666,693.70935 0.0898,0 0.1123,0.42676 0.11182,-0.42676 0.10596,0 0.1123,0.42676 0.11182,-0.42676 0.0898,0 -0.14306,0.54688 -0.10596,0 -0.11768,-0.44825 -0.11816,0.44825 -0.10596,0 -0.14306,-0.54688"
-         id="path3078" />
-    </g>
+     transform="translate(-877.85712,-687.36218)"
+     id="layer1">
+    <path
+       d="m 885.19659,693.70929 c 0.18733,0.11152 0.2171,0.58028 0.28483,0.0765 0.21963,-0.21 0.25265,0.61085 0.31801,0.0641 0.27697,-0.42352 -0.0831,0.827 -0.17686,0.17405 -0.11702,-0.43251 -0.13186,0.58055 -0.33199,0.093 -0.0467,-0.13235 -0.0352,-0.27894 -0.0941,-0.40765 m -0.0951,0.25098 c -0.24545,-0.026 -0.58057,0.20963 -0.14983,0.20815 0.2341,0.24227 -0.5966,0.0435 -0.31586,-0.29597 0.073,-0.29368 0.48945,-0.19996 0.46582,0.0878 m -0.0898,-0.0264 c -0.008,-0.37273 -0.57907,0.10308 -3e-5,6e-5 m -1.12221,-0.4067 c 0.31303,-0.0182 0.47686,0.98363 0.45605,0.28209 0.0542,-0.83126 0.27546,1.00617 -0.15278,0.25362 -0.0894,-0.27779 -0.27195,-0.54907 -0.20757,-0.0888 -0.0326,0.82392 -0.13826,-0.33361 -0.0957,-0.44691 z m 1.30713,-1.84131 c 0.18733,0.11152 0.2171,0.58028 0.28483,0.0765 0.21963,-0.21 0.25265,0.61085 0.31801,0.0641 0.27697,-0.42352 -0.0831,0.827 -0.17686,0.17405 -0.11703,-0.43249 -0.13186,0.58055 -0.33199,0.093 -0.0467,-0.13235 -0.0352,-0.27894 -0.0941,-0.40765 m -0.0951,0.25098 c -0.24545,-0.026 -0.58058,0.20964 -0.14984,0.20816 0.23409,0.24222 -0.5966,0.0434 -0.31584,-0.29607 0.0729,-0.29368 0.48945,-0.19997 0.46581,0.0877 m -0.0898,-0.0264 c -0.008,-0.37272 -0.57905,0.1031 -3e-5,7e-5 m -1.12221,-0.40661 c 0.31303,-0.0182 0.47685,0.98364 0.45605,0.2821 0.0542,-0.83128 0.27546,1.00616 -0.15278,0.25361 -0.0894,-0.27779 -0.27195,-0.54907 -0.20757,-0.0888 -0.0326,0.82392 -0.13826,-0.33361 -0.0957,-0.44691 z m 1.40695,-2.02159 c -0.0925,0.22919 -0.31156,0.57023 0.14418,0.41318 -0.005,-0.13405 -0.10264,-0.27877 -0.14418,-0.41318 z m -0.0704,-0.11269 c 0.29905,0.0855 0.42028,0.62166 0.42088,0.84191 -0.13411,-0.4802 -0.68425,-0.0265 -0.73057,-0.076 0.0832,-0.2616 0.21061,-0.50913 0.3096,-0.76593 m -1.74281,0.31056 c 0.34612,-0.47913 0.56926,0.70098 0.21372,0.36363 0.0724,-0.32969 -0.28365,-0.36875 -0.1668,-0.0222 -0.26673,0.45246 -0.17742,-0.6565 -0.3994,-0.10395 -0.0864,0.678 -0.43164,-0.63601 0.14263,-0.31419 0.0903,0.008 0.17045,-0.0312 0.20982,0.0769 m -1.26048,0.25 c -0.10571,-0.34023 0.21201,-0.48784 0.17971,-0.0655 0.20532,0.47932 0.16846,-0.59018 0.40143,-0.15309 0.19369,0.48548 -0.51086,0.6449 -0.5806,0.21899 m -0.16777,-0.32628 c 0.003,0.21747 -0.51383,0.059 -0.0685,0.22157 0.38953,0.3392 -0.58676,0.41358 -0.309,0.22699 0.52432,-0.0372 -0.45958,-0.30319 0.0896,-0.4819 0.0946,-0.0287 0.2045,-0.0235 0.28796,0.0344 m -0.99688,0.46241 c 0.0892,0.4554 -0.3135,0.24019 -0.17953,-0.10036 -0.28045,-0.78623 1.07442,-0.23273 0.43248,0.1872 -0.0909,0.0271 -0.20018,-0.005 -0.25295,-0.0867 m 0.11952,-0.36409 c -0.39427,0.13009 0.34651,0.51437 0.0773,0.0311 l -0.034,-0.025 -0.0433,-0.006 z m -0.65285,-0.11717 c 0.42856,-0.041 0.0577,0.97963 -0.005,0.32973 0.003,-0.10996 0.007,-0.21971 0.005,-0.32973 z m 0,-0.21896 c 0.43196,-0.11169 -0.0481,0.43831 0,0 z m -0.64683,0.0316 c 0.44435,-0.0237 -0.0875,0.85036 0.53283,0.60364 -0.23411,0.42107 -0.67995,0.0409 -0.53283,-0.33773 0,-0.0886 0,-0.17727 0,-0.26591 z"
+       id="path3078"
+       style="fill:#000000;fill-opacity:1;stroke:none" />
     <rect
-       style="fill:#c0c1be;fill-opacity:1;stroke:#000000;stroke-width:0.10008001;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none"
-       id="rect5552"
        width="2.8749001"
        height="2.8749392"
        x="879.96875"
-       y="691.46332" />
+       y="691.46332"
+       id="rect5552"
+       style="fill:#c0c1be;fill-opacity:1;stroke:#000000;stroke-width:0.10008001;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none" />
     <path
-       style="fill:url(#linearGradient3824);fill-opacity:1;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
        d="m 878.38837,687.89343 0,7.40625 c -2.1e-4,0.0102 0,0.021 0,0.0312 0,0.8311 0.6689,1.5 1.5,1.5 l 5.90625,0 c 0.0102,2.1e-4 0.021,0 0.0312,0 0.8311,0 1.5,-0.6689 1.5,-1.5 0,-0.0206 8.2e-4,-0.0421 0,-0.0625 l 0,-7.375 -8.9375,0 z"
        id="path3797"
-       inkscape:connector-curvature="0" />
+       style="fill:url(#linearGradient3824);fill-opacity:1;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
   </g>
 </svg>
diff --git a/skins/vector/images/page-fade.png b/skins/vector/images/page-fade.png
new file mode 100644 (file)
index 0000000..b4a6034
Binary files /dev/null and b/skins/vector/images/page-fade.png differ
index f37517d..d65d57a 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -8,73 +6,34 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="10"
    height="10"
-   id="svg5587"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="talk-icon.svg">
+   id="svg5587">
   <defs
      id="defs5589">
     <linearGradient
-       inkscape:collect="always"
        id="linearGradient6134">
       <stop
-         style="stop-color:#e9e9e9;stop-opacity:1;"
-         offset="0"
-         id="stop6136" />
+         id="stop6136"
+         style="stop-color:#e9e9e9;stop-opacity:1"
+         offset="0" />
       <stop
-         style="stop-color:#e9e9e9;stop-opacity:0;"
-         offset="1"
-         id="stop6138" />
+         id="stop6138"
+         style="stop-color:#e9e9e9;stop-opacity:0"
+         offset="1" />
     </linearGradient>
     <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6134"
-       id="radialGradient6140"
        cx="755.80591"
        cy="683.84875"
+       r="2.6564851"
        fx="755.80591"
        fy="683.84875"
-       r="2.656485"
-       gradientTransform="matrix(2.4898047,0,0,2.5230165,-1126.0032,-1041.5417)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6134"
        id="radialGradient6146"
+       xlink:href="#linearGradient6134"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.4898047,0,0,2.5230165,-1126.0032,-1041.5417)"
-       cx="755.80591"
-       cy="683.84875"
-       fx="755.80591"
-       fy="683.84875"
-       r="2.656485" />
+       gradientTransform="matrix(2.4898047,0,0,2.5230165,-1126.0032,-1041.5417)" />
   </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="45.254834"
-     inkscape:cx="8.6391885"
-     inkscape:cy="3.9760181"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1041"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1" />
   <metadata
      id="metadata5592">
     <rdf:RDF>
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
+        <dc:title></dc:title>
       </cc:Work>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-763.57141,-681.64789)">
+     transform="translate(-763.57141,-681.64789)"
+     id="layer1">
     <g
-       id="g6142"
-       transform="matrix(1.0212411,0,0,0.97119998,-5.0201418,19.699049)">
+       transform="matrix(1.0212411,0,0,0.97119998,-5.0201418,19.699049)"
+       id="g6142">
       <path
-         sodipodi:nodetypes="sssscccsssss"
-         inkscape:connector-curvature="0"
-         id="rect5606"
-         transform="translate(763.57141,681.64789)"
          d="m -8.625,0.4375 c -0.4851513,0 -0.875,0.38984873 -0.875,0.875 l 0,4.375 c 0,0.4851513 0.3898487,0.875 0.875,0.875 l 0.125,0 0,2.6739053 3.4513641,-2.6739053 2.5173859,0 c 0.4851513,0 0.875,-0.3898487 0.875,-0.875 l 0,-4.375 c 0,-0.48515127 -0.3898487,-0.875 -0.875,-0.875 z"
+         transform="translate(763.57141,681.64789)"
+         id="rect5606"
          style="fill:#ffffff;fill-opacity:1;stroke:#888a85;stroke-width:0.98900002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:9.80000019;stroke-opacity:1;stroke-dasharray:none" />
       <path
-         style="fill:url(#radialGradient6146);fill-opacity:1;stroke:none"
          d="m 755.96029,683.3154 c -0.32861,0 -0.59267,0.23853 -0.59267,0.53539 l 0,2.67695 c 0,0.29685 0.26406,0.53539 0.59267,0.53539 l 0.0847,0 0,1.63611 2.33776,-1.63611 1.70516,0 c 0.32862,0 0.59268,-0.23854 0.59268,-0.53539 l 0,-2.67695 c 0,-0.29686 -0.26406,-0.53539 -0.59268,-0.53539 z"
          id="path6124"
-         inkscape:connector-curvature="0"
-         sodipodi:nodetypes="sssscccsssss" />
+         style="fill:url(#radialGradient6146);fill-opacity:1;stroke:none" />
     </g>
   </g>
 </svg>
index 346e072..b41fd97 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -8,75 +6,36 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="16"
    height="16"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="watch-icon-hl.svg"
-   inkscape:export-filename="/home/m4tx/Pulpit/LOCAL/watch-icon-hl.png"
-   inkscape:export-xdpi="87.436836"
-   inkscape:export-ydpi="87.436836">
+   id="svg2">
   <defs
      id="defs4">
     <linearGradient
        id="linearGradient3788">
       <stop
-         style="stop-color:#c2edff;stop-opacity:1;"
-         offset="0"
-         id="stop3790" />
+         id="stop3790"
+         style="stop-color:#c2edff;stop-opacity:1"
+         offset="0" />
       <stop
          id="stop3796"
-         offset="0.5"
-         style="stop-color:#68bdff;stop-opacity:1;" />
+         style="stop-color:#68bdff;stop-opacity:1"
+         offset="0.5" />
       <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="1"
-         id="stop3792" />
+         id="stop3792"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="1" />
     </linearGradient>
     <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3788"
-       id="linearGradient3804"
        x1="13.470111"
        y1="14.363379"
        x2="4.596477"
        y2="3.3969929"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
+       id="linearGradient3804"
        xlink:href="#linearGradient3788"
-       id="linearGradient3808"
-       gradientUnits="userSpaceOnUse"
-       x1="13.470111"
-       y1="14.363379"
-       x2="4.596477"
-       y2="3.3969929" />
+       gradientUnits="userSpaceOnUse" />
   </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="8"
-     inkscape:cx="-3.451911"
-     inkscape:cy="5.714676"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1041"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1" />
   <metadata
      id="metadata7">
     <rdf:RDF>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-693.14288,-698.64789)">
+     transform="translate(-693.14288,-698.64789)"
+     id="layer1">
     <path
-       inkscape:transform-center-y="-0.70705002"
-       transform="matrix(0.86225302,0,0,0.86225302,694.06156,700.58832)"
        d="M 8.3337586,-0.92098331 10.85748,4.1926362 16.500695,5.0126434 12.417226,8.9930409 13.381202,14.613453 8.3337584,11.959854 3.286314,14.613452 4.2502902,8.9930409 0.16682217,5.012643 5.8100362,4.1926362 z"
-       inkscape:randomized="0"
-       inkscape:rounded="0"
-       inkscape:flatsided="false"
-       sodipodi:arg2="-0.9424778"
-       sodipodi:arg1="-1.5707963"
-       sodipodi:r2="4.2936125"
-       sodipodi:r1="8.587225"
-       sodipodi:cy="7.6662416"
-       sodipodi:cx="8.3337584"
-       sodipodi:sides="5"
+       transform="matrix(0.86225302,0,0,0.86225302,694.06156,700.58832)"
        id="path3768"
-       style="fill:url(#linearGradient3804);fill-opacity:1;stroke:#c8b250;stroke-width:1.15975237000000009;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       sodipodi:type="star" />
+       style="fill:url(#linearGradient3804);fill-opacity:1;stroke:#c8b250;stroke-width:1.15975237;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
   </g>
 </svg>
index 9e13769..80fb36e 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -8,72 +6,36 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="16"
    height="16"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="watch-icon-fav.svg">
+   id="svg2">
   <defs
      id="defs4">
     <linearGradient
        id="linearGradient3788">
       <stop
-         style="stop-color:#c2edff;stop-opacity:1;"
-         offset="0"
-         id="stop3790" />
+         id="stop3790"
+         style="stop-color:#c2edff;stop-opacity:1"
+         offset="0" />
       <stop
          id="stop3796"
-         offset="0.5"
-         style="stop-color:#68bdff;stop-opacity:1;" />
+         style="stop-color:#68bdff;stop-opacity:1"
+         offset="0.5" />
       <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="1"
-         id="stop3792" />
+         id="stop3792"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="1" />
     </linearGradient>
     <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3788"
-       id="linearGradient3804"
        x1="13.470111"
        y1="14.363379"
        x2="4.596477"
        y2="3.3969929"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
+       id="linearGradient3804"
        xlink:href="#linearGradient3788"
-       id="linearGradient3808"
-       gradientUnits="userSpaceOnUse"
-       x1="13.470111"
-       y1="14.363379"
-       x2="4.596477"
-       y2="3.3969929" />
+       gradientUnits="userSpaceOnUse" />
   </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="8"
-     inkscape:cx="-6.951911"
-     inkscape:cy="5.714676"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1014"
-     inkscape:window-x="0"
-     inkscape:window-y="27"
-     inkscape:window-maximized="1" />
   <metadata
      id="metadata7">
     <rdf:RDF>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-693.14288,-698.64789)">
+     transform="translate(-693.14288,-698.64789)"
+     id="layer1">
     <path
-       inkscape:transform-center-y="-0.70705002"
-       transform="matrix(0.86225302,0,0,0.86225302,694.06156,700.58832)"
        d="M 8.3337586,-0.92098331 10.85748,4.1926362 16.500695,5.0126434 12.417226,8.9930409 13.381202,14.613453 8.3337584,11.959854 3.286314,14.613452 4.2502902,8.9930409 0.16682217,5.012643 5.8100362,4.1926362 z"
-       inkscape:randomized="0"
-       inkscape:rounded="0"
-       inkscape:flatsided="false"
-       sodipodi:arg2="-0.9424778"
-       sodipodi:arg1="-1.5707963"
-       sodipodi:r2="4.2936125"
-       sodipodi:r1="8.587225"
-       sodipodi:cy="7.6662416"
-       sodipodi:cx="8.3337584"
-       sodipodi:sides="5"
+       transform="matrix(0.86225302,0,0,0.86225302,694.06156,700.58832)"
        id="path3768"
-       style="fill:url(#linearGradient3804);fill-opacity:1;stroke:#7cb5d1;stroke-width:1.15975237;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       sodipodi:type="star" />
+       style="fill:url(#linearGradient3804);fill-opacity:1;stroke:#7cb5d1;stroke-width:1.15975237;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
   </g>
 </svg>
index 767d510..9b6f822 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
          style="stop-color:#000000;stop-opacity:0"
          offset="1" />
     </linearGradient>
-    <linearGradient
-       id="linearGradient4344">
-      <stop
-         id="stop4346"
-         style="stop-color:#727e0a;stop-opacity:1"
-         offset="0" />
-      <stop
-         id="stop4348"
-         style="stop-color:#5b6508;stop-opacity:1"
-         offset="1" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient4338">
-      <stop
-         id="stop4340"
-         style="stop-color:#e9b15e;stop-opacity:1"
-         offset="0" />
-      <stop
-         id="stop4342"
-         style="stop-color:#966416;stop-opacity:1"
-         offset="1" />
-    </linearGradient>
     <linearGradient
        id="linearGradient4163">
       <stop
          style="stop-color:#df9725;stop-opacity:1"
          offset="1" />
     </linearGradient>
-    <radialGradient
-       cx="29.344931"
-       cy="17.064077"
-       r="9.1620579"
-       fx="29.344931"
-       fy="17.064077"
-       id="radialGradient3806"
-       xlink:href="#linearGradient3800"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       cx="31.112698"
-       cy="19.008621"
-       r="8.6620579"
-       fx="31.112698"
-       fy="19.008621"
-       id="radialGradient3822"
-       xlink:href="#linearGradient3816"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       x1="30.935921"
-       y1="29.553486"
-       x2="30.935921"
-       y2="35.803486"
-       id="linearGradient3830"
-       xlink:href="#linearGradient3824"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       cx="28.089741"
-       cy="27.203083"
-       r="13.56536"
-       fx="28.089741"
-       fy="27.203083"
-       id="radialGradient4169"
-       xlink:href="#linearGradient4163"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.297564,0,0,0.884831,-8.358505,4.940469)" />
-    <radialGradient
-       cx="29.344931"
-       cy="17.064077"
-       r="9.1620579"
-       fx="29.344931"
-       fy="17.064077"
-       id="radialGradient4171"
-       xlink:href="#linearGradient3800"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.787998,0,0,0.787998,6.221198,3.617627)" />
-    <linearGradient
-       x1="30.935921"
-       y1="29.553486"
-       x2="30.935921"
-       y2="35.803486"
-       id="linearGradient4175"
-       xlink:href="#linearGradient3824"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(0.707108,0)" />
-    <radialGradient
-       cx="31.112698"
-       cy="19.008621"
-       r="8.6620579"
-       fx="31.112698"
-       fy="19.008621"
-       id="radialGradient4179"
-       xlink:href="#linearGradient3816"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       x1="30.935921"
-       y1="29.553486"
-       x2="30.935921"
-       y2="35.803486"
-       id="linearGradient4326"
-       xlink:href="#linearGradient3824"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-12.41789,-7)" />
-    <radialGradient
-       cx="29.344931"
-       cy="17.064077"
-       r="9.1620579"
-       fx="29.344931"
-       fy="17.064077"
-       id="radialGradient4328"
-       xlink:href="#linearGradient4338"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.787998,0,0,0.787998,6.221198,3.617627)" />
-    <radialGradient
-       cx="31.112698"
-       cy="19.008621"
-       r="8.6620579"
-       fx="31.112698"
-       fy="19.008621"
-       id="radialGradient4330"
-       xlink:href="#linearGradient3816"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       x1="30.935921"
-       y1="29.553486"
-       x2="30.935921"
-       y2="35.803486"
-       id="linearGradient4332"
-       xlink:href="#linearGradient3824"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-13.125,-7)" />
-    <radialGradient
-       cx="31.112698"
-       cy="19.008621"
-       r="8.6620579"
-       fx="31.112698"
-       fy="19.008621"
-       id="radialGradient4336"
-       xlink:href="#linearGradient3816"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       cx="16.214741"
-       cy="19.836468"
-       r="13.56536"
-       fx="16.214741"
-       fy="19.836468"
-       id="radialGradient4350"
-       xlink:href="#linearGradient4344"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.681917,0,8.233773)" />
-    <linearGradient
-       x1="20.661695"
-       y1="35.817974"
-       x2="22.626925"
-       y2="36.217758"
-       id="linearGradient4362"
-       xlink:href="#linearGradient4356"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.983375,0.181588,-0.181588,0.983375,6.231716,-2.651466)" />
-    <linearGradient
-       x1="22.686766"
-       y1="36.3904"
-       x2="21.408455"
-       y2="35.739632"
-       id="linearGradient4366"
-       xlink:href="#linearGradient4356"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.977685,0.210075,0.210075,0.977685,55.1096,-3.945209)" />
-    <linearGradient
-       x1="20.661695"
-       y1="35.817974"
-       x2="22.626925"
-       y2="36.217758"
-       id="linearGradient4372"
-       xlink:href="#linearGradient4356"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.983375,0.181588,-0.181588,0.983375,-7.07212,-9.82492)" />
-    <linearGradient
-       x1="22.686766"
-       y1="36.3904"
-       x2="21.408455"
-       y2="35.739632"
-       id="linearGradient4374"
-       xlink:href="#linearGradient4356"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.977685,0.210075,0.210075,0.977685,41.80576,-11.11866)" />
-    <linearGradient
-       x1="22.686766"
-       y1="36.3904"
-       x2="21.408455"
-       y2="35.739632"
-       id="linearGradient1366"
-       xlink:href="#linearGradient4356"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.977685,0.210075,0.210075,0.977685,41.80576,-11.11866)" />
-    <linearGradient
-       x1="20.661695"
-       y1="35.817974"
-       x2="22.626925"
-       y2="36.217758"
-       id="linearGradient1369"
-       xlink:href="#linearGradient4356"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.983375,0.181588,-0.181588,0.983375,-7.07212,-9.82492)" />
-    <linearGradient
-       x1="30.935921"
-       y1="29.553486"
-       x2="30.935921"
-       y2="35.803486"
-       id="linearGradient1372"
-       xlink:href="#linearGradient3824"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-12.41789,-7)" />
-    <radialGradient
-       cx="16.214741"
-       cy="19.836468"
-       r="13.56536"
-       fx="16.214741"
-       fy="19.836468"
-       id="radialGradient1381"
-       xlink:href="#linearGradient4344"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.681917,0,8.233773)" />
     <radialGradient
        cx="31.112698"
        cy="19.008621"
index d5e44b6..0b3d302 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -8,70 +6,33 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="10"
    height="10"
-   id="svg6734"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="video-icon.svg">
+   id="svg6734">
   <defs
      id="defs6736">
     <linearGradient
        id="linearGradient7265">
       <stop
-         style="stop-color:#cccccc;stop-opacity:1;"
-         offset="0"
-         id="stop7267" />
+         id="stop7267"
+         style="stop-color:#cccccc;stop-opacity:1"
+         offset="0" />
       <stop
-         style="stop-color:#dfdfdf;stop-opacity:1;"
-         offset="1"
-         id="stop7269" />
+         id="stop7269"
+         style="stop-color:#dfdfdf;stop-opacity:1"
+         offset="1" />
     </linearGradient>
     <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient7265"
-       id="radialGradient7271"
        cx="5.0034118"
        cy="4.9650207"
+       r="4.999619"
        fx="5.0034118"
        fy="4.9650207"
-       r="4.9996192"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient7265"
        id="radialGradient7327"
-       gradientUnits="userSpaceOnUse"
-       cx="5.0034118"
-       cy="4.9650207"
-       fx="5.0034118"
-       fy="4.9650207"
-       r="4.9996192" />
+       xlink:href="#linearGradient7265"
+       gradientUnits="userSpaceOnUse" />
   </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.627417"
-     inkscape:cx="4.0209944"
-     inkscape:cy="7.104383"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1014"
-     inkscape:window-x="0"
-     inkscape:window-y="27"
-     inkscape:window-maximized="1" />
   <metadata
      id="metadata6739">
     <rdf:RDF>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-903.57141,-715.93359)">
+     transform="translate(-903.57141,-715.93359)"
+     id="layer1">
     <path
-       style="fill:none;stroke:#5f6060;stroke-width:0.89999998000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
        d="m 911.68723,725.33709 -0.61872,-0.92808 c 0,0 0.17677,0.92808 0.92808,1.01647 0.7513,0.0884 1.19324,0.0884 1.19324,0.0884"
        id="path7292"
-       inkscape:connector-curvature="0" />
+       style="fill:none;stroke:#5f6060;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
     <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient7327);fill-opacity:1;stroke:#848484;stroke-width:0.89999998;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:9.80000019;stroke-opacity:1;stroke-dasharray:none"
-       id="path6755"
-       sodipodi:cx="5.0034118"
-       sodipodi:cy="4.9650207"
-       sodipodi:rx="4.5141191"
-       sodipodi:ry="4.5141191"
        d="m 9.5175309,4.9650207 a 4.5141191,4.5141191 0 1 1 -9.02823828,0 4.5141191,4.5141191 0 1 1 9.02823828,0 z"
-       transform="translate(903.4637,715.9024)" />
+       transform="translate(903.4637,715.9024)"
+       id="path6755"
+       style="fill:url(#radialGradient7327);fill-opacity:1;stroke:#848484;stroke-width:0.89999998;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:9.80000019;stroke-opacity:1;stroke-dasharray:none" />
     <g
-       id="g7310"
-       transform="matrix(0.897287,0,0,0.897287,111.13225,74.055304)">
+       transform="matrix(0.897287,0,0,0.897287,111.13225,74.055304)"
+       id="g7310">
       <path
+         d="m 5.03125,2.59375 a 0.59375,0.59375 0 1 1 -1.1875,0 0.59375,0.59375 0 1 1 1.1875,0 z"
          transform="matrix(1.4672484,-0.2948259,0.2948259,1.4672484,880.61345,716.13137)"
-         d="M 5.03125,2.59375 C 5.03125,2.9216691 4.7654191,3.1875 4.4375,3.1875 4.1095809,3.1875 3.84375,2.9216691 3.84375,2.59375 3.84375,2.2658309 4.1095809,2 4.4375,2 4.7654191,2 5.03125,2.2658309 5.03125,2.59375 z"
-         sodipodi:ry="0.59375"
-         sodipodi:rx="0.59375"
-         sodipodi:cy="2.59375"
-         sodipodi:cx="4.4375"
          id="path7300"
-         style="fill:#818181;fill-opacity:1;stroke:none"
-         sodipodi:type="arc" />
+         style="fill:#818181;fill-opacity:1;stroke:none" />
       <path
-         sodipodi:type="arc"
-         style="fill:#818181;fill-opacity:1;stroke:none"
+         d="m 5.03125,2.59375 a 0.59375,0.59375 0 1 1 -1.1875,0 0.59375,0.59375 0 1 1 1.1875,0 z"
+         transform="matrix(1.4672484,-0.2948259,0.2948259,1.4672484,878.85062,718.47146)"
          id="path7302"
-         sodipodi:cx="4.4375"
-         sodipodi:cy="2.59375"
-         sodipodi:rx="0.59375"
-         sodipodi:ry="0.59375"
-         d="M 5.03125,2.59375 C 5.03125,2.9216691 4.7654191,3.1875 4.4375,3.1875 4.1095809,3.1875 3.84375,2.9216691 3.84375,2.59375 3.84375,2.2658309 4.1095809,2 4.4375,2 4.7654191,2 5.03125,2.2658309 5.03125,2.59375 z"
-         transform="matrix(1.4672484,-0.2948259,0.2948259,1.4672484,878.85062,718.47146)" />
+         style="fill:#818181;fill-opacity:1;stroke:none" />
       <path
+         d="m 5.03125,2.59375 a 0.59375,0.59375 0 1 1 -1.1875,0 0.59375,0.59375 0 1 1 1.1875,0 z"
          transform="matrix(1.4672484,-0.2948259,0.2948259,1.4672484,883.48161,716.7296)"
-         d="M 5.03125,2.59375 C 5.03125,2.9216691 4.7654191,3.1875 4.4375,3.1875 4.1095809,3.1875 3.84375,2.9216691 3.84375,2.59375 3.84375,2.2658309 4.1095809,2 4.4375,2 4.7654191,2 5.03125,2.2658309 5.03125,2.59375 z"
-         sodipodi:ry="0.59375"
-         sodipodi:rx="0.59375"
-         sodipodi:cy="2.59375"
-         sodipodi:cx="4.4375"
          id="path7304"
-         style="fill:#818181;fill-opacity:1;stroke:none"
-         sodipodi:type="arc" />
+         style="fill:#818181;fill-opacity:1;stroke:none" />
       <path
-         sodipodi:type="arc"
-         style="fill:#818181;fill-opacity:1;stroke:none"
+         d="m 5.03125,2.59375 a 0.59375,0.59375 0 1 1 -1.1875,0 0.59375,0.59375 0 1 1 1.1875,0 z"
+         transform="matrix(1.4672484,-0.2948259,0.2948259,1.4672484,880.77974,720.67629)"
          id="path7306"
-         sodipodi:cx="4.4375"
-         sodipodi:cy="2.59375"
-         sodipodi:rx="0.59375"
-         sodipodi:ry="0.59375"
-         d="M 5.03125,2.59375 C 5.03125,2.9216691 4.7654191,3.1875 4.4375,3.1875 4.1095809,3.1875 3.84375,2.9216691 3.84375,2.59375 3.84375,2.2658309 4.1095809,2 4.4375,2 4.7654191,2 5.03125,2.2658309 5.03125,2.59375 z"
-         transform="matrix(1.4672484,-0.2948259,0.2948259,1.4672484,880.77974,720.67629)" />
+         style="fill:#818181;fill-opacity:1;stroke:none" />
       <path
+         d="m 5.03125,2.59375 a 0.59375,0.59375 0 1 1 -1.1875,0 0.59375,0.59375 0 1 1 1.1875,0 z"
          transform="matrix(1.4672484,-0.2948259,0.2948259,1.4672484,883.52712,719.65906)"
-         d="M 5.03125,2.59375 C 5.03125,2.9216691 4.7654191,3.1875 4.4375,3.1875 4.1095809,3.1875 3.84375,2.9216691 3.84375,2.59375 3.84375,2.2658309 4.1095809,2 4.4375,2 4.7654191,2 5.03125,2.2658309 5.03125,2.59375 z"
-         sodipodi:ry="0.59375"
-         sodipodi:rx="0.59375"
-         sodipodi:cy="2.59375"
-         sodipodi:cx="4.4375"
          id="path7308"
-         style="fill:#818181;fill-opacity:1;stroke:none"
-         sodipodi:type="arc" />
+         style="fill:#818181;fill-opacity:1;stroke:none" />
     </g>
   </g>
 </svg>
index b31e8b8..b78c978 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -8,72 +6,10 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="16"
    height="16"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="watch-icon-hl.svg">
-  <defs
-     id="defs4">
-    <linearGradient
-       id="linearGradient3788">
-      <stop
-         style="stop-color:#c2edff;stop-opacity:1;"
-         offset="0"
-         id="stop3790" />
-      <stop
-         id="stop3796"
-         offset="0.5"
-         style="stop-color:#68bdff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="1"
-         id="stop3792" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3788"
-       id="linearGradient3804"
-       x1="13.470111"
-       y1="14.363379"
-       x2="4.596477"
-       y2="3.3969929"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3788"
-       id="linearGradient3808"
-       gradientUnits="userSpaceOnUse"
-       x1="13.470111"
-       y1="14.363379"
-       x2="4.596477"
-       y2="3.3969929" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="8"
-     inkscape:cx="-6.97632"
-     inkscape:cy="6.2476517"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1014"
-     inkscape:window-x="0"
-     inkscape:window-y="27"
-     inkscape:window-maximized="1" />
+   id="svg2">
   <metadata
      id="metadata7">
     <rdf:RDF>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-693.14288,-698.64789)">
+     transform="translate(-693.14288,-698.64789)"
+     id="layer1">
     <path
-       sodipodi:type="star"
-       style="fill:#ffffff;fill-opacity:1;stroke:#c8b250;stroke-width:1.15975237;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3770"
-       sodipodi:sides="5"
-       sodipodi:cx="8.3337584"
-       sodipodi:cy="7.6662416"
-       sodipodi:r1="8.587225"
-       sodipodi:r2="4.2936125"
-       sodipodi:arg1="-1.5707963"
-       sodipodi:arg2="-0.9424778"
-       inkscape:flatsided="false"
-       inkscape:rounded="0"
-       inkscape:randomized="0"
        d="M 8.3337586,-0.92098331 10.85748,4.1926362 16.500695,5.0126434 12.417226,8.9930409 13.381202,14.613453 8.3337584,11.959854 3.286314,14.613452 4.2502902,8.9930409 0.16682217,5.012643 5.8100362,4.1926362 z"
        transform="matrix(0.86225302,0,0,0.86225302,694.06156,700.58832)"
-       inkscape:transform-center-y="-0.70705002" />
+       id="path3770"
+       style="fill:#ffffff;fill-opacity:1;stroke:#c8b250;stroke-width:1.15975237;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
   </g>
 </svg>
index 3423979..6b25f94 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -8,72 +6,10 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="16"
    height="16"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="watch-icon-loading.svg">
-  <defs
-     id="defs4">
-    <linearGradient
-       id="linearGradient3788">
-      <stop
-         style="stop-color:#c2edff;stop-opacity:1;"
-         offset="0"
-         id="stop3790" />
-      <stop
-         id="stop3796"
-         offset="0.5"
-         style="stop-color:#68bdff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="1"
-         id="stop3792" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3788"
-       id="linearGradient3804"
-       x1="13.470111"
-       y1="14.363379"
-       x2="4.596477"
-       y2="3.3969929"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3788"
-       id="linearGradient3808"
-       gradientUnits="userSpaceOnUse"
-       x1="13.470111"
-       y1="14.363379"
-       x2="4.596477"
-       y2="3.3969929" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.627417"
-     inkscape:cx="7.2850048"
-     inkscape:cy="6.4582896"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1014"
-     inkscape:window-x="0"
-     inkscape:window-y="27"
-     inkscape:window-maximized="1" />
+   id="svg2">
   <metadata
      id="metadata7">
     <rdf:RDF>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-693.14288,-698.64789)">
+     transform="translate(-693.14288,-698.64789)"
+     id="layer1">
     <path
-       sodipodi:type="star"
-       style="fill:#ffffff;fill-opacity:1;stroke:#d1d1d1;stroke-width:1.15975237;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path2998"
-       sodipodi:sides="5"
-       sodipodi:cx="8.3337584"
-       sodipodi:cy="7.6662416"
-       sodipodi:r1="8.587225"
-       sodipodi:r2="4.2936125"
-       sodipodi:arg1="-1.5707963"
-       sodipodi:arg2="-0.9424778"
-       inkscape:flatsided="false"
-       inkscape:rounded="0"
-       inkscape:randomized="0"
        d="M 8.3337586,-0.92098331 10.85748,4.1926362 16.500695,5.0126434 12.417226,8.9930409 13.381202,14.613453 8.3337584,11.959854 3.286314,14.613452 4.2502902,8.9930409 0.16682217,5.012643 5.8100362,4.1926362 z"
        transform="matrix(0.86225302,0,0,0.86225302,694.06156,700.58832)"
-       inkscape:transform-center-y="-0.70705002" />
+       id="path2998"
+       style="fill:#ffffff;fill-opacity:1;stroke:#d1d1d1;stroke-width:1.15975237;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
   </g>
 </svg>
index c7a5081..2654c8d 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -8,72 +6,10 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
    width="16"
    height="16"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="watch-icon.svg">
-  <defs
-     id="defs4">
-    <linearGradient
-       id="linearGradient3788">
-      <stop
-         style="stop-color:#c2edff;stop-opacity:1;"
-         offset="0"
-         id="stop3790" />
-      <stop
-         id="stop3796"
-         offset="0.5"
-         style="stop-color:#68bdff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="1"
-         id="stop3792" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3788"
-       id="linearGradient3804"
-       x1="13.470111"
-       y1="14.363379"
-       x2="4.596477"
-       y2="3.3969929"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3788"
-       id="linearGradient3808"
-       gradientUnits="userSpaceOnUse"
-       x1="13.470111"
-       y1="14.363379"
-       x2="4.596477"
-       y2="3.3969929" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="8"
-     inkscape:cx="17.836203"
-     inkscape:cy="7.206728"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1014"
-     inkscape:window-x="0"
-     inkscape:window-y="27"
-     inkscape:window-maximized="1" />
+   id="svg2">
   <metadata
      id="metadata7">
     <rdf:RDF>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-693.14288,-698.64789)">
+     transform="translate(-693.14288,-698.64789)"
+     id="layer1">
     <path
-       sodipodi:type="star"
-       style="fill:#ffffff;fill-opacity:1;stroke:#7cb5d1;stroke-width:1.15975237;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path2998"
-       sodipodi:sides="5"
-       sodipodi:cx="8.3337584"
-       sodipodi:cy="7.6662416"
-       sodipodi:r1="8.587225"
-       sodipodi:r2="4.2936125"
-       sodipodi:arg1="-1.5707963"
-       sodipodi:arg2="-0.9424778"
-       inkscape:flatsided="false"
-       inkscape:rounded="0"
-       inkscape:randomized="0"
        d="M 8.3337586,-0.92098331 10.85748,4.1926362 16.500695,5.0126434 12.417226,8.9930409 13.381202,14.613453 8.3337584,11.959854 3.286314,14.613452 4.2502902,8.9930409 0.16682217,5.012643 5.8100362,4.1926362 z"
        transform="matrix(0.86225302,0,0,0.86225302,694.06156,700.58832)"
-       inkscape:transform-center-y="-0.70705002" />
+       id="path2998"
+       style="fill:#ffffff;fill-opacity:1;stroke:#7cb5d1;stroke-width:1.15975237;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
   </g>
 </svg>
index 8d5423a..819286e 100644 (file)
@@ -2,6 +2,7 @@
 
 @media screen {
        @import "components/common.less";
+       @import "components/animations.less";
        @import "components/navigation.less";
        @import "components/footer.less";
        @import 'components/notifications.less';
index 542ffe7..2af6389 100644 (file)
@@ -36,8 +36,8 @@
 @menu-personal-font-size: 0.75em;
 
 // Collapsible nav
-@collapsible-nav-heading-color: #4D4D4D;
-@collapsible-nav-heading-collapsed-color: #0645AD;
+@collapsible-nav-heading-color: #4d4d4d;
+@collapsible-nav-heading-collapsed-color: #0645ad;
 
 @collapsible-nav-heading-padding: 4px 0 3px 1.5em;
 @collapsible-nav-body-margin: 0 0 0 1.25em;
index aa64624..8420431 100644 (file)
@@ -9,7 +9,7 @@ jQuery( function ( $ ) {
                        // For accessibility, show the menu when the h3 is clicked (bug 24298/46486)
                        .on( 'click keypress', function ( e ) {
                                if( e.type === 'click' || e.which === 13 ) {
-                                       $el.find( '.menu:first' ).toggleClass( 'menuForceShow' );
+                                       $el.toggleClass( 'menuForceShow' );
                                        e.preventDefault();
                                }
                        } )
index ea4b0f6..7a048bf 100644 (file)
@@ -40,6 +40,9 @@ $wgAutoloadClasses += array(
        'MediaWikiPHPUnitCommand' => "$testDir/phpunit/MediaWikiPHPUnitCommand.php",
        'MediaWikiPHPUnitTestListener' => "$testDir/phpunit/MediaWikiPHPUnitTestListener.php",
        'MediaWikiLangTestCase' => "$testDir/phpunit/MediaWikiLangTestCase.php",
+       'ResourceLoaderTestCase' => "$testDir/phpunit/ResourceLoaderTestCase.php",
+       'ResourceLoaderTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php",
+       'ResourceLoaderFileModuleTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php",
        'TestUser' => "$testDir/phpunit/includes/TestUser.php",
 
        # tests/phpunit/includes
index d9ad773..7b0fc44 100644 (file)
@@ -35,7 +35,10 @@ class ParserTestResult {
                $this->description = $description;
        }
 
-       /** Whether the test passed */
+       /**
+        * Whether the test passed
+        * @return bool
+        */
        public function isSuccess() {
                return $this->expected === $this->actual;
        }
index 39fa09e..595dd7d 100644 (file)
@@ -5,7 +5,7 @@
  * at the same time.
  *
  * Copyright © 2004, 2010 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * 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
@@ -387,7 +387,7 @@ class ParserTest {
 
                foreach ( $filenames as $filename ) {
                        $contents = file_get_contents( $filename );
-                       preg_match_all( '/!!\s*input\n(.*?)\n!!\s*result/s', $contents, $matches );
+                       preg_match_all( '/!!\s*(input|wikitext)\n(.*?)\n!!\s*(result|html|html\/\*|html\/php)/s', $contents, $matches );
 
                        foreach ( $matches[1] as $match ) {
                                $dict .= $match . "\n";
@@ -642,48 +642,65 @@ class ParserTest {
                // foo="bar baz"
                // foo=[[bar baz]]
                // foo=bar,"baz quux"
-               $regex = '/\b
-                       ([\w-]+)                                                # Key
-                       \b
-                       (?:\s*
-                               =                                               # First sub-value
-                               \s*
-                               (
-                                       "
-                                               [^"]*                   # Quoted val
-                                       "
+               // foo={...json...}
+               $defs = '(?(DEFINE)
+                       (?<qstr>                                        # Quoted string
+                               "
+                               (?:[^\\\\"] | \\\\.)*
+                               "
+                       )
+                       (?<json>
+                               \{              # Open bracket
+                               (?:
+                                       [^"{}] |                                # Not a quoted string or object, or
+                                       (?&qstr) |                              # A quoted string, or
+                                       (?&json)                                # A json object (recursively)
+                               )*
+                               \}              # Close bracket
+                       )
+            (?<value>
+                               (?:
+                                       (?&qstr)                        # Quoted val
                                |
                                        \[\[
                                                [^]]*                   # Link target
                                        \]\]
                                |
                                        [\w-]+                          # Plain word
+                               |
+                                       (?&json)                        # JSON object
+                               )
+                       )
+               )';
+               $regex = '/'.$defs.'\b
+                       (?<k>[\w-]+)                            # Key
+                       \b
+                       (?:\s*
+                               =                                               # First sub-value
+                               \s*
+                               (?<v>
+                                       (?&value)
+                                       (?:\s*
+                                               ,                               # Sub-vals 1..N
+                                               \s*
+                                               (?&value)
+                                       )*
                                )
-                               (?:\s*
-                                       ,                                       # Sub-vals 1..N
-                                       \s*
-                                       (
-                                               "[^"]*"                 # Quoted val
-                                       |
-                                               \[\[[^]]*\]\]   # Link target
-                                       |
-                                               [\w-]+                  # Plain word
-                                       )
-                               )*
                        )?
                        /x';
+               $valueregex = '/'.$defs.'(?&value)/x';
 
                if ( preg_match_all( $regex, $instring, $matches, PREG_SET_ORDER ) ) {
                        foreach ( $matches as $bits ) {
-                               array_shift( $bits );
-                               $key = strtolower( array_shift( $bits ) );
-                               if ( count( $bits ) == 0 ) {
+                               $key = strtolower( $bits[ 'k' ] );
+                               if ( !isset( $bits[ 'v' ] ) ) {
                                        $opts[$key] = true;
-                               } elseif ( count( $bits ) == 1 ) {
-                                       $opts[$key] = $this->cleanupOption( array_shift( $bits ) );
                                } else {
-                                       // Array!
-                                       $opts[$key] = array_map( array( $this, 'cleanupOption' ), $bits );
+                                       preg_match_all( $valueregex, $bits[ 'v' ], $vmatches );
+                                       $opts[$key] = array_map( array( $this, 'cleanupOption' ), $vmatches[0] );
+                                       if ( count( $opts[$key] ) == 1 ) {
+                                               $opts[$key] = $opts[$key][0];
+                                       }
                                }
                        }
                }
@@ -692,12 +709,16 @@ class ParserTest {
 
        private function cleanupOption( $opt ) {
                if ( substr( $opt, 0, 1 ) == '"' ) {
-                       return substr( $opt, 1, -1 );
+                       return stripcslashes( substr( $opt, 1, -1 ) );
                }
 
                if ( substr( $opt, 0, 2 ) == '[[' ) {
                        return substr( $opt, 2, -2 );
                }
+
+               if ( substr( $opt, 0, 1 ) == '{' ) {
+                       return FormatJson::decode( $opt, true );
+               }
                return $opt;
        }
 
@@ -766,6 +787,7 @@ class ParserTest {
                        'wgSVGConverters' => array( 'null' => 'echo "1">$output' ),
                        'wgLocaltimezone' => 'UTC',
                        'wgAllowExternalImages' => self::getOptionValue( 'wgAllowExternalImages', $opts, true ),
+                       'wgThumbLimits' => array( self::getOptionValue( 'thumbsize', $opts, 180 ) ),
                        'wgUseTidy' => false,
                        'wgDefaultLanguageVariant' => $variant,
                        'wgVariantArticlePath' => false,
@@ -820,8 +842,10 @@ class ParserTest {
                $context = new RequestContext();
                $GLOBALS['wgLang'] = $context->getLanguage();
                $GLOBALS['wgOut'] = $context->getOutput();
+               $GLOBALS['wgUser'] = $context->getUser();
 
-               $GLOBALS['wgUser'] = new User();
+               // We (re)set $wgThumbLimits to a single-element array above.
+               $context->getUser()->setOption( 'thumbsize', 0 );
 
                global $wgHooks;
 
@@ -1053,10 +1077,10 @@ class ParserTest {
                wfMkdirParents( $dir . '/0/09', null, __METHOD__ );
                copy( "$IP/skins/monobook/headbg.jpg", "$dir/0/09/Bad.jpg" );
                wfMkdirParents( $dir . '/f/ff', null, __METHOD__ );
-               copy( "$IP/skins/monobook/headbg.jpg", "$dir/f/ff/Foobar.svg" );
                file_put_contents( "$dir/f/ff/Foobar.svg",
                        '<?xml version="1.0" encoding="utf-8"?>' .
-                       '<svg xmlns="http://www.w3.org/2000/svg" />' );
+                       '<svg xmlns="http://www.w3.org/2000/svg"' .
+                       ' version="1.1" width="240" height="180"/>' );
                return $dir;
        }
 
index a868214..1e0f78d 100644 (file)
 # language=XXX  set content language to XXX for this test
 # variant=XXX   set the variant of language for this test (eg zh-tw)
 # disabled      do not run test
-# parsoid       parsoid-only test (not run by PHP parser)
-# php           php-only test (not run by the parsoid parser)
+# parsoid       parsoid-specific options (not run by PHP parser unless
+#                 the test includes an html/php section)
+# php           php-only test (not run by the parsoid parser unless
+#                 the test includes an html/parsoid section)
 # showtitle     make the first line the title
 # comment       run through Linker::formatComment() instead of main parser
 # local         format section links in edit comment text as local links
 # notoc         disable table of contents
+# thumbsize=NNN set the default thumb size to NNNpx for this test
 #
 # You can also set the following parser properties via test options:
 #  wgEnableUploads, wgAllowExternalImages, wgMaxTocLevel,
@@ -157,23 +160,23 @@ Template:OpenTable
 ###
 !! test
 Blank input
-!! input
-!! result
+!! wikitext
+!! html
 !! end
 
 
 !! test
 Simple paragraph
-!! input
+!! wikitext
 This is a simple paragraph.
-!! result
+!! html
 <p>This is a simple paragraph.
 </p>
 !! end
 
 !! test
 Paragraphs with extra newline spacing
-!! input
+!! wikitext
 foo
 
 bar
@@ -184,7 +187,7 @@ baz
 
 
 booz
-!! result
+!! html
 <p>foo
 </p><p>bar
 </p><p><br />
@@ -196,7 +199,7 @@ baz
 
 !! test
 Paragraphs with newline spacing with comment lines in between
-!! input
+!! wikitext
 ----
 a
 <!--foo-->
@@ -232,7 +235,7 @@ a
 <!--foo-->
 b
 ----
-!! result
+!! html
 <hr />
 <p>a
 b
@@ -269,7 +272,7 @@ b
 
 !! test
 Paragraphs with newline spacing with non-empty white-space lines in between
-!! input
+!! wikitext
 ----
 a
  
@@ -280,7 +283,7 @@ a
  
 b
 ----
-!! result
+!! html
 <hr />
 <p>a
 </p><p>b
@@ -296,7 +299,7 @@ b
 
 !! test
 Paragraphs with newline spacing with non-empty mixed comment and white-space lines in between
-!! input
+!! wikitext
 ----
 a
  <!--foo-->
@@ -319,7 +322,7 @@ a
  
 b
 ----
-!! result
+!! html
 <hr />
 <p>a
 b
@@ -343,13 +346,13 @@ b
 
 !! test
 Extra newlines: More paragraphs with indented comment
-!! input
+!! wikitext
 a
 
    <!--boo-->
 
 b
-!!result
+!! html
 <p>a
 </p><p><br />
 b
@@ -358,7 +361,7 @@ b
 
 !! test
 Extra newlines followed by heading
-!! input
+!! wikitext
 a
 
 
@@ -368,7 +371,7 @@ a
 
 
 =b=
-!! result
+!! html
 <p>a
 </p><p><br />
 </p>
@@ -382,13 +385,13 @@ a
 
 !! test
 Extra newlines between heading and content are swallowed
-!! input
+!! wikitext
 =b=
 
 
 
 [[a]]
-!! result
+!! html
 <h1><span class="mw-headline" id="b">b</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: b">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
 <p><a href="/index.php?title=A&amp;action=edit&amp;redlink=1" class="new" title="A (page does not exist)">a</a>
 </p>
@@ -396,20 +399,20 @@ Extra newlines between heading and content are swallowed
 
 !! test
 Parsing an URL
-!! input
+!! wikitext
 http://fr.wikipedia.org/wiki/🍺
 <!-- EasterEgg we love beer, better be able be able to link to it -->
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://fr.wikipedia.org/wiki/🍺">http://fr.wikipedia.org/wiki/🍺</a>
 </p>
 !! end
 
 !! test
 Simple list
-!! input
+!! wikitext
 * Item 1
 * Item 2
-!! result
+!! html
 <ul>
 <li> Item 1
 </li>
@@ -421,7 +424,7 @@ Simple list
 
 !! test
 Italics and bold
-!! input
+!! wikitext
 * plain
 * plain''italic''plain
 * plain''italic''plain''italic''plain
@@ -437,7 +440,7 @@ Italics and bold
 * plain'''bold''bold-italic'''''plain
 * plain l'''italic''plain
 * plain l''''bold''' plain
-!! result
+!! html
 <ul>
 <li> plain
 </li>
@@ -476,9 +479,9 @@ Italics and bold
 # this example taken from the [[simple:Moon]] article (bug 47326)
 !! test
 Italics and possessives (1)
-!! input
+!! wikitext
 obtained by ''[[Lunar Prospector]]'''s gamma-ray spectrometer
-!! result
+!! html
 <p>obtained by <i><a href="/index.php?title=Lunar_Prospector&amp;action=edit&amp;redlink=1" class="new" title="Lunar Prospector (page does not exist)">Lunar Prospector</a>'</i>s gamma-ray spectrometer
 </p>
 !! end
@@ -486,9 +489,9 @@ obtained by ''[[Lunar Prospector]]'''s gamma-ray spectrometer
 # this example taken from [[en:Flaming Pie]] (bug 49926)
 !! test
 Italics and possessives (2)
-!! input
+!! wikitext
 '''''Flaming Pie''''' is ... released in 1997. In ''Flaming Pie'''s liner notes
-!! result
+!! html
 <p><i><b>Flaming Pie</b></i> is ... released in 1997. In <i>Flaming Pie'</i>s liner notes
 </p>
 !! end
@@ -496,9 +499,9 @@ Italics and possessives (2)
 # this example taken from [[en:Dictionary]] (bug 49926)
 !! test
 Italics and possessives (3)
-!! input
+!! wikitext
 The first monolingual dictionary written in a Romance language was ''Sebastián Covarrubias''' ''Tesoro de la lengua castellana o española'', published in 1611 in Madrid. In 1612 the first edition of the ''Vocabolario dell'[[Accademia della Crusca]]'', for Italian, was published. In 1690 in Rotterdam was published, posthumously, the ''Dictionnaire Universel''.
-!! result
+!! html
 <p>The first monolingual dictionary written in a Romance language was <i>Sebastián Covarrubias'</i> <i>Tesoro de la lengua castellana o española</i>, published in 1611 in Madrid. In 1612 the first edition of the <i>Vocabolario dell'<a href="/index.php?title=Accademia_della_Crusca&amp;action=edit&amp;redlink=1" class="new" title="Accademia della Crusca (page does not exist)">Accademia della Crusca</a></i>, for Italian, was published. In 1690 in Rotterdam was published, posthumously, the <i>Dictionnaire Universel</i>.
 </p>
 !! end
@@ -509,9 +512,9 @@ The first monolingual dictionary written in a Romance language was ''Sebastián
 ###
 !! test
 Italics and bold: 2-quote opening sequence: (2,2)
-!! input
+!! wikitext
 ''foo''
-!! result
+!! html
 <p><i>foo</i>
 </p>
 !!end
@@ -519,9 +522,9 @@ Italics and bold: 2-quote opening sequence: (2,2)
 
 !! test
 Italics and bold: 2-quote opening sequence: (2,3)
-!! input
+!! wikitext
 ''foo'''
-!! result
+!! html
 <p><i>foo'</i>
 </p>
 !!end
@@ -529,32 +532,23 @@ Italics and bold: 2-quote opening sequence: (2,3)
 
 !! test
 Italics and bold: 2-quote opening sequence: (2,4)
-!! input
+!! wikitext
 ''foo''''
-!! result
+!! html
 <p><i>foo''</i>
 </p>
 !!end
 
 
+# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
 !! test
-Italics and bold: 2-quote opening sequence: (2,5) (php)
-!! options
-php
-!! input
+Italics and bold: 2-quote opening sequence: (2,5)
+!! wikitext
 ''foo'''''
-!! result
+!! html/php
 <p><i>foo</i>
 </p>
-!!end
-# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
-!! test
-Italics and bold: 2-quote opening sequence: (2,5) (parsoid)
-!! options
-parsoid
-!! input
-''foo'''''
-!! result
+!! html/parsoid
 <p><i>foo</i><b></b>
 </p>
 !!end
@@ -566,9 +560,9 @@ parsoid
 
 !! test
 Italics and bold: 3-quote opening sequence: (3,2)
-!! input
+!! wikitext
 '''foo''
-!! result
+!! html
 <p>'<i>foo</i>
 </p>
 !!end
@@ -576,9 +570,9 @@ Italics and bold: 3-quote opening sequence: (3,2)
 
 !! test
 Italics and bold: 3-quote opening sequence: (3,3)
-!! input
+!! wikitext
 '''foo'''
-!! result
+!! html
 <p><b>foo</b>
 </p>
 !!end
@@ -586,32 +580,23 @@ Italics and bold: 3-quote opening sequence: (3,3)
 
 !! test
 Italics and bold: 3-quote opening sequence: (3,4)
-!! input
+!! wikitext
 '''foo''''
-!! result
+!! html
 <p><b>foo'</b>
 </p>
 !!end
 
 
+# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
 !! test
-Italics and bold: 3-quote opening sequence: (3,5) (php)
-!! options
-php
-!! input
+Italics and bold: 3-quote opening sequence: (3,5)
+!! wikitext
 '''foo'''''
-!! result
+!! html/php
 <p><b>foo</b>
 </p>
-!!end
-# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
-!! test
-Italics and bold: 3-quote opening sequence: (3,5) (parsoid)
-!! options
-parsoid
-!! input
-'''foo'''''
-!! result
+!! html/parsoid
 <p><b>foo</b><i></i>
 </p>
 !!end
@@ -623,9 +608,9 @@ parsoid
 
 !! test
 Italics and bold: 4-quote opening sequence: (4,2)
-!! input
+!! wikitext
 ''''foo''
-!! result
+!! html
 <p>''<i>foo</i>
 </p>
 !!end
@@ -633,9 +618,9 @@ Italics and bold: 4-quote opening sequence: (4,2)
 
 !! test
 Italics and bold: 4-quote opening sequence: (4,3)
-!! input
+!! wikitext
 ''''foo'''
-!! result
+!! html
 <p>'<b>foo</b>
 </p>
 !!end
@@ -643,32 +628,23 @@ Italics and bold: 4-quote opening sequence: (4,3)
 
 !! test
 Italics and bold: 4-quote opening sequence: (4,4)
-!! input
+!! wikitext
 ''''foo''''
-!! result
+!! html
 <p>'<b>foo'</b>
 </p>
 !!end
 
 
+# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
 !! test
-Italics and bold: 4-quote opening sequence: (4,5) (php)
-!! options
-php
-!! input
+Italics and bold: 4-quote opening sequence: (4,5)
+!! wikitext
 ''''foo'''''
-!! result
+!! html/php
 <p>'<b>foo</b>
 </p>
-!!end
-# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
-!! test
-Italics and bold: 4-quote opening sequence: (4,5) (parsoid)
-!! options
-parsoid
-!! input
-''''foo'''''
-!! result
+!! html/parsoid
 <p>'<b>foo</b><i></i>
 </p>
 !!end
@@ -681,9 +657,9 @@ parsoid
 !! test
 Italics and bold: 5-quote opening sequence: (5,2)
 !! options
-!! input
+!! wikitext
 '''''foo''
-!! result
+!! html
 <p><b><i>foo</i></b>
 </p>
 !!end
@@ -691,9 +667,9 @@ Italics and bold: 5-quote opening sequence: (5,2)
 
 !! test
 Italics and bold: 5-quote opening sequence: (5,3)
-!! input
+!! wikitext
 '''''foo'''
-!! result
+!! html
 <p><i><b>foo</b></i>
 </p>
 !!end
@@ -701,9 +677,9 @@ Italics and bold: 5-quote opening sequence: (5,3)
 
 !! test
 Italics and bold: 5-quote opening sequence: (5,4)
-!! input
+!! wikitext
 '''''foo''''
-!! result
+!! html
 <p><i><b>foo'</b></i>
 </p>
 !!end
@@ -711,9 +687,9 @@ Italics and bold: 5-quote opening sequence: (5,4)
 
 !! test
 Italics and bold: 5-quote opening sequence: (5,5)
-!! input
+!! wikitext
 '''''foo'''''
-!! result
+!! html
 <p><i><b>foo</b></i>
 </p>
 !!end
@@ -723,9 +699,9 @@ Italics and bold: 5-quote opening sequence: (5,5)
 ###
 !! test
 Italics and bold: multiple quote sequences: (2,4,2)
-!! input
+!! wikitext
 ''foo''''bar''
-!! result
+!! html
 <p><i>foo'<b>bar</b></i>
 </p>
 !!end
@@ -733,9 +709,9 @@ Italics and bold: multiple quote sequences: (2,4,2)
 
 !! test
 Italics and bold: multiple quote sequences: (2,4,3)
-!! input
+!! wikitext
 ''foo''''bar'''
-!! result
+!! html
 <p><i>foo'<b>bar</b></i>
 </p>
 !!end
@@ -743,55 +719,37 @@ Italics and bold: multiple quote sequences: (2,4,3)
 
 !! test
 Italics and bold: multiple quote sequences: (2,4,4)
-!! input
+!! wikitext
 ''foo''''bar''''
-!! result
+!! html
 <p><i>foo'<b>bar'</b></i>
 </p>
 !!end
 
 
+# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
 !! test
-Italics and bold: multiple quote sequences: (3,4,2) (php)
-!! options
-php
-!! input
+Italics and bold: multiple quote sequences: (3,4,2)
+!! wikitext
 '''foo''''bar''
-!! result
+!! html/php
 <p><b>foo'</b>bar
 </p>
-!!end
-# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
-!! test
-Italics and bold: multiple quote sequences: (3,4,2) (parsoid)
-!! options
-parsoid
-!! input
-'''foo''''bar''
-!! result
+!! html/parsoid
 <p><b>foo'</b>bar<i></i>
 </p>
 !!end
 
 
+# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
 !! test
-Italics and bold: multiple quote sequences: (3,4,3) (php)
-!! options
-php
-!! input
+Italics and bold: multiple quote sequences: (3,4,3)
+!! wikitext
 '''foo''''bar'''
-!! result
+!! html/php
 <p><b>foo'</b>bar
 </p>
-!!end
-# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
-!! test
-Italics and bold: multiple quote sequences: (3,4,3) (parsoid)
-!! options
-parsoid
-!! input
-'''foo''''bar'''
-!! result
+!! html/parsoid
 <p><b>foo'</b>bar<b></b>
 </p>
 !!end
@@ -801,9 +759,9 @@ parsoid
 ###
 !! test
 Italics and bold: other quote tests: (2,3,5)
-!! input
+!! wikitext
 ''this is about '''foo's family'''''
-!! result
+!! html
 <p><i>this is about <b>foo's family</b></i>
 </p>
 !!end
@@ -811,9 +769,9 @@ Italics and bold: other quote tests: (2,3,5)
 
 !! test
 Italics and bold: other quote tests: (2,(3,3),2)
-!! input
+!! wikitext
 ''this is about '''foo's''' family''
-!! result
+!! html
 <p><i>this is about <b>foo's</b> family</i>
 </p>
 !!end
@@ -821,9 +779,9 @@ Italics and bold: other quote tests: (2,(3,3),2)
 
 !! test
 Italics and bold: other quote tests: (3,2,3,2)
-!! input
+!! wikitext
 '''this is about ''foo'''s family''
-!! result
+!! html
 <p><b>this is about <i>foo</i></b><i>s family</i>
 </p>
 !!end
@@ -832,9 +790,9 @@ Italics and bold: other quote tests: (3,2,3,2)
 !! test
 Italics and bold: other quote tests: (3,2,3,3)
 !! options
-!! input
+!! wikitext
 '''this is about ''foo'''s family'''
-!! result
+!! html
 <p>'<i>this is about </i>foo<b>s family</b>
 </p>
 !!end
@@ -842,9 +800,9 @@ Italics and bold: other quote tests: (3,2,3,3)
 
 !! test
 Italics and bold: other quote tests: (3,(2,2),3)
-!! input
+!! wikitext
 '''this is about ''foo's'' family'''
-!! result
+!! html
 <p><b>this is about <i>foo's</i> family</b>
 </p>
 !!end
@@ -852,9 +810,9 @@ Italics and bold: other quote tests: (3,(2,2),3)
 
 !! test
 Italicized possessive
-!! input
+!! wikitext
 The ''[[Main Page]]'''s talk page.
-!! result
+!! html
 <p>The <i><a href="/wiki/Main_Page" title="Main Page">Main Page</a>'</i>s talk page.
 </p>
 !! end
@@ -864,12 +822,12 @@ Parsoid only: Quote balancing context should be restricted to td/th cells on the
 (Requires tidy for PHP parser output to be fixed up)
 !! options
 parsoid=wt2html,wt2wt
-!! input
+!! wikitext
 {|
 !''a!!''b
 |''a||''b
 |}
-!! result
+!! html
 <table>
 <tbody><tr><th><i>a</i></th><th><i>b</i></th>
 <td><i>a</i></td><td><i>b</i></td></tr>
@@ -882,13 +840,13 @@ parsoid=wt2html,wt2wt
 
 !! test
 Non-html5 tags should be accepted
-!! input
+!! wikitext
 <center>''foo''</center>
 <big>''foo''</big>
 <font>''foo''</font>
 <strike>''foo''</strike>
 <tt>''foo''</tt>
-!! result
+!! html
 <center><i>foo</i></center>
 <p><big><i>foo</i></big>
 <font><i>foo</i></font>
@@ -899,9 +857,9 @@ Non-html5 tags should be accepted
 
 !! test
 <wbr> is valid wikitext (bug 52468)
-!! input
+!! wikitext
 <wbr>
-!! result
+!! html
 <p><wbr />
 </p>
 !! end
@@ -909,11 +867,11 @@ Non-html5 tags should be accepted
 # <strike> is HTML4, <s> is HTML4/5.
 !! test
 <s> or <strike> for strikethrough
-!! input
+!! wikitext
 <strike>strike</strike>
 
 <s>s</s>
-!! result
+!! html
 <p><strike>strike</strike>
 </p><p><s>s</s>
 </p>
@@ -921,7 +879,7 @@ Non-html5 tags should be accepted
 
 !! test
 Non-word characters don't terminate tag names (bug 17663, 40670, 52022)
-!! input
+!! wikitext
 <b→> doesn't work! </b→>
 
 <bä> doesn't work! </bä>
@@ -931,7 +889,7 @@ Non-word characters don't terminate tag names (bug 17663, 40670, 52022)
 <s.foo>s.foo</s.foo>
 
 <sub-ID#1>
-!! result
+!! html
 <p>&lt;b→&gt; doesn't work! &lt;/b→&gt;
 </p><p>&lt;bä&gt; doesn't work! &lt;/bä&gt;
 </p><p>&lt;boo&gt; works fine &lt;/boo&gt;
@@ -942,11 +900,11 @@ Non-word characters don't terminate tag names (bug 17663, 40670, 52022)
 
 !! test
 Isolated close tags should be treated as literal text (bug 52760)
-!! input
+!! wikitext
 </b>
 
 <s.foo>s</s>
-!! result
+!! html
 <p>&lt;/b&gt;
 </p><p>&lt;s.foo&gt;s&lt;/s&gt;
 </p>
@@ -958,18 +916,18 @@ Isolated close tags should be treated as literal text (bug 52760)
 
 !! test
 Bare pipe character (bug 52363)
-!! input
+!! wikitext
 |
-!! result
+!! html
 <p>|
 </p>
 !! end
 
 !! test
 Bare pipe character from a template (bug 52363)
-!! input
+!! wikitext
 {{pipe}}
-!! result
+!! html
 <p>|
 </p>
 !! end
@@ -980,16 +938,16 @@ Bare pipe character from a template (bug 52363)
 
 !! test
 <nowiki> unordered list
-!! input
+!! wikitext
 <nowiki>* This is not an unordered list item.</nowiki>
-!! result
+!! html
 <p>* This is not an unordered list item.
 </p>
 !! end
 
 !! test
 <nowiki> spacing
-!! input
+!! wikitext
 <nowiki>Lorem ipsum dolor
 
 sed abit.
@@ -997,7 +955,7 @@ sed abit.
 
 :and a colon
 </nowiki>
-!! result
+!! html
 <p>Lorem ipsum dolor
 
 sed abit.
@@ -1010,7 +968,7 @@ sed abit.
 
 !! test
 nowiki 3
-!! input
+!! wikitext
 :There is not nowiki.
 :There is <nowiki>nowiki</nowiki>.
 
@@ -1019,7 +977,7 @@ nowiki 3
 
 *There is not nowiki.
 *There is <nowiki>nowiki</nowiki>.
-!! result
+!! html
 <dl>
 <dd>There is not nowiki.
 </dd>
@@ -1043,9 +1001,9 @@ nowiki 3
 
 !! test
 Entities inside <nowiki>
-!! input
+!! wikitext
 <nowiki>&lt;</nowiki>
-!! result
+!! html
 <p>&lt;
 </p>
 !! end
@@ -1054,9 +1012,9 @@ Entities inside <nowiki>
 Entities inside template parameters
 !! options
 parsoid
-!! input
+!! wikitext
 {{echo|&ndash;}}
-!! result
+!! html
 <p><span typeof="mw:Transclusion mw:Entity" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&amp;ndash;"}},"i":0}}]}'>&ndash;</span>
 </p>
 !! end
@@ -1066,7 +1024,7 @@ parsoid
 ###
 !! test
 Comments and Indent-Pre
-!! input
+!! wikitext
 <!-- comment 1 --> asdf
 
 <!-- comment 1 --> asdf
@@ -1077,7 +1035,7 @@ Comments and Indent-Pre
 
 <!-- comment 1 --> asdf
 <!-- comment 2 --> xyz
-!! result
+!! html
 <pre>asdf
 </pre>
 <pre>asdf
@@ -1093,11 +1051,11 @@ xyz
 
 !! test
 Comment test 2a
-!! input
+!! wikitext
 asdf
 <!-- comment 1 -->
 jkl
-!! result
+!! html
 <p>asdf
 jkl
 </p>
@@ -1105,12 +1063,12 @@ jkl
 
 !! test
 Comment test 2b
-!! input
+!! wikitext
 asdf
 <!-- comment 1 -->
 
 jkl
-!! result
+!! html
 <p>asdf
 </p><p>jkl
 </p>
@@ -1118,12 +1076,12 @@ jkl
 
 !! test
 Comment test 3
-!! input
+!! wikitext
 asdf
 <!-- comment 1 -->
 <!-- comment 2 -->
 jkl
-!! result
+!! html
 <p>asdf
 jkl
 </p>
@@ -1131,20 +1089,20 @@ jkl
 
 !! test
 Comment test 4
-!! input
+!! wikitext
 asdf<!-- comment 1 -->jkl
-!! result
+!! html
 <p>asdfjkl
 </p>
 !! end
 
 !! test
 Comment spacing
-!! input
+!! wikitext
 a
  <!-- foo --> b <!-- bar -->
 c
-!! result
+!! html
 <p>a
 </p>
 <pre> b 
 
 !! test
 Comment whitespace
-!! input
+!! wikitext
 <!-- returns a single newline, not nothing, since the newline after > is not stripped -->
-!! result
+!! html
 
 !! end
 
 !! test
 Comment semantics and delimiters
-!! input
+!! wikitext
 <!-- --><!----><!-----><!------>
-!! result
+!! html
 
 !! end
 
 !! test
 Comment semantics and delimiters, redux
-!! input
+!! wikitext
 <!-- In SGML every "foo" here would actually show up in the text -- foo -- bar
 -- foo -- funky huh? ... -->
-!! result
+!! html
 
 !! end
 
 !! test
 Comment semantics and delimiters: directors cut
-!! input
+!! wikitext
 <!-- ... However we like to keep things simple and somewhat XML-ish so we eat
 everything starting with < followed by !-- until the first -- and > we see,
 that wouldn't be valid XML however, since in XML -- has to terminate a comment
 -->-->
-!! result
+!! html
 <p>--&gt;
 </p>
 !! end
 
 !! test
 Comment semantics: nesting
-!! input
+!! wikitext
 <!--<!-- no, we're not going to do anything fancy here -->-->
-!! result
+!! html
 <p>--&gt;
 </p>
 !! end
 
 !! test
 Comment semantics: unclosed comment at end
-!! input
+!! wikitext
 <!--This comment will run out to the end of the document
-!! result
+!! html
 
 !! end
 
 !! test
 Comment in template title
-!! input
+!! wikitext
 {{f<!---->oo}}
-!! result
+!! html
 <p>FOO
 </p>
 !! end
 
 !! test
 Comment on its own line post-expand
-!! input
+!! wikitext
 a
 {{blank}}<!---->
 b
-!! result
+!! html
 <p>a
 </p><p>b
 </p>
 
 !! test
 Comment on its own line post-expand with non-significant whitespace
-!! input
+!! wikitext
 a
  {{blank}} <!----> 
 b
-!! result
+!! html
 <p>a
 </p><p>b
 </p>
 ###
 !! test
 No block tags
-!! input
+!! wikitext
 a
 
 b
-!! result
+!! html
 <p>a
 </p><p>b
 </p>
 
 !! test
 Block tag on one line (<div>)
-!! input
+!! wikitext
 a <div>foo</div>
 
 b
-!! result
+!! html
 a <div>foo</div>
 <p>b
 </p>
@@ -1269,11 +1227,11 @@ a <div>foo</div>
 
 !! test
 Block tag on one line (<blockquote>)
-!! input
+!! wikitext
 a <blockquote>foo</blockquote>
 
 b
-!! result
+!! html
 a <blockquote>foo</blockquote>
 <p>b
 </p>
@@ -1281,11 +1239,11 @@ a <blockquote>foo</blockquote>
 
 !! test
 Block tag on both lines (<div>)
-!! input
+!! wikitext
 a <div>foo</div>
 
 b <div>foo</div>
-!! result
+!! html
 a <div>foo</div>
 b <div>foo</div>
 
@@ -1293,11 +1251,11 @@ b <div>foo</div>
 
 !! test
 Block tag on both lines (<blockquote>)
-!! input
+!! wikitext
 a <blockquote>foo</blockquote>
 
 b <blockquote>foo</blockquote>
-!! result
+!! html
 a <blockquote>foo</blockquote>
 b <blockquote>foo</blockquote>
 
@@ -1305,13 +1263,13 @@ b <blockquote>foo</blockquote>
 
 !! test
 Multiple lines without block tags
-!! input
+!! wikitext
 <div>foo</div> a
 b
 c
 d<!--foo--> e
 x <div>foo</div> z
-!! result
+!! html
 <div>foo</div> a
 <p>b
 c
@@ -1323,7 +1281,7 @@ x <div>foo</div> z
 
 !! test
 Empty lines between lines with block tags
-!! input
+!! wikitext
 <div></div>
 
 
@@ -1336,7 +1294,7 @@ b
 
 
 <div>e</div>
-!! result
+!! html
 <div></div>
 <p><br />
 </p>
 ## PHP parser emits output which is broken
 !! test
 Unclosed HTML p-tags should be handled properly
-!! options
-parsoid
-!! input
+!! wikitext
 <div><p>foo</div>
 a
 
 b
-!! result
+!! html/parsoid
 <div data-parsoid='{"stx":"html"}'><p data-parsoid='{"stx":"html", "autoInsertedEnd":true}'>foo</p></div>
 <p>a</p>
 <p>b</p>
 ###
 !! test
 Preformatted text
-!! input
+!! wikitext
  This is some
  Preformatted text
  With ''italic''
  And '''bold'''
  And a [[Main Page|link]]
-!! result
+!! html
 <pre>This is some
 Preformatted text
 With <i>italic</i>
@@ -1389,12 +1345,12 @@ And a <a href="/wiki/Main_Page" title="Main Page">link</a>
 
 !! test
 Tabs don't trigger preformatted text
-!! input
+!! wikitext
        This is not
         preformatted text.
  This is preformatted text.
        So is this.
-!! result
+!! html
 <p>    This is not
         preformatted text.
 </p>
@@ -1405,10 +1361,10 @@ Tabs don't trigger preformatted text
 
 !! test
 Ident preformatting with inline content
-!! input
+!! wikitext
  a
  ''b''
-!! result
+!! html
 <pre>a
 <i>b</i>
 </pre>
@@ -1416,13 +1372,13 @@ Ident preformatting with inline content
 
 !! test
 <pre> with <nowiki> inside (compatibility with 1.6 and earlier)
-!! input
+!! wikitext
 <pre><nowiki>
 <b>
 <cite>
 <em>
 </nowiki></pre>
-!! result
+!! html
 <pre>
 &lt;b&gt;
 &lt;cite&gt;
@@ -1433,11 +1389,11 @@ Ident preformatting with inline content
 
 !! test
 Regression with preformatted in <center>
-!! input
+!! wikitext
 <center>
  Blah
 </center>
-!! result
+!! html
 <center>
 <pre>Blah
 </pre>
@@ -1447,7 +1403,7 @@ Regression with preformatted in <center>
 
 !! test
 Bug 52763: Preformatted in <blockquote>
-!! input
+!! wikitext
 <blockquote>
  Blah
 {|
@@ -1455,7 +1411,7 @@ Bug 52763: Preformatted in <blockquote>
  indented cell (no pre-wrapping!)
 |}
 </blockquote>
-!! result
+!! html
 <blockquote>
 <p> Blah
 </p>
@@ -1471,13 +1427,13 @@ Bug 52763: Preformatted in <blockquote>
 
 !! test
 Bug 51086: Double newlines in blockquotes should be turned into paragraphs
-!! input
+!! wikitext
 <blockquote>
 Foo
 
 Bar
 </blockquote>
-!! result
+!! html
 <blockquote>
 <p>Foo
 </p><p>Bar
@@ -1488,11 +1444,11 @@ Bar
 
 !! test
 Bug 15491: <ins>/<del> in blockquote
-!! input
+!! wikitext
 <blockquote>
 Foo <del>bar</del> <ins>baz</ins> quux
 </blockquote>
-!! result
+!! html
 <blockquote>
 <p>Foo <del>bar</del> <ins>baz</ins> quux
 </p>
@@ -1505,10 +1461,10 @@ Foo <del>bar</del> <ins>baz</ins> quux
 # below in a <p> tag. (see comment 23-25 of bug #6200)
 !! test
 Bug 15491: <ins>/<del> in blockquote (2)
-!! input
+!! wikitext
 <blockquote>Foo <del>bar</del> <ins>baz</ins> quux
 </blockquote>
-!! result
+!! html
 <blockquote>Foo <del>bar</del> <ins>baz</ins> quux
 </blockquote>
 
@@ -1516,52 +1472,52 @@ Bug 15491: <ins>/<del> in blockquote (2)
 
 !! test
 <pre> with attributes (bug 3202)
-!! input
+!! wikitext
 <pre style="background: blue; color:white">Bluescreen of WikiDeath</pre>
-!! result
+!! html
 <pre style="background: blue; color:white">Bluescreen of WikiDeath</pre>
 
 !! end
 
 !! test
 <pre> with width attribute (bug 3202)
-!! input
+!! wikitext
 <pre width="8">Narrow screen goodies</pre>
-!! result
+!! html
 <pre width="8">Narrow screen goodies</pre>
 
 !! end
 
 !! test
 <pre> with forbidden attribute (bug 3202)
-!! input
+!! wikitext
 <pre width="8" onmouseover="alert(document.cookie)">Narrow screen goodies</pre>
-!! result
+!! html
 <pre width="8">Narrow screen goodies</pre>
 
 !! end
 
 !! test
 Entities inside <pre>
-!! input
+!! wikitext
 <pre>&lt;</pre>
-!! result
+!! html
 <pre>&lt;</pre>
 
 !! end
 
 !! test
 <pre> with forbidden attribute values (bug 3202)
-!! input
+!! wikitext
 <pre width="8" style="border-width: expression(alert(document.cookie))">Narrow screen goodies</pre>
-!! result
+!! html
 <pre width="8" style="/* insecure input */">Narrow screen goodies</pre>
 
 !! end
 
 !! test
 <nowiki> inside <pre> (bug 13238)
-!! input
+!! wikitext
 <pre>
 <nowiki>
 </pre>
@@ -1569,7 +1525,7 @@ Entities inside <pre>
 <nowiki></nowiki>
 </pre>
 <pre><nowiki><nowiki></nowiki>Foo<nowiki></nowiki></nowiki></pre>
-!! result
+!! html
 <pre>
 &lt;nowiki&gt;
 </pre>
@@ -1582,7 +1538,7 @@ Entities inside <pre>
 
 !! test
 <nowiki> and <pre> preference (first one wins)
-!! input
+!! wikitext
 <pre>
 <nowiki>
 </pre>
@@ -1596,7 +1552,7 @@ Entities inside <pre>
 </nowiki>
 </pre>
 
-!! result
+!! html
 <pre>
 &lt;nowiki&gt;
 </pre>
@@ -1613,23 +1569,23 @@ Entities inside <pre>
 
 !! test
 </pre> inside nowiki
-!! input
+!! wikitext
 <nowiki></pre></nowiki>
-!! result
+!! html
 <p>&lt;/pre&gt;
 </p>
 !! end
 
 !! test
 Empty pre; pre inside other HTML tags (bug 54946)
-!! input
+!! wikitext
 a
 
 <div><pre>
 foo
 </pre></div>
 <pre></pre>
-!! result
+!! html
 <p>a
 </p>
 <div><pre>
@@ -1641,10 +1597,10 @@ foo
 
 !! test
 HTML pre followed by indent-pre
-!! input
+!! wikitext
 <pre>foo</pre>
  bar
-!! result
+!! html
 <pre>foo</pre>
 <pre>bar
 </pre>
@@ -1654,36 +1610,36 @@ HTML pre followed by indent-pre
 Block tag pre
 !!options
 parsoid
-!!input
+!! wikitext
 <p><pre>foo</pre></p>
-!!result
-<p data-parsoid='{"stx":"html","autoInsertedEnd":true,"dsr":[0,3,3,0]}'></p><pre data-parsoid='{"stx":"html","dsr":[3,17,5,6]}'>foo</pre><p data-parsoid='{"autoInsertedStart":true,"stx":"html","dsr":[17,21,0,null]}'></p>
+!! html
+<p data-parsoid='{"stx":"html","autoInsertedEnd":true}'></p><pre data-parsoid='{"stx":"html"}'>foo</pre><p data-parsoid='{"autoInsertedStart":true,"stx":"html"}'></p>
 !!end
 
 !!test
 Templates: Indent-Pre: 1a. Templates that break a line should suppress <pre>
-!!input
+!! wikitext
  {{echo|}}
-!!result
+!! html
 
 !!end
 
 !!test
 Templates: Indent-Pre: 1b. Templates that break a line should suppress <pre>
-!!input
+!! wikitext
  {{echo|
 foo}}
-!!result
+!! html
 <p>foo
 </p>
 !!end
 
 !! test
 Templates: Indent-Pre: 1c: Wrapping should be based on expanded content
-!! input
+!! wikitext
  {{echo|a
 b}}
-!!result
+!! html
 <pre>a
 </pre>
 <p>b
@@ -1692,14 +1648,14 @@ b}}
 
 !! test
 Templates: Indent-Pre: 1d: Wrapping should be based on expanded content
-!! input
+!! wikitext
  {{echo|a
 b
 c
  d
 e
 }}
-!!result
+!! html
 <pre>a
 </pre>
 <p>b
@@ -1713,7 +1669,7 @@ c
 
 !!test
 Templates: Indent-Pre: 1e. Wrapping should be based on expanded content
-!!input
+!! wikitext
 {{echo| foo}}
 
 {{echo| foo}}{{echo| bar}}
@@ -1726,7 +1682,7 @@ Templates: Indent-Pre: 1e. Wrapping should be based on expanded content
 <!--cmt-->{{echo| foo}}
 
 {{echo|{{echo| }}bar}}
-!!result
+!! html
 <pre>foo
 </pre>
 <pre>foo bar
@@ -1744,7 +1700,7 @@ bar
 
 !! test
 Templates: Indent-Pre: 1f: Wrapping should be based on expanded content
-!! input
+!! wikitext
 {{echo| }}a
 
 {{echo|
@@ -1758,7 +1714,7 @@ Templates: Indent-Pre: 1f: Wrapping should be based on expanded content
 
 {{echo|a
 }} b
-!!result
+!! html
 <pre>a
 </pre>
 <p><br />
@@ -1781,9 +1737,9 @@ Templates: Indent-Pre: 1f: Wrapping should be based on expanded content
 
 !! test
 Things that look like <pre> tags aren't treated as such
-!! input
+!! wikitext
 Barack Obama <President> of the United States
-!! result
+!! html
 <p>Barack Obama &lt;President&gt; of the United States
 </p>
 !! end
@@ -1792,9 +1748,9 @@ Barack Obama <President> of the United States
 Parsoid: handle pre with space after attribute
 !! options
 parsoid=wt2html
-!! input
+!! wikitext
 <pre style="width:50%;" >{{echo|foo}}</pre>
-!! result
+!! html
 <pre style="width:50%;">{{echo|foo}}</pre>
 !! end
 
@@ -1803,7 +1759,7 @@ parsoid=wt2html
 Parsoid: Don't paragraph-wrap fosterable content
 !! options
 parsoid=wt2html
-!! input
+!! wikitext
 {|
 <td></td>
 <td></td>
@@ -1811,7 +1767,7 @@ parsoid=wt2html
 
 
 |}
-!! result
+!! html
 <table>
 
 <tbody>
@@ -1829,7 +1785,7 @@ parsoid=wt2html
 Parsoid: Don't paragraph-wrap fosterable content even if table syntax is unbalanced
 !! options
 parsoid=wt2html
-!! input
+!! wikitext
 {|
 <td>
 <td>
@@ -1838,7 +1794,7 @@ parsoid=wt2html
 
 
 |}
-!! result
+!! html
 <table>
 
 <tbody>
@@ -1860,7 +1816,7 @@ parsoid=wt2html
 #--------------------------------------------------------------------
 !! test
 Templates: Strip leading and trailing whitespace from named-param values
-!! input
+!! wikitext
 {{echo|1= a }}
 
 {{echo|1= {{echo|b}} }}
@@ -1871,7 +1827,7 @@ Templates: Strip leading and trailing whitespace from named-param values
 {{echo| 1 =
 * d
 }}
-!! result
+!! html
 <p>a
 </p><p>b
 </p><p>c
@@ -1885,7 +1841,7 @@ Templates: Strip leading and trailing whitespace from named-param values
 
 !! test
 Templates: Don't strip whitespace from positional-param values
-!! input
+!! wikitext
 {{echo|a }}
 
 {{echo|{{echo|b}} }}
@@ -1904,7 +1860,7 @@ Templates: Don't strip whitespace from positional-param values
 
 {{echo|
  }}g
-!! result
+!! html
 <p>a 
 </p><p>b 
 </p>
@@ -1932,12 +1888,12 @@ Templates: Don't strip whitespace from positional-param values
 
 !! test
 Templates: Handle empty comment-and-ws-only lines correctly
-!! input
+!! wikitext
 {{echo|foo
 <!--should be ignored-->
  <!--should be ignored as well-->
 bar}}
-!! result
+!! html
 <p>foo
 bar
 </p>
@@ -1950,9 +1906,9 @@ bar
 Templates: Parsoid parameter escaping test 1
 !! options
 parsoid
-!! input
+!! wikitext
 {{echo|[foo]|{{echo|[bar]}}}}
-!! result
+!! html
 <p about="#mwt1" typeof="mw:Transclusion"
 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[foo]"},"2":{"wt":"{{echo|[bar]}}"}},"i":0}}]}'>[foo]</p>
 !! end
@@ -1961,9 +1917,9 @@ data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},
 Parsoid: Pipes in external links in template parameter
 !! options
 parsoid
-!! input
+!! wikitext
 {{echo|[{{echo|http://example.com}} link]}}
-!! result
+!! html
 <p><a rel="mw:ExtLink" href="http://example.com" about="#mwt31" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[{{echo|http://example.com}} link]"}},"i":0}}]}'>link</a></p>
 !! end
 
@@ -1971,9 +1927,9 @@ parsoid
 Parsoid: pipe in transclusion parameter
 !! options
 parsoid
-!! input
+!! wikitext
 {{echo|http://foo.com/a&#124;b}}
-!! result
+!! html
 <p><a rel="mw:ExtLink" href="http://foo.com/a|b" about="#mwt1"
 typeof="mw:Transclusion"
 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"http://foo.com/a&amp;#124;b"}},"i":0}}]}'>http://foo.com/a|b</a></p>
@@ -1983,9 +1939,9 @@ data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},
 Parsoid: Pipe in external link target and content in template parameter
 !! options
 parsoid=html2wt,wt2wt
-!! input
+!! wikitext
 {{echo|[http://foo.com/a&#124;b a&#124;b]}}
-!! result
+!! html
 <p><a rel="mw:ExtLink" href="http://foo.com/a|b" about="#mwt1"
 typeof="mw:Transclusion"
 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},
@@ -1996,11 +1952,11 @@ data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},
 Templates: Don't escape already nowiki-escaped text in template parameters
 !! options
 parsoid=html2wt,wt2wt
-!! input
+!! wikitext
 {{echo|foo<nowiki>|</nowiki>bar}}
 {{echo|<nowiki>&lt;div&gt;</nowiki>}}
 {{echo|<nowiki></nowiki>}}
-!! result
+!! html
 <p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo<nowiki>|</nowiki>bar"}},"i":0}}]}'}'>foo</span><span typeof="mw:Nowiki" about="#mwt1">|</span><span about="#mwt1">bar</span>
 <span typeof="mw:Transclusion mw:Nowiki" about="#mwt2" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<nowiki>&amp;lt;div&amp;gt;</nowiki>"}},"i":0}}]}'><span typeof="mw:Entity">&lt;</span>div<span typeof="mw:Entity">&gt;</span></span>
 <span typeof="mw:Transclusion mw:Nowiki" about="#mwt3" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<nowiki></nowiki>"}},"i":0}}]}'></span>
@@ -2012,9 +1968,9 @@ parsoid=html2wt,wt2wt
 Templates: '=' char in nested transclusions should not trigger nowiki escapes or conversion to named param
 !! options
 parsoid=html2wt,wt2wt
-!! input
+!! wikitext
 {{echo|{{echo|1=bar}}}}
-!! result
+!! html
 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{echo|1=bar}}"}},"i":0}}]}'>bar</p>
 !! end
 
@@ -2023,9 +1979,9 @@ parsoid=html2wt,wt2wt
 Templates parameters with special tokenizing behavior dont get modified because of arg escaping
 !! options
 parsoid
-!! input
+!! wikitext
 {{echo|a : b}}
-!! result
+!! html
 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a : b"}},"i":0}}]}'>a<span typeof="mw:Placeholder" data-parsoid='{"isDisplayHack":true}'> </span>: b</p>
 !! end
 
@@ -2035,11 +1991,11 @@ parsoid
 
 !!test
 1a. Indent-Pre and Comments
-!!input
+!! wikitext
  a
 <!--a-->
 c
-!!result
+!! html
 <pre>a
 </pre>
 <p>c
 
 !!test
 1b. Indent-Pre and Comments
-!!input
+!! wikitext
  a
  <!--a-->
 c
-!!result
+!! html
 <pre>a
 </pre>
 <p>c
 
 !!test
 1c. Indent-Pre and Comments
-!!input
+!! wikitext
 <!--a-->  a
 
  <!--a--> a
-!!result
+!! html
 <pre> a
 </pre>
 <pre> a
 !!test
 1d. Indent-Pre and Comments
 (Pre-handler currently cannot distinguish between comment/ws order and normalizes them to [comment,ws] order)
-!!input
+!! wikitext
 <!--a--> a
 
  <!--b-->b
-!!result
+!! html
 <pre>a
 </pre>
 <pre>b
 
 !!test
 2a. Indent-Pre and tables
-!!input
+!! wikitext
  {|
  |-
  !h1!!h2
  |foo||bar
  |}
-!!result
+!! html
 <table>
 
 <tr>
 
 !!test
 2b. Indent-Pre and tables
-!!input
+!! wikitext
   {|
  |-
 |foo
 |}
-!!result
+!! html
 <table>
 
 <tr>
 
 !!test
 2c. Indent-Pre and tables (bug 42252)
-!!input
+!! wikitext
 {|
  |+ foo
  !  | bar
 |}
-!!result
+!! html
 <table>
 <caption> foo
 </caption>
 
 !!test
 3a. Indent-Pre and block tags (single-line html)
-!!input
+!! wikitext
  a <p> foo </p>
  b <div> foo </div>
  c <blockquote> foo </blockquote>
  <span> foo </span>
-!!result
+!! html
  a <p> foo </p>
  b <div> foo </div>
  c <blockquote> foo </blockquote>
 !!end
 
 !!test
-3c. Indent-Pre and block tags (multi-line html)
-!!input
+3b. Indent-Pre and block tags (multi-line html)
+!! wikitext
  a <span>foo</span>
  b <div> foo </div>
-!!result
+!! html
 <pre>a <span>foo</span>
 </pre>
  b <div> foo </div>
@@ -2168,8 +2124,8 @@ c
 !!end
 
 !!test
-3b. Indent-Pre and block tags (pre-content on separate line)
-!!input
+3c. Indent-Pre and block tags (pre-content on separate line)
+!! wikitext
 <p>
  foo
 </p>
@@ -2200,7 +2156,7 @@ foo
   foo
 </li></ul>
 
-!!result
+!! html
 <p>
  foo
 </p>
@@ -2231,15 +2187,87 @@ foo
 
 !!end
 
+!!test
+4. Indent-Pre and extension tags
+!! wikitext
+ a <gallery>
+File:foobar.jpg
+</gallery>
+!! html
+ a <ul class="gallery mw-gallery-traditional">
+               <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
+Leading pipes outside of tables
+!! options
+parsoid
+!! wikitext
+| foo
+!! html
+<p>| foo</p>
+!! end
+
+!! test
+Leading pipes outside of tables 2
+!! options
+parsoid
+!! wikitext
+a
+| foo
+b
+!! html
+<p>a
+| foo
+b</p>
+!! end
+
+!! test
+Leading pipes outside of tables 3
+!! options
+parsoid
+!! wikitext
+a
+| class="foo bar" | baz
+b
+!! html
+<p>a
+| class="foo bar" | baz
+b</p>
+!! end
+
+!!test
+Render paragraphs when indent-pre is suppressed in blocklevels
+!! wikitext
+<blockquote>
+ foo
+
+ bar
+</blockquote>
+!! html
+<blockquote>
+<p> foo
+</p><p> bar
+</p>
+</blockquote>
+
+!!end
+
 !!test
 4. Multiple spaces at start-of-line
-!!input
+!! wikitext
     <p> foo </p>
     foo
        {|
 |foo
 |}
-!!result
+!! html
     <p> foo </p>
 <pre>   foo
 </pre>
@@ -2253,11 +2281,11 @@ foo
 ## NOTE: the leading white-space chars on empty line are significant
 !! test
 5a. White-space in indent-pre
-!! input
+!! wikitext
  a<br />
  
  b
-!! result
+!! html
 <pre>a<br />
 
 b
 ## NOTE: the leading white-space chars on empty line are significant
 !! test
 5b. White-space in indent-pre
-!! input
+!! wikitext
  a
  
  b
  
  
  c
-!! result
+!! html
 <pre>a
 
 b
 
 !! test
 5c. White-space in indent-pre
-!! input
+!! wikitext
  ''a''
   ''b''
    ''c''
-!! result
+!! html
 <pre><i>a</i>
  <i>b</i>
   <i>c</i>
@@ -2299,7 +2327,7 @@ c
 
 !! test
 6. Pre-blocks should extend across lines with leading WS even when there is no wrappable content
-!! input
+!! wikitext
  a
  
  <!-- continue -->
@@ -2308,7 +2336,7 @@ c
  c
  
 d
-!! result
+!! html
 <pre>a
 
 b
 7a. Indent-pre and category links
 !! options
 parsoid=wt2html,wt2wt
-!! input
+!! wikitext
  [[Category:foo]] <!-- No pre-wrapping -->
 {{echo| [[Category:foo]]}} <!-- No pre-wrapping -->
-!! result
+!! html
  <link rel="mw:PageProp/Category" href="./Category:Foo"> <!-- No pre-wrapping -->
 <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":" [[Category:foo]]"}},"i":0}}]}'> </span>
 <link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1"> <!-- No pre-wrapping -->
@@ -2337,10 +2365,10 @@ parsoid=wt2html,wt2wt
 7b. Indent-pre and category links
 !! options
 parsoid=wt2html,wt2wt
-!! input
+!! wikitext
  [[Category:foo]] a
  [[Category:foo]] {{echo|b}}
-!! result
+!! html
 <pre>
 <link rel="mw:PageProp/Category" href="./Category:Foo"> a
 
@@ -2353,7 +2381,7 @@ parsoid=wt2html,wt2wt
 
 !!test
 HTML-pre: 1. embedded newlines
-!!input
+!! wikitext
 <pre>foo</pre>
 
 <pre>
@@ -2370,7 +2398,7 @@ foo
 
 foo
 </pre>
-!!result
+!! html
 <pre>foo</pre>
 <pre>
 foo
@@ -2389,11 +2417,11 @@ foo
 
 !!test
 HTML-pre: 2: indented text
-!!input
+!! wikitext
 <pre>
  foo
 </pre>
-!!result
+!! html
 <pre>
  foo
 </pre>
@@ -2402,7 +2430,7 @@ HTML-pre: 2: indented text
 
 !!test
 HTML-pre: 3: other wikitext
-!!input
+!! wikitext
 <pre>
 * foo
 # bar
@@ -2410,7 +2438,7 @@ HTML-pre: 3: other wikitext
 '' no-italic ''
 [[ NoLink ]]
 </pre>
-!!result
+!! html
 <pre>
 * foo
 # bar
@@ -2426,9 +2454,9 @@ HTML-pre: 3: other wikitext
 ###
 !! test
 Simple definition
-!! input
+!! wikitext
 ; name : Definition
-!! result
+!! html
 <dl>
 <dt> name&#160;</dt>
 <dd> Definition
@@ -2439,9 +2467,9 @@ Simple definition
 
 !! test
 Definition list for indentation only
-!! input
+!! wikitext
 : Indented text
-!! result
+!! html
 <dl>
 <dd> Indented text
 </dd>
@@ -2451,9 +2479,9 @@ Definition list for indentation only
 
 !! test
 Definition list with no space
-!! input
+!! wikitext
 ;name:Definition
-!! result
+!! html
 <dl>
 <dt>name</dt>
 <dd>Definition
@@ -2464,9 +2492,9 @@ Definition list with no space
 
 !! test
 Definition list with URL link
-!! input
+!! wikitext
 ; http://example.com/ : definition
-!! result
+!! html
 <dl>
 <dt> <a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>&#160;</dt>
 <dd> definition
@@ -2477,9 +2505,9 @@ Definition list with URL link
 
 !! test
 Definition list with bracketed URL link
-!! input
+!! wikitext
 ;[http://www.example.com/ Example]:Something about it
-!! result
+!! html
 <dl>
 <dt><a rel="nofollow" class="external text" href="http://www.example.com/">Example</a></dt>
 <dd>Something about it
@@ -2490,9 +2518,9 @@ Definition list with bracketed URL link
 
 !! test
 Definition list with wikilink containing colon
-!! input
+!! wikitext
 ; [[Help:FAQ]]: The least-read page on Wikipedia
-!! result
+!! html
 <dl>
 <dt> <a href="/index.php?title=Help:FAQ&amp;action=edit&amp;redlink=1" class="new" title="Help:FAQ (page does not exist)">Help:FAQ</a></dt>
 <dd> The least-read page on Wikipedia
@@ -2504,9 +2532,9 @@ Definition list with wikilink containing colon
 # At Brion's and JeLuF's insistence... :)
 !! test
 Definition list with news link containing colon
-!! input
+!! wikitext
 ;  news:alt.wikipedia.rox: This isn't even a real newsgroup!
-!! result
+!! html
 <dl>
 <dt>  <a rel="nofollow" class="external free" href="news:alt.wikipedia.rox">news:alt.wikipedia.rox</a></dt>
 <dd> This isn't even a real newsgroup!
@@ -2517,9 +2545,9 @@ Definition list with news link containing colon
 
 !! test
 Malformed definition list with colon
-!! input
+!! wikitext
 ;  news:alt.wikipedia.rox -- don't crash or enter an infinite loop
-!! result
+!! html
 <dl>
 <dt>  <a rel="nofollow" class="external free" href="news:alt.wikipedia.rox">news:alt.wikipedia.rox</a> -- don't crash or enter an infinite loop
 </dt>
@@ -2529,9 +2557,9 @@ Malformed definition list with colon
 
 !! test
 Definition lists: colon in external link text
-!! input
+!! wikitext
 ; [http://www.wikipedia2.org/ Wikipedia : The Next Generation]: OK, I made that up
-!! result
+!! html
 <dl>
 <dt> <a rel="nofollow" class="external text" href="http://www.wikipedia2.org/">Wikipedia&#160;: The Next Generation</a></dt>
 <dd> OK, I made that up
@@ -2542,9 +2570,9 @@ Definition lists: colon in external link text
 
 !! test
 Definition lists: colon in HTML attribute
-!! input
+!! wikitext
 ;<b style="display: inline">bold</b>
-!! result
+!! html
 <dl>
 <dt><b style="display: inline">bold</b>
 </dt>
@@ -2554,9 +2582,9 @@ Definition lists: colon in HTML attribute
 
 !! test
 Definition lists: self-closed tag
-!! input
+!! wikitext
 ;one<br/>two : two-line fun
-!! result
+!! html
 <dl>
 <dt>one<br />two&#160;</dt>
 <dd> two-line fun
@@ -2567,14 +2595,14 @@ Definition lists: self-closed tag
 
 !! test
 Bug 11748: Literal closing tags
-!! input
+!! wikitext
 <dl>
 <dt>test 1</dt>
 <dd>test test test test test</dd>
 <dt>test 2</dt>
 <dd>test test test test test</dd>
 </dl>
-!! result
+!! html
 <dl>
 <dt>test 1</dt>
 <dd>test test test test test</dd>
@@ -2586,12 +2614,12 @@ Bug 11748: Literal closing tags
 
 !! test
 Definition and unordered list using wiki syntax nested in unordered list using html tags.
-!! input
+!! wikitext
 <ul><li>
 ; term : description
 * unordered
 </li></ul>
-!! result
+!! html
 <ul><li>
 <dl>
 <dt> term&#160;</dt>
@@ -2609,10 +2637,10 @@ Definition and unordered list using wiki syntax nested in unordered list using h
 !! test
 
 Definition list with empty definition and following paragraph
-!! input
+!! wikitext
 ; term:
 Paragraph text
-!! result
+!! html
 <dl>
 <dt> term</dt>
 <dd>
@@ -2624,13 +2652,13 @@ Paragraph text
 
 !! test
 Nested definition lists using html syntax
-!! input
+!! wikitext
 <dl><dd>
 <dl>
 <dd>Foo</dd>
 </dl>
 </dd></dl>
-!! result
+!! html
 <dl><dd>
 <dl>
 <dd>Foo</dd>
@@ -2641,11 +2669,11 @@ Nested definition lists using html syntax
 
 !! test
 Definition Lists: No nesting: Multiple dd's
-!! input
+!! wikitext
 ;x
 :a
 :b
-!! result
+!! html
 <dl>
 <dt>x
 </dt>
@@ -2659,11 +2687,11 @@ Definition Lists: No nesting: Multiple dd's
 
 !! test
 Definition Lists: Indentation: Regular
-!! input
+!! wikitext
 :i1
 ::i2
 :::i3
-!! result
+!! html
 <dl>
 <dd>i1
 <dl>
@@ -2681,10 +2709,10 @@ Definition Lists: Indentation: Regular
 
 !! test
 Definition Lists: Indentation: Missing 1st level
-!! input
+!! wikitext
 ::i2
 :::i3
-!! result
+!! html
 <dl>
 <dd><dl>
 <dd>i2
@@ -2701,9 +2729,9 @@ Definition Lists: Indentation: Missing 1st level
 
 !! test
 Definition Lists: Indentation: Multi-level indent
-!! input
+!! wikitext
 :::i3
-!! result
+!! html
 <dl>
 <dd><dl>
 <dd><dl>
@@ -2719,14 +2747,14 @@ Definition Lists: Indentation: Multi-level indent
 
 !! test
 Definition Lists: Hacky use to indent tables
-!! input
+!! wikitext
 ::{|
 |foo
 |bar
 |}
 this text
 should be left alone
-!! result
+!! html
 <dl><dd><dl><dd><table>
 <tr>
 <td>foo
@@ -2743,11 +2771,11 @@ should be left alone
 Definition Lists: Hacky use to indent tables (WS-insensitive)
 !! options
 parsoid
-!! input
+!! wikitext
 : {|
 |a
 |} 
-!! result
+!! html
 <dl>
 <dd> <table><tr><td>a</td></tr></table> </dd>
 </dl>
@@ -2789,7 +2817,7 @@ parsoid
 
 !! test
 Table / list interaction: indented table with lists in table contents
-!! input
+!! wikitext
 :{|
 |-
 | a
@@ -2798,7 +2826,7 @@ Table / list interaction: indented table with lists in table contents
 | c
 * d
 |}
-!! result
+!! html
 <dl><dd><table>
 
 <tr>
@@ -2820,7 +2848,7 @@ Table / list interaction: indented table with lists in table contents
 
 !!test
 Table / list interaction: lists nested in tables nested in indented lists
-!!input
+!! wikitext
 :{|
 |
 :a
@@ -2832,7 +2860,7 @@ Table / list interaction: lists nested in tables nested in indented lists
 
 *e
 *f
-!!result
+!! html
 <dl><dd><table>
 <tr>
 <td>
@@ -2864,11 +2892,11 @@ Table / list interaction: lists nested in tables nested in indented lists
 Definition Lists: Nesting: Multi-level (Parsoid only)
 !! options
 parsoid
-!! input
+!! wikitext
 ;t1 :d1
 ;;t2 ::d2
 ;;;t3 :::d3
-!! result
+!! html
 <dl>
   <dt>t1 </dt>
   <dd>d1</dd>
@@ -2894,10 +2922,10 @@ parsoid
 Definition Lists: Nesting: Test 2 (Parsoid only)
 !! options
 parsoid
-!! input
+!! wikitext
 ;t1
 ::d2
-!! result
+!! html
 <dl>
   <dt>t1</dt>
   <dd>
@@ -2914,10 +2942,10 @@ parsoid
 Definition Lists: Nesting: Test 3 (Parsoid only)
 !! options
 parsoid
-!! input
+!! wikitext
 :;t1
 ::::d2
-!! result
+!! html
 <dl>
   <dd>
     <dl>
@@ -2940,10 +2968,10 @@ parsoid
 
 !! test
 Definition Lists: Nesting: Test 4
-!! input
+!! wikitext
 ::;t3
 :::d3
-!! result
+!! html
 <dl>
 <dd><dl>
 <dd><dl>
@@ -2964,14 +2992,12 @@ Definition Lists: Nesting: Test 4
 ## bug in the PHP parser.  (Parsoid team thinks the PHP parser is
 ## wrong to close the <dl> after the <dt> containing the <ul>.)
 !! test
-Definition Lists: Mixed Lists: Test 1 (php)
-!! options
-php
-!! input
+Definition Lists: Mixed Lists: Test 1
+!! wikitext
 :;* foo
 ::* bar
 :; baz
-!! result
+!! html/php
 <dl>
 <dd><dl>
 <dt><ul>
@@ -2989,16 +3015,7 @@ php
 </dd>
 </dl>
 
-!! end
-!! test
-Definition Lists: Mixed Lists: Test 1 (parsoid)
-!! options
-parsoid
-!! input
-:;* foo
-::* bar
-:; baz
-!! result
+!! html/parsoid
 <dl>
 <dd><dl>
 <dt><ul>
@@ -3016,10 +3033,10 @@ parsoid
 
 !! test
 Definition Lists: Mixed Lists: Test 2
-!! input
+!! wikitext
 *: d1
 *: d2
-!! result
+!! html
 <ul>
 <li><dl>
 <dd> d1
@@ -3035,10 +3052,10 @@ Definition Lists: Mixed Lists: Test 2
 
 !! test
 Definition Lists: Mixed Lists: Test 3
-!! input
+!! wikitext
 *::: d1
 *::: d2
-!! result
+!! html
 <ul>
 <li><dl>
 <dd><dl>
@@ -3060,10 +3077,10 @@ Definition Lists: Mixed Lists: Test 3
 
 !! test
 Definition Lists: Mixed Lists: Test 4
-!! input
+!! wikitext
 *;d1 :d2
 *;d3 :d4
-!! result
+!! html
 <ul>
 <li><dl>
 <dt>d1&#160;</dt>
@@ -3081,10 +3098,10 @@ Definition Lists: Mixed Lists: Test 4
 
 !! test
 Definition Lists: Mixed Lists: Test 5
-!! input
+!! wikitext
 *:d1
 *:: d2
-!! result
+!! html
 <ul>
 <li><dl>
 <dd>d1
@@ -3102,10 +3119,10 @@ Definition Lists: Mixed Lists: Test 5
 
 !! test
 Definition Lists: Mixed Lists: Test 6
-!! input
+!! wikitext
 #*:d1
 #*::: d3
-!! result
+!! html
 <ol>
 <li><ul>
 <li><dl>
@@ -3129,10 +3146,10 @@ Definition Lists: Mixed Lists: Test 6
 
 !! test
 Definition Lists: Mixed Lists: Test 7
-!! input
+!! wikitext
 :* d1
 :* d2
-!! result
+!! html
 <dl>
 <dd><ul>
 <li> d1
@@ -3148,10 +3165,10 @@ Definition Lists: Mixed Lists: Test 7
 
 !! test
 Definition Lists: Mixed Lists: Test 8
-!! input
+!! wikitext
 :* d1
 ::* d2
-!! result
+!! html
 <dl>
 <dd><ul>
 <li> d1
@@ -3172,9 +3189,9 @@ Definition Lists: Mixed Lists: Test 8
 
 !! test
 Definition Lists: Mixed Lists: Test 9
-!! input
+!! wikitext
 *;foo :bar
-!! result
+!! html
 <ul>
 <li><dl>
 <dt>foo&#160;</dt>
@@ -3189,9 +3206,9 @@ Definition Lists: Mixed Lists: Test 9
 
 !! test
 Definition Lists: Mixed Lists: Test 10
-!! input
+!! wikitext
 *#;foo :bar
-!! result
+!! html
 <ul>
 <li><ol>
 <li><dl>
@@ -3212,13 +3229,11 @@ Definition Lists: Mixed Lists: Test 10
 # still-open tags around until the nesting is complete.
 
 !! test
-Definition Lists: Mixed Lists: Test 11 (php)
-!! options
-php
-!! input
+Definition Lists: Mixed Lists: Test 11
+!! wikitext
 *#*#;*;;foo :bar
 *#*#;boo :baz
-!! result
+!! html/php
 <ul>
 <li><ol>
 <li><ul>
@@ -3251,15 +3266,7 @@ php
 </li>
 </ul>
 
-!! end
-!! test
-Definition Lists: Mixed Lists: Test 11 (parsoid)
-!! options
-parsoid
-!! input
-*#*#;*;;foo :bar
-*#*#;boo :baz
-!! result
+!! html/parsoid
 <ul>
 <li>
 <ol>
@@ -3291,12 +3298,10 @@ parsoid
 
 
 !! test
-Definition Lists: Weird Ones: Test 1 (php)
-!! options
-php
-!! input
+Definition Lists: Weird Ones: Test 1
+!! wikitext
 *#;*::;; foo : bar (who uses this?)
-!! result
+!! html/php
 <ul>
 <li><ol>
 <li><dl>
@@ -3324,14 +3329,7 @@ php
 </li>
 </ul>
 
-!! end
-!! test
-Definition Lists: Weird Ones: Test 1 (parsoid)
-!! options
-parsoid
-!! input
-*#;*::;; foo : bar (who uses this?)
-!! result
+!! html/parsoid
 <ul>
 <li>
 <ol>
@@ -3364,20 +3362,20 @@ parsoid
 ###
 !! test
 External links: non-bracketed
-!! input
+!! wikitext
 Non-bracketed: http://example.com
-!! result
+!! html
 <p>Non-bracketed: <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
 </p>
 !! end
 
 !! test
 External links: numbered
-!! input
+!! wikitext
 Numbered: [http://example.com]
 Numbered: [http://example.net]
 Numbered: [http://example.com]
-!! result
+!! html
 <p>Numbered: <a rel="nofollow" class="external autonumber" href="http://example.com">[1]</a>
 Numbered: <a rel="nofollow" class="external autonumber" href="http://example.net">[2]</a>
 Numbered: <a rel="nofollow" class="external autonumber" href="http://example.com">[3]</a>
@@ -3386,73 +3384,73 @@ Numbered: <a rel="nofollow" class="external autonumber" href="http://example.com
 
 !! test
 External links: specified text
-!! input
+!! wikitext
 Specified text: [http://example.com link]
-!! result
+!! html
 <p>Specified text: <a rel="nofollow" class="external text" href="http://example.com">link</a>
 </p>
 !!end
 
 !! test
 External links: trail
-!! input
+!! wikitext
 Linktrails should not work for external links: [http://example.com link]s
-!! result
+!! html
 <p>Linktrails should not work for external links: <a rel="nofollow" class="external text" href="http://example.com">link</a>s
 </p>
 !! end
 
 !! test
 External links: dollar sign in URL
-!! input
+!! wikitext
 http://example.com/1$2345
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://example.com/1$2345">http://example.com/1$2345</a>
 </p>
 !! end
 
 !! test
 External links: dollar sign in URL (named)
-!! input
+!! wikitext
 [http://example.com/1$2345]
-!! result
+!! html
 <p><a rel="nofollow" class="external autonumber" href="http://example.com/1$2345">[1]</a>
 </p>
 !!end
 
 !! test
 External links: open square bracket forbidden in URL (bug 4377)
-!! input
+!! wikitext
 http://example.com/1[2345
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://example.com/1">http://example.com/1</a>[2345
 </p>
 !! end
 
 !! test
 External links: open square bracket forbidden in URL (named) (bug 4377)
-!! input
+!! wikitext
 [http://example.com/1[2345]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://example.com/1">[2345</a>
 </p>
 !!end
 
 !! test
 External links: nowiki in URL link text (bug 6230)
-!!input
+!! wikitext
 [http://example.com/ <nowiki>''example site''</nowiki>]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://example.com/">''example site''</a>
 </p>
 !! end
 
 !! test
 External links: newline forbidden in text (bug 6230 regression check)
-!! input
+!! wikitext
 [http://example.com/ first
 second]
-!! result
+!! html
 <p>[<a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a> first
 second]
 </p>
@@ -3460,63 +3458,63 @@ second]
 
 !! test
 External links: Pipe char between url and text
-!! input
+!! wikitext
 [http://example.com | link]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://example.com">| link</a>
 </p>
 !!end
 
 !! test
 External links: protocol-relative URL in brackets
-!! input
+!! wikitext
 [//example.com/ Test]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="//example.com/">Test</a>
 </p>
 !! end
 
 !! test
 External links: protocol-relative URL in brackets without text
-!! input
+!! wikitext
 [//example.com]
-!! result
+!! html
 <p><a rel="nofollow" class="external autonumber" href="//example.com">[1]</a>
 </p>
 !! end
 
 !! test
 External links: protocol-relative URL in free text is left alone
-!! input
+!! wikitext
 //example.com/Foo
-!! result
+!! html
 <p>//example.com/Foo
 </p>
 !!end
 
 !! test
 External links: protocol-relative URL in the middle of a word is left alone (bug 30269)
-!! input
+!! wikitext
 foo//example.com/Foo
-!! result
+!! html
 <p>foo//example.com/Foo
 </p>
 !! end
 
 !! test
 External image
-!! input
+!! wikitext
 External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
-!! result
+!! html
 <p>External image: <img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" />
 </p>
 !! end
 
 !! test
 External image from https
-!! input
+!! wikitext
 External image from https: https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
-!! result
+!! html
 <p>External image from https: <img src="https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" />
 </p>
 !! end
@@ -3525,135 +3523,135 @@ External image from https: https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
 External image (when not allowed)
 !! options
 wgAllowExternalImages=0
-!! input
+!! wikitext
 External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
-!! result
+!! html
 <p>External image: <a rel="nofollow" class="external free" href="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png">http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png</a>
 </p>
 !! end
 
 !! test
 Link to non-http image, no img tag
-!! input
+!! wikitext
 Link to non-http image, no img tag: ftp://example.com/test.jpg
-!! result
+!! html
 <p>Link to non-http image, no img tag: <a rel="nofollow" class="external free" href="ftp://example.com/test.jpg">ftp://example.com/test.jpg</a>
 </p>
 !! end
 
 !! test
 External links: terminating separator
-!! input
+!! wikitext
 Terminating separator: http://example.com/thing,
-!! result
+!! html
 <p>Terminating separator: <a rel="nofollow" class="external free" href="http://example.com/thing">http://example.com/thing</a>,
 </p>
 !! end
 
 !! test
 External links: intervening separator
-!! input
+!! wikitext
 Intervening separator: http://example.com/1,2,3
-!! result
+!! html
 <p>Intervening separator: <a rel="nofollow" class="external free" href="http://example.com/1,2,3">http://example.com/1,2,3</a>
 </p>
 !! end
 
 !! test
 External links: old bug with URL in query
-!! input
+!! wikitext
 Old bug with URL in query: [http://example.com/thing?url=http://example.com link]
-!! result
+!! html
 <p>Old bug with URL in query: <a rel="nofollow" class="external text" href="http://example.com/thing?url=http://example.com">link</a>
 </p>
 !! end
 
 !! test
 External links: old URL-in-URL bug, mixed protocols
-!! input
+!! wikitext
 And again with mixed protocols: [ftp://example.com?url=http://example.com link]
-!! result
+!! html
 <p>And again with mixed protocols: <a rel="nofollow" class="external text" href="ftp://example.com?url=http://example.com">link</a>
 </p>
 !!end
 
 !! test
 External links: URL in text
-!! input
+!! wikitext
 URL in text: [http://example.com http://example.com]
-!! result
+!! html
 <p>URL in text: <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
 </p>
 !! end
 
 !! test
 External links: Clickable images
-!! input
+!! wikitext
 ja-style clickable images: [http://example.com http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png]
-!! result
+!! html
 <p>ja-style clickable images: <a rel="nofollow" class="external text" href="http://example.com"><img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" /></a>
 </p>
 !!end
 
 !! test
 External links: raw ampersand
-!! input
+!! wikitext
 Old &amp; use: http://x&y
-!! result
+!! html
 <p>Old &amp; use: <a rel="nofollow" class="external free" href="http://x&amp;y">http://x&amp;y</a>
 </p>
 !! end
 
 !! test
 External links: encoded ampersand
-!! input
+!! wikitext
 Old &amp; use: http://x&amp;y
-!! result
+!! html
 <p>Old &amp; use: <a rel="nofollow" class="external free" href="http://x&amp;y">http://x&amp;y</a>
 </p>
 !! end
 
 !! test
 External links: encoded equals (bug 6102)
-!! input
+!! wikitext
 http://example.com/?foo&#61;bar
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://example.com/?foo=bar">http://example.com/?foo=bar</a>
 </p>
 !! end
 
 !! test
 External links: [raw ampersand]
-!! input
+!! wikitext
 Old &amp; use: [http://x&y]
-!! result
+!! html
 <p>Old &amp; use: <a rel="nofollow" class="external autonumber" href="http://x&amp;y">[1]</a>
 </p>
 !! end
 
 !! test
 External links: [encoded ampersand]
-!! input
+!! wikitext
 Old &amp; use: [http://x&amp;y]
-!! result
+!! html
 <p>Old &amp; use: <a rel="nofollow" class="external autonumber" href="http://x&amp;y">[1]</a>
 </p>
 !! end
 
 !! test
 External links: [encoded equals] (bug 6102)
-!! input
+!! wikitext
 [http://example.com/?foo&#61;bar]
-!! result
+!! html
 <p><a rel="nofollow" class="external autonumber" href="http://example.com/?foo=bar">[1]</a>
 </p>
 !! end
 
 !! test
 External links: [IDN ignored character reference in hostname; strip it right off]
-!! input
+!! wikitext
 [http://e&zwnj;xample.com/]
-!! result
+!! html
 <p><a rel="nofollow" class="external autonumber" href="http://example.com/">[1]</a>
 </p>
 !! end
@@ -3677,118 +3675,118 @@ External links: [IDN ignored character reference in hostname; strip it right off
 # The Parsoid team.
 !! test
 External links: IDN ignored character reference in hostname; strip it right off
-!! input
+!! wikitext
 http://e&zwnj;xample.com/
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>
 </p>
 !! end
 
 !! test
 External links: www.jpeg.org (bug 554)
-!! input
+!! wikitext
 http://www.jpeg.org
-!!result
+!! html
 <p><a rel="nofollow" class="external free" href="http://www.jpeg.org">http://www.jpeg.org</a>
 </p>
 !! end
 
 !! test
 External links: URL within URL (original bug 2)
-!! input
+!! wikitext
 [http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp]
-!! result
+!! html
 <p><a rel="nofollow" class="external autonumber" href="http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp">[1]</a>
 </p>
 !! end
 
 !! test
 BUG 361: URL inside bracketed URL
-!! input
+!! wikitext
 [http://www.example.com/foo http://www.example.com/bar]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://www.example.com/foo">http://www.example.com/bar</a>
 </p>
 !! end
 
 !! test
 BUG 361: URL within URL, not bracketed
-!! input
+!! wikitext
 http://www.example.com/foo?=http://www.example.com/bar
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://www.example.com/foo?=http://www.example.com/bar">http://www.example.com/foo?=http://www.example.com/bar</a>
 </p>
 !! end
 
 !! test
 BUG 289: ">"-token in URL-tail
-!! input
+!! wikitext
 http://www.example.com/<hello>
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://www.example.com/">http://www.example.com/</a>&lt;hello&gt;
 </p>
 !!end
 
 !! test
 BUG 289: literal ">"-token in URL-tail
-!! input
+!! wikitext
 http://www.example.com/<b>html</b>
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://www.example.com/">http://www.example.com/</a><b>html</b>
 </p>
 !!end
 
 !! test
 BUG 289: ">"-token in bracketed URL
-!! input
+!! wikitext
 [http://www.example.com/<hello> stuff]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://www.example.com/">&lt;hello&gt; stuff</a>
 </p>
 !!end
 
 !! test
 BUG 289: literal ">"-token in bracketed URL
-!! input
+!! wikitext
 [http://www.example.com/<b>html</b> stuff]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://www.example.com/"><b>html</b> stuff</a>
 </p>
 !!end
 
 !! test
 BUG 289: literal double quote at end of URL
-!! input
+!! wikitext
 http://www.example.com/"hello"
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://www.example.com/">http://www.example.com/</a>"hello"
 </p>
 !!end
 
 !! test
 BUG 289: literal double quote in bracketed URL
-!! input
+!! wikitext
 [http://www.example.com/"hello" stuff]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://www.example.com/">"hello" stuff</a>
 </p>
 !!end
 
 !! test
 External links: multiple legal whitespace is fine, Magnus. Don't break it please. (bug 5081)
-!! input
+!! wikitext
 [http://www.example.com  test]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://www.example.com">test</a>
 </p>
 !! end
 
 !! test
 External links: link text with spaces
-!! input
+!! wikitext
 [http://www.example.com a b c]
 [http://www.example.com ''a'' ''b'']
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://www.example.com">a b c</a>
 <a rel="nofollow" class="external text" href="http://www.example.com"><i>a</i> <i>b</i></a>
 </p>
@@ -3796,32 +3794,22 @@ External links: link text with spaces
 
 !! test
 External links: wiki links within external link (Bug 3695)
-!! options
-php
-!! input
+!! wikitext
 [http://example.com [[wikilink]] embedded in ext link]
-!! result
+!! html/php
 <p><a rel="nofollow" class="external text" href="http://example.com"></a><a href="/index.php?title=Wikilink&amp;action=edit&amp;redlink=1" class="new" title="Wikilink (page does not exist)">wikilink</a><a rel="nofollow" class="external text" href="http://example.com"> embedded in ext link</a>
 </p>
-!! end
-
-!! test
-Parsoid: External links: wiki links within external link (Bug 3695)
-!! options
-parsoid
-!! input
-[http://example.com [[wikilink]] embedded in ext link]
-!! result
+!! html/parsoid
 <p><a rel="mw:ExtLink" href="http://example.com"></a><a rel="mw:WikiLink" href="./Wikilink">wikilink</a><span> embedded in ext link</span></p>
 !! end
 
 !! test
 BUG 787: Links with one slash after the url protocol are invalid
-!! input
+!! wikitext
 http:/example.com
 
 [http:/example.com title]
-!! result
+!! html
 <p>http:/example.com
 </p><p>[http:/example.com title]
 </p>
@@ -3829,22 +3817,22 @@ http:/example.com
 
 !! test
 Bracketed external links with template-generated invalid target
-!! input
+!! wikitext
 [{{echo|http:/example.com}} title]
-!! result
+!! html
 <p>[http:/example.com title]
 </p>
 !! end
 
 !! test
 Bug 2702: Mismatched <i>, <b> and <a> tags are invalid
-!! input
+!! wikitext
 ''[http://example.com text'']
 [http://example.com '''text]'''
 ''Something [http://example.com in italic'']
 ''Something [http://example.com mixed''''', even bold]'''
 '''''Now [http://example.com both''''']
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://example.com"><i>text</i></a>
 <a rel="nofollow" class="external text" href="http://example.com"><b>text</b></a>
 <i>Something </i><a rel="nofollow" class="external text" href="http://example.com"><i>in italic</i></a>
@@ -3856,9 +3844,9 @@ Bug 2702: Mismatched <i>, <b> and <a> tags are invalid
 
 !! test
 Bug 4781: %26 in URL
-!! input
+!! wikitext
 http://www.example.com/?title=AT%26T
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://www.example.com/?title=AT%26T">http://www.example.com/?title=AT%26T</a>
 </p>
 !! end
@@ -3867,18 +3855,18 @@ http://www.example.com/?title=AT%26T
 # % is actually legal in HTML5. Any change in output would need testing though.
 !! test
 Bug 4781, 5267: %25 in URL
-!! input
+!! wikitext
 http://www.example.com/?title=100%25_Bran
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://www.example.com/?title=100%25_Bran">http://www.example.com/?title=100%25_Bran</a>
 </p>
 !! end
 
 !! test
 Bug 4781, 5267: %28, %29 in URL
-!! input
+!! wikitext
 http://www.example.com/?title=Ben-Hur_%281959_film%29
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">http://www.example.com/?title=Ben-Hur_%281959_film%29</a>
 </p>
 !! end
@@ -3886,27 +3874,27 @@ http://www.example.com/?title=Ben-Hur_%281959_film%29
 
 !! test
 Bug 4781: %26 in autonumber URL
-!! input
+!! wikitext
 [http://www.example.com/?title=AT%26T]
-!! result
+!! html
 <p><a rel="nofollow" class="external autonumber" href="http://www.example.com/?title=AT%26T">[1]</a>
 </p>
 !! end
 
 !! test
 Bug 4781, 5267: %26 in autonumber URL
-!! input
+!! wikitext
 [http://www.example.com/?title=100%25_Bran]
-!! result
+!! html
 <p><a rel="nofollow" class="external autonumber" href="http://www.example.com/?title=100%25_Bran">[1]</a>
 </p>
 !! end
 
 !! test
 Bug 4781, 5267: %28, %29 in autonumber URL
-!! input
+!! wikitext
 [http://www.example.com/?title=Ben-Hur_%281959_film%29]
-!! result
+!! html
 <p><a rel="nofollow" class="external autonumber" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">[1]</a>
 </p>
 !! end
@@ -3914,104 +3902,94 @@ Bug 4781, 5267: %28, %29 in autonumber URL
 
 !! test
 Bug 4781: %26 in bracketed URL
-!! input
+!! wikitext
 [http://www.example.com/?title=AT%26T link]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://www.example.com/?title=AT%26T">link</a>
 </p>
 !! end
 
 !! test
 Bug 4781, 5267: %26 in bracketed URL
-!! input
+!! wikitext
 [http://www.example.com/?title=100%25_Bran link]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://www.example.com/?title=100%25_Bran">link</a>
 </p>
 !! end
 
 !! test
 Bug 4781, 5267: %28, %29 in bracketed URL
-!! input
+!! wikitext
 [http://www.example.com/?title=Ben-Hur_%281959_film%29 link]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">link</a>
 </p>
 !! end
 
 !! test
 External link containing double-single-quotes in text '' (bug 4598 sanity check)
-!! input
+!! wikitext
 Some [http://example.com/ pretty ''italics'' and stuff]!
-!! result
+!! html
 <p>Some <a rel="nofollow" class="external text" href="http://example.com/">pretty <i>italics</i> and stuff</a>!
 </p>
 !! end
 
 !! test
 External link containing double-single-quotes in text embedded in italics (bug 4598 sanity check)
-!! input
+!! wikitext
 ''Some [http://example.com/ pretty ''italics'' and stuff]!''
-!! result
+!! html
 <p><i>Some </i><a rel="nofollow" class="external text" href="http://example.com/"><i>pretty </i>italics<i> and stuff</i></a><i>!</i>
 </p>
 !! end
 
 !! test
 External link containing double-single-quotes with no space separating the url from text in italics
-!! options
-php
-!! input
+!! wikitext
 [http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo Picasso]].]
-!! result
+!! html/php
 <p><a rel="nofollow" class="external text" href="http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm"><i>La muerte de Casagemas</i> (1901) en el sitio de <a href="/index.php?title=Museo_Picasso_(Par%C3%ADs)&amp;action=edit&amp;redlink=1" class="new" title="Museo Picasso (París) (page does not exist)">Museo Picasso</a>.</a>
 </p>
-!! end
-
-!! test
-Parsoid:External link containing double-single-quotes with no space separating the url from text in italics
-!! options
-parsoid
-!! input
-[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo Picasso]].]
-!! result
+!! html/parsoid
 <p><a rel="mw:ExtLink" href="http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm"><i>La muerte de Casagemas</i> (1901) en el sitio de </a><a rel="mw:WikiLink" href="./Museo_Picasso_(París)">Museo Picasso</a><span>.</span></p>
 !! end
 
 !! test
 External link with comments in link text
-!! input
+!! wikitext
 [http://www.google.com Google <!-- comment -->]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://www.google.com">Google </a>
 </p>
 !! end
 
 !! test
 URL-encoding in URL functions (single parameter)
-!! input
+!! wikitext
 {{localurl:Some page|amp=&}}
-!! result
+!! html
 <p>/index.php?title=Some_page&amp;amp=&amp;
 </p>
 !! end
 
 !! test
 URL-encoding in URL functions (multiple parameters)
-!! input
+!! wikitext
 {{localurl:Some page|q=?&amp=&}}
-!! result
+!! html
 <p>/index.php?title=Some_page&amp;q=?&amp;amp=&amp;
 </p>
 !! end
 
 !! test
 Brackets in urls
-!! input
+!! wikitext
 http://example.com/index.php?foozoid%5B%5D=bar
 
 http://example.com/index.php?foozoid&#x5B;&#x5D;=bar
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://example.com/index.php?foozoid%5B%5D=bar">http://example.com/index.php?foozoid%5B%5D=bar</a>
 </p><p><a rel="nofollow" class="external free" href="http://example.com/index.php?foozoid%5B%5D=bar">http://example.com/index.php?foozoid%5B%5D=bar</a>
 </p>
@@ -4021,16 +3999,16 @@ http://example.com/index.php?foozoid&#x5B;&#x5D;=bar
 IPv6 urls (bug 21261)
 !! options
 disabled
-!! input
+!! wikitext
 http://[2404:130:0:1000::187:2]/index.php
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://[2404:130:0:1000::187:2]/index.php">http://[2404:130:0:1000::187:2]/index.php</a>
 </p>
 !! end
 
 !! test
 Non-extlinks in brackets
-!! input
+!! wikitext
 [foo]
 [foo bar]
 [foo ''bar'']
@@ -4043,7 +4021,7 @@ Non-extlinks in brackets
 [{{echo|foo}}l's errand]
 [url={{echo|foo}}]
 [url=http://example.com]
-!! result
+!! html
 <p>[foo]
 [foo bar]
 [foo <i>bar</i>]
@@ -4060,32 +4038,31 @@ Non-extlinks in brackets
 !! end
 
 !! test
-Parsoid: Percent encoding in external links
-!! options
-parsoid
-!! input
+Percent encoding in external links
+!! wikitext
 [https://github.com/search?l=&q=ResourceLoader+%40wikimedia Search]
-!! result
+!! html/php
+<p><a rel="nofollow" class="external text" href="https://github.com/search?l=&amp;q=ResourceLoader+%40wikimedia">Search</a>
+</p>
+!! html/parsoid
 <p><a rel="mw:ExtLink"
 href="https://github.com/search?l=&amp;q=ResourceLoader+%40wikimedia">Search</a></p>
 !! end
 
 !! test
-Parsoid: use url link syntax for links where the content is equal the link
-target
-!! options
-parsoid
-!! input
+Use url link syntax for links where the content is equal the link target
+!! wikitext
 http://example.com
-!! result
+!! html/php
+<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
+</p>
+!! html/parsoid
 <p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></p>
 !! end
 
 !! test
 Parenthesis in external links, especially URL links
-!! options
-php
-!! input 
+!! wikitext
 http://example.com)
 
 http://example.com/test)
@@ -4101,7 +4078,7 @@ http://example.com/((test)
 http://example.com/a)b
 
 [http://example.com) foo]
-!! result
+!! html/php
 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
 </p><p><a rel="nofollow" class="external free" href="http://example.com/test">http://example.com/test</a>)
 </p><p><a rel="nofollow" class="external free" href="http://example.com/(test)">http://example.com/(test)</a>
@@ -4111,29 +4088,7 @@ http://example.com/a)b
 </p><p><a rel="nofollow" class="external free" href="http://example.com/a)b">http://example.com/a)b</a>
 </p><p><a rel="nofollow" class="external text" href="http://example.com)">foo</a>
 </p>
-!! end
-
-!! test
-Parenthesis in external links, especially URL links (Parsoid)
-!! options
-parsoid
-!! input 
-http://example.com)
-
-http://example.com/test)
-
-http://example.com/(test)
-
-http://example.com/((test)
-
-(http://example.com/(test))
-
-(http://example.com/(test)))))
-
-http://example.com/a)b
-
-[http://example.com) foo]
-!! result
+!! html/parsoid
 <p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a>)</p>
 <p><a rel="mw:ExtLink" href="http://example.com/test">http://example.com/test</a>)</p>
 <p><a rel="mw:ExtLink" href="http://example.com/(test)">http://example.com/(test)</a></p>
@@ -4146,16 +4101,18 @@ http://example.com/a)b
 
 !! test
 Parenthesis in external links, w/ transclusion or comment
-!! options
-parsoid
-!! input
+!! wikitext
 (http://example.com/{{echo|hi}})
 
 (http://example.com<!-- hi -->)
-!! result
-<p>(<a data-mw='{"attribs":[[{"txt":"href"},{"html":"http://example.com/&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;hi&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[20,31,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\">hi&lt;/span>"}]]}' typeof="mw:ExpandedAttrs" about="#mwt2" rel="mw:ExtLink" href="http://example.com/hi" data-parsoid='{"stx":"url","a":{"href":"http://example.com/hi"},"sa":{"href":"http://example.com/{{echo|hi}}"},"dsr":[1,31,0,0]}'>http://example.com/hi</a>)</p>
+!! html/php
+<p>(<a rel="nofollow" class="external free" href="http://example.com/hi">http://example.com/hi</a>)
+</p><p>(<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
+</p>
+!! html/parsoid
+<p>(<a data-mw='{"attribs":[[{"txt":"href"},{"html":"http://example.com/&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;hi&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[20,31,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\">hi&lt;/span>"}]]}' typeof="mw:ExpandedAttrs" about="#mwt2" rel="mw:ExtLink" href="http://example.com/hi" data-parsoid='{"stx":"url","a":{"href":"http://example.com/hi"},"sa":{"href":"http://example.com/{{echo|hi}}"}}'>http://example.com/hi</a>)</p>
 
-<p>(<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url","a":{"href":"http://example.com"},"sa":{"href":"http://example.com&lt;!-- hi -->"},"dsr":[35,64,0,0]}'>http://example.com</a>)</p>
+<p>(<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url","a":{"href":"http://example.com"},"sa":{"href":"http://example.com&lt;!-- hi -->"}}'>http://example.com</a>)</p>
 !! end
 
 ###
@@ -4164,22 +4121,23 @@ parsoid
 
 !! test
 Quotes
-!! input
+!! wikitext
 Normal text. '''Bold text.''' Normal text. ''Italic text.''
 
 Normal text. '''''Bold italic text.''''' Normal text.
-!!result
+!! html
 <p>Normal text. <b>Bold text.</b> Normal text. <i>Italic text.</i>
 </p><p>Normal text. <i><b>Bold italic text.</b></i> Normal text.
 </p>
 !! end
 
 
+# Parsoid inserts an empty bold tag pair at the end of the line, that the PHP
+# parser strips. The wikitext contains just the first half of the bold
+# quote pair.
 !! test
-Unclosed and unmatched quotes (php)
-!! options
-php
-!! input
+Unclosed and unmatched quotes
+!! wikitext
 '''''Bold italic text '''with bold deactivated''' in between.'''''
 
 '''''Bold italic text ''with italic deactivated'' in between.'''''
@@ -4200,7 +4158,7 @@ Normal text.
 ''Tom'''s car is bigger than ''Susan'''s.
 
 Plain ''italic'''s plain
-!! result
+!! html/php
 <p><i><b>Bold italic text </b>with bold deactivated<b> in between.</b></i>
 </p><p><b><i>Bold italic text </i>with italic deactivated<i> in between.</i></b>
 </p><p><b>Bold text..</b>
@@ -4212,36 +4170,7 @@ Plain ''italic'''s plain
 </p><p><i>Tom<b>s car is bigger than </b></i><b>Susan</b>s.
 </p><p>Plain <i>italic'</i>s plain
 </p>
-!! end
-# Parsoid inserts an empty bold tag pair at the end of the line, that the PHP
-# parser strips. The wikitext contains just the first half of the bold
-# quote pair.
-!! test
-Unclosed and unmatched quotes (parsoid)
-!! options
-parsoid
-!! input
-'''''Bold italic text '''with bold deactivated''' in between.'''''
-
-'''''Bold italic text ''with italic deactivated'' in between.'''''
-
-'''Bold text..
-
-..spanning two paragraphs (should not work).'''
-
-'''Bold tag left open
-
-''Italic tag left open
-
-Normal text.
-
-<!-- Unmatching number of opening, closing tags: -->
-'''This year''''s election ''should'' beat '''last year''''s.
-
-''Tom'''s car is bigger than ''Susan'''s.
-
-Plain ''italic'''s plain
-!! result
+!! html/parsoid
 <p><i><b>Bold italic text </b>with bold deactivated<b> in between.</b></i>
 </p><p><b><i>Bold italic text </i>with italic deactivated<i> in between.</i></b>
 </p><p><b>Bold text..</b>
@@ -4264,24 +4193,16 @@ Plain ''italic'''s plain
 # This should not produce <table></table> as <table><tr><td></td></tr></table>
 # is the bare minimum required by the spec, see:
 # http://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_module_Basic_Tables
-!! test
-A table with no data. (php)
-!! options
-php
-!! input
-{||}
-!! result
-
-!! end
-
 # Parsoid team replies: empty table tags are legal in HTML5
 !! test
-A table with no data. (parsoid)
+A table with no data.
 !! options
 parsoid=wt2html
-!! input
+!! wikitext
 {||}
-!! result
+!! html/php
+
+!! html/parsoid
 <table></table>
 
 !! end
@@ -4290,7 +4211,7 @@ parsoid=wt2html
 A table with stray table end tags on start tag line (wt2html)
 !! options
 parsoid=wt2html
-!! input
+!! wikitext
 {|style="color: red;"|}
 
 {|style="color: red;" |}
@@ -4304,7 +4225,7 @@ parsoid=wt2html
 {|style="color: red;" |} id="foo"
 |foo
 |}
-!! result
+!! html
 <table style="color: red;"></table>
 
 <table style="color: red;">
@@ -4328,54 +4249,41 @@ parsoid=wt2html
 !! end
 
 !! test
-A table with no data (take 2) (parsoid)
-!! options
-parsoid
-!! input
+A table with no data (take 2)
+!! wikitext
 {|
 |}
-!! result
+!! html/parsoid
 <table></table>
 !! end
 
 # A table with nothing but a caption is invalid XHTML, we might want to render
 # this as <p>caption</p>
+# Parsoid team replies: table with only a caption is legal in HTML5
 !! test
-A table with nothing but a caption (php)
-!! options
-php
-!! input
+A table with nothing but a caption
+!! wikitext
 {|
 |+ caption
 |}
-!! result
+!! html/php
 <table>
 <caption> caption
 </caption><tr><td></td></tr></table>
 
-!! end
-# Parsoid team replies: table with only a caption is legal in HTML5
-!! test
-A table with nothing but a caption (parsoid)
-!! options
-parsoid
-!! input
-{|
-|+ caption
-|}
-!! result
+!! html/parsoid
 <table><caption> caption</caption></table>
 !! end
 
 !! test
 A table with caption with default-spaced attributes and a table row
-!! input
+!! wikitext
 {|
 |+ style="color: red;" | caption1
 |-
 | foo
 |}
-!! result
+!! html
 <table>
 <caption style="color: red;"> caption1
 </caption>
@@ -4387,14 +4295,14 @@ A table with caption with default-spaced attributes and a table row
 
 !! test
 A table with captions with non-default spaced attributes and a table row
-!! input
+!! wikitext
 {|
 |+style="color: red;"|caption2
 |+ style="color: red;"| caption3
 |-
 | foo
 |}
-!! result
+!! html
 <table>
 <caption style="color: red;">caption2
 </caption>
@@ -4408,14 +4316,14 @@ A table with captions with non-default spaced attributes and a table row
 
 !! test
 Table td-cell syntax variations
-!! input
+!! wikitext
 {|
 | foo bar foo | baz
 | foo bar foo || baz
 | style='color:red;' | baz
 | style='color:red;' || baz
 |}
-!! result
+!! html
 <table>
 <tr>
 <td> baz
@@ -4433,13 +4341,13 @@ Table td-cell syntax variations
 
 !! test
 Simple table
-!! input
+!! wikitext
 {|
 | 1 || 2
 |-
 | 3 || 4
 |}
-!! result
+!! html
 <table>
 <tr>
 <td> 1 </td>
@@ -4454,13 +4362,13 @@ Simple table
 
 !! test
 Simple table but with multiple dashes for row wikitext
-!! input
+!! wikitext
 {|
 | foo
 |-----
 | bar
 |}
-!! result
+!! html
 <table>
 <tr>
 <td> foo
@@ -4472,7 +4380,7 @@ Simple table but with multiple dashes for row wikitext
 !! end
 !! test
 Multiplication table
-!! input
+!! wikitext
 {| border="1" cellpadding="2"
 |+Multiplication table
 |-
@@ -4493,7 +4401,7 @@ Multiplication table
 ! 5
 | 5 || 10 || 15
 |}
-!! result
+!! html
 <table border="1" cellpadding="2">
 <caption>Multiplication table
 </caption>
@@ -4543,11 +4451,11 @@ Multiplication table
 
 !! test
 Accept "||" in table headings
-!! input
+!! wikitext
 {|
 !h1 || h2
 |}
-!! result
+!! html
 <table>
 <tr>
 <th>h1 </th>
@@ -4558,11 +4466,11 @@ Accept "||" in table headings
 
 !! test
 Accept "||" in indented table headings
-!! input
+!! wikitext
 :{|
 !h1 || h2
 |}
-!! result
+!! html
 <dl><dd><table>
 <tr>
 <th>h1 </th>
@@ -4573,12 +4481,12 @@ Accept "||" in indented table headings
 
 !! test
 Accept empty attributes in td/th cells (td/th cells starting with leading ||)
-!! input
+!! wikitext
 {|
 !| h1
 || a
 |}
-!! result
+!! html
 <table>
 <tr>
 <th> h1
@@ -4590,12 +4498,12 @@ Accept empty attributes in td/th cells (td/th cells starting with leading ||)
 
 !!test
 Accept "| !" at start of line in tables (ignore !-attribute)
-!!input
+!! wikitext
 {|
 |-
 | !style="color:red" | bar
 |}
-!!result
+!! html
 <table>
 
 <tr>
@@ -4606,7 +4514,7 @@ Accept "| !" at start of line in tables (ignore !-attribute)
 
 !!test
 Allow +/- in 2nd and later cells in a row, in 1st cell when td-attrs are present, or in 1st cell when there is a space between "|" and +/- 
-!!input
+!! wikitext
 {|
 |-
 |style='color:red;'|+1
@@ -4618,7 +4526,7 @@ Allow +/- in 2nd and later cells in a row, in 1st cell when td-attrs are present
 | +1
 | -1
 |}
-!!result
+!! html
 <table>
 
 <tr>
@@ -4645,7 +4553,7 @@ Allow +/- in 2nd and later cells in a row, in 1st cell when td-attrs are present
 
 !! test
 Table rowspan
-!! input
+!! wikitext
 {| border=1
 | Cell 1, row 1
 |rowspan=2| Cell 2, row 1 (and 2)
@@ -4654,7 +4562,7 @@ Table rowspan
 | Cell 1, row 2
 | Cell 3, row 2
 |}
-!! result
+!! html
 <table border="1">
 <tr>
 <td> Cell 1, row 1
@@ -4673,7 +4581,7 @@ Table rowspan
 
 !! test
 Nested table
-!! input
+!! wikitext
 {| border=1
 | &alpha;
 |
@@ -4684,7 +4592,7 @@ Nested table
 |}
 |the original table again
 |}
-!! result
+!! html
 <table border="1">
 <tr>
 <td> &#945;
@@ -4705,11 +4613,11 @@ Nested table
 
 !! test
 Invalid attributes in table cell (bug 1830)
-!! input
+!! wikitext
 {|
 |Cell:|broken
 |}
-!! result
+!! html
 <table>
 <tr>
 <td>broken
@@ -4720,10 +4628,10 @@ Invalid attributes in table cell (bug 1830)
 
 !! test
 Table security: embedded pipes (http://lists.wikimedia.org/mailman/htdig/wikitech-l/2006-April/022293.html)
-!! input
+!! wikitext
 {|
 | |[ftp://|x||]" onmouseover="alert(document.cookie)">test
-!! result
+!! html
 <table>
 <tr>
 <td>[<a rel="nofollow" class="external free" href="ftp://%7Cx">ftp://%7Cx</a></td>
@@ -4737,7 +4645,7 @@ Table security: embedded pipes (http://lists.wikimedia.org/mailman/htdig/wikitec
 
 !! test
 Indented table markup mixed with indented pre content (proposed in bug 6200)
-!! input
+!! wikitext
  <table>
  <tr>
  <td>
@@ -4745,7 +4653,7 @@ Indented table markup mixed with indented pre content (proposed in bug 6200)
  </td>
  </tr>
  </table>
-!! result
+!! html
  <table>
  <tr>
  <td>
@@ -4759,12 +4667,12 @@ Indented table markup mixed with indented pre content (proposed in bug 6200)
 
 !! test
 Template-generated table cell attributes and cell content
-!! input
+!! wikitext
 {|
 |{{table_attribs}}
 | {{table_attribs}}
 |}
-!! result
+!! html
 <table>
 <tr>
 <td style="color: red"> Foo
@@ -4776,11 +4684,11 @@ Template-generated table cell attributes and cell content
 
 !! test
 Template-generated table cell attributes and cell content (2)
-!! input
+!! wikitext
 {|
 |align=center {{table_attribs}}
 |}
-!! result
+!! html
 <table>
 <tr>
 <td align="center" style="color: red"> Foo
@@ -4790,11 +4698,11 @@ Template-generated table cell attributes and cell content (2)
 
 !! test
 Template-generated table cell attributes and cell content (3)
-!! input
+!! wikitext
 {|
 |align=center {{table_cells}}
 |}
-!! result
+!! html
 <table>
 <tr>
 <td align="center" style="color: red"> Foo </td>
@@ -4806,13 +4714,13 @@ Template-generated table cell attributes and cell content (3)
 
 !! test
 Table with row followed by newlines and table heading
-!! input
+!! wikitext
 {|
 |-
 
 ! foo
 |}
-!! result
+!! html
 <table>
 
 
@@ -4824,13 +4732,13 @@ Table with row followed by newlines and table heading
 
 !! test
 Table with empty line following the start tag
-!! input
+!! wikitext
 {|
 
 |-
 | foo
 |}
-!! result
+!! html
 <table>
 
 
@@ -4844,13 +4752,11 @@ Table with empty line following the start tag
 # the PHP parser. Parsoid implements the behavior below.
 !! test
 Table attributes with empty value
-!! options
-parsoid
-!! input
+!! wikitext
 {|
 | style=| hello
 |}
-!! result
+!! html/parsoid
 <table>
 <tbody>
 <tr>
@@ -4861,7 +4767,7 @@ parsoid
 
 !! test
 Wikitext table with a lot of comments
-!! input
+!! wikitext
 {|
 <!-- c0 -->
 | foo
@@ -4871,7 +4777,7 @@ Wikitext table with a lot of comments
 |<!-- c4 -->
 <!-- c5 -->
 |}
-!! result
+!! html
 <table>
 <tr>
 <td> foo
@@ -4884,12 +4790,12 @@ Wikitext table with a lot of comments
 
 !! test
 Wikitext table with double-line table cell
-!! input
+!! wikitext
 {|
 |a
 b
 |}
-!! result
+!! html
 <table>
 <tr>
 <td>a
 
 !! test
 Table cell with a single comment
-!! input
+!! wikitext
 {|
 | <!-- c1 -->
 | a
 |}
-!! result
+!! html
 <table>
 <tr>
 <td>
@@ -4920,15 +4826,13 @@ Table cell with a single comment
 # not parse this kind of table at all. The main focus for Parsoid is on
 # round-tripping, so this output is ok for now. TODO: revisit!
 !! test
-Wikitext table with html-syntax row (Parsoid)
-!! options
-parsoid
-!! input
+Wikitext table with html-syntax row
+!! wikitext
 {|
 |-
 <td>foo</td>
 |}
-!! result
+!! html/parsoid
 <table>
 <tbody>
 <tr>
@@ -4940,12 +4844,12 @@ Implicit <td> after a |-
 (PHP parser relies on Tidy to add the missing <td> tags)
 !! options
 parsoid=wt2html,wt2wt
-!! input
+!! wikitext
 {|
 |-
 a
 |}
-!! result
+!! html
 <table>
 <tr><td>a</td></tr>
 </table>
@@ -4956,7 +4860,7 @@ Pres should be recognized in an explicit <td> context, but not in an implicit <t
 (PHP parser relies on Tidy to add the missing <td> tags)
 !! options
 parsoid=wt2html,wt2wt
-!! input
+!! wikitext
 {|
 |-
 |
@@ -4964,7 +4868,7 @@ parsoid=wt2html,wt2wt
 |-
  b
 |}
-!! result
+!! html
 <table>
 <tbody>
 <tr><td><pre>a</pre></td></tr>
@@ -4978,12 +4882,12 @@ Lists should be recognized in an implicit <td> context
 (PHP parser relies on Tidy to add the missing <td> tags)
 !! options
 parsoid=wt2html,wt2wt
-!! input
+!! wikitext
 {|
 |-
 *a
 |}
-!! result
+!! html
 <table>
 <tr>
 <td><ul>
@@ -4997,7 +4901,7 @@ parsoid=wt2html,wt2wt
 Parsoid: Round-trip tables directly followed by content (bug 51219)
 !! options
 parsoid=wt2html,wt2wt
-!! input
+!! wikitext
 {|
 |foo
 |} bar
@@ -5005,7 +4909,7 @@ parsoid=wt2html,wt2wt
 {|
 |baz
 |}<b>quux</b>
-!! result
+!! html
 <table><tbody>
 <tr>
 <td>foo</td></tr></tbody></table> bar
@@ -5019,7 +4923,7 @@ parsoid=wt2html,wt2wt
 Parsoid: Default to a newline after tables in new content (bug 51219)
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 {|
 |foo
 |}
@@ -5028,7 +4932,7 @@ parsoid=html2wt
 |baz
 |}
 '''quux'''
-!! result
+!! html
 <table><tbody>
 <tr><td>foo</td></tr></tbody></table> bar
 <table><tbody>
@@ -5039,11 +4943,11 @@ parsoid=html2wt
 Parsoid: newline inducing block nodes don't suppress <nowiki>
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 <nowiki> </nowiki>a
 
 = foo =
-!! result
+!! html
  a<h1>foo</h1>
 !! end
 
@@ -5052,90 +4956,90 @@ parsoid=html2wt
 ###
 !! test
 Plain link, capitalized
-!! input
+!! wikitext
 [[Main Page]]
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
 </p>
 !! end
 
 !! test
 Plain link, uncapitalized
-!! input
+!! wikitext
 [[main Page]]
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">main Page</a>
 </p>
 !! end
 
 !! test
 Piped link
-!! input
+!! wikitext
 [[Main Page|The Main Page]]
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">The Main Page</a>
 </p>
 !! end
 
 !! test
 Piped link with comment in link text
-!! input
+!! wikitext
 [[Main Page|The Main<!--front--> Page]]
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">The Main Page</a>
 </p>
 !! end
 
 !! test
 Broken link
-!! input
+!! wikitext
 [[Zigzagzogzagzig]]
-!! result
+!! html
 <p><a href="/index.php?title=Zigzagzogzagzig&amp;action=edit&amp;redlink=1" class="new" title="Zigzagzogzagzig (page does not exist)">Zigzagzogzagzig</a>
 </p>
 !! end
 
 !! test
 Broken link with fragment
-!! input
+!! wikitext
 [[Zigzagzogzagzig#zug]]
-!! result
+!! html
 <p><a href="/index.php?title=Zigzagzogzagzig&amp;action=edit&amp;redlink=1" class="new" title="Zigzagzogzagzig (page does not exist)">Zigzagzogzagzig#zug</a>
 </p>
 !! end
 
 !! test
 Special page link with fragment
-!! input
+!! wikitext
 [[Special:Version#anchor]]
-!! result
+!! html
 <p><a href="/wiki/Special:Version#anchor" title="Special:Version">Special:Version#anchor</a>
 </p>
 !! end
 
 !! test
 Nonexistent special page link with fragment
-!! input
+!! wikitext
 [[Special:ThisNameWillHopefullyNeverBeUsed#anchor]]
-!! result
+!! html
 <p><a href="/wiki/Special:ThisNameWillHopefullyNeverBeUsed" class="new" title="Special:ThisNameWillHopefullyNeverBeUsed (page does not exist)">Special:ThisNameWillHopefullyNeverBeUsed#anchor</a>
 </p>
 !! end
 
 !! test
 Link with prefix
-!! input
+!! wikitext
 xxx[[main Page]], xxx[[Main Page]], Xxx[[main Page]] XXX[[main Page]], XXX[[Main Page]]
-!! result
+!! html
 <p>xxx<a href="/wiki/Main_Page" title="Main Page">main Page</a>, xxx<a href="/wiki/Main_Page" title="Main Page">Main Page</a>, Xxx<a href="/wiki/Main_Page" title="Main Page">main Page</a> XXX<a href="/wiki/Main_Page" title="Main Page">main Page</a>, XXX<a href="/wiki/Main_Page" title="Main Page">Main Page</a>
 </p>
 !! end
 
 !! test
 Link with suffix
-!! input
+!! wikitext
 [[Main Page]]xxx, [[Main Page]]XXX, [[Main Page]]!!!
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">Main Pagexxx</a>, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>XXX, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>!!!
 </p>
 !! end
@@ -5148,13 +5052,13 @@ Some text
 
 !! test
 Bug 43661: Piped links with identical prefixes
-!! input
+!! wikitext
 [[prefixed article|prefixed articles with spaces]]
 
 [[prefixed article|prefixed articlesaoeu]]
 
 [[Main Page|Main Page test]]
-!! result
+!! html
 <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>
@@ -5164,37 +5068,46 @@ Bug 43661: Piped links with identical prefixes
 
 !! test
 Link with HTML entity in suffix / tail
-!! input
+!! wikitext
 [[Main Page]]&quot;, [[Main Page]]&#97;
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>&quot;, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>&#97;
 </p>
 !! end
 
 !! test
 Link with 3 brackets
-!! input
-[[[main page]]]
-!! result
-<p>[[[main page]]]
+!! wikitext
+[[[Main Page]]]
+!! html
+<p>[[[Main Page]]]
+</p>
+!! end
+
+!! test
+Link with 4 brackets
+!! wikitext
+[[[[Main Page]]]]
+!! html
+<p>[[<a href="/wiki/Main_Page" title="Main Page">Main Page</a>]]
 </p>
 !! end
 
 !! test
 Piped link with 3 brackets
-!! input
+!! wikitext
 [[[main page|the main page]]]
-!! result
+!! html
 <p>[[[main page|the main page]]]
 </p>
 !! end
 
 !! test
 Piped link with extlink-like text
-!! input
+!! wikitext
 [[Main Page|[bar]]]
 [[Main Page|This is a [bar]]]
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">[bar]</a>
 <a href="/wiki/Main_Page" title="Main Page">This is a [bar]</a>
 </p>
@@ -5202,18 +5115,18 @@ Piped link with extlink-like text
 
 !! test
 Link with multiple pipes
-!! input
+!! wikitext
 [[Main Page|The|Main|Page]]
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">The|Main|Page</a>
 </p>
 !! end
 
 !! test
 Link to namespaces
-!! input
+!! wikitext
 [[Talk:Parser testing]], [[Meta:Disclaimers]]
-!! result
+!! html
 <p><a href="/index.php?title=Talk:Parser_testing&amp;action=edit&amp;redlink=1" class="new" title="Talk:Parser testing (page does not exist)">Talk:Parser testing</a>, <a href="/index.php?title=Meta:Disclaimers&amp;action=edit&amp;redlink=1" class="new" title="Meta:Disclaimers (page does not exist)">Meta:Disclaimers</a>
 </p>
 !! end
@@ -5227,9 +5140,9 @@ This is an article in the MemoryAlpha namespace
 
 !! test
 Namespace takes precedence over interwiki link (bug 51680)
-!! input
+!! wikitext
 [[MemoryAlpha:AlphaTest]]
-!! result
+!! html
 <p><a href="/wiki/MemoryAlpha:AlphaTest" title="MemoryAlpha:AlphaTest">MemoryAlpha:AlphaTest</a>
 </p>
 !! end
@@ -5240,54 +5153,54 @@ Namespace takes precedence over interwiki link (bug 51680)
 Link to namespace preferred over interwiki with correct rel attribute
 !! options
 parsoid=html2wt,html2html
-!! input
+!! wikitext
 [[MemoryAlpha:AlphaTest]]
-!! result
+!! html
 <p><a rel="mw:WikiLink" href="./MemoryAlpha:AlphaTest">MemoryAlpha:AlphaTest</a>
 </p>
 !! end
 
 !! test
 Piped link to namespace
-!! input
+!! wikitext
 [[Meta:Disclaimers|The disclaimers]]
-!! result
+!! html
 <p><a href="/index.php?title=Meta:Disclaimers&amp;action=edit&amp;redlink=1" class="new" title="Meta:Disclaimers (page does not exist)">The disclaimers</a>
 </p>
 !! end
 
 !! test
 Link containing }
-!! input
+!! wikitext
 [[Usually caused by a typo (oops}]]
-!! result
+!! html
 <p>[[Usually caused by a typo (oops}]]
 </p>
 !! end
 
 !! test
 Link containing % (not as a hex sequence)
-!! input
+!! wikitext
 [[7% Solution]]
-!! result
+!! html
 <p><a href="/index.php?title=7%25_Solution&amp;action=edit&amp;redlink=1" class="new" title="7% Solution (page does not exist)">7% Solution</a>
 </p>
 !! end
 
 !! test
 Link containing % as a single hex sequence interpreted to char
-!! input
+!! wikitext
 [[7%25 Solution]]
-!! result
+!! html
 <p><a href="/index.php?title=7%25_Solution&amp;action=edit&amp;redlink=1" class="new" title="7% Solution (page does not exist)">7% Solution</a>
 </p>
 !!end
 
 !! test
 Link containing % as a double hex sequence interpreted to hex sequence
-!! input
+!! wikitext
 [[7%2525 Solution]]
-!! result
+!! html
 <p>[[7%2525 Solution]]
 </p>
 !!end
@@ -5295,27 +5208,27 @@ Link containing % as a double hex sequence interpreted to hex sequence
 !! test
 Link containing "#<" and "#>" % as a hex sequences- these are valid section anchors
 Example for such a section: == < ==
-!! input
+!! wikitext
 [[%23%3c]][[%23%3e]]
-!! result
+!! html
 <p><a href="#.3C">#&lt;</a><a href="#.3E">#&gt;</a>
 </p>
 !! end
 
 !! test
 Link containing "<#" and ">#" as a hex sequences
-!! input
+!! wikitext
 [[%3c%23]][[%3e%23]]
-!! result
+!! html
 <p>[[%3c%23]][[%3e%23]]
 </p>
 !! end
 
 !! test
 Link containing an equals sign
-!! input
+!! wikitext
 [[Special:BookSources/isbn=4-00-026157-6]]
-!! result
+!! html
 <p><a href="/wiki/Special:BookSources/isbn%3D4-00-026157-6" title="Special:BookSources/isbn=4-00-026157-6">Special:BookSources/isbn=4-00-026157-6</a>
 </p>
 !! end
@@ -5331,43 +5244,43 @@ Just a test of an article title containing a tilde.
 # seen by the parser.
 !! test
 Link containing a tilde
-!! input
+!! wikitext
 [[Foo~bar]]
-!! result
+!! html
 <p><a href="/wiki/Foo%7Ebar" title="Foo~bar">Foo~bar</a>
 </p>
 !! end
 
 !! test
 Link containing double-single-quotes '' (bug 4598)
-!! input
+!! wikitext
 [[Lista d''e paise d''o munno]]
-!! result
+!! html
 <p><a href="/index.php?title=Lista_d%27%27e_paise_d%27%27o_munno&amp;action=edit&amp;redlink=1" class="new" title="Lista d''e paise d''o munno (page does not exist)">Lista d''e paise d''o munno</a>
 </p>
 !! end
 
 !! test
 Link containing double-single-quotes '' in text (bug 4598 sanity check)
-!! input
+!! wikitext
 Some [[Link|pretty ''italics'' and stuff]]!
-!! result
+!! html
 <p>Some <a href="/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">pretty <i>italics</i> and stuff</a>!
 </p>
 !! end
 
 !! test
 Link containing double-single-quotes '' in text embedded in italics (bug 4598 sanity check)
-!! input
+!! wikitext
 ''Some [[Link|pretty ''italics'' and stuff]]!
-!! result
+!! html
 <p><i>Some <a href="/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">pretty <i>italics</i> and stuff</a>!</i>
 </p>
 !! end
 
 !! test
 Link with double quotes in title part (literal) and alternate part (interpreted)
-!! input
+!! wikitext
 [[File:Denys Savchenko ''Pentecoste''.jpg]]
 
 [[''Pentecoste'']]
@@ -5375,7 +5288,7 @@ Link with double quotes in title part (literal) and alternate part (interpreted)
 [[''Pentecoste''|Pentecoste]]
 
 [[''Pentecoste''|''Pentecoste'']]
-!! result
+!! html
 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Denys_Savchenko_%27%27Pentecoste%27%27.jpg" class="new" title="File:Denys Savchenko &#39;&#39;Pentecoste&#39;&#39;.jpg">File:Denys Savchenko <i>Pentecoste</i>.jpg</a>
 </p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="''Pentecoste'' (page does not exist)">''Pentecoste''</a>
 </p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="''Pentecoste'' (page does not exist)">Pentecoste</a>
@@ -5385,12 +5298,12 @@ Link with double quotes in title part (literal) and alternate part (interpreted)
 
 !! test
 Broken image links with HTML captions (bug 39700)
-!! input
+!! wikitext
 [[File:Nonexistent|<script></script>]]
 [[File:Nonexistent|100px|<script></script>]]
 [[File:Nonexistent|&lt;]]
 [[File:Nonexistent|a<i>b</i>c]]
-!! result
+!! html
 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script&gt;&lt;/script&gt;</a>
 <a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script&gt;&lt;/script&gt;</a>
 <a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;</a>
@@ -5400,47 +5313,47 @@ Broken image links with HTML captions (bug 39700)
 
 !! test
 Plain link to URL
-!! input
+!! wikitext
 [[http://www.example.com]]
-!! result
+!! html
 <p>[<a rel="nofollow" class="external autonumber" href="http://www.example.com">[1]</a>]
 </p>
 !! end
 
 !! test
 Plain link to URL with link text
-!! input
+!! wikitext
 [[http://www.example.com Link text]]
-!! result
+!! html
 <p>[<a rel="nofollow" class="external text" href="http://www.example.com">Link text</a>]
 </p>
 !! end
 
 !! test
 Plain link to protocol-relative URL
-!! input
+!! wikitext
 [[//www.example.com]]
-!! result
+!! html
 <p>[<a rel="nofollow" class="external autonumber" href="//www.example.com">[1]</a>]
 </p>
 !! end
 
 !! test
 Plain link to protocol-relative URL with link text
-!! input
+!! wikitext
 [[//www.example.com Link text]]
-!! result
+!! html
 <p>[<a rel="nofollow" class="external text" href="//www.example.com">Link text</a>]
 </p>
 !! end
 
 !! test
 Plain link to page with question mark in title
-!! input
+!! wikitext
 [[A?b]]
 
 [[A?b|Baz]]
-!! result
+!! html
 <p><a href="/wiki/A%3Fb" title="A?b">A?b</a>
 </p><p><a href="/wiki/A%3Fb" title="A?b">Baz</a>
 </p>
@@ -5460,18 +5373,18 @@ Plain link to page with question mark in title
 # -- wtm
 !! test
 Piped link to URL
-!! input
+!! wikitext
 Piped link to URL: [[http://www.example.com|an example URL]]
-!! result
+!! html
 <p>Piped link to URL: [<a rel="nofollow" class="external text" href="http://www.example.com%7Can">example URL</a>]
 </p>
 !! end
 
 !! test
 BUG 2: [[page|http://url/]] should link to page, not http://url/
-!! input
+!! wikitext
 [[Main Page|http://url/]]
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">http://url/</a>
 </p>
 !! end
@@ -5480,9 +5393,9 @@ BUG 2: [[page|http://url/]] should link to page, not http://url/
 BUG 337: Escaped self-links should be bold
 !! options
 title=[[Bug462]]
-!! input
+!! wikitext
 [[Bu&#103;462]] [[Bug462]]
-!! result
+!! html
 <p><strong class="selflink">Bu&#103;462</strong> <strong class="selflink">Bug462</strong>
 </p>
 !! end
@@ -5491,9 +5404,9 @@ title=[[Bug462]]
 Self-link to section should not be bold
 !! options
 title=[[Main Page]]
-!! input
+!! wikitext
 [[Main Page#section]]
-!! result
+!! html
 <p><a href="/wiki/Main_Page#section" title="Main Page">Main Page#section</a>
 </p>
 !! end
@@ -5508,9 +5421,9 @@ This is 00.
 Self-link to numeric title
 !!options
 title=[[0]]
-!!input
+!! wikitext
 [[0]]
-!!result
+!! html
 <p><strong class="selflink">0</strong>
 </p>
 !!end
@@ -5519,27 +5432,27 @@ title=[[0]]
 Link to numeric-equivalent title
 !!options
 title=[[0]]
-!!input
+!! wikitext
 [[00]]
-!!result
+!! html
 <p><a href="/wiki/00" title="00">00</a>
 </p>
 !!end
 
 !! test
 <nowiki> inside a link
-!! input
+!! wikitext
 [[Main<nowiki> Page</nowiki>]] [[Main Page|the main page <nowiki>[it's not very good]</nowiki>]]
-!! result
+!! html
 <p>[[Main Page]] <a href="/wiki/Main_Page" title="Main Page">the main page [it's not very good]</a>
 </p>
 !! end
 
 !! test
 Non-breaking spaces in title
-!! input
+!! wikitext
 [[&nbsp; Main &nbsp; Page &nbsp;]]
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">&#160; Main &#160; Page &#160;</a>
 </p>
 !!end
@@ -5548,9 +5461,9 @@ Non-breaking spaces in title
 Internal link with ca linktrail, surrounded by bold apostrophes (bug 27473 primary issue)
 !! options
 language=ca
-!! input
+!! wikitext
 '''[[Main Page]]'''
-!! result
+!! html
 <p><b><a href="/wiki/Main_Page" title="Main Page">Main Page</a></b>
 </p>
 !! end
@@ -5559,9 +5472,9 @@ language=ca
 Internal link with ca linktrail, surrounded by italic apostrophes (bug 27473 primary issue)
 !! options
 language=ca
-!! input
+!! wikitext
 ''[[Main Page]]''
-!! result
+!! html
 <p><i><a href="/wiki/Main_Page" title="Main Page">Main Page</a></i>
 </p>
 !! end
@@ -5570,9 +5483,9 @@ language=ca
 Internal link with en linktrail: no apostrophes (bug 27473)
 !! options
 language=en
-!! input
+!! wikitext
 [[Something]]'nice
-!! result
+!! html
 <p><a href="/index.php?title=Something&amp;action=edit&amp;redlink=1" class="new" title="Something (page does not exist)">Something</a>'nice
 </p>
 !! end
@@ -5581,9 +5494,9 @@ language=en
 Internal link with ca linktrail with apostrophes (bug 27473)
 !! options
 language=ca
-!! input
+!! wikitext
 [[Something]]'nice
-!! result
+!! html
 <p><a href="/index.php?title=Something&amp;action=edit&amp;redlink=1" class="new" title="Something (encara no existeix)">Something'nice</a>
 </p>
 !! end
@@ -5592,13 +5505,43 @@ language=ca
 Internal link with kaa linktrail with apostrophes (bug 27473)
 !! options
 language=kaa
-!! input
+!! wikitext
 [[Something]]'nice
-!! result
+!! html
 <p><a href="/index.php?title=Something&amp;action=edit&amp;redlink=1" class="new" title="Something (bet ele jaratılmag'an)">Something'nice</a>
 </p>
 !! end
 
+!! test
+1. Interaction of linktrail and template encapsulation
+!! options
+parsoid
+!! wikitext
+{{echo|[[Foo]]}}l
+!! html
+<p><a rel="mw:WikiLink" href="Foo" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Foo]]"}},"i":0}},"l"]}'>Fool</a></p>
+!! end
+
+!! test
+2. Interaction of linktrail and template encapsulation
+!! options
+parsoid
+!! wikitext
+{{echo|Some [[Fool]]}}s
+!! html
+<p data-parsoid='{}'><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]"}},"i":0}},"s"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some </span><a rel="mw:WikiLink" href="./Fool" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a></p>
+!! end
+
+!! test
+3. Interaction of linktrail and template encapsulation
+!! options
+parsoid
+!! wikitext
+{{echo|Some [[Fool]]s are '''bold and foolish'''}}
+!! html
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]s are &#39;&#39;&#39;bold and foolish&#39;&#39;&#39;"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some <a rel="mw:WikiLink" href="./Fool" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a> are <b data-parsoid="{}">bold and foolish</b></p>
+!! end
+
 !! article
 Söfnuður
 !! text
@@ -5609,9 +5552,9 @@ Test.
 Internal link with is link prefix
 !! options
 language=is
-!! input
+!! wikitext
 Aðrir mótmælenda[[söfnuður|söfnuðir]] og
-!! result
+!! html
 <p>Aðrir <a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuðir</a> og
 </p>
 !! end
@@ -5626,13 +5569,13 @@ Test.
 Internal link with is link trail and link prefix
 !! options
 language=is
-!! input
+!! wikitext
 [[mótmælendatrú|xxx]]ar
 [[mótmælendatrú]]ar
 mótmælenda[[söfnuður]]
 mótmælenda[[söfnuður|söfnuðir]]
 mótmælenda[[söfnuður|söfnuðir]]xxx
-!! result
+!! html
 <p><a href="/wiki/M%C3%B3tm%C3%A6lendatr%C3%BA" title="Mótmælendatrú">xxxar</a>
 <a href="/wiki/M%C3%B3tm%C3%A6lendatr%C3%BA" title="Mótmælendatrú">mótmælendatrúar</a>
 <a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuður</a>
@@ -5645,9 +5588,9 @@ mótmælenda[[söfnuður|söfnuðir]]xxx
 Parsoid link trail escaping
 !! options
 parsoid=html2wt,html2html
-!! input
+!! wikitext
 [[apple]]<nowiki/>s
-!! result
+!! html
 <p><a rel="mw:WikiLink" href="Apple">apple</a>s</p>
 !! end
 
@@ -5656,15 +5599,15 @@ Parsoid link prefix escaping
 !! options
 language=is
 parsoid=html2wt,html2html
-!! input
+!! wikitext
 Aðrir mótmælenda<nowiki/>[[söfnuður]]
-!! result
+!! html
 <p>Aðrir mótmælenda<a rel="mw:WikiLink" href="Söfnuður">söfnuður</a></p>
 !! end
 
 !! test
 Parsoid-centric test: Whitespace in ext- and wiki-links should be preserved
-!! input
+!! wikitext
 [[Foo|  bar]]
 
 [[Foo|  ''bar'']]
@@ -5672,7 +5615,7 @@ Parsoid-centric test: Whitespace in ext- and wiki-links should be preserved
 [http://wp.org   foo]
 
 [http://wp.org   ''foo'']
-!! result
+!! html
 <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>
@@ -5684,10 +5627,10 @@ Parsoid-centric test: Whitespace in ext- and wiki-links should be preserved
 Parsoid: Scoped parsing should handle mixed transclusions and plain text
 !! options
 parsoid
-!! input
+!! wikitext
 [[Foo|{{echo|a}} b {{echo|c}}]]
-!! result
-<p data-parsoid='{"dsr":[0,20,0,0]}'><a rel="mw:WikiLink" href="Foo"><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span> b <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"c"}},"i":0}}]}'>c</span></a></p>
+!! html
+<p><a rel="mw:WikiLink" href="Foo"><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span> b <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"c"}},"i":0}}]}'>c</span></a></p>
 !! end
 
 ###
@@ -5696,28 +5639,28 @@ parsoid
 
 !! test
 Inline interwiki link
-!! input
+!! wikitext
 [[MeatBall:SoftSecurity]]
-!! result
+!! html
 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity" class="extiw" title="meatball:SoftSecurity">MeatBall:SoftSecurity</a>
 </p>
 !! end
 
 !! test
 Inline interwiki link with empty title (bug 2372)
-!! input
+!! wikitext
 [[MeatBall:]]
-!! result
+!! html
 <p><a href="http://www.usemod.com/cgi-bin/mb.pl" class="extiw" title="meatball:">MeatBall:</a>
 </p>
 !! end
 
 !! test
 Interwiki link encoding conversion (bug 1636)
-!! input
+!! wikitext
 *[[Wikipedia:ro:Olteni&#0355;a]]
 *[[Wikipedia:ro:Olteni&#355;a]]
-!! result
+!! html
 <ul>
 <li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteni&#355;a</a>
 </li>
@@ -5729,9 +5672,9 @@ Interwiki link encoding conversion (bug 1636)
 
 !! test
 Interwiki link with fragment (bug 2130)
-!! input
+!! wikitext
 [[MeatBall:SoftSecurity#foo]]
-!! result
+!! html
 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity#foo" class="extiw" title="meatball:SoftSecurity">MeatBall:SoftSecurity#foo</a>
 </p>
 !! end
@@ -5741,29 +5684,28 @@ Interwiki link with fragment (bug 2130)
 Different interwiki prefixes mapping to the same URL
 !! options
 parsoid
-!! input
+!! wikitext
 [[wikipedia:Foo]]
 
 [[:en:Foo]]
-!! result
-<p data-parsoid='{"dsr":[0,17,0,0]}'><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true,"dsr":[0,17,null,1]}'>wikipedia:Foo</a></p>
-
+!! html
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true}'>wikipedia:Foo</a></p>
 
-<p data-parsoid='{"dsr":[19,30,0,0]}'><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true,"dsr":[19,30,null,1]}'>en:Foo</a></p>
+<p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}'>en:Foo</a></p>
 !! end
 
 !! test
 Interwiki links that cannot be represented in wiki syntax
 !! options
 parsoid
-!! input
+!! wikitext
 [[meatball:ok]]
 [[meatball:ok#foo|ok with fragment]]
 [[meatball:ok_as_well?|ok ending with ? mark]]
 [http://de.wikipedia.org/wiki/Foo?action=history has query]
 [http://de.wikipedia.org/wiki/#foo is just fragment]
 
-!! result
+!! html
 <p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok">meatball:ok</a>
 <a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok#foo">ok with fragment</a>
 <a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok_as_well%3F">ok ending with ? mark</a>
@@ -5771,6 +5713,15 @@ parsoid
 <a rel="mw:ExtLink" href="http://de.wikipedia.org/wiki/#foo">is just fragment</a></p>
 !! end
 
+!! test
+Interwiki links: trail
+!! options
+parsoid
+!! wikitext
+[[wikipedia:Foo|Ba]]r
+!! html
+<p data-parsoid='{}'><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true,"tail":"r"}'>Bar</a></p>
+!! end
 
 ###
 ### Interlanguage links
@@ -5779,21 +5730,21 @@ parsoid
 
 !! test
 Interlanguage link
-!! input
+!! wikitext
 Blah blah blah
 [[zh:Chinese]]
-!!result
+!! html
 <p>Blah blah blah
 </p>
 !! end
 
 !! test
 Double interlanguage link
-!! input
+!! wikitext
 Blah blah blah
 [[es:Spanish]]
 [[zh:Chinese]]
-!!result
+!! html
 <p>Blah blah blah
 </p>
 !! end
@@ -5802,10 +5753,10 @@ Blah blah blah
 Interlanguage link, with prefix links
 !! options
 language=ln
-!! input
+!! wikitext
 Blah blah blah
 [[zh:Chinese]]
-!!result
+!! html
 <p>Blah blah blah
 </p>
 !! end
@@ -5814,11 +5765,11 @@ Blah blah blah
 Double interlanguage link, with prefix links (bug 8897)
 !! options
 language=ln
-!! input
+!! wikitext
 Blah blah blah
 [[es:Spanish]]
 [[zh:Chinese]]
-!!result
+!! html
 <p>Blah blah blah
 </p>
 !! end
@@ -5827,9 +5778,9 @@ Blah blah blah
 Parsoid-specific test: Wikilinks with &nbsp; should RT properly
 !! options
 language=ln
-!! input
+!! wikitext
 [[WW&nbsp;II]]
-!!result
+!! html
 <p><a href="/index.php?title=WW_II&amp;action=edit&amp;redlink=1" class="new" title="WW II (lonkásá  ezalí tɛ̂)">WW&#160;II</a>
 </p>
 !! end
@@ -5838,11 +5789,11 @@ language=ln
 Parsoid bug 53221: Wikilinks should be properly entity-escaped
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 He&amp;nbsp;llo [[Foo|He&amp;nbsp;llo]]
 
 He&amp;nbsp;llo [[He&amp;nbsp;llo]]
-!!result
+!! html
 <p>He&amp;nbsp;llo <a href="Foo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
 <p>He&amp;nbsp;llo <a href="He&amp;nbsp;llo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
 !! end
@@ -5851,24 +5802,23 @@ He&amp;nbsp;llo [[He&amp;nbsp;llo]]
 Parsoid: handle constructor well
 !! options
 parsoid
-!! input
+!! wikitext
 [[constructor]]
 
 [[constructor:foo]]
-!! result
-<p data-parsoid="{&quot;dsr&quot;:[0,15,0,0]}"><a rel="mw:WikiLink" href="./Constructor" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Constructor&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor&quot;},&quot;dsr&quot;:[0,15,2,2]}">constructor</a></p>
+!! html
+<p><a rel="mw:WikiLink" href="./Constructor" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Constructor&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor&quot;}}">constructor</a></p>
 
-
-<p data-parsoid="{&quot;dsr&quot;:[17,36,0,0]}"><a rel="mw:WikiLink" href="./Foo" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Foo&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor:foo&quot;},&quot;dsr&quot;:[17,36,2,2]}">constructor:foo</a></p>
+<p><a rel="mw:WikiLink" href="./Foo" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Foo&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor:foo&quot;}}">constructor:foo</a></p>
 !! end
 
 !! test
 Parsoid: recognize interlanguage links without a target page
 !! options
 parsoid
-!! input
+!! wikitext
 [[ko:]]
-!! result
+!! html
 <p>
 <link rel="mw:PageProp/Language" href="http://ko.wikipedia.org/wiki/"></p>
 !! end
@@ -5877,23 +5827,46 @@ parsoid
 Parsoid: recognize interwiki links without a target page
 !! options
 parsoid
-!! input
+!! wikitext
 [[:ko:]]
-!! result
+!! html
 <p><a rel="mw:ExtLink" href="//ko.wikipedia.org/wiki/">ko:</a></p>
 !! end
 
+!! test
+Parsoid: Bug #45209, handle interwiki links pointing to the current wiki as plain wiki links
+!! options
+parsoid
+!! wikitext
+[[en:Foo]]
+!! html
+<p><a rel="mw:WikiLink" href="./Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"en:Foo"}}'>Foo</a></p>
+!! end
+
 ###
 ### Redirects, Parsoid-only
 ###
 !! test
-Simple redirect to page
+1. Simple redirect to page
 !! options
 parsoid
-!! input
+!! wikitext
 #REDIRECT [[Main Page]]
-!! result
+!! html
+<link rel="mw:PageProp/redirect" href="./Main_Page">
+!! end
+
+# Only wt2html and html2html since "Main_Page" will serialize to "Main Page"
+!! test
+2. Other redirect variants
+!! options
+parsoid=wt2html,wt2wt
+!! wikitext
+#REDIRECT [[Main_Page]]
+#REDIRECT [[<nowiki>[[Bar]]</nowiki>]]
+!! html
 <link rel="mw:PageProp/redirect" href="./Main_Page">
+<link rel="mw:PageProp/redirect" href="./%5B%5BBar%5D%5D">
 !! end
 
 !! test
@@ -5902,9 +5875,9 @@ Optional colon in #REDIRECT
 # the colon is archaic syntax.  we support it for wt2html, but we
 # don't care that it roundtrips back to the modern syntax.
 parsoid=wt2html,html2html
-!! input
+!! wikitext
 #REDIRECT:[[Main Page]]
-!! result
+!! html
 <link rel="mw:PageProp/redirect" href="./Main_Page">
 !! end
 
@@ -5915,12 +5888,12 @@ Whitespace in #REDIRECT with optional colon
 # it for wt2html, but we don't care that it roundtrips back to the
 # modern syntax (without extra whitespace)
 parsoid=wt2html,html2html
-!! input
+!! wikitext
  
  #REDIRECT 
 : 
 [[Main Page]]
-!! result
+!! html
 <link rel="mw:PageProp/redirect" href="./Main_Page">
 !! end
 
@@ -5930,9 +5903,9 @@ Piped link in #REDIRECT
 # content after piped link is ignored.  we support this syntax,
 # but don't care that the piped link is lost when we roundtrip this.
 parsoid=wt2html
-!! input
+!! wikitext
 #REDIRECT [[Main Page|bar]]
-!! result
+!! html
 <link rel="mw:PageProp/redirect" href="./Main_Page">
 !! end
 
@@ -5940,9 +5913,9 @@ parsoid=wt2html
 Redirect to category
 !! options
 parsoid=wt2html
-!! input
+!! wikitext
 #REDIRECT [[Category:Foo]]
-!! result
+!! html
 <link rel="mw:PageProp/redirect" href="./Category:Foo"><link rel="mw:PageProp/Category" href="./Category:Foo">
 !! end
 
@@ -5950,9 +5923,9 @@ parsoid=wt2html
 Redirect to category with URL encoding
 !! options
 parsoid=wt2html
-!! input
+!! wikitext
 #REDIRECT [[Category%3AFoo]]
-!! result
+!! html
 <link rel="mw:PageProp/redirect" href="./Category:Foo"><link rel="mw:PageProp/Category" href="./Category:Foo">
 !! end
 
@@ -5960,9 +5933,9 @@ parsoid=wt2html
 Redirect to category page
 !! options
 parsoid=wt2html,html2html
-!! input
+!! wikitext
 #REDIRECT [[:Category:Foo]]
-!! result
+!! html
 <p><a rel="mw:WikiLink" href="Category:Foo">Category:Foo</a></p>
 !! end
 
@@ -5970,9 +5943,9 @@ parsoid=wt2html,html2html
 Redirect to image page (1)
 !! options
 parsoid
-!! input
+!! wikitext
 #REDIRECT [[File:Wiki.png]]
-!! result
+!! html
 <link rel="mw:PageProp/redirect" href="./File:Wiki.png">
 !! end
 
@@ -5980,9 +5953,9 @@ parsoid
 Redirect to image page (2)
 !! options
 parsoid
-!! input
+!! wikitext
 #REDIRECT [[Image:Wiki.png]]
-!! result
+!! html
 <link rel="mw:PageProp/redirect" href="./File:Wiki.png">
 !! end
 
@@ -5990,9 +5963,9 @@ parsoid
 Redirect to language
 !! options
 parsoid
-!! input
+!! wikitext
 #REDIRECT [[en:File:Wiki.png]]
-!! result
+!! html
 <link rel="mw:PageProp/redirect" href="File:Wiki.png">
 !! end
 
@@ -6000,9 +5973,9 @@ parsoid
 Redirect to interwiki
 !! options
 parsoid
-!! input
+!! wikitext
 #REDIRECT [[meatball:File:Wiki.png]]
-!! result
+!! html
 <link rel="mw:PageProp/redirect" href="File:Wiki.png">
 !! end
 
@@ -6011,32 +5984,41 @@ Non-English #REDIRECT
 !! options
 parsoid
 language=is
-!! input
+!! wikitext
 #TILVÍSUN [[Main Page]]
-!! result
+!! html
 <link rel="mw:PageProp/redirect" href="./Main_Page">
 !! end
 
+!! test
+New redirect
+!! options
+parsoid=html2wt
+!! wikitext
+Foo
+#REDIRECT [[Foo]]
+!! html
+<p>Foo<link rel="mw:PageProp/redirect" href="./Foo"></p>
+!! end
+
 ##
 ## XHTML tidiness
 ###
 
 !! test
 <br> to <br />
-!! input
+!! wikitext
 1<br>2<br />3
-!! result
+!! html
 <p>1<br />2<br />3
 </p>
 !! end
 
 !! test
 Broken br tag sanitization
-!! options
-php
-!! input
+!! wikitext
 </br>
-!! result
+!! html/php
 <p>&lt;/br&gt;
 </p>
 !! end
@@ -6046,28 +6028,28 @@ php
 Parsoid: Broken br tag recognition
 !! options
 parsoid=wt2html
-!! input
+!! wikitext
 </br>
-!! result
+!! html/parsoid
 <p><br></p>
 !! end
 
 !! test
 Incorrecly removing closing slashes from correctly formed XHTML
-!! input
+!! wikitext
 <br style="clear:both;" />
-!! result
+!! html
 <p><br style="clear:both;" />
 </p>
 !! end
 
 !! test
 Failing to transform badly formed HTML into correct XHTML
-!! input
+!! wikitext
 <br style="clear: left;">
 <br style="clear: right;">
 <br style="clear: both;">
-!! result
+!! html
 <p><br style="clear: left;" />
 <br style="clear: right;" />
 <br style="clear: both;" />
@@ -6076,14 +6058,14 @@ Failing to transform badly formed HTML into correct XHTML
 
 !! test
 Handling html with a div self-closing tag
-!! input
+!! wikitext
 <div title />
 <div title/>
 <div title/ >
 <div title=bar />
 <div title=bar/>
 <div title=bar/ >
-!! result
+!! html
 <p>&lt;div title /&gt;
 &lt;div title/&gt;
 </p>
@@ -6098,14 +6080,14 @@ Handling html with a div self-closing tag
 
 !! test
 Handling html with a br self-closing tag
-!! input
+!! wikitext
 <br title />
 <br title/>
 <br title/ >
 <br title=bar />
 <br title=bar/>
 <br title=bar/ >
-!! result
+!! html
 <p><br title="title" />
 <br title="title" />
 <br />
@@ -6117,12 +6099,12 @@ Handling html with a br self-closing tag
 
 !! test
 Horizontal ruler (should it add that extra space?)
-!! input
+!! wikitext
 <hr>
 <hr >
 foo <hr
 > bar
-!! result
+!! html
 <hr />
 <hr />
 foo <hr /> bar
@@ -6131,28 +6113,28 @@ foo <hr /> bar
 
 !! test
 Horizontal ruler -- 4+ dashes render hr
-!! input
+!! wikitext
 ----
-!! result
+!! html
 <hr />
 
 !! end
 
 !! test
 Horizontal ruler -- eats additional dashes on the same line
-!! input
+!! wikitext
 ---------
-!! result
+!! html
 <hr />
 
 !! end
 
 !! test
 Horizontal ruler -- does not collapse dashes on consecutive lines
-!! input
+!! wikitext
 ----
 ----
-!! result
+!! html
 <hr />
 <hr />
 
@@ -6160,18 +6142,18 @@ Horizontal ruler -- does not collapse dashes on consecutive lines
 
 !! test
 Horizontal ruler -- <4 dashes render as plain text
-!! input
+!! wikitext
 ---
-!! result
+!! html
 <p>---
 </p>
 !! end
 
 !! test
 Horizontal ruler -- Supports content following dashes on same line
-!! input
+!! wikitext
 ---- Foo
-!! result
+!! html
 <hr /> Foo
 
 !! end
@@ -6181,11 +6163,11 @@ Horizontal ruler -- Supports content following dashes on same line
 ###
 !! test
 Common list
-!! input
+!! wikitext
 *Common list
 * item 2
 *item 3
-!! result
+!! html
 <ul>
 <li>Common list
 </li>
@@ -6199,11 +6181,11 @@ Common list
 
 !! test
 Numbered list
-!! input
+!! wikitext
 #Numbered list
 #item 2
 # item 3
-!! result
+!! html
 <ol>
 <li>Numbered list
 </li>
@@ -6217,7 +6199,7 @@ Numbered list
 
 !! test
 Mixed list
-!! input
+!! wikitext
 *Mixed list
 *# with numbers
 ** and bullets
@@ -6233,7 +6215,7 @@ Mixed list
 *Level 1
 *** Level 3
 #** Level 3, but ordered
-!! result
+!! html
 <ul>
 <li>Mixed list
 <ol>
@@ -6300,10 +6282,10 @@ Mixed list
 
 !! test
 Nested lists 1
-!! input
+!! wikitext
 *foo
 **bar
-!! result
+!! html
 <ul>
 <li>foo
 <ul>
@@ -6317,10 +6299,10 @@ Nested lists 1
 
 !! test
 Nested lists 2
-!! input
+!! wikitext
 **foo
 *bar
-!! result
+!! html
 <ul>
 <li><ul>
 <li>foo
@@ -6335,10 +6317,10 @@ Nested lists 2
 
 !! test
 Nested lists 3 (first element empty)
-!! input
+!! wikitext
 *
 **bar
-!! result
+!! html
 <ul>
 <li>
 <ul>
@@ -6352,10 +6334,10 @@ Nested lists 3 (first element empty)
 
 !! test
 Nested lists 4 (first element empty)
-!! input
+!! wikitext
 **
 *bar
-!! result
+!! html
 <ul>
 <li><ul>
 <li>
@@ -6370,10 +6352,10 @@ Nested lists 4 (first element empty)
 
 !! test
 Nested lists 5 (both elements empty)
-!! input
+!! wikitext
 **
 *
-!! result
+!! html
 <ul>
 <li><ul>
 <li>
@@ -6388,10 +6370,10 @@ Nested lists 5 (both elements empty)
 
 !! test
 Nested lists 6 (both elements empty)
-!! input
+!! wikitext
 *
 **
-!! result
+!! html
 <ul>
 <li>
 <ul>
@@ -6405,9 +6387,9 @@ Nested lists 6 (both elements empty)
 
 !! test
 Nested lists 7 (skip initial nesting levels)
-!! input
+!! wikitext
 *** foo
-!! result
+!! html
 <ul>
 <li><ul>
 <li><ul>
@@ -6423,12 +6405,12 @@ Nested lists 7 (skip initial nesting levels)
 
 !! test
 Nested lists 8 (multiple nesting transitions)
-!! input
+!! wikitext
 * foo
 *** bar
 ** baz
 * boo
-!! result
+!! html
 <ul>
 <li> foo
 <ul>
@@ -6449,11 +6431,11 @@ Nested lists 8 (multiple nesting transitions)
 
 !! test
 1. Lists with start-of-line-transparent tokens before bullets: Comments
-!! input
+!! wikitext
 *foo
 *<!--cmt-->bar
 <!--cmt-->*baz
-!! result
+!! html
 <ul>
 <li>foo
 </li>
@@ -6467,10 +6449,10 @@ Nested lists 8 (multiple nesting transitions)
 
 !! test
 2. Lists with start-of-line-transparent tokens before bullets: Template close
-!! input
+!! wikitext
 *foo {{echo|bar
 }}*baz
-!! result
+!! html
 <ul>
 <li>foo bar
 </li>
@@ -6482,11 +6464,11 @@ Nested lists 8 (multiple nesting transitions)
 
 !! test
 List items are not parsed correctly following a <pre> block (bug 785)
-!! input
+!! wikitext
 * <pre>foo</pre>
 * <pre>bar</pre>
 * zar
-!! result
+!! html
 <ul>
 <li> <pre>foo</pre>
 </li>
@@ -6500,7 +6482,7 @@ List items are not parsed correctly following a <pre> block (bug 785)
 
 !! test
 List items from template
-!! input
+!! wikitext
 
 {{inner list}}
 * item 2
@@ -6512,7 +6494,7 @@ List items from template
 * item 0
 * notSOL{{inner list}}
 * item 2
-!! result
+!! html
 <ul>
 <li> item 1
 </li>
@@ -6542,13 +6524,13 @@ List items from template
 
 !! test
 List interrupted by empty line or heading
-!! input
+!! wikitext
 * foo
 
 ** bar
 == A heading ==
 * Another list item
-!! result
+!! html
 <ul>
 <li> foo
 </li>
@@ -6570,11 +6552,11 @@ List interrupted by empty line or heading
 
 !!test
 Multiple list tags generated by templates
-!!input
+!! wikitext
 {{echo|<li>}}a
 {{echo|<li>}}b
 {{echo|<li>}}c
-!!result
+!! html
 <li>a
 <li>b
 <li>c</li>
@@ -6585,7 +6567,7 @@ Multiple list tags generated by templates
 
 !!test
 Single-comment whitespace lines dont break lists, and neither do multi-comment whitespace lines
-!!input
+!! wikitext
 *a
 <!--This line will NOT split the list-->
 *b
@@ -6593,7 +6575,7 @@ Single-comment whitespace lines dont break lists, and neither do multi-comment w
 *c
  <!--foo--> <!----> <!--This line NOT split the list either--> 
 *d
-!!result
+!! html
 <ul>
 <li>a
 </li>
@@ -6609,7 +6591,7 @@ Single-comment whitespace lines dont break lists, and neither do multi-comment w
 
 !!test
 Replacing whitespace with tabs still doesn't break the list (gerrit 78327)
-!!input
+!! wikitext
 *a
 <!--This line will NOT split the list-->       
 *b
@@ -6618,7 +6600,7 @@ Replacing whitespace with tabs still doesn't break the list (gerrit 78327)
        <!--foo--> <!---->      <!--This line NOT split the list
         either-->       
 *d
-!!result
+!! html
 <ul>
 <li>a
 </li>
@@ -6637,7 +6619,7 @@ Test the li-hack
 (Cannot test this with PHP parser since it relies on Tidy for the hack)
 !!options
 parsoid=wt2html,wt2wt
-!!input
+!! wikitext
 * foo
 * <li>li-hack
 * {{echo|<li>templated li-hack}}
@@ -6647,7 +6629,7 @@ parsoid=wt2html,wt2wt
 <li><li>not a li-hack
 </li>
 </ul>
-!!result
+!! html
 <ul>
 <li> foo</li>
 <li>li-hack</li>
@@ -6667,14 +6649,14 @@ parsoid=wt2html,wt2wt
 Parsoid: Make sure nested lists are serialized on their own line even if HTML contains no newlines
 !! options
 parsoid
-!! input
+!! wikitext
 # foo
 ## bar
 * foo
 ** bar
 : foo
 :: bar
-!! result
+!! html
 <ol>
 <li> foo<ol>
 <li> bar</li>
@@ -6694,9 +6676,9 @@ parsoid
 Parsoid: Test of whitespace serialization with Templated bullets
 !! options
 parsoid
-!! input
+!! wikitext
 * {{bullet}}
-!! result
+!! html
 <ul>
 <li> </li><li about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"bullet","href":"./Template:Bullet"},"params":{},"i":0}}]}'> Bar</li>
 </ul>
@@ -6710,13 +6692,11 @@ parsoid
 !! test
 Unbalanced closing block tags break a list
 (Parsoid-only since php parser generates broken html -- relies on Tidy to fix up)
-!! options
-parsoid
-!! input
+!! wikitext
 <div>
 *a</div><div>
 *b</div>
-!! result
+!! html/parsoid
 <div>
 <ul>
 <li>a
@@ -6731,13 +6711,11 @@ parsoid
 !! test
 Unbalanced closing non-block tags don't break a list
 (Parsoid-only since php parser generates broken html -- relies on Tidy to fix up)
-!! options
-parsoid
-!! input
+!! wikitext
 <span>
 *a</span><span>
 *b</span>
-!! result
+!! html/parsoid
 <p><span></span>
 </p>
 <ul>
@@ -6751,12 +6729,10 @@ parsoid
 !! test
 Unclosed formatting tags that straddle lists are closed and reopened
 (Parsoid-only since php parser generates broken html -- relies on Tidy to fix up)
-!! options
-parsoid
-!! input
+!! wikitext
 # <s> a
 # b </s>
-!! result
+!! html/parsoid
 <ol>
 <li> <s> a </s>
 </li>
@@ -6768,13 +6744,11 @@ parsoid
 !!test
 List embedded in a non-block tag
 (Ugly Parsoid output -- worth fixing; Disabled for PHP parser since it relies on Tidy)
-!! options
-parsoid
-!!input
+!! wikitext
 <small>
 * foo
 </small>
-!!result
+!! html/parsoid
 <p><small></small></p>
 <small>
 <ul>
@@ -6788,12 +6762,12 @@ parsoid
 Table with missing opening <tr> tag
 !! options
 parsoid=wt2html,wt2wt
-!! input
+!! wikitext
 <table>
 <td>foo</td>
 </tr>
 </table>
-!! result
+!! html/parsoid
 <table>
 <tr>
 <td>foo</td>
@@ -6812,133 +6786,133 @@ parsoid=wt2html,wt2wt
 
 !! test
 Magic Word: {{CURRENTDAY}}
-!! input
+!! wikitext
 {{CURRENTDAY}}
-!! result
+!! html
 <p>1
 </p>
 !! end
 
 !! test
 Magic Word: {{CURRENTDAY2}}
-!! input
+!! wikitext
 {{CURRENTDAY2}}
-!! result
+!! html
 <p>01
 </p>
 !! end
 
 !! test
 Magic Word: {{CURRENTDAYNAME}}
-!! input
+!! wikitext
 {{CURRENTDAYNAME}}
-!! result
+!! html
 <p>Thursday
 </p>
 !! end
 
 !! test
 Magic Word: {{CURRENTDOW}}
-!! input
+!! wikitext
 {{CURRENTDOW}}
-!! result
+!! html
 <p>4
 </p>
 !! end
 
 !! test
 Magic Word: {{CURRENTMONTH}}
-!! input
+!! wikitext
 {{CURRENTMONTH}}
-!! result
+!! html
 <p>01
 </p>
 !! end
 
 !! test
 Magic Word: {{CURRENTMONTH1}}
-!! input
+!! wikitext
 {{CURRENTMONTH1}}
-!! result
+!! html
 <p>1
 </p>
 !! end
 
 !! test
 Magic Word: {{CURRENTMONTHABBREV}}
-!! input
+!! wikitext
 {{CURRENTMONTHABBREV}}
-!! result
+!! html
 <p>Jan
 </p>
 !! end
 
 !! test
 Magic Word: {{CURRENTMONTHNAME}}
-!! input
+!! wikitext
 {{CURRENTMONTHNAME}}
-!! result
+!! html
 <p>January
 </p>
 !! end
 
 !! test
 Magic Word: {{CURRENTMONTHNAMEGEN}}
-!! input
+!! wikitext
 {{CURRENTMONTHNAMEGEN}}
-!! result
+!! html
 <p>January
 </p>
 !! end
 
 !! test
 Magic Word: {{CURRENTTIME}}
-!! input
+!! wikitext
 {{CURRENTTIME}}
-!! result
+!! html
 <p>00:02
 </p>
 !! end
 
 !! test
 Magic Word: {{CURRENTHOUR}}
-!! input
+!! wikitext
 {{CURRENTHOUR}}
-!! result
+!! html
 <p>00
 </p>
 !! end
 
 !! test
 Magic Word: {{CURRENTWEEK}} (@bug 4594)
-!! input
+!! wikitext
 {{CURRENTWEEK}}
-!! result
+!! html
 <p>1
 </p>
 !! end
 
 !! test
 Magic Word: {{CURRENTYEAR}}
-!! input
+!! wikitext
 {{CURRENTYEAR}}
-!! result
+!! html
 <p>1970
 </p>
 !! end
 
 !! test
 Magic Word: {{CURRENTTIMESTAMP}}
-!! input
+!! wikitext
 {{CURRENTTIMESTAMP}}
-!! result
+!! html
 <p>19700101000203
 </p>
 !! end
 
 !! test
 Magic Words LOCAL (UTC)
-!! input
+!! wikitext
 * {{LOCALMONTH}}
 * {{LOCALMONTH1}}
 * {{LOCALMONTHNAME}}
@@ -6953,7 +6927,7 @@ Magic Words LOCAL (UTC)
 * {{LOCALWEEK}}
 * {{LOCALDOW}}
 * {{LOCALTIMESTAMP}}
-!! result
+!! html
 <ul>
 <li> 01
 </li>
@@ -6991,9 +6965,9 @@ Magic Words LOCAL (UTC)
 Magic Word: {{FULLPAGENAME}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{FULLPAGENAME}}
-!! result
+!! html
 <p>User:Ævar Arnfjörð Bjarmason
 </p>
 !! end
@@ -7002,9 +6976,9 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{FULLPAGENAMEE}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{FULLPAGENAMEE}}
-!! result
+!! html
 <p>User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
 </p>
 !! end
@@ -7013,9 +6987,9 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{TALKSPACE}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{TALKSPACE}}
-!! result
+!! html
 <p>User talk
 </p>
 !! end
@@ -7024,9 +6998,9 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{TALKSPACE}}, same namespace
 !! options
 title=[[User talk:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{TALKSPACE}}
-!! result
+!! html
 <p>User talk
 </p>
 !! end
@@ -7035,9 +7009,9 @@ title=[[User talk:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{TALKSPACE}}, main namespace
 !! options
 title=[[Parser Test]]
-!! input
+!! wikitext
 {{TALKSPACE}}
-!! result
+!! html
 <p>Talk
 </p>
 !! end
@@ -7046,9 +7020,9 @@ title=[[Parser Test]]
 Magic Word: {{TALKSPACEE}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{TALKSPACEE}}
-!! result
+!! html
 <p>User_talk
 </p>
 !! end
@@ -7057,9 +7031,9 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{SUBJECTSPACE}}
 !! options
 title=[[User talk:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{SUBJECTSPACE}}
-!! result
+!! html
 <p>User
 </p>
 !! end
@@ -7068,9 +7042,9 @@ title=[[User talk:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{SUBJECTSPACE}}, same namespace
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{SUBJECTSPACE}}
-!! result
+!! html
 <p>User
 </p>
 !! end
@@ -7079,9 +7053,9 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{SUBJECTSPACE}}, main namespace
 !! options
 title=[[Parser Test]]
-!! input
+!! wikitext
 {{SUBJECTSPACE}}
-!! result
+!! html
 
 !! end
 
@@ -7089,9 +7063,9 @@ title=[[Parser Test]]
 Magic Word: {{SUBJECTSPACEE}}
 !! options
 title=[[User talk:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{SUBJECTSPACEE}}
-!! result
+!! html
 <p>User
 </p>
 !! end
@@ -7100,9 +7074,9 @@ title=[[User talk:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{NAMESPACE}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{NAMESPACE}}
-!! result
+!! html
 <p>User
 </p>
 !! end
@@ -7111,9 +7085,9 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{NAMESPACEE}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{NAMESPACEE}}
-!! result
+!! html
 <p>User
 </p>
 !! end
@@ -7122,9 +7096,9 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{NAMESPACENUMBER}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{NAMESPACENUMBER}}
-!! result
+!! html
 <p>2
 </p>
 !! end
@@ -7133,9 +7107,9 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{SUBPAGENAME}}
 !! options
 title=[[Ævar Arnfjörð Bjarmason/sub ö]] subpage
-!! input
+!! wikitext
 {{SUBPAGENAME}}
-!! result
+!! html
 <p>sub ö
 </p>
 !! end
@@ -7144,9 +7118,9 @@ title=[[Ævar Arnfjörð Bjarmason/sub ö]] subpage
 Magic Word: {{SUBPAGENAMEE}}
 !! options
 title=[[Ævar Arnfjörð Bjarmason/sub ö]] subpage
-!! input
+!! wikitext
 {{SUBPAGENAMEE}}
-!! result
+!! html
 <p>sub_%C3%B6
 </p>
 !! end
@@ -7155,9 +7129,9 @@ title=[[Ævar Arnfjörð Bjarmason/sub ö]] subpage
 Magic Word: {{ROOTPAGENAME}}
 !! options
 title=[[Ævar Arnfjörð Bjarmason/sub/sub2]] subpage
-!! input
+!! wikitext
 {{ROOTPAGENAME}}
-!! result
+!! html
 <p>Ævar Arnfjörð Bjarmason
 </p>
 !! end
@@ -7166,9 +7140,9 @@ title=[[Ævar Arnfjörð Bjarmason/sub/sub2]] subpage
 Magic Word: {{ROOTPAGENAMEE}}
 !! options
 title=[[Ævar Arnfjörð Bjarmason/sub/sub2]] subpage
-!! input
+!! wikitext
 {{ROOTPAGENAMEE}}
-!! result
+!! html
 <p>%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
 </p>
 !! end
@@ -7177,9 +7151,9 @@ title=[[Ævar Arnfjörð Bjarmason/sub/sub2]] subpage
 Magic Word: {{BASEPAGENAME}}
 !! options
 title=[[Ævar Arnfjörð Bjarmason/sub]] subpage
-!! input
+!! wikitext
 {{BASEPAGENAME}}
-!! result
+!! html
 <p>Ævar Arnfjörð Bjarmason
 </p>
 !! end
@@ -7188,9 +7162,9 @@ title=[[Ævar Arnfjörð Bjarmason/sub]] subpage
 Magic Word: {{BASEPAGENAMEE}}
 !! options
 title=[[Ævar Arnfjörð Bjarmason/sub]] subpage
-!! input
+!! wikitext
 {{BASEPAGENAMEE}}
-!! result
+!! html
 <p>%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
 </p>
 !! end
@@ -7199,9 +7173,9 @@ title=[[Ævar Arnfjörð Bjarmason/sub]] subpage
 Magic Word: {{TALKPAGENAME}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{TALKPAGENAME}}
-!! result
+!! html
 <p>User talk:Ævar Arnfjörð Bjarmason
 </p>
 !! end
@@ -7210,9 +7184,9 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{TALKPAGENAMEE}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{TALKPAGENAMEE}}
-!! result
+!! html
 <p>User_talk:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
 </p>
 !! end
@@ -7221,9 +7195,9 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{SUBJECTPAGENAME}}
 !! options
 title=[[User talk:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{SUBJECTPAGENAME}}
-!! result
+!! html
 <p>User:Ævar Arnfjörð Bjarmason
 </p>
 !! end
@@ -7232,18 +7206,18 @@ title=[[User talk:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{SUBJECTPAGENAMEE}}
 !! options
 title=[[User talk:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{SUBJECTPAGENAMEE}}
-!! result
+!! html
 <p>User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
 </p>
 !! end
 
 !! test
 Magic Word: {{NUMBEROFFILES}}
-!! input
+!! wikitext
 {{NUMBEROFFILES}}
-!! result
+!! html
 <p>4
 </p>
 !! end
@@ -7252,9 +7226,9 @@ Magic Word: {{NUMBEROFFILES}}
 Magic Word: {{PAGENAME}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{PAGENAME}}
-!! result
+!! html
 <p>Ævar Arnfjörð Bjarmason
 </p>
 !! end
@@ -7263,9 +7237,9 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{PAGENAME}} with metacharacters
 !! options
 title=[['foo & bar = baz']]
-!! input
+!! wikitext
 ''{{PAGENAME}}''
-!! result
+!! html
 <p><i>&#39;foo &#38; bar &#61; baz&#39;</i>
 </p>
 !! end
@@ -7274,9 +7248,9 @@ title=[['foo & bar = baz']]
 Magic Word: {{PAGENAME}} with metacharacters (bug 26781)
 !! options
 title=[[*RFC 1234 http://example.com/]]
-!! input
+!! wikitext
 {{PAGENAME}}
-!! result
+!! html
 <p>&#42;RFC&#32;1234 http&#58;//example.com/
 </p>
 !! end
@@ -7285,9 +7259,9 @@ title=[[*RFC 1234 http://example.com/]]
 Magic Word: {{PAGENAMEE}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
-!! input
+!! wikitext
 {{PAGENAMEE}}
-!! result
+!! html
 <p>%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
 </p>
 !! end
@@ -7296,75 +7270,75 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{PAGENAMEE}} with metacharacters (bug 26781)
 !! options
 title=[[*RFC 1234 http://example.com/]]
-!! input
+!! wikitext
 {{PAGENAMEE}}
-!! result
+!! html
 <p>&#42;RFC_1234_http&#58;//example.com/
 </p>
 !! end
 
 !! test
 Magic Word: {{REVISIONID}}
-!! input
+!! wikitext
 {{REVISIONID}}
-!! result
+!! html
 <p>1337
 </p>
 !! end
 
 !! test
 Magic Word: {{SCRIPTPATH}}
-!! input
+!! wikitext
 {{SCRIPTPATH}}
-!! result
+!! html
 <p>/
 </p>
 !! end
 
 !! test
 Magic Word: {{STYLEPATH}}
-!! input
+!! wikitext
 {{STYLEPATH}}
-!! result
+!! html
 <p>/skins
 </p>
 !! end
 
 !! test
 Magic Word: {{SERVER}}
-!! input
+!! wikitext
 {{SERVER}}
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://example.org">http://example.org</a>
 </p>
 !! end
 
 !! test
 Magic Word: {{SERVERNAME}}
-!! input
+!! wikitext
 {{SERVERNAME}}
-!! result
+!! html
 <p>example.org
 </p>
 !! end
 
 !! test
 Magic Word: {{SITENAME}}
-!! input
+!! wikitext
 {{SITENAME}}
-!! result
+!! html
 <p>MediaWiki
 </p>
 !! end
 
 !! test
 Case-sensitive magic words, when cased differently, should just be template transclusions
-!! input
+!! wikitext
 {{CurrentMonth}}
 {{currentday}}
 {{cURreNTweEK}}
 {{currentHour}}
-!! result
+!! html
 <p><a href="/index.php?title=Template:CurrentMonth&amp;action=edit&amp;redlink=1" class="new" title="Template:CurrentMonth (page does not exist)">Template:CurrentMonth</a>
 <a href="/index.php?title=Template:Currentday&amp;action=edit&amp;redlink=1" class="new" title="Template:Currentday (page does not exist)">Template:Currentday</a>
 <a href="/index.php?title=Template:CURreNTweEK&amp;action=edit&amp;redlink=1" class="new" title="Template:CURreNTweEK (page does not exist)">Template:CURreNTweEK</a>
@@ -7374,12 +7348,12 @@ Case-sensitive magic words, when cased differently, should just be template tran
 
 !! test
 Case-insensitive magic words should still work with weird casing.
-!! input
+!! wikitext
 {{sErVeRNaMe}}
 {{LCFirst:AOEU}}
 {{ucFIRST:aoeu}}
 {{SERver}}
-!! result
+!! html
 <p>example.org
 aOEU
 Aoeu
@@ -7389,88 +7363,88 @@ Aoeu
 
 !! test
 Namespace 1 {{ns:1}}
-!! input
+!! wikitext
 {{ns:1}}
-!! result
+!! html
 <p>Talk
 </p>
 !! end
 
 !! test
 Namespace 1 {{ns:01}}
-!! input
+!! wikitext
 {{ns:01}}
-!! result
+!! html
 <p>Talk
 </p>
 !! end
 
 !! test
 Namespace 0 {{ns:0}} (bug 4783)
-!! input
+!! wikitext
 {{ns:0}}
-!! result
+!! html
 
 !! end
 
 !! test
 Namespace 0 {{ns:00}} (bug 4783)
-!! input
+!! wikitext
 {{ns:00}}
-!! result
+!! html
 
 !! end
 
 !! test
 Namespace -1 {{ns:-1}}
-!! input
+!! wikitext
 {{ns:-1}}
-!! result
+!! html
 <p>Special
 </p>
 !! end
 
 !! test
 Namespace User {{ns:User}}
-!! input
+!! wikitext
 {{ns:User}}
-!! result
+!! html
 <p>User
 </p>
 !! end
 
 !! test
 Namespace User talk {{ns:User_talk}}
-!! input
+!! wikitext
 {{ns:User_talk}}
-!! result
+!! html
 <p>User talk
 </p>
 !! end
 
 !! test
 Namespace User talk {{ns:uSeR tAlK}}
-!! input
+!! wikitext
 {{ns:uSeR tAlK}}
-!! result
+!! html
 <p>User talk
 </p>
 !! end
 
 !! test
 Namespace File {{ns:File}}
-!! input
+!! wikitext
 {{ns:File}}
-!! result
+!! html
 <p>File
 </p>
 !! end
 
 !! test
 Namespace File {{ns:Image}}
-!! input
+!! wikitext
 {{ns:Image}}
-!! result
+!! html
 <p>File
 </p>
 !! end
@@ -7479,9 +7453,9 @@ Namespace File {{ns:Image}}
 Namespace (lang=de) Benutzer {{ns:User}}
 !! options
 language=de
-!! input
+!! wikitext
 {{ns:User}}
-!! result
+!! html
 <p>Benutzer
 </p>
 !! end
@@ -7490,9 +7464,9 @@ language=de
 Namespace (lang=de) Benutzer Diskussion {{ns:3}}
 !! options
 language=de
-!! input
+!! wikitext
 {{ns:3}}
-!! result
+!! html
 <p>Benutzer Diskussion
 </p>
 !! end
@@ -7500,12 +7474,12 @@ language=de
 
 !! test
 Urlencode
-!! input
+!! wikitext
 {{urlencode:hi world?!}}
 {{urlencode:hi world?!|WIKI}}
 {{urlencode:hi world?!|PATH}}
 {{urlencode:hi world?!|QUERY}}
-!! result
+!! html
 <p>hi+world%3F%21
 hi_world%3F!
 hi%20world%3F%21
@@ -7513,41 +7487,74 @@ hi+world%3F%21
 </p>
 !! end
 
+!! test
+Magic Word: prioritize type info over data-parsoid
+!! options
+parsoid=html2wt
+!! wikitext
+__FORCETOC__
+!! html
+<meta property="mw:PageProp/forcetoc" data-parsoid='{"src":"__NOTOC__","magicSrc":"__NOTOC__"}'/>
+!! end
+
+!! test
+Magic Word: serialize on separate line (parsoid)
+!! options
+parsoid=wt2wt,html2wt
+!! wikitext
+foo
+__NOTOC__
+bar
+!! html
+foo<meta property="mw:PageProp/notoc"/>bar
+!! end
+
+!! test
+Magic Word: rt non-english wikis
+!! options
+parsoid=wt2wt
+language=de
+!! wikitext
+__NOEDITSECTION__
+!! html
+<meta property="mw:PageProp/noeditsection" data-parsoid='{"src":"__NOEDITSECTION__","magicSrc":"__NOEDITSECTION__"}'/>
+!! end
+
 ###
 ### Magic links
 ###
 !! test
 Magic links: internal link to RFC (bug 479)
-!! input
+!! wikitext
 [[RFC 123]]
-!! result
+!! html
 <p><a href="/index.php?title=RFC_123&amp;action=edit&amp;redlink=1" class="new" title="RFC 123 (page does not exist)">RFC 123</a>
 </p>
 !! end
 
 !! test
 Magic links: RFC (bug 479)
-!! input
+!! wikitext
 RFC 822
-!! result
+!! html
 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a>
 </p>
 !! end
 
 !! test
 Magic links: ISBN (bug 1937)
-!! input
+!! wikitext
 ISBN 0-306-40615-2
-!! result
+!! html
 <p><a href="/wiki/Special:BookSources/0306406152" class="internal mw-magiclink-isbn">ISBN 0-306-40615-2</a>
 </p>
 !! end
 
 !! test
 Magic links: PMID incorrectly converts space to underscore
-!! input
+!! wikitext
 PMID 1234
-!! result
+!! html
 <p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a>
 </p>
 !! end
@@ -7558,31 +7565,42 @@ PMID 1234
 
 !! test
 Nonexistent template
-!! input
+!! wikitext
 {{thistemplatedoesnotexist}}
-!! result
+!! html
 <p><a href="/index.php?title=Template:Thistemplatedoesnotexist&amp;action=edit&amp;redlink=1" class="new" title="Template:Thistemplatedoesnotexist (page does not exist)">Template:Thistemplatedoesnotexist</a>
 </p>
 !! end
 
 !! test
 Template with invalid target containing tags
-!! input
+!! wikitext
 {{a<b>b</b>|{{echo|foo}}|{{echo|a}}={{echo|b}}|a = b}}
-!! result
+!! html
 <p>{{a<b>b</b>|foo|a=b|a = b}}
 </p>
 !! end
 
 !! test
 Template with invalid target containing unclosed tag
-!! input
+!! wikitext
 {{a<b>|{{echo|foo}}|{{echo|a}}={{echo|b}}|a = b}}
-!! result
+!! html
 <p>{{a<b>|foo|a=b|a = b}}</b>
 </p>
 !! end
 
+!! test
+Template with invalid target containing wikilink
+!! wikitext
+{{[[Main Page]]}}
+!! html/php
+<p>{{<a href="/wiki/Main_Page" title="Main Page">Main Page</a>}}
+</p>
+!! html/parsoid
+<p><span typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":[{"template":{"target":{"wt":"[[Main Page]]"},"params":{},"i":0}}]}'>{{</span><a rel="mw:WikiLink" href="./Main_Page" about="#mwt1">Main Page</a><span about="#mwt1">}}</span></p>
+!! end
+
 !! article
 Template:test
 !! text
@@ -7591,18 +7609,18 @@ This is a test template
 
 !! test
 Simple template
-!! input
+!! wikitext
 {{test}}
-!! result
+!! html
 <p>This is a test template
 </p>
 !! end
 
 !! test
 Template with explicit namespace
-!! input
+!! wikitext
 {{Template:test}}
-!! result
+!! html
 <p>This is a test template
 </p>
 !! end
@@ -7616,9 +7634,9 @@ This is a test template with parameter {{{param}}}
 
 !! test
 Template parameter
-!! input
+!! wikitext
 {{paramtest|param=foo}}
-!! result
+!! html
 <p>This is a test template with parameter foo
 </p>
 !! end
@@ -7631,9 +7649,9 @@ Template:paramtestnum
 
 !! test
 Template unnamed parameter
-!! input
+!! wikitext
 {{paramtestnum|Main Page|the main page}}
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">the main page</a>
 </p>
 !! end
@@ -7670,27 +7688,27 @@ Template:templateasargtest2
 
 !! test
 Template with template name as unnamed argument
-!! input
+!! wikitext
 {{templateasargtestnum|templatesimple}}
-!! result
+!! html
 <p>(test)
 </p>
 !! end
 
 !! test
 Template with template name as argument
-!! input
+!! wikitext
 {{templateasargtest|templ=simple}}
-!! result
+!! html
 <p>(test)
 </p>
 !! end
 
 !! test
 Template with template name as argument (2)
-!! input
+!! wikitext
 {{templateasargtest2|templ=templatesimple}}
-!! result
+!! html
 <p>(test)
 </p>
 !! end
@@ -7709,58 +7727,58 @@ Template:templa
 
 !! test
 Template with default value
-!! input
+!! wikitext
 {{templateasargtestdefault}}
-!! result
+!! html
 <p>(test)
 </p>
 !! end
 
 !! test
 Template with default value (value set)
-!! input
+!! wikitext
 {{templateasargtestdefault|templ=templa}}
-!! result
+!! html
 <p><b>templ</b>
 </p>
 !! end
 
 !! test
 Template redirect
-!! input
+!! wikitext
 {{templateredirect}}
-!! result
+!! html
 <p>(test)
 </p>
 !! end
 
 !! test
 Template with argument in separate line
-!! input
+!! wikitext
 {{ templateasargtest  |
  templ = simple }}
-!! result
+!! html
 <p>(test)
 </p>
 !! end
 
 !! test
 Template with complex template as argument
-!! input
+!! wikitext
 {{paramtest|
   param ={{ templateasargtest  |
  templ = simple }}}}
-!! result
+!! html
 <p>This is a test template with parameter (test)
 </p>
 !! end
 
 !! test
 Template with thumb image (with link in description)
-!! input
+!! wikitext
 {{paramtest|
   param =[[Image:noimage.png|thumb|[[no link|link]] [[no link|caption]]]]}}
-!! result
+!! html
 This is a test template with parameter <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=Special:Upload&amp;wpDestFile=Noimage.png" class="new" title="File:Noimage.png">File:Noimage.png</a>  <div class="thumbcaption"><a href="/index.php?title=No_link&amp;action=edit&amp;redlink=1" class="new" title="No link (page does not exist)">link</a> <a href="/index.php?title=No_link&amp;action=edit&amp;redlink=1" class="new" title="No link (page does not exist)">caption</a></div></div></div>
 
 !! end
@@ -7774,22 +7792,22 @@ Template:complextemplate
 
 !! test
 Template with complex arguments
-!! input
+!! wikitext
 {{complextemplate|
   param ={{ templateasargtest  |
  templ = simple }}|[[Template:complextemplate|link]]}}
-!! result
+!! html
 <p><a href="/wiki/Template:Complextemplate" title="Template:Complextemplate">link</a> This is a test template with parameter (test)
 </p>
 !! end
 
 !! test
 BUG 553: link with two variables in a piped link
-!! input
+!! wikitext
 {|
 |[[{{{1}}}|{{{2}}}]]
 |}
-!! result
+!! html
 <table>
 <tr>
 <td>[[{{{1}}}|{{{2}}}]]
@@ -7799,9 +7817,9 @@ BUG 553: link with two variables in a piped link
 
 !! test
 Magic variable as template parameter
-!! input
+!! wikitext
 {{paramtest|param={{SITENAME}}}}
-!! result
+!! html
 <p>This is a test template with parameter MediaWiki
 </p>
 !! end
@@ -7814,18 +7832,18 @@ Template:linktest
 
 !! test
 Template parameter as link source
-!! input
+!! wikitext
 {{linktest|param=Main Page}}
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">link</a>
 </p>
 !! end
 
 !!test
 Template-generated attribute string (k='v')
-!!input
+!! wikitext
 <span {{attr_str|id|v1}}>bar</span>
-!!result
+!! html
 <p><span id="v1">bar</span>
 </p>
 !!end
@@ -7838,9 +7856,9 @@ including another template, {{paramtest|param={{{arg}}}}}
 
 !! test
 Template passing argument to another template
-!! input
+!! wikitext
 {{paramtest2|arg='hmm'}}
-!! result
+!! html
 <p>including another template, This is a test template with parameter 'hmm'
 </p>
 !! end
@@ -7853,13 +7871,13 @@ Main Page
 
 !! test
 Template as link source
-!! input
+!! wikitext
 [[{{linktest2}}]]
 
 [[{{linktest2}}|Main Page]]
 
 [[{{linktest2}}]]Page
-!! result
+!! html
 <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
@@ -7881,18 +7899,18 @@ Template:loop2
 
 !! test
 Template infinite loop
-!! input
+!! wikitext
 {{loop1}}
-!! result
+!! html
 <p><span class="error">Template loop detected: <a href="/wiki/Template:Loop1" title="Template:Loop1">Template:Loop1</a></span>
 </p>
 !! end
 
 !! test
 Template from main namespace
-!! input
+!! wikitext
 {{:Main Page}}
-!! result
+!! html
 <p>blah blah
 </p>
 !! end
@@ -7909,9 +7927,9 @@ Template:table
 
 !! test
 BUG 529: Template with table, not included at beginning of line
-!! input
+!! wikitext
 foo {{table}}
-!! result
+!! html
 <p>foo 
 </p>
 <table>
@@ -7928,10 +7946,10 @@ foo {{table}}
 
 !! test
 BUG 523: Template shouldn't eat newline (or add an extra one before table)
-!! input
+!! wikitext
 foo
 {{table}}
-!! result
+!! html
 <p>foo
 </p>
 <table>
@@ -7948,22 +7966,22 @@ foo
 
 !! test
 BUG 41: Template parameters shown as broken links
-!! input
+!! wikitext
 {{{parameter}}}
-!! result
+!! html
 <p>{{{parameter}}}
 </p>
 !! end
 
 !! test
 Template with targets containing wikilinks
-!! input
+!! wikitext
 {{[[foo]]}}
 
 {{[[{{echo|foo}}]]}}
 
 {{{{echo|[[foo}}]]}}
-!! result
+!! html
 <p>{{<a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">foo</a>}}
 </p><p>{{<a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">foo</a>}}
 </p><p>{{[[foo}}]]
@@ -7984,9 +8002,9 @@ Template:MSGNW test
 msgnw keyword
 !! options
 disabled
-!! input
+!! wikitext
 {{msgnw:MSGNW test}}
-!! result
+!! html
 <p>''None'' of '''this''' should be 
 * interpreted
  but rather passed unmodified
@@ -7996,9 +8014,9 @@ disabled
 
 !! test
 int keyword
-!! input
+!! wikitext
 {{int:youhavenewmessages|lots of money|not!}}
-!! result
+!! html
 <p>You have lots of money (not!).
 </p>
 !! end
@@ -8011,9 +8029,9 @@ Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
 
 !! test
 <includeonly> and <noinclude> being included
-!! input
+!! wikitext
 {{Includes}}
-!! result
+!! html
 <p>Foobar
 </p>
 !! end
@@ -8026,9 +8044,9 @@ Template:Includes2
 
 !! test
 <onlyinclude> being included
-!! input
+!! wikitext
 {{Includes2}}
-!! result
+!! html
 <p>Foo
 </p>
 !! end
@@ -8042,66 +8060,66 @@ Template:Includes3
 
 !! test
 <onlyinclude> and <includeonly> being included
-!! input
+!! wikitext
 {{Includes3}}
-!! result
+!! html
 <p>Foo
 </p>
 !! end
 
 !! test
 <includeonly> and <noinclude> on a page
-!! input
+!! wikitext
 Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
-!! result
+!! html
 <p>Foozar
 </p>
 !! end
 
 !! test
 Un-closed <noinclude>
-!! input
+!! wikitext
 <noinclude>
-!! result
+!! html
 !! end
 
 !! test
 <onlyinclude> on a page
-!! input
+!! wikitext
 <onlyinclude>Foo</onlyinclude>bar
-!! result
+!! html
 <p>Foobar
 </p>
 !! end
 
 !! test
 Un-closed <onlyinclude>
-!! input
+!! wikitext
 <onlyinclude>
-!! result
+!! html
 !! end
 
 !!test
 Self-closed noinclude, includeonly, onlyinclude tags
-!!input
+!! wikitext
 <noinclude />
 <includeonly />
 <onlyinclude />
-!!result
+!! html
 <p><br />
 </p>
 !!end
 
 !!test
 Unbalanced includeonly and noinclude tags
-!!input
+!! wikitext
 {|
 |a</noinclude>
 |b</noinclude></noinclude>
 |c</noinclude></includeonly>
 |d</includeonly></includeonly>
 |}
-!!result
+!! html
 <table>
 <tr>
 <td>a
@@ -8126,9 +8144,9 @@ Template:Includeonly section
 
 !! test
 Bug 6563: Edit link generation for section shown by <includeonly>
-!! input
+!! wikitext
 {{includeonly section}}
-!! result
+!! html
 <h2><span class="mw-headline" id="Includeonly_section">Includeonly section</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Template:Includeonly_section&amp;action=edit&amp;section=T-1" title="Template:Includeonly section">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span class="mw-headline" id="Section_T-1">Section T-1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Template:Includeonly_section&amp;action=edit&amp;section=T-2" title="Template:Includeonly section">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 
@@ -8139,23 +8157,23 @@ Bug 6563: Edit link generation for section shown by <includeonly>
 Bug 6563: Section extraction for section shown by <includeonly>
 !! options
 section=T-2
-!! input
+!! wikitext
 <includeonly>
 ==Includeonly section==
 </includeonly>
 ==Section T-2==
-!! result
+!! html
 ==Section T-2==
 !! end
 
 !! test
 Bug 6563: Edit link generation for section suppressed by <includeonly>
-!! input
+!! wikitext
 <includeonly>
 ==Includeonly section==
 </includeonly>
 ==Section 1==
-!! result
+!! html
 <h2><span class="mw-headline" id="Section_1">Section 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 
 !! end
@@ -8164,20 +8182,20 @@ Bug 6563: Edit link generation for section suppressed by <includeonly>
 Bug 6563: Section extraction for section suppressed by <includeonly>
 !! options
 section=1
-!! input
+!! wikitext
 <includeonly>
 ==Includeonly section==
 </includeonly>
 ==Section 1==
-!! result
+!! html
 ==Section 1==
 !! end
 
 !! test
 Un-closed <includeonly>
-!! input
+!! wikitext
 <includeonly>
-!! result
+!! html
 !! end
 
 # TODO: test with DOM fragment reuse!
@@ -8185,7 +8203,7 @@ Un-closed <includeonly>
 Parsoid: DOM fragment reuse
 !! options
 parsoid=wt2wt,wt2html
-!! input
+!! wikitext
 a{{echo|b<table></table>c}}d
 
 a{{echo|b
@@ -8197,7 +8215,7 @@ c}}d
 <table></table>
 
 b}}
-!! result
+!! html
 a<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b
 <table></table>c"}},"i":0}}]}'>b</span>
 <table about="#mwt1"></table><span about="#mwt1">c</span>d
@@ -8223,11 +8241,11 @@ a<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"t
 Parsoid: Merge double tds (bug 50603)
 !! options
 parsoid
-!! input
+!! wikitext
 {|
 |{{echo|{{!}} foo}}
 |}
-!! result
+!! html
 <table><tbody>
 <tr><td about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{!}} foo"}},"i":0}}]}'> foo</td></tr>
 </tbody></table>
@@ -8237,13 +8255,13 @@ parsoid
 Parsoid: Merge double tds in nested transclusion content (bug 50603)
 !! options
 parsoid
-!! input
+!! wikitext
 {{echo|<div>}}
 {|
 |{{echo|{{!}} foo}}
 |}
 {{echo|</div>}}
-!! result
+!! html
 <div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<div>"}},"i":0}},"\n{|\n|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{!}} foo"}},"i":1}},"\n|}\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"</div>"}},"i":2}}]}'>
 <table><tbody>
 <tr><td data-mw='{"parts":["|"]}'> foo</td></tr>
@@ -8256,28 +8274,28 @@ parsoid
 ###
 !!test
 0. includeonly around the entire attribute
-!!input
+!! wikitext
 <span <includeonly>id="v1"</includeonly><noinclude>id="v2"</noinclude>>bar</span>
-!!result
+!! html
 <p><span id="v2">bar</span>
 </p>
 !!end
 
 !!test
 1. includeonly in html attr key
-!!input
+!! wikitext
 <span <noinclude>id</noinclude><includeonly>about</includeonly>="foo">bar</span>
-!!result
+!! html
 <p><span id="foo">bar</span>
 </p>
 !!end
 
 !!test
 2. includeonly in html attr value
-!!input
+!! wikitext
 <span id="<noinclude>v1</noinclude><includeonly>v2</includeonly>">bar</span>
 <span id=<noinclude>"v1"</noinclude><includeonly>"v2"</includeonly>>bar</span>
-!!result
+!! html
 <p><span id="v1">bar</span>
 <span id="v1">bar</span>
 </p>
@@ -8285,16 +8303,16 @@ parsoid
 
 !!test
 3. includeonly in part of an attr value
-!!input
+!! wikitext
 <span style="color:<noinclude>red</noinclude><includeonly>blue</includeonly>;">bar</span>
-!!result
+!! html
 <p><span style="color:red;">bar</span>
 </p>
 !!end
 
 !!test
 4. includeonly in table attributes
-!!input
+!! wikitext
 {|
 |- <noinclude>
 |-
@@ -8305,7 +8323,7 @@ parsoid
 |b
 </includeonly>
 |}
-!!result
+!! html
 <table>
 
 
@@ -8329,27 +8347,27 @@ Template:quote
 
 !!test
 Templates: Template Name/Arg clash: 1. Use of positional param
-!!input
+!! wikitext
 {{quote|foo}}
-!!result
+!! html
 <p>foo
 </p>
 !!end
 
 !!test
 Templates: Template Name/Arg clash: 2. Use of named param
-!!input
+!! wikitext
 {{quote|quote=foo}}
-!!result
+!! html
 <p>foo
 </p>
 !!end
 
 !!test
 Templates: Template Name/Arg clash: 3. Use of named param with empty input
-!!input
+!! wikitext
 {{quote|quote}}
-!!result
+!! html
 <p>quote
 </p>
 !!end
@@ -8360,19 +8378,19 @@ Templates: Template Name/Arg clash: 3. Use of named param with empty input
 
 !!test
 Templates: 1. Simple use
-!!input
+!! wikitext
 {{echo|Foo}}
-!!result
+!! html
 <p>Foo
 </p>
 !!end
 
 !!test
 Templates: 2. Inside a block tag
-!!input
+!! wikitext
 <div>{{echo|Foo}}</div>
 <blockquote>{{echo|Foo}}</blockquote>
-!!result
+!! html
 <div>Foo</div>
 <blockquote>Foo</blockquote>
 
@@ -8380,10 +8398,10 @@ Templates: 2. Inside a block tag
 
 !!test
 Templates: P-wrapping: 1a. Templates on consecutive lines
-!!input
+!! wikitext
 {{echo|Foo}}
 {{echo|bar}}
-!!result
+!! html
 <p>Foo
 bar
 </p>
@@ -8391,12 +8409,12 @@ bar
 
 !!test
 Templates: P-wrapping: 1b. Templates on consecutive lines
-!!input
+!! wikitext
 Foo
 
 {{echo|bar}}
 {{echo|baz}}
-!!result
+!! html
 <p>Foo
 </p><p>bar
 baz
@@ -8405,10 +8423,10 @@ baz
 
 !!test
 Templates: P-wrapping: 1c. Templates on consecutive lines
-!!input
+!! wikitext
 {{echo|Foo}}
 {{echo|bar}} <div>baz</div>
-!!result
+!! html
 <p>Foo
 </p>
 bar <div>baz</div>
@@ -8419,10 +8437,10 @@ bar <div>baz</div>
 Templates: P-wrapping: 1d. Template preceded by comment-only line
 !!options
 parsoid
-!!input
+!! wikitext
 <!-- foo -->
 {{echo|Bar}}
-!!result
+!! html
 <!-- foo -->
 
 <p about="#mwt223" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Bar"}},"i":0}}]}'>Bar</p>
@@ -8430,61 +8448,61 @@ parsoid
 
 !!test
 Templates: Inline Text: 1. Multiple tmeplate uses
-!!input
+!! wikitext
 {{echo|Foo}}bar{{echo|baz}}
-!!result
+!! html
 <p>Foobarbaz
 </p>
 !!end
 
 !!test
 Templates: Inline Text: 2. Back-to-back template uses
-!!input
+!! wikitext
 {{echo|Foo}}{{echo|bar}}
-!!result
+!! html
 <p>Foobar
 </p>
 !!end
 
 !!test
 Templates: Block Tags: 1. Multiple template uses
-!!input
+!! wikitext
 {{echo|<div>Foo</div>}}<div>bar</div>{{echo|<div>baz</div>}}
-!!result
+!! html
 <div>Foo</div><div>bar</div><div>baz</div>
 
 !!end
 
 !!test
 Templates: Block Tags: 2. Back-to-back template uses
-!!input
+!! wikitext
 {{echo|<div>Foo</div>}}{{echo|<div>bar</div>}}
-!!result
+!! html
 <div>Foo</div><div>bar</div>
 
 !!end
 
 !!test
 Templates: Links: 1. Simple example
-!!input
+!! wikitext
 {{echo|[[Foo|bar]]}}
-!!result
+!! html
 <p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">bar</a>
 </p>
 !!end
 
 !!test
 Templates: Links: 2. Generation of link href
-!!input
+!! wikitext
 [[{{echo|Foo}}|bar]]
-!!result
+!! html
 <p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">bar</a>
 </p>
 !!end
 
 !!test
 Templates: Links: 3. Generation of part of a link href
-!!input
+!! wikitext
 [[Fo{{echo|o}}|bar]]
 
 [[Foo{{echo|bar}}]]
@@ -8496,7 +8514,7 @@ Templates: Links: 3. Generation of part of a link href
 [[:Foo{{echo|bar}}]]
 
 [[:Foo{{echo|bar}}|bar]]
-!!result
+!! html
 <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>
@@ -8508,180 +8526,180 @@ Templates: Links: 3. Generation of part of a link href
 
 !!test
 Templates: Links: 4. Multiple templates generating link href
-!!input
+!! wikitext
 [[{{echo|F}}{{echo|o}}ob{{echo|ar}}]]
-!!result
+!! html
 <p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">Foobar</a>
 </p>
 !!end
 
 !!test
 Templates: Links: 5. Generation of link text
-!!input
+!! wikitext
 [[Foo|{{echo|bar}}]]
-!!result
+!! html
 <p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">bar</a>
 </p>
 !!end
 
 !!test
 Templates: Links: 5. Nested templates (only outermost template should be marked)
-!!input
+!! wikitext
 {{echo|[[{{echo|Foo}}|bar]]}}
-!!result
+!! html
 <p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">bar</a>
 </p>
 !!end
 
 !!test
 Templates: HTML Tag: 1. Generation of HTML attr. key
-!!input
+!! wikitext
 <div {{echo|style}}="color:red;">foo</div>
-!!result
+!! html
 <div style="color:red;">foo</div>
 
 !!end
 
 !!test
 Templates: HTML Tag: 2. Generation of HTML attr. value
-!!input
+!! wikitext
 <div style={{echo|'color:red;'}}>foo</div>
-!!result
+!! html
 <div style="color:red;">foo</div>
 
 !!end
 
 !!test
 Templates: HTML Tag: 3. Generation of HTML attr key and value
-!!input
+!! wikitext
 <div {{echo|style}}={{echo|'color:red;'}}>foo</div>
-!!result
+!! html
 <div style="color:red;">foo</div>
 
 !!end
 
 !!test
 Templates: HTML Tag: 4. Generation of starting piece of HTML attr value
-!!input
+!! wikitext
 <div title="{{echo|This is a long title}} with just one piece templated">foo</div>
-!!result
+!! html
 <div title="This is a long title with just one piece templated">foo</div>
 
 !!end
 
 !!test
 Templates: HTML Tag: 5. Generation of middle piece of HTML attr value
-!!input
+!! wikitext
 <div title="This is a long title with just {{echo|one piece}} templated">foo</div>
-!!result
+!! html
 <div title="This is a long title with just one piece templated">foo</div>
 
 !!end
 
 !!test
 Templates: HTML Tag: 6. Generation of end piece of HTML attr value
-!!input
+!! wikitext
 <div title="This is a long title with just one piece {{echo|templated}}">foo</div>
-!!result
+!! html
 <div title="This is a long title with just one piece templated">foo</div>
 
 !!end
 
 !!test
 Templates: HTML Tag: 7. Generation of partial attribute key string
-!!input
+!! wikitext
 <div st{{echo|yle}}="color:red;">foo</div>
-!!result
+!! html
 <div style="color:red;">foo</div>
 
 !!end
 
 !!test
 Templates: HTML Tables: 1. Generating start of a HTML table
-!!input
+!! wikitext
 {{echo|<table><tr><td>foo</td>}}</tr></table>
-!!result
+!! html
 <table><tr><td>foo</td></tr></table>
 
 !!end
 
 !!test
 Templates: HTML Tables: 2a. Generating middle of a HTML table
-!!input
+!! wikitext
 <table><tr>{{echo|<td>foo</td>}}</tr></table>
-!!result
+!! html
 <table><tr><td>foo</td></tr></table>
 
 !!end
 
 !!test
 Templates: HTML Tables: 2b. Generating middle of a HTML table
-!!input
+!! wikitext
 <table>{{echo|<tr><td>foo</td></tr>}}</table>
-!!result
+!! html
 <table><tr><td>foo</td></tr></table>
 
 !!end
 
 !!test
 Templates: HTML Tables: 3. Generating end of a HTML table
-!!input
+!! wikitext
 <table><tr>{{echo|<td>foo</td></tr></table>}}
-!!result
+!! html
 <table><tr><td>foo</td></tr></table>
 
 !!end
 
 !!test
 Templates: HTML Tables: 4a. Generating a single tag of a HTML table
-!!input
+!! wikitext
 {{echo|<table>}}<tr><td>foo</td></tr></table>
-!!result
+!! html
 <table><tr><td>foo</td></tr></table>
 
 !!end
 
 !!test
 Templates: HTML Tables: 4b. Generating a single tag of a HTML table
-!!input
+!! wikitext
 <table>{{echo|<tr>}}<td>foo</td></tr></table>
-!!result
+!! html
 <table><tr><td>foo</td></tr></table>
 
 !!end
 
 !!test
 Templates: HTML Tables: 4c. Generating a single tag of a HTML table
-!!input
+!! wikitext
 <table><tr>{{echo|<td>}}foo</td></tr></table>
-!!result
+!! html
 <table><tr><td>foo</td></tr></table>
 
 !!end
 
 !!test
 Templates: HTML Tables: 4d. Generating a single tag of a HTML table
-!!input
+!! wikitext
 <table><tr><td>foo{{echo|</td>}}</tr></table>
-!!result
+!! html
 <table><tr><td>foo</td></tr></table>
 
 !!end
 
 !!test
 Templates: HTML Tables: 4e. Generating a single tag of a HTML table
-!!input
+!! wikitext
 <table><tr><td>foo</td>{{echo|</tr>}}</table>
-!!result
+!! html
 <table><tr><td>foo</td></tr></table>
 
 !!end
 
 !!test
 Templates: HTML Tables: 4f. Generating a single tag of a HTML table
-!!input
+!! wikitext
 <table><tr><td>foo</td></tr>{{echo|</table>}}
-!!result
+!! html
 <table><tr><td>foo</td></tr></table>
 
 !!end
@@ -8690,11 +8708,11 @@ Templates: HTML Tables: 4f. Generating a single tag of a HTML table
 Templates: HTML Tables: 5. Proper fostering of categories from inside
 !!options
 parsoid=wt2html,wt2wt
-!!input
+!! wikitext
 <table>[[Category:foo1]]<tr><td>foo</td></tr></table>
 <!--Two categories (Bug 50330)-->
 <table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>
-!!result
+!! html
 <link rel="mw:PageProp/Category" href="./Category:Foo1"><table><tbody><tr><td>foo</td></tr></tbody></table>
 <!--Two categories (Bug 50330)-->
 <link rel="mw:PageProp/Category" href="./Category:Bar1"><link rel="mw:PageProp/Category" href="./Category:Bar2"><table><tbody><tr><td>foo</td></tr></tbody></table>
@@ -8702,11 +8720,11 @@ parsoid=wt2html,wt2wt
 
 !!test
 Templates: Wiki Tables: 1a. Fostering of entire template content
-!!input
+!! wikitext
 {|
 {{echo|a}}
 |}
-!!result
+!! html
 <table>
 a
 <tr><td></td></tr></table>
 
 !!test
 Templates: Wiki Tables: 1b. Fostering of entire template content
-!!input
+!! wikitext
 {|
 {{echo|<div>}}
 foo
 {{echo|</div>}}
 |}
-!!result
+!! html
 <table>
 <div>
 <p>foo
@@ -8733,12 +8751,12 @@ foo
 
 !!test
 Templates: Wiki Tables: 2. Fostering of partial template content
-!!input
+!! wikitext
 {|
 {{echo|a
 <div>b</div>}}
 |}
-!!result
+!! html
 <table>
 a
 <div>b</div>
 
 !!test
 Templates: Wiki Tables: 3. td-content via multiple templates
-!!input
+!! wikitext
 {|
 {{echo|{{pipe}}a}}{{echo|b}}
 |}
-!!result
+!! html
 <table>
 <tr>
 <td>ab
@@ -8762,10 +8780,10 @@ Templates: Wiki Tables: 3. td-content via multiple templates
 
 !!test
 Templates: Wiki Tables: 4. Templated tags, no content
-!!input
+!! wikitext
 {{tbl-start}}
 {{tbl-end}}
-!!result
+!! html
 <table>
 <tr><td></td></tr></table>
 
@@ -8773,11 +8791,11 @@ Templates: Wiki Tables: 4. Templated tags, no content
 
 !!test
 Templates: Wiki Tables: 5. Templated tags, regular td-tags
-!!input
+!! wikitext
 {{tbl-start}}
 |foo
 {{tbl-end}}
-!!result
+!! html
 <table>
 <tr>
 <td>foo
@@ -8787,11 +8805,11 @@ Templates: Wiki Tables: 5. Templated tags, regular td-tags
 
 !!test
 Templates: Wiki Tables: 6. Templated tags, templated td-tags
-!!input
+!! wikitext
 {{tbl-start}}
 {{!}}foo
 {{tbl-end}}
-!!result
+!! html
 <table>
 <tr>
 <td>foo
@@ -8801,12 +8819,12 @@ Templates: Wiki Tables: 6. Templated tags, templated td-tags
 
 !!test
 Templates: Lists: Multi-line list-items via templates
-!!input
+!! wikitext
 *{{echo|a {{nonexistent|
 unused}}}}
 *{{echo|b {{nonexistent|
 unused}}}}
-!!result
+!! html
 <ul>
 <li>a <a href="/index.php?title=Template:Nonexistent&amp;action=edit&amp;redlink=1" class="new" title="Template:Nonexistent (page does not exist)">Template:Nonexistent</a>
 </li>
@@ -8818,9 +8836,9 @@ unused}}}}
 
 !!test
 Templates: Ugly nesting: 1. Quotes opened/closed across templates (echo)
-!!input
+!! wikitext
 {{echo|''a}}{{echo|b''c''d}}{{echo|''e}}
-!!result
+!! html
 <p><i>ab</i>c<i>d</i>e
 </p>
 !!end
@@ -8828,11 +8846,9 @@ Templates: Ugly nesting: 1. Quotes opened/closed across templates (echo)
 !!test
 Templates: Ugly nesting: 2. Quotes opened/closed across templates (echo_with_span)
 (PHP parser generates misnested html)
-!! options
-parsoid
-!!input
+!! wikitext
 {{echo_with_span|''a}}{{echo_with_span|b''c''d}}{{echo_with_span|''e}}
-!!result
+!! html/parsoid
 <p><span about="#mwt1" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_span&quot;,&quot;href&quot;:&quot;./Template:Echo_with_span&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;''a&quot;}},&quot;i&quot;:0}}]}"><i>a</i></span><i about="#mwt2" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_span&quot;,&quot;href&quot;:&quot;./Template:Echo_with_span&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;b''c''d&quot;}},&quot;i&quot;:0}},{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_span&quot;,&quot;href&quot;:&quot;./Template:Echo_with_span&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;''e&quot;}},&quot;i&quot;:1}}]}"><span>b</span></i><span about="#mwt2">c</span><i about="#mwt2">d<span></span></i><span about="#mwt2">e</span></p>
 !!end
 
@@ -8841,9 +8857,9 @@ Templates: Ugly nesting: 3. Quotes opened/closed across templates (echo_with_div
 (PHP parser generates misnested html; Parsoid html2wt mode adds newlines between {{echo}}s)
 !! options
 parsoid=wt2html,wt2wt
-!!input
+!! wikitext
 {{echo_with_div|''a}}{{echo_with_div|b''c''d}}{{echo_with_div|''e}}
-!!result
+!! html
 <div about="#mwt1" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_div&quot;,&quot;href&quot;:&quot;./Template:Echo_with_div&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;''a&quot;}},&quot;i&quot;:0}}]}"><i>a</i></div>
 <div about="#mwt2" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_div&quot;,&quot;href&quot;:&quot;./Template:Echo_with_div&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;b''c''d&quot;}},&quot;i&quot;:0}}]}"><i>b</i>c<i>d</i></div>
 <div about="#mwt3" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_div&quot;,&quot;href&quot;:&quot;./Template:Echo_with_div&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;''e&quot;}},&quot;i&quot;:0}}]}">e</div>
@@ -8851,9 +8867,9 @@ parsoid=wt2html,wt2wt
 
 !!test
 Templates: Ugly nesting: 4. Divs opened/closed across templates
-!!input
+!! wikitext
 a<div>b{{echo|c</div>d}}e
-!!result
+!! html
 a<div>bc</div>de
 
 !!end
@@ -8863,19 +8879,19 @@ Templates: Ugly templates: 1. Navbox template parses badly leading to table misn
 (Parsoid-centric)
 !! options
 parsoid
-!!input
+!! wikitext
 {|
 |{{echo|foo</table>}}
 |bar
 |}
-!!result
+!! html
 <table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["{|\n|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo</table>"}},"i":0}},"\n|bar\n|}"]}'>
 
 <tbody>
 <tr>
 <td>foo</td></tr></tbody></table><span about="#mwt1">
-</span><span about="#mwt1">bar</span><span about="#mwt1">
-</span>
+</span><span about="#mwt1">|bar</span><span about="#mwt1">
+|}</span>
 !!end
 
 !!test
@@ -8883,7 +8899,7 @@ Templates: Ugly templates: 2. Navbox template parses badly leading to table misn
 (Parsoid-centric)
 !! options
 parsoid
-!!input
+!! wikitext
 <table>
   <tr>
     <td>
@@ -8903,7 +8919,7 @@ parsoid
     <td>xyz</td>
   </tr>
 </table>
-!!result
+!! html
 <table about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["<table>\n  <tr>\n    <td>\n    <table>\n      <tr>\n        <td>1. ",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo </table>"}},"i":0}},"</td>\n        <td> bar </td>\n        <td>2. ",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"baz </table>"}},"i":1}},"</td>\n      </tr>\n      <tr>\n        <td>abc</td>\n      </tr>\n    </table>\n    </td>\n  </tr>\n  <tr>\n    <td>xyz</td>\n  </tr>\n</table>"]}'>
   <tbody><tr>
     <td>
@@ -8927,10 +8943,10 @@ parsoid
 
 !! test
 Templates: Ugly templates: 3. newline-only template parameter
-!! input
+!! wikitext
 foo {{echo|
 }}
-!! result
+!! html
 <p>foo 
 </p>
 !! end
@@ -8938,10 +8954,10 @@ foo {{echo|
 # This looks like a bug: a single newline triggers p/br for some reason.
 !! test
 Templates: Ugly templates: 4. newline-only template parameter inconsistency
-!! input
+!! wikitext
 {{echo|
 }}
-!! result
+!! html
 <p><br />
 </p>
 !! end
@@ -8949,18 +8965,18 @@ Templates: Ugly templates: 4. newline-only template parameter inconsistency
 
 !!test
 Parser Functions: 1. Simple example
-!!input
+!! wikitext
 {{uc:foo}}
-!!result
+!! html
 <p>FOO
 </p>
 !!end
 
 !!test
 Parser Functions: 2. Nested use (only outermost should be marked up)
-!!input
+!! wikitext
 {{uc:{{lc:FOO}}}}
-!!result
+!! html
 <p>FOO
 </p>
 !!end
@@ -8972,9 +8988,9 @@ Parser Functions: 2. Nested use (only outermost should be marked up)
 pre-save transform: subst:
 !! options
 PST
-!! input
+!! wikitext
 {{subst:test}}
-!! result
+!! html
 This is a test template
 !! end
 
@@ -8982,9 +8998,9 @@ This is a test template
 pre-save transform: normal template
 !! options
 PST
-!! input
+!! wikitext
 {{test}}
-!! result
+!! html
 {{test}}
 !! end
 
@@ -8992,9 +9008,9 @@ PST
 pre-save transform: nonexistent template
 !! options
 PST
-!! input
+!! wikitext
 {{thistemplatedoesnotexist}}
-!! result
+!! html
 {{thistemplatedoesnotexist}}
 !! end
 
@@ -9003,9 +9019,9 @@ PST
 pre-save transform: subst magic variables
 !! options
 PST
-!! input
+!! wikitext
 {{subst:SITENAME}}
-!! result
+!! html
 MediaWiki
 !! end
 
@@ -9014,9 +9030,9 @@ MediaWiki
 pre-save transform: subst: templates with parameters
 !! options
 pst
-!! input
+!! wikitext
 {{subst:paramtest|param="something else"}}
-!! result
+!! html
 This is a test template with parameter "something else"
 !! end
 
@@ -9030,9 +9046,9 @@ Template:nowikitest
 pre-save transform: nowiki in subst (bug 1188)
 !! options
 pst
-!! input
+!! wikitext
 {{subst:nowikitest}}
-!! result
+!! html
 <nowiki>'''not wiki'''</nowiki>
 !! end
 
@@ -9047,9 +9063,9 @@ This template has <!-- a comment --> in it.
 pre-save transform: comment in subst (bug 1936)
 !! options
 pst
-!! input
+!! wikitext
 {{subst:commenttest}}
-!! result
+!! html
 This template has <!-- a comment --> in it.
 !! end
 
@@ -9057,9 +9073,9 @@ This template has <!-- a comment --> in it.
 pre-save transform: unclosed tag
 !! options
 pst noxml
-!! input
+!! wikitext
 <nowiki>'''not wiki'''
-!! result
+!! html
 <nowiki>'''not wiki'''
 !! end
 
@@ -9067,9 +9083,9 @@ pst noxml
 pre-save transform: mixed tag case
 !! options
 pst noxml
-!! input
+!! wikitext
 <NOwiki>'''not wiki'''</noWIKI>
-!! result
+!! html
 <NOwiki>'''not wiki'''</noWIKI>
 !! end
 
@@ -9077,9 +9093,9 @@ pst noxml
 pre-save transform: unclosed comment in <nowiki>
 !! options
 pst noxml
-!! input
+!! wikitext
 wiki<nowiki>nowiki<!--nowiki</nowiki>wiki
-!! result
+!! html
 wiki<nowiki>nowiki<!--nowiki</nowiki>wiki
 !!end
 
@@ -9094,9 +9110,9 @@ Template:dangerous
 
 !!test
 (confirming safety of fix for subst bug 1936)
-!! input
+!! wikitext
 {{Template:dangerous}}
-!! result
+!! html
 <p>@<span>Oh no</span>
 </p>
 !! end
@@ -9105,9 +9121,9 @@ Template:dangerous
 pre-save transform: comment containing gallery (bug 5024)
 !! options
 pst
-!! input
+!! wikitext
 <!-- <gallery>data</gallery> -->
-!!result
+!! html
 <!-- <gallery>data</gallery> -->
 !!end
 
@@ -9115,9 +9131,9 @@ pst
 pre-save transform: comment containing extension
 !! options
 pst
-!! input
+!! wikitext
 <!-- <tag>data</tag> -->
-!!result
+!! html
 <!-- <tag>data</tag> -->
 !!end
 
@@ -9125,9 +9141,9 @@ pst
 pre-save transform: comment containing nowiki
 !! options
 pst
-!! input
+!! wikitext
 <!-- <nowiki>data</nowiki> -->
-!!result
+!! html
 <!-- <nowiki>data</nowiki> -->
 !!end
 
@@ -9135,9 +9151,9 @@ pst
 pre-save transform: <noinclude> in subst (bug 3298)
 !! options
 pst
-!! input
+!! wikitext
 {{subst:Includes}}
-!! result
+!! html
 Foobar
 !! end
 
@@ -9145,9 +9161,9 @@ Foobar
 pre-save transform: <onlyinclude> in subst (bug 3298)
 !! options
 pst
-!! input
+!! wikitext
 {{subst:Includes2}}
-!! result
+!! html
 Foo
 !! end
 
@@ -9167,26 +9183,26 @@ Template:SafeSubstTest
 bug 22297: safesubst: works during PST
 !! options
 pst
-!! input
+!! wikitext
 {{subst:SafeSubstTest}}{{safesubst:SubstTest}}
-!! result
+!! html
 FoobarFoobar
 !! end
 
 !! test
 bug 22297: safesubst: works during normal parse
-!! input
+!! wikitext
 {{SafeSubstTest}}
-!! result
+!! html
 <p>Foobar
 </p>
 !! end
 
-!! test:
+!! test
 subst: does not work during normal parse
-!! input
+!! wikitext
 {{SubstTest}}
-!! result
+!! html
 <p>{{subst:Includes}}
 </p>
 !! end
@@ -9195,7 +9211,7 @@ subst: does not work during normal parse
 pre-save transform: context links ("pipe trick")
 !! options
 pst
-!! input
+!! wikitext
 [[Article (context)|]]
 [[Bar:Article|]]
 [[:Bar:Article|]]
@@ -9205,7 +9221,7 @@ pst
 [[|Article (context)]]
 [[Bar:X (Y) Z|]]
 [[:Bar:X (Y) Z|]]
-!! result
+!! html
 [[Article (context)|Article]]
 [[Bar:Article|Article]]
 [[:Bar:Article|Article]]
@@ -9221,12 +9237,12 @@ pst
 pre-save transform: context links ("pipe trick") with interwiki prefix
 !! options
 pst
-!! input
+!! wikitext
 [[interwiki:Article|]]
 [[:interwiki:Article|]]
 [[interwiki:Bar:Article|]]
 [[:interwiki:Bar:Article|]]
-!! result
+!! html
 [[interwiki:Article|Article]]
 [[:interwiki:Article|Article]]
 [[interwiki:Bar:Article|Bar:Article]]
@@ -9237,9 +9253,9 @@ pst
 pre-save transform: context links ("pipe trick") with parens in title
 !! options
 pst title=[[Somearticle (context)]]
-!! input
+!! wikitext
 [[|Article]]
-!! result
+!! html
 [[Article (context)|Article]]
 !! end
 
@@ -9247,11 +9263,11 @@ pst title=[[Somearticle (context)]]
 pre-save transform: context links ("pipe trick") with comma in title
 !! options
 pst title=[[Someplace, Somewhere]]
-!! input
+!! wikitext
 [[|Otherplace]]
 [[Otherplace, Elsewhere|]]
 [[Otherplace, Elsewhere, Anywhere|]]
-!! result
+!! html
 [[Otherplace, Somewhere|Otherplace]]
 [[Otherplace, Elsewhere|Otherplace]]
 [[Otherplace, Elsewhere, Anywhere|Otherplace]]
@@ -9261,10 +9277,10 @@ pst title=[[Someplace, Somewhere]]
 pre-save transform: context links ("pipe trick") with parens and comma
 !! options
 pst title=[[Someplace (IGNORED), Somewhere]]
-!! input
+!! wikitext
 [[|Otherplace]]
 [[Otherplace (place), Elsewhere|]]
-!! result
+!! html
 [[Otherplace, Somewhere|Otherplace]]
 [[Otherplace (place), Elsewhere|Otherplace]]
 !! end
@@ -9273,10 +9289,10 @@ pst title=[[Someplace (IGNORED), Somewhere]]
 pre-save transform: context links ("pipe trick") with comma and parens
 !! options
 pst title=[[Who, me? (context)]]
-!! input
+!! wikitext
 [[|Yes, you.]]
 [[Me, Myself, and I (1937 song)|]]
-!! result
+!! html
 [[Yes, you. (context)|Yes, you.]]
 [[Me, Myself, and I (1937 song)|Me, Myself, and I]]
 !! end
@@ -9285,9 +9301,9 @@ pst title=[[Who, me? (context)]]
 pre-save transform: context links ("pipe trick") with namespace
 !! options
 pst title=[[Ns:Somearticle]]
-!! input
+!! wikitext
 [[|Article]]
-!! result
+!! html
 [[Ns:Article|Article]]
 !! end
 
@@ -9295,9 +9311,9 @@ pst title=[[Ns:Somearticle]]
 pre-save transform: context links ("pipe trick") with namespace and parens
 !! options
 pst title=[[Ns:Somearticle (context)]]
-!! input
+!! wikitext
 [[|Article]]
-!! result
+!! html
 [[Ns:Article (context)|Article]]
 !! end
 
@@ -9305,9 +9321,9 @@ pst title=[[Ns:Somearticle (context)]]
 pre-save transform: context links ("pipe trick") with namespace and comma
 !! options
 pst title=[[Ns:Somearticle, Context, Whatever]]
-!! input
+!! wikitext
 [[|Article]]
-!! result
+!! html
 [[Ns:Article, Context, Whatever|Article]]
 !! end
 
@@ -9315,9 +9331,9 @@ pst title=[[Ns:Somearticle, Context, Whatever]]
 pre-save transform: context links ("pipe trick") with namespace, comma and parens
 !! options
 pst title=[[Ns:Somearticle, Context (context)]]
-!! input
+!! wikitext
 [[|Article]]
-!! result
+!! html
 [[Ns:Article (context)|Article]]
 !! end
 
@@ -9325,9 +9341,9 @@ pst title=[[Ns:Somearticle, Context (context)]]
 pre-save transform: context links ("pipe trick") with namespace, parens and comma
 !! options
 pst title=[[Ns:Somearticle (IGNORED), Context]]
-!! input
+!! wikitext
 [[|Article]]
-!! result
+!! html
 [[Ns:Article, Context|Article]]
 !! end
 
@@ -9335,14 +9351,14 @@ pst title=[[Ns:Somearticle (IGNORED), Context]]
 pre-save transform: context links ("pipe trick") with full-width parens and no space (Japanese and Chinese style, bug 30149)
 !! options
 pst
-!! input
+!! wikitext
 [[Article(context)|]]
 [[Bar:Article(context)|]]
 [[:Bar:Article(context)|]]
 [[|Article(context)]]
 [[Bar:X(Y)Z|]]
 [[:Bar:X(Y)Z|]]
-!! result
+!! html
 [[Article(context)|Article]]
 [[Bar:Article(context)|Article]]
 [[:Bar:Article(context)|Article]]
@@ -9355,14 +9371,14 @@ pst
 pre-save transform: context links ("pipe trick") with full-width parens and space (Japanese and Chinese style, bug 30149)
 !! options
 pst
-!! input
+!! wikitext
 [[Article (context)|]]
 [[Bar:Article (context)|]]
 [[:Bar:Article (context)|]]
 [[|Article (context)]]
 [[Bar:X (Y) Z|]]
 [[:Bar:X (Y) Z|]]
-!! result
+!! html
 [[Article (context)|Article]]
 [[Bar:Article (context)|Article]]
 [[:Bar:Article (context)|Article]]
@@ -9375,14 +9391,14 @@ pst
 pre-save transform: context links ("pipe trick") with parens and no space (Korean style, bug 30149)
 !! options
 pst
-!! input
+!! wikitext
 [[Article(context)|]]
 [[Bar:Article(context)|]]
 [[:Bar:Article(context)|]]
 [[|Article(context)]]
 [[Bar:X(Y)Z|]]
 [[:Bar:X(Y)Z|]]
-!! result
+!! html
 [[Article(context)|Article]]
 [[Bar:Article(context)|Article]]
 [[:Bar:Article(context)|Article]]
@@ -9395,14 +9411,14 @@ pst
 pre-save transform: context links ("pipe trick") with commas (bug 21660)
 !! options
 pst
-!! input
+!! wikitext
 [[Article (context), context|]]
 [[Article (context),context|]]
 [[Bar:Article (context), context|]]
 [[Bar:Article (context),context|]]
 [[:Bar:Article (context), context|]]
 [[:Bar:Article (context),context|]]
-!! result
+!! html
 [[Article (context), context|Article]]
 [[Article (context),context|Article]]
 [[Bar:Article (context), context|Article]]
@@ -9415,13 +9431,13 @@ pst
 pre-save transform: trim trailing empty lines
 !! options
 pst
-!! input
+!! wikitext
 Empty lines are trimmed
 
 
 
 
-!! result
+!! html
 Empty lines are trimmed
 !! end
 
@@ -9429,12 +9445,12 @@ Empty lines are trimmed
 pre-save transform: Signature expansion
 !! options
 pst
-!! input
+!! wikitext
 * ~~~
 * <noinclude>~~~</noinclude>
 * <includeonly>~~~</includeonly>
 * <onlyinclude>~~~</onlyinclude>
-!! result
+!! html
 * [[Special:Contributions/127.0.0.1|127.0.0.1]]
 * <noinclude>[[Special:Contributions/127.0.0.1|127.0.0.1]]</noinclude>
 * <includeonly>[[Special:Contributions/127.0.0.1|127.0.0.1]]</includeonly>
@@ -9446,7 +9462,7 @@ pst
 pre-save transform: Signature expansion in nowiki tags (bug 93)
 !! options
 pst disabled
-!! input
+!! wikitext
 Shall not expand:
 
 <nowiki>~~~~</nowiki>
@@ -9465,7 +9481,7 @@ As well as inside noinclude/onlyinclude
 
 But not inside includeonly
 <includeonly>{{subst:Foo}}</includeonly>
-!! result
+!! html
 Shall not expand:
 
 <nowiki>~~~~</nowiki>
@@ -9490,7 +9506,7 @@ But not inside includeonly
 Parsoid: Recognize nowiki with trailing space in tags
 !! options
 parsoid=wt2html
-!! input
+!! wikitext
 <nowiki ><div>[[foo]]</nowiki >
 
 a<nowiki / >b
@@ -9498,7 +9514,7 @@ a<nowiki / >b
 c<nowiki />d
 
 e<nowiki/ >f
-!! result
+!! html
 <p><span typeof="mw:Nowiki">&lt;div&gt;[[foo]]</span></p>
 <p>ab</p>
 <p>cd</p>
@@ -9509,9 +9525,9 @@ e<nowiki/ >f
 Parsoid: Recognize nowiki with odd capitalization
 !! options
 parsoid=wt2html
-!! input
+!! wikitext
 <noWikI ><div>[[foo]]</Nowiki >
-!! result
+!! html
 <p><span typeof="mw:Nowiki">&lt;div&gt;[[foo]]</span></p>
 !! end
 
@@ -9520,13 +9536,13 @@ parsoid=wt2html
 Parsoid: Escape nowiki with trailing space in tags
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 &lt;nowiki &gt; foo &lt;/nowiki &gt;
 
 a&lt;nowiki /&gt;b
 
 c&lt;nowiki/ &gt;d
-!! result
+!! html
 <p>&lt;nowiki &gt; foo &lt/nowiki ></p>
 <p>a&lt;nowiki /&gt;b</p>
 <p>c&lt;nowiki/ &gt;d</p>
@@ -9536,9 +9552,9 @@ c&lt;nowiki/ &gt;d
 Parsoid: Escape weird noWikI capitalizations
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 &lt;noWikI &gt; foo &lt;/NoWikI &gt;
-!! result
+!! html
 <p>&lt;noWikI &gt; foo &lt/NoWikI ></p>
 !! end
 
@@ -9549,9 +9565,9 @@ parsoid=html2wt
 message transform: magic variables
 !! options
 msg
-!! input
+!! wikitext
 {{SITENAME}}
-!! result
+!! html
 MediaWiki
 !! end
 
@@ -9559,9 +9575,9 @@ MediaWiki
 message transform: should not transform wiki markup
 !! options
 msg
-!! input
+!! wikitext
 ''test''
-!! result
+!! html
 ''test''
 !! end
 
@@ -9569,9 +9585,9 @@ msg
 message transform: <noinclude> in transcluded template (bug 4926)
 !! options
 msg
-!! input
+!! wikitext
 {{Includes}}
-!! result
+!! html
 Foobar
 !! end
 
@@ -9579,9 +9595,9 @@ Foobar
 message transform: <onlyinclude> in transcluded template (bug 4926)
 !! options
 msg
-!! input
+!! wikitext
 {{Includes2}}
-!! result
+!! html
 Foo
 !! end
 
@@ -9589,9 +9605,9 @@ Foo
 {{#special:}} page name, known
 !! options
 msg
-!! input
+!! wikitext
 {{#special:Recentchanges}}
-!! result
+!! html
 Special:RecentChanges
 !! end
 
@@ -9599,9 +9615,9 @@ Special:RecentChanges
 {{#special:}} page name with subpage, known
 !! options
 msg
-!! input
+!! wikitext
 {{#special:Recentchanges/param}}
-!! result
+!! html
 Special:RecentChanges/param
 !! end
 
@@ -9609,9 +9625,9 @@ Special:RecentChanges/param
 {{#special:}} page name, unknown
 !! options
 msg
-!! input
+!! wikitext
 {{#special:foobar nonexistent}}
-!! result
+!! html
 Special:Foobar nonexistent
 !! end
 
@@ -9619,9 +9635,9 @@ Special:Foobar nonexistent
 {{#speciale:}} page name, known
 !! options
 msg
-!! input
+!! wikitext
 {{#speciale:Recentchanges}}
-!! result
+!! html
 Special:RecentChanges
 !! end
 
@@ -9629,9 +9645,9 @@ Special:RecentChanges
 {{#speciale:}} page name with subpage, known
 !! options
 msg
-!! input
+!! wikitext
 {{#speciale:Recentchanges/param}}
-!! result
+!! html
 Special:RecentChanges/param
 !! end
 
@@ -9639,9 +9655,9 @@ Special:RecentChanges/param
 {{#speciale:}} page name, unknown
 !! options
 msg
-!! input
+!! wikitext
 {{#speciale:foobar nonexistent}}
-!! result
+!! html
 Special:Foobar_nonexistent
 !! end
 
@@ -9649,620 +9665,746 @@ Special:Foobar_nonexistent
 ### Images
 ###
 ### For Parsoid-specific tests, see
-#### http://www.mediawiki.org/wiki/Parsoid/MediaWiki_DOM_spec#Images
+#### https://www.mediawiki.org/wiki/Parsoid/MediaWiki_DOM_spec#Images
 
 !! test
-Simple image (php)
+Simple image
 !! options
-php
-!! input
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
 [[Image:foobar.jpg]]
-!! result
+!! html/php
 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
-!! end
-
-!! test
-Simple image (parsoid)
-!! options
-parsoid=wt2html
-!! input
-[[Image:foobar.jpg]]
-!! result
+!! html/parsoid
 <p><span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span>
 </p>
 !! end
 
 !! test
-Simple image (using File: namespace, now canonical) (php)
-!! options
-php
-!! input
-[[File:foobar.jpg]]
-!! result
+Simple image (using File: namespace, now canonical)
+!! wikitext
+[[File:Foobar.jpg]]
+!! html/php
 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
-!! end
-
-!! test
-Simple image (using File: namespace, now canonical) (parsoid)
-!! options
-parsoid
-!! input
-[[File:Foobar.jpg]]
-!! result
+!! html/parsoid
 <p><span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span>
 </p>
 !! end
 
 !! test
-Right-aligned image (php)
-!! options
-php
-!! input
-[[Image:foobar.jpg|right]]
-!! result
+Right-aligned image
+!! wikitext
+[[File:Foobar.jpg|right]]
+!! html/php
 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
-!! end
-
-!! test
-Right-aligned image (parsoid)
-!! options
-parsoid
-!! input
-[[File:Foobar.jpg|right]]
-!! result
+!! html/parsoid
 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></figure>
 !! end
 
 !! test
-Image with caption (php)
-!! options
-php
-!! input
+Image with caption
+!! wikitext
 [[File:Foobar.jpg|right|Caption text]]
-!! result
+!! html/php
 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
-!! end
-
-!! test
-Image with caption (parsoid)
-!! options
-parsoid
-!! input
-[[File:Foobar.jpg|right|Caption text]]
-!! result
+!! html/parsoid
 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption text</figcaption></figure>
 !! end
 
 !! test
-Image with caption, bug 53312 #1 (parsoid)
-!! options
-parsoid
-!! input
+Image with caption, bug 53312 #1
+!! wikitext
 [[File:Foobar.jpg|right|Caption page stuff]]
-!! result
+!! html/php
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption page stuff"><img alt="Caption page stuff" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
+
+!! html/parsoid
 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption page stuff</figcaption></figure>
 !! end
 
 !! test
-Image with caption, bug 53312 #2 (parsoid)
-!! options
-parsoid
-!! input
+Image with caption, bug 53312 #2
+!! wikitext
 [[File:Foobar.jpg|right|Caption page=]]
-!! result
+!! html/php
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption page="><img alt="Caption page=" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
+
+!! html/parsoid
 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption page=</figcaption></figure>
 !! end
 
 !! test
-Image with caption, bug 53312 #3 (parsoid)
-!! options
-parsoid
-!! input
+Image with caption, bug 53312 #3
+!! wikitext
 [[File:Foobar.jpg|right|Caption page=stuff]]
-!! result
+!! html/php
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption page=stuff"><img alt="Caption page=stuff" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
+
+!! html/parsoid
 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption page=stuff</figcaption></figure>
 !! end
 
 !! test
-Image with empty attribute (php)
+Allow empty links in image captions (Bug 60753)
 !! options
-php
-!! input
-[[File:Foobar.jpg|right||Caption text]]
-!! result
-<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
+thumbsize=220
+!! wikitext
+[[File:Foobar.jpg|thumb|Caption [[Link1]]
+[[]]
+[[Link2]]
+]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-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>Caption <a href="/index.php?title=Link1&amp;action=edit&amp;redlink=1" class="new" title="Link1 (page does not exist)">Link1</a> [[]] <a href="/index.php?title=Link2&amp;action=edit&amp;redlink=1" class="new" title="Link2 (page does not exist)">Link2</a></div></div></div>
+
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption [[Link1]]\n[[]]\n[[Link2]]\n"}],"dsr":[0,59,2,2]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"dsr":[2,null,null,null]}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption data-parsoid='{"dsr":[null,57,null,null]}'>Caption <a rel="mw:WikiLink" href="./Link1" data-parsoid='{"stx":"simple","a":{"href":"./Link1"},"sa":{"href":"Link1"},"dsr":[32,41,2,2]}'>Link1</a>
+[[]]
+<a rel="mw:WikiLink" href="./Link2" data-parsoid='{"stx":"simple","a":{"href":"./Link2"},"sa":{"href":"Link2"},"dsr":[47,56,2,2]}'>Link2</a>
+</figcaption></figure>
+!! end
 
+!! test
+Link with empty target
+!! wikitext
+[[]]
+!! html
+<p>[[]]
+</p>
 !! end
 
 !! test
-Image with empty attribute (parsoid)
+Image with empty attribute
 !! options
-parsoid=wt2html
-!! input
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
 [[File:Foobar.jpg|right||Caption text]]
-!! result
+!! html/php
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
+
+!! html/parsoid
 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption text</figcaption></figure>
 !! end
 
 !! test
-Image with attributes from template (php)
-!! options
-php
-!! input
-[[File:Foobar.jpg|{{image_attribs}}]]
-!! result
-<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
+1. Block image with individual attributes from templates
+!! wikitext
+[[File:Foobar.jpg|thumb|{{echo|137px}}|This is a caption]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:139px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" width="137" height="16" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/206px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/274px-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 caption</div></div></div>
 
+!! html/parsoid
+<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[24,38,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\">137px&lt;/span>"}]]}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
 !! end
 
 !! test
-Image with attributes from template (parsoid)
-!! options
-parsoid
-!! input
-[[File:Foobar.jpg|{{image_attribs}}]]
-!! result
-<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption text</figcaption></figure>
+2. Block Image with individual attributes from templates
+!! wikitext
+[[File:Foobar.jpg|{{echo|thumb}}|{{echo|137px}}|This is a caption]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:139px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" width="137" height="16" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/206px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/274px-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 caption</div></div></div>
+
+!! html/parsoid
+<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" data-mw='{"attribs":[["thumbnail",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;thumb&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[18,32,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\">thumb&lt;/span>"}],["width",{"html":"&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[33,47,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\">137px&lt;/span>"}]]}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
 !! end
 
 !! test
-Image with link tails (php)
-!! options
-php
-!! input
-123[[File:Foobar.jpg]]456
-123[[File:Foobar.jpg|right]]456
-123[[File:Foobar.jpg|thumb]]456
-!! result
-<p>123<a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>456
+3. Inline image with individual attributes from templates
+!! wikitext
+[[File:Foobar.jpg|{{echo|50px}}]]
+!! html/php
+<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" width="50" height="6" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/75px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/100px-Foobar.jpg 2x" /></a>
 </p>
-123<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>456
-123<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" 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></div></div></div>456
+!! html/parsoid
+<p><span typeof="mw:Image mw:ExpandedAttrs" about="#mwt2" data-mw='{"attribs":[["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;50px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[18,31,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\">50px&lt;/span>"}]]}' data-parsoid='{"optList":[{"ck":"width","ak":"{{echo|50px}}"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+!! end
+
+## Parsoid does not provide editing support for images where templates produce multiple image attributes.
+## To signal this, we add a 'mw:Placeholder' type to such images. This could change in the future.
+!! test
+Image with multiple attributes from the same template
+!! wikitext
+[[File:Foobar.jpg|{{image_attribs}}]]
+!! html/php
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
+!! html/parsoid
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image mw:Placeholder"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption text</figcaption></figure>
 !! end
 
 !! test
-Image with link tails (parsoid)
+Image with link tails
 !! options
-parsoid
-!! input
+thumbsize=220
+!! wikitext
 123[[File:Foobar.jpg]]456
 123[[File:Foobar.jpg|right]]456
 123[[File:Foobar.jpg|thumb]]456
-!! result
+!! html/php
+<p>123<a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>456
+</p>
+123<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>456
+123<div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-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></div></div></div>456
+
+!! html/parsoid
 <p>123<span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span>456</p>
 123<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></figure>456
-123<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="20" width="180"></a></figure>456
+123<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="25" width="220"></a></figure>456
 !! end
 
 !! test
-Image with multiple captions -- only last one is accepted (php)
-!! options
-php
-!! input
+Image with multiple captions -- only last one is accepted
+!! wikitext
 [[File:Foobar.jpg|right|Caption1 - ignored|[[Caption2]] - ignored|Caption3 - accepted]]
-!! result
+!! html/php
 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption3 - accepted"><img alt="Caption3 - accepted" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
+!! html/parsoid
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption3 - accepted</figcaption></figure>
 !! end
 
 !! test
-Image with multiple captions -- only last one is accepted (parsoid)
-!! options
-parsoid
-!! input
-[[File:Foobar.jpg|right|Caption1 - ignored|[[Caption2]] - ignored|Caption3 - accepted]]
-!! result
-<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption3 - accepted</figcaption></figure>
+Image with multiple widths -- use last
+!! wikitext
+[[File:Foobar.jpg|200px|300px|caption]]
+!! html/php
+<p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" width="300" height="34" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/450px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/600px-Foobar.jpg 2x" /></a>
+</p>
+!! html/parsoid
+<p><span typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="34" width="300"/></a></span></p>
 !! end
 
 !! test
-Image with width attribute at different positions (php)
+Image with multiple alignments -- use first (bug 48664)
 !! options
-php
-!! input
-[[File:Foobar.jpg|200px|right|Caption]]
-[[File:Foobar.jpg|right|200px|Caption]]
-[[File:Foobar.jpg|right|Caption|200px]]
-!! result
-<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
-<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
-<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
+thumbsize=220
+!! wikitext
+[[File:Foobar.jpg|thumb|left|right|center|caption]]
 
+[[File:Foobar.jpg|middle|text-top|caption]]
+!! html/php
+<div class="thumb tleft"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-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>caption</div></div></div>
+<p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" style="vertical-align: middle" /></a>
+</p>
+!! html/parsoid
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<p><span class="mw-default-size mw-valign-middle" typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
-Image with width attribute at different positions (parsoid)
-!! options
-parsoid
-!! input
+Image with width attribute at different positions
+!! wikitext
 [[File:Foobar.jpg|200px|right|Caption]]
 [[File:Foobar.jpg|right|200px|Caption]]
 [[File:Foobar.jpg|right|Caption|200px]]
-!! result
+!! html/php
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
+
+!! html/parsoid
 <figure class="mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" height="23" width="200"></a><figcaption>Caption</figcaption></figure>
 <figure class="mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" height="23" width="200"></a><figcaption>Caption</figcaption></figure>
 <figure class="mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" height="23" width="200"></a><figcaption>Caption</figcaption></figure>
 !! end
 
+# a sad bit of backward-compatibility
 !! test
-Image with link parameter, wiki target (php)
+Image with size specified with pxpx (bug 13500, 51628)
 !! options
-php
-!! input
-[[File:Foobar.jpg|link=Main Page]]
-!! result
-<p><a href="/wiki/Main_Page" title="Main Page"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|20pxpx]]
+[[File:Foobar.jpg|200x20pxpx]]
+!! html/php
+<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg" width="20" height="2" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/30px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/40px-Foobar.jpg 2x" /></a>
+<a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/177px-Foobar.jpg" width="177" height="20" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/265px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/353px-Foobar.jpg 2x" /></a>
 </p>
+!! html/parsoid
+<p><span typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="2" width="20"/></a></span><span typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="20" width="177"/></a></span></p>
 !! end
 
 !! test
-Image with link parameter, wiki target (parsoid)
-!! options
-parsoid
-!! input
+Image with link parameter, wiki target
+!! wikitext
 [[File:Foobar.jpg|link=Main Page]]
-!! result
+!! html/php
+<p><a href="/wiki/Main_Page" title="Main Page"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!! html/parsoid
 <p><span class="mw-default-size" typeof="mw:Image"><a href="Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
 !! end
 
+# parsoid bug 49293 (part 1)
 !! test
-Image with link parameter, URL target (php)
-!! options
-php
-!! input
+Image with link parameter, URL target
+!! wikitext
 [[File:Foobar.jpg|link=http://example.com/]]
-!! result
+!! html/php
 <p><a href="http://example.com/" rel="nofollow"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
-!! end
-
-# parsoid bug 49293 (part 1)
-!! test
-Image with link parameter, URL target (parsoid)
-!! options
-parsoid
-!! input
-[[File:Foobar.jpg|link=http://example.com/]]
-!! result
+!! html/parsoid
 <p><span class="mw-default-size" typeof="mw:Image"><a href="http://example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
 !! end
 
+# parsoid bug 49293 (part 2)
 !! test
-Image with link parameter, protocol-less URL target (php)
-!! options
-php
-!! input
+Image with link parameter, protocol-less URL target
+!! wikitext
 [[File:Foobar.jpg|link=//example.com/]]
-!! result
+!! html/php
 <p><a href="//example.com/" rel="nofollow"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
-!! end
-
-# parsoid bug 49293 (part 2)
-!! test
-Image with link parameter, protocol-less URL target (parsoid)
-!! options
-parsoid
-!! input
-[[File:Foobar.jpg|link=//example.com/]]
-!! result
+!! html/parsoid
 <p><span class="mw-default-size" typeof="mw:Image"><a href="//example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
 !! end
 
 !! test
 Image with link parameter, wgExternalLinkTarget
-!! input
+!! wikitext
 [[Image:foobar.jpg|link=http://example.com/]]
 !! config
 wgExternalLinkTarget='foobar'
-!! result
+!! html
 <p><a href="http://example.com/" target="foobar" rel="nofollow"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! end
 
 !! test
 Image with link parameter, wgNoFollowLinks set to false
-!! input
+!! wikitext
 [[Image:foobar.jpg|link=http://example.com/]]
 !! config
 wgNoFollowLinks=false
-!! result
+!! html
 <p><a href="http://example.com/"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! end
 
 !! test
 Image with link parameter, wgNoFollowDomainExceptions
-!! input
+!! wikitext
 [[Image:foobar.jpg|link=http://example.com/]]
 !! config
 wgNoFollowDomainExceptions='example.com'
-!! result
+!! html
 <p><a href="http://example.com/"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! end
 
 !! test
 Image with link parameter, wgExternalLinkTarget, unnamed parameter
-!! input
+!! wikitext
 [[Image:foobar.jpg|link=http://example.com/|Title]]
 !! config
 wgExternalLinkTarget='foobar'
-!! result
+!! html
 <p><a href="http://example.com/" title="Title" target="foobar" rel="nofollow"><img alt="Title" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! end
 
 !! test
-Image with empty link parameter (php)
-!! options
-php
-!! input
+Image with empty link parameter
+!! wikitext
 [[File:Foobar.jpg|link=]]
-!! result
+!! html/php
 <p><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" />
 </p>
-!! end
-
-!! test
-Image with empty link parameter (parsoid)
-!! options
-parsoid
-!! input
-[[File:Foobar.jpg|link=]]
-!! result
+!! html/parsoid
 <p><span class="mw-default-size" typeof="mw:Image"><span><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></span></span></p>
 !! end
 
 !! test
-Image with link parameter (wiki target) and unnamed parameter (php)
-!! options
-php
-!! input
-[[File:Foobar.jpg|link=Main Page|Title]]
-!! result
+Image with link parameter (wiki target) and unnamed parameter
+!! wikitext
+[[File:Foobar.jpg|link=Main_Page|Title]]
+!! html/php
 <p><a href="/wiki/Main_Page" title="Title"><img alt="Title" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
-!! end
-
-!! test
-Image with link parameter (wiki target) and unnamed parameter (parsoid)
-!! options
-parsoid
-!! input
-[[File:Foobar.jpg|link=Main Page|Title]]
-!! result
+!! html/parsoid
 <p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"Title"}'><a href="Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
 !! end
 
 !! test
-Image with link parameter (URL target) and unnamed parameter (php)
-!! options
-php
-!! input
+Image with link parameter (URL target) and unnamed parameter
+!! wikitext
 [[File:Foobar.jpg|link=http://example.com/|Title]]
-!! result
+!! html/php
 <p><a href="http://example.com/" title="Title" rel="nofollow"><img alt="Title" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
-!! end
-
-!! test
-Image with link parameter (URL target) and unnamed parameter (parsoid)
-!! options
-parsoid
-!! input
-[[File:Foobar.jpg|link=http://example.com/|Title]]
-!! result
+!! html/parsoid
 <p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"Title"}'><a href="http://example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
 !! end
 
 !! test
 Thumbnail image with link parameter
 !! options
-php
-!! input
-[[Image:foobar.jpg|thumb|link=http://example.com/|Title]]
-!! result
-<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="http://example.com/"><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>Title</div></div></div>
+thumbsize=220
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|thumb|link=http://example.com/|Title]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="http://example.com/"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-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>Title</div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="http://example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>Title</figcaption></figure>
 !! end
 
 !! test
 Manually-specified thumbnail image
 !! options
-php
-!! input
-[[Image:Foobar.jpg|thumb=Thumb.png|Title]]
-!! result
+thumbsize=220
+!! wikitext
+[[File:Foobar.jpg|thumb=Thumb.png|Title]]
+!! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/File:Foobar.jpg"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
 !! end
 
 !! test
 Manually-specified thumbnail image with explicit link to wiki page
 !! options
-php
-!! input
-[[Image:Foobar.jpg|thumb=Thumb.png|link=Main Page|Title]]
-!! result
+thumbsize=220
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|thumb=Thumb.png|link=Main_Page|Title]]
+!! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
 !! end
 
 !! test
 Manually-specified thumbnail image with explicit link to url
 !! options
-php
-!! input
-[[Image:Foobar.jpg|thumb=Thumb.png|link=http://example.com|Title]]
-!! result
+thumbsize=220
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|thumb=Thumb.png|link=http://example.com|Title]]
+!! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="http://example.com"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="http://example.com"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
+!! end
+
+!! test
+Manually-specified thumbnail image with explicit no link
+!! options
+thumbsize=220
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|thumb=Thumb.png|link=|Title]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:137px;"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" />  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>
+
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><span><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></span><figcaption>Title</figcaption></figure>
+!! end
+
+!! test
+Manually-specified thumbnail image with explicit link and alt text
+!! options
+thumbsize=220
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|thumb=Thumb.png|link=Main_Page|alt=alttext|Title]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="alttext" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>
+
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="Main_Page"><img alt="alttext" resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
+!! end
+
+!! test
+Image with frame and link
+!! options
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|frame|left|This is a test image [[Main Page]]]]
+!! html/php
+<div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>
+
+!! html/parsoid
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page">Main Page</a></figcaption></figure>
+!! end
+
+!! test
+Image with frame and link and explicit alt
+!! options
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[Image:Foobar.jpg|frame|left|This is a test image [[Main Page]]|alt=Altitude]]
+!! html/php
+<div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Altitude" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>
+
+!! html/parsoid
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img alt="Altitude" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page">Main Page</a></figcaption></figure>
+!! end
+
+!! test
+Image with wiki markup in implicit alt
+!! options
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[Image:Foobar.jpg|testing '''bold''' in alt]]
+
+[[Image:Foobar.jpg|alt=testing '''bold''' in alt]]
+!! html/php
+<p><a href="/wiki/File:Foobar.jpg" class="image" title="testing bold in alt"><img alt="testing bold in alt" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p><p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="testing bold in alt" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-mw="{&quot;caption&quot;:&quot;testing '''bold''' in alt&quot;}"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img alt="testing bold in alt" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+!! end
+
+###################
+# Image sizing.
+# See https://www.mediawiki.org/wiki/Help:Images#Size_and_frame
+# and https://bugzilla.wikimedia.org/show_bug.cgi?id=62258
+# Foobar has actual size of 1941x220
+# 1. Thumbs & frameless always reduce, can't be enlarged
+# 2. Framed images ignore width; always render at default size.
+#    If given a height, they respect height but continue to ignore width.
+# 3. "Unspecified format" and border are the only types which can be
+#    enlarged.
+
+!! test
+Image: "unspecified format" and border enlarge
+!! options
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|2000px]]
+
+[[File:Foobar.jpg|border|2000px]]
+!! html/php
+<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="2000" height="227" /></a>
+</p><p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="2000" height="227" class="thumbborder" /></a>
+</p>
+!! html/parsoid
+<p><span typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="227" width="2000"/></a></span></p>
+<p><span class="mw-image-border" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="227" width="2000"/></a></span></p>
+!! end
+
+!! test
+Image: "unspecified format" and border reduce
+!! options
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|1000px]]
+
+[[File:Foobar.jpg|border|1000px]]
+!! html/php
+<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/1000px-Foobar.jpg" width="1000" height="113" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/1500px-Foobar.jpg 1.5x, http://example.com/images/3/3a/Foobar.jpg 2x" /></a>
+</p><p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/1000px-Foobar.jpg" width="1000" height="113" class="thumbborder" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/1500px-Foobar.jpg 1.5x, http://example.com/images/3/3a/Foobar.jpg 2x" /></a>
+</p>
+!! html/parsoid
+<p><span typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="113" width="1000"/></a></span></p>
+<p><span class="mw-image-border" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="113" width="1000"/></a></span></p>
+!! end
+
+!! test
+Image: thumbs reduce
+!! options
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|thumb|50px]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:52px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" width="50" height="6" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/75px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/100px-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></div></div></div>
+
+!! html/parsoid
+<figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="6" width="50"/></a></figure>
+!! end
+
+!! test
+Image: thumbs can't be enlarged past original size
+!! options
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|thumb|2000px]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div></div></div></div>
+
+!! html/parsoid
+<figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure>
+!! end
+
+!! test
+Image: frameless can reduce in size
+!! options
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|frameless|50px]]
+!! html/php
+<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" width="50" height="6" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/75px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/100px-Foobar.jpg 2x" /></a>
+</p>
+!! html/parsoid
+<p><span typeof="mw:Image/Frameless"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="6" width="50"/></a></span></p>
 !! end
 
 !! test
-Manually-specified thumbnail image with explicit no link
+Image: frameless can't be enlarged past original size
 !! options
-php
-!! input
-[[Image:Foobar.jpg|thumb=Thumb.png|link=|Title]]
-!! result
-<div class="thumb tright"><div class="thumbinner" style="width:137px;"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" />  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>
-
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|frameless|2000px]]
+!! html/php
+<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!! html/parsoid
+<p><span typeof="mw:Image/Frameless"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
-Manually-specified thumbnail image with explicit link and alt text
+Image: framed images ignore size if only width is given
 !! options
-php
-!! input
-[[Image:Foobar.jpg|thumb=Thumb.png|link=Main Page|alt=alttext|Title]]
-!! result
-<div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="alttext" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|frame]]
 
-!! end
+[[File:Foobar.jpg|frame|50px]]
 
-!! test
-Image with frame and link
-!! input
-[[Image:Foobar.jpg|frame|left|This is a test image [[Main Page]]]]
-!! result
-<div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>
+[[File:Foobar.jpg|frame|2000px]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption"></div></div></div>
+<div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption"></div></div></div>
+<div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption"></div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure><figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure><figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure>
 !! end
 
 !! test
-Image with frame and link and explicit alt
-!! input
-[[Image:Foobar.jpg|frame|left|This is a test image [[Main Page]]|alt=Altitude]]
-!! result
-<div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Altitude" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>
+Image: framed images respect size if given a height, but ignore width.
+!! wikitext
+[[File:Foobar.jpg|frame|50x50px]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:444px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/442px-Foobar.jpg" width="442" height="50" class="thumbimage" /></a>  <div class="thumbcaption"></div></div></div>
 
+!! html/parsoid
+<figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="50" width="442"/></a></figure>
 !! end
 
-!! test
-Image with wiki markup in implicit alt
-!! input
-[[Image:Foobar.jpg|testing '''bold''' in alt]]
-!! result
-<p><a href="/wiki/File:Foobar.jpg" class="image" title="testing bold in alt"><img alt="testing bold in alt" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
-</p>
-!! end
-
-!! test
-Image with wiki markup in explicit alt
-!! input
-[[Image:Foobar.jpg|alt=testing '''bold''' in alt]]
-!! result
-<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="testing bold in alt" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
-</p>
-!! end
+###################
 
 !! test
 Link to image page- image page normally doesn't exists, hence edit link
 Add test with existing image page
 #<p><a href="/wiki/File:Test" title="Image:Test">Image:test</a>
-!! input
+!! wikitext
 [[:Image:test]]
-!! result
+!! html
 <p><a href="/index.php?title=File:Test&amp;action=edit&amp;redlink=1" class="new" title="File:Test (page does not exist)">Image:test</a>
 </p>
 !! end
 
 !! test
 bug 18784  Link to non-existent image page with caption should use caption as link text
-!! input
+!! wikitext
 [[:Image:test|caption]]
-!! result
+!! html
 <p><a href="/index.php?title=File:Test&amp;action=edit&amp;redlink=1" class="new" title="File:Test (page does not exist)">caption</a>
 </p>
 !! end
 
 !! test
 Frameless image caption with a free URL
-!! input
-[[Image:foobar.jpg|http://example.com]]
-!! result
+!! wikitext
+[[File:Foobar.jpg|http://example.com]]
+!! html/php
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="http://example.com"><img alt="http://example.com" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"http://example.com"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
 Thumbnail image caption with a free URL
-!! input
-[[Image:foobar.jpg|thumb|http://example.com]]
-!! 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><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div></div></div>
+!! options
+thumbsize=220
+!! wikitext
+[[File:Foobar.jpg|thumb|http://example.com]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-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><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
 !! end
 
 !! test
 Thumbnail image caption with a free URL and explicit alt
-!! input
-[[Image:foobar.jpg|thumb|http://example.com|alt=Alteration]]
-!! result
-<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Alteration" 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><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div></div></div>
+!! options
+thumbsize=220
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|thumb|http://example.com|alt=Alteration]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Alteration" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-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><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img alt="Alteration" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
 !! end
 
 !! test
 SVG thumbnails with no language set
 !! options
-!! input
+!! wikitext
 [[File:Foobar.svg|thumb|caption]]
-!! result
-<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png" width="180" height="180" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>caption</div></div></div>
+!! html
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>caption</div></div></div>
 
 !! end
 
 !! test
 SVG thumbnails with language de
 !! options
-!! input
+!! wikitext
 [[File:Foobar.svg|thumb|caption|lang=de]]
-!! result
-<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=File:Foobar.svg&amp;lang=de" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/langde-180px-Foobar.svg.png" width="180" height="180" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/langde-270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/langde-360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>caption</div></div></div>
+!! html
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=File:Foobar.svg&amp;lang=de" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/langde-180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/langde-270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/langde-360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>caption</div></div></div>
 
 !! end
 
 !! test
 SVG thumbnails with invalid language code
 !! options
-!! input
+!! wikitext
 [[File:Foobar.svg|thumb|caption|lang=invalid.language.code]]
-!! result
-<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png" width="180" height="180" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>lang=invalid.language.code</div></div></div>
+!! html
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>lang=invalid.language.code</div></div></div>
 
 !! end
 
 !! test
 BUG 1887: A ISBN with a thumbnail
-!! input
+!! wikitext
 [[Image:foobar.jpg|thumb|ISBN 1235467890]]
-!! result
+!! html
 <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><a href="/wiki/Special:BookSources/1235467890" class="internal mw-magiclink-isbn">ISBN 1235467890</a></div></div></div>
 
 !! end
 
 !! test
 BUG 1887: A RFC with a thumbnail
-!! input
+!! wikitext
 [[Image:foobar.jpg|thumb|This is RFC 12354]]
-!! result
+!! html
 <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
 
 !! test
 BUG 1887: A mailto link with a thumbnail
-!! input
+!! wikitext
 [[Image:foobar.jpg|thumb|Please mailto:nobody@example.com]]
-!! result
+!! html
 <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>Please <a rel="nofollow" class="external free" href="mailto:nobody@example.com">mailto:nobody@example.com</a></div></div></div>
 
 !! end
@@ -10270,82 +10412,82 @@ BUG 1887: A mailto link with a thumbnail
 # Pending resolution to bug 368
 !! test
 BUG 648: Frameless image caption with a link
-!! input
+!! wikitext
 [[Image:foobar.jpg|text with a [[link]] in it]]
-!! result
+!! html
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! end
 
 !! test
 BUG 648: Frameless image caption with a link (suffix)
-!! input
+!! wikitext
 [[Image:foobar.jpg|text with a [[link]]foo in it]]
-!! result
+!! html
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a linkfoo in it"><img alt="text with a linkfoo in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! end
 
 !! test
 BUG 648: Frameless image caption with an interwiki link
-!! input
+!! wikitext
 [[Image:foobar.jpg|text with a [[MeatBall:Link]] in it]]
-!! result
+!! html
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a MeatBall:Link in it"><img alt="text with a MeatBall:Link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! end
 
 !! test
 BUG 648: Frameless image caption with a piped interwiki link
-!! input
+!! wikitext
 [[Image:foobar.jpg|text with a [[MeatBall:Link|link]] in it]]
-!! result
+!! html
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! end
 
 !! test
 Escape HTML special chars in image alt text
-!! input
+!! wikitext
 [[Image:foobar.jpg|& < > "]]
-!! result
+!! html
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="&amp; &lt; &gt; &quot;"><img alt="&amp; &lt; &gt; &quot;" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! end
 
 !! test
 BUG 499: Alt text should have &#1234;, not &amp;1234;
-!! input
+!! wikitext
 [[Image:foobar.jpg|&#9792;]]
-!! result
+!! html
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="♀"><img alt="♀" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! end
 
 !! test
 Broken image caption with link
-!! input
+!! wikitext
 [[Image:Foobar.jpg|thumb|This is a broken caption. But [[Main Page|this]] is just an ordinary link.
-!! result
+!! html
 <p>[[Image:Foobar.jpg|thumb|This is a broken caption. But <a href="/wiki/Main_Page" title="Main Page">this</a> is just an ordinary link.
 </p>
 !! end
 
 !! test
 Image caption containing another image
-!! input
+!! wikitext
 [[Image:Foobar.jpg|thumb|This is a caption with another [[Image:icon.png|image]] inside it!]]
-!! result
+!! html
 <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 caption with another <a href="/index.php?title=Special:Upload&amp;wpDestFile=Icon.png" class="new" title="File:Icon.png">image</a> inside it!</div></div></div>
 
 !! end
 
 !! test
 Image caption containing a newline
-!! input
+!! wikitext
 [[Image:Foobar.jpg|This
 *is some text]]
-!! result
+!! html
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="This *is some text"><img alt="This *is some text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !!end
@@ -10353,60 +10495,122 @@ Image caption containing a newline
 !!test
 Parsoid: Image caption containing leading space
 (The leading space should not trigger nowiki escaping in wt2wt mode)
-!! input
+!! wikitext
 [[Image:Foobar.jpg|thumb| bar]]
-!! result
+!! html
 <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>bar</div></div></div>
 
 !!end
 
+!! test
+Images: caption containing a table
+!! wikitext
+[[Image:Foobar.jpg|thumb|200px|This is an example image thumbnail caption with a table
+{|
+! Foo !! Bar
+|-
+| Foo1 || Bar1
+|}
+and some more text.]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:202px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-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 an example image thumbnail caption with a table <table> <tr> <th> Foo </th> <th> Bar </th></tr> <tr> <td> Foo1 </td> <td> Bar1 </td></tr></table> and some more text.</div></div></div>
+
+!! html/parsoid
+<figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="23" width="200"/></a><figcaption>This is an example image thumbnail caption with a table
+<table>
+<tbody>
+<tr><th>Foo </th><th>Bar</th></tr>
+<tr>
+<td>Foo1 </td>
+<td>Bar1</td></tr></tbody></table>and some more text.</figcaption></figure>
+!! end
+
 !! test
 Bug 3090: External links other than http: in image captions
-!! input
-[[Image:Foobar.jpg|thumb|200px|This caption has [irc://example.net irc] and [https://example.com Secure] ext links in it.]]
-!! result
+!! wikitext
+[[File:Foobar.jpg|thumb|200x200px|This caption has [irc://example.net irc] and [https://example.com Secure] ext links in it.]]
+!! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:202px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-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 caption has <a rel="nofollow" class="external text" href="irc://example.net">irc</a> and <a rel="nofollow" class="external text" href="https://example.com">Secure</a> ext links in it.</div></div></div>
 
+!! html/parsoid
+<figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="23" width="200"/></a><figcaption>This caption has <a rel="mw:ExtLink" href="irc://example.net">irc</a> and <a rel="mw:ExtLink" href="https://example.com">Secure</a> ext links in it.</figcaption></figure>
 !! end
 
 !! test
 Custom class
-!! input
+!! options
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
 [[Image:foobar.jpg|a|class=b]]
-!! result
+!! html/php
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="a"><img alt="a" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="b" /></a>
 </p>
+!! html/parsoid
+<p><span class="mw-default-size b" typeof="mw:Image" data-mw='{"caption":"a"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
 Localized image handling (1).
 !! options
+parsoid=wt2html,wt2wt,html2html
 language=es
-!! input
+!! wikitext
 [[Archivo:Foobar.jpg|izquierda|enlace=foo|caption]]
-!! result
+!! html/php
 <div class="floatleft"><a href="/wiki/Foo" title="caption"><img alt="caption" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
+!! html/parsoid
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image"><a href="./Foo"><img resource="./Archivo:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
 Localized image handling (2).
 !! options
+thumbsize=220
+parsoid=wt2html,wt2wt,html2html
 language=es
-!! input
+!! wikitext
 [[Archivo:Foobar.jpg|miniatura|izquierda|enlace=foo|caption]]
-!! result
-<div class="thumb tleft"><div class="thumbinner" style="width:182px;"><a href="/wiki/Foo" title="Foo"><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/Archivo:Foobar.jpg" class="internal" title="Aumentar"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>caption</div></div></div>
+!! html/php
+<div class="thumb tleft"><div class="thumbinner" style="width:222px;"><a href="/wiki/Foo" title="Foo"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/Archivo:Foobar.jpg" class="internal" title="Aumentar"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>caption</div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./Foo"><img resource="./Archivo:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
 "border", "frameless" and "class" attributes on an image.
-!! input
+!! options
+thumbsize=220
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
 [[File:Foobar.jpg|frameless|border|class=extra|caption]]
-!! result
-<p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="extra thumbborder" 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>
+!! html/php
+<p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="extra thumbborder" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>
 </p>
+!! html/parsoid
+<p><span class="mw-default-size mw-image-border extra" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a></span></p>
+!! end
+
+# Note that 'right' is the default alignment, despite the misspelled 'righ' below
+!! test
+Invalid image attributes (bug 62500)
+!! options
+thumbsize=220
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[File:Foobar.jpg|thumb|float|left|caption]]
+
+[[File:Foobar.jpg|thumb|righ|caption]]
+
+[[File:Foobar.jpg|bogus1|thumb|bogus2|left|bogus3|caption]]
+!! html/php
+<div class="thumb tleft"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-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>caption</div></div></div>
+<div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-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>caption</div></div></div>
+<div class="thumb tleft"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-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>caption</div></div></div>
+
+!! html/parsoid
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! article
@@ -10417,9 +10621,9 @@ File:Barfoo.jpg
 
 !! test
 Redirected image
-!! input
+!! wikitext
 [[Image:Barfoo.jpg]]
-!! result
+!! html
 <p><a href="/wiki/File:Barfoo.jpg" title="File:Barfoo.jpg">File:Barfoo.jpg</a>
 </p>
 !! end
@@ -10428,15 +10632,15 @@ Redirected image
 Missing image with uploads disabled
 !! options
 wgEnableUploads=0
-!! input
+!! wikitext
 [[Image:Foobaz.jpg]]
-!! result
+!! html
 <p><a href="/wiki/File:Foobaz.jpg" title="File:Foobaz.jpg">File:Foobaz.jpg</a>
 </p>
 !! end
 
 # Parsoid-specific testing for images
-# http://www.mediawiki.org/wiki/Parsoid/MediaWiki_DOM_spec#Images
+# https://www.mediawiki.org/wiki/Parsoid/MediaWiki_DOM_spec#Images
 # Currently imperfect due to a flaw in the Parsoid testrunner
 # Work in progress
 # THESE TESTS SHOULD BE MOVED UP and merged with the php-specific
@@ -10444,13 +10648,10 @@ wgEnableUploads=0
 
 !! test
 Parsoid-specific image handling - simple image with size and middle alignment
-!! options
-parsoid
-!! input
-[[Image:Foobar.jpg|50px|middle]]
-!! result
-<p>
-<span class="mw-valign-middle" typeof="mw:Image">
+!! wikitext
+[[File:Foobar.jpg|middle|50px]]
+!! html/parsoid
+<p><span class="mw-valign-middle" typeof="mw:Image">
 <a href="File:Foobar.jpg">
 <img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50">
 </a>
@@ -10459,30 +10660,39 @@ parsoid
 !! end
 
 !! test
-Parsoid-specific image handling - simple image with both sizes, a baseline alignment, and a caption
+Parsoid-specific image handling - simple image with size, middle alignment,
+non-standard namespace alias
 !! options
-parsoid
-!! input
-[[Image:Foobar.jpg|500x10px|baseline|caption]]
-!! result
-<p>
-<span class="mw-valign-baseline" typeof="mw:Image" data-mw="{&quot;caption&quot;:&quot;caption&quot;}">
+parsoid=wt2wt,wt2html,html2html
+!! wikitext
+[[Image:Foobar.jpg|middle|50px]]
+!! html/parsoid
+<p><span class="mw-valign-middle" typeof="mw:Image">
 <a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/89px-Foobar.jpg" height="10" width="89">
+<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50">
 </a>
 </span>
 </p>
 !! end
 
 !! test
-Parsoid-specific image handling - simple image with border and size spec
+Parsoid-specific image handling - simple image with size and middle alignment
+(existing content)
+!! wikitext
+[[File:Foobar.jpg|50px|middle]]
+!! html/parsoid
+<p><span class="mw-valign-middle" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"50px"},{"ck":"middle","ak":"middle"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+!! end
+
+!! test
+Parsoid-specific image handling - simple image with size and middle alignment
+and non-standard namespace name
 !! options
-parsoid
-!! input
-[[Image:Foobar.jpg|50px|border|caption]]
-!! result
-<p>
-<span class="mw-image-border" typeof="mw:Image" data-mw="{&quot;caption&quot;:&quot;caption&quot;}">
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+[[Image:Foobar.jpg|50px|middle]]
+!! html/parsoid
+<p><span class="mw-valign-middle" typeof="mw:Image">
 <a href="File:Foobar.jpg">
 <img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50">
 </a>
@@ -10490,28 +10700,49 @@ parsoid
 </p>
 !! end
 
+!! test
+Parsoid-specific image handling - simple image with both sizes, a baseline alignment, and a caption
+!! wikitext
+[[File:Foobar.jpg|500x10px|baseline|caption]]
+!! html/parsoid
+<p><span class="mw-valign-baseline" typeof="mw:Image" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"width","ak":"500x10px"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption"}],"size":"500x10"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/89px-Foobar.jpg" height="10" width="89" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"10","width":"89"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+!! end
+
+!! test
+Parsoid-specific image handling - simple image with border and size spec
+!! wikitext
+[[File:Foobar.jpg|50px|border|caption]]
+!! html/parsoid
+<p><span class="mw-image-border" typeof="mw:Image" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"width","ak":"50px"},{"ck":"border","ak":"border"},{"ck":"caption","ak":"caption"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+!! end
+
 !! test
 Parsoid-specific image handling - thumbnail with halign, valign, and caption
-!! options
-parsoid
-!! input
-[[Image:Foobar.jpg|thumb|left|baseline|caption content]]
-!! result
+!! wikitext
+[[File:Foobar.jpg|left|baseline|thumb|caption content]]
+!! html/parsoid
 <figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb">
 <a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="21" width="180" />
+<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="25" width="220" />
 </a>
 <figcaption>caption content</figcaption>
 </figure>
 !! end
 
+!! test
+Parsoid-specific image handling - thumbnail with halign, valign, and caption
+(existing content)
+!! wikitext
+[[File:Foobar.jpg|thumb|left|baseline|caption content]]
+!! html/parsoid
+<figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"left","ak":"left"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption content"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption content</figcaption></figure>
+!! end
+
 !! test
 Parsoid-specific image handling - thumbnail with specific size, halign, valign, and caption
-!! options
-parsoid
-!! input
-[[Image:Foobar.jpg|thumb|50x50px|right|middle|caption]]
-!! result
+!! wikitext
+[[Image:Foobar.jpg|right|middle|thumb|50x50px|caption]]
+!! html/parsoid
 <figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb">
 <a href="File:Foobar.jpg">
 <img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" />
@@ -10520,13 +10751,20 @@ parsoid
 </figure>
 !! end
 
+!! test
+Parsoid-specific image handling - thumbnail with specific size, halign,
+valign, and caption (existing content)
+!! wikitext
+[[File:Foobar.jpg|thumb|50x50px|right|middle|caption]]
+!! html/parsoid
+<figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"50x50px"},{"ck":"right","ak":"right"},{"ck":"middle","ak":"middle"},{"ck":"caption","ak":"caption"}],"size":"50x50"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption</figcaption></figure>
+!! end
+
 !! test
 Parsoid-specific image handling - framed image with specific size and caption
-!! options
-parsoid
-!! input
-[[Image:Foobar.jpg|500x50px|frame|caption]]
-!! result
+!! wikitext
+[[Image:Foobar.jpg|frame|500x50px|caption]]
+!! html/parsoid
 <figure typeof="mw:Image/Frame">
 <a href="File:Foobar.jpg">
 <img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/442px-Foobar.jpg" height="50" width="442" />
@@ -10535,13 +10773,20 @@ parsoid
 </figure>
 !! end
 
+!! test
+Parsoid-specific image handling - framed image with specific size and caption
+(existing content)
+!! wikitext
+[[File:Foobar.jpg|442x50px|frame|caption]]
+!! html/parsoid
+<figure typeof="mw:Image/Frame" data-parsoid='{"optList":[{"ck":"width","ak":"442x50px"},{"ck":"framed","ak":"frame"},{"ck":"caption","ak":"caption"}],"size":"442x50"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/442px-Foobar.jpg" height="50" width="442" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"50","width":"442"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption</figcaption></figure>
+!! end
+
 !! test
 Parsoid-specific image handling - framed image with specific size, halign, valign, and caption
-!! options
-parsoid
-!! input
-[[Image:Foobar.jpg|500x50px|frame|left|baseline|caption]]
-!! result
+!! wikitext
+[[Image:Foobar.jpg|left|baseline|frame|500x50px|caption]]
+!! html/parsoid
 <figure class="mw-halign-left mw-valign-baseline" typeof="mw:Image/Frame">
 <a href="File:Foobar.jpg">
 <img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/442px-Foobar.jpg" height="50" width="442" />
@@ -10550,44 +10795,39 @@ parsoid
 </figure>
 !! end
 
+!! test
+Parsoid-specific image handling - framed image with specific size, halign,
+valign, and caption (existing content)
+!! wikitext
+[[File:Foobar.jpg|442x50px|frame|left|baseline|caption]]
+!! html/parsoid
+<figure class="mw-halign-left mw-valign-baseline" typeof="mw:Image/Frame" data-parsoid='{"optList":[{"ck":"width","ak":"442x50px"},{"ck":"framed","ak":"frame"},{"ck":"left","ak":"left"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption"}],"size":"442x50"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/442px-Foobar.jpg" height="50" width="442" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"50","width":"442"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption</figcaption></figure>
+!! end
+
 !! test
 Parsoid-specific image handling - frameless image with specific size, border, and caption
-!! options
-parsoid
-!! input
-[[Image:Foobar.jpg|frameless|500x50px|border|caption]]
-!! result
-<p>
-<span class="mw-image-border" typeof="mw:Image/Frameless" data-mw="{&quot;caption&quot;:&quot;caption&quot;}">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/442px-Foobar.jpg" height="50" width="442" />
-</a>
-</p>
+!! wikitext
+[[File:Foobar.jpg|frameless|442x50px|border|caption]]
+!! html/parsoid
+<p><span class="mw-image-border" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"frameless","ak":"frameless"},{"ck":"width","ak":"442x50px"},{"ck":"border","ak":"border"},{"ck":"caption","ak":"caption"}],"size":"442x50"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/442px-Foobar.jpg" height="50" width="442" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"50","width":"442"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
 !! end
 
-#!! test
-#Parsoid-specific image handling - simple image with a formatted caption
-#!! options
-#parsoid
-#!! input
-#[[Image:Foobar.jpg|<table><tr><td>a</td><td>b</td></tr><tr><td>c</td></tr></table>]]
-#!! result
-#<p>
-#<span typeof="mw:Image">
-#<a class="mw-default-size" href="Image:Foobar.jpg">
-#<img alt="Foobar.jpg" class="mw-default-size" src="http://example.com/images/3/3a/Foobar.jpg" height="220" width="1941">
-#</a>
-#<span>abc</span>
-#</span>
-#</p>
+!! test
+Parsoid-specific image handling - simple image with a formatted caption
+!! wikitext
+[[File:Foobar.jpg|<table><tr><td>a</td><td>b</td></tr><tr><td>c</td></tr></table>]]
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&lt;table>&lt;tr>&lt;td>a&lt;/td>&lt;td>b&lt;/td>&lt;/tr>&lt;tr>&lt;td>c&lt;/td>&lt;/tr>&lt;/table>"}'>
+<a href="File:Foobar.jpg">
+<img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941">
+</a></span></p>
+!! end
 
 !! test
 Parsoid-specific image handling - caption with a template in it
-!! options
-parsoid
-!! input
-[[File:Foobar.jpg|thumb|200x200px|This caption has a {{echo|transclusion}} in it.]]
-!! result
+!! wikitext
+[[File:Foobar.jpg|thumb|200x23px|This caption has a {{echo|transclusion}} in it.]]
+!! html/parsoid
 <figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" height="23" width="200"></a><figcaption>This caption has a <span about="#mwt1" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;transclusion&quot;}},&quot;i&quot;:0}}]}">transclusion</span> in it.</figcaption></figure>
 !! end
 
@@ -10595,16 +10835,44 @@ parsoid
 Parsoid-specific image handling - caption with unbalanced tags in it
 !! options
 parsoid=wt2html,wt2wt,html2html
-!! input
+!! wikitext
 foo
 [[File:Foobar.jpg|thumb|200x200px|This caption has a <center>unbalanced tag in it.]]
 bar
-!! result
+!! html/parsoid
 <p>foo</p>
 <figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="23" width="200"></a><figcaption>This caption has a <center>unbalanced tag in it.</center></figcaption></figure>
 <p>bar</p>
 !! end
 
+!! test
+Parsoid-specific image handling - empty caption
+!! wikitext
+[[File:Foobar.jpg|thumb|]]
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption></figcaption></figure>
+!! end
+
+!! test
+Parsoid-specific image handling - whitespace caption
+!! wikitext
+[[File:Foobar.jpg|thumb| ]]
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption> </figcaption></figure>
+!! end
+
+!! test
+Parsoid-specific image handling - lang option
+!! wikitext
+foo
+[[File:Foobar.svg|lang=de|caption]]
+bar
+!! html/parsoid
+<p>foo
+<span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" lang="de" height="180" width="240"/></a></span>
+bar</p>
+!! end
+
 
 ###
 ### Subpages
@@ -10619,9 +10887,9 @@ foo
 Subpage link
 !! options
 subpage title=[[Subpage test]]
-!! input
+!! wikitext
 [[/subpage]]
-!! result
+!! html
 <p><a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">/subpage</a>
 </p>
 !! end
@@ -10630,9 +10898,9 @@ subpage title=[[Subpage test]]
 Subpage noslash link
 !! options
 subpage title=[[Subpage test]]
-!!input
+!! wikitext
 [[/subpage/]]
-!! result
+!! html
 <p><a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">subpage</a>
 </p>
 !! end
@@ -10643,11 +10911,11 @@ Relative subpage noslash link
 !! options
 parsoid=wt2wt,wt2html,html2html
 subpage title=[[Subpage test/1/2/3/4]]
-!!input
+!! wikitext
 [[../../subpage/]]
 
 [[../../subpage]]
-!! result
+!! html
 <p><a rel="mw:WikiLink" href="Subpage_test/1/2/subpage/">subpage</a></p>
 <p><a rel="mw:WikiLink" href="Subpage_test/1/2/subpage">Subpage_test/1/2/subpage</a></p>
 !! end
@@ -10657,13 +10925,13 @@ subpage title=[[Subpage test/1/2/3/4]]
 Parsoid: dot-slash prefixed wikilinks
 !! options
 parsoid=wt2wt,wt2html,html2html
-!!input
+!! wikitext
 [[./foo]]
 
 [[././bar]]
 
 [[././baz/]]
-!! result
+!! html
 <p><a rel="mw:WikiLink" href="./Foo">foo</a></p>
 <p><a rel="mw:WikiLink" href="./Bar">bar</a></p>
 <p><a rel="mw:WikiLink" href="./Baz/">baz/</a></p>
@@ -10671,9 +10939,9 @@ parsoid=wt2wt,wt2html,html2html
 
 !! test
 Disabled subpages
-!! input
+!! wikitext
 [[/subpage]]
-!! result
+!! html
 <p><a href="/index.php?title=/subpage&amp;action=edit&amp;redlink=1" class="new" title="/subpage (page does not exist)">/subpage</a>
 </p>
 !! end
@@ -10682,9 +10950,9 @@ Disabled subpages
 BUG 561: {{/Subpage}}
 !! options
 subpage title=[[Page]]
-!! input
+!! wikitext
 {{/Subpage}}
-!! result
+!! html
 <p><a href="/index.php?title=Page/Subpage&amp;action=edit&amp;redlink=1" class="new" title="Page/Subpage (page does not exist)">Page/Subpage</a>
 </p>
 !! end
@@ -10700,9 +10968,9 @@ blah
 
 !! test
 Link to category
-!! input
+!! wikitext
 [[:Category:MediaWiki User's Guide]]
-!! result
+!! html
 <p><a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">Category:MediaWiki User's Guide</a>
 </p>
 !! end
@@ -10711,17 +10979,17 @@ Link to category
 Simple category
 !! options
 cat
-!! input
+!! wikitext
 [[Category:MediaWiki User's Guide]]
-!! result
+!! html
 <a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">MediaWiki User's Guide</a>
 !! end
 
 !! test
 PAGESINCATEGORY invalid title fatal (r33546 fix)
-!! input
+!! wikitext
 {{PAGESINCATEGORY:<bogus>}}
-!! result
+!! html
 <p>0
 </p>
 !! end
@@ -10730,9 +10998,9 @@ PAGESINCATEGORY invalid title fatal (r33546 fix)
 Category with different sort key
 !! options
 cat
-!! input
+!! wikitext
 [[Category:MediaWiki User's Guide|Foo]]
-!! result
+!! html
 <a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">MediaWiki User's Guide</a>
 !! end
 
@@ -10740,9 +11008,9 @@ cat
 Category with identical sort key
 !! options
 cat
-!! input
+!! wikitext
 [[Category:MediaWiki User's Guide|MediaWiki User's Guide]]
-!! result
+!! html
 <a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">MediaWiki User's Guide</a>
 !! end
 
@@ -10751,9 +11019,9 @@ Category with empty sort key
 !! options
 cat
 pst
-!! input
+!! wikitext
 [[Category:MediaWiki User's Guide|]]
-!! result
+!! html
 [[Category:MediaWiki User's Guide|MediaWiki User's Guide]]
 !! end
 
@@ -10762,9 +11030,9 @@ Category with empty sort key and parentheses
 !! options
 cat
 pst
-!! input
+!! wikitext
 [[Category:Foo (bar)|]]
-!! result
+!! html
 [[Category:Foo (bar)|Foo]]
 !! end
 
@@ -10773,9 +11041,9 @@ Category with link tail
 !! options
 cat
 pst
-!! input
+!! wikitext
 123[[Category:Foo]]456
-!! result
+!! html
 123[[Category:Foo]]456
 !! end
 
@@ -10784,9 +11052,9 @@ Category with template
 !! options
 cat
 pst
-!! input
+!! wikitext
 [[Category:{{echo|Foo}}]]
-!! result
+!! html
 [[Category:{{echo|Foo}}]]
 !! end
 
@@ -10795,9 +11063,9 @@ Category with template in sort key
 !! options
 cat
 pst
-!! input
+!! wikitext
 [[Category:Foo|{{echo|Bar}}]]
-!! result
+!! html
 [[Category:Foo|{{echo|Bar}}]]
 !! end
 
@@ -10806,15 +11074,15 @@ Category with template in sort key and title
 !! options
 cat
 pst
-!! input
+!! wikitext
 [[Category:{{echo|Foo}}|{{echo|Bar}}]]
-!! result
+!! html
 [[Category:{{echo|Foo}}|{{echo|Bar}}]]
 !! end
 
 !! test
 Category / paragraph interactions
-!! input
+!! wikitext
 Foo [[Category:Baz]] Bar
 
 Foo [[Category:Baz]]
@@ -10840,7 +11108,7 @@ Bar
 [[Category:Baz]]
  {{echo|[[Category:Baz]]}}
 [[Category:Baz]]
-!! result
+!! html
 <p>Foo Bar
 </p><p>Foo
 Bar
@@ -10856,11 +11124,11 @@ Bar
 Parsoid: Serialize link to category page with colon escape
 !! options
 parsoid
-!! input
+!! wikitext
 
 [[:Category:Foo]]
 [[:Category:Foo|Bar]]
-!! result
+!! html
 <p>
 <a rel="mw:WikiLink" href="Category:Foo">Category:Foo</a>
 <a rel="mw:WikiLink" href="Category:Foo">Bar</a>
@@ -10872,9 +11140,9 @@ Parsoid: Link prefix/suffixes aren't applied to category links
 !! options
 parsoid=wt2html,wt2wt,html2html
 language=is
-!! input
+!! wikitext
 x[[Category:Foo]]y
-!! result
+!! html
 <p>x<link rel="mw:PageProp/Category" href="Category:Foo">y</p>
 !! end
 
@@ -10882,11 +11150,11 @@ x[[Category:Foo]]y
 Parsoid: Serialize link to file page with colon escape
 !! options
 parsoid
-!! input
+!! wikitext
 
 [[:File:Foo.png]]
 [[:File:Foo.png|Bar]]
-!! result
+!! html
 <p>
 <a rel="mw:WikiLink" href="File:Foo.png">File:Foo.png</a>
 <a rel="mw:WikiLink" href="File:Foo.png">Bar</a>
@@ -10897,10 +11165,10 @@ parsoid
 Parsoid: Serialize a genuine category link without colon escape
 !! options
 parsoid
-!! input
+!! wikitext
 [[Category:Foo]]
 [[Category:Foo|Bar]]
-!! result
+!! html
 <link rel="mw:PageProp/Category" href="Category:Foo">
 <link rel="mw:PageProp/Category" href="Category:Foo#Bar">
 !! end
@@ -10909,9 +11177,9 @@ parsoid
 Parsoid: Defaultsort
 !! options
 parsoid
-!! input
+!! wikitext
 {{DEFAULTSORT:Foo}}
-!! result
+!! html
 <meta property="mw:PageProp/categorydefaultsort" content="Foo"/>
 !! end
 
@@ -10922,11 +11190,11 @@ parsoid
 Inter-language links
 !! options
 ill
-!! input
+!! wikitext
 [[es:Alimento]]
 [[fr:Nourriture]]
 [[zh:&#39135;&#21697;]]
-!! result
+!! html
 es:Alimento fr:Nourriture zh:食品
 !! end
 
@@ -10934,12 +11202,12 @@ es:Alimento fr:Nourriture zh:食品
 Duplicate interlanguage links (bug 24502)
 !! options
 ill
-!! input
+!! wikitext
 [[es:1]]
 [[es:2]]
 [[fr:1]]
 [[fr:2]]
-!! result
+!! html
 es:1 fr:1
 !! end
 
@@ -10948,7 +11216,7 @@ es:1 fr:1
 ###
 !! test
 Basic section headings
-!! input
+!! wikitext
 == Headline 1 ==
 Some text
 
@@ -10956,7 +11224,7 @@ Some text
 More
 ===Smaller headline===
 Blah blah
-!! result
+!! html
 <h2><span class="mw-headline" id="Headline_1">Headline 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <p>Some text
 </p>
@@ -10970,7 +11238,7 @@ Blah blah
 
 !! test
 Section headings with TOC
-!! input
+!! wikitext
 == Headline 1 ==
 === Subheadline 1 ===
 ===== Skipping a level =====
@@ -10979,7 +11247,7 @@ Section headings with TOC
 == Headline 2 ==
 Some text
 ===Another headline===
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Headline_1"><span class="tocnumber">1</span> <span class="toctext">Headline 1</span></a>
@@ -11017,7 +11285,7 @@ Some text
 # perl -e 'print "="x$_," Level $_ heading","="x$_,"\n" for 1..10'
 !! test
 Handling of sections up to level 6 and beyond
-!! input
+!! wikitext
 = Level 1 Heading=
 == Level 2 Heading==
 === Level 3 Heading===
@@ -11028,7 +11296,7 @@ Handling of sections up to level 6 and beyond
 ======== Level 8 Heading========
 ========= Level 9 Heading=========
 ========== Level 10 Heading==========
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Level_1_Heading"><span class="tocnumber">1</span> <span class="toctext">Level 1 Heading</span></a>
@@ -11074,14 +11342,14 @@ Handling of sections up to level 6 and beyond
 
 !! test
 TOC regression (bug 9764)
-!! input
+!! wikitext
 == title 1 ==
 === title 1.1 ===
 ==== title 1.1.1 ====
 === title 1.2 ===
 == title 2 ==
 === title 2.1 ===
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
@@ -11115,14 +11383,14 @@ TOC regression (bug 9764)
 TOC with wgMaxTocLevel=3 (bug 6204)
 !! options
 wgMaxTocLevel=3
-!! input
+!! wikitext
 == title 1 ==
 === title 1.1 ===
 ==== title 1.1.1 ====
 === title 1.2 ===
 == title 2 ==
 === title 2.1 ===
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
@@ -11152,13 +11420,13 @@ wgMaxTocLevel=3
 TOC with wgMaxTocLevel=3 and two level four headings (bug 6204)
 !! options
 wgMaxTocLevel=3
-!! input
+!! wikitext
 ==Section 1==
 ===Section 1.1===
 ====Section 1.1.1====
 ====Section 1.1.1.1====
 ==Section 2==
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Section_1"><span class="tocnumber">1</span> <span class="toctext">Section 1</span></a>
@@ -11181,10 +11449,10 @@ wgMaxTocLevel=3
 
 !! test
 Resolving duplicate section names
-!! input
+!! wikitext
 == Foo bar ==
 == Foo bar ==
-!! result
+!! html
 <h2><span class="mw-headline" id="Foo_bar">Foo bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span class="mw-headline" id="Foo_bar_2">Foo bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 
@@ -11192,10 +11460,10 @@ Resolving duplicate section names
 
 !! test
 Resolving duplicate section names with differing case (bug 10721)
-!! input
+!! wikitext
 == Foo bar ==
 == Foo Bar ==
-!! result
+!! html
 <h2><span class="mw-headline" id="Foo_bar">Foo bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span class="mw-headline" id="Foo_Bar_2">Foo Bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 
@@ -11210,12 +11478,12 @@ Template:sections
 
 !! test
 Template with sections, __NOTOC__
-!! input
+!! wikitext
 __NOTOC__
 ==Section 0==
 {{sections}}
 ==Section 4==
-!! result
+!! html
 <h2><span class="mw-headline" id="Section_0">Section 0</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section 0">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h3><span class="mw-headline" id="Section_1">Section 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Template:Sections&amp;action=edit&amp;section=T-1" title="Template:Sections">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
 <h2><span class="mw-headline" id="Section_2">Section 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Template:Sections&amp;action=edit&amp;section=T-2" title="Template:Sections">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
@@ -11225,11 +11493,11 @@ __NOTOC__
 
 !! test
 __NOEDITSECTION__ keyword
-!! input
+!! wikitext
 __NOEDITSECTION__
 ==Section 1==
 ==Section 2==
-!! result
+!! html
 <h2><span class="mw-headline" id="Section_1">Section 1</span></h2>
 <h2><span class="mw-headline" id="Section_2">Section 2</span></h2>
 
@@ -11237,21 +11505,21 @@ __NOEDITSECTION__
 
 !! test
 Link inside a section heading
-!! input
+!! wikitext
 ==Section with a [[Main Page|link]] in it==
-!! result
+!! html
 <h2><span class="mw-headline" id="Section_with_a_link_in_it">Section with a <a href="/wiki/Main_Page" title="Main Page">link</a> in it</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section with a link in it">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 
 !! end
 
 !! test
 TOC regression (bug 12077)
-!! input
+!! wikitext
 __TOC__
 == title 1 ==
 === title 1.1 ===
 == title 2 ==
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
@@ -11271,22 +11539,22 @@ __TOC__
 
 !! test
 BUG 1219 URL next to image (good)
-!! input
+!! wikitext
 http://example.com [[Image:foobar.jpg]]
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !!end
 
 !! test
 Short headings with trailing space should match behavior of Parser::doHeadings (bug 19910)
-!! input
+!! wikitext
 === 
 The line above must have a trailing space!
 === <!--
 --> <!-- -->
 But just in case it doesn't...
-!! result
+!! html
 <h1><span class="mw-headline" id=".3D">=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: =">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
 <p>The line above must have a trailing space!
 </p>
@@ -11297,7 +11565,7 @@ But just in case it doesn't...
 
 !! test
 Header with special characters (bug 25462)
-!! input
+!! wikitext
 The tooltips shall not show entities to the user (ie. be double escaped)
 
 == text > text ==
@@ -11314,7 +11582,7 @@ section 4
 
 == text " text ==
 section 5
-!! result
+!! html
 <p>The tooltips shall not show entities to the user (ie. be double escaped)
 </p>
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
@@ -11347,12 +11615,12 @@ section 5
 !! test
 Headers with excess '=' characters
 (Are similar tests necessary beyond the 1st level?)
-!! input
+!! wikitext
 =foo==
 ==foo=
 =''italic'' heading==
 ==''italic'' heading=
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#foo.3D"><span class="tocnumber">1</span> <span class="toctext">foo=</span></a></li>
@@ -11372,7 +11640,7 @@ Headers with excess '=' characters
 !! test
 HTML headers vs TOC (bug 23393)
 (__NOEDITSECTION__ for clearer output, doesn't matter here)
-!! input
+!! wikitext
 <h1>Header 1</h1>
 == Header 1.1 ==
 == Header 1.2 ==
@@ -11382,7 +11650,7 @@ HTML headers vs TOC (bug 23393)
 == Header 2.1 ==
 == Header 2.2 ==
 __NOEDITSECTION__
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1"><a href="#Header_1"><span class="tocnumber">1</span> <span class="toctext">Header 1</span></a>
@@ -11411,18 +11679,18 @@ __NOEDITSECTION__
 
 !! test
 BUG 1219 URL next to image (broken)
-!! input
+!! wikitext
 http://example.com[[Image:foobar.jpg]]
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !!end
 
 !! test
 Bug 1186 news: in the middle of text
-!! input
+!! wikitext
 http://en.wikinews.org/wiki/Wikinews:Workplace
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://en.wikinews.org/wiki/Wikinews:Workplace">http://en.wikinews.org/wiki/Wikinews:Workplace</a>
 </p>
 !!end
@@ -11430,18 +11698,18 @@ http://en.wikinews.org/wiki/Wikinews:Workplace
 
 !! test
 Namespaced link must have a title
-!! input
+!! wikitext
 [[Project:]]
-!! result
+!! html
 <p>[[Project:]]
 </p>
 !!end
 
 !! test
 Namespaced link must have a title (bad fragment version)
-!! input
+!! wikitext
 [[Project:#fragment]]
-!! result
+!! html
 <p>[[Project:#fragment]]
 </p>
 !!end
@@ -11453,45 +11721,45 @@ Namespaced link must have a title (bad fragment version)
 
 !! test
 div with no attributes
-!! input
+!! wikitext
 <div>HTML rocks</div>
-!! result
+!! html
 <div>HTML rocks</div>
 
 !! end
 
 !! test
 div with double-quoted attribute
-!! input
+!! wikitext
 <div id="rock">HTML rocks</div>
-!! result
+!! html
 <div id="rock">HTML rocks</div>
 
 !! end
 
 !! test
 div with single-quoted attribute
-!! input
+!! wikitext
 <div id='rock'>HTML rocks</div>
-!! result
+!! html
 <div id="rock">HTML rocks</div>
 
 !! end
 
 !! test
 div with unquoted attribute
-!! input
+!! wikitext
 <div id=rock>HTML rocks</div>
-!! result
+!! html
 <div id="rock">HTML rocks</div>
 
 !! end
 
 !! test
 div with illegal double attributes
-!! input
+!! wikitext
 <div id="a" id="b">HTML rocks</div>
-!! result
+!! html
 <div id="b">HTML rocks</div>
 
 !!end
@@ -11502,9 +11770,9 @@ div with illegal double attributes
 div with empty attribute value, space before equals
 !! options
 parsoid
-!! input
+!! wikitext
 <div class =>HTML rocks</div>
-!! result
+!! html
 <div class="">HTML rocks</div>
 
 !! end
@@ -11515,9 +11783,9 @@ parsoid
 div with braces in attribute value
 !! options
 parsoid
-!! input
+!! wikitext
 <div title="{}">Foo</div>
-!! result
+!! html
 <div title="{}">Foo</div>
 !! end
 
@@ -11532,29 +11800,29 @@ parsoid
 div with empty attribute value, no space before equals
 !! options
 parsoid
-!! input
+!! wikitext
 <div class=>HTML rocks</div>
-!! result
+!! html
 <div class="">HTML rocks</div>
 
 !! end
 
 !! test
 HTML multiple attributes correction
-!! input
+!! wikitext
 <p class="error" class="awesome">Awesome!</p>
-!! result
+!! html
 <p class="awesome">Awesome!</p>
 
 !!end
 
 !! test
 Table multiple attributes correction
-!! input
+!! wikitext
 {|
 !+ class="error" class="awesome"| status
 |}
-!! result
+!! html
 <table>
 <tr>
 <th class="awesome"> status
@@ -11564,63 +11832,63 @@ Table multiple attributes correction
 
 !! test
 DIV IN UPPERCASE
-!! input
+!! wikitext
 <DIV ID="x">HTML ROCKS</DIV>
-!! result
+!! html
 <div id="x">HTML ROCKS</div>
 
 !!end
 
 !! test
 Non-ASCII pseudo-tags are rendered as text
-!! input
+!! wikitext
 <khyô>
-!! result
+!! html
 <p>&lt;khyô&gt;
 </p>
 !! end
 
 !! test
 Pseudo-tag with URL 'name' renders as url link
-!! input
+!! wikitext
 <http://example.com/>
-!! result
+!! html
 <p>&lt;<a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>&gt;
 </p>
 !! end
 
 !! test
 text with amp in the middle of nowhere
-!! input
+!! wikitext
 Remember AT&T?
-!!result
+!! html
 <p>Remember AT&amp;T?
 </p>
 !! end
 
 !! test
 text with character entity: eacute
-!! input
+!! wikitext
 I always thought &eacute; was a cute letter.
-!! result
+!! html
 <p>I always thought &#233; was a cute letter.
 </p>
 !! end
 
 !! test
 text with entity-escaped character entity-like string: eacute
-!! input
+!! wikitext
 I always thought &amp;eacute; was a cute letter.
-!! result
+!! html
 <p>I always thought &amp;eacute; was a cute letter.
 </p>
 !! end
 
 !! test
 text with undefined character entity: xacute
-!! input
+!! wikitext
 I always thought &xacute; was a cute letter.
-!! result
+!! html
 <p>I always thought &amp;xacute; was a cute letter.
 </p>
 !! end
@@ -11630,11 +11898,11 @@ I always thought &xacute; was a cute letter.
 HTML5 tags
 !! options
 parsoid
-!! input
+!! wikitext
 <data value="5">five</data>
 <time datetime="2000-01-01T00:00Z">The new millenium started</time>
 <mark>This highlighted text</mark>
-!! result
+!! html
 <p><data value="5">five</data>
 <time datetime="2000-01-01T00:00Z">The new millenium started</time>
 <mark>This highlighted text</mark></p>
@@ -11642,9 +11910,9 @@ parsoid
 
 !! test
 HTML tag with leading space is parsed as text
-!! input
+!! wikitext
 < div>foo< /div>
-!! result
+!! html
 <p>&lt; div&gt;foo&lt; /div&gt;
 </p>
 !! end
@@ -11658,9 +11926,9 @@ HTML tag with leading space is parsed as text
 # the test case, instead of <big>
 !! test
 Ensure that HTML adoption agency algorithm is properly implemented.
-!! input
+!! wikitext
 <big>X<big>Y</big>Z</big>
-!! result
+!! html
 <p><big>X<big>Y</big>Z</big>
 </p>
 !! end
@@ -11668,9 +11936,9 @@ Ensure that HTML adoption agency algorithm is properly implemented.
 # This was bug 41545 in the PHP parser.
 !! test
 Nesting of <kbd>
-!! input
+!! wikitext
 <kbd>X<kbd>Y</kbd>Z</kbd>
-!! result
+!! html
 <p><kbd>X<kbd>Y</kbd>Z</kbd>
 </p>
 !! end
@@ -11680,45 +11948,45 @@ Nesting of <kbd>
 # not covered; see bug 51081 for discussion.
 !! test
 Nesting of <em>
-!! input
+!! wikitext
 <em>X<em>Y</em>Z</em>
-!! result
+!! html
 <p><em>X<em>Y</em>Z</em>
 </p>
 !! end
 
 !! test
 Nesting of <strong>
-!! input
+!! wikitext
 <strong>X<strong>Y</strong>Z</strong>
-!! result
+!! html
 <p><strong>X<strong>Y</strong>Z</strong>
 </p>
 !! end
 
 !! test
 Nesting of <q>
-!! input
+!! wikitext
 <q>X<q>Y</q>Z</q>
-!! result
+!! html
 <p><q>X<q>Y</q>Z</q>
 </p>
 !! end
 
 !! test
 Nesting of <ruby>
-!! input
+!! wikitext
 <ruby>X<ruby>Y</ruby>Z</ruby>
-!! result
+!! html
 <p><ruby>X<ruby>Y</ruby>Z</ruby>
 </p>
 !! end
 
 !! test
 Nesting of <bdo>
-!! input
+!! wikitext
 <bdo>X<bdo>Y</bdo>Z</bdo>
-!! result
+!! html
 <p><bdo>X<bdo>Y</bdo>Z</bdo>
 </p>
 !! end
@@ -11730,18 +11998,18 @@ Nesting of <bdo>
 
 !! test
 Media link
-!! input
+!! wikitext
 [[Media:Foobar.jpg]]
-!! result
+!! html
 <p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Media:Foobar.jpg</a>
 </p>
 !! end
 
 !! test
 Media link with text
-!! input
+!! wikitext
 [[Media:Foobar.jpg|A neat file to look at]]
-!! result
+!! html
 <p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">A neat file to look at</a>
 </p>
 !! end
@@ -11750,36 +12018,36 @@ Media link with text
 !! test
 Media link with nasty text
 fixme: doBlockLevels won't wrap this in a paragraph because it contains a div
-!! input
+!! wikitext
 [[Media:Foobar.jpg|Safe Link<div style=display:none>" onmouseover="alert(document.cookie)" onfoo="</div>]]
-!! result
+!! html
 <a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Safe Link&lt;div style="display:none"&gt;" onmouseover="alert(document.cookie)" onfoo="&lt;/div&gt;</a>
 
 !! end
 
 !! test
 Media link to nonexistent file (bug 1702)
-!! input
+!! wikitext
 [[Media:No such.jpg]]
-!! result
+!! html
 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=No_such.jpg" class="new" title="No such.jpg">Media:No such.jpg</a>
 </p>
 !! end
 
 !! test
 Image link to nonexistent file (bug 1850 - good)
-!! input
+!! wikitext
 [[Image:No such.jpg]]
-!! result
+!! html
 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=No_such.jpg" class="new" title="File:No such.jpg">File:No such.jpg</a>
 </p>
 !! end
 
 !! test
 :Image link to nonexistent file (bug 1850 - bad)
-!! input
+!! wikitext
 [[:Image:No such.jpg]]
-!! result
+!! html
 <p><a href="/index.php?title=File:No_such.jpg&amp;action=edit&amp;redlink=1" class="new" title="File:No such.jpg (page does not exist)">Image:No such.jpg</a>
 </p>
 !! end
@@ -11788,9 +12056,9 @@ Image link to nonexistent file (bug 1850 - good)
 
 !! test
 Character reference normalization in link text (bug 1938)
-!! input
+!! wikitext
 [[Main Page|this&that]]
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">this&amp;that</a>
 </p>
 !!end
@@ -11805,13 +12073,13 @@ The page's name is U+05d0 U+05b7, with non-canonical form U+FB2E
 
 !! test
 (bug 19451) Links should refer to the normalized form.
-!! input
+!! wikitext
 [[&#xFB2E;]]
 [[&#x5d0;&#x5b7;]]
 [[&#x5d0;ַ]]
 [[א&#x5b7;]]
 [[אַ]]
-!! result
+!! html
 <p><a href="/wiki/%D7%90%D6%B7" title="אַ">&#xfb2e;</a>
 <a href="/wiki/%D7%90%D6%B7" title="אַ">&#x5d0;&#x5b7;</a>
 <a href="/wiki/%D7%90%D6%B7" title="אַ">&#x5d0;ַ</a>
@@ -11822,81 +12090,81 @@ The page's name is U+05d0 U+05b7, with non-canonical form U+FB2E
 
 !! test
 Empty attribute crash test (bug 2067)
-!! input
+!! wikitext
 <font color="">foo</font>
-!! result
+!! html
 <p><font color="">foo</font>
 </p>
 !! end
 
 !! test
 Empty attribute crash test single-quotes (bug 2067)
-!! input
+!! wikitext
 <font color=''>foo</font>
-!! result
+!! html
 <p><font color="">foo</font>
 </p>
 !! end
 
 !! test
 Attribute test: equals, then nothing
-!! input
+!! wikitext
 <font color=>foo</font>
-!! result
+!! html
 <p><font>foo</font>
 </p>
 !! end
 
 !! test
 Attribute test: unquoted value
-!! input
+!! wikitext
 <font color=x>foo</font>
-!! result
+!! html
 <p><font color="x">foo</font>
 </p>
 !! end
 
 !! test
 Attribute test: unquoted but illegal value (hash)
-!! input
+!! wikitext
 <font color=#x>foo</font>
-!! result
+!! html
 <p><font color="#x">foo</font>
 </p>
 !! end
 
 !! test
 Attribute test: no value
-!! input
+!! wikitext
 <font color>foo</font>
-!! result
+!! html
 <p><font color="color">foo</font>
 </p>
 !! end
 
 !! test
 Bug 2095: link with three closing brackets
-!! input
+!! wikitext
 [[Main Page]]]
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>]
 </p>
 !! end
 
 !! test
 Bug 2095: link with pipe and three closing brackets
-!! input
+!! wikitext
 [[Main Page|link]]]
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">link</a>]
 </p>
 !! end
 
 !! test
 Bug 2095: link with pipe and three closing brackets, version 2
-!! input
+!! wikitext
 [[Main Page|[http://example.com/]]]
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">[http://example.com/]</a>
 </p>
 !! end
@@ -11926,90 +12194,90 @@ Template:Div style
 
 !! test
 Bug 2304: HTML attribute safety (safe template; regression bug 2309)
-!! input
+!! wikitext
 <div title="{{test}}"></div>
-!! result
+!! html
 <div title="This is a test template"></div>
 
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (dangerous template; 2309)
-!! input
+!! wikitext
 <div title="{{dangerous attribute}}"></div>
-!! result
+!! html
 <div title=""></div>
 
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (dangerous style template; 2309)
-!! input
+!! wikitext
 <div style="{{dangerous style attribute}}"></div>
-!! result
+!! html
 <div style="/* insecure input */"></div>
 
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (safe parameter; 2309)
-!! input
+!! wikitext
 {{div style|width: 200px}}
-!! result
+!! html
 <div style="float: right; width: 200px">Magic div</div>
 
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (unsafe parameter; 2309)
-!! input
+!! wikitext
 {{div style|width: expression(alert(document.cookie))}}
-!! result
+!! html
 <div style="/* insecure input */">Magic div</div>
 
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (unsafe breakout parameter; 2309)
-!! input
+!! wikitext
 {{div style|"><script>alert(document.cookie)</script>}}
-!! result
+!! html
 <div style="float: right;">&lt;script&gt;alert(document.cookie)&lt;/script&gt;"&gt;Magic div</div>
 
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (unsafe breakout parameter 2; 2309)
-!! input
+!! wikitext
 {{div style|" ><script>alert(document.cookie)</script>}}
-!! result
+!! html
 <div style="float: right;">&lt;script&gt;alert(document.cookie)&lt;/script&gt;"&gt;Magic div</div>
 
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (link)
-!! input
+!! wikitext
 <div title="[[Main Page]]"></div>
-!! result
+!! html
 <div title="&#91;&#91;Main Page]]"></div>
 
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (italics)
-!! input
+!! wikitext
 <div title="''foobar''"></div>
-!! result
+!! html
 <div title="&#39;&#39;foobar&#39;&#39;"></div>
 
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (bold)
-!! input
+!! wikitext
 <div title="'''foobar'''"></div>
-!! result
+!! html
 <div title="&#39;&#39;&#39;foobar&#39;&#39;&#39;"></div>
 
 !! end
@@ -12017,63 +12285,63 @@ Bug 2304: HTML attribute safety (bold)
 
 !! test
 Bug 2304: HTML attribute safety (ISBN)
-!! input
+!! wikitext
 <div title="ISBN 1234567890"></div>
-!! result
+!! html
 <div title="&#73;SBN 1234567890"></div>
 
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (RFC)
-!! input
+!! wikitext
 <div title="RFC 1234"></div>
-!! result
+!! html
 <div title="&#82;FC 1234"></div>
 
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (PMID)
-!! input
+!! wikitext
 <div title="PMID 1234567890"></div>
-!! result
+!! html
 <div title="&#80;MID 1234567890"></div>
 
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (web link)
-!! input
+!! wikitext
 <div title="http://example.com/"></div>
-!! result
+!! html
 <div title="http&#58;//example.com/"></div>
 
 !! end
 
 !! test
 Bug 2304: HTML attribute safety (named web link)
-!! input
+!! wikitext
 <div title="[http://example.com/ link]"></div>
-!! result
+!! html
 <div title="&#91;http&#58;//example.com/ link]"></div>
 
 !! end
 
 !! test
 Bug 3244: HTML attribute safety (extension; safe)
-!! input
+!! wikitext
 <div style="<nowiki>background:blue</nowiki>"></div>
-!! result
+!! html
 <div style="background:blue"></div>
 
 !! end
 
 !! test
 Bug 3244: HTML attribute safety (extension; unsafe)
-!! input
+!! wikitext
 <div style="<nowiki>border-left:expression(alert(document.cookie))</nowiki>"></div>
-!! result
+!! html
 <div style="/* insecure input */"></div>
 
 !! end
@@ -12082,55 +12350,55 @@ Bug 3244: HTML attribute safety (extension; unsafe)
 
 !! test
 MSIE CSS safety test: spurious slash
-!! input
+!! wikitext
 <div style="background-image:u\rl(javascript:alert('boo'))">evil</div>
-!! result
+!! html
 <div style="/* insecure input */">evil</div>
 
 !! end
 
 !! test
 MSIE CSS safety test: hex code
-!! input
+!! wikitext
 <div style="background-image:u\72l(javascript:alert('boo'))">evil</div>
-!! result
+!! html
 <div style="/* insecure input */">evil</div>
 
 !! end
 
 !! test
 MSIE CSS safety test: comment in url
-!! input
+!! wikitext
 <div style="background-image:u/**/rl(javascript:alert('boo'))">evil</div>
-!! result
+!! html
 <div style="background-image:u rl(javascript:alert(&#39;boo&#39;))">evil</div>
 
 !! end
 
 !! test
 MSIE CSS safety test: comment in expression
-!! input
+!! wikitext
 <div style="background-image:expres/**/sion(alert('boo4'))">evil4</div>
-!! result
+!! html
 <div style="background-image:expres sion(alert(&#39;boo4&#39;))">evil4</div>
 
 !! end
 
 !! test
 CSS safety test (all browsers): vertical tab (bug 55332 / CVE-2013-4567)
-!! input
+!! wikitext
 <p style="font-size: 100px; background-image:url\b(https://www.google.com/images/srpr/logo6w.png)">A</p>
-!! result
+!! html
 <p style="/* invalid control char */">A</p>
 
 !! end
 
 !! test
 MSIE 6 CSS safety test: Fullwidth (bug 55332)
-!! input
+!! wikitext
 <p style="font-size: 100px; color: expression((title='XSSed'),'red')">A</p>
 <div style="top:EXPRESSION(alert())">B</div>
-!! result
+!! html
 <p style="/* insecure input */">A</p>
 <div style="/* insecure input */">B</div>
 
@@ -12138,10 +12406,10 @@ MSIE 6 CSS safety test: Fullwidth (bug 55332)
 
 !! test
 MSIE 6 CSS safety test: IPA extensions (bug 55332)
-!! input
+!! wikitext
 <div style="background-image:uʀʟ(javascript:alert())">A</div>
 <p style="font-size: 100px; color: expʀessɪoɴ((title='XSSed'),'red')">B</p>
-!! result
+!! html
 <div style="/* insecure input */">A</div>
 <p style="/* insecure input */">B</p>
 
@@ -12149,11 +12417,11 @@ MSIE 6 CSS safety test: IPA extensions (bug 55332)
 
 !! test
 MSIE 6 CSS safety test: sup/sub script (bug 55332)
-!! input
+!! wikitext
 <div style="background-image:url⁽javascript:alert())">A</div>
 <div style="background-image:url₍javascript:alert())">B</div>
 <p style="font-size: 100px; color: expressioⁿ((title='XSSed'),'red')">C</p>
-!! result
+!! html
 <div style="/* insecure input */">A</div>
 <div style="/* insecure input */">B</div>
 <p style="/* insecure input */">C</p>
@@ -12162,18 +12430,18 @@ MSIE 6 CSS safety test: sup/sub script (bug 55332)
 
 !! test
 Opera -o-link CSS
-!! input
+!! wikitext
 <div
 title="&#100;&#97;&#116;&#97;&#58;&#116;&#101;&#120;&#116;&#47;&#104;&#116;&#109;&#108;&#44;&#60;&#105;&#109;&#103;&#32;&#115;&#114;&#99;&#61;&#49;&#32;&#111;&#110;&#101;&#114;&#114;&#111;&#114;&#61;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#62;"
 style="-o-link:attr(title);-o-link-source:current">X</div>
-!! result
+!! html
 <div title="data:text/html,&lt;img src=1 onerror=alert(1)&gt;" style="/* insecure input */">X</div>
 
 !! end
 
 !! test
 MSIE 6 CSS safety test: Repetition markers (bug 55332)
-!! input
+!! wikitext
 <p style="font-size: 100px; color: expres〱ion((title='XSSed'),'red')">A</p>
 <p style="font-size: 100px; color: expresゝion((title='XSSed'),'red')">B</p>
 <p style="font-size: 100px; color: expresーion((title='XSSed'),'red')">C</p>
@@ -12181,7 +12449,7 @@ MSIE 6 CSS safety test: Repetition markers (bug 55332)
 <p style="font-size: 100px; color: expresﹽion((title='XSSed'),'red')">E</p>
 <p style="font-size: 100px; color: expresﹼion((title='XSSed'),'red')">F</p>
 <p style="font-size: 100px; color: expresーion((title='XSSed'),'red')">G</p>
-!! result
+!! html
 <p style="/* insecure input */">A</p>
 <p style="/* insecure input */">B</p>
 <p style="/* insecure input */">C</p>
@@ -12194,11 +12462,11 @@ MSIE 6 CSS safety test: Repetition markers (bug 55332)
 
 !! test
 Table attribute legitimate extension
-!! input
+!! wikitext
 {|
 !+ style="<nowiki>color:blue</nowiki>"| status
 |}
-!! result
+!! html
 <table>
 <tr>
 <th style="color:blue"> status
@@ -12208,11 +12476,11 @@ Table attribute legitimate extension
 
 !! test
 Table attribute safety
-!! input
+!! wikitext
 {|
 !+ style="<nowiki>border-width:expression(0+alert(document.cookie))</nowiki>"| status
 |}
-!! result
+!! html
 <table>
 <tr>
 <th style="/* insecure input */"> status
@@ -12222,18 +12490,18 @@ Table attribute safety
 
 !! test
 CSS line continuation 1
-!! input
+!! wikitext
 <div style="background-image: u\&#10;rl(test.jpg);"></div>
-!! result
+!! html
 <div style="/* insecure input */"></div>
 
 !! end
 
 !! test
 CSS line continuation 2
-!! input
+!! wikitext
 <div style="background-image: u\&#13;rl(test.jpg); "></div>
-!! result
+!! html
 <div style="/* insecure input */"></div>
 
 !! end
@@ -12246,9 +12514,9 @@ Template:Identity
 
 !! test
 Expansion of multi-line templates in attribute values (bug 6255)
-!! input
+!! wikitext
 <div style="background: {{identity|#00FF00}}">-</div>
-!! result
+!! html
 <div style="background: #00FF00">-</div>
 
 !! end
@@ -12256,19 +12524,19 @@ Expansion of multi-line templates in attribute values (bug 6255)
 
 !! test
 Expansion of multi-line templates in attribute values (bug 6255 sanity check)
-!! input
+!! wikitext
 <div style="background: 
 #00FF00">-</div>
-!! result
+!! html
 <div style="background: #00FF00">-</div>
 
 !! end
 
 !! test
 Expansion of multi-line templates in attribute values (bug 6255 sanity check 2)
-!! input
+!! wikitext
 <div style="background: &#10;#00FF00">-</div>
-!! result
+!! html
 <div style="background: &#10;#00FF00">-</div>
 
 !! end
@@ -12278,9 +12546,9 @@ Expansion of multi-line templates in attribute values (bug 6255 sanity check 2)
 ###
 !! test
 Parser hook: empty input
-!! input
+!! wikitext
 <tag></tag>
-!! result
+!! html
 <pre>
 ''
 array (
@@ -12291,9 +12559,9 @@ array (
 
 !! test
 Parser hook: empty input using terminated empty elements
-!! input
+!! wikitext
 <tag/>
-!! result
+!! html
 <pre>
 NULL
 array (
@@ -12304,9 +12572,9 @@ array (
 
 !! test
 Parser hook: empty input using terminated empty elements (space before)
-!! input
+!! wikitext
 <tag />
-!! result
+!! html
 <pre>
 NULL
 array (
@@ -12317,9 +12585,9 @@ array (
 
 !! test
 Parser hook: basic input
-!! input
+!! wikitext
 <tag>input</tag>
-!! result
+!! html
 <pre>
 'input'
 array (
@@ -12331,9 +12599,9 @@ array (
 
 !! test
 Parser hook: case insensitive
-!! input
+!! wikitext
 <TAG>input</TAG>
-!! result
+!! html
 <pre>
 'input'
 array (
@@ -12345,9 +12613,9 @@ array (
 
 !! test
 Parser hook: case insensitive, redux
-!! input
+!! wikitext
 <TaG>input</TAg>
-!! result
+!! html
 <pre>
 'input'
 array (
@@ -12360,9 +12628,9 @@ array (
 Parser hook: nested tags
 !! options
 noxml
-!! input
+!! wikitext
 <tag><tag></tag></tag>
-!! result
+!! html
 <pre>
 '<tag>'
 array (
@@ -12373,9 +12641,9 @@ array (
 
 !! test
 Parser hook: basic arguments
-!! input
+!! wikitext
 <tag width=200 height = "100" depth = '50' square></tag>
-!! result
+!! html
 <pre>
 ''
 array (
@@ -12390,9 +12658,9 @@ array (
 
 !! test
 Parser hook: argument containing a forward slash (bug 5344)
-!! input
+!! wikitext
 <tag filename='/tmp/bla'></tag>
-!! result
+!! html
 <pre>
 ''
 array (
@@ -12404,9 +12672,9 @@ array (
 
 !! test
 Parser hook: empty input using terminated empty elements (bug 2374)
-!! input
+!! wikitext
 <tag foo=bar/>text
-!! result
+!! html
 <pre>
 NULL
 array (
@@ -12419,11 +12687,11 @@ array (
 # </tag> should be output literally since there is no matching tag that begins it
 !! test
 Parser hook: basic arguments using terminated empty elements (bug 2374)
-!! input
+!! wikitext
 <tag width=200 height = "100" depth = '50' square/>
 other stuff
 </tag>
-!! result
+!! html
 <pre>
 NULL
 array (
@@ -12444,10 +12712,10 @@ array (
 
 !! test
 Parser hook: static parser hook not inside a comment
-!! input
+!! wikitext
 <statictag>hello, world</statictag>
 <statictag action=flush/>
-!! result
+!! html
 <p>hello, world
 </p>
 !! end
@@ -12455,10 +12723,10 @@ Parser hook: static parser hook not inside a comment
 
 !! test
 Parser hook: static parser hook inside a comment
-!! input
+!! wikitext
 <!-- <statictag>hello, world</statictag> -->
 <statictag action=flush/>
-!! result
+!! html
 <p><br />
 </p>
 !! end
@@ -12480,9 +12748,9 @@ Template:Map-one-parameter
 
 !! test
 Nested template calls
-!! input
+!! wikitext
 {{Map-one-parameter|One-parameter|param}}
-!! result
+!! html
 <p>(My parameter is: param)
 </p>
 !! end
@@ -12493,45 +12761,45 @@ Nested template calls
 ###
 !! test
 Sanitizer: Closing of open tags
-!! input
+!! wikitext
 <s></s><table></table>
-!! result
+!! html
 <s></s><table></table>
 
 !! end
 
 !! test
 Sanitizer: Closing of open but not closed tags
-!! input
+!! wikitext
 <s>foo
-!! result
+!! html
 <p><s>foo</s>
 </p>
 !! end
 
 !! test
 Sanitizer: Closing of closed but not open tags
-!! input
+!! wikitext
 </s>
-!! result
+!! html
 <p>&lt;/s&gt;
 </p>
 !! end
 
 !! test
 Sanitizer: Closing of closed but not open table tags
-!! input
+!! wikitext
 Table not started</td></tr></table>
-!! result
+!! html
 <p>Table not started&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
 </p>
 !! end
 
 !! test
 Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id=""
-!! input
+!! wikitext
 <span id="æ: v">byte</span>[[#æ: v|backlink]]
-!! result
+!! html
 <p><span id=".C3.A6:_v">byte</span><a href="#.C3.A6:_v">backlink</a>
 </p>
 !! end
@@ -12540,9 +12808,9 @@ Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id=
 Sanitizer: Validating the contents of the id attribute (bug 4515)
 !! options
 disabled
-!! input
+!! wikitext
 <br id=9 />
-!! result
+!! html
 Something, but definitely not <br id="9" />...
 !! end
 
@@ -12550,15 +12818,15 @@ Something, but definitely not <br id="9" />...
 Sanitizer: Validating id attribute uniqueness (bug 4515, bug 6301)
 !! options
 disabled
-!! input
+!! wikitext
 <br id="foo" /><br id="foo" />
-!! result
+!! html
 Something need to be done. foo-2 ? 
 !! end
 
 !! test
 Sanitizer: Validating that <meta> and <link> work, but only for Microdata
-!! input
+!! wikitext
 <div itemscope>
        <meta itemprop="hello" content="world">
        <meta http-equiv="refresh" content="5">
@@ -12567,7 +12835,7 @@ Sanitizer: Validating that <meta> and <link> work, but only for Microdata
        <link rel="stylesheet" href="{{SERVER}}">
        <link rel="stylesheet" itemprop="hello" href="{{SERVER}}">
 </div>
-!! result
+!! html
 <div itemscope="itemscope">
 <p>    <meta itemprop="hello" content="world" />
        &lt;meta http-equiv="refresh" content="5"&gt;
@@ -12584,7 +12852,7 @@ Sanitizer: Validating that <meta> and <link> work, but only for Microdata
 Language converter: output gets cut off unexpectedly (bug 5757)
 !! options
 language=zh
-!! input
+!! wikitext
 this bit is safe: }-
 
 but if we add a conversion instance: -{zh-cn:xxx;zh-tw:yyy}-
@@ -12592,7 +12860,7 @@ but if we add a conversion instance: -{zh-cn:xxx;zh-tw:yyy}-
 then we get cut off here: }-
 
 all additional text is vanished
-!! result
+!! html
 <p>this bit is safe: }-
 </p><p>but if we add a conversion instance: xxx
 </p><p>then we get cut off here: }-
@@ -12603,10 +12871,10 @@ all additional text is vanished
 !! test
 Self closed html pairs (bug 5487)
 !! options
-!! input
+!! wikitext
 <center><font id="bug" />Centered text</center>
 <div><font id="bug2" />In div text</div>
-!! result
+!! html
 <center>&lt;font id="bug" /&gt;Centered text</center>
 <div>&lt;font id="bug2" /&gt;In div text</div>
 
@@ -12618,27 +12886,27 @@ Self closed html pairs (bug 5487)
 
 !! test
 Punctuation: nbsp before exclamation
-!! input
+!! wikitext
 C'est grave !
-!! result
+!! html
 <p>C'est grave&#160;!
 </p>
 !! end
 
 !! test
 Punctuation: CSS !important (bug 11874)
-!! input
+!! wikitext
 <div style="width:50% !important">important</div>
-!! result
+!! html
 <div style="width:50% !important">important</div>
 
 !!end
 
 !! test
 Punctuation: CSS ! important (bug 11874; with space after)
-!! input
+!! wikitext
 <div style="width:50% ! important">important</div>
-!! result
+!! html
 <div style="width:50% ! important">important</div>
 
 !!end
@@ -12646,12 +12914,12 @@ Punctuation: CSS ! important (bug 11874; with space after)
 
 !! test
 HTML bullet list, closed tags (bug 5497)
-!! input
+!! wikitext
 <ul>
 <li>One</li>
 <li>Two</li>
 </ul>
-!! result
+!! html
 <ul>
 <li>One</li>
 <li>Two</li>
@@ -12663,12 +12931,12 @@ HTML bullet list, closed tags (bug 5497)
 HTML bullet list, unclosed tags (bug 5497)
 !! options
 disabled
-!! input
+!! wikitext
 <ul>
 <li>One
 <li>Two
 </ul>
-!! result
+!! html
 <ul>
 <li>One
 </li>
@@ -12680,12 +12948,12 @@ disabled
 
 !! test
 HTML ordered list, closed tags (bug 5497)
-!! input
+!! wikitext
 <ol>
 <li>One</li>
 <li>Two</li>
 </ol>
-!! result
+!! html
 <ol>
 <li>One</li>
 <li>Two</li>
@@ -12697,12 +12965,12 @@ HTML ordered list, closed tags (bug 5497)
 HTML ordered list, unclosed tags (bug 5497)
 !! options
 disabled
-!! input
+!! wikitext
 <ol>
 <li>One
 <li>Two
 </ol>
-!! result
+!! html
 <ol>
 <li>One
 </li>
@@ -12714,7 +12982,7 @@ disabled
 
 !! test
 HTML nested bullet list, closed tags (bug 5497)
-!! input
+!! wikitext
 <ul>
 <li>One</li>
 <li>Two:
@@ -12724,7 +12992,7 @@ HTML nested bullet list, closed tags (bug 5497)
 </ul>
 </li>
 </ul>
-!! result
+!! html
 <ul>
 <li>One</li>
 <li>Two:
@@ -12741,7 +13009,7 @@ HTML nested bullet list, closed tags (bug 5497)
 HTML nested bullet list, open tags (bug 5497)
 !! options
 disabled
-!! input
+!! wikitext
 <ul>
 <li>One
 <li>Two:
@@ -12750,7 +13018,7 @@ disabled
 <li>Sub-two
 </ul>
 </ul>
-!! result
+!! html
 <ul>
 <li>One
 </li>
@@ -12768,7 +13036,7 @@ disabled
 
 !! test
 HTML nested ordered list, closed tags (bug 5497)
-!! input
+!! wikitext
 <ol>
 <li>One</li>
 <li>Two:
@@ -12778,7 +13046,7 @@ HTML nested ordered list, closed tags (bug 5497)
 </ol>
 </li>
 </ol>
-!! result
+!! html
 <ol>
 <li>One</li>
 <li>Two:
@@ -12795,7 +13063,7 @@ HTML nested ordered list, closed tags (bug 5497)
 HTML nested ordered list, open tags (bug 5497)
 !! options
 disabled
-!! input
+!! wikitext
 <ol>
 <li>One
 <li>Two:
@@ -12804,7 +13072,7 @@ disabled
 <li>Sub-two
 </ol>
 </ol>
-!! result
+!! html
 <ol>
 <li>One
 </li>
@@ -12822,10 +13090,10 @@ disabled
 
 !! test
 HTML ordered list item with parameters oddity
-!! input
+!! wikitext
 <ol><li id="fragment">One</li>
 </ol>
-!! result
+!! html
 <ol><li id="fragment">One</li>
 </ol>
 
@@ -12833,7 +13101,7 @@ HTML ordered list item with parameters oddity
 
 !!test
 bug 5918: autonumbering
-!! input
+!! wikitext
 [http://first/] [http://second] [ftp://ftp]
 
 ftp://inlineftp
@@ -12843,7 +13111,7 @@ ftp://inlineftp
 [mailto:enclosed@mail.tld]
 
 mailto:inline@mail.tld
-!! result
+!! html
 <p><a rel="nofollow" class="external autonumber" href="http://first/">[1]</a> <a rel="nofollow" class="external autonumber" href="http://second">[2]</a> <a rel="nofollow" class="external autonumber" href="ftp://ftp">[3]</a>
 </p><p><a rel="nofollow" class="external free" href="ftp://inlineftp">ftp://inlineftp</a>
 </p><p><a rel="nofollow" class="external text" href="mailto:enclosed@mail.tld">With target</a>
@@ -12860,10 +13128,10 @@ mailto:inline@mail.tld
 
 !! test
 Fuzz testing: Parser13
-!! input
+!! wikitext
 {| 
 | http://a|
-!! result
+!! html
 <table>
 <tr>
 <td>
@@ -12875,10 +13143,10 @@ Fuzz testing: Parser13
 
 !! test
 Fuzz testing: Parser14
-!! input
+!! wikitext
 == onmouseover= ==
 http://__TOC__
-!! result
+!! html
 <h2><span class="mw-headline" id="onmouseover.3D">onmouseover=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: onmouseover=">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 http://<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
@@ -12891,10 +13159,10 @@ http://<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 
 !! test
 Fuzz testing: Parser14-table
-!! input
+!! wikitext
 ==a==
 {| STYLE=__TOC__
-!! result
+!! html
 <h2><span class="mw-headline" id="a">a</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: a">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <table style="&#95;_TOC&#95;_">
 <tr><td></td></tr>
@@ -12907,10 +13175,10 @@ Fuzz testing: Parser14-table
 Fuzz testing: Parser16
 !! options
 noxml
-!! input
+!! wikitext
 {|
 !https://||||||
-!! result
+!! html
 <table>
 <tr>
 <th>https://</th>
@@ -12925,11 +13193,11 @@ noxml
 
 !! test
 Fuzz testing: Parser21
-!! input
+!! wikitext
 {|
 ! irc://{{ftp://a" onmouseover="alert('hello world');"
 |
-!! result
+!! html
 <table>
 <tr>
 <th> <a rel="nofollow" class="external free" href="irc://{{ftp://a">irc://{{ftp://a</a>" onmouseover="alert('hello world');"
@@ -12943,11 +13211,11 @@ Fuzz testing: Parser21
 
 !! test
 Fuzz testing: Parser22
-!! input
+!! wikitext
 http://===r:::https://b
 
 {|
-!!result
+!! html
 <p><a rel="nofollow" class="external free" href="http://===r:::https://b">http://===r:::https://b</a>
 </p>
 <table>
@@ -12961,7 +13229,7 @@ http://===r:::https://b
 Fuzz testing: Parser24
 !! options
 noxml
-!! input
+!! wikitext
 {|
 {{{|
 <u CLASS=
@@ -12970,7 +13238,7 @@ noxml
 
 MOVE YOUR MOUSE CURSOR OVER THIS TEXT
 |
-!! result
+!! html
 <table>
 {{{|
 <u class="&#124;">}}}} &gt;
@@ -12995,13 +13263,13 @@ MOVE YOUR MOUSE CURSOR OVER THIS TEXT
 # }}}blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
 !!test
 Fuzz testing: Parser25 (bug 6055)
-!! input
+!! wikitext
 {{{
 | 
 <LI CLASS=||
  >
 }}}blah" onmouseover="alert('hello world');" align="left"'''MOVE MOUSE CURSOR OVER HERE
-!! result
+!! html
 <p>&lt;LI CLASS=blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
 </p>
 !! end
@@ -13009,9 +13277,9 @@ Fuzz testing: Parser25 (bug 6055)
 !!test
 Fuzz testing: URL adjacent extension (with space, clean)
 !! options
-!! input
+!! wikitext
 http://example.com <nowiki>junk</nowiki>
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> junk
 </p>
 !!end
@@ -13019,9 +13287,9 @@ http://example.com <nowiki>junk</nowiki>
 !!test
 Fuzz testing: URL adjacent extension (no space, dirty; nowiki)
 !! options
-!! input
+!! wikitext
 http://example.com<nowiki>junk</nowiki>
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>junk
 </p>
 !!end
@@ -13029,27 +13297,29 @@ http://example.com<nowiki>junk</nowiki>
 !!test
 Fuzz testing: URL adjacent extension (no space, dirty; pre)
 !! options
-!! input
+!! wikitext
 http://example.com<pre>junk</pre>
-!! result
+!! html
 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a><pre>junk</pre>
 
 !!end
 
 !!test
 Fuzz testing: image with bogus manual thumbnail
-!!input
+!! wikitext
 [[Image:foobar.jpg|thumbnail= ]]
-!!result
+!! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:182px;">Error creating thumbnail:   <div class="thumbcaption"></div></div></div>
 
+!! html/parsoid
+<meta typeof="mw:Placeholder" data-parsoid='{"src":"[[Image:foobar.jpg|thumbnail= ]]","optList":[{"ck":"manualthumb","ak":"thumbnail= "}],"dsr":[0,32,null,null]}'/>
 !!end
 
 !! test
 Fuzz testing: encoded newline in generated HTML replacements (bug 6577)
-!! input
+!! wikitext
 <pre dir="&#10;"></pre>
-!! result
+!! html
 <pre dir="&#10;"></pre>
 
 !! end
@@ -13057,7 +13327,7 @@ Fuzz testing: encoded newline in generated HTML replacements (bug 6577)
 !! test
 Parsing optional HTML elements (Bug 6171)
 !! options
-!! input
+!! wikitext
 <table>
   <tr>
     <td> Some tabular data</td>
@@ -13065,7 +13335,7 @@ Parsing optional HTML elements (Bug 6171)
     <td> And yet som tabular data</td>
   </tr>
 </table>
-!! result
+!! html
 <table>
   <tr>
     <td> Some tabular data</td>
@@ -13079,7 +13349,7 @@ Parsing optional HTML elements (Bug 6171)
 !! test
 Correct handling of <td>, <tr> (Bug 6171)
 !! options
-!! input
+!! wikitext
 <table>
   <tr>
     <td> Some tabular data</td>
@@ -13087,7 +13357,7 @@ Correct handling of <td>, <tr> (Bug 6171)
     <td> And yet som tabular data</td>
   </tr>
 </table>
-!! result
+!! html
 <table>
   <tr>
     <td> Some tabular data</td>
@@ -13101,20 +13371,20 @@ Correct handling of <td>, <tr> (Bug 6171)
 
 !! test
 Parsing crashing regression (fr:JavaScript)
-!! input
+!! wikitext
 </body></x>
-!! result
+!! html
 <p>&lt;/body&gt;&lt;/x&gt;
 </p>
 !! end
 
 !! test
 Inline wiki vs wiki block nesting
-!! input
+!! wikitext
 '''Bold paragraph
 
 New wiki paragraph
-!! result
+!! html
 <p><b>Bold paragraph</b>
 </p><p>New wiki paragraph
 </p>
@@ -13124,11 +13394,11 @@ New wiki paragraph
 Inline HTML vs wiki block nesting
 !! options
 disabled
-!! input
+!! wikitext
 <b>Bold paragraph
 
 New wiki paragraph
-!! result
+!! html
 <p><b>Bold paragraph</b>
 </p><p>New wiki paragraph
 </p>
@@ -13143,9 +13413,9 @@ New wiki paragraph
 !!test
 Mixing markup for italics and bold
 !! options
-!! input
+!! wikitext
 '''bold''''''bold''bolditalics'''''
-!! result
+!! html
 <p>'<i>bold'</i><b>bold<i>bolditalics</i></b>
 </p>
 !! end
@@ -13160,66 +13430,66 @@ Article for special page transclusion test
 !! test
 Special page transclusion
 !! options
-!! input
+!! wikitext
 {{Special:Prefixindex/Xyzzyx}}
-!! result
-<table id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
+!! html
+<table class="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
 
 !! end
 
 !! test
 Special page transclusion twice (bug 5021)
 !! options
-!! input
+!! wikitext
 {{Special:Prefixindex/Xyzzyx}}
 {{Special:Prefixindex/Xyzzyx}}
-!! result
-<table id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
-<table id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
+!! html
+<table class="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
+<table class="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
 
 !! end
 
 !! test
 Transclusion of default MediaWiki message
-!! input
+!! wikitext
 {{MediaWiki:Mainpage}}
-!!result
+!! html
 <p>Main Page
 </p>
 !! end
 
 !! test
 Transclusion of nonexistent MediaWiki message
-!! input
+!! wikitext
 {{MediaWiki:Mainpagexxx}}
-!!result
+!! html
 <p><a href="/index.php?title=MediaWiki:Mainpagexxx&amp;action=edit&amp;redlink=1" class="new" title="MediaWiki:Mainpagexxx (page does not exist)">MediaWiki:Mainpagexxx</a>
 </p>
 !! end
 
 !! test
 Transclusion of MediaWiki message with underscore
-!! input
+!! wikitext
 {{MediaWiki:history_short}}
-!! result
+!! html
 <p>History
 </p>
 !! end
 
 !! test
 Transclusion of MediaWiki message with space
-!! input
+!! wikitext
 {{MediaWiki:history short}}
-!! result
+!! html
 <p>History
 </p>
 !! end
 
 !! test
 Invalid header with following text
-!! input
+!! wikitext
 = x = y
-!! result
+!! html
 <p>= x = y
 </p>
 !! end
@@ -13229,7 +13499,7 @@ Invalid header with following text
 Section extraction test (section 0)
 !! options
 section=0
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13241,7 +13511,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 start
 !! end
 
@@ -13249,7 +13519,7 @@ start
 Section extraction test (section 1)
 !! options
 section=1
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13261,7 +13531,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 ==a==
 ===aa===
 ====aaa====
@@ -13271,7 +13541,7 @@ start
 Section extraction test (section 2)
 !! options
 section=2
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13283,7 +13553,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 ===aa===
 ====aaa====
 !! end
@@ -13292,7 +13562,7 @@ start
 Section extraction test (section 3)
 !! options
 section=3
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13304,7 +13574,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 ====aaa====
 !! end
 
@@ -13312,7 +13582,7 @@ start
 Section extraction test (section 4)
 !! options
 section=4
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13324,7 +13594,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 ==b==
 ===ba===
 ===bb===
@@ -13336,7 +13606,7 @@ start
 Section extraction test (section 5)
 !! options
 section=5
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13348,7 +13618,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 ===ba===
 !! end
 
@@ -13356,7 +13626,7 @@ start
 Section extraction test (section 6)
 !! options
 section=6
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13368,7 +13638,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 ===bb===
 ====bba====
 !! end
@@ -13377,7 +13647,7 @@ start
 Section extraction test (section 7)
 !! options
 section=7
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13389,7 +13659,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 ====bba====
 !! end
 
@@ -13397,7 +13667,7 @@ start
 Section extraction test (section 8)
 !! options
 section=8
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13409,7 +13679,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 ===bc===
 !! end
 
@@ -13417,7 +13687,7 @@ start
 Section extraction test (section 9)
 !! options
 section=9
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13429,7 +13699,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 ==c==
 ===ca===
 !! end
@@ -13438,7 +13708,7 @@ start
 Section extraction test (section 10)
 !! options
 section=10
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13450,7 +13720,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 ===ca===
 !! end
 
@@ -13458,7 +13728,7 @@ start
 Section extraction test (nonexistent section 11)
 !! options
 section=11
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13470,18 +13740,18 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 !! end
 
 !! test
 Section extraction test with bogus heading (section 1)
 !! options
 section=1
-!! input
+!! wikitext
 ==a==
 ==bogus== not a legal section
 ==b==
-!! result
+!! html
 ==a==
 ==bogus== not a legal section
 !! end
@@ -13490,11 +13760,11 @@ section=1
 Section extraction test with bogus heading (section 2)
 !! options
 section=2
-!! input
+!! wikitext
 ==a==
 ==bogus== not a legal section
 ==b==
-!! result
+!! html
 ==b==
 !! end
 
@@ -13502,11 +13772,11 @@ section=2
 Section extraction test with comment after heading (section 1)
 !! options
 section=1
-!! input
+!! wikitext
 ==a==
 ==b== <!-- -->
 ==c==
-!! result
+!! html
 ==a==
 !! end
 
@@ -13514,11 +13784,11 @@ section=1
 Section extraction test with comment after heading (section 2)
 !! options
 section=2
-!! input
+!! wikitext
 ==a==
 ==b== <!-- -->
 ==c==
-!! result
+!! html
 ==b== <!-- -->
 !! end
 
@@ -13526,11 +13796,11 @@ section=2
 Section extraction test with bogus <nowiki> heading (section 1)
 !! options
 section=1
-!! input
+!! wikitext
 ==a==
 ==bogus== <nowiki>not a legal section</nowiki>
 ==b==
-!! result
+!! html
 ==a==
 ==bogus== <nowiki>not a legal section</nowiki>
 !! end
@@ -13539,11 +13809,11 @@ section=1
 Section extraction test with bogus <nowiki> heading (section 2)
 !! options
 section=2
-!! input
+!! wikitext
 ==a==
 ==bogus== <nowiki>not a legal section</nowiki>
 ==b==
-!! result
+!! html
 ==b==
 !! end
 
@@ -13554,10 +13824,10 @@ section=2
 Section extraction prefixed by comment (section 1)
 !! options
 section=1
-!! input
+!! wikitext
 <!-- -->==sec1==
 ==sec2==
-!!result
+!! html
 ==sec2==
 !!end
 
@@ -13565,10 +13835,10 @@ section=1
 Section extraction prefixed by comment (section 2)
 !! options
 section=2
-!! input
+!! wikitext
 <!-- -->==sec1==
 ==sec2==
-!!result
+!! html
 
 !!end
 
@@ -13579,14 +13849,14 @@ section=2
 Section extraction, mixed wiki and html (section 1)
 !! options
 section=1
-!! input
+!! wikitext
 <h2>unmarked</h2>
 unmarked
 ==1==
 one
 ==2==
 two
-!! result
+!! html
 ==1==
 one
 !! end
@@ -13595,14 +13865,14 @@ one
 Section extraction, mixed wiki and html (section 2)
 !! options
 section=2
-!! input
+!! wikitext
 <h2>unmarked</h2>
 unmarked
 ==1==
 one
 ==2==
 two
-!! result
+!! html
 ==2==
 two
 !! end
@@ -13613,10 +13883,10 @@ two
 Section extraction, heading surrounded by <noinclude>
 !! options
 section=1
-!! input
+!! wikitext
 <noinclude>==unmarked==</noinclude>
 ==marked==
-!! result
+!! html
 ==marked==
 !!end
 
@@ -13625,13 +13895,13 @@ section=1
 Sectiion with all-equals
 !! options
 section=2
-!! input
+!! wikitext
 === 
 The line above must have a trailing space
 === <!--
 --> <!-- -->
 But just in case it doesn't...
-!! result
+!! html
 === <!--
 --> <!-- -->
 But just in case it doesn't...
@@ -13641,7 +13911,7 @@ But just in case it doesn't...
 Section replacement test (section 0)
 !! options
 replace=0,"xxx"
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13653,7 +13923,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 xxx
 
 ==a==
@@ -13672,7 +13942,7 @@ xxx
 Section replacement test (section 1)
 !! options
 replace=1,"xxx"
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13684,7 +13954,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 start
 xxx
 
@@ -13701,7 +13971,7 @@ xxx
 Section replacement test (section 2)
 !! options
 replace=2,"xxx"
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13713,7 +13983,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 start
 ==a==
 xxx
@@ -13731,7 +14001,7 @@ xxx
 Section replacement test (section 3)
 !! options
 replace=3,"xxx"
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13743,7 +14013,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 start
 ==a==
 ===aa===
@@ -13762,7 +14032,7 @@ xxx
 Section replacement test (section 4)
 !! options
 replace=4,"xxx"
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13774,7 +14044,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 start
 ==a==
 ===aa===
@@ -13789,7 +14059,7 @@ xxx
 Section replacement test (section 5)
 !! options
 replace=5,"xxx"
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13801,7 +14071,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 start
 ==a==
 ===aa===
@@ -13820,7 +14090,7 @@ xxx
 Section replacement test (section 6)
 !! options
 replace=6,"xxx"
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13832,7 +14102,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 start
 ==a==
 ===aa===
@@ -13850,7 +14120,7 @@ xxx
 Section replacement test (section 7)
 !! options
 replace=7,"xxx"
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13862,7 +14132,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 start
 ==a==
 ===aa===
@@ -13881,7 +14151,7 @@ xxx
 Section replacement test (section 8)
 !! options
 replace=8,"xxx"
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13893,7 +14163,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 start
 ==a==
 ===aa===
@@ -13912,7 +14182,7 @@ xxx
 Section replacement test (section 9)
 !! options
 replace=9,"xxx"
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13924,7 +14194,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 start
 ==a==
 ===aa===
@@ -13941,7 +14211,7 @@ xxx
 Section replacement test (section 10)
 !! options
 replace=10,"xxx"
-!! input
+!! wikitext
 start
 ==a==
 ===aa===
@@ -13953,7 +14223,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! result
+!! html
 start
 ==a==
 ===aa===
@@ -13971,11 +14241,11 @@ xxx
 Section replacement test with initial whitespace (bug 13728)
 !! options
 replace=2,"xxx"
-!! input
+!! wikitext
  Preformatted initial line
 ==a==
 ===a===
-!! result
+!! html
  Preformatted initial line
 ==a==
 xxx
@@ -13986,10 +14256,10 @@ xxx
 Section extraction, heading followed by pre with 20 spaces (bug 6398)
 !! options
 section=1
-!! input
+!! wikitext
 ==a==
                     a
-!! result
+!! html
 ==a==
                     a
 !! end
@@ -13998,10 +14268,10 @@ section=1
 Section extraction, heading followed by pre with 19 spaces (bug 6398 sanity check)
 !! options
 section=1
-!! input
+!! wikitext
 ==a==
                    a
-!! result
+!! html
 ==a==
                    a
 !! end
@@ -14011,7 +14281,7 @@ section=1
 Section extraction, <pre> around bogus header (bug 10309)
 !! options
 noxml section=2
-!! input
+!! wikitext
 == Section One ==
 <pre>
 =======
@@ -14019,7 +14289,7 @@ noxml section=2
 
 == Section Two ==
 stuff
-!! result
+!! html
 == Section Two ==
 stuff
 !! end
@@ -14028,7 +14298,7 @@ stuff
 Section replacement, <pre> around bogus header (bug 10309)
 !! options
 noxml replace=2,"xxx"
-!! input
+!! wikitext
 == Section One ==
 <pre>
 =======
@@ -14036,7 +14306,7 @@ noxml replace=2,"xxx"
 
 == Section Two ==
 stuff
-!! result
+!! html
 == Section One ==
 <pre>
 =======
@@ -14049,9 +14319,9 @@ xxx
 
 !! test
 Handling of &#x0A; in URLs
-!! input
+!! wikitext
 **irc://&#x0A;a
-!! result
+!! html
 <ul>
 <li><ul>
 <li><a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a>
@@ -14062,30 +14332,21 @@ Handling of &#x0A; in URLs
 
 !!end
 
-!! test
-5 quotes, code coverage +1 line (php)
-!! options
-php
-!! input
-'''''
-!! result
-!! end
 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
 !! test
-5 quotes, code coverage +1 line (parsoid)
-!! options
-parsoid
-!! input
+5 quotes, code coverage +1 line
+!! wikitext
 '''''
-!! result
+!! html/php
+!! html/parsoid
 <p><b><i></i></b></p>
 !! end
 
 !! test
 Special:Search page linking.
-!! input
+!! wikitext
 {{Special:search}}
-!! result
+!! html
 <p><a href="/wiki/Special:Search" title="Special:Search">Special:Search</a>
 </p>
 !! end
@@ -14094,7 +14355,7 @@ Special:Search page linking.
 Say the magic word
 !! options
 title=[[Parser test]]
-!! input
+!! wikitext
 * {{PAGENAME}}
 * {{PAGENAMEE}}
 * {{FULLPAGENAME}}
@@ -14117,7 +14378,7 @@ title=[[Parser test]]
 * {{SUBJECTSPACE}}
 * {{SUBJECTSPACEE}}
 * {{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}
-!! result
+!! html
 <ul>
 <li> Parser test
 </li>
@@ -14170,7 +14431,7 @@ title=[[Parser test]]
 
 !! test
 Gallery
-!! input
+!! wikitext
 <gallery>
 image1.png |
 image2.gif|||||
@@ -14181,7 +14442,7 @@ image4    |300px| centre
 [[x|xx]]]]
 * image6
 </gallery>
-!! result
+!! html
 <ul class="gallery mw-gallery-traditional">
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
                        <div class="thumb" style="height: 150px;">Image1.png</div>
@@ -14225,7 +14486,7 @@ image4    |300px| centre
 
 !! test
 Gallery (with options)
-!! input
+!! wikitext
 <gallery widths='70px' heights='40px' perrow='2' caption='Foo [[Main Page]]' >
 File:Nonexistant.jpg|caption
 File:Nonexistant.jpg
@@ -14233,7 +14494,7 @@ image:foobar.jpg|some '''caption''' [[Main Page]]
 image:foobar.jpg
 image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.
 </gallery>
-!! result
+!! html
 <ul class="gallery mw-gallery-traditional" style="max-width: 226px;_width: 226px;">
        <li class='gallerycaption'>Foo <a href="/wiki/Main_Page" title="Main Page">Main Page</a></li>
                <li class="gallerybox" style="width: 105px"><div style="width: 105px">
@@ -14273,12 +14534,12 @@ image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.
 
 !! test
 Gallery with wikitext inside caption
-!! input
+!! wikitext
 <gallery>
 File:foobar.jpg|[[File:foobar.jpg|20px|desc|alt=inneralt]]|alt=galleryalt
 File:foobar.jpg|{{Test|unamedParam|alt=param}}|alt=galleryalt
 </gallery>
-!! result
+!! html
 <ul class="gallery mw-gallery-traditional">
                <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="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
@@ -14300,14 +14561,14 @@ File:foobar.jpg|{{Test|unamedParam|alt=param}}|alt=galleryalt
 
 !! test
 gallery (with showfilename option)
-!! input
+!! wikitext
 <gallery showfilename>
 File:Nonexistant.jpg|caption
 File:Nonexistant.jpg
 image:foobar.jpg|some '''caption''' [[Main Page]]
 File:Foobar.jpg
 </gallery>
-!! result
+!! html
 <ul class="gallery mw-gallery-traditional">
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
                        <div class="thumb" style="height: 150px;">Nonexistant.jpg</div>
@@ -14345,14 +14606,14 @@ some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
 
 !! test
 Gallery (with namespace-less filenames)
-!! input
+!! wikitext
 <gallery>
 File:Nonexistant.jpg
 Nonexistant.jpg
 image:foobar.jpg
 foobar.jpg
 </gallery>
-!! result
+!! html
 <ul class="gallery mw-gallery-traditional">
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
                        <div class="thumb" style="height: 150px;">Nonexistant.jpg</div>
@@ -14380,163 +14641,172 @@ foobar.jpg
 
 !! test
 HTML Hex character encoding (spells the word "JavaScript")
-!! input
+!! wikitext
 &#x4A;&#x061;&#x0076;&#x00061;&#x000053;&#x0000063;&#114;&#x0000069;&#00000112;&#x0000000074;
-!! result
+!! html
 <p>&#x4a;&#x61;&#x76;&#x61;&#x53;&#x63;&#114;&#x69;&#112;&#x74;
 </p>
 !! end
 
 !! test
 HTML Hex character encoding bogus encoding (bug 26437 regression check)
-!! input
+!! wikitext
 &#xsee;&#XSEE;
-!! result
+!! html
 <p>&amp;#xsee;&amp;#XSEE;
 </p>
 !! end
 
 !! test
 HTML Hex character encoding mixed case
-!! input
+!! wikitext
 &#xEE;&#Xee;
-!! result
+!! html
 <p>&#xee;&#xee;
 </p>
 !! end
 
 !! test
 __FORCETOC__ override
-!! input
+!! wikitext
 __NEWSECTIONLINK__
 __FORCETOC__
-!! result
+!! html
 <p><br />
 </p>
 !! end
 
 !! test
 ISBN code coverage
-!! input
+!! wikitext
 ISBN  978-0-1234-56&#x20;789
-!! result
+!! html
 <p><a href="/wiki/Special:BookSources/9780123456" class="internal mw-magiclink-isbn">ISBN 978-0-1234-56</a>&#x20;789
 </p>
 !! end
 
 !! test
 ISBN followed by 5 spaces
-!! input
+!! wikitext
 ISBN    
-!! result
+!! html
 <p>ISBN    
 </p>
 !! end
 
 !! test
 Double ISBN
-!! input
+!! wikitext
 ISBN ISBN 1234567890
-!! result
+!! html
 <p>ISBN <a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
 </p>
 !! end
 
+!! test
+ISBN with an X
+!! wikitext
+ISBN 3-462-04561-X
+!! html
+<p><a href="/wiki/Special:BookSources/346204561X" class="internal mw-magiclink-isbn">ISBN 3-462-04561-X</a>
+</p>
+!! end
+
 !! test
 Bug 22905: <abbr> followed by ISBN followed by </a>
-!! input
+!! wikitext
 <abbr>(fr)</abbr> ISBN 2753300917 [http://www.example.com example.com]
-!! result
+!! html
 <p><abbr>(fr)</abbr> <a href="/wiki/Special:BookSources/2753300917" class="internal mw-magiclink-isbn">ISBN 2753300917</a> <a rel="nofollow" class="external text" href="http://www.example.com">example.com</a>
 </p>
 !! end
 
 !! test
 Double RFC
-!! input
+!! wikitext
 RFC RFC 1234
-!! result
+!! html
 <p>RFC <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc1234">RFC 1234</a>
 </p>
 !! end
 
 !! test
 Double RFC with a wiki link
-!! input
+!! wikitext
 RFC [[RFC 1234]]
-!! result
+!! html
 <p>RFC <a href="/index.php?title=RFC_1234&amp;action=edit&amp;redlink=1" class="new" title="RFC 1234 (page does not exist)">RFC 1234</a>
 </p>
 !! end
 
 !! test
 RFC code coverage
-!! input
+!! wikitext
 RFC   983&#x20;987
-!! result
+!! html
 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc983">RFC 983</a>&#x20;987
 </p>
 !! end
 
 !! test
 Centre-aligned image
-!! input
+!! wikitext
 [[Image:foobar.jpg|centre]]
-!! result
+!! html
 <div class="center"><div class="floatnone"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div></div>
 
 !!end
 
 !! test
 None-aligned image
-!! input
+!! wikitext
 [[Image:foobar.jpg|none]]
-!! result
+!! html
 <div class="floatnone"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
 !!end
 
 !! test
 Width + Height sized image (using px) (height is ignored)
-!! input
+!! wikitext
 [[Image:foobar.jpg|640x480px]]
-!! result
+!! html
 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg" width="640" height="73" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/960px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/1280px-Foobar.jpg 2x" /></a>
 </p>
 !!end
 
 !! test
 Width-sized image (using px, no following whitespace)
-!! input
+!! wikitext
 [[Image:foobar.jpg|640px]]
-!! result
+!! html
 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg" width="640" height="73" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/960px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/1280px-Foobar.jpg 2x" /></a>
 </p>
 !!end
 
 !! test
 Width-sized image (using px, with following whitespace - test regression from r39467)
-!! input
+!! wikitext
 [[Image:foobar.jpg|640px ]]
-!! result
+!! html
 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg" width="640" height="73" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/960px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/1280px-Foobar.jpg 2x" /></a>
 </p>
 !!end
 
 !! test
 Width-sized image (using px, with preceding whitespace - test regression from r39467)
-!! input
+!! wikitext
 [[Image:foobar.jpg| 640px]]
-!! result
+!! html
 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg" width="640" height="73" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/960px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/1280px-Foobar.jpg 2x" /></a>
 </p>
 !!end
 
 !! test
 Another italics / bold test
-!! input
+!! wikitext
  ''' ''x'
-!! result
+!! html
 <pre>'<i> </i>x'
 </pre>
 !!end
@@ -14548,9 +14818,9 @@ Another italics / bold test
 dt/dd/dl test
 !! options
 disabled
-!! input
+!! wikitext
 :;;;::
-!! result
+!! html
 <dl>
 <dd><dl>
 <dt><dl>
@@ -14577,18 +14847,18 @@ disabled
 # Images with the "|" character in external URLs in comment tags; Eats half the comment, leaves unmatched "</a>" tag.
 !! test
 Images with the "|" character in the comment
-!! input
+!! wikitext
 [[image:Foobar.jpg|thumb|An [http://test/?param1=|left|&param2=|x external] URL]]
-!! result
+!! html
 <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>An <a rel="nofollow" class="external text" href="http://test/?param1=%7Cleft%7C&amp;param2=%7Cx">external</a> URL</div></div></div>
 
 !!end
 
 !! test
 [Before] HTML without raw HTML enabled ($wgRawHtml==false)
-!! input
+!! wikitext
 <html><script>alert(1);</script></html>
-!! result
+!! html
 <p>&lt;html&gt;&lt;script&gt;alert(1);&lt;/script&gt;&lt;/html&gt;
 </p>
 !! end
@@ -14597,9 +14867,9 @@ Images with the "|" character in the comment
 HTML with raw HTML ($wgRawHtml==true)
 !! options
 wgRawHtml=1
-!! input
+!! wikitext
 <html><script>alert(1);</script></html>
-!! result
+!! html
 <p><script>alert(1);</script>
 </p>
 !! end
@@ -14608,9 +14878,9 @@ wgRawHtml=1
 Parents of subpages, one level up
 !! options
 subpage title=[[Subpage test/L1/L2/L3]]
-!! input
+!! wikitext
 [[../|L2]]
-!! result
+!! html
 <p><a href="/index.php?title=Subpage_test/L1/L2&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1/L2 (page does not exist)">L2</a>
 </p>
 !! end
@@ -14620,9 +14890,9 @@ subpage title=[[Subpage test/L1/L2/L3]]
 Parents of subpages, one level up, not named
 !! options
 subpage title=[[Subpage test/L1/L2/L3]]
-!! input
+!! wikitext
 [[../]]
-!! result
+!! html
 <p><a href="/index.php?title=Subpage_test/L1/L2&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1/L2 (page does not exist)">Subpage test/L1/L2</a>
 </p>
 !! end
@@ -14633,11 +14903,11 @@ subpage title=[[Subpage test/L1/L2/L3]]
 Parents of subpages, two levels up
 !! options
 subpage title=[[Subpage test/L1/L2/L3]]
-!! input
+!! wikitext
 [[../../|L1]]2
 
 [[../../|L1]]l
-!! result
+!! html
 <p><a href="/index.php?title=Subpage_test/L1&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1 (page does not exist)">L1</a>2
 </p><p><a href="/index.php?title=Subpage_test/L1&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1 (page does not exist)">L1l</a>
 </p>
@@ -14647,9 +14917,9 @@ subpage title=[[Subpage test/L1/L2/L3]]
 Parents of subpages, two levels up, without trailing slash or name.
 !! options
 subpage title=[[Subpage test/L1/L2/L3]]
-!! input
+!! wikitext
 [[../..]]
-!! result
+!! html
 <p>[[../..]]
 </p>
 !! end
@@ -14658,9 +14928,9 @@ subpage title=[[Subpage test/L1/L2/L3]]
 Parents of subpages, two levels up, with lots of extra trailing slashes.
 !! options
 subpage title=[[Subpage test/L1/L2/L3]]
-!! input
+!! wikitext
 [[../../////]]
-!! result
+!! html
 <p><a href="/index.php?title=Subpage_test/L1////&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1//// (page does not exist)">///</a>
 </p>
 !! end
@@ -14675,9 +14945,9 @@ Sibling article
 Transclusion of a sibling page (one level up)
 !! options
 subpage title=[[Subpage test/L1/L2/L3]]
-!! input
+!! wikitext
 {{../L3Sibling}}
-!! result
+!! html
 <p>Sibling article
 </p>
 !! end
@@ -14686,9 +14956,9 @@ subpage title=[[Subpage test/L1/L2/L3]]
 Transclusion of a child page
 !! options
 subpage title=[[Subpage test/L1/L2]]
-!! input
+!! wikitext
 {{/L3Sibling}}
-!! result
+!! html
 <p>Sibling article
 </p>
 !! end
@@ -14697,20 +14967,20 @@ subpage title=[[Subpage test/L1/L2]]
 Non-transclusion because of too many up levels
 !! options
 subpage title=[[Subpage test/L1/L2/L3]]
-!! input
+!! wikitext
 {{../../../../More than parent}}
-!! result
+!! html
 <p>{{../../../../More than parent}}
 </p>
 !! end
 
 !! test
 Definition list code coverage
-!! input
+!! wikitext
 ; title   : def
 ; title : def
 ;title: def
-!! result
+!! html
 <dl>
 <dt> title  &#160;</dt>
 <dd> def
@@ -14727,27 +14997,27 @@ Definition list code coverage
 
 !! test
 Don't fall for the self-closing div
-!! input
+!! wikitext
 <div>hello world</div/>
-!! result
+!! html
 <div>hello world</div>
 
 !! end
 
 !! test
 MSGNW magic word
-!! input
+!! wikitext
 {{MSGNW:msg}}
-!! result
+!! html
 <p>&#91;&#91;:Template:Msg&#93;&#93;
 </p>
 !! end
 
 !! test
 RAW magic word
-!! input
+!! wikitext
 {{RAW:QUERTY}}
-!! result
+!! html
 <p><a href="/index.php?title=Template:QUERTY&amp;action=edit&amp;redlink=1" class="new" title="Template:QUERTY (page does not exist)">Template:QUERTY</a>
 </p>
 !! end
@@ -14755,19 +15025,19 @@ RAW magic word
 # This isn't needed for XHTML conformance, but would be handy as a fallback security measure
 !! test
 Always escape literal '>' in output, not just after '<'
-!! input
+!! wikitext
 ><>
-!! result
+!! html
 <p>&gt;&lt;&gt;
 </p>
 !! end
 
 !! test
 Template caching
-!! input
+!! wikitext
 {{Test}}
 {{Test}}
-!! result
+!! html
 <p>This is a test template
 This is a test template
 </p>
@@ -14782,9 +15052,9 @@ MediaWiki:Fake
 
 !! test
 Inclusion of !userCanEdit() content
-!! input
+!! wikitext
 {{MediaWiki:Fake}}
-!! result
+!! html
 <h2><span class="mw-headline" id="header">header</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=MediaWiki:Fake&amp;action=edit&amp;section=T-1" title="MediaWiki:Fake">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 
 !! end
@@ -14792,14 +15062,14 @@ Inclusion of !userCanEdit() content
 
 !! test
 Out-of-order TOC heading levels
-!! input
+!! wikitext
 ==2==
 ======6======
 ===3===
 =1=
 =====5=====
 ==2==
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#2"><span class="tocnumber">1</span> <span class="toctext">2</span></a>
@@ -14829,9 +15099,9 @@ Out-of-order TOC heading levels
 
 !! test
 ISBN with a dummy number
-!! input
+!! wikitext
 ISBN ---
-!! result
+!! html
 <p>ISBN ---
 </p>
 !! end
@@ -14839,9 +15109,9 @@ ISBN ---
 
 !! test
 ISBN with space-delimited number
-!! input
+!! wikitext
 ISBN 92 9017 032 8
-!! result
+!! html
 <p><a href="/wiki/Special:BookSources/9290170328" class="internal mw-magiclink-isbn">ISBN 92 9017 032 8</a>
 </p>
 !! end
@@ -14849,9 +15119,9 @@ ISBN 92 9017 032 8
 
 !! test
 ISBN with multiple spaces, no number
-!! input
+!! wikitext
 ISBN  foo
-!! result
+!! html
 <p>ISBN  foo
 </p>
 !! end
@@ -14859,13 +15129,13 @@ ISBN  foo
 
 !! test
 ISBN length
-!! input
+!! wikitext
 ISBN 123456789
 
 ISBN 1234567890
 
 ISBN 12345678901
-!! result
+!! html
 <p>ISBN 123456789
 </p><p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
 </p><p>ISBN 12345678901
@@ -14875,11 +15145,11 @@ ISBN 12345678901
 
 !! test
 ISBN with trailing year (bug 8110)
-!! input
+!! wikitext
 ISBN 1-234-56789-0 - 2006
 
 ISBN 1 234 56789 0 - 2006
-!! result
+!! html
 <p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1-234-56789-0</a> - 2006
 </p><p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1 234 56789 0</a> - 2006
 </p>
@@ -14888,47 +15158,47 @@ ISBN 1 234 56789 0 - 2006
 
 !! test
 anchorencode
-!! input
+!! wikitext
 {{anchorencode:foo bar©#%n}}
-!! result
+!! html
 <p>foo_bar.C2.A9.23.25n
 </p>
 !! end
 
 !! test
 anchorencode trims spaces
-!! input
+!! wikitext
 {{anchorencode: __pretty__please__}}
-!! result
+!! html
 <p>pretty_please
 </p>
 !! end
 
 !! test
 anchorencode deals with links
-!! input
+!! wikitext
 {{anchorencode: [[hello|world]] [[hi]]}}
-!! result
+!! html
 <p>world_hi
 </p>
 !! end
 
 !! test
 anchorencode deals with templates
-!! input
+!! wikitext
 {{anchorencode: {{Foo}} }}
-!! result
+!! html
 <p>FOO
 </p>
 !! end
 
 !! test
 anchorencode encodes like the TOC generator: (bug 18431)
-!! input
+!! wikitext
 === _ +:.3A%3A&&amp;]] ===
 {{anchorencode: _ +:.3A%3A&&amp;]] }}
 __NOEDITSECTION__
-!! result
+!! html
 <h3><span class="mw-headline" id=".2B:.3A.253A.26.26.5D.5D">_ +:.3A%3A&amp;&amp;]]</span></h3>
 <p>.2B:.3A.253A.26.26.5D.5D
 </p>
@@ -14936,7 +15206,7 @@ __NOEDITSECTION__
 
 !! test
 Bug 6200: blockquotes and paragraph formatting
-!! input
+!! wikitext
 <blockquote>
 foo
 </blockquote>
@@ -14944,7 +15214,7 @@ foo
 bar
 
  baz
-!! result
+!! html
 <blockquote>
 <p>foo
 </p>
@@ -14957,7 +15227,7 @@ bar
 
 !! test
 Bug 8293: Use of center tag ruins paragraph formatting
-!! input
+!! wikitext
 <center>
 foo
 </center>
@@ -14965,7 +15235,7 @@ foo
 bar
 
  baz
-!! result
+!! html
 <center>
 <p>foo
 </p>
@@ -14977,24 +15247,14 @@ bar
 !! end
 
 !!test
-Parsing of overlapping (improperly nested) inline html tags (PHP parser)
-!!options
-php
-!!input
+Parsing of overlapping (improperly nested) inline html tags
+!! wikitext
 <span><s>x</span></s>
-!!result
+!! html/php
 <p><span><s>x&lt;/span&gt;</s></span>
 </p>
-!!end
-
-!!test
-Parsing of overlapping (improperly nested) inline html tags (Parsoid)
-!!options
-parsoid
-!!input
-<span><s>x</span></s>
-!!result
-<p><span><s>x</s></span><s></s>
+!! html/parsoid
+<p><span><s>x</s></span>
 </p>
 !!end
 
@@ -15005,9 +15265,9 @@ parsoid
 Self-link in language variants
 !! options
 title=[[Dunav]] language=sr
-!! input
+!! wikitext
 Both [[Dunav]] and [[Дунав]] are names for this river.
-!! result
+!! html
 <p>Both <strong class="selflink">Dunav</strong> and <strong class="selflink">Дунав</strong> are names for this river.
 </p>
 !!end
@@ -15022,9 +15282,9 @@ content
 Link to another existing title shouldn't be parsed as self-link even if it's a variant of this title
 !! options
 title=[[Duna]] language=sr
-!! input
+!! wikitext
 [[Дуна]] is not a self-link while [[Duna]] and [[Dуна]] are still self-links.
-!! result
+!! html
 <p><a href="/wiki/%D0%94%D1%83%D0%BD%D0%B0" title="Дуна">Дуна</a> is not a self-link while <strong class="selflink">Duna</strong> and <strong class="selflink">Dуна</strong> are still self-links.
 </p>
 !! end
@@ -15033,9 +15293,9 @@ title=[[Duna]] language=sr
 Link to a section of a variant of this title shouldn't be parsed as self-link
 !! options
 title=[[Duna]] language=sr
-!! input
+!! wikitext
 [[Dуна]] is a self-link while [[Dunа#Foo]] and [[Dуна#Foo]] are not self-links.
-!! result
+!! html
 <p><strong class="selflink">Dуна</strong> is a self-link while <a href="/wiki/%D0%94%D1%83%D0%BD%D0%B0" title="Дуна">Dunа#Foo</a> and <a href="/wiki/%D0%94%D1%83%D0%BD%D0%B0" title="Дуна">Dуна#Foo</a> are not self-links.
 </p>
 !! end
@@ -15044,9 +15304,9 @@ title=[[Duna]] language=sr
 Link to pages in language variants
 !! options
 language=sr
-!! input
+!! wikitext
 Main Page can be written as [[Маин Паге]]
-!! result
+!! html
 <p>Main Page can be written as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a>
 </p>
 !!end
@@ -15056,9 +15316,9 @@ Main Page can be written as [[Маин Паге]]
 Multiple links to pages in language variants
 !! options
 language=sr
-!! input
+!! wikitext
 [[Main Page]] can be written as [[Маин Паге]] same as [[Маин Паге]].
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a> can be written as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a> same as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a>.
 </p>
 !!end
@@ -15068,9 +15328,9 @@ language=sr
 Simple template in language variants
 !! options
 language=sr
-!! input
+!! wikitext
 {{тест}}
-!! result
+!! html
 <p>This is a test template
 </p>
 !! end
@@ -15080,9 +15340,9 @@ language=sr
 Template with explicit namespace in language variants
 !! options
 language=sr
-!! input
+!! wikitext
 {{Template:тест}}
-!! result
+!! html
 <p>This is a test template
 </p>
 !! end
@@ -15092,9 +15352,9 @@ language=sr
 Basic test for template parameter in language variants
 !! options
 language=sr
-!! input
+!! wikitext
 {{парамтест|param=foo}}
-!! result
+!! html
 <p>This is a test template with parameter foo
 </p>
 !! end
@@ -15104,9 +15364,9 @@ language=sr
 Simple category in language variants
 !! options
 language=sr cat
-!! input
+!! wikitext
 [[Category:МедиаWики Усер'с Гуиде]]
-!! result
+!! html
 <a href="/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%98%D0%B0:MediaWiki_User%27s_Guide" title="Категорија:MediaWiki User's Guide">MediaWiki User's Guide</a>
 !! end
 
@@ -15127,9 +15387,9 @@ blah
 Don't convert blue categorylinks to another variant (bug 33210)
 !! options
 language=zh cat
-!! input
+!! wikitext
 [[A]][[Category:分类]]
-!! result
+!! html
 <a href="/wiki/Category:%E5%88%86%E7%B1%BB" title="Category:分类">分类</a>
 !! end
 
@@ -15138,9 +15398,9 @@ language=zh cat
 Stripping -{}- tags (language variants)
 !! options
 language=sr
-!! input
+!! wikitext
 Latin proverb: -{Ne nuntium necare}-
-!! result
+!! html
 <p>Latin proverb: Ne nuntium necare
 </p>
 !! end
@@ -15150,9 +15410,9 @@ Latin proverb: -{Ne nuntium necare}-
 Prevent conversion with -{}- tags (language variants)
 !! options
 language=sr variant=sr-ec
-!! input
+!! wikitext
 Latinski: -{Ne nuntium necare}-
-!! result
+!! html
 <p>Латински: Ne nuntium necare
 </p>
 !! end
@@ -15162,9 +15422,9 @@ Latinski: -{Ne nuntium necare}-
 Prevent conversion of text with -{}- tags (language variants)
 !! options
 language=sr variant=sr-ec
-!! input
+!! wikitext
 Latinski: -{Ne nuntium necare}-
-!! result
+!! html
 <p>Латински: Ne nuntium necare
 </p>
 !! end
@@ -15174,9 +15434,9 @@ Latinski: -{Ne nuntium necare}-
 Prevent conversion of links with -{}- tags (language variants)
 !! options
 language=sr variant=sr-ec
-!! input
+!! wikitext
 -{[[Main Page]]}-
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
 </p>
 !! end
@@ -15186,9 +15446,9 @@ language=sr variant=sr-ec
 -{}- tags within headlines (within html for parserConvert())
 !! options
 language=sr variant=sr-ec
-!! input
+!! wikitext
 == -{Naslov}- ==
-!! result
+!! html
 <h2><span class="mw-headline" id="-.7BNaslov.7D-">Naslov</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Уредите одељак „Naslov“">уреди</a><span class="mw-editsection-bracket">]</span></span></h2>
 
 !! end
@@ -15198,9 +15458,9 @@ language=sr variant=sr-ec
 Explicit definition of language variant alternatives
 !! options
 language=zh variant=zh-tw
-!! input
+!! wikitext
 -{zh:China;zh-tw:Taiwan}-, not China
-!! result
+!! html
 <p>Taiwan, not China
 </p>
 !! end
@@ -15210,10 +15470,10 @@ language=zh variant=zh-tw
 Conversion around HTML tags
 !! options
 language=sr variant=sr-ec
-!! input
+!! wikitext
 -{H|span=>sr-ec:script;title=>sr-ec:src;}-
 <span title="La-{sr-el:L;sr-ec:C;}-tin">ski</span>
-!! result
+!! html
 <p>
 <span title="ЛаCтин">ски</span>
 </p>
@@ -15224,12 +15484,12 @@ language=sr variant=sr-ec
 Explicit session-wise language variant mapping (A flag and - flag)
 !! options
 language=zh variant=zh-tw
-!! input
+!! wikitext
 Taiwan is not China.
 But -{A|zh:China;zh-tw:Taiwan}- is China,
 (This-{-|zh:China;zh-tw:Taiwan}- should be stripped!)
 and -{China}- is China.
-!! result
+!! html
 <p>Taiwan is not China.
 But Taiwan is Taiwan,
 (This should be stripped!)
@@ -15241,10 +15501,10 @@ and China is China.
 Explicit session-wise language variant mapping (H flag for hide)
 !! options
 language=zh variant=zh-tw
-!! input
+!! wikitext
 (This-{H|zh:China;zh-tw:Taiwan}- should be stripped!)
 Taiwan is China.
-!! result
+!! html
 <p>(This should be stripped!)
 Taiwan is Taiwan.
 </p>
@@ -15254,9 +15514,9 @@ Taiwan is Taiwan.
 Adding explicit conversion rule for title (T flag)
 !! options
 language=zh variant=zh-tw showtitle
-!! input
+!! wikitext
 Should be stripped-{T|zh:China;zh-tw:Taiwan}-!
-!! result
+!! html
 Taiwan
 <p>Should be stripped!
 </p>
@@ -15266,9 +15526,9 @@ Taiwan
 Testing that changing the language variant here in the tests actually works
 !! options
 language=zh variant=zh showtitle
-!! input
+!! wikitext
 Should be stripped-{T|zh:China;zh-tw:Taiwan}-!
-!! result
+!! html
 China
 <p>Should be stripped!
 </p>
@@ -15278,10 +15538,10 @@ China
 Recursive conversion of alt and title attrs shouldn't clear converter state
 !! options
 language=zh variant=zh-cn showtitle
-!! input
+!! wikitext
 -{H|zh-cn:Exclamation;zh-tw:exclamation;}-
 Should be stripped-{T|zh-cn:China;zh-tw:Taiwan}-<span title="exclamation">!</span>
-!! result
+!! html
 China
 <p>
 Should be stripped<span title="Exclamation">!</span>
@@ -15292,10 +15552,10 @@ Should be stripped<span title="Exclamation">!</span>
 Bug 24072: more test on conversion rule for title
 !! options
 language=zh variant=zh-tw showtitle
-!! input
+!! wikitext
 This should be stripped-{T|zh:China;zh-tw:Taiwan}-!
 This won't take interferes with the title rule-{H|zh:Beijing;zh-tw:Taipei}-.
-!! result
+!! html
 Taiwan
 <p>This should be stripped!
 This won't take interferes with the title rule.
@@ -15306,9 +15566,9 @@ This won't take interferes with the title rule.
 Partly disable title conversion if variant == main language code
 !! options
 language=zh variant=zh title=[[ZH]] showtitle
-!! input
+!! wikitext
 -{T|zh-cn:CN;zh-tw:TW}-
-!! result
+!! html
 ZH
 <p>
 </p>
@@ -15318,9 +15578,9 @@ ZH
 Partly disable title conversion if variant == main language code, more
 !! options
 language=zh variant=zh title=[[ZH]] showtitle
-!! input
+!! wikitext
 -{T|TW}-
-!! result
+!! html
 ZH
 <p>
 </p>
@@ -15330,9 +15590,9 @@ ZH
 Raw output of variant escape tags (R flag)
 !! options
 language=zh variant=zh-tw
-!! input
+!! wikitext
 Raw: -{R|zh:China;zh-tw:Taiwan}-
-!! result
+!! html
 <p>Raw: zh:China;zh-tw:Taiwan
 </p>
 !! end
@@ -15341,9 +15601,9 @@ Raw: -{R|zh:China;zh-tw:Taiwan}-
 Nested using of manual convert syntax
 !! options
 language=zh variant=zh-hk
-!! input
+!! wikitext
 Nested: -{zh-hans:Hi -{zh-cn:China;zh-sg:Singapore;}-;zh-hant:Hello -{zh-tw:Taiwan;zh-hk:H-{ong}- K-{}-ong;}-;}-!
-!! result
+!! html
 <p>Nested: Hello Hong Kong!
 </p>
 !! end
@@ -15352,7 +15612,7 @@ Nested: -{zh-hans:Hi -{zh-cn:China;zh-sg:Singapore;}-;zh-hant:Hello -{zh-tw:Taiw
 Proper conversion of text in external links
 !! options
 language=sr variant=sr-ec
-!! input
+!! wikitext
 http://www.google.com
 gopher://www.google.com
 [http://www.google.com http://www.google.com]
@@ -15360,7 +15620,7 @@ gopher://www.google.com
 [https://www.google.com irc://www.google.com]
 [ftp://www.google.com www.google.com/ftp://dir]
 [//www.google.com www.google.com]
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://www.google.com">http://www.google.com</a>
 <a rel="nofollow" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
 <a rel="nofollow" class="external free" href="http://www.google.com">http://www.google.com</a>
@@ -15375,9 +15635,9 @@ gopher://www.google.com
 Do not convert roman numbers to language variants
 !! options
 language=sr variant=sr-ec
-!! input
+!! wikitext
 Fridrih IV je car.
-!! result
+!! html
 <p>Фридрих IV је цар.
 </p>
 !! end
@@ -15386,9 +15646,9 @@ Fridrih IV je car.
 Unclosed language converter markup "-{"
 !! options
 language=sr
-!! input
+!! wikitext
 -{T|hello
-!! result
+!! html
 <p>-{T|hello
 </p>
 !! end
@@ -15397,9 +15657,9 @@ language=sr
 Don't convert raw rule "-{R|=&gt;}-" to "=>"
 !! options
 language=sr
-!! input
+!! wikitext
 -{R|=&gt;}-
-!! result
+!! html
 <p>=&gt;
 </p>
 !!end
@@ -15408,9 +15668,9 @@ language=sr
 Don't break link parsing if language converter markup is in the caption.
 !! options
 language=sr variant=sr-ec
-!! input
+!! wikitext
 [[Main Page|-{R|main page}-]]
-!! result
+!! html
 <p><a href="/wiki/Main_Page" title="Маин Паге">main page</a>
 </p>
 !! end
@@ -15421,9 +15681,9 @@ Don't break image parsing if language converter markup is in the caption.
 !! options
 language=sr
 disabled
-!! input
+!! wikitext
 [[File:Foobar.jpg|-{R|caption}-]]
-!! result
+!! html
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! end
@@ -15434,9 +15694,9 @@ Don't break list handling if language converter markup is in the item.
 !! options
 language=zh variant=zh-cn
 disabled
-!! input
+!! wikitext
 ;-{zh-cn:AAA;zh-tw:BBB}-
-!! result
+!! html
 <dl><dt>AAA
 </dt></dl>
 
@@ -15448,12 +15708,12 @@ Don't break table handling if language converter markup is in the cell.
 !! options
 language=sr variant=sr-ec
 disabled
-!! input
+!! wikitext
 {|
 |-
 | -{R|B}-
 |}
-!! result
+!! html
 <table>
 
 <tr>
@@ -15464,9 +15724,9 @@ disabled
 
 !! test
 Bug 529: Uncovered bullet
-!! input
+!! wikitext
 * Foo {{bullet}}
-!! result
+!! html
 <ul>
 <li> Foo 
 </li>
@@ -15484,9 +15744,9 @@ Bug 529: Uncovered bullet
 # the expected output and your parser's output.
 !! test
 Bug 529: Uncovered bullet leaving empty list, normally removed by tidy
-!! input
+!! wikitext
 ******* Foo {{bullet}}
-!! result
+!! html
 <ul>
 <li><ul>
 <li><ul>
@@ -15516,12 +15776,12 @@ Bug 529: Uncovered bullet leaving empty list, normally removed by tidy
 
 !! test
 Bug 529: Uncovered table already at line-start
-!! input
+!! wikitext
 x
 
 {{table}}
 y
-!! result
+!! html
 <p>x
 </p>
 <table>
 
 !! test
 Bug 529: Uncovered bullet in parser function result
-!! input
+!! wikitext
 * Foo {{lc:{{bullet}} }}
-!! result
+!! html
 <ul>
 <li> Foo 
 </li>
@@ -15553,18 +15813,18 @@ Bug 529: Uncovered bullet in parser function result
 
 !! test
 Bug 5678: Double-parsed template argument
-!! input
+!! wikitext
 {{lc:{{{1}}}|hello}}
-!! result
+!! html
 <p>{{{1}}}
 </p>
 !! end
 
 !! test
 Bug 5678: Double-parsed template invocation
-!! input
+!! wikitext
 {{lc:{{paramtest {{!}} param = hello }} }}
-!! result
+!! html
 <p>{{paramtest | param = hello }}
 </p>
 !! end
@@ -15574,7 +15834,7 @@ Case insensitivity of parser functions for non-ASCII characters (bug 8143)
 !! options
 language=cs
 title=[[Main Page]]
-!! input
+!! wikitext
 {{PRVNÍVELKÉ:ěščř}}
 {{prvnívelké:ěščř}}
 {{PRVNÍMALÉ:ěščř}}
@@ -15583,7 +15843,7 @@ title=[[Main Page]]
 {{malá:ěščř}}
 {{VELKÁ:ěščř}}
 {{velká:ěščř}}
-!! result
+!! html
 <p>Ěščř
 Ěščř
 ěščř
@@ -15597,10 +15857,10 @@ title=[[Main Page]]
 
 !! test
 Morwen/13: Unclosed link followed by heading
-!! input
+!! wikitext
 [[link
 ==heading==
-!! result
+!! html
 <p>[[link
 </p>
 <h2><span class="mw-headline" id="heading">heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: heading">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
@@ -15609,10 +15869,10 @@ Morwen/13: Unclosed link followed by heading
 
 !! test
 HHP2.1: Heuristics for headings in preprocessor parenthetical structures
-!! input
+!! wikitext
 {{foo|
 =heading=
-!! result
+!! html
 <p>{{foo|
 </p>
 <h1><span class="mw-headline" id="heading">heading</span></h1>
@@ -15621,10 +15881,10 @@ HHP2.1: Heuristics for headings in preprocessor parenthetical structures
 
 !! test
 HHP2.2: Heuristics for headings in preprocessor parenthetical structures
-!! input
+!! wikitext
 {{foo|
 ==heading==
-!! result
+!! html
 <p>{{foo|
 </p>
 <h2><span class="mw-headline" id="heading">heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: heading">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
@@ -15635,19 +15895,19 @@ HHP2.2: Heuristics for headings in preprocessor parenthetical structures
 Tildes in comments
 !! options
 pst
-!! input
+!! wikitext
 <!-- ~~~~ -->
-!! result
+!! html
 <!-- ~~~~ -->
 !! end
 
 !! test
 Paragraphs inside divs (no extra line breaks)
-!! input
+!! wikitext
 <div>Line one
 
 Line two</div>
-!! result
+!! html
 <div>Line one
 Line two</div>
 
@@ -15655,12 +15915,12 @@ Line two</div>
 
 !! test
 Paragraphs inside divs (extra line break on open)
-!! input
+!! wikitext
 <div>
 Line one
 
 Line two</div>
-!! result
+!! html
 <div>
 <p>Line one
 </p>
@@ -15670,12 +15930,12 @@ Line two</div>
 
 !! test
 Paragraphs inside divs (extra line break on close)
-!! input
+!! wikitext
 <div>Line one
 
 Line two
 </div>
-!! result
+!! html
 <div>Line one
 <p>Line two
 </p>
@@ -15685,13 +15945,13 @@ Line two
 
 !! test
 Paragraphs inside divs (extra line break on open and close)
-!! input
+!! wikitext
 <div>
 Line one
 
 Line two
 </div>
-!! result
+!! html
 <div>
 <p>Line one
 </p><p>Line two
@@ -15704,10 +15964,10 @@ Line two
 Nesting tags, paragraphs on lines which begin with <div>
 !! options
 disabled
-!! input
+!! wikitext
 <div></div><strong>A
 B</strong>
-!! result
+!! html
 <div></div>
 <p><strong>A
 B</strong>
@@ -15717,11 +15977,11 @@ B</strong>
 # Bug 6200: <blockquote> should behave like <div> with respect to line breaks
 !! test
 Bug 6200: paragraphs inside blockquotes (no extra line breaks)
-!! input
+!! wikitext
 <blockquote>Line one
 
 Line two</blockquote>
-!! result
+!! html
 <blockquote>Line one
 Line two</blockquote>
 
@@ -15729,12 +15989,12 @@ Line two</blockquote>
 
 !! test
 Bug 6200: paragraphs inside blockquotes (extra line break on open)
-!! input
+!! wikitext
 <blockquote>
 Line one
 
 Line two</blockquote>
-!! result
+!! html
 <blockquote>
 <p>Line one
 </p>
@@ -15744,12 +16004,12 @@ Line two</blockquote>
 
 !! test
 Bug 6200: paragraphs inside blockquotes (extra line break on close)
-!! input
+!! wikitext
 <blockquote>Line one
 
 Line two
 </blockquote>
-!! result
+!! html
 <blockquote>Line one
 <p>Line two
 </p>
@@ -15759,13 +16019,13 @@ Line two
 
 !! test
 Bug 6200: paragraphs inside blockquotes (extra line break on open and close)
-!! input
+!! wikitext
 <blockquote>
 Line one
 
 Line two
 </blockquote>
-!! result
+!! html
 <blockquote>
 <p>Line one
 </p><p>Line two
@@ -15776,11 +16036,11 @@ Line two
 
 !! test
 Paragraphs inside blockquotes/divs (no extra line breaks)
-!! input
+!! wikitext
 <blockquote><div>Line one
 
 Line two</div></blockquote>
-!! result
+!! html
 <blockquote><div>Line one
 Line two</div></blockquote>
 
@@ -15788,12 +16048,12 @@ Line two</div></blockquote>
 
 !! test
 Paragraphs inside blockquotes/divs (extra line break on open)
-!! input
+!! wikitext
 <blockquote><div>
 Line one
 
 Line two</div></blockquote>
-!! result
+!! html
 <blockquote><div>
 <p>Line one
 </p>
@@ -15803,12 +16063,12 @@ Line two</div></blockquote>
 
 !! test
 Paragraphs inside blockquotes/divs (extra line break on close)
-!! input
+!! wikitext
 <blockquote><div>Line one
 
 Line two
 </div></blockquote>
-!! result
+!! html
 <blockquote><div>Line one
 <p>Line two
 </p>
@@ -15818,13 +16078,13 @@ Line two
 
 !! test
 Paragraphs inside blockquotes/divs (extra line break on open and close)
-!! input
+!! wikitext
 <blockquote><div>
 Line one
 
 Line two
 </div></blockquote>
-!! result
+!! html
 <blockquote><div>
 <p>Line one
 </p><p>Line two
@@ -15837,11 +16097,11 @@ Line two
 Interwiki links trounced by replaceExternalLinks after early LinkHolderArray expansion
 !! options
 wgLinkHolderBatchSize=0
-!! input
+!! wikitext
 [[meatball:1]]
 [[meatball:2]]
 [[meatball:3]]
-!! result
+!! html
 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?1" class="extiw" title="meatball:1">meatball:1</a>
 <a href="http://www.usemod.com/cgi-bin/mb.pl?2" class="extiw" title="meatball:2">meatball:2</a>
 <a href="http://www.usemod.com/cgi-bin/mb.pl?3" class="extiw" title="meatball:3">meatball:3</a>
@@ -15850,9 +16110,9 @@ wgLinkHolderBatchSize=0
 
 !! test
 Free external link invading image caption
-!! input
+!! wikitext
 [[Image:Foobar.jpg|thumb|http://x|hello]]
-!! result
+!! html
 <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>hello</div></div></div>
 
 !! end
@@ -15861,54 +16121,54 @@ Free external link invading image caption
 Bug 15196: localised external link numbers
 !! options
 language=fa
-!! input
+!! wikitext
 [http://en.wikipedia.org/]
-!! result
+!! html
 <p><a rel="nofollow" class="external autonumber" href="http://en.wikipedia.org/">[۱]</a>
 </p>
 !! end
 
 !! test
 Multibyte character in padleft
-!! input
+!! wikitext
 {{padleft:-Hello|7|Æ}}
-!! result
+!! html
 <p>Æ-Hello
 </p>
 !! end
 
 !! test
 Multibyte character in padright
-!! input
+!! wikitext
 {{padright:Hello-|7|Æ}}
-!! result
+!! html
 <p>Hello-Æ
 </p>
 !! end
 
 !!test
 formatdate parser function
-!!input
+!! wikitext
 {{#formatdate:2009-03-24}}
-!! result
+!! html
 <p><span class="mw-formatted-date" title="2009-03-24">2009-03-24</span>
 </p>
 !! end
 
 !!test
 formatdate parser function, with default format
-!!input
+!! wikitext
 {{#formatdate:2009-03-24|mdy}}
-!! result
+!! html
 <p><span class="mw-formatted-date" title="2009-03-24">March 24, 2009</span>
 </p>
 !! end
 
 !! test
 Spacing of numbers in formatted dates
-!! input
+!! wikitext
 {{#formatdate:January 15}}
-!! result
+!! html
 <p><span class="mw-formatted-date" title="01-15">January 15</span>
 </p>
 !! end
@@ -15917,9 +16177,9 @@ Spacing of numbers in formatted dates
 formatdate parser function, with default format and on a page of which the content language is always English and different from the wiki content language
 !! options
 language=nl title=[[MediaWiki:Common.css]]
-!! input
+!! wikitext
 {{#formatdate:2009-03-24|dmy}}
-!! result
+!! html
 <p><span class="mw-formatted-date" title="2009-03-24">24 March 2009</span>
 </p>
 !! end
@@ -15936,9 +16196,9 @@ language=nl title=[[MediaWiki:Common.css]]
 Edit comment with link
 !! options
 comment
-!! input
+!! wikitext
 I like the [[Main Page]] a lot
-!! result
+!! html
 I like the <a href="/wiki/Main_Page" title="Main Page">Main Page</a> a lot
 !!end
 
@@ -15946,9 +16206,9 @@ I like the <a href="/wiki/Main_Page" title="Main Page">Main Page</a> a lot
 Edit comment with link and link text
 !! options
 comment
-!! input
+!! wikitext
 I like the [[Main Page|best pages]] a lot
-!! result
+!! html
 I like the <a href="/wiki/Main_Page" title="Main Page">best pages</a> a lot
 !!end
 
@@ -15956,9 +16216,9 @@ I like the <a href="/wiki/Main_Page" title="Main Page">best pages</a> a lot
 Edit comment with link and link text with suffix
 !! options
 comment
-!! input
+!! wikitext
 I like the [[Main Page|best page]]s a lot
-!! result
+!! html
 I like the <a href="/wiki/Main_Page" title="Main Page">best pages</a> a lot
 !!end
 
@@ -15966,9 +16226,9 @@ I like the <a href="/wiki/Main_Page" title="Main Page">best pages</a> a lot
 Edit comment with section link (non-local, eg in history list)
 !! options
 comment title=[[Main Page]]
-!! input
+!! wikitext
 /* External links */ removed bogus entries
-!! result
+!! html
 <a href="/wiki/Main_Page#External_links" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
 !!end
 
@@ -15976,9 +16236,9 @@ comment title=[[Main Page]]
 Edit comment with section link and text before it (non-local, eg in history list)
 !! options
 comment title=[[Main Page]]
-!! input
+!! wikitext
 pre-comment text /* External links */ removed bogus entries
-!! result
+!! html
 pre-comment text <a href="/wiki/Main_Page#External_links" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
 !!end
 
@@ -15986,9 +16246,9 @@ pre-comment text <a href="/wiki/Main_Page#External_links" title="Main Page">→<
 Edit comment with section link (local, eg in diff view)
 !! options
 comment local title=[[Main Page]]
-!! input
+!! wikitext
 /* External links */ removed bogus entries
-!! result
+!! html
 <a href="#External_links">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
 !!end
 
@@ -15998,9 +16258,9 @@ Edit comment with subpage link (bug 14080)
 comment
 subpage
 title=[[Subpage test]]
-!! input
+!! wikitext
 Poked at a [[/subpage]] here...
-!! result
+!! html
 Poked at a <a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">/subpage</a> here...
 !!end
 
@@ -16010,9 +16270,9 @@ Edit comment with subpage link and link text (bug 14080)
 comment
 subpage
 title=[[Subpage test]]
-!! input
+!! wikitext
 Poked at a [[/subpage|neat little page]] here...
-!! result
+!! html
 Poked at a <a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">neat little page</a> here...
 !!end
 
@@ -16021,9 +16281,9 @@ Edit comment with bogus subpage link in non-subpage NS (bug 14080)
 !! options
 comment
 title=[[Subpage test]]
-!! input
+!! wikitext
 Poked at a [[/subpage]] here...
-!! result
+!! html
 Poked at a <a href="/index.php?title=/subpage&amp;action=edit&amp;redlink=1" class="new" title="/subpage (page does not exist)">/subpage</a> here...
 !!end
 
@@ -16033,9 +16293,9 @@ Edit comment with bare anchor link (local, as on diff)
 comment
 local
 title=[[Main Page]]
-!!input
+!! wikitext
 [[#section]]
-!! result
+!! html
 <a href="#section">#section</a>
 !! end
 
@@ -16044,26 +16304,26 @@ Edit comment with bare anchor link (non-local, as on history)
 !! options
 comment
 title=[[Main Page]]
-!!input
+!! wikitext
 [[#section]]
-!! result
+!! html
 <a href="/wiki/Main_Page#section" title="Main Page">#section</a>
 !! end
 
 !! test
 Anchor starting with underscore
-!!input
+!! wikitext
 [[#_ref|One]]
-!! result
+!! html
 <p><a href="#_ref">One</a>
 </p>
 !! end
 
 !! test
 Id starting with underscore
-!!input
+!! wikitext
 <div id="_ref"></div>
-!! result
+!! html
 <div id="_ref"></div>
 
 !! end
@@ -16073,9 +16333,9 @@ Space normalisation on autocomment (bug 22784)
 !! options
 comment
 title=[[Main Page]]
-!!input
+!! wikitext
 /* __hello__world__ */
-!! result
+!! html
 <a href="/wiki/Main_Page#hello_world" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">__hello__world__</span></span>
 !! end
 
@@ -16083,9 +16343,9 @@ title=[[Main Page]]
 percent-encoding and + signs in comments (Bug 26410)
 !! options
 comment
-!!input
+!! wikitext
 [[ABC%33D% ++]] [[ABC%33D% ++|+%20]]
-!! result
+!! html
 <a href="/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1" class="new" title="ABC3D% ++ (page does not exist)">ABC3D% ++</a> <a href="/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1" class="new" title="ABC3D% ++ (page does not exist)">+%20</a>
 !! end
 
@@ -16093,20 +16353,20 @@ comment
 Bad images - basic functionality
 !! options
 disabled
-!! input
+!! wikitext
 [[File:Bad.jpg]]
-!! result
+!! html
 !! end
 
 !! test
 Bad images - bug 16039: text after bad image disappears
 !! options
 disabled
-!! input
+!! wikitext
 Foo bar
 [[File:Bad.jpg]]
 Bar foo
-!! result
+!! html
 <p>Foo bar
 </p><p>Bar foo
 </p>
@@ -16119,9 +16379,9 @@ showtitle
 !! config
 wgAllowDisplayTitle=true
 wgRestrictDisplayTitle=false
-!! input
+!! wikitext
 this is not the the title
-!! result
+!! html
 Parser test
 <p>this is not the the title
 </p>
@@ -16135,10 +16395,10 @@ title=[[Screen]]
 !! config
 wgAllowDisplayTitle=true
 wgRestrictDisplayTitle=false
-!! input
+!! wikitext
 this is not the the title
 {{DISPLAYTITLE:whatever}}
-!! result
+!! html
 whatever
 <p>this is not the the title
 </p>
@@ -16152,10 +16412,10 @@ title=[[Screen]]
 !! config
 wgAllowDisplayTitle=true
 wgRestrictDisplayTitle=true
-!! input
+!! wikitext
 this is not the the title
 {{DISPLAYTITLE:whatever}}
-!! result
+!! html
 Screen
 <p>this is not the the title
 </p>
@@ -16169,10 +16429,10 @@ title=[[Screen]]
 !! config
 wgAllowDisplayTitle=true
 wgRestrictDisplayTitle=true
-!! input
+!! wikitext
 this is not the the title
 {{DISPLAYTITLE:screen}}
-!! result
+!! html
 screen
 <p>this is not the the title
 </p>
@@ -16185,10 +16445,10 @@ showtitle
 title=[[Screen]]
 !! config
 wgAllowDisplayTitle=false
-!! input
+!! wikitext
 this is not the the title
 {{DISPLAYTITLE:screen}}
-!! result
+!! html
 Screen
 <p>this is not the the title
 <a href="/index.php?title=Template:DISPLAYTITLE:screen&amp;action=edit&amp;redlink=1" class="new" title="Template:DISPLAYTITLE:screen (page does not exist)">Template:DISPLAYTITLE:screen</a>
@@ -16202,9 +16462,9 @@ showtitle
 title=[[Screen]]
 !! config
 wgAllowDisplayTitle=false
-!! input
+!! wikitext
 this is not the the title
-!! result
+!! html
 Screen
 <p>this is not the the title
 </p>
@@ -16218,10 +16478,10 @@ title=[[Screen]]
 !! config
 wgAllowDisplayTitle=true
 wgRestrictDisplayTitle=true
-!! input
+!! wikitext
 this is not the the title
 {{DISPLAYTITLE:<span style="display: none;">s</span>creen}}
-!! result
+!! html
 <span style="/* attempt to bypass $wgRestrictDisplayTitle */">s</span>creen
 <p>this is not the the title
 </p>
@@ -16235,10 +16495,10 @@ title=[[Screen]]
 !! config
 wgAllowDisplayTitle=true
 wgRestrictDisplayTitle=true
-!! input
+!! wikitext
 this is not the the title
 {{DISPLAYTITLE:<span style="color: red;">s</span>creen}}
-!! result
+!! html
 <span style="color: red;">s</span>creen
 <p>this is not the the title
 </p>
@@ -16248,9 +16508,9 @@ this is not the the title
 preload: check <noinclude> and <includeonly>
 !! options
 preload
-!! input
+!! wikitext
 Hello <noinclude>cruel</noinclude><includeonly>kind</includeonly> world.
-!! result
+!! html
 Hello kind world.
 !! end
 
@@ -16258,9 +16518,9 @@ Hello kind world.
 preload: check <onlyinclude>
 !! options
 preload
-!! input
+!! wikitext
 Goodbye <onlyinclude>Hello world</onlyinclude>
-!! result
+!! html
 Hello world
 !! end
 
@@ -16268,9 +16528,9 @@ Hello world
 preload: can pass tags through if we want to
 !! options
 preload
-!! input
+!! wikitext
 <includeonly><</includeonly>includeonly>Hello world<includeonly><</includeonly>/includeonly>
-!! result
+!! html
 <includeonly>Hello world</includeonly>
 !! end
 
@@ -16278,9 +16538,9 @@ preload
 preload: check that it doesn't try to do tricks
 !! options
 preload
-!! input
+!! wikitext
 * <!-- Hello --> ''{{world}}'' {{<includeonly>subst:</includeonly>How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
-!! result
+!! html
 * <!-- Hello --> ''{{world}}'' {{subst:How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
 !! end
 
@@ -16288,12 +16548,12 @@ preload
 Play a bit with r67090 and bug 3158
 !! options
 disabled
-!! input
+!! wikitext
 <div style="width:50% !important">&nbsp;</div>
 <div style="width:50%&nbsp;!important">&nbsp;</div>
 <div style="width:50%&#160;!important">&nbsp;</div>
 <div style="border : solid;">&nbsp;</div>
-!! result
+!! html
 <div style="width:50% !important">&nbsp;</div>
 <div style="width:50% !important">&nbsp;</div>
 <div style="width:50% !important">&nbsp;</div>
@@ -16303,10 +16563,10 @@ disabled
 
 !! test
 HTML5 data attributes
-!! input
+!! wikitext
 <span data-foo="bar">Baz</span>
 <p data-abc-def_hij="">Quuz</p>
-!! result
+!! html
 <p><span data-foo="bar">Baz</span>
 </p>
 <p data-abc-def_hij="">Quuz</p>
@@ -16315,12 +16575,12 @@ HTML5 data attributes
 
 !! test
 percent-encoding and + signs in internal links (Bug 26410)
-!! input
+!! wikitext
 [[User:+%]] [[Page+title%]]
 [[%+]] [[%+|%20]] [[%+ ]] [[%+r]]
 [[%]] [[+]] [[image:%+abc%39|foo|[[bar]]]]
 [[%33%45]] [[%33%45+]]
-!! result
+!! html
 <p><a href="/index.php?title=User:%2B%25&amp;action=edit&amp;redlink=1" class="new" title="User:+% (page does not exist)">User:+%</a> <a href="/index.php?title=Page%2Btitle%25&amp;action=edit&amp;redlink=1" class="new" title="Page+title% (page does not exist)">Page+title%</a>
 <a href="/index.php?title=%25%2B&amp;action=edit&amp;redlink=1" class="new" title="%+ (page does not exist)">%+</a> <a href="/index.php?title=%25%2B&amp;action=edit&amp;redlink=1" class="new" title="%+ (page does not exist)">%20</a> <a href="/index.php?title=%25%2B&amp;action=edit&amp;redlink=1" class="new" title="%+ (page does not exist)">%+ </a> <a href="/index.php?title=%25%2Br&amp;action=edit&amp;redlink=1" class="new" title="%+r (page does not exist)">%+r</a>
 <a href="/index.php?title=%25&amp;action=edit&amp;redlink=1" class="new" title="% (page does not exist)">%</a> <a href="/index.php?title=%2B&amp;action=edit&amp;redlink=1" class="new" title="+ (page does not exist)">+</a> <a href="/index.php?title=Special:Upload&amp;wpDestFile=%25%2Babc9" class="new" title="File:%+abc9">bar</a>
@@ -16330,10 +16590,10 @@ percent-encoding and + signs in internal links (Bug 26410)
 
 !! test
 Special characters in embedded file links (bug 27679)
-!! input
+!! wikitext
 [[File:Contains & ampersand.jpg]]
 [[File:Does not exist.jpg|Title with & ampersand]]
-!! result
+!! html
 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Contains_%26_ampersand.jpg" class="new" title="File:Contains &amp; ampersand.jpg">File:Contains &amp; ampersand.jpg</a>
 <a href="/index.php?title=Special:Upload&amp;wpDestFile=Does_not_exist.jpg" class="new" title="File:Does not exist.jpg">Title with &amp; ampersand</a>
 </p>
@@ -16342,36 +16602,36 @@ Special characters in embedded file links (bug 27679)
 
 !! test
 Confirm that 'apos' named character reference doesn't make it to output (not legal in HTML 4)
-!! input
+!! wikitext
 Text&apos;s been normalized?
-!! result
+!! html
 <p>Text&#39;s been normalized?
 </p>
 !! end
 
 !! test
 Bug 19052 U+3000 IDEOGRAPHIC SPACE should terminate free external links
-!! input
+!! wikitext
 http://www.example.org/ <-- U+3000 (vim: ^Vu3000)
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="http://www.example.org/">http://www.example.org/</a> &lt;-- U+3000 (vim: ^Vu3000)
 </p>
 !! end
 
 !! test
 Bug 19052 U+3000 IDEOGRAPHIC SPACE should terminate bracketed external links
-!! input
+!! wikitext
 [http://www.example.org/ ideograms]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="http://www.example.org/">ideograms</a>
 </p>
 !! end
 
 !! test
 Bug 19052 U+3000 IDEOGRAPHIC SPACE should terminate external images links
-!! input
+!! wikitext
 http://www.example.org/pic.png <-- U+3000 (vim: ^Vu3000)
-!! result
+!! html
 <p><img src="http://www.example.org/pic.png" alt="pic.png" /> &lt;-- U+3000 (vim: ^Vu3000)
 </p>
 !! end
@@ -16397,9 +16657,9 @@ Template:Identical
 
 !! test
 Bug 31098 Template which includes system messages which includes the template
-!! input
+!! wikitext
 {{Identical}}
-!! result
+!! html
 <p><span class="error">Template loop detected: <a href="/wiki/Template:Identical" title="Template:Identical">Template:Identical</a></span>
 <span class="error">Template loop detected: <a href="/wiki/Template:Identical" title="Template:Identical">Template:Identical</a></span>
 </p>
@@ -16409,9 +16669,9 @@ Bug 31098 Template which includes system messages which includes the template
 Bug31490 Turkish: ucfirst 'blah'
 !! options
 language=tr
-!! input
+!! wikitext
 {{ucfirst:blah}}
-!! result
+!! html
 <p>Blah
 </p>
 !! end
@@ -16420,9 +16680,9 @@ language=tr
 Bug31490 Turkish: ucfirst 'ix'
 !! options
 language=tr
-!! input
+!! wikitext
 {{ucfirst:ix}}
-!! result
+!! html
 <p>İx
 </p>
 !! end
@@ -16431,9 +16691,9 @@ language=tr
 Bug31490 Turkish: lcfirst 'BLAH'
 !! options
 language=tr
-!! input
+!! wikitext
 {{lcfirst:BLAH}}
-!! result
+!! html
 <p>bLAH
 </p>
 !! end
@@ -16442,9 +16702,9 @@ language=tr
 Bug31490 Turkish: ucfırst (with a dotless i)
 !! options
 language=tr
-!! input
+!! wikitext
 {{ucfırst:blah}}
-!! result
+!! html
 <p><a href="/index.php?title=%C5%9Eablon:Ucf%C4%B1rst:blah&amp;action=edit&amp;redlink=1" class="new" title="Şablon:Ucfırst:blah (sayfa mevcut değil)">Şablon:Ucfırst:blah</a>
 </p>
 !! end
@@ -16453,9 +16713,9 @@ language=tr
 Bug31490 ucfırst (with a dotless i) with English language
 !! options
 language=en
-!! input
+!! wikitext
 {{ucfırst:blah}}
-!! result
+!! html
 <p><a href="/index.php?title=Template:Ucf%C4%B1rst:blah&amp;action=edit&amp;redlink=1" class="new" title="Template:Ucfırst:blah (page does not exist)">Template:Ucfırst:blah</a>
 </p>
 !! end
@@ -16464,10 +16724,10 @@ language=en
 Bug 26375: TOC with italics
 !! options
 title=[[Main Page]]
-!! input
+!! wikitext
 __TOC__
 == ''Lost'' episodes ==
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Lost_episodes"><span class="tocnumber">1</span> <span class="toctext"><i>Lost</i> episodes</span></a></li>
@@ -16482,10 +16742,10 @@ __TOC__
 Bug 26375: TOC with bold
 !! options
 title=[[Main Page]]
-!! input
+!! wikitext
 __TOC__
 == '''should be bold''' then normal text ==
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#should_be_bold_then_normal_text"><span class="tocnumber">1</span> <span class="toctext"><b>should be bold</b> then normal text</span></a></li>
@@ -16500,10 +16760,10 @@ __TOC__
 Bug 33845: Headings become cursive in TOC when they contain an image
 !! options
 title=[[Main Page]]
-!! input
+!! wikitext
 __TOC__
 == Image [[Image:foobar.jpg]] ==
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Image"><span class="tocnumber">1</span> <span class="toctext">Image</span></a></li>
@@ -16518,10 +16778,10 @@ __TOC__
 Bug 33845 (2): Headings become bold in TOC when they contain a blockquote
 !! options
 title=[[Main Page]]
-!! input
+!! wikitext
 __TOC__
 == <blockquote>Quote</blockquote> ==
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Quote"><span class="tocnumber">1</span> <span class="toctext">Quote</span></a></li>
@@ -16536,12 +16796,12 @@ __TOC__
 Unclosed tags in TOC
 !! options
 title=[[Main Page]]
-!! input
+!! wikitext
 __TOC__
 == Proof: 2 < 3 ==
 <small>Hanc marginis exiguitas non caperet.</small>
 QED
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Proof:_2_.3C_3"><span class="tocnumber">1</span> <span class="toctext">Proof: 2 &lt; 3</span></a></li>
@@ -16556,12 +16816,12 @@ QED
 
 !! test
 Multiple tags in TOC
-!! input
+!! wikitext
 __TOC__
 == <i>Foo</i> <b>Bar</b> ==
 
 == <i>Foo</i> <blockquote>Bar</blockquote> ==
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Foo_Bar"><span class="tocnumber">1</span> <span class="toctext"><i>Foo</i> <b>Bar</b></span></a></li>
@@ -16576,12 +16836,12 @@ __TOC__
 
 !! test
 Tags with parameters in TOC
-!! input
+!! wikitext
 __TOC__
 == <sup class="in-h2">Hello</sup> ==
 
 == <sup class="a > b">Evilbye</sup> ==
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Hello"><span class="tocnumber">1</span> <span class="toctext"><sup>Hello</sup></span></a></li>
@@ -16596,7 +16856,7 @@ __TOC__
 
 !! test
 span tags with directionality in TOC
-!! input
+!! wikitext
 __TOC__
 == <span dir="ltr">C++</span> ==
 
@@ -16607,7 +16867,7 @@ __TOC__
 == <span style="font-style: italic" dir="ltr">All attributes on these span tags must be deleted from the TOC</span> ==
 
 == <span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span> ==
-!! result
+!! html
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#C.2B.2B"><span class="tocnumber">1</span> <span class="toctext"><span dir="ltr">C++</span></span></a></li>
@@ -16636,20 +16896,20 @@ MediaWiki:Bug32057
 Bug 32057: Title needed when expanding <h> nodes.
 !! options
 title=[[Main Page]]
-!! input
+!! wikitext
 {{int:Bug32057}}
-!! result
+!! html
 <h2><span class="mw-headline" id="Headline_text">Headline text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Headline text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 
 !! end
 
 !! test
 Strip marker in urlencode
-!! input
+!! wikitext
 {{urlencode:x<nowiki/>y}}
 {{urlencode:x<nowiki/>y|wiki}}
 {{urlencode:x<nowiki/>y|path}}
-!! result
+!! html
 <p>xy
 xy
 xy
 
 !! test
 Strip marker in lc
-!! input
+!! wikitext
 {{lc:x<nowiki/>y}}
-!! result
+!! html
 <p>xy
 </p>
 !! end
 
 !! test
 Strip marker in uc
-!! input
+!! wikitext
 {{uc:x<nowiki/>y}}
-!! result
+!! html
 <p>XY
 </p>
 !! end
 
 !! test
 Strip marker in formatNum
-!! input
+!! wikitext
 {{formatnum:1<nowiki/>2}}
 {{formatnum:1<nowiki/>2|R}}
-!! result
+!! html
 <p>12
 12
 </p>
@@ -16689,10 +16949,10 @@ Strip marker in formatNum
 Check noCommafy in formatNum
 !! options
 language=be-tarask
-!! input
+!! wikitext
 {{formatnum:123456.78}}
 {{formatnum:123456.78|NOSEP}}
-!! result
+!! html
 <p>123 456,78
 123456.78
 </p>
@@ -16700,11 +16960,11 @@ language=be-tarask
 
 !! test
 Wrong option for formatNum (bug 56199)
-!! input
+!! wikitext
 {{formatnum:1,234.56|Random}}
 {{formatnum:1,234.56|EVERYTHING}}
 {{formatnum:1234.56|any argument that has the string 'NOSEP'}}
-!! result
+!! html
 <p>1,234.56
 1,234.56
 1,234.56
@@ -16715,67 +16975,67 @@ Wrong option for formatNum (bug 56199)
 Strip marker in grammar
 !! options
 language=fi
-!! input
+!! wikitext
 {{grammar:elative|foo<nowiki/>bar}}
-!! result
+!! html
 <p>foobarista
 </p>
 !! end
 
 !! test
 Strip marker in padleft
-!! input
+!! wikitext
 {{padleft:|2|x<nowiki/>y}}
-!! result
+!! html
 <p>xy
 </p>
 !! end
 
 !! test
 Strip marker in padright
-!! input
+!! wikitext
 {{padright:|2|x<nowiki/>y}}
-!! result
+!! html
 <p>xy
 </p>
 !! end
 
 !! test
 Strip marker in anchorencode
-!! input
+!! wikitext
 {{anchorencode:x<nowiki/>y}}
-!! result
+!! html
 <p>xy
 </p>
 !! end
 
 !! test
 nowiki inside link inside heading (bug 18295)
-!! input
+!! wikitext
 ==[[foo|x<nowiki>y</nowiki>z]]==
-!! result
+!! html
 <h2><span class="mw-headline" id="xyz"><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">xyz</a></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: xyz">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 
 !! end
 
 !! test
 new support for bdi element (bug 31817)
-!! input
+!! wikitext
 <p dir="rtl" lang="he">ולדימיר לנין (ברוסית: <bdi lang="ru">Владимир Ленин</bdi>, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.</p>
-!! result
+!! html
 <p dir="rtl" lang="he">ולדימיר לנין (ברוסית: <bdi lang="ru">Владимир Ленин</bdi>, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.</p>
 
 !!end
 
 !! test
 Ignore pipe between table row attributes
-!! input
+!! wikitext
 {|
 | quux
 |- id=foo | style='color: red'
 | bar
 |}
-!! result
+!! html
 <table>
 <tr>
 <td> quux
@@ -16788,11 +17048,11 @@ Ignore pipe between table row attributes
 
 !!test
 Gallery override link with WikiLink (bug 34852)
-!! input
+!! wikitext
 <gallery>
 File:foobar.jpg|caption|alt=galleryalt|link=InterWikiLink
 </gallery>
-!! result
+!! html
 <ul class="gallery mw-gallery-traditional">
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
                        <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/InterWikiLink"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
@@ -16807,11 +17067,11 @@ File:foobar.jpg|caption|alt=galleryalt|link=InterWikiLink
 
 !!test
 Gallery override link with absolute external link (bug 34852)
-!! input
+!! wikitext
 <gallery>
 File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org
 </gallery>
-!! result
+!! html
 <ul class="gallery mw-gallery-traditional">
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
                        <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="http://www.example.org"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
@@ -16826,11 +17086,11 @@ File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org
 
 !!test
 Gallery override link with malicious javascript (bug 34852)
-!! input
+!! wikitext
 <gallery>
 File:foobar.jpg|caption|alt=galleryalt|link=" onclick="alert('malicious javascript code!');
 </gallery>
-!! result
+!! html
 <ul class="gallery mw-gallery-traditional">
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
                        <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/%22_onclick%3D%22alert(%27malicious_javascript_code!%27);"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
@@ -16845,11 +17105,11 @@ File:foobar.jpg|caption|alt=galleryalt|link=" onclick="alert('malicious javascri
 
 !!test
 Gallery with invalid title as link (bug 43964)
-!! input
+!! wikitext
 <gallery>
 File:foobar.jpg|link=<
 </gallery>
-!! result
+!! html
 <ul class="gallery mw-gallery-traditional">
                <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>
@@ -16862,19 +17122,19 @@ File:foobar.jpg|link=<
 
 !!test
 Language parser function
-!! input
+!! wikitext
 {{#language:ar}}
-!! result
+!! html
 <p>العربية
 </p>
 !! end
 
 !!test
 Padleft and padright as substr
-!! input
+!! wikitext
 {{padleft:|3|abcde}}
 {{padright:|3|abcde}}
-!! result
+!! html
 <p>abc
 abc
 </p>
@@ -16882,11 +17142,11 @@ abc
 
 !!test
 Special parser function
-!! input
+!! wikitext
 {{#special:RandomPage}}
 {{#special:BaDtItLe}}
 {{#special:Foobar}}
-!! result
+!! html
 <p>Special:Random
 Special:Badtitle
 Special:Foobar
@@ -16895,27 +17155,27 @@ Special:Foobar
 
 !!test
 Bug 34939 - Case insensitive link parsing ([HttP://])
-!! input
+!! wikitext
 [HttP://MediaWiki.Org/]
-!! result
+!! html
 <p><a rel="nofollow" class="external autonumber" href="HttP://MediaWiki.Org/">[1]</a>
 </p>
 !! end
 
 !!test
 Bug 34939 - Case insensitive link parsing ([HttP:// title])
-!! input
+!! wikitext
 [HttP://MediaWiki.Org/ MediaWiki]
-!! result
+!! html
 <p><a rel="nofollow" class="external text" href="HttP://MediaWiki.Org/">MediaWiki</a>
 </p>
 !! end
 
 !!test
 Bug 34939 - Case insensitive link parsing (HttP://)
-!! input
+!! wikitext
 HttP://MediaWiki.Org/
-!! result
+!! html
 <p><a rel="nofollow" class="external free" href="HttP://MediaWiki.Org/">HttP://MediaWiki.Org/</a>
 </p>
 !! end
@@ -16924,14 +17184,14 @@ HttP://MediaWiki.Org/
 Disable TOC
 !! options
 notoc
-!! input
+!! wikitext
 Lead
 == Section 1 ==
 == Section 2 ==
 == Section 3 ==
 == Section 4 ==
 == Section 5 ==
-!! result
+!! html
 <p>Lead
 </p>
 
@@ -16952,11 +17212,11 @@ Lead
 1. SOL-sensitive wikitext tokens as template-args
 !!options
 parsoid=wt2html,wt2wt
-!!input
+!! wikitext
 {{echo|*a}}
 {{echo|#a}}
 {{echo|:a}}
-!!result
+!! html
 <span about="#mwt1" typeof="mw:Transclusion">
 </span><ul about="#mwt1"><li>a</li>
 </ul>
@@ -16978,11 +17238,11 @@ parsoid=wt2html,wt2wt
 Ref: 1. ref-location should be replaced with an index span
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref>foo</ref>
 B <ref name="x">foo</ref>
 C <ref name="y" />
-!!result
+!! html
 <p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span>
 B <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-2">[2]</a></span>
 C <span about="#mwt3" class="reference" data-mw='{"name":"ref","attrs":{"name":"y"}}' id="cite_ref-y-3-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-y-3">[3]</a></span></p>
@@ -16992,10 +17252,10 @@ C <span about="#mwt3" class="reference" data-mw='{"name":"ref","attrs":{"name":"
 Ref: 2. ref-tags with identical names should all get the same index
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref name="x">foo</ref>
 B <ref name="x" />
-!!result
+!! html
 <p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
 B <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span></p>
 !!end
@@ -17004,11 +17264,11 @@ B <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"
 Ref: 3. spaces in ref-names should be ignored
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref name="x">foo</ref>
 B <ref name=" x " />
 C <ref name= x  />
-!!result
+!! html
 <p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
 B <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
 C <span about="#mwt3" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-2" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span></p>
@@ -17019,9 +17279,9 @@ Ref: 4. 'constructor' should be accepted as a valid ref-name
 (NOTE: constructor is a predefined property in JS and constructor as a ref-name can clash with it if not handled properly)
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref name="constructor">foo</ref>
-!!result
+!! html
 <p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"constructor"}}' id="cite_ref-constructor-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-constructor-1">[1]</a></span></p>
 !!end
 
@@ -17029,17 +17289,17 @@ A <ref name="constructor">foo</ref>
 Ref: 5. body should accept generic wikitext
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref>
  This is a '''[[bolded link]]''' and this is a {{echo|transclusion}}
 </ref>
 
 <references />
-!!result
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"This is a &lt;b data-parsoid=&#39;{\"dsr\":[19,40,3,3]}&#39;>&lt;a rel=\"mw:WikiLink\" href=\"./Bolded_link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Bolded_link\"},\"sa\":{\"href\":\"bolded link\"},\"dsr\":[22,37,2,2]}&#39;>bolded link&lt;/a>&lt;/b> and this is a &lt;span about=\"#mwt5\" typeof=\"mw:Transclusion\" data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"transclusion\"}},\"i\":0}}]}&#39; data-parsoid=&#39;{\"dsr\":[55,76,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}&#39;>transclusion&lt;/span>\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+!! html
+<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"This is a &lt;b data-parsoid=&#39;{\"dsr\":[19,40,3,3]}&#39;>&lt;a rel=\"mw:WikiLink\" href=\"./Bolded_link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Bolded_link\"},\"sa\":{\"href\":\"bolded link\"},\"dsr\":[22,37,2,2]}&#39;>bolded link&lt;/a>&lt;/b> and this is a &lt;span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"transclusion\"}},\"i\":0}}]}&#39; data-parsoid=&#39;{\"dsr\":[55,76,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}&#39;>transclusion&lt;/span>\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
 
 <ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> This is a <b><a rel="mw:WikiLink" href="./Bolded_link">bolded link</a></b> and this is a <span about="#mwt5" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}},"i":0}}]}'>transclusion</span>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> This is a <b><a rel="mw:WikiLink" href="./Bolded_link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}},"i":0}}]}'>transclusion</span>
 </li>
 </ol>
 !!end
@@ -17048,7 +17308,7 @@ A <ref>
 Ref: 6. indent-pres should not be output in ref-body
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref>
  foo
  bar
@@ -17056,7 +17316,7 @@ A <ref>
 </ref>
 
 <references />
-!!result
+!! html
 <p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo\n bar\n baz\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
 
 <ol class="references" typeof="mw:Extension/references" about="#mwt3" data-mw='{"name":"references","attrs":{}}'>
@@ -17071,7 +17331,7 @@ A <ref>
 Ref: 7. No p-wrapping in ref-body
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref>
 foo
 
@@ -17086,7 +17346,7 @@ booz
 </ref>
 
 <references />
-!!result
+!! html
 <p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo\n\nbar\n\n\nbaz\n\n\n\nbooz\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
 
 <ol about="#mwt2" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
@@ -17108,11 +17368,11 @@ booz
 Ref: 8. transclusion wikitext has lower precedence
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref> foo {{echo|</ref> B C}}
 
 <references />
-!!result
+!! html
 <p>A <span class="reference" data-mw="{&quot;name&quot;:&quot;ref&quot;,&quot;body&quot;:{&quot;html&quot;:&quot;foo <span typeof=\&quot;mw:Nowiki\&quot; data-parsoid='{\&quot;src\&quot;:\&quot;{{\&quot;,\&quot;dsr\&quot;:[12,14,0,0]}'>{{</span>echo|&quot;},&quot;attrs&quot;:{}}" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C<span typeof="mw:Nowiki">}}</span></p>
 <ol class="references" typeof="mw:Extension/references" data-mw="{&quot;name&quot;:&quot;references&quot;,&quot;attrs&quot;:{}}">
 <li id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo <span typeof="mw:Nowiki">{{</span>echo|</li>
@@ -17123,10 +17383,10 @@ A <ref> foo {{echo|</ref> B C}}
 Ref: 9. unclosed comments should not leak out of ref-body
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref> foo <!--</ref> B C
 <references />
-!!result
+!! html
 <p>A <span class="reference" data-mw='{"name":"ref","body":{"html":"foo &lt;!---->"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C</p>
 <ol class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
 <li id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo </li>
@@ -17137,16 +17397,16 @@ A <ref> foo <!--</ref> B C
 Ref: 10. Unclosed HTML tags should not leak out of ref-body
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref> <b> foo </ref> B C
 
 <references />
-!!result
-<p data-parsoid='{"dsr":[0,26,0,0]}'>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"&lt;b data-parsoid=&#39;{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[8,16,3,0]}&#39;> foo &lt;/b>"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref> &lt;b> foo &lt;/ref>","dsr":[2,22,5,6]}'><a href="#cite_note-1">[1]</a></span> B C</p>
+!! html
+<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"&lt;b data-parsoid=&#39;{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[8,16,3,0]}&#39;> foo &lt;/b>"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref> &lt;b> foo &lt;/ref>"}'><a href="#cite_note-1">[1]</a></span> B C</p>
 
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-parsoid='{"src":"&lt;references />","dsr":[28,42,2,2]}' data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> <b data-parsoid='{"stx":"html","autoInsertedEnd":true,"dsr":[8,16,3,0]}'> foo </b></li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-parsoid='{"src":"&lt;references />"}' data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> <b data-parsoid='{"stx":"html","autoInsertedEnd":true}'> foo </b></li>
 </ol>
 !!end
 
@@ -17154,26 +17414,26 @@ A <ref> <b> foo </ref> B C
 Ref: 11. ref-tags acts like an inline element wrt P-wrapping
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref>foo</ref> B
 C <ref>bar</ref> D
-!!result
-<p data-parsoid='{"dsr":[0,37,0,0]}'>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo&lt;/ref>","dsr":[2,16,5,6]}'><a href="#cite_note-1">[1]</a></span> B
-C <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>bar&lt;/ref>","dsr":[21,35,5,6]}'><a href="#cite_note-2">[2]</a></span> D</p>
+!! html
+<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo&lt;/ref>"}'><a href="#cite_note-1">[1]</a></span> B
+C <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>bar&lt;/ref>"}'><a href="#cite_note-2">[2]</a></span> D</p>
 !!end
 
 !!test
 Ref: 12. ref-tags act as trailing newline migration barrier
 !!options
 parsoid
-!!input
+!! wikitext
 <!--the newline at the end of this line moves out of the p-tag-->a
 
 b<!--the newline at the end of this line stays inside the p-tag--> <ref />
 <ref />
 
 c
-!!result
+!! html
 <p><!--the newline at the end of this line moves out of the p-tag-->a</p>
 
 
 Ref: 13. ref-tags are not SOL-transparent and block indent-pres
 !!options
 parsoid
-!!input
+!! wikitext
 <ref>foo</ref> A
 <ref>bar
 </ref> B
-!!result
+!! html
 <p><span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> A
 <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"bar\n"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[2]</a></span> B</p>
 !!end
@@ -17201,14 +17461,14 @@ parsoid
 Ref: 14. A nested ref-tag should be emitted as plain text
 !!options
 parsoid
-!!input
+!! wikitext
 <ref>foo <ref>bar</ref> baz</ref>
 
 <references />
-!!result
-<p data-parsoid='{"dsr":[0,33,0,0]}'><span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo &amp;lt;ref>bar&amp;lt;/ref> baz"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo &lt;ref>bar&lt;/ref> baz&lt;/ref>","dsr":[0,33,5,6]}'><a href="#cite_note-1">[1]</a></span></p>
+!! html
+<p><span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo &amp;lt;ref>bar&amp;lt;/ref> baz"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo &lt;ref>bar&lt;/ref> baz&lt;/ref>"}'><a href="#cite_note-1">[1]</a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-parsoid='{"src":"&lt;references />","dsr":[35,49,2,2]}' data-mw='{"name":"references","attrs":{}}'>
+<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-parsoid='{"src":"&lt;references />"}' data-mw='{"name":"references","attrs":{}}'>
 <li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo &lt;ref>bar&lt;/ref> baz</li>
 </ol>
 !!end
@@ -17217,12 +17477,12 @@ parsoid
 Ref: 15. ref-tags with identical names should get identical indexes
 !!options
 parsoid
-!!input
+!! wikitext
 A1 <ref name="a">foo</ref> A2 <ref name="a" />
 B1 <ref name="b" /> B2 <ref name="b">bar</ref>
 
 <references />
-!!result
+!! html
 <p>A1 <span about="#mwt3" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"a"}}' id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-a-1">[1]</a></span> A2 <span about="#mwt4" class="reference" data-mw='{"name":"ref","attrs":{"name":"a"}}' id="cite_ref-a-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-a-1">[1]</a></span>
 B1 <span about="#mwt7" class="reference" data-mw='{"name":"ref","attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-b-2">[2]</a></span> B2 <span about="#mwt8" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}' id="cite_ref-b-2-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-b-2">[2]</a></span></p>
 
@@ -17235,11 +17495,11 @@ B1 <span about="#mwt7" class="reference" data-mw='{"name":"ref","attrs":{"name":
 Ref: 16. Tokenizer should accept non-standard whitespace in <ref> and </ref> tags
 !!options
 parsoid=wt2html
-!!input
+!! wikitext
 A <ref >foo</ref >
 
 <references />
-!!result
+!! html
 <p>A <span class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
 
 <ol class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
@@ -17250,9 +17510,9 @@ A <ref >foo</ref >
 References: 1. references tag without any refs should be handled properly
 !!options
 parsoid
-!!input
+!! wikitext
 <references />
-!!result
+!! html
 <ol about="#mwt2" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'></ol>
 !!end
 
@@ -17260,14 +17520,14 @@ parsoid
 References: 2. references tag with group only outputs references from that group
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref group="a">foo</ref>
 B <ref group="b">bar</ref>
 
 <references group="a" />
-!!result
+!! html
 <p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"group":"a"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[a 1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"group":"b"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[b 1]</a></span></p>
+B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"group":"b"}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[b 1]</a></span></p>
 
 <ol about="#mwt6" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{"group":"a"}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li>
 </ol>
@@ -17277,7 +17537,7 @@ B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"b
 References: 3. ref list should be cleared after processing references
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref>foo</ref>
 
 <references />
@@ -17285,15 +17545,15 @@ A <ref>foo</ref>
 B <ref>bar</ref>
 
 <references />
-!!result
+!! html
 <p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
 
 <ol about="#mwt4" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li>
 </ol>
 
-<p>B <span about="#mwt6" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>B <span about="#mwt6" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[1]</a></span></p>
 
-<ol about="#mwt8" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> bar</li>
+<ol about="#mwt8" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2-0">↑</a></span> bar</li>
 </ol>
 !!end
 
@@ -17301,7 +17561,7 @@ B <ref>bar</ref>
 References: 4. only referenced group should be cleared after processing references
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref group="a">afoo</ref>
 B <ref>bfoo</ref>
 
@@ -17310,16 +17570,16 @@ B <ref>bfoo</ref>
 C <ref>cfoo</ref>
 
 <references />
-!!result
+!! html
 <p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"afoo"},"attrs":{"group":"a"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[a 1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bfoo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"<ref>bfoo</ref>","dsr":[30,45,5,6]}'><a href="#cite_note-1">[1]</a></span></p>
+B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bfoo"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"<ref>bfoo</ref>"}'><a href="#cite_note-2">[1]</a></span></p>
 
 <ol about="#mwt6" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{"group":"a"}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> afoo</li>
 </ol>
 
-<p>C <span about="#mwt8" class="reference" data-mw='{"name":"ref","body":{"html":"cfoo"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[2]</a></span></p>
+<p>C <span about="#mwt8" class="reference" data-mw='{"name":"ref","body":{"html":"cfoo"},"attrs":{}}' id="cite_ref-3-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-3">[2]</a></span></p>
 
-<ol about="#mwt10" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> bfoo</li><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2-0">↑</a></span> cfoo</li>
+<ol about="#mwt10" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2-0">↑</a></span> bfoo</li><li about="#cite_note-3" id="cite_note-3"><span rel="mw:referencedBy"><a href="#cite_ref-3-0">↑</a></span> cfoo</li>
 </ol>
 !!end
 
@@ -17327,7 +17587,7 @@ B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"b
 References: 5. ref tags in references should be processed while ignoring all other content
 !!options
 parsoid
-!!input
+!! wikitext
 A <ref name="a" />
 B <ref name="b">bar</ref>
 
@@ -17335,12 +17595,12 @@ B <ref name="b">bar</ref>
 <ref name="a">foo</ref>
 This should just get lost.
 </references>
-!!result
-<p data-parsoid='{"dsr":[0,57,0,0]}'>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"a"}}' id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"a\" />","dsr":[2,18,16,0]}'><a href="#cite_note-a-1">[1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"b\">bar&lt;/ref>","dsr":[21,44,14,6]}'><a href="#cite_note-b-2">[2]</a></span></p>
+!! html
+<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"a"}}' id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"a\" />"}'><a href="#cite_note-a-1">[1]</a></span>
+B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"b\">bar&lt;/ref>"}'><a href="#cite_note-b-2">[2]</a></span></p>
 
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-parsoid='{"src":"&lt;references>\n&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.\n&lt;/references>","dsr":[46,123,2,2]}' data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.","html":"\n&lt;span about=\"#mwt8\" class=\"reference\" data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"a\"}}&#39; rel=\"dc:references\" typeof=\"mw:Extension/ref\">&lt;a href=\"#cite_note-a-1\">[1]&lt;/a>&lt;/span>\n"},"attrs":{}}'>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-parsoid='{"src":"&lt;references>\n&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.\n&lt;/references>"}' data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.","html":"\n&lt;span about=\"#mwt8\" class=\"reference\" data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"a\"}}&#39; rel=\"dc:references\" typeof=\"mw:Extension/ref\">&lt;a href=\"#cite_note-a-1\">[1]&lt;/a>&lt;/span>\n"},"attrs":{}}'>
 <li about="#cite_note-a-1" id="cite_note-a-1" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-a-1-0">↑</a></span> foo</li>
 <li about="#cite_note-b-2" id="cite_note-b-2" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-b-2-0">↑</a></span> bar</li>
 </ol>
@@ -17350,9 +17610,9 @@ B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"b
 References: 6. <references /> from a transclusion
 !!options
 parsoid
-!!input
+!! wikitext
 <ref>Foo</ref> {{echo|<references />}}
-!!result
+!! html
 <span about="#mwt3" class="reference" data-mw='{"name":"ref","body":{"html":"Foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> <ol class="references" typeof="mw:Extension/references mw:Transclusion" about="#mwt4" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;references />"}},"i":0}}]}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> Foo</li></ol>
 !!end
 
@@ -17360,28 +17620,51 @@ parsoid
 References: 7. Multiple references tags (one without and one with nested refs) should be correctly handled
 !! options
 parsoid
-!! input
+!! wikitext
 A <ref>foo bar for a</ref>
-B <ref name="b" />
+B <ref group="X" name="b" />
 
 <references />
 
-<references>
+<references group="X">
 <ref name="b">foo</ref>
 </references>
-!! result
-<p data-parsoid='{"dsr":[0,45,0,0]}'>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo bar for a"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo bar for a&lt;/ref>","dsr":[2,26,5,6]}'><a href="#cite_note-1">[1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"b\" />","dsr":[29,45,16,0]}'><a href="#cite_note-b-2">[2]</a></span></p>
+!! html
+<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo bar for a"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo bar for a&lt;/ref>"}'><a href="#cite_note-2" data-parsoid="{}">[2]</a></span>
+B <span about="#mwt4" class="reference" data-mw='{"name":"ref","attrs":{"group":"X","name":"b"}}' id="cite_ref-b-3-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"b\" group=\"X\" />"}'><a href="#cite_note-b-3" data-parsoid="{}">[X 1]</a></span></p>
+
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-parsoid='{"src":"&lt;references />"}' data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-b-1" id="cite_note-b-1" data-parsoid="{}"><span rel="mw:referencedBy" data-parsoid="{}">↑</span> foo</li><li about="#cite_note-2" id="cite_note-2" data-parsoid="{}"><span rel="mw:referencedBy" data-parsoid="{}"><a href="#cite_ref-2-0" data-parsoid="{}">↑</a></span> foo bar for a</li></ol>
+
+<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-parsoid='{"src":"&lt;references group=\"X\">\n&lt;ref name=\"b\">foo&lt;/ref>\n&lt;/references>","group":"X"}' data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"b\">foo&lt;/ref>","html":"\n&lt;span about=\"#mwt10\" class=\"reference\" data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"b\"}}&#39; rel=\"dc:references\" typeof=\"mw:Extension/ref\">&lt;a href=\"#cite_note-b-1\">[1]&lt;/a>&lt;/span>\n"},"attrs":{"group":"X"}}'><li about="#cite_note-b-3" id="cite_note-b-3" data-parsoid="{}"><span rel="mw:referencedBy" data-parsoid="{}"><a href="#cite_ref-b-3-0" data-parsoid="{}">↑</a></span> </li></ol>
+!! end
+
+# This test is wt2html only because we're permitting the serializer to produce
+# dirty diffs, normalizing the unclosed references to the self-closed version.
+!! test
+Generate references for unclosed references tag
+!! options
+parsoid=wt2html
+!! wikitext
+a<ref>foo</ref>
 
+<references>
+!! html
+<p data-parsoid='{}'>a<span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo&lt;/ref>"}'><a href="#cite_note-1" data-parsoid="{}">[1]</a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-parsoid='{"src":"&lt;references />","dsr":[47,61,2,2]}' data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo bar for a</li>
-<li about="#cite_note-b-2" id="cite_note-b-2" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-b-2-0">↑</a></span> </li></ol>
 
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-parsoid='{"src":"&lt;references>"}' data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy" data-parsoid="{}"><a href="#cite_ref-1-0" data-parsoid="{}">↑</a></span> foo</li></ol>
+!! end
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-parsoid='{"src":"&lt;references>\n&lt;ref name=\"b\">foo&lt;/ref>\n&lt;/references>","dsr":[63,113,2,2]}' data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"b\">foo&lt;/ref>","html":"\n&lt;span about=\"#mwt10\" class=\"reference\" data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"b\"}}&#39; rel=\"dc:references\" typeof=\"mw:Extension/ref\">&lt;a href=\"#cite_note-b-1\">[1]&lt;/a>&lt;/span>\n"},"attrs":{}}'>
-<li about="#cite_note-b-1" id="cite_note-b-1" data-parsoid="{}"><span rel="mw:referencedBy">↑</span> foo</li>
-</ol>
+!! test
+New reference serializes on its own line
+!! options
+parsoid=wt2wt,html2wt
+!! wikitext
+foo
+<references />
+!! html
+foo<ol class="references" typeof="mw:Extension/references" about="#mwt2" data-mw='{"name":"references","attrs":{}}'></ol>
 !! end
 
 #### ----------------------------------------------------------------
@@ -17410,7 +17693,7 @@ B <span about="#mwt4" class="reference" data-mw='{"name":"ref","attrs":{"name":"
 Headings: 0. Unnested
 !! options
 parsoid
-!! input
+!! wikitext
 <nowiki>=foo=</nowiki>
 
 <nowiki> =foo= </nowiki>
@@ -17418,7 +17701,7 @@ parsoid
 <nowiki>=foo=</nowiki>
 
 =foo''a''<nowiki>=</nowiki>
-!! result
+!! html
 <p><span typeof="mw:Nowiki">=foo=</span></p>
 
 <p><span typeof="mw:Nowiki"> =foo= </span>
@@ -17433,7 +17716,7 @@ Headings: 1. Nested inside html
 (New headings and existing headings are handled differently)
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 = =foo= =
 
 == =foo= ==
@@ -17447,7 +17730,7 @@ parsoid=html2wt
 =====<nowiki>=foo=</nowiki>=====
 ======<nowiki>=foo=</nowiki>======
 
-!! result
+!! html
 <h1>=foo=</h1>
 <h2>=foo=</h2>
 <h3>=foo=</h3>
@@ -17464,7 +17747,7 @@ parsoid=html2wt
 Headings: 2. Outside heading nest on a single line <h1>foo</h1>*bar
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 = foo =
 <nowiki>*</nowiki>bar
 
@@ -17473,7 +17756,7 @@ parsoid=html2wt
 
 = foo =
 <nowiki>=bar=</nowiki>
-!! result
+!! html
 <h1>foo</h1>*bar
 <h1>foo</h1>=bar
 <h1>foo</h1>=bar=
@@ -17483,9 +17766,9 @@ parsoid=html2wt
 Headings: 3. Nested inside html with wikitext split by html tags
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 = ='''bold'''<nowiki>foo=</nowiki> =
-!! result
+!! html
 <h1>=<b>bold</b><span typeof="mw:Nowiki">foo=</span></h1>
 !!end
 
@@ -17493,7 +17776,7 @@ parsoid=html2wt
 Headings: 4a. No escaping needed (testing just h1 and h2)
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 = =foo =
 
 = foo= =
@@ -17509,7 +17792,7 @@ parsoid=html2wt
 = ''=''foo= =
 
 = <nowiki>=</nowiki> =
-!! result
+!! html
 <h1>=foo</h1>
 <h1>foo=</h1>
 <h1> =foo= </h1>
@@ -17524,11 +17807,11 @@ parsoid=html2wt
 Headings: 4b. No escaping needed (inside p-tags)
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 ===
 =foo= x
 =foo= <s></s>
-!! result
+!! html
 <p>===
 =foo= x
 =foo= <s></s>
@@ -17539,7 +17822,7 @@ parsoid=html2wt
 Headings: 5. Empty headings
 !! options
 parsoid
-!! input
+!! wikitext
 =<nowiki/>=
 
 ==<nowiki/>==
@@ -17551,7 +17834,7 @@ parsoid
 =====<nowiki/>=====
 
 ======<nowiki/>======
-!! result
+!! html
 <h1></h1>
 <h2></h2>
 <h3></h3>
@@ -17564,7 +17847,7 @@ parsoid
 Headings: 6a. Heading chars in SOL context (with trailing spaces)
 !! options
 parsoid
-!! input
+!! wikitext
 <nowiki>=a=</nowiki>
 
 <nowiki>=a=</nowiki> 
@@ -17572,7 +17855,7 @@ parsoid
 <nowiki>=a=</nowiki>   
 
 <nowiki>=a=</nowiki>   
-!! result
+!! html
 <p>=a=</p>
 <p>=a= </p>
 <p>=a= </p>
@@ -17583,7 +17866,7 @@ parsoid
 Headings: 6b. Heading chars in SOL context (with trailing newlines)
 !! options
 parsoid
-!! input
+!! wikitext
 <nowiki>=a=
 b</nowiki>
 
@@ -17595,7 +17878,7 @@ b</nowiki>
 
 <nowiki>=a=     
 b</nowiki>
-!! result
+!! html
 <p>=a=
 b</p>
 <p>=a= 
@@ -17611,10 +17894,10 @@ b</p>
 Headings: 6c. Heading chars in SOL context (leading newline break)
 !! options
 parsoid
-!! input
+!! wikitext
 a
 <nowiki>=b=</nowiki>
-!! result
+!! html
 <p>a
 =b=</p>
 !!end
 Headings: 6d. Heading chars in SOL context (with interspersed comments)
 !! options
 parsoid
-!! input
+!! wikitext
 <!--c0--><nowiki>=a=</nowiki>
 
 <!--c1--><nowiki>=a=</nowiki> <!--c2-->         <!--c3-->
-!! result
+!! html
 <p><!--c0-->=a=</p>
 <p><!--c1-->=a= <!--c2-->       <!--c3--></p>
 !!end
@@ -17636,9 +17919,9 @@ parsoid
 Headings: 6d. Heading chars in SOL context (No escaping needed)
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 =a=<div>b</div>
-!! result
+!! html
 =a=<div>b</div>
 !!end
 
@@ -17655,11 +17938,11 @@ parsoid=html2wt
 
 !! test
 Lists: 0. Outside nests
-!! input
+!! wikitext
 <nowiki>*</nowiki>foo
 
 <nowiki>#</nowiki>foo
-!! result
+!! html
 <p>*foo
 </p><p>#foo
 </p>
@@ -17667,7 +17950,7 @@ Lists: 0. Outside nests
 
 !! test
 Lists: 1. Nested inside html
-!! input
+!! wikitext
 *<nowiki>*foo</nowiki>
 
 *<nowiki>#foo</nowiki>
@@ -17683,7 +17966,7 @@ Lists: 1. Nested inside html
 #<nowiki>:foo</nowiki>
 
 #<nowiki>;foo</nowiki>
-!! result
+!! html
 <ul>
 <li>*foo
 </li>
@@ -17721,7 +18004,7 @@ Lists: 1. Nested inside html
 
 !! test
 Lists: 2. Inside definition lists
-!! input
+!! wikitext
 ;<nowiki>;foo</nowiki>
 
 ;<nowiki>:foo</nowiki>
@@ -17730,7 +18013,7 @@ Lists: 2. Inside definition lists
 :bar
 
 :<nowiki>:foo</nowiki>
-!! result
+!! html
 <dl>
 <dt>;foo
 </dt>
@@ -17754,11 +18037,11 @@ Lists: 2. Inside definition lists
 
 !! test
 Lists: 3. Only bullets at start of text should be escaped
-!! input
+!! wikitext
 *<nowiki>*foo*bar</nowiki>
 
 *<nowiki>*foo</nowiki>''it''*bar
-!! result
+!! html
 <ul>
 <li>*foo*bar
 </li>
@@ -17774,7 +18057,7 @@ Lists: 3. Only bullets at start of text should be escaped
 Lists: 4. No escapes needed
 !! options
 parsoid
-!! input
+!! wikitext
 *foo*bar
 
 *''foo''*bar
@@ -17782,7 +18065,7 @@ parsoid
 *[[Foo]]: bar
 
 *[[Foo]]*bar
-!! result
+!! html
 <ul>
 <li>foo*bar
 </li>
@@ -17803,7 +18086,7 @@ parsoid
 
 !! test
 Lists: 5. No unnecessary escapes
-!! input
+!! wikitext
 * bar <span><nowiki>[[foo]]</nowiki></span>
 
 *=bar <span><nowiki>[[foo]]</nowiki></span>
@@ -17815,7 +18098,7 @@ Lists: 5. No unnecessary escapes
 *=bar <span>foo]]</span>=
 
 * <s></s>: a
-!! result
+!! html
 <ul>
 <li> bar <span>[[foo]]</span>
 </li>
@@ -17847,18 +18130,18 @@ Lists: 5. No unnecessary escapes
 Lists: 6. Escape bullets in SOL position
 !! options
 parsoid
-!! input
+!! wikitext
 <!--cmt--><nowiki>*foo</nowiki>
-!! result
+!! html
 <p><!--cmt--><span typeof="mw:Nowiki">*foo</span></p>
 !!end
 
 !! test
 Lists: 7. Escape bullets in a multi-line context
-!! input
+!! wikitext
 a
 <nowiki>*</nowiki>b
-!! result
+!! html
 <p>a
 *b
 </p>
 HRs: 1. Single line
 !! options
 parsoid
-!! input
+!! wikitext
 ----<nowiki>----</nowiki>
 ----=foo=
 ----*foo
-!! result
+!! html
 <hr><span typeof="mw:Nowiki">----</span>
 <hr>=foo=
 <hr>*foo
@@ -17903,10 +18186,10 @@ parsoid
 
 !! test
 Tables: 1a. Simple example
-!! input
+!! wikitext
 <nowiki>{|
 |}</nowiki>
-!! result
+!! html
 <p>{|
 |}
 </p>
@@ -17914,27 +18197,27 @@ Tables: 1a. Simple example
 
 !! test
 Tables: 1b. No escaping needed
-!! input
+!! wikitext
 !foo
-!! result
+!! html
 <p>!foo
 </p>
 !! end
 
 !! test
 Tables: 1c. No escaping needed
-!! input
+!! wikitext
 |foo
-!! result
+!! html
 <p>|foo
 </p>
 !! end
 
 !! test
 Tables: 1d. No escaping needed
-!! input
+!! wikitext
 |}foo
-!! result
+!! html
 <p>|}foo
 </p>
 !! end
@@ -17943,13 +18226,13 @@ Tables: 1d. No escaping needed
 Tables: 2a. Nested in td
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 {|
 |<nowiki>foo|bar</nowiki>
 |-
 |x<div><nowiki>a|b</nowiki></div>
 |}
-!! result
+!! html
 <table><tbody><tr>
 <td>foo|bar</td></tr>
 <tr><td>x<div>a|b</div></td>
@@ -17960,12 +18243,12 @@ parsoid=html2wt
 Tables: 2b. Nested in td
 !! options
 parsoid
-!! input
+!! wikitext
 {|
 |<nowiki>foo||bar</nowiki>
 |''it''<nowiki>foo||bar</nowiki>
 |}
-!! result
+!! html
 <table><tbody><tr>
 <td><span typeof="mw:Nowiki">foo||bar</span></td>
 <td><i>it</i><span typeof="mw:Nowiki">foo||bar</span></td></tr></tbody></table>
@@ -17975,11 +18258,11 @@ parsoid
 Tables: 2c. Nested in td -- no escaping needed
 !! options
 parsoid
-!! input
+!! wikitext
 {|
 |foo!!bar
 |}
-!! result
+!! html
 <table><tbody><tr><td>foo!!bar
 </td></tr></tbody></table>
 
@@ -17989,11 +18272,11 @@ parsoid
 Tables: 3a. Nested in th
 !! options
 parsoid
-!! input
+!! wikitext
 {|
 !foo!bar
 |}
-!! result
+!! html
 <table><tbody><tr><th>foo!bar
 </th></tr></tbody></table>
 
@@ -18003,11 +18286,11 @@ parsoid
 Tables: 3b. Nested in th
 !! options
 parsoid
-!! input
+!! wikitext
 {|
 !<nowiki>foo!!bar</nowiki>
 |}
-!! result
+!! html
 <table>
 <tbody><tr><th><span typeof="mw:Nowiki">foo!!bar</span></th></tr>
 </tbody></table>
@@ -18017,11 +18300,11 @@ parsoid
 Tables: 3c. Nested in th -- no escaping needed
 !! options
 parsoid
-!! input
+!! wikitext
 {|
 !<nowiki>foo||bar</nowiki>
 |}
-!! result
+!! html
 <table><tbody><tr>
 <th><span typeof="mw:Nowiki">foo||bar</span></th></tr></tbody></table>
 !! end
@@ -18030,13 +18313,13 @@ parsoid
 Tables: 4a. Escape -
 !! options
 parsoid
-!! input
+!! wikitext
 {|
 !-bar
 |-
 |<nowiki>-bar</nowiki>
 |}
-!! result
+!! html
 <table><tbody>
 <tr><th>-bar</th></tr>
 <tr>
@@ -18047,13 +18330,13 @@ parsoid
 Tables: 4b. Escape +
 !! options
 parsoid
-!! input
+!! wikitext
 {|
 !+bar
 |-
 |<nowiki>+bar</nowiki>
 |}
-!! result
+!! html
 <table><tbody>
 <tr><th>+bar</th></tr>
 <tr>
@@ -18064,7 +18347,7 @@ parsoid
 Tables: 4c. No escaping needed
 !! options
 parsoid
-!! input
+!! wikitext
 {|
 |foo-bar
 |foo+bar
@@ -18080,7 +18363,7 @@ bar|baz
 |x
 <div>a|b</div>
 |}
-!! result
+!! html
 <table><tbody>
 <tr><td>foo-bar</td><td>foo+bar</td></tr>
 <tr><td><i>foo</i>-bar</td><td><i>foo</i>+bar</td></tr>
@@ -18097,13 +18380,13 @@ bar|baz
 Tables: 4d. No escaping needed
 !! options
 parsoid
-!! input
+!! wikitext
 {|
 |[[Foo]]-bar
 ||+1
 ||-2
 |}
-!! result
+!! html
 <table>
 <tbody><tr><td><a rel="mw:WikiLink" href="./Foo">Foo</a>-bar</td>
 <td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>+1</td>
@@ -18111,6 +18394,23 @@ parsoid
 </tbody></table>
 !! end
 
+!! test
+Tables: Digest broken attributes on table and tr tag
+!! options
+parsoid=wt2html
+!! wikitext
+{| || |} ++
+|- || || ++ --
+|- > [
+|}
+!! html
+<table>
+<tbody>
+<tr></tr>
+<tr></tr>
+</tbody></table>
+!! end
+
 #### --------------- Links ----------------
 #### 1. Quote marks in link text
 #### 2. Wikilinks: Escapes needed
@@ -18122,9 +18422,9 @@ parsoid
 Links 1. Quote marks in link text
 !! options
 parsoid
-!! input
+!! wikitext
 [[Foo|Foo<nowiki>''boo''</nowiki>]]
-!! result
+!! html
 <a rel="mw:WikiLink" href="Foo">Foo''boo''</a>
 !! end
 
@@ -18132,18 +18432,20 @@ parsoid
 Links 2. WikiLinks: Escapes needed
 !! options
 parsoid
-!! input
-[[Foo|<nowiki>[Foobar]</nowiki>]]
+!! wikitext
+[[Foo|[Foobar]]]
 [[Foo|<nowiki>Foobar]</nowiki>]]
 [[Foo|x [Foobar] x]]
-[[Foo|<nowiki>x [http://google.com g] x</nowiki>]]
+[[Foo|x <nowiki>[http://google.com g]</nowiki> x]]
 [[Foo|<nowiki>[[Bar]]</nowiki>]]
 [[Foo|<nowiki>x [[Bar]] x</nowiki>]]
 [[Foo|<nowiki>|Bar</nowiki>]]
 [[Foo|<nowiki>]]bar</nowiki>]]
 [[Foo|<nowiki>[[bar</nowiki>]]
+[[Foo|<nowiki>x [[ y</nowiki>]]
+[[Foo|<nowiki>x ]] y</nowiki>]]
 [[Foo|<nowiki>x ]] y [[ z</nowiki>]]
-!! result
+!! html
 <a href="Foo" rel="mw:WikiLink">[Foobar]</a>
 <a href="Foo" rel="mw:WikiLink">Foobar]</a>
 <a href="Foo" rel="mw:WikiLink">x [Foobar] x</a>
@@ -18153,6 +18455,8 @@ parsoid
 <a href="Foo" rel="mw:WikiLink">|Bar</a>
 <a href="Foo" rel="mw:WikiLink">]]bar</a>
 <a href="Foo" rel="mw:WikiLink">[[bar</a>
+<a href="Foo" rel="mw:WikiLink">x [[ y</a>
+<a href="Foo" rel="mw:WikiLink">x ]] y</a>
 <a href="Foo" rel="mw:WikiLink">x ]] y [[ z</a>
 !! end
 
@@ -18160,10 +18464,10 @@ parsoid
 Links 3. WikiLinks: No escapes needed
 !! options
 parsoid
-!! input
+!! wikitext
 [[Foo|[Foobar]]
 [[Foo|foo|bar]]
-!! result
+!! html
 <a href="Foo" rel="mw:WikiLink">[Foobar</a>
 <a href="Foo" rel="mw:WikiLink">foo|bar</a>
 !! end
@@ -18172,7 +18476,7 @@ parsoid
 Links 4. ExtLinks: Escapes needed
 !! options
 parsoid
-!! input
+!! wikitext
 [http://google.com <nowiki>[google]</nowiki>]
 [http://google.com <nowiki>google]</nowiki>]
 
@@ -18180,7 +18484,7 @@ parsoid
 
 <nowiki>[http://google.com google]</nowiki>
 
-!! result
+!! html
 <p><a href="http://google.com" rel="mw:ExtLink">[google]</a>
 <a href="http://google.com" rel="mw:ExtLink">google]</a></p>
 <p>[http://google.com]</p>
@@ -18191,9 +18495,9 @@ parsoid
 Links 5. ExtLinks: No escapes needed
 !! options
 parsoid
-!! input
+!! wikitext
 [http://google.com [google]
-!! result
+!! html
 <a href="http://google.com" rel="mw:ExtLink">[google</a>
 !! end
 
@@ -18207,7 +18511,7 @@ parsoid
 1. Quotes inside <b> and <i>
 !! options
 parsoid=html2wt,wt2wt
-!! input
+!! wikitext
 ''<nowiki>'foo'</nowiki>''
 ''<nowiki>''foo''</nowiki>''
 ''<nowiki>'''foo'''</nowiki>''
@@ -18225,7 +18529,7 @@ parsoid=html2wt,wt2wt
 '<nowiki/>'''foo'''<nowiki/>'
 ''fools'<span> errand</span>''
 ''<span>fool</span>'s errand''
-!! result
+!! html
 <p><i>'foo'</i>
 <i>''foo''</i>
 <i>'''foo'''</i>
@@ -18247,11 +18551,11 @@ parsoid=html2wt,wt2wt
 
 !! test
 2. Link fragments separated by <i> and <b> tags
-!! input
+!! wikitext
 [[''foo''<nowiki>hello]]</nowiki>
 
 [['''foo'''<nowiki>hello]]</nowiki>
-!! result
+!! html
 <p>[[<i>foo</i>hello]]
 </p><p>[[<b>foo</b>hello]]
 </p>
@@ -18261,11 +18565,11 @@ parsoid=html2wt,wt2wt
 3. Link fragments inside <i> and <b>
 (FIXME: Escaping one or both of [[ and ]] is also acceptable --
  this is one of the shortcomings of this format)
-!! input
+!! wikitext
 ''[[foo''<nowiki>]]</nowiki>
 
 '''[[foo'''<nowiki>]]</nowiki>
-!! result
+!! html
 <p><i>[[foo</i>]]
 </p><p><b>[[foo</b>]]
 </p>
@@ -18273,10 +18577,10 @@ parsoid=html2wt,wt2wt
 
 !! test
 4. No escaping needed
-!! input
+!! wikitext
 '<span>''bar''</span>'
 '<span>'''bar'''</span>'
-!! result
+!! html
 <p>'<span><i>bar</i></span>'
 '<span><b>bar</b></span>'
 </p>
@@ -18288,7 +18592,7 @@ parsoid=html2wt,wt2wt
 
 !! test
 1. No unnecessary escapes
-!! input
+!! wikitext
 bar <span><nowiki>[[foo]]</nowiki></span>
 
 =bar <span><nowiki>[[foo]]</nowiki></span>
@@ -18298,7 +18602,7 @@ bar <span><nowiki>[[foo]]</nowiki></span>
 ]]bar <span><nowiki>[[foo]]</nowiki></span>
 
 =bar <span>foo]]</span><nowiki>=</nowiki>
-!! result
+!! html
 <p>bar <span>[[foo]]</span>
 </p><p>=bar <span>[[foo]]</span>
 </p><p>[[bar <span>[[foo]]</span>
@@ -18314,7 +18618,7 @@ bar <span><nowiki>[[foo]]</nowiki></span>
 1. Leading whitespace in SOL context should be escaped
 !! options
 parsoid
-!! input
+!! wikitext
 <nowiki> </nowiki>a
 
 <nowiki> </nowiki> a
 
 a
 <nowiki>       </nowiki> b
-!! result
+!! html
 <p> a</p>
 <p>  a</p>
 <p>    a(tab)</p>
 1. Valid behavior switches should be escaped
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 <nowiki>__TOC__</nowiki>
-!! result
+!! html
 __TOC__
 !! end
 
@@ -18362,10 +18666,10 @@ __TOC__
 2. Invalid behavior switches should not be escaped
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 __TOO__
 __|__
-!! result
+!! html
 __TOO__
 __|__
 !! end
@@ -18380,18 +18684,18 @@ __|__
 1. a tags
 !! options
 parsoid
-!! input
+!! wikitext
 <a href="http://google.com">google</a>
-!! result
+!! html
 &lt;a href=&quot;http://google.com&quot;&gt;google&lt;/a&gt;
 !! end
 
 !! test
 2. other tags
-!! input
+!! wikitext
 <nowiki><div>foo</div>
 <div style="color:red">foo</div></nowiki>
-!! result
+!! html
 <p>&lt;div&gt;foo&lt;/div&gt;
 &lt;div style=&quot;color:red&quot;&gt;foo&lt;/div&gt;
 </p>
@@ -18399,11 +18703,11 @@ parsoid
 
 !! test
 3. multi-line html tag
-!! input
+!! wikitext
 <nowiki><div
 >foo</div
 ></nowiki>
-!! result
+!! html
 <p>&lt;div
 &gt;foo&lt;/div
 &gt;
@@ -18412,13 +18716,13 @@ parsoid
 
 !! test
 4. extension tags
-!! input
+!! wikitext
 <nowiki><ref>foo</ref></nowiki>
 
 <nowiki><ref>bar</nowiki>
 
 baz<nowiki></ref></nowiki>
-!! result
+!! html
 <p>&lt;ref&gt;foo&lt;/ref&gt;
 </p><p>&lt;ref&gt;bar
 </p><p>baz&lt;/ref&gt;
@@ -18428,9 +18732,9 @@ baz<nowiki></ref></nowiki>
 #### --------------- Others ---------------
 !! test
 Escaping nowikis
-!! input
+!! wikitext
 &lt;nowiki&gt;foo&lt;/nowiki&gt;
-!! result
+!! html
 <p>&lt;nowiki&gt;foo&lt;/nowiki&gt;
 </p>
 !! end
@@ -18440,16 +18744,16 @@ Escaping nowikis
 (Bug 52035) Nowiki-escaping should not get tripped by " :" in text
 !! options
 parsoid=wt2wt,html2wt
-!! input
+!! wikitext
 foo's bar :
-!! result
+!! html
 <p>foo's bar :</p>
 !! end
 
 !! test
 
 Tag-like HTML structures are passed through as text
-!! input
+!! wikitext
 <x y>
 
 <x.y>
@@ -18463,7 +18767,7 @@ x<y
 a>b
 
 1<d e>f
-!! result
+!! html
 <p>&lt;x y&gt;
 </p><p>&lt;x.y&gt;
 </p><p>&lt;x-y&gt;
@@ -18479,36 +18783,36 @@ a>b
 # https://bugzilla.wikimedia.org/show_bug.cgi?id=17663)
 !! test
 Tag names followed by punctuation should not be recognized as tags
-!! input
+!! wikitext
 <s.ome> text
-!! result
+!! html
 <p>&lt;s.ome&gt; text
 </p>
 !! end
 
 !! test
 HTML tag with necessary entities in attributes
-!! input
+!! wikitext
 <span title="&amp;amp;">foo</span>
-!! result
+!! html
 <p><span title="&amp;amp;">foo</span>
 </p>
 !! end
 
 !! test
 HTML tag with 'unnecessary' entity encoding in attributes
-!! input
+!! wikitext
 <span title="&amp;">foo</span>
-!! result
+!! html
 <p><span title="&amp;">foo</span>
 </p>
 !! end
 
 !! test
 HTML tag with broken attribute value quoting
-!! input
+!! wikitext
 <span title="Hello world>Foo</span>
-!! result
+!! html
 <p><span>Foo</span>
 </p>
 !! end
@@ -18517,20 +18821,20 @@ HTML tag with broken attribute value quoting
 Parsoid-only: HTML tag with broken attribute value quoting
 !! options
 parsoid
-!! input
+!! wikitext
 <span title="Hello world>Foo</span>
-!! result
+!! html
 <p><span title="Hello world">Foo</span>
 </p>
 !! end
 
 !! test
 Table with broken attribute value quoting
-!! input
+!! wikitext
 {|
 | title="Hello world|Foo
 |}
-!! result
+!! html
 <table>
 <tr>
 <td>Foo
@@ -18540,12 +18844,12 @@ Table with broken attribute value quoting
 
 !! test
 Table with broken attribute value quoting on consecutive lines
-!! input
+!! wikitext
 {|
 | title="Hello world|Foo
 | style="color:red|Bar
 |}
-!! result
+!! html
 <table>
 <tr>
 <td>Foo
@@ -18559,12 +18863,12 @@ Table with broken attribute value quoting on consecutive lines
 Parsoid-only: Table with broken attribute value quoting on consecutive lines
 !! options
 parsoid
-!! input
+!! wikitext
 {|
 | title="Hello world|Foo
 | style="color:red|Bar
 |}
-!! result
+!! html
 <table><tbody>
 <tr>
 <td title="Hello world">Foo
@@ -18577,9 +18881,9 @@ parsoid
 Parsoid-only: Don't wrap broken template tags in <nowiki> on wt2wt (Bug 42353)
 !! options
 parsoid
-!! input
+!! wikitext
 {{}}
-!! result
+!! html
 {{}}
 !! end
 
@@ -18587,19 +18891,19 @@ parsoid
 Parsoid-only: Don't wrap broken template tags in <nowiki> on wt2wt (Bug 42353)
 !! options
 parsoid
-!! input
+!! wikitext
 }}{{
-!! result
+!! html
 }}{{
 !! end
 
 !!test
 Accept empty td cell attribute
-!!input
+!! wikitext
 {|
 | align="center" | foo ||  |
 |}
-!!result
+!! html
 <table>
 <tr>
 <td align="center"> foo </td>
@@ -18610,11 +18914,11 @@ Accept empty td cell attribute
 
 !!test
 Non-empty attributes in th-cells
-!!input
+!! wikitext
 {|
 ! Foo !! style="color: red" | Bar
 |}
-!!result
+!! html
 <table>
 <tr>
 <th> Foo </th>
@@ -18625,11 +18929,11 @@ Non-empty attributes in th-cells
 
 !!test
 Accept empty attributes in th-cells
-!!input
+!! wikitext
 {|
 !| foo !!| bar
 |}
-!!result
+!! html
 <table>
 <tr>
 <th> foo </th>
@@ -18640,14 +18944,14 @@ Accept empty attributes in th-cells
 
 !!test
 Empty table rows go away
-!!input
+!! wikitext
 {|
 | Hello
 | there
 |- class="foo"
 |-
 |}
-!! result
+!! html
 <table>
 <tr>
 <td> Hello
@@ -18667,11 +18971,11 @@ Empty table rows go away
 
 !!test
 RT-ed inter-element separators should be valid separators
-!!input
+!! wikitext
 {|
 |- [[foo]]
 |}
-!!result
+!! html
 <table>
 
 </table>
@@ -18683,7 +18987,7 @@ Trailing newlines in a deep dom-subtree that ends a wikitext line should be migr
 (Parsoid-only since PHP parser relies on Tidy for correct output)
 !!options
 parsoid
-!!input
+!! wikitext
 {|
 |<small>foo
 bar
@@ -18692,18 +18996,18 @@ bar
 {|
 |<small>foo<small>
 |}
-!!result
+!! html
 !!end
 
 !!test
 Empty TD followed by TD with tpl-generated attribute
-!!input
+!! wikitext
 {|
 |-
 |
 |{{echo|style='color:red'}}|foo
 |}
-!!result
+!! html
 <table>
 
 <tr>
@@ -18716,13 +19020,13 @@ Empty TD followed by TD with tpl-generated attribute
 
 !!test
 Indented table with an empty td
-!!input
+!! wikitext
  {|
  |-
  |
  |foo
  |}
-!!result
+!! html
 <table>
 
 <tr>
@@ -18738,12 +19042,12 @@ Empty TR followed by a template-generated TR
 (Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext)
 !!options
 parsoid
-!!input
+!! wikitext
 {|
 |-
 {{echo|<tr><td>foo</td></tr>}}
 |}
-!!result
+!! html
 <table>
 <tbody>
 <tr></tr>
@@ -18758,14 +19062,14 @@ parsoid
 Empty TR followed by mixed-ws-comment line should RT correctly
 !!options
 parsoid
-!!input
+!! wikitext
 {|
 |-
  <!--c-->
 |-
 <!--c--> <!--d-->
 |}
-!!result
+!! html
 <table>
 <tbody>
 <tr></tr>
@@ -18780,10 +19084,10 @@ parsoid
 Multi-line image caption generated by templates with/without trailing newlines
 !!options
 parsoid
-!!input
+!! wikitext
 [[File:foo.jpg|thumb|300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}]]
 [[File:foo.jpg|thumb|300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}\n\n]]
-!!result
+!! html
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=Special:Upload&amp;wpDestFile=Foo.jpg" class="new" title="File:Foo.jpg">File:Foo.jpg</a>  <div class="thumbcaption">foo\nA\nB\nC</div></div></div>
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=Special:Upload&amp;wpDestFile=Foo.jpg" class="new" title="File:Foo.jpg">File:Foo.jpg</a>  <div class="thumbcaption">foo\nA\nB\nC\n\n</div></div></div>
 
@@ -18795,10 +19099,10 @@ parsoid
 Improperly nested inline or quotes tags with whitespace in between
 !!options
 parsoid
-!!input
+!! wikitext
 <span> <s>x</span> </s>
 ''' ''x''' ''
-!!result
+!! html
 <p><span> <s>x</s></span><s> </s>
 <b> <i>x</i></b><i> </i>
 </p>
@@ -18808,9 +19112,9 @@ parsoid
 Encapsulate protected attributes from wt
 !!options
 parsoid
-!!input
+!! wikitext
 <div typeof="mw:placeholder stuff" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true">foo</div>
-!!result
+!! html
 <body><div data-x-typeof="mw:placeholder stuff" data-x-data-parsoid="weird" data-x-data-parsoid-other="no" data-x-about="time" data-x-rel="mw:true">foo</div>
 </body>
 !!end
@@ -18822,32 +19126,50 @@ parsoid
 Ensure ParagraphWrapper can deal with stray closing pre tags
 !!options
 parsoid=wt2html
-!!input
+!! wikitext
 plain text</pre>
-!!result
+!! html
 plain text
 !!end
 
 !!test
-Ensure fostered text content is wrapped in spans
+1. Ensure fostered text content is wrapped in spans
 !!options
 parsoid=wt2html
-!!input
+!! wikitext
 <table>hi</table><table>ho</table>
-!!result
+!! html
 <span>hi</span>
 <table></table>
 <span>ho</span>
 <table></table>
 !!end
 
+!!test
+2. Ensure fostered text content is wrapped in spans (traps regressions around fostered marker on the span getting lost)
+!!options
+parsoid=wt2html,wt2wt
+!! wikitext
+<table>
+<tr> || ||
+<td> a
+</table>
+!! html
+<span> || ||</span>
+<table>
+<tbody>
+<tr>
+<td> a</td></tr>
+</tbody></table>
+!!end
+
 !!test
 Encapsulation properly handles null DSR information from foster box
 !!options
 parsoid=wt2html,wt2wt
-!!input
+!! wikitext
 {{echo|<table>foo<tr><td>bar</td></tr></table>}}
-!!result
+!! html
 <span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;
 <table>foo
 <tr>
@@ -18862,9 +19184,9 @@ parsoid=wt2html,wt2wt
 1. Encapsulate foster-parented transclusion content
 !!options
 parsoid=wt2wt,wt2html
-!!input
+!! wikitext
 <table>{{echo|foo<tr><td>bar</td></tr>}}</table>
-!!result
+!! html
 <span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
 <table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo
 <tr>
@@ -18879,9 +19201,9 @@ parsoid=wt2wt,wt2html
 2. Encapsulate foster-parented transclusion content
 !!options
 parsoid=wt2wt,wt2html
-!!input
+!! wikitext
 <table><div>{{echo|foo}}</div><tr><td>bar</td></tr></table>
-!!result
+!! html
 <div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
 <table>
 <div>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo&quot;}},&quot;i&quot;:0}},&quot;</div>
@@ -18897,9 +19219,9 @@ parsoid=wt2wt,wt2html
 3. Encapsulate foster-parented transclusion content
 !!options
 parsoid=wt2wt,wt2html
-!!input
+!! wikitext
 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
-!!result
+!! html
 <div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
 <table>
 <div>
@@ -18917,9 +19239,9 @@ parsoid=wt2wt,wt2html
 4. Encapsulate foster-parented transclusion content
 !!options
 parsoid=wt2wt,wt2html
-!!input
+!! wikitext
 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
-!!result
+!! html
 <div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
 <table>
 <div>
@@ -18937,9 +19259,9 @@ parsoid=wt2wt,wt2html
 5. Encapsulate foster-parented transclusion content
 !!options
 parsoid=wt2wt,wt2html
-!!input
+!! wikitext
 <table><tr><td><div><p>{{echo|foo</p></div></td>foo}}</tr></table>
-!!result
+!! html
 <span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
 <table>
 <tr>
@@ -18958,9 +19280,9 @@ parsoid=wt2wt,wt2html
 6. Encapsulate foster-parented transclusion content
 !!options
 parsoid=wt2wt,wt2html
-!!input
+!! wikitext
 <table><tr><td><div><p>{{echo|foo</p></div></td>foo</tr></table>}}<p>ok</p>
-!!result
+!! html
 <span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
 <table>
 <tr>
@@ -18980,9 +19302,9 @@ parsoid=wt2wt,wt2html
 7. Encapsulate foster-parented transclusion content
 !!options
 parsoid=wt2wt,wt2html
-!!input
+!! wikitext
 <table>{{echo|<p>foo</p>}}<td>bar</td></table>
-!!result
+!! html
 <p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
 <table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;
 <p>foo</p>&quot;}},&quot;i&quot;:0}},&quot;
@@ -18997,13 +19319,13 @@ parsoid=wt2wt,wt2html
 8. Encapsulate foster-parented transclusion content
 !!options
 parsoid=wt2wt,wt2html
-!!input
+!! wikitext
 {{echo|a
 }}{|{{echo|style='color:red'}}
 |-
 |b
 |}
-!!result
+!! html
 <p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a\n&quot;}},&quot;i&quot;:0}}]}">a</p><span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;{|&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;style&quot;:{&quot;wt&quot;:&quot;'color:red'&quot;}},&quot;i&quot;:0}},&quot;\n|-\n|b\n|}&quot;]}">{{{1}}}</span>
 <table>
 <tbody>
@@ -19015,22 +19337,32 @@ parsoid=wt2wt,wt2html
 Table in fosterable position
 !!options
 parsoid=wt2html,wt2wt
-!!input
+!! wikitext
 {{OpenTable}}
 <div>
 {|
 |}
 </div>
 |}
-!!result
-<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"OpenTable","href":"./Template:OpenTable"},"params":{},"i":0}},"\n&lt;div>"]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"dsr":[0,19,null,null],"src":"{{OpenTable}}\n&lt;div>","pi":[[]]}'></div><span about="#mwt1" data-parsoid="{}">
+!! html
+<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"OpenTable","href":"./Template:OpenTable"},"params":{},"i":0}},"\n&lt;div>"]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[]]}'></div><span about="#mwt1" data-parsoid="{}">
 </span>
-<table about="#mwt1" data-parsoid='{"autoInsertedEnd":true,"dsr":[null,19,2,0]}'></table>
+<table about="#mwt1" data-parsoid='{"autoInsertedEnd":true}'></table>
 
-<table data-parsoid='{"dsr":[20,25,2,2]}'>
+<table>
 </table>
 !!end
 
+!!test
+Support <object> element with .data attribute
+!!options
+parsoid=html2wt
+!! wikitext
+<object data="test.swf"></object>
+!! html
+<object data="test.swf"></object>
+!!end
+
 # -----------------------------------------------------------------
 # The following section of tests are primarily to spec requirements
 # around serialization of new/edited content.
@@ -19039,34 +19371,143 @@ parsoid=wt2html,wt2wt
 # ----------------------------------------------------------------
 
 !! test
-Image: Modifying size of an image
+Image: Modifying size of an image (1)
+!! options
+parsoid=html2wt
+!! wikitext
+[[Image:Foobar.jpg|200x200px]]
+!! html
+<p><span typeof="mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"230x230px"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/230px-Foobar.jpg" height="22" width="200" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"26","width":"230"},"sa":{"resource":"Image:Foobar.jpg"}}'/></a></span></p>
+!!end
+
+!! test
+Image: Modifying size of an image (2)
+!! options
+parsoid=html2wt
+!! wikitext
+[[Image:Foobar.jpg|500x500px]]
+!! html
+<p><span typeof="mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"230x230px"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/230px-Foobar.jpg" height="100" width="500" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"26","width":"230"},"sa":{"resource":"Image:Foobar.jpg"}}'/></a></span></p>
+!!end
+
+# note that the data-parsoid value conflicts with the figure's class
+!! test
+Image: Modifying alignment of an image (bug 48665)
+!! options
+parsoid=html2wt
+!! wikitext
+[[Image:Foobar.jpg|thumb|caption|left]]
+!! html
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"caption"},{"ck":"right","ak":"right"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="20" width="180" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"20","width":"180"},"sa":{"resource":"Image:Foobar.jpg"}}'/></a><figcaption>caption</figcaption></figure>
+!! end
+
+!! test
+Image: Modifying valign of an image (bug 49221)
+!! options
+parsoid=html2wt
+!! wikitext
+[[File:Foobar.jpg|20px|text-top]]
+!! html
+<p><span class="mw-valign-text-top" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"20px"},{"ck":"text_top","ak":"text-top"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg" height="2" width="20" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"2","width":"20"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+!! end
+
+!! test
+Image: Modifying alt attribute of an image (bug 56400)
 !! options
 parsoid=html2wt
-!! input
-[[Image:Wiki.png|230x230px]]
-!! result
-<p data-parsoid='{"dsr":[0,24,0,0]}'><span typeof="mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"100px"}],"cacheKey":"[[Image:Wiki.png|100px]]","img":{"h":115,"w":100,"wdset":true},"dsr":[0,24,null,null]}'><a href="./File:Wiki.png" data-parsoid='{"a":{"href":"./File:Wiki.png"}}'><img resource="./File:Wiki.png" src="//upload.wikimedia.org/wikipedia/en/thumb/b/bc/Wiki.png/100px-Wiki.png" height="230" width="200" data-parsoid='{"a":{"resource":"./File:Wiki.png"},"sa":{"resource":"Image:Wiki.png"}}'></a></span></p>
+!! wikitext
+[[File:Foobar.jpg|thumb|some caption|alt=some alternate edited text]]
+!! html
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"some caption"},{"ck":"alt","ak":"alt=some alternate text"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img alt="some alternate edited text" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="20" width="180" data-parsoid='{"a":{"alt":"some alternate edited text","resource":"./File:Foobar.jpg","height":"20","width":"180"},"sa":{"alt":"alt=some alternate edited text","resource":"File:Foobar.jpg"}}'/></a><figcaption>some caption</figcaption></figure>
 !!end
 
 !! test
-Image: New block level image should have \n before and after
+Image: Modifying caption of an image
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
+[[Image:Foobar.jpg|thumb|new caption]]
+!! html
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"original caption"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="20" width="180" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"20","width":"180"},"sa":{"resource":"Image:Foobar.jpg"}}'/></a><figcaption>new caption</figcaption></figure>
+!!end
+
+!! test
+Image: empty alt attribute (bug 48924)
+!! options
+parsoid
+!! wikitext
+[[File:Foobar.jpg|thumb|alt=|bar]]
+!! html
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"alt","ak":"alt="},{"ck":"caption","ak":"bar"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img alt="" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" height="25" width="220" data-parsoid='{"a":{"alt":"","resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"alt":"alt=","resource":"File:Foobar.jpg"}}'/></a><figcaption>bar</figcaption></figure>
+!! end
+
+#!! test
+#Image: new attributes should be serialized in wiki's language for RTL languages (bug 51852)
+#!! options
+#parsoid=html2wt
+#language=ar
+#!! input
+#[[Imagen:Foobar.jpg|derecha|miniaturadeimagen]]
+#!! result
+#<figure class="mw-default-size mw-halign-right" typeof="mw:Image/Thumb"><a href="Imagen:Foobar.jpg"><img resource="./Imagen:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="20" width="180"/></a></figure>
+#!! end
+
+!! test
+Image: Block level image should have \n before and after
+!! options
+parsoid
+!! wikitext
+123
+[[File:Foobar.jpg|right|thumb|150x150px]]
+456
+!! html
+<p>123</p><figure typeof="mw:Image/Thumb" class="mw-halign-right"><a href="./File:Foobar.png"><img src="http://192.168.142.128/mw/images/thumb/b/bc/Foobar.png/131px-Foobar.png" width="131" height="150" resource="./File:Foobar.png" data-parsoid='{"a":{"resource":"./File:Foobar.png","width":"131"},"sa":{"resource":"File:Foobar.png","width":"150"}}'></a></figure><p>456</p>
+!!end
+
+!! test
+Image: New block level image should have \n before and after (existing
+content)
+!! options
+parsoid
+!! wikitext
 123
-[[File:Wiki.png|right|thumb|150x150px]]
+[[File:Foobar.jpg|right|thumb|150x150px]]
 456
-!! result
-<p>123</p><figure typeof="mw:Image/Thumb" class="mw-halign-right"><a href="./File:Wiki.png"><img src="http://192.168.142.128/mw/images/thumb/b/bc/Wiki.png/131px-Wiki.png" width="131" height="150" resource="./File:Wiki.png"></a></figure><p>456</p>
+!! html
+<p data-parsoid='{"dsr":[0,3,0,0]}'>123</p>
+<figure class="mw-halign-right" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"right","ak":"right"},{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"150x150px"}],"dsr":[4,45,2,2]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"dsr":[6,43,null,null]}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/150px-Foobar.jpg" height="17" width="150" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"17","width":"150"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></figure>
+<p data-parsoid='{"dsr":[46,49,0,0]}'>456</p>
+!!end
+
+!! test
+Images: upright option (parsoid)
+!! options
+parsoid
+!! wikitext
+[[File:Foobar.jpg|thumb|upright|caption]]
+[[File:Foobar.jpg|thumb|upright=0.5|caption]]
+[[File:Foobar.jpg|thumb|500x500px|upright=0.5|caption]]
+!! html
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="19" width="170"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="19" width="170"/></a><figcaption>caption</figcaption></figure><figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="57" width="500"/></a><figcaption>caption</figcaption></figure>
+!!end
+
+!! test
+Images: upright option is ignored on inline and frame images (parsoid)
+!! options
+parsoid
+!! wikitext
+[[File:Foobar.jpg|500x500px|upright=0.5|caption]]
+!! html
+<p><span typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="57" width="500"/></a></span></p>
 !!end
 
 !! test
 Lists: Serialize correctly even when list content is wrapped in p-tags (like VE does)
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 * foo
-!! result
+!! html
 <ul>
 <li><p>foo</p></li>
 </ul>
@@ -19076,9 +19517,9 @@ parsoid=html2wt
 Lists: Serialize correctly even when list tags has unneeded whitespace between tags
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 * foo
-!! result
+!! html
 <ul> <li>foo</li></ul>
 !! end
 
@@ -19086,7 +19527,7 @@ parsoid=html2wt
 Don't strip leading whitespace when handling indent-pre suppressing tags
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 {|
   | indented row
 |}
@@ -19100,7 +19541,7 @@ parsoid=html2wt
 </blockquote>
 foo
  <div>bar</div>
-!! result
+!! html
 <table>
   <tr><td> indented row</td></tr>
 </table>
@@ -19119,7 +19560,7 @@ foo
 Strip leading whitespace when handling indent-pre inducing tags
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 foo
 <span>bar</span>
 
@@ -19132,7 +19573,7 @@ foo
 <div>
 <span>foo</span>
 </div>
-!! result
+!! html
 <p>foo</p>
  <span>bar</span>
 
@@ -19151,11 +19592,11 @@ foo
 Lists: Add space after bullets
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 * foo
 * bar
 * <span> baz</span>
-!! result
+!! html
 <ul>
 <li>foo</li>
 <li> bar</li>
@@ -19163,11 +19604,22 @@ parsoid=html2wt
 </ul>
 !! end
 
+!! test
+Lists: Dont insert newlines in a serialized list item.
+!! options
+parsoid=html2wt
+!! wikitext
+* a<br>b
+* c
+!! html
+<ul><li>a<br>b</li><li>c</li></ul>
+!! end
+
 !! test
 Headings: Add space before/after == (Bug 51744)
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 == foo ==
 
 == bar ==
@@ -19175,7 +19627,7 @@ parsoid=html2wt
 == baz ==
 
 == <span> baz</span> ==
-!! result
+!! html
 <h2>foo</h2>
 <h2> bar</h2>
 <h2>baz </h2>
@@ -19186,7 +19638,7 @@ parsoid=html2wt
 Parsoid: Serialize positional parameters with = in them as named parameter
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 {{echo|1 = f=oo}}
 
 {{echo|1 = f=oo|2 = bar}}
@@ -19194,7 +19646,7 @@ parsoid=html2wt
 <!--Orig params with data-parsoid has heuristics for handling = chars-->
 <!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
 {{echo|<nowiki>f=oo</nowiki>|bar}}
-!! result
+!! html
 <p about="#mwt1" typeof="mw:Transclusion"
 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"}},"i":0}}]}'>foo</p>
 
@@ -19210,7 +19662,7 @@ data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},
 Parsoid: Correctly serialize block-node children when they are a combination of text and p-nodes
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 <div>a
 b
 </div>
 
 b
 </div>
-!! result
+!! html
 <div>a<p>b</p></div>
 <div>a
 <p>b</p></div>
 1. I/B quote minimization: wikitext-only tags should be combined
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 ''AB''
 
 '''AB'''
@@ -19255,7 +19707,7 @@ parsoid=html2wt
 '''''AB'''''
 
 '''''AB'''''
-!! result
+!! html
 <p><i>A</i><i>B</i></p>
 <p><b>A</b><b>B</b></p>
 <p><i>A</i><b><i>B</i></b></p>
@@ -19270,11 +19722,11 @@ parsoid=html2wt
 2. I/B quote minimization: wikitext and html tags should not be combined
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 ''A''<i>B</i>
 
 ''A'''''<i>B</i>'''
-!! result
+!! html
 <p><i>A</i><i data-parsoid='{"stx":"html"}'>B</i></p>
 <p><i>A</i><b><i data-parsoid='{"stx":"html"}'>B</i></b></p>
 !! end
@@ -19283,11 +19735,11 @@ parsoid=html2wt
 3. I/B quote minimization: templated content stops minimization
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 ''A''{{echo|''B''}}
 
 ''A''{{echo|'''''B'''''}}
-!! result
+!! html
 <p><i>A</i><i about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;B&#39;&#39;"}},"i":0}}]}'>B</i>
 <p><i>A</i><b about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;&#39;&#39;&#39;B&#39;&#39;&#39;&#39;&#39;"}},"i":0}}]}'><i>B</i></b>
 !! end
@@ -19296,13 +19748,13 @@ parsoid=html2wt
 4. I/B quote minimization: new content should be mimimized with adjacent old content
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 ''AB''
 
 '''AB'''
 
 ''A'''B'''''
-!! result
+!! html
 <p><i>A</i><i data-parsoid='{}'>B</i></p>
 <p><b data-parsoid='{}'>A</b><b>B</b></p>
 <p><i>A</i><b data-parsoid='{}'><i data-parsoid='{}'>B</i></b></p>
@@ -19316,9 +19768,9 @@ parsoid=html2wt
 Bug 54262: New entities
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 foo
-!! result
+!! html
 <span typeof="mw:Entity">foo</span>
 !! end
 
@@ -19329,7 +19781,7 @@ foo
 Magic words
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 __TOC__
 __NOTOC__
 __FORCETOC__
@@ -19339,7 +19791,7 @@ __NOGALLERY__
 __NOEDITSECTION__
 __NOTITLECONVERT__
 __NOCONTENTCONVERT__
-!! result
+!! html
 <meta property='mw:PageProp/toc' />
 <meta property='mw:PageProp/notoc' />
 <meta property='mw:PageProp/forcetoc' />
@@ -19356,7 +19808,7 @@ __NOCONTENTCONVERT__
 Consecutive <pre>s should not get merged
 !! options
 parsoid=html2wt,html2html
-!! input
+!! wikitext
  a
 
  b
@@ -19370,7 +19822,7 @@ parsoid=html2wt,html2html
 
  
  f
-!! result
+!! html
 <pre>a</pre><pre>b</pre>
 
 <pre>c
@@ -19388,9 +19840,9 @@ f</pre>
 Edited ISBN links not serializable as ISBN links should serialize as wikilinks
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 [[Special:BookSources/1234567890|ISBN 1234567895]]
-!! result
+!! html
 <a rel="mw:ExtLink" href="./Special:BookSources/1234567890">ISBN 1234567895</a>
 !! end
 
@@ -19398,9 +19850,9 @@ parsoid=html2wt
 Edited RFC links not serializable as RFC links should serialize as extlinks
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 [//tools.ietf.org/html/rfc123 New RFC]
-!! result
+!! html
 <a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink">New RFC</a>
 !! end
 
@@ -19408,12 +19860,22 @@ parsoid=html2wt
 Edited PMID links not serializable as PMID links should serialize as extlinks
 !! options
 parsoid=html2wt
-!! input
+!! wikitext
 [//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract New PMID]
-!! result
+!! html
 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink">New PMID</a>
 !! end
 
+!! test
+Edited Redirect link should emit a non-piped wikitext link
+!! options
+parsoid=html2wt
+!! wikitext
+#REDIRECT [[Bar]]
+!! html
+<link rel="mw:PageProp/redirect" href="Bar" data-parsoid='{"src":"#REDIRECT ","a":{"href":"./Foo"},"sa":{"href":"Foo"}}'>
+!! end
+
 # -----------------------------------------------------------------
 # End of section for Parsoid-only html2wt tests for serialization
 # of new content
index debb357..d7e8b86 100644 (file)
@@ -3,7 +3,7 @@
  * MediaWiki parser test suite
  *
  * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 87e214c..277826c 100644 (file)
@@ -1,9 +1,9 @@
 <?php
 
+/**
+ * @since 1.18
+ */
 abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
-       public $suite;
-       public $regex = '';
-       public $runDisabled = false;
 
        /**
         * $called tracks whether the setUp and tearDown method has been called.
@@ -20,14 +20,21 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        private $called = array();
 
        /**
-        * @var Array of TestUser
+        * @var TestUser[]
+        * @since 1.20
         */
        public static $users;
 
        /**
         * @var DatabaseBase
+        * @since 1.18
         */
        protected $db;
+
+       /**
+        * @var array
+        * @since 1.19
+        */
        protected $tablesUsed = array(); // tables with data
 
        private static $useTemporaryTables = true;
@@ -48,7 +55,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *
         * @var array
         */
-       private $tmpfiles = array();
+       private $tmpFiles = array();
 
        /**
         * Holds original values of MediaWiki configuration settings
@@ -64,6 +71,10 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        const DB_PREFIX = 'unittest_';
        const ORA_DB_PREFIX = 'ut_';
 
+       /**
+        * @var array
+        * @since 1.18
+        */
        protected $supportedDBs = array(
                'mysql',
                'sqlite',
@@ -71,14 +82,14 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                'oracle'
        );
 
-       function __construct( $name = null, array $data = array(), $dataName = '' ) {
+       public function __construct( $name = null, array $data = array(), $dataName = '' ) {
                parent::__construct( $name, $data, $dataName );
 
                $this->backupGlobals = false;
                $this->backupStaticAttributes = false;
        }
 
-       function run( PHPUnit_Framework_TestResult $result = null ) {
+       public function run( PHPUnit_Framework_TestResult $result = null ) {
                /* Some functions require some kind of caching, and will end up using the db,
                 * which we can't allow, as that would open a new connection for mysql.
                 * Replace with a HashBag. They would not be going to persist anyway.
@@ -130,22 +141,29 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                }
        }
 
-       function usesTemporaryTables() {
+       /**
+        * @since 1.21
+        *
+        * @return bool
+        */
+       public function usesTemporaryTables() {
                return self::$useTemporaryTables;
        }
 
        /**
-        * obtains a new temporary file name
+        * Obtains a new temporary file name
         *
         * The obtained filename is enlisted to be removed upon tearDown
         *
-        * @return string: absolute name of the temporary file
+        * @since 1.20
+        *
+        * @return string absolute name of the temporary file
         */
        protected function getNewTempFile() {
-               $fname = tempnam( wfTempDir(), 'MW_PHPUnit_' . get_class( $this ) . '_' );
-               $this->tmpfiles[] = $fname;
+               $fileName = tempnam( wfTempDir(), 'MW_PHPUnit_' . get_class( $this ) . '_' );
+               $this->tmpFiles[] = $fileName;
 
-               return $fname;
+               return $fileName;
        }
 
        /**
@@ -154,26 +172,24 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * The obtained directory is enlisted to be removed (recursively with all its contained
         * files) upon tearDown.
         *
-        * @return string: absolute name of the temporary directory
+        * @since 1.20
+        *
+        * @return string Absolute name of the temporary directory
         */
        protected function getNewTempDirectory() {
                // Starting of with a temporary /file/.
-               $fname = $this->getNewTempFile();
+               $fileName = $this->getNewTempFile();
 
                // Converting the temporary /file/ to a /directory/
                //
                // The following is not atomic, but at least we now have a single place,
                // where temporary directory creation is bundled and can be improved
-               unlink( $fname );
-               $this->assertTrue( wfMkdirParents( $fname ) );
+               unlink( $fileName );
+               $this->assertTrue( wfMkdirParents( $fileName ) );
 
-               return $fname;
+               return $fileName;
        }
 
-       /**
-        * setUp and tearDown should (where significant)
-        * happen in reverse order.
-        */
        protected function setUp() {
                wfProfileIn( __METHOD__ );
                parent::setUp();
@@ -181,23 +197,12 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
 
                $this->phpErrorLevel = intval( ini_get( 'error_reporting' ) );
 
-               /*
-               // @todo global variables to restore for *every* test
-               array(
-                       'wgLang',
-                       'wgContLang',
-                       'wgLanguageCode',
-                       'wgUser',
-                       'wgTitle',
-               );
-               */
-
                // Cleaning up temporary files
-               foreach ( $this->tmpfiles as $fname ) {
-                       if ( is_file( $fname ) || ( is_link( $fname ) ) ) {
-                               unlink( $fname );
-                       } elseif ( is_dir( $fname ) ) {
-                               wfRecursiveRemoveDir( $fname );
+               foreach ( $this->tmpFiles as $fileName ) {
+                       if ( is_file( $fileName ) || ( is_link( $fileName ) ) ) {
+                               unlink( $fileName );
+                       } elseif ( is_dir( $fileName ) ) {
+                               wfRecursiveRemoveDir( $fileName );
                        }
                }
 
@@ -218,11 +223,11 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                wfProfileIn( __METHOD__ );
 
                // Cleaning up temporary files
-               foreach ( $this->tmpfiles as $fname ) {
-                       if ( is_file( $fname ) || ( is_link( $fname ) ) ) {
-                               unlink( $fname );
-                       } elseif ( is_dir( $fname ) ) {
-                               wfRecursiveRemoveDir( $fname );
+               foreach ( $this->tmpFiles as $fileName ) {
+                       if ( is_file( $fileName ) || ( is_link( $fileName ) ) ) {
+                               unlink( $fileName );
+                       } elseif ( is_dir( $fileName ) ) {
+                               wfRecursiveRemoveDir( $fileName );
                        }
                }
 
@@ -269,13 +274,11 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        }
 
        /**
-        * Individual test functions may override globals (either directly or through this
-        * setMwGlobals() function), however one must call this method at least once for
-        * each key within the setUp().
-        * That way the key is added to the array of globals that will be reset afterwards
-        * in the tearDown(). And, equally important, that way all other tests are executed
-        * with the same settings (instead of using the unreliable local settings for most
-        * tests and fix it only for some tests).
+        * Sets a global, maintaining a stashed version of the previous global to be
+        * restored in tearDown
+        *
+        * The key is added to the array of globals that will be reset afterwards
+        * in the tearDown().
         *
         * @example
         * <code>
@@ -299,24 +302,61 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *  of key/value pairs.
         * @param mixed $value Value to set the global to (ignored
         *  if an array is given as first argument).
+        *
+        * @since 1.21
         */
        protected function setMwGlobals( $pairs, $value = null ) {
-
-               // Normalize (string, value) to an array
                if ( is_string( $pairs ) ) {
                        $pairs = array( $pairs => $value );
                }
 
+               $this->stashMwGlobals( array_keys( $pairs ) );
+
                foreach ( $pairs as $key => $value ) {
+                       $GLOBALS[$key] = $value;
+               }
+       }
+
+       /**
+        * Stashes the global, will be restored in tearDown()
+        *
+        * Individual test functions may override globals through the setMwGlobals() function
+        * or directly. When directly overriding globals their keys should first be passed to this
+        * method in setUp to avoid breaking global state for other tests
+        *
+        * That way all other tests are executed with the same settings (instead of using the
+        * unreliable local settings for most tests and fix it only for some tests).
+        *
+        * @param array|string $globalKeys Key to the global variable, or an array of keys.
+        *
+        * @throws Exception when trying to stash an unset global
+        * @since 1.23
+        */
+       protected function stashMwGlobals( $globalKeys ) {
+               if ( is_string( $globalKeys ) ) {
+                       $globalKeys = array( $globalKeys );
+               }
+
+               foreach ( $globalKeys as $globalKey ) {
                        // NOTE: make sure we only save the global once or a second call to
                        // setMwGlobals() on the same global would override the original
                        // value.
-                       if ( !array_key_exists( $key, $this->mwGlobals ) ) {
-                               $this->mwGlobals[$key] = $GLOBALS[$key];
+                       if ( !array_key_exists( $globalKey, $this->mwGlobals ) ) {
+                               if ( !array_key_exists( $globalKey, $GLOBALS ) ) {
+                                       throw new Exception( "Global with key {$globalKey} doesn't exist and cant be stashed" );
+                               }
+                               // NOTE: we serialize then unserialize the value in case it is an object
+                               // this stops any objects being passed by reference. We could use clone
+                               // and if is_object but this does account for objects within objects!
+                               try {
+                                       $this->mwGlobals[$globalKey] = unserialize( serialize( $GLOBALS[$globalKey] ) );
+                               }
+                                       // NOTE; some things such as Closures are not serializable
+                                       // in this case just set the value!
+                               catch( Exception $e ) {
+                                       $this->mwGlobals[$globalKey] = $GLOBALS[$globalKey];
+                               }
                        }
-
-                       // Override the global
-                       $GLOBALS[$key] = $value;
                }
        }
 
@@ -325,10 +365,12 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * Useful for setting some entries in a configuration array, instead of
         * setting the entire array.
         *
-        * @param String $name The name of the global, as in wgFooBar
-        * @param Array $values The array containing the entries to set in that global
+        * @param string $name The name of the global, as in wgFooBar
+        * @param array $values The array containing the entries to set in that global
         *
         * @throws MWException if the designated global is not an array.
+        *
+        * @since 1.21
         */
        protected function mergeMwGlobalArrayValue( $name, $values ) {
                if ( !isset( $GLOBALS[$name] ) ) {
@@ -348,11 +390,19 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $this->setMwGlobals( $name, $merged );
        }
 
-       function dbPrefix() {
+       /**
+        * @return string
+        * @since 1.18
+        */
+       public function dbPrefix() {
                return $this->db->getType() == 'oracle' ? self::ORA_DB_PREFIX : self::DB_PREFIX;
        }
 
-       function needsDB() {
+       /**
+        * @return bool
+        * @since 1.18
+        */
+       public function needsDB() {
                # if the test says it uses database tables, it needs the database
                if ( $this->tablesUsed ) {
                        return true;
@@ -370,15 +420,13 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        /**
         * Stub. If a test needs to add additional data to the database, it should
         * implement this method and do so
+        *
+        * @since 1.18
         */
-       function addDBData() {
+       public function addDBData() {
        }
 
        private function addCoreDBData() {
-               # disabled for performance
-               #$this->tablesUsed[] = 'page';
-               #$this->tablesUsed[] = 'revision';
-
                if ( $this->db->getType() == 'oracle' ) {
 
                        # Insert 0 user to prevent FK violations
@@ -433,6 +481,8 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * Restores MediaWiki to using the table set (table prefix) it was using before
         * setupTestDB() was called. Useful if we need to perform database operations
         * after the test run has finished (such as saving logs or profiling info).
+        *
+        * @since 1.21
         */
        public static function teardownTestDB() {
                if ( !self::$dbSetup ) {
@@ -453,6 +503,8 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * This is used to generate a dummy table set, typically consisting of temporary
         * tables, that will be used by tests instead of the original wiki database tables.
         *
+        * @since 1.21
+        *
         * @note: the original table prefix is stored in self::$oldTablePrefix. This is used
         * by teardownTestDB() to return the wiki to using the original table set.
         *
@@ -467,7 +519,8 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        public static function setupTestDB( DatabaseBase $db, $prefix ) {
                global $wgDBprefix;
                if ( $wgDBprefix === $prefix ) {
-                       throw new MWException( 'Cannot run unit tests, the database prefix is already "' . $prefix . '"' );
+                       throw new MWException(
+                               'Cannot run unit tests, the database prefix is already "' . $prefix . '"' );
                }
 
                if ( self::$dbSetup ) {
@@ -522,17 +575,21 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                }
        }
 
-       function __call( $func, $args ) {
+       /**
+        * @since 1.18
+        *
+        * @param string $func
+        * @param array $args
+        *
+        * @return mixed
+        * @throws MWException
+        */
+       public function __call( $func, $args ) {
                static $compatibility = array(
-                       'assertInternalType' => 'assertType',
-                       'assertNotInternalType' => 'assertNotType',
-                       'assertInstanceOf' => 'assertType',
-                       'assertEmpty' => 'assertEmpty2',
+                       'assertEmpty' => 'assertEmpty2', // assertEmpty was added in phpunit 3.7.32
                );
 
-               if ( method_exists( $this->suite, $func ) ) {
-                       return call_user_func_array( array( $this->suite, $func ), $args );
-               } elseif ( isset( $compatibility[$func] ) ) {
+               if ( isset( $compatibility[$func] ) ) {
                        return call_user_func_array( array( $this, $compatibility[$func] ), $args );
                } else {
                        throw new MWException( "Called non-existant $func method on "
@@ -540,6 +597,9 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                }
        }
 
+       /**
+        * Used as a compatibility method for phpunit < 3.7.32
+        */
        private function assertEmpty2( $value, $msg ) {
                return $this->assertTrue( $value == '', $msg );
        }
@@ -554,6 +614,13 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                return strpos( $table, 'unittest_' ) !== 0;
        }
 
+       /**
+        * @since 1.18
+        *
+        * @param DataBaseBase $db
+        *
+        * @return array
+        */
        public static function listTables( $db ) {
                global $wgDBprefix;
 
@@ -581,31 +648,41 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                return $tables;
        }
 
+       /**
+        * @throws MWException
+        * @since 1.18
+        */
        protected function checkDbIsSupported() {
                if ( !in_array( $this->db->getType(), $this->supportedDBs ) ) {
                        throw new MWException( $this->db->getType() . " is not currently supported for unit testing." );
                }
        }
 
+       /**
+        * @since 1.18
+        */
        public function getCliArg( $offset ) {
-
                if ( isset( MediaWikiPHPUnitCommand::$additionalOptions[$offset] ) ) {
                        return MediaWikiPHPUnitCommand::$additionalOptions[$offset];
                }
        }
 
+       /**
+        * @since 1.18
+        */
        public function setCliArg( $offset, $value ) {
-
                MediaWikiPHPUnitCommand::$additionalOptions[$offset] = $value;
        }
 
        /**
         * Don't throw a warning if $function is deprecated and called later
         *
-        * @param $function String
+        * @since 1.19
+        *
+        * @param string $function
         * @return null
         */
-       function hideDeprecated( $function ) {
+       public function hideDeprecated( $function ) {
                wfSuppressWarnings();
                wfDeprecated( $function );
                wfRestoreWarnings();
@@ -619,12 +696,12 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *
         * @since 1.20
         *
-        * @param $table String|Array the table(s) to query
-        * @param $fields String|Array the columns to include in the result (and to sort by)
-        * @param $condition String|Array "where" condition(s)
-        * @param $expectedRows Array - an array of arrays giving the expected rows.
+        * @param string|array $table The table(s) to query
+        * @param string|array $fields The columns to include in the result (and to sort by)
+        * @param string|array $condition "where" condition(s)
+        * @param array $expectedRows An array of arrays giving the expected rows.
         *
-        * @throws MWException if this test cases's needsDB() method doesn't return true.
+        * @throws MWException If this test cases's needsDB() method doesn't return true.
         *         Test cases can use "@group Database" to enable database test support,
         *         or list the tables under testing in $this->tablesUsed, or override the
         *         needsDB() method.
@@ -687,8 +764,8 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *
         * @param array $expected
         * @param array $actual
-        * @param boolean $ordered If the order of the values should match
-        * @param boolean $named If the keys should match
+        * @param bool $ordered If the order of the values should match
+        * @param bool $named If the keys should match
         */
        protected function assertArrayEquals( array $expected, array $actual, $ordered = false, $named = false ) {
                if ( !$ordered ) {
@@ -715,9 +792,9 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *
         * @since 1.20
         *
-        * @param String $expected HTML on oneline
-        * @param String $actual HTML on oneline
-        * @param String $msg Optional message
+        * @param string $expected HTML on oneline
+        * @param string $actual HTML on oneline
+        * @param string $msg Optional message
         */
        protected function assertHTMLEquals( $expected, $actual, $msg = '' ) {
                $expected = str_replace( '>', ">\n", $expected );
@@ -749,7 +826,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *
         * @since 1.20
         *
-        * @param $r mixed the array to remove string keys from.
+        * @param mixed $r The array to remove string keys from.
         */
        protected static function stripStringKeys( &$r ) {
                if ( !is_array( $r ) ) {
@@ -824,9 +901,9 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
 
        /**
         * Returns the ID of a namespace that defaults to Wikitext.
-        * Throws an MWException if there is none.
         *
-        * @return int the ID of the wikitext Namespace
+        * @throws MWException If there is none.
+        * @return int The ID of the wikitext Namespace
         * @since 1.21
         */
        protected function getDefaultWikitextNS() {
@@ -973,8 +1050,10 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * then calls assertValidHtmlDocument().
         * The snippet is expected to be HTML 5.
         *
-        * @note: Will mark the test as skipped if the "tidy" module is not installed.
-        * @note: This ignores $wgUseTidy, so we can check for valid HTML even (and especially)
+        * @since 1.23
+        *
+        * @note Will mark the test as skipped if the "tidy" module is not installed.
+        * @note This ignores $wgUseTidy, so we can check for valid HTML even (and especially)
         *        when automatic tidying is disabled.
         *
         * @param string $html An HTML snippet (treated as the contents of the body tag).
@@ -987,8 +1066,10 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        /**
         * Asserts that the given string is valid HTML document.
         *
-        * @note: Will mark the test as skipped if the "tidy" module is not installed.
-        * @note: This ignores $wgUseTidy, so we can check for valid HTML even (and especially)
+        * @since 1.23
+        *
+        * @note Will mark the test as skipped if the "tidy" module is not installed.
+        * @note This ignores $wgUseTidy, so we can check for valid HTML even (and especially)
         *        when automatic tidying is disabled.
         *
         * @param string $html A complete HTML document
@@ -1017,4 +1098,5 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
 
                $this->assertEmpty( $errors, implode( "\n", $errors ) );
        }
+
 }
diff --git a/tests/phpunit/ResourceLoaderTestCase.php b/tests/phpunit/ResourceLoaderTestCase.php
new file mode 100644 (file)
index 0000000..a03e9cc
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+
+abstract class ResourceLoaderTestCase extends MediaWikiTestCase {
+
+       protected static function getResourceLoaderContext() {
+               $resourceLoader = new ResourceLoader();
+               $request = new FauxRequest( array(
+                               'debug' => 'true',
+                               'lang' => 'en',
+                               'modules' => 'startup',
+                               'only' => 'scripts',
+                               'skin' => 'vector',
+                               'target' => 'test',
+               ) );
+               return new ResourceLoaderContext( $resourceLoader, $request );
+       }
+
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( array(
+                       // For ResourceLoader::inDebugMode since it doesn't have context
+                       'wgResourceLoaderDebug' => true,
+
+                       // Avoid influence from wgInvalidateCacheOnLocalSettingsChange
+                       'wgCacheEpoch' => '20140101000000',
+
+                       // For ResourceLoader::__construct()
+                       'wgResourceLoaderSources' => array(),
+
+                       // For wfScript()
+                       'wgScriptPath' => '/w',
+                       'wgScriptExtension' => '.php',
+                       'wgScript' => '/w/index.php',
+                       'wgLoadScript' => '/w/load.php',
+               ) );
+       }
+}
+
+/* Stubs */
+
+class ResourceLoaderTestModule extends ResourceLoaderModule {
+
+       protected $dependencies = array();
+       protected $group = null;
+       protected $source = 'local';
+       protected $targets = array( 'test' );
+
+       public function __construct( $options = array() ) {
+               foreach ( $options as $key => $value ) {
+                       $this->$key = $value;
+               }
+       }
+
+       public function getDependencies() {
+               return $this->dependencies;
+       }
+
+       public function getGroup() {
+               return $this->group;
+       }
+
+       public function getSource() {
+               return $this->source;
+       }
+}
+
+class ResourceLoaderFileModuleTestModule extends ResourceLoaderFileModule {}
index b09487a..8288cae 100644 (file)
@@ -1,39 +1,31 @@
 <?php
+
 /**
- * Test for the demo xml
+ * Test making sure the demo export xml is valid.
+ * This is NOT a unit test
  *
  * @group Dump
+ * @group large
  */
 class ExportDemoTest extends DumpTestCase {
 
-       /**
-        * @group large
-        */
-       function testExportDemo() {
-               $this->validateXmlFileAgainstXsd( "../../docs/export-demo.xml" );
-       }
-
-       /**
-        * Validates a xml file against the xsd.
-        *
-        * The validation is slow, because php has to read the xsd on each call.
-        *
-        * @param $fname string: name of file to validate
-        */
-       protected function validateXmlFileAgainstXsd( $fname ) {
+       public function testExportDemo() {
+               $fname = "../../docs/export-demo.xml";
                $version = WikiExporter::schemaVersion();
-
                $dom = new DomDocument();
                $dom->load( $fname );
 
                // Ensure, the demo is for the current version
-               $this->assertEquals( $dom->documentElement->getAttribute( 'version' ), $version, 'export-demo.xml should have the current version' );
+               $this->assertEquals(
+                       $dom->documentElement->getAttribute( 'version' ),
+                       $version,
+                       'export-demo.xml should have the current version'
+               );
 
-               try {
-                       $this->assertTrue( $dom->schemaValidate( "../../docs/export-" . $version . ".xsd" ),
-                               "schemaValidate has found an error" );
-               } catch ( Exception $e ) {
-                       $this->fail( "xml not valid against xsd: " . $e->getMessage() );
-               }
+               $this->assertTrue(
+                       $dom->schemaValidate( "../../docs/export-" . $version . ".xsd" ),
+                       "schemaValidate has found an error"
+               );
        }
+
 }
index 7f9a023..8e78da3 100644 (file)
@@ -8,28 +8,43 @@ class ArticleTablesTest extends MediaWikiLangTestCase {
        /**
         * @covers Title::getTemplateLinksFrom
         * @covers Title::getLinksFrom
+        * @todo give this test a real name explaining what is being tested here
         */
        public function testbug14404() {
-               global $wgContLang, $wgLanguageCode, $wgLang;
-
                $title = Title::newFromText( 'Bug 14404' );
                $page = WikiPage::factory( $title );
                $user = new User();
                $user->mRights = array( 'createpage', 'edit', 'purge' );
-               $wgLanguageCode = 'es';
-               $wgContLang = Language::factory( 'es' );
+               $this->setMwGlobals( 'wgLanguageCode', 'es' );
+               $this->setMwGlobals( 'wgContLang', Language::factory( 'es' ) );
+               $this->setMwGlobals( 'wgLang', Language::factory( 'fr' ) );
 
-               $wgLang = Language::factory( 'fr' );
-               $page->doEditContent( new WikitextContent( '{{:{{int:history}}}}' ), 'Test code for bug 14404', 0, false, $user );
+               $page->doEditContent(
+                       new WikitextContent( '{{:{{int:history}}}}' ),
+                       'Test code for bug 14404',
+                       0,
+                       false,
+                       $user
+               );
                $templates1 = $title->getTemplateLinksFrom();
 
-               $wgLang = Language::factory( 'de' );
-               $page = WikiPage::factory( $title ); // In order to force the rerendering of the same wikitext
+               $this->setMwGlobals( 'wgLang', Language::factory( 'de' ) );
+               $page = WikiPage::factory( $title ); // In order to force the re-rendering of the same wikitext
 
                // We need an edit, a purge is not enough to regenerate the tables
-               $page->doEditContent( new WikitextContent( '{{:{{int:history}}}}' ), 'Test code for bug 14404', EDIT_UPDATE, false, $user );
+               $page->doEditContent(
+                       new WikitextContent( '{{:{{int:history}}}}' ),
+                       'Test code for bug 14404',
+                       EDIT_UPDATE,
+                       false,
+                       $user
+               );
                $templates2 = $title->getTemplateLinksFrom();
 
+               /**
+                * @var Title[] $templates1
+                * @var Title[] $templates2
+                */
                $this->assertEquals( $templates1, $templates2 );
                $this->assertEquals( $templates1[0]->getFullText(), 'Historial' );
        }
diff --git a/tests/phpunit/includes/ExceptionTest.php b/tests/phpunit/includes/ExceptionTest.php
deleted file mode 100644 (file)
index eaef1f7..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-<?php
-/**
- * Tests for includes/Exception.php.
- *
- * @author Antoine Musso
- * @copyright Copyright © 2013, Antoine Musso
- * @copyright Copyright © 2013, Wikimedia Foundation Inc.
- * @file
- */
-
-class ExceptionTest extends MediaWikiTestCase {
-
-       /**
-        * @expectedException MWException
-        */
-       function testMwexceptionThrowing() {
-               throw new MWException();
-       }
-
-       /**
-        * Verify the exception classes are JSON serializabe.
-        *
-        * @covers MWExceptionHandler::jsonSerializeException
-        * @dataProvider provideExceptionClasses
-        */
-       function testJsonSerializeExceptions( $exception_class ) {
-               $json = MWExceptionHandler::jsonSerializeException(
-                       new $exception_class()
-               );
-               $this->assertNotEquals( false, $json,
-                       "The $exception_class exception should be JSON serializable, got false." );
-       }
-
-       function provideExceptionClasses() {
-               return array(
-                       array( 'Exception' ),
-                       array( 'MWException' ),
-               );
-       }
-
-       /**
-        * Lame JSON schema validation.
-        *
-        * @covers MWExceptionHandler::jsonSerializeException
-        *
-        * @param $expectedKeyType String Type expected as returned by gettype()
-        * @param $exClass String An exception class (ie: Exception, MWException)
-        * @param $key String Name of the key to validate in the serialized JSON
-        * @dataProvider provideJsonSerializedKeys
-        */
-       function testJsonserializeexceptionKeys( $expectedKeyType, $exClass, $key ) {
-
-               # Make sure we log a backtrace:
-               $this->setMwGlobals( array( 'wgLogExceptionBacktrace' => true ) );
-
-               $json = json_decode(
-                       MWExceptionHandler::jsonSerializeException( new $exClass())
-               );
-               $this->assertObjectHasAttribute( $key, $json,
-                       "JSON serialized exception is missing key '$key'"
-               );
-               $this->assertInternalType( $expectedKeyType, $json->$key,
-                       "JSON serialized key '$key' has type " . gettype( $json->$key )
-                       . " (expected: $expectedKeyType)."
-               );
-       }
-
-       /**
-        * Returns test cases: exception class, key name, gettype()
-        */
-       function provideJsonSerializedKeys() {
-               $testCases = array();
-               foreach ( array( 'Exception', 'MWException' ) as $exClass ) {
-                       $exTests = array(
-                               array( 'string', $exClass, 'id' ),
-                               array( 'string', $exClass, 'file' ),
-                               array( 'integer', $exClass, 'line' ),
-                               array( 'string', $exClass, 'message' ),
-                               array( 'null', $exClass, 'url' ),
-                               # Backtrace only enabled with wgLogExceptionBacktrace = true
-                               array( 'array', $exClass, 'backtrace' ),
-                       );
-                       $testCases = array_merge( $testCases, $exTests );
-               }
-               return $testCases;
-       }
-
-       /**
-        * Given wgLogExceptionBacktrace is true
-        * then serialized exception SHOULD have a backtrace
-        *
-        * @covers MWExceptionHandler::jsonSerializeException
-        */
-       function testJsonserializeexceptionBacktracingEnabled() {
-               $this->setMwGlobals( array( 'wgLogExceptionBacktrace' => true ) );
-               $json = json_decode(
-                       MWExceptionHandler::jsonSerializeException( new Exception() )
-               );
-               $this->assertObjectHasAttribute( 'backtrace', $json );
-       }
-
-       /**
-        * Given wgLogExceptionBacktrace is false
-        * then serialized exception SHOULD NOT have a backtrace
-        *
-        * @covers MWExceptionHandler::jsonSerializeException
-        */
-       function testJsonserializeexceptionBacktracingDisabled() {
-               $this->setMwGlobals( array( 'wgLogExceptionBacktrace' => false ) );
-               $json = json_decode(
-                       MWExceptionHandler::jsonSerializeException( new Exception() )
-               );
-               $this->assertObjectNotHasAttribute( 'backtrace', $json );
-
-       }
-
-}
index dc19154..3cf7abd 100644 (file)
@@ -32,17 +32,16 @@ class ExtraParserTest extends MediaWikiTestCase {
        }
 
        /**
-        * Bug 8689 - Long numeric lines kill the parser
+        * @see Bug 8689
         * @covers Parser::parse
         */
-       public function testBug8689() {
-               global $wgUser;
+       public function testLongNumericLinesDontKillTheParser() {
                $longLine = '1.' . str_repeat( '1234567890', 100000 ) . "\n";
 
-               $t = Title::newFromText( 'Unit test' );
-               $options = ParserOptions::newFromUser( $wgUser );
+               $title = Title::newFromText( 'Unit test' );
+               $options = ParserOptions::newFromUser( new User() );
                $this->assertEquals( "<p>$longLine</p>",
-                       $this->parser->parse( $longLine, $t, $options )->getText() );
+                       $this->parser->parse( $longLine, $title, $options )->getText() );
        }
 
        /**
@@ -52,16 +51,23 @@ class ExtraParserTest extends MediaWikiTestCase {
        public function testParse() {
                $title = Title::newFromText( __FUNCTION__ );
                $parserOutput = $this->parser->parse( "Test\n{{Foo}}\n{{Bar}}", $title, $this->options );
-               $this->assertEquals( "<p>Test\nContent of <i>Template:Foo</i>\nContent of <i>Template:Bar</i>\n</p>", $parserOutput->getText() );
+               $this->assertEquals(
+                       "<p>Test\nContent of <i>Template:Foo</i>\nContent of <i>Template:Bar</i>\n</p>",
+                       $parserOutput->getText()
+               );
        }
 
        /**
         * @covers Parser::preSaveTransform
         */
        public function testPreSaveTransform() {
-               global $wgUser;
                $title = Title::newFromText( __FUNCTION__ );
-               $outputText = $this->parser->preSaveTransform( "Test\r\n{{subst:Foo}}\n{{Bar}}", $title, $wgUser, $this->options );
+               $outputText = $this->parser->preSaveTransform(
+                       "Test\r\n{{subst:Foo}}\n{{Bar}}",
+                       $title,
+                       new User(),
+                       $this->options
+               );
 
                $this->assertEquals( "Test\nContent of ''Template:Foo''\n{{Bar}}", $outputText );
        }
@@ -73,7 +79,10 @@ class ExtraParserTest extends MediaWikiTestCase {
                $title = Title::newFromText( __FUNCTION__ );
                $outputText = $this->parser->preprocess( "Test\n{{Foo}}\n{{Bar}}", $title, $this->options );
 
-               $this->assertEquals( "Test\nContent of ''Template:Foo''\nContent of ''Template:Bar''", $outputText );
+               $this->assertEquals(
+                       "Test\nContent of ''Template:Foo''\nContent of ''Template:Bar''",
+                       $outputText
+               );
        }
 
        /**
@@ -148,6 +157,12 @@ class ExtraParserTest extends MediaWikiTestCase {
                $this->assertEquals( "{{Foo}} information <!-- is very secret -->", $outputText );
        }
 
+       /**
+        * @param Title $title
+        * @param bool $parser
+        *
+        * @return array
+        */
        static function statelessFetchTemplate( $title, $parser = false ) {
                $text = "Content of ''" . $title->getFullText() . "''";
                $deps = array();
index b37ff2e..33643ac 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 
 /**
- *
  * @group Database
  * ^--- make sure temporary tables are used.
  */
@@ -53,9 +52,10 @@ class LinksUpdateTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers LinksUpdate::addLink
+        * @covers ParserOutput::addLink
         */
        public function testUpdate_pagelinks() {
+               /** @var ParserOutput $po */
                list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
 
                $po->addLink( Title::newFromText( "Foo" ) );
@@ -90,9 +90,10 @@ class LinksUpdateTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers LinksUpdate::addExternalLink
+        * @covers ParserOutput::addExternalLink
         */
        public function testUpdate_externallinks() {
+               /** @var ParserOutput $po */
                list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
 
                $po->addExternalLink( "http://testing.com/wiki/Foo" );
@@ -103,9 +104,10 @@ class LinksUpdateTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers LinksUpdate::addCategory
+        * @covers ParserOutput::addCategory
         */
        public function testUpdate_categorylinks() {
+               /** @var ParserOutput $po */
                $this->setMwGlobals( 'wgCategoryCollation', 'uppercase' );
 
                list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
@@ -118,9 +120,10 @@ class LinksUpdateTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers LinksUpdate::addInterwikiLink
+        * @covers ParserOutput::addInterwikiLink
         */
        public function testUpdate_iwlinks() {
+               /** @var ParserOutput $po */
                list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
 
                $target = Title::makeTitleSafe( NS_MAIN, "Foo", '', 'linksupdatetest' );
@@ -132,9 +135,10 @@ class LinksUpdateTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers LinksUpdate::addTemplate
+        * @covers ParserOutput::addTemplate
         */
        public function testUpdate_templatelinks() {
+               /** @var ParserOutput $po */
                list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
 
                $po->addTemplate( Title::newFromText( "Template:Foo" ), 23, 42 );
@@ -145,9 +149,10 @@ class LinksUpdateTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers LinksUpdate::addImage
+        * @covers ParserOutput::addImage
         */
        public function testUpdate_imagelinks() {
+               /** @var ParserOutput $po */
                list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
 
                $po->addImage( "Foo.png" );
@@ -158,9 +163,10 @@ class LinksUpdateTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers LinksUpdate::addLanguageLink
+        * @covers ParserOutput::addLanguageLink
         */
        public function testUpdate_langlinks() {
+               /** @var ParserOutput $po */
                list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
 
                $po->addLanguageLink( Title::newFromText( "en:Foo" )->getFullText() );
@@ -171,9 +177,10 @@ class LinksUpdateTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers LinksUpdate::setProperty
+        * @covers ParserOutput::setProperty
         */
        public function testUpdate_page_props() {
+               /** @var ParserOutput $po */
                list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
 
                $po->setProperty( "foo", "bar" );
diff --git a/tests/phpunit/includes/MWExceptionHandlerTest.php b/tests/phpunit/includes/MWExceptionHandlerTest.php
deleted file mode 100644 (file)
index dd76e3b..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-/**
- * Tests for includes/Exception.php.
- *
- * @author Antoine Musso
- * @copyright Copyright © 2013, Antoine Musso
- * @copyright Copyright © 2013, Wikimedia Foundation Inc.
- * @file
- */
-
-class MWExceptionHandlerTest extends MediaWikiTestCase {
-
-       /**
-        * @covers MWExceptionHandler::getRedactedTrace
-        */
-       function testGetRedactedTrace() {
-               $refvar = 'value';
-               try {
-                       $array = array( 'a', 'b' );
-                       $object = new StdClass();
-                       self::helperThrowAnException( $array, $object, $refvar );
-               } catch ( Exception $e ) {
-               }
-
-               # Make sure our strack trace contains an array and an object passed to
-               # some function in the stacktrace. Else, we can not assert the trace
-               # redaction achieved its job.
-               $trace = $e->getTrace();
-               $hasObject = false;
-               $hasArray = false;
-               foreach ( $trace as $frame ) {
-                       if ( ! isset( $frame['args'] ) ) {
-                               continue;
-                       }
-                       foreach ( $frame['args'] as $arg ) {
-                               $hasObject = $hasObject || is_object( $arg );
-                               $hasArray = $hasArray || is_array( $arg );
-                       }
-
-                       if ( $hasObject && $hasArray ) {
-                               break;
-                       }
-               }
-               $this->assertTrue( $hasObject,
-                       "The stacktrace must have a function having an object has parameter" );
-               $this->assertTrue( $hasArray,
-                       "The stacktrace must have a function having an array has parameter" );
-
-               # Now we redact the trace.. and make sure no function arguments are
-               # arrays or objects.
-               $redacted = MWExceptionHandler::getRedactedTrace( $e );
-
-               foreach ( $redacted as $frame ) {
-                       if ( ! isset( $frame['args'] ) ) {
-                               continue;
-                       }
-                       foreach ( $frame['args'] as $arg ) {
-                               $this->assertNotInternalType( 'array', $arg );
-                               $this->assertNotInternalType( 'object', $arg );
-                       }
-               }
-
-               $this->assertEquals( 'value', $refvar, 'Ensuring reference variable wasn\'t changed' );
-       }
-
-       /**
-        * Helper function for testExpandArgumentsInCall
-        *
-        * Pass it an object and an array, and something by reference :-)
-        *
-        * @throws Exception
-        */
-       protected static function helperThrowAnException( $a, $b, &$c ) {
-               throw new Exception();
-       }
-}
diff --git a/tests/phpunit/includes/MediaWikiVersionFetcherTest.php b/tests/phpunit/includes/MediaWikiVersionFetcherTest.php
new file mode 100644 (file)
index 0000000..bbb83da
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+
+/**
+ * Note: this is not a unit test, as it touches the file system and reads an actual file.
+ * If unit tests are added for MediaWikiVersionFetcher, this should be done in a distinct test case.
+ *
+ * @covers MediaWikiVersionFetcher
+ *
+ * @group ComposerHooks
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class MediaWikiVersionFetcherTest extends PHPUnit_Framework_TestCase {
+
+       public function testReturnsResult() {
+               $versionFetcher = new MediaWikiVersionFetcher();
+               $this->assertInternalType( 'string', $versionFetcher->fetchVersion() );
+       }
+
+}
\ No newline at end of file
index 71ebd6a..7c99352 100644 (file)
@@ -10,6 +10,33 @@ class MessageTest extends MediaWikiLangTestCase {
                ) );
        }
 
+       public function provideTestParams() {
+               return array(
+                       array( array() ),
+                       array( array( 'foo' ), 'foo' ),
+                       array( array( 'foo', 'bar' ), 'foo', 'bar' ),
+                       array( array( 'baz' ), array( 'baz' ) ),
+                       array( array( 'baz', 'foo' ), array( 'baz', 'foo' ) ),
+                       array( array( 'baz', 'foo' ), array( 'baz', 'foo' ), 'hhh' ),
+                       array( array( 'baz', 'foo' ), array( 'baz', 'foo' ), 'hhh', array( 'ahahahahha' ) ),
+                       array( array( 'baz', 'foo' ), array( 'baz', 'foo' ), array( 'ahahahahha' ) ),
+                       array( array( 'baz' ), array( 'baz' ), array( 'ahahahahha' ) ),
+               );
+       }
+
+       /**
+        * @covers Message::params
+        * @dataProvider provideTestParams
+        */
+       public function testParams( $expected ) {
+               $msg = new Message( 'imasomething' );
+
+               $returned = call_user_func_array( array( $msg, 'params' ),  array_slice( func_get_args(), 1 ) );
+
+               $this->assertSame( $msg, $returned );
+               $this->assertEquals( $expected, $msg->getParams() );
+       }
+
        /**
         * @covers Message::exists
         */
@@ -77,55 +104,84 @@ class MessageTest extends MediaWikiLangTestCase {
        }
 
        /**
-        * FIXME: This should not need database, but Language#formatExpiry does (bug 55912)
-        * @group Database
-        * @todo this should be split up into multiple test methods
         * @covers Message::numParams
-        * @covers Message::durationParams
-        * @covers Message::expiryParams
-        * @covers Message::timeperiodParams
-        * @covers Message::sizeParams
-        * @covers Message::bitrateParams
         */
-       public function testMessageParamTypes() {
+       public function testMessageNumParams() {
                $lang = Language::factory( 'en' );
-
                $msg = new RawMessage( '$1' );
+
                $this->assertEquals(
                        $lang->formatNum( 123456.789 ),
                        $msg->inLanguage( $lang )->numParams( 123456.789 )->plain(),
                        'numParams is handled correctly'
                );
+       }
 
+       /**
+        * @covers Message::durationParams
+        */
+       public function testMessageDurationParams() {
+               $lang = Language::factory( 'en' );
                $msg = new RawMessage( '$1' );
+
                $this->assertEquals(
                        $lang->formatDuration( 1234 ),
                        $msg->inLanguage( $lang )->durationParams( 1234 )->plain(),
                        'durationParams is handled correctly'
                );
+       }
 
+       /**
+        * FIXME: This should not need database, but Language#formatExpiry does (bug 55912)
+        * @group Database
+        * @covers Message::expiryParams
+        */
+       public function testMessageExpiryParams() {
+               $lang = Language::factory( 'en' );
                $msg = new RawMessage( '$1' );
+
                $this->assertEquals(
                        $lang->formatExpiry( wfTimestampNow() ),
                        $msg->inLanguage( $lang )->expiryParams( wfTimestampNow() )->plain(),
                        'expiryParams is handled correctly'
                );
+       }
 
+       /**
+        * @covers Message::timeperiodParams
+        */
+       public function testMessageTimeperiodParams() {
+               $lang = Language::factory( 'en' );
                $msg = new RawMessage( '$1' );
+
                $this->assertEquals(
                        $lang->formatTimePeriod( 1234 ),
                        $msg->inLanguage( $lang )->timeperiodParams( 1234 )->plain(),
                        'timeperiodParams is handled correctly'
                );
+       }
 
+       /**
+        * @covers Message::sizeParams
+        */
+       public function testMessageSizeParams() {
+               $lang = Language::factory( 'en' );
                $msg = new RawMessage( '$1' );
+
                $this->assertEquals(
                        $lang->formatSize( 123456 ),
                        $msg->inLanguage( $lang )->sizeParams( 123456 )->plain(),
                        'sizeParams is handled correctly'
                );
+       }
 
+       /**
+        * @covers Message::bitrateParams
+        */
+       public function testMessageBitrateParams() {
+               $lang = Language::factory( 'en' );
                $msg = new RawMessage( '$1' );
+
                $this->assertEquals(
                        $lang->formatBitrate( 123456 ),
                        $msg->inLanguage( $lang )->bitrateParams( 123456 )->plain(),
diff --git a/tests/phpunit/includes/ResourceLoaderModuleTest.php b/tests/phpunit/includes/ResourceLoaderModuleTest.php
deleted file mode 100644 (file)
index 4643319..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-
-class ResourceLoaderModuleTest extends MediaWikiTestCase {
-
-       protected static function getResourceLoaderContext() {
-               $resourceLoader = new ResourceLoader();
-               $request = new FauxRequest( array(
-                               'debug' => 'false',
-                               'lang' => 'en',
-                               'modules' => 'startup',
-                               'only' => 'scripts',
-                               'skin' => 'vector',
-               ) );
-               return new ResourceLoaderContext( $resourceLoader, $request );
-       }
-
-       /**
-        * @covers ResourceLoaderModule::getDefinitionSummary
-        * @covers ResourceLoaderFileModule::getDefinitionSummary
-        */
-       public function testDefinitionSummary() {
-               $context = self::getResourceLoaderContext();
-
-               $baseParams = array(
-                       'scripts' => array( 'foo.js', 'bar.js' ),
-                       'dependencies' => array( 'jquery', 'mediawiki' ),
-                       'messages' => array( 'hello', 'world' ),
-               );
-
-               $module = new ResourceLoaderFileModule( $baseParams );
-
-               $jsonSummary = json_encode( $module->getDefinitionSummary( $context ) );
-
-               // Exactly the same
-               $module = new ResourceLoaderFileModule( $baseParams );
-
-               $this->assertEquals(
-                       $jsonSummary,
-                       json_encode( $module->getDefinitionSummary( $context ) ),
-                       'Instance is insignificant'
-               );
-
-               // Re-order dependencies
-               $module = new ResourceLoaderFileModule( array(
-                       'dependencies' => array( 'mediawiki', 'jquery' ),
-               ) + $baseParams );
-
-               $this->assertEquals(
-                       $jsonSummary,
-                       json_encode( $module->getDefinitionSummary( $context ) ),
-                       'Order of dependencies is insignificant'
-               );
-
-               // Re-order messages
-               $module = new ResourceLoaderFileModule( array(
-                       'messages' => array( 'world', 'hello' ),
-               ) + $baseParams );
-
-               $this->assertEquals(
-                       $jsonSummary,
-                       json_encode( $module->getDefinitionSummary( $context ) ),
-                       'Order of messages is insignificant'
-               );
-
-               // Re-order scripts
-               $module = new ResourceLoaderFileModule( array(
-                       'scripts' => array( 'bar.js', 'foo.js' ),
-               ) + $baseParams );
-
-               $this->assertNotEquals(
-                       $jsonSummary,
-                       json_encode( $module->getDefinitionSummary( $context ) ),
-                       'Order of scripts is significant'
-               );
-
-               // Subclass
-               $module = new ResourceLoaderFileModuleTestModule( $baseParams );
-
-               $this->assertNotEquals(
-                       $jsonSummary,
-                       json_encode( $module->getDefinitionSummary( $context ) ),
-                       'Class is significant'
-               );
-       }
-}
-
-class ResourceLoaderFileModuleTestModule extends ResourceLoaderFileModule {}
diff --git a/tests/phpunit/includes/ResourceLoaderTest.php b/tests/phpunit/includes/ResourceLoaderTest.php
deleted file mode 100644 (file)
index ca8b2b6..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-<?php
-
-class ResourceLoaderTest extends MediaWikiTestCase {
-
-       protected static $resourceLoaderRegisterModulesHook;
-
-       protected function setUp() {
-               parent::setUp();
-
-               // $wgResourceLoaderLESSFunctions, $wgResourceLoaderLESSImportPaths; $wgResourceLoaderLESSVars;
-
-               $this->setMwGlobals( array(
-                       'wgResourceLoaderLESSFunctions' => array(
-                               'test-sum' => function ( $frame, $less ) {
-                                       $sum = 0;
-                                       foreach ( $frame[2] as $arg ) {
-                                               $sum += (int)$arg[1];
-                                       }
-                                       return $sum;
-                               },
-                       ),
-                       'wgResourceLoaderLESSImportPaths' => array(
-                               dirname( __DIR__ ) . '/data/less/common',
-                       ),
-                       'wgResourceLoaderLESSVars' => array(
-                               'foo'  => '2px',
-                               'Foo' => '#eeeeee',
-                               'bar' => 5,
-                       ),
-               ) );
-       }
-
-       /* Hook Methods */
-
-       /**
-        * ResourceLoaderRegisterModules hook
-        */
-       public static function resourceLoaderRegisterModules( &$resourceLoader ) {
-               self::$resourceLoaderRegisterModulesHook = true;
-
-               return true;
-       }
-
-       /* Provider Methods */
-       public static function provideValidModules() {
-               return array(
-                       array( 'TEST.validModule1', new ResourceLoaderTestModule() ),
-               );
-       }
-
-       public static function provideResourceLoaderContext() {
-               $resourceLoader = new ResourceLoader();
-               $request = new FauxRequest();
-               return array(
-                       array( new ResourceLoaderContext( $resourceLoader, $request ) ),
-               );
-       }
-
-       /* Test Methods */
-
-       /**
-        * Ensures that the ResourceLoaderRegisterModules hook is called when a new ResourceLoader object is constructed
-        * @covers ResourceLoader::__construct
-        */
-       public function testCreatingNewResourceLoaderCallsRegistrationHook() {
-               self::$resourceLoaderRegisterModulesHook = false;
-               $resourceLoader = new ResourceLoader();
-               $this->assertTrue( self::$resourceLoaderRegisterModulesHook );
-
-               return $resourceLoader;
-       }
-
-       /**
-        * @dataProvider provideValidModules
-        * @depends testCreatingNewResourceLoaderCallsRegistrationHook
-        * @covers ResourceLoader::register
-        * @covers ResourceLoader::getModule
-        */
-       public function testRegisteredValidModulesAreAccessible(
-               $name, ResourceLoaderModule $module, ResourceLoader $resourceLoader
-       ) {
-               $resourceLoader->register( $name, $module );
-               $this->assertEquals( $module, $resourceLoader->getModule( $name ) );
-       }
-
-       /**
-        * @dataProvider provideResourceLoaderContext
-        * @covers ResourceLoaderFileModule::compileLessFile
-        */
-       public function testLessFileCompilation( $context ) {
-               $basePath = __DIR__ . '/../data/less/module';
-               $module = new ResourceLoaderFileModule( array(
-                       'localBasePath' => $basePath,
-                       'styles' => array( 'styles.less' ),
-               ) );
-               $styles = $module->getStyles( $context );
-               $this->assertStringEqualsFile( $basePath . '/styles.css', $styles['all'] );
-       }
-
-       /**
-        * @dataProvider providePackedModules
-        * @covers ResourceLoader::makePackedModulesString
-        */
-       public function testMakePackedModulesString( $desc, $modules, $packed ) {
-               $this->assertEquals( $packed, ResourceLoader::makePackedModulesString( $modules ), $desc );
-       }
-
-       /**
-        * @dataProvider providePackedModules
-        * @covers ResourceLoaderContext::expandModuleNames
-        */
-       public function testexpandModuleNames( $desc, $modules, $packed ) {
-               $this->assertEquals( $modules, ResourceLoaderContext::expandModuleNames( $packed ), $desc );
-       }
-
-       public static function providePackedModules() {
-               return array(
-                       array(
-                               'Example from makePackedModulesString doc comment',
-                               array( 'foo.bar', 'foo.baz', 'bar.baz', 'bar.quux' ),
-                               'foo.bar,baz|bar.baz,quux',
-                       ),
-                       array(
-                               'Example from expandModuleNames doc comment',
-                               array( 'jquery.foo', 'jquery.bar', 'jquery.ui.baz', 'jquery.ui.quux' ),
-                               'jquery.foo,bar|jquery.ui.baz,quux',
-                       ),
-                       array(
-                               'Regression fixed in r88706 with dotless names',
-                               array( 'foo', 'bar', 'baz' ),
-                               'foo,bar,baz',
-                       ),
-                       array(
-                               'Prefixless modules after a prefixed module',
-                               array( 'single.module', 'foobar', 'foobaz' ),
-                               'single.module|foobar,foobaz',
-                       ),
-               );
-       }
-}
-
-/* Stubs */
-
-class ResourceLoaderTestModule extends ResourceLoaderModule {
-}
-
-/* Hooks */
-global $wgHooks;
-$wgHooks['ResourceLoaderRegisterModules'][] = 'ResourceLoaderTest::resourceLoaderRegisterModules';
index f69fad4..e69660e 100644 (file)
@@ -206,10 +206,12 @@ class RevisionStorageTest extends MediaWikiTestCase {
         */
        public function testFetchRevision() {
                $page = $this->createPage( 'RevisionStorageTest_testFetchRevision', 'one', CONTENT_MODEL_WIKITEXT );
-               $id1 = $page->getRevision()->getId();
+
+               // Hidden process cache assertion below
+               $page->getRevision()->getId();
 
                $page->doEditContent( new WikitextContent( 'two' ), 'second rev' );
-               $id2 = $page->getRevision()->getId();
+               $id = $page->getRevision()->getId();
 
                $res = Revision::fetchRevision( $page->getTitle() );
 
@@ -219,9 +221,8 @@ class RevisionStorageTest extends MediaWikiTestCase {
                        $rows[$row->rev_id] = $row;
                }
 
-               $row = $res->fetchObject();
                $this->assertEquals( 1, count( $rows ), 'expected exactly one revision' );
-               $this->assertArrayHasKey( $id2, $rows, 'missing revision with id ' . $id2 );
+               $this->assertArrayHasKey( $id, $rows, 'missing revision with id ' . $id );
        }
 
        /**
index 8516a4c..7e81fab 100644 (file)
@@ -43,12 +43,10 @@ class TestSample extends MediaWikiLangTestCase {
        }
 
        /**
-        * If you want to run a the same test with a variety of data. use a data provider.
+        * If you want to run a the same test with a variety of data, use a data provider.
         * see: http://www.phpunit.de/manual/3.4/en/writing-tests-for-phpunit.html
-        *
-        * Note: Data providers are always called statically and outside setUp/tearDown!
         */
-       public static function provideTitles() {
+       public function provideTitles() {
                return array(
                        array( 'Text', NS_MEDIA, 'Media:Text' ),
                        array( 'Text', null, 'Text' ),
index 053d8a7..572740f 100644 (file)
@@ -1,28 +1,5 @@
 <?php
 
-function getSiteParams( $conf, $wiki ) {
-       $site = null;
-       $lang = null;
-       foreach ( $conf->suffixes as $suffix ) {
-               if ( substr( $wiki, -strlen( $suffix ) ) == $suffix ) {
-                       $site = $suffix;
-                       $lang = substr( $wiki, 0, -strlen( $suffix ) );
-                       break;
-               }
-       }
-
-       return array(
-               'suffix' => $site,
-               'lang' => $lang,
-               'params' => array(
-                       'lang' => $lang,
-                       'site' => $site,
-                       'wiki' => $wiki,
-               ),
-               'tags' => array( 'tag' ),
-       );
-}
-
 class SiteConfigurationTest extends MediaWikiTestCase {
 
        /**
@@ -99,6 +76,32 @@ class SiteConfigurationTest extends MediaWikiTestCase {
                $GLOBALS['global'] = array( 'global' => 'global' );
        }
 
+       /**
+        * This function is used as a callback within the tests below
+        */
+       public static function getSiteParamsCallback( $conf, $wiki ) {
+               $site = null;
+               $lang = null;
+               foreach ( $conf->suffixes as $suffix ) {
+                       if ( substr( $wiki, -strlen( $suffix ) ) == $suffix ) {
+                               $site = $suffix;
+                               $lang = substr( $wiki, 0, -strlen( $suffix ) );
+                               break;
+                       }
+               }
+
+               return array(
+                       'suffix' => $site,
+                       'lang' => $lang,
+                       'params' => array(
+                               'lang' => $lang,
+                               'site' => $site,
+                               'wiki' => $wiki,
+                       ),
+                       'tags' => array( 'tag' ),
+               );
+       }
+
        /**
         * @covers SiteConfiguration::siteFromDB
         */
@@ -257,7 +260,7 @@ class SiteConfigurationTest extends MediaWikiTestCase {
         * @covers SiteConfiguration::siteFromDB
         */
        public function testSiteFromDbWithCallback() {
-               $this->mConf->siteParamsCallback = 'getSiteParams';
+               $this->mConf->siteParamsCallback = 'SiteConfigurationTest::getSiteParamsCallback';
 
                $this->assertEquals(
                        array( 'wiki', 'en' ),
@@ -280,7 +283,7 @@ class SiteConfigurationTest extends MediaWikiTestCase {
         * @covers SiteConfiguration::get
         */
        public function testParameterReplacement() {
-               $this->mConf->siteParamsCallback = 'getSiteParams';
+               $this->mConf->siteParamsCallback = 'SiteConfigurationTest::getSiteParamsCallback';
 
                $this->assertEquals(
                        'en wiki enwiki',
@@ -313,7 +316,7 @@ class SiteConfigurationTest extends MediaWikiTestCase {
         * @covers SiteConfiguration::getAll
         */
        public function testGetAllGlobals() {
-               $this->mConf->siteParamsCallback = 'getSiteParams';
+               $this->mConf->siteParamsCallback = 'SiteConfigurationTest::getSiteParamsCallback';
 
                $getall = array(
                        'simple' => 'enwiki',
diff --git a/tests/phpunit/includes/SkinTemplateTest.php b/tests/phpunit/includes/SkinTemplateTest.php
new file mode 100644 (file)
index 0000000..8f54714
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @covers SkinTemplate
+ *
+ * @group Output
+ *
+ * @licence GNU GPL v2+
+ * @author Bene* < benestar.wikimedia@gmail.com >
+ */
+
+class SkinTemplateTest extends MediaWikiTestCase {
+
+       /**
+        * @dataProvider makeListItemProvider
+        */
+       public function testMakeListItem( $expected, $key, $item, $options, $message ) {
+               $template = $this->getMockForAbstractClass( 'BaseTemplate' );
+
+               $this->assertEquals(
+                       $expected,
+                       $template->makeListItem( $key, $item, $options ),
+                       $message
+               );
+       }
+
+       public function makeListItemProvider() {
+               return array(
+                       array(
+                               '<li class="class" title="itemtitle"><a href="url" title="title">text</a></li>',
+                               '',
+                               array( 'class' => 'class', 'itemtitle' => 'itemtitle', 'href' => 'url', 'title' => 'title', 'text' => 'text' ),
+                               array(),
+                               'Test makteListItem with normal values'
+                       )
+               );
+       }
+}
index 2ba804f..b0e6d20 100644 (file)
@@ -376,14 +376,15 @@ class StatusTest extends MediaWikiLangTestCase {
        public function testGetMessage( Status $status, $expectedParams = array(), $expectedKey ) {
                $message = $status->getMessage();
                $this->assertInstanceOf( 'Message', $message );
-               $this->assertEquals( $expectedParams, $message->getParams() );
-               $this->assertEquals( $expectedKey, $message->getKey() );
+               $this->assertEquals( $expectedParams, $message->getParams(), 'Message::getParams' );
+               $this->assertEquals( $expectedKey, $message->getKey(), 'Message::getKey' );
        }
 
        /**
         * @return array of arrays with values;
         *    0 => status object
-        *    1 => expected Message Params (with no context)
+        *    1 => expected Message parameters (with no context)
+        *    2 => expected Message key
         */
        public static function provideGetMessage() {
                $testCases = array();
@@ -407,17 +408,21 @@ class StatusTest extends MediaWikiLangTestCase {
                $testCases[ '1StringWarning' ] = array(
                        $status,
                        array(),
-                       "fooBar!"
+                       'fooBar!'
                );
 
-               //NOTE: this seems to return a string instead of a Message object...
+               // FIXME: Assertion tries to compare a StubUserLang with a Language object, because
+               // "data providers are executed before both the call to the setUpBeforeClass static method
+               // and the first call to the setUp method. Because of that you can't access any variables
+               // you create there from within a data provider."
+               // http://phpunit.de/manual/3.7/en/writing-tests-for-phpunit.html
 //             $status = new Status();
 //             $status->warning( 'fooBar!' );
 //             $status->warning( 'fooBar2!' );
 //             $testCases[ '2StringWarnings' ] = array(
 //                     $status,
-//                     array(),
-//                     ''
+//                     array( new Message( 'fooBar!' ), new Message( 'fooBar2!' ) ),
+//                     "* \$1\n* \$2"
 //             );
 
                $status = new Status();
@@ -425,18 +430,17 @@ class StatusTest extends MediaWikiLangTestCase {
                $testCases[ '1MessageWarning' ] = array(
                        $status,
                        array( 'foo', 'bar' ),
-                       "fooBar!",
+                       'fooBar!'
                );
 
-               //NOTE: this seems to return a string instead of a Message object...
-//             $status = new Status();
-//             $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' ) ) );
-//             $status->warning( new Message( 'fooBar2!' ) );
-//             $testCases[ '2MessageWarnings' ] = array(
-//                     $status,
-//                     array(),
-//                     "",
-//             );
+               $status = new Status();
+               $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' ) ) );
+               $status->warning( new Message( 'fooBar2!' ) );
+               $testCases[ '2MessageWarnings' ] = array(
+                       $status,
+                       array( new Message( 'fooBar!', array( 'foo', 'bar' ) ), new Message( 'fooBar2!' ) ),
+                       "* \$1\n* \$2"
+               );
 
                return $testCases;
        }
@@ -519,4 +523,41 @@ class StatusTest extends MediaWikiLangTestCase {
                $this->assertEquals( $error, $errors[0]['message'] );
        }
 
+       /**
+        * @covers Status::__wakeup
+        */
+       public function testWakeUpSanitizesCallback() {
+               $status = new Status();
+               $status->cleanCallback = function( $value ) {
+                       return '-' . $value . '-';
+               };
+               $status->__wakeup();
+               $this->assertEquals( false, $status->cleanCallback );
+       }
+
+       /**
+        * @dataProvider provideNonObjectMessages
+        * @covers Status::getStatusArray
+        */
+       public function testGetStatusArrayWithNonObjectMessages( $nonObjMsg ) {
+               $status = new Status();
+               if( !array_key_exists( 1, $nonObjMsg ) ) {
+                       $status->warning( $nonObjMsg[0] );
+               } else {
+                       $status->warning( $nonObjMsg[0], $nonObjMsg[1] );
+               }
+
+               $array = $status->getWarningsArray(); // We use getWarningsArray to access getStatusArray
+
+               $this->assertEquals( 1, count( $array ) );
+               $this->assertEquals( $nonObjMsg, $array[0] );
+       }
+
+       public static function provideNonObjectMessages() {
+               return array(
+                       array( array( 'ImaString', array( 'param1' => 'value1' ) ) ),
+                       array( array( 'ImaString' ) ),
+               );
+       }
+
 }
index 078dfef..ba3c6c0 100644 (file)
@@ -41,7 +41,7 @@ class TitleTest extends MediaWikiTestCase {
         */
        public function testSecureAndSplit() {
                $this->setMwGlobals( array(
-                       'wgLocalInterwiki' => 'localtestiw',
+                       'wgLocalInterwikis' => array( 'localtestiw' ),
                        'wgHooks' => array(
                                'InterwikiLoadPrefix' => array(
                                        function ( $prefix, &$data ) {
@@ -213,6 +213,7 @@ class TitleTest extends MediaWikiTestCase {
        /**
         * @dataProvider provideBug31100
         * @covers Title::fixSpecialName
+        * @todo give this test a real name explaining what is being tested here
         */
        public function testBug31100FixSpecialName( $text, $expectedParam ) {
                $title = Title::newFromText( $text );
index ff33e82..e6af126 100644 (file)
@@ -234,4 +234,57 @@ class UserTest extends MediaWikiTestCase {
                $this->assertEquals( $wgDefaultUserOptions['cols'], $this->user->getOption( 'cols' ) );
                $this->assertEquals( 'test', $this->user->getOption( 'someoption' ) );
        }
+
+       /**
+        * Test password expiration.
+        * @covers User::getPasswordExpired()
+        */
+       public function testPasswordExpire() {
+               global $wgPasswordExpireGrace;
+               $wgTemp = $wgPasswordExpireGrace;
+               $wgPasswordExpireGrace = 3600 * 24 * 7; // 7 days
+
+               $user = User::newFromName( 'UnitTestUser' );
+               $user->loadDefaults();
+               $this->assertEquals( false, $user->getPasswordExpired() );
+
+               $ts = time() - ( 3600 * 24 * 1 ); // 1 day ago
+               $user->expirePassword( $ts );
+               $this->assertEquals( 'soft', $user->getPasswordExpired() );
+
+               $ts = time() - ( 3600 * 24 * 10 ); // 10 days ago
+               $user->expirePassword( $ts );
+               $this->assertEquals( 'hard', $user->getPasswordExpired() );
+
+               $wgPasswordExpireGrace = $wgTemp;
+       }
+
+       /**
+        * Test password validity checks. There are 3 checks in core,
+        *      - ensure the password meets the minimal length
+        *      - ensure the password is not the same as the username
+        *      - ensure the username/password combo isn't forbidden
+        * @covers User::checkPasswordValidity()
+        * @covers User::getPasswordValidity()
+        * @covers User::isValidPassword()
+        */
+       public function testCheckPasswordValidity() {
+               $this->setMwGlobals( 'wgMinimalPasswordLength', 6 );
+               $user = User::newFromName( 'Useruser' );
+               // Sanity
+               $this->assertTrue( $user->isValidPassword( 'Password1234' ) );
+
+               // Minimum length
+               $this->assertFalse( $user->isValidPassword( 'a' ) );
+               $this->assertFalse( $user->checkPasswordValidity( 'a' )->isGood() );
+               $this->assertEquals( 'passwordtooshort', $user->getPasswordValidity( 'a' ) );
+
+               // Matches username
+               $this->assertFalse( $user->checkPasswordValidity( 'Useruser' )->isGood() );
+               $this->assertEquals( 'password-name-match', $user->getPasswordValidity( 'Useruser' ) );
+
+               // On the forbidden list
+               $this->assertFalse( $user->checkPasswordValidity( 'Passpass' )->isGood() );
+               $this->assertEquals( 'password-login-forbidden', $user->getPasswordValidity( 'Passpass' ) );
+       }
 }
index 796adf3..9b41a9c 100644 (file)
@@ -593,8 +593,6 @@ class WikiPageTest extends MediaWikiLangTestCase {
                }
 
                $page = $this->createPage( $title, $text, $model );
-               $hasLinks = wfGetDB( DB_SLAVE )->selectField( 'pagelinks', 1,
-                       array( 'pl_from' => $page->getId() ), __METHOD__ );
 
                $editInfo = $page->prepareContentForEdit( $page->getContent() );
 
@@ -886,6 +884,49 @@ more stuff
                $this->assertEquals( "one", $page->getContent()->getNativeData() );
        }
 
+       /**
+        * @covers WikiPage::doRollback
+        */
+       public function testDoRollbackFailureSameContent() {
+               $admin = new User();
+               $admin->setName( "Admin" );
+               $admin->addGroup( "sysop" ); #XXX: make the test user a sysop...
+
+               $text = "one";
+               $page = $this->newPage( "WikiPageTest_testDoRollback" );
+               $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle(), CONTENT_MODEL_WIKITEXT ),
+                       "section one", EDIT_NEW, false, $admin );
+               $rev1 = $page->getRevision();
+
+               $user1 = new User();
+               $user1->setName( "127.0.1.11" );
+               $user1->addGroup( "sysop" ); #XXX: make the test user a sysop...
+               $text .= "\n\ntwo";
+               $page = new WikiPage( $page->getTitle() );
+               $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle(), CONTENT_MODEL_WIKITEXT ),
+                       "adding section two", 0, false, $user1 );
+
+               # now, do a the rollback from the same user was doing the edit before
+               $resultDetails = array();
+               $token = $user1->getEditToken( array( $page->getTitle()->getPrefixedText(), $user1->getName() ), null );
+               $errors = $page->doRollback( $user1->getName(), "testing revert same user", $token, false, $resultDetails, $admin );
+
+               $this->assertEquals( array(), $errors, "Rollback failed same user" );
+
+               # now, try the rollback
+               $resultDetails = array();
+               $token = $admin->getEditToken( array( $page->getTitle()->getPrefixedText(), $user1->getName() ), null );
+               $errors = $page->doRollback( $user1->getName(), "testing revert", $token, false, $resultDetails, $admin );
+
+               $this->assertEquals( array( array( 'alreadyrolled', 'WikiPageTest testDoRollback',
+                       '127.0.1.11', 'Admin' ) ), $errors, "Rollback not failed" );
+
+               $page = new WikiPage( $page->getTitle() );
+               $this->assertEquals( $rev1->getSha1(), $page->getRevision()->getSha1(),
+                       "rollback did not revert to the correct revision" );
+               $this->assertEquals( "one", $page->getContent()->getNativeData() );
+       }
+
        public static function provideGetAutosummary() {
                return array(
                        array(
index 8205029..86b4c35 100644 (file)
@@ -144,10 +144,7 @@ class XmlTest extends MediaWikiTestCase {
                $prevYear = $curYear - 1;
 
                $curMonth = intval( gmdate( 'n' ) );
-               $prevMonth = $curMonth - 1;
-               if ( $prevMonth == 0 ) {
-                       $prevMonth = 12;
-               }
+
                $nextMonth = $curMonth + 1;
                if ( $nextMonth == 13 ) {
                        $nextMonth = 1;
index a723245..8d134f7 100644 (file)
@@ -45,7 +45,7 @@ class ApiCreateAccountTest extends ApiTestCase {
 
                // Should first ask for token.
                $a = $result['createaccount'];
-               $this->assertEquals( 'needtoken', $a['result'] );
+               $this->assertEquals( 'NeedToken', $a['result'] );
                $token = $a['token'];
 
                // Finally create the account
@@ -63,7 +63,7 @@ class ApiCreateAccountTest extends ApiTestCase {
 
                $result = $ret[0];
                $this->assertNotInternalType( 'bool', $result );
-               $this->assertEquals( 'success', $result['createaccount']['result'] );
+               $this->assertEquals( 'Success', $result['createaccount']['result'] );
 
                // Try logging in with the new user.
                $ret = $this->doApiRequest( array(
index 0a6607e..ac3f1cd 100644 (file)
@@ -18,6 +18,13 @@ class ApiEditPageTest extends ApiTestCase {
 
                parent::setUp();
 
+               $this->setMwGlobals( array(
+                       'wgExtraNamespaces' => $wgExtraNamespaces,
+                       'wgNamespaceContentModels' => $wgNamespaceContentModels,
+                       'wgContentHandlers' => $wgContentHandlers,
+                       'wgContLang' => $wgContLang,
+               ) );
+
                $wgExtraNamespaces[12312] = 'Dummy';
                $wgExtraNamespaces[12313] = 'Dummy_talk';
 
@@ -31,17 +38,7 @@ class ApiEditPageTest extends ApiTestCase {
        }
 
        protected function tearDown() {
-               global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
-
-               unset( $wgExtraNamespaces[12312] );
-               unset( $wgExtraNamespaces[12313] );
-
-               unset( $wgNamespaceContentModels[12312] );
-               unset( $wgContentHandlers["testing"] );
-
                MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
-               $wgContLang->resetNamespaces(); # reset namespace cache
-
                parent::tearDown();
        }
 
@@ -215,7 +212,9 @@ class ApiEditPageTest extends ApiTestCase {
                        'text' => "==section 1==\nnew content 1",
                ) );
                $this->assertEquals( 'Success', $re['edit']['result'] );
-               $newtext = WikiPage::factory( Title::newFromText( $name ) )->getContent( Revision::RAW )->getNativeData();
+               $newtext = WikiPage::factory( Title::newFromText( $name ) )
+                       ->getContent( Revision::RAW )
+                       ->getNativeData();
                $this->assertEquals( $newtext, "==section 1==\nnew content 1\n\n==section 2==\ncontent2" );
 
                // Test that we raise a 'nosuchsection' error
@@ -253,7 +252,9 @@ class ApiEditPageTest extends ApiTestCase {
 
                $this->assertEquals( 'Success', $re['edit']['result'] );
                // Check the page text is correct
-               $text = WikiPage::factory( Title::newFromText( $name ) )->getContent( Revision::RAW )->getNativeData();
+               $text = WikiPage::factory( Title::newFromText( $name ) )
+                       ->getContent( Revision::RAW )
+                       ->getNativeData();
                $this->assertEquals( $text, "== header ==\n\ntest" );
 
                // Now on one that does
@@ -267,7 +268,9 @@ class ApiEditPageTest extends ApiTestCase {
                ));
 
                $this->assertEquals( 'Success', $re2['edit']['result'] );
-               $text = WikiPage::factory( Title::newFromText( $name ) )->getContent( Revision::RAW )->getNativeData();
+               $text = WikiPage::factory( Title::newFromText( $name ) )
+                       ->getContent( Revision::RAW )
+                       ->getNativeData();
                $this->assertEquals( $text, "== header ==\n\ntest\n\n== header ==\n\ntest" );
        }
 
@@ -391,7 +394,6 @@ class ApiEditPageTest extends ApiTestCase {
                $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]" ),
                        "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
                $this->forceRevisionDate( $rpage, '20120101000000' );
-               $baseTime = $rpage->getRevision()->getTimestamp();
 
                // new edit to content
                $page->doEditContent( new WikitextContent( "Foo bar" ),
index bc08afe..124988f 100644 (file)
@@ -6,12 +6,16 @@
  * @group medium
  */
 class ApiQueryAllPagesTest extends ApiTestCase {
+
        protected function setUp() {
                parent::setUp();
                $this->doLogin();
        }
 
-       function testBug25702() {
+       /**
+        * @todo give this test a real name explaining what is being tested here
+        */
+       public function testBug25702() {
                $title = Title::newFromText( 'Category:Template:xyz' );
                $page = WikiPage::factory( $title );
                $page->doEdit( 'Some text', 'inserting content' );
diff --git a/tests/phpunit/includes/cache/ProcessCacheLRUTest.php b/tests/phpunit/includes/cache/ProcessCacheLRUTest.php
deleted file mode 100644 (file)
index d3793d8..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-<?php
-
-/**
- * Test for ProcessCacheLRU class.
- *
- * Note that it uses the ProcessCacheLRUTestable class which extends some
- * properties and methods visibility. That class is defined at the end of the
- * file containing this class.
- *
- * @group Cache
- */
-class ProcessCacheLRUTest extends MediaWikiTestCase {
-
-       /**
-        * Helper to verify emptiness of a cache object.
-        * Compare against an array so we get the cache content difference.
-        */
-       function assertCacheEmpty( $cache, $msg = 'Cache should be empty' ) {
-               $this->assertAttributeEquals( array(), 'cache', $cache, $msg );
-       }
-
-       /**
-        * Helper to fill a cache object passed by reference
-        */
-       function fillCache( &$cache, $numEntries ) {
-               // Fill cache with three values
-               for ( $i = 1; $i <= $numEntries; $i++ ) {
-                       $cache->set( "cache-key-$i", "prop-$i", "value-$i" );
-               }
-       }
-
-       /**
-        * Generates an array of what would be expected in cache for a given cache
-        * size and a number of entries filled in sequentially
-        */
-       function getExpectedCache( $cacheMaxEntries, $entryToFill ) {
-               $expected = array();
-
-               if ( $entryToFill === 0 ) {
-                       # The cache is empty!
-                       return array();
-               } elseif ( $entryToFill <= $cacheMaxEntries ) {
-                       # Cache is not fully filled
-                       $firstKey = 1;
-               } else {
-                       # Cache overflowed
-                       $firstKey = 1 + $entryToFill - $cacheMaxEntries;
-               }
-
-               $lastKey = $entryToFill;
-
-               for ( $i = $firstKey; $i <= $lastKey; $i++ ) {
-                       $expected["cache-key-$i"] = array( "prop-$i" => "value-$i" );
-               }
-
-               return $expected;
-       }
-
-       /**
-        * Highlight diff between assertEquals and assertNotSame
-        */
-       public function testPhpUnitArrayEquality() {
-               $one = array( 'A' => 1, 'B' => 2 );
-               $two = array( 'B' => 2, 'A' => 1 );
-               $this->assertEquals( $one, $two ); // ==
-               $this->assertNotSame( $one, $two ); // ===
-       }
-
-       /**
-        * @dataProvider provideInvalidConstructorArg
-        * @expectedException MWException
-        */
-       public function testConstructorGivenInvalidValue( $maxSize ) {
-               new ProcessCacheLRUTestable( $maxSize );
-       }
-
-       /**
-        * Value which are forbidden by the constructor
-        */
-       public static function provideInvalidConstructorArg() {
-               return array(
-                       array( null ),
-                       array( array() ),
-                       array( new stdClass() ),
-                       array( 0 ),
-                       array( '5' ),
-                       array( -1 ),
-               );
-       }
-
-       public function testAddAndGetAKey() {
-               $oneCache = new ProcessCacheLRUTestable( 1 );
-               $this->assertCacheEmpty( $oneCache );
-
-               // First set just one value
-               $oneCache->set( 'cache-key', 'prop1', 'value1' );
-               $this->assertEquals( 1, $oneCache->getEntriesCount() );
-               $this->assertTrue( $oneCache->has( 'cache-key', 'prop1' ) );
-               $this->assertEquals( 'value1', $oneCache->get( 'cache-key', 'prop1' ) );
-       }
-
-       public function testDeleteOldKey() {
-               $oneCache = new ProcessCacheLRUTestable( 1 );
-               $this->assertCacheEmpty( $oneCache );
-
-               $oneCache->set( 'cache-key', 'prop1', 'value1' );
-               $oneCache->set( 'cache-key', 'prop1', 'value2' );
-               $this->assertEquals( 'value2', $oneCache->get( 'cache-key', 'prop1' ) );
-       }
-
-       /**
-        * This test that we properly overflow when filling a cache with
-        * a sequence of always different cache-keys. Meant to verify we correclty
-        * delete the older key.
-        *
-        * @dataProvider provideCacheFilling
-        * @param $cacheMaxEntries Maximum entry the created cache will hold
-        * @param $entryToFill Number of entries to insert in the created cache.
-        */
-       public function testFillingCache( $cacheMaxEntries, $entryToFill, $msg = '' ) {
-               $cache = new ProcessCacheLRUTestable( $cacheMaxEntries );
-               $this->fillCache( $cache, $entryToFill );
-
-               $this->assertSame(
-                       $this->getExpectedCache( $cacheMaxEntries, $entryToFill ),
-                       $cache->getCache(),
-                       "Filling a $cacheMaxEntries entries cache with $entryToFill entries"
-               );
-       }
-
-       /**
-        * Provider for testFillingCache
-        */
-       public static function provideCacheFilling() {
-               // ($cacheMaxEntries, $entryToFill, $msg='')
-               return array(
-                       array( 1, 0 ),
-                       array( 1, 1 ),
-                       array( 1, 2 ), # overflow
-                       array( 5, 33 ), # overflow
-               );
-       }
-
-       /**
-        * Create a cache with only one remaining entry then update
-        * the first inserted entry. Should bump it to the top.
-        */
-       public function testReplaceExistingKeyShouldBumpEntryToTop() {
-               $maxEntries = 3;
-
-               $cache = new ProcessCacheLRUTestable( $maxEntries );
-               // Fill cache leaving just one remaining slot
-               $this->fillCache( $cache, $maxEntries - 1 );
-
-               // Set an existing cache key
-               $cache->set( "cache-key-1", "prop-1", "new-value-for-1" );
-
-               $this->assertSame(
-                       array(
-                               'cache-key-2' => array( 'prop-2' => 'value-2' ),
-                               'cache-key-1' => array( 'prop-1' => 'new-value-for-1' ),
-                       ),
-                       $cache->getCache()
-               );
-       }
-
-       public function testRecentlyAccessedKeyStickIn() {
-               $cache = new ProcessCacheLRUTestable( 2 );
-               $cache->set( 'first', 'prop1', 'value1' );
-               $cache->set( 'second', 'prop2', 'value2' );
-
-               // Get first
-               $cache->get( 'first', 'prop1' );
-               // Cache a third value, should invalidate the least used one
-               $cache->set( 'third', 'prop3', 'value3' );
-
-               $this->assertFalse( $cache->has( 'second', 'prop2' ) );
-       }
-
-       /**
-        * This first create a full cache then update the value for the 2nd
-        * filled entry.
-        * Given a cache having 1,2,3 as key, updating 2 should bump 2 to
-        * the top of the queue with the new value: 1,3,2* (* = updated).
-        */
-       public function testReplaceExistingKeyInAFullCacheShouldBumpToTop() {
-               $maxEntries = 3;
-
-               $cache = new ProcessCacheLRUTestable( $maxEntries );
-               $this->fillCache( $cache, $maxEntries );
-
-               // Set an existing cache key
-               $cache->set( "cache-key-2", "prop-2", "new-value-for-2" );
-               $this->assertSame(
-                       array(
-                               'cache-key-1' => array( 'prop-1' => 'value-1' ),
-                               'cache-key-3' => array( 'prop-3' => 'value-3' ),
-                               'cache-key-2' => array( 'prop-2' => 'new-value-for-2' ),
-                       ),
-                       $cache->getCache()
-               );
-               $this->assertEquals( 'new-value-for-2',
-                       $cache->get( 'cache-key-2', 'prop-2' )
-               );
-       }
-
-       public function testBumpExistingKeyToTop() {
-               $cache = new ProcessCacheLRUTestable( 3 );
-               $this->fillCache( $cache, 3 );
-
-               // Set the very first cache key to a new value
-               $cache->set( "cache-key-1", "prop-1", "new value for 1" );
-               $this->assertEquals(
-                       array(
-                               'cache-key-2' => array( 'prop-2' => 'value-2' ),
-                               'cache-key-3' => array( 'prop-3' => 'value-3' ),
-                               'cache-key-1' => array( 'prop-1' => 'new value for 1' ),
-                       ),
-                       $cache->getCache()
-               );
-       }
-}
-
-/**
- * Overrides some ProcessCacheLRU methods and properties accessibility.
- */
-class ProcessCacheLRUTestable extends ProcessCacheLRU {
-       public $cache = array();
-
-       public function getCache() {
-               return $this->cache;
-       }
-
-       public function getEntriesCount() {
-               return count( $this->cache );
-       }
-}
diff --git a/tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php b/tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php
new file mode 100644 (file)
index 0000000..49feec1
--- /dev/null
@@ -0,0 +1,415 @@
+<?php
+
+/**
+ * @covers RCCacheEntryFactory
+ *
+ * @group Database
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class RCCacheEntryFactoryTest extends MediaWikiLangTestCase {
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( array(
+                       'wgArticlePath' => '/wiki/$1'
+               ) );
+       }
+
+       /**
+        * @dataProvider editChangeProvider
+        */
+       public function testNewFromRecentChange( $expected, $context, $messages,
+               $recentChange, $watched
+       ) {
+               $cacheEntryFactory = new RCCacheEntryFactory( $context, $messages );
+               $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, $watched );
+
+               $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry );
+
+               $this->assertEquals( $watched, $cacheEntry->watched, 'watched' );
+               $this->assertEquals( $expected['timestamp'], $cacheEntry->timestamp, 'timestamp' );
+               $this->assertEquals(
+                       $expected['numberofWatchingusers'], $cacheEntry->numberofWatchingusers,
+                       'watching users'
+               );
+               $this->assertEquals( $expected['unpatrolled'], $cacheEntry->unpatrolled, 'unpatrolled' );
+
+               $this->assertUserLinks( 'Mary', $cacheEntry );
+               $this->assertTitleLink( 'Xyz', $cacheEntry );
+
+               $this->assertQueryLink( 'cur', $expected['cur'], $cacheEntry->curlink, 'cur link' );
+               $this->assertQueryLink( 'prev', $expected['diff'], $cacheEntry->lastlink, 'prev link' );
+               $this->assertQueryLink( 'diff', $expected['diff'], $cacheEntry->difflink, 'diff link' );
+       }
+
+       public function editChangeProvider() {
+               return array(
+                       array(
+                               array(
+                                       'title' => 'Xyz',
+                                       'user' => 'Mary',
+                                       'diff' => array( 'curid' => 5, 'diff' => 191, 'oldid' => 190 ),
+                                       'cur' => array( 'curid' => 5, 'diff' => 0, 'oldid' => 191 ),
+                                       'timestamp' => '21:21',
+                                       'numberofWatchingusers' => 0,
+                                       'unpatrolled' => false
+                               ),
+                               $this->getContext(),
+                               $this->getMessages(),
+                               $this->makeEditRecentChange(
+                                       'Xyz',
+                                       $this->getTestUser(),
+                                       5, // curid
+                                       191, // thisid
+                                       190, // lastid
+                                       '20131103212153',
+                                       0, // counter
+                                       0 // number of watching users
+                               ),
+                               false,
+                               'edit'
+                       )
+               );
+       }
+
+       private function makeEditRecentChange( $title, $user, $curid, $thisid, $lastid,
+               $timestamp, $counter, $watchingUsers
+       ) {
+
+               $attribs = array_merge(
+                       $this->getDefaultAttributes( $title, $timestamp ),
+                       array(
+                               'rc_user' => $user->getId(),
+                               'rc_user_text' => $user->getName(),
+                               'rc_this_oldid' => $thisid,
+                               'rc_last_oldid' => $lastid,
+                               'rc_cur_id' => $curid
+                       )
+               );
+
+               return $this->makeRecentChange( $attribs, $counter, $watchingUsers );
+       }
+
+       /**
+        * @dataProvider deleteChangeProvider
+        */
+       public function testNewForDeleteChange( $expected, $context, $messages, $recentChange, $watched ) {
+               $cacheEntryFactory = new RCCacheEntryFactory( $context, $messages );
+               $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, $watched );
+
+               $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry );
+
+               $this->assertEquals( $watched, $cacheEntry->watched, 'watched' );
+               $this->assertEquals( $expected['timestamp'], $cacheEntry->timestamp, 'timestamp' );
+               $this->assertEquals(
+                       $expected['numberofWatchingusers'],
+                       $cacheEntry->numberofWatchingusers, 'watching users'
+               );
+               $this->assertEquals( $expected['unpatrolled'], $cacheEntry->unpatrolled, 'unpatrolled' );
+
+               $this->assertDeleteLogLink( $cacheEntry );
+               $this->assertUserLinks( 'Mary', $cacheEntry );
+
+               $this->assertEquals( 'cur', $cacheEntry->curlink, 'cur link for delete log or rev' );
+               $this->assertEquals( 'diff', $cacheEntry->difflink, 'diff link for delete log or rev' );
+               $this->assertEquals( 'prev', $cacheEntry->lastlink, 'pref link for delete log or rev' );
+       }
+
+       public function deleteChangeProvider() {
+               return array(
+                       array(
+                               array(
+                                       'title' => 'Abc',
+                                       'user' => 'Mary',
+                                       'timestamp' => '21:21',
+                                       'numberofWatchingusers' => 0,
+                                       'unpatrolled' => false
+                               ),
+                               $this->getContext(),
+                               $this->getMessages(),
+                               $this->makeLogRecentChange(
+                                       'Abc',
+                                       $this->getTestUser(),
+                                       '20131103212153',
+                                       0, // counter
+                                       0 // number of watching users
+                               ),
+                               false,
+                               'delete'
+                       )
+               );
+       }
+
+       private function makeLogRecentChange( $title, $user, $timestamp, $counter, $watchingUsers ) {
+               $attribs = array_merge(
+                       $this->getDefaultAttributes( $title, $timestamp ),
+                       array(
+                               'rc_cur_id' => 0,
+                               'rc_user' => $user->getId(),
+                               'rc_user_text' => $user->getName(),
+                               'rc_this_oldid' => 0,
+                               'rc_last_oldid' => 0,
+                               'rc_old_len' => null,
+                               'rc_new_len' => null,
+                               'rc_type' => 3,
+                               'rc_logid' => 25,
+                               'rc_log_type' => 'delete',
+                               'rc_log_action' => 'delete'
+                       )
+               );
+
+               return $this->makeRecentChange( $attribs, $counter, $watchingUsers );
+       }
+
+       /**
+        * @dataProvider revUserDeleteProvider
+        */
+       public function testNewForRevUserDeleteChange( $expected, $context, $messages,
+               $recentChange, $watched
+       ) {
+               $cacheEntryFactory = new RCCacheEntryFactory( $context, $messages );
+               $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, $watched );
+
+               $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry );
+
+               $this->assertEquals( $watched, $cacheEntry->watched, 'watched' );
+               $this->assertEquals( $expected['timestamp'], $cacheEntry->timestamp, 'timestamp' );
+               $this->assertEquals(
+                       $expected['numberofWatchingusers'],
+                       $cacheEntry->numberofWatchingusers, 'watching users'
+               );
+               $this->assertEquals( $expected['unpatrolled'], $cacheEntry->unpatrolled, 'unpatrolled' );
+
+               $this->assertRevDel( $cacheEntry );
+               $this->assertTitleLink( 'Zzz', $cacheEntry );
+
+               $this->assertEquals( 'cur', $cacheEntry->curlink, 'cur link for delete log or rev' );
+               $this->assertEquals( 'diff', $cacheEntry->difflink, 'diff link for delete log or rev' );
+               $this->assertEquals( 'prev', $cacheEntry->lastlink, 'pref link for delete log or rev' );
+       }
+
+       public function revUserDeleteProvider() {
+               return array(
+                       array(
+                               array(
+                                       'title' => 'Zzz',
+                                       'user' => 'Mary',
+                                       'diff' => '',
+                                       'cur' => '',
+                                       'timestamp' => '21:21',
+                                       'numberofWatchingusers' => 0,
+                                       'unpatrolled' => false
+                               ),
+                               $this->getContext(),
+                               $this->getMessages(),
+                               $this->makeDeletedEditRecentChange(
+                                       'Zzz',
+                                       $this->getTestUser(),
+                                       '20131103212153',
+                                       191, // thisid
+                                       190, // lastid
+                                       '20131103212153',
+                                       0, // counter
+                                       0 // number of watching users
+                               ),
+                               false,
+                               'deletedrevuser'
+                       )
+               );
+       }
+
+       private function makeDeletedEditRecentChange( $title, $user, $timestamp, $curid, $thisid,
+               $lastid, $counter, $watchingUsers
+       ) {
+               $attribs = array_merge(
+                       $this->getDefaultAttributes( $title, $timestamp ),
+                       array(
+                               'rc_user' => $user->getId(),
+                               'rc_user_text' => $user->getName(),
+                               'rc_deleted' => 5,
+                               'rc_cur_id' => $curid,
+                               'rc_this_oldid' => $thisid,
+                               'rc_last_oldid' => $lastid
+                       )
+               );
+
+               return $this->makeRecentChange( $attribs, $counter, $watchingUsers );
+       }
+
+       private function assertUserLinks( $user, $cacheEntry ) {
+               $this->assertTag(
+                       array(
+                               'tag' => 'a',
+                               'attributes' => array(
+                                       'class' => 'new mw-userlink'
+                               ),
+                               'content' => $user
+                       ),
+                       $cacheEntry->userlink,
+                       'verify user link'
+               );
+
+               $this->assertTag(
+                       array(
+                               'tag' => 'span',
+                               'attributes' => array(
+                                       'class' => 'mw-usertoollinks'
+                               ),
+                               'child' => array(
+                                       'tag' => 'a',
+                                       'content' => 'Talk',
+                               )
+                       ),
+                       $cacheEntry->usertalklink,
+                       'verify user talk link'
+               );
+
+               $this->assertTag(
+                       array(
+                               'tag' => 'span',
+                               'attributes' => array(
+                                       'class' => 'mw-usertoollinks'
+                               ),
+                               'child' => array(
+                                       'tag' => 'a',
+                                       'content' => 'contribs',
+                               )
+                       ),
+                       $cacheEntry->usertalklink,
+                       'verify user tool links'
+               );
+       }
+
+       private function assertDeleteLogLink( $cacheEntry ) {
+               $this->assertTag(
+                       array(
+                               'tag' => 'a',
+                               'attributes' => array(
+                                       'href' => '/wiki/Special:Log/delete',
+                                       'title' => 'Special:Log/delete'
+                               ),
+                               'content' => 'Deletion log'
+                       ),
+                       $cacheEntry->link,
+                       'verify deletion log link'
+               );
+       }
+
+       private function assertRevDel( $cacheEntry ) {
+               $this->assertTag(
+                       array(
+                               'tag' => 'span',
+                               'attributes' => array(
+                                       'class' => 'history-deleted'
+                               ),
+                               'content' => '(username removed)'
+                       ),
+                       $cacheEntry->userlink,
+                       'verify user link for change with deleted revision and user'
+               );
+       }
+
+       private function assertTitleLink( $title, $cacheEntry ) {
+               $this->assertTag(
+                       array(
+                               'tag' => 'a',
+                               'attributes' => array(
+                                       'href' => '/wiki/' . $title,
+                                       'title' => $title
+                               ),
+                               'content' => $title
+                       ),
+                       $cacheEntry->link,
+                       'verify title link'
+               );
+       }
+
+       private function assertQueryLink( $content, $params, $link ) {
+               $this->assertTag(
+                       array(
+                               'tag' => 'a',
+                               'content' => $content
+                       ),
+                       $link,
+                       'assert query link element'
+               );
+
+               foreach ( $params as $key => $value ) {
+                       $this->assertRegExp( '/' . $key . '=' . $value . '/', $link, "verify $key link params" );
+               }
+       }
+
+       private function makeRecentChange( $attribs, $counter, $watchingUsers ) {
+               $change = new RecentChange();
+               $change->setAttribs( $attribs );
+               $change->counter = $counter;
+               $change->numberofWatchingusers = $watchingUsers;
+
+               return $change;
+       }
+
+       private function getDefaultAttributes( $title, $timestamp ) {
+               return array(
+                       'rc_id' => 545,
+                       'rc_user' => 0,
+                       'rc_user_text' => '127.0.0.1',
+                       'rc_ip' => '127.0.0.1',
+                       'rc_title' => $title,
+                       'rc_namespace' => 0,
+                       'rc_timestamp' => $timestamp,
+                       'rc_cur_time' => $timestamp,
+                       'rc_old_len' => 212,
+                       'rc_new_len' => 188,
+                       'rc_comment' => '',
+                       'rc_minor' => 0,
+                       'rc_bot' => 0,
+                       'rc_type' => 0,
+                       'rc_patrolled' => 1,
+                       'rc_deleted' => 0,
+                       'rc_logid' => 0,
+                       'rc_log_type' => null,
+                       'rc_log_action' => '',
+                       'rc_params' => '',
+                       'rc_source' => 'mw.edit'
+               );
+       }
+
+       private function getTestUser() {
+               $user = User::newFromName( 'Mary' );
+
+               if ( !$user->getId() ) {
+                       $user->addToDatabase();
+               }
+
+               return $user;
+       }
+
+       private function getMessages() {
+               return array(
+                       'cur' => 'cur',
+                       'diff' => 'diff',
+                       'hist' => 'hist',
+                       'enhancedrc-history' => 'history',
+                       'last' => 'prev',
+                       'blocklink' => 'block',
+                       'history' => 'Page history',
+                       'semicolon-separator' => '; ',
+                       'pipe-separator' => ' | '
+               );
+       }
+
+       private function getContext() {
+               $title = Title::newFromText( 'RecentChanges', NS_SPECIAL );
+
+               $context = new RequestContext();
+               $context->setTitle( $title );
+               $context->setLanguage( Language::factory( 'en' ) );
+
+               $user = $this->getTestUser();
+               $context->setUser( $user );
+
+               return $context;
+       }
+}
index cfa3e77..c63675e 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @group Database
  */
@@ -136,7 +137,8 @@ class RecentChangeTest extends MediaWikiTestCase {
 
                # move/move
                $this->assertIRCComment(
-                       $this->context->msg( '1movedto2', 'SomeTitle', 'TestTarget' )->plain() . $sep . $this->user_comment,
+                       $this->context->msg( '1movedto2', 'SomeTitle', 'TestTarget' )
+                               ->plain() . $sep . $this->user_comment,
                        'move', 'move',
                        $move_params,
                        $this->user_comment
@@ -144,7 +146,8 @@ class RecentChangeTest extends MediaWikiTestCase {
 
                # move/move_redir
                $this->assertIRCComment(
-                       $this->context->msg( '1movedto2_redir', 'SomeTitle', 'TestTarget' )->plain() . $sep . $this->user_comment,
+                       $this->context->msg( '1movedto2_redir', 'SomeTitle', 'TestTarget' )
+                               ->plain() . $sep . $this->user_comment,
                        'move', 'move_redir',
                        $move_params,
                        $this->user_comment
@@ -178,7 +181,8 @@ class RecentChangeTest extends MediaWikiTestCase {
 
                # protect/protect
                $this->assertIRCComment(
-                       $this->context->msg( 'protectedarticle', 'SomeTitle ' . $protectParams[0] )->plain() . $sep . $this->user_comment,
+                       $this->context->msg( 'protectedarticle', 'SomeTitle ' . $protectParams[0] )
+                               ->plain() . $sep . $this->user_comment,
                        'protect', 'protect',
                        $protectParams,
                        $this->user_comment
@@ -194,7 +198,8 @@ class RecentChangeTest extends MediaWikiTestCase {
 
                # protect/modify
                $this->assertIRCComment(
-                       $this->context->msg( 'modifiedarticleprotection', 'SomeTitle ' . $protectParams[0] )->plain() . $sep . $this->user_comment,
+                       $this->context->msg( 'modifiedarticleprotection', 'SomeTitle ' . $protectParams[0] )
+                               ->plain() . $sep . $this->user_comment,
                        'protect', 'modify',
                        $protectParams,
                        $this->user_comment
@@ -255,8 +260,9 @@ class RecentChangeTest extends MediaWikiTestCase {
         * @param $comment String (optional) A comment for the log action
         * @param $msg String (optional) A message for PHPUnit :-)
         */
-       protected function assertIRCComment( $expected, $type, $action, $params, $comment = null, $msg = '' ) {
-
+       protected function assertIRCComment( $expected, $type, $action, $params,
+               $comment = null, $msg = ''
+       ) {
                $logEntry = new ManualLogEntry( $type, $action );
                $logEntry->setPerformer( $this->user );
                $logEntry->setTarget( $this->title );
diff --git a/tests/phpunit/includes/composer/ComposerVersionNormalizerTest.php b/tests/phpunit/includes/composer/ComposerVersionNormalizerTest.php
new file mode 100644 (file)
index 0000000..8de8be1
--- /dev/null
@@ -0,0 +1,156 @@
+<?php
+
+/**
+ * @covers ComposerVersionNormalizer
+ *
+ * @group ComposerHooks
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class ComposerVersionNormalizerTest extends PHPUnit_Framework_TestCase {
+
+       /**
+        * @dataProvider nonStringProvider
+        */
+       public function testGivenNonString_normalizeThrowsInvalidArgumentException( $nonString ) {
+               $normalizer = new ComposerVersionNormalizer();
+
+               $this->setExpectedException( 'InvalidArgumentException' );
+               $normalizer->normalizeSuffix( $nonString );
+       }
+
+       public function nonStringProvider() {
+               return array(
+                       array( null ),
+                       array( 42 ),
+                       array( array() ),
+                       array( new stdClass() ),
+                       array( true ),
+               );
+       }
+
+       /**
+        * @dataProvider simpleVersionProvider
+        */
+       public function testGivenSimpleVersion_normalizeSuffixReturnsAsIs( $simpleVersion ) {
+               $this->assertRemainsUnchanged( $simpleVersion );
+       }
+
+       protected function assertRemainsUnchanged( $version ) {
+               $normalizer = new ComposerVersionNormalizer();
+
+               $this->assertEquals(
+                       $version,
+                       $normalizer->normalizeSuffix( $version )
+               );
+       }
+
+       public function simpleVersionProvider() {
+               return array(
+                       array( '1.22.0' ),
+                       array( '1.19.2' ),
+                       array( '1.19.2.0' ),
+                       array( '1.9' ),
+                       array( '123.321.456.654' ),
+               );
+       }
+
+       /**
+        * @dataProvider complexVersionProvider
+        */
+       public function testGivenComplexVersionWithoutDash_normalizeSuffixAddsDash( $withoutDash, $withDash ) {
+               $normalizer = new ComposerVersionNormalizer();
+
+               $this->assertEquals(
+                       $withDash,
+                       $normalizer->normalizeSuffix( $withoutDash )
+               );
+       }
+
+       public function complexVersionProvider() {
+               return array(
+                       array( '1.22.0alpha', '1.22.0-alpha' ),
+                       array( '1.22.0RC', '1.22.0-RC' ),
+                       array( '1.19beta', '1.19-beta' ),
+                       array( '1.9RC4', '1.9-RC4' ),
+                       array( '1.9.1.2RC4', '1.9.1.2-RC4' ),
+                       array( '1.9.1.2RC', '1.9.1.2-RC' ),
+                       array( '123.321.456.654RC9001', '123.321.456.654-RC9001' ),
+               );
+       }
+
+       /**
+        * @dataProvider complexVersionProvider
+        */
+       public function testGivenComplexVersionWithDash_normalizeSuffixReturnsAsIs( $withoutDash, $withDash ) {
+               $this->assertRemainsUnchanged( $withDash );
+       }
+
+       /**
+        * @dataProvider fourLevelVersionsProvider
+        */
+       public function testGivenFourLevels_levelCountNormalizationDoesNothing( $version ) {
+               $normalizer = new ComposerVersionNormalizer();
+
+               $this->assertEquals(
+                       $version,
+                       $normalizer->normalizeLevelCount( $version )
+               );
+       }
+
+       public function fourLevelVersionsProvider() {
+               return array(
+                       array( '1.22.0.0' ),
+                       array( '1.19.2.4' ),
+                       array( '1.19.2.0' ),
+                       array( '1.9.0.1' ),
+                       array( '123.321.456.654' ),
+                       array( '123.321.456.654RC4' ),
+                       array( '123.321.456.654-RC4' ),
+               );
+       }
+
+       /**
+        * @dataProvider levelNormalizationProvider
+        */
+       public function testGivenFewerLevels_levelCountNormalizationEnsuresFourLevels( $expected, $version ) {
+               $normalizer = new ComposerVersionNormalizer();
+
+               $this->assertEquals(
+                       $expected,
+                       $normalizer->normalizeLevelCount( $version )
+               );
+       }
+
+       public function levelNormalizationProvider() {
+               return array(
+                       array( '1.22.0.0', '1.22' ),
+                       array( '1.22.0.0', '1.22.0' ),
+                       array( '1.19.2.0', '1.19.2' ),
+                       array( '12345.0.0.0', '12345' ),
+                       array( '12345.0.0.0-RC4', '12345-RC4' ),
+                       array( '12345.0.0.0-alpha', '12345-alpha' ),
+               );
+       }
+
+       /**
+        * @dataProvider invalidVersionProvider
+        */
+       public function testGivenInvalidVersion_normalizeSuffixReturnsAsIs( $invalidVersion ) {
+               $this->assertRemainsUnchanged( $invalidVersion );
+       }
+
+       public function invalidVersionProvider() {
+               return array(
+                       array( '1.221-a' ),
+                       array( '1.221-' ),
+                       array( '1.22rc4a' ),
+                       array( 'a1.22rc' ),
+                       array( '.1.22rc' ),
+                       array( 'a' ),
+                       array( 'alpha42' ),
+               );
+       }
+
+}
\ No newline at end of file
diff --git a/tests/phpunit/includes/diff/ArrayDiffFormatterTest.php b/tests/phpunit/includes/diff/ArrayDiffFormatterTest.php
new file mode 100644 (file)
index 0000000..50c5c57
--- /dev/null
@@ -0,0 +1,116 @@
+<?php
+
+/**
+ * @licence GNU GPL v2+
+ * @author Adam Shorland
+ *
+ * @group Diff
+ */
+class ArrayDiffFormatterTest extends MediaWikiTestCase {
+
+       /**
+        * @param Diff $input
+        * @param array $expectedOutput
+        * @dataProvider provideTestFormat
+        * @covers ArrayDiffFormatter::format
+        */
+       public function testFormat( $input, $expectedOutput ) {
+               $instance = new ArrayDiffFormatter();
+               $output = $instance->format( $input );
+               $this->assertEquals( $expectedOutput, $output );
+       }
+
+       private function getMockDiff( $edits ) {
+               $diff = $this->getMockBuilder( 'Diff' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $diff->expects( $this->any() )
+                       ->method( 'getEdits' )
+                       ->will( $this->returnValue( $edits ) );
+               return $diff;
+       }
+
+       private function getMockDiffOp( $type = null, $orig = array(), $closing = array() ) {
+               $diffOp = $this->getMockBuilder( 'DiffOp' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $diffOp->expects( $this->any() )
+                       ->method( 'getType' )
+                       ->will( $this->returnValue( $type ) );
+               $diffOp->expects( $this->any() )
+                       ->method( 'getOrig' )
+                       ->will( $this->returnValue( $orig ) );
+               if( $type === 'change' ) {
+                       $diffOp->expects( $this->any() )
+                               ->method( 'getClosing' )
+                               ->with( $this->isType( 'integer' ) )
+                               ->will( $this->returnCallback( function() {
+                                       return 'mockLine';
+                               } ) );
+               } else {
+                       $diffOp->expects( $this->any() )
+                               ->method( 'getClosing' )
+                               ->will( $this->returnValue( $closing ) );
+               }
+               return $diffOp;
+       }
+
+       public function provideTestFormat() {
+               $emptyArrayTestCases = array(
+                       $this->getMockDiff( array() ),
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'add' ) ) ),
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'delete' ) ) ),
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'change' ) ) ),
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'copy' ) ) ),
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'FOOBARBAZ' ) ) ),
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'add', 'line' ) ) ),
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'delete', array(), array( 'line' ) ) ) ),
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'copy', array(), array( 'line' ) ) ) ),
+               );
+
+               $otherTestCases = array();
+               $otherTestCases[] = array(
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'add', array( ), array( 'a1' ) ) ) ),
+                       array( array( 'action' => 'add', 'new' => 'a1', 'newline' => 1 ) ),
+               );
+               $otherTestCases[] = array(
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'add', array( ), array( 'a1', 'a2' ) ) ) ),
+                       array(
+                               array( 'action' => 'add', 'new' => 'a1', 'newline' => 1 ),
+                               array( 'action' => 'add', 'new' => 'a2', 'newline' => 2 ),
+                       ),
+               );
+               $otherTestCases[] = array(
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'delete', array( 'd1' ) ) ) ),
+                       array( array( 'action' => 'delete', 'old' => 'd1', 'oldline' => 1 ) ),
+               );
+               $otherTestCases[] = array(
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'delete', array( 'd1', 'd2' ) ) ) ),
+                       array(
+                               array( 'action' => 'delete', 'old' => 'd1', 'oldline' => 1 ),
+                               array( 'action' => 'delete', 'old' => 'd2', 'oldline' => 2 ),
+                       ),
+               );
+               $otherTestCases[] = array(
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'change', array( 'd1' ), array( 'a1' ) ) ) ),
+                       array( array( 'action' => 'change', 'old' => 'd1', 'new' => 'mockLine', 'newline' => 1, 'oldline' => 1 ) ),
+               );
+               $otherTestCases[] = array(
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'change', array( 'd1', 'd2' ), array( 'a1', 'a2' ) ) ) ),
+                       array(
+                               array( 'action' => 'change', 'old' => 'd1', 'new' => 'mockLine', 'newline' => 1, 'oldline' => 1 ),
+                               array( 'action' => 'change', 'old' => 'd2', 'new' => 'mockLine', 'newline' => 2, 'oldline' => 2 ),
+                       ),
+               );
+
+               $testCases = array();
+               foreach( $emptyArrayTestCases as $testCase ) {
+                       $testCases[] = array( $testCase, array() );
+               }
+               foreach( $otherTestCases as $testCase ) {
+                       $testCases[] = array( $testCase[0], $testCase[1] );
+               }
+               return $testCases;
+       }
+
+}
diff --git a/tests/phpunit/includes/diff/DiffOpTest.php b/tests/phpunit/includes/diff/DiffOpTest.php
new file mode 100644 (file)
index 0000000..fe2c566
--- /dev/null
@@ -0,0 +1,73 @@
+<?php
+
+//Load our FakeDiffOp
+require_once( __DIR__ . DIRECTORY_SEPARATOR . 'FakeDiffOp.php' );
+
+/**
+ * @licence GNU GPL v2+
+ * @author Adam Shorland
+ *
+ * @group Diff
+ */
+class DiffOpTest extends MediaWikiTestCase {
+
+       /**
+        * @covers DiffOp::getType
+        */
+       public function testGetType() {
+               $obj = new FakeDiffOp();
+               $obj->type = 'foo';
+               $this->assertEquals( 'foo', $obj->getType() );
+       }
+
+       /**
+        * @covers DiffOp::getOrig
+        */
+       public function testGetOrig() {
+               $obj = new FakeDiffOp();
+               $obj->orig = array( 'foo' );
+               $this->assertEquals( array( 'foo' ), $obj->getOrig() );
+       }
+
+       /**
+        * @covers DiffOp::getClosing
+        */
+       public function testGetClosing() {
+               $obj = new FakeDiffOp();
+               $obj->closing = array( 'foo' );
+               $this->assertEquals( array( 'foo' ), $obj->getClosing() );
+       }
+
+       /**
+        * @covers DiffOp::getClosing
+        */
+       public function testGetClosingWithParameter() {
+               $obj = new FakeDiffOp();
+               $obj->closing = array( 'foo', 'bar', 'baz' );
+               $this->assertEquals( 'foo' , $obj->getClosing( 0 ) );
+               $this->assertEquals( 'bar' , $obj->getClosing( 1 ) );
+               $this->assertEquals( 'baz' , $obj->getClosing( 2 ) );
+               $this->assertEquals( null , $obj->getClosing( 3 ) );
+       }
+
+       /**
+        * @covers DiffOp::norig
+        */
+       public function testNorig() {
+               $obj = new FakeDiffOp();
+               $this->assertEquals( 0, $obj->norig() );
+               $obj->orig = array( 'foo' );
+               $this->assertEquals( 1, $obj->norig() );
+       }
+
+       /**
+        * @covers DiffOp::nclosing
+        */
+       public function testNclosing() {
+               $obj = new FakeDiffOp();
+               $this->assertEquals( 0, $obj->nclosing() );
+               $obj->closing = array( 'foo' );
+               $this->assertEquals( 1, $obj->nclosing() );
+       }
+
+}
diff --git a/tests/phpunit/includes/diff/DiffTest.php b/tests/phpunit/includes/diff/DiffTest.php
new file mode 100644 (file)
index 0000000..1911c82
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * @licence GNU GPL v2+
+ * @author Adam Shorland
+ *
+ * @group Diff
+ */
+class DiffTest extends MediaWikiTestCase {
+
+       /**
+        * @covers Diff::getEdits
+        */
+       public function testGetEdits() {
+               $obj = new Diff( array(), array() );
+               $obj->edits = 'FooBarBaz';
+               $this->assertEquals( 'FooBarBaz', $obj->getEdits() );
+       }
+
+}
index f95eb5e..e1a69e3 100644 (file)
@@ -6,6 +6,7 @@
  * @todo tests for the rest of DifferenceEngine!
  *
  * @group Database
+ * @group Diff
  *
  * @licence GNU GPL v2+
  * @author Katie Filbert < aude.wiki@gmail.com >
diff --git a/tests/phpunit/includes/diff/FakeDiffOp.php b/tests/phpunit/includes/diff/FakeDiffOp.php
new file mode 100644 (file)
index 0000000..70c8f64
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * Class FakeDiffOp used to test abstract class DiffOp
+ */
+class FakeDiffOp extends DiffOp {
+
+       public function reverse() {
+               return null;
+       }
+}
diff --git a/tests/phpunit/includes/exception/BadTitleErrorTest.php b/tests/phpunit/includes/exception/BadTitleErrorTest.php
new file mode 100644 (file)
index 0000000..6f9804d
--- /dev/null
@@ -0,0 +1,44 @@
+<?php
+/**
+ * @covers BadTitleError
+ * @author Adam Shorland
+ */
+class BadTitleErrorTest extends MediaWikiTestCase {
+
+       protected $wgOut;
+
+       protected function setUp() {
+               parent::setUp();
+               global $wgOut;
+               $this->wgOut = clone $wgOut;
+       }
+
+       protected function tearDown() {
+               parent::tearDown();
+               global $wgOut;
+               $wgOut = $this->wgOut;
+       }
+
+       public function testExceptionSetsStatusCode() {
+               global $wgOut;
+               $wgOut = $this->getMockWgOut();
+               try{
+                       throw new BadTitleError();
+               }
+               catch( BadTitleError $e ) {
+                       $e->report();
+                       $this->assertTrue( true );
+               }
+       }
+
+       private function getMockWgOut() {
+               $mock = $this->getMockBuilder( 'OutputPage' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $mock->expects( $this->once() )
+                       ->method( 'setStatusCode' )
+                       ->with( 400 );
+               return $mock;
+       }
+
+}
diff --git a/tests/phpunit/includes/exception/ErrorPageErrorTest.php b/tests/phpunit/includes/exception/ErrorPageErrorTest.php
new file mode 100644 (file)
index 0000000..4cfcd83
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * @covers ErrorPageError
+ * @author Adam Shorland
+ */
+class ErrorPageErrorTest extends MediaWikiTestCase {
+
+       private $wgOut;
+
+       protected function setUp() {
+               parent::setUp();
+               global $wgOut;
+               $this->wgOut = clone $wgOut;
+       }
+
+       protected function tearDown() {
+               global $wgOut;
+               $wgOut = $this->wgOut;
+               parent::tearDown();
+       }
+
+       private function getMockMessage() {
+               $mockMessage = $this->getMockBuilder( 'Message' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $mockMessage->expects( $this->once() )
+                       ->method( 'inLanguage' )
+                       ->will( $this->returnValue( $mockMessage ) );
+               $mockMessage->expects(  $this->once() )
+                       ->method( 'useDatabase' )
+                       ->will( $this->returnValue( $mockMessage ) );
+               return $mockMessage;
+       }
+
+       public function testConstruction() {
+               $mockMessage = $this->getMockMessage();
+               $title = 'Foo';
+               $params = array( 'Baz' );
+               $e = new ErrorPageError( $title, $mockMessage, $params );
+               $this->assertEquals( $title, $e->title );
+               $this->assertEquals( $mockMessage, $e->msg );
+               $this->assertEquals( $params, $e->params );
+       }
+
+       public function testReport() {
+               $mockMessage = $this->getMockMessage();
+               $title = 'Foo';
+               $params = array( 'Baz' );
+
+               global $wgOut;
+               $wgOut = $this->getMockBuilder( 'OutputPage' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $wgOut->expects( $this->once() )
+                       ->method( 'showErrorPage' )
+                       ->with( $title, $mockMessage, $params );
+               $wgOut->expects( $this->once() )
+                       ->method( 'output' );
+
+               $e = new ErrorPageError( $title, $mockMessage, $params );
+               $e->report();
+       }
+
+
+
+}
diff --git a/tests/phpunit/includes/exception/MWExceptionHandlerTest.php b/tests/phpunit/includes/exception/MWExceptionHandlerTest.php
new file mode 100644 (file)
index 0000000..2eb1c46
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+/**
+ * @author Antoine Musso
+ * @copyright Copyright © 2013, Antoine Musso
+ * @copyright Copyright © 2013, Wikimedia Foundation Inc.
+ * @file
+ */
+
+class MWExceptionHandlerTest extends MediaWikiTestCase {
+
+       /**
+        * @covers MWExceptionHandler::getRedactedTrace
+        */
+       public function testGetRedactedTrace() {
+               $refvar = 'value';
+               try {
+                       $array = array( 'a', 'b' );
+                       $object = new StdClass();
+                       self::helperThrowAnException( $array, $object, $refvar );
+               } catch ( Exception $e ) {
+               }
+
+               # Make sure our stack trace contains an array and an object passed to
+               # some function in the stacktrace. Else, we can not assert the trace
+               # redaction achieved its job.
+               $trace = $e->getTrace();
+               $hasObject = false;
+               $hasArray = false;
+               foreach ( $trace as $frame ) {
+                       if ( ! isset( $frame['args'] ) ) {
+                               continue;
+                       }
+                       foreach ( $frame['args'] as $arg ) {
+                               $hasObject = $hasObject || is_object( $arg );
+                               $hasArray = $hasArray || is_array( $arg );
+                       }
+
+                       if ( $hasObject && $hasArray ) {
+                               break;
+                       }
+               }
+               $this->assertTrue( $hasObject,
+                       "The stacktrace must have a function having an object has parameter" );
+               $this->assertTrue( $hasArray,
+                       "The stacktrace must have a function having an array has parameter" );
+
+               # Now we redact the trace.. and make sure no function arguments are
+               # arrays or objects.
+               $redacted = MWExceptionHandler::getRedactedTrace( $e );
+
+               foreach ( $redacted as $frame ) {
+                       if ( ! isset( $frame['args'] ) ) {
+                               continue;
+                       }
+                       foreach ( $frame['args'] as $arg ) {
+                               $this->assertNotInternalType( 'array', $arg );
+                               $this->assertNotInternalType( 'object', $arg );
+                       }
+               }
+
+               $this->assertEquals( 'value', $refvar, 'Ensuring reference variable wasn\'t changed' );
+       }
+
+       /**
+        * Helper function for testExpandArgumentsInCall
+        *
+        * Pass it an object and an array, and something by reference :-)
+        *
+        * @throws Exception
+        */
+       protected static function helperThrowAnException( $a, $b, &$c ) {
+               throw new Exception();
+       }
+}
diff --git a/tests/phpunit/includes/exception/MWExceptionTest.php b/tests/phpunit/includes/exception/MWExceptionTest.php
new file mode 100644 (file)
index 0000000..2dc4850
--- /dev/null
@@ -0,0 +1,241 @@
+<?php
+/**
+ * @author Antoine Musso
+ * @copyright Copyright © 2013, Antoine Musso
+ * @copyright Copyright © 2013, Wikimedia Foundation Inc.
+ * @file
+ */
+
+class MWExceptionTest extends MediaWikiTestCase {
+
+       /**
+        * @expectedException MWException
+        */
+       public function testMwexceptionThrowing() {
+               throw new MWException();
+       }
+
+       /**
+        * @dataProvider provideTextUseOutputPage
+        * @covers MWException::useOutputPage
+        */
+       public function testUseOutputPage( $expected, $wgLang, $wgFullyInitialised, $wgOut ) {
+               $this->setMwGlobals( array(
+                       'wgLang' => $wgLang,
+                       'wgFullyInitialised' => $wgFullyInitialised,
+                       'wgOut' => $wgOut,
+               ) );
+
+               $e = new MWException();
+               $this->assertEquals( $expected, $e->useOutputPage() );
+       }
+
+       public function provideTextUseOutputPage() {
+               return array(
+                       // expected, wgLang, wgFullyInitialised, wgOut
+                       array( false, null, null, null ),
+                       array( false, $this->getMockLanguage(), null, null ),
+                       array( false, $this->getMockLanguage(), true, null ),
+                       array( false, null, true, null ),
+                       array( false, null, null, true ),
+                       array( true, $this->getMockLanguage(), true, true ),
+               );
+       }
+
+       private function getMockLanguage() {
+               return $this->getMockBuilder( 'Language' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+       }
+
+       /**
+        * @dataProvider provideUseMessageCache
+        * @covers MWException::useMessageCache
+        */
+       public function testUseMessageCache( $expected, $wgLang ) {
+               $this->setMwGlobals( array(
+                       'wgLang' => $wgLang,
+               ) );
+               $e = new MWException();
+               $this->assertEquals( $expected, $e->useMessageCache() );
+       }
+
+       public function provideUseMessageCache() {
+               return array(
+                       array( false, null ),
+                       array( true, $this->getMockLanguage() ),
+               );
+       }
+
+       /**
+        * @covers MWException::isLoggable
+        */
+       public function testIsLogable() {
+               $e = new MWException();
+               $this->assertTrue( $e->isLoggable() );
+       }
+
+       /**
+        * @dataProvider provideRunHooks
+        * @covers MWException::runHooks
+        */
+       public function testRunHooks( $wgExceptionHooks, $name, $args, $expectedReturn ) {
+               $this->setMwGlobals( array(
+                       'wgExceptionHooks' => $wgExceptionHooks,
+               ) );
+               $e = new MWException();
+               $this->assertEquals( $expectedReturn, $e->runHooks( $name, $args ) );
+       }
+
+       public function provideRunHooks() {
+               return array(
+                       array( null, null, null, null ),
+                       array( array(), 'name', array(), null ),
+                       array( array( 'name' => false ), 'name', array(), null ),
+                       array(
+                               array( 'mockHook' => array( 'MWExceptionTest::mockHook' ) ),
+                               'mockHook', array(), 'YAY.[]'
+                       ),
+                       array(
+                               array( 'mockHook' => array( 'MWExceptionTest::mockHook' ) ),
+                               'mockHook', array( 'a' ), 'YAY.{"1":"a"}'
+                       ),
+                       array(
+                               array( 'mockHook' => array( 'MWExceptionTest::mockHook' ) ),
+                               'mockHook', array( null ), null
+                       ),
+               );
+       }
+
+       /**
+        * Used in conjunction with provideRunHooks and testRunHooks as a mock callback for a hook
+        */
+       public static function mockHook() {
+               $args = func_get_args();
+               if( !$args[0] instanceof MWException ) {
+                       return '$caller not instance of MWException';
+               }
+               unset( $args[0] );
+               if( array_key_exists( 1, $args ) && $args[1] === null ) {
+                       return null;
+               }
+               return 'YAY.' . json_encode( $args );
+       }
+
+       /**
+        * @dataProvider provideIsCommandLine
+        * @covers MWException::isCommandLine
+        */
+       public function testisCommandLine( $expected, $wgCommandLineMode ) {
+               $this->setMwGlobals( array(
+                       'wgCommandLineMode' => $wgCommandLineMode,
+               ) );
+               $e = new MWException();
+               $this->assertEquals( $expected, $e->isCommandLine() );
+       }
+
+       public function provideIsCommandLine() {
+               return array(
+                       array( false, null ),
+                       array( true, true ),
+               );
+       }
+
+       /**
+        * Verify the exception classes are JSON serializabe.
+        *
+        * @covers MWExceptionHandler::jsonSerializeException
+        * @dataProvider provideExceptionClasses
+        */
+       public function testJsonSerializeExceptions( $exception_class ) {
+               $json = MWExceptionHandler::jsonSerializeException(
+                       new $exception_class()
+               );
+               $this->assertNotEquals( false, $json,
+                       "The $exception_class exception should be JSON serializable, got false." );
+       }
+
+       public function provideExceptionClasses() {
+               return array(
+                       array( 'Exception' ),
+                       array( 'MWException' ),
+               );
+       }
+
+       /**
+        * Lame JSON schema validation.
+        *
+        * @covers MWExceptionHandler::jsonSerializeException
+        *
+        * @param $expectedKeyType String Type expected as returned by gettype()
+        * @param $exClass String An exception class (ie: Exception, MWException)
+        * @param $key String Name of the key to validate in the serialized JSON
+        * @dataProvider provideJsonSerializedKeys
+        */
+       public function testJsonserializeexceptionKeys( $expectedKeyType, $exClass, $key ) {
+
+               # Make sure we log a backtrace:
+               $this->setMwGlobals( array( 'wgLogExceptionBacktrace' => true ) );
+
+               $json = json_decode(
+                       MWExceptionHandler::jsonSerializeException( new $exClass())
+               );
+               $this->assertObjectHasAttribute( $key, $json,
+                       "JSON serialized exception is missing key '$key'"
+               );
+               $this->assertInternalType( $expectedKeyType, $json->$key,
+                       "JSON serialized key '$key' has type " . gettype( $json->$key )
+                       . " (expected: $expectedKeyType)."
+               );
+       }
+
+       /**
+        * Returns test cases: exception class, key name, gettype()
+        */
+       public function provideJsonSerializedKeys() {
+               $testCases = array();
+               foreach ( array( 'Exception', 'MWException' ) as $exClass ) {
+                       $exTests = array(
+                               array( 'string', $exClass, 'id' ),
+                               array( 'string', $exClass, 'file' ),
+                               array( 'integer', $exClass, 'line' ),
+                               array( 'string', $exClass, 'message' ),
+                               array( 'null', $exClass, 'url' ),
+                               # Backtrace only enabled with wgLogExceptionBacktrace = true
+                               array( 'array', $exClass, 'backtrace' ),
+                       );
+                       $testCases = array_merge( $testCases, $exTests );
+               }
+               return $testCases;
+       }
+
+       /**
+        * Given wgLogExceptionBacktrace is true
+        * then serialized exception SHOULD have a backtrace
+        *
+        * @covers MWExceptionHandler::jsonSerializeException
+        */
+       public function testJsonserializeexceptionBacktracingEnabled() {
+               $this->setMwGlobals( array( 'wgLogExceptionBacktrace' => true ) );
+               $json = json_decode(
+                       MWExceptionHandler::jsonSerializeException( new Exception() )
+               );
+               $this->assertObjectHasAttribute( 'backtrace', $json );
+       }
+
+       /**
+        * Given wgLogExceptionBacktrace is false
+        * then serialized exception SHOULD NOT have a backtrace
+        *
+        * @covers MWExceptionHandler::jsonSerializeException
+        */
+       public function testJsonserializeexceptionBacktracingDisabled() {
+               $this->setMwGlobals( array( 'wgLogExceptionBacktrace' => false ) );
+               $json = json_decode(
+                       MWExceptionHandler::jsonSerializeException( new Exception() )
+               );
+               $this->assertObjectNotHasAttribute( 'backtrace', $json );
+
+       }
+
+}
diff --git a/tests/phpunit/includes/exception/ReadOnlyErrorTest.php b/tests/phpunit/includes/exception/ReadOnlyErrorTest.php
new file mode 100644 (file)
index 0000000..352ec65
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * @covers ReadOnlyError
+ * @author Adam Shorland
+ */
+class ReadOnlyErrorTest extends MediaWikiTestCase {
+
+       public function testConstruction() {
+               $e = new ReadOnlyError();
+               $this->assertEquals( 'readonly', $e->title );
+               $this->assertEquals( 'readonlytext', $e->msg );
+               $this->assertEquals( wfReadOnlyReason()?: array(), $e->params );
+       }
+
+}
diff --git a/tests/phpunit/includes/exception/ThrottledErrorTest.php b/tests/phpunit/includes/exception/ThrottledErrorTest.php
new file mode 100644 (file)
index 0000000..ca67241
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * @covers ThrottledError
+ * @author Adam Shorland
+ */
+class ThrottledErrorTest extends MediaWikiTestCase {
+
+       protected $wgOut;
+
+       protected function setUp() {
+               parent::setUp();
+               global $wgOut;
+               $this->wgOut = clone $wgOut;
+       }
+
+       protected function tearDown() {
+               parent::tearDown();
+               global $wgOut;
+               $wgOut = $this->wgOut;
+       }
+
+       public function testExceptionSetsStatusCode() {
+               global $wgOut;
+               $wgOut = $this->getMockWgOut();
+               try{
+                       throw new ThrottledError();
+               }
+               catch( ThrottledError $e ) {
+                       $e->report();
+                       $this->assertTrue( true );
+               }
+       }
+
+       private function getMockWgOut() {
+               $mock = $this->getMockBuilder( 'OutputPage' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $mock->expects( $this->once() )
+                       ->method( 'setStatusCode' )
+                       ->with( 503 );
+               return $mock;
+       }
+
+}
diff --git a/tests/phpunit/includes/exception/UserNotLoggedInTest.php b/tests/phpunit/includes/exception/UserNotLoggedInTest.php
new file mode 100644 (file)
index 0000000..591a0fa
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * @covers UserNotLoggedIn
+ * @author Adam Shorland
+ */
+class UserNotLoggedInTest extends MediaWikiTestCase {
+
+       public function testConstruction() {
+               $e = new UserNotLoggedIn();
+               $this->assertEquals( 'exception-nologin', $e->title );
+               $this->assertEquals( 'exception-nologin-text', $e->msg );
+               $this->assertEquals( array(), $e->params );
+       }
+
+}
index 0e5f267..8466684 100644 (file)
@@ -48,13 +48,13 @@ class InstallDocFormatterTest extends MediaWikiTestCase {
 
                        # Transform '$wgFooBar' links
                        array(
-                               '<span class="config-plainlink">[http://www.mediawiki.org/wiki/Manual:$wgFooBar $wgFooBar]</span>',
+                               '<span class="config-plainlink">[https://www.mediawiki.org/wiki/Manual:$wgFooBar $wgFooBar]</span>',
                                '$wgFooBar', 'Testing basic $wgFooBar' ),
                        array(
-                               '<span class="config-plainlink">[http://www.mediawiki.org/wiki/Manual:$wgFooBar45 $wgFooBar45]</span>',
+                               '<span class="config-plainlink">[https://www.mediawiki.org/wiki/Manual:$wgFooBar45 $wgFooBar45]</span>',
                                '$wgFooBar45', 'Testing $wgFooBar45 (with numbers)' ),
                        array(
-                               '<span class="config-plainlink">[http://www.mediawiki.org/wiki/Manual:$wgFoo_Bar $wgFoo_Bar]</span>',
+                               '<span class="config-plainlink">[https://www.mediawiki.org/wiki/Manual:$wgFoo_Bar $wgFoo_Bar]</span>',
                                '$wgFoo_Bar', 'Testing $wgFoo_Bar (with underscore)' ),
 
                        # Icky variables that shouldn't link
index 5a3c161..c8b20d2 100644 (file)
@@ -31,8 +31,10 @@ class CSSJanusTest extends MediaWikiTestCase {
         * @dataProvider provideTransformAdvancedCases
         */
        public function testTransformAdvanced( $code, $expectedOutput, $options = array() ) {
-               $swapLtrRtlInURL = isset( $options['swapLtrRtlInURL'] ) ? $options['swapLtrRtlInURL'] : false;
-               $swapLeftRightInURL = isset( $options['swapLeftRightInURL'] ) ? $options['swapLeftRightInURL'] : false;
+               $swapLtrRtlInURL = isset( $options['swapLtrRtlInURL'] ) ?
+                       $options['swapLtrRtlInURL'] : false;
+               $swapLeftRightInURL = isset( $options['swapLeftRightInURL'] ) ?
+                       $options['swapLeftRightInURL'] : false;
 
                $flipped = CSSJanus::transform( $code, $swapLtrRtlInURL, $swapLeftRightInURL );
 
@@ -437,6 +439,26 @@ class CSSJanusTest extends MediaWikiTestCase {
                                'div { float: left; /* @noflip */ text-align: left; }',
                                'div { float: right; /* @noflip */ text-align: left; }'
                        ),
+                       array(
+                               // before a *= attribute selector with multiple properties
+                               '/* @noflip */ div.foo[bar*=baz] { float:left; clear: left; }'
+                       ),
+                       array(
+                               // before a ^= attribute selector with multiple properties
+                               '/* @noflip */ div.foo[bar^=baz] { float:left; clear: left; }'
+                       ),
+                       array(
+                               // before a ~= attribute selector with multiple properties
+                               '/* @noflip */ div.foo[bar~=baz] { float:left; clear: left; }'
+                       ),
+                       array(
+                               // before a = attribute selector with multiple properties
+                               '/* @noflip */ div.foo[bar=baz] { float:left; clear: left; }'
+                       ),
+                       array(
+                               // before a quoted attribute selector with multiple properties
+                               '/* @noflip */ div.foo[bar=\'baz{quux\'] { float:left; clear: left; }'
+                       ),
 
                        // Guard against css3 stuff
                        array(
index 62ee45a..01c330a 100644 (file)
@@ -154,6 +154,7 @@ class JavaScriptMinifierTest extends MediaWikiTestCase {
        /**
         * @dataProvider provideBug32548
         * @covers JavaScriptMinifier::minify
+        * @todo give this test a real name explaining what is being tested here
         */
        public function testBug32548Exponent( $num ) {
                // Long line breaking was being incorrectly done between the base and
diff --git a/tests/phpunit/includes/libs/ProcessCacheLRUTest.php b/tests/phpunit/includes/libs/ProcessCacheLRUTest.php
new file mode 100644 (file)
index 0000000..3eae810
--- /dev/null
@@ -0,0 +1,237 @@
+<?php
+
+/**
+ * Test for ProcessCacheLRU class.
+ *
+ * Note that it uses the ProcessCacheLRUTestable class which extends some
+ * properties and methods visibility. That class is defined at the end of the
+ * file containing this class.
+ *
+ * @group Cache
+ */
+class ProcessCacheLRUTest extends MediaWikiTestCase {
+
+       /**
+        * Helper to verify emptiness of a cache object.
+        * Compare against an array so we get the cache content difference.
+        */
+       function assertCacheEmpty( $cache, $msg = 'Cache should be empty' ) {
+               $this->assertAttributeEquals( array(), 'cache', $cache, $msg );
+       }
+
+       /**
+        * Helper to fill a cache object passed by reference
+        */
+       function fillCache( &$cache, $numEntries ) {
+               // Fill cache with three values
+               for ( $i = 1; $i <= $numEntries; $i++ ) {
+                       $cache->set( "cache-key-$i", "prop-$i", "value-$i" );
+               }
+       }
+
+       /**
+        * Generates an array of what would be expected in cache for a given cache
+        * size and a number of entries filled in sequentially
+        */
+       function getExpectedCache( $cacheMaxEntries, $entryToFill ) {
+               $expected = array();
+
+               if ( $entryToFill === 0 ) {
+                       # The cache is empty!
+                       return array();
+               } elseif ( $entryToFill <= $cacheMaxEntries ) {
+                       # Cache is not fully filled
+                       $firstKey = 1;
+               } else {
+                       # Cache overflowed
+                       $firstKey = 1 + $entryToFill - $cacheMaxEntries;
+               }
+
+               $lastKey = $entryToFill;
+
+               for ( $i = $firstKey; $i <= $lastKey; $i++ ) {
+                       $expected["cache-key-$i"] = array( "prop-$i" => "value-$i" );
+               }
+
+               return $expected;
+       }
+
+       /**
+        * Highlight diff between assertEquals and assertNotSame
+        */
+       public function testPhpUnitArrayEquality() {
+               $one = array( 'A' => 1, 'B' => 2 );
+               $two = array( 'B' => 2, 'A' => 1 );
+               $this->assertEquals( $one, $two ); // ==
+               $this->assertNotSame( $one, $two ); // ===
+       }
+
+       /**
+        * @dataProvider provideInvalidConstructorArg
+        * @expectedException UnexpectedValueException
+        */
+       public function testConstructorGivenInvalidValue( $maxSize ) {
+               new ProcessCacheLRUTestable( $maxSize );
+       }
+
+       /**
+        * Value which are forbidden by the constructor
+        */
+       public static function provideInvalidConstructorArg() {
+               return array(
+                       array( null ),
+                       array( array() ),
+                       array( new stdClass() ),
+                       array( 0 ),
+                       array( '5' ),
+                       array( -1 ),
+               );
+       }
+
+       public function testAddAndGetAKey() {
+               $oneCache = new ProcessCacheLRUTestable( 1 );
+               $this->assertCacheEmpty( $oneCache );
+
+               // First set just one value
+               $oneCache->set( 'cache-key', 'prop1', 'value1' );
+               $this->assertEquals( 1, $oneCache->getEntriesCount() );
+               $this->assertTrue( $oneCache->has( 'cache-key', 'prop1' ) );
+               $this->assertEquals( 'value1', $oneCache->get( 'cache-key', 'prop1' ) );
+       }
+
+       public function testDeleteOldKey() {
+               $oneCache = new ProcessCacheLRUTestable( 1 );
+               $this->assertCacheEmpty( $oneCache );
+
+               $oneCache->set( 'cache-key', 'prop1', 'value1' );
+               $oneCache->set( 'cache-key', 'prop1', 'value2' );
+               $this->assertEquals( 'value2', $oneCache->get( 'cache-key', 'prop1' ) );
+       }
+
+       /**
+        * This test that we properly overflow when filling a cache with
+        * a sequence of always different cache-keys. Meant to verify we correclty
+        * delete the older key.
+        *
+        * @dataProvider provideCacheFilling
+        * @param $cacheMaxEntries Maximum entry the created cache will hold
+        * @param $entryToFill Number of entries to insert in the created cache.
+        */
+       public function testFillingCache( $cacheMaxEntries, $entryToFill, $msg = '' ) {
+               $cache = new ProcessCacheLRUTestable( $cacheMaxEntries );
+               $this->fillCache( $cache, $entryToFill );
+
+               $this->assertSame(
+                       $this->getExpectedCache( $cacheMaxEntries, $entryToFill ),
+                       $cache->getCache(),
+                       "Filling a $cacheMaxEntries entries cache with $entryToFill entries"
+               );
+       }
+
+       /**
+        * Provider for testFillingCache
+        */
+       public static function provideCacheFilling() {
+               // ($cacheMaxEntries, $entryToFill, $msg='')
+               return array(
+                       array( 1, 0 ),
+                       array( 1, 1 ),
+                       array( 1, 2 ), # overflow
+                       array( 5, 33 ), # overflow
+               );
+       }
+
+       /**
+        * Create a cache with only one remaining entry then update
+        * the first inserted entry. Should bump it to the top.
+        */
+       public function testReplaceExistingKeyShouldBumpEntryToTop() {
+               $maxEntries = 3;
+
+               $cache = new ProcessCacheLRUTestable( $maxEntries );
+               // Fill cache leaving just one remaining slot
+               $this->fillCache( $cache, $maxEntries - 1 );
+
+               // Set an existing cache key
+               $cache->set( "cache-key-1", "prop-1", "new-value-for-1" );
+
+               $this->assertSame(
+                       array(
+                               'cache-key-2' => array( 'prop-2' => 'value-2' ),
+                               'cache-key-1' => array( 'prop-1' => 'new-value-for-1' ),
+                       ),
+                       $cache->getCache()
+               );
+       }
+
+       public function testRecentlyAccessedKeyStickIn() {
+               $cache = new ProcessCacheLRUTestable( 2 );
+               $cache->set( 'first', 'prop1', 'value1' );
+               $cache->set( 'second', 'prop2', 'value2' );
+
+               // Get first
+               $cache->get( 'first', 'prop1' );
+               // Cache a third value, should invalidate the least used one
+               $cache->set( 'third', 'prop3', 'value3' );
+
+               $this->assertFalse( $cache->has( 'second', 'prop2' ) );
+       }
+
+       /**
+        * This first create a full cache then update the value for the 2nd
+        * filled entry.
+        * Given a cache having 1,2,3 as key, updating 2 should bump 2 to
+        * the top of the queue with the new value: 1,3,2* (* = updated).
+        */
+       public function testReplaceExistingKeyInAFullCacheShouldBumpToTop() {
+               $maxEntries = 3;
+
+               $cache = new ProcessCacheLRUTestable( $maxEntries );
+               $this->fillCache( $cache, $maxEntries );
+
+               // Set an existing cache key
+               $cache->set( "cache-key-2", "prop-2", "new-value-for-2" );
+               $this->assertSame(
+                       array(
+                               'cache-key-1' => array( 'prop-1' => 'value-1' ),
+                               'cache-key-3' => array( 'prop-3' => 'value-3' ),
+                               'cache-key-2' => array( 'prop-2' => 'new-value-for-2' ),
+                       ),
+                       $cache->getCache()
+               );
+               $this->assertEquals( 'new-value-for-2',
+                       $cache->get( 'cache-key-2', 'prop-2' )
+               );
+       }
+
+       public function testBumpExistingKeyToTop() {
+               $cache = new ProcessCacheLRUTestable( 3 );
+               $this->fillCache( $cache, 3 );
+
+               // Set the very first cache key to a new value
+               $cache->set( "cache-key-1", "prop-1", "new value for 1" );
+               $this->assertEquals(
+                       array(
+                               'cache-key-2' => array( 'prop-2' => 'value-2' ),
+                               'cache-key-3' => array( 'prop-3' => 'value-3' ),
+                               'cache-key-1' => array( 'prop-1' => 'new value for 1' ),
+                       ),
+                       $cache->getCache()
+               );
+       }
+}
+
+/**
+ * Overrides some ProcessCacheLRU methods and properties accessibility.
+ */
+class ProcessCacheLRUTestable extends ProcessCacheLRU {
+       public $cache = array();
+
+       public function getCache() {
+               return $this->cache;
+       }
+
+       public function getEntriesCount() {
+               return count( $this->cache );
+       }
+}
index e24c088..dc5db82 100644 (file)
@@ -32,8 +32,6 @@ class RunningStatTest extends MediaWikiTestCase {
                        return pow( $mean - $x, 2 );
                }, $this->points ) ) / ( count( $rstat ) - 1 );
                $stddev = sqrt( $variance );
-               $min = min( $this->points );
-               $max = max( $this->points );
 
                $this->assertEquals( count( $rstat ), count( $this->points ) );
                $this->assertEquals( $rstat->min, min( $this->points ) );
index a495700..a736234 100644 (file)
@@ -3,7 +3,7 @@
  * Tests for UtfNormal::cleanUp() function.
  *
  * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index aa78394..1670823 100644 (file)
@@ -74,8 +74,6 @@ class BagOStuffTest extends MediaWikiTestCase {
                $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...
index c742444..c6ded02 100644 (file)
@@ -263,8 +263,8 @@ class NewParserTest extends MediaWikiTestCase {
                if ( !$this->db->selectField( 'image', '1', array( 'img_name' => $image->getName() ) ) ) {
                        $image->recordUpload2( '', 'Upload of some lame SVG', 'Some lame SVG', array(
                                        'size'        => 12345,
-                                       'width'       => 200,
-                                       'height'      => 200,
+                                       'width'       => 240,
+                                       'height'      => 180,
                                        'bits'        => 24,
                                        'media_type'  => MEDIATYPE_DRAWING,
                                        'mime'        => 'image/svg+xml',
@@ -337,6 +337,7 @@ class NewParserTest extends MediaWikiTestCase {
                        'wgRawHtml' => self::getOptionValue( 'wgRawHtml', $opts, false ),
                        'wgNamespacesWithSubpages' => array( NS_MAIN => isset( $opts['subpage'] ) ),
                        'wgAllowExternalImages' => self::getOptionValue( 'wgAllowExternalImages', $opts, true ),
+                       'wgThumbLimits' => array( self::getOptionValue( 'thumbsize', $opts, 180 ) ),
                        'wgMaxTocLevel' => $maxtoclevel,
                        'wgUseTeX' => isset( $opts['math'] ) || isset( $opts['texvc'] ),
                        'wgMathDirectory' => $uploadDir . '/math',
@@ -368,6 +369,9 @@ class NewParserTest extends MediaWikiTestCase {
                $settings['wgUser'] = $context->getUser();
                $settings['wgRequest'] = $context->getRequest();
 
+               // We (re)set $wgThumbLimits to a single-element array above.
+               $context->getUser()->setOption( 'thumbsize', 0 );
+
                foreach ( $settings as $var => $val ) {
                        if ( array_key_exists( $var, $GLOBALS ) ) {
                                $this->savedGlobals[$var] = $GLOBALS[$var];
@@ -445,7 +449,8 @@ class NewParserTest extends MediaWikiTestCase {
 
                // No helpful SVG file to copy, so make one ourselves
                $data = '<?xml version="1.0" encoding="utf-8"?>' .
-                       '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200"><text>Foo</text></svg>';
+                       '<svg xmlns="http://www.w3.org/2000/svg"' .
+                       ' version="1.1" width="240" height="180"/>';
 
                $backend->prepare( array( 'dir' => "$base/local-public/f/ff" ) );
                $backend->quickCreate( array(
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php
new file mode 100644 (file)
index 0000000..b25e9b0
--- /dev/null
@@ -0,0 +1,73 @@
+<?php
+
+class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
+
+       /**
+        * @covers ResourceLoaderModule::getDefinitionSummary
+        * @covers ResourceLoaderFileModule::getDefinitionSummary
+        */
+       public function testDefinitionSummary() {
+               $context = self::getResourceLoaderContext();
+
+               $baseParams = array(
+                       'scripts' => array( 'foo.js', 'bar.js' ),
+                       'dependencies' => array( 'jquery', 'mediawiki' ),
+                       'messages' => array( 'hello', 'world' ),
+               );
+
+               $module = new ResourceLoaderFileModule( $baseParams );
+
+               $jsonSummary = json_encode( $module->getDefinitionSummary( $context ) );
+
+               // Exactly the same
+               $module = new ResourceLoaderFileModule( $baseParams );
+
+               $this->assertEquals(
+                       $jsonSummary,
+                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       'Instance is insignificant'
+               );
+
+               // Re-order dependencies
+               $module = new ResourceLoaderFileModule( array(
+                       'dependencies' => array( 'mediawiki', 'jquery' ),
+               ) + $baseParams );
+
+               $this->assertEquals(
+                       $jsonSummary,
+                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       'Order of dependencies is insignificant'
+               );
+
+               // Re-order messages
+               $module = new ResourceLoaderFileModule( array(
+                       'messages' => array( 'world', 'hello' ),
+               ) + $baseParams );
+
+               $this->assertEquals(
+                       $jsonSummary,
+                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       'Order of messages is insignificant'
+               );
+
+               // Re-order scripts
+               $module = new ResourceLoaderFileModule( array(
+                       'scripts' => array( 'bar.js', 'foo.js' ),
+               ) + $baseParams );
+
+               $this->assertNotEquals(
+                       $jsonSummary,
+                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       'Order of scripts is significant'
+               );
+
+               // Subclass
+               $module = new ResourceLoaderFileModuleTestModule( $baseParams );
+
+               $this->assertNotEquals(
+                       $jsonSummary,
+                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       'Class is significant'
+               );
+       }
+}
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderStartupModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderStartupModuleTest.php
new file mode 100644 (file)
index 0000000..5b51ef8
--- /dev/null
@@ -0,0 +1,278 @@
+<?php
+
+class ResourceLoaderStartupModuleTest extends ResourceLoaderTestCase {
+
+       public static function provideGetModuleRegistrations() {
+               return array(
+                       array( array(
+                               'msg' => 'Empty registry',
+                               'modules' => array(),
+                               'out' => '
+mw.loader.addSource( {
+    "local": {
+        "loadScript": "/w/load.php",
+        "apiScript": "/w/api.php"
+    }
+} );mw.loader.register( [] );'
+                       ) ),
+                       array( array(
+                               'msg' => 'Basic registry',
+                               'modules' => array(
+                                       'test.blank' => new ResourceLoaderTestModule(),
+                               ),
+                               'out' => '
+mw.loader.addSource( {
+    "local": {
+        "loadScript": "/w/load.php",
+        "apiScript": "/w/api.php"
+    }
+} );mw.loader.register( [
+    [
+        "test.blank",
+        "1388534400"
+    ]
+] );',
+                       ) ),
+                       array( array(
+                               'msg' => 'Group signature',
+                               'modules' => array(
+                                       'test.blank' => new ResourceLoaderTestModule(),
+                                       'test.group.foo' => new ResourceLoaderTestModule( array( 'group' => 'x-foo' ) ),
+                                       'test.group.bar' => new ResourceLoaderTestModule( array( 'group' => 'x-bar' ) ),
+                               ),
+                               'out' => '
+mw.loader.addSource( {
+    "local": {
+        "loadScript": "/w/load.php",
+        "apiScript": "/w/api.php"
+    }
+} );mw.loader.register( [
+    [
+        "test.blank",
+        "1388534400"
+    ],
+    [
+        "test.group.foo",
+        "1388534400",
+        [],
+        "x-foo"
+    ],
+    [
+        "test.group.bar",
+        "1388534400",
+        [],
+        "x-bar"
+    ]
+] );'
+                       ) ),
+                       array( array(
+                               'msg' => 'Different target (non-test should not be registered)',
+                               'modules' => array(
+                                       'test.blank' => new ResourceLoaderTestModule(),
+                                       'test.target.foo' => new ResourceLoaderTestModule( array( 'targets' => array( 'x-foo' ) ) ),
+                               ),
+                               'out' => '
+mw.loader.addSource( {
+    "local": {
+        "loadScript": "/w/load.php",
+        "apiScript": "/w/api.php"
+    }
+} );mw.loader.register( [
+    [
+        "test.blank",
+        "1388534400"
+    ]
+] );'
+                       ) ),
+                       array( array(
+                               'msg' => 'Foreign source',
+                               'sources' => array(
+                                       'example' => array(
+                                               'loadScript' => 'http://example.org/w/load.php',
+                                               'apiScript' => 'http://example.org/w/api.php',
+                                       ),
+                               ),
+                               'modules' => array(
+                                       'test.blank' => new ResourceLoaderTestModule( array( 'source' => 'example' ) ),
+                               ),
+                               'out' => '
+mw.loader.addSource( {
+    "local": {
+        "loadScript": "/w/load.php",
+        "apiScript": "/w/api.php"
+    },
+    "example": {
+        "loadScript": "http://example.org/w/load.php",
+        "apiScript": "http://example.org/w/api.php"
+    }
+} );mw.loader.register( [
+    [
+        "test.blank",
+        "1388534400",
+        [],
+        null,
+        "example"
+    ]
+] );'
+                       ) ),
+                       array( array(
+                               // This may seem like an edge case, but a plain MediaWiki core install
+                               // with a few extensions installed is likely far more complex than this
+                               // even, not to mention an install like Wikipedia.
+                               // TODO: Make this even more realistic.
+                               'msg' => 'Advanced (everything combined)',
+                               'sources' => array(
+                                       'example' => array(
+                                               'loadScript' => 'http://example.org/w/load.php',
+                                               'apiScript' => 'http://example.org/w/api.php',
+                                       ),
+                               ),
+                               'modules' => array(
+                                       'test.blank' => new ResourceLoaderTestModule(),
+                                       'test.x.core' => new ResourceLoaderTestModule(),
+                                       'test.x.util' => new ResourceLoaderTestModule( array(
+                                               'dependencies' => array(
+                                                       'test.x.core',
+                                               ),
+                                       ) ),
+                                       'test.x.foo' => new ResourceLoaderTestModule( array(
+                                               'dependencies' => array(
+                                                       'test.x.core',
+                                               ),
+                                       ) ),
+                                       'test.x.bar' => new ResourceLoaderTestModule( array(
+                                               'dependencies' => array(
+                                                       'test.x.core',
+                                                       'test.x.util',
+                                               ),
+                                       ) ),
+                                       'test.x.quux' => new ResourceLoaderTestModule( array(
+                                               'dependencies' => array(
+                                                       'test.x.foo',
+                                                       'test.x.bar',
+                                                       'test.x.util',
+                                               ),
+                                       ) ),
+                                       'test.group.foo.1' => new ResourceLoaderTestModule( array(
+                                               'group' => 'x-foo',
+                                       ) ),
+                                       'test.group.foo.2' => new ResourceLoaderTestModule( array(
+                                               'group' => 'x-foo',
+                                       ) ),
+                                       'test.group.bar.1' => new ResourceLoaderTestModule( array(
+                                               'group' => 'x-bar',
+                                       ) ),
+                                       'test.group.bar.2' => new ResourceLoaderTestModule( array(
+                                               'group' => 'x-bar',
+                                               'source' => 'example',
+                                       ) ),
+                                       'test.target.foo' => new ResourceLoaderTestModule( array(
+                                               'targets' => array( 'x-foo' ),
+                                       ) ),
+                                       'test.target.bar' => new ResourceLoaderTestModule( array(
+                                               'source' => 'example',
+                                               'targets' => array( 'x-foo' ),
+                                       ) ),
+                               ),
+                               'out' => '
+mw.loader.addSource( {
+    "local": {
+        "loadScript": "/w/load.php",
+        "apiScript": "/w/api.php"
+    },
+    "example": {
+        "loadScript": "http://example.org/w/load.php",
+        "apiScript": "http://example.org/w/api.php"
+    }
+} );mw.loader.register( [
+    [
+        "test.blank",
+        "1388534400"
+    ],
+    [
+        "test.x.core",
+        "1388534400"
+    ],
+    [
+        "test.x.util",
+        "1388534400",
+        [
+            "test.x.core"
+        ]
+    ],
+    [
+        "test.x.foo",
+        "1388534400",
+        [
+            "test.x.core"
+        ]
+    ],
+    [
+        "test.x.bar",
+        "1388534400",
+        [
+            "test.x.core",
+            "test.x.util"
+        ]
+    ],
+    [
+        "test.x.quux",
+        "1388534400",
+        [
+            "test.x.foo",
+            "test.x.bar",
+            "test.x.util"
+        ]
+    ],
+    [
+        "test.group.foo.1",
+        "1388534400",
+        [],
+        "x-foo"
+    ],
+    [
+        "test.group.foo.2",
+        "1388534400",
+        [],
+        "x-foo"
+    ],
+    [
+        "test.group.bar.1",
+        "1388534400",
+        [],
+        "x-bar"
+    ],
+    [
+        "test.group.bar.2",
+        "1388534400",
+        [],
+        "x-bar",
+        "example"
+    ]
+] );'
+                       ) ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetModuleRegistrations
+        * @covers ResourceLoaderStartUpModule::getModuleRegistrations
+        */
+       public function testGetModuleRegistrations( $case ) {
+               if ( isset( $case['sources'] ) ) {
+                       $this->setMwGlobals( 'wgResourceLoaderSources', $case['sources'] );
+               }
+
+               $context = self::getResourceLoaderContext();
+               $rl = $context->getResourceLoader();
+
+               $rl->register( $case['modules'] );
+
+               $this->assertEquals(
+                       ltrim( $case['out'], "\n" ),
+                       ResourceLoaderStartUpModule::getModuleRegistrations( $context ),
+                       $case['msg']
+               );
+       }
+
+}
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
new file mode 100644 (file)
index 0000000..ab0c8d9
--- /dev/null
@@ -0,0 +1,136 @@
+<?php
+
+class ResourceLoaderTest extends ResourceLoaderTestCase {
+
+       protected static $resourceLoaderRegisterModulesHook;
+
+       protected function setUp() {
+               parent::setUp();
+
+               // $wgResourceLoaderLESSFunctions, $wgResourceLoaderLESSImportPaths; $wgResourceLoaderLESSVars;
+
+               $this->setMwGlobals( array(
+                       'wgResourceLoaderLESSFunctions' => array(
+                               'test-sum' => function ( $frame, $less ) {
+                                       $sum = 0;
+                                       foreach ( $frame[2] as $arg ) {
+                                               $sum += (int)$arg[1];
+                                       }
+                                       return $sum;
+                               },
+                       ),
+                       'wgResourceLoaderLESSImportPaths' => array(
+                               dirname( dirname( __DIR__  ) ) . '/data/less/common',
+                       ),
+                       'wgResourceLoaderLESSVars' => array(
+                               'foo'  => '2px',
+                               'Foo' => '#eeeeee',
+                               'bar' => 5,
+                       ),
+               ) );
+       }
+
+       /* Hook Methods */
+
+       /**
+        * ResourceLoaderRegisterModules hook
+        */
+       public static function resourceLoaderRegisterModules( &$resourceLoader ) {
+               self::$resourceLoaderRegisterModulesHook = true;
+
+               return true;
+       }
+
+       /* Provider Methods */
+       public static function provideValidModules() {
+               return array(
+                       array( 'TEST.validModule1', new ResourceLoaderTestModule() ),
+               );
+       }
+
+       /* Test Methods */
+
+       /**
+        * Ensures that the ResourceLoaderRegisterModules hook is called when a new ResourceLoader object is constructed
+        * @covers ResourceLoader::__construct
+        */
+       public function testCreatingNewResourceLoaderCallsRegistrationHook() {
+               self::$resourceLoaderRegisterModulesHook = false;
+               $resourceLoader = new ResourceLoader();
+               $this->assertTrue( self::$resourceLoaderRegisterModulesHook );
+
+               return $resourceLoader;
+       }
+
+       /**
+        * @dataProvider provideValidModules
+        * @depends testCreatingNewResourceLoaderCallsRegistrationHook
+        * @covers ResourceLoader::register
+        * @covers ResourceLoader::getModule
+        */
+       public function testRegisteredValidModulesAreAccessible(
+               $name, ResourceLoaderModule $module, ResourceLoader $resourceLoader
+       ) {
+               $resourceLoader->register( $name, $module );
+               $this->assertEquals( $module, $resourceLoader->getModule( $name ) );
+       }
+
+       /**
+        * @covers ResourceLoaderFileModule::compileLessFile
+        */
+       public function testLessFileCompilation() {
+               $context = self::getResourceLoaderContext();
+               $basePath = __DIR__ . '/../../data/less/module';
+               $module = new ResourceLoaderFileModule( array(
+                       'localBasePath' => $basePath,
+                       'styles' => array( 'styles.less' ),
+               ) );
+               $styles = $module->getStyles( $context );
+               $this->assertStringEqualsFile( $basePath . '/styles.css', $styles['all'] );
+       }
+
+       /**
+        * @dataProvider providePackedModules
+        * @covers ResourceLoader::makePackedModulesString
+        */
+       public function testMakePackedModulesString( $desc, $modules, $packed ) {
+               $this->assertEquals( $packed, ResourceLoader::makePackedModulesString( $modules ), $desc );
+       }
+
+       /**
+        * @dataProvider providePackedModules
+        * @covers ResourceLoaderContext::expandModuleNames
+        */
+       public function testexpandModuleNames( $desc, $modules, $packed ) {
+               $this->assertEquals( $modules, ResourceLoaderContext::expandModuleNames( $packed ), $desc );
+       }
+
+       public static function providePackedModules() {
+               return array(
+                       array(
+                               'Example from makePackedModulesString doc comment',
+                               array( 'foo.bar', 'foo.baz', 'bar.baz', 'bar.quux' ),
+                               'foo.bar,baz|bar.baz,quux',
+                       ),
+                       array(
+                               'Example from expandModuleNames doc comment',
+                               array( 'jquery.foo', 'jquery.bar', 'jquery.ui.baz', 'jquery.ui.quux' ),
+                               'jquery.foo,bar|jquery.ui.baz,quux',
+                       ),
+                       array(
+                               'Regression fixed in r88706 with dotless names',
+                               array( 'foo', 'bar', 'baz' ),
+                               'foo,bar,baz',
+                       ),
+                       array(
+                               'Prefixless modules after a prefixed module',
+                               array( 'single.module', 'foobar', 'foobaz' ),
+                               'single.module|foobar,foobaz',
+                       ),
+               );
+       }
+}
+
+/* Hooks */
+global $wgHooks;
+$wgHooks['ResourceLoaderRegisterModules'][] = 'ResourceLoaderTest::resourceLoaderRegisterModules';
index b913af8..c627537 100644 (file)
@@ -26,7 +26,7 @@ class SearchUpdateTest extends MediaWikiTestCase {
                $this->setMwGlobals( 'wgSearchType', 'MockSearch' );
        }
 
-       function updateText( $text ) {
+       public function updateText( $text ) {
                return trim( SearchUpdate::updateText( $text ) );
        }
 
@@ -67,6 +67,7 @@ EOT
 
        /**
         * @covers SearchUpdate::updateText
+        * @todo give this test a real name explaining what is being tested here
         */
        public function testBug32712() {
                $text = "text „http://example.com“ text";
index 8af2fc1..61d0ace 100644 (file)
@@ -80,16 +80,14 @@ class SiteListTest extends MediaWikiTestCase {
         * @covers SiteList::getSite
         */
        public function testGetSiteByGlobalId( SiteList $sites ) {
-               if ( $sites->isEmpty() ) {
-                       $this->assertTrue( true );
-               } else {
-                       /**
-                        * @var Site $site
-                        */
-                       foreach ( $sites as $site ) {
-                               $this->assertEquals( $site, $sites->getSite( $site->getGlobalId() ) );
-                       }
+               /**
+                * @var Site $site
+                */
+               foreach ( $sites as $site ) {
+                       $this->assertEquals( $site, $sites->getSite( $site->getGlobalId() ) );
                }
+
+               $this->assertTrue( true );
        }
 
        /**
@@ -110,6 +108,25 @@ class SiteListTest extends MediaWikiTestCase {
                $this->assertTrue( true );
        }
 
+       /**
+        * @dataProvider siteListProvider
+        * @param SiteList $sites
+        * @covers SiteList::getSiteByNavigationId
+        */
+       public function testGetSiteByNavigationId( $sites ) {
+               /**
+                * @var Site $site
+                */
+               foreach ( $sites as $site ) {
+                       $ids = $site->getNavigationIds();
+                       foreach ( $ids as $navId ) {
+                               $this->assertEquals( $site, $sites->getSiteByNavigationId( $navId ) );
+                       }
+               }
+
+               $this->assertTrue( true );
+       }
+
        /**
         * @dataProvider siteListProvider
         * @param SiteList $sites
@@ -147,6 +164,25 @@ class SiteListTest extends MediaWikiTestCase {
                $this->assertFalse( $sites->hasInternalId( -1 ) );
        }
 
+       /**
+        * @dataProvider siteListProvider
+        * @param SiteList $sites
+        * @covers SiteList::hasNavigationId
+        */
+       public function testHasNavigationId( $sites ) {
+               /**
+                * @var Site $site
+                */
+               foreach ( $sites as $site ) {
+                       $ids = $site->getNavigationIds();
+                       foreach ( $ids as $navId ) {
+                               $this->assertTrue( $sites->hasNavigationId( $navId ) );
+                       }
+               }
+
+               $this->assertFalse( $sites->hasNavigationId( 'non-existing-navigation-id' ) );
+       }
+
        /**
         * @dataProvider siteListProvider
         * @param SiteList $sites
@@ -192,6 +228,13 @@ class SiteListTest extends MediaWikiTestCase {
                 */
                foreach ( $list as $site ) {
                        $this->assertTrue( $copy->hasInternalId( $site->getInternalId() ) );
+
+                       foreach( $site->getNavigationIds() as $navId ) {
+                               $this->assertTrue(
+                                       $copy->hasNavigationId( $navId ),
+                                       'unserialized data expects nav id ' . $navId . ' for site ' . $site->getGlobalId()
+                               );
+                       }
                }
        }
 }
index ba845eb..39462b4 100644 (file)
@@ -8,13 +8,6 @@
  * @group Database
  */
 
-if ( !defined( 'MEDIAWIKI' ) ) {
-       die( 1 );
-}
-
-global $IP;
-require_once "$IP/includes/QueryPage.php"; // Needed to populate $wgQueryPages
-
 /**
  * @covers QueryPage<extended>
  */
@@ -41,8 +34,7 @@ class QueryAllSpecialPagesTest extends MediaWikiTestCase {
        function __construct() {
                parent::__construct();
 
-               global $wgQueryPages;
-               foreach ( $wgQueryPages as $page ) {
+               foreach ( QueryPage::getPages() as $page ) {
                        $class = $page[0];
                        if ( !in_array( $class, $this->manualTest ) ) {
                                $this->queryPages[$class] = new $class;
index 8a92daf..ea2d28c 100644 (file)
@@ -17,6 +17,7 @@ class SpecialPreferencesTest extends MediaWikiTestCase {
         * is not throwing a fatal error.
         *
         * Test specifications by Alexandre "ialex" Emsenhuber.
+        * @todo give this test a real name explaining what is being tested here
         */
        public function testBug41337() {
 
@@ -41,13 +42,6 @@ class SpecialPreferencesTest extends MediaWikiTestCase {
                        )
                        ) );
 
-               # Validate the mock (FIXME should probably be removed)
-               $this->assertFalse( $user->isAnon() );
-               $this->assertEquals( array(),
-                       $user->getEffectiveGroups() );
-               $this->assertEquals( 'superlongnickname',
-                       $user->getOption( 'nickname' ) );
-
                # Forge a request to call the special page
                $context = new RequestContext();
                $context->setRequest( new FauxRequest() );
index 397c100..879d821 100644 (file)
@@ -224,9 +224,6 @@ class UploadFromUrlTest extends ApiTestCase {
 
                $this->deleteFile( 'UploadFromUrlTest.png' );
 
-               $talkRev = Revision::newFromTitle( $talk );
-               $talkSize = $talkRev->getSize();
-
                $exception = false;
                try {
                        $this->doApiRequest( array(
@@ -249,6 +246,9 @@ class UploadFromUrlTest extends ApiTestCase {
                return;
                /*
                // Broken until using leavemessage with ignorewarnings is supported
+               $talkRev = Revision::newFromTitle( $talk );
+               $talkSize = $talkRev->getSize();
+
                $job->run();
 
                $this->assertFalse( wfLocalFile( 'UploadFromUrlTest.png' )->exists() );
index 1c89377..da72a9d 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @group Database
  *
@@ -10,6 +11,11 @@ class UploadStashTest extends MediaWikiTestCase {
         */
        public static $users;
 
+       /**
+        * @var string
+        */
+       private $bug29408File;
+
        protected function setUp() {
                parent::setUp();
 
@@ -45,6 +51,9 @@ class UploadStashTest extends MediaWikiTestCase {
                parent::tearDown();
        }
 
+       /**
+        * @todo give this test a real name explaining what is being tested here
+        */
        public function testBug29408() {
                $this->setMwGlobals( 'wgUser', self::$users['uploader']->user );
 
@@ -59,20 +68,40 @@ class UploadStashTest extends MediaWikiTestCase {
                $stash->removeFile( $file->getFileKey() );
        }
 
-       public function testValidRequest() {
-               $request = new FauxRequest( array( 'wpFileKey' => 'foo' ) );
-               $this->assertFalse( UploadFromStash::isValidRequest( $request ), 'Check failure on bad wpFileKey' );
-
-               $request = new FauxRequest( array( 'wpSessionKey' => 'foo' ) );
-               $this->assertFalse( UploadFromStash::isValidRequest( $request ), 'Check failure on bad wpSessionKey' );
-
-               $request = new FauxRequest( array( 'wpFileKey' => 'testkey-test.test' ) );
-               $this->assertTrue( UploadFromStash::isValidRequest( $request ), 'Check good wpFileKey' );
+       public function provideInvalidRequests() {
+               return array(
+                       'Check failure on bad wpFileKey' =>
+                               array( new FauxRequest( array( 'wpFileKey' => 'foo' ) ) ),
+                       'Check failure on bad wpSessionKey' =>
+                               array( new FauxRequest( array( 'wpSessionKey' => 'foo' ) ) ),
+               );
+       }
 
-               $request = new FauxRequest( array( 'wpFileKey' => 'testkey-test.test' ) );
-               $this->assertTrue( UploadFromStash::isValidRequest( $request ), 'Check good wpSessionKey' );
+       /**
+        * @dataProvider provideInvalidRequests
+        */
+       public function testValidRequestWithInvalidRequests( $request ) {
+               $this->assertFalse( UploadFromStash::isValidRequest( $request ) );
+       }
 
-               $request = new FauxRequest( array( 'wpFileKey' => 'testkey-test.test', 'wpSessionKey' => 'foo' ) );
-               $this->assertTrue( UploadFromStash::isValidRequest( $request ), 'Check key precedence' );
+       public function provideValidRequests() {
+               return array(
+                       'Check good wpFileKey' =>
+                               array( new FauxRequest( array( 'wpFileKey' => 'testkey-test.test' ) ) ),
+                       'Check good wpSessionKey' =>
+                               array( new FauxRequest( array( 'wpFileKey' => 'testkey-test.test' ) ) ),
+                       'Check key precedence' =>
+                               array( new FauxRequest( array(
+                                       'wpFileKey' => 'testkey-test.test',
+                                       'wpSessionKey' => 'foo'
+                               ) ) ),
+               );
        }
+       /**
+        * @dataProvider provideValidRequests
+        */
+       public function testValidRequestWithValidRequests( $request ) {
+               $this->assertTrue( UploadFromStash::isValidRequest( $request ) );
+       }
+
 }
index 1a1bbaf..1eab5a3 100644 (file)
@@ -21,9 +21,6 @@ class UIDGeneratorTest extends MediaWikiTestCase {
                }
 
                $lastId = array_shift( $ids );
-               if ( $hostbits ) {
-                       $lastHost = substr( wfBaseConvert( $lastId, 10, 2, $bits ), -$hostbits );
-               }
 
                $this->assertArrayEquals( array_unique( $ids ), $ids, "All generated IDs are unique." );
 
index e958fde..8f8a8b5 100644 (file)
@@ -658,7 +658,7 @@ class LanguageTest extends LanguageClassesTestCase {
                                '2009-W53-4',
                                'leap week'
                        ),
-                       // What follows is mostly copied from http://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time
+                       // What follows is mostly copied from https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time
                        array(
                                'Y',
                                '20120102090705',
diff --git a/tests/phpunit/languages/SpecialPageAliasTest.php b/tests/phpunit/languages/SpecialPageAliasTest.php
new file mode 100644 (file)
index 0000000..8865f68
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Verifies that special page aliases are valid, with no slashes.
+ *
+ * @group Language
+ * @group SpecialPageAliases
+ * @group SystemTest
+ * @group medium
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class SpecialPageAliasTest extends MediaWikiTestCase {
+
+       /**
+        * @dataProvider validSpecialPageAliasesProvider
+        */
+       public function testValidSpecialPageAliases( $code, $specialPageAliases ) {
+               foreach( $specialPageAliases as $specialPage => $aliases ) {
+                       foreach( $aliases as $alias ) {
+                               $msg = "$specialPage alias '$alias' in $code is valid with no slashes";
+                               $this->assertRegExp( '/^[^\/]*$/', $msg );
+                       }
+               }
+       }
+
+       public function validSpecialPageAliasesProvider() {
+               $codes = array_keys( Language::fetchLanguageNames( 'mwfile' ) );
+
+               $data = array();
+
+               foreach( $codes as $code ) {
+                       $specialPageAliases = $this->getSpecialPageAliases( $code );
+
+                       if ( $specialPageAliases !== array() ) {
+                               $data[] = array( $code, $specialPageAliases );
+                       }
+               }
+
+               return $data;
+       }
+
+       /**
+        * @param string $code
+        *
+        * @return array
+        */
+       protected function getSpecialPageAliases( $code ) {
+               $file = Language::getMessagesFileName( $code );
+
+               if ( is_readable( $file ) ) {
+                       include $file;
+
+                       if ( isset( $specialPageAliases ) && $specialPageAliases !== null ) {
+                               return $specialPageAliases;
+                       }
+               }
+
+               return array();
+       }
+
+}
index 039cabb..1aa2b4d 100755 (executable)
@@ -6,8 +6,6 @@
  * @file
  */
 
-/* Configuration */
-
 // Set a flag which can be used to detect when other scripts have been entered through this entry point or not
 define( 'MW_PHPUNIT_TEST', true );
 
@@ -16,7 +14,7 @@ require_once dirname( dirname( __DIR__ ) ) . "/maintenance/Maintenance.php";
 
 class PHPUnitMaintClass extends Maintenance {
 
-       function __construct() {
+       public function __construct() {
                parent::__construct();
                $this->addOption( 'with-phpunitdir',
                        'Directory to include PHPUnit from, for example when using a git fetchout from upstream. Path will be prepended to PHP `include_path`.',
@@ -72,7 +70,8 @@ class PHPUnitMaintClass extends Maintenance {
                }
 
                # --with-phpunitdir let us override the default PHPUnit version
-               if ( $phpunitDir = $this->getOption( 'with-phpunitdir' ) ) {
+               if ( $this->hasOption( 'with-phpunitdir' ) ) {
+                       $phpunitDir = $this->getOption( 'with-phpunitdir' );
                        # Sanity checks
                        if ( !is_dir( $phpunitDir ) ) {
                                $this->error( "--with-phpunitdir should be set to an existing directory", 1 );
@@ -83,8 +82,7 @@ class PHPUnitMaintClass extends Maintenance {
 
                        # Now prepends provided PHPUnit directory
                        $this->output( "Will attempt loading PHPUnit from `$phpunitDir`\n" );
-                       set_include_path( $phpunitDir
-                               . PATH_SEPARATOR . get_include_path() );
+                       set_include_path( $phpunitDir . PATH_SEPARATOR . get_include_path() );
 
                        # Cleanup $args array so the option and its value do not
                        # pollute PHPUnit
index df00d4d..2393299 100644 (file)
@@ -22,6 +22,7 @@ class StructureTest extends MediaWikiTestCase {
                        'ApiQueryContinueTestBase',
                        'MediaWikiLangTestCase',
                        'MediaWikiTestCase',
+                       'ResourceLoaderTestCase',
                        'PHPUnit_Framework_TestCase',
                        'DumpTestCase',
                ) );
index eec773d..7f41e52 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * This test suite runs unit tests registered by extensions.
- * See http://www.mediawiki.org/wiki/Manual:Hooks/UnitTestsList for details of how to register your tests.
+ * See https://www.mediawiki.org/wiki/Manual:Hooks/UnitTestsList for details of how to register your tests.
  */
 
 class ExtensionsTestSuite extends PHPUnit_Framework_TestSuite {
diff --git a/tests/phpunit/tests/MediaWikiTestCaseTest.php b/tests/phpunit/tests/MediaWikiTestCaseTest.php
new file mode 100644 (file)
index 0000000..2846fde
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * @covers MediaWikiTestCase
+ * @author Adam Shorland
+ */
+class MediaWikiTestCaseTest extends MediaWikiTestCase {
+
+       const GLOBAL_KEY_EXISTING = 'MediaWikiTestCaseTestGLOBAL-Existing';
+       const GLOBAL_KEY_NONEXISTING = 'MediaWikiTestCaseTestGLOBAL-NONExisting';
+
+       public static function setUpBeforeClass() {
+               parent::setUpBeforeClass();
+               $GLOBALS[self::GLOBAL_KEY_EXISTING] = 'foo';
+       }
+
+       public static function tearDownAfterClass() {
+               parent::tearDownAfterClass();
+               unset( $GLOBALS[self::GLOBAL_KEY_EXISTING] );
+       }
+
+       /**
+        * @covers MediaWikiTestCase::setMwGlobals
+        * @covers MediaWikiTestCase::tearDown
+        */
+       public function testSetGlobalsAreRestoredOnTearDown() {
+               $this->setMwGlobals( self::GLOBAL_KEY_EXISTING, 'bar' );
+               $this->assertEquals(
+                       'bar',
+                       $GLOBALS[self::GLOBAL_KEY_EXISTING],
+                       'Global failed to correctly set'
+               );
+
+               $this->tearDown();
+
+               $this->assertEquals(
+                       'foo',
+                       $GLOBALS[self::GLOBAL_KEY_EXISTING],
+                       'Global failed to be restored on tearDown'
+               );
+       }
+
+       /**
+        * @covers MediaWikiTestCase::stashMwGlobals
+        * @covers MediaWikiTestCase::tearDown
+        */
+       public function testStashedGlobalsAreRestoredOnTearDown() {
+               $this->stashMwGlobals( self::GLOBAL_KEY_EXISTING );
+               $GLOBALS[self::GLOBAL_KEY_EXISTING] = 'bar';
+               $this->assertEquals(
+                       'bar',
+                       $GLOBALS[self::GLOBAL_KEY_EXISTING],
+                       'Global failed to correctly set'
+               );
+
+               $this->tearDown();
+
+               $this->assertEquals(
+                       'foo',
+                       $GLOBALS[self::GLOBAL_KEY_EXISTING],
+                       'Global failed to be restored on tearDown'
+               );
+       }
+
+       /**
+        * @covers MediaWikiTestCase::stashMwGlobals
+        */
+       public function testExceptionThrownWhenStashingNonExistentGlobals() {
+               $this->setExpectedException(
+                       'Exception',
+                       'Global with key ' . self::GLOBAL_KEY_NONEXISTING . ' doesn\'t exist and cant be stashed'
+               );
+
+               $this->stashMwGlobals( self::GLOBAL_KEY_NONEXISTING );
+       }
+
+}
index bd240eb..31470e8 100644 (file)
@@ -6,6 +6,20 @@ return array(
 
        /* Utilities */
 
+       'test.sinonjs' => array(
+               'scripts' => array(
+                       'resources/sinonjs/sinon-1.9.0.js',
+                       // We want tests to work in IE, but can't include this as it
+                       // will break the placeholders in Sinon because the hack it uses
+                       // to hijack IE globals relies on running in the global scope
+                       // and in ResourceLoader this won't be running in the global scope.
+                       // Including it results (among other things) in sandboxed timers
+                       // being broken due to Date inheritance being undefined.
+                       // 'resources/sinonjs/sinon-ie-1.9.0.js',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+
        'test.mediawiki.qunit.testrunner' => array(
                'scripts' => array(
                        'tests/qunit/data/testrunner.js',
@@ -16,6 +30,7 @@ return array(
                        'jquery.qunit.completenessTest',
                        'mediawiki.page.ready',
                        'mediawiki.page.startup',
+                       'test.sinonjs',
                ),
                'position' => 'top',
                'targets' => array( 'desktop', 'mobile' ),
@@ -33,8 +48,8 @@ return array(
                        'tests/qunit/suites/resources/jquery/jquery.byteLength.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.client.test.js',
+                       'tests/qunit/suites/resources/jquery/jquery.color.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.colorUtil.test.js',
-                       'tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.hidpi.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.highlightText.test.js',
@@ -56,6 +71,7 @@ return array(
                        'tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js',
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js',
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js',
+                       'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.watch.test.js',
                        'tests/qunit/suites/resources/mediawiki.special/mediawiki.special.recentchanges.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js',
@@ -65,6 +81,7 @@ return array(
                        'jquery.byteLength',
                        'jquery.byteLimit',
                        'jquery.client',
+                       'jquery.color',
                        'jquery.colorUtil',
                        'jquery.delayedBind',
                        'jquery.getAttrs',
@@ -80,6 +97,7 @@ return array(
                        'mediawiki',
                        'mediawiki.api',
                        'mediawiki.api.parse',
+                       'mediawiki.api.watch',
                        'mediawiki.jqueryMsg',
                        'mediawiki.Title',
                        'mediawiki.Uri',
index 50e6014..73ae0e6 100644 (file)
@@ -1,6 +1,6 @@
-/*global CompletenessTest */
+/*global CompletenessTest, sinon */
 /*jshint evil: true */
-( function ( $, mw, QUnit, undefined ) {
+( function ( $, mw, QUnit ) {
        'use strict';
 
        var mwTestIgnore, mwTester,
                tooltip: 'Run the completeness test'
        } );
 
+       /**
+        * SinonJS
+        *
+        * Glue code for nicer integration with QUnit setup/teardown
+        * Inspired by http://sinonjs.org/releases/sinon-qunit-1.0.0.js
+        * Fixes:
+        * - Work properly with asynchronous QUnit by using module setup/teardown
+        *   instead of synchronously wrapping QUnit.test.
+        */
+       sinon.assert.fail = function ( msg ) {
+               QUnit.assert.ok( false, msg );
+       };
+       sinon.assert.pass = function ( msg ) {
+               QUnit.assert.ok( true, msg );
+       };
+       sinon.config = {
+               injectIntoThis: true,
+               injectInto: null,
+               properties: ['spy', 'stub', 'mock', 'sandbox'],
+               // Don't fake timers by default
+               useFakeTimers: false,
+               useFakeServer: false
+       };
+       ( function () {
+               var orgModule = QUnit.module;
+
+               QUnit.module = function ( name, localEnv ) {
+                       localEnv = localEnv || {};
+                       orgModule( name, {
+                               setup: function () {
+                                       var config = sinon.getConfig( sinon.config );
+                                       config.injectInto = this;
+                                       sinon.sandbox.create( config );
+
+                                       if ( localEnv.setup ) {
+                                               localEnv.setup.call( this );
+                                       }
+                               },
+                               teardown: function () {
+                                       this.sandbox.verifyAndRestore();
+
+                                       if ( localEnv.teardown ) {
+                                               localEnv.teardown.call( this );
+                                       }
+                               }
+                       } );
+               };
+       }() );
+
        // Initiate when enabled
        if ( QUnit.urlParams.completenesstest ) {
 
                liveMessages = mw.messages.values;
 
                function freshConfigCopy( custom ) {
+                       var copy, warn;
                        // Tests should mock all factors that directly influence the tested code.
-                       // For backwards compatibility though we set mw.config to a copy of the live config
-                       // and extend it with the (optionally) given custom settings for this test
-                       // (instead of starting blank with only the given custmo settings).
-                       // This is a shallow copy, so we don't end up with settings taking an array value
-                       // extended with the custom settings - setting a config property means you override it,
-                       // not extend it.
-                       return $.extend( {}, liveConfig, custom );
+                       // For backwards compatibility though we set mw.config to a fresh copy of the live
+                       // config. This way any modifications made to mw.config during the test will not
+                       // affect other tests, nor the global scope outside the test runner.
+                       // This is a shallow copy, since overriding an array or object value via "custom"
+                       // should replace it. Setting a config property means you override it, not extend it.
+                       // NOTE: It is important that we temporarily disable mw.log#warn as extend() will
+                       // trigger MWDeprecationWarning for each of the deprecated properties.
+                       warn = mw.log.warn;
+                       mw.log.warn = $.noop;
+
+                       copy = $.extend( {}, liveConfig, custom );
+
+                       mw.log.warn = warn;
+
+                       return copy;
                }
 
                function freshMessagesCopy( custom ) {
index 6030206..df800bc 100644 (file)
                                        ltr: true,
                                        rtl: true
                                }
+                       },
+                       // Amazon Silk
+                       'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.0.13.81_10003810) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true': {
+                               title: 'Silk',
+                               platform: 'Desktop',
+                               profile: {
+                                       name: 'silk',
+                                       layout: 'webkit',
+                                       layoutVersion: 533,
+                                       platform: 'unknown',
+                                       version: '1.0.13.81_10003810',
+                                       versionBase: '1',
+                                       versionNumber: 1
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
+                       },
+                       'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/2.1 Mobile Safari/535.19 Silk-Accelerated=true': {
+                               title: 'Silk',
+                               platform: 'Mobile',
+                               profile: {
+                                       name: 'silk',
+                                       layout: 'webkit',
+                                       layoutVersion: 535,
+                                       platform: 'unknown',
+                                       version: '2.1',
+                                       versionBase: '2',
+                                       versionNumber: 2.1
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
                        }
                },
                testMap = {
diff --git a/tests/qunit/suites/resources/jquery/jquery.color.test.js b/tests/qunit/suites/resources/jquery/jquery.color.test.js
new file mode 100644 (file)
index 0000000..b644a3c
--- /dev/null
@@ -0,0 +1,15 @@
+( function ( $ ) {
+       QUnit.module( 'jquery.color', QUnit.newMwEnvironment() );
+
+       QUnit.asyncTest( 'animate', 3, function ( assert ) {
+               var $canvas = $( '<div>' ).css( 'background-color', '#fff' );
+
+               $canvas.animate( { backgroundColor: '#000' }, 4 ).promise().then( function() {
+                       var endColors = $.colorUtil.getRGB( $canvas.css( 'background-color' ) );
+                       assert.strictEqual( endColors[0], 0 );
+                       assert.strictEqual( endColors[1], 0 );
+                       assert.strictEqual( endColors[2], 0 );
+                       QUnit.start();
+               } );
+       } );
+}( jQuery ) );
diff --git a/tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js b/tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js
deleted file mode 100644 (file)
index 234b19c..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-( function ( $ ) {
-       QUnit.asyncTest( 'jquery.delayedBind with data option', 2, function ( assert ) {
-               var $fixture = $( '<div>' ).appendTo( '#qunit-fixture' ),
-                       data = {
-                               magic: 'beeswax'
-                       },
-                       delay = 50;
-
-               $fixture.delayedBind( delay, 'testevent', data, function ( e ) {
-                       assert.ok( true, 'testevent fired' );
-                       assert.ok( e.data === data, 'data is passed through delayedBind' );
-                       QUnit.start();
-               } );
-
-               // We'll trigger it thrice, but it should only happen once.
-               $fixture.trigger( 'testevent', {} );
-               $fixture.trigger( 'testevent', {} );
-               $fixture.trigger( 'testevent', {} );
-               $fixture.trigger( 'testevent', {} );
-       } );
-
-       QUnit.asyncTest( 'jquery.delayedBind without data option', 1, function ( assert ) {
-               var $fixture = $( '<div>' ).appendTo( '#qunit-fixture' ),
-                       delay = 50;
-
-               $fixture.delayedBind( delay, 'testevent', function () {
-                       assert.ok( true, 'testevent fired' );
-                       QUnit.start();
-               } );
-
-               // We'll trigger it thrice, but it should only happen once.
-               $fixture.trigger( 'testevent', {} );
-               $fixture.trigger( 'testevent', {} );
-               $fixture.trigger( 'testevent', {} );
-               $fixture.trigger( 'testevent', {} );
-       } );
-}( jQuery ) );
index 3c508d4..bfb857d 100644 (file)
 
        // This test is first because if it fails, then almost all of the latter tests are meaningless.
        QUnit.asyncTest( 'testing hooks/triggers', 4, function ( assert ) {
-               var $collapsible, $content, $toggle;
-               $collapsible = prepareCollapsible(
-                       '<div class="mw-collapsible">' + loremIpsum + '</div>'
-               );
-               $content = $collapsible.find( '.mw-collapsible-content' );
-               $toggle = $collapsible.find( '.mw-collapsible-toggle' );
+               var $collapsible = prepareCollapsible(
+                               '<div class="mw-collapsible">' + loremIpsum + '</div>'
+                       ),
+                       $content = $collapsible.find( '.mw-collapsible-content' ),
+                       $toggle = $collapsible.find( '.mw-collapsible-toggle' );
 
                // In one full collapse-expand cycle, each event will be fired once
 
@@ -34,7 +33,6 @@
                        } );
                        $collapsible.on( 'afterExpand.mw-collapsible', function () {
                                assert.assertTrue( $content.is( ':visible' ), 'second afterCollapseExpand: content is visible' );
-
                                QUnit.start();
                        } );
 
        } );
 
        QUnit.asyncTest( 'basic operation (<div>)', 5, function ( assert ) {
-               var $collapsible, $content, $toggle;
-               $collapsible = prepareCollapsible(
-                       '<div class="mw-collapsible">' + loremIpsum + '</div>'
-               );
-               $content = $collapsible.find( '.mw-collapsible-content' );
-               $toggle = $collapsible.find( '.mw-collapsible-toggle' );
+               var $collapsible = prepareCollapsible(
+                               '<div class="mw-collapsible">' + loremIpsum + '</div>'
+                       ),
+                       $content = $collapsible.find( '.mw-collapsible-content' ),
+                       $toggle = $collapsible.find( '.mw-collapsible-toggle' );
 
                assert.equal( $content.length, 1, 'content is present' );
                assert.equal( $content.find( $toggle ).length, 0, 'toggle is not a descendant of content' );
        } );
 
        QUnit.asyncTest( 'basic operation (<table>)', 7, function ( assert ) {
-               var $collapsible, $headerRow, $contentRow, $toggle;
-               $collapsible = prepareCollapsible(
-                       '<table class="mw-collapsible">' +
-                               '<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
-                               '<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
-                               '<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
-                       '</table>'
-               );
-               $headerRow = $collapsible.find( 'tr:first' );
-               $contentRow = $collapsible.find( 'tr:last' );
+               var $collapsible = prepareCollapsible(
+                               '<table class="mw-collapsible">' +
+                                       '<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
+                                       '<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
+                                       '<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
+                               '</table>'
+                       ),
+                       $headerRow = $collapsible.find( 'tr:first' ),
+                       $contentRow = $collapsible.find( 'tr:last' ),
+                       $toggle = $headerRow.find( 'td:last .mw-collapsible-toggle' );
 
-               $toggle = $headerRow.find( 'td:last .mw-collapsible-toggle' );
                assert.equal( $toggle.length, 1, 'toggle is added to last cell of first row' );
 
                assert.assertTrue( $headerRow.is( ':visible' ), 'headerRow is visible' );
        } );
 
        function tableWithCaptionTest( $collapsible, assert ) {
-               var $caption, $headerRow, $contentRow, $toggle;
+               var $caption = $collapsible.find( 'caption' ),
+                       $headerRow = $collapsible.find( 'tr:first' ),
+                       $contentRow = $collapsible.find( 'tr:last' ),
+                       $toggle = $caption.find( '.mw-collapsible-toggle' );
 
-               $caption = $collapsible.find( 'caption' );
-               $headerRow = $collapsible.find( 'tr:first' );
-               $contentRow = $collapsible.find( 'tr:last' );
-
-               $toggle = $caption.find( '.mw-collapsible-toggle' );
                assert.equal( $toggle.length, 1, 'toggle is added to the end of the caption' );
 
                assert.assertTrue( $caption.is( ':visible' ), 'caption is visible' );
        } );
 
        function listTest( listType, assert ) {
-               var $collapsible, $toggleItem, $contentItem, $toggle;
-               $collapsible = prepareCollapsible(
-                       '<' + listType + ' class="mw-collapsible">' +
-                               '<li>' + loremIpsum + '</li>' +
-                               '<li>' + loremIpsum + '</li>' +
-                       '</' + listType + '>'
-               );
-               $toggleItem = $collapsible.find( 'li.mw-collapsible-toggle-li:first-child' );
-               $contentItem = $collapsible.find( 'li:last' );
-
-               $toggle = $toggleItem.find( '.mw-collapsible-toggle' );
+               var $collapsible = prepareCollapsible(
+                               '<' + listType + ' class="mw-collapsible">' +
+                                       '<li>' + loremIpsum + '</li>' +
+                                       '<li>' + loremIpsum + '</li>' +
+                               '</' + listType + '>'
+                       ),
+                       $toggleItem = $collapsible.find( 'li.mw-collapsible-toggle-li:first-child' ),
+                       $contentItem = $collapsible.find( 'li:last' ),
+                       $toggle = $toggleItem.find( '.mw-collapsible-toggle' );
+
                assert.equal( $toggle.length, 1, 'toggle is present, added inside new zeroth list item' );
 
                assert.assertTrue( $toggleItem.is( ':visible' ), 'toggleItem is visible' );
        } );
 
        QUnit.test( 'basic operation when synchronous (options.instantHide)', 2, function ( assert ) {
-               var $collapsible, $content;
-               $collapsible = prepareCollapsible(
-                       '<div class="mw-collapsible">' + loremIpsum + '</div>',
-                       { instantHide: true }
-               );
-               $content = $collapsible.find( '.mw-collapsible-content' );
+               var $collapsible = prepareCollapsible(
+                               '<div class="mw-collapsible">' + loremIpsum + '</div>',
+                               { instantHide: true }
+                       ),
+                       $content = $collapsible.find( '.mw-collapsible-content' );
 
                assert.assertTrue( $content.is( ':visible' ), 'content is visible' );
 
        } );
 
        QUnit.test( 'mw-made-collapsible data added', 1, function ( assert ) {
-               var $collapsible;
-               $collapsible = prepareCollapsible(
-                       '<div>' + loremIpsum + '</div>'
-               );
+               var $collapsible = prepareCollapsible(
+                               '<div>' + loremIpsum + '</div>'
+                       );
+
                assert.equal( $collapsible.data( 'mw-made-collapsible' ), true, 'mw-made-collapsible data present' );
        } );
 
        QUnit.test( 'mw-collapsible added when missing', 1, function ( assert ) {
-               var $collapsible;
-               $collapsible = prepareCollapsible(
-                       '<div>' + loremIpsum + '</div>'
-               );
+               var $collapsible = prepareCollapsible(
+                               '<div>' + loremIpsum + '</div>'
+                       );
+
                assert.assertTrue( $collapsible.hasClass( 'mw-collapsible' ), 'mw-collapsible class present' );
        } );
 
        QUnit.test( 'mw-collapsed added when missing', 1, function ( assert ) {
-               var $collapsible;
-               $collapsible = prepareCollapsible(
+               var $collapsible = prepareCollapsible(
                        '<div>' + loremIpsum + '</div>',
-                       { collapsed: true }
-               );
+                               { collapsed: true }
+                       );
+
                assert.assertTrue( $collapsible.hasClass( 'mw-collapsed' ), 'mw-collapsed class present' );
        } );
 
        QUnit.asyncTest( 'initial collapse (mw-collapsed class)', 2, function ( assert ) {
-               var $collapsible, $content;
-               $collapsible = prepareCollapsible(
-                       '<div class="mw-collapsible mw-collapsed">' + loremIpsum + '</div>'
-               );
-               $content = $collapsible.find( '.mw-collapsible-content' );
+               var $collapsible = prepareCollapsible(
+                               '<div class="mw-collapsible mw-collapsed">' + loremIpsum + '</div>'
+                       ),
+                       $content = $collapsible.find( '.mw-collapsible-content' );
 
                // Synchronous - mw-collapsed should cause instantHide: true to be used on initial collapsing
                assert.assertTrue( $content.is( ':hidden' ), 'content is hidden' );
        } );
 
        QUnit.asyncTest( 'initial collapse (options.collapsed)', 2, function ( assert ) {
-               var $collapsible, $content;
-               $collapsible = prepareCollapsible(
-                       '<div class="mw-collapsible">' + loremIpsum + '</div>',
-                       { collapsed: true }
-               );
-               $content = $collapsible.find( '.mw-collapsible-content' );
+               var $collapsible = prepareCollapsible(
+                               '<div class="mw-collapsible">' + loremIpsum + '</div>',
+                               { collapsed: true }
+                       ),
+                       $content = $collapsible.find( '.mw-collapsible-content' );
 
                // Synchronous - collapsed: true should cause instantHide: true to be used on initial collapsing
                assert.assertTrue( $content.is( ':hidden' ), 'content is hidden' );
        } );
 
        QUnit.test( 'clicks on links inside toggler pass through (options.linksPassthru)' , 2, function ( assert ) {
-               var $collapsible, $content;
-
-               $collapsible = prepareCollapsible(
-                       '<div class="mw-collapsible">' +
-                               '<div class="mw-collapsible-toggle">' +
-                                       'Toggle <a href="#top">toggle</a> toggle <b>toggle</b>' +
-                               '</div>' +
-                               '<div class="mw-collapsible-content">' + loremIpsum + '</div>' +
-                       '</div>',
-                       // Can't do asynchronous because we're testing that the event *doesn't* happen
-                       { instantHide: true }
-               );
-               $content = $collapsible.find( '.mw-collapsible-content' );
+               var $collapsible = prepareCollapsible(
+                               '<div class="mw-collapsible">' +
+                                       '<div class="mw-collapsible-toggle">' +
+                                               'Toggle <a href="#top">toggle</a> toggle <b>toggle</b>' +
+                                       '</div>' +
+                                       '<div class="mw-collapsible-content">' + loremIpsum + '</div>' +
+                               '</div>',
+                               // Can't do asynchronous because we're testing that the event *doesn't* happen
+                               { instantHide: true }
+                       ),
+                       $content = $collapsible.find( '.mw-collapsible-content' );
 
                $collapsible.find( '.mw-collapsible-toggle a' ).trigger( 'click' );
                assert.assertTrue( $content.is( ':visible' ), 'click event on link inside toggle passes through (content not toggled)' );
        } );
 
        QUnit.asyncTest( 'collapse/expand text (data-collapsetext, data-expandtext)', 2, function ( assert ) {
-               var $collapsible, $toggleLink;
-               $collapsible = prepareCollapsible(
-                       '<div class="mw-collapsible" data-collapsetext="Collapse me!" data-expandtext="Expand me!">' +
-                               loremIpsum +
-                       '</div>'
-               );
-               $toggleLink = $collapsible.find( '.mw-collapsible-toggle a' );
+               var $collapsible = prepareCollapsible(
+                               '<div class="mw-collapsible" data-collapsetext="Collapse me!" data-expandtext="Expand me!">' +
+                                       loremIpsum +
+                               '</div>'
+                       ),
+                       $toggleLink = $collapsible.find( '.mw-collapsible-toggle a' );
 
                assert.equal( $toggleLink.text(), 'Collapse me!', 'data-collapsetext is respected' );
 
        } );
 
        QUnit.asyncTest( 'collapse/expand text (options.collapseText, options.expandText)', 2, function ( assert ) {
-               var $collapsible, $toggleLink;
-               $collapsible = prepareCollapsible(
-                       '<div class="mw-collapsible">' + loremIpsum + '</div>',
-                       { collapseText: 'Collapse me!', expandText: 'Expand me!' }
-               );
-               $toggleLink = $collapsible.find( '.mw-collapsible-toggle a' );
+               var $collapsible = prepareCollapsible(
+                               '<div class="mw-collapsible">' + loremIpsum + '</div>',
+                               { collapseText: 'Collapse me!', expandText: 'Expand me!' }
+                       ),
+                       $toggleLink = $collapsible.find( '.mw-collapsible-toggle a' );
 
                assert.equal( $toggleLink.text(), 'Collapse me!', 'options.collapseText is respected' );
 
index f73fd7b..d9801d9 100644 (file)
@@ -1,7 +1,161 @@
 ( function ( $, mw ) {
-       /*jshint onevar: false */
+       var config, header,
 
-       var config = {
+               // Data set "simple"
+               a1 = [ 'A', '1' ],
+               a2 = [ 'A', '2' ],
+               a3 = [ 'A', '3' ],
+               b1 = [ 'B', '1' ],
+               b2 = [ 'B', '2' ],
+               b3 = [ 'B', '3' ],
+               simple = [a2, b3, a1, a3, b2, b1],
+               simpleAsc = [a1, a2, a3, b1, b2, b3],
+               simpleDescasc = [b1, b2, b3, a1, a2, a3],
+
+               // Data set "colspan"
+               aaa1 = [ 'A', 'A', 'A', '1' ],
+               aab5 = [ 'A', 'A', 'B', '5' ],
+               abc3 = [ 'A', 'B', 'C', '3' ],
+               bbc2 = [ 'B', 'B', 'C', '2' ],
+               caa4 = [ 'C', 'A', 'A', '4' ],
+               colspanInitial = [ aab5, aaa1, abc3, bbc2, caa4 ],
+
+               // Data set "planets"
+               mercury = [ 'Mercury', '2439.7' ],
+               venus = [ 'Venus', '6051.8' ],
+               earth = [ 'Earth', '6371.0' ],
+               mars = [ 'Mars', '3390.0' ],
+               jupiter = [ 'Jupiter', '69911' ],
+               saturn = [ 'Saturn', '58232' ],
+               planets = [mercury, venus, earth, mars, jupiter, saturn],
+               planetsAscName = [earth, jupiter, mars, mercury, saturn, venus],
+               planetsAscRadius = [mercury, mars, venus, earth, saturn, jupiter],
+               planetsRowspan,
+               planetsRowspanII,
+               planetsAscNameLegacy,
+
+               // Data set "ipv4"
+               ipv4 = [
+                       // Some randomly generated fake IPs
+                       ['45.238.27.109'],
+                       ['44.172.9.22'],
+                       ['247.240.82.209'],
+                       ['204.204.132.158'],
+                       ['170.38.91.162'],
+                       ['197.219.164.9'],
+                       ['45.68.154.72'],
+                       ['182.195.149.80']
+               ],
+               ipv4Sorted = [
+                       // Sort order should go octet by octet
+                       ['44.172.9.22'],
+                       ['45.68.154.72'],
+                       ['45.238.27.109'],
+                       ['170.38.91.162'],
+                       ['182.195.149.80'],
+                       ['197.219.164.9'],
+                       ['204.204.132.158'],
+                       ['247.240.82.209']
+               ],
+
+               // Data set "umlaut"
+               umlautWords = [
+                       ['Günther'],
+                       ['Peter'],
+                       ['Björn'],
+                       ['Bjorn'],
+                       ['Apfel'],
+                       ['Äpfel'],
+                       ['Strasse'],
+                       ['Sträßschen']
+               ],
+               umlautWordsSorted = [
+                       ['Äpfel'],
+                       ['Apfel'],
+                       ['Björn'],
+                       ['Bjorn'],
+                       ['Günther'],
+                       ['Peter'],
+                       ['Sträßschen'],
+                       ['Strasse']
+               ],
+
+               complexMDYDates = [
+                       ['January, 19 2010'],
+                       ['April 21 1991'],
+                       ['04 22 1991'],
+                       ['5.12.1990'],
+                       ['December 12 \'10']
+               ],
+               complexMDYSorted = [
+                       ['5.12.1990'],
+                       ['April 21 1991'],
+                       ['04 22 1991'],
+                       ['January, 19 2010'],
+                       ['December 12 \'10']
+               ],
+
+               currencyUnsorted = [
+                       ['1.02 $'],
+                       ['$ 3.00'],
+                       ['€ 2,99'],
+                       ['$ 1.00'],
+                       ['$3.50'],
+                       ['$ 1.50'],
+                       ['€ 0.99']
+               ],
+               currencySorted = [
+                       ['€ 0.99'],
+                       ['$ 1.00'],
+                       ['1.02 $'],
+                       ['$ 1.50'],
+                       ['$ 3.00'],
+                       ['$3.50'],
+                       // Comma's sort after dots
+                       // Not intentional but test to detect changes
+                       ['€ 2,99']
+               ],
+
+               numbers = [
+                       [ '12'    ],
+                       [  '7'    ],
+                       [ '13,000'],
+                       [  '9'    ],
+                       [ '14'    ],
+                       [  '8.0'  ]
+               ],
+               numbersAsc = [
+                       [  '7'    ],
+                       [  '8.0'  ],
+                       [  '9'    ],
+                       [ '12'    ],
+                       [ '14'    ],
+                       [ '13,000']
+               ],
+
+               correctDateSorting1 = [
+                       ['01 January 2010'],
+                       ['05 February 2010'],
+                       ['16 January 2010']
+               ],
+               correctDateSortingSorted1 = [
+                       ['01 January 2010'],
+                       ['16 January 2010'],
+                       ['05 February 2010']
+               ],
+
+               correctDateSorting2 = [
+                       ['January 01 2010'],
+                       ['February 05 2010'],
+                       ['January 16 2010']
+               ],
+               correctDateSortingSorted2 = [
+                       ['January 01 2010'],
+                       ['January 16 2010'],
+                       ['February 05 2010']
+               ];
+
+       config = {
                wgMonthNames: ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
                wgMonthNamesShort: ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
                wgDefaultDateFormat: 'dmy',
         */
        function tableTest( msg, header, data, expected, callback ) {
                QUnit.test( msg, 1, function ( assert ) {
-                       var $table = tableCreate( header, data );
+                       var extracted,
+                               $table = tableCreate( header, data );
 
                        // Give caller a chance to set up sorting and manipulate the table.
                        callback( $table );
 
                        // Table sorting is done synchronously; if it ever needs to change back
                        // to asynchronous, we'll need a timeout or a callback here.
-                       var extracted = tableExtract( $table );
+                       extracted = tableExtract( $table );
                        assert.deepEqual( extracted, expected, msg );
                } );
        }
         */
        function tableTestHTML( msg, html, expected, callback ) {
                QUnit.test( msg, 1, function ( assert ) {
-                       var $table = $( html );
+                       var extracted,
+                               $table = $( html );
 
                        // Give caller a chance to set up sorting and manipulate the table.
                        if ( callback ) {
 
                        // Table sorting is done synchronously; if it ever needs to change back
                        // to asynchronous, we'll need a timeout or a callback here.
-                       var extracted = tableExtract( $table );
+                       extracted = tableExtract( $table );
                        assert.deepEqual( extracted, expected, msg );
                } );
        }
        }
 
        // Sample data set using planets named and their radius
-       var header = [ 'Planet' , 'Radius (km)'],
-               mercury = [ 'Mercury', '2439.7' ],
-               venus = [ 'Venus'  , '6051.8' ],
-               earth = [ 'Earth'  , '6371.0' ],
-               mars = [ 'Mars'   , '3390.0' ],
-               jupiter = [ 'Jupiter', '69911' ],
-               saturn = [ 'Saturn' , '58232' ];
-
-       // Initial data set
-       var planets = [mercury, venus, earth, mars, jupiter, saturn];
-       var ascendingName = [earth, jupiter, mars, mercury, saturn, venus];
-       var ascendingRadius = [mercury, mars, venus, earth, saturn, jupiter];
+       header = [ 'Planet', 'Radius (km)'];
 
        tableTest(
                'Basic planet table: sorting initially - ascending by name',
                header,
                planets,
-               ascendingName,
+               planetsAscName,
                function ( $table ) {
                        $table.tablesorter( { sortList: [
                                { 0: 'asc' }
                'Basic planet table: sorting initially - descending by radius',
                header,
                planets,
-               reversed( ascendingRadius ),
+               reversed( planetsAscRadius ),
                function ( $table ) {
                        $table.tablesorter( { sortList: [
                                { 1: 'desc' }
                'Basic planet table: ascending by name',
                header,
                planets,
-               ascendingName,
+               planetsAscName,
                function ( $table ) {
                        $table.tablesorter();
                        $table.find( '.headerSort:eq(0)' ).click();
                'Basic planet table: ascending by name a second time',
                header,
                planets,
-               ascendingName,
+               planetsAscName,
                function ( $table ) {
                        $table.tablesorter();
                        $table.find( '.headerSort:eq(0)' ).click();
                'Basic planet table: ascending by name (multiple clicks)',
                header,
                planets,
-               ascendingName,
+               planetsAscName,
                function ( $table ) {
                        $table.tablesorter();
                        $table.find( '.headerSort:eq(0)' ).click();
                'Basic planet table: descending by name',
                header,
                planets,
-               reversed( ascendingName ),
+               reversed( planetsAscName ),
                function ( $table ) {
                        $table.tablesorter();
                        $table.find( '.headerSort:eq(0)' ).click().click();
                'Basic planet table: ascending radius',
                header,
                planets,
-               ascendingRadius,
+               planetsAscRadius,
                function ( $table ) {
                        $table.tablesorter();
                        $table.find( '.headerSort:eq(1)' ).click();
                'Basic planet table: descending radius',
                header,
                planets,
-               reversed( ascendingRadius ),
+               reversed( planetsAscRadius ),
                function ( $table ) {
                        $table.tablesorter();
                        $table.find( '.headerSort:eq(1)' ).click().click();
                }
        );
 
-       // Sample data set to test multiple column sorting
-       header = [ 'column1' , 'column2'];
-       var
-               a1 = [ 'A', '1' ],
-               a2 = [ 'A', '2' ],
-               a3 = [ 'A', '3' ],
-               b1 = [ 'B', '1' ],
-               b2 = [ 'B', '2' ],
-               b3 = [ 'B', '3' ];
-       var initial = [a2, b3, a1, a3, b2, b1];
-       var asc = [a1, a2, a3, b1, b2, b3];
-       var descasc = [b1, b2, b3, a1, a2, a3];
+       header = [ 'column1', 'column2' ];
 
        tableTest(
                'Sorting multiple columns by passing sort list',
                header,
-               initial,
-               asc,
+               simple,
+               simpleAsc,
                function ( $table ) {
                        $table.tablesorter(
                                { sortList: [
        tableTest(
                'Sorting multiple columns by programmatically triggering sort()',
                header,
-               initial,
-               descasc,
+               simple,
+               simpleDescasc,
                function ( $table ) {
                        $table.tablesorter();
                        $table.data( 'tablesorter' ).sort(
        tableTest(
                'Reset to initial sorting by triggering sort() without any parameters',
                header,
-               initial,
-               asc,
+               simple,
+               simpleAsc,
                function ( $table ) {
                        $table.tablesorter(
                                { sortList: [
        tableTest(
                'Sort via click event after having initialized the tablesorter with initial sorting',
                header,
-               initial,
-               descasc,
+               simple,
+               simpleDescasc,
                function ( $table ) {
                        $table.tablesorter(
                                { sortList: [ { 0: 'asc' }, { 1: 'asc' } ] }
        tableTest(
                'Multi-sort via click event after having initialized the tablesorter with initial sorting',
                header,
-               initial,
-               asc,
+               simple,
+               simpleAsc,
                function ( $table ) {
                        $table.tablesorter(
                                { sortList: [ { 0: 'desc' }, { 1: 'desc' } ] }
                }
        );
        QUnit.test( 'Reset sorting making table appear unsorted', 3, function ( assert ) {
-               var $table = tableCreate( header, initial );
+               var $table = tableCreate( header, simple );
                $table.tablesorter(
                        { sortList: [
                                { 0: 'desc' },
        } );
 
        // Sorting with colspans
-       header = [ 'column1a' , 'column1b', 'column1c', 'column2' ];
-       var
-               aaa1 = [ 'A', 'A', 'A', '1' ],
-               aab5 = [ 'A', 'A', 'B', '5' ],
-               abc3 = [ 'A', 'B', 'C', '3' ],
-               bbc2 = [ 'B', 'B', 'C', '2' ],
-               caa4 = [ 'C', 'A', 'A', '4' ];
-       // initial is already declared above
-       initial = [ aab5, aaa1, abc3, bbc2, caa4 ];
+       header = [ 'column1a', 'column1b', 'column1c', 'column2' ];
+
        tableTest( 'Sorting with colspanned headers: spanned column',
                header,
-               initial,
+               colspanInitial,
                [ aaa1, aab5, abc3, bbc2, caa4 ],
                function ( $table ) {
                        // Make colspanned header for test
        );
        tableTest( 'Sorting with colspanned headers: sort spanned column twice',
                header,
-               initial,
+               colspanInitial,
                [ caa4, bbc2, abc3, aab5, aaa1 ],
                function ( $table ) {
                        // Make colspanned header for test
        );
        tableTest( 'Sorting with colspanned headers: subsequent column',
                header,
-               initial,
+               colspanInitial,
                [ aaa1, bbc2, abc3, caa4, aab5 ],
                function ( $table ) {
                        // Make colspanned header for test
        );
        tableTest( 'Sorting with colspanned headers: sort subsequent column twice',
                header,
-               initial,
+               colspanInitial,
                [ aab5, caa4, abc3, bbc2, aaa1 ],
                function ( $table ) {
                        // Make colspanned header for test
                }
        );
 
-
        tableTest(
                'Basic planet table: one unsortable column',
                header,
                }
        );
 
-       var ipv4 = [
-               // Some randomly generated fake IPs
-               ['45.238.27.109'],
-               ['44.172.9.22'],
-               ['247.240.82.209'],
-               ['204.204.132.158'],
-               ['170.38.91.162'],
-               ['197.219.164.9'],
-               ['45.68.154.72'],
-               ['182.195.149.80']
-       ];
-       var ipv4Sorted = [
-               // Sort order should go octet by octet
-               ['44.172.9.22'],
-               ['45.68.154.72'],
-               ['45.238.27.109'],
-               ['170.38.91.162'],
-               ['182.195.149.80'],
-               ['197.219.164.9'],
-               ['204.204.132.158'],
-               ['247.240.82.209']
-       ];
-
        tableTest(
                'Bug 17141: IPv4 address sorting',
                ['IP'],
                }
        );
 
-       var umlautWords = [
-               // Some words with Umlauts
-               ['Günther'],
-               ['Peter'],
-               ['Björn'],
-               ['Bjorn'],
-               ['Apfel'],
-               ['Äpfel'],
-               ['Strasse'],
-               ['Sträßschen']
-       ];
-
-       var umlautWordsSorted = [
-               // Some words with Umlauts
-               ['Äpfel'],
-               ['Apfel'],
-               ['Björn'],
-               ['Bjorn'],
-               ['Günther'],
-               ['Peter'],
-               ['Sträßschen'],
-               ['Strasse']
-       ];
-
        tableTest(
                'Accented Characters with custom collation',
                ['Name'],
                );
        } );
 
-       var planetsRowspan = [
+       planetsRowspan = [
                [ 'Earth', '6051.8' ],
                jupiter,
                [ 'Mars', '6051.8' ],
                saturn,
                venus
        ];
-       var planetsRowspanII = [ jupiter, mercury, saturn, venus, [ 'Venus', '6371.0' ], [ 'Venus', '3390.0' ] ];
+       planetsRowspanII = [ jupiter, mercury, saturn, venus, [ 'Venus', '6371.0' ], [ 'Venus', '3390.0' ] ];
 
        tableTest(
                'Basic planet table: same value for multiple rows via rowspan',
                }
        );
 
-       var complexMDYDates = [
-               // Some words with Umlauts
-               ['January, 19 2010'],
-               ['April 21 1991'],
-               ['04 22 1991'],
-               ['5.12.1990'],
-               ['December 12 \'10']
-       ];
-
-       var complexMDYSorted = [
-               ['5.12.1990'],
-               ['April 21 1991'],
-               ['04 22 1991'],
-               ['January, 19 2010'],
-               ['December 12 \'10']
-       ];
-
        tableTest(
                'Complex date parsing I',
                ['date'],
                }
        );
 
-       var currencyUnsorted = [
-               ['1.02 $'],
-               ['$ 3.00'],
-               ['€ 2,99'],
-               ['$ 1.00'],
-               ['$3.50'],
-               ['$ 1.50'],
-               ['€ 0.99']
-       ];
-
-       var currencySorted = [
-               ['€ 0.99'],
-               ['$ 1.00'],
-               ['1.02 $'],
-               ['$ 1.50'],
-               ['$ 3.00'],
-               ['$3.50'],
-               // Comma's sort after dots
-               // Not intentional but test to detect changes
-               ['€ 2,99']
-       ];
-
        tableTest(
                'Currency parsing I',
                ['currency'],
                }
        );
 
-       var ascendingNameLegacy = ascendingName.slice( 0 );
-       ascendingNameLegacy[4] = ascendingNameLegacy[5];
-       ascendingNameLegacy.pop();
+       planetsAscNameLegacy = planetsAscName.slice( 0 );
+       planetsAscNameLegacy[4] = planetsAscNameLegacy[5];
+       planetsAscNameLegacy.pop();
 
        tableTest(
                'Legacy compat with .sortbottom',
                header,
                planets,
-               ascendingNameLegacy,
+               planetsAscNameLegacy,
                function ( $table ) {
                        $table.find( 'tr:last' ).addClass( 'sortbottom' );
                        $table.tablesorter();
 
        } );
 
-       var numbers = [
-               [ '12'    ],
-               [  '7'    ],
-               [ '13,000'],
-               [  '9'    ],
-               [ '14'    ],
-               [  '8.0'  ]
-       ];
-       var numbersAsc = [
-               [  '7'    ],
-               [  '8.0'  ],
-               [  '9'    ],
-               [ '12'    ],
-               [ '14'    ],
-               [ '13,000']
-       ];
-
        tableTest( 'bug 8115: sort numbers with commas (ascending)',
                ['Numbers'], numbers, numbersAsc,
                function ( $table ) {
                );
        } );
 
-
-       var correctDateSorting1 = [
-               ['01 January 2010'],
-               ['05 February 2010'],
-               ['16 January 2010']
-       ];
-
-       var correctDateSortingSorted1 = [
-               ['01 January 2010'],
-               ['16 January 2010'],
-               ['05 February 2010']
-       ];
-
        tableTest(
                'Correct date sorting I',
                ['date'],
                }
        );
 
-       var correctDateSorting2 = [
-               ['January 01 2010'],
-               ['February 05 2010'],
-               ['January 16 2010']
-       ];
-
-       var correctDateSortingSorted2 = [
-               ['January 01 2010'],
-               ['January 16 2010'],
-               ['February 05 2010']
-       ];
-
        tableTest(
                'Correct date sorting II',
                ['date'],
                );
        } );
 
+       QUnit.test( 'holes in the table headers should not throw JS errors', 2, function ( assert ) {
+               var $table = $(
+                       '<table class="sortable">' +
+                               '<thead>' +
+                               '<tr><th id="A1">A1</th><th>B1</th><th id="C1" rowspan="2">C1</th></tr>' +
+                               '<tr><th id="A2">A2</th></tr>' +
+                               '</thead>' +
+                               '<tr><td>A</td><td>Aa</td><td>Aaa</td></tr>' +
+                               '<tr><td>B</td><td>Ba</td><td>Bbb</td></tr>' +
+                               '</table>'
+               );
+               $table.tablesorter();
+               assert.equal( 0,
+                       $table.find( '#A2' ).prop( 'headerIndex' ),
+                       'A2 should be a sort header'
+               );
+               assert.equal( 1, // should be 2
+                       $table.find( '#C1' ).prop( 'headerIndex' ),
+                       'C1 should be a sort header, but will sort the wrong column'
+               );
+       } );
+
        // bug 41889 - exploding rowspans in more complex cases
        tableTestHTML(
                'Rowspan exploding with row headers',
                ]
        );
 
+       // bug 53211 - exploding rowspans in more complex cases
+       QUnit.test(
+               'Rowspan exploding with row headers and colspans', 1, function ( assert ) {
+               var $table = $( '<table class="sortable">' +
+                       '<thead><tr><th rowspan="2">n</th><th colspan="2">foo</th><th rowspan="2">baz</th></tr>' +
+                       '<tr><th>foo</th><th>bar</th></tr></thead>' +
+                       '<tbody>' +
+                       '<tr><td>1</td><td>foo</td><td>bar</td><td>baz</td></tr>' +
+                       '<tr><td>2</td><td>foo</td><td>bar</td><td>baz</td></tr>' +
+                       '</tbody></table>' );
+
+                       $table.tablesorter();
+                       assert.equal( 2, $table.find( 'tr:eq(1) th:eq(1)').prop('headerIndex'), 'Incorrect index of sort header' );
+               }
+       );
+
        tableTestHTML(
                'Rowspan exploding with colspanned cells',
                '<table class="sortable">' +
index 2bed9b9..70bcaf9 100644 (file)
@@ -1,28 +1,29 @@
-( function ( mw, $ ) {
-       QUnit.module( 'mediawiki.api.parse', QUnit.newMwEnvironment() );
+( function ( mw ) {
+       QUnit.module( 'mediawiki.api.parse', QUnit.newMwEnvironment( {
+               setup: function () {
+                       this.clock = this.sandbox.useFakeTimers();
+                       this.server = this.sandbox.useFakeServer();
+               },
+               teardown: function () {
+                       this.clock.tick( 1 );
+               }
+       } ) );
 
-       QUnit.asyncTest( 'Hello world', function ( assert ) {
-               var api;
-               QUnit.expect( 6 );
+       QUnit.test( 'Hello world', function ( assert ) {
+               QUnit.expect( 1 );
 
-               api = new mw.Api();
+               var api = new mw.Api();
 
-               api.parse( '\'\'\'Hello world\'\'\'' )
-                       .done( function ( html ) {
-                               // Parse into a document fragment instead of comparing HTML, due to
-                               // presence of Tidy influencing whitespace.
-                               // Html also contains "NewPP report" comment.
-                               var $res = $( '<div>' ).html( html ).children(),
-                                       res = $res.get( 0 );
-                               assert.equal( $res.length, 1, 'Response contains 1 element' );
-                               assert.equal( res.nodeName.toLowerCase(), 'p', 'Response is a paragraph' );
-                               assert.equal( $res.children().length, 1, 'Response has 1 child element' );
-                               assert.equal( $res.children().get( 0 ).nodeName.toLowerCase(), 'b', 'Child element is a bold tag' );
-                               // Trim since Tidy may or may not mess with the spacing here
-                               assert.equal( $.trim( $res.text() ), 'Hello world', 'Response contains given text' );
-                               assert.equal( $res.find( 'b' ).text(), 'Hello world', 'Bold tag wraps the entire, same, text' );
+               api.parse( '\'\'\'Hello world\'\'\'' ).done( function ( html ) {
+                       assert.equal( html, '<p><b>Hello world</b></p>' );
+               } );
 
-                               QUnit.start();
-                       } );
+               this.server.respondWith( /action=parse.*&text='''Hello\+world'''/, function ( request ) {
+                       request.respond( 200, { 'Content-Type': 'application/json' },
+                               '{ "parse": { "text": { "*": "<p><b>Hello world</b></p>" } } }'
+                       );
+               } );
+
+               this.server.respond();
        } );
-}( mediaWiki, jQuery ) );
+}( mediaWiki ) );
index 9eda75c..2ad7622 100644 (file)
@@ -1,61 +1,84 @@
 ( function ( mw ) {
-       QUnit.module( 'mediawiki.api', QUnit.newMwEnvironment() );
+       QUnit.module( 'mediawiki.api', QUnit.newMwEnvironment( {
+               setup: function () {
+                       this.clock = this.sandbox.useFakeTimers();
+                       this.server = this.sandbox.useFakeServer();
+               },
+               teardown: function () {
+                       this.clock.tick( 1 );
+               }
+       } ) );
 
-       QUnit.asyncTest( 'Basic functionality', function ( assert ) {
-               var api, d1, d2, d3;
-               QUnit.expect( 3 );
+       QUnit.test( 'Basic functionality', function ( assert ) {
+               QUnit.expect( 2 );
 
-               api = new mw.Api();
+               var api = new mw.Api();
 
-               d1 = api.get( {} )
+               api.get( {} )
                        .done( function ( data ) {
                                assert.deepEqual( data, [], 'If request succeeds without errors, resolve deferred' );
                        } );
 
-               d2 = api.get( {
-                       action: 'doesntexist'
-               } )
-                       .fail( function ( errorCode ) {
-                               assert.equal( errorCode, 'unknown_action', 'API error (e.g. "unknown_action") should reject the deferred' );
-                       } );
-
-               d3 = api.post( {} )
+               api.post( {} )
                        .done( function ( data ) {
                                assert.deepEqual( data, [], 'Simple POST request' );
                        } );
 
-               // After all are completed, continue the test suite.
-               QUnit.whenPromisesComplete( d1, d2, d3 ).always( function () {
-                       QUnit.start();
+               this.server.respond( function ( request ) {
+                       request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
                } );
        } );
 
-       QUnit.asyncTest( 'Deprecated callback methods', function ( assert ) {
-               var api, d1, d2, d3;
+
+       QUnit.test( 'API error', function ( assert ) {
+               QUnit.expect( 1 );
+
+               var api = new mw.Api();
+
+               api.get( { action: 'doesntexist' } )
+                       .fail( function ( errorCode ) {
+                               assert.equal( errorCode, 'unknown_action', 'API error should reject the deferred' );
+                       } );
+
+               this.server.respond( function ( request ) {
+                       request.respond( 200, { 'Content-Type': 'application/json' },
+                               '{ "error": { "code": "unknown_action" } }'
+                       );
+               } );
+       } );
+
+       QUnit.test( 'Deprecated callback methods', function ( assert ) {
                QUnit.expect( 3 );
 
-               api = new mw.Api();
+               var api = new mw.Api();
 
-               d1 = api.get( {}, function () {
+               api.get( {}, function () {
                        assert.ok( true, 'Function argument treated as success callback.' );
                } );
 
-               d2 = api.get( {}, {
+               api.get( {}, {
                        ok: function () {
                                assert.ok( true, '"ok" property treated as success callback.' );
                        }
                } );
 
-               d3 = api.get( {
-                       action: 'doesntexist'
-               }, {
+               api.get( { action: 'doesntexist' }, {
                        err: function () {
                                assert.ok( true, '"err" property treated as error callback.' );
                        }
                } );
 
-               QUnit.whenPromisesComplete( d1, d2, d3 ).always( function () {
-                       QUnit.start();
+               this.server.respondWith( /action=query/, function ( request ) {
+                       request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
                } );
+
+               this.server.respondWith( /action=doesntexist/, function ( request ) {
+                       request.respond( 200, { 'Content-Type': 'application/json' },
+                               '{ "error": { "code": "unknown_action" } }'
+                       );
+               } );
+
+               this.server.respond();
        } );
+
 }( mediaWiki ) );
diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.watch.test.js b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.watch.test.js
new file mode 100644 (file)
index 0000000..e178090
--- /dev/null
@@ -0,0 +1,50 @@
+( function ( mw ) {
+       QUnit.module( 'mediawiki.api.watch', QUnit.newMwEnvironment( {
+               setup: function () {
+                       this.clock = this.sandbox.useFakeTimers();
+                       this.server = this.sandbox.useFakeServer();
+               },
+               teardown: function () {
+                       this.clock.tick( 1 );
+               }
+       } ) );
+
+       QUnit.test( '.watch()', function ( assert ) {
+               QUnit.expect( 4 );
+
+               var api = new mw.Api();
+
+               // Ensure we don't mistake a single item array for a single item and vice versa.
+               // The query parameter in request is the same either way (separated by pipe).
+               api.watch( 'Foo' ).done( function ( item ) {
+                       assert.equal( item.title, 'Foo' );
+               } );
+
+               api.watch( [ 'Foo' ] ).done( function ( items ) {
+                       assert.equal( items[0].title, 'Foo' );
+               } );
+
+               api.watch( [ 'Foo', 'Bar' ] ).done( function ( items ) {
+                       assert.equal( items[0].title, 'Foo' );
+                       assert.equal( items[1].title, 'Bar' );
+               } );
+
+               // Requests are POST, match requestBody instead of url
+               this.server.respond( function ( req ) {
+                       if ( /action=watch.*&titles=Foo(&|$)/.test( req.requestBody ) ) {
+                               req.respond( 200, { 'Content-Type': 'application/json' },
+                                       '{ "watch": [ { "title": "Foo", "watched": true, "message": "<b>Added</b>" } ] }'
+                               );
+                       }
+
+                       if ( /action=watch.*&titles=Foo%7CBar/.test( req.requestBody ) ) {
+                               req.respond( 200, { 'Content-Type': 'application/json' },
+                                       '{ "watch": [ ' +
+                                               '{ "title": "Foo", "watched": true, "message": "<b>Added</b>" },' +
+                                               '{ "title": "Bar", "watched": true, "message": "<b>Added</b>" }' +
+                                               '] }'
+                               );
+                       }
+               } );
+       } );
+}( mediaWiki ) );
index 6e13e13..292c576 100644 (file)
@@ -17,6 +17,7 @@
                                // The values for gender are not significant,
                                // what matters is which of the values is choosen by the parser
                                'gender-msg': '$1: {{GENDER:$2|blue|pink|green}}',
+                               'gender-msg-currentuser': '{{GENDER:|blue|pink|green}}',
 
                                'plural-msg': 'Found $1 {{PLURAL:$1|item|items}}',
 
                assert.equal( formatParse( 'plural-msg', 2 ), 'Found 2 items', 'Plural test for english' );
        } );
 
-       QUnit.test( 'Gender', 11, function ( assert ) {
+       QUnit.test( 'Gender', 15, function ( assert ) {
+               var originalGender = mw.user.options.get( 'gender' );
+
                // 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
-               var user = mw.user;
-
-               user.options.set( 'gender', 'male' );
+               mw.user.options.set( 'gender', 'male' );
                assert.equal(
                        formatParse( 'gender-msg', 'Bob', 'male' ),
                        'Bob: blue',
                        'Masculine from string "male"'
                );
                assert.equal(
-                       formatParse( 'gender-msg', 'Bob', user ),
+                       formatParse( 'gender-msg', 'Bob', mw.user ),
                        'Bob: blue',
                        'Masculine from mw.user object'
                );
-
-               user.options.set( 'gender', 'unknown' );
                assert.equal(
-                       formatParse( 'gender-msg', 'Foo', user ),
-                       'Foo: green',
-                       'Neutral from mw.user object' );
+                       formatParse( 'gender-msg-currentuser' ),
+                       'blue',
+                       'Masculine for current user'
+               );
+
+               mw.user.options.set( 'gender', 'female' );
                assert.equal(
                        formatParse( 'gender-msg', 'Alice', 'female' ),
                        'Alice: pink',
                        'Feminine from string "female"' );
+               assert.equal(
+                       formatParse( 'gender-msg', 'Alice', mw.user ),
+                       'Alice: pink',
+                       'Feminine from mw.user object'
+               );
+               assert.equal(
+                       formatParse( 'gender-msg-currentuser' ),
+                       'pink',
+                       'Feminine for current user'
+               );
+
+               mw.user.options.set( 'gender', 'unknown' );
+               assert.equal(
+                       formatParse( 'gender-msg', 'Foo', mw.user ),
+                       'Foo: green',
+                       'Neutral from mw.user object' );
                assert.equal(
                        formatParse( 'gender-msg', 'User' ),
                        'User: green',
                        'User: green',
                        'Neutral from string "unknown"'
                );
+               assert.equal(
+                       formatParse( 'gender-msg-currentuser' ),
+                       'green',
+                       'Neutral for current user'
+               );
 
                mw.messages.set( 'gender-msg-one-form', '{{GENDER:$1|User}}: $2 {{PLURAL:$2|edit|edits}}' );
 
                        ' test',
                        'Invalid syntax should result in {{gender}} simply being stripped away'
                );
+
+               mw.user.options.set( 'gender', originalGender );
        } );
 
        QUnit.test( 'Grammar', 2, function ( assert ) {
index f4433f4..1d9cf30 100644 (file)
@@ -419,7 +419,7 @@ class TestFileIterator implements Iterator {
                        $this->lineNum++;
                        $matches = array();
 
-                       if ( preg_match( '/^!!\s*(\w+)/', $line, $matches ) ) {
+                       if ( preg_match( '/^!!\s*(\S+)/', $line, $matches ) ) {
                                $this->section = strtolower( $matches[1] );
 
                                if ( $this->section == 'endarticle' ) {
@@ -467,8 +467,10 @@ class TestFileIterator implements Iterator {
 
                                if ( $this->section == 'end' ) {
                                        $this->checkSection( 'test' );
-                                       $this->checkSection( 'input' );
-                                       $this->checkSection( 'result' );
+                                       // "input" and "result" are old section names allowed
+                                       // for backwards-compatibility.
+                                       $input = $this->checkSection( array( 'wikitext', 'input' ), false );
+                                       $result = $this->checkSection( array( 'html/php', 'html/*', 'html', 'result' ), false );
 
                                        if ( !isset( $this->sectionData['options'] ) ) {
                                                $this->sectionData['options'] = '';
@@ -478,8 +480,9 @@ class TestFileIterator implements Iterator {
                                                $this->sectionData['config'] = '';
                                        }
 
-                                       if ( ( ( preg_match( '/\\bdisabled\\b/i', $this->sectionData['options'] ) && !$this->parserTest->runDisabled )
-                                               || ( preg_match( '/\\bparsoid\\b/i', $this->sectionData['options'] ) && !$this->parserTest->runParsoid )
+                                       if ( $input == false || $result == false ||
+                                                ( ( preg_match( '/\\bdisabled\\b/i', $this->sectionData['options'] ) && !$this->parserTest->runDisabled )
+                                               || ( preg_match( '/\\bparsoid\\b/i', $this->sectionData['options'] ) && $result != 'html/php' && !$this->parserTest->runParsoid )
                                                || !preg_match( "/" . $this->parserTest->regex . "/i", $this->sectionData['test'] ) )
                                        ) {
                                                # disabled test
@@ -501,8 +504,8 @@ class TestFileIterator implements Iterator {
 
                                        $this->test = array(
                                                'test' => ParserTest::chomp( $this->sectionData['test'] ),
-                                               'input' => ParserTest::chomp( $this->sectionData['input'] ),
-                                               'result' => ParserTest::chomp( $this->sectionData['result'] ),
+                                               'input' => ParserTest::chomp( $this->sectionData[ $input ] ),
+                                               'result' => ParserTest::chomp( $this->sectionData[ $result ] ),
                                                'options' => ParserTest::chomp( $this->sectionData['options'] ),
                                                'config' => ParserTest::chomp( $this->sectionData['config'] ),
                                        );
@@ -538,27 +541,55 @@ class TestFileIterator implements Iterator {
 
        /**
         * Verify the current section data has some value for the given token
-        * name (first parameter).
+        * name(s) (first parameter).
         * Throw an exception if it is not set, referencing current section
         * and adding the current file name and line number
         *
-        * @param $token String: expected token that should have been mentionned before closing this section
+        * @param $token String|Array: expected token(s) that should have been
+        * mentioned before closing this section
+        * @param $fatal Boolean: true iff an exception should be thrown if
+        * the section is not found.
         */
-       private function checkSection( $token ) {
+       private function checkSection( $tokens, $fatal = true ) {
                if ( is_null( $this->section ) ) {
                        throw new MWException( __METHOD__ . " can not verify a null section!\n" );
                }
+               if ( !is_array( $tokens ) ) {
+                       $tokens = array( $tokens );
+               }
+               if ( count( $tokens ) == 0 ) {
+                       throw new MWException( __METHOD__ . " can not verify zero sections!\n" );
+               }
 
-               if ( !isset( $this->sectionData[$token] ) ) {
+               $data = $this->sectionData;
+               $tokens = array_filter( $tokens, function ( $token ) use ( $data ) {
+                       return isset( $data[ $token ] );
+               } );
+
+               if ( count( $tokens ) == 0 ) {
+                       if ( !$fatal ) {
+                               return false;
+                       }
                        throw new MWException( sprintf(
                                "'%s' without '%s' at line %s of %s\n",
                                $this->section,
-                               $token,
+                               implode( ',', $tokens ),
                                $this->lineNum,
                                $this->file
                        ) );
                }
-               return true;
+               if ( count( $tokens ) > 1 ) {
+                       throw new MWException( sprintf(
+                               "'%s' with unexpected tokens '%s' at line %s of %s\n",
+                               $this->section,
+                               implode( ',', $tokens ),
+                               $this->lineNum,
+                               $this->file
+                       ) );
+               }
+
+               $tokens = array_values( $tokens );
+               return $tokens[ 0 ];
        }
 }
 
index ad5239e..88aecbd 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -307,6 +307,9 @@ function wfStreamThumb( array $params ) {
        if ( $user->pingLimiter( 'renderfile' ) ) {
                wfThumbError( 500, wfMessage( 'actionthrottledtext' ) );
                return;
+       } elseif ( wfThumbIsAttemptThrottled( $img, $thumbName, 5 ) ) {
+               wfThumbError( 500, wfMessage( 'thumbnail_image-failure-limit', 5 ) );
+               return;
        }
 
        // Thumbnail isn't already there, so create the new thumbnail...
@@ -332,6 +335,7 @@ function wfStreamThumb( array $params ) {
        }
 
        if ( $errorMsg !== false ) {
+               wfThumbIncrAttemptFailures( $img, $thumbName );
                wfThumbError( 500, $errorMsg );
        } else {
                // Stream the file if there were no errors
@@ -339,6 +343,45 @@ function wfStreamThumb( array $params ) {
        }
 }
 
+/**
+ * @param File $img
+ * @param string $thumbName
+ * @param int $limit
+ * @return int|bool
+ */
+function wfThumbIsAttemptThrottled( File $img, $thumbName, $limit ) {
+       global $wgMemc;
+
+       return ( $wgMemc->get( wfThumbAttemptKey( $img, $thumbName ) ) >= $limit );
+}
+
+/**
+ * @param File $img
+ * @param string $thumbName
+ */
+function wfThumbIncrAttemptFailures( File $img, $thumbName ) {
+       global $wgMemc;
+
+       $key = wfThumbAttemptKey( $img, $thumbName );
+       if ( !$wgMemc->incr( $key, 1 ) ) {
+               if ( !$wgMemc->add( $key, 1, 3600 ) ) {
+                       $wgMemc->incr( $key, 1 );
+               }
+       }
+}
+
+/**
+ * @param File $img
+ * @param string $thumbName
+ * @return string
+ */
+function wfThumbAttemptKey( File $img, $thumbName ) {
+       global $wgAttemptFailureEpoch;
+
+       return wfMemcKey( 'attempt-failures', $wgAttemptFailureEpoch,
+               $img->getRepo()->getName(), md5( $img->getName() ), md5( $thumbName ) );
+}
+
 /**
  * Convert pathinfo type parameter, into normal request parameters
  *